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 1oaBLU-0006tv-BY for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Sep 2022 07:37:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oaBLT-00050a-3J for pgsql-hackers@arkaria.postgresql.org; Mon, 19 Sep 2022 07:37:35 +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 1oaBLS-00050R-BZ for pgsql-hackers@lists.postgresql.org; Mon, 19 Sep 2022 07:37:34 +0000 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oaBLN-0001Py-Fb for pgsql-hackers@lists.postgresql.org; Mon, 19 Sep 2022 07:37:33 +0000 Received: by mail-wm1-x32e.google.com with SMTP id v185-20020a1cacc2000000b003b42e4f278cso4074703wme.5 for ; Mon, 19 Sep 2022 00:37:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date; bh=JqjdPD+dHgDEMTm1YinkAxPVPJ3+zc/gfp6mWHmbts4=; b=IqFrd4WvMtpB7Xnf1PqqPDzwhb/zYUBFHe2m85tjrsftDwu9WJV0h5UPhdInJAy+/g qEvE6+0uBRxZxHuQXQQBZGIZ0bu4Tvf+RvrsX0uV1CxoirDqTnjQHGHHUPM66tkX7W0V 0gv9ToPVfhA2b5gzfUBUfsTsEVaTvwj6sEYzhE8iNSyowSCg4zyrDopU1VaOJmNi2c4P aITl8vu1brZxL+TnvavWPogMCw8JxzUJP+CjJ2XSYao5TOBsLEw5vrI8gCgxP/BMJDb1 O+3eUxagdfD2Xf+/O19BFiYQ0h/BWfxUi1vbtdINiYr4HZr9fLkK9w5I5CKJJdAMGLiD KsaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date; bh=JqjdPD+dHgDEMTm1YinkAxPVPJ3+zc/gfp6mWHmbts4=; b=PHUsze4ZufoOPAcPY8TNEhEb/RcpEKI6NYYP1spoo+uXBdnZMo+3SX5oiCslZb552P IFkBMg3H8bEfpGl7fbLVW/HQOSToUKvkf411yFgT0lrcdCUVm4yMrWZEbtDONvLxpSzl 3RXzcgFm68MS1JX+nqop/rtnalM5gwKw3hEALKbd6nL69ZDUFwxryRQKUUGALPz+CaXB FCoKLAT64CMhR5ziGcuuHipmvqdqIJrB8Bqsci36A38yLU62WQoNyYnvwhamagYs0At/ sltxZK8v1S6mnsgl7yNGyFsjXgp7iXiqPmEwZFnIHf56+6TGdvSWNcVvNWBGuDsvvOCQ /CHg== X-Gm-Message-State: ACrzQf3XyAwBSjP4F8mxhdnizACdgeFxfgkWLFlx1d1OvmJPSrRMipwF LgupVGJmVPM+2O5CUdj7Od4= X-Google-Smtp-Source: AMsMyM7Wp9Iix8Zc3H++wzzhbZ0kfdyBP9jpPtdyT2/DUM+EXMCxfKN4NdwFeeTqQxuTZ5AupbwJ9A== X-Received: by 2002:a05:600c:2d09:b0:3b4:7ff0:ae89 with SMTP id x9-20020a05600c2d0900b003b47ff0ae89mr11152855wmf.163.1663573047897; Mon, 19 Sep 2022 00:37:27 -0700 (PDT) Received: from [192.168.4.216] ([54.239.6.184]) by smtp.gmail.com with ESMTPSA id r17-20020a05600c425100b003a62400724bsm12882567wmm.0.2022.09.19.00.37.26 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 19 Sep 2022 00:37:27 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------R20b404071uOD08xOdd6f7fb" Message-ID: Date: Mon, 19 Sep 2022 09:36:10 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.2.2 Subject: Re: Patch proposal: make use of regular expressions for the username in pg_hba.conf Content-Language: en-US To: Michael Paquier Cc: Jacob Champion , PostgreSQL Hackers References: <42ec83af-21e4-320a-a973-db4ac1ed053e@timescale.com> <808019e5-5b28-4771-72fb-99e8013fc05e@amazon.com> <72e14f66-a454-36e4-9e00-01b77e0b46c4@gmail.com> From: "Drouvot, Bertrand" In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------R20b404071uOD08xOdd6f7fb Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi, On 9/17/22 8:53 AM, Michael Paquier wrote: > On Fri, Sep 16, 2022 at 06:24:07PM +0200, Drouvot, Bertrand wrote: >> The CF bot is failing for Windows (all other tests are green) and only for >> the new tap test related to the regular expression on the host name (the >> ones on database and role are fine). >> >> The issue is not related to the patch. The issue is that the Windows Cirrus >> test does not like when a host name is provided for a "host" entry in >> pg_hba.conf (while it works fine when a CIDR is provided). >> >> You can see an example in [1] where the only change is to replace the CIDR >> by "localhost" in 002_scram.pl. As you can see the Cirrus tests are failing >> on Windows only (its log file is here [2]). >> >> I'll look at this "Windows" related issue but would appreciate any >> guidance/help if someone has experience in this area on windows. > > I recall that being able to do a reverse lookup of a hostname on > Windows for localhost requires a few extra setup steps as that's not > guaranteed to be set in all environments by default, which is why we > go at great length to use 127.0.0.1 in the TAP test setup for example > (see Cluster.pm). Looking at your patch, the goal is to test the > mapping of regular expression for host names, user names and database > names. If the first case is not guaranteed, my guess is that it is > fine to skip this portion of the tests on Windows. Thanks for looking at it! That sounds reasonable, v3 attached is skipping the regular expression tests for the hostname on Windows. > > While reading the patch, I am a bit confused about token_regcomp() and > token_regexec(). It would help the review a lot if these were > documented with proper comments, even if these act roughly as wrappers > for pg_regexec() and pg_regcomp(). Fully agree, comments were missing. They've been added in v3 attached. Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --------------R20b404071uOD08xOdd6f7fb Content-Type: text/plain; charset=UTF-8; name="v3-0001-hba_with_regexp.patch" Content-Disposition: attachment; filename="v3-0001-hba_with_regexp.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jbGllbnQtYXV0aC5zZ21sIGIvZG9jL3NyYy9z Z21sL2NsaWVudC1hdXRoLnNnbWwKaW5kZXggYzZmMWI3MGZkMy4uMjgzNDM0NDViZSAxMDA2 NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2NsaWVudC1hdXRoLnNnbWwKKysrIGIvZG9jL3NyYy9z Z21sL2NsaWVudC1hdXRoLnNnbWwKQEAgLTIzNSw4ICsyMzUsOSBAQCBob3N0bm9nc3NlbmMg IDxyZXBsYWNlYWJsZT5kYXRhYmFzZTwvcmVwbGFjZWFibGU+ICA8cmVwbGFjZWFibGU+dXNl cjwvcmVwbGFjZWFibAogICAgICAgIGxvZ2ljYWwgcmVwbGljYXRpb24gY29ubmVjdGlvbnMg ZG8gc3BlY2lmeSBpdC4KICAgICAgICBPdGhlcndpc2UsIHRoaXMgaXMgdGhlIG5hbWUgb2YK ICAgICAgICBhIHNwZWNpZmljIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFt ZT4gZGF0YWJhc2UuCi0gICAgICAgTXVsdGlwbGUgZGF0YWJhc2UgbmFtZXMgY2FuIGJlIHN1 cHBsaWVkIGJ5IHNlcGFyYXRpbmcgdGhlbSB3aXRoCi0gICAgICAgY29tbWFzLiAgQSBzZXBh cmF0ZSBmaWxlIGNvbnRhaW5pbmcgZGF0YWJhc2UgbmFtZXMgY2FuIGJlIHNwZWNpZmllZCBi eQorICAgICAgIE11bHRpcGxlIGRhdGFiYXNlIG5hbWVzIGFuZC9vciByZWd1bGFyIGV4cHJl c3Npb25zIHByZWNlZGVkIGJ5IDxsaXRlcmFsPi88L2xpdGVyYWw+CisgICAgICAgY2FuIGJl IHN1cHBsaWVkIGJ5IHNlcGFyYXRpbmcgdGhlbSB3aXRoIGNvbW1hcy4KKyAgICAgICBBIHNl cGFyYXRlIGZpbGUgY29udGFpbmluZyBkYXRhYmFzZSBuYW1lcyBjYW4gYmUgc3BlY2lmaWVk IGJ5CiAgICAgICAgcHJlY2VkaW5nIHRoZSBmaWxlIG5hbWUgd2l0aCA8bGl0ZXJhbD5APC9s aXRlcmFsPi4KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KQEAgLTI0OSw3ICsy NTAsOCBAQCBob3N0bm9nc3NlbmMgIDxyZXBsYWNlYWJsZT5kYXRhYmFzZTwvcmVwbGFjZWFi bGU+ICA8cmVwbGFjZWFibGU+dXNlcjwvcmVwbGFjZWFibAogICAgICAgIFNwZWNpZmllcyB3 aGljaCBkYXRhYmFzZSB1c2VyIG5hbWUocykgdGhpcyByZWNvcmQKICAgICAgICBtYXRjaGVz LiBUaGUgdmFsdWUgPGxpdGVyYWw+YWxsPC9saXRlcmFsPiBzcGVjaWZpZXMgdGhhdCBpdAog ICAgICAgIG1hdGNoZXMgYWxsIHVzZXJzLiAgT3RoZXJ3aXNlLCB0aGlzIGlzIGVpdGhlciB0 aGUgbmFtZSBvZiBhIHNwZWNpZmljCi0gICAgICAgZGF0YWJhc2UgdXNlciwgb3IgYSBncm91 cCBuYW1lIHByZWNlZGVkIGJ5IDxsaXRlcmFsPis8L2xpdGVyYWw+LgorICAgICAgIGRhdGFi YXNlIHVzZXIsIGEgcmVndWxhciBleHByZXNzaW9uIHByZWNlZGVkIGJ5IDxsaXRlcmFsPi88 L2xpdGVyYWw+CisgICAgICAgb3IgYSBncm91cCBuYW1lIHByZWNlZGVkIGJ5IDxsaXRlcmFs Pis8L2xpdGVyYWw+LgogICAgICAgIChSZWNhbGwgdGhhdCB0aGVyZSBpcyBubyByZWFsIGRp c3RpbmN0aW9uIGJldHdlZW4gdXNlcnMgYW5kIGdyb3VwcwogICAgICAgIGluIDxwcm9kdWN0 bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0bmFtZT47IGEgPGxpdGVyYWw+KzwvbGl0ZXJhbD4g bWFyayByZWFsbHkgbWVhbnMKICAgICAgICA8cXVvdGU+bWF0Y2ggYW55IG9mIHRoZSByb2xl cyB0aGF0IGFyZSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IG1lbWJlcnMKQEAgLTI1OCw3ICsy NjAsOCBAQCBob3N0bm9nc3NlbmMgIDxyZXBsYWNlYWJsZT5kYXRhYmFzZTwvcmVwbGFjZWFi bGU+ICA8cmVwbGFjZWFibGU+dXNlcjwvcmVwbGFjZWFibAogICAgICAgIGNvbnNpZGVyZWQg dG8gYmUgYSBtZW1iZXIgb2YgYSByb2xlIGlmIHRoZXkgYXJlIGV4cGxpY2l0bHkgYSBtZW1i ZXIKICAgICAgICBvZiB0aGUgcm9sZSwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgYW5kIG5v dCBqdXN0IGJ5IHZpcnR1ZSBvZgogICAgICAgIGJlaW5nIGEgc3VwZXJ1c2VyLgotICAgICAg IE11bHRpcGxlIHVzZXIgbmFtZXMgY2FuIGJlIHN1cHBsaWVkIGJ5IHNlcGFyYXRpbmcgdGhl bSB3aXRoIGNvbW1hcy4KKyAgICAgICBNdWx0aXBsZSB1c2VyIG5hbWVzIGFuZC9vciByZWd1 bGFyIGV4cHJlc3Npb25zIHByZWNlZGVkIGJ5IDxsaXRlcmFsPi88L2xpdGVyYWw+CisgICAg ICAgY2FuIGJlIHN1cHBsaWVkIGJ5IHNlcGFyYXRpbmcgdGhlbSB3aXRoIGNvbW1hcy4KICAg ICAgICBBIHNlcGFyYXRlIGZpbGUgY29udGFpbmluZyB1c2VyIG5hbWVzIGNhbiBiZSBzcGVj aWZpZWQgYnkgcHJlY2VkaW5nIHRoZQogICAgICAgIGZpbGUgbmFtZSB3aXRoIDxsaXRlcmFs PkA8L2xpdGVyYWw+LgogICAgICAgPC9wYXJhPgpAQCAtMjcwLDggKzI3Myw5IEBAIGhvc3Ru b2dzc2VuYyAgPHJlcGxhY2VhYmxlPmRhdGFiYXNlPC9yZXBsYWNlYWJsZT4gIDxyZXBsYWNl YWJsZT51c2VyPC9yZXBsYWNlYWJsCiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgog ICAgICAgIFNwZWNpZmllcyB0aGUgY2xpZW50IG1hY2hpbmUgYWRkcmVzcyhlcykgdGhhdCB0 aGlzIHJlY29yZAotICAgICAgIG1hdGNoZXMuICBUaGlzIGZpZWxkIGNhbiBjb250YWluIGVp dGhlciBhIGhvc3QgbmFtZSwgYW4gSVAKLSAgICAgICBhZGRyZXNzIHJhbmdlLCBvciBvbmUg b2YgdGhlIHNwZWNpYWwga2V5IHdvcmRzIG1lbnRpb25lZCBiZWxvdy4KKyAgICAgICBtYXRj aGVzLiAgVGhpcyBmaWVsZCBjYW4gY29udGFpbiBlaXRoZXIgYSBob3N0IG5hbWUsIGEgcmVn dWxhciBleHByZXNzaW9uCisgICAgICAgcHJlY2VkZWQgYnkgPGxpdGVyYWw+LzwvbGl0ZXJh bD4gcmVwcmVzZW50aW5nIGhvc3QgbmFtZXMsIGFuIElQIGFkZHJlc3MgcmFuZ2UsCisgICAg ICAgb3Igb25lIG9mIHRoZSBzcGVjaWFsIGtleSB3b3JkcyBtZW50aW9uZWQgYmVsb3cuCiAg ICAgICA8L3BhcmE+CiAKICAgICAgIDxwYXJhPgpAQCAtNzg1LDE2ICs3ODksMTggQEAgaG9z dCAgICBhbGwgICAgICAgICAgICAgYWxsICAgICAgICAgICAgIDE5Mi4xNjguMTIuMTAvMzIg ICAgICAgIGdzcwogIyBUWVBFICBEQVRBQkFTRSAgICAgICAgVVNFUiAgICAgICAgICAgIEFE RFJFU1MgICAgICAgICAgICAgICAgIE1FVEhPRAogaG9zdCAgICBhbGwgICAgICAgICAgICAg YWxsICAgICAgICAgICAgIDE5Mi4xNjguMC4wLzE2ICAgICAgICAgIGlkZW50IG1hcD1vbWlj cm9uCiAKLSMgSWYgdGhlc2UgYXJlIHRoZSBvbmx5IHRocmVlIGxpbmVzIGZvciBsb2NhbCBj b25uZWN0aW9ucywgdGhleSB3aWxsCisjIElmIHRoZXNlIGFyZSB0aGUgb25seSBmb3VyIGxp bmVzIGZvciBsb2NhbCBjb25uZWN0aW9ucywgdGhleSB3aWxsCiAjIGFsbG93IGxvY2FsIHVz ZXJzIHRvIGNvbm5lY3Qgb25seSB0byB0aGVpciBvd24gZGF0YWJhc2VzIChkYXRhYmFzZXMK LSMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZWlyIGRhdGFiYXNlIHVzZXIgbmFtZSkgZXhj ZXB0IGZvciBhZG1pbmlzdHJhdG9ycwotIyBhbmQgbWVtYmVycyBvZiByb2xlICJzdXBwb3J0 Iiwgd2hvIGNhbiBjb25uZWN0IHRvIGFsbCBkYXRhYmFzZXMuICBUaGUgZmlsZQotIyAkUEdE QVRBL2FkbWlucyBjb250YWlucyBhIGxpc3Qgb2YgbmFtZXMgb2YgYWRtaW5pc3RyYXRvcnMu ICBQYXNzd29yZHMKKyMgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZWlyIGRhdGFiYXNlIHVz ZXIgbmFtZSkgZXhjZXB0IGZvciBhZG1pbmlzdHJhdG9ycywKKyMgdXNlcnMgZmluaXNoaW5n IHdpdGggImhlbHBkZXNrIiBhbmQgbWVtYmVycyBvZiByb2xlICJzdXBwb3J0IiwKKyMgd2hv IGNhbiBjb25uZWN0IHRvIGFsbCBkYXRhYmFzZXMuCisjIFRoZSBmaWxlJFBHREFUQS9hZG1p bnMgY29udGFpbnMgYSBsaXN0IG9mIG5hbWVzIG9mIGFkbWluaXN0cmF0b3JzLiAgUGFzc3dv cmRzCiAjIGFyZSByZXF1aXJlZCBpbiBhbGwgY2FzZXMuCiAjCiAjIFRZUEUgIERBVEFCQVNF ICAgICAgICBVU0VSICAgICAgICAgICAgQUREUkVTUyAgICAgICAgICAgICAgICAgTUVUSE9E CiBsb2NhbCAgIHNhbWV1c2VyICAgICAgICBhbGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbWQ1CiBsb2NhbCAgIGFsbCAgICAgICAgICAgICBAYWRtaW5zICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWQ1Citsb2NhbCAgIGFsbCAgICAgICAgICAg ICAvXi4qaGVscGRlc2skICAgICAgICAgICAgICAgICAgICAgICAgICAgbWQ1CiBsb2NhbCAg IGFsbCAgICAgICAgICAgICArc3VwcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWQ1CiAKICMgVGhlIGxhc3QgdHdvIGxpbmVzIGFib3ZlIGNhbiBiZSBjb21iaW5lZCBp bnRvIGEgc2luZ2xlIGxpbmU6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9saWJwcS9oYmEu YyBiL3NyYy9iYWNrZW5kL2xpYnBxL2hiYS5jCmluZGV4IDQ2Mzc0MjZkNjIuLjg5YTRmYThi OTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2xpYnBxL2hiYS5jCisrKyBiL3NyYy9iYWNr ZW5kL2xpYnBxL2hiYS5jCkBAIC0xMTcsNiArMTE3LDkgQEAgc3RhdGljIExpc3QgKnRva2Vu aXplX2luY19maWxlKExpc3QgKnRva2VucywgY29uc3QgY2hhciAqb3V0ZXJfZmlsZW5hbWUs CiAJCQkJCQkJICAgY29uc3QgY2hhciAqaW5jX2ZpbGVuYW1lLCBpbnQgZWxldmVsLCBjaGFy ICoqZXJyX21zZyk7CiBzdGF0aWMgYm9vbCBwYXJzZV9oYmFfYXV0aF9vcHQoY2hhciAqbmFt ZSwgY2hhciAqdmFsLCBIYmFMaW5lICpoYmFsaW5lLAogCQkJCQkJCSAgIGludCBlbGV2ZWws IGNoYXIgKiplcnJfbXNnKTsKK3N0YXRpYyBib29sIHRva2VuX3JlZ2NvbXAocmVnZXhfdCAq cmUsIGNoYXIgKnN0cmluZywgY2hhciAqZmlsZW5hbWUsCisJCQkJCQkgIGludCBsaW5lX251 bSwgY2hhciAqKmVycl9tc2csIGludCBlbGV2ZWwpOworc3RhdGljIGJvb2wgdG9rZW5fcmVn ZXhlYyhjb25zdCBjaGFyICptYXRjaCwgcmVnZXhfdCAqcmUpOwogCiAKIC8qCkBAIC01NzQs MTMgKzU3NywxNSBAQCBpc19tZW1iZXIoT2lkIHVzZXJpZCwgY29uc3QgY2hhciAqcm9sZSkK IH0KIAogLyoKLSAqIENoZWNrIEF1dGhUb2tlbiBsaXN0IGZvciBhIG1hdGNoIHRvIHJvbGUs IGFsbG93aW5nIGdyb3VwIG5hbWVzLgorICogQ2hlY2sgQXV0aFRva2VuIGxpc3QgZm9yIGEg bWF0Y2ggdG8gcm9sZS4KKyAqIFdlIGFyZSBhbGxvd2luZyBncm91cCBuYW1lcyBhbmQgcmVn dWxhciBleHByZXNzaW9ucy4KICAqLwogc3RhdGljIGJvb2wKLWNoZWNrX3JvbGUoY29uc3Qg Y2hhciAqcm9sZSwgT2lkIHJvbGVpZCwgTGlzdCAqdG9rZW5zKQorY2hlY2tfcm9sZShjb25z dCBjaGFyICpyb2xlLCBPaWQgcm9sZWlkLCBMaXN0ICp0b2tlbnMsIExpc3QgKnRva2Vuc19y ZSkKIHsKIAlMaXN0Q2VsbCAgICpjZWxsOwogCUF1dGhUb2tlbiAgKnRvazsKKwlpbnQJCQly ZV9udW0gPSAwOwogCiAJZm9yZWFjaChjZWxsLCB0b2tlbnMpCiAJewpAQCAtNTkwLDYgKzU5 NSwyMyBAQCBjaGVja19yb2xlKGNvbnN0IGNoYXIgKnJvbGUsIE9pZCByb2xlaWQsIExpc3Qg KnRva2VucykKIAkJCWlmIChpc19tZW1iZXIocm9sZWlkLCB0b2stPnN0cmluZyArIDEpKQog CQkJCXJldHVybiB0cnVlOwogCQl9CisJCWVsc2UgaWYgKCF0b2stPnF1b3RlZCAmJiB0b2st PnN0cmluZ1swXSA9PSAnLycpCisJCXsKKwkJCS8qCisJCQkgKiBXaGVuIHRvay0+c3RyaW5n IHN0YXJ0cyB3aXRoIGEgc2xhc2gsIHRyZWF0IGl0IGFzIGEgcmVndWxhcgorCQkJICogZXhw cmVzc2lvbi4KKwkJCSAqLworCQkJTGlzdENlbGwgICAqY2VsbF9yZTsKKwkJCXJlZ2V4X3Qg ICAgKnJlOworCisJCQljZWxsX3JlID0gbGlzdF9udGhfY2VsbCh0b2tlbnNfcmUsIHJlX251 bSk7CisJCQlyZSA9IGxmaXJzdChjZWxsX3JlKTsKKworCQkJaWYgKHRva2VuX3JlZ2V4ZWMo cm9sZSwgcmUpKQorCQkJCXJldHVybiB0cnVlOworCisJCQlyZV9udW0rKzsKKwkJfQogCQll bHNlIGlmICh0b2tlbl9tYXRjaGVzKHRvaywgcm9sZSkgfHwKIAkJCQkgdG9rZW5faXNfa2V5 d29yZCh0b2ssICJhbGwiKSkKIAkJCXJldHVybiB0cnVlOwpAQCAtNjAxLDEwICs2MjMsMTEg QEAgY2hlY2tfcm9sZShjb25zdCBjaGFyICpyb2xlLCBPaWQgcm9sZWlkLCBMaXN0ICp0b2tl bnMpCiAgKiBDaGVjayB0byBzZWUgaWYgZGIvcm9sZSBjb21iaW5hdGlvbiBtYXRjaGVzIEF1 dGhUb2tlbiBsaXN0LgogICovCiBzdGF0aWMgYm9vbAotY2hlY2tfZGIoY29uc3QgY2hhciAq ZGJuYW1lLCBjb25zdCBjaGFyICpyb2xlLCBPaWQgcm9sZWlkLCBMaXN0ICp0b2tlbnMpCitj aGVja19kYihjb25zdCBjaGFyICpkYm5hbWUsIGNvbnN0IGNoYXIgKnJvbGUsIE9pZCByb2xl aWQsIExpc3QgKnRva2VucywgTGlzdCAqdG9rZW5zX3JlKQogewogCUxpc3RDZWxsICAgKmNl bGw7CiAJQXV0aFRva2VuICAqdG9rOworCWludAkJCXJlX251bSA9IDA7CiAKIAlmb3JlYWNo KGNlbGwsIHRva2VucykKIAl7CkBAIC02MzMsNiArNjU2LDIzIEBAIGNoZWNrX2RiKGNvbnN0 IGNoYXIgKmRibmFtZSwgY29uc3QgY2hhciAqcm9sZSwgT2lkIHJvbGVpZCwgTGlzdCAqdG9r ZW5zKQogCQl9CiAJCWVsc2UgaWYgKHRva2VuX2lzX2tleXdvcmQodG9rLCAicmVwbGljYXRp b24iKSkKIAkJCWNvbnRpbnVlOwkJCS8qIG5ldmVyIG1hdGNoIHRoaXMgaWYgbm90IHdhbHNl bmRlciAqLworCQllbHNlIGlmICghdG9rLT5xdW90ZWQgJiYgdG9rLT5zdHJpbmdbMF0gPT0g Jy8nKQorCQl7CisJCQkvKgorCQkJICogV2hlbiB0b2stPnN0cmluZyBzdGFydHMgd2l0aCBh IHNsYXNoLCB0cmVhdCBpdCBhcyBhIHJlZ3VsYXIKKwkJCSAqIGV4cHJlc3Npb24uCisJCQkg Ki8KKwkJCUxpc3RDZWxsICAgKmNlbGxfcmU7CisJCQlyZWdleF90ICAgICpyZTsKKworCQkJ Y2VsbF9yZSA9IGxpc3RfbnRoX2NlbGwodG9rZW5zX3JlLCByZV9udW0pOworCQkJcmUgPSBs Zmlyc3QoY2VsbF9yZSk7CisKKwkJCWlmICh0b2tlbl9yZWdleGVjKGRibmFtZSwgcmUpKQor CQkJCXJldHVybiB0cnVlOworCisJCQlyZV9udW0rKzsKKwkJfQogCQllbHNlIGlmICh0b2tl bl9tYXRjaGVzKHRvaywgZGJuYW1lKSkKIAkJCXJldHVybiB0cnVlOwogCX0KQEAgLTY4MSw3 ICs3MjEsNyBAQCBob3N0bmFtZV9tYXRjaChjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBj aGFyICphY3R1YWxfaG9zdG5hbWUpCiAgKiBDaGVjayB0byBzZWUgaWYgYSBjb25uZWN0aW5n IElQIG1hdGNoZXMgYSBnaXZlbiBob3N0IG5hbWUuCiAgKi8KIHN0YXRpYyBib29sCi1jaGVj a19ob3N0bmFtZShoYmFQb3J0ICpwb3J0LCBjb25zdCBjaGFyICpob3N0bmFtZSkKK2NoZWNr X2hvc3RuYW1lKGhiYVBvcnQgKnBvcnQsIGNvbnN0IGNoYXIgKmhvc3RuYW1lLCByZWdleF90 IHJlKQogewogCXN0cnVjdCBhZGRyaW5mbyAqZ2FpX3Jlc3VsdCwKIAkJCSAgICpnYWk7CkBA IC03MTIsOCArNzUyLDE3IEBAIGNoZWNrX2hvc3RuYW1lKGhiYVBvcnQgKnBvcnQsIGNvbnN0 IGNoYXIgKmhvc3RuYW1lKQogCQlwb3J0LT5yZW1vdGVfaG9zdG5hbWUgPSBwc3RyZHVwKHJl bW90ZV9ob3N0bmFtZSk7CiAJfQogCisJaWYgKGhvc3RuYW1lWzBdID09ICcvJykKKwl7CisJ CS8qCisJCSAqIFdoZW4gaG9zdG5hbWUgc3RhcnRzIHdpdGggYSBzbGFzaCwgdHJlYXQgaXQg YXMgYSByZWd1bGFyCisJCSAqIGV4cHJlc3Npb24uCisJCSAqLworCQlpZiAoIXRva2VuX3Jl Z2V4ZWMocG9ydC0+cmVtb3RlX2hvc3RuYW1lLCAmcmUpKQorCQkJcmV0dXJuIGZhbHNlOwor CX0KIAkvKiBOb3cgc2VlIGlmIHJlbW90ZSBob3N0IG5hbWUgbWF0Y2hlcyB0aGlzIHBnX2hi YSBsaW5lICovCi0JaWYgKCFob3N0bmFtZV9tYXRjaChob3N0bmFtZSwgcG9ydC0+cmVtb3Rl X2hvc3RuYW1lKSkKKwllbHNlIGlmICghaG9zdG5hbWVfbWF0Y2goaG9zdG5hbWUsIHBvcnQt PnJlbW90ZV9ob3N0bmFtZSkpCiAJCXJldHVybiBmYWxzZTsKIAogCS8qIElmIHdlIGFscmVh ZHkgdmVyaWZpZWQgdGhlIGZvcndhcmQgbG9va3VwLCB3ZSdyZSBkb25lICovCkBAIC05Mzks MTMgKzk4OCwxMyBAQCBwYXJzZV9oYmFfbGluZShUb2tlbml6ZWRBdXRoTGluZSAqdG9rX2xp bmUsIGludCBlbGV2ZWwpCiAJc3RydWN0IGFkZHJpbmZvICpnYWlfcmVzdWx0OwogCXN0cnVj dCBhZGRyaW5mbyBoaW50czsKIAlpbnQJCQlyZXQ7Ci0JY2hhcgkgICAqY2lkcl9zbGFzaDsK IAljaGFyCSAgICp1bnN1cGF1dGg7CiAJTGlzdENlbGwgICAqZmllbGQ7CiAJTGlzdAkgICAq dG9rZW5zOwogCUxpc3RDZWxsICAgKnRva2VuY2VsbDsKIAlBdXRoVG9rZW4gICp0b2tlbjsK IAlIYmFMaW5lICAgICpwYXJzZWRsaW5lOworCWNoYXIgICAgICAgKmNpZHJfc2xhc2ggPSBO VUxMOyAvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiAKIAlwYXJzZWRsaW5lID0gcGFsbG9j MChzaXplb2YoSGJhTGluZSkpOwogCXBhcnNlZGxpbmUtPmxpbmVudW1iZXIgPSBsaW5lX251 bTsKQEAgLTEwNDksOSArMTA5OCwyNyBAQCBwYXJzZV9oYmFfbGluZShUb2tlbml6ZWRBdXRo TGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAJCXJldHVybiBOVUxMOwogCX0KIAlwYXJz ZWRsaW5lLT5kYXRhYmFzZXMgPSBOSUw7CisJcGFyc2VkbGluZS0+ZGF0YWJhc2VzX3JlID0g TklMOwogCXRva2VucyA9IGxmaXJzdChmaWVsZCk7CiAJZm9yZWFjaCh0b2tlbmNlbGwsIHRv a2VucykKIAl7CisJCUF1dGhUb2tlbiAgKnRvayA9IGxmaXJzdCh0b2tlbmNlbGwpOworCisJ CWlmICghdG9rLT5xdW90ZWQgJiYgdG9rLT5zdHJpbmdbMF0gPT0gJy8nKQorCQl7CisJCQkv KgorCQkJICogV2hlbiB0b2stPnN0cmluZyBzdGFydHMgd2l0aCBhIHNsYXNoLCB0cmVhdCBp dCBhcyBhIHJlZ3VsYXIKKwkJCSAqIGV4cHJlc3Npb24uIFByZS1jb21waWxlIGl0LgorCQkJ ICovCisJCQlyZWdleF90ICAgICpyZTsKKworCQkJcmUgPSAocmVnZXhfdCAqKSBwYWxsb2Mo c2l6ZW9mKHJlZ2V4X3QpKTsKKwkJCWlmICh0b2tlbl9yZWdjb21wKHJlLCB0b2stPnN0cmlu ZyArIDEsIEhiYUZpbGVOYW1lLCBsaW5lX251bSwKKwkJCQkJCQkgIGVycl9tc2csIGVsZXZl bCkpCisJCQkJcGFyc2VkbGluZS0+ZGF0YWJhc2VzX3JlID0gbGFwcGVuZChwYXJzZWRsaW5l LT5kYXRhYmFzZXNfcmUsIHJlKTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gTlVMTDsKKwkJfQog CQlwYXJzZWRsaW5lLT5kYXRhYmFzZXMgPSBsYXBwZW5kKHBhcnNlZGxpbmUtPmRhdGFiYXNl cywKIAkJCQkJCQkJCQljb3B5X2F1dGhfdG9rZW4obGZpcnN0KHRva2VuY2VsbCkpKTsKIAl9 CkBAIC0xMDY5LDkgKzExMzYsMjcgQEAgcGFyc2VfaGJhX2xpbmUoVG9rZW5pemVkQXV0aExp bmUgKnRva19saW5lLCBpbnQgZWxldmVsKQogCQlyZXR1cm4gTlVMTDsKIAl9CiAJcGFyc2Vk bGluZS0+cm9sZXMgPSBOSUw7CisJcGFyc2VkbGluZS0+cm9sZXNfcmUgPSBOSUw7CiAJdG9r ZW5zID0gbGZpcnN0KGZpZWxkKTsKIAlmb3JlYWNoKHRva2VuY2VsbCwgdG9rZW5zKQogCXsK KwkJQXV0aFRva2VuICAqdG9rID0gbGZpcnN0KHRva2VuY2VsbCk7CisKKwkJaWYgKCF0b2st PnF1b3RlZCAmJiB0b2stPnN0cmluZ1swXSA9PSAnLycpCisJCXsKKwkJCS8qCisJCQkgKiBX aGVuIHRvay0+c3RyaW5nIHN0YXJ0cyB3aXRoIGEgc2xhc2gsIHRyZWF0IGl0IGFzIGEgcmVn dWxhcgorCQkJICogZXhwcmVzc2lvbi4gUHJlLWNvbXBpbGUgaXQuCisJCQkgKi8KKwkJCXJl Z2V4X3QgICAgKnJlOworCisJCQlyZSA9IChyZWdleF90ICopIHBhbGxvYyhzaXplb2YocmVn ZXhfdCkpOworCQkJaWYgKHRva2VuX3JlZ2NvbXAocmUsIHRvay0+c3RyaW5nICsgMSwgSGJh RmlsZU5hbWUsIGxpbmVfbnVtLAorCQkJCQkJCSAgZXJyX21zZywgZWxldmVsKSkKKwkJCQlw YXJzZWRsaW5lLT5yb2xlc19yZSA9IGxhcHBlbmQocGFyc2VkbGluZS0+cm9sZXNfcmUsIHJl KTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gTlVMTDsKKwkJfQogCQlwYXJzZWRsaW5lLT5yb2xl cyA9IGxhcHBlbmQocGFyc2VkbGluZS0+cm9sZXMsCiAJCQkJCQkJCQljb3B5X2F1dGhfdG9r ZW4obGZpcnN0KHRva2VuY2VsbCkpKTsKIAl9CkBAIC0xMTIwLDYgKzEyMDUsOCBAQCBwYXJz ZV9oYmFfbGluZShUb2tlbml6ZWRBdXRoTGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAJ CX0KIAkJZWxzZQogCQl7CisJCQlib29sIGlzX3JlZ2V4cCA9IHRva2VuLT5zdHJpbmdbMF0g PT0gJy8nID8gdHJ1ZSA6IGZhbHNlOworCiAJCQkvKiBJUCBhbmQgbmV0bWFzayBhcmUgc3Bl Y2lmaWVkICovCiAJCQlwYXJzZWRsaW5lLT5pcF9jbXBfbWV0aG9kID0gaXBDbXBNYXNrOwog CkBAIC0xMTI3LDkgKzEyMTQsMTIgQEAgcGFyc2VfaGJhX2xpbmUoVG9rZW5pemVkQXV0aExp bmUgKnRva19saW5lLCBpbnQgZWxldmVsKQogCQkJc3RyID0gcHN0cmR1cCh0b2tlbi0+c3Ry aW5nKTsKIAogCQkJLyogQ2hlY2sgaWYgaXQgaGFzIGEgQ0lEUiBzdWZmaXggYW5kIGlmIHNv IGlzb2xhdGUgaXQgKi8KLQkJCWNpZHJfc2xhc2ggPSBzdHJjaHIoc3RyLCAnLycpOwotCQkJ aWYgKGNpZHJfc2xhc2gpCi0JCQkJKmNpZHJfc2xhc2ggPSAnXDAnOworCQkJaWYgKCFpc19y ZWdleHApCisJCQl7CisJCQkJY2lkcl9zbGFzaCA9IHN0cmNocihzdHIsICcvJyk7CisJCQkJ aWYgKGNpZHJfc2xhc2gpCisJCQkJCSpjaWRyX3NsYXNoID0gJ1wwJzsKKwkJCX0KIAogCQkJ LyogR2V0IHRoZSBJUCBhZGRyZXNzIGVpdGhlciB3YXkgKi8KIAkJCWhpbnRzLmFpX2ZsYWdz ID0gQUlfTlVNRVJJQ0hPU1Q7CkBAIC0xMTY4LDcgKzEyNTgsNyBAQCBwYXJzZV9oYmFfbGlu ZShUb2tlbml6ZWRBdXRoTGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAJCQlwZ19mcmVl YWRkcmluZm9fYWxsKGhpbnRzLmFpX2ZhbWlseSwgZ2FpX3Jlc3VsdCk7CiAKIAkJCS8qIEdl dCB0aGUgbmV0bWFzayAqLwotCQkJaWYgKGNpZHJfc2xhc2gpCisJCQlpZiAoY2lkcl9zbGFz aCAmJiAhaXNfcmVnZXhwKQogCQkJewogCQkJCWlmIChwYXJzZWRsaW5lLT5ob3N0bmFtZSkK IAkJCQl7CkBAIC0xMTk5LDcgKzEyODksNyBAQCBwYXJzZV9oYmFfbGluZShUb2tlbml6ZWRB dXRoTGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAJCQkJcGFyc2VkbGluZS0+bWFza2xl biA9IHBhcnNlZGxpbmUtPmFkZHJsZW47CiAJCQkJcGZyZWUoc3RyKTsKIAkJCX0KLQkJCWVs c2UgaWYgKCFwYXJzZWRsaW5lLT5ob3N0bmFtZSkKKwkJCWVsc2UgaWYgKCFwYXJzZWRsaW5l LT5ob3N0bmFtZSAmJiAhaXNfcmVnZXhwKQogCQkJewogCQkJCS8qIFJlYWQgdGhlIG1hc2sg ZmllbGQuICovCiAJCQkJcGZyZWUoc3RyKTsKQEAgLTEyNjEsNiArMTM1MSwxOCBAQCBwYXJz ZV9oYmFfbGluZShUb2tlbml6ZWRBdXRoTGluZSAqdG9rX2xpbmUsIGludCBlbGV2ZWwpCiAJ CQkJCXJldHVybiBOVUxMOwogCQkJCX0KIAkJCX0KKwkJCWVsc2UgaWYgKGlzX3JlZ2V4cCkK KwkJCXsKKwkJCQkvKgorCQkJCSAqIFdoZW4gdG9rZW4tPnN0cmluZyBzdGFydHMgd2l0aCBh IHNsYXNoLCB0cmVhdCBpdCBhcyBhCisJCQkJICogcmVndWxhciBleHByZXNzaW9uLiBQcmUt Y29tcGlsZSBpdC4KKwkJCQkgKi8KKwkJCQlpZiAoIXRva2VuX3JlZ2NvbXAoJnBhcnNlZGxp bmUtPmhvc3RuYW1lX3JlLAorCQkJCQkJCQkgICB0b2tlbi0+c3RyaW5nICsgMSwgSGJhRmls ZU5hbWUsCisJCQkJCQkJCSAgIGxpbmVfbnVtLCBlcnJfbXNnLCBlbGV2ZWwpKQorCQkJCQly ZXR1cm4gTlVMTDsKKwkJCQlwYXJzZWRsaW5lLT5ob3N0bmFtZSA9IHN0cjsKKwkJCX0KIAkJ fQogCX0JCQkJCQkJLyogIT0gY3RMb2NhbCAqLwogCkBAIC0yMTM1LDcgKzIyMzcsOCBAQCBj aGVja19oYmEoaGJhUG9ydCAqcG9ydCkKIAkJCQkJaWYgKGhiYS0+aG9zdG5hbWUpCiAJCQkJ CXsKIAkJCQkJCWlmICghY2hlY2tfaG9zdG5hbWUocG9ydCwKLQkJCQkJCQkJCQkJaGJhLT5o b3N0bmFtZSkpCisJCQkJCQkJCQkJCWhiYS0+aG9zdG5hbWUsIGhiYS0+aG9zdG5hbWVfcmUp KQorCiAJCQkJCQkJY29udGludWU7CiAJCQkJCX0KIAkJCQkJZWxzZQpAQCAtMjE2MiwxMCAr MjI2NSwxMCBAQCBjaGVja19oYmEoaGJhUG9ydCAqcG9ydCkKIAogCQkvKiBDaGVjayBkYXRh YmFzZSBhbmQgcm9sZSAqLwogCQlpZiAoIWNoZWNrX2RiKHBvcnQtPmRhdGFiYXNlX25hbWUs IHBvcnQtPnVzZXJfbmFtZSwgcm9sZWlkLAotCQkJCQkgIGhiYS0+ZGF0YWJhc2VzKSkKKwkJ CQkJICBoYmEtPmRhdGFiYXNlcywgaGJhLT5kYXRhYmFzZXNfcmUpKQogCQkJY29udGludWU7 CiAKLQkJaWYgKCFjaGVja19yb2xlKHBvcnQtPnVzZXJfbmFtZSwgcm9sZWlkLCBoYmEtPnJv bGVzKSkKKwkJaWYgKCFjaGVja19yb2xlKHBvcnQtPnVzZXJfbmFtZSwgcm9sZWlkLCBoYmEt PnJvbGVzLCBoYmEtPnJvbGVzX3JlKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qIEZvdW5kIGEg cmVjb3JkIHRoYXQgbWF0Y2hlZCEgKi8KQEAgLTIzNDIsMzQgKzI0NDUsOSBAQCBwYXJzZV9p ZGVudF9saW5lKFRva2VuaXplZEF1dGhMaW5lICp0b2tfbGluZSwgaW50IGVsZXZlbCkKIAkJ ICogV2hlbiBzeXN0ZW0gdXNlcm5hbWUgc3RhcnRzIHdpdGggYSBzbGFzaCwgdHJlYXQgaXQg YXMgYSByZWd1bGFyCiAJCSAqIGV4cHJlc3Npb24uIFByZS1jb21waWxlIGl0LgogCQkgKi8K LQkJaW50CQkJcjsKLQkJcGdfd2NoYXIgICAqd3N0cjsKLQkJaW50CQkJd2xlbjsKLQotCQl3 c3RyID0gcGFsbG9jKChzdHJsZW4ocGFyc2VkbGluZS0+aWRlbnRfdXNlciArIDEpICsgMSkg KiBzaXplb2YocGdfd2NoYXIpKTsKLQkJd2xlbiA9IHBnX21iMndjaGFyX3dpdGhfbGVuKHBh cnNlZGxpbmUtPmlkZW50X3VzZXIgKyAxLAotCQkJCQkJCQkJd3N0ciwgc3RybGVuKHBhcnNl ZGxpbmUtPmlkZW50X3VzZXIgKyAxKSk7Ci0KLQkJciA9IHBnX3JlZ2NvbXAoJnBhcnNlZGxp bmUtPnJlLCB3c3RyLCB3bGVuLCBSRUdfQURWQU5DRUQsIENfQ09MTEFUSU9OX09JRCk7Ci0J CWlmIChyKQotCQl7Ci0JCQljaGFyCQllcnJzdHJbMTAwXTsKLQotCQkJcGdfcmVnZXJyb3Io ciwgJnBhcnNlZGxpbmUtPnJlLCBlcnJzdHIsIHNpemVvZihlcnJzdHIpKTsKLQkJCWVyZXBv cnQoZWxldmVsLAotCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUkVHVUxBUl9FWFBS RVNTSU9OKSwKLQkJCQkJIGVycm1zZygiaW52YWxpZCByZWd1bGFyIGV4cHJlc3Npb24gXCIl c1wiOiAlcyIsCi0JCQkJCQkJcGFyc2VkbGluZS0+aWRlbnRfdXNlciArIDEsIGVycnN0ciks Ci0JCQkJCSBlcnJjb250ZXh0KCJsaW5lICVkIG9mIGNvbmZpZ3VyYXRpb24gZmlsZSBcIiVz XCIiLAotCQkJCQkJCWxpbmVfbnVtLCBJZGVudEZpbGVOYW1lKSkpOwotCi0JCQkqZXJyX21z ZyA9IHBzcHJpbnRmKCJpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBcIiVzXCI6ICVzIiwK LQkJCQkJCQkJcGFyc2VkbGluZS0+aWRlbnRfdXNlciArIDEsIGVycnN0cik7Ci0KLQkJCXBm cmVlKHdzdHIpOworCQlpZiAoIXRva2VuX3JlZ2NvbXAoJnBhcnNlZGxpbmUtPnJlLCBwYXJz ZWRsaW5lLT5pZGVudF91c2VyICsgMSwKKwkJCQkJCSAgIElkZW50RmlsZU5hbWUsIGxpbmVf bnVtLCBlcnJfbXNnLCBlbGV2ZWwpKQogCQkJcmV0dXJuIE5VTEw7Ci0JCX0KLQkJcGZyZWUo d3N0cik7CiAJfQogCiAJcmV0dXJuIHBhcnNlZGxpbmU7CkBAIC0yNzA2LDMgKzI3ODQsNjgg QEAgaGJhX2F1dGhuYW1lKFVzZXJBdXRoIGF1dGhfbWV0aG9kKQogCiAJcmV0dXJuIFVzZXJB dXRoTmFtZVthdXRoX21ldGhvZF07CiB9CisKKy8qCisgKiBDb21waWxlIHRoZSByZWd1bGFy IGV4cHJlc3Npb24gInJlIiBhbmQgcmV0dXJuIHdoZXRoZXIgaXQgY29tcGlsZXMKKyAqIHN1 Y2Nlc3NmdWxseSBvciBub3QuCisgKgorICogSWYgbm90LCB0aGUgbGFzdCA0IHBhcmFtZXRl cnMgYXJlIHVzZWQgdG8gYWRkIGV4dHJhIGRldGFpbHMgd2hpbGUgcmVwb3J0aW5nCisgKiB0 aGUgZXJyb3IuCisgKi8KK3N0YXRpYyBib29sCit0b2tlbl9yZWdjb21wKHJlZ2V4X3QgKnJl LCBjaGFyICpzdHJpbmcsIGNoYXIgKmZpbGVuYW1lLCBpbnQgbGluZV9udW0sCisJCQkgIGNo YXIgKiplcnJfbXNnLCBpbnQgZWxldmVsKQoreworCWludAkJCXI7CisJcGdfd2NoYXIgICAq d3N0cjsKKwlpbnQJCQl3bGVuOworCisJd3N0ciA9IHBhbGxvYygoc3RybGVuKHN0cmluZykg KyAxKSAqIHNpemVvZihwZ193Y2hhcikpOworCXdsZW4gPSBwZ19tYjJ3Y2hhcl93aXRoX2xl bihzdHJpbmcsCisJCQkJCQkJCXdzdHIsIHN0cmxlbihzdHJpbmcpKTsKKworCXIgPSBwZ19y ZWdjb21wKHJlLCB3c3RyLCB3bGVuLCBSRUdfQURWQU5DRUQsIENfQ09MTEFUSU9OX09JRCk7 CisJaWYgKHIpCisJeworCQljaGFyCQllcnJzdHJbMTAwXTsKKworCQlwZ19yZWdlcnJvcihy LCByZSwgZXJyc3RyLCBzaXplb2YoZXJyc3RyKSk7CisJCWVyZXBvcnQoZWxldmVsLAorCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9SRUdVTEFSX0VYUFJFU1NJT04pLAorCQkJCSBl cnJtc2coImludmFsaWQgcmVndWxhciBleHByZXNzaW9uIFwiJXNcIjogJXMiLAorCQkJCQkJ c3RyaW5nLCBlcnJzdHIpLAorCQkJCSBlcnJjb250ZXh0KCJsaW5lICVkIG9mIGNvbmZpZ3Vy YXRpb24gZmlsZSBcIiVzXCIiLAorCQkJCQkJCWxpbmVfbnVtLCBmaWxlbmFtZSkpKTsKKwor CQkqZXJyX21zZyA9IHBzcHJpbnRmKCJpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiBcIiVz XCI6ICVzIiwKKwkJCQkJCQlzdHJpbmcsIGVycnN0cik7CisKKwkJcGZyZWUod3N0cik7CisJ CXJldHVybiBmYWxzZTsKKwl9CisKKwlwZnJlZSh3c3RyKTsKKwlyZXR1cm4gdHJ1ZTsKK30K KworLyoKKyAqIFJldHVybiB3aGV0aGVyICJtYXRjaCIgaXMgbWF0Y2hpbmcgdGhlIHJlZ3Vs YXIgZXhwcmVzc2lvbiAicmUiIG9yIG5vdC4KKyAqLworc3RhdGljIGJvb2wKK3Rva2VuX3Jl Z2V4ZWMoY29uc3QgY2hhciAqbWF0Y2gsIHJlZ2V4X3QgKnJlKQoreworCXBnX3djaGFyICAg KndtYXRjaHN0cjsKKwlpbnQJCQl3bWF0Y2hsZW47CisKKwl3bWF0Y2hzdHIgPSBwYWxsb2Mo KHN0cmxlbihtYXRjaCkgKyAxKSAqIHNpemVvZihwZ193Y2hhcikpOworCXdtYXRjaGxlbiA9 IHBnX21iMndjaGFyX3dpdGhfbGVuKG1hdGNoLCB3bWF0Y2hzdHIsIHN0cmxlbihtYXRjaCkp OworCisJaWYgKHBnX3JlZ2V4ZWMocmUsIHdtYXRjaHN0ciwgd21hdGNobGVuLCAwLCBOVUxM LCAwLCBOVUxMLCAwKSA9PSBSRUdfT0tBWSkKKwl7CisJCXBmcmVlKHdtYXRjaHN0cik7CisJ CXJldHVybiB0cnVlOworCX0KKworCXBmcmVlKHdtYXRjaHN0cik7CisJcmV0dXJuIGZhbHNl OworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbGlicHEvaGJhLmggYi9zcmMvaW5jbHVk ZS9saWJwcS9oYmEuaAppbmRleCBkMDZkYTgxODA2Li4yNGZlNTAyZDA2IDEwMDY0NAotLS0g YS9zcmMvaW5jbHVkZS9saWJwcS9oYmEuaAorKysgYi9zcmMvaW5jbHVkZS9saWJwcS9oYmEu aApAQCAtMTIwLDYgKzEyMCw5IEBAIHR5cGVkZWYgc3RydWN0IEhiYUxpbmUKIAljaGFyCSAg ICpyYWRpdXNpZGVudGlmaWVyc19zOwogCUxpc3QJICAgKnJhZGl1c3BvcnRzOwogCWNoYXIJ ICAgKnJhZGl1c3BvcnRzX3M7CisJTGlzdAkgICAqcm9sZXNfcmU7CisJTGlzdAkgICAqZGF0 YWJhc2VzX3JlOworCXJlZ2V4X3QJICAgaG9zdG5hbWVfcmU7CiB9IEhiYUxpbmU7CiAKIHR5 cGVkZWYgc3RydWN0IElkZW50TGluZQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvYXV0aGVudGlj YXRpb24vdC8wMDFfcGFzc3dvcmQucGwgYi9zcmMvdGVzdC9hdXRoZW50aWNhdGlvbi90LzAw MV9wYXNzd29yZC5wbAppbmRleCAzZTMwNzljODI0Li4yMTA1ODNjNDA2IDEwMDY0NAotLS0g YS9zcmMvdGVzdC9hdXRoZW50aWNhdGlvbi90LzAwMV9wYXNzd29yZC5wbAorKysgYi9zcmMv dGVzdC9hdXRoZW50aWNhdGlvbi90LzAwMV9wYXNzd29yZC5wbApAQCAtMjMsMjkgKzIzLDMy IEBAIGlmICghJHVzZV91bml4X3NvY2tldHMpCiAjIGFuZCB0aGVuIGV4ZWN1dGUgYSByZWxv YWQgdG8gcmVmcmVzaCBpdC4KIHN1YiByZXNldF9wZ19oYmEKIHsKLQlteSAkbm9kZSAgICAg ICA9IHNoaWZ0OwotCW15ICRoYmFfbWV0aG9kID0gc2hpZnQ7CisJbXkgJG5vZGUJCT0gc2hp ZnQ7CisJbXkgJGhvc3QJCT0gc2hpZnQ7CisJbXkgJGRhdGFiYXNlCT0gc2hpZnQ7CisJbXkg JHJvbGUJCT0gc2hpZnQ7CisJbXkgJG1ldGhvZAkJPSBzaGlmdDsKIAogCXVubGluaygkbm9k ZS0+ZGF0YV9kaXIgLiAnL3BnX2hiYS5jb25mJyk7CiAJIyBqdXN0IGZvciB0ZXN0aW5nIHB1 cnBvc2VzLCB1c2UgYSBjb250aW51YXRpb24gbGluZQotCSRub2RlLT5hcHBlbmRfY29uZign cGdfaGJhLmNvbmYnLCAibG9jYWwgYWxsIGFsbFxcXG4gJGhiYV9tZXRob2QiKTsKKwkkbm9k ZS0+YXBwZW5kX2NvbmYoJ3BnX2hiYS5jb25mJywgIiRob3N0ICRkYXRhYmFzZSAkcm9sZVxc XG4gJG1ldGhvZCIpOwogCSRub2RlLT5yZWxvYWQ7CiAJcmV0dXJuOwogfQogCiAjIFRlc3Qg YWNjZXNzIGZvciBhIHNpbmdsZSByb2xlLCB1c2VmdWwgdG8gd3JhcCBhbGwgdGVzdHMgaW50 byBvbmUuICBFeHRyYQogIyBuYW1lZCBwYXJhbWV0ZXJzIGFyZSBwYXNzZWQgdG8gY29ubmVj dF9vay9mYWlscyBhcy1pcy4KLXN1YiB0ZXN0X3JvbGUKK3N1YiB0ZXN0X2Nvbm4KIHsKIAls b2NhbCAkVGVzdDo6QnVpbGRlcjo6TGV2ZWwgPSAkVGVzdDo6QnVpbGRlcjo6TGV2ZWwgKyAx OwogCi0JbXkgKCRub2RlLCAkcm9sZSwgJG1ldGhvZCwgJGV4cGVjdGVkX3JlcywgJXBhcmFt cykgPSBAXzsKKwlteSAoJG5vZGUsICRjb25uLCAkbWV0aG9kLCAkZXhwZWN0ZWRfcmVzLCAl cGFyYW1zKSA9IEBfOwogCW15ICRzdGF0dXNfc3RyaW5nID0gJ2ZhaWxlZCc7CiAJJHN0YXR1 c19zdHJpbmcgPSAnc3VjY2VzcycgaWYgKCRleHBlY3RlZF9yZXMgZXEgMCk7CiAKLQlteSAk Y29ubnN0ciA9ICJ1c2VyPSRyb2xlIjsKKwlteSAkY29ubnN0ciA9ICIkY29ubiI7CiAJbXkg JHRlc3RuYW1lID0KLQkgICJhdXRoZW50aWNhdGlvbiAkc3RhdHVzX3N0cmluZyBmb3IgbWV0 aG9kICRtZXRob2QsIHJvbGUgJHJvbGUiOworCSAgImF1dGhlbnRpY2F0aW9uICRzdGF0dXNf c3RyaW5nIGZvciBtZXRob2QgJG1ldGhvZCwgY29ubiAkY29ubiI7CiAKIAlpZiAoJGV4cGVj dGVkX3JlcyBlcSAwKQogCXsKQEAgLTYxLDcgKzY0LDExIEBAIHN1YiB0ZXN0X3JvbGUKICMg SW5pdGlhbGl6ZSBwcmltYXJ5IG5vZGUKIG15ICRub2RlID0gUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3Rlci0+bmV3KCdwcmltYXJ5Jyk7CiAkbm9kZS0+aW5pdDsKLSRub2RlLT5hcHBlbmRf Y29uZigncG9zdGdyZXNxbC5jb25mJywgImxvZ19jb25uZWN0aW9ucyA9IG9uXG4iKTsKKyRu b2RlLT5hcHBlbmRfY29uZigKKyAgICAncG9zdGdyZXNxbC5jb25mJywgcXF7CitsaXN0ZW5f YWRkcmVzc2VzID0gJzEyNy4wLjAuMScKK2xvZ19jb25uZWN0aW9ucyA9IG9uCit9KTsKICRu b2RlLT5zdGFydDsKIAogIyBDcmVhdGUgMyByb2xlcyB3aXRoIGRpZmZlcmVudCBwYXNzd29y ZCBtZXRob2RzIGZvciBlYWNoIG9uZS4gVGhlIHNhbWUKQEAgLTc0LDYxICs4MSw2NiBAQCAk bm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiApOwogJEVOVnsiUEdQQVNTV09SRCJ9ID0g J3Bhc3MnOwogCisjIENyZWF0ZSBhIGRhdGFiYXNlIHRvIHRlc3QgcmVndWxhciBleHByZXNz aW9uCiskbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkNSRUFURSBkYXRhYmFzZSB0 ZXN0ZGI7IgorKTsKKwogIyBGb3IgInRydXN0IiBtZXRob2QsIGFsbCB1c2VycyBzaG91bGQg YmUgYWJsZSB0byBjb25uZWN0LiBUaGVzZSB1c2VycyBhcmUgbm90CiAjIGNvbnNpZGVyZWQg dG8gYmUgYXV0aGVudGljYXRlZC4KLXJlc2V0X3BnX2hiYSgkbm9kZSwgJ3RydXN0Jyk7Ci10 ZXN0X3JvbGUoJG5vZGUsICdzY3JhbV9yb2xlJywgJ3RydXN0JywgMCwKK3Jlc2V0X3BnX2hi YSgkbm9kZSwgJ2xvY2FsJywnYWxsJywgJ2FsbCcsICd0cnVzdCcpOwordGVzdF9jb25uKCRu b2RlLCAndXNlcj1zY3JhbV9yb2xlJywgJ3RydXN0JywgMCwKIAlsb2dfdW5saWtlID0+IFtx ci9jb25uZWN0aW9uIGF1dGhlbnRpY2F0ZWQ6L10pOwotdGVzdF9yb2xlKCRub2RlLCAnbWQ1 X3JvbGUnLCAndHJ1c3QnLCAwLAordGVzdF9jb25uKCRub2RlLCAndXNlcj1tZDVfcm9sZScs ICd0cnVzdCcsIDAsCiAJbG9nX3VubGlrZSA9PiBbcXIvY29ubmVjdGlvbiBhdXRoZW50aWNh dGVkOi9dKTsKIAogIyBGb3IgcGxhaW4gInBhc3N3b3JkIiBtZXRob2QsIGFsbCB1c2VycyBz aG91bGQgYWxzbyBiZSBhYmxlIHRvIGNvbm5lY3QuCi1yZXNldF9wZ19oYmEoJG5vZGUsICdw YXNzd29yZCcpOwotdGVzdF9yb2xlKCRub2RlLCAnc2NyYW1fcm9sZScsICdwYXNzd29yZCcs IDAsCityZXNldF9wZ19oYmEoJG5vZGUsICdsb2NhbCcsICdhbGwnLCAnYWxsJywgJ3Bhc3N3 b3JkJyk7Cit0ZXN0X2Nvbm4oJG5vZGUsICd1c2VyPXNjcmFtX3JvbGUnLCAncGFzc3dvcmQn LCAwLAogCWxvZ19saWtlID0+CiAJICBbcXIvY29ubmVjdGlvbiBhdXRoZW50aWNhdGVkOiBp ZGVudGl0eT0ic2NyYW1fcm9sZSIgbWV0aG9kPXBhc3N3b3JkL10pOwotdGVzdF9yb2xlKCRu b2RlLCAnbWQ1X3JvbGUnLCAncGFzc3dvcmQnLCAwLAordGVzdF9jb25uKCRub2RlLCAndXNl cj1tZDVfcm9sZScsICdwYXNzd29yZCcsIDAsCiAJbG9nX2xpa2UgPT4KIAkgIFtxci9jb25u ZWN0aW9uIGF1dGhlbnRpY2F0ZWQ6IGlkZW50aXR5PSJtZDVfcm9sZSIgbWV0aG9kPXBhc3N3 b3JkL10pOwogCiAjIEZvciAic2NyYW0tc2hhLTI1NiIgbWV0aG9kLCB1c2VyICJzY3JhbV9y b2xlIiBzaG91bGQgYmUgYWJsZSB0byBjb25uZWN0LgotcmVzZXRfcGdfaGJhKCRub2RlLCAn c2NyYW0tc2hhLTI1NicpOwotdGVzdF9yb2xlKAorcmVzZXRfcGdfaGJhKCRub2RlLCAnbG9j YWwnLCAnYWxsJywgJ2FsbCcsICdzY3JhbS1zaGEtMjU2Jyk7Cit0ZXN0X2Nvbm4oCiAJJG5v ZGUsCi0JJ3NjcmFtX3JvbGUnLAorCSd1c2VyPXNjcmFtX3JvbGUnLAogCSdzY3JhbS1zaGEt MjU2JywKIAkwLAogCWxvZ19saWtlID0+IFsKIAkJcXIvY29ubmVjdGlvbiBhdXRoZW50aWNh dGVkOiBpZGVudGl0eT0ic2NyYW1fcm9sZSIgbWV0aG9kPXNjcmFtLXNoYS0yNTYvCiAJXSk7 Ci10ZXN0X3JvbGUoJG5vZGUsICdtZDVfcm9sZScsICdzY3JhbS1zaGEtMjU2JywgMiwKK3Rl c3RfY29ubigkbm9kZSwgJ3VzZXI9bWQ1X3JvbGUnLCAnc2NyYW0tc2hhLTI1NicsIDIsCiAJ bG9nX3VubGlrZSA9PiBbcXIvY29ubmVjdGlvbiBhdXRoZW50aWNhdGVkOi9dKTsKIAogIyBU ZXN0IHRoYXQgYmFkIHBhc3N3b3JkcyBhcmUgcmVqZWN0ZWQuCiAkRU5WeyJQR1BBU1NXT1JE In0gPSAnYmFkcGFzcyc7Ci10ZXN0X3JvbGUoJG5vZGUsICdzY3JhbV9yb2xlJywgJ3NjcmFt LXNoYS0yNTYnLCAyLAordGVzdF9jb25uKCRub2RlLCAndXNlcj1zY3JhbV9yb2xlJywgJ3Nj cmFtLXNoYS0yNTYnLCAyLAogCWxvZ191bmxpa2UgPT4gW3FyL2Nvbm5lY3Rpb24gYXV0aGVu dGljYXRlZDovXSk7CiAkRU5WeyJQR1BBU1NXT1JEIn0gPSAncGFzcyc7CiAKICMgRm9yICJt ZDUiIG1ldGhvZCwgYWxsIHVzZXJzIHNob3VsZCBiZSBhYmxlIHRvIGNvbm5lY3QgKFNDUkFN CiAjIGF1dGhlbnRpY2F0aW9uIHdpbGwgYmUgcGVyZm9ybWVkIGZvciB0aGUgdXNlciB3aXRo IGEgU0NSQU0gc2VjcmV0LikKLXJlc2V0X3BnX2hiYSgkbm9kZSwgJ21kNScpOwotdGVzdF9y b2xlKCRub2RlLCAnc2NyYW1fcm9sZScsICdtZDUnLCAwLAorcmVzZXRfcGdfaGJhKCRub2Rl LCAnbG9jYWwnLCAnYWxsJywgJ2FsbCcsICdtZDUnKTsKK3Rlc3RfY29ubigkbm9kZSwgJ3Vz ZXI9c2NyYW1fcm9sZScsICdtZDUnLCAwLAogCWxvZ19saWtlID0+CiAJICBbcXIvY29ubmVj dGlvbiBhdXRoZW50aWNhdGVkOiBpZGVudGl0eT0ic2NyYW1fcm9sZSIgbWV0aG9kPW1kNS9d KTsKLXRlc3Rfcm9sZSgkbm9kZSwgJ21kNV9yb2xlJywgJ21kNScsIDAsCit0ZXN0X2Nvbm4o JG5vZGUsICd1c2VyPW1kNV9yb2xlJywgJ21kNScsIDAsCiAJbG9nX2xpa2UgPT4KIAkgIFtx ci9jb25uZWN0aW9uIGF1dGhlbnRpY2F0ZWQ6IGlkZW50aXR5PSJtZDVfcm9sZSIgbWV0aG9k PW1kNS9dKTsKIAogIyBUZXN0cyBmb3IgY2hhbm5lbCBiaW5kaW5nIHdpdGhvdXQgU1NMLgog IyBVc2luZyB0aGUgcGFzc3dvcmQgYXV0aGVudGljYXRpb24gbWV0aG9kOyBjaGFubmVsIGJp bmRpbmcgY2FuJ3Qgd29yawotcmVzZXRfcGdfaGJhKCRub2RlLCAncGFzc3dvcmQnKTsKK3Jl c2V0X3BnX2hiYSgkbm9kZSwgJ2xvY2FsJywgJ2FsbCcsICdhbGwnLCAncGFzc3dvcmQnKTsK ICRFTlZ7IlBHQ0hBTk5FTEJJTkRJTkcifSA9ICdyZXF1aXJlJzsKLXRlc3Rfcm9sZSgkbm9k ZSwgJ3NjcmFtX3JvbGUnLCAnc2NyYW0tc2hhLTI1NicsIDIpOwordGVzdF9jb25uKCRub2Rl LCAndXNlcj1zY3JhbV9yb2xlJywgJ3NjcmFtLXNoYS0yNTYnLCAyKTsKICMgU1NMIG5vdCBp biB1c2U7IGNoYW5uZWwgYmluZGluZyBzdGlsbCBjYW4ndCB3b3JrCi1yZXNldF9wZ19oYmEo JG5vZGUsICdzY3JhbS1zaGEtMjU2Jyk7CityZXNldF9wZ19oYmEoJG5vZGUsICdsb2NhbCcs ICdhbGwnLCAnYWxsJywgJ3NjcmFtLXNoYS0yNTYnKTsKICRFTlZ7IlBHQ0hBTk5FTEJJTkRJ TkcifSA9ICdyZXF1aXJlJzsKLXRlc3Rfcm9sZSgkbm9kZSwgJ3NjcmFtX3JvbGUnLCAnc2Ny YW0tc2hhLTI1NicsIDIpOwordGVzdF9jb25uKCRub2RlLCAndXNlcj1zY3JhbV9yb2xlJywg J3NjcmFtLXNoYS0yNTYnLCAyKTsKIAogIyBUZXN0IC5wZ3Bhc3MgcHJvY2Vzc2luZzsgYnV0 IHVzZSBhIHRlbXAgZmlsZSwgZG9uJ3Qgb3ZlcndyaXRlIHRoZSByZWFsIG9uZSEKIG15ICRw Z3Bhc3NmaWxlID0gIiR7UG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRtcF9jaGVja30vcGdw YXNzIjsKQEAgLTE0NSwxNSArMTU3LDQ1IEBAIGFwcGVuZF90b19maWxlKAogISk7CiBjaG1v ZCAwNjAwLCAkcGdwYXNzZmlsZSBvciBkaWU7CiAKLXJlc2V0X3BnX2hiYSgkbm9kZSwgJ3Bh c3N3b3JkJyk7Ci10ZXN0X3JvbGUoJG5vZGUsICdzY3JhbV9yb2xlJywgJ3Bhc3N3b3JkIGZy b20gcGdwYXNzJywgMCk7Ci10ZXN0X3JvbGUoJG5vZGUsICdtZDVfcm9sZScsICAgJ3Bhc3N3 b3JkIGZyb20gcGdwYXNzJywgMik7CityZXNldF9wZ19oYmEoJG5vZGUsICdsb2NhbCcsICdh bGwnLCAnYWxsJywgJ3Bhc3N3b3JkJyk7Cit0ZXN0X2Nvbm4oJG5vZGUsICd1c2VyPXNjcmFt X3JvbGUnLCAncGFzc3dvcmQgZnJvbSBwZ3Bhc3MnLCAwKTsKK3Rlc3RfY29ubigkbm9kZSwg J3VzZXI9bWQ1X3JvbGUnLCAgICdwYXNzd29yZCBmcm9tIHBncGFzcycsIDIpOwogCiBhcHBl bmRfdG9fZmlsZSgKIAkkcGdwYXNzZmlsZSwgcXEhCiAqOio6KjptZDVfcm9sZTpwXFxhc3MK ICEpOwogCi10ZXN0X3JvbGUoJG5vZGUsICdtZDVfcm9sZScsICdwYXNzd29yZCBmcm9tIHBn cGFzcycsIDApOwordGVzdF9jb25uKCRub2RlLCAndXNlcj1tZDVfcm9sZScsICdwYXNzd29y ZCBmcm9tIHBncGFzcycsIDApOworCisjIFRlc3Rpbmcgd2l0aCByZWd1bGFyIGV4cHJlc3Np b24gZm9yIHVzZXJuYW1lCityZXNldF9wZ19oYmEoJG5vZGUsICdsb2NhbCcsICdhbGwnLCAn L14uKm5vbWF0Y2guKiQsIGJhZHVzZXIsIC9eLiptZC4qJCcsICdwYXNzd29yZCcpOwordGVz dF9jb25uKCRub2RlLCAndXNlcj1tZDVfcm9sZScsICdwYXNzd29yZCwgbWF0Y2hpbmcgcmVn ZXhwIGZvciB1c2VybmFtZScsIDApOworCityZXNldF9wZ19oYmEoJG5vZGUsICdsb2NhbCcs ICdhbGwnLCAnL14uKm5vbWF0Y2guKiQsIGJhZHVzZXIsIC9eLiptX2QuKiQnLCAncGFzc3dv cmQnKTsKK3Rlc3RfY29ubigkbm9kZSwgJ3VzZXI9bWQ1X3JvbGUnLCAncGFzc3dvcmQsIG5v biBtYXRjaGluZyByZWdleHAgZm9yIHVzZXJuYW1lJywgMiwKKwkJbG9nX3VubGlrZSA9PiBb cXIvY29ubmVjdGlvbiBhdXRoZW50aWNhdGVkOi9dKTsKKworIyBUZXN0aW5nIHdpdGggcmVn dWxhciBleHByZXNzaW9uIGZvciBkYm5hbWUKK3Jlc2V0X3BnX2hiYSgkbm9kZSwgJ2xvY2Fs JywgJy9eLipub21hdGNoLiokLCBiYWRkYiwgL150LipiJCcsICdhbGwnLCAncGFzc3dvcmQn KTsKK3Rlc3RfY29ubigkbm9kZSwgJ3VzZXI9bWQ1X3JvbGUgZGJuYW1lPXRlc3RkYicsICdw YXNzd29yZCwgbWF0Y2hpbmcgcmVnZXhwIGZvciBkYm5hbWUnLCAwKTsKIAorcmVzZXRfcGdf aGJhKCRub2RlLCAnbG9jYWwnLCAnL14uKm5vbWF0Y2guKiQsIGJhZGRiLCAvXnQuKmJhJCcs ICdhbGwnLCAncGFzc3dvcmQnKTsKK3Rlc3RfY29ubigkbm9kZSwgJ3VzZXI9bWQ1X3JvbGUg ZGJuYW1lPXRlc3RkYicsICdwYXNzd29yZCwgbm9uIG1hdGNoaW5nIHJlZ2V4cCBmb3IgZGJu YW1lJywgMiwKKwkJbG9nX3VubGlrZSA9PiBbcXIvY29ubmVjdGlvbiBhdXRoZW50aWNhdGVk Oi9dKTsKKworIyBUZXN0aW5nIHdpdGggcmVndWxhciBleHByZXNzaW9uIGZvciBob3N0bmFt ZQorU0tJUDoKK3sKKwkjIEJlaW5nIGFibGUgdG8gZG8gYSByZXZlcnNlIGxvb2t1cCBvZiBh IGhvc3RuYW1lIG9uIFdpbmRvd3MgZm9yIGxvY2FsaG9zdAorCSMgaXMgbm90IGd1YXJhbnRl ZWQgb24gYWxsIGVudmlyb25tZW50cyBieSBkZWZhdWx0LgorCSMgU28sIHNraXAgdGhlIHJl Z3VsYXIgZXhwcmVzc2lvbiB0ZXN0IGZvciBob3N0bmFtZSBvbiBXaW5kb3dzLgorCXNraXAg IlJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgaG9zdG5hbWUgbm90IHRlc3RlZCBvbiBXaW5kb3dz IiwgMiBpZiAoJHdpbmRvd3Nfb3MpOworCisJcmVzZXRfcGdfaGJhKCRub2RlLCAnaG9zdCcs ICdhbGwnLCAnYWxsICAvXi4qJCcsICdwYXNzd29yZCcpOworCXRlc3RfY29ubigkbm9kZSwg J3VzZXI9bWQ1X3JvbGUgaG9zdD1sb2NhbGhvc3QnLCAncGFzc3dvcmQsIG1hdGNoaW5nIHJl Z2V4cCBmb3IgaG9zdG5hbWUnLCAwKTsKKworCXJlc2V0X3BnX2hiYSgkbm9kZSwgJ2hvc3Qn LCAnYWxsJywgJ2FsbCAgL14kJywgJ3Bhc3N3b3JkJyk7CisJdGVzdF9jb25uKCRub2RlLCAn dXNlcj1tZDVfcm9sZSBob3N0PWxvY2FsaG9zdCcsICdwYXNzd29yZCwgbm9uIG1hdGNoaW5n IHJlZ2V4cCBmb3IgaG9zdG5hbWUnLCAyKTsKK30KIGRvbmVfdGVzdGluZygpOwo= --------------R20b404071uOD08xOdd6f7fb--