Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pP6vD-000210-JC for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Feb 2023 19:13:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pP6vC-0002BI-EA for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Feb 2023 19:12:58 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pP6vB-0002Aw-LL for pgsql-hackers@lists.postgresql.org; Mon, 06 Feb 2023 19:12:57 +0000 Received: from smtp-fw-6001.amazon.com ([52.95.48.154]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pP6v8-0004am-IS for pgsql-hackers@postgresql.org; Mon, 06 Feb 2023 19:12:57 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1675710775; x=1707246775; h=from:to:cc:date:message-id:references:in-reply-to: mime-version:subject; bh=bd8eviSF3/wB4xVmnJMhw+/jpOlJi4pCKnEGDzqXFUg=; b=Y/AhdrqCnYb/ULFnwVJAcnold/hJRYD+FfeVf3L/P1DokSqIR1CWlfGR 8kvK+R+nl/4Qu2whNDyAkgYJUHKQeuvMm97A7AW9Zc/2pidtij8GMFeHr I4tke1RpXmgPWkZ1Wke92DFgL/qQXbWxB7c23zpKidScJSKLlGy+3Jb/q Y=; X-Amazon-filename: slru_to_buffer_cache_with_page_headers_v5.patch X-IronPort-AV: E=Sophos;i="5.97,276,1669075200"; d="scan'208,223";a="295893814" Subject: Re: SLRUs in the main buffer pool - Page Header definitions Thread-Topic: SLRUs in the main buffer pool - Page Header definitions Received: from iad12-co-svc-p1-lb1-vlan2.amazon.com (HELO email-inbound-relay-iad-1e-m6i4x-7dc0ecf1.us-east-1.amazon.com) ([10.43.8.2]) by smtp-border-fw-6001.iad6.amazon.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 06 Feb 2023 19:12:52 +0000 Received: from EX13MTAUWB001.ant.amazon.com (iad12-ws-svc-p26-lb9-vlan2.iad.amazon.com [10.40.163.34]) by email-inbound-relay-iad-1e-m6i4x-7dc0ecf1.us-east-1.amazon.com (Postfix) with ESMTPS id 5EC6C81535; Mon, 6 Feb 2023 19:12:50 +0000 (UTC) Received: from EX19D005UWA002.ant.amazon.com (10.13.138.215) by EX13MTAUWB001.ant.amazon.com (10.43.161.249) with Microsoft SMTP Server (TLS) id 15.0.1497.45; Mon, 6 Feb 2023 19:12:49 +0000 Received: from EX19D035UEA003.ant.amazon.com (10.252.134.113) by EX19D005UWA002.ant.amazon.com (10.13.138.215) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.24; Mon, 6 Feb 2023 19:12:48 +0000 Received: from EX19D035UEA003.ant.amazon.com ([fe80::b768:c926:7fea:2016]) by EX19D035UEA003.ant.amazon.com ([fe80::b768:c926:7fea:2016%3]) with mapi id 15.02.1118.024; Mon, 6 Feb 2023 19:12:48 +0000 From: "Bagga, Rishu" To: pgsql-hackers CC: Heikki Linnakangas , Thomas Munro , "Debnath, Shawn" , vignesh C Thread-Index: AQHYhnvxezKTgPNs7k2tXj3iuMBOO630OQiAgDqHS4CAHByDAIAlRqyAgB23l4CACt7JgIAqcQcA Date: Mon, 6 Feb 2023 19:12:47 +0000 Message-ID: <7BAF384A-654C-4877-BB4D-EDE4E44A9326@amazon.com> References: <7C4D53F1-A156-4ABC-9B89-B2C253D5FF74@amazon.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [10.187.170.29] Content-Type: multipart/mixed; boundary="_002_7BAF384A654C4877BB4DEDE4E44A9326amazoncom_" MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_7BAF384A654C4877BB4DEDE4E44A9326amazoncom_ Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 PiBIaSBhbGwsDQoNCj4gUmViYXNlZCB0aGUgcGF0Y2gsIGFuZCBmaXhlZCBhIGJ1ZyBJIGludHJv ZHVjZWQgaW4gdGhlIHByZXZpb3VzIHBhdGNoIA0KPiBpbiANCj4gVHJpbUNMT0cuIA0KDQo+IExv b2tpbmcgZm9yd2FyZCB0byB5b3VyIGZlZWRiYWNrIG9uIHRoaXMuDQoNCg0KSGkgYWxsLCANCg0K UmViYXNlZCBwYXRjaCBhcyBwZXIgbGF0ZXN0IGNvbW11bml0eSBjaGFuZ2VzIHNpbmNlIGxhc3Qg ZW1haWwuIA0KDQoNClNpbmNlcmVseSwNCg0KUmlzaHUgQmFnZ2EsIEFtYXpvbiBXZWIgU2Vydmlj ZXMgKEFXUykNCg0KDQo= --_002_7BAF384A654C4877BB4DEDE4E44A9326amazoncom_ Content-Type: application/octet-stream; name="slru_to_buffer_cache_with_page_headers_v5.patch" Content-Description: slru_to_buffer_cache_with_page_headers_v5.patch Content-Disposition: attachment; filename="slru_to_buffer_cache_with_page_headers_v5.patch"; size=356340; creation-date="Mon, 06 Feb 2023 19:12:46 GMT"; modification-date="Mon, 06 Feb 2023 19:12:46 GMT" Content-ID: <33F4AB9F5170CA4CB0AF60C543C3A3B4@amazon.com> Content-Transfer-Encoding: base64 RnJvbSAwOThmMzdjMGExN2ZjMzJhOTRiZmY0MzgxNzQxNGUwMWZjZmIyMzRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSaXNodSBCYWdnYSA8YmFncmlzaHVAYW1hem9uLmNvbT4KRGF0 ZTogVGh1LCAxNSBTZXAgMjAyMiAwMDo1NToyNSArMDAwMApTdWJqZWN0OiBbUEFUQ0hdIHNscnUg dG8gYnVmZmVyY2FjaGUgKyBwYWdlIGhlYWRlcnMgKyB1cGdyYWRlCgotLS0KIGNvbnRyaWIvYW1j aGVjay92ZXJpZnlfbmJ0cmVlLmMgICAgICAgICAgICAgfCAgICAyICstCiBjb250cmliL2Jsb29t L2JsaW5zZXJ0LmMgICAgICAgICAgICAgICAgICAgIHwgICAgNiArLQogY29udHJpYi9wZ19wcmV3 YXJtL2F1dG9wcmV3YXJtLmMgICAgICAgICAgICB8ICAgIDIgKy0KIGNvbnRyaWIvcGdfcHJld2Fy bS9wZ19wcmV3YXJtLmMgICAgICAgICAgICAgfCAgICA0ICstCiBjb250cmliL3BnX3Zpc2liaWxp dHkvcGdfdmlzaWJpbGl0eS5jICAgICAgIHwgICAgNSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dp c3QvZ2lzdGJ1aWxkLmMgICAgICAgICB8ICAgMTEgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2hwYWdlLmMgICAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faGFuZGxlci5jICAgIHwgICAzMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcmV3 cml0ZWhlYXAuYyAgICAgICB8ICAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2li aWxpdHltYXAuYyAgICAgfCAgIDQxICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJl ZS5jICAgICAgICAgIHwgICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0 LmMgICAgICAgICB8ICAgIDggKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BnaW5zZXJ0 LmMgICAgICAgfCAgIDE3ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jICAg ICAgICAgIHwgICAgNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jICAgICAg ICAgICB8ICAyMjcgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYyAg ICAgIHwgIDE5OSArLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jICAg ICAgfCAgNTA4ICsrKy0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3NscnUuYyAgICAg ICAgICAgfCAxNDg0ICsrLS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3N1YnRyYW5zLmMgICAgICAgfCAgMTE0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94YWN0LmMgICAgICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 bG9nLmMgICAgICAgICAgIHwgICAxNSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxv Z3ByZWZldGNoZXIuYyB8ICAgMjggKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1 dGlscy5jICAgICAgfCAgIDE3ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL2NhdGFsb2cuYyAgICAg ICAgICAgICAgIHwgICA1MyArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jICAgICAgICAg ICAgICAgICB8ICAgIDQgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3RvcmFnZS5jICAgICAgICAg ICAgICAgfCAgMjA1ICsrLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyAgICAgICAgICAg ICAgICB8ICAgOTcgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RiY29tbWFuZHMuYyAgICAgICAg ICAgfCAgICA4ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgICAgICAgICAg IHwgICAgOCArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICB8 ICAgMTkgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgICAgICAgfCAg IDE3ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyAgICAgICAgIHwgIDM4 MCArKy0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvbG9jYWxidWYuYyAgICAgICB8ICAg MjUgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvZnJlZXNwYWNlL2ZyZWVzcGFjZS5jICAgfCAgIDQx ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMgICAgICAgICAgICAgIHwgICAgNCAt CiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgICAgICAgIHwgICA3MiArLQog c3JjL2JhY2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYyAgICAgICAgICB8ICAgMjMgKy0KIHNy Yy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jICAgICAgICAgICAgICAgfCAgMzY2ICsrLS0tCiBz cmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jICAgICAgICAgICAgIHwgIDQwMiArKystLQog c3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMuYyAgICAgICAgICAgICB8ICAgMjAgKy0KIHNy Yy9iYWNrZW5kL3V0aWxzL2NhY2hlL2ludmFsLmMgICAgICAgICAgICAgfCAgIDE3ICstCiBzcmMv YmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgIHwgICAyNyArLQogc3JjL2Jh Y2tlbmQvdXRpbHMvbW1nci9tY3h0LmMgICAgICAgICAgICAgICB8ICAgMTMgKy0KIHNyYy9iaW4v cGdfdXBncmFkZS9maWxlLmMgICAgICAgICAgICAgICAgICAgfCAgMTc1ICsrLQogc3JjL2Jpbi9w Z191cGdyYWRlL2Z1bmN0aW9uLmMgICAgICAgICAgICAgICB8ICAgNjYgKwogc3JjL2Jpbi9wZ191 cGdyYWRlL3BnX3VwZ3JhZGUuYyAgICAgICAgICAgICB8ICAgNzQgKy0KIHNyYy9iaW4vcGdfdXBn cmFkZS9wZ191cGdyYWRlLmggICAgICAgICAgICAgfCAgIDE5ICstCiBzcmMvY29tbW9uL3JlbHBh dGguYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMSArLQogc3JjL2luY2x1ZGUvYWNjZXNz L2Nsb2cuaCAgICAgICAgICAgICAgICAgICB8ICAgIDYgLQogc3JjL2luY2x1ZGUvYWNjZXNzL2Nv bW1pdF90cy5oICAgICAgICAgICAgICB8ICAgIDMgLQogc3JjL2luY2x1ZGUvYWNjZXNzL211bHRp eGFjdC5oICAgICAgICAgICAgICB8ICAgIDMgLQogc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaCAg ICAgICAgICAgICAgICAgICB8ICAxODEgKy0tCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWRlZnMu aCAgICAgICAgICAgICAgIHwgICAxOSArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWxpc3QuaCAg ICAgICAgICAgICAgIHwgICAzMCArCiBzcmMvaW5jbHVkZS9hY2Nlc3Mvc3VidHJhbnMuaCAgICAg ICAgICAgICAgIHwgICAgMyAtCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3N0b3JhZ2UuaCAgICAgICAg ICAgICAgIHwgICAxMSArLQogc3JjL2luY2x1ZGUvY29tbW9uL3JlbHBhdGguaCAgICAgICAgICAg ICAgICB8ICAgMTUgKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oICAgICAg ICAgfCAgIDExICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oICAgICAgICAgICAgICAg IHwgICAzOCArLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdlLmggICAgICAgICAgICAgICB8 ICAgMTcgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oICAgICAgICAgICAgICAgICAgICB8ICAg MjggKy0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCAgICAgICAgfCAgIDI5 ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaCAgICAgICAgICAgICAgICAgIHwgICA5OSAr LQogc3JjL2luY2x1ZGUvdXRpbHMvaW52YWwuaCAgICAgICAgICAgICAgICAgICB8ICAgIDIgKy0K IHNyYy9pbmNsdWRlL3V0aWxzL3JlbC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDMzICstCiA2 NSBmaWxlcyBjaGFuZ2VkLCAyMTc2IGluc2VydGlvbnMoKyksIDMyNTggZGVsZXRpb25zKC0pCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvYWNjZXNzL3NscnVkZWZzLmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWxpc3QuaAoKZGlmZiAtLWdpdCBhL2Nv bnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25i dHJlZS5jCmluZGV4IDI1N2NmZjY3MWJkLi4yYWI4MzdjMzA2MiAxMDA2NDQKLS0tIGEvY29udHJp Yi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYworKysgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X25i dHJlZS5jCkBAIC0zMjQsNyArMzI0LDcgQEAgYnRfaW5kZXhfY2hlY2tfaW50ZXJuYWwoT2lkIGlu ZHJlbGlkLCBib29sIHBhcmVudGNoZWNrLCBib29sIGhlYXBhbGxpbmRleGVkLAogCQlib29sCQlo ZWFwa2V5c3BhY2UsCiAJCQkJCWFsbGVxdWFsaW1hZ2U7CiAKLQkJaWYgKCFzbWdyZXhpc3RzKFJl bGF0aW9uR2V0U21ncihpbmRyZWwpLCBNQUlOX0ZPUktOVU0pKQorCQlpZiAoIXNtZ3JleGlzdHMo UmVsYXRpb25HZXRTbWdyKGluZHJlbCwgTUFJTl9GT1JLTlVNKSkpCiAJCQllcmVwb3J0KEVSUk9S LAogCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOREVYX0NPUlJVUFRFRCksCiAJCQkJCSBlcnJtc2co ImluZGV4IFwiJXNcIiBsYWNrcyBhIG1haW4gcmVsYXRpb24gZm9yayIsCmRpZmYgLS1naXQgYS9j b250cmliL2Jsb29tL2JsaW5zZXJ0LmMgYi9jb250cmliL2Jsb29tL2JsaW5zZXJ0LmMKaW5kZXgg ZjgxNDQyZWZiM2YuLjQ5Yjk1MmYzYzNiIDEwMDY0NAotLS0gYS9jb250cmliL2Jsb29tL2JsaW5z ZXJ0LmMKKysrIGIvY29udHJpYi9ibG9vbS9ibGluc2VydC5jCkBAIC0xNzcsOSArMTc3LDkgQEAg YmxidWlsZGVtcHR5KFJlbGF0aW9uIGluZGV4KQogCSAqIHRoaXMgZXZlbiB3aGVuIHdhbF9sZXZl bD1taW5pbWFsLgogCSAqLwogCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UobWV0YXBhZ2UsIEJMT09N X01FVEFQQUdFX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4KSwgSU5J VF9GT1JLTlVNLCBCTE9PTV9NRVRBUEFHRV9CTEtOTywKKwlzbWdyd3JpdGUoUmVsYXRpb25HZXRT bWdyKGluZGV4LCBJTklUX0ZPUktOVU0pLCBCTE9PTV9NRVRBUEFHRV9CTEtOTywKIAkJCSAgKGNo YXIgKikgbWV0YXBhZ2UsIHRydWUpOwotCWxvZ19uZXdwYWdlKCYoUmVsYXRpb25HZXRTbWdyKGlu ZGV4KSktPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgSU5JVF9GT1JLTlVNLAorCWxvZ19uZXdwYWdl KCZpbmRleC0+cmRfbG9jYXRvciwgSU5JVF9GT1JLTlVNLAogCQkJCUJMT09NX01FVEFQQUdFX0JM S05PLCBtZXRhcGFnZSwgdHJ1ZSk7CiAKIAkvKgpAQCAtMTg3LDcgKzE4Nyw3IEBAIGJsYnVpbGRl bXB0eShSZWxhdGlvbiBpbmRleCkKIAkgKiB3cml0ZSBkaWQgbm90IGdvIHRocm91Z2ggc2hhcmVk X2J1ZmZlcnMgYW5kIHRoZXJlZm9yZSBhIGNvbmN1cnJlbnQKIAkgKiBjaGVja3BvaW50IG1heSBo YXZlIG1vdmVkIHRoZSByZWRvIHBvaW50ZXIgcGFzdCBvdXIgeGxvZyByZWNvcmQuCiAJICovCi0J c21ncmltbWVkc3luYyhSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLCBJTklUX0ZPUktOVU0pOworCXNt Z3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKGluZGV4LCBJTklUX0ZPUktOVU0pKTsKIH0KIAog LyoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfcHJld2FybS9hdXRvcHJld2FybS5jIGIvY29udHJp Yi9wZ19wcmV3YXJtL2F1dG9wcmV3YXJtLmMKaW5kZXggOTM4MzU0NDljMGUuLjc0Y2M4ZGY2NDgx IDEwMDY0NAotLS0gYS9jb250cmliL3BnX3ByZXdhcm0vYXV0b3ByZXdhcm0uYworKysgYi9jb250 cmliL3BnX3ByZXdhcm0vYXV0b3ByZXdhcm0uYwpAQCAtNTM1LDcgKzUzNSw3IEBAIGF1dG9wcmV3 YXJtX2RhdGFiYXNlX21haW4oRGF0dW0gbWFpbl9hcmcpCiAJCQkgKi8KIAkJCWlmIChibGstPmZv cmtudW0gPiBJbnZhbGlkRm9ya051bWJlciAmJgogCQkJCWJsay0+Zm9ya251bSA8PSBNQVhfRk9S S05VTSAmJgotCQkJCXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCksIGJsay0+Zm9ya251 bSkpCisJCQkJc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsLCBibGstPmZvcmtudW0pKSkK IAkJCQluYmxvY2tzID0gUmVsYXRpb25HZXROdW1iZXJPZkJsb2Nrc0luRm9yayhyZWwsIGJsay0+ Zm9ya251bSk7CiAJCQllbHNlCiAJCQkJbmJsb2NrcyA9IDA7CmRpZmYgLS1naXQgYS9jb250cmli L3BnX3ByZXdhcm0vcGdfcHJld2FybS5jIGIvY29udHJpYi9wZ19wcmV3YXJtL3BnX3ByZXdhcm0u YwppbmRleCA1NDIwOTkyNGFlZC4uNDc5YmJhZmI3NDUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGdf cHJld2FybS9wZ19wcmV3YXJtLmMKKysrIGIvY29udHJpYi9wZ19wcmV3YXJtL3BnX3ByZXdhcm0u YwpAQCAtMTA5LDcgKzEwOSw3IEBAIHBnX3ByZXdhcm0oUEdfRlVOQ1RJT05fQVJHUykKIAkJYWNs Y2hlY2tfZXJyb3IoYWNscmVzdWx0LCBnZXRfcmVsa2luZF9vYmp0eXBlKHJlbC0+cmRfcmVsLT5y ZWxraW5kKSwgZ2V0X3JlbF9uYW1lKHJlbE9pZCkpOwogCiAJLyogQ2hlY2sgdGhhdCB0aGUgZm9y ayBleGlzdHMuICovCi0JaWYgKCFzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBmb3Jr TnVtYmVyKSkKKwlpZiAoIXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCwgZm9ya051bWJl cikpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJB TUVURVJfVkFMVUUpLAogCQkJCSBlcnJtc2coImZvcmsgXCIlc1wiIGRvZXMgbm90IGV4aXN0IGZv ciB0aGlzIHJlbGF0aW9uIiwKQEAgLTE3Nyw3ICsxNzcsNyBAQCBwZ19wcmV3YXJtKFBHX0ZVTkNU SU9OX0FSR1MpCiAJCWZvciAoYmxvY2sgPSBmaXJzdF9ibG9jazsgYmxvY2sgPD0gbGFzdF9ibG9j azsgKytibG9jaykKIAkJewogCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKLQkJCXNtZ3JyZWFk KFJlbGF0aW9uR2V0U21ncihyZWwpLCBmb3JrTnVtYmVyLCBibG9jaywgYmxvY2tidWZmZXIuZGF0 YSk7CisJCQlzbWdycmVhZChSZWxhdGlvbkdldFNtZ3IocmVsLCBmb3JrTnVtYmVyKSwgYmxvY2ss IGJsb2NrYnVmZmVyLmRhdGEpOwogCQkJKytibG9ja3NfZG9uZTsKIAkJfQogCX0KZGlmZiAtLWdp dCBhL2NvbnRyaWIvcGdfdmlzaWJpbGl0eS9wZ192aXNpYmlsaXR5LmMgYi9jb250cmliL3BnX3Zp c2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jCmluZGV4IDJhNGFjZmQxZWVlLi5iYjdjZDhlYzQzZCAx MDA2NDQKLS0tIGEvY29udHJpYi9wZ192aXNpYmlsaXR5L3BnX3Zpc2liaWxpdHkuYworKysgYi9j b250cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jCkBAIC0zODYsMTMgKzM4NiwxNCBA QCBwZ190cnVuY2F0ZV92aXNpYmlsaXR5X21hcChQR19GVU5DVElPTl9BUkdTKQogCWNoZWNrX3Jl bGF0aW9uX3JlbGtpbmQocmVsKTsKIAogCS8qIEZvcmNpYmx5IHJlc2V0IGNhY2hlZCBmaWxlIHNp emUgKi8KLQlSZWxhdGlvbkdldFNtZ3IocmVsKS0+c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklM SVRZTUFQX0ZPUktOVU1dID0gSW52YWxpZEJsb2NrTnVtYmVyOworCVJlbGF0aW9uR2V0U21ncihy ZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSktPnNtZ3JfY2FjaGVkX25ibG9ja3MgPSBJbnZhbGlk QmxvY2tOdW1iZXI7CiAKIAlibG9jayA9IHZpc2liaWxpdHltYXBfcHJlcGFyZV90cnVuY2F0ZShy ZWwsIDApOwogCWlmIChCbG9ja051bWJlcklzVmFsaWQoYmxvY2spKQogCXsKIAkJZm9yayA9IFZJ U0lCSUxJVFlNQVBfRk9SS05VTTsKLQkJc21ncnRydW5jYXRlKFJlbGF0aW9uR2V0U21ncihyZWwp LCAmZm9yaywgMSwgJmJsb2NrKTsKKwkJRHJvcFJlbGF0aW9uQnVmZmVycyhyZWwtPnJkX2xvY2F0 b3IsIHJlbC0+cmRfYmFja2VuZCwgJmZvcmssIDEsICZibG9jayk7CisJCXNtZ3J0cnVuY2F0ZV9t dWx0aShyZWwtPnJkX2xvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgJmZvcmssIDEsICZibG9jayk7 CiAJfQogCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwocmVsKSkKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naXN0L2dpc3RidWlsZC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lz dGJ1aWxkLmMKaW5kZXggN2E2ZDkzYmI4NzkuLjdhZTU2MTgzNzdjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvZ2lzdC9naXN0YnVpbGQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2lzdC9naXN0YnVpbGQuYwpAQCAtNDE2LDcgKzQxNiw3IEBAIGdpc3RfaW5kZXhzb3J0YnVpbGQo R0lTVEJ1aWxkU3RhdGUgKnN0YXRlKQogCSAqIHJlcGxhY2VkIHdpdGggdGhlIHJlYWwgcm9vdCBw YWdlIGF0IHRoZSBlbmQuCiAJICovCiAJcGFnZSA9IHBhbGxvYzAoQkxDS1NaKTsKLQlzbWdyZXh0 ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+aW5kZXhyZWwpLCBNQUlOX0ZPUktOVU0sIEdJU1Rf Uk9PVF9CTEtOTywKKwlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+aW5kZXhyZWws IE1BSU5fRk9SS05VTSksIEdJU1RfUk9PVF9CTEtOTywKIAkJCSAgIHBhZ2UsIHRydWUpOwogCXN0 YXRlLT5wYWdlc19hbGxvY2F0ZWQrKzsKIAlzdGF0ZS0+cGFnZXNfd3JpdHRlbisrOwpAQCAtNDYw LDcgKzQ2MCw3IEBAIGdpc3RfaW5kZXhzb3J0YnVpbGQoR0lTVEJ1aWxkU3RhdGUgKnN0YXRlKQog CS8qIFdyaXRlIG91dCB0aGUgcm9vdCAqLwogCVBhZ2VTZXRMU04obGV2ZWxzdGF0ZS0+cGFnZXNb MF0sIEdpc3RCdWlsZExTTik7CiAJUGFnZVNldENoZWNrc3VtSW5wbGFjZShsZXZlbHN0YXRlLT5w YWdlc1swXSwgR0lTVF9ST09UX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKHN0 YXRlLT5pbmRleHJlbCksIE1BSU5fRk9SS05VTSwgR0lTVF9ST09UX0JMS05PLAorCXNtZ3J3cml0 ZShSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsLCBNQUlOX0ZPUktOVU0pLCBHSVNUX1JP T1RfQkxLTk8sCiAJCQkgIGxldmVsc3RhdGUtPnBhZ2VzWzBdLCB0cnVlKTsKIAlpZiAoUmVsYXRp b25OZWVkc1dBTChzdGF0ZS0+aW5kZXhyZWwpKQogCQlsb2dfbmV3cGFnZSgmc3RhdGUtPmluZGV4 cmVsLT5yZF9sb2NhdG9yLCBNQUlOX0ZPUktOVU0sIEdJU1RfUk9PVF9CTEtOTywKQEAgLTQ3OSw3 ICs0NzksNyBAQCBnaXN0X2luZGV4c29ydGJ1aWxkKEdJU1RCdWlsZFN0YXRlICpzdGF0ZSkKIAkg KiBzdGlsbCBub3QgYmUgb24gZGlzayB3aGVuIHRoZSBjcmFzaCBvY2N1cnMuCiAJICovCiAJaWYg KFJlbGF0aW9uTmVlZHNXQUwoc3RhdGUtPmluZGV4cmVsKSkKLQkJc21ncmltbWVkc3luYyhSZWxh dGlvbkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsKSwgTUFJTl9GT1JLTlVNKTsKKwkJc21ncmltbWVk c3luYyhSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPmluZGV4cmVsLCBNQUlOX0ZPUktOVU0pKTsKIH0K IAogLyoKQEAgLTY1Nyw3ICs2NTcsNyBAQCBnaXN0X2luZGV4c29ydGJ1aWxkX2ZsdXNoX3JlYWR5 X3BhZ2VzKEdJU1RCdWlsZFN0YXRlICpzdGF0ZSkKIAogCQlQYWdlU2V0TFNOKHBhZ2UsIEdpc3RC dWlsZExTTik7CiAJCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UocGFnZSwgYmxrbm8pOwotCQlzbWdy ZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+aW5kZXhyZWwpLCBNQUlOX0ZPUktOVU0sIGJs a25vLCBwYWdlLAorCQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+aW5kZXhyZWws IE1BSU5fRk9SS05VTSksIGJsa25vLCBwYWdlLAogCQkJCSAgIHRydWUpOwogCiAJCXN0YXRlLT5w YWdlc193cml0dGVuKys7CkBAIC05NDMsOCArOTQzLDcgQEAgZ2lzdEJ1aWxkQ2FsbGJhY2soUmVs YXRpb24gaW5kZXgsCiAJICovCiAJaWYgKChidWlsZHN0YXRlLT5idWlsZE1vZGUgPT0gR0lTVF9C VUZGRVJJTkdfQVVUTyAmJgogCQkgYnVpbGRzdGF0ZS0+aW5kdHVwbGVzICUgQlVGRkVSSU5HX01P REVfU1dJVENIX0NIRUNLX1NURVAgPT0gMCAmJgotCQkgZWZmZWN0aXZlX2NhY2hlX3NpemUgPCBz bWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLAotCQkJCQkJCQkJCQlNQUlOX0ZPUktO VU0pKSB8fAorCQkgZWZmZWN0aXZlX2NhY2hlX3NpemUgPCBzbWdybmJsb2NrcyhSZWxhdGlvbkdl dFNtZ3IoaW5kZXgsIE1BSU5fRk9SS05VTSkpKSB8fAogCQkoYnVpbGRzdGF0ZS0+YnVpbGRNb2Rl ID09IEdJU1RfQlVGRkVSSU5HX1NUQVRTICYmCiAJCSBidWlsZHN0YXRlLT5pbmR0dXBsZXMgPj0g QlVGRkVSSU5HX01PREVfVFVQTEVfU0laRV9TVEFUU19UQVJHRVQpKQogCXsKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9oYXNocGFnZS5jCmluZGV4IDJkOGZkZWM5OGVkLi4xNjZiZjgxZTAyOCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvaGFzaC9oYXNocGFnZS5jCkBAIC0xMDMwLDcgKzEwMzAsNyBAQCBfaGFzaF9hbGxvY19i dWNrZXRzKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgZmlyc3RibG9jaywgdWludDMyIG5ibG9j a3MpCiAJCQkJCXRydWUpOwogCiAJUGFnZVNldENoZWNrc3VtSW5wbGFjZShwYWdlLCBsYXN0Ymxv Y2spOwotCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHJlbCksIE1BSU5fRk9SS05VTSwgbGFz dGJsb2NrLCB6ZXJvYnVmLmRhdGEsCisJc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3IocmVsLCBN QUlOX0ZPUktOVU0pLCBsYXN0YmxvY2ssIHplcm9idWYuZGF0YSwKIAkJCSAgIGZhbHNlKTsKIAog CXJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5k ZXggYzRiMTkxNmQzNmUuLjhhZjIyNTUwMmNjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9oYW5kbGVyLmMKQEAgLTU3Miw3ICs1NzIsNyBAQCBoZWFwYW1fcmVsYXRpb25fc2V0X25l d19maWxlbG9jYXRvcihSZWxhdGlvbiByZWwsCiAJCQkJCQkJCQlUcmFuc2FjdGlvbklkICpmcmVl emVYaWQsCiAJCQkJCQkJCQlNdWx0aVhhY3RJZCAqbWlubXVsdGkpCiB7Ci0JU01nclJlbGF0aW9u IHNyZWw7CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAKIAkvKgogCSAqIEluaXRpYWxpemUgdG8g dGhlIG1pbmltdW0gWElEIHRoYXQgY291bGQgcHV0IHR1cGxlcyBpbiB0aGUgdGFibGUuIFdlCkBA IC01OTEsNyArNTkxLDcgQEAgaGVhcGFtX3JlbGF0aW9uX3NldF9uZXdfZmlsZWxvY2F0b3IoUmVs YXRpb24gcmVsLAogCSAqLwogCSptaW5tdWx0aSA9IEdldE9sZGVzdE11bHRpWGFjdElkKCk7CiAK LQlzcmVsID0gUmVsYXRpb25DcmVhdGVTdG9yYWdlKCpuZXdybG9jYXRvciwgcGVyc2lzdGVuY2Us IHRydWUpOworCXNmaWxlID0gUmVsYXRpb25DcmVhdGVTdG9yYWdlKCpuZXdybG9jYXRvciwgcGVy c2lzdGVuY2UsIHRydWUpOwogCiAJLyoKIAkgKiBJZiByZXF1aXJlZCwgc2V0IHVwIGFuIGluaXQg Zm9yayBmb3IgYW4gdW5sb2dnZWQgdGFibGUgc28gdGhhdCBpdCBjYW4KQEAgLTYwNCwxNSArNjA0 LDE4IEBAIGhlYXBhbV9yZWxhdGlvbl9zZXRfbmV3X2ZpbGVsb2NhdG9yKFJlbGF0aW9uIHJlbCwK IAkgKi8KIAlpZiAocGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQpCiAJewor CQlTTWdyRmlsZUhhbmRsZSBzZmlsZV9pbml0OworCiAJCUFzc2VydChyZWwtPnJkX3JlbC0+cmVs a2luZCA9PSBSRUxLSU5EX1JFTEFUSU9OIHx8CiAJCQkgICByZWwtPnJkX3JlbC0+cmVsa2luZCA9 PSBSRUxLSU5EX01BVFZJRVcgfHwKIAkJCSAgIHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJ TkRfVE9BU1RWQUxVRSk7Ci0JCXNtZ3JjcmVhdGUoc3JlbCwgSU5JVF9GT1JLTlVNLCBmYWxzZSk7 CisJCXNmaWxlX2luaXQgPSBzbWdyb3BlbigqbmV3cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQs IElOSVRfRk9SS05VTSk7CisJCXNtZ3JjcmVhdGUoc2ZpbGVfaW5pdCwgZmFsc2UpOwogCQlsb2df c21ncmNyZWF0ZShuZXdybG9jYXRvciwgSU5JVF9GT1JLTlVNKTsKLQkJc21ncmltbWVkc3luYyhz cmVsLCBJTklUX0ZPUktOVU0pOworCQlzbWdyaW1tZWRzeW5jKHNmaWxlKTsKIAl9CiAKLQlzbWdy Y2xvc2Uoc3JlbCk7CisJc21ncmNsb3NlKHNmaWxlKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTYy NCw5ICs2MjcsNyBAQCBoZWFwYW1fcmVsYXRpb25fbm9udHJhbnNhY3Rpb25hbF90cnVuY2F0ZShS ZWxhdGlvbiByZWwpCiBzdGF0aWMgdm9pZAogaGVhcGFtX3JlbGF0aW9uX2NvcHlfZGF0YShSZWxh dGlvbiByZWwsIGNvbnN0IFJlbEZpbGVMb2NhdG9yICpuZXdybG9jYXRvcikKIHsKLQlTTWdyUmVs YXRpb24gZHN0cmVsOwotCi0JZHN0cmVsID0gc21ncm9wZW4oKm5ld3Jsb2NhdG9yLCByZWwtPnJk X2JhY2tlbmQpOworCVNNZ3JGaWxlSGFuZGxlIGRzdG1haW47CiAKIAkvKgogCSAqIFNpbmNlIHdl IGNvcHkgdGhlIGZpbGUgZGlyZWN0bHkgd2l0aG91dCBsb29raW5nIGF0IHRoZSBzaGFyZWQgYnVm ZmVycywKQEAgLTY0NiwxNiArNjQ3LDIxIEBAIGhlYXBhbV9yZWxhdGlvbl9jb3B5X2RhdGEoUmVs YXRpb24gcmVsLCBjb25zdCBSZWxGaWxlTG9jYXRvciAqbmV3cmxvY2F0b3IpCiAJUmVsYXRpb25D cmVhdGVTdG9yYWdlKCpuZXdybG9jYXRvciwgcmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlLCB0 cnVlKTsKIAogCS8qIGNvcHkgbWFpbiBmb3JrICovCi0JUmVsYXRpb25Db3B5U3RvcmFnZShSZWxh dGlvbkdldFNtZ3IocmVsKSwgZHN0cmVsLCBNQUlOX0ZPUktOVU0sCisJZHN0bWFpbiA9IHNtZ3Jv cGVuKCpuZXdybG9jYXRvciwgcmVsLT5yZF9iYWNrZW5kLCBNQUlOX0ZPUktOVU0pOworCVJlbGF0 aW9uQ29weVN0b3JhZ2UoUmVsYXRpb25HZXRTbWdyKHJlbCwgTUFJTl9GT1JLTlVNKSwgZHN0bWFp biwKIAkJCQkJCXJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSk7CiAKIAkvKiBjb3B5IHRob3Nl IGV4dHJhIGZvcmtzIHRoYXQgZXhpc3QgKi8KIAlmb3IgKEZvcmtOdW1iZXIgZm9ya051bSA9IE1B SU5fRk9SS05VTSArIDE7CiAJCSBmb3JrTnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrTnVtKyspCiAJ ewotCQlpZiAoc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgZm9ya051bSkpCisJCVNN Z3JGaWxlSGFuZGxlIHNyY19mb3JrID0gUmVsYXRpb25HZXRTbWdyKHJlbCwgZm9ya051bSk7CisK KwkJaWYgKHNtZ3JleGlzdHMoc3JjX2ZvcmspKQogCQl7Ci0JCQlzbWdyY3JlYXRlKGRzdHJlbCwg Zm9ya051bSwgZmFsc2UpOworCQkJU01nckZpbGVIYW5kbGUgZHN0X2ZvcmsgPSBzbWdyb3Blbigq bmV3cmxvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgZm9ya051bSk7CisKKwkJCXNtZ3JjcmVhdGUo ZHN0X2ZvcmssIGZhbHNlKTsKIAogCQkJLyoKIAkJCSAqIFdBTCBsb2cgY3JlYXRpb24gaWYgdGhl IHJlbGF0aW9uIGlzIHBlcnNpc3RlbnQsIG9yIHRoaXMgaXMgdGhlCkBAIC02NjUsNyArNjcxLDcg QEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZGF0YShSZWxhdGlvbiByZWwsIGNvbnN0IFJlbEZpbGVM b2NhdG9yICpuZXdybG9jYXRvcikKIAkJCQkocmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlID09 IFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEICYmCiAJCQkJIGZvcmtOdW0gPT0gSU5JVF9GT1JLTlVN KSkKIAkJCQlsb2dfc21ncmNyZWF0ZShuZXdybG9jYXRvciwgZm9ya051bSk7Ci0JCQlSZWxhdGlv bkNvcHlTdG9yYWdlKFJlbGF0aW9uR2V0U21ncihyZWwpLCBkc3RyZWwsIGZvcmtOdW0sCisJCQlS ZWxhdGlvbkNvcHlTdG9yYWdlKFJlbGF0aW9uR2V0U21ncihyZWwsIGZvcmtOdW0pLCBkc3RfZm9y aywKIAkJCQkJCQkJcmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKTsKIAkJfQogCX0KQEAgLTY3 Myw3ICs2NzksNyBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9kYXRhKFJlbGF0aW9uIHJlbCwgY29u c3QgUmVsRmlsZUxvY2F0b3IgKm5ld3Jsb2NhdG9yKQogCiAJLyogZHJvcCBvbGQgcmVsYXRpb24s IGFuZCBjbG9zZSBuZXcgb25lICovCiAJUmVsYXRpb25Ecm9wU3RvcmFnZShyZWwpOwotCXNtZ3Jj bG9zZShkc3RyZWwpOworCXNtZ3JjbG9zZShkc3RtYWluKTsKIH0KIAogc3RhdGljIHZvaWQKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Jld3JpdGVoZWFwLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9yZXdyaXRlaGVhcC5jCmluZGV4IDg5OTNjMWVkNWE5Li5kOTkxZTc3 NjVmMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvcmV3cml0ZWhlYXAuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9yZXdyaXRlaGVhcC5jCkBAIC0zMjUsNyArMzI1 LDcgQEAgZW5kX2hlYXBfcmV3cml0ZShSZXdyaXRlU3RhdGUgc3RhdGUpCiAKIAkJUGFnZVNldENo ZWNrc3VtSW5wbGFjZShzdGF0ZS0+cnNfYnVmZmVyLCBzdGF0ZS0+cnNfYmxvY2tubyk7CiAKLQkJ c21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPnJzX25ld19yZWwpLCBNQUlOX0ZPUktO VU0sCisJCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5yc19uZXdfcmVsLCBNQUlO X0ZPUktOVU0pLAogCQkJCSAgIHN0YXRlLT5yc19ibG9ja25vLCAoY2hhciAqKSBzdGF0ZS0+cnNf YnVmZmVyLCB0cnVlKTsKIAl9CiAKQEAgLTMzNyw3ICszMzcsNyBAQCBlbmRfaGVhcF9yZXdyaXRl KFJld3JpdGVTdGF0ZSBzdGF0ZSkKIAkgKiB3cm90ZSBiZWZvcmUgdGhlIGNoZWNrcG9pbnQuCiAJ ICovCiAJaWYgKFJlbGF0aW9uTmVlZHNXQUwoc3RhdGUtPnJzX25ld19yZWwpKQotCQlzbWdyaW1t ZWRzeW5jKFJlbGF0aW9uR2V0U21ncihzdGF0ZS0+cnNfbmV3X3JlbCksIE1BSU5fRk9SS05VTSk7 CisJCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKHN0YXRlLT5yc19uZXdfcmVsLCBNQUlO X0ZPUktOVU0pKTsKIAogCWxvZ2ljYWxfZW5kX2hlYXBfcmV3cml0ZShzdGF0ZSk7CiAKQEAgLTY5 MSw3ICs2OTEsNyBAQCByYXdfaGVhcF9pbnNlcnQoUmV3cml0ZVN0YXRlIHN0YXRlLCBIZWFwVHVw bGUgdHVwKQogCQkJICovCiAJCQlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKHBhZ2UsIHN0YXRlLT5y c19ibG9ja25vKTsKIAotCQkJc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Ioc3RhdGUtPnJzX25l d19yZWwpLCBNQUlOX0ZPUktOVU0sCisJCQlzbWdyZXh0ZW5kKFJlbGF0aW9uR2V0U21ncihzdGF0 ZS0+cnNfbmV3X3JlbCwgTUFJTl9GT1JLTlVNKSwKIAkJCQkJICAgc3RhdGUtPnJzX2Jsb2Nrbm8s IChjaGFyICopIHBhZ2UsIHRydWUpOwogCiAJCQlzdGF0ZS0+cnNfYmxvY2tubysrOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5jCmluZGV4IDc0ZmYwMWJiMTcyLi45NmNhM2Iw Y2M3MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmlzaWJpbGl0eW1hcC5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYwpAQCAtNDY4LDcg KzQ2OCw3IEBAIHZpc2liaWxpdHltYXBfcHJlcGFyZV90cnVuY2F0ZShSZWxhdGlvbiByZWwsIEJs b2NrTnVtYmVyIG5oZWFwYmxvY2tzKQogCSAqIElmIG5vIHZpc2liaWxpdHkgbWFwIGhhcyBiZWVu IGNyZWF0ZWQgeWV0IGZvciB0aGlzIHJlbGF0aW9uLCB0aGVyZSdzCiAJICogbm90aGluZyB0byB0 cnVuY2F0ZS4KIAkgKi8KLQlpZiAoIXNtZ3JleGlzdHMoUmVsYXRpb25HZXRTbWdyKHJlbCksIFZJ U0lCSUxJVFlNQVBfRk9SS05VTSkpCisJaWYgKCFzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihy ZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSkpKQogCQlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVy OwogCiAJLyoKQEAgLTUzNSw3ICs1MzUsNyBAQCB2aXNpYmlsaXR5bWFwX3ByZXBhcmVfdHJ1bmNh dGUoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBuaGVhcGJsb2NrcykKIAllbHNlCiAJCW5ld25i bG9ja3MgPSB0cnVuY0Jsb2NrOwogCi0JaWYgKHNtZ3JuYmxvY2tzKFJlbGF0aW9uR2V0U21ncihy ZWwpLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0pIDw9IG5ld25ibG9ja3MpCisJaWYgKHNtZ3JuYmxv Y2tzKFJlbGF0aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSkpIDw9IG5ld25i bG9ja3MpCiAJewogCQkvKiBub3RoaW5nIHRvIGRvLCB0aGUgZmlsZSB3YXMgYWxyZWFkeSBzbWFs bGVyIHRoYW4gcmVxdWVzdGVkIHNpemUgKi8KIAkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsK QEAgLTU1NCwyOSArNTU0LDI5IEBAIHN0YXRpYyBCdWZmZXIKIHZtX3JlYWRidWYoUmVsYXRpb24g cmVsLCBCbG9ja051bWJlciBibGtubywgYm9vbCBleHRlbmQpCiB7CiAJQnVmZmVyCQlidWY7Ci0J U01nclJlbGF0aW9uIHJlbG47CisJU01nckZpbGVIYW5kbGUgdm1fc2ZpbGU7CiAKIAkvKgogCSAq IENhdXRpb246IHJlLXVzaW5nIHRoaXMgc21nciBwb2ludGVyIGNvdWxkIGZhaWwgaWYgdGhlIHJl bGNhY2hlIGVudHJ5CiAJICogZ2V0cyBjbG9zZWQuICBJdCdzIHNhZmUgYXMgbG9uZyBhcyB3ZSBv bmx5IGRvIHNtZ3ItbGV2ZWwgb3BlcmF0aW9ucwogCSAqIGJldHdlZW4gaGVyZSBhbmQgdGhlIGxh c3QgdXNlIG9mIHRoZSBwb2ludGVyLgogCSAqLwotCXJlbG4gPSBSZWxhdGlvbkdldFNtZ3IocmVs KTsKKwl2bV9zZmlsZSA9IFJlbGF0aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05V TSk7CiAKIAkvKgogCSAqIElmIHdlIGhhdmVuJ3QgY2FjaGVkIHRoZSBzaXplIG9mIHRoZSB2aXNp YmlsaXR5IG1hcCBmb3JrIHlldCwgY2hlY2sgaXQKIAkgKiBmaXJzdC4KIAkgKi8KLQlpZiAocmVs bi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1dID09IEludmFsaWRC bG9ja051bWJlcikKKwlpZiAodm1fc2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPT0gSW52YWxp ZEJsb2NrTnVtYmVyKQogCXsKLQkJaWYgKHNtZ3JleGlzdHMocmVsbiwgVklTSUJJTElUWU1BUF9G T1JLTlVNKSkKLQkJCXNtZ3JuYmxvY2tzKHJlbG4sIFZJU0lCSUxJVFlNQVBfRk9SS05VTSk7CisJ CWlmIChzbWdyZXhpc3RzKHZtX3NmaWxlKSkKKwkJCXNtZ3JuYmxvY2tzKHZtX3NmaWxlKTsKIAkJ ZWxzZQotCQkJcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1d ID0gMDsKKwkJCXZtX3NmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0gMDsKIAl9CiAKIAkvKiBI YW5kbGUgcmVxdWVzdHMgYmV5b25kIEVPRiAqLwotCWlmIChibGtubyA+PSByZWxuLT5zbWdyX2Nh Y2hlZF9uYmxvY2tzW1ZJU0lCSUxJVFlNQVBfRk9SS05VTV0pCisJaWYgKGJsa25vID49IHZtX3Nm aWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzKQogCXsKIAkJaWYgKGV4dGVuZCkKIAkJCXZtX2V4dGVu ZChyZWwsIGJsa25vICsgMSk7CkBAIC02MDMsOCArNjAzLDcgQEAgdm1fcmVhZGJ1ZihSZWxhdGlv biByZWwsIEJsb2NrTnVtYmVyIGJsa25vLCBib29sIGV4dGVuZCkKIAkgKiBsb25nIGFzIGl0IGRv ZXNuJ3QgZGVwZW5kIG9uIHRoZSBwYWdlIGhlYWRlciBoYXZpbmcgY29ycmVjdCBjb250ZW50cy4K IAkgKiBDdXJyZW50IHVzYWdlIGlzIHNhZmUgYmVjYXVzZSBQYWdlR2V0Q29udGVudHMoKSBkb2Vz IG5vdCByZXF1aXJlIHRoYXQuCiAJICovCi0JYnVmID0gUmVhZEJ1ZmZlckV4dGVuZGVkKHJlbCwg VklTSUJJTElUWU1BUF9GT1JLTlVNLCBibGtubywKLQkJCQkJCQkgUkJNX1pFUk9fT05fRVJST1Is IE5VTEwpOworCWJ1ZiA9IFJlYWRCdWZmZXJFeHRlbmRlZChyZWwsIFZJU0lCSUxJVFlNQVBfRk9S S05VTSwgYmxrbm8sIFJCTV9aRVJPX09OX0VSUk9SLCBOVUxMKTsKIAlpZiAoUGFnZUlzTmV3KEJ1 ZmZlckdldFBhZ2UoYnVmKSkpCiAJewogCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfRVhD TFVTSVZFKTsKQEAgLTYyNCw3ICs2MjMsNyBAQCB2bV9leHRlbmQoUmVsYXRpb24gcmVsLCBCbG9j a051bWJlciB2bV9uYmxvY2tzKQogewogCUJsb2NrTnVtYmVyIHZtX25ibG9ja3Nfbm93OwogCVBH QWxpZ25lZEJsb2NrIHBnOwotCVNNZ3JSZWxhdGlvbiByZWxuOworCVNNZ3JGaWxlSGFuZGxlIHZt X3NmaWxlOwogCiAJUGFnZUluaXQoKFBhZ2UpIHBnLmRhdGEsIEJMQ0tTWiwgMCk7CiAKQEAgLTY0 NSwyNyArNjQ0LDI3IEBAIHZtX2V4dGVuZChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIHZtX25i bG9ja3MpCiAJICogZ2V0cyBjbG9zZWQuICBJdCdzIHNhZmUgYXMgbG9uZyBhcyB3ZSBvbmx5IGRv IHNtZ3ItbGV2ZWwgb3BlcmF0aW9ucwogCSAqIGJldHdlZW4gaGVyZSBhbmQgdGhlIGxhc3QgdXNl IG9mIHRoZSBwb2ludGVyLgogCSAqLwotCXJlbG4gPSBSZWxhdGlvbkdldFNtZ3IocmVsKTsKKwl2 bV9zZmlsZSA9IFJlbGF0aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSk7CiAK IAkvKgogCSAqIENyZWF0ZSB0aGUgZmlsZSBmaXJzdCBpZiBpdCBkb2Vzbid0IGV4aXN0LiAgSWYg c21ncl92bV9uYmxvY2tzIGlzCiAJICogcG9zaXRpdmUgdGhlbiBpdCBtdXN0IGV4aXN0LCBubyBu ZWVkIGZvciBhbiBzbWdyZXhpc3RzIGNhbGwuCiAJICovCi0JaWYgKChyZWxuLT5zbWdyX2NhY2hl ZF9uYmxvY2tzW1ZJU0lCSUxJVFlNQVBfRk9SS05VTV0gPT0gMCB8fAotCQkgcmVsbi0+c21ncl9j YWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1dID09IEludmFsaWRCbG9ja051bWJl cikgJiYKLQkJIXNtZ3JleGlzdHMocmVsbiwgVklTSUJJTElUWU1BUF9GT1JLTlVNKSkKLQkJc21n cmNyZWF0ZShyZWxuLCBWSVNJQklMSVRZTUFQX0ZPUktOVU0sIGZhbHNlKTsKKwlpZiAoKHZtX3Nm aWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID09IDAgfHwKKwkJIHZtX3NmaWxlLT5zbWdyX2NhY2hl ZF9uYmxvY2tzID09IEludmFsaWRCbG9ja051bWJlcikgJiYKKwkJIXNtZ3JleGlzdHModm1fc2Zp bGUpKQorCQlzbWdyY3JlYXRlKHZtX3NmaWxlLCBmYWxzZSk7CiAKIAkvKiBJbnZhbGlkYXRlIGNh Y2hlIHNvIHRoYXQgc21ncm5ibG9ja3MoKSBhc2tzIHRoZSBrZXJuZWwuICovCi0JcmVsbi0+c21n cl9jYWNoZWRfbmJsb2Nrc1tWSVNJQklMSVRZTUFQX0ZPUktOVU1dID0gSW52YWxpZEJsb2NrTnVt YmVyOwotCXZtX25ibG9ja3Nfbm93ID0gc21ncm5ibG9ja3MocmVsbiwgVklTSUJJTElUWU1BUF9G T1JLTlVNKTsKKwl2bV9zZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051 bWJlcjsKKwl2bV9uYmxvY2tzX25vdyA9IHNtZ3JuYmxvY2tzKHZtX3NmaWxlKTsKIAogCS8qIE5v dyBleHRlbmQgdGhlIGZpbGUgKi8KIAl3aGlsZSAodm1fbmJsb2Nrc19ub3cgPCB2bV9uYmxvY2tz KQogCXsKIAkJUGFnZVNldENoZWNrc3VtSW5wbGFjZSgoUGFnZSkgcGcuZGF0YSwgdm1fbmJsb2Nr c19ub3cpOwogCi0JCXNtZ3JleHRlbmQocmVsbiwgVklTSUJJTElUWU1BUF9GT1JLTlVNLCB2bV9u YmxvY2tzX25vdywgcGcuZGF0YSwgZmFsc2UpOworCQlzbWdyZXh0ZW5kKHZtX3NmaWxlLCB2bV9u YmxvY2tzX25vdywgcGcuZGF0YSwgZmFsc2UpOwogCQl2bV9uYmxvY2tzX25vdysrOwogCX0KIApA QCAtNjc2LDcgKzY3NSw3IEBAIHZtX2V4dGVuZChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIHZt X25ibG9ja3MpCiAJICogdG8ga2VlcCBjaGVja2luZyBmb3IgY3JlYXRpb24gb3IgZXh0ZW5zaW9u IG9mIHRoZSBmaWxlLCB3aGljaCBoYXBwZW5zCiAJICogaW5mcmVxdWVudGx5LgogCSAqLwotCUNh Y2hlSW52YWxpZGF0ZVNtZ3IocmVsbi0+c21ncl9ybG9jYXRvcik7CisJQ2FjaGVJbnZhbGlkYXRl U21ncihyZWwtPnJkX2xvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCk7CiAKIAlVbmxvY2tSZWxhdGlv bkZvckV4dGVuc2lvbihyZWwsIEV4Y2x1c2l2ZUxvY2spOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv bmJ0cmVlLmMKaW5kZXggMWNjODhkYTAzMmQuLjdkOTk2OGQyNDFhIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlZS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cmVlLmMKQEAgLTE2NCw5ICsxNjQsOSBAQCBidGJ1aWxkZW1wdHkoUmVsYXRpb24g aW5kZXgpCiAJICogdGhpcyBldmVuIHdoZW4gd2FsX2xldmVsPW1pbmltYWwuCiAJICovCiAJUGFn ZVNldENoZWNrc3VtSW5wbGFjZShtZXRhcGFnZSwgQlRSRUVfTUVUQVBBR0UpOwotCXNtZ3J3cml0 ZShSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLCBJTklUX0ZPUktOVU0sIEJUUkVFX01FVEFQQUdFLAor CXNtZ3J3cml0ZShSZWxhdGlvbkdldFNtZ3IoaW5kZXgsIElOSVRfRk9SS05VTSksIEJUUkVFX01F VEFQQUdFLAogCQkJICAoY2hhciAqKSBtZXRhcGFnZSwgdHJ1ZSk7Ci0JbG9nX25ld3BhZ2UoJlJl bGF0aW9uR2V0U21ncihpbmRleCktPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgSU5JVF9GT1JLTlVN LAorCWxvZ19uZXdwYWdlKCZpbmRleC0+cmRfbG9jYXRvciwgSU5JVF9GT1JLTlVNLAogCQkJCUJU UkVFX01FVEFQQUdFLCBtZXRhcGFnZSwgdHJ1ZSk7CiAKIAkvKgpAQCAtMTc0LDcgKzE3NCw3IEBA IGJ0YnVpbGRlbXB0eShSZWxhdGlvbiBpbmRleCkKIAkgKiB3cml0ZSBkaWQgbm90IGdvIHRocm91 Z2ggc2hhcmVkX2J1ZmZlcnMgYW5kIHRoZXJlZm9yZSBhIGNvbmN1cnJlbnQKIAkgKiBjaGVja3Bv aW50IG1heSBoYXZlIG1vdmVkIHRoZSByZWRvIHBvaW50ZXIgcGFzdCBvdXIgeGxvZyByZWNvcmQu CiAJICovCi0Jc21ncmltbWVkc3luYyhSZWxhdGlvbkdldFNtZ3IoaW5kZXgpLCBJTklUX0ZPUktO VU0pOworCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKGluZGV4LCBJTklUX0ZPUktOVU0p KTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0c29y dC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzb3J0LmMKaW5kZXggNjdiN2IxNzEw YzYuLjIxNmMyNmNhZDE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHNvcnQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNvcnQuYwpAQCAtNjYy LDcgKzY2Miw3IEBAIF9idF9ibHdyaXRlcGFnZShCVFdyaXRlU3RhdGUgKndzdGF0ZSwgUGFnZSBw YWdlLCBCbG9ja051bWJlciBibGtubykKIAkJaWYgKCF3c3RhdGUtPmJ0d3NfemVyb3BhZ2UpCiAJ CQl3c3RhdGUtPmJ0d3NfemVyb3BhZ2UgPSAoUGFnZSkgcGFsbG9jMChCTENLU1opOwogCQkvKiBk b24ndCBzZXQgY2hlY2tzdW0gZm9yIGFsbC16ZXJvIHBhZ2UgKi8KLQkJc21ncmV4dGVuZChSZWxh dGlvbkdldFNtZ3Iod3N0YXRlLT5pbmRleCksIE1BSU5fRk9SS05VTSwKKwkJc21ncmV4dGVuZChS ZWxhdGlvbkdldFNtZ3Iod3N0YXRlLT5pbmRleCwgTUFJTl9GT1JLTlVNKSwKIAkJCQkgICB3c3Rh dGUtPmJ0d3NfcGFnZXNfd3JpdHRlbisrLAogCQkJCSAgIChjaGFyICopIHdzdGF0ZS0+YnR3c196 ZXJvcGFnZSwKIAkJCQkgICB0cnVlKTsKQEAgLTY3NywxNCArNjc3LDE0IEBAIF9idF9ibHdyaXRl cGFnZShCVFdyaXRlU3RhdGUgKndzdGF0ZSwgUGFnZSBwYWdlLCBCbG9ja051bWJlciBibGtubykK IAlpZiAoYmxrbm8gPT0gd3N0YXRlLT5idHdzX3BhZ2VzX3dyaXR0ZW4pCiAJewogCQkvKiBleHRl bmRpbmcgdGhlIGZpbGUuLi4gKi8KLQkJc21ncmV4dGVuZChSZWxhdGlvbkdldFNtZ3Iod3N0YXRl LT5pbmRleCksIE1BSU5fRk9SS05VTSwgYmxrbm8sCisJCXNtZ3JleHRlbmQoUmVsYXRpb25HZXRT bWdyKHdzdGF0ZS0+aW5kZXgsIE1BSU5fRk9SS05VTSksIGJsa25vLAogCQkJCSAgIChjaGFyICop IHBhZ2UsIHRydWUpOwogCQl3c3RhdGUtPmJ0d3NfcGFnZXNfd3JpdHRlbisrOwogCX0KIAllbHNl CiAJewogCQkvKiBvdmVyd3JpdGluZyBhIGJsb2NrIHdlIHplcm8tZmlsbGVkIGJlZm9yZSAqLwot CQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgpLCBNQUlOX0ZPUktOVU0s IGJsa25vLAorCQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgsIE1BSU5f Rk9SS05VTSksIGJsa25vLAogCQkJCSAgKGNoYXIgKikgcGFnZSwgdHJ1ZSk7CiAJfQogCkBAIC0x NDMxLDcgKzE0MzEsNyBAQCBfYnRfbG9hZChCVFdyaXRlU3RhdGUgKndzdGF0ZSwgQlRTcG9vbCAq YnRzcG9vbCwgQlRTcG9vbCAqYnRzcG9vbDIpCiAJICogc3RpbGwgbm90IGJlIG9uIGRpc2sgd2hl biB0aGUgY3Jhc2ggb2NjdXJzLgogCSAqLwogCWlmICh3c3RhdGUtPmJ0d3NfdXNlX3dhbCkKLQkJ c21ncmltbWVkc3luYyhSZWxhdGlvbkdldFNtZ3Iod3N0YXRlLT5pbmRleCksIE1BSU5fRk9SS05V TSk7CisJCXNtZ3JpbW1lZHN5bmMoUmVsYXRpb25HZXRTbWdyKHdzdGF0ZS0+aW5kZXgsIE1BSU5f Rk9SS05VTSkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lz dC9zcGdpbnNlcnQuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BnaW5zZXJ0LmMKaW5k ZXggNGVkMDY3ZjBkOTMuLjdmZjI2ZGU5NzkwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3Mvc3BnaXN0L3NwZ2luc2VydC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bn aW5zZXJ0LmMKQEAgLTE1NSw4ICsxNTUsMTEgQEAgc3BnYnVpbGQoUmVsYXRpb24gaGVhcCwgUmVs YXRpb24gaW5kZXgsIEluZGV4SW5mbyAqaW5kZXhJbmZvKQogdm9pZAogc3BnYnVpbGRlbXB0eShS ZWxhdGlvbiBpbmRleCkKIHsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKIAlQYWdlCQlwYWdlOwog CisJc2ZpbGUgPSBSZWxhdGlvbkdldFNtZ3IoaW5kZXgsIElOSVRfRk9SS05VTSk7CisKIAkvKiBD b25zdHJ1Y3QgbWV0YXBhZ2UuICovCiAJcGFnZSA9IChQYWdlKSBwYWxsb2MoQkxDS1NaKTsKIAlT cEdpc3RJbml0TWV0YXBhZ2UocGFnZSk7CkBAIC0xNjksMjcgKzE3MiwyNyBAQCBzcGdidWlsZGVt cHR5KFJlbGF0aW9uIGluZGV4KQogCSAqIHJlcGxheWVkLgogCSAqLwogCVBhZ2VTZXRDaGVja3N1 bUlucGxhY2UocGFnZSwgU1BHSVNUX01FVEFQQUdFX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRp b25HZXRTbWdyKGluZGV4KSwgSU5JVF9GT1JLTlVNLCBTUEdJU1RfTUVUQVBBR0VfQkxLTk8sCisJ c21ncndyaXRlKHNmaWxlLCBTUEdJU1RfTUVUQVBBR0VfQkxLTk8sCiAJCQkgIChjaGFyICopIHBh Z2UsIHRydWUpOwotCWxvZ19uZXdwYWdlKCYoUmVsYXRpb25HZXRTbWdyKGluZGV4KSktPnNtZ3Jf cmxvY2F0b3IubG9jYXRvciwgSU5JVF9GT1JLTlVNLAorCWxvZ19uZXdwYWdlKCZpbmRleC0+cmRf bG9jYXRvciwgSU5JVF9GT1JLTlVNLAogCQkJCVNQR0lTVF9NRVRBUEFHRV9CTEtOTywgcGFnZSwg dHJ1ZSk7CiAKIAkvKiBMaWtld2lzZSBmb3IgdGhlIHJvb3QgcGFnZS4gKi8KIAlTcEdpc3RJbml0 UGFnZShwYWdlLCBTUEdJU1RfTEVBRik7CiAKIAlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKHBhZ2Us IFNQR0lTVF9ST09UX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4KSwg SU5JVF9GT1JLTlVNLCBTUEdJU1RfUk9PVF9CTEtOTywKKwlzbWdyd3JpdGUoc2ZpbGUsIFNQR0lT VF9ST09UX0JMS05PLAogCQkJICAoY2hhciAqKSBwYWdlLCB0cnVlKTsKLQlsb2dfbmV3cGFnZSgm KFJlbGF0aW9uR2V0U21ncihpbmRleCkpLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsIElOSVRfRk9S S05VTSwKKwlsb2dfbmV3cGFnZSgmaW5kZXgtPnJkX2xvY2F0b3IsIElOSVRfRk9SS05VTSwKIAkJ CQlTUEdJU1RfUk9PVF9CTEtOTywgcGFnZSwgdHJ1ZSk7CiAKIAkvKiBMaWtld2lzZSBmb3IgdGhl IG51bGwtdHVwbGVzIHJvb3QgcGFnZS4gKi8KIAlTcEdpc3RJbml0UGFnZShwYWdlLCBTUEdJU1Rf TEVBRiB8IFNQR0lTVF9OVUxMUyk7CiAKIAlQYWdlU2V0Q2hlY2tzdW1JbnBsYWNlKHBhZ2UsIFNQ R0lTVF9OVUxMX0JMS05PKTsKLQlzbWdyd3JpdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4KSwgSU5J VF9GT1JLTlVNLCBTUEdJU1RfTlVMTF9CTEtOTywKKwlzbWdyd3JpdGUoc2ZpbGUsIFNQR0lTVF9O VUxMX0JMS05PLAogCQkJICAoY2hhciAqKSBwYWdlLCB0cnVlKTsKLQlsb2dfbmV3cGFnZSgmKFJl bGF0aW9uR2V0U21ncihpbmRleCkpLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IsIElOSVRfRk9SS05V TSwKKwlsb2dfbmV3cGFnZSgmaW5kZXgtPnJkX2xvY2F0b3IsIElOSVRfRk9SS05VTSwKIAkJCQlT UEdJU1RfTlVMTF9CTEtOTywgcGFnZSwgdHJ1ZSk7CiAKIAkvKgpAQCAtMTk3LDcgKzIwMCw3IEBA IHNwZ2J1aWxkZW1wdHkoUmVsYXRpb24gaW5kZXgpCiAJICogd3JpdGVzIGRpZCBub3QgZ28gdGhy b3VnaCBzaGFyZWQgYnVmZmVycyBhbmQgdGhlcmVmb3JlIGEgY29uY3VycmVudAogCSAqIGNoZWNr cG9pbnQgbWF5IGhhdmUgbW92ZWQgdGhlIHJlZG8gcG9pbnRlciBwYXN0IG91ciB4bG9nIHJlY29y ZC4KIAkgKi8KLQlzbWdyaW1tZWRzeW5jKFJlbGF0aW9uR2V0U21ncihpbmRleCksIElOSVRfRk9S S05VTSk7CisJc21ncmltbWVkc3luYyhzZmlsZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxl L3RhYmxlYW0uYwppbmRleCBlZjBkMzRmY2VlZS4uOWViZjE3NGIxODkgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RhYmxlL3RhYmxlYW0uYwpAQCAtNjMxLDEwICs2MzEsMTAgQEAgdGFibGVfYmxvY2tfcmVsYXRp b25fc2l6ZShSZWxhdGlvbiByZWwsIEZvcmtOdW1iZXIgZm9ya051bWJlcikKIAlpZiAoZm9ya051 bWJlciA9PSBJbnZhbGlkRm9ya051bWJlcikKIAl7CiAJCWZvciAoaW50IGkgPSAwOyBpIDwgTUFY X0ZPUktOVU07IGkrKykKLQkJCW5ibG9ja3MgKz0gc21ncm5ibG9ja3MoUmVsYXRpb25HZXRTbWdy KHJlbCksIGkpOworCQkJbmJsb2NrcyArPSBzbWdybmJsb2NrcyhSZWxhdGlvbkdldFNtZ3IocmVs LCBpKSk7CiAJfQogCWVsc2UKLQkJbmJsb2NrcyA9IHNtZ3JuYmxvY2tzKFJlbGF0aW9uR2V0U21n cihyZWwpLCBmb3JrTnVtYmVyKTsKKwkJbmJsb2NrcyA9IHNtZ3JuYmxvY2tzKFJlbGF0aW9uR2V0 U21ncihyZWwsIGZvcmtOdW1iZXIpKTsKIAogCXJldHVybiBuYmxvY2tzICogQkxDS1NaOwogfQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jCmluZGV4IDRhNDMxZDU4NzY3Li5jMDhmMDEwY2YxNSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYwpAQCAtNDEsNiArNDEsOCBAQAogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnX3RyYWNlLmgiCiAjaW5jbHVkZSAicGdzdGF0Lmgi CisjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2J1Zl9pbnRl cm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3N5 bmMuaCIKIApAQCAtNTksNyArNjEsNyBAQAogLyogV2UgbmVlZCB0d28gYml0cyBwZXIgeGFjdCwg c28gZm91ciB4YWN0cyBmaXQgaW4gYSBieXRlICovCiAjZGVmaW5lIENMT0dfQklUU19QRVJfWEFD VAkyCiAjZGVmaW5lIENMT0dfWEFDVFNfUEVSX0JZVEUgNAotI2RlZmluZSBDTE9HX1hBQ1RTX1BF Ul9QQUdFIChCTENLU1ogKiBDTE9HX1hBQ1RTX1BFUl9CWVRFKQorI2RlZmluZSBDTE9HX1hBQ1RT X1BFUl9QQUdFICgoQkxDS1NaIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEpICogQ0xPR19YQUNUU19Q RVJfQllURSkKICNkZWZpbmUgQ0xPR19YQUNUX0JJVE1BU0sJKCgxIDw8IENMT0dfQklUU19QRVJf WEFDVCkgLSAxKQogCiAjZGVmaW5lIFRyYW5zYWN0aW9uSWRUb1BhZ2UoeGlkKQkoKHhpZCkgLyAo VHJhbnNhY3Rpb25JZCkgQ0xPR19YQUNUU19QRVJfUEFHRSkKQEAgLTgxLDE3ICs4MywxMCBAQAog ICovCiAjZGVmaW5lIFRIUkVTSE9MRF9TVUJUUkFOU19DTE9HX09QVAk1CiAKLS8qCi0gKiBMaW5r IHRvIHNoYXJlZC1tZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIGZvciBDTE9HIGNvbnRyb2wKLSAqLwot c3RhdGljIFNscnVDdGxEYXRhIFhhY3RDdGxEYXRhOwotCi0jZGVmaW5lIFhhY3RDdGwgKCZYYWN0 Q3RsRGF0YSkKIAotCi1zdGF0aWMgaW50CVplcm9DTE9HUGFnZShpbnQgcGFnZW5vLCBib29sIHdy aXRlWGxvZyk7CitzdGF0aWMgQnVmZmVyIFplcm9DTE9HUGFnZShpbnQgcGFnZW5vLCBib29sIHdy aXRlWGxvZyk7CiBzdGF0aWMgYm9vbCBDTE9HUGFnZVByZWNlZGVzKGludCBwYWdlMSwgaW50IHBh Z2UyKTsKLXN0YXRpYyB2b2lkIFdyaXRlWmVyb1BhZ2VYbG9nUmVjKGludCBwYWdlbm8pOworc3Rh dGljIFhMb2dSZWNQdHIgV3JpdGVaZXJvUGFnZVhsb2dSZWMoaW50IHBhZ2Vubyk7CiBzdGF0aWMg dm9pZCBXcml0ZVRydW5jYXRlWGxvZ1JlYyhpbnQgcGFnZW5vLCBUcmFuc2FjdGlvbklkIG9sZGVz dFhhY3QsCiAJCQkJCQkJCSBPaWQgb2xkZXN0WGFjdERiKTsKIHN0YXRpYyB2b2lkIFRyYW5zYWN0 aW9uSWRTZXRQYWdlU3RhdHVzKFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCkBAIC05 OSw3ICs5NCw3IEBAIHN0YXRpYyB2b2lkIFRyYW5zYWN0aW9uSWRTZXRQYWdlU3RhdHVzKFRyYW5z YWN0aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCiAJCQkJCQkJCQkgICBYTG9nUmVjUHRyIGxzbiwg aW50IHBhZ2VubywKIAkJCQkJCQkJCSAgIGJvb2wgYWxsX3hhY3Rfc2FtZV9wYWdlKTsKIHN0YXRp YyB2b2lkIFRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0 YXR1cyBzdGF0dXMsCi0JCQkJCQkJCQkgIFhMb2dSZWNQdHIgbHNuLCBpbnQgc2xvdG5vKTsKKwkJ CQkJCQkJCSAgWExvZ1JlY1B0ciBsc24sIEJ1ZmZlciBidWZmZXIpOwogc3RhdGljIHZvaWQgc2V0 X3N0YXR1c19ieV9wYWdlcyhpbnQgbnN1YnhpZHMsIFRyYW5zYWN0aW9uSWQgKnN1YnhpZHMsCiAJ CQkJCQkJCVhpZFN0YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNuKTsKIHN0YXRpYyBib29sIFRy YW5zYWN0aW9uR3JvdXBVcGRhdGVYaWRTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsCkBAIC0zMzks MTMgKzMzNCwxMiBAQCBUcmFuc2FjdGlvbklkU2V0UGFnZVN0YXR1c0ludGVybmFsKFRyYW5zYWN0 aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCiAJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgKnN1Ynhp ZHMsIFhpZFN0YXR1cyBzdGF0dXMsCiAJCQkJCQkJCSAgIFhMb2dSZWNQdHIgbHNuLCBpbnQgcGFn ZW5vKQogewotCWludAkJCXNsb3RubzsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAlpbnQJCQlpOwogCiAJ QXNzZXJ0KHN0YXR1cyA9PSBUUkFOU0FDVElPTl9TVEFUVVNfQ09NTUlUVEVEIHx8CiAJCSAgIHN0 YXR1cyA9PSBUUkFOU0FDVElPTl9TVEFUVVNfQUJPUlRFRCB8fAogCQkgICAoc3RhdHVzID09IFRS QU5TQUNUSU9OX1NUQVRVU19TVUJfQ09NTUlUVEVEICYmICFUcmFuc2FjdGlvbklkSXNWYWxpZCh4 aWQpKSk7Ci0JQXNzZXJ0KExXTG9ja0hlbGRCeU1lSW5Nb2RlKFhhY3RTTFJVTG9jaywgTFdfRVhD TFVTSVZFKSk7CiAKIAkvKgogCSAqIElmIHdlJ3JlIGRvaW5nIGFuIGFzeW5jIGNvbW1pdCAoaWUs IGxzbiBpcyB2YWxpZCksIHRoZW4gd2UgbXVzdCB3YWl0CkBAIC0zNTYsNyArMzUwLDggQEAgVHJh bnNhY3Rpb25JZFNldFBhZ2VTdGF0dXNJbnRlcm5hbChUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5z dWJ4aWRzLAogCSAqIHdyaXRlLWJ1c3ksIHNpbmNlIHdlIGRvbid0IGNhcmUgaWYgdGhlIHVwZGF0 ZSByZWFjaGVzIGRpc2sgc29vbmVyIHRoYW4KIAkgKiB3ZSB0aGluay4KIAkgKi8KLQlzbG90bm8g PSBTaW1wbGVMcnVSZWFkUGFnZShYYWN0Q3RsLCBwYWdlbm8sIFhMb2dSZWNQdHJJc0ludmFsaWQo bHNuKSwgeGlkKTsKKwlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX0NMT0dfSUQsIHBhZ2Vu bywgUkJNX05PUk1BTCk7CisJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lW RSk7CiAKIAkvKgogCSAqIFNldCB0aGUgbWFpbiB0cmFuc2FjdGlvbiBpZCwgaWYgYW55LgpAQCAt Mzc0LDI1ICszNjksMjcgQEAgVHJhbnNhY3Rpb25JZFNldFBhZ2VTdGF0dXNJbnRlcm5hbChUcmFu c2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLAogCQl7CiAJCQlmb3IgKGkgPSAwOyBpIDwgbnN1 YnhpZHM7IGkrKykKIAkJCXsKLQkJCQlBc3NlcnQoWGFjdEN0bC0+c2hhcmVkLT5wYWdlX251bWJl cltzbG90bm9dID09IFRyYW5zYWN0aW9uSWRUb1BhZ2Uoc3VieGlkc1tpXSkpOworCQkJCUFzc2Vy dChwYWdlbm8gPT0gVHJhbnNhY3Rpb25JZFRvUGFnZShzdWJ4aWRzW2ldKSk7CiAJCQkJVHJhbnNh Y3Rpb25JZFNldFN0YXR1c0JpdChzdWJ4aWRzW2ldLAogCQkJCQkJCQkJCSAgVFJBTlNBQ1RJT05f U1RBVFVTX1NVQl9DT01NSVRURUQsCi0JCQkJCQkJCQkJICBsc24sIHNsb3Rubyk7CisJCQkJCQkJ CQkJICBsc24sIGJ1ZmZlcik7CiAJCQl9CiAJCX0KIAogCQkvKiAuLi4gdGhlbiB0aGUgbWFpbiB0 cmFuc2FjdGlvbiAqLwotCQlUcmFuc2FjdGlvbklkU2V0U3RhdHVzQml0KHhpZCwgc3RhdHVzLCBs c24sIHNsb3Rubyk7CisJCVRyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQoeGlkLCBzdGF0dXMsIGxz biwgYnVmZmVyKTsKIAl9CiAKIAkvKiBTZXQgdGhlIHN1YnRyYW5zYWN0aW9ucyAqLwogCWZvciAo aSA9IDA7IGkgPCBuc3VieGlkczsgaSsrKQogCXsKLQkJQXNzZXJ0KFhhY3RDdGwtPnNoYXJlZC0+ cGFnZV9udW1iZXJbc2xvdG5vXSA9PSBUcmFuc2FjdGlvbklkVG9QYWdlKHN1YnhpZHNbaV0pKTsK LQkJVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChzdWJ4aWRzW2ldLCBzdGF0dXMsIGxzbiwgc2xv dG5vKTsKKwkJQXNzZXJ0KHBhZ2VubyA9PSBUcmFuc2FjdGlvbklkVG9QYWdlKHN1YnhpZHNbaV0p KTsKKwkJVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChzdWJ4aWRzW2ldLCBzdGF0dXMsIGxzbiwg YnVmZmVyKTsKIAl9CiAKLQlYYWN0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRy dWU7CisJCisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihi dWZmZXIpOwogfQogCiAvKgpAQCAtNTY2LDcgKzU2Myw3IEBAIFRyYW5zYWN0aW9uR3JvdXBVcGRh dGVYaWRTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsCiAgKiBNdXN0 IGJlIGNhbGxlZCB3aXRoIFhhY3RTTFJVTG9jayBoZWxkCiAgKi8KIHN0YXRpYyB2b2lkCi1UcmFu c2FjdGlvbklkU2V0U3RhdHVzQml0KFRyYW5zYWN0aW9uSWQgeGlkLCBYaWRTdGF0dXMgc3RhdHVz LCBYTG9nUmVjUHRyIGxzbiwgaW50IHNsb3RubykKK1RyYW5zYWN0aW9uSWRTZXRTdGF0dXNCaXQo VHJhbnNhY3Rpb25JZCB4aWQsIFhpZFN0YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNuLCBCdWZm ZXIgYnVmZmVyKQogewogCWludAkJCWJ5dGVubyA9IFRyYW5zYWN0aW9uSWRUb0J5dGUoeGlkKTsK IAlpbnQJCQlic2hpZnQgPSBUcmFuc2FjdGlvbklkVG9CSW5kZXgoeGlkKSAqIENMT0dfQklUU19Q RVJfWEFDVDsKQEAgLTU3NCw3ICs1NzEsMTAgQEAgVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChU cmFuc2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24sIGkKIAlj aGFyCQlieXRldmFsOwogCWNoYXIJCWN1cnZhbDsKIAotCWJ5dGVwdHIgPSBYYWN0Q3RsLT5zaGFy ZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBieXRlbm87CisJQXNzZXJ0KExXTG9ja0hlbGRCeU1l SW5Nb2RlKEJ1ZmZlckRlc2NyaXB0b3JHZXRDb250ZW50TG9jayhHZXRCdWZmZXJEZXNjcmlwdG9y KGJ1ZmZlciAtIDEpKSwKKwkJCQkJCQkJTFdfRVhDTFVTSVZFKSk7CisKKwlieXRlcHRyID0gUGFn ZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBieXRlbm87CiAJY3VydmFsID0g KCpieXRlcHRyID4+IGJzaGlmdCkgJiBDTE9HX1hBQ1RfQklUTUFTSzsKIAogCS8qCkBAIC02MDIs OCArNjAyLDkgQEAgVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChUcmFuc2FjdGlvbklkIHhpZCwg WGlkU3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24sIGkKIAlieXRldmFsIHw9IChzdGF0dXMg PDwgYnNoaWZ0KTsKIAkqYnl0ZXB0ciA9IGJ5dGV2YWw7CiAKKwogCS8qCi0JICogVXBkYXRlIHRo ZSBncm91cCBMU04gaWYgdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gTFNOIGlzIGhpZ2hlci4K KwkgKiBVcGRhdGUgdGhlIGJ1ZmZlciBMU04gaWYgdGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24g TFNOIGlzIGhpZ2hlci4KIAkgKgogCSAqIE5vdGU6IGxzbiB3aWxsIGJlIGludmFsaWQgd2hlbiBz dXBwbGllZCBkdXJpbmcgSW5SZWNvdmVyeSBwcm9jZXNzaW5nLAogCSAqIHNvIHdlIGRvbid0IG5l ZWQgdG8gZG8gYW55dGhpbmcgc3BlY2lhbCB0byBhdm9pZCBMU04gdXBkYXRlcyBkdXJpbmcKQEAg LTYxMiwxMCArNjEzLDggQEAgVHJhbnNhY3Rpb25JZFNldFN0YXR1c0JpdChUcmFuc2FjdGlvbklk IHhpZCwgWGlkU3RhdHVzIHN0YXR1cywgWExvZ1JlY1B0ciBsc24sIGkKIAkgKi8KIAlpZiAoIVhM b2dSZWNQdHJJc0ludmFsaWQobHNuKSkKIAl7Ci0JCWludAkJCWxzbmluZGV4ID0gR2V0TFNOSW5k ZXgoc2xvdG5vLCB4aWQpOwotCi0JCWlmIChYYWN0Q3RsLT5zaGFyZWQtPmdyb3VwX2xzbltsc25p bmRleF0gPCBsc24pCi0JCQlYYWN0Q3RsLT5zaGFyZWQtPmdyb3VwX2xzbltsc25pbmRleF0gPSBs c247CisJCWlmIChQYWdlR2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgPCBsc24pCisJCQlQ YWdlU2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSwgbHNuKTsKIAl9CiB9CiAKQEAgLTY0MCw2 NyArNjM5LDIxIEBAIFRyYW5zYWN0aW9uSWRHZXRTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsIFhM b2dSZWNQdHIgKmxzbikKIAlpbnQJCQlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKHhpZCk7 CiAJaW50CQkJYnl0ZW5vID0gVHJhbnNhY3Rpb25JZFRvQnl0ZSh4aWQpOwogCWludAkJCWJzaGlm dCA9IFRyYW5zYWN0aW9uSWRUb0JJbmRleCh4aWQpICogQ0xPR19CSVRTX1BFUl9YQUNUOwotCWlu dAkJCXNsb3RubzsKLQlpbnQJCQlsc25pbmRleDsKIAljaGFyCSAgICpieXRlcHRyOwogCVhpZFN0 YXR1cwlzdGF0dXM7CisJQnVmZmVyCQlidWZmZXI7CiAKLQkvKiBsb2NrIGlzIGFjcXVpcmVkIGJ5 IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5ICovCi0KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFk UGFnZV9SZWFkT25seShYYWN0Q3RsLCBwYWdlbm8sIHhpZCk7Ci0JYnl0ZXB0ciA9IFhhY3RDdGwt PnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGJ5dGVubzsKKwlidWZmZXIgPSBSZWFkU2xy dUJ1ZmZlcihTTFJVX0NMT0dfSUQsIHBhZ2VubywgUkJNX05PUk1BTCk7CisJYnl0ZXB0ciA9IFBh Z2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpICsgYnl0ZW5vOwogCiAJc3RhdHVz ID0gKCpieXRlcHRyID4+IGJzaGlmdCkgJiBDTE9HX1hBQ1RfQklUTUFTSzsKKwkqbHNuICAgPSBQ YWdlR2V0TFNOKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSk7CiAKLQlsc25pbmRleCA9IEdldExTTklu ZGV4KHNsb3RubywgeGlkKTsKLQkqbHNuID0gWGFjdEN0bC0+c2hhcmVkLT5ncm91cF9sc25bbHNu aW5kZXhdOwotCi0JTFdMb2NrUmVsZWFzZShYYWN0U0xSVUxvY2spOworCVJlbGVhc2VCdWZmZXIo YnVmZmVyKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8qCi0gKiBOdW1iZXIgb2Ygc2hhcmVk IENMT0cgYnVmZmVycy4KLSAqCi0gKiBPbiBsYXJnZXIgbXVsdGktcHJvY2Vzc29yIHN5c3RlbXMs IGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbWFueSBDTE9HIHBhZ2UKLSAqIHJlcXVlc3RzIGluIGZs aWdodCBhdCBvbmUgdGltZSB3aGljaCBjb3VsZCBsZWFkIHRvIGRpc2sgYWNjZXNzIGZvciBDTE9H Ci0gKiBwYWdlIGlmIHRoZSByZXF1aXJlZCBwYWdlIGlzIG5vdCBmb3VuZCBpbiBtZW1vcnkuICBU ZXN0aW5nIHJldmVhbGVkIHRoYXQgd2UKLSAqIGNhbiBnZXQgdGhlIGJlc3QgcGVyZm9ybWFuY2Ug YnkgaGF2aW5nIDEyOCBDTE9HIGJ1ZmZlcnMsIG1vcmUgdGhhbiB0aGF0IGl0Ci0gKiBkb2Vzbid0 IGltcHJvdmUgcGVyZm9ybWFuY2UuCi0gKgotICogVW5jb25kaXRpb25hbGx5IGtlZXBpbmcgdGhl IG51bWJlciBvZiBDTE9HIGJ1ZmZlcnMgdG8gMTI4IGRpZCBub3Qgc2VlbSBsaWtlCi0gKiBhIGdv b2QgaWRlYSwgYmVjYXVzZSBpdCB3b3VsZCBpbmNyZWFzZSB0aGUgbWluaW11bSBhbW91bnQgb2Yg c2hhcmVkIG1lbW9yeQotICogcmVxdWlyZWQgdG8gc3RhcnQsIHdoaWNoIGNvdWxkIGJlIGEgcHJv YmxlbSBmb3IgcGVvcGxlIHJ1bm5pbmcgdmVyeSBzbWFsbAotICogY29uZmlndXJhdGlvbnMuICBU aGUgZm9sbG93aW5nIGZvcm11bGEgc2VlbXMgdG8gcmVwcmVzZW50IGEgcmVhc29uYWJsZQotICog Y29tcHJvbWlzZTogcGVvcGxlIHdpdGggdmVyeSBsb3cgdmFsdWVzIGZvciBzaGFyZWRfYnVmZmVy cyB3aWxsIGdldCBmZXdlcgotICogQ0xPRyBidWZmZXJzIGFzIHdlbGwsIGFuZCBldmVyeW9uZSBl bHNlIHdpbGwgZ2V0IDEyOC4KLSAqLwotU2l6ZQotQ0xPR1NobWVtQnVmZmVycyh2b2lkKQotewot CXJldHVybiBNaW4oMTI4LCBNYXgoNCwgTkJ1ZmZlcnMgLyA1MTIpKTsKLX0KLQotLyoKLSAqIElu aXRpYWxpemF0aW9uIG9mIHNoYXJlZCBtZW1vcnkgZm9yIENMT0cKLSAqLwotU2l6ZQotQ0xPR1No bWVtU2l6ZSh2b2lkKQotewotCXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUoQ0xPR1NobWVtQnVm ZmVycygpLCBDTE9HX0xTTlNfUEVSX1BBR0UpOwotfQotCi12b2lkCi1DTE9HU2htZW1Jbml0KHZv aWQpCi17Ci0JWGFjdEN0bC0+UGFnZVByZWNlZGVzID0gQ0xPR1BhZ2VQcmVjZWRlczsKLQlTaW1w bGVMcnVJbml0KFhhY3RDdGwsICJYYWN0IiwgQ0xPR1NobWVtQnVmZmVycygpLCBDTE9HX0xTTlNf UEVSX1BBR0UsCi0JCQkJICBYYWN0U0xSVUxvY2ssICJwZ194YWN0IiwgTFdUUkFOQ0hFX1hBQ1Rf QlVGRkVSLAotCQkJCSAgU1lOQ19IQU5ETEVSX0NMT0cpOwotCVNscnVQYWdlUHJlY2VkZXNVbml0 VGVzdHMoWGFjdEN0bCwgQ0xPR19YQUNUU19QRVJfUEFHRSk7Ci19Ci0KIC8qCiAgKiBUaGlzIGZ1 bmMgbXVzdCBiZSBjYWxsZWQgT05DRSBvbiBzeXN0ZW0gaW5zdGFsbC4gIEl0IGNyZWF0ZXMKICAq IHRoZSBpbml0aWFsIENMT0cgc2VnbWVudC4gIChUaGUgQ0xPRyBkaXJlY3RvcnkgaXMgYXNzdW1l ZCB0bwpAQCAtNzEwLDE4ICs2NjMsMTUgQEAgQ0xPR1NobWVtSW5pdCh2b2lkKQogdm9pZAogQm9v dFN0cmFwQ0xPRyh2b2lkKQogewotCWludAkJCXNsb3RubzsKLQotCUxXTG9ja0FjcXVpcmUoWGFj dFNMUlVMb2NrLCBMV19FWENMVVNJVkUpOworCUJ1ZmZlcgkJYnVmZmVyOwogCiAJLyogQ3JlYXRl IGFuZCB6ZXJvIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBjb21taXQgbG9nICovCi0Jc2xvdG5vID0g WmVyb0NMT0dQYWdlKDAsIGZhbHNlKTsKKwlidWZmZXIgPSBaZXJvQ0xPR1BhZ2UoMCwgZmFsc2Up OwogCiAJLyogTWFrZSBzdXJlIGl0J3Mgd3JpdHRlbiBvdXQgKi8KLQlTaW1wbGVMcnVXcml0ZVBh Z2UoWGFjdEN0bCwgc2xvdG5vKTsKLQlBc3NlcnQoIVhhY3RDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0 eVtzbG90bm9dKTsKKwlGbHVzaE9uZUJ1ZmZlcihidWZmZXIpOwogCi0JTFdMb2NrUmVsZWFzZShY YWN0U0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIH0KIAogLyoKQEAg LTczMywxNyArNjgzLDI5IEBAIEJvb3RTdHJhcENMT0codm9pZCkKICAqCiAgKiBDb250cm9sIGxv Y2sgbXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCiAgKi8K LXN0YXRpYyBpbnQKK3N0YXRpYyBCdWZmZXIKIFplcm9DTE9HUGFnZShpbnQgcGFnZW5vLCBib29s IHdyaXRlWGxvZykKIHsKLQlpbnQJCQlzbG90bm87CisJQnVmZmVyCQlidWZmZXI7CisJUGFnZSAJ CXBhZ2U7CisJWExvZ1JlY1B0ciAgbHNuOworCisJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xS VV9DTE9HX0lELCBwYWdlbm8pOworCQorCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CiAK LQlzbG90bm8gPSBTaW1wbGVMcnVaZXJvUGFnZShYYWN0Q3RsLCBwYWdlbm8pOworCVBhZ2VJbml0 U0xSVShwYWdlLCBCTENLU1osIDApOwogCisJbHNuID0gMDsKIAlpZiAod3JpdGVYbG9nKQotCQlX cml0ZVplcm9QYWdlWGxvZ1JlYyhwYWdlbm8pOworCXsKKwkJbHNuID0gV3JpdGVaZXJvUGFnZVhs b2dSZWMocGFnZW5vKTsKKwl9CisJCisJUGFnZVNldEhlYWRlckRhdGFOb25SZWwocGFnZSwgcGFn ZW5vLCBsc24sIEJMQ0tTWiwgUEdfTUVUQVBBR0VfTEFZT1VUX1ZFUlNJT04pOworCU1hcmtCdWZm ZXJEaXJ0eShidWZmZXIpOwogCi0JcmV0dXJuIHNsb3RubzsKKwlyZXR1cm4gYnVmZmVyOwogfQog CiAvKgpAQCAtNzUzLDE3ICs3MTUsNiBAQCBaZXJvQ0xPR1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3 cml0ZVhsb2cpCiB2b2lkCiBTdGFydHVwQ0xPRyh2b2lkKQogewotCVRyYW5zYWN0aW9uSWQgeGlk ID0gWGlkRnJvbUZ1bGxUcmFuc2FjdGlvbklkKFNobWVtVmFyaWFibGVDYWNoZS0+bmV4dFhpZCk7 Ci0JaW50CQkJcGFnZW5vID0gVHJhbnNhY3Rpb25JZFRvUGFnZSh4aWQpOwotCi0JTFdMb2NrQWNx dWlyZShYYWN0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkvKgotCSAqIEluaXRpYWxpemUg b3VyIGlkZWEgb2YgdGhlIGxhdGVzdCBwYWdlIG51bWJlci4KLQkgKi8KLQlYYWN0Q3RsLT5zaGFy ZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHBhZ2VubzsKLQotCUxXTG9ja1JlbGVhc2UoWGFjdFNM UlVMb2NrKTsKIH0KIAogLyoKQEAgLTc3NSw4ICs3MjYsNiBAQCBUcmltQ0xPRyh2b2lkKQogCVRy YW5zYWN0aW9uSWQgeGlkID0gWGlkRnJvbUZ1bGxUcmFuc2FjdGlvbklkKFNobWVtVmFyaWFibGVD YWNoZS0+bmV4dFhpZCk7CiAJaW50CQkJcGFnZW5vID0gVHJhbnNhY3Rpb25JZFRvUGFnZSh4aWQp OwogCi0JTFdMb2NrQWNxdWlyZShYYWN0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KIAkvKgog CSAqIFplcm8gb3V0IHRoZSByZW1haW5kZXIgb2YgdGhlIGN1cnJlbnQgY2xvZyBwYWdlLiAgVW5k ZXIgbm9ybWFsCiAJICogY2lyY3Vtc3RhbmNlcyBpdCBzaG91bGQgYmUgemVyb2VzIGFscmVhZHks IGJ1dCBpdCBzZWVtcyBhdCBsZWFzdApAQCAtNzkzLDQwICs3NDIsMjUgQEAgVHJpbUNMT0codm9p ZCkKIAl7CiAJCWludAkJCWJ5dGVubyA9IFRyYW5zYWN0aW9uSWRUb0J5dGUoeGlkKTsKIAkJaW50 CQkJYnNoaWZ0ID0gVHJhbnNhY3Rpb25JZFRvQkluZGV4KHhpZCkgKiBDTE9HX0JJVFNfUEVSX1hB Q1Q7Ci0JCWludAkJCXNsb3RubzsKIAkJY2hhcgkgICAqYnl0ZXB0cjsKKwkJQnVmZmVyCQlidWZm ZXI7CiAKLQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoWGFjdEN0bCwgcGFnZW5vLCBmYWxz ZSwgeGlkKTsKLQkJYnl0ZXB0ciA9IFhhY3RDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5v XSArIGJ5dGVubzsKKwkJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9DTE9HX0lELCBwYWdl bm8sIFJCTV9UUklNKTsKKwkJTG9ja0J1ZmZlcihidWZmZXIsIEJVRkZFUl9MT0NLX0VYQ0xVU0lW RSk7CisJCWJ5dGVwdHIgPSBQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSAr IGJ5dGVubzsKIAogCQkvKiBaZXJvIHNvLWZhci11bnVzZWQgcG9zaXRpb25zIGluIHRoZSBjdXJy ZW50IGJ5dGUgKi8KIAkJKmJ5dGVwdHIgJj0gKDEgPDwgYnNoaWZ0KSAtIDE7CiAJCS8qIFplcm8g dGhlIHJlc3Qgb2YgdGhlIHBhZ2UgKi8KLQkJTWVtU2V0KGJ5dGVwdHIgKyAxLCAwLCBCTENLU1og LSBieXRlbm8gLSAxKTsKKwkJTWVtU2V0KGJ5dGVwdHIgKyAxLCAwLCBCTENLU1ogLSBieXRlbm8g LSBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVyRGF0YSkgLSAxKTsKIAotCQlYYWN0Q3RsLT5zaGFy ZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRydWU7Ci0JfQogCi0JTFdMb2NrUmVsZWFzZShYYWN0 U0xSVUxvY2spOwotfQorCQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIAotLyoKLSAqIFBlcmZv cm0gYSBjaGVja3BvaW50IC0tLSBlaXRoZXIgZHVyaW5nIHNodXRkb3duLCBvciBvbi10aGUtZmx5 Ci0gKi8KLXZvaWQKLUNoZWNrUG9pbnRDTE9HKHZvaWQpCi17Ci0JLyoKLQkgKiBXcml0ZSBkaXJ0 eSBDTE9HIHBhZ2VzIHRvIGRpc2suICBUaGlzIG1heSByZXN1bHQgaW4gc3luYyByZXF1ZXN0cwot CSAqIHF1ZXVlZCBmb3IgbGF0ZXIgaGFuZGxpbmcgYnkgUHJvY2Vzc1N5bmNSZXF1ZXN0cygpLCBh cyBwYXJ0IG9mIHRoZQotCSAqIGNoZWNrcG9pbnQuCi0JICovCi0JVFJBQ0VfUE9TVEdSRVNRTF9D TE9HX0NIRUNLUE9JTlRfU1RBUlQodHJ1ZSk7Ci0JU2ltcGxlTHJ1V3JpdGVBbGwoWGFjdEN0bCwg dHJ1ZSk7Ci0JVFJBQ0VfUE9TVEdSRVNRTF9DTE9HX0NIRUNLUE9JTlRfRE9ORSh0cnVlKTsKKwkJ VW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOworCX0KIH0KIAotCiAvKgogICogTWFrZSBzdXJl IHRoYXQgQ0xPRyBoYXMgcm9vbSBmb3IgYSBuZXdseS1hbGxvY2F0ZWQgWElELgogICoKQEAgLTg1 MCwxMiArNzg0LDggQEAgRXh0ZW5kQ0xPRyhUcmFuc2FjdGlvbklkIG5ld2VzdFhhY3QpCiAKIAlw YWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKG5ld2VzdFhhY3QpOwogCi0JTFdMb2NrQWNxdWly ZShYYWN0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KIAkvKiBaZXJvIHRoZSBwYWdlIGFuZCBt YWtlIGFuIFhMT0cgZW50cnkgYWJvdXQgaXQgKi8KLQlaZXJvQ0xPR1BhZ2UocGFnZW5vLCB0cnVl KTsKLQotCUxXTG9ja1JlbGVhc2UoWGFjdFNMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVy KFplcm9DTE9HUGFnZShwYWdlbm8sIHRydWUpKTsKIH0KIAogCkBAIC04ODYsNyArODE2LDggQEAg VHJ1bmNhdGVDTE9HKFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCwgT2lkIG9sZGVzdHhpZF9kYXRv aWQpCiAJY3V0b2ZmUGFnZSA9IFRyYW5zYWN0aW9uSWRUb1BhZ2Uob2xkZXN0WGFjdCk7CiAKIAkv KiBDaGVjayB0byBzZWUgaWYgdGhlcmUncyBhbnkgZmlsZXMgdGhhdCBjb3VsZCBiZSByZW1vdmVk ICovCi0JaWYgKCFTbHJ1U2NhbkRpcmVjdG9yeShYYWN0Q3RsLCBTbHJ1U2NhbkRpckNiUmVwb3J0 UHJlc2VuY2UsICZjdXRvZmZQYWdlKSkKKwlpZiAoIVNscnVTY2FuRGlyZWN0b3J5KFNMUlVfQ0xP R19JRCwgQ0xPR1BhZ2VQcmVjZWRlcywKKwkJCQkJCSAgIFNscnVTY2FuRGlyQ2JSZXBvcnRQcmVz ZW5jZSwgJmN1dG9mZlBhZ2UpKQogCQlyZXR1cm47CQkJCQkvKiBub3RoaW5nIHRvIHJlbW92ZSAq LwogCiAJLyoKQEAgLTkwNyw3ICs4MzgsNyBAQCBUcnVuY2F0ZUNMT0coVHJhbnNhY3Rpb25JZCBv bGRlc3RYYWN0LCBPaWQgb2xkZXN0eGlkX2RhdG9pZCkKIAlXcml0ZVRydW5jYXRlWGxvZ1JlYyhj dXRvZmZQYWdlLCBvbGRlc3RYYWN0LCBvbGRlc3R4aWRfZGF0b2lkKTsKIAogCS8qIE5vdyB3ZSBj YW4gcmVtb3ZlIHRoZSBvbGQgQ0xPRyBzZWdtZW50KHMpICovCi0JU2ltcGxlTHJ1VHJ1bmNhdGUo WGFjdEN0bCwgY3V0b2ZmUGFnZSk7CisJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9DTE9HX0lELCBD TE9HUGFnZVByZWNlZGVzLCBjdXRvZmZQYWdlKTsKIH0KIAogCkBAIC05NDgsMTIgKzg3OSwxNSBA QCBDTE9HUGFnZVByZWNlZGVzKGludCBwYWdlMSwgaW50IHBhZ2UyKQogLyoKICAqIFdyaXRlIGEg WkVST1BBR0UgeGxvZyByZWNvcmQKICAqLwotc3RhdGljIHZvaWQKK3N0YXRpYyBYTG9nUmVjUHRy IAogV3JpdGVaZXJvUGFnZVhsb2dSZWMoaW50IHBhZ2VubykKIHsKKwlYTG9nUmVjUHRyIGxzbjsK IAlYTG9nQmVnaW5JbnNlcnQoKTsKIAlYTG9nUmVnaXN0ZXJEYXRhKChjaGFyICopICgmcGFnZW5v KSwgc2l6ZW9mKGludCkpOwotCSh2b2lkKSBYTG9nSW5zZXJ0KFJNX0NMT0dfSUQsIENMT0dfWkVS T1BBR0UpOworCWxzbiA9IFhMb2dJbnNlcnQoUk1fQ0xPR19JRCwgQ0xPR19aRVJPUEFHRSk7CisK KwlyZXR1cm4gbHNuOwogfQogCiAvKgpAQCAtOTkyLDE3ICs5MjYsMTMgQEAgY2xvZ19yZWRvKFhM b2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCWlmIChpbmZvID09IENMT0dfWkVST1BBR0UpCiAJewog CQlpbnQJCQlwYWdlbm87Ci0JCWludAkJCXNsb3RubzsKKwkJQnVmZmVyCQlidWZmZXI7CiAKIAkJ bWVtY3B5KCZwYWdlbm8sIFhMb2dSZWNHZXREYXRhKHJlY29yZCksIHNpemVvZihpbnQpKTsKIAot CQlMV0xvY2tBY3F1aXJlKFhhY3RTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCQlzbG90bm8g PSBaZXJvQ0xPR1BhZ2UocGFnZW5vLCBmYWxzZSk7Ci0JCVNpbXBsZUxydVdyaXRlUGFnZShYYWN0 Q3RsLCBzbG90bm8pOwotCQlBc3NlcnQoIVhhY3RDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90 bm9dKTsKLQotCQlMV0xvY2tSZWxlYXNlKFhhY3RTTFJVTG9jayk7CisJCWJ1ZmZlciA9IFplcm9D TE9HUGFnZShwYWdlbm8sIGZhbHNlKTsKKwkJRmx1c2hPbmVCdWZmZXIoYnVmZmVyKTsKKwkJVW5s b2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCX0KIAllbHNlIGlmIChpbmZvID09IENMT0dfVFJV TkNBVEUpCiAJewpAQCAtMTAxMiwxNyArOTQyLDggQEAgY2xvZ19yZWRvKFhMb2dSZWFkZXJTdGF0 ZSAqcmVjb3JkKQogCiAJCUFkdmFuY2VPbGRlc3RDbG9nWGlkKHhscmVjLm9sZGVzdFhhY3QpOwog Ci0JCVNpbXBsZUxydVRydW5jYXRlKFhhY3RDdGwsIHhscmVjLnBhZ2Vubyk7CisJCVNpbXBsZUxy dVRydW5jYXRlKFNMUlVfQ0xPR19JRCwgQ0xPR1BhZ2VQcmVjZWRlcywgeGxyZWMucGFnZW5vKTsK IAl9CiAJZWxzZQogCQllbG9nKFBBTklDLCAiY2xvZ19yZWRvOiB1bmtub3duIG9wIGNvZGUgJXUi LCBpbmZvKTsKIH0KLQotLyoKLSAqIEVudHJ5cG9pbnQgZm9yIHN5bmMuYyB0byBzeW5jIGNsb2cg ZmlsZXMuCi0gKi8KLWludAotY2xvZ3N5bmNmaWxldGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNo YXIgKnBhdGgpCi17Ci0JcmV0dXJuIFNscnVTeW5jRmlsZVRhZyhYYWN0Q3RsLCBmdGFnLCBwYXRo KTsKLX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2NvbW1pdF90cy5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY29tbWl0X3RzLmMKaW5kZXggYjg5N2ZhYmM3 MDIuLjQ5NWNmYWVkMDNmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9j b21taXRfdHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jb21taXRfdHMuYwpA QCAtNjMsMTkgKzYzLDE0IEBAIHR5cGVkZWYgc3RydWN0IENvbW1pdFRpbWVzdGFtcEVudHJ5CiAJ CQkJCQkJCQlzaXplb2YoUmVwT3JpZ2luSWQpKQogCiAjZGVmaW5lIENPTU1JVF9UU19YQUNUU19Q RVJfUEFHRSBcCi0JKEJMQ0tTWiAvIFNpemVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5KQorCSgoQkxD S1NaIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEpIC8gU2l6ZU9mQ29tbWl0VGltZXN0YW1wRW50cnkp CiAKICNkZWZpbmUgVHJhbnNhY3Rpb25JZFRvQ1RzUGFnZSh4aWQpIFwKIAkoKHhpZCkgLyAoVHJh bnNhY3Rpb25JZCkgQ09NTUlUX1RTX1hBQ1RTX1BFUl9QQUdFKQogI2RlZmluZSBUcmFuc2FjdGlv bklkVG9DVHNFbnRyeSh4aWQpCVwKIAkoKHhpZCkgJSAoVHJhbnNhY3Rpb25JZCkgQ09NTUlUX1RT X1hBQ1RTX1BFUl9QQUdFKQogCi0vKgotICogTGluayB0byBzaGFyZWQtbWVtb3J5IGRhdGEgc3Ry dWN0dXJlcyBmb3IgQ29tbWl0VHMgY29udHJvbAotICovCi1zdGF0aWMgU2xydUN0bERhdGEgQ29t bWl0VHNDdGxEYXRhOwogCi0jZGVmaW5lIENvbW1pdFRzQ3RsICgmQ29tbWl0VHNDdGxEYXRhKQog CiAvKgogICogV2Uga2VlcCBhIGNhY2hlIG9mIHRoZSBsYXN0IHZhbHVlIHNldCBpbiBzaGFyZWQg bWVtb3J5LgpAQCAtMTA3LDExICsxMDIsMTIgQEAgc3RhdGljIHZvaWQgU2V0WGlkQ29tbWl0VHNJ blBhZ2UoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKIHN0YXRpYyB2b2lkIFRyYW5z YWN0aW9uSWRTZXRDb21taXRUcyhUcmFuc2FjdGlvbklkIHhpZCwgVGltZXN0YW1wVHogdHMsCiAJ CQkJCQkJCQkgUmVwT3JpZ2luSWQgbm9kZWlkLCBpbnQgc2xvdG5vKTsKIHN0YXRpYyB2b2lkIGVy cm9yX2NvbW1pdF90c19kaXNhYmxlZCh2b2lkKTsKLXN0YXRpYyBpbnQJWmVyb0NvbW1pdFRzUGFn ZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZyk7CitzdGF0aWMgQnVmZmVyIFplcm9Db21taXRU c1BhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOwogc3RhdGljIGJvb2wgQ29tbWl0VHNQ YWdlUHJlY2VkZXMoaW50IHBhZ2UxLCBpbnQgcGFnZTIpOwogc3RhdGljIHZvaWQgQWN0aXZhdGVD b21taXRUcyh2b2lkKTsKIHN0YXRpYyB2b2lkIERlYWN0aXZhdGVDb21taXRUcyh2b2lkKTsKLXN0 YXRpYyB2b2lkIFdyaXRlWmVyb1BhZ2VYbG9nUmVjKGludCBwYWdlbm8pOworc3RhdGljIFhMb2dS ZWNQdHIgV3JpdGVaZXJvUGFnZVhsb2dSZWMoaW50IHBhZ2Vubyk7CisKIHN0YXRpYyB2b2lkIFdy aXRlVHJ1bmNhdGVYbG9nUmVjKGludCBwYWdlbm8sIFRyYW5zYWN0aW9uSWQgb2xkZXN0WGlkKTsK IAogLyoKQEAgLTIxNiwzMiArMjEyLDMxIEBAIFNldFhpZENvbW1pdFRzSW5QYWdlKFRyYW5zYWN0 aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsCiAJCQkJCSBUcmFuc2FjdGlvbklkICpzdWJ4aWRzLCBU aW1lc3RhbXBUeiB0cywKIAkJCQkJIFJlcE9yaWdpbklkIG5vZGVpZCwgaW50IHBhZ2VubykKIHsK LQlpbnQJCQlzbG90bm87CiAJaW50CQkJaTsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAotCUxXTG9ja0Fj cXVpcmUoQ29tbWl0VHNTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlidWZmZXIgPSBSZWFkU2xy dUJ1ZmZlcihTTFJVX0NPTU1JVF9UU19JRCwgcGFnZW5vLCBSQk1fTk9STUFMKTsKKwlMb2NrQnVm ZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKIAotCXNsb3RubyA9IFNpbXBsZUxy dVJlYWRQYWdlKENvbW1pdFRzQ3RsLCBwYWdlbm8sIHRydWUsIHhpZCk7Ci0KLQlUcmFuc2FjdGlv bklkU2V0Q29tbWl0VHMoeGlkLCB0cywgbm9kZWlkLCBzbG90bm8pOworCVRyYW5zYWN0aW9uSWRT ZXRDb21taXRUcyh4aWQsIHRzLCBub2RlaWQsIGJ1ZmZlcik7CiAJZm9yIChpID0gMDsgaSA8IG5z dWJ4aWRzOyBpKyspCi0JCVRyYW5zYWN0aW9uSWRTZXRDb21taXRUcyhzdWJ4aWRzW2ldLCB0cywg bm9kZWlkLCBzbG90bm8pOworCQlUcmFuc2FjdGlvbklkU2V0Q29tbWl0VHMoc3VieGlkc1tpXSwg dHMsIG5vZGVpZCwgYnVmZmVyKTsKIAotCUNvbW1pdFRzQ3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlb c2xvdG5vXSA9IHRydWU7CisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CiAKLQlMV0xvY2tSZWxl YXNlKENvbW1pdFRzU0xSVUxvY2spOworCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIH0K IAogLyoKICAqIFNldHMgdGhlIGNvbW1pdCB0aW1lc3RhbXAgb2YgYSBzaW5nbGUgdHJhbnNhY3Rp b24uCi0gKgotICogTXVzdCBiZSBjYWxsZWQgd2l0aCBDb21taXRUc1NMUlVMb2NrIGhlbGQKICAq Lwogc3RhdGljIHZvaWQKIFRyYW5zYWN0aW9uSWRTZXRDb21taXRUcyhUcmFuc2FjdGlvbklkIHhp ZCwgVGltZXN0YW1wVHogdHMsCi0JCQkJCQkgUmVwT3JpZ2luSWQgbm9kZWlkLCBpbnQgc2xvdG5v KQorCQkJCQkJIFJlcE9yaWdpbklkIG5vZGVpZCwgQnVmZmVyIGJ1ZmZlcikKIHsKIAlpbnQJCQll bnRyeW5vID0gVHJhbnNhY3Rpb25JZFRvQ1RzRW50cnkoeGlkKTsKKwlpbnQgCQlwYWdlbm8gID0g VHJhbnNhY3Rpb25JZFRvQ1RzUGFnZSh4aWQpOworCQogCUNvbW1pdFRpbWVzdGFtcEVudHJ5IGVu dHJ5OwogCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc05vcm1hbCh4aWQpKTsKQEAgLTI0OSw5ICsy NDQsMTIgQEAgVHJhbnNhY3Rpb25JZFNldENvbW1pdFRzKFRyYW5zYWN0aW9uSWQgeGlkLCBUaW1l c3RhbXBUeiB0cywKIAllbnRyeS50aW1lID0gdHM7CiAJZW50cnkubm9kZWlkID0gbm9kZWlkOwog Ci0JbWVtY3B5KENvbW1pdFRzQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKworCUFz c2VydCh4aWQgPT0gcGFnZW5vICogQ09NTUlUX1RTX1hBQ1RTX1BFUl9QQUdFICsgZW50cnlubyk7 CisKKwltZW1jcHkoUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBcCiAJ CSAgIFNpemVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5ICogZW50cnlubywKIAkJICAgJmVudHJ5LCBT aXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSk7CisKIH0KIAogLyoKQEAgLTI2OCwxMCArMjY2LDEw IEBAIFRyYW5zYWN0aW9uSWRHZXRDb21taXRUc0RhdGEoVHJhbnNhY3Rpb25JZCB4aWQsIFRpbWVz dGFtcFR6ICp0cywKIHsKIAlpbnQJCQlwYWdlbm8gPSBUcmFuc2FjdGlvbklkVG9DVHNQYWdlKHhp ZCk7CiAJaW50CQkJZW50cnlubyA9IFRyYW5zYWN0aW9uSWRUb0NUc0VudHJ5KHhpZCk7Ci0JaW50 CQkJc2xvdG5vOwogCUNvbW1pdFRpbWVzdGFtcEVudHJ5IGVudHJ5OwogCVRyYW5zYWN0aW9uSWQg b2xkZXN0Q29tbWl0VHNYaWQ7CiAJVHJhbnNhY3Rpb25JZCBuZXdlc3RDb21taXRUc1hpZDsKKwlC dWZmZXIJCWJ1ZmZlcjsKIAogCWlmICghVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKIAkJZXJl cG9ydChFUlJPUiwKQEAgLTMyNSwxOCArMzIzLDE5IEBAIFRyYW5zYWN0aW9uSWRHZXRDb21taXRU c0RhdGEoVHJhbnNhY3Rpb25JZCB4aWQsIFRpbWVzdGFtcFR6ICp0cywKIAkJcmV0dXJuIGZhbHNl OwogCX0KIAotCS8qIGxvY2sgaXMgYWNxdWlyZWQgYnkgU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9u bHkgKi8KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seShDb21taXRUc0N0bCwg cGFnZW5vLCB4aWQpOworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfQ09NTUlUX1RTX0lE LCBwYWdlbm8sIFJCTV9OT1JNQUwpOworCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19T SEFSRSk7CisKIAltZW1jcHkoJmVudHJ5LAotCQkgICBDb21taXRUc0N0bC0+c2hhcmVkLT5wYWdl X2J1ZmZlcltzbG90bm9dICsKLQkJICAgU2l6ZU9mQ29tbWl0VGltZXN0YW1wRW50cnkgKiBlbnRy eW5vLAotCQkgICBTaXplT2ZDb21taXRUaW1lc3RhbXBFbnRyeSk7CisJCQlQYWdlR2V0Q29udGVu dHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIFwKKwkJCVNpemVPZkNvbW1pdFRpbWVzdGFtcEVu dHJ5ICogZW50cnlubywKKwkJCVNpemVPZkNvbW1pdFRpbWVzdGFtcEVudHJ5KTsKIAogCSp0cyA9 IGVudHJ5LnRpbWU7CiAJaWYgKG5vZGVpZCkKIAkJKm5vZGVpZCA9IGVudHJ5Lm5vZGVpZDsKIAot CUxXTG9ja1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihi dWZmZXIpOwogCXJldHVybiAqdHMgIT0gMDsKIH0KIApAQCAtNDg3LDI3ICs0ODYsMTMgQEAgcGdf eGFjdF9jb21taXRfdGltZXN0YW1wX29yaWdpbihQR19GVU5DVElPTl9BUkdTKQogCVBHX1JFVFVS Tl9EQVRVTShIZWFwVHVwbGVHZXREYXR1bShodHVwKSk7CiB9CiAKLS8qCi0gKiBOdW1iZXIgb2Yg c2hhcmVkIENvbW1pdFRTIGJ1ZmZlcnMuCi0gKgotICogV2UgdXNlIGEgdmVyeSBzaW1pbGFyIGxv Z2ljIGFzIGZvciB0aGUgbnVtYmVyIG9mIENMT0cgYnVmZmVycyAoZXhjZXB0IHdlCi0gKiBzY2Fs ZSB1cCB0d2ljZSBhcyBmYXN0IHdpdGggc2hhcmVkIGJ1ZmZlcnMsIGFuZCB0aGUgbWF4aW11bSBp cyB0d2ljZSBhcwotICogaGlnaCk7IHNlZSBjb21tZW50cyBpbiBDTE9HU2htZW1CdWZmZXJzLgot ICovCi1TaXplCi1Db21taXRUc1NobWVtQnVmZmVycyh2b2lkKQotewotCXJldHVybiBNaW4oMjU2 LCBNYXgoNCwgTkJ1ZmZlcnMgLyAyNTYpKTsKLX0KLQogLyoKICAqIFNoYXJlZCBtZW1vcnkgc2l6 aW5nIGZvciBDb21taXRUcwogICovCiBTaXplCiBDb21taXRUc1NobWVtU2l6ZSh2b2lkKQogewot CXJldHVybiBTaW1wbGVMcnVTaG1lbVNpemUoQ29tbWl0VHNTaG1lbUJ1ZmZlcnMoKSwgMCkgKwot CQlzaXplb2YoQ29tbWl0VGltZXN0YW1wU2hhcmVkKTsKKwlyZXR1cm4gc2l6ZW9mKENvbW1pdFRp bWVzdGFtcFNoYXJlZCk7CiB9CiAKIC8qCkBAIC01MTksMTIgKzUwNCw3IEBAIENvbW1pdFRzU2ht ZW1Jbml0KHZvaWQpCiB7CiAJYm9vbAkJZm91bmQ7CiAKLQlDb21taXRUc0N0bC0+UGFnZVByZWNl ZGVzID0gQ29tbWl0VHNQYWdlUHJlY2VkZXM7Ci0JU2ltcGxlTHJ1SW5pdChDb21taXRUc0N0bCwg IkNvbW1pdFRzIiwgQ29tbWl0VHNTaG1lbUJ1ZmZlcnMoKSwgMCwKLQkJCQkgIENvbW1pdFRzU0xS VUxvY2ssICJwZ19jb21taXRfdHMiLAotCQkJCSAgTFdUUkFOQ0hFX0NPTU1JVFRTX0JVRkZFUiwK LQkJCQkgIFNZTkNfSEFORExFUl9DT01NSVRfVFMpOwotCVNscnVQYWdlUHJlY2VkZXNVbml0VGVz dHMoQ29tbWl0VHNDdGwsIENPTU1JVF9UU19YQUNUU19QRVJfUEFHRSk7CisJU2xydVBhZ2VQcmVj ZWRlc1VuaXRUZXN0cyhDb21taXRUc1BhZ2VQcmVjZWRlcywgQ09NTUlUX1RTX1hBQ1RTX1BFUl9Q QUdFKTsKIAogCWNvbW1pdFRzU2hhcmVkID0gU2htZW1Jbml0U3RydWN0KCJDb21taXRUcyBzaGFy ZWQiLAogCQkJCQkJCQkJIHNpemVvZihDb21taXRUaW1lc3RhbXBTaGFyZWQpLApAQCAtNTY4LDE3 ICs1NDgsMjYgQEAgQm9vdFN0cmFwQ29tbWl0VHModm9pZCkKICAqCiAgKiBDb250cm9sIGxvY2sg bXVzdCBiZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCiAgKi8KLXN0 YXRpYyBpbnQKK3N0YXRpYyBCdWZmZXIKIFplcm9Db21taXRUc1BhZ2UoaW50IHBhZ2VubywgYm9v bCB3cml0ZVhsb2cpCiB7Ci0JaW50CQkJc2xvdG5vOwotCi0Jc2xvdG5vID0gU2ltcGxlTHJ1WmVy b1BhZ2UoQ29tbWl0VHNDdGwsIHBhZ2Vubyk7Ci0KKwlCdWZmZXIJCWJ1ZmZlcjsKKwlQYWdlIAkJ cGFnZTsKKwlYTG9nUmVjUHRyICBsc247CisKKwlidWZmZXIgPSBaZXJvU2xydUJ1ZmZlcihTTFJV X0NPTU1JVF9UU19JRCwgcGFnZW5vKTsKKwkKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIp OworCVBhZ2VJbml0U0xSVShwYWdlLCBCTENLU1osIDApOworCQogCWlmICh3cml0ZVhsb2cpCi0J CVdyaXRlWmVyb1BhZ2VYbG9nUmVjKHBhZ2Vubyk7CisJeworCQlsc24gPSBXcml0ZVplcm9QYWdl WGxvZ1JlYyhwYWdlbm8pOworCQlQYWdlU2V0SGVhZGVyRGF0YU5vblJlbChwYWdlLCBwYWdlbm8s IGxzbiwgQkxDS1NaLCBQR19NRVRBUEFHRV9MQVlPVVRfVkVSU0lPTik7CisJfQorCU1hcmtCdWZm ZXJEaXJ0eShidWZmZXIpOwogCi0JcmV0dXJuIHNsb3RubzsKKwlyZXR1cm4gYnVmZmVyOwogfQog CiAvKgpAQCAtNjc2LDEzICs2NjUsNiBAQCBBY3RpdmF0ZUNvbW1pdFRzKHZvaWQpCiAJeGlkID0g WGlkRnJvbUZ1bGxUcmFuc2FjdGlvbklkKFNobWVtVmFyaWFibGVDYWNoZS0+bmV4dFhpZCk7CiAJ cGFnZW5vID0gVHJhbnNhY3Rpb25JZFRvQ1RzUGFnZSh4aWQpOwogCi0JLyoKLQkgKiBSZS1Jbml0 aWFsaXplIG91ciBpZGVhIG9mIHRoZSBsYXRlc3QgcGFnZSBudW1iZXIuCi0JICovCi0JTFdMb2Nr QWNxdWlyZShDb21taXRUc1NMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCUNvbW1pdFRzQ3RsLT5z aGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHBhZ2VubzsKLQlMV0xvY2tSZWxlYXNlKENvbW1p dFRzU0xSVUxvY2spOwotCiAJLyoKIAkgKiBJZiBDb21taXRUcyBpcyBlbmFibGVkLCBidXQgaXQg d2Fzbid0IGluIHRoZSBwcmV2aW91cyBzZXJ2ZXIgcnVuLCB3ZQogCSAqIG5lZWQgdG8gc2V0IHRo ZSBvbGRlc3QgYW5kIG5ld2VzdCB2YWx1ZXMgdG8gdGhlIG5leHQgWGlkOyB0aGF0IHdheSwgd2UK QEAgLTcwNSwxNSArNjg3LDE5IEBAIEFjdGl2YXRlQ29tbWl0VHModm9pZCkKIAlMV0xvY2tSZWxl YXNlKENvbW1pdFRzTG9jayk7CiAKIAkvKiBDcmVhdGUgdGhlIGN1cnJlbnQgc2VnbWVudCBmaWxl LCBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChD b21taXRUc0N0bCwgcGFnZW5vKSkKKwlpZiAoIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlz dChTTFJVX0NPTU1JVF9UU19JRCwgcGFnZW5vKSkKIAl7Ci0JCWludAkJCXNsb3RubzsKKwkJQnVm ZmVyCQlidWZmZXI7CisJCVBhZ2UgCQlwYWdlOwogCi0JCUxXTG9ja0FjcXVpcmUoQ29tbWl0VHNT TFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQkJc2xvdG5vID0gWmVyb0NvbW1pdFRzUGFnZShwYWdl bm8sIGZhbHNlKTsKLQkJU2ltcGxlTHJ1V3JpdGVQYWdlKENvbW1pdFRzQ3RsLCBzbG90bm8pOwot CQlBc3NlcnQoIUNvbW1pdFRzQ3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0JCUxX TG9ja1JlbGVhc2UoQ29tbWl0VHNTTFJVTG9jayk7CisJCWJ1ZmZlciA9IFplcm9TbHJ1QnVmZmVy KFNMUlVfQ09NTUlUX1RTX0lELCBwYWdlbm8pOworCQkKKwkJcGFnZSA9IEJ1ZmZlckdldFBhZ2Uo YnVmZmVyKTsKKwkJUGFnZUluaXRTTFJVKHBhZ2UsIEJMQ0tTWiwgMCk7CisKKwkJTWFya0J1ZmZl ckRpcnR5KGJ1ZmZlcik7CisJCUZsdXNoT25lQnVmZmVyKGJ1ZmZlcik7CisJCVVubG9ja1JlbGVh c2VCdWZmZXIoYnVmZmVyKTsKIAl9CiAKIAkvKiBDaGFuZ2UgdGhlIGFjdGl2YXRpb24gc3RhdHVz IGluIHNoYXJlZCBtZW1vcnkuICovCkBAIC03NjIsMjMgKzc0OCw5IEBAIERlYWN0aXZhdGVDb21t aXRUcyh2b2lkKQogCSAqIGJlIG92ZXJ3cml0dGVuIGFueXdheSB3aGVuIHdlIHdyYXAgYXJvdW5k LCBidXQgaXQgc2VlbXMgYmV0dGVyIHRvIGJlCiAJICogdGlkeS4pCiAJICovCi0JTFdMb2NrQWNx dWlyZShDb21taXRUc1NMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCSh2b2lkKSBTbHJ1U2NhbkRp cmVjdG9yeShDb21taXRUc0N0bCwgU2xydVNjYW5EaXJDYkRlbGV0ZUFsbCwgTlVMTCk7Ci0JTFdM b2NrUmVsZWFzZShDb21taXRUc1NMUlVMb2NrKTsKLX0KLQotLyoKLSAqIFBlcmZvcm0gYSBjaGVj a3BvaW50IC0tLSBlaXRoZXIgZHVyaW5nIHNodXRkb3duLCBvciBvbi10aGUtZmx5Ci0gKi8KLXZv aWQKLUNoZWNrUG9pbnRDb21taXRUcyh2b2lkKQotewotCS8qCi0JICogV3JpdGUgZGlydHkgQ29t bWl0VHMgcGFnZXMgdG8gZGlzay4gIFRoaXMgbWF5IHJlc3VsdCBpbiBzeW5jIHJlcXVlc3RzCi0J ICogcXVldWVkIGZvciBsYXRlciBoYW5kbGluZyBieSBQcm9jZXNzU3luY1JlcXVlc3RzKCksIGFz IHBhcnQgb2YgdGhlCi0JICogY2hlY2twb2ludC4KLQkgKi8KLQlTaW1wbGVMcnVXcml0ZUFsbChD b21taXRUc0N0bCwgdHJ1ZSk7CisJKHZvaWQpIFNscnVTY2FuRGlyZWN0b3J5KFNMUlVfQ09NTUlU X1RTX0lELAorCQkJCQkJCSBDb21taXRUc1BhZ2VQcmVjZWRlcywKKwkJCQkJCQkgU2xydVNjYW5E aXJDYkRlbGV0ZUFsbCwgTlVMTCk7CiB9CiAKIC8qCkBAIC04MTYsMTIgKzc4OCw4IEBAIEV4dGVu ZENvbW1pdFRzKFRyYW5zYWN0aW9uSWQgbmV3ZXN0WGFjdCkKIAogCXBhZ2VubyA9IFRyYW5zYWN0 aW9uSWRUb0NUc1BhZ2UobmV3ZXN0WGFjdCk7CiAKLQlMV0xvY2tBY3F1aXJlKENvbW1pdFRzU0xS VUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KIAkvKiBaZXJvIHRoZSBwYWdlIGFuZCBtYWtlIGFuIFhM T0cgZW50cnkgYWJvdXQgaXQgKi8KLQlaZXJvQ29tbWl0VHNQYWdlKHBhZ2VubywgIUluUmVjb3Zl cnkpOwotCi0JTFdMb2NrUmVsZWFzZShDb21taXRUc1NMUlVMb2NrKTsKKwlVbmxvY2tSZWxlYXNl QnVmZmVyKFplcm9Db21taXRUc1BhZ2UocGFnZW5vLCAhSW5SZWNvdmVyeSkpOwogfQogCiAvKgpA QCAtODQyLDcgKzgxMCw5IEBAIFRydW5jYXRlQ29tbWl0VHMoVHJhbnNhY3Rpb25JZCBvbGRlc3RY YWN0KQogCWN1dG9mZlBhZ2UgPSBUcmFuc2FjdGlvbklkVG9DVHNQYWdlKG9sZGVzdFhhY3QpOwog CiAJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGZpbGVzIHRoYXQgY291bGQgYmUgcmVt b3ZlZCAqLwotCWlmICghU2xydVNjYW5EaXJlY3RvcnkoQ29tbWl0VHNDdGwsIFNscnVTY2FuRGly Q2JSZXBvcnRQcmVzZW5jZSwKKwlpZiAoIVNscnVTY2FuRGlyZWN0b3J5KFNMUlVfQ09NTUlUX1RT X0lELAorCQkJCQkJICAgQ29tbWl0VHNQYWdlUHJlY2VkZXMsCisJCQkJCQkgICBTbHJ1U2NhbkRp ckNiUmVwb3J0UHJlc2VuY2UsCiAJCQkJCQkgICAmY3V0b2ZmUGFnZSkpCiAJCXJldHVybjsJCQkJ CS8qIG5vdGhpbmcgdG8gcmVtb3ZlICovCiAKQEAgLTg1MCw3ICs4MjAsNyBAQCBUcnVuY2F0ZUNv bW1pdFRzKFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFjdCkKIAlXcml0ZVRydW5jYXRlWGxvZ1JlYyhj dXRvZmZQYWdlLCBvbGRlc3RYYWN0KTsKIAogCS8qIE5vdyB3ZSBjYW4gcmVtb3ZlIHRoZSBvbGQg Q29tbWl0VHMgc2VnbWVudChzKSAqLwotCVNpbXBsZUxydVRydW5jYXRlKENvbW1pdFRzQ3RsLCBj dXRvZmZQYWdlKTsKKwlTaW1wbGVMcnVUcnVuY2F0ZShTTFJVX0NPTU1JVF9UU19JRCwgQ29tbWl0 VHNQYWdlUHJlY2VkZXMsIGN1dG9mZlBhZ2UpOwogfQogCiAvKgpAQCAtOTM2LDEyICs5MDYsMTYg QEAgQ29tbWl0VHNQYWdlUHJlY2VkZXMoaW50IHBhZ2UxLCBpbnQgcGFnZTIpCiAvKgogICogV3Jp dGUgYSBaRVJPUEFHRSB4bG9nIHJlY29yZAogICovCi1zdGF0aWMgdm9pZAorc3RhdGljIFhMb2dS ZWNQdHIgCiBXcml0ZVplcm9QYWdlWGxvZ1JlYyhpbnQgcGFnZW5vKQogeworCVhMb2dSZWNQdHIg bHNuOworCQogCVhMb2dCZWdpbkluc2VydCgpOwogCVhMb2dSZWdpc3RlckRhdGEoKGNoYXIgKikg KCZwYWdlbm8pLCBzaXplb2YoaW50KSk7Ci0JKHZvaWQpIFhMb2dJbnNlcnQoUk1fQ09NTUlUX1RT X0lELCBDT01NSVRfVFNfWkVST1BBR0UpOworCWxzbiA9IFhMb2dJbnNlcnQoUk1fQ09NTUlUX1RT X0lELCBDT01NSVRfVFNfWkVST1BBR0UpOworCQorCXJldHVybiBsc247CiB9CiAKIC8qCkBAIC05 NzQsMTcgKzk0OCwxOSBAQCBjb21taXRfdHNfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkK IAlpZiAoaW5mbyA9PSBDT01NSVRfVFNfWkVST1BBR0UpCiAJewogCQlpbnQJCQlwYWdlbm87Ci0J CWludAkJCXNsb3RubzsKKwkJQnVmZmVyCQlidWZmZXI7CisJCVBhZ2UJCXBhZ2U7CiAKIAkJbWVt Y3B5KCZwYWdlbm8sIFhMb2dSZWNHZXREYXRhKHJlY29yZCksIHNpemVvZihpbnQpKTsKIAotCQlM V0xvY2tBY3F1aXJlKENvbW1pdFRzU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkJc2xvdG5v ID0gWmVyb0NvbW1pdFRzUGFnZShwYWdlbm8sIGZhbHNlKTsKLQkJU2ltcGxlTHJ1V3JpdGVQYWdl KENvbW1pdFRzQ3RsLCBzbG90bm8pOwotCQlBc3NlcnQoIUNvbW1pdFRzQ3RsLT5zaGFyZWQtPnBh Z2VfZGlydHlbc2xvdG5vXSk7Ci0KLQkJTFdMb2NrUmVsZWFzZShDb21taXRUc1NMUlVMb2NrKTsK KwkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9DT01NSVRfVFNfSUQsIHBhZ2Vubyk7CisJ CQorCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIpOworCQlQYWdlSW5pdFNMUlUocGFnZSwg QkxDS1NaLCAwKTsKKwkJCisJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOworCQlGbHVzaE9uZUJ1 ZmZlcihidWZmZXIpOworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJfQogCWVsc2Ug aWYgKGluZm8gPT0gQ09NTUlUX1RTX1RSVU5DQVRFKQogCXsKQEAgLTk5MiwyMyArOTY4LDggQEAg Y29tbWl0X3RzX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAKIAkJQWR2YW5jZU9sZGVz dENvbW1pdFRzWGlkKHRydW5jLT5vbGRlc3RYaWQpOwogCi0JCS8qCi0JCSAqIER1cmluZyBYTE9H IHJlcGxheSwgbGF0ZXN0X3BhZ2VfbnVtYmVyIGlzbid0IHNldCB1cCB5ZXQ7IGluc2VydCBhCi0J CSAqIHN1aXRhYmxlIHZhbHVlIHRvIGJ5cGFzcyB0aGUgc2FuaXR5IHRlc3QgaW4gU2ltcGxlTHJ1 VHJ1bmNhdGUuCi0JCSAqLwotCQlDb21taXRUc0N0bC0+c2hhcmVkLT5sYXRlc3RfcGFnZV9udW1i ZXIgPSB0cnVuYy0+cGFnZW5vOwotCi0JCVNpbXBsZUxydVRydW5jYXRlKENvbW1pdFRzQ3RsLCB0 cnVuYy0+cGFnZW5vKTsKKwkJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9DT01NSVRfVFNfSUQsIENv bW1pdFRzUGFnZVByZWNlZGVzLCB0cnVuYy0+cGFnZW5vKTsKIAl9CiAJZWxzZQogCQllbG9nKFBB TklDLCAiY29tbWl0X3RzX3JlZG86IHVua25vd24gb3AgY29kZSAldSIsIGluZm8pOwogfQotCi0v KgotICogRW50cnlwb2ludCBmb3Igc3luYy5jIHRvIHN5bmMgY29tbWl0X3RzIGZpbGVzLgotICov Ci1pbnQKLWNvbW1pdHRzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0 aCkKLXsKLQlyZXR1cm4gU2xydVN5bmNGaWxlVGFnKENvbW1pdFRzQ3RsLCBmdGFnLCBwYXRoKTsK LX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKaW5kZXggZmU2Njk4ZDVmZmEu LjU1MmZlODYwNDM0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0 aXhhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAt MTA2LDcgKzEwNiw3IEBACiAgKi8KIAogLyogV2UgbmVlZCBmb3VyIGJ5dGVzIHBlciBvZmZzZXQg Ki8KLSNkZWZpbmUgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UgKEJMQ0tTWiAvIHNpemVvZihN dWx0aVhhY3RPZmZzZXQpKQorI2RlZmluZSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSAoKEJM Q0tTWiAtIFNpemVPZlBhZ2VIZWFkZXJEYXRhKS8gc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpCiAK ICNkZWZpbmUgTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UoeGlkKSBcCiAJKCh4aWQpIC8gKE11bHRp WGFjdE9mZnNldCkgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UpCkBAIC0xMzgsNyArMTM4LDcg QEAKIC8qIHNpemUgaW4gYnl0ZXMgb2YgYSBjb21wbGV0ZSBncm91cCAqLwogI2RlZmluZSBNVUxU SVhBQ1RfTUVNQkVSR1JPVVBfU0laRSBcCiAJKHNpemVvZihUcmFuc2FjdGlvbklkKSAqIE1VTFRJ WEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCArIE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dS T1VQKQotI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFIChCTENLU1ogLyBN VUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSkKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUkdST1VQ U19QRVJfUEFHRSAoKEJMQ0tTWiAtIFNpemVPZlBhZ2VIZWFkZXJEYXRhKSAvIE1VTFRJWEFDVF9N RU1CRVJHUk9VUF9TSVpFKQogI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRQlcCiAJ KE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJf TUVNQkVSR1JPVVApCiAKQEAgLTE2MSw5ICsxNjEsOSBAQAogCiAvKiBMb2NhdGlvbiAoYnl0ZSBv ZmZzZXQgd2l0aGluIHBhZ2UpIG9mIGZsYWcgd29yZCBmb3IgYSBnaXZlbiBtZW1iZXIgKi8KICNk ZWZpbmUgTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KHhpZCkgXAotCSgoKCh4aWQpIC8gKFRyYW5zYWN0 aW9uSWQpIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCkgJSBcCisJKCgoKCh4aWQp IC8gKFRyYW5zYWN0aW9uSWQpIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCkgJSBc CiAJICAoVHJhbnNhY3Rpb25JZCkgTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRSkgKiBc Ci0JIChUcmFuc2FjdGlvbklkKSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSkKKwkgKFRyYW5z YWN0aW9uSWQpIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFKSkKICNkZWZpbmUgTVhPZmZzZXRU b0ZsYWdzQml0U2hpZnQoeGlkKSBcCiAJKCgoeGlkKSAlIChUcmFuc2FjdGlvbklkKSBNVUxUSVhB Q1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVApICogXAogCSBNWEFDVF9NRU1CRVJfQklUU19QRVJf WEFDVCkKQEAgLTE4MSwxNSArMTgxLDYgQEAKICNkZWZpbmUgUHJldmlvdXNNdWx0aVhhY3RJZCh4 aWQpIFwKIAkoKHhpZCkgPT0gRmlyc3RNdWx0aVhhY3RJZCA/IE1heE11bHRpWGFjdElkIDogKHhp ZCkgLSAxKQogCi0vKgotICogTGlua3MgdG8gc2hhcmVkLW1lbW9yeSBkYXRhIHN0cnVjdHVyZXMg Zm9yIE11bHRpWGFjdCBjb250cm9sCi0gKi8KLXN0YXRpYyBTbHJ1Q3RsRGF0YSBNdWx0aVhhY3RP ZmZzZXRDdGxEYXRhOwotc3RhdGljIFNscnVDdGxEYXRhIE11bHRpWGFjdE1lbWJlckN0bERhdGE7 Ci0KLSNkZWZpbmUgTXVsdGlYYWN0T2Zmc2V0Q3RsCSgmTXVsdGlYYWN0T2Zmc2V0Q3RsRGF0YSkK LSNkZWZpbmUgTXVsdGlYYWN0TWVtYmVyQ3RsCSgmTXVsdGlYYWN0TWVtYmVyQ3RsRGF0YSkKLQog LyoKICAqIE11bHRpWGFjdCBzdGF0ZSBzaGFyZWQgYWNyb3NzIGFsbCBiYWNrZW5kcy4gIEFsbCB0 aGlzIHN0YXRlIGlzIHByb3RlY3RlZAogICogYnkgTXVsdGlYYWN0R2VuTG9jay4gIChXZSBhbHNv IHVzZSBNdWx0aVhhY3RPZmZzZXRTTFJVTG9jayBhbmQKQEAgLTM0MSw4ICszMzIsOCBAQCBzdGF0 aWMgTWVtb3J5Q29udGV4dCBNWGFjdENvbnRleHQgPSBOVUxMOwogLyogaW50ZXJuYWwgTXVsdGlY YWN0SWQgbWFuYWdlbWVudCAqLwogc3RhdGljIHZvaWQgTXVsdGlYYWN0SWRTZXRPbGRlc3RWaXNp YmxlKHZvaWQpOwogc3RhdGljIHZvaWQgUmVjb3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdElkIG11 bHRpLCBNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LAotCQkJCQkJCSAgIGludCBubWVtYmVycywgTXVs dGlYYWN0TWVtYmVyICptZW1iZXJzKTsKLXN0YXRpYyBNdWx0aVhhY3RJZCBHZXROZXdNdWx0aVhh Y3RJZChpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KTsKKwkJCQkJCQkgICBp bnQgbm1lbWJlcnMsIE11bHRpWGFjdE1lbWJlciAqbWVtYmVycywgQnVmZmVyICogb2Zmc2V0X2J1 Zl9wdHIsIEJ1ZmZlciAqIG1lbWJlcl9idWZzKTsKK3N0YXRpYyBNdWx0aVhhY3RJZCBHZXROZXdN dWx0aVhhY3RJZChpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0LCBCdWZmZXIg KiBvZmZzZXRfYnVmLCBCdWZmZXIgKiogbWVtYmVyX2J1ZnMpOwogCiAvKiBNdWx0aVhhY3QgY2Fj aGUgbWFuYWdlbWVudCAqLwogc3RhdGljIGludAlteGFjdE1lbWJlckNvbXBhcmF0b3IoY29uc3Qg dm9pZCAqYXJnMSwgY29uc3Qgdm9pZCAqYXJnMik7CkBAIC0zNTQsMTkgKzM0NSwxOCBAQCBzdGF0 aWMgdm9pZCBtWGFjdENhY2hlUHV0KE11bHRpWGFjdElkIG11bHRpLCBpbnQgbm1lbWJlcnMsCiBz dGF0aWMgY2hhciAqbXhzdGF0dXNfdG9fc3RyaW5nKE11bHRpWGFjdFN0YXR1cyBzdGF0dXMpOwog CiAvKiBtYW5hZ2VtZW50IG9mIFNMUlUgaW5mcmFzdHJ1Y3R1cmUgKi8KLXN0YXRpYyBpbnQJWmVy b011bHRpWGFjdE9mZnNldFBhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpOwotc3RhdGlj IGludAlaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZShpbnQgcGFnZW5vLCBib29sIHdyaXRlWGxvZyk7 CitzdGF0aWMgQnVmZmVyIFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKGludCBwYWdlbm8sIGJvb2wg d3JpdGVYbG9nKTsKK3N0YXRpYyBCdWZmZXIgWmVyb011bHRpWGFjdE1lbWJlclBhZ2UoaW50IHBh Z2VubywgYm9vbCB3cml0ZVhsb2cpOwogc3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0UGFnZVBy ZWNlZGVzKGludCBwYWdlMSwgaW50IHBhZ2UyKTsKLXN0YXRpYyBib29sIE11bHRpWGFjdE1lbWJl clBhZ2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMik7CiBzdGF0aWMgYm9vbCBNdWx0aVhh Y3RPZmZzZXRQcmVjZWRlcyhNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MSwKIAkJCQkJCQkJCU11bHRp WGFjdE9mZnNldCBvZmZzZXQyKTsKLXN0YXRpYyB2b2lkIEV4dGVuZE11bHRpWGFjdE9mZnNldChN dWx0aVhhY3RJZCBtdWx0aSk7Ci1zdGF0aWMgdm9pZCBFeHRlbmRNdWx0aVhhY3RNZW1iZXIoTXVs dGlYYWN0T2Zmc2V0IG9mZnNldCwgaW50IG5tZW1iZXJzKTsKK3N0YXRpYyB2b2lkIEV4dGVuZE11 bHRpWGFjdE9mZnNldChNdWx0aVhhY3RJZCBtdWx0aSwgQnVmZmVyICogYnVmZmVyKTsKK3N0YXRp YyB2b2lkIEV4dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQg bm1lbWJlcnMsIEJ1ZmZlciAqKiBtZW1iZXJfYnVmZmVycyk7CiBzdGF0aWMgYm9vbCBNdWx0aVhh Y3RPZmZzZXRXb3VsZFdyYXAoTXVsdGlYYWN0T2Zmc2V0IGJvdW5kYXJ5LAogCQkJCQkJCQkJIE11 bHRpWGFjdE9mZnNldCBzdGFydCwgdWludDMyIGRpc3RhbmNlKTsKIHN0YXRpYyBib29sIFNldE9m ZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCk7CiBzdGF0aWMgYm9vbCBmaW5kX211bHRp eGFjdF9zdGFydChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQpOwot c3RhdGljIHZvaWQgV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKGludCBwYWdlbm8sIHVpbnQ4IGluZm8p Oworc3RhdGljIFhMb2dSZWNQdHIgV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKGludCBwYWdlbm8sIHVp bnQ4IGluZm8pOwogc3RhdGljIHZvaWQgV3JpdGVNVHJ1bmNhdGVYbG9nUmVjKE9pZCBvbGRlc3RN dWx0aURCLAogCQkJCQkJCQkgIE11bHRpWGFjdElkIHN0YXJ0VHJ1bmNPZmYsCiAJCQkJCQkJCSAg TXVsdGlYYWN0SWQgZW5kVHJ1bmNPZmYsCkBAIC03NjcsNiArNzU3LDkgQEAgUmVhZE11bHRpWGFj dElkUmFuZ2UoTXVsdGlYYWN0SWQgKm9sZGVzdCwgTXVsdGlYYWN0SWQgKm5leHQpCiBNdWx0aVhh Y3RJZAogTXVsdGlYYWN0SWRDcmVhdGVGcm9tTWVtYmVycyhpbnQgbm1lbWJlcnMsIE11bHRpWGFj dE1lbWJlciAqbWVtYmVycykKIHsKKwlCdWZmZXIgKiBtZW1iZXJfYnVmczsKKwlCdWZmZXIgb2Zm c2V0X2J1ZmY7CisKIAlNdWx0aVhhY3RJZCBtdWx0aTsKIAlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0 OwogCXhsX211bHRpeGFjdF9jcmVhdGUgeGxyZWM7CkBAIC04MjAsNyArODEzLDggQEAgTXVsdGlY YWN0SWRDcmVhdGVGcm9tTWVtYmVycyhpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE1lbWJlciAqbWVt YmVycykKIAkgKiBpbiB2YWN1dW0uICBEdXJpbmcgdmFjdXVtLCBpbiBwYXJ0aWN1bGFyLCBpdCB3 b3VsZCBiZSB1bmFjY2VwdGFibGUgdG8KIAkgKiBrZWVwIE9sZGVzdE11bHRpIHNldCwgaW4gY2Fz ZSBpdCBydW5zIGZvciBsb25nLgogCSAqLwotCW11bHRpID0gR2V0TmV3TXVsdGlYYWN0SWQobm1l bWJlcnMsICZvZmZzZXQpOworCisJbXVsdGkgPSBHZXROZXdNdWx0aVhhY3RJZChubWVtYmVycywg Jm9mZnNldCwgJm9mZnNldF9idWZmLCAmbWVtYmVyX2J1ZnMpOwogCiAJLyogTWFrZSBhbiBYTE9H IGVudHJ5IGRlc2NyaWJpbmcgdGhlIG5ldyBNWElELiAqLwogCXhscmVjLm1pZCA9IG11bHRpOwpA QCAtODQwLDggKzgzNCw4IEBAIE11bHRpWGFjdElkQ3JlYXRlRnJvbU1lbWJlcnMoaW50IG5tZW1i ZXJzLCBNdWx0aVhhY3RNZW1iZXIgKm1lbWJlcnMpCiAJKHZvaWQpIFhMb2dJbnNlcnQoUk1fTVVM VElYQUNUX0lELCBYTE9HX01VTFRJWEFDVF9DUkVBVEVfSUQpOwogCiAJLyogTm93IGVudGVyIHRo ZSBpbmZvcm1hdGlvbiBpbnRvIHRoZSBPRkZTRVRzIGFuZCBNRU1CRVJzIGxvZ3MgKi8KLQlSZWNv cmROZXdNdWx0aVhhY3QobXVsdGksIG9mZnNldCwgbm1lbWJlcnMsIG1lbWJlcnMpOwotCisJUmVj b3JkTmV3TXVsdGlYYWN0KG11bHRpLCBvZmZzZXQsIG5tZW1iZXJzLCBtZW1iZXJzLCAmb2Zmc2V0 X2J1ZmYsIG1lbWJlcl9idWZzKTsKKwkKIAkvKiBEb25lIHdpdGggY3JpdGljYWwgc2VjdGlvbiAq LwogCUVORF9DUklUX1NFQ1RJT04oKTsKIApAQCAtODYyLDQwICs4NTYsMzggQEAgTXVsdGlYYWN0 SWRDcmVhdGVGcm9tTWVtYmVycyhpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE1lbWJlciAqbWVtYmVy cykKICAqLwogc3RhdGljIHZvaWQKIFJlY29yZE5ld011bHRpWGFjdChNdWx0aVhhY3RJZCBtdWx0 aSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwKLQkJCQkgICBpbnQgbm1lbWJlcnMsIE11bHRpWGFj dE1lbWJlciAqbWVtYmVycykKKwkJCQkgICBpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE1lbWJlciAq bWVtYmVycywgQnVmZmVyICogb2Zmc2V0X2J1Zl9wdHIsIEJ1ZmZlciAqIG1lbWJlcl9idWZzKQog ewogCWludAkJCXBhZ2VubzsKIAlpbnQJCQlwcmV2X3BhZ2VubzsKKwlpbnQgCQltaW5fcGFnZW5v OwogCWludAkJCWVudHJ5bm87Ci0JaW50CQkJc2xvdG5vOwogCU11bHRpWGFjdE9mZnNldCAqb2Zm cHRyOwogCWludAkJCWk7Ci0KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE9mZnNldFNMUlVMb2Nr LCBMV19FWENMVVNJVkUpOworCUJ1ZmZlcgkJYnVmZmVyOworCUJ1ZmZlcgkJb2Zmc2V0X2J1ZjsK IAogCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKTsKIAllbnRyeW5vID0g TXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KG11bHRpKTsKIAotCS8qCi0JICogTm90ZTogd2UgcGFz cyB0aGUgTXVsdGlYYWN0SWQgdG8gU2ltcGxlTHJ1UmVhZFBhZ2UgYXMgdGhlICJ0cmFuc2FjdGlv biIKLQkgKiB0byBjb21wbGFpbiBhYm91dCBpZiB0aGVyZSdzIGFueSBJL08gZXJyb3IuICBUaGlz IGlzIGtpbmRhIGJvZ3VzLCBidXQKLQkgKiBzaW5jZSB0aGUgZXJyb3JzIHdpbGwgYWx3YXlzIGdp dmUgdGhlIGZ1bGwgcGF0aG5hbWUsIGl0IHNob3VsZCBiZSBjbGVhcgotCSAqIGVub3VnaCB0aGF0 IGEgTXVsdGlYYWN0SWQgaXMgcmVhbGx5IGludm9sdmVkLiAgUGVyaGFwcyBzb21lZGF5IHdlJ2xs Ci0JICogdGFrZSB0aGUgdHJvdWJsZSB0byBnZW5lcmFsaXplIHRoZSBzbHJ1LmMgZXJyb3IgcmVw b3J0aW5nIGNvZGUuCi0JICovCi0Jc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0 T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUsIG11bHRpKTsKLQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zm c2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dOwot CW9mZnB0ciArPSBlbnRyeW5vOworCWlmIChvZmZzZXRfYnVmX3B0cikKKwkJb2Zmc2V0X2J1ZiA9 ICpvZmZzZXRfYnVmX3B0cjsKKwllbHNlIAorCQlvZmZzZXRfYnVmID0gUmVhZFNscnVCdWZmZXIo U0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX0lELCBwYWdlbm8sIFJCTV9OT1JNQUwpOwogCi0JKm9mZnB0 ciA9IG9mZnNldDsKKwlMb2NrQnVmZmVyKG9mZnNldF9idWYsIEJVRkZFUl9MT0NLX0VYQ0xVU0lW RSk7CisJCQkJCQkKIAotCU11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Ns b3Rub10gPSB0cnVlOworCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgUGFnZUdldENvbnRl bnRzKEJ1ZmZlckdldFBhZ2Uob2Zmc2V0X2J1ZikpOworCW9mZnB0ciArPSBlbnRyeW5vOwogCi0J LyogRXhjaGFuZ2Ugb3VyIGxvY2sgKi8KLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE9mZnNldFNM UlVMb2NrKTsKKwkqb2ZmcHRyID0gb2Zmc2V0OwogCi0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RN ZW1iZXJTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlNYXJrQnVmZmVyRGlydHkob2Zmc2V0X2J1 Zik7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihvZmZzZXRfYnVmKTsKKwlidWZmZXIgPSBJbnZhbGlk QnVmZmVyOwogCisJbWluX3BhZ2VubyA9IE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG9mZnNldCk7CiAJ cHJldl9wYWdlbm8gPSAtMTsKIAogCWZvciAoaSA9IDA7IGkgPCBubWVtYmVyczsgaSsrLCBvZmZz ZXQrKykKQEAgLTkxNiwyNyArOTA4LDM1IEBAIFJlY29yZE5ld011bHRpWGFjdChNdWx0aVhhY3RJ ZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwKIAogCQlpZiAocGFnZW5vICE9IHByZXZf cGFnZW5vKQogCQl7Ci0JCQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RNZW1i ZXJDdGwsIHBhZ2VubywgdHJ1ZSwgbXVsdGkpOworCQkJaWYgKEJ1ZmZlcklzVmFsaWQoYnVmZmVy KSkKKwkJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisKKwkJCWlmIChtZW1iZXJfYnVm cykKKwkJCQlidWZmZXIgPSBtZW1iZXJfYnVmc1twYWdlbm8gLSBtaW5fcGFnZW5vXTsKKwkJCWVs c2UKKwkJCQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9NRU1CRVJfSUQs IHBhZ2VubywgUkJNX05PUk1BTCk7CisKKwkJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9D S19FWENMVVNJVkUpOwogCQkJcHJldl9wYWdlbm8gPSBwYWdlbm87CiAJCX0KIAotCQltZW1iZXJw dHIgPSAoVHJhbnNhY3Rpb25JZCAqKQotCQkJKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5w YWdlX2J1ZmZlcltzbG90bm9dICsgbWVtYmVyb2ZmKTsKKwkJbWVtYmVycHRyID0gKFRyYW5zYWN0 aW9uSWQgKikgKFBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpICsgbWVtYmVy b2ZmKTsKIAogCQkqbWVtYmVycHRyID0gbWVtYmVyc1tpXS54aWQ7CiAKLQkJZmxhZ3NwdHIgPSAo dWludDMyICopCi0JCQkoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Ns b3Rub10gKyBmbGFnc29mZik7CisJCWZsYWdzcHRyID0gKHVpbnQzMiAqKSAoUGFnZUdldENvbnRl bnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkgKyBmbGFnc29mZik7CiAKIAkJZmxhZ3N2YWwgPSAq ZmxhZ3NwdHI7CiAJCWZsYWdzdmFsICY9IH4oKCgxIDw8IE1YQUNUX01FTUJFUl9CSVRTX1BFUl9Y QUNUKSAtIDEpIDw8IGJzaGlmdCk7CiAJCWZsYWdzdmFsIHw9IChtZW1iZXJzW2ldLnN0YXR1cyA8 PCBic2hpZnQpOwogCQkqZmxhZ3NwdHIgPSBmbGFnc3ZhbDsKIAotCQlNdWx0aVhhY3RNZW1iZXJD dGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKKwkJTWFya0J1ZmZlckRpcnR5 KGJ1ZmZlcik7CiAJfQogCi0JTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jayk7 CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOworCWlmIChtZW1iZXJfYnVmcyAhPSBOVUxM KQorCQlwZnJlZShtZW1iZXJfYnVmcyk7CiB9CiAKIC8qCkBAIC05NTUsOCArOTU1LDExIEBAIFJl Y29yZE5ld011bHRpWGFjdChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNl dCwKICAqIGNhbGxlciBtdXN0IGVuZCB0aGUgY3JpdGljYWwgc2VjdGlvbiBhZnRlciB3cml0aW5n IFNMUlUgZGF0YS4KICAqLwogc3RhdGljIE11bHRpWGFjdElkCi1HZXROZXdNdWx0aVhhY3RJZChp bnQgbm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KQorR2V0TmV3TXVsdGlYYWN0SWQo aW50IG5tZW1iZXJzLCBNdWx0aVhhY3RPZmZzZXQgKm9mZnNldCwgQnVmZmVyICogb2Zmc2V0X2J1 ZiwgQnVmZmVyICoqIG1lbWJlcl9idWZzKQogeworCWludCBtaW5fcGFnZW5vOworCWludCBtYXhf cGFnZW5vOworCiAJTXVsdGlYYWN0SWQgcmVzdWx0OwogCU11bHRpWGFjdE9mZnNldCBuZXh0T2Zm c2V0OwogCkBAIC0xMDc0LDcgKzEwNzcsNyBAQCBHZXROZXdNdWx0aVhhY3RJZChpbnQgbm1lbWJl cnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KQogCX0KIAogCS8qIE1ha2Ugc3VyZSB0aGVyZSBp cyByb29tIGZvciB0aGUgTVhJRCBpbiB0aGUgZmlsZS4gICovCi0JRXh0ZW5kTXVsdGlYYWN0T2Zm c2V0KHJlc3VsdCk7CisJRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KHJlc3VsdCwgb2Zmc2V0X2J1Zik7 CiAKIAkvKgogCSAqIFJlc2VydmUgdGhlIG1lbWJlcnMgc3BhY2UsIHNpbWlsYXJseSB0byBhYm92 ZS4gIEFsc28sIGJlIGNhcmVmdWwgbm90IHRvCkBAIC0xMTYyLDcgKzExNjUsMTIgQEAgR2V0TmV3 TXVsdGlYYWN0SWQoaW50IG5tZW1iZXJzLCBNdWx0aVhhY3RPZmZzZXQgKm9mZnNldCkKIAkJCQkJ CQkgICBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCArIG5tZW1i ZXJzKSwKIAkJCQkgZXJyaGludCgiRXhlY3V0ZSBhIGRhdGFiYXNlLXdpZGUgVkFDVVVNIGluIHRo YXQgZGF0YWJhc2Ugd2l0aCByZWR1Y2VkIHZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21pbl9hZ2Ug YW5kIHZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX3RhYmxlX2FnZSBzZXR0aW5ncy4iKSkpOwogCi0J RXh0ZW5kTXVsdGlYYWN0TWVtYmVyKG5leHRPZmZzZXQsIG5tZW1iZXJzKTsKKwltaW5fcGFnZW5v ID0gTVhPZmZzZXRUb01lbWJlclBhZ2UobmV4dE9mZnNldCk7CisJbWF4X3BhZ2VubyA9IE1YT2Zm c2V0VG9NZW1iZXJQYWdlKG5leHRPZmZzZXQgKyBubWVtYmVycyAtIDEpOworCisJKm1lbWJlcl9i dWZzID0gKEJ1ZmZlciAqKSBwYWxsb2Moc2l6ZW9mKEJ1ZmZlcikgKiAobWF4X3BhZ2VubyAtIG1p bl9wYWdlbm8gKyAxKSk7CisKKwlFeHRlbmRNdWx0aVhhY3RNZW1iZXIobmV4dE9mZnNldCwgbm1l bWJlcnMsIG1lbWJlcl9idWZzKTsKIAogCS8qCiAJICogQ3JpdGljYWwgc2VjdGlvbiBmcm9tIGhl cmUgdW50aWwgY2FsbGVyIGhhcyB3cml0dGVuIHRoZSBkYXRhIGludG8gdGhlCkBAIC0xMjI4LDcg KzEyMzYsNiBAQCBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRp WGFjdE1lbWJlciAqKm1lbWJlcnMsCiAJaW50CQkJcGFnZW5vOwogCWludAkJCXByZXZfcGFnZW5v OwogCWludAkJCWVudHJ5bm87Ci0JaW50CQkJc2xvdG5vOwogCU11bHRpWGFjdE9mZnNldCAqb2Zm cHRyOwogCU11bHRpWGFjdE9mZnNldCBvZmZzZXQ7CiAJaW50CQkJbGVuZ3RoOwpAQCAtMTIzOSw2 ICsxMjQ2LDcgQEAgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBNdWx0 aVhhY3RNZW1iZXIgKiptZW1iZXJzLAogCU11bHRpWGFjdElkIHRtcE1YYWN0OwogCU11bHRpWGFj dE9mZnNldCBuZXh0T2Zmc2V0OwogCU11bHRpWGFjdE1lbWJlciAqcHRyOworCUJ1ZmZlcgkJYnVm ZmVyOwogCiAJZGVidWdfZWxvZzMoREVCVUcyLCAiR2V0TWVtYmVyczogYXNrZWQgZm9yICV1Iiwg bXVsdGkpOwogCkBAIC0xMzQyLDEzICsxMzUwLDEyIEBAIEdldE11bHRpWGFjdElkTWVtYmVycyhN dWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVtYmVyICoqbWVtYmVycywKIAkgKiB0aW1lIG9u IGV2ZXJ5IG11bHRpeGFjdCBjcmVhdGlvbi4KIAkgKi8KIHJldHJ5OgotCUxXTG9ja0FjcXVpcmUo TXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KIAlwYWdlbm8gPSBNdWx0 aVhhY3RJZFRvT2Zmc2V0UGFnZShtdWx0aSk7CiAJZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZz ZXRFbnRyeShtdWx0aSk7CiAKLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RP ZmZzZXRDdGwsIHBhZ2VubywgdHJ1ZSwgbXVsdGkpOwotCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZz ZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJ YnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX0lELCBwYWdlbm8s IFJCTV9OT1JNQUwpOworCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19TSEFSRSk7CisJ b2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSAoUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBh Z2UoYnVmZmVyKSkpOwogCW9mZnB0ciArPSBlbnRyeW5vOwogCW9mZnNldCA9ICpvZmZwdHI7CiAK QEAgLTEzNzksMTYgKzEzODYsMjAgQEAgcmV0cnk6CiAJCWVudHJ5bm8gPSBNdWx0aVhhY3RJZFRv T2Zmc2V0RW50cnkodG1wTVhhY3QpOwogCiAJCWlmIChwYWdlbm8gIT0gcHJldl9wYWdlbm8pCi0J CQlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2Vubywg dHJ1ZSwgdG1wTVhhY3QpOworCQl7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJ CQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2Vu bywgUkJNX05PUk1BTCk7CisJCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hBUkUp OworCQl9CiAKLQkJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBNdWx0aVhhY3RPZmZzZXRD dGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKwkJb2ZmcHRyID0gKE11bHRpWGFjdE9m ZnNldCAqKSAoUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkpOwogCQlvZmZw dHIgKz0gZW50cnlubzsKIAkJbmV4dE1YT2Zmc2V0ID0gKm9mZnB0cjsKIAogCQlpZiAobmV4dE1Y T2Zmc2V0ID09IDApCiAJCXsKIAkJCS8qIENvcm5lciBjYXNlIDI6IG5leHQgbXVsdGl4YWN0IGlz IHN0aWxsIGJlaW5nIGZpbGxlZCBpbiAqLwotCQkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RPZmZz ZXRTTFJVTG9jayk7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJCQlDSEVDS19G T1JfSU5URVJSVVBUUygpOwogCQkJcGdfdXNsZWVwKDEwMDBMKTsKIAkJCWdvdG8gcmV0cnk7CkBA IC0xMzk2LDE0ICsxNDA3LDExIEBAIHJldHJ5OgogCiAJCWxlbmd0aCA9IG5leHRNWE9mZnNldCAt IG9mZnNldDsKIAl9Ci0KLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrKTsK KwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsK IAogCXB0ciA9IChNdWx0aVhhY3RNZW1iZXIgKikgcGFsbG9jKGxlbmd0aCAqIHNpemVvZihNdWx0 aVhhY3RNZW1iZXIpKTsKIAotCS8qIE5vdyBnZXQgdGhlIG1lbWJlcnMgdGhlbXNlbHZlcy4gKi8K LQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwot CiAJdHJ1ZWxlbmd0aCA9IDA7CiAJcHJldl9wYWdlbm8gPSAtMTsKIAlmb3IgKGkgPSAwOyBpIDwg bGVuZ3RoOyBpKyssIG9mZnNldCsrKQpAQCAtMTQxOSwxMiArMTQyNywxNCBAQCByZXRyeToKIAog CQlpZiAocGFnZW5vICE9IHByZXZfcGFnZW5vKQogCQl7Ci0JCQlzbG90bm8gPSBTaW1wbGVMcnVS ZWFkUGFnZShNdWx0aVhhY3RNZW1iZXJDdGwsIHBhZ2VubywgdHJ1ZSwgbXVsdGkpOworCQkJaWYg KEJ1ZmZlcklzVmFsaWQoYnVmZmVyKSkKKwkJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7 CisJCQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9NRU1CRVJfSUQsIHBh Z2VubywgUkJNX05PUk1BTCk7CisJCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfU0hB UkUpOwogCQkJcHJldl9wYWdlbm8gPSBwYWdlbm87CiAJCX0KIAotCQl4YWN0cHRyID0gKFRyYW5z YWN0aW9uSWQgKikKLQkJCShNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJb c2xvdG5vXSArIG1lbWJlcm9mZik7CisJCXhhY3RwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSAoUGFn ZUdldENvbnRlbnRzKChCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpICsgbWVtYmVyb2ZmKSk7CiAKIAkJ aWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCgqeGFjdHB0cikpCiAJCXsKQEAgLTE0MzUsMTQgKzE0 NDUsMTMgQEAgcmV0cnk6CiAKIAkJZmxhZ3NvZmYgPSBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zm c2V0KTsKIAkJYnNoaWZ0ID0gTVhPZmZzZXRUb0ZsYWdzQml0U2hpZnQob2Zmc2V0KTsKLQkJZmxh Z3NwdHIgPSAodWludDMyICopIChNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFnZV9idWZm ZXJbc2xvdG5vXSArIGZsYWdzb2ZmKTsKKwkJZmxhZ3NwdHIgPSAodWludDMyICopIChQYWdlR2V0 Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIGZsYWdzb2ZmKTsKIAogCQlwdHJbdHJ1 ZWxlbmd0aF0ueGlkID0gKnhhY3RwdHI7CiAJCXB0clt0cnVlbGVuZ3RoXS5zdGF0dXMgPSAoKmZs YWdzcHRyID4+IGJzaGlmdCkgJiBNWEFDVF9NRU1CRVJfWEFDVF9CSVRNQVNLOwogCQl0cnVlbGVu Z3RoKys7CiAJfQotCi0JTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RNZW1iZXJTTFJVTG9jayk7CisJ VW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCiAJLyogQSBtdWx0aXhpZCB3aXRoIHplcm8g bWVtYmVycyBzaG91bGQgbm90IGhhcHBlbiAqLwogCUFzc2VydCh0cnVlbGVuZ3RoID4gMCk7CkBA IC0xODM0LDggKzE4NDMsNiBAQCBNdWx0aVhhY3RTaG1lbVNpemUodm9pZCkKIAkJCSBtdWxfc2l6 ZShzaXplb2YoTXVsdGlYYWN0SWQpICogMiwgTWF4T2xkZXN0U2xvdCkpCiAKIAlzaXplID0gU0hB UkVEX01VTFRJWEFDVF9TVEFURV9TSVpFOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVM cnVTaG1lbVNpemUoTlVNX01VTFRJWEFDVE9GRlNFVF9CVUZGRVJTLCAwKSk7Ci0Jc2l6ZSA9IGFk ZF9zaXplKHNpemUsIFNpbXBsZUxydVNobWVtU2l6ZShOVU1fTVVMVElYQUNUTUVNQkVSX0JVRkZF UlMsIDApKTsKIAogCXJldHVybiBzaXplOwogfQpAQCAtMTg0NywyMiArMTg1NCw2IEBAIE11bHRp WGFjdFNobWVtSW5pdCh2b2lkKQogCiAJZGVidWdfZWxvZzIoREVCVUcyLCAiU2hhcmVkIE1lbW9y eSBJbml0IGZvciBNdWx0aVhhY3QiKTsKIAotCU11bHRpWGFjdE9mZnNldEN0bC0+UGFnZVByZWNl ZGVzID0gTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVzOwotCU11bHRpWGFjdE1lbWJlckN0bC0+ UGFnZVByZWNlZGVzID0gTXVsdGlYYWN0TWVtYmVyUGFnZVByZWNlZGVzOwotCi0JU2ltcGxlTHJ1 SW5pdChNdWx0aVhhY3RPZmZzZXRDdGwsCi0JCQkJICAiTXVsdGlYYWN0T2Zmc2V0IiwgTlVNX01V TFRJWEFDVE9GRlNFVF9CVUZGRVJTLCAwLAotCQkJCSAgTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2ss ICJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIsCi0JCQkJICBMV1RSQU5DSEVfTVVMVElYQUNUT0ZGU0VU X0JVRkZFUiwKLQkJCQkgIFNZTkNfSEFORExFUl9NVUxUSVhBQ1RfT0ZGU0VUKTsKLQlTbHJ1UGFn ZVByZWNlZGVzVW5pdFRlc3RzKE11bHRpWGFjdE9mZnNldEN0bCwgTVVMVElYQUNUX09GRlNFVFNf UEVSX1BBR0UpOwotCVNpbXBsZUxydUluaXQoTXVsdGlYYWN0TWVtYmVyQ3RsLAotCQkJCSAgIk11 bHRpWGFjdE1lbWJlciIsIE5VTV9NVUxUSVhBQ1RNRU1CRVJfQlVGRkVSUywgMCwKLQkJCQkgIE11 bHRpWGFjdE1lbWJlclNMUlVMb2NrLCAicGdfbXVsdGl4YWN0L21lbWJlcnMiLAotCQkJCSAgTFdU UkFOQ0hFX01VTFRJWEFDVE1FTUJFUl9CVUZGRVIsCi0JCQkJICBTWU5DX0hBTkRMRVJfTVVMVElY QUNUX01FTUJFUik7Ci0JLyogZG9lc24ndCBjYWxsIFNpbXBsZUxydVRydW5jYXRlKCkgb3IgbWVl dCBjcml0ZXJpYSBmb3IgdW5pdCB0ZXN0cyAqLwotCiAJLyogSW5pdGlhbGl6ZSBvdXIgc2hhcmVk IHN0YXRlIHN0cnVjdCAqLwogCU11bHRpWGFjdFN0YXRlID0gU2htZW1Jbml0U3RydWN0KCJTaGFy ZWQgTXVsdGlYYWN0IFN0YXRlIiwKIAkJCQkJCQkJCSBTSEFSRURfTVVMVElYQUNUX1NUQVRFX1NJ WkUsCkBAIC0xODkzLDI5ICsxODg0LDE3IEBAIE11bHRpWGFjdFNobWVtSW5pdCh2b2lkKQogdm9p ZAogQm9vdFN0cmFwTXVsdGlYYWN0KHZvaWQpCiB7Ci0JaW50CQkJc2xvdG5vOwotCi0JTFdMb2Nr QWNxdWlyZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlCdWZmZXIJ CWJ1ZmZlcjsKIAogCS8qIENyZWF0ZSBhbmQgemVybyB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgb2Zm c2V0cyBsb2cgKi8KLQlzbG90bm8gPSBaZXJvTXVsdGlYYWN0T2Zmc2V0UGFnZSgwLCBmYWxzZSk7 Ci0KLQkvKiBNYWtlIHN1cmUgaXQncyB3cml0dGVuIG91dCAqLwotCVNpbXBsZUxydVdyaXRlUGFn ZShNdWx0aVhhY3RPZmZzZXRDdGwsIHNsb3Rubyk7Ci0JQXNzZXJ0KCFNdWx0aVhhY3RPZmZzZXRD dGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKTsKLQotCUxXTG9ja1JlbGVhc2UoTXVsdGlY YWN0T2Zmc2V0U0xSVUxvY2spOwotCi0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RNZW1iZXJTTFJV TG9jaywgTFdfRVhDTFVTSVZFKTsKKwlidWZmZXIgPSBaZXJvTXVsdGlYYWN0T2Zmc2V0UGFnZSgw LCBmYWxzZSk7CisJRmx1c2hPbmVCdWZmZXIoYnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVy KGJ1ZmZlcik7CiAKIAkvKiBDcmVhdGUgYW5kIHplcm8gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIG1l bWJlcnMgbG9nICovCi0Jc2xvdG5vID0gWmVyb011bHRpWGFjdE1lbWJlclBhZ2UoMCwgZmFsc2Up OwotCi0JLyogTWFrZSBzdXJlIGl0J3Mgd3JpdHRlbiBvdXQgKi8KLQlTaW1wbGVMcnVXcml0ZVBh Z2UoTXVsdGlYYWN0TWVtYmVyQ3RsLCBzbG90bm8pOwotCUFzc2VydCghTXVsdGlYYWN0TWVtYmVy Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSk7Ci0KLQlMV0xvY2tSZWxlYXNlKE11bHRp WGFjdE1lbWJlclNMUlVMb2NrKTsKKwlidWZmZXIgPSBaZXJvTXVsdGlYYWN0TWVtYmVyUGFnZSgw LCBmYWxzZSk7CisJRmx1c2hPbmVCdWZmZXIoYnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVy KGJ1ZmZlcik7CiB9CiAKIC8qCkBAIC0xOTI3LDMzICsxOTA2LDU0IEBAIEJvb3RTdHJhcE11bHRp WGFjdCh2b2lkKQogICoKICAqIENvbnRyb2wgbG9jayBtdXN0IGJlIGhlbGQgYXQgZW50cnksIGFu ZCB3aWxsIGJlIGhlbGQgYXQgZXhpdC4KICAqLwotc3RhdGljIGludAorc3RhdGljIEJ1ZmZlcgog WmVyb011bHRpWGFjdE9mZnNldFBhZ2UoaW50IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpCiB7Ci0J aW50CQkJc2xvdG5vOworCUJ1ZmZlcgkJYnVmZmVyOworCVBhZ2UJCXBhZ2U7CisJWExvZ1JlY1B0 cglyZWNwdHI7CiAKLQlzbG90bm8gPSBTaW1wbGVMcnVaZXJvUGFnZShNdWx0aVhhY3RPZmZzZXRD dGwsIHBhZ2Vubyk7CisJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfT0ZG U0VUX0lELCBwYWdlbm8pOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisJUGFnZUlu aXRTTFJVKHBhZ2UsIEJMQ0tTWiwgMCk7CiAKKwlyZWNwdHIgPSAwOworCQogCWlmICh3cml0ZVhs b2cpCi0JCVdyaXRlTVplcm9QYWdlWGxvZ1JlYyhwYWdlbm8sIFhMT0dfTVVMVElYQUNUX1pFUk9f T0ZGX1BBR0UpOworCXsKKwkJcmVjcHRyID0gV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKHBhZ2Vubywg WExPR19NVUxUSVhBQ1RfWkVST19PRkZfUEFHRSk7CisJfQorCisJUGFnZVNldEhlYWRlckRhdGFO b25SZWwocGFnZSwgcGFnZW5vLCByZWNwdHIsIEJMQ0tTWiwgUEdfTUVUQVBBR0VfTEFZT1VUX1ZF UlNJT04pOworCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCi0JcmV0dXJuIHNsb3RubzsKKwly ZXR1cm4gYnVmZmVyOwogfQogCiAvKgogICogRGl0dG8sIGZvciBNdWx0aVhhY3RNZW1iZXIKICAq Lwotc3RhdGljIGludAorc3RhdGljIEJ1ZmZlcgogWmVyb011bHRpWGFjdE1lbWJlclBhZ2UoaW50 IHBhZ2VubywgYm9vbCB3cml0ZVhsb2cpCiB7Ci0JaW50CQkJc2xvdG5vOwotCi0Jc2xvdG5vID0g U2ltcGxlTHJ1WmVyb1BhZ2UoTXVsdGlYYWN0TWVtYmVyQ3RsLCBwYWdlbm8pOwotCisJQnVmZmVy CQlidWZmZXI7CisJUGFnZSAJCXBhZ2U7CisJWExvZ1JlY1B0ciAJcmVjcHRyOworCisJYnVmZmVy ID0gWmVyb1NscnVCdWZmZXIoU0xSVV9NVUxUSVhBQ1RfTUVNQkVSX0lELCBwYWdlbm8pOworCXBh Z2UgPSBCdWZmZXJHZXRQYWdlKGJ1ZmZlcik7CisJUGFnZUluaXRTTFJVKHBhZ2UsIEJMQ0tTWiwg MCk7CisJCQorCXJlY3B0ciA9IDA7CiAJaWYgKHdyaXRlWGxvZykKLQkJV3JpdGVNWmVyb1BhZ2VY bG9nUmVjKHBhZ2VubywgWExPR19NVUxUSVhBQ1RfWkVST19NRU1fUEFHRSk7Ci0KLQlyZXR1cm4g c2xvdG5vOworCXsKKwkJcmVjcHRyID0gV3JpdGVNWmVyb1BhZ2VYbG9nUmVjKHBhZ2VubywgWExP R19NVUxUSVhBQ1RfWkVST19NRU1fUEFHRSk7CisJfQorCQorCVBhZ2VTZXRIZWFkZXJEYXRhTm9u UmVsKHBhZ2UsIHBhZ2VubywgcmVjcHRyLCBCTENLU1osIFBHX01FVEFQQUdFX0xBWU9VVF9WRVJT SU9OKTsKKwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKKwkKKwlyZXR1cm4gYnVmZmVyOwogfQog CiAvKgpAQCAtMTk3OCwyMiArMTk3OCwxNCBAQCBNYXliZUV4dGVuZE9mZnNldFNscnUodm9pZCkK IAogCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKE11bHRpWGFjdFN0YXRlLT5uZXh0 TVhhY3QpOwogCi0JTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jaywgTFdfRVhD TFVTSVZFKTsKLQotCWlmICghU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KE11bHRpWGFj dE9mZnNldEN0bCwgcGFnZW5vKSkKKwlpZiAoIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlz dChTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBhZ2VubykpCiAJewotCQlpbnQJCQlzbG90bm87 CisJCUJ1ZmZlcgkJCWJ1ZmZlcjsKIAotCQkvKgotCQkgKiBGb3J0dW5hdGVseSBmb3IgdXMsIFNp bXBsZUxydVdyaXRlUGFnZSBpcyBhbHJlYWR5IHByZXBhcmVkIHRvIGRlYWwKLQkJICogd2l0aCBj cmVhdGluZyBhIG5ldyBzZWdtZW50IGZpbGUgZXZlbiBpZiB0aGUgcGFnZSB3ZSdyZSB3cml0aW5n IGlzCi0JCSAqIG5vdCB0aGUgZmlyc3QgaW4gaXQsIHNvIHRoaXMgaXMgZW5vdWdoLgotCQkgKi8K LQkJc2xvdG5vID0gWmVyb011bHRpWGFjdE9mZnNldFBhZ2UocGFnZW5vLCBmYWxzZSk7Ci0JCVNp bXBsZUxydVdyaXRlUGFnZShNdWx0aVhhY3RPZmZzZXRDdGwsIHNsb3Rubyk7CisJCWJ1ZmZlciA9 IFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKHBhZ2VubywgZmFsc2UpOworCQlGbHVzaE9uZUJ1ZmZl cihidWZmZXIpOworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJfQotCi0JTFdMb2Nr UmVsZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJVTG9jayk7CiB9CiAKIC8qCkBAIC0yMDA3LDIxICsx OTk5LDYgQEAgTWF5YmVFeHRlbmRPZmZzZXRTbHJ1KHZvaWQpCiB2b2lkCiBTdGFydHVwTXVsdGlY YWN0KHZvaWQpCiB7Ci0JTXVsdGlYYWN0SWQgbXVsdGkgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE1Y YWN0OwotCU11bHRpWGFjdE9mZnNldCBvZmZzZXQgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE9mZnNl dDsKLQlpbnQJCQlwYWdlbm87Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgb2Zmc2V0J3MgaWRlYSBv ZiB0aGUgbGF0ZXN0IHBhZ2UgbnVtYmVyLgotCSAqLwotCXBhZ2VubyA9IE11bHRpWGFjdElkVG9P ZmZzZXRQYWdlKG11bHRpKTsKLQlNdWx0aVhhY3RPZmZzZXRDdGwtPnNoYXJlZC0+bGF0ZXN0X3Bh Z2VfbnVtYmVyID0gcGFnZW5vOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIG1lbWJlcidzIGlkZWEg b2YgdGhlIGxhdGVzdCBwYWdlIG51bWJlci4KLQkgKi8KLQlwYWdlbm8gPSBNWE9mZnNldFRvTWVt YmVyUGFnZShvZmZzZXQpOwotCU11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVkLT5sYXRlc3RfcGFn ZV9udW1iZXIgPSBwYWdlbm87CiB9CiAKIC8qCkBAIC0yMDQ1LDE0ICsyMDIyLDggQEAgVHJpbU11 bHRpWGFjdCh2b2lkKQogCW9sZGVzdE1YYWN0REIgPSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0TXVs dGlYYWN0REI7CiAJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIAotCS8qIENsZWFu IHVwIG9mZnNldHMgc3RhdGUgKi8KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE9mZnNldFNMUlVM b2NrLCBMV19FWENMVVNJVkUpOwotCi0JLyoKLQkgKiAoUmUtKUluaXRpYWxpemUgb3VyIGlkZWEg b2YgdGhlIGxhdGVzdCBwYWdlIG51bWJlciBmb3Igb2Zmc2V0cy4KLQkgKi8KIAlwYWdlbm8gPSBN dWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShuZXh0TVhhY3QpOwotCU11bHRpWGFjdE9mZnNldEN0bC0+ c2hhcmVkLT5sYXRlc3RfcGFnZV9udW1iZXIgPSBwYWdlbm87CisJCiAKIAkvKgogCSAqIFplcm8g b3V0IHRoZSByZW1haW5kZXIgb2YgdGhlIGN1cnJlbnQgb2Zmc2V0cyBwYWdlLiAgU2VlIG5vdGVz IGluCkBAIC0yMDY1LDQ2ICsyMDM2LDM5IEBAIFRyaW1NdWx0aVhhY3Qodm9pZCkKIAllbnRyeW5v ID0gTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KG5leHRNWGFjdCk7CiAJaWYgKGVudHJ5bm8gIT0g MCkKIAl7Ci0JCWludAkJCXNsb3RubzsKIAkJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CisJCUJ1 ZmZlcgkJYnVmZmVyOwogCi0JCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFjdE9m ZnNldEN0bCwgcGFnZW5vLCB0cnVlLCBuZXh0TVhhY3QpOwotCQlvZmZwdHIgPSAoTXVsdGlYYWN0 T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9d OworCQlidWZmZXIgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBh Z2VubywgUkJNX1RSSU0pOworCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVT SVZFKTsKKwkJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSAoUGFnZUdldENvbnRlbnRzKEJ1 ZmZlckdldFBhZ2UoYnVmZmVyKSkpOwogCQlvZmZwdHIgKz0gZW50cnlubzsKIAotCQlNZW1TZXQo b2ZmcHRyLCAwLCBCTENLU1ogLSAoZW50cnlubyAqIHNpemVvZihNdWx0aVhhY3RPZmZzZXQpKSk7 CisJCU1lbVNldChvZmZwdHIsIDAsIEJMQ0tTWiAtIE1BWEFMSUdOKFNpemVPZlBhZ2VIZWFkZXJE YXRhKSAtIChlbnRyeW5vICogc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpKTsKIAotCQlNdWx0aVhh Y3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKKwkJTWFya0J1 ZmZlckRpcnR5KGJ1ZmZlcik7CisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAl9CiAK LQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE9mZnNldFNMUlVMb2NrKTsKLQotCS8qIEFuZCB0aGUg c2FtZSBmb3IgbWVtYmVycyAqLwotCUxXTG9ja0FjcXVpcmUoTXVsdGlYYWN0TWVtYmVyU0xSVUxv Y2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkvKgotCSAqIChSZS0pSW5pdGlhbGl6ZSBvdXIgaWRlYSBv ZiB0aGUgbGF0ZXN0IHBhZ2UgbnVtYmVyIGZvciBtZW1iZXJzLgotCSAqLwotCXBhZ2VubyA9IE1Y T2Zmc2V0VG9NZW1iZXJQYWdlKG9mZnNldCk7Ci0JTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQt PmxhdGVzdF9wYWdlX251bWJlciA9IHBhZ2VubzsKLQogCS8qCiAJICogWmVybyBvdXQgdGhlIHJl bWFpbmRlciBvZiB0aGUgY3VycmVudCBtZW1iZXJzIHBhZ2UuICBTZWUgbm90ZXMgaW4KIAkgKiBU cmltQ0xPRygpIGZvciBtb3RpdmF0aW9uLgogCSAqLworCisJcGFnZW5vID0gTVhPZmZzZXRUb01l bWJlclBhZ2Uob2Zmc2V0KTsKIAlmbGFnc29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZz ZXQpOwogCWlmIChmbGFnc29mZiAhPSAwKQogCXsKLQkJaW50CQkJc2xvdG5vOwogCQlUcmFuc2Fj dGlvbklkICp4aWRwdHI7CiAJCWludAkJCW1lbWJlcm9mZjsKKwkJQnVmZmVyCQlidWZmZXI7CiAK IAkJbWVtYmVyb2ZmID0gTVhPZmZzZXRUb01lbWJlck9mZnNldChvZmZzZXQpOwotCQlzbG90bm8g PSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RNZW1iZXJDdGwsIHBhZ2VubywgdHJ1ZSwgb2Zm c2V0KTsKLQkJeGlkcHRyID0gKFRyYW5zYWN0aW9uSWQgKikKLQkJCShNdWx0aVhhY3RNZW1iZXJD dGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIG1lbWJlcm9mZik7CisJCWJ1ZmZlciA9 IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVMVElYQUNUX01FTUJFUl9JRCwgcGFnZW5vLCBSQk1fVFJJ TSk7CisJCUxvY2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCQl4aWRw dHIgPSAoVHJhbnNhY3Rpb25JZCAqKSAoUGFnZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVm ZmVyKSkgKyBtZW1iZXJvZmYpOwogCi0JCU1lbVNldCh4aWRwdHIsIDAsIEJMQ0tTWiAtIG1lbWJl cm9mZik7CisJCU1lbVNldCh4aWRwdHIsIDAsIEJMQ0tTWiAtIG1lbWJlcm9mZiAtIE1BWEFMSUdO KFNpemVPZlBhZ2VIZWFkZXJEYXRhKSk7CiAKIAkJLyoKIAkJICogTm90ZTogd2UgZG9uJ3QgbmVl ZCB0byB6ZXJvIG91dCB0aGUgZmxhZyBiaXRzIGluIHRoZSByZW1haW5pbmcKQEAgLTIxMTIsMTEg KzIwNzYsMTAgQEAgVHJpbU11bHRpWGFjdCh2b2lkKQogCQkgKiB3cml0aW5nLgogCQkgKi8KIAot CQlNdWx0aVhhY3RNZW1iZXJDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsK KwkJTWFya0J1ZmZlckRpcnR5KGJ1ZmZlcik7CisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVy KTsKIAl9CiAKLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrKTsKLQogCS8q IHNpZ25hbCB0aGF0IHdlJ3JlIG9mZmljaWFsbHkgdXAgKi8KIAlMV0xvY2tBY3F1aXJlKE11bHRp WGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7CiAJTXVsdGlYYWN0U3RhdGUtPmZpbmlzaGVkU3Rh cnR1cCA9IHRydWU7CkBAIC0yMTQ4LDI1ICsyMTExLDYgQEAgTXVsdGlYYWN0R2V0Q2hlY2twdE11 bHRpKGJvb2wgaXNfc2h1dGRvd24sCiAJCQkJKm5leHRNdWx0aSwgKm5leHRNdWx0aU9mZnNldCwg Km9sZGVzdE11bHRpLCAqb2xkZXN0TXVsdGlEQik7CiB9CiAKLS8qCi0gKiBQZXJmb3JtIGEgY2hl Y2twb2ludCAtLS0gZWl0aGVyIGR1cmluZyBzaHV0ZG93biwgb3Igb24tdGhlLWZseQotICovCi12 b2lkCi1DaGVja1BvaW50TXVsdGlYYWN0KHZvaWQpCi17Ci0JVFJBQ0VfUE9TVEdSRVNRTF9NVUxU SVhBQ1RfQ0hFQ0tQT0lOVF9TVEFSVCh0cnVlKTsKLQotCS8qCi0JICogV3JpdGUgZGlydHkgTXVs dGlYYWN0IHBhZ2VzIHRvIGRpc2suICBUaGlzIG1heSByZXN1bHQgaW4gc3luYyByZXF1ZXN0cwot CSAqIHF1ZXVlZCBmb3IgbGF0ZXIgaGFuZGxpbmcgYnkgUHJvY2Vzc1N5bmNSZXF1ZXN0cygpLCBh cyBwYXJ0IG9mIHRoZQotCSAqIGNoZWNrcG9pbnQuCi0JICovCi0JU2ltcGxlTHJ1V3JpdGVBbGwo TXVsdGlYYWN0T2Zmc2V0Q3RsLCB0cnVlKTsKLQlTaW1wbGVMcnVXcml0ZUFsbChNdWx0aVhhY3RN ZW1iZXJDdGwsIHRydWUpOwotCi0JVFJBQ0VfUE9TVEdSRVNRTF9NVUxUSVhBQ1RfQ0hFQ0tQT0lO VF9ET05FKHRydWUpOwotfQotCiAvKgogICogU2V0IHRoZSBuZXh0LXRvLWJlLWFzc2lnbmVkIE11 bHRpWGFjdElkIGFuZCBvZmZzZXQKICAqCkBAIC0yNDAxLDI2ICsyMzQ1LDMwIEBAIE11bHRpWGFj dEFkdmFuY2VPbGRlc3QoTXVsdGlYYWN0SWQgb2xkZXN0TXVsdGksIE9pZCBvbGRlc3RNdWx0aURC KQogICogcm9vbSBpbiBzaGFyZWQgbWVtb3J5LgogICovCiBzdGF0aWMgdm9pZAotRXh0ZW5kTXVs dGlYYWN0T2Zmc2V0KE11bHRpWGFjdElkIG11bHRpKQorRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KE11 bHRpWGFjdElkIG11bHRpLCBCdWZmZXIgKiBidWZmZXIpCiB7CiAJaW50CQkJcGFnZW5vOwogCisK IAkvKgotCSAqIE5vIHdvcmsgZXhjZXB0IGF0IGZpcnN0IE11bHRpWGFjdElkIG9mIGEgcGFnZS4g IEJ1dCBiZXdhcmU6IGp1c3QgYWZ0ZXIKLQkgKiB3cmFwYXJvdW5kLCB0aGUgZmlyc3QgTXVsdGlY YWN0SWQgb2YgcGFnZSB6ZXJvIGlzIEZpcnN0TXVsdGlYYWN0SWQuCisJICogTWFrZSBhIFJlYWRC dWZmZXIgY2FsbCBmb3IgdGhlIHBhZ2Ugd2UgbmVlZCBiZWZvcmVoYW5kIHNvIHRoYXQgd2UgZG9u J3QgbmVlZAorCSAqIHRvIG1hbGxvYyBsYXRlci4KKwkgKiBJZiB3ZSdyZSBhdCB0aGUgZmlyc3Qg TXVsdGlYYWN0SWQgb2YgYSBwYWdlLCBtYWtlIHN1cmUgd2UgYWxzbyB6ZXJvIHRoZSBwYWdlCiAJ ICovCisKKwlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFnZShtdWx0aSk7CiAJaWYgKE11 bHRpWGFjdElkVG9PZmZzZXRFbnRyeShtdWx0aSkgIT0gMCAmJgogCQltdWx0aSAhPSBGaXJzdE11 bHRpWGFjdElkKQorCXsKKwkJLyogbWFrZSBhIHJlYWQgYnVmZmVyIGNhbGwgdG8gZW5sYXJnZSB0 aGUgcmVzb3VyY2Ugb3duZXIgKi8KKwkJKmJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTVVM VElYQUNUX09GRlNFVF9JRCwgcGFnZW5vLCBSQk1fTk9STUFMKTsKIAkJcmV0dXJuOwotCi0JcGFn ZW5vID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkpOwotCi0JTFdMb2NrQWNxdWlyZShN dWx0aVhhY3RPZmZzZXRTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCS8qIFplcm8gdGhlIHBh Z2UgYW5kIG1ha2UgYW4gWExPRyBlbnRyeSBhYm91dCBpdCAqLwotCVplcm9NdWx0aVhhY3RPZmZz ZXRQYWdlKHBhZ2VubywgdHJ1ZSk7Ci0KLQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE9mZnNldFNM UlVMb2NrKTsKKwl9IGVsc2UKKwl7CisJCS8qIFplcm8gdGhlIHBhZ2UgYW5kIG1ha2UgYW4gWExP RyBlbnRyeSBhYm91dCBpdCAqLworCQkqYnVmZmVyID0gWmVyb011bHRpWGFjdE9mZnNldFBhZ2Uo cGFnZW5vLCB0cnVlKTsKKwkJTG9ja0J1ZmZlcigqYnVmZmVyLCBCVUZGRVJfTE9DS19VTkxPQ0sp OyAvKiByZWxlYXNlIGxvY2sgYnV0IGRvbid0IHVucGluICovCisJfQogfQogCiAvKgpAQCAtMjQz MSw3ICsyMzc5LDcgQEAgRXh0ZW5kTXVsdGlYYWN0T2Zmc2V0KE11bHRpWGFjdElkIG11bHRpKQog ICogc2FtZSBjb21tZW50cyBhcHBseS4KICAqLwogc3RhdGljIHZvaWQKLUV4dGVuZE11bHRpWGFj dE1lbWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1lbWJlcnMpCitFeHRlbmRNdWx0 aVhhY3RNZW1iZXIoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwgaW50IG5tZW1iZXJzLCBCdWZmZXIg KiogYnVmZmVycykKIHsKIAkvKgogCSAqIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgbWVtYmVycyBz cGFuIG1vcmUgdGhhbiBvbmUgcGFnZSBvZiB0aGUgbWVtYmVycwpAQCAtMjQzOSwxMCArMjM4Nywx NyBAQCBFeHRlbmRNdWx0aVhhY3RNZW1iZXIoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwgaW50IG5t ZW1iZXJzKQogCSAqIG9wdGltYWwgaWYgdGhlIG1lbWJlcnMgc3BhbiBzZXZlcmFsIHBhZ2VzLCBi dXQgdGhhdCBzZWVtcyB1bnVzdWFsCiAJICogZW5vdWdoIHRvIG5vdCB3b3JyeSBtdWNoIGFib3V0 LgogCSAqLworCWludCBtaW5fcGFnZW5vOworCisJbWluX3BhZ2VubyA9IE1YT2Zmc2V0VG9NZW1i ZXJQYWdlKG9mZnNldCk7CiAJd2hpbGUgKG5tZW1iZXJzID4gMCkKIAl7CisJCUJ1ZmZlciBidWY7 CisKIAkJaW50CQkJZmxhZ3NvZmY7CiAJCWludAkJCWZsYWdzYml0OworCQlpbnQJCQlwYWdlbm87 CisKIAkJdWludDMyCQlkaWZmZXJlbmNlOwogCiAJCS8qCkBAIC0yNDUwLDIwICsyNDA1LDI0IEBA IEV4dGVuZE11bHRpWGFjdE1lbWJlcihNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0LCBpbnQgbm1lbWJl cnMpCiAJCSAqLwogCQlmbGFnc29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpOwog CQlmbGFnc2JpdCA9IE1YT2Zmc2V0VG9GbGFnc0JpdFNoaWZ0KG9mZnNldCk7CisJCXBhZ2VubyA9 IE1YT2Zmc2V0VG9NZW1iZXJQYWdlKG9mZnNldCk7CisJCQorCQkKKwkJCiAJCWlmIChmbGFnc29m ZiA9PSAwICYmIGZsYWdzYml0ID09IDApCiAJCXsKLQkJCWludAkJCXBhZ2VubzsKLQotCQkJcGFn ZW5vID0gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0KTsKLQotCQkJTFdMb2NrQWNxdWlyZShN dWx0aVhhY3RNZW1iZXJTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKLQogCQkJLyogWmVybyB0aGUg cGFnZSBhbmQgbWFrZSBhbiBYTE9HIGVudHJ5IGFib3V0IGl0ICovCi0JCQlaZXJvTXVsdGlYYWN0 TWVtYmVyUGFnZShwYWdlbm8sIHRydWUpOwotCi0JCQlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdE1l bWJlclNMUlVMb2NrKTsKKwkJCWJ1ZiA9IFplcm9NdWx0aVhhY3RNZW1iZXJQYWdlKHBhZ2Vubywg dHJ1ZSk7CisJCQlMb2NrQnVmZmVyKGJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJfSBlbHNl CisJCXsKKwkJCS8qIGRvIGEgcmVhZCBidWZmZXIgY2FsbCB0byBhbGxvY2F0ZSBzcGFjZSBiZWZv cmVoYW5kICovCisJCQlidWYgPSBSZWFkU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9NRU1CRVJf SUQsIHBhZ2VubywgUkJNX05PUk1BTCk7CiAJCX0KIAorCQlpZiAoYnVmZmVycykKKwkJCSgqYnVm ZmVycylbcGFnZW5vIC0gbWluX3BhZ2Vub10gPSBidWY7CisKIAkJLyoKIAkJICogQ29tcHV0ZSB0 aGUgbnVtYmVyIG9mIGl0ZW1zIHRpbGwgZW5kIG9mIGN1cnJlbnQgcGFnZS4gIENhcmVmdWw6IGlm CiAJCSAqIGFkZGl0aW9uIG9mIHVuc2lnbmVkIGludHMgd3JhcHMgYXJvdW5kLCB3ZSdyZSBhdCB0 aGUgbGFzdCBwYWdlIG9mCkBAIC0yNzM3LDggKzI2OTYsOCBAQCBmaW5kX211bHRpeGFjdF9zdGFy dChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQpCiAJTXVsdGlYYWN0 T2Zmc2V0IG9mZnNldDsKIAlpbnQJCQlwYWdlbm87CiAJaW50CQkJZW50cnlubzsKLQlpbnQJCQlz bG90bm87CiAJTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CisJQnVmZmVyCQlidWZmZXI7CiAKIAlB c3NlcnQoTXVsdGlYYWN0U3RhdGUtPmZpbmlzaGVkU3RhcnR1cCk7CiAKQEAgLTI3NDYsMjAgKzI3 MDUsMTkgQEAgZmluZF9tdWx0aXhhY3Rfc3RhcnQoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFj dE9mZnNldCAqcmVzdWx0KQogCWVudHJ5bm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0RW50cnkobXVs dGkpOwogCiAJLyoKLQkgKiBXcml0ZSBvdXQgZGlydHkgZGF0YSwgc28gUGh5c2ljYWxQYWdlRXhp c3RzIGNhbiB3b3JrIGNvcnJlY3RseS4KKwkgKiBDb3BlIHdpdGggbWlzc2luZy9ib2d1cyBvbGRl c3QgTXVsdGlYYWN0IGluIGluY29uc2lzdGVudCBzdGF0ZXMgKHNlZQorCSAqIGNvbW1pdCAwNjhj ZmFkZjkpLgogCSAqLwotCVNpbXBsZUxydVdyaXRlQWxsKE11bHRpWGFjdE9mZnNldEN0bCwgdHJ1 ZSk7Ci0JU2ltcGxlTHJ1V3JpdGVBbGwoTXVsdGlYYWN0TWVtYmVyQ3RsLCB0cnVlKTsKLQotCWlm ICghU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KE11bHRpWGFjdE9mZnNldEN0bCwgcGFn ZW5vKSkKKwlpZiAoIVByb2JlU2xydUJ1ZmZlcihTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsIHBh Z2VubykgJiYKKwkJIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChTTFJVX01VTFRJWEFD VF9PRkZTRVRfSUQsIHBhZ2VubykpCiAJCXJldHVybiBmYWxzZTsKIAotCS8qIGxvY2sgaXMgYWNx dWlyZWQgYnkgU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkgKi8KLQlzbG90bm8gPSBTaW1wbGVM cnVSZWFkUGFnZV9SZWFkT25seShNdWx0aVhhY3RPZmZzZXRDdGwsIHBhZ2VubywgbXVsdGkpOwot CW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQt PnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9NVUxU SVhBQ1RfT0ZGU0VUX0lELCBwYWdlbm8sIFJCTV9OT1JNQUwpOworCUxvY2tCdWZmZXIoYnVmZmVy LCBCVUZGRVJfTE9DS19TSEFSRSk7CisJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSAoUGFn ZUdldENvbnRlbnRzKEJ1ZmZlckdldFBhZ2UoYnVmZmVyKSkpOwogCW9mZnB0ciArPSBlbnRyeW5v OwogCW9mZnNldCA9ICpvZmZwdHI7Ci0JTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RPZmZzZXRTTFJV TG9jayk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCiAJKnJlc3VsdCA9IG9mZnNl dDsKIAlyZXR1cm4gdHJ1ZTsKQEAgLTI4NjIsMTIgKzI4MjAsMTMgQEAgdHlwZWRlZiBzdHJ1Y3Qg bXh0cnVuY2luZm8KICAqCQlUaGlzIGNhbGxiYWNrIGRldGVybWluZXMgdGhlIGVhcmxpZXN0IGV4 aXN0aW5nIHBhZ2UgbnVtYmVyLgogICovCiBzdGF0aWMgYm9vbAotU2xydVNjYW5EaXJDYkZpbmRF YXJsaWVzdChTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLCB2b2lkICpk YXRhKQorU2xydVNjYW5EaXJDYkZpbmRFYXJsaWVzdChpbnQgc2xydV9pZCwgU2xydVBhZ2VQcmVj ZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCSAgY2hhciAqZmlsZW5hbWUsIGludCBz ZWdwYWdlLCB2b2lkICpkYXRhKQogewogCW14dHJ1bmNpbmZvICp0cnVuYyA9IChteHRydW5jaW5m byAqKSBkYXRhOwogCiAJaWYgKHRydW5jLT5lYXJsaWVzdEV4aXN0aW5nUGFnZSA9PSAtMSB8fAot CQljdGwtPlBhZ2VQcmVjZWRlcyhzZWdwYWdlLCB0cnVuYy0+ZWFybGllc3RFeGlzdGluZ1BhZ2Up KQorCQlQYWdlUHJlY2VkZXMoc2VncGFnZSwgdHJ1bmMtPmVhcmxpZXN0RXhpc3RpbmdQYWdlKSkK IAl7CiAJCXRydW5jLT5lYXJsaWVzdEV4aXN0aW5nUGFnZSA9IHNlZ3BhZ2U7CiAJfQpAQCAtMjg5 OSw3ICsyODU4LDcgQEAgUGVyZm9ybU1lbWJlcnNUcnVuY2F0aW9uKE11bHRpWGFjdE9mZnNldCBv bGRlc3RPZmZzZXQsIE11bHRpWGFjdE9mZnNldCBuZXdPbGRlc3QKIAl3aGlsZSAoc2VnbWVudCAh PSBlbmRzZWdtZW50KQogCXsKIAkJZWxvZyhERUJVRzIsICJ0cnVuY2F0aW5nIG11bHRpeGFjdCBt ZW1iZXJzIHNlZ21lbnQgJXgiLCBzZWdtZW50KTsKLQkJU2xydURlbGV0ZVNlZ21lbnQoTXVsdGlY YWN0TWVtYmVyQ3RsLCBzZWdtZW50KTsKKwkJU2xydURlbGV0ZVNlZ21lbnQoU0xSVV9NVUxUSVhB Q1RfTUVNQkVSX0lELCBzZWdtZW50KTsKIAogCQkvKiBtb3ZlIHRvIG5leHQgc2VnbWVudCwgaGFu ZGxpbmcgd3JhcGFyb3VuZCBjb3JyZWN0bHkgKi8KIAkJaWYgKHNlZ21lbnQgPT0gbWF4c2VnbWVu dCkKQEAgLTI5MjIsNyArMjg4MSw4IEBAIFBlcmZvcm1PZmZzZXRzVHJ1bmNhdGlvbihNdWx0aVhh Y3RJZCBvbGRlc3RNdWx0aSwgTXVsdGlYYWN0SWQgbmV3T2xkZXN0TXVsdGkpCiAJICogZGlkbid0 IHN1YnRyYWN0IG9uZSwgd2UnZCB0cmlnZ2VyIFNpbXBsZUxydVRydW5jYXRlJ3Mgd3JhcGFyb3Vu ZAogCSAqIGRldGVjdGlvbi4KIAkgKi8KLQlTaW1wbGVMcnVUcnVuY2F0ZShNdWx0aVhhY3RPZmZz ZXRDdGwsCisJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9NVUxUSVhBQ1RfT0ZGU0VUX0lELAorCQkJ CQkgIE11bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRlcywKIAkJCQkJICBNdWx0aVhhY3RJZFRvT2Zm c2V0UGFnZShQcmV2aW91c011bHRpWGFjdElkKG5ld09sZGVzdE11bHRpKSkpOwogfQogCkBAIC0y OTk2LDcgKzI5NTYsOSBAQCBUcnVuY2F0ZU11bHRpWGFjdChNdWx0aVhhY3RJZCBuZXdPbGRlc3RN dWx0aSwgT2lkIG5ld09sZGVzdE11bHRpREIpCiAJICogYmVlbiB0cnVuY2F0ZWQgYXdheSwgYW5k IHdlIGNyYXNoZWQgYmVmb3JlIHVwZGF0aW5nIG9sZGVzdE11bHRpLgogCSAqLwogCXRydW5jLmVh cmxpZXN0RXhpc3RpbmdQYWdlID0gLTE7Ci0JU2xydVNjYW5EaXJlY3RvcnkoTXVsdGlYYWN0T2Zm c2V0Q3RsLCBTbHJ1U2NhbkRpckNiRmluZEVhcmxpZXN0LCAmdHJ1bmMpOworCVNscnVTY2FuRGly ZWN0b3J5KFNMUlVfTVVMVElYQUNUX09GRlNFVF9JRCwKKwkJCQkJICBNdWx0aVhhY3RPZmZzZXRQ YWdlUHJlY2VkZXMsCisJCQkJCSAgU2xydVNjYW5EaXJDYkZpbmRFYXJsaWVzdCwgJnRydW5jKTsK IAllYXJsaWVzdCA9IHRydW5jLmVhcmxpZXN0RXhpc3RpbmdQYWdlICogTVVMVElYQUNUX09GRlNF VFNfUEVSX1BBR0U7CiAJaWYgKGVhcmxpZXN0IDwgRmlyc3RNdWx0aVhhY3RJZCkKIAkJZWFybGll c3QgPSBGaXJzdE11bHRpWGFjdElkOwpAQCAtMzEyOCwyNCArMzA5MCw2IEBAIE11bHRpWGFjdE9m ZnNldFBhZ2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMikKIAkJCQkJCQkJbXVsdGkyICsg TVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UgLSAxKSk7CiB9CiAKLS8qCi0gKiBEZWNpZGUgd2hl dGhlciBhIE11bHRpWGFjdE1lbWJlciBwYWdlIG51bWJlciBpcyAib2xkZXIiIGZvciB0cnVuY2F0 aW9uCi0gKiBwdXJwb3Nlcy4gIFRoZXJlIGlzIG5vICJpbnZhbGlkIG9mZnNldCBudW1iZXIiIHNv IHVzZSB0aGUgbnVtYmVycyB2ZXJiYXRpbS4KLSAqLwotc3RhdGljIGJvb2wKLU11bHRpWGFjdE1l bWJlclBhZ2VQcmVjZWRlcyhpbnQgcGFnZTEsIGludCBwYWdlMikKLXsKLQlNdWx0aVhhY3RPZmZz ZXQgb2Zmc2V0MTsKLQlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MjsKLQotCW9mZnNldDEgPSAoKE11 bHRpWGFjdE9mZnNldCkgcGFnZTEpICogTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0U7Ci0Jb2Zm c2V0MiA9ICgoTXVsdGlYYWN0T2Zmc2V0KSBwYWdlMikgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJf UEFHRTsKLQotCXJldHVybiAoTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMob2Zmc2V0MSwgb2Zmc2V0 MikgJiYKLQkJCU11bHRpWGFjdE9mZnNldFByZWNlZGVzKG9mZnNldDEsCi0JCQkJCQkJCQlvZmZz ZXQyICsgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UgLSAxKSk7Ci19Ci0KIC8qCiAgKiBEZWNp ZGUgd2hpY2ggb2YgdHdvIE11bHRpWGFjdElkcyBpcyBlYXJsaWVyLgogICoKQEAgLTMxOTAsMTIg KzMxMzQsMTYgQEAgTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMoTXVsdGlYYWN0T2Zmc2V0IG9mZnNl dDEsIE11bHRpWGFjdE9mZnNldCBvZmZzZXQyKQogICogV3JpdGUgYW4geGxvZyByZWNvcmQgcmVm bGVjdGluZyB0aGUgemVyb2luZyBvZiBlaXRoZXIgYSBNRU1CRVJzIG9yCiAgKiBPRkZTRVRzIHBh Z2UgKGluZm8gc2hvd3Mgd2hpY2gpCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgWExvZ1JlY1B0 ciAKIFdyaXRlTVplcm9QYWdlWGxvZ1JlYyhpbnQgcGFnZW5vLCB1aW50OCBpbmZvKQogeworCVhM b2dSZWNQdHIgcmVjcHRyOworCQogCVhMb2dCZWdpbkluc2VydCgpOwogCVhMb2dSZWdpc3RlckRh dGEoKGNoYXIgKikgKCZwYWdlbm8pLCBzaXplb2YoaW50KSk7Ci0JKHZvaWQpIFhMb2dJbnNlcnQo Uk1fTVVMVElYQUNUX0lELCBpbmZvKTsKKwlyZWNwdHIgPSBYTG9nSW5zZXJ0KFJNX01VTFRJWEFD VF9JRCwgaW5mbyk7CisKKwlyZXR1cm4gcmVjcHRyOwogfQogCiAvKgpAQCAtMzI0MCwzMiArMzE4 OCwxOCBAQCBtdWx0aXhhY3RfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAlpZiAoaW5m byA9PSBYTE9HX01VTFRJWEFDVF9aRVJPX09GRl9QQUdFKQogCXsKIAkJaW50CQkJcGFnZW5vOwot CQlpbnQJCQlzbG90bm87CiAKIAkJbWVtY3B5KCZwYWdlbm8sIFhMb2dSZWNHZXREYXRhKHJlY29y ZCksIHNpemVvZihpbnQpKTsKIAotCQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdE9mZnNldFNMUlVM b2NrLCBMV19FWENMVVNJVkUpOwotCi0JCXNsb3RubyA9IFplcm9NdWx0aVhhY3RPZmZzZXRQYWdl KHBhZ2VubywgZmFsc2UpOwotCQlTaW1wbGVMcnVXcml0ZVBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3Rs LCBzbG90bm8pOwotCQlBc3NlcnQoIU11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2Rp cnR5W3Nsb3Rub10pOwotCi0JCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2sp OworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKFplcm9NdWx0aVhhY3RPZmZzZXRQYWdlKHBhZ2Vubywg ZmFsc2UpKTsKIAl9CiAJZWxzZSBpZiAoaW5mbyA9PSBYTE9HX01VTFRJWEFDVF9aRVJPX01FTV9Q QUdFKQogCXsKIAkJaW50CQkJcGFnZW5vOwotCQlpbnQJCQlzbG90bm87CiAKIAkJbWVtY3B5KCZw YWdlbm8sIFhMb2dSZWNHZXREYXRhKHJlY29yZCksIHNpemVvZihpbnQpKTsKIAotCQlMV0xvY2tB Y3F1aXJlKE11bHRpWGFjdE1lbWJlclNMUlVMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JCXNsb3Ru byA9IFplcm9NdWx0aVhhY3RNZW1iZXJQYWdlKHBhZ2VubywgZmFsc2UpOwotCQlTaW1wbGVMcnVX cml0ZVBhZ2UoTXVsdGlYYWN0TWVtYmVyQ3RsLCBzbG90bm8pOwotCQlBc3NlcnQoIU11bHRpWGFj dE1lbWJlckN0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pOwotCi0JCUxXTG9ja1JlbGVh c2UoTXVsdGlYYWN0TWVtYmVyU0xSVUxvY2spOworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKFplcm9N dWx0aVhhY3RNZW1iZXJQYWdlKHBhZ2VubywgZmFsc2UpKTsKIAl9CiAJZWxzZSBpZiAoaW5mbyA9 PSBYTE9HX01VTFRJWEFDVF9DUkVBVEVfSUQpCiAJewpAQCAtMzI3Niw3ICszMjEwLDcgQEAgbXVs dGl4YWN0X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAKIAkJLyogU3RvcmUgdGhlIGRh dGEgYmFjayBpbnRvIHRoZSBTTFJVIGZpbGVzICovCiAJCVJlY29yZE5ld011bHRpWGFjdCh4bHJl Yy0+bWlkLCB4bHJlYy0+bW9mZiwgeGxyZWMtPm5tZW1iZXJzLAotCQkJCQkJICAgeGxyZWMtPm1l bWJlcnMpOworCQkJCQkJICAgeGxyZWMtPm1lbWJlcnMsIE5VTEwsIE5VTEwpOwogCiAJCS8qIE1h a2Ugc3VyZSBuZXh0TVhhY3QvbmV4dE9mZnNldCBhcmUgYmV5b25kIHdoYXQgdGhpcyByZWNvcmQg aGFzICovCiAJCU11bHRpWGFjdEFkdmFuY2VOZXh0TVhhY3QoeGxyZWMtPm1pZCArIDEsCkBAIC0z Mjk5LDcgKzMyMzMsNiBAQCBtdWx0aXhhY3RfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkK IAllbHNlIGlmIChpbmZvID09IFhMT0dfTVVMVElYQUNUX1RSVU5DQVRFX0lEKQogCXsKIAkJeGxf bXVsdGl4YWN0X3RydW5jYXRlIHhscmVjOwotCQlpbnQJCQlwYWdlbm87CiAKIAkJbWVtY3B5KCZ4 bHJlYywgWExvZ1JlY0dldERhdGEocmVjb3JkKSwKIAkJCSAgIFNpemVPZk11bHRpWGFjdFRydW5j YXRlKTsKQEAgLTMzMjUsMTMgKzMyNTgsNiBAQCBtdWx0aXhhY3RfcmVkbyhYTG9nUmVhZGVyU3Rh dGUgKnJlY29yZCkKIAogCQlQZXJmb3JtTWVtYmVyc1RydW5jYXRpb24oeGxyZWMuc3RhcnRUcnVu Y01lbWIsIHhscmVjLmVuZFRydW5jTWVtYik7CiAKLQkJLyoKLQkJICogRHVyaW5nIFhMT0cgcmVw bGF5LCBsYXRlc3RfcGFnZV9udW1iZXIgaXNuJ3QgbmVjZXNzYXJpbHkgc2V0IHVwCi0JCSAqIHll dDsgaW5zZXJ0IGEgc3VpdGFibGUgdmFsdWUgdG8gYnlwYXNzIHRoZSBzYW5pdHkgdGVzdCBpbgot CQkgKiBTaW1wbGVMcnVUcnVuY2F0ZS4KLQkJICovCi0JCXBhZ2VubyA9IE11bHRpWGFjdElkVG9P ZmZzZXRQYWdlKHhscmVjLmVuZFRydW5jT2ZmKTsKLQkJTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFy ZWQtPmxhdGVzdF9wYWdlX251bWJlciA9IHBhZ2VubzsKIAkJUGVyZm9ybU9mZnNldHNUcnVuY2F0 aW9uKHhscmVjLnN0YXJ0VHJ1bmNPZmYsIHhscmVjLmVuZFRydW5jT2ZmKTsKIAogCQlMV0xvY2tS ZWxlYXNlKE11bHRpWGFjdFRydW5jYXRpb25Mb2NrKTsKQEAgLTM0MDEsMjEgKzMzMjcsMyBAQCBw Z19nZXRfbXVsdGl4YWN0X21lbWJlcnMoUEdfRlVOQ1RJT05fQVJHUykKIAogCVNSRl9SRVRVUk5f RE9ORShmdW5jY3h0KTsKIH0KLQotLyoKLSAqIEVudHJ5cG9pbnQgZm9yIHN5bmMuYyB0byBzeW5j IG9mZnNldHMgZmlsZXMuCi0gKi8KLWludAotbXVsdGl4YWN0b2Zmc2V0c3N5bmNmaWxldGFnKGNv bnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpCi17Ci0JcmV0dXJuIFNscnVTeW5jRmlsZVRh ZyhNdWx0aVhhY3RPZmZzZXRDdGwsIGZ0YWcsIHBhdGgpOwotfQotCi0vKgotICogRW50cnlwb2lu dCBmb3Igc3luYy5jIHRvIHN5bmMgbWVtYmVycyBmaWxlcy4KLSAqLwotaW50Ci1tdWx0aXhhY3Rt ZW1iZXJzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCkKLXsKLQly ZXR1cm4gU2xydVN5bmNGaWxlVGFnKE11bHRpWGFjdE1lbWJlckN0bCwgZnRhZywgcGF0aCk7Ci19 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMKaW5kZXggNWFiODYyMzhhOTIuLjAwZjE3OGM0Mjkz IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9zbHJ1LmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc2xydS5jCkBAIC0xLDQxICsxLDkgQEAKIC8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQogICoKICAqIHNscnUuYwotICoJCVNpbXBsZSBMUlUgYnVmZmVyaW5nIGZvciB0 cmFuc2FjdGlvbiBzdGF0dXMgbG9nZmlsZXMKKyAqCQlTaW1wbGUgYnVmZmVyaW5nIGZvciB0cmFu c2FjdGlvbiBzdGF0dXMgbG9nZmlsZXMKICAqCi0gKiBXZSB1c2UgYSBzaW1wbGUgbGVhc3QtcmVj ZW50bHktdXNlZCBzY2hlbWUgdG8gbWFuYWdlIGEgcG9vbCBvZiBwYWdlCi0gKiBidWZmZXJzLiAg VW5kZXIgb3JkaW5hcnkgY2lyY3Vtc3RhbmNlcyB3ZSBleHBlY3QgdGhhdCB3cml0ZQotICogdHJh ZmZpYyB3aWxsIG9jY3VyIG1vc3RseSB0byB0aGUgbGF0ZXN0IHBhZ2UgKGFuZCB0byB0aGUganVz dC1wcmlvcgotICogcGFnZSwgc29vbiBhZnRlciBhIHBhZ2UgdHJhbnNpdGlvbikuICBSZWFkIHRy YWZmaWMgd2lsbCBwcm9iYWJseSB0b3VjaAotICogYSBsYXJnZXIgc3BhbiBvZiBwYWdlcywgYnV0 IGluIGFueSBjYXNlIGEgZmFpcmx5IHNtYWxsIG51bWJlciBvZiBwYWdlCi0gKiBidWZmZXJzIHNo b3VsZCBiZSBzdWZmaWNpZW50LiAgU28sIHdlIGp1c3Qgc2VhcmNoIHRoZSBidWZmZXJzIHVzaW5n IHBsYWluCi0gKiBsaW5lYXIgc2VhcmNoOyB0aGVyZSdzIG5vIG5lZWQgZm9yIGEgaGFzaHRhYmxl IG9yIGFueXRoaW5nIGZhbmN5LgotICogVGhlIG1hbmFnZW1lbnQgYWxnb3JpdGhtIGlzIHN0cmFp Z2h0IExSVSBleGNlcHQgdGhhdCB3ZSB3aWxsIG5ldmVyIHN3YXAKLSAqIG91dCB0aGUgbGF0ZXN0 IHBhZ2UgKHNpbmNlIHdlIGtub3cgaXQncyBnb2luZyB0byBiZSBoaXQgYWdhaW4gZXZlbnR1YWxs eSkuCi0gKgotICogV2UgdXNlIGEgY29udHJvbCBMV0xvY2sgdG8gcHJvdGVjdCB0aGUgc2hhcmVk IGRhdGEgc3RydWN0dXJlcywgcGx1cwotICogcGVyLWJ1ZmZlciBMV0xvY2tzIHRoYXQgc3luY2hy b25pemUgSS9PIGZvciBlYWNoIGJ1ZmZlci4gIFRoZSBjb250cm9sIGxvY2sKLSAqIG11c3QgYmUg aGVsZCB0byBleGFtaW5lIG9yIG1vZGlmeSBhbnkgc2hhcmVkIHN0YXRlLiAgQSBwcm9jZXNzIHRo YXQgaXMKLSAqIHJlYWRpbmcgaW4gb3Igd3JpdGluZyBvdXQgYSBwYWdlIGJ1ZmZlciBkb2VzIG5v dCBob2xkIHRoZSBjb250cm9sIGxvY2ssCi0gKiBvbmx5IHRoZSBwZXItYnVmZmVyIGxvY2sgZm9y IHRoZSBidWZmZXIgaXQgaXMgd29ya2luZyBvbi4KLSAqCi0gKiAiSG9sZGluZyB0aGUgY29udHJv bCBsb2NrIiBtZWFucyBleGNsdXNpdmUgbG9jayBpbiBhbGwgY2FzZXMgZXhjZXB0IGZvcgotICog U2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoKTsgc2VlIGNvbW1lbnRzIGZvciBTbHJ1UmVjZW50 bHlVc2VkKCkgZm9yCi0gKiB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQuCi0gKgotICogV2hlbiBp bml0aWF0aW5nIEkvTyBvbiBhIGJ1ZmZlciwgd2UgYWNxdWlyZSB0aGUgcGVyLWJ1ZmZlciBsb2Nr IGV4Y2x1c2l2ZWx5Ci0gKiBiZWZvcmUgcmVsZWFzaW5nIHRoZSBjb250cm9sIGxvY2suICBUaGUg cGVyLWJ1ZmZlciBsb2NrIGlzIHJlbGVhc2VkIGFmdGVyCi0gKiBjb21wbGV0aW5nIHRoZSBJL08s IHJlLWFjcXVpcmluZyB0aGUgY29udHJvbCBsb2NrLCBhbmQgdXBkYXRpbmcgdGhlIHNoYXJlZAot ICogc3RhdGUuICAoRGVhZGxvY2sgaXMgbm90IHBvc3NpYmxlIGhlcmUsIGJlY2F1c2Ugd2UgbmV2 ZXIgdHJ5IHRvIGluaXRpYXRlCi0gKiBJL08gd2hlbiBzb21lb25lIGVsc2UgaXMgYWxyZWFkeSBk b2luZyBJL08gb24gdGhlIHNhbWUgYnVmZmVyLikKLSAqIFRvIHdhaXQgZm9yIEkvTyB0byBjb21w bGV0ZSwgcmVsZWFzZSB0aGUgY29udHJvbCBsb2NrLCBhY3F1aXJlIHRoZQotICogcGVyLWJ1ZmZl ciBsb2NrIGluIHNoYXJlZCBtb2RlLCBpbW1lZGlhdGVseSByZWxlYXNlIHRoZSBwZXItYnVmZmVy IGxvY2ssCi0gKiByZWFjcXVpcmUgdGhlIGNvbnRyb2wgbG9jaywgYW5kIHRoZW4gcmVjaGVjayBz dGF0ZSAoc2luY2UgYXJiaXRyYXJ5IHRoaW5ncwotICogY291bGQgaGF2ZSBoYXBwZW5lZCB3aGls ZSB3ZSBkaWRuJ3QgaGF2ZSB0aGUgbG9jaykuCi0gKgotICogQXMgd2l0aCB0aGUgcmVndWxhciBi dWZmZXIgbWFuYWdlciwgaXQgaXMgcG9zc2libGUgZm9yIGFub3RoZXIgcHJvY2VzcwotICogdG8g cmUtZGlydHkgYSBwYWdlIHRoYXQgaXMgY3VycmVudGx5IGJlaW5nIHdyaXR0ZW4gb3V0LiAgVGhp cyBpcyBoYW5kbGVkCi0gKiBieSByZS1zZXR0aW5nIHRoZSBwYWdlJ3MgcGFnZV9kaXJ0eSBmbGFn LgorICogWFhYIHdyaXRlIG1lCiAgKgogICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5 Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cApAQCAtNjAsNTYyICsy OCwzNCBAQAogI2luY2x1ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3NobWVt LmgiCiAKLSNkZWZpbmUgU2xydUZpbGVOYW1lKGN0bCwgcGF0aCwgc2VnKSBcCi0Jc25wcmludGYo cGF0aCwgTUFYUEdQQVRILCAiJXMvJTA0WCIsIChjdGwpLT5EaXIsIHNlZykKLQogLyoKLSAqIER1 cmluZyBTaW1wbGVMcnVXcml0ZUFsbCgpLCB3ZSB3aWxsIHVzdWFsbHkgbm90IG5lZWQgdG8gd3Jp dGUgbW9yZSB0aGFuIG9uZQotICogb3IgdHdvIHBoeXNpY2FsIGZpbGVzLCBidXQgd2UgbWF5IG5l ZWQgdG8gd3JpdGUgc2V2ZXJhbCBwYWdlcyBwZXIgZmlsZS4gIFdlCi0gKiBjYW4gY29uc29saWRh dGUgdGhlIEkvTyByZXF1ZXN0cyBieSBsZWF2aW5nIGZpbGVzIG9wZW4gdW50aWwgY29udHJvbCBy ZXR1cm5zCi0gKiB0byBTaW1wbGVMcnVXcml0ZUFsbCgpLiAgVGhpcyBkYXRhIHN0cnVjdHVyZSBy ZW1lbWJlcnMgd2hpY2ggZmlsZXMgYXJlIG9wZW4uCisgKiBTTFJVIElEIHRvIHBhdGggbWFwcGlu ZwogICovCi0jZGVmaW5lIE1BWF9XUklURUFMTF9CVUZGRVJTCTE2CisjZGVmaW5lIFBHX1NMUlUo c3ltbmFtZSxuYW1lLHBhdGgsc3luY2hyb25pemUpIFwKKwlwYXRoLAogCi10eXBlZGVmIHN0cnVj dCBTbHJ1V3JpdGVBbGxEYXRhCitzdGF0aWMgY2hhciAqc2xydV9kaXJzW10gPQogewotCWludAkJ CW51bV9maWxlczsJCS8qICMgZmlsZXMgYWN0dWFsbHkgb3BlbiAqLwotCWludAkJCWZkW01BWF9X UklURUFMTF9CVUZGRVJTXTsJLyogdGhlaXIgRkQncyAqLwotCWludAkJCXNlZ25vW01BWF9XUklU RUFMTF9CVUZGRVJTXTsJLyogdGhlaXIgbG9nIHNlZyNzICovCi19IFNscnVXcml0ZUFsbERhdGE7 Ci0KLXR5cGVkZWYgc3RydWN0IFNscnVXcml0ZUFsbERhdGEgKlNscnVXcml0ZUFsbDsKKyNpbmNs dWRlICJhY2Nlc3Mvc2xydWxpc3QuaCIKK307CiAKIC8qCi0gKiBQb3B1bGF0ZSBhIGZpbGUgdGFn IGRlc2NyaWJpbmcgYSBzZWdtZW50IGZpbGUuICBXZSBvbmx5IHVzZSB0aGUgc2VnbWVudAotICog bnVtYmVyLCBzaW5jZSB3ZSBjYW4gZGVyaXZlIGV2ZXJ5dGhpbmcgZWxzZSB3ZSBuZWVkIGJ5IGhh dmluZyBzZXBhcmF0ZQotICogc3luYyBoYW5kbGVyIGZ1bmN0aW9ucyBmb3IgY2xvZywgbXVsdGl4 YWN0IGV0Yy4KKyAqIFdlJ2xsIG1haW50YWluIGEgbGl0dGxlIGNhY2hlIG9mIHJlY2VudGx5IHNl ZW4gYnVmZmVycywgdG8gdHJ5IHRvIGF2b2lkIHRoZQorICogYnVmZmVyIG1hcHBpbmcgdGFibGUg b24gcmVwZWF0IGFjY2VzcyAoaWUgdGhlIGJ1c3kgZW5kIG9mIHRoZSBDTE9HKS4gIE9uZQorICog ZW50cnkgcGVyIFNMUlUuCiAgKi8KLSNkZWZpbmUgSU5JVF9TTFJVRklMRVRBRyhhLHh4X2hhbmRs ZXIseHhfc2Vnbm8pIFwKLSggXAotCW1lbXNldCgmKGEpLCAwLCBzaXplb2YoRmlsZVRhZykpLCBc Ci0JKGEpLmhhbmRsZXIgPSAoeHhfaGFuZGxlciksIFwKLQkoYSkuc2Vnbm8gPSAoeHhfc2Vnbm8p IFwKLSkKLQotLyoKLSAqIE1hY3JvIHRvIG1hcmsgYSBidWZmZXIgc2xvdCAibW9zdCByZWNlbnRs eSB1c2VkIi4gIE5vdGUgbXVsdGlwbGUgZXZhbHVhdGlvbgotICogb2YgYXJndW1lbnRzIQotICoK LSAqIFRoZSByZWFzb24gZm9yIHRoZSBpZi10ZXN0IGlzIHRoYXQgdGhlcmUgYXJlIG9mdGVuIG1h bnkgY29uc2VjdXRpdmUKLSAqIGFjY2Vzc2VzIHRvIHRoZSBzYW1lIHBhZ2UgKHBhcnRpY3VsYXJs eSB0aGUgbGF0ZXN0IHBhZ2UpLiAgQnkgc3VwcHJlc3NpbmcKLSAqIHVzZWxlc3MgaW5jcmVtZW50 cyBvZiBjdXJfbHJ1X2NvdW50LCB3ZSByZWR1Y2UgdGhlIHByb2JhYmlsaXR5IHRoYXQgb2xkCi0g KiBwYWdlcycgY291bnRzIHdpbGwgIndyYXAgYXJvdW5kIiBhbmQgbWFrZSB0aGVtIGFwcGVhciBy ZWNlbnRseSB1c2VkLgotICoKLSAqIFdlIGFsbG93IHRoaXMgY29kZSB0byBiZSBleGVjdXRlZCBj b25jdXJyZW50bHkgYnkgbXVsdGlwbGUgcHJvY2Vzc2VzIHdpdGhpbgotICogU2ltcGxlTHJ1UmVh ZFBhZ2VfUmVhZE9ubHkoKS4gIEFzIGxvbmcgYXMgaW50IHJlYWRzIGFuZCB3cml0ZXMgYXJlIGF0 b21pYywKLSAqIHRoaXMgc2hvdWxkIG5vdCBjYXVzZSBhbnkgY29tcGxldGVseS1ib2d1cyB2YWx1 ZXMgdG8gZW50ZXIgdGhlIGNvbXB1dGF0aW9uLgotICogSG93ZXZlciwgaXQgaXMgcG9zc2libGUg Zm9yIGVpdGhlciBjdXJfbHJ1X2NvdW50IG9yIGluZGl2aWR1YWwKLSAqIHBhZ2VfbHJ1X2NvdW50 IGVudHJpZXMgdG8gYmUgInJlc2V0IiB0byBsb3dlciB2YWx1ZXMgdGhhbiB0aGV5IHNob3VsZCBo YXZlLAotICogaW4gY2FzZSBhIHByb2Nlc3MgaXMgZGVsYXllZCB3aGlsZSBpdCBleGVjdXRlcyB0 aGlzIG1hY3JvLiAgV2l0aCBjYXJlIGluCi0gKiBTbHJ1U2VsZWN0TFJVUGFnZSgpLCB0aGlzIGRv ZXMgbGl0dGxlIGhhcm0sIGFuZCBpbiBhbnkgY2FzZSB0aGUgYWJzb2x1dGUKLSAqIHdvcnN0IHBv c3NpYmxlIGNvbnNlcXVlbmNlIGlzIGEgbm9ub3B0aW1hbCBjaG9pY2Ugb2YgcGFnZSB0byBldmlj dC4gIFRoZQotICogZ2FpbiBmcm9tIGFsbG93aW5nIGNvbmN1cnJlbnQgcmVhZHMgb2YgU0xSVSBw YWdlcyBzZWVtcyB3b3J0aCBpdC4KLSAqLwotI2RlZmluZSBTbHJ1UmVjZW50bHlVc2VkKHNoYXJl ZCwgc2xvdG5vKQlcCi0JZG8geyBcCi0JCWludAkJbmV3X2xydV9jb3VudCA9IChzaGFyZWQpLT5j dXJfbHJ1X2NvdW50OyBcCi0JCWlmIChuZXdfbHJ1X2NvdW50ICE9IChzaGFyZWQpLT5wYWdlX2xy dV9jb3VudFtzbG90bm9dKSB7IFwKLQkJCShzaGFyZWQpLT5jdXJfbHJ1X2NvdW50ID0gKytuZXdf bHJ1X2NvdW50OyBcCi0JCQkoc2hhcmVkKS0+cGFnZV9scnVfY291bnRbc2xvdG5vXSA9IG5ld19s cnVfY291bnQ7IFwKLQkJfSBcCi0JfSB3aGlsZSAoMCkKLQotLyogU2F2ZWQgaW5mbyBmb3IgU2xy dVJlcG9ydElPRXJyb3IgKi8KLXR5cGVkZWYgZW51bQotewotCVNMUlVfT1BFTl9GQUlMRUQsCi0J U0xSVV9TRUVLX0ZBSUxFRCwKLQlTTFJVX1JFQURfRkFJTEVELAotCVNMUlVfV1JJVEVfRkFJTEVE LAotCVNMUlVfRlNZTkNfRkFJTEVELAotCVNMUlVfQ0xPU0VfRkFJTEVECi19IFNscnVFcnJvckNh dXNlOworc3RydWN0IFNscnVSZWNlbnRCdWZmZXIgeworCWludAkJCXBhZ2VubzsKKwlCdWZmZXIJ CXJlY2VudF9idWZmZXI7Cit9OwogCi1zdGF0aWMgU2xydUVycm9yQ2F1c2Ugc2xydV9lcnJjYXVz ZTsKLXN0YXRpYyBpbnQJc2xydV9lcnJubzsKK3N0YXRpYyBzdHJ1Y3QgU2xydVJlY2VudEJ1ZmZl ciBzbHJ1X3JlY2VudF9idWZmZXJzW1NMUlVfTkVYVF9JRF07CiAKLQotc3RhdGljIHZvaWQgU2lt cGxlTHJ1WmVyb0xTTnMoU2xydUN0bCBjdGwsIGludCBzbG90bm8pOwotc3RhdGljIHZvaWQgU2lt cGxlTHJ1V2FpdElPKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKTsKLXN0YXRpYyB2b2lkIFNscnVJ bnRlcm5hbFdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubywgU2xydVdyaXRlQWxsIGZk YXRhKTsKLXN0YXRpYyBib29sIFNscnVQaHlzaWNhbFJlYWRQYWdlKFNscnVDdGwgY3RsLCBpbnQg cGFnZW5vLCBpbnQgc2xvdG5vKTsKLXN0YXRpYyBib29sIFNscnVQaHlzaWNhbFdyaXRlUGFnZShT bHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywgaW50IHNsb3RubywKLQkJCQkJCQkJICBTbHJ1V3JpdGVB bGwgZmRhdGEpOwotc3RhdGljIHZvaWQgU2xydVJlcG9ydElPRXJyb3IoU2xydUN0bCBjdGwsIGlu dCBwYWdlbm8sIFRyYW5zYWN0aW9uSWQgeGlkKTsKLXN0YXRpYyBpbnQJU2xydVNlbGVjdExSVVBh Z2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8pOwotCi1zdGF0aWMgYm9vbCBTbHJ1U2NhbkRpckNi RGVsZXRlQ3V0b2ZmKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwKK3N0YXRpYyBib29sIFNs cnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoaW50IHNscnVfaWQsCisJCQkJCQkJCQkgIFNscnVQYWdl UHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkJCQkgIGNoYXIgKmZpbGVuYW1l LAogCQkJCQkJCQkJICBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSk7Ci1zdGF0aWMgdm9pZCBTbHJ1 SW50ZXJuYWxEZWxldGVTZWdtZW50KFNscnVDdGwgY3RsLCBpbnQgc2Vnbm8pOwotCi0vKgotICog SW5pdGlhbGl6YXRpb24gb2Ygc2hhcmVkIG1lbW9yeQotICovCi0KLVNpemUKLVNpbXBsZUxydVNo bWVtU2l6ZShpbnQgbnNsb3RzLCBpbnQgbmxzbnMpCi17Ci0JU2l6ZQkJc3o7Ci0KLQkvKiB3ZSBh c3N1bWUgbnNsb3RzIGlzbid0IHNvIGxhcmdlIGFzIHRvIHJpc2sgb3ZlcmZsb3cgKi8KLQlzeiA9 IE1BWEFMSUdOKHNpemVvZihTbHJ1U2hhcmVkRGF0YSkpOwotCXN6ICs9IE1BWEFMSUdOKG5zbG90 cyAqIHNpemVvZihjaGFyICopKTsJLyogcGFnZV9idWZmZXJbXSAqLwotCXN6ICs9IE1BWEFMSUdO KG5zbG90cyAqIHNpemVvZihTbHJ1UGFnZVN0YXR1cykpOwkvKiBwYWdlX3N0YXR1c1tdICovCi0J c3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGJvb2wpKTsJLyogcGFnZV9kaXJ0eVtdICov Ci0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGludCkpOwkvKiBwYWdlX251bWJlcltd ICovCi0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGludCkpOwkvKiBwYWdlX2xydV9j b3VudFtdICovCi0Jc3ogKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKExXTG9ja1BhZGRlZCkp OwkvKiBidWZmZXJfbG9ja3NbXSAqLwotCi0JaWYgKG5sc25zID4gMCkKLQkJc3ogKz0gTUFYQUxJ R04obnNsb3RzICogbmxzbnMgKiBzaXplb2YoWExvZ1JlY1B0cikpOwkvKiBncm91cF9sc25bXSAq LwotCi0JcmV0dXJuIEJVRkZFUkFMSUdOKHN6KSArIEJMQ0tTWiAqIG5zbG90czsKLX0KLQotLyoK LSAqIEluaXRpYWxpemUsIG9yIGF0dGFjaCB0bywgYSBzaW1wbGUgTFJVIGNhY2hlIGluIHNoYXJl ZCBtZW1vcnkuCi0gKgotICogY3RsOiBhZGRyZXNzIG9mIGxvY2FsICh1bnNoYXJlZCkgY29udHJv bCBzdHJ1Y3R1cmUuCi0gKiBuYW1lOiBuYW1lIG9mIFNMUlUuICAoVGhpcyBpcyB1c2VyLXZpc2li bGUsIHBpY2sgd2l0aCBjYXJlISkKLSAqIG5zbG90czogbnVtYmVyIG9mIHBhZ2Ugc2xvdHMgdG8g dXNlLgotICogbmxzbnM6IG51bWJlciBvZiBMU04gZ3JvdXBzIHBlciBwYWdlIChzZXQgdG8gemVy byBpZiBub3QgcmVsZXZhbnQpLgotICogY3RsbG9jazogTFdMb2NrIHRvIHVzZSB0byBjb250cm9s IGFjY2VzcyB0byB0aGUgc2hhcmVkIGNvbnRyb2wgc3RydWN0dXJlLgotICogc3ViZGlyOiBQR0RB VEEtcmVsYXRpdmUgc3ViZGlyZWN0b3J5IHRoYXQgd2lsbCBjb250YWluIHRoZSBmaWxlcy4KLSAq IHRyYW5jaGVfaWQ6IExXTG9jayB0cmFuY2hlIElEIHRvIHVzZSBmb3IgdGhlIFNMUlUncyBwZXIt YnVmZmVyIExXTG9ja3MuCi0gKiBzeW5jX2hhbmRsZXI6IHdoaWNoIHNldCBvZiBmdW5jdGlvbnMg dG8gdXNlIHRvIGhhbmRsZSBzeW5jIHJlcXVlc3RzCi0gKi8KLXZvaWQKLVNpbXBsZUxydUluaXQo U2xydUN0bCBjdGwsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuc2xvdHMsIGludCBubHNucywKLQkJ CSAgTFdMb2NrICpjdGxsb2NrLCBjb25zdCBjaGFyICpzdWJkaXIsIGludCB0cmFuY2hlX2lkLAot CQkJICBTeW5jUmVxdWVzdEhhbmRsZXIgc3luY19oYW5kbGVyKQotewotCVNscnVTaGFyZWQJc2hh cmVkOwotCWJvb2wJCWZvdW5kOwotCi0Jc2hhcmVkID0gKFNscnVTaGFyZWQpIFNobWVtSW5pdFN0 cnVjdChuYW1lLAotCQkJCQkJCQkJCSAgU2ltcGxlTHJ1U2htZW1TaXplKG5zbG90cywgbmxzbnMp LAotCQkJCQkJCQkJCSAgJmZvdW5kKTsKLQotCWlmICghSXNVbmRlclBvc3RtYXN0ZXIpCi0Jewot CQkvKiBJbml0aWFsaXplIGxvY2tzIGFuZCBzaGFyZWQgbWVtb3J5IGFyZWEgKi8KLQkJY2hhcgkg ICAqcHRyOwotCQlTaXplCQlvZmZzZXQ7Ci0JCWludAkJCXNsb3RubzsKLQotCQlBc3NlcnQoIWZv dW5kKTsKLQotCQltZW1zZXQoc2hhcmVkLCAwLCBzaXplb2YoU2xydVNoYXJlZERhdGEpKTsKLQot CQlzaGFyZWQtPkNvbnRyb2xMb2NrID0gY3RsbG9jazsKLQotCQlzaGFyZWQtPm51bV9zbG90cyA9 IG5zbG90czsKLQkJc2hhcmVkLT5sc25fZ3JvdXBzX3Blcl9wYWdlID0gbmxzbnM7Ci0KLQkJc2hh cmVkLT5jdXJfbHJ1X2NvdW50ID0gMDsKLQotCQkvKiBzaGFyZWQtPmxhdGVzdF9wYWdlX251bWJl ciB3aWxsIGJlIHNldCBsYXRlciAqLwotCi0JCXNoYXJlZC0+c2xydV9zdGF0c19pZHggPSBwZ3N0 YXRfZ2V0X3NscnVfaW5kZXgobmFtZSk7Ci0KLQkJcHRyID0gKGNoYXIgKikgc2hhcmVkOwotCQlv ZmZzZXQgPSBNQVhBTElHTihzaXplb2YoU2xydVNoYXJlZERhdGEpKTsKLQkJc2hhcmVkLT5wYWdl X2J1ZmZlciA9IChjaGFyICoqKSAocHRyICsgb2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdO KG5zbG90cyAqIHNpemVvZihjaGFyICopKTsKLQkJc2hhcmVkLT5wYWdlX3N0YXR1cyA9IChTbHJ1 UGFnZVN0YXR1cyAqKSAocHRyICsgb2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90 cyAqIHNpemVvZihTbHJ1UGFnZVN0YXR1cykpOwotCQlzaGFyZWQtPnBhZ2VfZGlydHkgPSAoYm9v bCAqKSAocHRyICsgb2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1BWEFMSUdOKG5zbG90cyAqIHNpemVv Zihib29sKSk7Ci0JCXNoYXJlZC0+cGFnZV9udW1iZXIgPSAoaW50ICopIChwdHIgKyBvZmZzZXQp OwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKGludCkpOwotCQlzaGFyZWQt PnBhZ2VfbHJ1X2NvdW50ID0gKGludCAqKSAocHRyICsgb2Zmc2V0KTsKLQkJb2Zmc2V0ICs9IE1B WEFMSUdOKG5zbG90cyAqIHNpemVvZihpbnQpKTsKLQotCQkvKiBJbml0aWFsaXplIExXTG9ja3Mg Ki8KLQkJc2hhcmVkLT5idWZmZXJfbG9ja3MgPSAoTFdMb2NrUGFkZGVkICopIChwdHIgKyBvZmZz ZXQpOwotCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICogc2l6ZW9mKExXTG9ja1BhZGRlZCkp OwotCi0JCWlmIChubHNucyA+IDApCi0JCXsKLQkJCXNoYXJlZC0+Z3JvdXBfbHNuID0gKFhMb2dS ZWNQdHIgKikgKHB0ciArIG9mZnNldCk7Ci0JCQlvZmZzZXQgKz0gTUFYQUxJR04obnNsb3RzICog bmxzbnMgKiBzaXplb2YoWExvZ1JlY1B0cikpOwotCQl9Ci0KLQkJcHRyICs9IEJVRkZFUkFMSUdO KG9mZnNldCk7Ci0JCWZvciAoc2xvdG5vID0gMDsgc2xvdG5vIDwgbnNsb3RzOyBzbG90bm8rKykK LQkJewotCQkJTFdMb2NrSW5pdGlhbGl6ZSgmc2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5s b2NrLAotCQkJCQkJCSB0cmFuY2hlX2lkKTsKLQotCQkJc2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90 bm9dID0gcHRyOwotCQkJc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX0VN UFRZOwotCQkJc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSBmYWxzZTsKLQkJCXNoYXJlZC0+ cGFnZV9scnVfY291bnRbc2xvdG5vXSA9IDA7Ci0JCQlwdHIgKz0gQkxDS1NaOwotCQl9Ci0KLQkJ LyogU2hvdWxkIGZpdCB0byBlc3RpbWF0ZWQgc2htZW0gc2l6ZSAqLwotCQlBc3NlcnQocHRyIC0g KGNoYXIgKikgc2hhcmVkIDw9IFNpbXBsZUxydVNobWVtU2l6ZShuc2xvdHMsIG5sc25zKSk7Ci0J fQotCWVsc2UKLQkJQXNzZXJ0KGZvdW5kKTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgdW5z aGFyZWQgY29udHJvbCBzdHJ1Y3QsIGluY2x1ZGluZyBkaXJlY3RvcnkgcGF0aC4gV2UKLQkgKiBh c3N1bWUgY2FsbGVyIHNldCBQYWdlUHJlY2VkZXMuCi0JICovCi0JY3RsLT5zaGFyZWQgPSBzaGFy ZWQ7Ci0JY3RsLT5zeW5jX2hhbmRsZXIgPSBzeW5jX2hhbmRsZXI7Ci0Jc3RybGNweShjdGwtPkRp ciwgc3ViZGlyLCBzaXplb2YoY3RsLT5EaXIpKTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgKG9y IHJlaW5pdGlhbGl6ZSkgYSBwYWdlIHRvIHplcm9lcy4KLSAqCi0gKiBUaGUgcGFnZSBpcyBub3Qg YWN0dWFsbHkgd3JpdHRlbiwganVzdCBzZXQgdXAgaW4gc2hhcmVkIG1lbW9yeS4KLSAqIFRoZSBz bG90IG51bWJlciBvZiB0aGUgbmV3IHBhZ2UgaXMgcmV0dXJuZWQuCi0gKgotICogQ29udHJvbCBs b2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0LgotICov Ci1pbnQKLVNpbXBsZUxydVplcm9QYWdlKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vKQotewotCVNs cnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0JaW50CQkJc2xvdG5vOwotCi0JLyogRmlu ZCBhIHN1aXRhYmxlIGJ1ZmZlciBzbG90IGZvciB0aGUgcGFnZSAqLwotCXNsb3RubyA9IFNscnVT ZWxlY3RMUlVQYWdlKGN0bCwgcGFnZW5vKTsKLQlBc3NlcnQoc2hhcmVkLT5wYWdlX3N0YXR1c1tz bG90bm9dID09IFNMUlVfUEFHRV9FTVBUWSB8fAotCQkgICAoc2hhcmVkLT5wYWdlX3N0YXR1c1tz bG90bm9dID09IFNMUlVfUEFHRV9WQUxJRCAmJgotCQkJIXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90 bm9dKSB8fAotCQkgICBzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gcGFnZW5vKTsKLQot CS8qIE1hcmsgdGhlIHNsb3QgYXMgY29udGFpbmluZyB0aGlzIHBhZ2UgKi8KLQlzaGFyZWQtPnBh Z2VfbnVtYmVyW3Nsb3Rub10gPSBwYWdlbm87Ci0Jc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9d ID0gU0xSVV9QQUdFX1ZBTElEOwotCXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsK LQlTbHJ1UmVjZW50bHlVc2VkKHNoYXJlZCwgc2xvdG5vKTsKLQotCS8qIFNldCB0aGUgYnVmZmVy IHRvIHplcm9lcyAqLwotCU1lbVNldChzaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10sIDAsIEJM Q0tTWik7Ci0KLQkvKiBTZXQgdGhlIExTTnMgZm9yIHRoaXMgbmV3IHBhZ2UgdG8gemVybyAqLwot CVNpbXBsZUxydVplcm9MU05zKGN0bCwgc2xvdG5vKTsKLQotCS8qIEFzc3VtZSB0aGlzIHBhZ2Ug aXMgbm93IHRoZSBsYXRlc3QgYWN0aXZlIHBhZ2UgKi8KLQlzaGFyZWQtPmxhdGVzdF9wYWdlX251 bWJlciA9IHBhZ2VubzsKLQotCS8qIHVwZGF0ZSB0aGUgc3RhdHMgY291bnRlciBvZiB6ZXJvZWQg cGFnZXMgKi8KLQlwZ3N0YXRfY291bnRfc2xydV9wYWdlX3plcm9lZChzaGFyZWQtPnNscnVfc3Rh dHNfaWR4KTsKLQotCXJldHVybiBzbG90bm87Ci19Ci0KLS8qCi0gKiBaZXJvIGFsbCB0aGUgTFNO cyB3ZSBzdG9yZSBmb3IgdGhpcyBzbHJ1IHBhZ2UuCi0gKgotICogVGhpcyBzaG91bGQgYmUgY2Fs bGVkIGVhY2ggdGltZSB3ZSBjcmVhdGUgYSBuZXcgcGFnZSwgYW5kIGVhY2ggdGltZSB3ZSByZWFk Ci0gKiBpbiBhIHBhZ2UgZnJvbSBkaXNrIGludG8gYW4gZXhpc3RpbmcgYnVmZmVyLiAgKFN1Y2gg YW4gb2xkIHBhZ2UgY2Fubm90Ci0gKiBoYXZlIGFueSBpbnRlcmVzdGluZyBMU05zLCBzaW5jZSB3 ZSdkIGhhdmUgZmx1c2hlZCB0aGVtIGJlZm9yZSB3cml0aW5nCi0gKiB0aGUgcGFnZSBpbiB0aGUg Zmlyc3QgcGxhY2UuKQotICoKLSAqIFRoaXMgYXNzdW1lcyB0aGF0IEludmFsaWRYTG9nUmVjUHRy IGlzIGJpdHdpc2UtYWxsLTAuCi0gKi8KLXN0YXRpYyB2b2lkCi1TaW1wbGVMcnVaZXJvTFNOcyhT bHJ1Q3RsIGN0bCwgaW50IHNsb3RubykKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hh cmVkOwotCi0JaWYgKHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZSA+IDApCi0JCU1lbVNldCgm c2hhcmVkLT5ncm91cF9sc25bc2xvdG5vICogc2hhcmVkLT5sc25fZ3JvdXBzX3Blcl9wYWdlXSwg MCwKLQkJCSAgIHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZSAqIHNpemVvZihYTG9nUmVjUHRy KSk7Ci19Ci0KLS8qCi0gKiBXYWl0IGZvciBhbnkgYWN0aXZlIEkvTyBvbiBhIHBhZ2Ugc2xvdCB0 byBmaW5pc2guICAoVGhpcyBkb2VzIG5vdAotICogZ3VhcmFudGVlIHRoYXQgbmV3IEkvTyBoYXNu J3QgYmVlbiBzdGFydGVkIGJlZm9yZSB3ZSByZXR1cm4sIHRob3VnaC4KLSAqIEluIGZhY3QgdGhl IHNsb3QgbWlnaHQgbm90IGV2ZW4gY29udGFpbiB0aGUgc2FtZSBwYWdlIGFueW1vcmUuKQotICoK LSAqIENvbnRyb2wgbG9jayBtdXN0IGJlIGhlbGQgYXQgZW50cnksIGFuZCB3aWxsIGJlIGhlbGQg YXQgZXhpdC4KLSAqLwotc3RhdGljIHZvaWQKLVNpbXBsZUxydVdhaXRJTyhTbHJ1Q3RsIGN0bCwg aW50IHNsb3RubykKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCi0JLyog U2VlIG5vdGVzIGF0IHRvcCBvZiBmaWxlICovCi0JTFdMb2NrUmVsZWFzZShzaGFyZWQtPkNvbnRy b2xMb2NrKTsKLQlMV0xvY2tBY3F1aXJlKCZzaGFyZWQtPmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxv Y2ssIExXX1NIQVJFRCk7Ci0JTFdMb2NrUmVsZWFzZSgmc2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xv dG5vXS5sb2NrKTsKLQlMV0xvY2tBY3F1aXJlKHNoYXJlZC0+Q29udHJvbExvY2ssIExXX0VYQ0xV U0lWRSk7Ci0KLQkvKgotCSAqIElmIHRoZSBzbG90IGlzIHN0aWxsIGluIGFuIGlvLWluLXByb2dy ZXNzIHN0YXRlLCB0aGVuIGVpdGhlciBzb21lb25lCi0JICogYWxyZWFkeSBzdGFydGVkIGEgbmV3 IEkvTyBvbiB0aGUgc2xvdCwgb3IgYSBwcmV2aW91cyBJL08gZmFpbGVkIGFuZAotCSAqIG5lZ2xl Y3RlZCB0byByZXNldCB0aGUgcGFnZSBzdGF0ZS4gIFRoYXQgc2hvdWxkbid0IGhhcHBlbiwgcmVh bGx5LCBidXQKLQkgKiBpdCBzZWVtcyB3b3J0aCBhIGZldyBleHRyYSBjeWNsZXMgdG8gY2hlY2sg YW5kIHJlY292ZXIgZnJvbSBpdC4gV2UgY2FuCi0JICogY2hlYXBseSB0ZXN0IGZvciBmYWlsdXJl IGJ5IHNlZWluZyBpZiB0aGUgYnVmZmVyIGxvY2sgaXMgc3RpbGwgaGVsZCAod2UKLQkgKiBhc3N1 bWUgdGhhdCB0cmFuc2FjdGlvbiBhYm9ydCB3b3VsZCByZWxlYXNlIHRoZSBsb2NrKS4KLQkgKi8K LQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9SRUFEX0lOX1BS T0dSRVNTIHx8Ci0JCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfV1JJ VEVfSU5fUFJPR1JFU1MpCi0JewotCQlpZiAoTFdMb2NrQ29uZGl0aW9uYWxBY3F1aXJlKCZzaGFy ZWQtPmJ1ZmZlcl9sb2Nrc1tzbG90bm9dLmxvY2ssIExXX1NIQVJFRCkpCi0JCXsKLQkJCS8qIGlu ZGVlZCwgdGhlIEkvTyBtdXN0IGhhdmUgZmFpbGVkICovCi0JCQlpZiAoc2hhcmVkLT5wYWdlX3N0 YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9SRUFEX0lOX1BST0dSRVNTKQotCQkJCXNoYXJlZC0+ cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9FTVBUWTsKLQkJCWVsc2UJCQkJLyogd3Jp dGVfaW5fcHJvZ3Jlc3MgKi8KLQkJCXsKLQkJCQlzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10g PSBTTFJVX1BBR0VfVkFMSUQ7Ci0JCQkJc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVl OwotCQkJfQotCQkJTFdMb2NrUmVsZWFzZSgmc2hhcmVkLT5idWZmZXJfbG9ja3Nbc2xvdG5vXS5s b2NrKTsKLQkJfQotCX0KLX0KLQotLyoKLSAqIEZpbmQgYSBwYWdlIGluIGEgc2hhcmVkIGJ1ZmZl ciwgcmVhZGluZyBpdCBpbiBpZiBuZWNlc3NhcnkuCi0gKiBUaGUgcGFnZSBudW1iZXIgbXVzdCBj b3JyZXNwb25kIHRvIGFuIGFscmVhZHktaW5pdGlhbGl6ZWQgcGFnZS4KLSAqCi0gKiBJZiB3cml0 ZV9vayBpcyB0cnVlIHRoZW4gaXQgaXMgT0sgdG8gcmV0dXJuIGEgcGFnZSB0aGF0IGlzIGluCi0g KiBXUklURV9JTl9QUk9HUkVTUyBzdGF0ZTsgaXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmls aXR5IHRvIGJlIHN1cmUKLSAqIHRoYXQgbW9kaWZpY2F0aW9uIG9mIHRoZSBwYWdlIGlzIHNhZmUu ICBJZiB3cml0ZV9vayBpcyBmYWxzZSB0aGVuIHdlCi0gKiB3aWxsIG5vdCByZXR1cm4gdGhlIHBh Z2UgdW50aWwgaXQgaXMgbm90IHVuZGVyZ29pbmcgYWN0aXZlIEkvTy4KLSAqCi0gKiBUaGUgcGFz c2VkLWluIHhpZCBpcyB1c2VkIG9ubHkgZm9yIGVycm9yIHJlcG9ydGluZywgYW5kIG1heSBiZQot ICogSW52YWxpZFRyYW5zYWN0aW9uSWQgaWYgbm8gc3BlY2lmaWMgeGlkIGlzIGFzc29jaWF0ZWQg d2l0aCB0aGUgYWN0aW9uLgotICoKLSAqIFJldHVybiB2YWx1ZSBpcyB0aGUgc2hhcmVkLWJ1ZmZl ciBzbG90IG51bWJlciBub3cgaG9sZGluZyB0aGUgcGFnZS4KLSAqIFRoZSBidWZmZXIncyBMUlUg YWNjZXNzIGluZm8gaXMgdXBkYXRlZC4KLSAqCi0gKiBDb250cm9sIGxvY2sgbXVzdCBiZSBoZWxk IGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCi0gKi8KLWludAotU2ltcGxlTHJ1 UmVhZFBhZ2UoU2xydUN0bCBjdGwsIGludCBwYWdlbm8sIGJvb2wgd3JpdGVfb2ssCi0JCQkJICBU cmFuc2FjdGlvbklkIHhpZCkKLXsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwot Ci0JLyogT3V0ZXIgbG9vcCBoYW5kbGVzIHJlc3RhcnQgaWYgd2UgbXVzdCB3YWl0IGZvciBzb21l b25lIGVsc2UncyBJL08gKi8KLQlmb3IgKDs7KQotCXsKLQkJaW50CQkJc2xvdG5vOwotCQlib29s CQlvazsKLQotCQkvKiBTZWUgaWYgcGFnZSBhbHJlYWR5IGlzIGluIG1lbW9yeTsgaWYgbm90LCBw aWNrIHZpY3RpbSBzbG90ICovCi0JCXNsb3RubyA9IFNscnVTZWxlY3RMUlVQYWdlKGN0bCwgcGFn ZW5vKTsKLQotCQkvKiBEaWQgd2UgZmluZCB0aGUgcGFnZSBpbiBtZW1vcnk/ICovCi0JCWlmIChz aGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub10gPT0gcGFnZW5vICYmCi0JCQlzaGFyZWQtPnBhZ2Vf c3RhdHVzW3Nsb3Rub10gIT0gU0xSVV9QQUdFX0VNUFRZKQotCQl7Ci0JCQkvKgotCQkJICogSWYg cGFnZSBpcyBzdGlsbCBiZWluZyByZWFkIGluLCB3ZSBtdXN0IHdhaXQgZm9yIEkvTy4gIExpa2V3 aXNlCi0JCQkgKiBpZiB0aGUgcGFnZSBpcyBiZWluZyB3cml0dGVuIGFuZCB0aGUgY2FsbGVyIHNh aWQgdGhhdCdzIG5vdCBPSy4KLQkJCSAqLwotCQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xv dG5vXSA9PSBTTFJVX1BBR0VfUkVBRF9JTl9QUk9HUkVTUyB8fAotCQkJCShzaGFyZWQtPnBhZ2Vf c3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1dSSVRFX0lOX1BST0dSRVNTICYmCi0JCQkJICF3 cml0ZV9vaykpCi0JCQl7Ci0JCQkJU2ltcGxlTHJ1V2FpdElPKGN0bCwgc2xvdG5vKTsKLQkJCQkv KiBOb3cgd2UgbXVzdCByZWNoZWNrIHN0YXRlIGZyb20gdGhlIHRvcCAqLwotCQkJCWNvbnRpbnVl OwotCQkJfQotCQkJLyogT3RoZXJ3aXNlLCBpdCdzIHJlYWR5IHRvIHVzZSAqLwotCQkJU2xydVJl Y2VudGx5VXNlZChzaGFyZWQsIHNsb3Rubyk7Ci0KLQkJCS8qIHVwZGF0ZSB0aGUgc3RhdHMgY291 bnRlciBvZiBwYWdlcyBmb3VuZCBpbiB0aGUgU0xSVSAqLwotCQkJcGdzdGF0X2NvdW50X3NscnVf cGFnZV9oaXQoc2hhcmVkLT5zbHJ1X3N0YXRzX2lkeCk7Ci0KLQkJCXJldHVybiBzbG90bm87Ci0J CX0KLQotCQkvKiBXZSBmb3VuZCBubyBtYXRjaDsgYXNzZXJ0IHdlIHNlbGVjdGVkIGEgZnJlZWFi bGUgc2xvdCAqLwotCQlBc3NlcnQoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVf UEFHRV9FTVBUWSB8fAotCQkJICAgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJV X1BBR0VfVkFMSUQgJiYKLQkJCQkhc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pKTsKLQotCQkv KiBNYXJrIHRoZSBzbG90IHJlYWQtYnVzeSAqLwotCQlzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Ru b10gPSBwYWdlbm87Ci0JCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9S RUFEX0lOX1BST0dSRVNTOwotCQlzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IGZhbHNlOwot Ci0JCS8qIEFjcXVpcmUgcGVyLWJ1ZmZlciBsb2NrIChjYW5ub3QgZGVhZGxvY2ssIHNlZSBub3Rl cyBhdCB0b3ApICovCi0JCUxXTG9ja0FjcXVpcmUoJnNoYXJlZC0+YnVmZmVyX2xvY2tzW3Nsb3Ru b10ubG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCQkvKiBSZWxlYXNlIGNvbnRyb2wgbG9jayB3aGls ZSBkb2luZyBJL08gKi8KLQkJTFdMb2NrUmVsZWFzZShzaGFyZWQtPkNvbnRyb2xMb2NrKTsKLQot CQkvKiBEbyB0aGUgcmVhZCAqLwotCQlvayA9IFNscnVQaHlzaWNhbFJlYWRQYWdlKGN0bCwgcGFn ZW5vLCBzbG90bm8pOwotCi0JCS8qIFNldCB0aGUgTFNOcyBmb3IgdGhpcyBuZXdseSByZWFkLWlu IHBhZ2UgdG8gemVybyAqLwotCQlTaW1wbGVMcnVaZXJvTFNOcyhjdGwsIHNsb3Rubyk7Ci0KLQkJ LyogUmUtYWNxdWlyZSBjb250cm9sIGxvY2sgYW5kIHVwZGF0ZSBwYWdlIHN0YXRlICovCi0JCUxX TG9ja0FjcXVpcmUoc2hhcmVkLT5Db250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCQlBc3Nl cnQoc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dID09IHBhZ2VubyAmJgotCQkJICAgc2hhcmVk LT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9SRUFEX0lOX1BST0dSRVNTICYmCi0J CQkgICAhc2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10pOwotCi0JCXNoYXJlZC0+cGFnZV9zdGF0 dXNbc2xvdG5vXSA9IG9rID8gU0xSVV9QQUdFX1ZBTElEIDogU0xSVV9QQUdFX0VNUFRZOwotCi0J CUxXTG9ja1JlbGVhc2UoJnNoYXJlZC0+YnVmZmVyX2xvY2tzW3Nsb3Rub10ubG9jayk7Ci0KLQkJ LyogTm93IGl0J3Mgb2theSB0byBlcmVwb3J0IGlmIHdlIGZhaWxlZCAqLwotCQlpZiAoIW9rKQot CQkJU2xydVJlcG9ydElPRXJyb3IoY3RsLCBwYWdlbm8sIHhpZCk7Ci0KLQkJU2xydVJlY2VudGx5 VXNlZChzaGFyZWQsIHNsb3Rubyk7Ci0KLQkJLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9m IHBhZ2VzIG5vdCBmb3VuZCBpbiBTTFJVICovCi0JCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfcmVh ZChzaGFyZWQtPnNscnVfc3RhdHNfaWR4KTsKLQotCQlyZXR1cm4gc2xvdG5vOwotCX0KLX0KLQot LyoKLSAqIEZpbmQgYSBwYWdlIGluIGEgc2hhcmVkIGJ1ZmZlciwgcmVhZGluZyBpdCBpbiBpZiBu ZWNlc3NhcnkuCi0gKiBUaGUgcGFnZSBudW1iZXIgbXVzdCBjb3JyZXNwb25kIHRvIGFuIGFscmVh ZHktaW5pdGlhbGl6ZWQgcGFnZS4KLSAqIFRoZSBjYWxsZXIgbXVzdCBpbnRlbmQgb25seSByZWFk LW9ubHkgYWNjZXNzIHRvIHRoZSBwYWdlLgotICoKLSAqIFRoZSBwYXNzZWQtaW4geGlkIGlzIHVz ZWQgb25seSBmb3IgZXJyb3IgcmVwb3J0aW5nLCBhbmQgbWF5IGJlCi0gKiBJbnZhbGlkVHJhbnNh Y3Rpb25JZCBpZiBubyBzcGVjaWZpYyB4aWQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBhY3Rpb24u Ci0gKgotICogUmV0dXJuIHZhbHVlIGlzIHRoZSBzaGFyZWQtYnVmZmVyIHNsb3QgbnVtYmVyIG5v dyBob2xkaW5nIHRoZSBwYWdlLgotICogVGhlIGJ1ZmZlcidzIExSVSBhY2Nlc3MgaW5mbyBpcyB1 cGRhdGVkLgotICoKLSAqIENvbnRyb2wgbG9jayBtdXN0IE5PVCBiZSBoZWxkIGF0IGVudHJ5LCBi dXQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCi0gKiBJdCBpcyB1bnNwZWNpZmllZCB3aGV0aGVyIHRo ZSBsb2NrIHdpbGwgYmUgc2hhcmVkIG9yIGV4Y2x1c2l2ZS4KLSAqLwotaW50Ci1TaW1wbGVMcnVS ZWFkUGFnZV9SZWFkT25seShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywgVHJhbnNhY3Rpb25JZCB4 aWQpCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKLQlpbnQJCQlzbG90bm87 Ci0KLQkvKiBUcnkgdG8gZmluZCB0aGUgcGFnZSB3aGlsZSBob2xkaW5nIG9ubHkgc2hhcmVkIGxv Y2sgKi8KLQlMV0xvY2tBY3F1aXJlKHNoYXJlZC0+Q29udHJvbExvY2ssIExXX1NIQVJFRCk7Ci0K LQkvKiBTZWUgaWYgcGFnZSBpcyBhbHJlYWR5IGluIGEgYnVmZmVyICovCi0JZm9yIChzbG90bm8g PSAwOyBzbG90bm8gPCBzaGFyZWQtPm51bV9zbG90czsgc2xvdG5vKyspCi0JewotCQlpZiAoc2hh cmVkLT5wYWdlX251bWJlcltzbG90bm9dID09IHBhZ2VubyAmJgotCQkJc2hhcmVkLT5wYWdlX3N0 YXR1c1tzbG90bm9dICE9IFNMUlVfUEFHRV9FTVBUWSAmJgotCQkJc2hhcmVkLT5wYWdlX3N0YXR1 c1tzbG90bm9dICE9IFNMUlVfUEFHRV9SRUFEX0lOX1BST0dSRVNTKQotCQl7Ci0JCQkvKiBTZWUg Y29tbWVudHMgZm9yIFNscnVSZWNlbnRseVVzZWQgbWFjcm8gKi8KLQkJCVNscnVSZWNlbnRseVVz ZWQoc2hhcmVkLCBzbG90bm8pOwotCi0JCQkvKiB1cGRhdGUgdGhlIHN0YXRzIGNvdW50ZXIgb2Yg cGFnZXMgZm91bmQgaW4gdGhlIFNMUlUgKi8KLQkJCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfaGl0 KHNoYXJlZC0+c2xydV9zdGF0c19pZHgpOwotCi0JCQlyZXR1cm4gc2xvdG5vOwotCQl9Ci0JfQot Ci0JLyogTm8gbHVjaywgc28gc3dpdGNoIHRvIG5vcm1hbCBleGNsdXNpdmUgbG9jayBhbmQgZG8g cmVndWxhciByZWFkICovCi0JTFdMb2NrUmVsZWFzZShzaGFyZWQtPkNvbnRyb2xMb2NrKTsKLQlM V0xvY2tBY3F1aXJlKHNoYXJlZC0+Q29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQlyZXR1 cm4gU2ltcGxlTHJ1UmVhZFBhZ2UoY3RsLCBwYWdlbm8sIHRydWUsIHhpZCk7Ci19Ci0KLS8qCi0g KiBXcml0ZSBhIHBhZ2UgZnJvbSBhIHNoYXJlZCBidWZmZXIsIGlmIG5lY2Vzc2FyeS4KLSAqIERv ZXMgbm90aGluZyBpZiB0aGUgc3BlY2lmaWVkIHNsb3QgaXMgbm90IGRpcnR5LgotICoKLSAqIE5P VEU6IG9ubHkgb25lIHdyaXRlIGF0dGVtcHQgaXMgbWFkZSBoZXJlLiAgSGVuY2UsIGl0IGlzIHBv c3NpYmxlIHRoYXQKLSAqIHRoZSBwYWdlIGlzIHN0aWxsIGRpcnR5IGF0IGV4aXQgKGlmIHNvbWVv bmUgZWxzZSByZS1kaXJ0aWVkIGl0IGR1cmluZwotICogdGhlIHdyaXRlKS4gIEhvd2V2ZXIsIHdl ICpkbyogYXR0ZW1wdCBhIGZyZXNoIHdyaXRlIGV2ZW4gaWYgdGhlIHBhZ2UKLSAqIGlzIGFscmVh ZHkgYmVpbmcgd3JpdHRlbjsgdGhpcyBpcyBmb3IgY2hlY2twb2ludHMuCi0gKgotICogQ29udHJv bCBsb2NrIG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0Lgot ICovCi1zdGF0aWMgdm9pZAotU2xydUludGVybmFsV3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQg c2xvdG5vLCBTbHJ1V3JpdGVBbGwgZmRhdGEpCi17Ci0JU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwt PnNoYXJlZDsKLQlpbnQJCQlwYWdlbm8gPSBzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Rub107Ci0J Ym9vbAkJb2s7Ci0KLQkvKiBJZiBhIHdyaXRlIGlzIGluIHByb2dyZXNzLCB3YWl0IGZvciBpdCB0 byBmaW5pc2ggKi8KLQl3aGlsZSAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVf UEFHRV9XUklURV9JTl9QUk9HUkVTUyAmJgotCQkgICBzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Ru b10gPT0gcGFnZW5vKQotCXsKLQkJU2ltcGxlTHJ1V2FpdElPKGN0bCwgc2xvdG5vKTsKLQl9Ci0K LQkvKgotCSAqIERvIG5vdGhpbmcgaWYgcGFnZSBpcyBub3QgZGlydHksIG9yIGlmIGJ1ZmZlciBu byBsb25nZXIgY29udGFpbnMgdGhlCi0JICogc2FtZSBwYWdlIHdlIHdlcmUgY2FsbGVkIGZvci4K LQkgKi8KLQlpZiAoIXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dIHx8Ci0JCXNoYXJlZC0+cGFn ZV9zdGF0dXNbc2xvdG5vXSAhPSBTTFJVX1BBR0VfVkFMSUQgfHwKLQkJc2hhcmVkLT5wYWdlX251 bWJlcltzbG90bm9dICE9IHBhZ2VubykKLQkJcmV0dXJuOwotCi0JLyoKLQkgKiBNYXJrIHRoZSBz bG90IHdyaXRlLWJ1c3ksIGFuZCBjbGVhciB0aGUgZGlydHliaXQuICBBZnRlciB0aGlzIHBvaW50 LCBhCi0JICogdHJhbnNhY3Rpb24gc3RhdHVzIHVwZGF0ZSBvbiB0aGlzIHBhZ2Ugd2lsbCBtYXJr IGl0IGRpcnR5IGFnYWluLgotCSAqLwotCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNM UlVfUEFHRV9XUklURV9JTl9QUk9HUkVTUzsKLQlzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9 IGZhbHNlOwotCi0JLyogQWNxdWlyZSBwZXItYnVmZmVyIGxvY2sgKGNhbm5vdCBkZWFkbG9jaywg c2VlIG5vdGVzIGF0IHRvcCkgKi8KLQlMV0xvY2tBY3F1aXJlKCZzaGFyZWQtPmJ1ZmZlcl9sb2Nr c1tzbG90bm9dLmxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQkvKiBSZWxlYXNlIGNvbnRyb2wgbG9j ayB3aGlsZSBkb2luZyBJL08gKi8KLQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2sp OwotCi0JLyogRG8gdGhlIHdyaXRlICovCi0Jb2sgPSBTbHJ1UGh5c2ljYWxXcml0ZVBhZ2UoY3Rs LCBwYWdlbm8sIHNsb3RubywgZmRhdGEpOwotCi0JLyogSWYgd2UgZmFpbGVkLCBhbmQgd2UncmUg aW4gYSBmbHVzaCwgYmV0dGVyIGNsb3NlIHRoZSBmaWxlcyAqLwotCWlmICghb2sgJiYgZmRhdGEp Ci0JewotCQlpbnQJCQlpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBmZGF0YS0+bnVtX2ZpbGVzOyBp KyspCi0JCQlDbG9zZVRyYW5zaWVudEZpbGUoZmRhdGEtPmZkW2ldKTsKLQl9Ci0KLQkvKiBSZS1h Y3F1aXJlIGNvbnRyb2wgbG9jayBhbmQgdXBkYXRlIHBhZ2Ugc3RhdGUgKi8KLQlMV0xvY2tBY3F1 aXJlKHNoYXJlZC0+Q29udHJvbExvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQlBc3NlcnQoc2hhcmVk LT5wYWdlX251bWJlcltzbG90bm9dID09IHBhZ2VubyAmJgotCQkgICBzaGFyZWQtPnBhZ2Vfc3Rh dHVzW3Nsb3Rub10gPT0gU0xSVV9QQUdFX1dSSVRFX0lOX1BST0dSRVNTKTsKLQotCS8qIElmIHdl IGZhaWxlZCB0byB3cml0ZSwgbWFyayB0aGUgcGFnZSBkaXJ0eSBhZ2FpbiAqLwotCWlmICghb2sp Ci0JCXNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsKLQotCXNoYXJlZC0+cGFnZV9z dGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9WQUxJRDsKLQotCUxXTG9ja1JlbGVhc2UoJnNoYXJl ZC0+YnVmZmVyX2xvY2tzW3Nsb3Rub10ubG9jayk7Ci0KLQkvKiBOb3cgaXQncyBva2F5IHRvIGVy ZXBvcnQgaWYgd2UgZmFpbGVkICovCi0JaWYgKCFvaykKLQkJU2xydVJlcG9ydElPRXJyb3IoY3Rs LCBwYWdlbm8sIEludmFsaWRUcmFuc2FjdGlvbklkKTsKLQotCS8qIElmIHBhcnQgb2YgYSBjaGVj a3BvaW50LCBjb3VudCB0aGlzIGFzIGEgYnVmZmVyIHdyaXR0ZW4uICovCi0JaWYgKGZkYXRhKQot CQlDaGVja3BvaW50U3RhdHMuY2twdF9idWZzX3dyaXR0ZW4rKzsKLX0KLQotLyoKLSAqIFdyYXBw ZXIgb2YgU2xydUludGVybmFsV3JpdGVQYWdlLCBmb3IgZXh0ZXJuYWwgY2FsbGVycy4KLSAqIGZk YXRhIGlzIGFsd2F5cyBwYXNzZWQgYSBOVUxMIGhlcmUuCi0gKi8KLXZvaWQKLVNpbXBsZUxydVdy aXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHNsb3RubykKLXsKLQlTbHJ1SW50ZXJuYWxXcml0ZVBh Z2UoY3RsLCBzbG90bm8sIE5VTEwpOwotfQorc3RhdGljIHZvaWQgU2xydUludGVybmFsRGVsZXRl U2VnbWVudChpbnQgc2xydV9pZCwgaW50IHNlZ25vKTsKIAogLyoKICAqIFJldHVybiB3aGV0aGVy IHRoZSBnaXZlbiBwYWdlIGV4aXN0cyBvbiBkaXNrLgpAQCAtNjI0LDU5MiArNjQsMjQgQEAgU2lt cGxlTHJ1V3JpdGVQYWdlKFNscnVDdGwgY3RsLCBpbnQgc2xvdG5vKQogICogbGFyZ2UgZW5vdWdo IHRvIGNvbnRhaW4gdGhlIGdpdmVuIHBhZ2UuCiAgKi8KIGJvb2wKLVNpbXBsZUxydURvZXNQaHlz aWNhbFBhZ2VFeGlzdChTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubykKK1NpbXBsZUxydURvZXNQaHlz aWNhbFBhZ2VFeGlzdChpbnQgc2xydV9pZCwgaW50IHBhZ2VubykKIHsKLQlpbnQJCQlzZWdubyA9 IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0JaW50CQkJcnBhZ2VubyA9IHBhZ2Vu byAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Ci0JaW50CQkJb2Zmc2V0ID0gcnBhZ2VubyAqIEJM Q0tTWjsKLQljaGFyCQlwYXRoW01BWFBHUEFUSF07Ci0JaW50CQkJZmQ7Ci0JYm9vbAkJcmVzdWx0 OwotCW9mZl90CQllbmRwb3M7Ci0KLQkvKiB1cGRhdGUgdGhlIHN0YXRzIGNvdW50ZXIgb2YgY2hl Y2tlZCBwYWdlcyAqLwotCXBnc3RhdF9jb3VudF9zbHJ1X3BhZ2VfZXhpc3RzKGN0bC0+c2hhcmVk LT5zbHJ1X3N0YXRzX2lkeCk7Ci0KLQlTbHJ1RmlsZU5hbWUoY3RsLCBwYXRoLCBzZWdubyk7Ci0K LQlmZCA9IE9wZW5UcmFuc2llbnRGaWxlKHBhdGgsIE9fUkRPTkxZIHwgUEdfQklOQVJZKTsKLQlp ZiAoZmQgPCAwKQotCXsKLQkJLyogZXhwZWN0ZWQ6IGZpbGUgZG9lc24ndCBleGlzdCAqLwotCQlp ZiAoZXJybm8gPT0gRU5PRU5UKQotCQkJcmV0dXJuIGZhbHNlOwotCi0JCS8qIHJlcG9ydCBlcnJv ciBub3JtYWxseSAqLwotCQlzbHJ1X2VycmNhdXNlID0gU0xSVV9PUEVOX0ZBSUxFRDsKLQkJc2xy dV9lcnJubyA9IGVycm5vOwotCQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgMCk7Ci0J fQotCi0JaWYgKChlbmRwb3MgPSBsc2VlayhmZCwgMCwgU0VFS19FTkQpKSA8IDApCi0JewotCQlz bHJ1X2VycmNhdXNlID0gU0xSVV9TRUVLX0ZBSUxFRDsKLQkJc2xydV9lcnJubyA9IGVycm5vOwot CQlTbHJ1UmVwb3J0SU9FcnJvcihjdGwsIHBhZ2VubywgMCk7Ci0JfQotCi0JcmVzdWx0ID0gZW5k cG9zID49IChvZmZfdCkgKG9mZnNldCArIEJMQ0tTWik7Ci0KLQlpZiAoQ2xvc2VUcmFuc2llbnRG aWxlKGZkKSAhPSAwKQotCXsKLQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfQ0xPU0VfRkFJTEVEOwot CQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0KLQlyZXR1cm4gcmVz dWx0OwotfQotCi0vKgotICogUGh5c2ljYWwgcmVhZCBvZiBhIChwcmV2aW91c2x5IGV4aXN0aW5n KSBwYWdlIGludG8gYSBidWZmZXIgc2xvdAotICoKLSAqIE9uIGZhaWx1cmUsIHdlIGNhbm5vdCBq dXN0IGVyZXBvcnQoRVJST1IpIHNpbmNlIGNhbGxlciBoYXMgcHV0IHN0YXRlIGluCi0gKiBzaGFy ZWQgbWVtb3J5IHRoYXQgbXVzdCBiZSB1bmRvbmUuICBTbywgd2UgcmV0dXJuIGZhbHNlIGFuZCBz YXZlIGVub3VnaAotICogaW5mbyBpbiBzdGF0aWMgdmFyaWFibGVzIHRvIGxldCBTbHJ1UmVwb3J0 SU9FcnJvciBtYWtlIHRoZSByZXBvcnQuCi0gKgotICogRm9yIG5vdywgYXNzdW1lIGl0J3Mgbm90 IHdvcnRoIGtlZXBpbmcgYSBmaWxlIHBvaW50ZXIgb3BlbiBhY3Jvc3MKLSAqIHJlYWQvd3JpdGUg b3BlcmF0aW9ucy4gIFdlIGNvdWxkIGNhY2hlIG9uZSB2aXJ0dWFsIGZpbGUgcG9pbnRlciAuLi4K LSAqLwotc3RhdGljIGJvb2wKLVNscnVQaHlzaWNhbFJlYWRQYWdlKFNscnVDdGwgY3RsLCBpbnQg cGFnZW5vLCBpbnQgc2xvdG5vKQotewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7 Ci0JaW50CQkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwotCWludAkJ CXJwYWdlbm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwotCW9mZl90CQlvZmZz ZXQgPSBycGFnZW5vICogQkxDS1NaOwotCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKLQlpbnQJCQlm ZDsKLQotCVNscnVGaWxlTmFtZShjdGwsIHBhdGgsIHNlZ25vKTsKLQotCS8qCi0JICogSW4gYSBj cmFzaC1hbmQtcmVzdGFydCBzaXR1YXRpb24sIGl0J3MgcG9zc2libGUgZm9yIHVzIHRvIHJlY2Vp dmUKLQkgKiBjb21tYW5kcyB0byBzZXQgdGhlIGNvbW1pdCBzdGF0dXMgb2YgdHJhbnNhY3Rpb25z IHdob3NlIGJpdHMgYXJlIGluCi0JICogYWxyZWFkeS10cnVuY2F0ZWQgc2VnbWVudHMgb2YgdGhl IGNvbW1pdCBsb2cgKHNlZSBub3RlcyBpbgotCSAqIFNscnVQaHlzaWNhbFdyaXRlUGFnZSkuICBI ZW5jZSwgaWYgd2UgYXJlIEluUmVjb3ZlcnksIGFsbG93IHRoZSBjYXNlCi0JICogd2hlcmUgdGhl IGZpbGUgZG9lc24ndCBleGlzdCwgYW5kIHJldHVybiB6ZXJvZXMgaW5zdGVhZC4KLQkgKi8KLQlm ZCA9IE9wZW5UcmFuc2llbnRGaWxlKHBhdGgsIE9fUkRPTkxZIHwgUEdfQklOQVJZKTsKLQlpZiAo ZmQgPCAwKQotCXsKLQkJaWYgKGVycm5vICE9IEVOT0VOVCB8fCAhSW5SZWNvdmVyeSkKLQkJewot CQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfT1BFTl9GQUlMRUQ7Ci0JCQlzbHJ1X2Vycm5vID0gZXJy bm87Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQllcmVwb3J0KExPRywKLQkJCQkoZXJybXNn KCJmaWxlIFwiJXNcIiBkb2Vzbid0IGV4aXN0LCByZWFkaW5nIGFzIHplcm9lcyIsCi0JCQkJCQlw YXRoKSkpOwotCQlNZW1TZXQoc2hhcmVkLT5wYWdlX2J1ZmZlcltzbG90bm9dLCAwLCBCTENLU1op OwotCQlyZXR1cm4gdHJ1ZTsKLQl9Ci0KLQllcnJubyA9IDA7Ci0JcGdzdGF0X3JlcG9ydF93YWl0 X3N0YXJ0KFdBSVRfRVZFTlRfU0xSVV9SRUFEKTsKLQlpZiAocGdfcHJlYWQoZmQsIHNoYXJlZC0+ cGFnZV9idWZmZXJbc2xvdG5vXSwgQkxDS1NaLCBvZmZzZXQpICE9IEJMQ0tTWikKLQl7Ci0JCXBn c3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKLQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfUkVBRF9GQUlM RUQ7Ci0JCXNscnVfZXJybm8gPSBlcnJubzsKLQkJQ2xvc2VUcmFuc2llbnRGaWxlKGZkKTsKLQkJ cmV0dXJuIGZhbHNlOwotCX0KLQlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5kKCk7Ci0KLQlpZiAoQ2xv c2VUcmFuc2llbnRGaWxlKGZkKSAhPSAwKQotCXsKLQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfQ0xP U0VfRkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCXJldHVybiBmYWxzZTsKLQl9Ci0K LQlyZXR1cm4gdHJ1ZTsKLX0KLQotLyoKLSAqIFBoeXNpY2FsIHdyaXRlIG9mIGEgcGFnZSBmcm9t IGEgYnVmZmVyIHNsb3QKLSAqCi0gKiBPbiBmYWlsdXJlLCB3ZSBjYW5ub3QganVzdCBlcmVwb3J0 KEVSUk9SKSBzaW5jZSBjYWxsZXIgaGFzIHB1dCBzdGF0ZSBpbgotICogc2hhcmVkIG1lbW9yeSB0 aGF0IG11c3QgYmUgdW5kb25lLiAgU28sIHdlIHJldHVybiBmYWxzZSBhbmQgc2F2ZSBlbm91Z2gK LSAqIGluZm8gaW4gc3RhdGljIHZhcmlhYmxlcyB0byBsZXQgU2xydVJlcG9ydElPRXJyb3IgbWFr ZSB0aGUgcmVwb3J0LgotICoKLSAqIEZvciBub3csIGFzc3VtZSBpdCdzIG5vdCB3b3J0aCBrZWVw aW5nIGEgZmlsZSBwb2ludGVyIG9wZW4gYWNyb3NzCi0gKiBpbmRlcGVuZGVudCByZWFkL3dyaXRl IG9wZXJhdGlvbnMuICBXZSBkbyBiYXRjaCBvcGVyYXRpb25zIGR1cmluZwotICogU2ltcGxlTHJ1 V3JpdGVBbGwsIHRob3VnaC4KLSAqCi0gKiBmZGF0YSBpcyBOVUxMIGZvciBhIHN0YW5kYWxvbmUg d3JpdGUsIHBvaW50ZXIgdG8gb3Blbi1maWxlIGluZm8gZHVyaW5nCi0gKiBTaW1wbGVMcnVXcml0 ZUFsbC4KLSAqLwotc3RhdGljIGJvb2wKLVNscnVQaHlzaWNhbFdyaXRlUGFnZShTbHJ1Q3RsIGN0 bCwgaW50IHBhZ2VubywgaW50IHNsb3RubywgU2xydVdyaXRlQWxsIGZkYXRhKQotewotCVNscnVT aGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7CiAJaW50CQkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJV X1BBR0VTX1BFUl9TRUdNRU5UOwogCWludAkJCXJwYWdlbm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VT X1BFUl9TRUdNRU5UOwogCW9mZl90CQlvZmZzZXQgPSBycGFnZW5vICogQkxDS1NaOwotCWNoYXIJ CXBhdGhbTUFYUEdQQVRIXTsKLQlpbnQJCQlmZCA9IC0xOwotCi0JLyogdXBkYXRlIHRoZSBzdGF0 cyBjb3VudGVyIG9mIHdyaXR0ZW4gcGFnZXMgKi8KLQlwZ3N0YXRfY291bnRfc2xydV9wYWdlX3dy aXR0ZW4oc2hhcmVkLT5zbHJ1X3N0YXRzX2lkeCk7Ci0KLQkvKgotCSAqIEhvbm9yIHRoZSB3cml0 ZS1XQUwtYmVmb3JlLWRhdGEgcnVsZSwgaWYgYXBwcm9wcmlhdGUsIHNvIHRoYXQgd2UgZG8gbm90 Ci0JICogd3JpdGUgb3V0IGRhdGEgYmVmb3JlIGFzc29jaWF0ZWQgV0FMIHJlY29yZHMuICBUaGlz IGlzIHRoZSBzYW1lIGFjdGlvbgotCSAqIHBlcmZvcm1lZCBkdXJpbmcgRmx1c2hCdWZmZXIoKSBp biB0aGUgbWFpbiBidWZmZXIgbWFuYWdlci4KLQkgKi8KLQlpZiAoc2hhcmVkLT5ncm91cF9sc24g IT0gTlVMTCkKLQl7Ci0JCS8qCi0JCSAqIFdlIG11c3QgZGV0ZXJtaW5lIHRoZSBsYXJnZXN0IGFz eW5jLWNvbW1pdCBMU04gZm9yIHRoZSBwYWdlLiBUaGlzCi0JCSAqIGlzIGEgYml0IHRlZGlvdXMs IGJ1dCBzaW5jZSB0aGlzIGVudGlyZSBmdW5jdGlvbiBpcyBhIHNsb3cgcGF0aAotCQkgKiBhbnl3 YXksIGl0IHNlZW1zIGJldHRlciB0byBkbyB0aGlzIGhlcmUgdGhhbiB0byBtYWludGFpbiBhIHBl ci1wYWdlCi0JCSAqIExTTiB2YXJpYWJsZSAod2hpY2gnZCBuZWVkIGFuIGV4dHJhIGNvbXBhcmlz b24gaW4gdGhlCi0JCSAqIHRyYW5zYWN0aW9uLWNvbW1pdCBwYXRoKS4KLQkJICovCi0JCVhMb2dS ZWNQdHIJbWF4X2xzbjsKLQkJaW50CQkJbHNuaW5kZXgsCi0JCQkJCWxzbm9mZjsKLQotCQlsc25p bmRleCA9IHNsb3RubyAqIHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZTsKLQkJbWF4X2xzbiA9 IHNoYXJlZC0+Z3JvdXBfbHNuW2xzbmluZGV4KytdOwotCQlmb3IgKGxzbm9mZiA9IDE7IGxzbm9m ZiA8IHNoYXJlZC0+bHNuX2dyb3Vwc19wZXJfcGFnZTsgbHNub2ZmKyspCi0JCXsKLQkJCVhMb2dS ZWNQdHIJdGhpc19sc24gPSBzaGFyZWQtPmdyb3VwX2xzbltsc25pbmRleCsrXTsKLQotCQkJaWYg KG1heF9sc24gPCB0aGlzX2xzbikKLQkJCQltYXhfbHNuID0gdGhpc19sc247Ci0JCX0KLQotCQlp ZiAoIVhMb2dSZWNQdHJJc0ludmFsaWQobWF4X2xzbikpCi0JCXsKLQkJCS8qCi0JCQkgKiBBcyBu b3RlZCBhYm92ZSwgZWxvZyhFUlJPUikgaXMgbm90IGFjY2VwdGFibGUgaGVyZSwgc28gaWYKLQkJ CSAqIFhMb2dGbHVzaCB3ZXJlIHRvIGZhaWwsIHdlIG11c3QgUEFOSUMuICBUaGlzIGlzbid0IG11 Y2ggb2YgYQotCQkJICogcmVzdHJpY3Rpb24gYmVjYXVzZSBYTG9nRmx1c2ggaXMganVzdCBhYm91 dCBhbGwgY3JpdGljYWwKLQkJCSAqIHNlY3Rpb24gYW55d2F5LCBidXQgbGV0J3MgbWFrZSBzdXJl LgotCQkJICovCi0JCQlTVEFSVF9DUklUX1NFQ1RJT04oKTsKLQkJCVhMb2dGbHVzaChtYXhfbHNu KTsKLQkJCUVORF9DUklUX1NFQ1RJT04oKTsKLQkJfQotCX0KLQotCS8qCi0JICogRHVyaW5nIGEg V3JpdGVBbGwsIHdlIG1heSBhbHJlYWR5IGhhdmUgdGhlIGRlc2lyZWQgZmlsZSBvcGVuLgotCSAq LwotCWlmIChmZGF0YSkKLQl7Ci0JCWludAkJCWk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGZkYXRh LT5udW1fZmlsZXM7IGkrKykKLQkJewotCQkJaWYgKGZkYXRhLT5zZWdub1tpXSA9PSBzZWdubykK LQkJCXsKLQkJCQlmZCA9IGZkYXRhLT5mZFtpXTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0K LQotCWlmIChmZCA8IDApCi0JewotCQkvKgotCQkgKiBJZiB0aGUgZmlsZSBkb2Vzbid0IGFscmVh ZHkgZXhpc3QsIHdlIHNob3VsZCBjcmVhdGUgaXQuICBJdCBpcwotCQkgKiBwb3NzaWJsZSBmb3Ig dGhpcyB0byBuZWVkIHRvIGhhcHBlbiB3aGVuIHdyaXRpbmcgYSBwYWdlIHRoYXQncyBub3QKLQkJ ICogZmlyc3QgaW4gaXRzIHNlZ21lbnQ7IHdlIGFzc3VtZSB0aGUgT1MgY2FuIGNvcGUgd2l0aCB0 aGF0LiAoTm90ZToKLQkJICogaXQgbWlnaHQgc2VlbSB0aGF0IGl0J2QgYmUgb2theSB0byBjcmVh dGUgZmlsZXMgb25seSB3aGVuCi0JCSAqIFNpbXBsZUxydVplcm9QYWdlIGlzIGNhbGxlZCBmb3Ig dGhlIGZpcnN0IHBhZ2Ugb2YgYSBzZWdtZW50LgotCQkgKiBIb3dldmVyLCBpZiBhZnRlciBhIGNy YXNoIGFuZCByZXN0YXJ0IHRoZSBSRURPIGxvZ2ljIGVsZWN0cyB0bwotCQkgKiByZXBsYXkgdGhl IGxvZyBmcm9tIGEgY2hlY2twb2ludCBiZWZvcmUgdGhlIGxhdGVzdCBvbmUsIHRoZW4gaXQncwot CQkgKiBwb3NzaWJsZSB0aGF0IHdlIHdpbGwgZ2V0IGNvbW1hbmRzIHRvIHNldCB0cmFuc2FjdGlv biBzdGF0dXMgb2YKLQkJICogdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gdHJ1 bmNhdGVkIGZyb20gdGhlIGNvbW1pdCBsb2cuCi0JCSAqIEVhc2llc3Qgd2F5IHRvIGRlYWwgd2l0 aCB0aGF0IGlzIHRvIGFjY2VwdCByZWZlcmVuY2VzIHRvCi0JCSAqIG5vbmV4aXN0ZW50IGZpbGVz IGhlcmUgYW5kIGluIFNscnVQaHlzaWNhbFJlYWRQYWdlLikKLQkJICoKLQkJICogTm90ZTogaXQg aXMgcG9zc2libGUgZm9yIG1vcmUgdGhhbiBvbmUgYmFja2VuZCB0byBiZSBleGVjdXRpbmcgdGhp cwotCQkgKiBjb2RlIHNpbXVsdGFuZW91c2x5IGZvciBkaWZmZXJlbnQgcGFnZXMgb2YgdGhlIHNh bWUgZmlsZS4gSGVuY2UsCi0JCSAqIGRvbid0IHVzZSBPX0VYQ0wgb3IgT19UUlVOQyBvciBhbnl0 aGluZyBsaWtlIHRoYXQuCi0JCSAqLwotCQlTbHJ1RmlsZU5hbWUoY3RsLCBwYXRoLCBzZWdubyk7 Ci0JCWZkID0gT3BlblRyYW5zaWVudEZpbGUocGF0aCwgT19SRFdSIHwgT19DUkVBVCB8IFBHX0JJ TkFSWSk7Ci0JCWlmIChmZCA8IDApCi0JCXsKLQkJCXNscnVfZXJyY2F1c2UgPSBTTFJVX09QRU5f RkFJTEVEOwotCQkJc2xydV9lcnJubyA9IGVycm5vOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0K LQkJaWYgKGZkYXRhKQotCQl7Ci0JCQlpZiAoZmRhdGEtPm51bV9maWxlcyA8IE1BWF9XUklURUFM TF9CVUZGRVJTKQotCQkJewotCQkJCWZkYXRhLT5mZFtmZGF0YS0+bnVtX2ZpbGVzXSA9IGZkOwot CQkJCWZkYXRhLT5zZWdub1tmZGF0YS0+bnVtX2ZpbGVzXSA9IHNlZ25vOwotCQkJCWZkYXRhLT5u dW1fZmlsZXMrKzsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIEluIHRoZSB1 bmxpa2VseSBldmVudCB0aGF0IHdlIGV4Y2VlZCBNQVhfRkxVU0hfQlVGRkVSUywKLQkJCQkgKiBm YWxsIGJhY2sgdG8gdHJlYXRpbmcgaXQgYXMgYSBzdGFuZGFsb25lIHdyaXRlLgotCQkJCSAqLwot CQkJCWZkYXRhID0gTlVMTDsKLQkJCX0KLQkJfQotCX0KLQotCWVycm5vID0gMDsKLQlwZ3N0YXRf cmVwb3J0X3dhaXRfc3RhcnQoV0FJVF9FVkVOVF9TTFJVX1dSSVRFKTsKLQlpZiAocGdfcHdyaXRl KGZkLCBzaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10sIEJMQ0tTWiwgb2Zmc2V0KSAhPSBCTENL U1opCi0JewotCQlwZ3N0YXRfcmVwb3J0X3dhaXRfZW5kKCk7Ci0JCS8qIGlmIHdyaXRlIGRpZG4n dCBzZXQgZXJybm8sIGFzc3VtZSBwcm9ibGVtIGlzIG5vIGRpc2sgc3BhY2UgKi8KLQkJaWYgKGVy cm5vID09IDApCi0JCQllcnJubyA9IEVOT1NQQzsKLQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfV1JJ VEVfRkFJTEVEOwotCQlzbHJ1X2Vycm5vID0gZXJybm87Ci0JCWlmICghZmRhdGEpCi0JCQlDbG9z ZVRyYW5zaWVudEZpbGUoZmQpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCXBnc3RhdF9yZXBvcnRf d2FpdF9lbmQoKTsKLQotCS8qIFF1ZXVlIHVwIGEgc3luYyByZXF1ZXN0IGZvciB0aGUgY2hlY2tw b2ludGVyLiAqLwotCWlmIChjdGwtPnN5bmNfaGFuZGxlciAhPSBTWU5DX0hBTkRMRVJfTk9ORSkK LQl7Ci0JCUZpbGVUYWcJCXRhZzsKLQotCQlJTklUX1NMUlVGSUxFVEFHKHRhZywgY3RsLT5zeW5j X2hhbmRsZXIsIHNlZ25vKTsKLQkJaWYgKCFSZWdpc3RlclN5bmNSZXF1ZXN0KCZ0YWcsIFNZTkNf UkVRVUVTVCwgZmFsc2UpKQotCQl7Ci0JCQkvKiBObyBzcGFjZSB0byBlbnF1ZXVlIHN5bmMgcmVx dWVzdC4gIERvIGl0IHN5bmNocm9ub3VzbHkuICovCi0JCQlwZ3N0YXRfcmVwb3J0X3dhaXRfc3Rh cnQoV0FJVF9FVkVOVF9TTFJVX1NZTkMpOwotCQkJaWYgKHBnX2ZzeW5jKGZkKSAhPSAwKQotCQkJ ewotCQkJCXBnc3RhdF9yZXBvcnRfd2FpdF9lbmQoKTsKLQkJCQlzbHJ1X2VycmNhdXNlID0gU0xS VV9GU1lOQ19GQUlMRUQ7Ci0JCQkJc2xydV9lcnJubyA9IGVycm5vOwotCQkJCUNsb3NlVHJhbnNp ZW50RmlsZShmZCk7Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJfQotCQkJcGdzdGF0X3JlcG9ydF93 YWl0X2VuZCgpOwotCQl9Ci0JfQotCi0JLyogQ2xvc2UgZmlsZSwgdW5sZXNzIHBhcnQgb2YgZmx1 c2ggcmVxdWVzdC4gKi8KLQlpZiAoIWZkYXRhKQotCXsKLQkJaWYgKENsb3NlVHJhbnNpZW50Rmls ZShmZCkgIT0gMCkKLQkJewotCQkJc2xydV9lcnJjYXVzZSA9IFNMUlVfQ0xPU0VfRkFJTEVEOwot CQkJc2xydV9lcnJubyA9IGVycm5vOwotCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JcmV0 dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBJc3N1ZSB0aGUgZXJyb3IgbWVzc2FnZSBhZnRlciBmYWls dXJlIG9mIFNscnVQaHlzaWNhbFJlYWRQYWdlIG9yCi0gKiBTbHJ1UGh5c2ljYWxXcml0ZVBhZ2Uu ICBDYWxsIHRoaXMgYWZ0ZXIgY2xlYW5pbmcgdXAgc2hhcmVkLW1lbW9yeSBzdGF0ZS4KLSAqLwot c3RhdGljIHZvaWQKLVNscnVSZXBvcnRJT0Vycm9yKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vLCBU cmFuc2FjdGlvbklkIHhpZCkKLXsKLQlpbnQJCQlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNf UEVSX1NFR01FTlQ7Ci0JaW50CQkJcnBhZ2VubyA9IHBhZ2VubyAlIFNMUlVfUEFHRVNfUEVSX1NF R01FTlQ7Ci0JaW50CQkJb2Zmc2V0ID0gcnBhZ2VubyAqIEJMQ0tTWjsKLQljaGFyCQlwYXRoW01B WFBHUEFUSF07Ci0KLQlTbHJ1RmlsZU5hbWUoY3RsLCBwYXRoLCBzZWdubyk7Ci0JZXJybm8gPSBz bHJ1X2Vycm5vOwotCXN3aXRjaCAoc2xydV9lcnJjYXVzZSkKLQl7Ci0JCWNhc2UgU0xSVV9PUEVO X0ZBSUxFRDoKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vz cygpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlv biAldSIsIHhpZCksCi0JCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wi OiAlbS4iLCBwYXRoKSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0xSVV9TRUVLX0ZBSUxFRDoKLQkJ CWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkg ZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCks Ci0JCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCBzZWVrIGluIGZpbGUgXCIlc1wiIHRvIG9mZnNl dCAlZDogJW0uIiwKLQkJCQkJCQkgICBwYXRoLCBvZmZzZXQpKSk7Ci0JCQlicmVhazsKLQkJY2Fz ZSBTTFJVX1JFQURfRkFJTEVEOgotCQkJaWYgKGVycm5vKQotCQkJCWVyZXBvcnQoRVJST1IsCi0J CQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKLQkJCQkJCSBlcnJtc2coImNvdWxkIG5v dCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJCQkJCSBlcnJkZXRh aWwoIkNvdWxkIG5vdCByZWFkIGZyb20gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiAlbS4iLAot CQkJCQkJCQkgICBwYXRoLCBvZmZzZXQpKSk7Ci0JCQllbHNlCi0JCQkJZXJlcG9ydChFUlJPUiwK LQkJCQkJCShlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3RhdHVzIG9mIHRyYW5zYWN0aW9uICV1 IiwgeGlkKSwKLQkJCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5vdCByZWFkIGZyb20gZmlsZSBcIiVz XCIgYXQgb2Zmc2V0ICVkOiByZWFkIHRvbyBmZXcgYnl0ZXMuIiwgcGF0aCwgb2Zmc2V0KSkpOwot CQkJYnJlYWs7Ci0JCWNhc2UgU0xSVV9XUklURV9GQUlMRUQ6Ci0JCQlpZiAoZXJybm8pCi0JCQkJ ZXJlcG9ydChFUlJPUiwKLQkJCQkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkJ IGVycm1zZygiY291bGQgbm90IGFjY2VzcyBzdGF0dXMgb2YgdHJhbnNhY3Rpb24gJXUiLCB4aWQp LAotCQkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90IHdyaXRlIHRvIGZpbGUgXCIlc1wiIGF0IG9m ZnNldCAlZDogJW0uIiwKLQkJCQkJCQkJICAgcGF0aCwgb2Zmc2V0KSkpOwotCQkJZWxzZQotCQkJ CWVyZXBvcnQoRVJST1IsCi0JCQkJCQkoZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0YXR1cyBv ZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCQkgZXJyZGV0YWlsKCJDb3VsZCBub3Qgd3Jp dGUgdG8gZmlsZSBcIiVzXCIgYXQgb2Zmc2V0ICVkOiB3cm90ZSB0b28gZmV3IGJ5dGVzLiIsCi0J CQkJCQkJCSAgIHBhdGgsIG9mZnNldCkpKTsKLQkJCWJyZWFrOwotCQljYXNlIFNMUlVfRlNZTkNf RkFJTEVEOgotCQkJZXJlcG9ydChkYXRhX3N5bmNfZWxldmVsKEVSUk9SKSwKLQkJCQkJKGVycmNv ZGVfZm9yX2ZpbGVfYWNjZXNzKCksCi0JCQkJCSBlcnJtc2coImNvdWxkIG5vdCBhY2Nlc3Mgc3Rh dHVzIG9mIHRyYW5zYWN0aW9uICV1IiwgeGlkKSwKLQkJCQkJIGVycmRldGFpbCgiQ291bGQgbm90 IGZzeW5jIGZpbGUgXCIlc1wiOiAlbS4iLAotCQkJCQkJCSAgIHBhdGgpKSk7Ci0JCQlicmVhazsK LQkJY2FzZSBTTFJVX0NMT1NFX0ZBSUxFRDoKLQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCShlcnJj b2RlX2Zvcl9maWxlX2FjY2VzcygpLAotCQkJCQkgZXJybXNnKCJjb3VsZCBub3QgYWNjZXNzIHN0 YXR1cyBvZiB0cmFuc2FjdGlvbiAldSIsIHhpZCksCi0JCQkJCSBlcnJkZXRhaWwoIkNvdWxkIG5v dCBjbG9zZSBmaWxlIFwiJXNcIjogJW0uIiwKLQkJCQkJCQkgICBwYXRoKSkpOwotCQkJYnJlYWs7 Ci0JCWRlZmF1bHQ6Ci0JCQkvKiBjYW4ndCBnZXQgaGVyZSwgd2UgdHJ1c3QgKi8KLQkJCWVsb2co RVJST1IsICJ1bnJlY29nbml6ZWQgU2ltcGxlTHJ1IGVycm9yIGNhdXNlOiAlZCIsCi0JCQkJIChp bnQpIHNscnVfZXJyY2F1c2UpOwotCQkJYnJlYWs7Ci0JfQotfQotCi0vKgotICogU2VsZWN0IHRo ZSBzbG90IHRvIHJlLXVzZSB3aGVuIHdlIG5lZWQgYSBmcmVlIHNsb3QuCi0gKgotICogVGhlIHRh cmdldCBwYWdlIG51bWJlciBpcyBwYXNzZWQgYmVjYXVzZSB3ZSBuZWVkIHRvIGNvbnNpZGVyIHRo ZQotICogcG9zc2liaWxpdHkgdGhhdCBzb21lIG90aGVyIHByb2Nlc3MgcmVhZHMgaW4gdGhlIHRh cmdldCBwYWdlIHdoaWxlCi0gKiB3ZSBhcmUgZG9pbmcgSS9PIHRvIGZyZWUgYSBzbG90LiAgSGVu Y2UsIGNoZWNrIG9yIHJlY2hlY2sgdG8gc2VlIGlmCi0gKiBhbnkgc2xvdCBhbHJlYWR5IGhvbGRz IHRoZSB0YXJnZXQgcGFnZSwgYW5kIHJldHVybiB0aGF0IHNsb3QgaWYgc28uCi0gKiBUaHVzLCB0 aGUgcmV0dXJuZWQgc2xvdCBpcyAqZWl0aGVyKiBhIHNsb3QgYWxyZWFkeSBob2xkaW5nIHRoZSBw YWdlbm8KLSAqIChjb3VsZCBiZSBhbnkgc3RhdGUgZXhjZXB0IEVNUFRZKSwgKm9yKiBhIGZyZWVh YmxlIHNsb3QgKHN0YXRlIEVNUFRZCi0gKiBvciBDTEVBTikuCi0gKgotICogQ29udHJvbCBsb2Nr IG11c3QgYmUgaGVsZCBhdCBlbnRyeSwgYW5kIHdpbGwgYmUgaGVsZCBhdCBleGl0LgotICovCi1z dGF0aWMgaW50Ci1TbHJ1U2VsZWN0TFJVUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubykKLXsK LQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVkOwotCi0JLyogT3V0ZXIgbG9vcCBoYW5k bGVzIHJlc3RhcnQgYWZ0ZXIgSS9PICovCi0JZm9yICg7OykKLQl7Ci0JCWludAkJCXNsb3RubzsK LQkJaW50CQkJY3VyX2NvdW50OwotCQlpbnQJCQliZXN0dmFsaWRzbG90ID0gMDsJLyoga2VlcCBj b21waWxlciBxdWlldCAqLwotCQlpbnQJCQliZXN0X3ZhbGlkX2RlbHRhID0gLTE7Ci0JCWludAkJ CWJlc3RfdmFsaWRfcGFnZV9udW1iZXIgPSAwOyAvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCi0J CWludAkJCWJlc3RpbnZhbGlkc2xvdCA9IDA7CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KLQkJ aW50CQkJYmVzdF9pbnZhbGlkX2RlbHRhID0gLTE7Ci0JCWludAkJCWJlc3RfaW52YWxpZF9wYWdl X251bWJlciA9IDA7CS8qIGtlZXAgY29tcGlsZXIgcXVpZXQgKi8KLQotCQkvKiBTZWUgaWYgcGFn ZSBhbHJlYWR5IGhhcyBhIGJ1ZmZlciBhc3NpZ25lZCAqLwotCQlmb3IgKHNsb3RubyA9IDA7IHNs b3RubyA8IHNoYXJlZC0+bnVtX3Nsb3RzOyBzbG90bm8rKykKLQkJewotCQkJaWYgKHNoYXJlZC0+ cGFnZV9udW1iZXJbc2xvdG5vXSA9PSBwYWdlbm8gJiYKLQkJCQlzaGFyZWQtPnBhZ2Vfc3RhdHVz W3Nsb3Rub10gIT0gU0xSVV9QQUdFX0VNUFRZKQotCQkJCXJldHVybiBzbG90bm87Ci0JCX0KLQot CQkvKgotCQkgKiBJZiB3ZSBmaW5kIGFueSBFTVBUWSBzbG90LCBqdXN0IHNlbGVjdCB0aGF0IG9u ZS4gRWxzZSBjaG9vc2UgYQotCQkgKiB2aWN0aW0gcGFnZSB0byByZXBsYWNlLiAgV2Ugbm9ybWFs bHkgdGFrZSB0aGUgbGVhc3QgcmVjZW50bHkgdXNlZAotCQkgKiB2YWxpZCBwYWdlLCBidXQgd2Ug d2lsbCBuZXZlciB0YWtlIHRoZSBzbG90IGNvbnRhaW5pbmcKLQkJICogbGF0ZXN0X3BhZ2VfbnVt YmVyLCBldmVuIGlmIGl0IGFwcGVhcnMgbGVhc3QgcmVjZW50bHkgdXNlZC4gIFdlCi0JCSAqIHdp bGwgc2VsZWN0IGEgc2xvdCB0aGF0IGlzIGFscmVhZHkgSS9PIGJ1c3kgb25seSBpZiB0aGVyZSBp cyBubwotCQkgKiBvdGhlciBjaG9pY2U6IGEgcmVhZC1idXN5IHNsb3Qgd2lsbCBub3QgYmUgbGVh c3QgcmVjZW50bHkgdXNlZCBvbmNlCi0JCSAqIHRoZSByZWFkIGZpbmlzaGVzLCBhbmQgd2FpdGlu ZyBmb3IgYW4gSS9PIG9uIGEgd3JpdGUtYnVzeSBzbG90IGlzCi0JCSAqIGluZmVyaW9yIHRvIGp1 c3QgcGlja2luZyBzb21lIG90aGVyIHNsb3QuICBUZXN0aW5nIHNob3dzIHRoZSBzbG90Ci0JCSAq IHdlIHBpY2sgaW5zdGVhZCB3aWxsIG9mdGVuIGJlIGNsZWFuLCBhbGxvd2luZyB1cyB0byBiZWdp biBhIHJlYWQgYXQKLQkJICogb25jZS4KLQkJICoKLQkJICogTm9ybWFsbHkgdGhlIHBhZ2VfbHJ1 X2NvdW50IHZhbHVlcyB3aWxsIGFsbCBiZSBkaWZmZXJlbnQgYW5kIHNvCi0JCSAqIHRoZXJlIHdp bGwgYmUgYSB3ZWxsLWRlZmluZWQgTFJVIHBhZ2UuICBCdXQgc2luY2Ugd2UgYWxsb3cKLQkJICog Y29uY3VycmVudCBleGVjdXRpb24gb2YgU2xydVJlY2VudGx5VXNlZCgpIHdpdGhpbgotCQkgKiBT aW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSgpLCBpdCBpcyBwb3NzaWJsZSB0aGF0IG11bHRpcGxl IHBhZ2VzCi0JCSAqIGFjcXVpcmUgdGhlIHNhbWUgbHJ1X2NvdW50IHZhbHVlcy4gIEluIHRoYXQg Y2FzZSB3ZSBicmVhayB0aWVzIGJ5Ci0JCSAqIGNob29zaW5nIHRoZSBmdXJ0aGVzdC1iYWNrIHBh Z2UuCi0JCSAqCi0JCSAqIE5vdGljZSB0aGF0IHRoaXMgbmV4dCBsaW5lIGZvcmNpYmx5IGFkdmFu Y2VzIGN1cl9scnVfY291bnQgdG8gYQotCQkgKiB2YWx1ZSB0aGF0IGlzIGNlcnRhaW5seSBiZXlv bmQgYW55IHZhbHVlIHRoYXQgd2lsbCBiZSBpbiB0aGUKLQkJICogcGFnZV9scnVfY291bnQgYXJy YXkgYWZ0ZXIgdGhlIGxvb3AgZmluaXNoZXMuICBUaGlzIGVuc3VyZXMgdGhhdAotCQkgKiB0aGUg bmV4dCBleGVjdXRpb24gb2YgU2xydVJlY2VudGx5VXNlZCB3aWxsIG1hcmsgdGhlIHBhZ2UgbmV3 bHkKLQkJICogdXNlZCwgZXZlbiBpZiBpdCdzIGZvciBhIHBhZ2UgdGhhdCBoYXMgdGhlIGN1cnJl bnQgY291bnRlciB2YWx1ZS4KLQkJICogVGhhdCBnZXRzIHVzIGJhY2sgb24gdGhlIHBhdGggdG8g aGF2aW5nIGdvb2QgZGF0YSB3aGVuIHRoZXJlIGFyZQotCQkgKiBtdWx0aXBsZSBwYWdlcyB3aXRo IHRoZSBzYW1lIGxydV9jb3VudC4KLQkJICovCi0JCWN1cl9jb3VudCA9IChzaGFyZWQtPmN1cl9s cnVfY291bnQpKys7Ci0JCWZvciAoc2xvdG5vID0gMDsgc2xvdG5vIDwgc2hhcmVkLT5udW1fc2xv dHM7IHNsb3RubysrKQotCQl7Ci0JCQlpbnQJCQl0aGlzX2RlbHRhOwotCQkJaW50CQkJdGhpc19w YWdlX251bWJlcjsKLQotCQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJV X1BBR0VfRU1QVFkpCi0JCQkJcmV0dXJuIHNsb3RubzsKLQkJCXRoaXNfZGVsdGEgPSBjdXJfY291 bnQgLSBzaGFyZWQtPnBhZ2VfbHJ1X2NvdW50W3Nsb3Rub107Ci0JCQlpZiAodGhpc19kZWx0YSA8 IDApCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBDbGVhbiB1cCBpbiBjYXNlIHNoYXJlZCB1cGRhdGVz IGhhdmUgY2F1c2VkIGN1cl9jb3VudAotCQkJCSAqIGluY3JlbWVudHMgdG8gZ2V0ICJsb3N0Ii4g IFdlIGJhY2sgb2ZmIHRoZSBwYWdlIGNvdW50cywKLQkJCQkgKiByYXRoZXIgdGhhbiB0cnlpbmcg dG8gaW5jcmVhc2UgY3VyX2NvdW50LCB0byBhdm9pZCBhbnkKLQkJCQkgKiBxdWVzdGlvbiBvZiBp bmZpbml0ZSBsb29wcyBvciBmYWlsdXJlIGluIHRoZSBwcmVzZW5jZSBvZgotCQkJCSAqIHdyYXBw ZWQtYXJvdW5kIGNvdW50cy4KLQkJCQkgKi8KLQkJCQlzaGFyZWQtPnBhZ2VfbHJ1X2NvdW50W3Ns b3Rub10gPSBjdXJfY291bnQ7Ci0JCQkJdGhpc19kZWx0YSA9IDA7Ci0JCQl9Ci0JCQl0aGlzX3Bh Z2VfbnVtYmVyID0gc2hhcmVkLT5wYWdlX251bWJlcltzbG90bm9dOwotCQkJaWYgKHRoaXNfcGFn ZV9udW1iZXIgPT0gc2hhcmVkLT5sYXRlc3RfcGFnZV9udW1iZXIpCi0JCQkJY29udGludWU7Ci0J CQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID09IFNMUlVfUEFHRV9WQUxJRCkKLQkJ CXsKLQkJCQlpZiAodGhpc19kZWx0YSA+IGJlc3RfdmFsaWRfZGVsdGEgfHwKLQkJCQkJKHRoaXNf ZGVsdGEgPT0gYmVzdF92YWxpZF9kZWx0YSAmJgotCQkJCQkgY3RsLT5QYWdlUHJlY2VkZXModGhp c19wYWdlX251bWJlciwKLQkJCQkJCQkJCSAgIGJlc3RfdmFsaWRfcGFnZV9udW1iZXIpKSkKLQkJ CQl7Ci0JCQkJCWJlc3R2YWxpZHNsb3QgPSBzbG90bm87Ci0JCQkJCWJlc3RfdmFsaWRfZGVsdGEg PSB0aGlzX2RlbHRhOwotCQkJCQliZXN0X3ZhbGlkX3BhZ2VfbnVtYmVyID0gdGhpc19wYWdlX251 bWJlcjsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJaWYgKHRoaXNfZGVsdGEgPiBi ZXN0X2ludmFsaWRfZGVsdGEgfHwKLQkJCQkJKHRoaXNfZGVsdGEgPT0gYmVzdF9pbnZhbGlkX2Rl bHRhICYmCi0JCQkJCSBjdGwtPlBhZ2VQcmVjZWRlcyh0aGlzX3BhZ2VfbnVtYmVyLAotCQkJCQkJ CQkJICAgYmVzdF9pbnZhbGlkX3BhZ2VfbnVtYmVyKSkpCi0JCQkJewotCQkJCQliZXN0aW52YWxp ZHNsb3QgPSBzbG90bm87Ci0JCQkJCWJlc3RfaW52YWxpZF9kZWx0YSA9IHRoaXNfZGVsdGE7Ci0J CQkJCWJlc3RfaW52YWxpZF9wYWdlX251bWJlciA9IHRoaXNfcGFnZV9udW1iZXI7Ci0JCQkJfQot CQkJfQotCQl9Ci0KLQkJLyoKLQkJICogSWYgYWxsIHBhZ2VzIChleGNlcHQgcG9zc2libHkgdGhl IGxhdGVzdCBvbmUpIGFyZSBJL08gYnVzeSwgd2UnbGwKLQkJICogaGF2ZSB0byB3YWl0IGZvciBh biBJL08gdG8gY29tcGxldGUgYW5kIHRoZW4gcmV0cnkuICBJbiB0aGF0Ci0JCSAqIHVuaGFwcHkg Y2FzZSwgd2UgY2hvb3NlIHRvIHdhaXQgZm9yIHRoZSBJL08gb24gdGhlIGxlYXN0IHJlY2VudGx5 Ci0JCSAqIHVzZWQgc2xvdCwgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBpdCB3YXMgbGlrZWx5IGlu aXRpYXRlZCBmaXJzdCBvZgotCQkgKiBhbGwgdGhlIEkvT3MgaW4gcHJvZ3Jlc3MgYW5kIG1heSB0 aGVyZWZvcmUgZmluaXNoIGZpcnN0LgotCQkgKi8KLQkJaWYgKGJlc3RfdmFsaWRfZGVsdGEgPCAw KQotCQl7Ci0JCQlTaW1wbGVMcnVXYWl0SU8oY3RsLCBiZXN0aW52YWxpZHNsb3QpOwotCQkJY29u dGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBJZiB0aGUgc2VsZWN0ZWQgcGFnZSBpcyBjbGVhbiwg d2UncmUgc2V0LgotCQkgKi8KLQkJaWYgKCFzaGFyZWQtPnBhZ2VfZGlydHlbYmVzdHZhbGlkc2xv dF0pCi0JCQlyZXR1cm4gYmVzdHZhbGlkc2xvdDsKLQotCQkvKgotCQkgKiBXcml0ZSB0aGUgcGFn ZS4KLQkJICovCi0JCVNscnVJbnRlcm5hbFdyaXRlUGFnZShjdGwsIGJlc3R2YWxpZHNsb3QsIE5V TEwpOwotCi0JCS8qCi0JCSAqIE5vdyBsb29wIGJhY2sgYW5kIHRyeSBhZ2Fpbi4gIFRoaXMgaXMg dGhlIGVhc2llc3Qgd2F5IG9mIGRlYWxpbmcKLQkJICogd2l0aCBjb3JuZXIgY2FzZXMgc3VjaCBh cyB0aGUgdmljdGltIHBhZ2UgYmVpbmcgcmUtZGlydGllZCB3aGlsZSB3ZQotCQkgKiB3cm90ZSBp dC4KLQkJICovCi0JfQotfQotCi0vKgotICogV3JpdGUgZGlydHkgcGFnZXMgdG8gZGlzayBkdXJp bmcgY2hlY2twb2ludCBvciBkYXRhYmFzZSBzaHV0ZG93bi4gIEZsdXNoaW5nCi0gKiBpcyBkZWZl cnJlZCB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvIFByb2Nlc3NTeW5jUmVxdWVzdHMoKSwgdGhvdWdo IHdlIGRvIGZzeW5jCi0gKiB0aGUgY29udGFpbmluZyBkaXJlY3RvcnkgaGVyZSB0byBtYWtlIHN1 cmUgdGhhdCBuZXdseSBjcmVhdGVkIGRpcmVjdG9yeQotICogZW50cmllcyBhcmUgb24gZGlzay4K LSAqLwotdm9pZAotU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0bCBjdGwsIGJvb2wgYWxsb3dfcmVk aXJ0aWVkKQotewotCVNscnVTaGFyZWQJc2hhcmVkID0gY3RsLT5zaGFyZWQ7Ci0JU2xydVdyaXRl QWxsRGF0YSBmZGF0YTsKLQlpbnQJCQlzbG90bm87Ci0JaW50CQkJcGFnZW5vID0gMDsKLQlpbnQJ CQlpOwotCWJvb2wJCW9rOwotCi0JLyogdXBkYXRlIHRoZSBzdGF0cyBjb3VudGVyIG9mIGZsdXNo ZXMgKi8KLQlwZ3N0YXRfY291bnRfc2xydV9mbHVzaChzaGFyZWQtPnNscnVfc3RhdHNfaWR4KTsK LQotCS8qCi0JICogRmluZCBhbmQgd3JpdGUgZGlydHkgcGFnZXMKLQkgKi8KLQlmZGF0YS5udW1f ZmlsZXMgPSAwOworCW9mZl90CQlzaXplOworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yID0gU2xy dVJlbEZpbGVMb2NhdG9yKHNscnVfaWQsIHNlZ25vKTsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZSA9 IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBNQUlOX0ZPUktOVU0pOwogCi0J TFdMb2NrQWNxdWlyZShzaGFyZWQtPkNvbnRyb2xMb2NrLCBMV19FWENMVVNJVkUpOwotCi0JZm9y IChzbG90bm8gPSAwOyBzbG90bm8gPCBzaGFyZWQtPm51bV9zbG90czsgc2xvdG5vKyspCi0Jewot CQlTbHJ1SW50ZXJuYWxXcml0ZVBhZ2UoY3RsLCBzbG90bm8sICZmZGF0YSk7Ci0KLQkJLyoKLQkJ ICogSW4gc29tZSBwbGFjZXMgKGUuZy4gY2hlY2twb2ludHMpLCB3ZSBjYW5ub3QgYXNzZXJ0IHRo YXQgdGhlIHNsb3QKLQkJICogaXMgY2xlYW4gbm93LCBzaW5jZSBhbm90aGVyIHByb2Nlc3MgbWln aHQgaGF2ZSByZS1kaXJ0aWVkIGl0Ci0JCSAqIGFscmVhZHkuICBUaGF0J3Mgb2theS4KLQkJICov Ci0JCUFzc2VydChhbGxvd19yZWRpcnRpZWQgfHwKLQkJCSAgIHNoYXJlZC0+cGFnZV9zdGF0dXNb c2xvdG5vXSA9PSBTTFJVX1BBR0VfRU1QVFkgfHwKLQkJCSAgIChzaGFyZWQtPnBhZ2Vfc3RhdHVz W3Nsb3Rub10gPT0gU0xSVV9QQUdFX1ZBTElEICYmCi0JCQkJIXNoYXJlZC0+cGFnZV9kaXJ0eVtz bG90bm9dKSk7Ci0JfQotCi0JTFdMb2NrUmVsZWFzZShzaGFyZWQtPkNvbnRyb2xMb2NrKTsKKwkv KiB1cGRhdGUgdGhlIHN0YXRzIGNvdW50ZXIgb2YgY2hlY2tlZCBwYWdlcyAqLworCXBnc3RhdF9j b3VudF9zbHJ1X3BhZ2VfZXhpc3RzKHNscnVfaWQpOwogCi0JLyoKLQkgKiBOb3cgY2xvc2UgYW55 IGZpbGVzIHRoYXQgd2VyZSBvcGVuCi0JICovCi0Jb2sgPSB0cnVlOwotCWZvciAoaSA9IDA7IGkg PCBmZGF0YS5udW1fZmlsZXM7IGkrKykKLQl7Ci0JCWlmIChDbG9zZVRyYW5zaWVudEZpbGUoZmRh dGEuZmRbaV0pICE9IDApCi0JCXsKLQkJCXNscnVfZXJyY2F1c2UgPSBTTFJVX0NMT1NFX0ZBSUxF RDsKLQkJCXNscnVfZXJybm8gPSBlcnJubzsKLQkJCXBhZ2VubyA9IGZkYXRhLnNlZ25vW2ldICog U0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKLQkJCW9rID0gZmFsc2U7Ci0JCX0KLQl9Ci0JaWYgKCFv aykKLQkJU2xydVJlcG9ydElPRXJyb3IoY3RsLCBwYWdlbm8sIEludmFsaWRUcmFuc2FjdGlvbklk KTsKKwlpZiAoc21ncmV4aXN0cyhzZmlsZSkpCisJCXNpemUgPSBzbWdybmJsb2NrcyhzZmlsZSk7 CisJZWxzZQorCQlzaXplID0gMDsKIAotCS8qIEVuc3VyZSB0aGF0IGRpcmVjdG9yeSBlbnRyaWVz IGZvciBuZXcgZmlsZXMgYXJlIG9uIGRpc2suICovCi0JaWYgKGN0bC0+c3luY19oYW5kbGVyICE9 IFNZTkNfSEFORExFUl9OT05FKQotCQlmc3luY19mbmFtZShjdGwtPkRpciwgdHJ1ZSk7CisJcmV0 dXJuIHNpemUgPj0gb2Zmc2V0ICsgQkxDS1NaOwogfQogCiAvKgpAQCAtMTIyNCw3NSArOTYsMTQg QEAgU2ltcGxlTHJ1V3JpdGVBbGwoU2xydUN0bCBjdGwsIGJvb2wgYWxsb3dfcmVkaXJ0aWVkKQog ICogYWZ0ZXIgaXQgaGFzIGFjY3J1ZWQgZnJlc2hseS13cml0dGVuIGRhdGEuCiAgKi8KIHZvaWQK LVNpbXBsZUxydVRydW5jYXRlKFNscnVDdGwgY3RsLCBpbnQgY3V0b2ZmUGFnZSkKK1NpbXBsZUxy dVRydW5jYXRlKGludCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNl ZGVzLCBpbnQgY3V0b2ZmUGFnZSkKIHsKLQlTbHJ1U2hhcmVkCXNoYXJlZCA9IGN0bC0+c2hhcmVk OwotCWludAkJCXNsb3RubzsKLQogCS8qIHVwZGF0ZSB0aGUgc3RhdHMgY291bnRlciBvZiB0cnVu Y2F0ZXMgKi8KLQlwZ3N0YXRfY291bnRfc2xydV90cnVuY2F0ZShzaGFyZWQtPnNscnVfc3RhdHNf aWR4KTsKLQotCS8qCi0JICogU2NhbiBzaGFyZWQgbWVtb3J5IGFuZCByZW1vdmUgYW55IHBhZ2Vz IHByZWNlZGluZyB0aGUgY3V0b2ZmIHBhZ2UsIHRvCi0JICogZW5zdXJlIHdlIHdvbid0IHJld3Jp dGUgdGhlbSBsYXRlci4gIChTaW5jZSB0aGlzIGlzIG5vcm1hbGx5IGNhbGxlZCBpbgotCSAqIG9y IGp1c3QgYWZ0ZXIgYSBjaGVja3BvaW50LCBhbnkgZGlydHkgcGFnZXMgc2hvdWxkIGhhdmUgYmVl biBmbHVzaGVkCi0JICogYWxyZWFkeSAuLi4gd2UncmUganVzdCBiZWluZyBleHRyYSBjYXJlZnVs IGhlcmUuKQotCSAqLwotCUxXTG9ja0FjcXVpcmUoc2hhcmVkLT5Db250cm9sTG9jaywgTFdfRVhD TFVTSVZFKTsKLQotcmVzdGFydDoKLQotCS8qCi0JICogV2hpbGUgd2UgYXJlIGhvbGRpbmcgdGhl IGxvY2ssIG1ha2UgYW4gaW1wb3J0YW50IHNhZmV0eSBjaGVjazogdGhlCi0JICogY3VycmVudCBl bmRwb2ludCBwYWdlIG11c3Qgbm90IGJlIGVsaWdpYmxlIGZvciByZW1vdmFsLgotCSAqLwotCWlm IChjdGwtPlBhZ2VQcmVjZWRlcyhzaGFyZWQtPmxhdGVzdF9wYWdlX251bWJlciwgY3V0b2ZmUGFn ZSkpCi0JewotCQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2spOwotCQllcmVwb3J0 KExPRywKLQkJCQkoZXJybXNnKCJjb3VsZCBub3QgdHJ1bmNhdGUgZGlyZWN0b3J5IFwiJXNcIjog YXBwYXJlbnQgd3JhcGFyb3VuZCIsCi0JCQkJCQljdGwtPkRpcikpKTsKLQkJcmV0dXJuOwotCX0K LQotCWZvciAoc2xvdG5vID0gMDsgc2xvdG5vIDwgc2hhcmVkLT5udW1fc2xvdHM7IHNsb3Rubysr KQotCXsKLQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BBR0VfRU1Q VFkpCi0JCQljb250aW51ZTsKLQkJaWYgKCFjdGwtPlBhZ2VQcmVjZWRlcyhzaGFyZWQtPnBhZ2Vf bnVtYmVyW3Nsb3Rub10sIGN1dG9mZlBhZ2UpKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICog SWYgcGFnZSBpcyBjbGVhbiwganVzdCBjaGFuZ2Ugc3RhdGUgdG8gRU1QVFkgKGV4cGVjdGVkIGNh c2UpLgotCQkgKi8KLQkJaWYgKHNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9PSBTTFJVX1BB R0VfVkFMSUQgJiYKLQkJCSFzaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSkKLQkJewotCQkJc2hh cmVkLT5wYWdlX3N0YXR1c1tzbG90bm9dID0gU0xSVV9QQUdFX0VNUFRZOwotCQkJY29udGludWU7 Ci0JCX0KLQotCQkvKgotCQkgKiBIbW0sIHdlIGhhdmUgKG9yIG1heSBoYXZlKSBJL08gb3BlcmF0 aW9ucyBhY3Rpbmcgb24gdGhlIHBhZ2UsIHNvCi0JCSAqIHdlJ3ZlIGdvdCB0byB3YWl0IGZvciB0 aGVtIHRvIGZpbmlzaCBhbmQgdGhlbiBzdGFydCBhZ2Fpbi4gVGhpcyBpcwotCQkgKiB0aGUgc2Ft ZSBsb2dpYyBhcyBpbiBTbHJ1U2VsZWN0TFJVUGFnZS4gIChYWFggaWYgcGFnZSBpcyBkaXJ0eSwK LQkJICogd291bGRuJ3QgaXQgYmUgT0sgdG8ganVzdCBkaXNjYXJkIGl0IHdpdGhvdXQgd3JpdGlu ZyBpdD8KLQkJICogU2xydU1heURlbGV0ZVNlZ21lbnQoKSB1c2VzIGEgc3RyaWN0ZXIgcXVhbGlm aWNhdGlvbiwgc28gd2UgbWlnaHQKLQkJICogbm90IGRlbGV0ZSB0aGlzIHBhZ2UgaW4gdGhlIGVu ZDsgZXZlbiBpZiB3ZSBkb24ndCBkZWxldGUgaXQsIHdlCi0JCSAqIHdvbid0IGhhdmUgY2F1c2Ug dG8gcmVhZCBpdHMgZGF0YSBhZ2Fpbi4gIEZvciBub3csIGtlZXAgdGhlIGxvZ2ljCi0JCSAqIHRo ZSBzYW1lIGFzIGl0IHdhcy4pCi0JCSAqLwotCQlpZiAoc2hhcmVkLT5wYWdlX3N0YXR1c1tzbG90 bm9dID09IFNMUlVfUEFHRV9WQUxJRCkKLQkJCVNscnVJbnRlcm5hbFdyaXRlUGFnZShjdGwsIHNs b3RubywgTlVMTCk7Ci0JCWVsc2UKLQkJCVNpbXBsZUxydVdhaXRJTyhjdGwsIHNsb3Rubyk7Ci0J CWdvdG8gcmVzdGFydDsKLQl9Ci0KLQlMV0xvY2tSZWxlYXNlKHNoYXJlZC0+Q29udHJvbExvY2sp OworCXBnc3RhdF9jb3VudF9zbHJ1X3RydW5jYXRlKHNscnVfaWQpOwogCiAJLyogTm93IHdlIGNh biByZW1vdmUgdGhlIG9sZCBzZWdtZW50KHMpICovCi0JKHZvaWQpIFNscnVTY2FuRGlyZWN0b3J5 KGN0bCwgU2xydVNjYW5EaXJDYkRlbGV0ZUN1dG9mZiwgJmN1dG9mZlBhZ2UpOworCSh2b2lkKSBT bHJ1U2NhbkRpcmVjdG9yeShzbHJ1X2lkLCBQYWdlUHJlY2VkZXMsIFNscnVTY2FuRGlyQ2JEZWxl dGVDdXRvZmYsCisJCQkJCQkJICZjdXRvZmZQYWdlKTsKIH0KIAogLyoKQEAgLTEzMDIsNzcgKzEx MywyMiBAQCByZXN0YXJ0OgogICogdGhleSBlaXRoZXIgY2FuJ3QgeWV0IGNvbnRhaW4gYW55dGhp bmcsIG9yIGhhdmUgYWxyZWFkeSBiZWVuIGNsZWFuZWQgb3V0LgogICovCiBzdGF0aWMgdm9pZAot U2xydUludGVybmFsRGVsZXRlU2VnbWVudChTbHJ1Q3RsIGN0bCwgaW50IHNlZ25vKQorU2xydUlu dGVybmFsRGVsZXRlU2VnbWVudChpbnQgc2xydV9pZCwgaW50IHNlZ25vKQogewotCWNoYXIJCXBh dGhbTUFYUEdQQVRIXTsKLQotCS8qIEZvcmdldCBhbnkgZnN5bmMgcmVxdWVzdHMgcXVldWVkIGZv ciB0aGlzIHNlZ21lbnQuICovCi0JaWYgKGN0bC0+c3luY19oYW5kbGVyICE9IFNZTkNfSEFORExF Ul9OT05FKQotCXsKLQkJRmlsZVRhZwkJdGFnOwotCi0JCUlOSVRfU0xSVUZJTEVUQUcodGFnLCBj dGwtPnN5bmNfaGFuZGxlciwgc2Vnbm8pOwotCQlSZWdpc3RlclN5bmNSZXF1ZXN0KCZ0YWcsIFNZ TkNfRk9SR0VUX1JFUVVFU1QsIHRydWUpOwotCX0KKwlSZWxGaWxlTG9jYXRvciBybG9jYXRvciA9 IFNscnVSZWxGaWxlTG9jYXRvcihzbHJ1X2lkLCBzZWdubyk7CisJU01nckZpbGVIYW5kbGUgc2Zp bGUgPSBzbWdyb3BlbihybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgTUFJTl9GT1JLTlVNKTsK IAogCS8qIFVubGluayB0aGUgZmlsZS4gKi8KLQlTbHJ1RmlsZU5hbWUoY3RsLCBwYXRoLCBzZWdu byk7Ci0JZXJlcG9ydChERUJVRzIsIChlcnJtc2dfaW50ZXJuYWwoInJlbW92aW5nIGZpbGUgXCIl c1wiIiwgcGF0aCkpKTsKLQl1bmxpbmsocGF0aCk7CisJc21ncnVubGluayhzZmlsZSwgZmFsc2Up OwogfQogCiAvKgogICogRGVsZXRlIGFuIGluZGl2aWR1YWwgU0xSVSBzZWdtZW50LCBpZGVudGlm aWVkIGJ5IHRoZSBzZWdtZW50IG51bWJlci4KICAqLwogdm9pZAotU2xydURlbGV0ZVNlZ21lbnQo U2xydUN0bCBjdGwsIGludCBzZWdubykKK1NscnVEZWxldGVTZWdtZW50KGludCBzbHJ1X2lkLCBp bnQgc2Vnbm8pCiB7Ci0JU2xydVNoYXJlZAlzaGFyZWQgPSBjdGwtPnNoYXJlZDsKLQlpbnQJCQlz bG90bm87Ci0JYm9vbAkJZGlkX3dyaXRlOwotCi0JLyogQ2xlYW4gb3V0IGFueSBwb3NzaWJseSBl eGlzdGluZyByZWZlcmVuY2VzIHRvIHRoZSBzZWdtZW50LiAqLwotCUxXTG9ja0FjcXVpcmUoc2hh cmVkLT5Db250cm9sTG9jaywgTFdfRVhDTFVTSVZFKTsKLXJlc3RhcnQ6Ci0JZGlkX3dyaXRlID0g ZmFsc2U7Ci0JZm9yIChzbG90bm8gPSAwOyBzbG90bm8gPCBzaGFyZWQtPm51bV9zbG90czsgc2xv dG5vKyspCi0JewotCQlpbnQJCQlwYWdlc2Vnbm8gPSBzaGFyZWQtPnBhZ2VfbnVtYmVyW3Nsb3Ru b10gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwotCi0JCWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVz W3Nsb3Rub10gPT0gU0xSVV9QQUdFX0VNUFRZKQotCQkJY29udGludWU7Ci0KLQkJLyogbm90IHRo ZSBzZWdtZW50IHdlJ3JlIGxvb2tpbmcgZm9yICovCi0JCWlmIChwYWdlc2Vnbm8gIT0gc2Vnbm8p Ci0JCQljb250aW51ZTsKLQotCQkvKiBJZiBwYWdlIGlzIGNsZWFuLCBqdXN0IGNoYW5nZSBzdGF0 ZSB0byBFTVBUWSAoZXhwZWN0ZWQgY2FzZSkuICovCi0JCWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVz W3Nsb3Rub10gPT0gU0xSVV9QQUdFX1ZBTElEICYmCi0JCQkhc2hhcmVkLT5wYWdlX2RpcnR5W3Ns b3Rub10pCi0JCXsKLQkJCXNoYXJlZC0+cGFnZV9zdGF0dXNbc2xvdG5vXSA9IFNMUlVfUEFHRV9F TVBUWTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogU2FtZSBsb2dpYyBhcyBTaW1wbGVMcnVU cnVuY2F0ZSgpICovCi0JCWlmIChzaGFyZWQtPnBhZ2Vfc3RhdHVzW3Nsb3Rub10gPT0gU0xSVV9Q QUdFX1ZBTElEKQotCQkJU2xydUludGVybmFsV3JpdGVQYWdlKGN0bCwgc2xvdG5vLCBOVUxMKTsK LQkJZWxzZQotCQkJU2ltcGxlTHJ1V2FpdElPKGN0bCwgc2xvdG5vKTsKLQotCQlkaWRfd3JpdGUg PSB0cnVlOwotCX0KLQotCS8qCi0JICogQmUgZXh0cmEgY2FyZWZ1bCBhbmQgcmUtY2hlY2suIFRo ZSBJTyBmdW5jdGlvbnMgcmVsZWFzZSB0aGUgY29udHJvbAotCSAqIGxvY2ssIHNvIG5ldyBwYWdl cyBjb3VsZCBoYXZlIGJlZW4gcmVhZCBpbi4KLQkgKi8KLQlpZiAoZGlkX3dyaXRlKQotCQlnb3Rv IHJlc3RhcnQ7Ci0KLQlTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KGN0bCwgc2Vnbm8pOwotCi0J TFdMb2NrUmVsZWFzZShzaGFyZWQtPkNvbnRyb2xMb2NrKTsKKwlTbHJ1SW50ZXJuYWxEZWxldGVT ZWdtZW50KHNscnVfaWQsIHNlZ25vKTsKIH0KIAogLyoKQEAgLTEzODksMTkgKzE0NSwyMSBAQCBy ZXN0YXJ0OgogICogZmlyc3Q+PWN1dG9mZiAmJiBsYXN0Pj1jdXRvZmY6IG5vOyBldmVyeSBwYWdl IG9mIHRoaXMgc2VnbWVudCBpcyB0b28geW91bmcKICAqLwogc3RhdGljIGJvb2wKLVNscnVNYXlE ZWxldGVTZWdtZW50KFNscnVDdGwgY3RsLCBpbnQgc2VncGFnZSwgaW50IGN1dG9mZlBhZ2UpCitT bHJ1TWF5RGVsZXRlU2VnbWVudChTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVz LAorCQkJCQkgaW50IHNlZ3BhZ2UsIGludCBjdXRvZmZQYWdlKQogewogCWludAkJCXNlZ19sYXN0 X3BhZ2UgPSBzZWdwYWdlICsgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCAtIDE7CiAKIAlBc3NlcnQo c2VncGFnZSAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQgPT0gMCk7CiAKLQlyZXR1cm4gKGN0bC0+ UGFnZVByZWNlZGVzKHNlZ3BhZ2UsIGN1dG9mZlBhZ2UpICYmCi0JCQljdGwtPlBhZ2VQcmVjZWRl cyhzZWdfbGFzdF9wYWdlLCBjdXRvZmZQYWdlKSk7CisJcmV0dXJuIChQYWdlUHJlY2VkZXMoc2Vn cGFnZSwgY3V0b2ZmUGFnZSkgJiYKKwkJCVBhZ2VQcmVjZWRlcyhzZWdfbGFzdF9wYWdlLCBjdXRv ZmZQYWdlKSk7CiB9CiAKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCiBzdGF0aWMgdm9pZAot U2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSwgdWlu dDMyIG9mZnNldCkKK1NscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFNscnVQYWdlUHJlY2VkZXNG dW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkgICBpbnQgcGVyX3BhZ2UsIHVpbnQzMiBvZmZz ZXQpCiB7CiAJVHJhbnNhY3Rpb25JZCBsaHMsCiAJCQkJcmhzOwpAQCAtMTQyNiwxOSArMTg0LDE5 IEBAIFNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2Us IHVpbnQzMiBvZmZzZXQpCiAJQXNzZXJ0KCFUcmFuc2FjdGlvbklkUHJlY2VkZXMocmhzLCBsaHMg KyAxKSk7CiAJQXNzZXJ0KCFUcmFuc2FjdGlvbklkRm9sbG93c09yRXF1YWxzKGxocywgcmhzKSk7 CiAJQXNzZXJ0KCFUcmFuc2FjdGlvbklkRm9sbG93c09yRXF1YWxzKHJocywgbGhzKSk7Ci0JQXNz ZXJ0KCFjdGwtPlBhZ2VQcmVjZWRlcyhsaHMgLyBwZXJfcGFnZSwgbGhzIC8gcGVyX3BhZ2UpKTsK LQlBc3NlcnQoIWN0bC0+UGFnZVByZWNlZGVzKGxocyAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFn ZSkpOwotCUFzc2VydCghY3RsLT5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIGxocyAvIHBl cl9wYWdlKSk7Ci0JQXNzZXJ0KCFjdGwtPlBhZ2VQcmVjZWRlcygobGhzIC0gcGVyX3BhZ2UpIC8g cGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KGN0bC0+UGFnZVByZWNlZGVzKHJo cyAvIHBlcl9wYWdlLCAobGhzIC0gMyAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlKSk7Ci0JQXNzZXJ0 KGN0bC0+UGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzIC0gMiAqIHBlcl9wYWdlKSAv IHBlcl9wYWdlKSk7Ci0JQXNzZXJ0KGN0bC0+UGFnZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAo bGhzIC0gMSAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlKQorCUFzc2VydCghUGFnZVByZWNlZGVzKGxo cyAvIHBlcl9wYWdlLCBsaHMgLyBwZXJfcGFnZSkpOworCUFzc2VydCghUGFnZVByZWNlZGVzKGxo cyAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOworCUFzc2VydCghUGFnZVByZWNlZGVzKHJo cyAvIHBlcl9wYWdlLCBsaHMgLyBwZXJfcGFnZSkpOworCUFzc2VydCghUGFnZVByZWNlZGVzKChs aHMgLSBwZXJfcGFnZSkgLyBwZXJfcGFnZSwgcmhzIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQoUGFn ZVByZWNlZGVzKHJocyAvIHBlcl9wYWdlLCAobGhzIC0gMyAqIHBlcl9wYWdlKSAvIHBlcl9wYWdl KSk7CisJQXNzZXJ0KFBhZ2VQcmVjZWRlcyhyaHMgLyBwZXJfcGFnZSwgKGxocyAtIDIgKiBwZXJf cGFnZSkgLyBwZXJfcGFnZSkpOworCUFzc2VydChQYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2Us IChsaHMgLSAxICogcGVyX3BhZ2UpIC8gcGVyX3BhZ2UpCiAJCSAgIHx8ICgxVSA8PCAzMSkgJSBw ZXJfcGFnZSAhPSAwKTsJLyogU2VlIENvbW1pdFRzUGFnZVByZWNlZGVzKCkgKi8KLQlBc3NlcnQo Y3RsLT5QYWdlUHJlY2VkZXMoKGxocyArIDEgKiBwZXJfcGFnZSkgLyBwZXJfcGFnZSwgcmhzIC8g cGVyX3BhZ2UpCisJQXNzZXJ0KFBhZ2VQcmVjZWRlcygobGhzICsgMSAqIHBlcl9wYWdlKSAvIHBl cl9wYWdlLCByaHMgLyBwZXJfcGFnZSkKIAkJICAgfHwgKDFVIDw8IDMxKSAlIHBlcl9wYWdlICE9 IDApOwotCUFzc2VydChjdGwtPlBhZ2VQcmVjZWRlcygobGhzICsgMiAqIHBlcl9wYWdlKSAvIHBl cl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOwotCUFzc2VydChjdGwtPlBhZ2VQcmVjZWRlcygobGhz ICsgMyAqIHBlcl9wYWdlKSAvIHBlcl9wYWdlLCByaHMgLyBwZXJfcGFnZSkpOwotCUFzc2VydCgh Y3RsLT5QYWdlUHJlY2VkZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgKyBwZXJfcGFnZSkgLyBwZXJf cGFnZSkpOworCUFzc2VydChQYWdlUHJlY2VkZXMoKGxocyArIDIgKiBwZXJfcGFnZSkgLyBwZXJf cGFnZSwgcmhzIC8gcGVyX3BhZ2UpKTsKKwlBc3NlcnQoUGFnZVByZWNlZGVzKChsaHMgKyAzICog cGVyX3BhZ2UpIC8gcGVyX3BhZ2UsIHJocyAvIHBlcl9wYWdlKSk7CisJQXNzZXJ0KCFQYWdlUHJl Y2VkZXMocmhzIC8gcGVyX3BhZ2UsIChsaHMgKyBwZXJfcGFnZSkgLyBwZXJfcGFnZSkpOwogCiAJ LyoKIAkgKiBHZXROZXdUcmFuc2FjdGlvbklkKCkgaGFzIGFzc2lnbmVkIHRoZSBsYXN0IFhJRCBp dCBjYW4gc2FmZWx5IHVzZSwgYW5kCkBAIC0xNDUxLDcgKzIwOSw3IEBAIFNscnVQYWdlUHJlY2Vk ZXNUZXN0T2Zmc2V0KFNscnVDdGwgY3RsLCBpbnQgcGVyX3BhZ2UsIHVpbnQzMiBvZmZzZXQpCiAJ b2xkZXN0WGFjdCA9IG5ld2VzdFhhY3QgKyAxOwogCW9sZGVzdFhhY3QgLT0gMVUgPDwgMzE7CiAJ b2xkZXN0UGFnZSA9IG9sZGVzdFhhY3QgLyBwZXJfcGFnZTsKLQlBc3NlcnQoIVNscnVNYXlEZWxl dGVTZWdtZW50KGN0bCwKKwlBc3NlcnQoIVNscnVNYXlEZWxldGVTZWdtZW50KFBhZ2VQcmVjZWRl cywKIAkJCQkJCQkJIChuZXdlc3RQYWdlIC0KIAkJCQkJCQkJICBuZXdlc3RQYWdlICUgU0xSVV9Q QUdFU19QRVJfU0VHTUVOVCksCiAJCQkJCQkJCSBvbGRlc3RQYWdlKSk7CkBAIC0xNDY3LDcgKzIy NSw3IEBAIFNscnVQYWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFNscnVDdGwgY3RsLCBpbnQgcGVyX3Bh Z2UsIHVpbnQzMiBvZmZzZXQpCiAJb2xkZXN0WGFjdCA9IG5ld2VzdFhhY3QgKyAxOwogCW9sZGVz dFhhY3QgLT0gMVUgPDwgMzE7CiAJb2xkZXN0UGFnZSA9IG9sZGVzdFhhY3QgLyBwZXJfcGFnZTsK LQlBc3NlcnQoIVNscnVNYXlEZWxldGVTZWdtZW50KGN0bCwKKwlBc3NlcnQoIVNscnVNYXlEZWxl dGVTZWdtZW50KFBhZ2VQcmVjZWRlcywKIAkJCQkJCQkJIChuZXdlc3RQYWdlIC0KIAkJCQkJCQkJ ICBuZXdlc3RQYWdlICUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCksCiAJCQkJCQkJCSBvbGRlc3RQ YWdlKSk7CkBAIC0xNDgzLDEyICsyNDEsMTIgQEAgU2xydVBhZ2VQcmVjZWRlc1Rlc3RPZmZzZXQo U2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSwgdWludDMyIG9mZnNldCkKICAqIGRvIG5vdCBhcHBs eSB0byB0aGVtLikKICAqLwogdm9pZAotU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTbHJ1Q3Rs IGN0bCwgaW50IHBlcl9wYWdlKQorU2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTbHJ1UGFnZVBy ZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLCBpbnQgcGVyX3BhZ2UpCiB7CiAJLyogVGVzdCBm aXJzdCwgbWlkZGxlIGFuZCBsYXN0IGVudHJpZXMgb2YgYSBwYWdlLiAqLwotCVNscnVQYWdlUHJl Y2VkZXNUZXN0T2Zmc2V0KGN0bCwgcGVyX3BhZ2UsIDApOwotCVNscnVQYWdlUHJlY2VkZXNUZXN0 T2Zmc2V0KGN0bCwgcGVyX3BhZ2UsIHBlcl9wYWdlIC8gMik7Ci0JU2xydVBhZ2VQcmVjZWRlc1Rl c3RPZmZzZXQoY3RsLCBwZXJfcGFnZSwgcGVyX3BhZ2UgLSAxKTsKKwlTbHJ1UGFnZVByZWNlZGVz VGVzdE9mZnNldChQYWdlUHJlY2VkZXMsIHBlcl9wYWdlLCAwKTsKKwlTbHJ1UGFnZVByZWNlZGVz VGVzdE9mZnNldChQYWdlUHJlY2VkZXMsIHBlcl9wYWdlLCBwZXJfcGFnZSAvIDIpOworCVNscnVQ YWdlUHJlY2VkZXNUZXN0T2Zmc2V0KFBhZ2VQcmVjZWRlcywgcGVyX3BhZ2UsIHBlcl9wYWdlIC0g MSk7CiB9CiAjZW5kaWYKIApAQCAtMTQ5OCwxMSArMjU2LDEyIEBAIFNscnVQYWdlUHJlY2VkZXNV bml0VGVzdHMoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSkKICAqCQlvbmUgY29udGFpbmluZyB0 aGUgcGFnZSBwYXNzZWQgYXMgImRhdGEiLgogICovCiBib29sCi1TbHJ1U2NhbkRpckNiUmVwb3J0 UHJlc2VuY2UoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAq ZGF0YSkKK1NscnVTY2FuRGlyQ2JSZXBvcnRQcmVzZW5jZShpbnQgc2xydV9pZCwgU2xydVBhZ2VQ cmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCQljaGFyICpmaWxlbmFtZSwgaW50 IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCiB7CiAJaW50CQkJY3V0b2ZmUGFnZSA9ICooaW50ICopIGRh dGE7CiAKLQlpZiAoU2xydU1heURlbGV0ZVNlZ21lbnQoY3RsLCBzZWdwYWdlLCBjdXRvZmZQYWdl KSkKKwlpZiAoU2xydU1heURlbGV0ZVNlZ21lbnQoUGFnZVByZWNlZGVzLCBzZWdwYWdlLCBjdXRv ZmZQYWdlKSkKIAkJcmV0dXJuIHRydWU7CQkJLyogZm91bmQgb25lOyBkb24ndCBpdGVyYXRlIGFu eSBtb3JlICovCiAKIAlyZXR1cm4gZmFsc2U7CQkJCS8qIGtlZXAgZ29pbmcgKi8KQEAgLTE1MTMs MTIgKzI3MiwxNSBAQCBTbHJ1U2NhbkRpckNiUmVwb3J0UHJlc2VuY2UoU2xydUN0bCBjdGwsIGNo YXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YQogICoJCVRoaXMgY2FsbGJhY2sg ZGVsZXRlcyBzZWdtZW50cyBwcmlvciB0byB0aGUgb25lIHBhc3NlZCBpbiBhcyAiZGF0YSIuCiAg Ki8KIHN0YXRpYyBib29sCi1TbHJ1U2NhbkRpckNiRGVsZXRlQ3V0b2ZmKFNscnVDdGwgY3RsLCBj aGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCitTbHJ1U2NhbkRpckNiRGVs ZXRlQ3V0b2ZmKGludCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNl ZGVzLAorCQkJCQkJICBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpCiB7 CiAJaW50CQkJY3V0b2ZmUGFnZSA9ICooaW50ICopIGRhdGE7CiAKLQlpZiAoU2xydU1heURlbGV0 ZVNlZ21lbnQoY3RsLCBzZWdwYWdlLCBjdXRvZmZQYWdlKSkKLQkJU2xydUludGVybmFsRGVsZXRl U2VnbWVudChjdGwsIHNlZ3BhZ2UgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKTsKKwlpZiAoU2xy dU1heURlbGV0ZVNlZ21lbnQoUGFnZVByZWNlZGVzLCBzZWdwYWdlLCBjdXRvZmZQYWdlKSkKKwl7 CisJCVNscnVEZWxldGVTZWdtZW50KHNscnVfaWQsIHNlZ3BhZ2UgLyBTTFJVX1BBR0VTX1BFUl9T RUdNRU5UKTsKKwl9CiAKIAlyZXR1cm4gZmFsc2U7CQkJCS8qIGtlZXAgZ29pbmcgKi8KIH0KQEAg LTE1MjgsOSArMjkwLDEwIEBAIFNscnVTY2FuRGlyQ2JEZWxldGVDdXRvZmYoU2xydUN0bCBjdGws IGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwgdm9pZCAqZGF0YSkKICAqCQlUaGlzIGNhbGxi YWNrIGRlbGV0ZXMgYWxsIHNlZ21lbnRzLgogICovCiBib29sCi1TbHJ1U2NhbkRpckNiRGVsZXRl QWxsKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsIHZvaWQgKmRhdGEp CitTbHJ1U2NhbkRpckNiRGVsZXRlQWxsKGludCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVu Y3Rpb24gUGFnZVByZWNlZGVzLAorCQkJCQkgICBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2Us IHZvaWQgKmRhdGEpCiB7Ci0JU2xydUludGVybmFsRGVsZXRlU2VnbWVudChjdGwsIHNlZ3BhZ2Ug LyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKTsKKwlTbHJ1SW50ZXJuYWxEZWxldGVTZWdtZW50KHNs cnVfaWQsIHNlZ3BhZ2UgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKTsKIAogCXJldHVybiBmYWxz ZTsJCQkJLyoga2VlcCBnb2luZyAqLwogfQpAQCAtMTU1MSwxNiArMzE0LDIwIEBAIFNscnVTY2Fu RGlyQ2JEZWxldGVBbGwoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLCBpbnQgc2VncGFnZSwg dm9pZCAqZGF0YSkKICAqIE5vdGUgdGhhdCBubyBsb2NraW5nIGlzIGFwcGxpZWQuCiAgKi8KIGJv b2wKLVNscnVTY2FuRGlyZWN0b3J5KFNscnVDdGwgY3RsLCBTbHJ1U2NhbkNhbGxiYWNrIGNhbGxi YWNrLCB2b2lkICpkYXRhKQorU2xydVNjYW5EaXJlY3RvcnkoaW50IHNscnVfaWQsIFNscnVQYWdl UHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJICBTbHJ1U2NhbkNhbGxiYWNrIGNh bGxiYWNrLCB2b2lkICpkYXRhKQogewogCWJvb2wJCXJldHZhbCA9IGZhbHNlOwogCURJUgkJICAg KmNsZGlyOwogCXN0cnVjdCBkaXJlbnQgKmNsZGU7CiAJaW50CQkJc2Vnbm87CiAJaW50CQkJc2Vn cGFnZTsKKwljb25zdCBjaGFyICpwYXRoOworCisJcGF0aCA9IHNscnVfZGlyc1tzbHJ1X2lkXTsK IAotCWNsZGlyID0gQWxsb2NhdGVEaXIoY3RsLT5EaXIpOwotCXdoaWxlICgoY2xkZSA9IFJlYWRE aXIoY2xkaXIsIGN0bC0+RGlyKSkgIT0gTlVMTCkKKwljbGRpciA9IEFsbG9jYXRlRGlyKHBhdGgp OworCXdoaWxlICgoY2xkZSA9IFJlYWREaXIoY2xkaXIsIHBhdGgpKSAhPSBOVUxMKQogCXsKIAkJ c2l6ZV90CQlsZW47CiAKQEAgLTE1NzMsOCArMzQwLDggQEAgU2xydVNjYW5EaXJlY3RvcnkoU2xy dUN0bCBjdGwsIFNscnVTY2FuQ2FsbGJhY2sgY2FsbGJhY2ssIHZvaWQgKmRhdGEpCiAJCQlzZWdw YWdlID0gc2Vnbm8gKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOwogCiAJCQllbG9nKERFQlVHMiwg IlNscnVTY2FuRGlyZWN0b3J5IGludm9raW5nIGNhbGxiYWNrIG9uICVzLyVzIiwKLQkJCQkgY3Rs LT5EaXIsIGNsZGUtPmRfbmFtZSk7Ci0JCQlyZXR2YWwgPSBjYWxsYmFjayhjdGwsIGNsZGUtPmRf bmFtZSwgc2VncGFnZSwgZGF0YSk7CisJCQkJIHBhdGgsIGNsZGUtPmRfbmFtZSk7CisJCQlyZXR2 YWwgPSBjYWxsYmFjayhzbHJ1X2lkLCBQYWdlUHJlY2VkZXMsIGNsZGUtPmRfbmFtZSwgc2VncGFn ZSwgZGF0YSk7CiAJCQlpZiAocmV0dmFsKQogCQkJCWJyZWFrOwogCQl9CkBAIC0xNTg1LDI5ICsz NTIsNzQgQEAgU2xydVNjYW5EaXJlY3RvcnkoU2xydUN0bCBjdGwsIFNscnVTY2FuQ2FsbGJhY2sg Y2FsbGJhY2ssIHZvaWQgKmRhdGEpCiB9CiAKIC8qCi0gKiBJbmRpdmlkdWFsIFNMUlVzIChjbG9n LCAuLi4pIGhhdmUgdG8gcHJvdmlkZSBhIHN5bmMuYyBoYW5kbGVyIGZ1bmN0aW9uIHNvCi0gKiB0 aGF0IHRoZXkgY2FuIHByb3ZpZGUgdGhlIGNvcnJlY3QgIlNscnVDdGwiIChvdGhlcndpc2Ugd2Ug ZG9uJ3Qga25vdyBob3cgdG8KLSAqIGJ1aWxkIHRoZSBwYXRoKSwgYnV0IHRoZXkganVzdCBmb3J3 YXJkIHRvIHRoaXMgY29tbW9uIGltcGxlbWVudGF0aW9uIHRoYXQKLSAqIHBlcmZvcm1zIHRoZSBm c3luYy4KKyAqIFJlYWQgYSBidWZmZXIuICBCdWZmZXIgaXMgcGlubmVkIG9uIHJldHVybi4KKyAq LworQnVmZmVyCitSZWFkU2xydUJ1ZmZlcihpbnQgc2xydV9pZCwgaW50IHBhZ2VubywgUmVhZEJ1 ZmZlck1vZGUgbW9kZSkKK3sKKwlpbnQJCQlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVS X1NFR01FTlQ7CisJaW50CQkJcnBhZ2VubyA9IHBhZ2VubyAlIFNMUlVfUEFHRVNfUEVSX1NFR01F TlQ7CisJUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IgPSBTbHJ1UmVsRmlsZUxvY2F0b3Ioc2xydV9p ZCwgc2Vnbm8pOworCUJ1ZmZlcgkJYnVmZmVyOworCWJvb2wJCWhpdDsKKworCS8qIFRyeSB0byBh dm9pZCBkb2luZyBhIGJ1ZmZlciBtYXBwaW5nIHRhYmxlIGxvb2t1cCBmb3IgcmVwZWF0ZWQgYWNj ZXNzLiAqLworCWJ1ZmZlciA9IHNscnVfcmVjZW50X2J1ZmZlcnNbc2xydV9pZF0ucmVjZW50X2J1 ZmZlcjsKKwlpZiAoc2xydV9yZWNlbnRfYnVmZmVyc1tzbHJ1X2lkXS5wYWdlbm8gPT0gcGFnZW5v ICYmCisJCUJ1ZmZlcklzVmFsaWQoYnVmZmVyKSAmJgorCQlSZWFkUmVjZW50QnVmZmVyKHJsb2Nh dG9yLCBNQUlOX0ZPUktOVU0sIHBhZ2VubywgYnVmZmVyKSkKKwl7CisJCXBnc3RhdF9jb3VudF9z bHJ1X3BhZ2VfaGl0KHNscnVfaWQpOworCQlyZXR1cm4gYnVmZmVyOworCX0KKworCS8qIFJlZ3Vs YXIgbG9va3VwLiAqLworCWJ1ZmZlciA9IFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGVXaXRoSGl0 KHJsb2NhdG9yLCBNQUlOX0ZPUktOVU0sIHJwYWdlbm8sCisJCQkJCQkJCQkJCSAgbW9kZSwgTlVM TCwgdHJ1ZSwgJmhpdCk7CisKKwkvKiBSZW1lbWJlciB3aGVyZSB0aGlzIHBhZ2UgaXMgZm9yIG5l eHQgdGltZS4gKi8KKwlzbHJ1X3JlY2VudF9idWZmZXJzW3NscnVfaWRdLnBhZ2VubyA9IHBhZ2Vu bzsKKwlzbHJ1X3JlY2VudF9idWZmZXJzW3NscnVfaWRdLnJlY2VudF9idWZmZXIgPSBidWZmZXI7 CisKKwlpZiAoaGl0KQorCQlwZ3N0YXRfY291bnRfc2xydV9wYWdlX2hpdChzbHJ1X2lkKTsKKwor CXJldHVybiBidWZmZXI7Cit9CisKKy8qCisgKiBaZXJvLWluaXRpYWxpemUgYSBidWZmZXIuICBC dWZmZXIgaXMgcGlubmVkIGFuZCBleGNsdXNpdmVseSBsb2NrZWQgb24gcmV0dXJuLgogICovCi1p bnQKLVNscnVTeW5jRmlsZVRhZyhTbHJ1Q3RsIGN0bCwgY29uc3QgRmlsZVRhZyAqZnRhZywgY2hh ciAqcGF0aCkKK0J1ZmZlcgorWmVyb1NscnVCdWZmZXIoaW50IHNscnVfaWQsIGludCBwYWdlbm8p CiB7Ci0JaW50CQkJZmQ7Ci0JaW50CQkJc2F2ZV9lcnJubzsKLQlpbnQJCQlyZXN1bHQ7CisJaW50 CQkJc2Vnbm8gPSBwYWdlbm8gLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworCWludAkJCXJwYWdl bm8gPSBwYWdlbm8gJSBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UOworCVJlbEZpbGVMb2NhdG9yIHJs b2NhdG9yID0gU2xydVJlbEZpbGVMb2NhdG9yKHNscnVfaWQsIHNlZ25vKTsKKwlCdWZmZXIJCWJ1 ZmZlcjsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKIAotCVNscnVGaWxlTmFtZShjdGwsIHBhdGgs IGZ0YWctPnNlZ25vKTsKKwlzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2Vu ZElkLCBNQUlOX0ZPUktOVU0pOworCWlmICghc21ncmV4aXN0cyhzZmlsZSkpCisJCXNtZ3JjcmVh dGUoc2ZpbGUsIGZhbHNlKTsKKwkKKwlidWZmZXIgPSBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hl KHJsb2NhdG9yLCBNQUlOX0ZPUktOVU0sIHJwYWdlbm8sIFJCTV9aRVJPX0FORF9MT0NLLCBOVUxM LCB0cnVlKTsKIAotCWZkID0gT3BlblRyYW5zaWVudEZpbGUocGF0aCwgT19SRFdSIHwgUEdfQklO QVJZKTsKLQlpZiAoZmQgPCAwKQotCQlyZXR1cm4gLTE7CisJLyogUmVtZW1iZXIgd2hlcmUgdGhp cyBwYWdlIGlzIGZvciBuZXh0IHRpbWUuICovCisJc2xydV9yZWNlbnRfYnVmZmVyc1tzbHJ1X2lk XS5wYWdlbm8gPSBwYWdlbm87CisJc2xydV9yZWNlbnRfYnVmZmVyc1tzbHJ1X2lkXS5yZWNlbnRf YnVmZmVyID0gYnVmZmVyOwogCi0JcmVzdWx0ID0gcGdfZnN5bmMoZmQpOwotCXNhdmVfZXJybm8g PSBlcnJubzsKKwlwZ3N0YXRfY291bnRfc2xydV9wYWdlX3plcm9lZChzbHJ1X2lkKTsKIAotCUNs b3NlVHJhbnNpZW50RmlsZShmZCk7CisJcmV0dXJuIGJ1ZmZlcjsKK30KKworYm9vbAorUHJvYmVT bHJ1QnVmZmVyKGludCBzbHJ1X2lkLCBpbnQgcGFnZW5vKQoreworCWludAkJCXNlZ25vID0gcGFn ZW5vIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKKwlpbnQJCQlycGFnZW5vID0gcGFnZW5vICUg U0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKKwlSZWxGaWxlTG9jYXRvciBybG9jYXRvciA9IFNscnVS ZWxGaWxlTG9jYXRvcihzbHJ1X2lkLCBzZWdubyk7CiAKLQllcnJubyA9IHNhdmVfZXJybm87Ci0J cmV0dXJuIHJlc3VsdDsKKwlyZXR1cm4gQnVmZmVyUHJvYmUocmxvY2F0b3IsIE1BSU5fRk9SS05V TSwgcnBhZ2Vubyk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9z dWJ0cmFucy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJhbnMuYwppbmRleCA2 MmJiNjEwMTY3Yy4uMzNlZGU4MTM4ZDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3N1YnRyYW5zLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vc3VidHJh bnMuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9zdWJ0cmFucy5oIgogI2lu Y2x1ZGUgImFjY2Vzcy90cmFuc2FtLmgiCiAjaW5jbHVkZSAicGdfdHJhY2UuaCIKKyNpbmNsdWRl ICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKIAogCkBAIC00 OSwyMSArNTAsMTMgQEAKICAqLwogCiAvKiBXZSBuZWVkIGZvdXIgYnl0ZXMgcGVyIHhhY3QgKi8K LSNkZWZpbmUgU1VCVFJBTlNfWEFDVFNfUEVSX1BBR0UgKEJMQ0tTWiAvIHNpemVvZihUcmFuc2Fj dGlvbklkKSkKKyNkZWZpbmUgU1VCVFJBTlNfWEFDVFNfUEVSX1BBR0UgKChCTENLU1ogLSBTaXpl T2ZQYWdlSGVhZGVyRGF0YSkgLyBzaXplb2YoVHJhbnNhY3Rpb25JZCkpCiAKICNkZWZpbmUgVHJh bnNhY3Rpb25JZFRvUGFnZSh4aWQpICgoeGlkKSAvIChUcmFuc2FjdGlvbklkKSBTVUJUUkFOU19Y QUNUU19QRVJfUEFHRSkKICNkZWZpbmUgVHJhbnNhY3Rpb25JZFRvRW50cnkoeGlkKSAoKHhpZCkg JSAoVHJhbnNhY3Rpb25JZCkgU1VCVFJBTlNfWEFDVFNfUEVSX1BBR0UpCiAKIAotLyoKLSAqIExp bmsgdG8gc2hhcmVkLW1lbW9yeSBkYXRhIHN0cnVjdHVyZXMgZm9yIFNVQlRSQU5TIGNvbnRyb2wK LSAqLwotc3RhdGljIFNscnVDdGxEYXRhIFN1YlRyYW5zQ3RsRGF0YTsKLQotI2RlZmluZSBTdWJU cmFuc0N0bCAgKCZTdWJUcmFuc0N0bERhdGEpCi0KLQotc3RhdGljIGludAlaZXJvU1VCVFJBTlNQ YWdlKGludCBwYWdlbm8pOworc3RhdGljIEJ1ZmZlciBaZXJvU1VCVFJBTlNQYWdlKGludCBwYWdl bm8pOwogc3RhdGljIGJvb2wgU3ViVHJhbnNQYWdlUHJlY2VkZXMoaW50IHBhZ2UxLCBpbnQgcGFn ZTIpOwogCiAKQEAgLTc1LDE2ICs2OCwxNSBAQCBTdWJUcmFuc1NldFBhcmVudChUcmFuc2FjdGlv bklkIHhpZCwgVHJhbnNhY3Rpb25JZCBwYXJlbnQpCiB7CiAJaW50CQkJcGFnZW5vID0gVHJhbnNh Y3Rpb25JZFRvUGFnZSh4aWQpOwogCWludAkJCWVudHJ5bm8gPSBUcmFuc2FjdGlvbklkVG9FbnRy eSh4aWQpOwotCWludAkJCXNsb3RubzsKIAlUcmFuc2FjdGlvbklkICpwdHI7CisJQnVmZmVyCQli dWZmZXI7CiAKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQocGFyZW50KSk7CiAJQXNzZXJ0 KFRyYW5zYWN0aW9uSWRGb2xsb3dzKHhpZCwgcGFyZW50KSk7CiAKLQlMV0xvY2tBY3F1aXJlKFN1 YnRyYW5zU0xSVUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0KLQlzbG90bm8gPSBTaW1wbGVMcnVSZWFk UGFnZShTdWJUcmFuc0N0bCwgcGFnZW5vLCB0cnVlLCB4aWQpOwotCXB0ciA9IChUcmFuc2FjdGlv bklkICopIFN1YlRyYW5zQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107CisJYnVmZmVy ID0gUmVhZFNscnVCdWZmZXIoU0xSVV9TVUJUUkFOU19JRCwgcGFnZW5vLCBSQk1fTk9STUFMKTsK KwlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsKKwlwdHIgPSAoVHJh bnNhY3Rpb25JZCAqKSBQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKTsKIAlw dHIgKz0gZW50cnlubzsKIAogCS8qCkBAIC05NiwxMCArODgsMTAgQEAgU3ViVHJhbnNTZXRQYXJl bnQoVHJhbnNhY3Rpb25JZCB4aWQsIFRyYW5zYWN0aW9uSWQgcGFyZW50KQogCXsKIAkJQXNzZXJ0 KCpwdHIgPT0gSW52YWxpZFRyYW5zYWN0aW9uSWQpOwogCQkqcHRyID0gcGFyZW50OwotCQlTdWJU cmFuc0N0bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCQlNYXJrQnVmZmVy RGlydHkoYnVmZmVyKTsKIAl9CiAKLQlMV0xvY2tSZWxlYXNlKFN1YnRyYW5zU0xSVUxvY2spOwor CVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIH0KIAogLyoKQEAgLTExMCw5ICsxMDIsOSBA QCBTdWJUcmFuc0dldFBhcmVudChUcmFuc2FjdGlvbklkIHhpZCkKIHsKIAlpbnQJCQlwYWdlbm8g PSBUcmFuc2FjdGlvbklkVG9QYWdlKHhpZCk7CiAJaW50CQkJZW50cnlubyA9IFRyYW5zYWN0aW9u SWRUb0VudHJ5KHhpZCk7Ci0JaW50CQkJc2xvdG5vOwogCVRyYW5zYWN0aW9uSWQgKnB0cjsKIAlU cmFuc2FjdGlvbklkIHBhcmVudDsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAogCS8qIENhbid0IGFzayBh Ym91dCBzdHVmZiB0aGF0IG1pZ2h0IG5vdCBiZSBhcm91bmQgYW55bW9yZSAqLwogCUFzc2VydChU cmFuc2FjdGlvbklkRm9sbG93c09yRXF1YWxzKHhpZCwgVHJhbnNhY3Rpb25YbWluKSk7CkBAIC0x MjEsMTUgKzExMywxNCBAQCBTdWJUcmFuc0dldFBhcmVudChUcmFuc2FjdGlvbklkIHhpZCkKIAlp ZiAoIVRyYW5zYWN0aW9uSWRJc05vcm1hbCh4aWQpKQogCQlyZXR1cm4gSW52YWxpZFRyYW5zYWN0 aW9uSWQ7CiAKLQkvKiBsb2NrIGlzIGFjcXVpcmVkIGJ5IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRP bmx5ICovCisJYnVmZmVyID0gUmVhZFNscnVCdWZmZXIoU0xSVV9TVUJUUkFOU19JRCwgcGFnZW5v LCBSQk1fTk9STUFMKTsKIAotCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KFN1 YlRyYW5zQ3RsLCBwYWdlbm8sIHhpZCk7Ci0JcHRyID0gKFRyYW5zYWN0aW9uSWQgKikgU3ViVHJh bnNDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKwlwdHIgPSAoVHJhbnNhY3Rpb25J ZCAqKSBQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKTsKIAlwdHIgKz0gZW50 cnlubzsKIAogCXBhcmVudCA9ICpwdHI7CiAKLQlMV0xvY2tSZWxlYXNlKFN1YnRyYW5zU0xSVUxv Y2spOworCVJlbGVhc2VCdWZmZXIoYnVmZmVyKTsKIAogCXJldHVybiBwYXJlbnQ7CiB9CkBAIC0x NzcsMjYgKzE2OCw2IEBAIFN1YlRyYW5zR2V0VG9wbW9zdFRyYW5zYWN0aW9uKFRyYW5zYWN0aW9u SWQgeGlkKQogCXJldHVybiBwcmV2aW91c1hpZDsKIH0KIAotCi0vKgotICogSW5pdGlhbGl6YXRp b24gb2Ygc2hhcmVkIG1lbW9yeSBmb3IgU1VCVFJBTlMKLSAqLwotU2l6ZQotU1VCVFJBTlNTaG1l bVNpemUodm9pZCkKLXsKLQlyZXR1cm4gU2ltcGxlTHJ1U2htZW1TaXplKE5VTV9TVUJUUkFOU19C VUZGRVJTLCAwKTsKLX0KLQotdm9pZAotU1VCVFJBTlNTaG1lbUluaXQodm9pZCkKLXsKLQlTdWJU cmFuc0N0bC0+UGFnZVByZWNlZGVzID0gU3ViVHJhbnNQYWdlUHJlY2VkZXM7Ci0JU2ltcGxlTHJ1 SW5pdChTdWJUcmFuc0N0bCwgIlN1YnRyYW5zIiwgTlVNX1NVQlRSQU5TX0JVRkZFUlMsIDAsCi0J CQkJICBTdWJ0cmFuc1NMUlVMb2NrLCAicGdfc3VidHJhbnMiLAotCQkJCSAgTFdUUkFOQ0hFX1NV QlRSQU5TX0JVRkZFUiwgU1lOQ19IQU5ETEVSX05PTkUpOwotCVNscnVQYWdlUHJlY2VkZXNVbml0 VGVzdHMoU3ViVHJhbnNDdGwsIFNVQlRSQU5TX1hBQ1RTX1BFUl9QQUdFKTsKLX0KLQogLyoKICAq IFRoaXMgZnVuYyBtdXN0IGJlIGNhbGxlZCBPTkNFIG9uIHN5c3RlbSBpbnN0YWxsLiAgSXQgY3Jl YXRlcwogICogdGhlIGluaXRpYWwgU1VCVFJBTlMgc2VnbWVudC4gIChUaGUgU1VCVFJBTlMgZGly ZWN0b3J5IGlzIGFzc3VtZWQgdG8KQEAgLTIxMCwxOCArMTgxLDE2IEBAIFNVQlRSQU5TU2htZW1J bml0KHZvaWQpCiB2b2lkCiBCb290U3RyYXBTVUJUUkFOUyh2b2lkKQogewotCWludAkJCXNsb3Ru bzsKKwlCdWZmZXIJCWJ1ZmZlcjsKIAotCUxXTG9ja0FjcXVpcmUoU3VidHJhbnNTTFJVTG9jaywg TFdfRVhDTFVTSVZFKTsKKwlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFN1YlRyYW5zUGFnZVBy ZWNlZGVzLCBTVUJUUkFOU19YQUNUU19QRVJfUEFHRSk7CiAKIAkvKiBDcmVhdGUgYW5kIHplcm8g dGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHN1YnRyYW5zIGxvZyAqLwotCXNsb3RubyA9IFplcm9TVUJU UkFOU1BhZ2UoMCk7CisJYnVmZmVyID0gWmVyb1NVQlRSQU5TUGFnZSgwKTsKIAogCS8qIE1ha2Ug c3VyZSBpdCdzIHdyaXR0ZW4gb3V0ICovCi0JU2ltcGxlTHJ1V3JpdGVQYWdlKFN1YlRyYW5zQ3Rs LCBzbG90bm8pOwotCUFzc2VydCghU3ViVHJhbnNDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90 bm9dKTsKLQotCUxXTG9ja1JlbGVhc2UoU3VidHJhbnNTTFJVTG9jayk7CisJRmx1c2hPbmVCdWZm ZXIoYnVmZmVyKTsKKwlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiB9CiAKIC8qCkBAIC0y MzIsMTAgKzIwMSwxOSBAQCBCb290U3RyYXBTVUJUUkFOUyh2b2lkKQogICoKICAqIENvbnRyb2wg bG9jayBtdXN0IGJlIGhlbGQgYXQgZW50cnksIGFuZCB3aWxsIGJlIGhlbGQgYXQgZXhpdC4KICAq Lwotc3RhdGljIGludAorc3RhdGljIEJ1ZmZlcgogWmVyb1NVQlRSQU5TUGFnZShpbnQgcGFnZW5v KQogewotCXJldHVybiBTaW1wbGVMcnVaZXJvUGFnZShTdWJUcmFuc0N0bCwgcGFnZW5vKTsKKwlC dWZmZXIJCWJ1ZmZlcjsKKwlQYWdlCQlwYWdlOworCisJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIo U0xSVV9TVUJUUkFOU19JRCwgcGFnZW5vKTsKKwlwYWdlID0gQnVmZmVyR2V0UGFnZShidWZmZXIp OworCVBhZ2VJbml0U0xSVShwYWdlLCBCTENLU1osIDApOworCisJTWFya0J1ZmZlckRpcnR5KGJ1 ZmZlcik7CisKKwlyZXR1cm4gYnVmZmVyOwogfQogCiAvKgpAQCAtMjU4LDcgKzIzNiw2IEBAIFN0 YXJ0dXBTVUJUUkFOUyhUcmFuc2FjdGlvbklkIG9sZGVzdEFjdGl2ZVhJRCkKIAkgKiBXaGVuZXZl ciB3ZSBhZHZhbmNlIGludG8gYSBuZXcgcGFnZSwgRXh0ZW5kU1VCVFJBTlMgd2lsbCBsaWtld2lz ZSB6ZXJvCiAJICogdGhlIG5ldyBwYWdlIHdpdGhvdXQgcmVnYXJkIHRvIHdoYXRldmVyIHdhcyBw cmV2aW91c2x5IG9uIGRpc2suCiAJICovCi0JTFdMb2NrQWNxdWlyZShTdWJ0cmFuc1NMUlVMb2Nr LCBMV19FWENMVVNJVkUpOwogCiAJc3RhcnRQYWdlID0gVHJhbnNhY3Rpb25JZFRvUGFnZShvbGRl c3RBY3RpdmVYSUQpOwogCW5leHRYaWQgPSBTaG1lbVZhcmlhYmxlQ2FjaGUtPm5leHRYaWQ7CkBA IC0yNjYsMzYgKzI0MywxNSBAQCBTdGFydHVwU1VCVFJBTlMoVHJhbnNhY3Rpb25JZCBvbGRlc3RB Y3RpdmVYSUQpCiAKIAl3aGlsZSAoc3RhcnRQYWdlICE9IGVuZFBhZ2UpCiAJewotCQkodm9pZCkg WmVyb1NVQlRSQU5TUGFnZShzdGFydFBhZ2UpOworCQlVbmxvY2tSZWxlYXNlQnVmZmVyKFplcm9T VUJUUkFOU1BhZ2Uoc3RhcnRQYWdlKSk7CiAJCXN0YXJ0UGFnZSsrOwogCQkvKiBtdXN0IGFjY291 bnQgZm9yIHdyYXBhcm91bmQgKi8KIAkJaWYgKHN0YXJ0UGFnZSA+IFRyYW5zYWN0aW9uSWRUb1Bh Z2UoTWF4VHJhbnNhY3Rpb25JZCkpCiAJCQlzdGFydFBhZ2UgPSAwOwogCX0KLQkodm9pZCkgWmVy b1NVQlRSQU5TUGFnZShzdGFydFBhZ2UpOwotCi0JTFdMb2NrUmVsZWFzZShTdWJ0cmFuc1NMUlVM b2NrKTsKLX0KLQotLyoKLSAqIFBlcmZvcm0gYSBjaGVja3BvaW50IC0tLSBlaXRoZXIgZHVyaW5n IHNodXRkb3duLCBvciBvbi10aGUtZmx5Ci0gKi8KLXZvaWQKLUNoZWNrUG9pbnRTVUJUUkFOUyh2 b2lkKQotewotCS8qCi0JICogV3JpdGUgZGlydHkgU1VCVFJBTlMgcGFnZXMgdG8gZGlzawotCSAq Ci0JICogVGhpcyBpcyBub3QgYWN0dWFsbHkgbmVjZXNzYXJ5IGZyb20gYSBjb3JyZWN0bmVzcyBw b2ludCBvZiB2aWV3LiBXZSBkbwotCSAqIGl0IG1lcmVseSB0byBpbXByb3ZlIHRoZSBvZGRzIHRo YXQgd3JpdGluZyBvZiBkaXJ0eSBwYWdlcyBpcyBkb25lIGJ5Ci0JICogdGhlIGNoZWNrcG9pbnQg cHJvY2VzcyBhbmQgbm90IGJ5IGJhY2tlbmRzLgotCSAqLwotCVRSQUNFX1BPU1RHUkVTUUxfU1VC VFJBTlNfQ0hFQ0tQT0lOVF9TVEFSVCh0cnVlKTsKLQlTaW1wbGVMcnVXcml0ZUFsbChTdWJUcmFu c0N0bCwgdHJ1ZSk7Ci0JVFJBQ0VfUE9TVEdSRVNRTF9TVUJUUkFOU19DSEVDS1BPSU5UX0RPTkUo dHJ1ZSk7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihaZXJvU1VCVFJBTlNQYWdlKHN0YXJ0UGFnZSkp OwogfQogCi0KIC8qCiAgKiBNYWtlIHN1cmUgdGhhdCBTVUJUUkFOUyBoYXMgcm9vbSBmb3IgYSBu ZXdseS1hbGxvY2F0ZWQgWElELgogICoKQEAgLTMxOSwxMiArMjc1LDggQEAgRXh0ZW5kU1VCVFJB TlMoVHJhbnNhY3Rpb25JZCBuZXdlc3RYYWN0KQogCiAJcGFnZW5vID0gVHJhbnNhY3Rpb25JZFRv UGFnZShuZXdlc3RYYWN0KTsKIAotCUxXTG9ja0FjcXVpcmUoU3VidHJhbnNTTFJVTG9jaywgTFdf RVhDTFVTSVZFKTsKLQogCS8qIFplcm8gdGhlIHBhZ2UgKi8KLQlaZXJvU1VCVFJBTlNQYWdlKHBh Z2Vubyk7Ci0KLQlMV0xvY2tSZWxlYXNlKFN1YnRyYW5zU0xSVUxvY2spOworCVVubG9ja1JlbGVh c2VCdWZmZXIoWmVyb1NVQlRSQU5TUGFnZShwYWdlbm8pKTsKIH0KIAogCkBAIC0zNTAsNyArMzAy LDcgQEAgVHJ1bmNhdGVTVUJUUkFOUyhUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3QpCiAJVHJhbnNh Y3Rpb25JZFJldHJlYXQob2xkZXN0WGFjdCk7CiAJY3V0b2ZmUGFnZSA9IFRyYW5zYWN0aW9uSWRU b1BhZ2Uob2xkZXN0WGFjdCk7CiAKLQlTaW1wbGVMcnVUcnVuY2F0ZShTdWJUcmFuc0N0bCwgY3V0 b2ZmUGFnZSk7CisJU2ltcGxlTHJ1VHJ1bmNhdGUoU0xSVV9TVUJUUkFOU19JRCwgU3ViVHJhbnNQ YWdlUHJlY2VkZXMsIGN1dG9mZlBhZ2UpOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3Qu YwppbmRleCBiODc2NDAxMjYwNy4uN2Q0ODAwYTVmMjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94 YWN0LmMKQEAgLTY4LDYgKzY4LDcgQEAKICNpbmNsdWRlICJ1dGlscy9pbnZhbC5oIgogI2luY2x1 ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsbWFwcGVyLmgiCisjaW5j bHVkZSAidXRpbHMvcmVzb3duZXJfcHJpdmF0ZS5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3Iu aCIKICNpbmNsdWRlICJ1dGlscy90aW1lb3V0LmgiCiAjaW5jbHVkZSAidXRpbHMvdGltZXN0YW1w LmgiCkBAIC0xMzk3LDYgKzEzOTgsNyBAQCBSZWNvcmRUcmFuc2FjdGlvbkNvbW1pdCh2b2lkKQog CQkgKiBhcmUgZGVsYXlpbmcgdGhlIGNoZWNrcG9pbnQgYSBiaXQgZnV6enksIGJ1dCBpdCBkb2Vz bid0IG1hdHRlci4KIAkJICovCiAJCUFzc2VydCgoTXlQcm9jLT5kZWxheUNoa3B0RmxhZ3MgJiBE RUxBWV9DSEtQVF9TVEFSVCkgPT0gMCk7CisKIAkJU1RBUlRfQ1JJVF9TRUNUSU9OKCk7CiAJCU15 UHJvYy0+ZGVsYXlDaGtwdEZsYWdzIHw9IERFTEFZX0NIS1BUX1NUQVJUOwogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9nLmMKaW5kZXggZjlmMGY2ZGI4ZDEuLjY4OTE3ZDE3Mjk5IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0veGxvZy5jCkBAIC00NjM4LDYgKzQ2MzgsNyBAQCBCb290U3RyYXBYTE9HKHZv aWQpCiAJdWludDY0CQlzeXNpZGVudGlmaWVyOwogCXN0cnVjdCB0aW1ldmFsIHR2OwogCXBnX2Ny YzMyYwljcmM7CisJUmVzb3VyY2VPd25lciByZXNvd25lcjsKIAogCS8qIGFsbG93IG9yZGluYXJ5 IFdBTCBzZWdtZW50IGNyZWF0aW9uLCBsaWtlIFN0YXJ0dXBYTE9HKCkgd291bGQgKi8KIAlTZXRJ bnN0YWxsWExvZ0ZpbGVTZWdtZW50QWN0aXZlKCk7CkBAIC00Nzc3LDEwICs0Nzc4LDE0IEBAIEJv b3RTdHJhcFhMT0codm9pZCkKIAlXcml0ZUNvbnRyb2xGaWxlKCk7CiAKIAkvKiBCb290c3RyYXAg dGhlIGNvbW1pdCBsb2csIHRvbyAqLworCXJlc293bmVyID0gUmVzb3VyY2VPd25lckNyZWF0ZShO VUxMLCAiYm9vdHN0cmFwIHJlc293bmVyIik7CisJQ3VycmVudFJlc291cmNlT3duZXIgPSByZXNv d25lcjsKIAlCb290U3RyYXBDTE9HKCk7CiAJQm9vdFN0cmFwQ29tbWl0VHMoKTsKIAlCb290U3Ry YXBTVUJUUkFOUygpOwogCUJvb3RTdHJhcE11bHRpWGFjdCgpOworCUN1cnJlbnRSZXNvdXJjZU93 bmVyID0gTlVMTDsKKwlSZXNvdXJjZU93bmVyRGVsZXRlKHJlc293bmVyKTsKIAogCXBmcmVlKGJ1 ZmZlcik7CiAKQEAgLTQ3ODksNiArNDc5NCw4IEBAIEJvb3RTdHJhcFhMT0codm9pZCkKIAkgKiBv dGhlcndpc2UgbmV2ZXIgcnVuIHRoZSBjaGVja3MgYW5kIEdVQyByZWxhdGVkIGluaXRpYWxpemF0 aW9ucyB0aGVyZWluLgogCSAqLwogCVJlYWRDb250cm9sRmlsZSgpOworCisJc21ncmNsb3NlYWxs KCk7CiB9CiAKIHN0YXRpYyBjaGFyICoKQEAgLTY5OTcsMTUgKzcwMDQsMTEgQEAgQ2hlY2tQb2lu dEd1dHMoWExvZ1JlY1B0ciBjaGVja1BvaW50UmVkbywgaW50IGZsYWdzKQogCUNoZWNrUG9pbnRT bmFwQnVpbGQoKTsKIAlDaGVja1BvaW50TG9naWNhbFJld3JpdGVIZWFwKCk7CiAJQ2hlY2tQb2lu dFJlcGxpY2F0aW9uT3JpZ2luKCk7CisJQ2hlY2tQb2ludFByZWRpY2F0ZSgpOwogCi0JLyogV3Jp dGUgb3V0IGFsbCBkaXJ0eSBkYXRhIGluIFNMUlVzIGFuZCB0aGUgbWFpbiBidWZmZXIgcG9vbCAq LworCS8qIFdyaXRlIG91dCBhbGwgZGlydHkgZGF0YSBpbiB0aGUgYnVmZmVyIHBvb2wgKi8KIAlU UkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9DSEVDS1BPSU5UX1NUQVJUKGZsYWdzKTsKIAlDaGVja3Bv aW50U3RhdHMuY2twdF93cml0ZV90ID0gR2V0Q3VycmVudFRpbWVzdGFtcCgpOwotCUNoZWNrUG9p bnRDTE9HKCk7Ci0JQ2hlY2tQb2ludENvbW1pdFRzKCk7Ci0JQ2hlY2tQb2ludFNVQlRSQU5TKCk7 Ci0JQ2hlY2tQb2ludE11bHRpWGFjdCgpOwotCUNoZWNrUG9pbnRQcmVkaWNhdGUoKTsKIAlDaGVj a1BvaW50QnVmZmVycyhmbGFncyk7CiAKIAkvKiBQZXJmb3JtIGFsbCBxdWV1ZWQgdXAgZnN5bmNz ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncHJlZmV0Y2hl ci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3ByZWZldGNoZXIuYwppbmRleCAw NDZlNDBkMTQzYS4uNTA2NzRjZDhiNTMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3hsb2dwcmVmZXRjaGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZ3ByZWZldGNoZXIuYwpAQCAtNjUyLDcgKzY1Miw3IEBAIFhMb2dQcmVmZXRjaGVyTmV4dEJs b2NrKHVpbnRwdHJfdCBwZ3NyX3ByaXZhdGUsIFhMb2dSZWNQdHIgKmxzbikKIAkJewogCQkJaW50 CQkJYmxvY2tfaWQgPSBwcmVmZXRjaGVyLT5uZXh0X2Jsb2NrX2lkKys7CiAJCQlEZWNvZGVkQmtw QmxvY2sgKmJsb2NrID0gJnJlY29yZC0+YmxvY2tzW2Jsb2NrX2lkXTsKLQkJCVNNZ3JSZWxhdGlv biByZWxuOworCQkJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAJCQlQcmVmZXRjaEJ1ZmZlclJlc3Vs dCByZXN1bHQ7CiAKIAkJCWlmICghYmxvY2stPmluX3VzZSkKQEAgLTcyMiw3ICs3MjIsNyBAQCBY TG9nUHJlZmV0Y2hlck5leHRCbG9jayh1aW50cHRyX3QgcGdzcl9wcml2YXRlLCBYTG9nUmVjUHRy ICpsc24pCiAJCQkgKiBzYW1lIHJlbGF0aW9uICh3aXRoIHNvbWUgc2NoZW1lIHRvIGhhbmRsZSBp bnZhbGlkYXRpb25zCiAJCQkgKiBzYWZlbHkpLCBidXQgZm9yIG5vdyB3ZSdsbCBjYWxsIHNtZ3Jv cGVuKCkgZXZlcnkgdGltZS4KIAkJCSAqLwotCQkJcmVsbiA9IHNtZ3JvcGVuKGJsb2NrLT5ybG9j YXRvciwgSW52YWxpZEJhY2tlbmRJZCk7CisJCQlzZmlsZSA9IHNtZ3JvcGVuKGJsb2NrLT5ybG9j YXRvciwgSW52YWxpZEJhY2tlbmRJZCwgYmxvY2stPmZvcmtudW0pOwogCiAJCQkvKgogCQkJICog SWYgdGhlIHJlbGF0aW9uIGZpbGUgZG9lc24ndCBleGlzdCBvbiBkaXNrLCBmb3IgZXhhbXBsZSBi ZWNhdXNlCkBAIC03MzEsMTQgKzczMSwxNCBAQCBYTG9nUHJlZmV0Y2hlck5leHRCbG9jayh1aW50 cHRyX3QgcGdzcl9wcml2YXRlLCBYTG9nUmVjUHRyICpsc24pCiAJCQkgKiBmdXJ0aGVyIHByZWZl dGNoaW5nIGluIHRoZSByZWxhdGlvbiB1bnRpbCB0aGlzIHJlY29yZCBpcwogCQkJICogcmVwbGF5 ZWQuCiAJCQkgKi8KLQkJCWlmICghc21ncmV4aXN0cyhyZWxuLCBNQUlOX0ZPUktOVU0pKQorCQkJ aWYgKCFzbWdyZXhpc3RzKHNmaWxlKSkKIAkJCXsKICNpZmRlZiBYTE9HUFJFRkVUQ0hFUl9ERUJV R19MRVZFTAogCQkJCWVsb2coWExPR1BSRUZFVENIRVJfREVCVUdfTEVWRUwsCiAJCQkJCSAic3Vw cHJlc3NpbmcgYWxsIHByZWZldGNoIGluIHJlbGF0aW9uICV1LyV1LyV1IHVudGlsICVYLyVYIGlz IHJlcGxheWVkLCBiZWNhdXNlIHRoZSByZWxhdGlvbiBkb2VzIG5vdCBleGlzdCBvbiBkaXNrIiwK LQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCSByZWxuLT5z bWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCSByZWxuLT5zbWdyX3Jsb2NhdG9yLmxv Y2F0b3IucmVsTnVtYmVyLAorCQkJCQkgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNP aWQsCisJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAorCQkJCQkgc2Zp bGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCiAJCQkJCSBMU05fRk9STUFUX0FS R1MocmVjb3JkLT5sc24pKTsKICNlbmRpZgogCQkJCVhMb2dQcmVmZXRjaGVyQWRkRmlsdGVyKHBy ZWZldGNoZXIsIGJsb2NrLT5ybG9jYXRvciwgMCwKQEAgLTc1MiwxNCArNzUyLDE0IEBAIFhMb2dQ cmVmZXRjaGVyTmV4dEJsb2NrKHVpbnRwdHJfdCBwZ3NyX3ByaXZhdGUsIFhMb2dSZWNQdHIgKmxz bikKIAkJCSAqIGJsb2NrIHlldCwgc3VwcHJlc3MgcHJlZmV0Y2hpbmcgb2YgdGhpcyBibG9jayBh bmQgaGlnaGVyIHVudGlsCiAJCQkgKiB0aGlzIHJlY29yZCBpcyByZXBsYXllZC4KIAkJCSAqLwot CQkJaWYgKGJsb2NrLT5ibGtubyA+PSBzbWdybmJsb2NrcyhyZWxuLCBibG9jay0+Zm9ya251bSkp CisJCQlpZiAoYmxvY2stPmJsa25vID49IHNtZ3JuYmxvY2tzKHNmaWxlKSkKIAkJCXsKICNpZmRl ZiBYTE9HUFJFRkVUQ0hFUl9ERUJVR19MRVZFTAogCQkJCWVsb2coWExPR1BSRUZFVENIRVJfREVC VUdfTEVWRUwsCiAJCQkJCSAic3VwcHJlc3NpbmcgcHJlZmV0Y2ggaW4gcmVsYXRpb24gJXUvJXUv JXUgZnJvbSBibG9jayAldSB1bnRpbCAlWC8lWCBpcyByZXBsYXllZCwgYmVjYXVzZSB0aGUgcmVs YXRpb24gaXMgdG9vIHNtYWxsIiwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5z cGNPaWQsCi0JCQkJCSByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCSBy ZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkgc2ZpbGUtPnNtZ3Jf cmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCSBzZmlsZS0+c21ncl9ybG9jYXRvci5sb2Nh dG9yLmRiT2lkLAorCQkJCQkgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIs CiAJCQkJCSBibG9jay0+Ymxrbm8sCiAJCQkJCSBMU05fRk9STUFUX0FSR1MocmVjb3JkLT5sc24p KTsKICNlbmRpZgpAQCAtNzcwLDcgKzc3MCw3IEBAIFhMb2dQcmVmZXRjaGVyTmV4dEJsb2NrKHVp bnRwdHJfdCBwZ3NyX3ByaXZhdGUsIFhMb2dSZWNQdHIgKmxzbikKIAkJCX0KIAogCQkJLyogVHJ5 IHRvIGluaXRpYXRlIHByZWZldGNoaW5nLiAqLwotCQkJcmVzdWx0ID0gUHJlZmV0Y2hTaGFyZWRC dWZmZXIocmVsbiwgYmxvY2stPmZvcmtudW0sIGJsb2NrLT5ibGtubyk7CisJCQlyZXN1bHQgPSBQ cmVmZXRjaFNoYXJlZEJ1ZmZlcihzZmlsZSwgYmxvY2stPmJsa25vKTsKIAkJCWlmIChCdWZmZXJJ c1ZhbGlkKHJlc3VsdC5yZWNlbnRfYnVmZmVyKSkKIAkJCXsKIAkJCQkvKiBDYWNoZSBoaXQsIG5v dGhpbmcgdG8gZG8uICovCkBAIC03OTYsOSArNzk2LDkgQEAgWExvZ1ByZWZldGNoZXJOZXh0Qmxv Y2sodWludHB0cl90IHBnc3JfcHJpdmF0ZSwgWExvZ1JlY1B0ciAqbHNuKQogCQkJCSAqLwogCQkJ CWVsb2coRVJST1IsCiAJCQkJCSAiY291bGQgbm90IHByZWZldGNoIHJlbGF0aW9uICV1LyV1LyV1 IGJsb2NrICV1IiwKLQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0J CQkJCSByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCSByZWxuLT5zbWdy X3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAorCQkJCQkgc2ZpbGUtPnNtZ3JfbG9jYXRvci5s b2NhdG9yLnNwY09pZCwKKwkJCQkJIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5kYk9pZCwK KwkJCQkJIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCiAJCQkJCSBibG9j ay0+Ymxrbm8pOwogCQkJfQogCQl9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9ndXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1dGlscy5j CmluZGV4IDJjMjg5NTZiMWFhLi41ZTQwMzRmN2NkNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZ3V0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZ3V0aWxzLmMKQEAgLTQ3Nyw3ICs0NzcsNyBAQCBYTG9nUmVhZEJ1ZmZlckV4dGVuZGVk KFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCiB7CiAJQmxvY2tO dW1iZXIgbGFzdGJsb2NrOwogCUJ1ZmZlcgkJYnVmZmVyOwotCVNNZ3JSZWxhdGlvbiBzbWdyOwor CVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCiAJQXNzZXJ0KGJsa25vICE9IFBfTkVXKTsKIApAQCAt NDkxLDcgKzQ5MSw3IEBAIFhMb2dSZWFkQnVmZmVyRXh0ZW5kZWQoUmVsRmlsZUxvY2F0b3Igcmxv Y2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKIAl9CiAKIAkvKiBPcGVuIHRoZSByZWxhdGlvbiBh dCBzbWdyIGxldmVsICovCi0Jc21nciA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2Vu ZElkKTsKKwlzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBmb3Jr bnVtKTsKIAogCS8qCiAJICogQ3JlYXRlIHRoZSB0YXJnZXQgZmlsZSBpZiBpdCBkb2Vzbid0IGFs cmVhZHkgZXhpc3QuICBUaGlzIGxldHMgdXMgY29wZQpAQCAtNTAxLDkgKzUwMSw5IEBAIFhMb2dS ZWFkQnVmZmVyRXh0ZW5kZWQoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9y a251bSwKIAkgKiBmaWxlc3lzdGVtIGxvc2VzIGFuIGlub2RlIGR1cmluZyBhIGNyYXNoLiAgQmV0 dGVyIHRvIHdyaXRlIHRoZSBkYXRhCiAJICogdW50aWwgd2UgYXJlIGFjdHVhbGx5IHRvbGQgdG8g ZGVsZXRlIHRoZSBmaWxlLikKIAkgKi8KLQlzbWdyY3JlYXRlKHNtZ3IsIGZvcmtudW0sIHRydWUp OworCXNtZ3JjcmVhdGUoc2ZpbGUsIHRydWUpOwogCi0JbGFzdGJsb2NrID0gc21ncm5ibG9ja3Mo c21nciwgZm9ya251bSk7CisJbGFzdGJsb2NrID0gc21ncm5ibG9ja3Moc2ZpbGUpOwogCiAJaWYg KGJsa25vIDwgbGFzdGJsb2NrKQogCXsKQEAgLTYzMSw3ICs2MzEsNyBAQCBDcmVhdGVGYWtlUmVs Y2FjaGVFbnRyeShSZWxGaWxlTG9jYXRvciBybG9jYXRvcikKIAlyZWwtPnJkX2xvY2tJbmZvLmxv Y2tSZWxJZC5kYklkID0gcmxvY2F0b3IuZGJPaWQ7CiAJcmVsLT5yZF9sb2NrSW5mby5sb2NrUmVs SWQucmVsSWQgPSBybG9jYXRvci5yZWxOdW1iZXI7CiAKLQlyZWwtPnJkX3NtZ3IgPSBOVUxMOwor CU1lbVNldChyZWwtPnJkX3NtZ3IsIDAsIHNpemVvZihyZWwtPnJkX3NtZ3IpKTsKIAogCXJldHVy biByZWw7CiB9CkBAIC02NDMsOCArNjQzLDExIEBAIHZvaWQKIEZyZWVGYWtlUmVsY2FjaGVFbnRy eShSZWxhdGlvbiBmYWtlcmVsKQogewogCS8qIG1ha2Ugc3VyZSB0aGUgZmFrZXJlbCBpcyBub3Qg cmVmZXJlbmNlZCBieSB0aGUgU21nclJlbGF0aW9uIGFueW1vcmUgKi8KLQlpZiAoZmFrZXJlbC0+ cmRfc21nciAhPSBOVUxMKQotCQlzbWdyY2xlYXJvd25lcigmZmFrZXJlbC0+cmRfc21nciwgZmFr ZXJlbC0+cmRfc21ncik7CisJZm9yIChpbnQgaSA9IDA7IGkgPD0gTUFYX0ZPUktOVU07IGkrKykK Kwl7CisJCWlmIChmYWtlcmVsLT5yZF9zbWdyW2ldICE9IE5VTEwpCisJCQlzbWdyY2xlYXJvd25l cigmZmFrZXJlbC0+cmRfc21ncltpXSwgZmFrZXJlbC0+cmRfc21ncltpXSk7CisJfQogCXBmcmVl KGZha2VyZWwpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2NhdGFsb2cu YyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvY2F0YWxvZy5jCmluZGV4IDFiZjZjNTYzM2NkLi42YjAx MTU4NjE1YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9jYXRhbG9nLmMKKysrIGIv c3JjL2JhY2tlbmQvY2F0YWxvZy9jYXRhbG9nLmMKQEAgLTUwMSwxMCArNTAxLDEwIEBAIEdldE5l d09pZFdpdGhJbmRleChSZWxhdGlvbiByZWxhdGlvbiwgT2lkIGluZGV4SWQsIEF0dHJOdW1iZXIg b2lkY29sdW1uKQogUmVsRmlsZU51bWJlcgogR2V0TmV3UmVsRmlsZU51bWJlcihPaWQgcmVsdGFi bGVzcGFjZSwgUmVsYXRpb24gcGdfY2xhc3MsIGNoYXIgcmVscGVyc2lzdGVuY2UpCiB7Ci0JUmVs RmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yOwotCWNoYXIJICAgKnJwYXRoOwotCWJvb2wJCWNv bGxpZGVzOworCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yOwogCUJhY2tlbmRJZAliYWNrZW5kOwor CVNNZ3JGaWxlSGFuZGxlIHNmaWxlOworCWJvb2wJCWNvbGxpZGVzOwogCiAJLyoKIAkgKiBJZiB3 ZSBldmVyIGdldCBoZXJlIGR1cmluZyBwZ191cGdyYWRlLCB0aGVyZSdzIHNvbWV0aGluZyB3cm9u ZzsgYWxsCkBAIC01MTMsNiArNTEzLDExIEBAIEdldE5ld1JlbEZpbGVOdW1iZXIoT2lkIHJlbHRh Ymxlc3BhY2UsIFJlbGF0aW9uIHBnX2NsYXNzLCBjaGFyIHJlbHBlcnNpc3RlbmNlKQogCSAqLwog CUFzc2VydCghSXNCaW5hcnlVcGdyYWRlKTsKIAorCS8qCisJICogVGhlIHJlbHBhdGggd2lsbCB2 YXJ5IGJhc2VkIG9uIHRoZSBiYWNrZW5kIElELCBzbyB3ZSBtdXN0IGluaXRpYWxpemUKKwkgKiB0 aGF0IHByb3Blcmx5IGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgYW55IGNvbGxpc2lvbnMgYmFzZWQg b24gZmlsZW5hbWUKKwkgKiBhcmUgcHJvcGVybHkgZGV0ZWN0ZWQuCisJICovCiAJc3dpdGNoIChy ZWxwZXJzaXN0ZW5jZSkKIAl7CiAJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfVEVNUDoKQEAgLTUyOCw1 MyArNTMzLDI5IEBAIEdldE5ld1JlbEZpbGVOdW1iZXIoT2lkIHJlbHRhYmxlc3BhY2UsIFJlbGF0 aW9uIHBnX2NsYXNzLCBjaGFyIHJlbHBlcnNpc3RlbmNlKQogCX0KIAogCS8qIFRoaXMgbG9naWMg c2hvdWxkIG1hdGNoIFJlbGF0aW9uSW5pdFBoeXNpY2FsQWRkciAqLwotCXJsb2NhdG9yLmxvY2F0 b3Iuc3BjT2lkID0gcmVsdGFibGVzcGFjZSA/IHJlbHRhYmxlc3BhY2UgOiBNeURhdGFiYXNlVGFi bGVTcGFjZTsKLQlybG9jYXRvci5sb2NhdG9yLmRiT2lkID0KLQkJKHJsb2NhdG9yLmxvY2F0b3Iu c3BjT2lkID09IEdMT0JBTFRBQkxFU1BBQ0VfT0lEKSA/CisJcmxvY2F0b3Iuc3BjT2lkID0gcmVs dGFibGVzcGFjZSA/IHJlbHRhYmxlc3BhY2UgOiBNeURhdGFiYXNlVGFibGVTcGFjZTsKKwlybG9j YXRvci5kYk9pZCA9CisJCShybG9jYXRvci5zcGNPaWQgPT0gR0xPQkFMVEFCTEVTUEFDRV9PSUQp ID8KIAkJSW52YWxpZE9pZCA6IE15RGF0YWJhc2VJZDsKIAotCS8qCi0JICogVGhlIHJlbHBhdGgg d2lsbCB2YXJ5IGJhc2VkIG9uIHRoZSBiYWNrZW5kIElELCBzbyB3ZSBtdXN0IGluaXRpYWxpemUK LQkgKiB0aGF0IHByb3Blcmx5IGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgYW55IGNvbGxpc2lvbnMg YmFzZWQgb24gZmlsZW5hbWUKLQkgKiBhcmUgcHJvcGVybHkgZGV0ZWN0ZWQuCi0JICovCi0Jcmxv Y2F0b3IuYmFja2VuZCA9IGJhY2tlbmQ7Ci0KIAlkbwogCXsKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQ VFMoKTsKIAogCQkvKiBHZW5lcmF0ZSB0aGUgT0lEICovCiAJCWlmIChwZ19jbGFzcykKLQkJCXJs b2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyID0gR2V0TmV3T2lkV2l0aEluZGV4KHBnX2NsYXNzLCBD bGFzc09pZEluZGV4SWQsCisJCQlybG9jYXRvci5yZWxOdW1iZXIgPSBHZXROZXdPaWRXaXRoSW5k ZXgocGdfY2xhc3MsIENsYXNzT2lkSW5kZXhJZCwKIAkJCQkJCQkJCQkJCQkJCUFudW1fcGdfY2xh c3Nfb2lkKTsKIAkJZWxzZQotCQkJcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIgPSBHZXROZXdP YmplY3RJZCgpOworCQkJcmxvY2F0b3IucmVsTnVtYmVyID0gR2V0TmV3T2JqZWN0SWQoKTsKIAog CQkvKiBDaGVjayBmb3IgZXhpc3RpbmcgZmlsZSBvZiBzYW1lIG5hbWUgKi8KLQkJcnBhdGggPSBy ZWxwYXRoKHJsb2NhdG9yLCBNQUlOX0ZPUktOVU0pOwotCi0JCWlmIChhY2Nlc3MocnBhdGgsIEZf T0spID09IDApCi0JCXsKLQkJCS8qIGRlZmluaXRlIGNvbGxpc2lvbiAqLwotCQkJY29sbGlkZXMg PSB0cnVlOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJLyoKLQkJCSAqIEhlcmUgd2UgaGF2ZSBhIGxp dHRsZSBiaXQgb2YgYSBkaWxlbW1hOiBpZiBlcnJubyBpcyBzb21ldGhpbmcKLQkJCSAqIG90aGVy IHRoYW4gRU5PRU5ULCBzaG91bGQgd2UgZGVjbGFyZSBhIGNvbGxpc2lvbiBhbmQgbG9vcD8gSW4K LQkJCSAqIHByYWN0aWNlIGl0IHNlZW1zIGJlc3QgdG8gZ28gYWhlYWQgcmVnYXJkbGVzcyBvZiB0 aGUgZXJybm8uICBJZgotCQkJICogdGhlcmUgaXMgYSBjb2xsaWRpbmcgZmlsZSB3ZSB3aWxsIGdl dCBhbiBzbWdyIGZhaWx1cmUgd2hlbiB3ZQotCQkJICogYXR0ZW1wdCB0byBjcmVhdGUgdGhlIG5l dyByZWxhdGlvbiBmaWxlLgotCQkJICovCi0JCQljb2xsaWRlcyA9IGZhbHNlOwotCQl9Ci0KLQkJ cGZyZWUocnBhdGgpOworCQlzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBiYWNrZW5kLCBNQUlO X0ZPUktOVU0pOworCQljb2xsaWRlcyA9IHNtZ3JleGlzdHMoc2ZpbGUpOworCQlzbWdyY2xvc2Uo c2ZpbGUpOwogCX0gd2hpbGUgKGNvbGxpZGVzKTsKIAotCXJldHVybiBybG9jYXRvci5sb2NhdG9y LnJlbE51bWJlcjsKKwlyZXR1cm4gcmxvY2F0b3IucmVsTnVtYmVyOwogfQogCiAvKgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9pbmRleC5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9p bmRleC5jCmluZGV4IDQxYjE2Y2I4OWJjLi5kMjEwNDViY2I0OSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9pbmRleC5jCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvaW5kZXguYwpA QCAtMzAyOSw5ICszMDI5LDkgQEAgaW5kZXhfYnVpbGQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAog CSAqIHJlbGZpbGVudW1iZXIgd29uJ3QgY2hhbmdlLCBhbmQgbm90aGluZyBuZWVkcyB0byBiZSBk b25lIGhlcmUuCiAJICovCiAJaWYgKGluZGV4UmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVu Y2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQgJiYKLQkJIXNtZ3JleGlzdHMoUmVsYXRpb25H ZXRTbWdyKGluZGV4UmVsYXRpb24pLCBJTklUX0ZPUktOVU0pKQorCQkhc21ncmV4aXN0cyhSZWxh dGlvbkdldFNtZ3IoaW5kZXhSZWxhdGlvbiwgSU5JVF9GT1JLTlVNKSkpCiAJewotCQlzbWdyY3Jl YXRlKFJlbGF0aW9uR2V0U21ncihpbmRleFJlbGF0aW9uKSwgSU5JVF9GT1JLTlVNLCBmYWxzZSk7 CisJCXNtZ3JjcmVhdGUoUmVsYXRpb25HZXRTbWdyKGluZGV4UmVsYXRpb24sIElOSVRfRk9SS05V TSksIGZhbHNlKTsKIAkJaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtYnVpbGRlbXB0eShpbmRl eFJlbGF0aW9uKTsKIAl9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3RvcmFn ZS5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zdG9yYWdlLmMKaW5kZXggYWYxNDkxYWExZDEuLjM4 MTY2MTBjODdjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N0b3JhZ2UuYworKysg Yi9zcmMvYmFja2VuZC9jYXRhbG9nL3N0b3JhZ2UuYwpAQCAtMTE2LDExICsxMTYsMTEgQEAgQWRk UGVuZGluZ1N5bmMoY29uc3QgUmVsRmlsZUxvY2F0b3IgKnJsb2NhdG9yKQogICogdGhhdCBkb2Vz IG5vdCB3YW50IHRoZSBzdG9yYWdlIHRvIGJlIGRlc3Ryb3llZCBpbiBjYXNlIG9mIGFuIGFib3J0 IG1heQogICogcGFzcyByZWdpc3Rlcl9kZWxldGUgPSBmYWxzZS4KICAqLwotU01nclJlbGF0aW9u CitTTWdyRmlsZUhhbmRsZQogUmVsYXRpb25DcmVhdGVTdG9yYWdlKFJlbEZpbGVMb2NhdG9yIHJs b2NhdG9yLCBjaGFyIHJlbHBlcnNpc3RlbmNlLAogCQkJCQkgIGJvb2wgcmVnaXN0ZXJfZGVsZXRl KQogewotCVNNZ3JSZWxhdGlvbiBzcmVsOworCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCUJhY2tl bmRJZAliYWNrZW5kOwogCWJvb2wJCW5lZWRzX3dhbDsKIApAQCAtMTQ1LDExICsxNDUsMTEgQEAg UmVsYXRpb25DcmVhdGVTdG9yYWdlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBjaGFyIHJlbHBl cnNpc3RlbmNlLAogCQkJcmV0dXJuIE5VTEw7CQkvKiBwbGFjYXRlIGNvbXBpbGVyICovCiAJfQog Ci0Jc3JlbCA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBiYWNrZW5kKTsKLQlzbWdyY3JlYXRlKHNyZWws IE1BSU5fRk9SS05VTSwgZmFsc2UpOworCXNmaWxlID0gc21ncm9wZW4ocmxvY2F0b3IsIGJhY2tl bmQsIE1BSU5fRk9SS05VTSk7CisJc21ncmNyZWF0ZShzZmlsZSwgZmFsc2UpOwogCiAJaWYgKG5l ZWRzX3dhbCkKLQkJbG9nX3NtZ3JjcmVhdGUoJnNyZWwtPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwg TUFJTl9GT1JLTlVNKTsKKwkJbG9nX3NtZ3JjcmVhdGUoJnJsb2NhdG9yLCBNQUlOX0ZPUktOVU0p OwogCiAJLyoKIAkgKiBBZGQgdGhlIHJlbGF0aW9uIHRvIHRoZSBsaXN0IG9mIHN0dWZmIHRvIGRl bGV0ZSBhdCBhYm9ydCwgaWYgd2UgYXJlCkBAIC0xNzUsNyArMTc1LDcgQEAgUmVsYXRpb25DcmVh dGVTdG9yYWdlKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBjaGFyIHJlbHBlcnNpc3RlbmNlLAog CQlBZGRQZW5kaW5nU3luYygmcmxvY2F0b3IpOwogCX0KIAotCXJldHVybiBzcmVsOworCXJldHVy biBzZmlsZTsKIH0KIAogLyoKQEAgLTI5MiwxNiArMjkyLDE4IEBAIFJlbGF0aW9uVHJ1bmNhdGUo UmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBuYmxvY2tzKQogCUZvcmtOdW1iZXIJZm9ya3NbTUFY X0ZPUktOVU1dOwogCUJsb2NrTnVtYmVyIGJsb2Nrc1tNQVhfRk9SS05VTV07CiAJaW50CQkJbmZv cmtzID0gMDsKLQlTTWdyUmVsYXRpb24gcmVsbjsKIAogCS8qCiAJICogTWFrZSBzdXJlIHNtZ3Jf dGFyZ2Jsb2NrIGV0YyBhcmVuJ3QgcG9pbnRpbmcgc29tZXdoZXJlIHBhc3QgbmV3IGVuZC4KIAkg KiAoTm90ZTogZG9uJ3QgcmVseSBvbiB0aGlzIHJlbG4gcG9pbnRlciBiZWxvdyB0aGlzIGxvb3Au KQogCSAqLwotCXJlbG4gPSBSZWxhdGlvbkdldFNtZ3IocmVsKTsKLQlyZWxuLT5zbWdyX3Rhcmdi bG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKLQlmb3IgKGludCBpID0gMDsgaSA8PSBNQVhfRk9S S05VTTsgKytpKQotCQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ldID0gSW52YWxpZEJsb2Nr TnVtYmVyOworCWZvciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyBpKyspCisJeworCQlT TWdyRmlsZUhhbmRsZSBzZmlsZSA9IFJlbGF0aW9uR2V0U21ncihyZWwsIGkpOworCisJCXNmaWxl LT5zbWdyX3RhcmdibG9jayA9IEludmFsaWRCbG9ja051bWJlcjsKKwkJc2ZpbGUtPnNtZ3JfY2Fj aGVkX25ibG9ja3MgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJfQogCiAJLyogUHJlcGFyZSBmb3Ig dHJ1bmNhdGlvbiBvZiBNQUlOIGZvcmsgb2YgdGhlIHJlbGF0aW9uICovCiAJZm9ya3NbbmZvcmtz XSA9IE1BSU5fRk9SS05VTTsKQEAgLTMwOSw3ICszMTEsNyBAQCBSZWxhdGlvblRydW5jYXRlKFJl bGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgbmJsb2NrcykKIAluZm9ya3MrKzsKIAogCS8qIFByZXBh cmUgZm9yIHRydW5jYXRpb24gb2YgdGhlIEZTTSBpZiBpdCBleGlzdHMgKi8KLQlmc20gPSBzbWdy ZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBGU01fRk9SS05VTSk7CisJZnNtID0gc21ncmV4 aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsLCBGU01fRk9SS05VTSkpOwogCWlmIChmc20pCiAJewog CQlibG9ja3NbbmZvcmtzXSA9IEZyZWVTcGFjZU1hcFByZXBhcmVUcnVuY2F0ZVJlbChyZWwsIG5i bG9ja3MpOwpAQCAtMzIyLDcgKzMyNCw3IEBAIFJlbGF0aW9uVHJ1bmNhdGUoUmVsYXRpb24gcmVs LCBCbG9ja051bWJlciBuYmxvY2tzKQogCX0KIAogCS8qIFByZXBhcmUgZm9yIHRydW5jYXRpb24g b2YgdGhlIHZpc2liaWxpdHkgbWFwIHRvbyBpZiBpdCBleGlzdHMgKi8KLQl2bSA9IHNtZ3JleGlz dHMoUmVsYXRpb25HZXRTbWdyKHJlbCksIFZJU0lCSUxJVFlNQVBfRk9SS05VTSk7CisJdm0gPSBz bWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwsIFZJU0lCSUxJVFlNQVBfRk9SS05VTSkpOwog CWlmICh2bSkKIAl7CiAJCWJsb2Nrc1tuZm9ya3NdID0gdmlzaWJpbGl0eW1hcF9wcmVwYXJlX3Ry dW5jYXRlKHJlbCwgbmJsb2Nrcyk7CkBAIC0zOTAsMTEgKzM5MiwxMiBAQCBSZWxhdGlvblRydW5j YXRlKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgbmJsb2NrcykKIAl9CiAKIAkvKgotCSAqIFRo aXMgd2lsbCBmaXJzdCByZW1vdmUgYW55IGJ1ZmZlcnMgZnJvbSB0aGUgYnVmZmVyIHBvb2wgdGhh dCBzaG91bGQgbm8KKwkgKiBGaXJzdCByZW1vdmUgYW55IGJ1ZmZlcnMgZnJvbSB0aGUgYnVmZmVy IHBvb2wgdGhhdCBzaG91bGQgbm8KIAkgKiBsb25nZXIgZXhpc3QgYWZ0ZXIgdHJ1bmNhdGlvbiBp cyBjb21wbGV0ZSwgYW5kIHRoZW4gdHJ1bmNhdGUgdGhlCiAJICogY29ycmVzcG9uZGluZyBmaWxl cyBvbiBkaXNrLgogCSAqLwotCXNtZ3J0cnVuY2F0ZShSZWxhdGlvbkdldFNtZ3IocmVsKSwgZm9y a3MsIG5mb3JrcywgYmxvY2tzKTsKKwlEcm9wUmVsYXRpb25CdWZmZXJzKHJlbC0+cmRfbG9jYXRv ciwgcmVsLT5yZF9iYWNrZW5kLCBmb3JrcywgbmZvcmtzLCBibG9ja3MpOworCXNtZ3J0cnVuY2F0 ZV9tdWx0aShyZWwtPnJkX2xvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCwgZm9ya3MsIG5mb3Jrcywg YmxvY2tzKTsKIAogCS8qIFdlJ3ZlIGRvbmUgYWxsIHRoZSBjcml0aWNhbCB3b3JrLCBzbyBjaGVj a3BvaW50cyBhcmUgT0sgbm93LiAqLwogCU15UHJvYy0+ZGVsYXlDaGtwdEZsYWdzICY9IH5ERUxB WV9DSEtQVF9DT01QTEVURTsKQEAgLTQyOCw3ICs0MzEsNyBAQCBSZWxhdGlvblByZVRydW5jYXRl KFJlbGF0aW9uIHJlbCkKIAkJcmV0dXJuOwogCiAJcGVuZGluZyA9IGhhc2hfc2VhcmNoKHBlbmRp bmdTeW5jSGFzaCwKLQkJCQkJCSAgJihSZWxhdGlvbkdldFNtZ3IocmVsKS0+c21ncl9ybG9jYXRv ci5sb2NhdG9yKSwKKwkJCQkJCSAgJnJlbC0+cmRfbG9jYXRvciwKIAkJCQkJCSAgSEFTSF9GSU5E LCBOVUxMKTsKIAlpZiAocGVuZGluZykKIAkJcGVuZGluZy0+aXNfdHJ1bmNhdGVkID0gdHJ1ZTsK QEAgLTQ0NCwxMiArNDQ3LDEyIEBAIFJlbGF0aW9uUHJlVHJ1bmNhdGUoUmVsYXRpb24gcmVsKQog ICogQWxzbyBub3RlIHRoYXQgdGhpcyBpcyBmcmVxdWVudGx5IGNhbGxlZCB2aWEgbG9jdXRpb25z IHN1Y2ggYXMKICAqCQlSZWxhdGlvbkNvcHlTdG9yYWdlKFJlbGF0aW9uR2V0U21ncihyZWwpLCAu Li4pOwogICogVGhhdCdzIHNhZmUgb25seSBiZWNhdXNlIHdlIHBlcmZvcm0gb25seSBzbWdyIGFu ZCBXQUwgb3BlcmF0aW9ucyBoZXJlLgotICogSWYgd2UgaW52b2tlZCBhbnl0aGluZyBlbHNlLCBh IHJlbGNhY2hlIGZsdXNoIGNvdWxkIGNhdXNlIG91ciBTTWdyUmVsYXRpb24KKyAqIElmIHdlIGlu dm9rZWQgYW55dGhpbmcgZWxzZSwgYSByZWxjYWNoZSBmbHVzaCBjb3VsZCBjYXVzZSBvdXIgU01n ckZpbGVIYW5kbGUKICAqIGFyZ3VtZW50IHRvIGJlY29tZSBhIGRhbmdsaW5nIHBvaW50ZXIuCiAg Ki8KIHZvaWQKLVJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJlbGF0aW9uIHNyYywgU01nclJlbGF0 aW9uIGRzdCwKLQkJCQkJRm9ya051bWJlciBmb3JrTnVtLCBjaGFyIHJlbHBlcnNpc3RlbmNlKQor UmVsYXRpb25Db3B5U3RvcmFnZShTTWdyRmlsZUhhbmRsZSBzcmMsIFNNZ3JGaWxlSGFuZGxlIGRz dCwKKwkJCQkJY2hhciByZWxwZXJzaXN0ZW5jZSkKIHsKIAlQR0FsaWduZWRCbG9jayBidWY7CiAJ UGFnZQkJcGFnZTsKQEAgLTQ2Niw3ICs0NjksNyBAQCBSZWxhdGlvbkNvcHlTdG9yYWdlKFNNZ3JS ZWxhdGlvbiBzcmMsIFNNZ3JSZWxhdGlvbiBkc3QsCiAJICogaXQgbmVlZHMgdG8gYmUgc3luY2Vk IHRvIGRpc2suCiAJICovCiAJY29weWluZ19pbml0Zm9yayA9IHJlbHBlcnNpc3RlbmNlID09IFJF TFBFUlNJU1RFTkNFX1VOTE9HR0VEICYmCi0JCWZvcmtOdW0gPT0gSU5JVF9GT1JLTlVNOworCQlz cmMtPnNtZ3JfbG9jYXRvci5mb3JrbnVtID09IElOSVRfRk9SS05VTTsKIAogCS8qCiAJICogV2Ug bmVlZCB0byBsb2cgdGhlIGNvcGllZCBkYXRhIGluIFdBTCBpZmYgV0FMIGFyY2hpdmluZy9zdHJl YW1pbmcgaXMKQEAgLTQ3NywxNCArNDgwLDE0IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJl bGF0aW9uIHNyYywgU01nclJlbGF0aW9uIGRzdCwKIAl1c2Vfd2FsID0gWExvZ0lzTmVlZGVkKCkg JiYKIAkJKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVCB8fCBjb3B5 aW5nX2luaXRmb3JrKTsKIAotCW5ibG9ja3MgPSBzbWdybmJsb2NrcyhzcmMsIGZvcmtOdW0pOwor CW5ibG9ja3MgPSBzbWdybmJsb2NrcyhzcmMpOwogCiAJZm9yIChibGtubyA9IDA7IGJsa25vIDwg bmJsb2NrczsgYmxrbm8rKykKIAl7CiAJCS8qIElmIHdlIGdvdCBhIGNhbmNlbCBzaWduYWwgZHVy aW5nIHRoZSBjb3B5IG9mIHRoZSBkYXRhLCBxdWl0ICovCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRT KCk7CiAKLQkJc21ncnJlYWQoc3JjLCBmb3JrTnVtLCBibGtubywgYnVmLmRhdGEpOworCQlzbWdy cmVhZChzcmMsIGJsa25vLCBidWYuZGF0YSk7CiAKIAkJaWYgKCFQYWdlSXNWZXJpZmllZEV4dGVu ZGVkKHBhZ2UsIGJsa25vLAogCQkJCQkJCQkJUElWX0xPR19XQVJOSU5HIHwgUElWX1JFUE9SVF9T VEFUKSkKQEAgLTQ5Niw5ICs0OTksNyBAQCBSZWxhdGlvbkNvcHlTdG9yYWdlKFNNZ3JSZWxhdGlv biBzcmMsIFNNZ3JSZWxhdGlvbiBkc3QsCiAJCQkgKiAoZXJyY29udGV4dCBjYWxsYmFja3Mgc2hv dWxkbid0IGJlIHJpc2tpbmcgYW55IHN1Y2ggdGhpbmcsIGJ1dAogCQkJICogcGVvcGxlIGhhdmUg YmVlbiBrbm93biB0byBmb3JnZXQgdGhhdCBydWxlLikKIAkJCSAqLwotCQkJY2hhcgkgICAqcmVs cGF0aCA9IHJlbHBhdGhiYWNrZW5kKHNyYy0+c21ncl9ybG9jYXRvci5sb2NhdG9yLAotCQkJCQkJ CQkJCQkJIHNyYy0+c21ncl9ybG9jYXRvci5iYWNrZW5kLAotCQkJCQkJCQkJCQkJIGZvcmtOdW0p OworCQkJY2hhcgkgICAqcmVscGF0aCA9IHNtZ3JmaWxlcGF0aChzcmMtPnNtZ3JfbG9jYXRvcik7 CiAKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfREFUQV9DT1JSVVBU RUQpLApAQCAtNTEyLDcgKzUxMyw3IEBAIFJlbGF0aW9uQ29weVN0b3JhZ2UoU01nclJlbGF0aW9u IHNyYywgU01nclJlbGF0aW9uIGRzdCwKIAkJICogc3BhY2UuCiAJCSAqLwogCQlpZiAodXNlX3dh bCkKLQkJCWxvZ19uZXdwYWdlKCZkc3QtPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgZm9ya051bSwg Ymxrbm8sIHBhZ2UsIGZhbHNlKTsKKwkJCWxvZ19uZXdwYWdlKCZkc3QtPnNtZ3JfbG9jYXRvci5s b2NhdG9yLCBkc3QtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBibGtubywgcGFnZSwgZmFsc2UpOwog CiAJCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UocGFnZSwgYmxrbm8pOwogCkBAIC01MjEsNyArNTIy LDcgQEAgUmVsYXRpb25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBTTWdyUmVsYXRpb24g ZHN0LAogCQkgKiBuZWVkIGZvciBzbWdyIHRvIHNjaGVkdWxlIGFuIGZzeW5jIGZvciB0aGlzIHdy aXRlOyB3ZSdsbCBkbyBpdAogCQkgKiBvdXJzZWx2ZXMgYmVsb3cuCiAJCSAqLwotCQlzbWdyZXh0 ZW5kKGRzdCwgZm9ya051bSwgYmxrbm8sIGJ1Zi5kYXRhLCB0cnVlKTsKKwkJc21ncmV4dGVuZChk c3QsIGJsa25vLCBidWYuZGF0YSwgdHJ1ZSk7CiAJfQogCiAJLyoKQEAgLTUzNCw3ICs1MzUsNyBA QCBSZWxhdGlvbkNvcHlTdG9yYWdlKFNNZ3JSZWxhdGlvbiBzcmMsIFNNZ3JSZWxhdGlvbiBkc3Qs CiAJICogdGhleSBtaWdodCBzdGlsbCBub3QgYmUgb24gZGlzayB3aGVuIHRoZSBjcmFzaCBvY2N1 cnMuCiAJICovCiAJaWYgKHVzZV93YWwgfHwgY29weWluZ19pbml0Zm9yaykKLQkJc21ncmltbWVk c3luYyhkc3QsIGZvcmtOdW0pOworCQlzbWdyaW1tZWRzeW5jKGRzdCk7CiB9CiAKIC8qCkBAIC02 NTMsOSArNjU0LDkgQEAgc21nckRvUGVuZGluZ0RlbGV0ZXMoYm9vbCBpc0NvbW1pdCkKIAlQZW5k aW5nUmVsRGVsZXRlICpwZW5kaW5nOwogCVBlbmRpbmdSZWxEZWxldGUgKnByZXY7CiAJUGVuZGlu Z1JlbERlbGV0ZSAqbmV4dDsKLQlpbnQJCQlucmVscyA9IDAsCi0JCQkJbWF4cmVscyA9IDA7Ci0J U01nclJlbGF0aW9uICpzcmVscyA9IE5VTEw7CisJaW50CQkJbmxvY2F0b3JzID0gMCwKKwkJCQlt YXhsb2NhdG9ycyA9IDA7CisJUmVsRmlsZUxvY2F0b3JCYWNrZW5kICpsb2NhdG9ycyA9IE5VTEw7 CiAKIAlwcmV2ID0gTlVMTDsKIAlmb3IgKHBlbmRpbmcgPSBwZW5kaW5nRGVsZXRlczsgcGVuZGlu ZyAhPSBOVUxMOyBwZW5kaW5nID0gbmV4dCkKQEAgLTY3NiwyMyArNjc3LDIxIEBAIHNtZ3JEb1Bl bmRpbmdEZWxldGVzKGJvb2wgaXNDb21taXQpCiAJCQkvKiBkbyBkZWxldGlvbiBpZiBjYWxsZWQg Zm9yICovCiAJCQlpZiAocGVuZGluZy0+YXRDb21taXQgPT0gaXNDb21taXQpCiAJCQl7Ci0JCQkJ U01nclJlbGF0aW9uIHNyZWw7Ci0KLQkJCQlzcmVsID0gc21ncm9wZW4ocGVuZGluZy0+cmxvY2F0 b3IsIHBlbmRpbmctPmJhY2tlbmQpOworCQkJCVJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRv ciA9IHsgcGVuZGluZy0+cmxvY2F0b3IsIHBlbmRpbmctPmJhY2tlbmQgfTsKIAogCQkJCS8qIGFs bG9jYXRlIHRoZSBpbml0aWFsIGFycmF5LCBvciBleHRlbmQgaXQsIGlmIG5lZWRlZCAqLwotCQkJ CWlmIChtYXhyZWxzID09IDApCisJCQkJaWYgKG1heGxvY2F0b3JzID09IDApCiAJCQkJewotCQkJ CQltYXhyZWxzID0gODsKLQkJCQkJc3JlbHMgPSBwYWxsb2Moc2l6ZW9mKFNNZ3JSZWxhdGlvbikg KiBtYXhyZWxzKTsKKwkJCQkJbWF4bG9jYXRvcnMgPSA4OworCQkJCQlsb2NhdG9ycyA9IHBhbGxv YyhzaXplb2YoUmVsRmlsZUxvY2F0b3JCYWNrZW5kKSAqIG1heGxvY2F0b3JzKTsKIAkJCQl9Ci0J CQkJZWxzZSBpZiAobWF4cmVscyA8PSBucmVscykKKwkJCQllbHNlIGlmIChtYXhsb2NhdG9ycyA8 PSBubG9jYXRvcnMpCiAJCQkJewotCQkJCQltYXhyZWxzICo9IDI7Ci0JCQkJCXNyZWxzID0gcmVw YWxsb2Moc3JlbHMsIHNpemVvZihTTWdyUmVsYXRpb24pICogbWF4cmVscyk7CisJCQkJCW1heGxv Y2F0b3JzICo9IDI7CisJCQkJCWxvY2F0b3JzID0gcmVwYWxsb2MobG9jYXRvcnMsIHNpemVvZihS ZWxGaWxlTG9jYXRvckJhY2tlbmQpICogbWF4bG9jYXRvcnMpOwogCQkJCX0KIAotCQkJCXNyZWxz W25yZWxzKytdID0gc3JlbDsKKwkJCQlsb2NhdG9yc1tubG9jYXRvcnMrK10gPSBybG9jYXRvcjsK IAkJCX0KIAkJCS8qIG11c3QgZXhwbGljaXRseSBmcmVlIHRoZSBsaXN0IGVudHJ5ICovCiAJCQlw ZnJlZShwZW5kaW5nKTsKQEAgLTcwMCwxNSArNjk5LDU4IEBAIHNtZ3JEb1BlbmRpbmdEZWxldGVz KGJvb2wgaXNDb21taXQpCiAJCX0KIAl9CiAKLQlpZiAobnJlbHMgPiAwKQorCWlmIChubG9jYXRv cnMgPiAwKQogCXsKLQkJc21ncmRvdW5saW5rYWxsKHNyZWxzLCBucmVscywgZmFsc2UpOworCQlG b3JrTnVtYmVyIGZvcmtzW01BWF9GT1JLTlVNICsgMV07CisKKwkJZm9yIChpbnQgaSA9IDA7IGkg PD0gTUFYX0ZPUktOVU07IGkrKykKKwkJCWZvcmtzW2ldID0gaTsKKworCQkvKgorCQkgKiBHZXQg cmlkIG9mIGFueSByZW1haW5pbmcgYnVmZmVycyBmb3IgdGhlIHJlbGF0aW9ucy4gIGJ1Zm1nciB3 aWxsIGp1c3QKKwkJICogZHJvcCB0aGVtIHdpdGhvdXQgYm90aGVyaW5nIHRvIHdyaXRlIHRoZSBj b250ZW50cy4KKwkJICovCisJCURyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKGxvY2F0b3JzLCBubG9j YXRvcnMpOwogCi0JCWZvciAoaW50IGkgPSAwOyBpIDwgbnJlbHM7IGkrKykKLQkJCXNtZ3JjbG9z ZShzcmVsc1tpXSk7CisJCWZvciAoaW50IGkgPSAwOyBpIDwgbmxvY2F0b3JzOyBpKyspCisJCQlz bWdydW5saW5rX211bHRpKGxvY2F0b3JzW2ldLmxvY2F0b3IsIGxvY2F0b3JzW2ldLmJhY2tlbmQs IGZvcmtzLCBNQVhfRk9SS05VTSArIDEsIGZhbHNlKTsKKwkJcGZyZWUobG9jYXRvcnMpOworCX0K K30KKworLyoKKyAqIERyb3BSZWxhdGlvbkZpbGVzIC0tIGRyb3AgZmlsZXMgb2YgYWxsIGdpdmVu IHJlbGF0aW9ucworICovCit2b2lkCitEcm9wUmVsYXRpb25GaWxlcyhSZWxGaWxlTG9jYXRvciAq ZGVscmVscywgaW50IG5kZWxyZWxzLCBib29sIGlzUmVkbykKK3sKKwlSZWxGaWxlTG9jYXRvckJh Y2tlbmQgKmxvY2F0b3JzOworCWludAkJCWk7CisJRm9ya051bWJlcglhbGxfZm9ya3NbTUFYX0ZP UktOVU0gKyAxXTsKIAotCQlwZnJlZShzcmVscyk7CisJbG9jYXRvcnMgPSBwYWxsb2Moc2l6ZW9m KFJlbEZpbGVMb2NhdG9yQmFja2VuZCkgKiBuZGVscmVscyk7CisJZm9yIChpID0gMDsgaSA8IG5k ZWxyZWxzOyBpKyspCisJeworCQlpZiAoaXNSZWRvKQorCQl7CisJCQlmb3IgKGludCBmb3JrID0g MDsgZm9yayA8PSBNQVhfRk9SS05VTTsgZm9yaysrKQorCQkJCVhMb2dEcm9wUmVsYXRpb24oZGVs cmVsc1tpXSwgZm9yayk7CisJCX0KKwkJbG9jYXRvcnNbaV0ubG9jYXRvciA9IGRlbHJlbHNbaV07 CisJCWxvY2F0b3JzW2ldLmJhY2tlbmQgPSBJbnZhbGlkQmFja2VuZElkOwogCX0KKworCS8qCisJ ICogR2V0IHJpZCBvZiBhbnkgcmVtYWluaW5nIGJ1ZmZlcnMgZm9yIHRoZSByZWxhdGlvbnMuICBi dWZtZ3Igd2lsbCBqdXN0CisJICogZHJvcCB0aGVtIHdpdGhvdXQgYm90aGVyaW5nIHRvIHdyaXRl IHRoZSBjb250ZW50cy4KKwkgKi8KKwlEcm9wUmVsYXRpb25zQWxsQnVmZmVycyhsb2NhdG9ycywg bmRlbHJlbHMpOworCisJZm9yIChpbnQgZm9yayA9IDA7IGZvcmsgPD0gTUFYX0ZPUktOVU07IGZv cmsrKykKKwkJYWxsX2ZvcmtzW2ZvcmtdID0gZm9yazsKKworCWZvciAoaSA9IDA7IGkgPCBuZGVs cmVsczsgaSsrKQorCQlzbWdydW5saW5rX211bHRpKGxvY2F0b3JzW2ldLmxvY2F0b3IsIGxvY2F0 b3JzW2ldLmJhY2tlbmQsIGFsbF9mb3JrcywgTUFYX0ZPUktOVU0gKyAxLCB0cnVlKTsKIH0KIAog LyoKQEAgLTcxOCw5ICs3NjAsOSBAQCB2b2lkCiBzbWdyRG9QZW5kaW5nU3luY3MoYm9vbCBpc0Nv bW1pdCwgYm9vbCBpc1BhcmFsbGVsV29ya2VyKQogewogCVBlbmRpbmdSZWxEZWxldGUgKnBlbmRp bmc7Ci0JaW50CQkJbnJlbHMgPSAwLAotCQkJCW1heHJlbHMgPSAwOwotCVNNZ3JSZWxhdGlvbiAq c3JlbHMgPSBOVUxMOworCWludAkJCW5sb2NhdG9ycyA9IDAsCisJCQkJbWF4bG9jYXRvcnMgPSAw OworCVJlbEZpbGVMb2NhdG9yICpsb2NhdG9ycyA9IE5VTEw7CiAJSEFTSF9TRVFfU1RBVFVTIHNj YW47CiAJUGVuZGluZ1JlbFN5bmMgKnBlbmRpbmdzeW5jOwogCkBAIC03NTcsOSArNzk5LDYgQEAg c21nckRvUGVuZGluZ1N5bmNzKGJvb2wgaXNDb21taXQsIGJvb2wgaXNQYXJhbGxlbFdvcmtlcikK IAkJRm9ya051bWJlcglmb3JrOwogCQlCbG9ja051bWJlciBuYmxvY2tzW01BWF9GT1JLTlVNICsg MV07CiAJCUJsb2NrTnVtYmVyIHRvdGFsX2Jsb2NrcyA9IDA7Ci0JCVNNZ3JSZWxhdGlvbiBzcmVs OwotCi0JCXNyZWwgPSBzbWdyb3BlbihwZW5kaW5nc3luYy0+cmxvY2F0b3IsIEludmFsaWRCYWNr ZW5kSWQpOwogCiAJCS8qCiAJCSAqIFdlIGVtaXQgbmV3cGFnZSBXQUwgcmVjb3JkcyBmb3Igc21h bGxlciByZWxhdGlvbnMuCkBAIC03NzMsOSArODEyLDEyIEBAIHNtZ3JEb1BlbmRpbmdTeW5jcyhi b29sIGlzQ29tbWl0LCBib29sIGlzUGFyYWxsZWxXb3JrZXIpCiAJCXsKIAkJCWZvciAoZm9yayA9 IDA7IGZvcmsgPD0gTUFYX0ZPUktOVU07IGZvcmsrKykKIAkJCXsKLQkJCQlpZiAoc21ncmV4aXN0 cyhzcmVsLCBmb3JrKSkKKwkJCQlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKKworCQkJCXNmaWxlID0g c21ncm9wZW4ocGVuZGluZ3N5bmMtPnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBmb3JrKTsK KwkJCQlpZiAoc21ncmV4aXN0cyhzZmlsZSkpCiAJCQkJewotCQkJCQlCbG9ja051bWJlciBuID0g c21ncm5ibG9ja3Moc3JlbCwgZm9yayk7CisJCQkJCUJsb2NrTnVtYmVyIG4gPSBzbWdybmJsb2Nr cyhzZmlsZSk7CiAKIAkJCQkJLyogd2Ugc2hvdWxkbid0IGNvbWUgaGVyZSBmb3IgdW5sb2dnZWQg cmVsYXRpb25zICovCiAJCQkJCUFzc2VydChmb3JrICE9IElOSVRfRk9SS05VTSk7CkBAIC04MDMs MTggKzg0NSwxOSBAQCBzbWdyRG9QZW5kaW5nU3luY3MoYm9vbCBpc0NvbW1pdCwgYm9vbCBpc1Bh cmFsbGVsV29ya2VyKQogCQkJdG90YWxfYmxvY2tzICogQkxDS1NaIC8gMTAyNCA+PSB3YWxfc2tp cF90aHJlc2hvbGQpCiAJCXsKIAkJCS8qIGFsbG9jYXRlIHRoZSBpbml0aWFsIGFycmF5LCBvciBl eHRlbmQgaXQsIGlmIG5lZWRlZCAqLwotCQkJaWYgKG1heHJlbHMgPT0gMCkKKwkJCWlmIChtYXhs b2NhdG9ycyA9PSAwKQogCQkJewotCQkJCW1heHJlbHMgPSA4OwotCQkJCXNyZWxzID0gcGFsbG9j KHNpemVvZihTTWdyUmVsYXRpb24pICogbWF4cmVscyk7CisJCQkJbWF4bG9jYXRvcnMgPSA4Owor CQkJCWxvY2F0b3JzID0gcGFsbG9jKHNpemVvZihSZWxGaWxlTG9jYXRvckJhY2tlbmQpICogbWF4 bG9jYXRvcnMpOwogCQkJfQotCQkJZWxzZSBpZiAobWF4cmVscyA8PSBucmVscykKKwkJCWVsc2Ug aWYgKG1heGxvY2F0b3JzIDw9IG5sb2NhdG9ycykKIAkJCXsKLQkJCQltYXhyZWxzICo9IDI7Ci0J CQkJc3JlbHMgPSByZXBhbGxvYyhzcmVscywgc2l6ZW9mKFNNZ3JSZWxhdGlvbikgKiBtYXhyZWxz KTsKKwkJCQltYXhsb2NhdG9ycyAqPSAyOworCQkJCWxvY2F0b3JzID0gcmVwYWxsb2MobG9jYXRv cnMsIHNpemVvZihSZWxGaWxlTG9jYXRvckJhY2tlbmQpICogbWF4bG9jYXRvcnMpOwogCQkJfQog Ci0JCQlzcmVsc1tucmVscysrXSA9IHNyZWw7CisJCQlsb2NhdG9yc1tubG9jYXRvcnNdID0gcGVu ZGluZ3N5bmMtPnJsb2NhdG9yOworCQkJbmxvY2F0b3JzKys7CiAJCX0KIAkJZWxzZQogCQl7CkBA IC04MzMsNyArODc2LDcgQEAgc21nckRvUGVuZGluZ1N5bmNzKGJvb2wgaXNDb21taXQsIGJvb2wg aXNQYXJhbGxlbFdvcmtlcikKIAkJCQkgKiBwYWdlIGluY2x1ZGluZyBhbnkgdW51c2VkIHNwYWNl LiAgUmVhZEJ1ZmZlckV4dGVuZGVkKCkKIAkJCQkgKiBjb3VudHMgc29tZSBwZ3N0YXQgZXZlbnRz OyB1bmZvcnR1bmF0ZWx5LCB3ZSBkaXNjYXJkIHRoZW0uCiAJCQkJICovCi0JCQkJcmVsID0gQ3Jl YXRlRmFrZVJlbGNhY2hlRW50cnkoc3JlbC0+c21ncl9ybG9jYXRvci5sb2NhdG9yKTsKKwkJCQly ZWwgPSBDcmVhdGVGYWtlUmVsY2FjaGVFbnRyeShwZW5kaW5nc3luYy0+cmxvY2F0b3IpOwogCQkJ CWxvZ19uZXdwYWdlX3JhbmdlKHJlbCwgZm9yaywgMCwgbiwgZmFsc2UpOwogCQkJCUZyZWVGYWtl UmVsY2FjaGVFbnRyeShyZWwpOwogCQkJfQpAQCAtODQyLDExICs4ODUsMjAgQEAgc21nckRvUGVu ZGluZ1N5bmNzKGJvb2wgaXNDb21taXQsIGJvb2wgaXNQYXJhbGxlbFdvcmtlcikKIAogCXBlbmRp bmdTeW5jSGFzaCA9IE5VTEw7CiAKLQlpZiAobnJlbHMgPiAwKQorCUZsdXNoUmVsYXRpb25zQWxs QnVmZmVycyhsb2NhdG9ycywgbmxvY2F0b3JzKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgbmxv Y2F0b3JzOyBpKyspCiAJewotCQlzbWdyZG9zeW5jYWxsKHNyZWxzLCBucmVscyk7Ci0JCXBmcmVl KHNyZWxzKTsKKwkJZm9yIChpbnQgZm9yayA9IDA7IGZvcmsgPD0gTUFYX0ZPUktOVU07IGZvcmsr KykKKwkJeworCQkJU01nckZpbGVIYW5kbGUgc2ZpbGUgPSBzbWdyb3Blbihsb2NhdG9yc1tpXSwg SW52YWxpZEJhY2tlbmRJZCwgZm9yayk7CisKKwkJCWlmIChzbWdyZXhpc3RzKHNmaWxlKSkKKwkJ CQlzbWdyaW1tZWRzeW5jKHNmaWxlKTsKKwkJfQogCX0KKwlpZiAobG9jYXRvcnMgIT0gTlVMTCkK KwkJcGZyZWUobG9jYXRvcnMpOwogfQogCiAvKgpAQCAtOTY2LDIyICsxMDE4LDIyIEBAIHNtZ3Jf cmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAlpZiAoaW5mbyA9PSBYTE9HX1NNR1JfQ1JF QVRFKQogCXsKIAkJeGxfc21ncl9jcmVhdGUgKnhscmVjID0gKHhsX3NtZ3JfY3JlYXRlICopIFhM b2dSZWNHZXREYXRhKHJlY29yZCk7Ci0JCVNNZ3JSZWxhdGlvbiByZWxuOworCQlTTWdyRmlsZUhh bmRsZSBzZmlsZTsKIAotCQlyZWxuID0gc21ncm9wZW4oeGxyZWMtPnJsb2NhdG9yLCBJbnZhbGlk QmFja2VuZElkKTsKLQkJc21ncmNyZWF0ZShyZWxuLCB4bHJlYy0+Zm9ya051bSwgdHJ1ZSk7CisJ CXNmaWxlID0gc21ncm9wZW4oeGxyZWMtPnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCB4bHJl Yy0+Zm9ya051bSk7CisJCXNtZ3JjcmVhdGUoc2ZpbGUsIHRydWUpOwogCX0KIAllbHNlIGlmIChp bmZvID09IFhMT0dfU01HUl9UUlVOQ0FURSkKIAl7CiAJCXhsX3NtZ3JfdHJ1bmNhdGUgKnhscmVj ID0gKHhsX3NtZ3JfdHJ1bmNhdGUgKikgWExvZ1JlY0dldERhdGEocmVjb3JkKTsKLQkJU01nclJl bGF0aW9uIHJlbG47CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOwogCQlSZWxhdGlvbglyZWw7CiAJ CUZvcmtOdW1iZXIJZm9ya3NbTUFYX0ZPUktOVU1dOwogCQlCbG9ja051bWJlciBibG9ja3NbTUFY X0ZPUktOVU1dOwogCQlpbnQJCQluZm9ya3MgPSAwOwogCQlib29sCQluZWVkX2ZzbV92YWN1dW0g PSBmYWxzZTsKIAotCQlyZWxuID0gc21ncm9wZW4oeGxyZWMtPnJsb2NhdG9yLCBJbnZhbGlkQmFj a2VuZElkKTsKKwkJc2ZpbGUgPSBzbWdyb3Blbih4bHJlYy0+cmxvY2F0b3IsIEludmFsaWRCYWNr ZW5kSWQsIE1BSU5fRk9SS05VTSk7CiAKIAkJLyoKIAkJICogRm9yY2libHkgY3JlYXRlIHJlbGF0 aW9uIGlmIGl0IGRvZXNuJ3QgZXhpc3QgKHdoaWNoIHN1Z2dlc3RzIHRoYXQKQEAgLTk4OSw3ICsx MDQxLDcgQEAgc21ncl9yZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQkgKiBYTG9nUmVh ZEJ1ZmZlckZvclJlZG8sIHdlIHByZWZlciB0byByZWNyZWF0ZSB0aGUgcmVsIGFuZCByZXBsYXkg dGhlCiAJCSAqIGxvZyBhcyBiZXN0IHdlIGNhbiB1bnRpbCB0aGUgZHJvcCBpcyBzZWVuLgogCQkg Ki8KLQkJc21ncmNyZWF0ZShyZWxuLCBNQUlOX0ZPUktOVU0sIHRydWUpOworCQlzbWdyY3JlYXRl KHNmaWxlLCB0cnVlKTsKIAogCQkvKgogCQkgKiBCZWZvcmUgd2UgcGVyZm9ybSB0aGUgdHJ1bmNh dGlvbiwgdXBkYXRlIG1pbmltdW0gcmVjb3ZlcnkgcG9pbnQgdG8KQEAgLTEwMjIsOCArMTA3NCwx MCBAQCBzbWdyX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCS8qIFByZXBhcmUgZm9y IHRydW5jYXRpb24gb2YgRlNNIGFuZCBWTSB0b28gKi8KIAkJcmVsID0gQ3JlYXRlRmFrZVJlbGNh Y2hlRW50cnkoeGxyZWMtPnJsb2NhdG9yKTsKIAorCQlEcm9wUmVsYXRpb25CdWZmZXJzKHhscmVj LT5ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgZm9ya3MsIG5mb3JrcywgYmxvY2tzKTsKKwog CQlpZiAoKHhscmVjLT5mbGFncyAmIFNNR1JfVFJVTkNBVEVfRlNNKSAhPSAwICYmCi0JCQlzbWdy ZXhpc3RzKHJlbG4sIEZTTV9GT1JLTlVNKSkKKwkJCXNtZ3JleGlzdHMoc21ncm9wZW4oeGxyZWMt PnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBGU01fRk9SS05VTSkpKQogCQl7CiAJCQlibG9j a3NbbmZvcmtzXSA9IEZyZWVTcGFjZU1hcFByZXBhcmVUcnVuY2F0ZVJlbChyZWwsIHhscmVjLT5i bGtubyk7CiAJCQlpZiAoQmxvY2tOdW1iZXJJc1ZhbGlkKGJsb2Nrc1tuZm9ya3NdKSkKQEAgLTEw MzQsNyArMTA4OCw3IEBAIHNtZ3JfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJCX0K IAkJfQogCQlpZiAoKHhscmVjLT5mbGFncyAmIFNNR1JfVFJVTkNBVEVfVk0pICE9IDAgJiYKLQkJ CXNtZ3JleGlzdHMocmVsbiwgVklTSUJJTElUWU1BUF9GT1JLTlVNKSkKKwkJCXNtZ3JleGlzdHMo c21ncm9wZW4oeGxyZWMtPnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBWSVNJQklMSVRZTUFQ X0ZPUktOVU0pKSkKIAkJewogCQkJYmxvY2tzW25mb3Jrc10gPSB2aXNpYmlsaXR5bWFwX3ByZXBh cmVfdHJ1bmNhdGUocmVsLCB4bHJlYy0+Ymxrbm8pOwogCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxp ZChibG9ja3NbbmZvcmtzXSkpCkBAIC0xMDQ2LDcgKzExMDAsMTAgQEAgc21ncl9yZWRvKFhMb2dS ZWFkZXJTdGF0ZSAqcmVjb3JkKQogCiAJCS8qIERvIHRoZSByZWFsIHdvcmsgdG8gdHJ1bmNhdGUg cmVsYXRpb24gZm9ya3MgKi8KIAkJaWYgKG5mb3JrcyA+IDApCi0JCQlzbWdydHJ1bmNhdGUocmVs biwgZm9ya3MsIG5mb3JrcywgYmxvY2tzKTsKKwkJeworCQkJRHJvcFJlbGF0aW9uQnVmZmVycyh4 bHJlYy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIGZvcmtzLCBuZm9ya3MsIGJsb2Nrcyk7 CisJCQlzbWdydHJ1bmNhdGVfbXVsdGkoeGxyZWMtPnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElk LCBmb3JrcywgbmZvcmtzLCBibG9ja3MpOworCQl9CiAKIAkJLyoKIAkJICogVXBkYXRlIHVwcGVy LWxldmVsIEZTTSBwYWdlcyB0byBhY2NvdW50IGZvciB0aGUgdHJ1bmNhdGlvbi4gVGhpcyBpcwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL2FzeW5jLmMKaW5kZXggZWY5MDljZjRlMDguLjUyM2EzNzg3NTJjIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9hc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2FzeW5jLmMKQEAgLTE0MSw2ICsxNDEsNyBAQAogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCiAj aW5jbHVkZSAibGlicHEvcHFmb3JtYXQuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNs dWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCkBAIC0xNjMsNyAr MTY0LDcgQEAKICAqIHRoYW4gdGhhdCwgc28gY2hhbmdlcyBpbiB0aGF0IGRhdGEgc3RydWN0dXJl IHdvbid0IGFmZmVjdCB1c2VyLXZpc2libGUKICAqIHJlc3RyaWN0aW9ucy4KICAqLwotI2RlZmlu ZSBOT1RJRllfUEFZTE9BRF9NQVhfTEVOR1RICShCTENLU1ogLSBOQU1FREFUQUxFTiAtIDEyOCkK KyNkZWZpbmUgTk9USUZZX1BBWUxPQURfTUFYX0xFTkdUSAkoQkxDS1NaIC0gTkFNRURBVEFMRU4g LSBTaXplT2ZQYWdlSGVhZGVyRGF0YSAtIDEyOCkKIAogLyoKICAqIFN0cnVjdCByZXByZXNlbnRp bmcgYW4gZW50cnkgaW4gdGhlIGdsb2JhbCBub3RpZnkgcXVldWUKQEAgLTIxMyw3ICsyMTQsNyBA QCB0eXBlZGVmIHN0cnVjdCBRdWV1ZVBvc2l0aW9uCiAJKCh4KS5wYWdlID09ICh5KS5wYWdlICYm ICh4KS5vZmZzZXQgPT0gKHkpLm9mZnNldCkKIAogI2RlZmluZSBRVUVVRV9QT1NfSVNfWkVSTyh4 KSBcCi0JKCh4KS5wYWdlID09IDAgJiYgKHgpLm9mZnNldCA9PSAwKQorCSgoeCkucGFnZSA9PSAw ICYmICh4KS5vZmZzZXQgPT0gTUFYQUxJR04oU2l6ZU9mUGFnZUhlYWRlckRhdGEpKQogCiAvKiBj aG9vc2UgbG9naWNhbGx5IHNtYWxsZXIgUXVldWVQb3NpdGlvbiAqLwogI2RlZmluZSBRVUVVRV9Q T1NfTUlOKHgseSkgXApAQCAtMzA1LDEyICszMDYsNiBAQCBzdGF0aWMgQXN5bmNRdWV1ZUNvbnRy b2wgKmFzeW5jUXVldWVDb250cm9sOwogI2RlZmluZSBRVUVVRV9ORVhUX0xJU1RFTkVSKGkpCQko YXN5bmNRdWV1ZUNvbnRyb2wtPmJhY2tlbmRbaV0ubmV4dExpc3RlbmVyKQogI2RlZmluZSBRVUVV RV9CQUNLRU5EX1BPUyhpKQkJKGFzeW5jUXVldWVDb250cm9sLT5iYWNrZW5kW2ldLnBvcykKIAot LyoKLSAqIFRoZSBTTFJVIGJ1ZmZlciBhcmVhIHRocm91Z2ggd2hpY2ggd2UgYWNjZXNzIHRoZSBu b3RpZmljYXRpb24gcXVldWUKLSAqLwotc3RhdGljIFNscnVDdGxEYXRhIE5vdGlmeUN0bERhdGE7 Ci0KLSNkZWZpbmUgTm90aWZ5Q3RsCQkJCQkoJk5vdGlmeUN0bERhdGEpCiAjZGVmaW5lIFFVRVVF X1BBR0VTSVpFCQkJCUJMQ0tTWgogI2RlZmluZSBRVUVVRV9GVUxMX1dBUk5fSU5URVJWQUwJNTAw MAkvKiB3YXJuIGF0IG1vc3Qgb25jZSBldmVyeSA1cyAqLwogCkBAIC01MjEsOCArNTE2LDYgQEAg QXN5bmNTaG1lbVNpemUodm9pZCkKIAlzaXplID0gbXVsX3NpemUoTWF4QmFja2VuZHMgKyAxLCBz aXplb2YoUXVldWVCYWNrZW5kU3RhdHVzKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG9mZnNl dG9mKEFzeW5jUXVldWVDb250cm9sLCBiYWNrZW5kKSk7CiAKLQlzaXplID0gYWRkX3NpemUoc2l6 ZSwgU2ltcGxlTHJ1U2htZW1TaXplKE5VTV9OT1RJRllfQlVGRkVSUywgMCkpOwotCiAJcmV0dXJu IHNpemU7CiB9CiAKQEAgLTU1MCw4ICs1NDMsOCBAQCBBc3luY1NobWVtSW5pdCh2b2lkKQogCWlm ICghZm91bmQpCiAJewogCQkvKiBGaXJzdCB0aW1lIHRocm91Z2gsIHNvIGluaXRpYWxpemUgaXQg Ki8KLQkJU0VUX1FVRVVFX1BPUyhRVUVVRV9IRUFELCAwLCAwKTsKLQkJU0VUX1FVRVVFX1BPUyhR VUVVRV9UQUlMLCAwLCAwKTsKKwkJU0VUX1FVRVVFX1BPUyhRVUVVRV9IRUFELCAwLCBNQVhBTElH TihTaXplT2ZQYWdlSGVhZGVyRGF0YSkpOworCQlTRVRfUVVFVUVfUE9TKFFVRVVFX1RBSUwsIDAs IE1BWEFMSUdOKFNpemVPZlBhZ2VIZWFkZXJEYXRhKSk7CiAJCVFVRVVFX1NUT1BfUEFHRSA9IDA7 CiAJCVFVRVVFX0ZJUlNUX0xJU1RFTkVSID0gSW52YWxpZEJhY2tlbmRJZDsKIAkJYXN5bmNRdWV1 ZUNvbnRyb2wtPmxhc3RRdWV1ZUZpbGxXYXJuID0gMDsKQEAgLTU2MSwyNCArNTU0LDE3IEBAIEFz eW5jU2htZW1Jbml0KHZvaWQpCiAJCQlRVUVVRV9CQUNLRU5EX1BJRChpKSA9IEludmFsaWRQaWQ7 CiAJCQlRVUVVRV9CQUNLRU5EX0RCT0lEKGkpID0gSW52YWxpZE9pZDsKIAkJCVFVRVVFX05FWFRf TElTVEVORVIoaSkgPSBJbnZhbGlkQmFja2VuZElkOwotCQkJU0VUX1FVRVVFX1BPUyhRVUVVRV9C QUNLRU5EX1BPUyhpKSwgMCwgMCk7CisJCQlTRVRfUVVFVUVfUE9TKFFVRVVFX0JBQ0tFTkRfUE9T KGkpLCAwLCBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVyRGF0YSkpOwogCQl9CiAJfQogCi0JLyoK LQkgKiBTZXQgdXAgU0xSVSBtYW5hZ2VtZW50IG9mIHRoZSBwZ19ub3RpZnkgZGF0YS4KLQkgKi8K LQlOb3RpZnlDdGwtPlBhZ2VQcmVjZWRlcyA9IGFzeW5jUXVldWVQYWdlUHJlY2VkZXM7Ci0JU2lt cGxlTHJ1SW5pdChOb3RpZnlDdGwsICJOb3RpZnkiLCBOVU1fTk9USUZZX0JVRkZFUlMsIDAsCi0J CQkJICBOb3RpZnlTTFJVTG9jaywgInBnX25vdGlmeSIsIExXVFJBTkNIRV9OT1RJRllfQlVGRkVS LAotCQkJCSAgU1lOQ19IQU5ETEVSX05PTkUpOwotCiAJaWYgKCFmb3VuZCkKIAl7CiAJCS8qCiAJ CSAqIER1cmluZyBzdGFydCBvciByZWJvb3QsIGNsZWFuIG91dCB0aGUgcGdfbm90aWZ5IGRpcmVj dG9yeS4KIAkJICovCi0JCSh2b2lkKSBTbHJ1U2NhbkRpcmVjdG9yeShOb3RpZnlDdGwsIFNscnVT Y2FuRGlyQ2JEZWxldGVBbGwsIE5VTEwpOworCQkodm9pZCkgU2xydVNjYW5EaXJlY3RvcnkoU0xS VV9OT1RJRllfSUQsIGFzeW5jUXVldWVQYWdlUHJlY2VkZXMsCisJCQkJCQkJCSBTbHJ1U2NhbkRp ckNiRGVsZXRlQWxsLCBOVUxMKTsKIAl9CiB9CiAKQEAgLTEzNDUsMTkgKzEzMzEsMTkgQEAgYXN5 bmNRdWV1ZUFkdmFuY2Uodm9sYXRpbGUgUXVldWVQb3NpdGlvbiAqcG9zaXRpb24sIGludCBlbnRy eUxlbmd0aCkKIAkgKiB3cml0dGVuIG9yIHJlYWQuCiAJICovCiAJb2Zmc2V0ICs9IGVudHJ5TGVu Z3RoOwotCUFzc2VydChvZmZzZXQgPD0gUVVFVUVfUEFHRVNJWkUpOworCUFzc2VydChvZmZzZXQg PD0gUVVFVUVfUEFHRVNJWkUgLSBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVyRGF0YSkpOwogCiAJ LyoKIAkgKiBJbiBhIHNlY29uZCBzdGVwIGNoZWNrIGlmIGFub3RoZXIgZW50cnkgY2FuIHBvc3Np Ymx5IGJlIHdyaXR0ZW4gdG8gdGhlCiAJICogcGFnZS4gSWYgc28sIHN0YXkgaGVyZSwgd2UgaGF2 ZSByZWFjaGVkIHRoZSBuZXh0IHBvc2l0aW9uLiBJZiBub3QsIHRoZW4KIAkgKiB3ZSBuZWVkIHRv IG1vdmUgb24gdG8gdGhlIG5leHQgcGFnZS4KIAkgKi8KLQlpZiAob2Zmc2V0ICsgUVVFVUVBTElH TihBc3luY1F1ZXVlRW50cnlFbXB0eVNpemUpID4gUVVFVUVfUEFHRVNJWkUpCisJaWYgKG9mZnNl dCArIFFVRVVFQUxJR04oQXN5bmNRdWV1ZUVudHJ5RW1wdHlTaXplKSA+IFFVRVVFX1BBR0VTSVpF IC0gTUFYQUxJR04oU2l6ZU9mUGFnZUhlYWRlckRhdGEpKQogCXsKIAkJcGFnZW5vKys7CiAJCWlm IChwYWdlbm8gPiBRVUVVRV9NQVhfUEFHRSkKIAkJCXBhZ2VubyA9IDA7CQkJLyogd3JhcCBhcm91 bmQgKi8KLQkJb2Zmc2V0ID0gMDsKKwkJb2Zmc2V0ID0gTUFYQUxJR04oU2l6ZU9mUGFnZUhlYWRl ckRhdGEpOyAvKiBzdGFydCBhdCBTaXplT2ZQYWdlSGVhZGVyRGF0YSAqLwogCQlwYWdlSnVtcCA9 IHRydWU7CiAJfQogCkBAIC0xNDExLDEwICsxMzk3LDcgQEAgYXN5bmNRdWV1ZUFkZEVudHJpZXMo TGlzdENlbGwgKm5leHROb3RpZnkpCiAJUXVldWVQb3NpdGlvbiBxdWV1ZV9oZWFkOwogCWludAkJ CXBhZ2VubzsKIAlpbnQJCQlvZmZzZXQ7Ci0JaW50CQkJc2xvdG5vOwotCi0JLyogV2UgaG9sZCBi b3RoIE5vdGlmeVF1ZXVlTG9jayBhbmQgTm90aWZ5U0xSVUxvY2sgZHVyaW5nIHRoaXMgb3BlcmF0 aW9uICovCi0JTFdMb2NrQWNxdWlyZShOb3RpZnlTTFJVTG9jaywgTFdfRVhDTFVTSVZFKTsKKwlC dWZmZXIJCWJ1ZmZlcjsKIAogCS8qCiAJICogV2Ugd29yayB3aXRoIGEgbG9jYWwgY29weSBvZiBR VUVVRV9IRUFELCB3aGljaCB3ZSB3cml0ZSBiYWNrIHRvIHNoYXJlZApAQCAtMTQzOSwxMyArMTQy MiwyMCBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhMaXN0Q2VsbCAqbmV4dE5vdGlmeSkKIAkgKi8K IAlwYWdlbm8gPSBRVUVVRV9QT1NfUEFHRShxdWV1ZV9oZWFkKTsKIAlpZiAoUVVFVUVfUE9TX0lT X1pFUk8ocXVldWVfaGVhZCkpCi0JCXNsb3RubyA9IFNpbXBsZUxydVplcm9QYWdlKE5vdGlmeUN0 bCwgcGFnZW5vKTsKKwl7CisJCWJ1ZmZlciA9IFplcm9TbHJ1QnVmZmVyKFNMUlVfTk9USUZZX0lE LCBwYWdlbm8pOworCQlQYWdlU2V0SGVhZGVyRGF0YU5vblJlbChCdWZmZXJHZXRQYWdlKGJ1ZmZl ciksIHBhZ2VubywgSW52YWxpZFhMb2dSZWNQdHIsIEJMQ0tTWiwgUEdfTUVUQVBBR0VfTEFZT1VU X1ZFUlNJT04pOworCisJfQogCWVsc2UKLQkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTm90 aWZ5Q3RsLCBwYWdlbm8sIHRydWUsCi0JCQkJCQkJCSAgIEludmFsaWRUcmFuc2FjdGlvbklkKTsK Kwl7CisJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTk9USUZZX0lELCBwYWdlbm8sIFJC TV9OT1JNQUwpOworCQlMb2NrQnVmZmVyKGJ1ZmZlciwgQlVGRkVSX0xPQ0tfRVhDTFVTSVZFKTsK Kwl9CiAKKwkKIAkvKiBOb3RlIHdlIG1hcmsgdGhlIHBhZ2UgZGlydHkgYmVmb3JlIHdyaXRpbmcg aW4gaXQgKi8KLQlOb3RpZnlDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dID0gdHJ1ZTsK KwlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKIAogCXdoaWxlIChuZXh0Tm90aWZ5ICE9IE5VTEwp CiAJewpAQCAtMTQ1Nyw3ICsxNDQ3LDcgQEAgYXN5bmNRdWV1ZUFkZEVudHJpZXMoTGlzdENlbGwg Km5leHROb3RpZnkpCiAJCW9mZnNldCA9IFFVRVVFX1BPU19PRkZTRVQocXVldWVfaGVhZCk7CiAK IAkJLyogQ2hlY2sgd2hldGhlciB0aGUgZW50cnkgcmVhbGx5IGZpdHMgb24gdGhlIGN1cnJlbnQg cGFnZSAqLwotCQlpZiAob2Zmc2V0ICsgcWUubGVuZ3RoIDw9IFFVRVVFX1BBR0VTSVpFKQorCQlp ZiAob2Zmc2V0ICsgcWUubGVuZ3RoIDw9IFFVRVVFX1BBR0VTSVpFIC0gTUFYQUxJR04oU2l6ZU9m UGFnZUhlYWRlckRhdGEpKQogCQl7CiAJCQkvKiBPSywgc28gYWR2YW5jZSBuZXh0Tm90aWZ5IHBh c3QgdGhpcyBpdGVtICovCiAJCQluZXh0Tm90aWZ5ID0gbG5leHQocGVuZGluZ05vdGlmaWVzLT5l dmVudHMsIG5leHROb3RpZnkpOwpAQCAtMTQ2OSwxNyArMTQ1OSwxOCBAQCBhc3luY1F1ZXVlQWRk RW50cmllcyhMaXN0Q2VsbCAqbmV4dE5vdGlmeSkKIAkJCSAqIG9ubHkgY2hlY2sgZGJvaWQgYW5k IHNpbmNlIGl0IHdvbid0IG1hdGNoIGFueSByZWFkZXIncyBkYXRhYmFzZQogCQkJICogT0lELCB0 aGV5IHdpbGwgaWdub3JlIHRoaXMgZW50cnkgYW5kIG1vdmUgb24uCiAJCQkgKi8KLQkJCXFlLmxl bmd0aCA9IFFVRVVFX1BBR0VTSVpFIC0gb2Zmc2V0OworCQkJcWUubGVuZ3RoID0gUVVFVUVfUEFH RVNJWkUgLSBNQVhBTElHTihTaXplT2ZQYWdlSGVhZGVyRGF0YSkgLSBvZmZzZXQ7CiAJCQlxZS5k Ym9pZCA9IEludmFsaWRPaWQ7CiAJCQlxZS5kYXRhWzBdID0gJ1wwJzsJLyogZW1wdHkgY2hhbm5l bCAqLwogCQkJcWUuZGF0YVsxXSA9ICdcMCc7CS8qIGVtcHR5IHBheWxvYWQgKi8KIAkJfQogCiAJ CS8qIE5vdyBjb3B5IHFlIGludG8gdGhlIHNoYXJlZCBidWZmZXIgcGFnZSAqLwotCQltZW1jcHko Tm90aWZ5Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBvZmZzZXQsCisJCW1lbWNw eShQYWdlR2V0Q29udGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIG9mZnNldCwKIAkJCSAg ICZxZSwKIAkJCSAgIHFlLmxlbmd0aCk7CiAKKwogCQkvKiBBZHZhbmNlIHF1ZXVlX2hlYWQgYXBw cm9wcmlhdGVseSwgYW5kIGRldGVjdCBpZiBwYWdlIGlzIGZ1bGwgKi8KIAkJaWYgKGFzeW5jUXVl dWVBZHZhbmNlKCYocXVldWVfaGVhZCksIHFlLmxlbmd0aCkpCiAJCXsKQEAgLTE0OTEsNyArMTQ4 MiwxMCBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhMaXN0Q2VsbCAqbmV4dE5vdGlmeSkKIAkJCSAq IGFzeW5jUXVldWVJc0Z1bGwoKSBlbnN1cmVkIHRoYXQgdGhlcmUgaXMgcm9vbSB0byBjcmVhdGUg dGhpcwogCQkJICogcGFnZSB3aXRob3V0IG92ZXJydW5uaW5nIHRoZSBxdWV1ZS4KIAkJCSAqLwot CQkJc2xvdG5vID0gU2ltcGxlTHJ1WmVyb1BhZ2UoTm90aWZ5Q3RsLCBRVUVVRV9QT1NfUEFHRShx dWV1ZV9oZWFkKSk7CisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CisJCQlidWZmZXIg PSBaZXJvU2xydUJ1ZmZlcihTTFJVX05PVElGWV9JRCwKKwkJCQkJCQkJCVFVRVVFX1BPU19QQUdF KHF1ZXVlX2hlYWQpKTsKKwkJCU1hcmtCdWZmZXJEaXJ0eShidWZmZXIpOwogCiAJCQkvKgogCQkJ ICogSWYgdGhlIG5ldyBwYWdlIGFkZHJlc3MgaXMgYSBtdWx0aXBsZSBvZiBRVUVVRV9DTEVBTlVQ X0RFTEFZLApAQCAtMTUwNSwxMiArMTQ5OSwxMSBAQCBhc3luY1F1ZXVlQWRkRW50cmllcyhMaXN0 Q2VsbCAqbmV4dE5vdGlmeSkKIAkJCWJyZWFrOwogCQl9CiAJfQorCVVubG9ja1JlbGVhc2VCdWZm ZXIoYnVmZmVyKTsKIAogCS8qIFN1Y2Nlc3MsIHNvIHVwZGF0ZSB0aGUgZ2xvYmFsIFFVRVVFX0hF QUQgKi8KIAlRVUVVRV9IRUFEID0gcXVldWVfaGVhZDsKIAotCUxXTG9ja1JlbGVhc2UoTm90aWZ5 U0xSVUxvY2spOwotCiAJcmV0dXJuIG5leHROb3RpZnk7CiB9CiAKQEAgLTE5ODMsMTcgKzE5NzYs MTYgQEAgYXN5bmNRdWV1ZVJlYWRBbGxOb3RpZmljYXRpb25zKHZvaWQpCiAJCXsKIAkJCWludAkJ CWN1cnBhZ2UgPSBRVUVVRV9QT1NfUEFHRShwb3MpOwogCQkJaW50CQkJY3Vyb2Zmc2V0ID0gUVVF VUVfUE9TX09GRlNFVChwb3MpOwotCQkJaW50CQkJc2xvdG5vOwogCQkJaW50CQkJY29weXNpemU7 CisJCQlCdWZmZXIJCWJ1ZmZlcjsKIAogCQkJLyoKLQkJCSAqIFdlIGNvcHkgdGhlIGRhdGEgZnJv bSBTTFJVIGludG8gYSBsb2NhbCBidWZmZXIsIHNvIGFzIHRvIGF2b2lkCi0JCQkgKiBob2xkaW5n IHRoZSBOb3RpZnlTTFJVTG9jayB3aGlsZSB3ZSBhcmUgZXhhbWluaW5nIHRoZSBlbnRyaWVzCi0J CQkgKiBhbmQgcG9zc2libHkgdHJhbnNtaXR0aW5nIHRoZW0gdG8gb3VyIGZyb250ZW5kLiAgQ29w eSBvbmx5IHRoZQotCQkJICogcGFydCBvZiB0aGUgcGFnZSB3ZSB3aWxsIGFjdHVhbGx5IGluc3Bl Y3QuCisJCQkgKiBXZSBjb3B5IHRoZSBkYXRhIGludG8gYSBsb2NhbCBidWZmZXIsIHNvIGFzIHRv IGF2b2lkIGhvbGRpbmcgYQorCQkJICogYnVmZmVyIHBpbiB3aGlsZSB3ZSBhcmUgZXhhbWluaW5n IHRoZSBlbnRyaWVzIGFuZCBwb3NzaWJseQorCQkJICogdHJhbnNtaXR0aW5nIHRoZW0gdG8gb3Vy IGZyb250ZW5kLiAgQ29weSBvbmx5IHRoZSBwYXJ0IG9mIHRoZQorCQkJICogcGFnZSB3ZSB3aWxs IGFjdHVhbGx5IGluc3BlY3QuCiAJCQkgKi8KLQkJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdl X1JlYWRPbmx5KE5vdGlmeUN0bCwgY3VycGFnZSwKLQkJCQkJCQkJCQkJCUludmFsaWRUcmFuc2Fj dGlvbklkKTsKKwkJCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfTk9USUZZX0lELCBjdXJw YWdlLCBSQk1fTk9STUFMKTsKIAkJCWlmIChjdXJwYWdlID09IFFVRVVFX1BPU19QQUdFKGhlYWQp KQogCQkJewogCQkJCS8qIHdlIG9ubHkgd2FudCB0byByZWFkIGFzIGZhciBhcyBoZWFkICovCkBA IC0yMDA0LDEzICsxOTk2LDEyIEBAIGFzeW5jUXVldWVSZWFkQWxsTm90aWZpY2F0aW9ucyh2b2lk KQogCQkJZWxzZQogCQkJewogCQkJCS8qIGZldGNoIGFsbCB0aGUgcmVzdCBvZiB0aGUgcGFnZSAq LwotCQkJCWNvcHlzaXplID0gUVVFVUVfUEFHRVNJWkUgLSBjdXJvZmZzZXQ7CisJCQkJY29weXNp emUgPSBRVUVVRV9QQUdFU0laRSAtIE1BWEFMSUdOKFNpemVPZlBhZ2VIZWFkZXJEYXRhKSAtIGN1 cm9mZnNldDsKIAkJCX0KLQkJCW1lbWNweShwYWdlX2J1ZmZlci5idWYgKyBjdXJvZmZzZXQsCi0J CQkJICAgTm90aWZ5Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBjdXJvZmZzZXQs CisJCQltZW1jcHkoUGFnZUdldENvbnRlbnRzKHBhZ2VfYnVmZmVyLmJ1ZikgKyAgY3Vyb2Zmc2V0 LAorCQkJCSAgIFBhZ2VHZXRDb250ZW50cyhCdWZmZXJHZXRQYWdlKGJ1ZmZlcikpICsgY3Vyb2Zm c2V0LAogCQkJCSAgIGNvcHlzaXplKTsKLQkJCS8qIFJlbGVhc2UgbG9jayB0aGF0IHdlIGdvdCBm cm9tIFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5KCkgKi8KLQkJCUxXTG9ja1JlbGVhc2UoTm90 aWZ5U0xSVUxvY2spOworCQkJUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCiAJCQkvKgogCQkJICog UHJvY2VzcyBtZXNzYWdlcyB1cCB0byB0aGUgc3RvcCBwb3NpdGlvbiwgZW5kIG9mIHBhZ2UsIG9y IGFuCkBAIC0yMDc4LDcgKzIwNjksNyBAQCBhc3luY1F1ZXVlUHJvY2Vzc1BhZ2VFbnRyaWVzKHZv bGF0aWxlIFF1ZXVlUG9zaXRpb24gKmN1cnJlbnQsCiAJCWlmIChRVUVVRV9QT1NfRVFVQUwodGhp c2VudHJ5LCBzdG9wKSkKIAkJCWJyZWFrOwogCi0JCXFlID0gKEFzeW5jUXVldWVFbnRyeSAqKSAo cGFnZV9idWZmZXIgKyBRVUVVRV9QT1NfT0ZGU0VUKHRoaXNlbnRyeSkpOworCQlxZSA9IChBc3lu Y1F1ZXVlRW50cnkgKikgKFBhZ2VHZXRDb250ZW50cyhwYWdlX2J1ZmZlcikgKyBRVUVVRV9QT1Nf T0ZGU0VUKHRoaXNlbnRyeSkpOwogCiAJCS8qCiAJCSAqIEFkdmFuY2UgKmN1cnJlbnQgb3ZlciB0 aGlzIG1lc3NhZ2UsIHBvc3NpYmx5IHRvIHRoZSBuZXh0IHBhZ2UuIEFzCkBAIC0yMjA3LDcgKzIx OTgsNyBAQCBhc3luY1F1ZXVlQWR2YW5jZVRhaWwodm9pZCkKIAkJICogU2ltcGxlTHJ1VHJ1bmNh dGUoKSB3aWxsIGFzayBmb3IgTm90aWZ5U0xSVUxvY2sgYnV0IHdpbGwgYWxzbwogCQkgKiByZWxl YXNlIHRoZSBsb2NrIGFnYWluLgogCQkgKi8KLQkJU2ltcGxlTHJ1VHJ1bmNhdGUoTm90aWZ5Q3Rs LCBuZXd0YWlscGFnZSk7CisJCVNpbXBsZUxydVRydW5jYXRlKFNMUlVfTk9USUZZX0lELCBhc3lu Y1F1ZXVlUGFnZVByZWNlZGVzLCBuZXd0YWlscGFnZSk7CiAKIAkJLyoKIAkJICogVXBkYXRlIFFV RVVFX1NUT1BfUEFHRS4gIFRoaXMgY2hhbmdlcyBhc3luY1F1ZXVlSXNGdWxsKCkncyB2ZXJkaWN0 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMKaW5kZXggMWY0Y2UyZmI5Y2YuLjAxODkyYTc1NjZl IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9kYmNvbW1hbmRzLmMKKysrIGIvc3Jj L2JhY2tlbmQvY29tbWFuZHMvZGJjb21tYW5kcy5jCkBAIC0yNTgsNyArMjU4LDcgQEAgU2NhblNv dXJjZURhdGFiYXNlUGdDbGFzcyhPaWQgdGJpZCwgT2lkIGRiaWQsIGNoYXIgKnNyY3BhdGgpCiAJ TGlzdAkgICAqcmxvY2F0b3JsaXN0ID0gTklMOwogCUxvY2tSZWxJZAlyZWxpZDsKIAlTbmFwc2hv dAlzbmFwc2hvdDsKLQlTTWdyUmVsYXRpb24Jc21ncjsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZTsK IAlCdWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3k7CiAKIAkvKiBHZXQgcGdfY2xhc3MgcmVs ZmlsZW51bWJlci4gKi8KQEAgLTI3NSw5ICsyNzUsOSBAQCBTY2FuU291cmNlRGF0YWJhc2VQZ0Ns YXNzKE9pZCB0YmlkLCBPaWQgZGJpZCwgY2hhciAqc3JjcGF0aCkKIAlybG9jYXRvci5kYk9pZCA9 IGRiaWQ7CiAJcmxvY2F0b3IucmVsTnVtYmVyID0gcmVsZmlsZW51bWJlcjsKIAotCXNtZ3IgPSBz bWdyb3BlbihybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7Ci0JbmJsb2NrcyA9IHNtZ3JuYmxv Y2tzKHNtZ3IsIE1BSU5fRk9SS05VTSk7Ci0Jc21ncmNsb3NlKHNtZ3IpOworCXNmaWxlID0gc21n cm9wZW4ocmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQsIE1BSU5fRk9SS05VTSk7CisJbmJsb2Nr cyA9IHNtZ3JuYmxvY2tzKHNmaWxlKTsKKwlzbWdyY2xvc2Uoc2ZpbGUpOwogCiAJLyogVXNlIGEg YnVmZmVyIGFjY2VzcyBzdHJhdGVneSBzaW5jZSB0aGlzIGlzIGEgYnVsayByZWFkIG9wZXJhdGlv bi4gKi8KIAlic3RyYXRlZ3kgPSBHZXRBY2Nlc3NTdHJhdGVneShCQVNfQlVMS1JFQUQpOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3NlcXVlbmNlLmMKaW5kZXggYmZlMjc5Y2RkZjEuLjQ2MGUyYmIxODIyIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCisrKyBiL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3NlcXVlbmNlLmMKQEAgLTM1MywxNCArMzUzLDE0IEBAIGZpbGxfc2VxX3dpdGhfZGF0 YShSZWxhdGlvbiByZWwsIEhlYXBUdXBsZSB0dXBsZSkKIAogCWlmIChyZWwtPnJkX3JlbC0+cmVs cGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQpCiAJewotCQlTTWdyUmVsYXRp b24gc3JlbDsKKwkJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAKLQkJc3JlbCA9IHNtZ3JvcGVuKHJl bC0+cmRfbG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCk7Ci0JCXNtZ3JjcmVhdGUoc3JlbCwgSU5J VF9GT1JLTlVNLCBmYWxzZSk7CisJCXNmaWxlID0gc21ncm9wZW4ocmVsLT5yZF9sb2NhdG9yLCBJ bnZhbGlkQmFja2VuZElkLCBJTklUX0ZPUktOVU0pOworCQlzbWdyY3JlYXRlKHNmaWxlLCBmYWxz ZSk7CiAJCWxvZ19zbWdyY3JlYXRlKCZyZWwtPnJkX2xvY2F0b3IsIElOSVRfRk9SS05VTSk7CiAJ CWZpbGxfc2VxX2Zvcmtfd2l0aF9kYXRhKHJlbCwgdHVwbGUsIElOSVRfRk9SS05VTSk7CiAJCUZs dXNoUmVsYXRpb25CdWZmZXJzKHJlbCk7Ci0JCXNtZ3JjbG9zZShzcmVsKTsKKwkJc21ncmNsb3Nl KHNmaWxlKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxl Y21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMKaW5kZXggMTI5MzU0NTk0 N2UuLmExZmYyZmM3N2E1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYwpAQCAtMTQ2NDgsOSAr MTQ2NDgsNyBAQCBBbHRlclRhYmxlTW92ZUFsbChBbHRlclRhYmxlTW92ZUFsbFN0bXQgKnN0bXQp CiBzdGF0aWMgdm9pZAogaW5kZXhfY29weV9kYXRhKFJlbGF0aW9uIHJlbCwgUmVsRmlsZUxvY2F0 b3IgbmV3cmxvY2F0b3IpCiB7Ci0JU01nclJlbGF0aW9uIGRzdHJlbDsKLQotCWRzdHJlbCA9IHNt Z3JvcGVuKG5ld3Jsb2NhdG9yLCByZWwtPnJkX2JhY2tlbmQpOworCVNNZ3JGaWxlSGFuZGxlIGRz dG1haW47CiAKIAkvKgogCSAqIFNpbmNlIHdlIGNvcHkgdGhlIGZpbGUgZGlyZWN0bHkgd2l0aG91 dCBsb29raW5nIGF0IHRoZSBzaGFyZWQgYnVmZmVycywKQEAgLTE0NjcwLDE2ICsxNDY2OCwyMCBA QCBpbmRleF9jb3B5X2RhdGEoUmVsYXRpb24gcmVsLCBSZWxGaWxlTG9jYXRvciBuZXdybG9jYXRv cikKIAlSZWxhdGlvbkNyZWF0ZVN0b3JhZ2UobmV3cmxvY2F0b3IsIHJlbC0+cmRfcmVsLT5yZWxw ZXJzaXN0ZW5jZSwgdHJ1ZSk7CiAKIAkvKiBjb3B5IG1haW4gZm9yayAqLwotCVJlbGF0aW9uQ29w eVN0b3JhZ2UoUmVsYXRpb25HZXRTbWdyKHJlbCksIGRzdHJlbCwgTUFJTl9GT1JLTlVNLAorCWRz dG1haW4gPSBzbWdyb3BlbihuZXdybG9jYXRvciwgcmVsLT5yZF9iYWNrZW5kLCBNQUlOX0ZPUktO VU0pOworCVJlbGF0aW9uQ29weVN0b3JhZ2UoUmVsYXRpb25HZXRTbWdyKHJlbCwgTUFJTl9GT1JL TlVNKSwgZHN0bWFpbiwKIAkJCQkJCXJlbC0+cmRfcmVsLT5yZWxwZXJzaXN0ZW5jZSk7CiAKIAkv KiBjb3B5IHRob3NlIGV4dHJhIGZvcmtzIHRoYXQgZXhpc3QgKi8KIAlmb3IgKEZvcmtOdW1iZXIg Zm9ya051bSA9IE1BSU5fRk9SS05VTSArIDE7CiAJCSBmb3JrTnVtIDw9IE1BWF9GT1JLTlVNOyBm b3JrTnVtKyspCiAJewotCQlpZiAoc21ncmV4aXN0cyhSZWxhdGlvbkdldFNtZ3IocmVsKSwgZm9y a051bSkpCisJCWlmIChzbWdyZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwsIGZvcmtOdW0pKSkK IAkJewotCQkJc21ncmNyZWF0ZShkc3RyZWwsIGZvcmtOdW0sIGZhbHNlKTsKKwkJCVNNZ3JGaWxl SGFuZGxlIHNyY19mb3JrID0gUmVsYXRpb25HZXRTbWdyKHJlbCwgZm9ya051bSk7CisJCQlTTWdy RmlsZUhhbmRsZSBkc3RfZm9yayA9IHNtZ3JvcGVuKG5ld3Jsb2NhdG9yLCByZWwtPnJkX2JhY2tl bmQsIGZvcmtOdW0pOworCisJCQlzbWdyY3JlYXRlKGRzdF9mb3JrLCBmYWxzZSk7CiAKIAkJCS8q CiAJCQkgKiBXQUwgbG9nIGNyZWF0aW9uIGlmIHRoZSByZWxhdGlvbiBpcyBwZXJzaXN0ZW50LCBv ciB0aGlzIGlzIHRoZQpAQCAtMTQ2ODksMTQgKzE0NjkxLDE1IEBAIGluZGV4X2NvcHlfZGF0YShS ZWxhdGlvbiByZWwsIFJlbEZpbGVMb2NhdG9yIG5ld3Jsb2NhdG9yKQogCQkJCShyZWwtPnJkX3Jl bC0+cmVscGVyc2lzdGVuY2UgPT0gUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQgJiYKIAkJCQkgZm9y a051bSA9PSBJTklUX0ZPUktOVU0pKQogCQkJCWxvZ19zbWdyY3JlYXRlKCZuZXdybG9jYXRvciwg Zm9ya051bSk7Ci0JCQlSZWxhdGlvbkNvcHlTdG9yYWdlKFJlbGF0aW9uR2V0U21ncihyZWwpLCBk c3RyZWwsIGZvcmtOdW0sCisJCQlSZWxhdGlvbkNvcHlTdG9yYWdlKHNyY19mb3JrLCBkc3RfZm9y aywKIAkJCQkJCQkJcmVsLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlKTsKKwkJCXNtZ3JjbG9zZShk c3RfZm9yayk7CiAJCX0KIAl9CiAKIAkvKiBkcm9wIG9sZCByZWxhdGlvbiwgYW5kIGNsb3NlIG5l dyBvbmUgKi8KIAlSZWxhdGlvbkRyb3BTdG9yYWdlKHJlbCk7Ci0Jc21ncmNsb3NlKGRzdHJlbCk7 CisJc21ncmNsb3NlKGRzdG1haW4pOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1 Zl9pbml0LmMKaW5kZXggMjA5NDZjNDdjYjQuLjk3NDY4MzhiZjlmIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYnVmZmVyL2J1Zl9pbml0LmMKQEAgLTIwLDYgKzIwLDcgQEAKIAogQnVmZmVyRGVzY1BhZGRl ZCAqQnVmZmVyRGVzY3JpcHRvcnM7CiBjaGFyCSAgICpCdWZmZXJCbG9ja3M7CitYTG9nUmVjUHRy ICpCdWZmZXJFeHRlcm5hbExTTnM7CiBDb25kaXRpb25WYXJpYWJsZU1pbmltYWxseVBhZGRlZCAq QnVmZmVySU9DVkFycmF5OwogV3JpdGViYWNrQ29udGV4dCBCYWNrZW5kV3JpdGViYWNrQ29udGV4 dDsKIENrcHRTb3J0SXRlbSAqQ2twdEJ1ZmZlcklkczsKQEAgLTY5LDkgKzcwLDExIEBAIEluaXRC dWZmZXJQb29sKHZvaWQpCiB7CiAJYm9vbAkJZm91bmRCdWZzLAogCQkJCWZvdW5kRGVzY3MsCisJ CQkJZm91bmRMU05zLAogCQkJCWZvdW5kSU9DViwKIAkJCQlmb3VuZEJ1ZkNrcHQ7CiAKKwogCS8q IEFsaWduIGRlc2NyaXB0b3JzIHRvIGEgY2FjaGVsaW5lIGJvdW5kYXJ5LiAqLwogCUJ1ZmZlckRl c2NyaXB0b3JzID0gKEJ1ZmZlckRlc2NQYWRkZWQgKikKIAkJU2htZW1Jbml0U3RydWN0KCJCdWZm ZXIgRGVzY3JpcHRvcnMiLApAQCAtODgsNiArOTEsMTEgQEAgSW5pdEJ1ZmZlclBvb2wodm9pZCkK IAkJCQkJCU5CdWZmZXJzICogc2l6ZW9mKENvbmRpdGlvblZhcmlhYmxlTWluaW1hbGx5UGFkZGVk KSwKIAkJCQkJCSZmb3VuZElPQ1YpOwogCisJQnVmZmVyRXh0ZXJuYWxMU05zID0gKFhMb2dSZWNQ dHIgKikKKwkJU2htZW1Jbml0U3RydWN0KCJCdWZmZXIgRXh0ZXJuYWwgTFNOcyIsCisJCQkJCQlO QnVmZmVycyAqIHNpemVvZihYTG9nUmVjUHRyKSwKKwkJCQkJCSZmb3VuZExTTnMpOworCiAJLyoK IAkgKiBUaGUgYXJyYXkgdXNlZCB0byBzb3J0IHRvLWJlLWNoZWNrcG9pbnRlZCBidWZmZXIgaWRz IGlzIGxvY2F0ZWQgaW4KIAkgKiBzaGFyZWQgbWVtb3J5LCB0byBhdm9pZCBoYXZpbmcgdG8gYWxs b2NhdGUgc2lnbmlmaWNhbnQgYW1vdW50cyBvZgpAQCAtOTksMTAgKzEwNywxMCBAQCBJbml0QnVm ZmVyUG9vbCh2b2lkKQogCQlTaG1lbUluaXRTdHJ1Y3QoIkNoZWNrcG9pbnQgQnVmZmVySWRzIiwK IAkJCQkJCU5CdWZmZXJzICogc2l6ZW9mKENrcHRTb3J0SXRlbSksICZmb3VuZEJ1ZkNrcHQpOwog Ci0JaWYgKGZvdW5kRGVzY3MgfHwgZm91bmRCdWZzIHx8IGZvdW5kSU9DViB8fCBmb3VuZEJ1ZkNr cHQpCisJaWYgKGZvdW5kRGVzY3MgfHwgZm91bmRCdWZzIHx8IGZvdW5kSU9DViB8fCBmb3VuZEJ1 ZkNrcHQgfHwgZm91bmRMU05zKQogCXsKIAkJLyogc2hvdWxkIGZpbmQgYWxsIG9mIHRoZXNlLCBv ciBub25lIG9mIHRoZW0gKi8KLQkJQXNzZXJ0KGZvdW5kRGVzY3MgJiYgZm91bmRCdWZzICYmIGZv dW5kSU9DViAmJiBmb3VuZEJ1ZkNrcHQpOworCQlBc3NlcnQoZm91bmREZXNjcyAmJiBmb3VuZEJ1 ZnMgJiYgZm91bmRJT0NWICYmIGZvdW5kQnVmQ2twdCAmJiBmb3VuZExTTnMpOwogCQkvKiBub3Rl OiB0aGlzIHBhdGggaXMgb25seSB0YWtlbiBpbiBFWEVDX0JBQ0tFTkQgY2FzZSAqLwogCX0KIAll bHNlCkBAIC0xMzMsNiArMTQxLDggQEAgSW5pdEJ1ZmZlclBvb2wodm9pZCkKIAkJCQkJCQkgTFdU UkFOQ0hFX0JVRkZFUl9DT05URU5UKTsKIAogCQkJQ29uZGl0aW9uVmFyaWFibGVJbml0KEJ1ZmZl ckRlc2NyaXB0b3JHZXRJT0NWKGJ1ZikpOworCisJCQlCdWZmZXJFeHRlcm5hbExTTnNbaV0gPSBJ bnZhbGlkWExvZ1JlY1B0cjsKIAkJfQogCiAJCS8qIENvcnJlY3QgbGFzdCBlbnRyeSBvZiBsaW5r ZWQgbGlzdCAqLwpAQCAtMTY2LDYgKzE3Niw5IEBAIEJ1ZmZlclNobWVtU2l6ZSh2b2lkKQogCS8q IHNpemUgb2YgZGF0YSBwYWdlcyAqLwogCXNpemUgPSBhZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShO QnVmZmVycywgQkxDS1NaKSk7CiAKKwkvKiBzaXplIG9mIGV4dGVybmFsIExTTnMgKi8KKwlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoTkJ1ZmZlcnMsIHNpemVvZihYTG9nUmVjUHRyKSkp OworCiAJLyogc2l6ZSBvZiBzdHVmZiBjb250cm9sbGVkIGJ5IGZyZWVsaXN0LmMgKi8KIAlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgU3RyYXRlZ3lTaG1lbVNpemUoKSk7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9i dWZmZXIvYnVmbWdyLmMKaW5kZXggMWJjOGQ2NTU1YjkuLjFiOTYwM2Q5MTYyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9z dG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtNTcsMTAgKzU3LDE3IEBACiAjaW5jbHVkZSAidXRp bHMvcmVzb3duZXJfcHJpdmF0ZS5oIgogI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgogCisv KgorICogWFhYIElkZWFsbHkgd2UnZCBzd2l0Y2ggdG8gc3RhbmRhcmQgcGFnZXMgZm9yIFNMUlUg ZGF0YSwgYnV0IGluIHRoZQorICogbWVhbnRpbWUgd2UgbmVlZCBzb21lIHdheSB0byBpZGVudGlm eSBidWZmZXJzIHRoYXQgaG9sZCByYXcgZGF0YSAobm8KKyAqIGludmFzaXZlIExTTiwgbm8gY2hl Y2tzdW1zKS4KKyAqLwogCiAvKiBOb3RlOiB0aGVzZSB0d28gbWFjcm9zIG9ubHkgd29yayBvbiBz aGFyZWQgYnVmZmVycywgbm90IGxvY2FsIG9uZXMhICovCiAjZGVmaW5lIEJ1ZkhkckdldEJsb2Nr KGJ1ZkhkcikJKChCbG9jaykgKEJ1ZmZlckJsb2NrcyArICgoU2l6ZSkgKGJ1ZkhkciktPmJ1Zl9p ZCkgKiBCTENLU1opKQotI2RlZmluZSBCdWZmZXJHZXRMU04oYnVmSGRyKQkoUGFnZUdldExTTihC dWZIZHJHZXRCbG9jayhidWZIZHIpKSkKKworI2RlZmluZSBCdWZmZXJHZXRMU04oYnVmSGRyKSBc CisJCVBhZ2VHZXRMU04oQnVmSGRyR2V0QmxvY2soYnVmSGRyKSkKIAogLyogTm90ZTogdGhpcyBt YWNybyBvbmx5IHdvcmtzIG9uIGxvY2FsIGJ1ZmZlcnMsIG5vdCBzaGFyZWQgb25lcyEgKi8KICNk ZWZpbmUgTG9jYWxCdWZIZHJHZXRCbG9jayhidWZIZHIpIFwKQEAgLTExNywxOSArMTI0LDYgQEAg dHlwZWRlZiBzdHJ1Y3QgQ2twdFRzU3RhdHVzCiAJaW50CQkJaW5kZXg7CiB9IENrcHRUc1N0YXR1 czsKIAotLyoKLSAqIFR5cGUgZm9yIGFycmF5IHVzZWQgdG8gc29ydCBTTWdyUmVsYXRpb25zCi0g KgotICogRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzIHNoYXJlcyB0aGUgc2FtZSBjb21wYXJhdG9y IGZ1bmN0aW9uIHdpdGgKLSAqIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzLiBQb2ludGVyIHRvIHRo aXMgc3RydWN0IGFuZCBSZWxGaWxlTG9jYXRvciBtdXN0IGJlCi0gKiBjb21wYXRpYmxlLgotICov Ci10eXBlZGVmIHN0cnVjdCBTTWdyU29ydEFycmF5Ci17Ci0JUmVsRmlsZUxvY2F0b3IgcmxvY2F0 b3I7CS8qIFRoaXMgbXVzdCBiZSB0aGUgZmlyc3QgbWVtYmVyICovCi0JU01nclJlbGF0aW9uIHNy ZWw7Ci19IFNNZ3JTb3J0QXJyYXk7Ci0KIC8qIEdVQyB2YXJpYWJsZXMgKi8KIGJvb2wJCXplcm9f ZGFtYWdlZF9wYWdlcyA9IGZhbHNlOwogaW50CQkJYmd3cml0ZXJfbHJ1X21heHBhZ2VzID0gMTAw OwpAQCAtNDUwLDggKzQ0NCw4IEBAIEZvcmdldFByaXZhdGVSZWZDb3VudEVudHJ5KFByaXZhdGVS ZWZDb3VudEVudHJ5ICpyZWYpCiApCiAKIAotc3RhdGljIEJ1ZmZlciBSZWFkQnVmZmVyX2NvbW1v bihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwKLQkJCQkJCQkJRm9ya051 bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSwKK3N0YXRpYyBCdWZmZXIgUmVhZEJ1 ZmZlcl9jb21tb24oU01nckZpbGVIYW5kbGUgc2ZpbGUsIGNoYXIgcmVscGVyc2lzdGVuY2UsCisJ CQkJCQkJCUJsb2NrTnVtYmVyIGJsb2NrTnVtLAogCQkJCQkJCQlSZWFkQnVmZmVyTW9kZSBtb2Rl LCBCdWZmZXJBY2Nlc3NTdHJhdGVneSBzdHJhdGVneSwKIAkJCQkJCQkJYm9vbCAqaGl0KTsKIHN0 YXRpYyBib29sIFBpbkJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5 IHN0cmF0ZWd5KTsKQEAgLTQ2NywyMCArNDYxLDE5IEBAIHN0YXRpYyB2b2lkIFRlcm1pbmF0ZUJ1 ZmZlcklPKEJ1ZmZlckRlc2MgKmJ1ZiwgYm9vbCBjbGVhcl9kaXJ0eSwKIAkJCQkJCQkgIHVpbnQz MiBzZXRfZmxhZ19iaXRzKTsKIHN0YXRpYyB2b2lkIHNoYXJlZF9idWZmZXJfd3JpdGVfZXJyb3Jf Y2FsbGJhY2sodm9pZCAqYXJnKTsKIHN0YXRpYyB2b2lkIGxvY2FsX2J1ZmZlcl93cml0ZV9lcnJv cl9jYWxsYmFjayh2b2lkICphcmcpOwotc3RhdGljIEJ1ZmZlckRlc2MgKkJ1ZmZlckFsbG9jKFNN Z3JSZWxhdGlvbiBzbWdyLAorc3RhdGljIEJ1ZmZlckRlc2MgKkJ1ZmZlckFsbG9jKFNNZ3JGaWxl SGFuZGxlIHNtZ3IsCiAJCQkJCQkJICAgY2hhciByZWxwZXJzaXN0ZW5jZSwKLQkJCQkJCQkgICBG b3JrTnVtYmVyIGZvcmtOdW0sCiAJCQkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJCQkJ CQkJICAgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQkJCQkJICAgYm9vbCAqZm91 bmRQdHIpOwotc3RhdGljIHZvaWQgRmx1c2hCdWZmZXIoQnVmZmVyRGVzYyAqYnVmLCBTTWdyUmVs YXRpb24gcmVsbik7CitzdGF0aWMgdm9pZCBGbHVzaEJ1ZmZlcihCdWZmZXJEZXNjICpidWYsIFNN Z3JGaWxlSGFuZGxlIHNmaWxlKTsKIHN0YXRpYyB2b2lkIEZpbmRBbmREcm9wUmVsYXRpb25CdWZm ZXJzKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLAotCQkJCQkJCQkJICAgRm9ya051bWJlciBmb3Jr TnVtLAorCQkJCQkJCQkJICAgRm9ya051bWJlciBmb3JrbnVtLAogCQkJCQkJCQkJICAgQmxvY2tO dW1iZXIgbkZvcmtCbG9jaywKIAkJCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGZpcnN0RGVsQmxvY2sp Owogc3RhdGljIHZvaWQgUmVsYXRpb25Db3B5U3RvcmFnZVVzaW5nQnVmZmVyKFJlbEZpbGVMb2Nh dG9yIHNyY2xvY2F0b3IsCiAJCQkJCQkJCQkJICAgUmVsRmlsZUxvY2F0b3IgZHN0bG9jYXRvciwK LQkJCQkJCQkJCQkgICBGb3JrTnVtYmVyIGZvcmtOdW0sIGJvb2wgcGVybWFuZW50KTsKKwkJCQkJ CQkJCQkgICBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgcGVybWFuZW50KTsKIHN0YXRpYyB2b2lk IEF0UHJvY0V4aXRfQnVmZmVycyhpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIENo ZWNrRm9yQnVmZmVyTGVha3Modm9pZCk7CiBzdGF0aWMgaW50CXJsb2NhdG9yX2NvbXBhcmF0b3Io Y29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKTsKQEAgLTQ5Myw5ICs0ODYsNyBAQCBzdGF0 aWMgaW50CXRzX2NrcHRfcHJvZ3Jlc3NfY29tcGFyYXRvcihEYXR1bSBhLCBEYXR1bSBiLCB2b2lk ICphcmcpOwogICogSW1wbGVtZW50YXRpb24gb2YgUHJlZmV0Y2hCdWZmZXIoKSBmb3Igc2hhcmVk IGJ1ZmZlcnMuCiAgKi8KIFByZWZldGNoQnVmZmVyUmVzdWx0Ci1QcmVmZXRjaFNoYXJlZEJ1ZmZl cihTTWdyUmVsYXRpb24gc21ncl9yZWxuLAotCQkJCQkgRm9ya051bWJlciBmb3JrTnVtLAotCQkJ CQkgQmxvY2tOdW1iZXIgYmxvY2tOdW0pCitQcmVmZXRjaFNoYXJlZEJ1ZmZlcihTTWdyRmlsZUhh bmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0pCiB7CiAJUHJlZmV0Y2hCdWZmZXJSZXN1 bHQgcmVzdWx0ID0ge0ludmFsaWRCdWZmZXIsIGZhbHNlfTsKIAlCdWZmZXJUYWcJbmV3VGFnOwkJ CS8qIGlkZW50aXR5IG9mIHJlcXVlc3RlZCBibG9jayAqLwpAQCAtNTA2LDggKzQ5Nyw5IEBAIFBy ZWZldGNoU2hhcmVkQnVmZmVyKFNNZ3JSZWxhdGlvbiBzbWdyX3JlbG4sCiAJQXNzZXJ0KEJsb2Nr TnVtYmVySXNWYWxpZChibG9ja051bSkpOwogCiAJLyogY3JlYXRlIGEgdGFnIHNvIHdlIGNhbiBs b29rdXAgdGhlIGJ1ZmZlciAqLwotCUluaXRCdWZmZXJUYWcoJm5ld1RhZywgJnNtZ3JfcmVsbi0+ c21ncl9ybG9jYXRvci5sb2NhdG9yLAotCQkJCSAgZm9ya051bSwgYmxvY2tOdW0pOworCisJSW5p dEJ1ZmZlclRhZygmbmV3VGFnLCAmc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLAorCQkJCSAg IHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9ya251bSwgYmxvY2tOdW0pOwogCiAJLyogZGV0ZXJtaW5l IGl0cyBoYXNoIGNvZGUgYW5kIHBhcnRpdGlvbiBsb2NrIElEICovCiAJbmV3SGFzaCA9IEJ1ZlRh YmxlSGFzaENvZGUoJm5ld1RhZyk7CkBAIC01MjYsNyArNTE4LDcgQEAgUHJlZmV0Y2hTaGFyZWRC dWZmZXIoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwKIAkJICogVHJ5IHRvIGluaXRpYXRlIGFuIGFz eW5jaHJvbm91cyByZWFkLiAgVGhpcyByZXR1cm5zIGZhbHNlIGluCiAJCSAqIHJlY292ZXJ5IGlm IHRoZSByZWxhdGlvbiBmaWxlIGRvZXNuJ3QgZXhpc3QuCiAJCSAqLwotCQlpZiAoc21ncnByZWZl dGNoKHNtZ3JfcmVsbiwgZm9ya051bSwgYmxvY2tOdW0pKQorCQlpZiAoc21ncnByZWZldGNoKHNm aWxlLCBibG9ja051bSkpCiAJCQlyZXN1bHQuaW5pdGlhdGVkX2lvID0gdHJ1ZTsKICNlbmRpZgkJ CQkJCQkvKiBVU0VfUFJFRkVUQ0ggKi8KIAl9CkBAIC01ODAsNyArNTcyLDcgQEAgUHJlZmV0Y2hT aGFyZWRCdWZmZXIoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwKICAqIHJlY292ZXJ5LCBhbiBlcnJv ciBpcyByYWlzZWQpLgogICovCiBQcmVmZXRjaEJ1ZmZlclJlc3VsdAotUHJlZmV0Y2hCdWZmZXIo UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051bWJlciBibG9ja051bSkK K1ByZWZldGNoQnVmZmVyKFJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tO dW1iZXIgYmxvY2tOdW0pCiB7CiAJQXNzZXJ0KFJlbGF0aW9uSXNWYWxpZChyZWxuKSk7CiAJQXNz ZXJ0KEJsb2NrTnVtYmVySXNWYWxpZChibG9ja051bSkpOwpAQCAtNTk0LDEyICs1ODYsMTIgQEAg UHJlZmV0Y2hCdWZmZXIoUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrTnVtLCBCbG9ja051 bWJlciBibG9ja051bSkKIAkJCQkJIGVycm1zZygiY2Fubm90IGFjY2VzcyB0ZW1wb3JhcnkgdGFi bGVzIG9mIG90aGVyIHNlc3Npb25zIikpKTsKIAogCQkvKiBwYXNzIGl0IG9mZiB0byBsb2NhbGJ1 Zi5jICovCi0JCXJldHVybiBQcmVmZXRjaExvY2FsQnVmZmVyKFJlbGF0aW9uR2V0U21ncihyZWxu KSwgZm9ya051bSwgYmxvY2tOdW0pOworCQlyZXR1cm4gUHJlZmV0Y2hMb2NhbEJ1ZmZlcihSZWxh dGlvbkdldFNtZ3IocmVsbiwgZm9ya251bSksIGJsb2NrTnVtKTsKIAl9CiAJZWxzZQogCXsKIAkJ LyogcGFzcyBpdCB0byB0aGUgc2hhcmVkIGJ1ZmZlciB2ZXJzaW9uICovCi0JCXJldHVybiBQcmVm ZXRjaFNoYXJlZEJ1ZmZlcihSZWxhdGlvbkdldFNtZ3IocmVsbiksIGZvcmtOdW0sIGJsb2NrTnVt KTsKKwkJcmV0dXJuIFByZWZldGNoU2hhcmVkQnVmZmVyKFJlbGF0aW9uR2V0U21ncihyZWxuLCBm b3JrbnVtKSwgYmxvY2tOdW0pOwogCX0KIH0KIApAQCAtNjExLDcgKzYwMyw3IEBAIFByZWZldGNo QnVmZmVyKFJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxv Y2tOdW0pCiAgKiB0YWcuICBJbiB0aGF0IGNhc2UsIHRoZSBidWZmZXIgaXMgcGlubmVkIGFuZCB0 aGUgdXNhZ2UgY291bnQgaXMgYnVtcGVkLgogICovCiBib29sCi1SZWFkUmVjZW50QnVmZmVyKFJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJs b2NrTnVtLAorUmVhZFJlY2VudEJ1ZmZlcihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9ya051 bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja051bSwKIAkJCQkgQnVmZmVyIHJlY2VudF9i dWZmZXIpCiB7CiAJQnVmZmVyRGVzYyAqYnVmSGRyOwpAQCAtNjIzLDcgKzYxNSw3IEBAIFJlYWRS ZWNlbnRCdWZmZXIoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya051bSwg QmxvY2tOdW1iZXIgYmxvY2tOCiAKIAlSZXNvdXJjZU93bmVyRW5sYXJnZUJ1ZmZlcnMoQ3VycmVu dFJlc291cmNlT3duZXIpOwogCVJlc2VydmVQcml2YXRlUmVmQ291bnRFbnRyeSgpOwotCUluaXRC dWZmZXJUYWcoJnRhZywgJnJsb2NhdG9yLCBmb3JrTnVtLCBibG9ja051bSk7CisJSW5pdEJ1ZmZl clRhZygmdGFnLCAmcmxvY2F0b3IsIGZvcmtudW0sIGJsb2NrTnVtKTsKIAogCWlmIChCdWZmZXJJ c0xvY2FsKHJlY2VudF9idWZmZXIpKQogCXsKQEAgLTc0Nyw3ICs3MzksNyBAQCBSZWFkQnVmZmVy KFJlbGF0aW9uIHJlbG4sIEJsb2NrTnVtYmVyIGJsb2NrTnVtKQogICogU2VlIGJ1ZmZlci9SRUFE TUUgZm9yIGRldGFpbHMuCiAgKi8KIEJ1ZmZlcgotUmVhZEJ1ZmZlckV4dGVuZGVkKFJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCitSZWFkQnVm ZmVyRXh0ZW5kZWQoUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJl ciBibG9ja051bSwKIAkJCQkgICBSZWFkQnVmZmVyTW9kZSBtb2RlLCBCdWZmZXJBY2Nlc3NTdHJh dGVneSBzdHJhdGVneSkKIHsKIAlib29sCQloaXQ7CkBAIC03NjgsOCArNzYwLDkgQEAgUmVhZEJ1 ZmZlckV4dGVuZGVkKFJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1i ZXIgYmxvY2tOdW0sCiAJICogbWlzcy4KIAkgKi8KIAlwZ3N0YXRfY291bnRfYnVmZmVyX3JlYWQo cmVsbik7Ci0JYnVmID0gUmVhZEJ1ZmZlcl9jb21tb24oUmVsYXRpb25HZXRTbWdyKHJlbG4pLCBy ZWxuLT5yZF9yZWwtPnJlbHBlcnNpc3RlbmNlLAotCQkJCQkJCWZvcmtOdW0sIGJsb2NrTnVtLCBt b2RlLCBzdHJhdGVneSwgJmhpdCk7CisJYnVmID0gUmVhZEJ1ZmZlcl9jb21tb24oUmVsYXRpb25H ZXRTbWdyKHJlbG4sIGZvcmtudW0pLAorCQkJCQkJCXJlbG4tPnJkX3JlbC0+cmVscGVyc2lzdGVu Y2UsCisJCQkJCQkJYmxvY2tOdW0sIG1vZGUsIHN0cmF0ZWd5LCAmaGl0KTsKIAlpZiAoaGl0KQog CQlwZ3N0YXRfY291bnRfYnVmZmVyX2hpdChyZWxuKTsKIAlyZXR1cm4gYnVmOwpAQCAtNzg3LDE5 ICs3ODAsMzEgQEAgUmVhZEJ1ZmZlckV4dGVuZGVkKFJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAgKiBCYWNrZW5kSWQpLgogICovCiBCdWZm ZXIKLVJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZv cmtOdW1iZXIgZm9ya051bSwKK1JlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUoUmVsRmlsZUxvY2F0 b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJCQkJCSAgQmxvY2tOdW1iZXIgYmxv Y2tOdW0sIFJlYWRCdWZmZXJNb2RlIG1vZGUsCiAJCQkJCQkgIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5 IHN0cmF0ZWd5LCBib29sIHBlcm1hbmVudCkKIHsKIAlib29sCQloaXQ7CiAKLQlTTWdyUmVsYXRp b24gc21nciA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkKTsKKwlTTWdyRmls ZUhhbmRsZSBzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBmb3Jr bnVtKTsKIAotCXJldHVybiBSZWFkQnVmZmVyX2NvbW1vbihzbWdyLCBwZXJtYW5lbnQgPyBSRUxQ RVJTSVNURU5DRV9QRVJNQU5FTlQgOgotCQkJCQkJCSBSRUxQRVJTSVNURU5DRV9VTkxPR0dFRCwg Zm9ya051bSwgYmxvY2tOdW0sCisJcmV0dXJuIFJlYWRCdWZmZXJfY29tbW9uKHNmaWxlLCBwZXJt YW5lbnQgPyBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQgOgorCQkJCQkJCSBSRUxQRVJTSVNURU5D RV9VTkxPR0dFRCwgYmxvY2tOdW0sCiAJCQkJCQkJIG1vZGUsIHN0cmF0ZWd5LCAmaGl0KTsKIH0K IAorQnVmZmVyCitSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlV2l0aEhpdChSZWxGaWxlTG9jYXRv ciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrbnVtLAorCQkJCQkJCQkgQmxvY2tOdW1iZXIgYmxv Y2tOdW0sIFJlYWRCdWZmZXJNb2RlIG1vZGUsCisJCQkJCQkJCSBCdWZmZXJBY2Nlc3NTdHJhdGVn eSBzdHJhdGVneSwgYm9vbCBwZXJtYW5lbnQsIGJvb2wgKmhpdCkKK3sKKwlTTWdyRmlsZUhhbmRs ZSBzZmlsZSA9IHNtZ3JvcGVuKHJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBmb3JrbnVtKTsK KworCXJldHVybiBSZWFkQnVmZmVyX2NvbW1vbihzZmlsZSwgcGVybWFuZW50ID8gUkVMUEVSU0lT VEVOQ0VfUEVSTUFORU5UIDoKKwkJCQkJCQkgUkVMUEVSU0lTVEVOQ0VfVU5MT0dHRUQsIGJsb2Nr TnVtLAorCQkJCQkJCSBtb2RlLCBzdHJhdGVneSwgaGl0KTsKK30KKwogCiAvKgogICogUmVhZEJ1 ZmZlcl9jb21tb24gLS0gY29tbW9uIGxvZ2ljIGZvciBhbGwgUmVhZEJ1ZmZlciB2YXJpYW50cwpA QCAtODA3LDcgKzgxMiw3IEBAIFJlYWRCdWZmZXJXaXRob3V0UmVsY2FjaGUoUmVsRmlsZUxvY2F0 b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya051bSwKICAqICpoaXQgaXMgc2V0IHRvIHRydWUg aWYgdGhlIHJlcXVlc3Qgd2FzIHNhdGlzZmllZCBmcm9tIHNoYXJlZCBidWZmZXIgY2FjaGUuCiAg Ki8KIHN0YXRpYyBCdWZmZXIKLVJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBj aGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCitSZWFkQnVmZmVyX2NvbW1v bihTTWdyRmlsZUhhbmRsZSBzZmlsZSwgY2hhciByZWxwZXJzaXN0ZW5jZSwKIAkJCQkgIEJsb2Nr TnVtYmVyIGJsb2NrTnVtLCBSZWFkQnVmZmVyTW9kZSBtb2RlLAogCQkJCSAgQnVmZmVyQWNjZXNz U3RyYXRlZ3kgc3RyYXRlZ3ksIGJvb2wgKmhpdCkKIHsKQEAgLTgxNSw3ICs4MjAsNyBAQCBSZWFk QnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9y a051bWJlciBmb3JrTnVtLAogCUJsb2NrCQlidWZCbG9jazsKIAlib29sCQlmb3VuZDsKIAlib29s CQlpc0V4dGVuZDsKLQlib29sCQlpc0xvY2FsQnVmID0gU21ncklzVGVtcChzbWdyKTsKKwlib29s CQlpc0xvY2FsQnVmID0gU21ncklzVGVtcChzZmlsZSk7CiAKIAkqaGl0ID0gZmFsc2U7CiAKQEAg LTgyNCwyOSArODI5LDMwIEBAIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBj aGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAKIAlpc0V4dGVuZCA9IChi bG9ja051bSA9PSBQX05FVyk7CiAKLQlUUkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9SRUFEX1NUQVJU KGZvcmtOdW0sIGJsb2NrTnVtLAotCQkJCQkJCQkJICAgc21nci0+c21ncl9ybG9jYXRvci5sb2Nh dG9yLnNwY09pZCwKLQkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9p ZCwKLQkJCQkJCQkJCSAgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCi0J CQkJCQkJCQkgICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQsCisJVFJBQ0VfUE9TVEdSRVNR TF9CVUZGRVJfUkVBRF9TVEFSVChzbWdyLT5zbWdyX2xvY2F0b3IuZm9ya251bSwKKwkJCQkJCQkJ CSAgIGJsb2NrTnVtLAorCQkJCQkJCQkJICAgc21nci0+c21ncl9sb2NhdG9yLmxvY2F0b3Iuc3Bj T2lkLAorCQkJCQkJCQkJICAgc21nci0+c21ncl9sb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJ CQkJCQkgICBzbWdyLT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIsCisJCQkJCQkJCQkg ICBzbWdyLT5zbWdyX2xvY2F0b3IuYmFja2VuZCwKIAkJCQkJCQkJCSAgIGlzRXh0ZW5kKTsKIAog CS8qIFN1YnN0aXR1dGUgcHJvcGVyIGJsb2NrIG51bWJlciBpZiBjYWxsZXIgYXNrZWQgZm9yIFBf TkVXICovCiAJaWYgKGlzRXh0ZW5kKQogCXsKLQkJYmxvY2tOdW0gPSBzbWdybmJsb2NrcyhzbWdy LCBmb3JrTnVtKTsKKwkJYmxvY2tOdW0gPSBzbWdybmJsb2NrcyhzZmlsZSk7CiAJCS8qIEZhaWwg aWYgcmVsYXRpb24gaXMgYWxyZWFkeSBhdCBtYXhpbXVtIHBvc3NpYmxlIGxlbmd0aCAqLwogCQlp ZiAoYmxvY2tOdW0gPT0gUF9ORVcpCiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZShF UlJDT0RFX1BST0dSQU1fTElNSVRfRVhDRUVERUQpLAogCQkJCQkgZXJybXNnKCJjYW5ub3QgZXh0 ZW5kIHJlbGF0aW9uICVzIGJleW9uZCAldSBibG9ja3MiLAotCQkJCQkJCXJlbHBhdGgoc21nci0+ c21ncl9ybG9jYXRvciwgZm9ya051bSksCisJCQkJCQkJc21ncmZpbGVwYXRoKHNmaWxlLT5zbWdy X2xvY2F0b3IpLAogCQkJCQkJCVBfTkVXKSkpOwogCX0KIAogCWlmIChpc0xvY2FsQnVmKQogCXsK LQkJYnVmSGRyID0gTG9jYWxCdWZmZXJBbGxvYyhzbWdyLCBmb3JrTnVtLCBibG9ja051bSwgJmZv dW5kKTsKKwkJYnVmSGRyID0gTG9jYWxCdWZmZXJBbGxvYyhzZmlsZSwgYmxvY2tOdW0sICZmb3Vu ZCk7CiAJCWlmIChmb3VuZCkKIAkJCXBnQnVmZmVyVXNhZ2UubG9jYWxfYmxrc19oaXQrKzsKIAkJ ZWxzZSBpZiAoaXNFeHRlbmQpCkBAIC04NjEsNyArODY3LDcgQEAgUmVhZEJ1ZmZlcl9jb21tb24o U01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051 bSwKIAkJICogbG9va3VwIHRoZSBidWZmZXIuICBJT19JTl9QUk9HUkVTUyBpcyBzZXQgaWYgdGhl IHJlcXVlc3RlZCBibG9jayBpcwogCQkgKiBub3QgY3VycmVudGx5IGluIG1lbW9yeS4KIAkJICov Ci0JCWJ1ZkhkciA9IEJ1ZmZlckFsbG9jKHNtZ3IsIHJlbHBlcnNpc3RlbmNlLCBmb3JrTnVtLCBi bG9ja051bSwKKwkJYnVmSGRyID0gQnVmZmVyQWxsb2Moc2ZpbGUsIHJlbHBlcnNpc3RlbmNlLCBi bG9ja051bSwKIAkJCQkJCQkgc3RyYXRlZ3ksICZmb3VuZCk7CiAJCWlmIChmb3VuZCkKIAkJCXBn QnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0Kys7CkBAIC04ODYsMTEgKzg5MiwxMiBAQCBSZWFk QnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9y a051bWJlciBmb3JrTnVtLAogCQkJaWYgKFZhY3V1bUNvc3RBY3RpdmUpCiAJCQkJVmFjdXVtQ29z dEJhbGFuY2UgKz0gVmFjdXVtQ29zdFBhZ2VIaXQ7CiAKLQkJCVRSQUNFX1BPU1RHUkVTUUxfQlVG RkVSX1JFQURfRE9ORShmb3JrTnVtLCBibG9ja051bSwKLQkJCQkJCQkJCQkJICBzbWdyLT5zbWdy X3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0 b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCQkJICBzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0 b3IucmVsTnVtYmVyLAotCQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCwK KwkJCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURfRE9ORShzZmlsZS0+c21ncl9mb3JrbnVt LAorCQkJCQkJCQkJCQkgIGJsb2NrTnVtLAorCQkJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmxv Y2F0b3IuZGJPaWQsCisJCQkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5y ZWxOdW1iZXIsCisJCQkJCQkJCQkJCSAgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCwKIAkJ CQkJCQkJCQkJICBpc0V4dGVuZCwKIAkJCQkJCQkJCQkJICBmb3VuZCk7CiAKQEAgLTkyNyw3ICs5 MzQsNyBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJz aXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCQlpZiAoIVBhZ2VJc05ldygoUGFnZSkgYnVm QmxvY2spKQogCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJKGVycm1zZygidW5leHBlY3RlZCBkYXRh IGJleW9uZCBFT0YgaW4gYmxvY2sgJXUgb2YgcmVsYXRpb24gJXMiLAotCQkJCQkJCWJsb2NrTnVt LCByZWxwYXRoKHNtZ3ItPnNtZ3JfcmxvY2F0b3IsIGZvcmtOdW0pKSwKKwkJCQkJCQlibG9ja051 bSwgc21ncmZpbGVwYXRoKHNmaWxlLT5zbWdyX2xvY2F0b3IpKSwKIAkJCQkJIGVycmhpbnQoIlRo aXMgaGFzIGJlZW4gc2VlbiB0byBvY2N1ciB3aXRoIGJ1Z2d5IGtlcm5lbHM7IGNvbnNpZGVyIHVw ZGF0aW5nIHlvdXIgc3lzdGVtLiIpKSk7CiAKIAkJLyoKQEAgLTk4NCw3ICs5OTEsNyBAQCBSZWFk QnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9y a051bWJlciBmb3JrTnVtLAogCQkvKiBuZXcgYnVmZmVycyBhcmUgemVyby1maWxsZWQgKi8KIAkJ TWVtU2V0KChjaGFyICopIGJ1ZkJsb2NrLCAwLCBCTENLU1opOwogCQkvKiBkb24ndCBzZXQgY2hl Y2tzdW0gZm9yIGFsbC16ZXJvIHBhZ2UgKi8KLQkJc21ncmV4dGVuZChzbWdyLCBmb3JrTnVtLCBi bG9ja051bSwgKGNoYXIgKikgYnVmQmxvY2ssIGZhbHNlKTsKKwkJc21ncmV4dGVuZChzZmlsZSwg YmxvY2tOdW0sIChjaGFyICopIGJ1ZkJsb2NrLCBmYWxzZSk7CiAKIAkJLyoKIAkJICogTkI6IHdl J3JlICpub3QqIGRvaW5nIGEgU2NoZWR1bGVCdWZmZXJUYWdGb3JXcml0ZWJhY2sgaGVyZTsKQEAg LTEwMTEsNyArMTAxOCw3IEBAIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdyLCBj aGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCQllbHNlCiAJCQkJSU5T VFJfVElNRV9TRVRfWkVSTyhpb19zdGFydCk7CiAKLQkJCXNtZ3JyZWFkKHNtZ3IsIGZvcmtOdW0s IGJsb2NrTnVtLCAoY2hhciAqKSBidWZCbG9jayk7CisJCQlzbWdycmVhZChzZmlsZSwgYmxvY2tO dW0sIChjaGFyICopIGJ1ZkJsb2NrKTsKIAogCQkJaWYgKHRyYWNrX2lvX3RpbWluZykKIAkJCXsK QEAgLTEwMjIsOCArMTAyOSw4IEBAIFJlYWRCdWZmZXJfY29tbW9uKFNNZ3JSZWxhdGlvbiBzbWdy LCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCQl9CiAKIAkJCS8q IGNoZWNrIGZvciBnYXJiYWdlIGRhdGEgKi8KLQkJCWlmICghUGFnZUlzVmVyaWZpZWRFeHRlbmRl ZCgoUGFnZSkgYnVmQmxvY2ssIGJsb2NrTnVtLAotCQkJCQkJCQkJCVBJVl9MT0dfV0FSTklORyB8 IFBJVl9SRVBPUlRfU1RBVCkpCisJCQlpZiAoKCEobW9kZSA9PSBSQk1fVFJJTSkpICYmICghUGFn ZUlzVmVyaWZpZWRFeHRlbmRlZCgoUGFnZSkgYnVmQmxvY2ssIGJsb2NrTnVtLAorCQkJCQkJCQkJ CVBJVl9MT0dfV0FSTklORyB8IFBJVl9SRVBPUlRfU1RBVCkpKQogCQkJewogCQkJCWlmIChtb2Rl ID09IFJCTV9aRVJPX09OX0VSUk9SIHx8IHplcm9fZGFtYWdlZF9wYWdlcykKIAkJCQl7CkBAIC0x MDMxLDcgKzEwMzgsNyBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hh ciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCQkJCQkJCShlcnJjb2RlKEVS UkNPREVfREFUQV9DT1JSVVBURUQpLAogCQkJCQkJCSBlcnJtc2coImludmFsaWQgcGFnZSBpbiBi bG9jayAldSBvZiByZWxhdGlvbiAlczsgemVyb2luZyBvdXQgcGFnZSIsCiAJCQkJCQkJCQlibG9j a051bSwKLQkJCQkJCQkJCXJlbHBhdGgoc21nci0+c21ncl9ybG9jYXRvciwgZm9ya051bSkpKSk7 CisJCQkJCQkJCQlzbWdyZmlsZXBhdGgoc2ZpbGUtPnNtZ3JfbG9jYXRvcikpKSk7CiAJCQkJCU1l bVNldCgoY2hhciAqKSBidWZCbG9jaywgMCwgQkxDS1NaKTsKIAkJCQl9CiAJCQkJZWxzZQpAQCAt MTAzOSw3ICsxMDQ2LDcgQEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNo YXIgcmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCQkJCQkoZXJyY29kZShF UlJDT0RFX0RBVEFfQ09SUlVQVEVEKSwKIAkJCQkJCQkgZXJybXNnKCJpbnZhbGlkIHBhZ2UgaW4g YmxvY2sgJXUgb2YgcmVsYXRpb24gJXMiLAogCQkJCQkJCQkJYmxvY2tOdW0sCi0JCQkJCQkJCQly ZWxwYXRoKHNtZ3ItPnNtZ3JfcmxvY2F0b3IsIGZvcmtOdW0pKSkpOworCQkJCQkJCQkJc21ncmZp bGVwYXRoKHNmaWxlLT5zbWdyX2xvY2F0b3IpKSkpOwogCQkJfQogCQl9CiAJfQpAQCAtMTA3OCwx MSArMTA4NSwxMiBAQCBSZWFkQnVmZmVyX2NvbW1vbihTTWdyUmVsYXRpb24gc21nciwgY2hhciBy ZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAogCWlmIChWYWN1dW1Db3N0QWN0aXZl KQogCQlWYWN1dW1Db3N0QmFsYW5jZSArPSBWYWN1dW1Db3N0UGFnZU1pc3M7CiAKLQlUUkFDRV9Q T1NUR1JFU1FMX0JVRkZFUl9SRUFEX0RPTkUoZm9ya051bSwgYmxvY2tOdW0sCi0JCQkJCQkJCQkg IHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkgIHNtZ3ItPnNt Z3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRv ci5sb2NhdG9yLnJlbE51bWJlciwKLQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5iYWNr ZW5kLAorCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1JFQURfRE9ORShzZmlsZS0+c21ncl9sb2Nh dG9yLmZvcmtudW0sCisJCQkJCQkJCQkgIGJsb2NrTnVtLAorCQkJCQkJCQkJICBzZmlsZS0+c21n cl9sb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJICBzZmlsZS0+c21ncl9sb2NhdG9y LmxvY2F0b3IuZGJPaWQsCisJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5y ZWxOdW1iZXIsCisJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX2xvY2F0b3IuYmFja2VuZCwKIAkJCQkJ CQkJCSAgaXNFeHRlbmQsCiAJCQkJCQkJCQkgIGZvdW5kKTsKIApAQCAtMTEwOSw3ICsxMTE3LDcg QEAgUmVhZEJ1ZmZlcl9jb21tb24oU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIgcmVscGVyc2lzdGVu Y2UsIEZvcmtOdW1iZXIgZm9ya051bSwKICAqIE5vIGxvY2tzIGFyZSBoZWxkIGVpdGhlciBhdCBl bnRyeSBvciBleGl0LgogICovCiBzdGF0aWMgQnVmZmVyRGVzYyAqCi1CdWZmZXJBbGxvYyhTTWdy UmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVtLAor QnVmZmVyQWxsb2MoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGNoYXIgcmVscGVyc2lzdGVuY2UsCiAJ CQlCbG9ja051bWJlciBibG9ja051bSwKIAkJCUJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5 LAogCQkJYm9vbCAqZm91bmRQdHIpCkBAIC0xMTI3LDcgKzExMzUsNyBAQCBCdWZmZXJBbGxvYyhT TWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJlciBmb3JrTnVt LAogCXVpbnQzMgkJYnVmX3N0YXRlOwogCiAJLyogY3JlYXRlIGEgdGFnIHNvIHdlIGNhbiBsb29r dXAgdGhlIGJ1ZmZlciAqLwotCUluaXRCdWZmZXJUYWcoJm5ld1RhZywgJnNtZ3ItPnNtZ3Jfcmxv Y2F0b3IubG9jYXRvciwgZm9ya051bSwgYmxvY2tOdW0pOworCUluaXRCdWZmZXJUYWcoJm5ld1Rh ZywgJnNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvciwgc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3Jr bnVtLCBibG9ja051bSk7CiAKIAkvKiBkZXRlcm1pbmUgaXRzIGhhc2ggY29kZSBhbmQgcGFydGl0 aW9uIGxvY2sgSUQgKi8KIAluZXdIYXNoID0gQnVmVGFibGVIYXNoQ29kZSgmbmV3VGFnKTsKQEAg LTEyNTcsMTAgKzEyNjUsMTEgQEAgQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIGNoYXIg cmVscGVyc2lzdGVuY2UsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJCQl9CiAKIAkJCQkvKiBPSywg ZG8gdGhlIEkvTyAqLwotCQkJCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1dSSVRFX0RJUlRZX1NU QVJUKGZvcmtOdW0sIGJsb2NrTnVtLAotCQkJCQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0 b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJCQkJCSAgc21nci0+c21ncl9ybG9jYXRvci5s b2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCQkJCQkgIHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRv ci5yZWxOdW1iZXIpOworCQkJCVRSQUNFX1BPU1RHUkVTUUxfQlVGRkVSX1dSSVRFX0RJUlRZX1NU QVJUKHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9ya251bSwKKwkJCQkJCQkJCQkJCQkJICBibG9ja051 bSwKKwkJCQkJCQkJCQkJCQkJICBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAor CQkJCQkJCQkJCQkJCQkgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5kYk9pZCwKKwkJCQkJ CQkJCQkJCQkJICBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyKTsKIAogCQkJ CUZsdXNoQnVmZmVyKGJ1ZiwgTlVMTCk7CiAJCQkJTFdMb2NrUmVsZWFzZShCdWZmZXJEZXNjcmlw dG9yR2V0Q29udGVudExvY2soYnVmKSk7CkBAIC0xMjY4LDEwICsxMjc3LDExIEBAIEJ1ZmZlckFs bG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBjaGFyIHJlbHBlcnNpc3RlbmNlLCBGb3JrTnVtYmVyIGZv cmtOdW0sCiAJCQkJU2NoZWR1bGVCdWZmZXJUYWdGb3JXcml0ZWJhY2soJkJhY2tlbmRXcml0ZWJh Y2tDb250ZXh0LAogCQkJCQkJCQkJCQkgICZidWYtPnRhZyk7CiAKLQkJCQlUUkFDRV9QT1NUR1JF U1FMX0JVRkZFUl9XUklURV9ESVJUWV9ET05FKGZvcmtOdW0sIGJsb2NrTnVtLAotCQkJCQkJCQkJ CQkJCQkgc21nci0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCQkJCQkJ IHNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCQkJCQkJIHNtZ3It PnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIpOworCQkJCVRSQUNFX1BPU1RHUkVTUUxf QlVGRkVSX1dSSVRFX0RJUlRZX0RPTkUoc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLAorCQkJ CQkJCQkJCQkJCQkgYmxvY2tOdW0sCisJCQkJCQkJCQkJCQkJCSBzZmlsZS0+c21ncl9sb2NhdG9y LmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJCQkJCQkgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2Nh dG9yLmRiT2lkLAorCQkJCQkJCQkJCQkJCQkgc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnJl bE51bWJlcik7CiAJCQl9CiAJCQllbHNlCiAJCQl7CkBAIC0xNDI3LDcgKzE0MzcsNyBAQCBCdWZm ZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgY2hhciByZWxwZXJzaXN0ZW5jZSwgRm9ya051bWJl ciBmb3JrTnVtLAogCWJ1Zl9zdGF0ZSAmPSB+KEJNX1ZBTElEIHwgQk1fRElSVFkgfCBCTV9KVVNU X0RJUlRJRUQgfAogCQkJCSAgIEJNX0NIRUNLUE9JTlRfTkVFREVEIHwgQk1fSU9fRVJST1IgfCBC TV9QRVJNQU5FTlQgfAogCQkJCSAgIEJVRl9VU0FHRUNPVU5UX01BU0spOwotCWlmIChyZWxwZXJz aXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9QRVJNQU5FTlQgfHwgZm9ya051bSA9PSBJTklUX0ZP UktOVU0pCisJaWYgKHJlbHBlcnNpc3RlbmNlID09IFJFTFBFUlNJU1RFTkNFX1BFUk1BTkVOVCB8 fCBzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0gPT0gSU5JVF9GT1JLTlVNKQogCQlidWZfc3Rh dGUgfD0gQk1fVEFHX1ZBTElEIHwgQk1fUEVSTUFORU5UIHwgQlVGX1VTQUdFQ09VTlRfT05FOwog CWVsc2UKIAkJYnVmX3N0YXRlIHw9IEJNX1RBR19WQUxJRCB8IEJVRl9VU0FHRUNPVU5UX09ORTsK QEAgLTE2NDAsNyArMTY1MCw3IEBAIFJlbGVhc2VBbmRSZWFkQnVmZmVyKEJ1ZmZlciBidWZmZXIs CiAJCQkJCSBSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrTnVtKQog ewotCUZvcmtOdW1iZXIJZm9ya051bSA9IE1BSU5fRk9SS05VTTsKKwlGb3JrTnVtYmVyCWZvcmtu dW0gPSBNQUlOX0ZPUktOVU07CiAJQnVmZmVyRGVzYyAqYnVmSGRyOwogCiAJaWYgKEJ1ZmZlcklz VmFsaWQoYnVmZmVyKSkKQEAgLTE2NTEsNyArMTY2MSw3IEBAIFJlbGVhc2VBbmRSZWFkQnVmZmVy KEJ1ZmZlciBidWZmZXIsCiAJCQlidWZIZHIgPSBHZXRMb2NhbEJ1ZmZlckRlc2NyaXB0b3IoLWJ1 ZmZlciAtIDEpOwogCQkJaWYgKGJ1Zkhkci0+dGFnLmJsb2NrTnVtID09IGJsb2NrTnVtICYmCiAJ CQkJQnVmVGFnTWF0Y2hlc1JlbEZpbGVMb2NhdG9yKCZidWZIZHItPnRhZywgJnJlbGF0aW9uLT5y ZF9sb2NhdG9yKSAmJgotCQkJCUJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhkci0+dGFnKSA9PSBmb3Jr TnVtKQorCQkJCUJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhkci0+dGFnKSA9PSBmb3JrbnVtKQogCQkJ CXJldHVybiBidWZmZXI7CiAJCQlSZXNvdXJjZU93bmVyRm9yZ2V0QnVmZmVyKEN1cnJlbnRSZXNv dXJjZU93bmVyLCBidWZmZXIpOwogCQkJTG9jYWxSZWZDb3VudFstYnVmZmVyIC0gMV0tLTsKQEAg LTE2NjIsNyArMTY3Miw3IEBAIFJlbGVhc2VBbmRSZWFkQnVmZmVyKEJ1ZmZlciBidWZmZXIsCiAJ CQkvKiB3ZSBoYXZlIHBpbiwgc28gaXQncyBvayB0byBleGFtaW5lIHRhZyB3aXRob3V0IHNwaW5s b2NrICovCiAJCQlpZiAoYnVmSGRyLT50YWcuYmxvY2tOdW0gPT0gYmxvY2tOdW0gJiYKIAkJCQlC dWZUYWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnLCAmcmVsYXRpb24tPnJkX2xv Y2F0b3IpICYmCi0JCQkJQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRyLT50YWcpID09IGZvcmtOdW0p CisJCQkJQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRyLT50YWcpID09IGZvcmtudW0pCiAJCQkJcmV0 dXJuIGJ1ZmZlcjsKIAkJCVVucGluQnVmZmVyKGJ1Zkhkcik7CiAJCX0KQEAgLTI4MTMsNyArMjgy Myw3IEBAIEJ1ZmZlckdldFRhZyhCdWZmZXIgYnVmZmVyLCBSZWxGaWxlTG9jYXRvciAqcmxvY2F0 b3IsIEZvcmtOdW1iZXIgKmZvcmtudW0sCiAgKiBhcyB0aGUgc2Vjb25kIHBhcmFtZXRlci4gIElm IG5vdCwgcGFzcyBOVUxMLgogICovCiBzdGF0aWMgdm9pZAotRmx1c2hCdWZmZXIoQnVmZmVyRGVz YyAqYnVmLCBTTWdyUmVsYXRpb24gcmVsbikKK0ZsdXNoQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1Ziwg U01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7CiAJWExvZ1JlY1B0cglyZWNwdHI7CiAJRXJyb3JDb250 ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CkBAIC0yODM4LDE0ICsyODQ4LDE0IEBAIEZsdXNoQnVm ZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgU01nclJlbGF0aW9uIHJlbG4pCiAJZXJyb3JfY29udGV4dF9z dGFjayA9ICZlcnJjYWxsYmFjazsKIAogCS8qIEZpbmQgc21nciByZWxhdGlvbiBmb3IgYnVmZmVy ICovCi0JaWYgKHJlbG4gPT0gTlVMTCkKLQkJcmVsbiA9IHNtZ3JvcGVuKEJ1ZlRhZ0dldFJlbEZp bGVMb2NhdG9yKCZidWYtPnRhZyksIEludmFsaWRCYWNrZW5kSWQpOworCWlmIChzZmlsZSA9PSBO VUxMKQorCQlzZmlsZSA9IHNtZ3JvcGVuKEJ1ZlRhZ0dldFJlbEZpbGVMb2NhdG9yKCZidWYtPnRh ZyksIEludmFsaWRCYWNrZW5kSWQsIEJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zi0+dGFnKSk7CiAKLQlU UkFDRV9QT1NUR1JFU1FMX0JVRkZFUl9GTFVTSF9TVEFSVChCdWZUYWdHZXRGb3JrTnVtKCZidWYt PnRhZyksCisJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfRkxVU0hfU1RBUlQoc2ZpbGUtPnNtZ3Jf bG9jYXRvci5mb3JrbnVtLAogCQkJCQkJCQkJCWJ1Zi0+dGFnLmJsb2NrTnVtLAotCQkJCQkJCQkJ CXJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5zcGNPaWQsCi0JCQkJCQkJCQkJcmVsbi0+c21n cl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0b3Iu bG9jYXRvci5yZWxOdW1iZXIpOworCQkJCQkJCQkJCXNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRv ci5zcGNPaWQsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLmRiT2lkLAor CQkJCQkJCQkJCXNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5yZWxOdW1iZXIpOwogCiAJYnVm X3N0YXRlID0gTG9ja0J1ZkhkcihidWYpOwogCkBAIC0yOTAxLDggKzI5MTEsNyBAQCBGbHVzaEJ1 ZmZlcihCdWZmZXJEZXNjICpidWYsIFNNZ3JSZWxhdGlvbiByZWxuKQogCS8qCiAJICogYnVmVG9X cml0ZSBpcyBlaXRoZXIgdGhlIHNoYXJlZCBidWZmZXIgb3IgYSBjb3B5LCBhcyBhcHByb3ByaWF0 ZS4KIAkgKi8KLQlzbWdyd3JpdGUocmVsbiwKLQkJCSAgQnVmVGFnR2V0Rm9ya051bSgmYnVmLT50 YWcpLAorCXNtZ3J3cml0ZShzZmlsZSwKIAkJCSAgYnVmLT50YWcuYmxvY2tOdW0sCiAJCQkgIGJ1 ZlRvV3JpdGUsCiAJCQkgIGZhbHNlKTsKQEAgLTI5MjMsMTEgKzI5MzIsMTEgQEAgRmx1c2hCdWZm ZXIoQnVmZmVyRGVzYyAqYnVmLCBTTWdyUmVsYXRpb24gcmVsbikKIAkgKi8KIAlUZXJtaW5hdGVC dWZmZXJJTyhidWYsIHRydWUsIDApOwogCi0JVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfRkxVU0hf RE9ORShCdWZUYWdHZXRGb3JrTnVtKCZidWYtPnRhZyksCisJVFJBQ0VfUE9TVEdSRVNRTF9CVUZG RVJfRkxVU0hfRE9ORShzZmlsZS0+c21ncl9sb2NhdG9yLmZvcmtudW0sCiAJCQkJCQkJCQkgICBi dWYtPnRhZy5ibG9ja051bSwKLQkJCQkJCQkJCSAgIHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRv ci5zcGNPaWQsCi0JCQkJCQkJCQkgICByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQs Ci0JCQkJCQkJCQkgICByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyKTsKKwkJ CQkJCQkJCSAgIHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNPaWQsCisJCQkJCQkJCQkg ICBzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJCQkJCQkgICBzZmlsZS0+ c21ncl9sb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyKTsKIAogCS8qIFBvcCB0aGUgZXJyb3IgY29u dGV4dCBzdGFjayAqLwogCWVycm9yX2NvbnRleHRfc3RhY2sgPSBlcnJjYWxsYmFjay5wcmV2aW91 czsKQEAgLTI5NDIsNyArMjk1MSw3IEBAIEZsdXNoQnVmZmVyKEJ1ZmZlckRlc2MgKmJ1ZiwgU01n clJlbGF0aW9uIHJlbG4pCiAgKiBpdCBtaWdodCBub3QgYmUuCiAgKi8KIEJsb2NrTnVtYmVyCi1S ZWxhdGlvbkdldE51bWJlck9mQmxvY2tzSW5Gb3JrKFJlbGF0aW9uIHJlbGF0aW9uLCBGb3JrTnVt YmVyIGZvcmtOdW0pCitSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzSW5Gb3JrKFJlbGF0aW9uIHJl bGF0aW9uLCBGb3JrTnVtYmVyIGZvcmtudW0pCiB7CiAJaWYgKFJFTEtJTkRfSEFTX1RBQkxFX0FN KHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtpbmQpKQogCXsKQEAgLTI5NTQsMTMgKzI5NjMsMTMgQEAg UmVsYXRpb25HZXROdW1iZXJPZkJsb2Nrc0luRm9yayhSZWxhdGlvbiByZWxhdGlvbiwgRm9ya051 bWJlciBmb3JrTnVtKQogCQkgKi8KIAkJdWludDY0CQlzemJ5dGVzOwogCi0JCXN6Ynl0ZXMgPSB0 YWJsZV9yZWxhdGlvbl9zaXplKHJlbGF0aW9uLCBmb3JrTnVtKTsKKwkJc3pieXRlcyA9IHRhYmxl X3JlbGF0aW9uX3NpemUocmVsYXRpb24sIGZvcmtudW0pOwogCiAJCXJldHVybiAoc3pieXRlcyAr IChCTENLU1ogLSAxKSkgLyBCTENLU1o7CiAJfQogCWVsc2UgaWYgKFJFTEtJTkRfSEFTX1NUT1JB R0UocmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCkpCiAJewotCQlyZXR1cm4gc21ncm5ibG9ja3Mo UmVsYXRpb25HZXRTbWdyKHJlbGF0aW9uKSwgZm9ya051bSk7CisJCXJldHVybiBzbWdybmJsb2Nr cyhSZWxhdGlvbkdldFNtZ3IocmVsYXRpb24sIGZvcmtudW0pKTsKIAl9CiAJZWxzZQogCQlBc3Nl cnQoZmFsc2UpOwpAQCAtMzAyMyw2ICszMDMyLDcgQEAgQnVmZmVyR2V0TFNOQXRvbWljKEJ1ZmZl ciBidWZmZXIpCiAKIAlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGJ1Zkhkcik7CiAJbHNuID0gUGFn ZUdldExTTihwYWdlKTsKKwkKIAlVbmxvY2tCdWZIZHIoYnVmSGRyLCBidWZfc3RhdGUpOwogCiAJ cmV0dXJuIGxzbjsKQEAgLTMwNTAsMjYgKzMwNjAsMjAgQEAgQnVmZmVyR2V0TFNOQXRvbWljKEJ1 ZmZlciBidWZmZXIpCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiB2b2lkCi1Ecm9wUmVsYXRpb25CdWZm ZXJzKFNNZ3JSZWxhdGlvbiBzbWdyX3JlbG4sIEZvcmtOdW1iZXIgKmZvcmtOdW0sCitEcm9wUmVs YXRpb25CdWZmZXJzKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCwg Rm9ya051bWJlciAqZm9ya251bSwKIAkJCQkJaW50IG5mb3JrcywgQmxvY2tOdW1iZXIgKmZpcnN0 RGVsQmxvY2spCiB7CiAJaW50CQkJaTsKIAlpbnQJCQlqOwotCVJlbEZpbGVMb2NhdG9yQmFja2Vu ZCBybG9jYXRvcjsKIAlCbG9ja051bWJlciBuRm9ya0Jsb2NrW01BWF9GT1JLTlVNXTsKIAl1aW50 NjQJCW5CbG9ja3NUb0ludmFsaWRhdGUgPSAwOwogCi0JcmxvY2F0b3IgPSBzbWdyX3JlbG4tPnNt Z3JfcmxvY2F0b3I7Ci0KIAkvKiBJZiBpdCdzIGEgbG9jYWwgcmVsYXRpb24sIGl0J3MgbG9jYWxi dWYuYydzIHByb2JsZW0uICovCi0JaWYgKFJlbEZpbGVMb2NhdG9yQmFja2VuZElzVGVtcChybG9j YXRvcikpCisJaWYgKGJhY2tlbmQgPT0gTXlCYWNrZW5kSWQpCiAJewotCQlpZiAocmxvY2F0b3Iu YmFja2VuZCA9PSBNeUJhY2tlbmRJZCkKLQkJewotCQkJZm9yIChqID0gMDsgaiA8IG5mb3Jrczsg aisrKQotCQkJCURyb3BSZWxhdGlvbkxvY2FsQnVmZmVycyhybG9jYXRvci5sb2NhdG9yLCBmb3Jr TnVtW2pdLAotCQkJCQkJCQkJCSBmaXJzdERlbEJsb2NrW2pdKTsKLQkJfQorCQlmb3IgKGogPSAw OyBqIDwgbmZvcmtzOyBqKyspCisJCQlEcm9wUmVsYXRpb25Mb2NhbEJ1ZmZlcnMocmxvY2F0b3Is IGZvcmtudW1bal0sCisJCQkJCQkJCQkgZmlyc3REZWxCbG9ja1tqXSk7CiAJCXJldHVybjsKIAl9 CiAKQEAgLTMwOTgsNyArMzEwMiwxMCBAQCBEcm9wUmVsYXRpb25CdWZmZXJzKFNNZ3JSZWxhdGlv biBzbWdyX3JlbG4sIEZvcmtOdW1iZXIgKmZvcmtOdW0sCiAJZm9yIChpID0gMDsgaSA8IG5mb3Jr czsgaSsrKQogCXsKIAkJLyogR2V0IHRoZSBudW1iZXIgb2YgYmxvY2tzIGZvciBhIHJlbGF0aW9u J3MgZm9yayAqLwotCQluRm9ya0Jsb2NrW2ldID0gc21ncm5ibG9ja3NfY2FjaGVkKHNtZ3JfcmVs biwgZm9ya051bVtpXSk7CisJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlOworCisJCXNmaWxlID0gc21n cm9wZW4ocmxvY2F0b3IsIGJhY2tlbmQsIGZvcmtudW1baV0pOworCQluRm9ya0Jsb2NrW2ldID0g c21ncm5ibG9ja3NfY2FjaGVkKHNmaWxlKTsKIAogCQlpZiAobkZvcmtCbG9ja1tpXSA9PSBJbnZh bGlkQmxvY2tOdW1iZXIpCiAJCXsKQEAgLTMxMTgsNyArMzEyNSw3IEBAIERyb3BSZWxhdGlvbkJ1 ZmZlcnMoU01nclJlbGF0aW9uIHNtZ3JfcmVsbiwgRm9ya051bWJlciAqZm9ya051bSwKIAkJbkJs b2Nrc1RvSW52YWxpZGF0ZSA8IEJVRl9EUk9QX0ZVTExfU0NBTl9USFJFU0hPTEQpCiAJewogCQlm b3IgKGogPSAwOyBqIDwgbmZvcmtzOyBqKyspCi0JCQlGaW5kQW5kRHJvcFJlbGF0aW9uQnVmZmVy cyhybG9jYXRvci5sb2NhdG9yLCBmb3JrTnVtW2pdLAorCQkJRmluZEFuZERyb3BSZWxhdGlvbkJ1 ZmZlcnMocmxvY2F0b3IsIGZvcmtudW1bal0sCiAJCQkJCQkJCQkgICBuRm9ya0Jsb2NrW2pdLCBm aXJzdERlbEJsb2NrW2pdKTsKIAkJcmV0dXJuOwogCX0KQEAgLTMxNDEsMTggKzMxNDgsMTggQEAg RHJvcFJlbGF0aW9uQnVmZmVycyhTTWdyUmVsYXRpb24gc21ncl9yZWxuLCBGb3JrTnVtYmVyICpm b3JrTnVtLAogCQkgKiBmYWxzZSBwb3NpdGl2ZXMgYXJlIHNhZmUgYmVjYXVzZSB3ZSdsbCByZWNo ZWNrIGFmdGVyIGdldHRpbmcgdGhlCiAJCSAqIGJ1ZmZlciBsb2NrLgogCQkgKgotCQkgKiBXZSBj b3VsZCBjaGVjayBmb3JrTnVtIGFuZCBibG9ja051bSBhcyB3ZWxsIGFzIHRoZSBybG9jYXRvciwg YnV0CisJCSAqIFdlIGNvdWxkIGNoZWNrIGZvcmtudW0gYW5kIGJsb2NrTnVtIGFzIHdlbGwgYXMg dGhlIHJsb2NhdG9yLCBidXQKIAkJICogdGhlIGluY3JlbWVudGFsIHdpbiBmcm9tIGRvaW5nIHNv IHNlZW1zIHNtYWxsLgogCQkgKi8KLQkJaWYgKCFCdWZUYWdNYXRjaGVzUmVsRmlsZUxvY2F0b3Io JmJ1Zkhkci0+dGFnLCAmcmxvY2F0b3IubG9jYXRvcikpCisJCWlmICghQnVmVGFnTWF0Y2hlc1Jl bEZpbGVMb2NhdG9yKCZidWZIZHItPnRhZywgJnJsb2NhdG9yKSkKIAkJCWNvbnRpbnVlOwogCiAJ CWJ1Zl9zdGF0ZSA9IExvY2tCdWZIZHIoYnVmSGRyKTsKIAogCQlmb3IgKGogPSAwOyBqIDwgbmZv cmtzOyBqKyspCiAJCXsKLQkJCWlmIChCdWZUYWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1Zkhk ci0+dGFnLCAmcmxvY2F0b3IubG9jYXRvcikgJiYKLQkJCQlCdWZUYWdHZXRGb3JrTnVtKCZidWZI ZHItPnRhZykgPT0gZm9ya051bVtqXSAmJgorCQkJaWYgKEJ1ZlRhZ01hdGNoZXNSZWxGaWxlTG9j YXRvcigmYnVmSGRyLT50YWcsICZybG9jYXRvcikgJiYKKwkJCQlCdWZUYWdHZXRGb3JrTnVtKCZi dWZIZHItPnRhZykgPT0gZm9ya251bVtqXSAmJgogCQkJCWJ1Zkhkci0+dGFnLmJsb2NrTnVtID49 IGZpcnN0RGVsQmxvY2tbal0pCiAJCQl7CiAJCQkJSW52YWxpZGF0ZUJ1ZmZlcihidWZIZHIpOwkv KiByZWxlYXNlcyBzcGlubG9jayAqLwpAQCAtMzE3MywxMSArMzE4MCwxMCBAQCBEcm9wUmVsYXRp b25CdWZmZXJzKFNNZ3JSZWxhdGlvbiBzbWdyX3JlbG4sIEZvcmtOdW1iZXIgKmZvcmtOdW0sCiAg KgkJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KICAqLwogdm9pZAotRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMoU01nclJl bGF0aW9uICpzbWdyX3JlbG4sIGludCBubG9jYXRvcnMpCitEcm9wUmVsYXRpb25zQWxsQnVmZmVy cyhSZWxGaWxlTG9jYXRvckJhY2tlbmQgKnJsb2NhdG9ycywgaW50IG5sb2NhdG9ycykKIHsKIAlp bnQJCQlpOwogCWludAkJCW4gPSAwOwotCVNNZ3JSZWxhdGlvbiAqcmVsczsKIAlCbG9ja051bWJl ciAoKmJsb2NrKVtNQVhfRk9SS05VTSArIDFdOwogCXVpbnQ2NAkJbkJsb2Nrc1RvSW52YWxpZGF0 ZSA9IDA7CiAJUmVsRmlsZUxvY2F0b3IgKmxvY2F0b3JzOwpAQCAtMzE4NywxOCArMzE5MywxOCBA QCBEcm9wUmVsYXRpb25zQWxsQnVmZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JfcmVsbiwgaW50IG5s b2NhdG9ycykKIAlpZiAobmxvY2F0b3JzID09IDApCiAJCXJldHVybjsKIAotCXJlbHMgPSBwYWxs b2Moc2l6ZW9mKFNNZ3JSZWxhdGlvbikgKiBubG9jYXRvcnMpOwkvKiBub24tbG9jYWwgcmVsYXRp b25zICovCisJbG9jYXRvcnMgPSBwYWxsb2Moc2l6ZW9mKFJlbEZpbGVMb2NhdG9yKSAqIG5sb2Nh dG9ycyk7CS8qIG5vbi1sb2NhbCByZWxhdGlvbnMgKi8KIAogCS8qIElmIGl0J3MgYSBsb2NhbCBy ZWxhdGlvbiwgaXQncyBsb2NhbGJ1Zi5jJ3MgcHJvYmxlbS4gKi8KIAlmb3IgKGkgPSAwOyBpIDwg bmxvY2F0b3JzOyBpKyspCiAJewotCQlpZiAoUmVsRmlsZUxvY2F0b3JCYWNrZW5kSXNUZW1wKHNt Z3JfcmVsbltpXS0+c21ncl9ybG9jYXRvcikpCisJCWlmIChybG9jYXRvcnNbaV0uYmFja2VuZCAh PSBJbnZhbGlkQmFja2VuZElkKQogCQl7Ci0JCQlpZiAoc21ncl9yZWxuW2ldLT5zbWdyX3Jsb2Nh dG9yLmJhY2tlbmQgPT0gTXlCYWNrZW5kSWQpCi0JCQkJRHJvcFJlbGF0aW9uQWxsTG9jYWxCdWZm ZXJzKHNtZ3JfcmVsbltpXS0+c21ncl9ybG9jYXRvci5sb2NhdG9yKTsKKwkJCWlmIChybG9jYXRv cnNbaV0uYmFja2VuZCA9PSBNeUJhY2tlbmRJZCkKKwkJCQlEcm9wUmVsYXRpb25BbGxMb2NhbEJ1 ZmZlcnMocmxvY2F0b3JzW2ldLmxvY2F0b3IpOwogCQl9CiAJCWVsc2UKLQkJCXJlbHNbbisrXSA9 IHNtZ3JfcmVsbltpXTsKKwkJCWxvY2F0b3JzW24rK10gPSBybG9jYXRvcnNbaV0ubG9jYXRvcjsK IAl9CiAKIAkvKgpAQCAtMzIwNyw3ICszMjEzLDcgQEAgRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMo U01nclJlbGF0aW9uICpzbWdyX3JlbG4sIGludCBubG9jYXRvcnMpCiAJICovCiAJaWYgKG4gPT0g MCkKIAl7Ci0JCXBmcmVlKHJlbHMpOworCQlwZnJlZShsb2NhdG9ycyk7CiAJCXJldHVybjsKIAl9 CiAKQEAgLTMyMjcsMTIgKzMyMzMsMTMgQEAgRHJvcFJlbGF0aW9uc0FsbEJ1ZmZlcnMoU01nclJl bGF0aW9uICpzbWdyX3JlbG4sIGludCBubG9jYXRvcnMpCiAJCWZvciAoaW50IGogPSAwOyBqIDw9 IE1BWF9GT1JLTlVNOyBqKyspCiAJCXsKIAkJCS8qIEdldCB0aGUgbnVtYmVyIG9mIGJsb2NrcyBm b3IgYSByZWxhdGlvbidzIGZvcmsuICovCi0JCQlibG9ja1tpXVtqXSA9IHNtZ3JuYmxvY2tzX2Nh Y2hlZChyZWxzW2ldLCBqKTsKKwkJCVNNZ3JGaWxlSGFuZGxlIHNmaWxlID0gc21ncm9wZW4obG9j YXRvcnNbaV0sIEludmFsaWRCYWNrZW5kSWQsIGopOworCQkJYmxvY2tbaV1bal0gPSBzbWdybmJs b2Nrc19jYWNoZWQoc2ZpbGUpOwogCiAJCQkvKiBXZSBuZWVkIHRvIG9ubHkgY29uc2lkZXIgdGhl IHJlbGF0aW9uIGZvcmtzIHRoYXQgZXhpc3RzLiAqLwogCQkJaWYgKGJsb2NrW2ldW2pdID09IElu dmFsaWRCbG9ja051bWJlcikKIAkJCXsKLQkJCQlpZiAoIXNtZ3JleGlzdHMocmVsc1tpXSwgaikp CisJCQkJaWYgKCFzbWdyZXhpc3RzKHNmaWxlKSkKIAkJCQkJY29udGludWU7CiAJCQkJY2FjaGVk ID0gZmFsc2U7CiAJCQkJYnJlYWs7CkBAIC0zMjU4LDIwICszMjY1LDE3IEBAIERyb3BSZWxhdGlv bnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncl9yZWxuLCBpbnQgbmxvY2F0b3JzKQogCQkJ CQljb250aW51ZTsKIAogCQkJCS8qIGRyb3AgYWxsIHRoZSBidWZmZXJzIGZvciBhIHBhcnRpY3Vs YXIgcmVsYXRpb24gZm9yayAqLwotCQkJCUZpbmRBbmREcm9wUmVsYXRpb25CdWZmZXJzKHJlbHNb aV0tPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwKKwkJCQlGaW5kQW5kRHJvcFJlbGF0aW9uQnVmZmVy cyhsb2NhdG9yc1tpXSwKIAkJCQkJCQkJCQkgICBqLCBibG9ja1tpXVtqXSwgMCk7CiAJCQl9CiAJ CX0KIAogCQlwZnJlZShibG9jayk7Ci0JCXBmcmVlKHJlbHMpOworCQlwZnJlZShsb2NhdG9ycyk7 CiAJCXJldHVybjsKIAl9CiAKIAlwZnJlZShibG9jayk7Ci0JbG9jYXRvcnMgPSBwYWxsb2Moc2l6 ZW9mKFJlbEZpbGVMb2NhdG9yKSAqIG4pOwkvKiBub24tbG9jYWwgcmVsYXRpb25zICovCi0JZm9y IChpID0gMDsgaSA8IG47IGkrKykKLQkJbG9jYXRvcnNbaV0gPSByZWxzW2ldLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3I7CiAKIAkvKgogCSAqIEZvciBsb3cgbnVtYmVyIG9mIHJlbGF0aW9ucyB0byBk cm9wIGp1c3QgdXNlIGEgc2ltcGxlIHdhbGsgdGhyb3VnaCwgdG8KQEAgLTMzMzEsNyArMzMzNSw2 IEBAIERyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncl9yZWxuLCBpbnQg bmxvY2F0b3JzKQogCX0KIAogCXBmcmVlKGxvY2F0b3JzKTsKLQlwZnJlZShyZWxzKTsKIH0KIAog LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCkBAIC0zMzQ0LDcgKzMzNDcsNyBAQCBEcm9wUmVsYXRpb25zQWxsQnVm ZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JfcmVsbiwgaW50IG5sb2NhdG9ycykKICAqIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgKi8KIHN0YXRpYyB2b2lkCi1GaW5kQW5kRHJvcFJlbGF0aW9uQnVmZmVycyhSZWxGaWxl TG9jYXRvciBybG9jYXRvciwgRm9ya051bWJlciBmb3JrTnVtLAorRmluZEFuZERyb3BSZWxhdGlv bkJ1ZmZlcnMoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKIAkJ CQkJCSAgIEJsb2NrTnVtYmVyIG5Gb3JrQmxvY2ssCiAJCQkJCQkgICBCbG9ja051bWJlciBmaXJz dERlbEJsb2NrKQogewpAQCAtMzM2MCw3ICszMzYzLDcgQEAgRmluZEFuZERyb3BSZWxhdGlvbkJ1 ZmZlcnMoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya051bSwKIAkJdWlu dDMyCQlidWZfc3RhdGU7CiAKIAkJLyogY3JlYXRlIGEgdGFnIHNvIHdlIGNhbiBsb29rdXAgdGhl IGJ1ZmZlciAqLwotCQlJbml0QnVmZmVyVGFnKCZidWZUYWcsICZybG9jYXRvciwgZm9ya051bSwg Y3VyQmxvY2spOworCQlJbml0QnVmZmVyVGFnKCZidWZUYWcsICZybG9jYXRvciwgZm9ya251bSwg Y3VyQmxvY2spOwogCiAJCS8qIGRldGVybWluZSBpdHMgaGFzaCBjb2RlIGFuZCBwYXJ0aXRpb24g bG9jayBJRCAqLwogCQlidWZIYXNoID0gQnVmVGFibGVIYXNoQ29kZSgmYnVmVGFnKTsKQEAgLTMz ODUsNyArMzM4OCw3IEBAIEZpbmRBbmREcm9wUmVsYXRpb25CdWZmZXJzKFJlbEZpbGVMb2NhdG9y IHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtOdW0sCiAJCWJ1Zl9zdGF0ZSA9IExvY2tCdWZIZHIo YnVmSGRyKTsKIAogCQlpZiAoQnVmVGFnTWF0Y2hlc1JlbEZpbGVMb2NhdG9yKCZidWZIZHItPnRh ZywgJnJsb2NhdG9yKSAmJgotCQkJQnVmVGFnR2V0Rm9ya051bSgmYnVmSGRyLT50YWcpID09IGZv cmtOdW0gJiYKKwkJCUJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhkci0+dGFnKSA9PSBmb3JrbnVtICYm CiAJCQlidWZIZHItPnRhZy5ibG9ja051bSA+PSBmaXJzdERlbEJsb2NrKQogCQkJSW52YWxpZGF0 ZUJ1ZmZlcihidWZIZHIpOwkvKiByZWxlYXNlcyBzcGlubG9jayAqLwogCQllbHNlCkBAIC0zNTQw LDggKzM1NDMsNyBAQCBGbHVzaFJlbGF0aW9uQnVmZmVycyhSZWxhdGlvbiByZWwpCiAKIAkJCQlQ YWdlU2V0Q2hlY2tzdW1JbnBsYWNlKGxvY2FscGFnZSwgYnVmSGRyLT50YWcuYmxvY2tOdW0pOwog Ci0JCQkJc21ncndyaXRlKFJlbGF0aW9uR2V0U21ncihyZWwpLAotCQkJCQkJICBCdWZUYWdHZXRG b3JrTnVtKCZidWZIZHItPnRhZyksCisJCQkJc21ncndyaXRlKFJlbGF0aW9uR2V0U21ncihyZWws IEJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhkci0+dGFnKSksCiAJCQkJCQkgIGJ1Zkhkci0+dGFnLmJs b2NrTnVtLAogCQkJCQkJICBsb2NhbHBhZ2UsCiAJCQkJCQkgIGZhbHNlKTsKQEAgLTM1ODEsNyAr MzU4Myw3IEBAIEZsdXNoUmVsYXRpb25CdWZmZXJzKFJlbGF0aW9uIHJlbCkKIAkJewogCQkJUGlu QnVmZmVyX0xvY2tlZChidWZIZHIpOwogCQkJTFdMb2NrQWNxdWlyZShCdWZmZXJEZXNjcmlwdG9y R2V0Q29udGVudExvY2soYnVmSGRyKSwgTFdfU0hBUkVEKTsKLQkJCUZsdXNoQnVmZmVyKGJ1Zkhk ciwgUmVsYXRpb25HZXRTbWdyKHJlbCkpOworCQkJRmx1c2hCdWZmZXIoYnVmSGRyLCBSZWxhdGlv bkdldFNtZ3IocmVsLCBidWZIZHItPnRhZy5mb3JrTnVtKSk7CiAJCQlMV0xvY2tSZWxlYXNlKEJ1 ZmZlckRlc2NyaXB0b3JHZXRDb250ZW50TG9jayhidWZIZHIpKTsKIAkJCVVucGluQnVmZmVyKGJ1 Zkhkcik7CiAJCX0KQEAgLTM2MDAsMjUgKzM2MDIsMjAgQEAgRmx1c2hSZWxhdGlvbkJ1ZmZlcnMo UmVsYXRpb24gcmVsKQogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogdm9pZAotRmx1c2hSZWxhdGlvbnNB bGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncnMsIGludCBucmVscykKK0ZsdXNoUmVsYXRpb25z QWxsQnVmZmVycyhSZWxGaWxlTG9jYXRvciAqcmVscywgaW50IG5yZWxzKQogewogCWludAkJCWk7 Ci0JU01nclNvcnRBcnJheSAqc3JlbHM7CisJUmVsRmlsZUxvY2F0b3IgKmxvY2F0b3JzID0gTlVM TDsKIAlib29sCQl1c2VfYnNlYXJjaDsKIAogCWlmIChucmVscyA9PSAwKQogCQlyZXR1cm47CiAK IAkvKiBmaWxsLWluIGFycmF5IGZvciBxc29ydCAqLwotCXNyZWxzID0gcGFsbG9jKHNpemVvZihT TWdyU29ydEFycmF5KSAqIG5yZWxzKTsKKwlsb2NhdG9ycyA9IHBhbGxvYyhzaXplb2YoUmVsRmls ZUxvY2F0b3IpICogbnJlbHMpOwogCiAJZm9yIChpID0gMDsgaSA8IG5yZWxzOyBpKyspCi0Jewot CQlBc3NlcnQoIVJlbEZpbGVMb2NhdG9yQmFja2VuZElzVGVtcChzbWdyc1tpXS0+c21ncl9ybG9j YXRvcikpOwotCi0JCXNyZWxzW2ldLnJsb2NhdG9yID0gc21ncnNbaV0tPnNtZ3JfcmxvY2F0b3Iu bG9jYXRvcjsKLQkJc3JlbHNbaV0uc3JlbCA9IHNtZ3JzW2ldOwotCX0KKwkJbG9jYXRvcnNbaV0g PSByZWxzW2ldOwogCiAJLyoKIAkgKiBTYXZlIHRoZSBic2VhcmNoIG92ZXJoZWFkIGZvciBsb3cg bnVtYmVyIG9mIHJlbGF0aW9ucyB0byBzeW5jLiBTZWUKQEAgLTM2MjYsMTYgKzM2MjMsMTYgQEAg Rmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncnMsIGludCBucmVscykK IAkgKi8KIAl1c2VfYnNlYXJjaCA9IG5yZWxzID4gUkVMU19CU0VBUkNIX1RIUkVTSE9MRDsKIAot CS8qIHNvcnQgdGhlIGxpc3Qgb2YgU01nclJlbGF0aW9ucyBpZiBuZWNlc3NhcnkgKi8KKwkvKiBz b3J0IHRoZSBsaXN0IG9mIGxvY2F0b3JzIGlmIG5lY2Vzc2FyeSAqLwogCWlmICh1c2VfYnNlYXJj aCkKLQkJcGdfcXNvcnQoc3JlbHMsIG5yZWxzLCBzaXplb2YoU01nclNvcnRBcnJheSksIHJsb2Nh dG9yX2NvbXBhcmF0b3IpOworCQlwZ19xc29ydChsb2NhdG9ycywgbnJlbHMsIHNpemVvZihSZWxG aWxlTG9jYXRvciksIHJsb2NhdG9yX2NvbXBhcmF0b3IpOwogCiAJLyogTWFrZSBzdXJlIHdlIGNh biBoYW5kbGUgdGhlIHBpbiBpbnNpZGUgdGhlIGxvb3AgKi8KIAlSZXNvdXJjZU93bmVyRW5sYXJn ZUJ1ZmZlcnMoQ3VycmVudFJlc291cmNlT3duZXIpOwogCiAJZm9yIChpID0gMDsgaSA8IE5CdWZm ZXJzOyBpKyspCiAJewotCQlTTWdyU29ydEFycmF5ICpzcmVsZW50ID0gTlVMTDsKKwkJUmVsRmls ZUxvY2F0b3IgKmZvdW5kID0gTlVMTDsKIAkJQnVmZmVyRGVzYyAqYnVmSGRyID0gR2V0QnVmZmVy RGVzY3JpcHRvcihpKTsKIAkJdWludDMyCQlidWZfc3RhdGU7CiAKQEAgLTM2NTAsOSArMzY0Nyw5 IEBAIEZsdXNoUmVsYXRpb25zQWxsQnVmZmVycyhTTWdyUmVsYXRpb24gKnNtZ3JzLCBpbnQgbnJl bHMpCiAKIAkJCWZvciAoaiA9IDA7IGogPCBucmVsczsgaisrKQogCQkJewotCQkJCWlmIChCdWZU YWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnLCAmc3JlbHNbal0ucmxvY2F0b3Ip KQorCQkJCWlmIChCdWZUYWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnLCAmbG9j YXRvcnNbal0pKQogCQkJCXsKLQkJCQkJc3JlbGVudCA9ICZzcmVsc1tqXTsKKwkJCQkJZm91bmQg PSAmbG9jYXRvcnNbal07CiAJCQkJCWJyZWFrOwogCQkJCX0KIAkJCX0KQEAgLTM2NjIsMjQgKzM2 NTksMjYgQEAgRmx1c2hSZWxhdGlvbnNBbGxCdWZmZXJzKFNNZ3JSZWxhdGlvbiAqc21ncnMsIGlu dCBucmVscykKIAkJCVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yOwogCiAJCQlybG9jYXRvciA9IEJ1 ZlRhZ0dldFJlbEZpbGVMb2NhdG9yKCZidWZIZHItPnRhZyk7Ci0JCQlzcmVsZW50ID0gYnNlYXJj aCgoY29uc3Qgdm9pZCAqKSAmKHJsb2NhdG9yKSwKLQkJCQkJCQkgIHNyZWxzLCBucmVscywgc2l6 ZW9mKFNNZ3JTb3J0QXJyYXkpLAorCQkJZm91bmQgPSBic2VhcmNoKChjb25zdCB2b2lkICopICYo cmxvY2F0b3IpLAorCQkJCQkJCSAgbG9jYXRvcnMsIG5yZWxzLCBzaXplb2YoUmVsRmlsZUxvY2F0 b3IpLAogCQkJCQkJCSAgcmxvY2F0b3JfY29tcGFyYXRvcik7CiAJCX0KIAogCQkvKiBidWZmZXIg ZG9lc24ndCBiZWxvbmcgdG8gYW55IG9mIHRoZSBnaXZlbiByZWxmaWxlbG9jYXRvcnM7IHNraXAg aXQgKi8KLQkJaWYgKHNyZWxlbnQgPT0gTlVMTCkKKwkJaWYgKGZvdW5kID09IE5VTEwpCiAJCQlj b250aW51ZTsKIAorCQkvKiBGSVhNRTogY2FjaGUgU01nckZpbGVIYW5kbGVzIGZvciB0aGUgcmVs cywgYW5kIHBhc3MgdG8gRmx1c2hCdWZmZXIgKi8KKwogCQlSZXNlcnZlUHJpdmF0ZVJlZkNvdW50 RW50cnkoKTsKIAogCQlidWZfc3RhdGUgPSBMb2NrQnVmSGRyKGJ1Zkhkcik7Ci0JCWlmIChCdWZU YWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnLCAmc3JlbGVudC0+cmxvY2F0b3Ip ICYmCisJCWlmIChCdWZUYWdNYXRjaGVzUmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnLCBmb3Vu ZCkgJiYKIAkJCShidWZfc3RhdGUgJiAoQk1fVkFMSUQgfCBCTV9ESVJUWSkpID09IChCTV9WQUxJ RCB8IEJNX0RJUlRZKSkKIAkJewogCQkJUGluQnVmZmVyX0xvY2tlZChidWZIZHIpOwogCQkJTFdM b2NrQWNxdWlyZShCdWZmZXJEZXNjcmlwdG9yR2V0Q29udGVudExvY2soYnVmSGRyKSwgTFdfU0hB UkVEKTsKLQkJCUZsdXNoQnVmZmVyKGJ1Zkhkciwgc3JlbGVudC0+c3JlbCk7CisJCQlGbHVzaEJ1 ZmZlcihidWZIZHIsIE5VTEwpOwogCQkJTFdMb2NrUmVsZWFzZShCdWZmZXJEZXNjcmlwdG9yR2V0 Q29udGVudExvY2soYnVmSGRyKSk7CiAJCQlVbnBpbkJ1ZmZlcihidWZIZHIpOwogCQl9CkBAIC0z Njg3LDcgKzM2ODYsNyBAQCBGbHVzaFJlbGF0aW9uc0FsbEJ1ZmZlcnMoU01nclJlbGF0aW9uICpz bWdycywgaW50IG5yZWxzKQogCQkJVW5sb2NrQnVmSGRyKGJ1ZkhkciwgYnVmX3N0YXRlKTsKIAl9 CiAKLQlwZnJlZShzcmVscyk7CisJcGZyZWUobG9jYXRvcnMpOwogfQogCiAvKiAtLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KQEAgLTM3MDMsNyArMzcwMiw3IEBAIEZsdXNoUmVsYXRpb25zQWxsQnVmZmVycyhTTWdyUmVs YXRpb24gKnNtZ3JzLCBpbnQgbnJlbHMpCiBzdGF0aWMgdm9pZAogUmVsYXRpb25Db3B5U3RvcmFn ZVVzaW5nQnVmZmVyKFJlbEZpbGVMb2NhdG9yIHNyY2xvY2F0b3IsCiAJCQkJCQkJICAgUmVsRmls ZUxvY2F0b3IgZHN0bG9jYXRvciwKLQkJCQkJCQkgICBGb3JrTnVtYmVyIGZvcmtOdW0sIGJvb2wg cGVybWFuZW50KQorCQkJCQkJCSAgIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBwZXJtYW5lbnQp CiB7CiAJQnVmZmVyCQlzcmNCdWY7CiAJQnVmZmVyCQlkc3RCdWY7CkBAIC0zNzIxLDExICszNzIw LDExIEBAIFJlbGF0aW9uQ29weVN0b3JhZ2VVc2luZ0J1ZmZlcihSZWxGaWxlTG9jYXRvciBzcmNs b2NhdG9yLAogCSAqIGNhbiBza2lwIGl0IHdoZW4gY29weWluZyBhbnkgZm9yayBvZiBhbiB1bmxv Z2dlZCByZWxhdGlvbiBvdGhlciB0aGFuCiAJICogdGhlIGluaXQgZm9yay4KIAkgKi8KLQl1c2Vf d2FsID0gWExvZ0lzTmVlZGVkKCkgJiYgKHBlcm1hbmVudCB8fCBmb3JrTnVtID09IElOSVRfRk9S S05VTSk7CisJdXNlX3dhbCA9IFhMb2dJc05lZWRlZCgpICYmIChwZXJtYW5lbnQgfHwgZm9ya251 bSA9PSBJTklUX0ZPUktOVU0pOwogCiAJLyogR2V0IG51bWJlciBvZiBibG9ja3MgaW4gdGhlIHNv dXJjZSByZWxhdGlvbi4gKi8KLQluYmxvY2tzID0gc21ncm5ibG9ja3Moc21ncm9wZW4oc3JjbG9j YXRvciwgSW52YWxpZEJhY2tlbmRJZCksCi0JCQkJCQkgIGZvcmtOdW0pOworCW5ibG9ja3MgPSBz bWdybmJsb2NrcyhzbWdyb3BlbihzcmNsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBmb3JrbnVt KSk7CisJCQkJCQkgIAogCiAJLyogTm90aGluZyB0byBjb3B5OyBqdXN0IHJldHVybi4gKi8KIAlp ZiAobmJsb2NrcyA9PSAwKQpAQCAtMzczNiw3ICszNzM1LDcgQEAgUmVsYXRpb25Db3B5U3RvcmFn ZVVzaW5nQnVmZmVyKFJlbEZpbGVMb2NhdG9yIHNyY2xvY2F0b3IsCiAJICogcmVsYXRpb24gYmVm b3JlIHN0YXJ0aW5nIHRvIGNvcHkgYmxvY2sgYnkgYmxvY2suCiAJICovCiAJbWVtc2V0KGJ1Zi5k YXRhLCAwLCBCTENLU1opOwotCXNtZ3JleHRlbmQoc21ncm9wZW4oZHN0bG9jYXRvciwgSW52YWxp ZEJhY2tlbmRJZCksIGZvcmtOdW0sIG5ibG9ja3MgLSAxLAorCXNtZ3JleHRlbmQoc21ncm9wZW4o ZHN0bG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCwgZm9ya251bSksIG5ibG9ja3MgLSAxLAogCQkJ ICAgYnVmLmRhdGEsIHRydWUpOwogCiAJLyogVGhpcyBpcyBhIGJ1bGsgb3BlcmF0aW9uLCBzbyB1 c2UgYnVmZmVyIGFjY2VzcyBzdHJhdGVnaWVzLiAqLwpAQCAtMzc0OSwxNCArMzc0OCwxNCBAQCBS ZWxhdGlvbkNvcHlTdG9yYWdlVXNpbmdCdWZmZXIoUmVsRmlsZUxvY2F0b3Igc3JjbG9jYXRvciwK IAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAogCQkvKiBSZWFkIGJsb2NrIGZyb20gc291cmNl IHJlbGF0aW9uLiAqLwotCQlzcmNCdWYgPSBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlKHNyY2xv Y2F0b3IsIGZvcmtOdW0sIGJsa25vLAorCQlzcmNCdWYgPSBSZWFkQnVmZmVyV2l0aG91dFJlbGNh Y2hlKHNyY2xvY2F0b3IsIGZvcmtudW0sIGJsa25vLAogCQkJCQkJCQkJCSAgIFJCTV9OT1JNQUws IGJzdHJhdGVneV9zcmMsCiAJCQkJCQkJCQkJICAgcGVybWFuZW50KTsKIAkJTG9ja0J1ZmZlcihz cmNCdWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKIAkJc3JjUGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc3Jj QnVmKTsKIAogCQkvKiBVc2UgUF9ORVcgdG8gZXh0ZW5kIHRoZSBkZXN0aW5hdGlvbiByZWxhdGlv bi4gKi8KLQkJZHN0QnVmID0gUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShkc3Rsb2NhdG9yLCBm b3JrTnVtLCBibGtubywKKwkJZHN0QnVmID0gUmVhZEJ1ZmZlcldpdGhvdXRSZWxjYWNoZShkc3Rs b2NhdG9yLCBmb3JrbnVtLCBibGtubywKIAkJCQkJCQkJCQkgICBSQk1fTk9STUFMLCBic3RyYXRl Z3lfZHN0LAogCQkJCQkJCQkJCSAgIHBlcm1hbmVudCk7CiAJCUxvY2tCdWZmZXIoZHN0QnVmLCBC VUZGRVJfTE9DS19FWENMVVNJVkUpOwpAQCAtMzc5NCw3ICszNzkzLDYgQEAgdm9pZAogQ3JlYXRl QW5kQ29weVJlbGF0aW9uRGF0YShSZWxGaWxlTG9jYXRvciBzcmNfcmxvY2F0b3IsCiAJCQkJCQkg IFJlbEZpbGVMb2NhdG9yIGRzdF9ybG9jYXRvciwgYm9vbCBwZXJtYW5lbnQpCiB7Ci0JUmVsRmls ZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yOwogCWNoYXIJCXJlbHBlcnNpc3RlbmNlOwogCiAJLyog U2V0IHRoZSByZWxwZXJzaXN0ZW5jZS4gKi8KQEAgLTM4MTQsMzQgKzM4MTIsMzAgQEAgQ3JlYXRl QW5kQ29weVJlbGF0aW9uRGF0YShSZWxGaWxlTG9jYXRvciBzcmNfcmxvY2F0b3IsCiAJCQkJCQkJ CSAgIHBlcm1hbmVudCk7CiAKIAkvKiBjb3B5IHRob3NlIGV4dHJhIGZvcmtzIHRoYXQgZXhpc3Qg Ki8KLQlmb3IgKEZvcmtOdW1iZXIgZm9ya051bSA9IE1BSU5fRk9SS05VTSArIDE7Ci0JCSBmb3Jr TnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrTnVtKyspCisJZm9yIChGb3JrTnVtYmVyIGZvcmtudW0g PSBNQUlOX0ZPUktOVU0gKyAxOworCQkgZm9ya251bSA8PSBNQVhfRk9SS05VTTsgZm9ya251bSsr KQogCXsKLQkJaWYgKHNtZ3JleGlzdHMoc21ncm9wZW4oc3JjX3Jsb2NhdG9yLCBJbnZhbGlkQmFj a2VuZElkKSwgZm9ya051bSkpCisJCWlmIChzbWdyZXhpc3RzKHNtZ3JvcGVuKHNyY19ybG9jYXRv ciwgSW52YWxpZEJhY2tlbmRJZCwgZm9ya251bSkpKQogCQl7Ci0JCQlzbWdyY3JlYXRlKHNtZ3Jv cGVuKGRzdF9ybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJZCksIGZvcmtOdW0sIGZhbHNlKTsKKwkJ CXNtZ3JjcmVhdGUoc21ncm9wZW4oZHN0X3Jsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkLCBmb3Jr bnVtKSwgZmFsc2UpOwogCiAJCQkvKgogCQkJICogV0FMIGxvZyBjcmVhdGlvbiBpZiB0aGUgcmVs YXRpb24gaXMgcGVyc2lzdGVudCwgb3IgdGhpcyBpcyB0aGUKIAkJCSAqIGluaXQgZm9yayBvZiBh biB1bmxvZ2dlZCByZWxhdGlvbi4KIAkJCSAqLwotCQkJaWYgKHBlcm1hbmVudCB8fCBmb3JrTnVt ID09IElOSVRfRk9SS05VTSkKLQkJCQlsb2dfc21ncmNyZWF0ZSgmZHN0X3Jsb2NhdG9yLCBmb3Jr TnVtKTsKKwkJCWlmIChwZXJtYW5lbnQgfHwgZm9ya251bSA9PSBJTklUX0ZPUktOVU0pCisJCQkJ bG9nX3NtZ3JjcmVhdGUoJmRzdF9ybG9jYXRvciwgZm9ya251bSk7CiAKIAkJCS8qIENvcHkgYSBm b3JrJ3MgZGF0YSwgYmxvY2sgYnkgYmxvY2suICovCi0JCQlSZWxhdGlvbkNvcHlTdG9yYWdlVXNp bmdCdWZmZXIoc3JjX3Jsb2NhdG9yLCBkc3RfcmxvY2F0b3IsIGZvcmtOdW0sCisJCQlSZWxhdGlv bkNvcHlTdG9yYWdlVXNpbmdCdWZmZXIoc3JjX3Jsb2NhdG9yLCBkc3RfcmxvY2F0b3IsIGZvcmtu dW0sCiAJCQkJCQkJCQkJICAgcGVybWFuZW50KTsKIAkJfQogCX0KIAotCS8qIGNsb3NlIHNvdXJj ZSBhbmQgZGVzdGluYXRpb24gc21nciBpZiBleGlzdHMuICovCi0JcmxvY2F0b3IuYmFja2VuZCA9 IEludmFsaWRCYWNrZW5kSWQ7CiAKLQlybG9jYXRvci5sb2NhdG9yID0gc3JjX3Jsb2NhdG9yOwot CXNtZ3JjbG9zZXJlbGxvY2F0b3IocmxvY2F0b3IpOworCXNtZ3JjbG9zZXJlbGxvY2F0b3Ioc3Jj X3Jsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkKTsKIAotCXJsb2NhdG9yLmxvY2F0b3IgPSBkc3Rf cmxvY2F0b3I7Ci0Jc21ncmNsb3NlcmVsbG9jYXRvcihybG9jYXRvcik7CisJc21ncmNsb3NlcmVs bG9jYXRvcihkc3RfcmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOwogfQogCiAvKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KQEAgLTQ5NjIsNyArNDk1Niw3IEBAIElzc3VlUGVuZGluZ1dyaXRlYmFja3MoV3JpdGVi YWNrQ29udGV4dCAqY29udGV4dCkKIAl7CiAJCVBlbmRpbmdXcml0ZWJhY2sgKmN1cjsKIAkJUGVu ZGluZ1dyaXRlYmFjayAqbmV4dDsKLQkJU01nclJlbGF0aW9uIHJlbG47CisJCVNNZ3JGaWxlSGFu ZGxlIHNmaWxlOwogCQlpbnQJCQlhaGVhZDsKIAkJQnVmZmVyVGFnCXRhZzsKIAkJUmVsRmlsZUxv Y2F0b3IgY3VycmxvY2F0b3I7CkBAIC01MDAyLDggKzQ5OTYsOCBAQCBJc3N1ZVBlbmRpbmdXcml0 ZWJhY2tzKFdyaXRlYmFja0NvbnRleHQgKmNvbnRleHQpCiAJCWkgKz0gYWhlYWQ7CiAKIAkJLyog YW5kIGZpbmFsbHkgdGVsbCB0aGUga2VybmVsIHRvIHdyaXRlIHRoZSBkYXRhIHRvIHN0b3JhZ2Ug Ki8KLQkJcmVsbiA9IHNtZ3JvcGVuKGN1cnJsb2NhdG9yLCBJbnZhbGlkQmFja2VuZElkKTsKLQkJ c21ncndyaXRlYmFjayhyZWxuLCBCdWZUYWdHZXRGb3JrTnVtKCZ0YWcpLCB0YWcuYmxvY2tOdW0s IG5ibG9ja3MpOworCQlzZmlsZSA9IHNtZ3JvcGVuKGN1cnJsb2NhdG9yLCBJbnZhbGlkQmFja2Vu ZElkLCBCdWZUYWdHZXRGb3JrTnVtKCZ0YWcpKTsKKwkJc21ncndyaXRlYmFjayhzZmlsZSwgdGFn LmJsb2NrTnVtLCBuYmxvY2tzKTsKIAl9CiAKIAljb250ZXh0LT5ucl9wZW5kaW5nID0gMDsKQEAg LTUwMjUsMyArNTAxOSwyOSBAQCBUZXN0Rm9yT2xkU25hcHNob3RfaW1wbChTbmFwc2hvdCBzbmFw c2hvdCwgUmVsYXRpb24gcmVsYXRpb24pCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9TTkFQU0hPVF9U T09fT0xEKSwKIAkJCQkgZXJybXNnKCJzbmFwc2hvdCB0b28gb2xkIikpKTsKIH0KKworLyoKKyAq IENoZWNrIGlmIGEgYnVmZmVyIHRhZyBpcyBjdXJyZW50bHkgbWFwcGVkLgorICoKKyAqIFhYWCBE dWJpb3VzIHNlbWFudGljczsgbmVlZGVkIG9ubHkgZm9yIG11bHRpeGFjdCdzIGhhbmRsaW5nIGZv cgorICogaW5jb25zaXN0ZW50IHN0YXRlcy4KKyAqLworYm9vbAorQnVmZmVyUHJvYmUoUmVsRmls ZUxvY2F0b3IgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tO dW0pCit7CisJQnVmZmVyVGFnCXRhZzsKKwl1aW50MzIJCWhhc2g7CisJTFdMb2NrCSAgICpwYXJ0 aXRpb25Mb2NrOworCWludAkJCWJ1Zl9pZDsKKworCUluaXRCdWZmZXJUYWcoJnRhZywgJnJsb2Nh dG9yLCBmb3JrbnVtLCBibG9ja051bSk7CisKKwloYXNoID0gQnVmVGFibGVIYXNoQ29kZSgmdGFn KTsKKwlwYXJ0aXRpb25Mb2NrID0gQnVmTWFwcGluZ1BhcnRpdGlvbkxvY2soaGFzaCk7CisKKwlM V0xvY2tBY3F1aXJlKHBhcnRpdGlvbkxvY2ssIExXX1NIQVJFRCk7CisJYnVmX2lkID0gQnVmVGFi bGVMb29rdXAoJnRhZywgaGFzaCk7CisJTFdMb2NrUmVsZWFzZShwYXJ0aXRpb25Mb2NrKTsKKwor CXJldHVybiBidWZfaWQgPj0gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2xvY2FsYnVmLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9sb2NhbGJ1Zi5j CmluZGV4IDcxZTJhNWZlY2Q1Li41MmZhMjU4MWY0NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvbG9jYWxidWYuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZl ci9sb2NhbGJ1Zi5jCkBAIC02MSwxNCArNjEsMTMgQEAgc3RhdGljIEJsb2NrIEdldExvY2FsQnVm ZmVyU3RvcmFnZSh2b2lkKTsKICAqIE5vLW9wIGlmIHByZWZldGNoaW5nIGlzbid0IGNvbXBpbGVk IGluLgogICovCiBQcmVmZXRjaEJ1ZmZlclJlc3VsdAotUHJlZmV0Y2hMb2NhbEJ1ZmZlcihTTWdy UmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3JrTnVtLAotCQkJCQlCbG9ja051bWJlciBibG9j a051bSkKK1ByZWZldGNoTG9jYWxCdWZmZXIoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVt YmVyIGJsb2NrTnVtKQogewogCVByZWZldGNoQnVmZmVyUmVzdWx0IHJlc3VsdCA9IHtJbnZhbGlk QnVmZmVyLCBmYWxzZX07CiAJQnVmZmVyVGFnCW5ld1RhZzsJCQkvKiBpZGVudGl0eSBvZiByZXF1 ZXN0ZWQgYmxvY2sgKi8KIAlMb2NhbEJ1ZmZlckxvb2t1cEVudCAqaHJlc3VsdDsKIAotCUluaXRC dWZmZXJUYWcoJm5ld1RhZywgJnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvciwgZm9ya051bSwg YmxvY2tOdW0pOworCUluaXRCdWZmZXJUYWcoJm5ld1RhZywgJnNmaWxlLT5zbWdyX2xvY2F0b3Iu bG9jYXRvciwgc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBibG9ja051bSk7CiAKIAkvKiBJ bml0aWFsaXplIGxvY2FsIGJ1ZmZlcnMgaWYgZmlyc3QgcmVxdWVzdCBpbiB0aGlzIHNlc3Npb24g Ki8KIAlpZiAoTG9jYWxCdWZIYXNoID09IE5VTEwpCkBAIC04Nyw3ICs4Niw3IEBAIFByZWZldGNo TG9jYWxCdWZmZXIoU01nclJlbGF0aW9uIHNtZ3IsIEZvcmtOdW1iZXIgZm9ya051bSwKIAl7CiAj aWZkZWYgVVNFX1BSRUZFVENICiAJCS8qIE5vdCBpbiBidWZmZXJzLCBzbyBpbml0aWF0ZSBwcmVm ZXRjaCAqLwotCQlzbWdycHJlZmV0Y2goc21nciwgZm9ya051bSwgYmxvY2tOdW0pOworCQlzbWdy cHJlZmV0Y2goc2ZpbGUsIGJsb2NrTnVtKTsKIAkJcmVzdWx0LmluaXRpYXRlZF9pbyA9IHRydWU7 CiAjZW5kaWYJCQkJCQkJLyogVVNFX1BSRUZFVENIICovCiAJfQpAQCAtMTA2LDggKzEwNSw3IEBA IFByZWZldGNoTG9jYWxCdWZmZXIoU01nclJlbGF0aW9uIHNtZ3IsIEZvcmtOdW1iZXIgZm9ya051 bSwKICAqIChoZW5jZSwgdXNhZ2VfY291bnQgaXMgYWx3YXlzIGFkdmFuY2VkKS4KICAqLwogQnVm ZmVyRGVzYyAqCi1Mb2NhbEJ1ZmZlckFsbG9jKFNNZ3JSZWxhdGlvbiBzbWdyLCBGb3JrTnVtYmVy IGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2NrTnVtLAotCQkJCSBib29sICpmb3VuZFB0cikKK0xv Y2FsQnVmZmVyQWxsb2MoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2NrTnVt LCBib29sICpmb3VuZFB0cikKIHsKIAlCdWZmZXJUYWcJbmV3VGFnOwkJCS8qIGlkZW50aXR5IG9m IHJlcXVlc3RlZCBibG9jayAqLwogCUxvY2FsQnVmZmVyTG9va3VwRW50ICpocmVzdWx0OwpAQCAt MTE3LDcgKzExNSw3IEBAIExvY2FsQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIEZvcmtO dW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJYm9vbAkJZm91bmQ7CiAJdWlu dDMyCQlidWZfc3RhdGU7CiAKLQlJbml0QnVmZmVyVGFnKCZuZXdUYWcsICZzbWdyLT5zbWdyX3Js b2NhdG9yLmxvY2F0b3IsIGZvcmtOdW0sIGJsb2NrTnVtKTsKKwlJbml0QnVmZmVyVGFnKCZuZXdU YWcsICZzZmlsZS0+c21ncl9sb2NhdG9yLmxvY2F0b3IsIHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9y a251bSwgYmxvY2tOdW0pOwogCiAJLyogSW5pdGlhbGl6ZSBsb2NhbCBidWZmZXJzIGlmIGZpcnN0 IHJlcXVlc3QgaW4gdGhpcyBzZXNzaW9uICovCiAJaWYgKExvY2FsQnVmSGFzaCA9PSBOVUxMKQpA QCAtMTM0LDcgKzEzMiw3IEBAIExvY2FsQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIEZv cmtOdW1iZXIgZm9ya051bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJCUFzc2VydChCdWZmZXJU YWdzRXF1YWwoJmJ1Zkhkci0+dGFnLCAmbmV3VGFnKSk7CiAjaWZkZWYgTEJERUJVRwogCQlmcHJp bnRmKHN0ZGVyciwgIkxCIEFMTE9DICgldSwlZCwlZCkgJWRcbiIsCi0JCQkJc21nci0+c21ncl9y bG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwgZm9ya051bSwgYmxvY2tOdW0sIC1iIC0gMSk7CisJ CQkJc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwgc2ZpbGUtPnNtZ3JfbG9j YXRvci5mb3JrbnVtLCBibG9ja051bSwgLWIgLSAxKTsKICNlbmRpZgogCQlidWZfc3RhdGUgPSBw Z19hdG9taWNfcmVhZF91MzIoJmJ1Zkhkci0+c3RhdGUpOwogCkBAIC0xNjIsNyArMTYwLDcgQEAg TG9jYWxCdWZmZXJBbGxvYyhTTWdyUmVsYXRpb24gc21nciwgRm9ya051bWJlciBmb3JrTnVtLCBC bG9ja051bWJlciBibG9ja051bSwKIAogI2lmZGVmIExCREVCVUcKIAlmcHJpbnRmKHN0ZGVyciwg IkxCIEFMTE9DICgldSwlZCwlZCkgJWRcbiIsCi0JCQlzbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0 b3IucmVsTnVtYmVyLCBmb3JrTnVtLCBibG9ja051bSwKKwkJCXNmaWxlLT5zbWdyX2xvY2F0b3Iu bG9jYXRvci5yZWxOdW1iZXIsIHNmaWxlLT5zbWdyX2xvY2F0b3IuZm9ya251bSwgYmxvY2tOdW0s CiAJCQktbmV4dEZyZWVMb2NhbEJ1ZiAtIDEpOwogI2VuZGlmCiAKQEAgLTIxMSwxNyArMjA5LDE2 IEBAIExvY2FsQnVmZmVyQWxsb2MoU01nclJlbGF0aW9uIHNtZ3IsIEZvcmtOdW1iZXIgZm9ya051 bSwgQmxvY2tOdW1iZXIgYmxvY2tOdW0sCiAJICovCiAJaWYgKGJ1Zl9zdGF0ZSAmIEJNX0RJUlRZ KQogCXsKLQkJU01nclJlbGF0aW9uIG9yZWxuOworCQlTTWdyRmlsZUhhbmRsZSBvZmlsZTsKIAkJ UGFnZQkJbG9jYWxwYWdlID0gKGNoYXIgKikgTG9jYWxCdWZIZHJHZXRCbG9jayhidWZIZHIpOwog Ci0JCS8qIEZpbmQgc21nciByZWxhdGlvbiBmb3IgYnVmZmVyICovCi0JCW9yZWxuID0gc21ncm9w ZW4oQnVmVGFnR2V0UmVsRmlsZUxvY2F0b3IoJmJ1Zkhkci0+dGFnKSwgTXlCYWNrZW5kSWQpOwor CQkvKiBGaW5kIHNtZ3IgZmlsZSBoYW5kbGUgZm9yIGJ1ZmZlciAqLworCQlvZmlsZSA9IHNtZ3Jv cGVuKEJ1ZlRhZ0dldFJlbEZpbGVMb2NhdG9yKCZidWZIZHItPnRhZyksIE15QmFja2VuZElkLCBC dWZUYWdHZXRGb3JrTnVtKCZidWZIZHItPnRhZykpOwogCiAJCVBhZ2VTZXRDaGVja3N1bUlucGxh Y2UobG9jYWxwYWdlLCBidWZIZHItPnRhZy5ibG9ja051bSk7CiAKIAkJLyogQW5kIHdyaXRlLi4u ICovCi0JCXNtZ3J3cml0ZShvcmVsbiwKLQkJCQkgIEJ1ZlRhZ0dldEZvcmtOdW0oJmJ1Zkhkci0+ dGFnKSwKKwkJc21ncndyaXRlKG9maWxlLAogCQkJCSAgYnVmSGRyLT50YWcuYmxvY2tOdW0sCiAJ CQkJICBsb2NhbHBhZ2UsCiAJCQkJICBmYWxzZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9z dG9yYWdlL2ZyZWVzcGFjZS9mcmVlc3BhY2UuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvZnJlZXNw YWNlL2ZyZWVzcGFjZS5jCmluZGV4IDNlOTY5M2IyOTNiLi5hODI1YTBiNWFmMyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9mcmVlc3BhY2UvZnJlZXNwYWNlLmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9mcmVlc3BhY2UvZnJlZXNwYWNlLmMKQEAgLTI3MSw3ICsyNzEsNyBAQCBG cmVlU3BhY2VNYXBQcmVwYXJlVHJ1bmNhdGVSZWwoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBu YmxvY2tzKQogCSAqIElmIG5vIEZTTSBoYXMgYmVlbiBjcmVhdGVkIHlldCBmb3IgdGhpcyByZWxh dGlvbiwgdGhlcmUncyBub3RoaW5nIHRvCiAJICogdHJ1bmNhdGUuCiAJICovCi0JaWYgKCFzbWdy ZXhpc3RzKFJlbGF0aW9uR2V0U21ncihyZWwpLCBGU01fRk9SS05VTSkpCisJaWYgKCFzbWdyZXhp c3RzKFJlbGF0aW9uR2V0U21ncihyZWwsIEZTTV9GT1JLTlVNKSkpCiAJCXJldHVybiBJbnZhbGlk QmxvY2tOdW1iZXI7CiAKIAkvKiBHZXQgdGhlIGxvY2F0aW9uIGluIHRoZSBGU00gb2YgdGhlIGZp cnN0IHJlbW92ZWQgaGVhcCBibG9jayAqLwpAQCAtMzE3LDcgKzMxNyw3IEBAIEZyZWVTcGFjZU1h cFByZXBhcmVUcnVuY2F0ZVJlbChSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAJ ZWxzZQogCXsKIAkJbmV3X25mc21ibG9ja3MgPSBmc21fbG9naWNhbF90b19waHlzaWNhbChmaXJz dF9yZW1vdmVkX2FkZHJlc3MpOwotCQlpZiAoc21ncm5ibG9ja3MoUmVsYXRpb25HZXRTbWdyKHJl bCksIEZTTV9GT1JLTlVNKSA8PSBuZXdfbmZzbWJsb2NrcykKKwkJaWYgKHNtZ3JuYmxvY2tzKFJl bGF0aW9uR2V0U21ncihyZWwsIEZTTV9GT1JLTlVNKSkgPD0gbmV3X25mc21ibG9ja3MpCiAJCQly ZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOwkvKiBub3RoaW5nIHRvIGRvOyB0aGUgRlNNIHdhcyBh bHJlYWR5CiAJCQkJCQkJCQkJICogc21hbGxlciAqLwogCX0KQEAgLTUzMiwxNCArNTMyLDE0IEBA IGZzbV9yZWFkYnVmKFJlbGF0aW9uIHJlbCwgRlNNQWRkcmVzcyBhZGRyLCBib29sIGV4dGVuZCkK IHsKIAlCbG9ja051bWJlciBibGtubyA9IGZzbV9sb2dpY2FsX3RvX3BoeXNpY2FsKGFkZHIpOwog CUJ1ZmZlcgkJYnVmOwotCVNNZ3JSZWxhdGlvbiByZWxuOworCVNNZ3JGaWxlSGFuZGxlIGZzbV9m aWxlOwogCiAJLyoKIAkgKiBDYXV0aW9uOiByZS11c2luZyB0aGlzIHNtZ3IgcG9pbnRlciBjb3Vs ZCBmYWlsIGlmIHRoZSByZWxjYWNoZSBlbnRyeQogCSAqIGdldHMgY2xvc2VkLiAgSXQncyBzYWZl IGFzIGxvbmcgYXMgd2Ugb25seSBkbyBzbWdyLWxldmVsIG9wZXJhdGlvbnMKIAkgKiBiZXR3ZWVu IGhlcmUgYW5kIHRoZSBsYXN0IHVzZSBvZiB0aGUgcG9pbnRlci4KIAkgKi8KLQlyZWxuID0gUmVs YXRpb25HZXRTbWdyKHJlbCk7CisJZnNtX2ZpbGUgPSBSZWxhdGlvbkdldFNtZ3IocmVsLCBGU01f Rk9SS05VTSk7CiAKIAkvKgogCSAqIElmIHdlIGhhdmVuJ3QgY2FjaGVkIHRoZSBzaXplIG9mIHRo ZSBGU00geWV0LCBjaGVjayBpdCBmaXJzdC4gIEFsc28KQEAgLTU0NywxOSArNTQ3LDE5IEBAIGZz bV9yZWFkYnVmKFJlbGF0aW9uIHJlbCwgRlNNQWRkcmVzcyBhZGRyLCBib29sIGV4dGVuZCkKIAkg KiB2YWx1ZSBtaWdodCBiZSBzdGFsZS4gIChXZSBzZW5kIHNtZ3IgaW52YWwgbWVzc2FnZXMgb24g dHJ1bmNhdGlvbiwgYnV0CiAJICogbm90IG9uIGV4dGVuc2lvbi4pCiAJICovCi0JaWYgKHJlbG4t PnNtZ3JfY2FjaGVkX25ibG9ja3NbRlNNX0ZPUktOVU1dID09IEludmFsaWRCbG9ja051bWJlciB8 fAotCQlibGtubyA+PSByZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW0ZTTV9GT1JLTlVNXSkKKwlp ZiAoZnNtX2ZpbGUtPnNtZ3JfY2FjaGVkX25ibG9ja3MgPT0gSW52YWxpZEJsb2NrTnVtYmVyIHx8 CisJCWJsa25vID49IGZzbV9maWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzKQogCXsKIAkJLyogSW52 YWxpZGF0ZSB0aGUgY2FjaGUgc28gc21ncm5ibG9ja3MgYXNrcyB0aGUga2VybmVsLiAqLwotCQly ZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW0ZTTV9GT1JLTlVNXSA9IEludmFsaWRCbG9ja051bWJl cjsKLQkJaWYgKHNtZ3JleGlzdHMocmVsbiwgRlNNX0ZPUktOVU0pKQotCQkJc21ncm5ibG9ja3Mo cmVsbiwgRlNNX0ZPUktOVU0pOworCQlmc21fZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IElu dmFsaWRCbG9ja051bWJlcjsKKwkJaWYgKHNtZ3JleGlzdHMoZnNtX2ZpbGUpKQorCQkJc21ncm5i bG9ja3MoZnNtX2ZpbGUpOwogCQllbHNlCi0JCQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW0ZT TV9GT1JLTlVNXSA9IDA7CisJCQlmc21fZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IDA7CiAJ fQogCiAJLyogSGFuZGxlIHJlcXVlc3RzIGJleW9uZCBFT0YgKi8KLQlpZiAoYmxrbm8gPj0gcmVs bi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9SS05VTV0pCisJaWYgKGJsa25vID49IGZzbV9m aWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzKQogCXsKIAkJaWYgKGV4dGVuZCkKIAkJCWZzbV9leHRl bmQocmVsLCBibGtubyArIDEpOwpAQCAtNjA5LDcgKzYwOSw3IEBAIGZzbV9leHRlbmQoUmVsYXRp b24gcmVsLCBCbG9ja051bWJlciBmc21fbmJsb2NrcykKIHsKIAlCbG9ja051bWJlciBmc21fbmJs b2Nrc19ub3c7CiAJUEdBbGlnbmVkQmxvY2sgcGc7Ci0JU01nclJlbGF0aW9uIHJlbG47CisJU01n ckZpbGVIYW5kbGUgZnNtX2ZpbGU7CiAKIAlQYWdlSW5pdCgoUGFnZSkgcGcuZGF0YSwgQkxDS1Na LCAwKTsKIApAQCAtNjMwLDI5ICs2MzAsMjggQEAgZnNtX2V4dGVuZChSZWxhdGlvbiByZWwsIEJs b2NrTnVtYmVyIGZzbV9uYmxvY2tzKQogCSAqIGdldHMgY2xvc2VkLiAgSXQncyBzYWZlIGFzIGxv bmcgYXMgd2Ugb25seSBkbyBzbWdyLWxldmVsIG9wZXJhdGlvbnMKIAkgKiBiZXR3ZWVuIGhlcmUg YW5kIHRoZSBsYXN0IHVzZSBvZiB0aGUgcG9pbnRlci4KIAkgKi8KLQlyZWxuID0gUmVsYXRpb25H ZXRTbWdyKHJlbCk7CisJZnNtX2ZpbGUgPSBSZWxhdGlvbkdldFNtZ3IocmVsLCBGU01fRk9SS05V TSk7CiAKIAkvKgogCSAqIENyZWF0ZSB0aGUgRlNNIGZpbGUgZmlyc3QgaWYgaXQgZG9lc24ndCBl eGlzdC4gIElmCiAJICogc21ncl9jYWNoZWRfbmJsb2Nrc1tGU01fRk9SS05VTV0gaXMgcG9zaXRp dmUgdGhlbiBpdCBtdXN0IGV4aXN0LCBubwogCSAqIG5lZWQgZm9yIGFuIHNtZ3JleGlzdHMgY2Fs bC4KIAkgKi8KLQlpZiAoKHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbRlNNX0ZPUktOVU1dID09 IDAgfHwKLQkJIHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbRlNNX0ZPUktOVU1dID09IEludmFs aWRCbG9ja051bWJlcikgJiYKLQkJIXNtZ3JleGlzdHMocmVsbiwgRlNNX0ZPUktOVU0pKQotCQlz bWdyY3JlYXRlKHJlbG4sIEZTTV9GT1JLTlVNLCBmYWxzZSk7CisJaWYgKChmc21fZmlsZS0+c21n cl9jYWNoZWRfbmJsb2NrcyA9PSAwIHx8CisJCSBmc21fZmlsZS0+c21ncl9jYWNoZWRfbmJsb2Nr cyA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpICYmCisJCSFzbWdyZXhpc3RzKGZzbV9maWxlKSkKKwkJ c21ncmNyZWF0ZShmc21fZmlsZSwgZmFsc2UpOwogCiAJLyogSW52YWxpZGF0ZSBjYWNoZSBzbyB0 aGF0IHNtZ3JuYmxvY2tzKCkgYXNrcyB0aGUga2VybmVsLiAqLwotCXJlbG4tPnNtZ3JfY2FjaGVk X25ibG9ja3NbRlNNX0ZPUktOVU1dID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCWZzbV9uYmxvY2tz X25vdyA9IHNtZ3JuYmxvY2tzKHJlbG4sIEZTTV9GT1JLTlVNKTsKKwlmc21fZmlsZS0+c21ncl9j YWNoZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051bWJlcjsKKwlmc21fbmJsb2Nrc19ub3cgPSBz bWdybmJsb2Nrcyhmc21fZmlsZSk7CiAKIAkvKiBFeHRlbmQgYXMgbmVlZGVkLiAqLwogCXdoaWxl IChmc21fbmJsb2Nrc19ub3cgPCBmc21fbmJsb2NrcykKIAl7CiAJCVBhZ2VTZXRDaGVja3N1bUlu cGxhY2UoKFBhZ2UpIHBnLmRhdGEsIGZzbV9uYmxvY2tzX25vdyk7CiAKLQkJc21ncmV4dGVuZChy ZWxuLCBGU01fRk9SS05VTSwgZnNtX25ibG9ja3Nfbm93LAotCQkJCSAgIHBnLmRhdGEsIGZhbHNl KTsKKwkJc21ncmV4dGVuZChmc21fZmlsZSwgZnNtX25ibG9ja3Nfbm93LCBwZy5kYXRhLCBmYWxz ZSk7CiAJCWZzbV9uYmxvY2tzX25vdysrOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvaXBjaS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCmluZGV4 IDhmMWRlZDczMzhmLi44NjAxZTFjMGRmYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9pcGMvaXBjaS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL2lwY2kuYwpAQCAtMTE3 LDkgKzExNyw3IEBAIENhbGN1bGF0ZVNobWVtU2l6ZShpbnQgKm51bV9zZW1hcGhvcmVzKQogCXNp emUgPSBhZGRfc2l6ZShzaXplLCBYTG9nUHJlZmV0Y2hTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIFhMT0dTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFhM b2dSZWNvdmVyeVNobWVtU2l6ZSgpKTsKLQlzaXplID0gYWRkX3NpemUoc2l6ZSwgQ0xPR1NobWVt U2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQ29tbWl0VHNTaG1lbVNpemUoKSk7Ci0J c2l6ZSA9IGFkZF9zaXplKHNpemUsIFNVQlRSQU5TU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRf c2l6ZShzaXplLCBUd29QaGFzZVNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwg QmFja2dyb3VuZFdvcmtlclNobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgTXVs dGlYYWN0U2htZW1TaXplKCkpOwpAQCAtMjQxLDkgKzIzOSw3IEBAIENyZWF0ZVNoYXJlZE1lbW9y eUFuZFNlbWFwaG9yZXModm9pZCkKIAlYTE9HU2htZW1Jbml0KCk7CiAJWExvZ1ByZWZldGNoU2ht ZW1Jbml0KCk7CiAJWExvZ1JlY292ZXJ5U2htZW1Jbml0KCk7Ci0JQ0xPR1NobWVtSW5pdCgpOwog CUNvbW1pdFRzU2htZW1Jbml0KCk7Ci0JU1VCVFJBTlNTaG1lbUluaXQoKTsKIAlNdWx0aVhhY3RT aG1lbUluaXQoKTsKIAlJbml0QnVmZmVyUG9vbCgpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJl ZGljYXRlLmMKaW5kZXggMTFkZWNiNzRiMmEuLmI5OWE2ZmZiNWI4IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFn ZS9sbWdyL3ByZWRpY2F0ZS5jCkBAIC0zMTMsMTcgKzMxMyw5IEBACiAJKCh0YXJnZXRoYXNoKSBe ICgodWludDMyKSBQb2ludGVyR2V0RGF0dW0oKHByZWRpY2F0ZWxvY2t0YWcpLT5teVhhY3QpKSBc CiAJIDw8IExPRzJfTlVNX1BSRURJQ0FURUxPQ0tfUEFSVElUSU9OUykKIAotCi0vKgotICogVGhl IFNMUlUgYnVmZmVyIGFyZWEgdGhyb3VnaCB3aGljaCB3ZSBhY2Nlc3MgdGhlIG9sZCB4aWRzLgot ICovCi1zdGF0aWMgU2xydUN0bERhdGEgU2VyaWFsU2xydUN0bERhdGE7Ci0KLSNkZWZpbmUgU2Vy aWFsU2xydUN0bAkJCSgmU2VyaWFsU2xydUN0bERhdGEpCi0KICNkZWZpbmUgU0VSSUFMX1BBR0VT SVpFCQkJQkxDS1NaCiAjZGVmaW5lIFNFUklBTF9FTlRSWVNJWkUJCQlzaXplb2YoU2VyQ29tbWl0 U2VxTm8pCi0jZGVmaW5lIFNFUklBTF9FTlRSSUVTUEVSUEFHRQkoU0VSSUFMX1BBR0VTSVpFIC8g U0VSSUFMX0VOVFJZU0laRSkKKyNkZWZpbmUgU0VSSUFMX0VOVFJJRVNQRVJQQUdFCSgoU0VSSUFM X1BBR0VTSVpFIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEpIC8gU0VSSUFMX0VOVFJZU0laRSkKIAog LyoKICAqIFNldCBtYXhpbXVtIHBhZ2VzIGJhc2VkIG9uIHRoZSBudW1iZXIgbmVlZGVkIHRvIHRy YWNrIGFsbCB0cmFuc2FjdGlvbnMuCkBAIC0zMzIsMTIgKzMyNCwxMyBAQCBzdGF0aWMgU2xydUN0 bERhdGEgU2VyaWFsU2xydUN0bERhdGE7CiAKICNkZWZpbmUgU2VyaWFsTmV4dFBhZ2UocGFnZSkg KCgocGFnZSkgPj0gU0VSSUFMX01BWF9QQUdFKSA/IDAgOiAocGFnZSkgKyAxKQogCi0jZGVmaW5l IFNlcmlhbFZhbHVlKHNsb3RubywgeGlkKSAoKigoU2VyQ29tbWl0U2VxTm8gKikgXAotCShTZXJp YWxTbHJ1Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBcCisjZGVmaW5lIFNlcmlh bFZhbHVlKGJ1ZmZlciwgeGlkKSAoKigoU2VyQ29tbWl0U2VxTm8gKikgXAorCShQYWdlR2V0Q29u dGVudHMoQnVmZmVyR2V0UGFnZShidWZmZXIpKSArIFwKIAkoKCgodWludDMyKSAoeGlkKSkgJSBT RVJJQUxfRU5UUklFU1BFUlBBR0UpICogU0VSSUFMX0VOVFJZU0laRSkpKSkKIAogI2RlZmluZSBT ZXJpYWxQYWdlKHhpZCkJKCgodWludDMyKSAoeGlkKSkgLyBTRVJJQUxfRU5UUklFU1BFUlBBR0Up CiAKKwogdHlwZWRlZiBzdHJ1Y3QgU2VyaWFsQ29udHJvbERhdGEKIHsKIAlpbnQJCQloZWFkUGFn ZTsJCS8qIG5ld2VzdCBpbml0aWFsaXplZCBwYWdlICovCkBAIC03ODUsMTAgKzc3OCwxNCBAQCBT ZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHlVbml0VGVzdHModm9pZCkKIAkgKiByZXF1aXJlcyBi dXJuaW5nIH4yQiBYSURzIGluIHNpbmdsZS11c2VyIG1vZGUsIGEgbmVnbGlnaWJsZQogCSAqIHBv c3NpYmlsaXR5LiAgTW9yZW92ZXIsIGlmIGl0IGRvZXMgaGFwcGVuLCB0aGUgY29uc2VxdWVuY2Ug d291bGQgYmUKIAkgKiBtaWxkLCBuYW1lbHkgYSBuZXcgdHJhbnNhY3Rpb24gZmFpbGluZyBpbiBT aW1wbGVMcnVSZWFkUGFnZSgpLgorCSAqIAorCSAqIE5PVEU6ICBBZnRlciBhZGRpbmcgcGFnZSBo ZWFkZXJzLCB0aGUgZGVmZWN0IGFmZmVjdHMgdHdvIHBhZ2VzLgorCSAqIFdlIG5vdyBhc3NlcnQg Y29ycmVjdCB0cmVhdG1lbnQgb2YgaXRzIHNlY29uZCB0byBwcmlvciBwYWdlLgorCSAqIAogCSAq LwogCWhlYWRQYWdlID0gb2xkZXN0UGFnZTsKIAl0YXJnZXRQYWdlID0gbmV3ZXN0UGFnZTsKLQlB c3NlcnQoU2VyaWFsUGFnZVByZWNlZGVzTG9naWNhbGx5KGhlYWRQYWdlLCB0YXJnZXRQYWdlIC0g MSkpOworCUFzc2VydChTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHkoaGVhZFBhZ2UsIHRhcmdl dFBhZ2UgLSAyKSk7CiAjaWYgMAogCUFzc2VydChTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHko aGVhZFBhZ2UsIHRhcmdldFBhZ2UpKTsKICNlbmRpZgpAQCAtODAzLDE3ICs4MDAsMTAgQEAgU2Vy aWFsSW5pdCh2b2lkKQogewogCWJvb2wJCWZvdW5kOwogCi0JLyoKLQkgKiBTZXQgdXAgU0xSVSBt YW5hZ2VtZW50IG9mIHRoZSBwZ19zZXJpYWwgZGF0YS4KLQkgKi8KLQlTZXJpYWxTbHJ1Q3RsLT5Q YWdlUHJlY2VkZXMgPSBTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHk7Ci0JU2ltcGxlTHJ1SW5p dChTZXJpYWxTbHJ1Q3RsLCAiU2VyaWFsIiwKLQkJCQkgIE5VTV9TRVJJQUxfQlVGRkVSUywgMCwg U2VyaWFsU0xSVUxvY2ssICJwZ19zZXJpYWwiLAotCQkJCSAgTFdUUkFOQ0hFX1NFUklBTF9CVUZG RVIsIFNZTkNfSEFORExFUl9OT05FKTsKICNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCiAJU2Vy aWFsUGFnZVByZWNlZGVzTG9naWNhbGx5VW5pdFRlc3RzKCk7CiAjZW5kaWYKLQlTbHJ1UGFnZVBy ZWNlZGVzVW5pdFRlc3RzKFNlcmlhbFNscnVDdGwsIFNFUklBTF9FTlRSSUVTUEVSUEFHRSk7CisJ U2xydVBhZ2VQcmVjZWRlc1VuaXRUZXN0cyhTZXJpYWxQYWdlUHJlY2VkZXNMb2dpY2FsbHksIFNF UklBTF9FTlRSSUVTUEVSUEFHRSk7CiAKIAkvKgogCSAqIENyZWF0ZSBvciBhdHRhY2ggdG8gdGhl IFNlcmlhbENvbnRyb2wgc3RydWN0dXJlLgpAQCAtODQzLDkgKzgzMyw5IEBAIFNlcmlhbEFkZChU cmFuc2FjdGlvbklkIHhpZCwgU2VyQ29tbWl0U2VxTm8gbWluQ29uZmxpY3RDb21taXRTZXFObykK IHsKIAlUcmFuc2FjdGlvbklkIHRhaWxYaWQ7CiAJaW50CQkJdGFyZ2V0UGFnZTsKLQlpbnQJCQlz bG90bm87CiAJaW50CQkJZmlyc3RaZXJvUGFnZTsKIAlib29sCQlpc05ld1BhZ2U7CisJQnVmZmVy CQlidWZmZXI7CiAKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSk7CiAKQEAgLTg5 MCwxNiArODgwLDIzIEBAIFNlcmlhbEFkZChUcmFuc2FjdGlvbklkIHhpZCwgU2VyQ29tbWl0U2Vx Tm8gbWluQ29uZmxpY3RDb21taXRTZXFObykKIAkJLyogSW5pdGlhbGl6ZSBpbnRlcnZlbmluZyBw YWdlcy4gKi8KIAkJd2hpbGUgKGZpcnN0WmVyb1BhZ2UgIT0gdGFyZ2V0UGFnZSkKIAkJewotCQkJ KHZvaWQpIFNpbXBsZUxydVplcm9QYWdlKFNlcmlhbFNscnVDdGwsIGZpcnN0WmVyb1BhZ2UpOwor CQkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9TRVJJQUxfSUQsIGZpcnN0WmVyb1BhZ2Up OworCQkJUGFnZVNldEhlYWRlckRhdGFOb25SZWwoQnVmZmVyR2V0UGFnZShidWZmZXIpLCBmaXJz dFplcm9QYWdlLCBJbnZhbGlkWExvZ1JlY1B0ciwgQkxDS1NaLCBQR19NRVRBUEFHRV9MQVlPVVRf VkVSU0lPTik7CisJCQlNYXJrQnVmZmVyRGlydHkoYnVmZmVyKTsKKwkJCVVubG9ja1JlbGVhc2VC dWZmZXIoYnVmZmVyKTsKIAkJCWZpcnN0WmVyb1BhZ2UgPSBTZXJpYWxOZXh0UGFnZShmaXJzdFpl cm9QYWdlKTsKIAkJfQotCQlzbG90bm8gPSBTaW1wbGVMcnVaZXJvUGFnZShTZXJpYWxTbHJ1Q3Rs LCB0YXJnZXRQYWdlKTsKKwkJYnVmZmVyID0gWmVyb1NscnVCdWZmZXIoU0xSVV9TRVJJQUxfSUQs IHRhcmdldFBhZ2UpOwogCX0KIAllbHNlCi0JCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKFNl cmlhbFNscnVDdGwsIHRhcmdldFBhZ2UsIHRydWUsIHhpZCk7CisJeworCQlidWZmZXIgPSBSZWFk U2xydUJ1ZmZlcihTTFJVX1NFUklBTF9JRCwgdGFyZ2V0UGFnZSwgUkJNX05PUk1BTCk7CisJCUxv Y2tCdWZmZXIoYnVmZmVyLCBCVUZGRVJfTE9DS19FWENMVVNJVkUpOworCX0KIAotCVNlcmlhbFZh bHVlKHNsb3RubywgeGlkKSA9IG1pbkNvbmZsaWN0Q29tbWl0U2VxTm87Ci0JU2VyaWFsU2xydUN0 bC0+c2hhcmVkLT5wYWdlX2RpcnR5W3Nsb3Rub10gPSB0cnVlOworCVNlcmlhbFZhbHVlKGJ1ZmZl ciwgeGlkKSA9IG1pbkNvbmZsaWN0Q29tbWl0U2VxTm87CisJTWFya0J1ZmZlckRpcnR5KGJ1ZmZl cik7CisJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCiAJTFdMb2NrUmVsZWFzZShTZXJp YWxTTFJVTG9jayk7CiB9CkBAIC05MTUsNyArOTEyLDcgQEAgU2VyaWFsR2V0TWluQ29uZmxpY3RD b21taXRTZXFObyhUcmFuc2FjdGlvbklkIHhpZCkKIAlUcmFuc2FjdGlvbklkIGhlYWRYaWQ7CiAJ VHJhbnNhY3Rpb25JZCB0YWlsWGlkOwogCVNlckNvbW1pdFNlcU5vIHZhbDsKLQlpbnQJCQlzbG90 bm87CisJQnVmZmVyCQlidWZmZXI7CiAKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlk KSk7CiAKQEAgLTkzNyw5ICs5MzQsOSBAQCBTZXJpYWxHZXRNaW5Db25mbGljdENvbW1pdFNlcU5v KFRyYW5zYWN0aW9uSWQgeGlkKQogCSAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gbXVzdCBiZSBj YWxsZWQgd2l0aG91dCBob2xkaW5nIFNlcmlhbFNMUlVMb2NrLAogCSAqIGJ1dCB3aWxsIHJldHVy biB3aXRoIHRoYXQgbG9jayBoZWxkLCB3aGljaCBtdXN0IHRoZW4gYmUgcmVsZWFzZWQuCiAJICov Ci0Jc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoU2VyaWFsU2xydUN0bCwKLQkJ CQkJCQkJCQlTZXJpYWxQYWdlKHhpZCksIHhpZCk7Ci0JdmFsID0gU2VyaWFsVmFsdWUoc2xvdG5v LCB4aWQpOworCWJ1ZmZlciA9IFJlYWRTbHJ1QnVmZmVyKFNMUlVfU0VSSUFMX0lELCBTZXJpYWxQ YWdlKHhpZCksIFJCTV9OT1JNQUwpOworCXZhbCA9IFNlcmlhbFZhbHVlKGJ1ZmZlciwgeGlkKTsK KwlSZWxlYXNlQnVmZmVyKGJ1ZmZlcik7CiAJTFdMb2NrUmVsZWFzZShTZXJpYWxTTFJVTG9jayk7 CiAJcmV0dXJuIHZhbDsKIH0KQEAgLTEwNTgsMTkgKzEwNTUsNyBAQCBDaGVja1BvaW50UHJlZGlj YXRlKHZvaWQpCiAJTFdMb2NrUmVsZWFzZShTZXJpYWxTTFJVTG9jayk7CiAKIAkvKiBUcnVuY2F0 ZSBhd2F5IHBhZ2VzIHRoYXQgYXJlIG5vIGxvbmdlciByZXF1aXJlZCAqLwotCVNpbXBsZUxydVRy dW5jYXRlKFNlcmlhbFNscnVDdGwsIHRhaWxQYWdlKTsKLQotCS8qCi0JICogV3JpdGUgZGlydHkg U0xSVSBwYWdlcyB0byBkaXNrCi0JICoKLQkgKiBUaGlzIGlzIG5vdCBhY3R1YWxseSBuZWNlc3Nh cnkgZnJvbSBhIGNvcnJlY3RuZXNzIHBvaW50IG9mIHZpZXcuIFdlIGRvCi0JICogaXQgbWVyZWx5 IGFzIGEgZGVidWdnaW5nIGFpZC4KLQkgKgotCSAqIFdlJ3JlIGRvaW5nIHRoaXMgYWZ0ZXIgdGhl IHRydW5jYXRpb24gdG8gYXZvaWQgd3JpdGluZyBwYWdlcyByaWdodAotCSAqIGJlZm9yZSBkZWxl dGluZyB0aGUgZmlsZSBpbiB3aGljaCB0aGV5IHNpdCwgd2hpY2ggd291bGQgYmUgY29tcGxldGVs eQotCSAqIHBvaW50bGVzcy4KLQkgKi8KLQlTaW1wbGVMcnVXcml0ZUFsbChTZXJpYWxTbHJ1Q3Rs LCB0cnVlKTsKKwlTaW1wbGVMcnVUcnVuY2F0ZShTTFJVX1NFUklBTF9JRCwgU2VyaWFsUGFnZVBy ZWNlZGVzTG9naWNhbGx5LCB0YWlsUGFnZSk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAg LTEzMzEsNyArMTMxNiw2IEBAIFByZWRpY2F0ZUxvY2tTaG1lbVNpemUodm9pZCkKIAogCS8qIFNo YXJlZCBtZW1vcnkgc3RydWN0dXJlcyBmb3IgU0xSVSB0cmFja2luZyBvZiBvbGQgY29tbWl0dGVk IHhpZHMuICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIHNpemVvZihTZXJpYWxDb250cm9sRGF0 YSkpOwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBTaW1wbGVMcnVTaG1lbVNpemUoTlVNX1NFUklB TF9CVUZGRVJTLCAwKSk7CiAKIAlyZXR1cm4gc2l6ZTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvcGFnZS9idWZwYWdlLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3BhZ2UvYnVm cGFnZS5jCmluZGV4IDkyOTk0ZjhmMzk1Li4xYTgxMDc1NGM1YyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9wYWdlL2J1ZnBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3Bh Z2UvYnVmcGFnZS5jCkBAIC01OSw2ICs1OSwyNyBAQCBQYWdlSW5pdChQYWdlIHBhZ2UsIFNpemUg cGFnZVNpemUsIFNpemUgc3BlY2lhbFNpemUpCiAJLyogcC0+cGRfcHJ1bmVfeGlkID0gSW52YWxp ZFRyYW5zYWN0aW9uSWQ7CQlkb25lIGJ5IGFib3ZlIE1lbVNldCAqLwogfQogCit2b2lkCitQYWdl SW5pdFNMUlUoUGFnZSBwYWdlLCBTaXplIHBhZ2VTaXplLCBTaXplIHNwZWNpYWxTaXplKQorewor CVBhZ2VIZWFkZXIJcCA9IChQYWdlSGVhZGVyKSBwYWdlOworCisJc3BlY2lhbFNpemUgPSBNQVhB TElHTihzcGVjaWFsU2l6ZSk7CisKKwlBc3NlcnQocGFnZVNpemUgPT0gQkxDS1NaKTsKKwlBc3Nl cnQocGFnZVNpemUgPiBzcGVjaWFsU2l6ZSArIFNpemVPZlBhZ2VIZWFkZXJEYXRhKTsKKworCS8q IE1ha2Ugc3VyZSBhbGwgZmllbGRzIG9mIHBhZ2UgYXJlIHplcm8sIGFzIHdlbGwgYXMgdW51c2Vk IHNwYWNlICovCisJTWVtU2V0KHAsIDAsIHBhZ2VTaXplKTsKKworCXAtPnBkX2ZsYWdzID0gMDsK KwlwLT5wZF9sb3dlciA9IFNpemVPZlBhZ2VIZWFkZXJEYXRhOworCXAtPnBkX3VwcGVyID0gcGFn ZVNpemUgLSBzcGVjaWFsU2l6ZTsKKwlwLT5wZF9zcGVjaWFsID0gcGFnZVNpemUgLSBzcGVjaWFs U2l6ZTsKKwlQYWdlU2V0UGFnZVNpemVBbmRWZXJzaW9uKHBhZ2UsIHBhZ2VTaXplLCBQR19NRVRB UEFHRV9MQVlPVVRfVkVSU0lPTik7CisJLyogcC0+cGRfcHJ1bmVfeGlkID0gSW52YWxpZFRyYW5z YWN0aW9uSWQ7CQlkb25lIGJ5IGFib3ZlIE1lbVNldCAqLworfQorCiAKIC8qCiAgKiBQYWdlSXNW ZXJpZmllZEV4dGVuZGVkCkBAIC0xMDMsNyArMTI0LDcgQEAgUGFnZUlzVmVyaWZpZWRFeHRlbmRl ZChQYWdlIHBhZ2UsIEJsb2NrTnVtYmVyIGJsa25vLCBpbnQgZmxhZ3MpCiAJCWlmIChEYXRhQ2hl Y2tzdW1zRW5hYmxlZCgpKQogCQl7CiAJCQljaGVja3N1bSA9IHBnX2NoZWNrc3VtX3BhZ2UoKGNo YXIgKikgcGFnZSwgYmxrbm8pOwotCisJCQkKIAkJCWlmIChjaGVja3N1bSAhPSBwLT5wZF9jaGVj a3N1bSkKIAkJCQljaGVja3N1bV9mYWlsdXJlID0gdHJ1ZTsKIAkJfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9zbWdyL21kLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3IvbWQu YwppbmRleCA2MGM5OTA1ZWZmOS4uNTVlYmQ0NWI3ZDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2Uvc21nci9tZC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9tZC5jCkBA IC02NiwxMCArNjYsMTAgQEAKICAqCW91dCB0byBhbiB1bmxpbmtlZCBvbGQgY29weSBvZiBhIHNl Z21lbnQgZmlsZSB0aGF0IHdpbGwgZXZlbnR1YWxseQogICoJZGlzYXBwZWFyLgogICoKLSAqCUZp bGUgZGVzY3JpcHRvcnMgYXJlIHN0b3JlZCBpbiB0aGUgcGVyLWZvcmsgbWRfc2VnX2ZkcyBhcnJh eXMgaW5zaWRlCi0gKglTTWdyUmVsYXRpb24uIFRoZSBsZW5ndGggb2YgdGhlc2UgYXJyYXlzIGlz IHN0b3JlZCBpbiBtZF9udW1fb3Blbl9zZWdzLgotICoJTm90ZSB0aGF0IGEgZm9yaydzIG1kX251 bV9vcGVuX3NlZ3MgaGF2aW5nIGEgc3BlY2lmaWMgdmFsdWUgZG9lcyBub3QKLSAqCW5lY2Vzc2Fy aWx5IG1lYW4gdGhlIHJlbGF0aW9uIGRvZXNuJ3QgaGF2ZSBhZGRpdGlvbmFsIHNlZ21lbnRzOyB3 ZSBtYXkKKyAqCUZpbGUgZGVzY3JpcHRvcnMgYXJlIHN0b3JlZCBpbiB0aGUgbWRfc2VnX2ZkcyBh cnJheSBpbnNpZGUKKyAqCVNNZ3JGaWxlRGF0YS4gVGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgaXMg c3RvcmVkIGluIG1kX251bV9vcGVuX3NlZ3MuCisgKglOb3RlIHRoYXQgbWRfbnVtX29wZW5fc2Vn cyBoYXZpbmcgYSBzcGVjaWZpYyB2YWx1ZSBkb2VzIG5vdAorICoJbmVjZXNzYXJpbHkgbWVhbiB0 aGUgZmlsZSBkb2Vzbid0IGhhdmUgYWRkaXRpb25hbCBzZWdtZW50czsgd2UgbWF5CiAgKglqdXN0 IG5vdCBoYXZlIG9wZW5lZCB0aGUgbmV4dCBzZWdtZW50IHlldC4gIChXZSBjb3VsZCBub3QgaGF2 ZSAiYWxsCiAgKglzZWdtZW50cyBhcmUgaW4gdGhlIGFycmF5IiBhcyBhbiBpbnZhcmlhbnQgYW55 d2F5LCBzaW5jZSBhbm90aGVyIGJhY2tlbmQKICAqCWNvdWxkIGV4dGVuZCB0aGUgcmVsYXRpb24g d2hpbGUgd2UgYXJlbid0IGxvb2tpbmcuKSAgV2UgZG8gbm90IGhhdmUKQEAgLTEyMSwyNiArMTIx LDE4IEBAIHN0YXRpYyBNZW1vcnlDb250ZXh0IE1kQ3h0OwkJLyogY29udGV4dCBmb3IgYWxsIE1k ZmRWZWMgb2JqZWN0cyAqLwogCiAKIC8qIGxvY2FsIHJvdXRpbmVzICovCi1zdGF0aWMgdm9pZCBt ZHVubGlua2ZvcmsoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZv cmtudW0sCi0JCQkJCQkgYm9vbCBpc1JlZG8pOwotc3RhdGljIE1kZmRWZWMgKm1kb3BlbmZvcmso U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgaW50IGJlaGF2aW9yKTsKLXN0 YXRpYyB2b2lkIHJlZ2lzdGVyX2RpcnR5X3NlZ21lbnQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwKLQkJCQkJCQkJICAgTWRmZFZlYyAqc2VnKTsKLXN0YXRpYyB2b2lkIHJl Z2lzdGVyX3VubGlua19zZWdtZW50KFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9y a051bWJlciBmb3JrbnVtLAotCQkJCQkJCQkJQmxvY2tOdW1iZXIgc2Vnbm8pOwotc3RhdGljIHZv aWQgcmVnaXN0ZXJfZm9yZ2V0X3JlcXVlc3QoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9y LCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkJCQlCbG9ja051bWJlciBzZWdubyk7Ci1zdGF0 aWMgdm9pZCBfZmR2ZWNfcmVzaXplKFNNZ3JSZWxhdGlvbiByZWxuLAotCQkJCQkJICBGb3JrTnVt YmVyIGZvcmtudW0sCi0JCQkJCQkgIGludCBuc2VnKTsKLXN0YXRpYyBjaGFyICpfbWRmZF9zZWdw YXRoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkgICBCbG9j a051bWJlciBzZWdubyk7Ci1zdGF0aWMgTWRmZFZlYyAqX21kZmRfb3BlbnNlZyhTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorc3RhdGljIHZvaWQgbWR1bmxpbmtmb3JrKFNN Z3JGaWxlTG9jYXRvciBzbG9jYXRvciwgYm9vbCBpc1JlZG8pOworc3RhdGljIE1kZmRWZWMgKm1k b3BlbmZvcmsoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGludCBiZWhhdmlvcik7CitzdGF0aWMgdm9p ZCByZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBNZGZkVmVjICpz ZWcpOworc3RhdGljIHZvaWQgcmVnaXN0ZXJfdW5saW5rX3NlZ21lbnQoU01nckZpbGVMb2NhdG9y IHNsb2NhdG9yLCBCbG9ja051bWJlciBzZWdubyk7CitzdGF0aWMgdm9pZCByZWdpc3Rlcl9mb3Jn ZXRfcmVxdWVzdChTTWdyRmlsZUxvY2F0b3Igc2xvY2F0b3IsIEJsb2NrTnVtYmVyIHNlZ25vKTsK K3N0YXRpYyB2b2lkIF9mZHZlY19yZXNpemUoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGludCBuc2Vn KTsKK3N0YXRpYyBjaGFyICpfbWRmZF9zZWdwYXRoKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9j a051bWJlciBzZWdubyk7CitzdGF0aWMgTWRmZFZlYyAqX21kZmRfb3BlbnNlZyhTTWdyRmlsZUhh bmRsZSBzZmlsZSwKIAkJCQkJCQkgIEJsb2NrTnVtYmVyIHNlZ25vLCBpbnQgb2ZsYWdzKTsKLXN0 YXRpYyBNZGZkVmVjICpfbWRmZF9nZXRzZWcoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSwKK3N0YXRpYyBNZGZkVmVjICpfbWRmZF9nZXRzZWcoU01nckZpbGVIYW5kbGUgc2Zp bGUsCiAJCQkJCQkJIEJsb2NrTnVtYmVyIGJsa25vLCBib29sIHNraXBGc3luYywgaW50IGJlaGF2 aW9yKTsKLXN0YXRpYyBCbG9ja051bWJlciBfbWRuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkJICBNZGZkVmVjICpzZWcpOworc3RhdGljIEJsb2Nr TnVtYmVyIF9tZG5ibG9ja3MoU01nckZpbGVIYW5kbGUgc2ZpbGUsIE1kZmRWZWMgKnNlZyk7CiAK IAogLyoKQEAgLTE2MCw3ICsxNTIsNyBAQCBtZGluaXQodm9pZCkKICAqIE5vdGU6IHRoaXMgd2ls bCByZXR1cm4gdHJ1ZSBmb3IgbGluZ2VyaW5nIGZpbGVzLCB3aXRoIHBlbmRpbmcgZGVsZXRpb25z CiAgKi8KIGJvb2wKLW1kZXhpc3RzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtu dW0pCittZGV4aXN0cyhTTWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsKIAkvKgogCSAqIENsb3NlIGl0 IGZpcnN0LCB0byBlbnN1cmUgdGhhdCB3ZSBub3RpY2UgaWYgdGhlIGZvcmsgaGFzIGJlZW4gdW5s aW5rZWQKQEAgLTE2OCw5ICsxNjAsOSBAQCBtZGV4aXN0cyhTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtKQogCSAqIHdoaWNoIGFscmVhZHkgY2xvc2VzIHJlbGF0aW9ucyB3aGVu IGRyb3BwaW5nIHRoZW0uCiAJICovCiAJaWYgKCFJblJlY292ZXJ5KQotCQltZGNsb3NlKHJlbG4s IGZvcmtudW0pOworCQltZGNsb3NlKHNmaWxlKTsKIAotCXJldHVybiAobWRvcGVuZm9yayhyZWxu LCBmb3JrbnVtLCBFWFRFTlNJT05fUkVUVVJOX05VTEwpICE9IE5VTEwpOworCXJldHVybiAobWRv cGVuZm9yayhzZmlsZSwgRVhURU5TSU9OX1JFVFVSTl9OVUxMKSAhPSBOVUxMKTsKIH0KIAogLyoK QEAgLTE3OSwxNiArMTcxLDE2IEBAIG1kZXhpc3RzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0pCiAgKiBJZiBpc1JlZG8gaXMgdHJ1ZSwgaXQncyBva2F5IGZvciB0aGUgcmVs YXRpb24gdG8gZXhpc3QgYWxyZWFkeS4KICAqLwogdm9pZAotbWRjcmVhdGUoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pCittZGNyZWF0ZShTTWdyRmls ZUhhbmRsZSBzZmlsZSwgYm9vbCBpc1JlZG8pCiB7CiAJTWRmZFZlYyAgICAqbWRmZDsKIAljaGFy CSAgICpwYXRoOwogCUZpbGUJCWZkOwogCi0JaWYgKGlzUmVkbyAmJiByZWxuLT5tZF9udW1fb3Bl bl9zZWdzW2ZvcmtudW1dID4gMCkKKwlpZiAoaXNSZWRvICYmIHNmaWxlLT5tZF9udW1fb3Blbl9z ZWdzID4gMCkKIAkJcmV0dXJuOwkJCQkJLyogY3JlYXRlZCBhbmQgb3BlbmVkIGFscmVhZHkuLi4g Ki8KIAotCUFzc2VydChyZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID09IDApOworCUFz c2VydChzZmlsZS0+bWRfbnVtX29wZW5fc2VncyA9PSAwKTsKIAogCS8qCiAJICogV2UgbWF5IGJl IHVzaW5nIHRoZSB0YXJnZXQgdGFibGUgc3BhY2UgZm9yIHRoZSBmaXJzdCB0aW1lIGluIHRoaXMK QEAgLTE5OSwxMSArMTkxLDE0IEBAIG1kY3JlYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKQogCSAqIHNob3VsZCBiZSBoZXJlIGFuZCBub3QgaW4g Y29tbWFuZHMvdGFibGVzcGFjZS5jPyAgQnV0IHRoYXQgd291bGQgaW1wbHkKIAkgKiBpbXBvcnRp bmcgYSBsb3Qgb2Ygc3R1ZmYgdGhhdCBzbWdyLmMgb3VnaHRuJ3Qga25vdywgZWl0aGVyLgogCSAq LwotCVRhYmxlc3BhY2VDcmVhdGVEYnNwYWNlKHJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5z cGNPaWQsCi0JCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJ CWlzUmVkbyk7CisJaWYgKHNmaWxlLT5zbWdyX2xvY2F0b3IubG9jYXRvci5zcGNPaWQgIT0gU0xS VV9TUENfT0lEKQorCXsKKwkJVGFibGVzcGFjZUNyZWF0ZURic3BhY2Uoc2ZpbGUtPnNtZ3JfbG9j YXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJc2ZpbGUtPnNtZ3JfbG9jYXRvci5sb2NhdG9y LmRiT2lkLAorCQkJCQkJCQlpc1JlZG8pOworCX0KIAotCXBhdGggPSByZWxwYXRoKHJlbG4tPnNt Z3JfcmxvY2F0b3IsIGZvcmtudW0pOworCXBhdGggPSBzbWdyZmlsZXBhdGgoc2ZpbGUtPnNtZ3Jf bG9jYXRvcik7CiAKIAlmZCA9IFBhdGhOYW1lT3BlbkZpbGUocGF0aCwgT19SRFdSIHwgT19DUkVB VCB8IE9fRVhDTCB8IFBHX0JJTkFSWSk7CiAKQEAgLTIyNSw4ICsyMjAsOCBAQCBtZGNyZWF0ZShT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbykKIAogCXBm cmVlKHBhdGgpOwogCi0JX2ZkdmVjX3Jlc2l6ZShyZWxuLCBmb3JrbnVtLCAxKTsKLQltZGZkID0g JnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bMF07CisJX2ZkdmVjX3Jlc2l6ZShzZmlsZSwgMSk7 CisJbWRmZCA9ICZzZmlsZS0+bWRfc2VnX2Zkc1swXTsKIAltZGZkLT5tZGZkX3ZmZCA9IGZkOwog CW1kZmQtPm1kZmRfc2Vnbm8gPSAwOwogfQpAQCAtMjkzLDE2ICsyODgsOSBAQCBtZGNyZWF0ZShT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbykKICAqIHdl IGFyZSB1c3VhbGx5IG5vdCBpbiBhIHRyYW5zYWN0aW9uIGFueW1vcmUgd2hlbiB0aGlzIGlzIGNh bGxlZC4KICAqLwogdm9pZAotbWR1bmxpbmsoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9y LCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKQorbWR1bmxpbmsoU01nckZpbGVMb2Nh dG9yIHNsb2NhdG9yLCBib29sIGlzUmVkbykKIHsKLQkvKiBOb3cgZG8gdGhlIHBlci1mb3JrIHdv cmsgKi8KLQlpZiAoZm9ya251bSA9PSBJbnZhbGlkRm9ya051bWJlcikKLQl7Ci0JCWZvciAoZm9y a251bSA9IDA7IGZvcmtudW0gPD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykKLQkJCW1kdW5saW5r Zm9yayhybG9jYXRvciwgZm9ya251bSwgaXNSZWRvKTsKLQl9Ci0JZWxzZQotCQltZHVubGlua2Zv cmsocmxvY2F0b3IsIGZvcmtudW0sIGlzUmVkbyk7CisJbWR1bmxpbmtmb3JrKHNsb2NhdG9yLCBp c1JlZG8pOwogfQogCiAvKgpAQCAtMzMwLDI5ICszMTgsMjkgQEAgZG9fdHJ1bmNhdGUoY29uc3Qg Y2hhciAqcGF0aCkKIH0KIAogc3RhdGljIHZvaWQKLW1kdW5saW5rZm9yayhSZWxGaWxlTG9jYXRv ckJhY2tlbmQgcmxvY2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pCittZHVu bGlua2ZvcmsoU01nckZpbGVMb2NhdG9yIHNsb2NhdG9yLCBib29sIGlzUmVkbykKIHsKIAljaGFy CSAgICpwYXRoOwogCWludAkJCXJldDsKIAlpbnQJCQlzYXZlX2Vycm5vOwogCi0JcGF0aCA9IHJl bHBhdGgocmxvY2F0b3IsIGZvcmtudW0pOworCXBhdGggPSBzbWdyZmlsZXBhdGgoc2xvY2F0b3Ip OwogCiAJLyoKIAkgKiBUcnVuY2F0ZSBhbmQgdGhlbiB1bmxpbmsgdGhlIGZpcnN0IHNlZ21lbnQs IG9yIGp1c3QgcmVnaXN0ZXIgYSByZXF1ZXN0CiAJICogdG8gdW5saW5rIGl0IGxhdGVyLCBhcyBk ZXNjcmliZWQgaW4gdGhlIGNvbW1lbnRzIGZvciBtZHVubGluaygpLgogCSAqLwotCWlmIChpc1Jl ZG8gfHwgSXNCaW5hcnlVcGdyYWRlIHx8IGZvcmtudW0gIT0gTUFJTl9GT1JLTlVNIHx8Ci0JCVJl bEZpbGVMb2NhdG9yQmFja2VuZElzVGVtcChybG9jYXRvcikpCisJaWYgKGlzUmVkbyB8fCBJc0Jp bmFyeVVwZ3JhZGUgfHwgc2xvY2F0b3IuZm9ya251bSAhPSBNQUlOX0ZPUktOVU0gfHwKKwkJU01n ckZpbGVMb2NhdG9ySXNUZW1wKHNsb2NhdG9yKSkKIAl7Ci0JCWlmICghUmVsRmlsZUxvY2F0b3JC YWNrZW5kSXNUZW1wKHJsb2NhdG9yKSkKKwkJaWYgKCFTTWdyRmlsZUxvY2F0b3JJc1RlbXAoc2xv Y2F0b3IpKQogCQl7CiAJCQkvKiBQcmV2ZW50IG90aGVyIGJhY2tlbmRzJyBmZHMgZnJvbSBob2xk aW5nIG9uIHRvIHRoZSBkaXNrIHNwYWNlICovCiAJCQlyZXQgPSBkb190cnVuY2F0ZShwYXRoKTsK IAogCQkJLyogRm9yZ2V0IGFueSBwZW5kaW5nIHN5bmMgcmVxdWVzdHMgZm9yIHRoZSBmaXJzdCBz ZWdtZW50ICovCiAJCQlzYXZlX2Vycm5vID0gZXJybm87Ci0JCQlyZWdpc3Rlcl9mb3JnZXRfcmVx dWVzdChybG9jYXRvciwgZm9ya251bSwgMCAvKiBmaXJzdCBzZWcgKi8gKTsKKwkJCXJlZ2lzdGVy X2ZvcmdldF9yZXF1ZXN0KHNsb2NhdG9yLCAwIC8qIGZpcnN0IHNlZyAqLyApOwogCQkJZXJybm8g PSBzYXZlX2Vycm5vOwogCQl9CiAJCWVsc2UKQEAgLTM3OSw3ICszNjcsNyBAQCBtZHVubGlua2Zv cmsoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJv b2wgaXNSZWRvKQogCiAJCS8qIFJlZ2lzdGVyIHJlcXVlc3QgdG8gdW5saW5rIGZpcnN0IHNlZ21l bnQgbGF0ZXIgKi8KIAkJc2F2ZV9lcnJubyA9IGVycm5vOwotCQlyZWdpc3Rlcl91bmxpbmtfc2Vn bWVudChybG9jYXRvciwgZm9ya251bSwgMCAvKiBmaXJzdCBzZWcgKi8gKTsKKwkJcmVnaXN0ZXJf dW5saW5rX3NlZ21lbnQoc2xvY2F0b3IsIDAgLyogZmlyc3Qgc2VnICovICk7CiAJCWVycm5vID0g c2F2ZV9lcnJubzsKIAl9CiAKQEAgLTQwNCw3ICszOTIsNyBAQCBtZHVubGlua2ZvcmsoUmVsRmls ZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRv KQogCQl7CiAJCQlzcHJpbnRmKHNlZ3BhdGgsICIlcy4ldSIsIHBhdGgsIHNlZ25vKTsKIAotCQkJ aWYgKCFSZWxGaWxlTG9jYXRvckJhY2tlbmRJc1RlbXAocmxvY2F0b3IpKQorCQkJaWYgKCFTTWdy RmlsZUxvY2F0b3JJc1RlbXAoc2xvY2F0b3IpKQogCQkJewogCQkJCS8qCiAJCQkJICogUHJldmVu dCBvdGhlciBiYWNrZW5kcycgZmRzIGZyb20gaG9sZGluZyBvbiB0byB0aGUgZGlzawpAQCAtNDE3 LDcgKzQwNSw3IEBAIG1kdW5saW5rZm9yayhSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3Is IEZvcmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pCiAJCQkJICogRm9yZ2V0IGFueSBwZW5k aW5nIHN5bmMgcmVxdWVzdHMgZm9yIHRoaXMgc2VnbWVudCBiZWZvcmUgd2UKIAkJCQkgKiB0cnkg dG8gdW5saW5rLgogCQkJCSAqLwotCQkJCXJlZ2lzdGVyX2ZvcmdldF9yZXF1ZXN0KHJsb2NhdG9y LCBmb3JrbnVtLCBzZWdubyk7CisJCQkJcmVnaXN0ZXJfZm9yZ2V0X3JlcXVlc3Qoc2xvY2F0b3Is IHNlZ25vKTsKIAkJCX0KIAogCQkJaWYgKHVubGluayhzZWdwYXRoKSA8IDApCkBAIC00NDYsNyAr NDM0LDcgQEAgbWR1bmxpbmtmb3JrKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBybG9jYXRvciwgRm9y a051bWJlciBmb3JrbnVtLCBib29sIGlzUmVkbykKICAqCQljYXVzZXMgaW50ZXJ2ZW5pbmcgZmls ZSBzcGFjZSB0byBiZWNvbWUgZmlsbGVkIHdpdGggemVyb2VzLgogICovCiB2b2lkCi1tZGV4dGVu ZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9j a251bSwKK21kZXh0ZW5kKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibG9ja251 bSwKIAkJIGNoYXIgKmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMpCiB7CiAJb2ZmX3QJCXNlZWtwb3M7 CkBAIC00NTUsNyArNDQzLDcgQEAgbWRleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAKIAkvKiBUaGlzIGFzc2VydCBpcyB0 b28gZXhwZW5zaXZlIHRvIGhhdmUgb24gbm9ybWFsbHkgLi4uICovCiAjaWZkZWYgQ0hFQ0tfV1JJ VEVfVlNfRVhURU5ECi0JQXNzZXJ0KGJsb2NrbnVtID49IG1kbmJsb2NrcyhyZWxuLCBmb3JrbnVt KSk7CisJQXNzZXJ0KGJsb2NrbnVtID49IG1kbmJsb2NrcyhzZmlsZSkpOwogI2VuZGlmCiAKIAkv KgpAQCAtNDY4LDEwICs0NTYsMTAgQEAgbWRleHRlbmQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCWVyZXBvcnQoRVJST1IsCiAJ CQkJKGVycmNvZGUoRVJSQ09ERV9QUk9HUkFNX0xJTUlUX0VYQ0VFREVEKSwKIAkJCQkgZXJybXNn KCJjYW5ub3QgZXh0ZW5kIGZpbGUgXCIlc1wiIGJleW9uZCAldSBibG9ja3MiLAotCQkJCQkJcmVs cGF0aChyZWxuLT5zbWdyX3Jsb2NhdG9yLCBmb3JrbnVtKSwKKwkJCQkJCXNtZ3JmaWxlcGF0aChz ZmlsZS0+c21ncl9sb2NhdG9yKSwKIAkJCQkJCUludmFsaWRCbG9ja051bWJlcikpKTsKIAotCXYg PSBfbWRmZF9nZXRzZWcocmVsbiwgZm9ya251bSwgYmxvY2tudW0sIHNraXBGc3luYywgRVhURU5T SU9OX0NSRUFURSk7CisJdiA9IF9tZGZkX2dldHNlZyhzZmlsZSwgYmxvY2tudW0sIHNraXBGc3lu YywgRVhURU5TSU9OX0NSRUFURSk7CiAKIAlzZWVrcG9zID0gKG9mZl90KSBCTENLU1ogKiAoYmxv Y2tudW0gJSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOwogCkBAIC00OTQsMTAgKzQ4Miwx MCBAQCBtZGV4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9j a051bWJlciBibG9ja251bSwKIAkJCQkgZXJyaGludCgiQ2hlY2sgZnJlZSBkaXNrIHNwYWNlLiIp KSk7CiAJfQogCi0JaWYgKCFza2lwRnN5bmMgJiYgIVNtZ3JJc1RlbXAocmVsbikpCi0JCXJlZ2lz dGVyX2RpcnR5X3NlZ21lbnQocmVsbiwgZm9ya251bSwgdik7CisJaWYgKCFza2lwRnN5bmMgJiYg IVNtZ3JJc1RlbXAoc2ZpbGUpKQorCQlyZWdpc3Rlcl9kaXJ0eV9zZWdtZW50KHNmaWxlLCB2KTsK IAotCUFzc2VydChfbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0sIHYpIDw9ICgoQmxvY2tOdW1iZXIp IFJFTFNFR19TSVpFKSk7CisJQXNzZXJ0KF9tZG5ibG9ja3Moc2ZpbGUsIHYpIDw9ICgoQmxvY2tO dW1iZXIpIFJFTFNFR19TSVpFKSk7CiB9CiAKIC8qCkBAIC01MTEsMTcgKzQ5OSwxNyBAQCBtZGV4 dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBi bG9ja251bSwKICAqIGludmVudCBvbmUgb3V0IG9mIHdob2xlIGNsb3RoLgogICovCiBzdGF0aWMg TWRmZFZlYyAqCi1tZG9wZW5mb3JrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtu dW0sIGludCBiZWhhdmlvcikKK21kb3BlbmZvcmsoU01nckZpbGVIYW5kbGUgc2ZpbGUsIGludCBi ZWhhdmlvcikKIHsKIAlNZGZkVmVjICAgICptZGZkOwogCWNoYXIJICAgKnBhdGg7CiAJRmlsZQkJ ZmQ7CiAKIAkvKiBObyB3b3JrIGlmIGFscmVhZHkgb3BlbiAqLwotCWlmIChyZWxuLT5tZF9udW1f b3Blbl9zZWdzW2ZvcmtudW1dID4gMCkKLQkJcmV0dXJuICZyZWxuLT5tZF9zZWdfZmRzW2Zvcmtu dW1dWzBdOworCWlmIChzZmlsZS0+bWRfbnVtX29wZW5fc2VncyA+IDApCisJCXJldHVybiAmc2Zp bGUtPm1kX3NlZ19mZHNbMF07CiAKLQlwYXRoID0gcmVscGF0aChyZWxuLT5zbWdyX3Jsb2NhdG9y LCBmb3JrbnVtKTsKKwlwYXRoID0gc21ncmZpbGVwYXRoKHNmaWxlLT5zbWdyX2xvY2F0b3IpOwog CiAJZmQgPSBQYXRoTmFtZU9wZW5GaWxlKHBhdGgsIE9fUkRXUiB8IFBHX0JJTkFSWSk7CiAKQEAg LTU0MCwxMiArNTI4LDEyIEBAIG1kb3BlbmZvcmsoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwgaW50IGJlaGF2aW9yKQogCiAJcGZyZWUocGF0aCk7CiAKLQlfZmR2ZWNfcmVz aXplKHJlbG4sIGZvcmtudW0sIDEpOwotCW1kZmQgPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVt XVswXTsKKwlfZmR2ZWNfcmVzaXplKHNmaWxlLCAxKTsKKwltZGZkID0gJnNmaWxlLT5tZF9zZWdf ZmRzWzBdOwogCW1kZmQtPm1kZmRfdmZkID0gZmQ7CiAJbWRmZC0+bWRmZF9zZWdubyA9IDA7CiAK LQlBc3NlcnQoX21kbmJsb2NrcyhyZWxuLCBmb3JrbnVtLCBtZGZkKSA8PSAoKEJsb2NrTnVtYmVy KSBSRUxTRUdfU0laRSkpOworCUFzc2VydChfbWRuYmxvY2tzKHNmaWxlLCBtZGZkKSA8PSAoKEJs b2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOwogCiAJcmV0dXJuIG1kZmQ7CiB9CkBAIC01NTQsMjAg KzU0MiwxOSBAQCBtZG9wZW5mb3JrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtu dW0sIGludCBiZWhhdmlvcikKICAqICBtZG9wZW4oKSAtLSBJbml0aWFsaXplIG5ld2x5LW9wZW5l ZCByZWxhdGlvbi4KICAqLwogdm9pZAotbWRvcGVuKFNNZ3JSZWxhdGlvbiByZWxuKQorbWRvcGVu KFNNZ3JGaWxlSGFuZGxlIHNmaWxlKQogewogCS8qIG1hcmsgaXQgbm90IG9wZW4gKi8KLQlmb3Ig KGludCBmb3JrbnVtID0gMDsgZm9ya251bSA8PSBNQVhfRk9SS05VTTsgZm9ya251bSsrKQotCQly ZWxuLT5tZF9udW1fb3Blbl9zZWdzW2ZvcmtudW1dID0gMDsKKwlzZmlsZS0+bWRfbnVtX29wZW5f c2VncyA9IDA7CiB9CiAKIC8qCiAgKgltZGNsb3NlKCkgLS0gQ2xvc2UgdGhlIHNwZWNpZmllZCBy ZWxhdGlvbiwgaWYgaXQgaXNuJ3QgY2xvc2VkIGFscmVhZHkuCiAgKi8KIHZvaWQKLW1kY2xvc2Uo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK21kY2xvc2UoU01nckZpbGVI YW5kbGUgc2ZpbGUpCiB7Ci0JaW50CQkJbm9wZW5zZWdzID0gcmVsbi0+bWRfbnVtX29wZW5fc2Vn c1tmb3JrbnVtXTsKKwlpbnQJCQlub3BlbnNlZ3MgPSBzZmlsZS0+bWRfbnVtX29wZW5fc2VnczsK IAogCS8qIE5vIHdvcmsgaWYgYWxyZWFkeSBjbG9zZWQgKi8KIAlpZiAobm9wZW5zZWdzID09IDAp CkBAIC01NzYsMTAgKzU2MywxMCBAQCBtZGNsb3NlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0pCiAJLyogY2xvc2Ugc2VnbWVudHMgc3RhcnRpbmcgZnJvbSB0aGUgZW5kICov CiAJd2hpbGUgKG5vcGVuc2VncyA+IDApCiAJewotCQlNZGZkVmVjICAgICp2ID0gJnJlbG4tPm1k X3NlZ19mZHNbZm9ya251bV1bbm9wZW5zZWdzIC0gMV07CisJCU1kZmRWZWMgICAgKnYgPSAmc2Zp bGUtPm1kX3NlZ19mZHNbbm9wZW5zZWdzIC0gMV07CiAKIAkJRmlsZUNsb3NlKHYtPm1kZmRfdmZk KTsKLQkJX2ZkdmVjX3Jlc2l6ZShyZWxuLCBmb3JrbnVtLCBub3BlbnNlZ3MgLSAxKTsKKwkJX2Zk dmVjX3Jlc2l6ZShzZmlsZSwgbm9wZW5zZWdzIC0gMSk7CiAJCW5vcGVuc2Vncy0tOwogCX0KIH0K QEAgLTU4OCwxMyArNTc1LDEzIEBAIG1kY2xvc2UoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSkKICAqCW1kcHJlZmV0Y2goKSAtLSBJbml0aWF0ZSBhc3luY2hyb25vdXMgcmVh ZCBvZiB0aGUgc3BlY2lmaWVkIGJsb2NrIG9mIGEgcmVsYXRpb24KICAqLwogYm9vbAotbWRwcmVm ZXRjaChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBi bG9ja251bSkKK21kcHJlZmV0Y2goU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJs b2NrbnVtKQogewogI2lmZGVmIFVTRV9QUkVGRVRDSAogCW9mZl90CQlzZWVrcG9zOwogCU1kZmRW ZWMgICAgKnY7CiAKLQl2ID0gX21kZmRfZ2V0c2VnKHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLCBm YWxzZSwKKwl2ID0gX21kZmRfZ2V0c2VnKHNmaWxlLCBibG9ja251bSwgZmFsc2UsCiAJCQkJCSBJ blJlY292ZXJ5ID8gRVhURU5TSU9OX1JFVFVSTl9OVUxMIDogRVhURU5TSU9OX0ZBSUwpOwogCWlm ICh2ID09IE5VTEwpCiAJCXJldHVybiBmYWxzZTsKQEAgLTYxNiw4ICs2MDMsNyBAQCBtZHByZWZl dGNoKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJs b2NrbnVtKQogICogY29uc2lkZXJhYmx5IG1vcmUgZWZmaWNpZW50IHRoYW4gZG9pbmcgc28gaW5k aXZpZHVhbGx5LgogICovCiB2b2lkCi1tZHdyaXRlYmFjayhTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtLAotCQkJQmxvY2tOdW1iZXIgYmxvY2tudW0sIEJsb2NrTnVtYmVyIG5i bG9ja3MpCittZHdyaXRlYmFjayhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgYmxv Y2tudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiB7CiAJLyoKIAkgKiBJc3N1ZSBmbHVzaCByZXF1 ZXN0cyBpbiBhcyBmZXcgcmVxdWVzdHMgYXMgcG9zc2libGU7IGhhdmUgdG8gc3BsaXQgYXQKQEAg LTYzMSw3ICs2MTcsNyBAQCBtZHdyaXRlYmFjayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtLAogCQlpbnQJCQlzZWdudW1fc3RhcnQsCiAJCQkJCXNlZ251bV9lbmQ7CiAKLQkJ diA9IF9tZGZkX2dldHNlZyhyZWxuLCBmb3JrbnVtLCBibG9ja251bSwgdHJ1ZSAvKiBub3QgdXNl ZCAqLyAsCisJCXYgPSBfbWRmZF9nZXRzZWcoc2ZpbGUsIGJsb2NrbnVtLCB0cnVlIC8qIG5vdCB1 c2VkICovICwKIAkJCQkJCSBFWFRFTlNJT05fRE9OVF9PUEVOKTsKIAogCQkvKgpAQCAtNjY4LDIw ICs2NTQsMjEgQEAgbWR3cml0ZWJhY2soU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSwKICAqCW1kcmVhZCgpIC0tIFJlYWQgdGhlIHNwZWNpZmllZCBibG9jayBmcm9tIGEgcmVs YXRpb24uCiAgKi8KIHZvaWQKLW1kcmVhZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBm b3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKK21kcmVhZChTTWdyRmlsZUhhbmRsZSBzZmls ZSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJICAgY2hhciAqYnVmZmVyKQogewogCW9mZl90CQlz ZWVrcG9zOwogCWludAkJCW5ieXRlczsKIAlNZGZkVmVjICAgICp2OwogCi0JVFJBQ0VfUE9TVEdS RVNRTF9TTUdSX01EX1JFQURfU1RBUlQoZm9ya251bSwgYmxvY2tudW0sCi0JCQkJCQkJCQkJcmVs bi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnNwY09pZCwKLQkJCQkJCQkJCQlyZWxuLT5zbWdyX3Js b2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJcmVsbi0+c21ncl9ybG9jYXRvci5sb2Nh dG9yLnJlbE51bWJlciwKLQkJCQkJCQkJCQlyZWxuLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQpOwor CVRSQUNFX1BPU1RHUkVTUUxfU01HUl9NRF9SRUFEX1NUQVJUKHNmaWxlLT5zbWdyX2ZvcmtudW0s CisJCQkJCQkJCQkJYmxvY2tudW0sCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9j YXRvci5zcGNPaWQsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9p ZCwKKwkJCQkJCQkJCQlzZmlsZS0+c21ncl9ybG9jYXRvci5sb2NhdG9yLnJlbE51bWJlciwKKwkJ CQkJCQkJCQlzZmlsZS0+c21ncl9ybG9jYXRvci5iYWNrZW5kKTsKIAotCXYgPSBfbWRmZF9nZXRz ZWcocmVsbiwgZm9ya251bSwgYmxvY2tudW0sIGZhbHNlLAorCXYgPSBfbWRmZF9nZXRzZWcoc2Zp bGUsIGJsb2NrbnVtLCBmYWxzZSwKIAkJCQkJIEVYVEVOU0lPTl9GQUlMIHwgRVhURU5TSU9OX0NS RUFURV9SRUNPVkVSWSk7CiAKIAlzZWVrcG9zID0gKG9mZl90KSBCTENLU1ogKiAoYmxvY2tudW0g JSAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpOwpAQCAtNjkwLDExICs2NzcsMTIgQEAgbWRy ZWFkKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJs b2NrbnVtLAogCiAJbmJ5dGVzID0gRmlsZVJlYWQodi0+bWRmZF92ZmQsIGJ1ZmZlciwgQkxDS1Na LCBzZWVrcG9zLCBXQUlUX0VWRU5UX0RBVEFfRklMRV9SRUFEKTsKIAotCVRSQUNFX1BPU1RHUkVT UUxfU01HUl9NRF9SRUFEX0RPTkUoZm9ya251bSwgYmxvY2tudW0sCi0JCQkJCQkJCQkgICByZWxu LT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJICAgcmVsbi0+c21ncl9y bG9jYXRvci5sb2NhdG9yLmRiT2lkLAotCQkJCQkJCQkJICAgcmVsbi0+c21ncl9ybG9jYXRvci5s b2NhdG9yLnJlbE51bWJlciwKLQkJCQkJCQkJCSAgIHJlbG4tPnNtZ3JfcmxvY2F0b3IuYmFja2Vu ZCwKKwlUUkFDRV9QT1NUR1JFU1FMX1NNR1JfTURfUkVBRF9ET05FKHNmaWxlLT5zbWdyX2Zvcmtu dW0sCisJCQkJCQkJCQkgICBibG9ja251bSwKKwkJCQkJCQkJCSAgIHNmaWxlLT5zbWdyX3Jsb2Nh dG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJICAgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9j YXRvci5kYk9pZCwKKwkJCQkJCQkJCSAgIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVs TnVtYmVyLAorCQkJCQkJCQkJICAgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IuYmFja2VuZCwKIAkJCQkJ CQkJCSAgIG5ieXRlcywKIAkJCQkJCQkJCSAgIEJMQ0tTWik7CiAKQEAgLTczMyw3ICs3MjEsNyBA QCBtZHJlYWQoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1i ZXIgYmxvY2tudW0sCiAgKgkJdXNlIG1kZXh0ZW5kKCkuCiAgKi8KIHZvaWQKLW1kd3JpdGUoU01n clJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0s CittZHdyaXRlKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibG9ja251bSwKIAkJ Y2hhciAqYnVmZmVyLCBib29sIHNraXBGc3luYykKIHsKIAlvZmZfdAkJc2Vla3BvczsKQEAgLTc0 MiwxNiArNzMwLDE3IEBAIG1kd3JpdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9y a251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAKIAkvKiBUaGlzIGFzc2VydCBpcyB0b28gZXhw ZW5zaXZlIHRvIGhhdmUgb24gbm9ybWFsbHkgLi4uICovCiAjaWZkZWYgQ0hFQ0tfV1JJVEVfVlNf RVhURU5ECi0JQXNzZXJ0KGJsb2NrbnVtIDwgbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0pKTsKKwlB c3NlcnQoYmxvY2tudW0gPCBtZG5ibG9ja3Moc2ZpbGUpKTsKICNlbmRpZgogCi0JVFJBQ0VfUE9T VEdSRVNRTF9TTUdSX01EX1dSSVRFX1NUQVJUKGZvcmtudW0sIGJsb2NrbnVtLAotCQkJCQkJCQkJ CSByZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAotCQkJCQkJCQkJCSByZWxuLT5z bWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCi0JCQkJCQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0 b3IubG9jYXRvci5yZWxOdW1iZXIsCi0JCQkJCQkJCQkJIHJlbG4tPnNtZ3JfcmxvY2F0b3IuYmFj a2VuZCk7CisJVFJBQ0VfUE9TVEdSRVNRTF9TTUdSX01EX1dSSVRFX1NUQVJUKHNmaWxlLT5zbWdy X2ZvcmtudW0sCisJCQkJCQkJCQkJIGJsb2NrbnVtLAorCQkJCQkJCQkJCSBzZmlsZS0+c21ncl9y bG9jYXRvci5sb2NhdG9yLnNwY09pZCwKKwkJCQkJCQkJCQkgc2ZpbGUtPnNtZ3JfcmxvY2F0b3Iu bG9jYXRvci5kYk9pZCwKKwkJCQkJCQkJCQkgc2ZpbGUtPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5y ZWxOdW1iZXIsCisJCQkJCQkJCQkJIHNmaWxlLT5zbWdyX3Jsb2NhdG9yLmJhY2tlbmQpOwogCi0J diA9IF9tZGZkX2dldHNlZyhyZWxuLCBmb3JrbnVtLCBibG9ja251bSwgc2tpcEZzeW5jLAorCXYg PSBfbWRmZF9nZXRzZWcoc2ZpbGUsIGJsb2NrbnVtLCBza2lwRnN5bmMsCiAJCQkJCSBFWFRFTlNJ T05fRkFJTCB8IEVYVEVOU0lPTl9DUkVBVEVfUkVDT1ZFUlkpOwogCiAJc2Vla3BvcyA9IChvZmZf dCkgQkxDS1NaICogKGJsb2NrbnVtICUgKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKTsKQEAg LTc2MCwxMSArNzQ5LDEyIEBAIG1kd3JpdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIg Zm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAKIAluYnl0ZXMgPSBGaWxlV3JpdGUodi0+ bWRmZF92ZmQsIGJ1ZmZlciwgQkxDS1NaLCBzZWVrcG9zLCBXQUlUX0VWRU5UX0RBVEFfRklMRV9X UklURSk7CiAKLQlUUkFDRV9QT1NUR1JFU1FMX1NNR1JfTURfV1JJVEVfRE9ORShmb3JrbnVtLCBi bG9ja251bSwKLQkJCQkJCQkJCQlyZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAot CQkJCQkJCQkJCXJlbG4tPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5kYk9pZCwKLQkJCQkJCQkJCQly ZWxuLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IucmVsTnVtYmVyLAotCQkJCQkJCQkJCXJlbG4tPnNt Z3JfcmxvY2F0b3IuYmFja2VuZCwKKwlUUkFDRV9QT1NUR1JFU1FMX1NNR1JfTURfV1JJVEVfRE9O RShzZmlsZS0+c21ncl9mb3JrbnVtLAorCQkJCQkJCQkJCWJsb2NrbnVtLAorCQkJCQkJCQkJCXNm aWxlLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJCXNmaWxlLT5zbWdy X3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0b3Iu bG9jYXRvci5yZWxOdW1iZXIsCisJCQkJCQkJCQkJc2ZpbGUtPnNtZ3JfcmxvY2F0b3IuYmFja2Vu ZCwKIAkJCQkJCQkJCQluYnl0ZXMsCiAJCQkJCQkJCQkJQkxDS1NaKTsKIApAQCAtNzg1LDggKzc3 NSw4IEBAIG1kd3JpdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxv Y2tOdW1iZXIgYmxvY2tudW0sCiAJCQkJIGVycmhpbnQoIkNoZWNrIGZyZWUgZGlzayBzcGFjZS4i KSkpOwogCX0KIAotCWlmICghc2tpcEZzeW5jICYmICFTbWdySXNUZW1wKHJlbG4pKQotCQlyZWdp c3Rlcl9kaXJ0eV9zZWdtZW50KHJlbG4sIGZvcmtudW0sIHYpOworCWlmICghc2tpcEZzeW5jICYm ICFTbWdySXNUZW1wKHNmaWxlKSkKKwkJcmVnaXN0ZXJfZGlydHlfc2VnbWVudChzZmlsZSwgdik7 CiB9CiAKIC8qCkBAIC03OTgsMTYgKzc4OCwxNiBAQCBtZHdyaXRlKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAogICoJCWFyZSBwcmVz ZW50IGluIHRoZSBhcnJheS4KICAqLwogQmxvY2tOdW1iZXIKLW1kbmJsb2NrcyhTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQorbWRuYmxvY2tzKFNNZ3JGaWxlSGFuZGxlIHNm aWxlKQogewogCU1kZmRWZWMgICAgKnY7CiAJQmxvY2tOdW1iZXIgbmJsb2NrczsKIAlCbG9ja051 bWJlciBzZWdubzsKIAotCW1kb3BlbmZvcmsocmVsbiwgZm9ya251bSwgRVhURU5TSU9OX0ZBSUwp OworCW1kb3BlbmZvcmsoc2ZpbGUsIEVYVEVOU0lPTl9GQUlMKTsKIAogCS8qIG1kb3BlbiBoYXMg b3BlbmVkIHRoZSBmaXJzdCBzZWdtZW50ICovCi0JQXNzZXJ0KHJlbG4tPm1kX251bV9vcGVuX3Nl Z3NbZm9ya251bV0gPiAwKTsKKwlBc3NlcnQoc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MgPiAwKTsK IAogCS8qCiAJICogU3RhcnQgZnJvbSB0aGUgbGFzdCBvcGVuIHNlZ21lbnRzLCB0byBhdm9pZCBy ZWR1bmRhbnQgc2Vla3MuICBXZSBoYXZlCkBAIC04MjIsMTIgKzgxMiwxMiBAQCBtZG5ibG9ja3Mo U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKIAkgKiB0aGF0J3MgT0sgYmVj YXVzZSB0aGUgY2hlY2twb2ludGVyIG5ldmVyIG5lZWRzIHRvIGNvbXB1dGUgcmVsYXRpb24KIAkg KiBzaXplLikKIAkgKi8KLQlzZWdubyA9IHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV0g LSAxOwotCXYgPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVtzZWdub107CisJc2Vnbm8gPSBz ZmlsZS0+bWRfbnVtX29wZW5fc2VncyAtIDE7CisJdiA9ICZzZmlsZS0+bWRfc2VnX2Zkc1tzZWdu b107CiAKIAlmb3IgKDs7KQogCXsKLQkJbmJsb2NrcyA9IF9tZG5ibG9ja3MocmVsbiwgZm9ya251 bSwgdik7CisJCW5ibG9ja3MgPSBfbWRuYmxvY2tzKHNmaWxlLCB2KTsKIAkJaWYgKG5ibG9ja3Mg PiAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0laRSkpCiAJCQllbG9nKEZBVEFMLCAic2VnbWVudCB0 b28gYmlnIik7CiAJCWlmIChuYmxvY2tzIDwgKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpKQpA QCAtODQ1LDcgKzgzNSw3IEBAIG1kbmJsb2NrcyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJl ciBmb3JrbnVtKQogCQkgKiB1bmRlcm1pbmVzIF9tZGZkX2dldHNlZydzIGF0dGVtcHRzIHRvIG5v dGljZSBhbmQgcmVwb3J0IGFuIGVycm9yCiAJCSAqIHVwb24gYWNjZXNzIHRvIGEgbWlzc2luZyBz ZWdtZW50LgogCQkgKi8KLQkJdiA9IF9tZGZkX29wZW5zZWcocmVsbiwgZm9ya251bSwgc2Vnbm8s IDApOworCQl2ID0gX21kZmRfb3BlbnNlZyhzZmlsZSwgc2Vnbm8sIDApOwogCQlpZiAodiA9PSBO VUxMKQogCQkJcmV0dXJuIHNlZ25vICogKChCbG9ja051bWJlcikgUkVMU0VHX1NJWkUpOwogCX0K QEAgLTg1NSw3ICs4NDUsNyBAQCBtZG5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSkKICAqCW1kdHJ1bmNhdGUoKSAtLSBUcnVuY2F0ZSByZWxhdGlvbiB0byBzcGVj aWZpZWQgbnVtYmVyIG9mIGJsb2Nrcy4KICAqLwogdm9pZAotbWR0cnVuY2F0ZShTTWdyUmVsYXRp b24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzKQorbWR0cnVu Y2F0ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgbmJsb2NrcykKIHsKIAlCbG9j a051bWJlciBjdXJuYmxrOwogCUJsb2NrTnVtYmVyIHByaW9yYmxvY2tzOwpAQCAtODY1LDcgKzg1 NSw3IEBAIG1kdHJ1bmNhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwg QmxvY2tOdW1iZXIgbmJsb2NrcykKIAkgKiBOT1RFOiBtZG5ibG9ja3MgbWFrZXMgc3VyZSB3ZSBo YXZlIG9wZW5lZCBhbGwgYWN0aXZlIHNlZ21lbnRzLCBzbyB0aGF0CiAJICogdHJ1bmNhdGlvbiBs b29wIHdpbGwgZ2V0IHRoZW0gYWxsIQogCSAqLwotCWN1cm5ibGsgPSBtZG5ibG9ja3MocmVsbiwg Zm9ya251bSk7CisJY3VybmJsayA9IG1kbmJsb2NrcyhzZmlsZSk7CiAJaWYgKG5ibG9ja3MgPiBj dXJuYmxrKQogCXsKIAkJLyogQm9ndXMgcmVxdWVzdCAuLi4gYnV0IG5vIGNvbXBsYWludCBpZiBJ blJlY292ZXJ5ICovCkBAIC04NzMsNyArODYzLDcgQEAgbWR0cnVuY2F0ZShTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzKQogCQkJcmV0dXJu OwogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJtc2coImNvdWxkIG5vdCB0cnVuY2F0ZSBmaWxl IFwiJXNcIiB0byAldSBibG9ja3M6IGl0J3Mgb25seSAldSBibG9ja3Mgbm93IiwKLQkJCQkJCXJl bHBhdGgocmVsbi0+c21ncl9ybG9jYXRvciwgZm9ya251bSksCisJCQkJCQlzbWdyZmlsZXBhdGgo c2ZpbGUtPnNtZ3JfbG9jYXRvciksCiAJCQkJCQluYmxvY2tzLCBjdXJuYmxrKSkpOwogCX0KIAlp ZiAobmJsb2NrcyA9PSBjdXJuYmxrKQpAQCAtODgzLDE0ICs4NzMsMTQgQEAgbWR0cnVuY2F0ZShT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBuYmxvY2tz KQogCSAqIFRydW5jYXRlIHNlZ21lbnRzLCBzdGFydGluZyBhdCB0aGUgbGFzdCBvbmUuIFN0YXJ0 aW5nIGF0IHRoZSBlbmQgbWFrZXMKIAkgKiBtYW5hZ2luZyB0aGUgbWVtb3J5IGZvciB0aGUgZmQg YXJyYXkgZWFzaWVyLCBzaG91bGQgdGhlcmUgYmUgZXJyb3JzLgogCSAqLwotCWN1cm9wZW5zZWdz ID0gcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXTsKKwljdXJvcGVuc2VncyA9IHNmaWxl LT5tZF9udW1fb3Blbl9zZWdzOwogCXdoaWxlIChjdXJvcGVuc2VncyA+IDApCiAJewogCQlNZGZk VmVjICAgICp2OwogCiAJCXByaW9yYmxvY2tzID0gKGN1cm9wZW5zZWdzIC0gMSkgKiBSRUxTRUdf U0laRTsKIAotCQl2ID0gJnJlbG4tPm1kX3NlZ19mZHNbZm9ya251bV1bY3Vyb3BlbnNlZ3MgLSAx XTsKKwkJdiA9ICZzZmlsZS0+bWRfc2VnX2Zkc1tjdXJvcGVuc2VncyAtIDFdOwogCiAJCWlmIChw cmlvcmJsb2NrcyA+IG5ibG9ja3MpCiAJCXsKQEAgLTkwNCwxNCArODk0LDE0IEBAIG1kdHJ1bmNh dGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgbmJs b2NrcykKIAkJCQkJCSBlcnJtc2coImNvdWxkIG5vdCB0cnVuY2F0ZSBmaWxlIFwiJXNcIjogJW0i LAogCQkJCQkJCQlGaWxlUGF0aE5hbWUodi0+bWRmZF92ZmQpKSkpOwogCi0JCQlpZiAoIVNtZ3JJ c1RlbXAocmVsbikpCi0JCQkJcmVnaXN0ZXJfZGlydHlfc2VnbWVudChyZWxuLCBmb3JrbnVtLCB2 KTsKKwkJCWlmICghU21ncklzVGVtcChzZmlsZSkpCisJCQkJcmVnaXN0ZXJfZGlydHlfc2VnbWVu dChzZmlsZSwgdik7CiAKIAkJCS8qIHdlIG5ldmVyIGRyb3AgdGhlIDFzdCBzZWdtZW50ICovCi0J CQlBc3NlcnQodiAhPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVswXSk7CisJCQlBc3NlcnQo diAhPSAmc2ZpbGUtPm1kX3NlZ19mZHNbMF0pOwogCiAJCQlGaWxlQ2xvc2Uodi0+bWRmZF92ZmQp OwotCQkJX2ZkdmVjX3Jlc2l6ZShyZWxuLCBmb3JrbnVtLCBjdXJvcGVuc2VncyAtIDEpOworCQkJ X2ZkdmVjX3Jlc2l6ZShzZmlsZSwgY3Vyb3BlbnNlZ3MgLSAxKTsKIAkJfQogCQllbHNlIGlmIChw cmlvcmJsb2NrcyArICgoQmxvY2tOdW1iZXIpIFJFTFNFR19TSVpFKSA+IG5ibG9ja3MpCiAJCXsK QEAgLTkzMCw4ICs5MjAsOCBAQCBtZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpCiAJCQkJCQkgZXJybXNnKCJjb3VsZCBu b3QgdHJ1bmNhdGUgZmlsZSBcIiVzXCIgdG8gJXUgYmxvY2tzOiAlbSIsCiAJCQkJCQkJCUZpbGVQ YXRoTmFtZSh2LT5tZGZkX3ZmZCksCiAJCQkJCQkJCW5ibG9ja3MpKSk7Ci0JCQlpZiAoIVNtZ3JJ c1RlbXAocmVsbikpCi0JCQkJcmVnaXN0ZXJfZGlydHlfc2VnbWVudChyZWxuLCBmb3JrbnVtLCB2 KTsKKwkJCWlmICghU21ncklzVGVtcChzZmlsZSkpCisJCQkJcmVnaXN0ZXJfZGlydHlfc2VnbWVu dChzZmlsZSwgdik7CiAJCX0KIAkJZWxzZQogCQl7CkBAIC05NTcsNyArOTQ3LDcgQEAgbWR0cnVu Y2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBu YmxvY2tzKQogICogc2VnbWVudCBtYXkgc3Vydml2ZSByZWNvdmVyeSwgcmVpbnRyb2R1Y2luZyB1 bndhbnRlZCBkYXRhIGludG8gdGhlIHRhYmxlLgogICovCiB2b2lkCi1tZGltbWVkc3luYyhTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQorbWRpbW1lZHN5bmMoU01nckZpbGVI YW5kbGUgc2ZpbGUpCiB7CiAJaW50CQkJc2Vnbm87CiAJaW50CQkJbWluX2luYWN0aXZlX3NlZzsK QEAgLTk2Niw5ICs5NTYsOSBAQCBtZGltbWVkc3luYyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtKQogCSAqIE5PVEU6IG1kbmJsb2NrcyBtYWtlcyBzdXJlIHdlIGhhdmUgb3Bl bmVkIGFsbCBhY3RpdmUgc2VnbWVudHMsIHNvIHRoYXQKIAkgKiBmc3luYyBsb29wIHdpbGwgZ2V0 IHRoZW0gYWxsIQogCSAqLwotCW1kbmJsb2NrcyhyZWxuLCBmb3JrbnVtKTsKKwltZG5ibG9ja3Mo c2ZpbGUpOwogCi0JbWluX2luYWN0aXZlX3NlZyA9IHNlZ25vID0gcmVsbi0+bWRfbnVtX29wZW5f c2Vnc1tmb3JrbnVtXTsKKwltaW5faW5hY3RpdmVfc2VnID0gc2Vnbm8gPSBzZmlsZS0+bWRfbnVt X29wZW5fc2VnczsKIAogCS8qCiAJICogVGVtcG9yYXJpbHkgb3BlbiBpbmFjdGl2ZSBzZWdtZW50 cywgdGhlbiBjbG9zZSB0aGVtIGFmdGVyIHN5bmMuICBUaGVyZQpAQCAtOTc2LDEyICs5NjYsMTIg QEAgbWRpbW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKIAkg KiBpcyBoYXJtbGVzcy4gIFdlIGRvbid0IGJvdGhlciB0byBjbGVhbiB0aGVtIHVwIGFuZCB0YWtl IGEgcmlzayBvZgogCSAqIGZ1cnRoZXIgdHJvdWJsZS4gIFRoZSBuZXh0IG1kY2xvc2UoKSB3aWxs IHNvb24gY2xvc2UgdGhlbS4KIAkgKi8KLQl3aGlsZSAoX21kZmRfb3BlbnNlZyhyZWxuLCBmb3Jr bnVtLCBzZWdubywgMCkgIT0gTlVMTCkKKwl3aGlsZSAoX21kZmRfb3BlbnNlZyhzZmlsZSwgc2Vn bm8sIDApICE9IE5VTEwpCiAJCXNlZ25vKys7CiAKIAl3aGlsZSAoc2Vnbm8gPiAwKQogCXsKLQkJ TWRmZFZlYyAgICAqdiA9ICZyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dW3NlZ25vIC0gMV07CisJ CU1kZmRWZWMgICAgKnYgPSAmc2ZpbGUtPm1kX3NlZ19mZHNbc2Vnbm8gLSAxXTsKIAogCQlpZiAo RmlsZVN5bmModi0+bWRmZF92ZmQsIFdBSVRfRVZFTlRfREFUQV9GSUxFX0lNTUVESUFURV9TWU5D KSA8IDApCiAJCQllcmVwb3J0KGRhdGFfc3luY19lbGV2ZWwoRVJST1IpLApAQCAtOTkzLDcgKzk4 Myw3IEBAIG1kaW1tZWRzeW5jKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0p CiAJCWlmIChzZWdubyA+IG1pbl9pbmFjdGl2ZV9zZWcpCiAJCXsKIAkJCUZpbGVDbG9zZSh2LT5t ZGZkX3ZmZCk7Ci0JCQlfZmR2ZWNfcmVzaXplKHJlbG4sIGZvcmtudW0sIHNlZ25vIC0gMSk7CisJ CQlfZmR2ZWNfcmVzaXplKHNmaWxlLCBzZWdubyAtIDEpOwogCQl9CiAKIAkJc2Vnbm8tLTsKQEAg LTEwMTAsMTQgKzEwMDAsMTQgQEAgbWRpbW1lZHN5bmMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtO dW1iZXIgZm9ya251bSkKICAqIGVub3VnaCB0byBiZSBhIHBlcmZvcm1hbmNlIHByb2JsZW0pLgog ICovCiBzdGF0aWMgdm9pZAotcmVnaXN0ZXJfZGlydHlfc2VnbWVudChTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLCBNZGZkVmVjICpzZWcpCityZWdpc3Rlcl9kaXJ0eV9zZWdt ZW50KFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBNZGZkVmVjICpzZWcpCiB7CiAJRmlsZVRhZwkJdGFn OwogCi0JSU5JVF9NRF9GSUxFVEFHKHRhZywgcmVsbi0+c21ncl9ybG9jYXRvci5sb2NhdG9yLCBm b3JrbnVtLCBzZWctPm1kZmRfc2Vnbm8pOworCUlOSVRfTURfRklMRVRBRyh0YWcsIHNmaWxlLT5z bWdyX2xvY2F0b3IubG9jYXRvciwgc2ZpbGUtPnNtZ3JfbG9jYXRvci5mb3JrbnVtLCBzZWctPm1k ZmRfc2Vnbm8pOwogCiAJLyogVGVtcCByZWxhdGlvbnMgc2hvdWxkIG5ldmVyIGJlIGZzeW5jJ2Qg Ki8KLQlBc3NlcnQoIVNtZ3JJc1RlbXAocmVsbikpOworCUFzc2VydCghU21ncklzVGVtcChzZmls ZSkpOwogCiAJaWYgKCFSZWdpc3RlclN5bmNSZXF1ZXN0KCZ0YWcsIFNZTkNfUkVRVUVTVCwgZmFs c2UgLyogcmV0cnlPbkVycm9yICovICkpCiAJewpAQCAtMTAzNiwxNSArMTAyNiwxNCBAQCByZWdp c3Rlcl9kaXJ0eV9zZWdtZW50KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0s IE1kZmRWZWMgKnNlZykKICAqIHJlZ2lzdGVyX3VubGlua19zZWdtZW50KCkgLS0gU2NoZWR1bGUg YSBmaWxlIHRvIGJlIGRlbGV0ZWQgYWZ0ZXIgbmV4dCBjaGVja3BvaW50CiAgKi8KIHN0YXRpYyB2 b2lkCi1yZWdpc3Rlcl91bmxpbmtfc2VnbWVudChSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0 b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCUJsb2NrTnVtYmVyIHNlZ25vKQorcmVnaXN0 ZXJfdW5saW5rX3NlZ21lbnQoU01nckZpbGVMb2NhdG9yIHNsb2NhdG9yLCBCbG9ja051bWJlciBz ZWdubykKIHsKIAlGaWxlVGFnCQl0YWc7CiAKLQlJTklUX01EX0ZJTEVUQUcodGFnLCBybG9jYXRv ci5sb2NhdG9yLCBmb3JrbnVtLCBzZWdubyk7CisJSU5JVF9NRF9GSUxFVEFHKHRhZywgc2xvY2F0 b3IubG9jYXRvciwgc2xvY2F0b3IuZm9ya251bSwgc2Vnbm8pOwogCiAJLyogU2hvdWxkIG5ldmVy IGJlIHVzZWQgd2l0aCB0ZW1wIHJlbGF0aW9ucyAqLwotCUFzc2VydCghUmVsRmlsZUxvY2F0b3JC YWNrZW5kSXNUZW1wKHJsb2NhdG9yKSk7CisJQXNzZXJ0KCFTTWdyRmlsZUxvY2F0b3JJc1RlbXAo c2xvY2F0b3IpKTsKIAogCVJlZ2lzdGVyU3luY1JlcXVlc3QoJnRhZywgU1lOQ19VTkxJTktfUkVR VUVTVCwgdHJ1ZSAvKiByZXRyeU9uRXJyb3IgKi8gKTsKIH0KQEAgLTEwNTMsMTIgKzEwNDIsMTEg QEAgcmVnaXN0ZXJfdW5saW5rX3NlZ21lbnQoUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9y LCBGb3JrTnVtYmVyIGZvcmtudW0sCiAgKiByZWdpc3Rlcl9mb3JnZXRfcmVxdWVzdCgpIC0tIGZv cmdldCBhbnkgZnN5bmNzIGZvciBhIHJlbGF0aW9uIGZvcmsncyBzZWdtZW50CiAgKi8KIHN0YXRp YyB2b2lkCi1yZWdpc3Rlcl9mb3JnZXRfcmVxdWVzdChSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxv Y2F0b3IsIEZvcmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCUJsb2NrTnVtYmVyIHNlZ25vKQorcmVn aXN0ZXJfZm9yZ2V0X3JlcXVlc3QoU01nckZpbGVMb2NhdG9yIHNsb2NhdG9yLCBCbG9ja051bWJl ciBzZWdubykKIHsKIAlGaWxlVGFnCQl0YWc7CiAKLQlJTklUX01EX0ZJTEVUQUcodGFnLCBybG9j YXRvci5sb2NhdG9yLCBmb3JrbnVtLCBzZWdubyk7CisJSU5JVF9NRF9GSUxFVEFHKHRhZywgc2xv Y2F0b3IubG9jYXRvciwgc2xvY2F0b3IuZm9ya251bSwgc2Vnbm8pOwogCiAJUmVnaXN0ZXJTeW5j UmVxdWVzdCgmdGFnLCBTWU5DX0ZPUkdFVF9SRVFVRVNULCB0cnVlIC8qIHJldHJ5T25FcnJvciAq LyApOwogfQpAQCAtMTA4MSw1NyArMTA2OSwyNSBAQCBGb3JnZXREYXRhYmFzZVN5bmNSZXF1ZXN0 cyhPaWQgZGJpZCkKIAlSZWdpc3RlclN5bmNSZXF1ZXN0KCZ0YWcsIFNZTkNfRklMVEVSX1JFUVVF U1QsIHRydWUgLyogcmV0cnlPbkVycm9yICovICk7CiB9CiAKLS8qCi0gKiBEcm9wUmVsYXRpb25G aWxlcyAtLSBkcm9wIGZpbGVzIG9mIGFsbCBnaXZlbiByZWxhdGlvbnMKLSAqLwotdm9pZAotRHJv cFJlbGF0aW9uRmlsZXMoUmVsRmlsZUxvY2F0b3IgKmRlbHJlbHMsIGludCBuZGVscmVscywgYm9v bCBpc1JlZG8pCi17Ci0JU01nclJlbGF0aW9uICpzcmVsczsKLQlpbnQJCQlpOwotCi0Jc3JlbHMg PSBwYWxsb2Moc2l6ZW9mKFNNZ3JSZWxhdGlvbikgKiBuZGVscmVscyk7Ci0JZm9yIChpID0gMDsg aSA8IG5kZWxyZWxzOyBpKyspCi0JewotCQlTTWdyUmVsYXRpb24gc3JlbCA9IHNtZ3JvcGVuKGRl bHJlbHNbaV0sIEludmFsaWRCYWNrZW5kSWQpOwotCi0JCWlmIChpc1JlZG8pCi0JCXsKLQkJCUZv cmtOdW1iZXIJZm9yazsKLQotCQkJZm9yIChmb3JrID0gMDsgZm9yayA8PSBNQVhfRk9SS05VTTsg Zm9yaysrKQotCQkJCVhMb2dEcm9wUmVsYXRpb24oZGVscmVsc1tpXSwgZm9yayk7Ci0JCX0KLQkJ c3JlbHNbaV0gPSBzcmVsOwotCX0KLQotCXNtZ3Jkb3VubGlua2FsbChzcmVscywgbmRlbHJlbHMs IGlzUmVkbyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbmRlbHJlbHM7IGkrKykKLQkJc21ncmNsb3Nl KHNyZWxzW2ldKTsKLQlwZnJlZShzcmVscyk7Ci19Ci0KIAogLyoKICAqCV9mZHZlY19yZXNpemUo KSAtLSBSZXNpemUgdGhlIGZvcmsncyBvcGVuIHNlZ21lbnRzIGFycmF5CiAgKi8KIHN0YXRpYyB2 b2lkCi1fZmR2ZWNfcmVzaXplKFNNZ3JSZWxhdGlvbiByZWxuLAotCQkJICBGb3JrTnVtYmVyIGZv cmtudW0sCitfZmR2ZWNfcmVzaXplKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJICBpbnQgbnNl ZykKIHsKIAlpZiAobnNlZyA9PSAwKQogCXsKLQkJaWYgKHJlbG4tPm1kX251bV9vcGVuX3NlZ3Nb Zm9ya251bV0gPiAwKQorCQlpZiAoc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MgPiAwKQogCQl7Ci0J CQlwZnJlZShyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dKTsKLQkJCXJlbG4tPm1kX3NlZ19mZHNb Zm9ya251bV0gPSBOVUxMOworCQkJcGZyZWUoc2ZpbGUtPm1kX3NlZ19mZHMpOworCQkJc2ZpbGUt Pm1kX3NlZ19mZHMgPSBOVUxMOwogCQl9CiAJfQotCWVsc2UgaWYgKHJlbG4tPm1kX251bV9vcGVu X3NlZ3NbZm9ya251bV0gPT0gMCkKKwllbHNlIGlmIChzZmlsZS0+bWRfbnVtX29wZW5fc2VncyA9 PSAwKQogCXsKLQkJcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXSA9CisJCXNmaWxlLT5tZF9zZWdf ZmRzID0KIAkJCU1lbW9yeUNvbnRleHRBbGxvYyhNZEN4dCwgc2l6ZW9mKE1kZmRWZWMpICogbnNl Zyk7CiAJfQogCWVsc2UKQEAgLTExNDIsMTIgKzEwOTgsMTIgQEAgX2ZkdmVjX3Jlc2l6ZShTTWdy UmVsYXRpb24gcmVsbiwKIAkJICogRmlsZUNsb3NlKCksIGFuZCB0aGUgbWVtb3J5IGNvbnRleHQg aW50ZXJuYWxseSB3aWxsIHNvbWV0aW1lcyBhdm9pZAogCQkgKiBkb2luZyBhbiBhY3R1YWwgcmVh bGxvY2F0aW9uLgogCQkgKi8KLQkJcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXSA9Ci0JCQlyZXBh bGxvYyhyZWxuLT5tZF9zZWdfZmRzW2ZvcmtudW1dLAorCQlzZmlsZS0+bWRfc2VnX2ZkcyA9CisJ CQlyZXBhbGxvYyhzZmlsZS0+bWRfc2VnX2ZkcywKIAkJCQkJIHNpemVvZihNZGZkVmVjKSAqIG5z ZWcpOwogCX0KIAotCXJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZm9ya251bV0gPSBuc2VnOworCXNm aWxlLT5tZF9udW1fb3Blbl9zZWdzID0gbnNlZzsKIH0KIAogLyoKQEAgLTExNTUsMTIgKzExMTEs MTIgQEAgX2ZkdmVjX3Jlc2l6ZShTTWdyUmVsYXRpb24gcmVsbiwKICAqIHJldHVybmVkIHN0cmlu ZyBpcyBwYWxsb2MnZC4KICAqLwogc3RhdGljIGNoYXIgKgotX21kZmRfc2VncGF0aChTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBzZWdubykKK19tZGZk X3NlZ3BhdGgoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIHNlZ25vKQogewogCWNo YXIJICAgKnBhdGgsCiAJCQkgICAqZnVsbHBhdGg7CiAKLQlwYXRoID0gcmVscGF0aChyZWxuLT5z bWdyX3Jsb2NhdG9yLCBmb3JrbnVtKTsKKwlwYXRoID0gc21ncmZpbGVwYXRoKHNmaWxlLT5zbWdy X2xvY2F0b3IpOwogCiAJaWYgKHNlZ25vID4gMCkKIAl7CkBAIC0xMTc4LDE0ICsxMTM0LDE0IEBA IF9tZGZkX3NlZ3BhdGgoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxv Y2tOdW1iZXIgc2Vnbm8pCiAgKiBhbmQgbWFrZSBhIE1kZmRWZWMgb2JqZWN0IGZvciBpdC4gIFJl dHVybnMgTlVMTCBvbiBmYWlsdXJlLgogICovCiBzdGF0aWMgTWRmZFZlYyAqCi1fbWRmZF9vcGVu c2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIHNl Z25vLAorX21kZmRfb3BlbnNlZyhTTWdyRmlsZUhhbmRsZSBzZmlsZSwgQmxvY2tOdW1iZXIgc2Vn bm8sCiAJCQkgIGludCBvZmxhZ3MpCiB7CiAJTWRmZFZlYyAgICAqdjsKIAlGaWxlCQlmZDsKIAlj aGFyCSAgICpmdWxscGF0aDsKIAotCWZ1bGxwYXRoID0gX21kZmRfc2VncGF0aChyZWxuLCBmb3Jr bnVtLCBzZWdubyk7CisJZnVsbHBhdGggPSBfbWRmZF9zZWdwYXRoKHNmaWxlLCBzZWdubyk7CiAK IAkvKiBvcGVuIHRoZSBmaWxlICovCiAJZmQgPSBQYXRoTmFtZU9wZW5GaWxlKGZ1bGxwYXRoLCBP X1JEV1IgfCBQR19CSU5BUlkgfCBvZmxhZ3MpOwpAQCAtMTE5OSwxNiArMTE1NSwxNiBAQCBfbWRm ZF9vcGVuc2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVt YmVyIHNlZ25vLAogCSAqIFNlZ21lbnRzIGFyZSBhbHdheXMgb3BlbmVkIGluIG9yZGVyIGZyb20g bG93ZXN0IHRvIGhpZ2hlc3QsIHNvIHdlIG11c3QKIAkgKiBiZSBhZGRpbmcgYSBuZXcgb25lIGF0 IHRoZSBlbmQuCiAJICovCi0JQXNzZXJ0KHNlZ25vID09IHJlbG4tPm1kX251bV9vcGVuX3NlZ3Nb Zm9ya251bV0pOworCUFzc2VydChzZWdubyA9PSBzZmlsZS0+bWRfbnVtX29wZW5fc2Vncyk7CiAK LQlfZmR2ZWNfcmVzaXplKHJlbG4sIGZvcmtudW0sIHNlZ25vICsgMSk7CisJX2ZkdmVjX3Jlc2l6 ZShzZmlsZSwgc2Vnbm8gKyAxKTsKIAogCS8qIGZpbGwgdGhlIGVudHJ5ICovCi0JdiA9ICZyZWxu LT5tZF9zZWdfZmRzW2ZvcmtudW1dW3NlZ25vXTsKKwl2ID0gJnNmaWxlLT5tZF9zZWdfZmRzW3Nl Z25vXTsKIAl2LT5tZGZkX3ZmZCA9IGZkOwogCXYtPm1kZmRfc2Vnbm8gPSBzZWdubzsKIAotCUFz c2VydChfbWRuYmxvY2tzKHJlbG4sIGZvcmtudW0sIHYpIDw9ICgoQmxvY2tOdW1iZXIpIFJFTFNF R19TSVpFKSk7CisJQXNzZXJ0KF9tZG5ibG9ja3Moc2ZpbGUsIHYpIDw9ICgoQmxvY2tOdW1iZXIp IFJFTFNFR19TSVpFKSk7CiAKIAkvKiBhbGwgZG9uZSAqLwogCXJldHVybiB2OwpAQCAtMTIyMyw3 ICsxMTc5LDcgQEAgX21kZmRfb3BlbnNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBm b3JrbnVtLCBCbG9ja051bWJlciBzZWdubywKICAqIEVYVEVOU0lPTl9DUkVBVEUgY2FzZS4KICAq Lwogc3RhdGljIE1kZmRWZWMgKgotX21kZmRfZ2V0c2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsa25vLAorX21kZmRfZ2V0c2VnKFNNZ3JGaWxl SGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibGtubywKIAkJCSBib29sIHNraXBGc3luYywgaW50 IGJlaGF2aW9yKQogewogCU1kZmRWZWMgICAgKnY7CkBAIC0xMjM4LDkgKzExOTQsOSBAQCBfbWRm ZF9nZXRzZWcoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1i ZXIgYmxrbm8sCiAJdGFyZ2V0c2VnID0gYmxrbm8gLyAoKEJsb2NrTnVtYmVyKSBSRUxTRUdfU0la RSk7CiAKIAkvKiBpZiBhbiBleGlzdGluZyBhbmQgb3BlbmVkIHNlZ21lbnQsIHdlJ3JlIGRvbmUg Ki8KLQlpZiAodGFyZ2V0c2VnIDwgcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSkKKwlp ZiAodGFyZ2V0c2VnIDwgc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MpCiAJewotCQl2ID0gJnJlbG4t Pm1kX3NlZ19mZHNbZm9ya251bV1bdGFyZ2V0c2VnXTsKKwkJdiA9ICZzZmlsZS0+bWRfc2VnX2Zk c1t0YXJnZXRzZWddOwogCQlyZXR1cm4gdjsKIAl9CiAKQEAgLTEyNTUsMTkgKzEyMTEsMTkgQEAg X21kZmRfZ2V0c2VnKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2Nr TnVtYmVyIGJsa25vLAogCSAqICdiZWhhdmlvcicpLiBTdGFydCB3aXRoIGVpdGhlciB0aGUgbGFz dCBvcGVuZWQsIG9yIHRoZSBmaXJzdCBzZWdtZW50IGlmCiAJICogbm9uZSB3YXMgb3BlbmVkIGJl Zm9yZS4KIAkgKi8KLQlpZiAocmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXSA+IDApCi0J CXYgPSAmcmVsbi0+bWRfc2VnX2Zkc1tmb3JrbnVtXVtyZWxuLT5tZF9udW1fb3Blbl9zZWdzW2Zv cmtudW1dIC0gMV07CisJaWYgKHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzID4gMCkKKwkJdiA9ICZz ZmlsZS0+bWRfc2VnX2Zkc1tzZmlsZS0+bWRfbnVtX29wZW5fc2VncyAtIDFdOwogCWVsc2UKIAl7 Ci0JCXYgPSBtZG9wZW5mb3JrKHJlbG4sIGZvcmtudW0sIGJlaGF2aW9yKTsKKwkJdiA9IG1kb3Bl bmZvcmsoc2ZpbGUsIGJlaGF2aW9yKTsKIAkJaWYgKCF2KQogCQkJcmV0dXJuIE5VTEw7CQkvKiBp ZiBiZWhhdmlvciAmIEVYVEVOU0lPTl9SRVRVUk5fTlVMTCAqLwogCX0KIAotCWZvciAobmV4dHNl Z25vID0gcmVsbi0+bWRfbnVtX29wZW5fc2Vnc1tmb3JrbnVtXTsKKwlmb3IgKG5leHRzZWdubyA9 IHNmaWxlLT5tZF9udW1fb3Blbl9zZWdzOwogCQkgbmV4dHNlZ25vIDw9IHRhcmdldHNlZzsgbmV4 dHNlZ25vKyspCiAJewotCQlCbG9ja051bWJlciBuYmxvY2tzID0gX21kbmJsb2NrcyhyZWxuLCBm b3JrbnVtLCB2KTsKKwkJQmxvY2tOdW1iZXIgbmJsb2NrcyA9IF9tZG5ibG9ja3Moc2ZpbGUsIHYp OwogCQlpbnQJCQlmbGFncyA9IDA7CiAKIAkJQXNzZXJ0KG5leHRzZWdubyA9PSB2LT5tZGZkX3Nl Z25vICsgMSk7CkBAIC0xMjk2LDcgKzEyNTIsNyBAQCBfbWRmZF9nZXRzZWcoU01nclJlbGF0aW9u IHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQl7CiAJCQkJ Y2hhcgkgICAqemVyb2J1ZiA9IHBhbGxvYzAoQkxDS1NaKTsKIAotCQkJCW1kZXh0ZW5kKHJlbG4s IGZvcmtudW0sCisJCQkJbWRleHRlbmQoc2ZpbGUsCiAJCQkJCQkgbmV4dHNlZ25vICogKChCbG9j a051bWJlcikgUkVMU0VHX1NJWkUpIC0gMSwKIAkJCQkJCSB6ZXJvYnVmLCBza2lwRnN5bmMpOwog CQkJCXBmcmVlKHplcm9idWYpOwpAQCAtMTMyNywxMSArMTI4MywxMSBAQCBfbWRmZF9nZXRzZWco U01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxrbm8s CiAJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKIAkJ CQkJIGVycm1zZygiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCIgKHRhcmdldCBibG9jayAldSk6 IHByZXZpb3VzIHNlZ21lbnQgaXMgb25seSAldSBibG9ja3MiLAotCQkJCQkJCV9tZGZkX3NlZ3Bh dGgocmVsbiwgZm9ya251bSwgbmV4dHNlZ25vKSwKKwkJCQkJCQlfbWRmZF9zZWdwYXRoKHNmaWxl LCBuZXh0c2Vnbm8pLAogCQkJCQkJCWJsa25vLCBuYmxvY2tzKSkpOwogCQl9CiAKLQkJdiA9IF9t ZGZkX29wZW5zZWcocmVsbiwgZm9ya251bSwgbmV4dHNlZ25vLCBmbGFncyk7CisJCXYgPSBfbWRm ZF9vcGVuc2VnKHNmaWxlLCBuZXh0c2Vnbm8sIGZsYWdzKTsKIAogCQlpZiAodiA9PSBOVUxMKQog CQl7CkBAIC0xMzQxLDcgKzEyOTcsNyBAQCBfbWRmZF9nZXRzZWcoU01nclJlbGF0aW9uIHJlbG4s IEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQllcmVwb3J0KEVSUk9S LAogCQkJCQkoZXJyY29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKIAkJCQkJIGVycm1zZygiY291bGQg bm90IG9wZW4gZmlsZSBcIiVzXCIgKHRhcmdldCBibG9jayAldSk6ICVtIiwKLQkJCQkJCQlfbWRm ZF9zZWdwYXRoKHJlbG4sIGZvcmtudW0sIG5leHRzZWdubyksCisJCQkJCQkJX21kZmRfc2VncGF0 aChzZmlsZSwgbmV4dHNlZ25vKSwKIAkJCQkJCQlibGtubykpKTsKIAkJfQogCX0KQEAgLTEzNTMs NyArMTMwOSw3IEBAIF9tZGZkX2dldHNlZyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBm b3JrbnVtLCBCbG9ja051bWJlciBibGtubywKICAqIEdldCBudW1iZXIgb2YgYmxvY2tzIHByZXNl bnQgaW4gYSBzaW5nbGUgZGlzayBmaWxlCiAgKi8KIHN0YXRpYyBCbG9ja051bWJlcgotX21kbmJs b2NrcyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBNZGZkVmVjICpzZWcp CitfbWRuYmxvY2tzKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBNZGZkVmVjICpzZWcpCiB7CiAJb2Zm X3QJCWxlbjsKIApAQCAtMTM3NiwxNiArMTMzMiwxNiBAQCBfbWRuYmxvY2tzKFNNZ3JSZWxhdGlv biByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIE1kZmRWZWMgKnNlZykKIGludAogbWRzeW5jZmls ZXRhZyhjb25zdCBGaWxlVGFnICpmdGFnLCBjaGFyICpwYXRoKQogewotCVNNZ3JSZWxhdGlvbiBy ZWxuID0gc21ncm9wZW4oZnRhZy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5kSWQpOworCVNNZ3JG aWxlSGFuZGxlIHNmaWxlID0gc21ncm9wZW4oZnRhZy0+cmxvY2F0b3IsIEludmFsaWRCYWNrZW5k SWQsIGZ0YWctPmZvcmtudW0pOwogCUZpbGUJCWZpbGU7CiAJYm9vbAkJbmVlZF90b19jbG9zZTsK IAlpbnQJCQlyZXN1bHQsCiAJCQkJc2F2ZV9lcnJubzsKIAogCS8qIFNlZSBpZiB3ZSBhbHJlYWR5 IGhhdmUgdGhlIGZpbGUgb3Blbiwgb3IgbmVlZCB0byBvcGVuIGl0LiAqLwotCWlmIChmdGFnLT5z ZWdubyA8IHJlbG4tPm1kX251bV9vcGVuX3NlZ3NbZnRhZy0+Zm9ya251bV0pCisJaWYgKGZ0YWct PnNlZ25vIDwgc2ZpbGUtPm1kX251bV9vcGVuX3NlZ3MpCiAJewotCQlmaWxlID0gcmVsbi0+bWRf c2VnX2Zkc1tmdGFnLT5mb3JrbnVtXVtmdGFnLT5zZWdub10ubWRmZF92ZmQ7CisJCWZpbGUgPSBz ZmlsZS0+bWRfc2VnX2Zkc1tmdGFnLT5zZWdub10ubWRmZF92ZmQ7CiAJCXN0cmxjcHkocGF0aCwg RmlsZVBhdGhOYW1lKGZpbGUpLCBNQVhQR1BBVEgpOwogCQluZWVkX3RvX2Nsb3NlID0gZmFsc2U7 CiAJfQpAQCAtMTM5Myw3ICsxMzQ5LDcgQEAgbWRzeW5jZmlsZXRhZyhjb25zdCBGaWxlVGFnICpm dGFnLCBjaGFyICpwYXRoKQogCXsKIAkJY2hhcgkgICAqcDsKIAotCQlwID0gX21kZmRfc2VncGF0 aChyZWxuLCBmdGFnLT5mb3JrbnVtLCBmdGFnLT5zZWdubyk7CisJCXAgPSBfbWRmZF9zZWdwYXRo KHNmaWxlLCBmdGFnLT5zZWdubyk7CiAJCXN0cmxjcHkocGF0aCwgcCwgTUFYUEdQQVRIKTsKIAkJ cGZyZWUocCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uvc21nci9zbWdyLmMg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jCmluZGV4IGIyYmQ3NDlkNzcwLi40YzU2 YzEzNGQzMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zbWdyL3NtZ3IuYworKysg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL3NtZ3Ivc21nci5jCkBAIC00MSwyNyArNDEsMjQgQEAgdHlw ZWRlZiBzdHJ1Y3QgZl9zbWdyCiB7CiAJdm9pZAkJKCpzbWdyX2luaXQpICh2b2lkKTsJLyogbWF5 IGJlIE5VTEwgKi8KIAl2b2lkCQkoKnNtZ3Jfc2h1dGRvd24pICh2b2lkKTsJLyogbWF5IGJlIE5V TEwgKi8KLQl2b2lkCQkoKnNtZ3Jfb3BlbikgKFNNZ3JSZWxhdGlvbiByZWxuKTsKLQl2b2lkCQko KnNtZ3JfY2xvc2UpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKLQl2 b2lkCQkoKnNtZ3JfY3JlYXRlKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSwKLQkJCQkJCQkJYm9vbCBpc1JlZG8pOwotCWJvb2wJCSgqc21ncl9leGlzdHMpIChTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKTsKLQl2b2lkCQkoKnNtZ3JfdW5saW5rKSAo UmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJ CQkJCWJvb2wgaXNSZWRvKTsKLQl2b2lkCQkoKnNtZ3JfZXh0ZW5kKSAoU01nclJlbGF0aW9uIHJl bG4sIEZvcmtOdW1iZXIgZm9ya251bSwKKwl2b2lkCQkoKnNtZ3Jfb3BlbikgKFNNZ3JGaWxlSGFu ZGxlIHNmaWxlKTsKKwl2b2lkCQkoKnNtZ3JfY2xvc2UpIChTTWdyRmlsZUhhbmRsZSBzZmlsZSk7 CisJdm9pZAkJKCpzbWdyX2NyZWF0ZSkgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBib29sIGlzUmVk byk7CisJYm9vbAkJKCpzbWdyX2V4aXN0cykgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKKwl2b2lk CQkoKnNtZ3JfdW5saW5rKSAoU01nckZpbGVMb2NhdG9yIHNsb2NhdG9yLCBib29sIGlzUmVkbyk7 CisJdm9pZAkJKCpzbWdyX2V4dGVuZCkgKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLAogCQkJCQkJCQlC bG9ja051bWJlciBibG9ja251bSwgY2hhciAqYnVmZmVyLCBib29sIHNraXBGc3luYyk7Ci0JYm9v bAkJKCpzbWdyX3ByZWZldGNoKSAoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251 bSwKKwlib29sCQkoKnNtZ3JfcHJlZmV0Y2gpIChTTWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJ CQkJICBCbG9ja051bWJlciBibG9ja251bSk7Ci0Jdm9pZAkJKCpzbWdyX3JlYWQpIChTTWdyUmVs YXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorCXZvaWQJCSgqc21ncl9yZWFkKSAoU01n ckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCQkJICBCbG9ja051bWJlciBibG9ja251bSwgY2hhciAq YnVmZmVyKTsKLQl2b2lkCQkoKnNtZ3Jfd3JpdGUpIChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtLAorCXZvaWQJCSgqc21ncl93cml0ZSkgKFNNZ3JGaWxlSGFuZGxlIHNmaWxl LAogCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBjaGFyICpidWZmZXIsIGJvb2wgc2tp cEZzeW5jKTsKLQl2b2lkCQkoKnNtZ3Jfd3JpdGViYWNrKSAoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwKKwl2b2lkCQkoKnNtZ3Jfd3JpdGViYWNrKSAoU01nckZpbGVIYW5k bGUgc2ZpbGUsCiAJCQkJCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBCbG9ja051bWJlciBu YmxvY2tzKTsKLQlCbG9ja051bWJlciAoKnNtZ3JfbmJsb2NrcykgKFNNZ3JSZWxhdGlvbiByZWxu LCBGb3JrTnVtYmVyIGZvcmtudW0pOwotCXZvaWQJCSgqc21ncl90cnVuY2F0ZSkgKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCQkJCSAgQmxvY2tOdW1iZXIgbmJs b2Nrcyk7Ci0Jdm9pZAkJKCpzbWdyX2ltbWVkc3luYykgKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3Jr TnVtYmVyIGZvcmtudW0pOworCUJsb2NrTnVtYmVyICgqc21ncl9uYmxvY2tzKSAoU01nckZpbGVI YW5kbGUgc2ZpbGUpOworCXZvaWQJCSgqc21ncl90cnVuY2F0ZSkgKFNNZ3JGaWxlSGFuZGxlIHNm aWxlLCBCbG9ja051bWJlciBuYmxvY2tzKTsKKwl2b2lkCQkoKnNtZ3JfaW1tZWRzeW5jKSAoU01n ckZpbGVIYW5kbGUgc2ZpbGUpOwogfSBmX3NtZ3I7CiAKIHN0YXRpYyBjb25zdCBmX3NtZ3Igc21n cnN3W10gPSB7CkBAIC04OCwxMiArODUsMTIgQEAgc3RhdGljIGNvbnN0IGZfc21nciBzbWdyc3db XSA9IHsKIHN0YXRpYyBjb25zdCBpbnQgTlNtZ3IgPSBsZW5ndGhvZihzbWdyc3cpOwogCiAvKgot ICogRWFjaCBiYWNrZW5kIGhhcyBhIGhhc2h0YWJsZSB0aGF0IHN0b3JlcyBhbGwgZXh0YW50IFNN Z3JSZWxhdGlvbiBvYmplY3RzLgotICogSW4gYWRkaXRpb24sICJ1bm93bmVkIiBTTWdyUmVsYXRp b24gb2JqZWN0cyBhcmUgY2hhaW5lZCB0b2dldGhlciBpbiBhIGxpc3QuCisgKiBFYWNoIGJhY2tl bmQgaGFzIGEgaGFzaHRhYmxlIHRoYXQgc3RvcmVzIGFsbCBleHRhbnQgU01nckZpbGVEYXRhIG9i amVjdHMuCisgKiBJbiBhZGRpdGlvbiwgInVub3duZWQiIFNNZ3JGaWxlIG9iamVjdHMgYXJlIGNo YWluZWQgdG9nZXRoZXIgaW4gYSBsaXN0LgogICovCi1zdGF0aWMgSFRBQiAqU01nclJlbGF0aW9u SGFzaCA9IE5VTEw7CitzdGF0aWMgSFRBQiAqU01nckZpbGVIYXNoID0gTlVMTDsKIAotc3RhdGlj IGRsaXN0X2hlYWQgdW5vd25lZF9yZWxuczsKK3N0YXRpYyBkbGlzdF9oZWFkIHVub3duZWRfc2Zp bGVzOwogCiAvKiBsb2NhbCBmdW5jdGlvbiBwcm90b3R5cGVzICovCiBzdGF0aWMgdm9pZCBzbWdy c2h1dGRvd24oaW50IGNvZGUsIERhdHVtIGFyZyk7CkBAIC0xNDIsNTAgKzEzOSw1MiBAQCBzbWdy c2h1dGRvd24oaW50IGNvZGUsIERhdHVtIGFyZykKICAqCiAgKgkJVGhpcyBkb2VzIG5vdCBhdHRl bXB0IHRvIGFjdHVhbGx5IG9wZW4gdGhlIHVuZGVybHlpbmcgZmlsZS4KICAqLwotU01nclJlbGF0 aW9uCi1zbWdyb3BlbihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQp CitTTWdyRmlsZUhhbmRsZQorc21ncm9wZW4oUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJhY2tl bmRJZCBiYWNrZW5kLCBGb3JrTnVtYmVyIGZvcmtOdW0pCiB7Ci0JUmVsRmlsZUxvY2F0b3JCYWNr ZW5kIGJybG9jYXRvcjsKLQlTTWdyUmVsYXRpb24gcmVsbjsKKwlTTWdyRmlsZUxvY2F0b3Igc2xv Y2F0b3I7CisJU01nckZpbGVIYW5kbGUgc2ZpbGU7CiAJYm9vbAkJZm91bmQ7CiAKLQlpZiAoU01n clJlbGF0aW9uSGFzaCA9PSBOVUxMKQorCWlmIChTTWdyRmlsZUhhc2ggPT0gTlVMTCkKIAl7CiAJ CS8qIEZpcnN0IHRpbWUgdGhyb3VnaDogaW5pdGlhbGl6ZSB0aGUgaGFzaCB0YWJsZSAqLwogCQlI QVNIQ1RMCQljdGw7CiAKLQkJY3RsLmtleXNpemUgPSBzaXplb2YoUmVsRmlsZUxvY2F0b3JCYWNr ZW5kKTsKLQkJY3RsLmVudHJ5c2l6ZSA9IHNpemVvZihTTWdyUmVsYXRpb25EYXRhKTsKLQkJU01n clJlbGF0aW9uSGFzaCA9IGhhc2hfY3JlYXRlKCJzbWdyIHJlbGF0aW9uIHRhYmxlIiwgNDAwLAor CQljdGwua2V5c2l6ZSA9IHNpemVvZihTTWdyRmlsZUxvY2F0b3IpOworCQljdGwuZW50cnlzaXpl ID0gc2l6ZW9mKFNNZ3JGaWxlRGF0YSk7CisJCVNNZ3JGaWxlSGFzaCA9IGhhc2hfY3JlYXRlKCJz bWdyIHJlbGF0aW9uIHRhYmxlIiwgNDAwLAogCQkJCQkJCQkJICAgJmN0bCwgSEFTSF9FTEVNIHwg SEFTSF9CTE9CUyk7Ci0JCWRsaXN0X2luaXQoJnVub3duZWRfcmVsbnMpOworCQlkbGlzdF9pbml0 KCZ1bm93bmVkX3NmaWxlcyk7CiAJfQogCiAJLyogTG9vayB1cCBvciBjcmVhdGUgYW4gZW50cnkg Ki8KLQlicmxvY2F0b3IubG9jYXRvciA9IHJsb2NhdG9yOwotCWJybG9jYXRvci5iYWNrZW5kID0g YmFja2VuZDsKLQlyZWxuID0gKFNNZ3JSZWxhdGlvbikgaGFzaF9zZWFyY2goU01nclJlbGF0aW9u SGFzaCwKLQkJCQkJCQkJCSAgJmJybG9jYXRvciwKLQkJCQkJCQkJCSAgSEFTSF9FTlRFUiwgJmZv dW5kKTsKKworCXNsb2NhdG9yLmxvY2F0b3IgPSBybG9jYXRvcjsKKwlzbG9jYXRvci5iYWNrZW5k ID0gYmFja2VuZDsKKwlzbG9jYXRvci5mb3JrbnVtID0gZm9ya051bTsKKwlzZmlsZSA9IChTTWdy RmlsZUhhbmRsZSkgaGFzaF9zZWFyY2goU01nckZpbGVIYXNoLAorCQkJCQkJCQkJCSAmc2xvY2F0 b3IsCisJCQkJCQkJCQkJIEhBU0hfRU5URVIsICZmb3VuZCk7CisKIAogCS8qIEluaXRpYWxpemUg aXQgaWYgbm90IHByZXNlbnQgYmVmb3JlICovCiAJaWYgKCFmb3VuZCkKIAl7CiAJCS8qIGhhc2hf c2VhcmNoIGFscmVhZHkgZmlsbGVkIGluIHRoZSBsb29rdXAga2V5ICovCi0JCXJlbG4tPnNtZ3Jf b3duZXIgPSBOVUxMOwotCQlyZWxuLT5zbWdyX3RhcmdibG9jayA9IEludmFsaWRCbG9ja051bWJl cjsKLQkJZm9yIChpbnQgaSA9IDA7IGkgPD0gTUFYX0ZPUktOVU07ICsraSkKLQkJCXJlbG4tPnNt Z3JfY2FjaGVkX25ibG9ja3NbaV0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCXJlbG4tPnNtZ3Jf d2hpY2ggPSAwOwkvKiB3ZSBvbmx5IGhhdmUgbWQuYyBhdCBwcmVzZW50ICovCisJCXNmaWxlLT5z bWdyX293bmVyID0gTlVMTDsKKwkJc2ZpbGUtPnNtZ3JfdGFyZ2Jsb2NrID0gSW52YWxpZEJsb2Nr TnVtYmVyOworCQlzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051bWJl cjsKKwkJc2ZpbGUtPnNtZ3Jfd2hpY2ggPSAwOwkvKiB3ZSBvbmx5IGhhdmUgbWQuYyBhdCBwcmVz ZW50ICovCiAKIAkJLyogaW1wbGVtZW50YXRpb24tc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKi8K LQkJc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3Jfb3BlbihyZWxuKTsKKwkJc21ncnN3W3Nm aWxlLT5zbWdyX3doaWNoXS5zbWdyX29wZW4oc2ZpbGUpOwogCiAJCS8qIGl0IGhhcyBubyBvd25l ciB5ZXQgKi8KLQkJZGxpc3RfcHVzaF90YWlsKCZ1bm93bmVkX3JlbG5zLCAmcmVsbi0+bm9kZSk7 CisJCWRsaXN0X3B1c2hfdGFpbCgmdW5vd25lZF9zZmlsZXMsICZzZmlsZS0+bm9kZSk7CiAJfQog Ci0JcmV0dXJuIHJlbG47CisJcmV0dXJuIHNmaWxlOwogfQogCiAvKgpAQCAtMTk1LDcgKzE5NCw3 IEBAIHNtZ3JvcGVuKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCkK ICAqIHRoZSBvbmx5IHN1Y2ggb3duZXJzIGV4aXN0IGluIHRoZSByZWxjYWNoZS4KICAqLwogdm9p ZAotc21ncnNldG93bmVyKFNNZ3JSZWxhdGlvbiAqb3duZXIsIFNNZ3JSZWxhdGlvbiByZWxuKQor c21ncnNldG93bmVyKFNNZ3JGaWxlSGFuZGxlICpvd25lciwgU01nckZpbGVIYW5kbGUgc2ZpbGUp CiB7CiAJLyogV2UgZG9uJ3Qgc3VwcG9ydCAiZGlzb3duaW5nIiBhbiBTTWdyUmVsYXRpb24gaGVy ZSwgdXNlIHNtZ3JjbGVhcm93bmVyICovCiAJQXNzZXJ0KG93bmVyICE9IE5VTEwpOwpAQCAtMjA2 LDY4ICsyMDUsNjcgQEAgc21ncnNldG93bmVyKFNNZ3JSZWxhdGlvbiAqb3duZXIsIFNNZ3JSZWxh dGlvbiByZWxuKQogCSAqIGRlcGVuZGluZyBvbiB0aGUgb3JkZXIgb2YgcHJvY2Vzc2luZy4gIEl0 J3Mgb2sgdG8gY2xvc2UgdGhlIG9sZAogCSAqIHJlbGNhY2hlIGVudHJ5IGVhcmx5IGluIHRoYXQg Y2FzZS4pCiAJICoKLQkgKiBJZiB0aGVyZSBpc24ndCBhbiBvbGQgb3duZXIsIHRoZW4gdGhlIHJl bG4gc2hvdWxkIGJlIGluIHRoZSB1bm93bmVkCisJICogSWYgdGhlcmUgaXNuJ3QgYW4gb2xkIG93 bmVyLCB0aGVuIHRoZSBzZmlsZSBzaG91bGQgYmUgaW4gdGhlIHVub3duZWQKIAkgKiBsaXN0LCBh bmQgd2UgbmVlZCB0byByZW1vdmUgaXQuCiAJICovCi0JaWYgKHJlbG4tPnNtZ3Jfb3duZXIpCi0J CSoocmVsbi0+c21ncl9vd25lcikgPSBOVUxMOworCWlmIChzZmlsZS0+c21ncl9vd25lcikKKwkJ KihzZmlsZS0+c21ncl9vd25lcikgPSBOVUxMOwogCWVsc2UKLQkJZGxpc3RfZGVsZXRlKCZyZWxu LT5ub2RlKTsKKwkJZGxpc3RfZGVsZXRlKCZzZmlsZS0+bm9kZSk7CiAKIAkvKiBOb3cgZXN0YWJs aXNoIHRoZSBvd25lcnNoaXAgcmVsYXRpb25zaGlwLiAqLwotCXJlbG4tPnNtZ3Jfb3duZXIgPSBv d25lcjsKLQkqb3duZXIgPSByZWxuOworCXNmaWxlLT5zbWdyX293bmVyID0gb3duZXI7CisJKm93 bmVyID0gc2ZpbGU7CiB9CiAKIC8qCi0gKiBzbWdyY2xlYXJvd25lcigpIC0tIFJlbW92ZSBsb25n LWxpdmVkIHJlZmVyZW5jZSB0byBhbiBTTWdyUmVsYXRpb24gb2JqZWN0CisgKiBzbWdyY2xlYXJv d25lcigpIC0tIFJlbW92ZSBsb25nLWxpdmVkIHJlZmVyZW5jZSB0byBhbiBTTWdyRmlsZUhhbmRs ZSBvYmplY3QKICAqCQkJCQkgICBpZiBvbmUgZXhpc3RzCiAgKi8KIHZvaWQKLXNtZ3JjbGVhcm93 bmVyKFNNZ3JSZWxhdGlvbiAqb3duZXIsIFNNZ3JSZWxhdGlvbiByZWxuKQorc21ncmNsZWFyb3du ZXIoU01nckZpbGVIYW5kbGUgKm93bmVyLCBTTWdyRmlsZUhhbmRsZSBzZmlsZSkKIHsKIAkvKiBE byBub3RoaW5nIGlmIHRoZSBTTWdyUmVsYXRpb24gb2JqZWN0IGlzIG5vdCBvd25lZCBieSB0aGUg b3duZXIgKi8KLQlpZiAocmVsbi0+c21ncl9vd25lciAhPSBvd25lcikKKwlpZiAoc2ZpbGUtPnNt Z3Jfb3duZXIgIT0gb3duZXIpCiAJCXJldHVybjsKIAogCS8qIHVuc2V0IHRoZSBvd25lcidzIHJl ZmVyZW5jZSAqLwogCSpvd25lciA9IE5VTEw7CiAKIAkvKiB1bnNldCBvdXIgcmVmZXJlbmNlIHRv IHRoZSBvd25lciAqLwotCXJlbG4tPnNtZ3Jfb3duZXIgPSBOVUxMOworCXNmaWxlLT5zbWdyX293 bmVyID0gTlVMTDsKIAogCS8qIGFkZCB0byBsaXN0IG9mIHVub3duZWQgcmVsYXRpb25zICovCi0J ZGxpc3RfcHVzaF90YWlsKCZ1bm93bmVkX3JlbG5zLCAmcmVsbi0+bm9kZSk7CisJZGxpc3RfcHVz aF90YWlsKCZ1bm93bmVkX3NmaWxlcywgJnNmaWxlLT5ub2RlKTsKIH0KIAogLyoKLSAqCXNtZ3Jl eGlzdHMoKSAtLSBEb2VzIHRoZSB1bmRlcmx5aW5nIGZpbGUgZm9yIGEgZm9yayBleGlzdD8KKyAq CXNtZ3JleGlzdHMoKSAtLSBEb2VzIHRoZSB1bmRlcmx5aW5nIGZpbGUgZXhpc3Q/CiAgKi8KIGJv b2wKLXNtZ3JleGlzdHMoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSkKK3Nt Z3JleGlzdHMoU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7Ci0JcmV0dXJuIHNtZ3Jzd1tyZWxuLT5z bWdyX3doaWNoXS5zbWdyX2V4aXN0cyhyZWxuLCBmb3JrbnVtKTsKKwlyZXR1cm4gc21ncnN3W3Nm aWxlLT5zbWdyX3doaWNoXS5zbWdyX2V4aXN0cyhzZmlsZSk7CiB9CiAKIC8qCi0gKglzbWdyY2xv c2UoKSAtLSBDbG9zZSBhbmQgZGVsZXRlIGFuIFNNZ3JSZWxhdGlvbiBvYmplY3QuCisgKglzbWdy Y2xvc2UoKSAtLSBDbG9zZSBhbmQgZGVsZXRlIGFuIFNNZ3JGaWxlIG9iamVjdC4KICAqLwogdm9p ZAotc21ncmNsb3NlKFNNZ3JSZWxhdGlvbiByZWxuKQorc21ncmNsb3NlKFNNZ3JGaWxlSGFuZGxl IHNmaWxlKQogewotCVNNZ3JSZWxhdGlvbiAqb3duZXI7Ci0JRm9ya051bWJlcglmb3JrbnVtOwor CVNNZ3JGaWxlSGFuZGxlICpvd25lcjsKIAotCWZvciAoZm9ya251bSA9IDA7IGZvcmtudW0gPD0g TUFYX0ZPUktOVU07IGZvcmtudW0rKykKLQkJc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3Jf Y2xvc2UocmVsbiwgZm9ya251bSk7CisJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX2Ns b3NlKHNmaWxlKTsKIAotCW93bmVyID0gcmVsbi0+c21ncl9vd25lcjsKKwlvd25lciA9IHNmaWxl LT5zbWdyX293bmVyOwogCiAJaWYgKCFvd25lcikKLQkJZGxpc3RfZGVsZXRlKCZyZWxuLT5ub2Rl KTsKKwkJZGxpc3RfZGVsZXRlKCZzZmlsZS0+bm9kZSk7CiAKLQlpZiAoaGFzaF9zZWFyY2goU01n clJlbGF0aW9uSGFzaCwKLQkJCQkJJihyZWxuLT5zbWdyX3Jsb2NhdG9yKSwKKworCWlmIChoYXNo X3NlYXJjaChTTWdyRmlsZUhhc2gsCisJCQkJCSYoc2ZpbGUtPnNtZ3JfbG9jYXRvciksCiAJCQkJ CUhBU0hfUkVNT1ZFLCBOVUxMKSA9PSBOVUxMKQogCQllbG9nKEVSUk9SLCAiU01nclJlbGF0aW9u IGhhc2h0YWJsZSBjb3JydXB0ZWQiKTsKIApAQCAtMjg0LDE0ICsyODIsMTEgQEAgc21ncmNsb3Nl KFNNZ3JSZWxhdGlvbiByZWxuKQogICoKICAqCVRoZSBvYmplY3QgcmVtYWlucyB2YWxpZC4KICAq Lwotdm9pZAotc21ncnJlbGVhc2UoU01nclJlbGF0aW9uIHJlbG4pCitzdGF0aWMgdm9pZAorc21n cnJlbGVhc2UoU01nckZpbGVIYW5kbGUgc2ZpbGUpCiB7Ci0JZm9yIChGb3JrTnVtYmVyIGZvcmtu dW0gPSAwOyBmb3JrbnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrbnVtKyspCi0JewotCQlzbWdyc3db cmVsbi0+c21ncl93aGljaF0uc21ncl9jbG9zZShyZWxuLCBmb3JrbnVtKTsKLQkJcmVsbi0+c21n cl9jYWNoZWRfbmJsb2Nrc1tmb3JrbnVtXSA9IEludmFsaWRCbG9ja051bWJlcjsKLQl9CisJc21n cnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX2Nsb3NlKHNmaWxlKTsKKwlzZmlsZS0+c21ncl9j YWNoZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051bWJlcjsKIH0KIAogLyoKQEAgLTMwMywxNiAr Mjk4LDE2IEBAIHZvaWQKIHNtZ3JyZWxlYXNlYWxsKHZvaWQpCiB7CiAJSEFTSF9TRVFfU1RBVFVT IHN0YXR1czsKLQlTTWdyUmVsYXRpb24gcmVsbjsKKwlTTWdyRmlsZUhhbmRsZSBzZmlsZTsKIAog CS8qIE5vdGhpbmcgdG8gZG8gaWYgaGFzaHRhYmxlIG5vdCBzZXQgdXAgKi8KLQlpZiAoU01nclJl bGF0aW9uSGFzaCA9PSBOVUxMKQorCWlmIChTTWdyRmlsZUhhc2ggPT0gTlVMTCkKIAkJcmV0dXJu OwogCi0JaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCBTTWdyUmVsYXRpb25IYXNoKTsKKwloYXNoX3Nl cV9pbml0KCZzdGF0dXMsIFNNZ3JGaWxlSGFzaCk7CiAKLQl3aGlsZSAoKHJlbG4gPSAoU01nclJl bGF0aW9uKSBoYXNoX3NlcV9zZWFyY2goJnN0YXR1cykpICE9IE5VTEwpCi0JCXNtZ3JyZWxlYXNl KHJlbG4pOworCXdoaWxlICgoc2ZpbGUgPSAoU01nckZpbGVIYW5kbGUpIGhhc2hfc2VxX3NlYXJj aCgmc3RhdHVzKSkgIT0gTlVMTCkKKwkJc21ncnJlbGVhc2Uoc2ZpbGUpOwogfQogCiAvKgpAQCAt MzIyLDE2ICszMTcsMTYgQEAgdm9pZAogc21ncmNsb3NlYWxsKHZvaWQpCiB7CiAJSEFTSF9TRVFf U1RBVFVTIHN0YXR1czsKLQlTTWdyUmVsYXRpb24gcmVsbjsKKwlTTWdyRmlsZUhhbmRsZSBzZmls ZTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgaGFzaHRhYmxlIG5vdCBzZXQgdXAgKi8KLQlpZiAo U01nclJlbGF0aW9uSGFzaCA9PSBOVUxMKQorCWlmIChTTWdyRmlsZUhhc2ggPT0gTlVMTCkKIAkJ cmV0dXJuOwogCi0JaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCBTTWdyUmVsYXRpb25IYXNoKTsKKwlo YXNoX3NlcV9pbml0KCZzdGF0dXMsIFNNZ3JGaWxlSGFzaCk7CiAKLQl3aGlsZSAoKHJlbG4gPSAo U01nclJlbGF0aW9uKSBoYXNoX3NlcV9zZWFyY2goJnN0YXR1cykpICE9IE5VTEwpCi0JCXNtZ3Jj bG9zZShyZWxuKTsKKwl3aGlsZSAoKHNmaWxlID0gKFNNZ3JGaWxlSGFuZGxlKSBoYXNoX3NlcV9z ZWFyY2goJnN0YXR1cykpICE9IE5VTEwpCisJCXNtZ3JjbG9zZShzZmlsZSk7CiB9CiAKIC8qCkBA IC0zNDMsMTExICszMzgsMTEyIEBAIHNtZ3JjbG9zZWFsbCh2b2lkKQogICogc3VjaCBlbnRyeSBl eGlzdHMgYWxyZWFkeS4KICAqLwogdm9pZAotc21ncmNsb3NlcmVsbG9jYXRvcihSZWxGaWxlTG9j YXRvckJhY2tlbmQgcmxvY2F0b3IpCitzbWdyY2xvc2VyZWxsb2NhdG9yKFJlbEZpbGVMb2NhdG9y IHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCkKIHsKLQlTTWdyUmVsYXRpb24gcmVsbjsKKwlT TWdyRmlsZUhhbmRsZSBzZmlsZTsKIAogCS8qIE5vdGhpbmcgdG8gZG8gaWYgaGFzaHRhYmxlIG5v dCBzZXQgdXAgKi8KLQlpZiAoU01nclJlbGF0aW9uSGFzaCA9PSBOVUxMKQorCWlmIChTTWdyRmls ZUhhc2ggPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JcmVsbiA9IChTTWdyUmVsYXRpb24pIGhhc2hf c2VhcmNoKFNNZ3JSZWxhdGlvbkhhc2gsCi0JCQkJCQkJCQkgICZybG9jYXRvciwKLQkJCQkJCQkJ CSAgSEFTSF9GSU5ELCBOVUxMKTsKLQlpZiAocmVsbiAhPSBOVUxMKQotCQlzbWdyY2xvc2UocmVs bik7CisJZm9yIChpbnQgaSA9IDA7IGkgPD0gTUFYX0ZPUktOVU07IGkrKykKKwl7CisJCVNNZ3JG aWxlTG9jYXRvciBzbG9jYXRvciA9IHsgcmxvY2F0b3IsIGJhY2tlbmQsIGkgfTsKKworCQlzZmls ZSA9IChTTWdyRmlsZUhhbmRsZSkgaGFzaF9zZWFyY2goU01nckZpbGVIYXNoLAorCQkJCQkJCQkJ CQkgJnNsb2NhdG9yLAorCQkJCQkJCQkJCQkgSEFTSF9GSU5ELCBOVUxMKTsKKwkJaWYgKHNmaWxl ICE9IE5VTEwpCisJCQlzbWdyY2xvc2Uoc2ZpbGUpOworCX0KIH0KIAogLyoKLSAqCXNtZ3JjcmVh dGUoKSAtLSBDcmVhdGUgYSBuZXcgcmVsYXRpb24uCisgKglzbWdyY3JlYXRlKCkgLS0gQ3JlYXRl IGEgbmV3IGZpbGUuCiAgKgotICoJCUdpdmVuIGFuIGFscmVhZHktY3JlYXRlZCAoYnV0IHByZXN1 bWFibHkgdW51c2VkKSBTTWdyUmVsYXRpb24sCisgKgkJR2l2ZW4gYW4gYWxyZWFkeS1jcmVhdGVk IChidXQgcHJlc3VtYWJseSB1bnVzZWQpIFNNZ3JGaWxlSGFuZGxlLAogICoJCWNhdXNlIHRoZSB1 bmRlcmx5aW5nIGRpc2sgZmlsZSBvciBvdGhlciBzdG9yYWdlIGZvciB0aGUgZm9yawogICoJCXRv IGJlIGNyZWF0ZWQuCiAgKi8KIHZvaWQKLXNtZ3JjcmVhdGUoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwgYm9vbCBpc1JlZG8pCitzbWdyY3JlYXRlKFNNZ3JGaWxlSGFuZGxl IHNmaWxlLCBib29sIGlzUmVkbykKIHsKLQlzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9j cmVhdGUocmVsbiwgZm9ya251bSwgaXNSZWRvKTsKKwlzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hd LnNtZ3JfY3JlYXRlKHNmaWxlLCBpc1JlZG8pOwogfQogCiAvKgotICoJc21ncmRvc3luY2FsbCgp IC0tIEltbWVkaWF0ZWx5IHN5bmMgYWxsIGZvcmtzIG9mIGFsbCBnaXZlbiByZWxhdGlvbnMKKyAq CXNtZ3J1bmxpbmtfbXVsdGkoKSAtLSBJbW1lZGlhdGVseSB1bmxpbmsgZ2l2ZW4gZm9ya3Mgb2Yg Z2l2ZW4gcmVsYXRpb24KICAqCi0gKgkJQWxsIGZvcmtzIG9mIGFsbCBnaXZlbiByZWxhdGlvbnMg YXJlIHN5bmNlZCBvdXQgdG8gdGhlIHN0b3JlLgorICoJCVRoZSBnaXZlbiBmb3JrcyBvZiB0aGUg cmVsYXRpb24gYXJlIHJlbW92ZWQgZnJvbSB0aGUgc3RvcmUuICBUaGlzCisgKgkJc2hvdWxkIG5v dCBiZSB1c2VkIGR1cmluZyB0cmFuc2FjdGlvbmFsIG9wZXJhdGlvbnMsIHNpbmNlIGl0IGNhbid0 IGJlCisgKgkJdW5kb25lLgogICoKLSAqCQlUaGlzIGlzIGVxdWl2YWxlbnQgdG8gRmx1c2hSZWxh dGlvbkJ1ZmZlcnMoKSBmb3IgZWFjaCBzbWdyIHJlbGF0aW9uLAotICoJCXRoZW4gY2FsbGluZyBz bWdyaW1tZWRzeW5jKCkgZm9yIGFsbCBmb3JrcyBvZiBlYWNoIHJlbGF0aW9uLCBidXQgaXQncwot ICoJCXNpZ25pZmljYW50bHkgcXVpY2tlciBzbyBzaG91bGQgYmUgcHJlZmVycmVkIHdoZW4gcG9z c2libGUuCisgKgkJVGhpcyBoYW5kbGVzIG11bHRpcGxlIGZvcmtzIGluIG9uZSBjYWxsLCBiZWNh dXNlIHRoZSBjYWNoZSBpbnZhbGlkYXRpb24KKyAqCQloYXBwZW5zIGF0IHJlbGF0aW9uIGdyYW51 bGFyaXR5LiBJZiB3ZSBoYWQgYW4gc21ncnVubGluaygpIGZ1bmN0aW9uCisgKgkJdG8gdW5saW5r IGp1c3QgYSBzaW5nbGUgc21nciBmaWxlLCBhbmQgdGhlIGNhbGxlciB3YW50ZWQgdG8gZGVsZXRl CisgKgkJbXVsdGlwbGUgZm9ya3Mgb2YgYSBzaW5nbGUgcmVsYXRpb24sIGVhY2ggY2FsbCB3b3Vs ZCBzZW5kIGEgbmV3CisgKgkJY2FjaGUgaW52YWxpZGF0aW9uIGV2ZW50LCB3aGljaCB3b3VsZCBi ZSB3YXN0ZWZ1bC4KKyAqCisgKgkJSWYgaXNSZWRvIGlzIHRydWUsIGl0IGlzIG9rYXkgZm9yIHRo ZSB1bmRlcmx5aW5nIGZpbGUocykgdG8gYmUgZ29uZQorICoJCWFscmVhZHkuCiAgKi8KIHZvaWQK LXNtZ3Jkb3N5bmNhbGwoU01nclJlbGF0aW9uICpyZWxzLCBpbnQgbnJlbHMpCitzbWdydW5saW5r X211bHRpKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCwgRm9ya051 bWJlciAqZm9ya3MsIGludCBuZm9ya3MsIGJvb2wgaXNSZWRvKQogeworCWludAkJCXdoaWNoOwog CWludAkJCWkgPSAwOwotCUZvcmtOdW1iZXIJZm9ya251bTsKIAotCWlmIChucmVscyA9PSAwKQot CQlyZXR1cm47CisJd2hpY2ggPSAwOwkvKiB3ZSBvbmx5IGhhdmUgbWQuYyBhdCBwcmVzZW50ICov CiAKLQlGbHVzaFJlbGF0aW9uc0FsbEJ1ZmZlcnMocmVscywgbnJlbHMpOworCS8qIENsb3NlIHRo ZSBmb3JrcyBhdCBzbWdyIGxldmVsICovCisJc21ncmNsb3NlcmVsbG9jYXRvcihybG9jYXRvciwg YmFja2VuZCk7CiAKIAkvKgotCSAqIFN5bmMgdGhlIHBoeXNpY2FsIGZpbGUocykuCisJICogU2Vu ZCBhIHNoYXJlZC1pbnZhbCBtZXNzYWdlIHRvIGZvcmNlIG90aGVyIGJhY2tlbmRzIHRvIGNsb3Nl IGFueQorCSAqIGRhbmdsaW5nIHNtZ3IgcmVmZXJlbmNlcyB0aGV5IG1heSBoYXZlIGZvciB0aGVz ZSByZWxzLiAgV2Ugc2hvdWxkIGRvCisJICogdGhpcyBiZWZvcmUgc3RhcnRpbmcgdGhlIGFjdHVh bCB1bmxpbmtpbmcsIGluIGNhc2Ugd2UgZmFpbCBwYXJ0d2F5CisJICogdGhyb3VnaCB0aGF0IHN0 ZXAuICBOb3RlIHRoYXQgdGhlIHNpbnZhbCBtZXNzYWdlcyB3aWxsIGV2ZW50dWFsbHkgY29tZQor CSAqIGJhY2sgdG8gdGhpcyBiYWNrZW5kLCB0b28sIGFuZCB0aGVyZWJ5IHByb3ZpZGUgYSBiYWNr c3RvcCB0aGF0IHdlCisJICogY2xvc2VkIG91ciBvd24gc21nciByZWwuCiAJICovCi0JZm9yIChp ID0gMDsgaSA8IG5yZWxzOyBpKyspCi0JewotCQlpbnQJCQl3aGljaCA9IHJlbHNbaV0tPnNtZ3Jf d2hpY2g7CisJQ2FjaGVJbnZhbGlkYXRlU21ncihybG9jYXRvciwgYmFja2VuZCk7CiAKLQkJZm9y IChmb3JrbnVtID0gMDsgZm9ya251bSA8PSBNQVhfRk9SS05VTTsgZm9ya251bSsrKQotCQl7Ci0J CQlpZiAoc21ncnN3W3doaWNoXS5zbWdyX2V4aXN0cyhyZWxzW2ldLCBmb3JrbnVtKSkKLQkJCQlz bWdyc3dbd2hpY2hdLnNtZ3JfaW1tZWRzeW5jKHJlbHNbaV0sIGZvcmtudW0pOwotCQl9CisJLyoK KwkgKiBEZWxldGUgdGhlIHBoeXNpY2FsIGZpbGUocykuCisJICoKKwkgKiBOb3RlOiBzbWdyX3Vu bGluayBtdXN0IHRyZWF0IGRlbGV0aW9uIGZhaWx1cmUgYXMgYSBXQVJOSU5HLCBub3QgYW4KKwkg KiBFUlJPUiwgYmVjYXVzZSB3ZSd2ZSBhbHJlYWR5IGRlY2lkZWQgdG8gY29tbWl0IG9yIGFib3J0 IHRoZSBjdXJyZW50CisJICogeGFjdC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbmZvcmtzOyBp KyspCisJeworCQlTTWdyRmlsZUxvY2F0b3Igc2xvY2F0b3IgPSB7IHJsb2NhdG9yLCBiYWNrZW5k LCBmb3Jrc1tpXSB9OworCQlzbWdyc3dbd2hpY2hdLnNtZ3JfdW5saW5rKHNsb2NhdG9yLCBpc1Jl ZG8pOwogCX0KIH0KIAogLyoKLSAqCXNtZ3Jkb3VubGlua2FsbCgpIC0tIEltbWVkaWF0ZWx5IHVu bGluayBhbGwgZm9ya3Mgb2YgYWxsIGdpdmVuIHJlbGF0aW9ucwotICoKLSAqCQlBbGwgZm9ya3Mg b2YgYWxsIGdpdmVuIHJlbGF0aW9ucyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBzdG9yZS4gIFRoaXMK LSAqCQlzaG91bGQgbm90IGJlIHVzZWQgZHVyaW5nIHRyYW5zYWN0aW9uYWwgb3BlcmF0aW9ucywg c2luY2UgaXQgY2FuJ3QgYmUKLSAqCQl1bmRvbmUuCisgKglzbWdyZG91bmxpbmsoKSAtLSBJbW1l ZGlhdGVseSB1bmxpbmsgYSBmaWxlCiAgKgogICoJCUlmIGlzUmVkbyBpcyB0cnVlLCBpdCBpcyBv a2F5IGZvciB0aGUgdW5kZXJseWluZyBmaWxlKHMpIHRvIGJlIGdvbmUKICAqCQlhbHJlYWR5Lgor ICoKKyAqIFRvIHJlbW92ZSBhIHJlbGF0aW9uIHRyYW5zYWN0aW9uYWxseSwgc2VlIFJlbGF0aW9u RHJvcFN0b3JhZ2UoKSBpbnN0ZWFkLgorICogVGhpcyB3aWxsIGNhdXNlIGNhY2hlIGludmFsaWRh dGlvbiBvZiBhbGwgZm9ya3Mgb2YgdGhlIHJlbGF0aW9uLCBub3QganVzdAorICogdGhpcyBvbmUu CiAgKi8KIHZvaWQKLXNtZ3Jkb3VubGlua2FsbChTTWdyUmVsYXRpb24gKnJlbHMsIGludCBucmVs cywgYm9vbCBpc1JlZG8pCitzbWdydW5saW5rKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBib29sIGlz UmVkbykKIHsKLQlpbnQJCQlpID0gMDsKLQlSZWxGaWxlTG9jYXRvckJhY2tlbmQgKnJsb2NhdG9y czsKLQlGb3JrTnVtYmVyCWZvcmtudW07Ci0KLQlpZiAobnJlbHMgPT0gMCkKLQkJcmV0dXJuOwot Ci0JLyoKLQkgKiBHZXQgcmlkIG9mIGFueSByZW1haW5pbmcgYnVmZmVycyBmb3IgdGhlIHJlbGF0 aW9ucy4gIGJ1Zm1nciB3aWxsIGp1c3QKLQkgKiBkcm9wIHRoZW0gd2l0aG91dCBib3RoZXJpbmcg dG8gd3JpdGUgdGhlIGNvbnRlbnRzLgotCSAqLwotCURyb3BSZWxhdGlvbnNBbGxCdWZmZXJzKHJl bHMsIG5yZWxzKTsKLQotCS8qCi0JICogY3JlYXRlIGFuIGFycmF5IHdoaWNoIGNvbnRhaW5zIGFs bCByZWxhdGlvbnMgdG8gYmUgZHJvcHBlZCwgYW5kIGNsb3NlCi0JICogZWFjaCByZWxhdGlvbidz IGZvcmtzIGF0IHRoZSBzbWdyIGxldmVsIHdoaWxlIGF0IGl0Ci0JICovCi0JcmxvY2F0b3JzID0g cGFsbG9jKHNpemVvZihSZWxGaWxlTG9jYXRvckJhY2tlbmQpICogbnJlbHMpOwotCWZvciAoaSA9 IDA7IGkgPCBucmVsczsgaSsrKQotCXsKLQkJUmVsRmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9y ID0gcmVsc1tpXS0+c21ncl9ybG9jYXRvcjsKLQkJaW50CQkJd2hpY2ggPSByZWxzW2ldLT5zbWdy X3doaWNoOworCVNNZ3JGaWxlTG9jYXRvciBsb2NhdG9yOworCWludAkJCXdoaWNoOwogCi0JCXJs b2NhdG9yc1tpXSA9IHJsb2NhdG9yOworCS8qIHJlbWVtYmVyIGJlZm9yZSBjbG9zaW5nICovCisJ d2hpY2ggPSBzZmlsZS0+c21ncl93aGljaDsKKwlsb2NhdG9yID0gc2ZpbGUtPnNtZ3JfbG9jYXRv cjsKIAotCQkvKiBDbG9zZSB0aGUgZm9ya3MgYXQgc21nciBsZXZlbCAqLwotCQlmb3IgKGZvcmtu dW0gPSAwOyBmb3JrbnVtIDw9IE1BWF9GT1JLTlVNOyBmb3JrbnVtKyspCi0JCQlzbWdyc3dbd2hp Y2hdLnNtZ3JfY2xvc2UocmVsc1tpXSwgZm9ya251bSk7Ci0JfQorCS8qIENsb3NlIHRoZSBmaWxl IGF0IHNtZ3IgbGV2ZWwgKi8KKwlzbWdyY2xvc2Uoc2ZpbGUpOwogCiAJLyoKIAkgKiBTZW5kIGEg c2hhcmVkLWludmFsIG1lc3NhZ2UgdG8gZm9yY2Ugb3RoZXIgYmFja2VuZHMgdG8gY2xvc2UgYW55 CkBAIC00NTcsOCArNDUzLDcgQEAgc21ncmRvdW5saW5rYWxsKFNNZ3JSZWxhdGlvbiAqcmVscywg aW50IG5yZWxzLCBib29sIGlzUmVkbykKIAkgKiBiYWNrIHRvIHRoaXMgYmFja2VuZCwgdG9vLCBh bmQgdGhlcmVieSBwcm92aWRlIGEgYmFja3N0b3AgdGhhdCB3ZQogCSAqIGNsb3NlZCBvdXIgb3du IHNtZ3IgcmVsLgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBucmVsczsgaSsrKQotCQlDYWNoZUlu dmFsaWRhdGVTbWdyKHJsb2NhdG9yc1tpXSk7CisJQ2FjaGVJbnZhbGlkYXRlU21ncihsb2NhdG9y LmxvY2F0b3IsIGxvY2F0b3IuYmFja2VuZCk7CiAKIAkvKgogCSAqIERlbGV0ZSB0aGUgcGh5c2lj YWwgZmlsZShzKS4KQEAgLTQ2NywxNiArNDYyLDcgQEAgc21ncmRvdW5saW5rYWxsKFNNZ3JSZWxh dGlvbiAqcmVscywgaW50IG5yZWxzLCBib29sIGlzUmVkbykKIAkgKiBFUlJPUiwgYmVjYXVzZSB3 ZSd2ZSBhbHJlYWR5IGRlY2lkZWQgdG8gY29tbWl0IG9yIGFib3J0IHRoZSBjdXJyZW50CiAJICog eGFjdC4KIAkgKi8KLQotCWZvciAoaSA9IDA7IGkgPCBucmVsczsgaSsrKQotCXsKLQkJaW50CQkJ d2hpY2ggPSByZWxzW2ldLT5zbWdyX3doaWNoOwotCi0JCWZvciAoZm9ya251bSA9IDA7IGZvcmtu dW0gPD0gTUFYX0ZPUktOVU07IGZvcmtudW0rKykKLQkJCXNtZ3Jzd1t3aGljaF0uc21ncl91bmxp bmsocmxvY2F0b3JzW2ldLCBmb3JrbnVtLCBpc1JlZG8pOwotCX0KLQotCXBmcmVlKHJsb2NhdG9y cyk7CisJc21ncnN3W3doaWNoXS5zbWdyX3VubGluayhsb2NhdG9yLCBpc1JlZG8pOwogfQogCiAK QEAgLTQ5MCwyMSArNDc2LDIxIEBAIHNtZ3Jkb3VubGlua2FsbChTTWdyUmVsYXRpb24gKnJlbHMs IGludCBucmVscywgYm9vbCBpc1JlZG8pCiAgKgkJY2F1c2VzIGludGVydmVuaW5nIGZpbGUgc3Bh Y2UgdG8gYmVjb21lIGZpbGxlZCB3aXRoIHplcm9lcy4KICAqLwogdm9pZAotc21ncmV4dGVuZChT TWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251 bSwKK3NtZ3JleHRlbmQoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIGJsb2NrbnVt LAogCQkgICBjaGFyICpidWZmZXIsIGJvb2wgc2tpcEZzeW5jKQogewotCXNtZ3Jzd1tyZWxuLT5z bWdyX3doaWNoXS5zbWdyX2V4dGVuZChyZWxuLCBmb3JrbnVtLCBibG9ja251bSwKLQkJCQkJCQkJ CQkgYnVmZmVyLCBza2lwRnN5bmMpOworCXNtZ3Jzd1tzZmlsZS0+c21ncl93aGljaF0uc21ncl9l eHRlbmQoc2ZpbGUsIGJsb2NrbnVtLAorCQkJCQkJCQkJCSAgYnVmZmVyLCBza2lwRnN5bmMpOwog CiAJLyoKIAkgKiBOb3JtYWxseSB3ZSBleHBlY3QgdGhpcyB0byBpbmNyZWFzZSBuYmxvY2tzIGJ5 IG9uZSwgYnV0IGlmIHRoZSBjYWNoZWQKIAkgKiB2YWx1ZSBpc24ndCBhcyBleHBlY3RlZCwganVz dCBpbnZhbGlkYXRlIGl0IHNvIHRoZSBuZXh0IGNhbGwgYXNrcyB0aGUKIAkgKiBrZXJuZWwuCiAJ ICovCi0JaWYgKHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbZm9ya251bV0gPT0gYmxvY2tudW0p Ci0JCXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbZm9ya251bV0gPSBibG9ja251bSArIDE7CisJ aWYgKHNmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID09IGJsb2NrbnVtKQorCQlzZmlsZS0+c21n cl9jYWNoZWRfbmJsb2NrcyA9IGJsb2NrbnVtICsgMTsKIAllbHNlCi0JCXJlbG4tPnNtZ3JfY2Fj aGVkX25ibG9ja3NbZm9ya251bV0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCXNmaWxlLT5zbWdy X2NhY2hlZF9uYmxvY2tzID0gSW52YWxpZEJsb2NrTnVtYmVyOwogfQogCiAvKgpAQCAtNTE1LDEz ICs1MDEsMTMgQEAgc21ncmV4dGVuZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3Jr bnVtLCBCbG9ja051bWJlciBibG9ja251bSwKICAqCQlyZWNvcmQpLgogICovCiBib29sCi1zbWdy cHJlZmV0Y2goU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwgQmxvY2tOdW1i ZXIgYmxvY2tudW0pCitzbWdycHJlZmV0Y2goU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVt YmVyIGJsb2NrbnVtKQogewotCXJldHVybiBzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9w cmVmZXRjaChyZWxuLCBmb3JrbnVtLCBibG9ja251bSk7CisJcmV0dXJuIHNtZ3Jzd1tzZmlsZS0+ c21ncl93aGljaF0uc21ncl9wcmVmZXRjaChzZmlsZSwgYmxvY2tudW0pOwogfQogCiAvKgotICoJ c21ncnJlYWQoKSAtLSByZWFkIGEgcGFydGljdWxhciBibG9jayBmcm9tIGEgcmVsYXRpb24gaW50 byB0aGUgc3VwcGxpZWQKKyAqCXNtZ3JyZWFkKCkgLS0gcmVhZCBhIHBhcnRpY3VsYXIgYmxvY2sg ZnJvbSBhIGZpbGUgaW50byB0aGUgc3VwcGxpZWQKICAqCQkJCSAgYnVmZmVyLgogICoKICAqCQlU aGlzIHJvdXRpbmUgaXMgY2FsbGVkIGZyb20gdGhlIGJ1ZmZlciBtYW5hZ2VyIGluIG9yZGVyIHRv CkBAIC01MjksMTAgKzUxNSw5IEBAIHNtZ3JwcmVmZXRjaChTTWdyUmVsYXRpb24gcmVsbiwgRm9y a051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSkKICAqCQlyZXR1cm4gcGFnZXMg aW4gdGhlIGZvcm1hdCB0aGF0IFBPU1RHUkVTIGV4cGVjdHMuCiAgKi8KIHZvaWQKLXNtZ3JyZWFk KFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2Nr bnVtLAotCQkgY2hhciAqYnVmZmVyKQorc21ncnJlYWQoU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJs b2NrTnVtYmVyIGJsb2NrbnVtLCBjaGFyICpidWZmZXIpCiB7Ci0Jc21ncnN3W3JlbG4tPnNtZ3Jf d2hpY2hdLnNtZ3JfcmVhZChyZWxuLCBmb3JrbnVtLCBibG9ja251bSwgYnVmZmVyKTsKKwlzbWdy c3dbc2ZpbGUtPnNtZ3Jfd2hpY2hdLnNtZ3JfcmVhZChzZmlsZSwgYmxvY2tudW0sIGJ1ZmZlcik7 CiB9CiAKIC8qCkBAIC01NTEsMTEgKzUzNiwxMSBAQCBzbWdycmVhZChTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBibG9ja251bSwKICAqCQlkbyBub3Qg cmVxdWlyZSBmc3luYy4KICAqLwogdm9pZAotc21ncndyaXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0sIEJsb2NrTnVtYmVyIGJsb2NrbnVtLAorc21ncndyaXRlKFNNZ3JG aWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBibG9ja251bSwKIAkJICBjaGFyICpidWZmZXIs IGJvb2wgc2tpcEZzeW5jKQogewotCXNtZ3Jzd1tyZWxuLT5zbWdyX3doaWNoXS5zbWdyX3dyaXRl KHJlbG4sIGZvcmtudW0sIGJsb2NrbnVtLAotCQkJCQkJCQkJCWJ1ZmZlciwgc2tpcEZzeW5jKTsK KwlzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hdLnNtZ3Jfd3JpdGUoc2ZpbGUsIGJsb2NrbnVtLAor CQkJCQkJCQkJCSBidWZmZXIsIHNraXBGc3luYyk7CiB9CiAKIApAQCAtNTY0LDExICs1NDksMTEg QEAgc21ncndyaXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIEJsb2Nr TnVtYmVyIGJsb2NrbnVtLAogICoJCQkJCSAgIGJsb2Nrcy4KICAqLwogdm9pZAotc21ncndyaXRl YmFjayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9ja051bWJlciBi bG9ja251bSwKK3NtZ3J3cml0ZWJhY2soU01nckZpbGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVy IGJsb2NrbnVtLAogCQkJICBCbG9ja051bWJlciBuYmxvY2tzKQogewotCXNtZ3Jzd1tyZWxuLT5z bWdyX3doaWNoXS5zbWdyX3dyaXRlYmFjayhyZWxuLCBmb3JrbnVtLCBibG9ja251bSwKLQkJCQkJ CQkJCQkJbmJsb2Nrcyk7CisJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX3dyaXRlYmFj ayhzZmlsZSwgYmxvY2tudW0sCisJCQkJCQkJCQkJCSBuYmxvY2tzKTsKIH0KIAogLyoKQEAgLTU3 NiwxOCArNTYxLDE4IEBAIHNtZ3J3cml0ZWJhY2soU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1i ZXIgZm9ya251bSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAgKgkJCQkJIHN1cHBsaWVkIHJlbGF0 aW9uLgogICovCiBCbG9ja051bWJlcgotc21ncm5ibG9ja3MoU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSkKK3NtZ3JuYmxvY2tzKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKQogewog CUJsb2NrTnVtYmVyIHJlc3VsdDsKIAogCS8qIENoZWNrIGFuZCByZXR1cm4gaWYgd2UgZ2V0IHRo ZSBjYWNoZWQgdmFsdWUgZm9yIHRoZSBudW1iZXIgb2YgYmxvY2tzLiAqLwotCXJlc3VsdCA9IHNt Z3JuYmxvY2tzX2NhY2hlZChyZWxuLCBmb3JrbnVtKTsKKwlyZXN1bHQgPSBzbWdybmJsb2Nrc19j YWNoZWQoc2ZpbGUpOwogCWlmIChyZXN1bHQgIT0gSW52YWxpZEJsb2NrTnVtYmVyKQogCQlyZXR1 cm4gcmVzdWx0OwogCi0JcmVzdWx0ID0gc21ncnN3W3JlbG4tPnNtZ3Jfd2hpY2hdLnNtZ3JfbmJs b2NrcyhyZWxuLCBmb3JrbnVtKTsKKwlyZXN1bHQgPSBzbWdyc3dbc2ZpbGUtPnNtZ3Jfd2hpY2hd LnNtZ3JfbmJsb2NrcyhzZmlsZSk7CiAKLQlyZWxuLT5zbWdyX2NhY2hlZF9uYmxvY2tzW2Zvcmtu dW1dID0gcmVzdWx0OworCXNmaWxlLT5zbWdyX2NhY2hlZF9uYmxvY2tzID0gcmVzdWx0OwogCiAJ cmV0dXJuIHJlc3VsdDsKIH0KQEAgLTYwMCwzOCArNTg1LDQxIEBAIHNtZ3JuYmxvY2tzKFNNZ3JS ZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pCiAgKiBmb3JrIHNpemUgaXMgbm90IGNh Y2hlZC4KICAqLwogQmxvY2tOdW1iZXIKLXNtZ3JuYmxvY2tzX2NhY2hlZChTTWdyUmVsYXRpb24g cmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQorc21ncm5ibG9ja3NfY2FjaGVkKFNNZ3JGaWxlSGFu ZGxlIHNmaWxlKQogewogCS8qCiAJICogRm9yIG5vdywgd2Ugb25seSB1c2UgY2FjaGVkIHZhbHVl cyBpbiByZWNvdmVyeSBkdWUgdG8gbGFjayBvZiBhIHNoYXJlZAogCSAqIGludmFsaWRhdGlvbiBt ZWNoYW5pc20gZm9yIGNoYW5nZXMgaW4gZmlsZSBzaXplLgogCSAqLwotCWlmIChJblJlY292ZXJ5 ICYmIHJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbZm9ya251bV0gIT0gSW52YWxpZEJsb2NrTnVt YmVyKQotCQlyZXR1cm4gcmVsbi0+c21ncl9jYWNoZWRfbmJsb2Nrc1tmb3JrbnVtXTsKKwlpZiAo SW5SZWNvdmVyeSAmJiBzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyAhPSBJbnZhbGlkQmxvY2tO dW1iZXIpCisJCXJldHVybiBzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrczsKIAogCXJldHVybiBJ bnZhbGlkQmxvY2tOdW1iZXI7CiB9CiAKIC8qCi0gKglzbWdydHJ1bmNhdGUoKSAtLSBUcnVuY2F0 ZSB0aGUgZ2l2ZW4gZm9ya3Mgb2Ygc3VwcGxpZWQgcmVsYXRpb24gdG8KLSAqCQkJCQkgIGVhY2gg c3BlY2lmaWVkIG51bWJlcnMgb2YgYmxvY2tzCisgKglzbWdydHJ1bmNhdGVfbXVsdGkoKSAtLSBU cnVuY2F0ZSB0aGUgZ2l2ZW4gZm9ya3Mgb2Ygc3VwcGxpZWQgcmVsYXRpb24gdG8KKyAqCQkJCQkJ CWVhY2ggc3BlY2lmaWVkIG51bWJlcnMgb2YgYmxvY2tzCiAgKgogICogVGhlIHRydW5jYXRpb24g aXMgZG9uZSBpbW1lZGlhdGVseSwgc28gdGhpcyBjYW4ndCBiZSByb2xsZWQgYmFjay4KICAqCiAg KiBUaGUgY2FsbGVyIG11c3QgaG9sZCBBY2Nlc3NFeGNsdXNpdmVMb2NrIG9uIHRoZSByZWxhdGlv biwgdG8gZW5zdXJlIHRoYXQKICAqIG90aGVyIGJhY2tlbmRzIHJlY2VpdmUgdGhlIHNtZ3IgaW52 YWxpZGF0aW9uIGV2ZW50IHRoYXQgdGhpcyBmdW5jdGlvbiBzZW5kcwogICogYmVmb3JlIHRoZXkg YWNjZXNzIGFueSBmb3JrcyBvZiB0aGUgcmVsYXRpb24gYWdhaW4uCisgKgorICogTGlrZSBzbWdy dW5saW5rX211bHRpKCksIHRoaXMgaGFuZGxlcyBtdWx0aXBsZSBmb3JrcyBpbiBvbmUgY2FsbCBi ZWNhdXNlCisgKiB0aGUgY2FjaGUgaW52YWxpZGF0aW9uIGhhcHBlbnMgYXQgcmVsYXRpb24gZ3Jh bnVsYXJpdHkuCisgKgorICogTkI6IFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGRyb3Bw aW5nIGJ1ZmZlcnMhIEJlZm9yZSB2MTYsIHRoaXMKKyAqIGZ1bmN0aW9uIGRpZCBpdC4KICAqLwog dm9pZAotc21ncnRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyICpmb3JrbnVt LCBpbnQgbmZvcmtzLCBCbG9ja051bWJlciAqbmJsb2NrcykKK3NtZ3J0cnVuY2F0ZV9tdWx0aShS ZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQsIEZvcmtOdW1iZXIgKmZv cmtzLAorCQkJCSAgIGludCBuZm9ya3MsIEJsb2NrTnVtYmVyICpuYmxvY2tzKQogewogCWludAkJ CWk7CiAKLQkvKgotCSAqIEdldCByaWQgb2YgYW55IGJ1ZmZlcnMgZm9yIHRoZSBhYm91dC10by1i ZS1kZWxldGVkIGJsb2Nrcy4gYnVmbWdyIHdpbGwKLQkgKiBqdXN0IGRyb3AgdGhlbSB3aXRob3V0 IGJvdGhlcmluZyB0byB3cml0ZSB0aGUgY29udGVudHMuCi0JICovCi0JRHJvcFJlbGF0aW9uQnVm ZmVycyhyZWxuLCBmb3JrbnVtLCBuZm9ya3MsIG5ibG9ja3MpOworCUFzc2VydChuZm9ya3MgPCBN QVhfRk9SS05VTSArIDEpOwogCiAJLyoKIAkgKiBTZW5kIGEgc2hhcmVkLWludmFsIG1lc3NhZ2Ug dG8gZm9yY2Ugb3RoZXIgYmFja2VuZHMgdG8gY2xvc2UgYW55IHNtZ3IKQEAgLTY0MywxNSArNjMx LDE5IEBAIHNtZ3J0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciAqZm9ya251 bSwgaW50IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5iCiAJICogaXMgYSBwZXJmb3JtYW5jZS1jcml0 aWNhbCBwYXRoLikgIEFzIGluIHRoZSB1bmxpbmsgY29kZSwgd2Ugd2FudCB0byBiZQogCSAqIHN1 cmUgdGhlIG1lc3NhZ2UgaXMgc2VudCBiZWZvcmUgd2Ugc3RhcnQgY2hhbmdpbmcgdGhpbmdzIG9u LWRpc2suCiAJICovCi0JQ2FjaGVJbnZhbGlkYXRlU21ncihyZWxuLT5zbWdyX3Jsb2NhdG9yKTsK KwlDYWNoZUludmFsaWRhdGVTbWdyKHJsb2NhdG9yLCBiYWNrZW5kKTsKIAotCS8qIERvIHRoZSB0 cnVuY2F0aW9uICovCisJLyogRG8gdGhlIHRydW5jYXRpb25zICovCiAJZm9yIChpID0gMDsgaSA8 IG5mb3JrczsgaSsrKQogCXsKKwkJU01nckZpbGVIYW5kbGUgc2ZpbGU7CisKKwkJc2ZpbGUgPSBz bWdyb3BlbihybG9jYXRvciwgYmFja2VuZCwgZm9ya3NbaV0pOworCiAJCS8qIE1ha2UgdGhlIGNh Y2hlZCBzaXplIGlzIGludmFsaWQgaWYgd2UgZW5jb3VudGVyIGFuIGVycm9yLiAqLwotCQlyZWxu LT5zbWdyX2NhY2hlZF9uYmxvY2tzW2ZvcmtudW1baV1dID0gSW52YWxpZEJsb2NrTnVtYmVyOwor CQlzZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IEludmFsaWRCbG9ja051bWJlcjsKIAotCQlz bWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl90cnVuY2F0ZShyZWxuLCBmb3JrbnVtW2ldLCBu YmxvY2tzW2ldKTsKKwkJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX3RydW5jYXRlKHNm aWxlLCBuYmxvY2tzW2ldKTsKIAogCQkvKgogCQkgKiBXZSBtaWdodCBhcyB3ZWxsIHVwZGF0ZSB0 aGUgbG9jYWwgc21ncl9jYWNoZWRfbmJsb2NrcyB2YWx1ZXMuIFRoZQpAQCAtNjYwLDcgKzY1Miw3 IEBAIHNtZ3J0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciAqZm9ya251bSwg aW50IG5mb3JrcywgQmxvY2tOdW1iZXIgKm5iCiAJCSAqIHNtZ3Jfdm1fbmJsb2NrcywgYW5kIHRo ZXNlIG9uZXMgdG9vIGF0IHRoZSBuZXh0IGNvbW1hbmQgYm91bmRhcnkuCiAJCSAqIEJ1dCB0aGVz ZSBlbnN1cmUgdGhleSBhcmVuJ3Qgb3V0cmlnaHQgd3JvbmcgdW50aWwgdGhlbi4KIAkJICovCi0J CXJlbG4tPnNtZ3JfY2FjaGVkX25ibG9ja3NbZm9ya251bVtpXV0gPSBuYmxvY2tzW2ldOworCQlz ZmlsZS0+c21ncl9jYWNoZWRfbmJsb2NrcyA9IG5ibG9ja3NbaV07CiAJfQogfQogCkBAIC02ODgs OSArNjgwLDkgQEAgc21ncnRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyICpm b3JrbnVtLCBpbnQgbmZvcmtzLCBCbG9ja051bWJlciAqbmIKICAqCQlvdGhlcndpc2UgdGhlIHN5 bmMgaXMgbm90IHZlcnkgbWVhbmluZ2Z1bC4KICAqLwogdm9pZAotc21ncmltbWVkc3luYyhTTWdy UmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtKQorc21ncmltbWVkc3luYyhTTWdyRmls ZUhhbmRsZSBzZmlsZSkKIHsKLQlzbWdyc3dbcmVsbi0+c21ncl93aGljaF0uc21ncl9pbW1lZHN5 bmMocmVsbiwgZm9ya251bSk7CisJc21ncnN3W3NmaWxlLT5zbWdyX3doaWNoXS5zbWdyX2ltbWVk c3luYyhzZmlsZSk7CiB9CiAKIC8qCkBAIC03MTQsMTQgKzcwNiwxNCBAQCBBdEVPWGFjdF9TTWdy KHZvaWQpCiAJICogWmFwIGFsbCB1bm93bmVkIFNNZ3JSZWxhdGlvbnMuICBXZSByZWx5IG9uIHNt Z3JjbG9zZSgpIHRvIHJlbW92ZSBlYWNoCiAJICogb25lIGZyb20gdGhlIGxpc3QuCiAJICovCi0J ZGxpc3RfZm9yZWFjaF9tb2RpZnkoaXRlciwgJnVub3duZWRfcmVsbnMpCisJZGxpc3RfZm9yZWFj aF9tb2RpZnkoaXRlciwgJnVub3duZWRfc2ZpbGVzKQogCXsKLQkJU01nclJlbGF0aW9uIHJlbCA9 IGRsaXN0X2NvbnRhaW5lcihTTWdyUmVsYXRpb25EYXRhLCBub2RlLAotCQkJCQkJCQkJCSAgIGl0 ZXIuY3VyKTsKKwkJU01nckZpbGVIYW5kbGUgc2ZpbGUgPSBkbGlzdF9jb250YWluZXIoU01nckZp bGVEYXRhLCBub2RlLAorCQkJCQkJCQkJCQkgICBpdGVyLmN1cik7CiAKLQkJQXNzZXJ0KHJlbC0+ c21ncl9vd25lciA9PSBOVUxMKTsKKwkJQXNzZXJ0KHNmaWxlLT5zbWdyX293bmVyID09IE5VTEwp OwogCi0JCXNtZ3JjbG9zZShyZWwpOworCQlzbWdyY2xvc2Uoc2ZpbGUpOwogCX0KIH0KIApkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9zeW5jL3N5bmMuYyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2Uvc3luYy9zeW5jLmMKaW5kZXggNzY4ZDFkYmZjNDEuLjQxODg2Mjg4NjQ0IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL3N5bmMvc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2Uvc3luYy9zeW5jLmMKQEAgLTE4LDkgKzE4LDcgQEAKICNpbmNsdWRlIDxmY250bC5oPgog I2luY2x1ZGUgPHN5cy9maWxlLmg+CiAKLSNpbmNsdWRlICJhY2Nlc3MvY29tbWl0X3RzLmgiCi0j aW5jbHVkZSAiYWNjZXNzL2Nsb2cuaCIKLSNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCisj aW5jbHVkZSAiYWNjZXNzL3NscnUuaCIKICNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgogI2luY2x1 ZGUgImFjY2Vzcy94bG9ndXRpbHMuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgi CkBAIC0xMDYsMjIgKzEwNCw2IEBAIHN0YXRpYyBjb25zdCBTeW5jT3BzIHN5bmNzd1tdID0gewog CQkuc3luY191bmxpbmtmaWxldGFnID0gbWR1bmxpbmtmaWxldGFnLAogCQkuc3luY19maWxldGFn bWF0Y2hlcyA9IG1kZmlsZXRhZ21hdGNoZXMKIAl9LAotCS8qIHBnX3hhY3QgKi8KLQlbU1lOQ19I QU5ETEVSX0NMT0ddID0gewotCQkuc3luY19zeW5jZmlsZXRhZyA9IGNsb2dzeW5jZmlsZXRhZwot CX0sCi0JLyogcGdfY29tbWl0X3RzICovCi0JW1NZTkNfSEFORExFUl9DT01NSVRfVFNdID0gewot CQkuc3luY19zeW5jZmlsZXRhZyA9IGNvbW1pdHRzc3luY2ZpbGV0YWcKLQl9LAotCS8qIHBnX211 bHRpeGFjdC9vZmZzZXRzICovCi0JW1NZTkNfSEFORExFUl9NVUxUSVhBQ1RfT0ZGU0VUXSA9IHsK LQkJLnN5bmNfc3luY2ZpbGV0YWcgPSBtdWx0aXhhY3RvZmZzZXRzc3luY2ZpbGV0YWcKLQl9LAot CS8qIHBnX211bHRpeGFjdC9tZW1iZXJzICovCi0JW1NZTkNfSEFORExFUl9NVUxUSVhBQ1RfTUVN QkVSXSA9IHsKLQkJLnN5bmNfc3luY2ZpbGV0YWcgPSBtdWx0aXhhY3RtZW1iZXJzc3luY2ZpbGV0 YWcKLQl9CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvaW52 YWwuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2ludmFsLmMKaW5kZXggMDAwODgyNmY2N2Mu LjdhMWQ4YzAxMmMyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9pbnZhbC5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL2ludmFsLmMKQEAgLTY2MSwxMSArNjYxLDEy IEBAIExvY2FsRXhlY3V0ZUludmFsaWRhdGlvbk1lc3NhZ2UoU2hhcmVkSW52YWxpZGF0aW9uTWVz c2FnZSAqbXNnKQogCQkgKiBXZSBjb3VsZCBoYXZlIHNtZ3IgZW50cmllcyBmb3IgcmVsYXRpb25z IG9mIG90aGVyIGRhdGFiYXNlcywgc28gbm8KIAkJICogc2hvcnQtY2lyY3VpdCB0ZXN0IGlzIHBv c3NpYmxlIGhlcmUuCiAJCSAqLwotCQlSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3I7CisJ CVJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yOworCQlCYWNrZW5kSWQgYmFja2VuZDsKIAotCQlybG9j YXRvci5sb2NhdG9yID0gbXNnLT5zbS5ybG9jYXRvcjsKLQkJcmxvY2F0b3IuYmFja2VuZCA9ICht c2ctPnNtLmJhY2tlbmRfaGkgPDwgMTYpIHwgKGludCkgbXNnLT5zbS5iYWNrZW5kX2xvOwotCQlz bWdyY2xvc2VyZWxsb2NhdG9yKHJsb2NhdG9yKTsKKwkJcmxvY2F0b3IgPSBtc2ctPnNtLnJsb2Nh dG9yOworCQliYWNrZW5kID0gKG1zZy0+c20uYmFja2VuZF9oaSA8PCAxNikgfCAoaW50KSBtc2ct PnNtLmJhY2tlbmRfbG87CisJCXNtZ3JjbG9zZXJlbGxvY2F0b3IocmxvY2F0b3IsIGJhY2tlbmQp OwogCX0KIAllbHNlIGlmIChtc2ctPmlkID09IFNIQVJFRElOVkFMUkVMTUFQX0lEKQogCXsKQEAg LTE0NTksMTQgKzE0NjAsMTQgQEAgQ2FjaGVJbnZhbGlkYXRlUmVsY2FjaGVCeVJlbGlkKE9pZCBy ZWxpZCkKICAqIFRodXMsIHRoZSBtYXhpbXVtIHBvc3NpYmxlIGJhY2tlbmQgSUQgaXMgMl4yMy0x LgogICovCiB2b2lkCi1DYWNoZUludmFsaWRhdGVTbWdyKFJlbEZpbGVMb2NhdG9yQmFja2VuZCBy bG9jYXRvcikKK0NhY2hlSW52YWxpZGF0ZVNtZ3IoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJh Y2tlbmRJZCBiYWNrZW5kKQogewogCVNoYXJlZEludmFsaWRhdGlvbk1lc3NhZ2UgbXNnOwogCiAJ bXNnLnNtLmlkID0gU0hBUkVESU5WQUxTTUdSX0lEOwotCW1zZy5zbS5iYWNrZW5kX2hpID0gcmxv Y2F0b3IuYmFja2VuZCA+PiAxNjsKLQltc2cuc20uYmFja2VuZF9sbyA9IHJsb2NhdG9yLmJhY2tl bmQgJiAweGZmZmY7Ci0JbXNnLnNtLnJsb2NhdG9yID0gcmxvY2F0b3IubG9jYXRvcjsKKwltc2cu c20uYmFja2VuZF9oaSA9IGJhY2tlbmQgPj4gMTY7CisJbXNnLnNtLmJhY2tlbmRfbG8gPSBiYWNr ZW5kICYgMHhmZmZmOworCW1zZy5zbS5ybG9jYXRvciA9IHJsb2NhdG9yOwogCS8qIGNoZWNrIEFk ZENhdGNhY2hlSW52YWxpZGF0aW9uTWVzc2FnZSgpIGZvciBhbiBleHBsYW5hdGlvbiAqLwogCVZB TEdSSU5EX01BS0VfTUVNX0RFRklORUQoJm1zZywgc2l6ZW9mKG1zZykpOwogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9jYWNoZS9yZWxjYWNoZS5jIGIvc3JjL2JhY2tlbmQvdXRpbHMv Y2FjaGUvcmVsY2FjaGUuYwppbmRleCBkZmRhMGFiN2Q2OS4uNDEwYTNiODBmZDYgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvY2FjaGUvcmVsY2FjaGUuYwpAQCAtNDE5LDcgKzQxOSw3IEBAIEFsbG9jYXRlUmVsYXRp b25EZXNjKEZvcm1fcGdfY2xhc3MgcmVscCkKIAlyZWxhdGlvbiA9IChSZWxhdGlvbikgcGFsbG9j MChzaXplb2YoUmVsYXRpb25EYXRhKSk7CiAKIAkvKiBtYWtlIHN1cmUgcmVsYXRpb24gaXMgbWFy a2VkIGFzIGhhdmluZyBubyBvcGVuIGZpbGUgeWV0ICovCi0JcmVsYXRpb24tPnJkX3NtZ3IgPSBO VUxMOworCU1lbVNldChyZWxhdGlvbi0+cmRfc21nciwgMCwgc2l6ZW9mKHJlbGF0aW9uLT5yZF9z bWdyKSk7CiAKIAkvKgogCSAqIENvcHkgdGhlIHJlbGF0aW9uIHR1cGxlIGZvcm0KQEAgLTEyNDgs NyArMTI0OCw3IEBAIHJldHJ5OgogCVJlbGF0aW9uSW5pdFBoeXNpY2FsQWRkcihyZWxhdGlvbik7 CiAKIAkvKiBtYWtlIHN1cmUgcmVsYXRpb24gaXMgbWFya2VkIGFzIGhhdmluZyBubyBvcGVuIGZp bGUgeWV0ICovCi0JcmVsYXRpb24tPnJkX3NtZ3IgPSBOVUxMOworCU1lbVNldChyZWxhdGlvbi0+ cmRfc21nciwgMCwgc2l6ZW9mKHJlbGF0aW9uLT5yZF9zbWdyKSk7CiAKIAkvKgogCSAqIG5vdyB3 ZSBjYW4gZnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgcGdfY2xhc3NfdHVwbGUKQEAgLTE4 NzcsNyArMTg3Nyw3IEBAIGZvcm1yZGVzYyhjb25zdCBjaGFyICpyZWxhdGlvbk5hbWUsIE9pZCBy ZWxhdGlvblJlbHR5cGUsCiAJcmVsYXRpb24gPSAoUmVsYXRpb24pIHBhbGxvYzAoc2l6ZW9mKFJl bGF0aW9uRGF0YSkpOwogCiAJLyogbWFrZSBzdXJlIHJlbGF0aW9uIGlzIG1hcmtlZCBhcyBoYXZp bmcgbm8gb3BlbiBmaWxlIHlldCAqLwotCXJlbGF0aW9uLT5yZF9zbWdyID0gTlVMTDsKKwlNZW1T ZXQocmVsYXRpb24tPnJkX3NtZ3IsIDAsIHNpemVvZihyZWxhdGlvbi0+cmRfc21ncikpOwogCiAJ LyoKIAkgKiBpbml0aWFsaXplIHJlZmVyZW5jZSBjb3VudDogMSBiZWNhdXNlIGl0IGlzIG5haWxl ZCBpbiBjYWNoZQpAQCAtMjcwMSw3ICsyNzAxLDggQEAgUmVsYXRpb25DbGVhclJlbGF0aW9uKFJl bGF0aW9uIHJlbGF0aW9uLCBib29sIHJlYnVpbGQpCiAJCX0KIAogCQkvKiByZF9zbWdyIG11c3Qg bm90IGJlIHN3YXBwZWQsIGR1ZSB0byBiYWNrLWxpbmtzIGZyb20gc21nciBsZXZlbCAqLwotCQlT V0FQRklFTEQoU01nclJlbGF0aW9uLCByZF9zbWdyKTsKKwkJZm9yIChpbnQgaSA9IDA7IGkgPD0g TUFYX0ZPUktOVU07IGkrKykKKwkJCVNXQVBGSUVMRChTTWdyRmlsZUhhbmRsZSwgcmRfc21ncltp XSk7CiAJCS8qIHJkX3JlZmNudCBtdXN0IGJlIHByZXNlcnZlZCAqLwogCQlTV0FQRklFTEQoaW50 LCByZF9yZWZjbnQpOwogCQkvKiBpc25haWxlZCBzaG91bGRuJ3QgY2hhbmdlICovCkBAIC0zNTMy LDcgKzM1MzMsNyBAQCBSZWxhdGlvbkJ1aWxkTG9jYWxSZWxhdGlvbihjb25zdCBjaGFyICpyZWxu YW1lLAogCXJlbCA9IChSZWxhdGlvbikgcGFsbG9jMChzaXplb2YoUmVsYXRpb25EYXRhKSk7CiAK IAkvKiBtYWtlIHN1cmUgcmVsYXRpb24gaXMgbWFya2VkIGFzIGhhdmluZyBubyBvcGVuIGZpbGUg eWV0ICovCi0JcmVsLT5yZF9zbWdyID0gTlVMTDsKKwlNZW1TZXQocmVsLT5yZF9zbWdyLCAwLCBz aXplb2YocmVsLT5yZF9zbWdyKSk7CiAKIAkvKiBtYXJrIGl0IG5haWxlZCBpZiBhcHByb3ByaWF0 ZSAqLwogCXJlbC0+cmRfaXNuYWlsZWQgPSBuYWlsaXQ7CkBAIC0zNzY0LDcgKzM3NjUsNiBAQCBS ZWxhdGlvblNldE5ld1JlbGZpbGVudW1iZXIoUmVsYXRpb24gcmVsYXRpb24sIGNoYXIgcGVyc2lz dGVuY2UpCiAJICovCiAJaWYgKElzQmluYXJ5VXBncmFkZSkKIAl7Ci0JCVNNZ3JSZWxhdGlvbglz cmVsOwogCiAJCS8qCiAJCSAqIER1cmluZyBhIGJpbmFyeSB1cGdyYWRlLCB3ZSB1c2UgdGhpcyBj b2RlIHBhdGggdG8gZW5zdXJlIHRoYXQKQEAgLTM3ODEsOSArMzc4MSwxNCBAQCBSZWxhdGlvblNl dE5ld1JlbGZpbGVudW1iZXIoUmVsYXRpb24gcmVsYXRpb24sIGNoYXIgcGVyc2lzdGVuY2UpCiAJ CSAqIGZhaWxzIGF0IHRoaXMgc3RhZ2UsIHRoZSBuZXcgY2x1c3RlciB3aWxsIG5lZWQgdG8gYmUg cmVjcmVhdGVkCiAJCSAqIGFueXdheS4KIAkJICovCi0JCXNyZWwgPSBzbWdyb3BlbihyZWxhdGlv bi0+cmRfbG9jYXRvciwgcmVsYXRpb24tPnJkX2JhY2tlbmQpOwotCQlzbWdyZG91bmxpbmthbGwo JnNyZWwsIDEsIGZhbHNlKTsKLQkJc21ncmNsb3NlKHNyZWwpOworCQlGb3JrTnVtYmVyIGZvcmtz W01BWF9GT1JLTlVNICsgMV07CisJCWZvciAoaW50IGkgPSAwOyBpIDw9IE1BWF9GT1JLTlVNOyBp ICsrKSAKKwkJeworCQkJc21ncm9wZW4ocmVsYXRpb24tPnJkX2xvY2F0b3IsIHJlbGF0aW9uLT5y ZF9iYWNrZW5kLCBpKTsKKwkJCWZvcmtzW2ldID0gaTsKKwkJfQorCQkKKwkJc21ncnVubGlua19t dWx0aShyZWxhdGlvbi0+cmRfbG9jYXRvciwgcmVsYXRpb24tPnJkX2JhY2tlbmQsIGZvcmtzLCBN QVhfRk9SS05VTSArIDEsIGZhbHNlKTsKIAl9CiAJZWxzZQogCXsKQEAgLTM4MTEsNyArMzgxNiw3 IEBAIFJlbGF0aW9uU2V0TmV3UmVsZmlsZW51bWJlcihSZWxhdGlvbiByZWxhdGlvbiwgY2hhciBw ZXJzaXN0ZW5jZSkKIAllbHNlIGlmIChSRUxLSU5EX0hBU19TVE9SQUdFKHJlbGF0aW9uLT5yZF9y ZWwtPnJlbGtpbmQpKQogCXsKIAkJLyogaGFuZGxlIHRoZXNlIGRpcmVjdGx5LCBhdCBsZWFzdCBm b3Igbm93ICovCi0JCVNNZ3JSZWxhdGlvbiBzcmVsOworCQlTTWdyRmlsZUhhbmRsZSBzcmVsOwog CiAJCXNyZWwgPSBSZWxhdGlvbkNyZWF0ZVN0b3JhZ2UobmV3cmxvY2F0b3IsIHBlcnNpc3RlbmNl LCB0cnVlKTsKIAkJc21ncmNsb3NlKHNyZWwpOwpAQCAtNjI5OCw3ICs2MzAzLDcgQEAgbG9hZF9y ZWxjYWNoZV9pbml0X2ZpbGUoYm9vbCBzaGFyZWQpCiAJCS8qCiAJCSAqIFJlc2V0IHRyYW5zaWVu dC1zdGF0ZSBmaWVsZHMgaW4gdGhlIHJlbGNhY2hlIGVudHJ5CiAJCSAqLwotCQlyZWwtPnJkX3Nt Z3IgPSBOVUxMOworCQlNZW1TZXQocmVsLT5yZF9zbWdyLCAwLCBzaXplb2YocmVsLT5yZF9zbWdy KSk7CiAJCWlmIChyZWwtPnJkX2lzbmFpbGVkKQogCQkJcmVsLT5yZF9yZWZjbnQgPSAxOwogCQll bHNlCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tbWdyL21jeHQuYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL21tZ3IvbWN4dC5jCmluZGV4IDBiMDA4MDJkZjcwLi5lODRjMmJjM2JlMSAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvbW1nci9tY3h0LmMKQEAgLTE2Miw5ICsxNjIsMjAgQEAgc3RhdGljIHZvaWQgTWVtb3J5 Q29udGV4dFN0YXRzUHJpbnQoTWVtb3J5Q29udGV4dCBjb250ZXh0LCB2b2lkICpwYXNzdGhydSwK ICAqIFlvdSBzaG91bGQgbm90IGRvIG1lbW9yeSBhbGxvY2F0aW9ucyB3aXRoaW4gYSBjcml0aWNh bCBzZWN0aW9uLCBiZWNhdXNlCiAgKiBhbiBvdXQtb2YtbWVtb3J5IGVycm9yIHdpbGwgYmUgZXNj YWxhdGVkIHRvIGEgUEFOSUMuIFRvIGVuZm9yY2UgdGhhdAogICogcnVsZSwgdGhlIGFsbG9jYXRp b24gZnVuY3Rpb25zIEFzc2VydCB0aGF0LgorICoKKyAqIEZJWE1FOiBieXBhc3MgdGhpcyBmb3Ig dGhlIGNyaXRpY2FsIHNlY3Rpb24gaW4gUmVjb3JkVHJhbnNhY3Rpb25Db21taXQoKQorICogZm9y IG5vdy4gSXQgZG9lcyBhIGxvdCBvZiB0aGluZ3MgdGhhdCBjYW4gYWxsb2NhdGU6CisgKiAtIGNh bGxzIFRyYW5zYWN0aW9uSWRDb21taXRUcmVlLCB3aGljaCBwaW5zIGJ1ZmZlcnMsIHdoaWNoIHJl cXVpcmVzCisgKiAgIHNwYWNlIGluIHRoZSBSZXNvdXJjZU93bmVyIGZvciB0aGUgcGluIChSZXNv dXJjZU93bmVyRW5sYXJnZUJ1ZmZlcnMoKSkKKyAqIC0gc2FtZSBmb3IgVHJhbnNhY3Rpb25UcmVl U2V0Q29tbWl0VHNEYXRhKCkgY2FsbC4KKyAqIC0gcmVhZGluZyBhIHBhZ2UgY2FuIHJlcXVpcmUg Zmx1c2hpbmcgb3RoZXIgcGFnZXMsIHdoaWNoIGluIHR1cm4KKyAqICAgY2FuIGNhbGwgQ29tcGFj dENoZWNrcG9pbnRlclJlcXVlc3RRdWV1ZSgpLCB3aGljaCBhbGxvY2F0ZXMKKyAqIC0gcmVhZGlu ZyBhIHBhZ2UgY2FsbHMgc21ncm9wZW4oKSwgd2hpY2ggYWxsb2NhdGVzIHRoZSBTTWdyRmlsZSBl bnRyeQorICogICBpZiBpdCdzIG5vdCBvcGVuIGFscmVhZHkKICAqLwogI2RlZmluZSBBc3NlcnRO b3RJbkNyaXRpY2FsU2VjdGlvbihjb250ZXh0KSBcCi0JQXNzZXJ0KENyaXRTZWN0aW9uQ291bnQg PT0gMCB8fCAoY29udGV4dCktPmFsbG93SW5Dcml0U2VjdGlvbikKKwlBc3NlcnQoQ3JpdFNlY3Rp b25Db3VudCA9PSAwIHx8IChjb250ZXh0KS0+YWxsb3dJbkNyaXRTZWN0aW9uIHx8IFwKKwkJICAg KE15UHJvYyAhPSBOVUxMICYmIChNeVByb2MtPmRlbGF5Q2hrcHRGbGFncyAmIERFTEFZX0NIS1BU X1NUQVJUICE9IDApKSkKIAogLyoKICAqIENhbGwgdGhlIGdpdmVuIGZ1bmN0aW9uIGluIHRoZSBN ZW1vcnlDb250ZXh0TWV0aG9kcyBmb3IgdGhlIG1lbW9yeSBjb250ZXh0CmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX3VwZ3JhZGUvZmlsZS5jIGIvc3JjL2Jpbi9wZ191cGdyYWRlL2ZpbGUuYwppbmRl eCBlZDg3NDUwN2ZmNC4uMjdmMjQwNDcwYmEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFk ZS9maWxlLmMKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL2ZpbGUuYwpAQCAtMjAsNiArMjAsNyBA QAogI2VuZGlmCiAKICNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcGRlZnMuaCIKKyNpbmNs dWRlICJhY2Nlc3Mvc2xydWRlZnMuaCIKICNpbmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCiAj aW5jbHVkZSAicGdfdXBncmFkZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmcGFnZS5oIgpAQCAt MTM5LDcgKzE0MCw2IEBAIGNvcHlGaWxlKGNvbnN0IGNoYXIgKnNyYywgY29uc3QgY2hhciAqZHN0 LAogI2VuZGlmCQkJCQkJCS8qIFdJTjMyICovCiB9CiAKLQogLyoKICAqIGxpbmtGaWxlKCkKICAq CkBAIC0zMTYsNiArMzE2LDE3OSBAQCByZXdyaXRlVmlzaWJpbGl0eU1hcChjb25zdCBjaGFyICpm cm9tZmlsZSwgY29uc3QgY2hhciAqdG9maWxlLAogCWNsb3NlKHNyY19mZCk7CiB9CiAKKworLy9j cmVhdGUgbmV3IGZpbGUgYW5kIGluaXRpYWxpemUgdG8gMjU2Sworc3RhdGljIGludAoraW5pdF9u ZXdfc2xydV9maWxlKEZJTEUgKiBmcCkKK3sgCisJaW50IGZkOworCWludCByZXM7CisJCisJZmQg PSBmaWxlbm8oZnApOworCXJlcyA9IGZ0cnVuY2F0ZShmZCwgQkxDS1NaICogU0xSVV9QQUdFU19Q RVJfU0VHTUVOVCk7CisJcmV0dXJuIHJlczsKK30KKworaW50IAorY29weV90b19uZXdfZm9ybWF0 KGNvbnN0IGNoYXIgKm9sZF9zdWJkaXIsIGNvbnN0IGNoYXIgKm5ld19zdWJkaXIsIGludCBlbGVt ZW50X3NpemUpIAoreworCURJUiAqZHI7CisJc3RydWN0IGRpcmVudCAqZGU7CisJCisJc2l6ZV90 IAlyZWFkX2l0ZW1zOworCXNpemVfdCAJbl9pdGVtczsKKwlzaXplX3QgCXRvX3JlYWRfaXRlbXM7 CisJc2l6ZV90IAl3cml0ZV9pdGVtczsKKwlzaXplX3QgCXBhZ2VzX3dyaXR0ZW47CisJc2l6ZV90 IAl3cml0ZV9vZmZzZXQ7CisKKwljaGFyICogCXJlYWRfZmlsZTsJCisJY2hhciAqIAl3cml0ZV9m aWxlOworCQorCWludCAJcmVzOworCWludCAJd3JpdGVfZmlsZV9zZWdubzsKKwlpbnQgCXRvdGFs X3JlYWRfZmlsZXM7CisJCisJRklMRSAqIAlvbGRfZmQ7IAorCUZJTEUgKiAJbmV3X2ZwOworCisj ZGVmaW5lIE1BWEJVRlNJWkUgKEJMQ0tTWiAtIFNpemVPZlBhZ2VIZWFkZXJEYXRhKQorCisJY2hh cglvbGRfcGF0aFtNQVhQR1BBVEhdOworCWNoYXIJbmV3X3BhdGhbTUFYUEdQQVRIXTsKKwlQR0Fs aWduZWRCbG9jayBwZ19idWY7CisJQmxvY2tOdW1iZXIgYmxrbm87IC8vdHJhY2sgYWJvc2x1dGUg YmxvY2sgbnVtYmVyCisJCisKKwlzdHJ1Y3QgCWRpcmVudCoqIGFsbF9kaXJlbnRzOworCisKKwlz bnByaW50ZihvbGRfcGF0aCwgc2l6ZW9mKG9sZF9wYXRoKSwgIiVzLyVzIiwgb2xkX2NsdXN0ZXIu cGdkYXRhLCBvbGRfc3ViZGlyKTsKKwlzbnByaW50ZihuZXdfcGF0aCwgc2l6ZW9mKG5ld19wYXRo KSwgIiVzLyVzIiwgbmV3X2NsdXN0ZXIucGdkYXRhLCBuZXdfc3ViZGlyKTsKKworCS8qIAorCSAq IGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGZpdCAKKwkgKiBpbnNpZGUg QkxDS1NaIC0gU2l6ZU9mUGFnZUhlYWRlckRhdGEKKwkgKi8KKworCW5faXRlbXMgPSAoc2l6ZV90 KSAoTUFYQlVGU0laRSAvIGVsZW1lbnRfc2l6ZSk7IAorCQorCS8qIG51bWJlciBvZiBpdGVtcyB0 byByZWFkIGluIGF0IGEgdGltZSAqLworCXRvX3JlYWRfaXRlbXMgPSBuX2l0ZW1zOworCQorCS8v YnVmc2l6ZSA9IChzaXplX3QpIChuX2l0ZW1zICogZWxlbWVudF9zaXplKTsgCisJd3JpdGVfZmls ZV9zZWdubyA9IDA7IC8qIHRyYWNrIHdoaWNoIHNlZ21lbnQgd2UgYXJlIHdyaXRpbmcgaW50byAq LworCXdyaXRlX29mZnNldCA9IChzaXplX3QpIChTaXplT2ZQYWdlSGVhZGVyRGF0YSk7IAorCisJ ZHIgPSBvcGVuZGlyKChjaGFyICopb2xkX3BhdGgpOworCWlmIChkciA9PSBOVUxMKQorCQlyZXR1 cm4gLTE7CisKKwl3cml0ZV9maWxlID0gcHNwcmludGYoIiVzLyUwNFgiLCBuZXdfcGF0aCwgd3Jp dGVfZmlsZV9zZWdubyk7CisJCisJbmV3X2ZwID0gZm9wZW4od3JpdGVfZmlsZSwgIndiIik7CisJ CisJaWYgKG5ld19mcCA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlyZXMgPSBpbml0X25ld19z bHJ1X2ZpbGUobmV3X2ZwKTsKKwlpZiAocmVzIDwgMCkJCisJCXJldHVybiAtMTsKKworCWlmIChy ZXMgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlwYWdlc193cml0dGVuID0gMDsKKwlibGtubyA9IDA7 IC8qIGFic29sdXRlIGJsa25vICovCisKKwlhbGxfZGlyZW50cyA9IGdldF9zb3J0ZWRfaGV4X2Zp bGVzKG9sZF9wYXRoLCAmdG90YWxfcmVhZF9maWxlcyk7CisKKwl3cml0ZV9pdGVtcyA9IDA7CisJ Zm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbF9yZWFkX2ZpbGVzOyBpKyspCisJeworCQlkZSA9IGFs bF9kaXJlbnRzW2ldOworCQkKKwkJaWYgKCghc3RyY21wKChjaGFyICopIGRlLT5kX25hbWUsICIu IikpIHx8ICFzdHJjbXAoKGNoYXIgKikgZGUtPmRfbmFtZSwgIi4uIikpCisJIAl7CisJCQljb250 aW51ZTsKKwkgCX0KKworCQlyZWFkX2ZpbGUgPSBwc3ByaW50ZigiJXMvJXMiLCAoY2hhciAqKSBv bGRfcGF0aCwgKGNoYXIgKikgZGUtPmRfbmFtZSk7CisJCQorCQlvbGRfZmQgPSBmb3BlbihyZWFk X2ZpbGUsICJyYiIpOworCQlyZWFkX2l0ZW1zID0gMDsKKwkJCisJCWRvIAorCQl7CisJCQltZW1z ZXQocGdfYnVmLmRhdGEsIDAsIEJMQ0tTWik7CQkKKwkJCXJlYWRfaXRlbXMgPSBmcmVhZChwZ19i dWYuZGF0YSArIHdyaXRlX29mZnNldCwgZWxlbWVudF9zaXplLCB0b19yZWFkX2l0ZW1zLCBvbGRf ZmQpOyAgLyogaG93IG1hbnkgaXRlbXMgd2UgcmVhZCAqLworCisJCQlpZiAodG9fcmVhZF9pdGVt cyA9PSBuX2l0ZW1zKSAvKiBub3QgZmluaXNoaW5nIHVwIGEgcGFydGlhbCByZWFkICovCisJCQl7 CisKKwkJCQkoKFBhZ2VIZWFkZXIpIHBnX2J1Zi5kYXRhKS0+cGRfbG93ZXIgPSBTaXplT2ZQYWdl SGVhZGVyRGF0YTsKKwkJCQkoKFBhZ2VIZWFkZXIpIHBnX2J1Zi5kYXRhKS0+cGRfdXBwZXIgPSBC TENLU1o7CisJCQkJKChQYWdlSGVhZGVyKSBwZ19idWYuZGF0YSktPnBkX3NwZWNpYWwgPSBCTENL U1o7CisJCQkJCisJCQkJKChQYWdlSGVhZGVyKSBwZ19idWYuZGF0YSktPnBkX2NoZWNrc3VtID0K KwkJCQkJcGdfY2hlY2tzdW1fcGFnZShwZ19idWYuZGF0YSwgYmxrbm8pOworCisJCQkJZndyaXRl KHBnX2J1Zi5kYXRhLCBTaXplT2ZQYWdlSGVhZGVyRGF0YSwgMSwgbmV3X2ZwKTsgLyogd3JpdGUg cGFnZSBoZWFkZXIgZGF0YSAqLworCQkJfQorCisJCQkKKwkJCXdyaXRlX2l0ZW1zICs9IGZ3cml0 ZShwZ19idWYuZGF0YSArIHdyaXRlX29mZnNldCwgZWxlbWVudF9zaXplLCByZWFkX2l0ZW1zLCBu ZXdfZnApOyAgLyogaW5jcmVtZW50IGhvdyBtYW55IGl0ZW1zIHdyaXR0ZW4gKi8KKwkJCQkJCQor CQkJaWYgKHdyaXRlX2l0ZW1zICUgbl9pdGVtcyA9PSAwICYmIHdyaXRlX2l0ZW1zID4gMCAmJiBl cnJubyA9PSAwKSAvKiBmaW5pc2hlZCB3cml0aW5nIGludG8gbmV3IHBhZ2UuICovCisJCQl7CisJ CQkJaWYgKHdyaXRlX2l0ZW1zID09IG5faXRlbXMgKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSAv KiBlbmQgb2Ygc2VnbWVudCAqLworCQkJCXsKKwkJCQkJZmNsb3NlKG5ld19mcCk7CisJCQkJCXBh Z2VzX3dyaXR0ZW4gPSAwOworCQkJCQl3cml0ZV9maWxlX3NlZ25vICsrOworCQkJCQl3cml0ZV9p dGVtcyA9IDA7CisJCQkJCXdyaXRlX2ZpbGUgPSBwc3ByaW50ZigiJXMvJTA0WCIsIG5ld19wYXRo LCB3cml0ZV9maWxlX3NlZ25vKTsKKwkJCQkJbmV3X2ZwID0gZm9wZW4oKGNoYXIgKil3cml0ZV9m aWxlLCAid2IiKTsKKwkJCQkJcmVzID0gaW5pdF9uZXdfc2xydV9maWxlKG5ld19mcCk7CisJCQkJ CWlmIChyZXMgPCAwIHx8IG5ld19mcCA9PSBOVUxMKQorCQkJCQl7CisJCQkJCQlmY2xvc2UobmV3 X2ZwKTsKKwkJCQkJCWNsZWFudXBfZGlyZW50cyhhbGxfZGlyZW50cywgdG90YWxfcmVhZF9maWxl cyk7CisJCQkJCQkKKwkJCQkJfQorCQkJCX0gZWxzZSB7IC8qIGVuZCBvZiBwYWdlIGJ1dCBub3Qg c2VnbWVudCAqLworCQkJCQkvL2ZmbHVzaChuZXdfZnApOworCQkJCQlwYWdlc193cml0dGVuICsr OyAKKwkJCQl9CisKKwkJCQlibGtubysrOyAKKworCQkJCXRvX3JlYWRfaXRlbXMgPSBuX2l0ZW1z OyAvKiB0b19yZWFkX2l0ZW1zID0gbiAqLworCQkJCXJlcyA9IGZzZWVrKG5ld19mcCwgKHBhZ2Vz X3dyaXR0ZW4gKiBCTENLU1opLCBTRUVLX1NFVCk7CisJCQkJaWYgKHJlcyA8IDApCisJCQkJewor CQkJCQlmY2xvc2UobmV3X2ZwKTsKKwkJCQkJY2xlYW51cF9kaXJlbnRzKGFsbF9kaXJlbnRzLCB0 b3RhbF9yZWFkX2ZpbGVzKTsKKwkJCQkJcmV0dXJuIC0xOworCQkJCX0KKwkJCX0gZWxzZSB7CisJ CQkJLyplbmQgb2Ygc2VnbWVudCBpbiBzb3VyY2UgZGlyKi8KKwkJCQlpZiAocmVhZF9pdGVtcyA8 IHRvX3JlYWRfaXRlbXMpIAorCQkJCXsKKwkJCQkJdG9fcmVhZF9pdGVtcyA9IG5faXRlbXMgLSBy ZWFkX2l0ZW1zOyAvKiByZWFkIHJlbWFpbmluZyBpdGVtcyAqLworCQkJCX0KKwkJCX0KKwkJfSB3 aGlsZSAoIWZlb2Yob2xkX2ZkKSk7ICAvKiB1bnRpbCBlbmQgb2YgZmlsZSAqLworCQlmY2xvc2Uo b2xkX2ZkKTsKKwl9CisJZmZsdXNoKG5ld19mcCk7CisJCisJLyogZnJlZSBtZW1vcnkgbWFsbG9j J2QgYnkgc2NhbmRpciB3aGlsZSBzb3J0aW5nICovCisJY2xlYW51cF9kaXJlbnRzKGFsbF9kaXJl bnRzLCB0b3RhbF9yZWFkX2ZpbGVzKTsKKworCXJldHVybiAwOworfQorCiB2b2lkCiBjaGVja19m aWxlX2Nsb25lKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvZnVuY3Rp b24uYyBiL3NyYy9iaW4vcGdfdXBncmFkZS9mdW5jdGlvbi5jCmluZGV4IDlhZDc1NDQ2ZWVjLi4z OWIzNmExZTBlZCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191cGdyYWRlL2Z1bmN0aW9uLmMKKysr IGIvc3JjL2Jpbi9wZ191cGdyYWRlL2Z1bmN0aW9uLmMKQEAgLTcsNiArNyw3IEBACiAgKglzcmMv YmluL3BnX3VwZ3JhZGUvZnVuY3Rpb24uYwogICovCiAKKwogI2luY2x1ZGUgInBvc3RncmVzX2Zl LmgiCiAKICNpbmNsdWRlICJhY2Nlc3MvdHJhbnNhbS5oIgpAQCAtNDIsNiArNDMsNDMgQEAgbGli cmFyeV9uYW1lX2NvbXBhcmUoY29uc3Qgdm9pZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQogCQkJKChj b25zdCBMaWJyYXJ5SW5mbyAqKSBwMiktPmRibnVtOwogfQogCisvKgorICogcXNvcnQgY29tcGFy YXRvciBmb3IgaGV4IGZpbGVuYW1lcworICovCitzdGF0aWMgaW50CitmaWxlX25hbWVfY29tcGFy ZShjb25zdCBzdHJ1Y3QgZGlyZW50ICoqIGRlXzEsIGNvbnN0IHN0cnVjdCBkaXJlbnQgKiogZGVf MikKK3sKKwlpbnQgbjE7CisJaW50IG4yOworCisKKwljaGFyICogZm5hbWVfMTsKKwljaGFyICog Zm5hbWVfMjsKKworCWZuYW1lXzEgPSAoY2hhciAqKSAoKmRlXzEpLT5kX25hbWU7CisJZm5hbWVf MiA9IChjaGFyICopICgqZGVfMiktPmRfbmFtZTsKKwkKKwlpZiAoKHN0cmNtcChmbmFtZV8xLCAi LiIpKSB8fCBzdHJjbXAoZm5hbWVfMSwgIi4uIikpIAorCXsKKwkJbjEgPSAoaW50KSBzdHJ0b2wo Zm5hbWVfMSwgTlVMTCwgMTYpOworCX0gZWxzZSB7CisJCW4xID0gLTE7CisJfQorCisJaWYgKChz dHJjbXAoZm5hbWVfMiwgIi4iKSkgfHwgc3RyY21wKGZuYW1lXzIsICIuLiIpKQorCXsKKwkJbjIg PSAoaW50KSBzdHJ0b2woZm5hbWVfMiwgTlVMTCwgMTYpOworCX0gZWxzZSB7CisJCW4yID0gLTE7 CisJfQorCisJaWYgKG4xID09IG4yKSAKKwl7CisJCXJldHVybiAxOyAvL2FyYml0cmFyaWx5IHNl bGVjdCB0aGUgZmlyc3QgaW5wdXQKKwl9IGVsc2UgeworCQlyZXR1cm4gbjEgLSBuMjsKKwl9Cit9 CiAKIC8qCiAgKiBnZXRfbG9hZGFibGVfbGlicmFyaWVzKCkKQEAgLTEwOSw2ICsxNDcsMzQgQEAg Z2V0X2xvYWRhYmxlX2xpYnJhcmllcyh2b2lkKQogfQogCiAKKy8qCisgKiBnZXRfc29ydGVkX2hl eF9maWxlcygpCisgKiBnaXZlbiB0aGUgZmlsZXBhdGggb2YgYSBkaXJlY3RvcnksCisgKiByZXR1 cm4gYXJyYXkgb2YgY2hpbGQgZGlyZW50cyB3aXRoIGhleCBmaWxlbmFtZXMgZS5nICcwMDBBJwor ICogaW4gc29ydGVkIG9yZGVyCisgKi8KK3N0cnVjdCBkaXJlbnQqKiAKK2dldF9zb3J0ZWRfaGV4 X2ZpbGVzKGNoYXIgKiBkciwgaW50ICogc2l6ZSkKK3sKKwlzdHJ1Y3QgZGlyZW50ICoqZW50cnlf bGlzdDsKKworCSpzaXplID0gc2NhbmRpcihkciwgJmVudHJ5X2xpc3QsIE5VTEwsIGZpbGVfbmFt ZV9jb21wYXJlKTsKKwlpZiAoKnNpemUgPCAwKQorCXsKKwkJcmV0dXJuIE5VTEw7IC8vZXJyb3IK Kwl9CisJcmV0dXJuIGVudHJ5X2xpc3Q7Cit9CisKK3ZvaWQKK2NsZWFudXBfZGlyZW50cyhzdHJ1 Y3QgZGlyZW50ICoqIGFsbF9kaXJlbnRzLCBpbnQgdG90YWxfcmVhZF9maWxlcykKK3sJCisJZm9y IChpbnQgaSA9IDA7IGkgPCB0b3RhbF9yZWFkX2ZpbGVzOyBpKyspCisJeworCQkgZnJlZSgoc3Ry dWN0IGRpcmVudCAqKikgYWxsX2RpcmVudHNbaV0pOworCX0KKwlmcmVlKChzdHJ1Y3QgZGlyZW50 ICoqKSBhbGxfZGlyZW50cyk7Cit9CiAvKgogICogY2hlY2tfbG9hZGFibGVfbGlicmFyaWVzKCkK ICAqCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5jIGIvc3JjL2Jp bi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuYwppbmRleCBlNTU5N2QzMTA1Mi4uOGJiMDc4MzU4Nzcg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMKKysrIGIvc3JjL2Jp bi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuYwpAQCAtMzgsMTggKzM4LDIyIEBACiAKICNpbmNsdWRl ICJwb3N0Z3Jlc19mZS5oIgogCisjaW5jbHVkZSA8ZGlyZW50Lmg+CiAjaW5jbHVkZSA8dGltZS5o PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgogCiAjaWZkZWYgSEFWRV9MQU5HSU5GT19ICiAjaW5jbHVk ZSA8bGFuZ2luZm8uaD4KICNlbmRpZgogCisjaW5jbHVkZSAiYWNjZXNzL3NscnVkZWZzLmgiCiAj aW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzc19kLmgiCiAjaW5jbHVkZSAiY29tbW9uL2ZpbGVfcGVy bS5oIgogI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCiAjaW5jbHVkZSAiY29tbW9uL3Jlc3Ry aWN0ZWRfdG9rZW4uaCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJpbmdfdXRpbHMuaCIKICNpbmNs dWRlICJwZ191cGdyYWRlLmgiCisjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCiAKIHN0YXRp YyB2b2lkIHByZXBhcmVfbmV3X2NsdXN0ZXIodm9pZCk7CiBzdGF0aWMgdm9pZCBwcmVwYXJlX25l d19nbG9iYWxzKHZvaWQpOwpAQCAtNTksNiArNjMsMTAgQEAgc3RhdGljIHZvaWQgc2V0X2Zyb3pl bnhpZHMoYm9vbCBtaW5teGlkX29ubHkpOwogc3RhdGljIHZvaWQgbWFrZV9vdXRwdXRkaXJzKGNo YXIgKnBnZGF0YSk7CiBzdGF0aWMgdm9pZCBzZXR1cChjaGFyICphcmd2MCwgYm9vbCAqbGl2ZV9j aGVjayk7CiAKKworI2RlZmluZSBNQVhCVUZTSVpFIChCTENLU1ogLSBTaXplT2ZQYWdlSGVhZGVy RGF0YSkKKyNkZWZpbmUgU0xSVV9QQUdFU19QRVJfU0VHTUVOVCAzMgorCiBDbHVzdGVySW5mbyBv bGRfY2x1c3RlciwKIAkJCW5ld19jbHVzdGVyOwogT1NJbmZvCQlvc19pbmZvOwpAQCAtNTczLDEx ICs1ODEsMzYgQEAgY29weV94YWN0X3hsb2dfeGlkKHZvaWQpCiAJICogQ29weSBvbGQgY29tbWl0 IGxvZ3MgdG8gbmV3IGRhdGEgZGlyLiBwZ19jbG9nIGhhcyBiZWVuIHJlbmFtZWQgdG8KIAkgKiBw Z194YWN0IGluIHBvc3QtMTAgY2x1c3RlcnMuCiAJICovCi0JY29weV9zdWJkaXJfZmlsZXMoR0VU X01BSk9SX1ZFUlNJT04ob2xkX2NsdXN0ZXIubWFqb3JfdmVyc2lvbikgPD0gOTA2ID8KLQkJCQkJ ICAicGdfY2xvZyIgOiAicGdfeGFjdCIsCi0JCQkJCSAgR0VUX01BSk9SX1ZFUlNJT04obmV3X2Ns dXN0ZXIubWFqb3JfdmVyc2lvbikgPD0gOTA2ID8KLQkJCQkJICAicGdfY2xvZyIgOiAicGdfeGFj dCIpOworCSAKKwlpZiAob2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA8PSBDTE9HX0ZP Uk1BVENIQU5HRV9DQVRfVkVSICYmCisJCW5ld19jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIg Pj0gQ0xPR19GT1JNQVRDSEFOR0VfQ0FUX1ZFUikKKwl7CisJCQlpbnQgcmV0OworCQkJcmV0ID0g Y29weV90b19uZXdfZm9ybWF0KEdFVF9NQUpPUl9WRVJTSU9OKG9sZF9jbHVzdGVyLm1ham9yX3Zl cnNpb24pIDw9IDkwNiA/CisJCQkicGdfY2xvZyIgOiAicGdfeGFjdCIsIAorCQkJInBnX3hhY3Qi LCAxKTsKKwkJCQorCQkJaWYgKHJldCA8IDApCisJCQl7CisJCQkJcGdfZmF0YWwoImNvdWxkIG5v dCByZWZvcm1hdCBjbG9nIGZpbGVzIik7CisJCQl9CisJfQogCisJaWYgKG9sZF9jbHVzdGVyLmNv bnRyb2xkYXRhLmNhdF92ZXIgPj0gQ0xPR19GT1JNQVRDSEFOR0VfQ0FUX1ZFUiAmJgorCQluZXdf Y2x1c3Rlci5jb250cm9sZGF0YS5jYXRfdmVyID49IENMT0dfRk9STUFUQ0hBTkdFX0NBVF9WRVIp CisJeworCQljb3B5X3N1YmRpcl9maWxlcygicGdfeGFjdCIsICJwZ194YWN0Iik7CisJfQorCisJ aWYgKG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPD0gQ0xPR19GT1JNQVRDSEFOR0Vf Q0FUX1ZFUiAmJgorCQluZXdfY2x1c3Rlci5jb250cm9sZGF0YS5jYXRfdmVyIDw9IENMT0dfRk9S TUFUQ0hBTkdFX0NBVF9WRVIpCisJeworCQljb3B5X3N1YmRpcl9maWxlcyhHRVRfTUFKT1JfVkVS U0lPTihvbGRfY2x1c3Rlci5tYWpvcl92ZXJzaW9uKSA8PSA5MDYgPworCQkJCQkicGdfY2xvZyIg OiAicGdfeGFjdCIsCisJCQkJCUdFVF9NQUpPUl9WRVJTSU9OKG5ld19jbHVzdGVyLm1ham9yX3Zl cnNpb24pIDw9IDkwNiA/CisJCQkJCSJwZ19jbG9nIiA6ICJwZ194YWN0Iik7CisJfQorCQogCXBy ZXBfc3RhdHVzKCJTZXR0aW5nIG9sZGVzdCBYSUQgZm9yIG5ldyBjbHVzdGVyIik7CiAJZXhlY19w cm9nKFVUSUxJVFlfTE9HX0ZJTEUsIE5VTEwsIHRydWUsIHRydWUsCiAJCQkgICJcIiVzL3BnX3Jl c2V0d2FsXCIgLWYgLXUgJXUgXCIlc1wiIiwKQEAgLTYzMywyMyArNjY2LDQ0IEBAIGNvcHlfeGFj dF94bG9nX3hpZCh2b2lkKQogCX0KIAllbHNlIGlmIChuZXdfY2x1c3Rlci5jb250cm9sZGF0YS5j YXRfdmVyID49IE1VTFRJWEFDVF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUikKIAl7CisJCWNvcHlfdG9f bmV3X2Zvcm1hdCgicGdfbXVsdGl4YWN0L29mZnNldHMiLCAicGdfbXVsdGl4YWN0L29mZnNldHMi LCBNVUxUSVhBQ1RfTUVNQkVSX0VOVFJZX1NJWkUpOworCQljb3B5X3RvX25ld19mb3JtYXQoInBn X211bHRpeGFjdC9tZW1iZXJzIiwgInBnX211bHRpeGFjdC9tZW1iZXJzIiwgTVVMVElYQUNUX09G RlNFVF9FTlRSWV9TSVpFKTsJIAorCisKKwkJcHJlcF9zdGF0dXMoIlNldHRpbmcgbmV4dCBtdWx0 aXhhY3QgSUQgYW5kIG9mZnNldCBmb3IgbmV3IGNsdXN0ZXIiKTsKKwogCQkvKgorCQkgKiB3ZSBw cmVzZXJ2ZSBhbGwgZmlsZXMgYW5kIGNvbnRlbnRzLCBzbyB3ZSBtdXN0IHByZXNlcnZlIGJvdGgg Im5leHQiCisJCSAqIGNvdW50ZXJzIGhlcmUgYW5kIHRoZSBvbGRlc3QgbXVsdGkgcHJlc2VudCBv biBzeXN0ZW0uCisJCSAqLworCQlleGVjX3Byb2coVVRJTElUWV9MT0dfRklMRSwgTlVMTCwgdHJ1 ZSwgdHJ1ZSwKKwkJCQkgICJcIiVzL3BnX3Jlc2V0d2FsXCIgLU8gJXUgLW0gJXUsJXUgXCIlc1wi IiwKKwkJCQkgIG5ld19jbHVzdGVyLmJpbmRpciwKKwkJCQkgIG9sZF9jbHVzdGVyLmNvbnRyb2xk YXRhLmNoa3BudF9ueHRteG9mZiwKKwkJCQkgIG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3Bu dF9ueHRtdWx0aSwKKwkJCQkgIG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9vbGRzdE11 bHRpLAorCQkJCSAgbmV3X2NsdXN0ZXIucGdkYXRhKTsKKwkJY2hlY2tfb2soKTsKKworCX0KKwkv KmVsc2UgaWYgKG5ld19jbHVzdGVyLmNvbnRyb2xkYXRhLmNhdF92ZXIgPj0gTVVMVElYQUNUX0ZP Uk1BVENIQU5HRV9DQVRfVkVSKQorCXsKKwkJKgogCQkgKiBSZW1vdmUgb2Zmc2V0cy8wMDAwIGZp bGUgY3JlYXRlZCBieSBpbml0ZGIgdGhhdCBubyBsb25nZXIgbWF0Y2hlcwogCQkgKiB0aGUgbmV3 IG11bHRpLXhpZCB2YWx1ZS4gICJtZW1iZXJzIiBzdGFydHMgYXQgemVybyBzbyBubyBuZWVkIHRv CiAJCSAqIHJlbW92ZSBpdC4KLQkJICovCisJCSAqCiAJCXJlbW92ZV9uZXdfc3ViZGlyKCJwZ19t dWx0aXhhY3Qvb2Zmc2V0cyIsIGZhbHNlKTsKIAogCQlwcmVwX3N0YXR1cygiU2V0dGluZyBvbGRl c3QgbXVsdGl4YWN0IElEIGluIG5ldyBjbHVzdGVyIik7Ci0KLQkJLyoKKyAJCSoKIAkJICogV2Ug ZG9uJ3QgcHJlc2VydmUgZmlsZXMgaW4gdGhpcyBjYXNlLCBidXQgaXQncyBpbXBvcnRhbnQgdGhh dCB0aGUKIAkJICogb2xkZXN0IG11bHRpIGlzIHNldCB0byB0aGUgbGF0ZXN0IHZhbHVlIHVzZWQg YnkgdGhlIG9sZCBzeXN0ZW0sIHNvCiAJCSAqIHRoYXQgbXVsdGl4YWN0LmMgcmV0dXJucyB0aGUg ZW1wdHkgc2V0IGZvciBtdWx0aXMgdGhhdCBtaWdodCBiZQogCQkgKiBwcmVzZW50IG9uIGRpc2su ICBXZSBzZXQgbmV4dCBtdWx0aSB0byB0aGUgdmFsdWUgZm9sbG93aW5nIHRoYXQ7IGl0CiAJCSAq IG1pZ2h0IGVuZCB1cCB3cmFwcGVkIGFyb3VuZCAoaS5lLiAwKSBpZiB0aGUgb2xkIGNsdXN0ZXIg aGFkCiAJCSAqIG5leHQ9TWF4TXVsdGlYYWN0SWQsIGJ1dCBtdWx0aXhhY3QuYyBjYW4gY29wZSB3 aXRoIHRoYXQganVzdCBmaW5lLgotCQkgKi8KKwkJICoKIAkJZXhlY19wcm9nKFVUSUxJVFlfTE9H X0ZJTEUsIE5VTEwsIHRydWUsIHRydWUsCiAJCQkJICAiXCIlcy9wZ19yZXNldHdhbFwiIC1tICV1 LCV1IFwiJXNcIiIsCiAJCQkJICBuZXdfY2x1c3Rlci5iaW5kaXIsCkBAIC02NTcsNyArNzExLDgg QEAgY29weV94YWN0X3hsb2dfeGlkKHZvaWQpCiAJCQkJICBvbGRfY2x1c3Rlci5jb250cm9sZGF0 YS5jaGtwbnRfbnh0bXVsdGksCiAJCQkJICBuZXdfY2x1c3Rlci5wZ2RhdGEpOwogCQljaGVja19v aygpOwotCX0KKwkJCisJfSovCiAKIAkvKiBub3cgcmVzZXQgdGhlIHdhbCBhcmNoaXZlcyBpbiB0 aGUgbmV3IGNsdXN0ZXIgKi8KIAlwcmVwX3N0YXR1cygiUmVzZXR0aW5nIFdBTCBhcmNoaXZlcyIp OwpAQCAtNjY5LDcgKzcyNCw2IEBAIGNvcHlfeGFjdF94bG9nX3hpZCh2b2lkKQogCWNoZWNrX29r KCk7CiB9CiAKLQogLyoKICAqCXNldF9mcm96ZW54aWRzKCkKICAqCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3Jh ZGUuaAppbmRleCA1ZjJhMTE2ZjIzZS4uMTllMTZlZGNjNTUgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4v cGdfdXBncmFkZS9wZ191cGdyYWRlLmgKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3Jh ZGUuaApAQCAtNyw2ICs3LDcgQEAKIAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPGFz c2VydC5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5j bHVkZSA8c3lzL3RpbWUuaD4KIApAQCAtMTEzLDcgKzExNCwxNiBAQCBleHRlcm4gY2hhciAqb3V0 cHV0X2ZpbGVzW107CiAgKiB2ZXJzaW9uIHRvIHRoaXMgdmFsdWUuICBwZ191cGdyYWRlIGJlaGF2 aW9yIGRlcGVuZHMgb24gd2hldGhlciBvbGQgYW5kIG5ldwogICogc2VydmVyIHZlcnNpb25zIGFy ZSBib3RoIG5ld2VyIHRoYW4gdGhpcywgb3Igb25seSB0aGUgbmV3IG9uZSBpcy4KICAqLwotI2Rl ZmluZSBNVUxUSVhBQ1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIgMjAxMzAxMjMxCisKKy8qCisgKiBw YWdlIGhlYWRlciBmb3JtYXQgY2hhbmdlCisgKi8KKyNkZWZpbmUgTVVMVElYQUNUX0ZPUk1BVENI QU5HRV9DQVRfVkVSIDIwMjIwOTE0MQorCisvKiAKKyAqIHBhZ2UgaGVhZGVyIGZvcm1hdCBjaGFu Z2UgCisgKi8KKyNkZWZpbmUgQ0xPR19GT1JNQVRDSEFOR0VfQ0FUX1ZFUiAyMDIyMTAxNDEKIAog LyoKICAqIGxhcmdlIG9iamVjdCBjaHVuayBzaXplIGFkZGVkIHRvIHBnX2NvbnRyb2xkYXRhLApA QCAtMTIyLDcgKzEzMiw3IEBAIGV4dGVybiBjaGFyICpvdXRwdXRfZmlsZXNbXTsKICNkZWZpbmUg TEFSR0VfT0JKRUNUX1NJWkVfUEdfQ09OVFJPTF9WRVIgOTQyCiAKIC8qCi0gKiBjaGFuZ2UgaW4g SlNPTkIgZm9ybWF0IGR1cmluZyA5LjQgYmV0YQorICogYWRkaXRpb24gb2YgcGFnZSBoZWFkZXIg CiAgKi8KICNkZWZpbmUgSlNPTkJfRk9STUFUX0NIQU5HRV9DQVRfVkVSIDIwMTQwOTI5MQogCkBA IC0zNzgsNiArMzg4LDkgQEAgdm9pZAkJcmV3cml0ZVZpc2liaWxpdHlNYXAoY29uc3QgY2hhciAq ZnJvbWZpbGUsIGNvbnN0IGNoYXIgKnRvZmlsZSwKIHZvaWQJCWNoZWNrX2ZpbGVfY2xvbmUodm9p ZCk7CiB2b2lkCQljaGVja19oYXJkX2xpbmsodm9pZCk7CiAKKworaW50IAljb3B5X3RvX25ld19m b3JtYXQoY29uc3QgY2hhciAqb2xkX3N1YmRpciwgY29uc3QgY2hhciAqbmV3X3N1YmRpciwgaW50 IGVsZW1lbnRfc2l6ZSk7CisKIC8qIGZvcGVuX3ByaXYoKSBpcyBubyBsb25nZXIgZGlmZmVyZW50 IGZyb20gZm9wZW4oKSAqLwogI2RlZmluZSBmb3Blbl9wcml2KHBhdGgsIG1vZGUpCWZvcGVuKHBh dGgsIG1vZGUpCiAKQEAgLTM4NSw2ICszOTgsOCBAQCB2b2lkCQljaGVja19oYXJkX2xpbmsodm9p ZCk7CiAKIHZvaWQJCWdldF9sb2FkYWJsZV9saWJyYXJpZXModm9pZCk7CiB2b2lkCQljaGVja19s b2FkYWJsZV9saWJyYXJpZXModm9pZCk7Cit2b2lkIAkJY2xlYW51cF9kaXJlbnRzKHN0cnVjdCBk aXJlbnQgKiogYWxsX2RpcmVudHMsIGludCB0b3RhbF9yZWFkX2ZpbGVzKTsKK3N0cnVjdCBkaXJl bnQqKiAJZ2V0X3NvcnRlZF9oZXhfZmlsZXMoY2hhciAqIGRyLCBpbnQgKiBzaXplKTsKIAogLyog aW5mby5jICovCiAKZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vcmVscGF0aC5jIGIvc3JjL2NvbW1v bi9yZWxwYXRoLmMKaW5kZXggODdkZTVmNmM5NjAuLjQ3MTVkMDZkMjg3IDEwMDY0NAotLS0gYS9z cmMvY29tbW9uL3JlbHBhdGguYworKysgYi9zcmMvY29tbW9uL3JlbHBhdGguYwpAQCAtMjIsNiAr MjIsMTYgQEAKICNpbmNsdWRlICJjb21tb24vcmVscGF0aC5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv YmFja2VuZGlkLmgiCiAKKy8qCisgKiBTTFJVIElEIHRvIHBhdGggbWFwcGluZworICovCisjZGVm aW5lIFBHX1NMUlUoc3ltbmFtZSxuYW1lLHBhdGgsc3luY2hyb25pemUpIFwKKwlwYXRoLAorCitz dGF0aWMgY2hhciAqc2xydV9kaXJzW10gPQoreworI2luY2x1ZGUgImFjY2Vzcy9zbHJ1bGlzdC5o IgorfTsKIAogLyoKICAqIExvb2t1cCB0YWJsZSBvZiBmb3JrIG5hbWUgYnkgZm9yayBudW1iZXIu CkBAIC0xMjksNyArMTM5LDcgQEAgR2V0RGF0YWJhc2VQYXRoKE9pZCBkYk9pZCwgT2lkIHNwY09p ZCkKIH0KIAogLyoKLSAqIEdldFJlbGF0aW9uUGF0aCAtIGNvbnN0cnVjdCBwYXRoIHRvIGEgcmVs YXRpb24ncyBmaWxlCisgKiBHZXRTTWdyRmlsZVBhdGggLSBjb25zdHJ1Y3QgcGF0aCB0byBhIHJl bGF0aW9uJ3MgZmlsZQogICoKICAqIFJlc3VsdCBpcyBhIHBhbGxvYydkIHN0cmluZy4KICAqCkBA IC0xMzgsMTIgKzE0OCwyNyBAQCBHZXREYXRhYmFzZVBhdGgoT2lkIGRiT2lkLCBPaWQgc3BjT2lk KQogICogdGhlIHRyb3VibGUgY29uc2lkZXJpbmcgQmFja2VuZElkIGlzIGp1c3QgaW50IGFueXdh eS4KICAqLwogY2hhciAqCi1HZXRSZWxhdGlvblBhdGgoT2lkIGRiT2lkLCBPaWQgc3BjT2lkLCBS ZWxGaWxlTnVtYmVyIHJlbE51bWJlciwKK0dldFNNZ3JGaWxlUGF0aChPaWQgZGJPaWQsIE9pZCBz cGNPaWQsIFJlbEZpbGVOdW1iZXIgcmVsTnVtYmVyLAogCQkJCWludCBiYWNrZW5kSWQsIEZvcmtO dW1iZXIgZm9ya051bWJlcikKIHsKIAljaGFyCSAgICpwYXRoOwogCi0JaWYgKHNwY09pZCA9PSBH TE9CQUxUQUJMRVNQQUNFX09JRCkKKwlpZiAoc3BjT2lkID09IFNMUlVfU1BDX09JRCkKKwl7CisJ CWlmIChkYk9pZCA+PSBsZW5ndGhvZihzbHJ1X2RpcnMpIHx8IGZvcmtOdW1iZXIgIT0gMCB8fCBi YWNrZW5kSWQgIT0gSW52YWxpZEJhY2tlbmRJZCkKKwkJeworI2lmbmRlZiBGUk9OVEVORAorCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJCSBlcnJtc2coImludmFsaWQgU0xSVSBmaWxlIGxvY2F0b3IgJXUvJXUvJXUv JXUvJXUiLAorCQkJCQkJCXNwY09pZCwgZGJPaWQsIHJlbE51bWJlciwgYmFja2VuZElkLCBmb3Jr TnVtYmVyKSkpOworI2Vsc2UKKwkJCXJldHVybiBOVUxMOworI2VuZGlmCisJCX0KKwkJcGF0aCA9 IHBzcHJpbnRmKCIlcy8lMDRYIiwgc2xydV9kaXJzW2RiT2lkXSwgcmVsTnVtYmVyKTsKKwl9CisJ ZWxzZSBpZiAoc3BjT2lkID09IEdMT0JBTFRBQkxFU1BBQ0VfT0lEKQogCXsKIAkJLyogU2hhcmVk IHN5c3RlbSByZWxhdGlvbnMgbGl2ZSBpbiB7ZGF0YWRpcn0vZ2xvYmFsICovCiAJCUFzc2VydChk Yk9pZCA9PSAwKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9jbG9nLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvY2xvZy5oCmluZGV4IGQ5OTQ0NGYwNzNmLi5hYWNmMTBjYTUyMiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2Nsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvY2xvZy5oCkBAIC00MCwxOCArNDAsMTIgQEAgZXh0ZXJuIHZvaWQgVHJhbnNhY3Rpb25JZFNl dFRyZWVTdGF0dXMoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKIAkJCQkJCQkJCSAg IFRyYW5zYWN0aW9uSWQgKnN1YnhpZHMsIFhpZFN0YXR1cyBzdGF0dXMsIFhMb2dSZWNQdHIgbHNu KTsKIGV4dGVybiBYaWRTdGF0dXMgVHJhbnNhY3Rpb25JZEdldFN0YXR1cyhUcmFuc2FjdGlvbklk IHhpZCwgWExvZ1JlY1B0ciAqbHNuKTsKIAotZXh0ZXJuIFNpemUgQ0xPR1NobWVtQnVmZmVycyh2 b2lkKTsKLWV4dGVybiBTaXplIENMT0dTaG1lbVNpemUodm9pZCk7Ci1leHRlcm4gdm9pZCBDTE9H U2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgQm9vdFN0cmFwQ0xPRyh2b2lkKTsKIGV4dGVy biB2b2lkIFN0YXJ0dXBDTE9HKHZvaWQpOwogZXh0ZXJuIHZvaWQgVHJpbUNMT0codm9pZCk7Ci1l eHRlcm4gdm9pZCBDaGVja1BvaW50Q0xPRyh2b2lkKTsKIGV4dGVybiB2b2lkIEV4dGVuZENMT0co VHJhbnNhY3Rpb25JZCBuZXdlc3RYYWN0KTsKIGV4dGVybiB2b2lkIFRydW5jYXRlQ0xPRyhUcmFu c2FjdGlvbklkIG9sZGVzdFhhY3QsIE9pZCBvbGRlc3R4aWRfZGF0b2lkKTsKIAotZXh0ZXJuIGlu dAljbG9nc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAqcGF0aCk7Ci0KIC8q IFhMT0cgc3R1ZmYgKi8KICNkZWZpbmUgQ0xPR19aRVJPUEFHRQkJMHgwMAogI2RlZmluZSBDTE9H X1RSVU5DQVRFCQkweDEwCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvY29tbWl0X3Rz LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvY29tbWl0X3RzLmgKaW5kZXggNTA4N2NkY2U1MWUuLjYw NWRjNzViM2IwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvY29tbWl0X3RzLmgKKysr IGIvc3JjL2luY2x1ZGUvYWNjZXNzL2NvbW1pdF90cy5oCkBAIC0yNyw3ICsyNyw2IEBAIGV4dGVy biBib29sIFRyYW5zYWN0aW9uSWRHZXRDb21taXRUc0RhdGEoVHJhbnNhY3Rpb25JZCB4aWQsCiBl eHRlcm4gVHJhbnNhY3Rpb25JZCBHZXRMYXRlc3RDb21taXRUc0RhdGEoVGltZXN0YW1wVHogKnRz LAogCQkJCQkJCQkJCSAgIFJlcE9yaWdpbklkICpub2RlaWQpOwogCi1leHRlcm4gU2l6ZSBDb21t aXRUc1NobWVtQnVmZmVycyh2b2lkKTsKIGV4dGVybiBTaXplIENvbW1pdFRzU2htZW1TaXplKHZv aWQpOwogZXh0ZXJuIHZvaWQgQ29tbWl0VHNTaG1lbUluaXQodm9pZCk7CiBleHRlcm4gdm9pZCBC b290U3RyYXBDb21taXRUcyh2b2lkKTsKQEAgLTQxLDggKzQwLDYgQEAgZXh0ZXJuIHZvaWQgU2V0 Q29tbWl0VHNMaW1pdChUcmFuc2FjdGlvbklkIG9sZGVzdFhhY3QsCiAJCQkJCQkJIFRyYW5zYWN0 aW9uSWQgbmV3ZXN0WGFjdCk7CiBleHRlcm4gdm9pZCBBZHZhbmNlT2xkZXN0Q29tbWl0VHNYaWQo VHJhbnNhY3Rpb25JZCBvbGRlc3RYYWN0KTsKIAotZXh0ZXJuIGludAljb21taXR0c3N5bmNmaWxl dGFnKGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpOwotCiAvKiBYTE9HIHN0dWZmICov CiAjZGVmaW5lIENPTU1JVF9UU19aRVJPUEFHRQkJMHgwMAogI2RlZmluZSBDT01NSVRfVFNfVFJV TkNBVEUJCTB4MTAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaAppbmRleCAyNDZmNzU3ZjZhYi4uNTg0OGU0 MDcyYmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmgKQEAgLTExOCw5ICsxMTgsNiBAQCBleHRlcm4g Ym9vbCBNdWx0aVhhY3RJZFByZWNlZGVzKE11bHRpWGFjdElkIG11bHRpMSwgTXVsdGlYYWN0SWQg bXVsdGkyKTsKIGV4dGVybiBib29sIE11bHRpWGFjdElkUHJlY2VkZXNPckVxdWFscyhNdWx0aVhh Y3RJZCBtdWx0aTEsCiAJCQkJCQkJCQkJTXVsdGlYYWN0SWQgbXVsdGkyKTsKIAotZXh0ZXJuIGlu dAltdWx0aXhhY3RvZmZzZXRzc3luY2ZpbGV0YWcoY29uc3QgRmlsZVRhZyAqZnRhZywgY2hhciAq cGF0aCk7Ci1leHRlcm4gaW50CW11bHRpeGFjdG1lbWJlcnNzeW5jZmlsZXRhZyhjb25zdCBGaWxl VGFnICpmdGFnLCBjaGFyICpwYXRoKTsKLQogZXh0ZXJuIHZvaWQgQXRFT1hhY3RfTXVsdGlYYWN0 KHZvaWQpOwogZXh0ZXJuIHZvaWQgQXRQcmVwYXJlX011bHRpWGFjdCh2b2lkKTsKIGV4dGVybiB2 b2lkIFBvc3RQcmVwYXJlX011bHRpWGFjdChUcmFuc2FjdGlvbklkIHhpZCk7CmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaApp bmRleCBhOGE0MjRkOTJkYS4uNGIzZTJlNGEzNGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9zbHJ1LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnUuaApAQCAtMSw3ICsxLDcg QEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIHNscnUuaAotICoJCVNpbXBsZSBMUlUgYnVm ZmVyaW5nIGZvciB0cmFuc2FjdGlvbiBzdGF0dXMgbG9nZmlsZXMKKyAqCQlCdWZmZXJpbmcgZm9y IHRyYW5zYWN0aW9uIHN0YXR1cyBsb2dmaWxlcwogICoKICAqIFBvcnRpb25zIENvcHlyaWdodCAo YykgMTk5Ni0yMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENh bGlmb3JuaWEKQEAgLTE0LDkgKzE0LDM2IEBACiAjZGVmaW5lIFNMUlVfSAogCiAjaW5jbHVkZSAi YWNjZXNzL3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190YWJsZXNwYWNlX2QuaCIK KyNpbmNsdWRlICJzdG9yYWdlL2J1Zi5oIgorI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9sd2xvY2suaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NtZ3IuaCIKICNp bmNsdWRlICJzdG9yYWdlL3N5bmMuaCIKIAorLyogUHNldWRvIGRhdGFiYXNlIElEIHVzZWQgZm9y IFNMUlUgZGF0YS4gKi8KKyNkZWZpbmUgU0xSVV9TUENfSUQgOQorCisvKiBQc2V1ZG8gZGF0YWJh c2UgSURzIHVzZWQgYnkgZWFjaCBjYWNoZS4gKi8KKyNkZWZpbmUgUEdfU0xSVShzeW1uYW1lLG5h bWUscGF0aCwgc3luY2hyb25pemUpIFwKKwlzeW1uYW1lLAorCit0eXBlZGVmIGVudW0gU2xydUlk cworeworI2luY2x1ZGUgImFjY2Vzcy9zbHJ1bGlzdC5oIgorCVNMUlVfTkVYVF9JRAorfQkJCVNs cnVJZHM7CisjdW5kZWYgUEdfU0xSVQorCit0eXBlZGVmIGJvb2wgKCpTbHJ1UGFnZVByZWNlZGVz RnVuY3Rpb24pIChpbnQsIGludCk7CisKK3N0YXRpYyBpbmxpbmUgUmVsRmlsZUxvY2F0b3IKK1Ns cnVSZWxGaWxlTG9jYXRvcih1aW50MzIgc2xydV9kYl9pZCwgdWludDMyIHNlZ21lbnRfaWQpCit7 CisJUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IgPSB7U0xSVV9TUENfSUQsIHNscnVfZGJfaWQsIHNl Z21lbnRfaWR9OworCXJldHVybiBybG9jYXRvcjsKK30KKwogCiAvKgogICogRGVmaW5lIFNMUlUg c2VnbWVudCBzaXplLiAgQSBwYWdlIGlzIHRoZSBzYW1lIEJMQ0tTWiBhcyBpcyB1c2VkIGV2ZXJ5 d2hlcmUKQEAgLTMzLDE0MiArNjAsNDAgQEAKICAqLwogI2RlZmluZSBTTFJVX1BBR0VTX1BFUl9T RUdNRU5UCTMyCiAKLS8qCi0gKiBQYWdlIHN0YXR1cyBjb2Rlcy4gIE5vdGUgdGhhdCB0aGVzZSBk byBub3QgaW5jbHVkZSB0aGUgImRpcnR5IiBiaXQuCi0gKiBwYWdlX2RpcnR5IGNhbiBiZSB0cnVl IG9ubHkgaW4gdGhlIFZBTElEIG9yIFdSSVRFX0lOX1BST0dSRVNTIHN0YXRlczsKLSAqIGluIHRo ZSBsYXR0ZXIgY2FzZSBpdCBpbXBsaWVzIHRoYXQgdGhlIHBhZ2UgaGFzIGJlZW4gcmUtZGlydGll ZCBzaW5jZQotICogdGhlIHdyaXRlIHN0YXJ0ZWQuCi0gKi8KLXR5cGVkZWYgZW51bQotewotCVNM UlVfUEFHRV9FTVBUWSwJCQkvKiBidWZmZXIgaXMgbm90IGluIHVzZSAqLwotCVNMUlVfUEFHRV9S RUFEX0lOX1BST0dSRVNTLCAvKiBwYWdlIGlzIGJlaW5nIHJlYWQgaW4gKi8KLQlTTFJVX1BBR0Vf VkFMSUQsCQkJLyogcGFnZSBpcyB2YWxpZCBhbmQgbm90IGJlaW5nIHdyaXR0ZW4gKi8KLQlTTFJV X1BBR0VfV1JJVEVfSU5fUFJPR1JFU1MgLyogcGFnZSBpcyBiZWluZyB3cml0dGVuIG91dCAqLwot fSBTbHJ1UGFnZVN0YXR1czsKLQotLyoKLSAqIFNoYXJlZC1tZW1vcnkgc3RhdGUKLSAqLwotdHlw ZWRlZiBzdHJ1Y3QgU2xydVNoYXJlZERhdGEKLXsKLQlMV0xvY2sJICAgKkNvbnRyb2xMb2NrOwot Ci0JLyogTnVtYmVyIG9mIGJ1ZmZlcnMgbWFuYWdlZCBieSB0aGlzIFNMUlUgc3RydWN0dXJlICov Ci0JaW50CQkJbnVtX3Nsb3RzOwotCi0JLyoKLQkgKiBBcnJheXMgaG9sZGluZyBpbmZvIGZvciBl YWNoIGJ1ZmZlciBzbG90LiAgUGFnZSBudW1iZXIgaXMgdW5kZWZpbmVkCi0JICogd2hlbiBzdGF0 dXMgaXMgRU1QVFksIGFzIGlzIHBhZ2VfbHJ1X2NvdW50LgotCSAqLwotCWNoYXIJICAqKnBhZ2Vf YnVmZmVyOwotCVNscnVQYWdlU3RhdHVzICpwYWdlX3N0YXR1czsKLQlib29sCSAgICpwYWdlX2Rp cnR5OwotCWludAkJICAgKnBhZ2VfbnVtYmVyOwotCWludAkJICAgKnBhZ2VfbHJ1X2NvdW50Owot CUxXTG9ja1BhZGRlZCAqYnVmZmVyX2xvY2tzOwotCi0JLyoKLQkgKiBPcHRpb25hbCBhcnJheSBv ZiBXQUwgZmx1c2ggTFNOcyBhc3NvY2lhdGVkIHdpdGggZW50cmllcyBpbiB0aGUgU0xSVQotCSAq IHBhZ2VzLiAgSWYgbm90IHplcm8vTlVMTCwgd2UgbXVzdCBmbHVzaCBXQUwgYmVmb3JlIHdyaXRp bmcgcGFnZXMgKHRydWUKLQkgKiBmb3IgcGdfeGFjdCwgZmFsc2UgZm9yIG11bHRpeGFjdCwgcGdf c3VidHJhbnMsIHBnX25vdGlmeSkuICBncm91cF9sc25bXQotCSAqIGhhcyBsc25fZ3JvdXBzX3Bl cl9wYWdlIGVudHJpZXMgcGVyIGJ1ZmZlciBzbG90LCBlYWNoIGNvbnRhaW5pbmcgdGhlCi0JICog aGlnaGVzdCBMU04ga25vd24gZm9yIGEgY29udGlndW91cyBncm91cCBvZiBTTFJVIGVudHJpZXMg b24gdGhhdCBzbG90J3MKLQkgKiBwYWdlLgotCSAqLwotCVhMb2dSZWNQdHIgKmdyb3VwX2xzbjsK LQlpbnQJCQlsc25fZ3JvdXBzX3Blcl9wYWdlOwotCi0JLyotLS0tLS0tLS0tCi0JICogV2UgbWFy ayBhIHBhZ2UgIm1vc3QgcmVjZW50bHkgdXNlZCIgYnkgc2V0dGluZwotCSAqCQlwYWdlX2xydV9j b3VudFtzbG90bm9dID0gKytjdXJfbHJ1X2NvdW50OwotCSAqIFRoZSBvbGRlc3QgcGFnZSBpcyB0 aGVyZWZvcmUgdGhlIG9uZSB3aXRoIHRoZSBoaWdoZXN0IHZhbHVlIG9mCi0JICoJCWN1cl9scnVf Y291bnQgLSBwYWdlX2xydV9jb3VudFtzbG90bm9dCi0JICogVGhlIGNvdW50cyB3aWxsIGV2ZW50 dWFsbHkgd3JhcCBhcm91bmQsIGJ1dCB0aGlzIGNhbGN1bGF0aW9uIHN0aWxsCi0JICogd29ya3Mg YXMgbG9uZyBhcyBubyBwYWdlJ3MgYWdlIGV4Y2VlZHMgSU5UX01BWCBjb3VudHMuCi0JICotLS0t LS0tLS0tCi0JICovCi0JaW50CQkJY3VyX2xydV9jb3VudDsKLQotCS8qCi0JICogbGF0ZXN0X3Bh Z2VfbnVtYmVyIGlzIHRoZSBwYWdlIG51bWJlciBvZiB0aGUgY3VycmVudCBlbmQgb2YgdGhlIGxv ZzsKLQkgKiB0aGlzIGlzIG5vdCBjcml0aWNhbCBkYXRhLCBzaW5jZSB3ZSB1c2UgaXQgb25seSB0 byBhdm9pZCBzd2FwcGluZyBvdXQKLQkgKiB0aGUgbGF0ZXN0IHBhZ2UuCi0JICovCi0JaW50CQkJ bGF0ZXN0X3BhZ2VfbnVtYmVyOwotCi0JLyogU0xSVSdzIGluZGV4IGZvciBzdGF0aXN0aWNzIHB1 cnBvc2VzIChtaWdodCBub3QgYmUgdW5pcXVlKSAqLwotCWludAkJCXNscnVfc3RhdHNfaWR4Owot fSBTbHJ1U2hhcmVkRGF0YTsKLQotdHlwZWRlZiBTbHJ1U2hhcmVkRGF0YSAqU2xydVNoYXJlZDsK LQotLyoKLSAqIFNscnVDdGxEYXRhIGlzIGFuIHVuc2hhcmVkIHN0cnVjdHVyZSB0aGF0IHBvaW50 cyB0byB0aGUgYWN0aXZlIGluZm9ybWF0aW9uCi0gKiBpbiBzaGFyZWQgbWVtb3J5LgotICovCi10 eXBlZGVmIHN0cnVjdCBTbHJ1Q3RsRGF0YQotewotCVNscnVTaGFyZWQJc2hhcmVkOwotCi0JLyoK LQkgKiBXaGljaCBzeW5jIGhhbmRsZXIgZnVuY3Rpb24gdG8gdXNlIHdoZW4gaGFuZGluZyBzeW5j IHJlcXVlc3RzIG92ZXIgdG8KLQkgKiB0aGUgY2hlY2twb2ludGVyLiAgU1lOQ19IQU5ETEVSX05P TkUgdG8gZGlzYWJsZSBmc3luYyAoZWcgcGdfbm90aWZ5KS4KLQkgKi8KLQlTeW5jUmVxdWVzdEhh bmRsZXIgc3luY19oYW5kbGVyOwotCi0JLyoKLQkgKiBEZWNpZGUgd2hldGhlciBhIHBhZ2UgaXMg Im9sZGVyIiBmb3IgdHJ1bmNhdGlvbiBhbmQgYXMgYSBoaW50IGZvcgotCSAqIGV2aWN0aW5nIHBh Z2VzIGluIExSVSBvcmRlci4gIFJldHVybiB0cnVlIGlmIGV2ZXJ5IGVudHJ5IG9mIHRoZSBmaXJz dAotCSAqIGFyZ3VtZW50IGlzIG9sZGVyIHRoYW4gZXZlcnkgZW50cnkgb2YgdGhlIHNlY29uZCBh cmd1bWVudC4gIE5vdGUgdGhhdAotCSAqICFQYWdlUHJlY2VkZXMoYSxiKSAmJiAhUGFnZVByZWNl ZGVzKGIsYSkgbmVlZCBub3QgaW1wbHkgYT09YjsgaXQgYWxzbwotCSAqIGFyaXNlcyB3aGVuIHNv bWUgZW50cmllcyBhcmUgb2xkZXIgYW5kIHNvbWUgYXJlIG5vdC4gIEZvciBTTFJVcyB1c2luZwot CSAqIFNpbXBsZUxydVRydW5jYXRlKCksIHRoaXMgbXVzdCB1c2UgbW9kdWxhciBhcml0aG1ldGlj LiAgKEZvciBvdGhlcnMsCi0JICogdGhlIGJlaGF2aW9yIG9mIHRoaXMgY2FsbGJhY2sgaGFzIG5v IGZ1bmN0aW9uYWwgaW1wbGljYXRpb25zLikgIFVzZQotCSAqIFNscnVQYWdlUHJlY2VkZXNVbml0 VGVzdHMoKSBpbiBTTFJVcyBtZWV0aW5nIGl0cyBjcml0ZXJpYS4KLQkgKi8KLQlib29sCQkoKlBh Z2VQcmVjZWRlcykgKGludCwgaW50KTsKLQotCS8qCi0JICogRGlyIGlzIHNldCBkdXJpbmcgU2lt cGxlTHJ1SW5pdCBhbmQgZG9lcyBub3QgY2hhbmdlIHRoZXJlYWZ0ZXIuIFNpbmNlCi0JICogaXQn cyBhbHdheXMgdGhlIHNhbWUsIGl0IGRvZXNuJ3QgbmVlZCB0byBiZSBpbiBzaGFyZWQgbWVtb3J5 LgotCSAqLwotCWNoYXIJCURpcls2NF07Ci19IFNscnVDdGxEYXRhOwotCi10eXBlZGVmIFNscnVD dGxEYXRhICpTbHJ1Q3RsOwotCi0KLWV4dGVybiBTaXplIFNpbXBsZUxydVNobWVtU2l6ZShpbnQg bnNsb3RzLCBpbnQgbmxzbnMpOwotZXh0ZXJuIHZvaWQgU2ltcGxlTHJ1SW5pdChTbHJ1Q3RsIGN0 bCwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5zbG90cywgaW50IG5sc25zLAotCQkJCQkJICBMV0xv Y2sgKmN0bGxvY2ssIGNvbnN0IGNoYXIgKnN1YmRpciwgaW50IHRyYW5jaGVfaWQsCi0JCQkJCQkg IFN5bmNSZXF1ZXN0SGFuZGxlciBzeW5jX2hhbmRsZXIpOwotZXh0ZXJuIGludAlTaW1wbGVMcnVa ZXJvUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2Vubyk7Ci1leHRlcm4gaW50CVNpbXBsZUxydVJl YWRQYWdlKFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vLCBib29sIHdyaXRlX29rLAotCQkJCQkJCSAg VHJhbnNhY3Rpb25JZCB4aWQpOwotZXh0ZXJuIGludAlTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25s eShTbHJ1Q3RsIGN0bCwgaW50IHBhZ2VubywKLQkJCQkJCQkJCSAgIFRyYW5zYWN0aW9uSWQgeGlk KTsKLWV4dGVybiB2b2lkIFNpbXBsZUxydVdyaXRlUGFnZShTbHJ1Q3RsIGN0bCwgaW50IHNsb3Ru byk7Ci1leHRlcm4gdm9pZCBTaW1wbGVMcnVXcml0ZUFsbChTbHJ1Q3RsIGN0bCwgYm9vbCBhbGxv d19yZWRpcnRpZWQpOwogI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKLWV4dGVybiB2b2lkIFNs cnVQYWdlUHJlY2VkZXNVbml0VGVzdHMoU2xydUN0bCBjdGwsIGludCBwZXJfcGFnZSk7CitleHRl cm4gdm9pZCBTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKFNscnVQYWdlUHJlY2VkZXNGdW5jdGlv biBQYWdlUHJlY2VkZXMsCisJCQkJCQkJCQkgIGludCBwZXJfcGFnZSk7CiAjZWxzZQogI2RlZmlu ZSBTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKGN0bCwgcGVyX3BhZ2UpIGRvIHt9IHdoaWxlICgw KQogI2VuZGlmCi1leHRlcm4gdm9pZCBTaW1wbGVMcnVUcnVuY2F0ZShTbHJ1Q3RsIGN0bCwgaW50 IGN1dG9mZlBhZ2UpOwotZXh0ZXJuIGJvb2wgU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0 KFNscnVDdGwgY3RsLCBpbnQgcGFnZW5vKTsKK2V4dGVybiB2b2lkIFNpbXBsZUxydVRydW5jYXRl KGludCBzbHJ1X2lkLCBTbHJ1UGFnZVByZWNlZGVzRnVuY3Rpb24gUGFnZVByZWNlZGVzLAorCQkJ CQkJCSAgaW50IGN1dG9mZlBhZ2UpOworZXh0ZXJuIGJvb2wgU2ltcGxlTHJ1RG9lc1BoeXNpY2Fs UGFnZUV4aXN0KGludCBzbHJ1X2lkLCBpbnQgcGFnZW5vKTsKIAotdHlwZWRlZiBib29sICgqU2xy dVNjYW5DYWxsYmFjaykgKFNscnVDdGwgY3RsLCBjaGFyICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2Us Cit0eXBlZGVmIGJvb2wgKCpTbHJ1U2NhbkNhbGxiYWNrKSAoaW50IHNscnVfaWQsCisJCQkJCQkJ CSAgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCQkJICBjaGFy ICpmaWxlbmFtZSwgaW50IHNlZ3BhZ2UsCiAJCQkJCQkJCSAgdm9pZCAqZGF0YSk7Ci1leHRlcm4g Ym9vbCBTbHJ1U2NhbkRpcmVjdG9yeShTbHJ1Q3RsIGN0bCwgU2xydVNjYW5DYWxsYmFjayBjYWxs YmFjaywgdm9pZCAqZGF0YSk7Ci1leHRlcm4gdm9pZCBTbHJ1RGVsZXRlU2VnbWVudChTbHJ1Q3Rs IGN0bCwgaW50IHNlZ25vKTsKLQotZXh0ZXJuIGludAlTbHJ1U3luY0ZpbGVUYWcoU2xydUN0bCBj dGwsIGNvbnN0IEZpbGVUYWcgKmZ0YWcsIGNoYXIgKnBhdGgpOworZXh0ZXJuIGJvb2wgU2xydVNj YW5EaXJlY3RvcnkoaW50IHNscnVfaWQsIFNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJl Y2VkZXMsCisJCQkJCQkJICBTbHJ1U2NhbkNhbGxiYWNrIGNhbGxiYWNrLCB2b2lkICpkYXRhKTsK K2V4dGVybiB2b2lkIFNscnVEZWxldGVTZWdtZW50KGludCBzbHJ1X2lkLCBpbnQgc2Vnbm8pOwog CiAvKiBTbHJ1U2NhbkRpcmVjdG9yeSBwdWJsaWMgY2FsbGJhY2tzICovCi1leHRlcm4gYm9vbCBT bHJ1U2NhbkRpckNiUmVwb3J0UHJlc2VuY2UoU2xydUN0bCBjdGwsIGNoYXIgKmZpbGVuYW1lLAor ZXh0ZXJuIGJvb2wgU2xydVNjYW5EaXJDYlJlcG9ydFByZXNlbmNlKGludCBzbHJ1X2lkLAorCQkJ CQkJCQkJCVNscnVQYWdlUHJlY2VkZXNGdW5jdGlvbiBQYWdlUHJlY2VkZXMsCisJCQkJCQkJCQkJ Y2hhciAqZmlsZW5hbWUsCiAJCQkJCQkJCQkJaW50IHNlZ3BhZ2UsIHZvaWQgKmRhdGEpOwotZXh0 ZXJuIGJvb2wgU2xydVNjYW5EaXJDYkRlbGV0ZUFsbChTbHJ1Q3RsIGN0bCwgY2hhciAqZmlsZW5h bWUsIGludCBzZWdwYWdlLAorZXh0ZXJuIGJvb2wgU2xydVNjYW5EaXJDYkRlbGV0ZUFsbChpbnQg c2xydV9pZCwgU2xydVBhZ2VQcmVjZWRlc0Z1bmN0aW9uIFBhZ2VQcmVjZWRlcywKKwkJCQkJCQkJ ICAgY2hhciAqZmlsZW5hbWUsIGludCBzZWdwYWdlLAogCQkJCQkJCQkgICB2b2lkICpkYXRhKTsK IAorLyogQnVmZmVyIGFjY2VzcyAqLworZXh0ZXJuIEJ1ZmZlciBSZWFkU2xydUJ1ZmZlcihpbnQg c2xydV9pZCwgaW50IHBhZ2VubywgUmVhZEJ1ZmZlck1vZGUgbW9kZSk7CitleHRlcm4gQnVmZmVy IFplcm9TbHJ1QnVmZmVyKGludCBzbHJ1X2lkLCBpbnQgcGFnZW5vKTsKK2V4dGVybiBib29sIFBy b2JlU2xydUJ1ZmZlcihpbnQgc2xydV9pZCwgaW50IHBhZ2Vubyk7CisKKy8qIEludGVyZmFjZXMg dXNlIGJ5IHN0YXRzIHZpZXcgKi8KK2V4dGVybiBPaWQgU2xydVJlbElkQnlOYW1lKGNvbnN0IGNo YXIgKm5hbWUpOworZXh0ZXJuIGNvbnN0IGNoYXIgKlNscnVOYW1lKGludCBzbHJ1X2lkKTsKKwog I2VuZGlmCQkJCQkJCS8qIFNMUlVfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNz L3NscnVkZWZzLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWRlZnMuaApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDljZDc4ZDkyM2QKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc2xydWRlZnMuaApAQCAtMCwwICsxLDE5IEBACisvKi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqCisgKiBzbHJ1ZGVmcy5oCisgKgkJbWFjcm9zIGZvciBhY2Nlc3Npbmcg Y29udGVudHMgb2YgInNscnUiIHBhZ2VzIAorICoKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjEt MjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBzcmMvaW5j bHVkZS9hY2Nlc3Mvc2xydWRlZnMuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisj ZGVmaW5lIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQgMzIKKworI2RlZmluZSBNVUxUSVhBQ1RfTUVN QkVSX0VOVFJZX1NJWkUgMjAgCisKKyNkZWZpbmUgTVVMVElYQUNUX09GRlNFVF9FTlRSWV9TSVpF IDgKKwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3NscnVsaXN0LmggYi9zcmMvaW5j bHVkZS9hY2Nlc3Mvc2xydWxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uYzEyODlhMTMyNmMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv c2xydWxpc3QuaApAQCAtMCwwICsxLDMwIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogc2xy dWxpc3QuaAorICoKKyAqIFRoZSBTTFJVIGxpc3QgaXMga2VwdCBpbiBpdHMgb3duIHNvdXJjZSBm aWxlIGZvciBwb3NzaWJsZQorICogdXNlIGJ5IGF1dG9tYXRpYyB0b29scy4gIFRoZSBleGFjdCBy ZXByZXNlbnRhdGlvbiBvZiBhIHJtZ3IgaXMgZGV0ZXJtaW5lZAorICogYnkgdGhlIFBHX1NMUlUg bWFjcm8sIHdoaWNoIGlzIG5vdCBkZWZpbmVkIGluIHRoaXMgZmlsZTsgaXQgY2FuIGJlCisgKiBk ZWZpbmVkIGJ5IHRoZSBjYWxsZXIgZm9yIHNwZWNpYWwgcHVycG9zZXMuCisgKgorICogUG9ydGlv bnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjIsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVu aXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9pbmNsdWRlL2FjY2Vzcy9zbHJ1bGlz dC5oCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qIHRoZXJlIGlzIGRlbGliZXJhdGVs eSBub3QgYW4gI2lmbmRlZiBTTFJVTElTVF9IIGhlcmUgKi8KKworLyoKKyAqIExpc3Qgb2YgU0xS VSBlbnRyaWVzLiAgTm90ZSB0aGF0IG9yZGVyIG9mIGVudHJpZXMgZGVmaW5lcyB0aGUKKyAqIG51 bWVyaWNhbCB2YWx1ZXMgb2YgZWFjaCBTTFJVJ3MgSUQsIHdoaWNoIGlzIHVzZWQgaW4gaW4tbWVt b3J5IHN0cnVjdHVzLgorICovCisKKy8qIHN5bWJvbCBuYW1lLCB0ZXh0dWFsIG5hbWUsIHBhdGgs IHN5bmNocm9uaXplICovCitQR19TTFJVKFNMUlVfQ0xPR19JRCwgIlhhY3QiLCAicGdfeGFjdCIs IHRydWUpCitQR19TTFJVKFNMUlVfU1VCVFJBTlNfSUQsICJTdWJ0cmFucyIsICJwZ19zdWJ0cmFu cyIsIGZhbHNlKQorUEdfU0xSVShTTFJVX01VTFRJWEFDVF9PRkZTRVRfSUQsICJNdWx0aVhhY3RP ZmZzZXQiLCAicGdfbXVsdGl4YWN0L29mZnNldHMiLCB0cnVlKQorUEdfU0xSVShTTFJVX01VTFRJ WEFDVF9NRU1CRVJfSUQsICJNdWx0aVhhY3RNZW1iZXIiLCAicGdfbXVsdGl4YWN0L21lbWJlcnMi LCB0cnVlKQorUEdfU0xSVShTTFJVX0NPTU1JVF9UU19JRCwgIkNvbW1pdFRzIiwgInBnX2NvbW1p dF90cyIsIHRydWUpCitQR19TTFJVKFNMUlVfU0VSSUFMX0lELCAiU2VyaWFsIiwgInBnX3Nlcmlh bCIsIGZhbHNlKQorUEdfU0xSVShTTFJVX05PVElGWV9JRCwgIk5vdGlmeSIsICJwZ19ub3RpZnki LCBmYWxzZSkKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zdWJ0cmFucy5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL3N1YnRyYW5zLmgKaW5kZXggNDZhNDczYzc3ZjUuLjE0ZTNiZjcyMGZl IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3VidHJhbnMuaAorKysgYi9zcmMvaW5j bHVkZS9hY2Nlc3Mvc3VidHJhbnMuaApAQCAtMTgsMTEgKzE4LDggQEAgZXh0ZXJuIHZvaWQgU3Vi VHJhbnNTZXRQYXJlbnQoVHJhbnNhY3Rpb25JZCB4aWQsIFRyYW5zYWN0aW9uSWQgcGFyZW50KTsK IGV4dGVybiBUcmFuc2FjdGlvbklkIFN1YlRyYW5zR2V0UGFyZW50KFRyYW5zYWN0aW9uSWQgeGlk KTsKIGV4dGVybiBUcmFuc2FjdGlvbklkIFN1YlRyYW5zR2V0VG9wbW9zdFRyYW5zYWN0aW9uKFRy YW5zYWN0aW9uSWQgeGlkKTsKIAotZXh0ZXJuIFNpemUgU1VCVFJBTlNTaG1lbVNpemUodm9pZCk7 Ci1leHRlcm4gdm9pZCBTVUJUUkFOU1NobWVtSW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIEJvb3RT dHJhcFNVQlRSQU5TKHZvaWQpOwogZXh0ZXJuIHZvaWQgU3RhcnR1cFNVQlRSQU5TKFRyYW5zYWN0 aW9uSWQgb2xkZXN0QWN0aXZlWElEKTsKLWV4dGVybiB2b2lkIENoZWNrUG9pbnRTVUJUUkFOUyh2 b2lkKTsKIGV4dGVybiB2b2lkIEV4dGVuZFNVQlRSQU5TKFRyYW5zYWN0aW9uSWQgbmV3ZXN0WGFj dCk7CiBleHRlcm4gdm9pZCBUcnVuY2F0ZVNVQlRSQU5TKFRyYW5zYWN0aW9uSWQgb2xkZXN0WGFj dCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvc3RvcmFnZS5oIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9zdG9yYWdlLmgKaW5kZXggNDVhM2M3ODM1Y2IuLmM5NmY0NDgyMjViIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3N0b3JhZ2UuaAorKysgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3N0b3JhZ2UuaApAQCAtMjIsMTkgKzIyLDIwIEBACiAvKiBHVUMgdmFyaWFibGVz ICovCiBleHRlcm4gUEdETExJTVBPUlQgaW50IHdhbF9za2lwX3RocmVzaG9sZDsKIAotZXh0ZXJu IFNNZ3JSZWxhdGlvbiBSZWxhdGlvbkNyZWF0ZVN0b3JhZ2UoUmVsRmlsZUxvY2F0b3IgcmxvY2F0 b3IsCi0JCQkJCQkJCQkJICBjaGFyIHJlbHBlcnNpc3RlbmNlLAotCQkJCQkJCQkJCSAgYm9vbCBy ZWdpc3Rlcl9kZWxldGUpOworZXh0ZXJuIFNNZ3JGaWxlSGFuZGxlIFJlbGF0aW9uQ3JlYXRlU3Rv cmFnZShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwKKwkJCQkJCQkJCQkJY2hhciByZWxwZXJzaXN0 ZW5jZSwKKwkJCQkJCQkJCQkJYm9vbCByZWdpc3Rlcl9kZWxldGUpOwogZXh0ZXJuIHZvaWQgUmVs YXRpb25Ecm9wU3RvcmFnZShSZWxhdGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgUmVsYXRpb25QcmVz ZXJ2ZVN0b3JhZ2UoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIGJvb2wgYXRDb21taXQpOwogZXh0 ZXJuIHZvaWQgUmVsYXRpb25QcmVUcnVuY2F0ZShSZWxhdGlvbiByZWwpOwogZXh0ZXJuIHZvaWQg UmVsYXRpb25UcnVuY2F0ZShSZWxhdGlvbiByZWwsIEJsb2NrTnVtYmVyIG5ibG9ja3MpOwotZXh0 ZXJuIHZvaWQgUmVsYXRpb25Db3B5U3RvcmFnZShTTWdyUmVsYXRpb24gc3JjLCBTTWdyUmVsYXRp b24gZHN0LAotCQkJCQkJCQlGb3JrTnVtYmVyIGZvcmtOdW0sIGNoYXIgcmVscGVyc2lzdGVuY2Up OworZXh0ZXJuIHZvaWQgUmVsYXRpb25Db3B5U3RvcmFnZShTTWdyRmlsZUhhbmRsZSBzcmMsIFNN Z3JGaWxlSGFuZGxlIGRzdCwKKwkJCQkJCQkJY2hhciByZWxwZXJzaXN0ZW5jZSk7CiBleHRlcm4g Ym9vbCBSZWxGaWxlTG9jYXRvclNraXBwaW5nV0FMKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yKTsK IGV4dGVybiBTaXplIEVzdGltYXRlUGVuZGluZ1N5bmNzU3BhY2Uodm9pZCk7CiBleHRlcm4gdm9p ZCBTZXJpYWxpemVQZW5kaW5nU3luY3MoU2l6ZSBtYXhTaXplLCBjaGFyICpzdGFydEFkZHJlc3Mp OwogZXh0ZXJuIHZvaWQgUmVzdG9yZVBlbmRpbmdTeW5jcyhjaGFyICpzdGFydEFkZHJlc3MpOwor ZXh0ZXJuIHZvaWQgRHJvcFJlbGF0aW9uRmlsZXMoUmVsRmlsZUxvY2F0b3IgKmRlbHJlbHMsIGlu dCBuZGVscmVscywgYm9vbCBpc1JlZG8pOwogCiAvKgogICogVGhlc2UgZnVuY3Rpb25zIHVzZWQg dG8gYmUgaW4gc3RvcmFnZS9zbWdyL3NtZ3IuYywgd2hpY2ggZXhwbGFpbnMgdGhlCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9jb21tb24vcmVscGF0aC5oIGIvc3JjL2luY2x1ZGUvY29tbW9uL3Jl bHBhdGguaAppbmRleCA1MTFjMjE2ODJlYy4uN2YxMzI4NjQ1OTIgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2NvbW1vbi9yZWxwYXRoLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbW9uL3JlbHBhdGgu aApAQCAtNjMsNiArNjMsOSBAQCB0eXBlZGVmIGVudW0gRm9ya051bWJlcgogCiAjZGVmaW5lIEZP UktOQU1FQ0hBUlMJNAkJLyogbWF4IGNoYXJzIGZvciBhIGZvcmsgbmFtZSAqLwogCisvKiBQc2V1 ZG8gdGFibGVzcGFjZSBJRCB1c2VkIGZvciBTTFJVcy4gKi8KKyNkZWZpbmUgU0xSVV9TUENfT0lE IDkKKwogZXh0ZXJuIFBHRExMSU1QT1JUIGNvbnN0IGNoYXIgKmNvbnN0IGZvcmtOYW1lc1tdOwog CiBleHRlcm4gRm9ya051bWJlciBmb3JrbmFtZV90b19udW1iZXIoY29uc3QgY2hhciAqZm9ya05h bWUpOwpAQCAtNzMsMjUgKzc2LDI1IEBAIGV4dGVybiBpbnQJZm9ya25hbWVfY2hhcnMoY29uc3Qg Y2hhciAqc3RyLCBGb3JrTnVtYmVyICpmb3JrKTsKICAqLwogZXh0ZXJuIGNoYXIgKkdldERhdGFi YXNlUGF0aChPaWQgZGJPaWQsIE9pZCBzcGNPaWQpOwogCi1leHRlcm4gY2hhciAqR2V0UmVsYXRp b25QYXRoKE9pZCBkYk9pZCwgT2lkIHNwY09pZCwgUmVsRmlsZU51bWJlciByZWxOdW1iZXIsCitl eHRlcm4gY2hhciAqR2V0U01nckZpbGVQYXRoKE9pZCBkYk9pZCwgT2lkIHNwY09pZCwgUmVsRmls ZU51bWJlciByZWxOdW1iZXIsCiAJCQkJCQkJIGludCBiYWNrZW5kSWQsIEZvcmtOdW1iZXIgZm9y a051bWJlcik7CiAKIC8qCiAgKiBXcmFwcGVyIG1hY3JvcyBmb3IgR2V0UmVsYXRpb25QYXRoLiAg QmV3YXJlIG9mIG11bHRpcGxlCi0gKiBldmFsdWF0aW9uIG9mIHRoZSBSZWxGaWxlTG9jYXRvciBv ciBSZWxGaWxlTG9jYXRvckJhY2tlbmQgYXJndW1lbnQhCisgKiBldmFsdWF0aW9uIG9mIHRoZSBS ZWxGaWxlTG9jYXRvciBvciBTTWdyRmlsZUxvY2F0b3IgYXJndW1lbnQhCiAgKi8KIAogLyogRmly c3QgYXJndW1lbnQgaXMgYSBSZWxGaWxlTG9jYXRvciAqLwogI2RlZmluZSByZWxwYXRoYmFja2Vu ZChybG9jYXRvciwgYmFja2VuZCwgZm9ya251bSkgXAotCUdldFJlbGF0aW9uUGF0aCgocmxvY2F0 b3IpLmRiT2lkLCAocmxvY2F0b3IpLnNwY09pZCwgKHJsb2NhdG9yKS5yZWxOdW1iZXIsIFwKKwlH ZXRTTWdyRmlsZVBhdGgoKHJsb2NhdG9yKS5kYk9pZCwgKHJsb2NhdG9yKS5zcGNPaWQsIChybG9j YXRvcikucmVsTnVtYmVyLCBcCiAJCQkJCWJhY2tlbmQsIGZvcmtudW0pCiAKIC8qIEZpcnN0IGFy Z3VtZW50IGlzIGEgUmVsRmlsZUxvY2F0b3IgKi8KICNkZWZpbmUgcmVscGF0aHBlcm0ocmxvY2F0 b3IsIGZvcmtudW0pIFwKIAlyZWxwYXRoYmFja2VuZChybG9jYXRvciwgSW52YWxpZEJhY2tlbmRJ ZCwgZm9ya251bSkKIAotLyogRmlyc3QgYXJndW1lbnQgaXMgYSBSZWxGaWxlTG9jYXRvckJhY2tl bmQgKi8KLSNkZWZpbmUgcmVscGF0aChybG9jYXRvciwgZm9ya251bSkgXAotCXJlbHBhdGhiYWNr ZW5kKChybG9jYXRvcikubG9jYXRvciwgKHJsb2NhdG9yKS5iYWNrZW5kLCBmb3JrbnVtKQorLyog Rmlyc3QgYXJndW1lbnQgaXMgYSBTTWdyRmlsZUxvY2F0b3IgKi8KKyNkZWZpbmUgc21ncmZpbGVw YXRoKHNsb2NhdG9yKSBcCisJR2V0U01nckZpbGVQYXRoKChzbG9jYXRvcikubG9jYXRvci5kYk9p ZCwgKHNsb2NhdG9yKS5sb2NhdG9yLnNwY09pZCwgKHNsb2NhdG9yKS5sb2NhdG9yLnJlbE51bWJl ciwgKHNsb2NhdG9yKS5iYWNrZW5kLCAoc2xvY2F0b3IpLmZvcmtudW0pCiAKICNlbmRpZgkJCQkJ CQkvKiBSRUxQQVRIX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2lu dGVybmFscy5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKaW5kZXggZWQ4 YWEyNTE5YzAuLjJjOGNmODU2MjI0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1 Zl9pbnRlcm5hbHMuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaApA QCAtMjgxLDYgKzI4MSwxMSBAQCB0eXBlZGVmIHVuaW9uIEJ1ZmZlckRlc2NQYWRkZWQKIAljaGFy CQlwYWRbQlVGRkVSREVTQ19QQURfVE9fU0laRV07CiB9IEJ1ZmZlckRlc2NQYWRkZWQ7CiAKKyNk ZWZpbmUgQnVmZmVyR2V0RXh0ZXJuYWxMU04oYnVmSGRyKSBcCisJQnVmZmVyRXh0ZXJuYWxMU05z WyhidWZIZHIpLT5idWZfaWRdCisjZGVmaW5lIEJ1ZmZlclNldEV4dGVybmFsTFNOKGJ1Zkhkciwg bHNuKSBcCisJQnVmZmVyRXh0ZXJuYWxMU05zWyhidWZIZHIpLT5idWZfaWRdID0gKGxzbikKKwog LyoKICAqIFRoZSBQZW5kaW5nV3JpdGViYWNrICYgV3JpdGViYWNrQ29udGV4dCBzdHJ1Y3R1cmUg YXJlIHVzZWQgdG8ga2VlcAogICogaW5mb3JtYXRpb24gYWJvdXQgcGVuZGluZyBmbHVzaCByZXF1 ZXN0cyB0byBiZSBpc3N1ZWQgdG8gdGhlIE9TLgpAQCAtMzA3LDYgKzMxMiw3IEBAIHR5cGVkZWYg c3RydWN0IFdyaXRlYmFja0NvbnRleHQKIC8qIGluIGJ1Zl9pbml0LmMgKi8KIGV4dGVybiBQR0RM TElNUE9SVCBCdWZmZXJEZXNjUGFkZGVkICpCdWZmZXJEZXNjcmlwdG9yczsKIGV4dGVybiBQR0RM TElNUE9SVCBDb25kaXRpb25WYXJpYWJsZU1pbmltYWxseVBhZGRlZCAqQnVmZmVySU9DVkFycmF5 OworZXh0ZXJuIFBHRExMSU1QT1JUIFhMb2dSZWNQdHIgKkJ1ZmZlckV4dGVybmFsTFNOczsKIGV4 dGVybiBQR0RMTElNUE9SVCBXcml0ZWJhY2tDb250ZXh0IEJhY2tlbmRXcml0ZWJhY2tDb250ZXh0 OwogCiAvKiBpbiBsb2NhbGJ1Zi5jICovCkBAIC00MTMsMTAgKzQxOSw5IEBAIGV4dGVybiBpbnQJ QnVmVGFibGVJbnNlcnQoQnVmZmVyVGFnICp0YWdQdHIsIHVpbnQzMiBoYXNoY29kZSwgaW50IGJ1 Zl9pZCk7CiBleHRlcm4gdm9pZCBCdWZUYWJsZURlbGV0ZShCdWZmZXJUYWcgKnRhZ1B0ciwgdWlu dDMyIGhhc2hjb2RlKTsKIAogLyogbG9jYWxidWYuYyAqLwotZXh0ZXJuIFByZWZldGNoQnVmZmVy UmVzdWx0IFByZWZldGNoTG9jYWxCdWZmZXIoU01nclJlbGF0aW9uIHNtZ3IsCi0JCQkJCQkJCQkJ CQlGb3JrTnVtYmVyIGZvcmtOdW0sCitleHRlcm4gUHJlZmV0Y2hCdWZmZXJSZXN1bHQgUHJlZmV0 Y2hMb2NhbEJ1ZmZlcihTTWdyRmlsZUhhbmRsZSBzbWdyLAogCQkJCQkJCQkJCQkJQmxvY2tOdW1i ZXIgYmxvY2tOdW0pOwotZXh0ZXJuIEJ1ZmZlckRlc2MgKkxvY2FsQnVmZmVyQWxsb2MoU01nclJl bGF0aW9uIHNtZ3IsIEZvcmtOdW1iZXIgZm9ya051bSwKK2V4dGVybiBCdWZmZXJEZXNjICpMb2Nh bEJ1ZmZlckFsbG9jKFNNZ3JGaWxlSGFuZGxlIHNtZ3IsCiAJCQkJCQkJCQlCbG9ja051bWJlciBi bG9ja051bSwgYm9vbCAqZm91bmRQdHIpOwogZXh0ZXJuIHZvaWQgTWFya0xvY2FsQnVmZmVyRGly dHkoQnVmZmVyIGJ1ZmZlcik7CiBleHRlcm4gdm9pZCBEcm9wUmVsYXRpb25Mb2NhbEJ1ZmZlcnMo UmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdl L2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCAzM2VhZGJjMTI5 MS4uZTZhZWQxOGYwZmMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgK KysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtNDIsOCArNDIsMTEgQEAgdHlw ZWRlZiBlbnVtCiAJUkJNX1pFUk9fQU5EX0NMRUFOVVBfTE9DSywJLyogTGlrZSBSQk1fWkVST19B TkRfTE9DSywgYnV0IGxvY2tzIHRoZSBwYWdlCiAJCQkJCQkJCSAqIGluICJjbGVhbnVwIiBtb2Rl ICovCiAJUkJNX1pFUk9fT05fRVJST1IsCQkJLyogUmVhZCwgYnV0IHJldHVybiBhbiBhbGwtemVy b3MgcGFnZSBvbiBlcnJvciAqLwotCVJCTV9OT1JNQUxfTk9fTE9HCQkJLyogRG9uJ3QgbG9nIHBh Z2UgYXMgaW52YWxpZCBkdXJpbmcgV0FMCisJUkJNX05PUk1BTF9OT19MT0csCQkJLyogRG9uJ3Qg bG9nIHBhZ2UgYXMgaW52YWxpZCBkdXJpbmcgV0FMCiAJCQkJCQkJCSAqIHJlcGxheTsgb3RoZXJ3 aXNlIHNhbWUgYXMgUkJNX05PUk1BTCAqLworCisJUkJNX1RSSU0JCQkJLypSZWFkIGZvciBUUklN IGZ1bmN0aW9ucyBpbiBDTE9HIC8gTXVsdGlYYWN0LiAKKwkJCQkJCSAgRG9uJ3QgdmFsaWRhdGUg Y2hlY2tzdW0gIG9yIHplcm8uICovCQogfSBSZWFkQnVmZmVyTW9kZTsKIAogLyoKQEAgLTU5LDcg KzYyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUHJlZmV0Y2hCdWZmZXJSZXN1bHQKIHN0cnVjdCBXcml0 ZWJhY2tDb250ZXh0OwogCiAvKiBmb3J3YXJkIGRlY2xhcmVkLCB0byBhdm9pZCBpbmNsdWRpbmcg c21nci5oIGhlcmUgKi8KLXN0cnVjdCBTTWdyUmVsYXRpb25EYXRhOworc3RydWN0IFNNZ3JGaWxl RGF0YTsKIAogLyogaW4gZ2xvYmFscy5jIC4uLiB0aGlzIGR1cGxpY2F0ZXMgbWlzY2FkbWluLmgg Ki8KIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgTkJ1ZmZlcnM7CkBAIC0xMTAsOCArMTEzLDcgQEAg ZXh0ZXJuIFBHRExMSU1QT1JUIGludDMyICpMb2NhbFJlZkNvdW50OwogLyoKICAqIHByb3RvdHlw ZXMgZm9yIGZ1bmN0aW9ucyBpbiBidWZtZ3IuYwogICovCi1leHRlcm4gUHJlZmV0Y2hCdWZmZXJS ZXN1bHQgUHJlZmV0Y2hTaGFyZWRCdWZmZXIoc3RydWN0IFNNZ3JSZWxhdGlvbkRhdGEgKnNtZ3Jf cmVsbiwKLQkJCQkJCQkJCQkJCSBGb3JrTnVtYmVyIGZvcmtOdW0sCitleHRlcm4gUHJlZmV0Y2hC dWZmZXJSZXN1bHQgUHJlZmV0Y2hTaGFyZWRCdWZmZXIoc3RydWN0IFNNZ3JGaWxlRGF0YSAqc21n cl9maWxlLAogCQkJCQkJCQkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrTnVtKTsKIGV4dGVybiBQcmVm ZXRjaEJ1ZmZlclJlc3VsdCBQcmVmZXRjaEJ1ZmZlcihSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtOdW0sCiAJCQkJCQkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tOdW0pOwpAQCAtMTI1LDEz ICsxMjcsMTkgQEAgZXh0ZXJuIEJ1ZmZlciBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlKFJlbEZp bGVMb2NhdG9yIHJsb2NhdG9yLAogCQkJCQkJCQkJCUZvcmtOdW1iZXIgZm9ya051bSwgQmxvY2tO dW1iZXIgYmxvY2tOdW0sCiAJCQkJCQkJCQkJUmVhZEJ1ZmZlck1vZGUgbW9kZSwgQnVmZmVyQWNj ZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksCiAJCQkJCQkJCQkJYm9vbCBwZXJtYW5lbnQpOworZXh0ZXJu IEJ1ZmZlciBSZWFkQnVmZmVyV2l0aG91dFJlbGNhY2hlV2l0aEhpdChSZWxGaWxlTG9jYXRvciBy bG9jYXRvciwKKwkJCQkJCQkJCQlGb3JrTnVtYmVyIGZvcmtOdW0sIEJsb2NrTnVtYmVyIGJsb2Nr TnVtLAorCQkJCQkJCQkJCVJlYWRCdWZmZXJNb2RlIG1vZGUsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5 IHN0cmF0ZWd5LAorCQkJCQkJCQkJCQkgICBib29sIHBlcm1hbmVudCwgYm9vbCAqaGl0KTsKIGV4 dGVybiB2b2lkIFJlbGVhc2VCdWZmZXIoQnVmZmVyIGJ1ZmZlcik7CiBleHRlcm4gdm9pZCBVbmxv Y2tSZWxlYXNlQnVmZmVyKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgTWFya0J1ZmZlckRp cnR5KEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgSW5jckJ1ZmZlclJlZkNvdW50KEJ1ZmZl ciBidWZmZXIpOwogZXh0ZXJuIEJ1ZmZlciBSZWxlYXNlQW5kUmVhZEJ1ZmZlcihCdWZmZXIgYnVm ZmVyLCBSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCQkJICAgQmxvY2tOdW1iZXIgYmxvY2tOdW0p OwotCitleHRlcm4gYm9vbCBCdWZmZXJQcm9iZShSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgRm9y a051bWJlciBmb3JrTnVtLAorCQkJCQkJQmxvY2tOdW1iZXIgYmxvY2tOdW0pOworIAogZXh0ZXJu IHZvaWQgSW5pdEJ1ZmZlclBvb2xBY2Nlc3Modm9pZCk7CiBleHRlcm4gdm9pZCBBdEVPWGFjdF9C dWZmZXJzKGJvb2wgaXNDb21taXQpOwogZXh0ZXJuIHZvaWQgUHJpbnRCdWZmZXJMZWFrV2Fybmlu ZyhCdWZmZXIgYnVmZmVyKTsKQEAgLTEzOSwxOCArMTQ3LDI2IEBAIGV4dGVybiB2b2lkIENoZWNr UG9pbnRCdWZmZXJzKGludCBmbGFncyk7CiBleHRlcm4gQmxvY2tOdW1iZXIgQnVmZmVyR2V0Qmxv Y2tOdW1iZXIoQnVmZmVyIGJ1ZmZlcik7CiBleHRlcm4gQmxvY2tOdW1iZXIgUmVsYXRpb25HZXRO dW1iZXJPZkJsb2Nrc0luRm9yayhSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCQkJCQkJCSAgIEZv cmtOdW1iZXIgZm9ya051bSk7Ci1leHRlcm4gdm9pZCBGbHVzaE9uZUJ1ZmZlcihCdWZmZXIgYnVm ZmVyKTsKLWV4dGVybiB2b2lkIEZsdXNoUmVsYXRpb25CdWZmZXJzKFJlbGF0aW9uIHJlbCk7Ci1l eHRlcm4gdm9pZCBGbHVzaFJlbGF0aW9uc0FsbEJ1ZmZlcnMoc3RydWN0IFNNZ3JSZWxhdGlvbkRh dGEgKipzbWdycywgaW50IG5yZWxzKTsKIGV4dGVybiB2b2lkIENyZWF0ZUFuZENvcHlSZWxhdGlv bkRhdGEoUmVsRmlsZUxvY2F0b3Igc3JjX3Jsb2NhdG9yLAogCQkJCQkJCQkJICBSZWxGaWxlTG9j YXRvciBkc3RfcmxvY2F0b3IsCiAJCQkJCQkJCQkgIGJvb2wgcGVybWFuZW50KTsKKworZXh0ZXJu IHZvaWQgRmx1c2hPbmVCdWZmZXIoQnVmZmVyIGJ1ZmZlcik7CitleHRlcm4gdm9pZCBGbHVzaFJl bGF0aW9uQnVmZmVycyhSZWxhdGlvbiByZWwpOworZXh0ZXJuIHZvaWQgRmx1c2hSZWxhdGlvbnNB bGxCdWZmZXJzKFJlbEZpbGVMb2NhdG9yICpsb2NhdG9ycywgaW50IG5sb2NhdG9ycyk7CiBleHRl cm4gdm9pZCBGbHVzaERhdGFiYXNlQnVmZmVycyhPaWQgZGJpZCk7Ci1leHRlcm4gdm9pZCBEcm9w UmVsYXRpb25CdWZmZXJzKHN0cnVjdCBTTWdyUmVsYXRpb25EYXRhICpzbWdyX3JlbG4sCisKK2V4 dGVybiB2b2lkIERyb3BSZWxhdGlvbkJ1ZmZlcnMoUmVsRmlsZUxvY2F0b3IgcmxvY2F0b3IsIEJh Y2tlbmRJZCBiYWNrZW5kLAogCQkJCQkJCQlGb3JrTnVtYmVyICpmb3JrTnVtLAogCQkJCQkJCQlp bnQgbmZvcmtzLCBCbG9ja051bWJlciAqZmlyc3REZWxCbG9jayk7Ci1leHRlcm4gdm9pZCBEcm9w UmVsYXRpb25zQWxsQnVmZmVycyhzdHJ1Y3QgU01nclJlbGF0aW9uRGF0YSAqKnNtZ3JfcmVsbiwK LQkJCQkJCQkJCWludCBubG9jYXRvcnMpOworCit0eXBlZGVmIHN0cnVjdCBSZWxGaWxlTG9jYXRv ckJhY2tlbmQKK3sKKwlSZWxGaWxlTG9jYXRvciBsb2NhdG9yOworCUJhY2tlbmRJZAliYWNrZW5k OworfSBSZWxGaWxlTG9jYXRvckJhY2tlbmQ7CisKK2V4dGVybiB2b2lkIERyb3BSZWxhdGlvbnNB bGxCdWZmZXJzKFJlbEZpbGVMb2NhdG9yQmFja2VuZCAqbG9jYXRvcnMsIGludCBubG9jYXRvcnMp OwogZXh0ZXJuIHZvaWQgRHJvcERhdGFiYXNlQnVmZmVycyhPaWQgZGJpZCk7CiAKICNkZWZpbmUg UmVsYXRpb25HZXROdW1iZXJPZkJsb2NrcyhyZWxuKSBcCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2J1ZnBhZ2UuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmcGFnZS5oCmluZGV4 IDQyNGVjYmEwMjhmLi5jOTQ0ZTNkYzkyOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9idWZwYWdlLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZwYWdlLmgKQEAgLTIwMSw2 ICsyMDEsNyBAQCB0eXBlZGVmIFBhZ2VIZWFkZXJEYXRhICpQYWdlSGVhZGVyOwogICogaGFuZGxp bmcgcGFnZXMuCiAgKi8KICNkZWZpbmUgUEdfUEFHRV9MQVlPVVRfVkVSU0lPTgkJNAorI2RlZmlu ZSBQR19NRVRBUEFHRV9MQVlPVVRfVkVSU0lPTiAgMQogI2RlZmluZSBQR19EQVRBX0NIRUNLU1VN X1ZFUlNJT04JMQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zMDIsNiArMzAzLDIwIEBAIFBhZ2VTZXRQYWdl U2l6ZUFuZFZlcnNpb24oUGFnZSBwYWdlLCBTaXplIHNpemUsIHVpbnQ4IHZlcnNpb24pCiAJKChQ YWdlSGVhZGVyKSBwYWdlKS0+cGRfcGFnZXNpemVfdmVyc2lvbiA9IHNpemUgfCB2ZXJzaW9uOwog fQogCisvKgorICogUGFnZVNldEhlYWRlckRhdGFNaW5pbWFsIAorICogU2V0cyB0aGUgTFNOLCBw YWdlIHNpemUgYW5kIHZlcnNpb24sIGFuZCBjaGVja3N1bQorICovCisjZGVmaW5lIFBhZ2VTZXRI ZWFkZXJEYXRhTm9uUmVsKHBhZ2UsIHBhZ2VubywgbHNuLCBzaXplLCB2ZXJzaW9uKSBcCisoIFwK KwlQYWdlU2V0TFNOKHBhZ2UsIGxzbiksIFwKKwlQYWdlU2V0UGFnZVNpemVBbmRWZXJzaW9uKHBh Z2UsIHNpemUsIHZlcnNpb24pLCBcCisJUGFnZUNsZWFySGFzRnJlZUxpbmVQb2ludGVycyhwYWdl KSwgXAorCVBhZ2VTZXRDaGVja3N1bUlucGxhY2UocGFnZSwgcGFnZW5vKSBcCispCisKKworCiAv KiAtLS0tLS0tLS0tLS0tLS0tCiAgKgkJcGFnZSBzcGVjaWFsIGRhdGEgZnVuY3Rpb25zCiAgKiAt LS0tLS0tLS0tLS0tLS0tCkBAIC00ODYsNiArNTAxLDggQEAgU3RhdGljQXNzZXJ0RGVjbChCTENL U1ogPT0gKChCTENLU1ogLyBzaXplb2Yoc2l6ZV90KSkgKiBzaXplb2Yoc2l6ZV90KSksCiAJCQkJ ICJCTENLU1ogaGFzIHRvIGJlIGEgbXVsdGlwbGUgb2Ygc2l6ZW9mKHNpemVfdCkiKTsKIAogZXh0 ZXJuIHZvaWQgUGFnZUluaXQoUGFnZSBwYWdlLCBTaXplIHBhZ2VTaXplLCBTaXplIHNwZWNpYWxT aXplKTsKK2V4dGVybiB2b2lkIFBhZ2VJbml0U0xSVShQYWdlIHBhZ2UsIFNpemUgcGFnZVNpemUs IFNpemUgc3BlY2lhbFNpemUpOworCiBleHRlcm4gYm9vbCBQYWdlSXNWZXJpZmllZEV4dGVuZGVk KFBhZ2UgcGFnZSwgQmxvY2tOdW1iZXIgYmxrbm8sIGludCBmbGFncyk7CiBleHRlcm4gT2Zmc2V0 TnVtYmVyIFBhZ2VBZGRJdGVtRXh0ZW5kZWQoUGFnZSBwYWdlLCBJdGVtIGl0ZW0sIFNpemUgc2l6 ZSwKIAkJCQkJCQkJCQlPZmZzZXROdW1iZXIgb2Zmc2V0TnVtYmVyLCBpbnQgZmxhZ3MpOwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9tZC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9t ZC5oCmluZGV4IGJjYWRhOWZmMjIxLi5hMDUyOTQ1Njg1YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvc3RvcmFnZS9tZC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbWQuaApAQCAtMjEsMjgg KzIxLDI2IEBACiAKIC8qIG1kIHN0b3JhZ2UgbWFuYWdlciBmdW5jdGlvbmFsaXR5ICovCiBleHRl cm4gdm9pZCBtZGluaXQodm9pZCk7Ci1leHRlcm4gdm9pZCBtZG9wZW4oU01nclJlbGF0aW9uIHJl bG4pOwotZXh0ZXJuIHZvaWQgbWRjbG9zZShTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBm b3JrbnVtKTsKLWV4dGVybiB2b2lkIG1kY3JlYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKTsKLWV4dGVybiBib29sIG1kZXhpc3RzKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwotZXh0ZXJuIHZvaWQgbWR1bmxpbmsoUmVs RmlsZUxvY2F0b3JCYWNrZW5kIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNS ZWRvKTsKLWV4dGVybiB2b2lkIG1kZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVy IGZvcmtudW0sCitleHRlcm4gdm9pZCBtZG9wZW4oU01nckZpbGVIYW5kbGUgc2ZpbGUpOworZXh0 ZXJuIHZvaWQgbWRjbG9zZShTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBtZGNy ZWF0ZShTTWdyRmlsZUhhbmRsZSBzZmlsZSwgYm9vbCBpc1JlZG8pOworZXh0ZXJuIGJvb2wgbWRl eGlzdHMoU01nckZpbGVIYW5kbGUgc2ZpbGUpOworZXh0ZXJuIHZvaWQgbWR1bmxpbmsoU01nckZp bGVMb2NhdG9yIHNsb2NhdG9yLCBib29sIGlzUmVkbyk7CitleHRlcm4gdm9pZCBtZGV4dGVuZChT TWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBjaGFyICpi dWZmZXIsIGJvb2wgc2tpcEZzeW5jKTsKLWV4dGVybiBib29sIG1kcHJlZmV0Y2goU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKK2V4dGVybiBib29sIG1kcHJlZmV0Y2goU01n ckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCSAgIEJsb2NrTnVtYmVyIGJsb2NrbnVtKTsKLWV4dGVy biB2b2lkIG1kcmVhZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLCBCbG9j a051bWJlciBibG9ja251bSwKK2V4dGVybiB2b2lkIG1kcmVhZChTTWdyRmlsZUhhbmRsZSBzZmls ZSwgQmxvY2tOdW1iZXIgYmxvY2tudW0sCiAJCQkJICAgY2hhciAqYnVmZmVyKTsKLWV4dGVybiB2 b2lkIG1kd3JpdGUoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSwKK2V4dGVy biB2b2lkIG1kd3JpdGUoU01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCUJsb2NrTnVtYmVyIGJs b2NrbnVtLCBjaGFyICpidWZmZXIsIGJvb2wgc2tpcEZzeW5jKTsKLWV4dGVybiB2b2lkIG1kd3Jp dGViYWNrKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCitleHRlcm4gdm9p ZCBtZHdyaXRlYmFjayhTTWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJCUJsb2NrTnVtYmVyIGJs b2NrbnVtLCBCbG9ja051bWJlciBuYmxvY2tzKTsKLWV4dGVybiBCbG9ja051bWJlciBtZG5ibG9j a3MoU01nclJlbGF0aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7Ci1leHRlcm4gdm9pZCBt ZHRydW5jYXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCi0JCQkJCSAg IEJsb2NrTnVtYmVyIG5ibG9ja3MpOwotZXh0ZXJuIHZvaWQgbWRpbW1lZHN5bmMoU01nclJlbGF0 aW9uIHJlbG4sIEZvcmtOdW1iZXIgZm9ya251bSk7CitleHRlcm4gQmxvY2tOdW1iZXIgbWRuYmxv Y2tzKFNNZ3JGaWxlSGFuZGxlIHNmaWxlKTsKK2V4dGVybiB2b2lkIG1kdHJ1bmNhdGUoU01nckZp bGVIYW5kbGUgc2ZpbGUsIEJsb2NrTnVtYmVyIG5ibG9ja3MpOworZXh0ZXJuIHZvaWQgbWRpbW1l ZHN5bmMoU01nckZpbGVIYW5kbGUgc2ZpbGUpOwogCiBleHRlcm4gdm9pZCBGb3JnZXREYXRhYmFz ZVN5bmNSZXF1ZXN0cyhPaWQgZGJpZCk7Ci1leHRlcm4gdm9pZCBEcm9wUmVsYXRpb25GaWxlcyhS ZWxGaWxlTG9jYXRvciAqZGVscmVscywgaW50IG5kZWxyZWxzLCBib29sIGlzUmVkbyk7CiAKIC8q IG1kIHN5bmMgY2FsbGJhY2tzICovCiBleHRlcm4gaW50CW1kc3luY2ZpbGV0YWcoY29uc3QgRmls ZVRhZyAqZnRhZywgY2hhciAqcGF0aCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdl L3JlbGZpbGVsb2NhdG9yLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3JlbGZpbGVsb2NhdG9yLmgK aW5kZXggNjFjZjAxNjliZDcuLmUyYzIyYjhlNmY5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9z dG9yYWdlL3JlbGZpbGVsb2NhdG9yLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9yZWxmaWxl bG9jYXRvci5oCkBAIC01Myw2ICs1Myw4IEBACiAgKiBOb3RlOiB2YXJpb3VzIHBsYWNlcyB1c2Ug UmVsRmlsZUxvY2F0b3IgaW4gaGFzaHRhYmxlIGtleXMuICBUaGVyZWZvcmUsCiAgKiB0aGVyZSAq bXVzdCBub3QqIGJlIGFueSB1bnVzZWQgcGFkZGluZyBieXRlcyBpbiB0aGlzIHN0cnVjdC4gIFRo YXQKICAqIHNob3VsZCBiZSBzYWZlIGFzIGxvbmcgYXMgYWxsIHRoZSBmaWVsZHMgYXJlIG9mIHR5 cGUgT2lkLgorICoKKyAqIFNlZSBhbHNvIFNNZ3JGaWxlTG9jYXRvciBpbiBzbWdyLmguCiAgKi8K IHR5cGVkZWYgc3RydWN0IFJlbEZpbGVMb2NhdG9yCiB7CkBAIC02MiwzOCArNjQsMTUgQEAgdHlw ZWRlZiBzdHJ1Y3QgUmVsRmlsZUxvY2F0b3IKIH0gUmVsRmlsZUxvY2F0b3I7CiAKIC8qCi0gKiBB dWdtZW50aW5nIGEgcmVsZmlsZWxvY2F0b3Igd2l0aCB0aGUgYmFja2VuZCBJRCBwcm92aWRlcyBh bGwgdGhlIGluZm9ybWF0aW9uCi0gKiB3ZSBuZWVkIHRvIGxvY2F0ZSB0aGUgcGh5c2ljYWwgc3Rv cmFnZS4gIFRoZSBiYWNrZW5kIElEIGlzIEludmFsaWRCYWNrZW5kSWQKLSAqIGZvciByZWd1bGFy IHJlbGF0aW9ucyAodGhvc2UgYWNjZXNzaWJsZSB0byBtb3JlIHRoYW4gb25lIGJhY2tlbmQpLCBv ciB0aGUKLSAqIG93bmluZyBiYWNrZW5kJ3MgSUQgZm9yIGJhY2tlbmQtbG9jYWwgcmVsYXRpb25z LiAgQmFja2VuZC1sb2NhbCByZWxhdGlvbnMKLSAqIGFyZSBhbHdheXMgdHJhbnNpZW50IGFuZCBy ZW1vdmVkIGluIGNhc2Ugb2YgYSBkYXRhYmFzZSBjcmFzaDsgdGhleSBhcmUKLSAqIG5ldmVyIFdB TC1sb2dnZWQgb3IgZnN5bmMnZC4KLSAqLwotdHlwZWRlZiBzdHJ1Y3QgUmVsRmlsZUxvY2F0b3JC YWNrZW5kCi17Ci0JUmVsRmlsZUxvY2F0b3IgbG9jYXRvcjsKLQlCYWNrZW5kSWQJYmFja2VuZDsK LX0gUmVsRmlsZUxvY2F0b3JCYWNrZW5kOwotCi0jZGVmaW5lIFJlbEZpbGVMb2NhdG9yQmFja2Vu ZElzVGVtcChybG9jYXRvcikgXAotCSgocmxvY2F0b3IpLmJhY2tlbmQgIT0gSW52YWxpZEJhY2tl bmRJZCkKLQotLyoKLSAqIE5vdGU6IFJlbEZpbGVMb2NhdG9yRXF1YWxzIGFuZCBSZWxGaWxlTG9j YXRvckJhY2tlbmRFcXVhbHMgY29tcGFyZSByZWxOdW1iZXIKKyAqIE5vdGU6IFJlbEZpbGVMb2Nh dG9yRXF1YWxzIGNvbXBhcmVzIHJlbE51bWJlcgogICogZmlyc3Qgc2luY2UgdGhhdCBpcyBtb3N0 IGxpa2VseSB0byBiZSBkaWZmZXJlbnQgaW4gdHdvIHVuZXF1YWwKICAqIFJlbEZpbGVMb2NhdG9y cy4gIEl0IGlzIHByb2JhYmx5IHJlZHVuZGFudCB0byBjb21wYXJlIHNwY09pZCBpZiB0aGUgb3Ro ZXIKICAqIGZpZWxkcyBhcmUgZm91bmQgZXF1YWwsIGJ1dCBkbyBpdCBhbnl3YXkgdG8gYmUgc3Vy ZS4gIExpa2V3aXNlIGZvciBjaGVja2luZwotICogdGhlIGJhY2tlbmQgSUQgaW4gUmVsRmlsZUxv Y2F0b3JCYWNrZW5kRXF1YWxzLgorICogdGhlIGJhY2tlbmQgSUQgaW4gU01nckZpbGVMb2NhdG9y QmFja2VuZEVxdWFscy4KICAqLwogI2RlZmluZSBSZWxGaWxlTG9jYXRvckVxdWFscyhsb2NhdG9y MSwgbG9jYXRvcjIpIFwKIAkoKGxvY2F0b3IxKS5yZWxOdW1iZXIgPT0gKGxvY2F0b3IyKS5yZWxO dW1iZXIgJiYgXAogCSAobG9jYXRvcjEpLmRiT2lkID09IChsb2NhdG9yMikuZGJPaWQgJiYgXAog CSAobG9jYXRvcjEpLnNwY09pZCA9PSAobG9jYXRvcjIpLnNwY09pZCkKIAotI2RlZmluZSBSZWxG aWxlTG9jYXRvckJhY2tlbmRFcXVhbHMobG9jYXRvcjEsIGxvY2F0b3IyKSBcCi0JKChsb2NhdG9y MSkubG9jYXRvci5yZWxOdW1iZXIgPT0gKGxvY2F0b3IyKS5sb2NhdG9yLnJlbE51bWJlciAmJiBc Ci0JIChsb2NhdG9yMSkubG9jYXRvci5kYk9pZCA9PSAobG9jYXRvcjIpLmxvY2F0b3IuZGJPaWQg JiYgXAotCSAobG9jYXRvcjEpLmJhY2tlbmQgPT0gKGxvY2F0b3IyKS5iYWNrZW5kICYmIFwKLQkg KGxvY2F0b3IxKS5sb2NhdG9yLnNwY09pZCA9PSAobG9jYXRvcjIpLmxvY2F0b3Iuc3BjT2lkKQot CiAjZW5kaWYJCQkJCQkJLyogUkVMRklMRUxPQ0FUT1JfSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9zbWdyLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3NtZ3IuaAppbmRleCA1 NjIzM2M0ZDIxNi4uODNjNGE3NTZjZTUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv c21nci5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc21nci5oCkBAIC0xOCwzMSArMTgsNTYg QEAKICNpbmNsdWRlICJzdG9yYWdlL2Jsb2NrLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9yZWxmaWxl bG9jYXRvci5oIgogCisKIC8qCi0gKiBzbWdyLmMgbWFpbnRhaW5zIGEgdGFibGUgb2YgU01nclJl bGF0aW9uIG9iamVjdHMsIHdoaWNoIGFyZSBlc3NlbnRpYWxseQotICogY2FjaGVkIGZpbGUgaGFu ZGxlcy4gIEFuIFNNZ3JSZWxhdGlvbiBpcyBjcmVhdGVkIChpZiBub3QgYWxyZWFkeSBwcmVzZW50 KQorICogU01nckZpbGVMb2NhdG9yIGNvbnRhaW5zIGFsbCB0aGUgaW5mb3JtYXRpb24gbmVlZGVk IHRvIGxvY2F0ZSB0aGUgcGh5c2ljYWwKKyAqIHN0b3JhZ2Ugb2YgYSByZWxhdGlvbiBmb3JrLCBv ciBzb21lIG90aGVyIGZpbGUgdGhhdCBpcyBtYW5hZ2VkIGJ5IHRoZSBidWZmZXIKKyAqIG1hbmFn ZXIuCisgKgorICogVGhlIGJhY2tlbmQgSUQgaXMgSW52YWxpZEJhY2tlbmRJZCBmb3IgcmVndWxh ciByZWxhdGlvbnMgKHRob3NlIGFjY2Vzc2libGUKKyAqIHRvIG1vcmUgdGhhbiBvbmUgYmFja2Vu ZCksIG9yIHRoZSBvd25pbmcgYmFja2VuZCdzIElEIGZvciBiYWNrZW5kLWxvY2FsCisgKiByZWxh dGlvbnMuIEJhY2tlbmQtbG9jYWwgcmVsYXRpb25zIGFyZSBhbHdheXMgdHJhbnNpZW50IGFuZCBy ZW1vdmVkIGluCisgKiBjYXNlIG9mIGEgZGF0YWJhc2UgY3Jhc2g7IHRoZXkgYXJlIG5ldmVyIFdB TC1sb2dnZWQgb3IgZnN5bmMnZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU01nckZpbGVMb2NhdG9y Cit7CisJUmVsRmlsZUxvY2F0b3IgbG9jYXRvcjsKKwlCYWNrZW5kSWQJYmFja2VuZDsKKwlGb3Jr TnVtYmVyCWZvcmtudW07Cit9IFNNZ3JGaWxlTG9jYXRvcjsKKworI2RlZmluZSBTTWdyRmlsZUxv Y2F0b3JJc1RlbXAoc2xvY2F0b3IpIFwKKwkoKHNsb2NhdG9yKS5iYWNrZW5kICE9IEludmFsaWRC YWNrZW5kSWQpCisKKy8qCisgKiBzbWdyLmMgbWFpbnRhaW5zIGEgdGFibGUgb2YgU01nckZpbGVE YXRhIG9iamVjdHMsIHdoaWNoIGFyZSBlc3NlbnRpYWxseQorICogY2FjaGVkIGZpbGUgaGFuZGxl cy4gIEFuIFNNZ3JGaWxlIGlzIGNyZWF0ZWQgKGlmIG5vdCBhbHJlYWR5IHByZXNlbnQpCiAgKiBi eSBzbWdyb3BlbigpLCBhbmQgZGVzdHJveWVkIGJ5IHNtZ3JjbG9zZSgpLiAgTm90ZSB0aGF0IG5l aXRoZXIgb2YgdGhlc2UKICAqIG9wZXJhdGlvbnMgaW1wbHkgSS9PLCB0aGV5IGp1c3QgY3JlYXRl IG9yIGRlc3Ryb3kgYSBoYXNodGFibGUgZW50cnkuCiAgKiAoQnV0IHNtZ3JjbG9zZSgpIG1heSBy ZWxlYXNlIGFzc29jaWF0ZWQgcmVzb3VyY2VzLCBzdWNoIGFzIE9TLWxldmVsIGZpbGUKICAqIGRl c2NyaXB0b3JzLikKICAqCi0gKiBBbiBTTWdyUmVsYXRpb24gbWF5IGhhdmUgYW4gIm93bmVyIiwg d2hpY2ggaXMganVzdCBhIHBvaW50ZXIgdG8gaXQgZnJvbQotICogc29tZXdoZXJlIGVsc2U7IHNt Z3IuYyB3aWxsIGNsZWFyIHRoaXMgcG9pbnRlciBpZiB0aGUgU01nclJlbGF0aW9uIGlzCisgKiBB biBTTWdyRmlsZSBtYXkgaGF2ZSBhbiAib3duZXIiLCB3aGljaCBpcyBqdXN0IGEgcG9pbnRlciB0 byBpdCBmcm9tCisgKiBzb21ld2hlcmUgZWxzZTsgc21nci5jIHdpbGwgY2xlYXIgdGhpcyBwb2lu dGVyIGlmIHRoZSBTTWdyRmlsZSBpcwogICogY2xvc2VkLiAgV2UgdXNlIHRoaXMgdG8gYXZvaWQg ZGFuZ2xpbmcgcG9pbnRlcnMgZnJvbSByZWxjYWNoZSB0byBzbWdyCiAgKiB3aXRob3V0IGhhdmlu ZyB0byBtYWtlIHRoZSBzbWdyIGV4cGxpY2l0bHkgYXdhcmUgb2YgcmVsY2FjaGUuICBUaGVyZQog ICogY2FuJ3QgYmUgbW9yZSB0aGFuIG9uZSAib3duZXIiIHBvaW50ZXIgcGVyIFNNZ3JSZWxhdGlv biwgYnV0IHRoYXQncwogICogYWxsIHdlIG5lZWQuCiAgKgotICogU01nclJlbGF0aW9ucyB0aGF0 IGRvIG5vdCBoYXZlIGFuICJvd25lciIgYXJlIGNvbnNpZGVyZWQgdG8gYmUgdHJhbnNpZW50LAor ICogU01nckZpbGVzIHRoYXQgZG8gbm90IGhhdmUgYW4gIm93bmVyIiBhcmUgY29uc2lkZXJlZCB0 byBiZSB0cmFuc2llbnQsCiAgKiBhbmQgYXJlIGRlbGV0ZWQgYXQgZW5kIG9mIHRyYW5zYWN0aW9u LgorICoKKyAqIEEgZmlsZSB0aGF0IGlzIHJlcHJlc2VudGVkIGJ5IGFuIFNNZ3JGaWxlIGNhbiBi ZSBtYW5hZ2VkIGJ5IHRoZSBidWZmZXIKKyAqIG1hbmFnZXIuIEN1cnJlbnRseSwgaXQncyBvbmx5 IHVzZWQgZm9yIHJlbGF0aW9uIGZpbGVzLCBidXQgY291bGQgYmUgdXNlZAorICogZm9yIFNMUlVz IGFuZCBvdGhlciB0aGluZ3MgaW4gdGhlIGZ1dHVyZS4KICAqLwotdHlwZWRlZiBzdHJ1Y3QgU01n clJlbGF0aW9uRGF0YQordHlwZWRlZiBzdHJ1Y3QgU01nckZpbGVEYXRhCiB7Ci0JLyogcmxvY2F0 b3IgaXMgdGhlIGhhc2h0YWJsZSBsb29rdXAga2V5LCBzbyBpdCBtdXN0IGJlIGZpcnN0ISAqLwot CVJlbEZpbGVMb2NhdG9yQmFja2VuZCBzbWdyX3Jsb2NhdG9yOwkvKiByZWxhdGlvbiBwaHlzaWNh bCBpZGVudGlmaWVyICovCisJLyogbG9jYXRvciBpcyB0aGUgaGFzaHRhYmxlIGxvb2t1cCBrZXks IHNvIG11c3QgYmUgZmlyc3QhICovCisJU01nckZpbGVMb2NhdG9yIHNtZ3JfbG9jYXRvcjsJLyog ZmlsZSBwaHlzaWNhbCBpZGVudGlmaWVyICovCiAKIAkvKiBwb2ludGVyIHRvIG93bmluZyBwb2lu dGVyLCBvciBOVUxMIGlmIG5vbmUgKi8KLQlzdHJ1Y3QgU01nclJlbGF0aW9uRGF0YSAqKnNtZ3Jf b3duZXI7CisJc3RydWN0IFNNZ3JGaWxlRGF0YSAqKnNtZ3Jfb3duZXI7CiAKIAkvKgogCSAqIFRo ZSBmb2xsb3dpbmcgZmllbGRzIGFyZSByZXNldCB0byBJbnZhbGlkQmxvY2tOdW1iZXIgdXBvbiBh IGNhY2hlIGZsdXNoCkBAIC01MSw3ICs3Niw3IEBAIHR5cGVkZWYgc3RydWN0IFNNZ3JSZWxhdGlv bkRhdGEKIAkgKiBpbnZhbGlkYXRpb24gZm9yIGZvcmsgZXh0ZW5zaW9uLgogCSAqLwogCUJsb2Nr TnVtYmVyIHNtZ3JfdGFyZ2Jsb2NrOyAvKiBjdXJyZW50IGluc2VydGlvbiB0YXJnZXQgYmxvY2sg Ki8KLQlCbG9ja051bWJlciBzbWdyX2NhY2hlZF9uYmxvY2tzW01BWF9GT1JLTlVNICsgMV07CS8q IGxhc3Qga25vd24gc2l6ZSAqLworCUJsb2NrTnVtYmVyIHNtZ3JfY2FjaGVkX25ibG9ja3M7CS8q IGxhc3Qga25vd24gc2l6ZSAqLwogCiAJLyogYWRkaXRpb25hbCBwdWJsaWMgZmllbGRzIG1heSBz b21lZGF5IGV4aXN0IGhlcmUgKi8KIApAQCAtNjUsNDYgKzkwLDQ2IEBAIHR5cGVkZWYgc3RydWN0 IFNNZ3JSZWxhdGlvbkRhdGEKIAkgKiBmb3IgbWQuYzsgcGVyLWZvcmsgYXJyYXlzIG9mIHRoZSBu dW1iZXIgb2Ygb3BlbiBzZWdtZW50cwogCSAqIChtZF9udW1fb3Blbl9zZWdzKSBhbmQgdGhlIHNl Z21lbnRzIHRoZW1zZWx2ZXMgKG1kX3NlZ19mZHMpLgogCSAqLwotCWludAkJCW1kX251bV9vcGVu X3NlZ3NbTUFYX0ZPUktOVU0gKyAxXTsKLQlzdHJ1Y3QgX01kZmRWZWMgKm1kX3NlZ19mZHNbTUFY X0ZPUktOVU0gKyAxXTsKKwlpbnQJCQltZF9udW1fb3Blbl9zZWdzOworCXN0cnVjdCBfTWRmZFZl YyAqbWRfc2VnX2ZkczsKIAotCS8qIGlmIHVub3duZWQsIGxpc3QgbGluayBpbiBsaXN0IG9mIGFs bCB1bm93bmVkIFNNZ3JSZWxhdGlvbnMgKi8KKwkvKiBpZiB1bm93bmVkLCBsaXN0IGxpbmsgaW4g bGlzdCBvZiBhbGwgdW5vd25lZCBTTWdyRmlsZXMgKi8KIAlkbGlzdF9ub2RlCW5vZGU7Ci19IFNN Z3JSZWxhdGlvbkRhdGE7Cit9IFNNZ3JGaWxlRGF0YTsKIAotdHlwZWRlZiBTTWdyUmVsYXRpb25E YXRhICpTTWdyUmVsYXRpb247Cit0eXBlZGVmIFNNZ3JGaWxlRGF0YSAqU01nckZpbGVIYW5kbGU7 CiAKICNkZWZpbmUgU21ncklzVGVtcChzbWdyKSBcCi0JUmVsRmlsZUxvY2F0b3JCYWNrZW5kSXNU ZW1wKChzbWdyKS0+c21ncl9ybG9jYXRvcikKKwlTTWdyRmlsZUxvY2F0b3JJc1RlbXAoKHNtZ3Ip LT5zbWdyX2xvY2F0b3IpCiAKIGV4dGVybiB2b2lkIHNtZ3Jpbml0KHZvaWQpOwotZXh0ZXJuIFNN Z3JSZWxhdGlvbiBzbWdyb3BlbihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJh Y2tlbmQpOwotZXh0ZXJuIGJvb2wgc21ncmV4aXN0cyhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtKTsKLWV4dGVybiB2b2lkIHNtZ3JzZXRvd25lcihTTWdyUmVsYXRpb24gKm93 bmVyLCBTTWdyUmVsYXRpb24gcmVsbik7Ci1leHRlcm4gdm9pZCBzbWdyY2xlYXJvd25lcihTTWdy UmVsYXRpb24gKm93bmVyLCBTTWdyUmVsYXRpb24gcmVsbik7Ci1leHRlcm4gdm9pZCBzbWdyY2xv c2UoU01nclJlbGF0aW9uIHJlbG4pOworZXh0ZXJuIFNNZ3JGaWxlSGFuZGxlIHNtZ3JvcGVuKFJl bEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCwgRm9ya051bWJlciBmb3Jr TnVtKTsKK2V4dGVybiBib29sIHNtZ3JleGlzdHMoU01nckZpbGVIYW5kbGUgc2ZpbGUpOworZXh0 ZXJuIHZvaWQgc21ncnNldG93bmVyKFNNZ3JGaWxlSGFuZGxlICpvd25lciwgU01nckZpbGVIYW5k bGUgc2ZpbGUpOworZXh0ZXJuIHZvaWQgc21ncmNsZWFyb3duZXIoU01nckZpbGVIYW5kbGUgKm93 bmVyLCBTTWdyRmlsZUhhbmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBzbWdyY2xvc2UoU01nckZp bGVIYW5kbGUgc2ZpbGUpOwogZXh0ZXJuIHZvaWQgc21ncmNsb3NlYWxsKHZvaWQpOwotZXh0ZXJu IHZvaWQgc21ncmNsb3NlcmVsbG9jYXRvcihSZWxGaWxlTG9jYXRvckJhY2tlbmQgcmxvY2F0b3Ip OwotZXh0ZXJuIHZvaWQgc21ncnJlbGVhc2UoU01nclJlbGF0aW9uIHJlbG4pOwogZXh0ZXJuIHZv aWQgc21ncnJlbGVhc2VhbGwodm9pZCk7Ci1leHRlcm4gdm9pZCBzbWdyY3JlYXRlKFNNZ3JSZWxh dGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sIGJvb2wgaXNSZWRvKTsKLWV4dGVybiB2b2lk IHNtZ3Jkb3N5bmNhbGwoU01nclJlbGF0aW9uICpyZWxzLCBpbnQgbnJlbHMpOwotZXh0ZXJuIHZv aWQgc21ncmRvdW5saW5rYWxsKFNNZ3JSZWxhdGlvbiAqcmVscywgaW50IG5yZWxzLCBib29sIGlz UmVkbyk7Ci1leHRlcm4gdm9pZCBzbWdyZXh0ZW5kKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVt YmVyIGZvcmtudW0sCitleHRlcm4gdm9pZCBzbWdyY3JlYXRlKFNNZ3JGaWxlSGFuZGxlIHNmaWxl LCBib29sIGlzUmVkbyk7CitleHRlcm4gdm9pZCBzbWdyZXh0ZW5kKFNNZ3JGaWxlSGFuZGxlIHNm aWxlLAogCQkJCQkgICBCbG9ja051bWJlciBibG9ja251bSwgY2hhciAqYnVmZmVyLCBib29sIHNr aXBGc3luYyk7Ci1leHRlcm4gYm9vbCBzbWdycHJlZmV0Y2goU01nclJlbGF0aW9uIHJlbG4sIEZv cmtOdW1iZXIgZm9ya251bSwKLQkJCQkJCSBCbG9ja051bWJlciBibG9ja251bSk7Ci1leHRlcm4g dm9pZCBzbWdycmVhZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorZXh0 ZXJuIGJvb2wgc21ncnByZWZldGNoKFNNZ3JGaWxlSGFuZGxlIHNmaWxlLCBCbG9ja051bWJlciBi bG9ja251bSk7CitleHRlcm4gdm9pZCBzbWdycmVhZChTTWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJ CQkJIEJsb2NrTnVtYmVyIGJsb2NrbnVtLCBjaGFyICpidWZmZXIpOwotZXh0ZXJuIHZvaWQgc21n cndyaXRlKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0sCitleHRlcm4gdm9p ZCBzbWdyd3JpdGUoU01nckZpbGVIYW5kbGUgc2ZpbGUsCiAJCQkJCSAgQmxvY2tOdW1iZXIgYmxv Y2tudW0sIGNoYXIgKmJ1ZmZlciwgYm9vbCBza2lwRnN5bmMpOwotZXh0ZXJuIHZvaWQgc21ncndy aXRlYmFjayhTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051bWJlciBmb3JrbnVtLAorZXh0ZXJuIHZv aWQgc21ncndyaXRlYmFjayhTTWdyRmlsZUhhbmRsZSBzZmlsZSwKIAkJCQkJCSAgQmxvY2tOdW1i ZXIgYmxvY2tudW0sIEJsb2NrTnVtYmVyIG5ibG9ja3MpOwotZXh0ZXJuIEJsb2NrTnVtYmVyIHNt Z3JuYmxvY2tzKFNNZ3JSZWxhdGlvbiByZWxuLCBGb3JrTnVtYmVyIGZvcmtudW0pOwotZXh0ZXJu IEJsb2NrTnVtYmVyIHNtZ3JuYmxvY2tzX2NhY2hlZChTTWdyUmVsYXRpb24gcmVsbiwgRm9ya051 bWJlciBmb3JrbnVtKTsKLWV4dGVybiB2b2lkIHNtZ3J0cnVuY2F0ZShTTWdyUmVsYXRpb24gcmVs biwgRm9ya051bWJlciAqZm9ya251bSwKLQkJCQkJCSBpbnQgbmZvcmtzLCBCbG9ja051bWJlciAq bmJsb2Nrcyk7Ci1leHRlcm4gdm9pZCBzbWdyaW1tZWRzeW5jKFNNZ3JSZWxhdGlvbiByZWxuLCBG b3JrTnVtYmVyIGZvcmtudW0pOworZXh0ZXJuIEJsb2NrTnVtYmVyIHNtZ3JuYmxvY2tzKFNNZ3JG aWxlSGFuZGxlIHNmaWxlKTsKK2V4dGVybiBCbG9ja051bWJlciBzbWdybmJsb2Nrc19jYWNoZWQo U01nckZpbGVIYW5kbGUgc2ZpbGUpOworZXh0ZXJuIHZvaWQgc21ncmltbWVkc3luYyhTTWdyRmls ZUhhbmRsZSBzZmlsZSk7CitleHRlcm4gdm9pZCBzbWdydW5saW5rKFNNZ3JGaWxlSGFuZGxlIHNm aWxlLCBib29sIGlzUmVkbyk7CisKK2V4dGVybiB2b2lkIHNtZ3J0cnVuY2F0ZV9tdWx0aShSZWxG aWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJhY2tlbmQsIEZvcmtOdW1iZXIgKmZvcmtz LCBpbnQgbmZvcmtzLCBCbG9ja051bWJlciAqbmJsb2Nrcyk7CitleHRlcm4gdm9pZCBzbWdydW5s aW5rX211bHRpKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBCYWNrZW5kSWQgYmFja2VuZCwgRm9y a051bWJlciAqZm9ya3MsIGludCBuZm9ya3MsIGJvb2wgaXNSZWRvKTsKKworZXh0ZXJuIHZvaWQg c21ncmNsb3NlcmVsbG9jYXRvcihSZWxGaWxlTG9jYXRvciBybG9jYXRvciwgQmFja2VuZElkIGJh Y2tlbmQpOworCiBleHRlcm4gdm9pZCBBdEVPWGFjdF9TTWdyKHZvaWQpOwogZXh0ZXJuIGJvb2wg UHJvY2Vzc0JhcnJpZXJTbWdyUmVsZWFzZSh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdXRpbHMvaW52YWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL2ludmFsLmgKaW5kZXggMTRiNGVh YzA2MzAuLjZjMjc5NDIyYjJlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9pbnZhbC5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2ludmFsLmgKQEAgLTQ4LDcgKzQ4LDcgQEAgZXh0ZXJu IHZvaWQgQ2FjaGVJbnZhbGlkYXRlUmVsY2FjaGVCeVR1cGxlKEhlYXBUdXBsZSBjbGFzc1R1cGxl KTsKIAogZXh0ZXJuIHZvaWQgQ2FjaGVJbnZhbGlkYXRlUmVsY2FjaGVCeVJlbGlkKE9pZCByZWxp ZCk7CiAKLWV4dGVybiB2b2lkIENhY2hlSW52YWxpZGF0ZVNtZ3IoUmVsRmlsZUxvY2F0b3JCYWNr ZW5kIHJsb2NhdG9yKTsKK2V4dGVybiB2b2lkIENhY2hlSW52YWxpZGF0ZVNtZ3IoUmVsRmlsZUxv Y2F0b3IgcmxvY2F0b3IsIEJhY2tlbmRJZCBiYWNrZW5kKTsKIAogZXh0ZXJuIHZvaWQgQ2FjaGVJ bnZhbGlkYXRlUmVsbWFwKE9pZCBkYXRhYmFzZUlkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvdXRpbHMvcmVsLmggYi9zcmMvaW5jbHVkZS91dGlscy9yZWwuaAppbmRleCBhZjk3ODUwMzhk My4uYmQ3Yjk4ZGVlOTkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCisrKyBi L3NyYy9pbmNsdWRlL3V0aWxzL3JlbC5oCkBAIC01NCw3ICs1NCw3IEBAIHR5cGVkZWYgTG9ja0lu Zm9EYXRhICpMb2NrSW5mbzsKIHR5cGVkZWYgc3RydWN0IFJlbGF0aW9uRGF0YQogewogCVJlbEZp bGVMb2NhdG9yIHJkX2xvY2F0b3I7CS8qIHJlbGF0aW9uIHBoeXNpY2FsIGlkZW50aWZpZXIgKi8K LQlTTWdyUmVsYXRpb24gcmRfc21ncjsJCS8qIGNhY2hlZCBmaWxlIGhhbmRsZSwgb3IgTlVMTCAq LworCVNNZ3JGaWxlSGFuZGxlIHJkX3NtZ3JbTUFYX0ZPUktOVU0gKyAxXTsJCS8qIGNhY2hlZCBm aWxlIGhhbmRsZXMsIG9yIE5VTExzICovCiAJaW50CQkJcmRfcmVmY250OwkJLyogcmVmZXJlbmNl IGNvdW50ICovCiAJQmFja2VuZElkCXJkX2JhY2tlbmQ7CQkvKiBvd25pbmcgYmFja2VuZCBpZCwg aWYgdGVtcG9yYXJ5IHJlbGF0aW9uICovCiAJYm9vbAkJcmRfaXNsb2NhbHRlbXA7IC8qIHJlbCBp cyBhIHRlbXAgcmVsIG9mIHRoaXMgc2Vzc2lvbiAqLwpAQCAtNTYyLDE2ICs1NjIsMTcgQEAgdHlw ZWRlZiBzdHJ1Y3QgVmlld09wdGlvbnMKICAqIE5vdGU6IHNpbmNlIGEgcmVsY2FjaGUgZmx1c2gg Y2FuIGNhdXNlIHRoZSBmaWxlIGhhbmRsZSB0byBiZSBjbG9zZWQgYWdhaW4sCiAgKiBpdCdzIHVu d2lzZSB0byBob2xkIG9udG8gdGhlIHBvaW50ZXIgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBm b3IgYW55CiAgKiBsb25nIHBlcmlvZC4gIFJlY29tbWVuZGVkIHByYWN0aWNlIGlzIHRvIGp1c3Qg cmUtZXhlY3V0ZSBSZWxhdGlvbkdldFNtZ3IKLSAqIGVhY2ggdGltZSB5b3UgbmVlZCB0byBhY2Nl c3MgdGhlIFNNZ3JSZWxhdGlvbi4gIEl0J3MgcXVpdGUgY2hlYXAgaW4KKyAqIGVhY2ggdGltZSB5 b3UgbmVlZCB0byBhY2Nlc3MgdGhlIFNNZ3JGaWxlSGFuZGxlLiAgSXQncyBxdWl0ZSBjaGVhcCBp bgogICogY29tcGFyaXNvbiB0byB3aGF0ZXZlciBhbiBzbWdyIGZ1bmN0aW9uIGlzIGdvaW5nIHRv IGRvLgogICovCi1zdGF0aWMgaW5saW5lIFNNZ3JSZWxhdGlvbgotUmVsYXRpb25HZXRTbWdyKFJl bGF0aW9uIHJlbCkKK3N0YXRpYyBpbmxpbmUgU01nckZpbGVIYW5kbGUKK1JlbGF0aW9uR2V0U21n cihSZWxhdGlvbiByZWwsIEZvcmtOdW1iZXIgZm9ya051bSkKIHsKLQlpZiAodW5saWtlbHkocmVs LT5yZF9zbWdyID09IE5VTEwpKQotCQlzbWdyc2V0b3duZXIoJihyZWwtPnJkX3NtZ3IpLCBzbWdy b3BlbihyZWwtPnJkX2xvY2F0b3IsIHJlbC0+cmRfYmFja2VuZCkpOwotCXJldHVybiByZWwtPnJk X3NtZ3I7CisJaWYgKHVubGlrZWx5KHJlbC0+cmRfc21ncltmb3JrTnVtXSA9PSBOVUxMKSkKKwkJ c21ncnNldG93bmVyKCYocmVsLT5yZF9zbWdyW2ZvcmtOdW1dKSwgc21ncm9wZW4ocmVsLT5yZF9s b2NhdG9yLCByZWwtPnJkX2JhY2tlbmQsIGZvcmtOdW0pKTsKKwlyZXR1cm4gcmVsLT5yZF9zbWdy W2ZvcmtOdW1dOwogfQorI2VuZGlmCiAKIC8qCiAgKiBSZWxhdGlvbkNsb3NlU21ncgpAQCAtNTgw LDEzICs1ODEsMTUgQEAgUmVsYXRpb25HZXRTbWdyKFJlbGF0aW9uIHJlbCkKIHN0YXRpYyBpbmxp bmUgdm9pZAogUmVsYXRpb25DbG9zZVNtZ3IoUmVsYXRpb24gcmVsYXRpb24pCiB7Ci0JaWYgKHJl bGF0aW9uLT5yZF9zbWdyICE9IE5VTEwpCi0JCXNtZ3JjbG9zZShyZWxhdGlvbi0+cmRfc21ncik7 Ci0KLQkvKiBzbWdyY2xvc2Ugc2hvdWxkIHVuaG9vayBmcm9tIG93bmVyIHBvaW50ZXIgKi8KLQlB c3NlcnQocmVsYXRpb24tPnJkX3NtZ3IgPT0gTlVMTCk7CisJZm9yIChpbnQgaSA9IDA7IGkgPD0g TUFYX0ZPUktOVU07IGkrKykKKwl7CisJCWlmIChyZWxhdGlvbi0+cmRfc21ncltpXSAhPSBOVUxM KQorCQl7CisJCQlzbWdyY2xvc2UocmVsYXRpb24tPnJkX3NtZ3JbaV0pOworCQkJQXNzZXJ0KHJl bGF0aW9uLT5yZF9zbWdyW2ldID09IE5VTEwpOworCQl9CisJfQogfQotI2VuZGlmCQkJCQkJCS8q ICFGUk9OVEVORCAqLwogCiAvKgogICogUmVsYXRpb25HZXRUYXJnZXRCbG9jawpAQCAtNTk3LDcg KzYwMCw3IEBAIFJlbGF0aW9uQ2xvc2VTbWdyKFJlbGF0aW9uIHJlbGF0aW9uKQogICogc28gdGhl cmUncyBubyBuZWVkIHRvIHJlLW9wZW4gdGhlIHNtZ3IgaGFuZGxlIGlmIGl0J3Mgbm90IGN1cnJl bnRseSBvcGVuLgogICovCiAjZGVmaW5lIFJlbGF0aW9uR2V0VGFyZ2V0QmxvY2socmVsYXRpb24p IFwKLQkoIChyZWxhdGlvbiktPnJkX3NtZ3IgIT0gTlVMTCA/IChyZWxhdGlvbiktPnJkX3NtZ3It PnNtZ3JfdGFyZ2Jsb2NrIDogSW52YWxpZEJsb2NrTnVtYmVyICkKKwkoIChyZWxhdGlvbiktPnJk X3NtZ3JbTUFJTl9GT1JLTlVNXSAhPSBOVUxMID8gKHJlbGF0aW9uKS0+cmRfc21ncltNQUlOX0ZP UktOVU1dLT5zbWdyX3RhcmdibG9jayA6IEludmFsaWRCbG9ja051bWJlciApCiAKIC8qCiAgKiBS ZWxhdGlvblNldFRhcmdldEJsb2NrCkBAIC02MDUsNyArNjA4LDcgQEAgUmVsYXRpb25DbG9zZVNt Z3IoUmVsYXRpb24gcmVsYXRpb24pCiAgKi8KICNkZWZpbmUgUmVsYXRpb25TZXRUYXJnZXRCbG9j ayhyZWxhdGlvbiwgdGFyZ2Jsb2NrKSBcCiAJZG8geyBcCi0JCVJlbGF0aW9uR2V0U21ncihyZWxh dGlvbiktPnNtZ3JfdGFyZ2Jsb2NrID0gKHRhcmdibG9jayk7IFwKKwkJUmVsYXRpb25HZXRTbWdy KHJlbGF0aW9uLCBNQUlOX0ZPUktOVU0pLT5zbWdyX3RhcmdibG9jayA9ICh0YXJnYmxvY2spOyBc CiAJfSB3aGlsZSAoMCkKIAogLyoKLS0gCjIuMzguMQoK --_002_7BAF384A654C4877BB4DEDE4E44A9326amazoncom_--