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 1pDCKe-0006le-PU for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Jan 2023 22:34:01 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pDCKd-0004nq-Ex for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Jan 2023 22:33:59 +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 1pDCKc-0004nb-TP for pgsql-hackers@lists.postgresql.org; Wed, 04 Jan 2023 22:33:59 +0000 Received: from relay4-d.mail.gandi.net ([217.70.183.196]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pDCKZ-00054K-B3 for pgsql-hackers@lists.postgresql.org; Wed, 04 Jan 2023 22:33:57 +0000 Received: (Authenticated sender: adsend@dunslane.net) by mail.gandi.net (Postfix) with ESMTPSA id 7D54AE0004; Wed, 4 Jan 2023 22:33:51 +0000 (UTC) Content-Type: multipart/mixed; boundary="------------E5mzbIqr1pykdkliDlerdUE6" Message-ID: <4e46af89-6eab-b9cb-326f-c180fcabc7e5@dunslane.net> Date: Wed, 4 Jan 2023 17:33:50 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: Add a test to ldapbindpasswd Content-Language: en-US From: Andrew Dunstan To: Thomas Munro Cc: PostgreSQL Hackers References: <06005bfb-0fd7-9d08-e0e5-440f277b73b4@dunslane.net> <739a2ed6-a626-78e1-0358-fcdc02bfaad9@dunslane.net> <0d02a600-a094-1bcf-f588-a0d198ca40a3@dunslane.net> In-Reply-To: <0d02a600-a094-1bcf-f588-a0d198ca40a3@dunslane.net> 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. --------------E5mzbIqr1pykdkliDlerdUE6 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 2023-01-04 We 16:26, Andrew Dunstan wrote: > On 2023-01-02 Mo 09:45, Andrew Dunstan wrote: >> On 2023-01-01 Su 18:31, Andrew Dunstan wrote: >>> On 2023-01-01 Su 14:02, Thomas Munro wrote: >>>> On Mon, Jan 2, 2023 at 3:04 AM Andrew Dunstan wrote: >>>>> On 2022-12-19 Mo 11:16, Andrew Dunstan wrote: >>>>>> There is currently no test for the use of ldapbindpasswd in the >>>>>> pg_hba.conf file. This patch, mostly the work of John Naylor, remedies that. >>>>>> >>>>>> >>>>> This currently has failures on the cfbot for meson builds on FBSD13 and >>>>> Debian Bullseye, but it's not at all clear why. In both cases it fails >>>>> where the ldap server is started. >>>> I think it's failing when using meson. I guess it fails to fail on >>>> macOS only because you need to add a new path for Homebrew/ARM like >>>> commit 14d63dd2, so it's skipping (it'd be nice if we didn't need >>>> another copy of all that logic). Trying locally... it looks like >>>> slapd is failing silently, and with some tracing I can see it's >>>> sending an error message to my syslog daemon, which logged: >>>> >>>> 2023-01-02T07:50:20.853019+13:00 x1 slapd[153599]: main: TLS init def >>>> ctx failed: -1 >>>> >>>> Ah, it looks like this test is relying on "slapd-certs", which doesn't exist: >>>> >>>> tmunro@x1:~/projects/postgresql/build$ ls testrun/ldap/001_auth/data/ >>>> ldap.conf ldappassword openldap-data portlock slapd-certs slapd.conf >>>> tmunro@x1:~/projects/postgresql/build$ ls testrun/ldap/002_bindpasswd/data/ >>>> portlock slapd.conf >>>> >>>> I didn't look closely, but apparently there is something wrong in the >>>> part that copies certs from the ssl test? Not sure why it works for >>>> autoconf... >>> Let's see how we fare with this patch. >>> >>> >> Not so well :-(. This version tries to make the tests totally >> independent, as they should be. That's an attempt to get the cfbot to go >> green, but I am intending to refactor this code substantially so the >> common bits are in a module each test file will load. >> >> > This version factors out the creation of the LDAP server into a separate > perl Module. That makes both the existing test script and the new test > script a lot shorter, and will be useful for the nearby patch for a hook > for the ldapbindpassword. > > Looks like I fat fingered this. Here's a version that works. cheers andrew -- Andrew Dunstan EDB: https://www.enterprisedb.com --------------E5mzbIqr1pykdkliDlerdUE6 Content-Type: text/x-patch; charset=UTF-8; name="Add-a-test-for-ldapbindpasswd-v5.patch" Content-Disposition: attachment; filename="Add-a-test-for-ldapbindpasswd-v5.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L2xkYXAvTGRhcFNlcnZlci5wbSBiL3NyYy90ZXN0L2xk YXAvTGRhcFNlcnZlci5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li4wYjUzOGRlZmJmCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvbGRhcC9MZGFwU2Vy dmVyLnBtCkBAIC0wLDAgKzEsMzE5IEBACisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMK KyMgTGRhcFNlcnZlci5wbQorIworIyBNb2R1bGUgdG8gc2V0IHVwIGFuIExEQVAgc2VydmVy IGZvciB0ZXN0aW5nIHBnX2hiYS5jb25mIGxkYXAgYXV0aGVudGljYXRpb24KKyMKKyMgQ29w eXJpZ2h0IChjKSAyMDIzLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAor IworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCis9cG9kCisKKz1oZWFkMSBOQU1FCisKK0xk YXBTZXJ2ZXIgLSBjbGFzcyBmb3IgYW4gTERBUCBzZXJ2ZXIgZm9yIHRlc3RpbmcgcGdfaGJh LmNvbmYgYXV0aGVudGljYXRpb24KKworPWhlYWQxIFNZTk9QU0lTCisKKyAgdXNlIExkYXBT ZXJ2ZXI7CisKKyAgIyBoYXZlIHdlIGZvdW5kIG9wZW5sZGFwIGJpbmFpZXMgc3VpdGFibGUg Zm9yIHNldHRpbmcgdXAgYSBzZXJ2ZXI/CisgIG15ICRsZGFwX2JpbmFyaWVzX2ZvdW5kID0g JExkYXBTZXJ2ZXI6OnNldHVwOworCisgICMgY3JlYXRlIGEgc2VydmVyIHdpdGggdGhlIGdp dmVuIHJvb3QgcGFzc3dvcmQgYW5kIGF1dGggdHlwZQorICAjICh1c2VycyBvciBhbm9ueW1v dXMpCisgIG15ICRzZXJ2ZXIgPSBMZGFwU2VydmVyLT5uZXcoJHJvb3RfcGFzc3dvcmQsICRh dXRoX3R5cGUpOworCisgICMgQWRkIHRoZSBjb250ZW50cyBvZiBhbiBMRElGIGZpbGUgdG8g dGhlIHNlcnZlcgorICAkc2VydmVyLT5sZGFwYWRkX2ZpbGUgKCRwYXRoX3RvX2xkaWZfZGF0 YSk7CisKKyAgIyBzZXQgdGhlIExkYXAgcGFzc3dvcmQgZm9yIGEgdXNlcgorICAkc2VydmVy LT5sZGFwc2V0cHcoJHVzZXIsICRwYXNzd29yZCk7CisKKyAgIyBnZXQgZGV0YWlscyBvZiBz b21lIHNldHRpbmdzIGZvciB0aGUgc2VydmVyCisgIG15IEBwcm9wZXJ0aWVzID0gJHNlcnZl ci0+cHJvcCgkcHJvcG5hbWUxLCAkcHJvcG5hbWUyLCAuLi4pOworCis9aGVhZDEgREVTQ1JJ UFRJT04KKworICBMZGFwU2VydmVyIHRlc3RzIGluIGl0cyBJTklUIHBoYXNlIGZvciB0aGUg cHJlc2VuY2Ugb2Ygc3VpdGFibGUgb3BlbmxkYXAKKyAgYmluYXJpZXMuIEl0cyBjb25zdHJ1 Y3RvciBtZXRob2Qgc2V0cyB1cCBhbmQgcnVucyBhbiBMREFQIHNlcnZlciwgYW5kIGFueQor ICBzZXJ2ZXJzIHRoYXQgYXJlIHNldCB1cCBhcmUgdGVybWluYXRlZCBkdXJpbmcgaXRzIEVO RCBwaGFzZS4KKworPWN1dAorCitwYWNrYWdlIExkYXBTZXJ2ZXI7CisKK3VzZSBzdHJpY3Q7 Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKK3VzZSBU ZXN0OjpNb3JlOworCit1c2UgRmlsZTo6Q29weTsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKKwor IyBwcml2YXRlIHZhcmlhYmxlcworbXkgKCRzbGFwZCwgJGxkYXBfc2NoZW1hX2RpciwgQHNl cnZlcnMpOworCisjIHZpc2libGUgdmFyaWFibGUKK291ciAoJHNldHVwKTsKKworSU5JVAor eworCSRzZXR1cCA9IDE7CisJaWYgKCReTyBlcSAnZGFyd2luJyAmJiAtZCAnL29wdC9ob21l YnJldy9vcHQvb3BlbmxkYXAnKQorCXsKKwkJIyB0eXBpY2FsIHBhdGhzIGZvciBIb21lYnJl dyBvbiBBUk0KKwkJJHNsYXBkICAgICAgICAgICA9ICcvb3B0L2hvbWVicmV3L29wdC9vcGVu bGRhcC9saWJleGVjL3NsYXBkJzsKKwkJJGxkYXBfc2NoZW1hX2RpciA9ICcvb3B0L2hvbWVi cmV3L2V0Yy9vcGVubGRhcC9zY2hlbWEnOworCX0KKwllbHNpZiAoJF5PIGVxICdkYXJ3aW4n ICYmIC1kICcvdXNyL2xvY2FsL29wdC9vcGVubGRhcCcpCisJeworCQkjIHR5cGljYWwgcGF0 aHMgZm9yIEhvbWVicmV3IG9uIEludGVsCisJCSRzbGFwZCAgICAgICAgICAgPSAnL3Vzci9s b2NhbC9vcHQvb3BlbmxkYXAvbGliZXhlYy9zbGFwZCc7CisJCSRsZGFwX3NjaGVtYV9kaXIg PSAnL3Vzci9sb2NhbC9ldGMvb3BlbmxkYXAvc2NoZW1hJzsKKwl9CisJZWxzaWYgKCReTyBl cSAnZGFyd2luJyAmJiAtZCAnL29wdC9sb2NhbC9ldGMvb3BlbmxkYXAnKQorCXsKKwkJIyB0 eXBpY2FsIHBhdGhzIGZvciBNYWNQb3J0cworCQkkc2xhcGQgICAgICAgICAgID0gJy9vcHQv bG9jYWwvbGliZXhlYy9zbGFwZCc7CisJCSRsZGFwX3NjaGVtYV9kaXIgPSAnL29wdC9sb2Nh bC9ldGMvb3BlbmxkYXAvc2NoZW1hJzsKKwl9CisJZWxzaWYgKCReTyBlcSAnbGludXgnKQor CXsKKwkJJHNsYXBkICAgICAgICAgICA9ICcvdXNyL3NiaW4vc2xhcGQnOworCQkkbGRhcF9z Y2hlbWFfZGlyID0gJy9ldGMvbGRhcC9zY2hlbWEnIGlmIC1kICcvZXRjL2xkYXAvc2NoZW1h JzsKKwkJJGxkYXBfc2NoZW1hX2RpciA9ICcvZXRjL29wZW5sZGFwL3NjaGVtYScgaWYgLWQg Jy9ldGMvb3BlbmxkYXAvc2NoZW1hJzsKKwl9CisJZWxzaWYgKCReTyBlcSAnZnJlZWJzZCcp CisJeworCQkkc2xhcGQgICAgICAgICAgID0gJy91c3IvbG9jYWwvbGliZXhlYy9zbGFwZCc7 CisJCSRsZGFwX3NjaGVtYV9kaXIgPSAnL3Vzci9sb2NhbC9ldGMvb3BlbmxkYXAvc2NoZW1h JzsKKwl9CisJZWxzaWYgKCReTyBlcSAnb3BlbmJzZCcpCisJeworCQkkc2xhcGQgICAgICAg ICAgID0gJy91c3IvbG9jYWwvbGliZXhlYy9zbGFwZCc7CisJCSRsZGFwX3NjaGVtYV9kaXIg PSAnL3Vzci9sb2NhbC9zaGFyZS9leGFtcGxlcy9vcGVubGRhcC9zY2hlbWEnOworCX0KKwll bHNlCisJeworCQkkc2V0dXAgPSAwOworCX0KK30KKworRU5ECit7CisJZm9yZWFjaCBteSAk c2VydmVyIChAc2VydmVycykKKwl7CisJCW5leHQgdW5sZXNzIC1mICRzZXJ2ZXItPntwaWRm aWxlfTsKKwkJbXkgJHBpZCA9IHNsdXJwX2ZpbGUoJHNlcnZlci0+e3BpZGZpbGV9KTsKKwkJ Y2hvbXAgJHBpZDsKKwkJa2lsbCAnSU5UJywgJHBpZDsKKwl9Cit9CisKKz1wb2QKKworPWhl YWQxIE1FVEhPRFMKKworPW92ZXIKKworPWl0ZW0gTGRhcFNlcnZlci0+bmV3KCRyb290cHcs ICRhdXRoX3R5cGUpCisKK0NyZWF0ZSBhIG5ldyBMREFQIHNlcnZlci4KKworVGhlIHJvb3Rw dyBjYW4gYmUgdXNlZCB3aGVuIGF1dGhlbnRpY2F0aW5nIHdpdGggdGhlIGxkYXBiaW5kcGFz c3dkIG9wdGlvbi4KKworVGhlIGF1dGhfdHlwZSBpcyBlaXRoZXIgJ3VzZXJzJyBvciAnYW5v bnltb3VzJy4KKworPWJhY2sKKworPWN1dAorCitzdWIgbmV3Cit7CisJZGllICJubyBzdWl0 YWJsZSBiaW5hcmllcyBmb3VuZCIgdW5sZXNzICRzZXR1cDsKKworCW15ICRjbGFzcyA9IHNo aWZ0OworCW15ICRyb290cHcgPSBzaGlmdDsKKwlteSAkYXV0aHR5cGUgPSBzaGlmdDsgIyAn dXNlcnMnIG9yICdhbm9ueW1vdXMnCisJbXkgJHRlc3RuYW1lID0gYmFzZW5hbWUoKGNhbGxl cilbMV0sJy5wbCcpOworCW15ICRzZWxmID0ge307CisKKwlteSAkdGVzdF90ZW1wID0gUG9z dGdyZVNRTDo6VGVzdDo6VXRpbHM6OnRlbXBkaXIoImxkYXAtJHRlc3RuYW1lIik7CisKKwlt eSAkbGRhcF9kYXRhZGlyICA9ICIkdGVzdF90ZW1wL29wZW5sZGFwLWRhdGEiOworCW15ICRz bGFwZF9jZXJ0cyAgID0gIiR0ZXN0X3RlbXAvc2xhcGQtY2VydHMiOworCW15ICRzbGFwZF9w aWRmaWxlID0gIiR0ZXN0X3RlbXAvc2xhcGQucGlkIjsKKwlteSAkc2xhcGRfY29uZiAgICA9 ICIkdGVzdF90ZW1wL3NsYXBkLmNvbmYiOworCW15ICRzbGFwZF9sb2dmaWxlID0KKwkgICIk e1Bvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjpsb2dfcGF0aH0vc2xhcGQtJHRlc3RuYW1lLmxv ZyI7CisJbXkgJGxkYXBfc2VydmVyICAgPSAnbG9jYWxob3N0JzsKKwlteSAkbGRhcF9wb3J0 ICAgICA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI6OmdldF9mcmVlX3BvcnQoKTsKKwlt eSAkbGRhcHNfcG9ydCAgICA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI6OmdldF9mcmVl X3BvcnQoKTsKKwlteSAkbGRhcF91cmwgICAgICA9ICJsZGFwOi8vJGxkYXBfc2VydmVyOiRs ZGFwX3BvcnQiOworCW15ICRsZGFwc191cmwgICAgID0gImxkYXBzOi8vJGxkYXBfc2VydmVy OiRsZGFwc19wb3J0IjsKKwlteSAkbGRhcF9iYXNlZG4gICA9ICdkYz1leGFtcGxlLGRjPW5l dCc7CisJbXkgJGxkYXBfcm9vdGRuICAgPSAnY249TWFuYWdlcixkYz1leGFtcGxlLGRjPW5l dCc7CisJbXkgJGxkYXBfcm9vdHB3ICAgPSAkcm9vdHB3OworCW15ICRsZGFwX3B3ZmlsZSAg ID0gIiR0ZXN0X3RlbXAvbGRhcHBhc3N3b3JkIjsKKworCShteSAkY29uZiA9IDw8IkVPQyIp ICA9fiAgcy9eXHRcdC8vZ207CisJCWluY2x1ZGUgJGxkYXBfc2NoZW1hX2Rpci9jb3JlLnNj aGVtYQorCQlpbmNsdWRlICRsZGFwX3NjaGVtYV9kaXIvY29zaW5lLnNjaGVtYQorCQlpbmNs dWRlICRsZGFwX3NjaGVtYV9kaXIvbmlzLnNjaGVtYQorCQlpbmNsdWRlICRsZGFwX3NjaGVt YV9kaXIvaW5ldG9yZ3BlcnNvbi5zY2hlbWEKKworCQlwaWRmaWxlICRzbGFwZF9waWRmaWxl CisJCWxvZ2ZpbGUgJHNsYXBkX2xvZ2ZpbGUKKworCQlhY2Nlc3MgdG8gKgorCQkgICAgICAg IGJ5ICogcmVhZAorCQkgICAgICAgIGJ5ICRhdXRodHlwZSBhdXRoCisKKwkJZGF0YWJhc2Ug bGRpZgorCQlkaXJlY3RvcnkgJGxkYXBfZGF0YWRpcgorCisJCVRMU0NBQ2VydGlmaWNhdGVG aWxlICRzbGFwZF9jZXJ0cy9jYS5jcnQKKwkJVExTQ2VydGlmaWNhdGVGaWxlICRzbGFwZF9j ZXJ0cy9zZXJ2ZXIuY3J0CisJCVRMU0NlcnRpZmljYXRlS2V5RmlsZSAkc2xhcGRfY2VydHMv c2VydmVyLmtleQorCisJCXN1ZmZpeCAiZGM9ZXhhbXBsZSxkYz1uZXQiCisJCXJvb3RkbiAi JGxkYXBfcm9vdGRuIgorCQlyb290cHcgIiRsZGFwX3Jvb3RwdyIKK0VPQworCWFwcGVuZF90 b19maWxlKCRzbGFwZF9jb25mLCAkY29uZik7CisKKwlta2RpciAkbGRhcF9kYXRhZGlyIG9y IGRpZSAibWFraW5nICRsZGFwX2RhdGFkaXI6ICQhIjsKKwlta2RpciAkc2xhcGRfY2VydHMg IG9yIGRpZSAibWFraW5nICRzbGFwZF9jZXJ0czogJCEiOworCisJbXkgJGNlcnRkaXIgPSBk aXJuYW1lKF9fRklMRV9fKSAuICIvLi4vc3NsL3NzbCI7CisKKwljb3B5ICIkY2VydGRpci9z ZXJ2ZXJfY2EuY3J0IiwgIiRzbGFwZF9jZXJ0cy9jYS5jcnQiCisJICB8fCBkaWUgImNvcHlp bmcgY2EuY3J0OiAkISI7CisJIyBjaGVjayB3ZSBhY3R1YWxseSBoYXZlIHRoZSBmaWxlLCBh cyBjb3B5KCkgc29tZXRpbWVzIGdpdmVzIGEgZmFsc2Ugc3VjY2VzcworCS1mICIkc2xhcGRf Y2VydHMvY2EuY3J0IiB8fCBkaWUgImNvcHlpbmcgY2EuY3J0IChlcnJvciB1bmtub3duKSI7 CisJY29weSAiJGNlcnRkaXIvc2VydmVyLWNuLW9ubHkuY3J0IiwgIiRzbGFwZF9jZXJ0cy9z ZXJ2ZXIuY3J0IgorCSAgfHwgZGllICJjb3B5aW5nIHNlcnZlci5jcnQ6ICQhIjsKKwljb3B5 ICIkY2VydGRpci9zZXJ2ZXItY24tb25seS5rZXkiLCAiJHNsYXBkX2NlcnRzL3NlcnZlci5r ZXkiCisJICB8fCBkaWUgImNvcHlpbmcgc2VydmVyLmtleTogJCEiOworCisJYXBwZW5kX3Rv X2ZpbGUoJGxkYXBfcHdmaWxlLCAkbGRhcF9yb290cHcpOworCWNobW9kIDA2MDAsICRsZGFw X3B3ZmlsZSBvciBkaWUgImNobW9kIG9uICRsZGFwX3B3ZmlsZSI7CisKKwlzeXN0ZW1fb3Jf YmFpbCAkc2xhcGQsICctZicsICRzbGFwZF9jb25mLCAnLWgnLCAiJGxkYXBfdXJsICRsZGFw c191cmwiOworCisJIyB3YWl0IHVudGlsIHNsYXBkIGFjY2VwdHMgcmVxdWVzdHMKKwlteSAk cmV0cmllcyA9IDA7CisJd2hpbGUgKDEpCisJeworCQlsYXN0CisJCSAgaWYgKAorCQkJICBz eXN0ZW1fbG9nKAorCQkJCSAgImxkYXBzZWFyY2giLCAiLXNiYXNlIiwKKwkJCQkgICItSCIs ICAgICAgICAgJGxkYXBfdXJsLAorCQkJCSAgIi1iIiwgICAgICAgICAkbGRhcF9iYXNlZG4s CisJCQkJICAiLUQiLCAgICAgICAgICRsZGFwX3Jvb3RkbiwKKwkJCQkgICIteSIsICAgICAg ICAgJGxkYXBfcHdmaWxlLAorCQkJCSAgIi1uIiwgICAgICAgICAiJ29iamVjdGNsYXNzPSon IikgPT0gMCk7CisJCWRpZSAiY2Fubm90IGNvbm5lY3QgdG8gc2xhcGQiIGlmICsrJHJldHJp ZXMgPj0gMzAwOworCQlub3RlICJ3YWl0aW5nIGZvciBzbGFwZCB0byBhY2NlcHQgcmVxdWVz dHMuLi4iOworCQlUaW1lOjpIaVJlczo6dXNsZWVwKDEwMDAwMDApOworCX0KKworCSRzZWxm LT57cGlkZmlsZX0gPSAkc2xhcGRfcGlkZmlsZTsKKwkkc2VsZi0+e3B3ZmlsZX0gPSAkbGRh cF9wd2ZpbGU7CisJJHNlbGYtPnt1cmx9ID0gJGxkYXBfdXJsOworCSRzZWxmLT57c191cmx9 ID0gJGxkYXBzX3VybDsKKwkkc2VsZi0+e3NlcnZlcn0gPSAkbGRhcF9zZXJ2ZXI7CisJJHNl bGYtPntwb3J0fSA9ICRsZGFwX3BvcnQ7CisJJHNlbGYtPntzX3BvcnR9ID0gJGxkYXBzX3Bv cnQ7CisJJHNlbGYtPntiYXNlZG59ID0gJGxkYXBfYmFzZWRuOworCSRzZWxmLT57cm9vdGRu fSA9ICRsZGFwX3Jvb3RkbjsKKworCWJsZXNzICRzZWxmLCAkY2xhc3M7CisJcHVzaCBAc2Vy dmVycywgJHNlbGY7CisJcmV0dXJuICRzZWxmOworfQorCisjIHByaXZhdGUgcm91dGluZSB0 byBzZXQgdXAgdGhlIGVudmlyb25tZW50IGZvciBtZXRob2RzIGJlbG93CitzdWIgX2xkYXBl bnYKK3sKKwlteSAkc2VsZiA9IHNoaWZ0OworCW15ICVlbnYgPSAlRU5WOworCSRlbnZ7J0xE QVBVUkknfSA9ICRzZWxmLT57dXJsfTsKKwkkZW52eydMREFQQklOREROJ30gPSAkc2VsZi0+ e3Jvb3Rkbn07CisJcmV0dXJuICVlbnY7Cit9CisKKz1wb2QKKworPW92ZXIKKworPWl0ZW0g bGRhcF9hZGQoZmlsZW5hbWUpCisKK2ZpbGVuYW1lIGlzIHRoZSBwYXRoIHRvIGEgZmlsZSBj b250YWluaW5nIExESUYgZGF0YSB3aGljaCBpcyBhZGRlZCB0byB0aGUgTERBUAorc2VydmVy LgorCis9YmFjaworCis9Y3V0CisKK3N1YiBsZGFwYWRkX2ZpbGUKK3sKKwlteSAkc2VsZiA9 IHNoaWZ0OworCW15ICRmaWxlID0gc2hpZnQ7CisKKwlsb2NhbCAlRU5WID0gJHNlbGYtPl9s ZGFwZW52OworCisJc3lzdGVtX29yX2JhaWwgJ2xkYXBhZGQnLCAnLXgnLCAnLXknLCAkc2Vs Zi0+e3B3ZmlsZX0sICctZicsICRmaWxlOworfQorCis9cG9kCisKKz1vdmVyCisKKz1pdGVt IGxkYXBzZXRwdyh1c2VyLCBwYXNzd29yZCkKKworU2V0IHRoZSB1c2VyJ3MgcGFzc3dvcmQg aW4gdGhlIExEQVAgc2VydmVyCisKKz1iYWNrCisKKz1jdXQKKworc3ViIGxkYXBzZXRwdwor eworCW15ICRzZWxmID0gc2hpZnQ7CisJbXkgJHVzZXIgPSBzaGlmdDsKKwlteSAkcGFzc3dv cmQgPSBzaGlmdDsKKworCWxvY2FsICVFTlYgPSAkc2VsZi0+X2xkYXBlbnY7CisKKwlzeXN0 ZW1fb3JfYmFpbCAnbGRhcHBhc3N3ZCcsICcteCcsICcteScsICRzZWxmLT57cHdmaWxlfSwg Jy1zJywgJHBhc3N3b3JkLAorCSAgJHVzZXI7Cit9CisKKz1wb2QKKworPW92ZXIKKworPWl0 ZW0gcHJvcChuYW1lMSwgLi4uKQorCitSZXR1cm5zIHRoZSBsaXN0IG9mIHZhbHVlcyBmb3Ig dGhlIHNwZWNpZmllZCBwcm9wZXJ0aWVzIG9mIHRoZSBpbnN0YW5jZSwgc3VjaAorYXMgJ3Vy bCcsICdwb3J0JywgJ2Jhc2VkbicuCisKKz1iYWNrCisKKz1jdXQKKworc3ViIHByb3AKK3sK KwlteSAkc2VsZiA9IHNoaWZ0OworCW15IEBzZXR0aW5nczsKKwlwdXNoIEBzZXR0aW5ncywg JHNlbGYtPnskX30gZm9yZWFjaCAoQF8pOworCXJldHVybiBAc2V0dGluZ3M7Cit9CisKKzE7 CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9sZGFwL3QvMDAxX2F1dGgucGwgYi9zcmMvdGVzdC9s ZGFwL3QvMDAxX2F1dGgucGwKaW5kZXggZDM4ZjAxMTI1ZC4uMmVjYmU4MjhhMSAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvbGRhcC90LzAwMV9hdXRoLnBsCisrKyBiL3NyYy90ZXN0L2xkYXAv dC8wMDFfYXV0aC5wbApAQCAtMywxNzAgKzMsNDUgQEAKIAogdXNlIHN0cmljdDsKIHVzZSB3 YXJuaW5nczsKKwordXNlIEZpbmRCaW47IHVzZSBsaWIgIiRGaW5kQmluOjpSZWFsQmluLy4u IjsKKwogdXNlIEZpbGU6OkNvcHk7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgTGRhcFNl cnZlcjsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpDbHVzdGVyOwogdXNlIFRlc3Q6Ok1vcmU7CiAKLQotbXkgKCRzbGFwZCwgJGxkYXBf YmluX2RpciwgJGxkYXBfc2NoZW1hX2Rpcik7Ci0KLSRsZGFwX2Jpbl9kaXIgPSB1bmRlZjsg ICAgIyB1c3VhbGx5IGluIFBBVEgKLQogaWYgKCRFTlZ7d2l0aF9sZGFwfSBuZSAneWVzJykK IHsKIAlwbGFuIHNraXBfYWxsID0+ICdMREFQIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWls ZCc7CiB9CiBlbHNpZiAoJEVOVntQR19URVNUX0VYVFJBfSAhfiAvXGJsZGFwXGIvKQogewot CXBsYW4gc2tpcF9hbGwgPT4gJ1BvdGVudGlhbGx5IHVuc2FmZSB0ZXN0IExEQVAgbm90IGVu YWJsZWQgaW4gUEdfVEVTVF9FWFRSQSc7CisJcGxhbiBza2lwX2FsbCA9PgorCSAgJ1BvdGVu dGlhbGx5IHVuc2FmZSB0ZXN0IExEQVAgbm90IGVuYWJsZWQgaW4gUEdfVEVTVF9FWFRSQSc7 CiB9Ci1lbHNpZiAoJF5PIGVxICdkYXJ3aW4nICYmIC1kICcvb3B0L2hvbWVicmV3L29wdC9v cGVubGRhcCcpCi17Ci0JIyB0eXBpY2FsIHBhdGhzIGZvciBIb21lYnJldyBvbiBBUk0KLQkk c2xhcGQgICAgICAgICAgID0gJy9vcHQvaG9tZWJyZXcvb3B0L29wZW5sZGFwL2xpYmV4ZWMv c2xhcGQnOwotCSRsZGFwX3NjaGVtYV9kaXIgPSAnL29wdC9ob21lYnJldy9ldGMvb3Blbmxk YXAvc2NoZW1hJzsKLX0KLWVsc2lmICgkXk8gZXEgJ2RhcndpbicgJiYgLWQgJy91c3IvbG9j YWwvb3B0L29wZW5sZGFwJykKLXsKLQkjIHR5cGljYWwgcGF0aHMgZm9yIEhvbWVicmV3IG9u IEludGVsCi0JJHNsYXBkICAgICAgICAgICA9ICcvdXNyL2xvY2FsL29wdC9vcGVubGRhcC9s aWJleGVjL3NsYXBkJzsKLQkkbGRhcF9zY2hlbWFfZGlyID0gJy91c3IvbG9jYWwvZXRjL29w ZW5sZGFwL3NjaGVtYSc7Ci19Ci1lbHNpZiAoJF5PIGVxICdkYXJ3aW4nICYmIC1kICcvb3B0 L2xvY2FsL2V0Yy9vcGVubGRhcCcpCi17Ci0JIyB0eXBpY2FsIHBhdGhzIGZvciBNYWNQb3J0 cwotCSRzbGFwZCAgICAgICAgICAgPSAnL29wdC9sb2NhbC9saWJleGVjL3NsYXBkJzsKLQkk bGRhcF9zY2hlbWFfZGlyID0gJy9vcHQvbG9jYWwvZXRjL29wZW5sZGFwL3NjaGVtYSc7Ci19 Ci1lbHNpZiAoJF5PIGVxICdsaW51eCcpCi17Ci0JJHNsYXBkICAgICAgICAgICA9ICcvdXNy L3NiaW4vc2xhcGQnOwotCSRsZGFwX3NjaGVtYV9kaXIgPSAnL2V0Yy9sZGFwL3NjaGVtYScg aWYgLWQgJy9ldGMvbGRhcC9zY2hlbWEnOwotCSRsZGFwX3NjaGVtYV9kaXIgPSAnL2V0Yy9v cGVubGRhcC9zY2hlbWEnIGlmIC1kICcvZXRjL29wZW5sZGFwL3NjaGVtYSc7Ci19Ci1lbHNp ZiAoJF5PIGVxICdmcmVlYnNkJykKLXsKLQkkc2xhcGQgICAgICAgICAgID0gJy91c3IvbG9j YWwvbGliZXhlYy9zbGFwZCc7Ci0JJGxkYXBfc2NoZW1hX2RpciA9ICcvdXNyL2xvY2FsL2V0 Yy9vcGVubGRhcC9zY2hlbWEnOwotfQotZWxzaWYgKCReTyBlcSAnb3BlbmJzZCcpCi17Ci0J JHNsYXBkICAgICAgICAgICA9ICcvdXNyL2xvY2FsL2xpYmV4ZWMvc2xhcGQnOwotCSRsZGFw X3NjaGVtYV9kaXIgPSAnL3Vzci9sb2NhbC9zaGFyZS9leGFtcGxlcy9vcGVubGRhcC9zY2hl bWEnOwotfQotZWxzZQorZWxzaWYgKCEgJExkYXBTZXJ2ZXI6OnNldHVwKQogewogCXBsYW4g c2tpcF9hbGwgPT4KIAkgICJsZGFwIHRlc3RzIG5vdCBzdXBwb3J0ZWQgb24gJF5PIG9yIGRl cGVuZGVuY2llcyBub3QgaW5zdGFsbGVkIjsKIH0KIAotIyBtYWtlIHlvdXIgb3duIGVkaXRz IGhlcmUKLSMkc2xhcGQgPSAnJzsKLSMkbGRhcF9iaW5fZGlyID0gJyc7Ci0jJGxkYXBfc2No ZW1hX2RpciA9ICcnOworbm90ZSAic2V0dGluZyB1cCBMREFQIHNlcnZlciI7CiAKLSRFTlZ7 UEFUSH0gPSAiJGxkYXBfYmluX2RpcjokRU5We1BBVEh9IiBpZiAkbGRhcF9iaW5fZGlyOwor bXkgJGxkYXBfcm9vdHB3ID0gJ3NlY3JldCc7CitteSAkbGRhcCA9IExkYXBTZXJ2ZXItPm5l dygkbGRhcF9yb290cHcsJ2Fub255bW91cycpOyAjIHVzZSBhbm9ueW1vdXMgYXV0aAorJGxk YXAtPmxkYXBhZGRfZmlsZSgnYXV0aGRhdGEubGRpZicpOworJGxkYXAtPmxkYXBzZXRwdygn dWlkPXRlc3QxLGRjPWV4YW1wbGUsZGM9bmV0Jywnc2VjcmV0MScpOworJGxkYXAtPmxkYXBz ZXRwdygndWlkPXRlc3QyLGRjPWV4YW1wbGUsZGM9bmV0Jywnc2VjcmV0MicpOwogCi1teSAk bGRhcF9kYXRhZGlyICA9ICIke1Bvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0bXBfY2hlY2t9 L29wZW5sZGFwLWRhdGEiOwotbXkgJHNsYXBkX2NlcnRzICAgPSAiJHtQb3N0Z3JlU1FMOjpU ZXN0OjpVdGlsczo6dG1wX2NoZWNrfS9zbGFwZC1jZXJ0cyI7Ci1teSAkc2xhcGRfY29uZiAg ICA9ICIke1Bvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0bXBfY2hlY2t9L3NsYXBkLmNvbmYi OwotbXkgJHNsYXBkX3BpZGZpbGUgPSAiJHtQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dG1w X2NoZWNrfS9zbGFwZC5waWQiOwotbXkgJHNsYXBkX2xvZ2ZpbGUgPSAiJHtQb3N0Z3JlU1FM OjpUZXN0OjpVdGlsczo6bG9nX3BhdGh9L3NsYXBkLmxvZyI7Ci1teSAkbGRhcF9jb25mICAg ICA9ICIke1Bvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0bXBfY2hlY2t9L2xkYXAuY29uZiI7 Ci1teSAkbGRhcF9zZXJ2ZXIgICA9ICdsb2NhbGhvc3QnOwotbXkgJGxkYXBfcG9ydCAgICAg PSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOjpnZXRfZnJlZV9wb3J0KCk7Ci1teSAkbGRh cHNfcG9ydCAgICA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI6OmdldF9mcmVlX3BvcnQo KTsKLW15ICRsZGFwX3VybCAgICAgID0gImxkYXA6Ly8kbGRhcF9zZXJ2ZXI6JGxkYXBfcG9y dCI7Ci1teSAkbGRhcHNfdXJsICAgICA9ICJsZGFwczovLyRsZGFwX3NlcnZlcjokbGRhcHNf cG9ydCI7Ci1teSAkbGRhcF9iYXNlZG4gICA9ICdkYz1leGFtcGxlLGRjPW5ldCc7Ci1teSAk bGRhcF9yb290ZG4gICA9ICdjbj1NYW5hZ2VyLGRjPWV4YW1wbGUsZGM9bmV0JzsKLW15ICRs ZGFwX3Jvb3RwdyAgID0gJ3NlY3JldCc7Ci1teSAkbGRhcF9wd2ZpbGUgICA9ICIke1Bvc3Rn cmVTUUw6OlRlc3Q6OlV0aWxzOjp0bXBfY2hlY2t9L2xkYXBwYXNzd29yZCI7Ci0KLW5vdGUg InNldHRpbmcgdXAgc2xhcGQiOwotCi1hcHBlbmRfdG9fZmlsZSgKLQkkc2xhcGRfY29uZiwK LQlxcXtpbmNsdWRlICRsZGFwX3NjaGVtYV9kaXIvY29yZS5zY2hlbWEKLWluY2x1ZGUgJGxk YXBfc2NoZW1hX2Rpci9jb3NpbmUuc2NoZW1hCi1pbmNsdWRlICRsZGFwX3NjaGVtYV9kaXIv bmlzLnNjaGVtYQotaW5jbHVkZSAkbGRhcF9zY2hlbWFfZGlyL2luZXRvcmdwZXJzb24uc2No ZW1hCi0KLXBpZGZpbGUgJHNsYXBkX3BpZGZpbGUKLWxvZ2ZpbGUgJHNsYXBkX2xvZ2ZpbGUK LQotYWNjZXNzIHRvICoKLSAgICAgICAgYnkgKiByZWFkCi0gICAgICAgIGJ5IGFub255bW91 cyBhdXRoCi0KLWRhdGFiYXNlIGxkaWYKLWRpcmVjdG9yeSAkbGRhcF9kYXRhZGlyCi0KLVRM U0NBQ2VydGlmaWNhdGVGaWxlICRzbGFwZF9jZXJ0cy9jYS5jcnQKLVRMU0NlcnRpZmljYXRl RmlsZSAkc2xhcGRfY2VydHMvc2VydmVyLmNydAotVExTQ2VydGlmaWNhdGVLZXlGaWxlICRz bGFwZF9jZXJ0cy9zZXJ2ZXIua2V5Ci0KLXN1ZmZpeCAiZGM9ZXhhbXBsZSxkYz1uZXQiCi1y b290ZG4gIiRsZGFwX3Jvb3RkbiIKLXJvb3RwdyAkbGRhcF9yb290cHd9KTsKK215ICgkbGRh cF9zZXJ2ZXIsICRsZGFwX3BvcnQsICRsZGFwc19wb3J0LCAkbGRhcF91cmwsICRsZGFwc191 cmwsICRsZGFwX2Jhc2VkbiwKKwkkbGRhcF9yb290ZG4pID0KKyAgJGxkYXAtPnByb3AocXco c2VydmVyIHBvcnQgc19wb3J0IHVybCBzX3VybCBiYXNlZG4gcm9vdGRuKSk7CiAKICMgZG9u J3QgYm90aGVyIHRvIGNoZWNrIHRoZSBzZXJ2ZXIncyBjZXJ0ICh0aG91Z2ggcGVyaGFwcyB3 ZSBzaG91bGQpCi1hcHBlbmRfdG9fZmlsZSgKLQkkbGRhcF9jb25mLAotCXFxe1RMU19SRVFD RVJUIG5ldmVyCi19KTsKLQotbWtkaXIgJGxkYXBfZGF0YWRpciBvciBkaWU7Ci1ta2RpciAk c2xhcGRfY2VydHMgIG9yIGRpZTsKLQotIyB1c2UgZXhpc3RpbmcgY2VydHMgZnJvbSBuZWFy YnkgU1NMIHRlc3Qgc3VpdGUKLWNvcHkgIi4uL3NzbC9zc2wvc2VydmVyX2NhLmNydCIsICIk c2xhcGRfY2VydHMvY2EuY3J0IgotICB8fCBkaWUgImNvcHlpbmcgY2EuY3J0OiAkISI7Ci1j b3B5ICIuLi9zc2wvc3NsL3NlcnZlci1jbi1vbmx5LmNydCIsICIkc2xhcGRfY2VydHMvc2Vy dmVyLmNydCIKLSAgfHwgZGllICJjb3B5aW5nIHNlcnZlci5jcnQ6ICQhIjs7Ci1jb3B5ICIu Li9zc2wvc3NsL3NlcnZlci1jbi1vbmx5LmtleSIsICIkc2xhcGRfY2VydHMvc2VydmVyLmtl eSIKLSAgfHwgZGllICJjb3B5aW5nIHNlcnZlci5rZXk6ICQhIjs7Ci0KLXN5c3RlbV9vcl9i YWlsICRzbGFwZCwgJy1mJywgJHNsYXBkX2NvbmYsICctaCcsICIkbGRhcF91cmwgJGxkYXBz X3VybCI7Ci0KLUVORAotewotCWtpbGwgJ0lOVCcsIGBjYXQgJHNsYXBkX3BpZGZpbGVgIGlm IC1mICRzbGFwZF9waWRmaWxlOwotfQotCi1hcHBlbmRfdG9fZmlsZSgkbGRhcF9wd2ZpbGUs ICRsZGFwX3Jvb3Rwdyk7Ci1jaG1vZCAwNjAwLCAkbGRhcF9wd2ZpbGUgb3IgZGllOwotCi0j IHdhaXQgdW50aWwgc2xhcGQgYWNjZXB0cyByZXF1ZXN0cwotbXkgJHJldHJpZXMgPSAwOwot d2hpbGUgKDEpCi17Ci0JbGFzdAotCSAgaWYgKAotCQlzeXN0ZW1fbG9nKAotCQkJImxkYXBz ZWFyY2giLCAiLXNiYXNlIiwKLQkJCSItSCIsICAgICAgICAgJGxkYXBfdXJsLAotCQkJIi1i IiwgICAgICAgICAkbGRhcF9iYXNlZG4sCi0JCQkiLUQiLCAgICAgICAgICRsZGFwX3Jvb3Rk biwKLQkJCSIteSIsICAgICAgICAgJGxkYXBfcHdmaWxlLAotCQkJIi1uIiwgICAgICAgICAi J29iamVjdGNsYXNzPSonIikgPT0gMCk7Ci0JZGllICJjYW5ub3QgY29ubmVjdCB0byBzbGFw ZCIgaWYgKyskcmV0cmllcyA+PSAzMDA7Ci0Jbm90ZSAid2FpdGluZyBmb3Igc2xhcGQgdG8g YWNjZXB0IHJlcXVlc3RzLi4uIjsKLQlUaW1lOjpIaVJlczo6dXNsZWVwKDEwMDAwMDApOwot fQotCi0kRU5WeydMREFQVVJJJ30gICAgPSAkbGRhcF91cmw7Ci0kRU5WeydMREFQQklORERO J30gPSAkbGRhcF9yb290ZG47Ci0kRU5WeydMREFQQ09ORid9ICAgPSAkbGRhcF9jb25mOwot Ci1ub3RlICJsb2FkaW5nIExEQVAgZGF0YSI7Ci0KLXN5c3RlbV9vcl9iYWlsICdsZGFwYWRk JywgICAgJy14JywgJy15JywgJGxkYXBfcHdmaWxlLCAnLWYnLCAnYXV0aGRhdGEubGRpZic7 Ci1zeXN0ZW1fb3JfYmFpbCAnbGRhcHBhc3N3ZCcsICcteCcsICcteScsICRsZGFwX3B3Zmls ZSwgJy1zJywgJ3NlY3JldDEnLAotICAndWlkPXRlc3QxLGRjPWV4YW1wbGUsZGM9bmV0JzsK LXN5c3RlbV9vcl9iYWlsICdsZGFwcGFzc3dkJywgJy14JywgJy15JywgJGxkYXBfcHdmaWxl LCAnLXMnLCAnc2VjcmV0MicsCi0gICd1aWQ9dGVzdDIsZGM9ZXhhbXBsZSxkYz1uZXQnOwor JEVOVnsnTERBUFRMU19SRVFDRVJUJ30gPSAibmV2ZXIiOwogCiBub3RlICJzZXR0aW5nIHVw IFBvc3RncmVTUUwgaW5zdGFuY2UiOwogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9sZGFwL3Qv MDAyX2JpbmRwYXNzd2QucGwgYi9zcmMvdGVzdC9sZGFwL3QvMDAyX2JpbmRwYXNzd2QucGwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uMTEyMTQ5MzQ0YQotLS0g L2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L2xkYXAvdC8wMDJfYmluZHBhc3N3ZC5wbApAQCAt MCwwICsxLDkyIEBACisKKyMgQ29weXJpZ2h0IChjKSAyMDIzLCBQb3N0Z3JlU1FMIEdsb2Jh bCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzOworCit1 c2UgRmluZEJpbjsgdXNlIGxpYiAiJEZpbmRCaW46OlJlYWxCaW4vLi4iOworCit1c2UgRmls ZTo6Q29weTsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBMZGFwU2VydmVyOwordXNlIFBv c3RncmVTUUw6OlRlc3Q6OlV0aWxzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7 Cit1c2UgVGVzdDo6TW9yZTsKKworaWYgKCRFTlZ7d2l0aF9sZGFwfSBuZSAneWVzJykKK3sK KwlwbGFuIHNraXBfYWxsID0+ICdMREFQIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBidWlsZCc7 Cit9CitlbHNpZiAoJEVOVntQR19URVNUX0VYVFJBfSAhfiAvXGJsZGFwXGIvKQoreworCXBs YW4gc2tpcF9hbGwgPT4KKwkgICdQb3RlbnRpYWxseSB1bnNhZmUgdGVzdCBMREFQIG5vdCBl bmFibGVkIGluIFBHX1RFU1RfRVhUUkEnOworfQorZWxzaWYgKCEgJExkYXBTZXJ2ZXI6OnNl dHVwKQoreworCXBsYW4gc2tpcF9hbGwgPT4KKwkgICJsZGFwIHRlc3RzIG5vdCBzdXBwb3J0 ZWQgb24gJF5PIG9yIGRlcGVuZGVuY2llcyBub3QgaW5zdGFsbGVkIjsKK30KKworbm90ZSAi c2V0dGluZyB1cCBMREFQIHNlcnZlciI7CisKK215ICRsZGFwX3Jvb3RwdyA9ICdzZWNyZXQn OworbXkgJGxkYXAgPSBMZGFwU2VydmVyLT5uZXcoJGxkYXBfcm9vdHB3LCd1c2VycycpOyAj IG5vIGFub255bW91cyBhdXRoCiskbGRhcC0+bGRhcGFkZF9maWxlKCdhdXRoZGF0YS5sZGlm Jyk7CiskbGRhcC0+bGRhcHNldHB3KCd1aWQ9dGVzdDEsZGM9ZXhhbXBsZSxkYz1uZXQnLCdz ZWNyZXQxJyk7CiskbGRhcC0+bGRhcHNldHB3KCd1aWQ9dGVzdDIsZGM9ZXhhbXBsZSxkYz1u ZXQnLCdzZWNyZXQyJyk7CisKK215ICgkbGRhcF9zZXJ2ZXIsICRsZGFwX3BvcnQsICRsZGFw X2Jhc2VkbiwgJGxkYXBfcm9vdGRuKSA9CisgICRsZGFwLT5wcm9wKHF3KHNlcnZlciBwb3J0 IGJhc2VkbiByb290ZG4pKTsKKworbm90ZSAic2V0dGluZyB1cCBQb3N0Z3JlU1FMIGluc3Rh bmNlIjsKKworbXkgJG5vZGUgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25v ZGUnKTsKKyRub2RlLT5pbml0OworJG5vZGUtPmFwcGVuZF9jb25mKCdwb3N0Z3Jlc3FsLmNv bmYnLCAibG9nX2Nvbm5lY3Rpb25zID0gb25cbiIpOworJG5vZGUtPnN0YXJ0OworCiskbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICdDUkVBVEUgVVNFUiB0ZXN0MDsnKTsKKyRub2Rl LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0NSRUFURSBVU0VSIHRlc3QxOycpOworJG5vZGUt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAnQ1JFQVRFIFVTRVIgInRlc3QyQGV4YW1wbGUubmV0 IjsnKTsKKworbm90ZSAicnVubmluZyB0ZXN0cyI7CisKK3N1YiB0ZXN0X2FjY2Vzcworewor CWxvY2FsICRUZXN0OjpCdWlsZGVyOjpMZXZlbCA9ICRUZXN0OjpCdWlsZGVyOjpMZXZlbCAr IDE7CisKKwlteSAoJG5vZGUsICRyb2xlLCAkZXhwZWN0ZWRfcmVzLCAkdGVzdF9uYW1lLCAl cGFyYW1zKSA9IEBfOworCW15ICRjb25uc3RyID0gInVzZXI9JHJvbGUiOworCisJaWYgKCRl eHBlY3RlZF9yZXMgZXEgMCkKKwl7CisJCSRub2RlLT5jb25uZWN0X29rKCRjb25uc3RyLCAk dGVzdF9uYW1lLCAlcGFyYW1zKTsKKwl9CisJZWxzZQorCXsKKwkJIyBObyBjaGVja3Mgb2Yg dGhlIGVycm9yIG1lc3NhZ2UsIG9ubHkgdGhlIHN0YXR1cyBjb2RlLgorCQkkbm9kZS0+Y29u bmVjdF9mYWlscygkY29ubnN0ciwgJHRlc3RfbmFtZSwgJXBhcmFtcyk7CisJfQorfQorCitu b3RlICJ1c2UgbGRhcGJpbmRwYXNzd2QiOworCit1bmxpbmsoJG5vZGUtPmRhdGFfZGlyIC4g Jy9wZ19oYmEuY29uZicpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwZ19oYmEuY29uZicsCisJ cXF7bG9jYWwgYWxsIGFsbCBsZGFwIGxkYXBzZXJ2ZXI9JGxkYXBfc2VydmVyIGxkYXBwb3J0 PSRsZGFwX3BvcnQgbGRhcGJhc2Vkbj0iJGxkYXBfYmFzZWRuIiBsZGFwYmluZGRuPSIkbGRh cF9yb290ZG4gbGRhcGJpbmRwYXNzd2Q9d3Jvbmd9CispOworJG5vZGUtPnJlc3RhcnQ7CisK KyRFTlZ7IlBHUEFTU1dPUkQifSA9ICdzZWNyZXQxJzsKK3Rlc3RfYWNjZXNzKCRub2RlLCAn dGVzdDEnLCAyLCAnc2VhcmNoK2JpbmQgYXV0aGVudGljYXRpb24gZmFpbHMgd2l0aCB3cm9u ZyBsZGFwYmluZHBhc3N3ZCcpOworCit1bmxpbmsoJG5vZGUtPmRhdGFfZGlyIC4gJy9wZ19o YmEuY29uZicpOworJG5vZGUtPmFwcGVuZF9jb25mKCdwZ19oYmEuY29uZicsCisJcXF7bG9j YWwgYWxsIGFsbCBsZGFwIGxkYXBzZXJ2ZXI9JGxkYXBfc2VydmVyIGxkYXBwb3J0PSRsZGFw X3BvcnQgbGRhcGJhc2Vkbj0iJGxkYXBfYmFzZWRuIiBsZGFwYmluZGRuPSIkbGRhcF9yb290 ZG4iIGxkYXBiaW5kcGFzc3dkPSIkbGRhcF9yb290cHcifQorKTsKKyRub2RlLT5yZXN0YXJ0 OworCit0ZXN0X2FjY2Vzcygkbm9kZSwgJ3Rlc3QxJywgMCwgJ3NlYXJjaCtiaW5kIGF1dGhl bnRpY2F0aW9uIHN1Y2NlZWRzIHdpdGggbGRhcGJpbmRwYXNzd2QnKTsKKworZG9uZV90ZXN0 aW5nKCk7Cg== --------------E5mzbIqr1pykdkliDlerdUE6--