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 1mNwLh-0007z0-9z for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Sep 2021 12:06:41 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mNwLf-0000dC-3v for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Sep 2021 12:06:39 +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 1mNwLe-0000d3-OT for pgsql-hackers@lists.postgresql.org; Wed, 08 Sep 2021 12:06:38 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mNwLY-0005ZI-Rn for pgsql-hackers@postgresql.org; Wed, 08 Sep 2021 12:06:37 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id C904760780; Wed, 8 Sep 2021 21:06:26 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.3 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_f6a5da7e0d4b26c2356ac0745d180e64" Content-Transfer-Encoding: 7bit Date: Wed, 08 Sep 2021 21:06:26 +0900 From: torikoshia To: Fujii Masao Cc: Pavel Stehule , Bharath Rupireddy , Dilip Kumar , Pgsql Hackers Subject: Re: RFC: Logging plan of the running query In-Reply-To: <3d345c49561f31a1d8ff60ea86f88840@oss.nttdata.com> 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: torikoshia@oss.nttdata.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_f6a5da7e0d4b26c2356ac0745d180e64 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2021-09-07 12:39, torikoshia wrote: > On 2021-08-20 01:12, Fujii Masao wrote: >> On 2021/08/11 21:14, torikoshia wrote: >>> As far as I looked into, pg_log_current_plan() can call >>> InstrEndLoop() through ExplainNode(). >>> I added a flag to ExplainState to avoid calling InstrEndLoop() when >>> ExplainNode() is called from pg_log_current_plan(). >> >> Thanks for updating the patch! >> I tried to test the patch again and encountered two issues. > > Thanks for finding these issues! > >> >> (1) >> The following WITH RECURSIVE query failed with the error >> "ERROR: failed to find plan for CTE sg" when I ran >> pg_log_current_query_plan() against the backend executing that query. >> Is this a bug? >> >> create table graph0( f int, t int, label text ); >> insert into graph0 values (1, 2, 'arc 1 -> 2'),(1, 3, 'arc 1 -> >> 3'),(2, 3, 'arc 2 -> 3'),(1, 4, 'arc 1 -> 4'),(4, 5, 'arc 4 -> 5'); >> >> with recursive search_graph(f, t, label, i) as ( >> select *, 1||pg_sleep(1)::text from graph0 g >> union distinct >> select g.*,1||pg_sleep(1)::text >> from graph0 g, search_graph sg >> where g.f = sg.t >> ) search breadth first by f, t set seq >> select * from search_graph order by seq; > > This ERROR occurred without applying the patch and just calling > EXPLAIN(VERBOSE) to CTE with SEARCH BREADTH FIRST. > > I'm going to make another thread to discuss it. > >> (2) >> When I ran pg_log_current_query_plan() while "make installcheck" test >> was running, I got the following assertion failure. >> >> TRAP: FailedAssertion("!IsPageLockHeld || (locktag->locktag_type == >> LOCKTAG_RELATION_EXTEND)", File: "lock.c", Line: 894, PID: 61512) >> >> 0 postgres 0x000000010ec23557 >> ExceptionalCondition + 231 >> 1 postgres 0x000000010e9eff15 >> LockAcquireExtended + 1461 >> 2 postgres 0x000000010e9ed14d >> LockRelationOid + 61 >> 3 postgres 0x000000010e41251b >> relation_open + 91 >> 4 postgres 0x000000010e509679 table_open >> + 25 >> 5 postgres 0x000000010ebf9462 >> SearchCatCacheMiss + 274 >> 6 postgres 0x000000010ebf5979 >> SearchCatCacheInternal + 761 >> 7 postgres 0x000000010ebf566c >> SearchCatCache + 60 >> 8 postgres 0x000000010ec1a9e0 >> SearchSysCache + 144 >> 9 postgres 0x000000010ec1ae03 >> SearchSysCacheExists + 51 >> 10 postgres 0x000000010e58ce35 >> TypeIsVisible + 437 >> 11 postgres 0x000000010ea98e4c >> format_type_extended + 1964 >> 12 postgres 0x000000010ea9900e >> format_type_with_typemod + 30 >> 13 postgres 0x000000010eb78d76 >> get_const_expr + 742 >> 14 postgres 0x000000010eb79bc8 >> get_rule_expr + 232 >> 15 postgres 0x000000010eb8140f >> get_func_expr + 1247 >> 16 postgres 0x000000010eb79dcd >> get_rule_expr + 749 >> 17 postgres 0x000000010eb81688 >> get_rule_expr_paren + 136 >> 18 postgres 0x000000010eb7bf38 >> get_rule_expr + 9304 >> 19 postgres 0x000000010eb72ad5 >> deparse_expression_pretty + 149 >> 20 postgres 0x000000010eb73463 >> deparse_expression + 83 >> 21 postgres 0x000000010e68eaf1 >> show_plan_tlist + 353 >> 22 postgres 0x000000010e68adaf ExplainNode >> + 4991 >> 23 postgres 0x000000010e688b4b >> ExplainPrintPlan + 283 >> 24 postgres 0x000000010e68e1aa >> ProcessLogCurrentPlanInterrupt + 266 >> 25 postgres 0x000000010ea133bb >> ProcessInterrupts + 3435 >> 26 postgres 0x000000010e738c97 >> vacuum_delay_point + 55 >> 27 postgres 0x000000010e42bb4b >> ginInsertCleanup + 1531 >> 28 postgres 0x000000010e42d418 >> gin_clean_pending_list + 776 >> 29 postgres 0x000000010e74955a >> ExecInterpExpr + 2522 >> 30 postgres 0x000000010e7487e2 >> ExecInterpExprStillValid + 82 >> 31 postgres 0x000000010e7ae83b >> ExecEvalExprSwitchContext + 59 >> 32 postgres 0x000000010e7ae7be ExecProject >> + 78 >> 33 postgres 0x000000010e7ae4e9 ExecResult >> + 345 >> 34 postgres 0x000000010e764e42 >> ExecProcNodeFirst + 82 >> 35 postgres 0x000000010e75ccb2 >> ExecProcNode + 50 >> 36 postgres 0x000000010e758301 ExecutePlan >> + 193 >> 37 postgres 0x000000010e7581d1 >> standard_ExecutorRun + 609 >> 38 auto_explain.so 0x000000010f1df3a7 >> explain_ExecutorRun + 247 >> 39 postgres 0x000000010e757f3b ExecutorRun >> + 91 >> 40 postgres 0x000000010ea1cb49 >> PortalRunSelect + 313 >> 41 postgres 0x000000010ea1c4dd PortalRun + >> 861 >> 42 postgres 0x000000010ea17474 >> exec_simple_query + 1540 >> 43 postgres 0x000000010ea164d4 >> PostgresMain + 2580 >> 44 postgres 0x000000010e91d159 BackendRun >> + 89 >> 45 postgres 0x000000010e91c6a5 >> BackendStartup + 565 >> 46 postgres 0x000000010e91b3fe ServerLoop >> + 638 >> 47 postgres 0x000000010e918b9d >> PostmasterMain + 6717 >> 48 postgres 0x000000010e7efd43 main + 819 >> 49 libdyld.dylib 0x00007fff6a46e3d5 start + 1 >> 50 ??? 0x0000000000000003 0x0 + 3 >> >> LOG: server process (PID 61512) was terminated by signal 6: Abort >> trap: 6 >> DETAIL: Failed process was running: select >> gin_clean_pending_list('t_gin_test_tbl_i_j_idx') is not null; > > As far as I understand, since explaining plans can acquire heavyweight > lock for example to get column names, when page lock is held at the > time of the interrupt, this assertion error occurs. > > The attached patch tries to avoid this by checking each LocalLock > entry and when finding even one, giving up logging the plan. > > Thoughts? Regression tests failed on windows. Updated patch attached. Regards, -- Atsushi Torikoshi NTT DATA CORPORATION --=_f6a5da7e0d4b26c2356ac0745d180e64 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v10-0001-log-running-query-plan.patch Content-Disposition: attachment; filename=v10-0001-log-running-query-plan.patch; size=25884 RnJvbSAyNjM1NmVmYjA5NGFjMjViMTFmZTY1ZGY5M2YxMWM2NGFkMTM2NzIzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFdlZCwgOCBTZXAgMjAyMSAyMDo0MDoyMSArMDkwMApTdWJqZWN0OiBb UEFUQ0ggdjhdIEFkZCBmdW5jdGlvbiB0byBsb2cgdGhlIHVudHJ1bmNhdGVkIHF1ZXJ5IHN0cmlu ZyBhbmQgaXRzCiBwbGFuIGZvciB0aGUgcXVlcnkgY3VycmVudGx5IHJ1bm5pbmcgb24gdGhlIGJh Y2tlbmQgd2l0aCB0aGUgc3BlY2lmaWVkCiBwcm9jZXNzIElELgoKQ3VycmVudGx5LCB3ZSBoYXZl IHRvIHdhaXQgZm9yIHRoZSBxdWVyeSBleGVjdXRpb24gdG8gZmluaXNoCmJlZm9yZSB3ZSBjaGVj ayBpdHMgcGxhbi4gVGhpcyBpcyBub3Qgc28gY29udmVuaWVudCB3aGVuCmludmVzdGlnYXRpbmcg bG9uZy1ydW5uaW5nIHF1ZXJpZXMgb24gcHJvZHVjdGlvbiBlbnZpcm9ubWVudHMKd2hlcmUgd2Ug Y2Fubm90IHVzZSBkZWJ1Z2dlcnMuClRvIGltcHJvdmUgdGhpcyBzaXR1YXRpb24sIHRoaXMgcGF0 Y2ggYWRkcwpwZ19sb2dfY3VycmVudF9xdWVyeV9wbGFuKCkgZnVuY3Rpb24gdGhhdCByZXF1ZXN0 cyB0byBsb2cgdGhlCnBsYW4gb2YgdGhlIHNwZWNpZmllZCBiYWNrZW5kIHByb2Nlc3MuCgpPbmx5 IHN1cGVydXNlcnMgYXJlIGFsbG93ZWQgdG8gcmVxdWVzdCB0byBsb2cgdGhlIHBsYW5zIGJlY2F1 c2UKYWxsb3dpbmcgYW55IHVzZXJzIHRvIGlzc3VlIHRoaXMgcmVxdWVzdCBhdCBhbiB1bmJvdW5k ZWQgcmF0ZQp3b3VsZCBjYXVzZSBsb3RzIG9mIGxvZyBtZXNzYWdlcyBhbmQgd2hpY2ggY2FuIGxl YWQgdG8gZGVuaWFsCm9mIHNlcnZpY2UuCgpPbiByZWNlaXB0IG9mIHRoZSByZXF1ZXN0LCBhdCB0 aGUgbmV4dCBDSEVDS19GT1JfSU5URVJSVVBUUygpLAp0aGUgdGFyZ2V0IGJhY2tlbmQgbG9ncyBp dHMgcGxhbiBhdCBMT0dfU0VSVkVSX09OTFkgbGV2ZWwsIHNvCnRoYXQgdGhlc2UgcGxhbnMgd2ls bCBhcHBlYXIgaW4gdGhlIHNlcnZlciBsb2cgYnV0IG5vdCBiZSBzZW50CnRvIHRoZSBjbGllbnQu CgpTaW5jZSBzb21lIGNvZGVzLCB0ZXN0cyBhbmQgY29tbWVudHMgb2YKcGdfbG9nX2N1cnJlbnRf cXVlcnlfcGxhbigpIGFyZSB0aGUgc2FtZSB3aXRoCnBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250 ZXh0cygpLCB0aGlzIHBhdGNoIGFsc28gcmVmYWN0b3JzCnRoZW0gdG8gbWFrZSB0aGVtIGNvbW1v bi4KClJldmlld2VkLWJ5OiBCaGFyYXRoIFJ1cGlyZWRkeSwgRnVqaWkgTWFzYW8sIERpbGlwIEt1 bWFyLCBNYXNhaGlybyBJa2VkYQoKLS0tCiBkb2Mvc3JjL3NnbWwvZnVuYy5zZ21sICAgICAgICAg ICAgICAgICAgICAgICB8ICA0NiArKysrKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFp bi5jICAgICAgICAgICAgICAgfCAxMTcgKysrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY01haW4uYyAgICAgICAgICAgICAgfCAgMTAgKysKIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyAgICAgICAgIHwgICA0ICsKIHNyYy9iYWNrZW5kL3N0b3Jh Z2UvaXBjL3NpZ25hbGZ1bmNzLmMgICAgICAgIHwgIDYxICsrKysrKysrKysKIHNyYy9iYWNrZW5k L3N0b3JhZ2UvbG1nci9sb2NrLmMgICAgICAgICAgICAgIHwgICA5ICstCiBzcmMvYmFja2VuZC90 Y29wL3Bvc3RncmVzLmMgICAgICAgICAgICAgICAgICB8ICAgNyArKwogc3JjL2JhY2tlbmQvdXRp bHMvYWR0L21jeHRmdW5jcy5jICAgICAgICAgICAgfCAgNTQgKy0tLS0tLS0tCiBzcmMvYmFja2Vu ZC91dGlscy9pbml0L2dsb2JhbHMuYyAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9j YXRhbG9nL3BnX3Byb2MuZGF0ICAgICAgICAgICAgICB8ICAgNiArCiBzcmMvaW5jbHVkZS9jb21t YW5kcy9leHBsYWluLmggICAgICAgICAgICAgICB8ICAgMyArCiBzcmMvaW5jbHVkZS9taXNjYWRt aW4uaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3By b2NzaWduYWwuaCAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9zdG9yYWdlL3NpZ25h bGZ1bmNzLmggICAgICAgICAgICB8ICAyMiArKysrCiBzcmMvaW5jbHVkZS90Y29wL3BxdWVyeS5o ICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21p c2NfZnVuY3Rpb25zLm91dCB8ICAxNiArKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVu Y3Rpb25zLnNxbCAgICAgIHwgIDEyICstCiAxNyBmaWxlcyBjaGFuZ2VkLCAzMDggaW5zZXJ0aW9u cygrKSwgNjMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvc3Rv cmFnZS9zaWduYWxmdW5jcy5oCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbCBi L2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwKaW5kZXggNzg4MTJiMmRiZS4uMTNiNDRiNDJjYiAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvZnVuYy5z Z21sCkBAIC0yNTI4MSw2ICsyNTI4MSwyNyBAQCBTRUxFQ1QgY29sbGF0aW9uIGZvciAoJ2Zvbycg Q09MTEFURSAiZGVfREUiKTsKICAgICAgICA8L3BhcmE+PC9lbnRyeT4KICAgICAgIDwvcm93Pgog CisgICAgICA8cm93PgorICAgICAgIDxlbnRyeSByb2xlPSJmdW5jX3RhYmxlX2VudHJ5Ij48cGFy YSByb2xlPSJmdW5jX3NpZ25hdHVyZSI+CisgICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgICA8 cHJpbWFyeT5wZ19sb2dfY3VycmVudF9xdWVyeV9wbGFuPC9wcmltYXJ5PgorICAgICAgICA8L2lu ZGV4dGVybT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX2xvZ19jdXJyZW50X3F1ZXJ5X3BsYW48L2Z1 bmN0aW9uPiAoIDxwYXJhbWV0ZXI+cGlkPC9wYXJhbWV0ZXI+IDx0eXBlPmludGVnZXI8L3R5cGU+ ICkKKyAgICAgICAgPHJldHVybnZhbHVlPmJvb2xlYW48L3JldHVybnZhbHVlPgorICAgICAgIDwv cGFyYT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVxdWVzdHMgdG8gbG9nIHRoZSBwbGFuIG9m IHRoZSBxdWVyeSBjdXJyZW50bHkgcnVubmluZyBvbiB0aGUKKyAgICAgICAgYmFja2VuZCB3aXRo IHNwZWNpZmllZCBwcm9jZXNzIElEIGFsb25nIHdpdGggdGhlIHVudHJ1bmNhdGVkCisgICAgICAg IHF1ZXJ5IHN0cmluZy4KKyAgICAgICAgVGhleSB3aWxsIGJlIGxvZ2dlZCBhdCA8bGl0ZXJhbD5M T0c8L2xpdGVyYWw+IG1lc3NhZ2UgbGV2ZWwgYW5kCisgICAgICAgIHdpbGwgYXBwZWFyIGluIHRo ZSBzZXJ2ZXIgbG9nIGJhc2VkIG9uIHRoZSBsb2cKKyAgICAgICAgY29uZmlndXJhdGlvbiBzZXQg KFNlZSA8eHJlZiBsaW5rZW5kPSJydW50aW1lLWNvbmZpZy1sb2dnaW5nIi8+CisgICAgICAgIGZv ciBtb3JlIGluZm9ybWF0aW9uKSwgYnV0IHdpbGwgbm90IGJlIHNlbnQgdG8gdGhlIGNsaWVudAor ICAgICAgICByZWdhcmRsZXNzIG9mIDx4cmVmIGxpbmtlbmQ9Imd1Yy1jbGllbnQtbWluLW1lc3Nh Z2VzIi8+LgorICAgICAgICBPbmx5IHN1cGVydXNlcnMgY2FuIHJlcXVlc3QgdG8gbG9nIHBsYW4g b2YgdGhlIHJ1bm5pbmcgcXVlcnkuCisgICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgICA8L3Jv dz4KKwogICAgICAgPHJvdz4KICAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+ PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1cmUiPgogICAgICAgICA8aW5kZXh0ZXJtPgpAQCAtMjUz OTQsNiArMjU0MTUsMzEgQEAgTE9HOiAgR3JhbmQgdG90YWw6IDE2NTE5MjAgYnl0ZXMgaW4gMjAx IGJsb2NrczsgNjIyMzYwIGZyZWUgKDg4IGNodW5rcyk7IDEwMjk1NjAKICAgICBiZWNhdXNlIGl0 IG1heSBnZW5lcmF0ZSBhIGxhcmdlIG51bWJlciBvZiBsb2cgbWVzc2FnZXMuCiAgICA8L3BhcmE+ CiAKKyAgIDxwYXJhPgorICAgIDxmdW5jdGlvbj5wZ19sb2dfY3VycmVudF9xdWVyeV9wbGFuPC9m dW5jdGlvbj4gY2FuIGJlIHVzZWQKKyAgICB0byBsb2cgdGhlIHBsYW4gb2YgYSBiYWNrZW5kIHBy b2Nlc3MuIEZvciBleGFtcGxlOgorPHByb2dyYW1saXN0aW5nPgorcG9zdGdyZXM9IyBTRUxFQ1Qg cGdfbG9nX2N1cnJlbnRfcXVlcnlfcGxhbigyMDExMTYpOworIHBnX2xvZ19jdXJyZW50X3F1ZXJ5 X3BsYW4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKzwvcHJvZ3Jh bWxpc3Rpbmc+CitUaGUgZm9ybWF0IG9mIHRoZSBxdWVyeSBwbGFuIGlzIHRoZSBzYW1lIGFzIHdo ZW4gPGxpdGVyYWw+VkVSQk9TRTwvbGl0ZXJhbD4sCis8bGl0ZXJhbD5DT1NUUzwvbGl0ZXJhbD4s IDxsaXRlcmFsPlNFVFRJTkdTPC9saXRlcmFsPiBhbmQKKzxsaXRlcmFsPkZPUk1BVCBURVhUPC9s aXRlcmFsPiBhcmUgdXNlZCBpbiB0aGUgPGNvbW1hbmQ+RVhQTEFJTjwvY29tbWFuZD4KK2NvbW1h bmQuIEZvciBleGFtcGxlOgorPHNjcmVlbj4KK0xPRzogIHBsYW4gb2YgdGhlIHF1ZXJ5IHJ1bm5p bmcgb24gYmFja2VuZCB3aXRoIFBJRCAxNzc5MyBpczoKKyAgICAgICAgUXVlcnkgVGV4dDogU0VM RUNUICogRlJPTSBwZ2JlbmNoX2FjY291bnRzOworICAgICAgICBTZXEgU2NhbiBvbiBwdWJsaWMu cGdiZW5jaF9hY2NvdW50cyAgKGNvc3Q9MC4wMC4uNTI3ODcuMDAgcm93cz0yMDAwMDAwIHdpZHRo PTk3KQorICAgICAgICAgIE91dHB1dDogYWlkLCBiaWQsIGFiYWxhbmNlLCBmaWxsZXIKKyAgICAg ICAgU2V0dGluZ3M6IHdvcmtfbWVtID0gJzFNQicKKzwvc2NyZWVuPgorICAgIE5vdGUgdGhhdCBu ZXN0ZWQgc3RhdGVtZW50cyAoc3RhdGVtZW50cyBleGVjdXRlZCBpbnNpZGUgYSBmdW5jdGlvbikg YXJlIG5vdAorICAgIGNvbnNpZGVyZWQgZm9yIGxvZ2dpbmcuIE9ubHkgdGhlIGRlZXBlc3QgbmVz dGluZyBxdWVyeSdzIHBsYW4gaXMgbG9nZ2VkLgorICAgPC9wYXJhPgorCiAgIDwvc2VjdDI+CiAK ICAgPHNlY3QyIGlkPSJmdW5jdGlvbnMtYWRtaW4tYmFja3VwIj4KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4u YwppbmRleCAxMDY0NGRmYWM0Li5mNTI4MzAxY2M1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBA IC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUhhc2guaCIKICNpbmNsdWRl ICJmb3JlaWduL2Zkd2FwaS5oIgogI2luY2x1ZGUgImppdC9qaXQuaCIKKyNpbmNsdWRlICJtaXNj YWRtaW4uaCIKICNpbmNsdWRlICJub2Rlcy9leHRlbnNpYmxlLmgiCiAjaW5jbHVkZSAibm9kZXMv bWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCkBAIC0yOCw2ICsyOSw5 IEBACiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgogI2luY2x1ZGUgInJld3JpdGUvcmV3 cml0ZUhhbmRsZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1nci5oIgorI2luY2x1ZGUgInN0 b3JhZ2UvcHJvY2FycmF5LmgiCisjaW5jbHVkZSAic3RvcmFnZS9zaWduYWxmdW5jcy5oIgorI2lu Y2x1ZGUgInRjb3AvcHF1ZXJ5LmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgogI2luY2x1 ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZ3VjX3RhYmxlcy5oIgpAQCAt NDAsNyArNDQsNiBAQAogI2luY2x1ZGUgInV0aWxzL3R5cGNhY2hlLmgiCiAjaW5jbHVkZSAidXRp bHMveG1sLmgiCiAKLQogLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBFeHBs YWluT25lUXVlcnkoKSAqLwogRXhwbGFpbk9uZVF1ZXJ5X2hvb2tfdHlwZSBFeHBsYWluT25lUXVl cnlfaG9vayA9IE5VTEw7CiAKQEAgLTE1OTQsNiArMTU5Nyw5IEBAIEV4cGxhaW5Ob2RlKFBsYW5T dGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJLyoKIAkgKiBXZSBoYXZlIHRvIGZv cmNpYmx5IGNsZWFuIHVwIHRoZSBpbnN0cnVtZW50YXRpb24gc3RhdGUgYmVjYXVzZSB3ZQogCSAq IGhhdmVuJ3QgZG9uZSBFeGVjdXRvckVuZCB5ZXQuICBUaGlzIGlzIHByZXR0eSBncm90dHkgLi4u CisJICogVGhpcyBjbGVhbnVwIHNob3VsZCBub3QgYmUgZG9uZSB3aGVuIHRoZSBxdWVyeSBoYXMg YWxyZWFkeSBiZWVuCisJICogZXhlY3V0ZWQsIGFzIHRoZSB0YXJnZXQgcXVlcnkgbWF5IHVzZSBp bnN0cnVtZW50YXRpb24gYW5kIGNsZWFuCisJICogaXRzZWxmIHVwLgogCSAqCiAJICogTm90ZTog Y29udHJpYi9hdXRvX2V4cGxhaW4gY291bGQgY2F1c2UgaW5zdHJ1bWVudGF0aW9uIHRvIGJlIHNl dCB1cAogCSAqIGV2ZW4gdGhvdWdoIHdlIGRpZG4ndCBhc2sgZm9yIGl0IGhlcmUuICBCZSBjYXJl ZnVsIG5vdCB0byBwcmludCBhbnkKQEAgLTE2MDEsNyArMTYwNyw3IEBAIEV4cGxhaW5Ob2RlKFBs YW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJICogSW5zdHJFbmRMb29wIGNh bGwgYW55d2F5LCBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2YgY2FzZXMKIAkg KiBhdXRvX2V4cGxhaW4gaGFzIHRvIGNvbnRlbmQgd2l0aC4KIAkgKi8KLQlpZiAocGxhbnN0YXRl LT5pbnN0cnVtZW50KQorCWlmIChwbGFuc3RhdGUtPmluc3RydW1lbnQgJiYgIWVzLT5ydW5uaW5n KQogCQlJbnN0ckVuZExvb3AocGxhbnN0YXRlLT5pbnN0cnVtZW50KTsKIAogCWlmIChlcy0+YW5h bHl6ZSAmJgpAQCAtNDkyMiwzICs0OTI4LDExMCBAQCBlc2NhcGVfeWFtbChTdHJpbmdJbmZvIGJ1 ZiwgY29uc3QgY2hhciAqc3RyKQogewogCWVzY2FwZV9qc29uKGJ1Ziwgc3RyKTsKIH0KKworLyoK KyAqIEhhbmRsZUxvZ0N1cnJlbnRQbGFuSW50ZXJydXB0CisgKgkJSGFuZGxlIHJlY2VpcHQgb2Yg YW4gaW50ZXJydXB0IGluZGljYXRpbmcgbG9nZ2luZyB0aGUgcGxhbiBvZgorICoJCXRoZSBjdXJy ZW50bHkgcnVubmluZyBxdWVyeS4KKyAqCisgKiBBbGwgdGhlIGFjdHVhbCB3b3JrIGlzIGRlZmVy cmVkIHRvIFByb2Nlc3NMb2dDdXJyZW50UGxhbkludGVycnVwdCgpLAorICogYmVjYXVzZSB3ZSBj YW5ub3Qgc2FmZWx5IGVtaXQgYSBsb2cgbWVzc2FnZSBpbnNpZGUgdGhlIHNpZ25hbCBoYW5kbGVy LgorICovCit2b2lkCitIYW5kbGVMb2dDdXJyZW50UGxhbkludGVycnVwdCh2b2lkKQoreworCUlu dGVycnVwdFBlbmRpbmcgPSB0cnVlOworCUxvZ0N1cnJlbnRQbGFuUGVuZGluZyA9IHRydWU7CisJ LyogbGF0Y2ggd2lsbCBiZSBzZXQgYnkgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIgKi8KK30K KworLyoKKyAqIFByb2Nlc3NMb2dDdXJyZW50UGxhbkludGVycnVwdAorICogCQlQZXJmb3JtIGxv Z2dpbmcgdGhlIHBsYW4gb2YgdGhlIGN1cnJlbnRseSBydW5uaW5nIHF1ZXJ5IG9uIHRoaXMKKyAq IAkJYmFja2VuZCBwcm9jZXNzLgorICoKKyAqIEFueSBiYWNrZW5kIHRoYXQgcGFydGljaXBhdGVz IGluIFByb2NTaWduYWwgc2lnbmFsaW5nIG11c3QgYXJyYW5nZSB0byBjYWxsCisgKiB0aGlzIGZ1 bmN0aW9uIGlmIHdlIHNlZSBMb2dDdXJyZW50UGxhblBlbmRpbmcgc2V0LgorICogSXQgaXMgY2Fs bGVkIGZyb20gQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKSwgd2hpY2ggaXMgZW5vdWdoIGJlY2F1c2Ug dGhlIHRhcmdldAorICogcHJvY2VzcyBmb3IgbG9nZ2luZyBwbGFuIGlzIGEgYmFja2VuZC4KKyAq Lwordm9pZAorUHJvY2Vzc0xvZ0N1cnJlbnRQbGFuSW50ZXJydXB0KHZvaWQpCit7CisJRXhwbGFp blN0YXRlICplczsKKwlIQVNIX1NFUV9TVEFUVVMgc3RhdHVzOworCUxPQ0FMTE9DSyAgKmxvY2Fs bG9jazsKKwlMb2dDdXJyZW50UGxhblBlbmRpbmcgPSBmYWxzZTsKKworCWlmIChBY3RpdmVRdWVy eURlc2MgPT0gTlVMTCkKKwl7CisJCWVyZXBvcnQoTE9HX1NFUlZFUl9PTkxZLAorCQkJCShlcnJt c2coImJhY2tlbmQgd2l0aCBQSUQgJWQgaXMgbm90IHJ1bm5pbmcgYSBxdWVyeSIsCisJCQkJCU15 UHJvY1BpZCkpKTsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogRW5zdXJlIG5vIHBhZ2UgbG9j ayBpcyBoZWxkIG9uIHRoaXMgcHJvY2Vzcy4KKwkgKgorCSAqIElmIHBhZ2UgbG9jayBpcyBoZWxk IGF0IHRoZSB0aW1lIG9mIHRoZSBpbnRlcnJ1cHQsIHdlIGNhbid0IGFjcXVpcmUgYW55CisJICog b3RoZXIgaGVhdnl3ZWlnaHQgbG9jaywgd2hpY2ggbWlnaHQgYmUgbmVjZXNzYXJ5IGZvciBleHBs YWluaW5nIHRoZSBwbGFuCisJICogd2hlbiByZXRyaWV2aW5nIGNvbHVtbiBuYW1lcy4KKwkgKgor CSAqIFRoaXMgbWF5IGJlIG92ZXJraWxsLCBidXQgc2luY2UgcGFnZSBsb2NrcyBhcmUgaGVsZCBm b3IgYSBzaG9ydCBkdXJhdGlvbgorCSAqIHdlIGNoZWNrIGFsbCB0aGUgTG9jYWxMb2NrIGVudHJp ZXMgYW5kIHdoZW4gZmluZGluZyBldmVuIG9uZSwgZ2l2ZSB1cAorCSAqIGxvZ2dpbmcgdGhlIHBs YW4uCisJICovCisJaGFzaF9zZXFfaW5pdCgmc3RhdHVzLCBHZXRMb2NrTWV0aG9kTG9jYWxIYXNo KCkpOworCXdoaWxlICgobG9jYWxsb2NrID0gKExPQ0FMTE9DSyAqKSBoYXNoX3NlcV9zZWFyY2go JnN0YXR1cykpICE9IE5VTEwpCisJeworCQlpZiAoTE9DQUxMT0NLX0xPQ0tUQUcoKmxvY2FsbG9j aykgPT0gTE9DS1RBR19QQUdFKQorCQl7CisJCQllcmVwb3J0KExPR19TRVJWRVJfT05MWSwKKwkJ CQkoZXJybXNnKCJiYWNrZW5kIHdpdGggUElEICVkIGlzIG5vdyBob2xkaW5nIGEgcGFnZSBsb2Nr LiBUcnkgYWdhaW4iLAorCQkJCQlNeVByb2NQaWQpKSk7CisJCQloYXNoX3NlcV90ZXJtKCZzdGF0 dXMpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZXMgPSBOZXdFeHBsYWluU3RhdGUoKTsKKwor CWVzLT5mb3JtYXQgPSBFWFBMQUlOX0ZPUk1BVF9URVhUOworCWVzLT5zZXR0aW5ncyA9IHRydWU7 CisJZXMtPnZlcmJvc2UgPSB0cnVlOworCWVzLT5ydW5uaW5nID0gdHJ1ZTsKKworCUV4cGxhaW5C ZWdpbk91dHB1dChlcyk7CisJRXhwbGFpblF1ZXJ5VGV4dChlcywgQWN0aXZlUXVlcnlEZXNjKTsK KwlFeHBsYWluUHJpbnRQbGFuKGVzLCBBY3RpdmVRdWVyeURlc2MpOworCWlmIChlcy0+Y29zdHMp CisJCUV4cGxhaW5QcmludEpJVFN1bW1hcnkoZXMsIEFjdGl2ZVF1ZXJ5RGVzYyk7CisJRXhwbGFp bkVuZE91dHB1dChlcyk7CisKKwkvKiBSZW1vdmUgbGFzdCBsaW5lIGJyZWFrICovCisJaWYgKGVz LT5zdHItPmxlbiA+IDAgJiYgZXMtPnN0ci0+ZGF0YVtlcy0+c3RyLT5sZW4gLSAxXSA9PSAnXG4n KQorCQllcy0+c3RyLT5kYXRhWy0tZXMtPnN0ci0+bGVuXSA9ICdcMCc7CisKKwllcmVwb3J0KExP R19TRVJWRVJfT05MWSwKKwkJCShlcnJtc2coInBsYW4gb2YgdGhlIHF1ZXJ5IHJ1bm5pbmcgb24g YmFja2VuZCB3aXRoIFBJRCAlZCBpczpcbiVzIiwKKwkJCQkJTXlQcm9jUGlkLCBlcy0+c3RyLT5k YXRhKSwKKwkJCSBlcnJoaWRlc3RtdCh0cnVlKSwKKwkJCSBlcnJoaWRlY29udGV4dCh0cnVlKSkp OworfQorCisvKgorICogcGdfbG9nX2N1cnJlbnRfcXVlcnlfcGxhbgorICoJCVNpZ25hbCBhIGJh Y2tlbmQgcHJvY2VzcyB0byBsb2cgdGhlIHF1ZXJ5IHBsYW4gb2YgdGhlIHJ1bm5pbmcgcXVlcnku CisgKi8KK0RhdHVtCitwZ19sb2dfY3VycmVudF9xdWVyeV9wbGFuKFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJcGlkX3QJCXBpZDsKKwlib29sCQlyZXN1bHQ7CisKKwlwaWQgPSBQR19HRVRBUkdfSU5U MzIoMCk7CisJcmVzdWx0ID0gU2VuZFByb2NTaWduYWxGb3JMb2dJbmZvKHBpZCwgUFJPQ1NJR19M T0dfQ1VSUkVOVF9QTEFOKTsKKworCVBHX1JFVFVSTl9CT09MKHJlc3VsdCk7Cit9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY01haW4uYwppbmRleCBiM2NlNGJhZTUzLi5jNzRhYTFkMDRlIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNNYWluLmMKQEAgLTc2LDYgKzc2LDkgQEAgRXhlY3V0b3JFbmRfaG9va190eXBlIEV4ZWN1 dG9yRW5kX2hvb2sgPSBOVUxMOwogLyogSG9vayBmb3IgcGx1Z2luIHRvIGdldCBjb250cm9sIGlu IEV4ZWNDaGVja1JUUGVybXMoKSAqLwogRXhlY3V0b3JDaGVja1Blcm1zX2hvb2tfdHlwZSBFeGVj dXRvckNoZWNrUGVybXNfaG9vayA9IE5VTEw7CiAKKy8qIEN1cnJlbnRseSBleGVjdXRpbmcgcXVl cnkncyBRdWVyeURlc2MgKi8KK1F1ZXJ5RGVzYyAqQWN0aXZlUXVlcnlEZXNjID0gTlVMTDsKKwog LyogZGVjbHMgZm9yIGxvY2FsIHJvdXRpbmVzIG9ubHkgdXNlZCB3aXRoaW4gdGhpcyBtb2R1bGUg Ki8KIHN0YXRpYyB2b2lkIEluaXRQbGFuKFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdz KTsKIHN0YXRpYyB2b2lkIENoZWNrVmFsaWRSb3dNYXJrUmVsKFJlbGF0aW9uIHJlbCwgUm93TWFy a1R5cGUgbWFya1R5cGUpOwpAQCAtMjk5LDEwICszMDIsMTcgQEAgRXhlY3V0b3JSdW4oUXVlcnlE ZXNjICpxdWVyeURlc2MsCiAJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwgdWludDY0IGNvdW50 LAogCQkJYm9vbCBleGVjdXRlX29uY2UpCiB7CisJUXVlcnlEZXNjICpzYXZlX0FjdGl2ZVF1ZXJ5 RGVzYzsKKworCXNhdmVfQWN0aXZlUXVlcnlEZXNjID0gQWN0aXZlUXVlcnlEZXNjOworCUFjdGl2 ZVF1ZXJ5RGVzYyA9IHF1ZXJ5RGVzYzsKKwogCWlmIChFeGVjdXRvclJ1bl9ob29rKQogCQkoKkV4 ZWN1dG9yUnVuX2hvb2spIChxdWVyeURlc2MsIGRpcmVjdGlvbiwgY291bnQsIGV4ZWN1dGVfb25j ZSk7CiAJZWxzZQogCQlzdGFuZGFyZF9FeGVjdXRvclJ1bihxdWVyeURlc2MsIGRpcmVjdGlvbiwg Y291bnQsIGV4ZWN1dGVfb25jZSk7CisKKwlBY3RpdmVRdWVyeURlc2MgPSBzYXZlX0FjdGl2ZVF1 ZXJ5RGVzYzsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMv cHJvY3NpZ25hbC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvcHJvY3NpZ25hbC5jCmluZGV4 IGRlZmI3NWFhMjYuLjliOTY1MzU0NGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3Byb2NzaWduYWwuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFs LmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvcGFyYWxsZWwuaCIKICNpbmNs dWRlICJwb3J0L3BnX2JpdHV0aWxzLmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKKyNp bmNsdWRlICJjb21tYW5kcy9leHBsYWluLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAicGdzdGF0LmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vd2Fsc2VuZGVyLmgiCkBAIC02 NjEsNiArNjYyLDkgQEAgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIoU0lHTkFMX0FSR1MpCiAJ aWYgKENoZWNrUHJvY1NpZ25hbChQUk9DU0lHX0xPR19NRU1PUllfQ09OVEVYVCkpCiAJCUhhbmRs ZUxvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsKIAorCWlmIChDaGVja1Byb2NTaWduYWwoUFJP Q1NJR19MT0dfQ1VSUkVOVF9QTEFOKSkKKwkJSGFuZGxlTG9nQ3VycmVudFBsYW5JbnRlcnJ1cHQo KTsKKwogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9EQVRB QkFTRSkpCiAJCVJlY292ZXJ5Q29uZmxpY3RJbnRlcnJ1cHQoUFJPQ1NJR19SRUNPVkVSWV9DT05G TElDVF9EQVRBQkFTRSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBjL3Np Z25hbGZ1bmNzLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zaWduYWxmdW5jcy5jCmluZGV4 IGRlNjlkNjBlNzkuLjFhYWQxMjA3OTEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv aXBjL3NpZ25hbGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc2lnbmFsZnVu Y3MuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgInN0b3JhZ2UvcG1zaWduYWwuaCIKICNp bmNsdWRlICJzdG9yYWdlL3Byb2MuaCIKICNpbmNsdWRlICJzdG9yYWdlL3Byb2NhcnJheS5oIgor I2luY2x1ZGUgInN0b3JhZ2Uvc2lnbmFsZnVuY3MuaCIKICNpbmNsdWRlICJ1dGlscy9hY2wuaCIK ICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogCkBAIC0yOTgsMyArMjk5LDYzIEBAIHBnX3Jv dGF0ZV9sb2dmaWxlX3YyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJU2VuZFBvc3RtYXN0ZXJTaWduYWwo UE1TSUdOQUxfUk9UQVRFX0xPR0ZJTEUpOwogCVBHX1JFVFVSTl9CT09MKHRydWUpOwogfQorCisv KgorICogU2lnbmFsIGEgYmFja2VuZCBwcm9jZXNzIHRvIGxvZyBpdHMgaW5mb3JtYXRpb24uCisg KgorICogT25seSBzdXBlcnVzZXJzIGFyZSBhbGxvd2VkIHRvIHNpZ25hbCB0byBsb2cgaW5mb3Jt YXRpb24gYmVjYXVzZQorICogYWxsb3dpbmcgYW55IHVzZXJzIHRvIGlzc3VlIHRoaXMgcmVxdWVz dCBhdCBhbiB1bmJvdW5kZWQgcmF0ZQorICogd291bGQgY2F1c2UgbG90cyBvZiBsb2cgbWVzc2Fn ZXMgYW5kIHdoaWNoIGNhbiBsZWFkIHRvIGRlbmlhbCBvZgorICogc2VydmljZS4KKyAqCisgKiBP biByZWNlaXB0IG9mIHRoaXMgc2lnbmFsLCBhIGJhY2tlbmQgc2V0cyB0aGUgZmxhZyBpbiB0aGUg c2lnbmFsCisgKiBoYW5kbGVyLCB3aGljaCBjYXVzZXMgdGhlIG5leHQgQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKSB0byBsb2cgdGhlCisgKiBpbmZvcm1hdGlvbi4KKyAqLworYm9vbAorU2VuZFByb2NT aWduYWxGb3JMb2dJbmZvKHBpZF90IHBpZCwgUHJvY1NpZ25hbFJlYXNvbiByZWFzb24pCit7CisJ UEdQUk9DCSAgICpwcm9jOworCisJQXNzZXJ0KHJlYXNvbiA9PSBQUk9DU0lHX0xPR19NRU1PUllf Q09OVEVYVCB8fAorCQkgICByZWFzb24gPT0gUFJPQ1NJR19MT0dfQ1VSUkVOVF9QTEFOKTsKKwor CS8qIE9ubHkgYWxsb3cgc3VwZXJ1c2VycyB0byBsb2cgaW5mb3JtYXRpb24uICovCisJaWYgKCFz dXBlcnVzZXIoKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOU1VG RklDSUVOVF9QUklWSUxFR0UpLAorCQkJCSBlcnJtc2coIm11c3QgYmUgYSBzdXBlcnVzZXIgdG8g bG9nIGluZm9ybWF0aW9uIGFib3V0IHNwZWNpZmllZCBwcm9jZXNzIikpKTsKKworCXByb2MgPSBC YWNrZW5kUGlkR2V0UHJvYyhwaWQpOworCisJLyoKKwkgKiBCYWNrZW5kUGlkR2V0UHJvYyByZXR1 cm5zIE5VTEwgaWYgdGhlIHBpZCBpc24ndCB2YWxpZDsgYnV0IGJ5IHRoZSB0aW1lCisJICogd2Ug cmVhY2gga2lsbCgpLCBhIHByb2Nlc3MgZm9yIHdoaWNoIHdlIGdldCBhIHZhbGlkIHByb2MgaGVy ZSBtaWdodAorCSAqIGhhdmUgdGVybWluYXRlZCBvbiBpdHMgb3duLiAgVGhlcmUncyBubyB3YXkg dG8gYWNxdWlyZSBhIGxvY2sgb24gYW4KKwkgKiBhcmJpdHJhcnkgcHJvY2VzcyB0byBwcmV2ZW50 IHRoYXQuIEJ1dCBzaW5jZSB0aGlzIG1lY2hhbmlzbSBpcyB1c3VhbGx5CisJICogdXNlZCB0byBi ZWxvdyBwdXJwb3NlcywgaXQgbWlnaHQgZW5kIGl0cyBvd24gZmlyc3QgYW5kIHRoZSBpbmZvcm1h dGlvbgorCSAqIGlzIG5vdCBsb2dnZWQgaXMgbm90IGEgcHJvYmxlbS4KKwkgKiAtIGRlYnVnIGEg YmFja2VuZCBydW5uaW5nIGFuZCBjb25zdW1pbmcgbG90cyBvZiBtZW1vcnkKKwkgKiAtIGxvb2sg aW50byB0aGUgcGxhbiBvZiB0aGUgbG9uZyBydW5uaW5nIHF1ZXJ5CisJICovCisJaWYgKHByb2Mg PT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFRoaXMgaXMganVzdCBhIHdhcm5pbmcgc28gYSBsb29w LXRocm91Z2gtcmVzdWx0c2V0IHdpbGwgbm90IGFib3J0CisJCSAqIGlmIG9uZSBiYWNrZW5kIHRl cm1pbmF0ZWQgb24gaXRzIG93biBkdXJpbmcgdGhlIHJ1bi4KKwkJICovCisJCWVyZXBvcnQoV0FS TklORywKKwkJCQkoZXJybXNnKCJQSUQgJWQgaXMgbm90IGEgUG9zdGdyZVNRTCBzZXJ2ZXIgcHJv Y2VzcyIsIHBpZCkpKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCWlmIChTZW5kUHJvY1NpZ25h bChwaWQsIHJlYXNvbiwgcHJvYy0+YmFja2VuZElkKSA8IDApCisJeworCQkvKiBBZ2FpbiwganVz dCBhIHdhcm5pbmcgdG8gYWxsb3cgbG9vcHMgKi8KKwkJZXJlcG9ydChXQVJOSU5HLAorCQkJCShl cnJtc2coImNvdWxkIG5vdCBzZW5kIHNpZ25hbCB0byBwcm9jZXNzICVkOiAlbSIsIHBpZCkpKTsK KwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9sbWdyL2xvY2suYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9s b2NrLmMKaW5kZXggMzY0NjU0ZTEwNi4uNmQxYTVhZGQxNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvc3RvcmFnZS9sbWdyL2xvY2suYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3IvbG9j ay5jCkBAIC02MTQsMTcgKzYxNCwxOCBAQCBMb2NrSGVsZEJ5TWUoY29uc3QgTE9DS1RBRyAqbG9j a3RhZywgTE9DS01PREUgbG9ja21vZGUpCiAJcmV0dXJuIChsb2NhbGxvY2sgJiYgbG9jYWxsb2Nr LT5uTG9ja3MgPiAwKTsKIH0KIAotI2lmZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKIC8qCi0gKiBH ZXRMb2NrTWV0aG9kTG9jYWxIYXNoIC0tIHJldHVybiB0aGUgaGFzaCBvZiBsb2NhbCBsb2Nrcywg Zm9yIG1vZHVsZXMgdGhhdAotICoJCWV2YWx1YXRlIGFzc2VydGlvbnMgYmFzZWQgb24gYWxsIGxv Y2tzIGhlbGQuCisgKiBHZXRMb2NrTWV0aG9kTG9jYWxIYXNoIC0tIHJldHVybiB0aGUgaGFzaCBv ZiBsb2NhbCBsb2NrcywgbWFpbmx5IGZvcgorICoJCW1vZHVsZXMgdGhhdCBldmFsdWF0ZSBhc3Nl cnRpb25zIGJhc2VkIG9uIGFsbCBsb2NrcyBoZWxkLgorICoKKyAqIE5PVEU6IFdoZW4gdGhlcmUg YXJlIG1hbnkgZW50cmllcyBpbiBMb2NrTWV0aG9kTG9jYWxIYXNoLCBjYWxsaW5nIHRoaXMKKyAq IGZ1bmN0aW9uIGFuZCBsb29raW5nIGludG8gYWxsIG9mIHRoZW0gY2FuIGxlYWQgdG8gcGVyZm9y bWFuY2UgcHJvYmxlbXMuCiAgKi8KIEhUQUIgKgogR2V0TG9ja01ldGhvZExvY2FsSGFzaCh2b2lk KQogewogCXJldHVybiBMb2NrTWV0aG9kTG9jYWxIYXNoOwogfQotI2VuZGlmCiAKIC8qCiAgKiBM b2NrSGFzV2FpdGVycyAtLSBsb29rIHVwICdsb2NrdGFnJyBhbmQgY2hlY2sgaWYgcmVsZWFzaW5n IHRoaXMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYyBiL3NyYy9iYWNr ZW5kL3Rjb3AvcG9zdGdyZXMuYwppbmRleCA1OGI1OTYwZTI3Li44Yjg4MDhkYjhmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC9w b3N0Z3Jlcy5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNp bmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy9hc3luYy5oIgor I2luY2x1ZGUgImNvbW1hbmRzL2V4cGxhaW4uaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcmVwYXJl LmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivc3BpLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgpAQCAt MzM2Niw2ICszMzY3LDkgQEAgUHJvY2Vzc0ludGVycnVwdHModm9pZCkKIAogCWlmIChMb2dNZW1v cnlDb250ZXh0UGVuZGluZykKIAkJUHJvY2Vzc0xvZ01lbW9yeUNvbnRleHRJbnRlcnJ1cHQoKTsK KworCWlmIChMb2dDdXJyZW50UGxhblBlbmRpbmcpCisJCVByb2Nlc3NMb2dDdXJyZW50UGxhbklu dGVycnVwdCgpOwogfQogCiAKQEAgLTQyNzgsNiArNDI4Miw5IEBAIFBvc3RncmVzTWFpbihpbnQg YXJnYywgY2hhciAqYXJndltdLAogCQkvKiBXZSBkb24ndCBoYXZlIGEgdHJhbnNhY3Rpb24gY29t bWFuZCBvcGVuIGFueW1vcmUgKi8KIAkJeGFjdF9zdGFydGVkID0gZmFsc2U7CiAKKwkJLyogV2Ug aGF2ZSBubyBydW5uaW5nIHF1ZXJ5ICovCisJCUFjdGl2ZVF1ZXJ5RGVzYyA9IE5VTEw7CisKIAkJ LyoKIAkJICogSWYgYW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgd2Ugd2VyZSByZWFkaW5nIGEgbWVz c2FnZSBmcm9tIHRoZQogCQkgKiBjbGllbnQsIHdlIGhhdmUgcG90ZW50aWFsbHkgbG9zdCB0cmFj ayBvZiB3aGVyZSB0aGUgcHJldmlvdXMKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9tY3h0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9tY3h0ZnVuY3MuYwppbmRleCAw ZDUyNjEzYmMzLi4zMDRmMzZiZGEwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQv bWN4dGZ1bmNzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L21jeHRmdW5jcy5jCkBAIC0x OCw4ICsxOCw4IEBACiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCi0jaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3NpZ25hbGZ1 bmNzLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKIAogLyogLS0tLS0tLS0tLQpAQCAt MTYxLDU3ICsxNjEsMTUgQEAgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKFBHX0ZVTkNU SU9OX0FSR1MpCiAvKgogICogcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzCiAgKgkJU2ln bmFsIGEgYmFja2VuZCBwcm9jZXNzIHRvIGxvZyBpdHMgbWVtb3J5IGNvbnRleHRzLgotICoKLSAq IE9ubHkgc3VwZXJ1c2VycyBhcmUgYWxsb3dlZCB0byBzaWduYWwgdG8gbG9nIHRoZSBtZW1vcnkg Y29udGV4dHMKLSAqIGJlY2F1c2UgYWxsb3dpbmcgYW55IHVzZXJzIHRvIGlzc3VlIHRoaXMgcmVx dWVzdCBhdCBhbiB1bmJvdW5kZWQKLSAqIHJhdGUgd291bGQgY2F1c2UgbG90cyBvZiBsb2cgbWVz c2FnZXMgYW5kIHdoaWNoIGNhbiBsZWFkIHRvCi0gKiBkZW5pYWwgb2Ygc2VydmljZS4KLSAqCi0g KiBPbiByZWNlaXB0IG9mIHRoaXMgc2lnbmFsLCBhIGJhY2tlbmQgc2V0cyB0aGUgZmxhZyBpbiB0 aGUgc2lnbmFsCi0gKiBoYW5kbGVyLCB3aGljaCBjYXVzZXMgdGhlIG5leHQgQ0hFQ0tfRk9SX0lO VEVSUlVQVFMoKSB0byBsb2cgdGhlCi0gKiBtZW1vcnkgY29udGV4dHMuCiAgKi8KIERhdHVtCiBw Z19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoUEdfRlVOQ1RJT05fQVJHUykKIHsKLQlpbnQJ CQlwaWQgPSBQR19HRVRBUkdfSU5UMzIoMCk7Ci0JUEdQUk9DCSAgICpwcm9jOwotCi0JLyogT25s eSBhbGxvdyBzdXBlcnVzZXJzIHRvIGxvZyBtZW1vcnkgY29udGV4dHMuICovCi0JaWYgKCFzdXBl cnVzZXIoKSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX0lOU1VGRklD SUVOVF9QUklWSUxFR0UpLAotCQkJCSBlcnJtc2coIm11c3QgYmUgYSBzdXBlcnVzZXIgdG8gbG9n IG1lbW9yeSBjb250ZXh0cyIpKSk7Ci0KLQlwcm9jID0gQmFja2VuZFBpZEdldFByb2MocGlkKTsK LQotCS8qCi0JICogQmFja2VuZFBpZEdldFByb2MgcmV0dXJucyBOVUxMIGlmIHRoZSBwaWQgaXNu J3QgdmFsaWQ7IGJ1dCBieSB0aGUgdGltZQotCSAqIHdlIHJlYWNoIGtpbGwoKSwgYSBwcm9jZXNz IGZvciB3aGljaCB3ZSBnZXQgYSB2YWxpZCBwcm9jIGhlcmUgbWlnaHQKLQkgKiBoYXZlIHRlcm1p bmF0ZWQgb24gaXRzIG93bi4gIFRoZXJlJ3Mgbm8gd2F5IHRvIGFjcXVpcmUgYSBsb2NrIG9uIGFu Ci0JICogYXJiaXRyYXJ5IHByb2Nlc3MgdG8gcHJldmVudCB0aGF0LiBCdXQgc2luY2UgdGhpcyBt ZWNoYW5pc20gaXMgdXN1YWxseQotCSAqIHVzZWQgdG8gZGVidWcgYSBiYWNrZW5kIHJ1bm5pbmcg YW5kIGNvbnN1bWluZyBsb3RzIG9mIG1lbW9yeSwgdGhhdCBpdAotCSAqIG1pZ2h0IGVuZCBvbiBp dHMgb3duIGZpcnN0IGFuZCBpdHMgbWVtb3J5IGNvbnRleHRzIGFyZSBub3QgbG9nZ2VkIGlzCi0J ICogbm90IGEgcHJvYmxlbS4KLQkgKi8KLQlpZiAocHJvYyA9PSBOVUxMKQotCXsKLQkJLyoKLQkJ ICogVGhpcyBpcyBqdXN0IGEgd2FybmluZyBzbyBhIGxvb3AtdGhyb3VnaC1yZXN1bHRzZXQgd2ls bCBub3QgYWJvcnQKLQkJICogaWYgb25lIGJhY2tlbmQgdGVybWluYXRlZCBvbiBpdHMgb3duIGR1 cmluZyB0aGUgcnVuLgotCQkgKi8KLQkJZXJlcG9ydChXQVJOSU5HLAotCQkJCShlcnJtc2coIlBJ RCAlZCBpcyBub3QgYSBQb3N0Z3JlU1FMIHNlcnZlciBwcm9jZXNzIiwgcGlkKSkpOwotCQlQR19S RVRVUk5fQk9PTChmYWxzZSk7Ci0JfQorCXBpZF90CQlwaWQ7CisJYm9vbAkJcmVzdWx0OwogCi0J aWYgKFNlbmRQcm9jU2lnbmFsKHBpZCwgUFJPQ1NJR19MT0dfTUVNT1JZX0NPTlRFWFQsIHByb2Mt PmJhY2tlbmRJZCkgPCAwKQotCXsKLQkJLyogQWdhaW4sIGp1c3QgYSB3YXJuaW5nIHRvIGFsbG93 IGxvb3BzICovCi0JCWVyZXBvcnQoV0FSTklORywKLQkJCQkoZXJybXNnKCJjb3VsZCBub3Qgc2Vu ZCBzaWduYWwgdG8gcHJvY2VzcyAlZDogJW0iLCBwaWQpKSk7Ci0JCVBHX1JFVFVSTl9CT09MKGZh bHNlKTsKLQl9CisJcGlkID0gUEdfR0VUQVJHX0lOVDMyKDApOworCXJlc3VsdCA9IFNlbmRQcm9j U2lnbmFsRm9yTG9nSW5mbyhwaWQsIFBST0NTSUdfTE9HX01FTU9SWV9DT05URVhUKTsKIAotCVBH X1JFVFVSTl9CT09MKHRydWUpOworCVBHX1JFVFVSTl9CT09MKHJlc3VsdCk7CiB9CmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2luaXQvZ2xvYmFscy5jCmluZGV4IDM4MWQ5ZTU0OGQuLjEyNmVkMTAzNjIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2luaXQvZ2xvYmFscy5jCkBAIC0zNiw2ICszNiw3IEBAIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJ ZGxlSW5UcmFuc2FjdGlvblNlc3Npb25UaW1lb3V0UGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUg c2lnX2F0b21pY190IElkbGVTZXNzaW9uVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxl IHNpZ19hdG9taWNfdCBQcm9jU2lnbmFsQmFycmllclBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxl IHNpZ19hdG9taWNfdCBMb2dNZW1vcnlDb250ZXh0UGVuZGluZyA9IGZhbHNlOwordm9sYXRpbGUg c2lnX2F0b21pY190IExvZ0N1cnJlbnRQbGFuUGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgdWlu dDMyIEludGVycnVwdEhvbGRvZmZDb3VudCA9IDA7CiB2b2xhdGlsZSB1aW50MzIgUXVlcnlDYW5j ZWxIb2xkb2ZmQ291bnQgPSAwOwogdm9sYXRpbGUgdWludDMyIENyaXRTZWN0aW9uQ291bnQgPSAw OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggZDA2OGQ2NTMyZS4uM2E4MWU4NjQ5MyAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC04MDM4LDYgKzgwMzgsMTIgQEAKICAgcHJvcmV0dHlw ZSA9PiAnYm9vbCcsIHByb2FyZ3R5cGVzID0+ICdpbnQ0JywKICAgcHJvc3JjID0+ICdwZ19sb2df YmFja2VuZF9tZW1vcnlfY29udGV4dHMnIH0sCiAKKyMgbG9nZ2luZyBwbGFuIG9mIHRoZSBydW5u aW5nIHF1ZXJ5IG9uIHRoZSBzcGVjaWZpZWQgYmFja2VuZAoreyBvaWQgPT4gJzQ1NDQnLCBkZXNj ciA9PiAnbG9nIHBsYW4gb2YgdGhlIHJ1bm5pbmcgcXVlcnkgb24gdGhlIHNwZWNpZmllZCBiYWNr ZW5kJywKKyAgcHJvbmFtZSA9PiAncGdfbG9nX2N1cnJlbnRfcXVlcnlfcGxhbicsCisgIHByb3Zv bGF0aWxlID0+ICd2JywgcHJvcmV0dHlwZSA9PiAnYm9vbCcsCisgIHByb2FyZ3R5cGVzID0+ICdp bnQ0JywgcHJvc3JjID0+ICdwZ19sb2dfY3VycmVudF9xdWVyeV9wbGFuJyB9LAorCiAjIG5vbi1w ZXJzaXN0ZW50IHNlcmllcyBnZW5lcmF0b3IKIHsgb2lkID0+ICcxMDY2JywgZGVzY3IgPT4gJ25v bi1wZXJzaXN0ZW50IHNlcmllcyBnZW5lcmF0b3InLAogICBwcm9uYW1lID0+ICdnZW5lcmF0ZV9z ZXJpZXMnLCBwcm9yb3dzID0+ICcxMDAwJywKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2V4cGxhaW4uaCBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAppbmRleCBlOTRk OWU0OWNmLi43YzJkY2U3Y2RmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBs YWluLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCkBAIC01OSw2ICs1OSw3 IEBAIHR5cGVkZWYgc3RydWN0IEV4cGxhaW5TdGF0ZQogCWJvb2wJCWhpZGVfd29ya2VyczsJLyog c2V0IGlmIHdlIGZpbmQgYW4gaW52aXNpYmxlIEdhdGhlciAqLwogCS8qIHN0YXRlIHJlbGF0ZWQg dG8gdGhlIGN1cnJlbnQgcGxhbiBub2RlICovCiAJRXhwbGFpbldvcmtlcnNTdGF0ZSAqd29ya2Vy c19zdGF0ZTsgLyogbmVlZGVkIGlmIHBhcmFsbGVsIHBsYW4gKi8KKwlib29sCQlydW5uaW5nOwkJ Lyogd2hldGhlciB0YXJnZXQgcXVlcnkgaXMgYWxyZWFkeSBydW5uaW5nICovCiB9IEV4cGxhaW5T dGF0ZTsKIAogLyogSG9vayBmb3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBFeHBsYWluT25l UXVlcnkoKSAqLwpAQCAtMTI0LDQgKzEyNSw2IEBAIGV4dGVybiB2b2lkIEV4cGxhaW5PcGVuR3Jv dXAoY29uc3QgY2hhciAqb2JqdHlwZSwgY29uc3QgY2hhciAqbGFiZWxuYW1lLAogZXh0ZXJuIHZv aWQgRXhwbGFpbkNsb3NlR3JvdXAoY29uc3QgY2hhciAqb2JqdHlwZSwgY29uc3QgY2hhciAqbGFi ZWxuYW1lLAogCQkJCQkJCSAgYm9vbCBsYWJlbGVkLCBFeHBsYWluU3RhdGUgKmVzKTsKIAorZXh0 ZXJuIHZvaWQgSGFuZGxlTG9nQ3VycmVudFBsYW5JbnRlcnJ1cHQodm9pZCk7CitleHRlcm4gdm9p ZCBQcm9jZXNzTG9nQ3VycmVudFBsYW5JbnRlcnJ1cHQodm9pZCk7CiAjZW5kaWYJCQkJCQkJLyog RVhQTEFJTl9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaCBiL3NyYy9p bmNsdWRlL21pc2NhZG1pbi5oCmluZGV4IDJlMmU5YTM2NGEuLjA5N2ViYWE5NmQgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5oCisrKyBiL3NyYy9pbmNsdWRlL21pc2NhZG1pbi5o CkBAIC05NCw2ICs5NCw3IEBAIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWlj X3QgSWRsZUluVHJhbnNhY3Rpb25TZXNzaW9uVGltZW91dFBlbmRpbmc7CiBleHRlcm4gUEdETExJ TVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVTZXNzaW9uVGltZW91dFBlbmRpbmc7CiBl eHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IFByb2NTaWduYWxCYXJyaWVy UGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgTG9nTWVt b3J5Q29udGV4dFBlbmRpbmc7CitleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21p Y190IExvZ0N1cnJlbnRQbGFuUGVuZGluZzsKIAogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxl IHNpZ19hdG9taWNfdCBDaGVja0NsaWVudENvbm5lY3Rpb25QZW5kaW5nOwogZXh0ZXJuIFBHRExM SU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBDbGllbnRDb25uZWN0aW9uTG9zdDsKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5oIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9wcm9jc2lnbmFsLmgKaW5kZXggZWVjMTg2YmUyZS4uYzFhNzIxOGQ2OSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9wcm9jc2lnbmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvc3Rv cmFnZS9wcm9jc2lnbmFsLmgKQEAgLTM1LDYgKzM1LDcgQEAgdHlwZWRlZiBlbnVtCiAJUFJPQ1NJ R19XQUxTTkRfSU5JVF9TVE9QUElORywJLyogYXNrIHdhbHNlbmRlcnMgdG8gcHJlcGFyZSBmb3Ig c2h1dGRvd24gICovCiAJUFJPQ1NJR19CQVJSSUVSLAkJCS8qIGdsb2JhbCBiYXJyaWVyIGludGVy cnVwdCAgKi8KIAlQUk9DU0lHX0xPR19NRU1PUllfQ09OVEVYVCwgLyogYXNrIGJhY2tlbmQgdG8g bG9nIHRoZSBtZW1vcnkgY29udGV4dHMgKi8KKwlQUk9DU0lHX0xPR19DVVJSRU5UX1BMQU4sIC8q IGFzayBiYWNrZW5kIHRvIGxvZyBwbGFuIG9mIHRoZSBjdXJyZW50IHF1ZXJ5ICovCiAKIAkvKiBS ZWNvdmVyeSBjb25mbGljdCByZWFzb25zICovCiAJUFJPQ1NJR19SRUNPVkVSWV9DT05GTElDVF9E QVRBQkFTRSwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2lnbmFsZnVuY3MuaCBi L3NyYy9pbmNsdWRlL3N0b3JhZ2Uvc2lnbmFsZnVuY3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi41ZjZiMTI0MzcyCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL2luY2x1 ZGUvc3RvcmFnZS9zaWduYWxmdW5jcy5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorICoKKyAqIHNpZ25hbGZ1bmNzLmgKKyAqCSAgRnVuY3Rpb25zIGZvciBzaWduYWxpbmcg YmFja2VuZHMKKyAqCisgKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjEsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQg KGMpIDE5OTQsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQorICoKKyAq IHNyYy9pbmNsdWRlL3N0b3JhZ2Uvc2lnbmFsZnVuY3MuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQorICovCisjaWZuZGVmIFBST0NTSUdOQUxGVU5DX0gKKyNkZWZpbmUgUFJPQ1NJR05BTEZVTkNf SAorCisvKgorICogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIHNpZ25hbGZ1bmNzLmMKKyAq LworZXh0ZXJuIGJvb2wgU2VuZFByb2NTaWduYWxGb3JMb2dJbmZvKHBpZF90IHBpZCwgUHJvY1Np Z25hbFJlYXNvbiByZWFzb24pOworCisjZW5kaWYJCQkJCQkJLyogUFJPQ1NJR05BTEZVTkNfSCAq LwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9wcXVlcnkuaCBiL3NyYy9pbmNsdWRlL3Rj b3AvcHF1ZXJ5LmgKaW5kZXggMjMxOGYwNGZmMC4uZDM3YTVlYjgzNyAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvdGNvcC9wcXVlcnkuaAorKysgYi9zcmMvaW5jbHVkZS90Y29wL3BxdWVyeS5oCkBA IC0yMSw2ICsyMSw3IEBAIHN0cnVjdCBQbGFubmVkU3RtdDsJCQkJLyogYXZvaWQgaW5jbHVkaW5n IHBsYW5ub2Rlcy5oIGhlcmUgKi8KIAogCiBleHRlcm4gUEdETExJTVBPUlQgUG9ydGFsIEFjdGl2 ZVBvcnRhbDsKK2V4dGVybiBQR0RMTElNUE9SVCBRdWVyeURlc2MgKkFjdGl2ZVF1ZXJ5RGVzYzsK IAogCiBleHRlcm4gUG9ydGFsU3RyYXRlZ3kgQ2hvb3NlUG9ydGFsU3RyYXRlZ3koTGlzdCAqc3Rt dHMpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9taXNjX2Z1bmN0aW9u cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL21pc2NfZnVuY3Rpb25zLm91dAppbmRl eCBlODQ1MDQyZDM4Li45ODAxN2Y4M2E5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL21pc2NfZnVuY3Rpb25zLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L21pc2NfZnVuY3Rpb25zLm91dApAQCAtMTM0LDE4ICsxMzQsMjYgQEAgTElORSAxOiBTRUxFQ1Qg bnVtX251bGxzKCk7CiAgICAgICAgICAgICAgICBeCiBISU5UOiAgTm8gZnVuY3Rpb24gbWF0Y2hl cyB0aGUgZ2l2ZW4gbmFtZSBhbmQgYXJndW1lbnQgdHlwZXMuIFlvdSBtaWdodCBuZWVkIHRvIGFk ZCBleHBsaWNpdCB0eXBlIGNhc3RzLgogLS0KLS0tIHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250 ZXh0cygpCistLSBUZXN0IGxvZ2dpbmcgZnVuY3Rpb25zCiAtLQotLS0gTWVtb3J5IGNvbnRleHRz IGFyZSBsb2dnZWQgYW5kIHRoZXkgYXJlIG5vdCByZXR1cm5lZCB0byB0aGUgZnVuY3Rpb24uCi0t LSBGdXJ0aGVybW9yZSwgdGhlaXIgY29udGVudHMgY2FuIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSB0 aW1pbmcuIEhvd2V2ZXIsCistLSBUaGVzZSBmdW5jdGlvbnMgcmV0dXJuIHRydWUgaWYgdGhlIHNw ZWNpZmllZCBiYWNrZW5kIGlzIHN1Y2Nlc3NmdWxseQorLS0gc2lnbmFsZWQsIG90aGVyd2lzZSBm YWxzZS4gVXBvbiByZWNlaXZpbmcgdGhlIHNpZ25hbCwgdGhlIGJhY2tlbmQKKy0tIHdpbGwgbG9n IHRoZSBpbmZvcm1hdGlvbiB0byB0aGUgc2VydmVyIGxvZy4KKy0tIEFsdGhvdWdoIHRoZWlyIGNv bnRlbnRzIGNhbiB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgdGltaW5nLAogLS0gd2UgY2FuIGF0IGxl YXN0IHZlcmlmeSB0aGF0IHRoZSBjb2RlIGRvZXNuJ3QgZmFpbC4KIC0tCi1TRUxFQ1QgKiBGUk9N IHBnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhwZ19iYWNrZW5kX3BpZCgpKTsKK1NFTEVD VCBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMocGdfYmFja2VuZF9waWQoKSk7CiAgcGdf bG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KICB0CiAoMSByb3cpCiAKK1NFTEVDVCBwZ19sb2dfY3VycmVudF9xdWVyeV9wbGFuKHBn X2JhY2tlbmRfcGlkKCkpOworIHBnX2xvZ19jdXJyZW50X3F1ZXJ5X3BsYW4gCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKIC0tCiAtLSBUZXN0IHNvbWUgYnVpbHQt aW4gU1JGcwogLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rp b25zLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL21pc2NfZnVuY3Rpb25zLnNxbAppbmRleCBh Mzk4MzQ5YWZjLi45NzlhNDE4ZThlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9t aXNjX2Z1bmN0aW9ucy5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvbWlzY19mdW5jdGlv bnMuc3FsCkBAIC0yOSwxNSArMjksMTcgQEAgU0VMRUNUIG51bV9udWxscyhWQVJJQURJQyAne30n OjppbnRbXSk7CiAtLSBzaG91bGQgZmFpbCwgb25lIG9yIG1vcmUgYXJndW1lbnRzIGlzIHJlcXVp cmVkCiBTRUxFQ1QgbnVtX25vbm51bGxzKCk7CiBTRUxFQ1QgbnVtX251bGxzKCk7Ci0KIC0tCi0t LSBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKQorLS0gVGVzdCBsb2dnaW5nIGZ1bmN0 aW9ucwogLS0KLS0tIE1lbW9yeSBjb250ZXh0cyBhcmUgbG9nZ2VkIGFuZCB0aGV5IGFyZSBub3Qg cmV0dXJuZWQgdG8gdGhlIGZ1bmN0aW9uLgotLS0gRnVydGhlcm1vcmUsIHRoZWlyIGNvbnRlbnRz IGNhbiB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgdGltaW5nLiBIb3dldmVyLAorLS0gVGhlc2UgZnVu Y3Rpb25zIHJldHVybiB0cnVlIGlmIHRoZSBzcGVjaWZpZWQgYmFja2VuZCBpcyBzdWNjZXNzZnVs bHkKKy0tIHNpZ25hbGVkLCBvdGhlcndpc2UgZmFsc2UuIFVwb24gcmVjZWl2aW5nIHRoZSBzaWdu YWwsIHRoZSBiYWNrZW5kCistLSB3aWxsIGxvZyB0aGUgaW5mb3JtYXRpb24gdG8gdGhlIHNlcnZl ciBsb2cuCistLSBBbHRob3VnaCB0aGVpciBjb250ZW50cyBjYW4gdmFyeSBkZXBlbmRpbmcgb24g dGhlIHRpbWluZywKIC0tIHdlIGNhbiBhdCBsZWFzdCB2ZXJpZnkgdGhhdCB0aGUgY29kZSBkb2Vz bid0IGZhaWwuCiAtLQotU0VMRUNUICogRlJPTSBwZ19sb2dfYmFja2VuZF9tZW1vcnlfY29udGV4 dHMocGdfYmFja2VuZF9waWQoKSk7CitTRUxFQ1QgcGdfbG9nX2JhY2tlbmRfbWVtb3J5X2NvbnRl eHRzKHBnX2JhY2tlbmRfcGlkKCkpOworU0VMRUNUIHBnX2xvZ19jdXJyZW50X3F1ZXJ5X3BsYW4o cGdfYmFja2VuZF9waWQoKSk7CiAKIC0tCiAtLSBUZXN0IHNvbWUgYnVpbHQtaW4gU1JGcwoKYmFz ZS1jb21taXQ6IGEzZDJiMWJiZTkwNGIwY2E4ZDlmZGRlMjBmMjUyOTVmZjNlMjFmNzkKLS0gCjIu MjcuMAoK --=_f6a5da7e0d4b26c2356ac0745d180e64--