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 1lgmyM-00011J-Cx for pgsql-hackers@arkaria.postgresql.org; Wed, 12 May 2021 11:24:14 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1lgmyK-00071p-52 for pgsql-hackers@arkaria.postgresql.org; Wed, 12 May 2021 11:24:12 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lgmyJ-00071e-Jj for pgsql-hackers@lists.postgresql.org; Wed, 12 May 2021 11:24:11 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lgmyF-0004Y9-GG for pgsql-hackers@postgresql.org; Wed, 12 May 2021 11:24:09 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id 7599D6056E for ; Wed, 12 May 2021 20:24:04 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.2 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_8266019704565f282971b4d9c7445c35" Content-Transfer-Encoding: 7bit Date: Wed, 12 May 2021 20:24:04 +0900 From: torikoshia To: Pgsql Hackers Subject: RFC: Logging plan of the running query 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 --=_8266019704565f282971b4d9c7445c35 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi, During the discussion about memory contexts dumping[1], there was a comment that exposing not only memory contexts but also query plans and untruncated query string would be useful. I also feel that it would be nice when thinking about situations such as troubleshooting a long-running query on production environments where we cannot use debuggers. At that point of the above comment, I was considering exposing such information on the shared memory. However, since memory contexts are now exposed on the log by pg_log_backend_memory_contexts(PID), I'm thinking about defining a function that logs the plan of a running query and untruncated query string on the specified PID in the same way as below. postgres=# SELECT * FROM pg_log_current_plan(2155192); pg_log_current_plan --------------------- t (1 row) $ tail -f data/log/postgresql-2021-05-12.log 2021-05-12 17:37:19.481 JST [2155192] LOG: logging the plan of running query on PID 2155192 Query Text: SELECT a.filler FROM pgbench_accounts a JOIN pgbench_accounts b ON a.aid = b.aid; Merge Join (cost=0.85..83357.85 rows=1000000 width=85) Merge Cond: (a.aid = b.aid) -> Index Scan using pgbench_accounts_pkey on pgbench_accounts a (cost=0.42..42377.43 rows=1000000 width=89) -> Index Only Scan using pgbench_accounts_pkey on pgbench_accounts b (cost=0.42..25980.42 rows=1000000 width=4) Attached a PoC patch. Any thoughts? [1] https://www.postgresql.org/message-id/CA%2BTgmobkpFV0UB67kzXuD36--OFHwz1bs%3DL_6PZbD4nxKqUQMw%40mail.gmail.com Regards, -- Atsushi Torikoshi NTT DATA CORPORATION --=_8266019704565f282971b4d9c7445c35 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v1-0001-log-running-query-plan.patch Content-Disposition: attachment; filename=v1-0001-log-running-query-plan.patch; size=10024 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy5z Z21sCmluZGV4IDRkMWYxNzk0Y2EuLjU5NTliYmZkZGMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtMjQ5MzksNiArMjQ5 MzksMjYgQEAgU0VMRUNUIGNvbGxhdGlvbiBmb3IgKCdmb28nIENPTExBVEUgImRlX0RFIik7CiAg ICAgICAgPC9wYXJhPjwvZW50cnk+CiAgICAgICA8L3Jvdz4KIAorICAgICAgPHJvdz4KKyAgICAg ICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19zaWduYXR1 cmUiPgorICAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICAgPHByaW1hcnk+cGdfbG9nX2N1cnJl bnRfcGxhbjwvcHJpbWFyeT4KKyAgICAgICAgPC9pbmRleHRlcm0+CisgICAgICAgIDxmdW5jdGlv bj5wZ19sb2dfY3VycmVudF9wbGFuPC9mdW5jdGlvbj4gKCA8cGFyYW1ldGVyPnBpZDwvcGFyYW1l dGVyPiA8dHlwZT5pbnRlZ2VyPC90eXBlPiApCisgICAgICAgIDxyZXR1cm52YWx1ZT5ib29sZWFu PC9yZXR1cm52YWx1ZT4KKyAgICAgICA8L3BhcmE+CisgICAgICAgPHBhcmE+CisgICAgICAgIFJl cXVlc3RzIHRvIGxvZyB0aGUgdW50cnVuY2F0ZWQgcXVlcnkgc3RyaW5nIGFuZCBpdHMgcGxhbiBv ZiB0aGUKKyAgICAgICAgYmFja2VuZCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvY2VzcyBJRC4KKyAg ICAgICAgVGhleSB3aWxsIGJlIGxvZ2dlZCBhdCA8bGl0ZXJhbD5MT0c8L2xpdGVyYWw+IG1lc3Nh Z2UgbGV2ZWwgYW5kCisgICAgICAgIHdpbGwgYXBwZWFyIGluIHRoZSBzZXJ2ZXIgbG9nIGJhc2Vk IG9uIHRoZSBsb2cKKyAgICAgICAgY29uZmlndXJhdGlvbiBzZXQgKFNlZSA8eHJlZiBsaW5rZW5k PSJydW50aW1lLWNvbmZpZy1sb2dnaW5nIi8+CisgICAgICAgIGZvciBtb3JlIGluZm9ybWF0aW9u KSwgYnV0IHdpbGwgbm90IGJlIHNlbnQgdG8gdGhlIGNsaWVudAorICAgICAgICByZWdhcmRsZXNz IG9mIDx4cmVmIGxpbmtlbmQ9Imd1Yy1jbGllbnQtbWluLW1lc3NhZ2VzIi8+LgorICAgICAgICBP bmx5IHN1cGVydXNlcnMgY2FuIHJlcXVlc3QgdG8gbG9nIHRoZSBwbGFuIG9mIHJ1bm5pbmcgcXVl cnkuCisgICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgICA8L3Jvdz4KKwogICAgICAgPHJvdz4K ICAgICAgICA8ZW50cnkgcm9sZT0iZnVuY190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iZnVuY19z aWduYXR1cmUiPgogICAgICAgICA8aW5kZXh0ZXJtPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCmluZGV4 IDk4NjdkYTgzYmMuLmVkYmUxYzY4MjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2V4cGxhaW4uYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKQEAgLTIxLDYg KzIxLDcgQEAKICNpbmNsdWRlICJleGVjdXRvci9ub2RlSGFzaC5oIgogI2luY2x1ZGUgImZvcmVp Z24vZmR3YXBpLmgiCiAjaW5jbHVkZSAiaml0L2ppdC5oIgorI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgogI2luY2x1ZGUgIm5vZGVzL2V4dGVuc2libGUuaCIKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVu Y3MuaCIKICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKQEAgLTI4LDYgKzI5LDggQEAKICNp bmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlSGFu ZGxlci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAic3RvcmFnZS9w cm9jYXJyYXkuaCIKKyNpbmNsdWRlICJ0Y29wL3BxdWVyeS5oIgogI2luY2x1ZGUgInRjb3AvdGNv cHByb3QuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUgInV0aWxzL2d1 Y190YWJsZXMuaCIKQEAgLTQ5MjgsMyArNDkzMSwxMTYgQEAgZXNjYXBlX3lhbWwoU3RyaW5nSW5m byBidWYsIGNvbnN0IGNoYXIgKnN0cikKIHsKIAllc2NhcGVfanNvbihidWYsIHN0cik7CiB9CisK Ky8qCisgKiBIYW5kbGVMb2dDdXJyZW50UGxhbkludGVycnVwdAorICoJCUhhbmRsZSByZWNlaXB0 IG9mIGFuIGludGVycnVwdCBpbmRpY2F0aW5nIGxvZ2dpbmcgdGhlCisgKgkJcGxhbiBvZiBhIHJ1 bm5pbmcgcXVlcnkuCisgKgorICogQWxsIHRoZSBhY3R1YWwgd29yayBpcyBkZWZlcnJlZCB0byBQ cm9jZXNzTG9nRXhwbGFpbkludGVycnVwdCgpLAorICogYmVjYXVzZSB3ZSBjYW5ub3Qgc2FmZWx5 IGVtaXQgYSBsb2cgbWVzc2FnZSBpbnNpZGUgdGhlIHNpZ25hbCBoYW5kbGVyLgorICovCit2b2lk CitIYW5kbGVMb2dDdXJyZW50UGxhbkludGVycnVwdCh2b2lkKQoreworCUludGVycnVwdFBlbmRp bmcgPSB0cnVlOworCUxvZ0N1cnJlbnRQbGFuUGVuZGluZyA9IHRydWU7CisJLyogbGF0Y2ggd2ls bCBiZSBzZXQgYnkgcHJvY3NpZ25hbF9zaWd1c3IxX2hhbmRsZXIgKi8KK30KKworLyoKKyAqIFBy b2Nlc3NMb2dDdXJyZW50UGxhbkludGVycnVwdAorICogCQlQZXJmb3JtIGxvZ2dpbmcgdGhlIHBs YW4gb2YgcnVubmluZyBxdWVyeSBvbiB0aGlzCisgKiAJCWJhY2tlbmQgcHJvY2Vzcy4KKyAqCisg KiBBbnkgYmFja2VuZCB0aGF0IHBhcnRpY2lwYXRlcyBpbiBQcm9jU2lnbmFsIHNpZ25hbGluZyBt dXN0IGFycmFuZ2UKKyAqIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiBpZiB3ZSBzZWUgTG9nQ3VycmVu dFBsYW5QZW5kaW5nIHNldC4KKyAqIEl0IGlzIGNhbGxlZCBmcm9tIENIRUNLX0ZPUl9JTlRFUlJV UFRTKCksIHdoaWNoIGlzIGVub3VnaCBiZWNhdXNlCisgKiB0aGUgdGFyZ2V0IHByb2Nlc3MgZm9y IGxvZ2dpbmcgdGhlIHBsYW4gb2YgcnVubmluZyBxdWVyeS4KKyAqLwordm9pZAorUHJvY2Vzc0xv Z0N1cnJlbnRQbGFuSW50ZXJydXB0KHZvaWQpCit7CisJRXhwbGFpblN0YXRlICplcyA9IE5ld0V4 cGxhaW5TdGF0ZSgpOworCisJTG9nQ3VycmVudFBsYW5QZW5kaW5nID0gZmFsc2U7CisKKwllcy0+ Zm9ybWF0ID0gRVhQTEFJTl9GT1JNQVRfVEVYVDsKKwllcy0+c3VtbWFyeSA9IHRydWU7CisKKwlp ZiAoQWN0aXZlUG9ydGFsICYmIEFjdGl2ZVBvcnRhbC0+cXVlcnlEZXNjICE9IE5VTEwpCisJewor CQlFeHBsYWluUXVlcnlUZXh0KGVzLCBBY3RpdmVQb3J0YWwtPnF1ZXJ5RGVzYyk7CisJCUV4cGxh aW5QcmludFBsYW4oZXMsIEFjdGl2ZVBvcnRhbC0+cXVlcnlEZXNjKTsKKworCQkvKiBSZW1vdmUg bGFzdCBsaW5lIGJyZWFrICovCisJCWlmIChlcy0+c3RyLT5sZW4gPiAwICYmIGVzLT5zdHItPmRh dGFbZXMtPnN0ci0+bGVuIC0gMV0gPT0gJ1xuJykKKwkJCWVzLT5zdHItPmRhdGFbLS1lcy0+c3Ry LT5sZW5dID0gJ1wwJzsKKworCQllcmVwb3J0KExPRywKKwkJCQkoZXJybXNnKCJsb2dnaW5nIHRo ZSBwbGFuIG9mIHJ1bm5pbmcgcXVlcnkgb24gUElEICVkXG4lcyIsCisJCQkJCU15UHJvY1BpZCwK KwkJCQkJZXMtPnN0ci0+ZGF0YSksCisJCQkJIGVycmhpZGVzdG10KHRydWUpKSk7CisJfQorCWVs c2UKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycm1zZygiUElEICVkIGlzIG5vdCBydW5uaW5nIGEg cXVlcnkgbm93IiwKKwkJCQkJTXlQcm9jUGlkKSkpOworfQorCisvKgorICogcGdfbG9nX2N1cnJl bnRfcGxhbgorICoJCVNpZ25hbCBhIGJhY2tlbmQgcHJvY2VzcyB0byBsb2cgdGhlIHBsYW4gb2Yg cnVubmluZworICoJCXF1ZXJ5LgorICoKKyAqIE9ubHkgc3VwZXJ1c2VycyBhcmUgYWxsb3dlZCB0 byBzaWduYWwgdG8gbG9nIHRoZSBwbGFuIGJlY2F1c2UKKyAqIGFsbG93aW5nIGFueSB1c2VycyB0 byBpc3N1ZSB0aGlzIHJlcXVlc3QgYXQgYW4gdW5ib3VuZGVkIHJhdGUKKyAqIHdvdWxkIGNhdXNl IGxvdHMgb2YgbG9nIG1lc3NhZ2VzIGFuZCB3aGljaCBjYW4gbGVhZCB0byBkZW5pYWwKKyAqIG9m IHNlcnZpY2UuCisgKgorICogT24gcmVjZWlwdCBvZiB0aGlzIHNpZ25hbCwgYSBiYWNrZW5kIHNl dHMgdGhlIGZsYWcgaW4gdGhlIHNpZ25hbAorICogaGFuZGxlciwgd2hpY2ggY2F1c2VzIHRoZSBu ZXh0IENIRUNLX0ZPUl9JTlRFUlJVUFRTKCkgdG8gbG9nIHRoZQorICogcGxhbi4KKyAqLworRGF0 dW0KK3BnX2xvZ19jdXJyZW50X3BsYW4oUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlpbnQJCQlwaWQg PSBQR19HRVRBUkdfSU5UMzIoMCk7CisJUEdQUk9DCSAgICpwcm9jID0gQmFja2VuZFBpZEdldFBy b2MocGlkKTsKKworCS8qCisJICogQmFja2VuZFBpZEdldFByb2MgcmV0dXJucyBOVUxMIGlmIHRo ZSBwaWQgaXNuJ3QgdmFsaWQ7IGJ1dCBieSB0aGUgdGltZQorCSAqIHdlIHJlYWNoIGtpbGwoKSwg YSBwcm9jZXNzIGZvciB3aGljaCB3ZSBnZXQgYSB2YWxpZCBwcm9jIGhlcmUgbWlnaHQKKwkgKiBo YXZlIHRlcm1pbmF0ZWQgb24gaXRzIG93bi4gIFRoZXJlJ3Mgbm8gd2F5IHRvIGFjcXVpcmUgYSBs b2NrIG9uIGFuCisJICogYXJiaXRyYXJ5IHByb2Nlc3MgdG8gcHJldmVudCB0aGF0LiBCdXQgc2lu Y2UgdGhpcyBtZWNoYW5pc20gaXMgdXN1YWxseQorCSAqIHVzZWQgdG8gbG9vayBpbnRvIHRoZSBw bGFuIG9mIGxvbmcgcnVubmluZyBxdWVyeSwgdGhhdCBpdCBtaWdodCBlbmQgb24KKwkgKiBpdHMg b3duIGZpcnN0IGFuZCBpdHMgcGxhbiBpcyBub3QgbG9nZ2VkIGlzIG5vdCBhIHByb2JsZW0uCisJ ICovCisJaWYgKHByb2MgPT0gTlVMTCkKKwl7CisJCS8qCisJCSAqIFRoaXMgaXMganVzdCBhIHdh cm5pbmcgc28gYSBsb29wLXRocm91Z2gtcmVzdWx0c2V0IHdpbGwgbm90IGFib3J0CisJCSAqIGlm IG9uZSBiYWNrZW5kIHRlcm1pbmF0ZWQgb24gaXRzIG93biBkdXJpbmcgdGhlIHJ1bi4KKwkJICov CisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJybXNnKCJQSUQgJWQgaXMgbm90IGEgUG9zdGdy ZVNRTCBzZXJ2ZXIgcHJvY2VzcyIsIHBpZCkpKTsKKwkJUEdfUkVUVVJOX0JPT0woZmFsc2UpOwor CX0KKworCS8qIE9ubHkgYWxsb3cgc3VwZXJ1c2VycyB0byBsb2cgdGhlIHBsYW4gb2YgcnVubmlu ZyBxdWVyeS4gKi8KKwlpZiAoIXN1cGVydXNlcigpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfSU5TVUZGSUNJRU5UX1BSSVZJTEVHRSksCisJCQkJIGVycm1zZygibXVz dCBiZSBhIHN1cGVydXNlciB0byBsb2cgdGhlIHBsYW4gb2YgcnVubmluZyBxdWVyeSIpKSk7CisK KwlpZiAoU2VuZFByb2NTaWduYWwocGlkLCBQUk9DU0lHX0xPR19DVVJSRU5UX1BMQU4sIHByb2Mt PmJhY2tlbmRJZCkgPCAwKQorCXsKKwkJLyogQWdhaW4sIGp1c3QgYSB3YXJuaW5nIHRvIGFsbG93 IGxvb3BzICovCisJCWVyZXBvcnQoV0FSTklORywKKwkJCQkoZXJybXNnKCJjb3VsZCBub3Qgc2Vu ZCBzaWduYWwgdG8gcHJvY2VzcyAlZDogJW0iLCBwaWQpKSk7CisJCVBHX1JFVFVSTl9CT09MKGZh bHNlKTsKKwl9CisKKwlQR19SRVRVUk5fQk9PTCh0cnVlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL3N0b3JhZ2UvaXBjL3Byb2NzaWduYWwuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvaXBj L3Byb2NzaWduYWwuYwppbmRleCBlYWM2ODk1MTQxLi4zYWFmNGI0ODE4IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2lwYy9wcm9jc2lnbmFsLmMKKysrIGIvc3JjL2JhY2tlbmQvc3Rv cmFnZS9pcGMvcHJvY3NpZ25hbC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAiYWNjZXNz L3BhcmFsbGVsLmgiCiAjaW5jbHVkZSAicG9ydC9wZ19iaXR1dGlscy5oIgogI2luY2x1ZGUgImNv bW1hbmRzL2FzeW5jLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZXhwbGFpbi5oIgogI2luY2x1ZGUg Im1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9u L3dhbHNlbmRlci5oIgpAQCAtNjYxLDYgKzY2Miw5IEBAIHByb2NzaWduYWxfc2lndXNyMV9oYW5k bGVyKFNJR05BTF9BUkdTKQogCWlmIChDaGVja1Byb2NTaWduYWwoUFJPQ1NJR19MT0dfTUVNT1JZ X0NPTlRFWFQpKQogCQlIYW5kbGVMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CiAKKwlpZiAo Q2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfTE9HX0NVUlJFTlRfUExBTikpCisJCUhhbmRsZUxvZ0N1 cnJlbnRQbGFuSW50ZXJydXB0KCk7CisKIAlpZiAoQ2hlY2tQcm9jU2lnbmFsKFBST0NTSUdfUkVD T1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UpKQogCQlSZWNvdmVyeUNvbmZsaWN0SW50ZXJydXB0KFBS T0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC90Y29wL3Bvc3RncmVzLmMgYi9zcmMvYmFja2VuZC90Y29wL3Bvc3RncmVzLmMKaW5kZXgg MmQ2ZDE0NWVjYy4uZjQ1NmYwYjdkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC9wb3N0 Z3Jlcy5jCisrKyBiL3NyYy9iYWNrZW5kL3Rjb3AvcG9zdGdyZXMuYwpAQCAtNDEsNiArNDEsNyBA QAogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ190eXBlLmgi CiAjaW5jbHVkZSAiY29tbWFuZHMvYXN5bmMuaCIKKyNpbmNsdWRlICJjb21tYW5kcy9leHBsYWlu LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL3Nw aS5oIgogI2luY2x1ZGUgImppdC9qaXQuaCIKQEAgLTMzNTYsNiArMzM1Nyw5IEBAIFByb2Nlc3NJ bnRlcnJ1cHRzKHZvaWQpCiAKIAlpZiAoTG9nTWVtb3J5Q29udGV4dFBlbmRpbmcpCiAJCVByb2Nl c3NMb2dNZW1vcnlDb250ZXh0SW50ZXJydXB0KCk7CisKKwlpZiAoTG9nQ3VycmVudFBsYW5QZW5k aW5nKQorCQlQcm9jZXNzTG9nQ3VycmVudFBsYW5JbnRlcnJ1cHQoKTsKIH0KIAogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9pbml0L2dsb2JhbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2luaXQvZ2xvYmFscy5jCmluZGV4IDM4MWQ5ZTU0OGQuLjEyNmVkMTAzNjIgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvZ2xvYmFscy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxz L2luaXQvZ2xvYmFscy5jCkBAIC0zNiw2ICszNiw3IEBAIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBJ ZGxlSW5UcmFuc2FjdGlvblNlc3Npb25UaW1lb3V0UGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUg c2lnX2F0b21pY190IElkbGVTZXNzaW9uVGltZW91dFBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxl IHNpZ19hdG9taWNfdCBQcm9jU2lnbmFsQmFycmllclBlbmRpbmcgPSBmYWxzZTsKIHZvbGF0aWxl IHNpZ19hdG9taWNfdCBMb2dNZW1vcnlDb250ZXh0UGVuZGluZyA9IGZhbHNlOwordm9sYXRpbGUg c2lnX2F0b21pY190IExvZ0N1cnJlbnRQbGFuUGVuZGluZyA9IGZhbHNlOwogdm9sYXRpbGUgdWlu dDMyIEludGVycnVwdEhvbGRvZmZDb3VudCA9IDA7CiB2b2xhdGlsZSB1aW50MzIgUXVlcnlDYW5j ZWxIb2xkb2ZmQ291bnQgPSAwOwogdm9sYXRpbGUgdWludDMyIENyaXRTZWN0aW9uQ291bnQgPSAw OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggMjZjM2ZjMGY2Yi4uNDYxYzFlZmU5MSAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC03OTc1LDYgKzc5NzUsMTIgQEAKICAgcHJvdm9sYXRp bGUgPT4gJ3YnLCBwcm9yZXR0eXBlID0+ICdib29sJywKICAgcHJvYXJndHlwZXMgPT4gJ2ludDQn LCBwcm9zcmMgPT4gJ3BnX2xvZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0cycgfSwKIAorIyBsb2dn aW5nIHRoZSBwbGFuIG9mIHJ1bm5pbmcgcXVlcnkgb24gdGhlIHNwZWNpZmllZCBiYWNrZW5kCit7 IG9pZCA9PiAnNDU0NCcsIGRlc2NyID0+ICdsb2cgdGhlIHBsYW4gb2YgcnVubmluZyBxdWVyeSBv biB0aGUgc3BlY2lmaWVkIGJhY2tlbmQnLAorICBwcm9uYW1lID0+ICdwZ19sb2dfY3VycmVudF9w bGFuJywKKyAgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9yZXR0eXBlID0+ICdib29sJywKKyAgcHJv YXJndHlwZXMgPT4gJ2ludDQnLCBwcm9zcmMgPT4gJ3BnX2xvZ19jdXJyZW50X3BsYW4nIH0sCisK ICMgbm9uLXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcgogeyBvaWQgPT4gJzEwNjYnLCBkZXNj ciA9PiAnbm9uLXBlcnNpc3RlbnQgc2VyaWVzIGdlbmVyYXRvcicsCiAgIHByb25hbWUgPT4gJ2dl bmVyYXRlX3NlcmllcycsIHByb3Jvd3MgPT4gJzEwMDAnLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvY29tbWFuZHMvZXhwbGFpbi5oIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oCmlu ZGV4IGU5NGQ5ZTQ5Y2YuLmZhODFiZWI1NTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1h bmRzL2V4cGxhaW4uaAorKysgYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKQEAgLTEy NCw0ICsxMjQsNiBAQCBleHRlcm4gdm9pZCBFeHBsYWluT3Blbkdyb3VwKGNvbnN0IGNoYXIgKm9i anR5cGUsIGNvbnN0IGNoYXIgKmxhYmVsbmFtZSwKIGV4dGVybiB2b2lkIEV4cGxhaW5DbG9zZUdy b3VwKGNvbnN0IGNoYXIgKm9ianR5cGUsIGNvbnN0IGNoYXIgKmxhYmVsbmFtZSwKIAkJCQkJCQkg IGJvb2wgbGFiZWxlZCwgRXhwbGFpblN0YXRlICplcyk7CiAKK2V4dGVybiB2b2lkIEhhbmRsZUxv Z0N1cnJlbnRQbGFuSW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgUHJvY2Vzc0xvZ0N1cnJl bnRQbGFuSW50ZXJydXB0KHZvaWQpOwogI2VuZGlmCQkJCQkJCS8qIEVYUExBSU5fSCAqLwpkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvbWlzY2FkbWluLmggYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4u aAppbmRleCA5NTIwMmQzN2FmLi44YzAzYTUxNWZkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9t aXNjYWRtaW4uaAorKysgYi9zcmMvaW5jbHVkZS9taXNjYWRtaW4uaApAQCAtODUsNiArODUsNyBA QCBleHRlcm4gUEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IElkbGVJblRyYW5zYWN0 aW9uU2Vzc2lvblRpbWVvdXRQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNp Z19hdG9taWNfdCBJZGxlU2Vzc2lvblRpbWVvdXRQZW5kaW5nOwogZXh0ZXJuIFBHRExMSU1QT1JU IHZvbGF0aWxlIHNpZ19hdG9taWNfdCBQcm9jU2lnbmFsQmFycmllclBlbmRpbmc7CiBleHRlcm4g UEdETExJTVBPUlQgdm9sYXRpbGUgc2lnX2F0b21pY190IExvZ01lbW9yeUNvbnRleHRQZW5kaW5n OworZXh0ZXJuIFBHRExMSU1QT1JUIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBMb2dDdXJyZW50UGxh blBlbmRpbmc7CiAKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBzaWdfYXRvbWljX3QgQ2hl Y2tDbGllbnRDb25uZWN0aW9uUGVuZGluZzsKIGV4dGVybiBQR0RMTElNUE9SVCB2b2xhdGlsZSBz aWdfYXRvbWljX3QgQ2xpZW50Q29ubmVjdGlvbkxvc3Q7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL3Byb2NzaWduYWwuaCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5o CmluZGV4IGVlYzE4NmJlMmUuLmE4MGU3OTk5ZTggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0 b3JhZ2UvcHJvY3NpZ25hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvcHJvY3NpZ25hbC5o CkBAIC0zNSw2ICszNSw3IEBAIHR5cGVkZWYgZW51bQogCVBST0NTSUdfV0FMU05EX0lOSVRfU1RP UFBJTkcsCS8qIGFzayB3YWxzZW5kZXJzIHRvIHByZXBhcmUgZm9yIHNodXRkb3duICAqLwogCVBS T0NTSUdfQkFSUklFUiwJCQkvKiBnbG9iYWwgYmFycmllciBpbnRlcnJ1cHQgICovCiAJUFJPQ1NJ R19MT0dfTUVNT1JZX0NPTlRFWFQsIC8qIGFzayBiYWNrZW5kIHRvIGxvZyB0aGUgbWVtb3J5IGNv bnRleHRzICovCisJUFJPQ1NJR19MT0dfQ1VSUkVOVF9QTEFOLCAvKiBhc2sgYmFja2VuZCB0byBs b2cgdGhlIHBsYW4gb2YgY3VycmVudCBxdWVyeSAqLwogCiAJLyogUmVjb3ZlcnkgY29uZmxpY3Qg cmVhc29ucyAqLwogCVBST0NTSUdfUkVDT1ZFUllfQ09ORkxJQ1RfREFUQUJBU0UsCg== --=_8266019704565f282971b4d9c7445c35--