Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mafFF-0002ec-9Y for pgsql-hackers@arkaria.postgresql.org; Wed, 13 Oct 2021 14:28:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mafFD-0003fj-6q for pgsql-hackers@arkaria.postgresql.org; Wed, 13 Oct 2021 14:28:35 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mafFC-0003fb-Pq for pgsql-hackers@lists.postgresql.org; Wed, 13 Oct 2021 14:28:34 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mafF9-0008Jo-Ho for pgsql-hackers@lists.postgresql.org; Wed, 13 Oct 2021 14:28:34 +0000 Received: from mail.postgrespro.ru (cyclops.postgrespro.ru [93.174.131.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 4C30021C8167; Wed, 13 Oct 2021 17:28:30 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1634135310; bh=YpcVHUNh4ZD+5/2baLVEW6Nv3+icTNIkCju9FumGyIQ=; h=Date:From:To:Subject:In-Reply-To:References; b=O1MNiduBkQuck6ACieM0EBk+Rov1ZG+BVxQcyLt3BtZY/C3xH0wXx07Zdg9/CXwS2 afa0C8U4atmQLwwixb91RZ4Q9nHx5SDcAk2fuS/KjqGD/38izVFredOKtZNDYHFwyW OsrkWUmVTSzWdCA45gTKIY9ghwZu+h151W0llAy4= MIME-Version: 1.0 Date: Wed, 13 Oct 2021 17:28:30 +0300 From: Ekaterina Sokolova To: pgsql-hackers@lists.postgresql.org, torikoshia@oss.nttdata.com Subject: Re: RFC: Logging plan of the running query In-Reply-To: References: <0842b5da697a03869fb50be93817e4e1@oss.nttdata.com> <1c1590d3962cea6e06621da76677b5f3@oss.nttdata.com> <64f716c44629e303b66e6c24502147cc@oss.nttdata.com> <8b53b32f-26cc-0531-4ac0-27310e0bef4b@oss.nttdata.com> <7958d03fffe3bafcfe8a505145c63928@oss.nttdata.com> <9c4d9da6-48a5-fa18-4bff-f8eb0d4c9787@oss.nttdata.com> <59e6df324b41176d319f9c30bdb1d858@oss.nttdata.com> <0642712f-1298-960a-a3ba-e256d56040ac@oss.nttdata.com> <3d345c49561f31a1d8ff60ea86f88840@oss.nttdata.com> User-Agent: Roundcube Webmail/1.4.11 Message-ID: X-Sender: e.sokolova@postgrespro.ru Organization: Postgres Professional Content-Type: multipart/mixed; boundary="=_8336ca246a873335c4b8bdefc9cb88ce" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_8336ca246a873335c4b8bdefc9cb88ce Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Hi, hackers! • The last version of patch is correct applied. It changes 8 files from /src/backend, and 9 other files. • I have 1 error and 1 warning during compilation on Mac. explain.c:4985:25: error: implicit declaration of function 'GetLockMethodLocalHash' is invalid in C99 [-Werror,-Wimplicit-function-declaration] hash_seq_init(&status, GetLockMethodLocalHash()); explain.c:4985:25: warning: incompatible integer to pointer conversion passing 'int' to parameter of type 'HTAB *' (aka 'struct HTAB *') [-Wint-conversion] hash_seq_init(&status, GetLockMethodLocalHash()); This error doesn't appear at my second machine with Ubuntu. I found the reason. You delete #ifdef USE_ASSERT_CHECKING from implementation of function GetLockMethodLocalHash(void), but this ifdef exists around function declaration. There may be a situation, when implementation exists without declaration, so files with using of function produce errors. I create new version of patch with fix of this problem. I'm agree that seeing the details of a query is a useful feature, but I have several doubts: 1) There are lots of changes of core's code. But not all users need this functionality. So adding this functionality like extension seemed more reasonable. 2) There are many tools available to monitor the status of a query. How much do we need another one? For example: • pg_stat_progress_* is set of views with current status of ANALYZE, CREATE INDEX, VACUUM, CLUSTER, COPY, Base Backup. You can find it in PostgreSQL documentation [1]. • pg_query_state is contrib with 2 patches for core (I hope someday Community will support adding this patches to PostgreSQL). It contains function with printing table with pid, full query text, plan and current progress of every node like momentary EXPLAIN ANALYSE for SELECT, UPDATE, INSERT, DELETE. So it supports every flags and formats of EXPLAIN. You can find current version of pg_query_state on github [2]. Also I found old discussion about first version of it in Community [3]. 3) Have you measured the overload of your feature? It would be really interesting to know the changes in speed and performance. Thank you for working on this issue. I would be glad to continue to follow the development of this issue. Links above: [1] https://www.postgresql.org/docs/current/progress-reporting.html [2] https://github.com/postgrespro/pg_query_state [3] https://www.postgresql.org/message-id/dbfb1a42-ee58-88fd-8d77-550498f52bc5@postgrespro.ru -- Ekaterina Sokolova Postgres Professional: http://www.postgrespro.com The Russian Postgres Company --=_8336ca246a873335c4b8bdefc9cb88ce Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v11-0001-log-running-query-plan.patch Content-Disposition: attachment; filename=v11-0001-log-running-query-plan.patch; size=26680 RnJvbSAyNjM1NmVmYjA5NGFjMjViMTFmZTY1ZGY5M2YxMWM2NGFkMTM2NzIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFdlZCwgOCBTZXAgMjAyMSAyMDo0MDoyMSArMDkwMApTdWJqZWN0OiBb UEFUQ0ggdjhdIEFkZCBmdW5jdGlvbiB0byBsb2cgdGhlIHVudHJ1bmNhdGVkIHF1ZXJ5IHN0cmlu ZyBhbmQgaXRzCiBwbGFuIGZvciB0aGUgcXVlcnkgY3VycmVudGx5IHJ1bm5pbmcgb24gdGhlIGJh Y2tlbmQgd2l0aCB0aGUgc3BlY2lmaWVkCiBwcm9jZXNzIElELgoKQ3VycmVudGx5LCB3ZSBoYXZl IHRvIHdhaXQgZm9yIHRoZSBxdWVyeSBleGVjdXRpb24gdG8gZmluaXNoCmJlZm9yZSB3ZSBjaGVj ayBpdHMgcGxhbi4gVGhpcyBpcyBub3Qgc28gY29udmVuaWVudCB3aGVuCmludmVzdGlnYXRpbmcg bG9uZy1ydW5uaW5nIHF1ZXJpZXMgb24gcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMKd2hlcmUgd2Ug Y2Fubm90IHVzZSBkZWJ1Z2dlcnMuClRvIGltcHJvdmUgdGhpcyBzaXR1YXRpb24sIHRoaXMgcGF0 Y2ggYWRkcwpwZ19sb2dfY3VycmVudF9xdWVyeV9wbGFuKCkgZnVuY3Rpb24gdGhhdCByZXF1ZXN0 cyB0byBsb2cgdGhlCnBsYW4gb2YgdGhlIHNwZWNpZmllZCBiYWNrZW5kIHByb2Nlc3MuCgpPbmx5 IHN1cGVydXNlcnMgYXJlIGFsbG93ZWQgdG8gcmVxdWVzdCB0byBsb2cgdGhlIHBsYW5zIGJlY2F1 c2UKYWxsb3dpbmcgYW55IHVzZXJzIHRvIGlzc3VlIHRoaXMgcmVxdWVzdCBhdCBhbiB1bmJvdW5k ZWQgcmF0ZQp3b3VsZCBjYXVzZSBsb3RzIG9mIGxvZyBtZXNzYWdlcyBhbmQgd2hpY2ggY2FuIGxl YWQgdG8gZGVuaWFsCm9mIHNlcnZpY2UuCgpPbiByZWNlaXB0IG9mIHRoZSByZXF1ZXN0LCBhdCB0 aGUgbmV4dCBDSEVDS19GT1JfSU5URVJSVVBUUygpLAp0aGUgdGFyZ2V0IGJhY2tlbmQgbG9ncyBp dHMgcGxhbiBhdCBMT0dfU0VSVkVSX09OTFkgbGV2ZWwsIHNvCnRoYXQgdGhlc2UgcGxhbnMgd2ls bCBhcHBlYXIgaW4gdGhlIHNlcnZlciBsb2cgYnV0IG5vdCBiZSBzZW50CnRvIHRoZSBjbGllbnQu CgpTaW5jZSBzb21lIGNvZGVzLCB0ZXN0cyBhbmQgY29tbWVudHMgb2YKcGdfbG9nX2N1cnJlbnRf cXVlcnlfcGxhbigpIGFyZSB0aGUgc2FtZSB3aXRoCnBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250 ZXh0cygpLCB0aGlzIHBhdGNoIGFsc28gcmVmYWN0b3JzCnRoZW0gdG8gbWFrZSB0aGVtIGNvbW1v bi4KClJldmlld2VkLWJ5OiBCaGFyYXRoIFJ1cGlyZWRkeSwgRnVqaWkgTWFzYW8sIERpbGlwIEt1 bWFyLCBNYXNhaGlybyBJa2VkYSwgRWthdGVyaW5hIFNva29sb3ZhCgotLS0KIGRvYy9zcmMvc2dt bC9mdW5jLnNnbWwgICAgICAgICAgICAgICAgICAgICAgIHwgIDQ2ICsrKysrKysrCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9leHBsYWluLmMgICAgICAgICAgICAgICB8IDExNyArKysrKysrKysrKysr KysrKystCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jICAgICAgICAgICAgICB8ICAx MCArKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jICAgICAgICAgfCAgIDQg Kwogc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2lnbmFsZnVuY3MuYyAgICAgICAgfCAgNjEgKysr KysrKysrKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYyAgICAgICAgICAgICAgfCAg IDkgKy0KIHNyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyAgICAgICAgICAgICAgICAgIHwgICA3 ICsrCiBzcmMvYmFja2VuZC91dGlscy9hZHQvbWN4dGZ1bmNzLmMgICAgICAgICAgICB8ICA1NCAr LS0tLS0tLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jICAgICAgICAgICAgIHwg ICAxICsKIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgIHwgICA2 ICsKIHNyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCAgICAgICAgICAgICAgIHwgICAzICsK IHNyYy9pbmNsdWRlL21pc2NhZG1pbi5oICAgICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNy Yy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oICAgICAgICAgICAgICAgICAgIHwgICAyIC0KIHNyYy9p bmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNs dWRlL3N0b3JhZ2Uvc2lnbmFsZnVuY3MuaCAgICAgICAgICAgIHwgIDIyICsrKysKIHNyYy9pbmNs dWRlL3Rjb3AvcHF1ZXJ5LmggICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMub3V0IHwgIDE2ICsrLQogc3JjL3Rlc3QvcmVn cmVzcy9zcWwvbWlzY19mdW5jdGlvbnMuc3FsICAgICAgfCAgMTIgKy0KIDE4IGZpbGVzIGNoYW5n ZWQsIDMwOCBpbnNlcnRpb25zKCspLCA2NSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvaW5jbHVkZS9zdG9yYWdlL3NpZ25hbGZ1bmNzLmgKCmRpZmYgLS1naXQgYS9kb2Mvc3Jj L3NnbWwvZnVuYy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAppbmRleCA3ODgxMmIyZGJl Li4xM2I0NGI0MmNiIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvZnVuYy5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9mdW5jLnNnbWwKQEAgLTI1MjgxLDYgKzI1MjgxLDI3IEBAIFNFTEVDVCBjb2xs YXRpb24gZm9yICgnZm9vJyBDT0xMQVRFICJkZV9ERSIpOwogICAgICAgIDwvcGFyYT48L2VudHJ5 PgogICAgICAgPC9yb3c+CiAKKyAgICAgIDxyb3c+CisgICAgICAgPGVudHJ5IHJvbGU9ImZ1bmNf dGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImZ1bmNfc2lnbmF0dXJlIj4KKyAgICAgICAgPGluZGV4 dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PnBnX2xvZ19jdXJyZW50X3F1ZXJ5X3BsYW48L3ByaW1h cnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgICA8ZnVuY3Rpb24+cGdfbG9nX2N1cnJl bnRfcXVlcnlfcGxhbjwvZnVuY3Rpb24+ICggPHBhcmFtZXRlcj5waWQ8L3BhcmFtZXRlcj4gPHR5 cGU+aW50ZWdlcjwvdHlwZT4gKQorICAgICAgICA8cmV0dXJudmFsdWU+Ym9vbGVhbjwvcmV0dXJu dmFsdWU+CisgICAgICAgPC9wYXJhPgorICAgICAgIDxwYXJhPgorICAgICAgICBSZXF1ZXN0cyB0 byBsb2cgdGhlIHBsYW4gb2YgdGhlIHF1ZXJ5IGN1cnJlbnRseSBydW5uaW5nIG9uIHRoZQorICAg ICAgICBiYWNrZW5kIHdpdGggc3BlY2lmaWVkIHByb2Nlc3MgSUQgYWxvbmcgd2l0aCB0aGUgdW50 cnVuY2F0ZWQKKyAgICAgICAgcXVlcnkgc3RyaW5nLgorICAgICAgICBUaGV5IHdpbGwgYmUgbG9n Z2VkIGF0IDxsaXRlcmFsPkxPRzwvbGl0ZXJhbD4gbWVzc2FnZSBsZXZlbCBhbmQKKyAgICAgICAg d2lsbCBhcHBlYXIgaW4gdGhlIHNlcnZlciBsb2cgYmFzZWQgb24gdGhlIGxvZworICAgICAgICBj b25maWd1cmF0aW9uIHNldCAoU2VlIDx4cmVmIGxpbmtlbmQ9InJ1bnRpbWUtY29uZmlnLWxvZ2dp bmciLz4KKyAgICAgICAgZm9yIG1vcmUgaW5mb3JtYXRpb24pLCBidXQgd2lsbCBub3QgYmUgc2Vu dCB0byB0aGUgY2xpZW50CisgICAgICAgIHJlZ2FyZGxlc3Mgb2YgPHhyZWYgbGlua2VuZD0iZ3Vj LWNsaWVudC1taW4tbWVzc2FnZXMiLz4uCisgICAgICAgIE9ubHkgc3VwZXJ1c2VycyBjYW4gcmVx dWVzdCB0byBsb2cgcGxhbiBvZiB0aGUgcnVubmluZyBxdWVyeS4KKyAgICAgICA8L3BhcmE+PC9l bnRyeT4KKyAgICAgIDwvcm93PgorCiAgICAgICA8cm93PgogICAgICAgIDxlbnRyeSByb2xlPSJm dW5jX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CiAgICAgICAgIDxp bmRleHRlcm0+CkBAIC0yNTM5NCw2ICsyNTQxNSwzMSBAQCBMT0c6ICBHcmFuZCB0b3RhbDogMTY1 MTkyMCBieXRlcyBpbiAyMDEgYmxvY2tzOyA2MjIzNjAgZnJlZSAoODggY2h1bmtzKTsgMTAyOTU2 MAogICAgIGJlY2F1c2UgaXQgbWF5IGdlbmVyYXRlIGEgbGFyZ2UgbnVtYmVyIG9mIGxvZyBtZXNz YWdlcy4KICAgIDwvcGFyYT4KIAorICAgPHBhcmE+CisgICAgPGZ1bmN0aW9uPnBnX2xvZ19jdXJy ZW50X3F1ZXJ5X3BsYW48L2Z1bmN0aW9uPiBjYW4gYmUgdXNlZAorICAgIHRvIGxvZyB0aGUgcGxh biBvZiBhIGJhY2tlbmQgcHJvY2Vzcy4gRm9yIGV4YW1wbGU6Cis8cHJvZ3JhbWxpc3Rpbmc+Citw b3N0Z3Jlcz0jIFNFTEVDVCBwZ19sb2dfY3VycmVudF9xdWVyeV9wbGFuKDIwMTExNik7CisgcGdf bG9nX2N1cnJlbnRfcXVlcnlfcGxhbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgdAor KDEgcm93KQorPC9wcm9ncmFtbGlzdGluZz4KK1RoZSBmb3JtYXQgb2YgdGhlIHF1ZXJ5IHBsYW4g aXMgdGhlIHNhbWUgYXMgd2hlbiA8bGl0ZXJhbD5WRVJCT1NFPC9saXRlcmFsPiwKKzxsaXRlcmFs PkNPU1RTPC9saXRlcmFsPiwgPGxpdGVyYWw+U0VUVElOR1M8L2xpdGVyYWw+IGFuZAorPGxpdGVy YWw+Rk9STUFUIFRFWFQ8L2xpdGVyYWw+IGFyZSB1c2VkIGluIHRoZSA8Y29tbWFuZD5FWFBMQUlO PC9jb21tYW5kPgorY29tbWFuZC4gRm9yIGV4YW1wbGU6Cis8c2NyZWVuPgorTE9HOiAgcGxhbiBv ZiB0aGUgcXVlcnkgcnVubmluZyBvbiBiYWNrZW5kIHdpdGggUElEIDE3NzkzIGlzOgorICAgICAg ICBRdWVyeSBUZXh0OiBTRUxFQ1QgKiBGUk9NIHBnYmVuY2hfYWNjb3VudHM7CisgICAgICAgIFNl cSBTY2FuIG9uIHB1YmxpYy5wZ2JlbmNoX2FjY291bnRzICAoY29zdD0wLjAwLi41Mjc4Ny4wMCBy b3dzPTIwMDAwMDAgd2lkdGg9OTcpCisgICAgICAgICAgT3V0cHV0OiBhaWQsIGJpZCwgYWJhbGFu Y2UsIGZpbGxlcgorICAgICAgICBTZXR0aW5nczogd29ya19tZW0gPSAnMU1CJworPC9zY3JlZW4+ CisgICAgTm90ZSB0aGF0IG5lc3RlZCBzdGF0ZW1lbnRzIChzdGF0ZW1lbnRzIGV4ZWN1dGVkIGlu c2lkZSBhIGZ1bmN0aW9uKSBhcmUgbm90CisgICAgY29uc2lkZXJlZCBmb3IgbG9nZ2luZy4gT25s eSB0aGUgZGVlcGVzdCBuZXN0aW5nIHF1ZXJ5J3MgcGxhbiBpcyBsb2dnZWQuCisgICA8L3BhcmE+ CisKICAgPC9zZWN0Mj4KIAogICA8c2VjdDIgaWQ9ImZ1bmN0aW9ucy1hZG1pbi1iYWNrdXAiPgpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXhwbGFpbi5jCmluZGV4IDEwNjQ0ZGZhYzQuLmY1MjgzMDFjYzUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy9leHBsYWluLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJleGVjdXRvci9ub2Rl SGFzaC5oIgogI2luY2x1ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5o IgorI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL2V4dGVuc2libGUuaCIK ICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3Mu aCIKQEAgLTI4LDYgKzI5LDkgQEAKICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCiAjaW5j bHVkZSAicmV3cml0ZS9yZXdyaXRlSGFuZGxlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdy LmgiCisjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3Np Z25hbGZ1bmNzLmgiCisjaW5jbHVkZSAidGNvcC9wcXVlcnkuaCIKICNpbmNsdWRlICJ0Y29wL3Rj b3Bwcm90LmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9n dWNfdGFibGVzLmgiCkBAIC00MCw3ICs0NCw2IEBACiAjaW5jbHVkZSAidXRpbHMvdHlwY2FjaGUu aCIKICNpbmNsdWRlICJ1dGlscy94bWwuaCIKIAotCiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdl dCBjb250cm9sIGluIEV4cGxhaW5PbmVRdWVyeSgpICovCiBFeHBsYWluT25lUXVlcnlfaG9va190 eXBlIEV4cGxhaW5PbmVRdWVyeV9ob29rID0gTlVMTDsKIApAQCAtMTU5NCw2ICsxNTk3LDkgQEAg RXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkvKgog CSAqIFdlIGhhdmUgdG8gZm9yY2libHkgY2xlYW4gdXAgdGhlIGluc3RydW1lbnRhdGlvbiBzdGF0 ZSBiZWNhdXNlIHdlCiAJICogaGF2ZW4ndCBkb25lIEV4ZWN1dG9yRW5kIHlldC4gIFRoaXMgaXMg cHJldHR5IGdyb3R0eSAuLi4KKwkgKiBUaGlzIGNsZWFudXAgc2hvdWxkIG5vdCBiZSBkb25lIHdo ZW4gdGhlIHF1ZXJ5IGhhcyBhbHJlYWR5IGJlZW4KKwkgKiBleGVjdXRlZCwgYXMgdGhlIHRhcmdl dCBxdWVyeSBtYXkgdXNlIGluc3RydW1lbnRhdGlvbiBhbmQgY2xlYW4KKwkgKiBpdHNlbGYgdXAu CiAJICoKIAkgKiBOb3RlOiBjb250cmliL2F1dG9fZXhwbGFpbiBjb3VsZCBjYXVzZSBpbnN0cnVt ZW50YXRpb24gdG8gYmUgc2V0IHVwCiAJICogZXZlbiB0aG91Z2ggd2UgZGlkbid0IGFzayBmb3Ig aXQgaGVyZS4gIEJlIGNhcmVmdWwgbm90IHRvIHByaW50IGFueQpAQCAtMTYwMSw3ICsxNjA3LDcg QEAgRXhwbGFpbk5vZGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkg KiBJbnN0ckVuZExvb3AgY2FsbCBhbnl3YXksIGlmIHBvc3NpYmxlLCB0byByZWR1Y2UgdGhlIG51 bWJlciBvZiBjYXNlcwogCSAqIGF1dG9fZXhwbGFpbiBoYXMgdG8gY29udGVuZCB3aXRoLgogCSAq LwotCWlmIChwbGFuc3RhdGUtPmluc3RydW1lbnQpCisJaWYgKHBsYW5zdGF0ZS0+aW5zdHJ1bWVu dCAmJiAhZXMtPnJ1bm5pbmcpCiAJCUluc3RyRW5kTG9vcChwbGFuc3RhdGUtPmluc3RydW1lbnQp OwogCiAJaWYgKGVzLT5hbmFseXplICYmCkBAIC00OTIyLDMgKzQ5MjgsMTEwIEBAIGVzY2FwZV95 YW1sKFN0cmluZ0luZm8gYnVmLCBjb25zdCBjaGFyICpzdHIpCiB7CiAJZXNjYXBlX2pzb24oYnVm LCBzdHIpOwogfQorCisvKgorICogSGFuZGxlTG9nQ3VycmVudFBsYW5JbnRlcnJ1cHQKKyAqCQlI YW5kbGUgcmVjZWlwdCBvZiBhbiBpbnRlcnJ1cHQgaW5kaWNhdGluZyBsb2dnaW5nIHRoZSBwbGFu IG9mCisgKgkJdGhlIGN1cnJlbnRseSBydW5uaW5nIHF1ZXJ5LgorICoKKyAqIEFsbCB0aGUgYWN0 dWFsIHdvcmsgaXMgZGVmZXJyZWQgdG8gUHJvY2Vzc0xvZ0N1cnJlbnRQbGFuSW50ZXJydXB0KCks CisgKiBiZWNhdXNlIHdlIGNhbm5vdCBzYWZlbHkgZW1pdCBhIGxvZyBtZXNzYWdlIGluc2lkZSB0 aGUgc2lnbmFsIGhhbmRsZXIuCisgKi8KK3ZvaWQKK0hhbmRsZUxvZ0N1cnJlbnRQbGFuSW50ZXJy dXB0KHZvaWQpCit7CisJSW50ZXJydXB0UGVuZGluZyA9IHRydWU7CisJTG9nQ3VycmVudFBsYW5Q ZW5kaW5nID0gdHJ1ZTsKKwkvKiBsYXRjaCB3aWxsIGJlIHNldCBieSBwcm9jc2lnbmFsX3NpZ3Vz cjFfaGFuZGxlciAqLworfQorCisvKgorICogUHJvY2Vzc0xvZ0N1cnJlbnRQbGFuSW50ZXJydXB0 CisgKiAJCVBlcmZvcm0gbG9nZ2luZyB0aGUgcGxhbiBvZiB0aGUgY3VycmVudGx5IHJ1bm5pbmcg cXVlcnkgb24gdGhpcworICogCQliYWNrZW5kIHByb2Nlc3MuCisgKgorICogQW55IGJhY2tlbmQg dGhhdCBwYXJ0aWNpcGF0ZXMgaW4gUHJvY1NpZ25hbCBzaWduYWxpbmcgbXVzdCBhcnJhbmdlIHRv IGNhbGwKKyAqIHRoaXMgZnVuY3Rpb24gaWYgd2Ugc2VlIExvZ0N1cnJlbnRQbGFuUGVuZGluZyBz ZXQuCisgKiBJdCBpcyBjYWxsZWQgZnJvbSBDSEVDS19GT1JfSU5URVJSVVBUUygpLCB3aGljaCBp cyBlbm91Z2ggYmVjYXVzZSB0aGUgdGFyZ2V0CisgKiBwcm9jZXNzIGZvciBsb2dnaW5nIHBsYW4g aXMgYSBiYWNrZW5kLgorICovCit2b2lkCitQcm9jZXNzTG9nQ3VycmVudFBsYW5JbnRlcnJ1cHQo dm9pZCkKK3sKKwlFeHBsYWluU3RhdGUgKmVzOworCUhBU0hfU0VRX1NUQVRVUyBzdGF0dXM7CisJ TE9DQUxMT0NLICAqbG9jYWxsb2NrOworCUxvZ0N1cnJlbnRQbGFuUGVuZGluZyA9IGZhbHNlOwor CisJaWYgKEFjdGl2ZVF1ZXJ5RGVzYyA9PSBOVUxMKQorCXsKKwkJZXJlcG9ydChMT0dfU0VSVkVS X09OTFksCisJCQkJKGVycm1zZygiYmFja2VuZCB3aXRoIFBJRCAlZCBpcyBub3QgcnVubmluZyBh IHF1ZXJ5IiwKKwkJCQkJTXlQcm9jUGlkKSkpOworCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBF bnN1cmUgbm8gcGFnZSBsb2NrIGlzIGhlbGQgb24gdGhpcyBwcm9jZXNzLgorCSAqCisJICogSWYg cGFnZSBsb2NrIGlzIGhlbGQgYXQgdGhlIHRpbWUgb2YgdGhlIGludGVycnVwdCwgd2UgY2FuJ3Qg YWNxdWlyZSBhbnkKKwkgKiBvdGhlciBoZWF2eXdlaWdodCBsb2NrLCB3aGljaCBtaWdodCBiZSBu ZWNlc3NhcnkgZm9yIGV4cGxhaW5pbmcgdGhlIHBsYW4KKwkgKiB3aGVuIHJldHJpZXZpbmcgY29s dW1uIG5hbWVzLgorCSAqCisJICogVGhpcyBtYXkgYmUgb3ZlcmtpbGwsIGJ1dCBzaW5jZSBwYWdl IGxvY2tzIGFyZSBoZWxkIGZvciBhIHNob3J0IGR1cmF0aW9uCisJICogd2UgY2hlY2sgYWxsIHRo ZSBMb2NhbExvY2sgZW50cmllcyBhbmQgd2hlbiBmaW5kaW5nIGV2ZW4gb25lLCBnaXZlIHVwCisJ ICogbG9nZ2luZyB0aGUgcGxhbi4KKwkgKi8KKwloYXNoX3NlcV9pbml0KCZzdGF0dXMsIEdldExv Y2tNZXRob2RMb2NhbEhhc2goKSk7CisJd2hpbGUgKChsb2NhbGxvY2sgPSAoTE9DQUxMT0NLICop IGhhc2hfc2VxX3NlYXJjaCgmc3RhdHVzKSkgIT0gTlVMTCkKKwl7CisJCWlmIChMT0NBTExPQ0tf TE9DS1RBRygqbG9jYWxsb2NrKSA9PSBMT0NLVEFHX1BBR0UpCisJCXsKKwkJCWVyZXBvcnQoTE9H X1NFUlZFUl9PTkxZLAorCQkJCShlcnJtc2coImJhY2tlbmQgd2l0aCBQSUQgJWQgaXMgbm93IGhv bGRpbmcgYSBwYWdlIGxvY2suIFRyeSBhZ2FpbiIsCisJCQkJCU15UHJvY1BpZCkpKTsKKwkJCWhh c2hfc2VxX3Rlcm0oJnN0YXR1cyk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwllcyA9IE5ld0V4 cGxhaW5TdGF0ZSgpOworCisJZXMtPmZvcm1hdCA9IEVYUExBSU5fRk9STUFUX1RFWFQ7CisJZXMt PnNldHRpbmdzID0gdHJ1ZTsKKwllcy0+dmVyYm9zZSA9IHRydWU7CisJZXMtPnJ1bm5pbmcgPSB0 cnVlOworCisJRXhwbGFpbkJlZ2luT3V0cHV0KGVzKTsKKwlFeHBsYWluUXVlcnlUZXh0KGVzLCBB Y3RpdmVRdWVyeURlc2MpOworCUV4cGxhaW5QcmludFBsYW4oZXMsIEFjdGl2ZVF1ZXJ5RGVzYyk7 CisJaWYgKGVzLT5jb3N0cykKKwkJRXhwbGFpblByaW50SklUU3VtbWFyeShlcywgQWN0aXZlUXVl cnlEZXNjKTsKKwlFeHBsYWluRW5kT3V0cHV0KGVzKTsKKworCS8qIFJlbW92ZSBsYXN0IGxpbmUg YnJlYWsgKi8KKwlpZiAoZXMtPnN0ci0+bGVuID4gMCAmJiBlcy0+c3RyLT5kYXRhW2VzLT5zdHIt PmxlbiAtIDFdID09ICdcbicpCisJCWVzLT5zdHItPmRhdGFbLS1lcy0+c3RyLT5sZW5dID0gJ1ww JzsKKworCWVyZXBvcnQoTE9HX1NFUlZFUl9PTkxZLAorCQkJKGVycm1zZygicGxhbiBvZiB0aGUg cXVlcnkgcnVubmluZyBvbiBiYWNrZW5kIHdpdGggUElEICVkIGlzOlxuJXMiLAorCQkJCQlNeVBy b2NQaWQsIGVzLT5zdHItPmRhdGEpLAorCQkJIGVycmhpZGVzdG10KHRydWUpLAorCQkJIGVycmhp ZGVjb250ZXh0KHRydWUpKSk7Cit9CisKKy8qCisgKiBwZ19sb2dfY3VycmVudF9xdWVyeV9wbGFu CisgKgkJU2lnbmFsIGEgYmFja2VuZCBwcm9jZXNzIHRvIGxvZyB0aGUgcXVlcnkgcGxhbiBvZiB0 aGUgcnVubmluZyBxdWVyeS4KKyAqLworRGF0dW0KK3BnX2xvZ19jdXJyZW50X3F1ZXJ5X3BsYW4o UEdfRlVOQ1RJT05fQVJHUykKK3sKKwlwaWRfdAkJcGlkOworCWJvb2wJCXJlc3VsdDsKKworCXBp ZCA9IFBHX0dFVEFSR19JTlQzMigwKTsKKwlyZXN1bHQgPSBTZW5kUHJvY1NpZ25hbEZvckxvZ0lu Zm8ocGlkLCBQUk9DU0lHX0xPR19DVVJSRU5UX1BMQU4pOworCisJUEdfUkVUVVJOX0JPT0wocmVz dWx0KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgYi9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCmluZGV4IGIzY2U0YmFlNTMuLmM3NGFhMWQw NGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMKKysrIGIvc3Jj L2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwpAQCAtNzYsNiArNzYsOSBAQCBFeGVjdXRvckVu ZF9ob29rX3R5cGUgRXhlY3V0b3JFbmRfaG9vayA9IE5VTEw7CiAvKiBIb29rIGZvciBwbHVnaW4g dG8gZ2V0IGNvbnRyb2wgaW4gRXhlY0NoZWNrUlRQZXJtcygpICovCiBFeGVjdXRvckNoZWNrUGVy bXNfaG9va190eXBlIEV4ZWN1dG9yQ2hlY2tQZXJtc19ob29rID0gTlVMTDsKIAorLyogQ3VycmVu dGx5IGV4ZWN1dGluZyBxdWVyeSdzIFF1ZXJ5RGVzYyAqLworUXVlcnlEZXNjICpBY3RpdmVRdWVy eURlc2MgPSBOVUxMOworCiAvKiBkZWNscyBmb3IgbG9jYWwgcm91dGluZXMgb25seSB1c2VkIHdp dGhpbiB0aGlzIG1vZHVsZSAqLwogc3RhdGljIHZvaWQgSW5pdFBsYW4oUXVlcnlEZXNjICpxdWVy eURlc2MsIGludCBlZmxhZ3MpOwogc3RhdGljIHZvaWQgQ2hlY2tWYWxpZFJvd01hcmtSZWwoUmVs YXRpb24gcmVsLCBSb3dNYXJrVHlwZSBtYXJrVHlwZSk7CkBAIC0yOTksMTAgKzMwMiwxNyBAQCBF eGVjdXRvclJ1bihRdWVyeURlc2MgKnF1ZXJ5RGVzYywKIAkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uLCB1aW50NjQgY291bnQsCiAJCQlib29sIGV4ZWN1dGVfb25jZSkKIHsKKwlRdWVyeURlc2Mg KnNhdmVfQWN0aXZlUXVlcnlEZXNjOworCisJc2F2ZV9BY3RpdmVRdWVyeURlc2MgPSBBY3RpdmVR dWVyeURlc2M7CisJQWN0aXZlUXVlcnlEZXNjID0gcXVlcnlEZXNjOworCiAJaWYgKEV4ZWN1dG9y UnVuX2hvb2spCiAJCSgqRXhlY3V0b3JSdW5faG9vaykgKHF1ZXJ5RGVzYywgZGlyZWN0aW9uLCBj b3VudCwgZXhlY3V0ZV9vbmNlKTsKIAllbHNlCiAJCXN0YW5kYXJkX0V4ZWN1dG9yUnVuKHF1ZXJ5 RGVzYywgZGlyZWN0aW9uLCBjb3VudCwgZXhlY3V0ZV9vbmNlKTsKKworCUFjdGl2ZVF1ZXJ5RGVz YyA9IHNhdmVfQWN0aXZlUXVlcnlEZXNjOwogfQogCiB2b2lkCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9w cm9jc2lnbmFsLmMKaW5kZXggZGVmYjc1YWEyNi4uOWI5NjUzNTQ0YSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL3Byb2NzaWduYWwuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy9w YXJhbGxlbC5oIgogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNsdWRlICJjb21t YW5kcy9hc3luYy5oIgorI2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW4uaCIKICNpbmNsdWRlICJt aXNjYWRtaW4uaCIKICNpbmNsdWRlICJwZ3N0YXQuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi93 YWxzZW5kZXIuaCIKQEAgLTY2MSw2ICs2NjIsOSBAQCBwcm9jc2lnbmFsX3NpZ3VzcjFfaGFuZGxl cihTSUdOQUxfQVJHUykKIAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfTE9HX01FTU9SWV9D T05URVhUKSkKIAkJSGFuZGxlTG9nTWVtb3J5Q29udGV4dEludGVycnVwdCgpOwogCisJaWYgKENo ZWNrUHJvY1NpZ25hbChQUk9DU0lHX0xPR19DVVJSRU5UX1BMQU4pKQorCQlIYW5kbGVMb2dDdXJy ZW50UGxhbkludGVycnVwdCgpOworCiAJaWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lHX1JFQ09W RVJZX0NPTkZMSUNUX0RBVEFCQVNFKSkKIAkJUmVjb3ZlcnlDb25mbGljdEludGVycnVwdChQUk9D U0lHX1JFQ09WRVJZX0NPTkZMSUNUX0RBVEFCQVNFKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9pcGMvc2lnbmFsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Np Z25hbGZ1bmNzLmMKaW5kZXggZGU2OWQ2MGU3OS4uMWFhZDEyMDc5MSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9pcGMvc2lnbmFsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2lwYy9zaWduYWxmdW5jcy5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSAic3RvcmFn ZS9wbXNpZ25hbC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3Jh Z2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaWduYWxmdW5jcy5oIgogI2luY2x1 ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAKQEAgLTI5OCwz ICsyOTksNjMgQEAgcGdfcm90YXRlX2xvZ2ZpbGVfdjIoUEdfRlVOQ1RJT05fQVJHUykKIAlTZW5k UG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9ST1RBVEVfTE9HRklMRSk7CiAJUEdfUkVUVVJOX0JP T0wodHJ1ZSk7CiB9CisKKy8qCisgKiBTaWduYWwgYSBiYWNrZW5kIHByb2Nlc3MgdG8gbG9nIGl0 cyBpbmZvcm1hdGlvbi4KKyAqCisgKiBPbmx5IHN1cGVydXNlcnMgYXJlIGFsbG93ZWQgdG8gc2ln bmFsIHRvIGxvZyBpbmZvcm1hdGlvbiBiZWNhdXNlCisgKiBhbGxvd2luZyBhbnkgdXNlcnMgdG8g aXNzdWUgdGhpcyByZXF1ZXN0IGF0IGFuIHVuYm91bmRlZCByYXRlCisgKiB3b3VsZCBjYXVzZSBs b3RzIG9mIGxvZyBtZXNzYWdlcyBhbmQgd2hpY2ggY2FuIGxlYWQgdG8gZGVuaWFsIG9mCisgKiBz ZXJ2aWNlLgorICoKKyAqIE9uIHJlY2VpcHQgb2YgdGhpcyBzaWduYWwsIGEgYmFja2VuZCBzZXRz IHRoZSBmbGFnIGluIHRoZSBzaWduYWwKKyAqIGhhbmRsZXIsIHdoaWNoIGNhdXNlcyB0aGUgbmV4 dCBDSEVDS19GT1JfSU5URVJSVVBUUygpIHRvIGxvZyB0aGUKKyAqIGluZm9ybWF0aW9uLgorICov Citib29sCitTZW5kUHJvY1NpZ25hbEZvckxvZ0luZm8ocGlkX3QgcGlkLCBQcm9jU2lnbmFsUmVh c29uIHJlYXNvbikKK3sKKwlQR1BST0MJICAgKnByb2M7CisKKwlBc3NlcnQocmVhc29uID09IFBS T0NTSUdfTE9HX01FTU9SWV9DT05URVhUIHx8CisJCSAgIHJlYXNvbiA9PSBQUk9DU0lHX0xPR19D VVJSRU5UX1BMQU4pOworCisJLyogT25seSBhbGxvdyBzdXBlcnVzZXJzIHRvIGxvZyBpbmZvcm1h dGlvbi4gKi8KKwlpZiAoIXN1cGVydXNlcigpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJj b2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCisJCQkJIGVycm1zZygibXVzdCBi ZSBhIHN1cGVydXNlciB0byBsb2cgaW5mb3JtYXRpb24gYWJvdXQgc3BlY2lmaWVkIHByb2Nlc3Mi KSkpOworCisJcHJvYyA9IEJhY2tlbmRQaWRHZXRQcm9jKHBpZCk7CisKKwkvKgorCSAqIEJhY2tl bmRQaWRHZXRQcm9jIHJldHVybnMgTlVMTCBpZiB0aGUgcGlkIGlzbid0IHZhbGlkOyBidXQgYnkg dGhlIHRpbWUKKwkgKiB3ZSByZWFjaCBraWxsKCksIGEgcHJvY2VzcyBmb3Igd2hpY2ggd2UgZ2V0 IGEgdmFsaWQgcHJvYyBoZXJlIG1pZ2h0CisJICogaGF2ZSB0ZXJtaW5hdGVkIG9uIGl0cyBvd24u ICBUaGVyZSdzIG5vIHdheSB0byBhY3F1aXJlIGEgbG9jayBvbiBhbgorCSAqIGFyYml0cmFyeSBw cm9jZXNzIHRvIHByZXZlbnQgdGhhdC4gQnV0IHNpbmNlIHRoaXMgbWVjaGFuaXNtIGlzIHVzdWFs bHkKKwkgKiB1c2VkIHRvIGJlbG93IHB1cnBvc2VzLCBpdCBtaWdodCBlbmQgaXRzIG93biBmaXJz dCBhbmQgdGhlIGluZm9ybWF0aW9uCisJICogaXMgbm90IGxvZ2dlZCBpcyBub3QgYSBwcm9ibGVt LgorCSAqIC0gZGVidWcgYSBiYWNrZW5kIHJ1bm5pbmcgYW5kIGNvbnN1bWluZyBsb3RzIG9mIG1l bW9yeQorCSAqIC0gbG9vayBpbnRvIHRoZSBwbGFuIG9mIHRoZSBsb25nIHJ1bm5pbmcgcXVlcnkK KwkgKi8KKwlpZiAocHJvYyA9PSBOVUxMKQorCXsKKwkJLyoKKwkJICogVGhpcyBpcyBqdXN0IGEg d2FybmluZyBzbyBhIGxvb3AtdGhyb3VnaC1yZXN1bHRzZXQgd2lsbCBub3QgYWJvcnQKKwkJICog aWYgb25lIGJhY2tlbmQgdGVybWluYXRlZCBvbiBpdHMgb3duIGR1cmluZyB0aGUgcnVuLgorCQkg Ki8KKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShlcnJtc2coIlBJRCAlZCBpcyBub3QgYSBQb3N0 Z3JlU1FMIHNlcnZlciBwcm9jZXNzIiwgcGlkKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJ aWYgKFNlbmRQcm9jU2lnbmFsKHBpZCwgcmVhc29uLCBwcm9jLT5iYWNrZW5kSWQpIDwgMCkKKwl7 CisJCS8qIEFnYWluLCBqdXN0IGEgd2FybmluZyB0byBhbGxvdyBsb29wcyAqLworCQllcmVwb3J0 KFdBUk5JTkcsCisJCQkJKGVycm1zZygiY291bGQgbm90IHNlbmQgc2lnbmFsIHRvIHByb2Nlc3Mg JWQ6ICVtIiwgcGlkKSkpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9 CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL2xvY2suYwppbmRleCAzNjQ2NTRlMTA2Li42ZDFhNWFkZDE3IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9jay5jCisrKyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9sb2NrLmMKQEAgLTYxNCwxNyArNjE0LDE4IEBAIExvY2tIZWxkQnlNZShj b25zdCBMT0NLVEFHICpsb2NrdGFnLCBMT0NLTU9ERSBsb2NrbW9kZSkKIAlyZXR1cm4gKGxvY2Fs bG9jayAmJiBsb2NhbGxvY2stPm5Mb2NrcyA+IDApOwogfQogCi0jaWZkZWYgVVNFX0FTU0VSVF9D SEVDS0lORwogLyoKLSAqIEdldExvY2tNZXRob2RMb2NhbEhhc2ggLS0gcmV0dXJuIHRoZSBoYXNo IG9mIGxvY2FsIGxvY2tzLCBmb3IgbW9kdWxlcyB0aGF0Ci0gKgkJZXZhbHVhdGUgYXNzZXJ0aW9u cyBiYXNlZCBvbiBhbGwgbG9ja3MgaGVsZC4KKyAqIEdldExvY2tNZXRob2RMb2NhbEhhc2ggLS0g cmV0dXJuIHRoZSBoYXNoIG9mIGxvY2FsIGxvY2tzLCBtYWlubHkgZm9yCisgKgkJbW9kdWxlcyB0 aGF0IGV2YWx1YXRlIGFzc2VydGlvbnMgYmFzZWQgb24gYWxsIGxvY2tzIGhlbGQuCisgKgorICog Tk9URTogV2hlbiB0aGVyZSBhcmUgbWFueSBlbnRyaWVzIGluIExvY2tNZXRob2RMb2NhbEhhc2gs IGNhbGxpbmcgdGhpcworICogZnVuY3Rpb24gYW5kIGxvb2tpbmcgaW50byBhbGwgb2YgdGhlbSBj YW4gbGVhZCB0byBwZXJmb3JtYW5jZSBwcm9ibGVtcy4KICAqLwogSFRBQiAqCiBHZXRMb2NrTWV0 aG9kTG9jYWxIYXNoKHZvaWQpCiB7CiAJcmV0dXJuIExvY2tNZXRob2RMb2NhbEhhc2g7CiB9Ci0j ZW5kaWYKIAogLyoKICAqIExvY2tIYXNXYWl0ZXJzIC0tIGxvb2sgdXAgJ2xvY2t0YWcnIGFuZCBj aGVjayBpZiByZWxlYXNpbmcgdGhpcwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0 Z3Jlcy5jIGIvc3JjL2JhY2tlbmQvdGNvcC9wb3N0Z3Jlcy5jCmluZGV4IDU4YjU5NjBlMjcuLjhi ODgwOGRiOGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYworKysgYi9z cmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJh Y2Nlc3MveGFjdC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImNv bW1hbmRzL2FzeW5jLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbi5oIgogI2luY2x1ZGUg ImNvbW1hbmRzL3ByZXBhcmUuaCIKICNpbmNsdWRlICJleGVjdXRvci9zcGkuaCIKICNpbmNsdWRl ICJqaXQvaml0LmgiCkBAIC0zMzY2LDYgKzMzNjcsOSBAQCBQcm9jZXNzSW50ZXJydXB0cyh2b2lk KQogCiAJaWYgKExvZ01lbW9yeUNvbnRleHRQZW5kaW5nKQogCQlQcm9jZXNzTG9nTWVtb3J5Q29u dGV4dEludGVycnVwdCgpOworCisJaWYgKExvZ0N1cnJlbnRQbGFuUGVuZGluZykKKwkJUHJvY2Vz c0xvZ0N1cnJlbnRQbGFuSW50ZXJydXB0KCk7CiB9CiAKIApAQCAtNDI3OCw2ICs0MjgyLDkgQEAg UG9zdGdyZXNNYWluKGludCBhcmdjLCBjaGFyICphcmd2W10sCiAJCS8qIFdlIGRvbid0IGhhdmUg YSB0cmFuc2FjdGlvbiBjb21tYW5kIG9wZW4gYW55bW9yZSAqLwogCQl4YWN0X3N0YXJ0ZWQgPSBm YWxzZTsKIAorCQkvKiBXZSBoYXZlIG5vIHJ1bm5pbmcgcXVlcnkgKi8KKwkJQWN0aXZlUXVlcnlE ZXNjID0gTlVMTDsKKwogCQkvKgogCQkgKiBJZiBhbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB3ZSB3 ZXJlIHJlYWRpbmcgYSBtZXNzYWdlIGZyb20gdGhlCiAJCSAqIGNsaWVudCwgd2UgaGF2ZSBwb3Rl bnRpYWxseSBsb3N0IHRyYWNrIG9mIHdoZXJlIHRoZSBwcmV2aW91cwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21j eHRmdW5jcy5jCmluZGV4IDBkNTI2MTNiYzMuLjMwNGYzNmJkYTAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQv bWN4dGZ1bmNzLmMKQEAgLTE4LDggKzE4LDggQEAKICNpbmNsdWRlICJmdW5jYXBpLmgiCiAjaW5j bHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKLSNpbmNsdWRlICJz dG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgorI2luY2x1ZGUg InN0b3JhZ2Uvc2lnbmFsZnVuY3MuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogCiAv KiAtLS0tLS0tLS0tCkBAIC0xNjEsNTcgKzE2MSwxNSBAQCBwZ19nZXRfYmFja2VuZF9tZW1vcnlf Y29udGV4dHMoUEdfRlVOQ1RJT05fQVJHUykKIC8qCiAgKiBwZ19sb2dfYmFja2VuZF9tZW1vcnlf Y29udGV4dHMKICAqCQlTaWduYWwgYSBiYWNrZW5kIHByb2Nlc3MgdG8gbG9nIGl0cyBtZW1vcnkg Y29udGV4dHMuCi0gKgotICogT25seSBzdXBlcnVzZXJzIGFyZSBhbGxvd2VkIHRvIHNpZ25hbCB0 byBsb2cgdGhlIG1lbW9yeSBjb250ZXh0cwotICogYmVjYXVzZSBhbGxvd2luZyBhbnkgdXNlcnMg dG8gaXNzdWUgdGhpcyByZXF1ZXN0IGF0IGFuIHVuYm91bmRlZAotICogcmF0ZSB3b3VsZCBjYXVz ZSBsb3RzIG9mIGxvZyBtZXNzYWdlcyBhbmQgd2hpY2ggY2FuIGxlYWQgdG8KLSAqIGRlbmlhbCBv ZiBzZXJ2aWNlLgotICoKLSAqIE9uIHJlY2VpcHQgb2YgdGhpcyBzaWduYWwsIGEgYmFja2VuZCBz ZXRzIHRoZSBmbGFnIGluIHRoZSBzaWduYWwKLSAqIGhhbmRsZXIsIHdoaWNoIGNhdXNlcyB0aGUg bmV4dCBDSEVDS19GT1JfSU5URVJSVVBUUygpIHRvIGxvZyB0aGUKLSAqIG1lbW9yeSBjb250ZXh0 cy4KICAqLwogRGF0dW0KIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhQR19GVU5DVElP Tl9BUkdTKQogewotCWludAkJCXBpZCA9IFBHX0dFVEFSR19JTlQzMigwKTsKLQlQR1BST0MJICAg KnByb2M7Ci0KLQkvKiBPbmx5IGFsbG93IHN1cGVydXNlcnMgdG8gbG9nIG1lbW9yeSBjb250ZXh0 cy4gKi8KLQlpZiAoIXN1cGVydXNlcigpKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2Rl KEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCi0JCQkJIGVycm1zZygibXVzdCBiZSBh IHN1cGVydXNlciB0byBsb2cgbWVtb3J5IGNvbnRleHRzIikpKTsKLQotCXByb2MgPSBCYWNrZW5k UGlkR2V0UHJvYyhwaWQpOwotCi0JLyoKLQkgKiBCYWNrZW5kUGlkR2V0UHJvYyByZXR1cm5zIE5V TEwgaWYgdGhlIHBpZCBpc24ndCB2YWxpZDsgYnV0IGJ5IHRoZSB0aW1lCi0JICogd2UgcmVhY2gg a2lsbCgpLCBhIHByb2Nlc3MgZm9yIHdoaWNoIHdlIGdldCBhIHZhbGlkIHByb2MgaGVyZSBtaWdo dAotCSAqIGhhdmUgdGVybWluYXRlZCBvbiBpdHMgb3duLiAgVGhlcmUncyBubyB3YXkgdG8gYWNx dWlyZSBhIGxvY2sgb24gYW4KLQkgKiBhcmJpdHJhcnkgcHJvY2VzcyB0byBwcmV2ZW50IHRoYXQu IEJ1dCBzaW5jZSB0aGlzIG1lY2hhbmlzbSBpcyB1c3VhbGx5Ci0JICogdXNlZCB0byBkZWJ1ZyBh IGJhY2tlbmQgcnVubmluZyBhbmQgY29uc3VtaW5nIGxvdHMgb2YgbWVtb3J5LCB0aGF0IGl0Ci0J ICogbWlnaHQgZW5kIG9uIGl0cyBvd24gZmlyc3QgYW5kIGl0cyBtZW1vcnkgY29udGV4dHMgYXJl IG5vdCBsb2dnZWQgaXMKLQkgKiBub3QgYSBwcm9ibGVtLgotCSAqLwotCWlmIChwcm9jID09IE5V TEwpCi0JewotCQkvKgotCQkgKiBUaGlzIGlzIGp1c3QgYSB3YXJuaW5nIHNvIGEgbG9vcC10aHJv dWdoLXJlc3VsdHNldCB3aWxsIG5vdCBhYm9ydAotCQkgKiBpZiBvbmUgYmFja2VuZCB0ZXJtaW5h dGVkIG9uIGl0cyBvd24gZHVyaW5nIHRoZSBydW4uCi0JCSAqLwotCQllcmVwb3J0KFdBUk5JTkcs Ci0JCQkJKGVycm1zZygiUElEICVkIGlzIG5vdCBhIFBvc3RncmVTUUwgc2VydmVyIHByb2Nlc3Mi LCBwaWQpKSk7Ci0JCVBHX1JFVFVSTl9CT09MKGZhbHNlKTsKLQl9CisJcGlkX3QJCXBpZDsKKwli b29sCQlyZXN1bHQ7CiAKLQlpZiAoU2VuZFByb2NTaWduYWwocGlkLCBQUk9DU0lHX0xPR19NRU1P UllfQ09OVEVYVCwgcHJvYy0+YmFja2VuZElkKSA8IDApCi0JewotCQkvKiBBZ2FpbiwganVzdCBh IHdhcm5pbmcgdG8gYWxsb3cgbG9vcHMgKi8KLQkJZXJlcG9ydChXQVJOSU5HLAotCQkJCShlcnJt c2coImNvdWxkIG5vdCBzZW5kIHNpZ25hbCB0byBwcm9jZXNzICVkOiAlbSIsIHBpZCkpKTsKLQkJ UEdfUkVUVVJOX0JPT0woZmFsc2UpOwotCX0KKwlwaWQgPSBQR19HRVRBUkdfSU5UMzIoMCk7CisJ cmVzdWx0ID0gU2VuZFByb2NTaWduYWxGb3JMb2dJbmZvKHBpZCwgUFJPQ1NJR19MT0dfTUVNT1JZ X0NPTlRFWFQpOwogCi0JUEdfUkVUVVJOX0JPT0wodHJ1ZSk7CisJUEdfUkVUVVJOX0JPT0wocmVz dWx0KTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKaW5kZXggMzgxZDllNTQ4ZC4uMTI2ZWQx MDM2MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKKysrIGIv c3JjL2JhY2tlbmQvdXRpbHMvaW5pdC9nbG9iYWxzLmMKQEAgLTM2LDYgKzM2LDcgQEAgdm9sYXRp bGUgc2lnX2F0b21pY190IElkbGVJblRyYW5zYWN0aW9uU2Vzc2lvblRpbWVvdXRQZW5kaW5nID0g ZmFsc2U7CiB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZVNlc3Npb25UaW1lb3V0UGVuZGluZyA9 IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0b21pY190IFByb2NTaWduYWxCYXJyaWVyUGVuZGluZyA9 IGZhbHNlOwogdm9sYXRpbGUgc2lnX2F0b21pY190IExvZ01lbW9yeUNvbnRleHRQZW5kaW5nID0g ZmFsc2U7Cit2b2xhdGlsZSBzaWdfYXRvbWljX3QgTG9nQ3VycmVudFBsYW5QZW5kaW5nID0gZmFs c2U7CiB2b2xhdGlsZSB1aW50MzIgSW50ZXJydXB0SG9sZG9mZkNvdW50ID0gMDsKIHZvbGF0aWxl IHVpbnQzMiBRdWVyeUNhbmNlbEhvbGRvZmZDb3VudCA9IDA7CiB2b2xhdGlsZSB1aW50MzIgQ3Jp dFNlY3Rpb25Db3VudCA9IDA7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBkMDY4ZDY1MzJl Li4zYTgxZTg2NDkzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTgwMzgsNiArODAzOCwx MiBAQAogICBwcm9yZXR0eXBlID0+ICdib29sJywgcHJvYXJndHlwZXMgPT4gJ2ludDQnLAogICBw cm9zcmMgPT4gJ3BnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cycgfSwKIAorIyBsb2dnaW5n IHBsYW4gb2YgdGhlIHJ1bm5pbmcgcXVlcnkgb24gdGhlIHNwZWNpZmllZCBiYWNrZW5kCit7IG9p ZCA9PiAnNDU0NCcsIGRlc2NyID0+ICdsb2cgcGxhbiBvZiB0aGUgcnVubmluZyBxdWVyeSBvbiB0 aGUgc3BlY2lmaWVkIGJhY2tlbmQnLAorICBwcm9uYW1lID0+ICdwZ19sb2dfY3VycmVudF9xdWVy eV9wbGFuJywKKyAgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9yZXR0eXBlID0+ICdib29sJywKKyAg cHJvYXJndHlwZXMgPT4gJ2ludDQnLCBwcm9zcmMgPT4gJ3BnX2xvZ19jdXJyZW50X3F1ZXJ5X3Bs YW4nIH0sCisKICMgbm9uLXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcgogeyBvaWQgPT4gJzEw NjYnLCBkZXNjciA9PiAnbm9uLXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcicsCiAgIHByb25h bWUgPT4gJ2dlbmVyYXRlX3NlcmllcycsIHByb3Jvd3MgPT4gJzEwMDAnLApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhw bGFpbi5oCmluZGV4IGU5NGQ5ZTQ5Y2YuLjdjMmRjZTdjZGYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2V4cGxhaW4uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWlu LmgKQEAgLTU5LDYgKzU5LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgRXhwbGFpblN0YXRlCiAJYm9vbAkJ aGlkZV93b3JrZXJzOwkvKiBzZXQgaWYgd2UgZmluZCBhbiBpbnZpc2libGUgR2F0aGVyICovCiAJ Lyogc3RhdGUgcmVsYXRlZCB0byB0aGUgY3VycmVudCBwbGFuIG5vZGUgKi8KIAlFeHBsYWluV29y a2Vyc1N0YXRlICp3b3JrZXJzX3N0YXRlOyAvKiBuZWVkZWQgaWYgcGFyYWxsZWwgcGxhbiAqLwor CWJvb2wJCXJ1bm5pbmc7CQkvKiB3aGV0aGVyIHRhcmdldCBxdWVyeSBpcyBhbHJlYWR5IHJ1bm5p bmcgKi8KIH0gRXhwbGFpblN0YXRlOwogCiAvKiBIb29rIGZvciBwbHVnaW5zIHRvIGdldCBjb250 cm9sIGluIEV4cGxhaW5PbmVRdWVyeSgpICovCkBAIC0xMjQsNCArMTI1LDYgQEAgZXh0ZXJuIHZv aWQgRXhwbGFpbk9wZW5Hcm91cChjb25zdCBjaGFyICpvYmp0eXBlLCBjb25zdCBjaGFyICpsYWJl bG5hbWUsCiBleHRlcm4gdm9pZCBFeHBsYWluQ2xvc2VHcm91cChjb25zdCBjaGFyICpvYmp0eXBl LCBjb25zdCBjaGFyICpsYWJlbG5hbWUsCiAJCQkJCQkJICBib29sIGxhYmVsZWQsIEV4cGxhaW5T dGF0ZSAqZXMpOwogCitleHRlcm4gdm9pZCBIYW5kbGVMb2dDdXJyZW50UGxhbkludGVycnVwdCh2 b2lkKTsKK2V4dGVybiB2b2lkIFByb2Nlc3NMb2dDdXJyZW50UGxhbkludGVycnVwdCh2b2lkKTsK ICNlbmRpZgkJCQkJCQkvKiBFWFBMQUlOX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21p c2NhZG1pbi5oIGIvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKaW5kZXggMmUyZTlhMzY0YS4uMDk3 ZWJhYTk2ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmgKKysrIGIvc3JjL2lu Y2x1ZGUvbWlzY2FkbWluLmgKQEAgLTk0LDYgKzk0LDcgQEAgZXh0ZXJuIFBHRExMSU1QT1JUIHZv bGF0aWxlIHNpZ19hdG9taWNfdCBJZGxlSW5UcmFuc2FjdGlvblNlc3Npb25UaW1lb3V0UGVuZGlu ZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgSWRsZVNlc3Npb25U aW1lb3V0UGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3Qg UHJvY1NpZ25hbEJhcnJpZXJQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNp Z19hdG9taWNfdCBMb2dNZW1vcnlDb250ZXh0UGVuZGluZzsKK2V4dGVybiBQR0RMTElNUE9SVCB2 b2xhdGlsZSBzaWdfYXRvbWljX3QgTG9nQ3VycmVudFBsYW5QZW5kaW5nOwogCiBleHRlcm4gUEdE TExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IENoZWNrQ2xpZW50Q29ubmVjdGlvblBlbmRp bmc7CiBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IENsaWVudENvbm5l Y3Rpb25Mb3N0OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9sb2NrLmggYi9zcmMv aW5jbHVkZS9zdG9yYWdlL2xvY2suaAppbmRleCA5YjJhNDIxYzMyYy4uNWVmYWM4OGIxMzAgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvbG9jay5oCisrKyBiL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvbG9jay5oCkBAIC01NjAsOSArNTYwLDcgQEAgZXh0ZXJuIHZvaWQgTG9ja1JlbGVhc2VT ZXNzaW9uKExPQ0tNRVRIT0RJRCBsb2NrbWV0aG9kaWQpOwogZXh0ZXJuIHZvaWQgTG9ja1JlbGVh c2VDdXJyZW50T3duZXIoTE9DQUxMT0NLICoqbG9jYWxsb2NrcywgaW50IG5sb2Nrcyk7CiBleHRl cm4gdm9pZCBMb2NrUmVhc3NpZ25DdXJyZW50T3duZXIoTE9DQUxMT0NLICoqbG9jYWxsb2Nrcywg aW50IG5sb2Nrcyk7CiBleHRlcm4gYm9vbCBMb2NrSGVsZEJ5TWUoY29uc3QgTE9DS1RBRyAqbG9j a3RhZywgTE9DS01PREUgbG9ja21vZGUpOwotI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKIGV4 dGVybiBIVEFCICpHZXRMb2NrTWV0aG9kTG9jYWxIYXNoKHZvaWQpOwotI2VuZGlmCiBleHRlcm4g Ym9vbCBMb2NrSGFzV2FpdGVycyhjb25zdCBMT0NLVEFHICpsb2NrdGFnLAogCQkJCQkJICAgTE9D S01PREUgbG9ja21vZGUsIGJvb2wgc2Vzc2lvbkxvY2spOwogZXh0ZXJuIFZpcnR1YWxUcmFuc2Fj dGlvbklkICpHZXRMb2NrQ29uZmxpY3RzKGNvbnN0IExPQ0tUQUcgKmxvY2t0YWcsCmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3Byb2NzaWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvcHJvY3NpZ25hbC5oCmluZGV4IGVlYzE4NmJlMmUuLmMxYTcyMThkNjkgMTAwNjQ0Ci0tLSBh L3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvcHJvY3NpZ25hbC5oCkBAIC0zNSw2ICszNSw3IEBAIHR5cGVkZWYgZW51bQogCVBST0NTSUdf V0FMU05EX0lOSVRfU1RPUFBJTkcsCS8qIGFzayB3YWxzZW5kZXJzIHRvIHByZXBhcmUgZm9yIHNo dXRkb3duICAqLwogCVBST0NTSUdfQkFSUklFUiwJCQkvKiBnbG9iYWwgYmFycmllciBpbnRlcnJ1 cHQgICovCiAJUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQsIC8qIGFzayBiYWNrZW5kIHRvIGxv ZyB0aGUgbWVtb3J5IGNvbnRleHRzICovCisJUFJPQ1NJR19MT0dfQ1VSUkVOVF9QTEFOLCAvKiBh c2sgYmFja2VuZCB0byBsb2cgcGxhbiBvZiB0aGUgY3VycmVudCBxdWVyeSAqLwogCiAJLyogUmVj b3ZlcnkgY29uZmxpY3QgcmVhc29ucyAqLwogCVBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFU QUJBU0UsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL3NpZ25hbGZ1bmNzLmggYi9z cmMvaW5jbHVkZS9zdG9yYWdlL3NpZ25hbGZ1bmNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMC4uNWY2YjEyNDM3MgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRl L3N0b3JhZ2Uvc2lnbmFsZnVuY3MuaApAQCAtMCwwICsxLDIyIEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBzaWduYWxmdW5jcy5oCisgKgkgIEZ1bmN0aW9ucyBmb3Igc2lnbmFsaW5nIGJh Y2tlbmRzCisgKgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIxLCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChj KSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBz cmMvaW5jbHVkZS9zdG9yYWdlL3NpZ25hbGZ1bmNzLmgKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqLworI2lmbmRlZiBQUk9DU0lHTkFMRlVOQ19ICisjZGVmaW5lIFBST0NTSUdOQUxGVU5DX0gK KworLyoKKyAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBzaWduYWxmdW5jcy5jCisgKi8K K2V4dGVybiBib29sIFNlbmRQcm9jU2lnbmFsRm9yTG9nSW5mbyhwaWRfdCBwaWQsIFByb2NTaWdu YWxSZWFzb24gcmVhc29uKTsKKworI2VuZGlmCQkJCQkJCS8qIFBST0NTSUdOQUxGVU5DX0ggKi8K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvcHF1ZXJ5LmggYi9zcmMvaW5jbHVkZS90Y29w L3BxdWVyeS5oCmluZGV4IDIzMThmMDRmZjAuLmQzN2E1ZWI4MzcgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL3Rjb3AvcHF1ZXJ5LmgKKysrIGIvc3JjL2luY2x1ZGUvdGNvcC9wcXVlcnkuaApAQCAt MjEsNiArMjEsNyBAQCBzdHJ1Y3QgUGxhbm5lZFN0bXQ7CQkJCS8qIGF2b2lkIGluY2x1ZGluZyBw bGFubm9kZXMuaCBoZXJlICovCiAKIAogZXh0ZXJuIFBHRExMSU1QT1JUIFBvcnRhbCBBY3RpdmVQ b3J0YWw7CitleHRlcm4gUEdETExJTVBPUlQgUXVlcnlEZXNjICpBY3RpdmVRdWVyeURlc2M7CiAK IAogZXh0ZXJuIFBvcnRhbFN0cmF0ZWd5IENob29zZVBvcnRhbFN0cmF0ZWd5KExpc3QgKnN0bXRz KTsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbWlzY19mdW5jdGlvbnMu b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQKaW5kZXgg ZTg0NTA0MmQzOC4uOTgwMTdmODNhOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9taXNjX2Z1bmN0aW9ucy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9t aXNjX2Z1bmN0aW9ucy5vdXQKQEAgLTEzNCwxOCArMTM0LDI2IEBAIExJTkUgMTogU0VMRUNUIG51 bV9udWxscygpOwogICAgICAgICAgICAgICAgXgogSElOVDogIE5vIGZ1bmN0aW9uIG1hdGNoZXMg dGhlIGdpdmVuIG5hbWUgYW5kIGFyZ3VtZW50IHR5cGVzLiBZb3UgbWlnaHQgbmVlZCB0byBhZGQg ZXhwbGljaXQgdHlwZSBjYXN0cy4KIC0tCi0tLSBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4 dHMoKQorLS0gVGVzdCBsb2dnaW5nIGZ1bmN0aW9ucwogLS0KLS0tIE1lbW9yeSBjb250ZXh0cyBh cmUgbG9nZ2VkIGFuZCB0aGV5IGFyZSBub3QgcmV0dXJuZWQgdG8gdGhlIGZ1bmN0aW9uLgotLS0g RnVydGhlcm1vcmUsIHRoZWlyIGNvbnRlbnRzIGNhbiB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgdGlt aW5nLiBIb3dldmVyLAorLS0gVGhlc2UgZnVuY3Rpb25zIHJldHVybiB0cnVlIGlmIHRoZSBzcGVj aWZpZWQgYmFja2VuZCBpcyBzdWNjZXNzZnVsbHkKKy0tIHNpZ25hbGVkLCBvdGhlcndpc2UgZmFs c2UuIFVwb24gcmVjZWl2aW5nIHRoZSBzaWduYWwsIHRoZSBiYWNrZW5kCistLSB3aWxsIGxvZyB0 aGUgaW5mb3JtYXRpb24gdG8gdGhlIHNlcnZlciBsb2cuCistLSBBbHRob3VnaCB0aGVpciBjb250 ZW50cyBjYW4gdmFyeSBkZXBlbmRpbmcgb24gdGhlIHRpbWluZywKIC0tIHdlIGNhbiBhdCBsZWFz dCB2ZXJpZnkgdGhhdCB0aGUgY29kZSBkb2Vzbid0IGZhaWwuCiAtLQotU0VMRUNUICogRlJPTSBw Z19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGdfYmFja2VuZF9waWQoKSk7CitTRUxFQ1Qg cGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKHBnX2JhY2tlbmRfcGlkKCkpOwogIHBnX2xv Z19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiAgdAogKDEgcm93KQogCitTRUxFQ1QgcGdfbG9nX2N1cnJlbnRfcXVlcnlfcGxhbihwZ19i YWNrZW5kX3BpZCgpKTsKKyBwZ19sb2dfY3VycmVudF9xdWVyeV9wbGFuIAorLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgdAorKDEgcm93KQorCiAtLQogLS0gVGVzdCBzb21lIGJ1aWx0LWlu IFNSRnMKIC0tCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9u cy5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9taXNjX2Z1bmN0aW9ucy5zcWwKaW5kZXggYTM5 ODM0OWFmYy4uOTc5YTQxOGU4ZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWlz Y19mdW5jdGlvbnMuc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25z LnNxbApAQCAtMjksMTUgKzI5LDE3IEBAIFNFTEVDVCBudW1fbnVsbHMoVkFSSUFESUMgJ3t9Jzo6 aW50W10pOwogLS0gc2hvdWxkIGZhaWwsIG9uZSBvciBtb3JlIGFyZ3VtZW50cyBpcyByZXF1aXJl ZAogU0VMRUNUIG51bV9ub25udWxscygpOwogU0VMRUNUIG51bV9udWxscygpOwotCiAtLQotLS0g cGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKCkKKy0tIFRlc3QgbG9nZ2luZyBmdW5jdGlv bnMKIC0tCi0tLSBNZW1vcnkgY29udGV4dHMgYXJlIGxvZ2dlZCBhbmQgdGhleSBhcmUgbm90IHJl dHVybmVkIHRvIHRoZSBmdW5jdGlvbi4KLS0tIEZ1cnRoZXJtb3JlLCB0aGVpciBjb250ZW50cyBj YW4gdmFyeSBkZXBlbmRpbmcgb24gdGhlIHRpbWluZy4gSG93ZXZlciwKKy0tIFRoZXNlIGZ1bmN0 aW9ucyByZXR1cm4gdHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIGJhY2tlbmQgaXMgc3VjY2Vzc2Z1bGx5 CistLSBzaWduYWxlZCwgb3RoZXJ3aXNlIGZhbHNlLiBVcG9uIHJlY2VpdmluZyB0aGUgc2lnbmFs LCB0aGUgYmFja2VuZAorLS0gd2lsbCBsb2cgdGhlIGluZm9ybWF0aW9uIHRvIHRoZSBzZXJ2ZXIg bG9nLgorLS0gQWx0aG91Z2ggdGhlaXIgY29udGVudHMgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIHRo ZSB0aW1pbmcsCiAtLSB3ZSBjYW4gYXQgbGVhc3QgdmVyaWZ5IHRoYXQgdGhlIGNvZGUgZG9lc24n dCBmYWlsLgogLS0KLVNFTEVDVCAqIEZST00gcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRz KHBnX2JhY2tlbmRfcGlkKCkpOworU0VMRUNUIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0 cyhwZ19iYWNrZW5kX3BpZCgpKTsKK1NFTEVDVCBwZ19sb2dfY3VycmVudF9xdWVyeV9wbGFuKHBn X2JhY2tlbmRfcGlkKCkpOwogCiAtLQogLS0gVGVzdCBzb21lIGJ1aWx0LWluIFNSRnMKCmJhc2Ut Y29tbWl0OiBhM2QyYjFiYmU5MDRiMGNhOGQ5ZmRkZTIwZjI1Mjk1ZmYzZTIxZjc5Ci0tIAoyLjI3 LjAKCg== --=_8336ca246a873335c4b8bdefc9cb88ce--