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 1ucVt5-00DkHc-HA for pgsql-hackers@arkaria.postgresql.org; Thu, 17 Jul 2025 21:11:32 +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 1ucVt2-005fkk-O2 for pgsql-hackers@arkaria.postgresql.org; Thu, 17 Jul 2025 21:11:29 +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 1ucVt2-005fkc-5E for pgsql-hackers@lists.postgresql.org; Thu, 17 Jul 2025 21:11:29 +0000 Received: from relay7-d.mail.gandi.net ([217.70.183.200]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1ucVsx-008K0l-2j for pgsql-hackers@lists.postgresql.org; Thu, 17 Jul 2025 21:11:28 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 029904439A; Thu, 17 Jul 2025 21:11:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1752786681; 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=52mD6yiCD5L8a65AiQG+erOqMVW690O+6ZYAL8c46K0=; b=gL4iKYlWZJKWcCdSzPWf6e2Vg9bGcFoXRo/i9Yp6QbQ7X8d4EuJrTo7BsOwR8CqHDCjp9k av0VpY2w3xENwi3d9YllGfOJjPhVs0rQOXC8h3qW20w1GUwaEsqw4h/rhZEvYRawt+WbRM 2ys5xH+1GobZTidN5WCKXuxC+mbEpk2M7tFiVC7zMOUa+St6TVEdOTbHjt9SzhAD8ZJIPR ioL3zgQrRyzsH/XfK+xH8uJdrgiCxjsE9l/AsIXGsAd9wpNazJcb3U6jOW93DQVdRAhvu/ nsMt3v4VOPrZnbvOKtw/hHMT4ozGrdgJrmO0lmAON+Y0/DJZWyoopG4FF82cTw== Content-Type: multipart/mixed; boundary="------------ZiLGGg5GsiuT6QTFDhUm0SgE" Message-ID: <3223cdcd-6d16-4e90-a3a6-b957f762dc5a@vondra.me> Date: Thu, 17 Jul 2025 23:11:16 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Adding basic NUMA awareness To: Andres Freund Cc: Greg Burd , Ashutosh Bapat , PostgreSQL Hackers , Dmitry Dolgov <9erthalion6@gmail.com> References: Content-Language: en-US From: Tomas Vondra In-Reply-To: X-GND-State: clean X-GND-Score: -100 X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdefgdeiudeivdcutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfitefpfffkpdcuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedtudenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurheptgfkffggfgfuvfevfhfhjgesmhdtreertddvjeenucfhrhhomhepvfhomhgrshcugghonhgurhgruceothhomhgrshesvhhonhgurhgrrdhmvgeqnecuggftrfgrthhtvghrnhepkeduhffgleeghfejtdehlefhgfdugeejudefffetuddtheelhfejfedtveeifeeinecukfhppeekiedrgeelrddvfedtrddvtdeinecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepkeeirdegledrvdeftddrvddtiedphhgvlhhopegluddtrddufeejrddtrddvngdpmhgrihhlfhhrohhmpehtohhmrghssehvohhnughrrgdrmhgvpdhnsggprhgtphhtthhopeehpdhrtghpthhtoheprghnughrvghssegrnhgrrhgriigvlhdruggvpdhrtghpthhtohepghhrvghgsegsuhhrugdrmhgvpdhrtghpthhtoheprghshhhuthhoshhhrdgsrghprghtrdhoshhssehgmhgrihhlrdgtohhmpdhrtghpthhtohepphhgshhqlhdqhhgrtghkvghrsheslhhishhtshdrphhoshhtghhrvghsqhhlrdhorhhgpdhrtghpthhtoheplegvrhhthhgrlhhiohhnieesghhmrghilhdrtghomh X-GND-Sasl: tomas@vondra.me 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. --------------ZiLGGg5GsiuT6QTFDhUm0SgE Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, Here's a v2 of the patch series, with a couple changes: * I simplified the various freelist partitioning by keeping only the "node" partitioning (so the cpu/pid strategies are gone). Those were meant for experimenting, but it made the code more complicated so I ditched it. * I changed the freelist partitioning scheme a little bit, based on the discussion in this thread. Instead of having a single "partition" per NUMA node, there's not a minimum number of partitions (set to 4). So even if your system is not NUMA, you'll have 4 of them. If you have 2 nodes, you'll still have 4, and each node will get 2. With 3 nodes we get 6 partitions (we need 2 per node, and we want to keep the number equal to keep things simple). Once the number of nodes exceeds 4, the heuristics switches to one partition per node. I'm aware there's a discussion about maybe simply removing freelists entirely. If that happens, this becomes mostly irrelevant, of course. The code should also make sure the freelists "agree" with how the earlier patch mapped the buffers to NUMA nodes, i.e. the freelist should only contain buffers from the "correct" NUMA node, etc. I haven't paid much attention to this - I believe it should work for "nice" values of shared buffers (when it evenly divides between nodes). But I'm sure it's possible to confuse that (won't cause crashes, but inefficiency). * There's now a patch partitioning clocksweep, using the same scheme as the freelists. I came to the conclusion it doesn't make much sense to partition these things differently - I can't think of a reason why that would be advantageous, and it makes it easier to reason about. The clocksweep partitioning is somewhat harder, because it affects BgBufferSync() and related code. With the partitioning we now have multiple "clock hands" for different ranges of buffers, and the clock sweep needs to consider that. I modified BgBufferSync to simply loop through the ClockSweep partitions, and do a small cleanup for each. It does work, as in "it doesn't crash". But this part definitely needs review to make sure I got the changes to the "pacing" right. * This new freelist/clocksweep partitioning scheme is however harder to disable. I now realize the GUC may quite do the trick, and there even is not a GUC for the clocksweep. I need to think about this, but I'm not even how feasible it'd be to have two separate GUCs (because of how these two pieces are intertwined). For now if you want to test without the partitioning, you need to skip the patch. I did some quick perf testing on my old xeon machine (2 NUMA nodes), and the results are encouraging. For a read-only pgbench (2x shared buffers, within RAM), I saw an increase from 1.1M tps to 1.3M. Not crazy, but not bad considering the patch is more about consistency than raw throughput. For a read-write pgbench I however saw some strange drops/increases of throughput. I suspect this might be due to some thinko in the clocksweep partitioning, but I'll need to take a closer look. regards -- Tomas Vondra --------------ZiLGGg5GsiuT6QTFDhUm0SgE Content-Type: text/x-patch; charset=UTF-8; name="v2-0007-NUMA-pin-backends-to-NUMA-nodes.patch" Content-Disposition: attachment; filename="v2-0007-NUMA-pin-backends-to-NUMA-nodes.patch" Content-Transfer-Encoding: base64 RnJvbSBjYTY1MWViODVhNjY1NmM3OWZlZTVhYWFiYzk5ZTRiNzcyYjFiOGZlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVHVlLCAyNyBNYXkgMjAyNSAyMzowODo0OCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIgNy83XSBOVU1BOiBwaW4gYmFja2VuZHMgdG8gTlVNQSBub2RlcwoKV2hlbiBpbml0aWFs aXppbmcgdGhlIGJhY2tlbmQsIHdlIHBpY2sgYSBQR1BST0MgZW50cnkgZnJvbSB0aGUgcmln aHQKTlVNQSBub2RlIHdoZXJlIHRoZSBiYWNrZW5kIGlzIHJ1bm5pbmcuIEJ1dCB0aGUgcHJv Y2VzcyBjYW4gbW92ZSB0byBhCmRpZmZlcmVudCBjb3JlIC8gbm9kZSwgc28gdG8gcHJldmVu dCB0aGF0IHdlIHBpbiBpdC4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5j ICAgICB8IDIxICsrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvdXRpbHMvaW5p dC9nbG9iYWxzLmMgICAgfCAgMSArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJs ZXMuYyB8IDEwICsrKysrKysrKysKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAg ICAgIHwgIDEgKwogNCBmaWxlcyBjaGFuZ2VkLCAzMyBpbnNlcnRpb25zKCspCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggOWQzZTk0YTdiM2EuLjRjOWU1NTYwOGIyIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisrKyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTcyOSw2ICs3MjksMjcgQEAgSW5pdFByb2Nl c3Modm9pZCkKIAl9CiAJTXlQcm9jTnVtYmVyID0gR2V0TnVtYmVyRnJvbVBHUHJvYyhNeVBy b2MpOwogCisJLyoKKwkgKiBPcHRpb25hbGx5LCByZXN0cmljdCB0aGUgcHJvY2VzcyB0byBv bmx5IHJ1biBvbiBDUFVzIGZyb20gdGhlIHNhbWUgTlVNQQorCSAqIGFzIHRoZSBQR1BST0Mu IFdlIGRvIHRoaXMgZXZlbiBpZiB0aGUgUEdQUk9DIGhhcyBhIGRpZmZlcmVudCBOVU1BIG5v ZGUsCisJICogYnV0IG5vdCBmb3IgUEdQUk9DIGVudHJpZXMgd2l0aG91dCBhIG5vZGUgKGku ZS4gYXV4LzJQQyBlbnRyaWVzKS4KKwkgKgorCSAqIFRoaXMgYWxzbyBtZWFucyB3ZSBvbmx5 IGRvIHRoaXMgd2l0aCBudW1hX3Byb2NzX2ludGVybGVhdmUsIGJlY2F1c2UKKwkgKiB3aXRo b3V0IHRoYXQgd2UnbGwgaGF2ZSBudW1hX25vZGU9LTEgZm9yIGFsbCBQR1BST0MgZW50cmll cy4KKwkgKgorCSAqIEZJWE1FIGFkZCBwcm9wZXIgZXJyb3ItY2hlY2tpbmcgZm9yIGxpYm51 bWEgZnVuY3Rpb25zCisJICovCisJaWYgKG51bWFfcHJvY3NfcGluICYmIE15UHJvYy0+bnVt YV9ub2RlICE9IC0xKQorCXsKKwkJc3RydWN0IGJpdG1hc2sgKmNwdW1hc2sgPSBudW1hX2Fs bG9jYXRlX2NwdW1hc2soKTsKKworCQludW1hX25vZGVfdG9fY3B1cyhNeVByb2MtPm51bWFf bm9kZSwgY3B1bWFzayk7CisKKwkJbnVtYV9zY2hlZF9zZXRhZmZpbml0eShNeVByb2NQaWQs IGNwdW1hc2spOworCisJCW51bWFfZnJlZV9jcHVtYXNrKGNwdW1hc2spOworCX0KKwogCS8q CiAJICogQ3Jvc3MtY2hlY2sgdGhhdCB0aGUgUEdQUk9DIGlzIG9mIHRoZSB0eXBlIHdlIGV4 cGVjdDsgaWYgdGhpcyB3ZXJlIG5vdAogCSAqIHRoZSBjYXNlLCBpdCB3b3VsZCBnZXQgcmV0 dXJuZWQgdG8gdGhlIHdyb25nIGxpc3QuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCmlu ZGV4IDZlZTQ2ODRkMWI4Li4zZjg4NjU5YjQ5ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvaW5pdC9nbG9iYWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9i YWxzLmMKQEAgLTE1MCw2ICsxNTAsNyBAQCBib29sCQludW1hX2J1ZmZlcnNfaW50ZXJsZWF2 ZSA9IGZhbHNlOwogYm9vbAkJbnVtYV9sb2NhbGFsbG9jID0gZmFsc2U7CiBib29sCQludW1h X3BhcnRpdGlvbl9mcmVlbGlzdCA9IGZhbHNlOwogYm9vbAkJbnVtYV9wcm9jc19pbnRlcmxl YXZlID0gZmFsc2U7Citib29sCQludW1hX3Byb2NzX3BpbiA9IGZhbHNlOwogCiAvKiBHVUMg cGFyYW1ldGVycyBmb3IgdmFjdXVtICovCiBpbnQJCQlWYWN1dW1CdWZmZXJVc2FnZUxpbWl0 ID0gMjA0ODsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxl cy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggN2I3MTg3 NjAyNDguLjg2MjM0MWUxMzdlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y190YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMu YwpAQCAtMjE1Niw2ICsyMTU2LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBDb25maWd1cmVO YW1lc0Jvb2xbXSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAogCisJeworCQl7Im51bWFf cHJvY3NfcGluIiwgUEdDX1BPU1RNQVNURVIsIERFVkVMT1BFUl9PUFRJT05TLAorCQkJZ2V0 dGV4dF9ub29wKCJFbmFibGVzIHBpbm5pbmcgYmFja2VuZHMgdG8gTlVNQSBub2RlcyAobWF0 Y2hpbmcgdGhlIFBHUFJPQyBub2RlKS4iKSwKKwkJCWdldHRleHRfbm9vcCgiV2hlbiBlbmFi bGVkLCBzZXRzIGFmZmluaXR5IHRvIENQVXMgZnJvbSB0aGUgc2FtZSBOVU1BIG5vZGUuIiks CisJCX0sCisJCSZudW1hX3Byb2NzX3BpbiwKKwkJZmFsc2UsCisJCU5VTEwsIE5VTEwsIE5V TEwKKwl9LAorCiAJewogCQl7InN5bmNfcmVwbGljYXRpb25fc2xvdHMiLCBQR0NfU0lHSFVQ LCBSRVBMSUNBVElPTl9TVEFOREJZLAogCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIGEgcGh5 c2ljYWwgc3RhbmRieSB0byBzeW5jaHJvbml6ZSBsb2dpY2FsIGZhaWxvdmVyIHJlcGxpY2F0 aW9uIHNsb3RzIGZyb20gdGhlIHByaW1hcnkgc2VydmVyLiIpLApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCBj ZGVlZThkY2NiYS4uYTk3NzQxYzY3MDcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2Nh ZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCkBAIC0xODIsNiArMTgyLDcg QEAgZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgbnVtYV9idWZmZXJzX2ludGVybGVhdmU7CiBl eHRlcm4gUEdETExJTVBPUlQgYm9vbCBudW1hX2xvY2FsYWxsb2M7CiBleHRlcm4gUEdETExJ TVBPUlQgYm9vbCBudW1hX3BhcnRpdGlvbl9mcmVlbGlzdDsKIGV4dGVybiBQR0RMTElNUE9S VCBib29sIG51bWFfcHJvY3NfaW50ZXJsZWF2ZTsKK2V4dGVybiBQR0RMTElNUE9SVCBib29s IG51bWFfcHJvY3NfcGluOwogCiBleHRlcm4gUEdETExJTVBPUlQgaW50IGNvbW1pdF90aW1l c3RhbXBfYnVmZmVyczsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbXVsdGl4YWN0X21lbWJl cl9idWZmZXJzOwotLSAKMi40OS4wCgo= --------------ZiLGGg5GsiuT6QTFDhUm0SgE Content-Type: text/x-patch; charset=UTF-8; name="v2-0006-NUMA-interleave-PGPROC-entries.patch" Content-Disposition: attachment; filename="v2-0006-NUMA-interleave-PGPROC-entries.patch" Content-Transfer-Encoding: base64 RnJvbSAwZDc5ZDJmYjZhYjlmMWQ1YjBiM2YwM2U1MDAzMTUxMzUzMjliMDllIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVGh1LCAyMiBNYXkgMjAyNSAxODozOTowOCArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIgNi83XSBOVU1BOiBpbnRlcmxlYXZlIFBHUFJPQyBlbnRyaWVzCgpUaGUgZ29hbCBpcyB0 byBkaXN0cmlidXRlIFByb2NBcnJheSAob3IgcmF0aGVyIFBHUFJPQyBlbnRyaWVzIGFuZAph c3NvY2lhdGVkIGZhc3QtcGF0aCBhcnJheXMpIHRvIE5VTUEgbm9kZXMuCgpXZSBjYW4ndCBk byB0aGlzIGJ5IHNpbXBseSBpbnRlcmxlYXZpbmcgcGFnZXMsIGJlY2F1c2UgdGhhdCB3b3Vs ZG4ndAp3b3JrIGZvciBib3RoIHBhcnRzIGF0IHRoZSBzYW1lIHRpbWUuIFdlIHdhbnQgdG8g cGxhY2UgdGhlIFBHUFJPQyBhbmQKaXQncyBmYXN0LXBhdGggbG9ja2luZyBzdHJ1Y3RzIG9u IHRoZSBzYW1lIG5vZGUsIGJ1dCB0aGUgc3RydWN0cyBhcmUKb2YgZGlmZmVyZW50IHNpemVz LCBldGMuCgpBbm90aGVyIHByb2JsZW0gaXMgdGhhdCBQR1BST0MgZW50cmllcyBhcmUgZmFp cmx5IHNtYWxsLCBzbyB3aXRoIGh1Z2UKcGFnZXMgYW5kIHJlYXNvbmFibGUgdmFsdWVzIG9m IG1heF9jb25uZWN0aW9ucyBldmVyeXRoaW5nIGZpdHMgb250byBhCnNpbmdsZSBwYWdlLiBX ZSBkb24ndCB3YW50IHRvIG1ha2UgdGhpcyBpbmNvbXBhdGlibGUgd2l0aCBodWdlIHBhZ2Vz LgoKTm90ZTogSWYgd2UgZXZlbnR1YWxseSBzd2l0Y2ggdG8gYWxsb2NhdGluZyBzZXBhcmF0 ZSBzaGFyZWQgc2VnbWVudHMgZm9yCmRpZmZlcmVudCBwYXJ0cyAodG8gYWxsb3cgb24tbGlu ZSByZXNpemluZyksIHdlIGNvdWxkIGtlZXAgdXNpbmcgcmVndWxhcgpwYWdlcyBmb3IgcHJv Y2FycmF5LCBhbmQgdGhpcyB3b3VsZCBub3QgYmUgc3VjaCBhbiBpc3N1ZS4KClRvIG1ha2Ug dGhpcyB3b3JrLCB3ZSBzcGxpdCB0aGUgUEdQUk9DIGFycmF5IGludG8gcGVyLW5vZGUgc2Vn bWVudHMsCmVhY2ggd2l0aCBhYm91dCAoTWF4QmFja2VuZHMgLyBudW1hX25vZGVzKSBlbnRy aWVzLCBhbmQgb25lIHNlZ21lbnQgZm9yCmF1eGlsaWFyeSBwcm9jZXNzZXMgYW5kIHByZXBh cmVkIHRyYW5zYXRpb25zLiBBbmQgd2UgZG8gdGhlIHNhbWUgdGhpbmcKZm9yIGZhc3QtcGF0 aCBhcnJheXMuCgpUaGUgUEdQUk9DIHNlZ21lbnRzIGFyZSBsYWlkIG91dCBsaWtlIHRoaXMg KGUuZy4gZm9yIDIgTlVNQSBub2Rlcyk6CgogLSBQR1BST0MgYXJyYXkgLyBub2RlICMwCiAt IFBHUFJPQyBhcnJheSAvIG5vZGUgIzEKIC0gUEdQUk9DIGFycmF5IC8gYXV4IHByb2Nlc3Nl cyArIDJQQyB0cmFuc2FjdGlvbnMKIC0gZmFzdC1wYXRoIGFycmF5cyAvIG5vZGUgIzAKIC0g ZmFzdC1wYXRoIGFycmF5cyAvIG5vZGUgIzEKIC0gZmFzdC1wYXRoIGFycmF5cyAvIGF1eCBw cm9jZXNzZXMgKyAyUEMgdHJhbnNhY3Rpb24KCkVhY2ggc2VnbWVudCBpcyBhbGlnbmVkIHRv IChzdGFydHMgYXQpIG1lbW9yeSBwYWdlLCBhbmQgaXMgZWZmZWN0aXZlbHkgYQptdWx0aXBs ZSBvZiBtdWx0aXBsZSBtZW1vcnkgcGFnZXMuCgpIYXZpbmcgYSBzaW5nbGUgUEdQUk9DIGFy cmF5IG1hZGUgY2VydGFpbiBvcGVyYXRpb25zIGVhc2llcnMgLSBlLmcuIGl0CndhcyBwb3Nz aWJsZSB0byBpdGVyYXRlIHRoZSBhcnJheSwgYW5kIEdldE51bWJlckZyb21QR1Byb2MoKSBj b3VsZApjYWxjdWxhdGUgb2Zmc2V0IGJ5IHNpbXBseSBzdWJ0cmFjdGluZyBQR1BST0MgcG9p bnRlcnMuIFdpdGggbXVsdGlwbGUKc2VnbWVudHMgdGhhdCdzIG5vdCBwb3NzaWJsZSwgYnV0 IHRoZSBmYWxsb3V0IGlzIG1pbmltYWwuCgpNb3N0IHBsYWNlcyBhY2Nlc3NlZCBQR1BST0Mg dGhyb3VnaCBQUk9DX0hEUi0+YWxsUHJvY3MsIGFuZCBjYW4gY29udGludWUKdG8gZG8gc28s IGV4Y2VwdCB0aGF0IG5vdyB0aGV5IGdldCBhIHBvaW50ZXIgdG8gdGhlIFBHUFJPQyAod2hp Y2ggbW9zdApwbGFjZXMgd2FudGVkIGFueXdheSkuCgpOb3RlOiBUaGVyZSdzIGFuIGluZGly ZWN0aW9uLCB0aG91Z2guIEJ1dCB0aGUgcG9pbnRlciBkb2VzIG5vdCBjaGFuZ2UsCnNvIGhv cGVmdWxseSB0aGF0J3Mgbm90IGFuIGlzc3VlLiBBbmQgZWFjaCBQR1BST0MgZW50cnkgZ2V0 cyBhbiBleHBsaWNpdApwcm9jbnVtYmVyIGZpZWxkLCB3aGljaCBpcyB0aGUgaW5kZXggaW4g YWxsUHJvY3MsIEdldE51bWJlckZyb21QR1Byb2MKY2FuIHNpbXBseSByZXR1cm4gdGhhdC4K CkVhY2ggUEdQUk9DIGFsc28gZ2V0cyBudW1hX25vZGUsIHRyYWNraW5nIHRoZSBOVU1BIG5v ZGUsIHNvIHRoYXQgd2UKZG9uJ3QgaGF2ZSB0byByZWNhbGN1bGF0ZSB0aGF0LiBUaGlzIGlz IHVzZWQgYnkgSW5pdFByb2Nlc3MoKSB0byBwaWNrCmEgUEdQUk9DIGVudHJ5IGZyb20gdGhl IGxvY2FsIE5VTUEgbm9kZS4KCk5vdGU6IFRoZSBzY2hlZHVsZXIgbWF5IG1pZ3JhdGUgdGhl IHByb2Nlc3MgdG8gYSBkaWZmZXJlbnQgQ1BVL25vZGUKbGF0ZXIuIE1heWJlIHdlIHNob3Vs ZCBjb25zaWRlciBwaW5uaW5nIHRoZSBwcm9jZXNzIHRvIHRoZSBub2RlPwotLS0KIHNyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL2Nsb2cuYyAgICAgIHwgICA0ICstCiBzcmMvYmFja2Vu ZC9wb3N0bWFzdGVyL3BnYXJjaC5jICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci93YWxzdW1tYXJpemVyLmMgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2ZyZWVsaXN0LmMgIHwgICAyICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9w cm9jYXJyYXkuYyAgICB8ICA2MSArKy0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9j ay5jICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyAg ICAgICAgfCAzNjggKysrKysrKysrKysrKysrKysrKysrKystLQogc3JjL2JhY2tlbmQvdXRp bHMvaW5pdC9nbG9iYWxzLmMgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfdGFibGVzLmMgICAgfCAgMTAgKwogc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggICAg ICAgICAgICAgICAgfCAgIDEgKwogc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jLmggICAgICAg ICAgICAgfCAgMTEgKy0KIDExIGZpbGVzIGNoYW5nZWQsIDQwNiBpbnNlcnRpb25zKCspLCA2 MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9jbG9nLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9jbG9nLmMKaW5kZXggZTgw ZmJlMTA5Y2YuLjkyOGQxMjZkMGVlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS9jbG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vY2xvZy5j CkBAIC01NzQsNyArNTc0LDcgQEAgVHJhbnNhY3Rpb25Hcm91cFVwZGF0ZVhpZFN0YXR1cyhU cmFuc2FjdGlvbklkIHhpZCwgWGlkU3RhdHVzIHN0YXR1cywKIAkvKiBXYWxrIHRoZSBsaXN0 IGFuZCB1cGRhdGUgdGhlIHN0YXR1cyBvZiBhbGwgWElEcy4gKi8KIAl3aGlsZSAobmV4dGlk eCAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQogCXsKLQkJUEdQUk9DCSAgICpuZXh0cHJvYyA9 ICZQcm9jR2xvYmFsLT5hbGxQcm9jc1tuZXh0aWR4XTsKKwkJUEdQUk9DCSAgICpuZXh0cHJv YyA9IFByb2NHbG9iYWwtPmFsbFByb2NzW25leHRpZHhdOwogCQlpbnQ2NAkJdGhpc3BhZ2Vu byA9IG5leHRwcm9jLT5jbG9nR3JvdXBNZW1iZXJQYWdlOwogCiAJCS8qCkBAIC02MzMsNyAr NjMzLDcgQEAgVHJhbnNhY3Rpb25Hcm91cFVwZGF0ZVhpZFN0YXR1cyhUcmFuc2FjdGlvbklk IHhpZCwgWGlkU3RhdHVzIHN0YXR1cywKIAkgKi8KIAl3aGlsZSAod2FrZWlkeCAhPSBJTlZB TElEX1BST0NfTlVNQkVSKQogCXsKLQkJUEdQUk9DCSAgICp3YWtlcHJvYyA9ICZQcm9jR2xv YmFsLT5hbGxQcm9jc1t3YWtlaWR4XTsKKwkJUEdQUk9DCSAgICp3YWtlcHJvYyA9IFByb2NH bG9iYWwtPmFsbFByb2NzW3dha2VpZHhdOwogCiAJCXdha2VpZHggPSBwZ19hdG9taWNfcmVh ZF91MzIoJndha2Vwcm9jLT5jbG9nR3JvdXBOZXh0KTsKIAkJcGdfYXRvbWljX3dyaXRlX3Uz Migmd2FrZXByb2MtPmNsb2dHcm91cE5leHQsIElOVkFMSURfUFJPQ19OVU1CRVIpOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9wZ2FyY2guYyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvcGdhcmNoLmMKaW5kZXggNzhlMzllNWY4NjYuLmUyOGUwZjdkM2JkIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3BnYXJjaC5jCisrKyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvcGdhcmNoLmMKQEAgLTI4OSw3ICsyODksNyBAQCBQZ0FyY2hX YWtldXAodm9pZCkKIAkgKiBiZSByZWxhdW5jaGVkIHNob3J0bHkgYW5kIHdpbGwgc3RhcnQg YXJjaGl2aW5nLgogCSAqLwogCWlmIChhcmNoX3BncHJvY25vICE9IElOVkFMSURfUFJPQ19O VU1CRVIpCi0JCVNldExhdGNoKCZQcm9jR2xvYmFsLT5hbGxQcm9jc1thcmNoX3BncHJvY25v XS5wcm9jTGF0Y2gpOworCQlTZXRMYXRjaCgmUHJvY0dsb2JhbC0+YWxsUHJvY3NbYXJjaF9w Z3Byb2Nub10tPnByb2NMYXRjaCk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dh bHN1bW1hcml6ZXIuYwppbmRleCA3NzdjOWE4ZDU1NS4uMDg3Mjc5YTZhOGUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jCisrKyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jCkBAIC02NDksNyArNjQ5LDcgQEAg V2FrZXVwV2FsU3VtbWFyaXplcih2b2lkKQogCUxXTG9ja1JlbGVhc2UoV0FMU3VtbWFyaXpl ckxvY2spOwogCiAJaWYgKHBncHJvY25vICE9IElOVkFMSURfUFJPQ19OVU1CRVIpCi0JCVNl dExhdGNoKCZQcm9jR2xvYmFsLT5hbGxQcm9jc1twZ3Byb2Nub10ucHJvY0xhdGNoKTsKKwkJ U2V0TGF0Y2goJlByb2NHbG9iYWwtPmFsbFByb2NzW3BncHJvY25vXS0+cHJvY0xhdGNoKTsK IH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVs aXN0LmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCmluZGV4IDE4 MjdlMDUyZGE3Li4yY2UxNThjYTliZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvZnJlZWxpc3QuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9m cmVlbGlzdC5jCkBAIC00NDYsNyArNDQ2LDcgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVy QWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpmcm9t X3IKIAkJICogYWN0dWFsbHkgZmluZSBiZWNhdXNlIHByb2NMYXRjaCBpc24ndCBldmVyIGZy ZWVkLCBzbyB3ZSBqdXN0IGNhbgogCQkgKiBwb3RlbnRpYWxseSBzZXQgdGhlIHdyb25nIHBy b2Nlc3MnIChvciBubyBwcm9jZXNzJykgbGF0Y2guCiAJCSAqLwotCQlTZXRMYXRjaCgmUHJv Y0dsb2JhbC0+YWxsUHJvY3NbYmd3cHJvY25vXS5wcm9jTGF0Y2gpOworCQlTZXRMYXRjaCgm UHJvY0dsb2JhbC0+YWxsUHJvY3NbYmd3cHJvY25vXS0+cHJvY0xhdGNoKTsKIAl9CiAKIAkv KgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY2FycmF5LmMgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jYXJyYXkuYwppbmRleCAyNDE4OTY3ZGVmNi4u ODIxNThlZWI1ZDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2Nh cnJheS5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NhcnJheS5jCkBAIC0y NjgsNyArMjY4LDcgQEAgdHlwZWRlZiBlbnVtIEtBWENvbXByZXNzUmVhc29uCiAKIHN0YXRp YyBQcm9jQXJyYXlTdHJ1Y3QgKnByb2NBcnJheTsKIAotc3RhdGljIFBHUFJPQyAqYWxsUHJv Y3M7CitzdGF0aWMgUEdQUk9DICoqYWxsUHJvY3M7CiAKIC8qCiAgKiBDYWNoZSB0byByZWR1 Y2Ugb3ZlcmhlYWQgb2YgcmVwZWF0ZWQgY2FsbHMgdG8gVHJhbnNhY3Rpb25JZElzSW5Qcm9n cmVzcygpCkBAIC01MDIsNyArNTAyLDcgQEAgUHJvY0FycmF5QWRkKFBHUFJPQyAqcHJvYykK IAkJaW50CQkJdGhpc19wcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07CiAKIAkJ QXNzZXJ0KHRoaXNfcHJvY25vID49IDAgJiYgdGhpc19wcm9jbm8gPCAoYXJyYXlQLT5tYXhQ cm9jcyArIE5VTV9BVVhJTElBUllfUFJPQ1MpKTsKLQkJQXNzZXJ0KGFsbFByb2NzW3RoaXNf cHJvY25vXS5wZ3hhY3RvZmYgPT0gaW5kZXgpOworCQlBc3NlcnQoYWxsUHJvY3NbdGhpc19w cm9jbm9dLT5wZ3hhY3RvZmYgPT0gaW5kZXgpOwogCiAJCS8qIElmIHdlIGhhdmUgZm91bmQg b3VyIHJpZ2h0IHBvc2l0aW9uIGluIHRoZSBhcnJheSwgYnJlYWsgKi8KIAkJaWYgKHRoaXNf cHJvY25vID4gcGdwcm9jbm8pCkBAIC01MzgsOSArNTM4LDkgQEAgUHJvY0FycmF5QWRkKFBH UFJPQyAqcHJvYykKIAkJaW50CQkJcHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhd OwogCiAJCUFzc2VydChwcm9jbm8gPj0gMCAmJiBwcm9jbm8gPCAoYXJyYXlQLT5tYXhQcm9j cyArIE5VTV9BVVhJTElBUllfUFJPQ1MpKTsKLQkJQXNzZXJ0KGFsbFByb2NzW3Byb2Nub10u cGd4YWN0b2ZmID09IGluZGV4IC0gMSk7CisJCUFzc2VydChhbGxQcm9jc1twcm9jbm9dLT5w Z3hhY3RvZmYgPT0gaW5kZXggLSAxKTsKIAotCQlhbGxQcm9jc1twcm9jbm9dLnBneGFjdG9m ZiA9IGluZGV4OworCQlhbGxQcm9jc1twcm9jbm9dLT5wZ3hhY3RvZmYgPSBpbmRleDsKIAl9 CiAKIAkvKgpAQCAtNTgxLDcgKzU4MSw3IEBAIFByb2NBcnJheVJlbW92ZShQR1BST0MgKnBy b2MsIFRyYW5zYWN0aW9uSWQgbGF0ZXN0WGlkKQogCW15b2ZmID0gcHJvYy0+cGd4YWN0b2Zm OwogCiAJQXNzZXJ0KG15b2ZmID49IDAgJiYgbXlvZmYgPCBhcnJheVAtPm51bVByb2NzKTsK LQlBc3NlcnQoUHJvY0dsb2JhbC0+YWxsUHJvY3NbYXJyYXlQLT5wZ3Byb2Nub3NbbXlvZmZd XS5wZ3hhY3RvZmYgPT0gbXlvZmYpOworCUFzc2VydChQcm9jR2xvYmFsLT5hbGxQcm9jc1th cnJheVAtPnBncHJvY25vc1tteW9mZl1dLT5wZ3hhY3RvZmYgPT0gbXlvZmYpOwogCiAJaWYg KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKGxhdGVzdFhpZCkpCiAJewpAQCAtNjM2LDkgKzYzNiw5 IEBAIFByb2NBcnJheVJlbW92ZShQR1BST0MgKnByb2MsIFRyYW5zYWN0aW9uSWQgbGF0ZXN0 WGlkKQogCQlpbnQJCQlwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07CiAKIAkJ QXNzZXJ0KHByb2NubyA+PSAwICYmIHByb2NubyA8IChhcnJheVAtPm1heFByb2NzICsgTlVN X0FVWElMSUFSWV9QUk9DUykpOwotCQlBc3NlcnQoYWxsUHJvY3NbcHJvY25vXS5wZ3hhY3Rv ZmYgLSAxID09IGluZGV4KTsKKwkJQXNzZXJ0KGFsbFByb2NzW3Byb2Nub10tPnBneGFjdG9m ZiAtIDEgPT0gaW5kZXgpOwogCi0JCWFsbFByb2NzW3Byb2Nub10ucGd4YWN0b2ZmID0gaW5k ZXg7CisJCWFsbFByb2NzW3Byb2Nub10tPnBneGFjdG9mZiA9IGluZGV4OwogCX0KIAogCS8q CkBAIC04NjAsNyArODYwLDcgQEAgUHJvY0FycmF5R3JvdXBDbGVhclhpZChQR1BST0MgKnBy b2MsIFRyYW5zYWN0aW9uSWQgbGF0ZXN0WGlkKQogCS8qIFdhbGsgdGhlIGxpc3QgYW5kIGNs ZWFyIGFsbCBYSURzLiAqLwogCXdoaWxlIChuZXh0aWR4ICE9IElOVkFMSURfUFJPQ19OVU1C RVIpCiAJewotCQlQR1BST0MJICAgKm5leHRwcm9jID0gJmFsbFByb2NzW25leHRpZHhdOwor CQlQR1BST0MJICAgKm5leHRwcm9jID0gYWxsUHJvY3NbbmV4dGlkeF07CiAKIAkJUHJvY0Fy cmF5RW5kVHJhbnNhY3Rpb25JbnRlcm5hbChuZXh0cHJvYywgbmV4dHByb2MtPnByb2NBcnJh eUdyb3VwTWVtYmVyWGlkKTsKIApAQCAtODgwLDcgKzg4MCw3IEBAIFByb2NBcnJheUdyb3Vw Q2xlYXJYaWQoUEdQUk9DICpwcm9jLCBUcmFuc2FjdGlvbklkIGxhdGVzdFhpZCkKIAkgKi8K IAl3aGlsZSAod2FrZWlkeCAhPSBJTlZBTElEX1BST0NfTlVNQkVSKQogCXsKLQkJUEdQUk9D CSAgICpuZXh0cHJvYyA9ICZhbGxQcm9jc1t3YWtlaWR4XTsKKwkJUEdQUk9DCSAgICpuZXh0 cHJvYyA9IGFsbFByb2NzW3dha2VpZHhdOwogCiAJCXdha2VpZHggPSBwZ19hdG9taWNfcmVh ZF91MzIoJm5leHRwcm9jLT5wcm9jQXJyYXlHcm91cE5leHQpOwogCQlwZ19hdG9taWNfd3Jp dGVfdTMyKCZuZXh0cHJvYy0+cHJvY0FycmF5R3JvdXBOZXh0LCBJTlZBTElEX1BST0NfTlVN QkVSKTsKQEAgLTE1MjYsNyArMTUyNiw3IEBAIFRyYW5zYWN0aW9uSWRJc0luUHJvZ3Jlc3Mo VHJhbnNhY3Rpb25JZCB4aWQpCiAJCXB4aWRzID0gb3RoZXJfc3VieGlkc3RhdGVzW3BneGFj dG9mZl0uY291bnQ7CiAJCXBnX3JlYWRfYmFycmllcigpOwkJLyogcGFpcnMgd2l0aCBiYXJy aWVyIGluIEdldE5ld1RyYW5zYWN0aW9uSWQoKSAqLwogCQlwZ3Byb2NubyA9IGFycmF5UC0+ cGdwcm9jbm9zW3BneGFjdG9mZl07Ci0JCXByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOwor CQlwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCQlmb3IgKGogPSBweGlkcyAtIDE7IGog Pj0gMDsgai0tKQogCQl7CiAJCQkvKiBGZXRjaCB4aWQganVzdCBvbmNlIC0gc2VlIEdldE5l d1RyYW5zYWN0aW9uSWQgKi8KQEAgLTE2MjIsNyArMTYyMiw2IEBAIFRyYW5zYWN0aW9uSWRJ c0luUHJvZ3Jlc3MoVHJhbnNhY3Rpb25JZCB4aWQpCiAJcmV0dXJuIGZhbHNlOwogfQogCi0K IC8qCiAgKiBEZXRlcm1pbmUgWElEIGhvcml6b25zLgogICoKQEAgLTE3NDAsNyArMTczOSw3 IEBAIENvbXB1dGVYaWRIb3Jpem9ucyhDb21wdXRlWGlkSG9yaXpvbnNSZXN1bHQgKmgpCiAJ Zm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4Kysp CiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJ UEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpw cm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCQlpbnQ4CQlzdGF0dXNGbGFncyA9IFByb2NH bG9iYWwtPnN0YXR1c0ZsYWdzW2luZGV4XTsKIAkJVHJhbnNhY3Rpb25JZCB4aWQ7CiAJCVRy YW5zYWN0aW9uSWQgeG1pbjsKQEAgLTIyMjQsNyArMjIyMyw3IEBAIEdldFNuYXBzaG90RGF0 YShTbmFwc2hvdCBzbmFwc2hvdCkKIAkJCVRyYW5zYWN0aW9uSWQgeGlkID0gVUlOVDMyX0FD Q0VTU19PTkNFKG90aGVyX3hpZHNbcGd4YWN0b2ZmXSk7CiAJCQl1aW50OAkJc3RhdHVzRmxh Z3M7CiAKLQkJCUFzc2VydChhbGxQcm9jc1thcnJheVAtPnBncHJvY25vc1twZ3hhY3RvZmZd XS5wZ3hhY3RvZmYgPT0gcGd4YWN0b2ZmKTsKKwkJCUFzc2VydChhbGxQcm9jc1thcnJheVAt PnBncHJvY25vc1twZ3hhY3RvZmZdXS0+cGd4YWN0b2ZmID09IHBneGFjdG9mZik7CiAKIAkJ CS8qCiAJCQkgKiBJZiB0aGUgdHJhbnNhY3Rpb24gaGFzIG5vIFhJRCBhc3NpZ25lZCwgd2Ug Y2FuIHNraXAgaXQ7IGl0CkBAIC0yMjk4LDcgKzIyOTcsNyBAQCBHZXRTbmFwc2hvdERhdGEo U25hcHNob3Qgc25hcHNob3QpCiAJCQkJCWlmIChuc3VieGlkcyA+IDApCiAJCQkJCXsKIAkJ CQkJCWludAkJCXBncHJvY25vID0gcGdwcm9jbm9zW3BneGFjdG9mZl07Ci0JCQkJCQlQR1BS T0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQkJCQkJUEdQUk9DCSAgICpw cm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJCQkJCQlwZ19yZWFkX2JhcnJpZXIoKTsJ LyogcGFpcnMgd2l0aCBHZXROZXdUcmFuc2FjdGlvbklkICovCiAKQEAgLTI0OTksNyArMjQ5 OCw3IEBAIFByb2NBcnJheUluc3RhbGxJbXBvcnRlZFhtaW4oVHJhbnNhY3Rpb25JZCB4bWlu LAogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4Kysp CiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJ UEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpw cm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCQlpbnQJCQlzdGF0dXNGbGFncyA9IFByb2NH bG9iYWwtPnN0YXR1c0ZsYWdzW2luZGV4XTsKIAkJVHJhbnNhY3Rpb25JZCB4aWQ7CiAKQEAg LTI3MjUsNyArMjcyNCw3IEBAIEdldFJ1bm5pbmdUcmFuc2FjdGlvbkRhdGEodm9pZCkKIAkJ aWYgKFRyYW5zYWN0aW9uSWRQcmVjZWRlcyh4aWQsIG9sZGVzdERhdGFiYXNlUnVubmluZ1hp ZCkpCiAJCXsKIAkJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhd OwotCQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJCVBHUFJP QwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25vXTsKIAogCQkJaWYgKHByb2MtPmRhdGFi YXNlSWQgPT0gTXlEYXRhYmFzZUlkKQogCQkJCW9sZGVzdERhdGFiYXNlUnVubmluZ1hpZCA9 IHhpZDsKQEAgLTI3NTYsNyArMjc1NSw3IEBAIEdldFJ1bm5pbmdUcmFuc2FjdGlvbkRhdGEo dm9pZCkKIAkJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5k ZXgrKykKIAkJewogCQkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRl eF07Ci0JCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQkJUEdQ Uk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCQkJaW50CQkJbnN1YnhpZHM7 CiAKIAkJCS8qCkBAIC0zMDA2LDcgKzMwMDUsNyBAQCBHZXRWaXJ0dWFsWElEc0RlbGF5aW5n Q2hrcHQoaW50ICpudnhpZHMsIGludCB0eXBlKQogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8 IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJewogCQlpbnQJCQlwZ3Byb2NubyA9IGFy cmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJUEdQUk9DCSAgICpwcm9jID0gJmFsbFByb2Nz W3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwog CiAJCWlmICgocHJvYy0+ZGVsYXlDaGtwdEZsYWdzICYgdHlwZSkgIT0gMCkKIAkJewpAQCAt MzA0Nyw3ICszMDQ2LDcgQEAgSGF2ZVZpcnR1YWxYSURzRGVsYXlpbmdDaGtwdChWaXJ0dWFs VHJhbnNhY3Rpb25JZCAqdnhpZHMsIGludCBudnhpZHMsIGludCB0eXBlKQogCWZvciAoaW5k ZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJewogCQlpbnQJ CQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJUEdQUk9DCSAgICpw cm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJv Y3NbcGdwcm9jbm9dOwogCQlWaXJ0dWFsVHJhbnNhY3Rpb25JZCB2eGlkOwogCiAJCUdFVF9W WElEX0ZST01fUEdQUk9DKHZ4aWQsICpwcm9jKTsKQEAgLTMxNzUsNyArMzE3NCw3IEBAIEJh Y2tlbmRQaWRHZXRQcm9jV2l0aExvY2soaW50IHBpZCkKIAogCWZvciAoaW5kZXggPSAwOyBp bmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJewotCQlQR1BST0MJICAgKnBy b2MgPSAmYWxsUHJvY3NbYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdXTsKKwkJUEdQUk9DCSAg ICpwcm9jID0gYWxsUHJvY3NbYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdXTsKIAogCQlpZiAo cHJvYy0+cGlkID09IHBpZCkKIAkJewpAQCAtMzIxOCw3ICszMjE3LDcgQEAgQmFja2VuZFhp ZEdldFBpZChUcmFuc2FjdGlvbklkIHhpZCkKIAkJaWYgKG90aGVyX3hpZHNbaW5kZXhdID09 IHhpZCkKIAkJewogCQkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRl eF07Ci0JCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQkJUEdQ Uk9DCSAgICpwcm9jID0gYWxsUHJvY3NbcGdwcm9jbm9dOwogCiAJCQlyZXN1bHQgPSBwcm9j LT5waWQ7CiAJCQlicmVhazsKQEAgLTMyODcsNyArMzI4Niw3IEBAIEdldEN1cnJlbnRWaXJ0 dWFsWElEcyhUcmFuc2FjdGlvbklkIGxpbWl0WG1pbiwgYm9vbCBleGNsdWRlWG1pbjAsCiAJ Zm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7 CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BS T0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJICAgKnByb2Mg PSBhbGxQcm9jc1twZ3Byb2Nub107CiAJCXVpbnQ4CQlzdGF0dXNGbGFncyA9IFByb2NHbG9i YWwtPnN0YXR1c0ZsYWdzW2luZGV4XTsKIAogCQlpZiAocHJvYyA9PSBNeVByb2MpCkBAIC0z Mzg5LDcgKzMzODgsNyBAQCBHZXRDb25mbGljdGluZ1ZpcnR1YWxYSURzKFRyYW5zYWN0aW9u SWQgbGltaXRYbWluLCBPaWQgZGJPaWQpCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJy YXlQLT5udW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQ LT5wZ3Byb2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdw cm9jbm9dOworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAKIAkJ LyogRXhjbHVkZSBwcmVwYXJlZCB0cmFuc2FjdGlvbnMgKi8KIAkJaWYgKHByb2MtPnBpZCA9 PSAwKQpAQCAtMzQ1NCw3ICszNDUzLDcgQEAgU2lnbmFsVmlydHVhbFRyYW5zYWN0aW9uKFZp cnR1YWxUcmFuc2FjdGlvbklkIHZ4aWQsIFByb2NTaWduYWxSZWFzb24gc2lnbW9kZSwKIAlm b3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCXsK IAkJaW50CQkJcGdwcm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJP QwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9 IGFsbFByb2NzW3BncHJvY25vXTsKIAkJVmlydHVhbFRyYW5zYWN0aW9uSWQgcHJvY3Z4aWQ7 CiAKIAkJR0VUX1ZYSURfRlJPTV9QR1BST0MocHJvY3Z4aWQsICpwcm9jKTsKQEAgLTM1MDks NyArMzUwOCw3IEBAIE1pbmltdW1BY3RpdmVCYWNrZW5kcyhpbnQgbWluKQogCWZvciAoaW5k ZXggPSAwOyBpbmRleCA8IGFycmF5UC0+bnVtUHJvY3M7IGluZGV4KyspCiAJewogCQlpbnQJ CQlwZ3Byb2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJUEdQUk9DCSAgICpw cm9jID0gJmFsbFByb2NzW3BncHJvY25vXTsKKwkJUEdQUk9DCSAgICpwcm9jID0gYWxsUHJv Y3NbcGdwcm9jbm9dOwogCiAJCS8qCiAJCSAqIFNpbmNlIHdlJ3JlIG5vdCBob2xkaW5nIGEg bG9jaywgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBkZWFsIHdpdGgKQEAgLTM1NTUsNyArMzU1 NCw3IEBAIENvdW50REJCYWNrZW5kcyhPaWQgZGF0YWJhc2VpZCkKIAlmb3IgKGluZGV4ID0g MDsgaW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50CQkJcGdw cm9jbm8gPSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9 ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3Bn cHJvY25vXTsKIAogCQlpZiAocHJvYy0+cGlkID09IDApCiAJCQljb250aW51ZTsJCQkvKiBk byBub3QgY291bnQgcHJlcGFyZWQgeGFjdHMgKi8KQEAgLTM1ODQsNyArMzU4Myw3IEBAIENv dW50REJDb25uZWN0aW9ucyhPaWQgZGF0YWJhc2VpZCkKIAlmb3IgKGluZGV4ID0gMDsgaW5k ZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCXsKIAkJaW50CQkJcGdwcm9jbm8g PSBhcnJheVAtPnBncHJvY25vc1tpbmRleF07Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZhbGxQ cm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9IGFsbFByb2NzW3BncHJvY25v XTsKIAogCQlpZiAocHJvYy0+cGlkID09IDApCiAJCQljb250aW51ZTsJCQkvKiBkbyBub3Qg Y291bnQgcHJlcGFyZWQgeGFjdHMgKi8KQEAgLTM2MTUsNyArMzYxNCw3IEBAIENhbmNlbERC QmFja2VuZHMoT2lkIGRhdGFiYXNlaWQsIFByb2NTaWduYWxSZWFzb24gc2lnbW9kZSwgYm9v bCBjb25mbGljdFBlbmRpbmcpCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5u dW1Qcm9jczsgaW5kZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3By b2Nub3NbaW5kZXhdOwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9d OworCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAKIAkJaWYgKGRh dGFiYXNlaWQgPT0gSW52YWxpZE9pZCB8fCBwcm9jLT5kYXRhYmFzZUlkID09IGRhdGFiYXNl aWQpCiAJCXsKQEAgLTM2NTYsNyArMzY1NSw3IEBAIENvdW50VXNlckJhY2tlbmRzKE9pZCBy b2xlaWQpCiAJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlQLT5udW1Qcm9jczsgaW5k ZXgrKykKIAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaW5kZXhd OwotCQlQR1BST0MJICAgKnByb2MgPSAmYWxsUHJvY3NbcGdwcm9jbm9dOworCQlQR1BST0MJ ICAgKnByb2MgPSBhbGxQcm9jc1twZ3Byb2Nub107CiAKIAkJaWYgKHByb2MtPnBpZCA9PSAw KQogCQkJY29udGludWU7CQkJLyogZG8gbm90IGNvdW50IHByZXBhcmVkIHhhY3RzICovCkBA IC0zNzE5LDcgKzM3MTgsNyBAQCBDb3VudE90aGVyREJCYWNrZW5kcyhPaWQgZGF0YWJhc2VJ ZCwgaW50ICpuYmFja2VuZHMsIGludCAqbnByZXBhcmVkKQogCQlmb3IgKGluZGV4ID0gMDsg aW5kZXggPCBhcnJheVAtPm51bVByb2NzOyBpbmRleCsrKQogCQl7CiAJCQlpbnQJCQlwZ3By b2NubyA9IGFycmF5UC0+cGdwcm9jbm9zW2luZGV4XTsKLQkJCVBHUFJPQwkgICAqcHJvYyA9 ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCQlQR1BST0MJICAgKnByb2MgPSBhbGxQcm9jc1tw Z3Byb2Nub107CiAJCQl1aW50OAkJc3RhdHVzRmxhZ3MgPSBQcm9jR2xvYmFsLT5zdGF0dXNG bGFnc1tpbmRleF07CiAKIAkJCWlmIChwcm9jLT5kYXRhYmFzZUlkICE9IGRhdGFiYXNlSWQp CkBAIC0zNzg1LDcgKzM3ODQsNyBAQCBUZXJtaW5hdGVPdGhlckRCQmFja2VuZHMoT2lkIGRh dGFiYXNlSWQpCiAJZm9yIChpID0gMDsgaSA8IHByb2NBcnJheS0+bnVtUHJvY3M7IGkrKykK IAl7CiAJCWludAkJCXBncHJvY25vID0gYXJyYXlQLT5wZ3Byb2Nub3NbaV07Ci0JCVBHUFJP QwkgICAqcHJvYyA9ICZhbGxQcm9jc1twZ3Byb2Nub107CisJCVBHUFJPQwkgICAqcHJvYyA9 IGFsbFByb2NzW3BncHJvY25vXTsKIAogCQlpZiAocHJvYy0+ZGF0YWJhc2VJZCAhPSBkYXRh YmFzZUlkKQogCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdl L2xtZ3IvbG9jay5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYwppbmRleCA2 MmYzNDcxNDQ4ZS4uYzg0YTJhNWYxYmMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvbG1nci9sb2NrLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYwpA QCAtMjg0NCw3ICsyODQ0LDcgQEAgRmFzdFBhdGhUcmFuc2ZlclJlbGF0aW9uTG9ja3MoTG9j a01ldGhvZCBsb2NrTWV0aG9kVGFibGUsIGNvbnN0IExPQ0tUQUcgKmxvY2t0YWcKIAkgKi8K IAlmb3IgKGkgPSAwOyBpIDwgUHJvY0dsb2JhbC0+YWxsUHJvY0NvdW50OyBpKyspCiAJewot CQlQR1BST0MJICAgKnByb2MgPSAmUHJvY0dsb2JhbC0+YWxsUHJvY3NbaV07CisJCVBHUFJP QwkgICAqcHJvYyA9IFByb2NHbG9iYWwtPmFsbFByb2NzW2ldOwogCQl1aW50MzIJCWo7CiAK IAkJTFdMb2NrQWNxdWlyZSgmcHJvYy0+ZnBJbmZvTG9jaywgTFdfRVhDTFVTSVZFKTsKQEAg LTMxMDMsNyArMzEwMyw3IEBAIEdldExvY2tDb25mbGljdHMoY29uc3QgTE9DS1RBRyAqbG9j a3RhZywgTE9DS01PREUgbG9ja21vZGUsIGludCAqY291bnRwKQogCQkgKi8KIAkJZm9yIChp ID0gMDsgaSA8IFByb2NHbG9iYWwtPmFsbFByb2NDb3VudDsgaSsrKQogCQl7Ci0JCQlQR1BS T0MJICAgKnByb2MgPSAmUHJvY0dsb2JhbC0+YWxsUHJvY3NbaV07CisJCQlQR1BST0MJICAg KnByb2MgPSBQcm9jR2xvYmFsLT5hbGxQcm9jc1tpXTsKIAkJCXVpbnQzMgkJajsKIAogCQkJ LyogQSBiYWNrZW5kIG5ldmVyIGJsb2NrcyBpdHNlbGYgKi8KQEAgLTM3OTAsNyArMzc5MCw3 IEBAIEdldExvY2tTdGF0dXNEYXRhKHZvaWQpCiAJICovCiAJZm9yIChpID0gMDsgaSA8IFBy b2NHbG9iYWwtPmFsbFByb2NDb3VudDsgKytpKQogCXsKLQkJUEdQUk9DCSAgICpwcm9jID0g JlByb2NHbG9iYWwtPmFsbFByb2NzW2ldOworCQlQR1BST0MJICAgKnByb2MgPSBQcm9jR2xv YmFsLT5hbGxQcm9jc1tpXTsKIAogCQkvKiBTa2lwIGJhY2tlbmRzIHdpdGggcGlkPTAsIGFz IHRoZXkgZG9uJ3QgaG9sZCBmYXN0LXBhdGggbG9ja3MgKi8KIAkJaWYgKHByb2MtPnBpZCA9 PSAwKQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKaW5kZXggZTllZjBmYmZlMzIuLjlkM2U5 NGE3YjNhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvcHJvYy5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTI5LDIxICsyOSwyOSBA QAogICovCiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAorI2luY2x1ZGUgPHNjaGVkLmg+CiAj aW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjaW5jbHVkZSA8c3lz L3RpbWUuaD4KIAorI2lmZGVmIFVTRV9MSUJOVU1BCisjaW5jbHVkZSA8bnVtYS5oPgorI2lu Y2x1ZGUgPG51bWFpZi5oPgorI2VuZGlmCisKICNpbmNsdWRlICJhY2Nlc3MvdHJhbnNhbS5o IgogI2luY2x1ZGUgImFjY2Vzcy90d29waGFzZS5oIgogI2luY2x1ZGUgImFjY2Vzcy94bG9n dXRpbHMuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIK KyNpbmNsdWRlICJwb3J0L3BnX251bWEuaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL2F1dG92 YWN1dW0uaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9zbG90c3luYy5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL3N5bmNyZXAuaCIKICNpbmNsdWRlICJzdG9yYWdlL2NvbmRpdGlvbl92 YXJpYWJsZS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFn ZS9sbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9wZ19zaG1lbS5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvcG1zaWduYWwuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRl ICJzdG9yYWdlL3Byb2NhcnJheS5oIgpAQCAtODksNiArOTcsMTIgQEAgc3RhdGljIHZvaWQg UHJvY0tpbGwoaW50IGNvZGUsIERhdHVtIGFyZyk7CiBzdGF0aWMgdm9pZCBBdXhpbGlhcnlQ cm9jS2lsbChpbnQgY29kZSwgRGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIENoZWNrRGVhZExv Y2sodm9pZCk7CiAKKy8qIE5VTUEgKi8KK3N0YXRpYyBTaXplIGdldF9tZW1vcnlfcGFnZV9z aXplKHZvaWQpOyAvKiBYWFggZHVwbGljYXRlICovCitzdGF0aWMgdm9pZCBtb3ZlX3RvX25v ZGUoY2hhciAqc3RhcnRwdHIsIGNoYXIgKmVuZHB0ciwKKwkJCQkJCSBTaXplIG1lbV9wYWdl X3NpemUsIGludCBub2RlKTsKK3N0YXRpYyBpbnQJbnVtYV9ub2RlcyA9IC0xOworCiAKIC8q CiAgKiBSZXBvcnQgc2hhcmVkLW1lbW9yeSBzcGFjZSBuZWVkZWQgYnkgUEdQUk9DLgpAQCAt MTAwLDExICsxMTQsNDAgQEAgUEdQcm9jU2htZW1TaXplKHZvaWQpCiAJU2l6ZQkJVG90YWxQ cm9jcyA9CiAJCWFkZF9zaXplKE1heEJhY2tlbmRzLCBhZGRfc2l6ZShOVU1fQVVYSUxJQVJZ X1BST0NTLCBtYXhfcHJlcGFyZWRfeGFjdHMpKTsKIAorCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBtdWxfc2l6ZShUb3RhbFByb2NzLCBzaXplb2YoUEdQUk9DICopKSk7CiAJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZihQR1BST0MpKSk7CiAJ c2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigqUHJv Y0dsb2JhbC0+eGlkcykpKTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgbXVsX3NpemUoVG90 YWxQcm9jcywgc2l6ZW9mKCpQcm9jR2xvYmFsLT5zdWJ4aWRTdGF0ZXMpKSk7CiAJc2l6ZSA9 IGFkZF9zaXplKHNpemUsIG11bF9zaXplKFRvdGFsUHJvY3MsIHNpemVvZigqUHJvY0dsb2Jh bC0+c3RhdHVzRmxhZ3MpKSk7CiAKKwkvKgorCSAqIFdpdGggTlVNQSwgd2UgYWxsb2NhdGUg dGhlIFBHUFJPQyBhcnJheSBpbiBzZXZlcmFsIGNodW5rcy4gV2l0aCBzaGFyZWQKKwkgKiBi dWZmZXJzIHdlIHNpbXBseSBtYW51YWxseSBhc3NpZ24gcGFydHMgb2YgdGhlIGJ1ZmZlciBh cnJheSB0bworCSAqIGRpZmZlcmVudCBOVU1BIG5vZGVzLCBhbmQgdGhhdCBkb2VzIHRoZSB0 cmljay4gQnV0IHdlIGNhbid0IGRvIHRoYXQgZm9yCisJICogUEdQUk9DLCBhcyB0aGUgbnVt YmVyIG9mIFBHUFJPQyBlbnRyaWVzIGlzIG11Y2ggbG93ZXIsIGVzcGVjaWFsbHkgd2l0aAor CSAqIGh1Z2UgcGFnZXMuIFdlIGNhbiBmaXQgfjJrIGVudHJpZXMgb24gYSAyTUIgcGFnZSwg YW5kIE5VTUEgZG9lcyBzdHVmZgorCSAqIHdpdGggcGFnZSBncmFudWxhcml0eSwgYW5kIHRo ZSBsYXJnZSBOVU1BIHN5c3RlbXMgYXJlIGxpa2VseSB0byB1c2UKKwkgKiBodWdlIHBhZ2Vz LiBTbyB3aXRoIHNlbnNpYmxlIG1heF9jb25uZWN0aW9ucyB3ZSB3b3VsZCBub3QgdXNlIG1v cmUgdGhhbgorCSAqIGEgc2luZ2xlIHBhZ2UsIHdoaWNoIG1lYW5zIGl0IGdldHMgdG8gYSBz aW5nbGUgTlVNQSBub2RlLgorCSAqCisJICogU28gd2UgYWxsb2NhdGUgUEdQUk9DIG5vdCBh cyBhIHNpbmdsZSBhcnJheSwgYnV0IG9uZSBhcnJheSBwZXIgTlVNQQorCSAqIG5vZGUsIGFu ZCB0aGVuIG9uZSBhcnJheSBmb3IgYXV4IHByb2Nlc3NlcyAod2l0aG91dCBOVU1BIG5vZGUK KwkgKiBhc3NpZ25lZCkuIEVhY2ggYXJyYXkgbWF5IG5lZWQgdXAgdG8gbWVtb3J5LXBhZ2Ut d29ydGggb2YgcGFkZGluZywKKwkgKiB3b3JzdCBjYXNlLiBTbyB3ZSBqdXN0IGFkZCB0aGF0 IC0gaXQncyBhIGJpdCB3YXN0ZWZ1bCwgYnV0IGdvb2QgZW5vdWdoCisJICogZm9yIFBvQy4K KwkgKgorCSAqIEZJWE1FIFNob3VsZCBiZSBjb25kaXRpb25hbCwgYnV0IHRoYXQgd2FzIGNh dXNpbmcgcHJvYmxlbXMgaW4gYm9vdHN0cmFwCisJICogbW9kZS4gT3IgbWF5YmUgaXQgd2Fz IGJlY2F1c2UgdGhlIGNvZGUgdGhhdCBhbGxvY2F0ZXMgc3R1ZmYgbGF0ZXIgZG9lcworCSAq IG5vdCBkbyB0aGF0IGNvbmRpdGlvbmFsbHkuIEFueXdheSwgbmVlZHMgdG8gYmUgZml4ZWQu CisJICovCisJLyogaWYgKG51bWFfcHJvY3NfaW50ZXJsZWF2ZSkgKi8KKwl7CisJCWludAkJ CW51bV9ub2RlcyA9IG51bWFfbnVtX2NvbmZpZ3VyZWRfbm9kZXMoKTsKKwkJU2l6ZQkJbWVt X3BhZ2Vfc2l6ZSA9IGdldF9tZW1vcnlfcGFnZV9zaXplKCk7CisKKwkJc2l6ZSA9IGFkZF9z aXplKHNpemUsIG11bF9zaXplKChudW1fbm9kZXMgKyAxKSwgbWVtX3BhZ2Vfc2l6ZSkpOwor CX0KKwogCXJldHVybiBzaXplOwogfQogCkBAIC0xMjksNiArMTcyLDI2IEBAIEZhc3RQYXRo TG9ja1NobWVtU2l6ZSh2b2lkKQogCiAJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXpl KFRvdGFsUHJvY3MsIChmcExvY2tCaXRzU2l6ZSArIGZwUmVsSWRTaXplKSkpOwogCisJLyoK KwkgKiBTYW1lIE5VTUEtcGFkZGluZyBsb2dpYyBhcyBpbiBQR1Byb2NTaG1lbVNpemUsIGFk ZGluZyBhIG1lbW9yeSBwYWdlIHBlcgorCSAqIE5VTUEgbm9kZSAtIGJ1dCB0aGlzIHdheSB3 ZSBhZGQgdHdvIHBhZ2VzIHBlciBub2RlIC0gb25lIGZvciBQR1BST0MsCisJICogb25lIGZv ciBmYXN0LXBhdGggYXJyYXlzLiBJbiB0aGVvcnkgd2UgY291bGQgbWFrZSB0aGlzIHdvcmsg anVzdCBvbmUKKwkgKiBwYWdlIHBlciBub2RlLCBieSBhZGRpbmcgZmFzdC1wYXRoIGFycmF5 cyByaWdodCBhZnRlciBQR1BST0MgZW50cmllcyBvbgorCSAqIGVhY2ggbm9kZS4gQnV0IG5v dyB3ZSBhbGxvY2F0ZSBmYXN0LXBhdGggbG9ja3Mgc2VwYXJhdGVseSAtIGdvb2QgZW5vdWdo CisJICogZm9yIFBvQy4KKwkgKgorCSAqIEZJWE1FIFNob3VsZCBiZSBjb25kaXRpb25hbCwg YnV0IHRoYXQgd2FzIGNhdXNpbmcgcHJvYmxlbXMgaW4gYm9vdHN0cmFwCisJICogbW9kZS4g T3IgbWF5YmUgaXQgd2FzIGJlY2F1c2UgdGhlIGNvZGUgdGhhdCBhbGxvY2F0ZXMgc3R1ZmYg bGF0ZXIgZG9lcworCSAqIG5vdCBkbyB0aGF0IGNvbmRpdGlvbmFsbHkuIEFueXdheSwgbmVl ZHMgdG8gYmUgZml4ZWQuCisJICovCisJLyogaWYgKG51bWFfcHJvY3NfaW50ZXJsZWF2ZSkg Ki8KKwl7CisJCWludAkJCW51bV9ub2RlcyA9IG51bWFfbnVtX2NvbmZpZ3VyZWRfbm9kZXMo KTsKKwkJU2l6ZQkJbWVtX3BhZ2Vfc2l6ZSA9IGdldF9tZW1vcnlfcGFnZV9zaXplKCk7CisK KwkJc2l6ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKChudW1fbm9kZXMgKyAxKSwgbWVt X3BhZ2Vfc2l6ZSkpOworCX0KKwogCXJldHVybiBzaXplOwogfQogCkBAIC0xOTEsMTEgKzI1 NCwxMyBAQCBQcm9jR2xvYmFsU2VtYXModm9pZCkKIHZvaWQKIEluaXRQcm9jR2xvYmFsKHZv aWQpCiB7Ci0JUEdQUk9DCSAgICpwcm9jczsKKwlQR1BST0MJICAqKnByb2NzOwogCWludAkJ CWksCiAJCQkJajsKIAlib29sCQlmb3VuZDsKIAl1aW50MzIJCVRvdGFsUHJvY3MgPSBNYXhC YWNrZW5kcyArIE5VTV9BVVhJTElBUllfUFJPQ1MgKyBtYXhfcHJlcGFyZWRfeGFjdHM7CisJ aW50CQkJcHJvY3NfdG90YWw7CisJaW50CQkJcHJvY3NfcGVyX25vZGU7CiAKIAkvKiBVc2Vk IGZvciBzZXR1cCBvZiBwZXItYmFja2VuZCBmYXN0LXBhdGggc2xvdHMuICovCiAJY2hhcgkg ICAqZnBQdHIsCkBAIC0yMDUsNiArMjcwLDggQEAgSW5pdFByb2NHbG9iYWwodm9pZCkKIAlT aXplCQlyZXF1ZXN0U2l6ZTsKIAljaGFyCSAgICpwdHI7CiAKKwlTaXplCQltZW1fcGFnZV9z aXplID0gZ2V0X21lbW9yeV9wYWdlX3NpemUoKTsKKwogCS8qIENyZWF0ZSB0aGUgUHJvY0ds b2JhbCBzaGFyZWQgc3RydWN0dXJlICovCiAJUHJvY0dsb2JhbCA9IChQUk9DX0hEUiAqKQog CQlTaG1lbUluaXRTdHJ1Y3QoIlByb2MgSGVhZGVyIiwgc2l6ZW9mKFBST0NfSERSKSwgJmZv dW5kKTsKQEAgLTIyNCw2ICsyOTEsOSBAQCBJbml0UHJvY0dsb2JhbCh2b2lkKQogCXBnX2F0 b21pY19pbml0X3UzMigmUHJvY0dsb2JhbC0+cHJvY0FycmF5R3JvdXBGaXJzdCwgSU5WQUxJ RF9QUk9DX05VTUJFUik7CiAJcGdfYXRvbWljX2luaXRfdTMyKCZQcm9jR2xvYmFsLT5jbG9n R3JvdXBGaXJzdCwgSU5WQUxJRF9QUk9DX05VTUJFUik7CiAKKwkvKiBvbmUgY2h1bmsgcGVy IE5VTUEgbm9kZSAod2l0aG91dCBOVU1BIGFzc3VtZSAxIG5vZGUpICovCisJbnVtYV9ub2Rl cyA9IG51bWFfbnVtX2NvbmZpZ3VyZWRfbm9kZXMoKTsKKwogCS8qCiAJICogQ3JlYXRlIGFu ZCBpbml0aWFsaXplIGFsbCB0aGUgUEdQUk9DIHN0cnVjdHVyZXMgd2UnbGwgbmVlZC4gIFRo ZXJlIGFyZQogCSAqIHNpeCBzZXBhcmF0ZSBjb25zdW1lcnM6ICgxKSBub3JtYWwgYmFja2Vu ZHMsICgyKSBhdXRvdmFjdXVtIHdvcmtlcnMgYW5kCkBAIC0yNDEsMTkgKzMxMSwxMDggQEAg SW5pdFByb2NHbG9iYWwodm9pZCkKIAogCU1lbVNldChwdHIsIDAsIHJlcXVlc3RTaXplKTsK IAotCXByb2NzID0gKFBHUFJPQyAqKSBwdHI7Ci0JcHRyID0gKGNoYXIgKikgcHRyICsgVG90 YWxQcm9jcyAqIHNpemVvZihQR1BST0MpOworCS8qIGFsbHByb2NzIChhcnJheSBvZiBwb2lu dGVycyB0byBQR1BST0MgZW50cmllcykgKi8KKwlwcm9jcyA9IChQR1BST0MgKiopIHB0cjsK KwlwdHIgPSAoY2hhciAqKSBwdHIgKyBUb3RhbFByb2NzICogc2l6ZW9mKFBHUFJPQyAqKTsK IAogCVByb2NHbG9iYWwtPmFsbFByb2NzID0gcHJvY3M7CiAJLyogWFhYIGFsbFByb2NDb3Vu dCBpc24ndCByZWFsbHkgYWxsIG9mIHRoZW07IGl0IGV4Y2x1ZGVzIHByZXBhcmVkIHhhY3Rz ICovCiAJUHJvY0dsb2JhbC0+YWxsUHJvY0NvdW50ID0gTWF4QmFja2VuZHMgKyBOVU1fQVVY SUxJQVJZX1BST0NTOwogCisJLyoKKwkgKiBOVU1BIHBhcnRpdGlvbmluZworCSAqCisJICog Tm93IGJ1aWxkIHRoZSBhY3R1YWwgUEdQUk9DIGFycmF5cywgb25lICJjaHVuayIgcGVyIE5V TUEgbm9kZSAoYW5kIG9uZQorCSAqIGV4dHJhIGZvciBhdXhpbGlhcnkgcHJvY2Vzc2VzIGFu ZCAyUEMgdHJhbnNhY3Rpb25zLCBub3QgYXNzb2NpYXRlZCB3aXRoCisJICogYW55IHBhcnRp Y3VsYXIgbm9kZSkuCisJICoKKwkgKiBGaXJzdCBkZXRlcm1pbmUgaG93IG1hbnkgImJhY2tl bmQiIHByb2NzIHRvIGFsbG9jYXRlIHBlciBOVU1BIG5vZGUuIFRoZQorCSAqIGNvdW50IG1h eSBub3QgYmUgZXhhY3RseSBkaXZpc2libGUsIGJ1dCB3ZSBtb3N0bHkgaWdub3JlIHRoYXQu IFRoZSBsYXN0CisJICogbm9kZSBtYXkgZ2V0IHNvbWV3aGF0IGZld2VyIFBHUFJPQyBlbnRy aWVzLCBidXQgdGhlIGltYmFsYW5jZSBvdWdodCB0bworCSAqIGJlIHByZXR0eSBzbWFsbCAo aWYgTWF4QmFja2VuZHMgPj4gbnVtYV9ub2RlcykuCisJICoKKwkgKiBYWFggQSBmYWlyZXIg ZGlzdHJpYnV0aW9uIGlzIHBvc3NpYmxlLCBidXQgbm90IHdvcnRoIGl0IG5vdy4KKwkgKi8K Kwlwcm9jc19wZXJfbm9kZSA9IChNYXhCYWNrZW5kcyArIChudW1hX25vZGVzIC0gMSkpIC8g bnVtYV9ub2RlczsKKwlwcm9jc190b3RhbCA9IDA7CisKKwkvKiBidWlsZCBQR1BST0MgZW50 cmllcyBmb3IgTlVNQSBub2RlcyAqLworCWZvciAoaSA9IDA7IGkgPCBudW1hX25vZGVzOyBp KyspCisJeworCQlQR1BST0MJICAgKnByb2NzX25vZGU7CisKKwkJLyogdGhlIGxhc3QgTlVN QSBub2RlIG1heSBnZXQgZmV3ZXIgUEdQUk9DIGVudHJpZXMsIGJ1dCBtZWggKi8KKwkJaW50 CQkJY291bnRfbm9kZSA9IE1pbihwcm9jc19wZXJfbm9kZSwgTWF4QmFja2VuZHMgLSBwcm9j c190b3RhbCk7CisKKwkJLyogbWFrZSBzdXJlIHRvIGFsaWduIHRoZSBQR1BST0MgYXJyYXkg dG8gbWVtb3J5IHBhZ2UgKi8KKwkJcHRyID0gKGNoYXIgKikgVFlQRUFMSUdOKG1lbV9wYWdl X3NpemUsIHB0cik7CisKKwkJLyogYWxsb2NhdGUgdGhlIFBHUFJPQyBjaHVuayBmb3IgdGhp cyBub2RlICovCisJCXByb2NzX25vZGUgPSAoUEdQUk9DICopIHB0cjsKKwkJcHRyID0gKGNo YXIgKikgcHRyICsgY291bnRfbm9kZSAqIHNpemVvZihQR1BST0MpOworCisJCS8qIGRvbid0 IG92ZXJmbG93IHRoZSBhbGxvY2F0aW9uICovCisJCUFzc2VydCgocHRyID4gKGNoYXIgKikg cHJvY3MpICYmIChwdHIgPD0gKGNoYXIgKikgcHJvY3MgKyByZXF1ZXN0U2l6ZSkpOworCisJ CS8qIGFkZCBwb2ludGVycyB0byB0aGUgUEdQUk9DIGVudHJpZXMgdG8gYWxsUHJvY3MgKi8K KwkJZm9yIChqID0gMDsgaiA8IGNvdW50X25vZGU7IGorKykKKwkJeworCQkJcHJvY3Nfbm9k ZVtqXS5udW1hX25vZGUgPSBpOworCQkJcHJvY3Nfbm9kZVtqXS5wcm9jbnVtYmVyID0gcHJv Y3NfdG90YWw7CisKKwkJCVByb2NHbG9iYWwtPmFsbFByb2NzW3Byb2NzX3RvdGFsKytdID0g JnByb2NzX25vZGVbal07CisJCX0KKworCQltb3ZlX3RvX25vZGUoKGNoYXIgKikgcHJvY3Nf bm9kZSwgcHRyLCBtZW1fcGFnZV9zaXplLCBpKTsKKwl9CisKKwkvKgorCSAqIGFsc28gYnVp bGQgUEdQUk9DIGVudHJpZXMgZm9yIGF1eGlsaWFyeSBwcm9jcyAvIHByZXBhcmVkIHhhY3Rz ICh3ZQorCSAqIGRvbid0IGFzc2lnbiB0aG9zZSB0byBhbnkgTlVNQSBub2RlKQorCSAqCisJ ICogWFhYIE1vc3RseSBkdXBsaWNhdGUgb2YgcHJlY2VkaW5nIGJsb2NrLCBjb3VsZCBiZSBy ZXVzZWQuCisJICovCisJeworCQlQR1BST0MJICAgKnByb2NzX25vZGU7CisJCWludAkJCWNv dW50X25vZGUgPSAoTlVNX0FVWElMSUFSWV9QUk9DUyArIG1heF9wcmVwYXJlZF94YWN0cyk7 CisKKwkJLyoKKwkJICogTWFrZSBzdXJlIHRvIGFsaWduIFBHUFJPQyBhcnJheSB0byBtZW1v cnkgcGFnZSAoaXQgbWF5IG5vdCBiZQorCQkgKiBhbGlnbmVkKS4gV2Ugd29uJ3QgYXNzaWdu IHRoaXMgdG8gYW55IE5VTUEgbm9kZSwgYnV0IHdlIHN0aWxsIGRvbid0CisJCSAqIHdhbnQg aXQgdG8gaW50ZXJmZXJlIHdpdGggdGhlIHByZWNlZGluZyBjaHVuayAoZm9yIHRoZSBsYXN0 IE5VTUEKKwkJICogbm9kZSkuCisJCSAqLworCQlwdHIgPSAoY2hhciAqKSBUWVBFQUxJR04o bWVtX3BhZ2Vfc2l6ZSwgcHRyKTsKKworCQlwcm9jc19ub2RlID0gKFBHUFJPQyAqKSBwdHI7 CisJCXB0ciA9IChjaGFyICopIHB0ciArIGNvdW50X25vZGUgKiBzaXplb2YoUEdQUk9DKTsK KworCQkvKiBkb24ndCBvdmVyZmxvdyB0aGUgYWxsb2NhdGlvbiAqLworCQlBc3NlcnQoKHB0 ciA+IChjaGFyICopIHByb2NzKSAmJiAocHRyIDw9IChjaGFyICopIHByb2NzICsgcmVxdWVz dFNpemUpKTsKKworCQkvKiBub3cgYWRkIHRoZSBQR1BST0MgcG9pbnRlcnMgdG8gYWxsUHJv Y3MgKi8KKwkJZm9yIChqID0gMDsgaiA8IGNvdW50X25vZGU7IGorKykKKwkJeworCQkJcHJv Y3Nfbm9kZVtqXS5udW1hX25vZGUgPSAtMTsKKwkJCXByb2NzX25vZGVbal0ucHJvY251bWJl ciA9IHByb2NzX3RvdGFsOworCisJCQlQcm9jR2xvYmFsLT5hbGxQcm9jc1twcm9jc190b3Rh bCsrXSA9ICZwcm9jc19ub2RlW2pdOworCQl9CisJfQorCisJLyogd2Ugc2hvdWxkIGhhdmUg YWxsb2NhdGVkIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgUEdQUk9DIGVudHJpZXMgKi8KKwlB c3NlcnQocHJvY3NfdG90YWwgPT0gVG90YWxQcm9jcyk7CisKIAkvKgogCSAqIEFsbG9jYXRl IGFycmF5cyBtaXJyb3JpbmcgUEdQUk9DIGZpZWxkcyBpbiBhIGRlbnNlIG1hbm5lci4gU2Vl CiAJICogUFJPQ19IRFIuCiAJICoKIAkgKiBYWFg6IEl0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8g aW5jcmVhc2UgcGFkZGluZyBmb3IgdGhlc2UgYXJyYXlzLCBnaXZlbgogCSAqIGhvdyBob3Rs eSB0aGV5IGFyZSBhY2Nlc3NlZC4KKwkgKgorCSAqIFhYWCBXb3VsZCBpdCBtYWtlIHNlbnNl IHRvIE5VTUEtcGFydGl0aW9uIHRoZXNlIGNodW5rcyB0b28sIHNvbWVob3c/CisJICogQnV0 IHRob3NlIGFycmF5cyBhcmUgdGlueSwgZml0IGludG8gYSBzaW5nbGUgbWVtb3J5IHBhZ2Us IHNvIHdvdWxkIG5lZWQKKwkgKiB0byBiZSBtYWRlIG1vcmUgY29tcGxleC4gTm90IHN1cmUu CiAJICovCiAJUHJvY0dsb2JhbC0+eGlkcyA9IChUcmFuc2FjdGlvbklkICopIHB0cjsKIAlw dHIgPSAoY2hhciAqKSBwdHIgKyAoVG90YWxQcm9jcyAqIHNpemVvZigqUHJvY0dsb2JhbC0+ eGlkcykpOwpAQCAtMjg2LDIzICs0NDUsMTAwIEBAIEluaXRQcm9jR2xvYmFsKHZvaWQpCiAJ LyogRm9yIGFzc2VydHMgY2hlY2tpbmcgd2UgZGlkIG5vdCBvdmVyZmxvdy4gKi8KIAlmcEVu ZFB0ciA9IGZwUHRyICsgcmVxdWVzdFNpemU7CiAKLQlmb3IgKGkgPSAwOyBpIDwgVG90YWxQ cm9jczsgaSsrKQorCS8qIHJlc2V0IHRoZSBjb3VudCAqLworCXByb2NzX3RvdGFsID0gMDsK KworCS8qCisJICogTWltaWMgdGhlIHNhbWUgbG9naWMgYXMgYWJvdmUsIGJ1dCBmb3IgZmFz dC1wYXRoIGxvY2tpbmcuCisJICovCisJZm9yIChpID0gMDsgaSA8IG51bWFfbm9kZXM7IGkr KykKIAl7Ci0JCVBHUFJPQwkgICAqcHJvYyA9ICZwcm9jc1tpXTsKKwkJY2hhcgkgICAqc3Rh cnRwdHI7CisJCWNoYXIJICAgKmVuZHB0cjsKIAotCQkvKiBDb21tb24gaW5pdGlhbGl6YXRp b24gZm9yIGFsbCBQR1BST0NzLCByZWdhcmRsZXNzIG9mIHR5cGUuICovCisJCS8qIHRoZSBs YXN0IE5VTUEgbm9kZSBtYXkgZ2V0IGZld2VyIFBHUFJPQyBlbnRyaWVzLCBidXQgbWVoICov CisJCWludAkJCXByb2NzX25vZGUgPSBNaW4ocHJvY3NfcGVyX25vZGUsIE1heEJhY2tlbmRz IC0gcHJvY3NfdG90YWwpOworCisJCS8qIGFsaWduIHRvIG1lbW9yeSBwYWdlLCB0byBtYWtl IG1vdmVfcGFnZXMgcG9zc2libGUgKi8KKwkJZnBQdHIgPSAoY2hhciAqKSBUWVBFQUxJR04o bWVtX3BhZ2Vfc2l6ZSwgZnBQdHIpOworCisJCXN0YXJ0cHRyID0gZnBQdHI7CisJCWVuZHB0 ciA9IGZwUHRyICsgcHJvY3Nfbm9kZSAqIChmcExvY2tCaXRzU2l6ZSArIGZwUmVsSWRTaXpl KTsKKworCQltb3ZlX3RvX25vZGUoc3RhcnRwdHIsIGVuZHB0ciwgbWVtX3BhZ2Vfc2l6ZSwg aSk7CiAKIAkJLyoKLQkJICogU2V0IHRoZSBmYXN0LXBhdGggbG9jayBhcnJheXMsIGFuZCBt b3ZlIHRoZSBwb2ludGVyLiBXZSBpbnRlcmxlYXZlCi0JCSAqIHRoZSB0d28gYXJyYXlzLCB0 byAoaG9wZWZ1bGx5KSBnZXQgc29tZSBsb2NhbGl0eSBmb3IgZWFjaCBiYWNrZW5kLgorCQkg KiBOb3cgcG9pbnQgdGhlIFBHUFJPQyBlbnRyaWVzIHRvIHRoZSBmYXN0LXBhdGggYXJyYXlz LCBhbmQgYWxzbworCQkgKiBhZHZhbmNlIHRoZSBmcFB0ci4KIAkJICovCi0JCXByb2MtPmZw TG9ja0JpdHMgPSAodWludDY0ICopIGZwUHRyOwotCQlmcFB0ciArPSBmcExvY2tCaXRzU2l6 ZTsKKwkJZm9yIChqID0gMDsgaiA8IHByb2NzX25vZGU7IGorKykKKwkJeworCQkJUEdQUk9D CSAgICpwcm9jID0gUHJvY0dsb2JhbC0+YWxsUHJvY3NbcHJvY3NfdG90YWwrK107CisKKwkJ CS8qIGNyb3NzLWNoZWNrIHdlIGdvdCB0aGUgZXhwZWN0ZWQgTlVNQSBub2RlICovCisJCQlB c3NlcnQocHJvYy0+bnVtYV9ub2RlID09IGkpOworCQkJQXNzZXJ0KHByb2MtPnByb2NudW1i ZXIgPT0gKHByb2NzX3RvdGFsIC0gMSkpOworCisJCQkvKgorCQkJICogU2V0IHRoZSBmYXN0 LXBhdGggbG9jayBhcnJheXMsIGFuZCBtb3ZlIHRoZSBwb2ludGVyLiBXZQorCQkJICogaW50 ZXJsZWF2ZSB0aGUgdHdvIGFycmF5cywgdG8gKGhvcGVmdWxseSkgZ2V0IHNvbWUgbG9jYWxp dHkgZm9yCisJCQkgKiBlYWNoIGJhY2tlbmQuCisJCQkgKi8KKwkJCXByb2MtPmZwTG9ja0Jp dHMgPSAodWludDY0ICopIGZwUHRyOworCQkJZnBQdHIgKz0gZnBMb2NrQml0c1NpemU7CiAK LQkJcHJvYy0+ZnBSZWxJZCA9IChPaWQgKikgZnBQdHI7Ci0JCWZwUHRyICs9IGZwUmVsSWRT aXplOworCQkJcHJvYy0+ZnBSZWxJZCA9IChPaWQgKikgZnBQdHI7CisJCQlmcFB0ciArPSBm cFJlbElkU2l6ZTsKIAotCQlBc3NlcnQoZnBQdHIgPD0gZnBFbmRQdHIpOworCQkJQXNzZXJ0 KGZwUHRyIDw9IGZwRW5kUHRyKTsKKwkJfQorCisJCUFzc2VydChmcFB0ciA9PSBlbmRwdHIp OworCX0KKworCS8qIGF1eGlsaWFyeSBwcm9jZXNzZXMgLyBwcmVwYXJlZCB4YWN0cyAqLwor CXsKKwkJLyogdGhlIGxhc3QgTlVNQSBub2RlIG1heSBnZXQgZmV3ZXIgUEdQUk9DIGVudHJp ZXMsIGJ1dCBtZWggKi8KKwkJaW50CQkJcHJvY3Nfbm9kZSA9IChOVU1fQVVYSUxJQVJZX1BS T0NTICsgbWF4X3ByZXBhcmVkX3hhY3RzKTsKKworCQkvKiBhbGlnbiB0byBtZW1vcnkgcGFn ZSwgdG8gbWFrZSBtb3ZlX3BhZ2VzIHBvc3NpYmxlICovCisJCWZwUHRyID0gKGNoYXIgKikg VFlQRUFMSUdOKG1lbV9wYWdlX3NpemUsIGZwUHRyKTsKKworCQkvKiBub3cgcG9pbnQgdGhl IFBHUFJPQyBlbnRyaWVzIHRvIHRoZSBmYXN0LXBhdGggYXJyYXlzICovCisJCWZvciAoaiA9 IDA7IGogPCBwcm9jc19ub2RlOyBqKyspCisJCXsKKwkJCVBHUFJPQwkgICAqcHJvYyA9IFBy b2NHbG9iYWwtPmFsbFByb2NzW3Byb2NzX3RvdGFsKytdOworCisJCQkvKiBjcm9zcy1jaGVj ayB3ZSBnb3QgUEdQUk9DIHdpdGggbm8gTlVNQSBub2RlIGFzc2lnbmVkICovCisJCQlBc3Nl cnQocHJvYy0+bnVtYV9ub2RlID09IC0xKTsKKwkJCUFzc2VydChwcm9jLT5wcm9jbnVtYmVy ID09IChwcm9jc190b3RhbCAtIDEpKTsKKworCQkJLyoKKwkJCSAqIFNldCB0aGUgZmFzdC1w YXRoIGxvY2sgYXJyYXlzLCBhbmQgbW92ZSB0aGUgcG9pbnRlci4gV2UKKwkJCSAqIGludGVy bGVhdmUgdGhlIHR3byBhcnJheXMsIHRvIChob3BlZnVsbHkpIGdldCBzb21lIGxvY2FsaXR5 IGZvcgorCQkJICogZWFjaCBiYWNrZW5kLgorCQkJICovCisJCQlwcm9jLT5mcExvY2tCaXRz ID0gKHVpbnQ2NCAqKSBmcFB0cjsKKwkJCWZwUHRyICs9IGZwTG9ja0JpdHNTaXplOworCisJ CQlwcm9jLT5mcFJlbElkID0gKE9pZCAqKSBmcFB0cjsKKwkJCWZwUHRyICs9IGZwUmVsSWRT aXplOworCisJCQlBc3NlcnQoZnBQdHIgPD0gZnBFbmRQdHIpOworCQl9CisJfQorCisJLyog U2hvdWxkIGhhdmUgY29uc3VtZWQgZXhhY3RseSB0aGUgZXhwZWN0ZWQgYW1vdW50IG9mIGZh c3QtcGF0aCBtZW1vcnkuICovCisJQXNzZXJ0KGZwUHRyIDw9IGZwRW5kUHRyKTsKKworCS8q IG1ha2Ugc3VyZSB3ZSBhbGxvY2F0ZWQgdGhlIGV4cGVjdGVkIG51bWJlciBvZiBQR1BST0Mg ZW50cmllcyAqLworCUFzc2VydChwcm9jc190b3RhbCA9PSBUb3RhbFByb2NzKTsKKworCWZv ciAoaSA9IDA7IGkgPCBUb3RhbFByb2NzOyBpKyspCisJeworCQlQR1BST0MJICAgKnByb2Mg PSBwcm9jc1tpXTsKKworCQlBc3NlcnQocHJvYy0+cHJvY251bWJlciA9PSBpKTsKIAogCQkv KgogCQkgKiBTZXQgdXAgcGVyLVBHUFJPQyBzZW1hcGhvcmUsIGxhdGNoLCBhbmQgZnBJbmZv TG9jay4gIFByZXBhcmVkIHhhY3QKQEAgLTM2NiwxNSArNjAyLDEyIEBAIEluaXRQcm9jR2xv YmFsKHZvaWQpCiAJCXBnX2F0b21pY19pbml0X3U2NCgmKHByb2MtPndhaXRTdGFydCksIDAp OwogCX0KIAotCS8qIFNob3VsZCBoYXZlIGNvbnN1bWVkIGV4YWN0bHkgdGhlIGV4cGVjdGVk IGFtb3VudCBvZiBmYXN0LXBhdGggbWVtb3J5LiAqLwotCUFzc2VydChmcFB0ciA9PSBmcEVu ZFB0cik7Ci0KIAkvKgogCSAqIFNhdmUgcG9pbnRlcnMgdG8gdGhlIGJsb2NrcyBvZiBQR1BS T0Mgc3RydWN0dXJlcyByZXNlcnZlZCBmb3IgYXV4aWxpYXJ5CiAJICogcHJvY2Vzc2VzIGFu ZCBwcmVwYXJlZCB0cmFuc2FjdGlvbnMuCiAJICovCi0JQXV4aWxpYXJ5UHJvY3MgPSAmcHJv Y3NbTWF4QmFja2VuZHNdOwotCVByZXBhcmVkWGFjdFByb2NzID0gJnByb2NzW01heEJhY2tl bmRzICsgTlVNX0FVWElMSUFSWV9QUk9DU107CisJQXV4aWxpYXJ5UHJvY3MgPSBwcm9jc1tN YXhCYWNrZW5kc107CisJUHJlcGFyZWRYYWN0UHJvY3MgPSBwcm9jc1tNYXhCYWNrZW5kcyAr IE5VTV9BVVhJTElBUllfUFJPQ1NdOwogCiAJLyogQ3JlYXRlIFByb2NTdHJ1Y3RMb2NrIHNw aW5sb2NrLCB0b28gKi8KIAlQcm9jU3RydWN0TG9jayA9IChzbG9ja190ICopIFNobWVtSW5p dFN0cnVjdCgiUHJvY1N0cnVjdExvY2sgc3BpbmxvY2siLApAQCAtNDM1LDcgKzY2OCw0NSBA QCBJbml0UHJvY2Vzcyh2b2lkKQogCiAJaWYgKCFkbGlzdF9pc19lbXB0eShwcm9jZ2xvYmFs bGlzdCkpCiAJewotCQlNeVByb2MgPSBkbGlzdF9jb250YWluZXIoUEdQUk9DLCBsaW5rcywg ZGxpc3RfcG9wX2hlYWRfbm9kZShwcm9jZ2xvYmFsbGlzdCkpOworCQkvKgorCQkgKiBXaXRo IG51bWEgaW50ZXJsZWF2aW5nIG9mIFBHUFJPQywgdHJ5IHRvIGdldCBhIFBST0MgZW50cnkg ZnJvbSB0aGUKKwkJICogcmlnaHQgTlVNQSBub2RlICh3aGVuIHRoZSBwcm9jZXNzIHN0YXJ0 cykuCisJCSAqCisJCSAqIFhYWCBUaGUgcHJvY2VzcyBtYXkgbW92ZSB0byBhIGRpZmZlcmVu dCBOVU1BIG5vZGUgbGF0ZXIsIGJ1dAorCQkgKiB0aGVyZSdzIG5vdCBtdWNoIHdlIGNhbiBk byBhYm91dCB0aGF0LgorCQkgKi8KKwkJaWYgKG51bWFfcHJvY3NfaW50ZXJsZWF2ZSkKKwkJ eworCQkJZGxpc3RfbXV0YWJsZV9pdGVyIGl0ZXI7CisJCQl1bnNpZ25lZAljcHU7CisJCQl1 bnNpZ25lZAlub2RlOworCQkJaW50CQkJcmM7CisKKwkJCXJjID0gZ2V0Y3B1KCZjcHUsICZu b2RlKTsKKwkJCWlmIChyYyAhPSAwKQorCQkJCWVsb2coRVJST1IsICJnZXRjcHUgZmFpbGVk OiAlbSIpOworCisJCQlNeVByb2MgPSBOVUxMOworCisJCQlkbGlzdF9mb3JlYWNoX21vZGlm eShpdGVyLCBwcm9jZ2xvYmFsbGlzdCkKKwkJCXsKKwkJCQlQR1BST0MJICAgKnByb2M7CisK KwkJCQlwcm9jID0gZGxpc3RfY29udGFpbmVyKFBHUFJPQywgbGlua3MsIGl0ZXIuY3VyKTsK KworCQkJCWlmIChwcm9jLT5udW1hX25vZGUgPT0gbm9kZSkKKwkJCQl7CisJCQkJCU15UHJv YyA9IHByb2M7CisJCQkJCWRsaXN0X2RlbGV0ZShpdGVyLmN1cik7CisJCQkJCWJyZWFrOwor CQkJCX0KKwkJCX0KKwkJfQorCisJCS8qIGRpZG4ndCBmaW5kIFBHUFJPQyBmcm9tIHRoZSBj b3JyZWN0IE5VTUEgbm9kZSwgcGljayBhbnkgZnJlZSBvbmUgKi8KKwkJaWYgKE15UHJvYyA9 PSBOVUxMKQorCQkJTXlQcm9jID0gZGxpc3RfY29udGFpbmVyKFBHUFJPQywgbGlua3MsIGRs aXN0X3BvcF9oZWFkX25vZGUocHJvY2dsb2JhbGxpc3QpKTsKKwogCQlTcGluTG9ja1JlbGVh c2UoUHJvY1N0cnVjdExvY2spOwogCX0KIAllbHNlCkBAIC0xOTg4LDcgKzIyNTksNyBAQCBQ cm9jU2VuZFNpZ25hbChQcm9jTnVtYmVyIHByb2NOdW1iZXIpCiAJaWYgKHByb2NOdW1iZXIg PCAwIHx8IHByb2NOdW1iZXIgPj0gUHJvY0dsb2JhbC0+YWxsUHJvY0NvdW50KQogCQllbG9n KEVSUk9SLCAicHJvY051bWJlciBvdXQgb2YgcmFuZ2UiKTsKIAotCVNldExhdGNoKCZQcm9j R2xvYmFsLT5hbGxQcm9jc1twcm9jTnVtYmVyXS5wcm9jTGF0Y2gpOworCVNldExhdGNoKCZQ cm9jR2xvYmFsLT5hbGxQcm9jc1twcm9jTnVtYmVyXS0+cHJvY0xhdGNoKTsKIH0KIAogLyoK QEAgLTIwNjMsMyArMjMzNCw2MCBAQCBCZWNvbWVMb2NrR3JvdXBNZW1iZXIoUEdQUk9DICps ZWFkZXIsIGludCBwaWQpCiAKIAlyZXR1cm4gb2s7CiB9CisKKy8qIGNvcHkgZnJvbSBidWZf aW5pdC5jICovCitzdGF0aWMgU2l6ZQorZ2V0X21lbW9yeV9wYWdlX3NpemUodm9pZCkKK3sK KwlTaXplCQlvc19wYWdlX3NpemU7CisJU2l6ZQkJaHVnZV9wYWdlX3NpemU7CisKKyNpZmRl ZiBXSU4zMgorCVNZU1RFTV9JTkZPIHN5c2luZm87CisKKwlHZXRTeXN0ZW1JbmZvKCZzeXNp bmZvKTsKKwlvc19wYWdlX3NpemUgPSBzeXNpbmZvLmR3UGFnZVNpemU7CisjZWxzZQorCW9z X3BhZ2Vfc2l6ZSA9IHN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKKyNlbmRpZgorCisJLyoKKwkg KiBYWFggVGhpcyBpcyBhIGJpdCBhbm5veWluZy9jb25mdXNpbmcsIGJlY2F1c2Ugd2UgbWF5 IGdldCBhIGRpZmZlcmVudAorCSAqIHJlc3VsdCBkZXBlbmRpbmcgb24gd2hlbiB3ZSBjYWxs IGl0LiBCZWZvcmUgbW1hcCgpIHdlIGRvbid0IGtub3cgaWYgdGhlCisJICogaHVnZSBwYWdl cyBnZXQgdXNlZCwgc28gd2UgYXNzdW1lIHRoZXkgd2lsbC4gQW5kIHRoZW4gaWYgd2UgZG9u J3QgZ2V0CisJICogaHVnZSBwYWdlcywgd2UnbGwgd2FzdGUgbWVtb3J5IGV0Yy4KKwkgKi8K KworCS8qIGFzc3VtZSBodWdlIHBhZ2VzIGdldCB1c2VkLCB1bmxlc3MgSFVHRV9QQUdFU19P RkYgKi8KKwlpZiAoaHVnZV9wYWdlc19zdGF0dXMgPT0gSFVHRV9QQUdFU19PRkYpCisJCWh1 Z2VfcGFnZV9zaXplID0gMDsKKwllbHNlCisJCUdldEh1Z2VQYWdlU2l6ZSgmaHVnZV9wYWdl X3NpemUsIE5VTEwpOworCisJcmV0dXJuIE1heChvc19wYWdlX3NpemUsIGh1Z2VfcGFnZV9z aXplKTsKK30KKworLyoKKyAqIG1vdmVfdG9fbm9kZQorICoJCW1vdmUgYWxsIHBhZ2VzIGlu IHRoZSBnaXZlbiByYW5nZSB0byB0aGUgcmVxdWVzdGVkIE5VTUEgbm9kZQorICoKKyAqIFhY WCBUaGlzIGlzIGV4cGVjdGVkIHRvIG9ubHkgcHJvY2VzcyBmYWlybHkgc21hbGwgbnVtYmVy IG9mIHBhZ2VzLCBzbyBubworICogbmVlZCB0byBkbyBiYXRjaGluZyBldGMuIEp1c3QgbW92 ZSBwYWdlcyBvbmUgYnkgb25lLgorICovCitzdGF0aWMgdm9pZAorbW92ZV90b19ub2RlKGNo YXIgKnN0YXJ0cHRyLCBjaGFyICplbmRwdHIsIFNpemUgbWVtX3BhZ2Vfc2l6ZSwgaW50IG5v ZGUpCit7CisJd2hpbGUgKHN0YXJ0cHRyIDwgZW5kcHRyKQorCXsKKwkJaW50CQkJciwKKwkJ CQkJc3RhdHVzOworCisJCXIgPSBudW1hX21vdmVfcGFnZXMoMCwgMSwgKHZvaWQgKiopICZz dGFydHB0ciwgJm5vZGUsICZzdGF0dXMsIDApOworCisJCWlmIChyICE9IDApCisJCQllbG9n KFdBUk5JTkcsICJmYWlsZWQgdG8gbW92ZSBwYWdlIHRvIE5VTUEgbm9kZSAlZCAociA9ICVk LCBzdGF0dXMgPSAlZCkiLAorCQkJCSBub2RlLCByLCBzdGF0dXMpOworCisJCXN0YXJ0cHRy ICs9IG1lbV9wYWdlX3NpemU7CisJfQorfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvaW5pdC9nbG9iYWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwpp bmRleCBhMTFiYzcxYTM4Ni4uNmVlNDY4NGQxYjggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xv YmFscy5jCkBAIC0xNDksNiArMTQ5LDcgQEAgaW50CQkJTWF4QmFja2VuZHMgPSAwOwogYm9v bAkJbnVtYV9idWZmZXJzX2ludGVybGVhdmUgPSBmYWxzZTsKIGJvb2wJCW51bWFfbG9jYWxh bGxvYyA9IGZhbHNlOwogYm9vbAkJbnVtYV9wYXJ0aXRpb25fZnJlZWxpc3QgPSBmYWxzZTsK K2Jvb2wJCW51bWFfcHJvY3NfaW50ZXJsZWF2ZSA9IGZhbHNlOwogCiAvKiBHVUMgcGFyYW1l dGVycyBmb3IgdmFjdXVtICovCiBpbnQJCQlWYWN1dW1CdWZmZXJVc2FnZUxpbWl0ID0gMjA0 ODsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMKaW5kZXggMDU1MmVkNjJjYzcu LjdiNzE4NzYwMjQ4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190 YWJsZXMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpAQCAt MjE0Niw2ICsyMTQ2LDE2IEBAIHN0cnVjdCBjb25maWdfYm9vbCBDb25maWd1cmVOYW1lc0Jv b2xbXSA9CiAJCU5VTEwsIE5VTEwsIE5VTEwKIAl9LAogCisJeworCQl7Im51bWFfcHJvY3Nf aW50ZXJsZWF2ZSIsIFBHQ19QT1NUTUFTVEVSLCBERVZFTE9QRVJfT1BUSU9OUywKKwkJCWdl dHRleHRfbm9vcCgiRW5hYmxlcyBOVU1BIGludGVybGVhdmluZyBvZiBQR1BST0MgZW50cmll cy4iKSwKKwkJCWdldHRleHRfbm9vcCgiV2hlbiBlbmFibGVkLCB0aGUgUEdQUk9DIGVudHJp ZXMgYXJlIGludGVybGVhdmVkIHRvIGFsbCBOVU1BIG5vZGVzLiIpLAorCQl9LAorCQkmbnVt YV9wcm9jc19pbnRlcmxlYXZlLAorCQlmYWxzZSwKKwkJTlVMTCwgTlVMTCwgTlVMTAorCX0s CisKIAl7CiAJCXsic3luY19yZXBsaWNhdGlvbl9zbG90cyIsIFBHQ19TSUdIVVAsIFJFUExJ Q0FUSU9OX1NUQU5EQlksCiAJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgYSBwaHlzaWNhbCBz dGFuZGJ5IHRvIHN5bmNocm9uaXplIGxvZ2ljYWwgZmFpbG92ZXIgcmVwbGljYXRpb24gc2xv dHMgZnJvbSB0aGUgcHJpbWFyeSBzZXJ2ZXIuIiksCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9taXNjYWRtaW4uaCBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCmluZGV4IDY2YmFmMmJm MzNlLi5jZGVlZThkY2NiYSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgK KysrIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKQEAgLTE4MSw2ICsxODEsNyBAQCBleHRl cm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJhbGxlbF93b3JrZXJzOwogZXh0ZXJuIFBHRExM SU1QT1JUIGJvb2wgbnVtYV9idWZmZXJzX2ludGVybGVhdmU7CiBleHRlcm4gUEdETExJTVBP UlQgYm9vbCBudW1hX2xvY2FsYWxsb2M7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBudW1h X3BhcnRpdGlvbl9mcmVlbGlzdDsKK2V4dGVybiBQR0RMTElNUE9SVCBib29sIG51bWFfcHJv Y3NfaW50ZXJsZWF2ZTsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBjb21taXRfdGltZXN0 YW1wX2J1ZmZlcnM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG11bHRpeGFjdF9tZW1iZXJf YnVmZmVyczsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvYy5oIGIvc3Jj L2luY2x1ZGUvc3RvcmFnZS9wcm9jLmgKaW5kZXggOWY5YjNmY2ZiZjEuLjVjYjE2MzI3MThl IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2MuaAorKysgYi9zcmMvaW5j bHVkZS9zdG9yYWdlL3Byb2MuaApAQCAtMTk0LDYgKzE5NCw4IEBAIHN0cnVjdCBQR1BST0MK IAkJCQkJCQkJICogdmFjdXVtIG11c3Qgbm90IHJlbW92ZSB0dXBsZXMgZGVsZXRlZCBieQog CQkJCQkJCQkgKiB4aWQgPj0geG1pbiAhICovCiAKKwlpbnQJCQlwcm9jbnVtYmVyOwkJLyog aW5kZXggaW4gUHJvY0dsb2JhbC0+YWxsUHJvY3MgKi8KKwogCWludAkJCXBpZDsJCQkvKiBC YWNrZW5kJ3MgcHJvY2VzcyBJRDsgMCBpZiBwcmVwYXJlZCB4YWN0ICovCiAKIAlpbnQJCQlw Z3hhY3RvZmY7CQkvKiBvZmZzZXQgaW50byB2YXJpb3VzIFByb2NHbG9iYWwtPmFycmF5cyB3 aXRoCkBAIC0zMTksNiArMzIxLDkgQEAgc3RydWN0IFBHUFJPQwogCVBHUFJPQwkgICAqbG9j a0dyb3VwTGVhZGVyOwkvKiBsb2NrIGdyb3VwIGxlYWRlciwgaWYgSSdtIGEgbWVtYmVyICov CiAJZGxpc3RfaGVhZAlsb2NrR3JvdXBNZW1iZXJzOwkvKiBsaXN0IG9mIG1lbWJlcnMsIGlm IEknbSBhIGxlYWRlciAqLwogCWRsaXN0X25vZGUJbG9ja0dyb3VwTGluazsJLyogbXkgbWVt YmVyIGxpbmssIGlmIEknbSBhIG1lbWJlciAqLworCisJLyogTlVNQSBub2RlICovCisJaW50 CQkJbnVtYV9ub2RlOwogfTsKIAogLyogTk9URTogInR5cGVkZWYgc3RydWN0IFBHUFJPQyBQ R1BST0MiIGFwcGVhcnMgaW4gc3RvcmFnZS9sb2NrLmguICovCkBAIC0zODMsNyArMzg4LDcg QEAgZXh0ZXJuIFBHRExMSU1QT1JUIFBHUFJPQyAqTXlQcm9jOwogdHlwZWRlZiBzdHJ1Y3Qg UFJPQ19IRFIKIHsKIAkvKiBBcnJheSBvZiBQR1BST0Mgc3RydWN0dXJlcyAobm90IGluY2x1 ZGluZyBkdW1taWVzIGZvciBwcmVwYXJlZCB0eG5zKSAqLwotCVBHUFJPQwkgICAqYWxsUHJv Y3M7CisJUEdQUk9DCSAgKiphbGxQcm9jczsKIAogCS8qIEFycmF5IG1pcnJvcmluZyBQR1BS T0MueGlkIGZvciBlYWNoIFBHUFJPQyBjdXJyZW50bHkgaW4gdGhlIHByb2NhcnJheSAqLwog CVRyYW5zYWN0aW9uSWQgKnhpZHM7CkBAIC00MzUsOCArNDQwLDggQEAgZXh0ZXJuIFBHRExM SU1QT1JUIFBHUFJPQyAqUHJlcGFyZWRYYWN0UHJvY3M7CiAvKgogICogQWNjZXNzb3JzIGZv ciBnZXR0aW5nIFBHUFJPQyBnaXZlbiBhIFByb2NOdW1iZXIgYW5kIHZpY2UgdmVyc2EuCiAg Ki8KLSNkZWZpbmUgR2V0UEdQcm9jQnlOdW1iZXIobikgKCZQcm9jR2xvYmFsLT5hbGxQcm9j c1sobildKQotI2RlZmluZSBHZXROdW1iZXJGcm9tUEdQcm9jKHByb2MpICgocHJvYykgLSAm UHJvY0dsb2JhbC0+YWxsUHJvY3NbMF0pCisjZGVmaW5lIEdldFBHUHJvY0J5TnVtYmVyKG4p IChQcm9jR2xvYmFsLT5hbGxQcm9jc1sobildKQorI2RlZmluZSBHZXROdW1iZXJGcm9tUEdQ cm9jKHByb2MpICgocHJvYyktPnByb2NudW1iZXIpCiAKIC8qCiAgKiBXZSBzZXQgYXNpZGUg c29tZSBleHRyYSBQR1BST0Mgc3RydWN0dXJlcyBmb3IgInNwZWNpYWwgd29ya2VyIiBwcm9j ZXNzZXMsCi0tIAoyLjQ5LjAKCg== --------------ZiLGGg5GsiuT6QTFDhUm0SgE Content-Type: text/x-patch; charset=UTF-8; name="v2-0005-NUMA-clockweep-partitioning.patch" Content-Disposition: attachment; filename="v2-0005-NUMA-clockweep-partitioning.patch" Content-Transfer-Encoding: base64 RnJvbSBjNGQ1MWFiODdiOTJmOTkwMGUzN2Q0MmNmNzQ5ODBlODdiNjQ4YTU2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogU3VuLCA4IEp1biAyMDI1IDE4OjUzOjEyICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MiA1LzddIE5VTUE6IGNsb2Nrd2VlcCBwYXJ0aXRpb25pbmcKCi0tLQogc3JjL2JhY2tlbmQv c3RvcmFnZS9idWZmZXIvYnVmbWdyLmMgICB8IDQ3MyArKysrKysrKysrKysrKy0tLS0tLS0t LS0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyB8IDIwMiArKysr KysrKy0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZfaW50ZXJuYWxzLmggICB8ICAgNCAr LQogMyBmaWxlcyBjaGFuZ2VkLCA0MjQgaW5zZXJ0aW9ucygrKSwgMjU1IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggNTkyMjY4OWZlNWQu LjNkNmM4MzRkNzdjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9i dWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAt MzU4Nyw2ICszNTg3LDIzIEBAIEJ1ZmZlclN5bmMoaW50IGZsYWdzKQogCVRSQUNFX1BPU1RH UkVTUUxfQlVGRkVSX1NZTkNfRE9ORShOQnVmZmVycywgbnVtX3dyaXR0ZW4sIG51bV90b19z Y2FuKTsKIH0KIAorLyoKKyAqIEluZm9ybWF0aW9uIHNhdmVkIGJldHdlZW4gY2FsbHMgc28g d2UgY2FuIGRldGVybWluZSB0aGUgc3RyYXRlZ3kKKyAqIHBvaW50J3MgYWR2YW5jZSByYXRl IGFuZCBhdm9pZCBzY2FubmluZyBhbHJlYWR5LWNsZWFuZWQgYnVmZmVycy4KKyAqCisgKiBY WFggT25lIHZhbHVlIHBlciBwYXJ0aXRpb24uIFdlIGRvbid0IGtub3cgaG93IG1hbnkgcGFy dGl0aW9ucyBhcmUKKyAqIHRoZXJlLCBzbyBhbGxvY2F0ZSAzMiwgc2hvdWxkIGJlIGVub3Vn aCBmb3IgdGhlIFBvQyBwYXRjaC4KKyAqCisgKiBYWFggbWlnaHQgYmUgYmV0dGVyIHRvIGhh dmUgYSBwZXItcGFydGl0aW9uIHN0cnVjdCB3aXRoIGFsbCB0aGUgaW5mbworICovCisjZGVm aW5lIE1BWF9DTE9DS1NXRUVQX1BBUlRJVElPTlMgMzIKK3N0YXRpYyBib29sIHNhdmVkX2lu Zm9fdmFsaWQgPSBmYWxzZTsKK3N0YXRpYyBpbnQJcHJldl9zdHJhdGVneV9idWZfaWRbTUFY X0NMT0NLU1dFRVBfUEFSVElUSU9OU107CitzdGF0aWMgdWludDMyIHByZXZfc3RyYXRlZ3lf cGFzc2VzW01BWF9DTE9DS1NXRUVQX1BBUlRJVElPTlNdOworc3RhdGljIGludAluZXh0X3Rv X2NsZWFuW01BWF9DTE9DS1NXRUVQX1BBUlRJVElPTlNdOworc3RhdGljIHVpbnQzMiBuZXh0 X3Bhc3Nlc1tNQVhfQ0xPQ0tTV0VFUF9QQVJUSVRJT05TXTsKKworCiAvKgogICogQmdCdWZm ZXJTeW5jIC0tIFdyaXRlIG91dCBzb21lIGRpcnR5IGJ1ZmZlcnMgaW4gdGhlIHBvb2wuCiAg KgpAQCAtMzYwMiw1NSArMzYxOSwyNCBAQCBib29sCiBCZ0J1ZmZlclN5bmMoV3JpdGViYWNr Q29udGV4dCAqd2JfY29udGV4dCkKIHsKIAkvKiBpbmZvIG9idGFpbmVkIGZyb20gZnJlZWxp c3QuYyAqLwotCWludAkJCXN0cmF0ZWd5X2J1Zl9pZDsKLQl1aW50MzIJCXN0cmF0ZWd5X3Bh c3NlczsKIAl1aW50MzIJCXJlY2VudF9hbGxvYzsKKwl1aW50MzIJCXJlY2VudF9hbGxvY19w YXJ0aXRpb247CisJaW50CQkJbnVtX3BhcnRpdGlvbnM7CiAKLQkvKgotCSAqIEluZm9ybWF0 aW9uIHNhdmVkIGJldHdlZW4gY2FsbHMgc28gd2UgY2FuIGRldGVybWluZSB0aGUgc3RyYXRl Z3kKLQkgKiBwb2ludCdzIGFkdmFuY2UgcmF0ZSBhbmQgYXZvaWQgc2Nhbm5pbmcgYWxyZWFk eS1jbGVhbmVkIGJ1ZmZlcnMuCi0JICovCi0Jc3RhdGljIGJvb2wgc2F2ZWRfaW5mb192YWxp ZCA9IGZhbHNlOwotCXN0YXRpYyBpbnQJcHJldl9zdHJhdGVneV9idWZfaWQ7Ci0Jc3RhdGlj IHVpbnQzMiBwcmV2X3N0cmF0ZWd5X3Bhc3NlczsKLQlzdGF0aWMgaW50CW5leHRfdG9fY2xl YW47Ci0Jc3RhdGljIHVpbnQzMiBuZXh0X3Bhc3NlczsKLQotCS8qIE1vdmluZyBhdmVyYWdl cyBvZiBhbGxvY2F0aW9uIHJhdGUgYW5kIGNsZWFuLWJ1ZmZlciBkZW5zaXR5ICovCi0Jc3Rh dGljIGZsb2F0IHNtb290aGVkX2FsbG9jID0gMDsKLQlzdGF0aWMgZmxvYXQgc21vb3RoZWRf ZGVuc2l0eSA9IDEwLjA7Ci0KLQkvKiBQb3RlbnRpYWxseSB0aGVzZSBjb3VsZCBiZSB0dW5h YmxlcywgYnV0IGZvciBub3csIG5vdCAqLwotCWZsb2F0CQlzbW9vdGhpbmdfc2FtcGxlcyA9 IDE2OwotCWZsb2F0CQlzY2FuX3dob2xlX3Bvb2xfbWlsbGlzZWNvbmRzID0gMTIwMDAwLjA7 Ci0KLQkvKiBVc2VkIHRvIGNvbXB1dGUgaG93IGZhciB3ZSBzY2FuIGFoZWFkICovCi0JbG9u ZwkJc3RyYXRlZ3lfZGVsdGE7Ci0JaW50CQkJYnVmc190b19sYXA7Ci0JaW50CQkJYnVmc19h aGVhZDsKLQlmbG9hdAkJc2NhbnNfcGVyX2FsbG9jOwotCWludAkJCXJldXNhYmxlX2J1ZmZl cnNfZXN0OwotCWludAkJCXVwY29taW5nX2FsbG9jX2VzdDsKLQlpbnQJCQltaW5fc2Nhbl9i dWZmZXJzOwotCi0JLyogVmFyaWFibGVzIGZvciB0aGUgc2Nhbm5pbmcgbG9vcCBwcm9wZXIg Ki8KLQlpbnQJCQludW1fdG9fc2NhbjsKLQlpbnQJCQludW1fd3JpdHRlbjsKLQlpbnQJCQly ZXVzYWJsZV9idWZmZXJzOworCS8qIGFzc3VtZSB3ZSBjYW4gaGliZXJuYXRlLCBhbnkgcGFy dGl0aW9uIGNhbiBzZXQgdG8gZmFsc2UgKi8KKwlib29sCQloaWJlcm5hdGUgPSB0cnVlOwog Ci0JLyogVmFyaWFibGVzIGZvciBmaW5hbCBzbW9vdGhlZF9kZW5zaXR5IHVwZGF0ZSAqLwot CWxvbmcJCW5ld19zdHJhdGVneV9kZWx0YTsKLQl1aW50MzIJCW5ld19yZWNlbnRfYWxsb2M7 CisJLyogZ2V0IHRoZSBudW1iZXIgb2YgY2xvY2tzd2VlcCBwYXJ0aXRpb25zLCBhbmQgdG90 YWwgYWxsb2MgY291bnQgKi8KKwlTdHJhdGVneVN5bmNQcmVwYXJlKCZudW1fcGFydGl0aW9u cywgJnJlY2VudF9hbGxvYyk7CiAKLQkvKgotCSAqIEZpbmQgb3V0IHdoZXJlIHRoZSBmcmVl bGlzdCBjbG9jayBzd2VlcCBjdXJyZW50bHkgaXMsIGFuZCBob3cgbWFueQotCSAqIGJ1ZmZl ciBhbGxvY2F0aW9ucyBoYXZlIGhhcHBlbmVkIHNpbmNlIG91ciBsYXN0IGNhbGwuCi0JICov Ci0Jc3RyYXRlZ3lfYnVmX2lkID0gU3RyYXRlZ3lTeW5jU3RhcnQoJnN0cmF0ZWd5X3Bhc3Nl cywgJnJlY2VudF9hbGxvYyk7CisJQXNzZXJ0KG51bV9wYXJ0aXRpb25zIDw9IE1BWF9DTE9D S1NXRUVQX1BBUlRJVElPTlMpOwogCiAJLyogUmVwb3J0IGJ1ZmZlciBhbGxvYyBjb3VudHMg dG8gcGdzdGF0ICovCiAJUGVuZGluZ0JnV3JpdGVyU3RhdHMuYnVmX2FsbG9jICs9IHJlY2Vu dF9hbGxvYzsKIAorCS8qIGF2ZXJhZ2UgYWxsb2MgYnVmZmVycyBwZXIgcGFydGl0aW9uICov CisJcmVjZW50X2FsbG9jX3BhcnRpdGlvbiA9IChyZWNlbnRfYWxsb2MgLyBudW1fcGFydGl0 aW9ucyk7CisKIAkvKgogCSAqIElmIHdlJ3JlIG5vdCBydW5uaW5nIHRoZSBMUlUgc2Nhbiwg anVzdCBzdG9wIGFmdGVyIGRvaW5nIHRoZSBzdGF0cwogCSAqIHN0dWZmLiAgV2UgbWFyayB0 aGUgc2F2ZWQgc3RhdGUgaW52YWxpZCBzbyB0aGF0IHdlIGNhbiByZWNvdmVyIHNhbmVseQpA QCAtMzY2MywyMjMgKzM2NDksMjgyIEBAIEJnQnVmZmVyU3luYyhXcml0ZWJhY2tDb250ZXh0 ICp3Yl9jb250ZXh0KQogCX0KIAogCS8qCi0JICogQ29tcHV0ZSBzdHJhdGVneV9kZWx0YSA9 IGhvdyBtYW55IGJ1ZmZlcnMgaGF2ZSBiZWVuIHNjYW5uZWQgYnkgdGhlCi0JICogY2xvY2sg c3dlZXAgc2luY2UgbGFzdCB0aW1lLiAgSWYgZmlyc3QgdGltZSB0aHJvdWdoLCBhc3N1bWUg bm9uZS4gVGhlbgotCSAqIHNlZSBpZiB3ZSBhcmUgc3RpbGwgYWhlYWQgb2YgdGhlIGNsb2Nr IHN3ZWVwLCBhbmQgaWYgc28sIGhvdyBtYW55Ci0JICogYnVmZmVycyB3ZSBjb3VsZCBzY2Fu IGJlZm9yZSB3ZSdkIGNhdGNoIHVwIHdpdGggaXQgYW5kICJsYXAiIGl0LiBOb3RlOgotCSAq IHdlaXJkLWxvb2tpbmcgY29kaW5nIG9mIHh4eF9wYXNzZXMgY29tcGFyaXNvbnMgYXJlIHRv IGF2b2lkIGJvZ3VzCi0JICogYmVoYXZpb3Igd2hlbiB0aGUgcGFzc2VzIGNvdW50cyB3cmFw IGFyb3VuZC4KLQkgKi8KLQlpZiAoc2F2ZWRfaW5mb192YWxpZCkKLQl7Ci0JCWludDMyCQlw YXNzZXNfZGVsdGEgPSBzdHJhdGVneV9wYXNzZXMgLSBwcmV2X3N0cmF0ZWd5X3Bhc3NlczsK LQotCQlzdHJhdGVneV9kZWx0YSA9IHN0cmF0ZWd5X2J1Zl9pZCAtIHByZXZfc3RyYXRlZ3lf YnVmX2lkOwotCQlzdHJhdGVneV9kZWx0YSArPSAobG9uZykgcGFzc2VzX2RlbHRhICogTkJ1 ZmZlcnM7CisJICogbm93IHByb2Nlc3MgdGhlIGNsb2Nrc3dlZXAgcGFydGl0aW9ucywgb25l IGJ5IG9uZSwgdXNpbmcgdGhlIHNhbWUKKwkgKiBjbGVhbnVwIHRoYXQgd2UgdXNlZCBmb3Ig YWxsIGJ1ZmZlcnMKKwkgKgorCSAqIFhYWCBNYXliZSB3ZSBzaG91bGQgcmFuZG9taXplIHRo ZSBvcmRlciBvZiBwYXJ0aXRpb25zIGEgYml0LCBzbyB0aGF0CisJICogd2UgZG9uJ3Qgc3Rh cnQgZnJvbSBwYXJ0aXRpb24gMCBhbGwgdGhlIHRpbWU/IFBlcmhhcHMgbm90IGVudGlyZWx5 LAorCSAqIGJ1dCBhdCBsZWFzdCBwaWNrIGEgcmFuZG9tIHN0YXJ0aW5nIHBvaW50PworCSAq LworCWZvciAoaW50IHBhcnRpdGlvbiA9IDA7IHBhcnRpdGlvbiA8IG51bV9wYXJ0aXRpb25z OyBwYXJ0aXRpb24rKykKKwl7CisJCS8qIGluZm8gb2J0YWluZWQgZnJvbSBmcmVlbGlzdC5j ICovCisJCWludAkJCXN0cmF0ZWd5X2J1Zl9pZDsKKwkJdWludDMyCQlzdHJhdGVneV9wYXNz ZXM7CisKKwkJLyogTW92aW5nIGF2ZXJhZ2VzIG9mIGFsbG9jYXRpb24gcmF0ZSBhbmQgY2xl YW4tYnVmZmVyIGRlbnNpdHkgKi8KKwkJc3RhdGljIGZsb2F0IHNtb290aGVkX2FsbG9jID0g MDsKKwkJc3RhdGljIGZsb2F0IHNtb290aGVkX2RlbnNpdHkgPSAxMC4wOworCisJCS8qIFBv dGVudGlhbGx5IHRoZXNlIGNvdWxkIGJlIHR1bmFibGVzLCBidXQgZm9yIG5vdywgbm90ICov CisJCWZsb2F0CQlzbW9vdGhpbmdfc2FtcGxlcyA9IDE2OworCQlmbG9hdAkJc2Nhbl93aG9s ZV9wb29sX21pbGxpc2Vjb25kcyA9IDEyMDAwMC4wOworCisJCS8qIFVzZWQgdG8gY29tcHV0 ZSBob3cgZmFyIHdlIHNjYW4gYWhlYWQgKi8KKwkJbG9uZwkJc3RyYXRlZ3lfZGVsdGE7CisJ CWludAkJCWJ1ZnNfdG9fbGFwOworCQlpbnQJCQlidWZzX2FoZWFkOworCQlmbG9hdAkJc2Nh bnNfcGVyX2FsbG9jOworCQlpbnQJCQlyZXVzYWJsZV9idWZmZXJzX2VzdDsKKwkJaW50CQkJ dXBjb21pbmdfYWxsb2NfZXN0OworCQlpbnQJCQltaW5fc2Nhbl9idWZmZXJzOworCisJCS8q IFZhcmlhYmxlcyBmb3IgdGhlIHNjYW5uaW5nIGxvb3AgcHJvcGVyICovCisJCWludAkJCW51 bV90b19zY2FuOworCQlpbnQJCQludW1fd3JpdHRlbjsKKwkJaW50CQkJcmV1c2FibGVfYnVm ZmVyczsKKworCQkvKiBWYXJpYWJsZXMgZm9yIGZpbmFsIHNtb290aGVkX2RlbnNpdHkgdXBk YXRlICovCisJCWxvbmcJCW5ld19zdHJhdGVneV9kZWx0YTsKKwkJdWludDMyCQluZXdfcmVj ZW50X2FsbG9jOworCisJCS8qIGJ1ZmZlciByYW5nZSBmb3IgdGhlIGNsb2Nrc3dlZXAgcGFy dGl0aW9uICovCisJCWludAkJCWZpcnN0X2J1ZmZlcjsKKwkJaW50CQkJbnVtX2J1ZmZlcnM7 CiAKLQkJQXNzZXJ0KHN0cmF0ZWd5X2RlbHRhID49IDApOworCQkvKgorCQkgKiBGaW5kIG91 dCB3aGVyZSB0aGUgZnJlZWxpc3QgY2xvY2sgc3dlZXAgY3VycmVudGx5IGlzLCBhbmQgaG93 IG1hbnkKKwkJICogYnVmZmVyIGFsbG9jYXRpb25zIGhhdmUgaGFwcGVuZWQgc2luY2Ugb3Vy IGxhc3QgY2FsbC4KKwkJICovCisJCXN0cmF0ZWd5X2J1Zl9pZCA9IFN0cmF0ZWd5U3luY1N0 YXJ0KHBhcnRpdGlvbiwgJnN0cmF0ZWd5X3Bhc3NlcywKKwkJCQkJCQkJCQkJJmZpcnN0X2J1 ZmZlciwgJm51bV9idWZmZXJzKTsKIAotCQlpZiAoKGludDMyKSAobmV4dF9wYXNzZXMgLSBz dHJhdGVneV9wYXNzZXMpID4gMCkKKwkJLyoKKwkJICogQ29tcHV0ZSBzdHJhdGVneV9kZWx0 YSA9IGhvdyBtYW55IGJ1ZmZlcnMgaGF2ZSBiZWVuIHNjYW5uZWQgYnkgdGhlCisJCSAqIGNs b2NrIHN3ZWVwIHNpbmNlIGxhc3QgdGltZS4gIElmIGZpcnN0IHRpbWUgdGhyb3VnaCwgYXNz dW1lIG5vbmUuIFRoZW4KKwkJICogc2VlIGlmIHdlIGFyZSBzdGlsbCBhaGVhZCBvZiB0aGUg Y2xvY2sgc3dlZXAsIGFuZCBpZiBzbywgaG93IG1hbnkKKwkJICogYnVmZmVycyB3ZSBjb3Vs ZCBzY2FuIGJlZm9yZSB3ZSdkIGNhdGNoIHVwIHdpdGggaXQgYW5kICJsYXAiIGl0LiBOb3Rl OgorCQkgKiB3ZWlyZC1sb29raW5nIGNvZGluZyBvZiB4eHhfcGFzc2VzIGNvbXBhcmlzb25z IGFyZSB0byBhdm9pZCBib2d1cworCQkgKiBiZWhhdmlvciB3aGVuIHRoZSBwYXNzZXMgY291 bnRzIHdyYXAgYXJvdW5kLgorCQkgKi8KKwkJaWYgKHNhdmVkX2luZm9fdmFsaWQpCiAJCXsK LQkJCS8qIHdlJ3JlIG9uZSBwYXNzIGFoZWFkIG9mIHRoZSBzdHJhdGVneSBwb2ludCAqLwot CQkJYnVmc190b19sYXAgPSBzdHJhdGVneV9idWZfaWQgLSBuZXh0X3RvX2NsZWFuOworCQkJ aW50MzIJCXBhc3Nlc19kZWx0YSA9IHN0cmF0ZWd5X3Bhc3NlcyAtIHByZXZfc3RyYXRlZ3lf cGFzc2VzW3BhcnRpdGlvbl07CisKKwkJCXN0cmF0ZWd5X2RlbHRhID0gc3RyYXRlZ3lfYnVm X2lkIC0gcHJldl9zdHJhdGVneV9idWZfaWRbcGFydGl0aW9uXTsKKwkJCXN0cmF0ZWd5X2Rl bHRhICs9IChsb25nKSBwYXNzZXNfZGVsdGEgKiBudW1fYnVmZmVyczsKKworCQkJQXNzZXJ0 KHN0cmF0ZWd5X2RlbHRhID49IDApOworCisJCQlpZiAoKGludDMyKSAobmV4dF9wYXNzZXNb cGFydGl0aW9uXSAtIHN0cmF0ZWd5X3Bhc3NlcykgPiAwKQorCQkJeworCQkJCS8qIHdlJ3Jl IG9uZSBwYXNzIGFoZWFkIG9mIHRoZSBzdHJhdGVneSBwb2ludCAqLworCQkJCWJ1ZnNfdG9f bGFwID0gc3RyYXRlZ3lfYnVmX2lkIC0gbmV4dF90b19jbGVhbltwYXJ0aXRpb25dOwogI2lm ZGVmIEJHV19ERUJVRwotCQkJZWxvZyhERUJVRzIsICJiZ3dyaXRlciBhaGVhZDogYmd3ICV1 LSV1IHN0cmF0ZWd5ICV1LSV1IGRlbHRhPSVsZCBsYXA9JWQiLAotCQkJCSBuZXh0X3Bhc3Nl cywgbmV4dF90b19jbGVhbiwKLQkJCQkgc3RyYXRlZ3lfcGFzc2VzLCBzdHJhdGVneV9idWZf aWQsCi0JCQkJIHN0cmF0ZWd5X2RlbHRhLCBidWZzX3RvX2xhcCk7CisJCQkJZWxvZyhERUJV RzIsICJiZ3dyaXRlciBhaGVhZDogYmd3ICV1LSV1IHN0cmF0ZWd5ICV1LSV1IGRlbHRhPSVs ZCBsYXA9JWQiLAorCQkJCQkgbmV4dF9wYXNzZXMsIG5leHRfdG9fY2xlYW4sCisJCQkJCSBz dHJhdGVneV9wYXNzZXMsIHN0cmF0ZWd5X2J1Zl9pZCwKKwkJCQkJIHN0cmF0ZWd5X2RlbHRh LCBidWZzX3RvX2xhcCk7CiAjZW5kaWYKLQkJfQotCQllbHNlIGlmIChuZXh0X3Bhc3NlcyA9 PSBzdHJhdGVneV9wYXNzZXMgJiYKLQkJCQkgbmV4dF90b19jbGVhbiA+PSBzdHJhdGVneV9i dWZfaWQpCi0JCXsKLQkJCS8qIG9uIHNhbWUgcGFzcywgYnV0IGFoZWFkIG9yIGF0IGxlYXN0 IG5vdCBiZWhpbmQgKi8KLQkJCWJ1ZnNfdG9fbGFwID0gTkJ1ZmZlcnMgLSAobmV4dF90b19j bGVhbiAtIHN0cmF0ZWd5X2J1Zl9pZCk7CisJCQl9CisJCQllbHNlIGlmIChuZXh0X3Bhc3Nl c1twYXJ0aXRpb25dID09IHN0cmF0ZWd5X3Bhc3NlcyAmJgorCQkJCQkgbmV4dF90b19jbGVh bltwYXJ0aXRpb25dID49IHN0cmF0ZWd5X2J1Zl9pZCkKKwkJCXsKKwkJCQkvKiBvbiBzYW1l IHBhc3MsIGJ1dCBhaGVhZCBvciBhdCBsZWFzdCBub3QgYmVoaW5kICovCisJCQkJYnVmc190 b19sYXAgPSBudW1fYnVmZmVycyAtIChuZXh0X3RvX2NsZWFuW3BhcnRpdGlvbl0gLSBzdHJh dGVneV9idWZfaWQpOworI2lmZGVmIEJHV19ERUJVRworCQkJCWVsb2coREVCVUcyLCAiYmd3 cml0ZXIgYWhlYWQ6IGJndyAldS0ldSBzdHJhdGVneSAldS0ldSBkZWx0YT0lbGQgbGFwPSVk IiwKKwkJCQkJIG5leHRfcGFzc2VzLCBuZXh0X3RvX2NsZWFuLAorCQkJCQkgc3RyYXRlZ3lf cGFzc2VzLCBzdHJhdGVneV9idWZfaWQsCisJCQkJCSBzdHJhdGVneV9kZWx0YSwgYnVmc190 b19sYXApOworI2VuZGlmCisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyoKKwkJCQkgKiBX ZSdyZSBiZWhpbmQsIHNvIHNraXAgZm9yd2FyZCB0byB0aGUgc3RyYXRlZ3kgcG9pbnQgYW5k IHN0YXJ0CisJCQkJICogY2xlYW5pbmcgZnJvbSB0aGVyZS4KKwkJCQkgKi8KICNpZmRlZiBC R1dfREVCVUcKLQkJCWVsb2coREVCVUcyLCAiYmd3cml0ZXIgYWhlYWQ6IGJndyAldS0ldSBz dHJhdGVneSAldS0ldSBkZWx0YT0lbGQgbGFwPSVkIiwKLQkJCQkgbmV4dF9wYXNzZXMsIG5l eHRfdG9fY2xlYW4sCi0JCQkJIHN0cmF0ZWd5X3Bhc3Nlcywgc3RyYXRlZ3lfYnVmX2lkLAot CQkJCSBzdHJhdGVneV9kZWx0YSwgYnVmc190b19sYXApOworCQkJCWVsb2coREVCVUcyLCAi Ymd3cml0ZXIgYmVoaW5kOiBiZ3cgJXUtJXUgc3RyYXRlZ3kgJXUtJXUgZGVsdGE9JWxkIiwK KwkJCQkJIG5leHRfcGFzc2VzLCBuZXh0X3RvX2NsZWFuLAorCQkJCQkgc3RyYXRlZ3lfcGFz c2VzLCBzdHJhdGVneV9idWZfaWQsCisJCQkJCSBzdHJhdGVneV9kZWx0YSk7CiAjZW5kaWYK KwkJCQluZXh0X3RvX2NsZWFuW3BhcnRpdGlvbl0gPSBzdHJhdGVneV9idWZfaWQ7CisJCQkJ bmV4dF9wYXNzZXNbcGFydGl0aW9uXSA9IHN0cmF0ZWd5X3Bhc3NlczsKKwkJCQlidWZzX3Rv X2xhcCA9IG51bV9idWZmZXJzOworCQkJfQogCQl9CiAJCWVsc2UKIAkJewogCQkJLyoKLQkJ CSAqIFdlJ3JlIGJlaGluZCwgc28gc2tpcCBmb3J3YXJkIHRvIHRoZSBzdHJhdGVneSBwb2lu dCBhbmQgc3RhcnQKLQkJCSAqIGNsZWFuaW5nIGZyb20gdGhlcmUuCisJCQkgKiBJbml0aWFs aXppbmcgYXQgc3RhcnR1cCBvciBhZnRlciBMUlUgc2Nhbm5pbmcgaGFkIGJlZW4gb2ZmLiBB bHdheXMKKwkJCSAqIHN0YXJ0IGF0IHRoZSBzdHJhdGVneSBwb2ludC4KIAkJCSAqLwogI2lm ZGVmIEJHV19ERUJVRwotCQkJZWxvZyhERUJVRzIsICJiZ3dyaXRlciBiZWhpbmQ6IGJndyAl dS0ldSBzdHJhdGVneSAldS0ldSBkZWx0YT0lbGQiLAotCQkJCSBuZXh0X3Bhc3NlcywgbmV4 dF90b19jbGVhbiwKLQkJCQkgc3RyYXRlZ3lfcGFzc2VzLCBzdHJhdGVneV9idWZfaWQsCi0J CQkJIHN0cmF0ZWd5X2RlbHRhKTsKKwkJCWVsb2coREVCVUcyLCAiYmd3cml0ZXIgaW5pdGlh bGl6aW5nOiBzdHJhdGVneSAldS0ldSIsCisJCQkJIHN0cmF0ZWd5X3Bhc3Nlcywgc3RyYXRl Z3lfYnVmX2lkKTsKICNlbmRpZgotCQkJbmV4dF90b19jbGVhbiA9IHN0cmF0ZWd5X2J1Zl9p ZDsKLQkJCW5leHRfcGFzc2VzID0gc3RyYXRlZ3lfcGFzc2VzOwotCQkJYnVmc190b19sYXAg PSBOQnVmZmVyczsKKwkJCXN0cmF0ZWd5X2RlbHRhID0gMDsKKwkJCW5leHRfdG9fY2xlYW5b cGFydGl0aW9uXSA9IHN0cmF0ZWd5X2J1Zl9pZDsKKwkJCW5leHRfcGFzc2VzW3BhcnRpdGlv bl0gPSBzdHJhdGVneV9wYXNzZXM7CisJCQlidWZzX3RvX2xhcCA9IG51bV9idWZmZXJzOwog CQl9Ci0JfQotCWVsc2UKLQl7Ci0JCS8qCi0JCSAqIEluaXRpYWxpemluZyBhdCBzdGFydHVw IG9yIGFmdGVyIExSVSBzY2FubmluZyBoYWQgYmVlbiBvZmYuIEFsd2F5cwotCQkgKiBzdGFy dCBhdCB0aGUgc3RyYXRlZ3kgcG9pbnQuCi0JCSAqLwotI2lmZGVmIEJHV19ERUJVRwotCQll bG9nKERFQlVHMiwgImJnd3JpdGVyIGluaXRpYWxpemluZzogc3RyYXRlZ3kgJXUtJXUiLAot CQkJIHN0cmF0ZWd5X3Bhc3Nlcywgc3RyYXRlZ3lfYnVmX2lkKTsKLSNlbmRpZgotCQlzdHJh dGVneV9kZWx0YSA9IDA7Ci0JCW5leHRfdG9fY2xlYW4gPSBzdHJhdGVneV9idWZfaWQ7Ci0J CW5leHRfcGFzc2VzID0gc3RyYXRlZ3lfcGFzc2VzOwotCQlidWZzX3RvX2xhcCA9IE5CdWZm ZXJzOwotCX0KIAotCS8qIFVwZGF0ZSBzYXZlZCBpbmZvIGZvciBuZXh0IHRpbWUgKi8KLQlw cmV2X3N0cmF0ZWd5X2J1Zl9pZCA9IHN0cmF0ZWd5X2J1Zl9pZDsKLQlwcmV2X3N0cmF0ZWd5 X3Bhc3NlcyA9IHN0cmF0ZWd5X3Bhc3NlczsKLQlzYXZlZF9pbmZvX3ZhbGlkID0gdHJ1ZTsK KwkJLyogVXBkYXRlIHNhdmVkIGluZm8gZm9yIG5leHQgdGltZSAqLworCQlwcmV2X3N0cmF0 ZWd5X2J1Zl9pZFtwYXJ0aXRpb25dID0gc3RyYXRlZ3lfYnVmX2lkOworCQlwcmV2X3N0cmF0 ZWd5X3Bhc3Nlc1twYXJ0aXRpb25dID0gc3RyYXRlZ3lfcGFzc2VzOworCQkvLyBGSVhNRSBo YXMgdG8gaGFwcGVuIGFmdGVyIGFsbCBwYXJ0aXRpb25zCisJCS8vIHNhdmVkX2luZm9fdmFs aWQgPSB0cnVlOwogCi0JLyoKLQkgKiBDb21wdXRlIGhvdyBtYW55IGJ1ZmZlcnMgaGFkIHRv IGJlIHNjYW5uZWQgZm9yIGVhY2ggbmV3IGFsbG9jYXRpb24sIGllLAotCSAqIDEvZGVuc2l0 eSBvZiByZXVzYWJsZSBidWZmZXJzLCBhbmQgdHJhY2sgYSBtb3ZpbmcgYXZlcmFnZSBvZiB0 aGF0LgotCSAqCi0JICogSWYgdGhlIHN0cmF0ZWd5IHBvaW50IGRpZG4ndCBtb3ZlLCB3ZSBk b24ndCB1cGRhdGUgdGhlIGRlbnNpdHkgZXN0aW1hdGUKLQkgKi8KLQlpZiAoc3RyYXRlZ3lf ZGVsdGEgPiAwICYmIHJlY2VudF9hbGxvYyA+IDApCi0JewotCQlzY2Fuc19wZXJfYWxsb2Mg PSAoZmxvYXQpIHN0cmF0ZWd5X2RlbHRhIC8gKGZsb2F0KSByZWNlbnRfYWxsb2M7Ci0JCXNt b290aGVkX2RlbnNpdHkgKz0gKHNjYW5zX3Blcl9hbGxvYyAtIHNtb290aGVkX2RlbnNpdHkp IC8KLQkJCXNtb290aGluZ19zYW1wbGVzOwotCX0KKwkJLyoKKwkJICogQ29tcHV0ZSBob3cg bWFueSBidWZmZXJzIGhhZCB0byBiZSBzY2FubmVkIGZvciBlYWNoIG5ldyBhbGxvY2F0aW9u LCBpZSwKKwkJICogMS9kZW5zaXR5IG9mIHJldXNhYmxlIGJ1ZmZlcnMsIGFuZCB0cmFjayBh IG1vdmluZyBhdmVyYWdlIG9mIHRoYXQuCisJCSAqCisJCSAqIElmIHRoZSBzdHJhdGVneSBw b2ludCBkaWRuJ3QgbW92ZSwgd2UgZG9uJ3QgdXBkYXRlIHRoZSBkZW5zaXR5IGVzdGltYXRl CisJCSAqLworCQlpZiAoc3RyYXRlZ3lfZGVsdGEgPiAwICYmIHJlY2VudF9hbGxvY19wYXJ0 aXRpb24gPiAwKQorCQl7CisJCQlzY2Fuc19wZXJfYWxsb2MgPSAoZmxvYXQpIHN0cmF0ZWd5 X2RlbHRhIC8gKGZsb2F0KSByZWNlbnRfYWxsb2NfcGFydGl0aW9uOworCQkJc21vb3RoZWRf ZGVuc2l0eSArPSAoc2NhbnNfcGVyX2FsbG9jIC0gc21vb3RoZWRfZGVuc2l0eSkgLworCQkJ CXNtb290aGluZ19zYW1wbGVzOworCQl9CiAKLQkvKgotCSAqIEVzdGltYXRlIGhvdyBtYW55 IHJldXNhYmxlIGJ1ZmZlcnMgdGhlcmUgYXJlIGJldHdlZW4gdGhlIGN1cnJlbnQKLQkgKiBz dHJhdGVneSBwb2ludCBhbmQgd2hlcmUgd2UndmUgc2Nhbm5lZCBhaGVhZCB0bywgYmFzZWQg b24gdGhlIHNtb290aGVkCi0JICogZGVuc2l0eSBlc3RpbWF0ZS4KLQkgKi8KLQlidWZzX2Fo ZWFkID0gTkJ1ZmZlcnMgLSBidWZzX3RvX2xhcDsKLQlyZXVzYWJsZV9idWZmZXJzX2VzdCA9 IChmbG9hdCkgYnVmc19haGVhZCAvIHNtb290aGVkX2RlbnNpdHk7CisJCS8qCisJCSAqIEVz dGltYXRlIGhvdyBtYW55IHJldXNhYmxlIGJ1ZmZlcnMgdGhlcmUgYXJlIGJldHdlZW4gdGhl IGN1cnJlbnQKKwkJICogc3RyYXRlZ3kgcG9pbnQgYW5kIHdoZXJlIHdlJ3ZlIHNjYW5uZWQg YWhlYWQgdG8sIGJhc2VkIG9uIHRoZSBzbW9vdGhlZAorCQkgKiBkZW5zaXR5IGVzdGltYXRl LgorCQkgKi8KKwkJYnVmc19haGVhZCA9IG51bV9idWZmZXJzIC0gYnVmc190b19sYXA7CisJ CXJldXNhYmxlX2J1ZmZlcnNfZXN0ID0gKGZsb2F0KSBidWZzX2FoZWFkIC8gc21vb3RoZWRf ZGVuc2l0eTsKIAotCS8qCi0JICogVHJhY2sgYSBtb3ZpbmcgYXZlcmFnZSBvZiByZWNlbnQg YnVmZmVyIGFsbG9jYXRpb25zLiAgSGVyZSwgcmF0aGVyIHRoYW4KLQkgKiBhIHRydWUgYXZl cmFnZSB3ZSB3YW50IGEgZmFzdC1hdHRhY2ssIHNsb3ctZGVjbGluZSBiZWhhdmlvcjogd2UK LQkgKiBpbW1lZGlhdGVseSBmb2xsb3cgYW55IGluY3JlYXNlLgotCSAqLwotCWlmIChzbW9v dGhlZF9hbGxvYyA8PSAoZmxvYXQpIHJlY2VudF9hbGxvYykKLQkJc21vb3RoZWRfYWxsb2Mg PSByZWNlbnRfYWxsb2M7Ci0JZWxzZQotCQlzbW9vdGhlZF9hbGxvYyArPSAoKGZsb2F0KSBy ZWNlbnRfYWxsb2MgLSBzbW9vdGhlZF9hbGxvYykgLwotCQkJc21vb3RoaW5nX3NhbXBsZXM7 CisJCS8qCisJCSAqIFRyYWNrIGEgbW92aW5nIGF2ZXJhZ2Ugb2YgcmVjZW50IGJ1ZmZlciBh bGxvY2F0aW9ucy4gIEhlcmUsIHJhdGhlciB0aGFuCisJCSAqIGEgdHJ1ZSBhdmVyYWdlIHdl IHdhbnQgYSBmYXN0LWF0dGFjaywgc2xvdy1kZWNsaW5lIGJlaGF2aW9yOiB3ZQorCQkgKiBp bW1lZGlhdGVseSBmb2xsb3cgYW55IGluY3JlYXNlLgorCQkgKi8KKwkJaWYgKHNtb290aGVk X2FsbG9jIDw9IChmbG9hdCkgcmVjZW50X2FsbG9jX3BhcnRpdGlvbikKKwkJCXNtb290aGVk X2FsbG9jID0gcmVjZW50X2FsbG9jX3BhcnRpdGlvbjsKKwkJZWxzZQorCQkJc21vb3RoZWRf YWxsb2MgKz0gKChmbG9hdCkgcmVjZW50X2FsbG9jX3BhcnRpdGlvbiAtIHNtb290aGVkX2Fs bG9jKSAvCisJCQkJc21vb3RoaW5nX3NhbXBsZXM7CiAKLQkvKiBTY2FsZSB0aGUgZXN0aW1h dGUgYnkgYSBHVUMgdG8gYWxsb3cgbW9yZSBhZ2dyZXNzaXZlIHR1bmluZy4gKi8KLQl1cGNv bWluZ19hbGxvY19lc3QgPSAoaW50KSAoc21vb3RoZWRfYWxsb2MgKiBiZ3dyaXRlcl9scnVf bXVsdGlwbGllcik7CisJCS8qIFNjYWxlIHRoZSBlc3RpbWF0ZSBieSBhIEdVQyB0byBhbGxv dyBtb3JlIGFnZ3Jlc3NpdmUgdHVuaW5nLiAqLworCQl1cGNvbWluZ19hbGxvY19lc3QgPSAo aW50KSAoc21vb3RoZWRfYWxsb2MgKiBiZ3dyaXRlcl9scnVfbXVsdGlwbGllcik7CiAKLQkv KgotCSAqIElmIHJlY2VudF9hbGxvYyByZW1haW5zIGF0IHplcm8gZm9yIG1hbnkgY3ljbGVz LCBzbW9vdGhlZF9hbGxvYyB3aWxsCi0JICogZXZlbnR1YWxseSB1bmRlcmZsb3cgdG8gemVy bywgYW5kIHRoZSB1bmRlcmZsb3dzIHByb2R1Y2UgYW5ub3lpbmcKLQkgKiBrZXJuZWwgd2Fy bmluZ3Mgb24gc29tZSBwbGF0Zm9ybXMuICBPbmNlIHVwY29taW5nX2FsbG9jX2VzdCBoYXMg Z29uZSB0bwotCSAqIHplcm8sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4gdHJhY2tpbmcgc21hbGxl ciBhbmQgc21hbGxlciB2YWx1ZXMgb2YKLQkgKiBzbW9vdGhlZF9hbGxvYywgc28ganVzdCBy ZXNldCBpdCB0byBleGFjdGx5IHplcm8gdG8gYXZvaWQgdGhpcwotCSAqIHN5bmRyb21lLiAg SXQgd2lsbCBwb3AgYmFjayB1cCBhcyBzb29uIGFzIHJlY2VudF9hbGxvYyBpbmNyZWFzZXMu Ci0JICovCi0JaWYgKHVwY29taW5nX2FsbG9jX2VzdCA9PSAwKQotCQlzbW9vdGhlZF9hbGxv YyA9IDA7CisJCS8qCisJCSAqIElmIHJlY2VudF9hbGxvYyByZW1haW5zIGF0IHplcm8gZm9y IG1hbnkgY3ljbGVzLCBzbW9vdGhlZF9hbGxvYyB3aWxsCisJCSAqIGV2ZW50dWFsbHkgdW5k ZXJmbG93IHRvIHplcm8sIGFuZCB0aGUgdW5kZXJmbG93cyBwcm9kdWNlIGFubm95aW5nCisJ CSAqIGtlcm5lbCB3YXJuaW5ncyBvbiBzb21lIHBsYXRmb3Jtcy4gIE9uY2UgdXBjb21pbmdf YWxsb2NfZXN0IGhhcyBnb25lIHRvCisJCSAqIHplcm8sIHRoZXJlJ3Mgbm8gcG9pbnQgaW4g dHJhY2tpbmcgc21hbGxlciBhbmQgc21hbGxlciB2YWx1ZXMgb2YKKwkJICogc21vb3RoZWRf YWxsb2MsIHNvIGp1c3QgcmVzZXQgaXQgdG8gZXhhY3RseSB6ZXJvIHRvIGF2b2lkIHRoaXMK KwkJICogc3luZHJvbWUuICBJdCB3aWxsIHBvcCBiYWNrIHVwIGFzIHNvb24gYXMgcmVjZW50 X2FsbG9jIGluY3JlYXNlcy4KKwkJICovCisJCWlmICh1cGNvbWluZ19hbGxvY19lc3QgPT0g MCkKKwkJCXNtb290aGVkX2FsbG9jID0gMDsKIAotCS8qCi0JICogRXZlbiBpbiBjYXNlcyB3 aGVyZSB0aGVyZSdzIGJlZW4gbGl0dGxlIG9yIG5vIGJ1ZmZlciBhbGxvY2F0aW9uCi0JICog YWN0aXZpdHksIHdlIHdhbnQgdG8gbWFrZSBhIHNtYWxsIGFtb3VudCBvZiBwcm9ncmVzcyB0 aHJvdWdoIHRoZSBidWZmZXIKLQkgKiBjYWNoZSBzbyB0aGF0IGFzIG1hbnkgcmV1c2FibGUg YnVmZmVycyBhcyBwb3NzaWJsZSBhcmUgY2xlYW4gYWZ0ZXIgYW4KLQkgKiBpZGxlIHBlcmlv ZC4KLQkgKgotCSAqIChzY2FuX3dob2xlX3Bvb2xfbWlsbGlzZWNvbmRzIC8gQmdXcml0ZXJE ZWxheSkgY29tcHV0ZXMgaG93IG1hbnkgdGltZXMKLQkgKiB0aGUgQkdXIHdpbGwgYmUgY2Fs bGVkIGR1cmluZyB0aGUgc2Nhbl93aG9sZV9wb29sIHRpbWU7IHNsaWNlIHRoZQotCSAqIGJ1 ZmZlciBwb29sIGludG8gdGhhdCBtYW55IHNlY3Rpb25zLgotCSAqLwotCW1pbl9zY2FuX2J1 ZmZlcnMgPSAoaW50KSAoTkJ1ZmZlcnMgLyAoc2Nhbl93aG9sZV9wb29sX21pbGxpc2Vjb25k cyAvIEJnV3JpdGVyRGVsYXkpKTsKKwkJLyoKKwkJICogRXZlbiBpbiBjYXNlcyB3aGVyZSB0 aGVyZSdzIGJlZW4gbGl0dGxlIG9yIG5vIGJ1ZmZlciBhbGxvY2F0aW9uCisJCSAqIGFjdGl2 aXR5LCB3ZSB3YW50IHRvIG1ha2UgYSBzbWFsbCBhbW91bnQgb2YgcHJvZ3Jlc3MgdGhyb3Vn aCB0aGUgYnVmZmVyCisJCSAqIGNhY2hlIHNvIHRoYXQgYXMgbWFueSByZXVzYWJsZSBidWZm ZXJzIGFzIHBvc3NpYmxlIGFyZSBjbGVhbiBhZnRlciBhbgorCQkgKiBpZGxlIHBlcmlvZC4K KwkJICoKKwkJICogKHNjYW5fd2hvbGVfcG9vbF9taWxsaXNlY29uZHMgLyBCZ1dyaXRlckRl bGF5KSBjb21wdXRlcyBob3cgbWFueSB0aW1lcworCQkgKiB0aGUgQkdXIHdpbGwgYmUgY2Fs bGVkIGR1cmluZyB0aGUgc2Nhbl93aG9sZV9wb29sIHRpbWU7IHNsaWNlIHRoZQorCQkgKiBi dWZmZXIgcG9vbCBpbnRvIHRoYXQgbWFueSBzZWN0aW9ucy4KKwkJICovCisJCW1pbl9zY2Fu X2J1ZmZlcnMgPSAoaW50KSAobnVtX2J1ZmZlcnMgLyAoc2Nhbl93aG9sZV9wb29sX21pbGxp c2Vjb25kcyAvIEJnV3JpdGVyRGVsYXkpKTsKIAotCWlmICh1cGNvbWluZ19hbGxvY19lc3Qg PCAobWluX3NjYW5fYnVmZmVycyArIHJldXNhYmxlX2J1ZmZlcnNfZXN0KSkKLQl7CisJCWlm ICh1cGNvbWluZ19hbGxvY19lc3QgPCAobWluX3NjYW5fYnVmZmVycyArIHJldXNhYmxlX2J1 ZmZlcnNfZXN0KSkKKwkJewogI2lmZGVmIEJHV19ERUJVRwotCQllbG9nKERFQlVHMiwgImJn d3JpdGVyOiBhbGxvY19lc3Q9JWQgdG9vIHNtYWxsLCB1c2luZyBtaW49JWQgKyByZXVzYWJs ZV9lc3Q9JWQiLAotCQkJIHVwY29taW5nX2FsbG9jX2VzdCwgbWluX3NjYW5fYnVmZmVycywg cmV1c2FibGVfYnVmZmVyc19lc3QpOworCQkJZWxvZyhERUJVRzIsICJiZ3dyaXRlcjogYWxs b2NfZXN0PSVkIHRvbyBzbWFsbCwgdXNpbmcgbWluPSVkICsgcmV1c2FibGVfZXN0PSVkIiwK KwkJCQkgdXBjb21pbmdfYWxsb2NfZXN0LCBtaW5fc2Nhbl9idWZmZXJzLCByZXVzYWJsZV9i dWZmZXJzX2VzdCk7CiAjZW5kaWYKLQkJdXBjb21pbmdfYWxsb2NfZXN0ID0gbWluX3NjYW5f YnVmZmVycyArIHJldXNhYmxlX2J1ZmZlcnNfZXN0OwotCX0KLQotCS8qCi0JICogTm93IHdy aXRlIG91dCBkaXJ0eSByZXVzYWJsZSBidWZmZXJzLCB3b3JraW5nIGZvcndhcmQgZnJvbSB0 aGUKLQkgKiBuZXh0X3RvX2NsZWFuIHBvaW50LCB1bnRpbCB3ZSBoYXZlIGxhcHBlZCB0aGUg c3RyYXRlZ3kgc2Nhbiwgb3IgY2xlYW5lZAotCSAqIGVub3VnaCBidWZmZXJzIHRvIG1hdGNo IG91ciBlc3RpbWF0ZSBvZiB0aGUgbmV4dCBjeWNsZSdzIGFsbG9jYXRpb24KLQkgKiByZXF1 aXJlbWVudHMsIG9yIGhpdCB0aGUgYmd3cml0ZXJfbHJ1X21heHBhZ2VzIGxpbWl0LgotCSAq LworCQkJdXBjb21pbmdfYWxsb2NfZXN0ID0gbWluX3NjYW5fYnVmZmVycyArIHJldXNhYmxl X2J1ZmZlcnNfZXN0OworCQl9CiAKLQludW1fdG9fc2NhbiA9IGJ1ZnNfdG9fbGFwOwotCW51 bV93cml0dGVuID0gMDsKLQlyZXVzYWJsZV9idWZmZXJzID0gcmV1c2FibGVfYnVmZmVyc19l c3Q7CisJCS8qCisJCSAqIE5vdyB3cml0ZSBvdXQgZGlydHkgcmV1c2FibGUgYnVmZmVycywg d29ya2luZyBmb3J3YXJkIGZyb20gdGhlCisJCSAqIG5leHRfdG9fY2xlYW4gcG9pbnQsIHVu dGlsIHdlIGhhdmUgbGFwcGVkIHRoZSBzdHJhdGVneSBzY2FuLCBvciBjbGVhbmVkCisJCSAq IGVub3VnaCBidWZmZXJzIHRvIG1hdGNoIG91ciBlc3RpbWF0ZSBvZiB0aGUgbmV4dCBjeWNs ZSdzIGFsbG9jYXRpb24KKwkJICogcmVxdWlyZW1lbnRzLCBvciBoaXQgdGhlIGJnd3JpdGVy X2xydV9tYXhwYWdlcyBsaW1pdC4KKwkJICovCiAKLQkvKiBFeGVjdXRlIHRoZSBMUlUgc2Nh biAqLwotCXdoaWxlIChudW1fdG9fc2NhbiA+IDAgJiYgcmV1c2FibGVfYnVmZmVycyA8IHVw Y29taW5nX2FsbG9jX2VzdCkKLQl7Ci0JCWludAkJCXN5bmNfc3RhdGUgPSBTeW5jT25lQnVm ZmVyKG5leHRfdG9fY2xlYW4sIHRydWUsCi0JCQkJCQkJCQkJCSAgIHdiX2NvbnRleHQpOwor CQludW1fdG9fc2NhbiA9IGJ1ZnNfdG9fbGFwOworCQludW1fd3JpdHRlbiA9IDA7CisJCXJl dXNhYmxlX2J1ZmZlcnMgPSByZXVzYWJsZV9idWZmZXJzX2VzdDsKIAotCQlpZiAoKytuZXh0 X3RvX2NsZWFuID49IE5CdWZmZXJzKQorCQkvKiBFeGVjdXRlIHRoZSBMUlUgc2NhbiAqLwor CQl3aGlsZSAobnVtX3RvX3NjYW4gPiAwICYmIHJldXNhYmxlX2J1ZmZlcnMgPCB1cGNvbWlu Z19hbGxvY19lc3QpCiAJCXsKLQkJCW5leHRfdG9fY2xlYW4gPSAwOwotCQkJbmV4dF9wYXNz ZXMrKzsKLQkJfQotCQludW1fdG9fc2Nhbi0tOworCQkJaW50CQkJc3luY19zdGF0ZSA9IFN5 bmNPbmVCdWZmZXIobmV4dF90b19jbGVhbltwYXJ0aXRpb25dLCB0cnVlLAorCQkJCQkJCQkJ CQkJICAgd2JfY29udGV4dCk7CiAKLQkJaWYgKHN5bmNfc3RhdGUgJiBCVUZfV1JJVFRFTikK LQkJewotCQkJcmV1c2FibGVfYnVmZmVycysrOwotCQkJaWYgKCsrbnVtX3dyaXR0ZW4gPj0g Ymd3cml0ZXJfbHJ1X21heHBhZ2VzKQorCQkJaWYgKCsrbmV4dF90b19jbGVhbltwYXJ0aXRp b25dID49IChmaXJzdF9idWZmZXIgKyBudW1fYnVmZmVycykpCiAJCQl7Ci0JCQkJUGVuZGlu Z0JnV3JpdGVyU3RhdHMubWF4d3JpdHRlbl9jbGVhbisrOwotCQkJCWJyZWFrOworCQkJCW5l eHRfdG9fY2xlYW5bcGFydGl0aW9uXSA9IGZpcnN0X2J1ZmZlcjsKKwkJCQluZXh0X3Bhc3Nl c1twYXJ0aXRpb25dKys7CisJCQl9CisJCQludW1fdG9fc2Nhbi0tOworCisJCQlpZiAoc3lu Y19zdGF0ZSAmIEJVRl9XUklUVEVOKQorCQkJeworCQkJCXJldXNhYmxlX2J1ZmZlcnMrKzsK KwkJCQlpZiAoKytudW1fd3JpdHRlbiA+PSAoYmd3cml0ZXJfbHJ1X21heHBhZ2VzIC8gbnVt X3BhcnRpdGlvbnMpKQorCQkJCXsKKwkJCQkJUGVuZGluZ0JnV3JpdGVyU3RhdHMubWF4d3Jp dHRlbl9jbGVhbisrOworCQkJCQlicmVhazsKKwkJCQl9CiAJCQl9CisJCQllbHNlIGlmIChz eW5jX3N0YXRlICYgQlVGX1JFVVNBQkxFKQorCQkJCXJldXNhYmxlX2J1ZmZlcnMrKzsKIAkJ fQotCQllbHNlIGlmIChzeW5jX3N0YXRlICYgQlVGX1JFVVNBQkxFKQotCQkJcmV1c2FibGVf YnVmZmVycysrOwotCX0KIAotCVBlbmRpbmdCZ1dyaXRlclN0YXRzLmJ1Zl93cml0dGVuX2Ns ZWFuICs9IG51bV93cml0dGVuOworCQlQZW5kaW5nQmdXcml0ZXJTdGF0cy5idWZfd3JpdHRl bl9jbGVhbiArPSBudW1fd3JpdHRlbjsKIAogI2lmZGVmIEJHV19ERUJVRwotCWVsb2coREVC VUcxLCAiYmd3cml0ZXI6IHJlY2VudF9hbGxvYz0ldSBzbW9vdGhlZD0lLjJmIGRlbHRhPSVs ZCBhaGVhZD0lZCBkZW5zaXR5PSUuMmYgcmV1c2FibGVfZXN0PSVkIHVwY29taW5nX2VzdD0l ZCBzY2FubmVkPSVkIHdyb3RlPSVkIHJldXNhYmxlPSVkIiwKLQkJIHJlY2VudF9hbGxvYywg c21vb3RoZWRfYWxsb2MsIHN0cmF0ZWd5X2RlbHRhLCBidWZzX2FoZWFkLAotCQkgc21vb3Ro ZWRfZGVuc2l0eSwgcmV1c2FibGVfYnVmZmVyc19lc3QsIHVwY29taW5nX2FsbG9jX2VzdCwK LQkJIGJ1ZnNfdG9fbGFwIC0gbnVtX3RvX3NjYW4sCi0JCSBudW1fd3JpdHRlbiwKLQkJIHJl dXNhYmxlX2J1ZmZlcnMgLSByZXVzYWJsZV9idWZmZXJzX2VzdCk7CisJCWVsb2coREVCVUcx LCAiYmd3cml0ZXI6IHJlY2VudF9hbGxvYz0ldSBzbW9vdGhlZD0lLjJmIGRlbHRhPSVsZCBh aGVhZD0lZCBkZW5zaXR5PSUuMmYgcmV1c2FibGVfZXN0PSVkIHVwY29taW5nX2VzdD0lZCBz Y2FubmVkPSVkIHdyb3RlPSVkIHJldXNhYmxlPSVkIiwKKwkJCSByZWNlbnRfYWxsb2NfcGFy dGl0aW9uLCBzbW9vdGhlZF9hbGxvYywgc3RyYXRlZ3lfZGVsdGEsIGJ1ZnNfYWhlYWQsCisJ CQkgc21vb3RoZWRfZGVuc2l0eSwgcmV1c2FibGVfYnVmZmVyc19lc3QsIHVwY29taW5nX2Fs bG9jX2VzdCwKKwkJCSBidWZzX3RvX2xhcCAtIG51bV90b19zY2FuLAorCQkJIG51bV93cml0 dGVuLAorCQkJIHJldXNhYmxlX2J1ZmZlcnMgLSByZXVzYWJsZV9idWZmZXJzX2VzdCk7CiAj ZW5kaWYKIAotCS8qCi0JICogQ29uc2lkZXIgdGhlIGFib3ZlIHNjYW4gYXMgYmVpbmcgbGlr ZSBhIG5ldyBhbGxvY2F0aW9uIHNjYW4uCi0JICogQ2hhcmFjdGVyaXplIGl0cyBkZW5zaXR5 IGFuZCB1cGRhdGUgdGhlIHNtb290aGVkIG9uZSBiYXNlZCBvbiBpdC4gVGhpcwotCSAqIGVm ZmVjdGl2ZWx5IGhhbHZlcyB0aGUgbW92aW5nIGF2ZXJhZ2UgcGVyaW9kIGluIGNhc2VzIHdo ZXJlIGJvdGggdGhlCi0JICogc3RyYXRlZ3kgYW5kIHRoZSBiYWNrZ3JvdW5kIHdyaXRlciBh cmUgZG9pbmcgc29tZSB1c2VmdWwgc2Nhbm5pbmcsCi0JICogd2hpY2ggaXMgaGVscGZ1bCBi ZWNhdXNlIGEgbG9uZyBtZW1vcnkgaXNuJ3QgYXMgZGVzaXJhYmxlIG9uIHRoZQotCSAqIGRl bnNpdHkgZXN0aW1hdGVzLgotCSAqLwotCW5ld19zdHJhdGVneV9kZWx0YSA9IGJ1ZnNfdG9f bGFwIC0gbnVtX3RvX3NjYW47Ci0JbmV3X3JlY2VudF9hbGxvYyA9IHJldXNhYmxlX2J1ZmZl cnMgLSByZXVzYWJsZV9idWZmZXJzX2VzdDsKLQlpZiAobmV3X3N0cmF0ZWd5X2RlbHRhID4g MCAmJiBuZXdfcmVjZW50X2FsbG9jID4gMCkKLQl7Ci0JCXNjYW5zX3Blcl9hbGxvYyA9IChm bG9hdCkgbmV3X3N0cmF0ZWd5X2RlbHRhIC8gKGZsb2F0KSBuZXdfcmVjZW50X2FsbG9jOwot CQlzbW9vdGhlZF9kZW5zaXR5ICs9IChzY2Fuc19wZXJfYWxsb2MgLSBzbW9vdGhlZF9kZW5z aXR5KSAvCi0JCQlzbW9vdGhpbmdfc2FtcGxlczsKKwkJLyoKKwkJICogQ29uc2lkZXIgdGhl IGFib3ZlIHNjYW4gYXMgYmVpbmcgbGlrZSBhIG5ldyBhbGxvY2F0aW9uIHNjYW4uCisJCSAq IENoYXJhY3Rlcml6ZSBpdHMgZGVuc2l0eSBhbmQgdXBkYXRlIHRoZSBzbW9vdGhlZCBvbmUg YmFzZWQgb24gaXQuIFRoaXMKKwkJICogZWZmZWN0aXZlbHkgaGFsdmVzIHRoZSBtb3Zpbmcg YXZlcmFnZSBwZXJpb2QgaW4gY2FzZXMgd2hlcmUgYm90aCB0aGUKKwkJICogc3RyYXRlZ3kg YW5kIHRoZSBiYWNrZ3JvdW5kIHdyaXRlciBhcmUgZG9pbmcgc29tZSB1c2VmdWwgc2Nhbm5p bmcsCisJCSAqIHdoaWNoIGlzIGhlbHBmdWwgYmVjYXVzZSBhIGxvbmcgbWVtb3J5IGlzbid0 IGFzIGRlc2lyYWJsZSBvbiB0aGUKKwkJICogZGVuc2l0eSBlc3RpbWF0ZXMuCisJCSAqLwor CQluZXdfc3RyYXRlZ3lfZGVsdGEgPSBidWZzX3RvX2xhcCAtIG51bV90b19zY2FuOworCQlu ZXdfcmVjZW50X2FsbG9jID0gcmV1c2FibGVfYnVmZmVycyAtIHJldXNhYmxlX2J1ZmZlcnNf ZXN0OworCQlpZiAobmV3X3N0cmF0ZWd5X2RlbHRhID4gMCAmJiBuZXdfcmVjZW50X2FsbG9j ID4gMCkKKwkJeworCQkJc2NhbnNfcGVyX2FsbG9jID0gKGZsb2F0KSBuZXdfc3RyYXRlZ3lf ZGVsdGEgLyAoZmxvYXQpIG5ld19yZWNlbnRfYWxsb2M7CisJCQlzbW9vdGhlZF9kZW5zaXR5 ICs9IChzY2Fuc19wZXJfYWxsb2MgLSBzbW9vdGhlZF9kZW5zaXR5KSAvCisJCQkJc21vb3Ro aW5nX3NhbXBsZXM7CiAKICNpZmRlZiBCR1dfREVCVUcKLQkJZWxvZyhERUJVRzIsICJiZ3dy aXRlcjogY2xlYW5lciBkZW5zaXR5IGFsbG9jPSV1IHNjYW49JWxkIGRlbnNpdHk9JS4yZiBu ZXcgc21vb3RoZWQ9JS4yZiIsCi0JCQkgbmV3X3JlY2VudF9hbGxvYywgbmV3X3N0cmF0ZWd5 X2RlbHRhLAotCQkJIHNjYW5zX3Blcl9hbGxvYywgc21vb3RoZWRfZGVuc2l0eSk7CisJCQll bG9nKERFQlVHMiwgImJnd3JpdGVyOiBjbGVhbmVyIGRlbnNpdHkgYWxsb2M9JXUgc2Nhbj0l bGQgZGVuc2l0eT0lLjJmIG5ldyBzbW9vdGhlZD0lLjJmIiwKKwkJCQkgbmV3X3JlY2VudF9h bGxvYywgbmV3X3N0cmF0ZWd5X2RlbHRhLAorCQkJCSBzY2Fuc19wZXJfYWxsb2MsIHNtb290 aGVkX2RlbnNpdHkpOwogI2VuZGlmCisJCX0KKworCQkvKiBoaWJlcm5hdGUgaWYgYWxsIHBh cnRpdGlvbnMgY2FuIGhpYmVybmF0ZSAqLworCQloaWJlcm5hdGUgJj0gKGJ1ZnNfdG9fbGFw ID09IDAgJiYgcmVjZW50X2FsbG9jX3BhcnRpdGlvbiA9PSAwKTsKIAl9CiAKKwkvKiBub3cg dGhhdCB3ZSd2ZSBzY2FubmVkIGFsbCBwYXJ0aXRpb25zLCBtYXJrIHRoZSBjYWNoZWQgaW5m byBhcyB2YWxpZCAqLworCXNhdmVkX2luZm9fdmFsaWQgPSB0cnVlOworCiAJLyogUmV0dXJu IHRydWUgaWYgT0sgdG8gaGliZXJuYXRlICovCi0JcmV0dXJuIChidWZzX3RvX2xhcCA9PSAw ICYmIHJlY2VudF9hbGxvYyA9PSAwKTsKKwlyZXR1cm4gaGliZXJuYXRlOwogfQogCiAvKgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYyBiL3Ny Yy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKaW5kZXggZTM4ZTVjN2VjM2Qu LjE4MjdlMDUyZGE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9m cmVlbGlzdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMK QEAgLTYzLDE3ICs2MywyNyBAQCB0eXBlZGVmIHN0cnVjdCBCdWZmZXJTdHJhdGVneUZyZWVs aXN0CiAjZGVmaW5lIE1JTl9GUkVFTElTVF9QQVJUSVRJT05TCQk0CiAKIC8qCi0gKiBUaGUg c2hhcmVkIGZyZWVsaXN0IGNvbnRyb2wgaW5mb3JtYXRpb24uCisgKiBJbmZvcm1hdGlvbiBh Ym91dCBvbmUgcGFydGl0aW9uIG9mIHRoZSBDbG9ja1N3ZWVwIChvbiBhIHN1YnNldCBvZiBi dWZmZXJzKS4KKyAqCisgKiBYWFggU2hvdWxkIGJlIGNhcmVmdWwgdG8gYWxpZ24gdGhpcyB0 byBjYWNoZWxpbmVzLCBldGMuCiAgKi8KIHR5cGVkZWYgc3RydWN0CiB7CiAJLyogU3Bpbmxv Y2s6IHByb3RlY3RzIHRoZSB2YWx1ZXMgYmVsb3cgKi8KLQlzbG9ja190CQlidWZmZXJfc3Ry YXRlZ3lfbG9jazsKKwlzbG9ja190CQljbG9ja19zd2VlcF9sb2NrOworCisJLyogcmFuZ2Ug Zm9yIHRoaXMgY2xvY2sgd2VlcCBwYXJ0aXRpb24gKi8KKwlpbnQzMgkJZmlyc3RCdWZmZXI7 CisJaW50MzIJCW51bUJ1ZmZlcnM7CiAKIAkvKgogCSAqIENsb2NrIHN3ZWVwIGhhbmQ6IGlu ZGV4IG9mIG5leHQgYnVmZmVyIHRvIGNvbnNpZGVyIGdyYWJiaW5nLiBOb3RlIHRoYXQKIAkg KiB0aGlzIGlzbid0IGEgY29uY3JldGUgYnVmZmVyIC0gd2Ugb25seSBldmVyIGluY3JlYXNl IHRoZSB2YWx1ZS4gU28sIHRvCiAJICogZ2V0IGFuIGFjdHVhbCBidWZmZXIsIGl0IG5lZWRz IHRvIGJlIHVzZWQgbW9kdWxvIE5CdWZmZXJzLgorCSAqCisJICogWFhYIFRoaXMgaXMgcmVs YXRpdmUgdG8gZmlyc3RCdWZmZXIsIHNvIG5lZWRzIHRvIGJlIG9mZnNldCBwcm9wZXJseS4K KwkgKgorCSAqIFhYWCBmaXJzdEJ1ZmZlciArIChuZXh0VmljdGltQnVmZmVyICUgbnVtQnVm ZmVycykKIAkgKi8KIAlwZ19hdG9taWNfdWludDMyIG5leHRWaWN0aW1CdWZmZXI7CiAKQEAg LTgzLDYgKzkzLDE1IEBAIHR5cGVkZWYgc3RydWN0CiAJICovCiAJdWludDMyCQljb21wbGV0 ZVBhc3NlczsgLyogQ29tcGxldGUgY3ljbGVzIG9mIHRoZSBjbG9jayBzd2VlcCAqLwogCXBn X2F0b21pY191aW50MzIgbnVtQnVmZmVyQWxsb2NzOwkvKiBCdWZmZXJzIGFsbG9jYXRlZCBz aW5jZSBsYXN0IHJlc2V0ICovCit9IENsb2NrU3dlZXA7CisKKy8qCisgKiBUaGUgc2hhcmVk IGZyZWVsaXN0IGNvbnRyb2wgaW5mb3JtYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7 CisJLyogU3BpbmxvY2s6IHByb3RlY3RzIHRoZSB2YWx1ZXMgYmVsb3cgKi8KKwlzbG9ja190 CQlidWZmZXJfc3RyYXRlZ3lfbG9jazsKIAogCS8qCiAJICogQmd3b3JrZXIgcHJvY2VzcyB0 byBiZSBub3RpZmllZCB1cG9uIGFjdGl2aXR5IG9yIC0xIGlmIG5vbmUuIFNlZQpAQCAtOTks NiArMTE4LDkgQEAgdHlwZWRlZiBzdHJ1Y3QKIAlpbnQJCQludW1fcGFydGl0aW9uc19ncm91 cHM7CS8qIGVmZmVjdGl2ZWx5IG51bSBvZiBOVU1BIG5vZGVzICovCiAJaW50CQkJbnVtX3Bh cnRpdGlvbnNfcGVyX2dyb3VwOwogCisJLyogY2xvY2tzd2VlcCBwYXJ0aXRpb25zICovCisJ Q2xvY2tTd2VlcCAqc3dlZXBzOworCiAJQnVmZmVyU3RyYXRlZ3lGcmVlbGlzdCBmcmVlbGlz dHNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKIH0gQnVmZmVyU3RyYXRlZ3lDb250cm9sOwog CkBAIC0xNTIsNiArMTc0LDcgQEAgc3RhdGljIEJ1ZmZlckRlc2MgKkdldEJ1ZmZlckZyb21S aW5nKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQkJIHVpbnQzMiAq YnVmX3N0YXRlKTsKIHN0YXRpYyB2b2lkIEFkZEJ1ZmZlclRvUmluZyhCdWZmZXJBY2Nlc3NT dHJhdGVneSBzdHJhdGVneSwKIAkJCQkJCQlCdWZmZXJEZXNjICpidWYpOworc3RhdGljIENs b2NrU3dlZXAgKkNob29zZUNsb2NrU3dlZXAodm9pZCk7CiAKIC8qCiAgKiBDbG9ja1N3ZWVw VGljayAtIEhlbHBlciByb3V0aW5lIGZvciBTdHJhdGVneUdldEJ1ZmZlcigpCkBAIC0xNjMs NiArMTg2LDcgQEAgc3RhdGljIGlubGluZSB1aW50MzIKIENsb2NrU3dlZXBUaWNrKHZvaWQp CiB7CiAJdWludDMyCQl2aWN0aW07CisJQ2xvY2tTd2VlcCAqc3dlZXAgPSBDaG9vc2VDbG9j a1N3ZWVwKCk7CiAKIAkvKgogCSAqIEF0b21pY2FsbHkgbW92ZSBoYW5kIGFoZWFkIG9uZSBi dWZmZXIgLSBpZiB0aGVyZSdzIHNldmVyYWwgcHJvY2Vzc2VzCkBAIC0xNzAsMTQgKzE5NCwx NCBAQCBDbG9ja1N3ZWVwVGljayh2b2lkKQogCSAqIGFwcGFyZW50IG9yZGVyLgogCSAqLwog CXZpY3RpbSA9Ci0JCXBnX2F0b21pY19mZXRjaF9hZGRfdTMyKCZTdHJhdGVneUNvbnRyb2wt Pm5leHRWaWN0aW1CdWZmZXIsIDEpOworCQlwZ19hdG9taWNfZmV0Y2hfYWRkX3UzMigmc3dl ZXAtPm5leHRWaWN0aW1CdWZmZXIsIDEpOwogCi0JaWYgKHZpY3RpbSA+PSBOQnVmZmVycykK KwlpZiAodmljdGltID49IHN3ZWVwLT5udW1CdWZmZXJzKQogCXsKIAkJdWludDMyCQlvcmln aW5hbFZpY3RpbSA9IHZpY3RpbTsKIAogCQkvKiBhbHdheXMgd3JhcCB3aGF0IHdlIGxvb2sg dXAgaW4gQnVmZmVyRGVzY3JpcHRvcnMgKi8KLQkJdmljdGltID0gdmljdGltICUgTkJ1ZmZl cnM7CisJCXZpY3RpbSA9IHZpY3RpbSAlIHN3ZWVwLT5udW1CdWZmZXJzOwogCiAJCS8qCiAJ CSAqIElmIHdlJ3JlIHRoZSBvbmUgdGhhdCBqdXN0IGNhdXNlZCBhIHdyYXBhcm91bmQsIGZv cmNlCkBAIC0yMDMsMTkgKzIyNywyMyBAQCBDbG9ja1N3ZWVwVGljayh2b2lkKQogCQkJCSAq IGNvdWxkIGxlYWQgdG8gYW4gb3ZlcmZsb3cgb2YgbmV4dFZpY3RpbUJ1ZmZlcnMsIGJ1dCB0 aGF0J3MKIAkJCQkgKiBoaWdobHkgdW5saWtlbHkgYW5kIHdvdWxkbid0IGJlIHBhcnRpY3Vs YXJseSBoYXJtZnVsLgogCQkJCSAqLwotCQkJCVNwaW5Mb2NrQWNxdWlyZSgmU3RyYXRlZ3lD b250cm9sLT5idWZmZXJfc3RyYXRlZ3lfbG9jayk7CisJCQkJU3BpbkxvY2tBY3F1aXJlKCZz d2VlcC0+Y2xvY2tfc3dlZXBfbG9jayk7CiAKLQkJCQl3cmFwcGVkID0gZXhwZWN0ZWQgJSBO QnVmZmVyczsKKwkJCQl3cmFwcGVkID0gZXhwZWN0ZWQgJSBzd2VlcC0+bnVtQnVmZmVyczsK IAotCQkJCXN1Y2Nlc3MgPSBwZ19hdG9taWNfY29tcGFyZV9leGNoYW5nZV91MzIoJlN0cmF0 ZWd5Q29udHJvbC0+bmV4dFZpY3RpbUJ1ZmZlciwKKwkJCQlzdWNjZXNzID0gcGdfYXRvbWlj X2NvbXBhcmVfZXhjaGFuZ2VfdTMyKCZzd2VlcC0+bmV4dFZpY3RpbUJ1ZmZlciwKIAkJCQkJ CQkJCQkJCQkJICZleHBlY3RlZCwgd3JhcHBlZCk7CiAJCQkJaWYgKHN1Y2Nlc3MpCi0JCQkJ CVN0cmF0ZWd5Q29udHJvbC0+Y29tcGxldGVQYXNzZXMrKzsKLQkJCQlTcGluTG9ja1JlbGVh c2UoJlN0cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2spOworCQkJCQlzd2Vl cC0+Y29tcGxldGVQYXNzZXMrKzsKKwkJCQlTcGluTG9ja1JlbGVhc2UoJnN3ZWVwLT5jbG9j a19zd2VlcF9sb2NrKTsKIAkJCX0KIAkJfQogCX0KLQlyZXR1cm4gdmljdGltOworCisJLyog WFhYIGJ1ZmZlciBJRHMgYXJlIDEtYmFzZWQsIHdlJ3JlIGNhbGN1bGF0aW5nIDAtYmFzZWQg aW5kZXhlcyAqLworCUFzc2VydChCdWZmZXJJc1ZhbGlkKDEgKyBzd2VlcC0+Zmlyc3RCdWZm ZXIgKyAodmljdGltICUgc3dlZXAtPm51bUJ1ZmZlcnMpKSk7CisKKwlyZXR1cm4gc3dlZXAt PmZpcnN0QnVmZmVyICsgdmljdGltOwogfQogCiAvKgpAQCAtMjg5LDYgKzMxNywyOCBAQCBj YWxjdWxhdGVfcGFydGl0aW9uX2luZGV4KCkKIAlyZXR1cm4gaW5kZXg7CiB9CiAKKy8qCisg KiBDaG9vc2VDbG9ja1N3ZWVwCisgKgkJcGljayBhIGNsb2Nrc3dlZXAgcGFydGl0aW9uIGJh c2VkIG9uIE5VTUEgbm9kZSBhbmQgQ1BVCisgKgorICogVGhlIG51bWJlciBvZiBjbG9ja3N3 ZWVwIHBhcnRpdGlvbnMgbWF5IG5vdCBtYXRjaCB0aGUgbnVtYmVyIG9mIE5VTUEKKyAqIG5v ZGVzLCBidXQgaXQgc2hvdWxkIG5vdCBiZSBsb3dlci4gRWFjaCBwYXJ0aXRpb24gc2hvdWxk IGJlIG1hcHBlZCB0bworICogYSBzaW5nbGUgTlVNQSBub2RlLCBidXQgYSBub2RlIG1heSBo YXZlIG11bHRpcGxlIHBhcnRpdGlvbnMuIElmIHRoZXJlCisgKiBhcmUgbXVsdGlwbGUgcGFy dGl0aW9ucyBwZXIgbm9kZSAoYWxsIG5vZGVzIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mCisg KiBwYXJ0aXRpb25zKSwgd2UgcGljayB0aGUgcGFydGl0aW9uIHVzaW5nIENQVS4KKyAqCisg KiBYWFggTWF5YmUgd2Ugc2hvdWxkIGRvIGJvdGggdGhlIHRvdGFsIGFuZCAicGVyIGdyb3Vw IiBjb3VudHMgYSBwb3dlciBvZgorICogdHdvPyBUaGF0J2QgYWxsb3cgdXNpbmcgc2hpZnRz IGluc3RlYWQgb2YgZGl2aXNpb25zIGluIHRoZSBjYWxjdWxhdGlvbiwKKyAqIGFuZCB0aGF0 J3MgY2hlYXBlci4gQnV0IGhvdyB3b3VsZCB0aGF0IGRlYWwgd2l0aCBvZGQgbnVtYmVyIG9m IG5vZGVzPworICovCitzdGF0aWMgQ2xvY2tTd2VlcCAqCitDaG9vc2VDbG9ja1N3ZWVwKHZv aWQpCit7CisJaW50IGluZGV4ID0gY2FsY3VsYXRlX3BhcnRpdGlvbl9pbmRleCgpOworCisJ cmV0dXJuICZTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpbmRleF07Cit9CisKIC8qCiAgKiBD aG9vc2VGcmVlTGlzdAogICoJCVBpY2sgdGhlIGJ1ZmZlciBmcmVlbGlzdCB0byB1c2UsIGRl cGVuZGluZyBvbiB0aGUgQ1BVIGFuZCBOVU1BIG5vZGUuCkBAIC00MDQsNyArNDU0LDcgQEAg U3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQz MiAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKIAkgKiB0aGUgcmF0ZSBvZiBidWZmZXIgY29u c3VtcHRpb24uICBOb3RlIHRoYXQgYnVmZmVycyByZWN5Y2xlZCBieSBhCiAJICogc3RyYXRl Z3kgb2JqZWN0IGFyZSBpbnRlbnRpb25hbGx5IG5vdCBjb3VudGVkIGhlcmUuCiAJICovCi0J cGdfYXRvbWljX2ZldGNoX2FkZF91MzIoJlN0cmF0ZWd5Q29udHJvbC0+bnVtQnVmZmVyQWxs b2NzLCAxKTsKKwlwZ19hdG9taWNfZmV0Y2hfYWRkX3UzMigmQ2hvb3NlQ2xvY2tTd2VlcCgp LT5udW1CdWZmZXJBbGxvY3MsIDEpOwogCiAJLyoKIAkgKiBGaXJzdCBjaGVjaywgd2l0aG91 dCBhY3F1aXJpbmcgdGhlIGxvY2ssIHdoZXRoZXIgdGhlcmUncyBidWZmZXJzIGluIHRoZQpA QCAtNDc1LDEzICs1MjUsMTcgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNzU3Ry YXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKIAkvKgog CSAqIE5vdGhpbmcgb24gdGhlIGZyZWVsaXN0LCBzbyBydW4gdGhlICJjbG9jayBzd2VlcCIg YWxnb3JpdGhtCiAJICoKLQkgKiBYWFggU2hvdWxkIHdlIGFsc28gbWFrZSB0aGlzIE5VTUEt YXdhcmUsIHRvIG9ubHkgYWNjZXNzIGJ1ZmZlcnMgZnJvbQotCSAqIHRoZSBzYW1lIE5VTUEg bm9kZT8gVGhhdCdkIHByb2JhYmx5IG1lYW4gd2UgbmVlZCB0byBtYWtlIHRoZSBjbG9jawot CSAqIHN3ZWVwIE5VTUEtYXdhcmUsIHBlcmhhcHMgYnkgaGF2aW5nIG11bHRpcGxlIGNsb2Nr IHN3ZWVwcywgZWFjaCBmb3IgYQotCSAqIHN1YnNldCBvZiBidWZmZXJzLiBCdXQgdGhhdCBh bHNvIG1lYW5zIGVhY2ggcHJvY2VzcyBjb3VsZCAic3dlZXAiIG9ubHkKLQkgKiBhIGZyYWN0 aW9uIG9mIGJ1ZmZlcnMsIGV2ZW4gaWYgdGhlIG90aGVyIGJ1ZmZlcnMgYXJlIGJldHRlciBj YW5kaWRhdGVzCi0JICogZm9yIGV2aWN0aW9uLiBXb3VsZCB0aGF0IGFsc28gbWVhbiB3ZSdk IGhhdmUgbXVsdGlwbGUgYmd3cml0ZXJzLCBvbmUKLQkgKiBmb3IgZWFjaCBub2RlLCBvciB3 b3VsZCBvbmUgYmd3cml0ZXIgaGFuZGxlIGFsbCBvZiB0aGF0PworCSAqIFhYWCBOb3RlIHRo YXQgQ2xvY2tTd2VlcFRpY2soKSBpcyBOVU1BLWF3YXJlLCBpLmUuIGl0IG9ubHkgbG9va3Mg YXQKKwkgKiBidWZmZXJzIGZyb20gYSBzaW5nbGUgcGFydGl0aW9uLCBhbGlnbmVkIHdpdGgg dGhlIE5VTUEgbm9kZS4gVGhhdAorCSAqIG1lYW5zIGl0IG9ubHkgYWNjZXNzZXMgYnVmZmVy cyBmcm9tIHRoZSBzYW1lIE5VTUEgbm9kZS4KKwkgKgorCSAqIFhYWCBUaGF0IGFsc28gbWVh bnMgZWFjaCBwcm9jZXNzICJzd2VlcHMiIG9ubHkgYSBmcmFjdGlvbiBvZiBidWZmZXJzLAor CSAqIGV2ZW4gaWYgdGhlIG90aGVyIGJ1ZmZlcnMgYXJlIGJldHRlciBjYW5kaWRhdGVzIGZv ciBldmljdGlvbi4gTWF5YmUKKwkgKiB0aGVyZSBzaG91bGQgYmUgc29tZSBsb2dpYyB0byAi c3RlYWwiIGJ1ZmZlcnMgZnJvbSBvdGhlciBmcmVlbGlzdHMKKwkgKiBvciBvdGhlciBub2Rl cz8KKwkgKgorCSAqIFhYWCBXb3VsZCB0aGF0IGFsc28gbWVhbiB3ZSdkIGhhdmUgbXVsdGlw bGUgYmd3cml0ZXJzLCBvbmUgZm9yIGVhY2gKKwkgKiBub2RlLCBvciB3b3VsZCBvbmUgYmd3 cml0ZXIgaGFuZGxlIGFsbCBvZiB0aGF0PwogCSAqLwogCXRyeWNvdW50ZXIgPSBOQnVmZmVy czsKIAlmb3IgKDs7KQpAQCAtNTYzLDYgKzYxNyw0MSBAQCBTdHJhdGVneUZyZWVCdWZmZXIo QnVmZmVyRGVzYyAqYnVmKQogCVNwaW5Mb2NrUmVsZWFzZSgmZnJlZWxpc3QtPmZyZWVsaXN0 X2xvY2spOwogfQogCisvKgorICogU3RyYXRlZ3lTeW5jU3RhcnQgLS0gcHJlcGFyZSBmb3Ig c3luYyBvZiBhbGwgcGFydGl0aW9ucworICoKKyAqIERldGVybWluZSB0aGUgbnVtYmVyIG9m IGNsb2Nrc3dlZXAgcGFydGl0aW9ucywgYW5kIGNhbGN1bGF0ZSB0aGUgcmVjZW50CisgKiBi dWZmZXJzIGFsbG9jcyAoYXMgYSBzdW0gb2YgYWxsIHRoZSBwYXJ0aXRpb25zKS4gVGhpcyBh bGxvd3MgQmdCdWZmZXJTeW5jCisgKiB0byBjYWxjdWxhdGUgYXZlcmFnZSBudW1iZXIgb2Yg YWxsb2NhdGlvbnMgcGVyIHBhcnRpdGlvbiBmb3IgdGhlIG5leHQKKyAqIHN5bmMgY3ljbGUu CisgKgorICogSW4gYWRkaXRpb24gaXQgcmV0dXJucyB0aGUgY291bnQgb2YgcmVjZW50IGJ1 ZmZlciBhbGxvY3MsIHdoaWNoIGlzIGEgdG90YWwKKyAqIHN1bW1lZCBmcm9tIGFsbCBwYXJ0 aXRpb25zLiBUaGUgYWxsb2MgY291bnRzIGFyZSByZXNldCBhZnRlciBiZWluZyByZWFkLAor ICogYXMgdGhlIHBhcnRpdGlvbnMgYXJlIHdhbGtlZC4KKyAqLwordm9pZAorU3RyYXRlZ3lT eW5jUHJlcGFyZShpbnQgKm51bV9wYXJ0cywgdWludDMyICpudW1fYnVmX2FsbG9jKQorewor CSpudW1fYnVmX2FsbG9jID0gMDsKKwkqbnVtX3BhcnRzID0gU3RyYXRlZ3lDb250cm9sLT5u dW1fcGFydGl0aW9uczsKKworCS8qCisJICogV2UgbG9jayB0aGUgcGFydGl0aW9ucyBvbmUg Ynkgb25lLCBzbyBub3QgZXhhY2x5IGluIHN5bmMsIGJ1dCB0aGF0CisJICogc2hvdWxkIGJl IGZpbmUuIFdlJ3JlIG9ubHkgbG9va2luZyBmb3IgaGV1cmlzdGljcyBhbnl3YXkuCisJICov CisJZm9yIChpbnQgaSA9IDA7IGkgPCBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25z OyBpKyspCisJeworCQlDbG9ja1N3ZWVwICpzd2VlcCA9ICZTdHJhdGVneUNvbnRyb2wtPnN3 ZWVwc1tpXTsKKworCQlTcGluTG9ja0FjcXVpcmUoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2Nr KTsKKwkJaWYgKG51bV9idWZfYWxsb2MpCisJCXsKKwkJCSpudW1fYnVmX2FsbG9jICs9IHBn X2F0b21pY19leGNoYW5nZV91MzIoJnN3ZWVwLT5udW1CdWZmZXJBbGxvY3MsIDApOworCQl9 CisJCVNwaW5Mb2NrUmVsZWFzZSgmc3dlZXAtPmNsb2NrX3N3ZWVwX2xvY2spOworCX0KK30K KwogLyoKICAqIFN0cmF0ZWd5U3luY1N0YXJ0IC0tIHRlbGwgQmdCdWZmZXJTeW5jIHdoZXJl IHRvIHN0YXJ0IHN5bmNpbmcKICAqCkBAIC01NzAsMzcgKzY1OSw0NCBAQCBTdHJhdGVneUZy ZWVCdWZmZXIoQnVmZmVyRGVzYyAqYnVmKQogICogQmdCdWZmZXJTeW5jKCkgd2lsbCBwcm9j ZWVkIGNpcmN1bGFybHkgYXJvdW5kIHRoZSBidWZmZXIgYXJyYXkgZnJvbSB0aGVyZS4KICAq CiAgKiBJbiBhZGRpdGlvbiwgd2UgcmV0dXJuIHRoZSBjb21wbGV0ZWQtcGFzcyBjb3VudCAo d2hpY2ggaXMgZWZmZWN0aXZlbHkKLSAqIHRoZSBoaWdoZXItb3JkZXIgYml0cyBvZiBuZXh0 VmljdGltQnVmZmVyKSBhbmQgdGhlIGNvdW50IG9mIHJlY2VudCBidWZmZXIKLSAqIGFsbG9j cyBpZiBub24tTlVMTCBwb2ludGVycyBhcmUgcGFzc2VkLiAgVGhlIGFsbG9jIGNvdW50IGlz IHJlc2V0IGFmdGVyCi0gKiBiZWluZyByZWFkLgorICogdGhlIGhpZ2hlci1vcmRlciBiaXRz IG9mIG5leHRWaWN0aW1CdWZmZXIpLgorICoKKyAqIFRoaXMgb25seSBjb25zaWRlcnMgYSBz aW5nbGUgY2xvY2tzd2VlcCBwYXJ0aXRpb24sIGFzIEJnQnVmZmVyU3luYyBsb29rcworICog YXQgdGhlbSBvbmUgYnkgb25lLgogICovCiBpbnQKLVN0cmF0ZWd5U3luY1N0YXJ0KHVpbnQz MiAqY29tcGxldGVfcGFzc2VzLCB1aW50MzIgKm51bV9idWZfYWxsb2MpCitTdHJhdGVneVN5 bmNTdGFydChpbnQgcGFydGl0aW9uLCB1aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywKKwkJCQkg IGludCAqZmlyc3RfYnVmZmVyLCBpbnQgKm51bV9idWZmZXJzKQogewogCXVpbnQzMgkJbmV4 dFZpY3RpbUJ1ZmZlcjsKIAlpbnQJCQlyZXN1bHQ7CisJQ2xvY2tTd2VlcCAqc3dlZXAgPSAm U3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbcGFydGl0aW9uXTsKIAotCVNwaW5Mb2NrQWNxdWly ZSgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRlZ3lfbG9jayk7Ci0JbmV4dFZpY3Rp bUJ1ZmZlciA9IHBnX2F0b21pY19yZWFkX3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0Vmlj dGltQnVmZmVyKTsKLQlyZXN1bHQgPSBuZXh0VmljdGltQnVmZmVyICUgTkJ1ZmZlcnM7CisJ QXNzZXJ0KChwYXJ0aXRpb24gPj0gMCkgJiYgKHBhcnRpdGlvbiA8IFN0cmF0ZWd5Q29udHJv bC0+bnVtX3BhcnRpdGlvbnMpKTsKKworCVNwaW5Mb2NrQWNxdWlyZSgmc3dlZXAtPmNsb2Nr X3N3ZWVwX2xvY2spOworCW5leHRWaWN0aW1CdWZmZXIgPSBwZ19hdG9taWNfcmVhZF91MzIo JnN3ZWVwLT5uZXh0VmljdGltQnVmZmVyKTsKKwlyZXN1bHQgPSBuZXh0VmljdGltQnVmZmVy ICUgc3dlZXAtPm51bUJ1ZmZlcnM7CisKKwkqZmlyc3RfYnVmZmVyID0gc3dlZXAtPmZpcnN0 QnVmZmVyOworCSpudW1fYnVmZmVycyA9IHN3ZWVwLT5udW1CdWZmZXJzOwogCiAJaWYgKGNv bXBsZXRlX3Bhc3NlcykKIAl7Ci0JCSpjb21wbGV0ZV9wYXNzZXMgPSBTdHJhdGVneUNvbnRy b2wtPmNvbXBsZXRlUGFzc2VzOworCQkqY29tcGxldGVfcGFzc2VzID0gc3dlZXAtPmNvbXBs ZXRlUGFzc2VzOwogCiAJCS8qCiAJCSAqIEFkZGl0aW9uYWxseSBhZGQgdGhlIG51bWJlciBv ZiB3cmFwYXJvdW5kcyB0aGF0IGhhcHBlbmVkIGJlZm9yZQogCQkgKiBjb21wbGV0ZVBhc3Nl cyBjb3VsZCBiZSBpbmNyZW1lbnRlZC4gQy5mLiBDbG9ja1N3ZWVwVGljaygpLgogCQkgKi8K LQkJKmNvbXBsZXRlX3Bhc3NlcyArPSBuZXh0VmljdGltQnVmZmVyIC8gTkJ1ZmZlcnM7CisJ CSpjb21wbGV0ZV9wYXNzZXMgKz0gbmV4dFZpY3RpbUJ1ZmZlciAvIHN3ZWVwLT5udW1CdWZm ZXJzOwogCX0KKwlTcGluTG9ja1JlbGVhc2UoJnN3ZWVwLT5jbG9ja19zd2VlcF9sb2NrKTsK IAotCWlmIChudW1fYnVmX2FsbG9jKQotCXsKLQkJKm51bV9idWZfYWxsb2MgPSBwZ19hdG9t aWNfZXhjaGFuZ2VfdTMyKCZTdHJhdGVneUNvbnRyb2wtPm51bUJ1ZmZlckFsbG9jcywgMCk7 Ci0JfQotCVNwaW5Mb2NrUmVsZWFzZSgmU3RyYXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRl Z3lfbG9jayk7Ci0JcmV0dXJuIHJlc3VsdDsKKwkvKiBYWFggYnVmZmVyIElEcyBzdGFydCBh dCAxLCB3ZSdyZSBjYWxjdWxhdGluZyAwLWJhc2VkIGluZGV4ZXMgKi8KKwlBc3NlcnQoQnVm ZmVySXNWYWxpZCgxICsgc3dlZXAtPmZpcnN0QnVmZmVyICsgcmVzdWx0KSk7CisKKwlyZXR1 cm4gc3dlZXAtPmZpcnN0QnVmZmVyICsgcmVzdWx0OwogfQogCiAvKgpAQCAtNjk2LDYgKzc5 MiwxMCBAQCBTdHJhdGVneVNobWVtU2l6ZSh2b2lkKQogCXNpemUgPSBhZGRfc2l6ZShzaXpl LCBNQVhBTElHTihtdWxfc2l6ZShzaXplb2YoQnVmZmVyU3RyYXRlZ3lGcmVlbGlzdCksCiAJ CQkJCQkJCQkJCW51bV9wYXJ0aXRpb25zKSkpOwogCisJLyogc2l6ZSBvZiBjbG9ja3N3ZWVw IHBhcnRpdGlvbnMgKGF0IGxlYXN0IG9uZSBwZXIgTlVNQSBub2RlKSAqLworCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBNQVhBTElHTihtdWxfc2l6ZShzaXplb2YoQ2xvY2tTd2VlcCksCisJ CQkJCQkJCQkJCW51bV9wYXJ0aXRpb25zKSkpOworCiAJcmV0dXJuIHNpemU7CiB9CiAKQEAg LTcxNCw2ICs4MTQsNyBAQCBTdHJhdGVneUluaXRpYWxpemUoYm9vbCBpbml0KQogCiAJaW50 CQkJbnVtX3BhcnRpdGlvbnM7CiAJaW50CQkJbnVtX3BhcnRpdGlvbnNfcGVyX2dyb3VwOwor CWNoYXIJICAgKnB0cjsKIAogCS8qICovCiAJbnVtX3BhcnRpdGlvbnMgPSBjYWxjdWxhdGVf cGFydGl0aW9uX2NvdW50KHN0cmF0ZWd5X25ub2Rlcyk7CkBAIC03MzYsNyArODM3LDggQEAg U3RyYXRlZ3lJbml0aWFsaXplKGJvb2wgaW5pdCkKIAlTdHJhdGVneUNvbnRyb2wgPSAoQnVm ZmVyU3RyYXRlZ3lDb250cm9sICopCiAJCVNobWVtSW5pdFN0cnVjdCgiQnVmZmVyIFN0cmF0 ZWd5IFN0YXR1cyIsCiAJCQkJCQlNQVhBTElHTihvZmZzZXRvZihCdWZmZXJTdHJhdGVneUNv bnRyb2wsIGZyZWVsaXN0cykpICsKLQkJCQkJCU1BWEFMSUdOKHNpemVvZihCdWZmZXJTdHJh dGVneUZyZWVsaXN0KSAqIG51bV9wYXJ0aXRpb25zKSwKKwkJCQkJCU1BWEFMSUdOKHNpemVv ZihCdWZmZXJTdHJhdGVneUZyZWVsaXN0KSAqIG51bV9wYXJ0aXRpb25zKSArCisJCQkJCQlN QVhBTElHTihzaXplb2YoQ2xvY2tTd2VlcCkgKiBudW1fcGFydGl0aW9ucyksCiAJCQkJCQkm Zm91bmQpOwogCiAJaWYgKCFmb3VuZCkKQEAgLTc1OCwxMiArODYwLDMyIEBAIFN0cmF0ZWd5 SW5pdGlhbGl6ZShib29sIGluaXQpCiAKIAkJU3BpbkxvY2tJbml0KCZTdHJhdGVneUNvbnRy b2wtPmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsKIAotCQkvKiBJbml0aWFsaXplIHRoZSBjbG9j ayBzd2VlcCBwb2ludGVyICovCi0JCXBnX2F0b21pY19pbml0X3UzMigmU3RyYXRlZ3lDb250 cm9sLT5uZXh0VmljdGltQnVmZmVyLCAwKTsKKwkJLyogaGF2ZSB0byBwb2ludCB0aGUgc3dl ZXBzIGFycmF5IHRvIHJpZ2h0IGFmdGVyIHRoZSBmcmVlbGlzdHMgKi8KKwkJcHRyID0gKGNo YXIgKikgU3RyYXRlZ3lDb250cm9sICsKKwkJCQlNQVhBTElHTihvZmZzZXRvZihCdWZmZXJT dHJhdGVneUNvbnRyb2wsIGZyZWVsaXN0cykpICsKKwkJCQlNQVhBTElHTihzaXplb2YoQnVm ZmVyU3RyYXRlZ3lGcmVlbGlzdCkgKiBudW1fcGFydGl0aW9ucyk7CisJCVN0cmF0ZWd5Q29u dHJvbC0+c3dlZXBzID0gKENsb2NrU3dlZXAgKikgcHRyOwogCi0JCS8qIENsZWFyIHN0YXRp c3RpY3MgKi8KLQkJU3RyYXRlZ3lDb250cm9sLT5jb21wbGV0ZVBhc3NlcyA9IDA7Ci0JCXBn X2F0b21pY19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5udW1CdWZmZXJBbGxvY3MsIDAp OworCQkvKiBJbml0aWFsaXplIHRoZSBjbG9jayBzd2VlcCBwb2ludGVycyAoZm9yIGFsbCBw YXJ0aXRpb25zKSAqLworCQlmb3IgKGludCBpID0gMDsgaSA8IG51bV9wYXJ0aXRpb25zOyBp KyspCisJCXsKKwkJCVNwaW5Mb2NrSW5pdCgmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV0u Y2xvY2tfc3dlZXBfbG9jayk7CisKKwkJCXBnX2F0b21pY19pbml0X3UzMigmU3RyYXRlZ3lD b250cm9sLT5zd2VlcHNbaV0ubmV4dFZpY3RpbUJ1ZmZlciwgMCk7CisKKwkJCS8qCisJCQkg KiBGSVhNRSBUaGlzIG1heSBub3QgcXVpdGUgcmlnaHQsIGJlY2F1c2UgaWYgTkJ1ZmZlcnMg aXMgbm90CisJCQkgKiBhIHBlcmZlY3QgbXVsdGlwbGUgb2YgbnVtQnVmZmVycywgdGhlIGxh c3QgcGFydGl0aW9uIHdpbGwgaGF2ZQorCQkJICogbnVtQnVmZmVycyBzZXQgdG9vIGhpZ2gu IGJ1Zl9pbml0IGhhbmRsZXMgdGhpcyBieSB0cmFja2luZyB0aGUKKwkJCSAqIHJlbWFpbmlu ZyBudW1iZXIgb2YgYnVmZmVycywgYW5kIG5vdCBvdmVyZmxvd2luZy4KKwkJCSAqLworCQkJ U3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV0ubnVtQnVmZmVycyA9IG51bUJ1ZmZlcnM7CisJ CQlTdHJhdGVneUNvbnRyb2wtPnN3ZWVwc1tpXS5maXJzdEJ1ZmZlciA9IChudW1CdWZmZXJz ICogaSk7CisKKwkJCS8qIENsZWFyIHN0YXRpc3RpY3MgKi8KKwkJCVN0cmF0ZWd5Q29udHJv bC0+c3dlZXBzW2ldLmNvbXBsZXRlUGFzc2VzID0gMDsKKwkJCXBnX2F0b21pY19pbml0X3Uz MigmU3RyYXRlZ3lDb250cm9sLT5zd2VlcHNbaV0ubnVtQnVmZmVyQWxsb2NzLCAwKTsKKwkJ fQogCiAJCS8qIE5vIHBlbmRpbmcgbm90aWZpY2F0aW9uICovCiAJCVN0cmF0ZWd5Q29udHJv bC0+Ymd3cHJvY25vID0gLTE7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1 Zl9pbnRlcm5hbHMuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmX2ludGVybmFscy5oCmlu ZGV4IDUyYTcxYjEzOGY3Li5iNTBmOTQ1ODE1NiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv c3RvcmFnZS9idWZfaW50ZXJuYWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZf aW50ZXJuYWxzLmgKQEAgLTQ0OCw3ICs0NDgsOSBAQCBleHRlcm4gdm9pZCBTdHJhdGVneUZy ZWVCdWZmZXIoQnVmZmVyRGVzYyAqYnVmKTsKIGV4dGVybiBib29sIFN0cmF0ZWd5UmVqZWN0 QnVmZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LAogCQkJCQkJCQkgQnVmZmVy RGVzYyAqYnVmLCBib29sIGZyb21fcmluZyk7CiAKLWV4dGVybiBpbnQJU3RyYXRlZ3lTeW5j U3RhcnQodWludDMyICpjb21wbGV0ZV9wYXNzZXMsIHVpbnQzMiAqbnVtX2J1Zl9hbGxvYyk7 CitleHRlcm4gdm9pZCBTdHJhdGVneVN5bmNQcmVwYXJlKGludCAqbnVtX3BhcnRzLCB1aW50 MzIgKm51bV9idWZfYWxsb2MpOworZXh0ZXJuIGludAlTdHJhdGVneVN5bmNTdGFydChpbnQg cGFydGl0aW9uLCB1aW50MzIgKmNvbXBsZXRlX3Bhc3NlcywKKwkJCQkJCQkgIGludCAqZmly c3RfYnVmZmVyLCBpbnQgKm51bV9idWZmZXJzKTsKIGV4dGVybiB2b2lkIFN0cmF0ZWd5Tm90 aWZ5QmdXcml0ZXIoaW50IGJnd3Byb2Nubyk7CiAKIGV4dGVybiBTaXplIFN0cmF0ZWd5U2ht ZW1TaXplKHZvaWQpOwotLSAKMi40OS4wCgo= --------------ZiLGGg5GsiuT6QTFDhUm0SgE Content-Type: text/x-patch; charset=UTF-8; name="v2-0004-NUMA-partition-buffer-freelist.patch" Content-Disposition: attachment; filename="v2-0004-NUMA-partition-buffer-freelist.patch" Content-Transfer-Encoding: base64 RnJvbSBkNjcyNzhhNjQ5ODNiNWYyZWI1ZTQwOGE1MWU5NTE2YWE4ZmQyMjY0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVGh1LCAyMiBNYXkgMjAyNSAxODozODo0MSArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIgNC83XSBOVU1BOiBwYXJ0aXRpb24gYnVmZmVyIGZyZWVsaXN0CgpJbnN0ZWFkIG9mIGEg c2luZ2xlIGJ1ZmZlciBmcmVlbGlzdCwgcGFydGl0aW9uIGludG8gbXVsdGlwbGUgc21hbGxl cgpsaXN0cywgdG8gcmVkdWNlIGxvY2sgY29udGVudGlvbiwgYW5kIHRvIHNwcmVhZCB0aGUg YnVmZmVycyBvdmVyIGFsbApOVU1BIG5vZGVzIG1vcmUgZXZlbmx5LgoKVGhlcmUgYXJlIGZv dXIgc3RyYXRlZ2llcywgc3BlY2lmaWVkIGJ5IEdVQyBudW1hX3BhcnRpdGlvbl9mcmVlbGlz dAoKKiBub25lIC0gc2luZ2xlIGxvbmcgZnJlZWxpc3QsIHNob3VsZCB3b3JrIGp1c3QgbGlr ZSBub3cKCiogbm9kZSAtIG9uZSBmcmVlbGlzdCBwZXIgTlVNQSBub2RlLCB3aXRoIG9ubHkg YnVmZmVycyBmcm9tIHRoYXQgbm9kZQoKKiBjcHUgLSBvbmUgZnJlZWxpc3QgcGVyIENQVQoK KiBwaWQgLSBmcmVlbGlzdCBkZXRlcm1pbmVkIGJ5IFBJRCAoc2FtZSBudW1iZXIgb2YgZnJl ZWxpc3RzIGFzICdjcHUnKQoKV2hlbiBhbGxvY2F0aW5nIGEgYnVmZmVyLCBpdCdzIHRha2Vu IGZyb20gdGhlIGNvcnJlY3QgZnJlZWxpc3QgKGUuZy4Kc2FtZSBOVU1BIG5vZGUpLgoKTm90 ZTogVGhpcyBpcyAocHJvYmFibHkpIG1vcmUgaW1wb3J0YW50IHRoYW4gcGFydGl0aW9uaW5n IFByb2NBcnJheS4KLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5j IHwgICA0ICstCiBzcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jIHwgMzcy ICsrKysrKysrKysrKysrKysrKysrKysrKy0tCiBzcmMvYmFja2VuZC91dGlscy9pbml0L2ds b2JhbHMuYyAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxl cy5jICAgfCAgMTAgKwogc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggICAgICAgICAgICAgICB8 ICAgMSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oICAgICAgICAgIHwgICA4ICsK IDYgZmlsZXMgY2hhbmdlZCwgMzY3IGluc2VydGlvbnMoKyksIDI5IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgYi9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jCmluZGV4IDJhZDM0NjI0YzQ5 Li45MjBmMWEzMmE4ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIv YnVmX2luaXQuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5j CkBAIC01NDMsOCArNTQzLDggQEAgcGdfbnVtYV9pbnRlcmxlYXZlX21lbW9yeShjaGFyICpz dGFydHB0ciwgY2hhciAqZW5kcHRyLAogCQkgKiBYWFggbm8gcmV0dXJuIHZhbHVlLCB0byBt YWtlIHRoaXMgZmFpbCBvbiBlcnJvciwgaGFzIHRvIHVzZQogCQkgKiBudW1hX3NldF9zdHJp Y3QKIAkJICoKLQkJICogWFhYIFNob3VsZCB3ZSBzdGlsbCB0b3VjaCB0aGUgbWVtb3J5IGZp cnN0LCBsaWtlIHdpdGggbnVtYV9tb3ZlX3BhZ2VzLAotCQkgKiBvciBpcyB0aGF0IG5vdCBu ZWNlc3Nhcnk/CisJCSAqIFhYWCBTaG91bGQgd2Ugc3RpbGwgdG91Y2ggdGhlIG1lbW9yeSBm aXJzdCwgbGlrZSB3aXRoCisJCSAqIG51bWFfbW92ZV9wYWdlcywgb3IgaXMgdGhhdCBub3Qg bmVjZXNzYXJ5PwogCQkgKi8KIAkJbnVtYV90b25vZGVfbWVtb3J5KHB0ciwgc3osIG5vZGUp OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5j IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxpc3QuYwppbmRleCBlMDQ2NTI2 YzE0OS4uZTM4ZTVjN2VjM2QgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVm ZmVyL2ZyZWVsaXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvZnJlZWxp c3QuYwpAQCAtMTUsMTQgKzE1LDUyIEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgog CisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzeXMvc3lzaW5mby5oPgorCisjaWZk ZWYgVVNFX0xJQk5VTUEKKyNpbmNsdWRlIDxudW1hLmg+CisjaW5jbHVkZSA8bnVtYWlmLmg+ CisjZW5kaWYKKwogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInBvcnQvYXRvbWlj cy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmX2ludGVybmFscy5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKICNpbmNsdWRlICJz dG9yYWdlL3Byb2MuaCIKIAogI2RlZmluZSBJTlRfQUNDRVNTX09OQ0UodmFyKQkoKGludCko Kigodm9sYXRpbGUgaW50ICopJih2YXIpKSkpCiAKKy8qCisgKiBSZXByZXNlbnRzIG9uZSBm cmVlbGlzdCBwYXJ0aXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IEJ1ZmZlclN0cmF0ZWd5 RnJlZWxpc3QKK3sKKwkvKiBTcGlubG9jazogcHJvdGVjdHMgdGhlIHZhbHVlcyBiZWxvdyAq LworCXNsb2NrX3QJCWZyZWVsaXN0X2xvY2s7CisKKwkvKgorCSAqIFhYWCBOb3Qgc3VyZSB3 aHkgdGhpcyBuZWVkcyB0byBiZSBhbGlnbmVkIGxpa2UgdGhpcy4gTmVlZCB0byBhc2sKKwkg KiBBbmRyZXMuCisJICovCisJaW50CQkJZmlyc3RGcmVlQnVmZmVyIF9fYXR0cmlidXRlX18o KGFsaWduZWQoNjQpKSk7CS8qIEhlYWQgb2YgbGlzdCBvZgorCQkJCQkJCQkJCQkJCQkJCSAq IHVudXNlZCBidWZmZXJzICovCisKKwkvKiBOdW1iZXIgb2YgYnVmZmVycyBjb25zdW1lZCBm cm9tIHRoaXMgbGlzdC4gKi8KKwl1aW50NjQJCWNvbnN1bWVkOworfQkJCUJ1ZmZlclN0cmF0 ZWd5RnJlZWxpc3Q7CisKKy8qCisgKiBUaGUgbWluaW11bSBudW1iZXIgb2YgcGFydGl0aW9u cyB3ZSB3YW50IHRvIGhhdmUuIFdlIHdhbnQgYXQgbGVhc3QgdGhpcworICogbnVtYmVyIG9m IHBhcnRpdGlvbnMsIGV2ZW4gb24gbm9uLU5VTUEgc3lzdGVtLCBhcyBpdCBoZWxwcyB3aXRo IGNvbnRlbnRpb24KKyAqIGZvciBidWZmZXJzLiBCdXQgd2l0aCBtdWx0aXBsZSBOVU1BIG5v ZGVzLCB3ZSB3YW50IGEgc2VwYXJhdGUgcGFydGl0aW9uIHBlcgorICogbm9kZS4gQnV0IHdl IG1heSBnZXQgbXVsdGlwbGUgcGFydGl0aW9ucyBwZXIgbm9kZSwgZm9yIGxvdyBub2RlIGNv dW50LgorICoKKyAqIFdpdGggbXVsdGlwbGUgcGFydGl0aW9ucyBwZXIgTlVNQSBub2RlLCB3 ZSBwaWNrIHRoZSBwYXJ0aXRpb24gYmFzZWQgb24gQ1BVCisgKiAob3Igc29tZSBvdGhlciBw YXJhbWV0ZXIpLgorICovCisjZGVmaW5lIE1JTl9GUkVFTElTVF9QQVJUSVRJT05TCQk0CiAK IC8qCiAgKiBUaGUgc2hhcmVkIGZyZWVsaXN0IGNvbnRyb2wgaW5mb3JtYXRpb24uCkBAIC0z OSw4ICs3Nyw2IEBAIHR5cGVkZWYgc3RydWN0CiAJICovCiAJcGdfYXRvbWljX3VpbnQzMiBu ZXh0VmljdGltQnVmZmVyOwogCi0JaW50CQkJZmlyc3RGcmVlQnVmZmVyOwkvKiBIZWFkIG9m IGxpc3Qgb2YgdW51c2VkIGJ1ZmZlcnMgKi8KLQogCS8qCiAJICogU3RhdGlzdGljcy4gIFRo ZXNlIGNvdW50ZXJzIHNob3VsZCBiZSB3aWRlIGVub3VnaCB0aGF0IHRoZXkgY2FuJ3QKIAkg KiBvdmVyZmxvdyBkdXJpbmcgYSBzaW5nbGUgYmd3cml0ZXIgY3ljbGUuCkBAIC01MSwxMyAr ODcsMzggQEAgdHlwZWRlZiBzdHJ1Y3QKIAkvKgogCSAqIEJnd29ya2VyIHByb2Nlc3MgdG8g YmUgbm90aWZpZWQgdXBvbiBhY3Rpdml0eSBvciAtMSBpZiBub25lLiBTZWUKIAkgKiBTdHJh dGVneU5vdGlmeUJnV3JpdGVyLgorCSAqCisJICogWFhYIE5vdCBzdXJlIHdoeSB0aGlzIG5l ZWRzIHRvIGJlIGFsaWduZWQgbGlrZSB0aGlzLiBOZWVkIHRvIGFzaworCSAqIEFuZHJlcy4g QWxzbywgc2hvdWxkbid0IHRoZSBhbGlnbm1lbnQgYmUgc3BlY2lmaWVkIGFmdGVyLCBsaWtl IGZvcgorCSAqICJjb25zdW1lZCI/CiAJICovCi0JaW50CQkJYmd3cHJvY25vOworCWludAkJ CV9fYXR0cmlidXRlX18oKGFsaWduZWQoNjQpKSkgYmd3cHJvY25vOworCisJLyogaW5mbyBh Ym91dCBmcmVlbGlzdCBwYXJ0aXRpb25pbmcgKi8KKwlpbnQJCQludW1fcGFydGl0aW9uczsK KwlpbnQJCQludW1fcGFydGl0aW9uc19ncm91cHM7CS8qIGVmZmVjdGl2ZWx5IG51bSBvZiBO VU1BIG5vZGVzICovCisJaW50CQkJbnVtX3BhcnRpdGlvbnNfcGVyX2dyb3VwOworCisJQnVm ZmVyU3RyYXRlZ3lGcmVlbGlzdCBmcmVlbGlzdHNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsK IH0gQnVmZmVyU3RyYXRlZ3lDb250cm9sOwogCiAvKiBQb2ludGVycyB0byBzaGFyZWQgc3Rh dGUgKi8KIHN0YXRpYyBCdWZmZXJTdHJhdGVneUNvbnRyb2wgKlN0cmF0ZWd5Q29udHJvbCA9 IE5VTEw7CiAKKy8qCisgKiBYWFggc2hvdWxkbid0IHRoaXMgYmUgaW4gQnVmZmVyU3RyYXRl Z3lDb250cm9sPyBQcm9iYWJseSBub3QsIHdlIG5lZWQgdG8KKyAqIGNhbGN1bGF0ZSBpdCBk dXJpbmcgc2l6aW5nLCBhbmQgcGVyaGFwcyBpdCBjb3VsZCBjaGFuZ2UgYmVmb3JlIHRoZSBt ZW1vcnkKKyAqIGdldHMgYWxsb2NhdGVkIChzbyB3ZSBuZWVkIHRvIHJlbWVtYmVyIHRoZSB2 YWx1ZXMpLgorICoKKyAqIFhYWCBXZSBzaG91bGQgcHJvYmFibHkgaGF2ZSBhIGZpeGVkIG51 bWJlciBvZiBwYXJ0aXRpb25zLCBhbmQgbWFwIHRoZQorICogTlVNQSBub2RlcyB0byB0aGVt LCBzb21laG93IChpLmUuIGVhY2ggbm9kZSB3b3VsZCBnZXQgc29tZSBzdWJzZXQgb2YKKyAq IHBhcnRpdGlvbnMpLiBTaW1pbGFyIHRvIE5VTV9MT0NLX1BBUlRJVElPTlMuCisgKgorICog WFhYIFdlIGRvbid0IHVzZSB0aGUgbmNwdXMsIHJlYWxseS4KKyAqLworc3RhdGljIGludAlz dHJhdGVneV9uY3B1czsKK3N0YXRpYyBpbnQJc3RyYXRlZ3lfbm5vZGVzOworCiAvKgogICog UHJpdmF0ZSAobm9uLXNoYXJlZCkgc3RhdGUgZm9yIG1hbmFnaW5nIGEgcmluZyBvZiBzaGFy ZWQgYnVmZmVycyB0byByZS11c2UuCiAgKiBUaGlzIGlzIGN1cnJlbnRseSB0aGUgb25seSBr aW5kIG9mIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IG9iamVjdCwgYnV0IHNvbWVkYXkKQEAgLTE1 Nyw2ICsyMTgsMTA0IEBAIENsb2NrU3dlZXBUaWNrKHZvaWQpCiAJcmV0dXJuIHZpY3RpbTsK IH0KIAorLyoKKyAqIFNpemUgdGhlIGNsb2Nrc3dlZXAgcGFydGl0aW9ucy4gQXQgbGVhc3Qg b25lIHBhcnRpdGlvbiBwZXIgTlVNQSBub2RlLAorICogYnV0IGF0IGxlYXN0IE1JTl9GUkVF TElTVF9QQVJUSVRJT05TIHBhcnRpdGlvbnMgaW4gdG90YWwuCisqLworc3RhdGljIGludAor Y2FsY3VsYXRlX3BhcnRpdGlvbl9jb3VudChpbnQgbnVtX25vZGVzKQoreworCWludAkJbnVt X3Blcl9ub2RlID0gMTsKKworCXdoaWxlIChudW1fcGVyX25vZGUgKiBudW1fbm9kZXMgPCBN SU5fRlJFRUxJU1RfUEFSVElUSU9OUykKKwkJbnVtX3Blcl9ub2RlKys7CisKKwlyZXR1cm4g KG51bV9ub2RlcyAqIG51bV9wZXJfbm9kZSk7Cit9CisKK3N0YXRpYyBpbnQKK2NhbGN1bGF0 ZV9wYXJ0aXRpb25faW5kZXgoKQoreworCWludAkJCXJjOworCXVuc2lnbmVkCWNwdTsKKwl1 bnNpZ25lZAlub2RlOworCWludAkJCWluZGV4OworCisJQXNzZXJ0KFN0cmF0ZWd5Q29udHJv bC0+bnVtX3BhcnRpdGlvbnNfZ3JvdXBzID09IHN0cmF0ZWd5X25ub2Rlcyk7CisKKwlBc3Nl cnQoU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9ucyA9PQorCQkgICAoc3RyYXRlZ3lf bm5vZGVzICogU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uc19wZXJfZ3JvdXApKTsK KworCS8qCisJICogZnJlZWxpc3QgaXMgcGFydGl0aW9uZWQsIHNvIGRldGVybWluZSB0aGUg Q1BVL05VTUEgbm9kZSwgYW5kIHBpY2sgYQorCSAqIGxpc3QgYmFzZWQgb24gdGhhdC4KKwkg Ki8KKwlyYyA9IGdldGNwdSgmY3B1LCAmbm9kZSk7CisJaWYgKHJjICE9IDApCisJCWVsb2co RVJST1IsICJnZXRjcHUgZmFpbGVkOiAlbSIpOworCisJLyoKKwkgKiBYWFggV2Ugc2hvdWxk J3QgZ2V0IG5vZGVzIHRoYXQgd2UgaGF2ZW4ndCBjb25zaWRlcmVkIHdoaWxlIGJ1aWxkaW5n CisJICogdGhlIHBhcnRpdGlvbnMuIE1heWJlIGlmIHdlIGFsbG93IHRoaXMgKGUuZy4gZHVl IHRvIHN1cHBvcnQgYWRqdXN0aW5nCisJICogdGhlIE5VTUEgc3R1ZmYgYXQgcnVudGltZSks IHdlIHNob3VsZCBqdXN0IGRvIG91ciBiZXN0IHRvIG1pbmltaXplCisJICogdGhlIGNvbmZs aWN0cyBzb21laG93LiBCdXQgaXQnbGwgbWFrZSB0aGUgbWFwcGluZyBoYXJkZXIsIHNvIGZv ciBub3cKKwkgKiB3ZSBpZ25vcmUgaXQuCisJICovCisJaWYgKG5vZGUgPiBzdHJhdGVneV9u bm9kZXMpCisJCWVsb2coRVJST1IsICJub2RlIG91dCBvZiByYW5nZTogJWQgPiAldSIsIGNw dSwgc3RyYXRlZ3lfbm5vZGVzKTsKKworCS8qCisJICogRmluZCB0aGUgcGFydGl0aW9uLiBJ ZiB3ZSBoYXZlIGEgc2luZ2xlIHBhcnRpdGlvbiBwZXIgbm9kZSwgd2UgY2FuCisJICogY2Fs Y3VsYXRlIHRoZSBpbmRleCBkaXJlY3RseSBmcm9tIG5vZGUuIE90aGVyd2lzZSB3ZSBuZWVk IHRvIGRvIHR3bworCSAqIHN0ZXBzLCB1c2luZyBub2RlIGFuZCB0aGVuIGNwdS4KKwkgKi8K KwlpZiAoU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uc19wZXJfZ3JvdXAgPT0gMSkK Kwl7CisJCWluZGV4ID0gKG5vZGUgJSBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25z KTsKKwl9CisJZWxzZQorCXsKKwkJaW50CQlpbmRleF9ncm91cCwKKwkJCQlpbmRleF9wYXJ0 OworCisJCS8qIHR3byBzdGVwcyAtIGNhbGN1bGF0ZSBncm91cCBmcm9tIG5vZGUsIHBhcnRp dGlvbiBmcm9tIGNwdSAqLworCQlpbmRleF9ncm91cCA9IChub2RlICUgU3RyYXRlZ3lDb250 cm9sLT5udW1fcGFydGl0aW9uc19ncm91cHMpOworCQlpbmRleF9wYXJ0ID0gKGNwdSAlIFN0 cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnNfcGVyX2dyb3VwKTsKKworCQlpbmRleCA9 IChpbmRleF9ncm91cCAqIFN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnNfcGVyX2dy b3VwKQorCQkJCSsgaW5kZXhfcGFydDsKKwl9CisKKwlyZXR1cm4gaW5kZXg7Cit9CisKKy8q CisgKiBDaG9vc2VGcmVlTGlzdAorICoJCVBpY2sgdGhlIGJ1ZmZlciBmcmVlbGlzdCB0byB1 c2UsIGRlcGVuZGluZyBvbiB0aGUgQ1BVIGFuZCBOVU1BIG5vZGUuCisgKgorICogV2l0aG91 dCBwYXJ0aXRpb25lZCBmcmVlbGlzdHMgKG51bWFfcGFydGl0aW9uX2ZyZWVsaXN0PWZhbHNl KSwgdGhlcmUncyBvbmx5CisgKiBhIHNpbmdsZSBmcmVlbGlzdCwgc28gdXNlIHRoYXQuCisg KgorICogV2l0aCBwYXJ0aXRpb25lZCBmcmVlbGlzdHMsIHdlIGhhdmUgbXVsdGlwbGUgd2F5 cyBob3cgdG8gcGljayB0aGUgZnJlZWxpc3QKKyAqIGZvciB0aGUgYmFja2VuZDoKKyAqCisg KiAtIG9uZSBmcmVlbGlzdCBwZXIgQ1BVLCB1c2UgdGhlIGZyZWVsaXN0IGZvciBDUFUgdGhl IHRhc2sgZXhlY3V0ZXMgb24KKyAqCisgKiAtIG9uZSBmcmVlbGlzdCBwZXIgTlVNQSBub2Rl LCB1c2UgdGhlIGZyZWVsaXN0IGZvciBub2RlIHRhc2sgZXhlY3V0ZXMgb24KKyAqCisgKiAt IHVzZSBmaXhlZCBudW1iZXIgb2YgZnJlZWxpc3RzLCBtYXAgcHJvY2Vzc2VzIHRvIGxpc3Rz IGJhc2VkIG9uIFBJRAorICoKKyAqIFRoZXJlIG1heSBiZSBzb21lIG90aGVyIHN0cmF0ZWdp ZXMsIG5vdCBzdXJlLiBUaGUgaW1wb3J0YW50IHRoaW5nIGlzIHRoaXMKKyAqIG5lZWRzIHRv IGJlIHJlZnJlY2xlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24sIGkuZS4gd2UgbmVlZCB0byBj cmVhdGUgdGhlCisgKiByaWdodCBudW1iZXIgb2YgbGlzdHMuCisgKi8KK3N0YXRpYyBCdWZm ZXJTdHJhdGVneUZyZWVsaXN0ICoKK0Nob29zZUZyZWVMaXN0KHZvaWQpCit7CisJaW50IGlu ZGV4ID0gY2FsY3VsYXRlX3BhcnRpdGlvbl9pbmRleCgpOworCXJldHVybiAmU3RyYXRlZ3lD b250cm9sLT5mcmVlbGlzdHNbaW5kZXhdOworfQorCiAvKgogICogaGF2ZV9mcmVlX2J1ZmZl ciAtLSBhIGxvY2tsZXNzIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhIGZyZWUgYnVmZmVy IGluCiAgKgkJCQkJICAgYnVmZmVyIHBvb2wuCkBAIC0xNjgsMTAgKzMyNywxMyBAQCBDbG9j a1N3ZWVwVGljayh2b2lkKQogYm9vbAogaGF2ZV9mcmVlX2J1ZmZlcih2b2lkKQogewotCWlm IChTdHJhdGVneUNvbnRyb2wtPmZpcnN0RnJlZUJ1ZmZlciA+PSAwKQotCQlyZXR1cm4gdHJ1 ZTsKLQllbHNlCi0JCXJldHVybiBmYWxzZTsKKwlmb3IgKGludCBpID0gMDsgaSA8IHN0cmF0 ZWd5X25ub2RlczsgaSsrKQorCXsKKwkJaWYgKFN0cmF0ZWd5Q29udHJvbC0+ZnJlZWxpc3Rz W2ldLmZpcnN0RnJlZUJ1ZmZlciA+PSAwKQorCQkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0 dXJuIGZhbHNlOwogfQogCiAvKgpAQCAtMTkzLDYgKzM1NSw3IEBAIFN0cmF0ZWd5R2V0QnVm ZmVyKEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IHN0cmF0ZWd5LCB1aW50MzIgKmJ1Zl9zdGF0ZSwg Ym9vbCAqZnJvbV9yCiAJaW50CQkJYmd3cHJvY25vOwogCWludAkJCXRyeWNvdW50ZXI7CiAJ dWludDMyCQlsb2NhbF9idWZfc3RhdGU7CS8qIHRvIGF2b2lkIHJlcGVhdGVkIChkZS0pcmVm ZXJlbmNpbmcgKi8KKwlCdWZmZXJTdHJhdGVneUZyZWVsaXN0ICpmcmVlbGlzdDsKIAogCSpm cm9tX3JpbmcgPSBmYWxzZTsKIApAQCAtMjU5LDMxICs0MjIsMzUgQEAgU3RyYXRlZ3lHZXRC dWZmZXIoQnVmZmVyQWNjZXNzU3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRl LCBib29sICpmcm9tX3IKIAkgKiBidWZmZXJfc3RyYXRlZ3lfbG9jayBub3QgdGhlIGluZGl2 aWR1YWwgYnVmZmVyIHNwaW5sb2Nrcywgc28gaXQncyBPSyB0bwogCSAqIG1hbmlwdWxhdGUg dGhlbSB3aXRob3V0IGhvbGRpbmcgdGhlIHNwaW5sb2NrLgogCSAqLwotCWlmIChTdHJhdGVn eUNvbnRyb2wtPmZpcnN0RnJlZUJ1ZmZlciA+PSAwKQorCWZyZWVsaXN0ID0gQ2hvb3NlRnJl ZUxpc3QoKTsKKwlpZiAoZnJlZWxpc3QtPmZpcnN0RnJlZUJ1ZmZlciA+PSAwKQogCXsKIAkJ d2hpbGUgKHRydWUpCiAJCXsKIAkJCS8qIEFjcXVpcmUgdGhlIHNwaW5sb2NrIHRvIHJlbW92 ZSBlbGVtZW50IGZyb20gdGhlIGZyZWVsaXN0ICovCi0JCQlTcGluTG9ja0FjcXVpcmUoJlN0 cmF0ZWd5Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2spOworCQkJU3BpbkxvY2tBY3F1 aXJlKCZmcmVlbGlzdC0+ZnJlZWxpc3RfbG9jayk7CiAKLQkJCWlmIChTdHJhdGVneUNvbnRy b2wtPmZpcnN0RnJlZUJ1ZmZlciA8IDApCisJCQlpZiAoZnJlZWxpc3QtPmZpcnN0RnJlZUJ1 ZmZlciA8IDApCiAJCQl7Ci0JCQkJU3BpbkxvY2tSZWxlYXNlKCZTdHJhdGVneUNvbnRyb2wt PmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsKKwkJCQlTcGluTG9ja1JlbGVhc2UoJmZyZWVsaXN0 LT5mcmVlbGlzdF9sb2NrKTsKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJYnVmID0gR2V0QnVm ZmVyRGVzY3JpcHRvcihTdHJhdGVneUNvbnRyb2wtPmZpcnN0RnJlZUJ1ZmZlcik7CisJCQli dWYgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGZyZWVsaXN0LT5maXJzdEZyZWVCdWZmZXIpOwog CQkJQXNzZXJ0KGJ1Zi0+ZnJlZU5leHQgIT0gRlJFRU5FWFRfTk9UX0lOX0xJU1QpOwogCiAJ CQkvKiBVbmNvbmRpdGlvbmFsbHkgcmVtb3ZlIGJ1ZmZlciBmcm9tIGZyZWVsaXN0ICovCi0J CQlTdHJhdGVneUNvbnRyb2wtPmZpcnN0RnJlZUJ1ZmZlciA9IGJ1Zi0+ZnJlZU5leHQ7CisJ CQlmcmVlbGlzdC0+Zmlyc3RGcmVlQnVmZmVyID0gYnVmLT5mcmVlTmV4dDsKIAkJCWJ1Zi0+ ZnJlZU5leHQgPSBGUkVFTkVYVF9OT1RfSU5fTElTVDsKIAorCQkJLyogaW5jcmVtZW50IG51 bWJlciBvZiBidWZmZXJzIHdlIGNvbnN1bWVkIGZyb20gdGhpcyBsaXN0ICovCisJCQlmcmVl bGlzdC0+Y29uc3VtZWQrKzsKKwogCQkJLyoKIAkJCSAqIFJlbGVhc2UgdGhlIGxvY2sgc28g c29tZW9uZSBlbHNlIGNhbiBhY2Nlc3MgdGhlIGZyZWVsaXN0IHdoaWxlCiAJCQkgKiB3ZSBj aGVjayBvdXQgdGhpcyBidWZmZXIuCiAJCQkgKi8KLQkJCVNwaW5Mb2NrUmVsZWFzZSgmU3Ry YXRlZ3lDb250cm9sLT5idWZmZXJfc3RyYXRlZ3lfbG9jayk7CisJCQlTcGluTG9ja1JlbGVh c2UoJmZyZWVsaXN0LT5mcmVlbGlzdF9sb2NrKTsKIAogCQkJLyoKIAkJCSAqIElmIHRoZSBi dWZmZXIgaXMgcGlubmVkIG9yIGhhcyBhIG5vbnplcm8gdXNhZ2VfY291bnQsIHdlIGNhbm5v dApAQCAtMzA1LDcgKzQ3MiwxNyBAQCBTdHJhdGVneUdldEJ1ZmZlcihCdWZmZXJBY2Nlc3NT dHJhdGVneSBzdHJhdGVneSwgdWludDMyICpidWZfc3RhdGUsIGJvb2wgKmZyb21fcgogCQl9 CiAJfQogCi0JLyogTm90aGluZyBvbiB0aGUgZnJlZWxpc3QsIHNvIHJ1biB0aGUgImNsb2Nr IHN3ZWVwIiBhbGdvcml0aG0gKi8KKwkvKgorCSAqIE5vdGhpbmcgb24gdGhlIGZyZWVsaXN0 LCBzbyBydW4gdGhlICJjbG9jayBzd2VlcCIgYWxnb3JpdGhtCisJICoKKwkgKiBYWFggU2hv dWxkIHdlIGFsc28gbWFrZSB0aGlzIE5VTUEtYXdhcmUsIHRvIG9ubHkgYWNjZXNzIGJ1ZmZl cnMgZnJvbQorCSAqIHRoZSBzYW1lIE5VTUEgbm9kZT8gVGhhdCdkIHByb2JhYmx5IG1lYW4g d2UgbmVlZCB0byBtYWtlIHRoZSBjbG9jaworCSAqIHN3ZWVwIE5VTUEtYXdhcmUsIHBlcmhh cHMgYnkgaGF2aW5nIG11bHRpcGxlIGNsb2NrIHN3ZWVwcywgZWFjaCBmb3IgYQorCSAqIHN1 YnNldCBvZiBidWZmZXJzLiBCdXQgdGhhdCBhbHNvIG1lYW5zIGVhY2ggcHJvY2VzcyBjb3Vs ZCAic3dlZXAiIG9ubHkKKwkgKiBhIGZyYWN0aW9uIG9mIGJ1ZmZlcnMsIGV2ZW4gaWYgdGhl IG90aGVyIGJ1ZmZlcnMgYXJlIGJldHRlciBjYW5kaWRhdGVzCisJICogZm9yIGV2aWN0aW9u LiBXb3VsZCB0aGF0IGFsc28gbWVhbiB3ZSdkIGhhdmUgbXVsdGlwbGUgYmd3cml0ZXJzLCBv bmUKKwkgKiBmb3IgZWFjaCBub2RlLCBvciB3b3VsZCBvbmUgYmd3cml0ZXIgaGFuZGxlIGFs bCBvZiB0aGF0PworCSAqLwogCXRyeWNvdW50ZXIgPSBOQnVmZmVyczsKIAlmb3IgKDs7KQog CXsKQEAgLTM1Niw3ICs1MzMsMjIgQEAgU3RyYXRlZ3lHZXRCdWZmZXIoQnVmZmVyQWNjZXNz U3RyYXRlZ3kgc3RyYXRlZ3ksIHVpbnQzMiAqYnVmX3N0YXRlLCBib29sICpmcm9tX3IKIHZv aWQKIFN0cmF0ZWd5RnJlZUJ1ZmZlcihCdWZmZXJEZXNjICpidWYpCiB7Ci0JU3BpbkxvY2tB Y3F1aXJlKCZTdHJhdGVneUNvbnRyb2wtPmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsKKwlCdWZm ZXJTdHJhdGVneUZyZWVsaXN0ICpmcmVlbGlzdDsKKworCS8qCisJICogV2UgZG9uJ3Qgd2Fu dCB0byBjYWxsIENob29zZUZyZWVMaXN0KCkgYWdhaW4sIGJlY2F1c2Ugd2UgbWlnaHQgZ2V0 IGEKKwkgKiBjb21wbGV0ZWx5IGRpZmZlcmVudCBmcmVlbGlzdCAtIGVpdGhlciBhIGRpZmZl cmVudCBwYXJ0aXRpb24gaW4gdGhlCisJICogc2FtZSBncm91cCwgb3IgZXZlbiBhIGRpZmZl cmVudCBncm91cCBpZiB0aGUgTlVNQSBub2RlIGNoYW5nZWQuIEJ1dAorCSAqIHdlIGNhbiBj YWxjdWxhdGUgdGhlIHByb3BlciBmcmVlbGlzdCBmcm9tIHRoZSBidWZmZXIgaWQuCisJICov CisJaW50IGluZGV4ID0gKEJ1ZmZlckdldE5vZGUoYnVmLT5idWZfaWQpICogU3RyYXRlZ3lD b250cm9sLT5udW1fcGFydGl0aW9uc19wZXJfZ3JvdXApCisJCQkJICsgKGJ1Zi0+YnVmX2lk ICUgU3RyYXRlZ3lDb250cm9sLT5udW1fcGFydGl0aW9uc19wZXJfZ3JvdXApOworCisJQXNz ZXJ0KChpbmRleCA+PSAwKSAmJiAoaW5kZXggPCBTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0 aXRpb25zKSk7CisKKwlmcmVlbGlzdCA9ICZTdHJhdGVneUNvbnRyb2wtPmZyZWVsaXN0c1tp bmRleF07CisKKwlTcGluTG9ja0FjcXVpcmUoJmZyZWVsaXN0LT5mcmVlbGlzdF9sb2NrKTsK IAogCS8qCiAJICogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBhcmUgdG9sZCB0byBwdXQgc29t ZXRoaW5nIGluIHRoZSBmcmVlbGlzdCB0aGF0CkBAIC0zNjQsMTEgKzU1NiwxMSBAQCBTdHJh dGVneUZyZWVCdWZmZXIoQnVmZmVyRGVzYyAqYnVmKQogCSAqLwogCWlmIChidWYtPmZyZWVO ZXh0ID09IEZSRUVORVhUX05PVF9JTl9MSVNUKQogCXsKLQkJYnVmLT5mcmVlTmV4dCA9IFN0 cmF0ZWd5Q29udHJvbC0+Zmlyc3RGcmVlQnVmZmVyOwotCQlTdHJhdGVneUNvbnRyb2wtPmZp cnN0RnJlZUJ1ZmZlciA9IGJ1Zi0+YnVmX2lkOworCQlidWYtPmZyZWVOZXh0ID0gZnJlZWxp c3QtPmZpcnN0RnJlZUJ1ZmZlcjsKKwkJZnJlZWxpc3QtPmZpcnN0RnJlZUJ1ZmZlciA9IGJ1 Zi0+YnVmX2lkOwogCX0KIAotCVNwaW5Mb2NrUmVsZWFzZSgmU3RyYXRlZ3lDb250cm9sLT5i dWZmZXJfc3RyYXRlZ3lfbG9jayk7CisJU3BpbkxvY2tSZWxlYXNlKCZmcmVlbGlzdC0+ZnJl ZWxpc3RfbG9jayk7CiB9CiAKIC8qCkBAIC00MzIsNiArNjI0LDQyIEBAIFN0cmF0ZWd5Tm90 aWZ5QmdXcml0ZXIoaW50IGJnd3Byb2NubykKIAlTcGluTG9ja1JlbGVhc2UoJlN0cmF0ZWd5 Q29udHJvbC0+YnVmZmVyX3N0cmF0ZWd5X2xvY2spOwogfQogCisvKiBwcmludHMgc29tZSBk ZWJ1ZyBpbmZvIC8gc3RhdHMgYWJvdXQgZnJlZWxpc3RzIGF0IHNodXRkb3duICovCitzdGF0 aWMgdm9pZAorZnJlZWxpc3RfYmVmb3JlX3NobWVtX2V4aXQoaW50IGNvZGUsIERhdHVtIGFy ZykKK3sKKwlmb3IgKGludCBub2RlID0gMDsgbm9kZSA8IHN0cmF0ZWd5X25ub2Rlczsgbm9k ZSsrKQorCXsKKwkJQnVmZmVyU3RyYXRlZ3lGcmVlbGlzdCAqZnJlZWxpc3QgPSAmU3RyYXRl Z3lDb250cm9sLT5mcmVlbGlzdHNbbm9kZV07CisJCXVpbnQ2NAkJcmVtYWluID0gMDsKKwkJ dWludDY0CQlhY3R1YWxseV9mcmVlID0gMDsKKwkJaW50CQkJY3VyID0gZnJlZWxpc3QtPmZp cnN0RnJlZUJ1ZmZlcjsKKworCQl3aGlsZSAoY3VyID49IDApCisJCXsKKwkJCXVpbnQzMgkJ bG9jYWxfYnVmX3N0YXRlOworCQkJQnVmZmVyRGVzYyAqYnVmOworCisJCQlidWYgPSBHZXRC dWZmZXJEZXNjcmlwdG9yKGN1cik7CisKKwkJCXJlbWFpbisrOworCisJCQlsb2NhbF9idWZf c3RhdGUgPSBMb2NrQnVmSGRyKGJ1Zik7CisKKwkJCWlmICghKGxvY2FsX2J1Zl9zdGF0ZSAm IEJNX1RBR19WQUxJRCkpCisJCQkJYWN0dWFsbHlfZnJlZSsrOworCisJCQlVbmxvY2tCdWZI ZHIoYnVmLCBsb2NhbF9idWZfc3RhdGUpOworCisJCQljdXIgPSBidWYtPmZyZWVOZXh0Owor CQl9CisJCWVsb2coTE9HLCAiZnJlZWxpc3QgJWQsIGZpcnN0RjogJWQ6IGNvbnN1bWVkOiAl bHUsIHJlbWFpbjogJWx1LCBhY3R1YWxseSBmcmVlOiAlbHUiLAorCQkJIG5vZGUsCisJCQkg ZnJlZWxpc3QtPmZpcnN0RnJlZUJ1ZmZlciwKKwkJCSBmcmVlbGlzdC0+Y29uc3VtZWQsCisJ CQkgcmVtYWluLCBhY3R1YWxseV9mcmVlKTsKKwl9Cit9CiAKIC8qCiAgKiBTdHJhdGVneVNo bWVtU2l6ZQpAQCAtNDQ1LDEyICs2NzMsMjggQEAgU2l6ZQogU3RyYXRlZ3lTaG1lbVNpemUo dm9pZCkKIHsKIAlTaXplCQlzaXplID0gMDsKKwlpbnQJCQludW1fcGFydGl0aW9uczsKKwor CS8qIEZJWE1FICovCisjaWZkZWYgVVNFX0xJQk5VTUEKKwlzdHJhdGVneV9uY3B1cyA9IG51 bWFfbnVtX3Rhc2tfY3B1cygpOworCXN0cmF0ZWd5X25ub2RlcyA9IG51bWFfbnVtX3Rhc2tf bm9kZXMoKTsKKyNlbHNlCisJc3RyYXRlZ3lfbmNwdXMgPSAxOworCXN0cmF0ZWd5X25ub2Rl cyA9IDE7CisjZW5kaWYKKworCW51bV9wYXJ0aXRpb25zID0gY2FsY3VsYXRlX3BhcnRpdGlv bl9jb3VudChzdHJhdGVneV9ubm9kZXMpOwogCiAJLyogc2l6ZSBvZiBsb29rdXAgaGFzaCB0 YWJsZSAuLi4gc2VlIGNvbW1lbnQgaW4gU3RyYXRlZ3lJbml0aWFsaXplICovCiAJc2l6ZSA9 IGFkZF9zaXplKHNpemUsIEJ1ZlRhYmxlU2htZW1TaXplKE5CdWZmZXJzICsgTlVNX0JVRkZF Ul9QQVJUSVRJT05TKSk7CiAKIAkvKiBzaXplIG9mIHRoZSBzaGFyZWQgcmVwbGFjZW1lbnQg c3RyYXRlZ3kgY29udHJvbCBibG9jayAqLwotCXNpemUgPSBhZGRfc2l6ZShzaXplLCBNQVhB TElHTihzaXplb2YoQnVmZmVyU3RyYXRlZ3lDb250cm9sKSkpOworCXNpemUgPSBhZGRfc2l6 ZShzaXplLCBNQVhBTElHTihvZmZzZXRvZihCdWZmZXJTdHJhdGVneUNvbnRyb2wsIGZyZWVs aXN0cykpKTsKKworCS8qIHNpemUgb2YgZnJlZWxpc3QgcGFydGl0aW9ucyAoYXQgbGVhc3Qg b25lIHBlciBOVU1BIG5vZGUpICovCisJc2l6ZSA9IGFkZF9zaXplKHNpemUsIE1BWEFMSUdO KG11bF9zaXplKHNpemVvZihCdWZmZXJTdHJhdGVneUZyZWVsaXN0KSwKKwkJCQkJCQkJCQkJ bnVtX3BhcnRpdGlvbnMpKSk7CiAKIAlyZXR1cm4gc2l6ZTsKIH0KQEAgLTQ2Niw2ICs3MTAs MTMgQEAgdm9pZAogU3RyYXRlZ3lJbml0aWFsaXplKGJvb2wgaW5pdCkKIHsKIAlib29sCQlm b3VuZDsKKwlpbnQJCQlidWZmZXJzX3Blcl9wYXJ0aXRpb247CisKKwlpbnQJCQludW1fcGFy dGl0aW9uczsKKwlpbnQJCQludW1fcGFydGl0aW9uc19wZXJfZ3JvdXA7CisKKwkvKiAqLwor CW51bV9wYXJ0aXRpb25zID0gY2FsY3VsYXRlX3BhcnRpdGlvbl9jb3VudChzdHJhdGVneV9u bm9kZXMpOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBzaGFyZWQgYnVmZmVyIGxvb2t1 cCBoYXNodGFibGUuCkBAIC00ODQsMjMgKzczNSwyOCBAQCBTdHJhdGVneUluaXRpYWxpemUo Ym9vbCBpbml0KQogCSAqLwogCVN0cmF0ZWd5Q29udHJvbCA9IChCdWZmZXJTdHJhdGVneUNv bnRyb2wgKikKIAkJU2htZW1Jbml0U3RydWN0KCJCdWZmZXIgU3RyYXRlZ3kgU3RhdHVzIiwK LQkJCQkJCXNpemVvZihCdWZmZXJTdHJhdGVneUNvbnRyb2wpLAorCQkJCQkJTUFYQUxJR04o b2Zmc2V0b2YoQnVmZmVyU3RyYXRlZ3lDb250cm9sLCBmcmVlbGlzdHMpKSArCisJCQkJCQlN QVhBTElHTihzaXplb2YoQnVmZmVyU3RyYXRlZ3lGcmVlbGlzdCkgKiBudW1fcGFydGl0aW9u cyksCiAJCQkJCQkmZm91bmQpOwogCiAJaWYgKCFmb3VuZCkKIAl7CisJCWludDMyCW51bUJ1 ZmZlcnMgPSBOQnVmZmVycyAvIG51bV9wYXJ0aXRpb25zOworCisJCXdoaWxlIChudW1CdWZm ZXJzICogbnVtX3BhcnRpdGlvbnMgPCBOQnVmZmVycykKKwkJCW51bUJ1ZmZlcnMrKzsKKwor CQlBc3NlcnQobnVtQnVmZmVycyAqIG51bV9wYXJ0aXRpb25zID09IE5CdWZmZXJzKTsKKwog CQkvKgogCQkgKiBPbmx5IGRvbmUgb25jZSwgdXN1YWxseSBpbiBwb3N0bWFzdGVyCiAJCSAq LwogCQlBc3NlcnQoaW5pdCk7CiAKLQkJU3BpbkxvY2tJbml0KCZTdHJhdGVneUNvbnRyb2wt PmJ1ZmZlcl9zdHJhdGVneV9sb2NrKTsKKwkJLyogcmVnaXN0ZXIgY2FsbGJhY2sgdG8gZHVt cCBzb21lIHN0YXRzIG9uIGV4aXQgKi8KKwkJYmVmb3JlX3NobWVtX2V4aXQoZnJlZWxpc3Rf YmVmb3JlX3NobWVtX2V4aXQsIDApOwogCi0JCS8qCi0JCSAqIEdyYWIgdGhlIHdob2xlIGxp bmtlZCBsaXN0IG9mIGZyZWUgYnVmZmVycyBmb3Igb3VyIHN0cmF0ZWd5LiBXZQotCQkgKiBh c3N1bWUgaXQgd2FzIHByZXZpb3VzbHkgc2V0IHVwIGJ5IEJ1ZmZlck1hbmFnZXJTaG1lbUlu aXQoKS4KLQkJICovCi0JCVN0cmF0ZWd5Q29udHJvbC0+Zmlyc3RGcmVlQnVmZmVyID0gMDsK KwkJU3BpbkxvY2tJbml0KCZTdHJhdGVneUNvbnRyb2wtPmJ1ZmZlcl9zdHJhdGVneV9sb2Nr KTsKIAogCQkvKiBJbml0aWFsaXplIHRoZSBjbG9jayBzd2VlcCBwb2ludGVyICovCiAJCXBn X2F0b21pY19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVyLCAw KTsKQEAgLTUxMSw2ICs3NjcsNjggQEAgU3RyYXRlZ3lJbml0aWFsaXplKGJvb2wgaW5pdCkK IAogCQkvKiBObyBwZW5kaW5nIG5vdGlmaWNhdGlvbiAqLwogCQlTdHJhdGVneUNvbnRyb2wt PmJnd3Byb2NubyA9IC0xOworCisJCS8qIGFsd2F5cyBhIG11bHRpcGxlIG9mIE5VTUEgbm9k ZXMgKi8KKwkJQXNzZXJ0KG51bV9wYXJ0aXRpb25zICUgc3RyYXRlZ3lfbm5vZGVzID09IDAp OworCisJCW51bV9wYXJ0aXRpb25zX3Blcl9ncm91cCA9IChudW1fcGFydGl0aW9ucyAvIHN0 cmF0ZWd5X25ub2Rlcyk7CisKKwkJLyogaW5pdGlhbGl6ZSB0aGUgcGFydGl0aW9uZWQgY2xv Y2tzd2VlcCAqLworCQlTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zID0gbnVtX3Bh cnRpdGlvbnM7CisJCVN0cmF0ZWd5Q29udHJvbC0+bnVtX3BhcnRpdGlvbnNfZ3JvdXBzID0g c3RyYXRlZ3lfbm5vZGVzOworCQlTdHJhdGVneUNvbnRyb2wtPm51bV9wYXJ0aXRpb25zX3Bl cl9ncm91cCA9IG51bV9wYXJ0aXRpb25zX3Blcl9ncm91cDsKKworCQkvKgorCQkgKiBSZWJ1 aWxkIHRoZSBmcmVlbGlzdCAtIHJpZ2h0IG5vdyBhbGwgYnVmZmVycyBhcmUgaW4gb25lIGh1 Z2UgbGlzdCwKKwkJICogd2Ugd2FudCB0byByZXdvcmsgdGhhdCBpbnRvIG11bHRpcGxlIGxp c3RzLiBTdGFydCBieSBpbml0aWFsaXppbmcKKwkJICogdGhlIHN0cmF0ZWd5IHRvIGhhdmUg ZW1wdHkgbGlzdHMuCisJCSAqLworCQlmb3IgKGludCBuZnJlZWxpc3QgPSAwOyBuZnJlZWxp c3QgPCBudW1fcGFydGl0aW9uczsgbmZyZWVsaXN0KyspCisJCXsKKwkJCUJ1ZmZlclN0cmF0 ZWd5RnJlZWxpc3QgKmZyZWVsaXN0OworCisJCQlmcmVlbGlzdCA9ICZTdHJhdGVneUNvbnRy b2wtPmZyZWVsaXN0c1tuZnJlZWxpc3RdOworCisJCQlmcmVlbGlzdC0+Zmlyc3RGcmVlQnVm ZmVyID0gRlJFRU5FWFRfRU5EX09GX0xJU1Q7CisKKwkJCVNwaW5Mb2NrSW5pdCgmZnJlZWxp c3QtPmZyZWVsaXN0X2xvY2spOworCQl9CisKKwkJLyogYnVmZmVycyBwZXIgcGFydGl0aW9u ICovCisJCWJ1ZmZlcnNfcGVyX3BhcnRpdGlvbiA9IChOQnVmZmVycyAvIG51bV9wYXJ0aXRp b25zKTsKKworCQllbG9nKExPRywgIk5CdWZmZXJzOiAlZCwgbm9kZXMgJWQsIG5jcHVzOiAl ZCwgZGl2aWRlOiAlZCwgcmVtYWluOiAlZCIsCisJCQkgTkJ1ZmZlcnMsIHN0cmF0ZWd5X25u b2Rlcywgc3RyYXRlZ3lfbmNwdXMsCisJCQkgYnVmZmVyc19wZXJfcGFydGl0aW9uLCBOQnVm ZmVycyAtIChudW1fcGFydGl0aW9ucyAqIGJ1ZmZlcnNfcGVyX3BhcnRpdGlvbikpOworCisJ CS8qCisJCSAqIFdhbGsgdGhyb3VnaCB0aGUgYnVmZmVycywgYWRkIHRoZW0gdG8gdGhlIGNv cnJlY3QgbGlzdC4gV2FsayBmcm9tCisJCSAqIHRoZSBlbmQsIGJlY2F1c2Ugd2UncmUgYWRk aW5nIHRoZSBidWZmZXJzIHRvIHRoZSBiZWdpbm5pbmcuCisJCSAqLworCQlmb3IgKGludCBp ID0gTkJ1ZmZlcnMgLSAxOyBpID49IDA7IGktLSkKKwkJeworCQkJQnVmZmVyRGVzYyAqYnVm ID0gR2V0QnVmZmVyRGVzY3JpcHRvcihpKTsKKwkJCUJ1ZmZlclN0cmF0ZWd5RnJlZWxpc3Qg KmZyZWVsaXN0OworCQkJaW50CQkJbm9kZTsKKwkJCWludAkJCWluZGV4OworCisJCQkvKgor CQkJICogU3BsaXQgdGhlIGZyZWVsaXN0IGludG8gcGFydGl0aW9ucywgaWYgbmVlZGVkIChv ciBqdXN0IGtlZXAgdGhlCisJCQkgKiBmcmVlbGlzdCB3ZSBhbHJlYWR5IGJ1aWx0IGluIEJ1 ZmZlck1hbmFnZXJTaG1lbUluaXQoKS4KKwkJCSAqLworCisJCQkvKiBkZXRlcm1pbmUgTlVN QSBub2RlIGZvciBidWZmZXIsIHRoaXMgZGV0ZXJtaW5lcyB0aGUgZ3JvdXAgKi8KKwkJCW5v ZGUgPSBCdWZmZXJHZXROb2RlKGkpOworCisJCQkvKiBub3cgY2FsY3VsYXRlIHRoZSBhY3R1 YWwgZnJlZWxpc3QgaW5kZXggKi8KKwkJCWluZGV4ID0gbm9kZSAqIG51bV9wYXJ0aXRpb25z X3Blcl9ncm91cCArIChpICUgbnVtX3BhcnRpdGlvbnNfcGVyX2dyb3VwKTsKKworCQkJLyog YWRkIHRvIHRoZSByaWdodCBmcmVlbGlzdCAqLworCQkJZnJlZWxpc3QgPSAmU3RyYXRlZ3lD b250cm9sLT5mcmVlbGlzdHNbaW5kZXhdOworCisJCQlidWYtPmZyZWVOZXh0ID0gZnJlZWxp c3QtPmZpcnN0RnJlZUJ1ZmZlcjsKKwkJCWZyZWVsaXN0LT5maXJzdEZyZWVCdWZmZXIgPSBp OworCQl9CiAJfQogCWVsc2UKIAkJQXNzZXJ0KCFpbml0KTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9n bG9iYWxzLmMKaW5kZXggZjUzNTlkYjM2NTYuLmExMWJjNzFhMzg2IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYworKysgYi9zcmMvYmFja2VuZC91dGls cy9pbml0L2dsb2JhbHMuYwpAQCAtMTQ4LDYgKzE0OCw3IEBAIGludAkJCU1heEJhY2tlbmRz ID0gMDsKIC8qIE5VTUEgc3R1ZmYgKi8KIGJvb2wJCW51bWFfYnVmZmVyc19pbnRlcmxlYXZl ID0gZmFsc2U7CiBib29sCQludW1hX2xvY2FsYWxsb2MgPSBmYWxzZTsKK2Jvb2wJCW51bWFf cGFydGl0aW9uX2ZyZWVsaXN0ID0gZmFsc2U7CiAKIC8qIEdVQyBwYXJhbWV0ZXJzIGZvciB2 YWN1dW0gKi8KIGludAkJCVZhY3V1bUJ1ZmZlclVzYWdlTGltaXQgPSAyMDQ4OwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2Vu ZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwppbmRleCBhMjFmMjA4MDBmYi4uMDU1MmVkNjJj YzcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisr KyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCkBAIC0yMTM2LDYgKzIx MzYsMTYgQEAgc3RydWN0IGNvbmZpZ19ib29sIENvbmZpZ3VyZU5hbWVzQm9vbFtdID0KIAkJ TlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7CisJCXsibnVtYV9wYXJ0aXRpb25fZnJlZWxp c3QiLCBQR0NfUE9TVE1BU1RFUiwgREVWRUxPUEVSX09QVElPTlMsCisJCQlnZXR0ZXh0X25v b3AoIkVuYWJsZXMgYnVmZmVyIGZyZWVsaXN0cyB0byBiZSBwYXJ0aXRpb25lZCBwZXIgTlVN QSBub2RlLiIpLAorCQkJZ2V0dGV4dF9ub29wKCJXaGVuIGVuYWJsZWQsIHdlIGNyZWF0ZSBh IHNlcGFyYXRlIGZyZWVsaXN0IHBlciBOVU1BIG5vZGUuIiksCisJCX0sCisJCSZudW1hX3Bh cnRpdGlvbl9mcmVlbGlzdCwKKwkJZmFsc2UsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAor CiAJewogCQl7InN5bmNfcmVwbGljYXRpb25fc2xvdHMiLCBQR0NfU0lHSFVQLCBSRVBMSUNB VElPTl9TVEFOREJZLAogCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIGEgcGh5c2ljYWwgc3Rh bmRieSB0byBzeW5jaHJvbml6ZSBsb2dpY2FsIGZhaWxvdmVyIHJlcGxpY2F0aW9uIHNsb3Rz IGZyb20gdGhlIHByaW1hcnkgc2VydmVyLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv bWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCA2OTI4NzFhNDAx Zi4uNjZiYWYyYmYzM2UgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisr KyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCkBAIC0xODAsNiArMTgwLDcgQEAgZXh0ZXJu IFBHRExMSU1QT1JUIGludCBtYXhfcGFyYWxsZWxfd29ya2VyczsKIAogZXh0ZXJuIFBHRExM SU1QT1JUIGJvb2wgbnVtYV9idWZmZXJzX2ludGVybGVhdmU7CiBleHRlcm4gUEdETExJTVBP UlQgYm9vbCBudW1hX2xvY2FsYWxsb2M7CitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBudW1h X3BhcnRpdGlvbl9mcmVlbGlzdDsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBjb21taXRf dGltZXN0YW1wX2J1ZmZlcnM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG11bHRpeGFjdF9t ZW1iZXJfYnVmZmVyczsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdy LmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCmluZGV4IGMyNTdjOGExYzIwLi5l ZmI3ZTI4YzEwZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAor KysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC05Myw2ICs5MywxNCBAQCB0 eXBlZGVmIGVudW0gRXh0ZW5kQnVmZmVyZWRGbGFncwogCUVCX0xPQ0tfVEFSR0VUID0gKDEg PDwgNSksCiB9CQkJRXh0ZW5kQnVmZmVyZWRGbGFnczsKIAordHlwZWRlZiBlbnVtIEZyZWVs aXN0UGFydGl0aW9uTW9kZQoreworCUZSRUVMSVNUX1BBUlRJVElPTl9OT05FLAorCUZSRUVM SVNUX1BBUlRJVElPTl9OT0RFLAorCUZSRUVMSVNUX1BBUlRJVElPTl9DUFUsCisJRlJFRUxJ U1RfUEFSVElUSU9OX1BJRCwKK30JCQlGcmVlbGlzdFBhcnRpdGlvbk1vZGU7CisKIC8qCiAg KiBTb21lIGZ1bmN0aW9ucyBpZGVudGlmeSByZWxhdGlvbnMgZWl0aGVyIGJ5IHJlbGF0aW9u IG9yIHNtZ3IgKwogICogcmVscGVyc2lzdGVuY2UuICBVc2VkIHZpYSB0aGUgQk1SX1JFTCgp L0JNUl9TTUdSKCkgbWFjcm9zIGJlbG93LiAgVGhpcwotLSAKMi40OS4wCgo= --------------ZiLGGg5GsiuT6QTFDhUm0SgE Content-Type: text/x-patch; charset=UTF-8; name="v2-0003-freelist-Don-t-track-tail-of-a-freelist.patch" Content-Disposition: attachment; filename="v2-0003-freelist-Don-t-track-tail-of-a-freelist.patch" Content-Transfer-Encoding: base64 RnJvbSAyZmFlZmMyZDEwZGNkOWUzMWU5NmJlNTU2NWU4MmQxOTA0YmQ3MjgwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwu ZGU+CkRhdGU6IE1vbiwgMTQgT2N0IDIwMjQgMTQ6MTA6MTMgLTA0MDAKU3ViamVjdDogW1BB VENIIHYyIDMvN10gZnJlZWxpc3Q6IERvbid0IHRyYWNrIHRhaWwgb2YgYSBmcmVlbGlzdAoK VGhlIGZyZWVsaXN0IHRhaWwgaXNuJ3QgY3VycmVudGx5IHVzZWQsIG1ha2luZyBpdCB1bm5l Y2Vzc2FyeSBvdmVyaGVhZC4KU28ganVzdCBkb24ndCBkbyB0aGF0LgotLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMgfCA5IC0tLS0tLS0tLQogMSBmaWxlIGNo YW5nZWQsIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvZnJlZWxpc3QuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2ZyZWVs aXN0LmMKaW5kZXggMDE5MDliZTAyNzIuLmUwNDY1MjZjMTQ5IDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9mcmVlbGlzdC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0 b3JhZ2UvYnVmZmVyL2ZyZWVsaXN0LmMKQEAgLTQwLDEyICs0MCw2IEBAIHR5cGVkZWYgc3Ry dWN0CiAJcGdfYXRvbWljX3VpbnQzMiBuZXh0VmljdGltQnVmZmVyOwogCiAJaW50CQkJZmly c3RGcmVlQnVmZmVyOwkvKiBIZWFkIG9mIGxpc3Qgb2YgdW51c2VkIGJ1ZmZlcnMgKi8KLQlp bnQJCQlsYXN0RnJlZUJ1ZmZlcjsgLyogVGFpbCBvZiBsaXN0IG9mIHVudXNlZCBidWZmZXJz ICovCi0KLQkvKgotCSAqIE5PVEU6IGxhc3RGcmVlQnVmZmVyIGlzIHVuZGVmaW5lZCB3aGVu IGZpcnN0RnJlZUJ1ZmZlciBpcyAtMSAodGhhdCBpcywKLQkgKiB3aGVuIHRoZSBsaXN0IGlz IGVtcHR5KQotCSAqLwogCiAJLyoKIAkgKiBTdGF0aXN0aWNzLiAgVGhlc2UgY291bnRlcnMg c2hvdWxkIGJlIHdpZGUgZW5vdWdoIHRoYXQgdGhleSBjYW4ndApAQCAtMzcxLDggKzM2NSw2 IEBAIFN0cmF0ZWd5RnJlZUJ1ZmZlcihCdWZmZXJEZXNjICpidWYpCiAJaWYgKGJ1Zi0+ZnJl ZU5leHQgPT0gRlJFRU5FWFRfTk9UX0lOX0xJU1QpCiAJewogCQlidWYtPmZyZWVOZXh0ID0g U3RyYXRlZ3lDb250cm9sLT5maXJzdEZyZWVCdWZmZXI7Ci0JCWlmIChidWYtPmZyZWVOZXh0 IDwgMCkKLQkJCVN0cmF0ZWd5Q29udHJvbC0+bGFzdEZyZWVCdWZmZXIgPSBidWYtPmJ1Zl9p ZDsKIAkJU3RyYXRlZ3lDb250cm9sLT5maXJzdEZyZWVCdWZmZXIgPSBidWYtPmJ1Zl9pZDsK IAl9CiAKQEAgLTUwOSw3ICs1MDEsNiBAQCBTdHJhdGVneUluaXRpYWxpemUoYm9vbCBpbml0 KQogCQkgKiBhc3N1bWUgaXQgd2FzIHByZXZpb3VzbHkgc2V0IHVwIGJ5IEJ1ZmZlck1hbmFn ZXJTaG1lbUluaXQoKS4KIAkJICovCiAJCVN0cmF0ZWd5Q29udHJvbC0+Zmlyc3RGcmVlQnVm ZmVyID0gMDsKLQkJU3RyYXRlZ3lDb250cm9sLT5sYXN0RnJlZUJ1ZmZlciA9IE5CdWZmZXJz IC0gMTsKIAogCQkvKiBJbml0aWFsaXplIHRoZSBjbG9jayBzd2VlcCBwb2ludGVyICovCiAJ CXBnX2F0b21pY19pbml0X3UzMigmU3RyYXRlZ3lDb250cm9sLT5uZXh0VmljdGltQnVmZmVy LCAwKTsKLS0gCjIuNDkuMAoK --------------ZiLGGg5GsiuT6QTFDhUm0SgE Content-Type: text/x-patch; charset=UTF-8; name="v2-0002-NUMA-localalloc.patch" Content-Disposition: attachment; filename="v2-0002-NUMA-localalloc.patch" Content-Transfer-Encoding: base64 RnJvbSBjMGFjZDMzODVmYTk2MWU1NmViNDM1Yjg1YmIwMjFlN2NlOWUyY2I4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVGh1LCAyMiBNYXkgMjAyNSAxODoyNzowNiArMDIwMApTdWJqZWN0OiBbUEFUQ0gg djIgMi83XSBOVU1BOiBsb2NhbGFsbG9jCgpTZXQgdGhlIGRlZmF1bHQgYWxsb2NhdGlvbiBw b2xpY3kgdG8gImxvY2FsYWxsb2MiLCB3aGljaCBtZWFucyBmcm9tIHRoZQpsb2NhbCBOVU1B IG5vZGUuIFRoaXMgaXMgdXNlZnVsIGZvciBwcm9jZXNzLXByaXZhdGUgbWVtb3J5LCB3aGlj aCBpcyBub3QKZ29pbmcgdG8gYmUgc2hhcmVkIHdpdGggb3RoZXIgbm9kZXMsIGFuZCBpcyBy ZWxhdGl2ZWx5IHNob3J0LWxpdmVkIChzbwp3ZSdyZSB1bmxpa2VseSB0byBoYXZlIGlzc3Vl cyBpZiB0aGUgcHJvY2VzcyBnZXRzIG1vdmVkIGJ5IHNjaGVkdWxlcikuCgpUaGlzIHNldHMg ZGVmYXVsdCBmb3IgdGhlIHdob2xlIHByb2Nlc3MsIGZvciBhbGwgZnV0dXJlIGFsbG9jYXRp b25zLiBCdXQKdGhhdCdzIGZpbmUsIHdlJ3ZlIGFscmVhZHkgcG9wdWxhdGVkIHRoZSBzaGFy ZWQgbWVtb3J5IGVhcmxpZXIgKGJ5CmludGVybGVhdmluZyBpdCBleHBsaWNpdGx5KS4gT3Ro ZXJ3aXNlIHdlJ2QgdHJpZ2dlciBwYWdlIGZhdWx0IGFuZCBpdCdkCmJlIGFsbG9jYXRlZCBv biBsb2NhbCBub2RlLgoKWFhYIFRoaXMgcGF0Y2ggbWF5IG5vdCBiZSBuZWNlc3NhcnksIGFz IHdlIG5vdyBsb2NhdGUgbWVtb3J5IHRvIG5vZGVzCnVzaW5nIGV4cGxpY2l0IG51bWFfdG9u b2RlX21lbW9yeSgpIGNhbGxzLCBhbmQgbm90IGJ5IGludGVybGVhdmluZy4gQnV0Cml0J3Mg dXNlZnVsIGZvciBleHBlcmltZW50cyBkdXJpbmcgZGV2ZWxvcG1lbnQsIHNvIEknbSBrZWVw aW5nIGl0LgotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jICAgIHwgIDEg Kwogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jICAgfCAxNiArKysrKysrKysr KysrKysrCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyB8IDEwICsrKysr KysrKysKIHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgIHwgIDEgKwogNCBm aWxlcyBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2Jh bHMuYwppbmRleCA4NzZjYjY0Y2Y2Ni4uZjUzNTlkYjM2NTYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2lu aXQvZ2xvYmFscy5jCkBAIC0xNDcsNiArMTQ3LDcgQEAgaW50CQkJTWF4QmFja2VuZHMgPSAw OwogCiAvKiBOVU1BIHN0dWZmICovCiBib29sCQludW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZSA9 IGZhbHNlOworYm9vbAkJbnVtYV9sb2NhbGFsbG9jID0gZmFsc2U7CiAKIC8qIEdVQyBwYXJh bWV0ZXJzIGZvciB2YWN1dW0gKi8KIGludAkJCVZhY3V1bUJ1ZmZlclVzYWdlTGltaXQgPSAy MDQ4OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5pdC5jCmluZGV4IDQzYjRkYmNjYzNkLi5k MTE5MzY2OTFiMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9taXNjaW5p dC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQuYwpAQCAtMjgsNiAr MjgsMTAgQEAKICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KICNpbmNsdWRlIDx1dGltZS5oPgog CisjaWZkZWYgVVNFX0xJQk5VTUEKKyNpbmNsdWRlIDxudW1hLmg+CisjZW5kaWYKKwogI2lu Y2x1ZGUgImFjY2Vzcy9odHVwX2RldGFpbHMuaCIKICNpbmNsdWRlICJhY2Nlc3MvcGFyYWxs ZWwuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2F1dGhpZC5oIgpAQCAtMTY0LDYgKzE2OCwx OCBAQCBJbml0UG9zdG1hc3RlckNoaWxkKHZvaWQpCiAJCQkJKGVycmNvZGVfZm9yX3NvY2tl dF9hY2Nlc3MoKSwKIAkJCQkgZXJybXNnX2ludGVybmFsKCJjb3VsZCBub3Qgc2V0IHBvc3Rt YXN0ZXIgZGVhdGggbW9uaXRvcmluZyBwaXBlIHRvIEZEX0NMT0VYRUMgbW9kZTogJW0iKSkp OwogI2VuZGlmCisKKyNpZmRlZiBVU0VfTElCTlVNQQorCS8qCisJICogU2V0IHRoZSBkZWZh dWx0IGFsbG9jYXRpb24gcG9saWN5IHRvIGxvY2FsIG5vZGUsIHdoZXJlIHRoZSB0YXNrIGlz CisJICogZXhlY3V0aW5nIGF0IHRoZSB0aW1lIG9mIGEgcGFnZSBmYXVsdC4KKwkgKgorCSAq IFhYWCBJIGJlbGlldmUgdGhpcyBpcyBub3QgbmVjZXNzYXJ5LCBub3cgdGhhdCB3ZSBkb24n dCB1c2UgYXV0b21hdGljCisJICogaW50ZXJsZWF2aW5nIChudW1hX3NldF9pbnRlcmxlYXZl X21hc2spLgorCSAqLworCWlmIChudW1hX2xvY2FsYWxsb2MpCisJCW51bWFfc2V0X2xvY2Fs YWxsb2MoKTsKKyNlbmRpZgogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJs ZXMuYwppbmRleCA5NTcwMDg3YWE2MC4uYTIxZjIwODAwZmIgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L21pc2MvZ3VjX3RhYmxlcy5jCkBAIC0yMTI2LDYgKzIxMjYsMTYgQEAgc3RydWN0IGNvbmZp Z19ib29sIENvbmZpZ3VyZU5hbWVzQm9vbFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0s CiAKKwl7CisJCXsibnVtYV9sb2NhbGFsbG9jIiwgUEdDX1BPU1RNQVNURVIsIERFVkVMT1BF Ul9PUFRJT05TLAorCQkJZ2V0dGV4dF9ub29wKCJFbmFibGVzIHNldHRpbmcgdGhlIGRlZmF1 bHQgYWxsb2NhdGlvbiBwb2xpY3kgdG8gbG9jYWwgbm9kZS4iKSwKKwkJCWdldHRleHRfbm9v cCgiV2hlbiBlbmFibGVkLCBhbGxvY2F0ZSBmcm9tIHRoZSBub2RlIHdoZXJlIHRoZSB0YXNr IGlzIGV4ZWN1dGluZy4iKSwKKwkJfSwKKwkJJm51bWFfbG9jYWxhbGxvYywKKwkJZmFsc2Us CisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJewogCQl7InN5bmNfcmVwbGljYXRpb25f c2xvdHMiLCBQR0NfU0lHSFVQLCBSRVBMSUNBVElPTl9TVEFOREJZLAogCQkJZ2V0dGV4dF9u b29wKCJFbmFibGVzIGEgcGh5c2ljYWwgc3RhbmRieSB0byBzeW5jaHJvbml6ZSBsb2dpY2Fs IGZhaWxvdmVyIHJlcGxpY2F0aW9uIHNsb3RzIGZyb20gdGhlIHByaW1hcnkgc2VydmVyLiIp LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9t aXNjYWRtaW4uaAppbmRleCAwMTRhNjA3OWFmMi4uNjkyODcxYTQwMWYgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5o CkBAIC0xNzksNiArMTc5LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGludCBtYXhfd29ya2Vy X3Byb2Nlc3NlczsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3BhcmFsbGVsX3dvcmtl cnM7CiAKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIG51bWFfYnVmZmVyc19pbnRlcmxlYXZl OworZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgbnVtYV9sb2NhbGFsbG9jOwogCiBleHRlcm4g UEdETExJTVBPUlQgaW50IGNvbW1pdF90aW1lc3RhbXBfYnVmZmVyczsKIGV4dGVybiBQR0RM TElNUE9SVCBpbnQgbXVsdGl4YWN0X21lbWJlcl9idWZmZXJzOwotLSAKMi40OS4wCgo= --------------ZiLGGg5GsiuT6QTFDhUm0SgE Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-NUMA-interleaving-buffers.patch" Content-Disposition: attachment; filename="v2-0001-NUMA-interleaving-buffers.patch" Content-Transfer-Encoding: base64 RnJvbSAxZWFiNjI4NWRhYjFmZGM3OGQ4MGY2MDU0ZWMzMjc4NjI0YTY2MmYxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogVHVlLCA2IE1heSAyMDI1IDIxOjEyOjIxICswMjAwClN1YmplY3Q6IFtQQVRDSCB2 MiAxLzddIE5VTUE6IGludGVybGVhdmluZyBidWZmZXJzCgpFbnN1cmUgc2hhcmVkIGJ1ZmZl cnMgYXJlIGFsbG9jYXRlZCBmcm9tIGFsbCBOVU1BIG5vZGVzLCBpbiBhIGJhbGFuY2VkCndh eSwgaW5zdGVhZCBvZiBqdXN0IHVzaW5nIHRoZSBub2RlIHdoZXJlIFBvc3RncmVzIGluaXRp YWxseSBzdGFydHMsIG9yCndoZXJlIHRoZSBrZXJuZWwgZGVjaWRlcyB0byBtaWdyYXRlIHRo ZSBwYWdlLCBldGMuIFdpdGggcHJlLXdhcm1pbmcKcGVyZm9ybWVkIGJ5IGEgc2luZ2xlIGJh Y2tlbmQsIHRoaXMgY2FuIGVhc2lseSByZXN1bHQgaW4gc2V2ZXJlbHkKdW5iYWxhbmNlZCBt ZW1vcnkgZGlzdHJpYnV0aW9uICh3aXRoIG1vc3QgZnJvbSBhIHNpbmdsZSBOVU1BIG5vZGUp LgoKVGhlIGtlcm5lbCB3b3VsZCBldmVudHVhbGx5IG1vdmUgc29tZSBvZiB0aGUgbWVtb3J5 IHRvIG90aGVyIG5vZGVzCih0aGFua3MgdG8gem9uZV9yZWNsYWltKSwgYnV0IHRoYXQgdGVu ZHMgdG8gdGFrZSBhIGxvbmcgdGltZS4gU28gdGhpcwpwYXRjaCBpbXByb3ZlcyBwcmVkaWN0 YWJpbGl0eSwgcmVkdWNlcyB0aGUgdGltZSBuZWVkZWQgZm9yIHdhcm11cApkdXJpbmcgYmVu Y2htYXJraW5nLCBldGMuICBJdCdzIGxlc3MgZGVwZW5kZW50IG9uIHdoYXQgdGhlIENQVQpz Y2hlZHVsZXIgZG9lcywgZXRjLgoKRnVydGhlcm1vcmUsIHRoZSBidWZmZXJzIGFyZSBtYXBw ZWQgdG8gTlVNQSBub2RlcyBpbiBhIGRldGVybWluaXN0aWMKd2F5LCBzbyB0aGlzIGFsc28g YWxsb3dzIGZ1cnRoZXIgaW1wcm92ZW1lbnRzIGxpa2UgYmFja2VuZHMgdXNpbmcKYnVmZmVy cyBmcm9tIHRoZSBzYW1lIE5VTUEgbm9kZS4KClRoZSBlZmZlY3QgaXMgc2ltaWxhciB0bwoK ICAgICBudW1hY3RsIC0taW50ZXJsZWF2ZT1hbGwKCmJ1dCB0aGVyZSdzIGEgbnVtYmVyIG9m IGltcG9ydGFudCBkaWZmZXJlbmNlcy4KCkZpcnN0bHksIGl0J3MgYXBwbGllZCBvbmx5IHRv IHNoYXJlZCBidWZmZXJzIChhbmQgYWxzbyB0byBkZXNjcmlwdG9ycyksCm5vdCB0byB0aGUg d2hvbGUgc2hhcmVkIG1lbW9yeSBzZWdtZW50LiBJdCdzIG5vdCBjbGVhciB3ZSdkIHdhbnQg dG8gdXNlCmludGVybGVhdmluZyBmb3IgYWxsIHBhcnRzLCBzdG9yaW5nIGVudHJpZXMgd2l0 aCBkaWZmZXJlbnQgc2l6ZXMgYW5kCmxpZmUgY3ljbGVzIChlLmcuIFByb2NBcnJheSBtYXkg bmVlZCBkaWZmZXJlbnQgYXBwcm9hY2gpLgoKU2Vjb25kbHksIGl0IGNvbnNpZGVycyB0aGUg cGFnZSBhbmQgYmxvY2sgc2l6ZSwgYW5kIG1ha2VzIHN1cmUgbm90IHRvCnNwbGl0IGEgYnVm ZmVyIG9uIGRpZmZlcmVudCBOVU1BIG5vZGVzICh3aGljaCB3aXRoIHRoZSByZWd1bGFyCmlu dGVybGVhdmluZyBpcyBndWFyYW50ZWVkIHRvIGhhcHBlbiwgdW5sZXNzIHdoZW4gdXNpbmcg aHVnZSBwYWdlcykuIFRoZQpwYXRjaCBwZXJmb3JtcyAiZXhwbGljaXQiIGludGVybGVhdmlu Zywgc28gdGhhdCBidWZmZXJzIGFyZSBub3Qgc3BsaXQKbGlrZSB0aGlzLgoKVGhlIHBhdGNo IG1hcHMgYm90aCBidWZmZXJzIGFuZCBidWZmZXIgZGVzY3JpcHRvcnMsIHNvIHRoYXQgdGhl IGJ1ZmZlcgphbmQgaXQncyBidWZmZXIgZGVzY3JpcHRvciBlbmQgdXAgb24gdGhlIHNhbWUg TlVNQSBub2RlLgoKVGhlIG1hcHBpbmcgaGFwcGVucyBpbiBsYXJnZXIgY2h1bmtzIChzZWUg Y2hvb3NlX2NodW5rX2l0ZW1zKS4gVGhpcyBpcwpyZXF1aXJlZCB0byBoYW5kbGUgYnVmZmVy IGRlc2NyaXB0b3JzICh3aGljaCBhcmUgc21hbGxlciB0aGFuIGJ1ZmZlcnMpLAphbmQgaXQg c2hvdWxkIGFsc28gaGVscCB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBtYXBwaW5ncy4gTW9z dCBOVU1BCnN5c3RlbXMgd2lsbCB1c2UgMUdCIGNodW5rcywgdW5sZXNzIHVzaW5nIHZlcnkg c21hbGwgc2hhcmVkIGJ1ZmZlcnMuCgpOb3RlczoKCiogVGhlIGZlYXR1cmUgaXMgZW5hYmxl ZCBieSBudW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZSBHVUMgKGZhbHNlIGJ5IGRlZmF1bHQpCgoq IEl0J3Mgbm90IGNsZWFyIHdlIHdhbnQgdG8gZW5hYmxlIGludGVybGVhdmluZyBmb3IgYWxs IHNoYXJlZCBtZW1vcnkuCiAgV2UgcHJvYmFibHkgd2FudCB0aGF0IGZvciBzaGFyZWQgYnVm ZmVycywgYnV0IG1heWJlIG5vdCBmb3IgUHJvY0FycmF5CiAgb3IgZnJlZWxpc3RzLgoKKiBT aW1pbGFyIHF1ZXN0aW9ucyBhcmUgYWJvdXQgaHVnZSBwYWdlcyAtIGluIGdlbmVyYWwgaXQn cyBhIGdvb2QgaWRlYSwKICBidXQgbWF5YmUgaXQncyBub3QgcXVpdGUgZ29vZCBmb3IgUHJv Y0FycmF5LiBJdCdzIHNvbWV3aGF0ZSBzZXBhcmF0ZQogIGZyb20gTlVNQSwgYnV0IG5vdCBl bnRpcmVseSBiZWNhdXNlIE5VTUEgd29ya3Mgb24gcGFnZSBncmFudWxhcml0eS4KICBQR1BS T0MgZW50cmllcyBhcmUgfjhLQiwgc28gdG9vIGxhcmdlIGZvciBpbnRlcmxlYXZpbmcgd2l0 aCA0SyBwYWdlcywKICBhcyB3ZSBkb24ndCB3YW50IHRvIHNwbGl0IHRoZSBlbnRyeSB0byBt dWx0aXBsZSBub2Rlcy4gQnV0IGNvdWxkIGJlCiAgZG9uZSBleHBsaWNpdGx5LCBieSBzcGVj aWZ5aW5nIHdoaWNoIG5vZGUgdG8gdXNlIGZvciB0aGUgcGFnZXMuCgoqIFdlIGNvdWxkIHBh cnRpdGlvbiBQcm9jQXJyYXksIHdpdGggb25lIHBhcnRpdGlvbiBwZXIgTlVNQSBub2RlLCBh bmQKICB0aGVuIGF0IGNvbm5lY3Rpb24gdGltZSBwaWNrIGEgbm9kZSBmcm9tIHRoZSBzYW1l IG5vZGUuIFRoZSBwcm9jZXNzCiAgY291bGQgbWlncmF0ZSB0byBzb21lIG90aGVyIG5vZGUg bGF0ZXIsIGVzcGVjaWFsbHkgZm9yIGxvbmctbGl2ZWQKICBjb25uZWN0aW9ucywgYnV0IHRo ZXJlJ3Mgbm8gcGVyZmVjdCBzb2x1dGlvbiwgTWF5YmUgd2UgY291bGQgc2V0CiAgYWZmaW5p dHkgdG8gY29yZXMgZnJvbSB0aGUgc2FtZSBub2RlLCBvciBzb21ldGhpbmcgbGlrZSB0aGF0 PwotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMgfCAzODQgKysr KysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1 Zm1nci5jICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMgICAg ICB8ICAgMyArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYyAgIHwgIDEw ICsKIHNyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMgICAgICAgICAgICAgfCAgNjcgKystLS0K IHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAgICAgICB8ICAgMSArCiA3IGZpbGVzIGNoYW5n ZWQsIDQyNyBpbnNlcnRpb25zKCspLCA0MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZfaW5pdC5jIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmX2luaXQuYwppbmRleCBlZDFkYzQ4OGE0Mi4uMmFkMzQ2MjRjNDkg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zl9pbml0LmMKKysr IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmX2luaXQuYwpAQCAtMTQsOSArMTQs MTcgQEAKICAqLwogI2luY2x1ZGUgInBvc3RncmVzLmgiCiAKKyNpZmRlZiBVU0VfTElCTlVN QQorI2luY2x1ZGUgPG51bWEuaD4KKyNpbmNsdWRlIDxudW1haWYuaD4KKyNlbmRpZgorCisj aW5jbHVkZSAicG9ydC9wZ19udW1hLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9haW8uaCIKICNp bmNsdWRlICJzdG9yYWdlL2J1Zl9pbnRlcm5hbHMuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1 Zm1nci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvcGdfc2htZW0uaCIKKyNpbmNsdWRlICJzdG9y YWdlL3Byb2MuaCIKIAogQnVmZmVyRGVzY1BhZGRlZCAqQnVmZmVyRGVzY3JpcHRvcnM7CiBj aGFyCSAgICpCdWZmZXJCbG9ja3M7CkBAIC0yNSw2ICszMywxOSBAQCBXcml0ZWJhY2tDb250 ZXh0IEJhY2tlbmRXcml0ZWJhY2tDb250ZXh0OwogQ2twdFNvcnRJdGVtICpDa3B0QnVmZmVy SWRzOwogCiAKK3N0YXRpYyBTaXplIGdldF9tZW1vcnlfcGFnZV9zaXplKHZvaWQpOworc3Rh dGljIGludDY0IGNob29zZV9jaHVua19idWZmZXJzKGludCBOQnVmZmVycywgU2l6ZSBtZW1f cGFnZV9zaXplLCBpbnQgbnVtX25vZGVzKTsKK3N0YXRpYyB2b2lkIHBnX251bWFfaW50ZXJs ZWF2ZV9tZW1vcnkoY2hhciAqc3RhcnRwdHIsIGNoYXIgKmVuZHB0ciwKKwkJCQkJCQkJCSAg U2l6ZSBtZW1fcGFnZV9zaXplLCBTaXplIGNodW5rX3NpemUsCisJCQkJCQkJCQkgIGludCBu dW1fbm9kZXMpOworCisvKiBudW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQgb24gdGhlIHNh bWUgTlVNQSBub2RlICovCitzdGF0aWMgaW50NjQgbnVtYV9jaHVua19idWZmZXJzID0gLTE7 CisKKy8qIG51bWJlciBvZiBOVU1BIG5vZGVzIChhcyByZXR1cm5lZCBieSBudW1hX251bV9j b25maWd1cmVkX25vZGVzKSAqLworc3RhdGljIGludAludW1hX25vZGVzID0gLTE7CisKKwog LyoKICAqIERhdGEgU3RydWN0dXJlczoKICAqCQlidWZmZXJzIGxpdmUgaW4gYSBmcmVlbGlz dCBhbmQgYSBsb29rdXAgZGF0YSBzdHJ1Y3R1cmUuCkBAIC03MSwxOCArOTIsODAgQEAgQnVm ZmVyTWFuYWdlclNobWVtSW5pdCh2b2lkKQogCQkJCWZvdW5kRGVzY3MsCiAJCQkJZm91bmRJ T0NWLAogCQkJCWZvdW5kQnVmQ2twdDsKKwlTaXplCQltZW1fcGFnZV9zaXplOworCVNpemUJ CWJ1ZmZlcl9hbGlnbjsKKworCS8qCisJICogWFhYIEEgYml0IHdlaXJkLiBEbyB3ZSBuZWVk IHRvIHdvcnJ5IGFib3V0IHBvc3RtYXN0ZXI/IENvdWxkIHRoaXMgZXZlbgorCSAqIHJ1biBv dXRzaWRlIHBvc3RtYXN0ZXI/IEkgZG9uJ3QgdGhpbmsgc28uCisJICoKKwkgKiBYWFggQW5v dGhlciBpc3N1ZSBpcyB3ZSBtYXkgZ2V0IGRpZmZlcmVudCB2YWx1ZXMgdGhhbiB3aGVuIHNp emluZyB0aGUKKwkgKiB0aGUgbWVtb3J5LCBiZWNhdXNlIGF0IHRoYXQgcG9pbnQgd2UgZGlk bid0IGtub3cgaWYgd2UgZ2V0IGh1Z2UgcGFnZXMsCisJICogc28gd2UgYXNzdW1lZCB3ZSB3 aWxsLiBTaG91bGRuJ3QgY2F1c2UgY3Jhc2hlcywgYnV0IHdlIG1pZ2h0IGFsbG9jYXRlCisJ ICogc2hhcmVkIG1lbW9yeSBhbmQgdGhlbiBub3QgdXNlIHNvbWUgb2YgaXQgKGJlY2F1c2Ug b2YgdGhlIGFsaWdubWVudAorCSAqIHRoYXQgd2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCkuIE5v dCBzdXJlIGFib3V0IGJldHRlciB3YXksIGdvb2QgZm9yIG5vdy4KKwkgKi8KKwlpZiAoSXNV bmRlclBvc3RtYXN0ZXIpCisJCW1lbV9wYWdlX3NpemUgPSBwZ19nZXRfc2htZW1fcGFnZXNp emUoKTsKKwllbHNlCisJCW1lbV9wYWdlX3NpemUgPSBnZXRfbWVtb3J5X3BhZ2Vfc2l6ZSgp OworCisJLyoKKwkgKiBXaXRoIE5VTUEgd2UgbmVlZCB0byBlbnN1cmUgdGhlIGJ1ZmZlcnMg YXJlIHByb3Blcmx5IGFsaWduZWQgbm90IGp1c3QKKwkgKiB0byBQR19JT19BTElHTl9TSVpF LCBidXQgYWxzbyB0byBtZW1vcnkgcGFnZSBzaXplLCBiZWNhdXNlIE5VTUEgd29ya3MKKwkg KiBvbiBwYWdlIGdyYW51bGFyaXR5LCBhbmQgd2UgZG9uJ3Qgd2FudCBhIGJ1ZmZlciB0byBn ZXQgc3BsaXQgdG8KKwkgKiBtdWx0aXBsZSBub2RlcyAod2hlbiB1c2luZyBtdWx0aXBsZSBt ZW1vcnkgcGFnZXMpLgorCSAqCisJICogV2UgYWxzbyBkb24ndCB3YW50IHRvIGludGVyZmVy ZSB3aXRoIG90aGVyIHBhcnRzIG9mIHNoYXJlZCBtZW1vcnksCisJICogd2hpY2ggY291bGQg ZWFzaWx5IGhhcHBlbiB3aXRoIGh1Z2UgcGFnZXMgKGUuZy4gd2l0aCBkYXRhIHN0b3JlZCBi ZWZvcmUKKwkgKiBidWZmZXJzKS4KKwkgKgorCSAqIFdlIGRvIHRoaXMgYnkgYWxpZ25pbmcg dG8gdGhlIGxhcmdlciBvZiB0aGUgdHdvIHZhbHVlcyAod2Uga25vdyBib3RoCisJICogYXJl IHBvd2VyLW9mLXR3byB2YWx1ZXMsIHNvIHRoZSBsYXJnZXIgdmFsdWUgaXMgYXV0b21hdGlj YWxseSBhCisJICogbXVsdGlwbGUgb2YgdGhlIGxlc3NlciBvbmUpLgorCSAqCisJICogWFhY IE1heWJlIHRoZXJlJ3MgYSB3YXkgdG8gdXNlIGxlc3MgYWxpZ25tZW50PworCSAqCisJICog WFhYIE1heWJlIHdpdGggKG1lbV9wYWdlX3NpemUgPiBQR19JT19BTElHTl9TSVpFKSwgd2Ug ZG9uJ3QgbmVlZCB0bworCSAqIGFsaWduIHRvIG1lbV9wYWdlX3NpemU/IEVzcGVjaWFsbHkg Zm9yIHZlcnkgbGFyZ2UgaHVnZSBwYWdlcyAoZS5nLiAxR0IpCisJICogdGhhdCBkb2Vzbid0 IHNlZW0gcXVpdGUgd29ydGggaXQuIE1heWJlIHdlIHNob3VsZCBzaW1wbHkgYWxpZ24gdG8K KwkgKiBCTENLU1osIHNvIHRoYXQgYnVmZmVycyBkb24ndCBnZXQgc3BsaXQ/IFN0aWxsLCB3 ZSBtaWdodCBpbnRlcmZlcmUgd2l0aAorCSAqIG90aGVyIHN0dWZmIHN0b3JlZCBpbiBzaGFy ZWQgbWVtb3J5IHRoYXQgd2Ugd2FudCB0byBhbGxvY2F0ZSBvbiBhCisJICogcGFydGljdWxh ciBOVU1BIG5vZGUgKGUuZy4gUHJvY0FycmF5KS4KKwkgKgorCSAqIFhYWCBNYXliZSB3aXRo ICJ0b28gbGFyZ2UiIGh1Z2UgcGFnZXMgd2Ugc2hvdWxkIGp1c3Qgbm90IGRvIHRoaXMsIG9y CisJICogbWF5YmUgZG8gdGhpcyBvbmx5IGZvciBzdWZmaWNpZW50bHkgbGFyZ2UgYXJlYXMg KGUuZy4gc2hhcmVkIGJ1ZmZlcnMsCisJICogYnV0IG5vdCBQcm9jQXJyYXkpLgorCSAqLwor CWJ1ZmZlcl9hbGlnbiA9IE1heChtZW1fcGFnZV9zaXplLCBQR19JT19BTElHTl9TSVpFKTsK KworCS8qIG9uZSBwYWdlIGlzIGEgbXVsdGlwbGUgb2YgdGhlIG90aGVyICovCisJQXNzZXJ0 KCgobWVtX3BhZ2Vfc2l6ZSAlIFBHX0lPX0FMSUdOX1NJWkUpID09IDApIHx8CisJCSAgICgo UEdfSU9fQUxJR05fU0laRSAlIG1lbV9wYWdlX3NpemUpID09IDApKTsKIAotCS8qIEFsaWdu IGRlc2NyaXB0b3JzIHRvIGEgY2FjaGVsaW5lIGJvdW5kYXJ5LiAqLworCS8qCisJICogQWxp Z24gZGVzY3JpcHRvcnMgdG8gYSBjYWNoZWxpbmUgYm91bmRhcnksIGFuZCBtZW1vcnkgcGFn ZS4KKwkgKgorCSAqIFdlIHdhbnQgdG8gZGlzdHJpYnV0ZSBib3RoIHRvIE5VTUEgbm9kZXMs IHNvIHRoYXQgZWFjaCBidWZmZXIgYW5kIGl0J3MKKwkgKiBkZXNjcmlwdG9yIGFyZSBvbiB0 aGUgc2FtZSBOVU1BIG5vZGUuIFNvIHdlIGFsaWduIGJvdGggdGhlIHNhbWUgd2F5LgorCSAq CisJICogWFhYIFRoZSBtZW1vcnkgcGFnZSBpcyBhbHdheXMgbGFyZ2VyIHRoYW4gY2FjaGVs aW5lLCBzbyB0aGUgY2FjaGVsaW5lCisJICogcmVmZXJlbmNlIGlzIGEgYml0IHVubmVjZXNz YXJ5LgorCSAqCisJICogWFhYIEluIHByaW5jaXBsZSB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhp cyB3aXRoIE5VTUEsIG90aGVyd2lzZSB3ZSBjb3VsZAorCSAqIHN0aWxsIGFsaWduIGp1c3Qg dG8gY2FjaGVsaW5lLCBhcyBiZWZvcmUuCisJICovCiAJQnVmZmVyRGVzY3JpcHRvcnMgPSAo QnVmZmVyRGVzY1BhZGRlZCAqKQotCQlTaG1lbUluaXRTdHJ1Y3QoIkJ1ZmZlciBEZXNjcmlw dG9ycyIsCi0JCQkJCQlOQnVmZmVycyAqIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSwKLQkJ CQkJCSZmb3VuZERlc2NzKTsKKwkJVFlQRUFMSUdOKGJ1ZmZlcl9hbGlnbiwKKwkJCQkgIFNo bWVtSW5pdFN0cnVjdCgiQnVmZmVyIERlc2NyaXB0b3JzIiwKKwkJCQkJCQkJICBOQnVmZmVy cyAqIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSArIGJ1ZmZlcl9hbGlnbiwKKwkJCQkJCQkJ ICAmZm91bmREZXNjcykpOwogCiAJLyogQWxpZ24gYnVmZmVyIHBvb2wgb24gSU8gcGFnZSBz aXplIGJvdW5kYXJ5LiAqLwogCUJ1ZmZlckJsb2NrcyA9IChjaGFyICopCi0JCVRZUEVBTElH TihQR19JT19BTElHTl9TSVpFLAorCQlUWVBFQUxJR04oYnVmZmVyX2FsaWduLAogCQkJCSAg U2htZW1Jbml0U3RydWN0KCJCdWZmZXIgQmxvY2tzIiwKLQkJCQkJCQkJICBOQnVmZmVycyAq IChTaXplKSBCTENLU1ogKyBQR19JT19BTElHTl9TSVpFLAorCQkJCQkJCQkgIE5CdWZmZXJz ICogKFNpemUpIEJMQ0tTWiArIGJ1ZmZlcl9hbGlnbiwKIAkJCQkJCQkJICAmZm91bmRCdWZz KSk7CiAKIAkvKiBBbGlnbiBjb25kaXRpb24gdmFyaWFibGVzIHRvIGNhY2hlbGluZSBib3Vu ZGFyeS4gKi8KQEAgLTExMiw2ICsxOTUsNjMgQEAgQnVmZmVyTWFuYWdlclNobWVtSW5pdCh2 b2lkKQogCXsKIAkJaW50CQkJaTsKIAorCQkvKgorCQkgKiBBc3NpZ24gY2h1bmtzIG9mIGJ1 ZmZlcnMgYW5kIGJ1ZmZlciBkZXNjcmlwdG9ycyB0byB0aGUgYXZhaWxhYmxlCisJCSAqIE5V TUEgbm9kZXMuIFdlIGNhbid0IHVzZSB0aGUgcmVndWxhciBpbnRlcmxlYXZpbmcsIGJlY2F1 c2Ugd2l0aAorCQkgKiByZWd1bGFyIG1lbW9yeSBwYWdlcyAoc21hbGxlciB0aGFuIEJMQ0tT Wikgd2UnZCBzcGxpdCBhbGwgYnVmZmVycworCQkgKiB0byBtdWx0aXBsZSBOVU1BIG5vZGVz LiBBbmQgd2UgZG9uJ3Qgd2FudCB0aGF0LgorCQkgKgorCQkgKiBCdXQgZXZlbiB3aXRoIGh1 Z2UgcGFnZXMgaXQgc2VlbXMgbGlrZSBhIGdvb2QgaWRlYSB0byBub3QgaGF2ZQorCQkgKiBt YXBwaW5nIGZvciBlYWNoIHBhZ2UuCisJCSAqCisJCSAqIFNvIHdlIGFsd2F5cyBhc3NpZ24g YSBsYXJnZXIgY29udGlndW91cyBjaHVuayBvZiBidWZmZXJzIHRvIHRoZQorCQkgKiBzYW1l IE5VTUEgbm9kZSwgYXMgY2FsY3VsYXRlZCBieSBjaG9vc2VfY2h1bmtfYnVmZmVycygpLiBX ZSB0cnkgdG8KKwkJICoga2VlcCB0aGUgY2h1bmtzIGxhcmdlIGVub3VnaCB0byB3b3JrIGJv dGggZm9yIGJ1ZmZlcnMgYW5kIGJ1ZmZlcgorCQkgKiBkZXNjcmlwdG9ycywgYnV0IG5vdCB0 b28gbGFyZ2UuIFNlZSB0aGUgY29tbWVudHMgYXQKKwkJICogY2hvb3NlX2NodW5rX2J1ZmZl cnMoKSBmb3IgZGV0YWlscy4KKwkJICoKKwkJICogVGhhbmtzIHRvIHRoZSBlYXJsaWVyIGFs aWdubWVudCAodG8gbWVtb3J5IHBhZ2UgZXRjLiksIHdlIGtub3cgdGhlCisJCSAqIGJ1ZmZl cnMgd29uJ3QgZ2V0IHNwbGl0LCBldGMuCisJCSAqCisJCSAqIFRoaXMgYWxzbyBtYWtlcyBp dCBlYXNpZXIgLyBzdHJhaWdodGZvcndhcmQgdG8gY2FsY3VsYXRlIHdoaWNoIE5VTUEKKwkJ ICogbm9kZSBhIGJ1ZmZlciBiZWxvbmdzIHRvIChpdCdzIGEgbWF0dGVyIG9mIGRpdmlkZSAr IG1vZCkuIFNlZQorCQkgKiBCdWZmZXJHZXROb2RlKCkuCisJCSAqLworCQlpZiAobnVtYV9i dWZmZXJzX2ludGVybGVhdmUpCisJCXsKKwkJCWNoYXIJICAgKnN0YXJ0cHRyLAorCQkJCQkg ICAqZW5kcHRyOworCQkJU2l6ZQkJY2h1bmtfc2l6ZTsKKworCQkJbnVtYV9ub2RlcyA9IG51 bWFfbnVtX2NvbmZpZ3VyZWRfbm9kZXMoKTsKKworCQkJbnVtYV9jaHVua19idWZmZXJzCisJ CQkJPSBjaG9vc2VfY2h1bmtfYnVmZmVycyhOQnVmZmVycywgbWVtX3BhZ2Vfc2l6ZSwgbnVt YV9ub2Rlcyk7CisKKwkJCWVsb2coTE9HLCAiQnVmZmVyTWFuYWdlclNobWVtSW5pdCBudW1f bm9kZXMgJWQgY2h1bmtfYnVmZmVycyAlbGQiLAorCQkJCSBudW1hX25vZGVzLCBudW1hX2No dW5rX2J1ZmZlcnMpOworCisJCQkvKiBmaXJzdCBtYXAgYnVmZmVycyAqLworCQkJc3RhcnRw dHIgPSBCdWZmZXJCbG9ja3M7CisJCQllbmRwdHIgPSBzdGFydHB0ciArICgoU2l6ZSkgTkJ1 ZmZlcnMpICogQkxDS1NaOworCQkJY2h1bmtfc2l6ZSA9IChudW1hX2NodW5rX2J1ZmZlcnMg KiBCTENLU1opOworCisJCQlwZ19udW1hX2ludGVybGVhdmVfbWVtb3J5KHN0YXJ0cHRyLCBl bmRwdHIsCisJCQkJCQkJCQkgIG1lbV9wYWdlX3NpemUsCisJCQkJCQkJCQkgIGNodW5rX3Np emUsCisJCQkJCQkJCQkgIG51bWFfbm9kZXMpOworCisJCQkvKiBub3cgZG8gdGhlIHNhbWUg Zm9yIGJ1ZmZlciBkZXNjcmlwdG9ycyAqLworCQkJc3RhcnRwdHIgPSAoY2hhciAqKSBCdWZm ZXJEZXNjcmlwdG9yczsKKwkJCWVuZHB0ciA9IHN0YXJ0cHRyICsgKChTaXplKSBOQnVmZmVy cykgKiBzaXplb2YoQnVmZmVyRGVzY1BhZGRlZCk7CisJCQljaHVua19zaXplID0gKG51bWFf Y2h1bmtfYnVmZmVycyAqIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSk7CisKKwkJCXBnX251 bWFfaW50ZXJsZWF2ZV9tZW1vcnkoc3RhcnRwdHIsIGVuZHB0ciwKKwkJCQkJCQkJCSAgbWVt X3BhZ2Vfc2l6ZSwKKwkJCQkJCQkJCSAgY2h1bmtfc2l6ZSwKKwkJCQkJCQkJCSAgbnVtYV9u b2Rlcyk7CisJCX0KKwogCQkvKgogCQkgKiBJbml0aWFsaXplIGFsbCB0aGUgYnVmZmVyIGhl YWRlcnMuCiAJCSAqLwpAQCAtMTQ0LDYgKzI4NCwxMSBAQCBCdWZmZXJNYW5hZ2VyU2htZW1J bml0KHZvaWQpCiAJCUdldEJ1ZmZlckRlc2NyaXB0b3IoTkJ1ZmZlcnMgLSAxKS0+ZnJlZU5l eHQgPSBGUkVFTkVYVF9FTkRfT0ZfTElTVDsKIAl9CiAKKwkvKgorCSAqIEFzIHRoaXMgcG9p bnQgd2UgaGF2ZSBhbGwgdGhlIGJ1ZmZlcnMgaW4gYSBzaW5nbGUgbG9uZyBmcmVlbGlzdC4g V2l0aAorCSAqIGZyZWVsaXN0IHBhcnRpdGlvbmluZyB3ZSByZWJ1aWxkIHRoZW0gaW4gU3Ry YXRlZ3lJbml0aWFsaXplLgorCSAqLworCiAJLyogSW5pdCBvdGhlciBzaGFyZWQgYnVmZmVy LW1hbmFnZW1lbnQgc3R1ZmYgKi8KIAlTdHJhdGVneUluaXRpYWxpemUoIWZvdW5kRGVzY3Mp OwogCkBAIC0xNTIsMjQgKzI5Nyw3MiBAQCBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQp CiAJCQkJCQkgJmJhY2tlbmRfZmx1c2hfYWZ0ZXIpOwogfQogCisvKgorICogRGV0ZXJtaW5l IHRoZSBzaXplIG9mIG1lbW9yeSBwYWdlLgorICoKKyAqIFhYWCBUaGlzIGlzIGEgYml0IHRy aWNreSwgYmVjYXVzZSB0aGUgcmVzdWx0IGRlcGVuZHMgYXQgd2hpY2ggcG9pbnQgd2UgY2Fs bAorICogdGhpcy4gQmVmb3JlIHRoZSBhbGxvY2F0aW9uIHdlIGRvbid0IGtub3cgaWYgd2Ug c3VjY2VlZCBpbiBhbGxvY2F0aW5nIGh1Z2UKKyAqIHBhZ2VzIC0gYnV0IHdlIGhhdmUgdG8g c2l6ZSBldmVyeXRoaW5nIGZvciB0aGUgY2hhbmNlIHRoYXQgd2Ugd2lsbC4gQW5kIHRoZW4K KyAqIGlmIHRoZSBodWdlIHBhZ2VzIGZhaWwgKHdpdGggJ2h1Z2VfcGFnZXM9dHJ5JyksIHdl J2xsIHVzZSB0aGUgcmVndWxhciBtZW1vcnkKKyAqIHBhZ2VzLiBCdXQgYXQgdGhhdCBwb2lu dCB3ZSBjYW4ndCBhZGp1c3QgdGhlIHNpemluZy4KKyAqCisgKiBYWFggTWF5YmUgd2l0aCBo dWdlX3BhZ2VzPXRyeSB3ZSBzaG91bGQgZG8gdGhlIHNpemluZyB0d2ljZSAtIGZpcnN0IHdp dGgKKyAqIGh1Z2UgcGFnZXMsIGFuZCBpZiB0aGF0IGZhaWxzLCB0aGVuIHdpdGhvdXQgdGhl bS4gQnV0IG5vdCBmb3IgdGhpcyBwYXRjaC4KKyAqIFVwIHRvIHRoaXMgcG9pbnQgdGhlcmUg d2FzIG5vIHN1Y2ggZGVwZW5kZW5jeSBvbiBodWdlIHBhZ2VzLgorICovCitzdGF0aWMgU2l6 ZQorZ2V0X21lbW9yeV9wYWdlX3NpemUodm9pZCkKK3sKKwlTaXplCQlvc19wYWdlX3NpemU7 CisJU2l6ZQkJaHVnZV9wYWdlX3NpemU7CisKKyNpZmRlZiBXSU4zMgorCVNZU1RFTV9JTkZP IHN5c2luZm87CisKKwlHZXRTeXN0ZW1JbmZvKCZzeXNpbmZvKTsKKwlvc19wYWdlX3NpemUg PSBzeXNpbmZvLmR3UGFnZVNpemU7CisjZWxzZQorCW9zX3BhZ2Vfc2l6ZSA9IHN5c2NvbmYo X1NDX1BBR0VTSVpFKTsKKyNlbmRpZgorCisJLyogYXNzdW1lIGh1Z2UgcGFnZXMgZ2V0IHVz ZWQsIHVubGVzcyBIVUdFX1BBR0VTX09GRiAqLworCWlmIChodWdlX3BhZ2VzX3N0YXR1cyAh PSBIVUdFX1BBR0VTX09GRikKKwkJR2V0SHVnZVBhZ2VTaXplKCZodWdlX3BhZ2Vfc2l6ZSwg TlVMTCk7CisJZWxzZQorCQlodWdlX3BhZ2Vfc2l6ZSA9IDA7CisKKwlyZXR1cm4gTWF4KG9z X3BhZ2Vfc2l6ZSwgaHVnZV9wYWdlX3NpemUpOworfQorCiAvKgogICogQnVmZmVyTWFuYWdl clNobWVtU2l6ZQogICoKICAqIGNvbXB1dGUgdGhlIHNpemUgb2Ygc2hhcmVkIG1lbW9yeSBm b3IgdGhlIGJ1ZmZlciBwb29sIGluY2x1ZGluZwogICogZGF0YSBwYWdlcywgYnVmZmVyIGRl c2NyaXB0b3JzLCBoYXNoIHRhYmxlcywgZXRjLgorICoKKyAqIFhYWCBDYWxsZWQgYmVmb3Jl IGFsbG9jYXRpb24sIHNvIHdlIGRvbid0IGtub3cgaWYgaHVnZSBwYWdlcyBnZXQgdXNlZCB5 ZXQuCisgKiBTbyB3ZSBuZWVkIHRvIGFzc3VtZSBodWdlIHBhZ2VzIGdldCB1c2VkLCBhbmQg dXNlIGdldF9tZW1vcnlfcGFnZV9zaXplKCkKKyAqIHRvIGNhbGN1bGF0ZSB0aGUgbGFyZ2Vz dCBwb3NzaWJsZSBtZW1vcnkgcGFnZS4KICAqLwogU2l6ZQogQnVmZmVyTWFuYWdlclNobWVt U2l6ZSh2b2lkKQogewogCVNpemUJCXNpemUgPSAwOworCVNpemUJCW1lbV9wYWdlX3NpemU7 CisKKwkvKiBYWFggd2h5IGRvZXMgSXNVbmRlclBvc3RtYXN0ZXIgbWF0dGVyPyAqLworCWlm IChJc1VuZGVyUG9zdG1hc3RlcikKKwkJbWVtX3BhZ2Vfc2l6ZSA9IHBnX2dldF9zaG1lbV9w YWdlc2l6ZSgpOworCWVsc2UKKwkJbWVtX3BhZ2Vfc2l6ZSA9IGdldF9tZW1vcnlfcGFnZV9z aXplKCk7CiAKIAkvKiBzaXplIG9mIGJ1ZmZlciBkZXNjcmlwdG9ycyAqLwogCXNpemUgPSBh ZGRfc2l6ZShzaXplLCBtdWxfc2l6ZShOQnVmZmVycywgc2l6ZW9mKEJ1ZmZlckRlc2NQYWRk ZWQpKSk7CiAJLyogdG8gYWxsb3cgYWxpZ25pbmcgYnVmZmVyIGRlc2NyaXB0b3JzICovCi0J c2l6ZSA9IGFkZF9zaXplKHNpemUsIFBHX0NBQ0hFX0xJTkVfU0laRSk7CisJc2l6ZSA9IGFk ZF9zaXplKHNpemUsIE1heChtZW1fcGFnZV9zaXplLCBQR19JT19BTElHTl9TSVpFKSk7CiAK IAkvKiBzaXplIG9mIGRhdGEgcGFnZXMsIHBsdXMgYWxpZ25tZW50IHBhZGRpbmcgKi8KLQlz aXplID0gYWRkX3NpemUoc2l6ZSwgUEdfSU9fQUxJR05fU0laRSk7CisJc2l6ZSA9IGFkZF9z aXplKHNpemUsIE1heChtZW1fcGFnZV9zaXplLCBQR19JT19BTElHTl9TSVpFKSk7CiAJc2l6 ZSA9IGFkZF9zaXplKHNpemUsIG11bF9zaXplKE5CdWZmZXJzLCBCTENLU1opKTsKIAogCS8q IHNpemUgb2Ygc3R1ZmYgY29udHJvbGxlZCBieSBmcmVlbGlzdC5jICovCkBAIC0xODYsMyAr Mzc5LDE3OCBAQCBCdWZmZXJNYW5hZ2VyU2htZW1TaXplKHZvaWQpCiAKIAlyZXR1cm4gc2l6 ZTsKIH0KKworLyoKKyAqIGNob29zZV9jaHVua19idWZmZXJzCisgKgkJY2hvb3NlIHRoZSBu dW1iZXIgb2YgYnVmZmVycyBhbGxvY2F0ZWQgdG8gYSBOVU1BIG5vZGUgYXQgb25jZQorICoK KyAqIFdlIGRvbid0IG1hcCBzaGFyZWQgYnVmZmVycyB0byBOVU1BIG5vZGVzIG9uZSBieSBv bmUsIGJ1dCBpbiBsYXJnZXIgY2h1bmtzLgorICogVGhpcyBpcyBib3RoIGZvciBlZmZpY2ll bmN5IHJlYXNvbnMgKGZld2VyIG1hcHBpbmdzKSwgYW5kIGFsc28gYmVjYXVzZSB3ZQorICog d2FudCB0byBtYXAgYnVmZmVyIGRlc2NyaXB0b3JzIHRvbyAtIGFuZCBkZXNjcmlwdG9ycyBh cmUgbXVjaCBzbWFsbGVyLiBTbworICogd2UgcGljayBhIG51bWJlciB0aGF0J3MgaGlnaCBl bm91Z2ggZm9yIGRlc2NyaXB0b3JzIHRvIHVzZSB3aG9sZSBwYWdlcy4KKyAqCisgKiBXZSBh bHNvIHdhbnQgdG8ga2VlcCBidWZmZXJzIHNvbWVob3cgZXZlbmx5IGRpc3RyaWJ1dGVkIG9u IG5vZGVzLCB3aXRoCisgKiBhYm91dCBOQnVmZmVycy9ub2RlcyBwZXIgbm9kZS4gU28gd2Ug ZG9uJ3QgdXNlIGNodW5rcyBsYXJnZXIgdGhhbiB0aGlzLAorICogdG8ga2VlcCBpdCBhcyBm YWlyIGFzIHBvc3NpYmxlICh0aGUgY2h1bmsgc2l6ZSBpcyBhIHBvc3NpYmxlIGRpZmZlcmVu Y2UKKyAqIGJldHdlZW4gbWVtb3J5IGFsbG9jYXRlZCB0byBkaWZmZXJlbnQgTlVNQSBub2Rl cykuCisgKgorICogSXQncyBwb3NzaWJsZSBzaGFyZWQgYnVmZmVycyBhcmUgc28gc21hbGwg dGhpcyBpcyBub3QgcG9zc2libGUgKGkuZS4KKyAqIGl0J3MgbGVzcyB0aGFuIGNodW5rX3Np emUpLiBCdXQgc2Vuc2libGUgTlVNQSBzeXN0ZW1zIHdpbGwgdXNlIGEgbG90CisgKiBvZiBt ZW1vcnksIHNvIHRoaXMgaXMgdW5saWtlbHkuCisgKgorICogV2Ugc2ltcGx5IHByaW50IGEg d2FybmluZyBhYm91dCB0aGUgbWlzYmFsYW5jZSwgYW5kIHRoYXQncyBpdC4KKyAqCisgKiBY WFggSXQnZCBiZSBnb29kIHRvIGVuc3VyZSB0aGUgY2h1bmsgc2l6ZSBpcyBhIHBvd2VyLW9m LTIsIGJlY2F1c2UgdGhlbgorICogd2UgY291bGQgY2FsY3VsYXRlIHRoZSBOVU1BIG5vZGUg c2ltcGx5IGJ5IHNoaWZ0L21vZHVsbywgd2hpbGUgbm93IHdlCisgKiBoYXZlIHRvIGRvIGEg ZGl2aXNpb24uIEJ1dCB3ZSBkb24ndCBrbm93IGhvdyBtYW55IGJ1ZmZlcnMgYW5kIGJ1ZmZl cgorICogZGVzY3JpcHRvcnMgZml0cyBpbnRvIGEgbWVtb3J5IHBhZ2UuIEl0IG1heSBub3Qg YmUgYSBwb3dlci1vZi0yLgorICovCitzdGF0aWMgaW50NjQKK2Nob29zZV9jaHVua19idWZm ZXJzKGludCBOQnVmZmVycywgU2l6ZSBtZW1fcGFnZV9zaXplLCBpbnQgbnVtX25vZGVzKQor eworCWludDY0CQludW1faXRlbXM7CisJaW50NjQJCW1heF9pdGVtczsKKworCS8qIG1ha2Ug c3VyZSB0aGUgY2h1bmtzIHdpbGwgYWxpZ24gbmljZWx5ICovCisJQXNzZXJ0KEJMQ0tTWiAl IHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSA9PSAwKTsKKwlBc3NlcnQobWVtX3BhZ2Vfc2l6 ZSAlIHNpemVvZihCdWZmZXJEZXNjUGFkZGVkKSA9PSAwKTsKKwlBc3NlcnQoKChCTENLU1og JSBtZW1fcGFnZV9zaXplKSA9PSAwKSB8fCAoKG1lbV9wYWdlX3NpemUgJSBCTENLU1opID09 IDApKTsKKworCS8qCisJICogVGhlIG1pbmltdW0gbnVtYmVyIG9mIGl0ZW1zIHRvIGZpbGwg YSBtZW1vcnkgcGFnZSB3aXRoIGRlc2NyaXB0b3JzIGFuZAorCSAqIGJsb2Nrcy4gVGhlIE5V TUEgYWxsb2NhdGVzIG1lbW9yeSBpbiBwYWdlcywgYW5kIHdlIG5lZWQgdG8gZG8gdGhhdCBm b3IKKwkgKiBib3RoIGJ1ZmZlcnMgYW5kIGRlc2NyaXB0b3JzLgorCSAqCisJICogSW4gcHJh Y3RpY2UgdGhlIEJMQ0tTWiBkb2Vzbid0IHJlYWxseSBtYXR0ZXIsIGJlY2F1c2UgaXQncyBt dWNoIGxhcmdlcgorCSAqIHRoYW4gQnVmZmVyRGVzY1BhZGRlZCwgc28gdGhlIHJlc3VsdCBp cyBkZXRlcm1pbmVkIGJ1ZmZlciBkZXNjcmlwdG9ycy4KKwkgKiBCdXQgaXQncyBjbGVhcmVy IHRoaXMgd2F5LgorCSAqLworCW51bV9pdGVtcyA9IE1heChtZW1fcGFnZV9zaXplIC8gc2l6 ZW9mKEJ1ZmZlckRlc2NQYWRkZWQpLAorCQkJCQltZW1fcGFnZV9zaXplIC8gQkxDS1NaKTsK KworCS8qCisJICogV2Ugc2hvdWxkbid0IHVzZSBjaHVua3MgbGFyZ2VyIHRoYW4gTkJ1ZmZl cnMvbnVtX25vZGVzLCBiZWNhdXNlIHdpdGgKKwkgKiBsYXJnZXIgY2h1bmtzIHRoZSBsYXN0 IE5VTUEgbm9kZSB3b3VsZCBlbmQgdXAgd2l0aCBtdWNoIGxlc3MgbWVtb3J5IChvcgorCSAq IG5vIG1lbW9yeSBhdCBhbGwpLgorCSAqLworCW1heF9pdGVtcyA9IChOQnVmZmVycyAvIG51 bV9ub2Rlcyk7CisKKwkvKgorCSAqIERpZCB3ZSBhbHJlYWR5IGV4Y2VlZCB0aGUgbWF4aW11 bSBkZXNpcmFibGUgY2h1bmsgc2l6ZT8gVGhhdCBpcywgd2lsbAorCSAqIHRoZSBsYXN0IG5v ZGUgZ2V0IGxlc3MgdGhhbiBvbmUgd2hvbGUgY2h1bmsgKG9yIG5vIG1lbW9yeSBhdCBhbGwp PworCSAqLworCWlmIChudW1faXRlbXMgPiBtYXhfaXRlbXMpCisJCWVsb2coV0FSTklORywg ImNob29zZV9jaHVua19idWZmZXJzOiBjaHVuayBpdGVtcyBleGNlZWRzIG1heCAoJWxkID4g JWxkKSIsCisJCQkgbnVtX2l0ZW1zLCBtYXhfaXRlbXMpOworCisJLyogZ3JvdyB0aGUgY2h1 bmsgc2l6ZSB1bnRpbCB3ZSBoaXQgdGhlIG1heCBsaW1pdC4gKi8KKwl3aGlsZSAoMiAqIG51 bV9pdGVtcyA8PSBtYXhfaXRlbXMpCisJCW51bV9pdGVtcyAqPSAyOworCisJLyoKKwkgKiBY WFggSXQncyBub3QgZGlmZmljdWx0IHRvIGNvbnN0cnVjdCBjYXNlcyB3aGVyZSB3ZSBlbmQg dXAgd2l0aCBub3QKKwkgKiBxdWl0ZSBiYWxhbmNlZCBkaXN0cmlidXRpb24uIEZvciBleGFt cGxlLCB3aXRoIHNoYXJlZF9idWZmZXJzPTEwR0IgYW5kCisJICogNCBOVU1BIG5vZGVzLCB3 ZSBlbmQgdXAgd2l0aCAyR0IgY2h1bmtzLCB3aGljaCBtZWFucyB0aGUgZmlyc3Qgbm9kZQor CSAqIGdldHMgNEdCLCBhbmQgdGhlIHRocmVlIG90aGVyIG5vZGVzIGdldCAyR0IgZWFjaC4K KwkgKgorCSAqIFdlIGNvdWxkIGJlIHNtYXJ0ZXIsIGFuZCB0cnkgdG8gZ2V0IG1vcmUgYmFs YW5jZWQgZGlzdHJpYnV0aW9uLiBXZQorCSAqIGNvdWxkIHNpbXBseSByZWR1Y2UgbWF4X2l0 ZW1zIGUuZy4gdG8KKwkgKgorCSAqIG1heF9pdGVtcyA9IChOQnVmZmVycyAvIG51bV9ub2Rl cykgLyA0OworCSAqCisJICogaW4gd2hpY2ggY2FzZXMgd2UnZCBlbmQgdXAgd2l0aCA1MTJN QiBjaHVua3MsIGFuZCBlYWNoIG5vZGVzIHdvdWxkIGdldAorCSAqIHRoZSBzYW1lIDIuNUdC IGNodW5rLiBJdCBtYXkgbm90IGFsd2F5cyB3b3JrIG91dCB0aGlzIG5pY2VseSwgYnV0IGl0 J3MKKwkgKiBiZXR0ZXIgdGhhbiB3aXRoIChOQnVmZmVycyAvIG51bV9ub2RlcykuCisJICoK KwkgKiBBbHRlcm5hdGl2ZWx5LCB3ZSBjb3VsZCAiYmFja3RyYWNrIiAtIHRyeSB3aXRoIHRo ZSBsYXJnZSBtYXhfaXRlbXMsCisJICogY2hlY2sgaG93IGJhbGFuY2VkIGl0IGlzLCBhbmQg aWYgaXQncyB0b28gaW1iYWxhbmNlZCwgdHJ5IHdpdGggYQorCSAqIHNtYWxsZXIgb25lLgor CSAqCisJICogV2UgaG93ZXZlciB3YW50IGEgc2ltcGxlIHNjaGVtZS4KKwkgKi8KKworCXJl dHVybiBudW1faXRlbXM7Cit9CisKKy8qCisgKiBDYWxjdWxhdGUgdGhlIE5VTUEgbm9kZSBm b3IgYSBnaXZlbiBidWZmZXIuCisgKi8KK2ludAorQnVmZmVyR2V0Tm9kZShCdWZmZXIgYnVm ZmVyKQoreworCS8qIG5vdCBOVU1BIGludGVybGVhdmluZyAqLworCWlmIChudW1hX2NodW5r X2J1ZmZlcnMgPT0gLTEpCisJCXJldHVybiAtMTsKKworCXJldHVybiAoYnVmZmVyIC8gbnVt YV9jaHVua19idWZmZXJzKSAlIG51bWFfbm9kZXM7Cit9CisKKy8qCisgKiBwZ19udW1hX2lu dGVybGVhdmVfbWVtb3J5CisgKgkJbW92ZSBtZW1vcnkgdG8gZGlmZmVyZW50IE5VTUEgbm9k ZXMgaW4gbGFyZ2VyIGNodW5rcworICoKKyAqIHN0YXJ0cHRyIC0gc3RhcnQgb2YgdGhlIHJl Z2lvbiAoc2hvdWxkIGJlIGFsaWduZWQgdG8gcGFnZSBzaXplKQorICogZW5kcHRyIC0gZW5k IG9mIHRoZSByZWdpb24gKGRvZXNuJ3QgbmVlZCB0byBiZSBhbGlnbmVkKQorICogbWVtX3Bh Z2Vfc2l6ZSAtIHNpemUgb2YgdGhlIG1lbW9yeSBwYWdlIHNpemUKKyAqIGNodW5rX3NpemUg LSBzaXplIG9mIHRoZSBjaHVuayB0byBtb3ZlIHRvIGEgc2luZ2xlIG5vZGUgKHNob3VsZCBi ZSBtdWx0aXBsZQorICogICAgICAgICAgICAgIG9mIHBhZ2Ugc2l6ZQorICogbnVtX25vZGVz IC0gbnVtYmVyIG9mIG5vZGVzIHRvIGFsbG9jYXRlIG1lbW9yeSB0bworICoKKyAqIFhYWCBN YXliZSB0aGlzIHNob3VsZCB1c2UgbnVtYV90b25vZGVfbWVtb3J5IGFuZCBudW1hX3BvbGlj ZV9tZW1vcnkgaW5zdGVhZD8KKyAqIFRoYXQgbWlnaHQgYmUgbW9yZSBlZmZpY2llbnQgdGhh biBudW1hX21vdmVfcGFnZXMsIGFzIGl0IHdvcmtzIG9uIGxhcmdlcgorICogY2h1bmtzIG9m IG1lbW9yeSwgbm90IGluZGl2aWR1YWwgc3lzdGVtIHBhZ2VzLCBJIHRoaW5rLgorICoKKyAq IFhYWCBUaGUgImludGVybGVhdmUiIG5hbWUgaXMgbm90IHF1aXRlIGFjY3VyYXRlLCBJIGd1 ZXNzLgorICovCitzdGF0aWMgdm9pZAorcGdfbnVtYV9pbnRlcmxlYXZlX21lbW9yeShjaGFy ICpzdGFydHB0ciwgY2hhciAqZW5kcHRyLAorCQkJCQkJICBTaXplIG1lbV9wYWdlX3NpemUs IFNpemUgY2h1bmtfc2l6ZSwKKwkJCQkJCSAgaW50IG51bV9ub2RlcykKK3sKKwl2b2xhdGls ZSB1aW50NjQgdG91Y2ggcGdfYXR0cmlidXRlX3VudXNlZCgpOworCWNoYXIJICAgKnB0ciA9 IHN0YXJ0cHRyOworCisJLyogY2h1bmsgc2l6ZSBoYXMgdG8gYmUgYSBtdWx0aXBsZSBvZiBt ZW1vcnkgcGFnZSAqLworCUFzc2VydCgoY2h1bmtfc2l6ZSAlIG1lbV9wYWdlX3NpemUpID09 IDApOworCisJLyoKKwkgKiBXYWxrIHRoZSBtZW1vcnkgcGFnZXMgaW4gdGhlIHJhbmdlLCBh bmQgZGV0ZXJtaW5lIHRoZSBub2RlIGZvciBlYWNoCisJICogb25lLiBXZSB1c2UgbnVtYV90 b25vZGVfbWVtb3J5KCksIGJlY2F1c2UgdGhlbiB3ZSBjYW4gbW92ZSBhIHdob2xlCisJICog bWVtb3J5IHJhbmdlIHRvIHRoZSBub2RlLCB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0 IGluZGl2aWR1YWwgcGFnZXMKKwkgKiBsaWtlIHdpdGggbnVtYV9tb3ZlX3BhZ2VzKCkuCisJ ICovCisJd2hpbGUgKHB0ciA8IGVuZHB0cikKKwl7CisJCS8qIFdlIG1heSBoYXZlIGFuIGlu Y29tcGxldGUgY2h1bmsgYXQgdGhlIGVuZC4gKi8KKwkJU2l6ZQkJc3ogPSBNaW4oY2h1bmtf c2l6ZSwgKGVuZHB0ciAtIHB0cikpOworCisJCS8qCisJCSAqIFdoYXQgTlVNQSBub2RlIGRv ZXMgdGhpcyByYW5nZSBiZWxvbmcgdG8/IEVhY2ggY2h1bmsgc2hvdWxkIGdvIHRvCisJCSAq IHRoZSBzYW1lIE5VTUEgbm9kZSwgaW4gYSByb3VuZC1yb2JpbiBtYW5uZXIuCisJCSAqLwor CQlpbnQJCQlub2RlID0gKChwdHIgLSBzdGFydHB0cikgLyBjaHVua19zaXplKSAlIG51bV9u b2RlczsKKworCQkvKgorCQkgKiBOb3BlLCB3ZSBoYXZlIHRoZSBmaXJzdCBidWZmZXIgZnJv bSB0aGUgbmV4dCBtZW1vcnkgcGFnZSwgYW5kIHdlJ2xsCisJCSAqIHNldCBOVU1BIG5vZGUg Zm9yIGl0IChhbmQgYWxsIHBhZ2VzIHVwIHRvIHRoZSBuZXh0IGJ1ZmZlcikuIFRoZQorCQkg KiBidWZmZXIgc2hvdWxkIGFsaWduIHdpdGggdGhlIG1lbW9yeSBwYWdlLCB0aGFua3MgdG8g dGhlCisJCSAqIGJ1ZmZlcl9hbGlnbiBlYXJsaWVyLgorCQkgKi8KKwkJQXNzZXJ0KChpbnQ2 NCkgcHRyICUgbWVtX3BhZ2Vfc2l6ZSA9PSAwKTsKKwkJQXNzZXJ0KChzeiAlIG1lbV9wYWdl X3NpemUpID09IDApOworCisJCS8qCisJCSAqIFhYWCBubyByZXR1cm4gdmFsdWUsIHRvIG1h a2UgdGhpcyBmYWlsIG9uIGVycm9yLCBoYXMgdG8gdXNlCisJCSAqIG51bWFfc2V0X3N0cmlj dAorCQkgKgorCQkgKiBYWFggU2hvdWxkIHdlIHN0aWxsIHRvdWNoIHRoZSBtZW1vcnkgZmly c3QsIGxpa2Ugd2l0aCBudW1hX21vdmVfcGFnZXMsCisJCSAqIG9yIGlzIHRoYXQgbm90IG5l Y2Vzc2FyeT8KKwkJICovCisJCW51bWFfdG9ub2RlX21lbW9yeShwdHIsIHN6LCBub2RlKTsK KworCQlwdHIgKz0gc3o7CisJfQorCisJLyogc2hvdWxkIGhhdmUgcHJvY2Vzc2VkIGFsbCBj aHVua3MgKi8KKwlBc3NlcnQocHRyID09IGVuZHB0cik7Cit9CmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCmluZGV4IDk0ZGIzZTdjOTc2Li41OTIyNjg5ZmU1ZCAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKKysrIGIvc3JjL2Jh Y2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKQEAgLTY4NSw2ICs2ODUsNyBAQCBSZWFk UmVjZW50QnVmZmVyKFJlbEZpbGVMb2NhdG9yIHJsb2NhdG9yLCBGb3JrTnVtYmVyIGZvcmtO dW0sIEJsb2NrTnVtYmVyIGJsb2NrTgogCUJ1ZmZlckRlc2MgKmJ1ZkhkcjsKIAlCdWZmZXJU YWcJdGFnOwogCXVpbnQzMgkJYnVmX3N0YXRlOworCiAJQXNzZXJ0KEJ1ZmZlcklzVmFsaWQo cmVjZW50X2J1ZmZlcikpOwogCiAJUmVzb3VyY2VPd25lckVubGFyZ2UoQ3VycmVudFJlc291 cmNlT3duZXIpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxz LmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYwppbmRleCBkMzFjYjQ1YTA1 OC4uODc2Y2I2NGNmNjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xv YmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCkBAIC0xNDUs NiArMTQ1LDkgQEAgaW50CQkJbWF4X3dvcmtlcl9wcm9jZXNzZXMgPSA4OwogaW50CQkJbWF4 X3BhcmFsbGVsX3dvcmtlcnMgPSA4OwogaW50CQkJTWF4QmFja2VuZHMgPSAwOwogCisvKiBO VU1BIHN0dWZmICovCitib29sCQludW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZSA9IGZhbHNlOwor CiAvKiBHVUMgcGFyYW1ldGVycyBmb3IgdmFjdXVtICovCiBpbnQJCQlWYWN1dW1CdWZmZXJV c2FnZUxpbWl0ID0gMjA0ODsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlz Yy9ndWNfdGFibGVzLmMgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y190YWJsZXMuYwpp bmRleCBkMTRiMTY3OGU3Zi4uOTU3MDA4N2FhNjAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL21pc2MvZ3VjX3RhYmxlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2Mv Z3VjX3RhYmxlcy5jCkBAIC0yMTE2LDYgKzIxMTYsMTYgQEAgc3RydWN0IGNvbmZpZ19ib29s IENvbmZpZ3VyZU5hbWVzQm9vbFtdID0KIAkJTlVMTCwgTlVMTCwgTlVMTAogCX0sCiAKKwl7 CisJCXsibnVtYV9idWZmZXJzX2ludGVybGVhdmUiLCBQR0NfUE9TVE1BU1RFUiwgREVWRUxP UEVSX09QVElPTlMsCisJCQlnZXR0ZXh0X25vb3AoIkVuYWJsZXMgTlVNQSBpbnRlcmxlYXZp bmcgb2Ygc2hhcmVkIGJ1ZmZlcnMuIiksCisJCQlnZXR0ZXh0X25vb3AoIldoZW4gZW5hYmxl ZCwgdGhlIGJ1ZmZlcnMgaW4gc2hhcmVkIG1lbW9yeSBhcmUgaW50ZXJsZWF2ZWQgdG8gYWxs IE5VTUEgbm9kZXMuIiksCisJCX0sCisJCSZudW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZSwKKwkJ ZmFsc2UsCisJCU5VTEwsIE5VTEwsIE5VTEwKKwl9LAorCiAJewogCQl7InN5bmNfcmVwbGlj YXRpb25fc2xvdHMiLCBQR0NfU0lHSFVQLCBSRVBMSUNBVElPTl9TVEFOREJZLAogCQkJZ2V0 dGV4dF9ub29wKCJFbmFibGVzIGEgcGh5c2ljYWwgc3RhbmRieSB0byBzeW5jaHJvbml6ZSBs b2dpY2FsIGZhaWxvdmVyIHJlcGxpY2F0aW9uIHNsb3RzIGZyb20gdGhlIHByaW1hcnkgc2Vy dmVyLiIpLApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyBiL3NyYy9i aW4vcGdiZW5jaC9wZ2JlbmNoLmMKaW5kZXggNjliNmE4NzdkYzkuLmMwN2RlOTAzZjc2IDEw MDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCisrKyBiL3NyYy9iaW4vcGdi ZW5jaC9wZ2JlbmNoLmMKQEAgLTMwNSw3ICszMDUsNyBAQCBzdGF0aWMgY29uc3QgY2hhciAq cHJvZ25hbWU7CiAjZGVmaW5lCUNQVV9QSU5OSU5HX1JBTkRPTQkJMQogI2RlZmluZQlDUFVf UElOTklOR19DT0xPQ0FURUQJMgogCi1zdGF0aWMgaW50IHBpbm5pbmdfbW9kZSA9IENQVV9Q SU5OSU5HX05PTkU7CitzdGF0aWMgaW50CXBpbm5pbmdfbW9kZSA9IENQVV9QSU5OSU5HX05P TkU7CiAKICNkZWZpbmUgV1NFUCAnQCcJCQkJLyogd2VpZ2h0IHNlcGFyYXRvciAqLwogCkBA IC04NzQsMjAgKzg3NCwyMCBAQCBzdGF0aWMgYm9vbCBzb2NrZXRfaGFzX2lucHV0KHNvY2tl dF9zZXQgKnNhLCBpbnQgZmQsIGludCBpZHgpOwogICovCiB0eXBlZGVmIHN0cnVjdCBjcHVf Z2VuZXJhdG9yX3N0YXRlCiB7Ci0JaW50CQluY3B1czsJCS8qIG51bWJlciBvZiBDUFVzIGF2 YWlsYWJsZSAqLwotCWludAkJbml0ZW1zOwkJLyogbnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBx dWV1ZSAqLwotCWludAkgICAqbnRocmVhZHM7CS8qIG51bWJlciBvZiB0aHJlYWRzIGZvciBl YWNoIENQVSAqLwotCWludAkgICAqbmNsaWVudHM7CS8qIG51bWJlciBvZiBwcm9jZXNzZXMg Zm9yIGVhY2ggQ1BVICovCi0JaW50CSAgICppdGVtczsJCS8qIHF1ZXVlIG9mIENQVXMgdG8g cGljayBmcm9tICovCi19IGNwdV9nZW5lcmF0b3Jfc3RhdGU7CisJaW50CQkJbmNwdXM7CQkJ LyogbnVtYmVyIG9mIENQVXMgYXZhaWxhYmxlICovCisJaW50CQkJbml0ZW1zOwkJCS8qIG51 bWJlciBvZiBpdGVtcyBpbiB0aGUgcXVldWUgKi8KKwlpbnQJCSAgICpudGhyZWFkczsJCS8q IG51bWJlciBvZiB0aHJlYWRzIGZvciBlYWNoIENQVSAqLworCWludAkJICAgKm5jbGllbnRz OwkJLyogbnVtYmVyIG9mIHByb2Nlc3NlcyBmb3IgZWFjaCBDUFUgKi8KKwlpbnQJCSAgICpp dGVtczsJCQkvKiBxdWV1ZSBvZiBDUFVzIHRvIHBpY2sgZnJvbSAqLworfQkJCWNwdV9nZW5l cmF0b3Jfc3RhdGU7CiAKIHN0YXRpYyBjcHVfZ2VuZXJhdG9yX3N0YXRlIGNwdV9nZW5lcmF0 b3JfaW5pdChpbnQgbmNwdXMpOwotc3RhdGljIHZvaWQgY3B1X2dlbmVyYXRvcl9yZWZpbGwo Y3B1X2dlbmVyYXRvcl9zdGF0ZSAqc3RhdGUpOwotc3RhdGljIHZvaWQgY3B1X2dlbmVyYXRv cl9yZXNldChjcHVfZ2VuZXJhdG9yX3N0YXRlICpzdGF0ZSk7Ci1zdGF0aWMgaW50IGNwdV9n ZW5lcmF0b3JfdGhyZWFkKGNwdV9nZW5lcmF0b3Jfc3RhdGUgKnN0YXRlKTsKLXN0YXRpYyBp bnQgY3B1X2dlbmVyYXRvcl9jbGllbnQoY3B1X2dlbmVyYXRvcl9zdGF0ZSAqc3RhdGUsIGlu dCB0aHJlYWRfY3B1KTsKLXN0YXRpYyB2b2lkIGNwdV9nZW5lcmF0b3JfcHJpbnQoY3B1X2dl bmVyYXRvcl9zdGF0ZSAqc3RhdGUpOwotc3RhdGljIGJvb2wgY3B1X2dlbmVyYXRvcl9jaGVj ayhjcHVfZ2VuZXJhdG9yX3N0YXRlICpzdGF0ZSk7CitzdGF0aWMgdm9pZCBjcHVfZ2VuZXJh dG9yX3JlZmlsbChjcHVfZ2VuZXJhdG9yX3N0YXRlICogc3RhdGUpOworc3RhdGljIHZvaWQg Y3B1X2dlbmVyYXRvcl9yZXNldChjcHVfZ2VuZXJhdG9yX3N0YXRlICogc3RhdGUpOworc3Rh dGljIGludAljcHVfZ2VuZXJhdG9yX3RocmVhZChjcHVfZ2VuZXJhdG9yX3N0YXRlICogc3Rh dGUpOworc3RhdGljIGludAljcHVfZ2VuZXJhdG9yX2NsaWVudChjcHVfZ2VuZXJhdG9yX3N0 YXRlICogc3RhdGUsIGludCB0aHJlYWRfY3B1KTsKK3N0YXRpYyB2b2lkIGNwdV9nZW5lcmF0 b3JfcHJpbnQoY3B1X2dlbmVyYXRvcl9zdGF0ZSAqIHN0YXRlKTsKK3N0YXRpYyBib29sIGNw dV9nZW5lcmF0b3JfY2hlY2soY3B1X2dlbmVyYXRvcl9zdGF0ZSAqIHN0YXRlKTsKIAogc3Rh dGljIHZvaWQgcmVzZXRfcGlubmluZyhUU3RhdGUgKnRocmVhZHMsIGludCBudGhyZWFkcyk7 CiAKQEAgLTc0MjIsNyArNzQyMiw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQog CS8qIHRyeSB0byBhc3NpZ24gdGhyZWFkcy9jbGllbnRzIHRvIENQVXMgKi8KIAlpZiAocGlu bmluZ19tb2RlICE9IENQVV9QSU5OSU5HX05PTkUpCiAJewotCQlpbnQgbnByb2NzID0gZ2V0 X25wcm9jcygpOworCQlpbnQJCQlucHJvY3MgPSBnZXRfbnByb2NzKCk7CiAJCWNwdV9nZW5l cmF0b3Jfc3RhdGUgc3RhdGUgPSBjcHVfZ2VuZXJhdG9yX2luaXQobnByb2NzKTsKIAogcmV0 cnk6CkBAIC03NDMzLDYgKzc0MzMsNyBAQCByZXRyeToKIAkJZm9yIChpID0gMDsgaSA8IG50 aHJlYWRzOyBpKyspCiAJCXsKIAkJCVRTdGF0ZQkgICAqdGhyZWFkID0gJnRocmVhZHNbaV07 CisKIAkJCXRocmVhZC0+Y3B1ID0gY3B1X2dlbmVyYXRvcl90aHJlYWQoJnN0YXRlKTsKIAkJ fQogCkBAIC03NDQ0LDcgKzc0NDUsNyBAQCByZXRyeToKIAkJd2hpbGUgKHRydWUpCiAJCXsK IAkJCS8qIGRpZCB3ZSBmaW5kIGFueSB1bmFzc2lnbmVkIGJhY2tlbmQ/ICovCi0JCQlib29s IGZvdW5kID0gZmFsc2U7CisJCQlib29sCQlmb3VuZCA9IGZhbHNlOwogCiAJCQlmb3IgKGkg PSAwOyBpIDwgbnRocmVhZHM7IGkrKykKIAkJCXsKQEAgLTc2NzgsMTAgKzc2NzksMTAgQEAg dGhyZWFkUnVuKHZvaWQgKmFyZykKIAkJLyogZGV0ZXJtaW5lIFBJRCBvZiB0aGUgYmFja2Vu ZCwgcGluIGl0IHRvIHRoZSBzYW1lIENQVSAqLwogCQlmb3IgKGludCBpID0gMDsgaSA8IG5z dGF0ZTsgaSsrKQogCQl7Ci0JCQljaGFyICAgKnBpZF9zdHI7Ci0JCQlwaWRfdAlwaWQ7CisJ CQljaGFyCSAgICpwaWRfc3RyOworCQkJcGlkX3QJCXBpZDsKIAotCQkJUEdyZXN1bHQgKnJl cyA9IFBRZXhlYyhzdGF0ZVtpXS5jb24sICJzZWxlY3QgcGdfYmFja2VuZF9waWQoKSIpOwor CQkJUEdyZXN1bHQgICAqcmVzID0gUFFleGVjKHN0YXRlW2ldLmNvbiwgInNlbGVjdCBwZ19i YWNrZW5kX3BpZCgpIik7CiAKIAkJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVT X1RVUExFU19PSykKIAkJCQlwZ19mYXRhbCgiY291bGQgbm90IGRldGVybWluZSBQSUQgb2Yg dGhlIGJhY2tlbmQgZm9yIGNsaWVudCAlZCIsCkBAIC04MTg0LDcgKzgxODUsNyBAQCBjcHVf Z2VuZXJhdG9yX2luaXQoaW50IG5jcHVzKQogewogCXN0cnVjdCB0aW1ldmFsIHR2OwogCi0J Y3B1X2dlbmVyYXRvcl9zdGF0ZQlzdGF0ZTsKKwljcHVfZ2VuZXJhdG9yX3N0YXRlIHN0YXRl OwogCiAJc3RhdGUubmNwdXMgPSBuY3B1czsKIApAQCAtODIwNyw3ICs4MjA4LDcgQEAgY3B1 X2dlbmVyYXRvcl9pbml0KGludCBuY3B1cykKIH0KIAogc3RhdGljIHZvaWQKLWNwdV9nZW5l cmF0b3JfcmVmaWxsKGNwdV9nZW5lcmF0b3Jfc3RhdGUgKnN0YXRlKQorY3B1X2dlbmVyYXRv cl9yZWZpbGwoY3B1X2dlbmVyYXRvcl9zdGF0ZSAqIHN0YXRlKQogewogCXN0cnVjdCB0aW1l dmFsIHR2OwogCkBAIC04MjIzLDcgKzgyMjQsNyBAQCBjcHVfZ2VuZXJhdG9yX3JlZmlsbChj cHVfZ2VuZXJhdG9yX3N0YXRlICpzdGF0ZSkKIH0KIAogc3RhdGljIHZvaWQKLWNwdV9nZW5l cmF0b3JfcmVzZXQoY3B1X2dlbmVyYXRvcl9zdGF0ZSAqc3RhdGUpCitjcHVfZ2VuZXJhdG9y X3Jlc2V0KGNwdV9nZW5lcmF0b3Jfc3RhdGUgKiBzdGF0ZSkKIHsKIAlzdGF0ZS0+bml0ZW1z ID0gMDsKIAljcHVfZ2VuZXJhdG9yX3JlZmlsbChzdGF0ZSk7CkBAIC04MjM2LDE1ICs4MjM3 LDE1IEBAIGNwdV9nZW5lcmF0b3JfcmVzZXQoY3B1X2dlbmVyYXRvcl9zdGF0ZSAqc3RhdGUp CiB9CiAKIHN0YXRpYyBpbnQKLWNwdV9nZW5lcmF0b3JfdGhyZWFkKGNwdV9nZW5lcmF0b3Jf c3RhdGUgKnN0YXRlKQorY3B1X2dlbmVyYXRvcl90aHJlYWQoY3B1X2dlbmVyYXRvcl9zdGF0 ZSAqIHN0YXRlKQogewogCWlmIChzdGF0ZS0+bml0ZW1zID09IDApCiAJCWNwdV9nZW5lcmF0 b3JfcmVmaWxsKHN0YXRlKTsKIAogCXdoaWxlICh0cnVlKQogCXsKLQkJaW50IGlkeCA9IGxy YW5kNDgoKSAlIHN0YXRlLT5uaXRlbXM7Ci0JCWludCBjcHUgPSBzdGF0ZS0+aXRlbXNbaWR4 XTsKKwkJaW50CQkJaWR4ID0gbHJhbmQ0OCgpICUgc3RhdGUtPm5pdGVtczsKKwkJaW50CQkJ Y3B1ID0gc3RhdGUtPml0ZW1zW2lkeF07CiAKIAkJc3RhdGUtPml0ZW1zW2lkeF0gPSBzdGF0 ZS0+aXRlbXNbc3RhdGUtPm5pdGVtcyAtIDFdOwogCQlzdGF0ZS0+bml0ZW1zLS07CkBAIC04 MjU2LDEwICs4MjU3LDEwIEBAIGNwdV9nZW5lcmF0b3JfdGhyZWFkKGNwdV9nZW5lcmF0b3Jf c3RhdGUgKnN0YXRlKQogfQogCiBzdGF0aWMgaW50Ci1jcHVfZ2VuZXJhdG9yX2NsaWVudChj cHVfZ2VuZXJhdG9yX3N0YXRlICpzdGF0ZSwgaW50IHRocmVhZF9jcHUpCitjcHVfZ2VuZXJh dG9yX2NsaWVudChjcHVfZ2VuZXJhdG9yX3N0YXRlICogc3RhdGUsIGludCB0aHJlYWRfY3B1 KQogewotCWludAkJbWluX2NsaWVudHM7Ci0JYm9vbAloYXNfdmFsaWRfY3B1cyA9IGZhbHNl OworCWludAkJCW1pbl9jbGllbnRzOworCWJvb2wJCWhhc192YWxpZF9jcHVzID0gZmFsc2U7 CiAKIAlmb3IgKGludCBpID0gMDsgaSA8IHN0YXRlLT5uaXRlbXM7IGkrKykKIAl7CkBAIC04 Mjg0LDggKzgyODUsOCBAQCBjcHVfZ2VuZXJhdG9yX2NsaWVudChjcHVfZ2VuZXJhdG9yX3N0 YXRlICpzdGF0ZSwgaW50IHRocmVhZF9jcHUpCiAKIAl3aGlsZSAodHJ1ZSkKIAl7Ci0JCWlu dCBpZHggPSBscmFuZDQ4KCkgJSBzdGF0ZS0+bml0ZW1zOwotCQlpbnQgY3B1ID0gc3RhdGUt Pml0ZW1zW2lkeF07CisJCWludAkJCWlkeCA9IGxyYW5kNDgoKSAlIHN0YXRlLT5uaXRlbXM7 CisJCWludAkJCWNwdSA9IHN0YXRlLT5pdGVtc1tpZHhdOwogCiAJCWlmIChjcHUgPT0gdGhy ZWFkX2NwdSkKIAkJCWNvbnRpbnVlOwpAQCAtODMwMyw3ICs4MzA0LDcgQEAgY3B1X2dlbmVy YXRvcl9jbGllbnQoY3B1X2dlbmVyYXRvcl9zdGF0ZSAqc3RhdGUsIGludCB0aHJlYWRfY3B1 KQogfQogCiBzdGF0aWMgdm9pZAotY3B1X2dlbmVyYXRvcl9wcmludChjcHVfZ2VuZXJhdG9y X3N0YXRlICpzdGF0ZSkKK2NwdV9nZW5lcmF0b3JfcHJpbnQoY3B1X2dlbmVyYXRvcl9zdGF0 ZSAqIHN0YXRlKQogewogCWZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGUtPm5jcHVzOyBpKysp CiAJewpAQCAtODMxMiwxMCArODMxMywxMCBAQCBjcHVfZ2VuZXJhdG9yX3ByaW50KGNwdV9n ZW5lcmF0b3Jfc3RhdGUgKnN0YXRlKQogfQogCiBzdGF0aWMgYm9vbAotY3B1X2dlbmVyYXRv cl9jaGVjayhjcHVfZ2VuZXJhdG9yX3N0YXRlICpzdGF0ZSkKK2NwdV9nZW5lcmF0b3JfY2hl Y2soY3B1X2dlbmVyYXRvcl9zdGF0ZSAqIHN0YXRlKQogewotCWludAltaW5fY291bnQgPSBJ TlRfTUFYLAotCQltYXhfY291bnQgPSAwOworCWludAkJCW1pbl9jb3VudCA9IElOVF9NQVgs CisJCQkJbWF4X2NvdW50ID0gMDsKIAogCWZvciAoaW50IGkgPSAwOyBpIDwgc3RhdGUtPm5j cHVzOyBpKyspCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9z cmMvaW5jbHVkZS9taXNjYWRtaW4uaAppbmRleCAxYmVmOTg0NzFjMy4uMDE0YTYwNzlhZjIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRl L21pc2NhZG1pbi5oCkBAIC0xNzgsNiArMTc4LDggQEAgZXh0ZXJuIFBHRExMSU1QT1JUIGlu dCBNYXhDb25uZWN0aW9uczsKIGV4dGVybiBQR0RMTElNUE9SVCBpbnQgbWF4X3dvcmtlcl9w cm9jZXNzZXM7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJhbGxlbF93b3JrZXJz OwogCitleHRlcm4gUEdETExJTVBPUlQgYm9vbCBudW1hX2J1ZmZlcnNfaW50ZXJsZWF2ZTsK KwogZXh0ZXJuIFBHRExMSU1QT1JUIGludCBjb21taXRfdGltZXN0YW1wX2J1ZmZlcnM7CiBl eHRlcm4gUEdETExJTVBPUlQgaW50IG11bHRpeGFjdF9tZW1iZXJfYnVmZmVyczsKIGV4dGVy biBQR0RMTElNUE9SVCBpbnQgbXVsdGl4YWN0X29mZnNldF9idWZmZXJzOwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv YnVmbWdyLmgKaW5kZXggNDFmZGMxZTc2OTMuLmMyNTdjOGExYzIwIDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2Uv YnVmbWdyLmgKQEAgLTMxOSw2ICszMTksNyBAQCBleHRlcm4gdm9pZCBFdmljdFJlbFVucGlu bmVkQnVmZmVycyhSZWxhdGlvbiByZWwsCiAvKiBpbiBidWZfaW5pdC5jICovCiBleHRlcm4g dm9pZCBCdWZmZXJNYW5hZ2VyU2htZW1Jbml0KHZvaWQpOwogZXh0ZXJuIFNpemUgQnVmZmVy TWFuYWdlclNobWVtU2l6ZSh2b2lkKTsKK2V4dGVybiBpbnQJQnVmZmVyR2V0Tm9kZShCdWZm ZXIgYnVmZmVyKTsKIAogLyogaW4gbG9jYWxidWYuYyAqLwogZXh0ZXJuIHZvaWQgQXRQcm9j RXhpdF9Mb2NhbEJ1ZmZlcnModm9pZCk7Ci0tIAoyLjQ5LjAKCg== --------------ZiLGGg5GsiuT6QTFDhUm0SgE--