Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tzNKh-001Ez9-34 for pgsql-hackers@arkaria.postgresql.org; Mon, 31 Mar 2025 22:10:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tzMjc-00ClSL-AU for pgsql-hackers@arkaria.postgresql.org; Mon, 31 Mar 2025 21:31:56 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tzMjb-00ClSD-G4 for pgsql-hackers@lists.postgresql.org; Mon, 31 Mar 2025 21:31:55 +0000 Received: from meesny.iki.fi ([2001:67c:2b0:1c1::201]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1tzMjU-002J8H-2R for pgsql-hackers@postgresql.org; Mon, 31 Mar 2025 21:31:55 +0000 Received: from [192.168.1.112] (iptv-hkibng21-58c090-167.dhcp.inet.fi [88.192.144.167]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by meesny.iki.fi (Postfix) with ESMTPSA id 4ZRPTX2wfhzyQX; Tue, 1 Apr 2025 00:31:44 +0300 (EEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1743456705; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=afbnFIfkpN7eTbsM3LvNFcbN3VSfitFTnnb9CV95dTo=; b=hHH624XNIgBHmNAhrd8EIhoPuxmvg/+IwNYtz34GXY5DunGFlmY6NDlxjTitG6VQtdUTzr R5tkTiAnrZE3EAL4WsKhiRzKfoN+39VoDmQpsICKKBYqTD4zVBMF5//vyfWyQuGoZyXqVX d9OJ2rJGK2V/feO2Qg2cZfKu1EEENa8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1743456705; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=afbnFIfkpN7eTbsM3LvNFcbN3VSfitFTnnb9CV95dTo=; b=gFi0SmE6wpBAh+6Cm45Cu7/qoRUkRPS0H9rLpDtjjkTUCWc6iGUh3pvm7q2ZsLo3aDUM1g /jQ3OoDZq3Yru+vbTZgN0ml55qyxYu2+y8bsA1MocDx5C+YdkwZhrqjtjJbbthlFAQd6F4 SQaJ9g4V5uHf30Gmr5frFyKLjGsmuJc= ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Seal: i=1; s=meesny; d=iki.fi; t=1743456705; a=rsa-sha256; cv=none; b=Lj3AtFfEaeEmFvV8xO45LYkXbt+GLzsrAjIw4/is315trWIQwgsswIOTot8xPFKB9y/fWz Ldudzn0qddApTsbFfqSO4HEoKjaaKoh3RUOO1I14v92zuMb6sPi3ffw49/iCLFPzMd0ZK2 C+ocJ0w4XjuLntoFdMKZxlIujk7mhhM= Content-Type: multipart/mixed; boundary="------------nSXAXBhgWt0AUd9uE0wCc0X0" Message-ID: <80f254d3-8ee9-4cde-a7e3-ee99998154da@iki.fi> Date: Tue, 1 Apr 2025 00:31:43 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: CSN snapshots in hot standby From: Heikki Linnakangas To: John Naylor , pgsql-hackers Cc: Andres Freund , "Andrey M. Borodin" , Kirill Reshke References: <08da26cc-95ef-4c0e-9573-8b930f80ce27@iki.fi> <53C9CD5A-4403-4FF0-9F00-8B8A00F922A7@yandex-team.ru> <7cd97248-fd04-4fb2-9f7f-096c1d7660e8@iki.fi> <718d1788-b058-40e6-bc37-8f15612b5646@iki.fi> Content-Language: en-US In-Reply-To: <718d1788-b058-40e6-bc37-8f15612b5646@iki.fi> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------nSXAXBhgWt0AUd9uE0wCc0X0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Here's a new patchset version. Not much has changed in the actual CSN patches. But I spent a lot of time refactoring the snapshot management code, so that there is a simple place to add the "inprogress XID cache" for the CSN snapshots, in a way that avoids duplicating the cache if a snapshot is copied around. Patches 0001-0002 are the patches I posted on a separate thread earlier. See https://www.postgresql.org/message-id/ec10d398-c9b3-4542-8095-5fc6408b17d1%40iki.fi. Patches 0003-0006 contain more snapshot manager changes. The end state is that an MVCC snapshot consists of two structs: a shared "inner" struct that contains xmin, xmax and the XID lists, and an "outer" struct that contains a pointer to the shared struct and the current command ID. As a snapshot is copied around, all the copies share the same shared, reference-counted struct. The rest of the patches are the same CSN patches I posted before, rebased over the snapshot manager changes. There's one thing that hasn't been discussed yet: The ProcArrayRecoveryEndTransaction() function, which replaces ExpireTreeKnownAssignedTransactionIds() and is called on replay of every commit/abort record, does this: > /* > * If this was the oldest XID that was still running, advance it. This is > * important for advancing the global xmin, which avoids unnecessary > * recovery conflicts > * > * No locking required because this runs in the startup process. > * > * XXX: the caller actually has a list of XIDs that just committed. We > * could save some clog lookups by taking advantage of that list. > */ > oldest_running_primary_xid = procArray->oldest_running_primary_xid; > while (oldest_running_primary_xid < max_xid) > { > if (!TransactionIdDidCommit(oldest_running_primary_xid) && > !TransactionIdDidAbort(oldest_running_primary_xid)) > { > break; > } > TransactionIdAdvance(oldest_running_primary_xid); > } > if (max_xid == oldest_running_primary_xid) > TransactionIdAdvance(oldest_running_primary_xid); The point is to maintain an "oldest xmin" value based on the WAL records that are being replayed. Whenever the currently oldest running XID finishes, we scan the CLOG to find the next oldest XID that hasn't completed yet. That adds approximately one or two CLOG lookup to every commit record replay on average. I haven't tried measuring that, but it seems like it could slow down recovery. There are ways that could be improved. For example, do it in larger batches. A bunch of other small XXX comments remain, but they're just markers for comments that need to be adjusted, or for further cleanups that are now possible. There are also several ways the inprogress cache could be made more efficient, which I haven't explored: - For each XID in the cache radix tree, we store one bit to indicate whether the lookup has been performed, i.e. if the cache is valid for the XID, and another bit to indicate if the XID is visible or not. With 64-bit cache words stored in the radix tree, each cache word can store the status of 32 transactions. It would probably be better to work in bigger chunks. For example, when doing a lookup in the cache, check the status of 64 transactions at once. Assuming they're all stored on the same CSN page, it would not be much more expensive than a single XID lookup. That would make the cache 2x more compact, and save on future lookups of XIDS falling on the same cache word. - Initializing the radix tree cache is fairly expensive, with several memory allocations. Many of those allocations could be done lazily with some effort in radixtree.h. - Or start the cache as a small array of XIDs, and switch to the radix tree only after it fills up. -- Heikki Linnakangas Neon (https://neon.tech) --------------nSXAXBhgWt0AUd9uE0wCc0X0 Content-Type: text/x-patch; charset=UTF-8; name="v6-0001-Split-SnapshotData-into-separate-structs-for-each.patch" Content-Disposition: attachment; filename*0="v6-0001-Split-SnapshotData-into-separate-structs-for-each.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBjMmI1YmM1ZjFmMmNkOTU5YzY5NWE5MWJkMmVlYzA0NzQ0MDQyNmZjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMjAgRGVjIDIwMjQgMDA6MzY6MzMgKzAyMDAK U3ViamVjdDogW1BBVENIIHY2IDAxLzEyXSBTcGxpdCBTbmFwc2hvdERhdGEgaW50byBzZXBh cmF0ZSBzdHJ1Y3RzIGZvciBlYWNoCiBraW5kIG9mIHNuYXBzaG90CgpUaGUgU25hcHNob3RE YXRhIGZpZWxkcyB3ZXJlIHJlcHVycG9zZWQgZm9yIGRpZmZlcmVudCB1c2VzIGRlcGVuZGlu Zwp0aGUga2luZCBvZiBzbmFwc2hvdC4gU3BsaXQgaXQgaW50byBzZXBhcmF0ZSBzdHJ1Y3Rz IGZvciBkaWZmZXJlbnQKa2luZHMgb2Ygc25hcHNob3RzLCBzbyB0aGF0IGl0IGlzIG1vcmUg Y2xlYXIgd2hpY2ggZmllbGRzIGFyZSB1c2VkCndpdGggd2hpY2ggc25hcHNob3Qga2luZCwg YW5kIHRoZSBmaWVsZHMgY2FuIGhhdmUgbW9yZSBkZXNjcmlwdGl2ZQpuYW1lcy4KLS0tCiBj b250cmliL2FtY2hlY2svdmVyaWZ5X2hlYXBhbS5jICAgICAgICAgICAgICAgfCAgIDIgKy0K IGNvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMgICAgICAgICAgICAgICB8ICAgMiAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgICAgICAgIHwgICAz ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgICAgfCAg IDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV92aXNpYmlsaXR5LmMgICB8 ICAyNCArLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgICAgICAgICAg ICB8ICAxMSArLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYyAgICAg ICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jICAg ICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMgICAg ICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwu YyAgICAgICAgIHwgIDE0ICstCiBzcmMvYmFja2VuZC9jYXRhbG9nL3BnX2luaGVyaXRzLmMg ICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5jLmMgICAg ICAgICAgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRz LmMgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNt ZHMuYyAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNJ bmRleGluZy5jICAgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1JlcGxpY2F0aW9uLmMgICAgICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9wYXJ0aXRpb25p bmcvcGFydGRlc2MuYyAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvZGVjb2RlLmMgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9vcmlnaW4uYyAgICAgIHwgICA0ICstCiAuLi4vcmVwbGljYXRpb24v bG9naWNhbC9yZW9yZGVyYnVmZmVyLmMgICAgICAgfCAxMTQgKysrKystLS0tLQogc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYyAgIHwgMTE0ICsrKysrLS0t LS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jICAgICAgICAgICB8ICAg MiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgICAgICAgICAgIHwg ICA2ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRlLmMgICAgICAgICAg fCAgMzIgKy0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQveGlkOGZ1bmNzLmMgICAgICAgICAg ICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jICAgICAgICAg ICAgICB8IDE5OCArKysrKysrKysrKy0tLS0tLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFw YW0uaCAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL3Jl bHNjYW4uaCAgICAgICAgICAgICAgICAgIHwgICA2ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9yZW9yZGVyYnVmZmVyLmggICAgICAgfCAgMTIgKy0KIHNyYy9pbmNsdWRlL3JlcGxp Y2F0aW9uL3NuYXBidWlsZC5oICAgICAgICAgICB8ICAgNiArLQogc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vc25hcGJ1aWxkX2ludGVybmFsLmggIHwgICAyICstCiBzcmMvaW5jbHVkZS9z dG9yYWdlL3ByZWRpY2F0ZS5oICAgICAgICAgICAgICAgfCAgIDQgKy0KIHNyYy9pbmNsdWRl L3N0b3JhZ2UvcHJvY2FycmF5LmggICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2luY2x1 ZGUvdXRpbHMvc25hcG1nci5oICAgICAgICAgICAgICAgICAgIHwgIDE2ICstCiBzcmMvaW5j bHVkZS91dGlscy9zbmFwc2hvdC5oICAgICAgICAgICAgICAgICAgfCAxNTUgKysrKysrKysr LS0tLS0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8 ICAgNCArCiAzNiBmaWxlcyBjaGFuZ2VkLCA0NTEgaW5zZXJ0aW9ucygrKSwgMzM2IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfaGVhcGFtLmMg Yi9jb250cmliL2FtY2hlY2svdmVyaWZ5X2hlYXBhbS5jCmluZGV4IDE5NzBmYzg2MjBhLi42 NjY1Y2FmYzE3OSAxMDA2NDQKLS0tIGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9oZWFwYW0u YworKysgYi9jb250cmliL2FtY2hlY2svdmVyaWZ5X2hlYXBhbS5jCkBAIC0zMTAsNyArMzEw LDcgQEAgdmVyaWZ5X2hlYXBhbShQR19GVU5DVElPTl9BUkdTKQogCSAqIEFueSB4bWluIG5l d2VyIHRoYW4gdGhlIHhtaW4gb2Ygb3VyIHNuYXBzaG90IGNhbid0IGJlY29tZSBhbGwtdmlz aWJsZQogCSAqIHdoaWxlIHdlJ3JlIHJ1bm5pbmcuCiAJICovCi0JY3R4LnNhZmVfeG1pbiA9 IEdldFRyYW5zYWN0aW9uU25hcHNob3QoKS0+eG1pbjsKKwljdHguc2FmZV94bWluID0gR2V0 VHJhbnNhY3Rpb25TbmFwc2hvdCgpLT5tdmNjLnhtaW47CiAKIAkvKgogCSAqIElmIHdlIHJl cG9ydCBjb3JydXB0aW9uIHdoZW4gbm90IGV4YW1pbmluZyBzb21lIGluZGl2aWR1YWwgYXR0 cmlidXRlLApkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyBi L2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKaW5kZXggZjExYzQzYTBlZDcuLmU5 MGI0YTJhZDVhIDEwMDY0NAotLS0gYS9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5j CisrKyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfbmJ0cmVlLmMKQEAgLTQ1OCw3ICs0NTgs NyBAQCBidF9jaGVja19ldmVyeV9sZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXBy ZWwsIGJvb2wgaGVhcGtleXNwYWNlLAogCQkJICovCiAJCQlpZiAoSXNvbGF0aW9uVXNlc1hh Y3RTbmFwc2hvdCgpICYmIHJlbC0+cmRfaW5kZXgtPmluZGNoZWNreG1pbiAmJgogCQkJCSFU cmFuc2FjdGlvbklkUHJlY2VkZXMoSGVhcFR1cGxlSGVhZGVyR2V0WG1pbihyZWwtPnJkX2lu ZGV4dHVwbGUtPnRfZGF0YSksCi0JCQkJCQkJCQkgICBzbmFwc2hvdC0+eG1pbikpCisJCQkJ CQkJCQkgICBzbmFwc2hvdC0+bXZjYy54bWluKSkKIAkJCQllcmVwb3J0KEVSUk9SLAogCQkJ CQkJKGVycmNvZGUoRVJSQ09ERV9UX1JfU0VSSUFMSVpBVElPTl9GQUlMVVJFKSwKIAkJCQkJ CSBlcnJtc2coImluZGV4IFwiJXNcIiBjYW5ub3QgYmUgdmVyaWZpZWQgdXNpbmcgdHJhbnNh Y3Rpb24gc25hcHNob3QiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwppbmRleCA2ZTQz M2RiMDM5ZS4uMGNmYTEwMGNiZDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCkBA IC02MDUsNyArNjA1LDggQEAgaGVhcF9wcmVwYXJlX3BhZ2VzY2FuKFRhYmxlU2NhbkRlc2Mg c3NjYW4pCiAJICogZnVsbCBwYWdlIHdyaXRlLiBVbnRpbCB3ZSBjYW4gcHJvdmUgdGhhdCBi ZXlvbmQgZG91YnQsIGxldCdzIGNoZWNrIGVhY2gKIAkgKiB0dXBsZSBmb3IgdmlzaWJpbGl0 eSB0aGUgaGFyZCB3YXkuCiAJICovCi0JYWxsX3Zpc2libGUgPSBQYWdlSXNBbGxWaXNpYmxl KHBhZ2UpICYmICFzbmFwc2hvdC0+dGFrZW5EdXJpbmdSZWNvdmVyeTsKKwlhbGxfdmlzaWJs ZSA9IFBhZ2VJc0FsbFZpc2libGUocGFnZSkgJiYKKwkJKHNuYXBzaG90LT5zbmFwc2hvdF90 eXBlICE9IFNOQVBTSE9UX01WQ0MgfHwgIXNuYXBzaG90LT5tdmNjLnRha2VuRHVyaW5nUmVj b3ZlcnkpOwogCWNoZWNrX3NlcmlhbGl6YWJsZSA9CiAJCUNoZWNrRm9yU2VyaWFsaXphYmxl Q29uZmxpY3RPdXROZWVkZWQoc2Nhbi0+cnNfYmFzZS5yc19yZCwgc25hcHNob3QpOwogCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCAyNGQzNzY1 YWEyMC4uZmNlNjU3ZjAwZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFt X2hhbmRsZXIuYwpAQCAtMzkwLDcgKzM5MCw3IEBAIHR1cGxlX2xvY2tfcmV0cnk6CiAKIAkJ aWYgKCFJdGVtUG9pbnRlckVxdWFscygmdG1mZC0+Y3RpZCwgJnR1cGxlLT50X3NlbGYpKQog CQl7Ci0JCQlTbmFwc2hvdERhdGEgU25hcHNob3REaXJ0eTsKKwkJCURpcnR5U25hcHNob3RE YXRhIFNuYXBzaG90RGlydHk7CiAJCQlUcmFuc2FjdGlvbklkIHByaW9yWG1heDsKIAogCQkJ LyogaXQgd2FzIHVwZGF0ZWQsIHNvIGxvb2sgYXQgdGhlIHVwZGF0ZWQgdmVyc2lvbiAqLwpA QCAtNDE1LDcgKzQxNSw3IEBAIHR1cGxlX2xvY2tfcmV0cnk6CiAJCQkJCQkJIGVycm1zZygi dHVwbGUgdG8gYmUgbG9ja2VkIHdhcyBhbHJlYWR5IG1vdmVkIHRvIGFub3RoZXIgcGFydGl0 aW9uIGR1ZSB0byBjb25jdXJyZW50IHVwZGF0ZSIpKSk7CiAKIAkJCQl0dXBsZS0+dF9zZWxm ID0gKnRpZDsKLQkJCQlpZiAoaGVhcF9mZXRjaChyZWxhdGlvbiwgJlNuYXBzaG90RGlydHks IHR1cGxlLCAmYnVmZmVyLCB0cnVlKSkKKwkJCQlpZiAoaGVhcF9mZXRjaChyZWxhdGlvbiwg KFNuYXBzaG90KSAmU25hcHNob3REaXJ0eSwgdHVwbGUsICZidWZmZXIsIHRydWUpKQogCQkJ CXsKIAkJCQkJLyoKIAkJCQkJICogSWYgeG1pbiBpc24ndCB3aGF0IHdlJ3JlIGV4cGVjdGlu ZywgdGhlIHNsb3QgbXVzdCBoYXZlCkBAIC0yMzA4LDcgKzIzMDgsNyBAQCBoZWFwYW1fc2Nh bl9zYW1wbGVfbmV4dF90dXBsZShUYWJsZVNjYW5EZXNjIHNjYW4sIFNhbXBsZVNjYW5TdGF0 ZSAqc2NhbnN0YXRlLAogCiAJcGFnZSA9IChQYWdlKSBCdWZmZXJHZXRQYWdlKGhzY2FuLT5y c19jYnVmKTsKIAlhbGxfdmlzaWJsZSA9IFBhZ2VJc0FsbFZpc2libGUocGFnZSkgJiYKLQkJ IXNjYW4tPnJzX3NuYXBzaG90LT50YWtlbkR1cmluZ1JlY292ZXJ5OworCQkoc2Nhbi0+cnNf c25hcHNob3QtPnNuYXBzaG90X3R5cGUgIT0gU05BUFNIT1RfTVZDQyB8fCAhc2Nhbi0+cnNf c25hcHNob3QtPm12Y2MudGFrZW5EdXJpbmdSZWNvdmVyeSk7CiAJbWF4b2Zmc2V0ID0gUGFn ZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKIAogCWZvciAoOzspCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1fdmlzaWJpbGl0eS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX3Zpc2liaWxpdHkuYwppbmRleCAwNWY2OTQ2ZmU2MC4u ZjVkNjliNTU4ZjEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bV92aXNpYmlsaXR5LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX3Zp c2liaWxpdHkuYwpAQCAtNzQwLDcgKzc0MCw3IEBAIEhlYXBUdXBsZVNhdGlzZmllc1VwZGF0 ZShIZWFwVHVwbGUgaHR1cCwgQ29tbWFuZElkIGN1cmNpZCwKICAqIHRva2VuIGlzIGFsc28g cmV0dXJuZWQgaW4gc25hcHNob3QtPnNwZWN1bGF0aXZlVG9rZW4uCiAgKi8KIHN0YXRpYyBi b29sCi1IZWFwVHVwbGVTYXRpc2ZpZXNEaXJ0eShIZWFwVHVwbGUgaHR1cCwgU25hcHNob3Qg c25hcHNob3QsCitIZWFwVHVwbGVTYXRpc2ZpZXNEaXJ0eShIZWFwVHVwbGUgaHR1cCwgRGly dHlTbmFwc2hvdERhdGEgKnNuYXBzaG90LAogCQkJCQkJQnVmZmVyIGJ1ZmZlcikKIHsKIAlI ZWFwVHVwbGVIZWFkZXIgdHVwbGUgPSBodHVwLT50X2RhdGE7CkBAIC05NTcsNyArOTU3LDcg QEAgSGVhcFR1cGxlU2F0aXNmaWVzRGlydHkoSGVhcFR1cGxlIGh0dXAsIFNuYXBzaG90IHNu YXBzaG90LAogICogYW5kIG1vcmUgY29udGVudGlvbiBvbiBQcm9jQXJyYXlMb2NrLgogICov CiBzdGF0aWMgYm9vbAotSGVhcFR1cGxlU2F0aXNmaWVzTVZDQyhIZWFwVHVwbGUgaHR1cCwg U25hcHNob3Qgc25hcHNob3QsCitIZWFwVHVwbGVTYXRpc2ZpZXNNVkNDKEhlYXBUdXBsZSBo dHVwLCBNVkNDU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCSAgIEJ1ZmZlciBidWZmZXIpCiB7 CiAJSGVhcFR1cGxlSGVhZGVyIHR1cGxlID0gaHR1cC0+dF9kYXRhOwpAQCAtMTQzNSw3ICsx NDM1LDcgQEAgSGVhcFR1cGxlU2F0aXNmaWVzVmFjdXVtSG9yaXpvbihIZWFwVHVwbGUgaHR1 cCwgQnVmZmVyIGJ1ZmZlciwgVHJhbnNhY3Rpb25JZCAqZGUKICAqCXNuYXBzaG90LT52aXN0 ZXN0IG11c3QgaGF2ZSBiZWVuIHNldCB1cCB3aXRoIHRoZSBob3Jpem9uIHRvIHVzZS4KICAq Lwogc3RhdGljIGJvb2wKLUhlYXBUdXBsZVNhdGlzZmllc05vblZhY3V1bWFibGUoSGVhcFR1 cGxlIGh0dXAsIFNuYXBzaG90IHNuYXBzaG90LAorSGVhcFR1cGxlU2F0aXNmaWVzTm9uVmFj dXVtYWJsZShIZWFwVHVwbGUgaHR1cCwgTm9uVmFjdXVtYWJsZVNuYXBzaG90RGF0YSAqc25h cHNob3QsCiAJCQkJCQkJCUJ1ZmZlciBidWZmZXIpCiB7CiAJVHJhbnNhY3Rpb25JZCBkZWFk X2FmdGVyID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CkBAIC0xNTkzLDcgKzE1OTMsNyBAQCBU cmFuc2FjdGlvbklkSW5BcnJheShUcmFuc2FjdGlvbklkIHhpZCwgVHJhbnNhY3Rpb25JZCAq eGlwLCBTaXplIG51bSkKICAqIGNvbXBsaWNhdGVkIHRoYW4gd2hlbiBkZWFsaW5nICJvbmx5 IiB3aXRoIHRoZSBwcmVzZW50LgogICovCiBzdGF0aWMgYm9vbAotSGVhcFR1cGxlU2F0aXNm aWVzSGlzdG9yaWNNVkNDKEhlYXBUdXBsZSBodHVwLCBTbmFwc2hvdCBzbmFwc2hvdCwKK0hl YXBUdXBsZVNhdGlzZmllc0hpc3RvcmljTVZDQyhIZWFwVHVwbGUgaHR1cCwgSGlzdG9yaWNN VkNDU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkJICAgQnVmZmVyIGJ1ZmZlcikKIHsKIAlI ZWFwVHVwbGVIZWFkZXIgdHVwbGUgPSBodHVwLT50X2RhdGE7CkBAIC0xNjEwLDcgKzE2MTAs NyBAQCBIZWFwVHVwbGVTYXRpc2ZpZXNIaXN0b3JpY01WQ0MoSGVhcFR1cGxlIGh0dXAsIFNu YXBzaG90IHNuYXBzaG90LAogCQlyZXR1cm4gZmFsc2U7CiAJfQogCS8qIGNoZWNrIGlmIGl0 J3Mgb25lIG9mIG91ciB0eGlkcywgdG9wbGV2ZWwgaXMgYWxzbyBpbiB0aGVyZSAqLwotCWVs c2UgaWYgKFRyYW5zYWN0aW9uSWRJbkFycmF5KHhtaW4sIHNuYXBzaG90LT5zdWJ4aXAsIHNu YXBzaG90LT5zdWJ4Y250KSkKKwllbHNlIGlmIChUcmFuc2FjdGlvbklkSW5BcnJheSh4bWlu LCBzbmFwc2hvdC0+Y3VyeGlwLCBzbmFwc2hvdC0+Y3VyeGNudCkpCiAJewogCQlib29sCQly ZXNvbHZlZDsKIAkJQ29tbWFuZElkCWNtaW4gPSBIZWFwVHVwbGVIZWFkZXJHZXRSYXdDb21t YW5kSWQodHVwbGUpOwpAQCAtMTY2OSw3ICsxNjY5LDcgQEAgSGVhcFR1cGxlU2F0aXNmaWVz SGlzdG9yaWNNVkNDKEhlYXBUdXBsZSBodHVwLCBTbmFwc2hvdCBzbmFwc2hvdCwKIAkJcmV0 dXJuIGZhbHNlOwogCX0KIAkvKiBjaGVjayBpZiBpdCdzIGEgY29tbWl0dGVkIHRyYW5zYWN0 aW9uIGluIFt4bWluLCB4bWF4KSAqLwotCWVsc2UgaWYgKFRyYW5zYWN0aW9uSWRJbkFycmF5 KHhtaW4sIHNuYXBzaG90LT54aXAsIHNuYXBzaG90LT54Y250KSkKKwllbHNlIGlmIChUcmFu c2FjdGlvbklkSW5BcnJheSh4bWluLCBzbmFwc2hvdC0+Y29tbWl0dGVkX3hpZHMsIHNuYXBz aG90LT54Y250KSkKIAl7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCX0KQEAgLTE3MDIsNyAr MTcwMiw3IEBAIEhlYXBUdXBsZVNhdGlzZmllc0hpc3RvcmljTVZDQyhIZWFwVHVwbGUgaHR1 cCwgU25hcHNob3Qgc25hcHNob3QsCiAJfQogCiAJLyogY2hlY2sgaWYgaXQncyBvbmUgb2Yg b3VyIHR4aWRzLCB0b3BsZXZlbCBpcyBhbHNvIGluIHRoZXJlICovCi0JaWYgKFRyYW5zYWN0 aW9uSWRJbkFycmF5KHhtYXgsIHNuYXBzaG90LT5zdWJ4aXAsIHNuYXBzaG90LT5zdWJ4Y250 KSkKKwlpZiAoVHJhbnNhY3Rpb25JZEluQXJyYXkoeG1heCwgc25hcHNob3QtPmN1cnhpcCwg c25hcHNob3QtPmN1cnhjbnQpKQogCXsKIAkJYm9vbAkJcmVzb2x2ZWQ7CiAJCUNvbW1hbmRJ ZAljbWluOwpAQCAtMTc1NSw3ICsxNzU1LDcgQEAgSGVhcFR1cGxlU2F0aXNmaWVzSGlzdG9y aWNNVkNDKEhlYXBUdXBsZSBodHVwLCBTbmFwc2hvdCBzbmFwc2hvdCwKIAllbHNlIGlmIChU cmFuc2FjdGlvbklkRm9sbG93c09yRXF1YWxzKHhtYXgsIHNuYXBzaG90LT54bWF4KSkKIAkJ cmV0dXJuIHRydWU7CiAJLyogeG1heCBpcyBiZXR3ZWVuIFt4bWluLCB4bWF4KSwgY2hlY2sg a25vd24gY29tbWl0dGVkIGFycmF5ICovCi0JZWxzZSBpZiAoVHJhbnNhY3Rpb25JZEluQXJy YXkoeG1heCwgc25hcHNob3QtPnhpcCwgc25hcHNob3QtPnhjbnQpKQorCWVsc2UgaWYgKFRy YW5zYWN0aW9uSWRJbkFycmF5KHhtYXgsIHNuYXBzaG90LT5jb21taXR0ZWRfeGlkcywgc25h cHNob3QtPnhjbnQpKQogCQlyZXR1cm4gZmFsc2U7CiAJLyogeG1heCBpcyBiZXR3ZWVuIFt4 bWluLCB4bWF4KSwgYnV0IGtub3duIG5vdCB0byBoYXZlIGNvbW1pdHRlZCB5ZXQgKi8KIAll bHNlCkBAIC0xNzc4LDcgKzE3NzgsNyBAQCBIZWFwVHVwbGVTYXRpc2ZpZXNWaXNpYmlsaXR5 KEhlYXBUdXBsZSBodHVwLCBTbmFwc2hvdCBzbmFwc2hvdCwgQnVmZmVyIGJ1ZmZlcikKIAlz d2l0Y2ggKHNuYXBzaG90LT5zbmFwc2hvdF90eXBlKQogCXsKIAkJY2FzZSBTTkFQU0hPVF9N VkNDOgotCQkJcmV0dXJuIEhlYXBUdXBsZVNhdGlzZmllc01WQ0MoaHR1cCwgc25hcHNob3Qs IGJ1ZmZlcik7CisJCQlyZXR1cm4gSGVhcFR1cGxlU2F0aXNmaWVzTVZDQyhodHVwLCAmc25h cHNob3QtPm12Y2MsIGJ1ZmZlcik7CiAJCWNhc2UgU05BUFNIT1RfU0VMRjoKIAkJCXJldHVy biBIZWFwVHVwbGVTYXRpc2ZpZXNTZWxmKGh0dXAsIHNuYXBzaG90LCBidWZmZXIpOwogCQlj YXNlIFNOQVBTSE9UX0FOWToKQEAgLTE3ODYsMTEgKzE3ODYsMTEgQEAgSGVhcFR1cGxlU2F0 aXNmaWVzVmlzaWJpbGl0eShIZWFwVHVwbGUgaHR1cCwgU25hcHNob3Qgc25hcHNob3QsIEJ1 ZmZlciBidWZmZXIpCiAJCWNhc2UgU05BUFNIT1RfVE9BU1Q6CiAJCQlyZXR1cm4gSGVhcFR1 cGxlU2F0aXNmaWVzVG9hc3QoaHR1cCwgc25hcHNob3QsIGJ1ZmZlcik7CiAJCWNhc2UgU05B UFNIT1RfRElSVFk6Ci0JCQlyZXR1cm4gSGVhcFR1cGxlU2F0aXNmaWVzRGlydHkoaHR1cCwg c25hcHNob3QsIGJ1ZmZlcik7CisJCQlyZXR1cm4gSGVhcFR1cGxlU2F0aXNmaWVzRGlydHko aHR1cCwgJnNuYXBzaG90LT5kaXJ0eSwgYnVmZmVyKTsKIAkJY2FzZSBTTkFQU0hPVF9ISVNU T1JJQ19NVkNDOgotCQkJcmV0dXJuIEhlYXBUdXBsZVNhdGlzZmllc0hpc3RvcmljTVZDQyho dHVwLCBzbmFwc2hvdCwgYnVmZmVyKTsKKwkJCXJldHVybiBIZWFwVHVwbGVTYXRpc2ZpZXNI aXN0b3JpY01WQ0MoaHR1cCwgJnNuYXBzaG90LT5oaXN0b3JpY19tdmNjLCBidWZmZXIpOwog CQljYXNlIFNOQVBTSE9UX05PTl9WQUNVVU1BQkxFOgotCQkJcmV0dXJuIEhlYXBUdXBsZVNh dGlzZmllc05vblZhY3V1bWFibGUoaHR1cCwgc25hcHNob3QsIGJ1ZmZlcik7CisJCQlyZXR1 cm4gSGVhcFR1cGxlU2F0aXNmaWVzTm9uVmFjdXVtYWJsZShodHVwLCAmc25hcHNob3QtPm5v bnZhY3V1bWFibGUsIGJ1ZmZlcik7CiAJfQogCiAJcmV0dXJuIGZhbHNlOwkJCQkvKiBrZWVw IGNvbXBpbGVyIHF1aWV0ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvaW5kZXhhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRl eCA1NWVjNGMxMDM1Mi4uNzY5MTcwYTM3ZDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2lu ZGV4YW0uYwpAQCAtNDY5LDcgKzQ2OSw3IEBAIGluZGV4X3BhcmFsbGVsc2Nhbl9lc3RpbWF0 ZShSZWxhdGlvbiBpbmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJ UkVMQVRJT05fQ0hFQ0tTOwogCiAJbmJ5dGVzID0gb2Zmc2V0b2YoUGFyYWxsZWxJbmRleFNj YW5EZXNjRGF0YSwgcHNfc25hcHNob3RfZGF0YSk7Ci0JbmJ5dGVzID0gYWRkX3NpemUobmJ5 dGVzLCBFc3RpbWF0ZVNuYXBzaG90U3BhY2Uoc25hcHNob3QpKTsKKwluYnl0ZXMgPSBhZGRf c2l6ZShuYnl0ZXMsIEVzdGltYXRlU25hcHNob3RTcGFjZSgmc25hcHNob3QtPm12Y2MpKTsK IAluYnl0ZXMgPSBNQVhBTElHTihuYnl0ZXMpOwogCiAJaWYgKGluc3RydW1lbnQpCkBAIC01 MTcsMTYgKzUxNywxNyBAQCBpbmRleF9wYXJhbGxlbHNjYW5faW5pdGlhbGl6ZShSZWxhdGlv biBoZWFwUmVsYXRpb24sIFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAJQXNzZXJ0KGluc3Ry dW1lbnQgfHwgcGFyYWxsZWxfYXdhcmUpOwogCiAJUkVMQVRJT05fQ0hFQ0tTOworCUFzc2Vy dChzbmFwc2hvdC0+c25hcHNob3RfdHlwZSA9PSBTTkFQU0hPVF9NVkNDKTsKIAogCW9mZnNl dCA9IGFkZF9zaXplKG9mZnNldG9mKFBhcmFsbGVsSW5kZXhTY2FuRGVzY0RhdGEsIHBzX3Nu YXBzaG90X2RhdGEpLAotCQkJCQkgIEVzdGltYXRlU25hcHNob3RTcGFjZShzbmFwc2hvdCkp OworCQkJCQkgIEVzdGltYXRlU25hcHNob3RTcGFjZSgoTVZDQ1NuYXBzaG90KSBzbmFwc2hv dCkpOwogCW9mZnNldCA9IE1BWEFMSUdOKG9mZnNldCk7CiAKIAl0YXJnZXQtPnBzX2xvY2F0 b3IgPSBoZWFwUmVsYXRpb24tPnJkX2xvY2F0b3I7CiAJdGFyZ2V0LT5wc19pbmRleGxvY2F0 b3IgPSBpbmRleFJlbGF0aW9uLT5yZF9sb2NhdG9yOwogCXRhcmdldC0+cHNfb2Zmc2V0X2lu cyA9IDA7CiAJdGFyZ2V0LT5wc19vZmZzZXRfYW0gPSAwOwotCVNlcmlhbGl6ZVNuYXBzaG90 KHNuYXBzaG90LCB0YXJnZXQtPnBzX3NuYXBzaG90X2RhdGEpOworCVNlcmlhbGl6ZVNuYXBz aG90KChNVkNDU25hcHNob3QpIHNuYXBzaG90LCB0YXJnZXQtPnBzX3NuYXBzaG90X2RhdGEp OwogCiAJaWYgKGluc3RydW1lbnQpCiAJewpAQCAtNTkwLDggKzU5MSw4IEBAIGluZGV4X2Jl Z2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFwcmVsLCBSZWxhdGlvbiBpbmRleHJlbCwK IAlBc3NlcnQoUmVsRmlsZUxvY2F0b3JFcXVhbHMoaGVhcHJlbC0+cmRfbG9jYXRvciwgcHNj YW4tPnBzX2xvY2F0b3IpKTsKIAlBc3NlcnQoUmVsRmlsZUxvY2F0b3JFcXVhbHMoaW5kZXhy ZWwtPnJkX2xvY2F0b3IsIHBzY2FuLT5wc19pbmRleGxvY2F0b3IpKTsKIAotCXNuYXBzaG90 ID0gUmVzdG9yZVNuYXBzaG90KHBzY2FuLT5wc19zbmFwc2hvdF9kYXRhKTsKLQlSZWdpc3Rl clNuYXBzaG90KHNuYXBzaG90KTsKKwlzbmFwc2hvdCA9IChTbmFwc2hvdCkgUmVzdG9yZVNu YXBzaG90KHBzY2FuLT5wc19zbmFwc2hvdF9kYXRhKTsKKwlzbmFwc2hvdCA9IFJlZ2lzdGVy U25hcHNob3Qoc25hcHNob3QpOwogCXNjYW4gPSBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwo aW5kZXhyZWwsIG5rZXlzLCBub3JkZXJieXMsIHNuYXBzaG90LAogCQkJCQkJCQkJcHNjYW4s IHRydWUpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idGlu c2VydC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRpbnNlcnQuYwppbmRleCBh YTgyY2VkZTMwYS4uNzE0ZTRlZTNmMGIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9uYnRyZWUvbmJ0aW5zZXJ0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9u YnRpbnNlcnQuYwpAQCAtNDEzLDcgKzQxMyw3IEBAIF9idF9jaGVja191bmlxdWUoUmVsYXRp b24gcmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRlLCBSZWxhdGlvbiBoZWFwUmVsLAog CUluZGV4VHVwbGUJY3VyaXR1cCA9IE5VTEw7CiAJSXRlbUlkCQljdXJpdGVtaWQgPSBOVUxM OwogCUJUU2Nhbkluc2VydCBpdHVwX2tleSA9IGluc2VydHN0YXRlLT5pdHVwX2tleTsKLQlT bmFwc2hvdERhdGEgU25hcHNob3REaXJ0eTsKKwlEaXJ0eVNuYXBzaG90RGF0YSBTbmFwc2hv dERpcnR5OwogCU9mZnNldE51bWJlciBvZmZzZXQ7CiAJT2Zmc2V0TnVtYmVyIG1heG9mZjsK IAlQYWdlCQlwYWdlOwpAQCAtNTU4LDcgKzU1OCw3IEBAIF9idF9jaGVja191bmlxdWUoUmVs YXRpb24gcmVsLCBCVEluc2VydFN0YXRlIGluc2VydHN0YXRlLCBSZWxhdGlvbiBoZWFwUmVs LAogCQkJCSAqIGluZGV4IGVudHJ5IGZvciB0aGUgZW50aXJlIGNoYWluLgogCQkJCSAqLwog CQkJCWVsc2UgaWYgKHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlX2NoZWNrKGhlYXBSZWwsICZo dGlkLAotCQkJCQkJCQkJCQkJCSAgICZTbmFwc2hvdERpcnR5LAorCQkJCQkJCQkJCQkJCSAg IChTbmFwc2hvdCkgJlNuYXBzaG90RGlydHksCiAJCQkJCQkJCQkJCQkJICAgJmFsbF9kZWFk KSkKIAkJCQl7CiAJCQkJCVRyYW5zYWN0aW9uSWQgeHdhaXQ7CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3NwZ2lzdC9zcGd2YWN1dW0uYwppbmRleCBiM2RmMmQ4OTA3NC4uODUwYWQzNmNkMGEgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndmFjdXVtLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYwpAQCAtODA4LDcgKzgwOCw3 IEBAIHNwZ3ZhY3V1bXNjYW4oc3BnQnVsa0RlbGV0ZVN0YXRlICpiZHMpCiAJLyogRmluaXNo IHNldHRpbmcgdXAgc3BnQnVsa0RlbGV0ZVN0YXRlICovCiAJaW5pdFNwR2lzdFN0YXRlKCZi ZHMtPnNwZ3N0YXRlLCBpbmRleCk7CiAJYmRzLT5wZW5kaW5nTGlzdCA9IE5VTEw7Ci0JYmRz LT5teVhtaW4gPSBHZXRBY3RpdmVTbmFwc2hvdCgpLT54bWluOworCWJkcy0+bXlYbWluID0g R2V0QWN0aXZlU25hcHNob3QoKS0+bXZjYy54bWluOwogCWJkcy0+bGFzdEZpbGxlZEJsb2Nr ID0gU1BHSVNUX0xBU1RfRklYRURfQkxLTk87CiAKIAkvKgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJs ZS90YWJsZWFtLmMKaW5kZXggYTU2YzVlY2ViMTQuLjRlYjgxZTQwZDk5IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbS5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKQEAgLTEzMyw3ICsxMzMsNyBAQCB0YWJsZV9wYXJh bGxlbHNjYW5fZXN0aW1hdGUoUmVsYXRpb24gcmVsLCBTbmFwc2hvdCBzbmFwc2hvdCkKIAlT aXplCQlzeiA9IDA7CiAKIAlpZiAoSXNNVkNDU25hcHNob3Qoc25hcHNob3QpKQotCQlzeiA9 IGFkZF9zaXplKHN6LCBFc3RpbWF0ZVNuYXBzaG90U3BhY2Uoc25hcHNob3QpKTsKKwkJc3og PSBhZGRfc2l6ZShzeiwgRXN0aW1hdGVTbmFwc2hvdFNwYWNlKChNVkNDU25hcHNob3QpIHNu YXBzaG90KSk7CiAJZWxzZQogCQlBc3NlcnQoc25hcHNob3QgPT0gU25hcHNob3RBbnkpOwog CkBAIC0xNTIsNyArMTUyLDcgQEAgdGFibGVfcGFyYWxsZWxzY2FuX2luaXRpYWxpemUoUmVs YXRpb24gcmVsLCBQYXJhbGxlbFRhYmxlU2NhbkRlc2MgcHNjYW4sCiAKIAlpZiAoSXNNVkND U25hcHNob3Qoc25hcHNob3QpKQogCXsKLQkJU2VyaWFsaXplU25hcHNob3Qoc25hcHNob3Qs IChjaGFyICopIHBzY2FuICsgcHNjYW4tPnBoc19zbmFwc2hvdF9vZmYpOworCQlTZXJpYWxp emVTbmFwc2hvdCgoTVZDQ1NuYXBzaG90KSBzbmFwc2hvdCwgKGNoYXIgKikgcHNjYW4gKyBw c2Nhbi0+cGhzX3NuYXBzaG90X29mZik7CiAJCXBzY2FuLT5waHNfc25hcHNob3RfYW55ID0g ZmFsc2U7CiAJfQogCWVsc2UKQEAgLTE3NCw4ICsxNzQsOCBAQCB0YWJsZV9iZWdpbnNjYW5f cGFyYWxsZWwoUmVsYXRpb24gcmVsYXRpb24sIFBhcmFsbGVsVGFibGVTY2FuRGVzYyBwc2Nh bikKIAlpZiAoIXBzY2FuLT5waHNfc25hcHNob3RfYW55KQogCXsKIAkJLyogU25hcHNob3Qg d2FzIHNlcmlhbGl6ZWQgLS0gcmVzdG9yZSBpdCAqLwotCQlzbmFwc2hvdCA9IFJlc3RvcmVT bmFwc2hvdCgoY2hhciAqKSBwc2NhbiArIHBzY2FuLT5waHNfc25hcHNob3Rfb2ZmKTsKLQkJ UmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CisJCXNuYXBzaG90ID0gKFNuYXBzaG90KSBS ZXN0b3JlU25hcHNob3QoKGNoYXIgKikgcHNjYW4gKyBwc2Nhbi0+cGhzX3NuYXBzaG90X29m Zik7CisJCXNuYXBzaG90ID0gUmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CiAJCWZsYWdz IHw9IFNPX1RFTVBfU05BUFNIT1Q7CiAJfQogCWVsc2UKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9wYXJhbGxlbC5jCmluZGV4IDk0ZGIxZWMzMDEyLi44MDQ2ZTE0YWJmNyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9wYXJhbGxlbC5jCkBAIC0yNzUsMTAgKzI3NSwxMCBA QCBJbml0aWFsaXplUGFyYWxsZWxEU00oUGFyYWxsZWxDb250ZXh0ICpwY3h0KQogCQlzaG1f dG9jX2VzdGltYXRlX2NodW5rKCZwY3h0LT5lc3RpbWF0b3IsIGNvbWJvY2lkbGVuKTsKIAkJ aWYgKElzb2xhdGlvblVzZXNYYWN0U25hcHNob3QoKSkKIAkJewotCQkJdHNuYXBsZW4gPSBF c3RpbWF0ZVNuYXBzaG90U3BhY2UodHJhbnNhY3Rpb25fc25hcHNob3QpOworCQkJdHNuYXBs ZW4gPSBFc3RpbWF0ZVNuYXBzaG90U3BhY2UoKE1WQ0NTbmFwc2hvdCkgdHJhbnNhY3Rpb25f c25hcHNob3QpOwogCQkJc2htX3RvY19lc3RpbWF0ZV9jaHVuaygmcGN4dC0+ZXN0aW1hdG9y LCB0c25hcGxlbik7CiAJCX0KLQkJYXNuYXBsZW4gPSBFc3RpbWF0ZVNuYXBzaG90U3BhY2Uo YWN0aXZlX3NuYXBzaG90KTsKKwkJYXNuYXBsZW4gPSBFc3RpbWF0ZVNuYXBzaG90U3BhY2Uo KE1WQ0NTbmFwc2hvdCkgYWN0aXZlX3NuYXBzaG90KTsKIAkJc2htX3RvY19lc3RpbWF0ZV9j aHVuaygmcGN4dC0+ZXN0aW1hdG9yLCBhc25hcGxlbik7CiAJCXRzdGF0ZWxlbiA9IEVzdGlt YXRlVHJhbnNhY3Rpb25TdGF0ZVNwYWNlKCk7CiAJCXNobV90b2NfZXN0aW1hdGVfY2h1bmso JnBjeHQtPmVzdGltYXRvciwgdHN0YXRlbGVuKTsKQEAgLTQwMCwxNCArNDAwLDE0IEBAIElu aXRpYWxpemVQYXJhbGxlbERTTShQYXJhbGxlbENvbnRleHQgKnBjeHQpCiAJCWlmIChJc29s YXRpb25Vc2VzWGFjdFNuYXBzaG90KCkpCiAJCXsKIAkJCXRzbmFwc3BhY2UgPSBzaG1fdG9j X2FsbG9jYXRlKHBjeHQtPnRvYywgdHNuYXBsZW4pOwotCQkJU2VyaWFsaXplU25hcHNob3Qo dHJhbnNhY3Rpb25fc25hcHNob3QsIHRzbmFwc3BhY2UpOworCQkJU2VyaWFsaXplU25hcHNo b3QoKE1WQ0NTbmFwc2hvdCkgdHJhbnNhY3Rpb25fc25hcHNob3QsIHRzbmFwc3BhY2UpOwog CQkJc2htX3RvY19pbnNlcnQocGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfVFJBTlNBQ1RJT05f U05BUFNIT1QsCiAJCQkJCQkgICB0c25hcHNwYWNlKTsKIAkJfQogCiAJCS8qIFNlcmlhbGl6 ZSB0aGUgYWN0aXZlIHNuYXBzaG90LiAqLwogCQlhc25hcHNwYWNlID0gc2htX3RvY19hbGxv Y2F0ZShwY3h0LT50b2MsIGFzbmFwbGVuKTsKLQkJU2VyaWFsaXplU25hcHNob3QoYWN0aXZl X3NuYXBzaG90LCBhc25hcHNwYWNlKTsKKwkJU2VyaWFsaXplU25hcHNob3QoKE1WQ0NTbmFw c2hvdCkgYWN0aXZlX3NuYXBzaG90LCBhc25hcHNwYWNlKTsKIAkJc2htX3RvY19pbnNlcnQo cGN4dC0+dG9jLCBQQVJBTExFTF9LRVlfQUNUSVZFX1NOQVBTSE9ULCBhc25hcHNwYWNlKTsK IAogCQkvKiBQcm92aWRlIHRoZSBoYW5kbGUgZm9yIHBlci1zZXNzaW9uIHNlZ21lbnQuICov CkBAIC0xNDkzLDkgKzE0OTMsOSBAQCBQYXJhbGxlbFdvcmtlck1haW4oRGF0dW0gbWFpbl9h cmcpCiAJICovCiAJYXNuYXBzcGFjZSA9IHNobV90b2NfbG9va3VwKHRvYywgUEFSQUxMRUxf S0VZX0FDVElWRV9TTkFQU0hPVCwgZmFsc2UpOwogCXRzbmFwc3BhY2UgPSBzaG1fdG9jX2xv b2t1cCh0b2MsIFBBUkFMTEVMX0tFWV9UUkFOU0FDVElPTl9TTkFQU0hPVCwgdHJ1ZSk7Ci0J YXNuYXBzaG90ID0gUmVzdG9yZVNuYXBzaG90KGFzbmFwc3BhY2UpOwotCXRzbmFwc2hvdCA9 IHRzbmFwc3BhY2UgPyBSZXN0b3JlU25hcHNob3QodHNuYXBzcGFjZSkgOiBhc25hcHNob3Q7 Ci0JUmVzdG9yZVRyYW5zYWN0aW9uU25hcHNob3QodHNuYXBzaG90LAorCWFzbmFwc2hvdCA9 IChTbmFwc2hvdCkgUmVzdG9yZVNuYXBzaG90KGFzbmFwc3BhY2UpOworCXRzbmFwc2hvdCA9 IHRzbmFwc3BhY2UgPyAoU25hcHNob3QpIFJlc3RvcmVTbmFwc2hvdCh0c25hcHNwYWNlKSA6 IGFzbmFwc2hvdDsKKwlSZXN0b3JlVHJhbnNhY3Rpb25TbmFwc2hvdCgoTVZDQ1NuYXBzaG90 KSB0c25hcHNob3QsCiAJCQkJCQkJICAgZnBzLT5wYXJhbGxlbF9sZWFkZXJfcGdwcm9jKTsK IAlQdXNoQWN0aXZlU25hcHNob3QoYXNuYXBzaG90KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19p bmhlcml0cy5jCmluZGV4IDkyOWJiNTNiNjIwLi5iNjU4NjAxYmY3NyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jCisrKyBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvcGdfaW5oZXJpdHMuYwpAQCAtMTQ4LDcgKzE0OCw3IEBAIGZpbmRfaW5oZXJpdGFu Y2VfY2hpbGRyZW5fZXh0ZW5kZWQoT2lkIHBhcmVudHJlbElkLCBib29sIG9taXRfZGV0YWNo ZWQsCiAJCQkJeG1pbiA9IEhlYXBUdXBsZUhlYWRlckdldFhtaW4oaW5oZXJpdHNUdXBsZS0+ dF9kYXRhKTsKIAkJCQlzbmFwID0gR2V0QWN0aXZlU25hcHNob3QoKTsKIAotCQkJCWlmICgh WGlkSW5NVkNDU25hcHNob3QoeG1pbiwgc25hcCkpCisJCQkJaWYgKCFYaWRJbk1WQ0NTbmFw c2hvdCh4bWluLCAoTVZDQ1NuYXBzaG90KSBzbmFwKSkKIAkJCQl7CiAJCQkJCWlmIChkZXRh Y2hlZF94bWluKQogCQkJCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9h c3luYy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwppbmRleCA0YmQzN2Q1YmVi NS4uMWZmYjZmNWZhNzAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5j LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYwpAQCAtMjAyMiw2ICsyMDIy LDggQEAgYXN5bmNRdWV1ZVByb2Nlc3NQYWdlRW50cmllcyh2b2xhdGlsZSBRdWV1ZVBvc2l0 aW9uICpjdXJyZW50LAogCWJvb2wJCXJlYWNoZWRFbmRPZlBhZ2U7CiAJQXN5bmNRdWV1ZUVu dHJ5ICpxZTsKIAorCUFzc2VydChzbmFwc2hvdC0+c25hcHNob3RfdHlwZSA9PSBTTkFQU0hP VF9NVkNDKTsKKwogCWRvCiAJewogCQlRdWV1ZVBvc2l0aW9uIHRoaXNlbnRyeSA9ICpjdXJy ZW50OwpAQCAtMjA0MSw3ICsyMDQzLDcgQEAgYXN5bmNRdWV1ZVByb2Nlc3NQYWdlRW50cmll cyh2b2xhdGlsZSBRdWV1ZVBvc2l0aW9uICpjdXJyZW50LAogCQkvKiBJZ25vcmUgbWVzc2Fn ZXMgZGVzdGluZWQgZm9yIG90aGVyIGRhdGFiYXNlcyAqLwogCQlpZiAocWUtPmRib2lkID09 IE15RGF0YWJhc2VJZCkKIAkJewotCQkJaWYgKFhpZEluTVZDQ1NuYXBzaG90KHFlLT54aWQs IHNuYXBzaG90KSkKKwkJCWlmIChYaWRJbk1WQ0NTbmFwc2hvdChxZS0+eGlkLCAoTVZDQ1Nu YXBzaG90KSBzbmFwc2hvdCkpCiAJCQl7CiAJCQkJLyoKIAkJCQkgKiBUaGUgc291cmNlIHRy YW5zYWN0aW9uIGlzIHN0aWxsIGluIHByb2dyZXNzLCBzbyB3ZSBjYW4ndApkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9pbmRleGNtZHMuYwppbmRleCAzM2MyMTA2YzE3Yy4uZGEzZTAyMzk4YmIgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCisrKyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCkBAIC0xNzYxLDcgKzE3NjEsNyBAQCBEZWZpbmVJ bmRleChPaWQgdGFibGVJZCwKIAkgKiB0aGV5IG11c3Qgd2FpdCBmb3IuICBCdXQgZmlyc3Qs IHNhdmUgdGhlIHNuYXBzaG90J3MgeG1pbiB0byB1c2UgYXMKIAkgKiBsaW1pdFhtaW4gZm9y IEdldEN1cnJlbnRWaXJ0dWFsWElEcygpLgogCSAqLwotCWxpbWl0WG1pbiA9IHNuYXBzaG90 LT54bWluOworCWxpbWl0WG1pbiA9IHNuYXBzaG90LT5tdmNjLnhtaW47CiAKIAlQb3BBY3Rp dmVTbmFwc2hvdCgpOwogCVVucmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CkBAIC00MTU2 LDcgKzQxNTYsNyBAQCBSZWluZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRl eFN0bXQgKnN0bXQsIE9pZCByZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkgKiBXZSBjYW4g bm93IGRvIGF3YXkgd2l0aCBvdXIgYWN0aXZlIHNuYXBzaG90LCB3ZSBzdGlsbCBuZWVkIHRv IHNhdmUKIAkJICogdGhlIHhtaW4gbGltaXQgdG8gd2FpdCBmb3Igb2xkZXIgc25hcHNob3Rz LgogCQkgKi8KLQkJbGltaXRYbWluID0gc25hcHNob3QtPnhtaW47CisJCWxpbWl0WG1pbiA9 IHNuYXBzaG90LT5tdmNjLnhtaW47CiAKIAkJUG9wQWN0aXZlU25hcHNob3QoKTsKIAkJVW5y ZWdpc3RlclNuYXBzaG90KHNuYXBzaG90KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Nv bW1hbmRzL3RhYmxlY21kcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMK aW5kZXggMTA2MjQzNTNiMGEuLmM1NWI1YTdhMDE0IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJs ZWNtZHMuYwpAQCAtMjA3OTcsNyArMjA3OTcsNyBAQCBBVEV4ZWNEZXRhY2hQYXJ0aXRpb25G aW5hbGl6ZShSZWxhdGlvbiByZWwsIFJhbmdlVmFyICpuYW1lKQogCSAqIGFsbCBzdWNoIHF1 ZXJpZXMgYXJlIGNvbXBsZXRlIChvdGhlcndpc2Ugd2Ugd291bGQgcHJlc2VudCB0aGVtIHdp dGggYW4KIAkgKiBpbmNvbnNpc3RlbnQgdmlldyBvZiBjYXRhbG9ncykuCiAJICovCi0JV2Fp dEZvck9sZGVyU25hcHNob3RzKHNuYXAtPnhtaW4sIGZhbHNlKTsKKwlXYWl0Rm9yT2xkZXJT bmFwc2hvdHMoc25hcC0+bXZjYy54bWluLCBmYWxzZSk7CiAKIAlEZXRhY2hQYXJ0aXRpb25G aW5hbGl6ZShyZWwsIHBhcnRSZWwsIHRydWUsIEludmFsaWRPaWQpOwogCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL2V4ZWNJbmRleGluZy5jCmluZGV4IGUzZmU5Yjc4YmI1Li5hMzk1NTc5MjcyOSAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTcxNyw3ICs3MTcsNyBA QCBjaGVja19leGNsdXNpb25fb3JfdW5pcXVlX2NvbnN0cmFpbnQoUmVsYXRpb24gaGVhcCwg UmVsYXRpb24gaW5kZXgsCiAJaW50CQkJaW5kbmtleWF0dHMgPSBJbmRleFJlbGF0aW9uR2V0 TnVtYmVyT2ZLZXlBdHRyaWJ1dGVzKGluZGV4KTsKIAlJbmRleFNjYW5EZXNjIGluZGV4X3Nj YW47CiAJU2NhbktleURhdGEgc2NhbmtleXNbSU5ERVhfTUFYX0tFWVNdOwotCVNuYXBzaG90 RGF0YSBEaXJ0eVNuYXBzaG90OworCURpcnR5U25hcHNob3REYXRhIERpcnR5U25hcHNob3Q7 CiAJaW50CQkJaTsKIAlib29sCQljb25mbGljdDsKIAlib29sCQlmb3VuZF9zZWxmOwpAQCAt ODE2LDcgKzgxNiw3IEBAIGNoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludChS ZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwKIHJldHJ5OgogCWNvbmZsaWN0ID0gZmFs c2U7CiAJZm91bmRfc2VsZiA9IGZhbHNlOwotCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNj YW4oaGVhcCwgaW5kZXgsICZEaXJ0eVNuYXBzaG90LCBOVUxMLCBpbmRua2V5YXR0cywgMCk7 CisJaW5kZXhfc2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwLCBpbmRleCwgKFNuYXBzaG90 KSAmRGlydHlTbmFwc2hvdCwgTlVMTCwgaW5kbmtleWF0dHMsIDApOwogCWluZGV4X3Jlc2Nh bihpbmRleF9zY2FuLCBzY2Fua2V5cywgaW5kbmtleWF0dHMsIE5VTEwsIDApOwogCiAJd2hp bGUgKGluZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlv biwgZXhpc3Rpbmdfc2xvdCkpCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjUmVwbGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNSZXBsaWNhdGlv bi5jCmluZGV4IGVkZTg5ZWEzY2Y5Li44NGFhN2MzMjY4YyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKQEAgLTE4NCw3ICsxODQsNyBAQCBSZWxhdGlvbkZp bmRSZXBsVHVwbGVCeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAlTY2FuS2V5 RGF0YSBza2V5W0lOREVYX01BWF9LRVlTXTsKIAlpbnQJCQlza2V5X2F0dG9mZjsKIAlJbmRl eFNjYW5EZXNjIHNjYW47Ci0JU25hcHNob3REYXRhIHNuYXA7CisJRGlydHlTbmFwc2hvdERh dGEgc25hcDsKIAlUcmFuc2FjdGlvbklkIHh3YWl0OwogCVJlbGF0aW9uCWlkeHJlbDsKIAli b29sCQlmb3VuZDsKQEAgLTIwMiw3ICsyMDIsNyBAQCBSZWxhdGlvbkZpbmRSZXBsVHVwbGVC eUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAlza2V5X2F0dG9mZiA9IGJ1aWxk X3JlcGxpbmRleF9zY2FuX2tleShza2V5LCByZWwsIGlkeHJlbCwgc2VhcmNoc2xvdCk7CiAK IAkvKiBTdGFydCBhbiBpbmRleCBzY2FuLiAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4o cmVsLCBpZHhyZWwsICZzbmFwLCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CisJc2NhbiA9IGlu ZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgKFNuYXBzaG90KSAmc25hcCwgTlVMTCwgc2tl eV9hdHRvZmYsIDApOwogCiByZXRyeToKIAlmb3VuZCA9IGZhbHNlOwpAQCAtMzU3LDcgKzM1 Nyw3IEBAIFJlbGF0aW9uRmluZFJlcGxUdXBsZVNlcShSZWxhdGlvbiByZWwsIExvY2tUdXBs ZU1vZGUgbG9ja21vZGUsCiB7CiAJVHVwbGVUYWJsZVNsb3QgKnNjYW5zbG90OwogCVRhYmxl U2NhbkRlc2Mgc2NhbjsKLQlTbmFwc2hvdERhdGEgc25hcDsKKwlEaXJ0eVNuYXBzaG90RGF0 YSBzbmFwOwogCVR5cGVDYWNoZUVudHJ5ICoqZXE7CiAJVHJhbnNhY3Rpb25JZCB4d2FpdDsK IAlib29sCQlmb3VuZDsKQEAgLTM2OSw3ICszNjksNyBAQCBSZWxhdGlvbkZpbmRSZXBsVHVw bGVTZXEoUmVsYXRpb24gcmVsLCBMb2NrVHVwbGVNb2RlIGxvY2ttb2RlLAogCiAJLyogU3Rh cnQgYSBoZWFwIHNjYW4uICovCiAJSW5pdERpcnR5U25hcHNob3Qoc25hcCk7Ci0Jc2NhbiA9 IHRhYmxlX2JlZ2luc2NhbihyZWwsICZzbmFwLCAwLCBOVUxMKTsKKwlzY2FuID0gdGFibGVf YmVnaW5zY2FuKHJlbCwgKFNuYXBzaG90KSAmc25hcCwgMCwgTlVMTCk7CiAJc2NhbnNsb3Qg PSB0YWJsZV9zbG90X2NyZWF0ZShyZWwsIE5VTEwpOwogCiByZXRyeToKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5jIGIvc3JjL2JhY2tlbmQvcGFy dGl0aW9uaW5nL3BhcnRkZXNjLmMKaW5kZXggMzI4YjRkNDUwZTQuLjdjMTVjNjM0MTgxIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydGRlc2MuYworKysgYi9z cmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydGRlc2MuYwpAQCAtMTAyLDcgKzEwMiw3IEBA IFJlbGF0aW9uR2V0UGFydGl0aW9uRGVzYyhSZWxhdGlvbiByZWwsIGJvb2wgb21pdF9kZXRh Y2hlZCkKIAkJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHJlbC0+cmRfcGFydGRlc2Nf bm9kZXRhY2hlZF94bWluKSk7CiAJCWFjdGl2ZXNuYXAgPSBHZXRBY3RpdmVTbmFwc2hvdCgp OwogCi0JCWlmICghWGlkSW5NVkNDU25hcHNob3QocmVsLT5yZF9wYXJ0ZGVzY19ub2RldGFj aGVkX3htaW4sIGFjdGl2ZXNuYXApKQorCQlpZiAoIVhpZEluTVZDQ1NuYXBzaG90KHJlbC0+ cmRfcGFydGRlc2Nfbm9kZXRhY2hlZF94bWluLCAmYWN0aXZlc25hcC0+bXZjYykpCiAJCQly ZXR1cm4gcmVsLT5yZF9wYXJ0ZGVzY19ub2RldGFjaGVkOwogCX0KIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYyBiL3NyYy9iYWNrZW5k L3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMKaW5kZXggNzhmOWEwYTExYzQuLjZhNDI4 ZTk3MjBlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2Rl Y29kZS5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMK QEAgLTU4Niw3ICs1ODYsNyBAQCBsb2dpY2FsbXNnX2RlY29kZShMb2dpY2FsRGVjb2RpbmdD b250ZXh0ICpjdHgsIFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKIAlUcmFuc2FjdGlvbklkIHhp ZCA9IFhMb2dSZWNHZXRYaWQocik7CiAJdWludDgJCWluZm8gPSBYTG9nUmVjR2V0SW5mbyhy KSAmIH5YTFJfSU5GT19NQVNLOwogCVJlcE9yaWdpbklkIG9yaWdpbl9pZCA9IFhMb2dSZWNH ZXRPcmlnaW4ocik7Ci0JU25hcHNob3QJc25hcHNob3QgPSBOVUxMOworCUhpc3RvcmljTVZD Q1NuYXBzaG90IHNuYXBzaG90ID0gTlVMTDsKIAl4bF9sb2dpY2FsX21lc3NhZ2UgKm1lc3Nh Z2U7CiAKIAlpZiAoaW5mbyAhPSBYTE9HX0xPR0lDQUxfTUVTU0FHRSkKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMgYi9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jCmluZGV4IDY1ODNkZDQ5N2RhLi41MWZj NjQ2MDI1MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9v cmlnaW4uYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29yaWdpbi5j CkBAIC0yNjAsNyArMjYwLDcgQEAgcmVwbG9yaWdpbl9jcmVhdGUoY29uc3QgY2hhciAqcm9u YW1lKQogCUhlYXBUdXBsZQl0dXBsZSA9IE5VTEw7CiAJUmVsYXRpb24JcmVsOwogCURhdHVt CQlyb25hbWVfZDsKLQlTbmFwc2hvdERhdGEgU25hcHNob3REaXJ0eTsKKwlEaXJ0eVNuYXBz aG90RGF0YSBTbmFwc2hvdERpcnR5OwogCVN5c1NjYW5EZXNjIHNjYW47CiAJU2NhbktleURh dGEga2V5OwogCkBAIC0zMDIsNyArMzAyLDcgQEAgcmVwbG9yaWdpbl9jcmVhdGUoY29uc3Qg Y2hhciAqcm9uYW1lKQogCiAJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4ocmVsLCBSZXBs aWNhdGlvbk9yaWdpbklkZW50SW5kZXgsCiAJCQkJCQkJCSAgdHJ1ZSAvKiBpbmRleE9LICov ICwKLQkJCQkJCQkJICAmU25hcHNob3REaXJ0eSwKKwkJCQkJCQkJICAoU25hcHNob3QpICZT bmFwc2hvdERpcnR5LAogCQkJCQkJCQkgIDEsICZrZXkpOwogCiAJCWNvbGxpZGVzID0gSGVh cFR1cGxlSXNWYWxpZChzeXN0YWJsZV9nZXRuZXh0KHNjYW4pKTsKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKaW5kZXggOTc3ZmJj ZDI0NzQuLmU4MTk2YThkNWQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwpAQCAtMjY4LDkgKzI2OCw5IEBAIHN0YXRpYyB2 b2lkIFJlb3JkZXJCdWZmZXJTZXJpYWxpemVkUGF0aChjaGFyICpwYXRoLCBSZXBsaWNhdGlv blNsb3QgKnNsb3QsCiAJCQkJCQkJCQkJVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dTZWdObyBz ZWdubyk7CiBzdGF0aWMgaW50CVJlb3JkZXJCdWZmZXJUWE5TaXplQ29tcGFyZShjb25zdCBw YWlyaW5naGVhcF9ub2RlICphLCBjb25zdCBwYWlyaW5naGVhcF9ub2RlICpiLCB2b2lkICph cmcpOwogCi1zdGF0aWMgdm9pZCBSZW9yZGVyQnVmZmVyRnJlZVNuYXAoUmVvcmRlckJ1ZmZl ciAqcmIsIFNuYXBzaG90IHNuYXApOwotc3RhdGljIFNuYXBzaG90IFJlb3JkZXJCdWZmZXJD b3B5U25hcChSZW9yZGVyQnVmZmVyICpyYiwgU25hcHNob3Qgb3JpZ19zbmFwLAotCQkJCQkJ CQkJICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sIENvbW1hbmRJZCBjaWQpOworc3RhdGljIHZv aWQgUmVvcmRlckJ1ZmZlckZyZWVTbmFwKFJlb3JkZXJCdWZmZXIgKnJiLCBIaXN0b3JpY01W Q0NTbmFwc2hvdCBzbmFwKTsKK3N0YXRpYyBIaXN0b3JpY01WQ0NTbmFwc2hvdCBSZW9yZGVy QnVmZmVyQ29weVNuYXAoUmVvcmRlckJ1ZmZlciAqcmIsIEhpc3RvcmljTVZDQ1NuYXBzaG90 IG9yaWdfc25hcCwKKwkJCQkJCQkJCQkJCSAgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLCBDb21t YW5kSWQgY2lkKTsKIAogLyoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpAQCAtODUyLDcgKzg1Miw3IEBAIFJlb3JkZXJCdWZmZXJRdWV1ZUNoYW5nZShS ZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuLAog ICovCiB2b2lkCiBSZW9yZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJi LCBUcmFuc2FjdGlvbklkIHhpZCwKLQkJCQkJCSAgU25hcHNob3Qgc25hcCwgWExvZ1JlY1B0 ciBsc24sCisJCQkJCQkgIEhpc3RvcmljTVZDQ1NuYXBzaG90IHNuYXAsIFhMb2dSZWNQdHIg bHNuLAogCQkJCQkJICBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnByZWZpeCwK IAkJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CkBA IC04ODYsNyArODg2LDcgQEAgUmVvcmRlckJ1ZmZlclF1ZXVlTWVzc2FnZShSZW9yZGVyQnVm ZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJZWxzZQogCXsKIAkJUmVvcmRlckJ1ZmZl clRYTiAqdHhuID0gTlVMTDsKLQkJdm9sYXRpbGUgU25hcHNob3Qgc25hcHNob3Rfbm93ID0g c25hcDsKKwkJdm9sYXRpbGUJSGlzdG9yaWNNVkNDU25hcHNob3Qgc25hcHNob3Rfbm93ID0g c25hcDsKIAogCQkvKiBOb24tdHJhbnNhY3Rpb25hbCBjaGFuZ2VzIHJlcXVpcmUgYSB2YWxp ZCBzbmFwc2hvdC4gKi8KIAkJQXNzZXJ0KHNuYXBzaG90X25vdyk7CkBAIC0xODg2LDU1ICsx ODg2LDU1IEBAIFJlb3JkZXJCdWZmZXJCdWlsZFR1cGxlQ2lkSGFzaChSZW9yZGVyQnVmZmVy ICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuKQogICogdGhhdCBjYXRhbG9nIG1vZGlmeWlu ZyB0cmFuc2FjdGlvbnMgY2FuIGxvb2sgaW50byBpbnRlcm1lZGlhdGUgY2F0YWxvZwogICog c3RhdGVzLgogICovCi1zdGF0aWMgU25hcHNob3QKLVJlb3JkZXJCdWZmZXJDb3B5U25hcChS ZW9yZGVyQnVmZmVyICpyYiwgU25hcHNob3Qgb3JpZ19zbmFwLAorc3RhdGljIEhpc3Rvcmlj TVZDQ1NuYXBzaG90CitSZW9yZGVyQnVmZmVyQ29weVNuYXAoUmVvcmRlckJ1ZmZlciAqcmIs IEhpc3RvcmljTVZDQ1NuYXBzaG90IG9yaWdfc25hcCwKIAkJCQkJICBSZW9yZGVyQnVmZmVy VFhOICp0eG4sIENvbW1hbmRJZCBjaWQpCiB7Ci0JU25hcHNob3QJc25hcDsKKwlIaXN0b3Jp Y01WQ0NTbmFwc2hvdCBzbmFwOwogCWRsaXN0X2l0ZXIJaXRlcjsKIAlpbnQJCQlpID0gMDsK IAlTaXplCQlzaXplOwogCi0Jc2l6ZSA9IHNpemVvZihTbmFwc2hvdERhdGEpICsKKwlzaXpl ID0gc2l6ZW9mKEhpc3RvcmljTVZDQ1NuYXBzaG90RGF0YSkgKwogCQlzaXplb2YoVHJhbnNh Y3Rpb25JZCkgKiBvcmlnX3NuYXAtPnhjbnQgKwogCQlzaXplb2YoVHJhbnNhY3Rpb25JZCkg KiAodHhuLT5uc3VidHhucyArIDEpOwogCiAJc25hcCA9IE1lbW9yeUNvbnRleHRBbGxvY1pl cm8ocmItPmNvbnRleHQsIHNpemUpOwotCW1lbWNweShzbmFwLCBvcmlnX3NuYXAsIHNpemVv ZihTbmFwc2hvdERhdGEpKTsKKwltZW1jcHkoc25hcCwgb3JpZ19zbmFwLCBzaXplb2YoSGlz dG9yaWNNVkNDU25hcHNob3REYXRhKSk7CiAKIAlzbmFwLT5jb3BpZWQgPSB0cnVlOwotCXNu YXAtPmFjdGl2ZV9jb3VudCA9IDE7CQkvKiBtYXJrIGFzIGFjdGl2ZSBzbyBub2JvZHkgZnJl ZXMgaXQgKi8KKwlzbmFwLT5yZWZjb3VudCA9IDE7CQkJLyogbWFyayBhcyBhY3RpdmUgc28g bm9ib2R5IGZyZWVzIGl0ICovCiAJc25hcC0+cmVnZF9jb3VudCA9IDA7Ci0Jc25hcC0+eGlw ID0gKFRyYW5zYWN0aW9uSWQgKikgKHNuYXAgKyAxKTsKKwlzbmFwLT5jb21taXR0ZWRfeGlk cyA9IChUcmFuc2FjdGlvbklkICopIChzbmFwICsgMSk7CiAKLQltZW1jcHkoc25hcC0+eGlw LCBvcmlnX3NuYXAtPnhpcCwgc2l6ZW9mKFRyYW5zYWN0aW9uSWQpICogc25hcC0+eGNudCk7 CisJbWVtY3B5KHNuYXAtPmNvbW1pdHRlZF94aWRzLCBvcmlnX3NuYXAtPmNvbW1pdHRlZF94 aWRzLCBzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBzbmFwLT54Y250KTsKIAogCS8qCi0JICog c25hcC0+c3VieGlwIGNvbnRhaW5zIGFsbCB0eGlkcyB0aGF0IGJlbG9uZyB0byBvdXIgdHJh bnNhY3Rpb24gd2hpY2ggd2UKKwkgKiBzbmFwLT5jdXJ4aXAgY29udGFpbnMgYWxsIHR4aWRz IHRoYXQgYmVsb25nIHRvIG91ciB0cmFuc2FjdGlvbiB3aGljaCB3ZQogCSAqIG5lZWQgdG8g Y2hlY2sgdmlhIGNtaW4vY21heC4gVGhhdCdzIHdoeSB3ZSBzdG9yZSB0aGUgdG9wbGV2ZWwK IAkgKiB0cmFuc2FjdGlvbiBpbiB0aGVyZSBhcyB3ZWxsLgogCSAqLwotCXNuYXAtPnN1Ynhp cCA9IHNuYXAtPnhpcCArIHNuYXAtPnhjbnQ7Ci0Jc25hcC0+c3VieGlwW2krK10gPSB0eG4t PnhpZDsKKwlzbmFwLT5jdXJ4aXAgPSBzbmFwLT5jb21taXR0ZWRfeGlkcyArIHNuYXAtPnhj bnQ7CisJc25hcC0+Y3VyeGlwW2krK10gPSB0eG4tPnhpZDsKIAogCS8qCiAJICogdHhuLT5u c3VidHhucyBpc24ndCBkZWNyZWFzZWQgd2hlbiBzdWJ0cmFuc2FjdGlvbnMgYWJvcnQsIHNv IGNvdW50CiAJICogbWFudWFsbHkuIFNpbmNlIGl0J3MgYW4gdXBwZXIgYm91bmRhcnkgaXQg aXMgc2FmZSB0byB1c2UgaXQgZm9yIHRoZQogCSAqIGFsbG9jYXRpb24gYWJvdmUuCiAJICov Ci0Jc25hcC0+c3VieGNudCA9IDE7CisJc25hcC0+Y3VyeGNudCA9IDE7CiAKIAlkbGlzdF9m b3JlYWNoKGl0ZXIsICZ0eG4tPnN1YnR4bnMpCiAJewogCQlSZW9yZGVyQnVmZmVyVFhOICpz dWJfdHhuOwogCiAJCXN1Yl90eG4gPSBkbGlzdF9jb250YWluZXIoUmVvcmRlckJ1ZmZlclRY Tiwgbm9kZSwgaXRlci5jdXIpOwotCQlzbmFwLT5zdWJ4aXBbaSsrXSA9IHN1Yl90eG4tPnhp ZDsKLQkJc25hcC0+c3VieGNudCsrOworCQlzbmFwLT5jdXJ4aXBbaSsrXSA9IHN1Yl90eG4t PnhpZDsKKwkJc25hcC0+Y3VyeGNudCsrOwogCX0KIAogCS8qIHNvcnQgc28gd2UgY2FuIGJz ZWFyY2goKSBsYXRlciAqLwotCXFzb3J0KHNuYXAtPnN1YnhpcCwgc25hcC0+c3VieGNudCwg c2l6ZW9mKFRyYW5zYWN0aW9uSWQpLCB4aWRDb21wYXJhdG9yKTsKKwlxc29ydChzbmFwLT5j dXJ4aXAsIHNuYXAtPmN1cnhjbnQsIHNpemVvZihUcmFuc2FjdGlvbklkKSwgeGlkQ29tcGFy YXRvcik7CiAKIAkvKiBzdG9yZSB0aGUgc3BlY2lmaWVkIGN1cnJlbnQgQ29tbWFuZElkICov CiAJc25hcC0+Y3VyY2lkID0gY2lkOwpAQCAtMTk0Niw3ICsxOTQ2LDcgQEAgUmVvcmRlckJ1 ZmZlckNvcHlTbmFwKFJlb3JkZXJCdWZmZXIgKnJiLCBTbmFwc2hvdCBvcmlnX3NuYXAsCiAg KiBGcmVlIGEgcHJldmlvdXNseSBSZW9yZGVyQnVmZmVyQ29weVNuYXAnZWQgc25hcHNob3QK ICAqLwogc3RhdGljIHZvaWQKLVJlb3JkZXJCdWZmZXJGcmVlU25hcChSZW9yZGVyQnVmZmVy ICpyYiwgU25hcHNob3Qgc25hcCkKK1Jlb3JkZXJCdWZmZXJGcmVlU25hcChSZW9yZGVyQnVm ZmVyICpyYiwgSGlzdG9yaWNNVkNDU25hcHNob3Qgc25hcCkKIHsKIAlpZiAoc25hcC0+Y29w aWVkKQogCQlwZnJlZShzbmFwKTsKQEAgLTIwOTksNyArMjA5OSw3IEBAIFJlb3JkZXJCdWZm ZXJBcHBseU1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKICAqLwogc3RhdGljIGlubGluZSB2b2lkCiBSZW9yZGVyQnVmZmVyU2F2ZVRYTlNuYXBz aG90KFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCi0JCQkJCQkJ IFNuYXBzaG90IHNuYXBzaG90X25vdywgQ29tbWFuZElkIGNvbW1hbmRfaWQpCisJCQkJCQkJ IEhpc3RvcmljTVZDQ1NuYXBzaG90IHNuYXBzaG90X25vdywgQ29tbWFuZElkIGNvbW1hbmRf aWQpCiB7CiAJdHhuLT5jb21tYW5kX2lkID0gY29tbWFuZF9pZDsKIApAQCAtMjE0NCw3ICsy MTQ0LDcgQEAgUmVvcmRlckJ1ZmZlck1heWJlTWFya1RYTlN0cmVhbWVkKFJlb3JkZXJCdWZm ZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4pCiAgKi8KIHN0YXRpYyB2b2lkCiBSZW9y ZGVyQnVmZmVyUmVzZXRUWE4oUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKLQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdF9ub3csCisJCQkJCSAgSGlzdG9yaWNN VkNDU25hcHNob3Qgc25hcHNob3Rfbm93LAogCQkJCQkgIENvbW1hbmRJZCBjb21tYW5kX2lk LAogCQkJCQkgIFhMb2dSZWNQdHIgbGFzdF9sc24sCiAJCQkJCSAgUmVvcmRlckJ1ZmZlckNo YW5nZSAqc3BlY2luc2VydCkKQEAgLTIxOTEsNyArMjE5MSw3IEBAIFJlb3JkZXJCdWZmZXJS ZXNldFRYTihSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogc3Rh dGljIHZvaWQKIFJlb3JkZXJCdWZmZXJQcm9jZXNzVFhOKFJlb3JkZXJCdWZmZXIgKnJiLCBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJCQlYTG9nUmVjUHRyIGNvbW1pdF9sc24sCi0J CQkJCQl2b2xhdGlsZSBTbmFwc2hvdCBzbmFwc2hvdF9ub3csCisJCQkJCQl2b2xhdGlsZSBI aXN0b3JpY01WQ0NTbmFwc2hvdCBzbmFwc2hvdF9ub3csCiAJCQkJCQl2b2xhdGlsZSBDb21t YW5kSWQgY29tbWFuZF9pZCwKIAkJCQkJCWJvb2wgc3RyZWFtaW5nKQogewpAQCAtMjc3OSw3 ICsyNzc5LDcgQEAgUmVvcmRlckJ1ZmZlclJlcGxheShSZW9yZGVyQnVmZmVyVFhOICp0eG4s CiAJCQkJCVRpbWVzdGFtcFR6IGNvbW1pdF90aW1lLAogCQkJCQlSZXBPcmlnaW5JZCBvcmln aW5faWQsIFhMb2dSZWNQdHIgb3JpZ2luX2xzbikKIHsKLQlTbmFwc2hvdAlzbmFwc2hvdF9u b3c7CisJSGlzdG9yaWNNVkNDU25hcHNob3Qgc25hcHNob3Rfbm93OwogCUNvbW1hbmRJZAlj b21tYW5kX2lkID0gRmlyc3RDb21tYW5kSWQ7CiAKIAl0eG4tPmZpbmFsX2xzbiA9IGNvbW1p dF9sc247CkBAIC0zMjUxLDcgKzMyNTEsNyBAQCBSZW9yZGVyQnVmZmVyUHJvY2Vzc1hpZChS ZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsIFhMb2dSZWNQdHIgbHNuKQog ICovCiB2b2lkCiBSZW9yZGVyQnVmZmVyQWRkU25hcHNob3QoUmVvcmRlckJ1ZmZlciAqcmIs IFRyYW5zYWN0aW9uSWQgeGlkLAotCQkJCQkJIFhMb2dSZWNQdHIgbHNuLCBTbmFwc2hvdCBz bmFwKQorCQkJCQkJIFhMb2dSZWNQdHIgbHNuLCBIaXN0b3JpY01WQ0NTbmFwc2hvdCBzbmFw KQogewogCVJlb3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSA9IFJlb3JkZXJCdWZmZXJBbGxv Y0NoYW5nZShyYik7CiAKQEAgLTMyNjksNyArMzI2OSw3IEBAIFJlb3JkZXJCdWZmZXJBZGRT bmFwc2hvdChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCiAgKi8KIHZv aWQKIFJlb3JkZXJCdWZmZXJTZXRCYXNlU25hcHNob3QoUmVvcmRlckJ1ZmZlciAqcmIsIFRy YW5zYWN0aW9uSWQgeGlkLAotCQkJCQkJCSBYTG9nUmVjUHRyIGxzbiwgU25hcHNob3Qgc25h cCkKKwkJCQkJCQkgWExvZ1JlY1B0ciBsc24sIEhpc3RvcmljTVZDQ1NuYXBzaG90IHNuYXAp CiB7CiAJUmVvcmRlckJ1ZmZlclRYTiAqdHhuOwogCWJvb2wJCWlzX25ldzsKQEAgLTQwNDMs MTQgKzQwNDMsMTQgQEAgUmVvcmRlckJ1ZmZlclNlcmlhbGl6ZUNoYW5nZShSZW9yZGVyQnVm ZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJfQogCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9TTkFQU0hPVDoKIAkJCXsKLQkJCQlTbmFwc2hvdAlz bmFwOworCQkJCUhpc3RvcmljTVZDQ1NuYXBzaG90IHNuYXA7CiAJCQkJY2hhcgkgICAqZGF0 YTsKIAogCQkJCXNuYXAgPSBjaGFuZ2UtPmRhdGEuc25hcHNob3Q7CiAKLQkJCQlzeiArPSBz aXplb2YoU25hcHNob3REYXRhKSArCisJCQkJc3ogKz0gc2l6ZW9mKEhpc3RvcmljTVZDQ1Nu YXBzaG90RGF0YSkgKwogCQkJCQlzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBzbmFwLT54Y250 ICsKLQkJCQkJc2l6ZW9mKFRyYW5zYWN0aW9uSWQpICogc25hcC0+c3VieGNudDsKKwkJCQkJ c2l6ZW9mKFRyYW5zYWN0aW9uSWQpICogc25hcC0+Y3VyeGNudDsKIAogCQkJCS8qIG1ha2Ug c3VyZSB3ZSBoYXZlIGVub3VnaCBzcGFjZSAqLwogCQkJCVJlb3JkZXJCdWZmZXJTZXJpYWxp emVSZXNlcnZlKHJiLCBzeik7CkBAIC00MDU4LDIxICs0MDU4LDIxIEBAIFJlb3JkZXJCdWZm ZXJTZXJpYWxpemVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKIAkJCQkvKiBtaWdodCBoYXZlIGJlZW4gcmVhbGxvY2F0ZWQgYWJvdmUgKi8KIAkJ CQlvbmRpc2sgPSAoUmVvcmRlckJ1ZmZlckRpc2tDaGFuZ2UgKikgcmItPm91dGJ1ZjsKIAot CQkJCW1lbWNweShkYXRhLCBzbmFwLCBzaXplb2YoU25hcHNob3REYXRhKSk7Ci0JCQkJZGF0 YSArPSBzaXplb2YoU25hcHNob3REYXRhKTsKKwkJCQltZW1jcHkoZGF0YSwgc25hcCwgc2l6 ZW9mKEhpc3RvcmljTVZDQ1NuYXBzaG90RGF0YSkpOworCQkJCWRhdGEgKz0gc2l6ZW9mKEhp c3RvcmljTVZDQ1NuYXBzaG90RGF0YSk7CiAKIAkJCQlpZiAoc25hcC0+eGNudCkKIAkJCQl7 Ci0JCQkJCW1lbWNweShkYXRhLCBzbmFwLT54aXAsCisJCQkJCW1lbWNweShkYXRhLCBzbmFw LT5jb21taXR0ZWRfeGlkcywKIAkJCQkJCSAgIHNpemVvZihUcmFuc2FjdGlvbklkKSAqIHNu YXAtPnhjbnQpOwogCQkJCQlkYXRhICs9IHNpemVvZihUcmFuc2FjdGlvbklkKSAqIHNuYXAt PnhjbnQ7CiAJCQkJfQogCi0JCQkJaWYgKHNuYXAtPnN1YnhjbnQpCisJCQkJaWYgKHNuYXAt PmN1cnhjbnQpCiAJCQkJewotCQkJCQltZW1jcHkoZGF0YSwgc25hcC0+c3VieGlwLAotCQkJ CQkJICAgc2l6ZW9mKFRyYW5zYWN0aW9uSWQpICogc25hcC0+c3VieGNudCk7Ci0JCQkJCWRh dGEgKz0gc2l6ZW9mKFRyYW5zYWN0aW9uSWQpICogc25hcC0+c3VieGNudDsKKwkJCQkJbWVt Y3B5KGRhdGEsIHNuYXAtPmN1cnhpcCwKKwkJCQkJCSAgIHNpemVvZihUcmFuc2FjdGlvbklk KSAqIHNuYXAtPmN1cnhjbnQpOworCQkJCQlkYXRhICs9IHNpemVvZihUcmFuc2FjdGlvbklk KSAqIHNuYXAtPmN1cnhjbnQ7CiAJCQkJfQogCQkJCWJyZWFrOwogCQkJfQpAQCAtNDE3Nyw3 ICs0MTc3LDcgQEAgUmVvcmRlckJ1ZmZlckNhblN0YXJ0U3RyZWFtaW5nKFJlb3JkZXJCdWZm ZXIgKnJiKQogc3RhdGljIHZvaWQKIFJlb3JkZXJCdWZmZXJTdHJlYW1UWE4oUmVvcmRlckJ1 ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bikKIHsKLQlTbmFwc2hvdAlzbmFwc2hv dF9ub3c7CisJSGlzdG9yaWNNVkNDU25hcHNob3Qgc25hcHNob3Rfbm93OwogCUNvbW1hbmRJ ZAljb21tYW5kX2lkOwogCVNpemUJCXN0cmVhbV9ieXRlczsKIAlib29sCQl0eG5faXNfc3Ry ZWFtZWQ7CkBAIC00MTk2LDEwICs0MTk2LDEwIEBAIFJlb3JkZXJCdWZmZXJTdHJlYW1UWE4o UmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4bikKIAkgKiBBZnRlciB0 aGF0IHdlIG5lZWQgdG8gcmV1c2UgdGhlIHNuYXBzaG90IGZyb20gdGhlIHByZXZpb3VzIHJ1 bi4KIAkgKgogCSAqIFVubGlrZSBEZWNvZGVDb21taXQgd2hpY2ggYWRkcyB4aWRzIG9mIGFs bCB0aGUgc3VidHJhbnNhY3Rpb25zIGluCi0JICogc25hcHNob3QncyB4aXAgYXJyYXkgdmlh IFNuYXBCdWlsZENvbW1pdFR4biwgd2UgY2FuJ3QgZG8gdGhhdCBoZXJlIGJ1dAotCSAqIHdl IGRvIGFkZCB0aGVtIHRvIHN1YnhpcCBhcnJheSBpbnN0ZWFkIHZpYSBSZW9yZGVyQnVmZmVy Q29weVNuYXAuIFRoaXMKLQkgKiBhbGxvd3MgdGhlIGNhdGFsb2cgY2hhbmdlcyBtYWRlIGlu IHN1YnRyYW5zYWN0aW9ucyBkZWNvZGVkIHRpbGwgbm93IHRvCi0JICogYmUgdmlzaWJsZS4K KwkgKiBzbmFwc2hvdCdzIGNvbW1pdHRlZF94aWRzIGFycmF5IHZpYSBTbmFwQnVpbGRDb21t aXRUeG4sIHdlIGNhbid0IGRvCisJICogdGhhdCBoZXJlIGJ1dCB3ZSBkbyBhZGQgdGhlbSB0 byBjdXJ4aXAgYXJyYXkgaW5zdGVhZCB2aWEKKwkgKiBSZW9yZGVyQnVmZmVyQ29weVNuYXAu IFRoaXMgYWxsb3dzIHRoZSBjYXRhbG9nIGNoYW5nZXMgbWFkZSBpbgorCSAqIHN1YnRyYW5z YWN0aW9ucyBkZWNvZGVkIHRpbGwgbm93IHRvIGJlIHZpc2libGUuCiAJICovCiAJaWYgKHR4 bi0+c25hcHNob3Rfbm93ID09IE5VTEwpCiAJewpAQCAtNDM0NSwxMyArNDM0NSwxMyBAQCBS ZW9yZGVyQnVmZmVyQ2hhbmdlU2l6ZShSZW9yZGVyQnVmZmVyQ2hhbmdlICpjaGFuZ2UpCiAJ CQl9CiAJCWNhc2UgUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVEVSTkFMX1NOQVBTSE9UOgog CQkJewotCQkJCVNuYXBzaG90CXNuYXA7CisJCQkJSGlzdG9yaWNNVkNDU25hcHNob3Qgc25h cDsKIAogCQkJCXNuYXAgPSBjaGFuZ2UtPmRhdGEuc25hcHNob3Q7CiAKLQkJCQlzeiArPSBz aXplb2YoU25hcHNob3REYXRhKSArCisJCQkJc3ogKz0gc2l6ZW9mKEhpc3RvcmljTVZDQ1Nu YXBzaG90RGF0YSkgKwogCQkJCQlzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBzbmFwLT54Y250 ICsKLQkJCQkJc2l6ZW9mKFRyYW5zYWN0aW9uSWQpICogc25hcC0+c3VieGNudDsKKwkJCQkJ c2l6ZW9mKFRyYW5zYWN0aW9uSWQpICogc25hcC0+Y3VyeGNudDsKIAogCQkJCWJyZWFrOwog CQkJfQpAQCAtNDYyOSwyNCArNDYyOSwyNCBAQCBSZW9yZGVyQnVmZmVyUmVzdG9yZUNoYW5n ZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJfQogCQlj YXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlRFUk5BTF9TTkFQU0hPVDoKIAkJCXsKLQkJ CQlTbmFwc2hvdAlvbGRzbmFwOwotCQkJCVNuYXBzaG90CW5ld3NuYXA7CisJCQkJSGlzdG9y aWNNVkNDU25hcHNob3Qgb2xkc25hcDsKKwkJCQlIaXN0b3JpY01WQ0NTbmFwc2hvdCBuZXdz bmFwOwogCQkJCVNpemUJCXNpemU7CiAKLQkJCQlvbGRzbmFwID0gKFNuYXBzaG90KSBkYXRh OworCQkJCW9sZHNuYXAgPSAoSGlzdG9yaWNNVkNDU25hcHNob3QpIGRhdGE7CiAKLQkJCQlz aXplID0gc2l6ZW9mKFNuYXBzaG90RGF0YSkgKworCQkJCXNpemUgPSBzaXplb2YoSGlzdG9y aWNNVkNDU25hcHNob3REYXRhKSArCiAJCQkJCXNpemVvZihUcmFuc2FjdGlvbklkKSAqIG9s ZHNuYXAtPnhjbnQgKwotCQkJCQlzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiAob2xkc25hcC0+ c3VieGNudCArIDApOworCQkJCQlzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiAob2xkc25hcC0+ Y3VyeGNudCArIDApOwogCiAJCQkJY2hhbmdlLT5kYXRhLnNuYXBzaG90ID0gTWVtb3J5Q29u dGV4dEFsbG9jWmVybyhyYi0+Y29udGV4dCwgc2l6ZSk7CiAKIAkJCQluZXdzbmFwID0gY2hh bmdlLT5kYXRhLnNuYXBzaG90OwogCiAJCQkJbWVtY3B5KG5ld3NuYXAsIGRhdGEsIHNpemUp OwotCQkJCW5ld3NuYXAtPnhpcCA9IChUcmFuc2FjdGlvbklkICopCi0JCQkJCSgoKGNoYXIg KikgbmV3c25hcCkgKyBzaXplb2YoU25hcHNob3REYXRhKSk7Ci0JCQkJbmV3c25hcC0+c3Vi eGlwID0gbmV3c25hcC0+eGlwICsgbmV3c25hcC0+eGNudDsKKwkJCQluZXdzbmFwLT5jb21t aXR0ZWRfeGlkcyA9IChUcmFuc2FjdGlvbklkICopCisJCQkJCSgoKGNoYXIgKikgbmV3c25h cCkgKyBzaXplb2YoSGlzdG9yaWNNVkNDU25hcHNob3REYXRhKSk7CisJCQkJbmV3c25hcC0+ Y3VyeGlwID0gbmV3c25hcC0+Y29tbWl0dGVkX3hpZHMgKyBuZXdzbmFwLT54Y250OwogCQkJ CW5ld3NuYXAtPmNvcGllZCA9IHRydWU7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC01MzE2LDcg KzUzMTYsNyBAQCBmaWxlX3NvcnRfYnlfbHNuKGNvbnN0IExpc3RDZWxsICphX3AsIGNvbnN0 IExpc3RDZWxsICpiX3ApCiAgKiB0cmFuc2FjdGlvbiBmb3IgcmVsaWQuCiAgKi8KIHN0YXRp YyB2b2lkCi1VcGRhdGVMb2dpY2FsTWFwcGluZ3MoSFRBQiAqdHVwbGVjaWRfZGF0YSwgT2lk IHJlbGlkLCBTbmFwc2hvdCBzbmFwc2hvdCkKK1VwZGF0ZUxvZ2ljYWxNYXBwaW5ncyhIVEFC ICp0dXBsZWNpZF9kYXRhLCBPaWQgcmVsaWQsIEhpc3RvcmljTVZDQ1NuYXBzaG90IHNuYXBz aG90KQogewogCURJUgkJICAgKm1hcHBpbmdfZGlyOwogCXN0cnVjdCBkaXJlbnQgKm1hcHBp bmdfZGU7CkBAIC01MzY0LDcgKzUzNjQsNyBAQCBVcGRhdGVMb2dpY2FsTWFwcGluZ3MoSFRB QiAqdHVwbGVjaWRfZGF0YSwgT2lkIHJlbGlkLCBTbmFwc2hvdCBzbmFwc2hvdCkKIAkJCWNv bnRpbnVlOwogCiAJCS8qIG5vdCBmb3Igb3VyIHRyYW5zYWN0aW9uICovCi0JCWlmICghVHJh bnNhY3Rpb25JZEluQXJyYXkoZl9tYXBwZWRfeGlkLCBzbmFwc2hvdC0+c3VieGlwLCBzbmFw c2hvdC0+c3VieGNudCkpCisJCWlmICghVHJhbnNhY3Rpb25JZEluQXJyYXkoZl9tYXBwZWRf eGlkLCBzbmFwc2hvdC0+Y3VyeGlwLCBzbmFwc2hvdC0+Y3VyeGNudCkpCiAJCQljb250aW51 ZTsKIAogCQkvKiBvaywgcmVsZXZhbnQsIHF1ZXVlIGZvciBhcHBseSAqLwpAQCAtNTM4Myw3 ICs1MzgzLDcgQEAgVXBkYXRlTG9naWNhbE1hcHBpbmdzKEhUQUIgKnR1cGxlY2lkX2RhdGEs IE9pZCByZWxpZCwgU25hcHNob3Qgc25hcHNob3QpCiAJCVJld3JpdGVNYXBwaW5nRmlsZSAq ZiA9IChSZXdyaXRlTWFwcGluZ0ZpbGUgKikgbGZpcnN0KGZpbGUpOwogCiAJCWVsb2coREVC VUcxLCAiYXBwbHlpbmcgbWFwcGluZzogXCIlc1wiIGluICV1IiwgZi0+Zm5hbWUsCi0JCQkg c25hcHNob3QtPnN1YnhpcFswXSk7CisJCQkgc25hcHNob3QtPmN1cnhpcFswXSk7CiAJCUFw cGx5TG9naWNhbE1hcHBpbmdGaWxlKHR1cGxlY2lkX2RhdGEsIHJlbGlkLCBmLT5mbmFtZSk7 CiAJCXBmcmVlKGYpOwogCX0KQEAgLTUzOTUsNyArNTM5NSw3IEBAIFVwZGF0ZUxvZ2ljYWxN YXBwaW5ncyhIVEFCICp0dXBsZWNpZF9kYXRhLCBPaWQgcmVsaWQsIFNuYXBzaG90IHNuYXBz aG90KQogICovCiBib29sCiBSZXNvbHZlQ21pbkNtYXhEdXJpbmdEZWNvZGluZyhIVEFCICp0 dXBsZWNpZF9kYXRhLAotCQkJCQkJCSAgU25hcHNob3Qgc25hcHNob3QsCisJCQkJCQkJICBI aXN0b3JpY01WQ0NTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCQkgIEhlYXBUdXBsZSBodHVw LCBCdWZmZXIgYnVmZmVyLAogCQkJCQkJCSAgQ29tbWFuZElkICpjbWluLCBDb21tYW5kSWQg KmNtYXgpCiB7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2Fs L3NuYXBidWlsZC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVp bGQuYwppbmRleCBiNjRlNTNkZTAxNy4uN2EzNDE0MThhNzQgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYwpAQCAtMTU1LDExICsxNTUsMTEg QEAgc3RhdGljIGJvb2wgRXhwb3J0SW5Qcm9ncmVzcyA9IGZhbHNlOwogc3RhdGljIHZvaWQg U25hcEJ1aWxkUHVyZ2VPbGRlclR4bihTbmFwQnVpbGQgKmJ1aWxkZXIpOwogCiAvKiBzbmFw c2hvdCBidWlsZGluZy9tYW5pcHVsYXRpb24vZGlzdHJpYnV0aW9uIGZ1bmN0aW9ucyAqLwot c3RhdGljIFNuYXBzaG90IFNuYXBCdWlsZEJ1aWxkU25hcHNob3QoU25hcEJ1aWxkICpidWls ZGVyKTsKK3N0YXRpYyBIaXN0b3JpY01WQ0NTbmFwc2hvdCBTbmFwQnVpbGRCdWlsZFNuYXBz aG90KFNuYXBCdWlsZCAqYnVpbGRlcik7CiAKLXN0YXRpYyB2b2lkIFNuYXBCdWlsZEZyZWVT bmFwc2hvdChTbmFwc2hvdCBzbmFwKTsKK3N0YXRpYyB2b2lkIFNuYXBCdWlsZEZyZWVTbmFw c2hvdChIaXN0b3JpY01WQ0NTbmFwc2hvdCBzbmFwKTsKIAotc3RhdGljIHZvaWQgU25hcEJ1 aWxkU25hcEluY1JlZmNvdW50KFNuYXBzaG90IHNuYXApOworc3RhdGljIHZvaWQgU25hcEJ1 aWxkU25hcEluY1JlZmNvdW50KEhpc3RvcmljTVZDQ1NuYXBzaG90IHNuYXApOwogCiBzdGF0 aWMgdm9pZCBTbmFwQnVpbGREaXN0cmlidXRlTmV3Q2F0YWxvZ1NuYXBzaG90KFNuYXBCdWls ZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBsc24pOwogCkBAIC0yNDksMjMgKzI0OSwyMSBAQCBG cmVlU25hcHNob3RCdWlsZGVyKFNuYXBCdWlsZCAqYnVpbGRlcikKICAqIEZyZWUgYW4gdW5y ZWZlcmVuY2VkIHNuYXBzaG90IHRoYXQgaGFzIHByZXZpb3VzbHkgYmVlbiBidWlsdCBieSB1 cy4KICAqLwogc3RhdGljIHZvaWQKLVNuYXBCdWlsZEZyZWVTbmFwc2hvdChTbmFwc2hvdCBz bmFwKQorU25hcEJ1aWxkRnJlZVNuYXBzaG90KEhpc3RvcmljTVZDQ1NuYXBzaG90IHNuYXAp CiB7CiAJLyogbWFrZSBzdXJlIHdlIGRvbid0IGdldCBwYXNzZWQgYW4gZXh0ZXJuYWwgc25h cHNob3QgKi8KIAlBc3NlcnQoc25hcC0+c25hcHNob3RfdHlwZSA9PSBTTkFQU0hPVF9ISVNU T1JJQ19NVkNDKTsKIAogCS8qIG1ha2Ugc3VyZSBub2JvZHkgbW9kaWZpZWQgb3VyIHNuYXBz aG90ICovCiAJQXNzZXJ0KHNuYXAtPmN1cmNpZCA9PSBGaXJzdENvbW1hbmRJZCk7Ci0JQXNz ZXJ0KCFzbmFwLT5zdWJvdmVyZmxvd2VkKTsKLQlBc3NlcnQoIXNuYXAtPnRha2VuRHVyaW5n UmVjb3ZlcnkpOwogCUFzc2VydChzbmFwLT5yZWdkX2NvdW50ID09IDApOwogCiAJLyogc2xp Z2h0bHkgbW9yZSBsaWtlbHksIHNvIGl0J3MgY2hlY2tlZCBldmVuIHdpdGhvdXQgYy1hc3Nl cnRzICovCiAJaWYgKHNuYXAtPmNvcGllZCkKIAkJZWxvZyhFUlJPUiwgImNhbm5vdCBmcmVl IGEgY29waWVkIHNuYXBzaG90Iik7CiAKLQlpZiAoc25hcC0+YWN0aXZlX2NvdW50KQotCQll bG9nKEVSUk9SLCAiY2Fubm90IGZyZWUgYW4gYWN0aXZlIHNuYXBzaG90Iik7CisJaWYgKHNu YXAtPnJlZmNvdW50KQorCQllbG9nKEVSUk9SLCAiY2Fubm90IGZyZWUgYSBzbmFwc2hvdCB0 aGF0J3MgaW4gdXNlIik7CiAKIAlwZnJlZShzbmFwKTsKIH0KQEAgLTMxMyw5ICszMTEsOSBA QCBTbmFwQnVpbGRYYWN0TmVlZHNTa2lwKFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0 ciBwdHIpCiAgKiBhZGRpbmcgYSBTbmFwc2hvdCBhcyBidWlsZGVyLT5zbmFwc2hvdC4KICAq Lwogc3RhdGljIHZvaWQKLVNuYXBCdWlsZFNuYXBJbmNSZWZjb3VudChTbmFwc2hvdCBzbmFw KQorU25hcEJ1aWxkU25hcEluY1JlZmNvdW50KEhpc3RvcmljTVZDQ1NuYXBzaG90IHNuYXAp CiB7Ci0Jc25hcC0+YWN0aXZlX2NvdW50Kys7CisJc25hcC0+cmVmY291bnQrKzsKIH0KIAog LyoKQEAgLTMyNSwyNiArMzIzLDIzIEBAIFNuYXBCdWlsZFNuYXBJbmNSZWZjb3VudChTbmFw c2hvdCBzbmFwKQogICogSW5jUmVmJ2VkIFNuYXBzaG90IGNhbiBhZGp1c3QgaXRzIHJlZmNv dW50IGVhc2lseS4KICAqLwogdm9pZAotU25hcEJ1aWxkU25hcERlY1JlZmNvdW50KFNuYXBz aG90IHNuYXApCitTbmFwQnVpbGRTbmFwRGVjUmVmY291bnQoSGlzdG9yaWNNVkNDU25hcHNo b3Qgc25hcCkKIHsKIAkvKiBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IHBhc3NlZCBhbiBleHRl cm5hbCBzbmFwc2hvdCAqLwogCUFzc2VydChzbmFwLT5zbmFwc2hvdF90eXBlID09IFNOQVBT SE9UX0hJU1RPUklDX01WQ0MpOwogCiAJLyogbWFrZSBzdXJlIG5vYm9keSBtb2RpZmllZCBv dXIgc25hcHNob3QgKi8KIAlBc3NlcnQoc25hcC0+Y3VyY2lkID09IEZpcnN0Q29tbWFuZElk KTsKLQlBc3NlcnQoIXNuYXAtPnN1Ym92ZXJmbG93ZWQpOwotCUFzc2VydCghc25hcC0+dGFr ZW5EdXJpbmdSZWNvdmVyeSk7CiAKKwlBc3NlcnQoc25hcC0+cmVmY291bnQgPiAwKTsKIAlB c3NlcnQoc25hcC0+cmVnZF9jb3VudCA9PSAwKTsKIAotCUFzc2VydChzbmFwLT5hY3RpdmVf Y291bnQgPiAwKTsKLQogCS8qIHNsaWdodGx5IG1vcmUgbGlrZWx5LCBzbyBpdCdzIGNoZWNr ZWQgZXZlbiB3aXRob3V0IGNhc3NlcnRzICovCiAJaWYgKHNuYXAtPmNvcGllZCkKIAkJZWxv ZyhFUlJPUiwgImNhbm5vdCBmcmVlIGEgY29waWVkIHNuYXBzaG90Iik7CiAKLQlzbmFwLT5h Y3RpdmVfY291bnQtLTsKLQlpZiAoc25hcC0+YWN0aXZlX2NvdW50ID09IDApCisJc25hcC0+ cmVmY291bnQtLTsKKwlpZiAoc25hcC0+cmVmY291bnQgPT0gMCkKIAkJU25hcEJ1aWxkRnJl ZVNuYXBzaG90KHNuYXApOwogfQogCkBAIC0zNTYsMTUgKzM1MSwxNSBAQCBTbmFwQnVpbGRT bmFwRGVjUmVmY291bnQoU25hcHNob3Qgc25hcCkKICAqIHRoZXNlIHNuYXBzaG90czsgdGhl eSBoYXZlIHRvIGNvcHkgdGhlbSBhbmQgZmlsbCBpbiBhcHByb3ByaWF0ZSAtPmN1cmNpZAog ICogYW5kIC0+c3VieGlwL3N1YnhjbnQgdmFsdWVzLgogICovCi1zdGF0aWMgU25hcHNob3QK K3N0YXRpYyBIaXN0b3JpY01WQ0NTbmFwc2hvdAogU25hcEJ1aWxkQnVpbGRTbmFwc2hvdChT bmFwQnVpbGQgKmJ1aWxkZXIpCiB7Ci0JU25hcHNob3QJc25hcHNob3Q7CisJSGlzdG9yaWNN VkNDU25hcHNob3Qgc25hcHNob3Q7CiAJU2l6ZQkJc3NpemU7CiAKIAlBc3NlcnQoYnVpbGRl ci0+c3RhdGUgPj0gU05BUEJVSUxEX0ZVTExfU05BUFNIT1QpOwogCi0Jc3NpemUgPSBzaXpl b2YoU25hcHNob3REYXRhKQorCXNzaXplID0gc2l6ZW9mKEhpc3RvcmljTVZDQ1NuYXBzaG90 RGF0YSkKIAkJKyBzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiBidWlsZGVyLT5jb21taXR0ZWQu eGNudAogCQkrIHNpemVvZihUcmFuc2FjdGlvbklkKSAqIDEgLyogdG9wbGV2ZWwgeGlkICov IDsKIApAQCAtNDAwLDMxICszOTUsMjggQEAgU25hcEJ1aWxkQnVpbGRTbmFwc2hvdChTbmFw QnVpbGQgKmJ1aWxkZXIpCiAJc25hcHNob3QtPnhtYXggPSBidWlsZGVyLT54bWF4OwogCiAJ Lyogc3RvcmUgYWxsIHRyYW5zYWN0aW9ucyB0byBiZSB0cmVhdGVkIGFzIGNvbW1pdHRlZCBi eSB0aGlzIHNuYXBzaG90ICovCi0Jc25hcHNob3QtPnhpcCA9Ci0JCShUcmFuc2FjdGlvbklk ICopICgoY2hhciAqKSBzbmFwc2hvdCArIHNpemVvZihTbmFwc2hvdERhdGEpKTsKKwlzbmFw c2hvdC0+Y29tbWl0dGVkX3hpZHMgPQorCQkoVHJhbnNhY3Rpb25JZCAqKSAoKGNoYXIgKikg c25hcHNob3QgKyBzaXplb2YoSGlzdG9yaWNNVkNDU25hcHNob3REYXRhKSk7CiAJc25hcHNo b3QtPnhjbnQgPSBidWlsZGVyLT5jb21taXR0ZWQueGNudDsKLQltZW1jcHkoc25hcHNob3Qt PnhpcCwKKwltZW1jcHkoc25hcHNob3QtPmNvbW1pdHRlZF94aWRzLAogCQkgICBidWlsZGVy LT5jb21taXR0ZWQueGlwLAogCQkgICBidWlsZGVyLT5jb21taXR0ZWQueGNudCAqIHNpemVv ZihUcmFuc2FjdGlvbklkKSk7CiAKIAkvKiBzb3J0IHNvIHdlIGNhbiBic2VhcmNoKCkgKi8K LQlxc29ydChzbmFwc2hvdC0+eGlwLCBzbmFwc2hvdC0+eGNudCwgc2l6ZW9mKFRyYW5zYWN0 aW9uSWQpLCB4aWRDb21wYXJhdG9yKTsKKwlxc29ydChzbmFwc2hvdC0+Y29tbWl0dGVkX3hp ZHMsIHNuYXBzaG90LT54Y250LCBzaXplb2YoVHJhbnNhY3Rpb25JZCksIHhpZENvbXBhcmF0 b3IpOwogCiAJLyoKLQkgKiBJbml0aWFsbHksIHN1YnhpcCBpcyBlbXB0eSwgaS5lLiBpdCdz IGEgc25hcHNob3QgdG8gYmUgdXNlZCBieQorCSAqIEluaXRpYWxseSwgY3VyeGlwIGlzIGVt cHR5LCBpLmUuIGl0J3MgYSBzbmFwc2hvdCB0byBiZSB1c2VkIGJ5CiAJICogdHJhbnNhY3Rp b25zIHRoYXQgZG9uJ3QgbW9kaWZ5IHRoZSBjYXRhbG9nLiBXaWxsIGJlIGZpbGxlZCBieQog CSAqIFJlb3JkZXJCdWZmZXJDb3B5U25hcCgpIGlmIG5lY2Vzc2FyeS4KIAkgKi8KLQlzbmFw c2hvdC0+c3VieGNudCA9IDA7Ci0Jc25hcHNob3QtPnN1YnhpcCA9IE5VTEw7CisJc25hcHNo b3QtPmN1cnhjbnQgPSAwOworCXNuYXBzaG90LT5jdXJ4aXAgPSBOVUxMOwogCi0Jc25hcHNo b3QtPnN1Ym92ZXJmbG93ZWQgPSBmYWxzZTsKLQlzbmFwc2hvdC0+dGFrZW5EdXJpbmdSZWNv dmVyeSA9IGZhbHNlOwogCXNuYXBzaG90LT5jb3BpZWQgPSBmYWxzZTsKIAlzbmFwc2hvdC0+ Y3VyY2lkID0gRmlyc3RDb21tYW5kSWQ7Ci0Jc25hcHNob3QtPmFjdGl2ZV9jb3VudCA9IDA7 CisJc25hcHNob3QtPnJlZmNvdW50ID0gMDsKIAlzbmFwc2hvdC0+cmVnZF9jb3VudCA9IDA7 Ci0Jc25hcHNob3QtPnNuYXBYYWN0Q29tcGxldGlvbkNvdW50ID0gMDsKIAogCXJldHVybiBz bmFwc2hvdDsKIH0KQEAgLTQzNiwxMyArNDI4LDEzIEBAIFNuYXBCdWlsZEJ1aWxkU25hcHNo b3QoU25hcEJ1aWxkICpidWlsZGVyKQogICogVGhlIHNuYXBzaG90IHdpbGwgYmUgdXNhYmxl IGRpcmVjdGx5IGluIGN1cnJlbnQgdHJhbnNhY3Rpb24gb3IgZXhwb3J0ZWQKICAqIGZvciBs b2FkaW5nIGluIGRpZmZlcmVudCB0cmFuc2FjdGlvbi4KICAqLwotU25hcHNob3QKK01WQ0NT bmFwc2hvdAogU25hcEJ1aWxkSW5pdGlhbFNuYXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlcikK IHsKLQlTbmFwc2hvdAlzbmFwOworCUhpc3RvcmljTVZDQ1NuYXBzaG90IGhpc3Rvcmljc25h cDsKKwlNVkNDU25hcHNob3QgbXZjY3NuYXA7CiAJVHJhbnNhY3Rpb25JZCB4aWQ7CiAJVHJh bnNhY3Rpb25JZCBzYWZlWGlkOwotCVRyYW5zYWN0aW9uSWQgKm5ld3hpcDsKIAlpbnQJCQlu ZXd4Y250ID0gMDsKIAogCUFzc2VydChYYWN0SXNvTGV2ZWwgPT0gWEFDVF9SRVBFQVRBQkxF X1JFQUQpOwpAQCAtNDY0LDEwICs0NTYsMTAgQEAgU25hcEJ1aWxkSW5pdGlhbFNuYXBzaG90 KFNuYXBCdWlsZCAqYnVpbGRlcikKIAlpZiAoVHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9j LT54bWluKSkKIAkJZWxvZyhFUlJPUiwgImNhbm5vdCBidWlsZCBhbiBpbml0aWFsIHNsb3Qg c25hcHNob3Qgd2hlbiBNeVByb2MtPnhtaW4gYWxyZWFkeSBpcyB2YWxpZCIpOwogCi0Jc25h cCA9IFNuYXBCdWlsZEJ1aWxkU25hcHNob3QoYnVpbGRlcik7CisJaGlzdG9yaWNzbmFwID0g U25hcEJ1aWxkQnVpbGRTbmFwc2hvdChidWlsZGVyKTsKIAogCS8qCi0JICogV2Uga25vdyB0 aGF0IHNuYXAtPnhtaW4gaXMgYWxpdmUsIGVuZm9yY2VkIGJ5IHRoZSBsb2dpY2FsIHhtaW4K KwkgKiBXZSBrbm93IHRoYXQgaGlzdG9yaWNzbmFwLT54bWluIGlzIGFsaXZlLCBlbmZvcmNl ZCBieSB0aGUgbG9naWNhbCB4bWluCiAJICogbWVjaGFuaXNtLiBEdWUgdG8gdGhhdCB3ZSBj YW4gZG8gdGhpcyB3aXRob3V0IGxvY2tzLCB3ZSdyZSBvbmx5CiAJICogY2hhbmdpbmcgb3Vy IG93biB2YWx1ZS4KIAkgKgpAQCAtNDc5LDE1ICs0NzEsMTggQEAgU25hcEJ1aWxkSW5pdGlh bFNuYXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlcikKIAlzYWZlWGlkID0gR2V0T2xkZXN0U2Fm ZURlY29kaW5nVHJhbnNhY3Rpb25JZChmYWxzZSk7CiAJTFdMb2NrUmVsZWFzZShQcm9jQXJy YXlMb2NrKTsKIAotCWlmIChUcmFuc2FjdGlvbklkRm9sbG93cyhzYWZlWGlkLCBzbmFwLT54 bWluKSkKKwlpZiAoVHJhbnNhY3Rpb25JZEZvbGxvd3Moc2FmZVhpZCwgaGlzdG9yaWNzbmFw LT54bWluKSkKIAkJZWxvZyhFUlJPUiwgImNhbm5vdCBidWlsZCBhbiBpbml0aWFsIHNsb3Qg c25hcHNob3QgYXMgb2xkZXN0IHNhZmUgeGlkICV1IGZvbGxvd3Mgc25hcHNob3QncyB4bWlu ICV1IiwKLQkJCSBzYWZlWGlkLCBzbmFwLT54bWluKTsKKwkJCSBzYWZlWGlkLCBoaXN0b3Jp Y3NuYXAtPnhtaW4pOwogCi0JTXlQcm9jLT54bWluID0gc25hcC0+eG1pbjsKKwlNeVByb2Mt PnhtaW4gPSBoaXN0b3JpY3NuYXAtPnhtaW47CiAKIAkvKiBhbGxvY2F0ZSBpbiB0cmFuc2Fj dGlvbiBjb250ZXh0ICovCi0JbmV3eGlwID0gKFRyYW5zYWN0aW9uSWQgKikKLQkJcGFsbG9j KHNpemVvZihUcmFuc2FjdGlvbklkKSAqIEdldE1heFNuYXBzaG90WGlkQ291bnQoKSk7CisJ bXZjY3NuYXAgPSBwYWxsb2Moc2l6ZW9mKE1WQ0NTbmFwc2hvdERhdGEpICsgc2l6ZW9mKFRy YW5zYWN0aW9uSWQpICogR2V0TWF4U25hcHNob3RYaWRDb3VudCgpKTsKKwltdmNjc25hcC0+ c25hcHNob3RfdHlwZSA9IFNOQVBTSE9UX01WQ0M7CisJbXZjY3NuYXAtPnhtaW4gPSBoaXN0 b3JpY3NuYXAtPnhtaW47CisJbXZjY3NuYXAtPnhtYXggPSBoaXN0b3JpY3NuYXAtPnhtYXg7 CisJbXZjY3NuYXAtPnhpcCA9IChUcmFuc2FjdGlvbklkICopICgoY2hhciAqKSBtdmNjc25h cCArIHNpemVvZihNVkNDU25hcHNob3REYXRhKSk7CiAKIAkvKgogCSAqIHNuYXBidWlsZC5j IGJ1aWxkcyB0cmFuc2FjdGlvbnMgaW4gYW4gImludmVydGVkIiBtYW5uZXIsIHdoaWNoIG1l YW5zIGl0CkBAIC00OTUsMTUgKzQ5MCwxNSBAQCBTbmFwQnVpbGRJbml0aWFsU25hcHNob3Qo U25hcEJ1aWxkICpidWlsZGVyKQogCSAqIGNsYXNzaWNhbCBzbmFwc2hvdCBieSBtYXJraW5n IGFsbCBub24tY29tbWl0dGVkIHRyYW5zYWN0aW9ucyBhcwogCSAqIGluLXByb2dyZXNzLiBU aGlzIGNhbiBiZSBleHBlbnNpdmUuCiAJICovCi0JZm9yICh4aWQgPSBzbmFwLT54bWluOyBO b3JtYWxUcmFuc2FjdGlvbklkUHJlY2VkZXMoeGlkLCBzbmFwLT54bWF4KTspCisJZm9yICh4 aWQgPSBoaXN0b3JpY3NuYXAtPnhtaW47IE5vcm1hbFRyYW5zYWN0aW9uSWRQcmVjZWRlcyh4 aWQsIGhpc3Rvcmljc25hcC0+eG1heCk7KQogCXsKIAkJdm9pZAkgICAqdGVzdDsKIAogCQkv KgotCQkgKiBDaGVjayB3aGV0aGVyIHRyYW5zYWN0aW9uIGNvbW1pdHRlZCB1c2luZyB0aGUg ZGVjb2Rpbmcgc25hcHNob3QKLQkJICogbWVhbmluZyBvZiAtPnhpcC4KKwkJICogQ2hlY2sg d2hldGhlciB0cmFuc2FjdGlvbiBjb21taXR0ZWQgdXNpbmcgdGhlIGRlY29kaW5nIHNuYXBz aG90J3MKKwkJICogY29tbWl0dGVkX3hpZHMgYXJyYXkuCiAJCSAqLwotCQl0ZXN0ID0gYnNl YXJjaCgmeGlkLCBzbmFwLT54aXAsIHNuYXAtPnhjbnQsCisJCXRlc3QgPSBic2VhcmNoKCZ4 aWQsIGhpc3Rvcmljc25hcC0+Y29tbWl0dGVkX3hpZHMsIGhpc3Rvcmljc25hcC0+eGNudCwK IAkJCQkJICAgc2l6ZW9mKFRyYW5zYWN0aW9uSWQpLCB4aWRDb21wYXJhdG9yKTsKIAogCQlp ZiAodGVzdCA9PSBOVUxMKQpAQCAtNTEzLDE4ICs1MDgsMjcgQEAgU25hcEJ1aWxkSW5pdGlh bFNuYXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlcikKIAkJCQkJCShlcnJjb2RlKEVSUkNPREVf VF9SX1NFUklBTElaQVRJT05fRkFJTFVSRSksCiAJCQkJCQkgZXJybXNnKCJpbml0aWFsIHNs b3Qgc25hcHNob3QgdG9vIGxhcmdlIikpKTsKIAotCQkJbmV3eGlwW25ld3hjbnQrK10gPSB4 aWQ7CisJCQltdmNjc25hcC0+eGlwW25ld3hjbnQrK10gPSB4aWQ7CiAJCX0KIAogCQlUcmFu c2FjdGlvbklkQWR2YW5jZSh4aWQpOwogCX0KLQotCS8qIGFkanVzdCByZW1haW5pbmcgc25h cHNob3QgZmllbGRzIGFzIG5lZWRlZCAqLwotCXNuYXAtPnNuYXBzaG90X3R5cGUgPSBTTkFQ U0hPVF9NVkNDOwotCXNuYXAtPnhjbnQgPSBuZXd4Y250OwotCXNuYXAtPnhpcCA9IG5ld3hp cDsKLQotCXJldHVybiBzbmFwOworCW12Y2NzbmFwLT54Y250ID0gbmV3eGNudDsKKworCS8q IEluaXRpYWxpemUgcmVtYWluaW5nIE1WQ0NTbmFwc2hvdCBmaWVsZHMgKi8KKwltdmNjc25h cC0+c3VieGlwID0gTlVMTDsKKwltdmNjc25hcC0+c3VieGNudCA9IDA7CisJbXZjY3NuYXAt PnN1Ym92ZXJmbG93ZWQgPSBmYWxzZTsKKwltdmNjc25hcC0+dGFrZW5EdXJpbmdSZWNvdmVy eSA9IGZhbHNlOworCW12Y2NzbmFwLT5jb3BpZWQgPSB0cnVlOworCW12Y2NzbmFwLT5jdXJj aWQgPSBGaXJzdENvbW1hbmRJZDsKKwltdmNjc25hcC0+YWN0aXZlX2NvdW50ID0gMDsKKwlt dmNjc25hcC0+cmVnZF9jb3VudCA9IDA7CisJbXZjY3NuYXAtPnNuYXBYYWN0Q29tcGxldGlv bkNvdW50ID0gMDsKKworCXBmcmVlKGhpc3Rvcmljc25hcCk7CisKKwlyZXR1cm4gbXZjY3Nu YXA7CiB9CiAKIC8qCkBAIC01MzgsNyArNTQyLDcgQEAgU25hcEJ1aWxkSW5pdGlhbFNuYXBz aG90KFNuYXBCdWlsZCAqYnVpbGRlcikKIGNvbnN0IGNoYXIgKgogU25hcEJ1aWxkRXhwb3J0 U25hcHNob3QoU25hcEJ1aWxkICpidWlsZGVyKQogewotCVNuYXBzaG90CXNuYXA7CisJTVZD Q1NuYXBzaG90IHNuYXA7CiAJY2hhcgkgICAqc25hcG5hbWU7CiAKIAlpZiAoSXNUcmFuc2Fj dGlvbk9yVHJhbnNhY3Rpb25CbG9jaygpKQpAQCAtNTc1LDcgKzU3OSw3IEBAIFNuYXBCdWls ZEV4cG9ydFNuYXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlcikKIC8qCiAgKiBFbnN1cmUgdGhl cmUgaXMgYSBzbmFwc2hvdCBhbmQgaWYgbm90IGJ1aWxkIG9uZSBmb3IgY3VycmVudCB0cmFu c2FjdGlvbi4KICAqLwotU25hcHNob3QKK0hpc3RvcmljTVZDQ1NuYXBzaG90CiBTbmFwQnVp bGRHZXRPckJ1aWxkU25hcHNob3QoU25hcEJ1aWxkICpidWlsZGVyKQogewogCUFzc2VydChi dWlsZGVyLT5zdGF0ZSA9PSBTTkFQQlVJTERfQ09OU0lTVEVOVCk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL3dhbHNlbmRlci5jCmluZGV4IDEwMjg5MTlhZWNiLi4xYTdhMzVlMjVlYiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKKysrIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKQEAgLTEzMDcsNyArMTMwNyw3IEBA IENyZWF0ZVJlcGxpY2F0aW9uU2xvdChDcmVhdGVSZXBsaWNhdGlvblNsb3RDbWQgKmNtZCkK IAkJfQogCQllbHNlIGlmIChzbmFwc2hvdF9hY3Rpb24gPT0gQ1JTX1VTRV9TTkFQU0hPVCkK IAkJewotCQkJU25hcHNob3QJc25hcDsKKwkJCU1WQ0NTbmFwc2hvdCBzbmFwOwogCiAJCQlz bmFwID0gU25hcEJ1aWxkSW5pdGlhbFNuYXBzaG90KGN0eC0+c25hcHNob3RfYnVpbGRlcik7 CiAJCQlSZXN0b3JlVHJhbnNhY3Rpb25TbmFwc2hvdChzbmFwLCBNeVByb2MpOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgYi9zcmMvYmFja2Vu ZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwppbmRleCBlNWI5NDVhOWVlMy4uNTM1NzU1NjE0 YTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCkBAIC0yMDkyLDcgKzIw OTIsNyBAQCBHZXRNYXhTbmFwc2hvdFN1YnhpZENvdW50KHZvaWQpCiAgKiBsZWFzdCBpbiB0 aGUgY2FzZSB3ZSBhbHJlYWR5IGhvbGQgYSBzbmFwc2hvdCksIGJ1dCB0aGF0J3MgZm9yIGFu b3RoZXIgZGF5LgogICovCiBzdGF0aWMgYm9vbAotR2V0U25hcHNob3REYXRhUmV1c2UoU25h cHNob3Qgc25hcHNob3QpCitHZXRTbmFwc2hvdERhdGFSZXVzZShNVkNDU25hcHNob3Qgc25h cHNob3QpCiB7CiAJdWludDY0CQljdXJYYWN0Q29tcGxldGlvbkNvdW50OwogCkBAIC0yMTcx LDggKzIxNzEsOCBAQCBHZXRTbmFwc2hvdERhdGFSZXVzZShTbmFwc2hvdCBzbmFwc2hvdCkK ICAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gc2hvdWxkIHByb2JhYmx5IG5vdCBiZSBjYWxsZWQg d2l0aCBhbiBhcmd1bWVudCB0aGF0J3MKICAqIG5vdCBzdGF0aWNhbGx5IGFsbG9jYXRlZCAo c2VlIHhpcCBhbGxvY2F0aW9uIGJlbG93KS4KICAqLwotU25hcHNob3QKLUdldFNuYXBzaG90 RGF0YShTbmFwc2hvdCBzbmFwc2hvdCkKK01WQ0NTbmFwc2hvdAorR2V0U25hcHNob3REYXRh KE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCkKIHsKIAlQcm9jQXJyYXlTdHJ1Y3QgKmFycmF5UCA9 IHByb2NBcnJheTsKIAlUcmFuc2FjdGlvbklkICpvdGhlcl94aWRzID0gUHJvY0dsb2JhbC0+ eGlkczsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUu YyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwppbmRleCA1YjIxYTA1 Mzk4MS4uZGQ1Mjc4MmZmMjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1n ci9wcmVkaWNhdGUuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJlZGljYXRl LmMKQEAgLTQ0OSwxMCArNDQ5LDEwIEBAIHN0YXRpYyB2b2lkIFNlcmlhbFNldEFjdGl2ZVNl clhtaW4oVHJhbnNhY3Rpb25JZCB4aWQpOwogCiBzdGF0aWMgdWludDMyIHByZWRpY2F0ZWxv Y2tfaGFzaChjb25zdCB2b2lkICprZXksIFNpemUga2V5c2l6ZSk7CiBzdGF0aWMgdm9pZCBT dW1tYXJpemVPbGRlc3RDb21taXR0ZWRTeGFjdCh2b2lkKTsKLXN0YXRpYyBTbmFwc2hvdCBH ZXRTYWZlU25hcHNob3QoU25hcHNob3Qgb3JpZ1NuYXBzaG90KTsKLXN0YXRpYyBTbmFwc2hv dCBHZXRTZXJpYWxpemFibGVUcmFuc2FjdGlvblNuYXBzaG90SW50KFNuYXBzaG90IHNuYXBz aG90LAotCQkJCQkJCQkJCQkJCSAgVmlydHVhbFRyYW5zYWN0aW9uSWQgKnNvdXJjZXZ4aWQs Ci0JCQkJCQkJCQkJCQkJICBpbnQgc291cmNlcGlkKTsKK3N0YXRpYyBNVkNDU25hcHNob3Qg R2V0U2FmZVNuYXBzaG90KE1WQ0NTbmFwc2hvdCBvcmlnU25hcHNob3QpOworc3RhdGljIE1W Q0NTbmFwc2hvdCBHZXRTZXJpYWxpemFibGVUcmFuc2FjdGlvblNuYXBzaG90SW50KE1WQ0NT bmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJCQkJCQkJICBWaXJ0dWFsVHJhbnNhY3Rpb25J ZCAqc291cmNldnhpZCwKKwkJCQkJCQkJCQkJCQkJICBpbnQgc291cmNlcGlkKTsKIHN0YXRp YyBib29sIFByZWRpY2F0ZUxvY2tFeGlzdHMoY29uc3QgUFJFRElDQVRFTE9DS1RBUkdFVFRB RyAqdGFyZ2V0dGFnKTsKIHN0YXRpYyBib29sIEdldFBhcmVudFByZWRpY2F0ZUxvY2tUYWco Y29uc3QgUFJFRElDQVRFTE9DS1RBUkdFVFRBRyAqdGFnLAogCQkJCQkJCQkJICBQUkVESUNB VEVMT0NLVEFSR0VUVEFHICpwYXJlbnQpOwpAQCAtMTU0NCwxMCArMTU0NCwxMCBAQCBTdW1t YXJpemVPbGRlc3RDb21taXR0ZWRTeGFjdCh2b2lkKQogICoJCWZvciksIHRoZSBwYXNzZWQt aW4gU25hcHNob3QgcG9pbnRlciBzaG91bGQgcmVmZXJlbmNlIGEgc3RhdGljIGRhdGEKICAq CQlhcmVhIHRoYXQgY2FuIHNhZmVseSBiZSBwYXNzZWQgdG8gR2V0U25hcHNob3REYXRhLgog ICovCi1zdGF0aWMgU25hcHNob3QKLUdldFNhZmVTbmFwc2hvdChTbmFwc2hvdCBvcmlnU25h cHNob3QpCitzdGF0aWMgTVZDQ1NuYXBzaG90CitHZXRTYWZlU25hcHNob3QoTVZDQ1NuYXBz aG90IG9yaWdTbmFwc2hvdCkKIHsKLQlTbmFwc2hvdAlzbmFwc2hvdDsKKwlNVkNDU25hcHNo b3Qgc25hcHNob3Q7CiAKIAlBc3NlcnQoWGFjdFJlYWRPbmx5ICYmIFhhY3REZWZlcnJhYmxl KTsKIApAQCAtMTY2OCw4ICsxNjY4LDggQEAgR2V0U2FmZVNuYXBzaG90QmxvY2tpbmdQaWRz KGludCBibG9ja2VkX3BpZCwgaW50ICpvdXRwdXQsIGludCBvdXRwdXRfc2l6ZSkKICAqIGFs d2F5cyB0aGlzIHNhbWUgcG9pbnRlcjsgbm8gbmV3IHNuYXBzaG90IGRhdGEgc3RydWN0dXJl IGlzIGFsbG9jYXRlZAogICogd2l0aGluIHRoaXMgZnVuY3Rpb24uCiAgKi8KLVNuYXBzaG90 Ci1HZXRTZXJpYWxpemFibGVUcmFuc2FjdGlvblNuYXBzaG90KFNuYXBzaG90IHNuYXBzaG90 KQorTVZDQ1NuYXBzaG90CitHZXRTZXJpYWxpemFibGVUcmFuc2FjdGlvblNuYXBzaG90KE1W Q0NTbmFwc2hvdCBzbmFwc2hvdCkKIHsKIAlBc3NlcnQoSXNvbGF0aW9uSXNTZXJpYWxpemFi bGUoKSk7CiAKQEAgLTE3MDksNyArMTcwOSw3IEBAIEdldFNlcmlhbGl6YWJsZVRyYW5zYWN0 aW9uU25hcHNob3QoU25hcHNob3Qgc25hcHNob3QpCiAgKiByZWFkLW9ubHkuCiAgKi8KIHZv aWQKLVNldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3QoU25hcHNob3Qgc25hcHNo b3QsCitTZXRTZXJpYWxpemFibGVUcmFuc2FjdGlvblNuYXBzaG90KE1WQ0NTbmFwc2hvdCBz bmFwc2hvdCwKIAkJCQkJCQkJICAgVmlydHVhbFRyYW5zYWN0aW9uSWQgKnNvdXJjZXZ4aWQs CiAJCQkJCQkJCSAgIGludCBzb3VyY2VwaWQpCiB7CkBAIC0xNzUwLDggKzE3NTAsOCBAQCBT ZXRTZXJpYWxpemFibGVUcmFuc2FjdGlvblNuYXBzaG90KFNuYXBzaG90IHNuYXBzaG90LAog ICogc291cmNlIHhhY3QgaXMgc3RpbGwgcnVubmluZyBhZnRlciB3ZSBhY3F1aXJlIFNlcmlh bGl6YWJsZVhhY3RIYXNoTG9jay4KICAqIFdlIGRvIHRoYXQgYnkgY2FsbGluZyBQcm9jQXJy YXlJbnN0YWxsSW1wb3J0ZWRYbWluLgogICovCi1zdGF0aWMgU25hcHNob3QKLUdldFNlcmlh bGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3RJbnQoU25hcHNob3Qgc25hcHNob3QsCitzdGF0 aWMgTVZDQ1NuYXBzaG90CitHZXRTZXJpYWxpemFibGVUcmFuc2FjdGlvblNuYXBzaG90SW50 KE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCQkJCSAgVmlydHVhbFRyYW5zYWN0aW9u SWQgKnNvdXJjZXZ4aWQsCiAJCQkJCQkJCQkgIGludCBzb3VyY2VwaWQpCiB7CkBAIC0zOTYx LDEyICszOTYxLDEyIEBAIFJlbGVhc2VPbmVTZXJpYWxpemFibGVYYWN0KFNFUklBTElaQUJM RVhBQ1QgKnN4YWN0LCBib29sIHBhcnRpYWwsCiBzdGF0aWMgYm9vbAogWGlkSXNDb25jdXJy ZW50KFRyYW5zYWN0aW9uSWQgeGlkKQogewotCVNuYXBzaG90CXNuYXA7CisJTVZDQ1NuYXBz aG90IHNuYXA7CiAKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSk7CiAJQXNz ZXJ0KCFUcmFuc2FjdGlvbklkRXF1YWxzKHhpZCwgR2V0VG9wVHJhbnNhY3Rpb25JZElmQW55 KCkpKTsKIAotCXNuYXAgPSBHZXRUcmFuc2FjdGlvblNuYXBzaG90KCk7CisJc25hcCA9IChN VkNDU25hcHNob3QpIEdldFRyYW5zYWN0aW9uU25hcHNob3QoKTsKIAogCWlmIChUcmFuc2Fj dGlvbklkUHJlY2VkZXMoeGlkLCBzbmFwLT54bWluKSkKIAkJcmV0dXJuIGZhbHNlOwpAQCAt NDIxNCw3ICs0MjE0LDcgQEAgQ2hlY2tUYXJnZXRGb3JDb25mbGljdHNJbihQUkVESUNBVEVM T0NLVEFSR0VUVEFHICp0YXJnZXR0YWcpCiAJCX0KIAkJZWxzZSBpZiAoIVN4YWN0SXNEb29t ZWQoc3hhY3QpCiAJCQkJICYmICghU3hhY3RJc0NvbW1pdHRlZChzeGFjdCkKLQkJCQkJIHx8 IFRyYW5zYWN0aW9uSWRQcmVjZWRlcyhHZXRUcmFuc2FjdGlvblNuYXBzaG90KCktPnhtaW4s CisJCQkJCSB8fCBUcmFuc2FjdGlvbklkUHJlY2VkZXMoVHJhbnNhY3Rpb25YbWluLAogCQkJ CQkJCQkJCQkgIHN4YWN0LT5maW5pc2hlZEJlZm9yZSkpCiAJCQkJICYmICFSV0NvbmZsaWN0 RXhpc3RzKHN4YWN0LCBNeVNlcmlhbGl6YWJsZVhhY3QpKQogCQl7CkBAIC00MjI3LDcgKzQy MjcsNyBAQCBDaGVja1RhcmdldEZvckNvbmZsaWN0c0luKFBSRURJQ0FURUxPQ0tUQVJHRVRU QUcgKnRhcmdldHRhZykKIAkJCSAqLwogCQkJaWYgKCFTeGFjdElzRG9vbWVkKHN4YWN0KQog CQkJCSYmICghU3hhY3RJc0NvbW1pdHRlZChzeGFjdCkKLQkJCQkJfHwgVHJhbnNhY3Rpb25J ZFByZWNlZGVzKEdldFRyYW5zYWN0aW9uU25hcHNob3QoKS0+eG1pbiwKKwkJCQkJfHwgVHJh bnNhY3Rpb25JZFByZWNlZGVzKFRyYW5zYWN0aW9uWG1pbiwKIAkJCQkJCQkJCQkJIHN4YWN0 LT5maW5pc2hlZEJlZm9yZSkpCiAJCQkJJiYgIVJXQ29uZmxpY3RFeGlzdHMoc3hhY3QsIE15 U2VyaWFsaXphYmxlWGFjdCkpCiAJCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQveGlkOGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQveGlkOGZ1bmNzLmMK aW5kZXggMWRhMzk2NGNhNmYuLmQ0YWE4ZWY5ZTRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQveGlkOGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3hp ZDhmdW5jcy5jCkBAIC0zNzIsMTAgKzM3MiwxMCBAQCBwZ19jdXJyZW50X3NuYXBzaG90KFBH X0ZVTkNUSU9OX0FSR1MpCiAJcGdfc25hcHNob3QgKnNuYXA7CiAJdWludDMyCQlueGlwLAog CQkJCWk7Ci0JU25hcHNob3QJY3VyOworCU1WQ0NTbmFwc2hvdCBjdXI7CiAJRnVsbFRyYW5z YWN0aW9uSWQgbmV4dF9meGlkID0gUmVhZE5leHRGdWxsVHJhbnNhY3Rpb25JZCgpOwogCi0J Y3VyID0gR2V0QWN0aXZlU25hcHNob3QoKTsKKwljdXIgPSAoTVZDQ1NuYXBzaG90KSBHZXRB Y3RpdmVTbmFwc2hvdCgpOwogCWlmIChjdXIgPT0gTlVMTCkKIAkJZWxvZyhFUlJPUiwgIm5v IGFjdGl2ZSBzbmFwc2hvdCBzZXQiKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvdGltZS9zbmFwbWdyLmMgYi9zcmMvYmFja2VuZC91dGlscy90aW1lL3NuYXBtZ3IuYwpp bmRleCBlYTM1ZjMwZjQ5NC4uNzhhZGI2ZDU3NWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL3RpbWUvc25hcG1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25h cG1nci5jCkBAIC0xMzcsMTggKzEzNywxOCBAQAogICogVGhlc2UgU25hcHNob3REYXRhIHN0 cnVjdHMgYXJlIHN0YXRpYyB0byBzaW1wbGlmeSBtZW1vcnkgYWxsb2NhdGlvbgogICogKHNl ZSB0aGUgaGFjayBpbiBHZXRTbmFwc2hvdERhdGEgdG8gYXZvaWQgcmVwZWF0ZWQgbWFsbG9j L2ZyZWUpLgogICovCi1zdGF0aWMgU25hcHNob3REYXRhIEN1cnJlbnRTbmFwc2hvdERhdGEg PSB7U05BUFNIT1RfTVZDQ307Ci1zdGF0aWMgU25hcHNob3REYXRhIFNlY29uZGFyeVNuYXBz aG90RGF0YSA9IHtTTkFQU0hPVF9NVkNDfTsKLXN0YXRpYyBTbmFwc2hvdERhdGEgQ2F0YWxv Z1NuYXBzaG90RGF0YSA9IHtTTkFQU0hPVF9NVkNDfTsKK3N0YXRpYyBNVkNDU25hcHNob3RE YXRhIEN1cnJlbnRTbmFwc2hvdERhdGEgPSB7U05BUFNIT1RfTVZDQ307CitzdGF0aWMgTVZD Q1NuYXBzaG90RGF0YSBTZWNvbmRhcnlTbmFwc2hvdERhdGEgPSB7U05BUFNIT1RfTVZDQ307 CitzdGF0aWMgTVZDQ1NuYXBzaG90RGF0YSBDYXRhbG9nU25hcHNob3REYXRhID0ge1NOQVBT SE9UX01WQ0N9OwogU25hcHNob3REYXRhIFNuYXBzaG90U2VsZkRhdGEgPSB7U05BUFNIT1Rf U0VMRn07CiBTbmFwc2hvdERhdGEgU25hcHNob3RBbnlEYXRhID0ge1NOQVBTSE9UX0FOWX07 CiBTbmFwc2hvdERhdGEgU25hcHNob3RUb2FzdERhdGEgPSB7U05BUFNIT1RfVE9BU1R9Owog CiAvKiBQb2ludGVycyB0byB2YWxpZCBzbmFwc2hvdHMgKi8KLXN0YXRpYyBTbmFwc2hvdCBD dXJyZW50U25hcHNob3QgPSBOVUxMOwotc3RhdGljIFNuYXBzaG90IFNlY29uZGFyeVNuYXBz aG90ID0gTlVMTDsKLXN0YXRpYyBTbmFwc2hvdCBDYXRhbG9nU25hcHNob3QgPSBOVUxMOwot c3RhdGljIFNuYXBzaG90IEhpc3RvcmljU25hcHNob3QgPSBOVUxMOworc3RhdGljIE1WQ0NT bmFwc2hvdCBDdXJyZW50U25hcHNob3QgPSBOVUxMOworc3RhdGljIE1WQ0NTbmFwc2hvdCBT ZWNvbmRhcnlTbmFwc2hvdCA9IE5VTEw7CitzdGF0aWMgTVZDQ1NuYXBzaG90IENhdGFsb2dT bmFwc2hvdCA9IE5VTEw7CitzdGF0aWMgSGlzdG9yaWNNVkNDU25hcHNob3QgSGlzdG9yaWNT bmFwc2hvdCA9IE5VTEw7CiAKIC8qCiAgKiBUaGVzZSBhcmUgdXBkYXRlZCBieSBHZXRTbmFw c2hvdERhdGEuICBXZSBpbml0aWFsaXplIHRoZW0gdGhpcyB3YXkKQEAgLTE3MSw3ICsxNzEs NyBAQCBzdGF0aWMgSFRBQiAqdHVwbGVjaWRfZGF0YSA9IE5VTEw7CiAgKi8KIHR5cGVkZWYg c3RydWN0IEFjdGl2ZVNuYXBzaG90RWx0CiB7Ci0JU25hcHNob3QJYXNfc25hcDsKKwlNVkND U25hcHNob3QgYXNfc25hcDsKIAlpbnQJCQlhc19sZXZlbDsKIAlzdHJ1Y3QgQWN0aXZlU25h cHNob3RFbHQgKmFzX25leHQ7CiB9IEFjdGl2ZVNuYXBzaG90RWx0OwpAQCAtMTk2LDcgKzE5 Niw3IEBAIGJvb2wJCUZpcnN0U25hcHNob3RTZXQgPSBmYWxzZTsKICAqIEZpcnN0U25hcHNo b3RTZXQgaW4gY29tYmluYXRpb24gd2l0aCBJc29sYXRpb25Vc2VzWGFjdFNuYXBzaG90KCks IGJlY2F1c2UKICAqIEdVQyBtYXkgYmUgcmVzZXQgYmVmb3JlIHVzLCBjaGFuZ2luZyB0aGUg dmFsdWUgb2YgSXNvbGF0aW9uVXNlc1hhY3RTbmFwc2hvdC4KICAqLwotc3RhdGljIFNuYXBz aG90IEZpcnN0WGFjdFNuYXBzaG90ID0gTlVMTDsKK3N0YXRpYyBNVkNDU25hcHNob3QgRmly c3RYYWN0U25hcHNob3QgPSBOVUxMOwogCiAvKiBEZWZpbmUgcGF0aG5hbWUgb2YgZXhwb3J0 ZWQtc25hcHNob3QgZmlsZXMgKi8KICNkZWZpbmUgU05BUFNIT1RfRVhQT1JUX0RJUiAicGdf c25hcHNob3RzIgpAQCAtMjA1LDE2ICsyMDUsMTYgQEAgc3RhdGljIFNuYXBzaG90IEZpcnN0 WGFjdFNuYXBzaG90ID0gTlVMTDsKIHR5cGVkZWYgc3RydWN0IEV4cG9ydGVkU25hcHNob3QK IHsKIAljaGFyCSAgICpzbmFwZmlsZTsKLQlTbmFwc2hvdAlzbmFwc2hvdDsKKwlNVkNDU25h cHNob3Qgc25hcHNob3Q7CiB9IEV4cG9ydGVkU25hcHNob3Q7CiAKIC8qIEN1cnJlbnQgeGFj dCdzIGV4cG9ydGVkIHNuYXBzaG90cyAoYSBsaXN0IG9mIEV4cG9ydGVkU25hcHNob3Qgc3Ry dWN0cykgKi8KIHN0YXRpYyBMaXN0ICpleHBvcnRlZFNuYXBzaG90cyA9IE5JTDsKIAogLyog UHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zICovCi1zdGF0aWMgU25hcHNob3QgQ29w eVNuYXBzaG90KFNuYXBzaG90IHNuYXBzaG90KTsKK3N0YXRpYyBNVkNDU25hcHNob3QgQ29w eU1WQ0NTbmFwc2hvdChNVkNDU25hcHNob3Qgc25hcHNob3QpOwogc3RhdGljIHZvaWQgVW5y ZWdpc3RlclNuYXBzaG90Tm9Pd25lcihTbmFwc2hvdCBzbmFwc2hvdCk7Ci1zdGF0aWMgdm9p ZCBGcmVlU25hcHNob3QoU25hcHNob3Qgc25hcHNob3QpOworc3RhdGljIHZvaWQgRnJlZU1W Q0NTbmFwc2hvdChNVkNDU25hcHNob3Qgc25hcHNob3QpOwogc3RhdGljIHZvaWQgU25hcHNo b3RSZXNldFhtaW4odm9pZCk7CiAKIC8qIFJlc291cmNlT3duZXIgY2FsbGJhY2tzIHRvIHRy YWNrIHNuYXBzaG90IHJlZmVyZW5jZXMgKi8KQEAgLTMwOCw4ICszMDgsOSBAQCBHZXRUcmFu c2FjdGlvblNuYXBzaG90KHZvaWQpCiAJCQkJQ3VycmVudFNuYXBzaG90ID0gR2V0U2VyaWFs aXphYmxlVHJhbnNhY3Rpb25TbmFwc2hvdCgmQ3VycmVudFNuYXBzaG90RGF0YSk7CiAJCQll bHNlCiAJCQkJQ3VycmVudFNuYXBzaG90ID0gR2V0U25hcHNob3REYXRhKCZDdXJyZW50U25h cHNob3REYXRhKTsKKwogCQkJLyogTWFrZSBhIHNhdmVkIGNvcHkgKi8KLQkJCUN1cnJlbnRT bmFwc2hvdCA9IENvcHlTbmFwc2hvdChDdXJyZW50U25hcHNob3QpOworCQkJQ3VycmVudFNu YXBzaG90ID0gQ29weU1WQ0NTbmFwc2hvdChDdXJyZW50U25hcHNob3QpOwogCQkJRmlyc3RY YWN0U25hcHNob3QgPSBDdXJyZW50U25hcHNob3Q7CiAJCQkvKiBNYXJrIGl0IGFzICJyZWdp c3RlcmVkIiBpbiBGaXJzdFhhY3RTbmFwc2hvdCAqLwogCQkJRmlyc3RYYWN0U25hcHNob3Qt PnJlZ2RfY291bnQrKzsKQEAgLTMxOSwxOCArMzIwLDE4IEBAIEdldFRyYW5zYWN0aW9uU25h cHNob3Qodm9pZCkKIAkJCUN1cnJlbnRTbmFwc2hvdCA9IEdldFNuYXBzaG90RGF0YSgmQ3Vy cmVudFNuYXBzaG90RGF0YSk7CiAKIAkJRmlyc3RTbmFwc2hvdFNldCA9IHRydWU7Ci0JCXJl dHVybiBDdXJyZW50U25hcHNob3Q7CisJCXJldHVybiAoU25hcHNob3QpIEN1cnJlbnRTbmFw c2hvdDsKIAl9CiAKIAlpZiAoSXNvbGF0aW9uVXNlc1hhY3RTbmFwc2hvdCgpKQotCQlyZXR1 cm4gQ3VycmVudFNuYXBzaG90OworCQlyZXR1cm4gKFNuYXBzaG90KSBDdXJyZW50U25hcHNo b3Q7CiAKIAkvKiBEb24ndCBhbGxvdyBjYXRhbG9nIHNuYXBzaG90IHRvIGJlIG9sZGVyIHRo YW4geGFjdCBzbmFwc2hvdC4gKi8KIAlJbnZhbGlkYXRlQ2F0YWxvZ1NuYXBzaG90KCk7CiAK IAlDdXJyZW50U25hcHNob3QgPSBHZXRTbmFwc2hvdERhdGEoJkN1cnJlbnRTbmFwc2hvdERh dGEpOwogCi0JcmV0dXJuIEN1cnJlbnRTbmFwc2hvdDsKKwlyZXR1cm4gKFNuYXBzaG90KSBD dXJyZW50U25hcHNob3Q7CiB9CiAKIC8qCkBAIC0zNjEsNyArMzYyLDcgQEAgR2V0TGF0ZXN0 U25hcHNob3Qodm9pZCkKIAogCVNlY29uZGFyeVNuYXBzaG90ID0gR2V0U25hcHNob3REYXRh KCZTZWNvbmRhcnlTbmFwc2hvdERhdGEpOwogCi0JcmV0dXJuIFNlY29uZGFyeVNuYXBzaG90 OworCXJldHVybiAoU25hcHNob3QpIFNlY29uZGFyeVNuYXBzaG90OwogfQogCiAvKgpAQCAt MzgwLDcgKzM4MSw3IEBAIEdldENhdGFsb2dTbmFwc2hvdChPaWQgcmVsaWQpCiAJICogZmlu aXNoaW5nIGRlY29kaW5nLgogCSAqLwogCWlmIChIaXN0b3JpY1NuYXBzaG90QWN0aXZlKCkp Ci0JCXJldHVybiBIaXN0b3JpY1NuYXBzaG90OworCQlyZXR1cm4gKFNuYXBzaG90KSBIaXN0 b3JpY1NuYXBzaG90OwogCiAJcmV0dXJuIEdldE5vbkhpc3RvcmljQ2F0YWxvZ1NuYXBzaG90 KHJlbGlkKTsKIH0KQEAgLTQyNiw3ICs0MjcsNyBAQCBHZXROb25IaXN0b3JpY0NhdGFsb2dT bmFwc2hvdChPaWQgcmVsaWQpCiAJCXBhaXJpbmdoZWFwX2FkZCgmUmVnaXN0ZXJlZFNuYXBz aG90cywgJkNhdGFsb2dTbmFwc2hvdC0+cGhfbm9kZSk7CiAJfQogCi0JcmV0dXJuIENhdGFs b2dTbmFwc2hvdDsKKwlyZXR1cm4gKFNuYXBzaG90KSBDYXRhbG9nU25hcHNob3Q7CiB9CiAK IC8qCkBAIC00OTUsNyArNDk2LDcgQEAgU25hcHNob3RTZXRDb21tYW5kSWQoQ29tbWFuZElk IGN1cmNpZCkKICAqIGluIEdldFRyYW5zYWN0aW9uU25hcHNob3QuCiAgKi8KIHN0YXRpYyB2 b2lkCi1TZXRUcmFuc2FjdGlvblNuYXBzaG90KFNuYXBzaG90IHNvdXJjZXNuYXAsIFZpcnR1 YWxUcmFuc2FjdGlvbklkICpzb3VyY2V2eGlkLAorU2V0VHJhbnNhY3Rpb25TbmFwc2hvdChN VkNDU25hcHNob3Qgc291cmNlc25hcCwgVmlydHVhbFRyYW5zYWN0aW9uSWQgKnNvdXJjZXZ4 aWQsCiAJCQkJCSAgIGludCBzb3VyY2VwaWQsIFBHUFJPQyAqc291cmNlcHJvYykKIHsKIAkv KiBDYWxsZXIgc2hvdWxkIGhhdmUgY2hlY2tlZCB0aGlzIGFscmVhZHkgKi8KQEAgLTU3NCw3 ICs1NzUsNyBAQCBTZXRUcmFuc2FjdGlvblNuYXBzaG90KFNuYXBzaG90IHNvdXJjZXNuYXAs IFZpcnR1YWxUcmFuc2FjdGlvbklkICpzb3VyY2V2eGlkLAogCQkJU2V0U2VyaWFsaXphYmxl VHJhbnNhY3Rpb25TbmFwc2hvdChDdXJyZW50U25hcHNob3QsIHNvdXJjZXZ4aWQsCiAJCQkJ CQkJCQkJCSAgIHNvdXJjZXBpZCk7CiAJCS8qIE1ha2UgYSBzYXZlZCBjb3B5ICovCi0JCUN1 cnJlbnRTbmFwc2hvdCA9IENvcHlTbmFwc2hvdChDdXJyZW50U25hcHNob3QpOworCQlDdXJy ZW50U25hcHNob3QgPSBDb3B5TVZDQ1NuYXBzaG90KEN1cnJlbnRTbmFwc2hvdCk7CiAJCUZp cnN0WGFjdFNuYXBzaG90ID0gQ3VycmVudFNuYXBzaG90OwogCQkvKiBNYXJrIGl0IGFzICJy ZWdpc3RlcmVkIiBpbiBGaXJzdFhhY3RTbmFwc2hvdCAqLwogCQlGaXJzdFhhY3RTbmFwc2hv dC0+cmVnZF9jb3VudCsrOwpAQCAtNTg1LDI5ICs1ODYsMjcgQEAgU2V0VHJhbnNhY3Rpb25T bmFwc2hvdChTbmFwc2hvdCBzb3VyY2VzbmFwLCBWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqc291 cmNldnhpZCwKIH0KIAogLyoKLSAqIENvcHlTbmFwc2hvdAorICogQ29weU1WQ0NTbmFwc2hv dAogICoJCUNvcHkgdGhlIGdpdmVuIHNuYXBzaG90LgogICoKICAqIFRoZSBjb3B5IGlzIHBh bGxvYydkIGluIFRvcFRyYW5zYWN0aW9uQ29udGV4dCBhbmQgaGFzIGluaXRpYWwgcmVmY291 bnRzIHNldAogICogdG8gMC4gIFRoZSByZXR1cm5lZCBzbmFwc2hvdCBoYXMgdGhlIGNvcGll ZCBmbGFnIHNldC4KICAqLwotc3RhdGljIFNuYXBzaG90Ci1Db3B5U25hcHNob3QoU25hcHNo b3Qgc25hcHNob3QpCitzdGF0aWMgTVZDQ1NuYXBzaG90CitDb3B5TVZDQ1NuYXBzaG90KE1W Q0NTbmFwc2hvdCBzbmFwc2hvdCkKIHsKLQlTbmFwc2hvdAluZXdzbmFwOworCU1WQ0NTbmFw c2hvdCBuZXdzbmFwOwogCVNpemUJCXN1YnhpcG9mZjsKIAlTaXplCQlzaXplOwogCi0JQXNz ZXJ0KHNuYXBzaG90ICE9IEludmFsaWRTbmFwc2hvdCk7Ci0KIAkvKiBXZSBhbGxvY2F0ZSBh bnkgWElEIGFycmF5cyBuZWVkZWQgaW4gdGhlIHNhbWUgcGFsbG9jIGJsb2NrLiAqLwotCXNp emUgPSBzdWJ4aXBvZmYgPSBzaXplb2YoU25hcHNob3REYXRhKSArCisJc2l6ZSA9IHN1Ynhp cG9mZiA9IHNpemVvZihNVkNDU25hcHNob3REYXRhKSArCiAJCXNuYXBzaG90LT54Y250ICog c2l6ZW9mKFRyYW5zYWN0aW9uSWQpOwogCWlmIChzbmFwc2hvdC0+c3VieGNudCA+IDApCiAJ CXNpemUgKz0gc25hcHNob3QtPnN1YnhjbnQgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCk7CiAK LQluZXdzbmFwID0gKFNuYXBzaG90KSBNZW1vcnlDb250ZXh0QWxsb2MoVG9wVHJhbnNhY3Rp b25Db250ZXh0LCBzaXplKTsKLQltZW1jcHkobmV3c25hcCwgc25hcHNob3QsIHNpemVvZihT bmFwc2hvdERhdGEpKTsKKwluZXdzbmFwID0gKE1WQ0NTbmFwc2hvdCkgTWVtb3J5Q29udGV4 dEFsbG9jKFRvcFRyYW5zYWN0aW9uQ29udGV4dCwgc2l6ZSk7CisJbWVtY3B5KG5ld3NuYXAs IHNuYXBzaG90LCBzaXplb2YoTVZDQ1NuYXBzaG90RGF0YSkpOwogCiAJbmV3c25hcC0+cmVn ZF9jb3VudCA9IDA7CiAJbmV3c25hcC0+YWN0aXZlX2NvdW50ID0gMDsKQEAgLTY0NCwxMSAr NjQzLDExIEBAIENvcHlTbmFwc2hvdChTbmFwc2hvdCBzbmFwc2hvdCkKIH0KIAogLyoKLSAq IEZyZWVTbmFwc2hvdAorICogRnJlZU1WQ0NTbmFwc2hvdAogICoJCUZyZWUgdGhlIG1lbW9y eSBhc3NvY2lhdGVkIHdpdGggYSBzbmFwc2hvdC4KICAqLwogc3RhdGljIHZvaWQKLUZyZWVT bmFwc2hvdChTbmFwc2hvdCBzbmFwc2hvdCkKK0ZyZWVNVkNDU25hcHNob3QoTVZDQ1NuYXBz aG90IHNuYXBzaG90KQogewogCUFzc2VydChzbmFwc2hvdC0+cmVnZF9jb3VudCA9PSAwKTsK IAlBc3NlcnQoc25hcHNob3QtPmFjdGl2ZV9jb3VudCA9PSAwKTsKQEAgLTY2NCw2ICs2NjMs OCBAQCBGcmVlU25hcHNob3QoU25hcHNob3Qgc25hcHNob3QpCiAgKiBJZiB0aGUgcGFzc2Vk IHNuYXBzaG90IGlzIGEgc3RhdGljYWxseS1hbGxvY2F0ZWQgb25lLCBvciBpdCBpcyBwb3Nz aWJseQogICogc3ViamVjdCB0byBhIGZ1dHVyZSBjb21tYW5kIGNvdW50ZXIgdXBkYXRlLCBj cmVhdGUgYSBuZXcgbG9uZy1saXZlZCBjb3B5CiAgKiB3aXRoIGFjdGl2ZSByZWZjb3VudD0x LiAgT3RoZXJ3aXNlLCBvbmx5IGluY3JlbWVudCB0aGUgcmVmY291bnQuCisgKgorICogT25s eSByZWd1bGFyIE1WQ0Mgc25hcGhvdHMgY2FuIGJlIHVzZWQgYXMgdGhlIGFjdGl2ZSBzbmFw c2hvdC4KICAqLwogdm9pZAogUHVzaEFjdGl2ZVNuYXBzaG90KFNuYXBzaG90IHNuYXBzaG90 KQpAQCAtNjgyLDkgKzY4MywxMiBAQCBQdXNoQWN0aXZlU25hcHNob3QoU25hcHNob3Qgc25h cHNob3QpCiB2b2lkCiBQdXNoQWN0aXZlU25hcHNob3RXaXRoTGV2ZWwoU25hcHNob3Qgc25h cHNob3QsIGludCBzbmFwX2xldmVsKQogeworCU1WQ0NTbmFwc2hvdCBvcmlnc25hcDsKIAlB Y3RpdmVTbmFwc2hvdEVsdCAqbmV3YWN0aXZlOwogCi0JQXNzZXJ0KHNuYXBzaG90ICE9IElu dmFsaWRTbmFwc2hvdCk7CisJQXNzZXJ0KHNuYXBzaG90LT5zbmFwc2hvdF90eXBlID09IFNO QVBTSE9UX01WQ0MpOworCW9yaWdzbmFwID0gJnNuYXBzaG90LT5tdmNjOworCiAJQXNzZXJ0 KEFjdGl2ZVNuYXBzaG90ID09IE5VTEwgfHwgc25hcF9sZXZlbCA+PSBBY3RpdmVTbmFwc2hv dC0+YXNfbGV2ZWwpOwogCiAJbmV3YWN0aXZlID0gTWVtb3J5Q29udGV4dEFsbG9jKFRvcFRy YW5zYWN0aW9uQ29udGV4dCwgc2l6ZW9mKEFjdGl2ZVNuYXBzaG90RWx0KSk7CkBAIC02OTMs MTEgKzY5NywxMSBAQCBQdXNoQWN0aXZlU25hcHNob3RXaXRoTGV2ZWwoU25hcHNob3Qgc25h cHNob3QsIGludCBzbmFwX2xldmVsKQogCSAqIENoZWNraW5nIFNlY29uZGFyeVNuYXBzaG90 IGlzIHByb2JhYmx5IHVzZWxlc3MgaGVyZSwgYnV0IGl0IHNlZW1zCiAJICogYmV0dGVyIHRv IGJlIHN1cmUuCiAJICovCi0JaWYgKHNuYXBzaG90ID09IEN1cnJlbnRTbmFwc2hvdCB8fCBz bmFwc2hvdCA9PSBTZWNvbmRhcnlTbmFwc2hvdCB8fAotCQkhc25hcHNob3QtPmNvcGllZCkK LQkJbmV3YWN0aXZlLT5hc19zbmFwID0gQ29weVNuYXBzaG90KHNuYXBzaG90KTsKKwlpZiAo b3JpZ3NuYXAgPT0gQ3VycmVudFNuYXBzaG90IHx8IG9yaWdzbmFwID09IFNlY29uZGFyeVNu YXBzaG90IHx8CisJCSFvcmlnc25hcC0+Y29waWVkKQorCQluZXdhY3RpdmUtPmFzX3NuYXAg PSBDb3B5TVZDQ1NuYXBzaG90KG9yaWdzbmFwKTsKIAllbHNlCi0JCW5ld2FjdGl2ZS0+YXNf c25hcCA9IHNuYXBzaG90OworCQluZXdhY3RpdmUtPmFzX3NuYXAgPSBvcmlnc25hcDsKIAog CW5ld2FjdGl2ZS0+YXNfbmV4dCA9IEFjdGl2ZVNuYXBzaG90OwogCW5ld2FjdGl2ZS0+YXNf bGV2ZWwgPSBzbmFwX2xldmVsOwpAQCAtNzE4LDcgKzcyMiw4IEBAIFB1c2hBY3RpdmVTbmFw c2hvdFdpdGhMZXZlbChTbmFwc2hvdCBzbmFwc2hvdCwgaW50IHNuYXBfbGV2ZWwpCiB2b2lk CiBQdXNoQ29waWVkU25hcHNob3QoU25hcHNob3Qgc25hcHNob3QpCiB7Ci0JUHVzaEFjdGl2 ZVNuYXBzaG90KENvcHlTbmFwc2hvdChzbmFwc2hvdCkpOworCUFzc2VydChzbmFwc2hvdC0+ c25hcHNob3RfdHlwZSA9PSBTTkFQU0hPVF9NVkNDKTsKKwlQdXNoQWN0aXZlU25hcHNob3Qo KFNuYXBzaG90KSBDb3B5TVZDQ1NuYXBzaG90KCZzbmFwc2hvdC0+bXZjYykpOwogfQogCiAv KgpAQCAtNzcxLDcgKzc3Niw3IEBAIFBvcEFjdGl2ZVNuYXBzaG90KHZvaWQpCiAKIAlpZiAo QWN0aXZlU25hcHNob3QtPmFzX3NuYXAtPmFjdGl2ZV9jb3VudCA9PSAwICYmCiAJCUFjdGl2 ZVNuYXBzaG90LT5hc19zbmFwLT5yZWdkX2NvdW50ID09IDApCi0JCUZyZWVTbmFwc2hvdChB Y3RpdmVTbmFwc2hvdC0+YXNfc25hcCk7CisJCUZyZWVNVkNDU25hcHNob3QoQWN0aXZlU25h cHNob3QtPmFzX3NuYXApOwogCiAJcGZyZWUoQWN0aXZlU25hcHNob3QpOwogCUFjdGl2ZVNu YXBzaG90ID0gbmV3c3RhY2s7CkBAIC03ODgsNyArNzkzLDcgQEAgR2V0QWN0aXZlU25hcHNo b3Qodm9pZCkKIHsKIAlBc3NlcnQoQWN0aXZlU25hcHNob3QgIT0gTlVMTCk7CiAKLQlyZXR1 cm4gQWN0aXZlU25hcHNob3QtPmFzX3NuYXA7CisJcmV0dXJuIChTbmFwc2hvdCkgQWN0aXZl U25hcHNob3QtPmFzX3NuYXA7CiB9CiAKIC8qCkBAIC04MDUsNyArODEwLDggQEAgQWN0aXZl U25hcHNob3RTZXQodm9pZCkKICAqIFJlZ2lzdGVyU25hcHNob3QKICAqCQlSZWdpc3RlciBh IHNuYXBzaG90IGFzIGJlaW5nIGluIHVzZSBieSB0aGUgY3VycmVudCByZXNvdXJjZSBvd25l cgogICoKLSAqIElmIEludmFsaWRTbmFwc2hvdCBpcyBwYXNzZWQsIGl0IGlzIG5vdCByZWdp c3RlcmVkLgorICogT25seSByZWd1bGFyIE1WQ0Mgc25hcGhvdHMgYW5kICJoaXN0b3JpYyIg TVZDQyBzbmFwc2hvdHMgY2FuIGJlIHJlZ2lzdGVyZWQuCisgKiBJbnZhbGlkU25hcHNob3Qg aXMgYWxzbyBhY2NlcHRlZCwgYXMgYSBuby1vcC4KICAqLwogU25hcHNob3QKIFJlZ2lzdGVy U25hcHNob3QoU25hcHNob3Qgc25hcHNob3QpCkBAIC04MjEsMjUgKzgyNywzOSBAQCBSZWdp c3RlclNuYXBzaG90KFNuYXBzaG90IHNuYXBzaG90KQogICoJCUFzIGFib3ZlLCBidXQgdXNl IHRoZSBzcGVjaWZpZWQgcmVzb3VyY2Ugb3duZXIKICAqLwogU25hcHNob3QKLVJlZ2lzdGVy U25hcHNob3RPbk93bmVyKFNuYXBzaG90IHNuYXBzaG90LCBSZXNvdXJjZU93bmVyIG93bmVy KQorUmVnaXN0ZXJTbmFwc2hvdE9uT3duZXIoU25hcHNob3Qgb3JpZ19zbmFwc2hvdCwgUmVz b3VyY2VPd25lciBvd25lcikKIHsKLQlTbmFwc2hvdAlzbmFwOworCU1WQ0NTbmFwc2hvdCBz bmFwc2hvdDsKIAotCWlmIChzbmFwc2hvdCA9PSBJbnZhbGlkU25hcHNob3QpCisJaWYgKG9y aWdfc25hcHNob3QgPT0gSW52YWxpZFNuYXBzaG90KQogCQlyZXR1cm4gSW52YWxpZFNuYXBz aG90OwogCisJaWYgKG9yaWdfc25hcHNob3QtPnNuYXBzaG90X3R5cGUgPT0gU05BUFNIT1Rf SElTVE9SSUNfTVZDQykKKwl7CisJCUhpc3RvcmljTVZDQ1NuYXBzaG90IGhpc3Rvcmljc25h cCA9ICZvcmlnX3NuYXBzaG90LT5oaXN0b3JpY19tdmNjOworCisJCVJlc291cmNlT3duZXJF bmxhcmdlKG93bmVyKTsKKwkJaGlzdG9yaWNzbmFwLT5yZWdkX2NvdW50Kys7CisJCVJlc291 cmNlT3duZXJSZW1lbWJlclNuYXBzaG90KG93bmVyLCAoU25hcHNob3QpIGhpc3Rvcmljc25h cCk7CisKKwkJcmV0dXJuIChTbmFwc2hvdCkgaGlzdG9yaWNzbmFwOworCX0KKworCUFzc2Vy dChvcmlnX3NuYXBzaG90LT5zbmFwc2hvdF90eXBlID09IFNOQVBTSE9UX01WQ0MpOworCXNu YXBzaG90ID0gJm9yaWdfc25hcHNob3QtPm12Y2M7CisKIAkvKiBTdGF0aWMgc25hcHNob3Q/ ICBDcmVhdGUgYSBwZXJzaXN0ZW50IGNvcHkgKi8KLQlzbmFwID0gc25hcHNob3QtPmNvcGll ZCA/IHNuYXBzaG90IDogQ29weVNuYXBzaG90KHNuYXBzaG90KTsKKwlzbmFwc2hvdCA9IHNu YXBzaG90LT5jb3BpZWQgPyBzbmFwc2hvdCA6IENvcHlNVkNDU25hcHNob3Qoc25hcHNob3Qp OwogCiAJLyogYW5kIHRlbGwgcmVzb3duZXIuYyBhYm91dCBpdCAqLwogCVJlc291cmNlT3du ZXJFbmxhcmdlKG93bmVyKTsKLQlzbmFwLT5yZWdkX2NvdW50Kys7Ci0JUmVzb3VyY2VPd25l clJlbWVtYmVyU25hcHNob3Qob3duZXIsIHNuYXApOworCXNuYXBzaG90LT5yZWdkX2NvdW50 Kys7CisJUmVzb3VyY2VPd25lclJlbWVtYmVyU25hcHNob3Qob3duZXIsIChTbmFwc2hvdCkg c25hcHNob3QpOwogCi0JaWYgKHNuYXAtPnJlZ2RfY291bnQgPT0gMSkKLQkJcGFpcmluZ2hl YXBfYWRkKCZSZWdpc3RlcmVkU25hcHNob3RzLCAmc25hcC0+cGhfbm9kZSk7CisJaWYgKHNu YXBzaG90LT5yZWdkX2NvdW50ID09IDEpCisJCXBhaXJpbmdoZWFwX2FkZCgmUmVnaXN0ZXJl ZFNuYXBzaG90cywgJnNuYXBzaG90LT5waF9ub2RlKTsKIAotCXJldHVybiBzbmFwOworCXJl dHVybiAoU25hcHNob3QpIHNuYXBzaG90OwogfQogCiAvKgpAQCAtODc1LDE4ICs4OTUsNDEg QEAgVW5yZWdpc3RlclNuYXBzaG90RnJvbU93bmVyKFNuYXBzaG90IHNuYXBzaG90LCBSZXNv dXJjZU93bmVyIG93bmVyKQogc3RhdGljIHZvaWQKIFVucmVnaXN0ZXJTbmFwc2hvdE5vT3du ZXIoU25hcHNob3Qgc25hcHNob3QpCiB7Ci0JQXNzZXJ0KHNuYXBzaG90LT5yZWdkX2NvdW50 ID4gMCk7Ci0JQXNzZXJ0KCFwYWlyaW5naGVhcF9pc19lbXB0eSgmUmVnaXN0ZXJlZFNuYXBz aG90cykpOworCWlmIChzbmFwc2hvdC0+c25hcHNob3RfdHlwZSA9PSBTTkFQU0hPVF9NVkND KQorCXsKKwkJTVZDQ1NuYXBzaG90IG12Y2NzbmFwID0gJnNuYXBzaG90LT5tdmNjOworCisJ CUFzc2VydChtdmNjc25hcC0+cmVnZF9jb3VudCA+IDApOworCQlBc3NlcnQoIXBhaXJpbmdo ZWFwX2lzX2VtcHR5KCZSZWdpc3RlcmVkU25hcHNob3RzKSk7CiAKLQlzbmFwc2hvdC0+cmVn ZF9jb3VudC0tOwotCWlmIChzbmFwc2hvdC0+cmVnZF9jb3VudCA9PSAwKQotCQlwYWlyaW5n aGVhcF9yZW1vdmUoJlJlZ2lzdGVyZWRTbmFwc2hvdHMsICZzbmFwc2hvdC0+cGhfbm9kZSk7 CisJCW12Y2NzbmFwLT5yZWdkX2NvdW50LS07CisJCWlmIChtdmNjc25hcC0+cmVnZF9jb3Vu dCA9PSAwKQorCQkJcGFpcmluZ2hlYXBfcmVtb3ZlKCZSZWdpc3RlcmVkU25hcHNob3RzLCAm bXZjY3NuYXAtPnBoX25vZGUpOwogCi0JaWYgKHNuYXBzaG90LT5yZWdkX2NvdW50ID09IDAg JiYgc25hcHNob3QtPmFjdGl2ZV9jb3VudCA9PSAwKQorCQlpZiAobXZjY3NuYXAtPnJlZ2Rf Y291bnQgPT0gMCAmJiBtdmNjc25hcC0+YWN0aXZlX2NvdW50ID09IDApCisJCXsKKwkJCUZy ZWVNVkNDU25hcHNob3QobXZjY3NuYXApOworCQkJU25hcHNob3RSZXNldFhtaW4oKTsKKwkJ fQorCX0KKwllbHNlIGlmIChzbmFwc2hvdC0+c25hcHNob3RfdHlwZSA9PSBTTkFQU0hPVF9I SVNUT1JJQ19NVkNDKQogCXsKLQkJRnJlZVNuYXBzaG90KHNuYXBzaG90KTsKLQkJU25hcHNo b3RSZXNldFhtaW4oKTsKKwkJSGlzdG9yaWNNVkNDU25hcHNob3QgaGlzdG9yaWNzbmFwID0g JnNuYXBzaG90LT5oaXN0b3JpY19tdmNjOworCisJCS8qCisJCSAqIEhpc3RvcmljIHNuYXBz aG90cyBkb24ndCByZWx5IG9uIHRoZSByZXNvdXJjZSBvd25lciBtYWNoaW5lcnkgZm9yCisJ CSAqIGNsZWFudXAsIHRoZSBzbmFwYnVpbGQuYyBtYWNoaW5lcnkgZW5zdXJlcyB0aGF0IHdo ZW5ldmVyIGEgaGlzdG9yaWMKKwkJICogc25hcHNob3QgaXMgaW4gdXNlLCBpdCBoYXMgYSBu b24temVybyByZWZjb3VudC4gIFJlZ2lzdHJhdGlvbiBpcworCQkgKiBvbmx5IHN1cHBvcnRl ZCBzbyB0aGF0IHRoZSBjYWxsZXJzIGRvbid0IG5lZWQgdG8gdHJlYXQgcmVndWxhciBNVkND CisJCSAqIGNhdGFsb2cgc25hcHNob3RzIGFuZCBoaXN0b3JpYyBzbmFwc2hvdHMgZGlmZmVy ZW50bHkuCisJCSAqLworCQlBc3NlcnQoaGlzdG9yaWNzbmFwLT5yZWZjb3VudCA+IDApOwor CisJCUFzc2VydChoaXN0b3JpY3NuYXAtPnJlZ2RfY291bnQgPiAwKTsKKwkJaGlzdG9yaWNz bmFwLT5yZWdkX2NvdW50LS07CiAJfQorCWVsc2UKKwkJZWxvZyhFUlJPUiwgInJlZ2lzdGVy ZWQgc25hcHNob3QgaGFzIHVuZXhwZWN0ZWQgdHlwZSIpOwogfQogCiAvKgpAQCAtODk2LDgg KzkzOSw4IEBAIFVucmVnaXN0ZXJTbmFwc2hvdE5vT3duZXIoU25hcHNob3Qgc25hcHNob3Qp CiBzdGF0aWMgaW50CiB4bWluX2NtcChjb25zdCBwYWlyaW5naGVhcF9ub2RlICphLCBjb25z dCBwYWlyaW5naGVhcF9ub2RlICpiLCB2b2lkICphcmcpCiB7Ci0JY29uc3QgU25hcHNob3RE YXRhICphc25hcCA9IHBhaXJpbmdoZWFwX2NvbnN0X2NvbnRhaW5lcihTbmFwc2hvdERhdGEs IHBoX25vZGUsIGEpOwotCWNvbnN0IFNuYXBzaG90RGF0YSAqYnNuYXAgPSBwYWlyaW5naGVh cF9jb25zdF9jb250YWluZXIoU25hcHNob3REYXRhLCBwaF9ub2RlLCBiKTsKKwljb25zdCBN VkNDU25hcHNob3REYXRhICphc25hcCA9IHBhaXJpbmdoZWFwX2NvbnN0X2NvbnRhaW5lcihN VkNDU25hcHNob3REYXRhLCBwaF9ub2RlLCBhKTsKKwljb25zdCBNVkNDU25hcHNob3REYXRh ICpic25hcCA9IHBhaXJpbmdoZWFwX2NvbnN0X2NvbnRhaW5lcihNVkNDU25hcHNob3REYXRh LCBwaF9ub2RlLCBiKTsKIAogCWlmIChUcmFuc2FjdGlvbklkUHJlY2VkZXMoYXNuYXAtPnht aW4sIGJzbmFwLT54bWluKSkKIAkJcmV0dXJuIDE7CkBAIC05MjMsNyArOTY2LDcgQEAgeG1p bl9jbXAoY29uc3QgcGFpcmluZ2hlYXBfbm9kZSAqYSwgY29uc3QgcGFpcmluZ2hlYXBfbm9k ZSAqYiwgdm9pZCAqYXJnKQogc3RhdGljIHZvaWQKIFNuYXBzaG90UmVzZXRYbWluKHZvaWQp CiB7Ci0JU25hcHNob3QJbWluU25hcHNob3Q7CisJTVZDQ1NuYXBzaG90IG1pblNuYXBzaG90 OwogCiAJaWYgKEFjdGl2ZVNuYXBzaG90ICE9IE5VTEwpCiAJCXJldHVybjsKQEAgLTkzNCw3 ICs5NzcsNyBAQCBTbmFwc2hvdFJlc2V0WG1pbih2b2lkKQogCQlyZXR1cm47CiAJfQogCi0J bWluU25hcHNob3QgPSBwYWlyaW5naGVhcF9jb250YWluZXIoU25hcHNob3REYXRhLCBwaF9u b2RlLAorCW1pblNuYXBzaG90ID0gcGFpcmluZ2hlYXBfY29udGFpbmVyKE1WQ0NTbmFwc2hv dERhdGEsIHBoX25vZGUsCiAJCQkJCQkJCQkJcGFpcmluZ2hlYXBfZmlyc3QoJlJlZ2lzdGVy ZWRTbmFwc2hvdHMpKTsKIAogCWlmIChUcmFuc2FjdGlvbklkUHJlY2VkZXMoTXlQcm9jLT54 bWluLCBtaW5TbmFwc2hvdC0+eG1pbikpCkBAIC05ODQsNyArMTAyNyw3IEBAIEF0U3ViQWJv cnRfU25hcHNob3QoaW50IGxldmVsKQogCiAJCWlmIChBY3RpdmVTbmFwc2hvdC0+YXNfc25h cC0+YWN0aXZlX2NvdW50ID09IDAgJiYKIAkJCUFjdGl2ZVNuYXBzaG90LT5hc19zbmFwLT5y ZWdkX2NvdW50ID09IDApCi0JCQlGcmVlU25hcHNob3QoQWN0aXZlU25hcHNob3QtPmFzX3Nu YXApOworCQkJRnJlZU1WQ0NTbmFwc2hvdChBY3RpdmVTbmFwc2hvdC0+YXNfc25hcCk7CiAK IAkJLyogYW5kIGZyZWUgdGhlIHN0YWNrIGVsZW1lbnQgKi8KIAkJcGZyZWUoQWN0aXZlU25h cHNob3QpOwpAQCAtMTAwNiw3ICsxMDQ5LDcgQEAgQXRFT1hhY3RfU25hcHNob3QoYm9vbCBp c0NvbW1pdCwgYm9vbCByZXNldFhtaW4pCiAJICogSW4gdHJhbnNhY3Rpb24tc25hcHNob3Qg bW9kZSB3ZSBtdXN0IHJlbGVhc2Ugb3VyIHByaXZhdGVseS1tYW5hZ2VkCiAJICogcmVmZXJl bmNlIHRvIHRoZSB0cmFuc2FjdGlvbiBzbmFwc2hvdC4gIFdlIG11c3QgcmVtb3ZlIGl0IGZy b20KIAkgKiBSZWdpc3RlcmVkU25hcHNob3RzIHRvIGtlZXAgdGhlIGNoZWNrIGJlbG93IGhh cHB5LiAgQnV0IHdlIGRvbid0IGJvdGhlcgotCSAqIHRvIGRvIEZyZWVTbmFwc2hvdCwgZm9y IHR3byByZWFzb25zOiB0aGUgbWVtb3J5IHdpbGwgZ28gYXdheSB3aXRoCisJICogdG8gZG8g RnJlZU1WQ0NTbmFwc2hvdCwgZm9yIHR3byByZWFzb25zOiB0aGUgbWVtb3J5IHdpbGwgZ28g YXdheSB3aXRoCiAJICogVG9wVHJhbnNhY3Rpb25Db250ZXh0IGFueXdheSwgYW5kIGlmIHNv bWVvbmUgaGFzIGxlZnQgdGhlIHNuYXBzaG90CiAJICogc3RhY2tlZCBhcyBhY3RpdmUsIHdl IGRvbid0IHdhbnQgdGhlIGNvZGUgYmVsb3cgdG8gYmUgY2hhc2luZyB0aHJvdWdoIGEKIAkg KiBkYW5nbGluZyBwb2ludGVyLgpAQCAtMTA5OSw3ICsxMTQyLDcgQEAgQXRFT1hhY3RfU25h cHNob3QoYm9vbCBpc0NvbW1pdCwgYm9vbCByZXNldFhtaW4pCiAgKgkJc25hcHNob3QuCiAg Ki8KIGNoYXIgKgotRXhwb3J0U25hcHNob3QoU25hcHNob3Qgc25hcHNob3QpCitFeHBvcnRT bmFwc2hvdChNVkNDU25hcHNob3Qgc25hcHNob3QpCiB7CiAJVHJhbnNhY3Rpb25JZCB0b3BY aWQ7CiAJVHJhbnNhY3Rpb25JZCAqY2hpbGRyZW47CkBAIC0xMTYzLDcgKzEyMDYsNyBAQCBF eHBvcnRTbmFwc2hvdChTbmFwc2hvdCBzbmFwc2hvdCkKIAkgKiBlbnN1cmUgdGhhdCB0aGUg c25hcHNob3QncyB4bWluIGlzIGhvbm9yZWQgZm9yIHRoZSByZXN0IG9mIHRoZQogCSAqIHRy YW5zYWN0aW9uLgogCSAqLwotCXNuYXBzaG90ID0gQ29weVNuYXBzaG90KHNuYXBzaG90KTsK KwlzbmFwc2hvdCA9IENvcHlNVkNDU25hcHNob3Qoc25hcHNob3QpOwogCiAJb2xkY3h0ID0g TWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcFRyYW5zYWN0aW9uQ29udGV4dCk7CiAJZXNuYXAg PSAoRXhwb3J0ZWRTbmFwc2hvdCAqKSBwYWxsb2Moc2l6ZW9mKEV4cG9ydGVkU25hcHNob3Qp KTsKQEAgLTEyODAsNyArMTMyMyw3IEBAIHBnX2V4cG9ydF9zbmFwc2hvdChQR19GVU5DVElP Tl9BUkdTKQogewogCWNoYXIJICAgKnNuYXBzaG90TmFtZTsKIAotCXNuYXBzaG90TmFtZSA9 IEV4cG9ydFNuYXBzaG90KEdldEFjdGl2ZVNuYXBzaG90KCkpOworCXNuYXBzaG90TmFtZSA9 IEV4cG9ydFNuYXBzaG90KChNVkNDU25hcHNob3QpIEdldEFjdGl2ZVNuYXBzaG90KCkpOwog CVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0KHNuYXBzaG90TmFtZSkpOwogfQog CkBAIC0xMzg0LDcgKzE0MjcsNyBAQCBJbXBvcnRTbmFwc2hvdChjb25zdCBjaGFyICppZHN0 cikKIAlPaWQJCQlzcmNfZGJpZDsKIAlpbnQJCQlzcmNfaXNvbGV2ZWw7CiAJYm9vbAkJc3Jj X3JlYWRvbmx5OwotCVNuYXBzaG90RGF0YSBzbmFwc2hvdDsKKwlNVkNDU25hcHNob3REYXRh IHNuYXBzaG90OwogCiAJLyoKIAkgKiBNdXN0IGJlIGF0IHRvcCBsZXZlbCBvZiBhIGZyZXNo IHRyYW5zYWN0aW9uLiAgTm90ZSBpbiBwYXJ0aWN1bGFyIHRoYXQKQEAgLTE2NTMsNyArMTY5 Niw3IEBAIEhhdmVSZWdpc3RlcmVkT3JBY3RpdmVTbmFwc2hvdCh2b2lkKQogICogTmVlZGVk IGZvciBsb2dpY2FsIGRlY29kaW5nLgogICovCiB2b2lkCi1TZXR1cEhpc3RvcmljU25hcHNo b3QoU25hcHNob3QgaGlzdG9yaWNfc25hcHNob3QsIEhUQUIgKnR1cGxlY2lkcykKK1NldHVw SGlzdG9yaWNTbmFwc2hvdChIaXN0b3JpY01WQ0NTbmFwc2hvdCBoaXN0b3JpY19zbmFwc2hv dCwgSFRBQiAqdHVwbGVjaWRzKQogewogCUFzc2VydChoaXN0b3JpY19zbmFwc2hvdCAhPSBO VUxMKTsKIApAQCAtMTY5NiwxMSArMTczOSwxMCBAQCBIaXN0b3JpY1NuYXBzaG90R2V0VHVw bGVDaWRzKHZvaWQpCiAgKiBTZXJpYWxpemVkU25hcHNob3REYXRhLgogICovCiBTaXplCi1F c3RpbWF0ZVNuYXBzaG90U3BhY2UoU25hcHNob3Qgc25hcHNob3QpCitFc3RpbWF0ZVNuYXBz aG90U3BhY2UoTVZDQ1NuYXBzaG90IHNuYXBzaG90KQogewogCVNpemUJCXNpemU7CiAKLQlB c3NlcnQoc25hcHNob3QgIT0gSW52YWxpZFNuYXBzaG90KTsKIAlBc3NlcnQoc25hcHNob3Qt PnNuYXBzaG90X3R5cGUgPT0gU05BUFNIT1RfTVZDQyk7CiAKIAkvKiBXZSBhbGxvY2F0ZSBh bnkgWElEIGFycmF5cyBuZWVkZWQgaW4gdGhlIHNhbWUgcGFsbG9jIGJsb2NrLiAqLwpAQCAt MTcyMCw3ICsxNzYyLDcgQEAgRXN0aW1hdGVTbmFwc2hvdFNwYWNlKFNuYXBzaG90IHNuYXBz aG90KQogICoJCW1lbW9yeSBsb2NhdGlvbiBhdCBzdGFydF9hZGRyZXNzLgogICovCiB2b2lk Ci1TZXJpYWxpemVTbmFwc2hvdChTbmFwc2hvdCBzbmFwc2hvdCwgY2hhciAqc3RhcnRfYWRk cmVzcykKK1NlcmlhbGl6ZVNuYXBzaG90KE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCwgY2hhciAq c3RhcnRfYWRkcmVzcykKIHsKIAlTZXJpYWxpemVkU25hcHNob3REYXRhIHNlcmlhbGl6ZWRf c25hcHNob3Q7CiAKQEAgLTE3NzYsMTIgKzE4MTgsMTIgQEAgU2VyaWFsaXplU25hcHNob3Qo U25hcHNob3Qgc25hcHNob3QsIGNoYXIgKnN0YXJ0X2FkZHJlc3MpCiAgKiBUaGUgY29weSBp cyBwYWxsb2MnZCBpbiBUb3BUcmFuc2FjdGlvbkNvbnRleHQgYW5kIGhhcyBpbml0aWFsIHJl ZmNvdW50cyBzZXQKICAqIHRvIDAuICBUaGUgcmV0dXJuZWQgc25hcHNob3QgaGFzIHRoZSBj b3BpZWQgZmxhZyBzZXQuCiAgKi8KLVNuYXBzaG90CitNVkNDU25hcHNob3QKIFJlc3RvcmVT bmFwc2hvdChjaGFyICpzdGFydF9hZGRyZXNzKQogewogCVNlcmlhbGl6ZWRTbmFwc2hvdERh dGEgc2VyaWFsaXplZF9zbmFwc2hvdDsKIAlTaXplCQlzaXplOwotCVNuYXBzaG90CXNuYXBz aG90OworCU1WQ0NTbmFwc2hvdCBzbmFwc2hvdDsKIAlUcmFuc2FjdGlvbklkICpzZXJpYWxp emVkX3hpZHM7CiAKIAltZW1jcHkoJnNlcmlhbGl6ZWRfc25hcHNob3QsIHN0YXJ0X2FkZHJl c3MsCkBAIC0xNzkwLDEyICsxODMyLDEyIEBAIFJlc3RvcmVTbmFwc2hvdChjaGFyICpzdGFy dF9hZGRyZXNzKQogCQkoc3RhcnRfYWRkcmVzcyArIHNpemVvZihTZXJpYWxpemVkU25hcHNo b3REYXRhKSk7CiAKIAkvKiBXZSBhbGxvY2F0ZSBhbnkgWElEIGFycmF5cyBuZWVkZWQgaW4g dGhlIHNhbWUgcGFsbG9jIGJsb2NrLiAqLwotCXNpemUgPSBzaXplb2YoU25hcHNob3REYXRh KQorCXNpemUgPSBzaXplb2YoTVZDQ1NuYXBzaG90RGF0YSkKIAkJKyBzZXJpYWxpemVkX3Nu YXBzaG90LnhjbnQgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCkKIAkJKyBzZXJpYWxpemVkX3Nu YXBzaG90LnN1YnhjbnQgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCk7CiAKIAkvKiBDb3B5IGFs bCByZXF1aXJlZCBmaWVsZHMgKi8KLQlzbmFwc2hvdCA9IChTbmFwc2hvdCkgTWVtb3J5Q29u dGV4dEFsbG9jKFRvcFRyYW5zYWN0aW9uQ29udGV4dCwgc2l6ZSk7CisJc25hcHNob3QgPSAo TVZDQ1NuYXBzaG90KSBNZW1vcnlDb250ZXh0QWxsb2MoVG9wVHJhbnNhY3Rpb25Db250ZXh0 LCBzaXplKTsKIAlzbmFwc2hvdC0+c25hcHNob3RfdHlwZSA9IFNOQVBTSE9UX01WQ0M7CiAJ c25hcHNob3QtPnhtaW4gPSBzZXJpYWxpemVkX3NuYXBzaG90LnhtaW47CiAJc25hcHNob3Qt PnhtYXggPSBzZXJpYWxpemVkX3NuYXBzaG90LnhtYXg7CkBAIC0xODQwLDcgKzE4ODIsNyBA QCBSZXN0b3JlU25hcHNob3QoY2hhciAqc3RhcnRfYWRkcmVzcykKICAqIHRoZSBkZWNsYXJh dGlvbiBmb3IgUEdQUk9DLgogICovCiB2b2lkCi1SZXN0b3JlVHJhbnNhY3Rpb25TbmFwc2hv dChTbmFwc2hvdCBzbmFwc2hvdCwgdm9pZCAqc291cmNlX3BncHJvYykKK1Jlc3RvcmVUcmFu c2FjdGlvblNuYXBzaG90KE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCwgdm9pZCAqc291cmNlX3Bn cHJvYykKIHsKIAlTZXRUcmFuc2FjdGlvblNuYXBzaG90KHNuYXBzaG90LCBOVUxMLCBJbnZh bGlkUGlkLCBzb3VyY2VfcGdwcm9jKTsKIH0KQEAgLTE4NTYsNyArMTg5OCw3IEBAIFJlc3Rv cmVUcmFuc2FjdGlvblNuYXBzaG90KFNuYXBzaG90IHNuYXBzaG90LCB2b2lkICpzb3VyY2Vf cGdwcm9jKQogICogWElEIGNvdWxkIG5vdCBiZSBvdXJzIGFueXdheS4KICAqLwogYm9vbAot WGlkSW5NVkNDU25hcHNob3QoVHJhbnNhY3Rpb25JZCB4aWQsIFNuYXBzaG90IHNuYXBzaG90 KQorWGlkSW5NVkNDU25hcHNob3QoVHJhbnNhY3Rpb25JZCB4aWQsIE1WQ0NTbmFwc2hvdCBz bmFwc2hvdCkKIHsKIAkvKgogCSAqIE1ha2UgYSBxdWljayByYW5nZSBjaGVjayB0byBlbGlt aW5hdGUgbW9zdCBYSURzIHdpdGhvdXQgbG9va2luZyBhdCB0aGUKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0u aAppbmRleCAxNjQwZDljMzJmNy4uM2QzZWExMDlhNGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgK QEAgLTQzMSw3ICs0MzEsNyBAQCBleHRlcm4gYm9vbCBIZWFwVHVwbGVJc1N1cmVseURlYWQo SGVhcFR1cGxlIGh0dXAsCiAgKi8KIHN0cnVjdCBIVEFCOwogZXh0ZXJuIGJvb2wgUmVzb2x2 ZUNtaW5DbWF4RHVyaW5nRGVjb2Rpbmcoc3RydWN0IEhUQUIgKnR1cGxlY2lkX2RhdGEsCi0J CQkJCQkJCQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkJCQkgIEhpc3RvcmljTVZD Q1NuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkJCSAgSGVhcFR1cGxlIGh0dXAsCiAJCQkJ CQkJCQkJICBCdWZmZXIgYnVmZmVyLAogCQkJCQkJCQkJCSAgQ29tbWFuZElkICpjbWluLCBD b21tYW5kSWQgKmNtYXgpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNj YW4uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggYjVlMGZiMzg2YzAu LjI2MjZmMjk5NmQ4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5o CisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTM0LDcgKzM0LDcgQEAg dHlwZWRlZiBzdHJ1Y3QgVGFibGVTY2FuRGVzY0RhdGEKIHsKIAkvKiBzY2FuIHBhcmFtZXRl cnMgKi8KIAlSZWxhdGlvbglyc19yZDsJCQkvKiBoZWFwIHJlbGF0aW9uIGRlc2NyaXB0b3Ig Ki8KLQlzdHJ1Y3QgU25hcHNob3REYXRhICpyc19zbmFwc2hvdDsJLyogc25hcHNob3QgdG8g c2VlICovCisJdW5pb24gU25hcHNob3REYXRhICpyc19zbmFwc2hvdDsJLyogc25hcHNob3Qg dG8gc2VlICovCiAJaW50CQkJcnNfbmtleXM7CQkvKiBudW1iZXIgb2Ygc2NhbiBrZXlzICov CiAJc3RydWN0IFNjYW5LZXlEYXRhICpyc19rZXk7IC8qIGFycmF5IG9mIHNjYW4ga2V5IGRl c2NyaXB0b3JzICovCiAKQEAgLTEzNSw3ICsxMzUsNyBAQCB0eXBlZGVmIHN0cnVjdCBJbmRl eFNjYW5EZXNjRGF0YQogCS8qIHNjYW4gcGFyYW1ldGVycyAqLwogCVJlbGF0aW9uCWhlYXBS ZWxhdGlvbjsJLyogaGVhcCByZWxhdGlvbiBkZXNjcmlwdG9yLCBvciBOVUxMICovCiAJUmVs YXRpb24JaW5kZXhSZWxhdGlvbjsJLyogaW5kZXggcmVsYXRpb24gZGVzY3JpcHRvciAqLwot CXN0cnVjdCBTbmFwc2hvdERhdGEgKnhzX3NuYXBzaG90OwkvKiBzbmFwc2hvdCB0byBzZWUg Ki8KKwl1bmlvbiBTbmFwc2hvdERhdGEgKnhzX3NuYXBzaG90OwkvKiBzbmFwc2hvdCB0byBz ZWUgKi8KIAlpbnQJCQludW1iZXJPZktleXM7CS8qIG51bWJlciBvZiBpbmRleCBxdWFsaWZp ZXIgY29uZGl0aW9ucyAqLwogCWludAkJCW51bWJlck9mT3JkZXJCeXM7CS8qIG51bWJlciBv ZiBvcmRlcmluZyBvcGVyYXRvcnMgKi8KIAlzdHJ1Y3QgU2NhbktleURhdGEgKmtleURhdGE7 CS8qIGFycmF5IG9mIGluZGV4IHF1YWxpZmllciBkZXNjcmlwdG9ycyAqLwpAQCAtMjEwLDcg KzIxMCw3IEBAIHR5cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0YQogCVJlbGF0aW9uCWly ZWw7CQkJLyogTlVMTCBpZiBkb2luZyBoZWFwIHNjYW4gKi8KIAlzdHJ1Y3QgVGFibGVTY2Fu RGVzY0RhdGEgKnNjYW47IC8qIG9ubHkgdmFsaWQgaW4gc3RvcmFnZS1zY2FuIGNhc2UgKi8K IAlzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEgKmlzY2FuOwkvKiBvbmx5IHZhbGlkIGluIGlu ZGV4LXNjYW4gY2FzZSAqLwotCXN0cnVjdCBTbmFwc2hvdERhdGEgKnNuYXBzaG90OwkvKiBz bmFwc2hvdCB0byB1bnJlZ2lzdGVyIGF0IGVuZCBvZiBzY2FuICovCisJdW5pb24gU25hcHNo b3REYXRhICpzbmFwc2hvdDsJLyogc25hcHNob3QgdG8gdW5yZWdpc3RlciBhdCBlbmQgb2Yg c2NhbiAqLwogCXN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqc2xvdDsKIH0JCQlTeXNTY2FuRGVz Y0RhdGE7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJi dWZmZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAppbmRl eCAzYmUwY2JkN2ViZS4uOGJmNzJjNjRjOTQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Jl cGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9yZW9yZGVyYnVmZmVyLmgKQEAgLTEyNyw3ICsxMjcsNyBAQCB0eXBlZGVmIHN0cnVjdCBS ZW9yZGVyQnVmZmVyQ2hhbmdlCiAJCX0JCQltc2c7CiAKIAkJLyogTmV3IHNuYXBzaG90LCBz ZXQgd2hlbiBhY3Rpb24gPT0gKl9JTlRFUk5BTF9TTkFQU0hPVCAqLwotCQlTbmFwc2hvdAlz bmFwc2hvdDsKKwkJSGlzdG9yaWNNVkNDU25hcHNob3Qgc25hcHNob3Q7CiAKIAkJLyoKIAkJ ICogTmV3IGNvbW1hbmQgaWQgZm9yIGV4aXN0aW5nIHNuYXBzaG90IGluIGEgY2F0YWxvZyBj aGFuZ2luZyB0eC4gU2V0CkBAIC0zNTksNyArMzU5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUmVv cmRlckJ1ZmZlclRYTgogCSAqIHRyYW5zYWN0aW9uIG1vZGlmaWVzIHRoZSBjYXRhbG9nLCBv ciBhbm90aGVyIGNhdGFsb2ctbW9kaWZ5aW5nCiAJICogdHJhbnNhY3Rpb24gY29tbWl0cy4K IAkgKi8KLQlTbmFwc2hvdAliYXNlX3NuYXBzaG90OworCUhpc3RvcmljTVZDQ1NuYXBzaG90 IGJhc2Vfc25hcHNob3Q7CiAJWExvZ1JlY1B0cgliYXNlX3NuYXBzaG90X2xzbjsKIAlkbGlz dF9ub2RlCWJhc2Vfc25hcHNob3Rfbm9kZTsgLyogbGluayBpbiB0eG5zX2J5X2Jhc2Vfc25h cHNob3RfbHNuICovCiAKQEAgLTM2Nyw3ICszNjcsNyBAQCB0eXBlZGVmIHN0cnVjdCBSZW9y ZGVyQnVmZmVyVFhOCiAJICogU25hcHNob3QvQ0lEIGZyb20gdGhlIHByZXZpb3VzIHN0cmVh bWluZyBydW4uIE9ubHkgdmFsaWQgZm9yIGFscmVhZHkKIAkgKiBzdHJlYW1lZCB0cmFuc2Fj dGlvbnMgKE5VTEwvSW52YWxpZENvbW1hbmRJZCBvdGhlcndpc2UpLgogCSAqLwotCVNuYXBz aG90CXNuYXBzaG90X25vdzsKKwlIaXN0b3JpY01WQ0NTbmFwc2hvdCBzbmFwc2hvdF9ub3c7 CiAJQ29tbWFuZElkCWNvbW1hbmRfaWQ7CiAKIAkvKgpAQCAtNzAzLDcgKzcwMyw3IEBAIGV4 dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZUNoYW5nZShSZW9yZGVyQnVmZmVyICpyYiwg VHJhbnNhY3Rpb25JZCB4aWQsCiAJCQkJCQkJCQkgWExvZ1JlY1B0ciBsc24sIFJlb3JkZXJC dWZmZXJDaGFuZ2UgKmNoYW5nZSwKIAkJCQkJCQkJCSBib29sIHRvYXN0X2luc2VydCk7CiBl eHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJi LCBUcmFuc2FjdGlvbklkIHhpZCwKLQkJCQkJCQkJCSAgU25hcHNob3Qgc25hcCwgWExvZ1Jl Y1B0ciBsc24sCisJCQkJCQkJCQkgIEhpc3RvcmljTVZDQ1NuYXBzaG90IHNuYXAsIFhMb2dS ZWNQdHIgbHNuLAogCQkJCQkJCQkJICBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIg KnByZWZpeCwKIAkJCQkJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1l c3NhZ2UpOwogZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckNvbW1pdChSZW9yZGVyQnVmZmVy ICpyYiwgVHJhbnNhY3Rpb25JZCB4aWQsCkBAIC03MjcsOSArNzI3LDkgQEAgZXh0ZXJuIHZv aWQgUmVvcmRlckJ1ZmZlckZvcmdldChSZW9yZGVyQnVmZmVyICpyYiwgVHJhbnNhY3Rpb25J ZCB4aWQsIFhMb2dSZWNQdHIKIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJJbnZhbGlkYXRl KFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24p OwogCiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyU2V0QmFzZVNuYXBzaG90KFJlb3JkZXJC dWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKLQkJCQkJCQkJCQkgWExvZ1JlY1B0ciBs c24sIFNuYXBzaG90IHNuYXApOworCQkJCQkJCQkJCSBYTG9nUmVjUHRyIGxzbiwgSGlzdG9y aWNNVkNDU25hcHNob3Qgc25hcCk7CiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyQWRkU25h cHNob3QoUmVvcmRlckJ1ZmZlciAqcmIsIFRyYW5zYWN0aW9uSWQgeGlkLAotCQkJCQkJCQkJ IFhMb2dSZWNQdHIgbHNuLCBTbmFwc2hvdCBzbmFwKTsKKwkJCQkJCQkJCSBYTG9nUmVjUHRy IGxzbiwgSGlzdG9yaWNNVkNDU25hcHNob3Qgc25hcCk7CiBleHRlcm4gdm9pZCBSZW9yZGVy QnVmZmVyQWRkTmV3Q29tbWFuZElkKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklk IHhpZCwKIAkJCQkJCQkJCQkgWExvZ1JlY1B0ciBsc24sIENvbW1hbmRJZCBjaWQpOwogZXh0 ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlckFkZE5ld1R1cGxlQ2lkcyhSZW9yZGVyQnVmZmVyICpy YiwgVHJhbnNhY3Rpb25JZCB4aWQsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNh dGlvbi9zbmFwYnVpbGQuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3NuYXBidWlsZC5o CmluZGV4IDQ0MDMxZGNmNmUzLi41OTMwZmZiNTVhOCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vc25hcGJ1aWxkLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vc25hcGJ1aWxkLmgKQEAgLTcwLDE1ICs3MCwxNSBAQCBleHRlcm4gU25hcEJ1aWxkICpB bGxvY2F0ZVNuYXBzaG90QnVpbGRlcihzdHJ1Y3QgUmVvcmRlckJ1ZmZlciAqcmVvcmRlciwK IAkJCQkJCQkJCQkgIFhMb2dSZWNQdHIgdHdvX3BoYXNlX2F0KTsKIGV4dGVybiB2b2lkIEZy ZWVTbmFwc2hvdEJ1aWxkZXIoU25hcEJ1aWxkICpidWlsZGVyKTsKIAotZXh0ZXJuIHZvaWQg U25hcEJ1aWxkU25hcERlY1JlZmNvdW50KFNuYXBzaG90IHNuYXApOworZXh0ZXJuIHZvaWQg U25hcEJ1aWxkU25hcERlY1JlZmNvdW50KEhpc3RvcmljTVZDQ1NuYXBzaG90IHNuYXApOwog Ci1leHRlcm4gU25hcHNob3QgU25hcEJ1aWxkSW5pdGlhbFNuYXBzaG90KFNuYXBCdWlsZCAq YnVpbGRlcik7CitleHRlcm4gTVZDQ1NuYXBzaG90IFNuYXBCdWlsZEluaXRpYWxTbmFwc2hv dChTbmFwQnVpbGQgKmJ1aWxkZXIpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKlNuYXBCdWlsZEV4 cG9ydFNuYXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlcik7CiBleHRlcm4gdm9pZCBTbmFwQnVp bGRDbGVhckV4cG9ydGVkU25hcHNob3Qodm9pZCk7CiBleHRlcm4gdm9pZCBTbmFwQnVpbGRS ZXNldEV4cG9ydGVkU25hcHNob3RTdGF0ZSh2b2lkKTsKIAogZXh0ZXJuIFNuYXBCdWlsZFN0 YXRlIFNuYXBCdWlsZEN1cnJlbnRTdGF0ZShTbmFwQnVpbGQgKmJ1aWxkZXIpOwotZXh0ZXJu IFNuYXBzaG90IFNuYXBCdWlsZEdldE9yQnVpbGRTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxk ZXIpOworZXh0ZXJuIEhpc3RvcmljTVZDQ1NuYXBzaG90IFNuYXBCdWlsZEdldE9yQnVpbGRT bmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIpOwogCiBleHRlcm4gYm9vbCBTbmFwQnVpbGRY YWN0TmVlZHNTa2lwKFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBwdHIpOwogZXh0 ZXJuIFhMb2dSZWNQdHIgU25hcEJ1aWxkR2V0VHdvUGhhc2VBdChTbmFwQnVpbGQgKmJ1aWxk ZXIpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vc25hcGJ1aWxkX2lu dGVybmFsLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbmFwYnVpbGRfaW50ZXJuYWwu aAppbmRleCAzYjkxNWRjODc5My4uOWJlZDIwZWZhMzEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL3JlcGxpY2F0aW9uL3NuYXBidWlsZF9pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRl L3JlcGxpY2F0aW9uL3NuYXBidWlsZF9pbnRlcm5hbC5oCkBAIC03NCw3ICs3NCw3IEBAIHN0 cnVjdCBTbmFwQnVpbGQKIAkvKgogCSAqIFNuYXBzaG90IHRoYXQncyB2YWxpZCB0byBzZWUg dGhlIGNhdGFsb2cgc3RhdGUgc2VlbiBhdCB0aGlzIG1vbWVudC4KIAkgKi8KLQlTbmFwc2hv dAlzbmFwc2hvdDsKKwlIaXN0b3JpY01WQ0NTbmFwc2hvdCBzbmFwc2hvdDsKIAogCS8qCiAJ ICogTFNOIG9mIHRoZSBsYXN0IGxvY2F0aW9uIHdlIGFyZSBzdXJlIGEgc25hcHNob3QgaGFz IGJlZW4gc2VyaWFsaXplZCB0by4KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv cHJlZGljYXRlLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3ByZWRpY2F0ZS5oCmluZGV4IDI2 N2Q1ZDkwZTk0Li42YTc4ZGZlYWM5NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcmVkaWNhdGUuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3ByZWRpY2F0ZS5oCkBA IC00Nyw4ICs0Nyw4IEBAIGV4dGVybiB2b2lkIENoZWNrUG9pbnRQcmVkaWNhdGUodm9pZCk7 CiBleHRlcm4gYm9vbCBQYWdlSXNQcmVkaWNhdGVMb2NrZWQoUmVsYXRpb24gcmVsYXRpb24s IEJsb2NrTnVtYmVyIGJsa25vKTsKIAogLyogcHJlZGljYXRlIGxvY2sgbWFpbnRlbmFuY2Ug Ki8KLWV4dGVybiBTbmFwc2hvdCBHZXRTZXJpYWxpemFibGVUcmFuc2FjdGlvblNuYXBzaG90 KFNuYXBzaG90IHNuYXBzaG90KTsKLWV4dGVybiB2b2lkIFNldFNlcmlhbGl6YWJsZVRyYW5z YWN0aW9uU25hcHNob3QoU25hcHNob3Qgc25hcHNob3QsCitleHRlcm4gTVZDQ1NuYXBzaG90 IEdldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3QoTVZDQ1NuYXBzaG90IHNuYXBz aG90KTsKK2V4dGVybiB2b2lkIFNldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3Qo TVZDQ1NuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkJCQkgICBWaXJ0dWFsVHJhbnNhY3Rp b25JZCAqc291cmNldnhpZCwKIAkJCQkJCQkJCQkJICAgaW50IHNvdXJjZXBpZCk7CiBleHRl cm4gdm9pZCBSZWdpc3RlclByZWRpY2F0ZUxvY2tpbmdYaWQoVHJhbnNhY3Rpb25JZCB4aWQp OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaCBiL3NyYy9p bmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKaW5kZXggZWYwYjczM2ViZTguLjdmNTcyN2My NTg2IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJheS5oCisrKyBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmgKQEAgLTQ0LDcgKzQ0LDcgQEAgZXh0 ZXJuIHZvaWQgS25vd25Bc3NpZ25lZFRyYW5zYWN0aW9uSWRzSWRsZU1haW50ZW5hbmNlKHZv aWQpOwogZXh0ZXJuIGludAlHZXRNYXhTbmFwc2hvdFhpZENvdW50KHZvaWQpOwogZXh0ZXJu IGludAlHZXRNYXhTbmFwc2hvdFN1YnhpZENvdW50KHZvaWQpOwogCi1leHRlcm4gU25hcHNo b3QgR2V0U25hcHNob3REYXRhKFNuYXBzaG90IHNuYXBzaG90KTsKK2V4dGVybiBNVkNDU25h cHNob3QgR2V0U25hcHNob3REYXRhKE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCk7CiAKIGV4dGVy biBib29sIFByb2NBcnJheUluc3RhbGxJbXBvcnRlZFhtaW4oVHJhbnNhY3Rpb25JZCB4bWlu LAogCQkJCQkJCQkJCSBWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqc291cmNldnhpZCk7CmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9zbmFwbWdyLmggYi9zcmMvaW5jbHVkZS91dGls cy9zbmFwbWdyLmgKaW5kZXggZDM0NmJlNzE2NDIuLjFmNjI3ZmY5NjZkIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS91dGlscy9zbmFwbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMv c25hcG1nci5oCkBAIC00OSw3ICs0OSw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCBTbmFwc2hv dERhdGEgU25hcHNob3RUb2FzdERhdGE7CiAgKi8KICNkZWZpbmUgSW5pdE5vblZhY3V1bWFi bGVTbmFwc2hvdChzbmFwc2hvdGRhdGEsIHZpc3Rlc3RwKSAgXAogCSgoc25hcHNob3RkYXRh KS5zbmFwc2hvdF90eXBlID0gU05BUFNIT1RfTk9OX1ZBQ1VVTUFCTEUsIFwKLQkgKHNuYXBz aG90ZGF0YSkudmlzdGVzdCA9ICh2aXN0ZXN0cCkpCisJIChzbmFwc2hvdGRhdGEpLm5vbnZh Y3V1bWFibGUudmlzdGVzdCA9ICh2aXN0ZXN0cCkpCiAKIC8qIFRoaXMgbWFjcm8gZW5jb2Rl cyB0aGUga25vd2xlZGdlIG9mIHdoaWNoIHNuYXBzaG90cyBhcmUgTVZDQy1zYWZlICovCiAj ZGVmaW5lIElzTVZDQ1NuYXBzaG90KHNuYXBzaG90KSAgXApAQCAtODksNyArODksNyBAQCBl eHRlcm4gdm9pZCBXYWl0Rm9yT2xkZXJTbmFwc2hvdHMoVHJhbnNhY3Rpb25JZCBsaW1pdFht aW4sIGJvb2wgcHJvZ3Jlc3MpOwogZXh0ZXJuIGJvb2wgVGhlcmVBcmVOb1ByaW9yUmVnaXN0 ZXJlZFNuYXBzaG90cyh2b2lkKTsKIGV4dGVybiBib29sIEhhdmVSZWdpc3RlcmVkT3JBY3Rp dmVTbmFwc2hvdCh2b2lkKTsKIAotZXh0ZXJuIGNoYXIgKkV4cG9ydFNuYXBzaG90KFNuYXBz aG90IHNuYXBzaG90KTsKK2V4dGVybiBjaGFyICpFeHBvcnRTbmFwc2hvdChNVkNDU25hcHNo b3Qgc25hcHNob3QpOwogCiAvKgogICogVGhlc2UgbGl2ZSBpbiBwcm9jYXJyYXkuYyBiZWNh dXNlIHRoZXkncmUgaW50aW1hdGVseSBsaW5rZWQgdG8gdGhlCkBAIC0xMDUsMTggKzEwNSwx OCBAQCBleHRlcm4gYm9vbCBHbG9iYWxWaXNDaGVja1JlbW92YWJsZUZ1bGxYaWQoUmVsYXRp b24gcmVsLCBGdWxsVHJhbnNhY3Rpb25JZCBmeGlkKQogLyoKICAqIFV0aWxpdHkgZnVuY3Rp b25zIGZvciBpbXBsZW1lbnRpbmcgdmlzaWJpbGl0eSByb3V0aW5lcyBpbiB0YWJsZSBBTXMu CiAgKi8KLWV4dGVybiBib29sIFhpZEluTVZDQ1NuYXBzaG90KFRyYW5zYWN0aW9uSWQgeGlk LCBTbmFwc2hvdCBzbmFwc2hvdCk7CitleHRlcm4gYm9vbCBYaWRJbk1WQ0NTbmFwc2hvdChU cmFuc2FjdGlvbklkIHhpZCwgTVZDQ1NuYXBzaG90IHNuYXBzaG90KTsKIAogLyogU3VwcG9y dCBmb3IgY2F0YWxvZyB0aW1ldHJhdmVsIGZvciBsb2dpY2FsIGRlY29kaW5nICovCiBzdHJ1 Y3QgSFRBQjsKIGV4dGVybiBzdHJ1Y3QgSFRBQiAqSGlzdG9yaWNTbmFwc2hvdEdldFR1cGxl Q2lkcyh2b2lkKTsKLWV4dGVybiB2b2lkIFNldHVwSGlzdG9yaWNTbmFwc2hvdChTbmFwc2hv dCBoaXN0b3JpY19zbmFwc2hvdCwgc3RydWN0IEhUQUIgKnR1cGxlY2lkcyk7CitleHRlcm4g dm9pZCBTZXR1cEhpc3RvcmljU25hcHNob3QoSGlzdG9yaWNNVkNDU25hcHNob3QgaGlzdG9y aWNfc25hcHNob3QsIHN0cnVjdCBIVEFCICp0dXBsZWNpZHMpOwogZXh0ZXJuIHZvaWQgVGVh cmRvd25IaXN0b3JpY1NuYXBzaG90KGJvb2wgaXNfZXJyb3IpOwogZXh0ZXJuIGJvb2wgSGlz dG9yaWNTbmFwc2hvdEFjdGl2ZSh2b2lkKTsKIAotZXh0ZXJuIFNpemUgRXN0aW1hdGVTbmFw c2hvdFNwYWNlKFNuYXBzaG90IHNuYXBzaG90KTsKLWV4dGVybiB2b2lkIFNlcmlhbGl6ZVNu YXBzaG90KFNuYXBzaG90IHNuYXBzaG90LCBjaGFyICpzdGFydF9hZGRyZXNzKTsKLWV4dGVy biBTbmFwc2hvdCBSZXN0b3JlU25hcHNob3QoY2hhciAqc3RhcnRfYWRkcmVzcyk7Ci1leHRl cm4gdm9pZCBSZXN0b3JlVHJhbnNhY3Rpb25TbmFwc2hvdChTbmFwc2hvdCBzbmFwc2hvdCwg dm9pZCAqc291cmNlX3BncHJvYyk7CitleHRlcm4gU2l6ZSBFc3RpbWF0ZVNuYXBzaG90U3Bh Y2UoTVZDQ1NuYXBzaG90IHNuYXBzaG90KTsKK2V4dGVybiB2b2lkIFNlcmlhbGl6ZVNuYXBz aG90KE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCwgY2hhciAqc3RhcnRfYWRkcmVzcyk7CitleHRl cm4gTVZDQ1NuYXBzaG90IFJlc3RvcmVTbmFwc2hvdChjaGFyICpzdGFydF9hZGRyZXNzKTsK K2V4dGVybiB2b2lkIFJlc3RvcmVUcmFuc2FjdGlvblNuYXBzaG90KE1WQ0NTbmFwc2hvdCBz bmFwc2hvdCwgdm9pZCAqc291cmNlX3BncHJvYyk7CiAKICNlbmRpZgkJCQkJCQkvKiBTTkFQ TUdSX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3NuYXBzaG90LmggYi9z cmMvaW5jbHVkZS91dGlscy9zbmFwc2hvdC5oCmluZGV4IDBlNTQ2ZWMxNDk3Li45M2MxZjUx Nzg0ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvc25hcHNob3QuaAorKysgYi9z cmMvaW5jbHVkZS91dGlscy9zbmFwc2hvdC5oCkBAIC0xNyw3ICsxNyw3IEBACiAKIAogLyoK LSAqIFRoZSBkaWZmZXJlbnQgc25hcHNob3QgdHlwZXMuICBXZSB1c2UgU25hcHNob3REYXRh IHN0cnVjdHVyZXMgdG8gcmVwcmVzZW50CisgKiBUaGUgZGlmZmVyZW50IHNuYXBzaG90IHR5 cGVzLiAgV2UgdXNlIHRoZSBTbmFwc2hvdERhdGEgdW5pb24gdG8gcmVwcmVzZW50CiAgKiBi b3RoICJyZWd1bGFyIiAoTVZDQykgc25hcHNob3RzIGFuZCAic3BlY2lhbCIgc25hcHNob3Rz IHRoYXQgaGF2ZSBub24tTVZDQwogICogc2VtYW50aWNzLiAgVGhlIHNwZWNpZmljIHNlbWFu dGljcyBvZiBhIHNuYXBzaG90IGFyZSBlbmNvZGVkIGJ5IGl0cyB0eXBlLgogICoKQEAgLTI3 LDYgKzI3LDkgQEAKICAqIFRoZSByZWFzb24gdGhlIHNuYXBzaG90IHR5cGUgcmF0aGVyIHRo YW4gYSBjYWxsYmFjayBhcyBpdCB1c2VkIHRvIGJlIGlzCiAgKiB0aGF0IHRoYXQgYWxsb3dz IHRvIHVzZSB0aGUgc2FtZSBzbmFwc2hvdCBmb3IgZGlmZmVyZW50IHRhYmxlIEFNcyB3aXRo b3V0CiAgKiBoYXZpbmcgb25lIGNhbGxiYWNrIHBlciBBTS4KKyAqCisgKiBUaGUgZXhlY3V0 b3IgZGVhbHMgd2l0aCBNVkNDIHNuYXBzaG90cywgYnV0IHRoZSB0YWJsZSBBTSBhbmQgc29t ZSBvdGhlcgorICogcGFydHMgb2YgdGhlIHN5c3RlbSBhbHNvIHN1cHBvcnQgdGhlIHNwZWNp YWwgc25hcHNob3RzLgogICovCiB0eXBlZGVmIGVudW0gU25hcHNob3RUeXBlCiB7CkBAIC0x MDAsNyArMTAzLDkgQEAgdHlwZWRlZiBlbnVtIFNuYXBzaG90VHlwZQogCS8qCiAJICogQSB0 dXBsZSBpcyB2aXNpYmxlIGlmZiBpdCBmb2xsb3dzIHRoZSBydWxlcyBvZiBTTkFQU0hPVF9N VkNDLCBidXQKIAkgKiBzdXBwb3J0cyBiZWluZyBjYWxsZWQgaW4gdGltZXRyYXZlbCBjb250 ZXh0IChmb3IgZGVjb2RpbmcgY2F0YWxvZwotCSAqIGNvbnRlbnRzIGluIHRoZSBjb250ZXh0 IG9mIGxvZ2ljYWwgZGVjb2RpbmcpLgorCSAqIGNvbnRlbnRzIGluIHRoZSBjb250ZXh0IG9m IGxvZ2ljYWwgZGVjb2RpbmcpLiAgQSBoaXN0b3JpYyBNVkNDIHNuYXBzaG90CisJICogc2hv dWxkIG9ubHkgYmUgdXNlZCBvbiBjYXRhbG9nIHRhYmxlcywgYXMgd2Ugb25seSB0cmFjayBY SURzIHRoYXQKKwkgKiBtb2RpZnkgY2F0YWxvZ3MgZHVyaW5nIGxvZ2ljYWwgZGVjb2Rpbmcu CiAJICovCiAJU05BUFNIT1RfSElTVE9SSUNfTVZDQywKIApAQCAtMTE0LDM3ICsxMTksMTgg QEAgdHlwZWRlZiBlbnVtIFNuYXBzaG90VHlwZQogCVNOQVBTSE9UX05PTl9WQUNVVU1BQkxF LAogfSBTbmFwc2hvdFR5cGU7CiAKLXR5cGVkZWYgc3RydWN0IFNuYXBzaG90RGF0YSAqU25h cHNob3Q7Ci0KLSNkZWZpbmUgSW52YWxpZFNuYXBzaG90CQkoKFNuYXBzaG90KSBOVUxMKQot CiAvKgotICogU3RydWN0IHJlcHJlc2VudGluZyBhbGwga2luZCBvZiBwb3NzaWJsZSBzbmFw c2hvdHMuCisgKiBTdHJ1Y3QgcmVwcmVzZW50aW5nIGEgbm9ybWFsIE1WQ0Mgc25hcHNob3Qu CiAgKgotICogVGhlcmUgYXJlIHNldmVyYWwgZGlmZmVyZW50IGtpbmRzIG9mIHNuYXBzaG90 czoKLSAqICogTm9ybWFsIE1WQ0Mgc25hcHNob3RzCi0gKiAqIE1WQ0Mgc25hcHNob3RzIHRh a2VuIGR1cmluZyByZWNvdmVyeSAoaW4gSG90LVN0YW5kYnkgbW9kZSkKLSAqICogSGlzdG9y aWMgTVZDQyBzbmFwc2hvdHMgdXNlZCBkdXJpbmcgbG9naWNhbCBkZWNvZGluZwotICogKiBz bmFwc2hvdHMgcGFzc2VkIHRvIEhlYXBUdXBsZVNhdGlzZmllc0RpcnR5KCkKLSAqICogc25h cHNob3RzIHBhc3NlZCB0byBIZWFwVHVwbGVTYXRpc2ZpZXNOb25WYWN1dW1hYmxlKCkKLSAq ICogc25hcHNob3RzIHVzZWQgZm9yIFNhdGlzZmllc0FueSwgVG9hc3QsIFNlbGYgd2hlcmUg bm8gbWVtYmVycyBhcmUKLSAqCSBhY2Nlc3NlZC4KLSAqCi0gKiBUT0RPOiBJdCdzIHByb2Jh Ymx5IGEgZ29vZCBpZGVhIHRvIHNwbGl0IHRoaXMgc3RydWN0IHVzaW5nIGEgTm9kZVRhZwot ICogc2ltaWxhciB0byBob3cgcGFyc2VyIGFuZCBleGVjdXRvciBub2RlcyBhcmUgaGFuZGxl ZCwgd2l0aCBvbmUgdHlwZSBmb3IKLSAqIGVhY2ggZGlmZmVyZW50IGtpbmQgb2Ygc25hcHNo b3QgdG8gYXZvaWQgb3ZlcmxvYWRpbmcgdGhlIG1lYW5pbmcgb2YKLSAqIGluZGl2aWR1YWwg ZmllbGRzLgorICogTVZDQyBzbmFwc2hvdHMgY29tZSBpbiB0d28gdmFyaWFudHM6IHRob3Nl IHRha2VuIGR1cmluZyByZWNvdmVyeSBpbiBob3QKKyAqIHN0YW5kYnkgbW9kZSwgYW5kICJu b3JtYWwiIE1WQ0Mgc25hcHNob3RzLiAgVGhleSBhcmUgZGlzdGluZ3Vpc2hlZCBieQorICog dGFrZW5EdXJpbmdSZWNvdmVyeS4KICAqLwotdHlwZWRlZiBzdHJ1Y3QgU25hcHNob3REYXRh Cit0eXBlZGVmIHN0cnVjdCBNVkNDU25hcHNob3REYXRhCiB7Ci0JU25hcHNob3RUeXBlIHNu YXBzaG90X3R5cGU7IC8qIHR5cGUgb2Ygc25hcHNob3QgKi8KKwlTbmFwc2hvdFR5cGUgc25h cHNob3RfdHlwZTsgLyogdHlwZSBvZiBzbmFwc2hvdCwgbXVzdCBiZSBmaXJzdCAqLwogCiAJ LyoKLQkgKiBUaGUgcmVtYWluaW5nIGZpZWxkcyBhcmUgdXNlZCBvbmx5IGZvciBNVkNDIHNu YXBzaG90cywgYW5kIGFyZSBub3JtYWxseQotCSAqIGp1c3QgemVyb2VzIGluIHNwZWNpYWwg c25hcHNob3RzLiAgKEJ1dCB4bWluIGFuZCB4bWF4IGFyZSB1c2VkCi0JICogc3BlY2lhbGx5 IGJ5IEhlYXBUdXBsZVNhdGlzZmllc0RpcnR5LCBhbmQgeG1pbiBpcyB1c2VkIHNwZWNpYWxs eSBieQotCSAqIEhlYXBUdXBsZVNhdGlzZmllc05vblZhY3V1bWFibGUuKQotCSAqCiAJICog QW4gTVZDQyBzbmFwc2hvdCBjYW4gbmV2ZXIgc2VlIHRoZSBlZmZlY3RzIG9mIFhJRHMgPj0g eG1heC4gSXQgY2FuIHNlZQogCSAqIHRoZSBlZmZlY3RzIG9mIGFsbCBvbGRlciBYSURzIGV4 Y2VwdCB0aG9zZSBsaXN0ZWQgaW4gdGhlIHNuYXBzaG90LiB4bWluCiAJICogaXMgc3RvcmVk IGFzIGFuIG9wdGltaXphdGlvbiB0byBhdm9pZCBuZWVkaW5nIHRvIHNlYXJjaCB0aGUgWElE IGFycmF5cwpAQCAtMTU0LDEwICsxNDAsOCBAQCB0eXBlZGVmIHN0cnVjdCBTbmFwc2hvdERh dGEKIAlUcmFuc2FjdGlvbklkIHhtYXg7CQkJLyogYWxsIFhJRCA+PSB4bWF4IGFyZSBpbnZp c2libGUgdG8gbWUgKi8KIAogCS8qCi0JICogRm9yIG5vcm1hbCBNVkNDIHNuYXBzaG90IHRo aXMgY29udGFpbnMgdGhlIGFsbCB4YWN0IElEcyB0aGF0IGFyZSBpbgotCSAqIHByb2dyZXNz LCB1bmxlc3MgdGhlIHNuYXBzaG90IHdhcyB0YWtlbiBkdXJpbmcgcmVjb3ZlcnkgaW4gd2hp Y2ggY2FzZQotCSAqIGl0J3MgZW1wdHkuIEZvciBoaXN0b3JpYyBNVkNDIHNuYXBzaG90cywg dGhlIG1lYW5pbmcgaXMgaW52ZXJ0ZWQsIGkuZS4KLQkgKiBpdCBjb250YWlucyAqY29tbWl0 dGVkKiB0cmFuc2FjdGlvbnMgYmV0d2VlbiB4bWluIGFuZCB4bWF4LgorCSAqIHhpcCBjb250 YWlucyB0aGUgYWxsIHhhY3QgSURzIHRoYXQgYXJlIGluIHByb2dyZXNzLCB1bmxlc3MgdGhl IHNuYXBzaG90CisJICogd2FzIHRha2VuIGR1cmluZyByZWNvdmVyeSBpbiB3aGljaCBjYXNl IGl0J3MgZW1wdHkuCiAJICoKIAkgKiBub3RlOiBhbGwgaWRzIGluIHhpcFtdIHNhdGlzZnkg eG1pbiA8PSB4aXBbaV0gPCB4bWF4CiAJICovCkBAIC0xNjUsMTAgKzE0OSw4IEBAIHR5cGVk ZWYgc3RydWN0IFNuYXBzaG90RGF0YQogCXVpbnQzMgkJeGNudDsJCQkvKiAjIG9mIHhhY3Qg aWRzIGluIHhpcFtdICovCiAKIAkvKgotCSAqIEZvciBub24taGlzdG9yaWMgTVZDQyBzbmFw c2hvdHMsIHRoaXMgY29udGFpbnMgc3VieGFjdCBJRHMgdGhhdCBhcmUgaW4KLQkgKiBwcm9n cmVzcyAoYW5kIG90aGVyIHRyYW5zYWN0aW9ucyB0aGF0IGFyZSBpbiBwcm9ncmVzcyBpZiB0 YWtlbiBkdXJpbmcKLQkgKiByZWNvdmVyeSkuIEZvciBoaXN0b3JpYyBzbmFwc2hvdCBpdCBj b250YWlucyAqYWxsKiB4aWRzIGFzc2lnbmVkIHRvIHRoZQotCSAqIHJlcGxheWVkIHRyYW5z YWN0aW9uLCBpbmNsdWRpbmcgdGhlIHRvcGxldmVsIHhpZC4KKwkgKiBzdWJ4aXAgY29udGFp bnMgc3VieGFjdCBJRHMgdGhhdCBhcmUgaW4gcHJvZ3Jlc3MgKGFuZCBvdGhlcgorCSAqIHRy YW5zYWN0aW9ucyB0aGF0IGFyZSBpbiBwcm9ncmVzcyBpZiB0YWtlbiBkdXJpbmcgcmVjb3Zl cnkpLgogCSAqCiAJICogbm90ZTogYWxsIGlkcyBpbiBzdWJ4aXBbXSBhcmUgPj0geG1pbiwg YnV0IHdlIGRvbid0IGJvdGhlciBmaWx0ZXJpbmcKIAkgKiBvdXQgYW55IHRoYXQgYXJlID49 IHhtYXgKQEAgLTE4MiwxOCArMTY0LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgU25hcHNob3REYXRh CiAKIAlDb21tYW5kSWQJY3VyY2lkOwkJCS8qIGluIG15IHhhY3QsIENJRCA8IGN1cmNpZCBh cmUgdmlzaWJsZSAqLwogCi0JLyoKLQkgKiBBbiBleHRyYSByZXR1cm4gdmFsdWUgZm9yIEhl YXBUdXBsZVNhdGlzZmllc0RpcnR5LCBub3QgdXNlZCBpbiBNVkNDCi0JICogc25hcHNob3Rz LgotCSAqLwotCXVpbnQzMgkJc3BlY3VsYXRpdmVUb2tlbjsKLQotCS8qCi0JICogRm9yIFNO QVBTSE9UX05PTl9WQUNVVU1BQkxFIChhbmQgaG9wZWZ1bGx5IG1vcmUgaW4gdGhlIGZ1dHVy ZSkgdGhpcyBpcwotCSAqIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgcm93IGNvdWxkIGJl IHZhY3V1bWVkLgotCSAqLwotCXN0cnVjdCBHbG9iYWxWaXNTdGF0ZSAqdmlzdGVzdDsKLQog CS8qCiAJICogQm9vay1rZWVwaW5nIGluZm9ybWF0aW9uLCB1c2VkIGJ5IHRoZSBzbmFwc2hv dCBtYW5hZ2VyCiAJICovCkBAIC0yMDcsNiArMTc3LDk3IEBAIHR5cGVkZWYgc3RydWN0IFNu YXBzaG90RGF0YQogCSAqIHRyYW5zYWN0aW9ucyBjb21wbGV0ZWQgc2luY2UgdGhlIGxhc3Qg R2V0U25hcHNob3REYXRhKCkuCiAJICovCiAJdWludDY0CQlzbmFwWGFjdENvbXBsZXRpb25D b3VudDsKK30gTVZDQ1NuYXBzaG90RGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgTVZDQ1NuYXBz aG90RGF0YSAqTVZDQ1NuYXBzaG90OworCisjZGVmaW5lIEludmFsaWRNVkNDU25hcHNob3Qg KChNVkNDU25hcHNob3QpIE5VTEwpCisKKy8qCisgKiBTdHJ1Y3QgcmVwcmVzZW50aW5nIGEg Imhpc3RvcmljIiBNVkNDIHNuYXBzaG90IGR1cmluZyBsb2dpY2FsIGRlY29kaW5nLgorICog VGhlc2UgYXJlIGNvbnN0cnVjdGVkIGJ5IHNyYy9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBi dWlsZC5jLgorICovCit0eXBlZGVmIHN0cnVjdCBIaXN0b3JpY01WQ0NTbmFwc2hvdERhdGEK K3sKKwlTbmFwc2hvdFR5cGUgc25hcHNob3RfdHlwZTsgLyogdHlwZSBvZiBzbmFwc2hvdCwg bXVzdCBiZSBmaXJzdCAqLworCisJLyoKKwkgKiB4bWluIGFuZCB4bWF4IGxpa2UgaW4gYSBu b3JtYWwgTVZDQyBzbmFwc2hvdC4KKwkgKi8KKwlUcmFuc2FjdGlvbklkIHhtaW47CQkJLyog YWxsIFhJRCA8IHhtaW4gYXJlIHZpc2libGUgdG8gbWUgKi8KKwlUcmFuc2FjdGlvbklkIHht YXg7CQkJLyogYWxsIFhJRCA+PSB4bWF4IGFyZSBpbnZpc2libGUgdG8gbWUgKi8KKworCS8q CisJICogY29tbWl0dGVkX3hpZHMgY29udGFpbnMgKmNvbW1pdHRlZCogdHJhbnNhY3Rpb25z IGJldHdlZW4geG1pbiBhbmQgeG1heC4KKwkgKiAoVGhpcyBpcyB0aGUgaW52ZXJzZSBvZiAn eGlwJyBpbiBub3JtYWwgTVZDQyBzbmFwc2hvdHMsIHdoaWNoIGNvbnRhaW5zCisJICogYWxs IG5vbi1jb21taXR0ZWQgdHJhbnNhY3Rpb25zLikgIFRoZSBhcnJheSBpcyBzb3J0ZWQgYnkg WElEIHRvIGFsbG93CisJICogYmluYXJ5IHNlYXJjaC4KKwkgKgorCSAqIG5vdGU6IGFsbCBp ZHMgaW4gY29tbWl0dGVkX3hpZHNbXSBzYXRpc2Z5IHhtaW4gPD0gY29tbWl0dGVkX3hpZHNb aV0gPAorCSAqIHhtYXgKKwkgKi8KKwlUcmFuc2FjdGlvbklkICpjb21taXR0ZWRfeGlkczsK Kwl1aW50MzIJCXhjbnQ7CQkJLyogIyBvZiB4YWN0IGlkcyBpbiBjb21taXR0ZWRfeGlkc1td ICovCisKKwkvKgorCSAqIGN1cnhpcCBjb250YWlucyAqYWxsKiB4aWRzIGFzc2lnbmVkIHRv IHRoZSByZXBsYXllZCB0cmFuc2FjdGlvbiwKKwkgKiBpbmNsdWRpbmcgdGhlIHRvcGxldmVs IHhpZC4KKwkgKi8KKwlUcmFuc2FjdGlvbklkICpjdXJ4aXA7CisJaW50MzIJCWN1cnhjbnQ7 CQkvKiAjIG9mIHhhY3QgaWRzIGluIGN1cnhpcFtdICovCisKKwlDb21tYW5kSWQJY3VyY2lk OwkJCS8qIGluIG15IHhhY3QsIENJRCA8IGN1cmNpZCBhcmUgdmlzaWJsZSAqLworCisJYm9v bAkJY29waWVkOwkJCS8qIGZhbHNlIGlmIGl0J3MgYSAiYmFzZSIgc25hcHNob3QgKi8KKwor CXVpbnQzMgkJcmVmY291bnQ7CQkvKiByZWZjb3VudCBtYW5hZ2VkIGJ5IHNuYXBidWlsZC5j ICAqLworCXVpbnQzMgkJcmVnZF9jb3VudDsJCS8qIHJlZmNvdW50IHJlZ2lzdGVyZWQgd2l0 aCByZXNvdXJjZSBvd25lcnMgKi8KKworfSBIaXN0b3JpY01WQ0NTbmFwc2hvdERhdGE7CisK K3R5cGVkZWYgc3RydWN0IEhpc3RvcmljTVZDQ1NuYXBzaG90RGF0YSAqSGlzdG9yaWNNVkND U25hcHNob3Q7CisKKy8qCisgKiBTdHJ1Y3QgcmVwcmVzZW50aW5nIGEgc3BlY2lhbCAic25h cHNob3QiIHdoaWNoIHNlZXMgYWxsIHR1cGxlcyBhcyB2aXNpYmxlCisgKiBpZiB0aGV5IGFy ZSB2aXNpYmxlIHRvIGFueW9uZSwgaS5lLiBpZiB0aGV5IGFyZSBub3QgdmFjdXVtYWJsZS4K KyAqIGkuZS4gU05BUFNIT1RfTk9OX1ZBQ1VVTUFCTEUuCisgKi8KK3R5cGVkZWYgc3RydWN0 IE5vblZhY3V1bWFibGVTbmFwc2hvdERhdGEKK3sKKwlTbmFwc2hvdFR5cGUgc25hcHNob3Rf dHlwZTsgLyogdHlwZSBvZiBzbmFwc2hvdCwgbXVzdCBiZSBmaXJzdCAqLworCisJLyogVGhp cyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIHJvdyBjb3VsZCBiZSB2YWN1dW1lZC4g Ki8KKwlzdHJ1Y3QgR2xvYmFsVmlzU3RhdGUgKnZpc3Rlc3Q7Cit9IE5vblZhY3V1bWFibGVT bmFwc2hvdERhdGE7CisKKy8qCisgKiBSZXR1cm4gdmFsdWVzIHRvIHRoZSBjYWxsZXIgb2Yg SGVhcFR1cGxlU2F0aXNmeURpcnR5LgorICovCit0eXBlZGVmIHN0cnVjdCBEaXJ0eVNuYXBz aG90RGF0YQoreworCVNuYXBzaG90VHlwZSBzbmFwc2hvdF90eXBlOyAvKiB0eXBlIG9mIHNu YXBzaG90LCBtdXN0IGJlIGZpcnN0ICovCisKKwlUcmFuc2FjdGlvbklkIHhtaW47CisJVHJh bnNhY3Rpb25JZCB4bWF4OworCXVpbnQzMgkJc3BlY3VsYXRpdmVUb2tlbjsKK30gRGlydHlT bmFwc2hvdERhdGE7CisKKy8qCisgKiBHZW5lcmljIHVuaW9uIHJlcHJlc2VudGluZyBhbGwg a2luZCBvZiBwb3NzaWJsZSBzbmFwc2hvdHMuICBTb21lIGhhdmUKKyAqIHR5cGUtc3BlY2lm aWMgc3RydWN0cy4KKyAqLwordHlwZWRlZiB1bmlvbiBTbmFwc2hvdERhdGEKK3sKKwlTbmFw c2hvdFR5cGUgc25hcHNob3RfdHlwZTsgLyogdHlwZSBvZiBzbmFwc2hvdCAqLworCisJTVZD Q1NuYXBzaG90RGF0YSBtdmNjOworCURpcnR5U25hcHNob3REYXRhIGRpcnR5OworCUhpc3Rv cmljTVZDQ1NuYXBzaG90RGF0YSBoaXN0b3JpY19tdmNjOworCU5vblZhY3V1bWFibGVTbmFw c2hvdERhdGEgbm9udmFjdXVtYWJsZTsKIH0gU25hcHNob3REYXRhOwogCit0eXBlZGVmIHVu aW9uIFNuYXBzaG90RGF0YSAqU25hcHNob3Q7CisKKyNkZWZpbmUgSW52YWxpZFNuYXBzaG90 CQkoKFNuYXBzaG90KSBOVUxMKQorCiAjZW5kaWYJCQkJCQkJLyogU05BUFNIT1RfSCAqLwpk aWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBiNjZjZWNkODc5OS4uYzhlZDE4Y2Y1 ODAgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBi L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC02MzMsNiArNjMzLDcgQEAg RGljdFRoZXNhdXJ1cwogRGltZW5zaW9uSW5mbwogRGlyZWN0b3J5TWV0aG9kRGF0YQogRGly ZWN0b3J5TWV0aG9kRmlsZQorRGlydHlTbmFwc2hvdERhdGEKIERpc2FibGVUaW1lb3V0UGFy YW1zCiBEaXNjYXJkTW9kZQogRGlzY2FyZFN0bXQKQEAgLTExODMsNiArMTE4NCw3IEBAIEhl YXBUdXBsZUZyZWV6ZQogSGVhcFR1cGxlSGVhZGVyCiBIZWFwVHVwbGVIZWFkZXJEYXRhCiBI ZWFwVHVwbGVUYWJsZVNsb3QKK0hpc3RvcmljTVZDQ1NuYXBzaG90RGF0YQogSGlzdENvbnRy b2wKIEhvdFN0YW5kYnlTdGF0ZQogSTMyCkBAIC0xNjMzLDYgKzE2MzUsNyBAQCBNSU5JRFVN UFdSSVRFRFVNUAogTUlOSURVTVBfVFlQRQogTUpFdmFsUmVzdWx0CiBNVFRhcmdldFJlbExv b2t1cAorTVZDQ1NuYXBzaG90RGF0YQogTVZEZXBlbmRlbmNpZXMKIE1WRGVwZW5kZW5jeQog TVZORGlzdGluY3QKQEAgLTE3MzIsNiArMTczNSw3IEBAIE5leHRWYWx1ZUV4cHIKIE5vZGUK IE5vZGVUYWcKIE5vbkVtcHR5UmFuZ2UKK05vblZhY3V1bWFibGVTbmFwc2hvdERhdGEKIE5v dGlmaWNhdGlvbgogTm90aWZpY2F0aW9uTGlzdAogTm90aWZ5U3RtdAotLSAKMi4zOS41Cgo= --------------nSXAXBhgWt0AUd9uE0wCc0X0 Content-Type: text/x-patch; charset=UTF-8; name="v6-0002-Simplify-historic-snapshot-refcounting.patch" Content-Disposition: attachment; filename="v6-0002-Simplify-historic-snapshot-refcounting.patch" Content-Transfer-Encoding: base64 RnJvbSAzMjI4ODQ4ODc2NjEwYzdiMTMyMTZmZmNhNmI0MmE5ZjU0NjVlMzAwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFRodSwgMTMgTWFyIDIwMjUgMTY6NDU6MTIgKzAyMDAK U3ViamVjdDogW1BBVENIIHY2IDAyLzEyXSBTaW1wbGlmeSBoaXN0b3JpYyBzbmFwc2hvdCBy ZWZjb3VudGluZwoKUmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4oKSBoYW5kbGVkICJjb3BpZWQi IHNuYXBzaG90cyBjcmVhdGVkIHdpdGgKUmVvcmRlckJ1ZmZlckNvcHlTbmFwKCkgZGlmZmVy ZW50bHkgZnJvbSAiYmFzZSIgaGlzdG9yaWMgc25hcHNob3RzCmNyZWF0ZWQgYnkgc25hcGJ1 aWxkLmMuIFRoZSBiYXNlIHNuYXBzaG90cyB1c2VkIGEgcmVmZXJlbmNlIGNvdW50LAp3aGls ZSBjb3BpZWQgc25hcHNob3RzIGRpZCBub3QuIFNpbXBsaWZ5IGJ5IHVzaW5nIHRoZSByZWZl cmVuY2UgY291bnQKZm9yIGJvdGguCi0tLQogLi4uL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVv cmRlcmJ1ZmZlci5jICAgICAgIHwgOTcgKysrKysrKystLS0tLS0tLS0tLQogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYyAgIHwgNDggKy0tLS0tLS0tCiBz cmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbmFwYnVpbGQuaCAgICAgICAgICAgfCAgMSArCiBz cmMvaW5jbHVkZS91dGlscy9zbmFwc2hvdC5oICAgICAgICAgICAgICAgICAgfCAgMiAtCiA0 IGZpbGVzIGNoYW5nZWQsIDQ2IGluc2VydGlvbnMoKyksIDEwMiBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZm ZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcmVvcmRlcmJ1ZmZlci5j CmluZGV4IGU4MTk2YThkNWQ1Li5lNDc5NzBmMWM4MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKKysrIGIvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVyLmMKQEAgLTEwMyw3ICsxMDMs NyBAQAogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBs aWNhdGlvbi9yZW9yZGVyYnVmZmVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5o IgotI2luY2x1ZGUgInJlcGxpY2F0aW9uL3NuYXBidWlsZC5oIgkvKiBqdXN0IGZvciBTbmFw QnVpbGRTbmFwRGVjUmVmY291bnQgKi8KKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbmFwYnVp bGQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv ZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgpAQCAtMjY4LDcgKzI2OCw2 IEBAIHN0YXRpYyB2b2lkIFJlb3JkZXJCdWZmZXJTZXJpYWxpemVkUGF0aChjaGFyICpwYXRo LCBSZXBsaWNhdGlvblNsb3QgKnNsb3QsCiAJCQkJCQkJCQkJVHJhbnNhY3Rpb25JZCB4aWQs IFhMb2dTZWdObyBzZWdubyk7CiBzdGF0aWMgaW50CVJlb3JkZXJCdWZmZXJUWE5TaXplQ29t cGFyZShjb25zdCBwYWlyaW5naGVhcF9ub2RlICphLCBjb25zdCBwYWlyaW5naGVhcF9ub2Rl ICpiLCB2b2lkICphcmcpOwogCi1zdGF0aWMgdm9pZCBSZW9yZGVyQnVmZmVyRnJlZVNuYXAo UmVvcmRlckJ1ZmZlciAqcmIsIEhpc3RvcmljTVZDQ1NuYXBzaG90IHNuYXApOwogc3RhdGlj IEhpc3RvcmljTVZDQ1NuYXBzaG90IFJlb3JkZXJCdWZmZXJDb3B5U25hcChSZW9yZGVyQnVm ZmVyICpyYiwgSGlzdG9yaWNNVkNDU25hcHNob3Qgb3JpZ19zbmFwLAogCQkJCQkJCQkJCQkJ ICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sIENvbW1hbmRJZCBjaWQpOwogCkBAIC01NDMsNyAr NTQyLDcgQEAgUmVvcmRlckJ1ZmZlckZyZWVDaGFuZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJl b3JkZXJCdWZmZXJDaGFuZ2UgKmNoYW5nZSwKIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFO R0VfSU5URVJOQUxfU05BUFNIT1Q6CiAJCQlpZiAoY2hhbmdlLT5kYXRhLnNuYXBzaG90KQog CQkJewotCQkJCVJlb3JkZXJCdWZmZXJGcmVlU25hcChyYiwgY2hhbmdlLT5kYXRhLnNuYXBz aG90KTsKKwkJCQlTbmFwQnVpbGRTbmFwRGVjUmVmY291bnQoY2hhbmdlLT5kYXRhLnNuYXBz aG90KTsKIAkJCQljaGFuZ2UtPmRhdGEuc25hcHNob3QgPSBOVUxMOwogCQkJfQogCQkJYnJl YWs7CkBAIC0xNTkzLDcgKzE1OTIsOCBAQCBSZW9yZGVyQnVmZmVyQ2xlYW51cFRYTihSZW9y ZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuKQogCWlmICh0eG4tPnNuYXBz aG90X25vdyAhPSBOVUxMKQogCXsKIAkJQXNzZXJ0KHJidHhuX2lzX3N0cmVhbWVkKHR4bikp OwotCQlSZW9yZGVyQnVmZmVyRnJlZVNuYXAocmIsIHR4bi0+c25hcHNob3Rfbm93KTsKKwkJ U25hcEJ1aWxkU25hcERlY1JlZmNvdW50KHR4bi0+c25hcHNob3Rfbm93KTsKKwkJdHhuLT5z bmFwc2hvdF9ub3cgPSBOVUxMOwogCX0KIAogCS8qCkBAIC0xOTAyLDcgKzE5MDIsNiBAQCBS ZW9yZGVyQnVmZmVyQ29weVNuYXAoUmVvcmRlckJ1ZmZlciAqcmIsIEhpc3RvcmljTVZDQ1Nu YXBzaG90IG9yaWdfc25hcCwKIAlzbmFwID0gTWVtb3J5Q29udGV4dEFsbG9jWmVybyhyYi0+ Y29udGV4dCwgc2l6ZSk7CiAJbWVtY3B5KHNuYXAsIG9yaWdfc25hcCwgc2l6ZW9mKEhpc3Rv cmljTVZDQ1NuYXBzaG90RGF0YSkpOwogCi0Jc25hcC0+Y29waWVkID0gdHJ1ZTsKIAlzbmFw LT5yZWZjb3VudCA9IDE7CQkJLyogbWFyayBhcyBhY3RpdmUgc28gbm9ib2R5IGZyZWVzIGl0 ICovCiAJc25hcC0+cmVnZF9jb3VudCA9IDA7CiAJc25hcC0+Y29tbWl0dGVkX3hpZHMgPSAo VHJhbnNhY3Rpb25JZCAqKSAoc25hcCArIDEpOwpAQCAtMTk0MiwxOCArMTk0MSw2IEBAIFJl b3JkZXJCdWZmZXJDb3B5U25hcChSZW9yZGVyQnVmZmVyICpyYiwgSGlzdG9yaWNNVkNDU25h cHNob3Qgb3JpZ19zbmFwLAogCXJldHVybiBzbmFwOwogfQogCi0vKgotICogRnJlZSBhIHBy ZXZpb3VzbHkgUmVvcmRlckJ1ZmZlckNvcHlTbmFwJ2VkIHNuYXBzaG90Ci0gKi8KLXN0YXRp YyB2b2lkCi1SZW9yZGVyQnVmZmVyRnJlZVNuYXAoUmVvcmRlckJ1ZmZlciAqcmIsIEhpc3Rv cmljTVZDQ1NuYXBzaG90IHNuYXApCi17Ci0JaWYgKHNuYXAtPmNvcGllZCkKLQkJcGZyZWUo c25hcCk7Ci0JZWxzZQotCQlTbmFwQnVpbGRTbmFwRGVjUmVmY291bnQoc25hcCk7Ci19Ci0K IC8qCiAgKiBJZiB0aGUgdHJhbnNhY3Rpb24gd2FzIChwYXJ0aWFsbHkpIHN0cmVhbWVkLCB3 ZSBuZWVkIHRvIHByZXBhcmUgb3IgY29tbWl0CiAgKiBpdCBpbiBhICdzdHJlYW1lZCcgd2F5 LiAgVGhhdCBpcywgd2UgZmlyc3Qgc3RyZWFtIHRoZSByZW1haW5pbmcgcGFydCBvZiB0aGUK QEAgLTIxMDQsMTEgKzIwOTEsOCBAQCBSZW9yZGVyQnVmZmVyU2F2ZVRYTlNuYXBzaG90KFJl b3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJdHhuLT5jb21tYW5k X2lkID0gY29tbWFuZF9pZDsKIAogCS8qIEF2b2lkIGNvcHlpbmcgaWYgaXQncyBhbHJlYWR5 IGNvcGllZC4gKi8KLQlpZiAoc25hcHNob3Rfbm93LT5jb3BpZWQpCi0JCXR4bi0+c25hcHNo b3Rfbm93ID0gc25hcHNob3Rfbm93OwotCWVsc2UKLQkJdHhuLT5zbmFwc2hvdF9ub3cgPSBS ZW9yZGVyQnVmZmVyQ29weVNuYXAocmIsIHNuYXBzaG90X25vdywKLQkJCQkJCQkJCQkJCSAg dHhuLCBjb21tYW5kX2lkKTsKKwl0eG4tPnNuYXBzaG90X25vdyA9IHNuYXBzaG90X25vdzsK KwlTbmFwQnVpbGRTbmFwSW5jUmVmY291bnQodHhuLT5zbmFwc2hvdF9ub3cpOwogfQogCiAv KgpAQCAtMjIwOCw2ICsyMTkyLDggQEAgUmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4oUmVvcmRl ckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAogCS8qIHNldHVwIHRoZSBp bml0aWFsIHNuYXBzaG90ICovCiAJU2V0dXBIaXN0b3JpY1NuYXBzaG90KHNuYXBzaG90X25v dywgdHhuLT50dXBsZWNpZF9oYXNoKTsKKwkvKiBpbmNyZWFzZSByZWZjb3VudCBmb3IgdGhl IGluc3RhbGxlZCBoaXN0b3JpYyBzbmFwc2hvdCAqLworCVNuYXBCdWlsZFNuYXBJbmNSZWZj b3VudChzbmFwc2hvdF9ub3cpOwogCiAJLyoKIAkgKiBEZWNvZGluZyBuZWVkcyBhY2Nlc3Mg dG8gc3lzY2FjaGVzIGV0IGFsLiwgd2hpY2ggaW4gdHVybiB1c2UKQEAgLTI1MTEsMzMgKzI0 OTcsMTIgQEAgUmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4oUmVvcmRlckJ1ZmZlciAqcmIsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9J TlRFUk5BTF9TTkFQU0hPVDoKIAkJCQkJLyogZ2V0IHJpZCBvZiB0aGUgb2xkICovCiAJCQkJ CVRlYXJkb3duSGlzdG9yaWNTbmFwc2hvdChmYWxzZSk7Ci0KLQkJCQkJaWYgKHNuYXBzaG90 X25vdy0+Y29waWVkKQotCQkJCQl7Ci0JCQkJCQlSZW9yZGVyQnVmZmVyRnJlZVNuYXAocmIs IHNuYXBzaG90X25vdyk7Ci0JCQkJCQlzbmFwc2hvdF9ub3cgPQotCQkJCQkJCVJlb3JkZXJC dWZmZXJDb3B5U25hcChyYiwgY2hhbmdlLT5kYXRhLnNuYXBzaG90LAotCQkJCQkJCQkJCQkJ ICB0eG4sIGNvbW1hbmRfaWQpOwotCQkJCQl9Ci0KLQkJCQkJLyoKLQkJCQkJICogUmVzdG9y ZWQgZnJvbSBkaXNrLCBuZWVkIHRvIGJlIGNhcmVmdWwgbm90IHRvIGRvdWJsZQotCQkJCQkg KiBmcmVlLiBXZSBjb3VsZCBpbnRyb2R1Y2UgcmVmY291bnRpbmcgZm9yIHRoYXQsIGJ1dCBm b3IKLQkJCQkJICogbm93IHRoaXMgc2VlbXMgaW5mcmVxdWVudCBlbm91Z2ggbm90IHRvIGNh cmUuCi0JCQkJCSAqLwotCQkJCQllbHNlIGlmIChjaGFuZ2UtPmRhdGEuc25hcHNob3QtPmNv cGllZCkKLQkJCQkJewotCQkJCQkJc25hcHNob3Rfbm93ID0KLQkJCQkJCQlSZW9yZGVyQnVm ZmVyQ29weVNuYXAocmIsIGNoYW5nZS0+ZGF0YS5zbmFwc2hvdCwKLQkJCQkJCQkJCQkJCSAg dHhuLCBjb21tYW5kX2lkKTsKLQkJCQkJfQotCQkJCQllbHNlCi0JCQkJCXsKLQkJCQkJCXNu YXBzaG90X25vdyA9IGNoYW5nZS0+ZGF0YS5zbmFwc2hvdDsKLQkJCQkJfQorCQkJCQlTbmFw QnVpbGRTbmFwRGVjUmVmY291bnQoc25hcHNob3Rfbm93KTsKIAogCQkJCQkvKiBhbmQgY29u dGludWUgd2l0aCB0aGUgbmV3IG9uZSAqLworCQkJCQlzbmFwc2hvdF9ub3cgPSBjaGFuZ2Ut PmRhdGEuc25hcHNob3Q7CiAJCQkJCVNldHVwSGlzdG9yaWNTbmFwc2hvdChzbmFwc2hvdF9u b3csIHR4bi0+dHVwbGVjaWRfaGFzaCk7CisJCQkJCVNuYXBCdWlsZFNuYXBJbmNSZWZjb3Vu dChzbmFwc2hvdF9ub3cpOwogCQkJCQlicmVhazsKIAogCQkJCWNhc2UgUkVPUkRFUl9CVUZG RVJfQ0hBTkdFX0lOVEVSTkFMX0NPTU1BTkRfSUQ6CkBAIC0yNTQ3LDE2ICsyNTEyLDI2IEBA IFJlb3JkZXJCdWZmZXJQcm9jZXNzVFhOKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCQkJCXsKIAkJCQkJCWNvbW1hbmRfaWQgPSBjaGFuZ2UtPmRhdGEu Y29tbWFuZF9pZDsKIAotCQkJCQkJaWYgKCFzbmFwc2hvdF9ub3ctPmNvcGllZCkKKwkJCQkJ CVRlYXJkb3duSGlzdG9yaWNTbmFwc2hvdChmYWxzZSk7CisKKwkJCQkJCS8qCisJCQkJCQkg KiBDb25zdHJ1Y3QgYSBuZXcgc25hcHNob3Qgd2l0aCB0aGUgbmV3IGNvbW1hbmQgSUQuCisJ CQkJCQkgKgorCQkJCQkJICogSWYgdGhpcyBpcyB0aGUgb25seSByZWZlcmVuY2UgdG8gdGhl IHNuYXBzaG90LCBhbmQKKwkJCQkJCSAqIGl0J3MgYSAiY29waWVkIiBzbmFwc2hvdCB0aGF0 IGFscmVhZHkgY29udGFpbnMgYWxsCisJCQkJCQkgKiB0aGUgcmVwbGF5ZWQgdHJhbnNhY3Rp b24ncyBYSURzIChjdXJ4bmN0ID4gMCksIHdlCisJCQkJCQkgKiBjYW4gdGFrZSBhIHNob3J0 Y3V0IGFuZCB1cGRhdGUgdGhlIHNuYXBzaG90J3MKKwkJCQkJCSAqIGNvbW1hbmQgSUQgaW4g cGxhY2UuCisJCQkJCQkgKi8KKwkJCQkJCWlmIChzbmFwc2hvdF9ub3ctPnJlZmNvdW50ID09 IDEgJiYgc25hcHNob3Rfbm93LT5jdXJ4Y250ID4gMCkKKwkJCQkJCQlzbmFwc2hvdF9ub3ct PmN1cmNpZCA9IGNvbW1hbmRfaWQ7CisJCQkJCQllbHNlCiAJCQkJCQl7Ci0JCQkJCQkJLyog d2UgZG9uJ3QgdXNlIHRoZSBnbG9iYWwgb25lIGFueW1vcmUgKi8KKwkJCQkJCQlTbmFwQnVp bGRTbmFwRGVjUmVmY291bnQoc25hcHNob3Rfbm93KTsKIAkJCQkJCQlzbmFwc2hvdF9ub3cg PSBSZW9yZGVyQnVmZmVyQ29weVNuYXAocmIsIHNuYXBzaG90X25vdywKIAkJCQkJCQkJCQkJ CQkJCQkgdHhuLCBjb21tYW5kX2lkKTsKIAkJCQkJCX0KIAotCQkJCQkJc25hcHNob3Rfbm93 LT5jdXJjaWQgPSBjb21tYW5kX2lkOwotCi0JCQkJCQlUZWFyZG93bkhpc3RvcmljU25hcHNo b3QoZmFsc2UpOwogCQkJCQkJU2V0dXBIaXN0b3JpY1NuYXBzaG90KHNuYXBzaG90X25vdywg dHhuLT50dXBsZWNpZF9oYXNoKTsKIAkJCQkJfQogCkBAIC0yNjQ2LDExICsyNjIxLDExIEBA IFJlb3JkZXJCdWZmZXJQcm9jZXNzVFhOKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCSAqLwogCQlpZiAoc3RyZWFtaW5nKQogCQkJUmVvcmRlckJ1ZmZl clNhdmVUWE5TbmFwc2hvdChyYiwgdHhuLCBzbmFwc2hvdF9ub3csIGNvbW1hbmRfaWQpOwot CQllbHNlIGlmIChzbmFwc2hvdF9ub3ctPmNvcGllZCkKLQkJCVJlb3JkZXJCdWZmZXJGcmVl U25hcChyYiwgc25hcHNob3Rfbm93KTsKIAogCQkvKiBjbGVhbnVwICovCiAJCVRlYXJkb3du SGlzdG9yaWNTbmFwc2hvdChmYWxzZSk7CisJCVNuYXBCdWlsZFNuYXBEZWNSZWZjb3VudChz bmFwc2hvdF9ub3cpOworCQlzbmFwc2hvdF9ub3cgPSBOVUxMOwogCiAJCS8qCiAJCSAqIEFi b3J0aW5nIHRoZSBjdXJyZW50IChzdWItKXRyYW5zYWN0aW9uIGFzIGEgd2hvbGUgaGFzIHRo ZSByaWdodApAQCAtMjcwMyw2ICsyNjc4LDExIEBAIFJlb3JkZXJCdWZmZXJQcm9jZXNzVFhO KFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAKIAkJVGVhcmRv d25IaXN0b3JpY1NuYXBzaG90KHRydWUpOwogCisJCS8qCisJCSAqIGRvbid0IGRlY3JlbWVu dCB0aGUgcmVmY291bnQgb24gc25hcHNob3Rfbm93IHlldCwgd2Ugc3RpbGwgdXNlIGl0CisJ CSAqIGluIHRoZSBSZW9yZGVyQnVmZmVyUmVzZXRUWE4oKSBjYWxsIGJlbG93LgorCQkgKi8K KwogCQkvKgogCQkgKiBGb3JjZSBjYWNoZSBpbnZhbGlkYXRpb24gdG8gaGFwcGVuIG91dHNp ZGUgb2YgYSB2YWxpZCB0cmFuc2FjdGlvbgogCQkgKiB0byBwcmV2ZW50IGNhdGFsb2cgYWNj ZXNzIGFzIHdlIGp1c3QgY2F1Z2h0IGFuIGVycm9yLgpAQCAtMjc1MSw5ICsyNzMxLDE1IEBA IFJlb3JkZXJCdWZmZXJQcm9jZXNzVFhOKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCQlSZW9yZGVyQnVmZmVyUmVzZXRUWE4ocmIsIHR4biwgc25hcHNo b3Rfbm93LAogCQkJCQkJCQkgIGNvbW1hbmRfaWQsIHByZXZfbHNuLAogCQkJCQkJCQkgIHNw ZWNpbnNlcnQpOworCisJCQlTbmFwQnVpbGRTbmFwRGVjUmVmY291bnQoc25hcHNob3Rfbm93 KTsKKwkJCXNuYXBzaG90X25vdyA9IE5VTEw7CiAJCX0KIAkJZWxzZQogCQl7CisJCQlTbmFw QnVpbGRTbmFwRGVjUmVmY291bnQoc25hcHNob3Rfbm93KTsKKwkJCXNuYXBzaG90X25vdyA9 IE5VTEw7CisKIAkJCVJlb3JkZXJCdWZmZXJDbGVhbnVwVFhOKHJiLCB0eG4pOwogCQkJTWVt b3J5Q29udGV4dFN3aXRjaFRvKGVjeHQpOwogCQkJUEdfUkVfVEhST1coKTsKQEAgLTQyNTYs OCArNDI0Miw3IEBAIFJlb3JkZXJCdWZmZXJTdHJlYW1UWE4oUmVvcmRlckJ1ZmZlciAqcmIs IFJlb3JkZXJCdWZmZXJUWE4gKnR4bikKIAkJCQkJCQkJCQkJIHR4biwgY29tbWFuZF9pZCk7 CiAKIAkJLyogRnJlZSB0aGUgcHJldmlvdXNseSBjb3BpZWQgc25hcHNob3QuICovCi0JCUFz c2VydCh0eG4tPnNuYXBzaG90X25vdy0+Y29waWVkKTsKLQkJUmVvcmRlckJ1ZmZlckZyZWVT bmFwKHJiLCB0eG4tPnNuYXBzaG90X25vdyk7CisJCVNuYXBCdWlsZFNuYXBEZWNSZWZjb3Vu dCh0eG4tPnNuYXBzaG90X25vdyk7CiAJCXR4bi0+c25hcHNob3Rfbm93ID0gTlVMTDsKIAl9 CiAKQEAgLTQ2NDcsNyArNDYzMiw3IEBAIFJlb3JkZXJCdWZmZXJSZXN0b3JlQ2hhbmdlKFJl b3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCiAJCQkJbmV3c25hcC0+ Y29tbWl0dGVkX3hpZHMgPSAoVHJhbnNhY3Rpb25JZCAqKQogCQkJCQkoKChjaGFyICopIG5l d3NuYXApICsgc2l6ZW9mKEhpc3RvcmljTVZDQ1NuYXBzaG90RGF0YSkpOwogCQkJCW5ld3Nu YXAtPmN1cnhpcCA9IG5ld3NuYXAtPmNvbW1pdHRlZF94aWRzICsgbmV3c25hcC0+eGNudDsK LQkJCQluZXdzbmFwLT5jb3BpZWQgPSB0cnVlOworCQkJCW5ld3NuYXAtPnJlZmNvdW50ID0g MTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCS8qIHRoZSBiYXNlIHN0cnVjdCBjb250YWlucyBh bGwgdGhlIGRhdGEsIGVhc3kgcGVhc3kgKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3NuYXBidWlsZC5jCmluZGV4IDdhMzQxNDE4YTc0Li41MGRjYTdjYjc1OCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQu YworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jCkBA IC0xNTcsMTAgKzE1Nyw2IEBAIHN0YXRpYyB2b2lkIFNuYXBCdWlsZFB1cmdlT2xkZXJUeG4o U25hcEJ1aWxkICpidWlsZGVyKTsKIC8qIHNuYXBzaG90IGJ1aWxkaW5nL21hbmlwdWxhdGlv bi9kaXN0cmlidXRpb24gZnVuY3Rpb25zICovCiBzdGF0aWMgSGlzdG9yaWNNVkNDU25hcHNo b3QgU25hcEJ1aWxkQnVpbGRTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIpOwogCi1zdGF0 aWMgdm9pZCBTbmFwQnVpbGRGcmVlU25hcHNob3QoSGlzdG9yaWNNVkNDU25hcHNob3Qgc25h cCk7Ci0KLXN0YXRpYyB2b2lkIFNuYXBCdWlsZFNuYXBJbmNSZWZjb3VudChIaXN0b3JpY01W Q0NTbmFwc2hvdCBzbmFwKTsKLQogc3RhdGljIHZvaWQgU25hcEJ1aWxkRGlzdHJpYnV0ZU5l d0NhdGFsb2dTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuKTsK IAogc3RhdGljIGlubGluZSBib29sIFNuYXBCdWlsZFhpZEhhc0NhdGFsb2dDaGFuZ2VzKFNu YXBCdWlsZCAqYnVpbGRlciwgVHJhbnNhY3Rpb25JZCB4aWQsCkBAIC0yNDUsMjkgKzI0MSw2 IEBAIEZyZWVTbmFwc2hvdEJ1aWxkZXIoU25hcEJ1aWxkICpidWlsZGVyKQogCU1lbW9yeUNv bnRleHREZWxldGUoY29udGV4dCk7CiB9CiAKLS8qCi0gKiBGcmVlIGFuIHVucmVmZXJlbmNl ZCBzbmFwc2hvdCB0aGF0IGhhcyBwcmV2aW91c2x5IGJlZW4gYnVpbHQgYnkgdXMuCi0gKi8K LXN0YXRpYyB2b2lkCi1TbmFwQnVpbGRGcmVlU25hcHNob3QoSGlzdG9yaWNNVkNDU25hcHNo b3Qgc25hcCkKLXsKLQkvKiBtYWtlIHN1cmUgd2UgZG9uJ3QgZ2V0IHBhc3NlZCBhbiBleHRl cm5hbCBzbmFwc2hvdCAqLwotCUFzc2VydChzbmFwLT5zbmFwc2hvdF90eXBlID09IFNOQVBT SE9UX0hJU1RPUklDX01WQ0MpOwotCi0JLyogbWFrZSBzdXJlIG5vYm9keSBtb2RpZmllZCBv dXIgc25hcHNob3QgKi8KLQlBc3NlcnQoc25hcC0+Y3VyY2lkID09IEZpcnN0Q29tbWFuZElk KTsKLQlBc3NlcnQoc25hcC0+cmVnZF9jb3VudCA9PSAwKTsKLQotCS8qIHNsaWdodGx5IG1v cmUgbGlrZWx5LCBzbyBpdCdzIGNoZWNrZWQgZXZlbiB3aXRob3V0IGMtYXNzZXJ0cyAqLwot CWlmIChzbmFwLT5jb3BpZWQpCi0JCWVsb2coRVJST1IsICJjYW5ub3QgZnJlZSBhIGNvcGll ZCBzbmFwc2hvdCIpOwotCi0JaWYgKHNuYXAtPnJlZmNvdW50KQotCQllbG9nKEVSUk9SLCAi Y2Fubm90IGZyZWUgYSBzbmFwc2hvdCB0aGF0J3MgaW4gdXNlIik7Ci0KLQlwZnJlZShzbmFw KTsKLX0KLQogLyoKICAqIEluIHdoaWNoIHN0YXRlIG9mIHNuYXBzaG90IGJ1aWxkaW5nIGFy ZSB3ZT8KICAqLwpAQCAtMzEwLDcgKzI4Myw3IEBAIFNuYXBCdWlsZFhhY3ROZWVkc1NraXAo U25hcEJ1aWxkICpidWlsZGVyLCBYTG9nUmVjUHRyIHB0cikKICAqIFRoaXMgaXMgdXNlZCB3 aGVuIGhhbmRpbmcgb3V0IGEgc25hcHNob3QgdG8gc29tZSBleHRlcm5hbCByZXNvdXJjZSBv ciB3aGVuCiAgKiBhZGRpbmcgYSBTbmFwc2hvdCBhcyBidWlsZGVyLT5zbmFwc2hvdC4KICAq Lwotc3RhdGljIHZvaWQKK3ZvaWQKIFNuYXBCdWlsZFNuYXBJbmNSZWZjb3VudChIaXN0b3Jp Y01WQ0NTbmFwc2hvdCBzbmFwKQogewogCXNuYXAtPnJlZmNvdW50Kys7CkBAIC0zMTgsOSAr MjkxLDYgQEAgU25hcEJ1aWxkU25hcEluY1JlZmNvdW50KEhpc3RvcmljTVZDQ1NuYXBzaG90 IHNuYXApCiAKIC8qCiAgKiBEZWNyZWFzZSByZWZjb3VudCBvZiBhIHNuYXBzaG90IGFuZCBm cmVlIGlmIHRoZSByZWZjb3VudCByZWFjaGVzIHplcm8uCi0gKgotICogRXh0ZXJuYWxseSB2 aXNpYmxlLCBzbyB0aGF0IGV4dGVybmFsIHJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBoYW5k ZWQgYW4KLSAqIEluY1JlZidlZCBTbmFwc2hvdCBjYW4gYWRqdXN0IGl0cyByZWZjb3VudCBl YXNpbHkuCiAgKi8KIHZvaWQKIFNuYXBCdWlsZFNuYXBEZWNSZWZjb3VudChIaXN0b3JpY01W Q0NTbmFwc2hvdCBzbmFwKQpAQCAtMzI4LDE5ICsyOTgsMTIgQEAgU25hcEJ1aWxkU25hcERl Y1JlZmNvdW50KEhpc3RvcmljTVZDQ1NuYXBzaG90IHNuYXApCiAJLyogbWFrZSBzdXJlIHdl IGRvbid0IGdldCBwYXNzZWQgYW4gZXh0ZXJuYWwgc25hcHNob3QgKi8KIAlBc3NlcnQoc25h cC0+c25hcHNob3RfdHlwZSA9PSBTTkFQU0hPVF9ISVNUT1JJQ19NVkNDKTsKIAotCS8qIG1h a2Ugc3VyZSBub2JvZHkgbW9kaWZpZWQgb3VyIHNuYXBzaG90ICovCi0JQXNzZXJ0KHNuYXAt PmN1cmNpZCA9PSBGaXJzdENvbW1hbmRJZCk7Ci0KIAlBc3NlcnQoc25hcC0+cmVmY291bnQg PiAwKTsKIAlBc3NlcnQoc25hcC0+cmVnZF9jb3VudCA9PSAwKTsKIAotCS8qIHNsaWdodGx5 IG1vcmUgbGlrZWx5LCBzbyBpdCdzIGNoZWNrZWQgZXZlbiB3aXRob3V0IGNhc3NlcnRzICov Ci0JaWYgKHNuYXAtPmNvcGllZCkKLQkJZWxvZyhFUlJPUiwgImNhbm5vdCBmcmVlIGEgY29w aWVkIHNuYXBzaG90Iik7Ci0KIAlzbmFwLT5yZWZjb3VudC0tOwogCWlmIChzbmFwLT5yZWZj b3VudCA9PSAwKQotCQlTbmFwQnVpbGRGcmVlU25hcHNob3Qoc25hcCk7CisJCXBmcmVlKHNu YXApOwogfQogCiAvKgpAQCAtNDEzLDcgKzM3Niw2IEBAIFNuYXBCdWlsZEJ1aWxkU25hcHNo b3QoU25hcEJ1aWxkICpidWlsZGVyKQogCXNuYXBzaG90LT5jdXJ4Y250ID0gMDsKIAlzbmFw c2hvdC0+Y3VyeGlwID0gTlVMTDsKIAotCXNuYXBzaG90LT5jb3BpZWQgPSBmYWxzZTsKIAlz bmFwc2hvdC0+Y3VyY2lkID0gRmlyc3RDb21tYW5kSWQ7CiAJc25hcHNob3QtPnJlZmNvdW50 ID0gMDsKIAlzbmFwc2hvdC0+cmVnZF9jb3VudCA9IDA7CkBAIC0xMDM3LDE4ICs5OTksMTYg QEAgU25hcEJ1aWxkQ29tbWl0VHhuKFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBs c24sIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJU25hcEJ1aWxkU25hcERlY1JlZmNvdW50KGJ1 aWxkZXItPnNuYXBzaG90KTsKIAogCQlidWlsZGVyLT5zbmFwc2hvdCA9IFNuYXBCdWlsZEJ1 aWxkU25hcHNob3QoYnVpbGRlcik7CisJCVNuYXBCdWlsZFNuYXBJbmNSZWZjb3VudChidWls ZGVyLT5zbmFwc2hvdCk7CiAKIAkJLyogd2UgbWlnaHQgbmVlZCB0byBleGVjdXRlIGludmFs aWRhdGlvbnMsIGFkZCBzbmFwc2hvdCAqLwogCQlpZiAoIVJlb3JkZXJCdWZmZXJYaWRIYXNC YXNlU25hcHNob3QoYnVpbGRlci0+cmVvcmRlciwgeGlkKSkKIAkJewotCQkJU25hcEJ1aWxk U25hcEluY1JlZmNvdW50KGJ1aWxkZXItPnNuYXBzaG90KTsKIAkJCVJlb3JkZXJCdWZmZXJT ZXRCYXNlU25hcHNob3QoYnVpbGRlci0+cmVvcmRlciwgeGlkLCBsc24sCiAJCQkJCQkJCQkJ IGJ1aWxkZXItPnNuYXBzaG90KTsKKwkJCVNuYXBCdWlsZFNuYXBJbmNSZWZjb3VudChidWls ZGVyLT5zbmFwc2hvdCk7CiAJCX0KIAotCQkvKiByZWZjb3VudCBvZiB0aGUgc25hcHNob3Qg YnVpbGRlciBmb3IgdGhlIG5ldyBzbmFwc2hvdCAqLwotCQlTbmFwQnVpbGRTbmFwSW5jUmVm Y291bnQoYnVpbGRlci0+c25hcHNob3QpOwotCiAJCS8qIGFkZCBhIG5ldyBjYXRhbG9nIHNu YXBzaG90IHRvIGFsbCBjdXJyZW50bHkgcnVubmluZyB0cmFuc2FjdGlvbnMgKi8KIAkJU25h cEJ1aWxkRGlzdHJpYnV0ZU5ld0NhdGFsb2dTbmFwc2hvdChidWlsZGVyLCBsc24pOwogCX0K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3NuYXBidWlsZC5oIGIvc3Jj L2luY2x1ZGUvcmVwbGljYXRpb24vc25hcGJ1aWxkLmgKaW5kZXggNTkzMGZmYjU1YTguLjYw OTUwMTNhMjk5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbmFwYnVp bGQuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9zbmFwYnVpbGQuaApAQCAtNzAs NiArNzAsNyBAQCBleHRlcm4gU25hcEJ1aWxkICpBbGxvY2F0ZVNuYXBzaG90QnVpbGRlcihz dHJ1Y3QgUmVvcmRlckJ1ZmZlciAqcmVvcmRlciwKIAkJCQkJCQkJCQkgIFhMb2dSZWNQdHIg dHdvX3BoYXNlX2F0KTsKIGV4dGVybiB2b2lkIEZyZWVTbmFwc2hvdEJ1aWxkZXIoU25hcEJ1 aWxkICpidWlsZGVyKTsKIAorZXh0ZXJuIHZvaWQgU25hcEJ1aWxkU25hcEluY1JlZmNvdW50 KEhpc3RvcmljTVZDQ1NuYXBzaG90IHNuYXApOwogZXh0ZXJuIHZvaWQgU25hcEJ1aWxkU25h cERlY1JlZmNvdW50KEhpc3RvcmljTVZDQ1NuYXBzaG90IHNuYXApOwogCiBleHRlcm4gTVZD Q1NuYXBzaG90IFNuYXBCdWlsZEluaXRpYWxTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIp OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvc25hcHNob3QuaCBiL3NyYy9pbmNs dWRlL3V0aWxzL3NuYXBzaG90LmgKaW5kZXggOTNjMWY1MTc4NGYuLmJjYTBhZDE2ZTY4IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9zbmFwc2hvdC5oCisrKyBiL3NyYy9pbmNs dWRlL3V0aWxzL3NuYXBzaG90LmgKQEAgLTIxOCw4ICsyMTgsNiBAQCB0eXBlZGVmIHN0cnVj dCBIaXN0b3JpY01WQ0NTbmFwc2hvdERhdGEKIAogCUNvbW1hbmRJZAljdXJjaWQ7CQkJLyog aW4gbXkgeGFjdCwgQ0lEIDwgY3VyY2lkIGFyZSB2aXNpYmxlICovCiAKLQlib29sCQljb3Bp ZWQ7CQkJLyogZmFsc2UgaWYgaXQncyBhICJiYXNlIiBzbmFwc2hvdCAqLwotCiAJdWludDMy CQlyZWZjb3VudDsJCS8qIHJlZmNvdW50IG1hbmFnZWQgYnkgc25hcGJ1aWxkLmMgICovCiAJ dWludDMyCQlyZWdkX2NvdW50OwkJLyogcmVmY291bnQgcmVnaXN0ZXJlZCB3aXRoIHJlc291 cmNlIG93bmVycyAqLwogCi0tIAoyLjM5LjUKCg== --------------nSXAXBhgWt0AUd9uE0wCc0X0 Content-Type: text/x-patch; charset=UTF-8; name="v6-0003-Add-an-explicit-valid-flag-to-MVCCSnapshotData.patch" Content-Disposition: attachment; filename*0="v6-0003-Add-an-explicit-valid-flag-to-MVCCSnapshotData.patch" Content-Transfer-Encoding: base64 RnJvbSAxNzA1NjM5YTczNTU1ZDliM2Y1ODg0YzdmZDkwNTQwYzI2OGQzZGI1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMzEgTWFyIDIwMjUgMjM6NDc6NDggKzAzMDAK U3ViamVjdDogW1BBVENIIHY2IDAzLzEyXSBBZGQgYW4gZXhwbGljaXQgJ3ZhbGlkJyBmbGFn IHRvIE1WQ0NTbmFwc2hvdERhdGEKClRoZSBsaWZldGltZSBvZiB0aGUgInN0YXRpYyIgc25h cHNob3RzIHJldHVybmVkIGJ5CkdldFRyYW5zYWN0aW9uU25hcHNob3QoKSwgR2V0TGF0ZXN0 U25hcHNob3QoKSBhbmQgR2V0Q2F0YWxvZ1NuYXBzaG90KCkKaXMgYSBiaXQgdmFndWUuIEJ5 IGFkZGluZyBhbiBleHBsaWNpdCAndmFsaWQnIGZsYWcsIHdlIGNhbiBtYWtlIGl0Cm1vcmUg Y2xlYXIgd2hlbiBhIGZ1bmN0aW9uIGNhbGwgdXBkYXRlcyBhIHN0YXRpYyBzbmFwc2hvdCwg bWFraW5nIGl0CnZhbGlkLCBhbmQgd2hlbiBhbm90aGVyIGZ1bmN0aW9uIG1ha2VzIGl0IGlu dmFsaWQgYWdhaW4uIEl0J3MKY3VycmVudGx5IG9ubHkgdXNlZCBpbiBhc3NlcnRpb25zLCBh bmQgY2FuIGFsc28gYmUgaGFuZHkgd2hlbgpkZWJ1Z2dpbmcuCi0tLQogc3JjL2JhY2tlbmQv c3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgfCAgMiArKwogc3JjL2JhY2tlbmQvdXRpbHMvdGlt ZS9zbmFwbWdyLmMgICAgfCAxNSArKysrKysrKysrKysrKysKIHNyYy9pbmNsdWRlL3V0aWxz L3NuYXBzaG90LmggICAgICAgIHwgIDEgKwogMyBmaWxlcyBjaGFuZ2VkLCAxOCBpbnNlcnRp b25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5 LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwppbmRleCA1MzU3NTU2 MTRhOS4uYmE1ZWQ4OTYwZGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Byb2NhcnJheS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5j CkBAIC0yMTM1LDYgKzIxMzUsNyBAQCBHZXRTbmFwc2hvdERhdGFSZXVzZShNVkNDU25hcHNo b3Qgc25hcHNob3QpCiAJc25hcHNob3QtPmFjdGl2ZV9jb3VudCA9IDA7CiAJc25hcHNob3Qt PnJlZ2RfY291bnQgPSAwOwogCXNuYXBzaG90LT5jb3BpZWQgPSBmYWxzZTsKKwlzbmFwc2hv dC0+dmFsaWQgPSB0cnVlOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC0yNTE0LDYgKzI1MTUs NyBAQCBHZXRTbmFwc2hvdERhdGEoTVZDQ1NuYXBzaG90IHNuYXBzaG90KQogCXNuYXBzaG90 LT5hY3RpdmVfY291bnQgPSAwOwogCXNuYXBzaG90LT5yZWdkX2NvdW50ID0gMDsKIAlzbmFw c2hvdC0+Y29waWVkID0gZmFsc2U7CisJc25hcHNob3QtPnZhbGlkID0gdHJ1ZTsKIAogCXJl dHVybiBzbmFwc2hvdDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUv c25hcG1nci5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvdGltZS9zbmFwbWdyLmMKaW5kZXggNzhh ZGI2ZDU3NWEuLjY5ZWQ4NmIyMTAxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy90 aW1lL3NuYXBtZ3IuYworKysgYi9zcmMvYmFja2VuZC91dGlscy90aW1lL3NuYXBtZ3IuYwpA QCAtNDQ3LDYgKzQ0Nyw3IEBAIEludmFsaWRhdGVDYXRhbG9nU25hcHNob3Qodm9pZCkKIAl7 CiAJCXBhaXJpbmdoZWFwX3JlbW92ZSgmUmVnaXN0ZXJlZFNuYXBzaG90cywgJkNhdGFsb2dT bmFwc2hvdC0+cGhfbm9kZSk7CiAJCUNhdGFsb2dTbmFwc2hvdCA9IE5VTEw7CisJCUNhdGFs b2dTbmFwc2hvdERhdGEudmFsaWQgPSBmYWxzZTsKIAkJU25hcHNob3RSZXNldFhtaW4oKTsK IAl9CiB9CkBAIC02MTEsNiArNjEyLDcgQEAgQ29weU1WQ0NTbmFwc2hvdChNVkNDU25hcHNo b3Qgc25hcHNob3QpCiAJbmV3c25hcC0+cmVnZF9jb3VudCA9IDA7CiAJbmV3c25hcC0+YWN0 aXZlX2NvdW50ID0gMDsKIAluZXdzbmFwLT5jb3BpZWQgPSB0cnVlOworCW5ld3NuYXAtPnZh bGlkID0gdHJ1ZTsKIAluZXdzbmFwLT5zbmFwWGFjdENvbXBsZXRpb25Db3VudCA9IDA7CiAK IAkvKiBzZXR1cCBYSUQgYXJyYXkgKi8KQEAgLTY1Miw2ICs2NTQsNyBAQCBGcmVlTVZDQ1Nu YXBzaG90KE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCkKIAlBc3NlcnQoc25hcHNob3QtPnJlZ2Rf Y291bnQgPT0gMCk7CiAJQXNzZXJ0KHNuYXBzaG90LT5hY3RpdmVfY291bnQgPT0gMCk7CiAJ QXNzZXJ0KHNuYXBzaG90LT5jb3BpZWQpOworCUFzc2VydChzbmFwc2hvdC0+dmFsaWQpOwog CiAJcGZyZWUoc25hcHNob3QpOwogfQpAQCAtNjg4LDYgKzY5MSw3IEBAIFB1c2hBY3RpdmVT bmFwc2hvdFdpdGhMZXZlbChTbmFwc2hvdCBzbmFwc2hvdCwgaW50IHNuYXBfbGV2ZWwpCiAK IAlBc3NlcnQoc25hcHNob3QtPnNuYXBzaG90X3R5cGUgPT0gU05BUFNIT1RfTVZDQyk7CiAJ b3JpZ3NuYXAgPSAmc25hcHNob3QtPm12Y2M7CisJQXNzZXJ0KG9yaWdzbmFwLT52YWxpZCk7 CiAKIAlBc3NlcnQoQWN0aXZlU25hcHNob3QgPT0gTlVMTCB8fCBzbmFwX2xldmVsID49IEFj dGl2ZVNuYXBzaG90LT5hc19sZXZlbCk7CiAKQEAgLTg0Nyw2ICs4NTEsNyBAQCBSZWdpc3Rl clNuYXBzaG90T25Pd25lcihTbmFwc2hvdCBvcmlnX3NuYXBzaG90LCBSZXNvdXJjZU93bmVy IG93bmVyKQogCiAJQXNzZXJ0KG9yaWdfc25hcHNob3QtPnNuYXBzaG90X3R5cGUgPT0gU05B UFNIT1RfTVZDQyk7CiAJc25hcHNob3QgPSAmb3JpZ19zbmFwc2hvdC0+bXZjYzsKKwlBc3Nl cnQoc25hcHNob3QtPnZhbGlkKTsKIAogCS8qIFN0YXRpYyBzbmFwc2hvdD8gIENyZWF0ZSBh IHBlcnNpc3RlbnQgY29weSAqLwogCXNuYXBzaG90ID0gc25hcHNob3QtPmNvcGllZCA/IHNu YXBzaG90IDogQ29weU1WQ0NTbmFwc2hvdChzbmFwc2hvdCk7CkBAIC05NjgsNiArOTczLDE1 IEBAIFNuYXBzaG90UmVzZXRYbWluKHZvaWQpCiB7CiAJTVZDQ1NuYXBzaG90IG1pblNuYXBz aG90OwogCisJLyoKKwkgKiBUaGVzZSBzdGF0aWMgc25hcHNob3RzIGFyZSBub3QgaW4gdGhl IFJlZ2lzdGVyZWRTbmFwc2hvdHMgbGlzdCwgc28gd2UKKwkgKiBtaWdodCBhZHZhbmNlIE15 UHJvYy0+eG1pbiBwYXN0IHRoZWlyIHhtaW4uIChOb3RlIHRoYXQgaW4gY2FzZSBvZgorCSAq IElzb2xhdGlvblVzZXNYYWN0U25hcHNob3QoKSA9PSB0cnVlLCBDdXJyZW50U25hcHNob3Qg cG9pbnRzIHRvIHRoZSBjb3B5CisJICogaW4gRmlyc3RTbmFwc2hvdCByYXRoZXIgdGhhbiBD dXJyZW50U25hcHNob3REYXRhLikKKwkgKi8KKwlDdXJyZW50U25hcHNob3REYXRhLnZhbGlk ID0gZmFsc2U7CisJU2Vjb25kYXJ5U25hcHNob3REYXRhLnZhbGlkID0gZmFsc2U7CisKIAlp ZiAoQWN0aXZlU25hcHNob3QgIT0gTlVMTCkKIAkJcmV0dXJuOwogCkBAIC0xODcxLDYgKzE4 ODUsNyBAQCBSZXN0b3JlU25hcHNob3QoY2hhciAqc3RhcnRfYWRkcmVzcykKIAlzbmFwc2hv dC0+cmVnZF9jb3VudCA9IDA7CiAJc25hcHNob3QtPmFjdGl2ZV9jb3VudCA9IDA7CiAJc25h cHNob3QtPmNvcGllZCA9IHRydWU7CisJc25hcHNob3QtPnZhbGlkID0gdHJ1ZTsKIAogCXJl dHVybiBzbmFwc2hvdDsKIH0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3NuYXBz aG90LmggYi9zcmMvaW5jbHVkZS91dGlscy9zbmFwc2hvdC5oCmluZGV4IGJjYTBhZDE2ZTY4 Li4xNjk3YzZkZjg1NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvdXRpbHMvc25hcHNob3Qu aAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9zbmFwc2hvdC5oCkBAIC0xNjEsNiArMTYxLDcg QEAgdHlwZWRlZiBzdHJ1Y3QgTVZDQ1NuYXBzaG90RGF0YQogCiAJYm9vbAkJdGFrZW5EdXJp bmdSZWNvdmVyeTsJLyogcmVjb3Zlcnktc2hhcGVkIHNuYXBzaG90PyAqLwogCWJvb2wJCWNv cGllZDsJCQkvKiBmYWxzZSBpZiBpdCdzIGEgc3RhdGljIHNuYXBzaG90ICovCisJYm9vbAkJ dmFsaWQ7CQkJLyogaXMgdGhpcyBzbmFwc2hvdCB2YWxpZD8gKi8KIAogCUNvbW1hbmRJZAlj dXJjaWQ7CQkJLyogaW4gbXkgeGFjdCwgQ0lEIDwgY3VyY2lkIGFyZSB2aXNpYmxlICovCiAK LS0gCjIuMzkuNQoK --------------nSXAXBhgWt0AUd9uE0wCc0X0 Content-Type: text/x-patch; charset=UTF-8; name="v6-0004-Replace-static-snapshot-pointers-with-the-valid-f.patch" Content-Disposition: attachment; filename*0="v6-0004-Replace-static-snapshot-pointers-with-the-valid-f.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA4Y2M4MTRkYzJlOWZlZjhmZWRhN2NjYTlhMGYyNTkxYzM3MWI4ZWNlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMzEgTWFyIDIwMjUgMjE6NDQ6NDMgKzAzMDAK U3ViamVjdDogW1BBVENIIHY2IDA0LzEyXSBSZXBsYWNlIHN0YXRpYyBzbmFwc2hvdCBwb2lu dGVycyB3aXRoIHRoZSAndmFsaWQnCiBmbGFncwoKUHJldmlvdXNseSwgd2UgdXNlZCB0aGUg cG9pbnRlcnMgbGlrZSBTZWNvbmRhcnlTbmFwc2hvdCBhbmQKQ2F0YWxvZ1NuYXBzaG90IHRv IGluZGljYXRlIHdoZXRoZXIgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGljIHNuYXBzaG90Cmlz IHZhbGlkIG9yIG5vdCwgYnV0IG5vdyB0aGF0IHdlIGhhdmUgYW4gZXhwbGljaXQgZmxhZyBp bgpNVkNDU25hcHNob3REYXRhIGZvciB0aGF0LCB3ZSByZXBsYWNlIGNoZWNrcyBsaWtlICJT ZWNvbmRhcnlTbmFwc2hvdAohPSBOVUxMIiB3aXRoICJTZWNvbmRhcnlTbmFwc2hvdERhdGEu dmFsaWQiLCBhbmQgZ2V0IHJpZCBvZiB0aGUKc2VwYXJhdGUgcG9pbnRlciB2YXJpYWJsZXMu CgpUaGUgc2l0dWF0aW9uIHdpdGggQ3VycmVudFNuYXBzaG90IHdhcyBhIGJpdCBtb3JlCmNv bXBsaWNhdGVkLiBVc3VhbGx5LCBpdCBwb2ludGVkIHRvIEN1cnJlbnRTbmFwc2hvdERhdGEs IGJ1dCBjb3VsZAphbHNvIHBvaW50IHRvIHRoZSBwYWxsb2MnZCBGaXJzdFhhY3RTbmFwc2hv dC4gVGhpcyBnZXRzIHJpZCBvZiB0aGUKcGFsbG9jJ2QgRmlyc3RYYWN0U25hcHNob3QsIGFu ZCBpbnN0ZWFkIHdlIGp1c3QgcmVmcmFpbiBmcm9tIG1vZGlmeWluZwpDdXJyZW50U25hcHNo b3REYXRhIHdoZW4gaW4gYSBzZXJpYWxpemFibGUgdHJhbnNhY3Rpb24uCi0tLQogc3JjL2Jh Y2tlbmQvdXRpbHMvdGltZS9zbmFwbWdyLmMgfCAxNDcgKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDcwIGluc2VydGlvbnMoKyksIDc3IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvdGltZS9zbmFwbWdyLmMKaW5kZXggNjllZDg2YjIxMDEu LmVhMWU3ZDE3YjA0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy90aW1lL3NuYXBt Z3IuYworKysgYi9zcmMvYmFja2VuZC91dGlscy90aW1lL3NuYXBtZ3IuYwpAQCAtNjcsOCAr NjcsOCBAQAogICogSW4gYWRkaXRpb24gdG8gc25hcHNob3RzIHB1c2hlZCB0byB0aGUgYWN0 aXZlIHNuYXBzaG90IHN0YWNrLCBhIHNuYXBzaG90CiAgKiBjYW4gYmUgcmVnaXN0ZXJlZCB3 aXRoIGEgcmVzb3VyY2Ugb3duZXIuCiAgKgotICogVGhlIEZpcnN0WGFjdFNuYXBzaG90LCBp ZiBhbnksIGlzIHRyZWF0ZWQgYSBiaXQgc3BlY2lhbGx5OiB3ZSBpbmNyZW1lbnQgaXRzCi0g KiByZWdkX2NvdW50IGFuZCBsaXN0IGl0IGluIFJlZ2lzdGVyZWRTbmFwc2hvdHMsIGJ1dCB0 aGlzIHJlZmVyZW5jZSBpcyBub3QKKyAqIElmIEZpcnN0WGFjdFNuYXBzaG90UmVnaXN0ZXJl ZCBpcyBzZXQsIHdlIGluY3JlbWVudCB0aGUgc3RhdGljCisgKiBDdXJyZW50U25hcHNob3RE YXRhJ3MgcmVnZF9jb3VudCBhbmQgbGlzdCBpdCBpbiBSZWdpc3RlcmVkU25hcHNob3RzLCBi dXQgdGhpcyByZWZlcmVuY2UgaXMgbm90CiAgKiB0cmFja2VkIGJ5IGEgcmVzb3VyY2Ugb3du ZXIuIFdlIHVzZWQgdG8gdXNlIHRoZSBUb3BUcmFuc2FjdGlvblJlc291cmNlT3duZXIKICAq IHRvIHRyYWNrIHRoaXMgc25hcHNob3QgcmVmZXJlbmNlLCBidXQgdGhhdCBpbnRyb2R1Y2Vz IGxvZ2ljYWwgY2lyY3VsYXJpdHkKICAqIGFuZCB0aHVzIG1ha2VzIGl0IGltcG9zc2libGUg dG8gY2xlYW4gdXAgaW4gYSBzYW5lIGZhc2hpb24uICBJdCdzIGJldHRlciB0bwpAQCAtMTQ1 LDkgKzE0NSw2IEBAIFNuYXBzaG90RGF0YSBTbmFwc2hvdEFueURhdGEgPSB7U05BUFNIT1Rf QU5ZfTsKIFNuYXBzaG90RGF0YSBTbmFwc2hvdFRvYXN0RGF0YSA9IHtTTkFQU0hPVF9UT0FT VH07CiAKIC8qIFBvaW50ZXJzIHRvIHZhbGlkIHNuYXBzaG90cyAqLwotc3RhdGljIE1WQ0NT bmFwc2hvdCBDdXJyZW50U25hcHNob3QgPSBOVUxMOwotc3RhdGljIE1WQ0NTbmFwc2hvdCBT ZWNvbmRhcnlTbmFwc2hvdCA9IE5VTEw7Ci1zdGF0aWMgTVZDQ1NuYXBzaG90IENhdGFsb2dT bmFwc2hvdCA9IE5VTEw7CiBzdGF0aWMgSGlzdG9yaWNNVkNDU25hcHNob3QgSGlzdG9yaWNT bmFwc2hvdCA9IE5VTEw7CiAKIC8qCkBAIC0xOTYsNyArMTkzLDcgQEAgYm9vbAkJRmlyc3RT bmFwc2hvdFNldCA9IGZhbHNlOwogICogRmlyc3RTbmFwc2hvdFNldCBpbiBjb21iaW5hdGlv biB3aXRoIElzb2xhdGlvblVzZXNYYWN0U25hcHNob3QoKSwgYmVjYXVzZQogICogR1VDIG1h eSBiZSByZXNldCBiZWZvcmUgdXMsIGNoYW5naW5nIHRoZSB2YWx1ZSBvZiBJc29sYXRpb25V c2VzWGFjdFNuYXBzaG90LgogICovCi1zdGF0aWMgTVZDQ1NuYXBzaG90IEZpcnN0WGFjdFNu YXBzaG90ID0gTlVMTDsKK3N0YXRpYyBib29sIEZpcnN0WGFjdFNuYXBzaG90UmVnaXN0ZXJl ZCA9IGZhbHNlOwogCiAvKiBEZWZpbmUgcGF0aG5hbWUgb2YgZXhwb3J0ZWQtc25hcHNob3Qg ZmlsZXMgKi8KICNkZWZpbmUgU05BUFNIT1RfRVhQT1JUX0RJUiAicGdfc25hcHNob3RzIgpA QCAtMjg4LDcgKzI4NSw3IEBAIEdldFRyYW5zYWN0aW9uU25hcHNob3Qodm9pZCkKIAkJSW52 YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOwogCiAJCUFzc2VydChwYWlyaW5naGVhcF9pc19l bXB0eSgmUmVnaXN0ZXJlZFNuYXBzaG90cykpOwotCQlBc3NlcnQoRmlyc3RYYWN0U25hcHNo b3QgPT0gTlVMTCk7CisJCUFzc2VydCghRmlyc3RYYWN0U25hcHNob3RSZWdpc3RlcmVkKTsK IAogCQlpZiAoSXNJblBhcmFsbGVsTW9kZSgpKQogCQkJZWxvZyhFUlJPUiwKQEAgLTI5Niw0 MiArMjkzLDQ0IEBAIEdldFRyYW5zYWN0aW9uU25hcHNob3Qodm9pZCkKIAogCQkvKgogCQkg KiBJbiB0cmFuc2FjdGlvbi1zbmFwc2hvdCBtb2RlLCB0aGUgZmlyc3Qgc25hcHNob3QgbXVz dCBsaXZlIHVudGlsCi0JCSAqIGVuZCBvZiB4YWN0IHJlZ2FyZGxlc3Mgb2Ygd2hhdCB0aGUg Y2FsbGVyIGRvZXMgd2l0aCBpdCwgc28gd2UgbXVzdAotCQkgKiBtYWtlIGEgY29weSBvZiBp dCByYXRoZXIgdGhhbiByZXR1cm5pbmcgQ3VycmVudFNuYXBzaG90RGF0YQotCQkgKiBkaXJl Y3RseS4gIEZ1cnRoZXJtb3JlLCBpZiB3ZSdyZSBydW5uaW5nIGluIHNlcmlhbGl6YWJsZSBt b2RlLAotCQkgKiBwcmVkaWNhdGUuYyBuZWVkcyB0byB3cmFwIHRoZSBzbmFwc2hvdCBmZXRj aCBpbiBpdHMgb3duIHByb2Nlc3NpbmcuCisJCSAqIGVuZCBvZiB4YWN0IHJlZ2FyZGxlc3Mg b2Ygd2hhdCB0aGUgY2FsbGVyIGRvZXMgd2l0aCBpdCwgc28gd2Uga2VlcAorCQkgKiBpdCBp biBSZWdpc3RlcmVkU25hcHNob3RzIGV2ZW4gdGhvdWdoIGl0J3Mgbm90IHRyYWNrZWQgYnkg YW55CisJCSAqIHJlc291cmNlIG93bmVyLiAgRnVydGhlcm1vcmUsIGlmIHdlJ3JlIHJ1bm5p bmcgaW4gc2VyaWFsaXphYmxlCisJCSAqIG1vZGUsIHByZWRpY2F0ZS5jIG5lZWRzIHRvIHdy YXAgdGhlIHNuYXBzaG90IGZldGNoIGluIGl0cyBvd24KKwkJICogcHJvY2Vzc2luZy4KIAkJ ICovCiAJCWlmIChJc29sYXRpb25Vc2VzWGFjdFNuYXBzaG90KCkpCiAJCXsKIAkJCS8qIEZp cnN0LCBjcmVhdGUgdGhlIHNuYXBzaG90IGluIEN1cnJlbnRTbmFwc2hvdERhdGEgKi8KIAkJ CWlmIChJc29sYXRpb25Jc1NlcmlhbGl6YWJsZSgpKQotCQkJCUN1cnJlbnRTbmFwc2hvdCA9 IEdldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3QoJkN1cnJlbnRTbmFwc2hvdERh dGEpOworCQkJCUdldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3QoJkN1cnJlbnRT bmFwc2hvdERhdGEpOwogCQkJZWxzZQotCQkJCUN1cnJlbnRTbmFwc2hvdCA9IEdldFNuYXBz aG90RGF0YSgmQ3VycmVudFNuYXBzaG90RGF0YSk7Ci0KLQkJCS8qIE1ha2UgYSBzYXZlZCBj b3B5ICovCi0JCQlDdXJyZW50U25hcHNob3QgPSBDb3B5TVZDQ1NuYXBzaG90KEN1cnJlbnRT bmFwc2hvdCk7Ci0JCQlGaXJzdFhhY3RTbmFwc2hvdCA9IEN1cnJlbnRTbmFwc2hvdDsKLQkJ CS8qIE1hcmsgaXQgYXMgInJlZ2lzdGVyZWQiIGluIEZpcnN0WGFjdFNuYXBzaG90ICovCi0J CQlGaXJzdFhhY3RTbmFwc2hvdC0+cmVnZF9jb3VudCsrOwotCQkJcGFpcmluZ2hlYXBfYWRk KCZSZWdpc3RlcmVkU25hcHNob3RzLCAmRmlyc3RYYWN0U25hcHNob3QtPnBoX25vZGUpOwor CQkJCUdldFNuYXBzaG90RGF0YSgmQ3VycmVudFNuYXBzaG90RGF0YSk7CisKKwkJCS8qIE1h cmsgaXQgYXMgInJlZ2lzdGVyZWQiICovCisJCQlDdXJyZW50U25hcHNob3REYXRhLnJlZ2Rf Y291bnQrKzsKKwkJCUZpcnN0WGFjdFNuYXBzaG90UmVnaXN0ZXJlZCA9IHRydWU7CisJCQlw YWlyaW5naGVhcF9hZGQoJlJlZ2lzdGVyZWRTbmFwc2hvdHMsICZDdXJyZW50U25hcHNob3RE YXRhLnBoX25vZGUpOwogCQl9CiAJCWVsc2UKLQkJCUN1cnJlbnRTbmFwc2hvdCA9IEdldFNu YXBzaG90RGF0YSgmQ3VycmVudFNuYXBzaG90RGF0YSk7CisJCQlHZXRTbmFwc2hvdERhdGEo JkN1cnJlbnRTbmFwc2hvdERhdGEpOwogCiAJCUZpcnN0U25hcHNob3RTZXQgPSB0cnVlOwot CQlyZXR1cm4gKFNuYXBzaG90KSBDdXJyZW50U25hcHNob3Q7CisJCXJldHVybiAoU25hcHNo b3QpICZDdXJyZW50U25hcHNob3REYXRhOwogCX0KIAogCWlmIChJc29sYXRpb25Vc2VzWGFj dFNuYXBzaG90KCkpCi0JCXJldHVybiAoU25hcHNob3QpIEN1cnJlbnRTbmFwc2hvdDsKKwl7 CisJCUFzc2VydChDdXJyZW50U25hcHNob3REYXRhLnZhbGlkKTsKKwkJcmV0dXJuIChTbmFw c2hvdCkgJkN1cnJlbnRTbmFwc2hvdERhdGE7CisJfQogCiAJLyogRG9uJ3QgYWxsb3cgY2F0 YWxvZyBzbmFwc2hvdCB0byBiZSBvbGRlciB0aGFuIHhhY3Qgc25hcHNob3QuICovCiAJSW52 YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOwogCi0JQ3VycmVudFNuYXBzaG90ID0gR2V0U25h cHNob3REYXRhKCZDdXJyZW50U25hcHNob3REYXRhKTsKKwlHZXRTbmFwc2hvdERhdGEoJkN1 cnJlbnRTbmFwc2hvdERhdGEpOwogCi0JcmV0dXJuIChTbmFwc2hvdCkgQ3VycmVudFNuYXBz aG90OworCXJldHVybiAoU25hcHNob3QpICZDdXJyZW50U25hcHNob3REYXRhOwogfQogCiAv KgpAQCAtMzYwLDkgKzM1OSw5IEBAIEdldExhdGVzdFNuYXBzaG90KHZvaWQpCiAJaWYgKCFG aXJzdFNuYXBzaG90U2V0KQogCQlyZXR1cm4gR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpOwog Ci0JU2Vjb25kYXJ5U25hcHNob3QgPSBHZXRTbmFwc2hvdERhdGEoJlNlY29uZGFyeVNuYXBz aG90RGF0YSk7CisJR2V0U25hcHNob3REYXRhKCZTZWNvbmRhcnlTbmFwc2hvdERhdGEpOwog Ci0JcmV0dXJuIChTbmFwc2hvdCkgU2Vjb25kYXJ5U25hcHNob3Q7CisJcmV0dXJuIChTbmFw c2hvdCkgJlNlY29uZGFyeVNuYXBzaG90RGF0YTsKIH0KIAogLyoKQEAgLTQwMiwxNSArNDAx LDE1IEBAIEdldE5vbkhpc3RvcmljQ2F0YWxvZ1NuYXBzaG90KE9pZCByZWxpZCkKIAkgKiBz Y2FuIGEgcmVsYXRpb24gZm9yIHdoaWNoIG5laXRoZXIgY2F0Y2FjaGUgbm9yIHNuYXBzaG90 IGludmFsaWRhdGlvbnMKIAkgKiBhcmUgc2VudCwgd2UgbXVzdCByZWZyZXNoIHRoZSBzbmFw c2hvdCBldmVyeSB0aW1lLgogCSAqLwotCWlmIChDYXRhbG9nU25hcHNob3QgJiYKKwlpZiAo Q2F0YWxvZ1NuYXBzaG90RGF0YS52YWxpZCAmJgogCQkhUmVsYXRpb25JbnZhbGlkYXRlc1Nu YXBzaG90c09ubHkocmVsaWQpICYmCiAJCSFSZWxhdGlvbkhhc1N5c0NhY2hlKHJlbGlkKSkK IAkJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOwogCi0JaWYgKENhdGFsb2dTbmFwc2hv dCA9PSBOVUxMKQorCWlmICghQ2F0YWxvZ1NuYXBzaG90RGF0YS52YWxpZCkKIAl7CiAJCS8q IEdldCBuZXcgc25hcHNob3QuICovCi0JCUNhdGFsb2dTbmFwc2hvdCA9IEdldFNuYXBzaG90 RGF0YSgmQ2F0YWxvZ1NuYXBzaG90RGF0YSk7CisJCUdldFNuYXBzaG90RGF0YSgmQ2F0YWxv Z1NuYXBzaG90RGF0YSk7CiAKIAkJLyoKIAkJICogTWFrZSBzdXJlIHRoZSBjYXRhbG9nIHNu YXBzaG90IHdpbGwgYmUgYWNjb3VudGVkIGZvciBpbiBkZWNpc2lvbnMKQEAgLTQyNCwxMCAr NDIzLDEwIEBAIEdldE5vbkhpc3RvcmljQ2F0YWxvZ1NuYXBzaG90KE9pZCByZWxpZCkKIAkJ ICogTkI6IGl0IGhhZCBiZXR0ZXIgYmUgaW1wb3NzaWJsZSBmb3IgdGhpcyB0byB0aHJvdyBl cnJvciwgc2luY2UgdGhlCiAJCSAqIENhdGFsb2dTbmFwc2hvdCBwb2ludGVyIGlzIGFscmVh ZHkgdmFsaWQuCiAJCSAqLwotCQlwYWlyaW5naGVhcF9hZGQoJlJlZ2lzdGVyZWRTbmFwc2hv dHMsICZDYXRhbG9nU25hcHNob3QtPnBoX25vZGUpOworCQlwYWlyaW5naGVhcF9hZGQoJlJl Z2lzdGVyZWRTbmFwc2hvdHMsICZDYXRhbG9nU25hcHNob3REYXRhLnBoX25vZGUpOwogCX0K IAotCXJldHVybiAoU25hcHNob3QpIENhdGFsb2dTbmFwc2hvdDsKKwlyZXR1cm4gKFNuYXBz aG90KSAmQ2F0YWxvZ1NuYXBzaG90RGF0YTsKIH0KIAogLyoKQEAgLTQ0MywxMCArNDQyLDkg QEAgR2V0Tm9uSGlzdG9yaWNDYXRhbG9nU25hcHNob3QoT2lkIHJlbGlkKQogdm9pZAogSW52 YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCh2b2lkKQogewotCWlmIChDYXRhbG9nU25hcHNob3Qp CisJaWYgKENhdGFsb2dTbmFwc2hvdERhdGEudmFsaWQpCiAJewotCQlwYWlyaW5naGVhcF9y ZW1vdmUoJlJlZ2lzdGVyZWRTbmFwc2hvdHMsICZDYXRhbG9nU25hcHNob3QtPnBoX25vZGUp OwotCQlDYXRhbG9nU25hcHNob3QgPSBOVUxMOworCQlwYWlyaW5naGVhcF9yZW1vdmUoJlJl Z2lzdGVyZWRTbmFwc2hvdHMsICZDYXRhbG9nU25hcHNob3REYXRhLnBoX25vZGUpOwogCQlD YXRhbG9nU25hcHNob3REYXRhLnZhbGlkID0gZmFsc2U7CiAJCVNuYXBzaG90UmVzZXRYbWlu KCk7CiAJfQpAQCAtNDY1LDcgKzQ2Myw3IEBAIEludmFsaWRhdGVDYXRhbG9nU25hcHNob3Qo dm9pZCkKIHZvaWQKIEludmFsaWRhdGVDYXRhbG9nU25hcHNob3RDb25kaXRpb25hbGx5KHZv aWQpCiB7Ci0JaWYgKENhdGFsb2dTbmFwc2hvdCAmJgorCWlmIChDYXRhbG9nU25hcHNob3RE YXRhLnZhbGlkICYmCiAJCUFjdGl2ZVNuYXBzaG90ID09IE5VTEwgJiYKIAkJcGFpcmluZ2hl YXBfaXNfc2luZ3VsYXIoJlJlZ2lzdGVyZWRTbmFwc2hvdHMpKQogCQlJbnZhbGlkYXRlQ2F0 YWxvZ1NuYXBzaG90KCk7CkBAIC00ODEsMTAgKzQ3OSwxMCBAQCBTbmFwc2hvdFNldENvbW1h bmRJZChDb21tYW5kSWQgY3VyY2lkKQogCWlmICghRmlyc3RTbmFwc2hvdFNldCkKIAkJcmV0 dXJuOwogCi0JaWYgKEN1cnJlbnRTbmFwc2hvdCkKLQkJQ3VycmVudFNuYXBzaG90LT5jdXJj aWQgPSBjdXJjaWQ7Ci0JaWYgKFNlY29uZGFyeVNuYXBzaG90KQotCQlTZWNvbmRhcnlTbmFw c2hvdC0+Y3VyY2lkID0gY3VyY2lkOworCWlmIChDdXJyZW50U25hcHNob3REYXRhLnZhbGlk KQorCQlDdXJyZW50U25hcHNob3REYXRhLmN1cmNpZCA9IGN1cmNpZDsKKwlpZiAoU2Vjb25k YXJ5U25hcHNob3REYXRhLnZhbGlkKQorCQlTZWNvbmRhcnlTbmFwc2hvdERhdGEuY3VyY2lk ID0gY3VyY2lkOwogCS8qIFNob3VsZCB3ZSBkbyB0aGUgc2FtZSB3aXRoIENhdGFsb2dTbmFw c2hvdD8gKi8KIH0KIApAQCAtNTA3LDcgKzUwNSw3IEBAIFNldFRyYW5zYWN0aW9uU25hcHNo b3QoTVZDQ1NuYXBzaG90IHNvdXJjZXNuYXAsIFZpcnR1YWxUcmFuc2FjdGlvbklkICpzb3Vy Y2V2eGlkCiAJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOwogCiAJQXNzZXJ0KHBhaXJp bmdoZWFwX2lzX2VtcHR5KCZSZWdpc3RlcmVkU25hcHNob3RzKSk7Ci0JQXNzZXJ0KEZpcnN0 WGFjdFNuYXBzaG90ID09IE5VTEwpOworCUFzc2VydCghRmlyc3RYYWN0U25hcHNob3RSZWdp c3RlcmVkKTsKIAlBc3NlcnQoIUhpc3RvcmljU25hcHNob3RBY3RpdmUoKSk7CiAKIAkvKgpA QCAtNTE2LDI4ICs1MTQsMjggQEAgU2V0VHJhbnNhY3Rpb25TbmFwc2hvdChNVkNDU25hcHNo b3Qgc291cmNlc25hcCwgVmlydHVhbFRyYW5zYWN0aW9uSWQgKnNvdXJjZXZ4aWQKIAkgKiBD dXJyZW50U25hcHNob3REYXRhJ3MgWElEIGFycmF5cyBoYXZlIGJlZW4gYWxsb2NhdGVkLCBh bmQgKDIpIHRvIHVwZGF0ZQogCSAqIHRoZSBzdGF0ZSBmb3IgR2xvYmFsVmlzKi4KIAkgKi8K LQlDdXJyZW50U25hcHNob3QgPSBHZXRTbmFwc2hvdERhdGEoJkN1cnJlbnRTbmFwc2hvdERh dGEpOworCUdldFNuYXBzaG90RGF0YSgmQ3VycmVudFNuYXBzaG90RGF0YSk7CiAKIAkvKgog CSAqIE5vdyBjb3B5IGFwcHJvcHJpYXRlIGZpZWxkcyBmcm9tIHRoZSBzb3VyY2Ugc25hcHNo b3QuCiAJICovCi0JQ3VycmVudFNuYXBzaG90LT54bWluID0gc291cmNlc25hcC0+eG1pbjsK LQlDdXJyZW50U25hcHNob3QtPnhtYXggPSBzb3VyY2VzbmFwLT54bWF4OwotCUN1cnJlbnRT bmFwc2hvdC0+eGNudCA9IHNvdXJjZXNuYXAtPnhjbnQ7CisJQ3VycmVudFNuYXBzaG90RGF0 YS54bWluID0gc291cmNlc25hcC0+eG1pbjsKKwlDdXJyZW50U25hcHNob3REYXRhLnhtYXgg PSBzb3VyY2VzbmFwLT54bWF4OworCUN1cnJlbnRTbmFwc2hvdERhdGEueGNudCA9IHNvdXJj ZXNuYXAtPnhjbnQ7CiAJQXNzZXJ0KHNvdXJjZXNuYXAtPnhjbnQgPD0gR2V0TWF4U25hcHNo b3RYaWRDb3VudCgpKTsKIAlpZiAoc291cmNlc25hcC0+eGNudCA+IDApCi0JCW1lbWNweShD dXJyZW50U25hcHNob3QtPnhpcCwgc291cmNlc25hcC0+eGlwLAorCQltZW1jcHkoQ3VycmVu dFNuYXBzaG90RGF0YS54aXAsIHNvdXJjZXNuYXAtPnhpcCwKIAkJCSAgIHNvdXJjZXNuYXAt PnhjbnQgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCkpOwotCUN1cnJlbnRTbmFwc2hvdC0+c3Vi eGNudCA9IHNvdXJjZXNuYXAtPnN1YnhjbnQ7CisJQ3VycmVudFNuYXBzaG90RGF0YS5zdWJ4 Y250ID0gc291cmNlc25hcC0+c3VieGNudDsKIAlBc3NlcnQoc291cmNlc25hcC0+c3VieGNu dCA8PSBHZXRNYXhTbmFwc2hvdFN1YnhpZENvdW50KCkpOwogCWlmIChzb3VyY2VzbmFwLT5z dWJ4Y250ID4gMCkKLQkJbWVtY3B5KEN1cnJlbnRTbmFwc2hvdC0+c3VieGlwLCBzb3VyY2Vz bmFwLT5zdWJ4aXAsCisJCW1lbWNweShDdXJyZW50U25hcHNob3REYXRhLnN1YnhpcCwgc291 cmNlc25hcC0+c3VieGlwLAogCQkJICAgc291cmNlc25hcC0+c3VieGNudCAqIHNpemVvZihU cmFuc2FjdGlvbklkKSk7Ci0JQ3VycmVudFNuYXBzaG90LT5zdWJvdmVyZmxvd2VkID0gc291 cmNlc25hcC0+c3Vib3ZlcmZsb3dlZDsKLQlDdXJyZW50U25hcHNob3QtPnRha2VuRHVyaW5n UmVjb3ZlcnkgPSBzb3VyY2VzbmFwLT50YWtlbkR1cmluZ1JlY292ZXJ5OworCUN1cnJlbnRT bmFwc2hvdERhdGEuc3Vib3ZlcmZsb3dlZCA9IHNvdXJjZXNuYXAtPnN1Ym92ZXJmbG93ZWQ7 CisJQ3VycmVudFNuYXBzaG90RGF0YS50YWtlbkR1cmluZ1JlY292ZXJ5ID0gc291cmNlc25h cC0+dGFrZW5EdXJpbmdSZWNvdmVyeTsKIAkvKiBOQjogY3VyY2lkIHNob3VsZCBOT1QgYmUg Y29waWVkLCBpdCdzIGEgbG9jYWwgbWF0dGVyICovCiAKLQlDdXJyZW50U25hcHNob3QtPnNu YXBYYWN0Q29tcGxldGlvbkNvdW50ID0gMDsKKwlDdXJyZW50U25hcHNob3REYXRhLnNuYXBY YWN0Q29tcGxldGlvbkNvdW50ID0gMDsKIAogCS8qCiAJICogTm93IHdlIGhhdmUgdG8gZml4 IHdoYXQgR2V0U25hcHNob3REYXRhIGRpZCB3aXRoIE15UHJvYy0+eG1pbiBhbmQKQEAgLTU1 MiwxMyArNTUwLDEzIEBAIFNldFRyYW5zYWN0aW9uU25hcHNob3QoTVZDQ1NuYXBzaG90IHNv dXJjZXNuYXAsIFZpcnR1YWxUcmFuc2FjdGlvbklkICpzb3VyY2V2eGlkCiAJICovCiAJaWYg KHNvdXJjZXByb2MgIT0gTlVMTCkKIAl7Ci0JCWlmICghUHJvY0FycmF5SW5zdGFsbFJlc3Rv cmVkWG1pbihDdXJyZW50U25hcHNob3QtPnhtaW4sIHNvdXJjZXByb2MpKQorCQlpZiAoIVBy b2NBcnJheUluc3RhbGxSZXN0b3JlZFhtaW4oQ3VycmVudFNuYXBzaG90RGF0YS54bWluLCBz b3VyY2Vwcm9jKSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVf T0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAogCQkJCQkgZXJybXNnKCJjb3Vs ZCBub3QgaW1wb3J0IHRoZSByZXF1ZXN0ZWQgc25hcHNob3QiKSwKIAkJCQkJIGVycmRldGFp bCgiVGhlIHNvdXJjZSB0cmFuc2FjdGlvbiBpcyBub3QgcnVubmluZyBhbnltb3JlLiIpKSk7 CiAJfQotCWVsc2UgaWYgKCFQcm9jQXJyYXlJbnN0YWxsSW1wb3J0ZWRYbWluKEN1cnJlbnRT bmFwc2hvdC0+eG1pbiwgc291cmNldnhpZCkpCisJZWxzZSBpZiAoIVByb2NBcnJheUluc3Rh bGxJbXBvcnRlZFhtaW4oQ3VycmVudFNuYXBzaG90RGF0YS54bWluLCBzb3VyY2V2eGlkKSkK IAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5f UFJFUkVRVUlTSVRFX1NUQVRFKSwKIAkJCQkgZXJybXNnKCJjb3VsZCBub3QgaW1wb3J0IHRo ZSByZXF1ZXN0ZWQgc25hcHNob3QiKSwKQEAgLTU2NywyMCArNTY1LDE5IEBAIFNldFRyYW5z YWN0aW9uU25hcHNob3QoTVZDQ1NuYXBzaG90IHNvdXJjZXNuYXAsIFZpcnR1YWxUcmFuc2Fj dGlvbklkICpzb3VyY2V2eGlkCiAKIAkvKgogCSAqIEluIHRyYW5zYWN0aW9uLXNuYXBzaG90 IG1vZGUsIHRoZSBmaXJzdCBzbmFwc2hvdCBtdXN0IGxpdmUgdW50aWwgZW5kIG9mCi0JICog eGFjdCwgc28gd2UgbXVzdCBtYWtlIGEgY29weSBvZiBpdC4gIEZ1cnRoZXJtb3JlLCBpZiB3 ZSdyZSBydW5uaW5nIGluCi0JICogc2VyaWFsaXphYmxlIG1vZGUsIHByZWRpY2F0ZS5jIG5l ZWRzIHRvIGRvIGl0cyBvd24gcHJvY2Vzc2luZy4KKwkgKiB4YWN0LCBzbyB3ZSBpbmNsdWRl IGl0IGluIFJlZ2lzdGVyZWRTbmFwc2hvdHMuICBGdXJ0aGVybW9yZSwgaWYgd2UncmUKKwkg KiBydW5uaW5nIGluIHNlcmlhbGl6YWJsZSBtb2RlLCBwcmVkaWNhdGUuYyBuZWVkcyB0byBk byBpdHMgb3duCisJICogcHJvY2Vzc2luZy4KIAkgKi8KIAlpZiAoSXNvbGF0aW9uVXNlc1hh Y3RTbmFwc2hvdCgpKQogCXsKIAkJaWYgKElzb2xhdGlvbklzU2VyaWFsaXphYmxlKCkpCi0J CQlTZXRTZXJpYWxpemFibGVUcmFuc2FjdGlvblNuYXBzaG90KEN1cnJlbnRTbmFwc2hvdCwg c291cmNldnhpZCwKKwkJCVNldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3QoJkN1 cnJlbnRTbmFwc2hvdERhdGEsIHNvdXJjZXZ4aWQsCiAJCQkJCQkJCQkJCSAgIHNvdXJjZXBp ZCk7Ci0JCS8qIE1ha2UgYSBzYXZlZCBjb3B5ICovCi0JCUN1cnJlbnRTbmFwc2hvdCA9IENv cHlNVkNDU25hcHNob3QoQ3VycmVudFNuYXBzaG90KTsKLQkJRmlyc3RYYWN0U25hcHNob3Qg PSBDdXJyZW50U25hcHNob3Q7Ci0JCS8qIE1hcmsgaXQgYXMgInJlZ2lzdGVyZWQiIGluIEZp cnN0WGFjdFNuYXBzaG90ICovCi0JCUZpcnN0WGFjdFNuYXBzaG90LT5yZWdkX2NvdW50Kys7 Ci0JCXBhaXJpbmdoZWFwX2FkZCgmUmVnaXN0ZXJlZFNuYXBzaG90cywgJkZpcnN0WGFjdFNu YXBzaG90LT5waF9ub2RlKTsKKwkJLyogTWFyayBpdCBhcyAicmVnaXN0ZXJlZCIgKi8KKwkJ Rmlyc3RYYWN0U25hcHNob3RSZWdpc3RlcmVkID0gdHJ1ZTsKKwkJQ3VycmVudFNuYXBzaG90 RGF0YS5yZWdkX2NvdW50Kys7CisJCXBhaXJpbmdoZWFwX2FkZCgmUmVnaXN0ZXJlZFNuYXBz aG90cywgJkN1cnJlbnRTbmFwc2hvdERhdGEucGhfbm9kZSk7CiAJfQogCiAJRmlyc3RTbmFw c2hvdFNldCA9IHRydWU7CkBAIC03MDEsOCArNjk4LDcgQEAgUHVzaEFjdGl2ZVNuYXBzaG90 V2l0aExldmVsKFNuYXBzaG90IHNuYXBzaG90LCBpbnQgc25hcF9sZXZlbCkKIAkgKiBDaGVj a2luZyBTZWNvbmRhcnlTbmFwc2hvdCBpcyBwcm9iYWJseSB1c2VsZXNzIGhlcmUsIGJ1dCBp dCBzZWVtcwogCSAqIGJldHRlciB0byBiZSBzdXJlLgogCSAqLwotCWlmIChvcmlnc25hcCA9 PSBDdXJyZW50U25hcHNob3QgfHwgb3JpZ3NuYXAgPT0gU2Vjb25kYXJ5U25hcHNob3QgfHwK LQkJIW9yaWdzbmFwLT5jb3BpZWQpCisJaWYgKCFvcmlnc25hcC0+Y29waWVkKQogCQluZXdh Y3RpdmUtPmFzX3NuYXAgPSBDb3B5TVZDQ1NuYXBzaG90KG9yaWdzbmFwKTsKIAllbHNlCiAJ CW5ld2FjdGl2ZS0+YXNfc25hcCA9IG9yaWdzbmFwOwpAQCAtOTc0LDEyICs5NzAsMTAgQEAg U25hcHNob3RSZXNldFhtaW4odm9pZCkKIAlNVkNDU25hcHNob3QgbWluU25hcHNob3Q7CiAK IAkvKgotCSAqIFRoZXNlIHN0YXRpYyBzbmFwc2hvdHMgYXJlIG5vdCBpbiB0aGUgUmVnaXN0 ZXJlZFNuYXBzaG90cyBsaXN0LCBzbyB3ZQotCSAqIG1pZ2h0IGFkdmFuY2UgTXlQcm9jLT54 bWluIHBhc3QgdGhlaXIgeG1pbi4gKE5vdGUgdGhhdCBpbiBjYXNlIG9mCi0JICogSXNvbGF0 aW9uVXNlc1hhY3RTbmFwc2hvdCgpID09IHRydWUsIEN1cnJlbnRTbmFwc2hvdCBwb2ludHMg dG8gdGhlIGNvcHkKLQkgKiBpbiBGaXJzdFNuYXBzaG90IHJhdGhlciB0aGFuIEN1cnJlbnRT bmFwc2hvdERhdGEuKQorCSAqIEludmFsaWRhdGUgdGhlc2Ugc3RhdGljIHNuYXBzaG90cyBz byB0aGF0IHdlIGNhbiBhZHZhbmNlIHhtaW4uCiAJICovCi0JQ3VycmVudFNuYXBzaG90RGF0 YS52YWxpZCA9IGZhbHNlOworCWlmICghRmlyc3RYYWN0U25hcHNob3RSZWdpc3RlcmVkKQor CQlDdXJyZW50U25hcHNob3REYXRhLnZhbGlkID0gZmFsc2U7CiAJU2Vjb25kYXJ5U25hcHNo b3REYXRhLnZhbGlkID0gZmFsc2U7CiAKIAlpZiAoQWN0aXZlU25hcHNob3QgIT0gTlVMTCkK QEAgLTEwNjgsMTMgKzEwNjIsMTMgQEAgQXRFT1hhY3RfU25hcHNob3QoYm9vbCBpc0NvbW1p dCwgYm9vbCByZXNldFhtaW4pCiAJICogc3RhY2tlZCBhcyBhY3RpdmUsIHdlIGRvbid0IHdh bnQgdGhlIGNvZGUgYmVsb3cgdG8gYmUgY2hhc2luZyB0aHJvdWdoIGEKIAkgKiBkYW5nbGlu ZyBwb2ludGVyLgogCSAqLwotCWlmIChGaXJzdFhhY3RTbmFwc2hvdCAhPSBOVUxMKQorCWlm IChGaXJzdFhhY3RTbmFwc2hvdFJlZ2lzdGVyZWQpCiAJewotCQlBc3NlcnQoRmlyc3RYYWN0 U25hcHNob3QtPnJlZ2RfY291bnQgPiAwKTsKKwkJQXNzZXJ0KEN1cnJlbnRTbmFwc2hvdERh dGEucmVnZF9jb3VudCA+IDApOwogCQlBc3NlcnQoIXBhaXJpbmdoZWFwX2lzX2VtcHR5KCZS ZWdpc3RlcmVkU25hcHNob3RzKSk7Ci0JCXBhaXJpbmdoZWFwX3JlbW92ZSgmUmVnaXN0ZXJl ZFNuYXBzaG90cywgJkZpcnN0WGFjdFNuYXBzaG90LT5waF9ub2RlKTsKKwkJcGFpcmluZ2hl YXBfcmVtb3ZlKCZSZWdpc3RlcmVkU25hcHNob3RzLCAmQ3VycmVudFNuYXBzaG90RGF0YS5w aF9ub2RlKTsKKwkJRmlyc3RYYWN0U25hcHNob3RSZWdpc3RlcmVkID0gZmFsc2U7CiAJfQot CUZpcnN0WGFjdFNuYXBzaG90ID0gTlVMTDsKIAogCS8qCiAJICogSWYgd2UgZXhwb3J0ZWQg YW55IHNuYXBzaG90cywgY2xlYW4gdGhlbSB1cC4KQEAgLTExMzIsOSArMTEyNiw4IEBAIEF0 RU9YYWN0X1NuYXBzaG90KGJvb2wgaXNDb21taXQsIGJvb2wgcmVzZXRYbWluKQogCUFjdGl2 ZVNuYXBzaG90ID0gTlVMTDsKIAlwYWlyaW5naGVhcF9yZXNldCgmUmVnaXN0ZXJlZFNuYXBz aG90cyk7CiAKLQlDdXJyZW50U25hcHNob3QgPSBOVUxMOwotCVNlY29uZGFyeVNuYXBzaG90 ID0gTlVMTDsKLQorCUN1cnJlbnRTbmFwc2hvdERhdGEudmFsaWQgPSBmYWxzZTsKKwlTZWNv bmRhcnlTbmFwc2hvdERhdGEudmFsaWQgPSBmYWxzZTsKIAlGaXJzdFNuYXBzaG90U2V0ID0g ZmFsc2U7CiAKIAkvKgpAQCAtMTY5NSw3ICsxNjg4LDcgQEAgSGF2ZVJlZ2lzdGVyZWRPckFj dGl2ZVNuYXBzaG90KHZvaWQpCiAJICogcmVtb3ZlZCBhdCBhbnkgdGltZSBkdWUgdG8gaW52 YWxpZGF0aW9uIHByb2Nlc3NpbmcuIElmIGV4cGxpY2l0bHkKIAkgKiByZWdpc3RlcmVkIG1v cmUgdGhhbiBvbmUgc25hcHNob3QgaGFzIHRvIGJlIGluIFJlZ2lzdGVyZWRTbmFwc2hvdHMu CiAJICovCi0JaWYgKENhdGFsb2dTbmFwc2hvdCAhPSBOVUxMICYmCisJaWYgKENhdGFsb2dT bmFwc2hvdERhdGEudmFsaWQgJiYKIAkJcGFpcmluZ2hlYXBfaXNfc2luZ3VsYXIoJlJlZ2lz dGVyZWRTbmFwc2hvdHMpKQogCQlyZXR1cm4gZmFsc2U7CiAKLS0gCjIuMzkuNQoK --------------nSXAXBhgWt0AUd9uE0wCc0X0 Content-Type: text/x-patch; charset=UTF-8; name="v6-0005-Make-RestoreSnapshot-register-the-snapshot-with-c.patch" Content-Disposition: attachment; filename*0="v6-0005-Make-RestoreSnapshot-register-the-snapshot-with-c.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAzNGI5MmRiODE2Zjg3ZmIwNmQ4ZWZmM2MwN2U2MGM4MWIzMjJlNDRkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMzEgTWFyIDIwMjUgMTk6NTQ6MzkgKzAzMDAK U3ViamVjdDogW1BBVENIIHY2IDA1LzEyXSBNYWtlIFJlc3RvcmVTbmFwc2hvdCByZWdpc3Rl ciB0aGUgc25hcHNob3Qgd2l0aAogY3VycmVudCByZXNvd25lcgoKVGhpcyBzaW1wbGlmaWVz IHRoZSBuZXh0IGNvbW1pdAotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFt LmMgICAgfCAxIC0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMgICAgfCAx IC0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3BhcmFsbGVsLmMgfCA0ICsrKysKIHNy Yy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jICAgICAgfCA4ICsrKysrKystCiA0IGZp bGVzIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggNzY5MTcwYTM3ZDUuLjhmMGFlMDIyMjFj IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTU5Miw3ICs1OTIsNiBA QCBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwgUmVsYXRpb24g aW5kZXhyZWwsCiAJQXNzZXJ0KFJlbEZpbGVMb2NhdG9yRXF1YWxzKGluZGV4cmVsLT5yZF9s b2NhdG9yLCBwc2Nhbi0+cHNfaW5kZXhsb2NhdG9yKSk7CiAKIAlzbmFwc2hvdCA9IChTbmFw c2hvdCkgUmVzdG9yZVNuYXBzaG90KHBzY2FuLT5wc19zbmFwc2hvdF9kYXRhKTsKLQlzbmFw c2hvdCA9IFJlZ2lzdGVyU25hcHNob3Qoc25hcHNob3QpOwogCXNjYW4gPSBpbmRleF9iZWdp bnNjYW5faW50ZXJuYWwoaW5kZXhyZWwsIG5rZXlzLCBub3JkZXJieXMsIHNuYXBzaG90LAog CQkJCQkJCQkJcHNjYW4sIHRydWUpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvdGFibGUvdGFibGVhbS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW0u YwppbmRleCA0ZWI4MWU0MGQ5OS4uZmM4MjNjZjg0ZTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Rh YmxlL3RhYmxlYW0uYwpAQCAtMTc1LDcgKzE3NSw2IEBAIHRhYmxlX2JlZ2luc2Nhbl9wYXJh bGxlbChSZWxhdGlvbiByZWxhdGlvbiwgUGFyYWxsZWxUYWJsZVNjYW5EZXNjIHBzY2FuKQog CXsKIAkJLyogU25hcHNob3Qgd2FzIHNlcmlhbGl6ZWQgLS0gcmVzdG9yZSBpdCAqLwogCQlz bmFwc2hvdCA9IChTbmFwc2hvdCkgUmVzdG9yZVNuYXBzaG90KChjaGFyICopIHBzY2FuICsg cHNjYW4tPnBoc19zbmFwc2hvdF9vZmYpOwotCQlzbmFwc2hvdCA9IFJlZ2lzdGVyU25hcHNo b3Qoc25hcHNob3QpOwogCQlmbGFncyB8PSBTT19URU1QX1NOQVBTSE9UOwogCX0KIAllbHNl CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9wYXJhbGxlbC5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwuYwppbmRleCA4MDQ2ZTE0YWJm Ny4uZTEzZWE1N2VmZmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L3BhcmFsbGVsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcGFyYWxsZWwu YwpAQCAtMTQ5OSw2ICsxNDk5LDEwIEBAIFBhcmFsbGVsV29ya2VyTWFpbihEYXR1bSBtYWlu X2FyZykKIAkJCQkJCQkgICBmcHMtPnBhcmFsbGVsX2xlYWRlcl9wZ3Byb2MpOwogCVB1c2hB Y3RpdmVTbmFwc2hvdChhc25hcHNob3QpOwogCisJVW5yZWdpc3RlclNuYXBzaG90KGFzbmFw c2hvdCk7CisJaWYgKHRzbmFwc2hvdCAhPSBhc25hcHNob3QpCisJCVVucmVnaXN0ZXJTbmFw c2hvdCh0c25hcHNob3QpOworCiAJLyoKIAkgKiBXZSd2ZSBjaGFuZ2VkIHdoaWNoIHR1cGxl cyB3ZSBjYW4gc2VlLCBhbmQgbXVzdCB0aGVyZWZvcmUgaW52YWxpZGF0ZQogCSAqIHN5c3Rl bSBjYWNoZXMuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy90aW1lL3NuYXBtZ3Iu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCmluZGV4IGVhMWU3ZDE3YjA0 Li5lZjU3OTEyOGQzZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvdGltZS9zbmFw bWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvdGltZS9zbmFwbWdyLmMKQEAgLTE4MjMs NyArMTgyMyw3IEBAIFNlcmlhbGl6ZVNuYXBzaG90KE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCwg Y2hhciAqc3RhcnRfYWRkcmVzcykKICAqCQlSZXN0b3JlIGEgc2VyaWFsaXplZCBzbmFwc2hv dCBmcm9tIHRoZSBzcGVjaWZpZWQgYWRkcmVzcy4KICAqCiAgKiBUaGUgY29weSBpcyBwYWxs b2MnZCBpbiBUb3BUcmFuc2FjdGlvbkNvbnRleHQgYW5kIGhhcyBpbml0aWFsIHJlZmNvdW50 cyBzZXQKLSAqIHRvIDAuICBUaGUgcmV0dXJuZWQgc25hcHNob3QgaGFzIHRoZSBjb3BpZWQg ZmxhZyBzZXQuCisgKiB0byAwLiAgVGhlIHJldHVybmVkIHNuYXBzaG90IGlzIHJlZ2lzdGVy ZWQgd2l0aCB0aGUgY3VycmVudCByZXNvdXJjZSBvd25lci4KICAqLwogTVZDQ1NuYXBzaG90 CiBSZXN0b3JlU25hcHNob3QoY2hhciAqc3RhcnRfYWRkcmVzcykKQEAgLTE4ODAsNiArMTg4 MCwxMiBAQCBSZXN0b3JlU25hcHNob3QoY2hhciAqc3RhcnRfYWRkcmVzcykKIAlzbmFwc2hv dC0+Y29waWVkID0gdHJ1ZTsKIAlzbmFwc2hvdC0+dmFsaWQgPSB0cnVlOwogCisJLyogYW5k IHRlbGwgcmVzb3duZXIuYyBhYm91dCBpdCwganVzdCBsaWtlIFJlZ2lzdGVyU25hcHNob3Qo KSAqLworCVJlc291cmNlT3duZXJFbmxhcmdlKEN1cnJlbnRSZXNvdXJjZU93bmVyKTsKKwlz bmFwc2hvdC0+cmVnZF9jb3VudCsrOworCVJlc291cmNlT3duZXJSZW1lbWJlclNuYXBzaG90 KEN1cnJlbnRSZXNvdXJjZU93bmVyLCAoU25hcHNob3QpIHNuYXBzaG90KTsKKwlwYWlyaW5n aGVhcF9hZGQoJlJlZ2lzdGVyZWRTbmFwc2hvdHMsICZzbmFwc2hvdC0+cGhfbm9kZSk7CisK IAlyZXR1cm4gc25hcHNob3Q7CiB9CiAKLS0gCjIuMzkuNQoK --------------nSXAXBhgWt0AUd9uE0wCc0X0 Content-Type: text/x-patch; charset=UTF-8; name="v6-0006-Replace-the-RegisteredSnapshot-pairing-heap-with-.patch" Content-Disposition: attachment; filename*0="v6-0006-Replace-the-RegisteredSnapshot-pairing-heap-with-.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBkYjcwMTE3ZTY4YjZmNzQ1YzVhYjkyODllMjYzYWVkZTdhMDY4YWM3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMzEgTWFyIDIwMjUgMjM6NTA6NTUgKzAzMDAK U3ViamVjdDogW1BBVENIIHY2IDA2LzEyXSBSZXBsYWNlIHRoZSBSZWdpc3RlcmVkU25hcHNo b3QgcGFpcmluZyBoZWFwIHdpdGggYQogbGlua2VkIGxpc3QKClByZXZpb3VzbHksIHdlIGtl cHQgYWxsIHRoZSBzbmFwc2hvdHMgaW4gYSBwYWlyaW5nIGhlYXAsIHNvIHRoYXQgd2UKY291 bGQgY2hlYXBseSBmaW5kIHRoZSBzbmFwc2hvdCB3aXRoIHRoZSBzbWFsbGVzdCB4bWluLiBI b3dldmVyLCB3ZQpjYW4gZWFzaWx5IHVzZSBhIGRvdWJseS1saW5rZWQgbGlzdCBpbnN0ZWFk LCB3aGljaCBpcyBhIGxpdHRsZQpzaW1wbGVyLiBBIG5ld2x5IGFjcXVpcmVkIHNuYXBzaG90 J3MgeG1pbiBpcyBhbHdheXMgZ3JlYXRlciB0aGFuIG9yCmVxdWFsIHRvIHRoYXQgb2YgYW55 IHByZXZpb3VzIHNuYXBzaG90J3MsIHNvIHdlIGNhbiBzaW1wbHkgcHVzaCBuZXcKc25hcHNo b3RzIHRvIHRoZSB0YWlsIG9mIHRoZSBsaXN0LCBhbmQgdGhlIG9sZGVzdCB4bWluIGlzIGFs d2F5cyBhdAp0aGUgaGVhZC4KClByZXZpb3VzbHksIHdlIHdvdWxkIG9ubHkgcHVzaCBhIHNu YXBzaG90IHRvIHRoZSBoZWFwIHdoZW4gaXQncwpyZWdpc3RlcmVkIG9yIHB1c2hlZCB0byB0 aGUgYWN0aXZlIHN0YWNrLCBub3QgaW1tZWRpYXRlbHkgd2hlbiB0aGUKR2V0U25hcHNob3RE YXRhKCkgd2FzIGNhbGxlZC4gQmVjYXVzZSBvZiB0aGF0LCBzbmFwc2hvdHMgd2VyZQpzb21l dGltZXMgYWRkZWQgdG8gdGhlIGhlYXAgb3V0IG9mIG9yZGVyLiBCdXQgaWYgd2UgdXBkYXRl IHRoZSBsaXN0CmVhcmxpZXIsIGFmdGVyIGVhY2ggR2V0U25hcHNob3REYXRhKCkgY2FsbCwg aXQgc3RheXMgaW4gb3JkZXIuIFRoYXQKbWVhbnMgdGhhdCB0aGUgbGlzdCBub3cgY29udGFp bnMgKmFsbCogdmFsaWQgc25hcHNob3RzLCBpbmNsdWRpbmcgdGhlCnNuYXBzaG90cyB0aGF0 IGFyZSBpbiB0aGUgYWN0aXZlIHN0YWNrLCBhbmQgdGhlIHN0YXRpYyBDdXJyZW50U25hcHNo b3QKYW5kIFNlY29uZGFyeVNuYXBzaG90LCB3aGVuZXZlciB0aGV5IGFyZSB2YWxpZC4gKENh dGFsb2dTbmFwc2hvdCB3YXMKYWxyZWFkeSB0cmFja2VkIGJ5IHRoZSBoZWFwKQotLS0KIHNy Yy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jICAgIHwgMjc5ICsrKysrKysrKysrKysr KysrLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9zcGdpc3RfcHJpdmF0ZS5oIHwg ICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL3NuYXBzaG90LmggICAgICAgIHwgICA2ICstCiAz IGZpbGVzIGNoYW5nZWQsIDE3NSBpbnNlcnRpb25zKCspLCAxMTEgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvdGltZS9zbmFwbWdyLmMgYi9zcmMvYmFj a2VuZC91dGlscy90aW1lL3NuYXBtZ3IuYwppbmRleCBlZjU3OTEyOGQzZi4uMWMzOWNjMTE2 MDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCisrKyBi L3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCkBAIC02NywzMiArNjcsMjIgQEAK ICAqIEluIGFkZGl0aW9uIHRvIHNuYXBzaG90cyBwdXNoZWQgdG8gdGhlIGFjdGl2ZSBzbmFw c2hvdCBzdGFjaywgYSBzbmFwc2hvdAogICogY2FuIGJlIHJlZ2lzdGVyZWQgd2l0aCBhIHJl c291cmNlIG93bmVyLgogICoKLSAqIElmIEZpcnN0WGFjdFNuYXBzaG90UmVnaXN0ZXJlZCBp cyBzZXQsIHdlIGluY3JlbWVudCB0aGUgc3RhdGljCi0gKiBDdXJyZW50U25hcHNob3REYXRh J3MgcmVnZF9jb3VudCBhbmQgbGlzdCBpdCBpbiBSZWdpc3RlcmVkU25hcHNob3RzLCBidXQg dGhpcyByZWZlcmVuY2UgaXMgbm90Ci0gKiB0cmFja2VkIGJ5IGEgcmVzb3VyY2Ugb3duZXIu IFdlIHVzZWQgdG8gdXNlIHRoZSBUb3BUcmFuc2FjdGlvblJlc291cmNlT3duZXIKLSAqIHRv IHRyYWNrIHRoaXMgc25hcHNob3QgcmVmZXJlbmNlLCBidXQgdGhhdCBpbnRyb2R1Y2VzIGxv Z2ljYWwgY2lyY3VsYXJpdHkKLSAqIGFuZCB0aHVzIG1ha2VzIGl0IGltcG9zc2libGUgdG8g Y2xlYW4gdXAgaW4gYSBzYW5lIGZhc2hpb24uICBJdCdzIGJldHRlciB0bwotICogaGFuZGxl IHRoaXMgcmVmZXJlbmNlIGFzIGFuIGludGVybmFsbHktdHJhY2tlZCByZWdpc3RyYXRpb24s IHNvIHRoYXQgdGhpcwotICogbW9kdWxlIGlzIGVudGlyZWx5IGxvd2VyLWxldmVsIHRoYW4g UmVzb3VyY2VPd25lcnMuCisgKiBYbWluIHRyYWNraW5nCisgKiAtLS0tLS0tLS0tLS0tCiAg KgotICogTGlrZXdpc2UsIGFueSBzbmFwc2hvdHMgdGhhdCBoYXZlIGJlZW4gZXhwb3J0ZWQg YnkgcGdfZXhwb3J0X3NuYXBzaG90Ci0gKiBoYXZlIHJlZ2RfY291bnQgPSAxIGFuZCBhcmUg bGlzdGVkIGluIFJlZ2lzdGVyZWRTbmFwc2hvdHMsIGJ1dCBhcmUgbm90Ci0gKiB0cmFja2Vk IGJ5IGFueSByZXNvdXJjZSBvd25lci4KKyAqIEFsbCB2YWxpZCBzbmFwc2hvdHMsIHdoZXRo ZXIgdGhleSBhcmUgInN0YXRpYyIsIGluY2x1ZGVkIHRoZSBhY3RpdmUgc3RhY2ssCisgKiBv ciByZWdpc3RlcmVkIHdpdGggYSByZXNvdXJjZSBvd25lciwgYXJlIHRyYWNrZWQgaW4gYSBk b3VibHktbGlua2VkIGxpc3QsCisgKiBWYWxpZFNuYXBzaG90cy4gIEFueSBzbmFwc2hvdHMg dGhhdCBoYXZlIGJlZW4gZXhwb3J0ZWQgYnkKKyAqIHBnX2V4cG9ydF9zbmFwc2hvdCgpIGFy ZSBhbHNvIGxpc3RlZCB0aGVyZS4gIChUaGV5IGhhdmUgcmVnZF9jb3VudCA9IDEsCisgKiBl dmVuIHRob3VnaCB0aGV5IGFyZSBub3QgdHJhY2tlZCBieSBhbnkgcmVzb3VyY2Ugb3duZXIp LgogICoKLSAqIExpa2V3aXNlLCB0aGUgQ2F0YWxvZ1NuYXBzaG90IGlzIGxpc3RlZCBpbiBS ZWdpc3RlcmVkU25hcHNob3RzIHdoZW4gaXQKLSAqIGlzIHZhbGlkLCBidXQgaXMgbm90IHRy YWNrZWQgYnkgYW55IHJlc291cmNlIG93bmVyLgotICoKLSAqIFRoZSBzYW1lIGlzIHRydWUg Zm9yIGhpc3RvcmljIHNuYXBzaG90cyB1c2VkIGR1cmluZyBsb2dpY2FsIGRlY29kaW5nLAot ICogdGhlaXIgbGlmZXRpbWUgaXMgbWFuYWdlZCBzZXBhcmF0ZWx5IChhcyB0aGV5IGxpdmUg bG9uZ2VyIHRoYW4gb25lIHhhY3QuYwotICogdHJhbnNhY3Rpb24pLgotICoKLSAqIFRoZXNl IGFycmFuZ2VtZW50cyBsZXQgdXMgcmVzZXQgTXlQcm9jLT54bWluIHdoZW4gdGhlcmUgYXJl IG5vIHNuYXBzaG90cworICogVGhlIGxpc3QgaXMgaW4geG1pbiBvcmRlciwgc28gdGhhdCB0 aGUgdGFpbCBhbHdheXMgY29udGFpbnMgdGhlIG9sZGVzdAorICogc25hcHNob3QuICBUaGF0 IGxldCB1cyByZXNldCBNeVByb2MtPnhtaW4gd2hlbiB0aGVyZSBhcmUgbm8gc25hcHNob3Rz CiAgKiByZWZlcmVuY2VkIGJ5IHRoaXMgdHJhbnNhY3Rpb24sIGFuZCBhZHZhbmNlIGl0IHdo ZW4gdGhlIG9uZSB3aXRoIG9sZGVzdAotICogWG1pbiBpcyBubyBsb25nZXIgcmVmZXJlbmNl ZC4gIEZvciBzaW1wbGljaXR5IGhvd2V2ZXIsIG9ubHkgcmVnaXN0ZXJlZAotICogc25hcHNo b3RzIG5vdCBhY3RpdmUgc25hcHNob3RzIHBhcnRpY2lwYXRlIGluIHRyYWNraW5nIHdoaWNo IG9uZSBpcyBvbGRlc3Q7Ci0gKiB3ZSBkb24ndCB0cnkgdG8gY2hhbmdlIE15UHJvYy0+eG1p biBleGNlcHQgd2hlbiB0aGUgYWN0aXZlLXNuYXBzaG90Ci0gKiBzdGFjayBpcyBlbXB0eS4K KyAqIFhtaW4gaXMgbm8gbG9uZ2VyIHJlZmVyZW5jZWQuCiAgKgorICogVGhlIGxpZmV0aW1l IG9mIGhpc3RvcmljIHNuYXBzaG90cyB1c2VkIGR1cmluZyBsb2dpY2FsIGRlY29kaW5nIGlz IG1hbmFnZWQKKyAqIHNlcGFyYXRlbHkgKGFzIHRoZXkgbGl2ZSBsb25nZXIgdGhhbiBvbmUg eGFjdC5jIHRyYW5zYWN0aW9uKS4KICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5 OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKICAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBD YWxpZm9ybmlhCkBAIC0xMTEsNyArMTAxLDYgQEAKICNpbmNsdWRlICJhY2Nlc3MvdHJhbnNh bS5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiZGF0YXR5cGUvdGlt ZXN0YW1wLmgiCi0jaW5jbHVkZSAibGliL3BhaXJpbmdoZWFwLmgiCiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCiAjaW5jbHVkZSAicG9ydC9wZ19sZmluZC5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvZmQuaCIKQEAgLTE3NywxMyArMTY2LDEwIEBAIHR5cGVkZWYgc3RydWN0IEFjdGl2ZVNu YXBzaG90RWx0CiBzdGF0aWMgQWN0aXZlU25hcHNob3RFbHQgKkFjdGl2ZVNuYXBzaG90ID0g TlVMTDsKIAogLyoKLSAqIEN1cnJlbnRseSByZWdpc3RlcmVkIFNuYXBzaG90cy4gIE9yZGVy ZWQgaW4gYSBoZWFwIGJ5IHhtaW4sIHNvIHRoYXQgd2UgY2FuCisgKiBDdXJyZW50bHkgdmFs aWQgU25hcHNob3RzLiAgT3JkZXJlZCBpbiBhIGhlYXAgYnkgeG1pbiwgc28gdGhhdCB3ZSBj YW4KICAqIHF1aWNrbHkgZmluZCB0aGUgb25lIHdpdGggbG93ZXN0IHhtaW4sIHRvIGFkdmFu Y2Ugb3VyIE15UHJvYy0+eG1pbi4KICAqLwotc3RhdGljIGludAl4bWluX2NtcChjb25zdCBw YWlyaW5naGVhcF9ub2RlICphLCBjb25zdCBwYWlyaW5naGVhcF9ub2RlICpiLAotCQkJCQkg dm9pZCAqYXJnKTsKLQotc3RhdGljIHBhaXJpbmdoZWFwIFJlZ2lzdGVyZWRTbmFwc2hvdHMg PSB7JnhtaW5fY21wLCBOVUxMLCBOVUxMfTsKK3N0YXRpYyBkbGlzdF9oZWFkIFZhbGlkU25h cHNob3RzID0gRExJU1RfU1RBVElDX0lOSVQoVmFsaWRTbmFwc2hvdHMpOwogCiAvKiBmaXJz dCBHZXRUcmFuc2FjdGlvblNuYXBzaG90IGNhbGwgaW4gYSB0cmFuc2FjdGlvbj8gKi8KIGJv b2wJCUZpcnN0U25hcHNob3RTZXQgPSBmYWxzZTsKQEAgLTIxMyw2ICsxOTksOCBAQCBzdGF0 aWMgTVZDQ1NuYXBzaG90IENvcHlNVkNDU25hcHNob3QoTVZDQ1NuYXBzaG90IHNuYXBzaG90 KTsKIHN0YXRpYyB2b2lkIFVucmVnaXN0ZXJTbmFwc2hvdE5vT3duZXIoU25hcHNob3Qgc25h cHNob3QpOwogc3RhdGljIHZvaWQgRnJlZU1WQ0NTbmFwc2hvdChNVkNDU25hcHNob3Qgc25h cHNob3QpOwogc3RhdGljIHZvaWQgU25hcHNob3RSZXNldFhtaW4odm9pZCk7CitzdGF0aWMg dm9pZCB2YWxpZF9zbmFwc2hvdHNfcHVzaF90YWlsKE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCk7 CitzdGF0aWMgdm9pZCB2YWxpZF9zbmFwc2hvdHNfcHVzaF9vdXRfb2Zfb3JkZXIoTVZDQ1Nu YXBzaG90IHNuYXBzaG90KTsKIAogLyogUmVzb3VyY2VPd25lciBjYWxsYmFja3MgdG8gdHJh Y2sgc25hcHNob3QgcmVmZXJlbmNlcyAqLwogc3RhdGljIHZvaWQgUmVzT3duZXJSZWxlYXNl U25hcHNob3QoRGF0dW0gcmVzKTsKQEAgLTI4NCw3ICsyNzIsNyBAQCBHZXRUcmFuc2FjdGlv blNuYXBzaG90KHZvaWQpCiAJCSAqLwogCQlJbnZhbGlkYXRlQ2F0YWxvZ1NuYXBzaG90KCk7 CiAKLQkJQXNzZXJ0KHBhaXJpbmdoZWFwX2lzX2VtcHR5KCZSZWdpc3RlcmVkU25hcHNob3Rz KSk7CisJCUFzc2VydChkbGlzdF9pc19lbXB0eSgmVmFsaWRTbmFwc2hvdHMpKTsKIAkJQXNz ZXJ0KCFGaXJzdFhhY3RTbmFwc2hvdFJlZ2lzdGVyZWQpOwogCiAJCWlmIChJc0luUGFyYWxs ZWxNb2RlKCkpCkBAIC0zMDgsMTIgKzI5NiwxMyBAQCBHZXRUcmFuc2FjdGlvblNuYXBzaG90 KHZvaWQpCiAJCQkJR2V0U25hcHNob3REYXRhKCZDdXJyZW50U25hcHNob3REYXRhKTsKIAog CQkJLyogTWFyayBpdCBhcyAicmVnaXN0ZXJlZCIgKi8KLQkJCUN1cnJlbnRTbmFwc2hvdERh dGEucmVnZF9jb3VudCsrOwogCQkJRmlyc3RYYWN0U25hcHNob3RSZWdpc3RlcmVkID0gdHJ1 ZTsKLQkJCXBhaXJpbmdoZWFwX2FkZCgmUmVnaXN0ZXJlZFNuYXBzaG90cywgJkN1cnJlbnRT bmFwc2hvdERhdGEucGhfbm9kZSk7CiAJCX0KIAkJZWxzZQorCQl7CiAJCQlHZXRTbmFwc2hv dERhdGEoJkN1cnJlbnRTbmFwc2hvdERhdGEpOworCQl9CisJCXZhbGlkX3NuYXBzaG90c19w dXNoX3RhaWwoJkN1cnJlbnRTbmFwc2hvdERhdGEpOwogCiAJCUZpcnN0U25hcHNob3RTZXQg PSB0cnVlOwogCQlyZXR1cm4gKFNuYXBzaG90KSAmQ3VycmVudFNuYXBzaG90RGF0YTsKQEAg LTMyMSw2ICszMTAsNyBAQCBHZXRUcmFuc2FjdGlvblNuYXBzaG90KHZvaWQpCiAKIAlpZiAo SXNvbGF0aW9uVXNlc1hhY3RTbmFwc2hvdCgpKQogCXsKKwkJQXNzZXJ0KEZpcnN0WGFjdFNu YXBzaG90UmVnaXN0ZXJlZCk7CiAJCUFzc2VydChDdXJyZW50U25hcHNob3REYXRhLnZhbGlk KTsKIAkJcmV0dXJuIChTbmFwc2hvdCkgJkN1cnJlbnRTbmFwc2hvdERhdGE7CiAJfQpAQCAt MzI4LDcgKzMxOCwxMCBAQCBHZXRUcmFuc2FjdGlvblNuYXBzaG90KHZvaWQpCiAJLyogRG9u J3QgYWxsb3cgY2F0YWxvZyBzbmFwc2hvdCB0byBiZSBvbGRlciB0aGFuIHhhY3Qgc25hcHNo b3QuICovCiAJSW52YWxpZGF0ZUNhdGFsb2dTbmFwc2hvdCgpOwogCisJaWYgKEN1cnJlbnRT bmFwc2hvdERhdGEudmFsaWQpCisJCWRsaXN0X2RlbGV0ZSgmQ3VycmVudFNuYXBzaG90RGF0 YS5ub2RlKTsKIAlHZXRTbmFwc2hvdERhdGEoJkN1cnJlbnRTbmFwc2hvdERhdGEpOworCXZh bGlkX3NuYXBzaG90c19wdXNoX3RhaWwoJkN1cnJlbnRTbmFwc2hvdERhdGEpOwogCiAJcmV0 dXJuIChTbmFwc2hvdCkgJkN1cnJlbnRTbmFwc2hvdERhdGE7CiB9CkBAIC0zNTksNyArMzUy LDEwIEBAIEdldExhdGVzdFNuYXBzaG90KHZvaWQpCiAJaWYgKCFGaXJzdFNuYXBzaG90U2V0 KQogCQlyZXR1cm4gR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpOwogCisJaWYgKFNlY29uZGFy eVNuYXBzaG90RGF0YS52YWxpZCkKKwkJZGxpc3RfZGVsZXRlKCZTZWNvbmRhcnlTbmFwc2hv dERhdGEubm9kZSk7CiAJR2V0U25hcHNob3REYXRhKCZTZWNvbmRhcnlTbmFwc2hvdERhdGEp OworCXZhbGlkX3NuYXBzaG90c19wdXNoX3RhaWwoJlNlY29uZGFyeVNuYXBzaG90RGF0YSk7 CiAKIAlyZXR1cm4gKFNuYXBzaG90KSAmU2Vjb25kYXJ5U25hcHNob3REYXRhOwogfQpAQCAt NDIzLDcgKzQxOSw3IEBAIEdldE5vbkhpc3RvcmljQ2F0YWxvZ1NuYXBzaG90KE9pZCByZWxp ZCkKIAkJICogTkI6IGl0IGhhZCBiZXR0ZXIgYmUgaW1wb3NzaWJsZSBmb3IgdGhpcyB0byB0 aHJvdyBlcnJvciwgc2luY2UgdGhlCiAJCSAqIENhdGFsb2dTbmFwc2hvdCBwb2ludGVyIGlz IGFscmVhZHkgdmFsaWQuCiAJCSAqLwotCQlwYWlyaW5naGVhcF9hZGQoJlJlZ2lzdGVyZWRT bmFwc2hvdHMsICZDYXRhbG9nU25hcHNob3REYXRhLnBoX25vZGUpOworCQl2YWxpZF9zbmFw c2hvdHNfcHVzaF90YWlsKCZDYXRhbG9nU25hcHNob3REYXRhKTsKIAl9CiAKIAlyZXR1cm4g KFNuYXBzaG90KSAmQ2F0YWxvZ1NuYXBzaG90RGF0YTsKQEAgLTQ0NCwxMCArNDQwLDIxIEBA IEludmFsaWRhdGVDYXRhbG9nU25hcHNob3Qodm9pZCkKIHsKIAlpZiAoQ2F0YWxvZ1NuYXBz aG90RGF0YS52YWxpZCkKIAl7Ci0JCXBhaXJpbmdoZWFwX3JlbW92ZSgmUmVnaXN0ZXJlZFNu YXBzaG90cywgJkNhdGFsb2dTbmFwc2hvdERhdGEucGhfbm9kZSk7CisJCWRsaXN0X2RlbGV0 ZSgmQ2F0YWxvZ1NuYXBzaG90RGF0YS5ub2RlKTsKIAkJQ2F0YWxvZ1NuYXBzaG90RGF0YS52 YWxpZCA9IGZhbHNlOwotCQlTbmFwc2hvdFJlc2V0WG1pbigpOwogCX0KKwlpZiAoIUZpcnN0 WGFjdFNuYXBzaG90UmVnaXN0ZXJlZCAmJiBDdXJyZW50U25hcHNob3REYXRhLnZhbGlkKQor CXsKKwkJZGxpc3RfZGVsZXRlKCZDdXJyZW50U25hcHNob3REYXRhLm5vZGUpOworCQlDdXJy ZW50U25hcHNob3REYXRhLnZhbGlkID0gZmFsc2U7CisJfQorCWlmIChTZWNvbmRhcnlTbmFw c2hvdERhdGEudmFsaWQpCisJeworCQlkbGlzdF9kZWxldGUoJlNlY29uZGFyeVNuYXBzaG90 RGF0YS5ub2RlKTsKKwkJU2Vjb25kYXJ5U25hcHNob3REYXRhLnZhbGlkID0gZmFsc2U7CisJ fQorCisJU25hcHNob3RSZXNldFhtaW4oKTsKIH0KIAogLyoKQEAgLTQ2NCw4ICs0NzEsNyBA QCB2b2lkCiBJbnZhbGlkYXRlQ2F0YWxvZ1NuYXBzaG90Q29uZGl0aW9uYWxseSh2b2lkKQog ewogCWlmIChDYXRhbG9nU25hcHNob3REYXRhLnZhbGlkICYmCi0JCUFjdGl2ZVNuYXBzaG90 ID09IE5VTEwgJiYKLQkJcGFpcmluZ2hlYXBfaXNfc2luZ3VsYXIoJlJlZ2lzdGVyZWRTbmFw c2hvdHMpKQorCQlkbGlzdF9oZWFkX25vZGUoJlZhbGlkU25hcHNob3RzKSA9PSAmQ2F0YWxv Z1NuYXBzaG90RGF0YS5ub2RlKQogCQlJbnZhbGlkYXRlQ2F0YWxvZ1NuYXBzaG90KCk7CiB9 CiAKQEAgLTUwNCw3ICs1MTAsNiBAQCBTZXRUcmFuc2FjdGlvblNuYXBzaG90KE1WQ0NTbmFw c2hvdCBzb3VyY2VzbmFwLCBWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqc291cmNldnhpZAogCS8q IEJldHRlciBkbyB0aGlzIHRvIGVuc3VyZSBmb2xsb3dpbmcgQXNzZXJ0IHN1Y2NlZWRzLiAq LwogCUludmFsaWRhdGVDYXRhbG9nU25hcHNob3QoKTsKIAotCUFzc2VydChwYWlyaW5naGVh cF9pc19lbXB0eSgmUmVnaXN0ZXJlZFNuYXBzaG90cykpOwogCUFzc2VydCghRmlyc3RYYWN0 U25hcHNob3RSZWdpc3RlcmVkKTsKIAlBc3NlcnQoIUhpc3RvcmljU25hcHNob3RBY3RpdmUo KSk7CiAKQEAgLTU3Niw5ICs1ODEsOCBAQCBTZXRUcmFuc2FjdGlvblNuYXBzaG90KE1WQ0NT bmFwc2hvdCBzb3VyY2VzbmFwLCBWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqc291cmNldnhpZAog CQkJCQkJCQkJCQkgICBzb3VyY2VwaWQpOwogCQkvKiBNYXJrIGl0IGFzICJyZWdpc3RlcmVk IiAqLwogCQlGaXJzdFhhY3RTbmFwc2hvdFJlZ2lzdGVyZWQgPSB0cnVlOwotCQlDdXJyZW50 U25hcHNob3REYXRhLnJlZ2RfY291bnQrKzsKLQkJcGFpcmluZ2hlYXBfYWRkKCZSZWdpc3Rl cmVkU25hcHNob3RzLCAmQ3VycmVudFNuYXBzaG90RGF0YS5waF9ub2RlKTsKIAl9CisJdmFs aWRfc25hcHNob3RzX3B1c2hfdGFpbCgmQ3VycmVudFNuYXBzaG90RGF0YSk7CiAKIAlGaXJz dFNuYXBzaG90U2V0ID0gdHJ1ZTsKIH0KQEAgLTY5OSw3ICs3MDMsMTAgQEAgUHVzaEFjdGl2 ZVNuYXBzaG90V2l0aExldmVsKFNuYXBzaG90IHNuYXBzaG90LCBpbnQgc25hcF9sZXZlbCkK IAkgKiBiZXR0ZXIgdG8gYmUgc3VyZS4KIAkgKi8KIAlpZiAoIW9yaWdzbmFwLT5jb3BpZWQp CisJewogCQluZXdhY3RpdmUtPmFzX3NuYXAgPSBDb3B5TVZDQ1NuYXBzaG90KG9yaWdzbmFw KTsKKwkJZGxpc3RfaW5zZXJ0X2FmdGVyKCZvcmlnc25hcC0+bm9kZSwgJm5ld2FjdGl2ZS0+ YXNfc25hcC0+bm9kZSk7CisJfQogCWVsc2UKIAkJbmV3YWN0aXZlLT5hc19zbmFwID0gb3Jp Z3NuYXA7CiAKQEAgLTcyMiw4ICs3MjksMTMgQEAgUHVzaEFjdGl2ZVNuYXBzaG90V2l0aExl dmVsKFNuYXBzaG90IHNuYXBzaG90LCBpbnQgc25hcF9sZXZlbCkKIHZvaWQKIFB1c2hDb3Bp ZWRTbmFwc2hvdChTbmFwc2hvdCBzbmFwc2hvdCkKIHsKKwlNVkNDU25hcHNob3QgY29weTsK KwogCUFzc2VydChzbmFwc2hvdC0+c25hcHNob3RfdHlwZSA9PSBTTkFQU0hPVF9NVkNDKTsK LQlQdXNoQWN0aXZlU25hcHNob3QoKFNuYXBzaG90KSBDb3B5TVZDQ1NuYXBzaG90KCZzbmFw c2hvdC0+bXZjYykpOworCisJY29weSA9IENvcHlNVkNDU25hcHNob3QoJnNuYXBzaG90LT5t dmNjKTsKKwlkbGlzdF9pbnNlcnRfYWZ0ZXIoJnNuYXBzaG90LT5tdmNjLm5vZGUsICZjb3B5 LT5ub2RlKTsKKwlQdXNoQWN0aXZlU25hcHNob3QoKFNuYXBzaG90KSBjb3B5KTsKIH0KIAog LyoKQEAgLTc3Niw3ICs3ODgsMTAgQEAgUG9wQWN0aXZlU25hcHNob3Qodm9pZCkKIAogCWlm IChBY3RpdmVTbmFwc2hvdC0+YXNfc25hcC0+YWN0aXZlX2NvdW50ID09IDAgJiYKIAkJQWN0 aXZlU25hcHNob3QtPmFzX3NuYXAtPnJlZ2RfY291bnQgPT0gMCkKKwl7CisJCWRsaXN0X2Rl bGV0ZSgmQWN0aXZlU25hcHNob3QtPmFzX3NuYXAtPm5vZGUpOwogCQlGcmVlTVZDQ1NuYXBz aG90KEFjdGl2ZVNuYXBzaG90LT5hc19zbmFwKTsKKwl9CiAKIAlwZnJlZShBY3RpdmVTbmFw c2hvdCk7CiAJQWN0aXZlU25hcHNob3QgPSBuZXdzdGFjazsKQEAgLTg1MCwxNiArODY1LDE3 IEBAIFJlZ2lzdGVyU25hcHNob3RPbk93bmVyKFNuYXBzaG90IG9yaWdfc25hcHNob3QsIFJl c291cmNlT3duZXIgb3duZXIpCiAJQXNzZXJ0KHNuYXBzaG90LT52YWxpZCk7CiAKIAkvKiBT dGF0aWMgc25hcHNob3Q/ICBDcmVhdGUgYSBwZXJzaXN0ZW50IGNvcHkgKi8KLQlzbmFwc2hv dCA9IHNuYXBzaG90LT5jb3BpZWQgPyBzbmFwc2hvdCA6IENvcHlNVkNDU25hcHNob3Qoc25h cHNob3QpOworCWlmICghc25hcHNob3QtPmNvcGllZCkKKwl7CisJCXNuYXBzaG90ID0gQ29w eU1WQ0NTbmFwc2hvdChzbmFwc2hvdCk7CisJCWRsaXN0X2luc2VydF9hZnRlcigmb3JpZ19z bmFwc2hvdC0+bXZjYy5ub2RlLCAmc25hcHNob3QtPm5vZGUpOworCX0KIAogCS8qIGFuZCB0 ZWxsIHJlc293bmVyLmMgYWJvdXQgaXQgKi8KIAlSZXNvdXJjZU93bmVyRW5sYXJnZShvd25l cik7CiAJc25hcHNob3QtPnJlZ2RfY291bnQrKzsKIAlSZXNvdXJjZU93bmVyUmVtZW1iZXJT bmFwc2hvdChvd25lciwgKFNuYXBzaG90KSBzbmFwc2hvdCk7CiAKLQlpZiAoc25hcHNob3Qt PnJlZ2RfY291bnQgPT0gMSkKLQkJcGFpcmluZ2hlYXBfYWRkKCZSZWdpc3RlcmVkU25hcHNo b3RzLCAmc25hcHNob3QtPnBoX25vZGUpOwotCiAJcmV0dXJuIChTbmFwc2hvdCkgc25hcHNo b3Q7CiB9CiAKQEAgLTkwMSwxNCArOTE3LDEyIEBAIFVucmVnaXN0ZXJTbmFwc2hvdE5vT3du ZXIoU25hcHNob3Qgc25hcHNob3QpCiAJCU1WQ0NTbmFwc2hvdCBtdmNjc25hcCA9ICZzbmFw c2hvdC0+bXZjYzsKIAogCQlBc3NlcnQobXZjY3NuYXAtPnJlZ2RfY291bnQgPiAwKTsKLQkJ QXNzZXJ0KCFwYWlyaW5naGVhcF9pc19lbXB0eSgmUmVnaXN0ZXJlZFNuYXBzaG90cykpOwor CQlBc3NlcnQoIWRsaXN0X2lzX2VtcHR5KCZWYWxpZFNuYXBzaG90cykpOwogCiAJCW12Y2Nz bmFwLT5yZWdkX2NvdW50LS07Ci0JCWlmIChtdmNjc25hcC0+cmVnZF9jb3VudCA9PSAwKQot CQkJcGFpcmluZ2hlYXBfcmVtb3ZlKCZSZWdpc3RlcmVkU25hcHNob3RzLCAmbXZjY3NuYXAt PnBoX25vZGUpOwotCiAJCWlmIChtdmNjc25hcC0+cmVnZF9jb3VudCA9PSAwICYmIG12Y2Nz bmFwLT5hY3RpdmVfY291bnQgPT0gMCkKIAkJeworCQkJZGxpc3RfZGVsZXRlKCZtdmNjc25h cC0+bm9kZSk7CiAJCQlGcmVlTVZDQ1NuYXBzaG90KG12Y2NzbmFwKTsKIAkJCVNuYXBzaG90 UmVzZXRYbWluKCk7CiAJCX0KQEAgLTkzMywyNCArOTQ3LDYgQEAgVW5yZWdpc3RlclNuYXBz aG90Tm9Pd25lcihTbmFwc2hvdCBzbmFwc2hvdCkKIAkJZWxvZyhFUlJPUiwgInJlZ2lzdGVy ZWQgc25hcHNob3QgaGFzIHVuZXhwZWN0ZWQgdHlwZSIpOwogfQogCi0vKgotICogQ29tcGFy aXNvbiBmdW5jdGlvbiBmb3IgUmVnaXN0ZXJlZFNuYXBzaG90cyBoZWFwLiAgU25hcHNob3Rz IGFyZSBvcmRlcmVkCi0gKiBieSB4bWluLCBzbyB0aGF0IHRoZSBzbmFwc2hvdCB3aXRoIHNt YWxsZXN0IHhtaW4gaXMgYXQgdGhlIHRvcC4KLSAqLwotc3RhdGljIGludAoteG1pbl9jbXAo Y29uc3QgcGFpcmluZ2hlYXBfbm9kZSAqYSwgY29uc3QgcGFpcmluZ2hlYXBfbm9kZSAqYiwg dm9pZCAqYXJnKQotewotCWNvbnN0IE1WQ0NTbmFwc2hvdERhdGEgKmFzbmFwID0gcGFpcmlu Z2hlYXBfY29uc3RfY29udGFpbmVyKE1WQ0NTbmFwc2hvdERhdGEsIHBoX25vZGUsIGEpOwot CWNvbnN0IE1WQ0NTbmFwc2hvdERhdGEgKmJzbmFwID0gcGFpcmluZ2hlYXBfY29uc3RfY29u dGFpbmVyKE1WQ0NTbmFwc2hvdERhdGEsIHBoX25vZGUsIGIpOwotCi0JaWYgKFRyYW5zYWN0 aW9uSWRQcmVjZWRlcyhhc25hcC0+eG1pbiwgYnNuYXAtPnhtaW4pKQotCQlyZXR1cm4gMTsK LQllbHNlIGlmIChUcmFuc2FjdGlvbklkRm9sbG93cyhhc25hcC0+eG1pbiwgYnNuYXAtPnht aW4pKQotCQlyZXR1cm4gLTE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQogLyoKICAqIFNu YXBzaG90UmVzZXRYbWluCiAgKgpAQCAtOTcyLDIxICs5NjgsMjcgQEAgU25hcHNob3RSZXNl dFhtaW4odm9pZCkKIAkvKgogCSAqIEludmFsaWRhdGUgdGhlc2Ugc3RhdGljIHNuYXBzaG90 cyBzbyB0aGF0IHdlIGNhbiBhZHZhbmNlIHhtaW4uCiAJICovCi0JaWYgKCFGaXJzdFhhY3RT bmFwc2hvdFJlZ2lzdGVyZWQpCisJaWYgKCFGaXJzdFhhY3RTbmFwc2hvdFJlZ2lzdGVyZWQg JiYgQ3VycmVudFNuYXBzaG90RGF0YS52YWxpZCkKKwl7CisJCWRsaXN0X2RlbGV0ZSgmQ3Vy cmVudFNuYXBzaG90RGF0YS5ub2RlKTsKIAkJQ3VycmVudFNuYXBzaG90RGF0YS52YWxpZCA9 IGZhbHNlOwotCVNlY29uZGFyeVNuYXBzaG90RGF0YS52YWxpZCA9IGZhbHNlOworCX0KKwlp ZiAoU2Vjb25kYXJ5U25hcHNob3REYXRhLnZhbGlkKQorCXsKKwkJZGxpc3RfZGVsZXRlKCZT ZWNvbmRhcnlTbmFwc2hvdERhdGEubm9kZSk7CisJCVNlY29uZGFyeVNuYXBzaG90RGF0YS52 YWxpZCA9IGZhbHNlOworCX0KIAogCWlmIChBY3RpdmVTbmFwc2hvdCAhPSBOVUxMKQogCQly ZXR1cm47CiAKLQlpZiAocGFpcmluZ2hlYXBfaXNfZW1wdHkoJlJlZ2lzdGVyZWRTbmFwc2hv dHMpKQorCWlmIChkbGlzdF9pc19lbXB0eSgmVmFsaWRTbmFwc2hvdHMpKQogCXsKIAkJTXlQ cm9jLT54bWluID0gVHJhbnNhY3Rpb25YbWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAJ CXJldHVybjsKIAl9CiAKLQltaW5TbmFwc2hvdCA9IHBhaXJpbmdoZWFwX2NvbnRhaW5lcihN VkNDU25hcHNob3REYXRhLCBwaF9ub2RlLAotCQkJCQkJCQkJCXBhaXJpbmdoZWFwX2ZpcnN0 KCZSZWdpc3RlcmVkU25hcHNob3RzKSk7CisJbWluU25hcHNob3QgPSBkbGlzdF9oZWFkX2Vs ZW1lbnQoTVZDQ1NuYXBzaG90RGF0YSwgbm9kZSwgJlZhbGlkU25hcHNob3RzKTsKIAogCWlm IChUcmFuc2FjdGlvbklkUHJlY2VkZXMoTXlQcm9jLT54bWluLCBtaW5TbmFwc2hvdC0+eG1p bikpCiAJCU15UHJvYy0+eG1pbiA9IFRyYW5zYWN0aW9uWG1pbiA9IG1pblNuYXBzaG90LT54 bWluOwpAQCAtMTAzNSw3ICsxMDM3LDEwIEBAIEF0U3ViQWJvcnRfU25hcHNob3QoaW50IGxl dmVsKQogCiAJCWlmIChBY3RpdmVTbmFwc2hvdC0+YXNfc25hcC0+YWN0aXZlX2NvdW50ID09 IDAgJiYKIAkJCUFjdGl2ZVNuYXBzaG90LT5hc19zbmFwLT5yZWdkX2NvdW50ID09IDApCisJ CXsKKwkJCWRsaXN0X2RlbGV0ZSgmQWN0aXZlU25hcHNob3QtPmFzX3NuYXAtPm5vZGUpOwog CQkJRnJlZU1WQ0NTbmFwc2hvdChBY3RpdmVTbmFwc2hvdC0+YXNfc25hcCk7CisJCX0KIAog CQkvKiBhbmQgZnJlZSB0aGUgc3RhY2sgZWxlbWVudCAqLwogCQlwZnJlZShBY3RpdmVTbmFw c2hvdCk7CkBAIC0xMDUzLDIzICsxMDU4LDYgQEAgQXRTdWJBYm9ydF9TbmFwc2hvdChpbnQg bGV2ZWwpCiB2b2lkCiBBdEVPWGFjdF9TbmFwc2hvdChib29sIGlzQ29tbWl0LCBib29sIHJl c2V0WG1pbikKIHsKLQkvKgotCSAqIEluIHRyYW5zYWN0aW9uLXNuYXBzaG90IG1vZGUgd2Ug bXVzdCByZWxlYXNlIG91ciBwcml2YXRlbHktbWFuYWdlZAotCSAqIHJlZmVyZW5jZSB0byB0 aGUgdHJhbnNhY3Rpb24gc25hcHNob3QuICBXZSBtdXN0IHJlbW92ZSBpdCBmcm9tCi0JICog UmVnaXN0ZXJlZFNuYXBzaG90cyB0byBrZWVwIHRoZSBjaGVjayBiZWxvdyBoYXBweS4gIEJ1 dCB3ZSBkb24ndCBib3RoZXIKLQkgKiB0byBkbyBGcmVlTVZDQ1NuYXBzaG90LCBmb3IgdHdv IHJlYXNvbnM6IHRoZSBtZW1vcnkgd2lsbCBnbyBhd2F5IHdpdGgKLQkgKiBUb3BUcmFuc2Fj dGlvbkNvbnRleHQgYW55d2F5LCBhbmQgaWYgc29tZW9uZSBoYXMgbGVmdCB0aGUgc25hcHNo b3QKLQkgKiBzdGFja2VkIGFzIGFjdGl2ZSwgd2UgZG9uJ3Qgd2FudCB0aGUgY29kZSBiZWxv dyB0byBiZSBjaGFzaW5nIHRocm91Z2ggYQotCSAqIGRhbmdsaW5nIHBvaW50ZXIuCi0JICov Ci0JaWYgKEZpcnN0WGFjdFNuYXBzaG90UmVnaXN0ZXJlZCkKLQl7Ci0JCUFzc2VydChDdXJy ZW50U25hcHNob3REYXRhLnJlZ2RfY291bnQgPiAwKTsKLQkJQXNzZXJ0KCFwYWlyaW5naGVh cF9pc19lbXB0eSgmUmVnaXN0ZXJlZFNuYXBzaG90cykpOwotCQlwYWlyaW5naGVhcF9yZW1v dmUoJlJlZ2lzdGVyZWRTbmFwc2hvdHMsICZDdXJyZW50U25hcHNob3REYXRhLnBoX25vZGUp OwotCQlGaXJzdFhhY3RTbmFwc2hvdFJlZ2lzdGVyZWQgPSBmYWxzZTsKLQl9Ci0KIAkvKgog CSAqIElmIHdlIGV4cG9ydGVkIGFueSBzbmFwc2hvdHMsIGNsZWFuIHRoZW0gdXAuCiAJICov CkBAIC0xMDgyLDggKzEwNzAsOCBAQCBBdEVPWGFjdF9TbmFwc2hvdChib29sIGlzQ29tbWl0 LCBib29sIHJlc2V0WG1pbikKIAkJICogaXQncyB0b28gbGF0ZSB0byBhYm9ydCB0aGUgdHJh bnNhY3Rpb24sIGFuZCAoMikgbGVhdmluZyBhIGxlYWtlZAogCQkgKiBmaWxlIGFyb3VuZCBo YXMgbGl0dGxlIHJlYWwgY29uc2VxdWVuY2UgYW55d2F5LgogCQkgKgotCQkgKiBXZSBhbHNv IG5lZWQgdG8gcmVtb3ZlIHRoZSBzbmFwc2hvdHMgZnJvbSBSZWdpc3RlcmVkU25hcHNob3Rz IHRvCi0JCSAqIHByZXZlbnQgYSB3YXJuaW5nIGJlbG93LgorCQkgKiBXZSBhbHNvIG5lZWQg dG8gcmVtb3ZlIHRoZSBzbmFwc2hvdHMgZnJvbSBWYWxpZFNuYXBzaG90cyB0byBwcmV2ZW50 CisJCSAqIGEgd2FybmluZyBiZWxvdy4KIAkJICoKIAkJICogQXMgd2l0aCB0aGUgRmlyc3RY YWN0U25hcHNob3QsIHdlIGRvbid0IG5lZWQgdG8gZnJlZSByZXNvdXJjZXMgb2YKIAkJICog dGhlIHNuYXBzaG90IGl0c2VsZiBhcyBpdCB3aWxsIGdvIGF3YXkgd2l0aCB0aGUgbWVtb3J5 IGNvbnRleHQuCkBAIC0xMDk2LDIyICsxMDg0LDM1IEBAIEF0RU9YYWN0X1NuYXBzaG90KGJv b2wgaXNDb21taXQsIGJvb2wgcmVzZXRYbWluKQogCQkJCWVsb2coV0FSTklORywgImNvdWxk IG5vdCB1bmxpbmsgZmlsZSBcIiVzXCI6ICVtIiwKIAkJCQkJIGVzbmFwLT5zbmFwZmlsZSk7 CiAKLQkJCXBhaXJpbmdoZWFwX3JlbW92ZSgmUmVnaXN0ZXJlZFNuYXBzaG90cywKLQkJCQkJ CQkgICAmZXNuYXAtPnNuYXBzaG90LT5waF9ub2RlKTsKKwkJCWRsaXN0X2RlbGV0ZSgmZXNu YXAtPnNuYXBzaG90LT5ub2RlKTsKIAkJfQogCiAJCWV4cG9ydGVkU25hcHNob3RzID0gTklM OwogCX0KIAotCS8qIERyb3AgY2F0YWxvZyBzbmFwc2hvdCBpZiBhbnkgKi8KLQlJbnZhbGlk YXRlQ2F0YWxvZ1NuYXBzaG90KCk7CisJLyogRHJvcCBhbGwgc3RhdGljIHNuYXBzaG90ICov CisJaWYgKENhdGFsb2dTbmFwc2hvdERhdGEudmFsaWQpCisJeworCQlkbGlzdF9kZWxldGUo JkNhdGFsb2dTbmFwc2hvdERhdGEubm9kZSk7CisJCUNhdGFsb2dTbmFwc2hvdERhdGEudmFs aWQgPSBmYWxzZTsKKwl9CisJaWYgKEN1cnJlbnRTbmFwc2hvdERhdGEudmFsaWQpCisJewor CQlkbGlzdF9kZWxldGUoJkN1cnJlbnRTbmFwc2hvdERhdGEubm9kZSk7CisJCUN1cnJlbnRT bmFwc2hvdERhdGEudmFsaWQgPSBmYWxzZTsKKwl9CisJaWYgKFNlY29uZGFyeVNuYXBzaG90 RGF0YS52YWxpZCkKKwl7CisJCWRsaXN0X2RlbGV0ZSgmU2Vjb25kYXJ5U25hcHNob3REYXRh Lm5vZGUpOworCQlTZWNvbmRhcnlTbmFwc2hvdERhdGEudmFsaWQgPSBmYWxzZTsKKwl9CiAK IAkvKiBPbiBjb21taXQsIGNvbXBsYWluIGFib3V0IGxlZnRvdmVyIHNuYXBzaG90cyAqLwog CWlmIChpc0NvbW1pdCkKIAl7CiAJCUFjdGl2ZVNuYXBzaG90RWx0ICphY3RpdmU7CiAKLQkJ aWYgKCFwYWlyaW5naGVhcF9pc19lbXB0eSgmUmVnaXN0ZXJlZFNuYXBzaG90cykpCisJCWlm ICghZGxpc3RfaXNfZW1wdHkoJlZhbGlkU25hcHNob3RzKSkKIAkJCWVsb2coV0FSTklORywg InJlZ2lzdGVyZWQgc25hcHNob3RzIHNlZW0gdG8gcmVtYWluIGFmdGVyIGNsZWFudXAiKTsK IAogCQkvKiBjb21wbGFpbiBhYm91dCB1bnBvcHBlZCBhY3RpdmUgc25hcHNob3RzICovCkBA IC0xMTI0LDExICsxMTI1LDEyIEBAIEF0RU9YYWN0X1NuYXBzaG90KGJvb2wgaXNDb21taXQs IGJvb2wgcmVzZXRYbWluKQogCSAqIGl0J2xsIGdvIGF3YXkgd2l0aCBUb3BUcmFuc2FjdGlv bkNvbnRleHQuCiAJICovCiAJQWN0aXZlU25hcHNob3QgPSBOVUxMOwotCXBhaXJpbmdoZWFw X3Jlc2V0KCZSZWdpc3RlcmVkU25hcHNob3RzKTsKKwlkbGlzdF9pbml0KCZWYWxpZFNuYXBz aG90cyk7CiAKIAlDdXJyZW50U25hcHNob3REYXRhLnZhbGlkID0gZmFsc2U7CiAJU2Vjb25k YXJ5U25hcHNob3REYXRhLnZhbGlkID0gZmFsc2U7CiAJRmlyc3RTbmFwc2hvdFNldCA9IGZh bHNlOworCUZpcnN0WGFjdFNuYXBzaG90UmVnaXN0ZXJlZCA9IGZhbHNlOwogCiAJLyoKIAkg KiBEdXJpbmcgbm9ybWFsIGNvbW1pdCBwcm9jZXNzaW5nLCB3ZSBjYWxsIFByb2NBcnJheUVu ZFRyYW5zYWN0aW9uKCkgdG8KQEAgLTExNTEsNiArMTE1Myw3IEBAIEF0RU9YYWN0X1NuYXBz aG90KGJvb2wgaXNDb21taXQsIGJvb2wgcmVzZXRYbWluKQogY2hhciAqCiBFeHBvcnRTbmFw c2hvdChNVkNDU25hcHNob3Qgc25hcHNob3QpCiB7CisJTVZDQ1NuYXBzaG90IG9yaWdfc25h cHNob3Q7CiAJVHJhbnNhY3Rpb25JZCB0b3BYaWQ7CiAJVHJhbnNhY3Rpb25JZCAqY2hpbGRy ZW47CiAJRXhwb3J0ZWRTbmFwc2hvdCAqZXNuYXA7CkBAIC0xMjEzLDcgKzEyMTYsOCBAQCBF eHBvcnRTbmFwc2hvdChNVkNDU25hcHNob3Qgc25hcHNob3QpCiAJICogZW5zdXJlIHRoYXQg dGhlIHNuYXBzaG90J3MgeG1pbiBpcyBob25vcmVkIGZvciB0aGUgcmVzdCBvZiB0aGUKIAkg KiB0cmFuc2FjdGlvbi4KIAkgKi8KLQlzbmFwc2hvdCA9IENvcHlNVkNDU25hcHNob3Qoc25h cHNob3QpOworCW9yaWdfc25hcHNob3QgPSBzbmFwc2hvdDsKKwlzbmFwc2hvdCA9IENvcHlN VkNDU25hcHNob3Qob3JpZ19zbmFwc2hvdCk7CiAKIAlvbGRjeHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8oVG9wVHJhbnNhY3Rpb25Db250ZXh0KTsKIAllc25hcCA9IChFeHBvcnRlZFNu YXBzaG90ICopIHBhbGxvYyhzaXplb2YoRXhwb3J0ZWRTbmFwc2hvdCkpOwpAQCAtMTIyMyw3 ICsxMjI3LDcgQEAgRXhwb3J0U25hcHNob3QoTVZDQ1NuYXBzaG90IHNuYXBzaG90KQogCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjeHQpOwogCiAJc25hcHNob3QtPnJlZ2RfY291bnQr KzsKLQlwYWlyaW5naGVhcF9hZGQoJlJlZ2lzdGVyZWRTbmFwc2hvdHMsICZzbmFwc2hvdC0+ cGhfbm9kZSk7CisJZGxpc3RfaW5zZXJ0X2FmdGVyKCZvcmlnX3NuYXBzaG90LT5ub2RlLCAm c25hcHNob3QtPm5vZGUpOwogCiAJLyoKIAkgKiBGaWxsIGJ1ZiB3aXRoIGEgdGV4dCBzZXJp YWxpemF0aW9uIG9mIHRoZSBzbmFwc2hvdCwgcGx1cyBpZGVudGlmaWNhdGlvbgpAQCAtMTY1 Myw3ICsxNjU3LDcgQEAgRGVsZXRlQWxsRXhwb3J0ZWRTbmFwc2hvdEZpbGVzKHZvaWQpCiAK IC8qCiAgKiBUaGVyZUFyZU5vUHJpb3JSZWdpc3RlcmVkU25hcHNob3RzCi0gKgkJSXMgdGhl IHJlZ2lzdGVyZWQgc25hcHNob3QgY291bnQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG9uZT8K KyAqCQlBcmUgdGhlcmUgYW55IHNuYXBzaG90cyBvdGhlciB0aGFuIHRoZSBjdXJyZW50IGFj dGl2ZSBzbmFwc2hvdD8KICAqCiAgKiBEb24ndCB1c2UgdGhpcyB0byBzZXR0bGUgaW1wb3J0 YW50IGRlY2lzaW9ucy4gIFdoaWxlIHplcm8gcmVnaXN0cmF0aW9ucyBhbmQKICAqIG5vIEFj dGl2ZVNuYXBzaG90IHdvdWxkIGNvbmZpcm0gYSBjZXJ0YWluIGlkbGVuZXNzLCB0aGUgc3lz dGVtIG1ha2VzIG5vCkBAIC0xNjYyLDExICsxNjY2LDI1IEBAIERlbGV0ZUFsbEV4cG9ydGVk U25hcHNob3RGaWxlcyh2b2lkKQogYm9vbAogVGhlcmVBcmVOb1ByaW9yUmVnaXN0ZXJlZFNu YXBzaG90cyh2b2lkKQogewotCWlmIChwYWlyaW5naGVhcF9pc19lbXB0eSgmUmVnaXN0ZXJl ZFNuYXBzaG90cykgfHwKLQkJcGFpcmluZ2hlYXBfaXNfc2luZ3VsYXIoJlJlZ2lzdGVyZWRT bmFwc2hvdHMpKQotCQlyZXR1cm4gdHJ1ZTsKKwlkbGlzdF9pdGVyCWl0ZXI7CiAKLQlyZXR1 cm4gZmFsc2U7CisJZGxpc3RfZm9yZWFjaChpdGVyLCAmVmFsaWRTbmFwc2hvdHMpCisJewor CQlNVkNDU25hcHNob3QgY3VyID0gZGxpc3RfY29udGFpbmVyKE1WQ0NTbmFwc2hvdERhdGEs IG5vZGUsIGl0ZXIuY3VyKTsKKworCQlpZiAoRmlyc3RYYWN0U25hcHNob3RSZWdpc3RlcmVk KQorCQl7CisJCQlBc3NlcnQoQ3VycmVudFNuYXBzaG90RGF0YS52YWxpZCk7CisJCQlpZiAo Y3VyICE9ICZDdXJyZW50U25hcHNob3REYXRhKQorCQkJCWNvbnRpbnVlOworCQl9CisJCWlm IChBY3RpdmVTbmFwc2hvdCAmJiBjdXIgPT0gQWN0aXZlU25hcHNob3QtPmFzX3NuYXApCisJ CQljb250aW51ZTsKKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7CiB9 CiAKIC8qCkBAIC0xNjg0LDE1ICsxNzAyLDE4IEBAIEhhdmVSZWdpc3RlcmVkT3JBY3RpdmVT bmFwc2hvdCh2b2lkKQogCQlyZXR1cm4gdHJ1ZTsKIAogCS8qCi0JICogVGhlIGNhdGFsb2cg c25hcHNob3QgaXMgaW4gUmVnaXN0ZXJlZFNuYXBzaG90cyB3aGVuIHZhbGlkLCBidXQgY2Fu IGJlCisJICogVGhlIGNhdGFsb2cgc25hcHNob3QgaXMgaW4gVmFsaWRTbmFwc2hvdHMgd2hl biB2YWxpZCwgYnV0IGNhbiBiZQogCSAqIHJlbW92ZWQgYXQgYW55IHRpbWUgZHVlIHRvIGlu dmFsaWRhdGlvbiBwcm9jZXNzaW5nLiBJZiBleHBsaWNpdGx5Ci0JICogcmVnaXN0ZXJlZCBt b3JlIHRoYW4gb25lIHNuYXBzaG90IGhhcyB0byBiZSBpbiBSZWdpc3RlcmVkU25hcHNob3Rz LgorCSAqIHJlZ2lzdGVyZWQgbW9yZSB0aGFuIG9uZSBzbmFwc2hvdCBoYXMgdG8gYmUgaW4g VmFsaWRTbmFwc2hvdHMuCiAJICovCiAJaWYgKENhdGFsb2dTbmFwc2hvdERhdGEudmFsaWQg JiYKLQkJcGFpcmluZ2hlYXBfaXNfc2luZ3VsYXIoJlJlZ2lzdGVyZWRTbmFwc2hvdHMpKQor CQlkbGlzdF9oZWFkX25vZGUoJlZhbGlkU25hcHNob3RzKSA9PSAmQ2F0YWxvZ1NuYXBzaG90 RGF0YS5ub2RlICYmCisJCWRsaXN0X3RhaWxfbm9kZSgmVmFsaWRTbmFwc2hvdHMpID09ICZD YXRhbG9nU25hcHNob3REYXRhLm5vZGUpCisJewogCQlyZXR1cm4gZmFsc2U7CisJfQogCi0J cmV0dXJuICFwYWlyaW5naGVhcF9pc19lbXB0eSgmUmVnaXN0ZXJlZFNuYXBzaG90cyk7CisJ cmV0dXJuICFkbGlzdF9pc19lbXB0eSgmVmFsaWRTbmFwc2hvdHMpOwogfQogCiAKQEAgLTE4 ODQsNyArMTkwNSw3IEBAIFJlc3RvcmVTbmFwc2hvdChjaGFyICpzdGFydF9hZGRyZXNzKQog CVJlc291cmNlT3duZXJFbmxhcmdlKEN1cnJlbnRSZXNvdXJjZU93bmVyKTsKIAlzbmFwc2hv dC0+cmVnZF9jb3VudCsrOwogCVJlc291cmNlT3duZXJSZW1lbWJlclNuYXBzaG90KEN1cnJl bnRSZXNvdXJjZU93bmVyLCAoU25hcHNob3QpIHNuYXBzaG90KTsKLQlwYWlyaW5naGVhcF9h ZGQoJlJlZ2lzdGVyZWRTbmFwc2hvdHMsICZzbmFwc2hvdC0+cGhfbm9kZSk7CisJdmFsaWRf c25hcHNob3RzX3B1c2hfb3V0X29mX29yZGVyKHNuYXBzaG90KTsKIAogCXJldHVybiBzbmFw c2hvdDsKIH0KQEAgLTIwMTUsMyArMjAzNiw0NSBAQCBSZXNPd25lclJlbGVhc2VTbmFwc2hv dChEYXR1bSByZXMpCiB7CiAJVW5yZWdpc3RlclNuYXBzaG90Tm9Pd25lcigoU25hcHNob3Qp IERhdHVtR2V0UG9pbnRlcihyZXMpKTsKIH0KKworCisvKiBIZWxwZXIgZnVuY3Rpb25zIHRv IG1hbmlwdWxhdGUgdGhlIFZhbGlkU25hcHNob3RzIGxpc3QgKi8KKworLyogZGxpc3RfcHVz aF90YWlsLCB3aXRoIGFzc2VydGlvbiB0aGF0IHRoZSBsaXN0IHN0YXlzIG9yZGVyZWQgYnkg eG1pbiAqLworc3RhdGljIHZvaWQKK3ZhbGlkX3NuYXBzaG90c19wdXNoX3RhaWwoTVZDQ1Nu YXBzaG90IHNuYXBzaG90KQoreworI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKKwlpZiAo IWRsaXN0X2lzX2VtcHR5KCZWYWxpZFNuYXBzaG90cykpCisJeworCQlNVkNDU25hcHNob3Qg dGFpbCA9IGRsaXN0X3RhaWxfZWxlbWVudChNVkNDU25hcHNob3REYXRhLCBub2RlLCAmVmFs aWRTbmFwc2hvdHMpOworCisJCUFzc2VydChUcmFuc2FjdGlvbklkRm9sbG93c09yRXF1YWxz KHNuYXBzaG90LT54bWluLCB0YWlsLT54bWluKSk7CisJfQorI2VuZGlmCisJZGxpc3RfcHVz aF90YWlsKCZWYWxpZFNuYXBzaG90cywgJnNuYXBzaG90LT5ub2RlKTsKK30KKworLyoKKyAq IEFkZCBhbiBlbnRyeSB0byB0aGUgcmlnaHQgcG9zaXRpb24gaW4gdGhlIGxpc3QsIGtlZXBp bmcgaXQgb3JkZXJlZCBieSB4bWluLgorICoKKyAqIFRoaXMgaXMgTyhuKSwgYnV0IHRoYXQn cyBPSyBiZWNhdXNlIGl0J3Mgb25seSB1c2VkIGluIHJhcmUgb2NjYXNpb25zLCB3aGVuCisg KiB0aGUgbGlzdCBpcyBzbWFsbC4KKyAqLworc3RhdGljIHZvaWQKK3ZhbGlkX3NuYXBzaG90 c19wdXNoX291dF9vZl9vcmRlcihNVkNDU25hcHNob3Qgc25hcHNob3QpCit7CisJZGxpc3Rf aXRlcglpdGVyOworCisJZGxpc3RfZm9yZWFjaChpdGVyLCAmVmFsaWRTbmFwc2hvdHMpCisJ eworCQlNVkNDU25hcHNob3QgY3VyID0gZGxpc3RfY29udGFpbmVyKE1WQ0NTbmFwc2hvdERh dGEsIG5vZGUsIGl0ZXIuY3VyKTsKKworCQlpZiAoVHJhbnNhY3Rpb25JZEZvbGxvd3NPckVx dWFscyhzbmFwc2hvdC0+eG1pbiwgY3VyLT54bWluKSkKKwkJeworCQkJZGxpc3RfaW5zZXJ0 X2FmdGVyKCZjdXItPm5vZGUsICZzbmFwc2hvdC0+bm9kZSk7CisJCQlyZXR1cm47CisJCX0K Kwl9CisJZGxpc3RfcHVzaF90YWlsKCZWYWxpZFNuYXBzaG90cywgJnNuYXBzaG90LT5ub2Rl KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9zcGdpc3RfcHJpdmF0ZS5o IGIvc3JjL2luY2x1ZGUvYWNjZXNzL3NwZ2lzdF9wcml2YXRlLmgKaW5kZXggY2I0M2EyNzhm NDYuLjI3ZWQxZDc3YzliIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0 X3ByaXZhdGUuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3Mvc3BnaXN0X3ByaXZhdGUuaApA QCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9pdHVwLmgiCiAjaW5jbHVkZSAi YWNjZXNzL3NwZ2lzdC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgorI2luY2x1 ZGUgImxpYi9wYWlyaW5naGVhcC5oIgogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgog I2luY2x1ZGUgInN0b3JhZ2UvYnVmLmgiCiAjaW5jbHVkZSAidXRpbHMvZ2VvX2RlY2xzLmgi CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGlscy9zbmFwc2hvdC5oIGIvc3JjL2luY2x1 ZGUvdXRpbHMvc25hcHNob3QuaAppbmRleCAxNjk3YzZkZjg1Ni4uNDRiM2IyMGY3M2MgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3NuYXBzaG90LmgKKysrIGIvc3JjL2luY2x1 ZGUvdXRpbHMvc25hcHNob3QuaApAQCAtMTMsNyArMTMsNyBAQAogI2lmbmRlZiBTTkFQU0hP VF9ICiAjZGVmaW5lIFNOQVBTSE9UX0gKIAotI2luY2x1ZGUgImxpYi9wYWlyaW5naGVhcC5o IgorI2luY2x1ZGUgImxpYi9pbGlzdC5oIgogCiAKIC8qCkBAIC0xNjksOCArMTY5LDggQEAg dHlwZWRlZiBzdHJ1Y3QgTVZDQ1NuYXBzaG90RGF0YQogCSAqIEJvb2sta2VlcGluZyBpbmZv cm1hdGlvbiwgdXNlZCBieSB0aGUgc25hcHNob3QgbWFuYWdlcgogCSAqLwogCXVpbnQzMgkJ YWN0aXZlX2NvdW50OwkvKiByZWZjb3VudCBvbiBBY3RpdmVTbmFwc2hvdCBzdGFjayAqLwot CXVpbnQzMgkJcmVnZF9jb3VudDsJCS8qIHJlZmNvdW50IG9uIFJlZ2lzdGVyZWRTbmFwc2hv dHMgKi8KLQlwYWlyaW5naGVhcF9ub2RlIHBoX25vZGU7CS8qIGxpbmsgaW4gdGhlIFJlZ2lz dGVyZWRTbmFwc2hvdHMgaGVhcCAqLworCXVpbnQzMgkJcmVnZF9jb3VudDsJCS8qIHJlZmNv dW50IG9mIHJlZ2lzdHJhdGlvbnMgaW4gcmVzb3duZXJzICovCisJZGxpc3Rfbm9kZQlub2Rl OwkJCS8qIGxpbmsgaW4gVmFsaWRTbmFwc2hvdHMgKi8KIAogCS8qCiAJICogVGhlIHRyYW5z YWN0aW9uIGNvbXBsZXRpb24gY291bnQgYXQgdGhlIHRpbWUgR2V0U25hcHNob3REYXRhKCkg YnVpbHQKLS0gCjIuMzkuNQoK --------------nSXAXBhgWt0AUd9uE0wCc0X0 Content-Type: text/x-patch; charset=UTF-8; name="v6-0007-Split-MVCCSnapshot-into-inner-and-outer-parts.patch" Content-Disposition: attachment; filename*0="v6-0007-Split-MVCCSnapshot-into-inner-and-outer-parts.patch" Content-Transfer-Encoding: base64 RnJvbSAwNTQ0MzAzMDIwMWQ1OTIxNmIzMTI1ZDUxYzY0MWI2OGRlY2Q0Mzc5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMzEgTWFyIDIwMjUgMjE6NDY6NTQgKzAzMDAK U3ViamVjdDogW1BBVENIIHY2IDA3LzEyXSBTcGxpdCBNVkNDU25hcHNob3QgaW50byBpbm5l ciBhbmQgb3V0ZXIgcGFydHMKClNwbGl0IE1WQ0NTbmFwc2hvdCBpbnRvIHR3byBwYXJ0czog aW5uZXIgc3RydWN0IHRvIGhvbGQgdGhlIHhtaW4sIHhtYXgKYW5kIFhJRCBhcnJheXMgdGhh dCBkZXRlcm1pbmUgd2hpY2ggdHJhbnNhY3Rpb25zIGFyZSB2aXNpYmxlLCBhbmQgYW4Kb3V0 ZXIgc2hlbGwgdGhhdCBpbmNsdWRlcyB0aGUgY29tbWFuZCBJRCBhbmQgYSBwb2ludGVyIHRv IHRoZSBpbm5lcgpzdHJ1Y3QuIFRoYXQgd2F5LCB0aGUgaW5uZXIgc3RydWN0IGNhbiBiZSBz aGFyZWQgYnkgc25hcHNob3RzIGRlcml2ZWQKZnJvbSB0aGUgc2FtZSBvcmlnaW5hbCBzbmFw c2hvdCwganVzdCB3aXRoIGRpZmZlcmVudCBjb21tYW5kIElEcy4KClRoZSBpbm5lciBzdHJ1 Y3QsIE1WQ0NTbmFwc2hvdFNoYXJlZCwgaXMgcmVmZXJlbmNlIGNvdW50ZWQgc2VwYXJhdGVs eQpzbyB0aGF0IHdlIGNhbiBhdm9pZCBjb3B5aW5nIGl0IHdoZW4gcHVzaGluZyBvciByZWdp c3RlcmluZyBhIHNuYXBzaG90CmZvciB0aGUgZmlyc3QgdGltZS4gQWxzbywgR2V0TVZDQ1Nu YXBzaG90RGF0YSgpIGNhbiByZXVzZSBpdCBtb3JlCmFnZ3Jlc3NpdmVseTogd2UgYWx3YXlz IGtlZXAgYSBwb2ludGVyIHRvIHRoZSBsYXRlc3Qgc2hhcmVkIHN0cnVjdAoobGF0ZXN0U25h cHNob3RTaGFyZWQpLCBhbmQgR2V0TVZDQ1NuYXBzaG90RGF0YSgpIGFsd2F5cyB0cmllcyB0 bwpyZXVzZSB0aGUgc2FtZSBsYXRlc3Qgc25hcHNob3QsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhl ciBpdCB3YXMgY2FsbGVkCmZyb20gR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpLCBHZXRMYXRl c3RTbmFwc2hvdCgpLCBvcgpHZXRDYXRhbG9nU25hcHNob3QoKS4gVGhhdCBhdm9pZHMgdW5u ZWNlc3NhcnkgY29weWluZy4gU25hcHNob3RzIGFyZQp1c3VhbGx5IHNtYWxsIHNvIHRoYXQg aXQgZG9lc24ndCBtYXR0ZXIsIGJ1dCBpdCBjYW4gaGVscCBpbiBleHRyZW1lCmNhc2VzIHdo ZXJlIHlvdSBoYXZlIHRob3VzYW5kcyBvZiAoc3ViLSlYSURzIGluIHByb2dyZXNzLgoKTm93 IHRoYXQgdGhlIHNoYXJlZCBpbm5lciBzdHJ1Y3RzIGFyZSByZWZlcmVuY2UgY291bnRlZCwg aXQgc2VlbXMKdW5uZWNlc3NhcnkgdG8gcmVmZXJlbmNlIGNvdW50IHRoZSBvdXRlciBNVkND U25hcHNob3RzCnNlcGFyYXRlbHkuIFRoYXQgbWVhbnMgdGhhdCBSZWdpc3RlclNuYXBzaG90 KCkgYWx3YXlzIG1ha2VzIGEgbmV3CnBhbGxvYydkIGNvcHkgb2YgdGhlIG91dGVyIHN0cnVj dCwgYnV0IHRoYXQncyBwcmV0dHkgc21hbGwuIFRoZQpBY3RpdmVTbmFwc2hvdCBzdGFjayBl bnRyaWVzIG5vdyBlbWJlZCB0aGUgb3V0ZXIgc3RydWN0IGRpcmVjdGx5LCBzbwp0aGUgJ2Fj dGl2ZV9jb3VudCcgaXMgZ29uZSB0b28uCgpUaGUgVmFsaWRTbmFwc2hvdHMgbGlzdCBub3cg dHJhY2tzIHRoZSBzaGFyZWQgc3RydWN0cyByYXRoZXIgdGhhbiB0aGUKb3V0ZXIgc25hcHNo b3RzLiBUaGF0J3Mgc3VmZmljaWVudCBmb3IgZmluZGluZyB0aGUgb2xkZXN0IHhtaW4sIGJ1 dCBpZgp3ZSBldmVyIHdhbnRlZCB0byBhbHNvIGtub3cgdGhlIG9sZGVzdCBjb21tYW5kIElE IGluIHVzZSwgd2UnZCBuZWVkIHRvCnRyYWNrIHRoZSBvdXRlciBzdHJ1Y3RzIGluc3RlYWQu Ci0tLQogY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9oZWFwYW0uYyAgICAgICAgICAgICB8ICAg MiArLQogY29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyAgICAgICAgICAgICB8ICAg MiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgICAgICAgICAgICB8ICAg MiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyAgICB8ICAg MiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX3Zpc2liaWxpdHkuYyB8ICAx OCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYyAgICAgICB8ICAg MiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vUkVBRE1FICAgICAgICAgICB8ICAy NiArLQogc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jICAgICAgICAgICB8ICAg NiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyAgICAgICAgICAgICAgICB8ICAg MiArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAgICB8ICAg NCArLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgICAgICAgICAgICB8ICAg MiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAgICAgICB8ICAx MiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVsLmMgICAgICAgICB8ICAg MyArLQogc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRkZXNjLmMgICAgICAgICB8ICAg MiArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYyB8ICA0 MCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMgICAgICAgICB8ICAg MiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgICAgICAgICB8IDEz OCArKystLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jICAgICAgICB8 IDEwOSArKy0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQveGlkOGZ1bmNzLmMgICAgICAgICAg IHwgICA4ICstCiBzcmMvYmFja2VuZC91dGlscy90aW1lL3NuYXBtZ3IuYyAgICAgICAgICAg IHwgNjA1ICsrKysrKysrKystLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdHJhbnNh bS5oICAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3ByZWRp Y2F0ZS5oICAgICAgICAgICAgIHwgICA4ICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2Mu aCAgICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2Nh cnJheS5oICAgICAgICAgICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS91dGlscy9zbmFwbWdy LmggICAgICAgICAgICAgICAgIHwgIDExICstCiBzcmMvaW5jbHVkZS91dGlscy9zbmFwc2hv dC5oICAgICAgICAgICAgICAgIHwgIDUxICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRl ZnMubGlzdCAgICAgICAgICAgIHwgICAyICsKIDI3IGZpbGVzIGNoYW5nZWQsIDUzNiBpbnNl cnRpb25zKCspLCA1MzEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9hbWNo ZWNrL3ZlcmlmeV9oZWFwYW0uYyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfaGVhcGFtLmMK aW5kZXggNjY2NWNhZmMxNzkuLmQ3ZjBiNzcyZjk0IDEwMDY0NAotLS0gYS9jb250cmliL2Ft Y2hlY2svdmVyaWZ5X2hlYXBhbS5jCisrKyBiL2NvbnRyaWIvYW1jaGVjay92ZXJpZnlfaGVh cGFtLmMKQEAgLTMxMCw3ICszMTAsNyBAQCB2ZXJpZnlfaGVhcGFtKFBHX0ZVTkNUSU9OX0FS R1MpCiAJICogQW55IHhtaW4gbmV3ZXIgdGhhbiB0aGUgeG1pbiBvZiBvdXIgc25hcHNob3Qg Y2FuJ3QgYmVjb21lIGFsbC12aXNpYmxlCiAJICogd2hpbGUgd2UncmUgcnVubmluZy4KIAkg Ki8KLQljdHguc2FmZV94bWluID0gR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpLT5tdmNjLnht aW47CisJY3R4LnNhZmVfeG1pbiA9IEdldFRyYW5zYWN0aW9uU25hcHNob3QoKS0+bXZjYy5z aGFyZWQtPnhtaW47CiAKIAkvKgogCSAqIElmIHdlIHJlcG9ydCBjb3JydXB0aW9uIHdoZW4g bm90IGV4YW1pbmluZyBzb21lIGluZGl2aWR1YWwgYXR0cmlidXRlLApkaWZmIC0tZ2l0IGEv Y29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYyBiL2NvbnRyaWIvYW1jaGVjay92ZXJp ZnlfbmJ0cmVlLmMKaW5kZXggZTkwYjRhMmFkNWEuLmQ3N2RlZDRjYzQwIDEwMDY0NAotLS0g YS9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jCisrKyBiL2NvbnRyaWIvYW1jaGVj ay92ZXJpZnlfbmJ0cmVlLmMKQEAgLTQ1OCw3ICs0NTgsNyBAQCBidF9jaGVja19ldmVyeV9s ZXZlbChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIGJvb2wgaGVhcGtleXNwYWNl LAogCQkJICovCiAJCQlpZiAoSXNvbGF0aW9uVXNlc1hhY3RTbmFwc2hvdCgpICYmIHJlbC0+ cmRfaW5kZXgtPmluZGNoZWNreG1pbiAmJgogCQkJCSFUcmFuc2FjdGlvbklkUHJlY2VkZXMo SGVhcFR1cGxlSGVhZGVyR2V0WG1pbihyZWwtPnJkX2luZGV4dHVwbGUtPnRfZGF0YSksCi0J CQkJCQkJCQkgICBzbmFwc2hvdC0+bXZjYy54bWluKSkKKwkJCQkJCQkJCSAgIHNuYXBzaG90 LT5tdmNjLnNoYXJlZC0+eG1pbikpCiAJCQkJZXJlcG9ydChFUlJPUiwKIAkJCQkJCShlcnJj b2RlKEVSUkNPREVfVF9SX1NFUklBTElaQVRJT05fRkFJTFVSRSksCiAJCQkJCQkgZXJybXNn KCJpbmRleCBcIiVzXCIgY2Fubm90IGJlIHZlcmlmaWVkIHVzaW5nIHRyYW5zYWN0aW9uIHNu YXBzaG90IiwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggMGNmYTEwMGNiZDEu LjA2MTVmZmEyYmQxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYwpAQCAtNjA2LDcg KzYwNiw3IEBAIGhlYXBfcHJlcGFyZV9wYWdlc2NhbihUYWJsZVNjYW5EZXNjIHNzY2FuKQog CSAqIHR1cGxlIGZvciB2aXNpYmlsaXR5IHRoZSBoYXJkIHdheS4KIAkgKi8KIAlhbGxfdmlz aWJsZSA9IFBhZ2VJc0FsbFZpc2libGUocGFnZSkgJiYKLQkJKHNuYXBzaG90LT5zbmFwc2hv dF90eXBlICE9IFNOQVBTSE9UX01WQ0MgfHwgIXNuYXBzaG90LT5tdmNjLnRha2VuRHVyaW5n UmVjb3ZlcnkpOworCQkoc25hcHNob3QtPnNuYXBzaG90X3R5cGUgIT0gU05BUFNIT1RfTVZD QyB8fCAhc25hcHNob3QtPm12Y2Muc2hhcmVkLT50YWtlbkR1cmluZ1JlY292ZXJ5KTsKIAlj aGVja19zZXJpYWxpemFibGUgPQogCQlDaGVja0ZvclNlcmlhbGl6YWJsZUNvbmZsaWN0T3V0 TmVlZGVkKHNjYW4tPnJzX2Jhc2UucnNfcmQsIHNuYXBzaG90KTsKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggZmNlNjU3ZjAwZjYuLmI5YTVi MzhkZDA4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFu ZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMK QEAgLTIzMDgsNyArMjMwOCw3IEBAIGhlYXBhbV9zY2FuX3NhbXBsZV9uZXh0X3R1cGxlKFRh YmxlU2NhbkRlc2Mgc2NhbiwgU2FtcGxlU2NhblN0YXRlICpzY2Fuc3RhdGUsCiAKIAlwYWdl ID0gKFBhZ2UpIEJ1ZmZlckdldFBhZ2UoaHNjYW4tPnJzX2NidWYpOwogCWFsbF92aXNpYmxl ID0gUGFnZUlzQWxsVmlzaWJsZShwYWdlKSAmJgotCQkoc2Nhbi0+cnNfc25hcHNob3QtPnNu YXBzaG90X3R5cGUgIT0gU05BUFNIT1RfTVZDQyB8fCAhc2Nhbi0+cnNfc25hcHNob3QtPm12 Y2MudGFrZW5EdXJpbmdSZWNvdmVyeSk7CisJCShzY2FuLT5yc19zbmFwc2hvdC0+c25hcHNo b3RfdHlwZSAhPSBTTkFQU0hPVF9NVkNDIHx8ICFzY2FuLT5yc19zbmFwc2hvdC0+bXZjYy5z aGFyZWQtPnRha2VuRHVyaW5nUmVjb3ZlcnkpOwogCW1heG9mZnNldCA9IFBhZ2VHZXRNYXhP ZmZzZXROdW1iZXIocGFnZSk7CiAKIAlmb3IgKDs7KQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtX3Zpc2liaWxpdHkuYyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV92aXNpYmlsaXR5LmMKaW5kZXggZjVkNjliNTU4ZjEuLjA3ZjE1NTQ5 OGQ0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1fdmlzaWJp bGl0eS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV92aXNpYmlsaXR5 LmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqIFRoYXQgZml4ZXMgdGhhdCBwcm9ibGVtLCBidXQg aXQgYWxzbyBtZWFucyB0aGVyZSBpcyBhIHdpbmRvdyB3aGVyZQogICogVHJhbnNhY3Rpb25J ZElzSW5Qcm9ncmVzcyBhbmQgVHJhbnNhY3Rpb25JZERpZENvbW1pdCB3aWxsIGJvdGggcmV0 dXJuIHRydWUuCiAgKiBJZiB3ZSBjaGVjayBvbmx5IFRyYW5zYWN0aW9uSWREaWRDb21taXQs IHdlIGNvdWxkIGNvbnNpZGVyIGEgdHVwbGUKLSAqIGNvbW1pdHRlZCB3aGVuIGEgbGF0ZXIg R2V0U25hcHNob3REYXRhIGNhbGwgd2lsbCBzdGlsbCB0aGluayB0aGUKKyAqIGNvbW1pdHRl ZCB3aGVuIGEgbGF0ZXIgR2V0TVZDQ1NuYXBzaG90RGF0YSBjYWxsIHdpbGwgc3RpbGwgdGhp bmsgdGhlCiAgKiBvcmlnaW5hdGluZyB0cmFuc2FjdGlvbiBpcyBpbiBwcm9ncmVzcywgd2hp Y2ggbGVhZHMgdG8gYXBwbGljYXRpb24tbGV2ZWwKICAqIGluY29uc2lzdGVuY3kuICBUaGUg dXBzaG90IGlzIHRoYXQgd2UgZ290dGEgY2hlY2sgVHJhbnNhY3Rpb25JZElzSW5Qcm9ncmVz cwogICogZmlyc3QgaW4gYWxsIGNvZGUgcGF0aHMsIGV4Y2VwdCBmb3IgYSBmZXcgY2FzZXMg d2hlcmUgd2UgYXJlIGxvb2tpbmcgYXQKQEAgLTk2OSw3ICs5NjksNyBAQCBIZWFwVHVwbGVT YXRpc2ZpZXNNVkNDKEhlYXBUdXBsZSBodHVwLCBNVkNDU25hcHNob3Qgc25hcHNob3QsCiAJ ICogZ2V0IGludmFsaWRhdGVkIHdoaWxlIGl0J3Mgc3RpbGwgaW4gdXNlLCBhbmQgdGhpcyBp cyBhIGNvbnZlbmllbnQgcGxhY2UKIAkgKiB0byBjaGVjayBmb3IgdGhhdC4KIAkgKi8KLQlB c3NlcnQoc25hcHNob3QtPnJlZ2RfY291bnQgPiAwIHx8IHNuYXBzaG90LT5hY3RpdmVfY291 bnQgPiAwKTsKKwlBc3NlcnQoc25hcHNob3QtPmtpbmQgPT0gU05BUFNIT1RfQUNUSVZFIHx8 IHNuYXBzaG90LT5raW5kID09IFNOQVBTSE9UX1JFR0lTVEVSRUQpOwogCiAJQXNzZXJ0KEl0 ZW1Qb2ludGVySXNWYWxpZCgmaHR1cC0+dF9zZWxmKSk7CiAJQXNzZXJ0KGh0dXAtPnRfdGFi bGVPaWQgIT0gSW52YWxpZE9pZCk7CkBAIC05ODYsNyArOTg2LDcgQEAgSGVhcFR1cGxlU2F0 aXNmaWVzTVZDQyhIZWFwVHVwbGUgaHR1cCwgTVZDQ1NuYXBzaG90IHNuYXBzaG90LAogCiAJ CQlpZiAoVHJhbnNhY3Rpb25JZElzQ3VycmVudFRyYW5zYWN0aW9uSWQoeHZhYykpCiAJCQkJ cmV0dXJuIGZhbHNlOwotCQkJaWYgKCFYaWRJbk1WQ0NTbmFwc2hvdCh4dmFjLCBzbmFwc2hv dCkpCisJCQlpZiAoIVhpZEluTVZDQ1NuYXBzaG90KHh2YWMsIHNuYXBzaG90LT5zaGFyZWQp KQogCQkJewogCQkJCWlmIChUcmFuc2FjdGlvbklkRGlkQ29tbWl0KHh2YWMpKQogCQkJCXsK QEAgLTEwMDUsNyArMTAwNSw3IEBAIEhlYXBUdXBsZVNhdGlzZmllc01WQ0MoSGVhcFR1cGxl IGh0dXAsIE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCwKIAogCQkJaWYgKCFUcmFuc2FjdGlvbklk SXNDdXJyZW50VHJhbnNhY3Rpb25JZCh4dmFjKSkKIAkJCXsKLQkJCQlpZiAoWGlkSW5NVkND U25hcHNob3QoeHZhYywgc25hcHNob3QpKQorCQkJCWlmIChYaWRJbk1WQ0NTbmFwc2hvdCh4 dmFjLCBzbmFwc2hvdC0+c2hhcmVkKSkKIAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCWlmIChU cmFuc2FjdGlvbklkRGlkQ29tbWl0KHh2YWMpKQogCQkJCQlTZXRIaW50Qml0cyh0dXBsZSwg YnVmZmVyLCBIRUFQX1hNSU5fQ09NTUlUVEVELApAQCAtMTA2MCw3ICsxMDYwLDcgQEAgSGVh cFR1cGxlU2F0aXNmaWVzTVZDQyhIZWFwVHVwbGUgaHR1cCwgTVZDQ1NuYXBzaG90IHNuYXBz aG90LAogCQkJZWxzZQogCQkJCXJldHVybiBmYWxzZTsJLyogZGVsZXRlZCBiZWZvcmUgc2Nh biBzdGFydGVkICovCiAJCX0KLQkJZWxzZSBpZiAoWGlkSW5NVkNDU25hcHNob3QoSGVhcFR1 cGxlSGVhZGVyR2V0UmF3WG1pbih0dXBsZSksIHNuYXBzaG90KSkKKwkJZWxzZSBpZiAoWGlk SW5NVkNDU25hcHNob3QoSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1pbih0dXBsZSksIHNuYXBz aG90LT5zaGFyZWQpKQogCQkJcmV0dXJuIGZhbHNlOwogCQllbHNlIGlmIChUcmFuc2FjdGlv bklkRGlkQ29tbWl0KEhlYXBUdXBsZUhlYWRlckdldFJhd1htaW4odHVwbGUpKSkKIAkJCVNl dEhpbnRCaXRzKHR1cGxlLCBidWZmZXIsIEhFQVBfWE1JTl9DT01NSVRURUQsCkBAIC0xMDc3 LDcgKzEwNzcsNyBAQCBIZWFwVHVwbGVTYXRpc2ZpZXNNVkNDKEhlYXBUdXBsZSBodHVwLCBN VkNDU25hcHNob3Qgc25hcHNob3QsCiAJewogCQkvKiB4bWluIGlzIGNvbW1pdHRlZCwgYnV0 IG1heWJlIG5vdCBhY2NvcmRpbmcgdG8gb3VyIHNuYXBzaG90ICovCiAJCWlmICghSGVhcFR1 cGxlSGVhZGVyWG1pbkZyb3plbih0dXBsZSkgJiYKLQkJCVhpZEluTVZDQ1NuYXBzaG90KEhl YXBUdXBsZUhlYWRlckdldFJhd1htaW4odHVwbGUpLCBzbmFwc2hvdCkpCisJCQlYaWRJbk1W Q0NTbmFwc2hvdChIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWluKHR1cGxlKSwgc25hcHNob3Qt PnNoYXJlZCkpCiAJCQlyZXR1cm4gZmFsc2U7CQkvKiB0cmVhdCBhcyBzdGlsbCBpbiBwcm9n cmVzcyAqLwogCX0KIApAQCAtMTEwOCw3ICsxMTA4LDcgQEAgSGVhcFR1cGxlU2F0aXNmaWVz TVZDQyhIZWFwVHVwbGUgaHR1cCwgTVZDQ1NuYXBzaG90IHNuYXBzaG90LAogCQkJZWxzZQog CQkJCXJldHVybiBmYWxzZTsJLyogZGVsZXRlZCBiZWZvcmUgc2NhbiBzdGFydGVkICovCiAJ CX0KLQkJaWYgKFhpZEluTVZDQ1NuYXBzaG90KHhtYXgsIHNuYXBzaG90KSkKKwkJaWYgKFhp ZEluTVZDQ1NuYXBzaG90KHhtYXgsIHNuYXBzaG90LT5zaGFyZWQpKQogCQkJcmV0dXJuIHRy dWU7CiAJCWlmIChUcmFuc2FjdGlvbklkRGlkQ29tbWl0KHhtYXgpKQogCQkJcmV0dXJuIGZh bHNlOwkJLyogdXBkYXRpbmcgdHJhbnNhY3Rpb24gY29tbWl0dGVkICovCkBAIC0xMTI2LDcg KzExMjYsNyBAQCBIZWFwVHVwbGVTYXRpc2ZpZXNNVkNDKEhlYXBUdXBsZSBodHVwLCBNVkND U25hcHNob3Qgc25hcHNob3QsCiAJCQkJcmV0dXJuIGZhbHNlOwkvKiBkZWxldGVkIGJlZm9y ZSBzY2FuIHN0YXJ0ZWQgKi8KIAkJfQogCi0JCWlmIChYaWRJbk1WQ0NTbmFwc2hvdChIZWFw VHVwbGVIZWFkZXJHZXRSYXdYbWF4KHR1cGxlKSwgc25hcHNob3QpKQorCQlpZiAoWGlkSW5N VkNDU25hcHNob3QoSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1heCh0dXBsZSksIHNuYXBzaG90 LT5zaGFyZWQpKQogCQkJcmV0dXJuIHRydWU7CiAKIAkJaWYgKCFUcmFuc2FjdGlvbklkRGlk Q29tbWl0KEhlYXBUdXBsZUhlYWRlckdldFJhd1htYXgodHVwbGUpKSkKQEAgLTExNDQsNyAr MTE0NCw3IEBAIEhlYXBUdXBsZVNhdGlzZmllc01WQ0MoSGVhcFR1cGxlIGh0dXAsIE1WQ0NT bmFwc2hvdCBzbmFwc2hvdCwKIAllbHNlCiAJewogCQkvKiB4bWF4IGlzIGNvbW1pdHRlZCwg YnV0IG1heWJlIG5vdCBhY2NvcmRpbmcgdG8gb3VyIHNuYXBzaG90ICovCi0JCWlmIChYaWRJ bk1WQ0NTbmFwc2hvdChIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KHR1cGxlKSwgc25hcHNo b3QpKQorCQlpZiAoWGlkSW5NVkNDU25hcHNob3QoSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1h eCh0dXBsZSksIHNuYXBzaG90LT5zaGFyZWQpKQogCQkJcmV0dXJuIHRydWU7CQkvKiB0cmVh dCBhcyBzdGlsbCBpbiBwcm9ncmVzcyAqLwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL3NwZ2lzdC9zcGd2YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdp c3Qvc3BndmFjdXVtLmMKaW5kZXggODUwYWQzNmNkMGEuLjBhOGQ3YjBhMGQ2IDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3ZhY3V1bS5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3BndmFjdXVtLmMKQEAgLTgwOCw3ICs4MDgsNyBAQCBz cGd2YWN1dW1zY2FuKHNwZ0J1bGtEZWxldGVTdGF0ZSAqYmRzKQogCS8qIEZpbmlzaCBzZXR0 aW5nIHVwIHNwZ0J1bGtEZWxldGVTdGF0ZSAqLwogCWluaXRTcEdpc3RTdGF0ZSgmYmRzLT5z cGdzdGF0ZSwgaW5kZXgpOwogCWJkcy0+cGVuZGluZ0xpc3QgPSBOVUxMOwotCWJkcy0+bXlY bWluID0gR2V0QWN0aXZlU25hcHNob3QoKS0+bXZjYy54bWluOworCWJkcy0+bXlYbWluID0g R2V0QWN0aXZlU25hcHNob3QoKS0+bXZjYy5zaGFyZWQtPnhtaW47CiAJYmRzLT5sYXN0Rmls bGVkQmxvY2sgPSBTUEdJU1RfTEFTVF9GSVhFRF9CTEtOTzsKIAogCS8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9SRUFETUUgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9SRUFETUUKaW5kZXggMjMxMTA2MjcwZmQuLjgxNzkyZjBlYWIzIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9SRUFETUUKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vUkVBRE1FCkBAIC0yMzEsNyArMjMxLDcgQEAgd2UgbXVz dCBlbnN1cmUgY29uc2lzdGVuY3kgYWJvdXQgdGhlIGNvbW1pdCBvcmRlciBvZiB0cmFuc2Fj dGlvbnMuCiBGb3IgZXhhbXBsZSwgc3VwcG9zZSBhbiBVUERBVEUgaW4geGFjdCBBIGlzIGJs b2NrZWQgYnkgeGFjdCBCJ3MgcHJpb3IKIHVwZGF0ZSBvZiB0aGUgc2FtZSByb3csIGFuZCB4 YWN0IEIgaXMgZG9pbmcgY29tbWl0IHdoaWxlIHhhY3QgQyBnZXRzIGEKIHNuYXBzaG90LiAg WGFjdCBBIGNhbiBjb21wbGV0ZSBhbmQgY29tbWl0IGFzIHNvb24gYXMgQiByZWxlYXNlcyBp dHMgbG9ja3MuCi1JZiB4YWN0IEMncyBHZXRTbmFwc2hvdERhdGEgc2VlcyB4YWN0IEIgYXMg c3RpbGwgcnVubmluZywgdGhlbiBpdCBoYWQKK0lmIHhhY3QgQydzIEdldE1WQ0NTbmFwc2hv dERhdGEgc2VlcyB4YWN0IEIgYXMgc3RpbGwgcnVubmluZywgdGhlbiBpdCBoYWQKIGJldHRl ciBzZWUgeGFjdCBBIGFzIHN0aWxsIHJ1bm5pbmcgYXMgd2VsbCwgb3IgaXQgd2lsbCBiZSBh YmxlIHRvIHNlZSB0d28KIHR1cGxlIHZlcnNpb25zIC0gb25lIGRlbGV0ZWQgYnkgeGFjdCBC IGFuZCBvbmUgaW5zZXJ0ZWQgYnkgeGFjdCBBLiAgQW5vdGhlcgogcmVhc29uIHdoeSB0aGlz IHdvdWxkIGJlIGJhZCBpcyB0aGF0IEMgd291bGQgc2VlIChpbiB0aGUgcm93IGluc2VydGVk IGJ5IEEpCkBAIC0yNDgsOCArMjQ4LDggQEAgd2l0aCBzbmFwc2hvdC10YWtpbmc6IHdlIGRv IG5vdCBhbGxvdyBhbnkgdHJhbnNhY3Rpb24gdG8gZXhpdCB0aGUgc2V0IG9mCiBydW5uaW5n IHRyYW5zYWN0aW9ucyB3aGlsZSBhIHNuYXBzaG90IGlzIGJlaW5nIHRha2VuLiAgKFRoaXMg cnVsZSBpcwogc3Ryb25nZXIgdGhhbiBuZWNlc3NhcnkgZm9yIGNvbnNpc3RlbmN5LCBidXQg aXMgcmVsYXRpdmVseSBzaW1wbGUgdG8KIGVuZm9yY2UsIGFuZCBpdCBhc3Npc3RzIHdpdGgg c29tZSBvdGhlciBpc3N1ZXMgYXMgZXhwbGFpbmVkIGJlbG93LikgIFRoZQotaW1wbGVtZW50 YXRpb24gb2YgdGhpcyBpcyB0aGF0IEdldFNuYXBzaG90RGF0YSB0YWtlcyB0aGUgUHJvY0Fy cmF5TG9jayBpbgotc2hhcmVkIG1vZGUgKHNvIHRoYXQgbXVsdGlwbGUgYmFja2VuZHMgY2Fu IHRha2Ugc25hcHNob3RzIGluIHBhcmFsbGVsKSwKK2ltcGxlbWVudGF0aW9uIG9mIHRoaXMg aXMgdGhhdCBHZXRNVkNDU25hcHNob3REYXRhIHRha2VzIHRoZSBQcm9jQXJyYXlMb2NrCitp biBzaGFyZWQgbW9kZSAoc28gdGhhdCBtdWx0aXBsZSBiYWNrZW5kcyBjYW4gdGFrZSBzbmFw c2hvdHMgaW4gcGFyYWxsZWwpLAogYnV0IFByb2NBcnJheUVuZFRyYW5zYWN0aW9uIG11c3Qg dGFrZSB0aGUgUHJvY0FycmF5TG9jayBpbiBleGNsdXNpdmUgbW9kZQogd2hpbGUgY2xlYXJp bmcgdGhlIFByb2NHbG9iYWwtPnhpZHNbXSBlbnRyeSBhdCB0cmFuc2FjdGlvbiBlbmQgKGVp dGhlcgogY29tbWl0IG9yIGFib3J0KS4gKFRvIHJlZHVjZSBjb250ZXh0IHN3aXRjaGluZywg d2hlbiBtdWx0aXBsZSB0cmFuc2FjdGlvbnMKQEAgLTI1Nyw3ICsyNTcsNyBAQCBjb21taXQg bmVhcmx5IHNpbXVsdGFuZW91c2x5LCB3ZSBoYXZlIG9uZSBiYWNrZW5kIHRha2UgUHJvY0Fy cmF5TG9jayBhbmQKIGNsZWFyIHRoZSBYSURzIG9mIG11bHRpcGxlIHByb2Nlc3NlcyBhdCBv bmNlLikKIAogUHJvY0FycmF5RW5kVHJhbnNhY3Rpb24gYWxzbyBob2xkcyB0aGUgbG9jayB3 aGlsZSBhZHZhbmNpbmcgdGhlIHNoYXJlZAotbGF0ZXN0Q29tcGxldGVkWGlkIHZhcmlhYmxl LiAgVGhpcyBhbGxvd3MgR2V0U25hcHNob3REYXRhIHRvIHVzZQorbGF0ZXN0Q29tcGxldGVk WGlkIHZhcmlhYmxlLiAgVGhpcyBhbGxvd3MgR2V0TVZDQ1NuYXBzaG90RGF0YSB0byB1c2UK IGxhdGVzdENvbXBsZXRlZFhpZCArIDEgYXMgeG1heCBmb3IgaXRzIHNuYXBzaG90OiB0aGVy ZSBjYW4gYmUgbm8KIHRyYW5zYWN0aW9uID49IHRoaXMgeGlkIHZhbHVlIHRoYXQgdGhlIHNu YXBzaG90IG5lZWRzIHRvIGNvbnNpZGVyIGFzCiBjb21wbGV0ZWQuCkBAIC0zMDEsNyArMzAx LDcgQEAgaWYgaXQgY3VycmVudGx5IGhhcyBubyBsaXZlIHNuYXBzaG90cyAoZWcsIGlmIGl0 J3MgYmV0d2VlbiB0cmFuc2FjdGlvbnMgb3IKIGhhc24ndCB5ZXQgc2V0IGEgc25hcHNob3Qg Zm9yIGEgbmV3IHRyYW5zYWN0aW9uKS4gIENvbXB1dGVYaWRIb3Jpem9ucyB0YWtlcwogdGhl IE1JTigpIG9mIHRoZSB2YWxpZCB4bWluIGZpZWxkcy4gIEl0IGRvZXMgdGhpcyB3aXRoIG9u bHkgc2hhcmVkIGxvY2sgb24KIFByb2NBcnJheUxvY2ssIHdoaWNoIG1lYW5zIHRoZXJlIGlz IGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFnYWluc3Qgb3RoZXIKLWJhY2tlbmRzIGRv aW5nIEdldFNuYXBzaG90RGF0YSBjb25jdXJyZW50bHk6IHdlIG11c3QgYmUgY2VydGFpbiB0 aGF0IGEKK2JhY2tlbmRzIGRvaW5nIEdldE1WQ0NTbmFwc2hvdERhdGEgY29uY3VycmVudGx5 OiB3ZSBtdXN0IGJlIGNlcnRhaW4gdGhhdCBhCiBjb25jdXJyZW50IGJhY2tlbmQgdGhhdCBp cyBhYm91dCB0byBzZXQgaXRzIHhtaW4gZG9lcyBub3QgY29tcHV0ZSBhbiB4bWluCiBsZXNz IHRoYW4gd2hhdCBDb21wdXRlWGlkSG9yaXpvbnMgZGV0ZXJtaW5lcy4gIFdlIGVuc3VyZSB0 aGF0IGJ5IGluY2x1ZGluZwogYWxsIHRoZSBhY3RpdmUgWElEcyBpbnRvIHRoZSBNSU4oKSBj YWxjdWxhdGlvbiwgYWxvbmcgd2l0aCB0aGUgdmFsaWQgeG1pbnMuCkBAIC0zMTAsMjcgKzMx MCwyNyBAQCBlbnN1cmVzIHRoYXQgY29uY3VycmVudCBob2xkZXJzIG9mIHNoYXJlZCBQcm9j QXJyYXlMb2NrIHdpbGwgY29tcHV0ZSB0aGUKIHNhbWUgbWluaW11bSBvZiBjdXJyZW50bHkt YWN0aXZlIFhJRHM6IG5vIHhhY3QsIGluIHBhcnRpY3VsYXIgbm90IHRoZQogb2xkZXN0LCBj YW4gZXhpdCB3aGlsZSB3ZSBob2xkIHNoYXJlZCBQcm9jQXJyYXlMb2NrLiAgU28KIENvbXB1 dGVYaWRIb3Jpem9ucydzIHZpZXcgb2YgdGhlIG1pbmltdW0gYWN0aXZlIFhJRCB3aWxsIGJl IHRoZSBzYW1lIGFzIHRoYXQKLW9mIGFueSBjb25jdXJyZW50IEdldFNuYXBzaG90RGF0YSwg YW5kIHNvIGl0IGNhbid0IHByb2R1Y2UgYW4gb3ZlcmVzdGltYXRlLgorb2YgYW55IGNvbmN1 cnJlbnQgR2V0TVZDQ1NuYXBzaG90RGF0YSwgYW5kIHNvIGl0IGNhbid0IHByb2R1Y2UgYW4g b3ZlcmVzdGltYXRlLgogSWYgdGhlcmUgaXMgbm8gYWN0aXZlIHRyYW5zYWN0aW9uIGF0IGFs bCwgQ29tcHV0ZVhpZEhvcml6b25zIHVzZXMKIGxhdGVzdENvbXBsZXRlZFhpZCArIDEsIHdo aWNoIGlzIGEgbG93ZXIgYm91bmQgZm9yIHRoZSB4bWluIHRoYXQgbWlnaHQKLWJlIGNvbXB1 dGVkIGJ5IGNvbmN1cnJlbnQgb3IgbGF0ZXIgR2V0U25hcHNob3REYXRhIGNhbGxzLiAgKFdl IGtub3cgdGhhdCBubworYmUgY29tcHV0ZWQgYnkgY29uY3VycmVudCBvciBsYXRlciBHZXRN VkNDU25hcHNob3REYXRhIGNhbGxzLiAgKFdlIGtub3cgdGhhdCBubwogWElEIGxlc3MgdGhh biB0aGlzIGNvdWxkIGJlIGFib3V0IHRvIGFwcGVhciBpbiB0aGUgUHJvY0FycmF5LCBiZWNh dXNlIG9mIHRoZQogWGlkR2VuTG9jayBpbnRlcmxvY2sgZGlzY3Vzc2VkIGFib3ZlLikKIAot QXMgR2V0U25hcHNob3REYXRhIGlzIHBlcmZvcm1hbmNlIGNyaXRpY2FsLCBpdCBkb2VzIG5v dCBwZXJmb3JtIGFuIGFjY3VyYXRlCitBcyBHZXRNVkNDU25hcHNob3REYXRhIGlzIHBlcmZv cm1hbmNlIGNyaXRpY2FsLCBpdCBkb2VzIG5vdCBwZXJmb3JtIGFuIGFjY3VyYXRlCiBvbGRl c3QteG1pbiBjYWxjdWxhdGlvbiAoaXQgdXNlZCB0bywgdW50aWwgdjE0KS4gVGhlIGNvbnRl bnRzIG9mIGEgc25hcHNob3QKIG9ubHkgZGVwZW5kIG9uIHRoZSB4aWRzIG9mIG90aGVyIGJh Y2tlbmRzLCBub3QgdGhlaXIgeG1pbi4gQXMgYmFja2VuZCdzIHhtaW4KLWNoYW5nZXMgbXVj aCBtb3JlIG9mdGVuIHRoYW4gaXRzIHhpZCwgaGF2aW5nIEdldFNuYXBzaG90RGF0YSBsb29r IGF0IHhtaW5zCitjaGFuZ2VzIG11Y2ggbW9yZSBvZnRlbiB0aGFuIGl0cyB4aWQsIGhhdmlu ZyBHZXRNVkNDU25hcHNob3REYXRhIGxvb2sgYXQgeG1pbnMKIGNhbiBsZWFkIHRvIGEgbG90 IG9mIHVubmVjZXNzYXJ5IGNhY2hlbGluZSBwaW5nLXBvbmcuICBJbnN0ZWFkCi1HZXRTbmFw c2hvdERhdGEgdXBkYXRlcyBhcHByb3hpbWF0ZSB0aHJlc2hvbGRzIChvbmUgdGhhdCBndWFy YW50ZWVzIHRoYXQgYWxsCi1kZWxldGVkIHJvd3Mgb2xkZXIgdGhhbiBpdCBjYW4gYmUgcmVt b3ZlZCwgYW5vdGhlciBkZXRlcm1pbmluZyB0aGF0IGRlbGV0ZWQKK0dldE1WQ0NTbmFwc2hv dERhdGEgdXBkYXRlcyBhcHByb3hpbWF0ZSB0aHJlc2hvbGRzIChvbmUgdGhhdCBndWFyYW50 ZWVzIHRoYXQKK2FsbCBkZWxldGVkIHJvd3Mgb2xkZXIgdGhhbiBpdCBjYW4gYmUgcmVtb3Zl ZCwgYW5vdGhlciBkZXRlcm1pbmluZyB0aGF0IGRlbGV0ZWQKIHJvd3MgbmV3ZXIgdGhhbiBp dCBjYW4gbm90IGJlIHJlbW92ZWQpLiBHbG9iYWxWaXNUZXN0KiB1c2VzIHRob3NlIHRocmVz aG9sZHMKIHRvIG1ha2UgaW52aXNpYmlsaXR5IGRlY2lzaW9uLCBmYWxsaW5nIGJhY2sgdG8g Q29tcHV0ZVhpZEhvcml6b25zIGlmCiBuZWNlc3NhcnkuCiAKIE5vdGUgdGhhdCB3aGlsZSBp dCBpcyBjZXJ0YWluIHRoYXQgdHdvIGNvbmN1cnJlbnQgZXhlY3V0aW9ucyBvZgotR2V0U25h cHNob3REYXRhIHdpbGwgY29tcHV0ZSB0aGUgc2FtZSB4bWluIGZvciB0aGVpciBvd24gc25h cHNob3RzLCB0aGVyZSBpcwotbm8gc3VjaCBndWFyYW50ZWUgZm9yIHRoZSBob3Jpem9ucyBj b21wdXRlZCBieSBDb21wdXRlWGlkSG9yaXpvbnMuICBUaGlzIGlzCitHZXRNVkNDU25hcHNo b3REYXRhIHdpbGwgY29tcHV0ZSB0aGUgc2FtZSB4bWluIGZvciB0aGVpciBvd24gc25hcHNo b3RzLCB0aGVyZQoraXMgbm8gc3VjaCBndWFyYW50ZWUgZm9yIHRoZSBob3Jpem9ucyBjb21w dXRlZCBieSBDb21wdXRlWGlkSG9yaXpvbnMuICBUaGlzIGlzCiBiZWNhdXNlIHdlIGFsbG93 IFhJRC1sZXNzIHRyYW5zYWN0aW9ucyB0byBjbGVhciB0aGVpciBNeVByb2MtPnhtaW4KIGFz eW5jaHJvbm91c2x5ICh3aXRob3V0IHRha2luZyBQcm9jQXJyYXlMb2NrKSwgc28gb25lIGV4 ZWN1dGlvbiBtaWdodCBzZWUKIHdoYXQgaGFkIGJlZW4gdGhlIG9sZGVzdCB4bWluLCBhbmQg YW5vdGhlciBub3QuICBUaGlzIGlzIE9LIHNpbmNlIHRoZQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19p bmhlcml0cy5jCmluZGV4IGI2NTg2MDFiZjc3Li5mMTE0OGRiZTRhMyAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19pbmhlcml0cy5jCisrKyBiL3NyYy9iYWNrZW5kL2Nh dGFsb2cvcGdfaW5oZXJpdHMuYwpAQCAtMTQzLDEyICsxNDMsMTIgQEAgZmluZF9pbmhlcml0 YW5jZV9jaGlsZHJlbl9leHRlbmRlZChPaWQgcGFyZW50cmVsSWQsIGJvb2wgb21pdF9kZXRh Y2hlZCwKIAkJCWlmIChvbWl0X2RldGFjaGVkICYmIEFjdGl2ZVNuYXBzaG90U2V0KCkpCiAJ CQl7CiAJCQkJVHJhbnNhY3Rpb25JZCB4bWluOwotCQkJCVNuYXBzaG90CXNuYXA7CisJCQkJ TVZDQ1NuYXBzaG90IHNuYXA7CiAKIAkJCQl4bWluID0gSGVhcFR1cGxlSGVhZGVyR2V0WG1p bihpbmhlcml0c1R1cGxlLT50X2RhdGEpOwotCQkJCXNuYXAgPSBHZXRBY3RpdmVTbmFwc2hv dCgpOworCQkJCXNuYXAgPSAoTVZDQ1NuYXBzaG90KSBHZXRBY3RpdmVTbmFwc2hvdCgpOwog Ci0JCQkJaWYgKCFYaWRJbk1WQ0NTbmFwc2hvdCh4bWluLCAoTVZDQ1NuYXBzaG90KSBzbmFw KSkKKwkJCQlpZiAoIVhpZEluTVZDQ1NuYXBzaG90KHhtaW4sIHNuYXAtPnNoYXJlZCkpCiAJ CQkJewogCQkJCQlpZiAoZGV0YWNoZWRfeG1pbikKIAkJCQkJewpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvY29tbWFuZHMvYXN5bmMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5j LmMKaW5kZXggMWZmYjZmNWZhNzAuLjAzN2NhNmM1NDQ0IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9hc3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FzeW5j LmMKQEAgLTIwNDMsNyArMjA0Myw3IEBAIGFzeW5jUXVldWVQcm9jZXNzUGFnZUVudHJpZXMo dm9sYXRpbGUgUXVldWVQb3NpdGlvbiAqY3VycmVudCwKIAkJLyogSWdub3JlIG1lc3NhZ2Vz IGRlc3RpbmVkIGZvciBvdGhlciBkYXRhYmFzZXMgKi8KIAkJaWYgKHFlLT5kYm9pZCA9PSBN eURhdGFiYXNlSWQpCiAJCXsKLQkJCWlmIChYaWRJbk1WQ0NTbmFwc2hvdChxZS0+eGlkLCAo TVZDQ1NuYXBzaG90KSBzbmFwc2hvdCkpCisJCQlpZiAoWGlkSW5NVkNDU25hcHNob3QocWUt PnhpZCwgKChNVkNDU25hcHNob3QpIHNuYXBzaG90KS0+c2hhcmVkKSkKIAkJCXsKIAkJCQkv KgogCQkJCSAqIFRoZSBzb3VyY2UgdHJhbnNhY3Rpb24gaXMgc3RpbGwgaW4gcHJvZ3Jlc3Ms IHNvIHdlIGNhbid0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNt ZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCmluZGV4IGRhM2UwMjM5 OGJiLi43ZmEwNDRmNmYxYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5k ZXhjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvaW5kZXhjbWRzLmMKQEAgLTE3 NjEsNyArMTc2MSw3IEBAIERlZmluZUluZGV4KE9pZCB0YWJsZUlkLAogCSAqIHRoZXkgbXVz dCB3YWl0IGZvci4gIEJ1dCBmaXJzdCwgc2F2ZSB0aGUgc25hcHNob3QncyB4bWluIHRvIHVz ZSBhcwogCSAqIGxpbWl0WG1pbiBmb3IgR2V0Q3VycmVudFZpcnR1YWxYSURzKCkuCiAJICov Ci0JbGltaXRYbWluID0gc25hcHNob3QtPm12Y2MueG1pbjsKKwlsaW1pdFhtaW4gPSBzbmFw c2hvdC0+bXZjYy5zaGFyZWQtPnhtaW47CiAKIAlQb3BBY3RpdmVTbmFwc2hvdCgpOwogCVVu cmVnaXN0ZXJTbmFwc2hvdChzbmFwc2hvdCk7CkBAIC00MTU2LDcgKzQxNTYsNyBAQCBSZWlu ZGV4UmVsYXRpb25Db25jdXJyZW50bHkoY29uc3QgUmVpbmRleFN0bXQgKnN0bXQsIE9pZCBy ZWxhdGlvbk9pZCwgY29uc3QgUmVpbgogCQkgKiBXZSBjYW4gbm93IGRvIGF3YXkgd2l0aCBv dXIgYWN0aXZlIHNuYXBzaG90LCB3ZSBzdGlsbCBuZWVkIHRvIHNhdmUKIAkJICogdGhlIHht aW4gbGltaXQgdG8gd2FpdCBmb3Igb2xkZXIgc25hcHNob3RzLgogCQkgKi8KLQkJbGltaXRY bWluID0gc25hcHNob3QtPm12Y2MueG1pbjsKKwkJbGltaXRYbWluID0gc25hcHNob3QtPm12 Y2Muc2hhcmVkLT54bWluOwogCiAJCVBvcEFjdGl2ZVNuYXBzaG90KCk7CiAJCVVucmVnaXN0 ZXJTbmFwc2hvdChzbmFwc2hvdCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4 IGM1NWI1YTdhMDE0Li45YWNhODEwZjlkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvdGFibGVjbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRz LmMKQEAgLTIwNzk3LDcgKzIwNzk3LDcgQEAgQVRFeGVjRGV0YWNoUGFydGl0aW9uRmluYWxp emUoUmVsYXRpb24gcmVsLCBSYW5nZVZhciAqbmFtZSkKIAkgKiBhbGwgc3VjaCBxdWVyaWVz IGFyZSBjb21wbGV0ZSAob3RoZXJ3aXNlIHdlIHdvdWxkIHByZXNlbnQgdGhlbSB3aXRoIGFu CiAJICogaW5jb25zaXN0ZW50IHZpZXcgb2YgY2F0YWxvZ3MpLgogCSAqLwotCVdhaXRGb3JP bGRlclNuYXBzaG90cyhzbmFwLT5tdmNjLnhtaW4sIGZhbHNlKTsKKwlXYWl0Rm9yT2xkZXJT bmFwc2hvdHMoc25hcC0+bXZjYy5zaGFyZWQtPnhtaW4sIGZhbHNlKTsKIAogCURldGFjaFBh cnRpdGlvbkZpbmFsaXplKHJlbCwgcGFydFJlbCwgdHJ1ZSwgSW52YWxpZE9pZCk7CiAKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjTWFpbi5jCmluZGV4IDJkYTg0ODk3MGJlLi45ZWUxMDA1MDg3MyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCkBAIC0xNTcsOCArMTU3LDggQEAgc3RhbmRh cmRfRXhlY3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKIAlB c3NlcnQocXVlcnlEZXNjICE9IE5VTEwpOwogCUFzc2VydChxdWVyeURlc2MtPmVzdGF0ZSA9 PSBOVUxMKTsKIAotCS8qIGNhbGxlciBtdXN0IGVuc3VyZSB0aGUgcXVlcnkncyBzbmFwc2hv dCBpcyBhY3RpdmUgKi8KLQlBc3NlcnQoR2V0QWN0aXZlU25hcHNob3QoKSA9PSBxdWVyeURl c2MtPnNuYXBzaG90KTsKKwkvKiBlbnN1cmUgdGhlIHF1ZXJ5J3Mgc25hcHNob3QgaXMgYWN0 aXZlICovCisJUHVzaEFjdGl2ZVNuYXBzaG90KHF1ZXJ5RGVzYy0+c25hcHNob3QpOwogCiAJ LyoKIAkgKiBJZiB0aGUgdHJhbnNhY3Rpb24gaXMgcmVhZC1vbmx5LCB3ZSBuZWVkIHRvIGNo ZWNrIGlmIGFueSB3cml0ZXMgYXJlCkBAIC0yNzIsNiArMjcyLDggQEAgc3RhbmRhcmRfRXhl Y3V0b3JTdGFydChRdWVyeURlc2MgKnF1ZXJ5RGVzYywgaW50IGVmbGFncykKIAogCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKIAorCVBvcEFjdGl2ZVNuYXBzaG90KCk7 CisKIAlyZXR1cm4gRXhlY1BsYW5TdGlsbFZhbGlkKHF1ZXJ5RGVzYy0+ZXN0YXRlKTsKIH0K IApAQCAtMzkwLDggKzM5Miw4IEBAIHN0YW5kYXJkX0V4ZWN1dG9yUnVuKFF1ZXJ5RGVzYyAq cXVlcnlEZXNjLAogCUFzc2VydCghZXN0YXRlLT5lc19hYm9ydGVkKTsKIAlBc3NlcnQoIShl c3RhdGUtPmVzX3RvcF9lZmxhZ3MgJiBFWEVDX0ZMQUdfRVhQTEFJTl9PTkxZKSk7CiAKLQkv KiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhlIHF1ZXJ5J3Mgc25hcHNob3QgaXMgYWN0aXZlICov Ci0JQXNzZXJ0KEdldEFjdGl2ZVNuYXBzaG90KCkgPT0gZXN0YXRlLT5lc19zbmFwc2hvdCk7 CisJLyogZW5zdXJlIHRoZSBxdWVyeSdzIHNuYXBzaG90IGlzIGFjdGl2ZSAqLworCVB1c2hB Y3RpdmVTbmFwc2hvdChlc3RhdGUtPmVzX3NuYXBzaG90KTsKIAogCS8qCiAJICogU3dpdGNo IGludG8gcGVyLXF1ZXJ5IG1lbW9yeSBjb250ZXh0CkBAIC00NTUsNiArNDU3LDggQEAgc3Rh bmRhcmRfRXhlY3V0b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2MsCiAJCUluc3RyU3RvcE5v ZGUocXVlcnlEZXNjLT50b3RhbHRpbWUsIGVzdGF0ZS0+ZXNfcHJvY2Vzc2VkKTsKIAogCU1l bW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCVBvcEFjdGl2ZVNuYXBzaG90 KCk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL2V4ZWNQYXJhbGxlbC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1BhcmFsbGVs LmMKaW5kZXggMzljOTkwYWU2MzguLmFmM2Y4ZjI4MTQ0IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjUGFyYWxsZWwuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9leGVjUGFyYWxsZWwuYwpAQCAtNzM3LDcgKzczNyw4IEBAIEV4ZWNJbml0UGFyYWxsZWxQ bGFuKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFU3RhdGUgKmVzdGF0ZSwKIAkgKiB3b3JrZXIs IHdoaWNoIHVzZXMgaXQgdG8gc2V0IGVzX3NuYXBzaG90LiAgTWFrZSBzdXJlIHdlIGRvbid0 IHNldAogCSAqIGVzX3NuYXBzaG90IGRpZmZlcmVudGx5IGluIHRoZSBjaGlsZC4KIAkgKi8K LQlBc3NlcnQoR2V0QWN0aXZlU25hcHNob3QoKSA9PSBlc3RhdGUtPmVzX3NuYXBzaG90KTsK KwlBc3NlcnQoKChNVkNDU25hcHNob3QpIEdldEFjdGl2ZVNuYXBzaG90KCkpLT5zaGFyZWQg PT0gKChNVkNDU25hcHNob3QpIGVzdGF0ZS0+ZXNfc25hcHNob3QpLT5zaGFyZWQpOworCUFz c2VydCgoKE1WQ0NTbmFwc2hvdCkgR2V0QWN0aXZlU25hcHNob3QoKSktPmN1cmNpZCA9PSAo KE1WQ0NTbmFwc2hvdCkgZXN0YXRlLT5lc19zbmFwc2hvdCktPmN1cmNpZCk7CiAKIAkvKiBF dmVyeW9uZSdzIGhhZCBhIGNoYW5jZSB0byBhc2sgZm9yIHNwYWNlLCBzbyBub3cgY3JlYXRl IHRoZSBEU00uICovCiAJSW5pdGlhbGl6ZVBhcmFsbGVsRFNNKHBjeHQpOwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRkZXNjLmMgYi9zcmMvYmFja2VuZC9w YXJ0aXRpb25pbmcvcGFydGRlc2MuYwppbmRleCA3YzE1YzYzNDE4MS4uYzUwMDBiMzdiODcg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5jCisrKyBi L3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0ZGVzYy5jCkBAIC0xMDIsNyArMTAyLDcg QEAgUmVsYXRpb25HZXRQYXJ0aXRpb25EZXNjKFJlbGF0aW9uIHJlbCwgYm9vbCBvbWl0X2Rl dGFjaGVkKQogCQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQocmVsLT5yZF9wYXJ0ZGVz Y19ub2RldGFjaGVkX3htaW4pKTsKIAkJYWN0aXZlc25hcCA9IEdldEFjdGl2ZVNuYXBzaG90 KCk7CiAKLQkJaWYgKCFYaWRJbk1WQ0NTbmFwc2hvdChyZWwtPnJkX3BhcnRkZXNjX25vZGV0 YWNoZWRfeG1pbiwgJmFjdGl2ZXNuYXAtPm12Y2MpKQorCQlpZiAoIVhpZEluTVZDQ1NuYXBz aG90KHJlbC0+cmRfcGFydGRlc2Nfbm9kZXRhY2hlZF94bWluLCBhY3RpdmVzbmFwLT5tdmNj LnNoYXJlZCkpCiAJCQlyZXR1cm4gcmVsLT5yZF9wYXJ0ZGVzY19ub2RldGFjaGVkOwogCX0K IApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVp bGQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMKaW5k ZXggNTBkY2E3Y2I3NTguLjNjOTRhNjJjZGY2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMKQEAgLTM4OSw2ICszODksMTIgQEAgU25hcEJ1 aWxkQnVpbGRTbmFwc2hvdChTbmFwQnVpbGQgKmJ1aWxkZXIpCiAgKgogICogVGhlIHNuYXBz aG90IHdpbGwgYmUgdXNhYmxlIGRpcmVjdGx5IGluIGN1cnJlbnQgdHJhbnNhY3Rpb24gb3Ig ZXhwb3J0ZWQKICAqIGZvciBsb2FkaW5nIGluIGRpZmZlcmVudCB0cmFuc2FjdGlvbi4KKyAq CisgKiBYWFg6IFRoZSBzbmFwc2hvdCBtYW5hZ2VyIGRvZXNuJ3Qga25vdyBhbnl0aGluZyBh Ym91dCB0aGUgcmV0dXJuZWQKKyAqIHNuYXBzaG90LiAgSXQgZG9lcyBub3QgaG9sZCBiYWNr IE15UHJvYy0+eG1pbiwgbm9yIGlzIGl0IHJlZ2lzdGVyZWQgd2l0aAorICogYW55IHJlc291 cmNlIG93bmVyLiAgVGhlcmUncyBhbHNvIG5vIGdvb2Qgd2F5IHRvIGZyZWUgaXQsIGJ1dCBs ZWFraW5nIGl0IGlzCisgKiBhY2NlcHRhYmxlIGZvciB0aGUgY3VycmVudCB1c2FnZSB3aGVy ZSBvbmx5IG9uZSBzbmFwc2hvdCBpcyBidWlsZCBmb3IgdGhlCisgKiB3aG9sZSBzZXNzaW9u LgogICovCiBNVkNDU25hcHNob3QKIFNuYXBCdWlsZEluaXRpYWxTbmFwc2hvdChTbmFwQnVp bGQgKmJ1aWxkZXIpCkBAIC00NDAsMTEgKzQ0NiwxNCBAQCBTbmFwQnVpbGRJbml0aWFsU25h cHNob3QoU25hcEJ1aWxkICpidWlsZGVyKQogCU15UHJvYy0+eG1pbiA9IGhpc3Rvcmljc25h cC0+eG1pbjsKIAogCS8qIGFsbG9jYXRlIGluIHRyYW5zYWN0aW9uIGNvbnRleHQgKi8KLQlt dmNjc25hcCA9IHBhbGxvYyhzaXplb2YoTVZDQ1NuYXBzaG90RGF0YSkgKyBzaXplb2YoVHJh bnNhY3Rpb25JZCkgKiBHZXRNYXhTbmFwc2hvdFhpZENvdW50KCkpOworCW12Y2NzbmFwID0g cGFsbG9jKHNpemVvZihNVkNDU25hcHNob3REYXRhKSk7CisJbXZjY3NuYXAtPmtpbmQgPSBT TkFQU0hPVF9TVEFUSUM7CisJbXZjY3NuYXAtPnNoYXJlZCA9IEFsbG9jTVZDQ1NuYXBzaG90 U2hhcmVkKCk7CisJbXZjY3NuYXAtPnNoYXJlZC0+cmVmY291bnQgPSAxOwogCW12Y2NzbmFw LT5zbmFwc2hvdF90eXBlID0gU05BUFNIT1RfTVZDQzsKLQltdmNjc25hcC0+eG1pbiA9IGhp c3Rvcmljc25hcC0+eG1pbjsKLQltdmNjc25hcC0+eG1heCA9IGhpc3Rvcmljc25hcC0+eG1h eDsKLQltdmNjc25hcC0+eGlwID0gKFRyYW5zYWN0aW9uSWQgKikgKChjaGFyICopIG12Y2Nz bmFwICsgc2l6ZW9mKE1WQ0NTbmFwc2hvdERhdGEpKTsKKwltdmNjc25hcC0+c2hhcmVkLT54 bWluID0gaGlzdG9yaWNzbmFwLT54bWluOworCW12Y2NzbmFwLT5zaGFyZWQtPnhtYXggPSBo aXN0b3JpY3NuYXAtPnhtYXg7CisJbXZjY3NuYXAtPnNoYXJlZC0+eGlwID0gKFRyYW5zYWN0 aW9uSWQgKikgKChjaGFyICopIG12Y2NzbmFwLT5zaGFyZWQgKyBzaXplb2YoTVZDQ1NuYXBz aG90RGF0YSkpOwogCiAJLyoKIAkgKiBzbmFwYnVpbGQuYyBidWlsZHMgdHJhbnNhY3Rpb25z IGluIGFuICJpbnZlcnRlZCIgbWFubmVyLCB3aGljaCBtZWFucyBpdApAQCAtNDcwLDIzICs0 NzksMjAgQEAgU25hcEJ1aWxkSW5pdGlhbFNuYXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlcikK IAkJCQkJCShlcnJjb2RlKEVSUkNPREVfVF9SX1NFUklBTElaQVRJT05fRkFJTFVSRSksCiAJ CQkJCQkgZXJybXNnKCJpbml0aWFsIHNsb3Qgc25hcHNob3QgdG9vIGxhcmdlIikpKTsKIAot CQkJbXZjY3NuYXAtPnhpcFtuZXd4Y250KytdID0geGlkOworCQkJbXZjY3NuYXAtPnNoYXJl ZC0+eGlwW25ld3hjbnQrK10gPSB4aWQ7CiAJCX0KIAogCQlUcmFuc2FjdGlvbklkQWR2YW5j ZSh4aWQpOwogCX0KLQltdmNjc25hcC0+eGNudCA9IG5ld3hjbnQ7CisJbXZjY3NuYXAtPnNo YXJlZC0+eGNudCA9IG5ld3hjbnQ7CiAKIAkvKiBJbml0aWFsaXplIHJlbWFpbmluZyBNVkND U25hcHNob3QgZmllbGRzICovCi0JbXZjY3NuYXAtPnN1YnhpcCA9IE5VTEw7Ci0JbXZjY3Nu YXAtPnN1YnhjbnQgPSAwOwotCW12Y2NzbmFwLT5zdWJvdmVyZmxvd2VkID0gZmFsc2U7Ci0J bXZjY3NuYXAtPnRha2VuRHVyaW5nUmVjb3ZlcnkgPSBmYWxzZTsKLQltdmNjc25hcC0+Y29w aWVkID0gdHJ1ZTsKKwltdmNjc25hcC0+c2hhcmVkLT5zdWJ4aXAgPSBOVUxMOworCW12Y2Nz bmFwLT5zaGFyZWQtPnN1YnhjbnQgPSAwOworCW12Y2NzbmFwLT5zaGFyZWQtPnN1Ym92ZXJm bG93ZWQgPSBmYWxzZTsKKwltdmNjc25hcC0+c2hhcmVkLT50YWtlbkR1cmluZ1JlY292ZXJ5 ID0gZmFsc2U7CisJbXZjY3NuYXAtPnNoYXJlZC0+c25hcFhhY3RDb21wbGV0aW9uQ291bnQg PSAwOwogCW12Y2NzbmFwLT5jdXJjaWQgPSBGaXJzdENvbW1hbmRJZDsKLQltdmNjc25hcC0+ YWN0aXZlX2NvdW50ID0gMDsKLQltdmNjc25hcC0+cmVnZF9jb3VudCA9IDA7Ci0JbXZjY3Nu YXAtPnNuYXBYYWN0Q29tcGxldGlvbkNvdW50ID0gMDsKIAogCXBmcmVlKGhpc3Rvcmljc25h cCk7CiAKQEAgLTUyOCwxMyArNTM0LDEzIEBAIFNuYXBCdWlsZEV4cG9ydFNuYXBzaG90KFNu YXBCdWlsZCAqYnVpbGRlcikKIAkgKiBub3cgdGhhdCB3ZSd2ZSBidWlsdCBhIHBsYWluIHNu YXBzaG90LCBtYWtlIGl0IGFjdGl2ZSBhbmQgdXNlIHRoZQogCSAqIG5vcm1hbCBtZWNoYW5p c21zIGZvciBleHBvcnRpbmcgaXQKIAkgKi8KLQlzbmFwbmFtZSA9IEV4cG9ydFNuYXBzaG90 KHNuYXApOworCXNuYXBuYW1lID0gRXhwb3J0U25hcHNob3Qoc25hcC0+c2hhcmVkKTsKIAog CWVyZXBvcnQoTE9HLAogCQkJKGVycm1zZ19wbHVyYWwoImV4cG9ydGVkIGxvZ2ljYWwgZGVj b2Rpbmcgc25hcHNob3Q6IFwiJXNcIiB3aXRoICV1IHRyYW5zYWN0aW9uIElEIiwKIAkJCQkJ CSAgICJleHBvcnRlZCBsb2dpY2FsIGRlY29kaW5nIHNuYXBzaG90OiBcIiVzXCIgd2l0aCAl dSB0cmFuc2FjdGlvbiBJRHMiLAotCQkJCQkJICAgc25hcC0+eGNudCwKLQkJCQkJCSAgIHNu YXBuYW1lLCBzbmFwLT54Y250KSkpOworCQkJCQkJICAgc25hcC0+c2hhcmVkLT54Y250LAor CQkJCQkJICAgc25hcG5hbWUsIHNuYXAtPnNoYXJlZC0+eGNudCkpKTsKIAlyZXR1cm4gc25h cG5hbWU7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNl bmRlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKaW5kZXggMWE3 YTM1ZTI1ZWIuLjUxMzQ0OWVhOWRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi93YWxzZW5kZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5k ZXIuYwpAQCAtMjYyMCw3ICsyNjIwLDcgQEAgUHJvY2Vzc1N0YW5kYnlIU0ZlZWRiYWNrTWVz c2FnZSh2b2lkKQogCiAJLyoKIAkgKiBTZXQgdGhlIFdhbFNlbmRlcidzIHhtaW4gZXF1YWwg dG8gdGhlIHN0YW5kYnkncyByZXF1ZXN0ZWQgeG1pbiwgc28gdGhhdAotCSAqIHRoZSB4bWlu IHdpbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGJ5IEdldFNuYXBzaG90RGF0YSgpIC8KKwkg KiB0aGUgeG1pbiB3aWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBieSBHZXRNVkNDU25hcHNo b3REYXRhKCkgLwogCSAqIENvbXB1dGVYaWRIb3Jpem9ucygpLiAgVGhpcyB3aWxsIGhvbGQg YmFjayB0aGUgcmVtb3ZhbCBvZiBkZWFkIHJvd3MgYW5kCiAJICogdGhlcmVieSBwcmV2ZW50 IHRoZSBnZW5lcmF0aW9uIG9mIGNsZWFudXAgY29uZmxpY3RzIG9uIHRoZSBzdGFuZGJ5CiAJ ICogc2VydmVyLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2Fy cmF5LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwppbmRleCBiYTVl ZDg5NjBkZC4uODE5NjQ5NzQxZjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3Byb2NhcnJheS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJh eS5jCkBAIC02Miw2ICs2Miw3IEBACiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIK ICNpbmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgor I2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAj aW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgogCkBAIC0xMDUsNyArMTA2LDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgUHJvY0FycmF5U3RydWN0CiAgKiBNVkNDIHNlbWFudGljczogSWYgdGhlIGRl bGV0ZWQgcm93J3MgeG1heCBpcyBub3QgY29uc2lkZXJlZCB0byBiZSBydW5uaW5nCiAgKiBi eSBhbnlvbmUsIHRoZSByb3cgY2FuIGJlIHJlbW92ZWQuCiAgKgotICogVG8gYXZvaWQgc2xv d2luZyBkb3duIEdldFNuYXBzaG90RGF0YSgpLCB3ZSBkb24ndCBjYWxjdWxhdGUgYSBwcmVj aXNlCisgKiBUbyBhdm9pZCBzbG93aW5nIGRvd24gR2V0TVZDQ1NuYXBzaG90RGF0YSgpLCB3 ZSBkb24ndCBjYWxjdWxhdGUgYSBwcmVjaXNlCiAgKiBjdXRvZmYgWElEIHdoaWxlIGJ1aWxk aW5nIGEgc25hcHNob3QgKGxvb2tpbmcgYXQgdGhlIGZyZXF1ZW50bHkgY2hhbmdpbmcKICAq IHhtaW5zIHNjYWxlcyBiYWRseSkuIEluc3RlYWQgd2UgY29tcHV0ZSB0d28gYm91bmRhcmll cyB3aGlsZSBidWlsZGluZyB0aGUKICAqIHNuYXBzaG90OgpAQCAtMTU5LDcgKzE2MCw3IEBA IHR5cGVkZWYgc3RydWN0IFByb2NBcnJheVN0cnVjdAogICoKICAqIFRoZSBib3VuZGFyaWVz IGFyZSBGdWxsVHJhbnNhY3Rpb25JZHMgaW5zdGVhZCBvZiBUcmFuc2FjdGlvbklkcyB0byBh dm9pZAogICogd3JhcGFyb3VuZCBkYW5nZXJzLiBUaGVyZSBlLmcuIHdvdWxkIG90aGVyd2lz ZSBleGlzdCBubyBwcm9jYXJyYXkgc3RhdGUgdG8KLSAqIHByZXZlbnQgbWF5YmVfbmVlZGVk IHRvIGJlY29tZSBvbGQgZW5vdWdoIGFmdGVyIHRoZSBHZXRTbmFwc2hvdERhdGEoKQorICog cHJldmVudCBtYXliZV9uZWVkZWQgdG8gYmVjb21lIG9sZCBlbm91Z2ggYWZ0ZXIgdGhlIEdl dE1WQ0NTbmFwc2hvdERhdGEoKQogICogY2FsbC4KICAqCiAgKiBUaGUgdHlwZWRlZiBpcyBp biB0aGUgaGVhZGVyLgpAQCAtMzg2LDcgKzM4Nyw3IEBAIFByb2NBcnJheVNobWVtU2l6ZSh2 b2lkKQogCS8qCiAJICogRHVyaW5nIEhvdCBTdGFuZGJ5IHByb2Nlc3Npbmcgd2UgaGF2ZSBh IGRhdGEgc3RydWN0dXJlIGNhbGxlZAogCSAqIEtub3duQXNzaWduZWRYaWRzLCBjcmVhdGVk IGluIHNoYXJlZCBtZW1vcnkuIExvY2FsIGRhdGEgc3RydWN0dXJlcyBhcmUKLQkgKiBhbHNv IGNyZWF0ZWQgaW4gdmFyaW91cyBiYWNrZW5kcyBkdXJpbmcgR2V0U25hcHNob3REYXRhKCks CisJICogYWxzbyBjcmVhdGVkIGluIHZhcmlvdXMgYmFja2VuZHMgZHVyaW5nIEdldE1WQ0NT bmFwc2hvdERhdGEoKSwKIAkgKiBUcmFuc2FjdGlvbklkSXNJblByb2dyZXNzKCkgYW5kIEdl dFJ1bm5pbmdUcmFuc2FjdGlvbkRhdGEoKS4gQWxsIG9mIHRoZQogCSAqIG1haW4gc3RydWN0 dXJlcyBjcmVhdGVkIGluIHRob3NlIGZ1bmN0aW9ucyBtdXN0IGJlIGlkZW50aWNhbGx5IHNp emVkLAogCSAqIHNpbmNlIHdlIG1heSBhdCB0aW1lcyBjb3B5IHRoZSB3aG9sZSBvZiB0aGUg ZGF0YSBzdHJ1Y3R1cmVzIGFyb3VuZC4gV2UKQEAgLTkzOCw3ICs5MzksNyBAQCBQcm9jQXJy YXlDbGVhclRyYW5zYWN0aW9uKFBHUFJPQyAqcHJvYykKIAogCS8qCiAJICogTmVlZCB0byBp bmNyZW1lbnQgY29tcGxldGlvbiBjb3VudCBldmVuIHRob3VnaCB0cmFuc2FjdGlvbiBoYXNu J3QKLQkgKiByZWFsbHkgY29tbWl0dGVkIHlldC4gVGhlIHJlYXNvbiBmb3IgdGhhdCBpcyB0 aGF0IEdldFNuYXBzaG90RGF0YSgpCisJICogcmVhbGx5IGNvbW1pdHRlZCB5ZXQuIFRoZSBy ZWFzb24gZm9yIHRoYXQgaXMgdGhhdCBHZXRNVkNDU25hcHNob3REYXRhKCkKIAkgKiBvbWl0 cyB0aGUgeGlkIG9mIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLCB0aHVzIHdpdGhvdXQgdGhl IGluY3JlbWVudCB3ZQogCSAqIG90aGVyd2lzZSBjb3VsZCBlbmQgdXAgcmV1c2luZyB0aGUg c25hcHNob3QgbGF0ZXIuIFdoaWNoIHdvdWxkIGJlIGJhZCwKIAkgKiBiZWNhdXNlIGl0IG1p Z2h0IG5vdCBjb3VudCB0aGUgcHJlcGFyZWQgdHJhbnNhY3Rpb24gYXMgcnVubmluZy4KQEAg LTIwODMsNyArMjA4NCw3IEBAIEdldE1heFNuYXBzaG90U3VieGlkQ291bnQodm9pZCkKIH0K IAogLyoKLSAqIEhlbHBlciBmdW5jdGlvbiBmb3IgR2V0U25hcHNob3REYXRhKCkgdGhhdCBj aGVja3MgaWYgdGhlIGJ1bGsgb2YgdGhlCisgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIEdldE1W Q0NTbmFwc2hvdERhdGEoKSB0aGF0IGNoZWNrcyBpZiB0aGUgYnVsayBvZiB0aGUKICAqIHZp c2liaWxpdHkgaW5mb3JtYXRpb24gaW4gdGhlIHNuYXBzaG90IGlzIHN0aWxsIHZhbGlkLiBJ ZiBzbywgaXQgdXBkYXRlcwogICogdGhlIGZpZWxkcyB0aGF0IG5lZWQgdG8gY2hhbmdlIGFu ZCByZXR1cm5zIHRydWUuIE90aGVyd2lzZSBpdCByZXR1cm5zCiAgKiBmYWxzZS4KQEAgLTIw OTIsNyArMjA5Myw3IEBAIEdldE1heFNuYXBzaG90U3VieGlkQ291bnQodm9pZCkKICAqIGxl YXN0IGluIHRoZSBjYXNlIHdlIGFscmVhZHkgaG9sZCBhIHNuYXBzaG90KSwgYnV0IHRoYXQn cyBmb3IgYW5vdGhlciBkYXkuCiAgKi8KIHN0YXRpYyBib29sCi1HZXRTbmFwc2hvdERhdGFS ZXVzZShNVkNDU25hcHNob3Qgc25hcHNob3QpCitHZXRNVkNDU25hcHNob3REYXRhUmV1c2Uo TVZDQ1NuYXBzaG90U2hhcmVkIHNuYXBzaG90KQogewogCXVpbnQ2NAkJY3VyWGFjdENvbXBs ZXRpb25Db3VudDsKIApAQCAtMjExMiwxNyArMjExMywxOCBAQCBHZXRTbmFwc2hvdERhdGFS ZXVzZShNVkNDU25hcHNob3Qgc25hcHNob3QpCiAJICogY29udGVudHM6CiAJICoKIAkgKiBB cyBleHBsYWluZWQgaW4gdHJhbnNhbS9SRUFETUUsIHRoZSBzZXQgb2YgeGlkcyBjb25zaWRl cmVkIHJ1bm5pbmcgYnkKLQkgKiBHZXRTbmFwc2hvdERhdGEoKSBjYW5ub3QgY2hhbmdlIHdo aWxlIFByb2NBcnJheUxvY2sgaXMgaGVsZC4gU25hcHNob3QKLQkgKiBjb250ZW50cyBvbmx5 IGRlcGVuZCBvbiB0cmFuc2FjdGlvbnMgd2l0aCB4aWRzIGFuZCB4YWN0Q29tcGxldGlvbkNv dW50Ci0JICogaXMgaW5jcmVtZW50ZWQgd2hlbmV2ZXIgYSB0cmFuc2FjdGlvbiB3aXRoIGFu IHhpZCBmaW5pc2hlcyAod2hpbGUKLQkgKiBob2xkaW5nIFByb2NBcnJheUxvY2sgZXhjbHVz aXZlbHkpLiBUaHVzIHRoZSB4YWN0Q29tcGxldGlvbkNvdW50IGNoZWNrCi0JICogZW5zdXJl cyB3ZSB3b3VsZCBkZXRlY3QgaWYgdGhlIHNuYXBzaG90IHdvdWxkIGhhdmUgY2hhbmdlZC4K KwkgKiBHZXRNVkNDU25hcHNob3REYXRhKCkgY2Fubm90IGNoYW5nZSB3aGlsZSBQcm9jQXJy YXlMb2NrIGlzIGhlbGQuCisJICogU25hcHNob3QgY29udGVudHMgb25seSBkZXBlbmQgb24g dHJhbnNhY3Rpb25zIHdpdGggeGlkcyBhbmQKKwkgKiB4YWN0Q29tcGxldGlvbkNvdW50IGlz IGluY3JlbWVudGVkIHdoZW5ldmVyIGEgdHJhbnNhY3Rpb24gd2l0aCBhbiB4aWQKKwkgKiBm aW5pc2hlcyAod2hpbGUgaG9sZGluZyBQcm9jQXJyYXlMb2NrIGV4Y2x1c2l2ZWx5KS4gVGh1 cyB0aGUKKwkgKiB4YWN0Q29tcGxldGlvbkNvdW50IGNoZWNrIGVuc3VyZXMgd2Ugd291bGQg ZGV0ZWN0IGlmIHRoZSBzbmFwc2hvdCB3b3VsZAorCSAqIGhhdmUgY2hhbmdlZC4KIAkgKgog CSAqIEFzIHRoZSBzbmFwc2hvdCBjb250ZW50cyBhcmUgdGhlIHNhbWUgYXMgaXQgd2FzIGJl Zm9yZSwgaXQgaXMgc2FmZSB0bwogCSAqIHJlLWVudGVyIHRoZSBzbmFwc2hvdCdzIHhtaW4g aW50byB0aGUgUEdQUk9DIGFycmF5LiBOb25lIG9mIHRoZSByb3dzCiAJICogdmlzaWJsZSB1 bmRlciB0aGUgc25hcHNob3QgY291bGQgYWxyZWFkeSBoYXZlIGJlZW4gcmVtb3ZlZCAodGhh dCdkCiAJICogcmVxdWlyZSB0aGUgc2V0IG9mIHJ1bm5pbmcgdHJhbnNhY3Rpb25zIHRvIGNo YW5nZSkgYW5kIGl0IGZ1bGZpbGxzIHRoZQotCSAqIHJlcXVpcmVtZW50IHRoYXQgY29uY3Vy cmVudCBHZXRTbmFwc2hvdERhdGEoKSBjYWxscyB5aWVsZCB0aGUgc2FtZQorCSAqIHJlcXVp cmVtZW50IHRoYXQgY29uY3VycmVudCBHZXRNVkNDU25hcHNob3REYXRhKCkgY2FsbHMgeWll bGQgdGhlIHNhbWUKIAkgKiB4bWluLgogCSAqLwogCWlmICghVHJhbnNhY3Rpb25JZElzVmFs aWQoTXlQcm9jLT54bWluKSkKQEAgLTIxMzEsMTcgKzIxMzMsMTEgQEAgR2V0U25hcHNob3RE YXRhUmV1c2UoTVZDQ1NuYXBzaG90IHNuYXBzaG90KQogCVJlY2VudFhtaW4gPSBzbmFwc2hv dC0+eG1pbjsKIAlBc3NlcnQoVHJhbnNhY3Rpb25JZFByZWNlZGVzT3JFcXVhbHMoVHJhbnNh Y3Rpb25YbWluLCBSZWNlbnRYbWluKSk7CiAKLQlzbmFwc2hvdC0+Y3VyY2lkID0gR2V0Q3Vy cmVudENvbW1hbmRJZChmYWxzZSk7Ci0Jc25hcHNob3QtPmFjdGl2ZV9jb3VudCA9IDA7Ci0J c25hcHNob3QtPnJlZ2RfY291bnQgPSAwOwotCXNuYXBzaG90LT5jb3BpZWQgPSBmYWxzZTsK LQlzbmFwc2hvdC0+dmFsaWQgPSB0cnVlOwotCiAJcmV0dXJuIHRydWU7CiB9CiAKIC8qCi0g KiBHZXRTbmFwc2hvdERhdGEgLS0gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBydW5uaW5n IHRyYW5zYWN0aW9ucy4KKyAqIEdldE1WQ0NTbmFwc2hvdERhdGEgLS0gcmV0dXJucyBpbmZv cm1hdGlvbiBhYm91dCBydW5uaW5nIHRyYW5zYWN0aW9ucy4KICAqCiAgKiBUaGUgcmV0dXJu ZWQgc25hcHNob3QgaW5jbHVkZXMgeG1pbiAobG93ZXN0IHN0aWxsLXJ1bm5pbmcgeGFjdCBJ RCksCiAgKiB4bWF4IChoaWdoZXN0IGNvbXBsZXRlZCB4YWN0IElEICsgMSksIGFuZCBhIGxp c3Qgb2YgcnVubmluZyB4YWN0IElEcwpAQCAtMjE2OCwxMiArMjE2NCw5IEBAIEdldFNuYXBz aG90RGF0YVJldXNlKE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCkKICAqCiAgKiBBbmQgdHJ5IHRv IGFkdmFuY2UgdGhlIGJvdW5kcyBvZiBHbG9iYWxWaXN7U2hhcmVkLENhdGFsb2csRGF0YSxU ZW1wfVJlbHMKICAqIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgR2xvYmFsVmlzVGVzdCogZmFt aWx5IG9mIGZ1bmN0aW9ucy4KLSAqCi0gKiBOb3RlOiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBw cm9iYWJseSBub3QgYmUgY2FsbGVkIHdpdGggYW4gYXJndW1lbnQgdGhhdCdzCi0gKiBub3Qg c3RhdGljYWxseSBhbGxvY2F0ZWQgKHNlZSB4aXAgYWxsb2NhdGlvbiBiZWxvdykuCiAgKi8K LU1WQ0NTbmFwc2hvdAotR2V0U25hcHNob3REYXRhKE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCkK K01WQ0NTbmFwc2hvdFNoYXJlZAorR2V0TVZDQ1NuYXBzaG90RGF0YSh2b2lkKQogewogCVBy b2NBcnJheVN0cnVjdCAqYXJyYXlQID0gcHJvY0FycmF5OwogCVRyYW5zYWN0aW9uSWQgKm90 aGVyX3hpZHMgPSBQcm9jR2xvYmFsLT54aWRzOwpAQCAtMjE4Nyw0MyArMjE4MCwzNCBAQCBH ZXRTbmFwc2hvdERhdGEoTVZDQ1NuYXBzaG90IHNuYXBzaG90KQogCWludAkJCW15cGd4YWN0 b2ZmOwogCVRyYW5zYWN0aW9uSWQgbXl4aWQ7CiAJdWludDY0CQljdXJYYWN0Q29tcGxldGlv bkNvdW50OworCU1WQ0NTbmFwc2hvdFNoYXJlZCBzbmFwc2hvdDsKIAogCVRyYW5zYWN0aW9u SWQgcmVwbGljYXRpb25fc2xvdF94bWluID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CiAJVHJh bnNhY3Rpb25JZCByZXBsaWNhdGlvbl9zbG90X2NhdGFsb2dfeG1pbiA9IEludmFsaWRUcmFu c2FjdGlvbklkOwogCi0JQXNzZXJ0KHNuYXBzaG90ICE9IE5VTEwpOwotCi0JLyoKLQkgKiBB bGxvY2F0aW5nIHNwYWNlIGZvciBtYXhQcm9jcyB4aWRzIGlzIHVzdWFsbHkgb3ZlcmtpbGw7 IG51bVByb2NzIHdvdWxkCi0JICogYmUgc3VmZmljaWVudC4gIEJ1dCBpdCBzZWVtcyBiZXR0 ZXIgdG8gZG8gdGhlIG1hbGxvYyB3aGlsZSBub3QgaG9sZGluZwotCSAqIHRoZSBsb2NrLCBz byB3ZSBjYW4ndCBsb29rIGF0IG51bVByb2NzLiAgTGlrZXdpc2UsIHdlIGFsbG9jYXRlIG11 Y2gKLQkgKiBtb3JlIHN1YnhpcCBzdG9yYWdlIHRoYW4gaXMgcHJvYmFibHkgbmVlZGVkLgor CS8qLS0tCisJICogQWxsb2NhdGUgYW4gTVZDQ1NuYXBzaG90U2hhcmVkIHN0cnVjdC4gIFRo ZXJlIGFyZSB0aHJlZSBjYXNlczoKKwkgKgorCSAqIDEuIE5vIHRyYW5zYWN0aW9ucyBoYXZl IGNvbXBsZXRlZCBzaW5jZSB0aGUgbGFzdCBjYWxsOiB3ZSBjYW4gcmV1c2UgdGhlCisJICog ICAgbGF0ZXN0IHNuYXBzaG90IGluZm9ybWF0aW9uLiAgU2VlIEdldE1WQ0NTbmFwc2hvdERh dGFSZXVzZSgpLgorCSAqCisJICogMi4gTmVlZCB0byByZWNhbGN1bGF0ZSB0aGUgc25hcHNo b3QsIGFuZCAnbGF0ZXN0U25hcHNob3RTaGFyZWQnIGlzIG5vdAorCSAqICAgIGN1cnJlbnRs eSBpbiB1c2UgYnkgYW55IHNuYXBzaG90LiAgV2UgY2FuIG92ZXJ3cml0ZSBpdHMgY29udGVu dHMuCisJICoKKwkgKiAzLiBOZWVkIHRvIHJlY2FsY3VsYXRlIHRoZSBYSUQgbGlzdCBhbmQg J2xhdGVzdFNuYXBzaG90U2hhcmVkJyBpcyBzdGlsbAorCSAqICAgIGluIHVzZS4gIFdlIG5l ZWQgdG8gYWxsb2NhdGUgYSBuZXcgTVZDQ1NuYXBzaG90U2hhcmVkIHN0cnVjdC4KIAkgKgot CSAqIFRoaXMgZG9lcyBvcGVuIGEgcG9zc2liaWxpdHkgZm9yIGF2b2lkaW5nIHJlcGVhdGVk IG1hbGxvYy9mcmVlOiBzaW5jZQotCSAqIG1heFByb2NzIGRvZXMgbm90IGNoYW5nZSBhdCBy dW50aW1lLCB3ZSBjYW4gc2ltcGx5IHJldXNlIHRoZSBwcmV2aW91cwotCSAqIHhpcCBhcnJh eXMgaWYgYW55LiAgKFRoaXMgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgYWxsIGNhbGxlcnMg cGFzcwotCSAqIHN0YXRpYyBTbmFwc2hvdERhdGEgc3RydWN0cy4pCisJICogV2UgZG9uJ3Qg a25vdyBpZiAnbGF0ZXN0U25hcHNob3RTaGFyZWQnIGNhbiBiZSByZXVzZWQgYmVmb3JlIHdl IGFjcXVpcmUKKwkgKiB0aGUgbG9jaywgYnV0IGlmIHdlIGRvIG5lZWQgdG8gYWxsb2NhdGUs IHdlIHdhbnQgdG8gZG8gaXQgYmVmb3JlCisJICogYWNxdWlyaW5nIHRoZSBsb2NrLiAgVGhl cmVmb3JlLCB3ZSBhbHdheXMgbWFrZSB0aGUgYWxsb2NhdGlvbiBpZiB3ZQorCSAqIG1pZ2h0 IG5lZWQgaXQgYW5kIGlmIGl0IHR1cm5zIG91dCB0byBoYXZlIGJlZW4gdW5uZWNlc3Nhcnks IHdlIHN0YXNoCisJICogYXdheSB0aGUgYWxsb2NhdGVkIHN0cnVjdCBpbiAnc3BhcmVTbmFw c2hvdFNoYXJlZCcgdG8gYmUgcmV1c2VkIG9uIG5leHQKKwkgKiBjYWxsLiAgVGhpcyB3YXks IHRoZSB1bm5lY2Vzc2FyeSBhbGxvY2F0aW9uIGlzIHZlcnkgY2hlYXAuCiAJICovCi0JaWYg KHNuYXBzaG90LT54aXAgPT0gTlVMTCkKLQl7Ci0JCS8qCi0JCSAqIEZpcnN0IGNhbGwgZm9y IHRoaXMgc25hcHNob3QuIFNuYXBzaG90IGlzIHNhbWUgc2l6ZSB3aGV0aGVyIG9yIG5vdAot CQkgKiB3ZSBhcmUgaW4gcmVjb3ZlcnksIHNlZSBsYXRlciBjb21tZW50cy4KLQkJICovCi0J CXNuYXBzaG90LT54aXAgPSAoVHJhbnNhY3Rpb25JZCAqKQotCQkJbWFsbG9jKEdldE1heFNu YXBzaG90WGlkQ291bnQoKSAqIHNpemVvZihUcmFuc2FjdGlvbklkKSk7Ci0JCWlmIChzbmFw c2hvdC0+eGlwID09IE5VTEwpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShF UlJDT0RFX09VVF9PRl9NRU1PUlkpLAotCQkJCQkgZXJybXNnKCJvdXQgb2YgbWVtb3J5Iikp KTsKLQkJQXNzZXJ0KHNuYXBzaG90LT5zdWJ4aXAgPT0gTlVMTCk7Ci0JCXNuYXBzaG90LT5z dWJ4aXAgPSAoVHJhbnNhY3Rpb25JZCAqKQotCQkJbWFsbG9jKEdldE1heFNuYXBzaG90U3Vi eGlkQ291bnQoKSAqIHNpemVvZihUcmFuc2FjdGlvbklkKSk7Ci0JCWlmIChzbmFwc2hvdC0+ c3VieGlwID09IE5VTEwpCi0JCQllcmVwb3J0KEVSUk9SLAotCQkJCQkoZXJyY29kZShFUlJD T0RFX09VVF9PRl9NRU1PUlkpLAotCQkJCQkgZXJybXNnKCJvdXQgb2YgbWVtb3J5IikpKTsK LQl9CisJaWYgKGxhdGVzdFNuYXBzaG90U2hhcmVkICYmIGxhdGVzdFNuYXBzaG90U2hhcmVk LT5yZWZjb3VudCA9PSAwKQorCQlzbmFwc2hvdCA9IGxhdGVzdFNuYXBzaG90U2hhcmVkOwkv KiBjYXNlIDEgb3IgMiAqLworCWVsc2UKKwkJc25hcHNob3QgPSBBbGxvY01WQ0NTbmFwc2hv dFNoYXJlZCgpOwkvKiBjYXNlIDEgb3IgMyAqLwogCiAJLyoKIAkgKiBJdCBpcyBzdWZmaWNp ZW50IHRvIGdldCBzaGFyZWQgbG9jayBvbiBQcm9jQXJyYXlMb2NrLCBldmVuIGlmIHdlIGFy ZQpAQCAtMjIzMSwxMCArMjIxNSwxNCBAQCBHZXRTbmFwc2hvdERhdGEoTVZDQ1NuYXBzaG90 IHNuYXBzaG90KQogCSAqLwogCUxXTG9ja0FjcXVpcmUoUHJvY0FycmF5TG9jaywgTFdfU0hB UkVEKTsKIAotCWlmIChHZXRTbmFwc2hvdERhdGFSZXVzZShzbmFwc2hvdCkpCisJaWYgKGxh dGVzdFNuYXBzaG90U2hhcmVkICYmIEdldE1WQ0NTbmFwc2hvdERhdGFSZXVzZShsYXRlc3RT bmFwc2hvdFNoYXJlZCkpCiAJewogCQlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2spOwot CQlyZXR1cm4gc25hcHNob3Q7CisKKwkJLyogaWYgd2UgbWFkZSBhbiBhbGxvY2F0aW9uLCBz dGFzaCBpdCBhd2F5IGZvciBuZXh0IGNhbGwgKi8KKwkJaWYgKHNuYXBzaG90ICE9IGxhdGVz dFNuYXBzaG90U2hhcmVkKQorCQkJc3BhcmVTbmFwc2hvdFNoYXJlZCA9IHNuYXBzaG90Owor CQlyZXR1cm4gbGF0ZXN0U25hcHNob3RTaGFyZWQ7CiAJfQogCiAJbGF0ZXN0X2NvbXBsZXRl ZCA9IFRyYW5zYW1WYXJpYWJsZXMtPmxhdGVzdENvbXBsZXRlZFhpZDsKQEAgLTI1MDYsMTYg KzI0OTQsMTggQEAgR2V0U25hcHNob3REYXRhKE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCkKIAlz bmFwc2hvdC0+c3Vib3ZlcmZsb3dlZCA9IHN1Ym92ZXJmbG93ZWQ7CiAJc25hcHNob3QtPnNu YXBYYWN0Q29tcGxldGlvbkNvdW50ID0gY3VyWGFjdENvbXBsZXRpb25Db3VudDsKIAotCXNu YXBzaG90LT5jdXJjaWQgPSBHZXRDdXJyZW50Q29tbWFuZElkKGZhbHNlKTsKLQogCS8qCi0J ICogVGhpcyBpcyBhIG5ldyBzbmFwc2hvdCwgc28gc2V0IGJvdGggcmVmY291bnRzIGFyZSB6 ZXJvLCBhbmQgbWFyayBpdCBhcwotCSAqIG5vdCBjb3BpZWQgaW4gcGVyc2lzdGVudCBtZW1v cnkuCisJICogSWYgd2UgYWxsb2NhdGVkIGEgbmV3IHN0cnVjdCBmb3IgdGhpcywgcmVtZW1i ZXIgdGhhdCBpdCBpcyB0aGUgbGF0ZXN0CisJICogbm93IGFuZCBhZGp1c3QgdGhlIHJlZmNv dW50cyBhY2NvcmRpbmdseS4KIAkgKi8KLQlzbmFwc2hvdC0+YWN0aXZlX2NvdW50ID0gMDsK LQlzbmFwc2hvdC0+cmVnZF9jb3VudCA9IDA7Ci0Jc25hcHNob3QtPmNvcGllZCA9IGZhbHNl OwotCXNuYXBzaG90LT52YWxpZCA9IHRydWU7CisJaWYgKHNuYXBzaG90ICE9IGxhdGVzdFNu YXBzaG90U2hhcmVkKQorCXsKKwkJQXNzZXJ0KHNuYXBzaG90LT5yZWZjb3VudCA9PSAwKTsK KworCQlpZiAobGF0ZXN0U25hcHNob3RTaGFyZWQgJiYgbGF0ZXN0U25hcHNob3RTaGFyZWQt PnJlZmNvdW50ID09IDApCisJCQlGcmVlTVZDQ1NuYXBzaG90U2hhcmVkKGxhdGVzdFNuYXBz aG90U2hhcmVkKTsKKwkJbGF0ZXN0U25hcHNob3RTaGFyZWQgPSBzbmFwc2hvdDsKKwl9CiAK IAlyZXR1cm4gc25hcHNob3Q7CiB9CkBAIC0yNTg1LDEwICsyNTc1LDEwIEBAIFByb2NBcnJh eUluc3RhbGxJbXBvcnRlZFhtaW4oVHJhbnNhY3Rpb25JZCB4bWluLAogCQkJY29udGludWU7 CiAKIAkJLyoKLQkJICogV2UncmUgZ29vZC4gIEluc3RhbGwgdGhlIG5ldyB4bWluLiAgQXMg aW4gR2V0U25hcHNob3REYXRhLCBzZXQKKwkJICogV2UncmUgZ29vZC4gIEluc3RhbGwgdGhl IG5ldyB4bWluLiAgQXMgaW4gR2V0TVZDQ1NuYXBzaG90RGF0YSwgc2V0CiAJCSAqIFRyYW5z YWN0aW9uWG1pbiB0b28uICAoTm90ZSB0aGF0IGJlY2F1c2Ugc25hcG1nci5jIGNhbGxlZAot CQkgKiBHZXRTbmFwc2hvdERhdGEgZmlyc3QsIHdlJ2xsIGJlIG92ZXJ3cml0aW5nIGEgdmFs aWQgeG1pbiBoZXJlLCBzbwotCQkgKiB3ZSBkb24ndCBjaGVjayB0aGF0LikKKwkJICogR2V0 TVZDQ1NuYXBzaG90RGF0YSBmaXJzdCwgd2UnbGwgYmUgb3ZlcndyaXRpbmcgYSB2YWxpZCB4 bWluIGhlcmUsCisJCSAqIHNvIHdlIGRvbid0IGNoZWNrIHRoYXQuKQogCQkgKi8KIAkJTXlQ cm9jLT54bWluID0gVHJhbnNhY3Rpb25YbWluID0geG1pbjsKIApAQCAtMjY1OSw3ICsyNjQ5 LDcgQEAgUHJvY0FycmF5SW5zdGFsbFJlc3RvcmVkWG1pbihUcmFuc2FjdGlvbklkIHhtaW4s IFBHUFJPQyAqcHJvYykKIC8qCiAgKiBHZXRSdW5uaW5nVHJhbnNhY3Rpb25EYXRhIC0tIHJl dHVybnMgaW5mb3JtYXRpb24gYWJvdXQgcnVubmluZyB0cmFuc2FjdGlvbnMuCiAgKgotICog U2ltaWxhciB0byBHZXRTbmFwc2hvdERhdGEgYnV0IHJldHVybnMgbW9yZSBpbmZvcm1hdGlv bi4gV2UgaW5jbHVkZQorICogU2ltaWxhciB0byBHZXRNVkNDU25hcHNob3REYXRhIGJ1dCBy ZXR1cm5zIG1vcmUgaW5mb3JtYXRpb24uIFdlIGluY2x1ZGUKICAqIGFsbCBQR1BST0NzIHdp dGggYW4gYXNzaWduZWQgVHJhbnNhY3Rpb25JZCwgZXZlbiBWQUNVVU0gcHJvY2Vzc2VzIGFu ZAogICogcHJlcGFyZWQgdHJhbnNhY3Rpb25zLgogICoKQEAgLTI2ODEsNyArMjY3MSw3IEBA IFByb2NBcnJheUluc3RhbGxSZXN0b3JlZFhtaW4oVHJhbnNhY3Rpb25JZCB4bWluLCBQR1BS T0MgKnByb2MpCiAgKiBlbnRyaWVzIGhlcmUgdG8gbm90IGhvbGQgb24gUHJvY0FycmF5TG9j ayBtb3JlIHRoYW4gbmVjZXNzYXJ5LgogICoKICAqIFdlIGRvbid0IHdvcnJ5IGFib3V0IHVw ZGF0aW5nIG90aGVyIGNvdW50ZXJzLCB3ZSB3YW50IHRvIGtlZXAgdGhpcyBhcwotICogc2lt cGxlIGFzIHBvc3NpYmxlIGFuZCBsZWF2ZSBHZXRTbmFwc2hvdERhdGEoKSBhcyB0aGUgcHJp bWFyeSBjb2RlIGZvcgorICogc2ltcGxlIGFzIHBvc3NpYmxlIGFuZCBsZWF2ZSBHZXRNVkND U25hcHNob3REYXRhKCkgYXMgdGhlIHByaW1hcnkgY29kZSBmb3IKICAqIHRoYXQgYm9va2tl ZXBpbmcuCiAgKgogICogTm90ZSB0aGF0IGlmIGFueSB0cmFuc2FjdGlvbiBoYXMgb3ZlcmZs b3dlZCBpdHMgY2FjaGVkIHN1YnRyYW5zYWN0aW9ucwpAQCAtMjg2Niw4ICsyODU2LDggQEAg R2V0UnVubmluZ1RyYW5zYWN0aW9uRGF0YSh2b2lkKQogLyoKICAqIEdldE9sZGVzdEFjdGl2 ZVRyYW5zYWN0aW9uSWQoKQogICoKLSAqIFNpbWlsYXIgdG8gR2V0U25hcHNob3REYXRhIGJ1 dCByZXR1cm5zIGp1c3Qgb2xkZXN0QWN0aXZlWGlkLiBXZSBpbmNsdWRlCi0gKiBhbGwgUEdQ Uk9DcyB3aXRoIGFuIGFzc2lnbmVkIFRyYW5zYWN0aW9uSWQsIGV2ZW4gVkFDVVVNIHByb2Nl c3Nlcy4KKyAqIFNpbWlsYXIgdG8gR2V0TVZDQ1NuYXBzaG90RGF0YSBidXQgcmV0dXJucyBq dXN0IG9sZGVzdEFjdGl2ZVhpZC4gV2UKKyAqIGluY2x1ZGUgYWxsIFBHUFJPQ3Mgd2l0aCBh biBhc3NpZ25lZCBUcmFuc2FjdGlvbklkLCBldmVuIFZBQ1VVTSBwcm9jZXNzZXMuCiAgKiBX ZSBsb29rIGF0IGFsbCBkYXRhYmFzZXMsIHRob3VnaCB0aGVyZSBpcyBubyBuZWVkIHRvIGlu Y2x1ZGUgV0FMU2VuZGVyCiAgKiBzaW5jZSB0aGlzIGhhcyBubyBlZmZlY3Qgb24gaG90IHN0 YW5kYnkgY29uZmxpY3RzLgogICoKQEAgLTI4NzUsNyArMjg2NSw3IEBAIEdldFJ1bm5pbmdU cmFuc2FjdGlvbkRhdGEodm9pZCkKICAqIEtub3duQXNzaWduZWRYaWRzLgogICoKICAqIFdl IGRvbid0IHdvcnJ5IGFib3V0IHVwZGF0aW5nIG90aGVyIGNvdW50ZXJzLCB3ZSB3YW50IHRv IGtlZXAgdGhpcyBhcwotICogc2ltcGxlIGFzIHBvc3NpYmxlIGFuZCBsZWF2ZSBHZXRTbmFw c2hvdERhdGEoKSBhcyB0aGUgcHJpbWFyeSBjb2RlIGZvcgorICogc2ltcGxlIGFzIHBvc3Np YmxlIGFuZCBsZWF2ZSBHZXRNVkNDU25hcHNob3REYXRhKCkgYXMgdGhlIHByaW1hcnkgY29k ZSBmb3IKICAqIHRoYXQgYm9va2tlZXBpbmcuCiAgKi8KIFRyYW5zYWN0aW9uSWQKQEAgLTQz NTYsNyArNDM0Niw3IEBAIEZ1bGxYaWRSZWxhdGl2ZVRvKEZ1bGxUcmFuc2FjdGlvbklkIHJl bCwgVHJhbnNhY3Rpb25JZCB4aWQpCiAgKiBEdXJpbmcgaG90IHN0YW5kYnkgd2UgZG8gbm90 IGZyZXQgdG9vIG11Y2ggYWJvdXQgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4KICAqIHRvcC1s ZXZlbCBYSURzIGFuZCBzdWJ0cmFuc2FjdGlvbiBYSURzLiBXZSBzdG9yZSBib3RoIHRvZ2V0 aGVyIGluIHRoZQogICogS25vd25Bc3NpZ25lZFhpZHMgbGlzdC4gIEluIGJhY2tlbmRzLCB0 aGlzIGlzIGNvcGllZCBpbnRvIHNuYXBzaG90cyBpbgotICogR2V0U25hcHNob3REYXRhKCks IHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIGZhY3QgdGhhdCBYaWRJbk1WQ0NTbmFwc2hvdCgp CisgKiBHZXRNVkNDU25hcHNob3REYXRhKCksIHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIGZh Y3QgdGhhdCBYaWRJbk1WQ0NTbmFwc2hvdCgpCiAgKiBkb2Vzbid0IGNhcmUgYWJvdXQgdGhl IGRpc3RpbmN0aW9uIGVpdGhlci4gIFN1YnRyYW5zYWN0aW9uIFhJRHMgYXJlCiAgKiBlZmZl Y3RpdmVseSB0cmVhdGVkIGFzIHRvcC1sZXZlbCBYSURzIGFuZCBpbiB0aGUgdHlwaWNhbCBj YXNlIHBnX3N1YnRyYW5zCiAgKiBsaW5rcyBhcmUgKm5vdCogbWFpbnRhaW5lZCAod2hpY2gg ZG9lcyBub3QgYWZmZWN0IHZpc2liaWxpdHkpLgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3By ZWRpY2F0ZS5jCmluZGV4IGRkNTI3ODJmZjIyLi5lZGM2YjlkZTdjYSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3ByZWRpY2F0ZS5jCisrKyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9wcmVkaWNhdGUuYwpAQCAtNDQ5LDEwICs0NDksMTAgQEAgc3RhdGlj IHZvaWQgU2VyaWFsU2V0QWN0aXZlU2VyWG1pbihUcmFuc2FjdGlvbklkIHhpZCk7CiAKIHN0 YXRpYyB1aW50MzIgcHJlZGljYXRlbG9ja19oYXNoKGNvbnN0IHZvaWQgKmtleSwgU2l6ZSBr ZXlzaXplKTsKIHN0YXRpYyB2b2lkIFN1bW1hcml6ZU9sZGVzdENvbW1pdHRlZFN4YWN0KHZv aWQpOwotc3RhdGljIE1WQ0NTbmFwc2hvdCBHZXRTYWZlU25hcHNob3QoTVZDQ1NuYXBzaG90 IG9yaWdTbmFwc2hvdCk7Ci1zdGF0aWMgTVZDQ1NuYXBzaG90IEdldFNlcmlhbGl6YWJsZVRy YW5zYWN0aW9uU25hcHNob3RJbnQoTVZDQ1NuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJ CQkJCQkgIFZpcnR1YWxUcmFuc2FjdGlvbklkICpzb3VyY2V2eGlkLAotCQkJCQkJCQkJCQkJ CQkgIGludCBzb3VyY2VwaWQpOworc3RhdGljIE1WQ0NTbmFwc2hvdFNoYXJlZCBHZXRTYWZl U25hcHNob3Qodm9pZCk7CitzdGF0aWMgTVZDQ1NuYXBzaG90U2hhcmVkIEdldFNlcmlhbGl6 YWJsZVRyYW5zYWN0aW9uU25hcHNob3RJbnQoVmlydHVhbFRyYW5zYWN0aW9uSWQgKnNvdXJj ZXZ4aWQsCisJCQkJCQkJCQkJCQkJCQkJVHJhbnNhY3Rpb25JZCBzb3VyY2V4bWluLAorCQkJ CQkJCQkJCQkJCQkJCWludCBzb3VyY2VwaWQpOwogc3RhdGljIGJvb2wgUHJlZGljYXRlTG9j a0V4aXN0cyhjb25zdCBQUkVESUNBVEVMT0NLVEFSR0VUVEFHICp0YXJnZXR0YWcpOwogc3Rh dGljIGJvb2wgR2V0UGFyZW50UHJlZGljYXRlTG9ja1RhZyhjb25zdCBQUkVESUNBVEVMT0NL VEFSR0VUVEFHICp0YWcsCiAJCQkJCQkJCQkgIFBSRURJQ0FURUxPQ0tUQVJHRVRUQUcgKnBh cmVudCk7CkBAIC0xNTQyLDI1ICsxNTQyLDIwIEBAIFN1bW1hcml6ZU9sZGVzdENvbW1pdHRl ZFN4YWN0KHZvaWQpCiAgKgogICoJCUFzIHdpdGggR2V0U2VyaWFsaXphYmxlVHJhbnNhY3Rp b25TbmFwc2hvdCAod2hpY2ggdGhpcyBpcyBhIHN1YnJvdXRpbmUKICAqCQlmb3IpLCB0aGUg cGFzc2VkLWluIFNuYXBzaG90IHBvaW50ZXIgc2hvdWxkIHJlZmVyZW5jZSBhIHN0YXRpYyBk YXRhCi0gKgkJYXJlYSB0aGF0IGNhbiBzYWZlbHkgYmUgcGFzc2VkIHRvIEdldFNuYXBzaG90 RGF0YS4KKyAqCQlhcmVhIHRoYXQgY2FuIHNhZmVseSBiZSBwYXNzZWQgdG8gR2V0TVZDQ1Nu YXBzaG90RGF0YS4KICAqLwotc3RhdGljIE1WQ0NTbmFwc2hvdAotR2V0U2FmZVNuYXBzaG90 KE1WQ0NTbmFwc2hvdCBvcmlnU25hcHNob3QpCitzdGF0aWMgTVZDQ1NuYXBzaG90U2hhcmVk CitHZXRTYWZlU25hcHNob3Qodm9pZCkKIHsKLQlNVkNDU25hcHNob3Qgc25hcHNob3Q7CisJ TVZDQ1NuYXBzaG90U2hhcmVkIHNuYXBzaG90OwogCiAJQXNzZXJ0KFhhY3RSZWFkT25seSAm JiBYYWN0RGVmZXJyYWJsZSk7CiAKIAl3aGlsZSAodHJ1ZSkKIAl7Ci0JCS8qCi0JCSAqIEdl dFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3RJbnQgaXMgZ29pbmcgdG8gY2FsbAot CQkgKiBHZXRTbmFwc2hvdERhdGEsIHNvIHdlIG5lZWQgdG8gcHJvdmlkZSBpdCB0aGUgc3Rh dGljIHNuYXBzaG90IGFyZWEKLQkJICogb3VyIGNhbGxlciBwYXNzZWQgdG8gdXMuICBUaGUg cG9pbnRlciByZXR1cm5lZCBpcyBhY3R1YWxseSB0aGUgc2FtZQotCQkgKiBvbmUgcGFzc2Vk IHRvIGl0LCBidXQgd2UgYXZvaWQgYXNzdW1pbmcgdGhhdCBoZXJlLgotCQkgKi8KLQkJc25h cHNob3QgPSBHZXRTZXJpYWxpemFibGVUcmFuc2FjdGlvblNuYXBzaG90SW50KG9yaWdTbmFw c2hvdCwKLQkJCQkJCQkJCQkJCQkJIE5VTEwsIEludmFsaWRQaWQpOworCQlzbmFwc2hvdCA9 IEdldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3RJbnQoTlVMTCwKKwkJCQkJCQkJ CQkJCQkJIEludmFsaWRUcmFuc2FjdGlvbklkLAorCQkJCQkJCQkJCQkJCQkgSW52YWxpZFBp ZCk7CiAKIAkJaWYgKE15U2VyaWFsaXphYmxlWGFjdCA9PSBJbnZhbGlkU2VyaWFsaXphYmxl WGFjdCkKIAkJCXJldHVybiBzbmFwc2hvdDsJLyogbm8gY29uY3VycmVudCByL3cgeGFjdHM7 IGl0J3Mgc2FmZSAqLwpAQCAtMTY2MywxMyArMTY1OCwxMSBAQCBHZXRTYWZlU25hcHNob3RC bG9ja2luZ1BpZHMoaW50IGJsb2NrZWRfcGlkLCBpbnQgKm91dHB1dCwgaW50IG91dHB1dF9z aXplKQogICogTWFrZSBzdXJlIHdlIGhhdmUgYSBTRVJJQUxJWkFCTEVYQUNUIHJlZmVyZW5j ZSBpbiBNeVNlcmlhbGl6YWJsZVhhY3QuCiAgKiBJdCBzaG91bGQgYmUgY3VycmVudCBmb3Ig dGhpcyBwcm9jZXNzIGFuZCBiZSBjb250YWluZWQgaW4gUHJlZFhhY3QuCiAgKgotICogVGhl IHBhc3NlZC1pbiBTbmFwc2hvdCBwb2ludGVyIHNob3VsZCByZWZlcmVuY2UgYSBzdGF0aWMg ZGF0YSBhcmVhIHRoYXQKLSAqIGNhbiBzYWZlbHkgYmUgcGFzc2VkIHRvIEdldFNuYXBzaG90 RGF0YS4gIFRoZSByZXR1cm4gdmFsdWUgaXMgYWN0dWFsbHkKLSAqIGFsd2F5cyB0aGlzIHNh bWUgcG9pbnRlcjsgbm8gbmV3IHNuYXBzaG90IGRhdGEgc3RydWN0dXJlIGlzIGFsbG9jYXRl ZAotICogd2l0aGluIHRoaXMgZnVuY3Rpb24uCisgKiBUaGlzIGNhbGxzIEdldE1WQ0NTbmFw c2hvdERhdGEgdG8gZG8gdGhlIGhlYXZ5IGxpZnRpbmcsIGJ1dCBhbHNvIHNldHMgdXAKKyAq IHNoYXJlZCBtZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIHNwZWNpZmljIHRvIHNlcmlhbGl6YWJs ZSB0cmFuc2FjdGlvbnMuCiAgKi8KLU1WQ0NTbmFwc2hvdAotR2V0U2VyaWFsaXphYmxlVHJh bnNhY3Rpb25TbmFwc2hvdChNVkNDU25hcHNob3Qgc25hcHNob3QpCitNVkNDU25hcHNob3RT aGFyZWQKK0dldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3REYXRhKHZvaWQpCiB7 CiAJQXNzZXJ0KElzb2xhdGlvbklzU2VyaWFsaXphYmxlKCkpOwogCkBAIC0xNjkyLDI2ICsx Njg1LDI1IEBAIEdldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3QoTVZDQ1NuYXBz aG90IHNuYXBzaG90KQogCSAqIHRoZXJlYnkgYXZvaWQgYWxsIFNTSSBvdmVyaGVhZCBvbmNl IGl0J3MgcnVubmluZy4KIAkgKi8KIAlpZiAoWGFjdFJlYWRPbmx5ICYmIFhhY3REZWZlcnJh YmxlKQotCQlyZXR1cm4gR2V0U2FmZVNuYXBzaG90KHNuYXBzaG90KTsKKwkJcmV0dXJuIEdl dFNhZmVTbmFwc2hvdCgpOwogCi0JcmV0dXJuIEdldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9u U25hcHNob3RJbnQoc25hcHNob3QsCi0JCQkJCQkJCQkJCQkgTlVMTCwgSW52YWxpZFBpZCk7 CisJcmV0dXJuIEdldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3RJbnQoTlVMTCwg SW52YWxpZFRyYW5zYWN0aW9uSWQsIEludmFsaWRQaWQpOwogfQogCiAvKgogICogSW1wb3J0 IGEgc25hcHNob3QgdG8gYmUgdXNlZCBmb3IgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAg KgotICogVGhpcyBpcyBuZWFybHkgdGhlIHNhbWUgYXMgR2V0U2VyaWFsaXphYmxlVHJhbnNh Y3Rpb25TbmFwc2hvdCwgZXhjZXB0IHRoYXQKLSAqIHdlIGRvbid0IHRha2UgYSBuZXcgc25h cHNob3QsIGJ1dCByYXRoZXIgdXNlIHRoZSBkYXRhIHdlJ3JlIGhhbmRlZC4KKyAqIFRoaXMg aXMgbmVhcmx5IHRoZSBzYW1lIGFzIEdldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNo b3REYXRhLCBleGNlcHQKKyAqIHRoYXQgd2UgZG9uJ3QgdGFrZSBhIG5ldyBzbmFwc2hvdCwg YnV0IHJhdGhlciB1c2UgdGhlIGRhdGEgd2UncmUgaGFuZGVkLgogICoKICAqIFRoZSBjYWxs ZXIgbXVzdCBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlIHNuYXBzaG90IGNhbWUgZnJvbSBhIHNl cmlhbGl6YWJsZQogICogdHJhbnNhY3Rpb247IGFuZCBpZiB3ZSdyZSByZWFkLXdyaXRlLCB0 aGUgc291cmNlIHRyYW5zYWN0aW9uIG11c3Qgbm90IGJlCiAgKiByZWFkLW9ubHkuCiAgKi8K IHZvaWQKLVNldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3QoTVZDQ1NuYXBzaG90 IHNuYXBzaG90LAotCQkJCQkJCQkgICBWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqc291cmNldnhp ZCwKLQkJCQkJCQkJICAgaW50IHNvdXJjZXBpZCkKK1NldFNlcmlhbGl6YWJsZVRyYW5zYWN0 aW9uU25hcHNob3REYXRhKE1WQ0NTbmFwc2hvdFNoYXJlZCBzbmFwc2hvdCwKKwkJCQkJCQkJ CSAgIFZpcnR1YWxUcmFuc2FjdGlvbklkICpzb3VyY2V2eGlkLAorCQkJCQkJCQkJICAgaW50 IHNvdXJjZXBpZCkKIHsKIAlBc3NlcnQoSXNvbGF0aW9uSXNTZXJpYWxpemFibGUoKSk7CiAK QEAgLTE3MzcsMjggKzE3MjksMjkgQEAgU2V0U2VyaWFsaXphYmxlVHJhbnNhY3Rpb25TbmFw c2hvdChNVkNDU25hcHNob3Qgc25hcHNob3QsCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFU VVJFX05PVF9TVVBQT1JURUQpLAogCQkJCSBlcnJtc2coImEgc25hcHNob3QtaW1wb3J0aW5n IHRyYW5zYWN0aW9uIG11c3Qgbm90IGJlIFJFQUQgT05MWSBERUZFUlJBQkxFIikpKTsKIAot CSh2b2lkKSBHZXRTZXJpYWxpemFibGVUcmFuc2FjdGlvblNuYXBzaG90SW50KHNuYXBzaG90 LCBzb3VyY2V2eGlkLAotCQkJCQkJCQkJCQkJIHNvdXJjZXBpZCk7CisJKHZvaWQpIEdldFNl cmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3RJbnQoc291cmNldnhpZCwgc25hcHNob3Qt PnhtaW4sIHNvdXJjZXBpZCk7CiB9CiAKIC8qCiAgKiBHdXRzIG9mIEdldFNlcmlhbGl6YWJs ZVRyYW5zYWN0aW9uU25hcHNob3QKICAqCiAgKiBJZiBzb3VyY2V2eGlkIGlzIHZhbGlkLCB0 aGlzIGlzIGFjdHVhbGx5IGFuIGltcG9ydCBvcGVyYXRpb24gYW5kIHdlIHNob3VsZAotICog c2tpcCBjYWxsaW5nIEdldFNuYXBzaG90RGF0YSwgYmVjYXVzZSB0aGUgc25hcHNob3QgY29u dGVudHMgYXJlIGFscmVhZHkKKyAqIHNraXAgY2FsbGluZyBHZXRNVkNDU25hcHNob3REYXRh LCBiZWNhdXNlIHRoZSBzbmFwc2hvdCBjb250ZW50cyBhcmUgYWxyZWFkeQogICogbG9hZGVk IHVwLiAgSE9XRVZFUjogdG8gYXZvaWQgcmFjZSBjb25kaXRpb25zLCB3ZSBtdXN0IGNoZWNr IHRoYXQgdGhlCiAgKiBzb3VyY2UgeGFjdCBpcyBzdGlsbCBydW5uaW5nIGFmdGVyIHdlIGFj cXVpcmUgU2VyaWFsaXphYmxlWGFjdEhhc2hMb2NrLgogICogV2UgZG8gdGhhdCBieSBjYWxs aW5nIFByb2NBcnJheUluc3RhbGxJbXBvcnRlZFhtaW4uCiAgKi8KLXN0YXRpYyBNVkNDU25h cHNob3QKLUdldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3RJbnQoTVZDQ1NuYXBz aG90IHNuYXBzaG90LAotCQkJCQkJCQkJICBWaXJ0dWFsVHJhbnNhY3Rpb25JZCAqc291cmNl dnhpZCwKK3N0YXRpYyBNVkNDU25hcHNob3RTaGFyZWQKK0dldFNlcmlhbGl6YWJsZVRyYW5z YWN0aW9uU25hcHNob3RJbnQoVmlydHVhbFRyYW5zYWN0aW9uSWQgKnNvdXJjZXZ4aWQsCisJ CQkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgc291cmNleG1pbiwKIAkJCQkJCQkJCSAgaW50IHNv dXJjZXBpZCkKIHsKIAlQR1BST0MJICAgKnByb2M7CiAJVmlydHVhbFRyYW5zYWN0aW9uSWQg dnhpZDsKIAlTRVJJQUxJWkFCTEVYQUNUICpzeGFjdCwKIAkJCSAgICpvdGhlcnN4YWN0Owor CU1WQ0NTbmFwc2hvdFNoYXJlZCBzbmFwc2hvdDsKKwlUcmFuc2FjdGlvbklkIHhtaW47CiAK IAkvKiBXZSBvbmx5IGRvIHRoaXMgZm9yIHNlcmlhbGl6YWJsZSB0cmFuc2FjdGlvbnMuICBP bmNlLiAqLwogCUFzc2VydChNeVNlcmlhbGl6YWJsZVhhY3QgPT0gSW52YWxpZFNlcmlhbGl6 YWJsZVhhY3QpOwpAQCAtMTc4Myw3ICsxNzc2LDcgQEAgR2V0U2VyaWFsaXphYmxlVHJhbnNh Y3Rpb25TbmFwc2hvdEludChNVkNDU25hcHNob3Qgc25hcHNob3QsCiAJICoKIAkgKiBXZSBt dXN0IGhvbGQgU2VyaWFsaXphYmxlWGFjdEhhc2hMb2NrIHdoZW4gdGFraW5nL2NoZWNraW5n IHRoZSBzbmFwc2hvdAogCSAqIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9ucywgZm9yIG11Y2gg dGhlIHNhbWUgcmVhc29ucyB0aGF0Ci0JICogR2V0U25hcHNob3REYXRhIHRha2VzIHRoZSBQ cm9jQXJyYXlMb2NrLiAgU2luY2Ugd2UgbWlnaHQgaGF2ZSB0bworCSAqIEdldE1WQ0NTbmFw c2hvdERhdGEgdGFrZXMgdGhlIFByb2NBcnJheUxvY2suICBTaW5jZSB3ZSBtaWdodCBoYXZl IHRvCiAJICogcmVsZWFzZSBTZXJpYWxpemFibGVYYWN0SGFzaExvY2sgdG8gY2FsbCBTdW1t YXJpemVPbGRlc3RDb21taXR0ZWRTeGFjdCwKIAkgKiB0aGlzIG1lYW5zIHdlIGhhdmUgdG8g Y3JlYXRlIHRoZSBzeGFjdCBmaXJzdCwgd2hpY2ggaXMgYSBiaXQgYW5ub3lpbmcKIAkgKiAo aW4gcGFydGljdWxhciwgYW4gZWxvZyhFUlJPUikgaW4gcHJvY2FycmF5LmMgd291bGQgY2F1 c2UgdXMgdG8gbGVhawpAQCAtMTgwNywxNiArMTgwMCwyNCBAQCBHZXRTZXJpYWxpemFibGVU cmFuc2FjdGlvblNuYXBzaG90SW50KE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCwKIAogCS8qIEdl dCB0aGUgc25hcHNob3QsIG9yIGNoZWNrIHRoYXQgaXQncyBzYWZlIHRvIHVzZSAqLwogCWlm ICghc291cmNldnhpZCkKLQkJc25hcHNob3QgPSBHZXRTbmFwc2hvdERhdGEoc25hcHNob3Qp OwotCWVsc2UgaWYgKCFQcm9jQXJyYXlJbnN0YWxsSW1wb3J0ZWRYbWluKHNuYXBzaG90LT54 bWluLCBzb3VyY2V2eGlkKSkKIAl7Ci0JCVJlbGVhc2VQcmVkWGFjdChzeGFjdCk7Ci0JCUxX TG9ja1JlbGVhc2UoU2VyaWFsaXphYmxlWGFjdEhhc2hMb2NrKTsKLQkJZXJlcG9ydChFUlJP UiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NU QVRFKSwKLQkJCQkgZXJybXNnKCJjb3VsZCBub3QgaW1wb3J0IHRoZSByZXF1ZXN0ZWQgc25h cHNob3QiKSwKLQkJCQkgZXJyZGV0YWlsKCJUaGUgc291cmNlIHByb2Nlc3Mgd2l0aCBQSUQg JWQgaXMgbm90IHJ1bm5pbmcgYW55bW9yZS4iLAotCQkJCQkJICAgc291cmNlcGlkKSkpOwor CQlzbmFwc2hvdCA9IEdldE1WQ0NTbmFwc2hvdERhdGEoKTsKKwkJeG1pbiA9IHNuYXBzaG90 LT54bWluOworCX0KKwllbHNlCisJeworCQlpZiAoIVByb2NBcnJheUluc3RhbGxJbXBvcnRl ZFhtaW4oc291cmNleG1pbiwgc291cmNldnhpZCkpCisJCXsKKwkJCVJlbGVhc2VQcmVkWGFj dChzeGFjdCk7CisJCQlMV0xvY2tSZWxlYXNlKFNlcmlhbGl6YWJsZVhhY3RIYXNoTG9jayk7 CisJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1Rf SU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkJIGVycm1zZygiY291bGQgbm90IGltcG9y dCB0aGUgcmVxdWVzdGVkIHNuYXBzaG90IiksCisJCQkJCSBlcnJkZXRhaWwoIlRoZSBzb3Vy Y2UgcHJvY2VzcyB3aXRoIFBJRCAlZCBpcyBub3QgcnVubmluZyBhbnltb3JlLiIsCisJCQkJ CQkJICAgc291cmNlcGlkKSkpOworCQl9CisJCXNuYXBzaG90ID0gTlVMTDsKKwkJeG1pbiA9 IHNvdXJjZXhtaW47CiAJfQogCiAJLyoKQEAgLTE4NDgsNyArMTg0OSw3IEBAIEdldFNlcmlh bGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3RJbnQoTVZDQ1NuYXBzaG90IHNuYXBzaG90LAog CWRsaXN0X2luaXQoJihzeGFjdC0+cG9zc2libGVVbnNhZmVDb25mbGljdHMpKTsKIAlzeGFj dC0+dG9wWGlkID0gR2V0VG9wVHJhbnNhY3Rpb25JZElmQW55KCk7CiAJc3hhY3QtPmZpbmlz aGVkQmVmb3JlID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0Jc3hhY3QtPnhtaW4gPSBzbmFw c2hvdC0+eG1pbjsKKwlzeGFjdC0+eG1pbiA9IHhtaW47CiAJc3hhY3QtPnBpZCA9IE15UHJv Y1BpZDsKIAlzeGFjdC0+cGdwcm9jbm8gPSBNeVByb2NOdW1iZXI7CiAJZGxpc3RfaW5pdCgm c3hhY3QtPnByZWRpY2F0ZUxvY2tzKTsKQEAgLTE5MDIsMTggKzE5MDMsMTggQEAgR2V0U2Vy aWFsaXphYmxlVHJhbnNhY3Rpb25TbmFwc2hvdEludChNVkNDU25hcHNob3Qgc25hcHNob3Qs CiAJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChQcmVkWGFjdC0+U3hhY3RHbG9iYWxYbWlu KSkKIAl7CiAJCUFzc2VydChQcmVkWGFjdC0+U3hhY3RHbG9iYWxYbWluQ291bnQgPT0gMCk7 Ci0JCVByZWRYYWN0LT5TeGFjdEdsb2JhbFhtaW4gPSBzbmFwc2hvdC0+eG1pbjsKKwkJUHJl ZFhhY3QtPlN4YWN0R2xvYmFsWG1pbiA9IHhtaW47CiAJCVByZWRYYWN0LT5TeGFjdEdsb2Jh bFhtaW5Db3VudCA9IDE7Ci0JCVNlcmlhbFNldEFjdGl2ZVNlclhtaW4oc25hcHNob3QtPnht aW4pOworCQlTZXJpYWxTZXRBY3RpdmVTZXJYbWluKHhtaW4pOwogCX0KLQllbHNlIGlmIChU cmFuc2FjdGlvbklkRXF1YWxzKHNuYXBzaG90LT54bWluLCBQcmVkWGFjdC0+U3hhY3RHbG9i YWxYbWluKSkKKwllbHNlIGlmIChUcmFuc2FjdGlvbklkRXF1YWxzKHhtaW4sIFByZWRYYWN0 LT5TeGFjdEdsb2JhbFhtaW4pKQogCXsKIAkJQXNzZXJ0KFByZWRYYWN0LT5TeGFjdEdsb2Jh bFhtaW5Db3VudCA+IDApOwogCQlQcmVkWGFjdC0+U3hhY3RHbG9iYWxYbWluQ291bnQrKzsK IAl9CiAJZWxzZQogCXsKLQkJQXNzZXJ0KFRyYW5zYWN0aW9uSWRGb2xsb3dzKHNuYXBzaG90 LT54bWluLCBQcmVkWGFjdC0+U3hhY3RHbG9iYWxYbWluKSk7CisJCUFzc2VydChUcmFuc2Fj dGlvbklkRm9sbG93cyh4bWluLCBQcmVkWGFjdC0+U3hhY3RHbG9iYWxYbWluKSk7CiAJfQog CiAJTXlTZXJpYWxpemFibGVYYWN0ID0gc3hhY3Q7CkBAIC0zOTY4LDEzICszOTY5LDEzIEBA IFhpZElzQ29uY3VycmVudChUcmFuc2FjdGlvbklkIHhpZCkKIAogCXNuYXAgPSAoTVZDQ1Nu YXBzaG90KSBHZXRUcmFuc2FjdGlvblNuYXBzaG90KCk7CiAKLQlpZiAoVHJhbnNhY3Rpb25J ZFByZWNlZGVzKHhpZCwgc25hcC0+eG1pbikpCisJaWYgKFRyYW5zYWN0aW9uSWRQcmVjZWRl cyh4aWQsIHNuYXAtPnNoYXJlZC0+eG1pbikpCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChU cmFuc2FjdGlvbklkRm9sbG93c09yRXF1YWxzKHhpZCwgc25hcC0+eG1heCkpCisJaWYgKFRy YW5zYWN0aW9uSWRGb2xsb3dzT3JFcXVhbHMoeGlkLCBzbmFwLT5zaGFyZWQtPnhtYXgpKQog CQlyZXR1cm4gdHJ1ZTsKIAotCXJldHVybiBwZ19sZmluZDMyKHhpZCwgc25hcC0+eGlwLCBz bmFwLT54Y250KTsKKwlyZXR1cm4gcGdfbGZpbmQzMih4aWQsIHNuYXAtPnNoYXJlZC0+eGlw LCBzbmFwLT5zaGFyZWQtPnhjbnQpOwogfQogCiBib29sCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9hZHQveGlkOGZ1bmNzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQveGlk OGZ1bmNzLmMKaW5kZXggZDRhYThlZjllNGUuLmVlZjYzMjM5MGNiIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9hZHQveGlkOGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRp bHMvYWR0L3hpZDhmdW5jcy5jCkBAIC0zODAsNyArMzgwLDcgQEAgcGdfY3VycmVudF9zbmFw c2hvdChQR19GVU5DVElPTl9BUkdTKQogCQllbG9nKEVSUk9SLCAibm8gYWN0aXZlIHNuYXBz aG90IHNldCIpOwogCiAJLyogYWxsb2NhdGUgKi8KLQlueGlwID0gY3VyLT54Y250OworCW54 aXAgPSBjdXItPnNoYXJlZC0+eGNudDsKIAlzbmFwID0gcGFsbG9jKFBHX1NOQVBTSE9UX1NJ WkUobnhpcCkpOwogCiAJLyoKQEAgLTM4OSwxMiArMzg5LDEyIEBAIHBnX2N1cnJlbnRfc25h cHNob3QoUEdfRlVOQ1RJT05fQVJHUykKIAkgKiBhZHZhbmNlIHBhc3QgYW55IG9mIHRoZXNl IFhJRHMuICBIZW5jZSwgdGhlc2UgWElEcyByZW1haW4gYWxsb3dhYmxlCiAJICogcmVsYXRp dmUgdG8gbmV4dF9meGlkLgogCSAqLwotCXNuYXAtPnhtaW4gPSBGdWxsVHJhbnNhY3Rpb25J ZEZyb21BbGxvd2FibGVBdChuZXh0X2Z4aWQsIGN1ci0+eG1pbik7Ci0Jc25hcC0+eG1heCA9 IEZ1bGxUcmFuc2FjdGlvbklkRnJvbUFsbG93YWJsZUF0KG5leHRfZnhpZCwgY3VyLT54bWF4 KTsKKwlzbmFwLT54bWluID0gRnVsbFRyYW5zYWN0aW9uSWRGcm9tQWxsb3dhYmxlQXQobmV4 dF9meGlkLCBjdXItPnNoYXJlZC0+eG1pbik7CisJc25hcC0+eG1heCA9IEZ1bGxUcmFuc2Fj dGlvbklkRnJvbUFsbG93YWJsZUF0KG5leHRfZnhpZCwgY3VyLT5zaGFyZWQtPnhtYXgpOwog CXNuYXAtPm54aXAgPSBueGlwOwogCWZvciAoaSA9IDA7IGkgPCBueGlwOyBpKyspCiAJCXNu YXAtPnhpcFtpXSA9Ci0JCQlGdWxsVHJhbnNhY3Rpb25JZEZyb21BbGxvd2FibGVBdChuZXh0 X2Z4aWQsIGN1ci0+eGlwW2ldKTsKKwkJCUZ1bGxUcmFuc2FjdGlvbklkRnJvbUFsbG93YWJs ZUF0KG5leHRfZnhpZCwgY3VyLT5zaGFyZWQtPnhpcFtpXSk7CiAKIAkvKgogCSAqIFdlIHdh bnQgdGhlbSBndWFyYW50ZWVkIHRvIGJlIGluIGFzY2VuZGluZyBvcmRlci4gIFRoaXMgYWxz byByZW1vdmVzCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy90aW1lL3NuYXBtZ3Iu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCmluZGV4IDFjMzljYzExNjA5 Li41ZjlmMmI5ZDhiMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvdGltZS9zbmFw bWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvdGltZS9zbmFwbWdyLmMKQEAgLTEyMiw5 ICsxMjIsNiBAQAogICogc3BlY2lhbC1wdXJwb3NlIGNvZGUgKHNheSwgUkkgY2hlY2tpbmcu KSAgQ2F0YWxvZ1NuYXBzaG90IHBvaW50cyB0byBhbgogICogTVZDQyBzbmFwc2hvdCBpbnRl bmRlZCB0byBiZSB1c2VkIGZvciBjYXRhbG9nIHNjYW5zOyB3ZSBtdXN0IGludmFsaWRhdGUg aXQKICAqIHdoZW5ldmVyIGEgc3lzdGVtIGNhdGFsb2cgY2hhbmdlIG9jY3Vycy4KLSAqCi0g KiBUaGVzZSBTbmFwc2hvdERhdGEgc3RydWN0cyBhcmUgc3RhdGljIHRvIHNpbXBsaWZ5IG1l bW9yeSBhbGxvY2F0aW9uCi0gKiAoc2VlIHRoZSBoYWNrIGluIEdldFNuYXBzaG90RGF0YSB0 byBhdm9pZCByZXBlYXRlZCBtYWxsb2MvZnJlZSkuCiAgKi8KIHN0YXRpYyBNVkNDU25hcHNo b3REYXRhIEN1cnJlbnRTbmFwc2hvdERhdGEgPSB7U05BUFNIT1RfTVZDQ307CiBzdGF0aWMg TVZDQ1NuYXBzaG90RGF0YSBTZWNvbmRhcnlTbmFwc2hvdERhdGEgPSB7U05BUFNIT1RfTVZD Q307CkBAIC0xMzcsNyArMTM0LDcgQEAgU25hcHNob3REYXRhIFNuYXBzaG90VG9hc3REYXRh ID0ge1NOQVBTSE9UX1RPQVNUfTsKIHN0YXRpYyBIaXN0b3JpY01WQ0NTbmFwc2hvdCBIaXN0 b3JpY1NuYXBzaG90ID0gTlVMTDsKIAogLyoKLSAqIFRoZXNlIGFyZSB1cGRhdGVkIGJ5IEdl dFNuYXBzaG90RGF0YS4gIFdlIGluaXRpYWxpemUgdGhlbSB0aGlzIHdheQorICogVGhlc2Ug YXJlIHVwZGF0ZWQgYnkgR2V0TVZDQ1NuYXBzaG90RGF0YS4gIFdlIGluaXRpYWxpemUgdGhl bSB0aGlzIHdheQogICogZm9yIHRoZSBjb252ZW5pZW5jZSBvZiBUcmFuc2FjdGlvbklkSXNJ blByb2dyZXNzOiBldmVuIGluIGJvb3RzdHJhcAogICogbW9kZSwgd2UgZG9uJ3Qgd2FudCBp dCB0byBzYXkgdGhhdCBCb290c3RyYXBUcmFuc2FjdGlvbklkIGlzIGluIHByb2dyZXNzLgog ICovCkBAIC0xNTAsMTQgKzE0NywxMiBAQCBzdGF0aWMgSFRBQiAqdHVwbGVjaWRfZGF0YSA9 IE5VTEw7CiAvKgogICogRWxlbWVudHMgb2YgdGhlIGFjdGl2ZSBzbmFwc2hvdCBzdGFjay4K ICAqCi0gKiBFYWNoIGVsZW1lbnQgaGVyZSBhY2NvdW50cyBmb3IgZXhhY3RseSBvbmUgYWN0 aXZlX2NvdW50IG9uIFNuYXBzaG90RGF0YS4KLSAqCiAgKiBOQjogdGhlIGNvZGUgYXNzdW1l cyB0aGF0IGVsZW1lbnRzIGluIHRoaXMgbGlzdCBhcmUgaW4gbm9uLWluY3JlYXNpbmcKICAq IG9yZGVyIG9mIGFzX2xldmVsOyBhbHNvLCB0aGUgbGlzdCBtdXN0IGJlIE5VTEwtdGVybWlu YXRlZC4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgQWN0aXZlU25hcHNob3RFbHQKIHsKLQlNVkND U25hcHNob3QgYXNfc25hcDsKKwlNVkNDU25hcHNob3REYXRhIGFzX3NuYXA7CiAJaW50CQkJ YXNfbGV2ZWw7CiAJc3RydWN0IEFjdGl2ZVNuYXBzaG90RWx0ICphc19uZXh0OwogfSBBY3Rp dmVTbmFwc2hvdEVsdDsKQEAgLTE4OCwxOSArMTgzLDIzIEBAIHN0YXRpYyBib29sIEZpcnN0 WGFjdFNuYXBzaG90UmVnaXN0ZXJlZCA9IGZhbHNlOwogdHlwZWRlZiBzdHJ1Y3QgRXhwb3J0 ZWRTbmFwc2hvdAogewogCWNoYXIJICAgKnNuYXBmaWxlOwotCU1WQ0NTbmFwc2hvdCBzbmFw c2hvdDsKKwlNVkNDU25hcHNob3RTaGFyZWQgc25hcHNob3Q7CiB9IEV4cG9ydGVkU25hcHNo b3Q7CiAKIC8qIEN1cnJlbnQgeGFjdCdzIGV4cG9ydGVkIHNuYXBzaG90cyAoYSBsaXN0IG9m IEV4cG9ydGVkU25hcHNob3Qgc3RydWN0cykgKi8KIHN0YXRpYyBMaXN0ICpleHBvcnRlZFNu YXBzaG90cyA9IE5JTDsKIAorTVZDQ1NuYXBzaG90U2hhcmVkIGxhdGVzdFNuYXBzaG90U2hh cmVkID0gTlVMTDsKK01WQ0NTbmFwc2hvdFNoYXJlZCBzcGFyZVNuYXBzaG90U2hhcmVkID0g TlVMTDsKKwogLyogUHJvdG90eXBlcyBmb3IgbG9jYWwgZnVuY3Rpb25zICovCi1zdGF0aWMg TVZDQ1NuYXBzaG90IENvcHlNVkNDU25hcHNob3QoTVZDQ1NuYXBzaG90IHNuYXBzaG90KTsK K3N0YXRpYyB2b2lkIFVwZGF0ZVN0YXRpY01WQ0NTbmFwc2hvdChNVkNDU25hcHNob3Qgc25h cHNob3QsIE1WQ0NTbmFwc2hvdFNoYXJlZCBzaGFyZWQpOwogc3RhdGljIHZvaWQgVW5yZWdp c3RlclNuYXBzaG90Tm9Pd25lcihTbmFwc2hvdCBzbmFwc2hvdCk7Ci1zdGF0aWMgdm9pZCBG cmVlTVZDQ1NuYXBzaG90KE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCk7CiBzdGF0aWMgdm9pZCBT bmFwc2hvdFJlc2V0WG1pbih2b2lkKTsKLXN0YXRpYyB2b2lkIHZhbGlkX3NuYXBzaG90c19w dXNoX3RhaWwoTVZDQ1NuYXBzaG90IHNuYXBzaG90KTsKLXN0YXRpYyB2b2lkIHZhbGlkX3Nu YXBzaG90c19wdXNoX291dF9vZl9vcmRlcihNVkNDU25hcHNob3Qgc25hcHNob3QpOworc3Rh dGljIHZvaWQgUmVsZWFzZU1WQ0NTbmFwc2hvdFNoYXJlZChNVkNDU25hcHNob3RTaGFyZWQg c2hhcmVkKTsKK3N0YXRpYyB2b2lkIHZhbGlkX3NuYXBzaG90c19wdXNoX3RhaWwoTVZDQ1Nu YXBzaG90U2hhcmVkIHNuYXBzaG90KTsKK3N0YXRpYyB2b2lkIHZhbGlkX3NuYXBzaG90c19w dXNoX291dF9vZl9vcmRlcihNVkNDU25hcHNob3RTaGFyZWQgc25hcHNob3QpOworCiAKIC8q IFJlc291cmNlT3duZXIgY2FsbGJhY2tzIHRvIHRyYWNrIHNuYXBzaG90IHJlZmVyZW5jZXMg Ki8KIHN0YXRpYyB2b2lkIFJlc093bmVyUmVsZWFzZVNuYXBzaG90KERhdHVtIHJlcyk7CkBA IC0yNjYsNiArMjY1LDggQEAgR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCh2b2lkKQogCS8qIEZp cnN0IGNhbGwgaW4gdHJhbnNhY3Rpb24/ICovCiAJaWYgKCFGaXJzdFNuYXBzaG90U2V0KQog CXsKKwkJTVZDQ1NuYXBzaG90U2hhcmVkIHNoYXJlZDsKKwogCQkvKgogCQkgKiBEb24ndCBh bGxvdyBjYXRhbG9nIHNuYXBzaG90IHRvIGJlIG9sZGVyIHRoYW4geGFjdCBzbmFwc2hvdC4g IE11c3QKIAkJICogZG8gdGhpcyBmaXJzdCB0byBhbGxvdyB0aGUgZW1wdHktaGVhcCBBc3Nl cnQgdG8gc3VjY2VlZC4KQEAgLTI4NywyMyArMjg4LDE4IEBAIEdldFRyYW5zYWN0aW9uU25h cHNob3Qodm9pZCkKIAkJICogbW9kZSwgcHJlZGljYXRlLmMgbmVlZHMgdG8gd3JhcCB0aGUg c25hcHNob3QgZmV0Y2ggaW4gaXRzIG93bgogCQkgKiBwcm9jZXNzaW5nLgogCQkgKi8KKwkJ aWYgKElzb2xhdGlvbklzU2VyaWFsaXphYmxlKCkpCisJCQlzaGFyZWQgPSBHZXRTZXJpYWxp emFibGVUcmFuc2FjdGlvblNuYXBzaG90RGF0YSgpOworCQllbHNlCisJCQlzaGFyZWQgPSBH ZXRNVkNDU25hcHNob3REYXRhKCk7CisKKwkJVXBkYXRlU3RhdGljTVZDQ1NuYXBzaG90KCZD dXJyZW50U25hcHNob3REYXRhLCBzaGFyZWQpOworCiAJCWlmIChJc29sYXRpb25Vc2VzWGFj dFNuYXBzaG90KCkpCiAJCXsKLQkJCS8qIEZpcnN0LCBjcmVhdGUgdGhlIHNuYXBzaG90IGlu IEN1cnJlbnRTbmFwc2hvdERhdGEgKi8KLQkJCWlmIChJc29sYXRpb25Jc1NlcmlhbGl6YWJs ZSgpKQotCQkJCUdldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3QoJkN1cnJlbnRT bmFwc2hvdERhdGEpOwotCQkJZWxzZQotCQkJCUdldFNuYXBzaG90RGF0YSgmQ3VycmVudFNu YXBzaG90RGF0YSk7Ci0KLQkJCS8qIE1hcmsgaXQgYXMgInJlZ2lzdGVyZWQiICovCisJCQkv KiBrZWVwIGl0ICovCiAJCQlGaXJzdFhhY3RTbmFwc2hvdFJlZ2lzdGVyZWQgPSB0cnVlOwog CQl9Ci0JCWVsc2UKLQkJewotCQkJR2V0U25hcHNob3REYXRhKCZDdXJyZW50U25hcHNob3RE YXRhKTsKLQkJfQotCQl2YWxpZF9zbmFwc2hvdHNfcHVzaF90YWlsKCZDdXJyZW50U25hcHNo b3REYXRhKTsKLQogCQlGaXJzdFNuYXBzaG90U2V0ID0gdHJ1ZTsKIAkJcmV0dXJuIChTbmFw c2hvdCkgJkN1cnJlbnRTbmFwc2hvdERhdGE7CiAJfQpAQCAtMzE4LDE0ICszMTQsMzEgQEAg R2V0VHJhbnNhY3Rpb25TbmFwc2hvdCh2b2lkKQogCS8qIERvbid0IGFsbG93IGNhdGFsb2cg c25hcHNob3QgdG8gYmUgb2xkZXIgdGhhbiB4YWN0IHNuYXBzaG90LiAqLwogCUludmFsaWRh dGVDYXRhbG9nU25hcHNob3QoKTsKIAotCWlmIChDdXJyZW50U25hcHNob3REYXRhLnZhbGlk KQotCQlkbGlzdF9kZWxldGUoJkN1cnJlbnRTbmFwc2hvdERhdGEubm9kZSk7Ci0JR2V0U25h cHNob3REYXRhKCZDdXJyZW50U25hcHNob3REYXRhKTsKLQl2YWxpZF9zbmFwc2hvdHNfcHVz aF90YWlsKCZDdXJyZW50U25hcHNob3REYXRhKTsKLQorCVVwZGF0ZVN0YXRpY01WQ0NTbmFw c2hvdCgmQ3VycmVudFNuYXBzaG90RGF0YSwgR2V0TVZDQ1NuYXBzaG90RGF0YSgpKTsKIAly ZXR1cm4gKFNuYXBzaG90KSAmQ3VycmVudFNuYXBzaG90RGF0YTsKIH0KIAorLyoKKyAqIFVw ZGF0ZSBhIHN0YXRpYyBzbmFwc2hvdCB3aXRoIHRoZSBnaXZlbiBzaGFyZWQgc3RydWN0Lgor ICoKKyAqIElmIHRoZSBzdGF0aWMgc25hcHNob3QgaXMgcHJldmlvdXNseSB2YWxpZCwgcmVs ZWFzZSBpdHMgb2xkICdzaGFyZWQnCisgKiBzdHJ1Y3QgZmlyc3QuCisgKi8KK3N0YXRpYyB2 b2lkCitVcGRhdGVTdGF0aWNNVkNDU25hcHNob3QoTVZDQ1NuYXBzaG90IHNuYXBzaG90LCBN VkNDU25hcHNob3RTaGFyZWQgc2hhcmVkKQoreworCS8qIFJlcGxhY2UgdGhlICdzaGFyZWQn IHN0cnVjdCAqLworCWlmIChzbmFwc2hvdC0+c2hhcmVkKQorCQlSZWxlYXNlTVZDQ1NuYXBz aG90U2hhcmVkKHNuYXBzaG90LT5zaGFyZWQpOworCXNuYXBzaG90LT5zaGFyZWQgPSBzaGFy ZWQ7CisJc25hcHNob3QtPnNoYXJlZC0+cmVmY291bnQrKzsKKwlpZiAoc25hcHNob3QtPnNo YXJlZC0+cmVmY291bnQgPT0gMSkKKwkJdmFsaWRfc25hcHNob3RzX3B1c2hfdGFpbChzaGFy ZWQpOworCisJc25hcHNob3QtPmN1cmNpZCA9IEdldEN1cnJlbnRDb21tYW5kSWQoZmFsc2Up OworCXNuYXBzaG90LT52YWxpZCA9IHRydWU7Cit9CisKIC8qCiAgKiBHZXRMYXRlc3RTbmFw c2hvdAogICoJCUdldCBhIHNuYXBzaG90IHRoYXQgaXMgdXAtdG8tZGF0ZSBhcyBvZiB0aGUg Y3VycmVudCBpbnN0YW50LApAQCAtMzUyLDEwICszNjUsNyBAQCBHZXRMYXRlc3RTbmFwc2hv dCh2b2lkKQogCWlmICghRmlyc3RTbmFwc2hvdFNldCkKIAkJcmV0dXJuIEdldFRyYW5zYWN0 aW9uU25hcHNob3QoKTsKIAotCWlmIChTZWNvbmRhcnlTbmFwc2hvdERhdGEudmFsaWQpCi0J CWRsaXN0X2RlbGV0ZSgmU2Vjb25kYXJ5U25hcHNob3REYXRhLm5vZGUpOwotCUdldFNuYXBz aG90RGF0YSgmU2Vjb25kYXJ5U25hcHNob3REYXRhKTsKLQl2YWxpZF9zbmFwc2hvdHNfcHVz aF90YWlsKCZTZWNvbmRhcnlTbmFwc2hvdERhdGEpOworCVVwZGF0ZVN0YXRpY01WQ0NTbmFw c2hvdCgmU2Vjb25kYXJ5U25hcHNob3REYXRhLCBHZXRNVkNDU25hcHNob3REYXRhKCkpOwog CiAJcmV0dXJuIChTbmFwc2hvdCkgJlNlY29uZGFyeVNuYXBzaG90RGF0YTsKIH0KQEAgLTQw NSw3ICs0MTUsNyBAQCBHZXROb25IaXN0b3JpY0NhdGFsb2dTbmFwc2hvdChPaWQgcmVsaWQp CiAJaWYgKCFDYXRhbG9nU25hcHNob3REYXRhLnZhbGlkKQogCXsKIAkJLyogR2V0IG5ldyBz bmFwc2hvdC4gKi8KLQkJR2V0U25hcHNob3REYXRhKCZDYXRhbG9nU25hcHNob3REYXRhKTsK KwkJVXBkYXRlU3RhdGljTVZDQ1NuYXBzaG90KCZDYXRhbG9nU25hcHNob3REYXRhLCBHZXRN VkNDU25hcHNob3REYXRhKCkpOwogCiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSB0aGUgY2F0YWxv ZyBzbmFwc2hvdCB3aWxsIGJlIGFjY291bnRlZCBmb3IgaW4gZGVjaXNpb25zCkBAIC00MTks NyArNDI5LDYgQEAgR2V0Tm9uSGlzdG9yaWNDYXRhbG9nU25hcHNob3QoT2lkIHJlbGlkKQog CQkgKiBOQjogaXQgaGFkIGJldHRlciBiZSBpbXBvc3NpYmxlIGZvciB0aGlzIHRvIHRocm93 IGVycm9yLCBzaW5jZSB0aGUKIAkJICogQ2F0YWxvZ1NuYXBzaG90IHBvaW50ZXIgaXMgYWxy ZWFkeSB2YWxpZC4KIAkJICovCi0JCXZhbGlkX3NuYXBzaG90c19wdXNoX3RhaWwoJkNhdGFs b2dTbmFwc2hvdERhdGEpOwogCX0KIAogCXJldHVybiAoU25hcHNob3QpICZDYXRhbG9nU25h cHNob3REYXRhOwpAQCAtNDQwLDE3ICs0NDksMjAgQEAgSW52YWxpZGF0ZUNhdGFsb2dTbmFw c2hvdCh2b2lkKQogewogCWlmIChDYXRhbG9nU25hcHNob3REYXRhLnZhbGlkKQogCXsKLQkJ ZGxpc3RfZGVsZXRlKCZDYXRhbG9nU25hcHNob3REYXRhLm5vZGUpOworCQlSZWxlYXNlTVZD Q1NuYXBzaG90U2hhcmVkKENhdGFsb2dTbmFwc2hvdERhdGEuc2hhcmVkKTsKKwkJQ2F0YWxv Z1NuYXBzaG90RGF0YS5zaGFyZWQgPSBOVUxMOwogCQlDYXRhbG9nU25hcHNob3REYXRhLnZh bGlkID0gZmFsc2U7CiAJfQogCWlmICghRmlyc3RYYWN0U25hcHNob3RSZWdpc3RlcmVkICYm IEN1cnJlbnRTbmFwc2hvdERhdGEudmFsaWQpCiAJewotCQlkbGlzdF9kZWxldGUoJkN1cnJl bnRTbmFwc2hvdERhdGEubm9kZSk7CisJCVJlbGVhc2VNVkNDU25hcHNob3RTaGFyZWQoQ3Vy cmVudFNuYXBzaG90RGF0YS5zaGFyZWQpOworCQlDdXJyZW50U25hcHNob3REYXRhLnNoYXJl ZCA9IE5VTEw7CiAJCUN1cnJlbnRTbmFwc2hvdERhdGEudmFsaWQgPSBmYWxzZTsKIAl9CiAJ aWYgKFNlY29uZGFyeVNuYXBzaG90RGF0YS52YWxpZCkKIAl7Ci0JCWRsaXN0X2RlbGV0ZSgm U2Vjb25kYXJ5U25hcHNob3REYXRhLm5vZGUpOworCQlSZWxlYXNlTVZDQ1NuYXBzaG90U2hh cmVkKFNlY29uZGFyeVNuYXBzaG90RGF0YS5zaGFyZWQpOworCQlTZWNvbmRhcnlTbmFwc2hv dERhdGEuc2hhcmVkID0gTlVMTDsKIAkJU2Vjb25kYXJ5U25hcHNob3REYXRhLnZhbGlkID0g ZmFsc2U7CiAJfQogCkBAIC00NjUsMTMgKzQ3NywxNCBAQCBJbnZhbGlkYXRlQ2F0YWxvZ1Nu YXBzaG90KHZvaWQpCiAgKiB3YW50IHRvIGNvbnRpbnVlIGhvbGRpbmcgdGhlIGNhdGFsb2cg c25hcHNob3QgaWYgaXQgbWlnaHQgbWVhbiB0aGF0IHRoZQogICogZ2xvYmFsIHhtaW4gaG9y aXpvbiBjYW4ndCBhZHZhbmNlLiAgSG93ZXZlciwgaWYgdGhlcmUgYXJlIG90aGVyIHNuYXBz aG90cwogICogc3RpbGwgYWN0aXZlIG9yIHJlZ2lzdGVyZWQsIHRoZSBjYXRhbG9nIHNuYXBz aG90IGlzbid0IGxpa2VseSB0byBiZSB0aGUKLSAqIG9sZGVzdCBvbmUsIHNvIHdlIG1pZ2h0 IGFzIHdlbGwga2VlcCBpdC4KKyAqIG9sZGVzdCBvbmUsIHNvIHdlIG1pZ2h0IGFzIHdlbGwg a2VlcCBpdC4gWFhYCiAgKi8KIHZvaWQKIEludmFsaWRhdGVDYXRhbG9nU25hcHNob3RDb25k aXRpb25hbGx5KHZvaWQpCiB7CiAJaWYgKENhdGFsb2dTbmFwc2hvdERhdGEudmFsaWQgJiYK LQkJZGxpc3RfaGVhZF9ub2RlKCZWYWxpZFNuYXBzaG90cykgPT0gJkNhdGFsb2dTbmFwc2hv dERhdGEubm9kZSkKKwkJZGxpc3RfdGFpbF9ub2RlKCZWYWxpZFNuYXBzaG90cykgPT0gJkNh dGFsb2dTbmFwc2hvdERhdGEuc2hhcmVkLT5ub2RlICYmCisJCUNhdGFsb2dTbmFwc2hvdERh dGEuc2hhcmVkLT5yZWZjb3VudCA9PSAxKQogCQlJbnZhbGlkYXRlQ2F0YWxvZ1NuYXBzaG90 KCk7CiB9CiAKQEAgLTUwMSw3ICs1MTQsNyBAQCBTbmFwc2hvdFNldENvbW1hbmRJZChDb21t YW5kSWQgY3VyY2lkKQogICogaW4gR2V0VHJhbnNhY3Rpb25TbmFwc2hvdC4KICAqLwogc3Rh dGljIHZvaWQKLVNldFRyYW5zYWN0aW9uU25hcHNob3QoTVZDQ1NuYXBzaG90IHNvdXJjZXNu YXAsIFZpcnR1YWxUcmFuc2FjdGlvbklkICpzb3VyY2V2eGlkLAorU2V0VHJhbnNhY3Rpb25T bmFwc2hvdChNVkNDU25hcHNob3RTaGFyZWQgc291cmNlc25hcCwgVmlydHVhbFRyYW5zYWN0 aW9uSWQgKnNvdXJjZXZ4aWQsCiAJCQkJCSAgIGludCBzb3VyY2VwaWQsIFBHUFJPQyAqc291 cmNlcHJvYykKIHsKIAkvKiBDYWxsZXIgc2hvdWxkIGhhdmUgY2hlY2tlZCB0aGlzIGFscmVh ZHkgKi8KQEAgLTUxMiwzOCArNTI1LDI1IEBAIFNldFRyYW5zYWN0aW9uU25hcHNob3QoTVZD Q1NuYXBzaG90IHNvdXJjZXNuYXAsIFZpcnR1YWxUcmFuc2FjdGlvbklkICpzb3VyY2V2eGlk CiAKIAlBc3NlcnQoIUZpcnN0WGFjdFNuYXBzaG90UmVnaXN0ZXJlZCk7CiAJQXNzZXJ0KCFI aXN0b3JpY1NuYXBzaG90QWN0aXZlKCkpOworCUFzc2VydChzb3VyY2VzbmFwLT5yZWZjb3Vu dCA+IDApOwogCiAJLyoKIAkgKiBFdmVuIHRob3VnaCB3ZSBhcmUgbm90IGdvaW5nIHRvIHVz ZSB0aGUgc25hcHNob3QgaXQgY29tcHV0ZXMsIHdlIG11c3QKLQkgKiBjYWxsIEdldFNuYXBz aG90RGF0YSwgZm9yIHR3byByZWFzb25zOiAoMSkgdG8gYmUgc3VyZSB0aGF0Ci0JICogQ3Vy cmVudFNuYXBzaG90RGF0YSdzIFhJRCBhcnJheXMgaGF2ZSBiZWVuIGFsbG9jYXRlZCwgYW5k ICgyKSB0byB1cGRhdGUKLQkgKiB0aGUgc3RhdGUgZm9yIEdsb2JhbFZpcyouCisJICogY2Fs bCBHZXRNVkNDU25hcHNob3REYXRhIHRvIHVwZGF0ZSB0aGUgc3RhdGUgZm9yIEdsb2JhbFZp cyouCiAJICovCi0JR2V0U25hcHNob3REYXRhKCZDdXJyZW50U25hcHNob3REYXRhKTsKKwlV cGRhdGVTdGF0aWNNVkNDU25hcHNob3QoJkN1cnJlbnRTbmFwc2hvdERhdGEsIEdldE1WQ0NT bmFwc2hvdERhdGEoKSk7CiAKIAkvKgogCSAqIE5vdyBjb3B5IGFwcHJvcHJpYXRlIGZpZWxk cyBmcm9tIHRoZSBzb3VyY2Ugc25hcHNob3QuCiAJICovCi0JQ3VycmVudFNuYXBzaG90RGF0 YS54bWluID0gc291cmNlc25hcC0+eG1pbjsKLQlDdXJyZW50U25hcHNob3REYXRhLnhtYXgg PSBzb3VyY2VzbmFwLT54bWF4OwotCUN1cnJlbnRTbmFwc2hvdERhdGEueGNudCA9IHNvdXJj ZXNuYXAtPnhjbnQ7Ci0JQXNzZXJ0KHNvdXJjZXNuYXAtPnhjbnQgPD0gR2V0TWF4U25hcHNo b3RYaWRDb3VudCgpKTsKLQlpZiAoc291cmNlc25hcC0+eGNudCA+IDApCi0JCW1lbWNweShD dXJyZW50U25hcHNob3REYXRhLnhpcCwgc291cmNlc25hcC0+eGlwLAotCQkJICAgc291cmNl c25hcC0+eGNudCAqIHNpemVvZihUcmFuc2FjdGlvbklkKSk7Ci0JQ3VycmVudFNuYXBzaG90 RGF0YS5zdWJ4Y250ID0gc291cmNlc25hcC0+c3VieGNudDsKLQlBc3NlcnQoc291cmNlc25h cC0+c3VieGNudCA8PSBHZXRNYXhTbmFwc2hvdFN1YnhpZENvdW50KCkpOwotCWlmIChzb3Vy Y2VzbmFwLT5zdWJ4Y250ID4gMCkKLQkJbWVtY3B5KEN1cnJlbnRTbmFwc2hvdERhdGEuc3Vi eGlwLCBzb3VyY2VzbmFwLT5zdWJ4aXAsCi0JCQkgICBzb3VyY2VzbmFwLT5zdWJ4Y250ICog c2l6ZW9mKFRyYW5zYWN0aW9uSWQpKTsKLQlDdXJyZW50U25hcHNob3REYXRhLnN1Ym92ZXJm bG93ZWQgPSBzb3VyY2VzbmFwLT5zdWJvdmVyZmxvd2VkOwotCUN1cnJlbnRTbmFwc2hvdERh dGEudGFrZW5EdXJpbmdSZWNvdmVyeSA9IHNvdXJjZXNuYXAtPnRha2VuRHVyaW5nUmVjb3Zl cnk7Ci0JLyogTkI6IGN1cmNpZCBzaG91bGQgTk9UIGJlIGNvcGllZCwgaXQncyBhIGxvY2Fs IG1hdHRlciAqLworCVJlbGVhc2VNVkNDU25hcHNob3RTaGFyZWQoQ3VycmVudFNuYXBzaG90 RGF0YS5zaGFyZWQpOworCUN1cnJlbnRTbmFwc2hvdERhdGEuc2hhcmVkID0gc291cmNlc25h cDsKKwlDdXJyZW50U25hcHNob3REYXRhLnNoYXJlZC0+cmVmY291bnQrKzsKIAotCUN1cnJl bnRTbmFwc2hvdERhdGEuc25hcFhhY3RDb21wbGV0aW9uQ291bnQgPSAwOworCS8qIE5COiBj dXJjaWQgc2hvdWxkIE5PVCBiZSBjb3BpZWQsIGl0J3MgYSBsb2NhbCBtYXR0ZXIgKi8KIAog CS8qCi0JICogTm93IHdlIGhhdmUgdG8gZml4IHdoYXQgR2V0U25hcHNob3REYXRhIGRpZCB3 aXRoIE15UHJvYy0+eG1pbiBhbmQKKwkgKiBOb3cgd2UgaGF2ZSB0byBmaXggd2hhdCBHZXRN VkNDU25hcHNob3REYXRhIGRpZCB3aXRoIE15UHJvYy0+eG1pbiBhbmQKIAkgKiBUcmFuc2Fj dGlvblhtaW4uICBUaGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uOiB0byBtYWtlIHN1cmUgd2Ug YXJlIG5vdAogCSAqIGNhdXNpbmcgdGhlIGdsb2JhbCB4bWluIHRvIGdvIGJhY2t3YXJkcywg d2UgaGF2ZSB0byB0ZXN0IHRoYXQgdGhlCiAJICogc291cmNlIHRyYW5zYWN0aW9uIGlzIHN0 aWxsIHJ1bm5pbmcsIGFuZCB0aGF0IGhhcyB0byBiZSBkb25lCkBAIC01NTUsMTMgKzU1NSwx MyBAQCBTZXRUcmFuc2FjdGlvblNuYXBzaG90KE1WQ0NTbmFwc2hvdCBzb3VyY2VzbmFwLCBW aXJ0dWFsVHJhbnNhY3Rpb25JZCAqc291cmNldnhpZAogCSAqLwogCWlmIChzb3VyY2Vwcm9j ICE9IE5VTEwpCiAJewotCQlpZiAoIVByb2NBcnJheUluc3RhbGxSZXN0b3JlZFhtaW4oQ3Vy cmVudFNuYXBzaG90RGF0YS54bWluLCBzb3VyY2Vwcm9jKSkKKwkJaWYgKCFQcm9jQXJyYXlJ bnN0YWxsUmVzdG9yZWRYbWluKEN1cnJlbnRTbmFwc2hvdERhdGEuc2hhcmVkLT54bWluLCBz b3VyY2Vwcm9jKSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVf T0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAogCQkJCQkgZXJybXNnKCJjb3Vs ZCBub3QgaW1wb3J0IHRoZSByZXF1ZXN0ZWQgc25hcHNob3QiKSwKIAkJCQkJIGVycmRldGFp bCgiVGhlIHNvdXJjZSB0cmFuc2FjdGlvbiBpcyBub3QgcnVubmluZyBhbnltb3JlLiIpKSk7 CiAJfQotCWVsc2UgaWYgKCFQcm9jQXJyYXlJbnN0YWxsSW1wb3J0ZWRYbWluKEN1cnJlbnRT bmFwc2hvdERhdGEueG1pbiwgc291cmNldnhpZCkpCisJZWxzZSBpZiAoIVByb2NBcnJheUlu c3RhbGxJbXBvcnRlZFhtaW4oQ3VycmVudFNuYXBzaG90RGF0YS5zaGFyZWQtPnhtaW4sIHNv dXJjZXZ4aWQpKQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfT0JK RUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAogCQkJCSBlcnJtc2coImNvdWxkIG5v dCBpbXBvcnQgdGhlIHJlcXVlc3RlZCBzbmFwc2hvdCIpLApAQCAtNTc3LDk2ICs1NzcsMjIg QEAgU2V0VHJhbnNhY3Rpb25TbmFwc2hvdChNVkNDU25hcHNob3Qgc291cmNlc25hcCwgVmly dHVhbFRyYW5zYWN0aW9uSWQgKnNvdXJjZXZ4aWQKIAlpZiAoSXNvbGF0aW9uVXNlc1hhY3RT bmFwc2hvdCgpKQogCXsKIAkJaWYgKElzb2xhdGlvbklzU2VyaWFsaXphYmxlKCkpCi0JCQlT ZXRTZXJpYWxpemFibGVUcmFuc2FjdGlvblNuYXBzaG90KCZDdXJyZW50U25hcHNob3REYXRh LCBzb3VyY2V2eGlkLAotCQkJCQkJCQkJCQkgICBzb3VyY2VwaWQpOwotCQkvKiBNYXJrIGl0 IGFzICJyZWdpc3RlcmVkIiAqLworCQkJU2V0U2VyaWFsaXphYmxlVHJhbnNhY3Rpb25TbmFw c2hvdERhdGEoQ3VycmVudFNuYXBzaG90RGF0YS5zaGFyZWQsCisJCQkJCQkJCQkJCQkgICBz b3VyY2V2eGlkLCBzb3VyY2VwaWQpOworCQkvKiBrZWVwIGl0ICovCiAJCUZpcnN0WGFjdFNu YXBzaG90UmVnaXN0ZXJlZCA9IHRydWU7CiAJfQotCXZhbGlkX3NuYXBzaG90c19wdXNoX3Rh aWwoJkN1cnJlbnRTbmFwc2hvdERhdGEpOwogCiAJRmlyc3RTbmFwc2hvdFNldCA9IHRydWU7 CiB9CiAKLS8qCi0gKiBDb3B5TVZDQ1NuYXBzaG90Ci0gKgkJQ29weSB0aGUgZ2l2ZW4gc25h cHNob3QuCi0gKgotICogVGhlIGNvcHkgaXMgcGFsbG9jJ2QgaW4gVG9wVHJhbnNhY3Rpb25D b250ZXh0IGFuZCBoYXMgaW5pdGlhbCByZWZjb3VudHMgc2V0Ci0gKiB0byAwLiAgVGhlIHJl dHVybmVkIHNuYXBzaG90IGhhcyB0aGUgY29waWVkIGZsYWcgc2V0LgotICovCi1zdGF0aWMg TVZDQ1NuYXBzaG90Ci1Db3B5TVZDQ1NuYXBzaG90KE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCkK LXsKLQlNVkNDU25hcHNob3QgbmV3c25hcDsKLQlTaXplCQlzdWJ4aXBvZmY7Ci0JU2l6ZQkJ c2l6ZTsKLQotCS8qIFdlIGFsbG9jYXRlIGFueSBYSUQgYXJyYXlzIG5lZWRlZCBpbiB0aGUg c2FtZSBwYWxsb2MgYmxvY2suICovCi0Jc2l6ZSA9IHN1YnhpcG9mZiA9IHNpemVvZihNVkND U25hcHNob3REYXRhKSArCi0JCXNuYXBzaG90LT54Y250ICogc2l6ZW9mKFRyYW5zYWN0aW9u SWQpOwotCWlmIChzbmFwc2hvdC0+c3VieGNudCA+IDApCi0JCXNpemUgKz0gc25hcHNob3Qt PnN1YnhjbnQgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCk7Ci0KLQluZXdzbmFwID0gKE1WQ0NT bmFwc2hvdCkgTWVtb3J5Q29udGV4dEFsbG9jKFRvcFRyYW5zYWN0aW9uQ29udGV4dCwgc2l6 ZSk7Ci0JbWVtY3B5KG5ld3NuYXAsIHNuYXBzaG90LCBzaXplb2YoTVZDQ1NuYXBzaG90RGF0 YSkpOwotCi0JbmV3c25hcC0+cmVnZF9jb3VudCA9IDA7Ci0JbmV3c25hcC0+YWN0aXZlX2Nv dW50ID0gMDsKLQluZXdzbmFwLT5jb3BpZWQgPSB0cnVlOwotCW5ld3NuYXAtPnZhbGlkID0g dHJ1ZTsKLQluZXdzbmFwLT5zbmFwWGFjdENvbXBsZXRpb25Db3VudCA9IDA7Ci0KLQkvKiBz ZXR1cCBYSUQgYXJyYXkgKi8KLQlpZiAoc25hcHNob3QtPnhjbnQgPiAwKQotCXsKLQkJbmV3 c25hcC0+eGlwID0gKFRyYW5zYWN0aW9uSWQgKikgKG5ld3NuYXAgKyAxKTsKLQkJbWVtY3B5 KG5ld3NuYXAtPnhpcCwgc25hcHNob3QtPnhpcCwKLQkJCSAgIHNuYXBzaG90LT54Y250ICog c2l6ZW9mKFRyYW5zYWN0aW9uSWQpKTsKLQl9Ci0JZWxzZQotCQluZXdzbmFwLT54aXAgPSBO VUxMOwotCi0JLyoKLQkgKiBTZXR1cCBzdWJYSUQgYXJyYXkuIERvbid0IGJvdGhlciB0byBj b3B5IGl0IGlmIGl0IGhhZCBvdmVyZmxvd2VkLAotCSAqIHRob3VnaCwgYmVjYXVzZSBpdCdz IG5vdCB1c2VkIGFueXdoZXJlIGluIHRoYXQgY2FzZS4gRXhjZXB0IGlmIGl0J3MgYQotCSAq IHNuYXBzaG90IHRha2VuIGR1cmluZyByZWNvdmVyeTsgYWxsIHRoZSB0b3AtbGV2ZWwgWElE cyBhcmUgaW4gc3VieGlwIGFzCi0JICogd2VsbCBpbiB0aGF0IGNhc2UsIHNvIHdlIG11c3Ru J3QgbG9zZSB0aGVtLgotCSAqLwotCWlmIChzbmFwc2hvdC0+c3VieGNudCA+IDAgJiYKLQkJ KCFzbmFwc2hvdC0+c3Vib3ZlcmZsb3dlZCB8fCBzbmFwc2hvdC0+dGFrZW5EdXJpbmdSZWNv dmVyeSkpCi0JewotCQluZXdzbmFwLT5zdWJ4aXAgPSAoVHJhbnNhY3Rpb25JZCAqKSAoKGNo YXIgKikgbmV3c25hcCArIHN1YnhpcG9mZik7Ci0JCW1lbWNweShuZXdzbmFwLT5zdWJ4aXAs IHNuYXBzaG90LT5zdWJ4aXAsCi0JCQkgICBzbmFwc2hvdC0+c3VieGNudCAqIHNpemVvZihU cmFuc2FjdGlvbklkKSk7Ci0JfQotCWVsc2UKLQkJbmV3c25hcC0+c3VieGlwID0gTlVMTDsK LQotCXJldHVybiBuZXdzbmFwOwotfQotCi0vKgotICogRnJlZU1WQ0NTbmFwc2hvdAotICoJ CUZyZWUgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSBzbmFwc2hvdC4KLSAqLwotc3Rh dGljIHZvaWQKLUZyZWVNVkNDU25hcHNob3QoTVZDQ1NuYXBzaG90IHNuYXBzaG90KQotewot CUFzc2VydChzbmFwc2hvdC0+cmVnZF9jb3VudCA9PSAwKTsKLQlBc3NlcnQoc25hcHNob3Qt PmFjdGl2ZV9jb3VudCA9PSAwKTsKLQlBc3NlcnQoc25hcHNob3QtPmNvcGllZCk7Ci0JQXNz ZXJ0KHNuYXBzaG90LT52YWxpZCk7Ci0KLQlwZnJlZShzbmFwc2hvdCk7Ci19Ci0KIC8qCiAg KiBQdXNoQWN0aXZlU25hcHNob3QKICAqCQlTZXQgdGhlIGdpdmVuIHNuYXBzaG90IGFzIHRo ZSBjdXJyZW50IGFjdGl2ZSBzbmFwc2hvdAogICoKICAqIElmIHRoZSBwYXNzZWQgc25hcHNo b3QgaXMgYSBzdGF0aWNhbGx5LWFsbG9jYXRlZCBvbmUsIG9yIGl0IGlzIHBvc3NpYmx5CiAg KiBzdWJqZWN0IHRvIGEgZnV0dXJlIGNvbW1hbmQgY291bnRlciB1cGRhdGUsIGNyZWF0ZSBh IG5ldyBsb25nLWxpdmVkIGNvcHkKLSAqIHdpdGggYWN0aXZlIHJlZmNvdW50PTEuICBPdGhl cndpc2UsIG9ubHkgaW5jcmVtZW50IHRoZSByZWZjb3VudC4KKyAqIHdpdGggYWN0aXZlIHJl ZmNvdW50PTEuICBPdGhlcndpc2UsIG9ubHkgaW5jcmVtZW50IHRoZSByZWZjb3VudC4gWFhY CiAgKgogICogT25seSByZWd1bGFyIE1WQ0Mgc25hcGhvdHMgY2FuIGJlIHVzZWQgYXMgdGhl IGFjdGl2ZSBzbmFwc2hvdC4KICAqLwpAQCAtNjk3LDI0ICs2MjMsMTMgQEAgUHVzaEFjdGl2 ZVNuYXBzaG90V2l0aExldmVsKFNuYXBzaG90IHNuYXBzaG90LCBpbnQgc25hcF9sZXZlbCkK IAlBc3NlcnQoQWN0aXZlU25hcHNob3QgPT0gTlVMTCB8fCBzbmFwX2xldmVsID49IEFjdGl2 ZVNuYXBzaG90LT5hc19sZXZlbCk7CiAKIAluZXdhY3RpdmUgPSBNZW1vcnlDb250ZXh0QWxs b2MoVG9wVHJhbnNhY3Rpb25Db250ZXh0LCBzaXplb2YoQWN0aXZlU25hcHNob3RFbHQpKTsK LQotCS8qCi0JICogQ2hlY2tpbmcgU2Vjb25kYXJ5U25hcHNob3QgaXMgcHJvYmFibHkgdXNl bGVzcyBoZXJlLCBidXQgaXQgc2VlbXMKLQkgKiBiZXR0ZXIgdG8gYmUgc3VyZS4KLQkgKi8K LQlpZiAoIW9yaWdzbmFwLT5jb3BpZWQpCi0JewotCQluZXdhY3RpdmUtPmFzX3NuYXAgPSBD b3B5TVZDQ1NuYXBzaG90KG9yaWdzbmFwKTsKLQkJZGxpc3RfaW5zZXJ0X2FmdGVyKCZvcmln c25hcC0+bm9kZSwgJm5ld2FjdGl2ZS0+YXNfc25hcC0+bm9kZSk7Ci0JfQotCWVsc2UKLQkJ bmV3YWN0aXZlLT5hc19zbmFwID0gb3JpZ3NuYXA7CisJbWVtY3B5KCZuZXdhY3RpdmUtPmFz X3NuYXAsIG9yaWdzbmFwLCBzaXplb2YoTVZDQ1NuYXBzaG90RGF0YSkpOworCW5ld2FjdGl2 ZS0+YXNfc25hcC5raW5kID0gU05BUFNIT1RfQUNUSVZFOworCW5ld2FjdGl2ZS0+YXNfc25h cC5zaGFyZWQtPnJlZmNvdW50Kys7CiAKIAluZXdhY3RpdmUtPmFzX25leHQgPSBBY3RpdmVT bmFwc2hvdDsKIAluZXdhY3RpdmUtPmFzX2xldmVsID0gc25hcF9sZXZlbDsKIAotCW5ld2Fj dGl2ZS0+YXNfc25hcC0+YWN0aXZlX2NvdW50Kys7Ci0KIAlBY3RpdmVTbmFwc2hvdCA9IG5l d2FjdGl2ZTsKIH0KIApAQCAtNzI5LDIwICs2NDQsMjAgQEAgUHVzaEFjdGl2ZVNuYXBzaG90 V2l0aExldmVsKFNuYXBzaG90IHNuYXBzaG90LCBpbnQgc25hcF9sZXZlbCkKIHZvaWQKIFB1 c2hDb3BpZWRTbmFwc2hvdChTbmFwc2hvdCBzbmFwc2hvdCkKIHsKLQlNVkNDU25hcHNob3Qg Y29weTsKLQogCUFzc2VydChzbmFwc2hvdC0+c25hcHNob3RfdHlwZSA9PSBTTkFQU0hPVF9N VkNDKTsKIAotCWNvcHkgPSBDb3B5TVZDQ1NuYXBzaG90KCZzbmFwc2hvdC0+bXZjYyk7Ci0J ZGxpc3RfaW5zZXJ0X2FmdGVyKCZzbmFwc2hvdC0+bXZjYy5ub2RlLCAmY29weS0+bm9kZSk7 Ci0JUHVzaEFjdGl2ZVNuYXBzaG90KChTbmFwc2hvdCkgY29weSk7CisJLyoKKwkgKiBUaGlz IHVzZWQgdG8gYmUgZGlmZmVyZW50IGZyb20gUHVzaEFjdGl2ZVNuYXBzaG90LCBidXQgdGhl c2UgZGF5cworCSAqIFB1c2hBY3RpdmVTbmFwc2hvdCBjcmVhdGVzIGEgY29weSB0b28gYW5k IHRoZXJlJ3Mgbm8gZGlmZmVyZW5jZS4KKwkgKi8KKwlQdXNoQWN0aXZlU25hcHNob3Qoc25h cHNob3QpOwogfQogCiAvKgogICogVXBkYXRlQWN0aXZlU25hcHNob3RDb21tYW5kSWQKICAq CiAgKiBVcGRhdGUgdGhlIGN1cnJlbnQgQ0lEIG9mIHRoZSBhY3RpdmUgc25hcHNob3QuICBU aGlzIGNhbiBvbmx5IGJlIGFwcGxpZWQKLSAqIHRvIGEgc25hcHNob3QgdGhhdCBpcyBub3Qg cmVmZXJlbmNlZCBlbHNld2hlcmUuCisgKiB0byBhIHNuYXBzaG90IHRoYXQgaXMgbm90IHJl ZmVyZW5jZWQgZWxzZXdoZXJlLiBYWFgKICAqLwogdm9pZAogVXBkYXRlQWN0aXZlU25hcHNo b3RDb21tYW5kSWQodm9pZCkKQEAgLTc1MSw4ICs2NjYsNiBAQCBVcGRhdGVBY3RpdmVTbmFw c2hvdENvbW1hbmRJZCh2b2lkKQogCQkJCWN1cmNpZDsKIAogCUFzc2VydChBY3RpdmVTbmFw c2hvdCAhPSBOVUxMKTsKLQlBc3NlcnQoQWN0aXZlU25hcHNob3QtPmFzX3NuYXAtPmFjdGl2 ZV9jb3VudCA9PSAxKTsKLQlBc3NlcnQoQWN0aXZlU25hcHNob3QtPmFzX3NuYXAtPnJlZ2Rf Y291bnQgPT0gMCk7CiAKIAkvKgogCSAqIERvbid0IGFsbG93IG1vZGlmaWNhdGlvbiBvZiB0 aGUgYWN0aXZlIHNuYXBzaG90IGR1cmluZyBwYXJhbGxlbApAQCAtNzYyLDExICs2NzUsMTIg QEAgVXBkYXRlQWN0aXZlU25hcHNob3RDb21tYW5kSWQodm9pZCkKIAkgKiBDb21tYW5kQ291 bnRlckluY3JlbWVudCwgYnV0IHRoZXJlIGFyZSBhIGZldyBwbGFjZXMgdGhhdCBjYWxsIHRo aXMKIAkgKiBkaXJlY3RseSwgc28gd2UgcHV0IGFuIGFkZGl0aW9uYWwgZ3VhcmQgaGVyZS4K IAkgKi8KLQlzYXZlX2N1cmNpZCA9IEFjdGl2ZVNuYXBzaG90LT5hc19zbmFwLT5jdXJjaWQ7 CisJc2F2ZV9jdXJjaWQgPSBBY3RpdmVTbmFwc2hvdC0+YXNfc25hcC5jdXJjaWQ7CiAJY3Vy Y2lkID0gR2V0Q3VycmVudENvbW1hbmRJZChmYWxzZSk7CiAJaWYgKElzSW5QYXJhbGxlbE1v ZGUoKSAmJiBzYXZlX2N1cmNpZCAhPSBjdXJjaWQpCiAJCWVsb2coRVJST1IsICJjYW5ub3Qg bW9kaWZ5IGNvbW1hbmRpZCBpbiBhY3RpdmUgc25hcHNob3QgZHVyaW5nIGEgcGFyYWxsZWwg b3BlcmF0aW9uIik7Ci0JQWN0aXZlU25hcHNob3QtPmFzX3NuYXAtPmN1cmNpZCA9IGN1cmNp ZDsKKworCUFjdGl2ZVNuYXBzaG90LT5hc19zbmFwLmN1cmNpZCA9IGN1cmNpZDsKIH0KIAog LyoKQEAgLTc4MiwxNiArNjk2LDcgQEAgUG9wQWN0aXZlU25hcHNob3Qodm9pZCkKIAogCW5l d3N0YWNrID0gQWN0aXZlU25hcHNob3QtPmFzX25leHQ7CiAKLQlBc3NlcnQoQWN0aXZlU25h cHNob3QtPmFzX3NuYXAtPmFjdGl2ZV9jb3VudCA+IDApOwotCi0JQWN0aXZlU25hcHNob3Qt PmFzX3NuYXAtPmFjdGl2ZV9jb3VudC0tOwotCi0JaWYgKEFjdGl2ZVNuYXBzaG90LT5hc19z bmFwLT5hY3RpdmVfY291bnQgPT0gMCAmJgotCQlBY3RpdmVTbmFwc2hvdC0+YXNfc25hcC0+ cmVnZF9jb3VudCA9PSAwKQotCXsKLQkJZGxpc3RfZGVsZXRlKCZBY3RpdmVTbmFwc2hvdC0+ YXNfc25hcC0+bm9kZSk7Ci0JCUZyZWVNVkNDU25hcHNob3QoQWN0aXZlU25hcHNob3QtPmFz X3NuYXApOwotCX0KKwlSZWxlYXNlTVZDQ1NuYXBzaG90U2hhcmVkKEFjdGl2ZVNuYXBzaG90 LT5hc19zbmFwLnNoYXJlZCk7CiAKIAlwZnJlZShBY3RpdmVTbmFwc2hvdCk7CiAJQWN0aXZl U25hcHNob3QgPSBuZXdzdGFjazsKQEAgLTgwOCw3ICs3MTMsNyBAQCBHZXRBY3RpdmVTbmFw c2hvdCh2b2lkKQogewogCUFzc2VydChBY3RpdmVTbmFwc2hvdCAhPSBOVUxMKTsKIAotCXJl dHVybiAoU25hcHNob3QpIEFjdGl2ZVNuYXBzaG90LT5hc19zbmFwOworCXJldHVybiAoU25h cHNob3QpICZBY3RpdmVTbmFwc2hvdC0+YXNfc25hcDsKIH0KIAogLyoKQEAgLTg0NCw3ICs3 NDksNyBAQCBSZWdpc3RlclNuYXBzaG90KFNuYXBzaG90IHNuYXBzaG90KQogU25hcHNob3QK IFJlZ2lzdGVyU25hcHNob3RPbk93bmVyKFNuYXBzaG90IG9yaWdfc25hcHNob3QsIFJlc291 cmNlT3duZXIgb3duZXIpCiB7Ci0JTVZDQ1NuYXBzaG90IHNuYXBzaG90OworCU1WQ0NTbmFw c2hvdCBuZXdzbmFwOwogCiAJaWYgKG9yaWdfc25hcHNob3QgPT0gSW52YWxpZFNuYXBzaG90 KQogCQlyZXR1cm4gSW52YWxpZFNuYXBzaG90OwpAQCAtODYxLDIyICs3NjYsMTkgQEAgUmVn aXN0ZXJTbmFwc2hvdE9uT3duZXIoU25hcHNob3Qgb3JpZ19zbmFwc2hvdCwgUmVzb3VyY2VP d25lciBvd25lcikKIAl9CiAKIAlBc3NlcnQob3JpZ19zbmFwc2hvdC0+c25hcHNob3RfdHlw ZSA9PSBTTkFQU0hPVF9NVkNDKTsKLQlzbmFwc2hvdCA9ICZvcmlnX3NuYXBzaG90LT5tdmNj OwotCUFzc2VydChzbmFwc2hvdC0+dmFsaWQpOworCUFzc2VydChvcmlnX3NuYXBzaG90LT5t dmNjLnZhbGlkKTsKIAotCS8qIFN0YXRpYyBzbmFwc2hvdD8gIENyZWF0ZSBhIHBlcnNpc3Rl bnQgY29weSAqLwotCWlmICghc25hcHNob3QtPmNvcGllZCkKLQl7Ci0JCXNuYXBzaG90ID0g Q29weU1WQ0NTbmFwc2hvdChzbmFwc2hvdCk7Ci0JCWRsaXN0X2luc2VydF9hZnRlcigmb3Jp Z19zbmFwc2hvdC0+bXZjYy5ub2RlLCAmc25hcHNob3QtPm5vZGUpOwotCX0KKwkvKiBDcmVh dGUgYSBjb3B5ICovCisJbmV3c25hcCA9IE1lbW9yeUNvbnRleHRBbGxvYyhUb3BUcmFuc2Fj dGlvbkNvbnRleHQsIHNpemVvZihNVkNDU25hcHNob3REYXRhKSk7CisJbWVtY3B5KG5ld3Nu YXAsICZvcmlnX3NuYXBzaG90LT5tdmNjLCBzaXplb2YoTVZDQ1NuYXBzaG90RGF0YSkpOwor CW5ld3NuYXAtPmtpbmQgPSBTTkFQU0hPVF9SRUdJU1RFUkVEOworCW5ld3NuYXAtPnNoYXJl ZC0+cmVmY291bnQrKzsKIAogCS8qIGFuZCB0ZWxsIHJlc293bmVyLmMgYWJvdXQgaXQgKi8K IAlSZXNvdXJjZU93bmVyRW5sYXJnZShvd25lcik7Ci0Jc25hcHNob3QtPnJlZ2RfY291bnQr KzsKLQlSZXNvdXJjZU93bmVyUmVtZW1iZXJTbmFwc2hvdChvd25lciwgKFNuYXBzaG90KSBz bmFwc2hvdCk7CisJUmVzb3VyY2VPd25lclJlbWVtYmVyU25hcHNob3Qob3duZXIsIChTbmFw c2hvdCkgbmV3c25hcCk7CiAKLQlyZXR1cm4gKFNuYXBzaG90KSBzbmFwc2hvdDsKKwlyZXR1 cm4gKFNuYXBzaG90KSBuZXdzbmFwOwogfQogCiAvKgpAQCAtOTE0LDE4ICs4MTYsMTIgQEAg VW5yZWdpc3RlclNuYXBzaG90Tm9Pd25lcihTbmFwc2hvdCBzbmFwc2hvdCkKIHsKIAlpZiAo c25hcHNob3QtPnNuYXBzaG90X3R5cGUgPT0gU05BUFNIT1RfTVZDQykKIAl7Ci0JCU1WQ0NT bmFwc2hvdCBtdmNjc25hcCA9ICZzbmFwc2hvdC0+bXZjYzsKLQotCQlBc3NlcnQobXZjY3Nu YXAtPnJlZ2RfY291bnQgPiAwKTsKKwkJQXNzZXJ0KHNuYXBzaG90LT5tdmNjLmtpbmQgPT0g U05BUFNIT1RfUkVHSVNURVJFRCk7CiAJCUFzc2VydCghZGxpc3RfaXNfZW1wdHkoJlZhbGlk U25hcHNob3RzKSk7CiAKLQkJbXZjY3NuYXAtPnJlZ2RfY291bnQtLTsKLQkJaWYgKG12Y2Nz bmFwLT5yZWdkX2NvdW50ID09IDAgJiYgbXZjY3NuYXAtPmFjdGl2ZV9jb3VudCA9PSAwKQot CQl7Ci0JCQlkbGlzdF9kZWxldGUoJm12Y2NzbmFwLT5ub2RlKTsKLQkJCUZyZWVNVkNDU25h cHNob3QobXZjY3NuYXApOwotCQkJU25hcHNob3RSZXNldFhtaW4oKTsKLQkJfQorCQlSZWxl YXNlTVZDQ1NuYXBzaG90U2hhcmVkKHNuYXBzaG90LT5tdmNjLnNoYXJlZCk7CisJCXBmcmVl KHNuYXBzaG90KTsKKwkJU25hcHNob3RSZXNldFhtaW4oKTsKIAl9CiAJZWxzZSBpZiAoc25h cHNob3QtPnNuYXBzaG90X3R5cGUgPT0gU05BUFNIT1RfSElTVE9SSUNfTVZDQykKIAl7CkBA IC05NjMsMTkgKzg1OSwyMSBAQCBVbnJlZ2lzdGVyU25hcHNob3ROb093bmVyKFNuYXBzaG90 IHNuYXBzaG90KQogc3RhdGljIHZvaWQKIFNuYXBzaG90UmVzZXRYbWluKHZvaWQpCiB7Ci0J TVZDQ1NuYXBzaG90IG1pblNuYXBzaG90OworCU1WQ0NTbmFwc2hvdFNoYXJlZCBtaW5TbmFw c2hvdDsKIAogCS8qCiAJICogSW52YWxpZGF0ZSB0aGVzZSBzdGF0aWMgc25hcHNob3RzIHNv IHRoYXQgd2UgY2FuIGFkdmFuY2UgeG1pbi4KIAkgKi8KIAlpZiAoIUZpcnN0WGFjdFNuYXBz aG90UmVnaXN0ZXJlZCAmJiBDdXJyZW50U25hcHNob3REYXRhLnZhbGlkKQogCXsKLQkJZGxp c3RfZGVsZXRlKCZDdXJyZW50U25hcHNob3REYXRhLm5vZGUpOworCQlSZWxlYXNlTVZDQ1Nu YXBzaG90U2hhcmVkKEN1cnJlbnRTbmFwc2hvdERhdGEuc2hhcmVkKTsKKwkJQ3VycmVudFNu YXBzaG90RGF0YS5zaGFyZWQgPSBOVUxMOwogCQlDdXJyZW50U25hcHNob3REYXRhLnZhbGlk ID0gZmFsc2U7CiAJfQogCWlmIChTZWNvbmRhcnlTbmFwc2hvdERhdGEudmFsaWQpCiAJewot CQlkbGlzdF9kZWxldGUoJlNlY29uZGFyeVNuYXBzaG90RGF0YS5ub2RlKTsKKwkJUmVsZWFz ZU1WQ0NTbmFwc2hvdFNoYXJlZChTZWNvbmRhcnlTbmFwc2hvdERhdGEuc2hhcmVkKTsKKwkJ U2Vjb25kYXJ5U25hcHNob3REYXRhLnNoYXJlZCA9IE5VTEw7CiAJCVNlY29uZGFyeVNuYXBz aG90RGF0YS52YWxpZCA9IGZhbHNlOwogCX0KIApAQCAtOTg4LDcgKzg4Niw3IEBAIFNuYXBz aG90UmVzZXRYbWluKHZvaWQpCiAJCXJldHVybjsKIAl9CiAKLQltaW5TbmFwc2hvdCA9IGRs aXN0X2hlYWRfZWxlbWVudChNVkNDU25hcHNob3REYXRhLCBub2RlLCAmVmFsaWRTbmFwc2hv dHMpOworCW1pblNuYXBzaG90ID0gZGxpc3RfaGVhZF9lbGVtZW50KE1WQ0NTbmFwc2hvdFNo YXJlZERhdGEsIG5vZGUsICZWYWxpZFNuYXBzaG90cyk7CiAKIAlpZiAoVHJhbnNhY3Rpb25J ZFByZWNlZGVzKE15UHJvYy0+eG1pbiwgbWluU25hcHNob3QtPnhtaW4pKQogCQlNeVByb2Mt PnhtaW4gPSBUcmFuc2FjdGlvblhtaW4gPSBtaW5TbmFwc2hvdC0+eG1pbjsKQEAgLTEwMjgs MjEgKzkyNiw3IEBAIEF0U3ViQWJvcnRfU25hcHNob3QoaW50IGxldmVsKQogCiAJCW5leHQg PSBBY3RpdmVTbmFwc2hvdC0+YXNfbmV4dDsKIAotCQkvKgotCQkgKiBEZWNyZW1lbnQgdGhl IHNuYXBzaG90J3MgYWN0aXZlIGNvdW50LiAgSWYgaXQncyBzdGlsbCByZWdpc3RlcmVkIG9y Ci0JCSAqIG1hcmtlZCBhcyBhY3RpdmUgYnkgYW4gb3V0ZXIgc3VidHJhbnNhY3Rpb24sIHdl IGNhbid0IGZyZWUgaXQgeWV0LgotCQkgKi8KLQkJQXNzZXJ0KEFjdGl2ZVNuYXBzaG90LT5h c19zbmFwLT5hY3RpdmVfY291bnQgPj0gMSk7Ci0JCUFjdGl2ZVNuYXBzaG90LT5hc19zbmFw LT5hY3RpdmVfY291bnQgLT0gMTsKLQotCQlpZiAoQWN0aXZlU25hcHNob3QtPmFzX3NuYXAt PmFjdGl2ZV9jb3VudCA9PSAwICYmCi0JCQlBY3RpdmVTbmFwc2hvdC0+YXNfc25hcC0+cmVn ZF9jb3VudCA9PSAwKQotCQl7Ci0JCQlkbGlzdF9kZWxldGUoJkFjdGl2ZVNuYXBzaG90LT5h c19zbmFwLT5ub2RlKTsKLQkJCUZyZWVNVkNDU25hcHNob3QoQWN0aXZlU25hcHNob3QtPmFz X3NuYXApOwotCQl9Ci0KLQkJLyogYW5kIGZyZWUgdGhlIHN0YWNrIGVsZW1lbnQgKi8KKwkJ UmVsZWFzZU1WQ0NTbmFwc2hvdFNoYXJlZChBY3RpdmVTbmFwc2hvdC0+YXNfc25hcC5zaGFy ZWQpOwogCQlwZnJlZShBY3RpdmVTbmFwc2hvdCk7CiAKIAkJQWN0aXZlU25hcHNob3QgPSBu ZXh0OwpAQCAtMTA1OCw2ICs5NDIsOCBAQCBBdFN1YkFib3J0X1NuYXBzaG90KGludCBsZXZl bCkKIHZvaWQKIEF0RU9YYWN0X1NuYXBzaG90KGJvb2wgaXNDb21taXQsIGJvb2wgcmVzZXRY bWluKQogeworCWRsaXN0X211dGFibGVfaXRlciBpdGVyOworCiAJLyoKIAkgKiBJZiB3ZSBl eHBvcnRlZCBhbnkgc25hcHNob3RzLCBjbGVhbiB0aGVtIHVwLgogCSAqLwpAQCAtMTA4NCw3 ICs5NzAsNyBAQCBBdEVPWGFjdF9TbmFwc2hvdChib29sIGlzQ29tbWl0LCBib29sIHJlc2V0 WG1pbikKIAkJCQllbG9nKFdBUk5JTkcsICJjb3VsZCBub3QgdW5saW5rIGZpbGUgXCIlc1wi OiAlbSIsCiAJCQkJCSBlc25hcC0+c25hcGZpbGUpOwogCi0JCQlkbGlzdF9kZWxldGUoJmVz bmFwLT5zbmFwc2hvdC0+bm9kZSk7CisJCQlSZWxlYXNlTVZDQ1NuYXBzaG90U2hhcmVkKGVz bmFwLT5zbmFwc2hvdCk7CiAJCX0KIAogCQlleHBvcnRlZFNuYXBzaG90cyA9IE5JTDsKQEAg LTEwOTMsMTcgKzk3OSwyMCBAQCBBdEVPWGFjdF9TbmFwc2hvdChib29sIGlzQ29tbWl0LCBi b29sIHJlc2V0WG1pbikKIAkvKiBEcm9wIGFsbCBzdGF0aWMgc25hcHNob3QgKi8KIAlpZiAo Q2F0YWxvZ1NuYXBzaG90RGF0YS52YWxpZCkKIAl7Ci0JCWRsaXN0X2RlbGV0ZSgmQ2F0YWxv Z1NuYXBzaG90RGF0YS5ub2RlKTsKKwkJUmVsZWFzZU1WQ0NTbmFwc2hvdFNoYXJlZChDYXRh bG9nU25hcHNob3REYXRhLnNoYXJlZCk7CisJCUNhdGFsb2dTbmFwc2hvdERhdGEuc2hhcmVk ID0gTlVMTDsKIAkJQ2F0YWxvZ1NuYXBzaG90RGF0YS52YWxpZCA9IGZhbHNlOwogCX0KIAlp ZiAoQ3VycmVudFNuYXBzaG90RGF0YS52YWxpZCkKIAl7Ci0JCWRsaXN0X2RlbGV0ZSgmQ3Vy cmVudFNuYXBzaG90RGF0YS5ub2RlKTsKKwkJUmVsZWFzZU1WQ0NTbmFwc2hvdFNoYXJlZChD dXJyZW50U25hcHNob3REYXRhLnNoYXJlZCk7CisJCUN1cnJlbnRTbmFwc2hvdERhdGEuc2hh cmVkID0gTlVMTDsKIAkJQ3VycmVudFNuYXBzaG90RGF0YS52YWxpZCA9IGZhbHNlOwogCX0K IAlpZiAoU2Vjb25kYXJ5U25hcHNob3REYXRhLnZhbGlkKQogCXsKLQkJZGxpc3RfZGVsZXRl KCZTZWNvbmRhcnlTbmFwc2hvdERhdGEubm9kZSk7CisJCVJlbGVhc2VNVkNDU25hcHNob3RT aGFyZWQoU2Vjb25kYXJ5U25hcHNob3REYXRhLnNoYXJlZCk7CisJCVNlY29uZGFyeVNuYXBz aG90RGF0YS5zaGFyZWQgPSBOVUxMOwogCQlTZWNvbmRhcnlTbmFwc2hvdERhdGEudmFsaWQg PSBmYWxzZTsKIAl9CiAKQEAgLTExMjQsMTEgKzEwMTMsMjMgQEAgQXRFT1hhY3RfU25hcHNo b3QoYm9vbCBpc0NvbW1pdCwgYm9vbCByZXNldFhtaW4pCiAJICogQW5kIHJlc2V0IG91ciBz dGF0ZS4gIFdlIGRvbid0IG5lZWQgdG8gZnJlZSB0aGUgbWVtb3J5IGV4cGxpY2l0bHkgLS0K IAkgKiBpdCdsbCBnbyBhd2F5IHdpdGggVG9wVHJhbnNhY3Rpb25Db250ZXh0LgogCSAqLwot CUFjdGl2ZVNuYXBzaG90ID0gTlVMTDsKLQlkbGlzdF9pbml0KCZWYWxpZFNuYXBzaG90cyk7 CisJZGxpc3RfZm9yZWFjaF9tb2RpZnkoaXRlciwgJlZhbGlkU25hcHNob3RzKQorCXsKKwkJ TVZDQ1NuYXBzaG90U2hhcmVkIGN1ciA9IGRsaXN0X2NvbnRhaW5lcihNVkNDU25hcHNob3RT aGFyZWREYXRhLCBub2RlLCBpdGVyLmN1cik7CiAKLQlDdXJyZW50U25hcHNob3REYXRhLnZh bGlkID0gZmFsc2U7Ci0JU2Vjb25kYXJ5U25hcHNob3REYXRhLnZhbGlkID0gZmFsc2U7CisJ CWRsaXN0X2RlbGV0ZShpdGVyLmN1cik7CisJCWN1ci0+cmVmY291bnQgPSAwOworCQlpZiAo Y3VyID09IGxhdGVzdFNuYXBzaG90U2hhcmVkKQorCQl7CisJCQkvKiBrZWVwIGl0ICovCisJ CX0KKwkJZWxzZSBpZiAoc3BhcmVTbmFwc2hvdFNoYXJlZCA9PSBOVUxMKQorCQkJc3BhcmVT bmFwc2hvdFNoYXJlZCA9IGN1cjsKKwkJZWxzZQorCQkJcGZyZWUoY3VyKTsKKwl9CisKKwlB Y3RpdmVTbmFwc2hvdCA9IE5VTEw7CiAJRmlyc3RTbmFwc2hvdFNldCA9IGZhbHNlOwogCUZp cnN0WGFjdFNuYXBzaG90UmVnaXN0ZXJlZCA9IGZhbHNlOwogCkBAIC0xMTUxLDkgKzEwNTIs OCBAQCBBdEVPWGFjdF9TbmFwc2hvdChib29sIGlzQ29tbWl0LCBib29sIHJlc2V0WG1pbikK ICAqCQlzbmFwc2hvdC4KICAqLwogY2hhciAqCi1FeHBvcnRTbmFwc2hvdChNVkNDU25hcHNo b3Qgc25hcHNob3QpCitFeHBvcnRTbmFwc2hvdChNVkNDU25hcHNob3RTaGFyZWQgc25hcHNo b3QpCiB7Ci0JTVZDQ1NuYXBzaG90IG9yaWdfc25hcHNob3Q7CiAJVHJhbnNhY3Rpb25JZCB0 b3BYaWQ7CiAJVHJhbnNhY3Rpb25JZCAqY2hpbGRyZW47CiAJRXhwb3J0ZWRTbmFwc2hvdCAq ZXNuYXA7CkBAIC0xMjE0LDIxICsxMTE0LDE2IEBAIEV4cG9ydFNuYXBzaG90KE1WQ0NTbmFw c2hvdCBzbmFwc2hvdCkKIAkgKiBDb3B5IHRoZSBzbmFwc2hvdCBpbnRvIFRvcFRyYW5zYWN0 aW9uQ29udGV4dCwgYWRkIGl0IHRvIHRoZQogCSAqIGV4cG9ydGVkU25hcHNob3RzIGxpc3Qs IGFuZCBtYXJrIGl0IHBzZXVkby1yZWdpc3RlcmVkLiAgV2UgZG8gdGhpcyB0bwogCSAqIGVu c3VyZSB0aGF0IHRoZSBzbmFwc2hvdCdzIHhtaW4gaXMgaG9ub3JlZCBmb3IgdGhlIHJlc3Qg b2YgdGhlCi0JICogdHJhbnNhY3Rpb24uCisJICogdHJhbnNhY3Rpb24uIFhYWAogCSAqLwot CW9yaWdfc25hcHNob3QgPSBzbmFwc2hvdDsKLQlzbmFwc2hvdCA9IENvcHlNVkNDU25hcHNo b3Qob3JpZ19zbmFwc2hvdCk7Ci0KIAlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8o VG9wVHJhbnNhY3Rpb25Db250ZXh0KTsKIAllc25hcCA9IChFeHBvcnRlZFNuYXBzaG90ICop IHBhbGxvYyhzaXplb2YoRXhwb3J0ZWRTbmFwc2hvdCkpOwogCWVzbmFwLT5zbmFwZmlsZSA9 IHBzdHJkdXAocGF0aCk7CiAJZXNuYXAtPnNuYXBzaG90ID0gc25hcHNob3Q7CisJc25hcHNo b3QtPnJlZmNvdW50Kys7CiAJZXhwb3J0ZWRTbmFwc2hvdHMgPSBsYXBwZW5kKGV4cG9ydGVk U25hcHNob3RzLCBlc25hcCk7CiAJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CiAK LQlzbmFwc2hvdC0+cmVnZF9jb3VudCsrOwotCWRsaXN0X2luc2VydF9hZnRlcigmb3JpZ19z bmFwc2hvdC0+bm9kZSwgJnNuYXBzaG90LT5ub2RlKTsKLQogCS8qCiAJICogRmlsbCBidWYg d2l0aCBhIHRleHQgc2VyaWFsaXphdGlvbiBvZiB0aGUgc25hcHNob3QsIHBsdXMgaWRlbnRp ZmljYXRpb24KIAkgKiBkYXRhIGFib3V0IHRoaXMgdHJhbnNhY3Rpb24uICBUaGUgZm9ybWF0 IGV4cGVjdGVkIGJ5IEltcG9ydFNuYXBzaG90IGlzCkBAIC0xMjQ4LDggKzExNDMsOCBAQCBF eHBvcnRTbmFwc2hvdChNVkNDU25hcHNob3Qgc25hcHNob3QpCiAJLyoKIAkgKiBXZSBtdXN0 IGluY2x1ZGUgb3VyIG93biB0b3AgdHJhbnNhY3Rpb24gSUQgaW4gdGhlIHRvcC14aWQgZGF0 YSwgc2luY2UKIAkgKiBieSBkZWZpbml0aW9uIHdlIHdpbGwgc3RpbGwgYmUgcnVubmluZyB3 aGVuIHRoZSBpbXBvcnRpbmcgdHJhbnNhY3Rpb24KLQkgKiBhZG9wdHMgdGhlIHNuYXBzaG90 LCBidXQgR2V0U25hcHNob3REYXRhIG5ldmVyIGluY2x1ZGVzIG91ciBvd24gWElEIGluCi0J ICogdGhlIHNuYXBzaG90LiAgKFRoZXJlIG11c3QsIHRoZXJlZm9yZSwgYmUgZW5vdWdoIHJv b20gdG8gYWRkIGl0LikKKwkgKiBhZG9wdHMgdGhlIHNuYXBzaG90LCBidXQgR2V0TVZDQ1Nu YXBzaG90RGF0YSBuZXZlciBpbmNsdWRlcyBvdXIgb3duIFhJRAorCSAqIGluIHRoZSBzbmFw c2hvdC4gIChUaGVyZSBtdXN0LCB0aGVyZWZvcmUsIGJlIGVub3VnaCByb29tIHRvIGFkZCBp dC4pCiAJICoKIAkgKiBIb3dldmVyLCBpdCBjb3VsZCBiZSB0aGF0IG91ciB0b3BYaWQgaXMg YWZ0ZXIgdGhlIHhtYXgsIGluIHdoaWNoIGNhc2UKIAkgKiB3ZSBzaG91bGRuJ3QgaW5jbHVk ZSBpdCBiZWNhdXNlIHhpcFtdIG1lbWJlcnMgYXJlIGV4cGVjdGVkIHRvIGJlIGJlZm9yZQpA QCAtMTMzNCw3ICsxMjI5LDcgQEAgcGdfZXhwb3J0X3NuYXBzaG90KFBHX0ZVTkNUSU9OX0FS R1MpCiB7CiAJY2hhcgkgICAqc25hcHNob3ROYW1lOwogCi0Jc25hcHNob3ROYW1lID0gRXhw b3J0U25hcHNob3QoKE1WQ0NTbmFwc2hvdCkgR2V0QWN0aXZlU25hcHNob3QoKSk7CisJc25h cHNob3ROYW1lID0gRXhwb3J0U25hcHNob3QoKChNVkNDU25hcHNob3QpIEdldEFjdGl2ZVNu YXBzaG90KCkpLT5zaGFyZWQpOwogCVBHX1JFVFVSTl9URVhUX1AoY3N0cmluZ190b190ZXh0 KHNuYXBzaG90TmFtZSkpOwogfQogCkBAIC0xNDM4LDcgKzEzMzMsNyBAQCBJbXBvcnRTbmFw c2hvdChjb25zdCBjaGFyICppZHN0cikKIAlPaWQJCQlzcmNfZGJpZDsKIAlpbnQJCQlzcmNf aXNvbGV2ZWw7CiAJYm9vbAkJc3JjX3JlYWRvbmx5OwotCU1WQ0NTbmFwc2hvdERhdGEgc25h cHNob3Q7CisJTVZDQ1NuYXBzaG90U2hhcmVkIHNuYXBzaG90OwogCiAJLyoKIAkgKiBNdXN0 IGJlIGF0IHRvcCBsZXZlbCBvZiBhIGZyZXNoIHRyYW5zYWN0aW9uLiAgTm90ZSBpbiBwYXJ0 aWN1bGFyIHRoYXQKQEAgLTE1MDgsOCArMTQwMyw2IEBAIEltcG9ydFNuYXBzaG90KGNvbnN0 IGNoYXIgKmlkc3RyKQogCS8qCiAJICogQ29uc3RydWN0IGEgc25hcHNob3Qgc3RydWN0IGJ5 IHBhcnNpbmcgdGhlIGZpbGUgY29udGVudC4KIAkgKi8KLQltZW1zZXQoJnNuYXBzaG90LCAw LCBzaXplb2Yoc25hcHNob3QpKTsKLQogCXBhcnNlVnhpZEZyb21UZXh0KCJ2eGlkOiIsICZm aWxlYnVmLCBwYXRoLCAmc3JjX3Z4aWQpOwogCXNyY19waWQgPSBwYXJzZUludEZyb21UZXh0 KCJwaWQ6IiwgJmZpbGVidWYsIHBhdGgpOwogCS8qIHdlIGFidXNlIHBhcnNlWGlkRnJvbVRl eHQgYSBiaXQgaGVyZSAuLi4gKi8KQEAgLTE1MTcsMTIgKzE0MTAsMTEgQEAgSW1wb3J0U25h cHNob3QoY29uc3QgY2hhciAqaWRzdHIpCiAJc3JjX2lzb2xldmVsID0gcGFyc2VJbnRGcm9t VGV4dCgiaXNvOiIsICZmaWxlYnVmLCBwYXRoKTsKIAlzcmNfcmVhZG9ubHkgPSBwYXJzZUlu dEZyb21UZXh0KCJybzoiLCAmZmlsZWJ1ZiwgcGF0aCk7CiAKLQlzbmFwc2hvdC5zbmFwc2hv dF90eXBlID0gU05BUFNIT1RfTVZDQzsKLQotCXNuYXBzaG90LnhtaW4gPSBwYXJzZVhpZEZy b21UZXh0KCJ4bWluOiIsICZmaWxlYnVmLCBwYXRoKTsKLQlzbmFwc2hvdC54bWF4ID0gcGFy c2VYaWRGcm9tVGV4dCgieG1heDoiLCAmZmlsZWJ1ZiwgcGF0aCk7CisJc25hcHNob3QgPSBB bGxvY01WQ0NTbmFwc2hvdFNoYXJlZCgpOworCXNuYXBzaG90LT54bWluID0gcGFyc2VYaWRG cm9tVGV4dCgieG1pbjoiLCAmZmlsZWJ1ZiwgcGF0aCk7CisJc25hcHNob3QtPnhtYXggPSBw YXJzZVhpZEZyb21UZXh0KCJ4bWF4OiIsICZmaWxlYnVmLCBwYXRoKTsKIAotCXNuYXBzaG90 LnhjbnQgPSB4Y250ID0gcGFyc2VJbnRGcm9tVGV4dCgieGNudDoiLCAmZmlsZWJ1ZiwgcGF0 aCk7CisJc25hcHNob3QtPnhjbnQgPSB4Y250ID0gcGFyc2VJbnRGcm9tVGV4dCgieGNudDoi LCAmZmlsZWJ1ZiwgcGF0aCk7CiAKIAkvKiBzYW5pdHktY2hlY2sgdGhlIHhpZCBjb3VudCBi ZWZvcmUgcGFsbG9jICovCiAJaWYgKHhjbnQgPCAwIHx8IHhjbnQgPiBHZXRNYXhTbmFwc2hv dFhpZENvdW50KCkpCkBAIC0xNTMwLDE1ICsxNDIyLDE1IEBAIEltcG9ydFNuYXBzaG90KGNv bnN0IGNoYXIgKmlkc3RyKQogCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9URVhUX1JF UFJFU0VOVEFUSU9OKSwKIAkJCQkgZXJybXNnKCJpbnZhbGlkIHNuYXBzaG90IGRhdGEgaW4g ZmlsZSBcIiVzXCIiLCBwYXRoKSkpOwogCi0Jc25hcHNob3QueGlwID0gKFRyYW5zYWN0aW9u SWQgKikgcGFsbG9jKHhjbnQgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCkpOworCXNuYXBzaG90 LT54aXAgPSAoVHJhbnNhY3Rpb25JZCAqKSBwYWxsb2MoeGNudCAqIHNpemVvZihUcmFuc2Fj dGlvbklkKSk7CiAJZm9yIChpID0gMDsgaSA8IHhjbnQ7IGkrKykKLQkJc25hcHNob3QueGlw W2ldID0gcGFyc2VYaWRGcm9tVGV4dCgieGlwOiIsICZmaWxlYnVmLCBwYXRoKTsKKwkJc25h cHNob3QtPnhpcFtpXSA9IHBhcnNlWGlkRnJvbVRleHQoInhpcDoiLCAmZmlsZWJ1ZiwgcGF0 aCk7CiAKLQlzbmFwc2hvdC5zdWJvdmVyZmxvd2VkID0gcGFyc2VJbnRGcm9tVGV4dCgic29m OiIsICZmaWxlYnVmLCBwYXRoKTsKKwlzbmFwc2hvdC0+c3Vib3ZlcmZsb3dlZCA9IHBhcnNl SW50RnJvbVRleHQoInNvZjoiLCAmZmlsZWJ1ZiwgcGF0aCk7CiAKLQlpZiAoIXNuYXBzaG90 LnN1Ym92ZXJmbG93ZWQpCisJaWYgKCFzbmFwc2hvdC0+c3Vib3ZlcmZsb3dlZCkKIAl7Ci0J CXNuYXBzaG90LnN1YnhjbnQgPSB4Y250ID0gcGFyc2VJbnRGcm9tVGV4dCgic3hjbnQ6Iiwg JmZpbGVidWYsIHBhdGgpOworCQlzbmFwc2hvdC0+c3VieGNudCA9IHhjbnQgPSBwYXJzZUlu dEZyb21UZXh0KCJzeGNudDoiLCAmZmlsZWJ1ZiwgcGF0aCk7CiAKIAkJLyogc2FuaXR5LWNo ZWNrIHRoZSB4aWQgY291bnQgYmVmb3JlIHBhbGxvYyAqLwogCQlpZiAoeGNudCA8IDAgfHwg eGNudCA+IEdldE1heFNuYXBzaG90U3VieGlkQ291bnQoKSkKQEAgLTE1NDYsMTcgKzE0Mzgs MTkgQEAgSW1wb3J0U25hcHNob3QoY29uc3QgY2hhciAqaWRzdHIpCiAJCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5WQUxJRF9URVhUX1JFUFJFU0VOVEFUSU9OKSwKIAkJCQkJIGVycm1zZygi aW52YWxpZCBzbmFwc2hvdCBkYXRhIGluIGZpbGUgXCIlc1wiIiwgcGF0aCkpKTsKIAotCQlz bmFwc2hvdC5zdWJ4aXAgPSAoVHJhbnNhY3Rpb25JZCAqKSBwYWxsb2MoeGNudCAqIHNpemVv ZihUcmFuc2FjdGlvbklkKSk7CisJCXNuYXBzaG90LT5zdWJ4aXAgPSAoVHJhbnNhY3Rpb25J ZCAqKSBwYWxsb2MoeGNudCAqIHNpemVvZihUcmFuc2FjdGlvbklkKSk7CiAJCWZvciAoaSA9 IDA7IGkgPCB4Y250OyBpKyspCi0JCQlzbmFwc2hvdC5zdWJ4aXBbaV0gPSBwYXJzZVhpZEZy b21UZXh0KCJzeHA6IiwgJmZpbGVidWYsIHBhdGgpOworCQkJc25hcHNob3QtPnN1YnhpcFtp XSA9IHBhcnNlWGlkRnJvbVRleHQoInN4cDoiLCAmZmlsZWJ1ZiwgcGF0aCk7CiAJfQogCWVs c2UKIAl7Ci0JCXNuYXBzaG90LnN1YnhjbnQgPSAwOwotCQlzbmFwc2hvdC5zdWJ4aXAgPSBO VUxMOworCQlzbmFwc2hvdC0+c3VieGNudCA9IDA7CiAJfQogCi0Jc25hcHNob3QudGFrZW5E dXJpbmdSZWNvdmVyeSA9IHBhcnNlSW50RnJvbVRleHQoInJlYzoiLCAmZmlsZWJ1ZiwgcGF0 aCk7CisJc25hcHNob3QtPnRha2VuRHVyaW5nUmVjb3ZlcnkgPSBwYXJzZUludEZyb21UZXh0 KCJyZWM6IiwgJmZpbGVidWYsIHBhdGgpOworCisJc25hcHNob3QtPnJlZmNvdW50ID0gMTsK Kwl2YWxpZF9zbmFwc2hvdHNfcHVzaF9vdXRfb2Zfb3JkZXIoc25hcHNob3QpOwogCiAJLyoK IAkgKiBEbyBzb21lIGFkZGl0aW9uYWwgc2FuaXR5IGNoZWNraW5nLCBqdXN0IHRvIHByb3Rl Y3Qgb3Vyc2VsdmVzLiAgV2UKQEAgLTE1NjUsOCArMTQ1OSw4IEBAIEltcG9ydFNuYXBzaG90 KGNvbnN0IGNoYXIgKmlkc3RyKQogCSAqLwogCWlmICghVmlydHVhbFRyYW5zYWN0aW9uSWRJ c1ZhbGlkKHNyY192eGlkKSB8fAogCQkhT2lkSXNWYWxpZChzcmNfZGJpZCkgfHwKLQkJIVRy YW5zYWN0aW9uSWRJc05vcm1hbChzbmFwc2hvdC54bWluKSB8fAotCQkhVHJhbnNhY3Rpb25J ZElzTm9ybWFsKHNuYXBzaG90LnhtYXgpKQorCQkhVHJhbnNhY3Rpb25JZElzTm9ybWFsKHNu YXBzaG90LT54bWluKSB8fAorCQkhVHJhbnNhY3Rpb25JZElzTm9ybWFsKHNuYXBzaG90LT54 bWF4KSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURf VEVYVF9SRVBSRVNFTlRBVElPTiksCiAJCQkJIGVycm1zZygiaW52YWxpZCBzbmFwc2hvdCBk YXRhIGluIGZpbGUgXCIlc1wiIiwgcGF0aCkpKTsKQEAgLTE2MDQsNyArMTQ5OCw3IEBAIElt cG9ydFNuYXBzaG90KGNvbnN0IGNoYXIgKmlkc3RyKQogCQkJCSBlcnJtc2coImNhbm5vdCBp bXBvcnQgYSBzbmFwc2hvdCBmcm9tIGEgZGlmZmVyZW50IGRhdGFiYXNlIikpKTsKIAogCS8q IE9LLCBpbnN0YWxsIHRoZSBzbmFwc2hvdCAqLwotCVNldFRyYW5zYWN0aW9uU25hcHNob3Qo JnNuYXBzaG90LCAmc3JjX3Z4aWQsIHNyY19waWQsIE5VTEwpOworCVNldFRyYW5zYWN0aW9u U25hcHNob3Qoc25hcHNob3QsICZzcmNfdnhpZCwgc3JjX3BpZCwgTlVMTCk7CiB9CiAKIC8q CkBAIC0xNjcwLDE4ICsxNTY0LDIxIEBAIFRoZXJlQXJlTm9QcmlvclJlZ2lzdGVyZWRTbmFw c2hvdHModm9pZCkKIAogCWRsaXN0X2ZvcmVhY2goaXRlciwgJlZhbGlkU25hcHNob3RzKQog CXsKLQkJTVZDQ1NuYXBzaG90IGN1ciA9IGRsaXN0X2NvbnRhaW5lcihNVkNDU25hcHNob3RE YXRhLCBub2RlLCBpdGVyLmN1cik7CisJCU1WQ0NTbmFwc2hvdFNoYXJlZCBjdXIgPQorCQkJ ZGxpc3RfY29udGFpbmVyKE1WQ0NTbmFwc2hvdFNoYXJlZERhdGEsIG5vZGUsIGl0ZXIuY3Vy KTsKKwkJdWludDMyCQlhbGxvd2VkY291bnQgPSAwOwogCiAJCWlmIChGaXJzdFhhY3RTbmFw c2hvdFJlZ2lzdGVyZWQpCiAJCXsKIAkJCUFzc2VydChDdXJyZW50U25hcHNob3REYXRhLnZh bGlkKTsKLQkJCWlmIChjdXIgIT0gJkN1cnJlbnRTbmFwc2hvdERhdGEpCi0JCQkJY29udGlu dWU7CisJCQlpZiAoY3VyID09IEN1cnJlbnRTbmFwc2hvdERhdGEuc2hhcmVkKQorCQkJCWFs bG93ZWRjb3VudCsrOwogCQl9Ci0JCWlmIChBY3RpdmVTbmFwc2hvdCAmJiBjdXIgPT0gQWN0 aXZlU25hcHNob3QtPmFzX3NuYXApCi0JCQljb250aW51ZTsKKwkJaWYgKEFjdGl2ZVNuYXBz aG90ICYmIGN1ciA9PSBBY3RpdmVTbmFwc2hvdC0+YXNfc25hcC5zaGFyZWQpCisJCQlhbGxv d2VkY291bnQrKzsKIAotCQlyZXR1cm4gZmFsc2U7CisJCWlmIChjdXItPnJlZmNvdW50ICE9 IGFsbG93ZWRjb3VudCkKKwkJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlyZXR1cm4gdHJ1ZTsK QEAgLTE3MDcsOCArMTYwNCw5IEBAIEhhdmVSZWdpc3RlcmVkT3JBY3RpdmVTbmFwc2hvdCh2 b2lkKQogCSAqIHJlZ2lzdGVyZWQgbW9yZSB0aGFuIG9uZSBzbmFwc2hvdCBoYXMgdG8gYmUg aW4gVmFsaWRTbmFwc2hvdHMuCiAJICovCiAJaWYgKENhdGFsb2dTbmFwc2hvdERhdGEudmFs aWQgJiYKLQkJZGxpc3RfaGVhZF9ub2RlKCZWYWxpZFNuYXBzaG90cykgPT0gJkNhdGFsb2dT bmFwc2hvdERhdGEubm9kZSAmJgotCQlkbGlzdF90YWlsX25vZGUoJlZhbGlkU25hcHNob3Rz KSA9PSAmQ2F0YWxvZ1NuYXBzaG90RGF0YS5ub2RlKQorCQlDYXRhbG9nU25hcHNob3REYXRh LnNoYXJlZC0+cmVmY291bnQgPT0gMSAmJgorCQlkbGlzdF9oZWFkX25vZGUoJlZhbGlkU25h cHNob3RzKSA9PSAmQ2F0YWxvZ1NuYXBzaG90RGF0YS5zaGFyZWQtPm5vZGUgJiYKKwkJZGxp c3RfdGFpbF9ub2RlKCZWYWxpZFNuYXBzaG90cykgPT0gJkNhdGFsb2dTbmFwc2hvdERhdGEu c2hhcmVkLT5ub2RlKQogCXsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTE3NzUsMTEgKzE2 NzMsMTEgQEAgRXN0aW1hdGVTbmFwc2hvdFNwYWNlKE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCkK IAogCS8qIFdlIGFsbG9jYXRlIGFueSBYSUQgYXJyYXlzIG5lZWRlZCBpbiB0aGUgc2FtZSBw YWxsb2MgYmxvY2suICovCiAJc2l6ZSA9IGFkZF9zaXplKHNpemVvZihTZXJpYWxpemVkU25h cHNob3REYXRhKSwKLQkJCQkJbXVsX3NpemUoc25hcHNob3QtPnhjbnQsIHNpemVvZihUcmFu c2FjdGlvbklkKSkpOwotCWlmIChzbmFwc2hvdC0+c3VieGNudCA+IDAgJiYKLQkJKCFzbmFw c2hvdC0+c3Vib3ZlcmZsb3dlZCB8fCBzbmFwc2hvdC0+dGFrZW5EdXJpbmdSZWNvdmVyeSkp CisJCQkJCW11bF9zaXplKHNuYXBzaG90LT5zaGFyZWQtPnhjbnQsIHNpemVvZihUcmFuc2Fj dGlvbklkKSkpOworCWlmIChzbmFwc2hvdC0+c2hhcmVkLT5zdWJ4Y250ID4gMCAmJgorCQko IXNuYXBzaG90LT5zaGFyZWQtPnN1Ym92ZXJmbG93ZWQgfHwgc25hcHNob3QtPnNoYXJlZC0+ dGFrZW5EdXJpbmdSZWNvdmVyeSkpCiAJCXNpemUgPSBhZGRfc2l6ZShzaXplLAotCQkJCQkJ bXVsX3NpemUoc25hcHNob3QtPnN1YnhjbnQsIHNpemVvZihUcmFuc2FjdGlvbklkKSkpOwor CQkJCQkJbXVsX3NpemUoc25hcHNob3QtPnNoYXJlZC0+c3VieGNudCwgc2l6ZW9mKFRyYW5z YWN0aW9uSWQpKSk7CiAKIAlyZXR1cm4gc2l6ZTsKIH0KQEAgLTE3OTQsMTUgKzE2OTIsMTUg QEAgU2VyaWFsaXplU25hcHNob3QoTVZDQ1NuYXBzaG90IHNuYXBzaG90LCBjaGFyICpzdGFy dF9hZGRyZXNzKQogewogCVNlcmlhbGl6ZWRTbmFwc2hvdERhdGEgc2VyaWFsaXplZF9zbmFw c2hvdDsKIAotCUFzc2VydChzbmFwc2hvdC0+c3VieGNudCA+PSAwKTsKKwlBc3NlcnQoc25h cHNob3QtPnNoYXJlZC0+c3VieGNudCA+PSAwKTsKIAogCS8qIENvcHkgYWxsIHJlcXVpcmVk IGZpZWxkcyAqLwotCXNlcmlhbGl6ZWRfc25hcHNob3QueG1pbiA9IHNuYXBzaG90LT54bWlu OwotCXNlcmlhbGl6ZWRfc25hcHNob3QueG1heCA9IHNuYXBzaG90LT54bWF4OwotCXNlcmlh bGl6ZWRfc25hcHNob3QueGNudCA9IHNuYXBzaG90LT54Y250OwotCXNlcmlhbGl6ZWRfc25h cHNob3Quc3VieGNudCA9IHNuYXBzaG90LT5zdWJ4Y250OwotCXNlcmlhbGl6ZWRfc25hcHNo b3Quc3Vib3ZlcmZsb3dlZCA9IHNuYXBzaG90LT5zdWJvdmVyZmxvd2VkOwotCXNlcmlhbGl6 ZWRfc25hcHNob3QudGFrZW5EdXJpbmdSZWNvdmVyeSA9IHNuYXBzaG90LT50YWtlbkR1cmlu Z1JlY292ZXJ5OworCXNlcmlhbGl6ZWRfc25hcHNob3QueG1pbiA9IHNuYXBzaG90LT5zaGFy ZWQtPnhtaW47CisJc2VyaWFsaXplZF9zbmFwc2hvdC54bWF4ID0gc25hcHNob3QtPnNoYXJl ZC0+eG1heDsKKwlzZXJpYWxpemVkX3NuYXBzaG90LnhjbnQgPSBzbmFwc2hvdC0+c2hhcmVk LT54Y250OworCXNlcmlhbGl6ZWRfc25hcHNob3Quc3VieGNudCA9IHNuYXBzaG90LT5zaGFy ZWQtPnN1YnhjbnQ7CisJc2VyaWFsaXplZF9zbmFwc2hvdC5zdWJvdmVyZmxvd2VkID0gc25h cHNob3QtPnNoYXJlZC0+c3Vib3ZlcmZsb3dlZDsKKwlzZXJpYWxpemVkX3NuYXBzaG90LnRh a2VuRHVyaW5nUmVjb3ZlcnkgPSBzbmFwc2hvdC0+c2hhcmVkLT50YWtlbkR1cmluZ1JlY292 ZXJ5OwogCXNlcmlhbGl6ZWRfc25hcHNob3QuY3VyY2lkID0gc25hcHNob3QtPmN1cmNpZDsK IAogCS8qCkBAIC0xODEwLDcgKzE3MDgsNyBAQCBTZXJpYWxpemVTbmFwc2hvdChNVkNDU25h cHNob3Qgc25hcHNob3QsIGNoYXIgKnN0YXJ0X2FkZHJlc3MpCiAJICogdGFrZW4gZHVyaW5n IHJlY292ZXJ5IC0gaW4gdGhhdCBjYXNlLCB0b3AtbGV2ZWwgWElEcyBhcmUgaW4gc3VieGlw IGFzCiAJICogd2VsbCwgYW5kIHdlIG11c3RuJ3QgbG9zZSB0aGVtLgogCSAqLwotCWlmIChz ZXJpYWxpemVkX3NuYXBzaG90LnN1Ym92ZXJmbG93ZWQgJiYgIXNuYXBzaG90LT50YWtlbkR1 cmluZ1JlY292ZXJ5KQorCWlmIChzZXJpYWxpemVkX3NuYXBzaG90LnN1Ym92ZXJmbG93ZWQg JiYgIXNuYXBzaG90LT5zaGFyZWQtPnRha2VuRHVyaW5nUmVjb3ZlcnkpCiAJCXNlcmlhbGl6 ZWRfc25hcHNob3Quc3VieGNudCA9IDA7CiAKIAkvKiBDb3B5IHN0cnVjdCB0byBwb3NzaWJs eS11bmFsaWduZWQgYnVmZmVyICovCkBAIC0xODE4LDEwICsxNzE2LDEwIEBAIFNlcmlhbGl6 ZVNuYXBzaG90KE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCwgY2hhciAqc3RhcnRfYWRkcmVzcykK IAkJICAgJnNlcmlhbGl6ZWRfc25hcHNob3QsIHNpemVvZihTZXJpYWxpemVkU25hcHNob3RE YXRhKSk7CiAKIAkvKiBDb3B5IFhJRCBhcnJheSAqLwotCWlmIChzbmFwc2hvdC0+eGNudCA+ IDApCisJaWYgKHNuYXBzaG90LT5zaGFyZWQtPnhjbnQgPiAwKQogCQltZW1jcHkoKFRyYW5z YWN0aW9uSWQgKikgKHN0YXJ0X2FkZHJlc3MgKwogCQkJCQkJCQkgIHNpemVvZihTZXJpYWxp emVkU25hcHNob3REYXRhKSksCi0JCQkgICBzbmFwc2hvdC0+eGlwLCBzbmFwc2hvdC0+eGNu dCAqIHNpemVvZihUcmFuc2FjdGlvbklkKSk7CisJCQkgICBzbmFwc2hvdC0+c2hhcmVkLT54 aXAsIHNuYXBzaG90LT5zaGFyZWQtPnhjbnQgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCkpOwog CiAJLyoKIAkgKiBDb3B5IFN1YlhJRCBhcnJheS4gRG9uJ3QgYm90aGVyIHRvIGNvcHkgaXQg aWYgaXQgaGFkIG92ZXJmbG93ZWQsCkBAIC0xODMyLDEwICsxNzMwLDEwIEBAIFNlcmlhbGl6 ZVNuYXBzaG90KE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCwgY2hhciAqc3RhcnRfYWRkcmVzcykK IAlpZiAoc2VyaWFsaXplZF9zbmFwc2hvdC5zdWJ4Y250ID4gMCkKIAl7CiAJCVNpemUJCXN1 YnhpcG9mZiA9IHNpemVvZihTZXJpYWxpemVkU25hcHNob3REYXRhKSArCi0JCQlzbmFwc2hv dC0+eGNudCAqIHNpemVvZihUcmFuc2FjdGlvbklkKTsKKwkJCXNuYXBzaG90LT5zaGFyZWQt PnhjbnQgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCk7CiAKIAkJbWVtY3B5KChUcmFuc2FjdGlv bklkICopIChzdGFydF9hZGRyZXNzICsgc3VieGlwb2ZmKSwKLQkJCSAgIHNuYXBzaG90LT5z dWJ4aXAsIHNuYXBzaG90LT5zdWJ4Y250ICogc2l6ZW9mKFRyYW5zYWN0aW9uSWQpKTsKKwkJ CSAgIHNuYXBzaG90LT5zaGFyZWQtPnN1YnhpcCwgc25hcHNob3QtPnNoYXJlZC0+c3VieGNu dCAqIHNpemVvZihUcmFuc2FjdGlvbklkKSk7CiAJfQogfQogCkBAIC0xODYzLDQ5ICsxNzYx LDQ2IEBAIFJlc3RvcmVTbmFwc2hvdChjaGFyICpzdGFydF9hZGRyZXNzKQogCXNpemUgPSBz aXplb2YoTVZDQ1NuYXBzaG90RGF0YSkKIAkJKyBzZXJpYWxpemVkX3NuYXBzaG90LnhjbnQg KiBzaXplb2YoVHJhbnNhY3Rpb25JZCkKIAkJKyBzZXJpYWxpemVkX3NuYXBzaG90LnN1Ynhj bnQgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCk7CisJQXNzZXJ0KHNlcmlhbGl6ZWRfc25hcHNo b3QueGNudCA8PSBHZXRNYXhTbmFwc2hvdFhpZENvdW50KCkpOworCUFzc2VydChzZXJpYWxp emVkX3NuYXBzaG90LnN1YnhjbnQgPD0gR2V0TWF4U25hcHNob3RTdWJ4aWRDb3VudCgpKTsK IAogCS8qIENvcHkgYWxsIHJlcXVpcmVkIGZpZWxkcyAqLwogCXNuYXBzaG90ID0gKE1WQ0NT bmFwc2hvdCkgTWVtb3J5Q29udGV4dEFsbG9jKFRvcFRyYW5zYWN0aW9uQ29udGV4dCwgc2l6 ZSk7CiAJc25hcHNob3QtPnNuYXBzaG90X3R5cGUgPSBTTkFQU0hPVF9NVkNDOwotCXNuYXBz aG90LT54bWluID0gc2VyaWFsaXplZF9zbmFwc2hvdC54bWluOwotCXNuYXBzaG90LT54bWF4 ID0gc2VyaWFsaXplZF9zbmFwc2hvdC54bWF4OwotCXNuYXBzaG90LT54aXAgPSBOVUxMOwot CXNuYXBzaG90LT54Y250ID0gc2VyaWFsaXplZF9zbmFwc2hvdC54Y250OwotCXNuYXBzaG90 LT5zdWJ4aXAgPSBOVUxMOwotCXNuYXBzaG90LT5zdWJ4Y250ID0gc2VyaWFsaXplZF9zbmFw c2hvdC5zdWJ4Y250OwotCXNuYXBzaG90LT5zdWJvdmVyZmxvd2VkID0gc2VyaWFsaXplZF9z bmFwc2hvdC5zdWJvdmVyZmxvd2VkOwotCXNuYXBzaG90LT50YWtlbkR1cmluZ1JlY292ZXJ5 ID0gc2VyaWFsaXplZF9zbmFwc2hvdC50YWtlbkR1cmluZ1JlY292ZXJ5OworCXNuYXBzaG90 LT5raW5kID0gU05BUFNIT1RfUkVHSVNURVJFRDsKKwlzbmFwc2hvdC0+c2hhcmVkID0gQWxs b2NNVkNDU25hcHNob3RTaGFyZWQoKTsKKwlzbmFwc2hvdC0+c2hhcmVkLT54bWluID0gc2Vy aWFsaXplZF9zbmFwc2hvdC54bWluOworCXNuYXBzaG90LT5zaGFyZWQtPnhtYXggPSBzZXJp YWxpemVkX3NuYXBzaG90LnhtYXg7CisJc25hcHNob3QtPnNoYXJlZC0+eGNudCA9IHNlcmlh bGl6ZWRfc25hcHNob3QueGNudDsKKwlzbmFwc2hvdC0+c2hhcmVkLT5zdWJ4Y250ID0gc2Vy aWFsaXplZF9zbmFwc2hvdC5zdWJ4Y250OworCXNuYXBzaG90LT5zaGFyZWQtPnN1Ym92ZXJm bG93ZWQgPSBzZXJpYWxpemVkX3NuYXBzaG90LnN1Ym92ZXJmbG93ZWQ7CisJc25hcHNob3Qt PnNoYXJlZC0+dGFrZW5EdXJpbmdSZWNvdmVyeSA9IHNlcmlhbGl6ZWRfc25hcHNob3QudGFr ZW5EdXJpbmdSZWNvdmVyeTsKKwlzbmFwc2hvdC0+c2hhcmVkLT5zbmFwWGFjdENvbXBsZXRp b25Db3VudCA9IDA7CisKKwlzbmFwc2hvdC0+c2hhcmVkLT5yZWZjb3VudCA9IDE7CisJdmFs aWRfc25hcHNob3RzX3B1c2hfb3V0X29mX29yZGVyKHNuYXBzaG90LT5zaGFyZWQpOworCiAJ c25hcHNob3QtPmN1cmNpZCA9IHNlcmlhbGl6ZWRfc25hcHNob3QuY3VyY2lkOwotCXNuYXBz aG90LT5zbmFwWGFjdENvbXBsZXRpb25Db3VudCA9IDA7CiAKIAkvKiBDb3B5IFhJRHMsIGlm IHByZXNlbnQuICovCiAJaWYgKHNlcmlhbGl6ZWRfc25hcHNob3QueGNudCA+IDApCiAJewot CQlzbmFwc2hvdC0+eGlwID0gKFRyYW5zYWN0aW9uSWQgKikgKHNuYXBzaG90ICsgMSk7Ci0J CW1lbWNweShzbmFwc2hvdC0+eGlwLCBzZXJpYWxpemVkX3hpZHMsCisJCW1lbWNweShzbmFw c2hvdC0+c2hhcmVkLT54aXAsIHNlcmlhbGl6ZWRfeGlkcywKIAkJCSAgIHNlcmlhbGl6ZWRf c25hcHNob3QueGNudCAqIHNpemVvZihUcmFuc2FjdGlvbklkKSk7CiAJfQogCiAJLyogQ29w eSBTdWJYSURzLCBpZiBwcmVzZW50LiAqLwogCWlmIChzZXJpYWxpemVkX3NuYXBzaG90LnN1 YnhjbnQgPiAwKQogCXsKLQkJc25hcHNob3QtPnN1YnhpcCA9ICgoVHJhbnNhY3Rpb25JZCAq KSAoc25hcHNob3QgKyAxKSkgKwotCQkJc2VyaWFsaXplZF9zbmFwc2hvdC54Y250OwotCQlt ZW1jcHkoc25hcHNob3QtPnN1YnhpcCwgc2VyaWFsaXplZF94aWRzICsgc2VyaWFsaXplZF9z bmFwc2hvdC54Y250LAorCQltZW1jcHkoc25hcHNob3QtPnNoYXJlZC0+c3VieGlwLCBzZXJp YWxpemVkX3hpZHMgKyBzZXJpYWxpemVkX3NuYXBzaG90LnhjbnQsCiAJCQkgICBzZXJpYWxp emVkX3NuYXBzaG90LnN1YnhjbnQgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCkpOwogCX0KIAot CS8qIFNldCB0aGUgY29waWVkIGZsYWcgc28gdGhhdCB0aGUgY2FsbGVyIHdpbGwgc2V0IHJl ZmNvdW50cyBjb3JyZWN0bHkuICovCi0Jc25hcHNob3QtPnJlZ2RfY291bnQgPSAwOwotCXNu YXBzaG90LT5hY3RpdmVfY291bnQgPSAwOwotCXNuYXBzaG90LT5jb3BpZWQgPSB0cnVlOwog CXNuYXBzaG90LT52YWxpZCA9IHRydWU7CiAKIAkvKiBhbmQgdGVsbCByZXNvd25lci5jIGFi b3V0IGl0LCBqdXN0IGxpa2UgUmVnaXN0ZXJTbmFwc2hvdCgpICovCiAJUmVzb3VyY2VPd25l ckVubGFyZ2UoQ3VycmVudFJlc291cmNlT3duZXIpOwotCXNuYXBzaG90LT5yZWdkX2NvdW50 Kys7CiAJUmVzb3VyY2VPd25lclJlbWVtYmVyU25hcHNob3QoQ3VycmVudFJlc291cmNlT3du ZXIsIChTbmFwc2hvdCkgc25hcHNob3QpOwotCXZhbGlkX3NuYXBzaG90c19wdXNoX291dF9v Zl9vcmRlcihzbmFwc2hvdCk7CiAKIAlyZXR1cm4gc25hcHNob3Q7CiB9CkBAIC0xOTE5LDIx ICsxODE0LDIxIEBAIFJlc3RvcmVTbmFwc2hvdChjaGFyICpzdGFydF9hZGRyZXNzKQogdm9p ZAogUmVzdG9yZVRyYW5zYWN0aW9uU25hcHNob3QoTVZDQ1NuYXBzaG90IHNuYXBzaG90LCB2 b2lkICpzb3VyY2VfcGdwcm9jKQogewotCVNldFRyYW5zYWN0aW9uU25hcHNob3Qoc25hcHNo b3QsIE5VTEwsIEludmFsaWRQaWQsIHNvdXJjZV9wZ3Byb2MpOworCVNldFRyYW5zYWN0aW9u U25hcHNob3Qoc25hcHNob3QtPnNoYXJlZCwgTlVMTCwgSW52YWxpZFBpZCwgc291cmNlX3Bn cHJvYyk7CiB9CiAKIC8qCiAgKiBYaWRJbk1WQ0NTbmFwc2hvdAogICoJCUlzIHRoZSBnaXZl biBYSUQgc3RpbGwtaW4tcHJvZ3Jlc3MgYWNjb3JkaW5nIHRvIHRoZSBzbmFwc2hvdD8KICAq Ci0gKiBOb3RlOiBHZXRTbmFwc2hvdERhdGEgbmV2ZXIgc3RvcmVzIGVpdGhlciB0b3AgeGlk IG9yIHN1YnhpZHMgb2Ygb3VyIG93bgotICogYmFja2VuZCBpbnRvIGEgc25hcHNob3QsIHNv IHRoZXNlIHhpZHMgd2lsbCBub3QgYmUgcmVwb3J0ZWQgYXMgInJ1bm5pbmciCi0gKiBieSB0 aGlzIGZ1bmN0aW9uLiAgVGhpcyBpcyBPSyBmb3IgY3VycmVudCB1c2VzLCBiZWNhdXNlIHdl IGFsd2F5cyBjaGVjawotICogVHJhbnNhY3Rpb25JZElzQ3VycmVudFRyYW5zYWN0aW9uSWQg Zmlyc3QsIGV4Y2VwdCB3aGVuIGl0J3Mga25vd24gdGhlCi0gKiBYSUQgY291bGQgbm90IGJl IG91cnMgYW55d2F5LgorICogTm90ZTogR2V0TVZDQ1NuYXBzaG90RGF0YSBuZXZlciBzdG9y ZXMgZWl0aGVyIHRvcCB4aWQgb3Igc3VieGlkcyBvZiBvdXIgb3duCisgKiBiYWNrZW5kIGlu dG8gYSBzbmFwc2hvdCwgc28gdGhlc2UgeGlkcyB3aWxsIG5vdCBiZSByZXBvcnRlZCBhcyAi cnVubmluZyIgYnkKKyAqIHRoaXMgZnVuY3Rpb24uICBUaGlzIGlzIE9LIGZvciBjdXJyZW50 IHVzZXMsIGJlY2F1c2Ugd2UgYWx3YXlzIGNoZWNrCisgKiBUcmFuc2FjdGlvbklkSXNDdXJy ZW50VHJhbnNhY3Rpb25JZCBmaXJzdCwgZXhjZXB0IHdoZW4gaXQncyBrbm93biB0aGUgWElE CisgKiBjb3VsZCBub3QgYmUgb3VycyBhbnl3YXkuCiAgKi8KIGJvb2wKLVhpZEluTVZDQ1Nu YXBzaG90KFRyYW5zYWN0aW9uSWQgeGlkLCBNVkNDU25hcHNob3Qgc25hcHNob3QpCitYaWRJ bk1WQ0NTbmFwc2hvdChUcmFuc2FjdGlvbklkIHhpZCwgTVZDQ1NuYXBzaG90U2hhcmVkIHNu YXBzaG90KQogewogCS8qCiAJICogTWFrZSBhIHF1aWNrIHJhbmdlIGNoZWNrIHRvIGVsaW1p bmF0ZSBtb3N0IFhJRHMgd2l0aG91dCBsb29raW5nIGF0IHRoZQpAQCAtMjAyOSw2ICsxOTI0 LDg0IEBAIFhpZEluTVZDQ1NuYXBzaG90KFRyYW5zYWN0aW9uSWQgeGlkLCBNVkNDU25hcHNo b3Qgc25hcHNob3QpCiAJcmV0dXJuIGZhbHNlOwogfQogCisvKgorICogQWxsb2NhdGUgYW4g TVZDQ1NuYXBzaG90U2hhcmVkIHN0cnVjdAorICoKKyAqIFRoZSAneGlwJyBhbmQgJ3N1Ynhp cCcgYXJyYXlzIGFyZSBhbGxvY2F0ZWQgc28gdGhhdCB0aGV5IGNhbiBob2xkIHRoZSBtYXgK KyAqIG51bWJlciBvZiBYSURzLiBUaGF0J3MgdXN1YWxseSBvdmVya2lsbCwgYnV0IGl0IGFs bG93cyB1cyB0byBkbyB0aGUKKyAqIGFsbG9jYXRpb24gd2hpbGUgbm90IGhvbGRpbmcgUHJv Y0FycmF5TG9jay4KKyAqCisgKiBNVkNDU25hcHNob3RTaGFyZWQgc3RydWN0cyBhcmUga2Vw dCBpbiBUb3BNZW1vcnlDb250ZXh0IGFuZCByZWZjb3VudGVkLgorICogVGhlIHJlZmNvdW50 IGlzIGluaXRpYWxseSB6ZXJvLCB0aGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGluY3JlbWVu dCBpdC4KKyAqLworTVZDQ1NuYXBzaG90U2hhcmVkCitBbGxvY01WQ0NTbmFwc2hvdFNoYXJl ZCh2b2lkKQoreworCU1lbW9yeUNvbnRleHQgc2F2ZV9jeHQ7CisJTVZDQ1NuYXBzaG90U2hh cmVkIHNoYXJlZDsKKwlzaXplX3QJCXNpemU7CisJY2hhcgkgICAqcDsKKworCS8qCisJICog VG8gcmVkdWNlIGFsbG9jL2ZyZWUgb3ZlcmhlYWQgaW4gR2V0TVZDQ1NuYXBzaG90RGF0YSgp LCB3ZSBoYXZlIGEKKwkgKiBzaW5nbGUtZWxlbWVudCBwb29sLgorCSAqLworCWlmIChzcGFy ZVNuYXBzaG90U2hhcmVkKQorCXsKKwkJc2hhcmVkID0gc3BhcmVTbmFwc2hvdFNoYXJlZDsK KwkJc3BhcmVTbmFwc2hvdFNoYXJlZCA9IE5VTEw7CisJCXJldHVybiBzaGFyZWQ7CisJfQor CisJc2F2ZV9jeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7 CisKKwlzaXplID0gc2l6ZW9mKE1WQ0NTbmFwc2hvdFNoYXJlZERhdGEpICsKKwkJR2V0TWF4 U25hcHNob3RYaWRDb3VudCgpICogc2l6ZW9mKFRyYW5zYWN0aW9uSWQpICsKKwkJR2V0TWF4 U25hcHNob3RTdWJ4aWRDb3VudCgpICogc2l6ZW9mKFRyYW5zYWN0aW9uSWQpOworCXAgPSBw YWxsb2Moc2l6ZSk7CisKKwlzaGFyZWQgPSAoTVZDQ1NuYXBzaG90U2hhcmVkKSBwOworCXAg Kz0gc2l6ZW9mKE1WQ0NTbmFwc2hvdFNoYXJlZERhdGEpOworCXNoYXJlZC0+eGlwID0gKFRy YW5zYWN0aW9uSWQgKikgcDsKKwlwICs9IEdldE1heFNuYXBzaG90WGlkQ291bnQoKSAqIHNp emVvZihUcmFuc2FjdGlvbklkKTsKKwlzaGFyZWQtPnN1YnhpcCA9IChUcmFuc2FjdGlvbklk ICopIHA7CisKKwlzaGFyZWQtPnNuYXBYYWN0Q29tcGxldGlvbkNvdW50ID0gMDsKKwlzaGFy ZWQtPnJlZmNvdW50ID0gMDsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzYXZlX2N4dCk7 CisKKwlyZXR1cm4gc2hhcmVkOworfQorCisvKgorICogRGVjcmVtZW50IHRoZSByZWZjb3Vu dCBvbiBhbiBNVkNDU25hcHNob3RTaGFyZWQgc3RydWN0LCBmcmVlaW5nIGl0IGlmIGl0Cisg KiByZWFjaGVzIHplcm8uCisgKi8KK3N0YXRpYyB2b2lkCitSZWxlYXNlTVZDQ1NuYXBzaG90 U2hhcmVkKE1WQ0NTbmFwc2hvdFNoYXJlZCBzaGFyZWQpCit7CisJQXNzZXJ0KHNoYXJlZC0+ cmVmY291bnQgPiAwKTsKKwlzaGFyZWQtPnJlZmNvdW50LS07CisKKwlpZiAoc2hhcmVkLT5y ZWZjb3VudCA9PSAwKQorCXsKKwkJZGxpc3RfZGVsZXRlKCZzaGFyZWQtPm5vZGUpOworCQlp ZiAoc2hhcmVkICE9IGxhdGVzdFNuYXBzaG90U2hhcmVkKQorCQkJRnJlZU1WQ0NTbmFwc2hv dFNoYXJlZChzaGFyZWQpOworCX0KK30KKwordm9pZAorRnJlZU1WQ0NTbmFwc2hvdFNoYXJl ZChNVkNDU25hcHNob3RTaGFyZWQgc2hhcmVkKQoreworCUFzc2VydChzaGFyZWQtPnJlZmNv dW50ID09IDApOworCWlmIChzcGFyZVNuYXBzaG90U2hhcmVkID09IE5VTEwpCisJCXNwYXJl U25hcHNob3RTaGFyZWQgPSBzaGFyZWQ7CisJZWxzZQorCQlwZnJlZShzaGFyZWQpOworfQor CiAvKiBSZXNvdXJjZU93bmVyIGNhbGxiYWNrcyAqLwogCiBzdGF0aWMgdm9pZApAQCAtMjA0 MiwxMiArMjAxNSwxMyBAQCBSZXNPd25lclJlbGVhc2VTbmFwc2hvdChEYXR1bSByZXMpCiAK IC8qIGRsaXN0X3B1c2hfdGFpbCwgd2l0aCBhc3NlcnRpb24gdGhhdCB0aGUgbGlzdCBzdGF5 cyBvcmRlcmVkIGJ5IHhtaW4gKi8KIHN0YXRpYyB2b2lkCi12YWxpZF9zbmFwc2hvdHNfcHVz aF90YWlsKE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCkKK3ZhbGlkX3NuYXBzaG90c19wdXNoX3Rh aWwoTVZDQ1NuYXBzaG90U2hhcmVkIHNuYXBzaG90KQogewogI2lmZGVmIFVTRV9BU1NFUlRf Q0hFQ0tJTkcKIAlpZiAoIWRsaXN0X2lzX2VtcHR5KCZWYWxpZFNuYXBzaG90cykpCiAJewot CQlNVkNDU25hcHNob3QgdGFpbCA9IGRsaXN0X3RhaWxfZWxlbWVudChNVkNDU25hcHNob3RE YXRhLCBub2RlLCAmVmFsaWRTbmFwc2hvdHMpOworCQlNVkNDU25hcHNob3RTaGFyZWQgdGFp bCA9CisJCQlkbGlzdF90YWlsX2VsZW1lbnQoTVZDQ1NuYXBzaG90U2hhcmVkRGF0YSwgbm9k ZSwgJlZhbGlkU25hcHNob3RzKTsKIAogCQlBc3NlcnQoVHJhbnNhY3Rpb25JZEZvbGxvd3NP ckVxdWFscyhzbmFwc2hvdC0+eG1pbiwgdGFpbC0+eG1pbikpOwogCX0KQEAgLTIwNjIsMTMg KzIwMzYsMTQgQEAgdmFsaWRfc25hcHNob3RzX3B1c2hfdGFpbChNVkNDU25hcHNob3Qgc25h cHNob3QpCiAgKiB0aGUgbGlzdCBpcyBzbWFsbC4KICAqLwogc3RhdGljIHZvaWQKLXZhbGlk X3NuYXBzaG90c19wdXNoX291dF9vZl9vcmRlcihNVkNDU25hcHNob3Qgc25hcHNob3QpCit2 YWxpZF9zbmFwc2hvdHNfcHVzaF9vdXRfb2Zfb3JkZXIoTVZDQ1NuYXBzaG90U2hhcmVkIHNu YXBzaG90KQogewogCWRsaXN0X2l0ZXIJaXRlcjsKIAogCWRsaXN0X2ZvcmVhY2goaXRlciwg JlZhbGlkU25hcHNob3RzKQogCXsKLQkJTVZDQ1NuYXBzaG90IGN1ciA9IGRsaXN0X2NvbnRh aW5lcihNVkNDU25hcHNob3REYXRhLCBub2RlLCBpdGVyLmN1cik7CisJCU1WQ0NTbmFwc2hv dFNoYXJlZCBjdXIgPQorCQkJZGxpc3RfY29udGFpbmVyKE1WQ0NTbmFwc2hvdFNoYXJlZERh dGEsIG5vZGUsIGl0ZXIuY3VyKTsKIAogCQlpZiAoVHJhbnNhY3Rpb25JZEZvbGxvd3NPckVx dWFscyhzbmFwc2hvdC0+eG1pbiwgY3VyLT54bWluKSkKIAkJewpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2Ft LmgKaW5kZXggN2Q4MmNkMmViNTYuLmU3MWM2NjAxMThlIDEwMDY0NAotLS0gYS9zcmMvaW5j bHVkZS9hY2Nlc3MvdHJhbnNhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2Ft LmgKQEAgLTI0Miw4ICsyNDIsOCBAQCB0eXBlZGVmIHN0cnVjdCBUcmFuc2FtVmFyaWFibGVz RGF0YQogCSAqIE51bWJlciBvZiB0b3AtbGV2ZWwgdHJhbnNhY3Rpb25zIHdpdGggeGlkcyAo aS5lLiB3aGljaCBtYXkgaGF2ZQogCSAqIG1vZGlmaWVkIHRoZSBkYXRhYmFzZSkgdGhhdCBj b21wbGV0ZWQgaW4gc29tZSBmb3JtIHNpbmNlIHRoZSBzdGFydCBvZgogCSAqIHRoZSBzZXJ2 ZXIuIFRoaXMgY3VycmVudGx5IGlzIHNvbGVseSB1c2VkIHRvIGNoZWNrIHdoZXRoZXIKLQkg KiBHZXRTbmFwc2hvdERhdGEoKSBuZWVkcyB0byByZWNvbXB1dGUgdGhlIGNvbnRlbnRzIG9m IHRoZSBzbmFwc2hvdCwgb3IKLQkgKiBub3QuIFRoZXJlIGFyZSBsaWtlbHkgb3RoZXIgdXNl cnMgb2YgdGhpcy4gIEFsd2F5cyBhYm92ZSAxLgorCSAqIEdldE1WQ0NTbmFwc2hvdERhdGEo KSBuZWVkcyB0byByZWNvbXB1dGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBzbmFwc2hvdCwKKwkg KiBvciBub3QuIFRoZXJlIGFyZSBsaWtlbHkgb3RoZXIgdXNlcnMgb2YgdGhpcy4gIEFsd2F5 cyBhYm92ZSAxLgogCSAqLwogCXVpbnQ2NAkJeGFjdENvbXBsZXRpb25Db3VudDsKIApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcmVkaWNhdGUuaCBiL3NyYy9pbmNsdWRl L3N0b3JhZ2UvcHJlZGljYXRlLmgKaW5kZXggNmE3OGRmZWFjOTYuLmU2ODg2MjU3NmVlIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3ByZWRpY2F0ZS5oCisrKyBiL3NyYy9p bmNsdWRlL3N0b3JhZ2UvcHJlZGljYXRlLmgKQEAgLTQ3LDEwICs0NywxMCBAQCBleHRlcm4g dm9pZCBDaGVja1BvaW50UHJlZGljYXRlKHZvaWQpOwogZXh0ZXJuIGJvb2wgUGFnZUlzUHJl ZGljYXRlTG9ja2VkKFJlbGF0aW9uIHJlbGF0aW9uLCBCbG9ja051bWJlciBibGtubyk7CiAK IC8qIHByZWRpY2F0ZSBsb2NrIG1haW50ZW5hbmNlICovCi1leHRlcm4gTVZDQ1NuYXBzaG90 IEdldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3QoTVZDQ1NuYXBzaG90IHNuYXBz aG90KTsKLWV4dGVybiB2b2lkIFNldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNob3Qo TVZDQ1NuYXBzaG90IHNuYXBzaG90LAotCQkJCQkJCQkJCQkgICBWaXJ0dWFsVHJhbnNhY3Rp b25JZCAqc291cmNldnhpZCwKLQkJCQkJCQkJCQkJICAgaW50IHNvdXJjZXBpZCk7CitleHRl cm4gTVZDQ1NuYXBzaG90U2hhcmVkIEdldFNlcmlhbGl6YWJsZVRyYW5zYWN0aW9uU25hcHNo b3REYXRhKHZvaWQpOworZXh0ZXJuIHZvaWQgU2V0U2VyaWFsaXphYmxlVHJhbnNhY3Rpb25T bmFwc2hvdERhdGEoTVZDQ1NuYXBzaG90U2hhcmVkIHNuYXBzaG90LAorCQkJCQkJCQkJCQkJ ICAgVmlydHVhbFRyYW5zYWN0aW9uSWQgKnNvdXJjZXZ4aWQsCisJCQkJCQkJCQkJCQkgICBp bnQgc291cmNlcGlkKTsKIGV4dGVybiB2b2lkIFJlZ2lzdGVyUHJlZGljYXRlTG9ja2luZ1hp ZChUcmFuc2FjdGlvbklkIHhpZCk7CiBleHRlcm4gdm9pZCBQcmVkaWNhdGVMb2NrUmVsYXRp b24oUmVsYXRpb24gcmVsYXRpb24sIFNuYXBzaG90IHNuYXBzaG90KTsKIGV4dGVybiB2b2lk IFByZWRpY2F0ZUxvY2tQYWdlKFJlbGF0aW9uIHJlbGF0aW9uLCBCbG9ja051bWJlciBibGtu bywgU25hcHNob3Qgc25hcHNob3QpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9wcm9jLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaAppbmRleCBmNTFiMDNkMzgy Mi4uNDZiNThhMTc0ODkgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5o CisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oCkBAIC0zMjQsNyArMzI0LDcgQEAg ZXh0ZXJuIFBHRExMSU1QT1JUIFBHUFJPQyAqTXlQcm9jOwogICogQWRkaW5nL1JlbW92aW5n IGFuIGVudHJ5IGludG8gdGhlIHByb2NhcnJheSByZXF1aXJlcyBob2xkaW5nICpib3RoKgog ICogUHJvY0FycmF5TG9jayBhbmQgWGlkR2VuTG9jayBpbiBleGNsdXNpdmUgbW9kZSAoaW4g dGhhdCBvcmRlcikuIEJvdGggYXJlCiAgKiBuZWVkZWQgYmVjYXVzZSB0aGUgZGVuc2UgYXJy YXlzIChzZWUgYmVsb3cpIGFyZSBhY2Nlc3NlZCBmcm9tCi0gKiBHZXROZXdUcmFuc2FjdGlv bklkKCkgYW5kIEdldFNuYXBzaG90RGF0YSgpLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBhZGQK KyAqIEdldE5ld1RyYW5zYWN0aW9uSWQoKSBhbmQgR2V0TVZDQ1NuYXBzaG90RGF0YSgpLCBh bmQgd2UgZG9uJ3Qgd2FudCB0byBhZGQKICAqIGZ1cnRoZXIgY29udGVudGlvbiBieSBib3Ro IHVzaW5nIHRoZSBzYW1lIGxvY2suIEFkZGluZy9SZW1vdmluZyBhIHByb2NhcnJheQogICog ZW50cnkgaXMgbXVjaCBsZXNzIGZyZXF1ZW50LgogICoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvcHJvY2FycmF5LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJh eS5oCmluZGV4IDdmNTcyN2MyNTg2Li44ZWVkYzJkNmI5ZiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3By b2NhcnJheS5oCkBAIC00NCw3ICs0NCw3IEBAIGV4dGVybiB2b2lkIEtub3duQXNzaWduZWRU cmFuc2FjdGlvbklkc0lkbGVNYWludGVuYW5jZSh2b2lkKTsKIGV4dGVybiBpbnQJR2V0TWF4 U25hcHNob3RYaWRDb3VudCh2b2lkKTsKIGV4dGVybiBpbnQJR2V0TWF4U25hcHNob3RTdWJ4 aWRDb3VudCh2b2lkKTsKIAotZXh0ZXJuIE1WQ0NTbmFwc2hvdCBHZXRTbmFwc2hvdERhdGEo TVZDQ1NuYXBzaG90IHNuYXBzaG90KTsKK2V4dGVybiBNVkNDU25hcHNob3RTaGFyZWQgR2V0 TVZDQ1NuYXBzaG90RGF0YSh2b2lkKTsKIAogZXh0ZXJuIGJvb2wgUHJvY0FycmF5SW5zdGFs bEltcG9ydGVkWG1pbihUcmFuc2FjdGlvbklkIHhtaW4sCiAJCQkJCQkJCQkJIFZpcnR1YWxU cmFuc2FjdGlvbklkICpzb3VyY2V2eGlkKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0 aWxzL3NuYXBtZ3IuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3NuYXBtZ3IuaAppbmRleCAxZjYy N2ZmOTY2ZC4uMzZjNjA0Mzc0MGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3V0aWxzL3Nu YXBtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9zbmFwbWdyLmgKQEAgLTU2LDYgKzU2 LDEzIEBAIGV4dGVybiBQR0RMTElNUE9SVCBTbmFwc2hvdERhdGEgU25hcHNob3RUb2FzdERh dGE7CiAJKChzbmFwc2hvdCktPnNuYXBzaG90X3R5cGUgPT0gU05BUFNIT1RfTVZDQyB8fCBc CiAJIChzbmFwc2hvdCktPnNuYXBzaG90X3R5cGUgPT0gU05BUFNIT1RfSElTVE9SSUNfTVZD QykKIAorLyogZXhwb3J0ZWQgc28gdGhhdCBHZXRNVkNDU25hcHNob3REYXRhKCkgY2FuIGFj Y2VzcyB0aGVzZSAqLworZXh0ZXJuIE1WQ0NTbmFwc2hvdFNoYXJlZCBsYXRlc3RTbmFwc2hv dFNoYXJlZDsKK2V4dGVybiBNVkNDU25hcHNob3RTaGFyZWQgc3BhcmVTbmFwc2hvdFNoYXJl ZDsKKworZXh0ZXJuIE1WQ0NTbmFwc2hvdFNoYXJlZCBBbGxvY01WQ0NTbmFwc2hvdFNoYXJl ZCh2b2lkKTsKK2V4dGVybiB2b2lkIEZyZWVNVkNDU25hcHNob3RTaGFyZWQoTVZDQ1NuYXBz aG90U2hhcmVkIHNoYXJlZCk7CisKIGV4dGVybiBTbmFwc2hvdCBHZXRUcmFuc2FjdGlvblNu YXBzaG90KHZvaWQpOwogZXh0ZXJuIFNuYXBzaG90IEdldExhdGVzdFNuYXBzaG90KHZvaWQp OwogZXh0ZXJuIHZvaWQgU25hcHNob3RTZXRDb21tYW5kSWQoQ29tbWFuZElkIGN1cmNpZCk7 CkBAIC04OSw3ICs5Niw3IEBAIGV4dGVybiB2b2lkIFdhaXRGb3JPbGRlclNuYXBzaG90cyhU cmFuc2FjdGlvbklkIGxpbWl0WG1pbiwgYm9vbCBwcm9ncmVzcyk7CiBleHRlcm4gYm9vbCBU aGVyZUFyZU5vUHJpb3JSZWdpc3RlcmVkU25hcHNob3RzKHZvaWQpOwogZXh0ZXJuIGJvb2wg SGF2ZVJlZ2lzdGVyZWRPckFjdGl2ZVNuYXBzaG90KHZvaWQpOwogCi1leHRlcm4gY2hhciAq RXhwb3J0U25hcHNob3QoTVZDQ1NuYXBzaG90IHNuYXBzaG90KTsKK2V4dGVybiBjaGFyICpF eHBvcnRTbmFwc2hvdChNVkNDU25hcHNob3RTaGFyZWQgc25hcHNob3QpOwogCiAvKgogICog VGhlc2UgbGl2ZSBpbiBwcm9jYXJyYXkuYyBiZWNhdXNlIHRoZXkncmUgaW50aW1hdGVseSBs aW5rZWQgdG8gdGhlCkBAIC0xMDUsNyArMTEyLDcgQEAgZXh0ZXJuIGJvb2wgR2xvYmFsVmlz Q2hlY2tSZW1vdmFibGVGdWxsWGlkKFJlbGF0aW9uIHJlbCwgRnVsbFRyYW5zYWN0aW9uSWQg ZnhpZCkKIC8qCiAgKiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgaW1wbGVtZW50aW5nIHZpc2li aWxpdHkgcm91dGluZXMgaW4gdGFibGUgQU1zLgogICovCi1leHRlcm4gYm9vbCBYaWRJbk1W Q0NTbmFwc2hvdChUcmFuc2FjdGlvbklkIHhpZCwgTVZDQ1NuYXBzaG90IHNuYXBzaG90KTsK K2V4dGVybiBib29sIFhpZEluTVZDQ1NuYXBzaG90KFRyYW5zYWN0aW9uSWQgeGlkLCBNVkND U25hcHNob3RTaGFyZWQgc25hcHNob3QpOwogCiAvKiBTdXBwb3J0IGZvciBjYXRhbG9nIHRp bWV0cmF2ZWwgZm9yIGxvZ2ljYWwgZGVjb2RpbmcgKi8KIHN0cnVjdCBIVEFCOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMvc25hcHNob3QuaCBiL3NyYy9pbmNsdWRlL3V0aWxz L3NuYXBzaG90LmgKaW5kZXggNDRiM2IyMGY3M2MuLjE5MzM2NmNlMDUyIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS91dGlscy9zbmFwc2hvdC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxz L3NuYXBzaG90LmgKQEAgLTExOSwxNyArMTE5LDQ0IEBAIHR5cGVkZWYgZW51bSBTbmFwc2hv dFR5cGUKIAlTTkFQU0hPVF9OT05fVkFDVVVNQUJMRSwKIH0gU25hcHNob3RUeXBlOwogCit0 eXBlZGVmIHN0cnVjdCBNVkNDU25hcHNob3RTaGFyZWREYXRhICpNVkNDU25hcHNob3RTaGFy ZWQ7CisKK3R5cGVkZWYgZW51bSBNVkNDU25hcHNob3RLaW5kCit7CisJU05BUFNIT1RfU1RB VElDLAorCVNOQVBTSE9UX0FDVElWRSwKKwlTTkFQU0hPVF9SRUdJU1RFUkVELAorfSBNVkND U25hcHNob3RLaW5kOworCiAvKgogICogU3RydWN0IHJlcHJlc2VudGluZyBhIG5vcm1hbCBN VkNDIHNuYXBzaG90LgogICoKICAqIE1WQ0Mgc25hcHNob3RzIGNvbWUgaW4gdHdvIHZhcmlh bnRzOiB0aG9zZSB0YWtlbiBkdXJpbmcgcmVjb3ZlcnkgaW4gaG90CiAgKiBzdGFuZGJ5IG1v ZGUsIGFuZCAibm9ybWFsIiBNVkNDIHNuYXBzaG90cy4gIFRoZXkgYXJlIGRpc3Rpbmd1aXNo ZWQgYnkKLSAqIHRha2VuRHVyaW5nUmVjb3ZlcnkuCisgKiBzaGFyZWQtPnRha2VuRHVyaW5n UmVjb3ZlcnkuCiAgKi8KIHR5cGVkZWYgc3RydWN0IE1WQ0NTbmFwc2hvdERhdGEKIHsKIAlT bmFwc2hvdFR5cGUgc25hcHNob3RfdHlwZTsgLyogdHlwZSBvZiBzbmFwc2hvdCwgbXVzdCBi ZSBmaXJzdCAqLwogCisJLyoKKwkgKiBNb3N0IGZpZWxkcyBhcmUgaW4gdGhpcyBzZXBhcmF0 ZSBzdHJ1Y3Qgd2hpY2ggY2FuIGJlIHJldXNlZCBhbmQgc2hhcmVkCisJICogYmV0d2VlbiBz bmFwc2hvdHMgdGhhdCBvbmx5IGRpZmZlciBpbiB0aGUgY29tbWFuZCBJRC4gIEl0IGlzIHJl ZmVyZW5jZQorCSAqIGNvdW50ZWQgc2VwYXJhdGVseS4KKwkgKi8KKwlNVkNDU25hcHNob3RT aGFyZWQgc2hhcmVkOworCisJQ29tbWFuZElkCWN1cmNpZDsJCQkvKiBpbiBteSB4YWN0LCBD SUQgPCBjdXJjaWQgYXJlIHZpc2libGUgKi8KKworCS8qCisJICogQm9vay1rZWVwaW5nIGlu Zm9ybWF0aW9uLCB1c2VkIGJ5IHRoZSBzbmFwc2hvdCBtYW5hZ2VyCisJICovCisJTVZDQ1Nu YXBzaG90S2luZCBraW5kOworCWJvb2wJCXZhbGlkOworfSBNVkNDU25hcHNob3REYXRhOwor Cit0eXBlZGVmIHN0cnVjdCBNVkNDU25hcHNob3RTaGFyZWREYXRhCit7CiAJLyoKIAkgKiBB biBNVkNDIHNuYXBzaG90IGNhbiBuZXZlciBzZWUgdGhlIGVmZmVjdHMgb2YgWElEcyA+PSB4 bWF4LiBJdCBjYW4gc2VlCiAJICogdGhlIGVmZmVjdHMgb2YgYWxsIG9sZGVyIFhJRHMgZXhj ZXB0IHRob3NlIGxpc3RlZCBpbiB0aGUgc25hcHNob3QuIHhtaW4KQEAgLTE2MCwyNSArMTg3 LDE3IEBAIHR5cGVkZWYgc3RydWN0IE1WQ0NTbmFwc2hvdERhdGEKIAlib29sCQlzdWJvdmVy Zmxvd2VkOwkvKiBoYXMgdGhlIHN1YnhpcCBhcnJheSBvdmVyZmxvd2VkPyAqLwogCiAJYm9v bAkJdGFrZW5EdXJpbmdSZWNvdmVyeTsJLyogcmVjb3Zlcnktc2hhcGVkIHNuYXBzaG90PyAq LwotCWJvb2wJCWNvcGllZDsJCQkvKiBmYWxzZSBpZiBpdCdzIGEgc3RhdGljIHNuYXBzaG90 ICovCi0JYm9vbAkJdmFsaWQ7CQkJLyogaXMgdGhpcyBzbmFwc2hvdCB2YWxpZD8gKi8KLQot CUNvbW1hbmRJZAljdXJjaWQ7CQkJLyogaW4gbXkgeGFjdCwgQ0lEIDwgY3VyY2lkIGFyZSB2 aXNpYmxlICovCi0KLQkvKgotCSAqIEJvb2sta2VlcGluZyBpbmZvcm1hdGlvbiwgdXNlZCBi eSB0aGUgc25hcHNob3QgbWFuYWdlcgotCSAqLwotCXVpbnQzMgkJYWN0aXZlX2NvdW50Owkv KiByZWZjb3VudCBvbiBBY3RpdmVTbmFwc2hvdCBzdGFjayAqLwotCXVpbnQzMgkJcmVnZF9j b3VudDsJCS8qIHJlZmNvdW50IG9mIHJlZ2lzdHJhdGlvbnMgaW4gcmVzb3duZXJzICovCi0J ZGxpc3Rfbm9kZQlub2RlOwkJCS8qIGxpbmsgaW4gVmFsaWRTbmFwc2hvdHMgKi8KIAogCS8q Ci0JICogVGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gY291bnQgYXQgdGhlIHRpbWUgR2V0 U25hcHNob3REYXRhKCkgYnVpbHQKLQkgKiB0aGlzIHNuYXBzaG90LiBBbGxvd3MgdG8gYXZv aWQgcmUtY29tcHV0aW5nIHN0YXRpYyBzbmFwc2hvdHMgd2hlbiBubwotCSAqIHRyYW5zYWN0 aW9ucyBjb21wbGV0ZWQgc2luY2UgdGhlIGxhc3QgR2V0U25hcHNob3REYXRhKCkuCisJICog VGhlIHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gY291bnQgYXQgdGhlIHRpbWUgR2V0TVZDQ1Nu YXBzaG90RGF0YSgpCisJICogYnVpbHQgdGhpcyBzbmFwc2hvdC4gQWxsb3dzIHRvIGF2b2lk IHJlLWNvbXB1dGluZyBzdGF0aWMgc25hcHNob3RzIHdoZW4KKwkgKiBubyB0cmFuc2FjdGlv bnMgY29tcGxldGVkIHNpbmNlIHRoZSBsYXN0IEdldE1WQ0NTbmFwc2hvdERhdGEoKS4KIAkg Ki8KIAl1aW50NjQJCXNuYXBYYWN0Q29tcGxldGlvbkNvdW50OwotfSBNVkNDU25hcHNob3RE YXRhOworCisJdWludDMyCQlyZWZjb3VudDsKKwlkbGlzdF9ub2RlCW5vZGU7CQkJLyogbGlu ayBpbiBWYWxpZFNuYXBzaG90cyAqLworfSBNVkNDU25hcHNob3RTaGFyZWREYXRhOwogCiB0 eXBlZGVmIHN0cnVjdCBNVkNDU25hcHNob3REYXRhICpNVkNDU25hcHNob3Q7CiAKZGlmZiAt LWdpdCBhL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0IGIvc3JjL3Rvb2xzL3Bn aW5kZW50L3R5cGVkZWZzLmxpc3QKaW5kZXggYzhlZDE4Y2Y1ODAuLjk5MGM4M2M5MDJhIDEw MDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMv dG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMTYzNiw2ICsxNjM2LDggQEAgTUlO SURVTVBfVFlQRQogTUpFdmFsUmVzdWx0CiBNVFRhcmdldFJlbExvb2t1cAogTVZDQ1NuYXBz aG90RGF0YQorTVZDQ1NuYXBzaG90S2luZAorTVZDQ1NuYXBzaG90U2hhcmVkRGF0YQogTVZE ZXBlbmRlbmNpZXMKIE1WRGVwZW5kZW5jeQogTVZORGlzdGluY3QKLS0gCjIuMzkuNQoK --------------nSXAXBhgWt0AUd9uE0wCc0X0 Content-Type: text/x-patch; charset=UTF-8; name="v6-0008-XXX-add-perf-test.patch" Content-Disposition: attachment; filename="v6-0008-XXX-add-perf-test.patch" Content-Transfer-Encoding: base64 RnJvbSA1MTFmNjdiYzk1NzljNWZjZWM5MjNmYTBmY2IyMDM3MDU0NzU2MWYyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IE1vbiwgMzEgTWFyIDIwMjUgMjI6Mjk6NDQgKzAzMDAK U3ViamVjdDogW1BBVENIIHY2IDA4LzEyXSBYWFg6IGFkZCBwZXJmIHRlc3QKClRoaXMgaXMg bm90IGludGVuZGVkIHRvIGJlIG1lcmdlZC4gQnV0IGl0J3MgYmVlbiB1c2VmdWwgdG8gaGF2 ZSB0aGlzCmluIHRoZSB0cmVlIGZvciBzb21lIHF1aWNrIHBlcmYgdGVzdGluZyBkdXJpbmcg ZGV2ZWxvcG1lbnQuCgpUbyBydW4gaXQsIEkndmUgdXNlZDoKCihjZCBidWlsZC1yZWxlYXNl ICYmIG5pbmphICYmICBybSAtcmYgdG1wX2luc3RhbGwgJiYgbWVzb24gdGVzdCAtLXN1aXRl IHNldHVwIC0tc3VpdGUgdGVzdF9taXNjOyBncmVwIFRFU1QgdGVzdHJ1bi90ZXN0X21pc2Mv MDAwX2Nzbl9wZXJmL2xvZy9yZWdyZXNzX2xvZ18wMDBfY3NuX3BlcmYgKQoKSXQgcnVucyB0 aGUgb3RoZXIgdGVzdF9taXNjIHRlc3RzIGNvbmN1cnJlbnRseSwgYnV0IHRoZXkgZmluaXNo IGEgbG90CmZhc3RlciBzbyB0aGV5IGRvbid0IGFmZmVjdCB0aGUgcmVzdWx0cyBtdWNoLgot LS0KIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL21lc29uLmJ1aWxkICAgICAgIHwgICAx ICsKIHNyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNjL3QvMDAwX2Nzbl9wZXJmLnBsIHwgMzM3 ICsrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMzM4IGluc2VydGlvbnMo KykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAw MF9jc25fcGVyZi5wbAoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9taXNj L21lc29uLmJ1aWxkIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvbWVzb24uYnVpbGQK aW5kZXggOWM1MGRlN2VmYjAuLjFjMzg1MTIzNDQ4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9t b2R1bGVzL3Rlc3RfbWlzYy9tZXNvbi5idWlsZAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rl c3RfbWlzYy9tZXNvbi5idWlsZApAQCAtOSw2ICs5LDcgQEAgdGVzdHMgKz0gewogICAgICAg ICdlbmFibGVfaW5qZWN0aW9uX3BvaW50cyc6IGdldF9vcHRpb24oJ2luamVjdGlvbl9wb2lu dHMnKSA/ICd5ZXMnIDogJ25vJywKICAgICB9LAogICAgICd0ZXN0cyc6IFsKKyAgICAgICd0 LzAwMF9jc25fcGVyZi5wbCcsCiAgICAgICAndC8wMDFfY29uc3RyYWludF92YWxpZGF0aW9u LnBsJywKICAgICAgICd0LzAwMl90YWJsZXNwYWNlLnBsJywKICAgICAgICd0LzAwM19jaGVj a19ndWMucGwnLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X21pc2MvdC8w MDBfY3NuX3BlcmYucGwgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90LzAwMF9jc25f cGVyZi5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzkxNTg3 OGE0MDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfbWlzYy90 LzAwMF9jc25fcGVyZi5wbApAQCAtMCwwICsxLDMzNyBAQAorCisjIENvcHlyaWdodCAoYykg MjAyMS0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCisjIFZl cmlmeSB0aGF0IEFMVEVSIFRBQkxFIG9wdGltaXplcyBjZXJ0YWluIG9wZXJhdGlvbnMgYXMg ZXhwZWN0ZWQKKwordXNlIHN0cmljdDsKK3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsK K3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6 OlV0aWxzOwordXNlIFRlc3Q6Ok1vcmU7Cit1c2UgVGltZTo6SGlSZXMgcXcodGltZSk7CisK K215ICRkdXJhdGlvbiA9IDE1OyAjIHNlY29uZHMKK215ICRtaW5pdGVyYXRpb25zID0gMzsK KworIyBJbml0aWFsaXplIGEgdGVzdCBjbHVzdGVyCitteSAkcHJpbWFyeSA9IFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHJpbWFyeScpOworJHByaW1hcnktPmluaXQoKTsK KyMgVHVybiBtZXNzYWdlIGxldmVsIHVwIHRvIERFQlVHMSBzbyB0aGF0IHdlIGdldCB0aGUg bWVzc2FnZXMgd2Ugd2FudCB0byBzZWUKKyRwcmltYXJ5LT5hcHBlbmRfY29uZigncG9zdGdy ZXNxbC5jb25mJywgJ21heF93YWxfc2VuZGVycyA9IDUnKTsKKyRwcmltYXJ5LT5hcHBlbmRf Y29uZigncG9zdGdyZXNxbC5jb25mJywgJ3dhbF9sZXZlbD1yZXBsaWNhJyk7CiskcHJpbWFy eS0+YXBwZW5kX2NvbmYoJ3Bvc3RncmVzcWwuY29uZicsICdtYXhfY29ubmVjdGlvbnMgPSAx MDA1Jyk7CiskcHJpbWFyeS0+c3RhcnQ7CiskcHJpbWFyeS0+YmFja3VwKCdia3AnKTsKKwor bXkgJHJlcGxpY2EgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3JlcGxpY2En KTsKKyRyZXBsaWNhLT5pbml0X2Zyb21fYmFja3VwKCRwcmltYXJ5LCAnYmtwJywgaGFzX3N0 cmVhbWluZyA9PiAxKTsKKyRyZXBsaWNhLT5hcHBlbmRfY29uZigncG9zdGdyZXNxbC5jb25m JywgInNoYXJlZF9idWZmZXJzPScxIEdCJyIpOworJHJlcGxpY2EtPnN0YXJ0OworCitzdWIg d2FpdF9jYXRjaHVwCit7CisJbXkgKCRwcmltYXJ5LCAkcmVwbGljYSkgPSBAXzsKKwkKKwlt eSAkcHJpbWFyeV9sc24gPQorCSAgJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi U0VMRUNUIHBnX2N1cnJlbnRfd2FsX2xzbigpIik7CisJbXkgJGNhdWdodHVwX3F1ZXJ5ID0K KwkgICJTRUxFQ1QgJyRwcmltYXJ5X2xzbic6OnBnX2xzbiA8PSBwZ19sYXN0X3dhbF9yZXBs YXlfbHNuKCkiOworCSRyZXBsaWNhLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsICRj YXVnaHR1cF9xdWVyeSkKKwkgIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9y IHN0YW5kYnkgdG8gY2F0Y2ggdXAiOworfQorCitzdWIgcmVwZWF0X2FuZF90aW1lX3NxbAor eworICAJbXkgKCRuYW1lLCAkbm9kZSwgJHNxbCkgPSBAXzsKKworCW15ICRzZXNzaW9uID0g ICRub2RlLT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJywgb25fZXJyb3JfZGllID0+IDEp OworCSRzZXNzaW9uLT5xdWVyeV9zYWZlKCJTRVQgbWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVy X2dhdGhlcj0wIik7CisKKwlteSAkaXRlcmF0aW9ucyA9IDA7CisKKwlteSAkbm93OworCW15 ICRlbGFwc2VkOworICAgIG15ICRiZWdpbl90aW1lID0gdGltZSgpOworCXdoaWxlICgxKSB7 CisJCSRzZXNzaW9uLT5xdWVyeV9zYWZlKCRzcWwpOworCQkkbm93ID0gdGltZSgpOworCQkk aXRlcmF0aW9ucyA9ICRpdGVyYXRpb25zICsgMTsKKworCQkkZWxhcHNlZCA9ICRub3cgLSAk YmVnaW5fdGltZTsKKwkJaWYgKCRlbGFwc2VkID4gJGR1cmF0aW9uICYmICRpdGVyYXRpb25z ID49ICRtaW5pdGVyYXRpb25zKSB7CisJCQlsYXN0OworCQl9CisJfQorCisJbXkgJHBlcml0 ZXIgPSAkZWxhcHNlZCAvICRpdGVyYXRpb25zOworCisJcGFzcyAoIlRFU1QgJG5hbWU6ICRl bGFwc2VkIHMsICRpdGVyYXRpb25zIGl0ZXJhdGlvbnMsICRwZXJpdGVyIHMgLyBpdGVyYXRp b24iKTsKK30KKworCiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUg VEFCTEUgbGl0dGxlIChpIGludCk7Iik7CiskcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyBsaXR0bGUgVkFMVUVTICgxKTsiKTsKKworc3ViIGNvbnN1bWVf eGlkcworeworCW15ICgkbm9kZSkgPSBAXzsKKworCW15ICRzZXNzaW9uID0gJG5vZGUtPmJh Y2tncm91bmRfcHNxbCgncG9zdGdyZXMnLCBvbl9lcnJvcl9kaWUgPT4gMSk7CisJZm9yKG15 ICRpID0gMDsgJGkgPCAyMDsgJGkrKykgeworCQkkc2Vzc2lvbi0+cXVlcnlfc2FmZShxe2Rv ICQkCisgIGJlZ2luCisgICAgZm9yIGkgaW4gMS4uNTAgbG9vcAorICAgICAgYmVnaW4KKyAg ICAgICAgREVMRVRFIGZyb20gbGl0dGxlOworICAgICAgICBwZXJmb3JtIDEgLyAwOworICAg ICAgZXhjZXB0aW9uCisgICAgICAgIHdoZW4gZGl2aXNpb25fYnlfemVybyB0aGVuIHBlcmZv cm0gMCAvKiBkbyBub3RoaW5nICovOworICAgICAgICB3aGVuIG90aGVycyB0aGVuIHJhaXNl ICdmYWlsOiAlJywgc3FsZXJybTsKKyAgICAgIGVuZDsKKyAgICBlbmQgbG9vcDsKKyAgZW5k CiskJDt9KTsKKwl9CisJJHNlc3Npb24tPnF1aXQ7Cit9CisKKyMgVEVTVCBmZXcteGFjdHMK KyMKKyMgQ3ljbGUgdGhyb3VnaCA0IGRpZmZlcmVudCB0b3AtbGV2ZWwgWElEcworIworIyAx MDAxLCAxMDAyLCAxMDAzLCAxMDA0LCAxMDAxLCAxMDAyLCAxMDAzLCAxMDA0LCAuLi4KKyMK K2lmICgxKQoreworCSRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBU QUJMRSB0YmwoaSBpbnQpJyk7CisJJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi SU5TRVJUIElOVE8gdGJsIFNFTEVDVCBnIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDAw MCkgZzsiKTsKKwkkcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJWQUNVVU0gRlJF RVpFIHRibDsiKTsKKworCW15IEBwcmltYXJ5X3Nlc3Npb25zID0gKCk7CisJbXkgJG51bV9j b25uZWN0aW9ucyA9IDQ7CisJZm9yKG15ICRpID0gMDsgJGkgPCAkbnVtX2Nvbm5lY3Rpb25z OyAkaSsrKSB7CisJCW15ICRwcmltYXJ5X3Nlc3Npb24gPSAgJHByaW1hcnktPmJhY2tncm91 bmRfcHNxbCgncG9zdGdyZXMnLCBvbl9lcnJvcl9kaWUgPT4gMSk7CisJCSRwcmltYXJ5X3Nl c3Npb24tPnF1ZXJ5X3NhZmUoIkJFR0lOOyIpOworCQkkcHJpbWFyeV9zZXNzaW9uLT5xdWVy eV9zYWZlKCJERUxFVEUgRlJPTSB0YmwgV0hFUkUgaSAlICRudW1fY29ubmVjdGlvbnMgPSAk aTsiKTsKKwkJcHVzaChAcHJpbWFyeV9zZXNzaW9ucywgJHByaW1hcnlfc2Vzc2lvbik7CisJ fQorCisJIyBDb25zdW1lIG9uZSBtb3JlIFhJRCwgdG8gYnVtcCB1cCAibGFzdCBjb21taXR0 ZWQgWElEIgorCSRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgInNlbGVjdCB0eGlk X2N1cnJlbnQoKSIpOworCisJd2FpdF9jYXRjaHVwKCRwcmltYXJ5LCAkcmVwbGljYSk7CisK KwlyZXBlYXRfYW5kX3RpbWVfc3FsKCJmZXcteGFjdHMiLCAkcmVwbGljYSwgInNlbGVjdCBj b3VudCgqKSBmcm9tIHRibCIpOworCisJZm9yKG15ICRpID0gMDsgJGkgPCAkbnVtX2Nvbm5l Y3Rpb25zOyAkaSsrKSB7CisJCSRwcmltYXJ5X3Nlc3Npb25zWyRpXS0+cXVpdDsKKwl9CisJ JHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0YmwiKTsKK30K KworIyBURVNUIG1hbnkteGFjdHMKKyMKKyMgbGlrZSBmZXcteGFjdHMsIGJ1dCB3ZSBjeWNs ZSB0aHJvdWdoIDEwMCBkaWZmZXJlbnQgWElEcyBpbnN0ZWFkIG9mIDQuCisjCisjIDEwMDEs IDEwMDIsIDEwMDMsIC4uLiAxMTAwLCAxMDAxLCAxMDAyLCAxMDAzLCAuLi4gMTEwMCAgLi4u LgorIworaWYgKDEpCit7CisJJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JF QVRFIFRBQkxFIHRibChpIGludCknKTsKKwkkcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0YmwgU0VMRUNUIGcgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwg MTAwMDAwKSBnOyIpOworCSRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlZBQ1VV TSBGUkVFWkUgdGJsOyIpOworCisJbXkgQHByaW1hcnlfc2Vzc2lvbnMgPSAoKTsKKwlteSAk bnVtX2Nvbm5lY3Rpb25zID0gMTAwOworCWZvcihteSAkaSA9IDA7ICRpIDwgJG51bV9jb25u ZWN0aW9uczsgJGkrKykgeworCQlteSAkcHJpbWFyeV9zZXNzaW9uID0gICRwcmltYXJ5LT5i YWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJywgb25fZXJyb3JfZGllID0+IDEpOworCQkkcHJp bWFyeV9zZXNzaW9uLT5xdWVyeV9zYWZlKCJCRUdJTjsiKTsKKwkJJHByaW1hcnlfc2Vzc2lv bi0+cXVlcnlfc2FmZSgiREVMRVRFIEZST00gdGJsIFdIRVJFIGkgJSAkbnVtX2Nvbm5lY3Rp b25zID0gJGk7Iik7CisJCXB1c2goQHByaW1hcnlfc2Vzc2lvbnMsICRwcmltYXJ5X3Nlc3Np b24pOworCX0KKworCSMgQ29uc3VtZSBvbmUgbW9yZSBYSUQsIHRvIGJ1bXAgdXAgImxhc3Qg Y29tbWl0dGVkIFhJRCIKKwkkcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJzZWxl Y3QgdHhpZF9jdXJyZW50KCkiKTsKKworCXdhaXRfY2F0Y2h1cCgkcHJpbWFyeSwgJHJlcGxp Y2EpOworCisJcmVwZWF0X2FuZF90aW1lX3NxbCgibWFueS14YWN0cyIsICRyZXBsaWNhLCAi c2VsZWN0IGNvdW50KCopIGZyb20gdGJsIik7CisKKwlmb3IobXkgJGkgPSAwOyAkaSA8ICRu dW1fY29ubmVjdGlvbnM7ICRpKyspIHsKKwkJJHByaW1hcnlfc2Vzc2lvbnNbJGldLT5xdWl0 OworCX0KKwkkcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRi bCIpOworfQorCisjIFRFU1QgbWFueS14YWN0cy13aWRlLWFwYXJ0CisjCisjIGxpa2UgbWFu eS14YWN0cywgYnV0IHRoZSBYSURzIGFyZSBtb3JlIHNwcmVhZCBvdXQsIHNvIHRoYXQgdGhl eSBkb24ndCBmaXQgaW4gdGhlCisjIFNMUlUgY2FjaGVzLgorIworIyAxMDAwLCAyMDAwLCAz MDAwLCA0MDAwLCAuLi4uCitpZiAoMSkKK3sKKwkkcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICdDUkVBVEUgVEFCTEUgdGJsKGkgaW50KScpOworCSRwcmltYXJ5LT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRibCBTRUxFQ1QgZyBGUk9NIGdlbmVyYXRl X3NlcmllcygxLCAxMDAwMDApIGc7Iik7CisJJHByaW1hcnktPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiVkFDVVVNIEZSRUVaRSB0Ymw7Iik7CisKKwlteSBAcHJpbWFyeV9zZXNzaW9ucyA9 ICgpOworCW15ICRudW1fY29ubmVjdGlvbnMgPSAxMDA7CisJZm9yKG15ICRpID0gMDsgJGkg PCAkbnVtX2Nvbm5lY3Rpb25zOyAkaSsrKSB7CisJCW15ICRwcmltYXJ5X3Nlc3Npb24gPSAg JHByaW1hcnktPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnLCBvbl9lcnJvcl9kaWUgPT4g MSk7CisKKwkJY29uc3VtZV94aWRzKCRwcmltYXJ5KTsKKworCQkkcHJpbWFyeV9zZXNzaW9u LT5xdWVyeV9zYWZlKCJCRUdJTjsiKTsKKwkJJHByaW1hcnlfc2Vzc2lvbi0+cXVlcnlfc2Fm ZSgiREVMRVRFIEZST00gdGJsIFdIRVJFIGkgJSAkbnVtX2Nvbm5lY3Rpb25zID0gJGk7Iik7 CisJCXB1c2goQHByaW1hcnlfc2Vzc2lvbnMsICRwcmltYXJ5X3Nlc3Npb24pOworCX0KKwor CSMgQ29uc3VtZSBvbmUgbW9yZSBYSUQsIHRvIGJ1bXAgdXAgImxhc3QgY29tbWl0dGVkIFhJ RCIKKwkkcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJzZWxlY3QgdHhpZF9jdXJy ZW50KCkiKTsKKworCXdhaXRfY2F0Y2h1cCgkcHJpbWFyeSwgJHJlcGxpY2EpOworCisJcmVw ZWF0X2FuZF90aW1lX3NxbCgibWFueS14YWN0cy13aWRlLWFwYXJ0IiwgJHJlcGxpY2EsICJz ZWxlY3QgY291bnQoKikgZnJvbSB0YmwiKTsKKworCWZvcihteSAkaSA9IDA7ICRpIDwgJG51 bV9jb25uZWN0aW9uczsgJGkrKykgeworCQkkcHJpbWFyeV9zZXNzaW9uc1skaV0tPnF1aXQ7 CisJfQorCSRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdGJs Iik7Cit9CisKKyMgVEVTVDogZmV3LXN1YnhhY3RzCitpZiAoMSkKK3sKKwkkcHJpbWFyeS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgVEFCTEUgdGJsKGkgaW50KScpOworCSRw cmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRibCBTRUxFQ1Qg ZyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMDApIGc7Iik7CisJJHByaW1hcnktPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiVkFDVVVNIEZSRUVaRSB0Ymw7Iik7CisKKwlteSAkcHJp bWFyeV9zZXNzaW9uID0gICRwcmltYXJ5LT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJywg b25fZXJyb3JfZGllID0+IDEpOworCSRwcmltYXJ5X3Nlc3Npb24tPnF1ZXJ5X3NhZmUoIkJF R0lOOyIpOworCW15ICRudW1fc3VieGFjdHMgPSA0OworCWZvcihteSAkaSA9IDA7ICRpIDwg JG51bV9zdWJ4YWN0czsgJGkrKykgeworCQkkcHJpbWFyeV9zZXNzaW9uLT5xdWVyeV9zYWZl KCJzYXZlcG9pbnQgc3AkaTsiKTsKKwkJJHByaW1hcnlfc2Vzc2lvbi0+cXVlcnlfc2FmZSgi REVMRVRFIEZST00gdGJsIFdIRVJFIGkgJSAkbnVtX3N1YnhhY3RzID0gJGk7Iik7CisJCSRw cmltYXJ5X3Nlc3Npb24tPnF1ZXJ5X3NhZmUoInJlbGVhc2Ugc2F2ZXBvaW50IHNwJGk7Iik7 CisJfQorCisJIyBDb25zdW1lIG9uZSBtb3JlIFhJRCwgdG8gYnVtcCB1cCAibGFzdCBjb21t aXR0ZWQgWElEIgorCSRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgInNlbGVjdCB0 eGlkX2N1cnJlbnQoKSIpOworCisJd2FpdF9jYXRjaHVwKCRwcmltYXJ5LCAkcmVwbGljYSk7 CisKKwlyZXBlYXRfYW5kX3RpbWVfc3FsKCJmZXctc3VieGFjdHMiLCAkcmVwbGljYSwgInNl bGVjdCBjb3VudCgqKSBmcm9tIHRibCIpOworCisJJHByaW1hcnlfc2Vzc2lvbi0+cXVpdDsK KwkkcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRibCIpOwor fQorCisKKyMgVEVTVDogbWFueS1zdWJ4YWN0cworaWYgKDEpCit7CisJJHByaW1hcnktPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIFRBQkxFIHRibChpIGludCknKTsKKwkkcHJp bWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0YmwgU0VMRUNUIGcg RlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMDAwKSBnOyIpOworCSRwcmltYXJ5LT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIlZBQ1VVTSBGUkVFWkUgdGJsOyIpOworCisJbXkgJHByaW1h cnlfc2Vzc2lvbiA9ICAkcHJpbWFyeS0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycsIG9u X2Vycm9yX2RpZSA9PiAxKTsKKwkkcHJpbWFyeV9zZXNzaW9uLT5xdWVyeV9zYWZlKCJCRUdJ TjsiKTsKKwlteSAkbnVtX3N1YnhhY3RzID0gMTAwMDsKKwlmb3IobXkgJGkgPSAwOyAkaSA8 ICRudW1fc3VieGFjdHM7ICRpKyspIHsKKwkJJHByaW1hcnlfc2Vzc2lvbi0+cXVlcnlfc2Fm ZSgic2F2ZXBvaW50IHNwJGk7Iik7CisJCSRwcmltYXJ5X3Nlc3Npb24tPnF1ZXJ5X3NhZmUo IkRFTEVURSBGUk9NIHRibCBXSEVSRSBpICUgJG51bV9zdWJ4YWN0cyA9ICRpOyIpOworCQkk cHJpbWFyeV9zZXNzaW9uLT5xdWVyeV9zYWZlKCJyZWxlYXNlIHNhdmVwb2ludCBzcCRpOyIp OworCX0KKworCSMgQ29uc3VtZSBvbmUgbW9yZSBYSUQsIHRvIGJ1bXAgdXAgImxhc3QgY29t bWl0dGVkIFhJRCIKKwkkcHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJzZWxlY3Qg dHhpZF9jdXJyZW50KCkiKTsKKworCXdhaXRfY2F0Y2h1cCgkcHJpbWFyeSwgJHJlcGxpY2Ep OworCisJcmVwZWF0X2FuZF90aW1lX3NxbCgibWFueS1zdWJ4YWN0cyIsICRyZXBsaWNhLCAi c2VsZWN0IGNvdW50KCopIGZyb20gdGJsIik7CisKKwkkcHJpbWFyeV9zZXNzaW9uLT5xdWl0 OworCSRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdGJsIik7 Cit9CisKKyMgVEVTVDogbWFueS1zdWJ4YWN0cy13aWRlLWFwYXJ0CitpZiAoMSkKK3sKKwkk cHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgVEFCTEUgdGJsKGkgaW50 KScpOworCSRwcmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRi bCBTRUxFQ1QgZyBGUk9NIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwMDApIGc7Iik7CisJJHBy aW1hcnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVkFDVVVNIEZSRUVaRSB0Ymw7Iik7CisK KwlteSAkcHJpbWFyeV9zZXNzaW9uID0gICRwcmltYXJ5LT5iYWNrZ3JvdW5kX3BzcWwoJ3Bv c3RncmVzJywgb25fZXJyb3JfZGllID0+IDEpOworCSRwcmltYXJ5X3Nlc3Npb24tPnF1ZXJ5 X3NhZmUoIkJFR0lOOyIpOworCW15ICRudW1fc3VieGFjdHMgPSAxMDAwOworCWZvcihteSAk aSA9IDA7ICRpIDwgJG51bV9zdWJ4YWN0czsgJGkrKykgeworCQljb25zdW1lX3hpZHMoJHBy aW1hcnkpOworCQkkcHJpbWFyeV9zZXNzaW9uLT5xdWVyeV9zYWZlKCJzYXZlcG9pbnQgc3Ak aTsiKTsKKwkJJHByaW1hcnlfc2Vzc2lvbi0+cXVlcnlfc2FmZSgiREVMRVRFIEZST00gdGJs IFdIRVJFIGkgJSAkbnVtX3N1YnhhY3RzID0gJGk7Iik7CisJCSRwcmltYXJ5X3Nlc3Npb24t PnF1ZXJ5X3NhZmUoInJlbGVhc2Ugc2F2ZXBvaW50IHNwJGk7Iik7CisJfQorCisJIyBDb25z dW1lIG9uZSBtb3JlIFhJRCwgdG8gYnVtcCB1cCAibGFzdCBjb21taXR0ZWQgWElEIgorCSRw cmltYXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgInNlbGVjdCB0eGlkX2N1cnJlbnQoKSIp OworCisJd2FpdF9jYXRjaHVwKCRwcmltYXJ5LCAkcmVwbGljYSk7CisKKwlyZXBlYXRfYW5k X3RpbWVfc3FsKCJtYW55LXN1YnhhY3RzLXdpZGUtYXBhcnQiLCAkcmVwbGljYSwgInNlbGVj dCBjb3VudCgqKSBmcm9tIHRibCIpOworCisJJHByaW1hcnlfc2Vzc2lvbi0+cXVpdDsKKwkk cHJpbWFyeS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRibCIpOworfQor CisjIFRFU1Q6IGluc2VydC1hbGwtZGlmZmVyZW50LXhpZHMKK2lmICgxKQoreworCSRwcmlt YXJ5LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBUQUJMRSB0YmwoaSBpbnQpJyk7 CisKKwlteSBAcHJpbWFyeV9zZXNzaW9ucyA9ICgpOworCW15ICRudW1fY29ubmVjdGlvbnMg PSAxMDAwOworCWZvcihteSAkaSA9IDA7ICRpIDwgJG51bV9jb25uZWN0aW9uczsgJGkrKykg eworCQlteSAkcHJpbWFyeV9zZXNzaW9uID0gICRwcmltYXJ5LT5iYWNrZ3JvdW5kX3BzcWwo J3Bvc3RncmVzJywgb25fZXJyb3JfZGllID0+IDEpOworCQkkcHJpbWFyeV9zZXNzaW9uLT5x dWVyeV9zYWZlKCJCRUdJTjsiKTsKKwkJJHByaW1hcnlfc2Vzc2lvbi0+cXVlcnlfc2FmZSgi SU5TRVJUIElOVE8gdGJsIFZBTFVFUyAoJGkpIik7CisJCXB1c2goQHByaW1hcnlfc2Vzc2lv bnMsICRwcmltYXJ5X3Nlc3Npb24pOworCX0KKworCSMgQ29uc3VtZSBvbmUgbW9yZSBYSUQs IHRvIGJ1bXAgdXAgImxhc3QgY29tbWl0dGVkIFhJRCIKKwkkcHJpbWFyeS0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJzZWxlY3QgdHhpZF9jdXJyZW50KCkiKTsKKworCXdhaXRfY2F0Y2h1 cCgkcHJpbWFyeSwgJHJlcGxpY2EpOworCisJcmVwZWF0X2FuZF90aW1lX3NxbCgiaW5zZXJ0 LWFsbC1kaWZmZXJlbnQteGlkcyIsICRyZXBsaWNhLCAic2VsZWN0IGNvdW50KCopIGZyb20g dGJsIik7CisKKwlmb3IobXkgJGkgPSAwOyAkaSA8ICRudW1fY29ubmVjdGlvbnM7ICRpKysp IHsKKwkJJHByaW1hcnlfc2Vzc2lvbnNbJGldLT5xdWl0OworCX0KKwkkcHJpbWFyeS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRibCIpOworfQorCisjIFRFU1Q6IGlu c2VydC1hbGwtZGlmZmVyZW50LXN1YnhpZHMKK2lmICgxKQoreworCSRwcmltYXJ5LT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBUQUJMRSB0YmwoaSBpbnQpJyk7CisJJHByaW1h cnktPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVkFDVVVNIEZSRUVaRSB0Ymw7Iik7CisKKwlt eSAkcHJpbWFyeV9zZXNzaW9uID0gICRwcmltYXJ5LT5iYWNrZ3JvdW5kX3BzcWwoJ3Bvc3Rn cmVzJywgb25fZXJyb3JfZGllID0+IDEpOworCSRwcmltYXJ5X3Nlc3Npb24tPnF1ZXJ5X3Nh ZmUoIkJFR0lOOyIpOworCW15ICRudW1fc3VieGFjdHMgPSAxMDAwOworCWZvcihteSAkaSA9 IDA7ICRpIDwgJG51bV9zdWJ4YWN0czsgJGkrKykgeworCQkkcHJpbWFyeV9zZXNzaW9uLT5x dWVyeV9zYWZlKCJzYXZlcG9pbnQgc3AkaTsgSU5TRVJUIElOVE8gdGJsIFZBTFVFUygkaSk7 IHJlbGVhc2Ugc2F2ZXBvaW50IHNwJGk7Iik7CisJfQorCisJIyBDb25zdW1lIG9uZSBtb3Jl IFhJRCwgdG8gYnVtcCB1cCAibGFzdCBjb21taXR0ZWQgWElEIgorCSRwcmltYXJ5LT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgInNlbGVjdCB0eGlkX2N1cnJlbnQoKSIpOworCisJd2FpdF9j YXRjaHVwKCRwcmltYXJ5LCAkcmVwbGljYSk7CisKKwlyZXBlYXRfYW5kX3RpbWVfc3FsKCJp bnNlcnQtYWxsLWRpZmZlcmVudC1zdWJ4aWRzIiwgJHJlcGxpY2EsICJzZWxlY3QgY291bnQo KikgZnJvbSB0YmwiKTsKKworCSRwcmltYXJ5X3Nlc3Npb24tPnF1aXQ7CisJJHByaW1hcnkt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0YmwiKTsKK30KKworZG9uZV90 ZXN0aW5nKCk7Ci0tIAoyLjM5LjUKCg== --------------nSXAXBhgWt0AUd9uE0wCc0X0 Content-Type: text/x-patch; charset=UTF-8; name="v6-0009-Use-CSN-snapshots-during-Hot-Standby.patch" Content-Disposition: attachment; filename="v6-0009-Use-CSN-snapshots-during-Hot-Standby.patch" Content-Transfer-Encoding: base64 RnJvbSA3ZmVjMjYzNDdjODBkNDJmMDI0M2YwZDMzMjhiMzhjNjkxMDVhNDFmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMSBBcHIgMjAyNSAwMDoxNjoxNyArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjYgMDkvMTJdIFVzZSBDU04gc25hcHNob3RzIGR1cmluZyBIb3Qg U3RhbmRieQoKUmVwbGFjZSB0aGUga25vd24tYXNzaWduZWQtWElEcyBtZWNoYW5pc20gd2l0 aCBhIENTTiBsb2cuIFRoZSBDU04gbG9nCihwZ19jc24pIHRyYWNrcyB0aGUgY29tbWl0IExT TiBvZiBlYWNoIHRyYW5zYWN0aW9uLCB3aGVuIHJlcGxheWluZyB0aGUKV0FMIG9uIGEgc3Rh bmRieS4gSXQncyBvbmx5IHVzZWQgb24gdGhlIHN0YW5kYnksIGFuZCBpcyBpbml0aWFsaXpl ZApmcm9tIHNjcmF0Y2ggYXQgc2VydmVyIHN0YXJ0dXAgbGlrZSBwZ19zdWJ0cmFucy4KCkJh c2VkIG9uIDAwMDEtQ1NOLWJhc2Utc25hcHNob3QucGF0Y2ggZnJvbQpodHRwczovL3d3dy5w b3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkLzIwMjAwODEwMDk1MjUyMTMyNzcyNjElNDBoaWdo Z28uY2EuClRoaXMgcGF0Y2ggaGFzIGEgbG9uZyBsaW5lYWdlLCB2YXJpb3VzIENTTiBwYXRj aGVzIGhhdmUgYmVlbiBwb3N0ZWQKd2l0aCBwYXJ0cyBmcm9tIFN0YXMgS2VsdmljaCwgTW92 ZWFkIExpLCBBbnRzIEFhc21hLCBIZWlra2kKTGlubmFrYW5nYXMsIEFsZXhhbmRlciBLdXpt ZW5rb3YKLS0tCiBjb250cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jICAgICAg ICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94YWN0ZGVzYy5jICAg ICAgICB8ICAgMjYgLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vTWFrZWZpbGUgICAg ICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jc25fbG9nLmMg ICAgICAgICAgfCAgNDY5ICsrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tZXNv bi5idWlsZCAgICAgICAgfCAgICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3Ry YW5zYW0uYyAgICAgICAgICB8ICAgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v dHdvcGhhc2UuYyAgICAgICAgIHwgICAzNCArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0vdmFyc3VwLmMgICAgICAgICAgIHwgICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94YWN0LmMgICAgICAgICAgICAgfCAgMTM4ICstCiBzcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9nLmMgICAgICAgICAgICAgfCAgMTE4ICstCiBzcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyAgICAgfCAgIDEzICstCiBzcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94bG9ndXRpbHMuYyAgICAgICAgfCAgICAyICstCiBzcmMvYmFja2Vu ZC9iYWNrdXAvYmFzZWJhY2t1cC5jICAgICAgICAgICAgICAgfCAgICAzICsKIHNyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jICAgICAgICAgICAgICB8ICAgIDIgKy0KIHNyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMgICAgICB8ICAgIDggLQogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYyAgIHwgICAgMiArLQog c3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jICAgICAgICAgICAgICAgIHwgICAgMyAr CiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYyAgICAgICAgICAgfCAxNTM4 ICsrLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMg ICAgICAgICAgICAgfCAgMTAyICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbHdsb2Nr LmMgICAgICAgICAgICAgfCAgICAyICsKIC4uLi91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50 X25hbWVzLnR4dCAgICAgICB8ICAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvcHJvYmVzLmQg ICAgICAgICAgICAgICAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC91dGlscy90aW1lL3Nu YXBtZ3IuYyAgICAgICAgICAgICAgfCAgIDM0ICstCiBzcmMvYmluL2luaXRkYi9pbml0ZGIu YyAgICAgICAgICAgICAgICAgICAgICAgfCAgICAzICstCiBzcmMvYmluL3BnX3Jld2luZC9m aWxlbWFwLmMgICAgICAgICAgICAgICAgICAgfCAgICAzICsKIHNyYy9pbmNsdWRlL2FjY2Vz cy9jc25fbG9nLmggICAgICAgICAgICAgICAgICB8ICAgMzAgKwogc3JjL2luY2x1ZGUvYWNj ZXNzL3RyYW5zYW0uaCAgICAgICAgICAgICAgICAgIHwgICAgMyArCiBzcmMvaW5jbHVkZS9h Y2Nlc3MvdHdvcGhhc2UuaCAgICAgICAgICAgICAgICAgfCAgICAzICstCiBzcmMvaW5jbHVk ZS9hY2Nlc3MveGFjdC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDEyICstCiBzcmMvaW5j bHVkZS9hY2Nlc3MveGxvZ3V0aWxzLmggICAgICAgICAgICAgICAgfCAgIDMzICstCiBzcmMv aW5jbHVkZS9zdG9yYWdlL2x3bG9jay5oICAgICAgICAgICAgICAgICAgfCAgICAyICsKIHNy Yy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2FycmF5LmggICAgICAgICAgICAgICB8ICAgMTMgKy0K IHNyYy9pbmNsdWRlL3V0aWxzL3NuYXBzaG90LmggICAgICAgICAgICAgICAgICB8ICAgIDgg KwogMzMgZmlsZXMgY2hhbmdlZCwgODIxIGluc2VydGlvbnMoKyksIDE3OTMgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY3Nu X2xvZy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvYWNjZXNzL2Nzbl9sb2cu aAoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfdmlzaWJpbGl0eS9wZ192aXNpYmlsaXR5LmMg Yi9jb250cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0eS5jCmluZGV4IGQ3OWVmMzUw MDZiLi5jNWM3YTRkZDJjMyAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ192aXNpYmlsaXR5L3Bn X3Zpc2liaWxpdHkuYworKysgYi9jb250cmliL3BnX3Zpc2liaWxpdHkvcGdfdmlzaWJpbGl0 eS5jCkBAIC02MDcsNiArNjA3LDcgQEAgY29sbGVjdF92aXNpYmlsaXR5X2RhdGEoT2lkIHJl bGlkLCBib29sIGluY2x1ZGVfcGQpCiAgKiAgICBub3cgcGVyZm9ybSBtaW5pbWFsIGNoZWNr aW5nIG9uIGEgc3RhbmRieSBieSBhbHdheXMgdXNpbmcgbmV4dFhpZCwgdGhpcwogICogICAg YXBwcm9hY2ggaXMgYmV0dGVyIHRoYW4gbm90aGluZyBhbmQgd2lsbCBhdCBsZWFzdCBjYXRj aCBleHRyZW1lbHkgYnJva2VuCiAgKiAgICBjYXNlcyB3aGVyZSBhIHhpZCBpcyBpbiB0aGUg ZnV0dXJlLgorICogICAgWFhYIEtub3duQXNzaWduZWRYaWRzIGlzIGdvbmUuCiAgKiAzLiBJ Z25vcmUgd2Fsc2VuZGVyIHhtaW4sIGJlY2F1c2UgaXQgY291bGQgZ28gYmFja3dhcmQgaWYg c29tZSByZXBsaWNhdGlvbgogICogICAgY29ubmVjdGlvbnMgZG9uJ3QgdXNlIHJlcGxpY2F0 aW9uIHNsb3RzLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVz Yy94YWN0ZGVzYy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hhY3RkZXNjLmMK aW5kZXggNzE1Y2MxZjdiYWQuLjU2ZjdiZDgxNzgwIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3Mvcm1ncmRlc2MveGFjdGRlc2MuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv cm1ncmRlc2MveGFjdGRlc2MuYwpAQCAtNDIyLDE3ICs0MjIsNiBAQCB4YWN0X2Rlc2NfcHJl cGFyZShTdHJpbmdJbmZvIGJ1ZiwgdWludDggaW5mbywgeGxfeGFjdF9wcmVwYXJlICp4bHJl YywgUmVwT3JpZ2luSQogCQkJCQkJIHRpbWVzdGFtcHR6X3RvX3N0cihwYXJzZWQub3JpZ2lu X3RpbWVzdGFtcCkpOwogfQogCi1zdGF0aWMgdm9pZAoteGFjdF9kZXNjX2Fzc2lnbm1lbnQo U3RyaW5nSW5mbyBidWYsIHhsX3hhY3RfYXNzaWdubWVudCAqeGxyZWMpCi17Ci0JaW50CQkJ aTsKLQotCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAic3VieGFjdHM6Iik7Ci0KLQlm b3IgKGkgPSAwOyBpIDwgeGxyZWMtPm5zdWJ4YWN0czsgaSsrKQotCQlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIiAldSIsIHhscmVjLT54c3ViW2ldKTsKLX0KLQogdm9pZAogeGFjdF9kZXNj KFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIHsKQEAgLTQ2MCwx OCArNDQ5LDYgQEAgeGFjdF9kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUg KnJlY29yZCkKIAkJeGFjdF9kZXNjX3ByZXBhcmUoYnVmLCBYTG9nUmVjR2V0SW5mbyhyZWNv cmQpLCB4bHJlYywKIAkJCQkJCSAgWExvZ1JlY0dldE9yaWdpbihyZWNvcmQpKTsKIAl9Ci0J ZWxzZSBpZiAoaW5mbyA9PSBYTE9HX1hBQ1RfQVNTSUdOTUVOVCkKLQl7Ci0JCXhsX3hhY3Rf YXNzaWdubWVudCAqeGxyZWMgPSAoeGxfeGFjdF9hc3NpZ25tZW50ICopIHJlYzsKLQotCQkv KgotCQkgKiBOb3RlIHRoYXQgd2UgaWdub3JlIHRoZSBXQUwgcmVjb3JkJ3MgeGlkLCBzaW5j ZSB3ZSdyZSBtb3JlCi0JCSAqIGludGVyZXN0ZWQgaW4gdGhlIHRvcC1sZXZlbCB4aWQgdGhh dCBpc3N1ZWQgdGhlIHJlY29yZCBhbmQgd2hpY2gKLQkJICogeGlkcyBhcmUgYmVpbmcgcmVw b3J0ZWQgaGVyZS4KLQkJICovCi0JCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAieHRvcCAldTog IiwgeGxyZWMtPnh0b3ApOwotCQl4YWN0X2Rlc2NfYXNzaWdubWVudChidWYsIHhscmVjKTsK LQl9CiAJZWxzZSBpZiAoaW5mbyA9PSBYTE9HX1hBQ1RfSU5WQUxJREFUSU9OUykKIAl7CiAJ CXhsX3hhY3RfaW52YWxzICp4bHJlYyA9ICh4bF94YWN0X2ludmFscyAqKSByZWM7CkBAIC01 MDMsOSArNDgwLDYgQEAgeGFjdF9pZGVudGlmeSh1aW50OCBpbmZvKQogCQljYXNlIFhMT0df WEFDVF9BQk9SVF9QUkVQQVJFRDoKIAkJCWlkID0gIkFCT1JUX1BSRVBBUkVEIjsKIAkJCWJy ZWFrOwotCQljYXNlIFhMT0dfWEFDVF9BU1NJR05NRU5UOgotCQkJaWQgPSAiQVNTSUdOTUVO VCI7Ci0JCQlicmVhazsKIAkJY2FzZSBYTE9HX1hBQ1RfSU5WQUxJREFUSU9OUzoKIAkJCWlk ID0gIklOVkFMSURBVElPTiI7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v TWFrZWZpbGUKaW5kZXggNjYxYzU1YTlkYjcuLjI1MjBkNzdjN2M4IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9NYWtlZmlsZQpAQCAtMTUsNiArMTUsNyBAQCBpbmNsdWRlICQodG9w X2J1aWxkZGlyKS9zcmMvTWFrZWZpbGUuZ2xvYmFsCiBPQkpTID0gXAogCWNsb2cubyBcCiAJ Y29tbWl0X3RzLm8gXAorCWNzbl9sb2cubyBcCiAJZ2VuZXJpY194bG9nLm8gXAogCW11bHRp eGFjdC5vIFwKIAlwYXJhbGxlbC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL2Nzbl9sb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nzbl9s b2cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDA2NzNjODU3 OWYKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jc25f bG9nLmMKQEAgLTAsMCArMSw0NjkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAq CisgKiBjc25fbG9nLmMKKyAqCQlUcmFjayBjb21taXQgcmVjb3JkIExTTnMgb2YgZmluaXNo ZWQgdHJhbnNhY3Rpb25zCisgKgorICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgYW4gU0xSVSB0 byBzdG9yZSB0aGUgTFNOIG9mIHRoZSBjb21taXQgcmVjb3JkIG9mIGVhY2gKKyAqIHRyYW5z YWN0aW9uLiBDU04gc3RhbmRzIGZvciBDb21taXQgU2VxdWVuY2UgTnVtYmVyLCBhbmQgaW4g cHJpbmNpcGxlIHdlCisgKiBjb3VsZCB1c2UgYSBzZXBhcmF0ZSBjb3VudGVyIHRoYXQgaXMg aW5jcmVtZW50ZWQgYXQgZXZlcnkgY29tbWl0LiBGb3IKKyAqIHNpbXBsaWNpdHksIHRob3Vn aCwgd2UgdXNlIHRoZSBjb21taXQgcmVjb3JkcyBMU04gYXMgdGhlIHNlcXVlbmNlIG51bWJl ci4KKyAqCisgKiBMaWtlIHBnX3N1YnRyYW5zLCB0aGlzIG1hcHBpbmcgbmVlZCB0byBiZSBr ZXB0IG9ubHkgZm9yIHhpZCdzIGdyZWF0ZXIgdGhlbgorICogb2xkZXN0WG1pbiwgYW5kIGRv ZXNuJ3QgbmVlZCB0byBiZSBwcmVzZXJ2ZWQgb3ZlciBjcmFzaGVzLiAgQWxzbywgdGhpcyBp cworICogb25seSBuZWVkZWQgaW4gaG90IHN0YW5kYnkgbW9kZSwgYW5kIGltbWVkaWF0ZWx5 IGFmdGVyIGV4aXRpbmcgaG90IHN0YW5kYnkKKyAqIG1vZGUsIHVudGlsIGFsbCBvbGQgc25h cHNob3RzIHRha2VuIGR1cmluZyBzdGFuZGJ5IG1vZGUgYXJlIGdvbmUuCisgKgorICogUG9y dGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMTgsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJlZ2VudHMg b2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAqIHNyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL2Nzbl9sb2cuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvY2xvZy5o IgorI2luY2x1ZGUgImFjY2Vzcy9jc25fbG9nLmgiCisjaW5jbHVkZSAiYWNjZXNzL3NscnUu aCIKKyNpbmNsdWRlICJhY2Nlc3Mvc3VidHJhbnMuaCIKKyNpbmNsdWRlICJhY2Nlc3MvdHJh bnNhbS5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgInBnX3RyYWNlLmgi CisjaW5jbHVkZSAidXRpbHMvc25hcG1nci5oIgorCisvKgorICogRGVmaW5lcyBmb3IgQ1NO TG9nIHBhZ2Ugc2l6ZXMuICBBIHBhZ2UgaXMgdGhlIHNhbWUgQkxDS1NaIGFzIGlzIHVzZWQK KyAqIGV2ZXJ5d2hlcmUgZWxzZSBpbiBQb3N0Z3Jlcy4KKyAqCisgKiBOb3RlOiBiZWNhdXNl IFRyYW5zYWN0aW9uSWRzIGFyZSAzMiBiaXRzIGFuZCB3cmFwIGFyb3VuZCBhdCAweEZGRkZG RkZGLAorICogQ1NOTG9nIHBhZ2UgbnVtYmVyaW5nIGFsc28gd3JhcHMgYXJvdW5kIGF0Cisg KiAweEZGRkZGRkZGL0NTTl9MT0dfWEFDVFNfUEVSX1BBR0UsIGFuZCBDU05Mb2cgc2VnbWVu dCBudW1iZXJpbmcgYXQKKyAqIDB4RkZGRkZGRkYvQ0xPR19YQUNUU19QRVJfUEFHRS9TTFJV X1BBR0VTX1BFUl9TRUdNRU5ULiAgV2UgbmVlZCB0YWtlIG5vCisgKiBleHBsaWNpdCBub3Rp Y2Ugb2YgdGhhdCBmYWN0IGluIHRoaXMgbW9kdWxlLCBleGNlcHQgd2hlbiBjb21wYXJpbmcg c2VnbWVudAorICogYW5kIHBhZ2UgbnVtYmVycyBpbiBUcnVuY2F0ZUNTTkxvZyAoc2VlIENT TkxvZ1BhZ2VQcmVjZWRlcykuCisgKi8KKworLyogV2Ugc3RvcmUgdGhlIGNvbW1pdCBDU04g Zm9yIGVhY2ggeGlkICovCisjZGVmaW5lIENTTl9MT0dfWEFDVFNfUEVSX1BBR0UgKEJMQ0tT WiAvIHNpemVvZihYTG9nUmVjUHRyKSkKKworI2RlZmluZSBUcmFuc2FjdGlvbklkVG9QYWdl KHhpZCkJKCh4aWQpIC8gKFRyYW5zYWN0aW9uSWQpIENTTl9MT0dfWEFDVFNfUEVSX1BBR0Up CisjZGVmaW5lIFRyYW5zYWN0aW9uSWRUb1BnSW5kZXgoeGlkKSAoKHhpZCkgJSAoVHJhbnNh Y3Rpb25JZCkgQ1NOX0xPR19YQUNUU19QRVJfUEFHRSkKKworI2RlZmluZSBQZ0luZGV4VG9U cmFuc2FjdGlvbklkKHBhZ2VubywgaWR4KSAoQ1NOX0xPR19YQUNUU19QRVJfUEFHRSAqIChw YWdlbm8pICsgaWR4KQorCisKKworLyoKKyAqIExpbmsgdG8gc2hhcmVkLW1lbW9yeSBkYXRh IHN0cnVjdHVyZXMgZm9yIENTTkxvZyBjb250cm9sCisgKi8KK3N0YXRpYyBTbHJ1Q3RsRGF0 YSBDU05Mb2dDdGxEYXRhOworI2RlZmluZSBDc25sb2dDdGwgKCZDU05Mb2dDdGxEYXRhKQor CitzdGF0aWMgaW50CVplcm9DU05Mb2dQYWdlKGludCBwYWdlbm8pOworc3RhdGljIGJvb2wg Q1NOTG9nUGFnZVByZWNlZGVzKGludDY0IHBhZ2UxLCBpbnQ2NCBwYWdlMik7CitzdGF0aWMg dm9pZCBDU05Mb2dTZXRQYWdlU3RhdHVzKFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1Ynhp ZHMsCisJCQkJCQkJCVRyYW5zYWN0aW9uSWQgKnN1YnhpZHMsCisJCQkJCQkJCVhMb2dSZWNQ dHIgY3NuLCBpbnQgcGFnZW5vKTsKK3N0YXRpYyB2b2lkIENTTkxvZ1NldENTTkluU2xvdChU cmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBjc24sCisJCQkJCQkJICAgaW50IHNsb3Ru byk7CisKKworLyoKKyAqIFJlY29yZCBjb21taXQgTFNOIG9mIGEgdHJhbnNhY3Rpb24gYW5k IGl0cyBzdWJ0cmFuc2FjdGlvbiB0cmVlLgorICoKKyAqIHhpZCBpcyBhIHNpbmdsZSB4aWQg dG8gc2V0IHN0YXR1cyBmb3IuIFRoaXMgd2lsbCB0eXBpY2FsbHkgYmUgdGhlIHRvcCBsZXZl bAorICogdHJhbnNhY3Rpb24gSUQgZm9yIGEgdG9wIGxldmVsIGNvbW1pdC4KKyAqCisgKiBz dWJ4aWRzIGlzIGFuIGFycmF5IG9mIHhpZHMgb2YgbGVuZ3RoIG5zdWJ4aWRzLCBpbiBsb2dp Y2FsIFhJRCBvcmRlciwKKyAqIHJlcHJlc2VudGluZyBzdWJ0cmFuc2FjdGlvbnMgaW4gdGhl IHRyZWUgb2YgWElEcy4gSW4gdmFyaW91cyBjYXNlcyBuc3VieGlkcworICogbWF5IGJlIHpl cm8uCisgKgorICogY29tbWl0THNuIGlzIHRoZSBMU04gb2YgdGhlIGNvbW1pdCByZWNvcmQu ICBUaGlzIGlzIGN1cnJlbnRseSBuZXZlciBjYWxsZWQKKyAqIGZvciBhYm9ydGVkIHRyYW5z YWN0aW9ucy4KKyAqLwordm9pZAorQ1NOTG9nU2V0Q1NOKFRyYW5zYWN0aW9uSWQgeGlkLCBp bnQgbnN1YnhpZHMsIFRyYW5zYWN0aW9uSWQgKnN1YnhpZHMsCisJCQkgWExvZ1JlY1B0ciBj b21taXRMc24pCit7CisJaW50CQkJcGFnZW5vOworCWludAkJCWkgPSAwOworCWludAkJCW9m ZnNldCA9IDA7CisKKwlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSk7CisKKwlw YWdlbm8gPSBUcmFuc2FjdGlvbklkVG9QYWdlKHhpZCk7CS8qIGdldCBwYWdlIG9mIHBhcmVu dCAqLworCWZvciAoOzspCisJeworCQlpbnQJCQludW1fb25fcGFnZSA9IDA7CisKKwkJd2hp bGUgKGkgPCBuc3VieGlkcyAmJiBUcmFuc2FjdGlvbklkVG9QYWdlKHN1YnhpZHNbaV0pID09 IHBhZ2VubykKKwkJeworCQkJbnVtX29uX3BhZ2UrKzsKKwkJCWkrKzsKKwkJfQorCisJCUNT TkxvZ1NldFBhZ2VTdGF0dXMoeGlkLAorCQkJCQkJCW51bV9vbl9wYWdlLCBzdWJ4aWRzICsg b2Zmc2V0LAorCQkJCQkJCWNvbW1pdExzbiwgcGFnZW5vKTsKKwkJaWYgKGkgPj0gbnN1Ynhp ZHMpCisJCQlicmVhazsKKworCQlvZmZzZXQgPSBpOworCQlwYWdlbm8gPSBUcmFuc2FjdGlv bklkVG9QYWdlKHN1YnhpZHNbb2Zmc2V0XSk7CisJCXhpZCA9IEludmFsaWRUcmFuc2FjdGlv bklkOworCX0KK30KKworLyoKKyAqIFJlY29yZCB0aGUgZmluYWwgc3RhdGUgb2YgdHJhbnNh Y3Rpb24gZW50cmllcyBpbiB0aGUgQ1NOIGxvZyBmb3IgYWxsCisgKiBlbnRyaWVzIG9uIGEg c2luZ2xlIHBhZ2UuICBBdG9taWMgb25seSBvbiB0aGlzIHBhZ2UuCisgKgorICogT3RoZXJ3 aXNlIEFQSSBpcyBzYW1lIGFzIENTTkxvZ1NldENTTigpCisgKi8KK3N0YXRpYyB2b2lkCitD U05Mb2dTZXRQYWdlU3RhdHVzKFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1YnhpZHMsIFRy YW5zYWN0aW9uSWQgKnN1YnhpZHMsCisJCQkJCVhMb2dSZWNQdHIgY29tbWl0THNuLCBpbnQg cGFnZW5vKQoreworCWludAkJCXNsb3RubzsKKwlpbnQJCQlpOworCUxXTG9jawkgICAqbG9j azsKKworCWxvY2sgPSBTaW1wbGVMcnVHZXRCYW5rTG9jayhDc25sb2dDdGwsIHBhZ2Vubyk7 CisJTFdMb2NrQWNxdWlyZShsb2NrLCBMV19FWENMVVNJVkUpOworCisJc2xvdG5vID0gU2lt cGxlTHJ1UmVhZFBhZ2UoQ3NubG9nQ3RsLCBwYWdlbm8sIHRydWUsIHhpZCk7CisKKwkvKiBT dWJ0cmFuc2FjdGlvbnMgZmlyc3QsIGlmIG5lZWRlZCAuLi4gKi8KKwlmb3IgKGkgPSAwOyBp IDwgbnN1YnhpZHM7IGkrKykKKwl7CisJCUFzc2VydChDc25sb2dDdGwtPnNoYXJlZC0+cGFn ZV9udW1iZXJbc2xvdG5vXSA9PSBUcmFuc2FjdGlvbklkVG9QYWdlKHN1YnhpZHNbaV0pKTsK KwkJQ1NOTG9nU2V0Q1NOSW5TbG90KHN1YnhpZHNbaV0sIGNvbW1pdExzbiwgc2xvdG5vKTsK Kwl9CisKKwkvKiAuLi4gdGhlbiB0aGUgbWFpbiB0cmFuc2FjdGlvbiAqLworCWlmIChUcmFu c2FjdGlvbklkSXNWYWxpZCh4aWQpKQorCQlDU05Mb2dTZXRDU05JblNsb3QoeGlkLCBjb21t aXRMc24sIHNsb3Rubyk7CisKKwlDc25sb2dDdGwtPnNoYXJlZC0+cGFnZV9kaXJ0eVtzbG90 bm9dID0gdHJ1ZTsKKworCUxXTG9ja1JlbGVhc2UobG9jayk7Cit9CisKKy8qCisgKiBTZXRz IHRoZSBjb21taXQgc3RhdHVzIG9mIGEgc2luZ2xlIHRyYW5zYWN0aW9uLgorICovCitzdGF0 aWMgdm9pZAorQ1NOTG9nU2V0Q1NOSW5TbG90KFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVj UHRyIGNzbiwgaW50IHNsb3RubykKK3sKKwlpbnQJCQllbnRyeW5vID0gVHJhbnNhY3Rpb25J ZFRvUGdJbmRleCh4aWQpOworCVhMb2dSZWNQdHIgKnB0cjsKKworCXB0ciA9IChYTG9nUmVj UHRyICopIChDc25sb2dDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXSArIGVudHJ5 bm8gKiBzaXplb2YoWExvZ1JlY1B0cikpOworCisJKnB0ciA9IGNzbjsKK30KKworLyoKKyAq IEludGVycm9nYXRlIHRoZSBzdGF0ZSBvZiBhIHRyYW5zYWN0aW9uIGluIHRoZSBsb2cuCisg KgorICogTkI6IHRoaXMgaXMgYSBsb3ctbGV2ZWwgcm91dGluZSBhbmQgaXMgTk9UIHRoZSBw cmVmZXJyZWQgZW50cnkgcG9pbnQKKyAqIGZvciBtb3N0IHVzZXM7IFRyYW5zYWN0aW9uSWRH ZXRYaWRDU04oKSBpbiBjc25fc25hcHNob3QuYyBpcyB0aGUKKyAqIGludGVuZGVkIGNhbGxl ci4KKyAqLworWExvZ1JlY1B0cgorQ1NOTG9nR2V0Q1NOQnlYaWQoVHJhbnNhY3Rpb25JZCB4 aWQpCit7CisJaW50CQkJcGFnZW5vID0gVHJhbnNhY3Rpb25JZFRvUGFnZSh4aWQpOworCWlu dAkJCWVudHJ5bm8gPSBUcmFuc2FjdGlvbklkVG9QZ0luZGV4KHhpZCk7CisJaW50CQkJc2xv dG5vOworCVhMb2dSZWNQdHIgKnB0cjsKKwlYTG9nUmVjUHRyCXhpZF9jc247CisKKwlBc3Nl cnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSk7CisKKwkvKiBDYW4ndCBhc2sgYWJvdXQg c3R1ZmYgdGhhdCBtaWdodCBub3QgYmUgYXJvdW5kIGFueW1vcmUgKi8KKwlBc3NlcnQoVHJh bnNhY3Rpb25JZEZvbGxvd3NPckVxdWFscyh4aWQsIFRyYW5zYWN0aW9uWG1pbikpOworCisJ LyogbG9jayBpcyBhY3F1aXJlZCBieSBTaW1wbGVMcnVSZWFkUGFnZV9SZWFkT25seSAqLwor CisJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2VfUmVhZE9ubHkoQ3NubG9nQ3RsLCBwYWdl bm8sIHhpZCk7CisJcHRyID0gKFhMb2dSZWNQdHIgKikgKENzbmxvZ0N0bC0+c2hhcmVkLT5w YWdlX2J1ZmZlcltzbG90bm9dICsgZW50cnlubyAqIHNpemVvZihYTG9nUmVjUHRyKSk7CisJ eGlkX2NzbiA9ICpwdHI7CisKKwlMV0xvY2tSZWxlYXNlKFNpbXBsZUxydUdldEJhbmtMb2Nr KENzbmxvZ0N0bCwgcGFnZW5vKSk7CisKKwlyZXR1cm4geGlkX2NzbjsKK30KKworLyoKKyAq IE51bWJlciBvZiBzaGFyZWQgQ1NOTG9nIGJ1ZmZlcnMuCisgKi8KK3N0YXRpYyBTaXplCitD U05Mb2dTaG1lbUJ1ZmZlcnModm9pZCkKK3sKKwlyZXR1cm4gTWluKDMyLCBNYXgoMTYsIE5C dWZmZXJzIC8gNTEyKSk7Cit9CisKKy8qCisgKiBSZXNlcnZlIHNoYXJlZCBtZW1vcnkgZm9y IENzbmxvZ0N0bC4KKyAqLworU2l6ZQorQ1NOTG9nU2htZW1TaXplKHZvaWQpCit7CisJLyog RklYTUU6IHNraXAgaWYgbm90IEluSG90U3RhbmRieT8gKi8KKwlyZXR1cm4gU2ltcGxlTHJ1 U2htZW1TaXplKENTTkxvZ1NobWVtQnVmZmVycygpLCAwKTsKK30KKworLyoKKyAqIEluaXRp YWxpemF0aW9uIG9mIHNoYXJlZCBtZW1vcnkgZm9yIENTTkxvZy4KKyAqLwordm9pZAorQ1NO TG9nU2htZW1Jbml0KHZvaWQpCit7CisJQ3NubG9nQ3RsLT5QYWdlUHJlY2VkZXMgPSBDU05M b2dQYWdlUHJlY2VkZXM7CisJU2ltcGxlTHJ1SW5pdChDc25sb2dDdGwsICJDU05Mb2cgQ3Rs IiwgQ1NOTG9nU2htZW1CdWZmZXJzKCksIDAsCisJCQkJICAicGdfY3NuIiwgTFdUUkFOQ0hF X0NTTl9MT0dfQlVGRkVSLAorCQkJCSAgTFdUUkFOQ0hFX0NTTl9MT0dfU0xSVSwgU1lOQ19I QU5ETEVSX05PTkUsIGZhbHNlKTsKKwlTbHJ1UGFnZVByZWNlZGVzVW5pdFRlc3RzKENzbmxv Z0N0bCwgQ1NOX0xPR19YQUNUU19QRVJfUEFHRSk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmMg bXVzdCBiZSBjYWxsZWQgT05DRSBvbiBzeXN0ZW0gaW5zdGFsbC4gIEl0IGNyZWF0ZXMgdGhl IGluaXRpYWwKKyAqIENTTkxvZyBzZWdtZW50LiAgVGhlIHBnX2NzbiBkaXJlY3RvcnkgaXMg YXNzdW1lZCB0byBoYXZlIGJlZW4KKyAqIGNyZWF0ZWQgYnkgaW5pdGRiLCBhbmQgQ1NOTG9n U2htZW1Jbml0IG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBhbHJlYWR5LgorICoKKyAqIE5vdGU6 IGl0J3Mgbm90IHJlYWxseSBuZWNlc3NhcnkgdG8gY3JlYXRlIHRoZSBpbml0aWFsIHNlZ21l bnQgbm93LAorICogc2luY2Ugc2xydS5jIHdvdWxkIGNyZWF0ZSBpdCBvbiBmaXJzdCB3cml0 ZSBhbnl3YXkuICBCdXQgd2UgbWF5IGFzIHdlbGwKKyAqIGRvIGl0IHRvIGJlIHN1cmUgdGhl IGRpcmVjdG9yeSBpcyBzZXQgdXAgY29ycmVjdGx5LgorICovCit2b2lkCitCb290U3RyYXBD U05Mb2codm9pZCkKK3sKKwlpbnQJCQlzbG90bm87CisJTFdMb2NrCSAgICpsb2NrOworCisJ bG9jayA9IFNpbXBsZUxydUdldEJhbmtMb2NrKENzbmxvZ0N0bCwgMCk7CisJTFdMb2NrQWNx dWlyZShsb2NrLCBMV19FWENMVVNJVkUpOworCisJLyogQ3JlYXRlIGFuZCB6ZXJvIHRoZSBm aXJzdCBwYWdlIG9mIHRoZSBjb21taXQgbG9nICovCisJc2xvdG5vID0gWmVyb0NTTkxvZ1Bh Z2UoMCk7CisKKwkvKiBNYWtlIHN1cmUgaXQncyB3cml0dGVuIG91dCAqLworCVNpbXBsZUxy dVdyaXRlUGFnZShDc25sb2dDdGwsIHNsb3Rubyk7CisJQXNzZXJ0KCFDc25sb2dDdGwtPnNo YXJlZC0+cGFnZV9kaXJ0eVtzbG90bm9dKTsKKworCUxXTG9ja1JlbGVhc2UobG9jayk7Cit9 CisKKy8qCisgKiBJbml0aWFsaXplIChvciByZWluaXRpYWxpemUpIGEgcGFnZSBvZiBDU05M b2cgdG8gemVyb2VzLgorICoKKyAqIFRoZSBwYWdlIGlzIG5vdCBhY3R1YWxseSB3cml0dGVu LCBqdXN0IHNldCB1cCBpbiBzaGFyZWQgbWVtb3J5LgorICogVGhlIHNsb3QgbnVtYmVyIG9m IHRoZSBuZXcgcGFnZSBpcyByZXR1cm5lZC4KKyAqCisgKiBDb250cm9sIGxvY2sgbXVzdCBi ZSBoZWxkIGF0IGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIGF0IGV4aXQuCisgKi8KK3N0YXRp YyBpbnQKK1plcm9DU05Mb2dQYWdlKGludCBwYWdlbm8pCit7CisJcmV0dXJuIFNpbXBsZUxy dVplcm9QYWdlKENzbmxvZ0N0bCwgcGFnZW5vKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUg YSBwYWdlIG9mIENTTkxvZyBiYXNlZCBvbiBwZ194YWN0LgorICoKKyAqIEFsbCBjb21taXR0 ZWQgdHJhbnNhY3Rpb25zIGFyZSBzdGFtcGVkIHdpdGggJ2NzbicKKyAqLworc3RhdGljIHZv aWQKK0luaXRDU05Mb2dQYWdlKGludCBwYWdlbm8sIFRyYW5zYWN0aW9uSWQgKnhpZCwgVHJh bnNhY3Rpb25JZCBuZXh0WGlkLCBYTG9nUmVjUHRyIGNzbikKK3sKKwlYTG9nUmVjUHRyCWR1 bW15OworCWludAkJCXNsb3RubzsKKworCXNsb3RubyA9IFplcm9DU05Mb2dQYWdlKHBhZ2Vu byk7CisKKwl3aGlsZSAoKnhpZCA8IG5leHRYaWQgJiYgVHJhbnNhY3Rpb25JZFRvUGFnZSgq eGlkKSA9PSBwYWdlbm8pCisJeworCQlYaWRTdGF0dXMJc3RhdHVzID0gVHJhbnNhY3Rpb25J ZEdldFN0YXR1cygqeGlkLCAmZHVtbXkpOworCisJCWlmIChzdGF0dXMgPT0gVFJBTlNBQ1RJ T05fU1RBVFVTX0NPTU1JVFRFRCB8fAorCQkJc3RhdHVzID09IFRSQU5TQUNUSU9OX1NUQVRV U19BQk9SVEVEKQorCQkJQ1NOTG9nU2V0Q1NOSW5TbG90KCp4aWQsIGNzbiwgc2xvdG5vKTsK KworCQlUcmFuc2FjdGlvbklkQWR2YW5jZSgqeGlkKTsKKwl9CisJU2ltcGxlTHJ1WmVyb1Bh Z2UoQ3NubG9nQ3RsLCBwYWdlbm8pOworfQorCisvKgorICogVGhpcyBtdXN0IGJlIGNhbGxl ZCBPTkNFIGR1cmluZyBwb3N0bWFzdGVyIG9yIHN0YW5kYWxvbmUtYmFja2VuZCBzdGFydHVw LAorICogYWZ0ZXIgU3RhcnR1cFhMT0cgaGFzIGluaXRpYWxpemVkIFNobWVtVmFyaWFibGVD YWNoZS0+bmV4dFhpZCwgYW5kIGFmdGVyCisgKiBpbml0aWFsaXppbmcgdGhlIENMT0cuCisg KgorICogb2xkZXN0QWN0aXZlWElEIGlzIHRoZSBvbGRlc3QgWElEIG9mIGFueSBwcmVwYXJl ZCB0cmFuc2FjdGlvbiwgb3IgbmV4dFhpZAorICogaWYgdGhlcmUgYXJlIG5vbmUuCisgKgor ICogQWxsIHRyYW5zYWN0aW9ucyB0aGF0IGhhdmUgYWxyZWFkeSBjb21wbGV0ZWQgYXJlIG1h cmtlZCB3aXRoICdjc24nLiAoJ2NzbicKKyAqIGlzIHN1cHBvc2VkIHRvIGJlIGFuICJvbGRl ciB0aGFuIGFueXRoaW5nIHdlJ2xsIGV2ZXIgbmVlZCB0byBjb21wYXJlIHdpdGgiKQorICov Cit2b2lkCitTdGFydHVwQ1NOTG9nKFRyYW5zYWN0aW9uSWQgb2xkZXN0QWN0aXZlWElELCBY TG9nUmVjUHRyIGNzbikKK3sKKwlUcmFuc2FjdGlvbklkIHhpZDsKKwlGdWxsVHJhbnNhY3Rp b25JZCBuZXh0WGlkOworCWludAkJCXN0YXJ0UGFnZTsKKwlpbnQJCQllbmRQYWdlOworCUxX TG9jawkgICAqcHJldmxvY2sgPSBOVUxMOworCUxXTG9jawkgICAqbG9jazsKKworCS8qCisJ ICogU2luY2Ugd2UgZG9uJ3QgZXhwZWN0IHBnX2NzbiB0byBiZSB2YWxpZCBhY3Jvc3MgY3Jh c2hlcywgd2UgaW5pdGlhbGl6ZQorCSAqIHRoZSBjdXJyZW50bHktYWN0aXZlIHBhZ2Uocykg dG8gemVyb2VzIGR1cmluZyBzdGFydHVwLiBXaGVuZXZlciB3ZQorCSAqIGFkdmFuY2UgaW50 byBhIG5ldyBwYWdlLCBFeHRlbmRDU05Mb2cgd2lsbCBsaWtld2lzZSB6ZXJvIHRoZSBuZXcg cGFnZQorCSAqIHdpdGhvdXQgcmVnYXJkIHRvIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IG9u IGRpc2suCisJICovCisJc3RhcnRQYWdlID0gVHJhbnNhY3Rpb25JZFRvUGFnZShvbGRlc3RB Y3RpdmVYSUQpOworCW5leHRYaWQgPSBUcmFuc2FtVmFyaWFibGVzLT5uZXh0WGlkOworCWVu ZFBhZ2UgPSBUcmFuc2FjdGlvbklkVG9QYWdlKFhpZEZyb21GdWxsVHJhbnNhY3Rpb25JZChu ZXh0WGlkKSk7CisKKwlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQob2xkZXN0QWN0aXZl WElEKSk7CisJQXNzZXJ0KEZ1bGxUcmFuc2FjdGlvbklkSXNWYWxpZChuZXh0WGlkKSk7CisK Kwl4aWQgPSBvbGRlc3RBY3RpdmVYSUQ7CisJZm9yICg7OykKKwl7CisJCWxvY2sgPSBTaW1w bGVMcnVHZXRCYW5rTG9jayhDc25sb2dDdGwsIHN0YXJ0UGFnZSk7CisJCWlmIChwcmV2bG9j ayAhPSBsb2NrKQorCQl7CisJCQlpZiAocHJldmxvY2spCisJCQkJTFdMb2NrUmVsZWFzZShw cmV2bG9jayk7CisJCQlMV0xvY2tBY3F1aXJlKGxvY2ssIExXX0VYQ0xVU0lWRSk7CisJCQlw cmV2bG9jayA9IGxvY2s7CisJCX0KKworCQlJbml0Q1NOTG9nUGFnZShzdGFydFBhZ2UsICZ4 aWQsIFhpZEZyb21GdWxsVHJhbnNhY3Rpb25JZChuZXh0WGlkKSwgY3NuKTsKKwkJaWYgKHN0 YXJ0UGFnZSA9PSBlbmRQYWdlKQorCQkJYnJlYWs7CisKKwkJc3RhcnRQYWdlKys7CisJCS8q IG11c3QgYWNjb3VudCBmb3Igd3JhcGFyb3VuZCAqLworCQlpZiAoc3RhcnRQYWdlID4gVHJh bnNhY3Rpb25JZFRvUGFnZShNYXhUcmFuc2FjdGlvbklkKSkKKwkJCXN0YXJ0UGFnZSA9IDA7 CisJfQorCisJTFdMb2NrUmVsZWFzZShsb2NrKTsKK30KKworLyoKKyAqIFRoaXMgbXVzdCBi ZSBjYWxsZWQgT05DRSBkdXJpbmcgcG9zdG1hc3RlciBvciBzdGFuZGFsb25lLWJhY2tlbmQg c2h1dGRvd24KKyAqLwordm9pZAorU2h1dGRvd25DU05Mb2codm9pZCkKK3sKKwkvKgorCSAq IEZsdXNoIGRpcnR5IENTTkxvZyBwYWdlcyB0byBkaXNrLgorCSAqCisJICogVGhpcyBpcyBu b3QgYWN0dWFsbHkgbmVjZXNzYXJ5IGZyb20gYSBjb3JyZWN0bmVzcyBwb2ludCBvZiB2aWV3 LiBXZSBkbworCSAqIGl0IG1lcmVseSBhcyBhIGRlYnVnZ2luZyBhaWQuCisJICovCisJVFJB Q0VfUE9TVEdSRVNRTF9DU05MT0dfQ0hFQ0tQT0lOVF9TVEFSVChmYWxzZSk7CisJU2ltcGxl THJ1V3JpdGVBbGwoQ3NubG9nQ3RsLCBmYWxzZSk7CisJVFJBQ0VfUE9TVEdSRVNRTF9DU05M T0dfQ0hFQ0tQT0lOVF9ET05FKGZhbHNlKTsKK30KKworLyoKKyAqIFBlcmZvcm0gYSBjaGVj a3BvaW50IC0tLSBlaXRoZXIgZHVyaW5nIHNodXRkb3duLCBvciBvbi10aGUtZmx5CisgKi8K K3ZvaWQKK0NoZWNrUG9pbnRDU05Mb2codm9pZCkKK3sKKwkvKgorCSAqIEZsdXNoIGRpcnR5 IENTTkxvZyBwYWdlcyB0byBkaXNrLgorCSAqCisJICogVGhpcyBpcyBub3QgYWN0dWFsbHkg bmVjZXNzYXJ5IGZyb20gYSBjb3JyZWN0bmVzcyBwb2ludCBvZiB2aWV3LiBXZSBkbworCSAq IGl0IG1lcmVseSB0byBpbXByb3ZlIHRoZSBvZGRzIHRoYXQgd3JpdGluZyBvZiBkaXJ0eSBw YWdlcyBpcyBkb25lIGJ5CisJICogdGhlIGNoZWNrcG9pbnQgcHJvY2VzcyBhbmQgbm90IGJ5 IGJhY2tlbmRzLgorCSAqLworCVRSQUNFX1BPU1RHUkVTUUxfQ1NOTE9HX0NIRUNLUE9JTlRf U1RBUlQodHJ1ZSk7CisJU2ltcGxlTHJ1V3JpdGVBbGwoQ3NubG9nQ3RsLCB0cnVlKTsKKwlU UkFDRV9QT1NUR1JFU1FMX0NTTkxPR19DSEVDS1BPSU5UX0RPTkUodHJ1ZSk7Cit9CisKKy8q CisgKiBNYWtlIHN1cmUgdGhhdCBDU05Mb2cgaGFzIHJvb20gZm9yIGEgbmV3bHktYWxsb2Nh dGVkIFhJRC4KKyAqCisgKiBOQjogdGhpcyBpcyBjYWxsZWQgd2hpbGUgaG9sZGluZyBYaWRH ZW5Mb2NrLiAgV2Ugd2FudCBpdCB0byBiZSB2ZXJ5IGZhc3QKKyAqIG1vc3Qgb2YgdGhlIHRp bWU7IGV2ZW4gd2hlbiBpdCdzIG5vdCBzbyBmYXN0LCBubyBhY3R1YWwgSS9PIG5lZWQgaGFw cGVuCisgKiB1bmxlc3Mgd2UncmUgZm9yY2VkIHRvIHdyaXRlIG91dCBhIGRpcnR5IGNsb2cg b3IgeGxvZyBwYWdlIHRvIG1ha2Ugcm9vbQorICogaW4gc2hhcmVkIG1lbW9yeS4KKyAqLwor dm9pZAorRXh0ZW5kQ1NOTG9nKFRyYW5zYWN0aW9uSWQgbmV3ZXN0WGFjdCkKK3sKKwlpbnQ2 NAkJcGFnZW5vOworCUxXTG9jawkgICAqbG9jazsKKworCS8qCisJICogTm8gd29yayBleGNl cHQgYXQgZmlyc3QgWElEIG9mIGEgcGFnZS4gIEJ1dCBiZXdhcmU6IGp1c3QgYWZ0ZXIKKwkg KiB3cmFwYXJvdW5kLCB0aGUgZmlyc3QgWElEIG9mIHBhZ2UgemVybyBpcyBGaXJzdE5vcm1h bFRyYW5zYWN0aW9uSWQuCisJICovCisJaWYgKFRyYW5zYWN0aW9uSWRUb1BnSW5kZXgobmV3 ZXN0WGFjdCkgIT0gMCAmJgorCQkhVHJhbnNhY3Rpb25JZEVxdWFscyhuZXdlc3RYYWN0LCBG aXJzdE5vcm1hbFRyYW5zYWN0aW9uSWQpKQorCQlyZXR1cm47CisKKwlwYWdlbm8gPSBUcmFu c2FjdGlvbklkVG9QYWdlKG5ld2VzdFhhY3QpOworCisJbG9jayA9IFNpbXBsZUxydUdldEJh bmtMb2NrKENzbmxvZ0N0bCwgcGFnZW5vKTsKKworCUxXTG9ja0FjcXVpcmUobG9jaywgTFdf RVhDTFVTSVZFKTsKKworCS8qIFplcm8gdGhlIHBhZ2UgYW5kIG1ha2UgYW4gWExPRyBlbnRy eSBhYm91dCBpdCAqLworCVplcm9DU05Mb2dQYWdlKHBhZ2Vubyk7CisKKwlMV0xvY2tSZWxl YXNlKGxvY2spOworfQorCisvKgorICogUmVtb3ZlIGFsbCBDU05Mb2cgc2VnbWVudHMgYmVm b3JlIHRoZSBvbmUgaG9sZGluZyB0aGUgcGFzc2VkCisgKiB0cmFuc2FjdGlvbiBJRC4KKyAq CisgKiBUaGlzIGlzIG5vcm1hbGx5IGNhbGxlZCBkdXJpbmcgY2hlY2twb2ludCwgd2l0aCBv bGRlc3RYYWN0IGJlaW5nIHRoZQorICogb2xkZXN0IFRyYW5zYWN0aW9uWG1pbiBvZiBhbnkg cnVubmluZyB0cmFuc2FjdGlvbi4KKyAqLwordm9pZAorVHJ1bmNhdGVDU05Mb2coVHJhbnNh Y3Rpb25JZCBvbGRlc3RYYWN0KQoreworCWludAkJCWN1dG9mZlBhZ2U7CisKKwkvKgorCSAq IFRoZSBjdXRvZmYgcG9pbnQgaXMgdGhlIHN0YXJ0IG9mIHRoZSBzZWdtZW50IGNvbnRhaW5p bmcgb2xkZXN0WGFjdC4gV2UKKwkgKiBwYXNzIHRoZSAqcGFnZSogY29udGFpbmluZyBvbGRl c3RYYWN0IHRvIFNpbXBsZUxydVRydW5jYXRlLiBXZSBzdGVwCisJICogYmFjayBvbmUgdHJh bnNhY3Rpb24gdG8gYXZvaWQgcGFzc2luZyBhIGN1dG9mZiBwYWdlIHRoYXQgaGFzbid0IGJl ZW4KKwkgKiBjcmVhdGVkIHlldCBpbiB0aGUgcmFyZSBjYXNlIHRoYXQgb2xkZXN0WGFjdCB3 b3VsZCBiZSB0aGUgZmlyc3QgaXRlbSBvbgorCSAqIGEgcGFnZSBhbmQgb2xkZXN0WGFjdCA9 PSBuZXh0IFhJRC4gIEluIHRoYXQgY2FzZSwgaWYgd2UgZGlkbid0IHN1YnRyYWN0CisJICog b25lLCB3ZSdkIHRyaWdnZXIgU2ltcGxlTHJ1VHJ1bmNhdGUncyB3cmFwYXJvdW5kIGRldGVj dGlvbi4KKwkgKi8KKwlUcmFuc2FjdGlvbklkUmV0cmVhdChvbGRlc3RYYWN0KTsKKwljdXRv ZmZQYWdlID0gVHJhbnNhY3Rpb25JZFRvUGFnZShvbGRlc3RYYWN0KTsKKworCVNpbXBsZUxy dVRydW5jYXRlKENzbmxvZ0N0bCwgY3V0b2ZmUGFnZSk7Cit9CisKKy8qCisgKiBEZWNpZGUg d2hpY2ggb2YgdHdvIENTTkxvZyBwYWdlIG51bWJlcnMgaXMgIm9sZGVyIiBmb3IgdHJ1bmNh dGlvbiBwdXJwb3Nlcy4KKyAqIEFuYWxvZ291cyB0byBDTE9HUGFnZVByZWNlZGVzKCkgYW5k IFN1YlRyYW5zUGFnZVByZWNlZGVzKCkuCisgKi8KK3N0YXRpYyBib29sCitDU05Mb2dQYWdl UHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKQoreworCVRyYW5zYWN0aW9uSWQg eGlkMTsKKwlUcmFuc2FjdGlvbklkIHhpZDI7CisKKwl4aWQxID0gKChUcmFuc2FjdGlvbklk KSBwYWdlMSkgKiBDU05fTE9HX1hBQ1RTX1BFUl9QQUdFOworCXhpZDEgKz0gRmlyc3ROb3Jt YWxUcmFuc2FjdGlvbklkICsgMTsKKwl4aWQyID0gKChUcmFuc2FjdGlvbklkKSBwYWdlMikg KiBDU05fTE9HX1hBQ1RTX1BFUl9QQUdFOworCXhpZDIgKz0gRmlyc3ROb3JtYWxUcmFuc2Fj dGlvbklkICsgMTsKKworCXJldHVybiAoVHJhbnNhY3Rpb25JZFByZWNlZGVzKHhpZDEsIHhp ZDIpICYmCisJCQlUcmFuc2FjdGlvbklkUHJlY2VkZXMoeGlkMSwgeGlkMiArIENTTl9MT0df WEFDVFNfUEVSX1BBR0UgLSAxKSk7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS9tZXNvbi5idWlsZCBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL21l c29uLmJ1aWxkCmluZGV4IGU4YWU5YjEzYzhlLi5lMmEzNDE5ZmMyMiAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0vbWVzb24uYnVpbGQKQEAgLTIsNiArMiw3IEBACiAKIGJhY2tl bmRfc291cmNlcyArPSBmaWxlcygKICAgJ2Nsb2cuYycsCisgICdjc25fbG9nLmMnLAogICAn Y29tbWl0X3RzLmMnLAogICAnZ2VuZXJpY194bG9nLmMnLAogICAnbXVsdGl4YWN0LmMnLApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHJhbnNhbS5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHJhbnNhbS5jCmluZGV4IDlhMzk0NTFhMjlhLi5i NGM0MmMwZjE1NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHJh bnNhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3RyYW5zYW0uYwpAQCAt Mzc3LDYgKzM3Nyw5IEBAIFRyYW5zYWN0aW9uSWRMYXRlc3QoVHJhbnNhY3Rpb25JZCBtYWlu eGlkLAogICogQWxzbywgYmVjYXVzZSB3ZSBncm91cCB0cmFuc2FjdGlvbnMgb24gdGhlIHNh bWUgY2xvZyBwYWdlIHRvIGNvbnNlcnZlCiAgKiBzdG9yYWdlLCB3ZSBtaWdodCByZXR1cm4g dGhlIExTTiBvZiBhIGxhdGVyIHRyYW5zYWN0aW9uIHRoYXQgZmFsbHMgaW50bwogICogdGhl IHNhbWUgZ3JvdXAuCisgKgorICogWFhYOiBOb3cgdGhhdCB3ZSBoYXZlIHRoZSBDU04tbG9n LCBzaG91bGQgd2UgdXNlIHRoYXQgZHVyaW5nIHJlY292ZXJ5PyBPcgorICogcmVuYW1lIHRo aXMgZnVuY3Rpb24gdG8gcmVkdWNlIGNvbmZ1c2lvbi4KICAqLwogWExvZ1JlY1B0cgogVHJh bnNhY3Rpb25JZEdldENvbW1pdExTTihUcmFuc2FjdGlvbklkIHhpZCkKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCmluZGV4IDczYTgwNTU5MTk0Li4yMzMwNjMyZTU2 OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCkBAIC03Nyw2ICs3 Nyw3IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNpbmNsdWRlICJhY2Nlc3MvY29tbWl0 X3RzLmgiCisjaW5jbHVkZSAiYWNjZXNzL2Nzbl9sb2cuaCIKICNpbmNsdWRlICJhY2Nlc3Mv aHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3N1YnRyYW5zLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL3RyYW5zYW0uaCIKQEAgLTE5NDMsMjAgKzE5NDQsMTMgQEAgcmVzdG9yZVR3 b1BoYXNlRGF0YSh2b2lkKQogICogT3VyIG90aGVyIHJlc3BvbnNpYmlsaXR5IGlzIHRvIGRl dGVybWluZSBhbmQgcmV0dXJuIHRoZSBvbGRlc3QgdmFsaWQgWElECiAgKiBhbW9uZyB0aGUg cHJlcGFyZWQgeGFjdHMgKGlmIG5vbmUsIHJldHVybiBUcmFuc2FtVmFyaWFibGVzLT5uZXh0 WGlkKS4KICAqIFRoaXMgaXMgbmVlZGVkIHRvIHN5bmNocm9uaXplIHBnX3N1YnRyYW5zIHN0 YXJ0dXAgcHJvcGVybHkuCi0gKgotICogSWYgeGlkc19wIGFuZCBueGlkc19wIGFyZSBub3Qg TlVMTCwgcG9pbnRlciB0byBhIHBhbGxvYydkIGFycmF5IG9mIGFsbAotICogdG9wLWxldmVs IHhpZHMgaXMgc3RvcmVkIGluICp4aWRzX3AuIFRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0 aGUgYXJyYXkKLSAqIGlzIHJldHVybmVkIGluICpueGlkc19wLgogICovCiBUcmFuc2FjdGlv bklkCi1QcmVzY2FuUHJlcGFyZWRUcmFuc2FjdGlvbnMoVHJhbnNhY3Rpb25JZCAqKnhpZHNf cCwgaW50ICpueGlkc19wKQorUHJlc2NhblByZXBhcmVkVHJhbnNhY3Rpb25zKHZvaWQpCiB7 CiAJRnVsbFRyYW5zYWN0aW9uSWQgbmV4dFhpZCA9IFRyYW5zYW1WYXJpYWJsZXMtPm5leHRY aWQ7CiAJVHJhbnNhY3Rpb25JZCBvcmlnTmV4dFhpZCA9IFhpZEZyb21GdWxsVHJhbnNhY3Rp b25JZChuZXh0WGlkKTsKIAlUcmFuc2FjdGlvbklkIHJlc3VsdCA9IG9yaWdOZXh0WGlkOwot CVRyYW5zYWN0aW9uSWQgKnhpZHMgPSBOVUxMOwotCWludAkJCW54aWRzID0gMDsKLQlpbnQJ CQlhbGxvY3NpemUgPSAwOwogCWludAkJCWk7CiAKIAlMV0xvY2tBY3F1aXJlKFR3b1BoYXNl U3RhdGVMb2NrLCBMV19FWENMVVNJVkUpOwpAQCAtMTk4NCwzNCArMTk3OCwxMCBAQCBQcmVz Y2FuUHJlcGFyZWRUcmFuc2FjdGlvbnMoVHJhbnNhY3Rpb25JZCAqKnhpZHNfcCwgaW50ICpu eGlkc19wKQogCQlpZiAoVHJhbnNhY3Rpb25JZFByZWNlZGVzKHhpZCwgcmVzdWx0KSkKIAkJ CXJlc3VsdCA9IHhpZDsKIAotCQlpZiAoeGlkc19wKQotCQl7Ci0JCQlpZiAobnhpZHMgPT0g YWxsb2NzaXplKQotCQkJewotCQkJCWlmIChueGlkcyA9PSAwKQotCQkJCXsKLQkJCQkJYWxs b2NzaXplID0gMTA7Ci0JCQkJCXhpZHMgPSBwYWxsb2MoYWxsb2NzaXplICogc2l6ZW9mKFRy YW5zYWN0aW9uSWQpKTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCXsKLQkJCQkJYWxsb2NzaXpl ID0gYWxsb2NzaXplICogMjsKLQkJCQkJeGlkcyA9IHJlcGFsbG9jKHhpZHMsIGFsbG9jc2l6 ZSAqIHNpemVvZihUcmFuc2FjdGlvbklkKSk7Ci0JCQkJfQotCQkJfQotCQkJeGlkc1tueGlk cysrXSA9IHhpZDsKLQkJfQotCiAJCXBmcmVlKGJ1Zik7CiAJfQogCUxXTG9ja1JlbGVhc2Uo VHdvUGhhc2VTdGF0ZUxvY2spOwogCi0JaWYgKHhpZHNfcCkKLQl7Ci0JCSp4aWRzX3AgPSB4 aWRzOwotCQkqbnhpZHNfcCA9IG54aWRzOwotCX0KLQogCXJldHVybiByZXN1bHQ7CiB9CiAK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3ZhcnN1cC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdmFyc3VwLmMKaW5kZXggZmU4OTU3ODdjYjcuLmE0 OTVmMWQ3ODk5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92YXJz dXAuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS92YXJzdXAuYwpAQCAtMTUs NiArMTUsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2Nsb2cuaCIKICNpbmNsdWRlICJhY2Nl c3MvY29tbWl0X3RzLmgiCisjaW5jbHVkZSAiYWNjZXNzL2Nzbl9sb2cuaCIKICNpbmNsdWRl ICJhY2Nlc3Mvc3VidHJhbnMuaCIKICNpbmNsdWRlICJhY2Nlc3MvdHJhbnNhbS5oIgogI2lu Y2x1ZGUgImFjY2Vzcy94YWN0LmgiCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKaW5k ZXggYjg4NTUxM2Y3NjUuLjUyNTBhMTU4MTQ1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS94YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGFjdC5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKICNpbmNs dWRlICJhY2Nlc3MvY29tbWl0X3RzLmgiCisjaW5jbHVkZSAiYWNjZXNzL2Nzbl9sb2cuaCIK ICNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3BhcmFs bGVsLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3N1YnRyYW5zLmgiCkBAIC0yMTAsNyArMjExLDYg QEAgdHlwZWRlZiBzdHJ1Y3QgVHJhbnNhY3Rpb25TdGF0ZURhdGEKIAlpbnQJCQlwcmV2U2Vj Q29udGV4dDsgLyogcHJldmlvdXMgU2VjdXJpdHlSZXN0cmljdGlvbkNvbnRleHQgKi8KIAli b29sCQlwcmV2WGFjdFJlYWRPbmx5OwkvKiBlbnRyeS10aW1lIHhhY3Qgci9vIHN0YXRlICov CiAJYm9vbAkJc3RhcnRlZEluUmVjb3Zlcnk7CS8qIGRpZCB3ZSBzdGFydCBpbiByZWNvdmVy eT8gKi8KLQlib29sCQlkaWRMb2dYaWQ7CQkvKiBoYXMgeGlkIGJlZW4gaW5jbHVkZWQgaW4g V0FMIHJlY29yZD8gKi8KIAlpbnQJCQlwYXJhbGxlbE1vZGVMZXZlbDsJLyogRW50ZXIvRXhp dFBhcmFsbGVsTW9kZSBjb3VudGVyICovCiAJYm9vbAkJcGFyYWxsZWxDaGlsZFhhY3Q7CS8q IGlzIGFueSBwYXJlbnQgdHJhbnNhY3Rpb24gcGFyYWxsZWw/ICovCiAJYm9vbAkJY2hhaW47 CQkJLyogc3RhcnQgYSBuZXcgYmxvY2sgYWZ0ZXIgdGhpcyBvbmUgKi8KQEAgLTI1MCwxMyAr MjUwLDYgQEAgc3RhdGljIFRyYW5zYWN0aW9uU3RhdGVEYXRhIFRvcFRyYW5zYWN0aW9uU3Rh dGVEYXRhID0gewogCS50b3BYaWRMb2dnZWQgPSBmYWxzZSwKIH07CiAKLS8qCi0gKiB1bnJl cG9ydGVkWGlkcyBob2xkcyBYSURzIG9mIGFsbCBzdWJ0cmFuc2FjdGlvbnMgdGhhdCBoYXZl IG5vdCB5ZXQgYmVlbgotICogcmVwb3J0ZWQgaW4gYW4gWExPR19YQUNUX0FTU0lHTk1FTlQg cmVjb3JkLgotICovCi1zdGF0aWMgaW50CW5VbnJlcG9ydGVkWGlkczsKLXN0YXRpYyBUcmFu c2FjdGlvbklkIHVucmVwb3J0ZWRYaWRzW1BHUFJPQ19NQVhfQ0FDSEVEX1NVQlhJRFNdOwot CiBzdGF0aWMgVHJhbnNhY3Rpb25TdGF0ZSBDdXJyZW50VHJhbnNhY3Rpb25TdGF0ZSA9ICZU b3BUcmFuc2FjdGlvblN0YXRlRGF0YTsKIAogLyoKQEAgLTUzMiwxOCArNTI1LDYgQEAgR2V0 Q3VycmVudEZ1bGxUcmFuc2FjdGlvbklkSWZBbnkodm9pZCkKIAlyZXR1cm4gQ3VycmVudFRy YW5zYWN0aW9uU3RhdGUtPmZ1bGxUcmFuc2FjdGlvbklkOwogfQogCi0vKgotICoJTWFya0N1 cnJlbnRUcmFuc2FjdGlvbklkTG9nZ2VkSWZBbnkKLSAqCi0gKiBSZW1lbWJlciB0aGF0IHRo ZSBjdXJyZW50IHhpZCAtIGlmIGl0IGlzIGFzc2lnbmVkIC0gbm93IGhhcyBiZWVuIHdhbCBs b2dnZWQuCi0gKi8KLXZvaWQKLU1hcmtDdXJyZW50VHJhbnNhY3Rpb25JZExvZ2dlZElmQW55 KHZvaWQpCi17Ci0JaWYgKEZ1bGxUcmFuc2FjdGlvbklkSXNWYWxpZChDdXJyZW50VHJhbnNh Y3Rpb25TdGF0ZS0+ZnVsbFRyYW5zYWN0aW9uSWQpKQotCQlDdXJyZW50VHJhbnNhY3Rpb25T dGF0ZS0+ZGlkTG9nWGlkID0gdHJ1ZTsKLX0KLQogLyoKICAqIElzU3VieGFjdFRvcFhpZExv Z1BlbmRpbmcKICAqCkBAIC02MzYsNyArNjE3LDYgQEAgQXNzaWduVHJhbnNhY3Rpb25JZChU cmFuc2FjdGlvblN0YXRlIHMpCiB7CiAJYm9vbAkJaXNTdWJYYWN0ID0gKHMtPnBhcmVudCAh PSBOVUxMKTsKIAlSZXNvdXJjZU93bmVyIGN1cnJlbnRPd25lcjsKLQlib29sCQlsb2dfdW5r bm93bl90b3AgPSBmYWxzZTsKIAogCS8qIEFzc2VydCB0aGF0IGNhbGxlciBkaWRuJ3Qgc2Ny ZXcgdXAgKi8KIAlBc3NlcnQoIUZ1bGxUcmFuc2FjdGlvbklkSXNWYWxpZChzLT5mdWxsVHJh bnNhY3Rpb25JZCkpOwpAQCAtNjgwLDIwICs2NjAsNiBAQCBBc3NpZ25UcmFuc2FjdGlvbklk KFRyYW5zYWN0aW9uU3RhdGUgcykKIAkJcGZyZWUocGFyZW50cyk7CiAJfQogCi0JLyoKLQkg KiBXaGVuIHdhbF9sZXZlbD1sb2dpY2FsLCBndWFyYW50ZWUgdGhhdCBhIHN1YnRyYW5zYWN0 aW9uJ3MgeGlkIGNhbiBvbmx5Ci0JICogYmUgc2VlbiBpbiB0aGUgV0FMIHN0cmVhbSBpZiBp dHMgdG9wbGV2ZWwgeGlkIGhhcyBiZWVuIGxvZ2dlZCBiZWZvcmUuCi0JICogSWYgbmVjZXNz YXJ5IHdlIGxvZyBhbiB4YWN0X2Fzc2lnbm1lbnQgcmVjb3JkIHdpdGggZmV3ZXIgdGhhbgot CSAqIFBHUFJPQ19NQVhfQ0FDSEVEX1NVQlhJRFMuIE5vdGUgdGhhdCBpdCBpcyBmaW5lIGlm IGRpZExvZ1hpZCBpc24ndCBzZXQKLQkgKiBmb3IgYSB0cmFuc2FjdGlvbiBldmVuIHRob3Vn aCBpdCBhcHBlYXJzIGluIGEgV0FMIHJlY29yZCwgd2UganVzdCBtaWdodAotCSAqIHN1cGVy Zmx1b3VzbHkgbG9nIHNvbWV0aGluZy4gVGhhdCBjYW4gaGFwcGVuIHdoZW4gYW4geGlkIGlz IGluY2x1ZGVkCi0JICogc29tZXdoZXJlIGluc2lkZSBhIHdhbCByZWNvcmQsIGJ1dCBub3Qg aW4gWExvZ1JlY29yZC0+eGxfeGlkLCBsaWtlIGluCi0JICogeGxfc3RhbmRieV9sb2Nrcy4K LQkgKi8KLQlpZiAoaXNTdWJYYWN0ICYmIFhMb2dMb2dpY2FsSW5mb0FjdGl2ZSgpICYmCi0J CSFUb3BUcmFuc2FjdGlvblN0YXRlRGF0YS5kaWRMb2dYaWQpCi0JCWxvZ191bmtub3duX3Rv cCA9IHRydWU7Ci0KIAkvKgogCSAqIEdlbmVyYXRlIGEgbmV3IEZ1bGxUcmFuc2FjdGlvbklk IGFuZCByZWNvcmQgaXRzIHhpZCBpbiBQR1BST0MgYW5kCiAJICogcGdfc3VidHJhbnMuCkBA IC03MjksNTkgKzY5NSw2IEBAIEFzc2lnblRyYW5zYWN0aW9uSWQoVHJhbnNhY3Rpb25TdGF0 ZSBzKQogCVhhY3RMb2NrVGFibGVJbnNlcnQoWGlkRnJvbUZ1bGxUcmFuc2FjdGlvbklkKHMt PmZ1bGxUcmFuc2FjdGlvbklkKSk7CiAKIAlDdXJyZW50UmVzb3VyY2VPd25lciA9IGN1cnJl bnRPd25lcjsKLQotCS8qCi0JICogRXZlcnkgUEdQUk9DX01BWF9DQUNIRURfU1VCWElEUyBh c3NpZ25lZCB0cmFuc2FjdGlvbiBpZHMgd2l0aGluIGVhY2gKLQkgKiB0b3AtbGV2ZWwgdHJh bnNhY3Rpb24gd2UgaXNzdWUgYSBXQUwgcmVjb3JkIGZvciB0aGUgYXNzaWdubWVudC4gV2UK LQkgKiBpbmNsdWRlIHRoZSB0b3AtbGV2ZWwgeGlkIGFuZCBhbGwgdGhlIHN1YnhpZHMgdGhh dCBoYXZlIG5vdCB5ZXQgYmVlbgotCSAqIHJlcG9ydGVkIHVzaW5nIFhMT0dfWEFDVF9BU1NJ R05NRU5UIHJlY29yZHMuCi0JICoKLQkgKiBUaGlzIGlzIHJlcXVpcmVkIHRvIGxpbWl0IHRo ZSBhbW91bnQgb2Ygc2hhcmVkIG1lbW9yeSByZXF1aXJlZCBpbiBhIGhvdAotCSAqIHN0YW5k Ynkgc2VydmVyIHRvIGtlZXAgdHJhY2sgb2YgaW4tcHJvZ3Jlc3MgWElEcy4gU2VlIG5vdGVz IGZvcgotCSAqIFJlY29yZEtub3duQXNzaWduZWRUcmFuc2FjdGlvbklkcygpLgotCSAqCi0J ICogV2UgZG9uJ3Qga2VlcCB0cmFjayBvZiB0aGUgaW1tZWRpYXRlIHBhcmVudCBvZiBlYWNo IHN1YnhpZCwgb25seSB0aGUKLQkgKiB0b3AtbGV2ZWwgdHJhbnNhY3Rpb24gdGhhdCBlYWNo IHN1YnhhY3QgYmVsb25ncyB0by4gVGhpcyBpcyBjb3JyZWN0IGluCi0JICogcmVjb3Zlcnkg b25seSBiZWNhdXNlIGFib3J0ZWQgc3VidHJhbnNhY3Rpb25zIGFyZSBzZXBhcmF0ZWx5IFdB TAotCSAqIGxvZ2dlZC4KLQkgKgotCSAqIFRoaXMgaXMgY29ycmVjdCBldmVuIGZvciB0aGUg Y2FzZSB3aGVyZSBzZXZlcmFsIGxldmVscyBhYm92ZSB1cyBkaWRuJ3QKLQkgKiBoYXZlIGFu IHhpZCBhc3NpZ25lZCBhcyB3ZSByZWN1cnNlZCB1cCB0byB0aGVtIGJlZm9yZWhhbmQuCi0J ICovCi0JaWYgKGlzU3ViWGFjdCAmJiBYTG9nU3RhbmRieUluZm9BY3RpdmUoKSkKLQl7Ci0J CXVucmVwb3J0ZWRYaWRzW25VbnJlcG9ydGVkWGlkc10gPSBYaWRGcm9tRnVsbFRyYW5zYWN0 aW9uSWQocy0+ZnVsbFRyYW5zYWN0aW9uSWQpOwotCQluVW5yZXBvcnRlZFhpZHMrKzsKLQot CQkvKgotCQkgKiBlbnN1cmUgdGhpcyB0ZXN0IG1hdGNoZXMgc2ltaWxhciBvbmUgaW4KLQkJ ICogUmVjb3ZlclByZXBhcmVkVHJhbnNhY3Rpb25zKCkKLQkJICovCi0JCWlmIChuVW5yZXBv cnRlZFhpZHMgPj0gUEdQUk9DX01BWF9DQUNIRURfU1VCWElEUyB8fAotCQkJbG9nX3Vua25v d25fdG9wKQotCQl7Ci0JCQl4bF94YWN0X2Fzc2lnbm1lbnQgeGxyZWM7Ci0KLQkJCS8qCi0J CQkgKiB4dG9wIGlzIGFsd2F5cyBzZXQgYnkgbm93IGJlY2F1c2Ugd2UgcmVjdXJzZSB1cCB0 cmFuc2FjdGlvbgotCQkJICogc3RhY2sgdG8gdGhlIGhpZ2hlc3QgdW5hc3NpZ25lZCB4aWQg YW5kIHRoZW4gY29tZSBiYWNrIGRvd24KLQkJCSAqLwotCQkJeGxyZWMueHRvcCA9IEdldFRv cFRyYW5zYWN0aW9uSWQoKTsKLQkJCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCh4bHJl Yy54dG9wKSk7Ci0JCQl4bHJlYy5uc3VieGFjdHMgPSBuVW5yZXBvcnRlZFhpZHM7Ci0KLQkJ CVhMb2dCZWdpbkluc2VydCgpOwotCQkJWExvZ1JlZ2lzdGVyRGF0YSgmeGxyZWMsIE1pblNp emVPZlhhY3RBc3NpZ25tZW50KTsKLQkJCVhMb2dSZWdpc3RlckRhdGEodW5yZXBvcnRlZFhp ZHMsCi0JCQkJCQkJIG5VbnJlcG9ydGVkWGlkcyAqIHNpemVvZihUcmFuc2FjdGlvbklkKSk7 Ci0KLQkJCSh2b2lkKSBYTG9nSW5zZXJ0KFJNX1hBQ1RfSUQsIFhMT0dfWEFDVF9BU1NJR05N RU5UKTsKLQotCQkJblVucmVwb3J0ZWRYaWRzID0gMDsKLQkJCS8qIG1hcmsgdG9wLCBub3Qg Y3VycmVudCB4YWN0IGFzIGhhdmluZyBiZWVuIGxvZ2dlZCAqLwotCQkJVG9wVHJhbnNhY3Rp b25TdGF0ZURhdGEuZGlkTG9nWGlkID0gdHJ1ZTsKLQkJfQotCX0KIH0KIAogLyoKQEAgLTE0 ODEsMTEgKzEzOTQsMTEgQEAgUmVjb3JkVHJhbnNhY3Rpb25Db21taXQodm9pZCkKIAkgKiB0 ZW1wIHRhYmxlcyB3aWxsIGJlIGxvc3QgYW55d2F5LCB1bmxvZ2dlZCB0YWJsZXMgd2lsbCBi ZSB0cnVuY2F0ZWQgYW5kCiAJICogSE9UIHBydW5pbmcgd2lsbCBiZSBkb25lIGFnYWluIGxh dGVyLiAoR2l2ZW4gdGhlIGZvcmVnb2luZywgeW91IG1pZ2h0CiAJICogdGhpbmsgdGhhdCBp dCB3b3VsZCBiZSB1bm5lY2Vzc2FyeSB0byBlbWl0IHRoZSBYTE9HIHJlY29yZCBhdCBhbGwg aW4KLQkgKiB0aGlzIGNhc2UsIGJ1dCB3ZSBkb24ndCBjdXJyZW50bHkgdHJ5IHRvIGRvIHRo YXQuICBJdCB3b3VsZCBjZXJ0YWlubHkKLQkgKiBjYXVzZSBwcm9ibGVtcyBhdCBsZWFzdCBp biBIb3QgU3RhbmRieSBtb2RlLCB3aGVyZSB0aGUKLQkgKiBLbm93bkFzc2lnbmVkWGlkcyBt YWNoaW5lcnkgcmVxdWlyZXMgdHJhY2tpbmcgZXZlcnkgWElEIGFzc2lnbm1lbnQuICBJdAot CSAqIG1pZ2h0IGJlIE9LIHRvIHNraXAgaXQgb25seSB3aGVuIHdhbF9sZXZlbCA8IHJlcGxp Y2EsIGJ1dCBmb3Igbm93IHdlCi0JICogZG9uJ3QuKQorCSAqIHRoaXMgY2FzZSwgYnV0IHdl IGRvbid0IGN1cnJlbnRseSB0cnkgdG8gZG8gdGhhdC4gIEl0IG1pZ2h0IGNhdXNlCisJICog aW5lZmZpY2llbmNpZXMgaW4gSG90IFN0YW5kYnkgbW9kZSwgaWYgbm90aGluZyBlbHNlLCB3 aGVyZSB0aGUKKwkgKiBjb21taXQvYWJvcnQgcmVjb3JkcyBhbGxvdyBhZHZhbmNpbmcgdGhl IHhtaW4gaG9yaXpvbiBmb3IgbmV3CisJICogc25hcHNob3RzLiBJdCBtaWdodCBiZSBPSyB0 byBza2lwIGl0IG9ubHkgd2hlbiB3YWxfbGV2ZWwgPCByZXBsaWNhLCBidXQKKwkgKiBmb3Ig bm93IHdlIGRvbid0LikKIAkgKgogCSAqIEhvd2V2ZXIsIGlmIHdlJ3JlIGRvaW5nIGNsZWFu dXAgb2YgYW55IG5vbi10ZW1wIHJlbHMgb3IgY29tbWl0dGluZyBhbnkKIAkgKiBjb21tYW5k IHRoYXQgd2FudGVkIHRvIGZvcmNlIHN5bmMgY29tbWl0LCB0aGVuIHdlIG11c3QgZmx1c2gg WExPRwpAQCAtMTk1MywxMyArMTg2Niw2IEBAIEF0U3ViQWJvcnRfY2hpbGRYaWRzKHZvaWQp CiAJcy0+Y2hpbGRYaWRzID0gTlVMTDsKIAlzLT5uQ2hpbGRYaWRzID0gMDsKIAlzLT5tYXhD aGlsZFhpZHMgPSAwOwotCi0JLyoKLQkgKiBXZSBjb3VsZCBwcnVuZSB0aGUgdW5yZXBvcnRl ZFhpZHMgYXJyYXkgaGVyZS4gQnV0IHdlIGRvbid0IGJvdGhlci4gVGhhdAotCSAqIHdvdWxk IHBvdGVudGlhbGx5IHJlZHVjZSBudW1iZXIgb2YgWExPR19YQUNUX0FTU0lHTk1FTlQgcmVj b3JkcyBidXQgaXQKLQkgKiB3b3VsZCBsaWtlbHkgaW50cm9kdWNlIG1vcmUgQ1BVIHRpbWUg aW50byB0aGUgbW9yZSBjb21tb24gcGF0aHMsIHNvIHdlCi0JICogY2hvb3NlIG5vdCB0byBk byB0aGF0LgotCSAqLwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMTQyLDEyICsyMDQ4LDYg QEAgU3RhcnRUcmFuc2FjdGlvbih2b2lkKQogCWN1cnJlbnRDb21tYW5kSWQgPSBGaXJzdENv bW1hbmRJZDsKIAljdXJyZW50Q29tbWFuZElkVXNlZCA9IGZhbHNlOwogCi0JLyoKLQkgKiBp bml0aWFsaXplIHJlcG9ydGVkIHhpZCBhY2NvdW50aW5nCi0JICovCi0JblVucmVwb3J0ZWRY aWRzID0gMDsKLQlzLT5kaWRMb2dYaWQgPSBmYWxzZTsKLQogCS8qCiAJICogbXVzdCBpbml0 aWFsaXplIHJlc291cmNlLW1hbmFnZW1lbnQgc3R1ZmYgZmlyc3QKIAkgKi8KQEAgLTYxNTQs NyArNjA1NCw3IEBAIHhhY3RfcmVkb19jb21taXQoeGxfeGFjdF9wYXJzZWRfY29tbWl0ICpw YXJzZWQsCiAJVHJhbnNhY3Rpb25UcmVlU2V0Q29tbWl0VHNEYXRhKHhpZCwgcGFyc2VkLT5u c3VieGFjdHMsIHBhcnNlZC0+c3VieGFjdHMsCiAJCQkJCQkJCSAgIGNvbW1pdF90aW1lLCBv cmlnaW5faWQpOwogCi0JaWYgKHN0YW5kYnlTdGF0ZSA9PSBTVEFOREJZX0RJU0FCTEVEKQor CWlmICghSW5Ib3RTdGFuZGJ5KQogCXsKIAkJLyoKIAkJICogTWFyayB0aGUgdHJhbnNhY3Rp b24gY29tbWl0dGVkIGluIHBnX3hhY3QuCkBAIC02MTc0LDYgKzYwNzQsMTIgQEAgeGFjdF9y ZWRvX2NvbW1pdCh4bF94YWN0X3BhcnNlZF9jb21taXQgKnBhcnNlZCwKIAkJICovCiAJCVJl Y29yZEtub3duQXNzaWduZWRUcmFuc2FjdGlvbklkcyhtYXhfeGlkKTsKIAorCQkvKgorCQkg KiBNYXJrIHRoZSBDU05MT0cgZmlyc3QuICBUaGUgdHJhbnNhY3Rpb24gd29uJ3QgYmVjb21l IHZpc2libGUgdG8gbmV3CisJCSAqIHNuYXBzaG90cyB1bnRpbCB0aGUgY2FsbCB0byBQcm9j QXJyYXlSZWNvdmVyeUVuZFRyYW5zYWN0aW9uKCkuCisJCSAqLworCQlDU05Mb2dTZXRDU04o eGlkLCBwYXJzZWQtPm5zdWJ4YWN0cywgcGFyc2VkLT5zdWJ4YWN0cywgbHNuKTsKKwogCQkv KgogCQkgKiBNYXJrIHRoZSB0cmFuc2FjdGlvbiBjb21taXR0ZWQgaW4gcGdfeGFjdC4gV2Ug dXNlIGFzeW5jIGNvbW1pdAogCQkgKiBwcm90b2NvbCBkdXJpbmcgcmVjb3ZlcnkgdG8gcHJv dmlkZSBpbmZvcm1hdGlvbiBvbiBkYXRhYmFzZQpAQCAtNjE4Niw5ICs2MDkyLDkgQEAgeGFj dF9yZWRvX2NvbW1pdCh4bF94YWN0X3BhcnNlZF9jb21taXQgKnBhcnNlZCwKIAkJVHJhbnNh Y3Rpb25JZEFzeW5jQ29tbWl0VHJlZSh4aWQsIHBhcnNlZC0+bnN1YnhhY3RzLCBwYXJzZWQt PnN1YnhhY3RzLCBsc24pOwogCiAJCS8qCi0JCSAqIFdlIG11c3QgbWFyayBjbG9nIGJlZm9y ZSB3ZSB1cGRhdGUgdGhlIFByb2NBcnJheS4KKwkJICogTWFrZSB0aGUgY29tbWl0IHZpc2li bGUgdG8gbmV3IHNuYXBzaG90cyBpbiB0aGUgUHJvY0FycmF5LgogCQkgKi8KLQkJRXhwaXJl VHJlZUtub3duQXNzaWduZWRUcmFuc2FjdGlvbklkcyh4aWQsIHBhcnNlZC0+bnN1YnhhY3Rz LCBwYXJzZWQtPnN1YnhhY3RzLCBtYXhfeGlkKTsKKwkJUHJvY0FycmF5UmVjb3ZlcnlFbmRU cmFuc2FjdGlvbihtYXhfeGlkLCBsc24pOwogCiAJCS8qCiAJCSAqIFNlbmQgYW55IGNhY2hl IGludmFsaWRhdGlvbnMgYXR0YWNoZWQgdG8gdGhlIGNvbW1pdC4gV2UgbXVzdApAQCAtNjI5 NCw3ICs2MjAwLDcgQEAgeGFjdF9yZWRvX2Fib3J0KHhsX3hhY3RfcGFyc2VkX2Fib3J0ICpw YXJzZWQsIFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJCQkJCQkgIHBhcnNlZC0+c3VieGFjdHMp OwogCUFkdmFuY2VOZXh0RnVsbFRyYW5zYWN0aW9uSWRQYXN0WGlkKG1heF94aWQpOwogCi0J aWYgKHN0YW5kYnlTdGF0ZSA9PSBTVEFOREJZX0RJU0FCTEVEKQorCWlmICghSW5Ib3RTdGFu ZGJ5KQogCXsKIAkJLyogTWFyayB0aGUgdHJhbnNhY3Rpb24gYWJvcnRlZCBpbiBwZ194YWN0 LCBubyBuZWVkIGZvciBhc3luYyBzdHVmZiAqLwogCQlUcmFuc2FjdGlvbklkQWJvcnRUcmVl KHhpZCwgcGFyc2VkLT5uc3VieGFjdHMsIHBhcnNlZC0+c3VieGFjdHMpOwpAQCAtNjMxMiwx MyArNjIxOCwxNSBAQCB4YWN0X3JlZG9fYWJvcnQoeGxfeGFjdF9wYXJzZWRfYWJvcnQgKnBh cnNlZCwgVHJhbnNhY3Rpb25JZCB4aWQsCiAJCSAqLwogCQlSZWNvcmRLbm93bkFzc2lnbmVk VHJhbnNhY3Rpb25JZHMobWF4X3hpZCk7CiAKKwkJLyogTm90ZTogd2UgZG9uJ3QgbmVlZCB0 byB1cGRhdGUgdGhlIENTTiBsb2cgb24gYWJvcnQuICovCisKIAkJLyogTWFyayB0aGUgdHJh bnNhY3Rpb24gYWJvcnRlZCBpbiBwZ194YWN0LCBubyBuZWVkIGZvciBhc3luYyBzdHVmZiAq LwogCQlUcmFuc2FjdGlvbklkQWJvcnRUcmVlKHhpZCwgcGFyc2VkLT5uc3VieGFjdHMsIHBh cnNlZC0+c3VieGFjdHMpOwogCiAJCS8qCiAJCSAqIFdlIG11c3QgdXBkYXRlIHRoZSBQcm9j QXJyYXkgYWZ0ZXIgd2UgaGF2ZSBtYXJrZWQgY2xvZy4KIAkJICovCi0JCUV4cGlyZVRyZWVL bm93bkFzc2lnbmVkVHJhbnNhY3Rpb25JZHMoeGlkLCBwYXJzZWQtPm5zdWJ4YWN0cywgcGFy c2VkLT5zdWJ4YWN0cywgbWF4X3hpZCk7CisJCVByb2NBcnJheVJlY292ZXJ5RW5kVHJhbnNh Y3Rpb24obWF4X3hpZCwgbHNuKTsKIAogCQkvKgogCQkgKiBUaGVyZSBhcmUgbm8gaW52YWxp ZGF0aW9uIG1lc3NhZ2VzIHRvIHNlbmQgb3IgdW5kby4KQEAgLTY0MjYsMTQgKzYzMzQsNiBA QCB4YWN0X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCQkJCSAgIFhMb2dSZWNH ZXRPcmlnaW4ocmVjb3JkKSk7CiAJCUxXTG9ja1JlbGVhc2UoVHdvUGhhc2VTdGF0ZUxvY2sp OwogCX0KLQllbHNlIGlmIChpbmZvID09IFhMT0dfWEFDVF9BU1NJR05NRU5UKQotCXsKLQkJ eGxfeGFjdF9hc3NpZ25tZW50ICp4bHJlYyA9ICh4bF94YWN0X2Fzc2lnbm1lbnQgKikgWExv Z1JlY0dldERhdGEocmVjb3JkKTsKLQotCQlpZiAoc3RhbmRieVN0YXRlID49IFNUQU5EQllf SU5JVElBTElaRUQpCi0JCQlQcm9jQXJyYXlBcHBseVhpZEFzc2lnbm1lbnQoeGxyZWMtPnh0 b3AsCi0JCQkJCQkJCQkJeGxyZWMtPm5zdWJ4YWN0cywgeGxyZWMtPnhzdWIpOwotCX0KIAll bHNlIGlmIChpbmZvID09IFhMT0dfWEFDVF9JTlZBTElEQVRJT05TKQogCXsKIAkJLyoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCBmYzMwYTUyZDQ5Ni4uY2JlYWMyMjNl MWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKQEAgLTQ4LDYgKzQ4LDcgQEAK IAogI2luY2x1ZGUgImFjY2Vzcy9jbG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2NvbW1pdF90 cy5oIgorI2luY2x1ZGUgImFjY2Vzcy9jc25fbG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hl YXB0b2FzdC5oIgogI2luY2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3QuaCIKICNpbmNsdWRlICJh Y2Nlc3MvcmV3cml0ZWhlYXAuaCIKQEAgLTk1MSw4ICs5NTIsNiBAQCBYTG9nSW5zZXJ0UmVj b3JkKFhMb2dSZWNEYXRhICpyZGF0YSwKIAogCUVORF9DUklUX1NFQ1RJT04oKTsKIAotCU1h cmtDdXJyZW50VHJhbnNhY3Rpb25JZExvZ2dlZElmQW55KCk7Ci0KIAkvKgogCSAqIE1hcmsg dG9wIHRyYW5zYWN0aW9uIGlkIGlzIGxvZ2dlZCAoaWYgbmVlZGVkKSBzbyB0aGF0IHdlIHNo b3VsZCBub3QgdHJ5CiAJICogdG8gbG9nIGl0IGFnYWluIHdpdGggdGhlIG5leHQgV0FMIHJl Y29yZCBpbiB0aGUgY3VycmVudCBzdWJ0cmFuc2FjdGlvbi4KQEAgLTUyMzAsNiArNTIyOSw3 IEBAIEJvb3RTdHJhcFhMT0codWludDMyIGRhdGFfY2hlY2tzdW1fdmVyc2lvbikKIAogCS8q IEJvb3RzdHJhcCB0aGUgY29tbWl0IGxvZywgdG9vICovCiAJQm9vdFN0cmFwQ0xPRygpOwor CUJvb3RTdHJhcENTTkxvZygpOwogCUJvb3RTdHJhcENvbW1pdFRzKCk7CiAJQm9vdFN0cmFw U1VCVFJBTlMoKTsKIAlCb290U3RyYXBNdWx0aVhhY3QoKTsKQEAgLTU4MzEsMTYgKzU4MzEs MTYgQEAgU3RhcnR1cFhMT0codm9pZCkKIAkJICovCiAJCWlmIChBcmNoaXZlUmVjb3ZlcnlS ZXF1ZXN0ZWQgJiYgRW5hYmxlSG90U3RhbmRieSkKIAkJewotCQkJVHJhbnNhY3Rpb25JZCAq eGlkczsKLQkJCWludAkJCW54aWRzOworCQkJRnVsbFRyYW5zYWN0aW9uSWQgbGF0ZXN0Q29t cGxldGVkWGlkOwogCiAJCQllcmVwb3J0KERFQlVHMSwKIAkJCQkJKGVycm1zZ19pbnRlcm5h bCgiaW5pdGlhbGl6aW5nIGZvciBob3Qgc3RhbmRieSIpKSk7CisJCQlJbkhvdFN0YW5kYnkg PSB0cnVlOwogCiAJCQlJbml0UmVjb3ZlcnlUcmFuc2FjdGlvbkVudmlyb25tZW50KCk7CiAK IAkJCWlmICh3YXNTaHV0ZG93bikKLQkJCQlvbGRlc3RBY3RpdmVYSUQgPSBQcmVzY2FuUHJl cGFyZWRUcmFuc2FjdGlvbnMoJnhpZHMsICZueGlkcyk7CisJCQkJb2xkZXN0QWN0aXZlWElE ID0gUHJlc2NhblByZXBhcmVkVHJhbnNhY3Rpb25zKCk7CiAJCQllbHNlCiAJCQkJb2xkZXN0 QWN0aXZlWElEID0gY2hlY2tQb2ludC5vbGRlc3RBY3RpdmVYaWQ7CiAJCQlBc3NlcnQoVHJh bnNhY3Rpb25JZElzVmFsaWQob2xkZXN0QWN0aXZlWElEKSk7CkBAIC01ODU1LDM5ICs1ODU1 LDE3IEBAIFN0YXJ0dXBYTE9HKHZvaWQpCiAJCQkgKi8KIAkJCVN0YXJ0dXBTVUJUUkFOUyhv bGRlc3RBY3RpdmVYSUQpOwogCi0JCQkvKgotCQkJICogSWYgd2UncmUgYmVnaW5uaW5nIGF0 IGEgc2h1dGRvd24gY2hlY2twb2ludCwgd2Uga25vdyB0aGF0Ci0JCQkgKiBub3RoaW5nIHdh cyBydW5uaW5nIG9uIHRoZSBwcmltYXJ5IGF0IHRoaXMgcG9pbnQuIFNvIGZha2UtdXAgYW4K LQkJCSAqIGVtcHR5IHJ1bm5pbmcteGFjdHMgcmVjb3JkIGFuZCB1c2UgdGhhdCBoZXJlIGFu ZCBub3cuIFJlY292ZXIKLQkJCSAqIGFkZGl0aW9uYWwgc3RhbmRieSBzdGF0ZSBmb3IgcHJl cGFyZWQgdHJhbnNhY3Rpb25zLgotCQkJICovCi0JCQlpZiAod2FzU2h1dGRvd24pCi0JCQl7 Ci0JCQkJUnVubmluZ1RyYW5zYWN0aW9uc0RhdGEgcnVubmluZzsKLQkJCQlUcmFuc2FjdGlv bklkIGxhdGVzdENvbXBsZXRlZFhpZDsKKwkJCWxhdGVzdENvbXBsZXRlZFhpZCA9IGNoZWNr UG9pbnQubmV4dFhpZDsKKwkJCUZ1bGxUcmFuc2FjdGlvbklkUmV0cmVhdCgmbGF0ZXN0Q29t cGxldGVkWGlkKTsKKwkJCVRyYW5zYW1WYXJpYWJsZXMtPmxhdGVzdENvbXBsZXRlZFhpZCA9 IGxhdGVzdENvbXBsZXRlZFhpZDsKIAotCQkJCS8qIFVwZGF0ZSBwZ19zdWJ0cmFucyBlbnRy aWVzIGZvciBhbnkgcHJlcGFyZWQgdHJhbnNhY3Rpb25zICovCi0JCQkJU3RhbmRieVJlY292 ZXJQcmVwYXJlZFRyYW5zYWN0aW9ucygpOworCQkJU3RhcnR1cENTTkxvZyhvbGRlc3RBY3Rp dmVYSUQsIFJlZG9SZWNQdHIpOwogCi0JCQkJLyoKLQkJCQkgKiBDb25zdHJ1Y3QgYSBSdW5u aW5nVHJhbnNhY3Rpb25zIHNuYXBzaG90IHJlcHJlc2VudGluZyBhCi0JCQkJICogc2h1dCBk b3duIHNlcnZlciwgd2l0aCBvbmx5IHByZXBhcmVkIHRyYW5zYWN0aW9ucyBzdGlsbAotCQkJ CSAqIGFsaXZlLiBXZSdyZSBuZXZlciBvdmVyZmxvd2VkIGF0IHRoaXMgcG9pbnQgYmVjYXVz ZSBhbGwKLQkJCQkgKiBzdWJ4aWRzIGFyZSBsaXN0ZWQgd2l0aCB0aGVpciBwYXJlbnQgcHJl cGFyZWQgdHJhbnNhY3Rpb25zLgotCQkJCSAqLwotCQkJCXJ1bm5pbmcueGNudCA9IG54aWRz OwotCQkJCXJ1bm5pbmcuc3VieGNudCA9IDA7Ci0JCQkJcnVubmluZy5zdWJ4aWRfc3RhdHVz ID0gU1VCWElEU19JTl9TVUJUUkFOUzsKLQkJCQlydW5uaW5nLm5leHRYaWQgPSBYaWRGcm9t RnVsbFRyYW5zYWN0aW9uSWQoY2hlY2tQb2ludC5uZXh0WGlkKTsKLQkJCQlydW5uaW5nLm9s ZGVzdFJ1bm5pbmdYaWQgPSBvbGRlc3RBY3RpdmVYSUQ7Ci0JCQkJbGF0ZXN0Q29tcGxldGVk WGlkID0gWGlkRnJvbUZ1bGxUcmFuc2FjdGlvbklkKGNoZWNrUG9pbnQubmV4dFhpZCk7Ci0J CQkJVHJhbnNhY3Rpb25JZFJldHJlYXQobGF0ZXN0Q29tcGxldGVkWGlkKTsKLQkJCQlBc3Nl cnQoVHJhbnNhY3Rpb25JZElzTm9ybWFsKGxhdGVzdENvbXBsZXRlZFhpZCkpOwotCQkJCXJ1 bm5pbmcubGF0ZXN0Q29tcGxldGVkWGlkID0gbGF0ZXN0Q29tcGxldGVkWGlkOwotCQkJCXJ1 bm5pbmcueGlkcyA9IHhpZHM7Ci0KLQkJCQlQcm9jQXJyYXlBcHBseVJlY292ZXJ5SW5mbygm cnVubmluZyk7Ci0JCQl9CisJCQlQcm9jQXJyYXlVcGRhdGVPbGRlc3RSdW5uaW5nWGlkKG9s ZGVzdEFjdGl2ZVhJRCk7CisKKwkJCS8qIFVwZGF0ZSBwZ19zdWJ0cmFucyBlbnRyaWVzIGZv ciBhbnkgcHJlcGFyZWQgdHJhbnNhY3Rpb25zICovCisJCQlpZiAod2FzU2h1dGRvd24pCisJ CQkJU3RhbmRieVJlY292ZXJQcmVwYXJlZFRyYW5zYWN0aW9ucygpOwogCQl9CiAKIAkJLyoK QEAgLTU5NzEsNyArNTk0OSw3IEBAIFN0YXJ0dXBYTE9HKHZvaWQpCiAJICogVGhpcyBpbmZv cm1hdGlvbiBpcyBub3QgcXVpdGUgbmVlZGVkIHlldCwgYnV0IGl0IGlzIHBvc2l0aW9uZWQg aGVyZSBzbwogCSAqIGFzIHBvdGVudGlhbCBwcm9ibGVtcyBhcmUgZGV0ZWN0ZWQgYmVmb3Jl IGFueSBvbi1kaXNrIGNoYW5nZSBpcyBkb25lLgogCSAqLwotCW9sZGVzdEFjdGl2ZVhJRCA9 IFByZXNjYW5QcmVwYXJlZFRyYW5zYWN0aW9ucyhOVUxMLCBOVUxMKTsKKwlvbGRlc3RBY3Rp dmVYSUQgPSBQcmVzY2FuUHJlcGFyZWRUcmFuc2FjdGlvbnMoKTsKIAogCS8qCiAJICogQWxs b3cgb3JkaW5hcnkgV0FMIHNlZ21lbnQgY3JlYXRpb24gYmVmb3JlIHBvc3NpYmx5IHN3aXRj aGluZyB0byBhIG5ldwpAQCAtNjEzNyw5ICs2MTE1LDE4IEBAIFN0YXJ0dXBYTE9HKHZvaWQp CiAJICogU3RhcnQgdXAgc3VidHJhbnMsIGlmIG5vdCBhbHJlYWR5IGRvbmUgZm9yIGhvdCBz dGFuZGJ5LiAgKGNvbW1pdAogCSAqIHRpbWVzdGFtcHMgYXJlIHN0YXJ0ZWQgYmVsb3csIGlm IG5lY2Vzc2FyeS4pCiAJICovCi0JaWYgKHN0YW5kYnlTdGF0ZSA9PSBTVEFOREJZX0RJU0FC TEVEKQorCWlmICghSW5Ib3RTdGFuZGJ5KQorCXsKIAkJU3RhcnR1cFNVQlRSQU5TKG9sZGVz dEFjdGl2ZVhJRCk7CiAKKwkJLyoKKwkJICogVE9ETzogd2UgZG9uJ3QgbmVlZCB0byB1cGRh dGUgQ1NOIGxvZyBmcm9tIG5vdyBvbiwgYnV0IGl0J3Mgc3RpbGwKKwkJICogcmVxdWlyZWQg Ynkgc25hcHNob3RzIHRoYXQgd2VyZSB0YWtlbiBiZWZvcmUgcmVjb3ZlcnkgZW5kZWQuICBX ZQorCQkgKiBqdXN0IGxldCBpdCBiZSwgYnV0IGl0IHdvdWxkIGJlIG5pY2UgdG8gdHJ1bmNh dGUgaXQgdG8gMCBhZnRlciBhbGwKKwkJICogdGhlIHNuYXBzaG90cyBhcmUgZ29uZS4KKwkJ ICovCisJfQorCiAJLyoKIAkgKiBQZXJmb3JtIGVuZCBvZiByZWNvdmVyeSBhY3Rpb25zIGZv ciBhbnkgU0xSVXMgdGhhdCBuZWVkIGl0LgogCSAqLwpAQCAtNjIyNSwxMiArNjIxMiwxMiBA QCBTdGFydHVwWExPRyh2b2lkKQogCSAqIFNodXRkb3duIHRoZSByZWNvdmVyeSBlbnZpcm9u bWVudC4gIFRoaXMgbXVzdCBvY2N1ciBhZnRlcgogCSAqIFJlY292ZXJQcmVwYXJlZFRyYW5z YWN0aW9ucygpIChzZWUgbm90ZXMgaW4gbG9ja190d29waGFzZV9yZWNvdmVyKCkpCiAJICog YW5kIGFmdGVyIHN3aXRjaGluZyBTaGFyZWRSZWNvdmVyeVN0YXRlIHRvIFJFQ09WRVJZX1NU QVRFX0RPTkUgc28gYXMKLQkgKiBhbnkgc2Vzc2lvbiBidWlsZGluZyBhIHNuYXBzaG90IHdp bGwgbm90IHJlbHkgb24gS25vd25Bc3NpZ25lZFhpZHMgYXMKKwkgKiBhbnkgc2Vzc2lvbiBi dWlsZGluZyBhIHNuYXBzaG90IHdpbGwgbm90IHJlbHkgb24gdGhlIENTTiBsb2cgYXMKIAkg KiBSZWNvdmVyeUluUHJvZ3Jlc3MoKSB3b3VsZCByZXR1cm4gZmFsc2UgYXQgdGhpcyBzdGFn ZS4gIFRoaXMgaXMKIAkgKiBwYXJ0aWN1bGFybHkgY3JpdGljYWwgZm9yIHByZXBhcmVkIDJQ QyB0cmFuc2FjdGlvbnMsIHRoYXQgd291bGQgc3RpbGwKIAkgKiBuZWVkIHRvIGJlIGluY2x1 ZGVkIGluIHNuYXBzaG90cyBvbmNlIHJlY292ZXJ5IGhhcyBlbmRlZC4KIAkgKi8KLQlpZiAo c3RhbmRieVN0YXRlICE9IFNUQU5EQllfRElTQUJMRUQpCisJaWYgKEluSG90U3RhbmRieSkK IAkJU2h1dGRvd25SZWNvdmVyeVRyYW5zYWN0aW9uRW52aXJvbm1lbnQoKTsKIAogCS8qCkBA IC03MDAyLDcgKzY5ODksNyBAQCBDcmVhdGVDaGVja1BvaW50KGludCBmbGFncykKIAkgKiBz dGFydGluZyBzbmFwc2hvdCBvZiBsb2NrcyBhbmQgdHJhbnNhY3Rpb25zLgogCSAqLwogCWlm ICghc2h1dGRvd24gJiYgWExvZ1N0YW5kYnlJbmZvQWN0aXZlKCkpCi0JCWNoZWNrUG9pbnQu b2xkZXN0QWN0aXZlWGlkID0gR2V0T2xkZXN0QWN0aXZlVHJhbnNhY3Rpb25JZCgpOworCQlj aGVja1BvaW50Lm9sZGVzdEFjdGl2ZVhpZCA9IEdldE9sZGVzdEFjdGl2ZVRyYW5zYWN0aW9u SWQodHJ1ZSk7CiAJZWxzZQogCQljaGVja1BvaW50Lm9sZGVzdEFjdGl2ZVhpZCA9IEludmFs aWRUcmFuc2FjdGlvbklkOwogCkBAIC03Mzk2LDYgKzczODMsOSBAQCBDcmVhdGVDaGVja1Bv aW50KGludCBmbGFncykKIAlpZiAoIVJlY292ZXJ5SW5Qcm9ncmVzcygpKQogCQlUcnVuY2F0 ZVNVQlRSQU5TKEdldE9sZGVzdFRyYW5zYWN0aW9uSWRDb25zaWRlcmVkUnVubmluZygpKTsK IAorCWlmIChzaHV0ZG93bikKKwkJVHJ1bmNhdGVDU05Mb2coR2V0T2xkZXN0VHJhbnNhY3Rp b25JZENvbnNpZGVyZWRSdW5uaW5nKCkpOworCiAJLyogUmVhbCB3b3JrIGlzIGRvbmU7IGxv ZyBhbmQgdXBkYXRlIHN0YXRzLiAqLwogCUxvZ0NoZWNrcG9pbnRFbmQoZmFsc2UpOwogCkBA IC03NTY3LDYgKzc1NTcsNyBAQCBDaGVja1BvaW50R3V0cyhYTG9nUmVjUHRyIGNoZWNrUG9p bnRSZWRvLCBpbnQgZmxhZ3MpCiAJVFJBQ0VfUE9TVEdSRVNRTF9CVUZGRVJfQ0hFQ0tQT0lO VF9TVEFSVChmbGFncyk7CiAJQ2hlY2twb2ludFN0YXRzLmNrcHRfd3JpdGVfdCA9IEdldEN1 cnJlbnRUaW1lc3RhbXAoKTsKIAlDaGVja1BvaW50Q0xPRygpOworCUNoZWNrUG9pbnRDU05M b2coKTsKIAlDaGVja1BvaW50Q29tbWl0VHMoKTsKIAlDaGVja1BvaW50U1VCVFJBTlMoKTsK IAlDaGVja1BvaW50TXVsdGlYYWN0KCk7CkBAIC03ODYzLDcgKzc4NTQsMTAgQEAgQ3JlYXRl UmVzdGFydFBvaW50KGludCBmbGFncykKIAkgKiB0aGlzIGJlY2F1c2UgU3RhcnR1cFNVQlRS QU5TIGhhc24ndCBiZWVuIGNhbGxlZCB5ZXQuCiAJICovCiAJaWYgKEVuYWJsZUhvdFN0YW5k YnkpCisJewogCQlUcnVuY2F0ZVNVQlRSQU5TKEdldE9sZGVzdFRyYW5zYWN0aW9uSWRDb25z aWRlcmVkUnVubmluZygpKTsKKwkJVHJ1bmNhdGVDU05Mb2coR2V0T2xkZXN0VHJhbnNhY3Rp b25JZENvbnNpZGVyZWRSdW5uaW5nKCkpOworCX0KIAogCS8qIFJlYWwgd29yayBpcyBkb25l OyBsb2cgYW5kIHVwZGF0ZSBzdGF0cy4gKi8KIAlMb2dDaGVja3BvaW50RW5kKHRydWUpOwpA QCAtODM0OCw0MSArODM0MiwxNyBAQCB4bG9nX3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNv cmQpCiAKIAkJLyoKIAkJICogSWYgd2Ugc2VlIGEgc2h1dGRvd24gY2hlY2twb2ludCwgd2Ug a25vdyB0aGF0IG5vdGhpbmcgd2FzIHJ1bm5pbmcKLQkJICogb24gdGhlIHByaW1hcnkgYXQg dGhpcyBwb2ludC4gU28gZmFrZS11cCBhbiBlbXB0eSBydW5uaW5nLXhhY3RzCi0JCSAqIHJl Y29yZCBhbmQgdXNlIHRoYXQgaGVyZSBhbmQgbm93LiBSZWNvdmVyIGFkZGl0aW9uYWwgc3Rh bmRieSBzdGF0ZQotCQkgKiBmb3IgcHJlcGFyZWQgdHJhbnNhY3Rpb25zLgorCQkgKiBvbiB0 aGUgcHJpbWFyeSBhdCB0aGlzIHBvaW50LCBleGNlcHQgZm9yIHByZXBhcmVkIHRyYW5zYWN0 aW9ucy4KIAkJICovCi0JCWlmIChzdGFuZGJ5U3RhdGUgPj0gU1RBTkRCWV9JTklUSUFMSVpF RCkKKwkJaWYgKEluSG90U3RhbmRieSkKIAkJewotCQkJVHJhbnNhY3Rpb25JZCAqeGlkczsK LQkJCWludAkJCW54aWRzOwogCQkJVHJhbnNhY3Rpb25JZCBvbGRlc3RBY3RpdmVYSUQ7Ci0J CQlUcmFuc2FjdGlvbklkIGxhdGVzdENvbXBsZXRlZFhpZDsKLQkJCVJ1bm5pbmdUcmFuc2Fj dGlvbnNEYXRhIHJ1bm5pbmc7CiAKLQkJCW9sZGVzdEFjdGl2ZVhJRCA9IFByZXNjYW5QcmVw YXJlZFRyYW5zYWN0aW9ucygmeGlkcywgJm54aWRzKTsKKwkJCW9sZGVzdEFjdGl2ZVhJRCA9 IFByZXNjYW5QcmVwYXJlZFRyYW5zYWN0aW9ucygpOworCQkJUHJvY0FycmF5VXBkYXRlT2xk ZXN0UnVubmluZ1hpZChvbGRlc3RBY3RpdmVYSUQpOwogCiAJCQkvKiBVcGRhdGUgcGdfc3Vi dHJhbnMgZW50cmllcyBmb3IgYW55IHByZXBhcmVkIHRyYW5zYWN0aW9ucyAqLwogCQkJU3Rh bmRieVJlY292ZXJQcmVwYXJlZFRyYW5zYWN0aW9ucygpOwotCi0JCQkvKgotCQkJICogQ29u c3RydWN0IGEgUnVubmluZ1RyYW5zYWN0aW9ucyBzbmFwc2hvdCByZXByZXNlbnRpbmcgYSBz aHV0Ci0JCQkgKiBkb3duIHNlcnZlciwgd2l0aCBvbmx5IHByZXBhcmVkIHRyYW5zYWN0aW9u cyBzdGlsbCBhbGl2ZS4gV2UncmUKLQkJCSAqIG5ldmVyIG92ZXJmbG93ZWQgYXQgdGhpcyBw b2ludCBiZWNhdXNlIGFsbCBzdWJ4aWRzIGFyZSBsaXN0ZWQKLQkJCSAqIHdpdGggdGhlaXIg cGFyZW50IHByZXBhcmVkIHRyYW5zYWN0aW9ucy4KLQkJCSAqLwotCQkJcnVubmluZy54Y250 ID0gbnhpZHM7Ci0JCQlydW5uaW5nLnN1YnhjbnQgPSAwOwotCQkJcnVubmluZy5zdWJ4aWRf c3RhdHVzID0gU1VCWElEU19JTl9TVUJUUkFOUzsKLQkJCXJ1bm5pbmcubmV4dFhpZCA9IFhp ZEZyb21GdWxsVHJhbnNhY3Rpb25JZChjaGVja1BvaW50Lm5leHRYaWQpOwotCQkJcnVubmlu Zy5vbGRlc3RSdW5uaW5nWGlkID0gb2xkZXN0QWN0aXZlWElEOwotCQkJbGF0ZXN0Q29tcGxl dGVkWGlkID0gWGlkRnJvbUZ1bGxUcmFuc2FjdGlvbklkKGNoZWNrUG9pbnQubmV4dFhpZCk7 Ci0JCQlUcmFuc2FjdGlvbklkUmV0cmVhdChsYXRlc3RDb21wbGV0ZWRYaWQpOwotCQkJQXNz ZXJ0KFRyYW5zYWN0aW9uSWRJc05vcm1hbChsYXRlc3RDb21wbGV0ZWRYaWQpKTsKLQkJCXJ1 bm5pbmcubGF0ZXN0Q29tcGxldGVkWGlkID0gbGF0ZXN0Q29tcGxldGVkWGlkOwotCQkJcnVu bmluZy54aWRzID0geGlkczsKLQotCQkJUHJvY0FycmF5QXBwbHlSZWNvdmVyeUluZm8oJnJ1 bm5pbmcpOwogCQl9CiAKIAkJLyogQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5IGFsd2F5 cyB0cmFja3MgdGhlIGxhdGVzdCBja3B0IFhJRCAqLwpAQCAtODQ0Niw2ICs4NDE2LDE2IEBA IHhsb2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKIAkJCQkJCQkJICBjaGVja1Bv aW50Lm9sZGVzdFhpZCkpCiAJCQlTZXRUcmFuc2FjdGlvbklkTGltaXQoY2hlY2tQb2ludC5v bGRlc3RYaWQsCiAJCQkJCQkJCSAgY2hlY2tQb2ludC5vbGRlc3RYaWREQik7CisKKwkJLyoK KwkJICogUmVtZW1iZXIgdGhlIG9sZGVzdCBYSUQgdGhhdCB3YXMgcnVubmluZyBhdCB0aGUg dGltZS4gIE5vcm1hbGx5LAorCQkgKiBhbGwgdHJhbnNhY3Rpb24gYWJvcnRzIGFuZCBjb21t aXRzIGFyZSBXQUwtbG9nZ2VkLCBzbyBvdXIKKwkJICogb2xkZXN0UnVubmluZ1hpZCB2YWx1 ZSBzaG91bGQgYmUgdXAtdG8tZGF0ZSwgYnV0IGlmIG5vdCwgdGhpcworCQkgKiBhbGxvd3Mg dXMgdG8gcmVzeW5jaHJvbml6ZS4KKwkJICovCisJCWlmIChJbkhvdFN0YW5kYnkpCisJCQlQ cm9jQXJyYXlVcGRhdGVPbGRlc3RSdW5uaW5nWGlkKGNoZWNrUG9pbnQub2xkZXN0QWN0aXZl WGlkKTsKKwogCQkvKiBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkgYWx3YXlzIHRyYWNr cyB0aGUgbGF0ZXN0IGNrcHQgWElEICovCiAJCUxXTG9ja0FjcXVpcmUoQ29udHJvbEZpbGVM b2NrLCBMV19FWENMVVNJVkUpOwogCQlDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkubmV4 dFhpZCA9IGNoZWNrUG9pbnQubmV4dFhpZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5z YW0veGxvZ3JlY292ZXJ5LmMKaW5kZXggMGFhM2FiNTkwODUuLmIyMTNiOGE3NGRjIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwpAQCAtMTk3OCwx MCArMTk3OCw5IEBAIEFwcGx5V2FsUmVjb3JkKFhMb2dSZWFkZXJTdGF0ZSAqeGxvZ3JlYWRl ciwgWExvZ1JlY29yZCAqcmVjb3JkLCBUaW1lTGluZUlEICpyZXBsCiAJU3BpbkxvY2tSZWxl YXNlKCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKIAogCS8qCi0JICogSWYgd2UgYXJl IGF0dGVtcHRpbmcgdG8gZW50ZXIgSG90IFN0YW5kYnkgbW9kZSwgcHJvY2VzcyBYSURzIHdl IHNlZQorCSAqIEluIEhvdCBTdGFuZGJ5IG1vZGUsIHByb2Nlc3MgWElEcyB3ZSBzZWUKIAkg Ki8KLQlpZiAoc3RhbmRieVN0YXRlID49IFNUQU5EQllfSU5JVElBTElaRUQgJiYKLQkJVHJh bnNhY3Rpb25JZElzVmFsaWQocmVjb3JkLT54bF94aWQpKQorCWlmIChJbkhvdFN0YW5kYnkg JiYgVHJhbnNhY3Rpb25JZElzVmFsaWQocmVjb3JkLT54bF94aWQpKQogCQlSZWNvcmRLbm93 bkFzc2lnbmVkVHJhbnNhY3Rpb25JZHMocmVjb3JkLT54bF94aWQpOwogCiAJLyoKQEAgLTIy NTgsNyArMjI1Nyw3IEBAIENoZWNrUmVjb3ZlcnlDb25zaXN0ZW5jeSh2b2lkKQogCSAqIHJ1 bj8gSWYgc28sIHdlIGNhbiB0ZWxsIHBvc3RtYXN0ZXIgdGhhdCB0aGUgZGF0YWJhc2UgaXMg Y29uc2lzdGVudCBub3csCiAJICogZW5hYmxpbmcgY29ubmVjdGlvbnMuCiAJICovCi0JaWYg KHN0YW5kYnlTdGF0ZSA9PSBTVEFOREJZX1NOQVBTSE9UX1JFQURZICYmCisJaWYgKEluSG90 U3RhbmRieSAmJgogCQkhTG9jYWxIb3RTdGFuZGJ5QWN0aXZlICYmCiAJCXJlYWNoZWRDb25z aXN0ZW5jeSAmJgogCQlJc1VuZGVyUG9zdG1hc3RlcikKQEAgLTM3MTUsOSArMzcxNCw2IEBA IFdhaXRGb3JXQUxUb0JlY29tZUF2YWlsYWJsZShYTG9nUmVjUHRyIFJlY1B0ciwgYm9vbCBy YW5kQWNjZXNzLAogCQkJCQkJZWxvZyhMT0csICJ3YWl0aW5nIGZvciBXQUwgdG8gYmVjb21l IGF2YWlsYWJsZSBhdCAlWC8lWCIsCiAJCQkJCQkJIExTTl9GT1JNQVRfQVJHUyhSZWNQdHIp KTsKIAotCQkJCQkJLyogRG8gYmFja2dyb3VuZCB0YXNrcyB0aGF0IG1pZ2h0IGJlbmVmaXQg dXMgbGF0ZXIuICovCi0JCQkJCQlLbm93bkFzc2lnbmVkVHJhbnNhY3Rpb25JZHNJZGxlTWFp bnRlbmFuY2UoKTsKLQogCQkJCQkJKHZvaWQpIFdhaXRMYXRjaCgmWExvZ1JlY292ZXJ5Q3Rs LT5yZWNvdmVyeVdha2V1cExhdGNoLAogCQkJCQkJCQkJCSBXTF9MQVRDSF9TRVQgfCBXTF9U SU1FT1VUIHwKIAkJCQkJCQkJCQkgV0xfRVhJVF9PTl9QTV9ERUFUSCwKQEAgLTM5ODMsOSAr Mzk3OSw2IEBAIFdhaXRGb3JXQUxUb0JlY29tZUF2YWlsYWJsZShYTG9nUmVjUHRyIFJlY1B0 ciwgYm9vbCByYW5kQWNjZXNzLAogCQkJCQkJc3RyZWFtaW5nX3JlcGx5X3NlbnQgPSB0cnVl OwogCQkJCQl9CiAKLQkJCQkJLyogRG8gYW55IGJhY2tncm91bmQgdGFza3MgdGhhdCBtaWdo dCBiZW5lZml0IHVzIGxhdGVyLiAqLwotCQkJCQlLbm93bkFzc2lnbmVkVHJhbnNhY3Rpb25J ZHNJZGxlTWFpbnRlbmFuY2UoKTsKLQogCQkJCQkvKiBVcGRhdGUgcGdfc3RhdF9yZWNvdmVy eV9wcmVmZXRjaCBiZWZvcmUgc2xlZXBpbmcuICovCiAJCQkJCVhMb2dQcmVmZXRjaGVyQ29t cHV0ZVN0YXRzKHhsb2dwcmVmZXRjaGVyKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZ3V0aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS94bG9ndXRpbHMuYwppbmRleCBjMzg5YjI3Zjc3ZC4uNzc1ZTFhOTI2ZDggMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1dGlscy5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2d1dGlscy5jCkBAIC01MCw3ICs1MCw3IEBAIGJv b2wJCWlnbm9yZV9pbnZhbGlkX3BhZ2VzID0gZmFsc2U7CiBib29sCQlJblJlY292ZXJ5ID0g ZmFsc2U7CiAKIC8qIEFyZSB3ZSBpbiBIb3QgU3RhbmRieSBtb2RlPyBPbmx5IHZhbGlkIGlu IHN0YXJ0dXAgcHJvY2Vzcywgc2VlIHhsb2d1dGlscy5oICovCi1Ib3RTdGFuZGJ5U3RhdGUg c3RhbmRieVN0YXRlID0gU1RBTkRCWV9ESVNBQkxFRDsKK2Jvb2wJCUluSG90U3RhbmRieSA9 IGZhbHNlOwogCiAvKgogICogRHVyaW5nIFhMT0cgcmVwbGF5LCB3ZSBtYXkgc2VlIFhMT0cg cmVjb3JkcyBmb3IgaW5jcmVtZW50YWwgdXBkYXRlcyBvZgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYmFja3VwL2Jhc2ViYWNrdXAuYyBiL3NyYy9iYWNrZW5kL2JhY2t1cC9iYXNlYmFj a3VwLmMKaW5kZXggODkxNjM3ZTNhNDQuLmYxMzA3ZWQ3MTRjIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9iYWNrdXAvYmFzZWJhY2t1cC5jCisrKyBiL3NyYy9iYWNrZW5kL2JhY2t1cC9i YXNlYmFja3VwLmMKQEAgLTE4MSw2ICsxODEsOSBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29u c3QgZXhjbHVkZURpckNvbnRlbnRzW10gPQogCS8qIENvbnRlbnRzIHplcm9lZCBvbiBzdGFy dHVwLCBzZWUgU3RhcnR1cFNVQlRSQU5TKCkuICovCiAJInBnX3N1YnRyYW5zIiwKIAorCS8q IENvbnRlbnRzIHplcm9lZCBvbiBzdGFydHVwLCBzZWUgU3RhcnR1cENTTkxvZygpLiAqLwor CSJwZ19jc24iLAorCiAJLyogZW5kIG9mIGxpc3QgKi8KIAlOVUxMCiB9OwpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9zdGFydHVwLmMgYi9zcmMvYmFja2VuZC9wb3N0 bWFzdGVyL3N0YXJ0dXAuYwppbmRleCAyN2U4NmNmMzkzZi4uZDA0Mjg2YWIyNzAgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jCisrKyBiL3NyYy9iYWNr ZW5kL3Bvc3RtYXN0ZXIvc3RhcnR1cC5jCkBAIC0yMDMsNyArMjAzLDcgQEAgc3RhdGljIHZv aWQKIFN0YXJ0dXBQcm9jRXhpdChpbnQgY29kZSwgRGF0dW0gYXJnKQogewogCS8qIFNodXRk b3duIHRoZSByZWNvdmVyeSBlbnZpcm9ubWVudCAqLwotCWlmIChzdGFuZGJ5U3RhdGUgIT0g U1RBTkRCWV9ESVNBQkxFRCkKKwlpZiAoSW5Ib3RTdGFuZGJ5KQogCQlTaHV0ZG93blJlY292 ZXJ5VHJhbnNhY3Rpb25FbnZpcm9ubWVudCgpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jIGIvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vbG9naWNhbC9kZWNvZGUuYwppbmRleCA2YTQyOGU5NzIwZS4uODA4YjFkODUzNzkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVjb2RlLmMK KysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUuYwpAQCAtMjcw LDE0ICsyNzAsNiBAQCB4YWN0X2RlY29kZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgs IFhMb2dSZWNvcmRCdWZmZXIgKmJ1ZikKIAkJCQlEZWNvZGVBYm9ydChjdHgsIGJ1ZiwgJnBh cnNlZCwgeGlkLCB0d29fcGhhc2UpOwogCQkJCWJyZWFrOwogCQkJfQotCQljYXNlIFhMT0df WEFDVF9BU1NJR05NRU5UOgotCi0JCQkvKgotCQkJICogV2UgYXNzaWduIHN1YnhhY3QgdG8g dGhlIHRvcGxldmVsIHhhY3Qgd2hpbGUgcHJvY2Vzc2luZyBlYWNoCi0JCQkgKiByZWNvcmQg aWYgcmVxdWlyZWQuICBTbywgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZyBoZXJlLiBT ZWUKLQkJCSAqIExvZ2ljYWxEZWNvZGluZ1Byb2Nlc3NSZWNvcmQuCi0JCQkgKi8KLQkJCWJy ZWFrOwogCQljYXNlIFhMT0dfWEFDVF9JTlZBTElEQVRJT05TOgogCQkJewogCQkJCVRyYW5z YWN0aW9uSWQgeGlkOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9zbmFwYnVpbGQuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25h cGJ1aWxkLmMKaW5kZXggM2M5NGE2MmNkZjYuLjk3ZDI3ODA1MmRmIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jCisrKyBiL3NyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMKQEAgLTI3LDcgKzI3LDcg QEAKICAqIHJlbW92ZWQuIFRoaXMgaXMgYWNoaWV2ZWQgYnkgdXNpbmcgdGhlIHJlcGxpY2F0 aW9uIHNsb3QgbWVjaGFuaXNtLgogICoKICAqIEFzIHRoZSBwZXJjZW50YWdlIG9mIHRyYW5z YWN0aW9ucyBtb2RpZnlpbmcgdGhlIGNhdGFsb2cgbm9ybWFsbHkgaXMgZmFpcmx5Ci0gKiBz bWFsbCBpbiBjb21wYXJpc29ucyB0byBvbmVzIG9ubHkgbWFuaXB1bGF0aW5nIHVzZXIgZGF0 YSwgd2Uga2VlcCB0cmFjayBvZgorICogc21hbGwgaW4gY29tcGFyaXNvbiB0byBvbmVzIG9u bHkgbWFuaXB1bGF0aW5nIHVzZXIgZGF0YSwgd2Uga2VlcCB0cmFjayBvZgogICogdGhlIGNv bW1pdHRlZCBjYXRhbG9nIG1vZGlmeWluZyBvbmVzIGluc2lkZSBbeG1pbiwgeG1heCkgaW5z dGVhZCBvZiBrZWVwaW5nCiAgKiB0cmFjayBvZiBhbGwgcnVubmluZyB0cmFuc2FjdGlvbnMg bGlrZSBpdCdzIGRvbmUgaW4gYSBub3JtYWwgc25hcHNob3QuIE5vdGUKICAqIHRoYXQgd2Un cmUgZ2VuZXJhbGx5IG9ubHkgbG9va2luZyBhdCB0cmFuc2FjdGlvbnMgdGhhdCBoYXZlIGFj cXVpcmVkIGFuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMg Yi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMKaW5kZXggMmZhMDQ1ZTZiMGYuLmZj OTgwNGIyZWFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9pcGNpLmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvaXBjaS5jCkBAIC0xNiw2ICsxNiw3IEBA CiAKICNpbmNsdWRlICJhY2Nlc3MvY2xvZy5oIgogI2luY2x1ZGUgImFjY2Vzcy9jb21taXRf dHMuaCIKKyNpbmNsdWRlICJhY2Nlc3MvY3NuX2xvZy5oIgogI2luY2x1ZGUgImFjY2Vzcy9t dWx0aXhhY3QuaCIKICNpbmNsdWRlICJhY2Nlc3MvbmJ0cmVlLmgiCiAjaW5jbHVkZSAiYWNj ZXNzL3N1YnRyYW5zLmgiCkBAIC0xMjIsNiArMTIzLDcgQEAgQ2FsY3VsYXRlU2htZW1TaXpl KGludCAqbnVtX3NlbWFwaG9yZXMpCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFhMT0dTaG1l bVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFhMb2dSZWNvdmVyeVNobWVtU2l6 ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgQ0xPR1NobWVtU2l6ZSgpKTsKKwlzaXpl ID0gYWRkX3NpemUoc2l6ZSwgQ1NOTG9nU2htZW1TaXplKCkpOwogCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBDb21taXRUc1NobWVtU2l6ZSgpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwg U1VCVFJBTlNTaG1lbVNpemUoKSk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIFR3b1BoYXNl U2htZW1TaXplKCkpOwpAQCAtMjg3LDYgKzI4OSw3IEBAIENyZWF0ZU9yQXR0YWNoU2htZW1T dHJ1Y3RzKHZvaWQpCiAJWExvZ1ByZWZldGNoU2htZW1Jbml0KCk7CiAJWExvZ1JlY292ZXJ5 U2htZW1Jbml0KCk7CiAJQ0xPR1NobWVtSW5pdCgpOworCUNTTkxvZ1NobWVtSW5pdCgpOwog CUNvbW1pdFRzU2htZW1Jbml0KCk7CiAJU1VCVFJBTlNTaG1lbUluaXQoKTsKIAlNdWx0aVhh Y3RTaG1lbUluaXQoKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3By b2NhcnJheS5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMKaW5kZXgg ODE5NjQ5NzQxZjYuLjM0MThkZGY1MzA0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9wcm9jYXJyYXkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9j YXJyYXkuYwpAQCAtMTksMjAgKzE5LDEwIEBACiAgKiBteVByb2NMb2NrcyBsaXN0cy4gIFRo ZXkgY2FuIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSByZWd1bGFyIGJhY2tlbmQgUEdQUk9Dcwog ICogYXQgbmVlZCBieSBjaGVja2luZyBmb3IgcGlkID09IDAuCiAgKgotICogRHVyaW5nIGhv dCBzdGFuZGJ5LCB3ZSBhbHNvIGtlZXAgYSBsaXN0IG9mIFhJRHMgcmVwcmVzZW50aW5nIHRy YW5zYWN0aW9ucwotICogdGhhdCBhcmUga25vd24gdG8gYmUgcnVubmluZyBvbiB0aGUgcHJp bWFyeSAob3IgbW9yZSBwcmVjaXNlbHksIHdlcmUgcnVubmluZwotICogYXMgb2YgdGhlIGN1 cnJlbnQgcG9pbnQgaW4gdGhlIFdBTCBzdHJlYW0pLiAgVGhpcyBsaXN0IGlzIGtlcHQgaW4g dGhlCi0gKiBLbm93bkFzc2lnbmVkWGlkcyBhcnJheSwgYW5kIGlzIHVwZGF0ZWQgYnkgd2F0 Y2hpbmcgdGhlIHNlcXVlbmNlIG9mCi0gKiBhcnJpdmluZyBYSURzLiAgVGhpcyBpcyBuZWNl c3NhcnkgYmVjYXVzZSBpZiB3ZSBsZWF2ZSB0aG9zZSBYSURzIG91dCBvZgotICogc25hcHNo b3RzIHRha2VuIGZvciBzdGFuZGJ5IHF1ZXJpZXMsIHRoZW4gdGhleSB3aWxsIGFwcGVhciB0 byBiZSBhbHJlYWR5Ci0gKiBjb21wbGV0ZSwgbGVhZGluZyB0byBNVkNDIGZhaWx1cmVzLiAg Tm90ZSB0aGF0IGluIGhvdCBzdGFuZGJ5LCB0aGUgUEdQUk9DCi0gKiBhcnJheSByZXByZXNl bnRzIHN0YW5kYnkgcHJvY2Vzc2VzLCB3aGljaCBieSBkZWZpbml0aW9uIGFyZSBub3QgcnVu bmluZwotICogdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBYSURzLgotICoKLSAqIEl0IGlzIHBl cmhhcHMgcG9zc2libGUgZm9yIGEgYmFja2VuZCBvbiB0aGUgcHJpbWFyeSB0byB0ZXJtaW5h dGUgd2l0aG91dAotICogd3JpdGluZyBhbiBhYm9ydCByZWNvcmQgZm9yIGl0cyB0cmFuc2Fj dGlvbi4gIFdoaWxlIHRoYXQgc2hvdWxkbid0IHJlYWxseQotICogaGFwcGVuLCBpdCB3b3Vs ZCB0aWUgdXAgS25vd25Bc3NpZ25lZFhpZHMgaW5kZWZpbml0ZWx5LCBzbyB3ZSBwcm90ZWN0 Ci0gKiBvdXJzZWx2ZXMgYnkgcHJ1bmluZyB0aGUgYXJyYXkgd2hlbiBhIHZhbGlkIGxpc3Qg b2YgcnVubmluZyBYSURzIGFycml2ZXMuCisgKiBEdXJpbmcgaG90IHN0YW5kYnksIHdlIGRv bid0IGhhdmUgUEdQUk9DIGVudHJpZXMgcmVwcmVzZW50aW5nIHRyYW5zYWN0aW9ucworICog cnVubmluZyBpbiB0aGUgcHJpbWFyeS4gIEluIHNuYXBzaG90cyB0YWtlbiBkdXJpbmcgcmVj b3ZlcnksIHRoZSBzbmFwc2hvdAorICogY29udGFpbnMgYSBDb21taXQtU2VxdWVuY2UgTnVt YmVyIChDU04pIHdoaWNoIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoCisgKiBYSURzIGFy ZSBzdGlsbCBjb25zaWRlcmVkIGFzIHJ1bm5pbmcgYnkgdGhlIHNuYXBzaG90LgogICoKICAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdl bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKQEAgLTQ3LDYgKzM3LDcgQEAK IAogI2luY2x1ZGUgPHNpZ25hbC5oPgogCisjaW5jbHVkZSAiYWNjZXNzL2Nzbl9sb2cuaCIK ICNpbmNsdWRlICJhY2Nlc3Mvc3VidHJhbnMuaCIKICNpbmNsdWRlICJhY2Nlc3MvdHJhbnNh bS5oIgogI2luY2x1ZGUgImFjY2Vzcy90d29waGFzZS5oIgpAQCAtNzQsMjIgKzY1LDggQEAg dHlwZWRlZiBzdHJ1Y3QgUHJvY0FycmF5U3RydWN0CiAJaW50CQkJbnVtUHJvY3M7CQkvKiBu dW1iZXIgb2YgdmFsaWQgcHJvY3MgZW50cmllcyAqLwogCWludAkJCW1heFByb2NzOwkJLyog YWxsb2NhdGVkIHNpemUgb2YgcHJvY3MgYXJyYXkgKi8KIAotCS8qCi0JICogS25vd24gYXNz aWduZWQgWElEcyBoYW5kbGluZwotCSAqLwotCWludAkJCW1heEtub3duQXNzaWduZWRYaWRz OwkvKiBhbGxvY2F0ZWQgc2l6ZSBvZiBhcnJheSAqLwotCWludAkJCW51bUtub3duQXNzaWdu ZWRYaWRzOwkvKiBjdXJyZW50ICMgb2YgdmFsaWQgZW50cmllcyAqLwotCWludAkJCXRhaWxL bm93bkFzc2lnbmVkWGlkczsJLyogaW5kZXggb2Ygb2xkZXN0IHZhbGlkIGVsZW1lbnQgKi8K LQlpbnQJCQloZWFkS25vd25Bc3NpZ25lZFhpZHM7CS8qIGluZGV4IG9mIG5ld2VzdCBlbGVt ZW50LCArIDEgKi8KLQotCS8qCi0JICogSGlnaGVzdCBzdWJ4aWQgdGhhdCBoYXMgYmVlbiBy ZW1vdmVkIGZyb20gS25vd25Bc3NpZ25lZFhpZHMgYXJyYXkgdG8KLQkgKiBwcmV2ZW50IG92 ZXJmbG93OyBvciBJbnZhbGlkVHJhbnNhY3Rpb25JZCBpZiBub25lLiAgV2UgdHJhY2sgdGhp cyBmb3IKLQkgKiBzaW1pbGFyIHJlYXNvbnMgdG8gdHJhY2tpbmcgb3ZlcmZsb3dpbmcgY2Fj aGVkIHN1YnhpZHMgaW4gUEdQUk9DCi0JICogZW50cmllcy4gIE11c3QgaG9sZCBleGNsdXNp dmUgUHJvY0FycmF5TG9jayB0byBjaGFuZ2UgdGhpcywgYW5kIHNoYXJlZAotCSAqIGxvY2sg dG8gcmVhZCBpdC4KLQkgKi8KLQlUcmFuc2FjdGlvbklkIGxhc3RPdmVyZmxvd2VkWGlkOwor CS8qIEluIHJlY292ZXJ5LCBvbGRlc3QgWElEIHRoYXQgY291bGQgYmUgc3RpbGwgcnVubmlu ZyBpbiBwcmltYXJ5ICovCisJVHJhbnNhY3Rpb25JZCBvbGRlc3RfcnVubmluZ19wcmltYXJ5 X3hpZDsKIAogCS8qIG9sZGVzdCB4bWluIG9mIGFueSByZXBsaWNhdGlvbiBzbG90ICovCiAJ VHJhbnNhY3Rpb25JZCByZXBsaWNhdGlvbl9zbG90X3htaW47CkBAIC0xMDAsNiArNzcsMjEg QEAgdHlwZWRlZiBzdHJ1Y3QgUHJvY0FycmF5U3RydWN0CiAJaW50CQkJcGdwcm9jbm9zW0ZM RVhJQkxFX0FSUkFZX01FTUJFUl07CiB9IFByb2NBcnJheVN0cnVjdDsKIAorI2RlZmluZSBQ Uk9DQVJSQVlfTUFYUFJPQ1MJKE1heEJhY2tlbmRzICsgbWF4X3ByZXBhcmVkX3hhY3RzKQor CisvKgorICogVE9UQUxfTUFYX0NBQ0hFRF9TVUJYSURTIGlzIHRoZSB0b3RhbCBudW1iZXIg b2YgWElEcyB0aGF0IGZpdHMgaW4gdGhlIHByb2MKKyAqIGFycmF5LCBhcyB0b3AgWElEcyBh bmQgaW4gdGhlIHN1YnhpZHMgY2FjaGVzLgorICoKKyAqIExvY2FsIGRhdGEgc3RydWN0dXJl cyBhcmUgYWxzbyBjcmVhdGVkIGluIHZhcmlvdXMgYmFja2VuZHMgZHVyaW5nCisgKiBHZXRT bmFwc2hvdERhdGEoKSwgVHJhbnNhY3Rpb25JZElzSW5Qcm9ncmVzcygpIGFuZAorICogR2V0 UnVubmluZ1RyYW5zYWN0aW9uRGF0YSgpLiBBbGwgb2YgdGhlIG1haW4gc3RydWN0dXJlcyBj cmVhdGVkIGluIHRob3NlCisgKiBmdW5jdGlvbnMgbXVzdCBiZSBpZGVudGljYWxseSBzaXpl ZCwgc2luY2Ugd2UgbWF5IGF0IHRpbWVzIGNvcHkgdGhlIHdob2xlCisgKiBvZiB0aGUgZGF0 YSBzdHJ1Y3R1cmVzIGFyb3VuZC4KKyAqLworI2RlZmluZSBUT1RBTF9NQVhfQ0FDSEVEX1NV QlhJRFMgXAorCSgoUEdQUk9DX01BWF9DQUNIRURfU1VCWElEUyArIDEpICogUFJPQ0FSUkFZ X01BWFBST0NTKQorCiAvKgogICogU3RhdGUgZm9yIHRoZSBHbG9iYWxWaXNUZXN0KiBmYW1p bHkgb2YgZnVuY3Rpb25zLiBUaG9zZSBmdW5jdGlvbnMgY2FuCiAgKiBlLmcuIGJlIHVzZWQg dG8gZGVjaWRlIGlmIGEgZGVsZXRlZCByb3cgY2FuIGJlIHJlbW92ZWQgd2l0aG91dCB2aW9s YXRpbmcKQEAgLTI1NSwxNyArMjQ3LDYgQEAgdHlwZWRlZiBlbnVtIEdsb2JhbFZpc0hvcml6 b25LaW5kCiAJVklTSE9SSVpPTl9URU1QLAogfSBHbG9iYWxWaXNIb3Jpem9uS2luZDsKIAot LyoKLSAqIFJlYXNvbiBjb2RlcyBmb3IgS25vd25Bc3NpZ25lZFhpZHNDb21wcmVzcygpLgot ICovCi10eXBlZGVmIGVudW0gS0FYQ29tcHJlc3NSZWFzb24KLXsKLQlLQVhfTk9fU1BBQ0Us CQkJCS8qIG5lZWQgdG8gZnJlZSB1cCBzcGFjZSBhdCBhcnJheSBlbmQgKi8KLQlLQVhfUFJV TkUsCQkJCQkvKiB3ZSBqdXN0IHBydW5lZCBvbGQgZW50cmllcyAqLwotCUtBWF9UUkFOU0FD VElPTl9FTkQsCQkvKiB3ZSBqdXN0IGNvbW1pdHRlZC9yZW1vdmVkIHNvbWUgWElEcyAqLwot CUtBWF9TVEFSVFVQX1BST0NFU1NfSURMRSwJLyogc3RhcnR1cCBwcm9jZXNzIGlzIGFib3V0 IHRvIHNsZWVwICovCi19IEtBWENvbXByZXNzUmVhc29uOwotCiAKIHN0YXRpYyBQcm9jQXJy YXlTdHJ1Y3QgKnByb2NBcnJheTsKIApAQCAtMjc3LDE5ICsyNTgsMTAgQEAgc3RhdGljIFBH UFJPQyAqYWxsUHJvY3M7CiBzdGF0aWMgVHJhbnNhY3Rpb25JZCBjYWNoZWRYaWRJc05vdElu UHJvZ3Jlc3MgPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAogLyoKLSAqIEJvb2trZWVwaW5n IGZvciB0cmFja2luZyBlbXVsYXRlZCB0cmFuc2FjdGlvbnMgaW4gcmVjb3ZlcnkKKyAqIEJv b2trZWVwaW5nIGZvciB0cmFja2luZyB0cmFuc2FjdGlvbnMgc2VlbiBkdXJpbmcgcmVjb3Zl cnkKICAqLwotc3RhdGljIFRyYW5zYWN0aW9uSWQgKktub3duQXNzaWduZWRYaWRzOwotc3Rh dGljIGJvb2wgKktub3duQXNzaWduZWRYaWRzVmFsaWQ7CiBzdGF0aWMgVHJhbnNhY3Rpb25J ZCBsYXRlc3RPYnNlcnZlZFhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCi0vKgotICog SWYgd2UncmUgaW4gU1RBTkRCWV9TTkFQU0hPVF9QRU5ESU5HIHN0YXRlLCBzdGFuZGJ5U25h cHNob3RQZW5kaW5nWG1pbiBpcwotICogdGhlIGhpZ2hlc3QgeGlkIHRoYXQgbWlnaHQgc3Rp bGwgYmUgcnVubmluZyB0aGF0IHdlIGRvbid0IGhhdmUgaW4KLSAqIEtub3duQXNzaWduZWRY aWRzLgotICovCi1zdGF0aWMgVHJhbnNhY3Rpb25JZCBzdGFuZGJ5U25hcHNob3RQZW5kaW5n WG1pbjsKLQogLyoKICAqIFN0YXRlIGZvciB2aXNpYmlsaXR5IGNoZWNrcyBvbiBkaWZmZXJl bnQgdHlwZXMgb2YgcmVsYXRpb25zLiBTZWUgc3RydWN0CiAgKiBHbG9iYWxWaXNTdGF0ZSBm b3IgZGV0YWlscy4gQXMgc2hhcmVkLCBjYXRhbG9nLCBub3JtYWwgYW5kIHRlbXBvcmFyeQpA QCAtMzE2LDcgKzI4OCw3IEBAIHN0YXRpYyBsb25nIHhjX2J5X215X3hhY3QgPSAwOwogc3Rh dGljIGxvbmcgeGNfYnlfbGF0ZXN0X3hpZCA9IDA7CiBzdGF0aWMgbG9uZyB4Y19ieV9tYWlu X3hpZCA9IDA7CiBzdGF0aWMgbG9uZyB4Y19ieV9jaGlsZF94aWQgPSAwOwotc3RhdGljIGxv bmcgeGNfYnlfa25vd25fYXNzaWduZWQgPSAwOworc3RhdGljIGxvbmcgeGNfZHVyaW5nX3Jl Y292ZXJ5ID0gMDsKIHN0YXRpYyBsb25nIHhjX25vX292ZXJmbG93ID0gMDsKIHN0YXRpYyBs b25nIHhjX3Nsb3dfYW5zd2VyID0gMDsKIApAQCAtMzI2LDcgKzI5OCw3IEBAIHN0YXRpYyBs b25nIHhjX3Nsb3dfYW5zd2VyID0gMDsKICNkZWZpbmUgeGNfYnlfbGF0ZXN0X3hpZF9pbmMo KQkJKHhjX2J5X2xhdGVzdF94aWQrKykKICNkZWZpbmUgeGNfYnlfbWFpbl94aWRfaW5jKCkJ CSh4Y19ieV9tYWluX3hpZCsrKQogI2RlZmluZSB4Y19ieV9jaGlsZF94aWRfaW5jKCkJCSh4 Y19ieV9jaGlsZF94aWQrKykKLSNkZWZpbmUgeGNfYnlfa25vd25fYXNzaWduZWRfaW5jKCkJ KHhjX2J5X2tub3duX2Fzc2lnbmVkKyspCisjZGVmaW5lIHhjX2R1cmluZ19yZWNvdmVyeV9p bmMoKQkoeGNfZHVyaW5nX3JlY292ZXJ5KyspCiAjZGVmaW5lIHhjX25vX292ZXJmbG93X2lu YygpCQkoeGNfbm9fb3ZlcmZsb3crKykKICNkZWZpbmUgeGNfc2xvd19hbnN3ZXJfaW5jKCkJ CSh4Y19zbG93X2Fuc3dlcisrKQogCkBAIC0zMzksMjggKzMxMSwxMiBAQCBzdGF0aWMgdm9p ZCBEaXNwbGF5WGlkQ2FjaGUodm9pZCk7CiAjZGVmaW5lIHhjX2J5X2xhdGVzdF94aWRfaW5j KCkJCSgodm9pZCkgMCkKICNkZWZpbmUgeGNfYnlfbWFpbl94aWRfaW5jKCkJCSgodm9pZCkg MCkKICNkZWZpbmUgeGNfYnlfY2hpbGRfeGlkX2luYygpCQkoKHZvaWQpIDApCi0jZGVmaW5l IHhjX2J5X2tub3duX2Fzc2lnbmVkX2luYygpCSgodm9pZCkgMCkKKyNkZWZpbmUgeGNfZHVy aW5nX3JlY292ZXJ5X2luYygpCSgodm9pZCkgMCkKICNkZWZpbmUgeGNfbm9fb3ZlcmZsb3df aW5jKCkJCSgodm9pZCkgMCkKICNkZWZpbmUgeGNfc2xvd19hbnN3ZXJfaW5jKCkJCSgodm9p ZCkgMCkKICNlbmRpZgkJCQkJCQkvKiBYSURDQUNIRV9ERUJVRyAqLwogCi0vKiBQcmltaXRp dmVzIGZvciBLbm93bkFzc2lnbmVkWGlkcyBhcnJheSBoYW5kbGluZyBmb3Igc3RhbmRieSAq Lwotc3RhdGljIHZvaWQgS25vd25Bc3NpZ25lZFhpZHNDb21wcmVzcyhLQVhDb21wcmVzc1Jl YXNvbiByZWFzb24sIGJvb2wgaGF2ZUxvY2spOwotc3RhdGljIHZvaWQgS25vd25Bc3NpZ25l ZFhpZHNBZGQoVHJhbnNhY3Rpb25JZCBmcm9tX3hpZCwgVHJhbnNhY3Rpb25JZCB0b194aWQs Ci0JCQkJCQkJCSBib29sIGV4Y2x1c2l2ZV9sb2NrKTsKLXN0YXRpYyBib29sIEtub3duQXNz aWduZWRYaWRzU2VhcmNoKFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIHJlbW92ZSk7Ci1zdGF0 aWMgYm9vbCBLbm93bkFzc2lnbmVkWGlkRXhpc3RzKFRyYW5zYWN0aW9uSWQgeGlkKTsKLXN0 YXRpYyB2b2lkIEtub3duQXNzaWduZWRYaWRzUmVtb3ZlKFRyYW5zYWN0aW9uSWQgeGlkKTsK LXN0YXRpYyB2b2lkIEtub3duQXNzaWduZWRYaWRzUmVtb3ZlVHJlZShUcmFuc2FjdGlvbklk IHhpZCwgaW50IG5zdWJ4aWRzLAotCQkJCQkJCQkJCVRyYW5zYWN0aW9uSWQgKnN1YnhpZHMp Owotc3RhdGljIHZvaWQgS25vd25Bc3NpZ25lZFhpZHNSZW1vdmVQcmVjZWRpbmcoVHJhbnNh Y3Rpb25JZCByZW1vdmVYaWQpOwotc3RhdGljIGludAlLbm93bkFzc2lnbmVkWGlkc0dldChU cmFuc2FjdGlvbklkICp4YXJyYXksIFRyYW5zYWN0aW9uSWQgeG1heCk7Ci1zdGF0aWMgaW50 CUtub3duQXNzaWduZWRYaWRzR2V0QW5kU2V0WG1pbihUcmFuc2FjdGlvbklkICp4YXJyYXks Ci0JCQkJCQkJCQkJICAgVHJhbnNhY3Rpb25JZCAqeG1pbiwKLQkJCQkJCQkJCQkgICBUcmFu c2FjdGlvbklkIHhtYXgpOwotc3RhdGljIFRyYW5zYWN0aW9uSWQgS25vd25Bc3NpZ25lZFhp ZHNHZXRPbGRlc3RYbWluKHZvaWQpOwotc3RhdGljIHZvaWQgS25vd25Bc3NpZ25lZFhpZHNE aXNwbGF5KGludCB0cmFjZV9sZXZlbCk7Ci1zdGF0aWMgdm9pZCBLbm93bkFzc2lnbmVkWGlk c1Jlc2V0KHZvaWQpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgUHJvY0FycmF5RW5kVHJhbnNh Y3Rpb25JbnRlcm5hbChQR1BST0MgKnByb2MsIFRyYW5zYWN0aW9uSWQgbGF0ZXN0WGlkKTsK IHN0YXRpYyB2b2lkIFByb2NBcnJheUdyb3VwQ2xlYXJYaWQoUEdQUk9DICpwcm9jLCBUcmFu c2FjdGlvbklkIGxhdGVzdFhpZCk7CiBzdGF0aWMgdm9pZCBNYWludGFpbkxhdGVzdENvbXBs ZXRlZFhpZChUcmFuc2FjdGlvbklkIGxhdGVzdFhpZCk7CkBAIC0zODQsMzEgKzM0MCw2IEBA IFByb2NBcnJheVNobWVtU2l6ZSh2b2lkKQogCXNpemUgPSBvZmZzZXRvZihQcm9jQXJyYXlT dHJ1Y3QsIHBncHJvY25vcyk7CiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKHNp emVvZihpbnQpLCBQUk9DQVJSQVlfTUFYUFJPQ1MpKTsKIAotCS8qCi0JICogRHVyaW5nIEhv dCBTdGFuZGJ5IHByb2Nlc3Npbmcgd2UgaGF2ZSBhIGRhdGEgc3RydWN0dXJlIGNhbGxlZAot CSAqIEtub3duQXNzaWduZWRYaWRzLCBjcmVhdGVkIGluIHNoYXJlZCBtZW1vcnkuIExvY2Fs IGRhdGEgc3RydWN0dXJlcyBhcmUKLQkgKiBhbHNvIGNyZWF0ZWQgaW4gdmFyaW91cyBiYWNr ZW5kcyBkdXJpbmcgR2V0TVZDQ1NuYXBzaG90RGF0YSgpLAotCSAqIFRyYW5zYWN0aW9uSWRJ c0luUHJvZ3Jlc3MoKSBhbmQgR2V0UnVubmluZ1RyYW5zYWN0aW9uRGF0YSgpLiBBbGwgb2Yg dGhlCi0JICogbWFpbiBzdHJ1Y3R1cmVzIGNyZWF0ZWQgaW4gdGhvc2UgZnVuY3Rpb25zIG11 c3QgYmUgaWRlbnRpY2FsbHkgc2l6ZWQsCi0JICogc2luY2Ugd2UgbWF5IGF0IHRpbWVzIGNv cHkgdGhlIHdob2xlIG9mIHRoZSBkYXRhIHN0cnVjdHVyZXMgYXJvdW5kLiBXZQotCSAqIHJl ZmVyIHRvIHRoaXMgc2l6ZSBhcyBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMuCi0JICoKLQkg KiBJZGVhbGx5IHdlJ2Qgb25seSBjcmVhdGUgdGhpcyBzdHJ1Y3R1cmUgaWYgd2Ugd2VyZSBh Y3R1YWxseSBkb2luZyBob3QKLQkgKiBzdGFuZGJ5IGluIHRoZSBjdXJyZW50IHJ1biwgYnV0 IHdlIGRvbid0IGtub3cgdGhhdCB5ZXQgYXQgdGhlIHRpbWUKLQkgKiBzaGFyZWQgbWVtb3J5 IGlzIGJlaW5nIHNldCB1cC4KLQkgKi8KLSNkZWZpbmUgVE9UQUxfTUFYX0NBQ0hFRF9TVUJY SURTIFwKLQkoKFBHUFJPQ19NQVhfQ0FDSEVEX1NVQlhJRFMgKyAxKSAqIFBST0NBUlJBWV9N QVhQUk9DUykKLQotCWlmIChFbmFibGVIb3RTdGFuZGJ5KQotCXsKLQkJc2l6ZSA9IGFkZF9z aXplKHNpemUsCi0JCQkJCQltdWxfc2l6ZShzaXplb2YoVHJhbnNhY3Rpb25JZCksCi0JCQkJ CQkJCSBUT1RBTF9NQVhfQ0FDSEVEX1NVQlhJRFMpKTsKLQkJc2l6ZSA9IGFkZF9zaXplKHNp emUsCi0JCQkJCQltdWxfc2l6ZShzaXplb2YoYm9vbCksIFRPVEFMX01BWF9DQUNIRURfU1VC WElEUykpOwotCX0KLQogCXJldHVybiBzaXplOwogfQogCkBAIC00MzUsMzEgKzM2NiwxMiBA QCBQcm9jQXJyYXlTaG1lbUluaXQodm9pZCkKIAkJICovCiAJCXByb2NBcnJheS0+bnVtUHJv Y3MgPSAwOwogCQlwcm9jQXJyYXktPm1heFByb2NzID0gUFJPQ0FSUkFZX01BWFBST0NTOwot CQlwcm9jQXJyYXktPm1heEtub3duQXNzaWduZWRYaWRzID0gVE9UQUxfTUFYX0NBQ0hFRF9T VUJYSURTOwotCQlwcm9jQXJyYXktPm51bUtub3duQXNzaWduZWRYaWRzID0gMDsKLQkJcHJv Y0FycmF5LT50YWlsS25vd25Bc3NpZ25lZFhpZHMgPSAwOwotCQlwcm9jQXJyYXktPmhlYWRL bm93bkFzc2lnbmVkWGlkcyA9IDA7Ci0JCXByb2NBcnJheS0+bGFzdE92ZXJmbG93ZWRYaWQg PSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAkJcHJvY0FycmF5LT5yZXBsaWNhdGlvbl9zbG90 X3htaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAkJcHJvY0FycmF5LT5yZXBsaWNhdGlv bl9zbG90X2NhdGFsb2dfeG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOwogCQlUcmFuc2Ft VmFyaWFibGVzLT54YWN0Q29tcGxldGlvbkNvdW50ID0gMTsKIAl9CiAKIAlhbGxQcm9jcyA9 IFByb2NHbG9iYWwtPmFsbFByb2NzOwotCi0JLyogQ3JlYXRlIG9yIGF0dGFjaCB0byB0aGUg S25vd25Bc3NpZ25lZFhpZHMgYXJyYXlzIHRvbywgaWYgbmVlZGVkICovCi0JaWYgKEVuYWJs ZUhvdFN0YW5kYnkpCi0JewotCQlLbm93bkFzc2lnbmVkWGlkcyA9IChUcmFuc2FjdGlvbklk ICopCi0JCQlTaG1lbUluaXRTdHJ1Y3QoIktub3duQXNzaWduZWRYaWRzIiwKLQkJCQkJCQlt dWxfc2l6ZShzaXplb2YoVHJhbnNhY3Rpb25JZCksCi0JCQkJCQkJCQkgVE9UQUxfTUFYX0NB Q0hFRF9TVUJYSURTKSwKLQkJCQkJCQkmZm91bmQpOwotCQlLbm93bkFzc2lnbmVkWGlkc1Zh bGlkID0gKGJvb2wgKikKLQkJCVNobWVtSW5pdFN0cnVjdCgiS25vd25Bc3NpZ25lZFhpZHNW YWxpZCIsCi0JCQkJCQkJbXVsX3NpemUoc2l6ZW9mKGJvb2wpLCBUT1RBTF9NQVhfQ0FDSEVE X1NVQlhJRFMpLAotCQkJCQkJCSZmb3VuZCk7Ci0JfQogfQogCiAvKgpAQCAtMTAyMywzNTUg KzkzNSwzNSBAQCBNYWludGFpbkxhdGVzdENvbXBsZXRlZFhpZFJlY292ZXJ5KFRyYW5zYWN0 aW9uSWQgbGF0ZXN0WGlkKQogdm9pZAogUHJvY0FycmF5SW5pdFJlY292ZXJ5KFRyYW5zYWN0 aW9uSWQgaW5pdGlhbGl6ZWRVcHRvWElEKQogewotCUFzc2VydChzdGFuZGJ5U3RhdGUgPT0g U1RBTkRCWV9JTklUSUFMSVpFRCk7CisJQXNzZXJ0KEluSG90U3RhbmRieSk7CiAJQXNzZXJ0 KFRyYW5zYWN0aW9uSWRJc05vcm1hbChpbml0aWFsaXplZFVwdG9YSUQpKTsKIAogCS8qCi0J ICogd2Ugc2V0IGxhdGVzdE9ic2VydmVkWGlkIHRvIHRoZSB4aWQgU1VCVFJBTlMgaGFzIGJl ZW4gaW5pdGlhbGl6ZWQgdXAKLQkgKiB0bywgc28gd2UgY2FuIGV4dGVuZCBpdCBmcm9tIHRo YXQgcG9pbnQgb253YXJkcyBpbgotCSAqIFJlY29yZEtub3duQXNzaWduZWRUcmFuc2FjdGlv bklkcywgYW5kIHdoZW4gd2UgZ2V0IGNvbnNpc3RlbnQgaW4KLQkgKiBQcm9jQXJyYXlBcHBs eVJlY292ZXJ5SW5mbygpLgorCSAqIHdlIHNldCBsYXRlc3RPYnNlcnZlZFhpZCB0byB0aGUg eGlkIFNVQlRSQU5TIGFuZCBDU04gbG9nIGhhdmUgYmVlbgorCSAqIGluaXRpYWxpemVkIHVw IHRvLCBzbyB3ZSBjYW4gZXh0ZW5kIGl0IGZyb20gdGhhdCBwb2ludCBvbndhcmRzIHdoZW5l dmVyCisJICogd2Ugb2JzZXJ2ZSBuZXcgWElEcy4KIAkgKi8KIAlsYXRlc3RPYnNlcnZlZFhp ZCA9IGluaXRpYWxpemVkVXB0b1hJRDsKIAlUcmFuc2FjdGlvbklkUmV0cmVhdChsYXRlc3RP YnNlcnZlZFhpZCk7CiB9CiAKIC8qCi0gKiBQcm9jQXJyYXlBcHBseVJlY292ZXJ5SW5mbyAt LSBhcHBseSByZWNvdmVyeSBpbmZvIGFib3V0IHhpZHMKLSAqCi0gKiBUYWtlcyB1cyB0aHJv dWdoIDMgc3RhdGVzOiBJbml0aWFsaXplZCwgUGVuZGluZyBhbmQgUmVhZHkuCi0gKiBOb3Jt YWwgY2FzZSBpcyB0byBnbyBhbGwgdGhlIHdheSB0byBSZWFkeSBzdHJhaWdodCBhd2F5LCB0 aG91Z2ggdGhlcmUKLSAqIGFyZSBhdHlwaWNhbCBjYXNlcyB3aGVyZSB3ZSBuZWVkIHRvIHRh a2UgaXQgaW4gc3RlcHMuCi0gKgotICogVXNlIHRoZSBkYXRhIGFib3V0IHJ1bm5pbmcgdHJh bnNhY3Rpb25zIG9uIHRoZSBwcmltYXJ5IHRvIGNyZWF0ZSB0aGUgaW5pdGlhbAotICogc3Rh dGUgb2YgS25vd25Bc3NpZ25lZFhpZHMuIFdlIGFsc28gdXNlIHRoZXNlIHJlY29yZHMgdG8g cmVndWxhcmx5IHBydW5lCi0gKiBLbm93bkFzc2lnbmVkWGlkcyBiZWNhdXNlIHdlIGtub3cg aXQgaXMgcG9zc2libGUgdGhhdCBzb21lIHRyYW5zYWN0aW9ucwotICogd2l0aCBGQVRBTCBl cnJvcnMgZmFpbCB0byB3cml0ZSBhYm9ydCByZWNvcmRzLCB3aGljaCBjb3VsZCBjYXVzZSBl dmVudHVhbAotICogb3ZlcmZsb3cuCi0gKgotICogU2VlIGNvbW1lbnRzIGZvciBMb2dTdGFu ZGJ5U25hcHNob3QoKS4KKyAqIFVwZGF0ZSBvbGRlc3QgcnVubmluZyBYSUQuIGZyb20gYSBj aGVja3BvaW50IHJlY29yZC4gVGhpcyBhbGxvd3MgdHJ1bmNhdGluZworICogU1VCVFJBTlMg YW5kIHRoZSBDU04gbG9nLgogICovCiB2b2lkCi1Qcm9jQXJyYXlBcHBseVJlY292ZXJ5SW5m byhSdW5uaW5nVHJhbnNhY3Rpb25zIHJ1bm5pbmcpCitQcm9jQXJyYXlVcGRhdGVPbGRlc3RS dW5uaW5nWGlkKFRyYW5zYWN0aW9uSWQgb2xkZXN0UnVubmluZ1hJRCkKIHsKLQlUcmFuc2Fj dGlvbklkICp4aWRzOwotCVRyYW5zYWN0aW9uSWQgYWR2YW5jZU5leHRYaWQ7Ci0JaW50CQkJ bnhpZHM7Ci0JaW50CQkJaTsKLQotCUFzc2VydChzdGFuZGJ5U3RhdGUgPj0gU1RBTkRCWV9J TklUSUFMSVpFRCk7Ci0JQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHJ1bm5pbmctPm5l eHRYaWQpKTsKLQlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQocnVubmluZy0+b2xkZXN0 UnVubmluZ1hpZCkpOwotCUFzc2VydChUcmFuc2FjdGlvbklkSXNOb3JtYWwocnVubmluZy0+ bGF0ZXN0Q29tcGxldGVkWGlkKSk7Ci0KLQkvKgotCSAqIFJlbW92ZSBzdGFsZSB0cmFuc2Fj dGlvbnMsIGlmIGFueS4KLQkgKi8KLQlFeHBpcmVPbGRLbm93bkFzc2lnbmVkVHJhbnNhY3Rp b25JZHMocnVubmluZy0+b2xkZXN0UnVubmluZ1hpZCk7Ci0KLQkvKgotCSAqIEFkanVzdCBU cmFuc2FtVmFyaWFibGVzLT5uZXh0WGlkIGJlZm9yZSBTdGFuZGJ5UmVsZWFzZU9sZExvY2tz KCksCi0JICogYmVjYXVzZSB3ZSB3aWxsIG5lZWQgaXQgdXAgdG8gZGF0ZSBmb3IgYWNjZXNz aW5nIHR3by1waGFzZSB0cmFuc2FjdGlvbnMKLQkgKiBpbiBTdGFuZGJ5UmVsZWFzZU9sZExv Y2tzKCkuCi0JICovCi0JYWR2YW5jZU5leHRYaWQgPSBydW5uaW5nLT5uZXh0WGlkOwotCVRy YW5zYWN0aW9uSWRSZXRyZWF0KGFkdmFuY2VOZXh0WGlkKTsKLQlBZHZhbmNlTmV4dEZ1bGxU cmFuc2FjdGlvbklkUGFzdFhpZChhZHZhbmNlTmV4dFhpZCk7Ci0JQXNzZXJ0KEZ1bGxUcmFu c2FjdGlvbklkSXNWYWxpZChUcmFuc2FtVmFyaWFibGVzLT5uZXh0WGlkKSk7Ci0KIAkvKgog CSAqIFJlbW92ZSBzdGFsZSBsb2NrcywgaWYgYW55LgogCSAqLwotCVN0YW5kYnlSZWxlYXNl T2xkTG9ja3MocnVubmluZy0+b2xkZXN0UnVubmluZ1hpZCk7Ci0KLQkvKgotCSAqIElmIG91 ciBzbmFwc2hvdCBpcyBhbHJlYWR5IHZhbGlkLCBub3RoaW5nIGVsc2UgdG8gZG8uLi4KLQkg Ki8KLQlpZiAoc3RhbmRieVN0YXRlID09IFNUQU5EQllfU05BUFNIT1RfUkVBRFkpCi0JCXJl dHVybjsKLQotCS8qCi0JICogSWYgb3VyIGluaXRpYWwgUnVubmluZ1RyYW5zYWN0aW9uc0Rh dGEgaGFkIGFuIG92ZXJmbG93ZWQgc25hcHNob3QgdGhlbgotCSAqIHdlIGtuZXcgd2Ugd2Vy ZSBtaXNzaW5nIHNvbWUgc3VieGlkcyBmcm9tIG91ciBzbmFwc2hvdC4gSWYgd2UgY29udGlu dWUKLQkgKiB0byBzZWUgb3ZlcmZsb3dlZCBzbmFwc2hvdHMgdGhlbiB3ZSBtaWdodCBuZXZl ciBiZSBhYmxlIHRvIHN0YXJ0IHVwLCBzbwotCSAqIHdlIG1ha2UgYW5vdGhlciB0ZXN0IHRv IHNlZSBpZiBvdXIgc25hcHNob3QgaXMgbm93IHZhbGlkLiBXZSBrbm93IHRoYXQKLQkgKiB0 aGUgbWlzc2luZyBzdWJ4aWRzIGFyZSBlcXVhbCB0byBvciBlYXJsaWVyIHRoYW4gbmV4dFhp ZC4gQWZ0ZXIgd2UKLQkgKiBpbml0aWFsaXNlIHdlIGNvbnRpbnVlIHRvIGFwcGx5IGNoYW5n ZXMgZHVyaW5nIHJlY292ZXJ5LCBzbyBvbmNlIHRoZQotCSAqIG9sZGVzdFJ1bm5pbmdYaWQg aXMgbGF0ZXIgdGhhbiB0aGUgbmV4dFhpZCBmcm9tIHRoZSBpbml0aWFsIHNuYXBzaG90IHdl Ci0JICoga25vdyB0aGF0IHdlIG5vIGxvbmdlciBoYXZlIG1pc3NpbmcgaW5mb3JtYXRpb24g YW5kIGNhbiBtYXJrIHRoZQotCSAqIHNuYXBzaG90IGFzIHZhbGlkLgotCSAqLwotCWlmIChz dGFuZGJ5U3RhdGUgPT0gU1RBTkRCWV9TTkFQU0hPVF9QRU5ESU5HKQotCXsKLQkJLyoKLQkJ ICogSWYgdGhlIHNuYXBzaG90IGlzbid0IG92ZXJmbG93ZWQgb3IgaWYgaXRzIGVtcHR5IHdl IGNhbiByZXNldCBvdXIKLQkJICogcGVuZGluZyBzdGF0ZSBhbmQgdXNlIHRoaXMgc25hcHNo b3QgaW5zdGVhZC4KLQkJICovCi0JCWlmIChydW5uaW5nLT5zdWJ4aWRfc3RhdHVzICE9IFNV QlhJRFNfTUlTU0lORyB8fCBydW5uaW5nLT54Y250ID09IDApCi0JCXsKLQkJCS8qCi0JCQkg KiBJZiB3ZSBoYXZlIGFscmVhZHkgY29sbGVjdGVkIGtub3duIGFzc2lnbmVkIHhpZHMsIHdl IG5lZWQgdG8KLQkJCSAqIHRocm93IHRoZW0gYXdheSBiZWZvcmUgd2UgYXBwbHkgdGhlIHJl Y292ZXJ5IHNuYXBzaG90LgotCQkJICovCi0JCQlLbm93bkFzc2lnbmVkWGlkc1Jlc2V0KCk7 Ci0JCQlzdGFuZGJ5U3RhdGUgPSBTVEFOREJZX0lOSVRJQUxJWkVEOwotCQl9Ci0JCWVsc2UK LQkJewotCQkJaWYgKFRyYW5zYWN0aW9uSWRQcmVjZWRlcyhzdGFuZGJ5U25hcHNob3RQZW5k aW5nWG1pbiwKLQkJCQkJCQkJCSAgcnVubmluZy0+b2xkZXN0UnVubmluZ1hpZCkpCi0JCQl7 Ci0JCQkJc3RhbmRieVN0YXRlID0gU1RBTkRCWV9TTkFQU0hPVF9SRUFEWTsKLQkJCQllbG9n KERFQlVHMSwKLQkJCQkJICJyZWNvdmVyeSBzbmFwc2hvdHMgYXJlIG5vdyBlbmFibGVkIik7 Ci0JCQl9Ci0JCQllbHNlCi0JCQkJZWxvZyhERUJVRzEsCi0JCQkJCSAicmVjb3Zlcnkgc25h cHNob3Qgd2FpdGluZyBmb3Igbm9uLW92ZXJmbG93ZWQgc25hcHNob3Qgb3IgIgotCQkJCQkg InVudGlsIG9sZGVzdCBhY3RpdmUgeGlkIG9uIHN0YW5kYnkgaXMgYXQgbGVhc3QgJXUgKG5v dyAldSkiLAotCQkJCQkgc3RhbmRieVNuYXBzaG90UGVuZGluZ1htaW4sCi0JCQkJCSBydW5u aW5nLT5vbGRlc3RSdW5uaW5nWGlkKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCUFzc2Vy dChzdGFuZGJ5U3RhdGUgPT0gU1RBTkRCWV9JTklUSUFMSVpFRCk7Ci0KLQkvKgotCSAqIE5C OiB0aGlzIGNhbiBiZSByZWFjaGVkIGF0IGxlYXN0IHR3aWNlLCBzbyBtYWtlIHN1cmUgbmV3 IGNvZGUgY2FuIGRlYWwKLQkgKiB3aXRoIHRoYXQuCi0JICovCisJU3RhbmRieVJlbGVhc2VP bGRMb2NrcyhvbGRlc3RSdW5uaW5nWElEKTsKIAotCS8qCi0JICogTm9ib2R5IGVsc2UgaXMg cnVubmluZyB5ZXQsIGJ1dCB0YWtlIGxvY2tzIGFueWhvdwotCSAqLwogCUxXTG9ja0FjcXVp cmUoUHJvY0FycmF5TG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCS8qCi0JICogS25vd25Bc3Np Z25lZFhpZHMgaXMgc29ydGVkIHNvIHdlIGNhbm5vdCBqdXN0IGFkZCB0aGUgeGlkcywgd2Ug aGF2ZSB0bwotCSAqIHNvcnQgdGhlbSBmaXJzdC4KLQkgKgotCSAqIFNvbWUgb2YgdGhlIG5l dyB4aWRzIGFyZSB0b3AtbGV2ZWwgeGlkcyBhbmQgc29tZSBhcmUgc3VidHJhbnNhY3Rpb25z LgotCSAqIFdlIGRvbid0IGNhbGwgU3ViVHJhbnNTZXRQYXJlbnQgYmVjYXVzZSBpdCBkb2Vz bid0IG1hdHRlciB5ZXQuIElmIHdlCi0JICogYXJlbid0IG92ZXJmbG93ZWQgdGhlbiBhbGwg eGlkcyB3aWxsIGZpdCBpbiBzbmFwc2hvdCBhbmQgc28gd2UgZG9uJ3QKLQkgKiBuZWVkIHN1 YnRyYW5zLiBJZiB3ZSBsYXRlciBvdmVyZmxvdywgYW4geGlkIGFzc2lnbm1lbnQgcmVjb3Jk IHdpbGwgYWRkCi0JICogeGlkcyB0byBzdWJ0cmFucy4gSWYgUnVubmluZ1RyYW5zYWN0aW9u c0RhdGEgaXMgb3ZlcmZsb3dlZCB0aGVuIHdlCi0JICogZG9uJ3QgaGF2ZSBlbm91Z2ggaW5m b3JtYXRpb24gdG8gY29ycmVjdGx5IHVwZGF0ZSBzdWJ0cmFucyBhbnl3YXkuCi0JICovCi0K LQkvKgotCSAqIEFsbG9jYXRlIGEgdGVtcG9yYXJ5IGFycmF5IHRvIGF2b2lkIG1vZGlmeWlu ZyB0aGUgYXJyYXkgcGFzc2VkIGFzCi0JICogYXJndW1lbnQuCi0JICovCi0JeGlkcyA9IHBh bGxvYyhzaXplb2YoVHJhbnNhY3Rpb25JZCkgKiAocnVubmluZy0+eGNudCArIHJ1bm5pbmct PnN1YnhjbnQpKTsKLQotCS8qCi0JICogQWRkIHRvIHRoZSB0ZW1wIGFycmF5IGFueSB4aWRz IHdoaWNoIGhhdmUgbm90IGFscmVhZHkgY29tcGxldGVkLgotCSAqLwotCW54aWRzID0gMDsK LQlmb3IgKGkgPSAwOyBpIDwgcnVubmluZy0+eGNudCArIHJ1bm5pbmctPnN1YnhjbnQ7IGkr KykKLQl7Ci0JCVRyYW5zYWN0aW9uSWQgeGlkID0gcnVubmluZy0+eGlkc1tpXTsKLQotCQkv KgotCQkgKiBUaGUgcnVubmluZy14YWN0cyBzbmFwc2hvdCBjYW4gY29udGFpbiB4aWRzIHRo YXQgd2VyZSBzdGlsbCB2aXNpYmxlCi0JCSAqIGluIHRoZSBwcm9jYXJyYXkgd2hlbiB0aGUg c25hcHNob3Qgd2FzIHRha2VuLCBidXQgd2VyZSBhbHJlYWR5Ci0JCSAqIFdBTC1sb2dnZWQg YXMgY29tcGxldGVkLiBUaGV5J3JlIG5vdCBydW5uaW5nIGFueW1vcmUsIHNvIGlnbm9yZQot CQkgKiB0aGVtLgotCQkgKi8KLQkJaWYgKFRyYW5zYWN0aW9uSWREaWRDb21taXQoeGlkKSB8 fCBUcmFuc2FjdGlvbklkRGlkQWJvcnQoeGlkKSkKLQkJCWNvbnRpbnVlOwotCi0JCXhpZHNb bnhpZHMrK10gPSB4aWQ7Ci0JfQotCi0JaWYgKG54aWRzID4gMCkKLQl7Ci0JCWlmIChwcm9j QXJyYXktPm51bUtub3duQXNzaWduZWRYaWRzICE9IDApCi0JCXsKLQkJCUxXTG9ja1JlbGVh c2UoUHJvY0FycmF5TG9jayk7Ci0JCQllbG9nKEVSUk9SLCAiS25vd25Bc3NpZ25lZFhpZHMg aXMgbm90IGVtcHR5Iik7Ci0JCX0KLQotCQkvKgotCQkgKiBTb3J0IHRoZSBhcnJheSBzbyB0 aGF0IHdlIGNhbiBhZGQgdGhlbSBzYWZlbHkgaW50bwotCQkgKiBLbm93bkFzc2lnbmVkWGlk cy4KLQkJICoKLQkJICogV2UgaGF2ZSB0byBzb3J0IHRoZW0gbG9naWNhbGx5LCBiZWNhdXNl IGluIEtub3duQXNzaWduZWRYaWRzQWRkIHdlCi0JCSAqIGNhbGwgVHJhbnNhY3Rpb25JZEZv bGxvd3NPckVxdWFscyBhbmQgc28gb24uIEJ1dCB3ZSBrbm93IHRoZXNlIFhJRHMKLQkJICog Y29tZSBmcm9tIFJVTk5JTkdfWEFDVFMsIHdoaWNoIG1lYW5zIHRoZXJlIGFyZSBvbmx5IG5v cm1hbCBYSURzCi0JCSAqIGZyb20gdGhlIHNhbWUgZXBvY2gsIHNvIHRoaXMgaXMgc2FmZS4K LQkJICovCi0JCXFzb3J0KHhpZHMsIG54aWRzLCBzaXplb2YoVHJhbnNhY3Rpb25JZCksIHhp ZExvZ2ljYWxDb21wYXJhdG9yKTsKLQotCQkvKgotCQkgKiBBZGQgdGhlIHNvcnRlZCBzbmFw c2hvdCBpbnRvIEtub3duQXNzaWduZWRYaWRzLiAgVGhlIHJ1bm5pbmcteGFjdHMKLQkJICog c25hcHNob3QgbWF5IGluY2x1ZGUgZHVwbGljYXRlZCB4aWRzIGJlY2F1c2Ugb2YgcHJlcGFy ZWQKLQkJICogdHJhbnNhY3Rpb25zLCBzbyBpZ25vcmUgdGhlbS4KLQkJICovCi0JCWZvciAo aSA9IDA7IGkgPCBueGlkczsgaSsrKQotCQl7Ci0JCQlpZiAoaSA+IDAgJiYgVHJhbnNhY3Rp b25JZEVxdWFscyh4aWRzW2kgLSAxXSwgeGlkc1tpXSkpCi0JCQl7Ci0JCQkJZWxvZyhERUJV RzEsCi0JCQkJCSAiZm91bmQgZHVwbGljYXRlZCB0cmFuc2FjdGlvbiAldSBmb3IgS25vd25B c3NpZ25lZFhpZHMgaW5zZXJ0aW9uIiwKLQkJCQkJIHhpZHNbaV0pOwotCQkJCWNvbnRpbnVl OwotCQkJfQotCQkJS25vd25Bc3NpZ25lZFhpZHNBZGQoeGlkc1tpXSwgeGlkc1tpXSwgdHJ1 ZSk7Ci0JCX0KLQotCQlLbm93bkFzc2lnbmVkWGlkc0Rpc3BsYXkoREVCVUczKTsKLQl9Ci0K LQlwZnJlZSh4aWRzKTsKLQotCS8qCi0JICogbGF0ZXN0T2JzZXJ2ZWRYaWQgaXMgYXQgbGVh c3Qgc2V0IHRvIHRoZSBwb2ludCB3aGVyZSBTVUJUUkFOUyB3YXMKLQkgKiBzdGFydGVkIHVw IHRvIChjZi4gUHJvY0FycmF5SW5pdFJlY292ZXJ5KCkpIG9yIHRvIHRoZSBiaWdnZXN0IHhp ZAotCSAqIFJlY29yZEtub3duQXNzaWduZWRUcmFuc2FjdGlvbklkcygpIHdhcyBjYWxsZWQg Zm9yLiAgSW5pdGlhbGl6ZQotCSAqIHN1YnRyYW5zIGZyb20gdGhlcmVvbiwgdXAgdG8gbmV4 dFhpZCAtIDEuCi0JICoKLQkgKiBXZSBuZWVkIHRvIGR1cGxpY2F0ZSBwYXJ0cyBvZiBSZWNv cmRLbm93bkFzc2lnbmVkVHJhbnNhY3Rpb25JZCgpIGhlcmUsCi0JICogYmVjYXVzZSB3ZSd2 ZSBqdXN0IGFkZGVkIHhpZHMgdG8gdGhlIGtub3duIGFzc2lnbmVkIHhpZHMgbWFjaGluZXJ5 IHRoYXQKLQkgKiBoYXZlbid0IGdvbmUgdGhyb3VnaCBSZWNvcmRLbm93bkFzc2lnbmVkVHJh bnNhY3Rpb25JZCgpLgotCSAqLwotCUFzc2VydChUcmFuc2FjdGlvbklkSXNOb3JtYWwobGF0 ZXN0T2JzZXJ2ZWRYaWQpKTsKLQlUcmFuc2FjdGlvbklkQWR2YW5jZShsYXRlc3RPYnNlcnZl ZFhpZCk7Ci0Jd2hpbGUgKFRyYW5zYWN0aW9uSWRQcmVjZWRlcyhsYXRlc3RPYnNlcnZlZFhp ZCwgcnVubmluZy0+bmV4dFhpZCkpCi0JewotCQlFeHRlbmRTVUJUUkFOUyhsYXRlc3RPYnNl cnZlZFhpZCk7Ci0JCVRyYW5zYWN0aW9uSWRBZHZhbmNlKGxhdGVzdE9ic2VydmVkWGlkKTsK LQl9Ci0JVHJhbnNhY3Rpb25JZFJldHJlYXQobGF0ZXN0T2JzZXJ2ZWRYaWQpOwkvKiA9IHJ1 bm5pbmctPm5leHRYaWQgLSAxICovCi0KLQkvKiAtLS0tLS0tLS0tCi0JICogTm93IHdlJ3Zl IGdvdCB0aGUgcnVubmluZyB4aWRzIHdlIG5lZWQgdG8gc2V0IHRoZSBnbG9iYWwgdmFsdWVz IHRoYXQKLQkgKiBhcmUgdXNlZCB0byB0cmFjayBzbmFwc2hvdHMgYXMgdGhleSBldm9sdmUg ZnVydGhlci4KLQkgKgotCSAqIC0gbGF0ZXN0Q29tcGxldGVkWGlkIHdoaWNoIHdpbGwgYmUg dGhlIHhtYXggZm9yIHNuYXBzaG90cwotCSAqIC0gbGFzdE92ZXJmbG93ZWRYaWQgd2hpY2gg c2hvd3Mgd2hldGhlciBzbmFwc2hvdHMgb3ZlcmZsb3cKLQkgKiAtIG5leHRYaWQKLQkgKgot CSAqIElmIHRoZSBzbmFwc2hvdCBvdmVyZmxvd2VkLCB0aGVuIHdlIHN0aWxsIGluaXRpYWxp c2Ugd2l0aCB3aGF0IHdlIGtub3csCi0JICogYnV0IHRoZSByZWNvdmVyeSBzbmFwc2hvdCBp c24ndCBmdWxseSB2YWxpZCB5ZXQgYmVjYXVzZSB3ZSBrbm93IHRoZXJlCi0JICogYXJlIHNv bWUgc3VieGlkcyBtaXNzaW5nLiBXZSBkb24ndCBrbm93IHRoZSBzcGVjaWZpYyBzdWJ4aWRz IHRoYXQgYXJlCi0JICogbWlzc2luZywgc28gY29uc2VydmF0aXZlbHkgYXNzdW1lIHRoZSBs YXN0IG9uZSBpcyBsYXRlc3RPYnNlcnZlZFhpZC4KLQkgKiAtLS0tLS0tLS0tCi0JICovCi0J aWYgKHJ1bm5pbmctPnN1YnhpZF9zdGF0dXMgPT0gU1VCWElEU19NSVNTSU5HKQotCXsKLQkJ c3RhbmRieVN0YXRlID0gU1RBTkRCWV9TTkFQU0hPVF9QRU5ESU5HOwotCi0JCXN0YW5kYnlT bmFwc2hvdFBlbmRpbmdYbWluID0gbGF0ZXN0T2JzZXJ2ZWRYaWQ7Ci0JCXByb2NBcnJheS0+ bGFzdE92ZXJmbG93ZWRYaWQgPSBsYXRlc3RPYnNlcnZlZFhpZDsKLQl9Ci0JZWxzZQotCXsK LQkJc3RhbmRieVN0YXRlID0gU1RBTkRCWV9TTkFQU0hPVF9SRUFEWTsKLQotCQlzdGFuZGJ5 U25hcHNob3RQZW5kaW5nWG1pbiA9IEludmFsaWRUcmFuc2FjdGlvbklkOwotCi0JCS8qCi0J CSAqIElmIHRoZSAneGlkcycgYXJyYXkgZGlkbid0IGluY2x1ZGUgYWxsIHN1YnRyYW5zYWN0 aW9ucywgd2UgaGF2ZSB0bwotCQkgKiBtYXJrIGFueSBzbmFwc2hvdHMgdGFrZW4gYXMgb3Zl cmZsb3dlZC4KLQkJICovCi0JCWlmIChydW5uaW5nLT5zdWJ4aWRfc3RhdHVzID09IFNVQlhJ RFNfSU5fU1VCVFJBTlMpCi0JCQlwcm9jQXJyYXktPmxhc3RPdmVyZmxvd2VkWGlkID0gbGF0 ZXN0T2JzZXJ2ZWRYaWQ7Ci0JCWVsc2UKLQkJewotCQkJQXNzZXJ0KHJ1bm5pbmctPnN1Ynhp ZF9zdGF0dXMgPT0gU1VCWElEU19JTl9BUlJBWSk7Ci0JCQlwcm9jQXJyYXktPmxhc3RPdmVy Zmxvd2VkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci0JCX0KLQl9Ci0KLQkvKgotCSAq IElmIGEgdHJhbnNhY3Rpb24gd3JvdGUgYSBjb21taXQgcmVjb3JkIGluIHRoZSBnYXAgYmV0 d2VlbiB0YWtpbmcgYW5kCi0JICogbG9nZ2luZyB0aGUgc25hcHNob3QgdGhlbiBsYXRlc3RD b21wbGV0ZWRYaWQgbWF5IGFscmVhZHkgYmUgaGlnaGVyIHRoYW4KLQkgKiB0aGUgdmFsdWUg ZnJvbSB0aGUgc25hcHNob3QsIHNvIGNoZWNrIGJlZm9yZSB3ZSB1c2UgdGhlIGluY29taW5n IHZhbHVlLgotCSAqIEl0IGFsc28gbWlnaHQgbm90IHlldCBiZSBzZXQgYXQgYWxsLgotCSAq LwotCU1haW50YWluTGF0ZXN0Q29tcGxldGVkWGlkUmVjb3ZlcnkocnVubmluZy0+bGF0ZXN0 Q29tcGxldGVkWGlkKTsKLQotCS8qCi0JICogTkI6IE5vIG5lZWQgdG8gaW5jcmVtZW50IFRy YW5zYW1WYXJpYWJsZXMtPnhhY3RDb21wbGV0aW9uQ291bnQgaGVyZSwKLQkgKiBub2JvZHkg Y2FuIHNlZSBpdCB5ZXQuCi0JICovCi0KKwlwcm9jQXJyYXktPm9sZGVzdF9ydW5uaW5nX3By aW1hcnlfeGlkID0gb2xkZXN0UnVubmluZ1hJRDsKIAlMV0xvY2tSZWxlYXNlKFByb2NBcnJh eUxvY2spOwotCi0JS25vd25Bc3NpZ25lZFhpZHNEaXNwbGF5KERFQlVHMyk7Ci0JaWYgKHN0 YW5kYnlTdGF0ZSA9PSBTVEFOREJZX1NOQVBTSE9UX1JFQURZKQotCQllbG9nKERFQlVHMSwg InJlY292ZXJ5IHNuYXBzaG90cyBhcmUgbm93IGVuYWJsZWQiKTsKLQllbHNlCi0JCWVsb2co REVCVUcxLAotCQkJICJyZWNvdmVyeSBzbmFwc2hvdCB3YWl0aW5nIGZvciBub24tb3ZlcmZs b3dlZCBzbmFwc2hvdCBvciAiCi0JCQkgInVudGlsIG9sZGVzdCBhY3RpdmUgeGlkIG9uIHN0 YW5kYnkgaXMgYXQgbGVhc3QgJXUgKG5vdyAldSkiLAotCQkJIHN0YW5kYnlTbmFwc2hvdFBl bmRpbmdYbWluLAotCQkJIHJ1bm5pbmctPm9sZGVzdFJ1bm5pbmdYaWQpOwogfQogCi0vKgot ICogUHJvY0FycmF5QXBwbHlYaWRBc3NpZ25tZW50Ci0gKgkJUHJvY2VzcyBhbiBYTE9HX1hB Q1RfQVNTSUdOTUVOVCBXQUwgcmVjb3JkCi0gKi8KLXZvaWQKLVByb2NBcnJheUFwcGx5WGlk QXNzaWdubWVudChUcmFuc2FjdGlvbklkIHRvcHhpZCwKLQkJCQkJCQlpbnQgbnN1YnhpZHMs IFRyYW5zYWN0aW9uSWQgKnN1YnhpZHMpCi17Ci0JVHJhbnNhY3Rpb25JZCBtYXhfeGlkOwot CWludAkJCWk7Ci0KLQlBc3NlcnQoc3RhbmRieVN0YXRlID49IFNUQU5EQllfSU5JVElBTEla RUQpOwotCi0JbWF4X3hpZCA9IFRyYW5zYWN0aW9uSWRMYXRlc3QodG9weGlkLCBuc3VieGlk cywgc3VieGlkcyk7Ci0KLQkvKgotCSAqIE1hcmsgYWxsIHRoZSBzdWJ0cmFuc2FjdGlvbnMg YXMgb2JzZXJ2ZWQuCi0JICoKLQkgKiBOT1RFOiBUaGlzIHdpbGwgZmFpbCBpZiB0aGUgc3Vi eGlkIGNvbnRhaW5zIHRvbyBtYW55IHByZXZpb3VzbHkKLQkgKiB1bm9ic2VydmVkIHhpZHMg dG8gZml0IGludG8ga25vd24tYXNzaWduZWQteGlkcy4gVGhhdCBzaG91bGRuJ3QgaGFwcGVu Ci0JICogYXMgdGhlIGNvZGUgc3RhbmRzLCBiZWNhdXNlIHhpZC1hc3NpZ25tZW50IHJlY29y ZHMgc2hvdWxkIG5ldmVyIGNvbnRhaW4KLQkgKiBtb3JlIHRoYW4gUEdQUk9DX01BWF9DQUNI RURfU1VCWElEUyBlbnRyaWVzLgotCSAqLwotCVJlY29yZEtub3duQXNzaWduZWRUcmFuc2Fj dGlvbklkcyhtYXhfeGlkKTsKLQotCS8qCi0JICogTm90aWNlIHRoYXQgd2UgdXBkYXRlIHBn X3N1YnRyYW5zIHdpdGggdGhlIHRvcC1sZXZlbCB4aWQsIHJhdGhlciB0aGFuCi0JICogdGhl IHBhcmVudCB4aWQuIFRoaXMgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gbm9ybWFsIHByb2Nl c3NpbmcgYW5kCi0JICogcmVjb3ZlcnksIHlldCBpcyBzdGlsbCBjb3JyZWN0IGluIGFsbCBj YXNlcy4gVGhlIHJlYXNvbiBpcyB0aGF0Ci0JICogc3VidHJhbnNhY3Rpb24gY29tbWl0IGlz IG5vdCBtYXJrZWQgaW4gY2xvZyB1bnRpbCBjb21taXQgcHJvY2Vzc2luZywgc28KLQkgKiBh bGwgYWJvcnRlZCBzdWJ0cmFuc2FjdGlvbnMgaGF2ZSBhbHJlYWR5IGJlZW4gY2xlYXJseSBt YXJrZWQgaW4gY2xvZy4KLQkgKiBBcyBhIHJlc3VsdCB3ZSBhcmUgYWJsZSB0byByZWZlciBk aXJlY3RseSB0byB0aGUgdG9wLWxldmVsCi0JICogdHJhbnNhY3Rpb24ncyBzdGF0ZSByYXRo ZXIgdGhhbiBza2lwcGluZyB0aHJvdWdoIGFsbCB0aGUgaW50ZXJtZWRpYXRlCi0JICogc3Rh dGVzIGluIHRoZSBzdWJ0cmFuc2FjdGlvbiB0cmVlLiBUaGlzIHNob3VsZCBiZSB0aGUgZmly c3QgdGltZSB3ZQotCSAqIGhhdmUgYXR0ZW1wdGVkIHRvIFN1YlRyYW5zU2V0UGFyZW50KCku Ci0JICovCi0JZm9yIChpID0gMDsgaSA8IG5zdWJ4aWRzOyBpKyspCi0JCVN1YlRyYW5zU2V0 UGFyZW50KHN1YnhpZHNbaV0sIHRvcHhpZCk7Ci0KLQkvKiBLbm93bkFzc2lnbmVkWGlkcyBp c24ndCBtYWludGFpbmVkIHlldCwgc28gd2UncmUgZG9uZSBmb3Igbm93ICovCi0JaWYgKHN0 YW5kYnlTdGF0ZSA9PSBTVEFOREJZX0lOSVRJQUxJWkVEKQotCQlyZXR1cm47Ci0KLQkvKgot CSAqIFVzZXMgc2FtZSBsb2NraW5nIGFzIHRyYW5zYWN0aW9uIGNvbW1pdAotCSAqLwotCUxX TG9ja0FjcXVpcmUoUHJvY0FycmF5TG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCS8qCi0JICog UmVtb3ZlIHN1YnhpZHMgZnJvbSBrbm93bi1hc3NpZ25lZC14YWN0cy4KLQkgKi8KLQlLbm93 bkFzc2lnbmVkWGlkc1JlbW92ZVRyZWUoSW52YWxpZFRyYW5zYWN0aW9uSWQsIG5zdWJ4aWRz LCBzdWJ4aWRzKTsKLQotCS8qCi0JICogQWR2YW5jZSBsYXN0T3ZlcmZsb3dlZFhpZCB0byBi ZSBhdCBsZWFzdCB0aGUgbGFzdCBvZiB0aGVzZSBzdWJ4aWRzLgotCSAqLwotCWlmIChUcmFu c2FjdGlvbklkUHJlY2VkZXMocHJvY0FycmF5LT5sYXN0T3ZlcmZsb3dlZFhpZCwgbWF4X3hp ZCkpCi0JCXByb2NBcnJheS0+bGFzdE92ZXJmbG93ZWRYaWQgPSBtYXhfeGlkOwotCi0JTFdM b2NrUmVsZWFzZShQcm9jQXJyYXlMb2NrKTsKLX0KIAogLyoKICAqIFRyYW5zYWN0aW9uSWRJ c0luUHJvZ3Jlc3MgLS0gaXMgZ2l2ZW4gdHJhbnNhY3Rpb24gcnVubmluZyBpbiBzb21lIGJh Y2tlbmQKQEAgLTEzNzksMjMgKzk3MSwyNCBAQCBQcm9jQXJyYXlBcHBseVhpZEFzc2lnbm1l bnQoVHJhbnNhY3Rpb25JZCB0b3B4aWQsCiAgKiBBc2lkZSBmcm9tIHNvbWUgc2hvcnRjdXRz IHN1Y2ggYXMgY2hlY2tpbmcgUmVjZW50WG1pbiBhbmQgb3VyIG93biBYaWQsCiAgKiB0aGVy ZSBhcmUgZm91ciBwb3NzaWJpbGl0aWVzIGZvciBmaW5kaW5nIGEgcnVubmluZyB0cmFuc2Fj dGlvbjoKICAqCi0gKiAxLiBUaGUgZ2l2ZW4gWGlkIGlzIGEgbWFpbiB0cmFuc2FjdGlvbiBJ ZC4gIFdlIHdpbGwgZmluZCB0aGlzIG91dCBjaGVhcGx5CisgKiAxLiBJbiBIb3QgU3RhbmRi eSBtb2RlLCB0aGVyZSBhcmUgbm8gdHJhbnNhY3Rpb25zIHdpdGggWElEcyBhY3RpdmUgaW4g dGhlCisgKiBzdGFuZGJ5LiBDaGVjayBwZ194YWN0IHRvIHNlZSBpZiB0aGUgdHJhbnNhY3Rp b24gaXMga25vd24gdG8gaGF2ZSBjb21taXR0ZWQKKyAqIG9yIGFib3J0ZWQsIG90aGVyd2lz ZSBpdCdzIGNvbnNpZGVyZWQgYXMgcnVubmluZy4KKyAqCisgKiAyLiBUaGUgZ2l2ZW4gWGlk IGlzIGEgbWFpbiB0cmFuc2FjdGlvbiBJZC4gIFdlIHdpbGwgZmluZCB0aGlzIG91dCBjaGVh cGx5CiAgKiBieSBsb29raW5nIGF0IFByb2NHbG9iYWwtPnhpZHMuCiAgKgotICogMi4gVGhl IGdpdmVuIFhpZCBpcyBvbmUgb2YgdGhlIGNhY2hlZCBzdWJ4YWN0IFhpZHMgaW4gdGhlIFBH UFJPQyBhcnJheS4KKyAqIDMuIFRoZSBnaXZlbiBYaWQgaXMgb25lIG9mIHRoZSBjYWNoZWQg c3VieGFjdCBYaWRzIGluIHRoZSBQR1BST0MgYXJyYXkuCiAgKiBXZSBjYW4gZmluZCB0aGlz IG91dCBjaGVhcGx5IHRvby4KICAqCi0gKiAzLiBJbiBIb3QgU3RhbmRieSBtb2RlLCB3ZSBt dXN0IHNlYXJjaCB0aGUgS25vd25Bc3NpZ25lZFhpZHMgbGlzdCB0byBzZWUKLSAqIGlmIHRo ZSBYaWQgaXMgcnVubmluZyBvbiB0aGUgcHJpbWFyeS4KLSAqCiAgKiA0LiBTZWFyY2ggdGhl IFN1YlRyYW5zIHRyZWUgdG8gZmluZCB0aGUgWGlkJ3MgdG9wbW9zdCBwYXJlbnQsIGFuZCB0 aGVuIHNlZQotICogaWYgdGhhdCBpcyBydW5uaW5nIGFjY29yZGluZyB0byBQcm9jR2xvYmFs LT54aWRzW10gb3IgS25vd25Bc3NpZ25lZFhpZHMuCisgKiBpZiB0aGF0IGlzIHJ1bm5pbmcg YWNjb3JkaW5nIHRvIFByb2NHbG9iYWwtPnhpZHNbXS4KICAqIFRoaXMgaXMgdGhlIHNsb3dl c3Qgd2F5LCBidXQgc2FkbHkgaXQgaGFzIHRvIGJlIGRvbmUgYWx3YXlzIGlmIHRoZSBvdGhl cnMKICAqIGZhaWxlZCwgdW5sZXNzIHdlIHNlZSB0aGF0IHRoZSBjYWNoZWQgc3VieGFjdCBz ZXRzIGFyZSBjb21wbGV0ZSAobm9uZSBoYXZlCiAgKiBvdmVyZmxvd2VkKS4KICAqCi0gKiBQ cm9jQXJyYXlMb2NrIGhhcyB0byBiZSBoZWxkIHdoaWxlIHdlIGRvIDEsIDIsIDMuICBJZiB3 ZSBzYXZlIHRoZSB0b3AgWGlkcwotICogd2hpbGUgZG9pbmcgMSBhbmQgMywgd2UgY2FuIHJl bGVhc2UgdGhlIFByb2NBcnJheUxvY2sgd2hpbGUgd2UgZG8gNC4KKyAqIFByb2NBcnJheUxv Y2sgaGFzIHRvIGJlIGhlbGQgd2hpbGUgd2UgZG8gMiBhbmQgMy4gIElmIHdlIHNhdmUgdGhl IHRvcCBYaWRzCisgKiB3aGlsZSBkb2luZyAyIGFuZCAzLCB3ZSBjYW4gcmVsZWFzZSB0aGUg UHJvY0FycmF5TG9jayB3aGlsZSB3ZSBkbyA0LgogICogVGhpcyBidXlzIGJhY2sgc29tZSBj b25jdXJyZW5jeSAoYW5kIHdlIGNhbid0IHJldHJpZXZlIHRoZSBtYWluIFhpZHMgZnJvbQog ICogUHJvY0dsb2JhbC0+eGlkc1tdIGFnYWluIGFueXdheTsgc2VlIEdldE5ld1RyYW5zYWN0 aW9uSWQpLgogICovCkBAIC0xNDM2LDYgKzEwMjksMjggQEAgVHJhbnNhY3Rpb25JZElzSW5Q cm9ncmVzcyhUcmFuc2FjdGlvbklkIHhpZCkKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAorCS8q CisJICogSW4gaG90IHN0YW5kYnkgbW9kZSwgY2hlY2sgcGdfeGFjdC4KKwkgKgorCSAqIFdp dGggbm9ybWFsIG5vbi1DU04gc25hcHNob3RzLCB5b3UgbXVzdCBiZSBjYXJlZnVsIHRvIGNo ZWNrCisJICogVHJhbnNhY3Rpb25JZElzSW5Qcm9ncmVzcygpIGJlZm9yZSBjaGVja2luZyBw Z194YWN0LCBiZWNhdXNlIGEKKwkgKiB0cmFuc2FjdGlvbiBpcyBtYXJrZWQgYXMgY29tbWl0 dGVkIGJlZm9yZSBpdCdzIHJlbW92ZWQgZnJvbSBQR1BST0MuIEJ1dAorCSAqIGR1cmluZyBy ZWNvdmVyeSwgd2Ugbm93IHVzZSBDU04gc25hcHNob3RzIHNvIEkgdGhpbmsgdGhhdCdzIE9L LiBTZWUgdGhlCisJICogIk5PVEUiIGF0IHRoZSB0b3Agb2YgaGVhcGFtX3Zpc2liaWxpdHku Yy4KKwkgKgorCSAqIER1cmluZyByZWNvdmVyeSwgdGhlIFhJRCBjYW5ub3QgYmUgb3VyIG93 biB0cmFuc2FjdGlvbiwgYW5kIHRoZSBDU04KKwkgKiBjaGVjayBoYW5kbGVzIHN1YnRyYW5z YWN0aW9ucyB0b28sIHNvIHdlIGNhbiBza2lwIHRoZSByZXN0IG9mIHRoZQorCSAqIGZ1bmN0 aW9uLgorCSAqLworCWlmIChSZWNvdmVyeUluUHJvZ3Jlc3MoKSkKKwl7CisJCXhjX2R1cmlu Z19yZWNvdmVyeV9pbmMoKTsKKwkJaWYgKFRyYW5zYWN0aW9uSWREaWRDb21taXQoeGlkKSB8 fCBUcmFuc2FjdGlvbklkRGlkQWJvcnQoeGlkKSkKKwkJCXJldHVybiBmYWxzZTsKKwkJZWxz ZQorCQkJcmV0dXJuIHRydWU7CisJfQorCiAJLyoKIAkgKiBBbHNvLCB3ZSBjYW4gaGFuZGxl IG91ciBvd24gdHJhbnNhY3Rpb24gKGFuZCBzdWJ0cmFuc2FjdGlvbnMpIHdpdGhvdXQKIAkg KiBhbnkgYWNjZXNzIHRvIHNoYXJlZCBtZW1vcnkuCkBAIC0xNDUyLDEyICsxMDY3LDcgQEAg VHJhbnNhY3Rpb25JZElzSW5Qcm9ncmVzcyhUcmFuc2FjdGlvbklkIHhpZCkKIAkgKi8KIAlp ZiAoeGlkcyA9PSBOVUxMKQogCXsKLQkJLyoKLQkJICogSW4gaG90IHN0YW5kYnkgbW9kZSwg cmVzZXJ2ZSBlbm91Z2ggc3BhY2UgdG8gaG9sZCBhbGwgeGlkcyBpbiB0aGUKLQkJICoga25v d24tYXNzaWduZWQgbGlzdC4gSWYgd2UgbGF0ZXIgZmluaXNoIHJlY292ZXJ5LCB3ZSBubyBs b25nZXIgbmVlZAotCQkgKiB0aGUgYmlnZ2VyIGFycmF5LCBidXQgd2UgZG9uJ3QgYm90aGVy IHRvIHNocmluayBpdC4KLQkJICovCi0JCWludAkJCW1heHhpZHMgPSBSZWNvdmVyeUluUHJv Z3Jlc3MoKSA/IFRPVEFMX01BWF9DQUNIRURfU1VCWElEUyA6IGFycmF5UC0+bWF4UHJvY3M7 CisJCWludAkJCW1heHhpZHMgPSBhcnJheVAtPm1heFByb2NzOwogCiAJCXhpZHMgPSAoVHJh bnNhY3Rpb25JZCAqKSBtYWxsb2MobWF4eGlkcyAqIHNpemVvZihUcmFuc2FjdGlvbklkKSk7 CiAJCWlmICh4aWRzID09IE5VTEwpCkBAIC0xNTUyLDMzICsxMTYyLDYgQEAgVHJhbnNhY3Rp b25JZElzSW5Qcm9ncmVzcyhUcmFuc2FjdGlvbklkIHhpZCkKIAkJCXhpZHNbbnhpZHMrK10g PSBweGlkOwogCX0KIAotCS8qCi0JICogU3RlcCAzOiBpbiBob3Qgc3RhbmRieSBtb2RlLCBj aGVjayB0aGUga25vd24tYXNzaWduZWQteGlkcyBsaXN0LiAgWElEcwotCSAqIGluIHRoZSBs aXN0IG11c3QgYmUgdHJlYXRlZCBhcyBydW5uaW5nLgotCSAqLwotCWlmIChSZWNvdmVyeUlu UHJvZ3Jlc3MoKSkKLQl7Ci0JCS8qIG5vbmUgb2YgdGhlIFBHUFJPQyBlbnRyaWVzIHNob3Vs ZCBoYXZlIFhJRHMgaW4gaG90IHN0YW5kYnkgbW9kZSAqLwotCQlBc3NlcnQobnhpZHMgPT0g MCk7Ci0KLQkJaWYgKEtub3duQXNzaWduZWRYaWRFeGlzdHMoeGlkKSkKLQkJewotCQkJTFdM b2NrUmVsZWFzZShQcm9jQXJyYXlMb2NrKTsKLQkJCXhjX2J5X2tub3duX2Fzc2lnbmVkX2lu YygpOwotCQkJcmV0dXJuIHRydWU7Ci0JCX0KLQotCQkvKgotCQkgKiBJZiB0aGUgS25vd25B c3NpZ25lZFhpZHMgb3ZlcmZsb3dlZCwgd2UgaGF2ZSB0byBjaGVjayBwZ19zdWJ0cmFucwot CQkgKiB0b28uICBGZXRjaCBhbGwgeGlkcyBmcm9tIEtub3duQXNzaWduZWRYaWRzIHRoYXQg YXJlIGxvd2VyIHRoYW4KLQkJICogeGlkLCBzaW5jZSBpZiB4aWQgaXMgYSBzdWJ0cmFuc2Fj dGlvbiBpdHMgcGFyZW50IHdpbGwgYWx3YXlzIGhhdmUgYQotCQkgKiBsb3dlciB2YWx1ZS4g IE5vdGUgd2Ugd2lsbCBjb2xsZWN0IGJvdGggbWFpbiBhbmQgc3ViWElEcyBoZXJlLCBidXQK LQkJICogdGhlcmUncyBubyBoZWxwIGZvciBpdC4KLQkJICovCi0JCWlmIChUcmFuc2FjdGlv bklkUHJlY2VkZXNPckVxdWFscyh4aWQsIHByb2NBcnJheS0+bGFzdE92ZXJmbG93ZWRYaWQp KQotCQkJbnhpZHMgPSBLbm93bkFzc2lnbmVkWGlkc0dldCh4aWRzLCB4aWQpOwotCX0KLQog CUxXTG9ja1JlbGVhc2UoUHJvY0FycmF5TG9jayk7CiAKIAkvKgpAQCAtMTg1Miw4ICsxNDM1 LDcgQEAgQ29tcHV0ZVhpZEhvcml6b25zKENvbXB1dGVYaWRIb3Jpem9uc1Jlc3VsdCAqaCkK IAkJICogY2FuJ3QgYmUgdGllZCB0byBhIHNwZWNpZmljIGRhdGFiYXNlLikKIAkJICoKIAkJ ICogQWxzbywgd2hpbGUgaW4gcmVjb3Zlcnkgd2UgY2Fubm90IGNvbXB1dGUgYW4gYWNjdXJh dGUgcGVyLWRhdGFiYXNlCi0JCSAqIGhvcml6b24sIGFzIGFsbCB4aWRzIGFyZSBtYW5hZ2Vk IHZpYSB0aGUgS25vd25Bc3NpZ25lZFhpZHMKLQkJICogbWFjaGluZXJ5LgorCQkgKiBob3Jp em9uLCBhcyBhbGwgeGlkcyBhcmUgbWFuYWdlZCB2aWEgdGhlIENTTiBsb2cgbWFjaGluZXJ5 LgogCQkgKi8KIAkJaWYgKHByb2MtPmRhdGFiYXNlSWQgPT0gTXlEYXRhYmFzZUlkIHx8CiAJ CQlNeURhdGFiYXNlSWQgPT0gSW52YWxpZE9pZCB8fApAQCAtMTg2NiwxMSArMTQ0OCwxNCBA QCBDb21wdXRlWGlkSG9yaXpvbnMoQ29tcHV0ZVhpZEhvcml6b25zUmVzdWx0ICpoKQogCX0K IAogCS8qCi0JICogSWYgaW4gcmVjb3ZlcnkgZmV0Y2ggb2xkZXN0IHhpZCBpbiBLbm93bkFz c2lnbmVkWGlkcywgd2lsbCBiZSBhcHBsaWVkCi0JICogYWZ0ZXIgbG9jayBpcyByZWxlYXNl ZC4KKwkgKiBJZiBpbiByZWNvdmVyeSBmZXRjaCBvbGRlc3QgeGlkIGZyb20gbGFzdCBjaGVj a3BvaW50LgorCSAqCisJICogWFhYOiB0aGF0IGNhbiBiZSBtdWNoIG9sZGVyIHRoYW4gd2hh dCB3ZSBoYWQgcHJldmlvdXNseSB3aXRoIHRoZQorCSAqIGtub3duLWFzc2lnbmVkLXhpZHMg bWFjaGluZXJ5LiBJIHRoaW5rIHRoYXQncyBPSywgZ2l2ZW4gd2hhdCB0aGlzCisJICogZnVu Y3Rpb24gaXMgdXNlZCBmb3IgZHVyaW5nIHJlY292ZXJ5PwogCSAqLwogCWlmIChpbl9yZWNv dmVyeSkKLQkJa2F4bWluID0gS25vd25Bc3NpZ25lZFhpZHNHZXRPbGRlc3RYbWluKCk7CisJ CWtheG1pbiA9IHByb2NBcnJheS0+b2xkZXN0X3J1bm5pbmdfcHJpbWFyeV94aWQ7CiAKIAkv KgogCSAqIE5vIG90aGVyIGluZm9ybWF0aW9uIGZyb20gc2hhcmVkIHN0YXRlIGlzIG5lZWRl ZCwgcmVsZWFzZSB0aGUgbG9jawpAQCAtMjE4MSw3ICsxNzY2LDcgQEAgR2V0TVZDQ1NuYXBz aG90RGF0YSh2b2lkKQogCVRyYW5zYWN0aW9uSWQgbXl4aWQ7CiAJdWludDY0CQljdXJYYWN0 Q29tcGxldGlvbkNvdW50OwogCU1WQ0NTbmFwc2hvdFNoYXJlZCBzbmFwc2hvdDsKLQorCVhM b2dSZWNQdHIJY3NuID0gSW52YWxpZFhMb2dSZWNQdHI7CiAJVHJhbnNhY3Rpb25JZCByZXBs aWNhdGlvbl9zbG90X3htaW4gPSBJbnZhbGlkVHJhbnNhY3Rpb25JZDsKIAlUcmFuc2FjdGlv bklkIHJlcGxpY2F0aW9uX3Nsb3RfY2F0YWxvZ194bWluID0gSW52YWxpZFRyYW5zYWN0aW9u SWQ7CiAKQEAgLTIzNTUsMjcgKzE5NDAsOCBAQCBHZXRNVkNDU25hcHNob3REYXRhKHZvaWQp CiAJZWxzZQogCXsKIAkJLyoKLQkJICogV2UncmUgaW4gaG90IHN0YW5kYnksIHNvIGdldCBY SURzIGZyb20gS25vd25Bc3NpZ25lZFhpZHMuCi0JCSAqCi0JCSAqIFdlIHN0b3JlIGFsbCB4 aWRzIGRpcmVjdGx5IGludG8gc3VieGlwW10uIEhlcmUncyB3aHk6Ci0JCSAqCi0JCSAqIElu IHJlY292ZXJ5IHdlIGRvbid0IGtub3cgd2hpY2ggeGlkcyBhcmUgdG9wLWxldmVsIGFuZCB3 aGljaCBhcmUKLQkJICogc3VieGFjdHMsIGEgZGVzaWduIGNob2ljZSB0aGF0IGdyZWF0bHkg c2ltcGxpZmllcyB4aWQgcHJvY2Vzc2luZy4KLQkJICoKLQkJICogSXQgc2VlbXMgbGlrZSB3 ZSB3b3VsZCB3YW50IHRvIHRyeSB0byBwdXQgeGlkcyBpbnRvIHhpcFtdIG9ubHksIGJ1dAot CQkgKiB0aGF0IGlzIGZhaXJseSBzbWFsbC4gV2Ugd291bGQgZWl0aGVyIG5lZWQgdG8gbWFr ZSB0aGF0IGJpZ2dlciBvcgotCQkgKiB0byBpbmNyZWFzZSB0aGUgcmF0ZSBhdCB3aGljaCB3 ZSBXQUwtbG9nIHhpZCBhc3NpZ25tZW50OyBuZWl0aGVyIGlzCi0JCSAqIGFuIGFwcGVhbGlu ZyBjaG9pY2UuCi0JCSAqCi0JCSAqIFdlIGNvdWxkIHRyeSB0byBzdG9yZSB4aWRzIGludG8g eGlwW10gZmlyc3QgYW5kIHRoZW4gaW50byBzdWJ4aXBbXQotCQkgKiBpZiB0aGVyZSBhcmUg dG9vIG1hbnkgeGlkcy4gVGhhdCBvbmx5IHdvcmtzIGlmIHRoZSBzbmFwc2hvdCBkb2Vzbid0 Ci0JCSAqIG92ZXJmbG93IGJlY2F1c2Ugd2UgZG8gbm90IHNlYXJjaCBzdWJ4aXBbXSBpbiB0 aGF0IGNhc2UuIEEgc2ltcGxlcgotCQkgKiB3YXkgaXMgdG8ganVzdCBzdG9yZSBhbGwgeGlk cyBpbiB0aGUgc3VieGlwIGFycmF5IGJlY2F1c2UgdGhpcyBpcwotCQkgKiBieSBmYXIgdGhl IGJpZ2dlciBhcnJheS4gV2UganVzdCBsZWF2ZSB0aGUgeGlwIGFycmF5IGVtcHR5LgotCQkg KgotCQkgKiBFaXRoZXIgd2F5IHdlIG5lZWQgdG8gY2hhbmdlIHRoZSB3YXkgWGlkSW5NVkND U25hcHNob3QoKSB3b3JrcwotCQkgKiBkZXBlbmRpbmcgdXBvbiB3aGVuIHRoZSBzbmFwc2hv dCB3YXMgdGFrZW4sIG9yIGNoYW5nZSBub3JtYWwKLQkJICogc25hcHNob3QgcHJvY2Vzc2lu ZyBzbyBpdCBtYXRjaGVzLgorCQkgKiBXZSdyZSBpbiBob3Qgc3RhbmRieSwgc28gZ2V0IHRo ZSBjdXJyZW50IENTTi4gVGhhdCdzIHVzZWQgdG8KKwkJICogZGV0ZXJtaW5lIHdoaWNoIHRy YW5zYWN0aW9ucyBjb21taXR0ZWQgYmVmb3JlIHRoaXMgc25hcHNob3QuCiAJCSAqCiAJCSAq IE5vdGU6IEl0IGlzIHBvc3NpYmxlIGZvciByZWNvdmVyeSB0byBlbmQgYmVmb3JlIHdlIGZp bmlzaCB0YWtpbmcKIAkJICogdGhlIHNuYXBzaG90LCBhbmQgZm9yIG5ld2x5IGFzc2lnbmVk IHRyYW5zYWN0aW9uIGlkcyB0byBiZSBhZGRlZCB0bwpAQCAtMjM4MywxNCArMTk0OSwxNyBA QCBHZXRNVkNDU25hcHNob3REYXRhKHZvaWQpCiAJCSAqIHRob3NlIG5ld2x5IGFkZGVkIHRy YW5zYWN0aW9uIGlkcyB3b3VsZCBiZSBmaWx0ZXJlZCBhd2F5LCBzbyB3ZQogCQkgKiBuZWVk IG5vdCBiZSBjb25jZXJuZWQgYWJvdXQgdGhlbS4KIAkJICovCi0JCXN1YmNvdW50ID0gS25v d25Bc3NpZ25lZFhpZHNHZXRBbmRTZXRYbWluKHNuYXBzaG90LT5zdWJ4aXAsICZ4bWluLAot CQkJCQkJCQkJCQkJICB4bWF4KTsKKwkJeG1pbiA9IHByb2NBcnJheS0+b2xkZXN0X3J1bm5p bmdfcHJpbWFyeV94aWQ7CiAKLQkJaWYgKFRyYW5zYWN0aW9uSWRQcmVjZWRlc09yRXF1YWxz KHhtaW4sIHByb2NBcnJheS0+bGFzdE92ZXJmbG93ZWRYaWQpKQotCQkJc3Vib3ZlcmZsb3dl ZCA9IHRydWU7CisJCS8qCisJCSAqIFRha2UgQ1NOIHVuZGVyIFByb2NBcnJheUxvY2sgc28g dGhlIHNuYXBzaG90IHN0YXlzIHN5bmNocm9uaXplZC4KKwkJICogKFhYWDogbm90IHN1cmUg dGhhdCdzIHN0cmljdGx5IHJlcXVpcmVkLikgVGhpcyBpcyB3aGF0IGRldGVybWluZXMKKwkJ ICogd2hpY2ggdHJhbnNhY3Rpb25zIHdlIGNvbnNpZGVyIGZpbmlzaGVkIGFuZCB3aGljaCBh cmUgc3RpbGwgaW4KKwkJICogcHJvZ3Jlc3MuCisJCSAqLworCQljc24gPSBUcmFuc2FtVmFy aWFibGVzLT5sYXRlc3RDb21taXRMU047CiAJfQogCi0KIAkvKgogCSAqIEZldGNoIGludG8g bG9jYWwgdmFyaWFibGUgd2hpbGUgUHJvY0FycmF5TG9jayBpcyBoZWxkIC0gdGhlCiAJICog TFdMb2NrUmVsZWFzZSBiZWxvdyBpcyBhIGJhcnJpZXIsIGVuc3VyaW5nIHRoaXMgaGFwcGVu cyBpbnNpZGUgdGhlCkBAIC0yNTA3LDYgKzIwNzYsOCBAQCBHZXRNVkNDU25hcHNob3REYXRh KHZvaWQpCiAJCWxhdGVzdFNuYXBzaG90U2hhcmVkID0gc25hcHNob3Q7CiAJfQogCisJc25h cHNob3QtPnNuYXBzaG90Q3NuID0gY3NuOworCiAJcmV0dXJuIHNuYXBzaG90OwogfQogCkBA IC0yNjYyLDkgKzIyMzMsNiBAQCBQcm9jQXJyYXlJbnN0YWxsUmVzdG9yZWRYbWluKFRyYW5z YWN0aW9uSWQgeG1pbiwgUEdQUk9DICpwcm9jKQogICogVGhlIHJldHVybmVkIGRhdGEgc3Ry dWN0dXJlIGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkOyBjYWxsZXIgc2hvdWxkIG5vdAogICog bW9kaWZ5IGl0LCBhbmQgbXVzdCBub3QgYXNzdW1lIGl0IGlzIHZhbGlkIHBhc3QgdGhlIG5l eHQgY2FsbC4KICAqCi0gKiBUaGlzIGlzIG5ldmVyIGV4ZWN1dGVkIGR1cmluZyByZWNvdmVy eSBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGxvb2sgYXQKLSAqIEtub3duQXNzaWduZWRYaWRz LgotICoKICAqIER1bW15IFBHUFJPQ3MgZnJvbSBwcmVwYXJlZCB0cmFuc2FjdGlvbiBhcmUg aW5jbHVkZWQsIG1lYW5pbmcgdGhhdCB0aGlzCiAgKiBtYXkgcmV0dXJuIGVudHJpZXMgd2l0 aCBkdXBsaWNhdGVkIFRyYW5zYWN0aW9uSWQgdmFsdWVzIGNvbWluZyBmcm9tCiAgKiB0cmFu c2FjdGlvbiBmaW5pc2hpbmcgdG8gcHJlcGFyZS4gIE5vdGhpbmcgaXMgZG9uZSBhYm91dCBk dXBsaWNhdGVkCkBAIC0yNjk1LDYgKzIyNjMsNyBAQCBHZXRSdW5uaW5nVHJhbnNhY3Rpb25E YXRhKHZvaWQpCiAJaW50CQkJc3ViY291bnQ7CiAJYm9vbAkJc3Vib3ZlcmZsb3dlZDsKIAor CS8qIFRoaXMgaXMgbmV2ZXIgZXhlY3V0ZWQgZHVyaW5nIHJlY292ZXJ5ICovCiAJQXNzZXJ0 KCFSZWNvdmVyeUluUHJvZ3Jlc3MoKSk7CiAKIAkvKgpAQCAtMjg2MSwxNSArMjQzMCwxNiBA QCBHZXRSdW5uaW5nVHJhbnNhY3Rpb25EYXRhKHZvaWQpCiAgKiBXZSBsb29rIGF0IGFsbCBk YXRhYmFzZXMsIHRob3VnaCB0aGVyZSBpcyBubyBuZWVkIHRvIGluY2x1ZGUgV0FMU2VuZGVy CiAgKiBzaW5jZSB0aGlzIGhhcyBubyBlZmZlY3Qgb24gaG90IHN0YW5kYnkgY29uZmxpY3Rz LgogICoKLSAqIFRoaXMgaXMgbmV2ZXIgZXhlY3V0ZWQgZHVyaW5nIHJlY292ZXJ5IHNvIHRo ZXJlIGlzIG5vIG5lZWQgdG8gbG9vayBhdAotICogS25vd25Bc3NpZ25lZFhpZHMuCisgKiBJ ZiBhbGxEYnMgaXMgZmFsc2UsIHNraXAgcHJvY2Vzc2VzIGF0dGFjaGVkIHRvIG90aGVyIGRh dGFiYXNlcy4KKyAqCisgKiBUaGlzIGlzIG5ldmVyIGV4ZWN1dGVkIGR1cmluZyByZWNvdmVy eS4KICAqCiAgKiBXZSBkb24ndCB3b3JyeSBhYm91dCB1cGRhdGluZyBvdGhlciBjb3VudGVy cywgd2Ugd2FudCB0byBrZWVwIHRoaXMgYXMKICAqIHNpbXBsZSBhcyBwb3NzaWJsZSBhbmQg bGVhdmUgR2V0TVZDQ1NuYXBzaG90RGF0YSgpIGFzIHRoZSBwcmltYXJ5IGNvZGUgZm9yCiAg KiB0aGF0IGJvb2trZWVwaW5nLgogICovCiBUcmFuc2FjdGlvbklkCi1HZXRPbGRlc3RBY3Rp dmVUcmFuc2FjdGlvbklkKHZvaWQpCitHZXRPbGRlc3RBY3RpdmVUcmFuc2FjdGlvbklkKGJv b2wgYWxsRGJzKQogewogCVByb2NBcnJheVN0cnVjdCAqYXJyYXlQID0gcHJvY0FycmF5Owog CVRyYW5zYWN0aW9uSWQgKm90aGVyX3hpZHMgPSBQcm9jR2xvYmFsLT54aWRzOwpAQCAtMjg5 MCwxMSArMjQ2MCwxMyBAQCBHZXRPbGRlc3RBY3RpdmVUcmFuc2FjdGlvbklkKHZvaWQpCiAJ TFdMb2NrUmVsZWFzZShYaWRHZW5Mb2NrKTsKIAogCS8qCi0JICogU3BpbiBvdmVyIHByb2NB cnJheSBjb2xsZWN0aW5nIGFsbCB4aWRzIGFuZCBzdWJ4aWRzLgorCSAqIFNwaW4gb3ZlciBw cm9jQXJyYXkgY2hlY2tpbmcgZWFjaCB4aWQuCiAJICovCiAJTFdMb2NrQWNxdWlyZShQcm9j QXJyYXlMb2NrLCBMV19TSEFSRUQpOwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5 UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJeworCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+ cGdwcm9jbm9zW2luZGV4XTsKKwkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJv Y25vXTsKIAkJVHJhbnNhY3Rpb25JZCB4aWQ7CiAKIAkJLyogRmV0Y2ggeGlkIGp1c3Qgb25j ZSAtIHNlZSBHZXROZXdUcmFuc2FjdGlvbklkICovCkBAIC0yOTAzLDYgKzI0NzUsOSBAQCBH ZXRPbGRlc3RBY3RpdmVUcmFuc2FjdGlvbklkKHZvaWQpCiAJCWlmICghVHJhbnNhY3Rpb25J ZElzTm9ybWFsKHhpZCkpCiAJCQljb250aW51ZTsKIAorCQlpZiAoIWFsbERicyAmJiBwcm9j LT5kYXRhYmFzZUlkICE9IE15RGF0YWJhc2VJZCkKKwkJCWNvbnRpbnVlOworCiAJCWlmIChU cmFuc2FjdGlvbklkUHJlY2VkZXMoeGlkLCBvbGRlc3RSdW5uaW5nWGlkKSkKIAkJCW9sZGVz dFJ1bm5pbmdYaWQgPSB4aWQ7CiAKQEAgLTI5ODEsOCArMjU1Niw4IEBAIEdldE9sZGVzdFNh ZmVEZWNvZGluZ1RyYW5zYWN0aW9uSWQoYm9vbCBjYXRhbG9nT25seSkKIAkgKgogCSAqIElu IHJlY292ZXJ5IHdlIGNhbid0IGxvd2VyIHRoZSBzYWZlIHZhbHVlIGJlc2lkZXMgd2hhdCB3 ZSd2ZSBjb21wdXRlZAogCSAqIGFib3ZlLCBzbyB3ZSdsbCBoYXZlIHRvIHdhaXQgYSBiaXQg bG9uZ2VyIHRoZXJlLiBXZSB1bmZvcnR1bmF0ZWx5IGNhbgotCSAqICpub3QqIHVzZSBLbm93 bkFzc2lnbmVkWGlkc0dldE9sZGVzdFhtaW4oKSBzaW5jZSB0aGUgS25vd25Bc3NpZ25lZFhp ZHMKLQkgKiBtYWNoaW5lcnkgY2FuIG1pc3MgdmFsdWVzIGFuZCByZXR1cm4gYW4gb2xkZXIg dmFsdWUgdGhhbiBpcyBzYWZlLgorCSAqICpub3QqIHVzZSBvbGRlc3RfcnVubmluZ19wcmlt YXJ5X3hpZCBzaW5jZSB0aGUgWElEIHRyYWNraW5nIG1hY2hpbmVyeQorCSAqIGNhbiBtaXNz IHZhbHVlcyBhbmQgcmV0dXJuIGFuIG9sZGVyIHZhbHVlIHRoYW4gaXMgc2FmZS4KIAkgKi8K IAlpZiAoIXJlY292ZXJ5X2luX3Byb2dyZXNzKQogCXsKQEAgLTM0MDAsNiArMjk3NSw5IEBA IEdldEN1cnJlbnRWaXJ0dWFsWElEcyhUcmFuc2FjdGlvbklkIGxpbWl0WG1pbiwgYm9vbCBl eGNsdWRlWG1pbjAsCiAgKiBidXQgdGhhdCB3b3VsZCBub3QgYmUgdHJ1ZSBpbiB0aGUgY2Fz ZSBvZiBGQVRBTCBlcnJvcnMgbGFnZ2luZyBpbiBhcnJheSwKICAqIGJ1dCB3ZSBhbHJlYWR5 IGtub3cgdGhvc2UgYXJlIGJvZ3VzIGFueXdheSwgc28gd2Ugc2tpcCB0aGF0IHRlc3QuCiAg KgorICogWFhYOiBLbm93bkFzc2lnbmVkWGlkcyBpcyBnb25lIHNvIHRoZSBhYm92ZSBjb21t ZW50IG5lZWRzIHVwZGF0aW5nLiBJcworICogdGhlIGNvZGUgc3RpbGwgY29ycmVjdD8gSSB0 aGluayBzbyBidXQgbmVlZCB0byBkb3VibGUtY2hlY2suCisgKgogICogSWYgZGJPaWQgaXMg dmFsaWQgd2Ugc2tpcCBiYWNrZW5kcyBhdHRhY2hlZCB0byBvdGhlciBkYXRhYmFzZXMuCiAg KgogICogQmUgY2FyZWZ1bCB0byAqbm90KiBwZnJlZSB0aGUgcmVzdWx0IGZyb20gdGhpcyBm dW5jdGlvbi4gV2UgcmV1c2UKQEAgLTQwNzEsMTQgKzM2NDksMTQgQEAgc3RhdGljIHZvaWQK IERpc3BsYXlYaWRDYWNoZSh2b2lkKQogewogCWZwcmludGYoc3RkZXJyLAotCQkJIlhpZENh Y2hlOiB4bWluOiAlbGQsIGtub3duOiAlbGQsIG15eGFjdDogJWxkLCBsYXRlc3Q6ICVsZCwg bWFpbnhpZDogJWxkLCBjaGlsZHhpZDogJWxkLCBrbm93bmFzc2lnbmVkOiAlbGQsIG5vb2Zs bzogJWxkLCBzbG93OiAlbGRcbiIsCisJCQkiWGlkQ2FjaGU6IHhtaW46ICVsZCwga25vd246 ICVsZCwgbXl4YWN0OiAlbGQsIGxhdGVzdDogJWxkLCBtYWlueGlkOiAlbGQsIGNoaWxkeGlk OiAlbGQsIGR1cmluZ19yZWNvdmVyeTogJWxkLCBub29mbG86ICVsZCwgc2xvdzogJWxkXG4i LAogCQkJeGNfYnlfcmVjZW50X3htaW4sCiAJCQl4Y19ieV9rbm93bl94YWN0LAogCQkJeGNf YnlfbXlfeGFjdCwKIAkJCXhjX2J5X2xhdGVzdF94aWQsCiAJCQl4Y19ieV9tYWluX3hpZCwK IAkJCXhjX2J5X2NoaWxkX3hpZCwKLQkJCXhjX2J5X2tub3duX2Fzc2lnbmVkLAorCQkJeGNf ZHVyaW5nX3JlY292ZXJ5LAogCQkJeGNfbm9fb3ZlcmZsb3csCiAJCQl4Y19zbG93X2Fuc3dl cik7CiB9CkBAIC00MzI1LDYxICszOTAzLDYgQEAgRnVsbFhpZFJlbGF0aXZlVG8oRnVsbFRy YW5zYWN0aW9uSWQgcmVsLCBUcmFuc2FjdGlvbklkIHhpZCkKIH0KIAogCi0vKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgkJS25vd25Bc3Np Z25lZFRyYW5zYWN0aW9uSWRzIHN1Yi1tb2R1bGUKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotCi0vKgotICogSW4gSG90IFN0YW5k YnkgbW9kZSwgd2UgbWFpbnRhaW4gYSBsaXN0IG9mIHRyYW5zYWN0aW9ucyB0aGF0IGFyZSAo b3Igd2VyZSkKLSAqIHJ1bm5pbmcgb24gdGhlIHByaW1hcnkgYXQgdGhlIGN1cnJlbnQgcG9p bnQgaW4gV0FMLiAgVGhlc2UgWElEcyBtdXN0IGJlCi0gKiB0cmVhdGVkIGFzIHJ1bm5pbmcg Ynkgc3RhbmRieSB0cmFuc2FjdGlvbnMsIGV2ZW4gdGhvdWdoIHRoZXkgYXJlIG5vdCBpbgot ICogdGhlIHN0YW5kYnkgc2VydmVyJ3MgUEdQUk9DIGFycmF5LgotICoKLSAqIFdlIHJlY29y ZCBhbGwgWElEcyB0aGF0IHdlIGtub3cgaGF2ZSBiZWVuIGFzc2lnbmVkLiAgVGhhdCBpbmNs dWRlcyBhbGwgdGhlCi0gKiBYSURzIHNlZW4gaW4gV0FMIHJlY29yZHMsIHBsdXMgYWxsIHVu b2JzZXJ2ZWQgWElEcyB0aGF0IHdlIGNhbiBkZWR1Y2UgaGF2ZQotICogYmVlbiBhc3NpZ25l ZC4gIFdlIGNhbiBkZWR1Y2UgdGhlIGV4aXN0ZW5jZSBvZiB1bm9ic2VydmVkIFhJRHMgYmVj YXVzZSB3ZQotICoga25vdyBYSURzIGFyZSBhc3NpZ25lZCBpbiBzZXF1ZW5jZSwgd2l0aCBu byBnYXBzLiAgVGhlIEtub3duQXNzaWduZWRYaWRzCi0gKiBsaXN0IGV4cGFuZHMgYXMgbmV3 IFhJRHMgYXJlIG9ic2VydmVkIG9yIGluZmVycmVkLCBhbmQgY29udHJhY3RzIHdoZW4KLSAq IHRyYW5zYWN0aW9uIGNvbXBsZXRpb24gcmVjb3JkcyBhcnJpdmUuCi0gKgotICogRHVyaW5n IGhvdCBzdGFuZGJ5IHdlIGRvIG5vdCBmcmV0IHRvbyBtdWNoIGFib3V0IHRoZSBkaXN0aW5j dGlvbiBiZXR3ZWVuCi0gKiB0b3AtbGV2ZWwgWElEcyBhbmQgc3VidHJhbnNhY3Rpb24gWElE cy4gV2Ugc3RvcmUgYm90aCB0b2dldGhlciBpbiB0aGUKLSAqIEtub3duQXNzaWduZWRYaWRz IGxpc3QuICBJbiBiYWNrZW5kcywgdGhpcyBpcyBjb3BpZWQgaW50byBzbmFwc2hvdHMgaW4K LSAqIEdldE1WQ0NTbmFwc2hvdERhdGEoKSwgdGFraW5nIGFkdmFudGFnZSBvZiB0aGUgZmFj dCB0aGF0IFhpZEluTVZDQ1NuYXBzaG90KCkKLSAqIGRvZXNuJ3QgY2FyZSBhYm91dCB0aGUg ZGlzdGluY3Rpb24gZWl0aGVyLiAgU3VidHJhbnNhY3Rpb24gWElEcyBhcmUKLSAqIGVmZmVj dGl2ZWx5IHRyZWF0ZWQgYXMgdG9wLWxldmVsIFhJRHMgYW5kIGluIHRoZSB0eXBpY2FsIGNh c2UgcGdfc3VidHJhbnMKLSAqIGxpbmtzIGFyZSAqbm90KiBtYWludGFpbmVkICh3aGljaCBk b2VzIG5vdCBhZmZlY3QgdmlzaWJpbGl0eSkuCi0gKgotICogV2UgaGF2ZSByb29tIGluIEtu b3duQXNzaWduZWRYaWRzIGFuZCBpbiBzbmFwc2hvdHMgdG8gaG9sZCBtYXhQcm9jcyAqCi0g KiAoMSArIFBHUFJPQ19NQVhfQ0FDSEVEX1NVQlhJRFMpIFhJRHMsIHNvIGV2ZXJ5IHByaW1h cnkgdHJhbnNhY3Rpb24gbXVzdAotICogcmVwb3J0IGl0cyBzdWJ0cmFuc2FjdGlvbiBYSURz IGluIGEgV0FMIFhMT0dfWEFDVF9BU1NJR05NRU5UIHJlY29yZCBhdAotICogbGVhc3QgZXZl cnkgUEdQUk9DX01BWF9DQUNIRURfU1VCWElEUy4gIFdoZW4gd2UgcmVjZWl2ZSBvbmUgb2Yg dGhlc2UKLSAqIHJlY29yZHMsIHdlIG1hcmsgdGhlIHN1YlhJRHMgYXMgY2hpbGRyZW4gb2Yg dGhlIHRvcCBYSUQgaW4gcGdfc3VidHJhbnMsCi0gKiBhbmQgdGhlbiByZW1vdmUgdGhlbSBm cm9tIEtub3duQXNzaWduZWRYaWRzLiAgVGhpcyBwcmV2ZW50cyBvdmVyZmxvdyBvZgotICog S25vd25Bc3NpZ25lZFhpZHMgYW5kIHNuYXBzaG90cywgYXQgdGhlIGNvc3QgdGhhdCBzdGF0 dXMgY2hlY2tzIGZvciB0aGVzZQotICogc3ViWElEcyB3aWxsIHRha2UgYSBzbG93ZXIgcGF0 aCB0aHJvdWdoIFRyYW5zYWN0aW9uSWRJc0luUHJvZ3Jlc3MoKS4KLSAqIFRoaXMgbWVhbnMg dGhhdCBLbm93bkFzc2lnbmVkWGlkcyBpcyBub3QgbmVjZXNzYXJpbHkgY29tcGxldGUgZm9y IHN1YlhJRHMsCi0gKiB0aG91Z2ggaXQgc2hvdWxkIGJlIGNvbXBsZXRlIGZvciB0b3AtbGV2 ZWwgWElEczsgdGhpcyBpcyB0aGUgc2FtZSBzaXR1YXRpb24KLSAqIHRoYXQgaG9sZHMgd2l0 aCByZXNwZWN0IHRvIHRoZSBQR1BST0MgZW50cmllcyBpbiBub3JtYWwgcnVubmluZy4KLSAq Ci0gKiBXaGVuIHdlIHRocm93IGF3YXkgc3ViWElEcyBmcm9tIEtub3duQXNzaWduZWRYaWRz LCB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YKLSAqIHRoYXQsIHNpbWlsYXJseSB0byB0cmFj a2luZyBvdmVyZmxvdyBvZiBhIFBHUFJPQydzIHN1YnhpZHMgYXJyYXkuICBXZSBkbwotICog dGhhdCBieSByZW1lbWJlcmluZyB0aGUgbGFzdE92ZXJmbG93ZWRYaWQsIGllIHRoZSBsYXN0 IHRocm93bi1hd2F5IHN1YlhJRC4KLSAqIEFzIGxvbmcgYXMgdGhhdCBpcyB3aXRoaW4gdGhl IHJhbmdlIG9mIGludGVyZXN0aW5nIFhJRHMsIHdlIGhhdmUgdG8gYXNzdW1lCi0gKiB0aGF0 IHN1YlhJRHMgYXJlIG1pc3NpbmcgZnJvbSBzbmFwc2hvdHMuICAoTm90ZSB0aGF0IHN1YlhJ RCBvdmVyZmxvdyBvY2N1cnMKLSAqIG9uIHByaW1hcnkgd2hlbiA2NXRoIHN1YlhJRCBhcnJp dmVzLCB3aGVyZWFzIG9uIHN0YW5kYnkgaXQgb2NjdXJzIHdoZW4gNjR0aAotICogc3ViWElE IGFycml2ZXMgLSB0aGF0IGlzIG5vdCBhbiBlcnJvci4pCi0gKgotICogU2hvdWxkIGEgYmFj a2VuZCBvbiBwcmltYXJ5IHNvbWVob3cgZGlzYXBwZWFyIGJlZm9yZSBpdCBjYW4gd3JpdGUg YW4gYWJvcnQKLSAqIHJlY29yZCwgdGhlbiB3ZSBqdXN0IGxlYXZlIHRob3NlIFhJRHMgaW4g S25vd25Bc3NpZ25lZFhpZHMuIFRoZXkgYWN0dWFsbHkKLSAqIGFib3J0ZWQgYnV0IHdlIHRo aW5rIHRoZXkgd2VyZSBydW5uaW5nOyB0aGUgZGlzdGluY3Rpb24gaXMgaXJyZWxldmFudAot ICogYmVjYXVzZSBlaXRoZXIgd2F5IGFueSBjaGFuZ2VzIGRvbmUgYnkgdGhlIHRyYW5zYWN0 aW9uIGFyZSBub3QgdmlzaWJsZSB0bwotICogYmFja2VuZHMgaW4gdGhlIHN0YW5kYnkuICBX ZSBwcnVuZSBLbm93bkFzc2lnbmVkWGlkcyB3aGVuCi0gKiBYTE9HX1JVTk5JTkdfWEFDVFMg YXJyaXZlcywgdG8gZm9yZXN0YWxsIHBvc3NpYmxlIG92ZXJmbG93IG9mIHRoZQotICogYXJy YXkgZHVlIHRvIHN1Y2ggZGVhZCBYSURzLgotICovCi0KIC8qCiAgKiBSZWNvcmRLbm93bkFz c2lnbmVkVHJhbnNhY3Rpb25JZHMKICAqCQlSZWNvcmQgdGhlIGdpdmVuIFhJRCBpbiBLbm93 bkFzc2lnbmVkWGlkcywgYXMgd2VsbCBhcyBhbnkgcHJlY2VkaW5nCkBAIC00Mzk0LDcgKzM5 MTcsNyBAQCBGdWxsWGlkUmVsYXRpdmVUbyhGdWxsVHJhbnNhY3Rpb25JZCByZWwsIFRyYW5z YWN0aW9uSWQgeGlkKQogdm9pZAogUmVjb3JkS25vd25Bc3NpZ25lZFRyYW5zYWN0aW9uSWRz KFRyYW5zYWN0aW9uSWQgeGlkKQogewotCUFzc2VydChzdGFuZGJ5U3RhdGUgPj0gU1RBTkRC WV9JTklUSUFMSVpFRCk7CisJQXNzZXJ0KEluSG90U3RhbmRieSk7CiAJQXNzZXJ0KFRyYW5z YWN0aW9uSWRJc1ZhbGlkKHhpZCkpOwogCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChs YXRlc3RPYnNlcnZlZFhpZCkpOwogCkBAIC00NDEyLDM4ICszOTM1LDE5IEBAIFJlY29yZEtu b3duQXNzaWduZWRUcmFuc2FjdGlvbklkcyhUcmFuc2FjdGlvbklkIHhpZCkKIAogCQkvKgog CQkgKiBFeHRlbmQgc3VidHJhbnMgbGlrZSB3ZSBkbyBpbiBHZXROZXdUcmFuc2FjdGlvbklk KCkgZHVyaW5nIG5vcm1hbAotCQkgKiBvcGVyYXRpb24gdXNpbmcgaW5kaXZpZHVhbCBleHRl bmQgc3RlcHMuIE5vdGUgdGhhdCB3ZSBkbyBub3QgbmVlZAotCQkgKiB0byBleHRlbmQgY2xv ZyBzaW5jZSBpdHMgZXh0ZW5zaW9ucyBhcmUgV0FMIGxvZ2dlZC4KLQkJICoKLQkJICogVGhp cyBwYXJ0IGhhcyB0byBiZSBkb25lIHJlZ2FyZGxlc3Mgb2Ygc3RhbmRieVN0YXRlIHNpbmNl IHdlCi0JCSAqIGltbWVkaWF0ZWx5IHN0YXJ0IGFzc2lnbmluZyBzdWJ0cmFuc2FjdGlvbnMg dG8gdGhlaXIgdG9wbGV2ZWwKLQkJICogdHJhbnNhY3Rpb25zLgorCQkgKiBvcGVyYXRpb24g dXNpbmcgaW5kaXZpZHVhbCBleHRlbmQgc3RlcHMuIEFuZCBDU04gbG9nLCB0b28uIE5vdGUK KwkJICogdGhhdCB3ZSBkbyBub3QgbmVlZCB0byBleHRlbmQgY2xvZyBzaW5jZSBpdHMgZXh0 ZW5zaW9ucyBhcmUgV0FMCisJCSAqIGxvZ2dlZC4KIAkJICovCiAJCW5leHRfZXhwZWN0ZWRf eGlkID0gbGF0ZXN0T2JzZXJ2ZWRYaWQ7CiAJCXdoaWxlIChUcmFuc2FjdGlvbklkUHJlY2Vk ZXMobmV4dF9leHBlY3RlZF94aWQsIHhpZCkpCiAJCXsKIAkJCVRyYW5zYWN0aW9uSWRBZHZh bmNlKG5leHRfZXhwZWN0ZWRfeGlkKTsKIAkJCUV4dGVuZFNVQlRSQU5TKG5leHRfZXhwZWN0 ZWRfeGlkKTsKKwkJCUV4dGVuZENTTkxvZyhuZXh0X2V4cGVjdGVkX3hpZCk7CiAJCX0KIAkJ QXNzZXJ0KG5leHRfZXhwZWN0ZWRfeGlkID09IHhpZCk7CiAKLQkJLyoKLQkJICogSWYgdGhl IEtub3duQXNzaWduZWRYaWRzIG1hY2hpbmVyeSBpc24ndCB1cCB5ZXQsIHRoZXJlJ3Mgbm90 aGluZwotCQkgKiBtb3JlIHRvIGRvIHNpbmNlIHdlIGRvbid0IHRyYWNrIGFzc2lnbmVkIHhp ZHMgeWV0LgotCQkgKi8KLQkJaWYgKHN0YW5kYnlTdGF0ZSA8PSBTVEFOREJZX0lOSVRJQUxJ WkVEKQotCQl7Ci0JCQlsYXRlc3RPYnNlcnZlZFhpZCA9IHhpZDsKLQkJCXJldHVybjsKLQkJ fQotCi0JCS8qCi0JCSAqIEFkZCAobGF0ZXN0T2JzZXJ2ZWRYaWQsIHhpZF0gb250byB0aGUg S25vd25Bc3NpZ25lZFhpZHMgYXJyYXkuCi0JCSAqLwotCQluZXh0X2V4cGVjdGVkX3hpZCA9 IGxhdGVzdE9ic2VydmVkWGlkOwotCQlUcmFuc2FjdGlvbklkQWR2YW5jZShuZXh0X2V4cGVj dGVkX3hpZCk7Ci0JCUtub3duQXNzaWduZWRYaWRzQWRkKG5leHRfZXhwZWN0ZWRfeGlkLCB4 aWQsIGZhbHNlKTsKLQogCQkvKgogCQkgKiBOb3cgd2UgY2FuIGFkdmFuY2UgbGF0ZXN0T2Jz ZXJ2ZWRYaWQKIAkJICovCkBAIC00NDU1LDgwNSArMzk1OSw2MSBAQCBSZWNvcmRLbm93bkFz c2lnbmVkVHJhbnNhY3Rpb25JZHMoVHJhbnNhY3Rpb25JZCB4aWQpCiB9CiAKIC8qCi0gKiBF eHBpcmVUcmVlS25vd25Bc3NpZ25lZFRyYW5zYWN0aW9uSWRzCi0gKgkJUmVtb3ZlIHRoZSBn aXZlbiBYSURzIGZyb20gS25vd25Bc3NpZ25lZFhpZHMuCisgKiBQcm9jQXJyYXlSZWNvdmVy eUVuZFRyYW5zYWN0aW9uCisgKgorICogQ2FsbGVkIGR1cmluZyByZWNvdmVyeSBpbiBhbmFs b2d5IHdpdGggYW5kIGluIHBsYWNlIG9mCisgKiBQcm9jQXJyYXlFbmRUcmFuc2FjdGlvbigp LiBUaGUgdHJhbnNhY3Rpb24gYmVjb21lcyB2aXNpYmxlIHRvIGFueSBuZXcKKyAqIHNuYXBz aG90cyB0YWtlbiBhZnRlciB0aGlzLiAnbWF4X3hpZCcgaXMgdGhlIGhpZ2hlc3QgKHN1YilY SUQgb2YgdGhlCisgKiBjb21taXR0ZWQgdHJhbnNhY3Rpb24sIGFuZCAnbHNuJyBpcyBMU04g b2YgdGhlIGNvbW1pdCByZWNvcmQuCiAgKgotICogQ2FsbGVkIGR1cmluZyByZWNvdmVyeSBp biBhbmFsb2d5IHdpdGggYW5kIGluIHBsYWNlIG9mIFByb2NBcnJheUVuZFRyYW5zYWN0aW9u KCkKKyAqIFRoZSB0cmFuc2FjdGlvbiBhbmQgYWxsIGl0cyBzdWJ0cmFuc2FjdGlvbnMgaGF2 ZSBiZWVuIGFscmVhZHkgbWFya2VkIGFzCisgKiBjb21taXR0ZWQgaW4gdGhlIENMT0cgYW5k IGluIHRoZSBDU05MT0cuCiAgKi8KIHZvaWQKLUV4cGlyZVRyZWVLbm93bkFzc2lnbmVkVHJh bnNhY3Rpb25JZHMoVHJhbnNhY3Rpb25JZCB4aWQsIGludCBuc3VieGlkcywKLQkJCQkJCQkJ CSAgVHJhbnNhY3Rpb25JZCAqc3VieGlkcywgVHJhbnNhY3Rpb25JZCBtYXhfeGlkKQorUHJv Y0FycmF5UmVjb3ZlcnlFbmRUcmFuc2FjdGlvbihUcmFuc2FjdGlvbklkIG1heF94aWQsIFhM b2dSZWNQdHIgbHNuKQogewotCUFzc2VydChzdGFuZGJ5U3RhdGUgPj0gU1RBTkRCWV9JTklU SUFMSVpFRCk7CisJVHJhbnNhY3Rpb25JZCBvbGRlc3RfcnVubmluZ19wcmltYXJ5X3hpZDsK KworCUFzc2VydChJbkhvdFN0YW5kYnkpOworCisJLyoKKwkgKiBJZiB0aGlzIHdhcyB0aGUg b2xkZXN0IFhJRCB0aGF0IHdhcyBzdGlsbCBydW5uaW5nLCBhZHZhbmNlIGl0LiBUaGlzIGlz CisJICogaW1wb3J0YW50IGZvciBhZHZhbmNpbmcgdGhlIGdsb2JhbCB4bWluLCB3aGljaCBh dm9pZHMgdW5uZWNlc3NhcnkKKwkgKiByZWNvdmVyeSBjb25mbGljdHMKKwkgKgorCSAqIE5v IGxvY2tpbmcgcmVxdWlyZWQgYmVjYXVzZSB0aGlzIHJ1bnMgaW4gdGhlIHN0YXJ0dXAgcHJv Y2Vzcy4KKwkgKgorCSAqIFhYWDogdGhlIGNhbGxlciBhY3R1YWxseSBoYXMgYSBsaXN0IG9m IFhJRHMgdGhhdCBqdXN0IGNvbW1pdHRlZC4gV2UKKwkgKiBjb3VsZCBzYXZlIHNvbWUgY2xv ZyBsb29rdXBzIGJ5IHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhhdCBsaXN0LgorCSAqLworCW9s ZGVzdF9ydW5uaW5nX3ByaW1hcnlfeGlkID0gcHJvY0FycmF5LT5vbGRlc3RfcnVubmluZ19w cmltYXJ5X3hpZDsKKwl3aGlsZSAob2xkZXN0X3J1bm5pbmdfcHJpbWFyeV94aWQgPCBtYXhf eGlkKQorCXsKKwkJaWYgKCFUcmFuc2FjdGlvbklkRGlkQ29tbWl0KG9sZGVzdF9ydW5uaW5n X3ByaW1hcnlfeGlkKSAmJgorCQkJIVRyYW5zYWN0aW9uSWREaWRBYm9ydChvbGRlc3RfcnVu bmluZ19wcmltYXJ5X3hpZCkpCisJCXsKKwkJCWJyZWFrOworCQl9CisJCVRyYW5zYWN0aW9u SWRBZHZhbmNlKG9sZGVzdF9ydW5uaW5nX3ByaW1hcnlfeGlkKTsKKwl9CisJaWYgKG1heF94 aWQgPT0gb2xkZXN0X3J1bm5pbmdfcHJpbWFyeV94aWQpCisJCVRyYW5zYWN0aW9uSWRBZHZh bmNlKG9sZGVzdF9ydW5uaW5nX3ByaW1hcnlfeGlkKTsKIAogCS8qCiAJICogVXNlcyBzYW1l IGxvY2tpbmcgYXMgdHJhbnNhY3Rpb24gY29tbWl0CiAJICovCiAJTFdMb2NrQWNxdWlyZShQ cm9jQXJyYXlMb2NrLCBMV19FWENMVVNJVkUpOwogCi0JS25vd25Bc3NpZ25lZFhpZHNSZW1v dmVUcmVlKHhpZCwgbnN1YnhpZHMsIHN1YnhpZHMpOwotCiAJLyogQXMgaW4gUHJvY0FycmF5 RW5kVHJhbnNhY3Rpb24sIGFkdmFuY2UgbGF0ZXN0Q29tcGxldGVkWGlkICovCiAJTWFpbnRh aW5MYXRlc3RDb21wbGV0ZWRYaWRSZWNvdmVyeShtYXhfeGlkKTsKIAogCS8qIC4uLiBhbmQg eGFjdENvbXBsZXRpb25Db3VudCAqLwogCVRyYW5zYW1WYXJpYWJsZXMtPnhhY3RDb21wbGV0 aW9uQ291bnQrKzsKIAotCUxXTG9ja1JlbGVhc2UoUHJvY0FycmF5TG9jayk7Ci19Ci0KLS8q Ci0gKiBFeHBpcmVBbGxLbm93bkFzc2lnbmVkVHJhbnNhY3Rpb25JZHMKLSAqCQlSZW1vdmUg YWxsIGVudHJpZXMgaW4gS25vd25Bc3NpZ25lZFhpZHMgYW5kIHJlc2V0IGxhc3RPdmVyZmxv d2VkWGlkLgotICovCi12b2lkCi1FeHBpcmVBbGxLbm93bkFzc2lnbmVkVHJhbnNhY3Rpb25J ZHModm9pZCkKLXsKLQlGdWxsVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQ7Ci0KLQlMV0xvY2tB Y3F1aXJlKFByb2NBcnJheUxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JS25vd25Bc3NpZ25lZFhp ZHNSZW1vdmVQcmVjZWRpbmcoSW52YWxpZFRyYW5zYWN0aW9uSWQpOwotCi0JLyogUmVzZXQg bGF0ZXN0Q29tcGxldGVkWGlkIHRvIG5leHRYaWQgLSAxICovCi0JQXNzZXJ0KEZ1bGxUcmFu c2FjdGlvbklkSXNWYWxpZChUcmFuc2FtVmFyaWFibGVzLT5uZXh0WGlkKSk7Ci0JbGF0ZXN0 WGlkID0gVHJhbnNhbVZhcmlhYmxlcy0+bmV4dFhpZDsKLQlGdWxsVHJhbnNhY3Rpb25JZFJl dHJlYXQoJmxhdGVzdFhpZCk7Ci0JVHJhbnNhbVZhcmlhYmxlcy0+bGF0ZXN0Q29tcGxldGVk WGlkID0gbGF0ZXN0WGlkOwotCi0JLyoKLQkgKiBBbnkgdHJhbnNhY3Rpb25zIHRoYXQgd2Vy ZSBpbi1wcm9ncmVzcyB3ZXJlIGVmZmVjdGl2ZWx5IGFib3J0ZWQsIHNvCi0JICogYWR2YW5j ZSB4YWN0Q29tcGxldGlvbkNvdW50LgotCSAqLwotCVRyYW5zYW1WYXJpYWJsZXMtPnhhY3RD b21wbGV0aW9uQ291bnQrKzsKLQotCS8qCi0JICogUmVzZXQgbGFzdE92ZXJmbG93ZWRYaWQu ICBDdXJyZW50bHksIGxhc3RPdmVyZmxvd2VkWGlkIGhhcyBubyB1c2UgYWZ0ZXIKLQkgKiB0 aGUgY2FsbCBvZiB0aGlzIGZ1bmN0aW9uLiAgQnV0IGRvIHRoaXMgZm9yIHVuaWZpY2F0aW9u IHdpdGggd2hhdAotCSAqIEV4cGlyZU9sZEtub3duQXNzaWduZWRUcmFuc2FjdGlvbklkcygp IGRvLgotCSAqLwotCXByb2NBcnJheS0+bGFzdE92ZXJmbG93ZWRYaWQgPSBJbnZhbGlkVHJh bnNhY3Rpb25JZDsKLQlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2spOwotfQotCi0vKgot ICogRXhwaXJlT2xkS25vd25Bc3NpZ25lZFRyYW5zYWN0aW9uSWRzCi0gKgkJUmVtb3ZlIEtu b3duQXNzaWduZWRYaWRzIGVudHJpZXMgcHJlY2VkaW5nIHRoZSBnaXZlbiBYSUQgYW5kCi0g KgkJcG90ZW50aWFsbHkgcmVzZXQgbGFzdE92ZXJmbG93ZWRYaWQuCi0gKi8KLXZvaWQKLUV4 cGlyZU9sZEtub3duQXNzaWduZWRUcmFuc2FjdGlvbklkcyhUcmFuc2FjdGlvbklkIHhpZCkK LXsKLQlUcmFuc2FjdGlvbklkIGxhdGVzdFhpZDsKLQotCUxXTG9ja0FjcXVpcmUoUHJvY0Fy cmF5TG9jaywgTFdfRVhDTFVTSVZFKTsKLQotCS8qIEFzIGluIFByb2NBcnJheUVuZFRyYW5z YWN0aW9uLCBhZHZhbmNlIGxhdGVzdENvbXBsZXRlZFhpZCAqLwotCWxhdGVzdFhpZCA9IHhp ZDsKLQlUcmFuc2FjdGlvbklkUmV0cmVhdChsYXRlc3RYaWQpOwotCU1haW50YWluTGF0ZXN0 Q29tcGxldGVkWGlkUmVjb3ZlcnkobGF0ZXN0WGlkKTsKLQotCS8qIC4uLiBhbmQgeGFjdENv bXBsZXRpb25Db3VudCAqLwotCVRyYW5zYW1WYXJpYWJsZXMtPnhhY3RDb21wbGV0aW9uQ291 bnQrKzsKLQotCS8qCi0JICogUmVzZXQgbGFzdE92ZXJmbG93ZWRYaWQgaWYgd2Uga25vdyBh bGwgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZSBiZWVuCi0JICogcG9zc2libHkgcnVubmluZyBh cmUgYmVpbmcgZ29uZS4gIE5vdCBkb2luZyBzbyBjb3VsZCBjYXVzZSBhbiBpbmNvcnJlY3QK LQkgKiBsYXN0T3ZlcmZsb3dlZFhpZCB2YWx1ZSwgd2hpY2ggbWFrZXMgZXh0cmEgc25hcHNo b3RzIGJlIG1hcmtlZCBhcwotCSAqIHN1Ym92ZXJmbG93ZWQuCi0JICovCi0JaWYgKFRyYW5z YWN0aW9uSWRQcmVjZWRlcyhwcm9jQXJyYXktPmxhc3RPdmVyZmxvd2VkWGlkLCB4aWQpKQot CQlwcm9jQXJyYXktPmxhc3RPdmVyZmxvd2VkWGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7 Ci0JS25vd25Bc3NpZ25lZFhpZHNSZW1vdmVQcmVjZWRpbmcoeGlkKTsKLQlMV0xvY2tSZWxl YXNlKFByb2NBcnJheUxvY2spOwotfQotCi0vKgotICogS25vd25Bc3NpZ25lZFRyYW5zYWN0 aW9uSWRzSWRsZU1haW50ZW5hbmNlCi0gKgkJT3Bwb3J0dW5pc3RpY2FsbHkgZG8gbWFpbnRl bmFuY2Ugd29yayB3aGVuIHRoZSBzdGFydHVwIHByb2Nlc3MKLSAqCQlpcyBhYm91dCB0byBn byBpZGxlLgotICovCi12b2lkCi1Lbm93bkFzc2lnbmVkVHJhbnNhY3Rpb25JZHNJZGxlTWFp bnRlbmFuY2Uodm9pZCkKLXsKLQlLbm93bkFzc2lnbmVkWGlkc0NvbXByZXNzKEtBWF9TVEFS VFVQX1BST0NFU1NfSURMRSwgZmFsc2UpOwotfQotCi0KLS8qCi0gKiBQcml2YXRlIG1vZHVs ZSBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSBLbm93bkFzc2lnbmVkWGlkcwotICoKLSAqIFRo ZXJlIGFyZSA1IG1haW4gdXNlcyBvZiB0aGUgS25vd25Bc3NpZ25lZFhpZHMgZGF0YSBzdHJ1 Y3R1cmU6Ci0gKgotICoJKiBiYWNrZW5kcyB0YWtpbmcgc25hcHNob3RzIC0gYWxsIHZhbGlk IFhJRHMgbmVlZCB0byBiZSBjb3BpZWQgb3V0Ci0gKgkqIGJhY2tlbmRzIHNlZWtpbmcgdG8g ZGV0ZXJtaW5lIHByZXNlbmNlIG9mIGEgc3BlY2lmaWMgWElECi0gKgkqIHN0YXJ0dXAgcHJv Y2VzcyBhZGRpbmcgbmV3IGtub3duLWFzc2lnbmVkIFhJRHMKLSAqCSogc3RhcnR1cCBwcm9j ZXNzIHJlbW92aW5nIHNwZWNpZmljIFhJRHMgYXMgdHJhbnNhY3Rpb25zIGVuZAotICoJKiBz dGFydHVwIHByb2Nlc3MgcHJ1bmluZyBhcnJheSB3aGVuIHNwZWNpYWwgV0FMIHJlY29yZHMg YXJyaXZlCi0gKgotICogVGhpcyBkYXRhIHN0cnVjdHVyZSBpcyBrbm93biB0byBiZSBhIGhv dCBzcG90IGR1cmluZyBIb3QgU3RhbmRieSwgc28gd2UKLSAqIGdvIHRvIHNvbWUgbGVuZ3Ro cyB0byBtYWtlIHRoZXNlIG9wZXJhdGlvbnMgYXMgZWZmaWNpZW50IGFuZCBhcyBjb25jdXJy ZW50Ci0gKiBhcyBwb3NzaWJsZS4KLSAqCi0gKiBUaGUgWElEcyBhcmUgc3RvcmVkIGluIGFu IGFycmF5IGluIHNvcnRlZCBvcmRlciAtLS0gVHJhbnNhY3Rpb25JZFByZWNlZGVzCi0gKiBv cmRlciwgdG8gYmUgZXhhY3QgLS0tIHRvIGFsbG93IGJpbmFyeSBzZWFyY2ggZm9yIHNwZWNp ZmljIFhJRHMuICBOb3RlOgotICogaW4gZ2VuZXJhbCBUcmFuc2FjdGlvbklkUHJlY2VkZXMg d291bGQgbm90IHByb3ZpZGUgYSB0b3RhbCBvcmRlciwgYnV0Ci0gKiB3ZSBrbm93IHRoYXQg dGhlIGVudHJpZXMgcHJlc2VudCBhdCBhbnkgaW5zdGFudCBzaG91bGQgbm90IGV4dGVuZCBh Y3Jvc3MKLSAqIGEgbGFyZ2UgZW5vdWdoIGZyYWN0aW9uIG9mIFhJRCBzcGFjZSB0byB3cmFw IGFyb3VuZCAodGhlIHByaW1hcnkgd291bGQKLSAqIHNodXQgZG93biBmb3IgZmVhciBvZiBY SUQgd3JhcCBsb25nIGJlZm9yZSB0aGF0IGhhcHBlbnMpLiAgU28gaXQncyBPSyB0bwotICog dXNlIFRyYW5zYWN0aW9uSWRQcmVjZWRlcyBhcyBhIGJpbmFyeS1zZWFyY2ggY29tcGFyYXRv ci4KLSAqCi0gKiBJdCdzIGNoZWFwIHRvIG1haW50YWluIHRoZSBzb3J0ZWRuZXNzIGR1cmlu ZyBpbnNlcnRpb25zLCBzaW5jZSBuZXcga25vd24KLSAqIFhJRHMgYXJlIGFsd2F5cyByZXBv cnRlZCBpbiBYSUQgb3JkZXI7IHdlIGp1c3QgYXBwZW5kIHRoZW0gYXQgdGhlIHJpZ2h0Lgot ICoKLSAqIFRvIGtlZXAgaW5kaXZpZHVhbCBkZWxldGlvbnMgY2hlYXAsIHdlIG5lZWQgdG8g YWxsb3cgZ2FwcyBpbiB0aGUgYXJyYXkuCi0gKiBUaGlzIGlzIGltcGxlbWVudGVkIGJ5IG1h cmtpbmcgYXJyYXkgZWxlbWVudHMgYXMgdmFsaWQgb3IgaW52YWxpZCB1c2luZwotICogdGhl IHBhcmFsbGVsIGJvb2xlYW4gYXJyYXkgS25vd25Bc3NpZ25lZFhpZHNWYWxpZFtdLiAgQSBk ZWxldGlvbiBpcyBkb25lCi0gKiBieSBzZXR0aW5nIEtub3duQXNzaWduZWRYaWRzVmFsaWRb aV0gdG8gZmFsc2UsICp3aXRob3V0KiBjbGVhcmluZyB0aGUKLSAqIFhJRCBlbnRyeSBpdHNl bGYuICBUaGlzIHByZXNlcnZlcyB0aGUgcHJvcGVydHkgdGhhdCB0aGUgWElEIGVudHJpZXMg YXJlCi0gKiBzb3J0ZWQsIHNvIHdlIGNhbiBkbyBiaW5hcnkgc2VhcmNoZXMgZWFzaWx5LiAg UGVyaW9kaWNhbGx5IHdlIGNvbXByZXNzCi0gKiBvdXQgdGhlIHVudXNlZCBlbnRyaWVzOyB0 aGF0J3MgbXVjaCBjaGVhcGVyIHRoYW4gaGF2aW5nIHRvIGNvbXByZXNzIHRoZQotICogYXJy YXkgaW1tZWRpYXRlbHkgb24gZXZlcnkgZGVsZXRpb24uCi0gKgotICogVGhlIGFjdHVhbGx5 IHZhbGlkIGl0ZW1zIGluIEtub3duQXNzaWduZWRYaWRzW10gYW5kIEtub3duQXNzaWduZWRY aWRzVmFsaWRbXQotICogYXJlIHRob3NlIHdpdGggaW5kZXhlcyB0YWlsIDw9IGkgPCBoZWFk OyBpdGVtcyBvdXRzaWRlIHRoaXMgc3Vic2NyaXB0IHJhbmdlCi0gKiBoYXZlIHVuc3BlY2lm aWVkIGNvbnRlbnRzLiAgV2hlbiBoZWFkIHJlYWNoZXMgdGhlIGVuZCBvZiB0aGUgYXJyYXks IHdlCi0gKiBmb3JjZSBjb21wcmVzc2lvbiBvZiB1bnVzZWQgZW50cmllcyByYXRoZXIgdGhh biB3cmFwcGluZyBhcm91bmQsIHNpbmNlCi0gKiBhbGxvd2luZyB3cmFwYXJvdW5kIHdvdWxk IGdyZWF0bHkgY29tcGxpY2F0ZSB0aGUgc2VhcmNoIGxvZ2ljLiAgV2UgbWFpbnRhaW4KLSAq IGFuIGV4cGxpY2l0IHRhaWwgcG9pbnRlciBzbyB0aGF0IHBydW5pbmcgb2Ygb2xkIFhJRHMg Y2FuIGJlIGRvbmUgd2l0aG91dAotICogaW1tZWRpYXRlbHkgbW92aW5nIHRoZSBhcnJheSBj b250ZW50cy4gIEluIG1vc3QgY2FzZXMgb25seSBhIHNtYWxsIGZyYWN0aW9uCi0gKiBvZiB0 aGUgYXJyYXkgY29udGFpbnMgdmFsaWQgZW50cmllcyBhdCBhbnkgaW5zdGFudC4KLSAqCi0g KiBBbHRob3VnaCBvbmx5IHRoZSBzdGFydHVwIHByb2Nlc3MgY2FuIGV2ZXIgY2hhbmdlIHRo ZSBLbm93bkFzc2lnbmVkWGlkcwotICogZGF0YSBzdHJ1Y3R1cmUsIHdlIHN0aWxsIG5lZWQg aW50ZXJsb2NraW5nIHNvIHRoYXQgc3RhbmRieSBiYWNrZW5kcyB3aWxsCi0gKiBub3Qgb2Jz ZXJ2ZSBpbnZhbGlkIGludGVybWVkaWF0ZSBzdGF0ZXMuICBUaGUgY29udmVudGlvbiBpcyB0 aGF0IGJhY2tlbmRzCi0gKiBtdXN0IGhvbGQgc2hhcmVkIFByb2NBcnJheUxvY2sgdG8gZXhh bWluZSB0aGUgYXJyYXkuICBUbyByZW1vdmUgWElEcyBmcm9tCi0gKiB0aGUgYXJyYXksIHRo ZSBzdGFydHVwIHByb2Nlc3MgbXVzdCBob2xkIFByb2NBcnJheUxvY2sgZXhjbHVzaXZlbHks IGZvcgotICogdGhlIHVzdWFsIHRyYW5zYWN0aW9uYWwgcmVhc29ucyAoY29tcGFyZSBjb21t aXQvYWJvcnQgb2YgYSB0cmFuc2FjdGlvbgotICogZHVyaW5nIG5vcm1hbCBydW5uaW5nKS4g IENvbXByZXNzaW5nIHVudXNlZCBlbnRyaWVzIG91dCBvZiB0aGUgYXJyYXkKLSAqIGxpa2V3 aXNlIHJlcXVpcmVzIGV4Y2x1c2l2ZSBsb2NrLiAgVG8gYWRkIFhJRHMgdG8gdGhlIGFycmF5 LCB3ZSBqdXN0IGluc2VydAotICogdGhlbSBpbnRvIHNsb3RzIHRvIHRoZSByaWdodCBvZiB0 aGUgaGVhZCBwb2ludGVyIGFuZCB0aGVuIGFkdmFuY2UgdGhlIGhlYWQKLSAqIHBvaW50ZXIu ICBUaGlzIGRvZXNuJ3QgcmVxdWlyZSBhbnkgbG9jayBhdCBhbGwsIGJ1dCBvbiBtYWNoaW5l cyB3aXRoIHdlYWsKLSAqIG1lbW9yeSBvcmRlcmluZywgd2UgbmVlZCB0byBiZSBjYXJlZnVs IHRoYXQgb3RoZXIgcHJvY2Vzc29ycyBzZWUgdGhlIGFycmF5Ci0gKiBlbGVtZW50IGNoYW5n ZXMgYmVmb3JlIHRoZXkgc2VlIHRoZSBoZWFkIHBvaW50ZXIgY2hhbmdlLiAgV2UgaGFuZGxl IHRoaXMgYnkKLSAqIHVzaW5nIG1lbW9yeSBiYXJyaWVycyB3aGVuIHJlYWRpbmcgb3Igd3Jp dGluZyB0aGUgaGVhZC90YWlsIHBvaW50ZXJzICh1bmxlc3MKLSAqIHRoZSBjYWxsZXIgaG9s ZHMgUHJvY0FycmF5TG9jayBleGNsdXNpdmVseSkuCi0gKgotICogQWxnb3JpdGhtaWMgYW5h bHlzaXM6Ci0gKgotICogSWYgd2UgaGF2ZSBhIG1heGltdW0gb2YgTSBzbG90cywgd2l0aCBO IFhJRHMgY3VycmVudGx5IHNwcmVhZCBhY3Jvc3MKLSAqIFMgZWxlbWVudHMgdGhlbiB3ZSBo YXZlIE4gPD0gUyA8PSBNIGFsd2F5cy4KLSAqCi0gKgkqIEFkZGluZyBhIG5ldyBYSUQgaXMg TygxKSBhbmQgbmVlZHMgbm8gbG9jayAodW5sZXNzIGNvbXByZXNzaW9uIG11c3QKLSAqCQlo YXBwZW4pCi0gKgkqIENvbXByZXNzaW5nIHRoZSBhcnJheSBpcyBPKFMpIGFuZCByZXF1aXJl cyBleGNsdXNpdmUgbG9jawotICoJKiBSZW1vdmluZyBhbiBYSUQgaXMgTyhsb2dTKSBhbmQg cmVxdWlyZXMgZXhjbHVzaXZlIGxvY2sKLSAqCSogVGFraW5nIGEgc25hcHNob3QgaXMgTyhT KSBhbmQgcmVxdWlyZXMgc2hhcmVkIGxvY2sKLSAqCSogQ2hlY2tpbmcgZm9yIGFuIFhJRCBp cyBPKGxvZ1MpIGFuZCByZXF1aXJlcyBzaGFyZWQgbG9jawotICoKLSAqIEluIGNvbXBhcmlz b24sIHVzaW5nIGEgaGFzaCB0YWJsZSBmb3IgS25vd25Bc3NpZ25lZFhpZHMgd291bGQgbWVh biB0aGF0Ci0gKiB0YWtpbmcgc25hcHNob3RzIHdvdWxkIGJlIE8oTSkuIElmIHdlIGNhbiBt YWludGFpbiBTIDw8IE0gdGhlbiB0aGUKLSAqIHNvcnRlZCBhcnJheSB0ZWNobmlxdWUgd2ls bCBkZWxpdmVyIHNpZ25pZmljYW50bHkgZmFzdGVyIHNuYXBzaG90cy4KLSAqIElmIHdlIHRy eSB0byBrZWVwIFMgdG9vIHNtYWxsIHRoZW4gd2Ugd2lsbCBzcGVuZCB0b28gbXVjaCB0aW1l IGNvbXByZXNzaW5nLAotICogc28gdGhlcmUgaXMgYW4gb3B0aW1hbCBwb2ludCBmb3IgYW55 IHdvcmtsb2FkIG1peC4gV2UgdXNlIGEgaGV1cmlzdGljIHRvCi0gKiBkZWNpZGUgd2hlbiB0 byBjb21wcmVzcyB0aGUgYXJyYXksIHRob3VnaCB0cmltbWluZyBhbHNvIGhlbHBzIHJlZHVj ZQotICogZnJlcXVlbmN5IG9mIGNvbXByZXNzaW5nLiBUaGUgaGV1cmlzdGljIHJlcXVpcmVz IHVzIHRvIHRyYWNrIHRoZSBudW1iZXIgb2YKLSAqIGN1cnJlbnRseSB2YWxpZCBYSURzIGlu IHRoZSBhcnJheSAoTikuICBFeGNlcHQgaW4gc3BlY2lhbCBjYXNlcywgd2UnbGwKLSAqIGNv bXByZXNzIHdoZW4gUyA+PSAyTi4gIEJvdW5kaW5nIFMgYXQgMk4gaW4gdHVybiBib3VuZHMg dGhlIHRpbWUgZm9yCi0gKiB0YWtpbmcgYSBzbmFwc2hvdCB0byBiZSBPKE4pLCB3aGljaCBp dCB3b3VsZCBoYXZlIHRvIGJlIGFueXdheS4KLSAqLwotCi0KLS8qCi0gKiBDb21wcmVzcyBL bm93bkFzc2lnbmVkWGlkcyBieSBzaGlmdGluZyB2YWxpZCBkYXRhIGRvd24gdG8gdGhlIHN0 YXJ0IG9mIHRoZQotICogYXJyYXksIHJlbW92aW5nIGFueSBnYXBzLgotICoKLSAqIEEgY29t cHJlc3Npb24gc3RlcCBpcyBmb3JjZWQgaWYgInJlYXNvbiIgaXMgS0FYX05PX1NQQUNFLCBv dGhlcndpc2UKLSAqIHdlIGRvIGl0IG9ubHkgaWYgYSBoZXVyaXN0aWMgaW5kaWNhdGVzIGl0 J3MgYSBnb29kIHRpbWUgdG8gZG8gaXQuCi0gKgotICogQ29tcHJlc3Npb24gcmVxdWlyZXMg aG9sZGluZyBQcm9jQXJyYXlMb2NrIGluIGV4Y2x1c2l2ZSBtb2RlLgotICogQ2FsbGVyIG11 c3QgcGFzcyBoYXZlTG9jayA9IHRydWUgaWYgaXQgYWxyZWFkeSBob2xkcyB0aGUgbG9jay4K LSAqLwotc3RhdGljIHZvaWQKLUtub3duQXNzaWduZWRYaWRzQ29tcHJlc3MoS0FYQ29tcHJl c3NSZWFzb24gcmVhc29uLCBib29sIGhhdmVMb2NrKQotewotCVByb2NBcnJheVN0cnVjdCAq cEFycmF5ID0gcHJvY0FycmF5OwotCWludAkJCWhlYWQsCi0JCQkJdGFpbCwKLQkJCQluZWxl bWVudHM7Ci0JaW50CQkJY29tcHJlc3NfaW5kZXg7Ci0JaW50CQkJaTsKLQotCS8qIENvdW50 ZXJzIGZvciBjb21wcmVzc2lvbiBoZXVyaXN0aWNzICovCi0Jc3RhdGljIHVuc2lnbmVkIGlu dCB0cmFuc2FjdGlvbkVuZHNDb3VudGVyOwotCXN0YXRpYyBUaW1lc3RhbXBUeiBsYXN0Q29t cHJlc3NUczsKLQotCS8qIFR1bmluZyBjb25zdGFudHMgKi8KLSNkZWZpbmUgS0FYX0NPTVBS RVNTX0ZSRVFVRU5DWSAxMjgJLyogaW4gdHJhbnNhY3Rpb25zICovCi0jZGVmaW5lIEtBWF9D T01QUkVTU19JRExFX0lOVEVSVkFMIDEwMDAgLyogaW4gbXMgKi8KLQotCS8qCi0JICogU2lu Y2Ugb25seSB0aGUgc3RhcnR1cCBwcm9jZXNzIG1vZGlmaWVzIHRoZSBoZWFkL3RhaWwgcG9p bnRlcnMsIHdlCi0JICogZG9uJ3QgbmVlZCBhIGxvY2sgdG8gcmVhZCB0aGVtIGhlcmUuCi0J ICovCi0JaGVhZCA9IHBBcnJheS0+aGVhZEtub3duQXNzaWduZWRYaWRzOwotCXRhaWwgPSBw QXJyYXktPnRhaWxLbm93bkFzc2lnbmVkWGlkczsKLQluZWxlbWVudHMgPSBoZWFkIC0gdGFp bDsKLQotCS8qCi0JICogSWYgd2UgY2FuIGNob29zZSB3aGV0aGVyIHRvIGNvbXByZXNzLCB1 c2UgYSBoZXVyaXN0aWMgdG8gYXZvaWQKLQkgKiBjb21wcmVzc2luZyB0b28gb2Z0ZW4gb3Ig bm90IG9mdGVuIGVub3VnaC4gICJDb21wcmVzcyIgaGVyZSBzaW1wbHkKLQkgKiBtZWFucyBt b3ZpbmcgdGhlIHZhbHVlcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheSwgc28gaXQg aXMgbm90IGFzCi0JICogY29tcGxleCBvciBjb3N0bHkgYXMgdHlwaWNhbCBkYXRhIGNvbXBy ZXNzaW9uIGFsZ29yaXRobXMuCi0JICovCi0JaWYgKG5lbGVtZW50cyA9PSBwQXJyYXktPm51 bUtub3duQXNzaWduZWRYaWRzKQotCXsKLQkJLyoKLQkJICogV2hlbiB0aGVyZSBhcmUgbm8g Z2FwcyBiZXR3ZWVuIGhlYWQgYW5kIHRhaWwsIGRvbid0IGJvdGhlciB0bwotCQkgKiBjb21w cmVzcywgZXhjZXB0IGluIHRoZSBLQVhfTk9fU1BBQ0UgY2FzZSB3aGVyZSB3ZSBtdXN0IGNv bXByZXNzIHRvCi0JCSAqIGNyZWF0ZSBzb21lIHNwYWNlIGFmdGVyIHRoZSBoZWFkLgotCQkg Ki8KLQkJaWYgKHJlYXNvbiAhPSBLQVhfTk9fU1BBQ0UpCi0JCQlyZXR1cm47Ci0JfQotCWVs c2UgaWYgKHJlYXNvbiA9PSBLQVhfVFJBTlNBQ1RJT05fRU5EKQotCXsKLQkJLyoKLQkJICog Q29uc2lkZXIgY29tcHJlc3Npbmcgb25seSBvbmNlIGV2ZXJ5IHNvIG1hbnkgY29tbWl0cy4g IEZyZXF1ZW5jeQotCQkgKiBkZXRlcm1pbmVkIGJ5IGJlbmNobWFya3MuCi0JCSAqLwotCQlp ZiAoKHRyYW5zYWN0aW9uRW5kc0NvdW50ZXIrKykgJSBLQVhfQ09NUFJFU1NfRlJFUVVFTkNZ ICE9IDApCi0JCQlyZXR1cm47Ci0KLQkJLyoKLQkJICogRnVydGhlcm1vcmUsIGNvbXByZXNz IG9ubHkgaWYgdGhlIHVzZWQgcGFydCBvZiB0aGUgYXJyYXkgaXMgbGVzcwotCQkgKiB0aGFu IDUwJSBmdWxsIChzZWUgY29tbWVudHMgYWJvdmUpLgotCQkgKi8KLQkJaWYgKG5lbGVtZW50 cyA8IDIgKiBwQXJyYXktPm51bUtub3duQXNzaWduZWRYaWRzKQotCQkJcmV0dXJuOwotCX0K LQllbHNlIGlmIChyZWFzb24gPT0gS0FYX1NUQVJUVVBfUFJPQ0VTU19JRExFKQotCXsKLQkJ LyoKLQkJICogV2UncmUgYWJvdXQgdG8gZ28gaWRsZSBmb3IgbGFjayBvZiBuZXcgV0FMLCBz byB3ZSBtaWdodCBhcyB3ZWxsCi0JCSAqIGNvbXByZXNzLiAgQnV0IG5vdCB0b28gb2Z0ZW4s IHRvIGF2b2lkIFByb2NBcnJheSBsb2NrIGNvbnRlbnRpb24KLQkJICogd2l0aCByZWFkZXJz LgotCQkgKi8KLQkJaWYgKGxhc3RDb21wcmVzc1RzICE9IDApCi0JCXsKLQkJCVRpbWVzdGFt cFR6IGNvbXByZXNzX2FmdGVyOwotCi0JCQljb21wcmVzc19hZnRlciA9IFRpbWVzdGFtcFR6 UGx1c01pbGxpc2Vjb25kcyhsYXN0Q29tcHJlc3NUcywKLQkJCQkJCQkJCQkJCQkJIEtBWF9D T01QUkVTU19JRExFX0lOVEVSVkFMKTsKLQkJCWlmIChHZXRDdXJyZW50VGltZXN0YW1wKCkg PCBjb21wcmVzc19hZnRlcikKLQkJCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQkvKiBOZWVkIHRv IGNvbXByZXNzLCBzbyBnZXQgdGhlIGxvY2sgaWYgd2UgZG9uJ3QgaGF2ZSBpdC4gKi8KLQlp ZiAoIWhhdmVMb2NrKQotCQlMV0xvY2tBY3F1aXJlKFByb2NBcnJheUxvY2ssIExXX0VYQ0xV U0lWRSk7Ci0KLQkvKgotCSAqIFdlIGNvbXByZXNzIHRoZSBhcnJheSBieSByZWFkaW5nIHRo ZSB2YWxpZCB2YWx1ZXMgZnJvbSB0YWlsIHRvIGhlYWQsCi0JICogcmUtYWxpZ25pbmcgZGF0 YSB0byAwdGggZWxlbWVudC4KLQkgKi8KLQljb21wcmVzc19pbmRleCA9IDA7Ci0JZm9yIChp ID0gdGFpbDsgaSA8IGhlYWQ7IGkrKykKLQl7Ci0JCWlmIChLbm93bkFzc2lnbmVkWGlkc1Zh bGlkW2ldKQotCQl7Ci0JCQlLbm93bkFzc2lnbmVkWGlkc1tjb21wcmVzc19pbmRleF0gPSBL bm93bkFzc2lnbmVkWGlkc1tpXTsKLQkJCUtub3duQXNzaWduZWRYaWRzVmFsaWRbY29tcHJl c3NfaW5kZXhdID0gdHJ1ZTsKLQkJCWNvbXByZXNzX2luZGV4Kys7Ci0JCX0KLQl9Ci0JQXNz ZXJ0KGNvbXByZXNzX2luZGV4ID09IHBBcnJheS0+bnVtS25vd25Bc3NpZ25lZFhpZHMpOwot Ci0JcEFycmF5LT50YWlsS25vd25Bc3NpZ25lZFhpZHMgPSAwOwotCXBBcnJheS0+aGVhZEtu b3duQXNzaWduZWRYaWRzID0gY29tcHJlc3NfaW5kZXg7Ci0KLQlpZiAoIWhhdmVMb2NrKQot CQlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2spOwotCi0JLyogVXBkYXRlIHRpbWVzdGFt cCBmb3IgbWFpbnRlbmFuY2UuICBObyBuZWVkIHRvIGhvbGQgbG9jayBmb3IgdGhpcy4gKi8K LQlsYXN0Q29tcHJlc3NUcyA9IEdldEN1cnJlbnRUaW1lc3RhbXAoKTsKLX0KLQotLyoKLSAq IEFkZCB4aWRzIGludG8gS25vd25Bc3NpZ25lZFhpZHMgYXQgdGhlIGhlYWQgb2YgdGhlIGFy cmF5LgotICoKLSAqIHhpZHMgZnJvbSBmcm9tX3hpZCB0byB0b194aWQsIGluY2x1c2l2ZSwg YXJlIGFkZGVkIHRvIHRoZSBhcnJheS4KLSAqCi0gKiBJZiBleGNsdXNpdmVfbG9jayBpcyB0 cnVlIHRoZW4gY2FsbGVyIGFscmVhZHkgaG9sZHMgUHJvY0FycmF5TG9jayBpbgotICogZXhj bHVzaXZlIG1vZGUsIHNvIHdlIG5lZWQgbm8gZXh0cmEgbG9ja2luZyBoZXJlLiAgRWxzZSBj YWxsZXIgaG9sZHMgbm8KLSAqIGxvY2ssIHNvIHdlIG5lZWQgdG8gYmUgc3VyZSB3ZSBtYWlu dGFpbiBzdWZmaWNpZW50IGludGVybG9ja3MgYWdhaW5zdAotICogY29uY3VycmVudCByZWFk ZXJzLiAgKE9ubHkgdGhlIHN0YXJ0dXAgcHJvY2VzcyBldmVyIGNhbGxzIHRoaXMsIHNvIG5v IG5lZWQKLSAqIHRvIHdvcnJ5IGFib3V0IGNvbmN1cnJlbnQgd3JpdGVycy4pCi0gKi8KLXN0 YXRpYyB2b2lkCi1Lbm93bkFzc2lnbmVkWGlkc0FkZChUcmFuc2FjdGlvbklkIGZyb21feGlk LCBUcmFuc2FjdGlvbklkIHRvX3hpZCwKLQkJCQkJIGJvb2wgZXhjbHVzaXZlX2xvY2spCi17 Ci0JUHJvY0FycmF5U3RydWN0ICpwQXJyYXkgPSBwcm9jQXJyYXk7Ci0JVHJhbnNhY3Rpb25J ZCBuZXh0X3hpZDsKLQlpbnQJCQloZWFkLAotCQkJCXRhaWw7Ci0JaW50CQkJbnhpZHM7Ci0J aW50CQkJaTsKLQotCUFzc2VydChUcmFuc2FjdGlvbklkUHJlY2VkZXNPckVxdWFscyhmcm9t X3hpZCwgdG9feGlkKSk7Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSBob3cgbWFueSBhcnJheSBz bG90cyB3ZSdsbCBuZWVkLiAgTm9ybWFsbHkgdGhpcyBpcyBjaGVhcDsgaW4KLQkgKiB0aGUg dW51c3VhbCBjYXNlIHdoZXJlIHRoZSBYSURzIGNyb3NzIHRoZSB3cmFwIHBvaW50LCB3ZSBk byBpdCB0aGUgaGFyZAotCSAqIHdheS4KLQkgKi8KLQlpZiAodG9feGlkID49IGZyb21feGlk KQotCQlueGlkcyA9IHRvX3hpZCAtIGZyb21feGlkICsgMTsKLQllbHNlCi0JewotCQlueGlk cyA9IDE7Ci0JCW5leHRfeGlkID0gZnJvbV94aWQ7Ci0JCXdoaWxlIChUcmFuc2FjdGlvbklk UHJlY2VkZXMobmV4dF94aWQsIHRvX3hpZCkpCi0JCXsKLQkJCW54aWRzKys7Ci0JCQlUcmFu c2FjdGlvbklkQWR2YW5jZShuZXh0X3hpZCk7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFNpbmNl IG9ubHkgdGhlIHN0YXJ0dXAgcHJvY2VzcyBtb2RpZmllcyB0aGUgaGVhZC90YWlsIHBvaW50 ZXJzLCB3ZQotCSAqIGRvbid0IG5lZWQgYSBsb2NrIHRvIHJlYWQgdGhlbSBoZXJlLgotCSAq LwotCWhlYWQgPSBwQXJyYXktPmhlYWRLbm93bkFzc2lnbmVkWGlkczsKLQl0YWlsID0gcEFy cmF5LT50YWlsS25vd25Bc3NpZ25lZFhpZHM7Ci0KLQlBc3NlcnQoaGVhZCA+PSAwICYmIGhl YWQgPD0gcEFycmF5LT5tYXhLbm93bkFzc2lnbmVkWGlkcyk7Ci0JQXNzZXJ0KHRhaWwgPj0g MCAmJiB0YWlsIDwgcEFycmF5LT5tYXhLbm93bkFzc2lnbmVkWGlkcyk7Ci0KLQkvKgotCSAq IFZlcmlmeSB0aGF0IGluc2VydGlvbnMgb2NjdXIgaW4gVHJhbnNhY3Rpb25JZCBzZXF1ZW5j ZS4gIE5vdGUgdGhhdCBldmVuCi0JICogaWYgdGhlIGxhc3QgZXhpc3RpbmcgZWxlbWVudCBp cyBtYXJrZWQgaW52YWxpZCwgaXQgbXVzdCBzdGlsbCBoYXZlIGEKLQkgKiBjb3JyZWN0bHkg c2VxdWVuY2VkIFhJRCB2YWx1ZS4KLQkgKi8KLQlpZiAoaGVhZCA+IHRhaWwgJiYKLQkJVHJh bnNhY3Rpb25JZEZvbGxvd3NPckVxdWFscyhLbm93bkFzc2lnbmVkWGlkc1toZWFkIC0gMV0s IGZyb21feGlkKSkKLQl7Ci0JCUtub3duQXNzaWduZWRYaWRzRGlzcGxheShMT0cpOwotCQll bG9nKEVSUk9SLCAib3V0LW9mLW9yZGVyIFhJRCBpbnNlcnRpb24gaW4gS25vd25Bc3NpZ25l ZFhpZHMiKTsKLQl9Ci0KLQkvKgotCSAqIElmIG91ciB4aWRzIHdvbid0IGZpdCBpbiB0aGUg cmVtYWluaW5nIHNwYWNlLCBjb21wcmVzcyBvdXQgZnJlZSBzcGFjZQotCSAqLwotCWlmICho ZWFkICsgbnhpZHMgPiBwQXJyYXktPm1heEtub3duQXNzaWduZWRYaWRzKQotCXsKLQkJS25v d25Bc3NpZ25lZFhpZHNDb21wcmVzcyhLQVhfTk9fU1BBQ0UsIGV4Y2x1c2l2ZV9sb2NrKTsK LQotCQloZWFkID0gcEFycmF5LT5oZWFkS25vd25Bc3NpZ25lZFhpZHM7Ci0JCS8qIG5vdGU6 IHdlIG5vIGxvbmdlciBjYXJlIGFib3V0IHRoZSB0YWlsIHBvaW50ZXIgKi8KLQotCQkvKgot CQkgKiBJZiBpdCBzdGlsbCB3b24ndCBmaXQgdGhlbiB3ZSdyZSBvdXQgb2YgbWVtb3J5Ci0J CSAqLwotCQlpZiAoaGVhZCArIG54aWRzID4gcEFycmF5LT5tYXhLbm93bkFzc2lnbmVkWGlk cykKLQkJCWVsb2coRVJST1IsICJ0b28gbWFueSBLbm93bkFzc2lnbmVkWGlkcyIpOwotCX0K LQotCS8qIE5vdyB3ZSBjYW4gaW5zZXJ0IHRoZSB4aWRzIGludG8gdGhlIHNwYWNlIHN0YXJ0 aW5nIGF0IGhlYWQgKi8KLQluZXh0X3hpZCA9IGZyb21feGlkOwotCWZvciAoaSA9IDA7IGkg PCBueGlkczsgaSsrKQotCXsKLQkJS25vd25Bc3NpZ25lZFhpZHNbaGVhZF0gPSBuZXh0X3hp ZDsKLQkJS25vd25Bc3NpZ25lZFhpZHNWYWxpZFtoZWFkXSA9IHRydWU7Ci0JCVRyYW5zYWN0 aW9uSWRBZHZhbmNlKG5leHRfeGlkKTsKLQkJaGVhZCsrOwotCX0KLQotCS8qIEFkanVzdCBj b3VudCBvZiBudW1iZXIgb2YgdmFsaWQgZW50cmllcyAqLwotCXBBcnJheS0+bnVtS25vd25B c3NpZ25lZFhpZHMgKz0gbnhpZHM7Ci0KLQkvKgotCSAqIE5vdyB1cGRhdGUgdGhlIGhlYWQg cG9pbnRlci4gIFdlIHVzZSBhIHdyaXRlIGJhcnJpZXIgdG8gZW5zdXJlIHRoYXQKLQkgKiBv dGhlciBwcm9jZXNzb3JzIHNlZSB0aGUgYWJvdmUgYXJyYXkgdXBkYXRlcyBiZWZvcmUgdGhl eSBzZWUgdGhlIGhlYWQKLQkgKiBwb2ludGVyIGNoYW5nZS4gIFRoZSBiYXJyaWVyIGlzbid0 IHJlcXVpcmVkIGlmIHdlJ3JlIGhvbGRpbmcKLQkgKiBQcm9jQXJyYXlMb2NrIGV4Y2x1c2l2 ZWx5LgotCSAqLwotCWlmICghZXhjbHVzaXZlX2xvY2spCi0JCXBnX3dyaXRlX2JhcnJpZXIo KTsKLQotCXBBcnJheS0+aGVhZEtub3duQXNzaWduZWRYaWRzID0gaGVhZDsKLX0KLQotLyoK LSAqIEtub3duQXNzaWduZWRYaWRzU2VhcmNoCi0gKgotICogU2VhcmNoZXMgS25vd25Bc3Np Z25lZFhpZHMgZm9yIGEgc3BlY2lmaWMgeGlkIGFuZCBvcHRpb25hbGx5IHJlbW92ZXMgaXQu Ci0gKiBSZXR1cm5zIHRydWUgaWYgaXQgd2FzIGZvdW5kLCBmYWxzZSBpZiBub3QuCi0gKgot ICogQ2FsbGVyIG11c3QgaG9sZCBQcm9jQXJyYXlMb2NrIGluIHNoYXJlZCBvciBleGNsdXNp dmUgbW9kZS4KLSAqIEV4Y2x1c2l2ZSBsb2NrIG11c3QgYmUgaGVsZCBmb3IgcmVtb3ZlID0g dHJ1ZS4KLSAqLwotc3RhdGljIGJvb2wKLUtub3duQXNzaWduZWRYaWRzU2VhcmNoKFRyYW5z YWN0aW9uSWQgeGlkLCBib29sIHJlbW92ZSkKLXsKLQlQcm9jQXJyYXlTdHJ1Y3QgKnBBcnJh eSA9IHByb2NBcnJheTsKLQlpbnQJCQlmaXJzdCwKLQkJCQlsYXN0OwotCWludAkJCWhlYWQ7 Ci0JaW50CQkJdGFpbDsKLQlpbnQJCQlyZXN1bHRfaW5kZXggPSAtMTsKLQotCXRhaWwgPSBw QXJyYXktPnRhaWxLbm93bkFzc2lnbmVkWGlkczsKLQloZWFkID0gcEFycmF5LT5oZWFkS25v d25Bc3NpZ25lZFhpZHM7Ci0KLQkvKgotCSAqIE9ubHkgdGhlIHN0YXJ0dXAgcHJvY2VzcyBy ZW1vdmVzIGVudHJpZXMsIHNvIHdlIGRvbid0IG5lZWQgdGhlIHJlYWQKLQkgKiBiYXJyaWVy IGluIHRoYXQgY2FzZS4KLQkgKi8KLQlpZiAoIXJlbW92ZSkKLQkJcGdfcmVhZF9iYXJyaWVy KCk7CQkvKiBwYWlycyB3aXRoIEtub3duQXNzaWduZWRYaWRzQWRkICovCi0KLQkvKgotCSAq IFN0YW5kYXJkIGJpbmFyeSBzZWFyY2guICBOb3RlIHdlIGNhbiBpZ25vcmUgdGhlIEtub3du QXNzaWduZWRYaWRzVmFsaWQKLQkgKiBhcnJheSBoZXJlLCBzaW5jZSBldmVuIGludmFsaWQg ZW50cmllcyB3aWxsIGNvbnRhaW4gc29ydGVkIFhJRHMuCi0JICovCi0JZmlyc3QgPSB0YWls OwotCWxhc3QgPSBoZWFkIC0gMTsKLQl3aGlsZSAoZmlyc3QgPD0gbGFzdCkKLQl7Ci0JCWlu dAkJCW1pZF9pbmRleDsKLQkJVHJhbnNhY3Rpb25JZCBtaWRfeGlkOwotCi0JCW1pZF9pbmRl eCA9IChmaXJzdCArIGxhc3QpIC8gMjsKLQkJbWlkX3hpZCA9IEtub3duQXNzaWduZWRYaWRz W21pZF9pbmRleF07Ci0KLQkJaWYgKHhpZCA9PSBtaWRfeGlkKQotCQl7Ci0JCQlyZXN1bHRf aW5kZXggPSBtaWRfaW5kZXg7Ci0JCQlicmVhazsKLQkJfQotCQllbHNlIGlmIChUcmFuc2Fj dGlvbklkUHJlY2VkZXMoeGlkLCBtaWRfeGlkKSkKLQkJCWxhc3QgPSBtaWRfaW5kZXggLSAx OwotCQllbHNlCi0JCQlmaXJzdCA9IG1pZF9pbmRleCArIDE7Ci0JfQotCi0JaWYgKHJlc3Vs dF9pbmRleCA8IDApCi0JCXJldHVybiBmYWxzZTsJCQkvKiBub3QgaW4gYXJyYXkgKi8KLQot CWlmICghS25vd25Bc3NpZ25lZFhpZHNWYWxpZFtyZXN1bHRfaW5kZXhdKQotCQlyZXR1cm4g ZmFsc2U7CQkJLyogaW4gYXJyYXksIGJ1dCBpbnZhbGlkICovCi0KLQlpZiAocmVtb3ZlKQot CXsKLQkJS25vd25Bc3NpZ25lZFhpZHNWYWxpZFtyZXN1bHRfaW5kZXhdID0gZmFsc2U7Ci0K LQkJcEFycmF5LT5udW1Lbm93bkFzc2lnbmVkWGlkcy0tOwotCQlBc3NlcnQocEFycmF5LT5u dW1Lbm93bkFzc2lnbmVkWGlkcyA+PSAwKTsKLQotCQkvKgotCQkgKiBJZiB3ZSdyZSByZW1v dmluZyB0aGUgdGFpbCBlbGVtZW50IHRoZW4gYWR2YW5jZSB0YWlsIHBvaW50ZXIgb3Zlcgot CQkgKiBhbnkgaW52YWxpZCBlbGVtZW50cy4gIFRoaXMgd2lsbCBzcGVlZCBmdXR1cmUgc2Vh cmNoZXMuCi0JCSAqLwotCQlpZiAocmVzdWx0X2luZGV4ID09IHRhaWwpCi0JCXsKLQkJCXRh aWwrKzsKLQkJCXdoaWxlICh0YWlsIDwgaGVhZCAmJiAhS25vd25Bc3NpZ25lZFhpZHNWYWxp ZFt0YWlsXSkKLQkJCQl0YWlsKys7Ci0JCQlpZiAodGFpbCA+PSBoZWFkKQotCQkJewotCQkJ CS8qIEFycmF5IGlzIGVtcHR5LCBzbyB3ZSBjYW4gcmVzZXQgYm90aCBwb2ludGVycyAqLwot CQkJCXBBcnJheS0+aGVhZEtub3duQXNzaWduZWRYaWRzID0gMDsKLQkJCQlwQXJyYXktPnRh aWxLbm93bkFzc2lnbmVkWGlkcyA9IDA7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJcEFy cmF5LT50YWlsS25vd25Bc3NpZ25lZFhpZHMgPSB0YWlsOwotCQkJfQotCQl9Ci0JfQotCi0J cmV0dXJuIHRydWU7Ci19Ci0KLS8qCi0gKiBJcyB0aGUgc3BlY2lmaWVkIFhJRCBwcmVzZW50 IGluIEtub3duQXNzaWduZWRYaWRzW10/Ci0gKgotICogQ2FsbGVyIG11c3QgaG9sZCBQcm9j QXJyYXlMb2NrIGluIHNoYXJlZCBvciBleGNsdXNpdmUgbW9kZS4KLSAqLwotc3RhdGljIGJv b2wKLUtub3duQXNzaWduZWRYaWRFeGlzdHMoVHJhbnNhY3Rpb25JZCB4aWQpCi17Ci0JQXNz ZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpOwotCi0JcmV0dXJuIEtub3duQXNzaWdu ZWRYaWRzU2VhcmNoKHhpZCwgZmFsc2UpOwotfQotCi0vKgotICogUmVtb3ZlIHRoZSBzcGVj aWZpZWQgWElEIGZyb20gS25vd25Bc3NpZ25lZFhpZHNbXS4KLSAqCi0gKiBDYWxsZXIgbXVz dCBob2xkIFByb2NBcnJheUxvY2sgaW4gZXhjbHVzaXZlIG1vZGUuCi0gKi8KLXN0YXRpYyB2 b2lkCi1Lbm93bkFzc2lnbmVkWGlkc1JlbW92ZShUcmFuc2FjdGlvbklkIHhpZCkKLXsKLQlB c3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSk7Ci0KLQllbG9nKERFQlVHNCwgInJl bW92ZSBLbm93bkFzc2lnbmVkWGlkICV1IiwgeGlkKTsKLQotCS8qCi0JICogTm90ZTogd2Ug Y2Fubm90IGNvbnNpZGVyIGl0IGFuIGVycm9yIHRvIHJlbW92ZSBhbiBYSUQgdGhhdCdzIG5v dAotCSAqIHByZXNlbnQuICBXZSBpbnRlbnRpb25hbGx5IHJlbW92ZSBzdWJ4YWN0IElEcyB3 aGlsZSBwcm9jZXNzaW5nCi0JICogWExPR19YQUNUX0FTU0lHTk1FTlQsIHRvIGF2b2lkIGFy cmF5IG92ZXJmbG93LiAgVGhlbiB0aG9zZSBYSURzIHdpbGwgYmUKLQkgKiByZW1vdmVkIGFn YWluIHdoZW4gdGhlIHRvcC1sZXZlbCB4YWN0IGNvbW1pdHMgb3IgYWJvcnRzLgotCSAqCi0J ICogSXQgbWlnaHQgYmUgcG9zc2libGUgdG8gdHJhY2sgc3VjaCBYSURzIHRvIGRpc3Rpbmd1 aXNoIHRoaXMgY2FzZSBmcm9tCi0JICogYWN0dWFsIGVycm9ycywgYnV0IGl0IHdvdWxkIGJl IGNvbXBsaWNhdGVkIGFuZCBwcm9iYWJseSBub3Qgd29ydGggaXQuCi0JICogU28sIGp1c3Qg aWdub3JlIHRoZSBzZWFyY2ggcmVzdWx0LgotCSAqLwotCSh2b2lkKSBLbm93bkFzc2lnbmVk WGlkc1NlYXJjaCh4aWQsIHRydWUpOwotfQotCi0vKgotICogS25vd25Bc3NpZ25lZFhpZHNS ZW1vdmVUcmVlCi0gKgkJUmVtb3ZlIHhpZCAoaWYgaXQncyBub3QgSW52YWxpZFRyYW5zYWN0 aW9uSWQpIGFuZCBhbGwgdGhlIHN1YnhpZHMuCi0gKgotICogQ2FsbGVyIG11c3QgaG9sZCBQ cm9jQXJyYXlMb2NrIGluIGV4Y2x1c2l2ZSBtb2RlLgotICovCi1zdGF0aWMgdm9pZAotS25v d25Bc3NpZ25lZFhpZHNSZW1vdmVUcmVlKFRyYW5zYWN0aW9uSWQgeGlkLCBpbnQgbnN1Ynhp ZHMsCi0JCQkJCQkJVHJhbnNhY3Rpb25JZCAqc3VieGlkcykKLXsKLQlpbnQJCQlpOwotCi0J aWYgKFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpCi0JCUtub3duQXNzaWduZWRYaWRzUmVt b3ZlKHhpZCk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnN1YnhpZHM7IGkrKykKLQkJS25vd25B c3NpZ25lZFhpZHNSZW1vdmUoc3VieGlkc1tpXSk7Ci0KLQkvKiBPcHBvcnR1bmlzdGljYWxs eSBjb21wcmVzcyB0aGUgYXJyYXkgKi8KLQlLbm93bkFzc2lnbmVkWGlkc0NvbXByZXNzKEtB WF9UUkFOU0FDVElPTl9FTkQsIHRydWUpOwotfQotCi0vKgotICogUHJ1bmUgS25vd25Bc3Np Z25lZFhpZHMgdXAgdG8sIGJ1dCAqbm90KiBpbmNsdWRpbmcgeGlkLiBJZiB4aWQgaXMgaW52 YWxpZAotICogdGhlbiBjbGVhciB0aGUgd2hvbGUgdGFibGUuCi0gKgotICogQ2FsbGVyIG11 c3QgaG9sZCBQcm9jQXJyYXlMb2NrIGluIGV4Y2x1c2l2ZSBtb2RlLgotICovCi1zdGF0aWMg dm9pZAotS25vd25Bc3NpZ25lZFhpZHNSZW1vdmVQcmVjZWRpbmcoVHJhbnNhY3Rpb25JZCBy ZW1vdmVYaWQpCi17Ci0JUHJvY0FycmF5U3RydWN0ICpwQXJyYXkgPSBwcm9jQXJyYXk7Ci0J aW50CQkJY291bnQgPSAwOwotCWludAkJCWhlYWQsCi0JCQkJdGFpbCwKLQkJCQlpOwotCi0J aWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChyZW1vdmVYaWQpKQotCXsKLQkJZWxvZyhERUJV RzQsICJyZW1vdmluZyBhbGwgS25vd25Bc3NpZ25lZFhpZHMiKTsKLQkJcEFycmF5LT5udW1L bm93bkFzc2lnbmVkWGlkcyA9IDA7Ci0JCXBBcnJheS0+aGVhZEtub3duQXNzaWduZWRYaWRz ID0gcEFycmF5LT50YWlsS25vd25Bc3NpZ25lZFhpZHMgPSAwOwotCQlyZXR1cm47Ci0JfQot Ci0JZWxvZyhERUJVRzQsICJwcnVuZSBLbm93bkFzc2lnbmVkWGlkcyB0byAldSIsIHJlbW92 ZVhpZCk7Ci0KLQkvKgotCSAqIE1hcmsgZW50cmllcyBpbnZhbGlkIHN0YXJ0aW5nIGF0IHRo ZSB0YWlsLiAgU2luY2UgYXJyYXkgaXMgc29ydGVkLCB3ZQotCSAqIGNhbiBzdG9wIGFzIHNv b24gYXMgd2UgcmVhY2ggYW4gZW50cnkgPj0gcmVtb3ZlWGlkLgotCSAqLwotCXRhaWwgPSBw QXJyYXktPnRhaWxLbm93bkFzc2lnbmVkWGlkczsKLQloZWFkID0gcEFycmF5LT5oZWFkS25v d25Bc3NpZ25lZFhpZHM7Ci0KLQlmb3IgKGkgPSB0YWlsOyBpIDwgaGVhZDsgaSsrKQotCXsK LQkJaWYgKEtub3duQXNzaWduZWRYaWRzVmFsaWRbaV0pCi0JCXsKLQkJCVRyYW5zYWN0aW9u SWQga25vd25YaWQgPSBLbm93bkFzc2lnbmVkWGlkc1tpXTsKLQotCQkJaWYgKFRyYW5zYWN0 aW9uSWRGb2xsb3dzT3JFcXVhbHMoa25vd25YaWQsIHJlbW92ZVhpZCkpCi0JCQkJYnJlYWs7 Ci0KLQkJCWlmICghU3RhbmRieVRyYW5zYWN0aW9uSWRJc1ByZXBhcmVkKGtub3duWGlkKSkK LQkJCXsKLQkJCQlLbm93bkFzc2lnbmVkWGlkc1ZhbGlkW2ldID0gZmFsc2U7Ci0JCQkJY291 bnQrKzsKLQkJCX0KLQkJfQotCX0KLQotCXBBcnJheS0+bnVtS25vd25Bc3NpZ25lZFhpZHMg LT0gY291bnQ7Ci0JQXNzZXJ0KHBBcnJheS0+bnVtS25vd25Bc3NpZ25lZFhpZHMgPj0gMCk7 Ci0KLQkvKgotCSAqIEFkdmFuY2UgdGhlIHRhaWwgcG9pbnRlciBpZiB3ZSd2ZSBtYXJrZWQg dGhlIHRhaWwgaXRlbSBpbnZhbGlkLgotCSAqLwotCWZvciAoaSA9IHRhaWw7IGkgPCBoZWFk OyBpKyspCi0JewotCQlpZiAoS25vd25Bc3NpZ25lZFhpZHNWYWxpZFtpXSkKLQkJCWJyZWFr OwotCX0KLQlpZiAoaSA+PSBoZWFkKQotCXsKLQkJLyogQXJyYXkgaXMgZW1wdHksIHNvIHdl IGNhbiByZXNldCBib3RoIHBvaW50ZXJzICovCi0JCXBBcnJheS0+aGVhZEtub3duQXNzaWdu ZWRYaWRzID0gMDsKLQkJcEFycmF5LT50YWlsS25vd25Bc3NpZ25lZFhpZHMgPSAwOwotCX0K LQllbHNlCi0JewotCQlwQXJyYXktPnRhaWxLbm93bkFzc2lnbmVkWGlkcyA9IGk7Ci0JfQot Ci0JLyogT3Bwb3J0dW5pc3RpY2FsbHkgY29tcHJlc3MgdGhlIGFycmF5ICovCi0JS25vd25B c3NpZ25lZFhpZHNDb21wcmVzcyhLQVhfUFJVTkUsIHRydWUpOwotfQotCi0vKgotICogS25v d25Bc3NpZ25lZFhpZHNHZXQgLSBHZXQgYW4gYXJyYXkgb2YgeGlkcyBieSBzY2FubmluZyBL bm93bkFzc2lnbmVkWGlkcy4KLSAqIFdlIGZpbHRlciBvdXQgYW55dGhpbmcgPj0geG1heC4K LSAqCi0gKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgWElEcyBzdG9yZWQgaW50byB4YXJyYXlb XS4gIENhbGxlciBpcyByZXNwb25zaWJsZQotICogdGhhdCBhcnJheSBpcyBsYXJnZSBlbm91 Z2guCi0gKgotICogQ2FsbGVyIG11c3QgaG9sZCBQcm9jQXJyYXlMb2NrIGluIChhdCBsZWFz dCkgc2hhcmVkIG1vZGUuCi0gKi8KLXN0YXRpYyBpbnQKLUtub3duQXNzaWduZWRYaWRzR2V0 KFRyYW5zYWN0aW9uSWQgKnhhcnJheSwgVHJhbnNhY3Rpb25JZCB4bWF4KQotewotCVRyYW5z YWN0aW9uSWQgeHRtcCA9IEludmFsaWRUcmFuc2FjdGlvbklkOwotCi0JcmV0dXJuIEtub3du QXNzaWduZWRYaWRzR2V0QW5kU2V0WG1pbih4YXJyYXksICZ4dG1wLCB4bWF4KTsKLX0KLQot LyoKLSAqIEtub3duQXNzaWduZWRYaWRzR2V0QW5kU2V0WG1pbiAtIGFzIEtub3duQXNzaWdu ZWRYaWRzR2V0LCBwbHVzCi0gKiB3ZSByZWR1Y2UgKnhtaW4gdG8gdGhlIGxvd2VzdCB4aWQg dmFsdWUgc2VlbiBpZiBub3QgYWxyZWFkeSBsb3dlci4KLSAqCi0gKiBDYWxsZXIgbXVzdCBo b2xkIFByb2NBcnJheUxvY2sgaW4gKGF0IGxlYXN0KSBzaGFyZWQgbW9kZS4KLSAqLwotc3Rh dGljIGludAotS25vd25Bc3NpZ25lZFhpZHNHZXRBbmRTZXRYbWluKFRyYW5zYWN0aW9uSWQg KnhhcnJheSwgVHJhbnNhY3Rpb25JZCAqeG1pbiwKLQkJCQkJCQkgICBUcmFuc2FjdGlvbklk IHhtYXgpCi17Ci0JaW50CQkJY291bnQgPSAwOwotCWludAkJCWhlYWQsCi0JCQkJdGFpbDsK LQlpbnQJCQlpOwotCi0JLyoKLQkgKiBGZXRjaCBoZWFkIGp1c3Qgb25jZSwgc2luY2UgaXQg bWF5IGNoYW5nZSB3aGlsZSB3ZSBsb29wLiBXZSBjYW4gc3RvcAotCSAqIG9uY2Ugd2UgcmVh Y2ggdGhlIGluaXRpYWxseSBzZWVuIGhlYWQsIHNpbmNlIHdlIGFyZSBjZXJ0YWluIHRoYXQg YW4geGlkCi0JICogY2Fubm90IGVudGVyIGFuZCB0aGVuIGxlYXZlIHRoZSBhcnJheSB3aGls ZSB3ZSBob2xkIFByb2NBcnJheUxvY2suICBXZQotCSAqIG1pZ2h0IG1pc3MgbmV3bHktYWRk ZWQgeGlkcywgYnV0IHRoZXkgc2hvdWxkIGJlID49IHhtYXggc28gaXJyZWxldmFudAotCSAq IGFueXdheS4KLQkgKi8KLQl0YWlsID0gcHJvY0FycmF5LT50YWlsS25vd25Bc3NpZ25lZFhp ZHM7Ci0JaGVhZCA9IHByb2NBcnJheS0+aGVhZEtub3duQXNzaWduZWRYaWRzOwotCi0JcGdf cmVhZF9iYXJyaWVyKCk7CQkJLyogcGFpcnMgd2l0aCBLbm93bkFzc2lnbmVkWGlkc0FkZCAq LwotCi0JZm9yIChpID0gdGFpbDsgaSA8IGhlYWQ7IGkrKykKLQl7Ci0JCS8qIFNraXAgYW55 IGdhcHMgaW4gdGhlIGFycmF5ICovCi0JCWlmIChLbm93bkFzc2lnbmVkWGlkc1ZhbGlkW2ld KQotCQl7Ci0JCQlUcmFuc2FjdGlvbklkIGtub3duWGlkID0gS25vd25Bc3NpZ25lZFhpZHNb aV07Ci0KLQkJCS8qCi0JCQkgKiBVcGRhdGUgeG1pbiBpZiByZXF1aXJlZC4gIE9ubHkgdGhl IGZpcnN0IFhJRCBuZWVkIGJlIGNoZWNrZWQsCi0JCQkgKiBzaW5jZSB0aGUgYXJyYXkgaXMg c29ydGVkLgotCQkJICovCi0JCQlpZiAoY291bnQgPT0gMCAmJgotCQkJCVRyYW5zYWN0aW9u SWRQcmVjZWRlcyhrbm93blhpZCwgKnhtaW4pKQotCQkJCSp4bWluID0ga25vd25YaWQ7Ci0K LQkJCS8qCi0JCQkgKiBGaWx0ZXIgb3V0IGFueXRoaW5nID49IHhtYXgsIGFnYWluIHJlbHlp bmcgb24gc29ydGVkIHByb3BlcnR5Ci0JCQkgKiBvZiBhcnJheS4KLQkJCSAqLwotCQkJaWYg KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhtYXgpICYmCi0JCQkJVHJhbnNhY3Rpb25JZEZvbGxv d3NPckVxdWFscyhrbm93blhpZCwgeG1heCkpCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIEFkZCBr bm93blhpZCBpbnRvIG91dHB1dCBhcnJheSAqLwotCQkJeGFycmF5W2NvdW50KytdID0ga25v d25YaWQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLS8qCi0gKiBHZXQgb2xk ZXN0IFhJRCBpbiB0aGUgS25vd25Bc3NpZ25lZFhpZHMgYXJyYXksIG9yIEludmFsaWRUcmFu c2FjdGlvbklkCi0gKiBpZiBub3RoaW5nIHRoZXJlLgotICovCi1zdGF0aWMgVHJhbnNhY3Rp b25JZAotS25vd25Bc3NpZ25lZFhpZHNHZXRPbGRlc3RYbWluKHZvaWQpCi17Ci0JaW50CQkJ aGVhZCwKLQkJCQl0YWlsOwotCWludAkJCWk7Ci0KLQkvKgotCSAqIEZldGNoIGhlYWQganVz dCBvbmNlLCBzaW5jZSBpdCBtYXkgY2hhbmdlIHdoaWxlIHdlIGxvb3AuCi0JICovCi0JdGFp bCA9IHByb2NBcnJheS0+dGFpbEtub3duQXNzaWduZWRYaWRzOwotCWhlYWQgPSBwcm9jQXJy YXktPmhlYWRLbm93bkFzc2lnbmVkWGlkczsKLQotCXBnX3JlYWRfYmFycmllcigpOwkJCS8q IHBhaXJzIHdpdGggS25vd25Bc3NpZ25lZFhpZHNBZGQgKi8KLQotCWZvciAoaSA9IHRhaWw7 IGkgPCBoZWFkOyBpKyspCi0JewotCQkvKiBTa2lwIGFueSBnYXBzIGluIHRoZSBhcnJheSAq LwotCQlpZiAoS25vd25Bc3NpZ25lZFhpZHNWYWxpZFtpXSkKLQkJCXJldHVybiBLbm93bkFz c2lnbmVkWGlkc1tpXTsKLQl9Ci0KLQlyZXR1cm4gSW52YWxpZFRyYW5zYWN0aW9uSWQ7Ci19 Ci0KLS8qCi0gKiBEaXNwbGF5IEtub3duQXNzaWduZWRYaWRzIHRvIHByb3ZpZGUgZGVidWcg dHJhaWwKLSAqCi0gKiBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IGNhbGxlZCB3aXRoaW4gc3Rh cnR1cCBwcm9jZXNzLCBzbyB3ZSBuZWVkIG5vCi0gKiBzcGVjaWFsIGxvY2tpbmcuCi0gKgot ICogTm90ZSB0aGlzIGlzIHByZXR0eSBleHBlbnNpdmUsIGFuZCBtdWNoIG9mIHRoZSBleHBl bnNlIHdpbGwgYmUgaW5jdXJyZWQKLSAqIGV2ZW4gaWYgdGhlIGVsb2cgbWVzc2FnZSB3aWxs IGdldCBkaXNjYXJkZWQuICBJdCdzIG5vdCBjdXJyZW50bHkgY2FsbGVkCi0gKiBpbiBhbnkg cGVyZm9ybWFuY2UtY3JpdGljYWwgcGxhY2VzLCBob3dldmVyLCBzbyBubyBuZWVkIHRvIGJl IHRlbnNlci4KLSAqLwotc3RhdGljIHZvaWQKLUtub3duQXNzaWduZWRYaWRzRGlzcGxheShp bnQgdHJhY2VfbGV2ZWwpCi17Ci0JUHJvY0FycmF5U3RydWN0ICpwQXJyYXkgPSBwcm9jQXJy YXk7Ci0JU3RyaW5nSW5mb0RhdGEgYnVmOwotCWludAkJCWhlYWQsCi0JCQkJdGFpbCwKLQkJ CQlpOwotCWludAkJCW54aWRzID0gMDsKLQotCXRhaWwgPSBwQXJyYXktPnRhaWxLbm93bkFz c2lnbmVkWGlkczsKLQloZWFkID0gcEFycmF5LT5oZWFkS25vd25Bc3NpZ25lZFhpZHM7Ci0K LQlpbml0U3RyaW5nSW5mbygmYnVmKTsKLQotCWZvciAoaSA9IHRhaWw7IGkgPCBoZWFkOyBp KyspCi0JewotCQlpZiAoS25vd25Bc3NpZ25lZFhpZHNWYWxpZFtpXSkKLQkJewotCQkJbnhp ZHMrKzsKLQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIlslZF09JXUgIiwgaSwgS25vd25B c3NpZ25lZFhpZHNbaV0pOwotCQl9Ci0JfQotCi0JZWxvZyh0cmFjZV9sZXZlbCwgIiVkIEtu b3duQXNzaWduZWRYaWRzIChudW09JWQgdGFpbD0lZCBoZWFkPSVkKSAlcyIsCi0JCSBueGlk cywKLQkJIHBBcnJheS0+bnVtS25vd25Bc3NpZ25lZFhpZHMsCi0JCSBwQXJyYXktPnRhaWxL bm93bkFzc2lnbmVkWGlkcywKLQkJIHBBcnJheS0+aGVhZEtub3duQXNzaWduZWRYaWRzLAot CQkgYnVmLmRhdGEpOwotCi0JcGZyZWUoYnVmLmRhdGEpOwotfQotCi0vKgotICogS25vd25B c3NpZ25lZFhpZHNSZXNldAotICoJCVJlc2V0cyBLbm93bkFzc2lnbmVkWGlkcyB0byBiZSBl bXB0eQotICovCi1zdGF0aWMgdm9pZAotS25vd25Bc3NpZ25lZFhpZHNSZXNldCh2b2lkKQot ewotCVByb2NBcnJheVN0cnVjdCAqcEFycmF5ID0gcHJvY0FycmF5OwotCi0JTFdMb2NrQWNx dWlyZShQcm9jQXJyYXlMb2NrLCBMV19FWENMVVNJVkUpOworCUFzc2VydChsc24gPiBUcmFu c2FtVmFyaWFibGVzLT5sYXRlc3RDb21taXRMU04pOworCVRyYW5zYW1WYXJpYWJsZXMtPmxh dGVzdENvbW1pdExTTiA9IGxzbjsKIAotCXBBcnJheS0+bnVtS25vd25Bc3NpZ25lZFhpZHMg PSAwOwotCXBBcnJheS0+dGFpbEtub3duQXNzaWduZWRYaWRzID0gMDsKLQlwQXJyYXktPmhl YWRLbm93bkFzc2lnbmVkWGlkcyA9IDA7CisJcHJvY0FycmF5LT5vbGRlc3RfcnVubmluZ19w cmltYXJ5X3hpZCA9IG9sZGVzdF9ydW5uaW5nX3ByaW1hcnlfeGlkOwogCiAJTFdMb2NrUmVs ZWFzZShQcm9jQXJyYXlMb2NrKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL3N0YW5kYnkuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYwpp bmRleCA1YWNiNDUwOGY4NS4uMjE3YjE2NzBmNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3N0b3JhZ2UvaXBjL3N0YW5kYnkuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9z dGFuZGJ5LmMKQEAgLTEzOSw4ICsxMzksNiBAQCBJbml0UmVjb3ZlcnlUcmFuc2FjdGlvbkVu dmlyb25tZW50KHZvaWQpCiAJdnhpZC5wcm9jTnVtYmVyID0gTXlQcm9jTnVtYmVyOwogCXZ4 aWQubG9jYWxUcmFuc2FjdGlvbklkID0gR2V0TmV4dExvY2FsVHJhbnNhY3Rpb25JZCgpOwog CVZpcnR1YWxYYWN0TG9ja1RhYmxlSW5zZXJ0KHZ4aWQpOwotCi0Jc3RhbmRieVN0YXRlID0g U1RBTkRCWV9JTklUSUFMSVpFRDsKIH0KIAogLyoKQEAgLTE2OCw5ICsxNjYsNiBAQCBTaHV0 ZG93blJlY292ZXJ5VHJhbnNhY3Rpb25FbnZpcm9ubWVudCh2b2lkKQogCWlmIChSZWNvdmVy eUxvY2tIYXNoID09IE5VTEwpCiAJCXJldHVybjsKIAotCS8qIE1hcmsgYWxsIHRyYWNrZWQg aW4tcHJvZ3Jlc3MgdHJhbnNhY3Rpb25zIGFzIGZpbmlzaGVkLiAqLwotCUV4cGlyZUFsbEtu b3duQXNzaWduZWRUcmFuc2FjdGlvbklkcygpOwotCiAJLyogUmVsZWFzZSBhbGwgbG9ja3Mg dGhlIHRyYWNrZWQgdHJhbnNhY3Rpb25zIHdlcmUgaG9sZGluZyAqLwogCVN0YW5kYnlSZWxl YXNlQWxsTG9ja3MoKTsKIApAQCAtMTE2Nyw3ICsxMTYyLDcgQEAgc3RhbmRieV9yZWRvKFhM b2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCUFzc2VydCghWExvZ1JlY0hhc0FueUJsb2NrUmVm cyhyZWNvcmQpKTsKIAogCS8qIERvIG5vdGhpbmcgaWYgd2UncmUgbm90IGluIGhvdCBzdGFu ZGJ5IG1vZGUgKi8KLQlpZiAoc3RhbmRieVN0YXRlID09IFNUQU5EQllfRElTQUJMRUQpCisJ aWYgKCFJbkhvdFN0YW5kYnkpCiAJCXJldHVybjsKIAogCWlmIChpbmZvID09IFhMT0dfU1RB TkRCWV9MT0NLKQpAQCAtMTE4MiwxOCArMTE3NywyMSBAQCBzdGFuZGJ5X3JlZG8oWExvZ1Jl YWRlclN0YXRlICpyZWNvcmQpCiAJfQogCWVsc2UgaWYgKGluZm8gPT0gWExPR19SVU5OSU5H X1hBQ1RTKQogCXsKKwkJLyoKKwkJICogWFhYOiBydW5uaW5nIHhhY3RzIHJlY29yZHMgd2Vy ZSBwcmV2aW91c2x5IHVzZWQgdG8gdXBkYXRlCisJCSAqIGtub3duLWFzc2lnbmVkIHhpZHMs IGJ1dCBub3cgd2Ugb25seSBuZWVkIGl0IGZvciB0aGUgbG9naWNhbAorCQkgKiByZXBsaWNh dGlvbiBzbmFwYnVpbGRlciBzdHVmZi4gQW5kIGZvciB0aGUKKwkJICogcGdfc3RhdF9yZXBv cnRfc3RhdCh0cnVlKSBjYWxsIGJlbG93LgorCQkgKi8KIAkJeGxfcnVubmluZ194YWN0cyAq eGxyZWMgPSAoeGxfcnVubmluZ194YWN0cyAqKSBYTG9nUmVjR2V0RGF0YShyZWNvcmQpOwot CQlSdW5uaW5nVHJhbnNhY3Rpb25zRGF0YSBydW5uaW5nOwogCi0JCXJ1bm5pbmcueGNudCA9 IHhscmVjLT54Y250OwotCQlydW5uaW5nLnN1YnhjbnQgPSB4bHJlYy0+c3VieGNudDsKLQkJ cnVubmluZy5zdWJ4aWRfc3RhdHVzID0geGxyZWMtPnN1YnhpZF9vdmVyZmxvdyA/IFNVQlhJ RFNfTUlTU0lORyA6IFNVQlhJRFNfSU5fQVJSQVk7Ci0JCXJ1bm5pbmcubmV4dFhpZCA9IHhs cmVjLT5uZXh0WGlkOwotCQlydW5uaW5nLmxhdGVzdENvbXBsZXRlZFhpZCA9IHhscmVjLT5s YXRlc3RDb21wbGV0ZWRYaWQ7Ci0JCXJ1bm5pbmcub2xkZXN0UnVubmluZ1hpZCA9IHhscmVj LT5vbGRlc3RSdW5uaW5nWGlkOwotCQlydW5uaW5nLnhpZHMgPSB4bHJlYy0+eGlkczsKLQot CQlQcm9jQXJyYXlBcHBseVJlY292ZXJ5SW5mbygmcnVubmluZyk7CisJCS8qCisJCSAqIFJl bWVtYmVyIHRoZSBvbGRlc3QgWElEIHRoYXQgd2FzIHJ1bm5pbmcgYXQgdGhlIHRpbWUuIE5v cm1hbGx5LCBhbGwKKwkJICogdHJhbnNhY3Rpb24gYWJvcnRzIGFuZCBjb21taXRzIGFyZSBX QUwtbG9nZ2VkLCBzbyBvdXIKKwkJICogb2xkZXN0UnVubmluZ1hpZCB2YWx1ZSBzaG91bGQg YmUgdXAtdG8tZGF0ZSwgYnV0IGlmIG5vdCwgdGhpcworCQkgKiBhbGxvd3MgdXMgdG8gcmVz eW5jaHJvbml6ZS4KKwkJICovCisJCVByb2NBcnJheVVwZGF0ZU9sZGVzdFJ1bm5pbmdYaWQo eGxyZWMtPm9sZGVzdFJ1bm5pbmdYaWQpOwogCiAJCS8qCiAJCSAqIFRoZSBzdGFydHVwIHBy b2Nlc3MgY3VycmVudGx5IGhhcyBubyBjb252ZW5pZW50IHdheSB0byBzY2hlZHVsZQpAQCAt MTIyNCw1MCArMTIyMiw0NiBAQCBzdGFuZGJ5X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNv cmQpCiAgKgogICogVGhpcyBpcyB1c2VkIGZvciBIb3QgU3RhbmRieSBhcyBmb2xsb3dzOgog ICoKLSAqIFdlIGNhbiBtb3ZlIGRpcmVjdGx5IHRvIFNUQU5EQllfU05BUFNIT1RfUkVBRFkg YXQgc3RhcnR1cCBpZiB3ZQotICogc3RhcnQgZnJvbSBhIHNodXRkb3duIGNoZWNrcG9pbnQg YmVjYXVzZSB3ZSBrbm93IG5vdGhpbmcgd2FzIHJ1bm5pbmcKLSAqIGF0IHRoYXQgdGltZSBh bmQgb3VyIHJlY292ZXJ5IHNuYXBzaG90IGlzIGtub3duIGVtcHR5LiBJbiB0aGUgbW9yZQot ICogdHlwaWNhbCBjYXNlIG9mIGFuIG9ubGluZSBjaGVja3BvaW50IHdlIG5lZWQgdG8ganVt cCB0aHJvdWdoIGEgZmV3Ci0gKiBob29wcyB0byBnZXQgYSBjb3JyZWN0IHJlY292ZXJ5IHNu YXBzaG90IGFuZCB0aGlzIHJlcXVpcmVzIGEgdHdvIG9yCi0gKiBzb21ldGltZXMgYSB0aHJl ZSBzdGFnZSBwcm9jZXNzLgorICogV2UgY2FuIGVudGVyIGhvdCBzdGFuZGJ5IG1vZGUgYW5k IHN0YXJ0IGFjY2VwdGluZyByZWFkLW9ubHkgcXVlcmllcworICogaW1tZWRpYXRlbHkgYXQg c3RhcnR1cCBpZiB3ZSBzdGFydCBmcm9tIGEgc2h1dGRvd24gY2hlY2twb2ludCwgYmVjYXVz ZSB3ZQorICoga25vdyBub3RoaW5nIHdhcyBydW5uaW5nIGF0IHRoYXQgdGltZSBhbmQgb3Vy IHJlY292ZXJ5IHNuYXBzaG90IGlzIGtub3duCisgKiBlbXB0eS4gSW4gdGhlIG1vcmUgdHlw aWNhbCBjYXNlIG9mIGFuIG9ubGluZSBjaGVja3BvaW50LCB0aGUgY2hlY2twb2ludAorICog cmVjb3JkIGRvZXNuJ3QgY29udGFpbiBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBh Ym91dCBydW5uaW5nCisgKiB0cmFuc2FjdGlvbiBzdGF0ZSwgYW5kIHdlIG5lZWQgdG8ganVt cCB0aHJvdWdoIGEgZmV3IGhvb3BzIHRvIGdldCBhIGNvcnJlY3QKKyAqIHJlY292ZXJ5IHNu YXBzaG90LgogICoKLSAqIFRoZSBpbml0aWFsIHNuYXBzaG90IG11c3QgY29udGFpbiBhbGwg cnVubmluZyB4aWRzIGFuZCBhbGwgY3VycmVudAotICogQWNjZXNzRXhjbHVzaXZlTG9ja3Mg YXQgYSBwb2ludCBpbiB0aW1lIG9uIHRoZSBzdGFuZGJ5LiBBc3NlbWJsaW5nCi0gKiB0aGF0 IGluZm9ybWF0aW9uIHdoaWxlIHRoZSBzZXJ2ZXIgaXMgcnVubmluZyByZXF1aXJlcyBtYW55 IGFuZAotICogdmFyaW91cyBMV0xvY2tzLCBzbyB3ZSBjaG9vc2UgdG8gZGVyaXZlIHRoYXQg aW5mb3JtYXRpb24gcGllY2UgYnkKLSAqIHBpZWNlIGFuZCB0aGVuIHJlLWFzc2VtYmxlIHRo YXQgaW5mbyBvbiB0aGUgc3RhbmRieS4gV2hlbiB0aGF0Ci0gKiBpbmZvcm1hdGlvbiBpcyBm dWxseSBhc3NlbWJsZWQgd2UgbW92ZSB0byBTVEFOREJZX1NOQVBTSE9UX1JFQURZLgorICog VGhlIGluaXRpYWwgc25hcHNob3QgbXVzdCBjb250YWluIGFsbCBjdXJyZW50IEFjY2Vzc0V4 Y2x1c2l2ZUxvY2tzIGF0IGEKKyAqIHBvaW50IGluIHRpbWUgb24gdGhlIHN0YW5kYnkuIEFz c2VtYmxpbmcgdGhhdCBpbmZvcm1hdGlvbiB3aGlsZSB0aGUgc2VydmVyCisgKiBpcyBydW5u aW5nIHJlcXVpcmVzIG1hbnkgYW5kIHZhcmlvdXMgTFdMb2Nrcywgc28gd2UgY2hvb3NlIHRv IGRlcml2ZSB0aGF0CisgKiBpbmZvcm1hdGlvbiBwaWVjZSBieSBwaWVjZSBhbmQgdGhlbiBy ZS1hc3NlbWJsZSB0aGF0IGluZm8gb24gdGhlIHN0YW5kYnkuCiAgKgotICogU2luY2UgbG9j a2luZyBvbiB0aGUgcHJpbWFyeSB3aGVuIHdlIGRlcml2ZSB0aGUgaW5mb3JtYXRpb24gaXMg bm90Ci0gKiBzdHJpY3QsIHdlIG5vdGUgdGhhdCB0aGVyZSBpcyBhIHRpbWUgd2luZG93IGJl dHdlZW4gdGhlIGRlcml2YXRpb24gYW5kCi0gKiB3cml0aW5nIHRvIFdBTCBvZiB0aGUgZGVy aXZlZCBpbmZvcm1hdGlvbi4gVGhhdCBhbGxvd3MgcmFjZSBjb25kaXRpb25zCi0gKiB0aGF0 IHdlIG11c3QgcmVzb2x2ZSwgc2luY2UgeGlkcyBhbmQgbG9ja3MgbWF5IGVudGVyIG9yIGxl YXZlIHRoZQotICogc25hcHNob3QgZHVyaW5nIHRoYXQgd2luZG93LiBUaGlzIGNyZWF0ZXMg dGhlIGlzc3VlIHRoYXQgYW4geGlkIG9yCi0gKiBsb2NrIG1heSBzdGFydCAqYWZ0ZXIqIHRo ZSBzbmFwc2hvdCBoYXMgYmVlbiBkZXJpdmVkIHlldCAqYmVmb3JlKiB0aGUKLSAqIHNuYXBz aG90IGlzIGxvZ2dlZCBpbiB0aGUgcnVubmluZyB4YWN0cyBXQUwgcmVjb3JkLiBXZSByZXNv bHZlIHRoaXMgYnkKLSAqIHN0YXJ0aW5nIHRvIGFjY3VtdWxhdGUgY2hhbmdlcyBhdCBhIHBv aW50IGp1c3QgcHJpb3IgdG8gd2hlbiB3ZSBkZXJpdmUKLSAqIHRoZSBzbmFwc2hvdCBvbiB0 aGUgcHJpbWFyeSwgdGhlbiBpZ25vcmUgZHVwbGljYXRlcyB3aGVuIHdlIGxhdGVyIGFwcGx5 Ci0gKiB0aGUgc25hcHNob3QgZnJvbSB0aGUgcnVubmluZyB4YWN0cyByZWNvcmQuIFRoaXMg aXMgaW1wbGVtZW50ZWQgZHVyaW5nCi0gKiBDcmVhdGVDaGVja1BvaW50KCkgd2hlcmUgd2Ug dXNlIHRoZSBsb2dpY2FsIGNoZWNrcG9pbnQgbG9jYXRpb24gYXMKLSAqIG91ciBzdGFydGlu ZyBwb2ludCBhbmQgdGhlbiB3cml0ZSB0aGUgcnVubmluZyB4YWN0cyByZWNvcmQgaW1tZWRp YXRlbHkKLSAqIGJlZm9yZSB3cml0aW5nIHRoZSBtYWluIGNoZWNrcG9pbnQgV0FMIHJlY29y ZC4gU2luY2Ugd2UgYWx3YXlzIHN0YXJ0Ci0gKiB1cCBmcm9tIGEgY2hlY2twb2ludCBhbmQg YXJlIGltbWVkaWF0ZWx5IGF0IG91ciBzdGFydGluZyBwb2ludCwgd2UKLSAqIHVuY29uZGl0 aW9uYWxseSBtb3ZlIHRvIFNUQU5EQllfSU5JVElBTElaRUQuIEFmdGVyIHRoaXMgcG9pbnQg d2UKLSAqIG11c3QgZG8gNCB0aGluZ3M6CisgKiBTaW5jZSBsb2NraW5nIG9uIHRoZSBwcmlt YXJ5IHdoZW4gd2UgZGVyaXZlIHRoZSBpbmZvcm1hdGlvbiBpcyBub3Qgc3RyaWN0LAorICog dGhlcmUgaXMgYSB0aW1lIHdpbmRvdyBiZXR3ZWVuIHRoZSBkZXJpdmF0aW9uIGFuZCB3cml0 aW5nIHRvIFdBTCBvZiB0aGUKKyAqIGRlcml2ZWQgaW5mb3JtYXRpb24uIFRoYXQgYWxsb3dz IHJhY2UgY29uZGl0aW9ucyB0aGF0IHdlIG11c3QgcmVzb2x2ZSwKKyAqIHNpbmNlIHhpZHMg YW5kIGxvY2tzIG1heSBlbnRlciBvciBsZWF2ZSB0aGUgc25hcHNob3QgZHVyaW5nIHRoYXQK KyAqIHdpbmRvdy4gVGhpcyBjcmVhdGVzIHRoZSBpc3N1ZSB0aGF0IGFuIHhpZCBvciBsb2Nr IG1heSBzdGFydCAqYWZ0ZXIqIHRoZQorICogc25hcHNob3QgaGFzIGJlZW4gZGVyaXZlZCB5 ZXQgKmJlZm9yZSogdGhlIHNuYXBzaG90IGlzIGxvZ2dlZCBpbiB0aGUKKyAqIHJ1bm5pbmcg eGFjdHMgV0FMIHJlY29yZC4gV2UgcmVzb2x2ZSB0aGlzIGJ5IHN0YXJ0aW5nIHRvIGFjY3Vt dWxhdGUgY2hhbmdlcworICogYXQgYSBwb2ludCBqdXN0IHByaW9yIHRvIHdoZW4gd2UgY29s bGVjdCB0aGUgbG9jayBpbmZvcm1hdGlvbiBvbiB0aGUKKyAqIHByaW1hcnksIHRoZW4gaWdu b3JlIGR1cGxpY2F0ZXMgd2hlbiB3ZSBsYXRlciBhcHBseSB0aGUgc25hcHNob3QgZnJvbSB0 aGUKKyAqIHJ1bm5pbmcgeGFjdHMgcmVjb3JkLiBUaGlzIGlzIGltcGxlbWVudGVkIGR1cmlu ZyBDcmVhdGVDaGVja1BvaW50KCkgd2hlcmUKKyAqIHdlIHVzZSB0aGUgbG9naWNhbCBjaGVj a3BvaW50IGxvY2F0aW9uIGFzIG91ciBzdGFydGluZyBwb2ludCBhbmQgdGhlbiB3cml0ZQor ICogdGhlIHJ1bm5pbmcgeGFjdHMgcmVjb3JkIGltbWVkaWF0ZWx5IGJlZm9yZSB3cml0aW5n IHRoZSBtYWluIGNoZWNrcG9pbnQgV0FMCisgKiByZWNvcmQuIFNpbmNlIHdlIGFsd2F5cyBz dGFydCB1cCBmcm9tIGEgY2hlY2twb2ludCdzIHJlZG8gcG9pbnRlciwgd2Ugd2lsbAorICog YWx3YXlzIHNlZSBhIHJ1bm5pbmcteGFjdHMgcmVjb3JkIGJldHdlZW4gYmVmb3JlIHJlYWNo aW5nIHRoZSBjaGVja3BvaW50CisgKiByZWNvcmQsIGFuZCBjYW4gaW1tZWRpYXRlbHkgZW50 ZXIgaG90IHN0YW5kYnkgbW9kZS4gQWZ0ZXIgdGhpcyBwb2ludCB3ZQorICogbXVzdCBkbyAz IHRoaW5nczoKICAqCSogbW92ZSBzaGFyZWQgbmV4dFhpZCBmb3J3YXJkcyBhcyB3ZSBzZWUg bmV3IHhpZHMKICAqCSogZXh0ZW5kIHRoZSBjbG9nIGFuZCBzdWJ0cmFucyB3aXRoIGVhY2gg bmV3IHhpZAotICoJKiBrZWVwIHRyYWNrIG9mIHVuY29tbWl0dGVkIGtub3duIGFzc2lnbmVk IHhpZHMKICAqCSoga2VlcCB0cmFjayBvZiB1bmNvbW1pdHRlZCBBY2Nlc3NFeGNsdXNpdmVM b2NrcwogICoKLSAqIFdoZW4gd2Ugc2VlIGEgY29tbWl0L2Fib3J0IHdlIG11c3QgcmVtb3Zl IGtub3duIGFzc2lnbmVkIHhpZHMgYW5kIGxvY2tzCi0gKiBmcm9tIHRoZSBjb21wbGV0aW5n IHRyYW5zYWN0aW9uLiBBdHRlbXB0ZWQgcmVtb3ZhbHMgdGhhdCBjYW5ub3QgbG9jYXRlCi0g KiBhbiBlbnRyeSBhcmUgZXhwZWN0ZWQgYW5kIG11c3Qgbm90IGNhdXNlIGFuIGVycm9yIHdo ZW4gd2UgYXJlIGluIHN0YXRlCi0gKiBTVEFOREJZX0lOSVRJQUxJWkVELiBUaGlzIGlzIGlt cGxlbWVudGVkIGluIFN0YW5kYnlSZWxlYXNlTG9ja3MoKSBhbmQKLSAqIEtub3duQXNzaWdu ZWRYaWRzUmVtb3ZlKCkuCi0gKgotICogTGF0ZXIsIHdoZW4gd2UgYXBwbHkgdGhlIHJ1bm5p bmcgeGFjdCBkYXRhIHdlIG11c3QgYmUgY2FyZWZ1bCB0byBpZ25vcmUKLSAqIHRyYW5zYWN0 aW9ucyBhbHJlYWR5IGNvbW1pdHRlZCwgc2luY2UgdGhvc2UgY29tbWl0cyByYWNlZCBhaGVh ZCB3aGVuCi0gKiBtYWtpbmcgV0FMIGVudHJpZXMuCisgKiBXaGVuIHdlIHNlZSBhIGNvbW1p dC9hYm9ydCB3ZSBtdXN0IGFkdmFuY2Ugb2xkZXN0X3J1bm5pbmdfcHJpbWFyeV94aWQgYW5k CisgKiByZW1vdmUgbG9ja3MgZnJvbSB0aGUgY29tcGxldGluZyB0cmFuc2FjdGlvbi4gQXR0 ZW1wdGVkIHJlbW92YWxzIHRoYXQKKyAqIGNhbm5vdCBsb2NhdGUgYW4gZW50cnkgYXJlIGV4 cGVjdGVkIGFuZCBtdXN0IG5vdCBjYXVzZSBhbiBlcnJvciB1bnRpbCB3ZQorICogaGF2ZSBz ZWVuIHRoZSBydW5uaW5nLXhhY3RzIHJlY29yZC4gKFdlIGRvbid0IHRocm93IGFuIGVycm9y IGV2ZW4gYWZ0ZXIKKyAqIHRoYXQsIGJlY2F1c2Ugd2hhdGV2ZXIgdGhlIHJlYXNvbiB3YXMs IGFmdGVyIHRoZSB0cmFuc2FjdGlvbiBoYXMgY29tcGxldGVkCisgKiB0aGUgaXNzdWUgaGFz IGFscmVhZHkgYmVlbiByZXNvbHZlZCBhbnl3YXkuKSBUaGlzIGlzIGltcGxlbWVudGVkIGlu CisgKiBTdGFuZGJ5UmVsZWFzZUxvY2tzKCkuCiAgKgogICogRm9yIGxvZ2ljYWwgZGVjb2Rp bmcgb25seSB0aGUgcnVubmluZyB4YWN0cyBpbmZvcm1hdGlvbiBpcyBuZWVkZWQ7CiAgKiB0 aGVyZSdzIG5vIG5lZWQgdG8gbG9vayBhdCB0aGUgbG9ja2luZyBpbmZvcm1hdGlvbiwgYnV0 IGl0J3MgbG9nZ2VkIGFueXdheSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv bG1nci9sd2xvY2suYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9sd2xvY2suYwppbmRl eCAzZGYyOTY1OGYxOC4uYWFkZWMzNmRjMTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvbG1nci9sd2xvY2suYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbHds b2NrLmMKQEAgLTE0MCw2ICsxNDAsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgQnVp bHRpblRyYW5jaGVOYW1lc1tdID0gewogCVtMV1RSQU5DSEVfWEFDVF9CVUZGRVJdID0gIlhh Y3RCdWZmZXIiLAogCVtMV1RSQU5DSEVfQ09NTUlUVFNfQlVGRkVSXSA9ICJDb21taXRUc0J1 ZmZlciIsCiAJW0xXVFJBTkNIRV9TVUJUUkFOU19CVUZGRVJdID0gIlN1YnRyYW5zQnVmZmVy IiwKKwlbTFdUUkFOQ0hFX0NTTl9MT0dfQlVGRkVSXSA9ICJDc25Mb2dCdWZmZXIiLAogCVtM V1RSQU5DSEVfTVVMVElYQUNUT0ZGU0VUX0JVRkZFUl0gPSAiTXVsdGlYYWN0T2Zmc2V0QnVm ZmVyIiwKIAlbTFdUUkFOQ0hFX01VTFRJWEFDVE1FTUJFUl9CVUZGRVJdID0gIk11bHRpWGFj dE1lbWJlckJ1ZmZlciIsCiAJW0xXVFJBTkNIRV9OT1RJRllfQlVGRkVSXSA9ICJOb3RpZnlC dWZmZXIiLApAQCAtMTc4LDYgKzE3OSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBC dWlsdGluVHJhbmNoZU5hbWVzW10gPSB7CiAJW0xXVFJBTkNIRV9YQUNUX1NMUlVdID0gIlhh Y3RTTFJVIiwKIAlbTFdUUkFOQ0hFX1BBUkFMTEVMX1ZBQ1VVTV9EU0FdID0gIlBhcmFsbGVs VmFjdXVtRFNBIiwKIAlbTFdUUkFOQ0hFX0FJT19VUklOR19DT01QTEVUSU9OXSA9ICJBaW9V cmluZ0NvbXBsZXRpb24iLAorCVtMV1RSQU5DSEVfQ1NOX0xPR19TTFJVXSA9ICJDc25Mb2dT TFJVIiwKIH07CiAKIFN0YXRpY0Fzc2VydERlY2wobGVuZ3Rob2YoQnVpbHRpblRyYW5jaGVO YW1lcykgPT0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRf ZXZlbnRfbmFtZXMudHh0IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVu dF9uYW1lcy50eHQKaW5kZXggNGY0NDY0OGFjYTguLjk1ZTI0OGIyYzg4IDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAorKysg Yi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4dApAQCAt MzYzLDYgKzM2Myw3IEBAIEFpb1dvcmtlclN1Ym1pc3Npb25RdWV1ZQkiV2FpdGluZyB0byBh Y2Nlc3MgQUlPIHdvcmtlciBzdWJtaXNzaW9uIHF1ZXVlLiIKIFhhY3RCdWZmZXIJIldhaXRp bmcgZm9yIEkvTyBvbiBhIHRyYW5zYWN0aW9uIHN0YXR1cyBTTFJVIGJ1ZmZlci4iCiBDb21t aXRUc0J1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgY29tbWl0IHRpbWVzdGFtcCBTTFJV IGJ1ZmZlci4iCiBTdWJ0cmFuc0J1ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgc3ViLXRy YW5zYWN0aW9uIFNMUlUgYnVmZmVyLiIKK0NzbmxvZ0J1ZmZlcgkiV2FpdGluZyBmb3IgSS9P IG9uIGEgc3ViLXRyYW5zYWN0aW9uIFNMUlUgYnVmZmVyLiIKIE11bHRpWGFjdE9mZnNldEJ1 ZmZlcgkiV2FpdGluZyBmb3IgSS9PIG9uIGEgbXVsdGl4YWN0IG9mZnNldCBTTFJVIGJ1ZmZl ci4iCiBNdWx0aVhhY3RNZW1iZXJCdWZmZXIJIldhaXRpbmcgZm9yIEkvTyBvbiBhIG11bHRp eGFjdCBtZW1iZXIgU0xSVSBidWZmZXIuIgogTm90aWZ5QnVmZmVyCSJXYWl0aW5nIGZvciBJ L08gb24gYSA8Y29tbWFuZD5OT1RJRlk8L2NvbW1hbmQ+IG1lc3NhZ2UgU0xSVSBidWZmZXIu IgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvcHJvYmVzLmQgYi9zcmMvYmFja2Vu ZC91dGlscy9wcm9iZXMuZAppbmRleCBlOWU0MTM0NzdiYS4uZDhmZjljZmRiMzYgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL3Byb2Jlcy5kCisrKyBiL3NyYy9iYWNrZW5kL3V0 aWxzL3Byb2Jlcy5kCkBAIC03Nyw2ICs3Nyw4IEBAIHByb3ZpZGVyIHBvc3RncmVzcWwgewog CXByb2JlIGNsb2dfX2NoZWNrcG9pbnRfX2RvbmUoYm9vbCk7CiAJcHJvYmUgc3VidHJhbnNf X2NoZWNrcG9pbnRfX3N0YXJ0KGJvb2wpOwogCXByb2JlIHN1YnRyYW5zX19jaGVja3BvaW50 X19kb25lKGJvb2wpOworCXByb2JlIGNzbmxvZ19fY2hlY2twb2ludF9fc3RhcnQoYm9vbCk7 CisJcHJvYmUgY3NubG9nX19jaGVja3BvaW50X19kb25lKGJvb2wpOwogCXByb2JlIG11bHRp eGFjdF9fY2hlY2twb2ludF9fc3RhcnQoYm9vbCk7CiAJcHJvYmUgbXVsdGl4YWN0X19jaGVj a3BvaW50X19kb25lKGJvb2wpOwogCXByb2JlIHR3b3BoYXNlX19jaGVja3BvaW50X19zdGFy dCgpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvdGltZS9zbmFwbWdyLmMgYi9z cmMvYmFja2VuZC91dGlscy90aW1lL3NuYXBtZ3IuYwppbmRleCA1ZjlmMmI5ZDhiMi4uMDQ5 YzcwNmYyY2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCkBAIC05Nyw2ICs5Nyw3 IEBACiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KIAorI2lu Y2x1ZGUgImFjY2Vzcy9jc25fbG9nLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3N1YnRyYW5zLmgi CiAjaW5jbHVkZSAiYWNjZXNzL3RyYW5zYW0uaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5o IgpAQCAtMTg4OCwzNiArMTg4OSwxMSBAQCBYaWRJbk1WQ0NTbmFwc2hvdChUcmFuc2FjdGlv bklkIHhpZCwgTVZDQ1NuYXBzaG90U2hhcmVkIHNuYXBzaG90KQogCX0KIAllbHNlCiAJewot CQkvKgotCQkgKiBJbiByZWNvdmVyeSB3ZSBzdG9yZSBhbGwgeGlkcyBpbiB0aGUgc3VieGlw IGFycmF5IGJlY2F1c2UgaXQgaXMgYnkKLQkJICogZmFyIHRoZSBiaWdnZXIgYXJyYXksIGFu ZCB3ZSBtb3N0bHkgZG9uJ3Qga25vdyB3aGljaCB4aWRzIGFyZQotCQkgKiB0b3AtbGV2ZWwg YW5kIHdoaWNoIGFyZSBzdWJ4YWN0cy4gVGhlIHhpcCBhcnJheSBpcyBlbXB0eS4KLQkJICoK LQkJICogV2Ugc3RhcnQgYnkgc2VhcmNoaW5nIHN1YnRyYW5zLCBpZiB3ZSBvdmVyZmxvd2Vk LgotCQkgKi8KLQkJaWYgKHNuYXBzaG90LT5zdWJvdmVyZmxvd2VkKQotCQl7Ci0JCQkvKgot CQkJICogU25hcHNob3Qgb3ZlcmZsb3dlZCwgc28gY29udmVydCB4aWQgdG8gdG9wLWxldmVs LiAgVGhpcyBpcyBzYWZlCi0JCQkgKiBiZWNhdXNlIHdlIGVsaW1pbmF0ZWQgdG9vLW9sZCBY SURzIGFib3ZlLgotCQkJICovCi0JCQl4aWQgPSBTdWJUcmFuc0dldFRvcG1vc3RUcmFuc2Fj dGlvbih4aWQpOwotCi0JCQkvKgotCQkJICogSWYgeGlkIHdhcyBpbmRlZWQgYSBzdWJ4YWN0 LCB3ZSBtaWdodCBub3cgaGF2ZSBhbiB4aWQgPCB4bWluLAotCQkJICogc28gcmVjaGVjayB0 byBhdm9pZCBhbiBhcnJheSBzY2FuLiAgTm8gcG9pbnQgaW4gcmVjaGVja2luZwotCQkJICog eG1heC4KLQkJCSAqLwotCQkJaWYgKFRyYW5zYWN0aW9uSWRQcmVjZWRlcyh4aWQsIHNuYXBz aG90LT54bWluKSkKLQkJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KKwkJWExvZ1JlY1B0cgljc24g PSBDU05Mb2dHZXRDU05CeVhpZCh4aWQpOwogCi0JCS8qCi0JCSAqIFdlIG5vdyBoYXZlIGVp dGhlciBhIHRvcC1sZXZlbCB4aWQgaGlnaGVyIHRoYW4geG1pbiBvciBhbgotCQkgKiBpbmRl dGVybWluYXRlIHhpZC4gV2UgZG9uJ3Qga25vdyB3aGV0aGVyIGl0J3MgdG9wIGxldmVsIG9y IHN1YnhhY3QKLQkJICogYnV0IGl0IGRvZXNuJ3QgbWF0dGVyLiBJZiBpdCdzIHByZXNlbnQs IHRoZSB4aWQgaXMgdmlzaWJsZS4KLQkJICovCi0JCWlmIChwZ19sZmluZDMyKHhpZCwgc25h cHNob3QtPnN1YnhpcCwgc25hcHNob3QtPnN1YnhjbnQpKQorCQlpZiAoY3NuICE9IEludmFs aWRYTG9nUmVjUHRyICYmIGNzbiA8PSBzbmFwc2hvdC0+c25hcHNob3RDc24pCisJCQlyZXR1 cm4gZmFsc2U7CisJCWVsc2UKIAkJCXJldHVybiB0cnVlOwogCX0KIApkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9pbml0ZGIvaW5pdGRiLmMgYi9zcmMvYmluL2luaXRkYi9pbml0ZGIuYwppbmRl eCBjMTdmZGEyYmM4MS4uZjUyODE3ZTIxOGYgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vaW5pdGRi L2luaXRkYi5jCisrKyBiL3NyYy9iaW4vaW5pdGRiL2luaXRkYi5jCkBAIC0yNTEsNyArMjUx LDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHN1YmRpcnNbXSA9IHsKIAkicGdfeGFj dCIsCiAJInBnX2xvZ2ljYWwiLAogCSJwZ19sb2dpY2FsL3NuYXBzaG90cyIsCi0JInBnX2xv Z2ljYWwvbWFwcGluZ3MiCisJInBnX2xvZ2ljYWwvbWFwcGluZ3MiLAorCSJwZ19jc24iCiB9 OwogCiAKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmV3aW5kL2ZpbGVtYXAuYyBiL3NyYy9i aW4vcGdfcmV3aW5kL2ZpbGVtYXAuYwppbmRleCBhMjhkMTY2N2Q0Yy4uNjRmZGQxMzkxNzMg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfcmV3aW5kL2ZpbGVtYXAuYworKysgYi9zcmMvYmlu L3BnX3Jld2luZC9maWxlbWFwLmMKQEAgLTE0Niw2ICsxNDYsOSBAQCBzdGF0aWMgY29uc3Qg Y2hhciAqY29uc3QgZXhjbHVkZURpckNvbnRlbnRzW10gPQogCS8qIENvbnRlbnRzIHplcm9l ZCBvbiBzdGFydHVwLCBzZWUgU3RhcnR1cFNVQlRSQU5TKCkuICovCiAJInBnX3N1YnRyYW5z IiwKIAorCS8qIENvbnRlbnRzIHplcm9lZCBvbiBzdGFydHVwLCBzZWUgU3RhcnR1cENTTkxv ZygpLiAqLworCSJwZ19jc24iLAorCiAJLyogZW5kIG9mIGxpc3QgKi8KIAlOVUxMCiB9Owpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2Nzbl9sb2cuaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9jc25fbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmY4Y2RmNTczYWVmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2Nzbl9sb2cuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogY3NuX2xvZy5oCisgKgorICog TWFwcGluZyBmcm9tIFhJRCB0byBjb21taXQgcmVjb3JkJ3MgTFNOIChDb21taXQgU2VxdWVu Y2UgTnVtYmVyKS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAxNCwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHly aWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICogc3JjL2luY2x1ZGUvYWNjZXNzL2Nzbl9sb2cuaAorICovCisjaWZuZGVmIENT TkxPR19ICisjZGVmaW5lIENTTkxPR19ICisKKyNpbmNsdWRlICJhY2Nlc3MveGxvZy5oIgor I2luY2x1ZGUgInV0aWxzL3NuYXBzaG90LmgiCisKK2V4dGVybiB2b2lkIENTTkxvZ1NldENT TihUcmFuc2FjdGlvbklkIHhpZCwgaW50IG5zdWJ4aWRzLAorCQkJCQkJIFRyYW5zYWN0aW9u SWQgKnN1YnhpZHMsIFhMb2dSZWNQdHIgY3NuKTsKK2V4dGVybiBYTG9nUmVjUHRyIENTTkxv Z0dldENTTkJ5WGlkKFRyYW5zYWN0aW9uSWQgeGlkKTsKKworZXh0ZXJuIFNpemUgQ1NOTG9n U2htZW1TaXplKHZvaWQpOworZXh0ZXJuIHZvaWQgQ1NOTG9nU2htZW1Jbml0KHZvaWQpOwor ZXh0ZXJuIHZvaWQgQm9vdFN0cmFwQ1NOTG9nKHZvaWQpOworZXh0ZXJuIHZvaWQgU3RhcnR1 cENTTkxvZyhUcmFuc2FjdGlvbklkIG9sZGVzdEFjdGl2ZVhJRCwgWExvZ1JlY1B0ciBjc24p OworZXh0ZXJuIHZvaWQgU2h1dGRvd25DU05Mb2codm9pZCk7CitleHRlcm4gdm9pZCBDaGVj a1BvaW50Q1NOTG9nKHZvaWQpOworZXh0ZXJuIHZvaWQgRXh0ZW5kQ1NOTG9nKFRyYW5zYWN0 aW9uSWQgbmV3ZXN0WGFjdCk7CitleHRlcm4gdm9pZCBUcnVuY2F0ZUNTTkxvZyhUcmFuc2Fj dGlvbklkIG9sZGVzdFhhY3QpOworCisjZW5kaWYJCQkJCQkJLyogQ1NOTE9HX0ggKi8KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90cmFuc2FtLmggYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvdHJhbnNhbS5oCmluZGV4IGU3MWM2NjAxMThlLi43NjQxMWNjYTE3OCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RyYW5zYW0uaAorKysgYi9zcmMvaW5jbHVkZS9h Y2Nlc3MvdHJhbnNhbS5oCkBAIC0yMzgsNiArMjM4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgVHJh bnNhbVZhcmlhYmxlc0RhdGEKIAlGdWxsVHJhbnNhY3Rpb25JZCBsYXRlc3RDb21wbGV0ZWRY aWQ7CS8qIG5ld2VzdCBmdWxsIFhJRCB0aGF0IGhhcwogCQkJCQkJCQkJCQkgKiBjb21taXR0 ZWQgb3IgYWJvcnRlZCAqLwogCisJLyogRHVyaW5nIHJlY292ZXJ5LCBMU04gb2YgbGF0ZXN0 IHJlcGxheWVkIGNvbW1pdCByZWNvcmQgKi8KKwlYTG9nUmVjUHRyCWxhdGVzdENvbW1pdExT TjsKKwogCS8qCiAJICogTnVtYmVyIG9mIHRvcC1sZXZlbCB0cmFuc2FjdGlvbnMgd2l0aCB4 aWRzIChpLmUuIHdoaWNoIG1heSBoYXZlCiAJICogbW9kaWZpZWQgdGhlIGRhdGFiYXNlKSB0 aGF0IGNvbXBsZXRlZCBpbiBzb21lIGZvcm0gc2luY2UgdGhlIHN0YXJ0IG9mCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdHdvcGhhc2UuaCBiL3NyYy9pbmNsdWRlL2FjY2Vz cy90d29waGFzZS5oCmluZGV4IDlmYTgyMzU1MDMzLi45NTI3Njk1ODg2ZiAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3R3b3BoYXNlLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3R3b3BoYXNlLmgKQEAgLTQ3LDggKzQ3LDcgQEAgZXh0ZXJuIHZvaWQgU3RhcnRQcmVw YXJlKEdsb2JhbFRyYW5zYWN0aW9uIGd4YWN0KTsKIGV4dGVybiB2b2lkIEVuZFByZXBhcmUo R2xvYmFsVHJhbnNhY3Rpb24gZ3hhY3QpOwogZXh0ZXJuIGJvb2wgU3RhbmRieVRyYW5zYWN0 aW9uSWRJc1ByZXBhcmVkKFRyYW5zYWN0aW9uSWQgeGlkKTsKIAotZXh0ZXJuIFRyYW5zYWN0 aW9uSWQgUHJlc2NhblByZXBhcmVkVHJhbnNhY3Rpb25zKFRyYW5zYWN0aW9uSWQgKip4aWRz X3AsCi0JCQkJCQkJCQkJCQkgaW50ICpueGlkc19wKTsKK2V4dGVybiBUcmFuc2FjdGlvbklk IFByZXNjYW5QcmVwYXJlZFRyYW5zYWN0aW9ucyh2b2lkKTsKIGV4dGVybiB2b2lkIFN0YW5k YnlSZWNvdmVyUHJlcGFyZWRUcmFuc2FjdGlvbnModm9pZCk7CiBleHRlcm4gdm9pZCBSZWNv dmVyUHJlcGFyZWRUcmFuc2FjdGlvbnModm9pZCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2FjY2Vzcy94YWN0LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGFjdC5oCmluZGV4IGIy YmMxMGVlMDQxLi5iMzE5NDRkMGU2YyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNz L3hhY3QuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGFjdC5oCkBAIC0xNzEsNyArMTcx LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgU2F2ZWRUcmFuc2FjdGlvbkNoYXJhY3RlcmlzdGljcwog I2RlZmluZSBYTE9HX1hBQ1RfQUJPUlQJCQkJMHgyMAogI2RlZmluZSBYTE9HX1hBQ1RfQ09N TUlUX1BSRVBBUkVECTB4MzAKICNkZWZpbmUgWExPR19YQUNUX0FCT1JUX1BSRVBBUkVECTB4 NDAKLSNkZWZpbmUgWExPR19YQUNUX0FTU0lHTk1FTlQJCTB4NTAKKy8qIDB4NTAgaXMgdW51 c2VkLCB3YXMgWExPR19YQUNUX0FTU0lHTk1FTlQgKi8KICNkZWZpbmUgWExPR19YQUNUX0lO VkFMSURBVElPTlMJCTB4NjAKIC8qIGZyZWUgb3Bjb2RlIDB4NzAgKi8KIApAQCAtMjE1LDE1 ICsyMTUsNiBAQCB0eXBlZGVmIHN0cnVjdCBTYXZlZFRyYW5zYWN0aW9uQ2hhcmFjdGVyaXN0 aWNzCiAjZGVmaW5lIFhhY3RDb21wbGV0aW9uRm9yY2VTeW5jQ29tbWl0KHhpbmZvKSBcCiAJ KCh4aW5mbyAmIFhBQ1RfQ09NUExFVElPTl9GT1JDRV9TWU5DX0NPTU1JVCkgIT0gMCkKIAot dHlwZWRlZiBzdHJ1Y3QgeGxfeGFjdF9hc3NpZ25tZW50Ci17Ci0JVHJhbnNhY3Rpb25JZCB4 dG9wOwkJCS8qIGFzc2lnbmVkIFhJRCdzIHRvcC1sZXZlbCBYSUQgKi8KLQlpbnQJCQluc3Vi eGFjdHM7CQkvKiBudW1iZXIgb2Ygc3VidHJhbnNhY3Rpb24gWElEcyAqLwotCVRyYW5zYWN0 aW9uSWQgeHN1YltGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwkvKiBhc3NpZ25lZCBzdWJ4aWRz ICovCi19IHhsX3hhY3RfYXNzaWdubWVudDsKLQotI2RlZmluZSBNaW5TaXplT2ZYYWN0QXNz aWdubWVudCBvZmZzZXRvZih4bF94YWN0X2Fzc2lnbm1lbnQsIHhzdWIpCi0KIC8qCiAgKiBD b21taXQgYW5kIGFib3J0IHJlY29yZHMgY2FuIGNvbnRhaW4gYSBsb3Qgb2YgaW5mb3JtYXRp b24uIEJ1dCBhIGxhcmdlCiAgKiBwb3J0aW9uIG9mIHRoZSByZWNvcmRzIHdvbid0IG5lZWQg YWxsIHBvc3NpYmxlIHBpZWNlcyBvZiBpbmZvcm1hdGlvbi4gU28gd2UKQEAgLTQ0OCw3ICs0 MzksNiBAQCBleHRlcm4gRnVsbFRyYW5zYWN0aW9uSWQgR2V0VG9wRnVsbFRyYW5zYWN0aW9u SWQodm9pZCk7CiBleHRlcm4gRnVsbFRyYW5zYWN0aW9uSWQgR2V0VG9wRnVsbFRyYW5zYWN0 aW9uSWRJZkFueSh2b2lkKTsKIGV4dGVybiBGdWxsVHJhbnNhY3Rpb25JZCBHZXRDdXJyZW50 RnVsbFRyYW5zYWN0aW9uSWQodm9pZCk7CiBleHRlcm4gRnVsbFRyYW5zYWN0aW9uSWQgR2V0 Q3VycmVudEZ1bGxUcmFuc2FjdGlvbklkSWZBbnkodm9pZCk7Ci1leHRlcm4gdm9pZCBNYXJr Q3VycmVudFRyYW5zYWN0aW9uSWRMb2dnZWRJZkFueSh2b2lkKTsKIGV4dGVybiBib29sIFN1 YlRyYW5zYWN0aW9uSXNBY3RpdmUoU3ViVHJhbnNhY3Rpb25JZCBzdWJ4aWQpOwogZXh0ZXJu IENvbW1hbmRJZCBHZXRDdXJyZW50Q29tbWFuZElkKGJvb2wgdXNlZCk7CiBleHRlcm4gdm9p ZCBTZXRQYXJhbGxlbFN0YXJ0VGltZXN0YW1wcyhUaW1lc3RhbXBUeiB4YWN0X3RzLCBUaW1l c3RhbXBUeiBzdG10X3RzKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9n dXRpbHMuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ndXRpbHMuaAppbmRleCBhMTg3MGQ4 ZTVhYS4uMmFiMjBmY2FlMmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9n dXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3V0aWxzLmgKQEAgLTI3LDM3 ICsyNywxMCBAQCBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBpZ25vcmVfaW52YWxpZF9wYWdl czsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIEluUmVjb3Zlcnk7CiAKIC8qCi0gKiBMaWtl IEluUmVjb3ZlcnksIHN0YW5kYnlTdGF0ZSBpcyBvbmx5IHZhbGlkIGluIHRoZSBzdGFydHVw IHByb2Nlc3MuCi0gKiBJbiBhbGwgb3RoZXIgcHJvY2Vzc2VzIGl0IHdpbGwgaGF2ZSB0aGUg dmFsdWUgU1RBTkRCWV9ESVNBQkxFRCAoc28KLSAqIEluSG90U3RhbmRieSB3aWxsIHJlYWQg YXMgZmFsc2UpLgotICoKLSAqIEluIERJU0FCTEVEIHN0YXRlLCB3ZSdyZSBwZXJmb3JtaW5n IGNyYXNoIHJlY292ZXJ5IG9yIGhvdCBzdGFuZGJ5IHdhcwotICogZGlzYWJsZWQgaW4gcG9z dGdyZXNxbC5jb25mLgotICoKLSAqIEluIElOSVRJQUxJWkVEIHN0YXRlLCB3ZSd2ZSBydW4g SW5pdFJlY292ZXJ5VHJhbnNhY3Rpb25FbnZpcm9ubWVudCwgYnV0Ci0gKiB3ZSBoYXZlbid0 IHlldCBwcm9jZXNzZWQgYSBSVU5OSU5HX1hBQ1RTIG9yIHNodXRkb3duLWNoZWNrcG9pbnQg V0FMIHJlY29yZAotICogdG8gaW5pdGlhbGl6ZSBvdXIgcHJpbWFyeS10cmFuc2FjdGlvbiB0 cmFja2luZyBzeXN0ZW0uCi0gKgotICogV2hlbiB0aGUgdHJhbnNhY3Rpb24gdHJhY2tpbmcg aXMgaW5pdGlhbGl6ZWQsIHdlIGVudGVyIHRoZSBTTkFQU0hPVF9QRU5ESU5HCi0gKiBzdGF0 ZS4gVGhlIHRyYWNrZWQgaW5mb3JtYXRpb24gbWlnaHQgc3RpbGwgYmUgaW5jb21wbGV0ZSwg c28gd2UgY2FuJ3QgYWxsb3cKLSAqIGNvbm5lY3Rpb25zIHlldCwgYnV0IHJlZG8gZnVuY3Rp b25zIG11c3QgdXBkYXRlIHRoZSBpbi1tZW1vcnkgc3RhdGUgd2hlbgotICogYXBwcm9wcmlh dGUuCi0gKgotICogSW4gU05BUFNIT1RfUkVBRFkgbW9kZSwgd2UgaGF2ZSBmdWxsIGtub3ds ZWRnZSBvZiB0cmFuc2FjdGlvbnMgdGhhdCBhcmUKLSAqIChvciB3ZXJlKSBydW5uaW5nIG9u IHRoZSBwcmltYXJ5IGF0IHRoZSBjdXJyZW50IFdBTCBsb2NhdGlvbi4gU25hcHNob3RzCi0g KiBjYW4gYmUgdGFrZW4sIGFuZCByZWFkLW9ubHkgcXVlcmllcyBjYW4gYmUgcnVuLgorICog TGlrZSBJblJlY292ZXJ5LCBJbkhvdFN0YW5kYnkgaXMgb25seSB2YWxpZCBpbiB0aGUgc3Rh cnR1cCBwcm9jZXNzLgorICogSW4gYWxsIG90aGVyIHByb2Nlc3NlcyBpdCB3aWxsIGJlIGZh bHNlLgogICovCi10eXBlZGVmIGVudW0KLXsKLQlTVEFOREJZX0RJU0FCTEVELAotCVNUQU5E QllfSU5JVElBTElaRUQsCi0JU1RBTkRCWV9TTkFQU0hPVF9QRU5ESU5HLAotCVNUQU5EQllf U05BUFNIT1RfUkVBRFksCi19IEhvdFN0YW5kYnlTdGF0ZTsKLQotZXh0ZXJuIFBHRExMSU1Q T1JUIEhvdFN0YW5kYnlTdGF0ZSBzdGFuZGJ5U3RhdGU7Ci0KLSNkZWZpbmUgSW5Ib3RTdGFu ZGJ5IChzdGFuZGJ5U3RhdGUgPj0gU1RBTkRCWV9TTkFQU0hPVF9QRU5ESU5HKQorZXh0ZXJu IFBHRExMSU1QT1JUIGJvb2wgSW5Ib3RTdGFuZGJ5OwogCiAKIGV4dGVybiBib29sIFhMb2dI YXZlSW52YWxpZFBhZ2VzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9sd2xvY2suaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrLmgKaW5kZXggNGRmMWQy NWMwNDUuLjQ1N2M1NTExYzVlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2x3 bG9jay5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbHdsb2NrLmgKQEAgLTE4MSw2ICsx ODEsNyBAQCB0eXBlZGVmIGVudW0gQnVpbHRpblRyYW5jaGVJZHMKIAlMV1RSQU5DSEVfWEFD VF9CVUZGRVIgPSBOVU1fSU5ESVZJRFVBTF9MV0xPQ0tTLAogCUxXVFJBTkNIRV9DT01NSVRU U19CVUZGRVIsCiAJTFdUUkFOQ0hFX1NVQlRSQU5TX0JVRkZFUiwKKwlMV1RSQU5DSEVfQ1NO X0xPR19CVUZGRVIsCiAJTFdUUkFOQ0hFX01VTFRJWEFDVE9GRlNFVF9CVUZGRVIsCiAJTFdU UkFOQ0hFX01VTFRJWEFDVE1FTUJFUl9CVUZGRVIsCiAJTFdUUkFOQ0hFX05PVElGWV9CVUZG RVIsCkBAIC0yMTksNiArMjIwLDcgQEAgdHlwZWRlZiBlbnVtIEJ1aWx0aW5UcmFuY2hlSWRz CiAJTFdUUkFOQ0hFX1hBQ1RfU0xSVSwKIAlMV1RSQU5DSEVfUEFSQUxMRUxfVkFDVVVNX0RT QSwKIAlMV1RSQU5DSEVfQUlPX1VSSU5HX0NPTVBMRVRJT04sCisJTFdUUkFOQ0hFX0NTTl9M T0dfU0xSVSwKIAlMV1RSQU5DSEVfRklSU1RfVVNFUl9ERUZJTkVELAogfQkJCUJ1aWx0aW5U cmFuY2hlSWRzOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NhcnJh eS5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaAppbmRleCA4ZWVkYzJkNmI5 Zi4uNTcwNzFkMWUwZjQgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY2Fy cmF5LmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jYXJyYXkuaApAQCAtMjgsMTgg KzI4LDExIEBAIGV4dGVybiB2b2lkIFByb2NBcnJheVJlbW92ZShQR1BST0MgKnByb2MsIFRy YW5zYWN0aW9uSWQgbGF0ZXN0WGlkKTsKIGV4dGVybiB2b2lkIFByb2NBcnJheUVuZFRyYW5z YWN0aW9uKFBHUFJPQyAqcHJvYywgVHJhbnNhY3Rpb25JZCBsYXRlc3RYaWQpOwogZXh0ZXJu IHZvaWQgUHJvY0FycmF5Q2xlYXJUcmFuc2FjdGlvbihQR1BST0MgKnByb2MpOwogCitleHRl cm4gdm9pZCBQcm9jQXJyYXlVcGRhdGVPbGRlc3RSdW5uaW5nWGlkKFRyYW5zYWN0aW9uSWQg b2xkZXN0UnVubmluZ1hJRCk7CiBleHRlcm4gdm9pZCBQcm9jQXJyYXlJbml0UmVjb3Zlcnko VHJhbnNhY3Rpb25JZCBpbml0aWFsaXplZFVwdG9YSUQpOwotZXh0ZXJuIHZvaWQgUHJvY0Fy cmF5QXBwbHlSZWNvdmVyeUluZm8oUnVubmluZ1RyYW5zYWN0aW9ucyBydW5uaW5nKTsKLWV4 dGVybiB2b2lkIFByb2NBcnJheUFwcGx5WGlkQXNzaWdubWVudChUcmFuc2FjdGlvbklkIHRv cHhpZCwKLQkJCQkJCQkJCQlpbnQgbnN1YnhpZHMsIFRyYW5zYWN0aW9uSWQgKnN1YnhpZHMp OwogCiBleHRlcm4gdm9pZCBSZWNvcmRLbm93bkFzc2lnbmVkVHJhbnNhY3Rpb25JZHMoVHJh bnNhY3Rpb25JZCB4aWQpOwotZXh0ZXJuIHZvaWQgRXhwaXJlVHJlZUtub3duQXNzaWduZWRU cmFuc2FjdGlvbklkcyhUcmFuc2FjdGlvbklkIHhpZCwKLQkJCQkJCQkJCQkJCSAgaW50IG5z dWJ4aWRzLCBUcmFuc2FjdGlvbklkICpzdWJ4aWRzLAotCQkJCQkJCQkJCQkJICBUcmFuc2Fj dGlvbklkIG1heF94aWQpOwotZXh0ZXJuIHZvaWQgRXhwaXJlQWxsS25vd25Bc3NpZ25lZFRy YW5zYWN0aW9uSWRzKHZvaWQpOwotZXh0ZXJuIHZvaWQgRXhwaXJlT2xkS25vd25Bc3NpZ25l ZFRyYW5zYWN0aW9uSWRzKFRyYW5zYWN0aW9uSWQgeGlkKTsKLWV4dGVybiB2b2lkIEtub3du QXNzaWduZWRUcmFuc2FjdGlvbklkc0lkbGVNYWludGVuYW5jZSh2b2lkKTsKK2V4dGVybiB2 b2lkIFByb2NBcnJheVJlY292ZXJ5RW5kVHJhbnNhY3Rpb24oVHJhbnNhY3Rpb25JZCBtYXhf eGlkLCBYTG9nUmVjUHRyIGxzbik7CiAKIGV4dGVybiBpbnQJR2V0TWF4U25hcHNob3RYaWRD b3VudCh2b2lkKTsKIGV4dGVybiBpbnQJR2V0TWF4U25hcHNob3RTdWJ4aWRDb3VudCh2b2lk KTsKQEAgLTU2LDcgKzQ5LDcgQEAgZXh0ZXJuIGJvb2wgVHJhbnNhY3Rpb25JZElzSW5Qcm9n cmVzcyhUcmFuc2FjdGlvbklkIHhpZCk7CiBleHRlcm4gYm9vbCBUcmFuc2FjdGlvbklkSXNB Y3RpdmUoVHJhbnNhY3Rpb25JZCB4aWQpOwogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgR2V0T2xk ZXN0Tm9uUmVtb3ZhYmxlVHJhbnNhY3Rpb25JZChSZWxhdGlvbiByZWwpOwogZXh0ZXJuIFRy YW5zYWN0aW9uSWQgR2V0T2xkZXN0VHJhbnNhY3Rpb25JZENvbnNpZGVyZWRSdW5uaW5nKHZv aWQpOwotZXh0ZXJuIFRyYW5zYWN0aW9uSWQgR2V0T2xkZXN0QWN0aXZlVHJhbnNhY3Rpb25J ZCh2b2lkKTsKK2V4dGVybiBUcmFuc2FjdGlvbklkIEdldE9sZGVzdEFjdGl2ZVRyYW5zYWN0 aW9uSWQoYm9vbCBhbGxEYnMpOwogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgR2V0T2xkZXN0U2Fm ZURlY29kaW5nVHJhbnNhY3Rpb25JZChib29sIGNhdGFsb2dPbmx5KTsKIGV4dGVybiB2b2lk IEdldFJlcGxpY2F0aW9uSG9yaXpvbnMoVHJhbnNhY3Rpb25JZCAqeG1pbiwgVHJhbnNhY3Rp b25JZCAqY2F0YWxvZ194bWluKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMv c25hcHNob3QuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3NuYXBzaG90LmgKaW5kZXggMTkzMzY2 Y2UwNTIuLjE0ZmY4MDkwNGM4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9zbmFw c2hvdC5oCisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL3NuYXBzaG90LmgKQEAgLTEzLDYgKzEz LDcgQEAKICNpZm5kZWYgU05BUFNIT1RfSAogI2RlZmluZSBTTkFQU0hPVF9ICiAKKyNpbmNs dWRlICJhY2Nlc3MveGxvZ2RlZnMuaCIKICNpbmNsdWRlICJsaWIvaWxpc3QuaCIKIAogCkBA IC0xODYsNiArMTg3LDEzIEBAIHR5cGVkZWYgc3RydWN0IE1WQ0NTbmFwc2hvdFNoYXJlZERh dGEKIAlpbnQzMgkJc3VieGNudDsJCS8qICMgb2YgeGFjdCBpZHMgaW4gc3VieGlwW10gKi8K IAlib29sCQlzdWJvdmVyZmxvd2VkOwkvKiBoYXMgdGhlIHN1YnhpcCBhcnJheSBvdmVyZmxv d2VkPyAqLwogCisJLyoKKwkgKiBNVkNDIHNuYXBzaG90cyB0YWtlbiBkdXJpbmcgcmVjb3Zl cnkgdXNlIHRoaXMgQ1NOIGluc3RlYWQgb2YgdGhlIHhpcAorCSAqIGFuZCBzdWJ4aXAgYXJy YXlzLiBBbnkgdHJhbnNhY3Rpb25zIHRoYXQgY29tbWl0dGVkIGF0IG9yIGJlZm9yZSB0aGlz CisJICogTFNOIGFyZSBjb25zaWRlcmVkIGFzIHZpc2libGUuCisJICovCisJWExvZ1JlY1B0 cglzbmFwc2hvdENzbjsKKwogCWJvb2wJCXRha2VuRHVyaW5nUmVjb3Zlcnk7CS8qIHJlY292 ZXJ5LXNoYXBlZCBzbmFwc2hvdD8gKi8KIAogCS8qCi0tIAoyLjM5LjUKCg== --------------nSXAXBhgWt0AUd9uE0wCc0X0 Content-Type: text/x-patch; charset=UTF-8; name="v6-0010-Make-SnapBuildWaitSnapshot-work-without-xl_runnin.patch" Content-Disposition: attachment; filename*0="v6-0010-Make-SnapBuildWaitSnapshot-work-without-xl_runnin.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAyNTY1Yjg1NTRlMzIxZThjYTlhODdmMzZhNDhmOWFiN2Y4NmFiMjQ3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMTMgQXVnIDIwMjQgMjA6MDE6MDcgKzAzMDAK U3ViamVjdDogW1BBVENIIHY2IDEwLzEyXSBNYWtlIFNuYXBCdWlsZFdhaXRTbmFwc2hvdCB3 b3JrIHdpdGhvdXQKIHhsX3J1bm5pbmdfeGFjdHMueGlkcyBhcnJheQoKU25hcEJ1aWxkV2Fp dFNuYXBzaG90IGxvb3BlZCB0aHJvdWdoIGFsbCB0aGUgWElEcyBpbiB0aGUKeGxfcnVubmlu Z194YWN0cywgd2FpdGluZyBmb3IgdGhlbSB0byBmaW5pc2guIENoYW5nZSBpdCB0byBncmFi IHRoZQpsaXN0IG9mIHJ1bm5pbmcgWElEcyBmcm9tIHRoZSBwcm9jIGFycmF5IGluc3RlYWQu IFRoaXMgcmVtb3ZlcyB0aGUKbGFzdCB1c2FnZSBvZiB0aGUgWElEcyBhcnJheSBpbiB0aGUg eGxfcnVubmluZ194YWN0cyByZWNvcmQsIGFsbG93aW5nCml0IHRvIGJlIHJlbW92ZWQgaW4g dGhlIG5leHQgY29tbWl0LgoKV2hlbiBTbmFwQnVpbGRXYWl0U25hcHNob3QoKSBpcyBjYWxs ZWQgd2l0aCBydW5uaW5nLT5uZXh0WGlkIGFzIHRoZQonY3V0b2ZmJyBwb2ludCwgdGhlIG5l dyBjb2RlIHNob3VsZCB3YWl0IGZvciBleGFjdGx5IHRoZSBzYW1lIHNldCBvZgp0cmFuc2Fj dGlvbnMgYXMgYmVmb3JlLiBCdXQgd2hlbiBjYWxsZWQgd2l0aCBpbml0aWFsX3htaW5faG9y aXpvbiBhcwp0aGUgJ2N1dG9mZicsIHRoaXMgbWlnaHQgd2FpdCBmb3IgbW9yZSB0cmFuc2Fj dGlvbnMgdGhhbiBiZWZvcmU6IHRob3NlCmJldHdlZW4gcnVubmluZy0+bmV4dFhpZCBhbmQg aW5pdGlhbF94bWluX2hvcml6b24uIEZvciBleGFtcGxlLAppbWFnaW5lIHRoYXQgd2Ugc2Vl IGEgcnVubmluZy14YWN0cyByZWNvcmQgd2l0aCBuZXh0WGlkIDEwMCwgYW5kCmluaXRpYWxf eG1pbl9ob3Jpem9uIGlzIDIwMC4gQmVmb3JlLCB3ZSB3b3VsZCB3YWl0IGZvciBhbGwgWElE cyA8IDEwMAp0byBjb21wbGV0ZSwgYW5kIHRoZW4gbG9nIHRoZSBzdGFuZGJ5IHNuYXBzaG90 IGFuZCBwcm9jZWVkLCBidXQgbm93IHdlCndpbGwgd2FpdCBmb3IgYWxsIFhJRHMgPCAyMDAu IEkgYmVsaWV2ZSB0aGF0J3MgYSBnb29kIHRoaW5nLCBiZWNhdXNlCndlIHdvbid0IGFjdHVh bGx5IGJlIGFibGUgdG8gbW92ZSB0byB0aGUgbmV4dCBzdGF0ZSBpbiB0aGUgc25hcHNob3QK YnVpbGRpbmcgdW50aWwgYWxsIHRyYW5zYWN0aW9ucyA8IDIwMCBoYXZlIGNvbXBsZXRlZC4g VGhlCnJ1bm5pbmcteGFjdHMgc25hcHNob3QgdGhhdCB3ZSBsb2dnZWQgYWZ0ZXIgd2FpdGlu ZyB1cCB0byBYSUQgMTAwCndvdWxkIG5vdCBiZSB1c2VmdWwgdG8gdXMgZWl0aGVyLCBpZiB0 aGVyZSBhcmUgc3RpbGwgWElEcyBiZXR3ZWVuIDEwMAphbmQgMjAwIHJ1bm5pbmcuCgpTbmFw QnVpbGRXYWl0U25hcHNob3QoKSB1c2VkIHRvIGRvIHVzZWxlc3Mgd29yayB3aGVuIGNhbGxl ZCBpbiBhCnN0YW5kYnksIGJlY2F1c2UgaW4gYSBzdGFuZGJ5LCB0aGVyZSBhcmUgbm8gWElE IGxvY2tzIGFuZCB0aGUKWGFjdExvY2tUYWJsZVdhaXQoKSBjYWxscyByZXR1cm5lZCBpbW1l ZGlhdGVseSwgZXZlbiBpZiB0aGUgWElEcyB3ZXJlCmluIGZhY3Qgc3RpbGwgcnVubmluZyBp biB0aGUgcHJpbWFyeS4gQnV0IGFzIHRoZSBjb21tZW50IHNheXMsIHRoZQp3YWl0aW5nIGlz bid0IG5lY2Vzc2FyeSBmb3IgY29ycmVjdG5lc3MsIHNvIHRoYXQgd2FzIGhhcm1sZXNzLiBJ biBhbnkKY2FzZSwgc3RvcCBkb2luZyB0aGUgZnV0aWxlIHdvcmsgb24gYSBzdGFuZGJ5Lgot LS0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMgfCA1MCAr KysrKysrKysrKysrKy0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzNCBpbnNlcnRpb25zKCsp LCAxNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlv bi9sb2dpY2FsL3NuYXBidWlsZC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9zbmFwYnVpbGQuYwppbmRleCA5N2QyNzgwNTJkZi4uMjUyNTI2ZWNmOTEgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMKKysrIGIv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYwpAQCAtMTY0LDcg KzE2NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBTbmFwQnVpbGRYaWRIYXNDYXRhbG9nQ2hh bmdlcyhTbmFwQnVpbGQgKmJ1aWxkZXIsIFRyYW5zYWN0aW9uCiAKIC8qIHhsb2cgcmVhZGlu ZyBoZWxwZXIgZnVuY3Rpb25zIGZvciBTbmFwQnVpbGRQcm9jZXNzUnVubmluZ1hhY3RzICov CiBzdGF0aWMgYm9vbCBTbmFwQnVpbGRGaW5kU25hcHNob3QoU25hcEJ1aWxkICpidWlsZGVy LCBYTG9nUmVjUHRyIGxzbiwgeGxfcnVubmluZ194YWN0cyAqcnVubmluZyk7Ci1zdGF0aWMg dm9pZCBTbmFwQnVpbGRXYWl0U25hcHNob3QoeGxfcnVubmluZ194YWN0cyAqcnVubmluZywg VHJhbnNhY3Rpb25JZCBjdXRvZmYpOworc3RhdGljIHZvaWQgU25hcEJ1aWxkV2FpdFNuYXBz aG90KFRyYW5zYWN0aW9uSWQgY3V0b2ZmKTsKIAogLyogc2VyaWFsaXphdGlvbiBmdW5jdGlv bnMgKi8KIHN0YXRpYyB2b2lkIFNuYXBCdWlsZFNlcmlhbGl6ZShTbmFwQnVpbGQgKmJ1aWxk ZXIsIFhMb2dSZWNQdHIgbHNuKTsKQEAgLTExOTIsMTQgKzExOTIsMTcgQEAgU25hcEJ1aWxk RmluZFNuYXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBsc24sIHhsX3J1 bm5pbmdfeGFjdHMgKnJ1bm4KIAkJTm9ybWFsVHJhbnNhY3Rpb25JZFByZWNlZGVzKHJ1bm5p bmctPm9sZGVzdFJ1bm5pbmdYaWQsCiAJCQkJCQkJCQlidWlsZGVyLT5pbml0aWFsX3htaW5f aG9yaXpvbikpCiAJeworCQlUcmFuc2FjdGlvbklkIGN1dG9mZjsKKwogCQllcmVwb3J0KERF QlVHMSwKIAkJCQkoZXJybXNnX2ludGVybmFsKCJza2lwcGluZyBzbmFwc2hvdCBhdCAlWC8l WCB3aGlsZSBidWlsZGluZyBsb2dpY2FsIGRlY29kaW5nIHNuYXBzaG90LCB4bWluIGhvcml6 b24gdG9vIGxvdyIsCiAJCQkJCQkJCSBMU05fRk9STUFUX0FSR1MobHNuKSksCiAJCQkJIGVy cmRldGFpbF9pbnRlcm5hbCgiaW5pdGlhbCB4bWluIGhvcml6b24gb2YgJXUgdnMgdGhlIHNu YXBzaG90J3MgJXUiLAogCQkJCQkJCQkJYnVpbGRlci0+aW5pdGlhbF94bWluX2hvcml6b24s IHJ1bm5pbmctPm9sZGVzdFJ1bm5pbmdYaWQpKSk7CiAKLQotCQlTbmFwQnVpbGRXYWl0U25h cHNob3QocnVubmluZywgYnVpbGRlci0+aW5pdGlhbF94bWluX2hvcml6b24pOworCQljdXRv ZmYgPSBidWlsZGVyLT5pbml0aWFsX3htaW5faG9yaXpvbjsKKwkJVHJhbnNhY3Rpb25JZFJl dHJlYXQoY3V0b2ZmKTsKKwkJU25hcEJ1aWxkV2FpdFNuYXBzaG90KGN1dG9mZik7CiAKIAkJ cmV0dXJuIHRydWU7CiAJfQpAQCAtMTI4Niw3ICsxMjg5LDcgQEAgU25hcEJ1aWxkRmluZFNu YXBzaG90KFNuYXBCdWlsZCAqYnVpbGRlciwgWExvZ1JlY1B0ciBsc24sIHhsX3J1bm5pbmdf eGFjdHMgKnJ1bm4KIAkJCQkgZXJyZGV0YWlsKCJXYWl0aW5nIGZvciB0cmFuc2FjdGlvbnMg KGFwcHJveGltYXRlbHkgJWQpIG9sZGVyIHRoYW4gJXUgdG8gZW5kLiIsCiAJCQkJCQkgICBy dW5uaW5nLT54Y250LCBydW5uaW5nLT5uZXh0WGlkKSkpOwogCi0JCVNuYXBCdWlsZFdhaXRT bmFwc2hvdChydW5uaW5nLCBydW5uaW5nLT5uZXh0WGlkKTsKKwkJU25hcEJ1aWxkV2FpdFNu YXBzaG90KHJ1bm5pbmctPm5leHRYaWQpOwogCX0KIAogCS8qCkBAIC0xMzEwLDcgKzEzMTMs NyBAQCBTbmFwQnVpbGRGaW5kU25hcHNob3QoU25hcEJ1aWxkICpidWlsZGVyLCBYTG9nUmVj UHRyIGxzbiwgeGxfcnVubmluZ194YWN0cyAqcnVubgogCQkJCSBlcnJkZXRhaWwoIldhaXRp bmcgZm9yIHRyYW5zYWN0aW9ucyAoYXBwcm94aW1hdGVseSAlZCkgb2xkZXIgdGhhbiAldSB0 byBlbmQuIiwKIAkJCQkJCSAgIHJ1bm5pbmctPnhjbnQsIHJ1bm5pbmctPm5leHRYaWQpKSk7 CiAKLQkJU25hcEJ1aWxkV2FpdFNuYXBzaG90KHJ1bm5pbmcsIHJ1bm5pbmctPm5leHRYaWQp OworCQlTbmFwQnVpbGRXYWl0U25hcHNob3QocnVubmluZy0+bmV4dFhpZCk7CiAJfQogCiAJ LyoKQEAgLTEzNDMsOCArMTM0Niw4IEBAIFNuYXBCdWlsZEZpbmRTbmFwc2hvdChTbmFwQnVp bGQgKmJ1aWxkZXIsIFhMb2dSZWNQdHIgbHNuLCB4bF9ydW5uaW5nX3hhY3RzICpydW5uCiB9 CiAKIC8qIC0tLQotICogSXRlcmF0ZSB0aHJvdWdoIHhpZHMgaW4gcmVjb3JkLCB3YWl0IGZv ciBhbGwgb2xkZXIgdGhhbiB0aGUgY3V0b2ZmIHRvCi0gKiBmaW5pc2guICBUaGVuLCBpZiBw b3NzaWJsZSwgbG9nIGEgbmV3IHhsX3J1bm5pbmdfeGFjdHMgcmVjb3JkLgorICogV2FpdCBm b3IgYWxsIHRyYW5zYWN0aW9ucyBvbGRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSBjdXRvZmYg dG8gZmluaXNoLgorICogVGhlbiwgaWYgcG9zc2libGUsIGxvZyBhIG5ldyB4bF9ydW5uaW5n X3hhY3RzIHJlY29yZC4KICAqCiAgKiBUaGlzIGlzbid0IHJlcXVpcmVkIGZvciB0aGUgY29y cmVjdG5lc3Mgb2YgZGVjb2RpbmcsIGJ1dCB0bzoKICAqIGEpIGFsbG93IGlzb2xhdGlvbnRl c3RlciB0byBub3RpY2UgdGhhdCB3ZSdyZSBjdXJyZW50bHkgd2FpdGluZyBmb3IKQEAgLTEz NTQsMTMgKzEzNTcsMzEgQEAgU25hcEJ1aWxkRmluZFNuYXBzaG90KFNuYXBCdWlsZCAqYnVp bGRlciwgWExvZ1JlY1B0ciBsc24sIHhsX3J1bm5pbmdfeGFjdHMgKnJ1bm4KICAqIC0tLQog ICovCiBzdGF0aWMgdm9pZAotU25hcEJ1aWxkV2FpdFNuYXBzaG90KHhsX3J1bm5pbmdfeGFj dHMgKnJ1bm5pbmcsIFRyYW5zYWN0aW9uSWQgY3V0b2ZmKQorU25hcEJ1aWxkV2FpdFNuYXBz aG90KFRyYW5zYWN0aW9uSWQgY3V0b2ZmKQogewotCWludAkJCW9mZjsKKwlSdW5uaW5nVHJh bnNhY3Rpb25zIHJ1bm5pbmc7CisKKwlpZiAoUmVjb3ZlcnlJblByb2dyZXNzKCkpCisJewor CQkvKgorCQkgKiBEdXJpbmcgcmVjb3ZlcnksIHdlIGhhdmUgbm8gbWVjaGFuaXNtIGZvciB3 YWl0aW5nIGZvciBhbiBYSUQgdG8KKwkJICogZmluaXNoLCBhbmQgd2UgY2Fubm90IGNyZWF0 ZSBuZXcgcnVubmluZy14YWN0cyByZWNvcmRzIGVpdGhlci4KKwkJICovCisJCXJldHVybjsK Kwl9CisKKwlydW5uaW5nID0gR2V0UnVubmluZ1RyYW5zYWN0aW9uRGF0YSgpOworCisJLyoK KwkgKiBHZXRSdW5uaW5nVHJhbnNhY3Rpb25EYXRhIHJldHVybnMgd2l0aCBYaWRHZW5Mb2Nr IGFuZCBQcm9jQXJyYXlMb2NrCisJICogaGVsZCwgYnV0IHdlIGRvbid0IG5lZWQgdGhlbS4K KwkgKi8KKwlMV0xvY2tSZWxlYXNlKFhpZEdlbkxvY2spOworCUxXTG9ja1JlbGVhc2UoUHJv Y0FycmF5TG9jayk7CiAKLQlmb3IgKG9mZiA9IDA7IG9mZiA8IHJ1bm5pbmctPnhjbnQ7IG9m ZisrKQorCWZvciAoaW50IGkgPSAwOyBpIDwgcnVubmluZy0+eGNudDsgaSsrKQogCXsKLQkJ VHJhbnNhY3Rpb25JZCB4aWQgPSBydW5uaW5nLT54aWRzW29mZl07CisJCVRyYW5zYWN0aW9u SWQgeGlkID0gcnVubmluZy0+eGlkc1tpXTsKIAogCQkvKgogCQkgKiBVcHBlciBsYXllcnMg c2hvdWxkIHByZXZlbnQgdGhhdCB3ZSBldmVyIG5lZWQgdG8gd2FpdCBvbiBvdXJzZWx2ZXMu CkBAIC0xMzcwLDcgKzEzOTEsNyBAQCBTbmFwQnVpbGRXYWl0U25hcHNob3QoeGxfcnVubmlu Z194YWN0cyAqcnVubmluZywgVHJhbnNhY3Rpb25JZCBjdXRvZmYpCiAJCWlmIChUcmFuc2Fj dGlvbklkSXNDdXJyZW50VHJhbnNhY3Rpb25JZCh4aWQpKQogCQkJZWxvZyhFUlJPUiwgIndh aXRpbmcgZm9yIG91cnNlbHZlcyIpOwogCi0JCWlmIChUcmFuc2FjdGlvbklkRm9sbG93cyh4 aWQsIGN1dG9mZikpCisJCWlmIChUcmFuc2FjdGlvbklkRm9sbG93c09yRXF1YWxzKHhpZCwg Y3V0b2ZmKSkKIAkJCWNvbnRpbnVlOwogCiAJCVhhY3RMb2NrVGFibGVXYWl0KHhpZCwgTlVM TCwgTlVMTCwgWExUV19Ob25lKTsKQEAgLTEzODIsMTAgKzE0MDMsNyBAQCBTbmFwQnVpbGRX YWl0U25hcHNob3QoeGxfcnVubmluZ194YWN0cyAqcnVubmluZywgVHJhbnNhY3Rpb25JZCBj dXRvZmYpCiAJICogd2FpdCBmb3IgYmd3cml0ZXIgb3IgY2hlY2twb2ludGVyIHRvIGxvZyBv bmUuICBEdXJpbmcgcmVjb3Zlcnkgd2UgY2FuJ3QKIAkgKiBlbmZvcmNlIHRoYXQsIHNvIHdl J2xsIGhhdmUgdG8gd2FpdC4KIAkgKi8KLQlpZiAoIVJlY292ZXJ5SW5Qcm9ncmVzcygpKQot CXsKLQkJTG9nU3RhbmRieVNuYXBzaG90KCk7Ci0JfQorCUxvZ1N0YW5kYnlTbmFwc2hvdCgp OwogfQogCiAjZGVmaW5lIFNuYXBCdWlsZE9uRGlza0NvbnN0YW50U2l6ZSBcCi0tIAoyLjM5 LjUKCg== --------------nSXAXBhgWt0AUd9uE0wCc0X0 Content-Type: text/x-patch; charset=UTF-8; name="v6-0011-Remove-the-now-unused-xids-array-from-xl_running_.patch" Content-Disposition: attachment; filename*0="v6-0011-Remove-the-now-unused-xids-array-from-xl_running_.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA1MTIxMmE0ZjA1M2VkYjVlNGNlZWY2NWUzY2U1ZTcyMmZiYzM4NDRiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMTMgQXVnIDIwMjQgMTY6NDA6NTcgKzAzMDAK U3ViamVjdDogW1BBVENIIHY2IDExLzEyXSBSZW1vdmUgdGhlIG5vdy11bnVzZWQgeGlkcyBh cnJheSBmcm9tCiB4bF9ydW5uaW5nX3hhY3RzCgpXZSBzdGlsbCBnZW5lcmF0ZSBydW5uaW5n LXhhY3RzIHJlY29yZHMsIGJlY2F1c2UgdGhleSBhcmUgc3RpbGwgbmVlZGVkCnRvIGluaXRp YWxpemUgdGhlIHNuYXBzaG90IGluIGxvZ2ljYWwgZGVjb2RpbmcuCi0tLQogc3JjL2JhY2tl bmQvYWNjZXNzL3JtZ3JkZXNjL3N0YW5kYnlkZXNjLmMgICB8IDE4IC0tLS0tLS0tLS0tLQog c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9zbmFwYnVpbGQuYyB8ICA4ICsrKy0t LQogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jICAgICAgICAgICB8IDMyICsr KysrLS0tLS0tLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9zdGFuZGJ5LmggICAg ICAgICAgICAgICB8ICAyIC0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3N0YW5kYnlkZWZzLmgg ICAgICAgICAgIHwgMTYgKysrKysrKy0tLS0KIDUgZmlsZXMgY2hhbmdlZCwgMjEgaW5zZXJ0 aW9ucygrKSwgNTUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3JtZ3JkZXNjL3N0YW5kYnlkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2Mvc3RhbmRieWRlc2MuYwppbmRleCA4MWVmZjVmMzFjNC4uNWU2ODEyMzk2ZGUgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9zdGFuZGJ5ZGVzYy5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9zdGFuZGJ5ZGVzYy5jCkBAIC0xOSwyOCAr MTksMTAgQEAKIHN0YXRpYyB2b2lkCiBzdGFuZGJ5X2Rlc2NfcnVubmluZ194YWN0cyhTdHJp bmdJbmZvIGJ1ZiwgeGxfcnVubmluZ194YWN0cyAqeGxyZWMpCiB7Ci0JaW50CQkJaTsKLQog CWFwcGVuZFN0cmluZ0luZm8oYnVmLCAibmV4dFhpZCAldSBsYXRlc3RDb21wbGV0ZWRYaWQg JXUgb2xkZXN0UnVubmluZ1hpZCAldSIsCiAJCQkJCSB4bHJlYy0+bmV4dFhpZCwKIAkJCQkJ IHhscmVjLT5sYXRlc3RDb21wbGV0ZWRYaWQsCiAJCQkJCSB4bHJlYy0+b2xkZXN0UnVubmlu Z1hpZCk7Ci0JaWYgKHhscmVjLT54Y250ID4gMCkKLQl7Ci0JCWFwcGVuZFN0cmluZ0luZm8o YnVmLCAiOyAlZCB4YWN0czoiLCB4bHJlYy0+eGNudCk7Ci0JCWZvciAoaSA9IDA7IGkgPCB4 bHJlYy0+eGNudDsgaSsrKQotCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgJXUiLCB4bHJl Yy0+eGlkc1tpXSk7Ci0JfQotCi0JaWYgKHhscmVjLT5zdWJ4aWRfb3ZlcmZsb3cpCi0JCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiOyBzdWJ4aWQgb3ZlcmZsb3dlZCIpOwotCi0J aWYgKHhscmVjLT5zdWJ4Y250ID4gMCkKLQl7Ci0JCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAi OyAlZCBzdWJ4YWN0czoiLCB4bHJlYy0+c3VieGNudCk7Ci0JCWZvciAoaSA9IDA7IGkgPCB4 bHJlYy0+c3VieGNudDsgaSsrKQotCQkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIgJXUiLCB4 bHJlYy0+eGlkc1t4bHJlYy0+eGNudCArIGldKTsKLQl9CiB9CiAKIHZvaWQKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jCmluZGV4IDI1MjUyNmVj ZjkxLi5lYWRhNjQxZDJhNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v bG9naWNhbC9zbmFwYnVpbGQuYworKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3NuYXBidWlsZC5jCkBAIC0xMjg2LDggKzEyODYsOCBAQCBTbmFwQnVpbGRGaW5kU25h cHNob3QoU25hcEJ1aWxkICpidWlsZGVyLCBYTG9nUmVjUHRyIGxzbiwgeGxfcnVubmluZ194 YWN0cyAqcnVubgogCQllcmVwb3J0KExPRywKIAkJCQkoZXJybXNnKCJsb2dpY2FsIGRlY29k aW5nIGZvdW5kIGluaXRpYWwgc3RhcnRpbmcgcG9pbnQgYXQgJVgvJVgiLAogCQkJCQkJTFNO X0ZPUk1BVF9BUkdTKGxzbikpLAotCQkJCSBlcnJkZXRhaWwoIldhaXRpbmcgZm9yIHRyYW5z YWN0aW9ucyAoYXBwcm94aW1hdGVseSAlZCkgb2xkZXIgdGhhbiAldSB0byBlbmQuIiwKLQkJ CQkJCSAgIHJ1bm5pbmctPnhjbnQsIHJ1bm5pbmctPm5leHRYaWQpKSk7CisJCQkJIGVycmRl dGFpbCgiV2FpdGluZyBmb3IgdHJhbnNhY3Rpb25zIG9sZGVyIHRoYW4gJXUgdG8gZW5kLiIs CisJCQkJCQkgICBydW5uaW5nLT5uZXh0WGlkKSkpOwogCiAJCVNuYXBCdWlsZFdhaXRTbmFw c2hvdChydW5uaW5nLT5uZXh0WGlkKTsKIAl9CkBAIC0xMzEwLDggKzEzMTAsOCBAQCBTbmFw QnVpbGRGaW5kU25hcHNob3QoU25hcEJ1aWxkICpidWlsZGVyLCBYTG9nUmVjUHRyIGxzbiwg eGxfcnVubmluZ194YWN0cyAqcnVubgogCQllcmVwb3J0KExPRywKIAkJCQkoZXJybXNnKCJs b2dpY2FsIGRlY29kaW5nIGZvdW5kIGluaXRpYWwgY29uc2lzdGVudCBwb2ludCBhdCAlWC8l WCIsCiAJCQkJCQlMU05fRk9STUFUX0FSR1MobHNuKSksCi0JCQkJIGVycmRldGFpbCgiV2Fp dGluZyBmb3IgdHJhbnNhY3Rpb25zIChhcHByb3hpbWF0ZWx5ICVkKSBvbGRlciB0aGFuICV1 IHRvIGVuZC4iLAotCQkJCQkJICAgcnVubmluZy0+eGNudCwgcnVubmluZy0+bmV4dFhpZCkp KTsKKwkJCQkgZXJyZGV0YWlsKCJXYWl0aW5nIGZvciB0cmFuc2FjdGlvbnMgb2xkZXIgdGhh biAldSB0byBlbmQuIiwKKwkJCQkJCSAgIHJ1bm5pbmctPm5leHRYaWQpKSk7CiAKIAkJU25h cEJ1aWxkV2FpdFNuYXBzaG90KHJ1bm5pbmctPm5leHRYaWQpOwogCX0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL3N0YW5kYnkuYwppbmRleCAyMTdiMTY3MGY1Yi4uMGY4YTlhYTBmZWEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3N0YW5kYnkuYworKysgYi9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKQEAgLTEzMzcsOSArMTMzNyw2IEBAIExvZ0N1 cnJlbnRSdW5uaW5nWGFjdHMoUnVubmluZ1RyYW5zYWN0aW9ucyBDdXJyUnVubmluZ1hhY3Rz KQogCXhsX3J1bm5pbmdfeGFjdHMgeGxyZWM7CiAJWExvZ1JlY1B0cglyZWNwdHI7CiAKLQl4 bHJlYy54Y250ID0gQ3VyclJ1bm5pbmdYYWN0cy0+eGNudDsKLQl4bHJlYy5zdWJ4Y250ID0g Q3VyclJ1bm5pbmdYYWN0cy0+c3VieGNudDsKLQl4bHJlYy5zdWJ4aWRfb3ZlcmZsb3cgPSAo Q3VyclJ1bm5pbmdYYWN0cy0+c3VieGlkX3N0YXR1cyAhPSBTVUJYSURTX0lOX0FSUkFZKTsK IAl4bHJlYy5uZXh0WGlkID0gQ3VyclJ1bm5pbmdYYWN0cy0+bmV4dFhpZDsKIAl4bHJlYy5v bGRlc3RSdW5uaW5nWGlkID0gQ3VyclJ1bm5pbmdYYWN0cy0+b2xkZXN0UnVubmluZ1hpZDsK IAl4bHJlYy5sYXRlc3RDb21wbGV0ZWRYaWQgPSBDdXJyUnVubmluZ1hhY3RzLT5sYXRlc3RD b21wbGV0ZWRYaWQ7CkBAIC0xMzQ3LDMxICsxMzQ0LDE2IEBAIExvZ0N1cnJlbnRSdW5uaW5n WGFjdHMoUnVubmluZ1RyYW5zYWN0aW9ucyBDdXJyUnVubmluZ1hhY3RzKQogCS8qIEhlYWRl ciAqLwogCVhMb2dCZWdpbkluc2VydCgpOwogCVhMb2dTZXRSZWNvcmRGbGFncyhYTE9HX01B UktfVU5JTVBPUlRBTlQpOwotCVhMb2dSZWdpc3RlckRhdGEoJnhscmVjLCBNaW5TaXplT2ZY YWN0UnVubmluZ1hhY3RzKTsKLQotCS8qIGFycmF5IG9mIFRyYW5zYWN0aW9uSWRzICovCi0J aWYgKHhscmVjLnhjbnQgPiAwKQotCQlYTG9nUmVnaXN0ZXJEYXRhKEN1cnJSdW5uaW5nWGFj dHMtPnhpZHMsCi0JCQkJCQkgKHhscmVjLnhjbnQgKyB4bHJlYy5zdWJ4Y250KSAqIHNpemVv ZihUcmFuc2FjdGlvbklkKSk7CisJWExvZ1JlZ2lzdGVyRGF0YSgmeGxyZWMsIFNpemVPZlhh Y3RSdW5uaW5nWGFjdHMpOwogCiAJcmVjcHRyID0gWExvZ0luc2VydChSTV9TVEFOREJZX0lE LCBYTE9HX1JVTk5JTkdfWEFDVFMpOwogCi0JaWYgKHhscmVjLnN1YnhpZF9vdmVyZmxvdykK LQkJZWxvZyhERUJVRzIsCi0JCQkgInNuYXBzaG90IG9mICVkIHJ1bm5pbmcgdHJhbnNhY3Rp b25zIG92ZXJmbG93ZWQgKGxzbiAlWC8lWCBvbGRlc3QgeGlkICV1IGxhdGVzdCBjb21wbGV0 ZSAldSBuZXh0IHhpZCAldSkiLAotCQkJIEN1cnJSdW5uaW5nWGFjdHMtPnhjbnQsCi0JCQkg TFNOX0ZPUk1BVF9BUkdTKHJlY3B0ciksCi0JCQkgQ3VyclJ1bm5pbmdYYWN0cy0+b2xkZXN0 UnVubmluZ1hpZCwKLQkJCSBDdXJyUnVubmluZ1hhY3RzLT5sYXRlc3RDb21wbGV0ZWRYaWQs Ci0JCQkgQ3VyclJ1bm5pbmdYYWN0cy0+bmV4dFhpZCk7Ci0JZWxzZQotCQllbG9nKERFQlVH MiwKLQkJCSAic25hcHNob3Qgb2YgJWQrJWQgcnVubmluZyB0cmFuc2FjdGlvbiBpZHMgKGxz biAlWC8lWCBvbGRlc3QgeGlkICV1IGxhdGVzdCBjb21wbGV0ZSAldSBuZXh0IHhpZCAldSki LAotCQkJIEN1cnJSdW5uaW5nWGFjdHMtPnhjbnQsIEN1cnJSdW5uaW5nWGFjdHMtPnN1Ynhj bnQsCi0JCQkgTFNOX0ZPUk1BVF9BUkdTKHJlY3B0ciksCi0JCQkgQ3VyclJ1bm5pbmdYYWN0 cy0+b2xkZXN0UnVubmluZ1hpZCwKLQkJCSBDdXJyUnVubmluZ1hhY3RzLT5sYXRlc3RDb21w bGV0ZWRYaWQsCi0JCQkgQ3VyclJ1bm5pbmdYYWN0cy0+bmV4dFhpZCk7CisJZWxvZyhERUJV RzIsCisJCSAibG9nZ2luZyBydW5uaW5nIHRyYW5zYWN0aW9uIGJvdW5kcyAobHNuICVYLyVY IG9sZGVzdCB4aWQgJXUgbGF0ZXN0IGNvbXBsZXRlICV1IG5leHQgeGlkICV1KSIsCisJCSBM U05fRk9STUFUX0FSR1MocmVjcHRyKSwKKwkJIEN1cnJSdW5uaW5nWGFjdHMtPm9sZGVzdFJ1 bm5pbmdYaWQsCisJCSBDdXJyUnVubmluZ1hhY3RzLT5sYXRlc3RDb21wbGV0ZWRYaWQsCisJ CSBDdXJyUnVubmluZ1hhY3RzLT5uZXh0WGlkKTsKIAogCS8qCiAJICogRW5zdXJlIHJ1bm5p bmdfeGFjdHMgaW5mb3JtYXRpb24gaXMgc3luY2VkIHRvIGRpc2sgbm90IHRvbyBmYXIgaW4g dGhlCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3N0YW5kYnkuaCBiL3NyYy9p bmNsdWRlL3N0b3JhZ2Uvc3RhbmRieS5oCmluZGV4IDI0ZTJmNTA4MmJjLi5kNzNhOGY1OGE3 MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9zdGFuZGJ5LmgKKysrIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9zdGFuZGJ5LmgKQEAgLTYwLDggKzYwLDYgQEAgZXh0ZXJuIHZv aWQgU3RhbmRieVJlbGVhc2VMb2NrVHJlZShUcmFuc2FjdGlvbklkIHhpZCwKIGV4dGVybiB2 b2lkIFN0YW5kYnlSZWxlYXNlQWxsTG9ja3Modm9pZCk7CiBleHRlcm4gdm9pZCBTdGFuZGJ5 UmVsZWFzZU9sZExvY2tzKFRyYW5zYWN0aW9uSWQgb2xkeGlkKTsKIAotI2RlZmluZSBNaW5T aXplT2ZYYWN0UnVubmluZ1hhY3RzIG9mZnNldG9mKHhsX3J1bm5pbmdfeGFjdHMsIHhpZHMp Ci0KIAogLyoKICAqIERlY2xhcmF0aW9ucyBmb3IgR2V0UnVubmluZ1RyYW5zYWN0aW9uRGF0 YSgpLiBTaW1pbGFyIHRvIFNuYXBzaG90cywgYnV0CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL3N0YW5kYnlkZWZzLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL3N0YW5kYnlk ZWZzLmgKaW5kZXggNzFlNWFlODc4YjUuLjNkMTgyYjY2ZTc0IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9zdG9yYWdlL3N0YW5kYnlkZWZzLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFn ZS9zdGFuZGJ5ZGVmcy5oCkBAIC00MiwyMCArNDIsMjQgQEAgdHlwZWRlZiBzdHJ1Y3QgeGxf c3RhbmRieV9sb2NrcwogfSB4bF9zdGFuZGJ5X2xvY2tzOwogCiAvKgotICogV2hlbiB3ZSB3 cml0ZSBydW5uaW5nIHhhY3QgZGF0YSB0byBXQUwsIHdlIHVzZSB0aGlzIHN0cnVjdHVyZS4K KyAqIERhdGEgaW5jbHVkZWQgaW4gYW4gWExPR19SVU5OSU5HX1hBQ1RTIHJlY29yZC4KKyAq CisgKiBUaGlzIHVzZWQgdG8gaW5jbHVkZSBhIGxpc3Qgb2YgcnVubmluZyBYSURzLCBoZW5j ZSB0aGUgbmFtZSwgYnV0IG5vd2FkYXlzCisgKiB0aGlzIG9ubHkgY29udGFpbnMgdGhlIG1p biBhbmQgbWF4IGJvdW5kcyBvZiB0aGUgdHJhbnNhY3Rpb25zIHRoYXQgd2VyZQorICogcnVu bmluZyB3aGVuIHRoZSByZWNvcmQgd2FzIHdyaXR0ZW4uICBUaGV5IGFyZSBuZWVkZWQgdG8g aW5pdGlhbGl6ZSBsb2dpY2FsCisgKiBkZWNvZGluZy4gIFRoZXkgYXJlIGFsc28gdXNlZCBp biBob3Qgc3RhbmRieSB0byBwcnVuZSBpbmZvcm1hdGlvbiBhYm91dCBvbGQKKyAqIHJ1bm5p bmcgdHJhbnNhY3Rpb25zLCBpbiBjYXNlIHRoZSB0aGUgcHJpbWFyeSBkaWRuJ3Qgd3JpdGUg YSBDT01NSVQvQUJPUlQKKyAqIHJlY29yZCBmb3Igc29tZSByZWFzb24uCiAgKi8KIHR5cGVk ZWYgc3RydWN0IHhsX3J1bm5pbmdfeGFjdHMKIHsKLQlpbnQJCQl4Y250OwkJCS8qICMgb2Yg eGFjdCBpZHMgaW4geGlkc1tdICovCi0JaW50CQkJc3VieGNudDsJCS8qICMgb2Ygc3VieGFj dCBpZHMgaW4geGlkc1tdICovCi0JYm9vbAkJc3VieGlkX292ZXJmbG93OwkvKiBzbmFwc2hv dCBvdmVyZmxvd2VkLCBzdWJ4aWRzIG1pc3NpbmcgKi8KIAlUcmFuc2FjdGlvbklkIG5leHRY aWQ7CQkvKiB4aWQgZnJvbSBUcmFuc2FtVmFyaWFibGVzLT5uZXh0WGlkICovCiAJVHJhbnNh Y3Rpb25JZCBvbGRlc3RSdW5uaW5nWGlkOyAvKiAqbm90KiBvbGRlc3RYbWluICovCiAJVHJh bnNhY3Rpb25JZCBsYXRlc3RDb21wbGV0ZWRYaWQ7CS8qIHNvIHdlIGNhbiBzZXQgeG1heCAq LwotCi0JVHJhbnNhY3Rpb25JZCB4aWRzW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07CiB9IHhs X3J1bm5pbmdfeGFjdHM7CiAKKyNkZWZpbmUgU2l6ZU9mWGFjdFJ1bm5pbmdYYWN0cyBzaXpl b2YoeGxfcnVubmluZ194YWN0cykKKwogLyoKICAqIEludmFsaWRhdGlvbnMgZm9yIHN0YW5k YnksIGN1cnJlbnRseSBvbmx5IHdoZW4gdHJhbnNhY3Rpb25zIHdpdGhvdXQgYW4KICAqIGFz c2lnbmVkIHhpZCBjb21taXQuCi0tIAoyLjM5LjUKCg== --------------nSXAXBhgWt0AUd9uE0wCc0X0 Content-Type: text/x-patch; charset=UTF-8; name="v6-0012-Add-a-cache-to-Snapshot-to-avoid-repeated-CSN-loo.patch" Content-Disposition: attachment; filename*0="v6-0012-Add-a-cache-to-Snapshot-to-avoid-repeated-CSN-loo.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA2YjhlODU2YzE1NzUwZjg5ZjlkNTU5YWU5ZjlmYmQ3ZjNmMmRiMTI1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFR1ZSwgMSBBcHIgMjAyNSAwMDoxODoxNCArMDMwMApT dWJqZWN0OiBbUEFUQ0ggdjYgMTIvMTJdIEFkZCBhIGNhY2hlIHRvIFNuYXBzaG90IHRvIGF2 b2lkIHJlcGVhdGVkIENTTgogbG9va3VwcwoKQ2FjaGUgdGhlIHN0YXR1cyBvZiBhbGwgWElE cyB0aGF0IGhhdmUgYmVlbiBsb29rZWQgdXAgaW4gdGhlIENTTiBsb2cKaW4gdGhlIFNuYXBz aG90RGF0YS4gVGhpcyBhdm9pZHMgaGF2aW5nIHRvIGdvIHRoZSBDU04gbG9nIGluIHRoZQpj b21tb24gY2FzZSB0aGF0IHRoZSBzYW1lIFhJRHMgYXJlIGxvb2tlZCB1cCBvdmVyIGFuZCBv dmVyIGFnYWluLgotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jIHwgMTEx ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIHNyYy9pbmNsdWRlL3V0aWxzL3Nu YXBzaG90LmggICAgIHwgICA5ICsrKwogMiBmaWxlcyBjaGFuZ2VkLCAxMTYgaW5zZXJ0aW9u cygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy90 aW1lL3NuYXBtZ3IuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvc25hcG1nci5jCmluZGV4 IDA0OWM3MDZmMmNmLi4yNTBiYTE2NTBlNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvdGltZS9zbmFwbWdyLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvdGltZS9zbmFwbWdy LmMKQEAgLTExNCw2ICsxMTQsMzUgQEAKICNpbmNsdWRlICJ1dGlscy9zbmFwbWdyLmgiCiAj aW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIKIAorLyoKKyAqIERlZmluZSBhIHJhZGl4IHRy ZWUgaW1wbGVtZW50YXRpb24gdG8gY2FjaGUgQ1NOIGxvb2t1cHMgaW4gYSBzbmFwc2hvdC4K KyAqCisgKiBXZSBuZWVkIG9ubHkgb25lIGJpdCBvZiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBY SUQgc3RvcmVkIGluIHRoZSBjYWNoZTogd2FzCisgKiB0aGUgWElEIHJ1bm5pbmcgb3Igbm90 LiAgSG93ZXZlciwgdGhlIHJhZGl4IHRyZWUgaW1wbGVtZW50YXRpb24gdXNlcyA4CisgKiBi eXRlcyBmb3IgZWFjaCBlbnRyeSAob24gNjQtYml0IG1hY2hpbmVzKSBldmVuIGlmIHRoZSB2 YWx1ZSB0eXBlIGlzIHNtYWxsZXIKKyAqIHRoYW4gdGhhdC4gIFRvIHJlZHVjZSBtZW1vcnkg dXNhZ2UsIHdlIHVzZSB1aW50NjQgYXMgdGhlIHZhbHVlIHR5cGUsIGFuZAorICogc3RvcmUg bXVsdGlwbGUgWElEcyBpbiBlYWNoIHZhbHVlLgorICoKKyAqIFRoZSA2NC1iaXQgdmFsdWUg d29yZCBob2xkcyB0d28gYml0cyBmb3IgZWFjaCBYSUQ6IHdoZXRoZXIgdGhlIFhJRCBpcwor ICogcHJlc2VudCBpbiB0aGUgY2FjaGUgb3Igbm90LCBhbmQgaWYgaXQncyBwcmVzZW50LCB3 aGV0aGVyIGl0J3MgY29uc2lkZXJlZAorICogYXMgaW4tcHJvZ3Jlc3MgYnkgdGhlIHNuYXBz aG90IG9yIG5vdC4gIFNvIGVhY2ggZW50cnkgaW4gdGhlIHJhZGl4IHRyZWUKKyAqIGhvbGRz IHRoZSBzdGF0dXMgZm9yIDMyIFhJRHMuCisgKi8KKyNkZWZpbmUgUlRfUFJFRklYIGlucHJv Z3Jlc3NfY2FjaGUKKyNkZWZpbmUgUlRfU0NPUEUKKyNkZWZpbmUgUlRfREVDTEFSRQorI2Rl ZmluZSBSVF9ERUZJTkUKKyNkZWZpbmUgUlRfVkFMVUVfVFlQRSB1aW50NjQKKyNpbmNsdWRl ICJsaWIvcmFkaXh0cmVlLmgiCisKKyNkZWZpbmUgSU5QUk9HUkVTU19DQUNIRV9CSVRTIDIK KyNkZWZpbmUgSU5QUk9HUkVTU19DQUNIRV9YSURTX1BFUl9XT1JEIDMyCisKKyNkZWZpbmUg SU5QUk9HUkVTU19DQUNIRV9YSURfSVNfQ0FDSEVEKHdvcmQsIHNsb3RubykgXAorCSgoKCh3 b3JkKSAmIChVSU5UNjRDT05TVCgxKSA8PCAoc2xvdG5vKSkpKSAhPSAwKQorCisjZGVmaW5l IElOUFJPR1JFU1NfQ0FDSEVfWElEX0lTX0lOX1BST0dSRVNTKHdvcmQsIHNsb3RubykgXAor CSgoKCh3b3JkKSAmIChVSU5UNjRDT05TVCgxKSA8PCAoKHNsb3RubykgKyAxKSkpKSAhPSAw KQogCiAvKgogICogQ3VycmVudFNuYXBzaG90IHBvaW50cyB0byB0aGUgb25seSBzbmFwc2hv dCB0YWtlbiBpbiB0cmFuc2FjdGlvbi1zbmFwc2hvdApAQCAtMjQwLDYgKzI2OSw3IEBAIHR5 cGVkZWYgc3RydWN0IFNlcmlhbGl6ZWRTbmFwc2hvdERhdGEKIAlpbnQzMgkJc3VieGNudDsK IAlib29sCQlzdWJvdmVyZmxvd2VkOwogCWJvb2wJCXRha2VuRHVyaW5nUmVjb3Zlcnk7CisJ WExvZ1JlY1B0cglzbmFwc2hvdENzbjsKIAlDb21tYW5kSWQJY3VyY2lkOwogfSBTZXJpYWxp emVkU25hcHNob3REYXRhOwogCkBAIC0xMTc3LDYgKzEyMDcsNyBAQCBFeHBvcnRTbmFwc2hv dChNVkNDU25hcHNob3RTaGFyZWQgc25hcHNob3QpCiAJCQlhcHBlbmRTdHJpbmdJbmZvKCZi dWYsICJzeHA6JXVcbiIsIGNoaWxkcmVuW2ldKTsKIAl9CiAJYXBwZW5kU3RyaW5nSW5mbygm YnVmLCAicmVjOiV1XG4iLCBzbmFwc2hvdC0+dGFrZW5EdXJpbmdSZWNvdmVyeSk7CisJYXBw ZW5kU3RyaW5nSW5mbygmYnVmLCAic25hcHNob3Rjc246JVgvJVhcbiIsIExTTl9GT1JNQVRf QVJHUyhzbmFwc2hvdC0+c25hcHNob3RDc24pKTsKIAogCS8qCiAJICogTm93IHdyaXRlIHRo ZSB0ZXh0IHJlcHJlc2VudGF0aW9uIGludG8gYSBmaWxlLiAgV2UgZmlyc3Qgd3JpdGUgdG8g YQpAQCAtMTQ0OSw2ICsxNDgwLDcgQEAgSW1wb3J0U25hcHNob3QoY29uc3QgY2hhciAqaWRz dHIpCiAJfQogCiAJc25hcHNob3QtPnRha2VuRHVyaW5nUmVjb3ZlcnkgPSBwYXJzZUludEZy b21UZXh0KCJyZWM6IiwgJmZpbGVidWYsIHBhdGgpOworCXNuYXBzaG90LT5zbmFwc2hvdENz biA9IHBhcnNlSW50RnJvbVRleHQoInNuYXBzaG90Y3NuOiIsICZmaWxlYnVmLCBwYXRoKTsK IAogCXNuYXBzaG90LT5yZWZjb3VudCA9IDE7CiAJdmFsaWRfc25hcHNob3RzX3B1c2hfb3V0 X29mX29yZGVyKHNuYXBzaG90KTsKQEAgLTE3MDIsNiArMTczNCw3IEBAIFNlcmlhbGl6ZVNu YXBzaG90KE1WQ0NTbmFwc2hvdCBzbmFwc2hvdCwgY2hhciAqc3RhcnRfYWRkcmVzcykKIAlz ZXJpYWxpemVkX3NuYXBzaG90LnN1YnhjbnQgPSBzbmFwc2hvdC0+c2hhcmVkLT5zdWJ4Y250 OwogCXNlcmlhbGl6ZWRfc25hcHNob3Quc3Vib3ZlcmZsb3dlZCA9IHNuYXBzaG90LT5zaGFy ZWQtPnN1Ym92ZXJmbG93ZWQ7CiAJc2VyaWFsaXplZF9zbmFwc2hvdC50YWtlbkR1cmluZ1Jl Y292ZXJ5ID0gc25hcHNob3QtPnNoYXJlZC0+dGFrZW5EdXJpbmdSZWNvdmVyeTsKKwlzZXJp YWxpemVkX3NuYXBzaG90LnNuYXBzaG90Q3NuID0gc25hcHNob3QtPnNoYXJlZC0+c25hcHNo b3RDc247CiAJc2VyaWFsaXplZF9zbmFwc2hvdC5jdXJjaWQgPSBzbmFwc2hvdC0+Y3VyY2lk OwogCiAJLyoKQEAgLTE3NzYsNiArMTgwOSw5IEBAIFJlc3RvcmVTbmFwc2hvdChjaGFyICpz dGFydF9hZGRyZXNzKQogCXNuYXBzaG90LT5zaGFyZWQtPnN1YnhjbnQgPSBzZXJpYWxpemVk X3NuYXBzaG90LnN1YnhjbnQ7CiAJc25hcHNob3QtPnNoYXJlZC0+c3Vib3ZlcmZsb3dlZCA9 IHNlcmlhbGl6ZWRfc25hcHNob3Quc3Vib3ZlcmZsb3dlZDsKIAlzbmFwc2hvdC0+c2hhcmVk LT50YWtlbkR1cmluZ1JlY292ZXJ5ID0gc2VyaWFsaXplZF9zbmFwc2hvdC50YWtlbkR1cmlu Z1JlY292ZXJ5OworCXNuYXBzaG90LT5zaGFyZWQtPnNuYXBzaG90Q3NuID0gc2VyaWFsaXpl ZF9zbmFwc2hvdC5zbmFwc2hvdENzbjsKKwlzbmFwc2hvdC0+c2hhcmVkLT5pbnByb2dyZXNz X2NhY2hlID0gTlVMTDsKKwlzbmFwc2hvdC0+c2hhcmVkLT5pbnByb2dyZXNzX2NhY2hlX2N4 dCA9IE5VTEw7CiAJc25hcHNob3QtPnNoYXJlZC0+c25hcFhhY3RDb21wbGV0aW9uQ291bnQg PSAwOwogCiAJc25hcHNob3QtPnNoYXJlZC0+cmVmY291bnQgPSAxOwpAQCAtMTg4OSwxMiAr MTkyNSw2MiBAQCBYaWRJbk1WQ0NTbmFwc2hvdChUcmFuc2FjdGlvbklkIHhpZCwgTVZDQ1Nu YXBzaG90U2hhcmVkIHNuYXBzaG90KQogCX0KIAllbHNlCiAJewotCQlYTG9nUmVjUHRyCWNz biA9IENTTkxvZ0dldENTTkJ5WGlkKHhpZCk7CisJCVhMb2dSZWNQdHIJY3NuOworCQlib29s CQlpbnByb2dyZXNzOworCQl1aW50NjQJICAgKmNhY2hlX2VudHJ5OworCQl1aW50NjQJCWNh Y2hlX3dvcmQgPSAwOwogCi0JCWlmIChjc24gIT0gSW52YWxpZFhMb2dSZWNQdHIgJiYgY3Nu IDw9IHNuYXBzaG90LT5zbmFwc2hvdENzbikKLQkJCXJldHVybiBmYWxzZTsKKwkJLyoKKwkJ ICogQ2FsY3VsYXRlIHRoZSB3b3JkIGFuZCBiaXQgc2xvdCBmb3IgdGhlIFhJRCBpbiB0aGUg Y2FjaGUuIFdlIHVzZSBhbgorCQkgKiBvZmZzZXQgZnJvbSB4bWF4IGFzIHRoZSBrZXkgaW5z dGVhZCBvZiB0aGUgWElEIGRpcmVjdGx5LCBiZWNhdXNlCisJCSAqIHRoZSByYWRpeCB0cmVl IGNhbiBjb21wYWN0IGF3YXkgbGVhZGluZyB6ZXJvcyBhbmQgaXMgdGh1cyBtb3JlCisJCSAq IGVmZmljaWVudCB3aXRoIGtleXMgY2xvc2VyIHRvIDAuCisJCSAqLworCQl1aW50MzIJCWNh Y2hlX2lkeCA9IHNuYXBzaG90LT54bWF4IC0geGlkOworCQl1aW50NjQJCXdvcmRubyA9IGNh Y2hlX2lkeCAvIElOUFJPR1JFU1NfQ0FDSEVfWElEU19QRVJfV09SRDsKKwkJdWludDY0CQlz bG90bm8gPSAoY2FjaGVfaWR4ICUgSU5QUk9HUkVTU19DQUNIRV9YSURTX1BFUl9XT1JEKSAq IElOUFJPR1JFU1NfQ0FDSEVfQklUUzsKKworCQlpZiAoc25hcHNob3QtPmlucHJvZ3Jlc3Nf Y2FjaGUpCisJCXsKKwkJCWNhY2hlX2VudHJ5ID0gaW5wcm9ncmVzc19jYWNoZV9maW5kKHNu YXBzaG90LT5pbnByb2dyZXNzX2NhY2hlLCB3b3Jkbm8pOworCQkJaWYgKGNhY2hlX2VudHJ5 KQorCQkJeworCQkJCWNhY2hlX3dvcmQgPSAqY2FjaGVfZW50cnk7CisJCQkJaWYgKElOUFJP R1JFU1NfQ0FDSEVfWElEX0lTX0NBQ0hFRChjYWNoZV93b3JkLCBzbG90bm8pKQorCQkJCQly ZXR1cm4gSU5QUk9HUkVTU19DQUNIRV9YSURfSVNfSU5fUFJPR1JFU1MoY2FjaGVfd29yZCwg c2xvdG5vKTsKKwkJCX0KKwkJfQogCQllbHNlCi0JCQlyZXR1cm4gdHJ1ZTsKKwkJeworCQkJ TWVtb3J5Q29udGV4dCBzYXZlX2N4dDsKKworCQkJc2F2ZV9jeHQgPSBNZW1vcnlDb250ZXh0 U3dpdGNoVG8oVG9wTWVtb3J5Q29udGV4dCk7CisKKwkJCWlmIChzbmFwc2hvdC0+aW5wcm9n cmVzc19jYWNoZV9jeHQgPT0gTlVMTCkKKwkJCQlzbmFwc2hvdC0+aW5wcm9ncmVzc19jYWNo ZV9jeHQgPQorCQkJCQlBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5Q29udGV4dCwK KwkJCQkJCQkJCQkgICJzbmFwc2hvdCBpbnByb2dyZXNzIGNhY2hlIGNvbnRleHQiLAorCQkJ CQkJCQkJCSAgQUxMT0NTRVRfU01BTExfU0laRVMpOworCQkJc25hcHNob3QtPmlucHJvZ3Jl c3NfY2FjaGUgPSBpbnByb2dyZXNzX2NhY2hlX2NyZWF0ZShzbmFwc2hvdC0+aW5wcm9ncmVz c19jYWNoZV9jeHQpOworCQkJY2FjaGVfZW50cnkgPSBOVUxMOworCQkJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKHNhdmVfY3h0KTsKKwkJfQorCisJCS8qIE5vdCBmb3VuZCBpbiBjYWNoZSwg bG9vayB1cCB0aGUgQ1NOICovCisJCWNzbiA9IENTTkxvZ0dldENTTkJ5WGlkKHhpZCk7CisJ CWlucHJvZ3Jlc3MgPSAoY3NuID09IEludmFsaWRYTG9nUmVjUHRyIHx8IGNzbiA+IHNuYXBz aG90LT5zbmFwc2hvdENzbik7CisKKwkJLyogVXBkYXRlIHRoZSBjYWNoZSB3b3JkLCBhbmQg c3RvcmUgaXQgYmFjayB0byB0aGUgcmFkaXggdHJlZSAqLworCQljYWNoZV93b3JkIHw9IFVJ TlQ2NENPTlNUKDEpIDw8IHNsb3RubzsgLyogY2FjaGVkICovCisJCWlmIChpbnByb2dyZXNz KQorCQkJY2FjaGVfd29yZCB8PSBVSU5UNjRDT05TVCgxKSA8PCAoc2xvdG5vICsgMSk7CS8q IGluLXByb2dyZXNzICovCisKKwkJaWYgKGNhY2hlX2VudHJ5KQorCQkJKmNhY2hlX2VudHJ5 ID0gY2FjaGVfd29yZDsKKwkJZWxzZQorCQkJaW5wcm9ncmVzc19jYWNoZV9zZXQoc25hcHNo b3QtPmlucHJvZ3Jlc3NfY2FjaGUsIHdvcmRubywgJmNhY2hlX3dvcmQpOworCisJCXJldHVy biBpbnByb2dyZXNzOwogCX0KIAogCXJldHVybiBmYWxzZTsKQEAgLTE5NDQsNiArMjAzMCw5 IEBAIEFsbG9jTVZDQ1NuYXBzaG90U2hhcmVkKHZvaWQpCiAKIAlzaGFyZWQtPnNuYXBYYWN0 Q29tcGxldGlvbkNvdW50ID0gMDsKIAlzaGFyZWQtPnJlZmNvdW50ID0gMDsKKwlzaGFyZWQt PnNuYXBzaG90Q3NuID0gSW52YWxpZFhMb2dSZWNQdHI7CisJc2hhcmVkLT5pbnByb2dyZXNz X2NhY2hlID0gTlVMTDsKKwlzaGFyZWQtPmlucHJvZ3Jlc3NfY2FjaGVfY3h0ID0gTlVMTDsK IAogCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzYXZlX2N4dCk7CiAKQEAgLTE5NzIsOCArMjA2 MSwyMiBAQCB2b2lkCiBGcmVlTVZDQ1NuYXBzaG90U2hhcmVkKE1WQ0NTbmFwc2hvdFNoYXJl ZCBzaGFyZWQpCiB7CiAJQXNzZXJ0KHNoYXJlZC0+cmVmY291bnQgPT0gMCk7CisKKwlpZiAo c2hhcmVkLT5pbnByb2dyZXNzX2NhY2hlKQorCXsKKwkJaW5wcm9ncmVzc19jYWNoZV9mcmVl KHNoYXJlZC0+aW5wcm9ncmVzc19jYWNoZSk7CisJCXNoYXJlZC0+aW5wcm9ncmVzc19jYWNo ZSA9IE5VTEw7CisJfQorCWlmIChzaGFyZWQtPmlucHJvZ3Jlc3NfY2FjaGVfY3h0KQorCXsK KwkJTWVtb3J5Q29udGV4dERlbGV0ZShzaGFyZWQtPmlucHJvZ3Jlc3NfY2FjaGVfY3h0KTsK KwkJc2hhcmVkLT5pbnByb2dyZXNzX2NhY2hlX2N4dCA9IE5VTEw7CisJfQorCiAJaWYgKHNw YXJlU25hcHNob3RTaGFyZWQgPT0gTlVMTCkKKwl7CiAJCXNwYXJlU25hcHNob3RTaGFyZWQg PSBzaGFyZWQ7CisJfQogCWVsc2UKIAkJcGZyZWUoc2hhcmVkKTsKIH0KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3V0aWxzL3NuYXBzaG90LmggYi9zcmMvaW5jbHVkZS91dGlscy9zbmFw c2hvdC5oCmluZGV4IDE0ZmY4MDkwNGM4Li5lZGY1YmYxYmEwYSAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdXRpbHMvc25hcHNob3QuaAorKysgYi9zcmMvaW5jbHVkZS91dGlscy9zbmFw c2hvdC5oCkBAIC0xMjksNiArMTI5LDggQEAgdHlwZWRlZiBlbnVtIE1WQ0NTbmFwc2hvdEtp bmQKIAlTTkFQU0hPVF9SRUdJU1RFUkVELAogfSBNVkNDU25hcHNob3RLaW5kOwogCitzdHJ1 Y3QgaW5wcm9ncmVzc19jYWNoZV9yYWRpeF90cmVlOyAvKiBwcml2YXRlIHRvIHNuYXBtZ3Iu YyAqLworCiAvKgogICogU3RydWN0IHJlcHJlc2VudGluZyBhIG5vcm1hbCBNVkNDIHNuYXBz aG90LgogICoKQEAgLTE5NCw2ICsxOTYsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgTVZDQ1NuYXBz aG90U2hhcmVkRGF0YQogCSAqLwogCVhMb2dSZWNQdHIJc25hcHNob3RDc247CiAKKwkvKgor CSAqIENhY2hlIG9mIFhJRHMga25vd24gdG8gYmUgcnVubmluZyBvciBub3QgYWNjb3JkaW5n IHRvIHRoZSBzbmFwc2hvdC4KKwkgKiBVc2VkIGluIHNuYXBzaG90cyB0YWtlbiBkdXJpbmcg cmVjb3ZlcnkuCisJICovCisJc3RydWN0IGlucHJvZ3Jlc3NfY2FjaGVfcmFkaXhfdHJlZSAq aW5wcm9ncmVzc19jYWNoZTsKKwlNZW1vcnlDb250ZXh0IGlucHJvZ3Jlc3NfY2FjaGVfY3h0 OworCiAJYm9vbAkJdGFrZW5EdXJpbmdSZWNvdmVyeTsJLyogcmVjb3Zlcnktc2hhcGVkIHNu YXBzaG90PyAqLwogCiAJLyoKLS0gCjIuMzkuNQoK --------------nSXAXBhgWt0AUd9uE0wCc0X0--