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 1jpvw5-0007Gf-VI for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jun 2020 15:43:10 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jpvw4-0003I6-S3 for pgsql-hackers@arkaria.postgresql.org; Mon, 29 Jun 2020 15:43:08 +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 1jpvw4-0003Hz-CJ for pgsql-hackers@lists.postgresql.org; Mon, 29 Jun 2020 15:43:08 +0000 Received: from courriel-2.mines-paristech.fr ([77.158.173.19] helo=antispam-1.ensmp.fr) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jpvw0-0002qj-U9 for pgsql-hackers@lists.postgresql.org; Mon, 29 Jun 2020 15:43:07 +0000 Received: from smtp-5.mines-paristech.fr (smtp.mines-paristech.fr [77.158.173.146]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by antispam-1.ensmp.fr (antispam.mines-paristech.fr) with ESMTPS id CAD3055F8B; Mon, 29 Jun 2020 17:43:01 +0200 (CEST) Received: from petersbourg.cri.ensmp.fr (sfr-16.cri.mines-paristech.fr [77.158.180.240]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp-5.mines-paristech.fr (Postfix) with ESMTPSA id B2DB72016A; Mon, 29 Jun 2020 17:43:01 +0200 (CEST) Date: Mon, 29 Jun 2020 17:43:01 +0200 (CEST) From: Fabien COELHO X-X-Sender: fabien@pseudo Reply-To: Fabien COELHO To: PostgreSQL Developers cc: David Rowley , Tom Lane , Jaime Soler Subject: Re: pgbench and timestamps (bounced) Message-ID: User-Agent: Alpine 2.22 (DEB 394 2020-01-19) MIME-Version: 1.0 Content-Type: multipart/mixed; BOUNDARY="2056645051-1074725580-1593444804=:805678" Content-ID: X-CLAMAV-SCAN: ok X-VRSPAM-SCORE: -100 X-VRSPAM-STATE: legit X-VRSPAM-CAUSE: gggruggvucftvghtrhhoucdtuddrgeduhedrudelledgudelucetufdoteggodetrfcurfhrohhfihhlvgemucggtfgfnhhsuhgsshgtrhhisggvnecuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenucfjughrpeffhfhrvffukfgfgggtsehmtderredtredvnecuhfhrohhmpefhrggsihgvnhcuvefqgffnjffquceotghovghlhhhosegtrhhirdgvnhhsmhhprdhfrheqnecuggftrfgrthhtvghrnheptdejgeffudfggedvgfeuhfegleduffejtdffgeehudeivdelgffggeevudekleegnecukfhppeejjedrudehkedrudektddrvdegtdenucfrrghrrghmpehmohguvgepshhmthhpohhuth X-VRSPAM-EXTCAUSE: mhhouggvpehsmhhtphhouhht List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --2056645051-1074725580-1593444804=:805678 Content-Type: text/plain; CHARSET=US-ASCII; format=flowed Content-ID: [Resent on hackers for CF registration, sorry for the noise] Hello Tom, The attached patch fixes some of the underlying problems reported by delaying the :var to $1 substitution to the last possible moments, so that what variables are actually defined is known. PREPARE-ing is also delayed to after these substitutions are done. It requires a mutex around the commands, I tried to do some windows implementation which may or may not work. The attached patch fixes (2) & (3) for extended & prepared. I have a doubt about fixing (1) because it would be a significant behavioral change and it requires changing the replace routine significantly to check for quoting, comments, and so on. This means that currently ':var' is still broken under -M extended & prepared, I could only break it differently by providing a nicer error message and also break it under simple whereas it currently works there. I'm not thrilled by spending efforts to do that. The patches change the name of "parseQuery" to "makeVariablesParameters", because it was not actually parsing any query. Maybe the new name could be improved. In passing, there was a bug in how NULL was passed, which I tried to fix as well. >>> I don't often do much with pgbench and variables, but there are a few >>> things that surprise me here. >>> 1) That pgbench replaces variables within single quotes, and; >>> 2) that we still think it's a variable name when it starts with a digit, >>> and; >>> 3) We replace variables that are undefined. > >> Also (4) this only happens when in non-simple query mode --- the >> example works fine without "-M prepared". > > After looking around in the code, it seems like the core of the issue > is that pgbench.c's parseQuery() doesn't check whether a possible > variable name is actually defined, unlike assignVariables() which is > what does the same job in simple query mode. So that explains the > behavioral difference. Yes. > The reason for doing that probably was that parseQuery() is run when > the input file is read, so that relevant variables might not be set > yet. We could fix that by postponing the work to be done at first > execution of the query, as is already the case for PQprepare'ing the > query. Yep, done at first execution of the Command, so that variables are known. > Also, after further thought I realize that (1) absolutely is a bug > in the non-simple query modes, whatever you think about it in simple > mode. The non-simple modes are trying to pass the variable values > as extended-query-protocol parameters, and the backend is not going > to recognize $n inside a literal as being a parameter. Yep. See my comments above. > If we fixed (1) and (3) I think there wouldn't be any great need > to tighten up (2). I did (2) but not (1), for now. -- Fabien. --2056645051-1074725580-1593444804=:805678 Content-Type: text/x-diff; name=pgbench-var-fix-1.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=pgbench-var-fix-1.patch ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvcGdiZW5jaC5zZ21sIGIv ZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNoLnNnbWwNCmluZGV4IDhlNzI4ZGMw OTQuLjc0MzYyMTBmZDQgMTAwNjQ0DQotLS0gYS9kb2Mvc3JjL3NnbWwvcmVm L3BnYmVuY2guc2dtbA0KKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9wZ2JlbmNo LnNnbWwNCkBAIC05OTgsMTUgKzk5OCwxNCBAQCBwZ2JlbmNoIDxvcHRpb25h bD4gPHJlcGxhY2VhYmxlPm9wdGlvbnM8L3JlcGxhY2VhYmxlPiA8L29wdGlv bmFsPiA8cmVwbGFjZWFibGU+ZA0KICAgPHBhcmE+DQogICAgVGhlcmUgaXMg YSBzaW1wbGUgdmFyaWFibGUtc3Vic3RpdHV0aW9uIGZhY2lsaXR5IGZvciBz Y3JpcHQgZmlsZXMuDQogICAgVmFyaWFibGUgbmFtZXMgbXVzdCBjb25zaXN0 IG9mIGxldHRlcnMgKGluY2x1ZGluZyBub24tTGF0aW4gbGV0dGVycyksDQot ICAgZGlnaXRzLCBhbmQgdW5kZXJzY29yZXMuDQorICAgZGlnaXRzIChidXQg bm90IG9uIHRoZSBmaXJzdCBjaGFyYWN0ZXIpLCBhbmQgdW5kZXJzY29yZXMu DQogICAgVmFyaWFibGVzIGNhbiBiZSBzZXQgYnkgdGhlIGNvbW1hbmQtbGlu ZSA8b3B0aW9uPi1EPC9vcHRpb24+IG9wdGlvbiwNCiAgICBleHBsYWluZWQg YWJvdmUsIG9yIGJ5IHRoZSBtZXRhIGNvbW1hbmRzIGV4cGxhaW5lZCBiZWxv dy4NCiAgICBJbiBhZGRpdGlvbiB0byBhbnkgdmFyaWFibGVzIHByZXNldCBi eSA8b3B0aW9uPi1EPC9vcHRpb24+IGNvbW1hbmQtbGluZSBvcHRpb25zLA0K ICAgIHRoZXJlIGFyZSBhIGZldyB2YXJpYWJsZXMgdGhhdCBhcmUgcHJlc2V0 IGF1dG9tYXRpY2FsbHksIGxpc3RlZCBpbg0KICAgIDx4cmVmIGxpbmtlbmQ9 InBnYmVuY2gtYXV0b21hdGljLXZhcmlhYmxlcyIvPi4gQSB2YWx1ZSBzcGVj aWZpZWQgZm9yIHRoZXNlDQogICAgdmFyaWFibGVzIHVzaW5nIDxvcHRpb24+ LUQ8L29wdGlvbj4gdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBhdXRvbWF0 aWMgcHJlc2V0cy4NCi0gICBPbmNlIHNldCwgYSB2YXJpYWJsZSdzDQotICAg dmFsdWUgY2FuIGJlIGluc2VydGVkIGludG8gYSBTUUwgY29tbWFuZCBieSB3 cml0aW5nDQorICAgT25jZSBzZXQsIGEgdmFyaWFibGUncyB2YWx1ZSBjYW4g YmUgaW5zZXJ0ZWQgaW50byBhIFNRTCBjb21tYW5kIGJ5IHdyaXRpbmcNCiAg ICA8bGl0ZXJhbD46PC9saXRlcmFsPjxyZXBsYWNlYWJsZT52YXJpYWJsZW5h bWU8L3JlcGxhY2VhYmxlPi4gIFdoZW4gcnVubmluZyBtb3JlIHRoYW4NCiAg ICBvbmUgY2xpZW50IHNlc3Npb24sIGVhY2ggc2Vzc2lvbiBoYXMgaXRzIG93 biBzZXQgb2YgdmFyaWFibGVzLg0KICAgIDxhcHBsaWNhdGlvbj5wZ2JlbmNo PC9hcHBsaWNhdGlvbj4gc3VwcG9ydHMgdXAgdG8gMjU1IHZhcmlhYmxlIHVz ZXMgaW4gb25lDQpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVu Y2guYyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMNCmluZGV4IDA4YTU5 NDdhOWUuLjA5Y2NmMDVkYjUgMTAwNjQ0DQotLS0gYS9zcmMvYmluL3BnYmVu Y2gvcGdiZW5jaC5jDQorKysgYi9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5j DQpAQCAtMTE5LDEyICsxMTksMjQgQEAgdHlwZWRlZiBpbnQgcHRocmVhZF9h dHRyX3Q7DQogDQogc3RhdGljIGludAlwdGhyZWFkX2NyZWF0ZShwdGhyZWFk X3QgKnRocmVhZCwgcHRocmVhZF9hdHRyX3QgKmF0dHIsIHZvaWQgKigqc3Rh cnRfcm91dGluZSkgKHZvaWQgKiksIHZvaWQgKmFyZyk7DQogc3RhdGljIGlu dAlwdGhyZWFkX2pvaW4ocHRocmVhZF90IHRoLCB2b2lkICoqdGhyZWFkX3Jl dHVybik7DQorDQordHlwZWRlZiBIQU5ETEUgcHRocmVhZF9tdXRleF90Ow0K K3N0YXRpYyB2b2lkIHB0aHJlYWRfbXV0ZXhfaW5pdChwdGhyZWFkX211dGV4 X3QgKnBtLCB2b2lkICp1bnVzZWQpOw0KK3N0YXRpYyB2b2lkIHB0aHJlYWRf bXV0ZXhfbG9jayhwdGhyZWFkX211dGV4X3QgKnBtKTsNCitzdGF0aWMgdm9p ZCBwdGhyZWFkX211dGV4X3VubG9jayhwdGhyZWFkX211dGV4X3QgKnBtKTsN CitzdGF0aWMgdm9pZCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kocHRocmVhZF9t dXRleF90ICpwbSk7DQorDQogI2VsaWYgZGVmaW5lZChFTkFCTEVfVEhSRUFE X1NBRkVUWSkNCiAvKiBVc2UgcGxhdGZvcm0tZGVwZW5kZW50IHB0aHJlYWQg Y2FwYWJpbGl0eSAqLw0KICNpbmNsdWRlIDxwdGhyZWFkLmg+DQogI2Vsc2UN CiAvKiBObyB0aHJlYWRzIGltcGxlbWVudGF0aW9uLCB1c2Ugbm9uZSAoLWog MSkgKi8NCiAjZGVmaW5lIHB0aHJlYWRfdCB2b2lkICoNCisjZGVmaW5lIHB0 aHJlYWRfbXV0ZXhfdCB2b2lkICoNCisjZGVmaW5lIHB0aHJlYWRfbXV0ZXhf aW5pdChtLCBwKQ0KKyNkZWZpbmUgcHRocmVhZF9tdXRleF9sb2NrKG0pDQor I2RlZmluZSBwdGhyZWFkX211dGV4X3VubG9jayhtKQ0KKyNkZWZpbmUgcHRo cmVhZF9tdXRleF9kZXN0cm95KG0pDQogI2VuZGlmDQogDQogDQpAQCAtNDIy LDcgKzQzNCw3IEBAIHR5cGVkZWYgc3RydWN0DQogCWluc3RyX3RpbWUJdHhu X2JlZ2luOwkJLyogdXNlZCBmb3IgbWVhc3VyaW5nIHNjaGVkdWxlIGxhZyB0 aW1lcyAqLw0KIAlpbnN0cl90aW1lCXN0bXRfYmVnaW47CQkvKiB1c2VkIGZv ciBtZWFzdXJpbmcgc3RhdGVtZW50IGxhdGVuY2llcyAqLw0KIA0KLQlib29s CQlwcmVwYXJlZFtNQVhfU0NSSVBUU107CS8qIHdoZXRoZXIgY2xpZW50IHBy ZXBhcmVkIHRoZSBzY3JpcHQgKi8NCisJYm9vbCoJCXByZXBhcmVkW01BWF9T Q1JJUFRTXTsJLyogd2hldGhlciBjbGllbnQgcHJlcGFyZWQgdGhlIHNjcmlw dCBjb21tYW5kcyAqLw0KIA0KIAkvKiBwZXIgY2xpZW50IGNvbGxlY3RlZCBz dGF0cyAqLw0KIAlpbnQ2NAkJY250OwkJCS8qIGNsaWVudCB0cmFuc2FjdGlv biBjb3VudCwgZm9yIC10ICovDQpAQCAtNDcyLDcgKzQ4NCw3IEBAIHR5cGVk ZWYgc3RydWN0DQogICovDQogI2RlZmluZSBNQVhfQVJHUwkJMjU2DQogDQot dHlwZWRlZiBlbnVtIE1ldGFDb21tYW5kDQordHlwZWRlZiBlbnVtIE1ldGEN CiB7DQogCU1FVEFfTk9ORSwJCQkJCS8qIG5vdCBhIGtub3duIG1ldGEtY29t bWFuZCAqLw0KIAlNRVRBX1NFVCwJCQkJCS8qIFxzZXQgKi8NCkBAIC01MDMs NiArNTE1LDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKlFVRVJZTU9ERVtdID0g eyJzaW1wbGUiLCAiZXh0ZW5kZWQiLCAicHJlcGFyZWQifTsNCiAgKg0KICAq IGxpbmVzCQlUaGUgcmF3LCBwb3NzaWJseSBtdWx0aS1saW5lIGNvbW1hbmQg dGV4dC4gIFZhcmlhYmxlIHN1YnN0aXR1dGlvbg0KICAqCQkJCW5vdCBhcHBs aWVkLg0KKyAqIHN1YnN0aXR1dGVkCVdoZXRoZXIgY29tbWFuZAk6LXZhcmlh YmxlcyB3ZXJlIHN1YnN0aXR1dGVkIGZvcg0KKyAqCQkJCVFVRVJZX0VYVEVO REVEIGFuZCBRVUVSWV9QUkVQQVJFRA0KICAqIGZpcnN0X2xpbmUJQSBzaG9y dCwgc2luZ2xlLWxpbmUgZXh0cmFjdCBvZiAnbGluZXMnLCBmb3IgZXJyb3Ig cmVwb3J0aW5nLg0KICAqIHR5cGUJCQlTUUxfQ09NTUFORCBvciBNRVRBX0NP TU1BTkQNCiAgKiBtZXRhCQkJVGhlIHR5cGUgb2YgbWV0YS1jb21tYW5kLCB3 aXRoIE1FVEFfTk9ORS9HU0VUL0FTRVQgaWYgY29tbWFuZA0KQEAgLTUxNywx MCArNTMxLDEyIEBAIHN0YXRpYyBjb25zdCBjaGFyICpRVUVSWU1PREVbXSA9 IHsic2ltcGxlIiwgImV4dGVuZGVkIiwgInByZXBhcmVkIn07DQogICogYXNl dAkJCWRvIGdzZXQgb24gYWxsIHBvc3NpYmxlIHF1ZXJpZXMgb2YgYSBjb21i aW5lZCBxdWVyeSAoXDspLg0KICAqIGV4cHIJCQlQYXJzZWQgZXhwcmVzc2lv biwgaWYgbmVlZGVkLg0KICAqIHN0YXRzCQlUaW1lIHNwZW50IGluIHRoaXMg Y29tbWFuZC4NCisgKiBtdXRleAkJRm9yIGRlbGF5ZWQgaW5pdGlhbGl6YXRp b25zIG9mIFNRTCBjb21tYW5kcy4NCiAgKi8NCiB0eXBlZGVmIHN0cnVjdCBD b21tYW5kDQogew0KIAlQUUV4cEJ1ZmZlckRhdGEgbGluZXM7DQorCWJvb2wJ CXN1YnN0aXR1dGVkOw0KIAljaGFyCSAgICpmaXJzdF9saW5lOw0KIAlpbnQJ CQl0eXBlOw0KIAlNZXRhQ29tbWFuZCBtZXRhOw0KQEAgLTUyOSw2ICs1NDUs NyBAQCB0eXBlZGVmIHN0cnVjdCBDb21tYW5kDQogCWNoYXIJICAgKnZhcnBy ZWZpeDsNCiAJUGdCZW5jaEV4cHIgKmV4cHI7DQogCVNpbXBsZVN0YXRzIHN0 YXRzOw0KKwlwdGhyZWFkX211dGV4X3QJbXV0ZXg7DQogfSBDb21tYW5kOw0K IA0KIHR5cGVkZWYgc3RydWN0IFBhcnNlZFNjcmlwdA0KQEAgLTYxMyw2ICs2 MzAsNyBAQCBzdGF0aWMgdm9pZCBjbGVhcl9zb2NrZXRfc2V0KHNvY2tldF9z ZXQgKnNhKTsNCiBzdGF0aWMgdm9pZCBhZGRfc29ja2V0X3RvX3NldChzb2Nr ZXRfc2V0ICpzYSwgaW50IGZkLCBpbnQgaWR4KTsNCiBzdGF0aWMgaW50CXdh aXRfb25fc29ja2V0X3NldChzb2NrZXRfc2V0ICpzYSwgaW50NjQgdXNlY3Mp Ow0KIHN0YXRpYyBib29sIHNvY2tldF9oYXNfaW5wdXQoc29ja2V0X3NldCAq c2EsIGludCBmZCwgaW50IGlkeCk7DQorc3RhdGljIGJvb2wgbWFrZVZhcmlh Ymxlc1BhcmFtZXRlcnMoQ1N0YXRlICpzdCwgQ29tbWFuZCAqY21kKTsNCiAN CiANCiAvKiBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIG91ciBmbGV4IGxleGVy ICovDQpAQCAtMTI3Myw3ICsxMjkxLDcgQEAgbG9va3VwVmFyaWFibGUoQ1N0 YXRlICpzdCwgY2hhciAqbmFtZSkNCiANCiAvKiBHZXQgdGhlIHZhbHVlIG9m IGEgdmFyaWFibGUsIGluIHN0cmluZyBmb3JtOyByZXR1cm5zIE5VTEwgaWYg dW5rbm93biAqLw0KIHN0YXRpYyBjaGFyICoNCi1nZXRWYXJpYWJsZShDU3Rh dGUgKnN0LCBjaGFyICpuYW1lKQ0KK2dldFZhcmlhYmxlKENTdGF0ZSAqc3Qs IGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgKmlzbnVsbCkNCiB7DQogCVZhcmlh YmxlICAgKnZhcjsNCiAJY2hhcgkJc3RyaW5nZm9ybVs2NF07DQpAQCAtMTI4 Miw2ICsxMzAwLDkgQEAgZ2V0VmFyaWFibGUoQ1N0YXRlICpzdCwgY2hhciAq bmFtZSkNCiAJaWYgKHZhciA9PSBOVUxMKQ0KIAkJcmV0dXJuIE5VTEw7CQkJ Lyogbm90IGZvdW5kICovDQogDQorCWlmIChpc251bGwgIT0gTlVMTCkNCisJ CSppc251bGwgPSB2YXItPnZhbHVlLnR5cGUgPT0gUEdCVF9OVUxMOw0KKw0K IAlpZiAodmFyLT5zdmFsdWUpDQogCQlyZXR1cm4gdmFyLT5zdmFsdWU7CQkv KiB3ZSBoYXZlIGl0IGluIHN0cmluZyBmb3JtICovDQogDQpAQCAtMTM3Nyw2 ICsxMzk4LDkgQEAgbWFrZVZhcmlhYmxlVmFsdWUoVmFyaWFibGUgKnZhcikN CiAgKiAic3JjL2Jpbi9wZ2JlbmNoL2V4cHJzY2FuLmwiLiAgQWxzbyBzZWUg cGFyc2VWYXJpYWJsZSgpLCBiZWxvdy4NCiAgKg0KICAqIE5vdGU6IHRoaXMg c3RhdGljIGZ1bmN0aW9uIGlzIGNvcGllZCBmcm9tICJzcmMvYmluL3BzcWwv dmFyaWFibGVzLmMiDQorICogYnV0IGNoYW5nZWQgdG8gZGlzYWxsb3cgdmFy aWFibGUgbmFtZXMgc3RhcnRpbmcgd2l0aCBhIGZpZ3VyZS4NCisgKg0KKyAq IEZJWE1FIGRvZXMgdGhpcyBjaGFuZ2UgbmVlZHMgdG8gYmUgcmV2ZXJ0ZWQ/ DQogICovDQogc3RhdGljIGJvb2wNCiB2YWxpZF92YXJpYWJsZV9uYW1lKGNv bnN0IGNoYXIgKm5hbWUpDQpAQCAtMTM4Nyw2ICsxNDExLDE1IEBAIHZhbGlk X3ZhcmlhYmxlX25hbWUoY29uc3QgY2hhciAqbmFtZSkNCiAJaWYgKCpwdHIg PT0gJ1wwJykNCiAJCXJldHVybiBmYWxzZTsNCiANCisJLyogbXVzdCBub3Qg c3RhcnQgd2l0aCBbMC05XSAqLw0KKwlpZiAoSVNfSElHSEJJVF9TRVQoKnB0 cikgfHwNCisJCXN0cmNocigiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoi ICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiINCisJCQkgICAiXyIsICpw dHIpICE9IE5VTEwpDQorCQlwdHIrKzsNCisJZWxzZQ0KKwkJcmV0dXJuIGZh bHNlOw0KKw0KKwkvKiByZW1haW5kZXIgY2hhcmFjdGVycyBjYW4gaW5jbHVk ZSBbMC05XSAqLw0KIAl3aGlsZSAoKnB0cikNCiAJew0KIAkJaWYgKElTX0hJ R0hCSVRfU0VUKCpwdHIpIHx8DQpAQCAtMTUwMiw2ICsxNTM1LDE2IEBAIHB1 dFZhcmlhYmxlSW50KENTdGF0ZSAqc3QsIGNvbnN0IGNoYXIgKmNvbnRleHQs IGNoYXIgKm5hbWUsIGludDY0IHZhbHVlKQ0KIAlyZXR1cm4gcHV0VmFyaWFi bGVWYWx1ZShzdCwgY29udGV4dCwgbmFtZSwgJnZhbCk7DQogfQ0KIA0KKy8q IEFzc2lnbiB2YXJpYWJsZSB0byBOVUxMLCByZXR1cm4gZmFsc2Ugb24gYmFk IG5hbWUgKi8NCitzdGF0aWMgYm9vbA0KK3B1dFZhcmlhYmxlTnVsbChDU3Rh dGUgKnN0LCBjb25zdCBjaGFyICpjb250ZXh0LCBjaGFyICpuYW1lKQ0KK3sN CisJUGdCZW5jaFZhbHVlIHZhbDsNCisNCisJc2V0TnVsbFZhbHVlKCZ2YWwp Ow0KKwlyZXR1cm4gcHV0VmFyaWFibGVWYWx1ZShzdCwgY29udGV4dCwgbmFt ZSwgJnZhbCk7DQorfQ0KKw0KIC8qDQogICogUGFyc2UgYSBwb3NzaWJsZSB2 YXJpYWJsZSByZWZlcmVuY2UgKDp2YXJuYW1lKS4NCiAgKg0KQEAgLTE1MTYs MTQgKzE1NTksMjIgQEAgcGFyc2VWYXJpYWJsZShjb25zdCBjaGFyICpzcWws IGludCAqZWF0ZW4pDQogCWludAkJCWkgPSAwOw0KIAljaGFyCSAgICpuYW1l Ow0KIA0KLQlkbw0KLQl7DQorCS8qIHNraXAgJzonICovDQorCWkrKzsNCisN CisJLyogZmlyc3QgY2hhciBvZiBuYW1lIG11c3QgYmUgdmFsaWQgYnV0IG5v dCBbMC05XSAqLw0KKwlpZiAoSVNfSElHSEJJVF9TRVQoc3FsW2ldKSB8fA0K KwkJc3RyY2hyKCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIgImFiY2Rl ZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ig0KKwkJCSAgICJfIiwgc3FsW2ldKSAh PSBOVUxMKQ0KKwkJaSsrOw0KKwllbHNlDQorCQlyZXR1cm4gTlVMTDsNCisN CisJLyogdGhlbiBwcm9jZWVkIHRvIGNoZWNrIG90aGVyIGNoYXJzICovDQor CXdoaWxlIChJU19ISUdIQklUX1NFVChzcWxbaV0pIHx8DQorCQkgICBzdHJj aHIoIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIiAiYWJjZGVmZ2hpamts bW5vcHFyc3R1dnd4eXoiDQorCQkJCSAgIl8wMTIzNDU2Nzg5Iiwgc3FsW2ld KSAhPSBOVUxMKQ0KIAkJaSsrOw0KLQl9IHdoaWxlIChJU19ISUdIQklUX1NF VChzcWxbaV0pIHx8DQotCQkJIHN0cmNocigiQUJDREVGR0hJSktMTU5PUFFS U1RVVldYWVoiICJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiINCi0JCQkJ CSJfMDEyMzQ1Njc4OSIsIHNxbFtpXSkgIT0gTlVMTCk7DQotCWlmIChpID09 IDEpDQotCQlyZXR1cm4gTlVMTDsJCQkvKiBubyB2YWxpZCB2YXJpYWJsZSBu YW1lIGNoYXJzICovDQogDQogCW5hbWUgPSBwZ19tYWxsb2MoaSk7DQogCW1l bWNweShuYW1lLCAmc3FsWzFdLCBpIC0gMSk7DQpAQCAtMTU3NSw3ICsxNjI2 LDcgQEAgYXNzaWduVmFyaWFibGVzKENTdGF0ZSAqc3QsIGNoYXIgKnNxbCkN CiAJCQljb250aW51ZTsNCiAJCX0NCiANCi0JCXZhbCA9IGdldFZhcmlhYmxl KHN0LCBuYW1lKTsNCisJCXZhbCA9IGdldFZhcmlhYmxlKHN0LCBuYW1lLCBO VUxMKTsNCiAJCWZyZWUobmFtZSk7DQogCQlpZiAodmFsID09IE5VTEwpDQog CQl7DQpAQCAtMTU5MiwxMCArMTY0MywxMiBAQCBhc3NpZ25WYXJpYWJsZXMo Q1N0YXRlICpzdCwgY2hhciAqc3FsKQ0KIHN0YXRpYyB2b2lkDQogZ2V0UXVl cnlQYXJhbXMoQ1N0YXRlICpzdCwgY29uc3QgQ29tbWFuZCAqY29tbWFuZCwg Y29uc3QgY2hhciAqKnBhcmFtcykNCiB7DQotCWludAkJCWk7DQotDQotCWZv ciAoaSA9IDA7IGkgPCBjb21tYW5kLT5hcmdjIC0gMTsgaSsrKQ0KLQkJcGFy YW1zW2ldID0gZ2V0VmFyaWFibGUoc3QsIGNvbW1hbmQtPmFyZ3ZbaSArIDFd KTsNCisJZm9yIChpbnQgaSA9IDA7IGkgPCBjb21tYW5kLT5hcmdjIC0gMTsg aSsrKQ0KKwl7DQorCQlib29sCWlzbnVsbDsNCisJCWNoYXIgICAqc3ZhbCA9 IGdldFZhcmlhYmxlKHN0LCBjb21tYW5kLT5hcmd2W2kgKyAxXSwgJmlzbnVs bCk7DQorCQlwYXJhbXNbaV0gPSBpc251bGwgPyBOVUxMIDogc3ZhbDsNCisJ fQ0KIH0NCiANCiBzdGF0aWMgY2hhciAqDQpAQCAtMjUzNSw3ICsyNTg4LDcg QEAgcnVuU2hlbGxDb21tYW5kKENTdGF0ZSAqc3QsIGNoYXIgKnZhcmlhYmxl LCBjaGFyICoqYXJndiwgaW50IGFyZ2MpDQogCQl7DQogCQkJYXJnID0gYXJn dltpXSArIDE7CS8qIGEgc3RyaW5nIGxpdGVyYWwgc3RhcnRpbmcgd2l0aCBj b2xvbnMgKi8NCiAJCX0NCi0JCWVsc2UgaWYgKChhcmcgPSBnZXRWYXJpYWJs ZShzdCwgYXJndltpXSArIDEpKSA9PSBOVUxMKQ0KKwkJZWxzZSBpZiAoKGFy ZyA9IGdldFZhcmlhYmxlKHN0LCBhcmd2W2ldICsgMSwgTlVMTCkpID09IE5V TEwpDQogCQl7DQogCQkJcGdfbG9nX2Vycm9yKCIlczogdW5kZWZpbmVkIHZh cmlhYmxlIFwiJXNcIiIsIGFyZ3ZbMF0sIGFyZ3ZbaV0pOw0KIAkJCXJldHVy biBmYWxzZTsNCkBAIC0yNjU2LDEzICsyNzA5LDI5IEBAIHNlbmRDb21tYW5k KENTdGF0ZSAqc3QsIENvbW1hbmQgKmNvbW1hbmQpDQogCX0NCiAJZWxzZSBp ZiAocXVlcnltb2RlID09IFFVRVJZX0VYVEVOREVEKQ0KIAl7DQotCQljb25z dCBjaGFyICpzcWwgPSBjb21tYW5kLT5hcmd2WzBdOw0KIAkJY29uc3QgY2hh ciAqcGFyYW1zW01BWF9BUkdTXTsNCiANCisJCS8qIGRvIG5vdCB0cnkgdGhl IG11dGV4IHVubGVzcyBpdCB3aWxsIGJlIG5lY2Vzc2FyeSAqLw0KKwkJaWYg KCFjb21tYW5kLT5zdWJzdGl0dXRlZCkNCisJCXsNCisJCQlwdGhyZWFkX211 dGV4X2xvY2soJmNvbW1hbmQtPm11dGV4KTsNCisJCQlpZiAoIWNvbW1hbmQt PnN1YnN0aXR1dGVkKQ0KKwkJCXsNCisJCQkJaWYgKCFtYWtlVmFyaWFibGVz UGFyYW1ldGVycyhzdCwgY29tbWFuZCkpDQorCQkJCXsNCisJCQkJCXBnX2xv Z19mYXRhbCgiY2xpZW50ICVkIHNjcmlwdCAlcyBjb21tYW5kICVkIHBnYmVu Y2ggdmFyaWFibGUgc3Vic3RpdHV0aW9uIGZhaWxlZCIsDQorCQkJCQkJCQkg c3QtPmlkLCBzcWxfc2NyaXB0W3N0LT51c2VfZmlsZV0uZGVzYywgc3QtPmNv bW1hbmQpOw0KKwkJCQkJZXhpdCgxKTsNCisJCQkJfQ0KKwkJCQljb21tYW5k LT5zdWJzdGl0dXRlZCA9IHRydWU7DQorCQkJfQ0KKwkJCXB0aHJlYWRfbXV0 ZXhfdW5sb2NrKCZjb21tYW5kLT5tdXRleCk7DQorCQl9DQorDQogCQlnZXRR dWVyeVBhcmFtcyhzdCwgY29tbWFuZCwgcGFyYW1zKTsNCiANCi0JCXBnX2xv Z19kZWJ1ZygiY2xpZW50ICVkIHNlbmRpbmcgJXMiLCBzdC0+aWQsIHNxbCk7 DQotCQlyID0gUFFzZW5kUXVlcnlQYXJhbXMoc3QtPmNvbiwgc3FsLCBjb21t YW5kLT5hcmdjIC0gMSwNCisJCXBnX2xvZ19kZWJ1ZygiY2xpZW50ICVkIHNl bmRpbmcgJXMiLCBzdC0+aWQsIGNvbW1hbmQtPmFyZ3ZbMF0pOw0KKwkJciA9 IFBRc2VuZFF1ZXJ5UGFyYW1zKHN0LT5jb24sIGNvbW1hbmQtPmFyZ3ZbMF0s IGNvbW1hbmQtPmFyZ2MgLSAxLA0KIAkJCQkJCQkgIE5VTEwsIHBhcmFtcywg TlVMTCwgTlVMTCwgMCk7DQogCX0NCiAJZWxzZSBpZiAocXVlcnltb2RlID09 IFFVRVJZX1BSRVBBUkVEKQ0KQEAgLTI2NzAsMzEgKzI3MzksNDIgQEAgc2Vu ZENvbW1hbmQoQ1N0YXRlICpzdCwgQ29tbWFuZCAqY29tbWFuZCkNCiAJCWNo YXIJCW5hbWVbTUFYX1BSRVBBUkVfTkFNRV07DQogCQljb25zdCBjaGFyICpw YXJhbXNbTUFYX0FSR1NdOw0KIA0KLQkJaWYgKCFzdC0+cHJlcGFyZWRbc3Qt PnVzZV9maWxlXSkNCisJCS8qIGRvIG5vdCB0cnkgdGhlIG11dGV4IHVubGVz cyBpdCB3aWxsIGJlIG5lY2Vzc2FyeSAqLw0KKwkJaWYgKCFjb21tYW5kLT5z dWJzdGl0dXRlZCkNCiAJCXsNCi0JCQlpbnQJCQlqOw0KLQkJCUNvbW1hbmQg ICAqKmNvbW1hbmRzID0gc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVdLmNvbW1h bmRzOw0KLQ0KLQkJCWZvciAoaiA9IDA7IGNvbW1hbmRzW2pdICE9IE5VTEw7 IGorKykNCisJCQlwdGhyZWFkX211dGV4X2xvY2soJmNvbW1hbmQtPm11dGV4 KTsNCisJCQlpZiAoIWNvbW1hbmQtPnN1YnN0aXR1dGVkKQ0KIAkJCXsNCi0J CQkJUEdyZXN1bHQgICAqcmVzOw0KLQkJCQljaGFyCQluYW1lW01BWF9QUkVQ QVJFX05BTUVdOw0KLQ0KLQkJCQlpZiAoY29tbWFuZHNbal0tPnR5cGUgIT0g U1FMX0NPTU1BTkQpDQotCQkJCQljb250aW51ZTsNCi0JCQkJcHJlcGFyZWRT dGF0ZW1lbnROYW1lKG5hbWUsIHN0LT51c2VfZmlsZSwgaik7DQotCQkJCXJl cyA9IFBRcHJlcGFyZShzdC0+Y29uLCBuYW1lLA0KLQkJCQkJCQkJY29tbWFu ZHNbal0tPmFyZ3ZbMF0sIGNvbW1hbmRzW2pdLT5hcmdjIC0gMSwgTlVMTCk7 DQotCQkJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPTU1B TkRfT0spDQotCQkJCQlwZ19sb2dfZXJyb3IoIiVzIiwgUFFlcnJvck1lc3Nh Z2Uoc3QtPmNvbikpOw0KLQkJCQlQUWNsZWFyKHJlcyk7DQorCQkJCWlmICgh bWFrZVZhcmlhYmxlc1BhcmFtZXRlcnMoc3QsIGNvbW1hbmQpKQ0KKwkJCQl7 DQorCQkJCQlwZ19sb2dfZmF0YWwoImNsaWVudCAlZCBzY3JpcHQgJXMgY29t bWFuZCAlZCBwZ2JlbmNoIHZhcmlhYmxlIHN1YnN0aXR1dGlvbiBmYWlsZWQi LA0KKwkJCQkJCQkJIHN0LT5pZCwgc3FsX3NjcmlwdFtzdC0+dXNlX2ZpbGVd LmRlc2MsIHN0LT5jb21tYW5kKTsNCisJCQkJCWV4aXQoMSk7DQorCQkJCX0N CisJCQkJY29tbWFuZC0+c3Vic3RpdHV0ZWQgPSB0cnVlOw0KIAkJCX0NCi0J CQlzdC0+cHJlcGFyZWRbc3QtPnVzZV9maWxlXSA9IHRydWU7DQorCQkJcHRo cmVhZF9tdXRleF91bmxvY2soJmNvbW1hbmQtPm11dGV4KTsNCiAJCX0NCiAN Ci0JCWdldFF1ZXJ5UGFyYW1zKHN0LCBjb21tYW5kLCBwYXJhbXMpOw0KIAkJ cHJlcGFyZWRTdGF0ZW1lbnROYW1lKG5hbWUsIHN0LT51c2VfZmlsZSwgc3Qt PmNvbW1hbmQpOw0KIA0KKwkJLyogZWFjaCBjbGllbnQgbXVzdCBwcmVwYXJl IGVhY2ggc3FsIGNvbW1hbmQgb25jZSAqLw0KKwkJaWYgKCFzdC0+cHJlcGFy ZWRbc3QtPnVzZV9maWxlXVtzdC0+Y29tbWFuZF0pDQorCQl7DQorCQkJUEdy ZXN1bHQgICAqcmVzOw0KKw0KKwkJCXJlcyA9IFBRcHJlcGFyZShzdC0+Y29u LCBuYW1lLA0KKwkJCQkJCQljb21tYW5kLT5hcmd2WzBdLCBjb21tYW5kLT5h cmdjIC0gMSwgTlVMTCk7DQorCQkJaWYgKFBRcmVzdWx0U3RhdHVzKHJlcykg IT0gUEdSRVNfQ09NTUFORF9PSykNCisJCQkJcGdfbG9nX2Vycm9yKCIlcyIs IFBRZXJyb3JNZXNzYWdlKHN0LT5jb24pKTsNCisNCisJCQlQUWNsZWFyKHJl cyk7DQorDQorCQkJc3QtPnByZXBhcmVkW3N0LT51c2VfZmlsZV1bc3QtPmNv bW1hbmRdID0gdHJ1ZTsNCisJCX0NCisNCisJCWdldFF1ZXJ5UGFyYW1zKHN0 LCBjb21tYW5kLCBwYXJhbXMpOw0KKw0KIAkJcGdfbG9nX2RlYnVnKCJjbGll bnQgJWQgc2VuZGluZyAlcyIsIHN0LT5pZCwgbmFtZSk7DQogCQlyID0gUFFz ZW5kUXVlcnlQcmVwYXJlZChzdC0+Y29uLCBuYW1lLCBjb21tYW5kLT5hcmdj IC0gMSwNCiAJCQkJCQkJCXBhcmFtcywgTlVMTCwgTlVMTCwgMCk7DQpAQCAt Mjc4NSw3ICsyODY1LDkgQEAgcmVhZENvbW1hbmRSZXNwb25zZShDU3RhdGUg KnN0LCBNZXRhQ29tbWFuZCBtZXRhLCBjaGFyICp2YXJwcmVmaXgpDQogCQkJ CQkJCXZhcm5hbWUgPSBwc3ByaW50ZigiJXMlcyIsIHZhcnByZWZpeCwgdmFy bmFtZSk7DQogDQogCQkJCQkJLyogc3RvcmUgbGFzdCByb3cgcmVzdWx0IGFz IGEgc3RyaW5nICovDQotCQkJCQkJaWYgKCFwdXRWYXJpYWJsZShzdCwgbWV0 YSA9PSBNRVRBX0FTRVQgPyAiYXNldCIgOiAiZ3NldCIsIHZhcm5hbWUsDQor CQkJCQkJaWYgKFBRZ2V0aXNudWxsKHJlcywgbnR1cGxlcyAtIDEsIGZsZCkg Pw0KKwkJCQkJCQkhcHV0VmFyaWFibGVOdWxsKHN0LCBtZXRhID09IE1FVEFf QVNFVCA/ICJhc2V0IiA6ICJnc2V0IiwgdmFybmFtZSkgOg0KKwkJCQkJCQkh cHV0VmFyaWFibGUoc3QsIG1ldGEgPT0gTUVUQV9BU0VUID8gImFzZXQiIDog ImdzZXQiLCB2YXJuYW1lLA0KIAkJCQkJCQkJCQkgUFFnZXR2YWx1ZShyZXMs IG50dXBsZXMgLSAxLCBmbGQpKSkNCiAJCQkJCQl7DQogCQkJCQkJCS8qIGlu dGVybmFsIGVycm9yICovDQpAQCAtMjg0OCw3ICsyOTMwLDcgQEAgZXZhbHVh dGVTbGVlcChDU3RhdGUgKnN0LCBpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGlu dCAqdXNlY3MpDQogDQogCWlmICgqYXJndlsxXSA9PSAnOicpDQogCXsNCi0J CWlmICgodmFyID0gZ2V0VmFyaWFibGUoc3QsIGFyZ3ZbMV0gKyAxKSkgPT0g TlVMTCkNCisJCWlmICgodmFyID0gZ2V0VmFyaWFibGUoc3QsIGFyZ3ZbMV0g KyAxLCBOVUxMKSkgPT0gTlVMTCkNCiAJCXsNCiAJCQlwZ19sb2dfZXJyb3Io IiVzOiB1bmRlZmluZWQgdmFyaWFibGUgXCIlc1wiIiwgYXJndlswXSwgYXJn dlsxXSArIDEpOw0KIAkJCXJldHVybiBmYWxzZTsNCkBAIC00MzAxLDExICs0 MzgzLDE1IEBAIEdldFRhYmxlSW5mbyhQR2Nvbm4gKmNvbiwgYm9vbCBzY2Fs ZV9naXZlbikNCiB9DQogDQogLyoNCi0gKiBSZXBsYWNlIDpwYXJhbSB3aXRo ICRuIHRocm91Z2hvdXQgdGhlIGNvbW1hbmQncyBTUUwgdGV4dCwgd2hpY2gN CisgKiBSb3VnaGx5IHJlcGxhY2UgOnBhcmFtIHdpdGggJG4gdGhyb3VnaG91 dCB0aGUgY29tbWFuZCdzIFNRTCB0ZXh0LCB3aGljaA0KICAqIGlzIGEgbW9k aWZpYWJsZSBzdHJpbmcgaW4gY21kLT5saW5lcy4NCisgKg0KKyAqIFdoZXJl dmVyIDp3aGF0ZXZlciBpcyBmb3VuZCwgaXQgaXMgdHJpZWQgYXMgYSBwb3Nz aWJsZSBhIHZhcmlhYmxlIG5hbWUuDQorICoNCisgKiBGSVhNRSBzaG91bGQg aXQgZG8gbWluaW1hbCBsZXhpbmcgKGluIHMvZCBxdW90ZXMsIC4uLik/DQog ICovDQogc3RhdGljIGJvb2wNCi1wYXJzZVF1ZXJ5KENvbW1hbmQgKmNtZCkN CittYWtlVmFyaWFibGVzUGFyYW1ldGVycyhDU3RhdGUgKnN0LCBDb21tYW5k ICpjbWQpDQogew0KIAljaGFyCSAgICpzcWwsDQogCQkJICAgKnA7DQpAQCAt NDMxNywxNSArNDQwMywyMyBAQCBwYXJzZVF1ZXJ5KENvbW1hbmQgKmNtZCkN CiAJew0KIAkJY2hhcgkJdmFyWzEzXTsNCiAJCWNoYXIJICAgKm5hbWU7DQor CQljaGFyCSAgICp2YWw7DQogCQlpbnQJCQllYXRlbjsNCiANCiAJCW5hbWUg PSBwYXJzZVZhcmlhYmxlKHAsICZlYXRlbik7DQogCQlpZiAobmFtZSA9PSBO VUxMKQ0KIAkJew0KIAkJCXdoaWxlICgqcCA9PSAnOicpDQotCQkJew0KIAkJ CQlwKys7DQotCQkJfQ0KKwkJCWNvbnRpbnVlOw0KKwkJfQ0KKw0KKwkJLyog c2tpcCBpZiB2YXJpYWJsZSBpcyB1bmRlZmluZWQ/ICovDQorCQl2YWwgPSBn ZXRWYXJpYWJsZShzdCwgbmFtZSwgTlVMTCk7DQorCQlpZiAodmFsID09IE5V TEwpDQorCQl7DQorCQkJcGdfZnJlZShuYW1lKTsNCisJCQlwKys7DQogCQkJ Y29udGludWU7DQogCQl9DQogDQpAQCAtNDQ0OSw2ICs0NTQzLDcgQEAgY3Jl YXRlX3NxbF9jb21tYW5kKFBRRXhwQnVmZmVyIGJ1ZiwgY29uc3QgY2hhciAq c291cmNlKQ0KIAlteV9jb21tYW5kID0gKENvbW1hbmQgKikgcGdfbWFsbG9j KHNpemVvZihDb21tYW5kKSk7DQogCWluaXRQUUV4cEJ1ZmZlcigmbXlfY29t bWFuZC0+bGluZXMpOw0KIAlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmbXlfY29t bWFuZC0+bGluZXMsIHApOw0KKwlteV9jb21tYW5kLT5zdWJzdGl0dXRlZCA9 IGZhbHNlOw0KIAlteV9jb21tYW5kLT5maXJzdF9saW5lID0gTlVMTDsJLyog dGhpcyBpcyBzZXQgbGF0ZXIgKi8NCiAJbXlfY29tbWFuZC0+dHlwZSA9IFNR TF9DT01NQU5EOw0KIAlteV9jb21tYW5kLT5tZXRhID0gTUVUQV9OT05FOw0K QEAgLTQ0NTYsNiArNDU1MSw3IEBAIGNyZWF0ZV9zcWxfY29tbWFuZChQUUV4 cEJ1ZmZlciBidWYsIGNvbnN0IGNoYXIgKnNvdXJjZSkNCiAJbWVtc2V0KG15 X2NvbW1hbmQtPmFyZ3YsIDAsIHNpemVvZihteV9jb21tYW5kLT5hcmd2KSk7 DQogCW15X2NvbW1hbmQtPnZhcnByZWZpeCA9IE5VTEw7CS8qIGFsbG9jYXRl ZCBsYXRlciwgaWYgbmVlZGVkICovDQogCW15X2NvbW1hbmQtPmV4cHIgPSBO VUxMOw0KKwlwdGhyZWFkX211dGV4X2luaXQoJm15X2NvbW1hbmQtPm11dGV4 LCBOVUxMKTsNCiAJaW5pdFNpbXBsZVN0YXRzKCZteV9jb21tYW5kLT5zdGF0 cyk7DQogDQogCXJldHVybiBteV9jb21tYW5kOw0KQEAgLTQ0OTYsMjAgKzQ1 OTIsMTEgQEAgcG9zdHByb2Nlc3Nfc3FsX2NvbW1hbmQoQ29tbWFuZCAqbXlf Y29tbWFuZCkNCiAJYnVmZmVyW3N0cmNzcG4oYnVmZmVyLCAiXG5cciIpXSA9 ICdcMCc7DQogCW15X2NvbW1hbmQtPmZpcnN0X2xpbmUgPSBwZ19zdHJkdXAo YnVmZmVyKTsNCiANCi0JLyogcGFyc2UgcXVlcnkgaWYgbmVjZXNzYXJ5ICov DQotCXN3aXRjaCAocXVlcnltb2RlKQ0KKwkvKiBhZGp1c3QgYXJndlswXSBv biBzaW1wbGUgcXVlcnkgKi8NCisJaWYgKHF1ZXJ5bW9kZSA9PSBRVUVSWV9T SU1QTEUpDQogCXsNCi0JCWNhc2UgUVVFUllfU0lNUExFOg0KLQkJCW15X2Nv bW1hbmQtPmFyZ3ZbMF0gPSBteV9jb21tYW5kLT5saW5lcy5kYXRhOw0KLQkJ CW15X2NvbW1hbmQtPmFyZ2MrKzsNCi0JCQlicmVhazsNCi0JCWNhc2UgUVVF UllfRVhURU5ERUQ6DQotCQljYXNlIFFVRVJZX1BSRVBBUkVEOg0KLQkJCWlm ICghcGFyc2VRdWVyeShteV9jb21tYW5kKSkNCi0JCQkJZXhpdCgxKTsNCi0J CQlicmVhazsNCi0JCWRlZmF1bHQ6DQotCQkJZXhpdCgxKTsNCisJCW15X2Nv bW1hbmQtPmFyZ3ZbMF0gPSBteV9jb21tYW5kLT5saW5lcy5kYXRhOw0KKwkJ bXlfY29tbWFuZC0+YXJnYysrOw0KIAl9DQogfQ0KIA0KQEAgLTQ4OTMsNiAr NDk4MCwxNSBAQCBQYXJzZVNjcmlwdChjb25zdCBjaGFyICpzY3JpcHQsIGNv bnN0IGNoYXIgKmRlc2MsIGludCB3ZWlnaHQpDQogCXBzcWxfc2Nhbl9kZXN0 cm95KHNzdGF0ZSk7DQogfQ0KIA0KK3N0YXRpYyBpbnQNCitudW1iZXJfb2Zf Y29tbWFuZHMoUGFyc2VkU2NyaXB0ICpwcykNCit7DQorCWludCBpID0gMDsN CisJd2hpbGUgKHBzLT5jb21tYW5kc1tpXSAhPSBOVUxMKQ0KKwkJaSsrOw0K KwlyZXR1cm4gaSArIDE7DQorfQ0KKw0KIC8qDQogICogUmVhZCB0aGUgZW50 aXJlIGNvbnRlbnRzIG9mIGZpbGUgZmQsIGFuZCByZXR1cm4gaXQgaW4gYSBt YWxsb2MnZCBidWZmZXIuDQogICoNCkBAIC02MDE4LDYgKzYxMTQsOSBAQCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAJew0KIAkJc3RhdGVbaV0u Y3N0YWNrID0gY29uZGl0aW9uYWxfc3RhY2tfY3JlYXRlKCk7DQogCQlpbml0 UmFuZG9tU3RhdGUoJnN0YXRlW2ldLmNzX2Z1bmNfcnMpOw0KKwkJZm9yIChp bnQgcyA9IDA7IHMgPCBudW1fc2NyaXB0czsgcysrKQ0KKwkJCXN0YXRlW2ld LnByZXBhcmVkW3NdID0NCisJCQkJcGdfbWFsbG9jMChzaXplb2YoYm9vbCkg KiBudW1iZXJfb2ZfY29tbWFuZHMoJnNxbF9zY3JpcHRbc10pKTsNCiAJfQ0K IA0KIAlwZ19sb2dfZGVidWcoInBnaG9zdDogJXMgcGdwb3J0OiAlcyBuY2xp ZW50czogJWQgJXM6ICVkIGRiTmFtZTogJXMiLA0KQEAgLTY4MDksNCArNjkw OCwyNyBAQCBwdGhyZWFkX2pvaW4ocHRocmVhZF90IHRoLCB2b2lkICoqdGhy ZWFkX3JldHVybikNCiAJcmV0dXJuIDA7DQogfQ0KIA0KK3N0YXRpYyB2b2lk DQorcHRocmVhZF9tdXRleF9pbml0KHB0aHJlYWRfbXV0ZXhfdCAqcG0sIHZv aWQgKnVudXNlZCkNCit7DQorCSpwbSA9IENyZWF0ZU11dGV4KE5VTEwsIEZB TFNFLCBOVUxMKQ0KK30NCisNCitzdGF0aWMgdm9pZA0KK3B0aHJlYWRfbXV0 ZXhfbG9jayhwdGhyZWFkX211dGV4X3QgKnBtKQ0KK3sNCisJV2FpdEZvclNp bmdsZU9iamVjdCgqcG0sIElORklOSVRFKTsNCit9DQorDQorc3RhdGljIHZv aWQNCitwdGhyZWFkX211dGV4X3VubG9jayhwdGhyZWFkX211dGV4X3QgKnBt KQ0KK3sNCisJUmVsZWFzZU11dGV4KCpwbSk7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkDQorcHRocmVhZF9tdXRleF9kZXN0cm95KHB0aHJlYWRfbXV0ZXhfdCAq cG0pDQorew0KKwlDbG9zZUhhbmRsZSgqcG0pOw0KK30NCiAjZW5kaWYJCQkJ CQkJLyogV0lOMzIgKi8NCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnYmVuY2gv dC8wMDFfcGdiZW5jaF93aXRoX3NlcnZlci5wbCBiL3NyYy9iaW4vcGdiZW5j aC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsDQppbmRleCA1MjAwOWMz NTI0Li45ODZhYjFiZmE3IDEwMDY0NA0KLS0tIGEvc3JjL2Jpbi9wZ2JlbmNo L3QvMDAxX3BnYmVuY2hfd2l0aF9zZXJ2ZXIucGwNCisrKyBiL3NyYy9iaW4v cGdiZW5jaC90LzAwMV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsDQpAQCAtMzE4 LDcgKzMxOCw3IEBAIHBnYmVuY2goDQogCV0sDQogCSdzZXJ2ZXIgcGFyYW1l dGVyIGxvZ2dpbmcnLA0KIAl7DQotCQknMDAxX3BhcmFtXzInID0+IHF7c2Vs ZWN0ICcxJyBhcyBvbmUgXGdzZXQNCisJCScwMDFfcGFyYW1fMicgPT4gcXtz ZWxlY3QgJzEnIGFzIG9uZSwgbnVsbCBhcyB0d28gXGdzZXQNCiBTRUxFQ1Qg MSAvIChyYW5kb20oKSAvIDIpOjppbnQsIDpvbmU6OmludCwgOnR3bzo6aW50 Ow0KIH0NCiAJfSk7DQpAQCAtMzYwLDcgKzM2MCw3IEBAIHBnYmVuY2goDQog CV0sDQogCSdzZXJ2ZXIgcGFyYW1ldGVyIGxvZ2dpbmcnLA0KIAl7DQotCQkn MDAxX3BhcmFtXzQnID0+IHF7c2VsZWN0ICcxJyBhcyBvbmUgXGdzZXQNCisJ CScwMDFfcGFyYW1fNCcgPT4gcXtzZWxlY3QgJzEnIGFzIG9uZSwgbnVsbCBh cyB0d28gXGdzZXQNCiBTRUxFQ1QgMSAvIChyYW5kb20oKSAvIDIpOjppbnQs IDpvbmU6OmludCwgOnR3bzo6aW50Ow0KIH0NCiAJfSk7DQpAQCAtNDY3LDYg KzQ2Nyw4IEBAIHBnYmVuY2goDQogCQlxcntjb21tYW5kPTk4LjogaW50IDU0 MzJcYn0sICAgICAgICAgICAgICAgICAgICAjIDpyYW5kb21fc2VlZA0KIAkJ cXJ7Y29tbWFuZD05OS46IGludCAtOTIyMzM3MjAzNjg1NDc3NTgwOFxifSwg ICAgIyBtaW4gaW50DQogCQlxcntjb21tYW5kPTEwMC46IGludCA5MjIzMzcy MDM2ODU0Nzc1ODA3XGJ9LCAgICAjIG1heCBpbnQNCisJCXFye2NvbW1hbmQ9 MTAzLjogYm9vbGVhbiB0cnVlXGJ9LA0KKwkJcXJ7Y29tbWFuZD0xMDUuOiBi b29sZWFuIHRydWVcYn0sDQogCV0sDQogCSdwZ2JlbmNoIGV4cHJlc3Npb25z JywNCiAJew0KQEAgLTU5NCw2ICs1OTYsMTMgQEAgU0VMRUNUIDp2MCwgOnYx LCA6djIsIDp2MzsNCiAtLSBtaW5pbnQgY29uc3RhbnQgcGFyc2luZw0KIFxz ZXQgbWluIGRlYnVnKC05MjIzMzcyMDM2ODU0Nzc1ODA4KQ0KIFxzZXQgbWF4 IGRlYnVnKC0oOm1pbiArIDEpKQ0KKy0tIG51bGwgaGFuZGxpbmcNCitcc2V0 IG4wIG51bGwNCitTRUxFQ1QgTlVMTCBBUyBuMSwgMSBBUyBvbmUgXGdzZXQN Citcc2V0IG4yIGRlYnVnKDpuMCBpcyBudWxsIGFuZCA6bjEgaXMgbnVsbCBh bmQgOm9uZSBpcyBub3QgbnVsbCkNCistLSB1bmRlZmluZWQgdmFyaWFibGVz IGFyZSBub3Qgc3Vic3RpdHV0ZWQNCitTRUxFQ1QgJzpub19zdWNoX3Zhcmlh YmxlJyA9ICc6JyB8fCAnbm9fc3VjaF92YXJpYWJsZScgQVMgZXEgXGdzZXQN Citcc2V0IG9rIGRlYnVnKDplcSkNCiB9DQogCX0pOw0KIA0K --2056645051-1074725580-1593444804=:805678--