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 1pPNbv-0003md-Mw for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Feb 2023 13:02:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pPNbu-0007EV-Is for pgsql-hackers@arkaria.postgresql.org; Tue, 07 Feb 2023 13:02:10 +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 1pPNbu-0007E5-6f for pgsql-hackers@lists.postgresql.org; Tue, 07 Feb 2023 13:02:10 +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 1pPNbq-00014P-D4 for pgsql-hackers@postgresql.org; Tue, 07 Feb 2023 13:02:09 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTPA id D0CF6608F6; Tue, 7 Feb 2023 22:02:00 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.7 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_2d3e03b191d76dc2885faf4363c849fe" Content-Transfer-Encoding: 8bit Date: Tue, 07 Feb 2023 22:02:00 +0900 From: torikoshia To: Pgsql Hackers , michael@paquier.xyz Subject: Allow auto_explain to log plan duration and buffer usage User-Agent: Roundcube Webmail/1.4.11 Message-ID: <5f9fa94fa0979f567dc4071dc44e442f@oss.nttdata.com> X-Sender: torikoshia@oss.nttdata.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_2d3e03b191d76dc2885faf4363c849fe Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed Hi, -- commit 9d2d9728b8d546434aade4f9667a59666588edd6 > Author: Michael Paquier > Date: Thu Jan 26 12:23:16 2023 +0900 > > Make auto_explain print the query identifier in verbose mode > ..(snip).. > While looking at the area, I have noticed that more consolidation > between EXPLAIN and auto_explain would be in order for the logging of > the plan duration and the buffer usage. This refactoring is left as a > future change. I'm working on this now. Attached a PoC patch which enables auto_explain to log plan duration and buffer usage on planning phase. Last 3 lines are added by this patch: ``` =# set auto_explain.log_min_duration = 0; =# set auto_explain.log_verbose = on; =# set auto_explain.log_analyze = on; =# select * from pg_class; LOG: 00000: duration: 6.774 ms plan: Query Text: select * from pg_class; Seq Scan on pg_catalog.pg_class (cost=0.00..18.12 rows=412 width=273) (actual time=0.009..0.231 rows=412 loops=1) Output: oid, relname, relnamespace, reltype, reloftype, relowner, relam, relfilenode, reltablespace, relpages, reltuples, relallvisible, reltoastrelid, relhasindex, relisshared, relpersistence, relkind, relnatts, relchecks, relhasrules, relhastriggers, relhassubclass, relrowsecurity, relforcerowsecurity, relispopulated, relreplident, relispartition, relrewrite, relfrozenxid, relminmxid, relacl, reloptions, relpartbound Buffers: shared hit=14 Query Identifier: 8034096446570639838 Planning Buffers: shared hit=120 Planning Time: 3.908 ms ``` It adds a planner hook to track the plan duration and buffer usage for planning. I'm considering the following points and any comments are welcome: - Plan duration and buffer usage are saved on PlannedStmt. As far as I referred totaltime in QueryDesc, adding elements for extensions is not always prohibited, but I'm wondering it's ok to add them in this case. - Just as pg_stat_statements made it possible to add planner information in v13, it may be useful for auto_explain to log planner phase information, especially plan duration. However, I am not sure to what extent information about the buffers used in the plan phase would be useful. - Plan duration and buffer usage may differ from the output of EXPLAIN command since EXPLAIN command includes pg_plan_query(), but planner hook doesn’t. pg_plan_query() do things for log_planner_stats, debugging and tracing. - (Future works) Log output concerning buffers should be toggled on/off by auto_explain.log_buffers. Log output concerning planning should be toggled on/off by new GUC something like auto_explain.track_planning. What do you think? -- Regards, -- Atsushi Torikoshi NTT DATA CORPORATION --=_2d3e03b191d76dc2885faf4363c849fe Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v1-0001-PoC-Enable-auto_explain-to-track-planning-time-an.patch Content-Disposition: attachment; filename=v1-0001-PoC-Enable-auto_explain-to-track-planning-time-an.patch; size=10161 RnJvbSBhMDk5N2YxMzljZDk2NGNhMDM2OGZlMzY1MGU1YWQxY2UxZjVlMTZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFR1ZSwgNyBGZWIgMjAyMyAxOTo0OTo0NSArMDkwMApTdWJqZWN0OiBb UEFUQ0ggdjFdIFtQb0NdIEVuYWJsZSBhdXRvX2V4cGxhaW4gdG8gdHJhY2sgcGxhbm5pbmcgdGlt ZSBhbmQKIGJ1ZmZlciB1c2FnZQoKLS0tCiBjb250cmliL2F1dG9fZXhwbGFpbi9hdXRvX2V4cGxh aW4uYyAgIHwgODIgKysrKysrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmFja2VuZC9jb21t YW5kcy9leHBsYWluLmMgICAgICAgIHwgMzYgKysrKysrLS0tLS0tCiBzcmMvYmFja2VuZC9ub2Rl cy9nZW5fbm9kZV9zdXBwb3J0LnBsIHwgIDQgKysKIHNyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYyAgfCAgMiArCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmggICAgICAg IHwgIDQgKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oICAgICAgICAgfCAgNiArKwog NiBmaWxlcyBjaGFuZ2VkLCAxMTQgaW5zZXJ0aW9ucygrKSwgMjAgZGVsZXRpb25zKC0pCgpkaWZm IC0tZ2l0IGEvY29udHJpYi9hdXRvX2V4cGxhaW4vYXV0b19leHBsYWluLmMgYi9jb250cmliL2F1 dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYwppbmRleCBjM2FjMjdhZTk5Li5lYTVjMjk0OWQwIDEw MDY0NAotLS0gYS9jb250cmliL2F1dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYworKysgYi9jb250 cmliL2F1dG9fZXhwbGFpbi9hdXRvX2V4cGxhaW4uYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1 ZGUgImV4ZWN1dG9yL2luc3RydW1lbnQuaCIKICNpbmNsdWRlICJqaXQvaml0LmgiCiAjaW5jbHVk ZSAibm9kZXMvcGFyYW1zLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIKICNpbmNs dWRlICJ1dGlscy9ndWMuaCIKIAogUEdfTU9EVUxFX01BR0lDOwpAQCAtNjQsMjAgKzY1LDI4IEBA IHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2VudW1fZW50cnkgbG9nbGV2ZWxfb3B0aW9uc1td ID0gewogLyogQ3VycmVudCBuZXN0aW5nIGRlcHRoIG9mIEV4ZWN1dG9yUnVuIGNhbGxzICovCiBz dGF0aWMgaW50CW5lc3RpbmdfbGV2ZWwgPSAwOwogCisvKiBDdXJyZW50IG5lc3RpbmcgZGVwdGgg b2YgcGxhbm5lciBjYWxscyAqLworc3RhdGljIGludAlwbGFuX25lc3RpbmdfbGV2ZWwgPSAwOwor CiAvKiBJcyB0aGUgY3VycmVudCB0b3AtbGV2ZWwgcXVlcnkgdG8gYmUgc2FtcGxlZD8gKi8KIHN0 YXRpYyBib29sIGN1cnJlbnRfcXVlcnlfc2FtcGxlZCA9IGZhbHNlOwogCiAjZGVmaW5lIGF1dG9f ZXhwbGFpbl9lbmFibGVkKCkgXAogCShhdXRvX2V4cGxhaW5fbG9nX21pbl9kdXJhdGlvbiA+PSAw ICYmIFwKLQkgKG5lc3RpbmdfbGV2ZWwgPT0gMCB8fCBhdXRvX2V4cGxhaW5fbG9nX25lc3RlZF9z dGF0ZW1lbnRzKSAmJiBcCisJICgobmVzdGluZ19sZXZlbCA9PSAwIHx8IHBsYW5fbmVzdGluZ19s ZXZlbCA9PSAwKSB8fCBcCisJICAgYXV0b19leHBsYWluX2xvZ19uZXN0ZWRfc3RhdGVtZW50cykg JiYgXAogCSBjdXJyZW50X3F1ZXJ5X3NhbXBsZWQpCiAKIC8qIFNhdmVkIGhvb2sgdmFsdWVzIGlu IGNhc2Ugb2YgdW5sb2FkICovCitzdGF0aWMgcGxhbm5lcl9ob29rX3R5cGUgcHJldl9wbGFubmVy X2hvb2sgPSBOVUxMOwogc3RhdGljIEV4ZWN1dG9yU3RhcnRfaG9va190eXBlIHByZXZfRXhlY3V0 b3JTdGFydCA9IE5VTEw7CiBzdGF0aWMgRXhlY3V0b3JSdW5faG9va190eXBlIHByZXZfRXhlY3V0 b3JSdW4gPSBOVUxMOwogc3RhdGljIEV4ZWN1dG9yRmluaXNoX2hvb2tfdHlwZSBwcmV2X0V4ZWN1 dG9yRmluaXNoID0gTlVMTDsKIHN0YXRpYyBFeGVjdXRvckVuZF9ob29rX3R5cGUgcHJldl9FeGVj dXRvckVuZCA9IE5VTEw7CiAKK3N0YXRpYyBQbGFubmVkU3RtdCAqZXhwbGFpbl9QbGFubmVyKFF1 ZXJ5ICpwYXJzZSwgY29uc3QgY2hhciAqcXVlcnlfc3RyaW5nLAorCQkJCQkJCQlpbnQgY3Vyc29y T3B0aW9ucywKKwkJCQkJCQkJIFBhcmFtTGlzdEluZm8gYm91bmRQYXJhbXMpOwogc3RhdGljIHZv aWQgZXhwbGFpbl9FeGVjdXRvclN0YXJ0KFF1ZXJ5RGVzYyAqcXVlcnlEZXNjLCBpbnQgZWZsYWdz KTsKIHN0YXRpYyB2b2lkIGV4cGxhaW5fRXhlY3V0b3JSdW4oUXVlcnlEZXNjICpxdWVyeURlc2Ms CiAJCQkJCQkJCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLApAQCAtMjQ1LDYgKzI1NCw4IEBAIF9Q R19pbml0KHZvaWQpCiAJTWFya0dVQ1ByZWZpeFJlc2VydmVkKCJhdXRvX2V4cGxhaW4iKTsKIAog CS8qIEluc3RhbGwgaG9va3MuICovCisJcHJldl9wbGFubmVyX2hvb2sgPSBwbGFubmVyX2hvb2s7 CisJcGxhbm5lcl9ob29rID0gZXhwbGFpbl9QbGFubmVyOwogCXByZXZfRXhlY3V0b3JTdGFydCA9 IEV4ZWN1dG9yU3RhcnRfaG9vazsKIAlFeGVjdXRvclN0YXJ0X2hvb2sgPSBleHBsYWluX0V4ZWN1 dG9yU3RhcnQ7CiAJcHJldl9FeGVjdXRvclJ1biA9IEV4ZWN1dG9yUnVuX2hvb2s7CkBAIC0yNTUs NiArMjY2LDcyIEBAIF9QR19pbml0KHZvaWQpCiAJRXhlY3V0b3JFbmRfaG9vayA9IGV4cGxhaW5f RXhlY3V0b3JFbmQ7CiB9CiAKKy8qCisgKiBQbGFubmVyIGhvb2s6IHRyYWNrIG5lc3RpbmcgbGV2 ZWwgYW5kIHN0YXJ0IHVwIGxvZ2dpbmcgaWYgbmVlZGVkCisgKi8KK3N0YXRpYyBQbGFubmVkU3Rt dCAqCitleHBsYWluX1BsYW5uZXIoUXVlcnkgKnBhcnNlLCBjb25zdCBjaGFyICpxdWVyeV9zdHJp bmcsIGludCBjdXJzb3JPcHRpb25zLCBQYXJhbUxpc3RJbmZvIGJvdW5kUGFyYW1zKQoreworCVBs YW5uZWRTdG10ICpyZXN1bHQ7CisKKwlpZiAocGxhbl9uZXN0aW5nX2xldmVsID09IDApCisJewor CQlpZiAoYXV0b19leHBsYWluX2xvZ19taW5fZHVyYXRpb24gPj0gMCAmJiAhSXNQYXJhbGxlbFdv cmtlcigpKQorCQkJY3VycmVudF9xdWVyeV9zYW1wbGVkID0gKHBnX3BybmdfZG91YmxlKCZwZ19n bG9iYWxfcHJuZ19zdGF0ZSkgPCBhdXRvX2V4cGxhaW5fc2FtcGxlX3JhdGUpOworCQllbHNlCisJ CQljdXJyZW50X3F1ZXJ5X3NhbXBsZWQgPSBmYWxzZTsKKwl9CisKKwlpZiAoYXV0b19leHBsYWlu X2VuYWJsZWQoKSkKKwl7CisJLy8gVE9ETzogTG9nIG91dHB1dCBjb25jZXJuaW5nIGJ1ZmZlcnMg c2hvdWxkIGJlIHRvZ2dsZWQgb24vb2ZmIGJ5IGF1dG9fZXhwbGFpbi5sb2dfYnVmZmVycy4KKwkv LyBUT0RPOiBMb2cgb3V0cHV0IGNvbmNlcm5pbmcgcGxhbm5pbmcgc2hvdWxkIGJlIHRvZ2dsZWQg b24vb2ZmIGJ5IGF1dG9fZXhwbGFpbi50cmFja19wbGFubmluZy4KKworCQlpbnN0cl90aW1lCXN0 YXJ0OworCQlpbnN0cl90aW1lCWR1cmF0aW9uOworCQlCdWZmZXJVc2FnZSBidWZ1c2FnZV9zdGFy dDsKKworCQkvKiBXZSBuZWVkIHRvIHRyYWNrIGJ1ZmZlciB1c2FnZSBhcyB0aGUgcGxhbm5lciBj YW4gYWNjZXNzIHRoZW0uICovCisJCWJ1ZnVzYWdlX3N0YXJ0ID0gcGdCdWZmZXJVc2FnZTsKKwor CQlJTlNUUl9USU1FX1NFVF9DVVJSRU5UKHN0YXJ0KTsKKworCQlwbGFuX25lc3RpbmdfbGV2ZWwr KzsKKwkJUEdfVFJZKCk7CisJCXsKKwkJCWlmIChwcmV2X3BsYW5uZXJfaG9vaykKKwkJCQlyZXN1 bHQgPSBwcmV2X3BsYW5uZXJfaG9vayhwYXJzZSwgcXVlcnlfc3RyaW5nLCBjdXJzb3JPcHRpb25z LAorCQkJCQkJCQkJCSAgIGJvdW5kUGFyYW1zKTsKKwkJCWVsc2UKKwkJCQlyZXN1bHQgPSBzdGFu ZGFyZF9wbGFubmVyKHBhcnNlLCBxdWVyeV9zdHJpbmcsIGN1cnNvck9wdGlvbnMsCisJCQkJCQkJ CQkJICBib3VuZFBhcmFtcyk7CisJCX0KKwkJUEdfRklOQUxMWSgpOworCQl7CisJCQlwbGFuX25l c3RpbmdfbGV2ZWwtLTsKKwkJfQorCQlQR19FTkRfVFJZKCk7CisKKwkJSU5TVFJfVElNRV9TRVRf Q1VSUkVOVChkdXJhdGlvbik7CisJCUlOU1RSX1RJTUVfU1VCVFJBQ1QoZHVyYXRpb24sIHN0YXJ0 KTsKKworCQlyZXN1bHQtPnBsYW50aW1lID0gZHVyYXRpb247CisJCS8qIGNhbGMgZGlmZmVyZW5j ZXMgb2YgYnVmZmVyIGNvdW50ZXJzIGFuZCBzYXZlIGl0ICovCisJCUJ1ZmZlclVzYWdlQWNjdW1E aWZmKCZyZXN1bHQtPmJ1ZnVzYWdlLCAmcGdCdWZmZXJVc2FnZSwgJmJ1ZnVzYWdlX3N0YXJ0KTsK Kwl9CisJZWxzZQorCXsKKwkJaWYgKHByZXZfcGxhbm5lcl9ob29rKQorCQkJcmVzdWx0ID0gcHJl dl9wbGFubmVyX2hvb2socGFyc2UsIHF1ZXJ5X3N0cmluZywgY3Vyc29yT3B0aW9ucywKKwkJCQkJ CQkJCSAgIGJvdW5kUGFyYW1zKTsKKwkJZWxzZQorCQkJcmVzdWx0ID0gc3RhbmRhcmRfcGxhbm5l cihwYXJzZSwgcXVlcnlfc3RyaW5nLCBjdXJzb3JPcHRpb25zLAorCQkJCQkJCQkJICBib3VuZFBh cmFtcyk7CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKwogLyoKICAqIEV4ZWN1dG9yU3RhcnQg aG9vazogc3RhcnQgdXAgbG9nZ2luZyBpZiBuZWVkZWQKICAqLwpAQCAtNDAyLDcgKzQ3OSw4IEBA IGV4cGxhaW5fRXhlY3V0b3JFbmQoUXVlcnlEZXNjICpxdWVyeURlc2MpCiAJCQlFeHBsYWluQmVn aW5PdXRwdXQoZXMpOwogCQkJRXhwbGFpblF1ZXJ5VGV4dChlcywgcXVlcnlEZXNjKTsKIAkJCUV4 cGxhaW5RdWVyeVBhcmFtZXRlcnMoZXMsIHF1ZXJ5RGVzYy0+cGFyYW1zLCBhdXRvX2V4cGxhaW5f bG9nX3BhcmFtZXRlcl9tYXhfbGVuZ3RoKTsKLQkJCUV4cGxhaW5QcmludFBsYW4oZXMsIHF1ZXJ5 RGVzYyk7CisJCQlFeHBsYWluUHJpbnRQbGFuKGVzLCBxdWVyeURlc2MsICZxdWVyeURlc2MtPnBs YW5uZWRzdG10LT5wbGFudGltZSwKKwkJCQkJCQkgJnF1ZXJ5RGVzYy0+cGxhbm5lZHN0bXQtPmJ1 ZnVzYWdlKTsKIAkJCWlmIChlcy0+YW5hbHl6ZSAmJiBhdXRvX2V4cGxhaW5fbG9nX3RyaWdnZXJz KQogCQkJCUV4cGxhaW5QcmludFRyaWdnZXJzKGVzLCBxdWVyeURlc2MpOwogCQkJaWYgKGVzLT5j b3N0cykKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCBhMDMxMWNlOWRjLi5mOTJjN2ViYjk4IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC02MDIsMjIgKzYwMiw3IEBAIEV4cGxhaW5PbmVQbGFu KFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRl ICplcywKIAlFeHBsYWluT3Blbkdyb3VwKCJRdWVyeSIsIE5VTEwsIHRydWUsIGVzKTsKIAogCS8q IENyZWF0ZSB0ZXh0dWFsIGR1bXAgb2YgcGxhbiB0cmVlICovCi0JRXhwbGFpblByaW50UGxhbihl cywgcXVlcnlEZXNjKTsKLQotCS8qIFNob3cgYnVmZmVyIHVzYWdlIGluIHBsYW5uaW5nICovCi0J aWYgKGJ1ZnVzYWdlKQotCXsKLQkJRXhwbGFpbk9wZW5Hcm91cCgiUGxhbm5pbmciLCAiUGxhbm5p bmciLCB0cnVlLCBlcyk7Ci0JCXNob3dfYnVmZmVyX3VzYWdlKGVzLCBidWZ1c2FnZSwgdHJ1ZSk7 Ci0JCUV4cGxhaW5DbG9zZUdyb3VwKCJQbGFubmluZyIsICJQbGFubmluZyIsIHRydWUsIGVzKTsK LQl9Ci0KLQlpZiAoZXMtPnN1bW1hcnkgJiYgcGxhbmR1cmF0aW9uKQotCXsKLQkJZG91YmxlCQlw bGFudGltZSA9IElOU1RSX1RJTUVfR0VUX0RPVUJMRSgqcGxhbmR1cmF0aW9uKTsKLQotCQlFeHBs YWluUHJvcGVydHlGbG9hdCgiUGxhbm5pbmcgVGltZSIsICJtcyIsIDEwMDAuMCAqIHBsYW50aW1l LCAzLCBlcyk7Ci0JfQorCUV4cGxhaW5QcmludFBsYW4oZXMsIHF1ZXJ5RGVzYywgcGxhbmR1cmF0 aW9uLCBidWZ1c2FnZSk7CiAKIAkvKiBQcmludCBpbmZvIGFib3V0IHJ1bnRpbWUgb2YgdHJpZ2dl cnMgKi8KIAlpZiAoZXMtPmFuYWx5emUpCkBAIC03MzgsNyArNzIzLDkgQEAgRXhwbGFpblByaW50 U2V0dGluZ3MoRXhwbGFpblN0YXRlICplcykKICAqIE5COiB3aWxsIG5vdCB3b3JrIG9uIHV0aWxp dHkgc3RhdGVtZW50cwogICovCiB2b2lkCi1FeHBsYWluUHJpbnRQbGFuKEV4cGxhaW5TdGF0ZSAq ZXMsIFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKQorRXhwbGFpblByaW50UGxhbihFeHBsYWluU3RhdGUg KmVzLCBRdWVyeURlc2MgKnF1ZXJ5RGVzYywKKwkJCQkgY29uc3QgaW5zdHJfdGltZSAqcGxhbmR1 cmF0aW9uLAorCQkJCSBjb25zdCBCdWZmZXJVc2FnZSAqYnVmdXNhZ2UpCiB7CiAJQml0bWFwc2V0 ICAqcmVsc191c2VkID0gTlVMTDsKIAlQbGFuU3RhdGUgICpwczsKQEAgLTc5MSw2ICs3NzgsMjEg QEAgRXhwbGFpblByaW50UGxhbihFeHBsYWluU3RhdGUgKmVzLCBRdWVyeURlc2MgKnF1ZXJ5RGVz YykKIAkJRXhwbGFpblByb3BlcnR5SW50ZWdlcigiUXVlcnkgSWRlbnRpZmllciIsIE5VTEwsIChp bnQ2NCkKIAkJCQkJCQkgICBxdWVyeURlc2MtPnBsYW5uZWRzdG10LT5xdWVyeUlkLCBlcyk7CiAJ fQorCisJLyogU2hvdyBidWZmZXIgdXNhZ2UgaW4gcGxhbm5pbmcgKi8KKwlpZiAoYnVmdXNhZ2Up CisJeworCQlFeHBsYWluT3Blbkdyb3VwKCJQbGFubmluZyIsICJQbGFubmluZyIsIHRydWUsIGVz KTsKKwkJc2hvd19idWZmZXJfdXNhZ2UoZXMsIGJ1ZnVzYWdlLCB0cnVlKTsKKwkJRXhwbGFpbkNs b3NlR3JvdXAoIlBsYW5uaW5nIiwgIlBsYW5uaW5nIiwgdHJ1ZSwgZXMpOworCX0KKworCWlmIChl cy0+c3VtbWFyeSAmJiBwbGFuZHVyYXRpb24pCisJeworCQlkb3VibGUJCXBsYW50aW1lID0gSU5T VFJfVElNRV9HRVRfRE9VQkxFKCpwbGFuZHVyYXRpb24pOworCisJCUV4cGxhaW5Qcm9wZXJ0eUZs b2F0KCJQbGFubmluZyBUaW1lIiwgIm1zIiwgMTAwMC4wICogcGxhbnRpbWUsIDMsIGVzKTsKKwl9 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9nZW5fbm9kZV9zdXBwb3J0 LnBsIGIvc3JjL2JhY2tlbmQvbm9kZXMvZ2VuX25vZGVfc3VwcG9ydC5wbAppbmRleCBiM2MxZWFk NDk2Li42NWQ4NzIxODY1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9nZW5fbm9kZV9z dXBwb3J0LnBsCisrKyBiL3NyYy9iYWNrZW5kL25vZGVzL2dlbl9ub2RlX3N1cHBvcnQucGwKQEAg LTc1OSw2ICs3NTksOCBAQCBfZXF1YWwke259KGNvbnN0ICRuICphLCBjb25zdCAkbiAqYikKIAkJ CXByaW50ICRlZmYgIlx0Q09NUEFSRV9CSVRNQVBTRVRfRklFTEQoJGYpO1xuIgogCQkJICB1bmxl c3MgJGVxdWFsX2lnbm9yZTsKIAkJfQorCQkjIHRlbXBvcmFyaWx5IGNoYW5nZSBmb3IgUG9DCisJ CWVsc2lmICgkdCBlcSAnaW5zdHJfdGltZScgfHwgJHQgZXEgJ0J1ZmZlclVzYWdlJykgeyB9CiAJ CWVsc2lmICgkdCBlcSAnaW50JyAmJiAkZiA9fiAnbG9jYXRpb24kJykKIAkJewogCQkJcHJpbnQg JGNmZiAiXHRDT1BZX0xPQ0FUSU9OX0ZJRUxEKCRmKTtcbiIgICAgdW5sZXNzICRjb3B5X2lnbm9y ZTsKQEAgLTEwNzMsNiArMTA3NSw4IEBAIF9yZWFkJHtufSh2b2lkKQogCQkJcHJpbnQgJG9mZiAi XHRXUklURV9CSVRNQVBTRVRfRklFTEQoJGYpO1xuIjsKIAkJCXByaW50ICRyZmYgIlx0UkVBRF9C SVRNQVBTRVRfRklFTEQoJGYpO1xuIiB1bmxlc3MgJG5vX3JlYWQ7CiAJCX0KKwkJIyB0ZW1wb3Jh bGlseSBjaGFuZ2UgZm9yIFBvQworCQllbHNpZiAoJHQgZXEgJ2luc3RyX3RpbWUnIHx8ICR0IGVx ICdCdWZmZXJVc2FnZScpIHsgfQogCQllbHNpZiAoZWxlbSAkdCwgQGVudW1fdHlwZXMpCiAJCXsK IAkJCXByaW50ICRvZmYgIlx0V1JJVEVfRU5VTV9GSUVMRCgkZiwgJHQpO1xuIjsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCAwNWY0NGZhZjZlLi41MDk1ZGE2OGY2IDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC01NjQsNiArNTY0LDggQEAgc3RhbmRh cmRfcGxhbm5lcihRdWVyeSAqcGFyc2UsIGNvbnN0IGNoYXIgKnF1ZXJ5X3N0cmluZywgaW50IGN1 cnNvck9wdGlvbnMsCiAJCWlmIChqaXRfdHVwbGVfZGVmb3JtaW5nKQogCQkJcmVzdWx0LT5qaXRG bGFncyB8PSBQR0pJVF9ERUZPUk07CiAJfQorCW1lbXNldCgmcmVzdWx0LT5idWZ1c2FnZSwgMCwg c2l6ZW9mKEJ1ZmZlclVzYWdlKSk7CisJbWVtc2V0KCZyZXN1bHQtPnBsYW50aW1lLCAwLCBzaXpl b2YoaW5zdHJfdGltZSkpOwogCiAJaWYgKGdsb2ItPnBhcnRpdGlvbl9kaXJlY3RvcnkgIT0gTlVM TCkKIAkJRGVzdHJveVBhcnRpdGlvbkRpcmVjdG9yeShnbG9iLT5wYXJ0aXRpb25fZGlyZWN0b3J5 KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaCBiL3NyYy9pbmNs dWRlL2NvbW1hbmRzL2V4cGxhaW4uaAppbmRleCA3YzEwNzFkZGQxLi42OTBiYzdiZWNlIDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tYW5kcy9leHBsYWluLmgKKysrIGIvc3JjL2luY2x1ZGUv Y29tbWFuZHMvZXhwbGFpbi5oCkBAIC05Myw3ICs5Myw5IEBAIGV4dGVybiB2b2lkIEV4cGxhaW5P bmVQbGFuKFBsYW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywKIAkJCQkJ CSAgIGNvbnN0IGluc3RyX3RpbWUgKnBsYW5kdXJhdGlvbiwKIAkJCQkJCSAgIGNvbnN0IEJ1ZmZl clVzYWdlICpidWZ1c2FnZSk7CiAKLWV4dGVybiB2b2lkIEV4cGxhaW5QcmludFBsYW4oRXhwbGFp blN0YXRlICplcywgUXVlcnlEZXNjICpxdWVyeURlc2MpOworZXh0ZXJuIHZvaWQgRXhwbGFpblBy aW50UGxhbihFeHBsYWluU3RhdGUgKmVzLCBRdWVyeURlc2MgKnF1ZXJ5RGVzYywKKwkJCQkJCQkg Y29uc3QgaW5zdHJfdGltZSAqcGxhbmR1cmF0aW9uLAorCQkJCQkJCSBjb25zdCBCdWZmZXJVc2Fn ZSAqYnVmdXNhZ2UpOwogZXh0ZXJuIHZvaWQgRXhwbGFpblByaW50VHJpZ2dlcnMoRXhwbGFpblN0 YXRlICplcywgUXVlcnlEZXNjICpxdWVyeURlc2MpOwogCiBleHRlcm4gdm9pZCBFeHBsYWluUHJp bnRKSVRTdW1tYXJ5KEV4cGxhaW5TdGF0ZSAqZXMsIFF1ZXJ5RGVzYyAqcXVlcnlEZXNjKTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL25vZGVzL3BsYW5ub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9k ZXMvcGxhbm5vZGVzLmgKaW5kZXggYzEyMzRmY2YzNi4uZTAwNzZhMjA0MiAxMDA2NDQKLS0tIGEv c3JjL2luY2x1ZGUvbm9kZXMvcGxhbm5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGxh bm5vZGVzLmgKQEAgLTE3LDExICsxNywxMyBAQAogI2luY2x1ZGUgImFjY2Vzcy9zZGlyLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3N0cmF0bnVtLmgiCiAjaW5jbHVkZSAiY29tbW9uL3JlbHBhdGguaCIK KyNpbmNsdWRlICJleGVjdXRvci9pbnN0cnVtZW50LmgiCiAjaW5jbHVkZSAibGliL3N0cmluZ2lu Zm8uaCIKICNpbmNsdWRlICJub2Rlcy9iaXRtYXBzZXQuaCIKICNpbmNsdWRlICJub2Rlcy9sb2Nr b3B0aW9ucy5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcnNlbm9kZXMuaCIKICNpbmNsdWRlICJub2Rl cy9wcmltbm9kZXMuaCIKKyNpbmNsdWRlICJwb3J0YWJpbGl0eS9pbnN0cl90aW1lLmgiCiAKIAog LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpAQCAtMTAxLDYgKzEwMywxMCBAQCB0eXBlZGVmIHN0cnVjdCBQbGFubmVkU3Rt dAogCS8qIHN0YXRlbWVudCBsb2NhdGlvbiBpbiBzb3VyY2Ugc3RyaW5nIChjb3BpZWQgZnJvbSBR dWVyeSkgKi8KIAlpbnQJCQlzdG10X2xvY2F0aW9uOwkvKiBzdGFydCBsb2NhdGlvbiwgb3IgLTEg aWYgdW5rbm93biAqLwogCWludAkJCXN0bXRfbGVuOwkJLyogbGVuZ3RoIGluIGJ5dGVzOyAwIG1l YW5zICJyZXN0IG9mIHN0cmluZyIgKi8KKworCS8qIFRoZXNlIGFyZSBuZXZlciB1c2VkIGJ5IHRo ZSBjb3JlIHN5c3RlbSwgYnV0IHBsdWdpbnMgY2FuIGNoYW5nZSB0aGVtICovCisJaW5zdHJfdGlt ZQlwbGFudGltZTsJCS8qIHBsYW5uaW5nIHRpbWUgKi8KKwlCdWZmZXJVc2FnZSBidWZ1c2FnZTsJ CS8qIGJ1ZmZlciB1c2FnZSBmb3IgcGxhbm5pbmcgKi8KIH0gUGxhbm5lZFN0bXQ7CiAKIC8qIG1h Y3JvIGZvciBmZXRjaGluZyB0aGUgUGxhbiBhc3NvY2lhdGVkIHdpdGggYSBTdWJQbGFuIG5vZGUg Ki8KLS0gCjIuMjUuMQoK --=_2d3e03b191d76dc2885faf4363c849fe--