Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gvRFG-000114-UQ for pgsql-hackers@arkaria.postgresql.org; Sun, 17 Feb 2019 18:32:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1gvRFF-0004IA-0Q for pgsql-hackers@arkaria.postgresql.org; Sun, 17 Feb 2019 18:32:53 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gvRFE-0004I3-O1 for pgsql-hackers@lists.postgresql.org; Sun, 17 Feb 2019 18:32:52 +0000 Received: from gauss.credativ.com ([93.94.130.89]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gvRFB-0000db-ST for pgsql-hackers@postgresql.org; Sun, 17 Feb 2019 18:32:52 +0000 Received: from gauss.credativ.com (localhost [127.0.0.1]) by gauss.credativ.com (Postfix) with ESMTP id 2C2A81E3B74; Sun, 17 Feb 2019 19:32:47 +0100 (CET) Received: from kohn (unknown [46.183.103.17]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) (Authenticated sender: mba@gauss.credativ.com) by gauss.credativ.com (Postfix) with ESMTPSA id 6912E1E1A23; Sun, 17 Feb 2019 19:32:14 +0100 (CET) Message-ID: <1550428298.12689.12.camel@credativ.de> Subject: Re: Offline enabling/disabling of data checksums From: Michael Banck To: Fabien COELHO Cc: Postgres hackers , Michael Paquier Date: Sun, 17 Feb 2019 19:31:38 +0100 In-Reply-To: References: <20181221201616.GD4974@nighthawk.caipicrew.dd-dns.de> <1546949005.32387.11.camel@credativ.de> Organization: credativ GmbH Content-Type: multipart/mixed; boundary="=-9iKVU4+wACylvuKQSI9B" X-Mailer: Evolution 3.22.6-1+deb9u1 Mime-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=-9iKVU4+wACylvuKQSI9B Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Hi, sorry for letting this slack. First off, thanks for the review! Am Mittwoch, den 09.01.2019, 07:07 +0100 schrieb Fabien COELHO: > > I changed that to the switches -c/--verify (-c for check as -v is taken, > > should it be --check as well? I personally like verify better),  > > -d/--disable and -e/--enable. > > I agree that checking the checksum sounds repetitive, but I think that for > consistency --check should be provided. Ok then. The enum is currently called PG_ACTION_VERIFY, I changed that to PG_ACTION_CHECK as well. > About the patch: applies, compiles, global & local "make check" are ok. > > There is still no documentation. I've added that now, though I did that blindly and have not checked the output yet. > I think that there is a consensus about renaming the command. I think so as well, but doing that right now will make the patch difficult to review, so I'd prefer to leave it to the committer to do that.  I can submit a patch with the directory/file rename if that is preferred. > The --help string documents --action which does not exists anymore. Fixed that. > The code in "updateControlFile" seems to allow to create the file > (O_CREAT). I do not think that it should, it should only apply to an > existing file. Removed that. > ISTM that some generalized version of this function should be in > "src/common/controldata_utils.c" instead of duplicating it from command to > command (as suggested by Michaël as well). Haven't done that yet. > In "scan_file" verbose output, ISTM that the checksum is more computed > than enabled on the file. It is really enabled at the cluster level in the > end. It's certainly not just computed but also written. It's true that it will be only meaningful if the control file is updated accordingly at the end, but I don't think that message is very incorrect, so left it as-is for now. > Maybe there could be only one open call with a ?: for RO vs RW. Done that. > Non root check: as files are only manipulated RW, ISTM that there is no > reason why the ownership would be changed, so I do not think that this > constraint is useful. Now that we no longer unlink() pg_control, I believe you are right and I have removed it. ` > There is kind of a copy paste for enabling/disabling, I'd consider > skipping the scan when not necessary and merge both branches. Done so. > > > Also, the full page is rewritten... would it make sense to only overwrite > > > the checksum part itself? > > > > So just writing the page header? I find that a bit scary and don't > > expect much speedup as the OS would write the whole block anyway I > > guess? I haven't touched that yet. > > Possibly the OS would write its block size, which is not necessary the > same as postgres page size? I haven't changed that yet, I think Andres was also of the opinion that this is not necessary? > > > It seems that the control file is unlinked and then rewritten. If the > > > rewritting fails, or the command is interrupted, the user has a problem. > > > > > > Could the control file be simply opened RW? I've done that now. New patch attached. Michael -- Michael Banck Projektleiter / Senior Berater Tel.: +49 2166 9901-171 Fax: +49 2166 9901-100 Email: michael.banck@credativ.de credativ GmbH, HRB Mönchengladbach 12080 USt-ID-Nummer: DE204566209 Trompeterallee 108, 41189 Mönchengladbach Geschäftsführung: Dr. Michael Meskes, Jörg Folz, Sascha Heuer Unser Umgang mit personenbezogenen Daten unterliegt folgenden Bestimmungen: https://www.credativ.de/datenschutz --=-9iKVU4+wACylvuKQSI9B Content-Disposition: attachment; filename="offline-activation-of-checksums_V3.patch" Content-Type: text/x-patch; name="offline-activation-of-checksums_V3.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdfdmVyaWZ5X2NoZWNrc3Vtcy5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ192ZXJpZnlfY2hlY2tzdW1zLnNnbWwKaW5kZXggOTA1YjhmMTIy Mi4uYTU2NWNiNTJhZSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9wZ192ZXJpZnlfY2hl Y2tzdW1zLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ192ZXJpZnlfY2hlY2tzdW1zLnNn bWwKQEAgLTE2LDcgKzE2LDcgQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAKICA8cmVmbmFt ZWRpdj4KICAgPHJlZm5hbWU+cGdfdmVyaWZ5X2NoZWNrc3VtczwvcmVmbmFtZT4KLSAgPHJlZnB1 cnBvc2U+dmVyaWZ5IGRhdGEgY2hlY2tzdW1zIGluIGEgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8 L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyPC9yZWZwdXJwb3NlPgorICA8cmVmcHVycG9z ZT5lbmFibGUsIGRpc2FibGUgb3IgdmVyaWZ5IGRhdGEgY2hlY2tzdW1zIGluIGEgPHByb2R1Y3Ru YW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiBkYXRhYmFzZSBjbHVzdGVyPC9yZWZwdXJwb3Nl PgogIDwvcmVmbmFtZWRpdj4KIAogIDxyZWZzeW5vcHNpc2Rpdj4KQEAgLTI1LDYgKzI1LDExIEBA IFBvc3RncmVTUUwgZG9jdW1lbnRhdGlvbgogICAgPGFyZyByZXA9InJlcGVhdCIgY2hvaWNlPSJv cHQiPjxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5vcHRpb248L3JlcGxhY2VhYmxlPjwv YXJnPgogICAgPGdyb3VwIGNob2ljZT0ib3B0Ij4KICAgICA8Z3JvdXAgY2hvaWNlPSJvcHQiPgor ICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1jaGVjazwvb3B0aW9uPjwvYXJnPgor ICAgICA8YXJnIGNob2ljZT0icGxhaW4iPjxvcHRpb24+LS1kaXNhYmxlPC9vcHRpb24+PC9hcmc+ CisgICAgIDxhcmcgY2hvaWNlPSJwbGFpbiI+PG9wdGlvbj4tLWVuYWJsZTwvb3B0aW9uPjwvYXJn PgorICAgIDwvZ3JvdXA+CisgICAgPGdyb3VwIGNob2ljZT0ib3B0Ij4KICAgICAgPGFyZyBjaG9p Y2U9InBsYWluIj48b3B0aW9uPi1EPC9vcHRpb24+PC9hcmc+CiAgICAgIDxhcmcgY2hvaWNlPSJw bGFpbiI+PG9wdGlvbj4tLXBnZGF0YTwvb3B0aW9uPjwvYXJnPgogICAgIDwvZ3JvdXA+CkBAIC0z NiwxMCArNDEsMTggQEAgUG9zdGdyZVNRTCBkb2N1bWVudGF0aW9uCiAgPHJlZnNlY3QxIGlkPSJy MS1hcHAtcGdfdmVyaWZ5X2NoZWNrc3Vtcy0xIj4KICAgPHRpdGxlPkRlc2NyaXB0aW9uPC90aXRs ZT4KICAgPHBhcmE+Ci0gICA8Y29tbWFuZD5wZ192ZXJpZnlfY2hlY2tzdW1zPC9jb21tYW5kPiB2 ZXJpZmllcyBkYXRhIGNoZWNrc3VtcyBpbiBhCi0gICA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwv cHJvZHVjdG5hbWU+IGNsdXN0ZXIuICBUaGUgc2VydmVyIG11c3QgYmUgc2h1dAotICAgZG93biBj bGVhbmx5IGJlZm9yZSBydW5uaW5nIDxhcHBsaWNhdGlvbj5wZ192ZXJpZnlfY2hlY2tzdW1zPC9h cHBsaWNhdGlvbj4uCi0gICBUaGUgZXhpdCBzdGF0dXMgaXMgemVybyBpZiB0aGVyZSBhcmUgbm8g Y2hlY2tzdW0gZXJyb3JzLCBvdGhlcndpc2Ugbm9uemVyby4KKyAgIDxjb21tYW5kPnBnX3Zlcmlm eV9jaGVja3N1bXM8L2NvbW1hbmQ+IGVuYWJsZSwgZGlzYWJsZSBvciB2ZXJpZmllcyBkYXRhCisg ICBjaGVja3N1bXMgaW4gYSA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IGNs dXN0ZXIuICBUaGUgc2VydmVyCisgICBtdXN0IGJlIHNodXQgZG93biBjbGVhbmx5IGJlZm9yZSBy dW5uaW5nCisgICA8YXBwbGljYXRpb24+cGdfdmVyaWZ5X2NoZWNrc3VtczwvYXBwbGljYXRpb24+ IC4KKyAgIFRoZSBleGl0IHN0YXR1cyBpcyB6ZXJvIGlmIHRoZXJlIGFyZSBubyBjaGVja3N1bSBl cnJvcnMgb3IgY2hlY2tzdW0KKyAgIGVuYWJsaW5nL2Rpc2FibGVkIHdhcyBzdWNjZXNzZnVsLCBv dGhlcndpc2Ugbm9uemVyby4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgV2hpbGUgY2hlY2tp bmcgb3IgZW5hYmxpbmcgY2hlY2tzdW1zIG5lZWRzIHRvIHNjYW4gb3Igd3JpdGUgZXZlcnkgZmls ZSBpbgorICAgdGhlIGNsdXN0ZXIsIGRpc2FibGluZyB3aWxsIG9ubHkgdXBkYXRlIHRoZSA8Zmls ZW5hbWU+cGdfY29udHJvbDwvZmlsZW5hbWU+CisgICBmaWxlLiAgCiAgIDwvcGFyYT4KICA8L3Jl ZnNlY3QxPgogCkBAIC02MSw2ICs3NCwzNiBAQCBQb3N0Z3JlU1FMIGRvY3VtZW50YXRpb24KICAg ICAgPC92YXJsaXN0ZW50cnk+CiAKICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxv cHRpb24+LWM8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tY2hlY2s8L29w dGlvbj48L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+CisgICAgICAgPHBhcmE+CisgICAgICAgIFZl cmlmeSBjaGVja3N1bXMuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAg PC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRp b24+LWQ8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZGlzYWJsZTwvb3B0 aW9uPjwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRGlz YWJsZSBjaGVja3N1bXMuCisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAg PC92YXJsaXN0ZW50cnk+CisKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPjxvcHRp b24+LWU8L29wdGlvbj48L3Rlcm0+CisgICAgICA8dGVybT48b3B0aW9uPi0tZW5hYmxlPC9vcHRp b24+PC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBFbmFi bGUgY2hlY2tzdW1zLgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwv dmFybGlzdGVudHJ5PgorCisgICAgIDx2YXJsaXN0ZW50cnk+CiAgICAgICA8dGVybT48b3B0aW9u Pi12PC9vcHRpb24+PC90ZXJtPgogICAgICAgPHRlcm0+PG9wdGlvbj4tLXZlcmJvc2U8L29wdGlv bj48L3Rlcm0+CiAgICAgICA8bGlzdGl0ZW0+CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Zlcmlm eV9jaGVja3N1bXMvcGdfdmVyaWZ5X2NoZWNrc3Vtcy5jIGIvc3JjL2Jpbi9wZ192ZXJpZnlfY2hl Y2tzdW1zL3BnX3ZlcmlmeV9jaGVja3N1bXMuYwppbmRleCA1MTEyNjJhYjVmLi4wN2NiNTc4N2M1 IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3ZlcmlmeV9jaGVja3N1bXMvcGdfdmVyaWZ5X2NoZWNr c3Vtcy5jCisrKyBiL3NyYy9iaW4vcGdfdmVyaWZ5X2NoZWNrc3Vtcy9wZ192ZXJpZnlfY2hlY2tz dW1zLmMKQEAgLTEsMTEgKzEsMTEgQEAKIC8qCi0gKiBwZ192ZXJpZnlfY2hlY2tzdW1zCisgKiBw Z19jaGVja3N1bXMKICAqCi0gKiBWZXJpZmllcyBwYWdlIGxldmVsIGNoZWNrc3VtcyBpbiBhbiBv ZmZsaW5lIGNsdXN0ZXIKKyAqIFZlcmlmaWVzL2VuYWJsZXMvZGlzYWJsZXMgcGFnZSBsZXZlbCBj aGVja3N1bXMgaW4gYW4gb2ZmbGluZSBjbHVzdGVyCiAgKgogICoJQ29weXJpZ2h0IChjKSAyMDEw LTIwMTksIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCiAgKgotICoJc3JjL2Jp bi9wZ192ZXJpZnlfY2hlY2tzdW1zL3BnX3ZlcmlmeV9jaGVja3N1bXMuYworICoJc3JjL2Jpbi9w Z19jaGVja3N1bXMvcGdfY2hlY2tzdW1zLmMKICAqLwogI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgi CiAKQEAgLTEzLDE1ICsxMywxNiBAQAogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaW5jbHVkZSA8 dW5pc3RkLmg+CiAKKyNpbmNsdWRlICJhY2Nlc3MveGxvZ19pbnRlcm5hbC5oIgogI2luY2x1ZGUg ImNhdGFsb2cvcGdfY29udHJvbC5oIgogI2luY2x1ZGUgImNvbW1vbi9jb250cm9sZGF0YV91dGls cy5oIgorI2luY2x1ZGUgImNvbW1vbi9maWxlX3Blcm0uaCIKKyNpbmNsdWRlICJjb21tb24vZmls ZV91dGlscy5oIgogI2luY2x1ZGUgImdldG9wdF9sb25nLmgiCiAjaW5jbHVkZSAicGdfZ2V0b3B0 LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9jaGVj a3N1bS5oIgogI2luY2x1ZGUgInN0b3JhZ2UvY2hlY2tzdW1faW1wbC5oIgotI2luY2x1ZGUgInN0 b3JhZ2UvZmQuaCIKLQogCiBzdGF0aWMgaW50NjQgZmlsZXMgPSAwOwogc3RhdGljIGludDY0IGJs b2NrcyA9IDA7CkBAIC0zMSwxNiArMzIsMzMgQEAgc3RhdGljIENvbnRyb2xGaWxlRGF0YSAqQ29u dHJvbEZpbGU7CiBzdGF0aWMgY2hhciAqb25seV9yZWxmaWxlbm9kZSA9IE5VTEw7CiBzdGF0aWMg Ym9vbCB2ZXJib3NlID0gZmFsc2U7CiAKK3R5cGVkZWYgZW51bQoreworCVBHX0FDVElPTl9DSEVD SywKKwlQR19BQ1RJT05fRElTQUJMRSwKKwlQR19BQ1RJT05fRU5BQkxFCit9IENoZWNrc3VtQWN0 aW9uOworCisvKiBGaWxlbmFtZSBjb21wb25lbnRzICovCisjZGVmaW5lIFBHX1RFTVBfRklMRVNf RElSICJwZ3NxbF90bXAiCisjZGVmaW5lIFBHX1RFTVBfRklMRV9QUkVGSVggInBnc3FsX3RtcCIK Kworc3RhdGljIENoZWNrc3VtQWN0aW9uIGFjdGlvbiA9IFBHX0FDVElPTl9DSEVDSzsKKwogc3Rh dGljIGNvbnN0IGNoYXIgKnByb2duYW1lOwogCiBzdGF0aWMgdm9pZAogdXNhZ2Uodm9pZCkKIHsK LQlwcmludGYoXygiJXMgdmVyaWZpZXMgZGF0YSBjaGVja3N1bXMgaW4gYSBQb3N0Z3JlU1FMIGRh dGFiYXNlIGNsdXN0ZXIuXG5cbiIpLCBwcm9nbmFtZSk7CisJcHJpbnRmKF8oIiVzIGVuYWJsZXMv ZGlzYWJsZXMvdmVyaWZpZXMgZGF0YSBjaGVja3N1bXMgaW4gYSBQb3N0Z3JlU1FMIGRhdGFiYXNl IGNsdXN0ZXIuXG5cbiIpLCBwcm9nbmFtZSk7CiAJcHJpbnRmKF8oIlVzYWdlOlxuIikpOwogCXBy aW50ZihfKCIgICVzIFtPUFRJT05dLi4uIFtEQVRBRElSXVxuIiksIHByb2duYW1lKTsKIAlwcmlu dGYoXygiXG5PcHRpb25zOlxuIikpOwogCXByaW50ZihfKCIgWy1ELCAtLXBnZGF0YT1dREFUQURJ UiAgZGF0YSBkaXJlY3RvcnlcbiIpKTsKKwlwcmludGYoXygiICAtYywgLS1jaGVjayAgICAgICAg ICAgIGNoZWNrIGRhdGEgY2hlY2tzdW1zXG4iKSk7CisJcHJpbnRmKF8oIiAgLWQsIC0tZGlzYWJs ZSAgICAgICAgICBkaXNhYmxlIGRhdGEgY2hlY2tzdW1zXG4iKSk7CisJcHJpbnRmKF8oIiAgLWUs IC0tZW5hYmxlICAgICAgICAgICBlbmFibGUgZGF0YSBjaGVja3N1bXNcbiIpKTsKKwlwcmludGYo XygiICAgICAgICAgICAgICAgICBcImNoZWNrXCIsIFwiZW5hYmxlXCIgYW5kIFwiZGlzYWJsZVwi XG4iKSk7CiAJcHJpbnRmKF8oIiAgLXYsIC0tdmVyYm9zZSAgICAgICAgICBvdXRwdXQgdmVyYm9z ZSBtZXNzYWdlc1xuIikpOwogCXByaW50ZihfKCIgIC1yIFJFTEZJTEVOT0RFICAgICAgICAgY2hl Y2sgb25seSByZWxhdGlvbiB3aXRoIHNwZWNpZmllZCByZWxmaWxlbm9kZVxuIikpOwogCXByaW50 ZihfKCIgIC1WLCAtLXZlcnNpb24gICAgICAgICAgb3V0cHV0IHZlcnNpb24gaW5mb3JtYXRpb24s IHRoZW4gZXhpdFxuIikpOwpAQCAtODAsNiArOTgsNzcgQEAgc2tpcGZpbGUoY29uc3QgY2hhciAq Zm4pCiB9CiAKIHN0YXRpYyB2b2lkCit1cGRhdGVDb250cm9sRmlsZShjaGFyICpEYXRhRGlyLCBD b250cm9sRmlsZURhdGEgKkNvbnRyb2xGaWxlKQoreworCWludAkJCWZkOworCWNoYXIJCWJ1ZmZl cltQR19DT05UUk9MX0ZJTEVfU0laRV07CisJY2hhcgkJQ29udHJvbEZpbGVQYXRoW01BWFBHUEFU SF07CisKKwlBc3NlcnQoYWN0aW9uID09IFBHX0FDVElPTl9FTkFCTEUgfHwKKwkJICAgYWN0aW9u ID09IFBHX0FDVElPTl9ESVNBQkxFKTsKKworCS8qCisJICogRm9yIGdvb2QgbHVjaywgYXBwbHkg dGhlIHNhbWUgc3RhdGljIGFzc2VydGlvbnMgYXMgaW4gYmFja2VuZCdzCisJICogV3JpdGVDb250 cm9sRmlsZSgpLgorCSAqLworI2lmIFBHX1ZFUlNJT05fTlVNID49IDEwMDAwMAorCVN0YXRpY0Fz c2VydFN0bXQoc2l6ZW9mKENvbnRyb2xGaWxlRGF0YSkgPD0gUEdfQ09OVFJPTF9NQVhfU0FGRV9T SVpFLAorCQkJCQkgInBnX2NvbnRyb2wgaXMgdG9vIGxhcmdlIGZvciBhdG9taWMgZGlzayB3cml0 ZXMiKTsKKyNlbmRpZgorCVN0YXRpY0Fzc2VydFN0bXQoc2l6ZW9mKENvbnRyb2xGaWxlRGF0YSkg PD0gUEdfQ09OVFJPTF9GSUxFX1NJWkUsCisJCQkJCSAic2l6ZW9mKENvbnRyb2xGaWxlRGF0YSkg ZXhjZWVkcyBQR19DT05UUk9MX0ZJTEVfU0laRSIpOworCisJLyogUmVjYWxjdWxhdGUgQ1JDIG9m IGNvbnRyb2wgZmlsZSAqLworCUlOSVRfQ1JDMzJDKENvbnRyb2xGaWxlLT5jcmMpOworCUNPTVBf Q1JDMzJDKENvbnRyb2xGaWxlLT5jcmMsCisJCQkJKGNoYXIgKikgQ29udHJvbEZpbGUsCisJCQkJ b2Zmc2V0b2YoQ29udHJvbEZpbGVEYXRhLCBjcmMpKTsKKwlGSU5fQ1JDMzJDKENvbnRyb2xGaWxl LT5jcmMpOworCisJLyoKKwkgKiBXcml0ZSBvdXQgUEdfQ09OVFJPTF9GSUxFX1NJWkUgYnl0ZXMg aW50byBwZ19jb250cm9sIGJ5IHplcm8tcGFkZGluZworCSAqIHRoZSBleGNlc3Mgb3ZlciBzaXpl b2YoQ29udHJvbEZpbGVEYXRhKSwgdG8gYXZvaWQgcHJlbWF0dXJlIEVPRiByZWxhdGVkCisJICog ZXJyb3JzIHdoZW4gcmVhZGluZyBpdC4KKwkgKi8KKwltZW1zZXQoYnVmZmVyLCAwLCBQR19DT05U Uk9MX0ZJTEVfU0laRSk7CisJbWVtY3B5KGJ1ZmZlciwgQ29udHJvbEZpbGUsIHNpemVvZihDb250 cm9sRmlsZURhdGEpKTsKKworCXNucHJpbnRmKENvbnRyb2xGaWxlUGF0aCwgc2l6ZW9mKENvbnRy b2xGaWxlUGF0aCksICIlcy8lcyIsIERhdGFEaXIsIFhMT0dfQ09OVFJPTF9GSUxFKTsKKworCWZk ID0gb3BlbihDb250cm9sRmlsZVBhdGgsIE9fV1JPTkxZIHwgUEdfQklOQVJZLAorCQkJICBwZ19m aWxlX2NyZWF0ZV9tb2RlKTsKKwlpZiAoZmQgPCAwKQorCXsKKwkJZnByaW50ZihzdGRlcnIsIF8o IiVzOiBjb3VsZCBub3Qgb3BlbiBjb250cm9sIGZpbGU6ICVzXG4iKSwKKwkJCQlwcm9nbmFtZSwg c3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgxKTsKKwl9CisKKwllcnJubyA9IDA7CisJaWYgKHdy aXRlKGZkLCBidWZmZXIsIFBHX0NPTlRST0xfRklMRV9TSVpFKSAhPSBQR19DT05UUk9MX0ZJTEVf U0laRSkKKwl7CisJCS8qIGlmIHdyaXRlIGRpZG4ndCBzZXQgZXJybm8sIGFzc3VtZSBwcm9ibGVt IGlzIG5vIGRpc2sgc3BhY2UgKi8KKwkJaWYgKGVycm5vID09IDApCisJCQllcnJubyA9IEVOT1NQ QzsKKwkJZnByaW50ZihzdGRlcnIsIF8oIiVzOiBjb3VsZCBub3Qgd3JpdGUgY29udHJvbCBmaWxl OiAlc1xuIiksCisJCQkJcHJvZ25hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCWV4aXQoMSk7CisJ fQorCisJaWYgKGZzeW5jKGZkKSAhPSAwKQorCXsKKwkJZnByaW50ZihzdGRlcnIsIF8oIiVzOiBm c3luYyBlcnJvcjogJXNcbiIpLCBwcm9nbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJZXhpdCgx KTsKKwl9CisKKwlpZiAoY2xvc2UoZmQpIDwgMCkKKwl7CisJCWZwcmludGYoc3RkZXJyLCBfKCIl czogY291bGQgbm90IGNsb3NlIGNvbnRyb2wgZmlsZTogJXNcbiIpLCBwcm9nbmFtZSwgc3RyZXJy b3IoZXJybm8pKTsKKwkJZXhpdCgxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCiBzY2FuX2ZpbGUo Y29uc3QgY2hhciAqZm4sIEJsb2NrTnVtYmVyIHNlZ21lbnRubykKIHsKIAlQR0FsaWduZWRCbG9j ayBidWY7CkBAIC04Nyw3ICsxNzYsMTEgQEAgc2Nhbl9maWxlKGNvbnN0IGNoYXIgKmZuLCBCbG9j a051bWJlciBzZWdtZW50bm8pCiAJaW50CQkJZjsKIAlCbG9ja051bWJlciBibG9ja25vOwogCi0J ZiA9IG9wZW4oZm4sIE9fUkRPTkxZIHwgUEdfQklOQVJZLCAwKTsKKwlBc3NlcnQoYWN0aW9uID09 IFBHX0FDVElPTl9FTkFCTEUgfHwKKwkJICAgYWN0aW9uID09IFBHX0FDVElPTl9DSEVDSyk7CisK KwlmID0gb3BlbihmbiwgYWN0aW9uID09IFBHX0FDVElPTl9FTkFCTEUgPyBPX1JEV1IgOiBPX1JE T05MWSB8IFBHX0JJTkFSWSwgMCk7CisKIAlpZiAoZiA8IDApCiAJewogCQlmcHJpbnRmKHN0ZGVy ciwgXygiJXM6IGNvdWxkIG5vdCBvcGVuIGZpbGUgXCIlc1wiOiAlc1xuIiksCkBAIC0xMTcsMTgg KzIxMCw0NyBAQCBzY2FuX2ZpbGUoY29uc3QgY2hhciAqZm4sIEJsb2NrTnVtYmVyIHNlZ21lbnRu bykKIAkJCWNvbnRpbnVlOwogCiAJCWNzdW0gPSBwZ19jaGVja3N1bV9wYWdlKGJ1Zi5kYXRhLCBi bG9ja25vICsgc2VnbWVudG5vICogUkVMU0VHX1NJWkUpOwotCQlpZiAoY3N1bSAhPSBoZWFkZXIt PnBkX2NoZWNrc3VtKQorCQlpZiAoYWN0aW9uID09IFBHX0FDVElPTl9DSEVDSykKIAkJewotCQkJ aWYgKENvbnRyb2xGaWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gPT0gUEdfREFUQV9DSEVDS1NV TV9WRVJTSU9OKQotCQkJCWZwcmludGYoc3RkZXJyLCBfKCIlczogY2hlY2tzdW0gdmVyaWZpY2F0 aW9uIGZhaWxlZCBpbiBmaWxlIFwiJXNcIiwgYmxvY2sgJXU6IGNhbGN1bGF0ZWQgY2hlY2tzdW0g JVggYnV0IGJsb2NrIGNvbnRhaW5zICVYXG4iKSwKLQkJCQkJCXByb2duYW1lLCBmbiwgYmxvY2tu bywgY3N1bSwgaGVhZGVyLT5wZF9jaGVja3N1bSk7Ci0JCQliYWRibG9ja3MrKzsKKwkJCWlmIChj c3VtICE9IGhlYWRlci0+cGRfY2hlY2tzdW0pCisJCQl7CisJCQkJaWYgKENvbnRyb2xGaWxlLT5k YXRhX2NoZWNrc3VtX3ZlcnNpb24gPT0gUEdfREFUQV9DSEVDS1NVTV9WRVJTSU9OKQorCQkJCQlm cHJpbnRmKHN0ZGVyciwgXygiJXM6IGNoZWNrc3VtIHZlcmlmaWNhdGlvbiBmYWlsZWQgaW4gZmls ZSBcIiVzXCIsIGJsb2NrICV1OiBjYWxjdWxhdGVkIGNoZWNrc3VtICVYIGJ1dCBibG9jayBjb250 YWlucyAlWFxuIiksCisJCQkJCQkJcHJvZ25hbWUsIGZuLCBibG9ja25vLCBjc3VtLCBoZWFkZXIt PnBkX2NoZWNrc3VtKTsKKwkJCQliYWRibG9ja3MrKzsKKwkJCX0KKwkJfQorCQllbHNlIGlmIChh Y3Rpb24gPT0gUEdfQUNUSU9OX0VOQUJMRSkKKwkJeworCQkJLyogU2V0IGNoZWNrc3VtIGluIHBh Z2UgaGVhZGVyICovCisJCQloZWFkZXItPnBkX2NoZWNrc3VtID0gY3N1bTsKKworCQkJLyogU2Vl ayBiYWNrIHRvIGJlZ2lubmluZyBvZiBibG9jayAqLworCQkJaWYgKGxzZWVrKGYsIC1CTENLU1os IFNFRUtfQ1VSKSA8IDApCisJCQl7CisJCQkJZnByaW50ZihzdGRlcnIsIF8oIiVzOiBzZWVrIGZh aWxlZCBmb3IgYmxvY2sgJWQgaW4gZmlsZSBcIiVzXCI6ICVzXG4iKSwgcHJvZ25hbWUsIGJsb2Nr bm8sIGZuLCBzdHJlcnJvcihlcnJubykpOworCQkJCWV4aXQoMSk7CisJCQl9CisKKwkJCS8qIFdy aXRlIGJsb2NrIHdpdGggY2hlY2tzdW0gKi8KKwkJCWlmICh3cml0ZShmLCBidWYuZGF0YSwgQkxD S1NaKSAhPSBCTENLU1opCisJCQl7CisJCQkJZnByaW50ZihzdGRlcnIsICIlczogY291bGQgbm90 IHVwZGF0ZSBjaGVja3N1bSBvZiBibG9jayAlZCBpbiBmaWxlIFwiJXNcIjogJXNcbiIsCisJCQkJ CQlwcm9nbmFtZSwgYmxvY2tubywgZm4sIHN0cmVycm9yKGVycm5vKSk7CisJCQkJZXhpdCgxKTsK KwkJCX0KIAkJfQogCX0KIAogCWlmICh2ZXJib3NlKQotCQlmcHJpbnRmKHN0ZGVyciwKLQkJCQlf KCIlczogY2hlY2tzdW1zIHZlcmlmaWVkIGluIGZpbGUgXCIlc1wiXG4iKSwgcHJvZ25hbWUsIGZu KTsKKwl7CisJCWlmIChhY3Rpb24gPT0gUEdfQUNUSU9OX0NIRUNLKQorCQkJZnByaW50ZihzdGRl cnIsCisJCQkJCV8oIiVzOiBjaGVja3N1bXMgdmVyaWZpZWQgaW4gZmlsZSBcIiVzXCJcbiIpLCBw cm9nbmFtZSwgZm4pOworCQlpZiAoYWN0aW9uID09IFBHX0FDVElPTl9FTkFCTEUpCisJCQlmcHJp bnRmKHN0ZGVyciwKKwkJCQkJXygiJXM6IGNoZWNrc3VtcyBlbmFibGVkIGluIGZpbGUgXCIlc1wi XG4iKSwgcHJvZ25hbWUsIGZuKTsKKwl9CiAKIAljbG9zZShmKTsKIH0KQEAgLTIzMCwxNyArMzUy LDIyIEBAIGludAogbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogCXN0YXRpYyBzdHJ1 Y3Qgb3B0aW9uIGxvbmdfb3B0aW9uc1tdID0geworCQl7ImNoZWNrIiwgbm9fYXJndW1lbnQsIE5V TEwsICdjJ30sCiAJCXsicGdkYXRhIiwgcmVxdWlyZWRfYXJndW1lbnQsIE5VTEwsICdEJ30sCisJ CXsiZGlzYWJsZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnZCd9LAorCQl7ImVuYWJsZSIsIG5vX2Fy Z3VtZW50LCBOVUxMLCAnZSd9LAogCQl7InZlcmJvc2UiLCBub19hcmd1bWVudCwgTlVMTCwgJ3Yn fSwKIAkJe05VTEwsIDAsIE5VTEwsIDB9CiAJfTsKIAogCWNoYXIJICAgKkRhdGFEaXIgPSBOVUxM OworCWNoYXIJCXBpZF9maWxlW01BWFBHUEFUSF07CiAJaW50CQkJYzsKIAlpbnQJCQlvcHRpb25f aW5kZXg7CisJaW50CQkJcGlkZjsKIAlib29sCQljcmNfb2s7CiAKLQlzZXRfcGdsb2NhbGVfcGdz ZXJ2aWNlKGFyZ3ZbMF0sIFBHX1RFWFRET01BSU4oInBnX3ZlcmlmeV9jaGVja3N1bXMiKSk7CisJ c2V0X3BnbG9jYWxlX3Bnc2VydmljZShhcmd2WzBdLCBQR19URVhURE9NQUlOKCJwZ19jaGVja3N1 bXMiKSk7CiAKIAlwcm9nbmFtZSA9IGdldF9wcm9nbmFtZShhcmd2WzBdKTsKIApAQCAtMjUzLDE1 ICszODAsMjQgQEAgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogCQl9CiAJCWlmIChzdHJj bXAoYXJndlsxXSwgIi0tdmVyc2lvbiIpID09IDAgfHwgc3RyY21wKGFyZ3ZbMV0sICItViIpID09 IDApCiAJCXsKLQkJCXB1dHMoInBnX3ZlcmlmeV9jaGVja3N1bXMgKFBvc3RncmVTUUwpICIgUEdf VkVSU0lPTik7CisJCQlwdXRzKCJwZ19jaGVja3N1bXMgKFBvc3RncmVTUUwpICIgUEdfVkVSU0lP Tik7CiAJCQlleGl0KDApOwogCQl9CiAJfQogCi0Jd2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJn YywgYXJndiwgIkQ6cjp2IiwgbG9uZ19vcHRpb25zLCAmb3B0aW9uX2luZGV4KSkgIT0gLTEpCisJ d2hpbGUgKChjID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgImNEOmRlcjp2IiwgbG9uZ19vcHRp b25zLCAmb3B0aW9uX2luZGV4KSkgIT0gLTEpCiAJewogCQlzd2l0Y2ggKGMpCiAJCXsKKwkJCWNh c2UgJ2MnOgorCQkJCWFjdGlvbiA9IFBHX0FDVElPTl9DSEVDSzsKKwkJCQlicmVhazsKKwkJCWNh c2UgJ2QnOgorCQkJCWFjdGlvbiA9IFBHX0FDVElPTl9ESVNBQkxFOworCQkJCWJyZWFrOworCQkJ Y2FzZSAnZSc6CisJCQkJYWN0aW9uID0gUEdfQUNUSU9OX0VOQUJMRTsKKwkJCQlicmVhazsKIAkJ CWNhc2UgJ3YnOgogCQkJCXZlcmJvc2UgPSB0cnVlOwogCQkJCWJyZWFrOwpAQCAtMzA4LDYgKzQ0 NCwxNiBAQCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAJCWV4aXQoMSk7CiAJfQogCisJ LyogUmVsZmlsZW5vZGUgY2hlY2tpbmcgb25seSB3b3JrcyBpbiBjaGVjayBtb2RlICovCisJaWYg KGFjdGlvbiAhPSBQR19BQ1RJT05fQ0hFQ0sgJiYKKwkJb25seV9yZWxmaWxlbm9kZSkKKwl7CisJ CWZwcmludGYoc3RkZXJyLCBfKCIlczogcmVsZmlsZW5vZGUgb3B0aW9uIG9ubHkgcG9zc2libGUg d2l0aCBjaGVjayBhY3Rpb25cbiIpLCBwcm9nbmFtZSk7CisJCWZwcmludGYoc3RkZXJyLCBfKCJU cnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiIpLAorCQkJCXByb2duYW1l KTsKKwkJZXhpdCgxKTsKKwl9CisKIAkvKiBDaGVjayBpZiBjbHVzdGVyIGlzIHJ1bm5pbmcgKi8K IAlDb250cm9sRmlsZSA9IGdldF9jb250cm9sZmlsZShEYXRhRGlyLCBwcm9nbmFtZSwgJmNyY19v ayk7CiAJaWYgKCFjcmNfb2spCkBAIC0zMTksMjkgKzQ2NSw4NSBAQCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAJaWYgKENvbnRyb2xGaWxlLT5zdGF0ZSAhPSBEQl9TSFVURE9XTkVEICYm CiAJCUNvbnRyb2xGaWxlLT5zdGF0ZSAhPSBEQl9TSFVURE9XTkVEX0lOX1JFQ09WRVJZKQogCXsK LQkJZnByaW50ZihzdGRlcnIsIF8oIiVzOiBjbHVzdGVyIG11c3QgYmUgc2h1dCBkb3duIHRvIHZl cmlmeSBjaGVja3N1bXNcbiIpLCBwcm9nbmFtZSk7CisJCWZwcmludGYoc3RkZXJyLCBfKCIlczog Y2x1c3RlciBtdXN0IGJlIHNodXQgZG93blxuIiksIHByb2duYW1lKTsKKwkJZXhpdCgxKTsKKwl9 CisKKwkvKiBBbHNvIGNoZWNrIGZvciBwb3N0bWFzdGVyLnBpZCBmaWxlICovCisJc25wcmludGYo cGlkX2ZpbGUsIHNpemVvZihwaWRfZmlsZSksICIlcy9wb3N0bWFzdGVyLnBpZCIsIERhdGFEaXIp OworCXBpZGYgPSBvcGVuKHBpZF9maWxlLCBPX1JET05MWSwgMCk7CisJaWYgKHBpZGYgPCAwKQor CXsKKwkJLyoKKwkJICogaWYgdGhlIGVycm5vIGlzIEVOT0VOVCwgdGhlcmUgaXMgbm8gcGlkIGZp bGUgd2hpY2ggaXMgd2hhdCB3ZQorCQkgKiBleHBlY3QuICBPdGhlcndpc2UsIGl0IGV4aXRzIGJ1 dCB3ZSBjYW5ub3Qgb3BlbiBpdCBzbyBleGl0IHdpdGgKKwkJICogZmFpbHVyZS4KKwkJICovCisJ CWlmIChlcnJubyAhPSBFTk9FTlQpCisJCXsKKwkJCWZwcmludGYoc3RkZXJyLCBfKCIlczogcG9z dG1hc3Rlci5waWQgY2Fubm90IGJlIG9wZW5lZCBmb3IgcmVhZGluZzogJXNcbiIpLAorCQkJCQlw cm9nbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCWV4aXQoMSk7CisJCX0KKwl9CisJZWxzZQor CXsKKwkJZnByaW50ZihzdGRlcnIsIF8oIiVzOiBwb3N0bWFzdGVyLnBpZCBleGlzdHMsIGNsdXN0 ZXIgbXVzdCBiZSBzaHV0IGRvd25cbiIpLCBwcm9nbmFtZSk7CiAJCWV4aXQoMSk7CiAJfQogCi0J aWYgKENvbnRyb2xGaWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24gPT0gMCkKKwlpZiAoQ29udHJv bEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9PSAwICYmCisJCWFjdGlvbiA9PSBQR19BQ1RJ T05fQ0hFQ0spCiAJewogCQlmcHJpbnRmKHN0ZGVyciwgXygiJXM6IGRhdGEgY2hlY2tzdW1zIGFy ZSBub3QgZW5hYmxlZCBpbiBjbHVzdGVyXG4iKSwgcHJvZ25hbWUpOwogCQlleGl0KDEpOwogCX0K KwlpZiAoQ29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9PSAwICYmCisJCWFjdGlv biA9PSBQR19BQ1RJT05fRElTQUJMRSkKKwl7CisJCWZwcmludGYoc3RkZXJyLCBfKCIlczogZGF0 YSBjaGVja3N1bXMgYXJlIGFscmVhZHkgZGlzYWJsZWQgaW4gY2x1c3Rlci5cbiIpLCBwcm9nbmFt ZSk7CisJCWV4aXQoMSk7CisJfQorCWlmIChDb250cm9sRmlsZS0+ZGF0YV9jaGVja3N1bV92ZXJz aW9uID09IFBHX0RBVEFfQ0hFQ0tTVU1fVkVSU0lPTiAmJgorCQlhY3Rpb24gPT0gUEdfQUNUSU9O X0VOQUJMRSkKKwl7CisJCWZwcmludGYoc3RkZXJyLCBfKCIlczogZGF0YSBjaGVja3N1bXMgYXJl IGFscmVhZHkgZW5hYmxlZCBpbiBjbHVzdGVyLlxuIiksIHByb2duYW1lKTsKKwkJZXhpdCgxKTsK Kwl9CiAKLQkvKiBTY2FuIGFsbCBmaWxlcyAqLwotCXNjYW5fZGlyZWN0b3J5KERhdGFEaXIsICJn bG9iYWwiKTsKLQlzY2FuX2RpcmVjdG9yeShEYXRhRGlyLCAiYmFzZSIpOwotCXNjYW5fZGlyZWN0 b3J5KERhdGFEaXIsICJwZ190YmxzcGMiKTsKKwlpZiAoYWN0aW9uID09IFBHX0FDVElPTl9DSEVD SyB8fCBhY3Rpb24gPT0gUEdfQUNUSU9OX0VOQUJMRSkKKwl7CisJCS8qIE9wZXJhdGUgb24gYWxs IGZpbGVzICovCisJCXNjYW5fZGlyZWN0b3J5KERhdGFEaXIsICJnbG9iYWwiKTsKKwkJc2Nhbl9k aXJlY3RvcnkoRGF0YURpciwgImJhc2UiKTsKKwkJc2Nhbl9kaXJlY3RvcnkoRGF0YURpciwgInBn X3RibHNwYyIpOworCisJCXByaW50ZihfKCJDaGVja3N1bSBvcGVyYXRpb24gY29tcGxldGVkXG4i KSk7CisJCXByaW50ZihfKCJGaWxlcyBzY2FubmVkOiAgJXNcbiIpLCBwc3ByaW50ZihJTlQ2NF9G T1JNQVQsIGZpbGVzKSk7CisJCXByaW50ZihfKCJCbG9ja3Mgc2Nhbm5lZDogJXNcbiIpLCBwc3By aW50ZihJTlQ2NF9GT1JNQVQsIGJsb2NrcykpOworCQlpZiAoYWN0aW9uID09IFBHX0FDVElPTl9D SEVDSykKKwkJeworCQkJcHJpbnRmKF8oIkJhZCBjaGVja3N1bXM6ICAlc1xuIiksIHBzcHJpbnRm KElOVDY0X0ZPUk1BVCwgYmFkYmxvY2tzKSk7CisJCQlwcmludGYoXygiRGF0YSBjaGVja3N1bSB2 ZXJzaW9uOiAlZFxuIiksIENvbnRyb2xGaWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNpb24pOwogCi0J cHJpbnRmKF8oIkNoZWNrc3VtIHNjYW4gY29tcGxldGVkXG4iKSk7Ci0JcHJpbnRmKF8oIkRhdGEg Y2hlY2tzdW0gdmVyc2lvbjogJWRcbiIpLCBDb250cm9sRmlsZS0+ZGF0YV9jaGVja3N1bV92ZXJz aW9uKTsKLQlwcmludGYoXygiRmlsZXMgc2Nhbm5lZDogICVzXG4iKSwgcHNwcmludGYoSU5UNjRf Rk9STUFULCBmaWxlcykpOwotCXByaW50ZihfKCJCbG9ja3Mgc2Nhbm5lZDogJXNcbiIpLCBwc3By aW50ZihJTlQ2NF9GT1JNQVQsIGJsb2NrcykpOwotCXByaW50ZihfKCJCYWQgY2hlY2tzdW1zOiAg JXNcbiIpLCBwc3ByaW50ZihJTlQ2NF9GT1JNQVQsIGJhZGJsb2NrcykpOworCQkJaWYgKGJhZGJs b2NrcyA+IDApCisJCQkJcmV0dXJuIDE7CisJCX0KKwl9CiAKLQlpZiAoYmFkYmxvY2tzID4gMCkK LQkJcmV0dXJuIDE7CisJaWYgKGFjdGlvbiA9PSBQR19BQ1RJT05fRU5BQkxFIHx8IGFjdGlvbiA9 PSBQR19BQ1RJT05fRElTQUJMRSkKKwl7CisJCS8qIFVwZGF0ZSBjb250cm9sIGZpbGUgKi8KKwkJ Q29udHJvbEZpbGUtPmRhdGFfY2hlY2tzdW1fdmVyc2lvbiA9IGFjdGlvbiA9PSBQR19BQ1RJT05f RU5BQkxFID8gUEdfREFUQV9DSEVDS1NVTV9WRVJTSU9OIDogMDsKKwkJdXBkYXRlQ29udHJvbEZp bGUoRGF0YURpciwgQ29udHJvbEZpbGUpOworCQlmc3luY19wZ2RhdGEoRGF0YURpciwgcHJvZ25h bWUsIFBHX1ZFUlNJT05fTlVNKTsKKwkJaWYgKHZlcmJvc2UpCisJCQlwcmludGYoXygiRGF0YSBj aGVja3N1bSB2ZXJzaW9uOiAlZFxuIiksIENvbnRyb2xGaWxlLT5kYXRhX2NoZWNrc3VtX3ZlcnNp b24pOworCQlpZiAoYWN0aW9uID09IFBHX0FDVElPTl9FTkFCTEUpCisJCQlwcmludGYoXygiQ2hl Y2tzdW1zIGVuYWJsZWQgaW4gY2x1c3RlclxuIikpOworCQllbHNlCisJCQlwcmludGYoXygiQ2hl Y2tzdW1zIGRpc2FibGVkIGluIGNsdXN0ZXJcbiIpKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfdmVyaWZ5X2NoZWNrc3Vtcy90LzAwMl9hY3Rpb25zLnBsIGIv c3JjL2Jpbi9wZ192ZXJpZnlfY2hlY2tzdW1zL3QvMDAyX2FjdGlvbnMucGwKaW5kZXggNTI1MGI1 YTcyOC4uYWYyMGM2MDQ0NSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ192ZXJpZnlfY2hlY2tzdW1z L3QvMDAyX2FjdGlvbnMucGwKKysrIGIvc3JjL2Jpbi9wZ192ZXJpZnlfY2hlY2tzdW1zL3QvMDAy X2FjdGlvbnMucGwKQEAgLTUsNyArNSw3IEBAIHVzZSBzdHJpY3Q7CiB1c2Ugd2FybmluZ3M7CiB1 c2UgUG9zdGdyZXNOb2RlOwogdXNlIFRlc3RMaWI7Ci11c2UgVGVzdDo6TW9yZSB0ZXN0cyA9PiA0 NTsKK3VzZSBUZXN0OjpNb3JlIHRlc3RzID0+IDU5OwogCiAKICMgVXRpbGl0eSByb3V0aW5lIHRv IGNyZWF0ZSBhbmQgY2hlY2sgYSB0YWJsZSB3aXRoIGNvcnJ1cHRlZCBjaGVja3N1bXMKQEAgLTM4 LDggKzM4LDggQEAgc3ViIGNoZWNrX3JlbGF0aW9uX2NvcnJ1cHRpb24KIAogCSMgQ2hlY2tzdW1z IGFyZSBjb3JyZWN0IGZvciBzaW5nbGUgcmVsZmlsZW5vZGUgYXMgdGhlIHRhYmxlIGlzIG5vdAog CSMgY29ycnVwdGVkIHlldC4KLQljb21tYW5kX29rKFsncGdfdmVyaWZ5X2NoZWNrc3VtcycsICAn LUQnLCAkcGdkYXRhLAotCQknLXInLCAkcmVsZmlsZW5vZGVfY29ycnVwdGVkXSwKKwljb21tYW5k X29rKFsncGdfdmVyaWZ5X2NoZWNrc3VtcycsICAnLWMnLCAnLUQnLCAkcGdkYXRhLCAnLXInLAor CQkJICAgJHJlbGZpbGVub2RlX2NvcnJ1cHRlZF0sCiAJCSJzdWNjZWVkcyBmb3Igc2luZ2xlIHJl bGZpbGVub2RlIG9uIHRhYmxlc3BhY2UgJHRhYmxlc3BhY2Ugd2l0aCBvZmZsaW5lIGNsdXN0ZXIi KTsKIAogCSMgVGltZSB0byBjcmVhdGUgc29tZSBjb3JydXB0aW9uCkBAIC00OSwxNSArNDksMTUg QEAgc3ViIGNoZWNrX3JlbGF0aW9uX2NvcnJ1cHRpb24KIAljbG9zZSAkZmlsZTsKIAogCSMgQ2hl Y2tzdW0gY2hlY2tzIG9uIHNpbmdsZSByZWxmaWxlbm9kZSBmYWlsCi0JJG5vZGUtPmNvbW1hbmRf Y2hlY2tzX2FsbChbICdwZ192ZXJpZnlfY2hlY2tzdW1zJywgJy1EJywgJHBnZGF0YSwgJy1yJywK LQkJCQkJCQkJJHJlbGZpbGVub2RlX2NvcnJ1cHRlZF0sCisJJG5vZGUtPmNvbW1hbmRfY2hlY2tz X2FsbChbICdwZ192ZXJpZnlfY2hlY2tzdW1zJywgJy1jJywgJy1EJywgJHBnZGF0YSwKKwkJCQkJ CQkgICctcicsICRyZWxmaWxlbm9kZV9jb3JydXB0ZWRdLAogCQkJCQkJCSAgMSwKIAkJCQkJCQkg IFtxci9CYWQgY2hlY2tzdW1zOi4qMS9dLAogCQkJCQkJCSAgW3FyL2NoZWNrc3VtIHZlcmlmaWNh dGlvbiBmYWlsZWQvXSwKIAkJCQkJCQkgICJmYWlscyB3aXRoIGNvcnJ1cHRlZCBkYXRhIGZvciBz aW5nbGUgcmVsZmlsZW5vZGUgb24gdGFibGVzcGFjZSAkdGFibGVzcGFjZSIpOwogCiAJIyBHbG9i YWwgY2hlY2tzdW0gY2hlY2tzIGZhaWwgYXMgd2VsbAotCSRub2RlLT5jb21tYW5kX2NoZWNrc19h bGwoWyAncGdfdmVyaWZ5X2NoZWNrc3VtcycsICctRCcsICRwZ2RhdGFdLAorCSRub2RlLT5jb21t YW5kX2NoZWNrc19hbGwoWyAncGdfdmVyaWZ5X2NoZWNrc3VtcycsICctYycsICctRCcsICRwZ2Rh dGFdLAogCQkJCQkJCSAgMSwKIAkJCQkJCQkgIFtxci9CYWQgY2hlY2tzdW1zOi4qMS9dLAogCQkJ CQkJCSAgW3FyL2NoZWNrc3VtIHZlcmlmaWNhdGlvbiBmYWlsZWQvXSwKQEAgLTY3LDIyICs2Nywy MiBAQCBzdWIgY2hlY2tfcmVsYXRpb25fY29ycnVwdGlvbgogCSRub2RlLT5zdGFydDsKIAkkbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFICR0YWJsZTsiKTsKIAkkbm9kZS0+ c3RvcDsKLQkkbm9kZS0+Y29tbWFuZF9vayhbJ3BnX3ZlcmlmeV9jaGVja3N1bXMnLCAnLUQnLCAk cGdkYXRhXSwKKwkkbm9kZS0+Y29tbWFuZF9vayhbJ3BnX3ZlcmlmeV9jaGVja3N1bXMnLCAnLWMn LCAnLUQnLCAkcGdkYXRhXSwKIAkgICAgICAgICJzdWNjZWVkcyBhZ2FpbiBhZnRlciB0YWJsZSBk cm9wIG9uIHRhYmxlc3BhY2UgJHRhYmxlc3BhY2UiKTsKIAogCSRub2RlLT5zdGFydDsKIAlyZXR1 cm47CiB9CiAKLSMgSW5pdGlhbGl6ZSBub2RlIHdpdGggY2hlY2tzdW1zIGVuYWJsZWQuCisjIElu aXRpYWxpemUgbm9kZSB3aXRoIGNoZWNrc3VtcyBkaXNhYmxlZC4KIG15ICRub2RlID0gZ2V0X25l d19ub2RlKCdub2RlX2NoZWNrc3VtJyk7Ci0kbm9kZS0+aW5pdChleHRyYSA9PiBbJy0tZGF0YS1j aGVja3N1bXMnXSk7Ciskbm9kZS0+aW5pdCgpOwogbXkgJHBnZGF0YSA9ICRub2RlLT5kYXRhX2Rp cjsKIAotIyBDb250cm9sIGZpbGUgc2hvdWxkIGtub3cgdGhhdCBjaGVja3N1bXMgYXJlIGVuYWJs ZWQuCisjIENvbnRyb2wgZmlsZSBzaG91bGQga25vdyB0aGF0IGNoZWNrc3VtcyBhcmUgZGlzYWJs ZWQuCiBjb21tYW5kX2xpa2UoWydwZ19jb250cm9sZGF0YScsICRwZ2RhdGFdLAotCSAgICAgcXIv RGF0YSBwYWdlIGNoZWNrc3VtIHZlcnNpb246LioxLywKLQkJICdjaGVja3N1bXMgZW5hYmxlZCBp biBjb250cm9sIGZpbGUnKTsKKwkgICAgIHFyL0RhdGEgcGFnZSBjaGVja3N1bSB2ZXJzaW9uOi4q MC8sCisJCSAnY2hlY2tzdW1zIGRpc2FibGVkIGluIGNvbnRyb2wgZmlsZScpOwogCiAjIFRoZXNl IGFyZSBjb3JyZWN0IGJ1dCBlbXB0eSBmaWxlcywgc28gdGhleSBzaG91bGQgcGFzcyB0aHJvdWdo LgogYXBwZW5kX3RvX2ZpbGUgIiRwZ2RhdGEvZ2xvYmFsLzk5OTk5IiwgIiI7CkBAIC0xMDAsMTMg KzEwMCw0OSBAQCBhcHBlbmRfdG9fZmlsZSAiJHBnZGF0YS9nbG9iYWwvcGdzcWxfdG1wXzEyMyIs ICJmb28iOwogbWtkaXIgIiRwZ2RhdGEvZ2xvYmFsL3Bnc3FsX3RtcCI7CiBhcHBlbmRfdG9fZmls ZSAiJHBnZGF0YS9nbG9iYWwvcGdzcWxfdG1wLzEuMSIsICJmb28iOwogCisjIEVuYWJsZSBjaGVj a3N1bXMKK2NvbW1hbmRfb2soWydwZ192ZXJpZnlfY2hlY2tzdW1zJywgJy1lJywgJy1EJywgJHBn ZGF0YV0sCisJCSAgICJjaGVja3N1bXMgc3VjY2Vzc2Z1bGx5IGVuYWJsZWQgaW4gY2x1c3RlciIp OworCisjIENvbnRyb2wgZmlsZSBzaG91bGQga25vdyB0aGF0IGNoZWNrc3VtcyBhcmUgZW5hYmxl ZC4KK2NvbW1hbmRfbGlrZShbJ3BnX2NvbnRyb2xkYXRhJywgJHBnZGF0YV0sCisJICAgICBxci9E YXRhIHBhZ2UgY2hlY2tzdW0gdmVyc2lvbjouKjEvLAorCQkgJ2NoZWNrc3VtcyBlbmFibGVkIGlu IGNvbnRyb2wgZmlsZScpOworCisjIERpc2FibGUgY2hlY2tzdW1zIGFnYWluCitjb21tYW5kX29r KFsncGdfdmVyaWZ5X2NoZWNrc3VtcycsICctZCcsICctRCcsICRwZ2RhdGFdLAorCQkgICAiY2hl Y2tzdW1zIHN1Y2Nlc3NmdWxseSBkaXNhYmxlZCBpbiBjbHVzdGVyIik7CisKKyMgQ29udHJvbCBm aWxlIHNob3VsZCBrbm93IHRoYXQgY2hlY2tzdW1zIGFyZSBkaXNhYmxlZC4KK2NvbW1hbmRfbGlr ZShbJ3BnX2NvbnRyb2xkYXRhJywgJHBnZGF0YV0sCisJICAgICBxci9EYXRhIHBhZ2UgY2hlY2tz dW0gdmVyc2lvbjouKjAvLAorCQkgJ2NoZWNrc3VtcyBkaXNhYmxlZCBpbiBjb250cm9sIGZpbGUn KTsKKworIyBFbmFibGUgY2hlY2tzdW1zIGFnYWluIHdpdGggbG9uZyBvcHRpb24KK2NvbW1hbmRf b2soWydwZ192ZXJpZnlfY2hlY2tzdW1zJywgJy0tZW5hYmxlJywgJy1EJywgJHBnZGF0YV0sCisJ CSAgICJjaGVja3N1bXMgc3VjY2Vzc2Z1bGx5IGVuYWJsZWQgaW4gY2x1c3RlciIpOworCisjIENv bnRyb2wgZmlsZSBzaG91bGQga25vdyB0aGF0IGNoZWNrc3VtcyBhcmUgZW5hYmxlZC4KK2NvbW1h bmRfbGlrZShbJ3BnX2NvbnRyb2xkYXRhJywgJHBnZGF0YV0sCisJICAgICBxci9EYXRhIHBhZ2Ug Y2hlY2tzdW0gdmVyc2lvbjouKjEvLAorCQkgJ2NoZWNrc3VtcyBlbmFibGVkIGluIGNvbnRyb2wg ZmlsZScpOworCiAjIENoZWNrc3VtcyBwYXNzIG9uIGEgbmV3bHktY3JlYXRlZCBjbHVzdGVyCi1j b21tYW5kX29rKFsncGdfdmVyaWZ5X2NoZWNrc3VtcycsICAnLUQnLCAkcGdkYXRhXSwKK2NvbW1h bmRfb2soWydwZ192ZXJpZnlfY2hlY2tzdW1zJywgJy1jJywgJy1EJywgJHBnZGF0YV0sCiAJCSAg ICJzdWNjZWVkcyB3aXRoIG9mZmxpbmUgY2x1c3RlciIpOwogCisjIENoZWNrc3VtcyBhcmUgdmVy aWZpZWQgaWYgbm8gb3RoZXIgYXJndW1lbnRzIGFyZSBzcGVjaWZpZWQKK2NvbW1hbmRfb2soWydw Z192ZXJpZnlfY2hlY2tzdW1zJywgJy1EJywgJHBnZGF0YV0sCisJCSAgICJ2ZXJpZmllcyBjaGVj a3N1bXMgYXMgZGVmYXVsdCBhY3Rpb24iKTsKKworIyBTcGVjaWZpYyByZWxhdGlvbiBmaWxlcyBj YW5ub3QgYmUgcmVxdWVzdGVkIHdoZW4gYWN0aW9uIGlzIGRpc2FibGUKK2NvbW1hbmRfZmFpbHMo WydwZ192ZXJpZnlfY2hlY2tzdW1zJywgJy1kJywgJy1yJywgJzEyMzQnLCAnLUQnLAorCQkJICAk cGdkYXRhXSwKKwkJCSAgImZhaWxzIHdoZW4gcmVsZmlsbm9kZXMgYXJlIHJlcXVlc3RlZCBhbmQg YWN0aW9uIGlzIG5vdCB2ZXJpZnkiKTsKKwogIyBDaGVja3MgY2Fubm90IGhhcHBlbiB3aXRoIGFu IG9ubGluZSBjbHVzdGVyCiAkbm9kZS0+c3RhcnQ7Ci1jb21tYW5kX2ZhaWxzKFsncGdfdmVyaWZ5 X2NoZWNrc3VtcycsICAnLUQnLCAkcGdkYXRhXSwKK2NvbW1hbmRfZmFpbHMoWydwZ192ZXJpZnlf Y2hlY2tzdW1zJywgJy1jJywgJy1EJywgJHBnZGF0YV0sCiAJCQkgICJmYWlscyB3aXRoIG9ubGlu ZSBjbHVzdGVyIik7CiAKICMgQ2hlY2sgY29ycnVwdGlvbiBvZiB0YWJsZSBvbiBkZWZhdWx0IHRh Ymxlc3BhY2UuCkBAIC0xMzMsNyArMTY5LDcgQEAgc3ViIGZhaWxfY29ycnVwdAogCW15ICRmaWxl X25hbWUgPSAiJHBnZGF0YS9nbG9iYWwvJGZpbGUiOwogCWFwcGVuZF90b19maWxlICRmaWxlX25h bWUsICJmb28iOwogCi0JJG5vZGUtPmNvbW1hbmRfY2hlY2tzX2FsbChbICdwZ192ZXJpZnlfY2hl Y2tzdW1zJywgJy1EJywgJHBnZGF0YV0sCisJJG5vZGUtPmNvbW1hbmRfY2hlY2tzX2FsbChbICdw Z192ZXJpZnlfY2hlY2tzdW1zJywgJy1jJywgJy1EJywgJHBnZGF0YV0sCiAJCQkJCQkgIDEsCiAJ CQkJCQkgIFtxci9eJC9dLAogCQkJCQkJICBbcXIvY291bGQgbm90IHJlYWQgYmxvY2sgMCBpbiBm aWxlLiokZmlsZVwiOi9dLAo= --=-9iKVU4+wACylvuKQSI9B--