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 1tP667-00ADGD-4j for pgsql-hackers@arkaria.postgresql.org; Sat, 21 Dec 2024 20:29:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1tP656-00C2FF-IL for pgsql-hackers@arkaria.postgresql.org; Sat, 21 Dec 2024 20:28:12 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tP655-00C2F7-Nl for pgsql-hackers@lists.postgresql.org; Sat, 21 Dec 2024 20:28:11 +0000 Received: from relay7-d.mail.gandi.net ([2001:4b98:dc4:8::227]) by makus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tP64u-000iDP-Ts for pgsql-hackers@postgresql.org; Sat, 21 Dec 2024 20:28:09 +0000 Received: by mail.gandi.net (Postfix) with ESMTPSA id 2E44A20002 for ; Sat, 21 Dec 2024 20:27:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vondra.me; s=gm1; t=1734812876; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=SPEe5zYeVjhg/eOU2syTGdd/GiwwCsGINnRFhRkVQsA=; b=hn0E5lekfiebzIb9t9aP06PRkx9197sdKT8XBYBvVW6lbLFPYg/f/zlwqZR0FyZm1eDVAx kiR6/Hp52kipQ2Bme6P28KUH6fQVIKta+yMD0gzuf9DLNrwOlHrgiwXm1CRnwWxmdUuvOJ t+RxOfMNihdxG0CqX7NBbiUQrNiIX1NR3xzUEQ3usnuvxZV+LZW74NL8T1/YAW8EdrFuZw loES8B3fcOtKe22skSMY9yNwVh0gFmLiQisb6hz/VaFsEAk0jt8GEG+iml6fiKHDdmT3MS bErt+YAEfAQXjZW/CxexJxvXdNZJlQLAJvU2jEpRlEpG0rghWCEy9hKxU8HU3Q== Content-Type: multipart/mixed; boundary="------------QtWVPH0ZWbTLUFo0bg5Mgqo7" Message-ID: Date: Sat, 21 Dec 2024 21:27:54 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: PostgreSQL Hackers From: Tomas Vondra Subject: PoC: history of recent vacuum/checkpoint runs (using new hooks) 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. --------------QtWVPH0ZWbTLUFo0bg5Mgqo7 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, Our runtime stats system is great, but it only keeps a snapshot of cumulative stats / snapshot. And while that works for user workloads, it may not be quite sufficient when analyzing maintenance operations like vacuum/checkpoint, etc. For those operations it's useful to have information about individual runs, not just the cumulative counters (or even deltas between regular snapshots). There's also the issue that we only keep a very limited subset of available information - just look at the info included in VACUUM VERBOSE or with log_checkpoints=on, and how little of that is available in pg_stats_. For vacuum we have the vacuum/analyze counts, and timestamp of the last operation, but that's it. VACUUM VERBOSE provides way more information, but we can only guess based on the regular pgstat counters. Yes, we can get this info written to server log using log_checkpoints and log_autovacuum_min_duration (AFAIK there's no way to ensure logging for manual VACUUM). But processing this information is not particularly convenient, as it requires parsing the log, the message format is suitable more for humans, etc. And it'd be very convenient to be able to query this information, just like the other pgstat catalogs. I wonder if we might/should do two things, to improve this: 1) Introduce hooks that allow doing some custom stuff with info about those actions, after logging it. The attached 0001 and 0002 patches do this for vacuum and checkpoint. 2) Allow keeping information about events. The 0003 patch does that in an extension, leveraging the new hooks, but it'd certainly possible to do in core too. I realize our current pgstat collector is keeping per-object stats, not per-event. We might add this to per-object stats (e.g. each table would have stats about vacuum runs), but that wouldn't work for checkpoints. There's also the question of memory consumption - I'm sure we don't want to keep infinite history of vacuum runs, for example. So the extension simply maintains a fixed-size circular queue, i.e. when it gets full it starts evicting oldest entries. 1MB is enough for storing ~4k VACUUM runs - I'm sure it can be made more compact. I don't think there's a better way to do this. I've considered if this might be done using emit_log_hook, but (a) that only helps when we end up logging the event (and I'd like to do this always), and (b) it'd require parsing the server log. So it's not much better than just doing that, I think ... Opinions? -- Tomas Vondra --------------QtWVPH0ZWbTLUFo0bg5Mgqo7 Content-Type: text/x-patch; charset=UTF-8; name="v1-0001-vacuum_log_hook.patch" Content-Disposition: attachment; filename="v1-0001-vacuum_log_hook.patch" Content-Transfer-Encoding: base64 RnJvbSA4N2U0NTc2MjlkMzgyYzMwNzFjN2Y5MWVjNDc4NjNjMTVlNmMyNDlkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogU2F0LCAyMSBEZWMgMjAyNCAxODo1MDo0OSArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djEgMS8zXSB2YWN1dW1fbG9nX2hvb2sKCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv dmFjdXVtbGF6eS5jIHwgMTEwICsrKysrKysrKysrKysrKysrKysrKysrKysrLQogc3JjL2lu Y2x1ZGUvY29tbWFuZHMvdmFjdXVtLmggICAgICAgIHwgIDQxICsrKysrKysrKysKIDIgZmls ZXMgY2hhbmdlZCwgMTQ3IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5jCmluZGV4IGYyY2E5NDMwNTgxLi5lZGQxMDk5 Yzg5OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvdmFjdXVtbGF6eS5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3ZhY3V1bWxhenkuYwpAQCAtMjM5LDYg KzIzOSw3IEBAIHR5cGVkZWYgc3RydWN0IExWU2F2ZWRFcnJJbmZvCiAJVmFjRXJyUGhhc2Ug cGhhc2U7CiB9IExWU2F2ZWRFcnJJbmZvOwogCit2YWN1dW1fbG9nX2hvb2tfdHlwZSB2YWN1 dW1fbG9nX2hvb2sgPSBOVUxMOwogCiAvKiBub24tZXhwb3J0IGZ1bmN0aW9uIHByb3RvdHlw ZXMgKi8KIHN0YXRpYyB2b2lkIGxhenlfc2Nhbl9oZWFwKExWUmVsU3RhdGUgKnZhY3JlbCk7 CkBAIC0zMjgsNyArMzI5LDggQEAgaGVhcF92YWN1dW1fcmVsKFJlbGF0aW9uIHJlbCwgVmFj dXVtUGFyYW1zICpwYXJhbXMsCiAKIAl2ZXJib3NlID0gKHBhcmFtcy0+b3B0aW9ucyAmIFZB Q09QVF9WRVJCT1NFKSAhPSAwOwogCWluc3RydW1lbnQgPSAodmVyYm9zZSB8fCAoQW1BdXRv VmFjdXVtV29ya2VyUHJvY2VzcygpICYmCi0JCQkJCQkJICBwYXJhbXMtPmxvZ19taW5fZHVy YXRpb24gPj0gMCkpOworCQkJCQkJCSAgcGFyYW1zLT5sb2dfbWluX2R1cmF0aW9uID49IDAp CisJCQkJCQkgIHx8ICh2YWN1dW1fbG9nX2hvb2sgIT0gTlVMTCkpOwogCWlmIChpbnN0cnVt ZW50KQogCXsKIAkJcGdfcnVzYWdlX2luaXQoJnJ1MCk7CkBAIC02MTMsNiArNjE1LDcgQEAg aGVhcF92YWN1dW1fcmVsKFJlbGF0aW9uIHJlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJ CVRpbWVzdGFtcFR6IGVuZHRpbWUgPSBHZXRDdXJyZW50VGltZXN0YW1wKCk7CiAKIAkJaWYg KHZlcmJvc2UgfHwgcGFyYW1zLT5sb2dfbWluX2R1cmF0aW9uID09IDAgfHwKKwkJCSh2YWN1 dW1fbG9nX2hvb2sgIT0gTlVMTCkgfHwKIAkJCVRpbWVzdGFtcERpZmZlcmVuY2VFeGNlZWRz KHN0YXJ0dGltZSwgZW5kdGltZSwKIAkJCQkJCQkJCSAgIHBhcmFtcy0+bG9nX21pbl9kdXJh dGlvbikpCiAJCXsKQEAgLTYyMywxMSArNjI2LDE3IEBAIGhlYXBfdmFjdXVtX3JlbChSZWxh dGlvbiByZWwsIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCQkJU3RyaW5nSW5mb0RhdGEgYnVm OwogCQkJY2hhcgkgICAqbXNnZm10OwogCQkJaW50MzIJCWRpZmY7Ci0JCQlkb3VibGUJCXJl YWRfcmF0ZSA9IDAsCisJCQlkb3VibGUJCXJlYWRfbXMgPSAwLAorCQkJCQkJd3JpdGVfbXMg PSAwLAorCQkJCQkJcmVhZF9yYXRlID0gMCwKIAkJCQkJCXdyaXRlX3JhdGUgPSAwOwogCQkJ aW50NjQJCXRvdGFsX2Jsa3NfaGl0OwogCQkJaW50NjQJCXRvdGFsX2Jsa3NfcmVhZDsKIAkJ CWludDY0CQl0b3RhbF9ibGtzX2RpcnRpZWQ7CisJCQlpbnQ2NAkJaW5kZXhfcGFnZXMgPSAw LAorCQkJCQkJaW5kZXhfcGFnZXNfbmV3bHlfZGVsZXRlZCA9IDAsCisJCQkJCQlpbmRleF9w YWdlc19kZWxldGVkID0gMCwKKwkJCQkJCWluZGV4X3BhZ2VzX2ZyZWUgPSAwOwogCiAJCQlU aW1lc3RhbXBEaWZmZXJlbmNlKHN0YXJ0dGltZSwgZW5kdGltZSwgJnNlY3NfZHVyLCAmdXNl Y3NfZHVyKTsKIAkJCW1lbXNldCgmd2FsdXNhZ2UsIDAsIHNpemVvZihXYWxVc2FnZSkpOwpA QCAtNzY0LDExICs3NzMsMTYgQEAgaGVhcF92YWN1dW1fcmVsKFJlbGF0aW9uIHJlbCwgVmFj dXVtUGFyYW1zICpwYXJhbXMsCiAJCQkJCQkJCSBpc3RhdC0+cGFnZXNfbmV3bHlfZGVsZXRl ZCwKIAkJCQkJCQkJIGlzdGF0LT5wYWdlc19kZWxldGVkLAogCQkJCQkJCQkgaXN0YXQtPnBh Z2VzX2ZyZWUpOworCisJCQkJaW5kZXhfcGFnZXMgKz0gaXN0YXQtPm51bV9wYWdlczsKKwkJ CQlpbmRleF9wYWdlc19uZXdseV9kZWxldGVkICs9IGlzdGF0LT5wYWdlc19uZXdseV9kZWxl dGVkOworCQkJCWluZGV4X3BhZ2VzX2RlbGV0ZWQgKz0gaXN0YXQtPnBhZ2VzX2RlbGV0ZWQ7 CisJCQkJaW5kZXhfcGFnZXNfZnJlZSArPSBpc3RhdC0+cGFnZXNfZnJlZTsKIAkJCX0KIAkJ CWlmICh0cmFja19pb190aW1pbmcpCiAJCQl7Ci0JCQkJZG91YmxlCQlyZWFkX21zID0gKGRv dWJsZSkgKHBnU3RhdEJsb2NrUmVhZFRpbWUgLSBzdGFydHJlYWR0aW1lKSAvIDEwMDA7Ci0J CQkJZG91YmxlCQl3cml0ZV9tcyA9IChkb3VibGUpIChwZ1N0YXRCbG9ja1dyaXRlVGltZSAt IHN0YXJ0d3JpdGV0aW1lKSAvIDEwMDA7CisJCQkJcmVhZF9tcyA9IChkb3VibGUpIChwZ1N0 YXRCbG9ja1JlYWRUaW1lIC0gc3RhcnRyZWFkdGltZSkgLyAxMDAwOworCQkJCXdyaXRlX21z ID0gKGRvdWJsZSkgKHBnU3RhdEJsb2NrV3JpdGVUaW1lIC0gc3RhcnR3cml0ZXRpbWUpIC8g MTAwMDsKIAogCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgXygiSS9PIHRpbWluZ3M6IHJl YWQ6ICUuM2YgbXMsIHdyaXRlOiAlLjNmIG1zXG4iKSwKIAkJCQkJCQkJIHJlYWRfbXMsIHdy aXRlX21zKTsKQEAgLTc5Nyw2ICs4MTEsOTQgQEAgaGVhcF92YWN1dW1fcmVsKFJlbGF0aW9u IHJlbCwgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJCQllcmVwb3J0KHZlcmJvc2UgPyBJTkZP IDogTE9HLAogCQkJCQkoZXJybXNnX2ludGVybmFsKCIlcyIsIGJ1Zi5kYXRhKSkpOwogCQkJ cGZyZWUoYnVmLmRhdGEpOworCisJCQlpZiAodmFjdXVtX2xvZ19ob29rKQorCQkJeworCQkJ CVBHUlVzYWdlCXJ1MTsKKworCQkJCWludDMyCXJlbW92YWJsZV9jdXRvZmY7CisJCQkJaW50 MzIJcmVsZnJvemVueGlkX2FkdmFuY2UgPSAtMTsKKwkJCQlpbnQzMglyZWxtaW5teGlkX2Fk dmFuY2UgPSAtMTsKKworCQkJCWRvdWJsZQljcHVfZWxhcHNlZCwKKwkJCQkJCWNwdV91c2Vy LAorCQkJCQkJY3B1X3N5c3RlbTsKKworCQkJCXBnX3J1c2FnZV9pbml0KCZydTEpOworCisJ CQkJY3B1X2VsYXBzZWQgPSAocnUxLnR2LnR2X3NlYyAtIHJ1MC50di50dl9zZWMpICsKKwkJ CQkJCQkgIChydTEudHYudHZfdXNlYyAtIHJ1MC50di50dl91c2VjKSAvIDEwMDAwMDAuMDsK KworCQkJCWNwdV91c2VyID0gKHJ1MS5ydS5ydV91dGltZS50dl9zZWMgLSBydTAucnUucnVf dXRpbWUudHZfc2VjKSArCisJCQkJCQkgICAocnUxLnJ1LnJ1X3V0aW1lLnR2X3VzZWMgLSBy dTAucnUucnVfdXRpbWUudHZfdXNlYykgLyAxMDAwMDAwLjA7CisKKwkJCQljcHVfc3lzdGVt ID0gKHJ1MS5ydS5ydV9zdGltZS50dl9zZWMgLSBydTAucnUucnVfc3RpbWUudHZfc2VjKSAr CisJCQkJCQkJIChydTEucnUucnVfc3RpbWUudHZfdXNlYyAtIHJ1MC5ydS5ydV9zdGltZS50 dl91c2VjKSAvIDEwMDAwMDAuMDsKKworCQkJCXJlbW92YWJsZV9jdXRvZmYgPSAoaW50MzIp IChSZWFkTmV4dFRyYW5zYWN0aW9uSWQoKSAtIHZhY3JlbC0+Y3V0b2Zmcy5PbGRlc3RYbWlu KTsKKworCQkJCWlmIChmcm96ZW54aWRfdXBkYXRlZCkKKwkJCQkJcmVsZnJvemVueGlkX2Fk dmFuY2UgPSAoaW50MzIpICh2YWNyZWwtPk5ld1JlbGZyb3plblhpZCAtIHZhY3JlbC0+Y3V0 b2Zmcy5yZWxmcm96ZW54aWQpOworCisJCQkJaWYgKG1pbm11bHRpX3VwZGF0ZWQpCisJCQkJ CXJlbG1pbm14aWRfYWR2YW5jZSA9IChpbnQzMikgKHZhY3JlbC0+TmV3UmVsbWluTXhpZCAt IHZhY3JlbC0+Y3V0b2Zmcy5yZWxtaW5teGlkKTsKKworCQkJCXZhY3V1bV9sb2dfaG9vayhz dGFydHRpbWUsCisJCQkJCQkJCWVuZHRpbWUsCisKKwkJCQkJCQkJUmVsYXRpb25HZXRSZWxp ZChyZWwpLAorCisJCQkJCQkJCUFtQXV0b1ZhY3V1bVdvcmtlclByb2Nlc3MoKSwJLyogaXNf YXV0b3ZhY3V1bSAqLworCQkJCQkJCQl2YWNyZWwtPmFnZ3Jlc3NpdmUsCQkJCS8qIGlzX2Fn Z3Jlc3NpdmUgKi8KKwkJCQkJCQkJcGFyYW1zLT5pc193cmFwYXJvdW5kLAkJCS8qIGlzX3dy YXBhcm91bmQgKi8KKwkJCQkJCQkJcGFyYW1zLT5pbmRleF9jbGVhbnVwLAkJCS8qIGluZGV4 X2NsZWFudXAgKi8KKworCQkJCQkJCQkvKiBwYWdlcyAqLworCQkJCQkJCQl2YWNyZWwtPnJl bW92ZWRfcGFnZXMsCQkJLyogcGFnZXNfcmVtb3ZlZCAqLworCQkJCQkJCQluZXdfcmVsX3Bh Z2VzLAkJCQkJLyogcGFnZXNfcmVtYWluICovCisJCQkJCQkJCXZhY3JlbC0+c2Nhbm5lZF9w YWdlcywJCQkvKiBwYWdlc19zY2FubmVkICovCisJCQkJCQkJCXZhY3JlbC0+bmV3X2Zyb3pl bl90dXBsZV9wYWdlcywJLyogcGFnZXNfZnJvemVuICovCisJCQkJCQkJCXZhY3JlbC0+bWlz c2VkX2RlYWRfcGFnZXMsCQkvKiBwYWdlc19taXNzZWRfZGVhZCAqLworCisJCQkJCQkJCS8q IHZpc2liaWxpdHkgbWFwIGluZm8gKi8KKwkJCQkJCQkJdmFjcmVsLT52bV9uZXdfdmlzaWJs ZV9wYWdlcywJLyogbmV3X3Zpc2libGUgKi8KKwkJCQkJCQkJdmFjcmVsLT52bV9uZXdfZnJv emVuX3BhZ2VzLAkvKiBuZXdfZnJvemVuICovCisJCQkJCQkJCXZhY3JlbC0+dm1fbmV3X3Zp c2libGVfZnJvemVuX3BhZ2VzLAkvKiBuZXdfdmlzaWJsZV9mcm96ZW4gKi8KKworCQkJCQkJ CQkvKiB0dXBsZXMgKi8KKwkJCQkJCQkJdmFjcmVsLT50dXBsZXNfZGVsZXRlZCwJCQkvKiB0 dXBsZXNfcmVtb3ZlZCAqLworCQkJCQkJCQl2YWNyZWwtPm5ld19yZWxfdHVwbGVzLAkJCS8q IHR1cGxlc19yZW1haW4gKi8KKwkJCQkJCQkJdmFjcmVsLT5yZWNlbnRseV9kZWFkX3R1cGxl cywJLyogdHVwbGVzX25vdF9yZW1vdmFibGUgKi8KKwkJCQkJCQkJdmFjcmVsLT50dXBsZXNf ZnJvemVuLAkJCS8qIHR1cGxlc19mcm96ZW4gKi8KKwkJCQkJCQkJdmFjcmVsLT5taXNzZWRf ZGVhZF90dXBsZXMsCQkvKiB0dXBsZXNfbWlzc2VkX2RlYWQgKi8KKworCQkJCQkJCQkvKiBj dXRvZmZzICovCisJCQkJCQkJCXJlbW92YWJsZV9jdXRvZmYsCQkJCS8qIHJlbW92YWJsZV9j dXRvZmYgKi8KKwkJCQkJCQkJcmVsZnJvemVueGlkX2FkdmFuY2UsCQkJLyogcmVsZnJvemVu eGlkX2FkdmFuY2UgKi8KKwkJCQkJCQkJcmVsbWlubXhpZF9hZHZhbmNlLAkJCQkvKiByZWxt aW5teGlkX2FkdmFuY2UgKi8KKworCQkJCQkJCQkvKiBpbmRleGVzICovCisJCQkJCQkJCXZh Y3JlbC0+bnVtX2luZGV4X3NjYW5zLAkJLyogaW5kZXhfc2NhbnMgKi8KKwkJCQkJCQkJdmFj cmVsLT5uaW5kZXhlcywJCQkJLyogaW5kZXhfY291bnQgKi8KKwkJCQkJCQkJaW5kZXhfcGFn ZXMsCQkJCQkvKiBpbmRleF9wYWdlcyAqLworCQkJCQkJCQlpbmRleF9wYWdlc19uZXdseV9k ZWxldGVkLAkJLyogaW5kZXhfcGFnZXNfbmV3bHlfZGVsZXRlZCAqLworCQkJCQkJCQlpbmRl eF9wYWdlc19kZWxldGVkLAkJCS8qIGluZGV4X3BhZ2VzX2RlbGV0ZWQgKi8KKwkJCQkJCQkJ aW5kZXhfcGFnZXNfZnJlZSwJCQkJLyogaW5kZXhfcGFnZXNfZnJlZSAqLworCisJCQkJCQkJ CS8qIEkvTyAqLworCQkJCQkJCQlyZWFkX21zLAkJCQkJCS8qIGlvX3JlYWRfbXMgKi8KKwkJ CQkJCQkJd3JpdGVfbXMsCQkJCQkJLyogaW9fd3JpdGVfbXMgKi8KKworCQkJCQkJCQkvKiBX QUwgKi8KKwkJCQkJCQkJd2FsdXNhZ2Uud2FsX3JlY29yZHMsCQkJLyogd2FsX3JlY29yZHMg Ki8KKwkJCQkJCQkJd2FsdXNhZ2Uud2FsX2ZwaSwJCQkJLyogd2FsX2ZwaXMgKi8KKwkJCQkJ CQkJd2FsdXNhZ2Uud2FsX2J5dGVzLAkJCQkvKiB3YWxfYnl0ZXMgKi8KKworCQkJCQkJCQkv KiBDUFUgKi8KKwkJCQkJCQkJY3B1X3VzZXIsCQkJCQkJLyogY3B1X3VzZXIgKi8KKwkJCQkJ CQkJY3B1X3N5c3RlbSwJCQkJCQkvKiBjcHVfc3lzdGVtICovCisJCQkJCQkJCWNwdV9lbGFw c2VkKTsJCQkJCS8qIGNwdV9lbGFwc2VkICovCisJCQl9CiAJCX0KIAl9CiAKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3ZhY3V1bS5oIGIvc3JjL2luY2x1ZGUvY29tbWFu ZHMvdmFjdXVtLmgKaW5kZXggNzU5ZjlhODdkMzguLmFiNDNiNWEzMWIxIDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAorKysgYi9zcmMvaW5jbHVkZS9jb21t YW5kcy92YWN1dW0uaApAQCAtMzg1LDQgKzM4NSw0NSBAQCBleHRlcm4gZG91YmxlIGFubF9y YW5kb21fZnJhY3Qodm9pZCk7CiBleHRlcm4gZG91YmxlIGFubF9pbml0X3NlbGVjdGlvbl9z dGF0ZShpbnQgbik7CiBleHRlcm4gZG91YmxlIGFubF9nZXRfbmV4dF9TKGRvdWJsZSB0LCBp bnQgbiwgZG91YmxlICpzdGF0ZXB0cik7CiAKKy8qIGhvb2sgdG8gc3RvcmUgYWxsIHZhY3V1 bS1yZWxhdGVkIHN0YXRzICovCit0eXBlZGVmIHZvaWQgKCp2YWN1dW1fbG9nX2hvb2tfdHlw ZSkgKFRpbWVzdGFtcFR6IHN0YXJ0dGltZSwKKwkJCQkJCQkJCSAgVGltZXN0YW1wVHogZW5k dGltZSwKKwkJCQkJCQkJCSAgT2lkIHJlbGlkLAorCQkJCQkJCQkJICBib29sIGlzX2F1dG92 YWN1dW0sCisJCQkJCQkJCQkgIGJvb2wgaXNfYWdncmVzc2l2ZSwKKwkJCQkJCQkJCSAgYm9v bCBpc193cmFwYXJvdW5kLAorCQkJCQkJCQkJICBib29sIGluZGV4X2NsZWFudXAsCisJCQkJ CQkJCQkgIGludDY0IHBhZ2VzX3JlbW92ZWQsCisJCQkJCQkJCQkgIGludDY0IHBhZ2VzX3Jl bWFpbiwKKwkJCQkJCQkJCSAgaW50NjQgcGFnZXNfc2Nhbm5lZCwKKwkJCQkJCQkJCSAgaW50 NjQgcGFnZXNfZnJvemVuLAorCQkJCQkJCQkJICBpbnQ2NCBwYWdlc19taXNzZWRfZGVhZCwK KwkJCQkJCQkJCSAgaW50NjQgcGFnZXNfbmV3X3Zpc2libGUsCisJCQkJCQkJCQkgIGludDY0 IHBhZ2VzX25ld19mcm96ZW4sCisJCQkJCQkJCQkgIGludDY0IHBhZ2VzX25ld192aXNpYmxl X2Zyb3plbiwKKwkJCQkJCQkJCSAgaW50NjQgdHVwbGVzX3JlbW92ZWQsCisJCQkJCQkJCQkg IGludDY0IHR1cGxlc19yZW1haW4sCisJCQkJCQkJCQkgIGludDY0IHR1cGxlc19ub3RfcmVt b3ZhYmxlLAorCQkJCQkJCQkJICBpbnQ2NCB0dXBsZXNfZnJvemVuLAorCQkJCQkJCQkJICBp bnQ2NCB0dXBsZXNfbWlzc2VkX2RlYWQsCisJCQkJCQkJCQkgIGludDMyIHJlbW92YWJsZV9j dXRvZmYsCisJCQkJCQkJCQkgIGludDMyIHJlbGZyb3plbnhpZF9hZHZhbmNlLAorCQkJCQkJ CQkJICBpbnQzMiByZWxtaW5teGlkX2FkdmFuY2UsCisJCQkJCQkJCQkgIGludDY0IGluZGV4 X3NjYW5zLAorCQkJCQkJCQkJICBpbnQzMiBpbmRleF9jb3VudCwKKwkJCQkJCQkJCSAgaW50 NjQgaW5kZXhfcGFnZXMsCisJCQkJCQkJCQkgIGludDY0IGluZGV4X3BhZ2VzX25ld2x5X2Rl bGV0ZWQsCisJCQkJCQkJCQkgIGludDY0IGluZGV4X3BhZ2VzX2RlbGV0ZWQsCisJCQkJCQkJ CQkgIGludDY0IGluZGV4X3BhZ2VzX2ZyZWUsCisJCQkJCQkJCQkgIGRvdWJsZSBpb19yZWFk X21zLAorCQkJCQkJCQkJICBkb3VibGUgaW9fd3JpdGVfbXMsCisJCQkJCQkJCQkgIGludDY0 IHdhbF9yZWNvcmRzLAorCQkJCQkJCQkJICBpbnQ2NCB3YWxfZnBpcywKKwkJCQkJCQkJCSAg aW50NjQgd2FsX2J5dGVzLAorCQkJCQkJCQkJICBkb3VibGUgY3B1X3VzZXIsCisJCQkJCQkJ CQkgIGRvdWJsZSBjcHVfc3lzdGVtLAorCQkJCQkJCQkJICBkb3VibGUgY3B1X2VsYXBzZWQp OworCitleHRlcm4gUEdETExJTVBPUlQgdmFjdXVtX2xvZ19ob29rX3R5cGUgdmFjdXVtX2xv Z19ob29rOworCiAjZW5kaWYJCQkJCQkJLyogVkFDVVVNX0ggKi8KLS0gCjIuNDcuMQoK --------------QtWVPH0ZWbTLUFo0bg5Mgqo7 Content-Type: text/x-patch; charset=UTF-8; name="v1-0002-checkpoint_log_hook.patch" Content-Disposition: attachment; filename="v1-0002-checkpoint_log_hook.patch" Content-Transfer-Encoding: base64 RnJvbSAyMGQwNTBlMzVjNGQ4ZDI0MTllMDFhODU1ZDBmMThlMWMyMTZlOTU5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogU2F0LCAyMSBEZWMgMjAyNCAxODo1MToyOCArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djEgMi8zXSBjaGVja3BvaW50X2xvZ19ob29rCgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90 cmFuc2FtL3hsb2cuYyB8IDUwICsrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0KIHNy Yy9pbmNsdWRlL2FjY2Vzcy94bG9nLmggICAgICAgICB8IDMwICsrKysrKysrKysrKysrKysr KysKIDIgZmlsZXMgY2hhbmdlZCwgNzUgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMKaW5kZXggNmY1ODQxMmJjYWIuLjNkYzRh MzRkNzg2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9nLmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5jCkBAIC02NTEsNiArNjUx LDggQEAgc3RhdGljIGJvb2wgdXBkYXRlTWluUmVjb3ZlcnlQb2ludCA9IHRydWU7CiBzdGF0 aWMgaW50CU15TG9ja05vID0gMDsKIHN0YXRpYyBib29sIGhvbGRpbmdBbGxMb2NrcyA9IGZh bHNlOwogCitjaGVja3BvaW50X2xvZ19ob29rX3R5cGUgY2hlY2twb2ludF9sb2dfaG9vayA9 IE5VTEw7CisKICNpZmRlZiBXQUxfREVCVUcKIHN0YXRpYyBNZW1vcnlDb250ZXh0IHdhbERl YnVnQ3h0ID0gTlVMTDsKICNlbmRpZgpAQCAtNjY3OCw3ICs2NjgwLDcgQEAgTG9nQ2hlY2tw b2ludFN0YXJ0KGludCBmbGFncywgYm9vbCByZXN0YXJ0cG9pbnQpCiAgKiBMb2cgZW5kIG9m IGEgY2hlY2twb2ludC4KICAqLwogc3RhdGljIHZvaWQKLUxvZ0NoZWNrcG9pbnRFbmQoYm9v bCByZXN0YXJ0cG9pbnQpCitMb2dDaGVja3BvaW50RW5kKGludCBmbGFncywgYm9vbCByZXN0 YXJ0cG9pbnQpCiB7CiAJbG9uZwkJd3JpdGVfbXNlY3MsCiAJCQkJc3luY19tc2VjcywKQEAg LTY3MDEsOSArNjcwMywxMSBAQCBMb2dDaGVja3BvaW50RW5kKGJvb2wgcmVzdGFydHBvaW50 KQogCiAJLyoKIAkgKiBBbGwgb2YgdGhlIHB1Ymxpc2hlZCB0aW1pbmcgc3RhdGlzdGljcyBh cmUgYWNjb3VudGVkIGZvci4gIE9ubHkKLQkgKiBjb250aW51ZSBpZiBhIGxvZyBtZXNzYWdl IGlzIHRvIGJlIHdyaXR0ZW4uCisJICogY29udGludWUgaWYgYSBsb2cgbWVzc2FnZSBpcyB0 byBiZSB3cml0dGVuLCBvciB3aXRoIGNoZWNrcG9pbnQKKwkgKiBsb2cgaG9vay4KIAkgKi8K LQlpZiAoIWxvZ19jaGVja3BvaW50cykKKwlpZiAoIWxvZ19jaGVja3BvaW50cyAmJgorCQko Y2hlY2twb2ludF9sb2dfaG9vayA9PSBOVUxMKSkKIAkJcmV0dXJuOwogCiAJdG90YWxfbXNl Y3MgPSBUaW1lc3RhbXBEaWZmZXJlbmNlTWlsbGlzZWNvbmRzKENoZWNrcG9pbnRTdGF0cy5j a3B0X3N0YXJ0X3QsCkBAIC02NzIxLDYgKzY3MjUsNDIgQEAgTG9nQ2hlY2twb2ludEVuZChi b29sIHJlc3RhcnRwb2ludCkKIAkJCUNoZWNrcG9pbnRTdGF0cy5ja3B0X3N5bmNfcmVsczsK IAlhdmVyYWdlX21zZWNzID0gKGxvbmcpICgoYXZlcmFnZV9zeW5jX3RpbWUgKyA5OTkpIC8g MTAwMCk7CiAKKwlpZiAoY2hlY2twb2ludF9sb2dfaG9vaykKKwl7CisJCWNoZWNrcG9pbnRf bG9nX2hvb2soCisJCQkJCQlDaGVja3BvaW50U3RhdHMuY2twdF9zdGFydF90LAkJCS8qIHN0 YXJ0X3RpbWUgKi8KKwkJCQkJCUNoZWNrcG9pbnRTdGF0cy5ja3B0X2VuZF90LAkJCQkvKiBl bmRfdGltZSAqLworCQkJCQkJKGZsYWdzICYgQ0hFQ0tQT0lOVF9JU19TSFVURE9XTiksCQkv KiBpc19zaHV0ZG93biAqLworCQkJCQkJKGZsYWdzICYgQ0hFQ0tQT0lOVF9FTkRfT0ZfUkVD T1ZFUlkpLAkvKiBpc19lbmRfb2ZfcmVjb3ZlcnkgKi8KKwkJCQkJCShmbGFncyAmIENIRUNL UE9JTlRfSU1NRURJQVRFKSwJCQkvKiBpc19pbW1lZGlhdGUgKi8KKwkJCQkJCShmbGFncyAm IENIRUNLUE9JTlRfRk9SQ0UpLAkJCQkvKiBpc19mb3JjZSAqLworCQkJCQkJKGZsYWdzICYg Q0hFQ0tQT0lOVF9XQUlUKSwJCQkJLyogaXNfd2FpdCAqLworCQkJCQkJKGZsYWdzICYgQ0hF Q0tQT0lOVF9DQVVTRV9YTE9HKSwJCS8qIGlzX3dhbCAqLworCQkJCQkJKGZsYWdzICYgQ0hF Q0tQT0lOVF9DQVVTRV9USU1FKSwJCS8qIGlzX3RpbWUgKi8KKwkJCQkJCShmbGFncyAmIENI RUNLUE9JTlRfRkxVU0hfQUxMKSwJCQkvKiBpc19mbHVzaF9hbGwgKi8KKwkJCQkJCUNoZWNr cG9pbnRTdGF0cy5ja3B0X2J1ZnNfd3JpdHRlbiwJCS8qIGJ1ZmZlcnNfd3JpdHRlbiAqLwor CQkJCQkJQ2hlY2twb2ludFN0YXRzLmNrcHRfc2xydV93cml0dGVuLAkJLyogc2xydV93cml0 dGVuICovCisJCQkJCQlDaGVja3BvaW50U3RhdHMuY2twdF9zZWdzX2FkZGVkLAkJLyogc2Vn c19hZGRlZCAqLworCQkJCQkJQ2hlY2twb2ludFN0YXRzLmNrcHRfc2Vnc19yZW1vdmVkLAkJ Lyogc2Vnc19yZW1vdmVkICovCisJCQkJCQlDaGVja3BvaW50U3RhdHMuY2twdF9zZWdzX3Jl Y3ljbGVkLAkJLyogc2Vnc19yZWN5Y2xlZCAqLworCQkJCQkJd3JpdGVfbXNlY3MsCQkJCQkJ CS8qIHdyaXRlX21zICovCisJCQkJCQlzeW5jX21zZWNzLAkJCQkJCQkJLyogc3luY19tcyAq LworCQkJCQkJdG90YWxfbXNlY3MsCQkJCQkJCS8qIHRvdGFsX21zICovCisJCQkJCQlDaGVj a3BvaW50U3RhdHMuY2twdF9zeW5jX3JlbHMsCQkJLyogc3luY19maWxlcyAqLworCQkJCQkJ bG9uZ2VzdF9tc2VjcywJCQkJCQkJLyogc3luY19sb25nZXN0X21zICovCisJCQkJCQlhdmVy YWdlX21zZWNzLAkJCQkJCQkvKiBzeW5jX2F2ZXJhZ2VfbXMgKi8KKwkJCQkJCVByZXZDaGVj a1BvaW50RGlzdGFuY2UsCQkJCQkvKiBkaXN0YW5jZV9wcmV2ICovCisJCQkJCQlDaGVja1Bv aW50RGlzdGFuY2VFc3RpbWF0ZSwJCQkJLyogZGlzdGFuY2VfZXN0ICovCisJCQkJCQlDb250 cm9sRmlsZS0+Y2hlY2tQb2ludCwJCQkJLyogbHNuICovCisJCQkJCQlDb250cm9sRmlsZS0+ Y2hlY2tQb2ludENvcHkucmVkbyk7CQkvKiByZWRvX2xzbiAqLworCX0KKworCS8qCisJICog T25seSB0aGUgYWN0dWFsIGxvZ2dpbmcgcmVtYWlucy4KKwkgKi8KKwlpZiAoIWxvZ19jaGVj a3BvaW50cykKKwkJcmV0dXJuOworCiAJLyoKIAkgKiBDb250cm9sRmlsZUxvY2sgaXMgbm90 IHJlcXVpcmVkIHRvIHNlZSBDb250cm9sRmlsZS0+Y2hlY2tQb2ludCBhbmQKIAkgKiAtPmNo ZWNrUG9pbnRDb3B5IGhlcmUgYXMgd2UgYXJlIHRoZSBvbmx5IHVwZGF0b3Igb2YgdGhvc2Ug dmFyaWFibGVzIGF0CkBAIC03MzQ5LDcgKzczODksNyBAQCBDcmVhdGVDaGVja1BvaW50KGlu dCBmbGFncykKIAkJVHJ1bmNhdGVTVUJUUkFOUyhHZXRPbGRlc3RUcmFuc2FjdGlvbklkQ29u c2lkZXJlZFJ1bm5pbmcoKSk7CiAKIAkvKiBSZWFsIHdvcmsgaXMgZG9uZTsgbG9nIGFuZCB1 cGRhdGUgc3RhdHMuICovCi0JTG9nQ2hlY2twb2ludEVuZChmYWxzZSk7CisJTG9nQ2hlY2tw b2ludEVuZChmbGFncywgZmFsc2UpOwogCiAJLyogUmVzZXQgdGhlIHByb2Nlc3MgdGl0bGUg Ki8KIAl1cGRhdGVfY2hlY2twb2ludF9kaXNwbGF5KGZsYWdzLCBmYWxzZSwgdHJ1ZSk7CkBA IC03ODE4LDcgKzc4NTgsNyBAQCBDcmVhdGVSZXN0YXJ0UG9pbnQoaW50IGZsYWdzKQogCQlU cnVuY2F0ZVNVQlRSQU5TKEdldE9sZGVzdFRyYW5zYWN0aW9uSWRDb25zaWRlcmVkUnVubmlu ZygpKTsKIAogCS8qIFJlYWwgd29yayBpcyBkb25lOyBsb2cgYW5kIHVwZGF0ZSBzdGF0cy4g Ki8KLQlMb2dDaGVja3BvaW50RW5kKHRydWUpOworCUxvZ0NoZWNrcG9pbnRFbmQoZmxhZ3Ms IHRydWUpOwogCiAJLyogUmVzZXQgdGhlIHByb2Nlc3MgdGl0bGUgKi8KIAl1cGRhdGVfY2hl Y2twb2ludF9kaXNwbGF5KGZsYWdzLCB0cnVlLCB0cnVlKTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy94bG9nLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCmluZGV4 IDM0YWQ0NmMwNjdiLi42YjdhNTNlOTdlMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNj ZXNzL3hsb2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCkBAIC0xODMsNiAr MTgzLDM2IEBAIHR5cGVkZWYgc3RydWN0IENoZWNrcG9pbnRTdGF0c0RhdGEKIAogZXh0ZXJu IFBHRExMSU1QT1JUIENoZWNrcG9pbnRTdGF0c0RhdGEgQ2hlY2twb2ludFN0YXRzOwogCisv KiBob29rIHRvIHN0b3JlIGFsbCBjaGVja3BvaW50LXJlbGF0ZWQgc3RhdHMgKi8KK3R5cGVk ZWYgdm9pZCAoKmNoZWNrcG9pbnRfbG9nX2hvb2tfdHlwZSkgKAorCQkJCQkJVGltZXN0YW1w VHogc3RhcnRfdGltZSwKKwkJCQkJCVRpbWVzdGFtcFR6IGVuZF90aW1lLAorCQkJCQkJYm9v bCBpc19zaHV0ZG93biwKKwkJCQkJCWJvb2wgaXNfZW5kX29mX3JlY292ZXJ5LAorCQkJCQkJ Ym9vbCBpc19pbW1lZGlhdGUsCisJCQkJCQlib29sIGlzX2ZvcmNlLAorCQkJCQkJYm9vbCBp c193YWl0LAorCQkJCQkJYm9vbCBpc193YWwsCisJCQkJCQlib29sIGlzX3RpbWUsCisJCQkJ CQlib29sIGlzX2ZsdXNoX2FsbCwKKwkJCQkJCWludCBidWZmZXJzX3dyaXR0ZW4sCisJCQkJ CQlpbnQgc2xydV93cml0dGVuLAorCQkJCQkJaW50IHNlZ3NfYWRkZWQsCisJCQkJCQlpbnQg c2Vnc19yZW1vdmVkLAorCQkJCQkJaW50IHNlZ3NfcmVjeWNsZWQsCisJCQkJCQlsb25nIHdy aXRlX21zLAorCQkJCQkJbG9uZyBzeW5jX21zLAorCQkJCQkJbG9uZyB0b3RhbF9tcywKKwkJ CQkJCWludCBzeW5jX2ZpbGVzLAorCQkJCQkJbG9uZyBzeW5jX2xvbmdlc3RfbXMsCisJCQkJ CQlsb25nIHN5bmNfYXZlcmFnZV9tcywKKwkJCQkJCWRvdWJsZSBkaXN0YW5jZV9wcmV2LAor CQkJCQkJZG91YmxlIGRpc3RhbmNlX2VzdCwKKwkJCQkJCVhMb2dSZWNQdHIgbHNuLAorCQkJ CQkJWExvZ1JlY1B0ciByZWRvX2xzbik7CisKK2V4dGVybiBQR0RMTElNUE9SVCBjaGVja3Bv aW50X2xvZ19ob29rX3R5cGUgY2hlY2twb2ludF9sb2dfaG9vazsKKwogLyoKICAqIEdldFdB TEF2YWlsYWJpbGl0eSByZXR1cm4gY29kZXMKICAqLwotLSAKMi40Ny4xCgo= --------------QtWVPH0ZWbTLUFo0bg5Mgqo7 Content-Type: text/x-patch; charset=UTF-8; name="v1-0003-stats_history-extension.patch" Content-Disposition: attachment; filename="v1-0003-stats_history-extension.patch" Content-Transfer-Encoding: base64 RnJvbSAxYmMyMzRkN2Y0NTdhNzAzYjA5YTNkYzMyMjM1M2EzNDQ1NDhhOGVjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4K RGF0ZTogU2F0LCAyMSBEZWMgMjAyNCAxODo1MjowNyArMDEwMApTdWJqZWN0OiBbUEFUQ0gg djEgMy8zXSBzdGF0c19oaXN0b3J5IGV4dGVuc2lvbgoKLS0tCiBjb250cmliL01ha2VmaWxl ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDEgKwogY29udHJpYi9zdGF0c19o aXN0b3J5L01ha2VmaWxlICAgICAgICAgICAgICAgfCAgIDMxICsKIGNvbnRyaWIvc3RhdHNf aGlzdG9yeS9tZXNvbi5idWlsZCAgICAgICAgICAgIHwgICA0NCArCiBjb250cmliL3N0YXRz X2hpc3Rvcnkvc3RhdHNfaGlzdG9yeS0tMS4wLnNxbCB8ICAgOTUgKysKIGNvbnRyaWIvc3Rh dHNfaGlzdG9yeS9zdGF0c19oaXN0b3J5LmMgICAgICAgIHwgMTE3NSArKysrKysrKysrKysr KysrKysKIGNvbnRyaWIvc3RhdHNfaGlzdG9yeS9zdGF0c19oaXN0b3J5LmNvbnRyb2wgIHwg ICAgNSArCiA2IGZpbGVzIGNoYW5nZWQsIDEzNTEgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IGNvbnRyaWIvc3RhdHNfaGlzdG9yeS9NYWtlZmlsZQogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvc3RhdHNfaGlzdG9yeS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUg MTAwNjQ0IGNvbnRyaWIvc3RhdHNfaGlzdG9yeS9zdGF0c19oaXN0b3J5LS0xLjAuc3FsCiBj cmVhdGUgbW9kZSAxMDA2NDQgY29udHJpYi9zdGF0c19oaXN0b3J5L3N0YXRzX2hpc3Rvcnku YwogY3JlYXRlIG1vZGUgMTAwNjQ0IGNvbnRyaWIvc3RhdHNfaGlzdG9yeS9zdGF0c19oaXN0 b3J5LmNvbnRyb2wKCmRpZmYgLS1naXQgYS9jb250cmliL01ha2VmaWxlIGIvY29udHJpYi9N YWtlZmlsZQppbmRleCA5NTI4NTVkOWI2MS4uMTFlZGMwNDQ4MjAgMTAwNjQ0Ci0tLSBhL2Nv bnRyaWIvTWFrZWZpbGUKKysrIGIvY29udHJpYi9NYWtlZmlsZQpAQCAtNDQsNiArNDQsNyBA QCBTVUJESVJTID0gXAogCQlwb3N0Z3Jlc19mZHcJXAogCQlzZWcJCVwKIAkJc3BpCQlcCisJ CXN0YXRzX2hpc3RvcnkJXAogCQl0YWJsZWZ1bmMJXAogCQl0Y24JCVwKIAkJdGVzdF9kZWNv ZGluZwlcCmRpZmYgLS1naXQgYS9jb250cmliL3N0YXRzX2hpc3RvcnkvTWFrZWZpbGUgYi9j b250cmliL3N0YXRzX2hpc3RvcnkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmViMTYwYWFiNjA3Ci0tLSAvZGV2L251bGwKKysrIGIvY29udHJp Yi9zdGF0c19oaXN0b3J5L01ha2VmaWxlCkBAIC0wLDAgKzEsMzEgQEAKKyMgY29udHJpYi9z dGF0c19oaXN0b3J5L01ha2VmaWxlCisKK01PRFVMRV9iaWcgPSBzdGF0c19oaXN0b3J5CitP QkpTID0gXAorCSQoV0lOMzJSRVMpIFwKKwlzdGF0c19oaXN0b3J5Lm8KKworRVhURU5TSU9O ID0gc3RhdHNfaGlzdG9yeQorREFUQSA9IHN0YXRzX2hpc3RvcnktLTEuMC5zcWwKK1BHRklM RURFU0MgPSAic3RhdHNfaGlzdG9yeSAtIHZhY3V1bSBoaXN0b3J5IGFuZCBzdGF0cyIKKwor TERGTEFHU19TTCArPSAkKGZpbHRlciAtbG0sICQoTElCUykpCisKK1JFR1JFU1NfT1BUUyA9 IAorUkVHUkVTUyA9IAorIyBEaXNhYmxlZCBiZWNhdXNlIHRoZXNlIHRlc3RzIHJlcXVpcmUg InNoYXJlZF9wcmVsb2FkX2xpYnJhcmllcz1wZ19zdGF0X3N0YXRlbWVudHMiLAorIyB3aGlj aCB0eXBpY2FsIGluc3RhbGxjaGVjayB1c2VycyBkbyBub3QgaGF2ZSAoZS5nLiBidWlsZGZh cm0gY2xpZW50cykuCitOT19JTlNUQUxMQ0hFQ0sgPSAxCisKK1RBUF9URVNUUyA9IDEKKwor aWZkZWYgVVNFX1BHWFMKK1BHX0NPTkZJRyA9IHBnX2NvbmZpZworUEdYUyA6PSAkKHNoZWxs ICQoUEdfQ09ORklHKSAtLXBneHMpCitpbmNsdWRlICQoUEdYUykKK2Vsc2UKK3N1YmRpciA9 IGNvbnRyaWIvc3RhdHNfaGlzdG9yeQordG9wX2J1aWxkZGlyID0gLi4vLi4KK2luY2x1ZGUg JCh0b3BfYnVpbGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKK2luY2x1ZGUgJCh0b3Bfc3Jj ZGlyKS9jb250cmliL2NvbnRyaWItZ2xvYmFsLm1rCitlbmRpZgpkaWZmIC0tZ2l0IGEvY29u dHJpYi9zdGF0c19oaXN0b3J5L21lc29uLmJ1aWxkIGIvY29udHJpYi9zdGF0c19oaXN0b3J5 L21lc29uLmJ1aWxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43 ZTU2YTAwZTBlNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3RhdHNfaGlzdG9yeS9t ZXNvbi5idWlsZApAQCAtMCwwICsxLDQ0IEBACisjIENvcHlyaWdodCAoYykgMjAyMi0yMDI0 LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit2YWN1dW1fc3RhdHNf c291cmNlcyA9IGZpbGVzKAorICAnc3RhdHNfaGlzdG9yeS5jJywKKykKKworaWYgaG9zdF9z eXN0ZW0gPT0gJ3dpbmRvd3MnCisgIHBnX3N0YXRfc3RhdGVtZW50c19zb3VyY2VzICs9IHJj X2xpYl9nZW4ucHJvY2Vzcyh3aW4zMnZlcl9yYywgZXh0cmFfYXJnczogWworICAgICctLU5B TUUnLCAnc3RhdHNfaGlzdG9yeScsCisgICAgJy0tRklMRURFU0MnLCAnc3RhdHNfaGlzdG9y eSAtIGhpc3Rvcnkgb2Ygc3RhdGlzdGljcyBmcm9tIGltcG9ydGFudCBtYWludGVuYW5jZSB0 YXNrcycsXSkKK2VuZGlmCisKK3BnX3N0YXRfc3RhdGVtZW50cyA9IHNoYXJlZF9tb2R1bGUo J3N0YXRzX2hpc3RvcnknLAorICBwZ19zdGF0X3N0YXRlbWVudHNfc291cmNlcywKKyAga3dh cmdzOiBjb250cmliX21vZF9hcmdzICsgeworICAgICdkZXBlbmRlbmNpZXMnOiBjb250cmli X21vZF9hcmdzWydkZXBlbmRlbmNpZXMnXSwKKyAgfSwKKykKK2NvbnRyaWJfdGFyZ2V0cyAr PSBwZ19zdGF0X3N0YXRlbWVudHMKKworaW5zdGFsbF9kYXRhKAorICAnc3RhdHNfaGlzdG9y eS5jb250cm9sJywKKyAgJ3N0YXRzX2hpc3RvcnktLTEuMC5zcWwnCisgIGt3YXJnczogY29u dHJpYl9kYXRhX2FyZ3MsCispCisKK3Rlc3RzICs9IHsKKyAgJ25hbWUnOiAnc3RhdHNfaGlz dG9yeScsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291cmNlX2RpcigpLAorICAnYmQnOiBt ZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAncmVncmVzcyc6IHsKKyAgICAnc3FsJzog WworICAgIF0sCisgICAgJ3JlZ3Jlc3NfYXJncyc6IFsnLS10ZW1wLWNvbmZpZycsIGZpbGVz KCdzdGF0c19oaXN0b3J5LmNvbmYnKV0sCisgICAgIyBEaXNhYmxlZCBiZWNhdXNlIHRoZXNl IHRlc3RzIHJlcXVpcmUKKyAgICAjICJzaGFyZWRfcHJlbG9hZF9saWJyYXJpZXM9cGdfc3Rh dF9zdGF0ZW1lbnRzIiwgd2hpY2ggdHlwaWNhbAorICAgICMgcnVubmluZ2NoZWNrIHVzZXJz IGRvIG5vdCBoYXZlIChlLmcuIGJ1aWxkZmFybSBjbGllbnRzKS4KKyAgICAncnVubmluZ2No ZWNrJzogZmFsc2UsCisgIH0sCisgICd0YXAnOiB7CisgICAgJ3Rlc3RzJzogWworICAgIF0s CisgIH0sCit9CmRpZmYgLS1naXQgYS9jb250cmliL3N0YXRzX2hpc3Rvcnkvc3RhdHNfaGlz dG9yeS0tMS4wLnNxbCBiL2NvbnRyaWIvc3RhdHNfaGlzdG9yeS9zdGF0c19oaXN0b3J5LS0x LjAuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNjNlYzMz Yzg4MgotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvc3RhdHNfaGlzdG9yeS9zdGF0c19o aXN0b3J5LS0xLjAuc3FsCkBAIC0wLDAgKzEsOTUgQEAKKy8qIGNvbnRyaWIvc3RhdHNfaGlz dG9yeS9zdGF0c19oaXN0b3J5LS0xLjAuc3FsICovCisKKy0tIGNvbXBsYWluIGlmIHNjcmlw dCBpcyBzb3VyY2VkIGluIHBzcWwsIHJhdGhlciB0aGFuIHZpYSBBTFRFUiBFWFRFTlNJT04K K1xlY2hvIFVzZSAiQUxURVIgRVhURU5TSU9OIHN0YXRzX2hpc3RvcnkgVVBEQVRFIFRPICcx LjAnIiB0byBsb2FkIHRoaXMgZmlsZS4gXHF1aXQKKworLyogY3JlYXRlIHRoZSBmdW5jdGlv biAqLworQ1JFQVRFIEZVTkNUSU9OIHZhY3V1bV9oaXN0b3J5KAorICAgIE9VVCBzdGFydF90 aW1lIHRpbWVzdGFtcHR6LAorICAgIE9VVCBlbmRfdGltZSB0aW1lc3RhbXB0eiwKKyAgICBP VVQgZGJpZCBvaWQsCisgICAgT1VUIHJlbGlkIHJlZ2NsYXNzLAorICAgIE9VVCBpc19hdXRv dmFjdXVtIGJvb2wsCisgICAgT1VUIGlzX2FnZ3Jlc3NpdmUgYm9vbCwKKyAgICBPVVQgaXNf d3JhcGFyb3VuZCBib29sLAorICAgIE9VVCBpbmRleF9jbGVhbnVwIGJvb2wsCisgICAgT1VU IHBhZ2VzX3JlbW92ZWQgYmlnaW50LAorICAgIE9VVCBwYWdlc19yZW1haW4gYmlnaW50LAor ICAgIE9VVCBwYWdlc19zY2FubmVkIGJpZ2ludCwKKyAgICBPVVQgcGFnZXNfZnJvemVuIGJp Z2ludCwKKyAgICBPVVQgcGFnZXNfbWlzc2VkX2RlYWQgYmlnaW50LAorICAgIE9VVCBwYWdl c19uZXdfdmlzaWJsZSBiaWdpbnQsCisgICAgT1VUIHBhZ2VzX25ld19mcm96ZW4gYmlnaW50 LAorICAgIE9VVCBwYWdlc19uZXdfdmlzaWJsZV9mcm96ZW4gYmlnaW50LAorICAgIE9VVCB0 dXBsZXNfcmVtb3ZlZCBiaWdpbnQsCisgICAgT1VUIHR1cGxlc19yZW1haW4gYmlnaW50LAor ICAgIE9VVCB0dXBsZXNfbm90X3JlbW92YWJsZSBiaWdpbnQsCisgICAgT1VUIHR1cGxlc19m cm96ZW4gYmlnaW50LAorICAgIE9VVCB0dXBsZXNfbWlzc2VkX2RlYWQgYmlnaW50LAorICAg IE9VVCByZW1vdmFibGVfY3V0b2ZmIGludCwKKyAgICBPVVQgcmVsZnJvemVueGlkX2FkdmFu Y2UgaW50LAorICAgIE9VVCByZWxtaW5teGlkX2FkdmFuY2UgaW50LAorICAgIE9VVCBpbmRl eF9zY2FucyBiaWdpbnQsCisgICAgT1VUIGluZGV4X2NvdW50IGludCwKKyAgICBPVVQgaW5k ZXhfcGFnZXMgYmlnaW50LAorICAgIE9VVCBpbmRleF9wYWdlc19uZXdseV9kZWxldGVkIGJp Z2ludCwKKyAgICBPVVQgaW5kZXhfcGFnZXNfZGVsZXRlZCBiaWdpbnQsCisgICAgT1VUIGlu ZGV4X3BhZ2VzX2ZyZWUgYmlnaW50LAorICAgIE9VVCBpb19yZWFkX21zIGZsb2F0LAorICAg IE9VVCBpb193cml0ZV9tcyBmbG9hdCwKKyAgICBPVVQgd2FsX3JlY29yZHMgYmlnaW50LAor ICAgIE9VVCB3YWxfZnBpcyBiaWdpbnQsCisgICAgT1VUIHdhbF9ieXRlcyBiaWdpbnQsCisg ICAgT1VUIGNwdV91c2VyIGZsb2F0LAorICAgIE9VVCBjcHVfc3lzdGVtIGZsb2F0LAorICAg IE9VVCBjcHVfZWxhcHNlZCBmbG9hdCkKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAnTU9E VUxFX1BBVEhOQU1FJywgJ3ZhY3V1bV9oaXN0b3J5XzFfMCcKK0xBTkdVQUdFIEMgU1RSSUNU IFZPTEFUSUxFIFBBUkFMTEVMIFNBRkU7CisKK0NSRUFURSBWSUVXIHZhY3V1bV9oaXN0b3J5 IEFTCisgIFNFTEVDVCAqIEZST00gdmFjdXVtX2hpc3RvcnkoKTsKKworR1JBTlQgU0VMRUNU IE9OIHZhY3V1bV9oaXN0b3J5IFRPIFBVQkxJQzsKKworCitDUkVBVEUgRlVOQ1RJT04gY2hl Y2twb2ludF9oaXN0b3J5KAorICAgIE9VVCBzdGFydF90aW1lIHRpbWVzdGFtcHR6LAorICAg IE9VVCBlbmRfdGltZSB0aW1lc3RhbXB0eiwKKyAgICBPVVQgaXNfc2h1dGRvd24gYm9vbCwK KyAgICBPVVQgaXNfZW5kX29mX3JlY292ZXJ5IGJvb2wsCisgICAgT1VUIGlzX2ltbWVkaWF0 ZSBib29sLAorICAgIE9VVCBpc19mb3JjZSBib29sLAorICAgIE9VVCBpc193YWl0IGJvb2ws CisgICAgT1VUIGlzX3dhbCBib29sLAorICAgIE9VVCBpc190aW1lIGJvb2wsCisgICAgT1VU IGlzX2ZsdXNoX2FsbCBib29sLAorICAgIE9VVCBidWZmZXJzX3dyaXR0ZW4gaW50LAorICAg IE9VVCBzbHJ1X3dyaXR0ZW4gaW50LAorICAgIE9VVCBzZWdzX2FkZGVkIGludCwKKyAgICBP VVQgc2Vnc19yZW1vdmVkIGludCwKKyAgICBPVVQgc2Vnc19yZWN5Y2xlZCBpbnQsCisgICAg T1VUIHdyaXRlX21zIGJpZ2ludCwKKyAgICBPVVQgc3luY19tcyBiaWdpbnQsCisgICAgT1VU IHRvdGFsX21zIGJpZ2ludCwKKyAgICBPVVQgc3luY19maWxlcyBpbnQsCisgICAgT1VUIHN5 bmNfbG9uZ2VzdF9tcyBiaWdpbnQsCisgICAgT1VUIHN5bmNfYXZlcmFnZV9tcyBiaWdpbnQs CisgICAgT1VUIGRpc3RhbmNlX3ByZXYgZG91YmxlIHByZWNpc2lvbiwKKyAgICBPVVQgZGlz dGFuY2VfZXN0IGRvdWJsZSBwcmVjaXNpb24sCisgICAgT1VUIGxzbiBwZ19sc24sCisgICAg T1VUIHJlZG9fbHNuIHBnX2xzbikKK1JFVFVSTlMgU0VUT0YgcmVjb3JkCitBUyAnTU9EVUxF X1BBVEhOQU1FJywgJ2NoZWNrcG9pbnRfaGlzdG9yeV8xXzAnCitMQU5HVUFHRSBDIFNUUklD VCBWT0xBVElMRSBQQVJBTExFTCBTQUZFOworCitDUkVBVEUgVklFVyBjaGVja3BvaW50X2hp c3RvcnkgQVMKKyAgU0VMRUNUICogRlJPTSBjaGVja3BvaW50X2hpc3RvcnkoKTsKKworR1JB TlQgU0VMRUNUIE9OIGNoZWNrcG9pbnRfaGlzdG9yeSBUTyBQVUJMSUM7CisKKworQ1JFQVRF IEZVTkNUSU9OIHN0YXRzX2hpc3RvcnlfcmVzZXQoKQorUkVUVVJOUyB2b2lkCitBUyAnTU9E VUxFX1BBVEhOQU1FJywgJ3N0YXRzX2hpc3RvcnlfcmVzZXQnCitMQU5HVUFHRSBDIFNUUklD VCBWT0xBVElMRSBQQVJBTExFTCBTQUZFOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9zdGF0c19o aXN0b3J5L3N0YXRzX2hpc3RvcnkuYyBiL2NvbnRyaWIvc3RhdHNfaGlzdG9yeS9zdGF0c19o aXN0b3J5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQ3MTFl YzhkOGVlCi0tLSAvZGV2L251bGwKKysrIGIvY29udHJpYi9zdGF0c19oaXN0b3J5L3N0YXRz X2hpc3RvcnkuYwpAQCAtMCwwICsxLDExNzUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICoKKyAqIHN0YXRzX2hpc3RvcnkuYworICoJCWhpc3Rvcnkgb2Ygc3RhdGlzdGljcyBhYm91 dCBwYXN0IHJ1bnMgb2YgbWFpbnRlbmFuY2Ugb3BlcmF0aW9ucworICoKKyAqIEluZm9ybWF0 aW9uIGFib3V0IHJ1bnMgb2YgaW1wb3J0YW50IG1haW50ZW5hbmNlIG9wZXJhdGlvbnMgKGxp a2UgdmFjdXVtCisgKiBvciBjaGVja3BvaW50KSBhcmUgY29sbGVjdGVkIHVzaW5nIGhvb2tz LCBhbmQgc3RvcmVkIGluIGEgY2lyY3VsYXIgcXVldWUKKyAqIHdpdGggZml4ZWQgc2l6ZS4g QWZ0ZXIgdGhlIHF1ZXVlIGdldHMgZnVsbCwgb2xkIGVudHJpZXMgYXJlIG92ZXJ3cml0dGVu LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIGNvbnRyaWIv c3RhdHNfaGlzdG9yeS9zdGF0c19oaXN0b3J5LmMKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqLworI2luY2x1ZGUgInBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MveGxv Zy5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfYXV0aGlkLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ19kYXRhYmFzZS5oIgorI2luY2x1ZGUgImNhdGFsb2cvb2JqZWN0YWNjZXNzLmgiCisj aW5jbHVkZSAiY29tbWFuZHMvdmFjdXVtLmgiCisjaW5jbHVkZSAiZnVuY2FwaS5oIgorI2lu Y2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCisj aW5jbHVkZSAic3RvcmFnZS9pcGMuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2x3bG9jay5oIgor I2luY2x1ZGUgInRjb3AvdXRpbGl0eS5oIgorI2luY2x1ZGUgInV0aWxzL2FjbC5oIgorI2lu Y2x1ZGUgInV0aWxzL3BnX2xzbi5oIgorI2luY2x1ZGUgInV0aWxzL3RpbWVzdGFtcC5oIgor CisKK1BHX01PRFVMRV9NQUdJQzsKKworLyogTG9jYXRpb24gb2YgcGVybWFuZW50IHN0YXRz IGZpbGUgKHZhbGlkIHdoZW4gZGF0YWJhc2UgaXMgc2h1dCBkb3duKSAqLworI2RlZmluZSBT VEFUU19ISVNUT1JZX0RVTVBfRklMRQlQR1NUQVRfU1RBVF9QRVJNQU5FTlRfRElSRUNUT1JZ ICIvc3RhdHNfaGlzdG9yeS5zdGF0IgorCisvKiBNYWdpYyBudW1iZXIgaWRlbnRpZnlpbmcg dGhlIHN0YXRzIGZpbGUgZm9ybWF0IChyYW5kb20gdmFsdWUpICovCitzdGF0aWMgY29uc3Qg dWludDMyIFNUQVRTX0hJU1RPUllfRklMRV9IRUFERVIgPSAweDZjMzA5NDYxOworCisvKiBQ b3N0Z3JlU1FMIG1ham9yIHZlcnNpb24gbnVtYmVyLCBjaGFuZ2VzIGluIHdoaWNoIGludmFs aWRhdGUgYWxsIGVudHJpZXMgKi8KK3N0YXRpYyBjb25zdCB1aW50MzIgU1RBVFNfUEdfTUFK T1JfVkVSU0lPTiA9IFBHX1ZFUlNJT05fTlVNIC8gMTAwOworCisvKiBUeXBlIG9mIGVudHJ5 IGFkZGVkIHRvIHRoZSBxdWV1ZS4gKi8KK3R5cGVkZWYgZW51bSBFbnRyeVR5cGUKK3sKKwlF TlRSWV9WQUNVVU0sCisJRU5UUllfQ0hFQ0tQT0lOVAorfSBFbnRyeVR5cGU7CisKK3R5cGVk ZWYgc3RydWN0IEVudHJ5Cit7CisJRW50cnlUeXBlCXR5cGU7CisJaW50MzIJCWxlbjsJLyog aW5jbHVkZXMgdGhlIEVudHJ5IGhlYWRlciwgbm8gYWxpZ25tZW50ICovCit9IEVudHJ5Owor CisvKiBJbmZvcm1hdGlvbiBhYm91dCBvbmUgdmFjdXVtIHJ1biwgZmllbGRzIG1hdGNoIHRo ZSB2YWN1dW1fbG9nX2hvb2tfdHlwZS4gKi8KK3R5cGVkZWYgc3RydWN0IFZhY3V1bUVudHJ5 Cit7CisJRW50cnkJCWhkcjsKKworCU9pZAkJCWRiaWQ7CisJT2lkCQkJcmVsaWQ7CisKKwlU aW1lc3RhbXBUeglzdGFydF90aW1lOworCVRpbWVzdGFtcFR6CWVuZF90aW1lOworCisJYm9v bAkJaXNfYXV0b3ZhY3V1bTsKKwlib29sCQlpc19hZ2dyZXNzaXZlOworCWJvb2wJCWlzX3dy YXBhcm91bmQ7CisJYm9vbAkJaW5kZXhfY2xlYW51cDsKKworCWludDY0CQlwYWdlc19yZW1v dmVkOworCWludDY0CQlwYWdlc19yZW1haW47CisJaW50NjQJCXBhZ2VzX3NjYW5uZWQ7CisJ aW50NjQJCXBhZ2VzX2Zyb3plbjsKKwlpbnQ2NAkJcGFnZXNfbWlzc2VkX2RlYWQ7CisJaW50 NjQJCXBhZ2VzX25ld192aXNpYmxlOworCWludDY0CQlwYWdlc19uZXdfZnJvemVuOworCWlu dDY0CQlwYWdlc19uZXdfdmlzaWJsZV9mcm96ZW47CisKKwlpbnQ2NAkJdHVwbGVzX3JlbW92 ZWQ7CisJaW50NjQJCXR1cGxlc19yZW1haW47CisJaW50NjQJCXR1cGxlc19ub3RfcmVtb3Zh YmxlOworCWludDY0CQl0dXBsZXNfZnJvemVuOworCWludDY0CQl0dXBsZXNfbWlzc2VkX2Rl YWQ7CisKKwlpbnQzMgkJcmVtb3ZhYmxlX2N1dG9mZjsKKwlpbnQzMgkJcmVsZnJvemVueGlk X2FkdmFuY2U7CisJaW50MzIJCXJlbG1pbm14aWRfYWR2YW5jZTsKKworCWludDY0CQlpbmRl eF9zY2FuczsKKwlpbnQzMgkJaW5kZXhfY291bnQ7CisJaW50NjQJCWluZGV4X3BhZ2VzOwor CWludDY0CQlpbmRleF9wYWdlc19uZXdseV9kZWxldGVkOworCWludDY0CQlpbmRleF9wYWdl c19kZWxldGVkOworCWludDY0CQlpbmRleF9wYWdlc19mcmVlOworCisJZG91YmxlCQlpb19y ZWFkX21zOworCWRvdWJsZQkJaW9fd3JpdGVfbXM7CisKKwlpbnQ2NAkJd2FsX3JlY29yZHM7 CisJaW50NjQJCXdhbF9mcGlzOworCWludDY0CQl3YWxfYnl0ZXM7CisKKwlkb3VibGUJCWNw dV91c2VyOworCWRvdWJsZQkJY3B1X3N5c3RlbTsKKwlkb3VibGUJCWNwdV9lbGFwc2VkOwor fSBWYWN1dW1FbnRyeTsKKworLyogSW5mb3JtYXRpb24gYWJvdXQgb25lIGNoZWNrcG9pbnQs IGZpZWxkcyBtYXRjaCB0aGUgY2hlY2twb2ludF9sb2dfaG9va190eXBlLiAqLwordHlwZWRl ZiBzdHJ1Y3QgQ2hlY2twb2ludEVudHJ5Cit7CisJRW50cnkJCWhkcjsKKworCVRpbWVzdGFt cFR6CXN0YXJ0X3RpbWU7CisJVGltZXN0YW1wVHoJZW5kX3RpbWU7CisKKwlib29sCQlpc19z aHV0ZG93bjsKKwlib29sCQlpc19lbmRfb2ZfcmVjb3Zlcnk7CisJYm9vbAkJaXNfaW1tZWRp YXRlOworCWJvb2wJCWlzX2ZvcmNlOworCWJvb2wJCWlzX3dhaXQ7CisJYm9vbAkJaXNfd2Fs OworCWJvb2wJCWlzX3RpbWU7CisJYm9vbAkJaXNfZmx1c2hfYWxsOworCisJaW50CQkJYnVm ZmVyc193cml0dGVuOworCWludAkJCXNscnVfd3JpdHRlbjsKKwlpbnQJCQlzZWdzX2FkZGVk OworCWludAkJCXNlZ3NfcmVtb3ZlZDsKKwlpbnQJCQlzZWdzX3JlY3ljbGVkOworCisJbG9u ZwkJd3JpdGVfbXM7CisJbG9uZwkJc3luY19tczsKKwlsb25nCQl0b3RhbF9tczsKKworCWlu dAkJCXN5bmNfZmlsZXM7CisJbG9uZwkJc3luY19sb25nZXN0X21zOworCWxvbmcJCXN5bmNf YXZlcmFnZV9tczsKKworCWRvdWJsZQkJZGlzdGFuY2VfcHJldjsKKwlkb3VibGUJCWRpc3Rh bmNlX2VzdDsKKworCVhMb2dSZWNQdHIJbHNuOworCVhMb2dSZWNQdHIJcmVkb19sc247Cit9 IENoZWNrcG9pbnRFbnRyeTsKKworLyoKKyAqIEdsb2JhbCBzaGFyZWQgc3RhdGUgLSBjaXJj dWxhciBxdWV1ZSBvZiBlbnRyaWVzLgorICoKKyAqIHF1ZXVlU2l6ZSAtIFNpemUgb2YgdGhl IHF1ZXVlLCBpbiBieXRlcy4KKyAqCisgKiBxdWV1ZVN0YXJ0L3F1ZXVlTmV4dCAtIEJ5dGUg cG9zaXRpb25zIG9mIHRoZSBmaXJzdCB1c2VkL2ZyZWUgYnl0ZS4gVGhlCisgKiB2YWx1ZXMg YXJlIGdyb3dpbmcsIGkuZS4gbm90IHN1YmplY3QgdG8gbW9kdWxvIHNpemUuCisgKgorICog VGhlIHNpemUgYW5kIHBvc2l0aW9ucyBhcmUgYWx3YXlzIG11bHRpcGxlcyBvZiBNQVhBTElH TihFbnRyeSBzaXplKS4gVGhpcworICogbWFrZXMgdGhlIHF1ZXVlIG1hbmFnZW1lbnQgZWFz aWVyIC0gaXQgbWVhbnMgdGhlIGluLXF1ZXVlIGVudHJpZXMgYXJlIGFsd2F5cworICogcHJv cGVybHkgYWxpZ25lZCBhbmQgY2FuIGJlIHJlZmVyZW5jZWQgZGlyZWN0bHksIGFuZCB0aGUg aGVhZGVyIGNhbiBuZXZlcgorICogYmUgInNwbGl0IiBhdCB0aGUgZW5kIG9mIHRoZSBxdWV1 ZS4gSXQgYWxzbyBtYWtlcyBpdCBlYXNpZXIgdG8gY2FsY3VsYXRlCisgKiBmcmVlIHNwYWNl LCBiZWNhdXNlIHdlIGNhbiBzaW1wbHkgc3VidHJhY3QgdGhlIHN0YXJ0L2VuZCBvZmZzZXRz ICh3ZSBkb24ndAorICogbmVlZCB0byB3b3JyeSBhYm91dCBub3Qgc3BsaXR0aW5nIHRoZSBo ZWFkZXIsIGV0Yy4pCisgKgorICogRW50cmllcyBhcmUgZXZpY3RlZCBmcm9tIHRoZSBvbGRl c3QsIHVzaW5nIHRoZSBlbmQgdGltZXN0YW1wLgorICovCit0eXBlZGVmIHN0cnVjdCBTdGF0 c0hpc3RvcnlTaGFyZWRTdGF0ZQoreworCUxXTG9jawkgICAqbG9jazsJCQkvKiBwcm90ZWN0 cyBxdWV1ZSBtb2RpZmljYXRpb24gKi8KKwlpbnQ2NAkJcXVldWVTdGFydDsJCS8qIGZpcnN0 IHVzZWQgYnl0ZSAqLworCWludDY0CQlxdWV1ZU5leHQ7CQkvKiBmaXJzdCBmcmVlIGJ5dGUg Ki8KKwlpbnQ2NAkJcXVldWVTaXplOwkJLyogcXVldWUgY2FwYWNpdHkgKi8KKwljaGFyCQlx dWV1ZVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOwkvKiBxdWV1ZSBkYXRhICovCit9IFN0YXRz SGlzdG9yeVNoYXJlZFN0YXRlOworCisvKiBzaXplIG9mIHRoZSBzaGFyZWQgc3BhY2UgKHdp dGggaGlzdG9yeSBldGMuKSAqLworc3RhdGljIGludAkJc3RhdHNIaXN0b3J5U2l6ZU1COwor CisvKiBTYXZlZCBob29rIHZhbHVlcyBpbiBjYXNlIG9mIHVubG9hZCAqLworc3RhdGljIHNo bWVtX3JlcXVlc3RfaG9va190eXBlIHByZXZfc2htZW1fcmVxdWVzdF9ob29rID0gTlVMTDsK K3N0YXRpYyBzaG1lbV9zdGFydHVwX2hvb2tfdHlwZSBwcmV2X3NobWVtX3N0YXJ0dXBfaG9v ayA9IE5VTEw7CitzdGF0aWMgdmFjdXVtX2xvZ19ob29rX3R5cGUgcHJldl92YWN1dW1fbG9n X2hvb2sgPSBOVUxMOworc3RhdGljIGNoZWNrcG9pbnRfbG9nX2hvb2tfdHlwZSBwcmV2X2No ZWNrcG9pbnRfbG9nX2hvb2sgPSBOVUxMOworc3RhdGljIG9iamVjdF9hY2Nlc3NfaG9va190 eXBlIHByZXZfb2JqZWN0X2FjY2Vzc19ob29rID0gTlVMTDsKKworLyogTGlua3MgdG8gc2hh cmVkIG1lbW9yeSBzdGF0ZSAqLworc3RhdGljIFN0YXRzSGlzdG9yeVNoYXJlZFN0YXRlICpz aGFyZWRTdGF0ZSA9IE5VTEw7CisKKy8qLS0tLSBHVUMgdmFyaWFibGVzIC0tLS0qLworc3Rh dGljIGJvb2wgdmFjdXVtU3RhdHNTYXZlID0gdHJ1ZTsKKworLyotLS0tIEZ1bmN0aW9uIGRl Y2xhcmF0aW9ucyAtLS0tKi8KKworUEdfRlVOQ1RJT05fSU5GT19WMShzdGF0c19oaXN0b3J5 X3Jlc2V0KTsKKworUEdfRlVOQ1RJT05fSU5GT19WMSh2YWN1dW1faGlzdG9yeV8xXzApOwor UEdfRlVOQ1RJT05fSU5GT19WMShjaGVja3BvaW50X2hpc3RvcnlfMV8wKTsKKworc3RhdGlj IHZvaWQgdmFjdXVtX2hpc3RvcnlfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8p Oworc3RhdGljIHZvaWQgY2hlY2twb2ludF9oaXN0b3J5X2ludGVybmFsKEZ1bmN0aW9uQ2Fs bEluZm8gZmNpbmZvKTsKKworc3RhdGljIHZvaWQgc3RhdHNfaGlzdG9yeV9zaG1lbV9yZXF1 ZXN0KHZvaWQpOworc3RhdGljIHZvaWQgc3RhdHNfaGlzdG9yeV9zaG1lbV9zdGFydHVwKHZv aWQpOworc3RhdGljIHZvaWQgc3RhdHNfaGlzdG9yeV9zaG1lbV9zaHV0ZG93bihpbnQgY29k ZSwgRGF0dW0gYXJnKTsKK3N0YXRpYyBTaXplIHN0YXRzX2hpc3RvcnlfbWVtc2l6ZSh2b2lk KTsKKworLyogc2VyaWFsaXplIGFuZCBkZXNlcmlhbGl6ZSBkYXRhIGludG8gZmlsZSAqLwor c3RhdGljIHZvaWQgc3RhdHNfaGlzdG9yeV9zYXZlX2hpc3Rvcnkodm9pZCk7CitzdGF0aWMg dm9pZCBzdGF0c19oaXN0b3J5X2xvYWRfaGlzdG9yeSh2b2lkKTsKKworLyogcXVldWUgbWFu YWdlbWVudCAqLworc3RhdGljIGludDY0IHF1ZXVlX2ZyZWVfc3BhY2Uodm9pZCk7CitzdGF0 aWMgaW50NjQgcXVldWVfbmV4dF9lbnRyeShpbnQ2NCBpbmRleCwgU2l6ZSBsZW4pOworc3Rh dGljIEVudHJ5ICpxdWV1ZV9yZWFkX2VudHJ5KGludDY0IGluZGV4KTsKK3N0YXRpYyB2b2lk IHF1ZXVlX2FkZF9lbnRyeShFbnRyeSAqZW50cnkpOworc3RhdGljIGludDMyIHF1ZXVlX2Vu dHJ5X2xlbihpbnQzMiBsZW4pOworCisvKiBob29rcyB0byBjb2xsZWN0IGluZm9ybWF0aW9u IGFib3V0IG1haW50ZW5hbmNlIG9wZXJhdGlvbnMgKi8KKworc3RhdGljIHZvaWQgdmFjdXVt X2hpc3RvcnlfbG9nX2hvb2soVGltZXN0YW1wVHogc3RhcnR0aW1lLCBUaW1lc3RhbXBUeiBl bmR0aW1lLAorCQkJCQkJCQkJT2lkIHJlbGlkLAorCQkJCQkJCQkJYm9vbCBpc19hdXRvdmFj dXVtLCBib29sIGlzX2FnZ3Jlc3NpdmUsCisJCQkJCQkJCQlib29sIGlzX3dyYXBhcm91bmQs IGJvb2wgaW5kZXhfY2xlYW51cCwKKwkJCQkJCQkJCWludDY0IHBhZ2VzX3JlbW92ZWQsIGlu dDY0IHBhZ2VzX3JlbWFpbiwKKwkJCQkJCQkJCWludDY0IHBhZ2VzX3NjYW5uZWQsIGludDY0 IHBhZ2VzX2Zyb3plbiwKKwkJCQkJCQkJCWludDY0IHBhZ2VzX21pc3NlZF9kZWFkLAorCQkJ CQkJCQkJaW50NjQgcGFnZXNfbmV3X3Zpc2libGUsIGludDY0IHBhZ2VzX25ld19mcm96ZW4s CisJCQkJCQkJCQlpbnQ2NCBwYWdlc19uZXdfdmlzaWJsZV9mcm96ZW4sCisJCQkJCQkJCQlp bnQ2NCB0dXBsZXNfcmVtb3ZlZCwgaW50NjQgdHVwbGVzX3JlbWFpbiwKKwkJCQkJCQkJCWlu dDY0IHR1cGxlc19ub3RfcmVtb3ZhYmxlLCBpbnQ2NCB0dXBsZXNfZnJvemVuLAorCQkJCQkJ CQkJaW50NjQgdHVwbGVzX21pc3NlZF9kZWFkLAorCQkJCQkJCQkJaW50MzIgcmVtb3ZhYmxl X2N1dG9mZiwgaW50MzIgcmVsZnJvemVueGlkX2FkdmFuY2UsCisJCQkJCQkJCQlpbnQzMiBy ZWxtaW5teGlkX2FkdmFuY2UsCisJCQkJCQkJCQlpbnQ2NCBpbmRleF9zY2FucywgaW50MzIg aW5kZXhfY291bnQsIGludDY0IGluZGV4X3BhZ2VzLAorCQkJCQkJCQkJaW50NjQgaW5kZXhf cGFnZXNfbmV3bHlfZGVsZXRlZCwKKwkJCQkJCQkJCWludDY0IGluZGV4X3BhZ2VzX2RlbGV0 ZWQsIGludDY0IGluZGV4X3BhZ2VzX2ZyZWUsCisJCQkJCQkJCQlkb3VibGUgaW9fcmVhZF9t cywgZG91YmxlIGlvX3dyaXRlX21zLAorCQkJCQkJCQkJaW50NjQgd2FsX3JlY29yZHMsIGlu dDY0IHdhbF9mcGlzLCBpbnQ2NCB3YWxfYnl0ZXMsCisJCQkJCQkJCQlkb3VibGUgY3B1X3Vz ZXIsIGRvdWJsZSBjcHVfc3lzdGVtLCBkb3VibGUgY3B1X2VsYXBzZWQpOworCitzdGF0aWMg dm9pZCBjaGVja3BvaW50X2hpc3RvcnlfbG9nX2hvb2soCisJCQkJCQlUaW1lc3RhbXBUeiBz dGFydF90aW1lLAorCQkJCQkJVGltZXN0YW1wVHogZW5kX3RpbWUsCisJCQkJCQlib29sIGlz X3NodXRkb3duLAorCQkJCQkJYm9vbCBpc19lbmRfb2ZfcmVjb3ZlcnksCisJCQkJCQlib29s IGlzX2ltbWVkaWF0ZSwKKwkJCQkJCWJvb2wgaXNfZm9yY2UsCisJCQkJCQlib29sIGlzX3dh aXQsCisJCQkJCQlib29sIGlzX3dhbCwKKwkJCQkJCWJvb2wgaXNfdGltZSwKKwkJCQkJCWJv b2wgaXNfZmx1c2hfYWxsLAorCQkJCQkJaW50IGJ1ZmZlcnNfd3JpdHRlbiwKKwkJCQkJCWlu dCBzbHJ1X3dyaXR0ZW4sCisJCQkJCQlpbnQgc2Vnc19hZGRlZCwKKwkJCQkJCWludCBzZWdz X3JlbW92ZWQsCisJCQkJCQlpbnQgc2Vnc19yZWN5Y2xlZCwKKwkJCQkJCWxvbmcgd3JpdGVf bXMsCisJCQkJCQlsb25nIHN5bmNfbXMsCisJCQkJCQlsb25nIHRvdGFsX21zLAorCQkJCQkJ aW50IHN5bmNfZmlsZXMsCisJCQkJCQlsb25nIHN5bmNfbG9uZ2VzdF9tcywKKwkJCQkJCWxv bmcgc3luY19hdmVyYWdlX21zLAorCQkJCQkJZG91YmxlIGRpc3RhbmNlX3ByZXYsCisJCQkJ CQlkb3VibGUgZGlzdGFuY2VfZXN0LAorCQkJCQkJWExvZ1JlY1B0ciBsc24sCisJCQkJCQlY TG9nUmVjUHRyIHJlZG9fbHNuKTsKKworLyogaGFuZGxlIGRyb3BwaW5nIG9iamVjdHMgKHJl bGF0aW9ucywgZGF0YWJhc2VzKSAqLworc3RhdGljIHZvaWQgc3RhdHNfaGlzdG9yeV9vYmpl Y3RfYWNjZXNzX2hvb2soT2JqZWN0QWNjZXNzVHlwZSBhY2Nlc3MsCisJCQkJCQkJCQkJCU9p ZCBjbGFzc0lkLAorCQkJCQkJCQkJCQlPaWQgb2JqZWN0SWQsCisJCQkJCQkJCQkJCWludCBz dWJJZCwKKwkJCQkJCQkJCQkJdm9pZCAqYXJnKTsKKworc3RhdGljIHZvaWQKK0Fzc2VydENo ZWNrUXVldWUodm9pZCkKK3sKKyNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCisJQXNzZXJ0 KExXTG9ja0hlbGRCeU1lKHNoYXJlZFN0YXRlLT5sb2NrKSk7CisKKwkvKiBzaXplIGFuZCBi b3RoIHBvc2l0aW9ucyBhcmUgbXVsdGlwbGUgb2YgZW50cnkgaGVhZGVyICovCisJQXNzZXJ0 KHNoYXJlZFN0YXRlLT5xdWV1ZVNpemUgJSBzaXplb2YoRW50cnkpID09IDApOworCUFzc2Vy dChzaGFyZWRTdGF0ZS0+cXVldWVTdGFydCAlIHNpemVvZihFbnRyeSkgPT0gMCk7CisJQXNz ZXJ0KHNoYXJlZFN0YXRlLT5xdWV1ZU5leHQgJSBzaXplb2YoRW50cnkpID09IDApOworCisJ QXNzZXJ0KHNoYXJlZFN0YXRlLT5xdWV1ZVN0YXJ0IDw9IHNoYXJlZFN0YXRlLT5xdWV1ZU5l eHQpOworCUFzc2VydChzaGFyZWRTdGF0ZS0+cXVldWVOZXh0IC0gc2hhcmVkU3RhdGUtPnF1 ZXVlU3RhcnQgPD0gc2hhcmVkU3RhdGUtPnF1ZXVlU2l6ZSk7CisjZW5kaWYKK30KKworLyoK KyAqIE1vZHVsZSBsb2FkIGNhbGxiYWNrCisgKi8KK3ZvaWQKK19QR19pbml0KHZvaWQpCit7 CisJLyoKKwkgKiBJbiBvcmRlciB0byBjcmVhdGUgb3VyIHNoYXJlZCBtZW1vcnkgYXJlYSwg d2UgaGF2ZSB0byBiZSBsb2FkZWQgdmlhCisJICogc2hhcmVkX3ByZWxvYWRfbGlicmFyaWVz LiAgSWYgbm90LCBmYWxsIG91dCB3aXRob3V0IGhvb2tpbmcgaW50byBhbnkgb2YKKwkgKiB0 aGUgbWFpbiBzeXN0ZW0uICAoV2UgZG9uJ3QgdGhyb3cgZXJyb3IgaGVyZSBiZWNhdXNlIGl0 IHNlZW1zIHVzZWZ1bCB0bworCSAqIGFsbG93IHRoZSBwZ19zdGF0X3N0YXRlbWVudHMgZnVu Y3Rpb25zIHRvIGJlIGNyZWF0ZWQgZXZlbiB3aGVuIHRoZQorCSAqIG1vZHVsZSBpc24ndCBh Y3RpdmUuICBUaGUgZnVuY3Rpb25zIG11c3QgcHJvdGVjdCB0aGVtc2VsdmVzIGFnYWluc3QK KwkgKiBiZWluZyBjYWxsZWQgdGhlbiwgaG93ZXZlci4pCisJICovCisJaWYgKCFwcm9jZXNz X3NoYXJlZF9wcmVsb2FkX2xpYnJhcmllc19pbl9wcm9ncmVzcykKKwkJcmV0dXJuOworCisJ LyoKKwkgKiBEZWZpbmUgKG9yIHJlZGVmaW5lKSBjdXN0b20gR1VDIHZhcmlhYmxlcy4KKwkg Ki8KKwlEZWZpbmVDdXN0b21JbnRWYXJpYWJsZSgic3RhdHNfaGlzdG9yeS5zaXplIiwKKwkJ CQkJCQkiU2V0cyB0aGUgYW1vdW50IG9mIG1lbW9yeSBhdmFpbGFibGUgZm9yIHBhc3QgZXZl bnRzLiIsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQkmc3RhdHNIaXN0b3J5U2l6ZU1CLAorCQkJ CQkJCTEsCisJCQkJCQkJMSwKKwkJCQkJCQkxMjgsCisJCQkJCQkJUEdDX1BPU1RNQVNURVIs CisJCQkJCQkJR1VDX1VOSVRfTUIsCisJCQkJCQkJTlVMTCwKKwkJCQkJCQlOVUxMLAorCQkJ CQkJCU5VTEwpOworCisJRGVmaW5lQ3VzdG9tQm9vbFZhcmlhYmxlKCJzdGF0c19oaXN0b3J5 LnNhdmUiLAorCQkJCQkJCSAiU2F2ZSBzdGF0c19oaXN0b3J5IHN0YXRpc3RpY3MgYWNyb3Nz IHNlcnZlciBzaHV0ZG93bnMuIiwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgJnZhY3V1bVN0 YXRzU2F2ZSwKKwkJCQkJCQkgdHJ1ZSwKKwkJCQkJCQkgUEdDX1NJR0hVUCwKKwkJCQkJCQkg MCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCwKKwkJCQkJCQkgTlVMTCk7CisKKwlN YXJrR1VDUHJlZml4UmVzZXJ2ZWQoInN0YXRzX2hpc3RvcnkiKTsKKworCS8qCisJICogSW5z dGFsbCBob29rcy4KKwkgKi8KKwlwcmV2X3NobWVtX3JlcXVlc3RfaG9vayA9IHNobWVtX3Jl cXVlc3RfaG9vazsKKwlzaG1lbV9yZXF1ZXN0X2hvb2sgPSBzdGF0c19oaXN0b3J5X3NobWVt X3JlcXVlc3Q7CisJcHJldl9zaG1lbV9zdGFydHVwX2hvb2sgPSBzaG1lbV9zdGFydHVwX2hv b2s7CisJc2htZW1fc3RhcnR1cF9ob29rID0gc3RhdHNfaGlzdG9yeV9zaG1lbV9zdGFydHVw OworCisJcHJldl92YWN1dW1fbG9nX2hvb2sgPSB2YWN1dW1fbG9nX2hvb2s7CisJdmFjdXVt X2xvZ19ob29rID0gdmFjdXVtX2hpc3RvcnlfbG9nX2hvb2s7CisKKwlwcmV2X2NoZWNrcG9p bnRfbG9nX2hvb2sgPSBjaGVja3BvaW50X2xvZ19ob29rOworCWNoZWNrcG9pbnRfbG9nX2hv b2sgPSBjaGVja3BvaW50X2hpc3RvcnlfbG9nX2hvb2s7CisKKwlwcmV2X29iamVjdF9hY2Nl c3NfaG9vayA9IG9iamVjdF9hY2Nlc3NfaG9vazsKKwlvYmplY3RfYWNjZXNzX2hvb2sgPSBz dGF0c19oaXN0b3J5X29iamVjdF9hY2Nlc3NfaG9vazsKK30KKworLyoKKyAqIEVzdGltYXRl IHNoYXJlZCBtZW1vcnkgc3BhY2UgbmVlZGVkLgorICovCitzdGF0aWMgU2l6ZQorc3RhdHNf aGlzdG9yeV9tZW1zaXplKHZvaWQpCit7CisJU2l6ZQkJc2l6ZTsKKworCXNpemUgPSBNQVhB TElHTihvZmZzZXRvZihTdGF0c0hpc3RvcnlTaGFyZWRTdGF0ZSwgcXVldWUpICsKKwkJCQkJ KHN0YXRzSGlzdG9yeVNpemVNQiAqIDEwMjRMICogMTAyNEwpKTsKKworCXJldHVybiBzaXpl OworfQorCisvKgorICogc2htZW1fcmVxdWVzdCBob29rOiByZXF1ZXN0IGFkZGl0aW9uYWwg c2hhcmVkIHJlc291cmNlcy4gIFdlJ2xsIGFsbG9jYXRlIG9yCisgKiBhdHRhY2ggdG8gdGhl IHNoYXJlZCByZXNvdXJjZXMgaW4gc3RhdHNfaGlzdG9yeV9zaG1lbV9zdGFydHVwKCkuCisg Ki8KK3N0YXRpYyB2b2lkCitzdGF0c19oaXN0b3J5X3NobWVtX3JlcXVlc3Qodm9pZCkKK3sK KwlpZiAocHJldl9zaG1lbV9yZXF1ZXN0X2hvb2spCisJCXByZXZfc2htZW1fcmVxdWVzdF9o b29rKCk7CisKKwlSZXF1ZXN0QWRkaW5TaG1lbVNwYWNlKHN0YXRzX2hpc3RvcnlfbWVtc2l6 ZSgpKTsKKwlSZXF1ZXN0TmFtZWRMV0xvY2tUcmFuY2hlKCJzdGF0c19oaXN0b3J5IiwgMSk7 Cit9CisKKy8qCisgKiBzaG1lbV9zdGFydHVwIGhvb2s6IGFsbG9jYXRlIG9yIGF0dGFjaCB0 byBzaGFyZWQgbWVtb3J5LCB0aGVuIGxvYWQgYW55CisgKiBwcmUtZXhpc3Rpbmcgc3RhdGlz dGljcyBmcm9tIGZpbGUuCisgKi8KK3N0YXRpYyB2b2lkCitzdGF0c19oaXN0b3J5X3NobWVt X3N0YXJ0dXAodm9pZCkKK3sKKwlib29sCWZvdW5kOworCisJU2l6ZQlxdWV1ZVNpemUgPSAo c3RhdHNIaXN0b3J5U2l6ZU1CICogMTAyNEwgKiAxMDI0TCk7CisJU2l6ZQlzdGF0ZVNpemUg PSBvZmZzZXRvZihTdGF0c0hpc3RvcnlTaGFyZWRTdGF0ZSwgcXVldWUpICsgcXVldWVTaXpl OworCisJaWYgKHByZXZfc2htZW1fc3RhcnR1cF9ob29rKQorCQlwcmV2X3NobWVtX3N0YXJ0 dXBfaG9vaygpOworCisJLyogcmVzZXQgaW4gY2FzZSB0aGlzIGlzIGEgcmVzdGFydCB3aXRo aW4gdGhlIHBvc3RtYXN0ZXIgKi8KKwlzaGFyZWRTdGF0ZSA9IE5VTEw7CisKKwkvKgorCSAq IENyZWF0ZSBvciBhdHRhY2ggdG8gdGhlIHNoYXJlZCBtZW1vcnkgc3RhdGUsIGluY2x1ZGlu ZyBoYXNoIHRhYmxlCisJICovCisJTFdMb2NrQWNxdWlyZShBZGRpblNobWVtSW5pdExvY2ss IExXX0VYQ0xVU0lWRSk7CisKKwlzaGFyZWRTdGF0ZSA9IFNobWVtSW5pdFN0cnVjdCgic3Rh dHNfaGlzdG9yeSIsCisJCQkJCQkJCSAgc3RhdGVTaXplLAorCQkJCQkJCQkgICZmb3VuZCk7 CisKKwlpZiAoIWZvdW5kKQorCXsKKwkJLyogRmlyc3QgdGltZSB0aHJvdWdoIC4uLiAqLwor CQlzaGFyZWRTdGF0ZS0+bG9jayA9ICYoR2V0TmFtZWRMV0xvY2tUcmFuY2hlKCJzdGF0c19o aXN0b3J5IikpLT5sb2NrOworCisJCXNoYXJlZFN0YXRlLT5xdWV1ZVN0YXJ0ID0gMDsKKwkJ c2hhcmVkU3RhdGUtPnF1ZXVlTmV4dCA9IDA7CisJCXNoYXJlZFN0YXRlLT5xdWV1ZVNpemUg PSBxdWV1ZVNpemU7CisJfQorCisJTFdMb2NrUmVsZWFzZShBZGRpblNobWVtSW5pdExvY2sp OworCisJLyoKKwkgKiBJZiB3ZSdyZSBpbiB0aGUgcG9zdG1hc3RlciAob3IgYSBzdGFuZGFs b25lIGJhY2tlbmQuLi4pLCBzZXQgdXAgYSBzaG1lbQorCSAqIGV4aXQgaG9vayB0byBkdW1w IHRoZSBzdGF0aXN0aWNzIHRvIGRpc2suCisJICovCisJaWYgKCFJc1VuZGVyUG9zdG1hc3Rl cikKKwkJb25fc2htZW1fZXhpdChzdGF0c19oaXN0b3J5X3NobWVtX3NodXRkb3duLCAoRGF0 dW0pIDApOworCisJLyoKKwkgKiBEb25lIGlmIHNvbWUgb3RoZXIgcHJvY2VzcyBhbHJlYWR5 IGNvbXBsZXRlZCBvdXIgaW5pdGlhbGl6YXRpb24uCisJICovCisJaWYgKGZvdW5kKQorCQly ZXR1cm47CisKKwkvKgorCSAqIElmIHdlIHdlcmUgdG9sZCBub3QgdG8gbG9hZCBvbGQgc3Rh dGlzdGljcywgd2UncmUgZG9uZS4gIChOb3RlIHdlIGRvCisJICogbm90IHRyeSB0byB1bmxp bmsgYW55IG9sZCBkdW1wIGZpbGUgaW4gdGhpcyBjYXNlLiAgVGhpcyBzZWVtcyBhIGJpdAor CSAqIHF1ZXN0aW9uYWJsZSBhcyB3ZSB3b24ndCByZW1vdmUgZW50cmllcyBmb3IgZHJvcHBl ZCBvYmplY3RzLikKKwkgKi8KKwlpZiAoIXZhY3V1bVN0YXRzU2F2ZSkKKwkJcmV0dXJuOwor CisJc3RhdHNfaGlzdG9yeV9sb2FkX2hpc3RvcnkoKTsKK30KKworc3RhdGljIHZvaWQKK3N0 YXRzX2hpc3Rvcnlfc2F2ZV9oaXN0b3J5KHZvaWQpCit7CisJRklMRQkgICAqZmlsZTsKKwlp bnQ2NAkJaW5kZXg7CisKKwlMV0xvY2tBY3F1aXJlKHNoYXJlZFN0YXRlLT5sb2NrLCBMV19T SEFSRUQpOworCisJZmlsZSA9IEFsbG9jYXRlRmlsZShTVEFUU19ISVNUT1JZX0RVTVBfRklM RSAiLnRtcCIsIFBHX0JJTkFSWV9XKTsKKwlpZiAoZmlsZSA9PSBOVUxMKQorCQlnb3RvIGVy cm9yOworCisJaWYgKGZ3cml0ZSgmU1RBVFNfSElTVE9SWV9GSUxFX0hFQURFUiwgc2l6ZW9m KHVpbnQzMiksIDEsIGZpbGUpICE9IDEpCisJCWdvdG8gZXJyb3I7CisKKwlpZiAoZndyaXRl KCZTVEFUU19QR19NQUpPUl9WRVJTSU9OLCBzaXplb2YodWludDMyKSwgMSwgZmlsZSkgIT0g MSkKKwkJZ290byBlcnJvcjsKKworCWluZGV4ID0gc2hhcmVkU3RhdGUtPnF1ZXVlU3RhcnQ7 CisJd2hpbGUgKGluZGV4IDwgc2hhcmVkU3RhdGUtPnF1ZXVlTmV4dCkKKwl7CisJCUVudHJ5 ICAqZW50cnkgPSBxdWV1ZV9yZWFkX2VudHJ5KGluZGV4KTsKKworCQlpZiAoZndyaXRlKGVu dHJ5LCBlbnRyeS0+bGVuLCAxLCBmaWxlKSAhPSAxKQorCQkJZ290byBlcnJvcjsKKworCQlp bmRleCA9IHF1ZXVlX25leHRfZW50cnkoaW5kZXgsIGVudHJ5LT5sZW4pOworCQlwZnJlZShl bnRyeSk7CisJfQorCisJaWYgKEZyZWVGaWxlKGZpbGUpKQorCXsKKwkJZmlsZSA9IE5VTEw7 CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyoKKwkgKiBSZW5hbWUgZmlsZSBpbnRvIHBsYWNl LCBzbyB3ZSBhdG9taWNhbGx5IHJlcGxhY2UgYW55IG9sZCBvbmUuCisJICovCisJKHZvaWQp IGR1cmFibGVfcmVuYW1lKFNUQVRTX0hJU1RPUllfRFVNUF9GSUxFICIudG1wIiwgU1RBVFNf SElTVE9SWV9EVU1QX0ZJTEUsIExPRyk7CisKKwlMV0xvY2tSZWxlYXNlKHNoYXJlZFN0YXRl LT5sb2NrKTsKKworCXJldHVybjsKKworZXJyb3I6CisJZXJlcG9ydChMT0csCisJCQkoZXJy Y29kZV9mb3JfZmlsZV9hY2Nlc3MoKSwKKwkJCSBlcnJtc2coImNvdWxkIG5vdCB3cml0ZSBm aWxlIFwiJXNcIjogJW0iLAorCQkJCQlTVEFUU19ISVNUT1JZX0RVTVBfRklMRSAiLnRtcCIp KSk7CisJaWYgKGZpbGUpCisJCUZyZWVGaWxlKGZpbGUpOworCXVubGluayhTVEFUU19ISVNU T1JZX0RVTVBfRklMRSAiLnRtcCIpOworCisJTFdMb2NrUmVsZWFzZShzaGFyZWRTdGF0ZS0+ bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCitzdGF0c19oaXN0b3J5X2xvYWRfaGlzdG9yeSh2 b2lkKQoreworCUZJTEUJICAgKmZpbGUgPSBOVUxMOworCXVpbnQzMgkJaGVhZGVyOworCWlu dDMyCQlwZ3ZlcjsKKworCUxXTG9ja0FjcXVpcmUoc2hhcmVkU3RhdGUtPmxvY2ssIExXX0VY Q0xVU0lWRSk7CisKKwkvKgorCSAqIEF0dGVtcHQgdG8gbG9hZCBvbGQgc3RhdGlzdGljcyBm cm9tIHRoZSBkdW1wIGZpbGUuCisJICovCisJZmlsZSA9IEFsbG9jYXRlRmlsZShTVEFUU19I SVNUT1JZX0RVTVBfRklMRSwgUEdfQklOQVJZX1IpOworCWlmIChmaWxlID09IE5VTEwpCisJ eworCQlpZiAoZXJybm8gIT0gRU5PRU5UKQorCQkJZ290byByZWFkX2Vycm9yOworCQkvKiBO byBleGlzdGluZyBwZXJzaXN0ZWQgc3RhdHMgZmlsZSwgc28gd2UncmUgZG9uZSAqLworCQlM V0xvY2tSZWxlYXNlKHNoYXJlZFN0YXRlLT5sb2NrKTsKKwkJcmV0dXJuOworCX0KKworCWlm IChmcmVhZCgmaGVhZGVyLCBzaXplb2YodWludDMyKSwgMSwgZmlsZSkgIT0gMSB8fAorCQlm cmVhZCgmcGd2ZXIsIHNpemVvZih1aW50MzIpLCAxLCBmaWxlKSAhPSAxKQorCQlnb3RvIHJl YWRfZXJyb3I7CisKKwlpZiAoaGVhZGVyICE9IFNUQVRTX0hJU1RPUllfRklMRV9IRUFERVIg fHwKKwkJcGd2ZXIgIT0gU1RBVFNfUEdfTUFKT1JfVkVSU0lPTikKKwkJZ290byBkYXRhX2Vy cm9yOworCisJd2hpbGUgKHRydWUpCisJeworCQlFbnRyeQloZWFkZXI7CisJCUVudHJ5ICAq ZW50cnk7CisJCWNoYXIgICAqcHRyOworCisJCWlmIChmcmVhZCgmaGVhZGVyLCBzaXplb2Yo RW50cnkpLCAxLCBmaWxlKSAhPSAxKQorCQkJZ290byByZWFkX2Vycm9yOworCisJCXB0ciA9 IHBhbGxvYyhoZWFkZXIubGVuKTsKKwkJZW50cnkgPSAoRW50cnkgKikgcHRyOworCisJCW1l bWNweShwdHIsICZoZWFkZXIsIHNpemVvZihFbnRyeSkpOworCQlwdHIgKz0gc2l6ZW9mKEVu dHJ5KTsKKworCQkvKiBYWFggdGhpcyBjYW4gaGFwcGVuIGFsc28gd2hlbiB3ZSByZWFjaCBl bmQgb2YgZmlsZSAqLworCQlpZiAoZnJlYWQocHRyLCBlbnRyeS0+bGVuIC0gc2l6ZW9mKEVu dHJ5KSwgMSwgZmlsZSkgIT0gMSkKKwkJCWdvdG8gcmVhZF9lcnJvcjsKKworCQkvKiBubyBs b2NrLCB0aGVyZSBzaG91bGQgYmUgbm8gY29uY3VycmVudGx5IGFkZGVkIGVudHJpZXMgKi8K KwkJcXVldWVfYWRkX2VudHJ5KGVudHJ5KTsKKwkJcGZyZWUoZW50cnkpOworCX0KKworCUZy ZWVGaWxlKGZpbGUpOworCisJLyoKKwkgKiBSZW1vdmUgdGhlIHBlcnNpc3RlZCBzdGF0cyBm aWxlIHNvIGl0J3Mgbm90IGluY2x1ZGVkIGluCisJICogYmFja3Vwcy9yZXBsaWNhdGlvbiBz dGFuZGJ5cywgZXRjLiAgQSBuZXcgZmlsZSB3aWxsIGJlIHdyaXR0ZW4gb24gbmV4dAorCSAq IHNodXRkb3duLgorCSAqLworCXVubGluayhTVEFUU19ISVNUT1JZX0RVTVBfRklMRSk7CisK KwlMV0xvY2tSZWxlYXNlKHNoYXJlZFN0YXRlLT5sb2NrKTsKKworCXJldHVybjsKKworcmVh ZF9lcnJvcjoKKwllcmVwb3J0KExPRywKKwkJCShlcnJjb2RlX2Zvcl9maWxlX2FjY2Vzcygp LAorCQkJIGVycm1zZygiY291bGQgbm90IHJlYWQgZmlsZSBcIiVzXCI6ICVtIiwKKwkJCQkJ U1RBVFNfSElTVE9SWV9EVU1QX0ZJTEUpKSk7CisJZ290byBmYWlsOworZGF0YV9lcnJvcjoK KwllcmVwb3J0KExPRywKKwkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJIGVycm1zZygiaWdub3JpbmcgaW52YWxpZCBkYXRhIGluIGZpbGUgXCIl c1wiIiwKKwkJCQkJU1RBVFNfSElTVE9SWV9EVU1QX0ZJTEUpKSk7CisJZ290byBmYWlsOwor ZmFpbDoKKwlpZiAoZmlsZSkKKwkJRnJlZUZpbGUoZmlsZSk7CisKKwkvKiBJZiBwb3NzaWJs ZSwgdGhyb3cgYXdheSB0aGUgYm9ndXMgZmlsZTsgaWdub3JlIGFueSBlcnJvciAqLworCXVu bGluayhTVEFUU19ISVNUT1JZX0RVTVBfRklMRSk7CisKKwlMV0xvY2tSZWxlYXNlKHNoYXJl ZFN0YXRlLT5sb2NrKTsKK30KKworLyoKKyAqIHNobWVtX3NodXRkb3duIGhvb2s6IER1bXAg c3RhdGlzdGljcyBpbnRvIGZpbGUuCisgKgorICogTm90ZTogd2UgZG9uJ3QgYm90aGVyIHdp dGggYWNxdWlyaW5nIGxvY2ssIGJlY2F1c2UgdGhlcmUgc2hvdWxkIGJlIG5vCisgKiBvdGhl ciBwcm9jZXNzZXMgcnVubmluZyB3aGVuIHRoaXMgaXMgY2FsbGVkLgorICovCitzdGF0aWMg dm9pZAorc3RhdHNfaGlzdG9yeV9zaG1lbV9zaHV0ZG93bihpbnQgY29kZSwgRGF0dW0gYXJn KQoreworCS8qIERvbid0IHRyeSB0byBkdW1wIGR1cmluZyBhIGNyYXNoLiAqLworCWlmIChj b2RlKQorCQlyZXR1cm47CisKKwlpZiAoIXNoYXJlZFN0YXRlKQorCQlyZXR1cm47CisKKwlp ZiAoIXZhY3V1bVN0YXRzU2F2ZSkKKwkJcmV0dXJuOworCisJc3RhdHNfaGlzdG9yeV9zYXZl X2hpc3RvcnkoKTsKK30KKworLyoKKyAqIFJlc2V0IHZhY3V1bSBoaXN0b3J5LgorICovCitE YXR1bQorc3RhdHNfaGlzdG9yeV9yZXNldChQR19GVU5DVElPTl9BUkdTKQoreworCUxXTG9j a0FjcXVpcmUoc2hhcmVkU3RhdGUtPmxvY2ssIExXX1NIQVJFRCk7CisJc2hhcmVkU3RhdGUt PnF1ZXVlTmV4dCA9IDA7CisJTFdMb2NrUmVsZWFzZShzaGFyZWRTdGF0ZS0+bG9jayk7CisK KwlQR19SRVRVUk5fVk9JRCgpOworfQorCisvKiBoYW5kbGUgRFJPUCBUQUJMRSBhbmQgRFJP UCBEQVRBQkFTRSBldmVudHMgLSByZW1vdmUgdGhlIGVudHJpZXMgKi8KK3N0YXRpYyB2b2lk CitzdGF0c19oaXN0b3J5X29iamVjdF9hY2Nlc3NfaG9vayhPYmplY3RBY2Nlc3NUeXBlIGFj Y2VzcywKKwkJCQkJCQkJT2lkIGNsYXNzSWQsCisJCQkJCQkJCU9pZCBvYmplY3RJZCwKKwkJ CQkJCQkJaW50IHN1YklkLAorCQkJCQkJCQl2b2lkICphcmcpCit7CisJaW50NjQJaW5kZXgs CisJCQluZXh0OworCU9pZAkJcmVsT2lkLAorCQkJZGJPaWQ7CisKKwkvKiBvbmx5IGNhcmUg YWJvdXQgRFJPUCBhY3Rpb25zICovCisJaWYgKGFjY2VzcyAhPSBPQVRfRFJPUCkKKwkJcmV0 dXJuOworCisJLyogb25seSBjYXJlIGFib3V0IHRhYmxlcyBhbmQgZGFiYXNlcyAqLworCWlm IChjbGFzc0lkID09IFJlbGF0aW9uUmVsYXRpb25JZCkKKwl7CisJCWRiT2lkID0gTXlEYXRh YmFzZUlkOworCQlyZWxPaWQgPSBvYmplY3RJZDsKKwl9CisJZWxzZSBpZiAoY2xhc3NJZCA9 PSBEYXRhYmFzZVJlbGF0aW9uSWQpCisJeworCQlkYk9pZCA9IG9iamVjdElkOworCQlyZWxP aWQgPSBJbnZhbGlkT2lkOworCX0KKwllbHNlCisJCXJldHVybjsKKworCUxXTG9ja0FjcXVp cmUoc2hhcmVkU3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwlBc3NlcnRDaGVja1F1 ZXVlKCk7CisKKwlpbmRleCA9IHNoYXJlZFN0YXRlLT5xdWV1ZVN0YXJ0OworCW5leHQgPSBz aGFyZWRTdGF0ZS0+cXVldWVOZXh0OworCisJLyoKKwkgKiBQcmV0ZW5kIHRoZSBxdWV1ZSBp cyBlbXB0eSAtIHdlJ2xsIG9ubHkgY29tcGFjdCB0aGUgZW50cmllcywgdGhlCisJICogYW1v dW50IG9mIGRhdGEgY2FuIG5ldmVyIGV4cGFuZC4KKwkgKi8KKwlzaGFyZWRTdGF0ZS0+cXVl dWVOZXh0ID0gc2hhcmVkU3RhdGUtPnF1ZXVlU3RhcnQ7CisKKwl3aGlsZSAoaW5kZXggPCBu ZXh0KQorCXsKKwkJRW50cnkJICAgICpoZHIgPSBxdWV1ZV9yZWFkX2VudHJ5KGluZGV4KTsK KworCQkvKiBub3QgYSBmaWx0ZXJpbmcgbWF0dGVycyBvbmx5IGZvciB2YWN1dW0gZW50cmll cyAqLworCQlpZiAoaGRyLT50eXBlID09IEVOVFJZX1ZBQ1VVTSkKKwkJeworCQkJVmFjdXVt RW50cnkgKmVudHJ5ID0gKFZhY3V1bUVudHJ5ICopIGhkcjsKKworCQkJLyoga2VlcCB0aGUg ZW50cnkgaWYgaXQgZG9lc24ndCBtYXRjaCB0aGUgb2JqZWN0IHdlJ3JlIGRyb3BwaW5nICov CisJCQlpZiAoKGVudHJ5LT5kYmlkICE9IGRiT2lkKSB8fAorCQkJCShyZWxPaWQgIT0gSW52 YWxpZE9pZCAmJiBlbnRyeS0+cmVsaWQgIT0gcmVsT2lkKSkKKwkJCXsKKwkJCQlxdWV1ZV9h ZGRfZW50cnkoaGRyKTsKKwkJCX0KKwkJfQorCisJCS8qIGFkdmFuY2UgdG8gaW5kZXggKi8K KwkJaW5kZXggPSBxdWV1ZV9uZXh0X2VudHJ5KGluZGV4LCBoZHItPmxlbik7CisJCXBmcmVl KGhkcik7CisJfQorCisJTFdMb2NrUmVsZWFzZShzaGFyZWRTdGF0ZS0+bG9jayk7Cit9CisK Ky8qIHZhY3V1bSAqLworCisjZGVmaW5lCVZBQ1VVTV9ISVNUT1JZX0NPTFNfVjFfMAkzOAor I2RlZmluZQlWQUNVVU1fSElTVE9SWV9DT0xTCQkJMzgKKworRGF0dW0KK3ZhY3V1bV9oaXN0 b3J5XzFfMChQR19GVU5DVElPTl9BUkdTKQoreworCXZhY3V1bV9oaXN0b3J5X2ludGVybmFs KGZjaW5mbyk7CisKKwlyZXR1cm4gKERhdHVtKSAwOworfQorCitzdGF0aWMgdm9pZAordmFj dXVtX2hpc3RvcnlfaW50ZXJuYWwoRnVuY3Rpb25DYWxsSW5mbyBmY2luZm8pCit7CisJUmV0 dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRp bmZvOworCU9pZAkJCXVzZXJpZCA9IEdldFVzZXJJZCgpOworCWludDY0CQlpbmRleDsKKwor CS8qCisJICogU3VwZXJ1c2VycyBvciByb2xlcyB3aXRoIHRoZSBwcml2aWxlZ2VzIG9mIHBn X3JlYWRfYWxsX3N0YXRzIG1lbWJlcnMKKwkgKiBhcmUgYWxsb3dlZAorCSAqLworCWlmICgh aGFzX3ByaXZzX29mX3JvbGUodXNlcmlkLCBST0xFX1BHX1JFQURfQUxMX1NUQVRTKSkKKwkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJF UkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkgZXJybXNnKCJ2YWN1dW1faGlzdG9yeSBwcml2aWxl Z2UgZXJyb3IiKSkpOworCisJLyogaGFzaCB0YWJsZSBtdXN0IGV4aXN0IGFscmVhZHkgKi8K KwlpZiAoIXNoYXJlZFN0YXRlKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVS UkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2co InZhY3V1bV9oaXN0b3J5IG11c3QgYmUgbG9hZGVkIHZpYSBcInNoYXJlZF9wcmVsb2FkX2xp YnJhcmllc1wiIikpKTsKKworCUluaXRNYXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKwor CUxXTG9ja0FjcXVpcmUoc2hhcmVkU3RhdGUtPmxvY2ssIExXX1NIQVJFRCk7CisKKwlpbmRl eCA9IHNoYXJlZFN0YXRlLT5xdWV1ZVN0YXJ0OworCXdoaWxlIChpbmRleCA8IHNoYXJlZFN0 YXRlLT5xdWV1ZU5leHQpCisJeworCQlFbnRyeQkgICAgKmhkciA9IHF1ZXVlX3JlYWRfZW50 cnkoaW5kZXgpOworCisJCS8qIG5vdCBhIHZhY3V1bSBlbnRyeSAqLworCQlpZiAoaGRyLT50 eXBlID09IEVOVFJZX1ZBQ1VVTSkKKwkJeworCQkJaW50CQkJaSA9IDA7CisJCQlEYXR1bQkJ dmFsdWVzW1ZBQ1VVTV9ISVNUT1JZX0NPTFNdOworCQkJYm9vbAkJbnVsbHNbVkFDVVVNX0hJ U1RPUllfQ09MU107CisKKwkJCVZhY3V1bUVudHJ5ICplbnRyeSA9IChWYWN1dW1FbnRyeSAq KSBoZHI7CisKKwkJCS8qIG9ubHkgc2hvdyBkYXRhIGZvciBteSBkYXRhYmFzZSAoc28gdGhh dCB3ZSBjYW4gdHJhbnNsYXRlIHJlbGlkKSAqLworCQkJaWYgKGVudHJ5LT5kYmlkICE9IE15 RGF0YWJhc2VJZCkKKwkJCQljb250aW51ZTsKKworCQkJbWVtc2V0KHZhbHVlcywgMCwgc2l6 ZW9mKHZhbHVlcykpOworCQkJbWVtc2V0KG51bGxzLCAwLCBzaXplb2YobnVsbHMpKTsKKwor CQkJdmFsdWVzW2krK10gPSBUaW1lc3RhbXBUekdldERhdHVtKGVudHJ5LT5zdGFydF90aW1l KTsKKwkJCXZhbHVlc1tpKytdID0gVGltZXN0YW1wVHpHZXREYXR1bShlbnRyeS0+ZW5kX3Rp bWUpOworCisJCQl2YWx1ZXNbaSsrXSA9IE9iamVjdElkR2V0RGF0dW0oZW50cnktPmRiaWQp OworCQkJdmFsdWVzW2krK10gPSBPYmplY3RJZEdldERhdHVtKGVudHJ5LT5yZWxpZCk7CisK KwkJCXZhbHVlc1tpKytdID0gQm9vbEdldERhdHVtKGVudHJ5LT5pc19hdXRvdmFjdXVtKTsK KwkJCXZhbHVlc1tpKytdID0gQm9vbEdldERhdHVtKGVudHJ5LT5pc19hZ2dyZXNzaXZlKTsK KwkJCXZhbHVlc1tpKytdID0gQm9vbEdldERhdHVtKGVudHJ5LT5pc193cmFwYXJvdW5kKTsK KwkJCXZhbHVlc1tpKytdID0gQm9vbEdldERhdHVtKGVudHJ5LT5pbmRleF9jbGVhbnVwKTsK KworCQkJdmFsdWVzW2krK10gPSBJbnQ2NEdldERhdHVtKGVudHJ5LT5wYWdlc19yZW1vdmVk KTsKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1bShlbnRyeS0+cGFnZXNfcmVtYWlu KTsKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1bShlbnRyeS0+cGFnZXNfc2Nhbm5l ZCk7CisJCQl2YWx1ZXNbaSsrXSA9IEludDY0R2V0RGF0dW0oZW50cnktPnBhZ2VzX2Zyb3pl bik7CisJCQl2YWx1ZXNbaSsrXSA9IEludDY0R2V0RGF0dW0oZW50cnktPnBhZ2VzX21pc3Nl ZF9kZWFkKTsKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1bShlbnRyeS0+cGFnZXNf bmV3X3Zpc2libGUpOworCQkJdmFsdWVzW2krK10gPSBJbnQ2NEdldERhdHVtKGVudHJ5LT5w YWdlc19uZXdfZnJvemVuKTsKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1bShlbnRy eS0+cGFnZXNfbmV3X3Zpc2libGVfZnJvemVuKTsKKworCQkJdmFsdWVzW2krK10gPSBJbnQ2 NEdldERhdHVtKGVudHJ5LT50dXBsZXNfcmVtb3ZlZCk7CisJCQl2YWx1ZXNbaSsrXSA9IElu dDY0R2V0RGF0dW0oZW50cnktPnR1cGxlc19yZW1haW4pOworCQkJdmFsdWVzW2krK10gPSBJ bnQ2NEdldERhdHVtKGVudHJ5LT50dXBsZXNfbm90X3JlbW92YWJsZSk7CisJCQl2YWx1ZXNb aSsrXSA9IEludDY0R2V0RGF0dW0oZW50cnktPnR1cGxlc19mcm96ZW4pOworCQkJdmFsdWVz W2krK10gPSBJbnQ2NEdldERhdHVtKGVudHJ5LT50dXBsZXNfbWlzc2VkX2RlYWQpOworCisJ CQl2YWx1ZXNbaSsrXSA9IEludDMyR2V0RGF0dW0oZW50cnktPnJlbW92YWJsZV9jdXRvZmYp OworCQkJdmFsdWVzW2krK10gPSBJbnQzMkdldERhdHVtKGVudHJ5LT5yZWxmcm96ZW54aWRf YWR2YW5jZSk7CisJCQl2YWx1ZXNbaSsrXSA9IEludDMyR2V0RGF0dW0oZW50cnktPnJlbG1p bm14aWRfYWR2YW5jZSk7CisKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1bShlbnRy eS0+aW5kZXhfc2NhbnMpOworCQkJdmFsdWVzW2krK10gPSBJbnQzMkdldERhdHVtKGVudHJ5 LT5pbmRleF9jb3VudCk7CisJCQl2YWx1ZXNbaSsrXSA9IEludDY0R2V0RGF0dW0oZW50cnkt PmluZGV4X3BhZ2VzKTsKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1bShlbnRyeS0+ aW5kZXhfcGFnZXNfbmV3bHlfZGVsZXRlZCk7CisJCQl2YWx1ZXNbaSsrXSA9IEludDY0R2V0 RGF0dW0oZW50cnktPmluZGV4X3BhZ2VzX2RlbGV0ZWQpOworCQkJdmFsdWVzW2krK10gPSBJ bnQ2NEdldERhdHVtKGVudHJ5LT5pbmRleF9wYWdlc19mcmVlKTsKKworCQkJdmFsdWVzW2kr K10gPSBGbG9hdDRHZXREYXR1bShlbnRyeS0+aW9fcmVhZF9tcyk7CisJCQl2YWx1ZXNbaSsr XSA9IEZsb2F0NEdldERhdHVtKGVudHJ5LT5pb193cml0ZV9tcyk7CisKKwkJCXZhbHVlc1tp KytdID0gSW50NjRHZXREYXR1bShlbnRyeS0+d2FsX3JlY29yZHMpOworCQkJdmFsdWVzW2kr K10gPSBJbnQ2NEdldERhdHVtKGVudHJ5LT53YWxfZnBpcyk7CisJCQl2YWx1ZXNbaSsrXSA9 IEludDY0R2V0RGF0dW0oZW50cnktPndhbF9ieXRlcyk7CisKKwkJCXZhbHVlc1tpKytdID0g RmxvYXQ4R2V0RGF0dW0oZW50cnktPmNwdV91c2VyKTsKKwkJCXZhbHVlc1tpKytdID0gRmxv YXQ4R2V0RGF0dW0oZW50cnktPmNwdV9zeXN0ZW0pOworCQkJdmFsdWVzW2krK10gPSBGbG9h dDhHZXREYXR1bShlbnRyeS0+Y3B1X2VsYXBzZWQpOworCisJCQl0dXBsZXN0b3JlX3B1dHZh bHVlcyhyc2luZm8tPnNldFJlc3VsdCwgcnNpbmZvLT5zZXREZXNjLCB2YWx1ZXMsIG51bGxz KTsKKwkJfQorCisJCS8qIGFkdmFuY2UgaW5kZXggKi8KKwkJaW5kZXggPSBxdWV1ZV9uZXh0 X2VudHJ5KGluZGV4LCBoZHItPmxlbik7CisJCXBmcmVlKGhkcik7CisJfQorCisJTFdMb2Nr UmVsZWFzZShzaGFyZWRTdGF0ZS0+bG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCit2YWN1dW1f aGlzdG9yeV9sb2dfaG9vayhUaW1lc3RhbXBUeiBzdGFydHRpbWUsIFRpbWVzdGFtcFR6IGVu ZHRpbWUsIE9pZCByZWxpZCwKKwkJCQkJCWJvb2wgaXNfYXV0b3ZhY3V1bSwgYm9vbCBpc19h Z2dyZXNzaXZlLCBib29sIGlzX3dyYXBhcm91bmQsCisJCQkJCQlib29sIGluZGV4X2NsZWFu dXAsCisJCQkJCQlpbnQ2NCBwYWdlc19yZW1vdmVkLCBpbnQ2NCBwYWdlc19yZW1haW4sIGlu dDY0IHBhZ2VzX3NjYW5uZWQsCisJCQkJCQlpbnQ2NCBwYWdlc19mcm96ZW4sIGludDY0IHBh Z2VzX21pc3NlZF9kZWFkLAorCQkJCQkJaW50NjQgcGFnZXNfbmV3X3Zpc2libGUsIGludDY0 IHBhZ2VzX25ld19mcm96ZW4sIGludDY0IHBhZ2VzX25ld192aXNpYmxlX2Zyb3plbiwKKwkJ CQkJCWludDY0IHR1cGxlc19yZW1vdmVkLCBpbnQ2NCB0dXBsZXNfcmVtYWluLCBpbnQ2NCB0 dXBsZXNfbm90X3JlbW92YWJsZSwKKwkJCQkJCWludDY0IHR1cGxlc19mcm96ZW4sIGludDY0 IHR1cGxlc19taXNzZWRfZGVhZCwKKwkJCQkJCWludDMyIHJlbW92YWJsZV9jdXRvZmYsIGlu dDMyIHJlbGZyb3plbnhpZF9hZHZhbmNlLCBpbnQzMiByZWxtaW5teGlkX2FkdmFuY2UsCisJ CQkJCQlpbnQ2NCBpbmRleF9zY2FucywgaW50MzIgaW5kZXhfY291bnQsIGludDY0IGluZGV4 X3BhZ2VzLAorCQkJCQkJaW50NjQgaW5kZXhfcGFnZXNfbmV3bHlfZGVsZXRlZCwgaW50NjQg aW5kZXhfcGFnZXNfZGVsZXRlZCwgaW50NjQgaW5kZXhfcGFnZXNfZnJlZSwKKwkJCQkJCWRv dWJsZSBpb19yZWFkX21zLCBkb3VibGUgaW9fd3JpdGVfbXMsCisJCQkJCQlpbnQ2NCB3YWxf cmVjb3JkcywgaW50NjQgd2FsX2ZwaXMsIGludDY0IHdhbF9ieXRlcywKKwkJCQkJCWRvdWJs ZSBjcHVfdXNlciwgZG91YmxlIGNwdV9zeXN0ZW0sIGRvdWJsZSBjcHVfZWxhcHNlZCkKK3sK KwlWYWN1dW1FbnRyeQkJZW50cnk7CisKKwlpZiAocHJldl92YWN1dW1fbG9nX2hvb2spCisJ CXByZXZfdmFjdXVtX2xvZ19ob29rKHN0YXJ0dGltZSwgZW5kdGltZSwgcmVsaWQsCisJCQkJ CQkJIGlzX2F1dG92YWN1dW0sIGlzX2FnZ3Jlc3NpdmUsIGlzX3dyYXBhcm91bmQsCisJCQkJ CQkJIGluZGV4X2NsZWFudXAsCisJCQkJCQkJIHBhZ2VzX3JlbW92ZWQsIHBhZ2VzX3JlbWFp biwgcGFnZXNfc2Nhbm5lZCwKKwkJCQkJCQkgcGFnZXNfZnJvemVuLCBwYWdlc19taXNzZWRf ZGVhZCwKKwkJCQkJCQkgcGFnZXNfbmV3X3Zpc2libGUsIHBhZ2VzX25ld19mcm96ZW4sIHBh Z2VzX25ld192aXNpYmxlX2Zyb3plbiwKKwkJCQkJCQkgdHVwbGVzX3JlbW92ZWQsIHR1cGxl c19yZW1haW4sIHR1cGxlc19ub3RfcmVtb3ZhYmxlLAorCQkJCQkJCSB0dXBsZXNfZnJvemVu LCB0dXBsZXNfbWlzc2VkX2RlYWQsCisJCQkJCQkJIHJlbW92YWJsZV9jdXRvZmYsIHJlbGZy b3plbnhpZF9hZHZhbmNlLCByZWxtaW5teGlkX2FkdmFuY2UsCisJCQkJCQkJIGluZGV4X3Nj YW5zLCBpbmRleF9jb3VudCwgaW5kZXhfcGFnZXMsIGluZGV4X3BhZ2VzX25ld2x5X2RlbGV0 ZWQsCisJCQkJCQkJIGluZGV4X3BhZ2VzX2RlbGV0ZWQsIGluZGV4X3BhZ2VzX2ZyZWUsCisJ CQkJCQkJIGlvX3JlYWRfbXMsIGlvX3dyaXRlX21zLAorCQkJCQkJCSB3YWxfcmVjb3Jkcywg d2FsX2ZwaXMsIHdhbF9ieXRlcywKKwkJCQkJCQkgY3B1X3VzZXIsIGNwdV9zeXN0ZW0sIGNw dV9lbGFwc2VkKTsKKworCWVudHJ5Lmhkci50eXBlID0gRU5UUllfVkFDVVVNOworCWVudHJ5 Lmhkci5sZW4gPSBzaXplb2YoVmFjdXVtRW50cnkpOworCisJZW50cnkuc3RhcnRfdGltZSA9 IHN0YXJ0dGltZTsKKwllbnRyeS5lbmRfdGltZSA9IGVuZHRpbWU7CisJZW50cnkuZGJpZCA9 IE15RGF0YWJhc2VJZDsKKwllbnRyeS5yZWxpZCA9IHJlbGlkOworCWVudHJ5LmlzX2F1dG92 YWN1dW0gPSBpc19hdXRvdmFjdXVtOworCWVudHJ5LmlzX2FnZ3Jlc3NpdmUgPSBpc19hZ2dy ZXNzaXZlOworCWVudHJ5LmlzX3dyYXBhcm91bmQgPSBpc193cmFwYXJvdW5kOworCWVudHJ5 LmluZGV4X2NsZWFudXAgPSBpbmRleF9jbGVhbnVwOworCWVudHJ5LmluZGV4X3NjYW5zID0g aW5kZXhfc2NhbnM7CisJZW50cnkucGFnZXNfcmVtb3ZlZCA9IHBhZ2VzX3JlbW92ZWQ7CisJ ZW50cnkucGFnZXNfcmVtYWluID0gcGFnZXNfcmVtYWluOworCWVudHJ5LnBhZ2VzX3NjYW5u ZWQgPSBwYWdlc19zY2FubmVkOworCWVudHJ5LnBhZ2VzX2Zyb3plbiA9IHBhZ2VzX2Zyb3pl bjsKKwllbnRyeS5wYWdlc19taXNzZWRfZGVhZCA9IHBhZ2VzX21pc3NlZF9kZWFkOworCWVu dHJ5LnBhZ2VzX25ld192aXNpYmxlID0gcGFnZXNfbmV3X3Zpc2libGU7CisJZW50cnkucGFn ZXNfbmV3X2Zyb3plbiA9IHBhZ2VzX25ld19mcm96ZW47CisJZW50cnkucGFnZXNfbmV3X3Zp c2libGVfZnJvemVuID0gcGFnZXNfbmV3X3Zpc2libGVfZnJvemVuOworCWVudHJ5LnR1cGxl c19yZW1vdmVkID0gdHVwbGVzX3JlbW92ZWQ7CisJZW50cnkudHVwbGVzX3JlbWFpbiA9IHR1 cGxlc19yZW1haW47CisJZW50cnkudHVwbGVzX25vdF9yZW1vdmFibGUgPSB0dXBsZXNfbm90 X3JlbW92YWJsZTsKKwllbnRyeS50dXBsZXNfZnJvemVuID0gdHVwbGVzX2Zyb3plbjsKKwll bnRyeS50dXBsZXNfbWlzc2VkX2RlYWQgPSB0dXBsZXNfbWlzc2VkX2RlYWQ7CisJZW50cnku cmVtb3ZhYmxlX2N1dG9mZiA9IHJlbW92YWJsZV9jdXRvZmY7CisJZW50cnkucmVsZnJvemVu eGlkX2FkdmFuY2UgPSByZWxmcm96ZW54aWRfYWR2YW5jZTsKKwllbnRyeS5yZWxtaW5teGlk X2FkdmFuY2UgPSByZWxtaW5teGlkX2FkdmFuY2U7CisJZW50cnkuaW5kZXhfY291bnQgPSBp bmRleF9jb3VudDsKKwllbnRyeS5pbmRleF9wYWdlcyA9IGluZGV4X3BhZ2VzOworCWVudHJ5 LmluZGV4X3BhZ2VzX25ld2x5X2RlbGV0ZWQgPSBpbmRleF9wYWdlc19uZXdseV9kZWxldGVk OworCWVudHJ5LmluZGV4X3BhZ2VzX2RlbGV0ZWQgPSBpbmRleF9wYWdlc19kZWxldGVkOwor CWVudHJ5LmluZGV4X3BhZ2VzX2ZyZWUgPSBpbmRleF9wYWdlc19mcmVlOworCWVudHJ5Lmlv X3JlYWRfbXMgPSBpb19yZWFkX21zOworCWVudHJ5LmlvX3dyaXRlX21zID0gaW9fd3JpdGVf bXM7CisJZW50cnkud2FsX3JlY29yZHMgPSB3YWxfcmVjb3JkczsKKwllbnRyeS53YWxfZnBp cyA9IHdhbF9mcGlzOworCWVudHJ5LndhbF9ieXRlcyA9IHdhbF9ieXRlczsKKwllbnRyeS5j cHVfdXNlciA9IGNwdV91c2VyOworCWVudHJ5LmNwdV9zeXN0ZW0gPSBjcHVfc3lzdGVtOwor CWVudHJ5LmNwdV9lbGFwc2VkID0gY3B1X2VsYXBzZWQ7CisKKwlMV0xvY2tBY3F1aXJlKHNo YXJlZFN0YXRlLT5sb2NrLCBMV19FWENMVVNJVkUpOworCisJcXVldWVfYWRkX2VudHJ5KChF bnRyeSAqKSAmZW50cnkpOworCisJTFdMb2NrUmVsZWFzZShzaGFyZWRTdGF0ZS0+bG9jayk7 Cit9CisKKy8qIGNoZWNrcG9pbnQgKi8KKworI2RlZmluZQlDSEVDS1BPSU5UX0hJU1RPUllf Q09MU19WMV8wCTI1CisjZGVmaW5lCUNIRUNLUE9JTlRfSElTVE9SWV9DT0xTCQkJMjUKKwor RGF0dW0KK2NoZWNrcG9pbnRfaGlzdG9yeV8xXzAoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlj aGVja3BvaW50X2hpc3RvcnlfaW50ZXJuYWwoZmNpbmZvKTsKKworCXJldHVybiAoRGF0dW0p IDA7Cit9CisKK3N0YXRpYyB2b2lkCitjaGVja3BvaW50X2hpc3RvcnlfaW50ZXJuYWwoRnVu Y3Rpb25DYWxsSW5mbyBmY2luZm8pCit7CisJUmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJl dHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRpbmZvOworCU9pZAkJCXVzZXJpZCA9IEdl dFVzZXJJZCgpOworCWludDY0CQlpbmRleDsKKworCS8qCisJICogU3VwZXJ1c2VycyBvciBy b2xlcyB3aXRoIHRoZSBwcml2aWxlZ2VzIG9mIHBnX3JlYWRfYWxsX3N0YXRzIG1lbWJlcnMK KwkgKiBhcmUgYWxsb3dlZAorCSAqLworCWlmICghaGFzX3ByaXZzX29mX3JvbGUodXNlcmlk LCBST0xFX1BHX1JFQURfQUxMX1NUQVRTKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJy Y29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRFKSwKKwkJCQkg ZXJybXNnKCJ2YWN1dW1faGlzdG9yeSBwcml2aWxlZ2UgZXJyb3IiKSkpOworCisJLyogaGFz aCB0YWJsZSBtdXN0IGV4aXN0IGFscmVhZHkgKi8KKwlpZiAoIXNoYXJlZFN0YXRlKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVS RVFVSVNJVEVfU1RBVEUpLAorCQkJCSBlcnJtc2coInZhY3V1bV9oaXN0b3J5IG11c3QgYmUg bG9hZGVkIHZpYSBcInNoYXJlZF9wcmVsb2FkX2xpYnJhcmllc1wiIikpKTsKKworCUluaXRN YXRlcmlhbGl6ZWRTUkYoZmNpbmZvLCAwKTsKKworCUxXTG9ja0FjcXVpcmUoc2hhcmVkU3Rh dGUtPmxvY2ssIExXX1NIQVJFRCk7CisKKwlpbmRleCA9IHNoYXJlZFN0YXRlLT5xdWV1ZVN0 YXJ0OworCXdoaWxlIChpbmRleCA8IHNoYXJlZFN0YXRlLT5xdWV1ZU5leHQpCisJeworCQlF bnRyeQkgICAgKmhkciA9IHF1ZXVlX3JlYWRfZW50cnkoaW5kZXgpOworCisJCS8qIG5vdCBh IGNoZWNrcG9pbnQgZW50cnkgKi8KKwkJaWYgKGhkci0+dHlwZSA9PSBFTlRSWV9DSEVDS1BP SU5UKQorCQl7CisJCQlpbnQJCQlpID0gMDsKKwkJCURhdHVtCQl2YWx1ZXNbQ0hFQ0tQT0lO VF9ISVNUT1JZX0NPTFNdOworCQkJYm9vbAkJbnVsbHNbQ0hFQ0tQT0lOVF9ISVNUT1JZX0NP TFNdOworCisJCQlDaGVja3BvaW50RW50cnkgKmVudHJ5ID0gKENoZWNrcG9pbnRFbnRyeSAq KSBoZHI7CisKKwkJCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2YWx1ZXMpKTsKKwkJCW1l bXNldChudWxscywgMCwgc2l6ZW9mKG51bGxzKSk7CisKKwkJCXZhbHVlc1tpKytdID0gVGlt ZXN0YW1wVHpHZXREYXR1bShlbnRyeS0+c3RhcnRfdGltZSk7CisJCQl2YWx1ZXNbaSsrXSA9 IFRpbWVzdGFtcFR6R2V0RGF0dW0oZW50cnktPmVuZF90aW1lKTsKKworCQkJdmFsdWVzW2kr K10gPSBCb29sR2V0RGF0dW0oZW50cnktPmlzX3NodXRkb3duKTsKKwkJCXZhbHVlc1tpKytd ID0gQm9vbEdldERhdHVtKGVudHJ5LT5pc19lbmRfb2ZfcmVjb3ZlcnkpOworCQkJdmFsdWVz W2krK10gPSBCb29sR2V0RGF0dW0oZW50cnktPmlzX2ltbWVkaWF0ZSk7CisJCQl2YWx1ZXNb aSsrXSA9IEJvb2xHZXREYXR1bShlbnRyeS0+aXNfZm9yY2UpOworCQkJdmFsdWVzW2krK10g PSBCb29sR2V0RGF0dW0oZW50cnktPmlzX3dhaXQpOworCQkJdmFsdWVzW2krK10gPSBCb29s R2V0RGF0dW0oZW50cnktPmlzX3dhbCk7CisJCQl2YWx1ZXNbaSsrXSA9IEJvb2xHZXREYXR1 bShlbnRyeS0+aXNfdGltZSk7CisJCQl2YWx1ZXNbaSsrXSA9IEJvb2xHZXREYXR1bShlbnRy eS0+aXNfZmx1c2hfYWxsKTsKKworCQkJdmFsdWVzW2krK10gPSBJbnQzMkdldERhdHVtKGVu dHJ5LT5idWZmZXJzX3dyaXR0ZW4pOworCQkJdmFsdWVzW2krK10gPSBJbnQzMkdldERhdHVt KGVudHJ5LT5zbHJ1X3dyaXR0ZW4pOworCQkJdmFsdWVzW2krK10gPSBJbnQzMkdldERhdHVt KGVudHJ5LT5zZWdzX2FkZGVkKTsKKwkJCXZhbHVlc1tpKytdID0gSW50MzJHZXREYXR1bShl bnRyeS0+c2Vnc19yZW1vdmVkKTsKKwkJCXZhbHVlc1tpKytdID0gSW50MzJHZXREYXR1bShl bnRyeS0+c2Vnc19yZWN5Y2xlZCk7CisKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1 bShlbnRyeS0+d3JpdGVfbXMpOworCQkJdmFsdWVzW2krK10gPSBJbnQ2NEdldERhdHVtKGVu dHJ5LT5zeW5jX21zKTsKKwkJCXZhbHVlc1tpKytdID0gSW50NjRHZXREYXR1bShlbnRyeS0+ dG90YWxfbXMpOworCisJCQl2YWx1ZXNbaSsrXSA9IEludDMyR2V0RGF0dW0oZW50cnktPnN5 bmNfZmlsZXMpOworCisJCQl2YWx1ZXNbaSsrXSA9IEludDY0R2V0RGF0dW0oZW50cnktPnN5 bmNfbG9uZ2VzdF9tcyk7CisJCQl2YWx1ZXNbaSsrXSA9IEludDY0R2V0RGF0dW0oZW50cnkt PnN5bmNfYXZlcmFnZV9tcyk7CisKKwkJCXZhbHVlc1tpKytdID0gRmxvYXQ4R2V0RGF0dW0o ZW50cnktPmRpc3RhbmNlX3ByZXYpOworCQkJdmFsdWVzW2krK10gPSBGbG9hdDhHZXREYXR1 bShlbnRyeS0+ZGlzdGFuY2VfZXN0KTsKKworCQkJdmFsdWVzW2krK10gPSBMU05HZXREYXR1 bShlbnRyeS0+bHNuKTsKKwkJCXZhbHVlc1tpKytdID0gTFNOR2V0RGF0dW0oZW50cnktPnJl ZG9fbHNuKTsKKworCQkJdHVwbGVzdG9yZV9wdXR2YWx1ZXMocnNpbmZvLT5zZXRSZXN1bHQs IHJzaW5mby0+c2V0RGVzYywgdmFsdWVzLCBudWxscyk7CisJCX0KKworCQkvKiBhZHZhbmNl IHRvIGluZGV4ICovCisJCWluZGV4ID0gcXVldWVfbmV4dF9lbnRyeShpbmRleCwgaGRyLT5s ZW4pOworCQlwZnJlZShoZHIpOworCX0KKworCUxXTG9ja1JlbGVhc2Uoc2hhcmVkU3RhdGUt PmxvY2spOworfQorCitzdGF0aWMgdm9pZAorY2hlY2twb2ludF9oaXN0b3J5X2xvZ19ob29r KFRpbWVzdGFtcFR6IHN0YXJ0X3RpbWUsIFRpbWVzdGFtcFR6IGVuZF90aW1lLAorCQkJCQkJ CWJvb2wgaXNfc2h1dGRvd24sIGJvb2wgaXNfZW5kX29mX3JlY292ZXJ5LAorCQkJCQkJCWJv b2wgaXNfaW1tZWRpYXRlLCBib29sIGlzX2ZvcmNlLCBib29sIGlzX3dhaXQsCisJCQkJCQkJ Ym9vbCBpc193YWwsIGJvb2wgaXNfdGltZSwgYm9vbCBpc19mbHVzaF9hbGwsCisJCQkJCQkJ aW50IGJ1ZmZlcnNfd3JpdHRlbiwgaW50IHNscnVfd3JpdHRlbiwKKwkJCQkJCQlpbnQgc2Vn c19hZGRlZCwgaW50IHNlZ3NfcmVtb3ZlZCwgaW50IHNlZ3NfcmVjeWNsZWQsCisJCQkJCQkJ bG9uZyB3cml0ZV9tcywgbG9uZyBzeW5jX21zLCBsb25nIHRvdGFsX21zLAorCQkJCQkJCWlu dCBzeW5jX2ZpbGVzLCBsb25nIHN5bmNfbG9uZ2VzdF9tcywgbG9uZyBzeW5jX2F2ZXJhZ2Vf bXMsCisJCQkJCQkJZG91YmxlIGRpc3RhbmNlX3ByZXYsIGRvdWJsZSBkaXN0YW5jZV9lc3Qs CisJCQkJCQkJWExvZ1JlY1B0ciBsc24sIFhMb2dSZWNQdHIgcmVkb19sc24pCit7CisJQ2hl Y2twb2ludEVudHJ5CQllbnRyeTsKKworCWlmIChwcmV2X3ZhY3V1bV9sb2dfaG9vaykKKwkJ cHJldl9jaGVja3BvaW50X2xvZ19ob29rKHN0YXJ0X3RpbWUsIGVuZF90aW1lLAorCQkJCQkJ CWlzX3NodXRkb3duLCBpc19lbmRfb2ZfcmVjb3ZlcnksCisJCQkJCQkJaXNfaW1tZWRpYXRl LCBpc19mb3JjZSwgaXNfd2FpdCwKKwkJCQkJCQlpc193YWwsIGlzX3RpbWUsIGlzX2ZsdXNo X2FsbCwKKwkJCQkJCQlidWZmZXJzX3dyaXR0ZW4sIHNscnVfd3JpdHRlbiwKKwkJCQkJCQlz ZWdzX2FkZGVkLCBzZWdzX3JlbW92ZWQsIHNlZ3NfcmVjeWNsZWQsCisJCQkJCQkJd3JpdGVf bXMsIHN5bmNfbXMsIHRvdGFsX21zLAorCQkJCQkJCXN5bmNfZmlsZXMsIHN5bmNfbG9uZ2Vz dF9tcywgc3luY19hdmVyYWdlX21zLAorCQkJCQkJCWRpc3RhbmNlX3ByZXYsIGRpc3RhbmNl X2VzdCwKKwkJCQkJCQlsc24sIHJlZG9fbHNuKTsKKworCWVudHJ5Lmhkci50eXBlID0gRU5U UllfQ0hFQ0tQT0lOVDsKKwllbnRyeS5oZHIubGVuID0gc2l6ZW9mKENoZWNrcG9pbnRFbnRy eSk7CisKKwllbnRyeS5zdGFydF90aW1lID0gc3RhcnRfdGltZTsKKwllbnRyeS5lbmRfdGlt ZSA9IGVuZF90aW1lOworCisJZW50cnkuaXNfc2h1dGRvd24gPSBpc19zaHV0ZG93bjsKKwll bnRyeS5pc19lbmRfb2ZfcmVjb3ZlcnkgPSBpc19lbmRfb2ZfcmVjb3Zlcnk7CisJZW50cnku aXNfaW1tZWRpYXRlID0gaXNfaW1tZWRpYXRlOworCWVudHJ5LmlzX2ZvcmNlID0gaXNfZm9y Y2U7CisJZW50cnkuaXNfd2FpdCA9IGlzX3dhaXQ7CisJZW50cnkuaXNfd2FsID0gaXNfd2Fs OworCWVudHJ5LmlzX3RpbWUgPSBpc190aW1lOworCWVudHJ5LmlzX2ZsdXNoX2FsbCA9IGlz X2ZsdXNoX2FsbDsKKworCWVudHJ5LmJ1ZmZlcnNfd3JpdHRlbiA9IGJ1ZmZlcnNfd3JpdHRl bjsKKwllbnRyeS5zbHJ1X3dyaXR0ZW4gPSBzbHJ1X3dyaXR0ZW47CisJZW50cnkuc2Vnc19h ZGRlZCA9IHNlZ3NfYWRkZWQ7CisJZW50cnkuc2Vnc19yZW1vdmVkID0gc2Vnc19yZW1vdmVk OworCWVudHJ5LnNlZ3NfcmVjeWNsZWQgPSBzZWdzX3JlY3ljbGVkOworCisJZW50cnkud3Jp dGVfbXMgPSB3cml0ZV9tczsKKwllbnRyeS5zeW5jX21zID0gc3luY19tczsKKwllbnRyeS50 b3RhbF9tcyA9IHRvdGFsX21zOworCisJZW50cnkuc3luY19maWxlcyA9IHN5bmNfZmlsZXM7 CisJZW50cnkuc3luY19sb25nZXN0X21zID0gc3luY19sb25nZXN0X21zOworCWVudHJ5LnN5 bmNfYXZlcmFnZV9tcyA9IHN5bmNfYXZlcmFnZV9tczsKKworCWVudHJ5LmRpc3RhbmNlX3By ZXYgPSBkaXN0YW5jZV9wcmV2OworCWVudHJ5LmRpc3RhbmNlX2VzdCA9IGRpc3RhbmNlX2Vz dDsKKwllbnRyeS5sc24gPSBsc247CisJZW50cnkucmVkb19sc24gPSByZWRvX2xzbjsKKwor CUxXTG9ja0FjcXVpcmUoc2hhcmVkU3RhdGUtPmxvY2ssIExXX0VYQ0xVU0lWRSk7CisKKwlx dWV1ZV9hZGRfZW50cnkoKEVudHJ5ICopICZlbnRyeSk7CisKKwlMV0xvY2tSZWxlYXNlKHNo YXJlZFN0YXRlLT5sb2NrKTsKK30KKworLyogcmV0dXJuIHRoZSBwb3NpdGlvbiBvZiBuZXh0 IGV4dHJ5IGFmdGVyIHRoZSBvbmUgc3RhcnRpbmcgYXQgaW5kZXggKi8KK3N0YXRpYyBpbnQ2 NAorcXVldWVfbmV4dF9lbnRyeShpbnQ2NCBpbmRleCwgU2l6ZSBsZW4pCit7CisJQXNzZXJ0 Q2hlY2tRdWV1ZSgpOworCisJLyogY2FsY3VsYXRlIHRoZSBuZXh0IGVudHJ5IGluZGV4ICov CisJcmV0dXJuIChpbmRleCArIHF1ZXVlX2VudHJ5X2xlbihsZW4pKTsKK30KKworLyogaG93 IG11Y2ggZnJlZSBzcGFjZSBpcyB0aGVyZSBmb3IgbmV3IGVudHJpZXMgKi8KK3N0YXRpYyBp bnQ2NAorcXVldWVfZnJlZV9zcGFjZSh2b2lkKQoreworCWludDY0CXVzZWQgPSAoc2hhcmVk U3RhdGUtPnF1ZXVlTmV4dCAtIHNoYXJlZFN0YXRlLT5xdWV1ZVN0YXJ0KTsKKwlpbnQ2NAlm cmVlID0gKHNoYXJlZFN0YXRlLT5xdWV1ZVNpemUgLSB1c2VkKTsKKworCUFzc2VydENoZWNr UXVldWUoKTsKKworCXJldHVybiBmcmVlOworfQorCisvKiBYWFggYXNzdW1lcyB0aGUgcXVl dWUgaXMgcHJvcGVybHkgbG9ja2VkICovCitzdGF0aWMgRW50cnkgKgorcXVldWVfcmVhZF9l bnRyeShpbnQ2NCBpbmRleCkKK3sKKwlFbnRyeSAgKnRtcDsKKwljaGFyICAgKnB0cjsKKwlF bnRyeSAgKmVudHJ5OworCWludDY0CW5ieXRlczsKKworCUFzc2VydENoZWNrUXVldWUoKTsK KworCXRtcCA9IChFbnRyeSAqKSAmc2hhcmVkU3RhdGUtPnF1ZXVlW2luZGV4ICUgc2hhcmVk U3RhdGUtPnF1ZXVlU2l6ZV07CisKKwluYnl0ZXMgPSB0bXAtPmxlbjsKKwlwdHIgPSBwYWxs b2ModG1wLT5sZW4pOworCWVudHJ5ID0gKEVudHJ5ICopIHB0cjsKKworCXdoaWxlIChuYnl0 ZXMgPiAwKQorCXsKKwkJaW50NjQJbmV4dCA9IChpbmRleCAlIHNoYXJlZFN0YXRlLT5xdWV1 ZVNpemUpOworCQlpbnQ2NAluc3BhY2UgPSAoc2hhcmVkU3RhdGUtPnF1ZXVlU2l6ZSAtIG5l eHQpOworCQlpbnQ2NAluY29weSA9IE1pbihuc3BhY2UsIG5ieXRlcyk7CisKKwkJbWVtY3B5 KHB0ciwgJnNoYXJlZFN0YXRlLT5xdWV1ZVtuZXh0XSwgbmNvcHkpOworCisJCWluZGV4ICs9 IG5jb3B5OworCQluYnl0ZXMgLT0gbmNvcHk7CisJCXB0ciArPSBuY29weTsKKwl9CisKKwly ZXR1cm4gZW50cnk7Cit9CisKKy8qIHJvdW5kIHRoZSBsZW5ndGggdG8gYSBtdWx0aXBsZSBv ZiBoZWFkZXIgc2l6ZSAod2l0aCBhbGlnbm1lbnQpICovCitzdGF0aWMgaW50MzIKK3F1ZXVl X2VudHJ5X2xlbihpbnQzMiBsZW4pCit7CisJU2l6ZQlobGVuID0gTUFYQUxJR04oc2l6ZW9m KEVudHJ5KSk7CisKKwlyZXR1cm4gKChsZW4gKyAoaGxlbiAtIDEpKSAvIGhsZW4pICogaGxl bjsKK30KKworLyogWFhYIGFzc3VtZXMgdGhlIHF1ZXVlIGlzIGxvY2tlZCAqLworc3RhdGlj IHZvaWQKK3F1ZXVlX2FkZF9lbnRyeShFbnRyeSAqZW50cnkpCit7CisJY2hhciAgICpwdHIg PSAoY2hhciAqKSBlbnRyeTsKKwlpbnQJCW5ieXRlcyA9IGVudHJ5LT5sZW47CisJaW50CQlu ZXh0ID0gc2hhcmVkU3RhdGUtPnF1ZXVlTmV4dDsKKwlpbnQJCWxlbiA9IHF1ZXVlX2VudHJ5 X2xlbihlbnRyeS0+bGVuKTsKKworCUFzc2VydENoZWNrUXVldWUoKTsKKworCUFzc2VydChM V0xvY2tIZWxkQnlNZUluTW9kZShzaGFyZWRTdGF0ZS0+bG9jaywgTFdfRVhDTFVTSVZFKSk7 CisKKwkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBzcGFjZSBmb3IgdGhlIG5ldyBlbnRyeSBpbiB0 aGUgcXVldWUgKi8KKwl3aGlsZSAocXVldWVfZnJlZV9zcGFjZSgpIDwgbGVuKQorCXsKKwkJ aW50NjQJc3RhcnQ7CisJCUVudHJ5ICAqdG1wOworCisJCXN0YXJ0ID0gc2hhcmVkU3RhdGUt PnF1ZXVlU3RhcnQgJSBzaGFyZWRTdGF0ZS0+cXVldWVTaXplOworCQl0bXAgPSAoRW50cnkg KikgJnNoYXJlZFN0YXRlLT5xdWV1ZVtzdGFydF07CisKKwkJLyogdGhpcyBlbnN1cmVzIHdl IG5ldmVyIHdyYXAgdGhlIGhlYWRlciAqLworCQlzaGFyZWRTdGF0ZS0+cXVldWVTdGFydAor CQkJPSBxdWV1ZV9uZXh0X2VudHJ5KHNoYXJlZFN0YXRlLT5xdWV1ZVN0YXJ0LCB0bXAtPmxl bik7CisJfQorCisJLyogY29weSB0aGUgZGF0YSwgbWF5YmUgd3JhcCBhcm91bmQgKi8KKwl3 aGlsZSAobmJ5dGVzID4gMCkKKwl7CisJCWludDY0CW5mcmVlLAorCQkJCW5jb3B5OworCisJ CW5leHQgPSAobmV4dCAlIHNoYXJlZFN0YXRlLT5xdWV1ZVNpemUpOworCQluZnJlZSA9IChz aGFyZWRTdGF0ZS0+cXVldWVTaXplIC0gbmV4dCk7CisJCW5jb3B5ID0gTWluKG5mcmVlLCBu Ynl0ZXMpOworCisJCW1lbWNweSgmc2hhcmVkU3RhdGUtPnF1ZXVlW25leHRdLCBwdHIsIG5j b3B5KTsKKworCQluZXh0ICs9IG5jb3B5OworCQluYnl0ZXMgLT0gbmNvcHk7CisJCXB0ciAr PSBuY29weTsKKwl9CisKKwlzaGFyZWRTdGF0ZS0+cXVldWVOZXh0ICs9IGxlbjsKK30KZGlm ZiAtLWdpdCBhL2NvbnRyaWIvc3RhdHNfaGlzdG9yeS9zdGF0c19oaXN0b3J5LmNvbnRyb2wg Yi9jb250cmliL3N0YXRzX2hpc3Rvcnkvc3RhdHNfaGlzdG9yeS5jb250cm9sCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lOTY5MmVkNTE1YwotLS0gL2Rldi9u dWxsCisrKyBiL2NvbnRyaWIvc3RhdHNfaGlzdG9yeS9zdGF0c19oaXN0b3J5LmNvbnRyb2wK QEAgLTAsMCArMSw1IEBACisjIHZhY3V1bV9zdGF0cyBleHRlbnNpb24KK2NvbW1lbnQgPSAn dHJhY2sgaGlzdG9yeSBvZiBzdGF0aXN0aWNzIG9uIHZhcmlvdXMgZXZlbnRzJworZGVmYXVs dF92ZXJzaW9uID0gJzEuMCcKK21vZHVsZV9wYXRobmFtZSA9ICckbGliZGlyL3N0YXRzX2hp c3RvcnknCityZWxvY2F0YWJsZSA9IHRydWUKLS0gCjIuNDcuMQoK --------------QtWVPH0ZWbTLUFo0bg5Mgqo7--