Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uw6Ek-0060BG-Bv for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Sep 2025 21:50:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uw6Ej-00F4b0-31 for pgsql-hackers@arkaria.postgresql.org; Tue, 09 Sep 2025 21:50:49 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uw6Ei-00F4as-3W for pgsql-hackers@lists.postgresql.org; Tue, 09 Sep 2025 21:50:49 +0000 Received: from mail-qv1-xf33.google.com ([2607:f8b0:4864:20::f33]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uw6Ee-001XsD-0n for pgsql-hackers@postgresql.org; Tue, 09 Sep 2025 21:50:46 +0000 Received: by mail-qv1-xf33.google.com with SMTP id 6a1803df08f44-70df91bdc53so49748666d6.3 for ; Tue, 09 Sep 2025 14:50:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1757454643; x=1758059443; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=o7gk4E6KpHEskEwBaMUqkBawBzgRNrEHsjkrz6Csg84=; b=gXnqNBBfj+rS3CPfA2E1mho0chK9pGapoqRqxeiKBAKXNHOrS8EBPp8DFZ5ccffDIN rQzuyoxaPeN9UfT2moYMHj5xZplCI5GCvzOB69VshfMlLkHyoSmF+ATnO6bBJ1aECDXT EMvxACm6Jo3PQxb5L+Lp2j+pTW2c1XJIqKYv1VAEnxK/hP/9MpWDJFc2NbSkJypTQ7jb yzyu5ZiUEhvULbhnlllKcFMdkFFsBmU3g4c9KJTmdNMLRkmRjMRDuMBhg01C66hUREGS 2nx4UgUzXyHM4c/nYYZk1JBw+pFee2Wsh/0Dp1DRYbpZ6St4Saq1RCpPpILvT+p970RA F+mQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757454643; x=1758059443; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=o7gk4E6KpHEskEwBaMUqkBawBzgRNrEHsjkrz6Csg84=; b=pawJs3knxapmZA9KM8wuGK0puNrR8ghJ1lKNfUs5EzUHhFeakU6BVE47T9u3WW+aXR uVS9JaEIDqNOlnul0HRlU5iczEc5SAlRQpqbvp8jsfCe+yR7vhvTdRvfxEuf0bS2AUFW Z2JL8ZGTOUXZfJ1UJBCFO1cDXz2ktkNnhaMEeLQkcCrz+gikLPMvrEeimjGg/07aqiB+ izYiG5utl3eWpoSLFWhlQQS48K6TRYPvOXnKgiBbXyFp6OSjCEzy6SFIw7gB331K40cQ nonjj5bL7NF/UWnZbXfXpxnPbBALOnKoOyxLRMy0S9vEN6uYO+tvgScdPEqRe9dZCCoI 9rYQ== X-Gm-Message-State: AOJu0Yxa/ion3aSN+WTMrNKvkYh63ZzR6h+wjZcJIttemAKLYZ1cJY+Z gOoLIfK9wlObqPHhRGl9W8Gw8i17aRKlM0hW00dXT52DGpedgd/QwH71aq0+gk30VHJy6nLgRVJ dnfZ/fteovflTHgre/4Tv1niiVHY8m36TBB/+u4a8iB2ual+j8dKJCENm X-Gm-Gg: ASbGncv/LgCM4d2g1NnjuzHsQghndN2jaAxqeLk4/CX52izoAAEtQ9YqMqCMZesUafb u29qDFar0ZV935i7WQvnkotl3jKEN8pgL86bVQbrJQeZeV1k0v0hC2TE5RM6IW3I2r/pmml80un Vd50XlMbCJzlMKvhz40hYRBQIvSOQpCqge9U/8JUwIE5sd1FT6k3IvjwM90mGZhuEDntYZOeCyv HGNCyrQ50bfEjhl3Yrd X-Google-Smtp-Source: AGHT+IGYhlx98BmyBmRLJJPYPugAH7zzoWxD0YS/Kp+IKyv2/ej+9xY2bcq6/fS92TyCCKQR013uCJZ+/7DOz314nX4= X-Received: by 2002:a05:6214:493:b0:71e:bbb8:9dba with SMTP id 6a1803df08f44-7394295936dmr126210756d6.56.1757454642744; Tue, 09 Sep 2025 14:50:42 -0700 (PDT) MIME-Version: 1.0 References: <20240610200411.byj6sv2vpgol6wcf@awork3.anarazel.de> <20240612155040.u6cvatdb5tiwcxci@awork3.anarazel.de> <2302192.1718380169@sss.pgh.pa.us> In-Reply-To: From: Jacob Champion Date: Tue, 9 Sep 2025 14:50:31 -0700 X-Gm-Features: AS18NWCGNCCeTY9geONzsCcqd5SrwjjAfheXW3GMpY44Z1hE2kr3oJoVDH8GHZs Message-ID: Subject: Re: RFC: adding pytest as a supported test framework To: PostgreSQL Hackers Cc: Robert Haas , Jelte Fennema-Nio , Daniel Gustafsson , Andres Freund , Tom Lane , Peter Eisentraut , Nazir Bilal Yavuz Content-Type: multipart/mixed; boundary="000000000000b0ce9f063e654bfa" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000b0ce9f063e654bfa Content-Type: text/plain; charset="UTF-8" Hi everyone, it's been a while for this thread. = Status = Since the last email, quite a bit of offline chatter has happened, particularly at FOSDEM [1] and PGConf.dev [2]. The dev-meeting audiences, at least, appear to have reached a critical mass of nodding heads and cautious optimism around the use of a pytest suite. Some are more optimistic than others, some are quite skeptical, some are completely silent, but no one has -1'd it yet. I think I've been solidly outvoted in my attempt to support Python and Perl suites side-by-side in perpetuity. Many, many people have expressed that they'd feel disappointed if that were a permanent situation, so I've been trying to adapt my approach to the idea that we would need to port existing Perl tests at _some_ point in the timeline. Simultaneously, I've been approached by some people offline who are pretty clearly waiting for me to make the first move here. I'm a bit uncomfortable with that -- no one needs my permission to post patches in this vein! -- but I get that this entire topic is a balancing act, so it makes some sense. Thank you all for your patience. Here is a patchset. = Patches = This is dev-quality, not targeted for commit yet, but hopefully enough to spark some opinions and conversation. 0001: Prepares for pytest support, by adding Meson summary lines indicating when the Perl TAP tests are enabled. Peter E mentioned to me that it was hard to figure out which suites had been enabled, so hopefully this helps a bit. I'm not sure what to do on the Autoconf side. 0002: Adds Meson and Autoconf support for running pytest, via --enable-pytest or -Dpytest=enabled. This is a skeleton. There is no Postgres-specific test logic in this patch. So if you like pytest, but hate how I write tests in it, you have the option of basing your alternative on top of this patch to show us. I also added a failing test so that you can all see what that looks like in the CI. (I'll put this in the Draft CF [3].) When enabling the feature, the check_pytest.py script checks that the configured `PYTHON` executable has all of pytest-requirements.txt installed. Peter pointed out that this is incorrect: what we actually want to check is that the interpreter used by pytest has all of the required packages, and the two could be different. One way to solve that problem is to just get rid of the check script, and assume that if pytest is installed, we're good to go. But I ran into enough installation weirdness in the CI (especially for MinGW, ugh) that it was really helpful to have a script say "no, you're still missing this." I'd like to help buildfarm operators in a similar way. Unfortunately, check_pytest.py is pretty complex, and it doesn't make as much sense to pay that cost unless and until we add more package dependencies, as 0003 does later in the set. Thoughts? For Autoconf, I'm just running pytest directly rather than translating its output through pgtap + prove, mostly because I think that's a better dev experience. It has color and everything. Is that okay? 0003: Ports a tiny subset of the SSL client tests. This is enough to show off - pytest fixtures and caching via scopes - FFI binding to libpq via ctypes - generation of TLS certs via the py-cryptography package - low-level protocol testing without a "real" server Andres requested a while back that we control concurrency via Meson rather than pytest's global discovery. So there is no use of pytest-xdist here. (I don't think we're in much danger of having CPUs go idle during a `meson test` run, anyway.) 0004: Ports a tiny subset of the SSL server tests. This additionally shows off - more complicated test parameterization - my vision of how we can cache and configure a running server instance via pytest fixtures Basically, server configuration changes are pushed and popped off of a stack as fixtures are entered and exited. (C++ folks will be completely unimpressed, but I'm still proud of it.) We'd need to discuss the proper use of scopes and establish project-wide fixture conventions if we go in this direction, but I hope we do something like it; I really want to be able to run each and every test in isolation. There are some Win32 syscall examples as well, for those who are interested, but there's nothing that uses that code at the moment. 0005: Adds a new variable to Cirrus to control the default Meson suites. 0006: Sets that new variable to just the pytest suites, so that I don't burn too much Cirrus time for this proof of concept, and turns on all OSes. = Other General Thoughts = You might immediately complain that we don't want to open-code every single byte in the protocol for a test, as I have done here. I don't want to, either; I want to use Construct [4] for that. I also want us to have end-to-end tests that combine the fixtures in 0003 and 0004 -- but I want everyone to be able to choose between end-to-end tests and mocked client/server tests, and I'm most excited about the latter, so that's what I focused on here. The distinction between the fixture scopes "session" and "module" is useful in the Autoconf case (which runs all tests in a pyt/ folder at once) and useless in the Meson case (which runs each pyt/*.py test in an individual pytest instance). I suspect this will cause some friction, but I don't know how much. I haven't been very careful in my use of "module" scope yet. I think devs should be able to run pytest directly from the source root. So I've put settings specific to Autoconf/Meson into Makefile.global/meson.build instead of pytest.ini. (For instance, I don't imagine anyone wants to read the pgtap output directly.) Formatting of the patchset has been provided by isort + black. I hear ruff is the new kid on the block, but I don't see raw speed being incredibly important for us. And for this particular use case, I really like the idea of an "unconfigurable" PEP8 formatter so we can do other things with our time. Huge thanks to Andres and Bilal for helping me debug Windows problems in the CI. Wow, thanks for reading this far. WDYT? --Jacob [1] https://wiki.postgresql.org/wiki/FOSDEM/PGDay_2025_Developer_Meeting#Additional_toolchains_in_the_test_suite [2] https://wiki.postgresql.org/wiki/PGConf.dev_2025_Developer_Meeting [3] https://commitfest.postgresql.org/54/ [4] https://construct.readthedocs.io/en/latest/ --000000000000b0ce9f063e654bfa Content-Type: application/octet-stream; name="v1-0001-meson-Include-TAP-tests-in-the-configuration-summ.patch" Content-Disposition: attachment; filename="v1-0001-meson-Include-TAP-tests-in-the-configuration-summ.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mfd2s0kg0 RnJvbSBiZTc5NDE1Y2QxZjQ0MzczMmE5YTkyZjE1MjE2ZDNjOWU0NTZhYzAyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogRnJpLCA1IFNlcCAyMDI1IDE2OjM5OjA4IC0wNzAwClN1YmplY3Q6 IFtQQVRDSCB2MSAxLzZdIG1lc29uOiBJbmNsdWRlIFRBUCB0ZXN0cyBpbiB0aGUgY29uZmlndXJh dGlvbiBzdW1tYXJ5CgouLi50byBtYWtlIGl0IG9idmlvdXMgd2hlbiB0aGV5J3ZlIGJlZW4gZW5h YmxlZC4gcHJvdmUgaXMgYWRkZWQgdG8gdGhlCmV4ZWN1dGFibGVzIGxpc3QgZm9yIGdvb2QgbWVh c3VyZS4KClRPRE86IGRvZXMgQXV0b2NvbmYgbmVlZCBzb21ldGhpbmcgc2ltaWxhcj8KClBlciBj b21wbGFpbnQgYnkgUGV0ZXIgRWlzZW50cmF1dC4KLS0tCiBtZXNvbi5idWlsZCB8IDkgKysrKysr KysrCiAxIGZpbGUgY2hhbmdlZCwgOSBpbnNlcnRpb25zKCspCgpkaWZmIC0tZ2l0IGEvbWVzb24u YnVpbGQgYi9tZXNvbi5idWlsZAppbmRleCBhYjgxMDFkNjdiMi4uMjU5ODc1OGY2ZDMgMTAwNjQ0 Ci0tLSBhL21lc29uLmJ1aWxkCisrKyBiL21lc29uLmJ1aWxkCkBAIC0zOTQ5LDYgKzM5NDksNyBA QCBzdW1tYXJ5KAogICAgICdiaXNvbic6ICdAMEAgQDFAJy5mb3JtYXQoYmlzb24uZnVsbF9wYXRo KCksIGJpc29uX3ZlcnNpb24pLAogICAgICdkdHJhY2UnOiBkdHJhY2UsCiAgICAgJ2ZsZXgnOiAn QDBAIEAxQCcuZm9ybWF0KGZsZXguZnVsbF9wYXRoKCksIGZsZXhfdmVyc2lvbiksCisgICAgJ3By b3ZlJzogcHJvdmUsCiAgIH0sCiAgIHNlY3Rpb246ICdQcm9ncmFtcycsCiApCkBAIC0zOTg1LDMg KzM5ODYsMTEgQEAgc3VtbWFyeSgKICAgc2VjdGlvbjogJ0V4dGVybmFsIGxpYnJhcmllcycsCiAg IGxpc3Rfc2VwOiAnICcsCiApCisKK3N1bW1hcnkoCisgIHsKKyAgICAndGFwJzogdGFwX3Rlc3Rz X2VuYWJsZWQsCisgIH0sCisgIHNlY3Rpb246ICdPdGhlciBmZWF0dXJlcycsCisgIGxpc3Rfc2Vw OiAnICcsCispCi0tIAoyLjM0LjEKCg== --000000000000b0ce9f063e654bfa Content-Type: application/octet-stream; name="v1-0002-Add-support-for-pytest-test-suites.patch" Content-Disposition: attachment; filename="v1-0002-Add-support-for-pytest-test-suites.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mfd2s2nj1 RnJvbSAxMTc1OTM1MTIzMjUwN2JkMjkwYWU4MjVkMmE1N2Y0YWY5ZmE4OGUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogV2VkLCAxMyBBdWcgMjAyNSAxMDo1ODo1NiAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjEgMi82XSBBZGQgc3VwcG9ydCBmb3IgcHl0ZXN0IHRlc3Qgc3VpdGVzCgpTcGVj aWZ5IC0tZW5hYmxlLXB5dGVzdC8tRHB5dGVzdD1lbmFibGVkIGF0IGNvbmZpZ3VyZSB0aW1lLiBU aGlzCmNvbnRhaW5zIG5vIFBvc3RncmVzIHRlc3QgbG9naWMgLS0gaXQgaXMganVzdCBhICJ2YW5p bGxhIiBweXRlc3QKc2tlbGV0b24uCgpJJ3ZlIHdyaXR0ZW4gYSBjdXN0b20gcGd0YXAgb3V0cHV0 IHBsdWdpbiwgdXNlZCBieSB0aGUgTWVzb24gbXRlc3QKcnVubmVyLCB0byBmdWxseSBjb250cm9s IHdoYXQgd2Ugc2VlIGR1cmluZyBDSSB0ZXN0IGZhaWx1cmVzLiBUaGUKcHl0ZXN0LXRhcCBwbHVn aW4gd291bGQgaGF2ZSBiZWVuIHByZWZlcmFibGUsIGJ1dCBpdCdzIG5vdyBpbgptYWludGVuYW5j ZSBtb2RlLCBhbmQgaXQgaGFzIHByb2JsZW1zIHdpdGggYWNjaWRlbnRhbGx5IHN1cHByZXNzaW5n CmltcG9ydGFudCBjb2xsZWN0aW9uIGZhaWx1cmVzLgoKdGVzdF9zb21ldGhpbmcucHkgaXMgaW50 ZW5kZWQgdG8gc2hvdyBhIHNhbXBsZSBmYWlsdXJlIGluIHRoZSBDSS4KClRPRE9zOgotIGNoZWNr X3B5dGVzdC5weSBoYXMgYSBrbm93biBpc3N1ZTogaXQgY2hlY2tzIHRoZSBQeXRob24gaW50ZXJw cmV0ZXIKICBsaW5rZWQgdG8gUEwvUHl0aG9uIHJhdGhlciB0aGFuIHRoZSBQeXRob24gaW50ZXJw cmV0ZXIgaW4gdXNlIGJ5CiAgcHl0ZXN0LiBQZXJoYXBzIHRoZSBjaGVjayBzY3JpcHQgc2hvdWxk IGp1c3QgZ28gYXdheT8KLSBPcGVuQlNEIGhhcyBhbiBBTlNJLXJlbGF0ZWQgdGVybWluYWwgYnVn LCBidXQgSSdtIG5vdCBzdXJlIGlmIHRoZSBidWcKICBpcyBpbiBDaXJydXMsIHRoZSBpbWFnZSwg cHl0ZXN0LCBQeXRob24sIG9yIHJlYWRsaW5lLiBUaGUgVEVSTSBlbnZ2YXIKICBpcyB1bnNldCB0 byB3b3JrIGFyb3VuZCBpdC4gSWYgdGhpcyB3b3JrYXJvdW5kIGlzIHJlbW92ZWQsIGEgYmFkIEFO U0kKICBlc2NhcGUgaXMgaW5zZXJ0ZWQgaW50byB0aGUgcGd0YXAgb3V0cHV0IGFuZCBtdGVzdCBp cyB1bmFibGUgdG8gcGFyc2UKICBpdC4KLSBUaGUgQ2hvY29sYXRleSBDSSBzZXR1cCBpcyBzdWJw YXIuIE5lZWQgdG8gZmluZCBhIHdheSB0byBibGVzcyB0aGUKICBkZXBlbmRlbmNpZXMgaW4gdXNl IHJhdGhlciB0aGFuIHB1bGxpbmcgZnJvbSBwaXAuLi4gb3IgbWF5YmUgdGhhdCB3aWxsCiAgYmUg ZG9uZSBieSB0aGUgaW1hZ2UgYmFrZXIuCi0tLQogLmNpcnJ1cy50YXNrcy55bWwgICAgICAgICAg ICAgICAgICAgICB8ICAzOCArKystLQogLmdpdGlnbm9yZSAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgMSArCiBjb25maWcvY2hlY2tfcHl0ZXN0LnB5ICAgICAgICAgICAgICAgIHwgMTM4 ICsrKysrKysrKysrKysrKysrKwogY29uZmlnL3B5dGVzdC1yZXF1aXJlbWVudHMudHh0ICAgICAg ICB8ICAyMiArKysKIGNvbmZpZ3VyZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNzAg KysrKysrKysrKysrKysrKysrKysrKy0KIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMzAgKysrLQogbWVzb24uYnVpbGQgICAgICAgICAgICAgICAgICAgICAgICAgICB8 ICA4OCArKysrKysrKysrKysKIG1lc29uX29wdGlvbnMudHh0ICAgICAgICAgICAgICAgICAgICAg fCAgIDggKy0KIHB5dGVzdC5pbmkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwog c3JjL01ha2VmaWxlLmdsb2JhbC5pbiAgICAgICAgICAgICAgICB8ICAyMyArKysKIHNyYy9tYWtl ZmlsZXMvbWVzb24uYnVpbGQgICAgICAgICAgICAgfCAgIDIgKwogc3JjL3Rlc3QvTWFrZWZpbGUg ICAgICAgICAgICAgICAgICAgICB8ICAxMSArLQogc3JjL3Rlc3QvbWVzb24uYnVpbGQgICAgICAg ICAgICAgICAgICB8ICAgMSArCiBzcmMvdGVzdC9weXRlc3QvTWFrZWZpbGUgICAgICAgICAgICAg IHwgIDIwICsrKwogc3JjL3Rlc3QvcHl0ZXN0L1JFQURNRSAgICAgICAgICAgICAgICB8ICAgMSAr CiBzcmMvdGVzdC9weXRlc3QvbWVzb24uYnVpbGQgICAgICAgICAgIHwgIDE2ICsrKwogc3JjL3Rl c3QvcHl0ZXN0L3BsdWdpbnMvcGd0YXAucHkgICAgICB8IDE5MyArKysrKysrKysrKysrKysrKysr KysrKysrKwogc3JjL3Rlc3QvcHl0ZXN0L3B5dC90ZXN0X3NvbWV0aGluZy5weSB8ICAxNyArKysK IDE4IGZpbGVzIGNoYW5nZWQsIDc2NSBpbnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBjb25maWcvY2hlY2tfcHl0ZXN0LnB5CiBjcmVhdGUgbW9kZSAxMDA2 NDQgY29uZmlnL3B5dGVzdC1yZXF1aXJlbWVudHMudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgcHl0 ZXN0LmluaQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3B5dGVzdC9NYWtlZmlsZQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3B5dGVzdC9SRUFETUUKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBzcmMvdGVzdC9weXRlc3QvbWVzb24uYnVpbGQKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVz dC9weXRlc3QvcGx1Z2lucy9wZ3RhcC5weQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3B5 dGVzdC9weXQvdGVzdF9zb21ldGhpbmcucHkKCmRpZmYgLS1naXQgYS8uY2lycnVzLnRhc2tzLnlt bCBiLy5jaXJydXMudGFza3MueW1sCmluZGV4IGVjYTlkNjJmYzIyLi44MGY5YjM5NGJkMiAxMDA2 NDQKLS0tIGEvLmNpcnJ1cy50YXNrcy55bWwKKysrIGIvLmNpcnJ1cy50YXNrcy55bWwKQEAgLTIx LDcgKzIxLDggQEAgZW52OgogCiAgICMgdGFyZ2V0IHRvIHRlc3QsIGZvciBhbGwgYnV0IHdpbmRv d3MKICAgQ0hFQ0s6IGNoZWNrLXdvcmxkIFBST1ZFX0ZMQUdTPSRQUk9WRV9GTEFHUwotICBDSEVD S0ZMQUdTOiAtT3RhcmdldAorICAjIFRPRE8gd2VyZSB3ZSBhdm9pZGluZyAtLWtlZXAtZ29pbmcg b24gcHVycG9zZT8KKyAgQ0hFQ0tGTEFHUzogLU90YXJnZXQgLS1rZWVwLWdvaW5nCiAgIFBST1ZF X0ZMQUdTOiAtLXRpbWVyCiAgICMgQnVpbGQgdGVzdCBkZXBlbmRlbmNpZXMgYXMgcGFydCBvZiB0 aGUgYnVpbGQgc3RlcCwgdG8gc2VlIGNvbXBpbGVyCiAgICMgZXJyb3JzL3dhcm5pbmdzIGluIG9u ZSBwbGFjZS4KQEAgLTQ0LDYgKzQ1LDcgQEAgZW52OgogICAgIC1EbGRhcD1lbmFibGVkCiAgICAg LURzc2w9b3BlbnNzbAogICAgIC1EdGFwX3Rlc3RzPWVuYWJsZWQKKyAgICAtRHB5dGVzdD1lbmFi bGVkCiAgICAgLURwbHBlcmw9ZW5hYmxlZAogICAgIC1EcGxweXRob249ZW5hYmxlZAogICAgIC1E ZG9jcz1lbmFibGVkCkBAIC0yMjIsNyArMjI0LDkgQEAgdGFzazoKICAgICBjaG93biByb290OnBv c3RncmVzIC90bXAvY29yZXMKICAgICBzeXNjdGwga2Vybi5jb3JlZmlsZT0nL3RtcC9jb3Jlcy8l Ti4lUC5jb3JlJwogICBzZXR1cF9hZGRpdGlvbmFsX3BhY2thZ2VzX3NjcmlwdDogfAotICAgICNw a2cgaW5zdGFsbCAteSAuLi4KKyAgICBwa2cgaW5zdGFsbCAteSBcCisgICAgICBweTMxMS1wYWNr YWdpbmcgXAorICAgICAgcHkzMTEtcHl0ZXN0CiAKICAgIyBOQjogSW50ZW50aW9uYWxseSBidWls ZCB3aXRob3V0IC1EbGx2bS4gVGhlIGZyZWVic2QgaW1hZ2Ugc2l6ZSBpcyBhbHJlYWR5CiAgICMg bGFyZ2UgZW5vdWdoIHRvIG1ha2UgVk0gc3RhcnR1cCBzbG93LCBhbmQgZXZlbiB3aXRob3V0IGxs dm0gZnJlZWJzZApAQCAtMzExLDcgKzMxNSwxMCBAQCB0YXNrOgogICAgICAgICAgIC1EcGFtPWVu YWJsZWQKIAogICAgICAgc2V0dXBfYWRkaXRpb25hbF9wYWNrYWdlc19zY3JpcHQ6IHwKLSAgICAg ICAgI3BrZ2luIC15IGluc3RhbGwgLi4uCisgICAgICAgIHBrZ2luIC15IGluc3RhbGwgXAorICAg ICAgICAgIHB5MzEyLXBhY2thZ2luZyBcCisgICAgICAgICAgcHkzMTItdGVzdAorICAgICAgICBs biAtcyAvdXNyL3BrZy9iaW4vcHl0ZXN0LTMuMTIgL3Vzci9wa2cvYmluL3B5dGVzdAogICAgICAg PDw6ICpuZXRic2RfdGFza190ZW1wbGF0ZQogCiAgICAgLSBuYW1lOiBPcGVuQlNEIC0gTWVzb24K QEAgLTMyMiw2ICszMjksNyBAQCB0YXNrOgogICAgICAgICBPU19OQU1FOiBvcGVuYnNkCiAgICAg ICAgIElNQUdFX0ZBTUlMWTogcGctY2ktb3BlbmJzZC1wb3N0Z3JlcwogICAgICAgICBQS0dDT05G SUdfUEFUSDogJy91c3IvbGliL3BrZ2NvbmZpZzovdXNyL2xvY2FsL2xpYi9wa2djb25maWcnCisg ICAgICAgIFRFUk06ICMgVE9ETyB3aHkgZG9lcyBweXRlc3QgcHJpbnQgQU5TSSBlc2NhcGVzIG9u IE9wZW5CU0Q/CiAKICAgICAgICAgTUVTT05fRkVBVFVSRVM6ID4tCiAgICAgICAgICAgLURic2Rf YXV0aD1lbmFibGVkCkBAIC0zMzAsNyArMzM4LDkgQEAgdGFzazoKICAgICAgICAgICAtRHV1aWQ9 ZTJmcwogCiAgICAgICBzZXR1cF9hZGRpdGlvbmFsX3BhY2thZ2VzX3NjcmlwdDogfAotICAgICAg ICAjcGtnX2FkZCAtSSAuLi4KKyAgICAgICAgcGtnX2FkZCAtSSBcCisgICAgICAgICAgcHkzLXRl c3QgXAorICAgICAgICAgIHB5My1wYWNrYWdpbmcKICAgICAgICMgQWx3YXlzIGNvcmUgZHVtcCB0 byAke0NPUkVfRFVNUF9ESVJ9CiAgICAgICBzZXRfY29yZV9kdW1wX3NjcmlwdDogc3lzY3RsIC13 IGtlcm4ubm9zdWlkY29yZWR1bXA9MgogICAgICAgPDw6ICpvcGVuYnNkX3Rhc2tfdGVtcGxhdGUK QEAgLTQ4OSw4ICs0OTksMTAgQEAgdGFzazoKICAgICBFT0YKIAogICBzZXR1cF9hZGRpdGlvbmFs X3BhY2thZ2VzX3NjcmlwdDogfAotICAgICNhcHQtZ2V0IHVwZGF0ZQotICAgICNERUJJQU5fRlJP TlRFTkQ9bm9uaW50ZXJhY3RpdmUgYXB0LWdldCAteSBpbnN0YWxsIC4uLgorICAgIGFwdC1nZXQg dXBkYXRlCisgICAgREVCSUFOX0ZST05URU5EPW5vbmludGVyYWN0aXZlIGFwdC1nZXQgLXkgaW5z dGFsbCBcCisgICAgICBweXRob24zLXB5dGVzdCBcCisgICAgICBweXRob24zLXBhY2thZ2luZwog CiAgIG1hdHJpeDoKICAgICAjIFNQRUNJQUw6CkBAIC01MTMsMTQgKzUyNSwxNSBAQCB0YXNrOgog ICAgICAgICBzdSBwb3N0Z3JlcyA8PC1FT0YKICAgICAgICAgICAuL2NvbmZpZ3VyZSBcCiAgICAg ICAgICAgICAtLWVuYWJsZS1jYXNzZXJ0IC0tZW5hYmxlLWluamVjdGlvbi1wb2ludHMgLS1lbmFi bGUtZGVidWcgXAotICAgICAgICAgICAgLS1lbmFibGUtdGFwLXRlc3RzIC0tZW5hYmxlLW5scyBc CisgICAgICAgICAgICAtLWVuYWJsZS10YXAtdGVzdHMgLS1lbmFibGUtcHl0ZXN0IC0tZW5hYmxl LW5scyBcCiAgICAgICAgICAgICAtLXdpdGgtc2Vnc2l6ZS1ibG9ja3M9NiBcCiAgICAgICAgICAg ICAtLXdpdGgtbGlibnVtYSBcCiAgICAgICAgICAgICAtLXdpdGgtbGlidXJpbmcgXAogICAgICAg ICAgICAgXAogICAgICAgICAgICAgJHtMSU5VWF9DT05GSUdVUkVfRkVBVFVSRVN9IFwKICAgICAg ICAgICAgIFwKLSAgICAgICAgICAgIENMQU5HPSJjY2FjaGUgY2xhbmctMTYiCisgICAgICAgICAg ICBDTEFORz0iY2NhY2hlIGNsYW5nLTE2IiBcCisgICAgICAgICAgICBQWVRFU1Q9ImVudiBMRF9Q UkVMT0FEPS9saWIveDg2XzY0LWxpbnV4LWdudS9saWJhc2FuLnNvLjggcHl0ZXN0IgogICAgICAg ICBFT0YKICAgICAgIGJ1aWxkX3NjcmlwdDogc3UgcG9zdGdyZXMgLWMgIm1ha2UgLXMgLWoke0JV SUxEX0pPQlN9IHdvcmxkLWJpbiIKICAgICAgIHVwbG9hZF9jYWNoZXM6IGNjYWNoZQpAQCAtNjUw LDYgKzY2Myw4IEBAIHRhc2s6CiAgICAgICBwNS4zNC1pby10dHkKICAgICAgIHA1LjM0LWlwYy1y dW4KICAgICAgIHB5dGhvbjMxMgorICAgICAgcHkzMTItcGFja2FnaW5nCisgICAgICBweTMxMi1w eXRlc3QKICAgICAgIHRjbAogICAgICAgenN0ZAogCkBAIC02OTksNiArNzE0LDcgQEAgdGFzazoK ICAgICBzaCBzcmMvdG9vbHMvY2kvY2lfbWFjcG9ydHNfcGFja2FnZXMuc2ggJE1BQ09TX1BBQ0tB R0VfTElTVAogICAgICMgc3lzdGVtIHB5dGhvbiBkb2Vzbid0IHByb3ZpZGUgaGVhZGVycwogICAg IHN1ZG8gL29wdC9sb2NhbC9iaW4vcG9ydCBzZWxlY3QgcHl0aG9uMyBweXRob24zMTIKKyAgICBz dWRvIC9vcHQvbG9jYWwvYmluL3BvcnQgc2VsZWN0IHB5dGVzdCBweXRlc3QzMTIKICAgICAjIE1h a2UgbWFjcG9ydHMgaW5zdGFsbCB2aXNpYmxlIGZvciBzdWJzZXF1ZW50IHN0ZXBzCiAgICAgZWNo byBQQVRIPS9vcHQvbG9jYWwvc2Jpbi86L29wdC9sb2NhbC9iaW4vOiRQQVRIID4+ICRDSVJSVVNf RU5WCiAgIHVwbG9hZF9jYWNoZXM6IG1hY3BvcnRzCkBAIC03NzIsNiArNzg4LDggQEAgdGFzazoK ICAgICAgIC1EbGRhcD1lbmFibGVkCiAgICAgICAtRHNzbD1vcGVuc3NsCiAgICAgICAtRHRhcF90 ZXN0cz1lbmFibGVkCisgICAgICAtRHB5dGVzdD1lbmFibGVkCisgICAgICAtRFBZVEVTVD1jOlxX aW5kb3dzXHN5c3RlbTMyXGNvbmZpZ1xzeXN0ZW1wcm9maWxlXEFwcERhdGFcUm9hbWluZ1xQeXRo b25cUHl0aG9uMzEwXFNjcmlwdHNccHl0ZXN0LmV4ZQogICAgICAgLURwbHBlcmw9ZW5hYmxlZAog ICAgICAgLURwbHB5dGhvbj1lbmFibGVkCiAKQEAgLTc4MCw4ICs3OTgsMTAgQEAgdGFzazoKICAg ZGVwZW5kc19vbjogU2FuaXR5Q2hlY2sKICAgb25seV9pZjogJENJX1dJTkRPV1NfRU5BQkxFRAog CisgICMgWFhYIERvZXMgQ2hvY29sYXRleSByZWFsbHkgbm90IGhhdmUgYW55IFB5dGhvbiBwYWNr YWdlIGluc3RhbGxlcnM/CiAgIHNldHVwX2FkZGl0aW9uYWxfcGFja2FnZXNfc2NyaXB0OiB8CiAg ICAgUkVNIGNob2NvIGluc3RhbGwgLXkgLS1uby1wcm9ncmVzcyAuLi4KKyAgICBwaXAzIGluc3Rh bGwgLS11c2VyIHBhY2thZ2luZyBweXRlc3QKIAogICBzZXR1cF9ob3N0c19maWxlX3NjcmlwdDog fAogICAgIGVjaG8gMTI3LjAuMC4xIHBnLWxvYWRiYWxhbmNldGVzdCA+PiBjOlxXaW5kb3dzXFN5 c3RlbTMyXERyaXZlcnNcZXRjXGhvc3RzCkBAIC04NDQsNyArODY0LDcgQEAgdGFzazoKICAgICBm b2xkZXI6ICR7Q0NBQ0hFX0RJUn0KIAogICBzZXR1cF9hZGRpdGlvbmFsX3BhY2thZ2VzX3Njcmlw dDogfAotICAgIFJFTSBDOlxtc3lzNjRcdXNyXGJpblxwYWNtYW4uZXhlIC1TIC0tbm9jb25maXJt IC4uLgorICAgIEM6XG1zeXM2NFx1c3JcYmluXHBhY21hbi5leGUgLVMgLS1ub2NvbmZpcm0gbWlu Z3ctdzY0LXVjcnQteDg2XzY0LXB5dGhvbi1wYWNrYWdpbmcgbWluZ3ctdzY0LXVjcnQteDg2XzY0 LXB5dGhvbi1weXRlc3QKIAogICBtaW5nd19pbmZvX3NjcmlwdDogfAogICAgICVCQVNIJSAtYyAi d2hlcmUgZ2NjIgpkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5naXRpZ25vcmUKaW5kZXggNGU5 MTEzOTVmZTMuLjI2ODQyNjAwM2IxIDEwMDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBiLy5naXRp Z25vcmUKQEAgLTMxLDYgKzMxLDcgQEAgd2luMzJ2ZXIucmMKICouZXhlCiBsaWIqZGxsLmRlZgog bGliKi5wYworX19weWNhY2hlX18vCiAKICMgTG9jYWwgZXhjbHVkZXMgaW4gcm9vdCBkaXJlY3Rv cnkKIC9HTlVtYWtlZmlsZQpkaWZmIC0tZ2l0IGEvY29uZmlnL2NoZWNrX3B5dGVzdC5weSBiL2Nv bmZpZy9jaGVja19weXRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLjE0YjJmM2VlYzliCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlnL2NoZWNrX3B5dGVzdC5w eQpAQCAtMCwwICsxLDEzOCBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCisjCisjIFZlcmlmeSB0aGF0IHB5dGVzdC1yZXF1aXJlbWVu dHMudHh0IGlzIHNhdGlzZmllZC4gVGhpcyB3b3VsZCBwcm9iYWJseSBiZQorIyBlYXNpZXIgd2l0 aCBwaXAsIGJ1dCByZXF1aXJpbmcgcGlwIG9uIGJ1aWxkIG1hY2hpbmVzIGlzIGEgbm9uLXN0YXJ0 ZXIgZm9yCisjIG1hbnkuCisjCisjIFRoZSBkZXNpZ24gcGhpbG9zb3BoeSBvZiB0aGlzIHNjcmlw dCBpcyB0byBiZW5kIG92ZXIgYmFja3dhcmRzIHRvIGhlbHAgcGVvcGxlCisjIGZpZ3VyZSBvdXQg d2hhdCBpcyBtaXNzaW5nLiBUaGUgdGFyZ2V0IGF1ZGllbmNlIGZvciBlcnJvciBvdXRwdXQgaXMg dGhlCisjIGJ1aWxkZmFybSBvcGVyYXRvciB3aG8ganVzdCB3YW50cyB0byBnZXQgdGhlIHRlc3Rz IHJ1bm5pbmcsIG5vdCB0aGUgdGVzdAorIyBkZXZlbG9wZXIgd2hvIHByZXN1bWFibHkgYWxyZWFk eSBrbm93cyBob3cgdG8gc29sdmUgdGhlc2UgcHJvYmxlbXMuCisKK2ltcG9ydCBzeXMKK2Zyb20g dHlwaW5nIGltcG9ydCBMaXN0ICAjIFRPRE86IFB5dGhvbiAzLjkgd2lsbCByZW1vdmUgdGhlIG5l ZWQgZm9yIHRoaXMKKworCitkZWYgbWFpbigpOgorICAgIGlmIGxlbihzeXMuYXJndikgIT0gMjoK KyAgICAgICAgc3lzLmV4aXQoInVzYWdlOiBweXRob24ge30gUkVRVUlSRU1FTlRTX0ZJTEUiLmZv cm1hdChzeXMuYXJndlswXSkpCisKKyAgICByZXF1aXJlbWVudHNfZmlsZSA9IHN5cy5hcmd2WzFd CisgICAgd2l0aCBvcGVuKHJlcXVpcmVtZW50c19maWxlLCAiciIpIGFzIGY6CisgICAgICAgIHJl cXVpcmVtZW50cyA9IGYucmVhZGxpbmVzKCkKKworICAgIGZvdW5kID0gcGFja2FnaW5nX2NoZWNr KHJlcXVpcmVtZW50cykKKyAgICBpZiBub3QgZm91bmQ6CisgICAgICAgIHN5cy5leGl0KCJTZWUg c3JjL3Rlc3QvcHl0ZXN0L1JFQURNRSBmb3IgcGFja2FnZSBpbnN0YWxsYXRpb24gaGVscC4iKQor CisKK2RlZiBwYWNrYWdpbmdfY2hlY2socmVxdWlyZW1lbnRzOiBMaXN0W3N0cl0pIC0+IGJvb2w6 CisgICAgIiIiCisgICAgVGhlIHByZWZlcnJlZCBkZXBlbmRlbmN5IGNoZWNrLCB3aGljaCB1bmZv cnR1bmF0ZWx5IG5lZWRzIG5ld2VyIFB5dGhvbgorICAgIGZhY2lsaXRpZXMuIFJldHVybnMgVHJ1 ZSBpZiBhbGwgZGVwZW5kZW5jaWVzIHdlcmUgZm91bmQuCisgICAgIiIiCisgICAgdHJ5OgorICAg ICAgICAjIEZpcnN0LCBhdHRlbXB0IHRvIGZpbmQgaW1wb3J0bGliLm1ldGFkYXRhLiBUaGlzIGlz IHBhcnQgb2YgdGhlCisgICAgICAgICMgc3RhbmRhcmQgbGlicmFyeSBmcm9tIDMuOCBvbndhcmRz LiBFYXJsaWVyIFB5dGhvbiB2ZXJzaW9ucyBoYXZlIGFuCisgICAgICAgICMgb2ZmaWNpYWwgYmFj a3BvcnQgY2FsbGVkIGltcG9ydGxpYl9tZXRhZGF0YSwgd2hpY2ggY2FuIGdlbmVyYWxseSBiZQor ICAgICAgICAjIGluc3RhbGxlZCBhcyBhIHNlcGFyYXRlIE9TIHBhY2thZ2UgKGUuZy4gcHl0aG9u My1pbXBvcnRsaWItbWV0YWRhdGEpLgorICAgICAgICAjIFRoaXMgY29tcGxpY2F0aW9uIGNhbiBi ZSByZW1vdmVkIG9uY2Ugd2Ugc3RvcCBzdXBwb3J0aW5nIFB5dGhvbiAzLjcuCisgICAgICAgIHRy eToKKyAgICAgICAgICAgIGZyb20gaW1wb3J0bGliIGltcG9ydCBtZXRhZGF0YQorICAgICAgICBl eGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgICAgICBpbXBvcnQgaW1wb3J0bGliX21ldGFkYXRh IGFzIG1ldGFkYXRhCisKKyAgICAgICAgIyBwYWNrYWdpbmcgY29udGFpbnMgdGhlIFB5UEEgZGVm aW5pdGlvbnMgb2YgcmVxdWlyZW1lbnQgc3BlY2lmaWVycy4KKyAgICAgICAgIyBUaGlzIGlzIGFn YWluIGNvbnRhaW5lZCBpbiBhIHNlcGFyYXRlIE9TIHBhY2thZ2UgKGZvciBleGFtcGxlLAorICAg ICAgICAjIHB5dGhvbjMtcGFja2FnaW5nKS4KKyAgICAgICAgaW1wb3J0IHBhY2thZ2luZworICAg ICAgICBmcm9tIHBhY2thZ2luZy5yZXF1aXJlbWVudHMgaW1wb3J0IFJlcXVpcmVtZW50CisKKyAg ICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZXJyOgorICAgICAgICAjIFdlIGRvbid0IGV2ZW4gaGF2 ZSBlbm91Z2ggcHJlcmVxdWlzaXRlcyB0byBjaGVjayBvdXIgcHJlcmVxdWlzaXRlcy4KKyAgICAg ICAgIyBUcnkgdG8gZmFsbCBiYWNrIG9uIHRoZSBkZXByZWNhdGVkIHBhcnNlciwgdG8gZ2V0IGEg YmV0dGVyIGVycm9yCisgICAgICAgICMgbWVzc2FnZS4KKyAgICAgICAgZm91bmQgPSBzZXR1cHRv b2xzX2ZhbGxiYWNrKHJlcXVpcmVtZW50cykKKworICAgICAgICBpZiBub3QgZm91bmQ6CisgICAg ICAgICAgICAjIFdlbGwsIHRoZSBiZXN0IHdlIGNhbiBkbyBpcyBqdXN0IHByaW50IHRoZSBpbXBv cnQgZXJyb3IgYXMtaXMuCisgICAgICAgICAgICBwcmludChlcnIsIGZpbGU9c3lzLnN0ZGVycikK KworICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgU3RyaXAgZXh0cmFuZW91cyB3aGl0ZXNw YWNlLCB3aG9sZS1saW5lIGNvbW1lbnRzLCBhbmQgZW1wdHkgbGluZXMgZnJvbSBvdXIKKyAgICAj IHNwZWNpZmllciBsaXN0LgorICAgIHJlcXVpcmVtZW50cyA9IFtyLnN0cmlwKCkgZm9yIHIgaW4g cmVxdWlyZW1lbnRzXQorICAgIHJlcXVpcmVtZW50cyA9IFtyIGZvciByIGluIHJlcXVpcmVtZW50 cyBpZiByIGFuZCByWzBdICE9ICIjIl0KKworICAgIGZvdW5kID0gVHJ1ZQorICAgIGZvciBzcGVj IGluIHJlcXVpcmVtZW50czoKKyAgICAgICAgcmVxID0gUmVxdWlyZW1lbnQoc3BlYykKKworICAg ICAgICAjIFNraXAgYW55IHBhY2thZ2VzIG1hcmtlZCBhcyB1bm5lZWRlZCBmb3IgdGhpcyBwYXJ0 aWN1bGFyIFB5dGhvbiBlbnYuCisgICAgICAgIGlmIHJlcS5tYXJrZXIgYW5kIG5vdCByZXEubWFy a2VyLmV2YWx1YXRlKCk6CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICMgTWFrZSBz dXJlIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZC4uLgorICAgICAgICB0cnk6CisgICAgICAgICAg ICB2ZXJzaW9uID0gbWV0YWRhdGEudmVyc2lvbihyZXEubmFtZSkKKyAgICAgICAgZXhjZXB0IG1l dGFkYXRhLlBhY2thZ2VOb3RGb3VuZEVycm9yOgorICAgICAgICAgICAgcHJpbnQoIlBhY2thZ2Ug J3t9JyBpcyBub3QgaW5zdGFsbGVkIi5mb3JtYXQocmVxLm5hbWUpLCBmaWxlPXN5cy5zdGRlcnIp CisgICAgICAgICAgICBmb3VuZCA9IEZhbHNlCisgICAgICAgICAgICBjb250aW51ZQorCisgICAg ICAgICMgLi4uYW5kIHRoYXQgaXQgaGFzIGEgY29tcGF0aWJsZSB2ZXJzaW9uLgorICAgICAgICBp ZiBub3QgcmVxLnNwZWNpZmllci5jb250YWlucyh2ZXJzaW9uKToKKyAgICAgICAgICAgIHByaW50 KAorICAgICAgICAgICAgICAgICJQYWNrYWdlICd7fScgaGFzIHZlcnNpb24ge30sIGJ1dCAne30n IGlzIHJlcXVpcmVkIi5mb3JtYXQoCisgICAgICAgICAgICAgICAgICAgIHJlcS5uYW1lLCB2ZXJz aW9uLCByZXEuc3BlY2lmaWVyCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICBm aWxlPXN5cy5zdGRlcnIsCisgICAgICAgICAgICApCisgICAgICAgICAgICBmb3VuZCA9IEZhbHNl CisgICAgICAgICAgICBjb250aW51ZQorCisgICAgcmV0dXJuIGZvdW5kCisKKworZGVmIHNldHVw dG9vbHNfZmFsbGJhY2socmVxdWlyZW1lbnRzOiBMaXN0W3N0cl0pIC0+IGJvb2w6CisgICAgIiIi CisgICAgQW4gYWx0ZXJuYXRpdmUgZGVwZW5kZW5jeSBoZWxwZXIsIGJhc2VkIG9uIHRoZSBvbGQg ZGVwcmVjYXRlZCBwa2dfcmVzb3VyY2VzCisgICAgbW9kdWxlIGluIHNldHVwdG9vbHMsIHdoaWNo IGlzIHByZXR0eSB3aWRlbHkgYXZhaWxhYmxlIGluIG9sZGVyIFB5dGhvbnMuIFRoZQorICAgIHBv aW50IG9mIHRoaXMgaXMgdG8gYm9vdHN0cmFwIHRoZSB1c2VyIGludG8gYW4gZW52aXJvbm1lbnQg dGhhdCBjYW4gcnVuIHRoZQorICAgIHBhY2thZ2luZ19jaGVjaygpLgorCisgICAgUmV0dXJucyBG YWxzZSBpZiBwa2dfcmVzb3VyY2VzIGlzIGFsc28gdW5hdmFpbGFibGUsIGluIHdoaWNoIGNhc2Ug d2UganVzdAorICAgIGhhdmUgdG8gZG8gb3VyIGJlc3QuCisgICAgIiIiCisgICAgdHJ5OgorICAg ICAgICBpbXBvcnQgcGtnX3Jlc291cmNlcworICAgIGV4Y2VwdCBNb2R1bGVOb3RGb3VuZEVycm9y OgorICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICMgQW4gZXh0cmEgbmV3bGluZSBtYWtlcyB0 aGUgQXV0b2NvbmYgb3V0cHV0IGVhc2llciB0byByZWFkLgorICAgIHByaW50KGZpbGU9c3lzLnN0 ZGVycikKKworICAgICMgR28gb25lLWJ5LW9uZSB0aHJvdWdoIHRoZSByZXF1aXJlbWVudHMsIHBy aW50aW5nIGVhY2ggbWlzc2luZyBkZXBlbmRlbmN5LgorICAgIGZvdW5kID0gVHJ1ZQorICAgIGZv ciByIGluIHJlcXVpcmVtZW50czoKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcGtnX3Jlc291 cmNlcy5yZXF1aXJlKHIpCisgICAgICAgIGV4Y2VwdCBwa2dfcmVzb3VyY2VzLkRpc3RyaWJ1dGlv bk5vdEZvdW5kIGFzIGVycjoKKyAgICAgICAgICAgICMgVGhlIGVycm9yIGRlc2NyaXB0aW9ucyBn aXZlbiBoZXJlIGFyZSBwcmV0dHkgZ29vZCBhcy1pcy4KKyAgICAgICAgICAgIHByaW50KGVyciwg ZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICAgICAgZm91bmQgPSBGYWxzZQorICAgICAgICBleGNl cHQgcGtnX3Jlc291cmNlcy5SZXF1aXJlbWVudFBhcnNlRXJyb3IgYXMgZXJyOgorICAgICAgICAg ICAgYXNzZXJ0IEZhbHNlICAjIFRPRE8KKworICAgICMgVGhlIG9ubHkgcmVhc29uIHRoZSBmYWxs YmFjayB3b3VsZCBiZSBjYWxsZWQgaXMgaWYgd2UncmUgbWlzc2luZyByZXF1aXJlZAorICAgICMg cGFja2FnZXMuIFNvIGlmIHdlICJmb3VuZCB0aGVtIiwgdGhlIHJlcXVpcmVtZW50cyBmaWxlIGlz IGJyb2tlbi4uLgorICAgIGFzc2VydCAoCisgICAgICAgIG5vdCBmb3VuZAorICAgICksICJzZXR1 cHRvb2xzX2ZhbGxiYWNrKCkgc3VjY2VlZGVkIHVuZXhwZWN0ZWRseTsgaXMgdGhlIHJlcXVpcmVt ZW50cyBmaWxlIGluY29tcGxldGU/IgorCisgICAgcmV0dXJuIFRydWUKKworCitpZiBfX25hbWVf XyA9PSAiX19tYWluX18iOgorICAgIG1haW4oKQpkaWZmIC0tZ2l0IGEvY29uZmlnL3B5dGVzdC1y ZXF1aXJlbWVudHMudHh0IGIvY29uZmlnL3B5dGVzdC1yZXF1aXJlbWVudHMudHh0Cm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xNTcyNjJhNjg0ZgotLS0gL2Rldi9udWxs CisrKyBiL2NvbmZpZy9weXRlc3QtcmVxdWlyZW1lbnRzLnR4dApAQCAtMCwwICsxLDIyIEBACisj CisjIFRoaXMgZmlsZSBjb250YWlucyB0aGUgUHl0aG9uIHBhY2thZ2VzIHdoaWNoIGFyZSByZXF1 aXJlZCBpbiBvcmRlciBmb3IgdXMgdG8KKyMgZW5hYmxlIHB5dGVzdC4KKyMKKyMgVGhlIHN5bnRh eCBpcyBhICpzdWJzZXQqIG9mIHBpcCdzIHJlcXVpcmVtZW50cy50eHQgc3ludGF4LCBzbyB0aGF0 IGJvdGggcGlwCisjIGFuZCBjaGVja19weXRlc3QucHkgY2FuIHVzZSBpdC4gT25seSB3aG9sZS1s aW5lIGNvbW1lbnRzIGFuZCBzdGFuZGFyZCBQeXRob24KKyMgZGVwZW5kZW5jeSBzcGVjaWZpZXJz IGFyZSBhbGxvd2VkLiBwaXAtc3BlY2lmaWMgZ29vZGllcyBsaWtlIGluY2x1ZGVzIGFuZAorIyBl bnZpcm9ubWVudCBzdWJzdGl0dXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkOyBrZWVwIGl0IHNpbXBs ZS4KKyMKKyMgUGFja2FnZXMgYmVsb25nIGhlcmUgaWYgdGhlaXIgYWJzZW5jZSBzaG91bGQgY2F1 c2UgYSBjb25maWd1cmF0aW9uIGZhaWx1cmUuIElmCisjIHlvdSdkIGxpa2UgdG8gbWFrZSBhIHBh Y2thZ2Ugb3B0aW9uYWwsIGNvbnNpZGVyIHVzaW5nIHB5dGVzdC5pbXBvcnRvcnNraXAoKQorIyBp bnN0ZWFkLgorIworCisjIHB5dGVzdCA3LjAgd2FzIHRoZSBsYXN0IHZlcnNpb24gd2hpY2ggc3Vw cG9ydGVkIFB5dGhvbiAzLjYsIGJ1dCB0aGUgQlNEcyBoYXZlCisjIHN0YXJ0ZWQgcHV0dGluZyA4 LnggaW50byBwb3J0cywgc28gd2Ugc3VwcG9ydCBib3RoLiAocHl0ZXN0IDggY2FuIGJlIHVzZWQK KyMgdGhyb3VnaG91dCBvbmNlIHdlIGRyb3Agc3VwcG9ydCBmb3IgUHl0aG9uIDMuNy4pCitweXRl c3QgPj0gNy4wLCA8IDkKKworIyBUaGVzZSBhcmUgbWV0YS1wYWNrYWdlcyB3aGljaCBhbGxvdyBj aGVja19weXRlc3QucHkgdG8gcnVuLgorcGFja2FnaW5nCitpbXBvcnRsaWJfbWV0YWRhdGEgOyBw eXRob25fdmVyc2lvbiA8ICIzLjgiCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUK aW5kZXggMzljNjgxNjFjZWMuLjg2MGIwNzc2M2RjIDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysr IGIvY29uZmlndXJlCkBAIC02MzAsNiArNjMwLDcgQEAgdnBhdGhfYnVpbGQKIFBHX1NZU1JPT1QK IFBHX1ZFUlNJT05fTlVNCiBMREZMQUdTX0VYX0JFCitQWVRFU1QKIFBST1ZFCiBEQlRPRVBVQgog Rk9QCkBAIC03NzMsNiArNzc0LDcgQEAgQ0ZMQUdTCiBDQwogZW5hYmxlX2luamVjdGlvbl9wb2lu dHMKIFBHX1RFU1RfRVhUUkEKK2VuYWJsZV9weXRlc3QKIGVuYWJsZV90YXBfdGVzdHMKIGVuYWJs ZV9kdHJhY2UKIERUUkFDRUZMQUdTCkBAIC04NTEsNiArODUzLDcgQEAgZW5hYmxlX3Byb2ZpbGlu ZwogZW5hYmxlX2NvdmVyYWdlCiBlbmFibGVfZHRyYWNlCiBlbmFibGVfdGFwX3Rlc3RzCitlbmFi bGVfcHl0ZXN0CiBlbmFibGVfaW5qZWN0aW9uX3BvaW50cwogd2l0aF9ibG9ja3NpemUKIHdpdGhf c2Vnc2l6ZQpAQCAtMTU1MSw3ICsxNTU0LDEwIEBAIE9wdGlvbmFsIEZlYXR1cmVzOgogICAtLWVu YWJsZS1wcm9maWxpbmcgICAgICBidWlsZCB3aXRoIHByb2ZpbGluZyBlbmFibGVkCiAgIC0tZW5h YmxlLWNvdmVyYWdlICAgICAgIGJ1aWxkIHdpdGggY292ZXJhZ2UgdGVzdGluZyBpbnN0cnVtZW50 YXRpb24KICAgLS1lbmFibGUtZHRyYWNlICAgICAgICAgYnVpbGQgd2l0aCBEVHJhY2Ugc3VwcG9y dAotICAtLWVuYWJsZS10YXAtdGVzdHMgICAgICBlbmFibGUgVEFQIHRlc3RzIChyZXF1aXJlcyBQ ZXJsIGFuZCBJUEM6OlJ1bikKKyAgLS1lbmFibGUtdGFwLXRlc3RzICAgICAgZW5hYmxlIChQZXJs LWJhc2VkKSBUQVAgdGVzdHMgKHJlcXVpcmVzIFBlcmwgYW5kCisgICAgICAgICAgICAgICAgICAg ICAgICAgIElQQzo6UnVuKQorICAtLWVuYWJsZS1weXRlc3QgICAgICAgICBlbmFibGUgKFB5dGhv bi1iYXNlZCkgcHl0ZXN0IHN1aXRlcyAocmVxdWlyZXMKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgUHl0aG9uKQogICAtLWVuYWJsZS1pbmplY3Rpb24tcG9pbnRzCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIGVuYWJsZSBpbmplY3Rpb24gcG9pbnRzIChmb3IgdGVzdGluZykKICAgLS1lbmFi bGUtZGVwZW5kICAgICAgICAgdHVybiBvbiBhdXRvbWF0aWMgZGVwZW5kZW5jeSB0cmFja2luZwpA QCAtMzYzOSw3ICszNjQ1LDcgQEAgZmkKIAogCiAjCi0jIFRBUCB0ZXN0cworIyBUZXN0IGZyYW1l d29ya3MKICMKIAogCkBAIC0zNjY3LDYgKzM2NzMsMzIgQEAgZmkKIAogCiAKKworIyBDaGVjayB3 aGV0aGVyIC0tZW5hYmxlLXB5dGVzdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9weXRl c3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9weXRlc3Q7CisgIGNh c2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykKKyAgICAgIDoKKyAgICAgIDs7CisgICAgbm8pCisg ICAgICA6CisgICAgICA7OworICAgICopCisgICAgICBhc19mbl9lcnJvciAkPyAibm8gYXJndW1l bnQgZXhwZWN0ZWQgZm9yIC0tZW5hYmxlLXB5dGVzdCBvcHRpb24iICIkTElORU5PIiA1CisgICAg ICA7OworICBlc2FjCisKK2Vsc2UKKyAgZW5hYmxlX3B5dGVzdD1ubworCitmaQorCisKKworCisK KwogIwogIyBJbmplY3Rpb24gcG9pbnRzCiAjCkBAIC0xOTEyMCw2ICsxOTE1MiwxNDAgQEAgJGFz X2VjaG8gIiRtb2R1bGVzdGRlcnIiID4mNjsgfQogICBmaQogZmkKIAoraWYgdGVzdCAiJGVuYWJs ZV9weXRlc3QiID0geWVzOyB0aGVuCisgICMgTWlycm9yIHRoZSBwcm92ZSBjaGVja3MsIGFib3Zl LCBmb3IgcHl0ZXN0LiBXZSBkb24ndCByZXF1aXJlIHRoZSB1c2VyIHRvCisgICMgaGF2ZSBzZWxl Y3RlZCAtLXdpdGgtcHl0aG9uLCBidXQgd2UgZG8gbmVlZCBhIFB5dGhvbiBpbnN0YWxsYXRpb24u CisgIGlmIHRlc3QgLXogIiRQWVRIT04iOyB0aGVuCisgICAgaWYgdGVzdCAteiAiJFBZVEhPTiI7 IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gcHl0aG9uMyBweXRob24KK2RvCisgICMgRXh0cmFjdCB0 aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUg d2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIk YXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Cisk YXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zf cGF0aF9QWVRIT04rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4m NgorZWxzZQorICBjYXNlICRQWVRIT04gaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2 X3BhdGhfUFlUSE9OPSIkUFlUSE9OIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3 aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NF UEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0 ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAk YWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiBhc19mbl9leGVjdXRhYmxlX3AgIiRh c19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QWVRIT049 IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2Fz X2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1 CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAg OzsKK2VzYWMKK2ZpCitQWVRIT049JGFjX2N2X3BhdGhfUFlUSE9OCitpZiB0ZXN0IC1uICIkUFlU SE9OIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJl c3VsdDogJFBZVEhPTiIgPiY1CiskYXNfZWNobyAiJFBZVEhPTiIgPiY2OyB9CitlbHNlCisgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1Cisk YXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRQWVRIT04iICYmIGJyZWFr Citkb25lCisKK2Vsc2UKKyAgIyBSZXBvcnQgdGhlIHZhbHVlIG9mIFBZVEhPTiBpbiBjb25maWd1 cmUncyBvdXRwdXQgaW4gYWxsIGNhc2VzLgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IGNoZWNraW5nIGZvciBQWVRIT04iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tp bmcgZm9yIFBZVEhPTi4uLiAiID4mNjsgfQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5l bm8tJExJTkVOT306IHJlc3VsdDogJFBZVEhPTiIgPiY1CiskYXNfZWNobyAiJFBZVEhPTiIgPiY2 OyB9CitmaQorCitpZiB0ZXN0IHgiJFBZVEhPTiIgPSB4IiI7IHRoZW4KKyAgYXNfZm5fZXJyb3Ig JD8gIlB5dGhvbiBub3QgZm91bmQiICIkTElORU5PIiA1CitmaQorCisgIGZpCisgIHsgJGFzX2Vj aG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFB5dGhvbiBwYWNr YWdlcyByZXF1aXJlZCBmb3IgcHl0ZXN0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBQ eXRob24gcGFja2FnZXMgcmVxdWlyZWQgZm9yIHB5dGVzdC4uLiAiID4mNjsgfQorICBtb2R1bGVz dGRlcnI9YCIkUFlUSE9OIiAiJHNyY2Rpci9jb25maWcvY2hlY2tfcHl0ZXN0LnB5IiAiJHNyY2Rp ci9jb25maWcvcHl0ZXN0LXJlcXVpcmVtZW50cy50eHQiIDI+JjEgPi9kZXYvbnVsbGAKKyAgaWYg dGVzdCAkPyAtZXEgMDsgdGhlbgorICAgIGVjaG8gIiRtb2R1bGVzdGRlcnIiID4mNQorICAgIHsg JGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQor JGFzX2VjaG8gInllcyIgPiY2OyB9CisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG1vZHVsZXN0ZGVyciIgPiY1CiskYXNfZWNobyAi JG1vZHVsZXN0ZGVyciIgPiY2OyB9CisgICAgYXNfZm5fZXJyb3IgJD8gIkFkZGl0aW9uYWwgUHl0 aG9uIHBhY2thZ2VzIGFyZSByZXF1aXJlZCB0byBydW4gdGhlIHB5dGVzdCBzdWl0ZXMiICIkTElO RU5PIiA1CisgIGZpCisgIGlmIHRlc3QgLXogIiRQWVRFU1QiOyB0aGVuCisgIGZvciBhY19wcm9n IGluIHB5dGVzdCBweS50ZXN0CitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRh Y19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1t eSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRM SU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcg Zm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfUFlURVNUKzp9IGZhbHNl OyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUFlU RVNUIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BZVEVTVD0iJFBZVEVT VCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7Cisg ICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIg aW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYg YXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5z aW9uczsgZG8KKyAgaWYgYXNfZm5fZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4 ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3BhdGhfUFlURVNUPSIkYXNfZGlyLyRhY193b3JkJGFj X2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZv dW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkK K2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorUFlURVNU PSRhY19jdl9wYXRoX1BZVEVTVAoraWYgdGVzdCAtbiAiJFBZVEVTVCI7IHRoZW4KKyAgeyAkYXNf ZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQWVRFU1QiID4mNQor JGFzX2VjaG8gIiRQWVRFU1QiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHth c19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0K K2ZpCisKKworICB0ZXN0IC1uICIkUFlURVNUIiAmJiBicmVhaworZG9uZQorCitlbHNlCisgICMg UmVwb3J0IHRoZSB2YWx1ZSBvZiBQWVRFU1QgaW4gY29uZmlndXJlJ3Mgb3V0cHV0IGluIGFsbCBj YXNlcy4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2lu ZyBmb3IgUFlURVNUIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBQWVRFU1QuLi4gIiA+ JjY7IH0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6 ICRQWVRFU1QiID4mNQorJGFzX2VjaG8gIiRQWVRFU1QiID4mNjsgfQorZmkKKworICBpZiB0ZXN0 IC16ICIkUFlURVNUIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJweXRlc3Qgbm90IGZvdW5k IiAiJExJTkVOTyIgNQorICBmaQorZmkKKwogIyBJZiBjb21waWxlciB3aWxsIHRha2UgLVdsLC0t YXMtbmVlZGVkIChvciB2YXJpb3VzIHBsYXRmb3JtLXNwZWNpZmljCiAjIHNwZWxsaW5ncyB0aGVy ZW9mKSB0aGVuIGFkZCB0aGF0IHRvIExERkxBR1MuICBUaGlzIGlzIG11Y2ggZWFzaWVyIHRoYW4K ICMgdHJ5aW5nIHRvIGZpbHRlciBMSUJTIHRvIHRoZSBtaW5pbXVtIGZvciBlYWNoIGV4ZWN1dGFi bGUuCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggMDY2ZTM5 NzZjMGEuLmY0YmY5NGEwNzhmIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29uZmln dXJlLmFjCkBAIC0yMzEsMTEgKzIzMSwxNiBAQCBBQ19TVUJTVChEVFJBQ0VGTEFHUyldKQogQUNf U1VCU1QoZW5hYmxlX2R0cmFjZSkKIAogIwotIyBUQVAgdGVzdHMKKyMgVGVzdCBmcmFtZXdvcmtz CiAjCiBQR0FDX0FSR19CT09MKGVuYWJsZSwgdGFwLXRlc3RzLCBubywKLSAgICAgICAgICAgICAg W2VuYWJsZSBUQVAgdGVzdHMgKHJlcXVpcmVzIFBlcmwgYW5kIElQQzo6UnVuKV0pCisgICAgICAg ICAgICAgIFtlbmFibGUgKFBlcmwtYmFzZWQpIFRBUCB0ZXN0cyAocmVxdWlyZXMgUGVybCBhbmQg SVBDOjpSdW4pXSkKIEFDX1NVQlNUKGVuYWJsZV90YXBfdGVzdHMpCisKK1BHQUNfQVJHX0JPT0wo ZW5hYmxlLCBweXRlc3QsIG5vLAorICAgICAgICAgICAgICBbZW5hYmxlIChQeXRob24tYmFzZWQp IHB5dGVzdCBzdWl0ZXMgKHJlcXVpcmVzIFB5dGhvbildKQorQUNfU1VCU1QoZW5hYmxlX3B5dGVz dCkKKwogQUNfQVJHX1ZBUihQR19URVNUX0VYVFJBLAogICAgICAgICAgICBbZW5hYmxlIHNlbGVj dGVkIGV4dHJhIHRlc3RzIChvdmVycmlkZGVuIGF0IHJ1bnRpbWUgYnkgUEdfVEVTVF9FWFRSQSBl bnZpcm9ubWVudCB2YXJpYWJsZSldKQogCkBAIC0yNDQyLDYgKzI0NDcsMjcgQEAgaWYgdGVzdCAi JGVuYWJsZV90YXBfdGVzdHMiID0geWVzOyB0aGVuCiAgIGZpCiBmaQogCitpZiB0ZXN0ICIkZW5h YmxlX3B5dGVzdCIgPSB5ZXM7IHRoZW4KKyAgIyBNaXJyb3IgdGhlIHByb3ZlIGNoZWNrcywgYWJv dmUsIGZvciBweXRlc3QuIFdlIGRvbid0IHJlcXVpcmUgdGhlIHVzZXIgdG8KKyAgIyBoYXZlIHNl bGVjdGVkIC0td2l0aC1weXRob24sIGJ1dCB3ZSBkbyBuZWVkIGEgUHl0aG9uIGluc3RhbGxhdGlv bi4KKyAgaWYgdGVzdCAteiAiJFBZVEhPTiI7IHRoZW4KKyAgICBQR0FDX1BBVEhfUFlUSE9OCisg IGZpCisgIEFDX01TR19DSEVDS0lORyhmb3IgUHl0aG9uIHBhY2thZ2VzIHJlcXVpcmVkIGZvciBw eXRlc3QpCisgIFttb2R1bGVzdGRlcnI9YCIkUFlUSE9OIiAiJHNyY2Rpci9jb25maWcvY2hlY2tf cHl0ZXN0LnB5IiAiJHNyY2Rpci9jb25maWcvcHl0ZXN0LXJlcXVpcmVtZW50cy50eHQiIDI+JjEg Pi9kZXYvbnVsbGBdCisgIGlmIHRlc3QgJD8gLWVxIDA7IHRoZW4KKyAgICBlY2hvICIkbW9kdWxl c3RkZXJyIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgIGVs c2UKKyAgICBBQ19NU0dfUkVTVUxUKFskbW9kdWxlc3RkZXJyXSkKKyAgICBBQ19NU0dfRVJST1Io W0FkZGl0aW9uYWwgUHl0aG9uIHBhY2thZ2VzIGFyZSByZXF1aXJlZCB0byBydW4gdGhlIHB5dGVz dCBzdWl0ZXNdKQorICBmaQorICBQR0FDX1BBVEhfUFJPR1MoUFlURVNULCBweXRlc3QgcHkudGVz dCkKKyAgaWYgdGVzdCAteiAiJFBZVEVTVCI7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW3B5dGVz dCBub3QgZm91bmRdKQorICBmaQorZmkKKwogIyBJZiBjb21waWxlciB3aWxsIHRha2UgLVdsLC0t YXMtbmVlZGVkIChvciB2YXJpb3VzIHBsYXRmb3JtLXNwZWNpZmljCiAjIHNwZWxsaW5ncyB0aGVy ZW9mKSB0aGVuIGFkZCB0aGF0IHRvIExERkxBR1MuICBUaGlzIGlzIG11Y2ggZWFzaWVyIHRoYW4K ICMgdHJ5aW5nIHRvIGZpbHRlciBMSUJTIHRvIHRoZSBtaW5pbXVtIGZvciBlYWNoIGV4ZWN1dGFi bGUuCmRpZmYgLS1naXQgYS9tZXNvbi5idWlsZCBiL21lc29uLmJ1aWxkCmluZGV4IDI1OTg3NThm NmQzLi41MTY2ZDgyZTYwNyAxMDA2NDQKLS0tIGEvbWVzb24uYnVpbGQKKysrIGIvbWVzb24uYnVp bGQKQEAgLTE2OTksNiArMTY5OSwzNSBAQCBlbmRpZgogCiAKIAorIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIExpYnJhcnk6 IHB5dGVzdAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisKK3B5dGVzdF9lbmFibGVkID0gZmFsc2UKK3B5dGVzdCA9IG5vdF9m b3VuZF9kZXAKKworcHl0ZXN0b3B0ID0gZ2V0X29wdGlvbigncHl0ZXN0JykKK2lmIG5vdCBweXRl c3RvcHQuZGlzYWJsZWQoKQorICBweXRlc3RfY2hlY2sgPSBydW5fY29tbWFuZChweXRob24sICdj b25maWcvY2hlY2tfcHl0ZXN0LnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Nv bmZpZy9weXRlc3QtcmVxdWlyZW1lbnRzLnR4dCcsIGNoZWNrOiBmYWxzZSkKKyAgaWYgcHl0ZXN0 X2NoZWNrLnJldHVybmNvZGUoKSAhPSAwCisgICAgbWVzc2FnZShweXRlc3RfY2hlY2suc3RkZXJy KCkuc3RyaXAoKSkKKyAgICBpZiBweXRlc3RvcHQuZW5hYmxlZCgpCisgICAgICBlcnJvcignQWRk aXRpb25hbCBQeXRob24gcGFja2FnZXMgYXJlIHJlcXVpcmVkIHRvIHJ1biB0aGUgcHl0ZXN0IHN1 aXRlcy4nKQorICAgIGVsc2UKKyAgICAgIHdhcm5pbmcoJ0FkZGl0aW9uYWwgUHl0aG9uIHBhY2th Z2VzIGFyZSByZXF1aXJlZCB0byBydW4gdGhlIHB5dGVzdCBzdWl0ZXMuJykKKyAgICBlbmRpZgor ICBlbmRpZgorCisgIHB5dGVzdCA9IGZpbmRfcHJvZ3JhbShnZXRfb3B0aW9uKCdQWVRFU1QnKSwg bmF0aXZlOiB0cnVlLCByZXF1aXJlZDogcHl0ZXN0b3B0KQorCisgIGlmIHB5dGVzdC5mb3VuZCgp IGFuZCBweXRlc3RfY2hlY2sucmV0dXJuY29kZSgpID09IDAKKyAgICBweXRlc3RfZW5hYmxlZCA9 IHRydWUKKyAgZW5kaWYKK2VuZGlmCisKKworCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgTGlicmFyeTogenN0ZAogIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCkBAIC0zNzc2LDYgKzM4MDUsNjMgQEAgZm9yZWFjaCB0ZXN0X2RpciA6IHRlc3RzCiAgICAg ICAgICkKICAgICAgIGVuZGZvcmVhY2gKICAgICAgIGluc3RhbGxfc3VpdGVzICs9IHRlc3RfZ3Jv dXAKKyAgICBlbGlmIGtpbmQgPT0gJ3B5dGVzdCcKKyAgICAgIHRlc3R3cmFwX3B5dGVzdCA9IHRl c3R3cmFwX2Jhc2UKKyAgICAgIGlmIG5vdCBweXRlc3RfZW5hYmxlZAorICAgICAgICB0ZXN0d3Jh cF9weXRlc3QgKz0gWyctLXNraXAnLCAncHl0ZXN0IG5vdCBlbmFibGVkJ10KKyAgICAgIGVuZGlm CisKKyAgICAgIHRlc3RfY29tbWFuZCA9IFsKKyAgICAgICAgcHl0ZXN0LmZ1bGxfcGF0aCgpLAor ICAgICAgICAnLWMnLCBtZXNvbi5wcm9qZWN0X3NvdXJjZV9yb290KCkgLyAncHl0ZXN0LmluaScs CisgICAgICAgICctLXZlcmJvc2UnLAorICAgICAgICAnLXAnLCAncGd0YXAnLCAgIyBlbmFibGUg b3VyIHRlc3QgcmVwb3J0ZXIgcGx1Z2luCisgICAgICAgICctcmEnLCAgIyBzaG93IHNraXBwZWQg YW5kIHhmYWlsZWQgdGVzdHMgdG9vCisgICAgICBdCisKKyAgICAgICMgQWRkIHRlbXBvcmFyeSBp bnN0YWxsLCB0aGUgYnVpbGQgZGlyZWN0b3J5IGZvciBub24taW5zdGFsbGVkIGJpbmFyaWVzIGFu ZAorICAgICAgIyBhbHNvIHRlc3QvIGZvciBub24taW5zdGFsbGVkIHRlc3QgYmluYXJpZXMgYnVp bHQgc2VwYXJhdGVseS4KKyAgICAgIGVudiA9IHRlc3RfZW52CisgICAgICBlbnYucHJlcGVuZCgn UEFUSCcsIHRlbXBfaW5zdGFsbF9iaW5kaXIsIHRlc3RfZGlyWydiZCddLCB0ZXN0X2RpclsnYmQn XSAvICd0ZXN0JykKKyAgICAgIHRlbXBfaW5zdGFsbF9kYXRhZGlyID0gJ0AwQEAxQCcuZm9ybWF0 KHRlc3RfaW5zdGFsbF9kZXN0ZGlyLCBkaXJfcHJlZml4IC8gZGlyX2RhdGEpCisgICAgICBlbnYu c2V0KCdzaGFyZV9jb250cmliX2RpcicsIHRlbXBfaW5zdGFsbF9kYXRhZGlyIC8gJ2NvbnRyaWIn KQorICAgICAgZW52LnByZXBlbmQoJ1BZVEhPTlBBVEgnLCBtZXNvbi5wcm9qZWN0X3NvdXJjZV9y b290KCkgLyAnc3JjJyAvICd0ZXN0JyAvICdweXRlc3QnIC8gJ3BsdWdpbnMnKQorCisgICAgICBm b3JlYWNoIG5hbWUsIHZhbHVlIDogdC5nZXQoJ2VudicsIHt9KQorICAgICAgICBlbnYuc2V0KG5h bWUsIHZhbHVlKQorICAgICAgZW5kZm9yZWFjaAorCisgICAgICB0ZXN0X2dyb3VwID0gdGVzdF9k aXJbJ25hbWUnXQorICAgICAgdGVzdF9rd2FyZ3MgPSB7CisgICAgICAgICdwcm90b2NvbCc6ICd0 YXAnLAorICAgICAgICAnc3VpdGUnOiB0ZXN0X2dyb3VwLAorICAgICAgICAndGltZW91dCc6IDEw MDAsCisgICAgICAgICdkZXBlbmRzJzogdGVzdF9kZXBzICsgdC5nZXQoJ2RlcHMnLCBbXSksCisg ICAgICAgICdlbnYnOiBlbnYsCisgICAgICB9ICsgdC5nZXQoJ3Rlc3Rfa3dhcmdzJywge30pCisK KyAgICAgIGZvcmVhY2ggb25ldGVzdCA6IHRbJ3Rlc3RzJ10KKyAgICAgICAgIyBNYWtlIHRlc3Qg bmFtZXMgcHJldHRpZXIsIHJlbW92ZSBweXQvIGFuZCAucHkKKyAgICAgICAgb25ldGVzdF9wID0g b25ldGVzdAorICAgICAgICBpZiBvbmV0ZXN0X3Auc3RhcnRzd2l0aCgncHl0LycpCisgICAgICAg ICAgb25ldGVzdF9wID0gb25ldGVzdC5zcGxpdCgncHl0LycpWzFdCisgICAgICAgIGVuZGlmCisg ICAgICAgIGlmIG9uZXRlc3RfcC5lbmRzd2l0aCgnLnB5JykKKyAgICAgICAgICBvbmV0ZXN0X3Ag PSBmcy5zdGVtKG9uZXRlc3RfcCkKKyAgICAgICAgZW5kaWYKKworICAgICAgICB0ZXN0KHRlc3Rf ZGlyWyduYW1lJ10gLyBvbmV0ZXN0X3AsCisgICAgICAgICAgcHl0aG9uLAorICAgICAgICAgIGt3 YXJnczogdGVzdF9rd2FyZ3MsCisgICAgICAgICAgYXJnczogdGVzdHdyYXBfcHl0ZXN0ICsgWwor ICAgICAgICAgICAgJy0tdGVzdGdyb3VwJywgdGVzdF9kaXJbJ25hbWUnXSwKKyAgICAgICAgICAg ICctLXRlc3RuYW1lJywgb25ldGVzdF9wLAorICAgICAgICAgICAgJy0tJywgdGVzdF9jb21tYW5k LAorICAgICAgICAgICAgdGVzdF9kaXJbJ3NkJ10gLyBvbmV0ZXN0LAorICAgICAgICAgIF0sCisg ICAgICAgICkKKyAgICAgIGVuZGZvcmVhY2gKKyAgICAgIGluc3RhbGxfc3VpdGVzICs9IHRlc3Rf Z3JvdXAKICAgICBlbHNlCiAgICAgICBlcnJvcigndW5rbm93biBraW5kIEAwQCBvZiB0ZXN0IGlu IEAxQCcuZm9ybWF0KGtpbmQsIHRlc3RfZGlyWydzZCddKSkKICAgICBlbmRpZgpAQCAtMzk1MCw2 ICs0MDM2LDcgQEAgc3VtbWFyeSgKICAgICAnZHRyYWNlJzogZHRyYWNlLAogICAgICdmbGV4Jzog J0AwQCBAMUAnLmZvcm1hdChmbGV4LmZ1bGxfcGF0aCgpLCBmbGV4X3ZlcnNpb24pLAogICAgICdw cm92ZSc6IHByb3ZlLAorICAgICdweXRlc3QnOiBweXRlc3QsCiAgIH0sCiAgIHNlY3Rpb246ICdQ cm9ncmFtcycsCiApCkBAIC0zOTkwLDYgKzQwNzcsNyBAQCBzdW1tYXJ5KAogc3VtbWFyeSgKICAg ewogICAgICd0YXAnOiB0YXBfdGVzdHNfZW5hYmxlZCwKKyAgICAncHl0ZXN0JzogcHl0ZXN0X2Vu YWJsZWQsCiAgIH0sCiAgIHNlY3Rpb246ICdPdGhlciBmZWF0dXJlcycsCiAgIGxpc3Rfc2VwOiAn ICcsCmRpZmYgLS1naXQgYS9tZXNvbl9vcHRpb25zLnR4dCBiL21lc29uX29wdGlvbnMudHh0Cmlu ZGV4IDA2YmY1NjI3ZDNjLi44OGYyMmU2OTlkOSAxMDA2NDQKLS0tIGEvbWVzb25fb3B0aW9ucy50 eHQKKysrIGIvbWVzb25fb3B0aW9ucy50eHQKQEAgLTQxLDcgKzQxLDEwIEBAIG9wdGlvbignY2Fz c2VydCcsIHR5cGU6ICdib29sZWFuJywgdmFsdWU6IGZhbHNlLAogICBkZXNjcmlwdGlvbjogJ0Vu YWJsZSBhc3NlcnRpb24gY2hlY2tzIChmb3IgZGVidWdnaW5nKScpCiAKIG9wdGlvbigndGFwX3Rl c3RzJywgdHlwZTogJ2ZlYXR1cmUnLCB2YWx1ZTogJ2F1dG8nLAotICBkZXNjcmlwdGlvbjogJ0Vu YWJsZSBUQVAgdGVzdHMnKQorICBkZXNjcmlwdGlvbjogJ0VuYWJsZSAoUGVybC1iYXNlZCkgVEFQ IHRlc3RzJykKKworb3B0aW9uKCdweXRlc3QnLCB0eXBlOiAnZmVhdHVyZScsIHZhbHVlOiAnYXV0 bycsCisgIGRlc2NyaXB0aW9uOiAnRW5hYmxlIChQeXRob24tYmFzZWQpIHB5dGVzdCBzdWl0ZXMn KQogCiBvcHRpb24oJ2luamVjdGlvbl9wb2ludHMnLCB0eXBlOiAnYm9vbGVhbicsIHZhbHVlOiBm YWxzZSwKICAgZGVzY3JpcHRpb246ICdFbmFibGUgaW5qZWN0aW9uIHBvaW50cycpCkBAIC0xOTUs NiArMTk4LDkgQEAgb3B0aW9uKCdQRVJMJywgdHlwZTogJ3N0cmluZycsIHZhbHVlOiAncGVybCcs CiBvcHRpb24oJ1BST1ZFJywgdHlwZTogJ3N0cmluZycsIHZhbHVlOiAncHJvdmUnLAogICBkZXNj cmlwdGlvbjogJ1BhdGggdG8gcHJvdmUgYmluYXJ5JykKIAorb3B0aW9uKCdQWVRFU1QnLCB0eXBl OiAnYXJyYXknLCB2YWx1ZTogWydweXRlc3QnLCAncHkudGVzdCddLAorICBkZXNjcmlwdGlvbjog J1BhdGggdG8gcHl0ZXN0IGJpbmFyeScpCisKIG9wdGlvbignUFlUSE9OJywgdHlwZTogJ2FycmF5 JywgdmFsdWU6IFsncHl0aG9uMycsICdweXRob24nXSwKICAgZGVzY3JpcHRpb246ICdQYXRoIHRv IHB5dGhvbiBiaW5hcnknKQogCmRpZmYgLS1naXQgYS9weXRlc3QuaW5pIGIvcHl0ZXN0LmluaQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWVhMmMxODAyNzgKLS0tIC9k ZXYvbnVsbAorKysgYi9weXRlc3QuaW5pCkBAIC0wLDAgKzEgQEAKK1tweXRlc3RdCmRpZmYgLS1n aXQgYS9zcmMvTWFrZWZpbGUuZ2xvYmFsLmluIGIvc3JjL01ha2VmaWxlLmdsb2JhbC5pbgppbmRl eCA4YjFiMzU3YmVhYS4uZmM3NDQxNjZiZDIgMTAwNjQ0Ci0tLSBhL3NyYy9NYWtlZmlsZS5nbG9i YWwuaW4KKysrIGIvc3JjL01ha2VmaWxlLmdsb2JhbC5pbgpAQCAtMjExLDYgKzIxMSw3IEBAIGVu YWJsZV9kdHJhY2UJPSBAZW5hYmxlX2R0cmFjZUAKIGVuYWJsZV9jb3ZlcmFnZQk9IEBlbmFibGVf Y292ZXJhZ2VACiBlbmFibGVfaW5qZWN0aW9uX3BvaW50cyA9IEBlbmFibGVfaW5qZWN0aW9uX3Bv aW50c0AKIGVuYWJsZV90YXBfdGVzdHMJPSBAZW5hYmxlX3RhcF90ZXN0c0AKK2VuYWJsZV9weXRl c3QJPSBAZW5hYmxlX3B5dGVzdEAKIAogcHl0aG9uX2luY2x1ZGVzcGVjCT0gQHB5dGhvbl9pbmNs dWRlc3BlY0AKIHB5dGhvbl9saWJkaXIJCT0gQHB5dGhvbl9saWJkaXJACkBAIC0zNTQsNiArMzU1 LDcgQEAgTVNHRk1UICA9IEBNU0dGTVRACiBNU0dGTVRfRkxBR1MgPSBATVNHRk1UX0ZMQUdTQAog TVNHTUVSR0UgPSBATVNHTUVSR0VACiBPUEVOU1NMCT0gQE9QRU5TU0xACitQWVRFU1QJPSBAUFlU RVNUQAogUFlUSE9OCT0gQFBZVEhPTkAKIFRBUgk9IEBUQVJACiBYR0VUVEVYVCA9IEBYR0VUVEVY VEAKQEAgLTUwOCw2ICs1MTAsMjcgQEAgcHJvdmVfaW5zdGFsbGNoZWNrID0gQGVjaG8gIlRBUCB0 ZXN0cyBub3QgZW5hYmxlZC4gVHJ5IGNvbmZpZ3VyaW5nIHdpdGggLS1lbmFibGUKIHByb3ZlX2No ZWNrID0gJChwcm92ZV9pbnN0YWxsY2hlY2spCiBlbmRpZgogCitpZmVxICgkKGVuYWJsZV9weXRl c3QpLHllcykKKworcHl0ZXN0X2luc3RhbGxjaGVjayA9IEBlY2hvICJJbnN0YWxsY2hlY2sgaXMg bm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgZm9yIHB5dGVzdC4iCisKK2RlZmluZSBweXRlc3RfY2hl Y2sKK2VjaG8gIiMgKysrIHB5dGVzdCBjaGVjayBpbiAkKHN1YmRpcikgKysrIiAmJiBcCitybSAt cmYgJyQoQ1VSRElSKScvdG1wX2NoZWNrICYmIFwKKyQoTUtESVJfUCkgJyQoQ1VSRElSKScvdG1w X2NoZWNrICYmIFwKK2NkICQoc3JjZGlyKSAmJiBcCisgICBURVNUTE9HRElSPSckKENVUkRJUikv dG1wX2NoZWNrL2xvZycgXAorICAgVEVTVERBVEFESVI9JyQoQ1VSRElSKS90bXBfY2hlY2snIFwK KyAgIFBZVEhPTlBBVEg9JyQoYWJzX3RvcF9zcmNkaXIpL3NyYy90ZXN0L3B5dGVzdC9wbHVnaW5z OiQkUFlUSE9OUEFUSCcgXAorICAgJCh3aXRoX3RlbXBfaW5zdGFsbCkgXAorICAgJChQWVRFU1Qp IC1jICckKGFic190b3Bfc3JjZGlyKS9weXRlc3QuaW5pJyAtLXZlcmJvc2UgLXJhIC4vcHl0Lwor ZW5kZWYKKworZWxzZQorcHl0ZXN0X2luc3RhbGxjaGVjayA9IEBlY2hvICJweXRlc3QgaXMgbm90 IGVuYWJsZWQuIFRyeSBjb25maWd1cmluZyB3aXRoIC0tZW5hYmxlLXB5dGVzdCIKK3B5dGVzdF9j aGVjayA9ICQocHl0ZXN0X2luc3RhbGxjaGVjaykKK2VuZGlmCisKICMgSW5zdGFsbGF0aW9uLgog CiBpbnN0YWxsX2JpbiA9IEBpbnN0YWxsX2JpbkAKZGlmZiAtLWdpdCBhL3NyYy9tYWtlZmlsZXMv bWVzb24uYnVpbGQgYi9zcmMvbWFrZWZpbGVzL21lc29uLmJ1aWxkCmluZGV4IDU0ZGJjMDU5YWRh Li5mNjllYjEwNjhkYiAxMDA2NDQKLS0tIGEvc3JjL21ha2VmaWxlcy9tZXNvbi5idWlsZAorKysg Yi9zcmMvbWFrZWZpbGVzL21lc29uLmJ1aWxkCkBAIC01Niw2ICs1Niw3IEBAIHBneHNfa3YgPSB7 CiAgICdlbmFibGVfbmxzJzogbGliaW50bC5mb3VuZCgpID8gJ3llcycgOiAnbm8nLAogICAnZW5h YmxlX2luamVjdGlvbl9wb2ludHMnOiBnZXRfb3B0aW9uKCdpbmplY3Rpb25fcG9pbnRzJykgPyAn eWVzJyA6ICdubycsCiAgICdlbmFibGVfdGFwX3Rlc3RzJzogdGFwX3Rlc3RzX2VuYWJsZWQgPyAn eWVzJyA6ICdubycsCisgICdlbmFibGVfcHl0ZXN0JzogcHl0ZXN0X2VuYWJsZWQgPyAneWVzJyA6 ICdubycsCiAgICdlbmFibGVfZGVidWcnOiBnZXRfb3B0aW9uKCdkZWJ1ZycpID8gJ3llcycgOiAn bm8nLAogICAnZW5hYmxlX2NvdmVyYWdlJzogJ25vJywKICAgJ2VuYWJsZV9kdHJhY2UnOiBkdHJh Y2UuZm91bmQoKSA/ICd5ZXMnIDogJ25vJywKQEAgLTE0Nyw2ICsxNDgsNyBAQCBwZ3hzX2JpbnMg PSB7CiAgICdPUEVOU1NMJzogb3BlbnNzbCwKICAgJ1BFUkwnOiBwZXJsLAogICAnUFJPVkUnOiBw cm92ZSwKKyAgJ1BZVEVTVCc6IHB5dGVzdCwKICAgJ1BZVEhPTic6IHB5dGhvbiwKICAgJ1RBUic6 IHRhciwKICAgJ1pTVEQnOiBwcm9ncmFtX3pzdGQsCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9NYWtl ZmlsZSBiL3NyYy90ZXN0L01ha2VmaWxlCmluZGV4IDUxMWE3MmU2MjM4Li4wYmU5NzcxZDcxZiAx MDA2NDQKLS0tIGEvc3JjL3Rlc3QvTWFrZWZpbGUKKysrIGIvc3JjL3Rlc3QvTWFrZWZpbGUKQEAg LTEyLDcgKzEyLDE2IEBAIHN1YmRpciA9IHNyYy90ZXN0CiB0b3BfYnVpbGRkaXIgPSAuLi8uLgog aW5jbHVkZSAkKHRvcF9idWlsZGRpcikvc3JjL01ha2VmaWxlLmdsb2JhbAogCi1TVUJESVJTID0g cGVybCBwb3N0bWFzdGVyIHJlZ3Jlc3MgaXNvbGF0aW9uIG1vZHVsZXMgYXV0aGVudGljYXRpb24g cmVjb3Zlcnkgc3Vic2NyaXB0aW9uCitTVUJESVJTID0gXAorCWF1dGhlbnRpY2F0aW9uIFwKKwlp c29sYXRpb24gXAorCW1vZHVsZXMgXAorCXBlcmwgXAorCXBvc3RtYXN0ZXIgXAorCXB5dGVzdCBc CisJcmVjb3ZlcnkgXAorCXJlZ3Jlc3MgXAorCXN1YnNjcmlwdGlvbgogCiBpZmVxICgkKHdpdGhf aWN1KSx5ZXMpCiBTVUJESVJTICs9IGljdQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvbWVzb24uYnVp bGQgYi9zcmMvdGVzdC9tZXNvbi5idWlsZAppbmRleCBjY2MzMWQ2YTg2YS4uZDA4YTZlZjYxYzIg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L21lc29uLmJ1aWxkCisrKyBiL3NyYy90ZXN0L21lc29uLmJ1 aWxkCkBAIC01LDYgKzUsNyBAQCBzdWJkaXIoJ2lzb2xhdGlvbicpCiAKIHN1YmRpcignYXV0aGVu dGljYXRpb24nKQogc3ViZGlyKCdwb3N0bWFzdGVyJykKK3N1YmRpcigncHl0ZXN0JykKIHN1YmRp cigncmVjb3ZlcnknKQogc3ViZGlyKCdzdWJzY3JpcHRpb24nKQogc3ViZGlyKCdtb2R1bGVzJykK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGVzdC9NYWtlZmlsZSBiL3NyYy90ZXN0L3B5dGVzdC9N YWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmJkY2E5NmNj YmUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9weXRlc3QvTWFrZWZpbGUKQEAgLTAsMCAr MSwyMCBAQAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgTWFrZWZpbGUgZm9yIHB5dGVzdAorIwor IyBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2 ZWxvcG1lbnQgR3JvdXAKKyMgUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9m IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyMKKyMgc3JjL3Rlc3QvcHl0ZXN0L01ha2Vm aWxlCisjCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzdWJkaXIgPSBzcmMvdGVzdC9weXRlc3QKK3Rv cF9idWlsZGRpciA9IC4uLy4uLy4uCitpbmNsdWRlICQodG9wX2J1aWxkZGlyKS9zcmMvTWFrZWZp bGUuZ2xvYmFsCisKK2NoZWNrOgorCSQocHl0ZXN0X2NoZWNrKQorCitjbGVhbiBkaXN0Y2xlYW4g bWFpbnRhaW5lci1jbGVhbjoKKwlybSAtcmYgdG1wX2NoZWNrCmRpZmYgLS1naXQgYS9zcmMvdGVz dC9weXRlc3QvUkVBRE1FIGIvc3JjL3Rlc3QvcHl0ZXN0L1JFQURNRQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMTMzM2VkNzdiN2UKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9weXRlc3QvUkVBRE1FCkBAIC0wLDAgKzEgQEAKK1RPRE8KZGlmZiAtLWdpdCBhL3Ny Yy90ZXN0L3B5dGVzdC9tZXNvbi5idWlsZCBiL3NyYy90ZXN0L3B5dGVzdC9tZXNvbi5idWlsZApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYWJkMTI4ZGZhMjQKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9weXRlc3QvbWVzb24uYnVpbGQKQEAgLTAsMCArMSwxNiBA QAorIyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdy b3VwCisKK2lmIG5vdCBweXRlc3RfZW5hYmxlZAorICBzdWJkaXJfZG9uZSgpCitlbmRpZgorCit0 ZXN0cyArPSB7CisgICduYW1lJzogJ3B5dGVzdCcsCisgICdzZCc6IG1lc29uLmN1cnJlbnRfc291 cmNlX2RpcigpLAorICAnYmQnOiBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpLAorICAncHl0ZXN0 JzogeworICAgICd0ZXN0cyc6IFsKKyAgICAgICdweXQvdGVzdF9zb21ldGhpbmcucHknLAorICAg IF0sCisgIH0sCit9CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRlc3QvcGx1Z2lucy9wZ3RhcC5w eSBiL3NyYy90ZXN0L3B5dGVzdC9wbHVnaW5zL3BndGFwLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5lZjgyOTFlMjkxYwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90 ZXN0L3B5dGVzdC9wbHVnaW5zL3BndGFwLnB5CkBAIC0wLDAgKzEsMTkzIEBACisjIENvcHlyaWdo dCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworaW1wb3J0 IG9zCitpbXBvcnQgc3lzCitmcm9tIHR5cGluZyBpbXBvcnQgT3B0aW9uYWwKKworaW1wb3J0IHB5 dGVzdAorCisjCisjIEhlbHBlcnMKKyMKKworCitjbGFzcyBUQVA6CisgICAgIiIiCisgICAgQSBi YXNpYyBBUEkgZm9yIHJlcG9ydGluZyB2aWEgdGhlIFRBUCBwcm90b2NvbC4KKyAgICAiIiIKKwor ICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5jb3VudCA9IDAKKworICAgICAg ICAjIFhYWCBpbnRlcmFjdHMgcG9vcmx5IHdpdGggdGVzdHdyYXAncyBib2lsZXJwbGF0ZSBkaWFn bm9zdGljcworICAgICAgICAjIHNlbGYucHJpbnQoIlRBUCB2ZXJzaW9uIDEzIikKKworICAgIGRl ZiBleHBlY3Qoc2VsZiwgbnVtOiBpbnQpOgorICAgICAgICBzZWxmLnByaW50KGYiMS4ue251bX0i KQorCisgICAgZGVmIHByaW50KHNlbGYsICphcmdzKToKKyAgICAgICAgcHJpbnQoKmFyZ3MsIGZp bGU9c3lzLl9fc3Rkb3V0X18pCisKKyAgICBkZWYgb2soc2VsZiwgbmFtZTogc3RyKToKKyAgICAg ICAgc2VsZi5jb3VudCArPSAxCisgICAgICAgIHNlbGYucHJpbnQoIm9rIiwgc2VsZi5jb3VudCwg Ii0iLCBuYW1lKQorCisgICAgZGVmIHNraXAoc2VsZiwgbmFtZTogc3RyLCByZWFzb246IHN0cik6 CisgICAgICAgIHNlbGYuY291bnQgKz0gMQorICAgICAgICBzZWxmLnByaW50KCJvayIsIHNlbGYu Y291bnQsICItIiwgbmFtZSwgIiMgc2tpcCIsIHJlYXNvbikKKworICAgIGRlZiBmYWlsKHNlbGYs IG5hbWU6IHN0ciwgZGV0YWlsczogc3RyKToKKyAgICAgICAgc2VsZi5jb3VudCArPSAxCisgICAg ICAgIHNlbGYucHJpbnQoIm5vdCBvayIsIHNlbGYuY291bnQsICItIiwgbmFtZSkKKworICAgICAg ICAjIG10ZXN0IGhhcyBzb21lIG9kZCBiZWhhdmlvciBhcm91bmQgVEFQIHRlc3RzIHdoZXJlIGl0 IHdvbid0IHByaW50CisgICAgICAgICMgZGlhZ25vc3RpY3Mgb24gZmFpbHVyZSBpZiB0aGV5J3Jl IHBhcnQgb2YgdGhlIHN0ZG91dCBzdHJlYW0sIHNvIHdlCisgICAgICAgICMgbWlnaHQgYXMgd2Vs bCBqdXN0IGR1bXAgdGhlIGRldGFpbHMgZGlyZWN0bHkgdG8gc3RkZXJyIGluc3RlYWQuCisgICAg ICAgIHByaW50KGRldGFpbHMsIGZpbGU9c3lzLl9fc3RkZXJyX18pCisKKwordGFwID0gVEFQKCkK KworCitjbGFzcyBUZXN0Tm90ZXM6CisgICAgIiIiCisgICAgQW5ub3RhdGlvbnMgZm9yIGEgc2lu Z2xlIHRlc3QuIFRoZSBleGlzdGluZyBweXRlc3QgaG9va3Mga2VlcCBpbnRlcmVzdGluZworICAg IGluZm9ybWF0aW9uIHNvbWV3aGF0IHNlcGFyYXRlZCBhY3Jvc3MgdGhlIGRpZmZlcmVudCBzdGFn ZXMKKyAgICAoc2V0dXAvdGVzdC90ZWFyZG93biksIHNvIHRoaXMgY2xhc3MgaXMgdXNlZCB0byBj b3JyZWxhdGUgdGhlbS4KKyAgICAiIiIKKworICAgIHNraXBwZWQgPSBGYWxzZQorICAgIHNraXBf cmVhc29uID0gTm9uZQorCisgICAgZmFpbGVkID0gRmFsc2UKKyAgICBkZXRhaWxzID0gIiIKKwor CisjIFJlZ2lzdGVyIGEgY3VzdG9tIGtleSBpbiB0aGUgc3Rhc2ggZGljdGlvbmFyeSBmb3Iga2Vl cGluZyBvdXIgVGVzdE5vdGVzLgorbm90ZXNfa2V5ID0gcHl0ZXN0LlN0YXNoS2V5W1Rlc3ROb3Rl c10oKQorCisKKyMKKyMgSG9vayBJbXBsZW1lbnRhdGlvbnMKKyMKKworCitAcHl0ZXN0Lmhvb2tp bXBsKHRyeWZpcnN0PVRydWUpCitkZWYgcHl0ZXN0X2NvbmZpZ3VyZShjb25maWcpOgorICAgICIi IgorICAgIEhpamFja3MgdGhlIHN0YW5kYXJkIHN0cmVhbXMgYXMgc29vbiBhcyBwb3NzaWJsZSBk dXJpbmcgcHl0ZXN0IHN0YXJ0dXAuIFRoZQorICAgIHB5dGVzdC1mb3JtYXR0ZWQgb3V0cHV0IGdl dHMgbG9nZ2VkIHRvIGZpbGUgaW5zdGVhZCwgYW5kIHdlJ2xsIHVzZSB0aGUKKyAgICBvcmlnaW5h bCBzeXMuX19zdGRvdXRfXy9fX3N0ZGVycl9fIHN0cmVhbXMgZm9yIHRoZSBUQVAgcHJvdG9jb2wu CisgICAgIiIiCisgICAgbG9nZGlyID0gb3MuZ2V0ZW52KCJURVNUTE9HRElSIikKKyAgICBpZiBu b3QgbG9nZGlyOgorICAgICAgICByYWlzZSBSdW50aW1lRXJyb3IoInBndGFwIHJlcXVpcmVzIHRo ZSBURVNUTE9HRElSIGVudnZhciB0byBiZSBzZXQiKQorCisgICAgb3MubWFrZWRpcnMobG9nZGly KQorICAgIGxvZ3BhdGggPSBvcy5wYXRoLmpvaW4obG9nZGlyLCAicHl0ZXN0LmxvZyIpCisgICAg c3lzLnN0ZG91dCA9IHN5cy5zdGRlcnIgPSBvcGVuKGxvZ3BhdGgsICJhIiwgYnVmZmVyaW5nPTEp CisKKworQHB5dGVzdC5ob29raW1wbCh0cnlsYXN0PVRydWUpCitkZWYgcHl0ZXN0X3Nlc3Npb25m aW5pc2goc2Vzc2lvbiwgZXhpdHN0YXR1cyk6CisgICAgIiIiCisgICAgU3VwcHJlc3NlcyBub256 ZXJvIGV4aXQgY29kZXMgZHVlIHRvIGZhaWxlZCB0ZXN0cy4gKEluIHRoYXQgY2FzZSwgd2Ugd2Fu dAorICAgIE1lc29uIHRvIHJlcG9ydCBhIGZhaWx1cmUgY291bnQsIG5vdCBhIGdlbmVyaWMgRVJS T1IuKQorICAgICIiIgorICAgIGlmIGV4aXRzdGF0dXMgPT0gcHl0ZXN0LkV4aXRDb2RlLlRFU1RT X0ZBSUxFRDoKKyAgICAgICAgc2Vzc2lvbi5leGl0c3RhdHVzID0gcHl0ZXN0LkV4aXRDb2RlLk9L CisKKworQHB5dGVzdC5ob29raW1wbAorZGVmIHB5dGVzdF9jb2xsZWN0cmVwb3J0KHJlcG9ydCk6 CisgICAgIyBJbmNsdWRlIGNvbGxlY3Rpb24gZmFpbHVyZXMgZGlyZWN0bHkgaW4gTWVzb24gZXJy b3Igb3V0cHV0LgorICAgIGlmIHJlcG9ydC5mYWlsZWQ6CisgICAgICAgIHByaW50KHJlcG9ydC5s b25ncmVwcnRleHQsIGZpbGU9c3lzLl9fc3RkZXJyX18pCisKKworQHB5dGVzdC5ob29raW1wbAor ZGVmIHB5dGVzdF9pbnRlcm5hbGVycm9yKGV4Y3JlcHIsIGV4Y2luZm8pOgorICAgICMgSW5jbHVk ZSBpbnRlcm5hbCBlcnJvcnMgZGlyZWN0bHkgaW4gTWVzb24gZXJyb3Igb3V0cHV0LgorICAgIHBy aW50KGV4Y3JlcHIsIGZpbGU9c3lzLl9fc3RkZXJyX18pCisKKworIworIyBIb29rIFdyYXBwZXJz CisjCisjIEluIHB5dGVzdCBwYXJsYW5jZSwgYSAid3JhcHBlciIgZm9yIGEgaG9vayBjYW4gaW5z cGVjdCBhbmQgb3B0aW9uYWxseSBtb2RpZnkKKyMgZXhpc3RpbmcgaG9va3MnIGJlaGF2aW9yLCBi dXQgaXQgZG9lcyBub3QgcmVwbGFjZSB0aGUgaG9vayBjaGFpbi4gVGhpcyBpcyBkb25lCisjIHRo cm91Z2ggYSBnZW5lcmF0b3Itc3R5bGUgQVBJIHdoaWNoIGNoYWlucyB0aGUgaG9va3MgdG9nZXRo ZXIgKHNlZSB0aGUgdXNlIG9mCisjIGB5aWVsZGApLgorIworCisKK0BweXRlc3QuaG9va2ltcGwo aG9va3dyYXBwZXI9VHJ1ZSkKK2RlZiBweXRlc3RfY29sbGVjdGlvbihzZXNzaW9uKToKKyAgICAi IiJSZXBvcnRzIHRoZSBudW1iZXIgb2YgZ2F0aGVyZWQgdGVzdHMgYWZ0ZXIgY29sbGVjdGlvbiBp cyBmaW5pc2hlZC4iIiIKKyAgICByZXMgPSB5aWVsZAorICAgIHRhcC5leHBlY3Qoc2Vzc2lvbi50 ZXN0c2NvbGxlY3RlZCkKKyAgICByZXR1cm4gcmVzCisKKworQHB5dGVzdC5ob29raW1wbChob29r d3JhcHBlcj1UcnVlKQorZGVmIHB5dGVzdF9ydW50ZXN0X21ha2VyZXBvcnQoaXRlbSwgY2FsbCk6 CisgICAgIiIiCisgICAgQW5ub3RhdGVzIGEgdGVzdCBpdGVtIHdpdGggb3VyIFRlc3ROb3RlcyBh bmQgZ3JhYnMgcmVsZXZhbnQgaW5mb3JtYXRpb24gZm9yCisgICAgcmVwb3J0aW5nLgorCisgICAg VGhpcyBpcyBjYWxsZWQgbXVsdGlwbGUgdGltZXMgcGVyIHRlc3QsIHNvIGl0J3Mgbm90IGNvcnJl Y3QgdG8gcHJpbnQgdGhlIFRBUAorICAgIHJlc3VsdCBoZXJlLiAoQSB0ZXN0IGFuZCBpdHMgdGVh cmRvd24gc3RhZ2UgY2FuIGJvdGggZmFpbCwgYW5kIHdlIHdhbnQgdG8KKyAgICBzZWUgdGhlIGRl dGFpbHMgZm9yIGJvdGguKSBXZSBpbnN0ZWFkIGNvbWJpbmUgYWxsIHRoZSBpbmZvcm1hdGlvbiBm b3IgdXNlIGJ5CisgICAgb3VyIHB5dGVzdF9ydW50ZXN0X3Byb3RvY29sIHdyYXBwZXIgbGF0ZXIg b24uCisgICAgIiIiCisgICAgcmVzID0geWllbGQKKworICAgIGlmIG5vdGVzX2tleSBub3QgaW4g aXRlbS5zdGFzaDoKKyAgICAgICAgaXRlbS5zdGFzaFtub3Rlc19rZXldID0gVGVzdE5vdGVzKCkK KyAgICBub3RlcyA9IGl0ZW0uc3Rhc2hbbm90ZXNfa2V5XQorCisgICAgcmVwb3J0ID0gcmVzLmdl dF9yZXN1bHQoKQorICAgIGlmIHJlcG9ydC5wYXNzZWQ6CisgICAgICAgIHBhc3MgICMgbm8gYW5u b3RhdGlvbiBuZWVkZWQKKworICAgIGVsaWYgcmVwb3J0LnNraXBwZWQ6CisgICAgICAgIG5vdGVz LnNraXBwZWQgPSBUcnVlCisgICAgICAgIF8sIF8sIG5vdGVzLnNraXBfcmVhc29uID0gcmVwb3J0 LmxvbmdyZXByCisKKyAgICBlbGlmIHJlcG9ydC5mYWlsZWQ6CisgICAgICAgIG5vdGVzLmZhaWxl ZCA9IFRydWUKKworICAgICAgICBpZiBub3Qgbm90ZXMuZGV0YWlsczoKKyAgICAgICAgICAgIG5v dGVzLmRldGFpbHMgKz0gIns6X143Mn1cblxuIi5mb3JtYXQoZiIge3JlcG9ydC5oZWFkX2xpbmV9 ICIpCisKKyAgICAgICAgaWYgcmVwb3J0LndoZW4gaW4gKCJzZXR1cCIsICJ0ZWFyZG93biIpOgor ICAgICAgICAgICAgbm90ZXMuZGV0YWlscyArPSAiXG57Ol9eNzJ9XG5cbiIuZm9ybWF0KAorICAg ICAgICAgICAgICAgIGYiIEVycm9yIGR1cmluZyB7cmVwb3J0LndoZW59IG9mIHtyZXBvcnQuaGVh ZF9saW5lfSAiCisgICAgICAgICAgICApCisKKyAgICAgICAgbm90ZXMuZGV0YWlscyArPSByZXBv cnQubG9uZ3JlcHJ0ZXh0ICsgIlxuIgorCisgICAgZWxzZToKKyAgICAgICAgcmFpc2UgUnVudGlt ZUVycm9yKCJweXRlc3RfcnVudGVzdF9tYWtlcmVwb3J0IHJlY2VpdmVkIHVua25vd24gdGVzdCBz dGF0dXMiKQorCisgICAgcmV0dXJuIHJlcworCisKK0BweXRlc3QuaG9va2ltcGwoaG9va3dyYXBw ZXI9VHJ1ZSkKK2RlZiBweXRlc3RfcnVudGVzdF9wcm90b2NvbChpdGVtLCBuZXh0aXRlbSk6Cisg ICAgIiIiCisgICAgUmVwb3J0cyB0aGUgVEFQIHJlc3VsdCBmb3IgdGhpcyB0ZXN0IGl0ZW0gdXNp bmcgb3VyIGdhdGhlcmVkIFRlc3ROb3Rlcy4KKyAgICAiIiIKKyAgICByZXMgPSB5aWVsZAorCisg ICAgYXNzZXJ0IG5vdGVzX2tleSBpbiBpdGVtLnN0YXNoLCAicGd0YXAgZGlkbid0IGFubm90YXRl IGEgdGVzdCBpdGVtPyIKKyAgICBub3RlcyA9IGl0ZW0uc3Rhc2hbbm90ZXNfa2V5XQorCisgICAg aWYgbm90ZXMuZmFpbGVkOgorICAgICAgICB0YXAuZmFpbChpdGVtLm5vZGVpZCwgbm90ZXMuZGV0 YWlscykKKyAgICBlbGlmIG5vdGVzLnNraXBwZWQ6CisgICAgICAgIHRhcC5za2lwKGl0ZW0ubm9k ZWlkLCBub3Rlcy5za2lwX3JlYXNvbikKKyAgICBlbHNlOgorICAgICAgICB0YXAub2soaXRlbS5u b2RlaWQpCisKKyAgICByZXR1cm4gcmVzCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRlc3QvcHl0 L3Rlc3Rfc29tZXRoaW5nLnB5IGIvc3JjL3Rlc3QvcHl0ZXN0L3B5dC90ZXN0X3NvbWV0aGluZy5w eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWJkNDU2MTg1MTIKLS0t IC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9weXRlc3QvcHl0L3Rlc3Rfc29tZXRoaW5nLnB5CkBA IC0wLDAgKzEsMTcgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBE ZXZlbG9wbWVudCBHcm91cAorCitpbXBvcnQgcHl0ZXN0CisKKworQHB5dGVzdC5maXh0dXJlCitk ZWYgaGV5KCk6CisgICAgeWllbGQKKyAgICByYWlzZSAidWgtb2giCisKKworZGVmIHRlc3Rfc29t ZXRoaW5nKGhleSk6CisgICAgYXNzZXJ0IDIgPT0gNAorCisKK2RlZiB0ZXN0X3NvbWV0aGluZ19l bHNlKCk6CisgICAgYXNzZXJ0IDIgPT0gMgotLSAKMi4zNC4xCgo= --000000000000b0ce9f063e654bfa Content-Type: application/octet-stream; name="v1-0003-WIP-pytest-Add-some-SSL-client-tests.patch" Content-Disposition: attachment; filename="v1-0003-WIP-pytest-Add-some-SSL-client-tests.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mfd2s4mw2 RnJvbSA5NzkwOGMyZDU2NmZjMmRmOWU5YjkyNDdlYjA0NGRkYTRiZmQ1NmMzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVHVlLCAxOSBBdWcgMjAyNSAxMjo1Njo0NSAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjEgMy82XSBXSVA6IHB5dGVzdDogQWRkIHNvbWUgU1NMIGNsaWVudCB0ZXN0cwoK VGhpcyBpcyBhIHNhbXBsZSBjbGllbnQtb25seSB0ZXN0IHN1aXRlLiBJdCB0ZXN0cyBzb21lIGhh bmRzaGFrZQpmYWlsdXJlcyBhZ2FpbnN0IGEgbW9jayBzZXJ2ZXIsIGFzIHdlbGwgYXMgYSBmdWxs IFNTTCBoYW5kc2hha2UgKyBlbXB0eQpxdWVyeSArIHJlc3BvbnNlLgoKcHljYS9jcnlwdG9ncmFw aHkgaXMgYWRkZWQgYXMgYSBuZXcgcGFja2FnZSBkZXBlbmRlbmN5LiBDZXJ0aWZpY2F0ZXMgZm9y CnRlc3RpbmcgYXJlIGdlbmVyYXRlZCBvbiB0aGUgZmx5LgoKVGhlIGBwZ2AgdGVzdCBwYWNrYWdl IGNvbnRhaW5zIHNvbWUgaGVscGVycyBhbmQgZml4dHVyZXMgKGFzIHdlbGwgYXMKc29tZSBzZWxm LXRlc3RzIGZvciBtb3JlIGNvbXBsaWNhdGVkIGJlaGF2aW9yKS4gT2Ygbm90ZToKCi0gcGcucmVx dWlyZV90ZXN0X2V4dHJhKCkgbGV0cyB5b3UgbWFyayBhIHRlc3QvY2xhc3MvbW9kdWxlIGFzIHNr aXBwYWJsZQogIGlmIFBHX1RFU1RfRVhUUkEgZG9lcyBub3QgY29udGFpbiB0aGUgbmVjZXNzYXJ5 IHN0cmluZ3MuCgotIHBnLnJlbWFpbmluZ190aW1lb3V0KCkgaXMgYSBmdW5jdGlvbiB3aGljaCBj YW4gYmUgcmVwZWF0ZWRseSBjYWxsZWQgdG8KICBkZXRlcm1pbmUgaG93IG11Y2ggb2YgdGhlIFBH X1RFU1RfVElNRU9VVF9ERUZBVUxUIHJlbWFpbnMgZm9yIHRoZQogIGN1cnJlbnQgdGVzdCBpdGVt LgoKLSBwZy5saWJwcSBpcyBhIGZpeHR1cmUgdGhhdCB3cmFwcyBsaWJwcS5zbyBpbiBhIG1vcmUg ZnJpZW5kbHksIGJ1dAogIHN0aWxsIGxvdy1sZXZlbCwgY3R5cGVzIEZGSS4gQWxsb2NhdGVkIHJl c291cmNlcyBhcmUgdW53b3VuZCBhbmQKICByZWxlYXNlZCBkdXJpbmcgdGVzdCB0ZWFyZG93bi4K ClRoZSBtb2NrIGRlc2lnbiBpcyB0aHJlYWRlZDogdGhlIHNlcnZlciBzb2NrZXQgaXMgbGlzdGVu aW5nIG9uIGEKYmFja2dyb3VuZCB0aHJlYWQsIGFuZCB0aGUgdGVzdCBwcm92aWRlcyB0aGUgc2Vy dmVyIGxvZ2ljIHZpYSBhCmNhbGxiYWNrLiBUaGVyZSBpcyBzb21lIGFkZGl0aW9uYWwgd29yayBz dGlsbCBuZWVkZWQgdG8gbWFrZSB0aGlzCnByb2R1Y3Rpb24tcmVhZHk7IHNlZSB0aGUgbm90ZXMg Zm9yIF9UQ1BTZXJ2ZXIuYmFja2dyb3VuZCgpLiAoQ3VycmVudGx5LAphbiBleGNlcHRpb24gaW4g dGhlIHdyb25nIHBsYWNlIGNvdWxkIHJlc3VsdCBpbiBhIGhhbmctdW50aWwtdGltZW91dApyYXRo ZXIgdGhhbiBhbiBpbW1lZGlhdGUgZmFpbHVyZS4pCgpUT0RPczoKLSBsb2NhbF9zZXJ2ZXIgYW5k IHRjcF9zZXJ2ZXJfY2xhc3MgYXJlIG5lYXJseSBpZGVudGljYWwgYW5kIHNob3VsZAogIHNoYXJl IGNvZGUuCi0gZml4IGV4Y2VwdGlvbi1yZWxhdGVkIHRpbWVvdXRzIGZvciAuYmFja2dyb3VuZCgp Ci0gZmlndXJlIG91dCB0aGUgcHJvcGVyIHVzZSBvZiAic2Vzc2lvbiIgdnMgIm1vZHVsZSIgc2Nv cGUKLSBlbnN1cmUgdGhhdCBwcS5saWJwcSB1bndpbmRzICh0byBjbG9zZSBjb25uZWN0aW9ucykg YmVmb3JlIHRjcF9zZXJ2ZXI7CiAgc2VlIGNvbW1lbnQgaW4gdGVzdF9zZXJ2ZXJfd2l0aF9zc2xf ZGlzYWJsZWQoKQotLS0KIC5jaXJydXMudGFza3MueW1sICAgICAgICAgICAgICAgICB8ICAxOCAr LQogY29uZmlnL3B5dGVzdC1yZXF1aXJlbWVudHMudHh0ICAgIHwgIDEwICsrCiBweXRlc3QuaW5p ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUgKwogc3JjL3Rlc3QvcHl0ZXN0L21lc29uLmJ1 aWxkICAgICAgIHwgICAxICsKIHNyYy90ZXN0L3B5dGVzdC9wZy9fX2luaXRfXy5weSAgICB8ICAg MyArCiBzcmMvdGVzdC9weXRlc3QvcGcvX2Vudi5weSAgICAgICAgfCAgNTUgKysrKysrCiBzcmMv dGVzdC9weXRlc3QvcGcvZml4dHVyZXMucHkgICAgfCAyMTIgKysrKysrKysrKysrKysrKysrKysr KysKIHNyYy90ZXN0L3B5dGVzdC9weXQvY29uZnRlc3QucHkgICB8ICAgMyArCiBzcmMvdGVzdC9w eXRlc3QvcHl0L3Rlc3RfbGlicHEucHkgfCAxNzEgKysrKysrKysrKysrKysrKysrCiBzcmMvdGVz dC9zc2wvTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDIgKwogc3JjL3Rlc3Qvc3NsL21lc29uLmJ1 aWxkICAgICAgICAgIHwgICA2ICsKIHNyYy90ZXN0L3NzbC9weXQvY29uZnRlc3QucHkgICAgICB8 IDEyOSArKysrKysrKysrKysrKwogc3JjL3Rlc3Qvc3NsL3B5dC90ZXN0X2NsaWVudC5weSAgIHwg Mjc4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMTMgZmlsZXMgY2hhbmdlZCwgODg3 IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rl c3QvcHl0ZXN0L3BnL19faW5pdF9fLnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcHl0 ZXN0L3BnL19lbnYucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRlc3QvcGcvZml4 dHVyZXMucHkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRlc3QvcHl0L2NvbmZ0ZXN0 LnB5CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3QvcHl0ZXN0L3B5dC90ZXN0X2xpYnBxLnB5 CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Rlc3Qvc3NsL3B5dC9jb25mdGVzdC5weQogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy90ZXN0L3NzbC9weXQvdGVzdF9jbGllbnQucHkKCmRpZmYgLS1naXQg YS8uY2lycnVzLnRhc2tzLnltbCBiLy5jaXJydXMudGFza3MueW1sCmluZGV4IDgwZjliMzk0YmQy Li40ZTc0NGYxYzEwNSAxMDA2NDQKLS0tIGEvLmNpcnJ1cy50YXNrcy55bWwKKysrIGIvLmNpcnJ1 cy50YXNrcy55bWwKQEAgLTIyNSw2ICsyMjUsNyBAQCB0YXNrOgogICAgIHN5c2N0bCBrZXJuLmNv cmVmaWxlPScvdG1wL2NvcmVzLyVOLiVQLmNvcmUnCiAgIHNldHVwX2FkZGl0aW9uYWxfcGFja2Fn ZXNfc2NyaXB0OiB8CiAgICAgcGtnIGluc3RhbGwgLXkgXAorICAgICAgcHkzMTEtY3J5cHRvZ3Jh cGh5IFwKICAgICAgIHB5MzExLXBhY2thZ2luZyBcCiAgICAgICBweTMxMS1weXRlc3QKIApAQCAt MzE2LDYgKzMxNyw3IEBAIHRhc2s6CiAKICAgICAgIHNldHVwX2FkZGl0aW9uYWxfcGFja2FnZXNf c2NyaXB0OiB8CiAgICAgICAgIHBrZ2luIC15IGluc3RhbGwgXAorICAgICAgICAgIHB5MzEyLWNy eXB0b2dyYXBoeSBcCiAgICAgICAgICAgcHkzMTItcGFja2FnaW5nIFwKICAgICAgICAgICBweTMx Mi10ZXN0CiAgICAgICAgIGxuIC1zIC91c3IvcGtnL2Jpbi9weXRlc3QtMy4xMiAvdXNyL3BrZy9i aW4vcHl0ZXN0CkBAIC0zMzksOCArMzQxLDkgQEAgdGFzazoKIAogICAgICAgc2V0dXBfYWRkaXRp b25hbF9wYWNrYWdlc19zY3JpcHQ6IHwKICAgICAgICAgcGtnX2FkZCAtSSBcCi0gICAgICAgICAg cHkzLXRlc3QgXAotICAgICAgICAgIHB5My1wYWNrYWdpbmcKKyAgICAgICAgICBweTMtY3J5cHRv Z3JhcGh5IFwKKyAgICAgICAgICBweTMtcGFja2FnaW5nIFwKKyAgICAgICAgICBweTMtdGVzdAog ICAgICAgIyBBbHdheXMgY29yZSBkdW1wIHRvICR7Q09SRV9EVU1QX0RJUn0KICAgICAgIHNldF9j b3JlX2R1bXBfc2NyaXB0OiBzeXNjdGwgLXcga2Vybi5ub3N1aWRjb3JlZHVtcD0yCiAgICAgICA8 PDogKm9wZW5ic2RfdGFza190ZW1wbGF0ZQpAQCAtNTAxLDggKzUwNCw5IEBAIHRhc2s6CiAgIHNl dHVwX2FkZGl0aW9uYWxfcGFja2FnZXNfc2NyaXB0OiB8CiAgICAgYXB0LWdldCB1cGRhdGUKICAg ICBERUJJQU5fRlJPTlRFTkQ9bm9uaW50ZXJhY3RpdmUgYXB0LWdldCAteSBpbnN0YWxsIFwKLSAg ICAgIHB5dGhvbjMtcHl0ZXN0IFwKLSAgICAgIHB5dGhvbjMtcGFja2FnaW5nCisgICAgICBweXRo b24zLWNyeXB0b2dyYXBoeSBcCisgICAgICBweXRob24zLXBhY2thZ2luZyBcCisgICAgICBweXRo b24zLXB5dGVzdAogCiAgIG1hdHJpeDoKICAgICAjIFNQRUNJQUw6CkBAIC02NDMsNiArNjQ3LDcg QEAgdGFzazoKICAgICBDSVJSVVNfV09SS0lOR19ESVI6ICR7SE9NRX0vcGdzcWwvCiAgICAgQ0NB Q0hFX0RJUjogJHtIT01FfS9jY2FjaGUKICAgICBNQUNQT1JUU19DQUNIRTogJHtIT01FfS9tYWNw b3J0cy1jYWNoZQorICAgIFBZVEVTVF9ERUJVR19URU1QUk9PVDogL3RtcCAgIyBkZWZhdWx0IGlz IHRvbyBsb25nIGZvciBVTklYIHNvY2tldHMgb24gTWFjCiAKICAgICBNRVNPTl9GRUFUVVJFUzog Pi0KICAgICAgIC1EYm9uam91cj1lbmFibGVkCkBAIC02NjMsNiArNjY4LDcgQEAgdGFzazoKICAg ICAgIHA1LjM0LWlvLXR0eQogICAgICAgcDUuMzQtaXBjLXJ1bgogICAgICAgcHl0aG9uMzEyCisg ICAgICBweTMxMi1jcnlwdG9ncmFwaHkKICAgICAgIHB5MzEyLXBhY2thZ2luZwogICAgICAgcHkz MTItcHl0ZXN0CiAgICAgICB0Y2wKQEAgLTgwMSw3ICs4MDcsNyBAQCB0YXNrOgogICAjIFhYWCBE b2VzIENob2NvbGF0ZXkgcmVhbGx5IG5vdCBoYXZlIGFueSBQeXRob24gcGFja2FnZSBpbnN0YWxs ZXJzPwogICBzZXR1cF9hZGRpdGlvbmFsX3BhY2thZ2VzX3NjcmlwdDogfAogICAgIFJFTSBjaG9j byBpbnN0YWxsIC15IC0tbm8tcHJvZ3Jlc3MgLi4uCi0gICAgcGlwMyBpbnN0YWxsIC0tdXNlciBw YWNrYWdpbmcgcHl0ZXN0CisgICAgcGlwMyBpbnN0YWxsIC0tdXNlciBjcnlwdG9ncmFwaHkgcGFj a2FnaW5nIHB5dGVzdAogCiAgIHNldHVwX2hvc3RzX2ZpbGVfc2NyaXB0OiB8CiAgICAgZWNobyAx MjcuMC4wLjEgcGctbG9hZGJhbGFuY2V0ZXN0ID4+IGM6XFdpbmRvd3NcU3lzdGVtMzJcRHJpdmVy c1xldGNcaG9zdHMKQEAgLTg2NCw3ICs4NzAsNyBAQCB0YXNrOgogICAgIGZvbGRlcjogJHtDQ0FD SEVfRElSfQogCiAgIHNldHVwX2FkZGl0aW9uYWxfcGFja2FnZXNfc2NyaXB0OiB8Ci0gICAgQzpc bXN5czY0XHVzclxiaW5ccGFjbWFuLmV4ZSAtUyAtLW5vY29uZmlybSBtaW5ndy13NjQtdWNydC14 ODZfNjQtcHl0aG9uLXBhY2thZ2luZyBtaW5ndy13NjQtdWNydC14ODZfNjQtcHl0aG9uLXB5dGVz dAorICAgIEM6XG1zeXM2NFx1c3JcYmluXHBhY21hbi5leGUgLVMgLS1ub2NvbmZpcm0gbWluZ3ct dzY0LXVjcnQteDg2XzY0LXB5dGhvbi1jcnlwdG9ncmFwaHkgbWluZ3ctdzY0LXVjcnQteDg2XzY0 LXB5dGhvbi1wYWNrYWdpbmcgbWluZ3ctdzY0LXVjcnQteDg2XzY0LXB5dGhvbi1weXRlc3QKIAog ICBtaW5nd19pbmZvX3NjcmlwdDogfAogICAgICVCQVNIJSAtYyAid2hlcmUgZ2NjIgpkaWZmIC0t Z2l0IGEvY29uZmlnL3B5dGVzdC1yZXF1aXJlbWVudHMudHh0IGIvY29uZmlnL3B5dGVzdC1yZXF1 aXJlbWVudHMudHh0CmluZGV4IDE1NzI2MmE2ODRmLi5kMmUyNjA0MDQ2NiAxMDA2NDQKLS0tIGEv Y29uZmlnL3B5dGVzdC1yZXF1aXJlbWVudHMudHh0CisrKyBiL2NvbmZpZy9weXRlc3QtcmVxdWly ZW1lbnRzLnR4dApAQCAtMjAsMyArMjAsMTMgQEAgcHl0ZXN0ID49IDcuMCwgPCA5CiAjIFRoZXNl IGFyZSBtZXRhLXBhY2thZ2VzIHdoaWNoIGFsbG93IGNoZWNrX3B5dGVzdC5weSB0byBydW4uCiBw YWNrYWdpbmcKIGltcG9ydGxpYl9tZXRhZGF0YSA7IHB5dGhvbl92ZXJzaW9uIDwgIjMuOCIKKwor IyBOb3RlcyBvbiB0aGUgY3J5cHRvZ3JhcGh5IHBhY2thZ2U6CisjIC0gMy4zLjIgaXMgc2hpcHBl ZCBvbiBEZWJpYW4gYnVsbHNleWUuCisjIC0gMy40LnggZHJvcHMgc3VwcG9ydCBmb3IgUHl0aG9u IDIsIG1ha2luZyBpdCBhIHZlcnNpb24gb2Ygbm90ZSBmb3Igb2xkZXIgTFRTCisjICAgZGlzdHJv cy4KKyMgLSAzNS54IHN3aXRjaGVkIHZlcnNpb25pbmcgc2NoZW1lcyBhbmQgbW92ZWQgdG8gUnVz dCBwYXJzaW5nLgorIyAtIDQwLnggaXMgdGhlIGxhc3QgdmVyc2lvbiBzdXBwb3J0aW5nIFB5dGhv biAzLjYuCisjIFhYWCBJcyBpdCBhcHByb3ByaWF0ZSB0byByZXF1aXJlIGNyeXB0b2dyYXBoeSwg b3Igc2hvdWxkIHdlIHNpbXBseSBza2lwCisjIGRlcGVuZGVudCB0ZXN0cz8KK2NyeXB0b2dyYXBo eSA+PSAzLjMuMgpkaWZmIC0tZ2l0IGEvcHl0ZXN0LmluaSBiL3B5dGVzdC5pbmkKaW5kZXggZWVh MmMxODAyNzguLjgzNzA5N2JhMGJkIDEwMDY0NAotLS0gYS9weXRlc3QuaW5pCisrKyBiL3B5dGVz dC5pbmkKQEAgLTEgKzEsNiBAQAogW3B5dGVzdF0KKworbWludmVyc2lvbiA9IDcuMAorCisjIENv bW1vbiB0ZXN0IGNvZGUgY2FuIGJlIGZvdW5kIGhlcmUuCitweXRob25wYXRoID0gc3JjL3Rlc3Qv cHl0ZXN0CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRlc3QvbWVzb24uYnVpbGQgYi9zcmMvdGVz dC9weXRlc3QvbWVzb24uYnVpbGQKaW5kZXggYWJkMTI4ZGZhMjQuLmY1MzE5M2U4Njg2IDEwMDY0 NAotLS0gYS9zcmMvdGVzdC9weXRlc3QvbWVzb24uYnVpbGQKKysrIGIvc3JjL3Rlc3QvcHl0ZXN0 L21lc29uLmJ1aWxkCkBAIC0xMSw2ICsxMSw3IEBAIHRlc3RzICs9IHsKICAgJ3B5dGVzdCc6IHsK ICAgICAndGVzdHMnOiBbCiAgICAgICAncHl0L3Rlc3Rfc29tZXRoaW5nLnB5JywKKyAgICAgICdw eXQvdGVzdF9saWJwcS5weScsCiAgICAgXSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3B5dGVzdC9wZy9fX2luaXRfXy5weSBiL3NyYy90ZXN0L3B5dGVzdC9wZy9fX2luaXRfXy5weQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZWY4ZmFmNTRjYTQKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9weXRlc3QvcGcvX19pbml0X18ucHkKQEAgLTAsMCArMSwz IEBACisjIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQg R3JvdXAKKworZnJvbSAuX2VudiBpbXBvcnQgaGFzX3Rlc3RfZXh0cmEsIHJlcXVpcmVfdGVzdF9l eHRyYQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0ZXN0L3BnL19lbnYucHkgYi9zcmMvdGVzdC9w eXRlc3QvcGcvX2Vudi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u NmYxOGFmMDc4NDQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVzdC9weXRlc3QvcGcvX2Vudi5w eQpAQCAtMCwwICsxLDU1IEBACisjIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBvcworZnJvbSB0 eXBpbmcgaW1wb3J0IExpc3QsIE9wdGlvbmFsCisKK2ltcG9ydCBweXRlc3QKKworbG9nZ2VyID0g bG9nZ2luZy5nZXRMb2dnZXIoX19uYW1lX18pCisKKworZGVmIGhhc190ZXN0X2V4dHJhKGtleTog c3RyKSAtPiBib29sOgorICAgICIiIgorICAgIFJldHVybnMgVHJ1ZSBpZiB0aGUgUEdfVEVTVF9F WFRSQSBlbnZpcm9ubWVudCB2YXJpYWJsZSBjb250YWlucyB0aGUgZ2l2ZW4KKyAgICBrZXkuCisg ICAgIiIiCisgICAgZXh0cmEgPSBvcy5nZXRlbnYoIlBHX1RFU1RfRVhUUkEiLCAiIikKKyAgICBy ZXR1cm4ga2V5IGluIGV4dHJhLnNwbGl0KCkKKworCitkZWYgcmVxdWlyZV90ZXN0X2V4dHJhKCpr ZXlzOiBzdHIpIC0+IGJvb2w6CisgICAgIiIiCisgICAgQSBjb252ZW5pZW5jZSBhbm5vdGF0aW9u IHdoaWNoIHdpbGwgc2tpcCB0ZXN0cyBpZiBhbGwgb2YgdGhlIHJlcXVpcmVkIGtleXMKKyAgICBh cmUgbm90IHByZXNlbnQgaW4gUEdfVEVTVF9FWFRSQS4KKworICAgIFRvIHNraXAgYSBwYXJ0aWN1 bGFyIHRlc3QgZnVuY3Rpb24gb3IgY2xhc3M6CisKKyAgICAgICAgQHBnLnJlcXVpcmVfdGVzdF9l eHRyYSgibGRhcCIpCisgICAgICAgIGRlZiB0ZXN0X3NvbWVfbGRhcF9mZWF0dXJlKCk6CisgICAg ICAgICAgICAuLi4KKworICAgIFRvIHNraXAgYW4gZW50aXJlIG1vZHVsZToKKworICAgICAgICBw eXRlc3RtYXJrID0gcGcucmVxdWlyZV90ZXN0X2V4dHJhKCJzc2wiLCAia2VyYmVyb3MiKQorICAg ICIiIgorICAgIHJldHVybiBweXRlc3QubWFyay5za2lwaWYoCisgICAgICAgIG5vdCBhbGwoW2hh c190ZXN0X2V4dHJhKGspIGZvciBrIGluIGtleXNdKSwKKyAgICAgICAgcmVhc29uPSJyZXF1aXJl cyB7fSB0byBiZSBzZXQgaW4gUEdfVEVTVF9FWFRSQSIuZm9ybWF0KCIsICIuam9pbihrZXlzKSks CisgICAgKQorCisKK2RlZiB0ZXN0X3RpbWVvdXRfZGVmYXVsdCgpIC0+IGludDoKKyAgICAiIiIK KyAgICBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgUEdfVEVTVF9USU1FT1VUX0RFRkFVTFQgZW52 aXJvbm1lbnQgdmFyaWFibGUsIGluCisgICAgc2Vjb25kcywgb3IgMTgwIGlmIG9uZSB3YXMgbm90 IHByb3ZpZGVkLgorICAgICIiIgorICAgIGRlZmF1bHQgPSBvcy5nZXRlbnYoIlBHX1RFU1RfVElN RU9VVF9ERUZBVUxUIiwgIiIpCisgICAgaWYgbm90IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAx ODAKKworICAgIHRyeToKKyAgICAgICAgcmV0dXJuIGludChkZWZhdWx0KQorICAgIGV4Y2VwdCBW YWx1ZUVycm9yIGFzIHY6CisgICAgICAgIGxvZ2dlci53YXJuaW5nKCJQR19URVNUX1RJTUVPVVRf REVGQVVMVCBjb3VsZCBub3QgYmUgcGFyc2VkOiAiICsgc3RyKHYpKQorICAgICAgICByZXR1cm4g MTgwCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRlc3QvcGcvZml4dHVyZXMucHkgYi9zcmMvdGVz dC9weXRlc3QvcGcvZml4dHVyZXMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmI1ZDNiZmY2OWE4Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcHl0ZXN0L3Bn L2ZpeHR1cmVzLnB5CkBAIC0wLDAgKzEsMjEyIEBACisjIENvcHlyaWdodCAoYykgMjAyNSwgUG9z dGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKworaW1wb3J0IGNvbnRleHRsaWIKK2lt cG9ydCBjdHlwZXMKK2ltcG9ydCBwbGF0Zm9ybQoraW1wb3J0IHRpbWUKK2Zyb20gdHlwaW5nIGlt cG9ydCBBbnksIENhbGxhYmxlLCBEaWN0CisKK2ltcG9ydCBweXRlc3QKKworZnJvbSAuX2VudiBp bXBvcnQgdGVzdF90aW1lb3V0X2RlZmF1bHQKKworCitAcHl0ZXN0LmZpeHR1cmUKK2RlZiByZW1h aW5pbmdfdGltZW91dCgpOgorICAgICIiIgorICAgIFRoaXMgZml4dHVyZSBwcm92aWRlcyBhIGZ1 bmN0aW9uIHRoYXQgcmV0dXJucyBob3cgbXVjaCBvZiB0aGUKKyAgICBQR19URVNUX1RJTUVPVVRf REVGQVVMVCByZW1haW5zIGZvciB0aGUgY3VycmVudCB0ZXN0LCBpbiBmcmFjdGlvbmFsIHNlY29u ZHMuCisgICAgVGhpcyB2YWx1ZSBpcyBuZXZlciBsZXNzIHRoYW4gemVyby4KKworICAgIFRoaXMg Zml4dHVyZSBpcyBwZXItdGVzdCwgc28gdGhlIGRlYWRsaW5lIGlzIGFsc28gcmVzZXQgb24gYSBw ZXItdGVzdCBiYXNpcy4KKyAgICAiIiIKKyAgICBub3cgPSB0aW1lLm1vbm90b25pYygpCisgICAg ZGVhZGxpbmUgPSBub3cgKyB0ZXN0X3RpbWVvdXRfZGVmYXVsdCgpCisKKyAgICByZXR1cm4gbGFt YmRhOiBtYXgoZGVhZGxpbmUgLSB0aW1lLm1vbm90b25pYygpLCAwKQorCisKK2NsYXNzIF9QR2Nv bm4oY3R5cGVzLlN0cnVjdHVyZSk6CisgICAgcGFzcworCisKK2NsYXNzIF9QR3Jlc3VsdChjdHlw ZXMuU3RydWN0dXJlKToKKyAgICBwYXNzCisKKworX1BHY29ubl9wID0gY3R5cGVzLlBPSU5URVIo X1BHY29ubikKK19QR3Jlc3VsdF9wID0gY3R5cGVzLlBPSU5URVIoX1BHcmVzdWx0KQorCisKK0Bw eXRlc3QuZml4dHVyZShzY29wZT0ic2Vzc2lvbiIpCitkZWYgbGlicHFfaGFuZGxlKCk6CisgICAg IiIiCisgICAgTG9hZHMgYSBjdHlwZXMgaGFuZGxlIGZvciBsaWJwcS4gU29tZSBjb21tb24gZnVu Y3Rpb24gcHJvdG90eXBlcyBhcmUKKyAgICBpbml0aWFsaXplZCBmb3IgZ2VuZXJhbCB1c2UuCisg ICAgIiIiCisgICAgc3lzdGVtID0gcGxhdGZvcm0uc3lzdGVtKCkKKworICAgIGlmIHN5c3RlbSBp biAoIkxpbnV4IiwgIkZyZWVCU0QiLCAiTmV0QlNEIiwgIk9wZW5CU0QiKToKKyAgICAgICAgbmFt ZSA9ICJsaWJwcS5zby41IgorICAgIGVsaWYgc3lzdGVtID09ICJEYXJ3aW4iOgorICAgICAgICBu YW1lID0gImxpYnBxLjUuZHlsaWIiCisgICAgZWxpZiBzeXN0ZW0gPT0gIldpbmRvd3MiOgorICAg ICAgICBuYW1lID0gImxpYnBxLmRsbCIKKyAgICBlbHNlOgorICAgICAgICBhc3NlcnQgRmFsc2Us IGYidGhlIGxpYnBxIGZpeHR1cmUgbXVzdCBiZSB1cGRhdGVkIGZvciB7c3lzdGVtfSIKKworICAg ICMgWFhYIGN0eXBlcy5DRExMKCkgaXMgYSBsaXR0bGUgc3RyaWN0ZXIgd2l0aCBsb2FkIHBhdGhz IG9uIFdpbmRvd3MuIFRoZQorICAgICMgcHJlZmVycmVkIHdheSBhcm91bmQgdGhhdCBpcyB0byBr bm93IHRoZSBhYnNvbHV0ZSBwYXRoIHRvIGxpYnBxLmRsbCwgYnV0CisgICAgIyB0aGF0IGRvZXNu J3Qgc2VlbSB0byBtZXNoIHdlbGwgd2l0aCB0aGUgY3VycmVudCB0ZXN0IGluZnJhc3RydWN0dXJl LiBGb3IKKyAgICAjIG5vdywgZW5hYmxlICJzdGFuZGFyZCIgTG9hZExpYnJhcnkgYmVoYXZpb3Iu CisgICAgbG9hZG9wdHMgPSB7fQorICAgIGlmIHN5c3RlbSA9PSAiV2luZG93cyI6CisgICAgICAg IGxvYWRvcHRzWyJ3aW5tb2RlIl0gPSAwCisKKyAgICBsaWIgPSBjdHlwZXMuQ0RMTChuYW1lLCAq KmxvYWRvcHRzKQorCisgICAgIworICAgICMgRnVuY3Rpb24gUHJvdG90eXBlcworICAgICMKKwor ICAgIGxpYi5QUWNvbm5lY3RkYi5yZXN0eXBlID0gX1BHY29ubl9wCisgICAgbGliLlBRY29ubmVj dGRiLmFyZ3R5cGVzID0gW2N0eXBlcy5jX2NoYXJfcF0KKworICAgIGxpYi5QUXN0YXR1cy5yZXN0 eXBlID0gY3R5cGVzLmNfaW50CisgICAgbGliLlBRc3RhdHVzLmFyZ3R5cGVzID0gW19QR2Nvbm5f cF0KKworICAgIGxpYi5QUWV4ZWMucmVzdHlwZSA9IF9QR3Jlc3VsdF9wCisgICAgbGliLlBRZXhl Yy5hcmd0eXBlcyA9IFtfUEdjb25uX3AsIGN0eXBlcy5jX2NoYXJfcF0KKworICAgIGxpYi5QUXJl c3VsdFN0YXR1cy5yZXN0eXBlID0gY3R5cGVzLmNfaW50CisgICAgbGliLlBRcmVzdWx0U3RhdHVz LmFyZ3R5cGVzID0gW19QR3Jlc3VsdF9wXQorCisgICAgbGliLlBRY2xlYXIucmVzdHlwZSA9IE5v bmUKKyAgICBsaWIuUFFjbGVhci5hcmd0eXBlcyA9IFtfUEdyZXN1bHRfcF0KKworICAgIGxpYi5Q UWVycm9yTWVzc2FnZS5yZXN0eXBlID0gY3R5cGVzLmNfY2hhcl9wCisgICAgbGliLlBRZXJyb3JN ZXNzYWdlLmFyZ3R5cGVzID0gW19QR2Nvbm5fcF0KKworICAgIGxpYi5QUWZpbmlzaC5yZXN0eXBl ID0gTm9uZQorICAgIGxpYi5QUWZpbmlzaC5hcmd0eXBlcyA9IFtfUEdjb25uX3BdCisKKyAgICBy ZXR1cm4gbGliCisKKworY2xhc3MgUEdyZXN1bHQoY29udGV4dGxpYi5BYnN0cmFjdENvbnRleHRN YW5hZ2VyKToKKyAgICAiIiJXcmFwcyBhIHJhdyBfUEdyZXN1bHRfcCB3aXRoIGEgbW9yZSBmcmll bmRseSBpbnRlcmZhY2UuIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgbGliOiBjdHlwZXMu Q0RMTCwgcmVzOiBfUEdyZXN1bHRfcCk6CisgICAgICAgIHNlbGYuX2xpYiA9IGxpYgorICAgICAg ICBzZWxmLl9yZXMgPSByZXMKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjKToKKyAgICAg ICAgc2VsZi5fbGliLlBRY2xlYXIoc2VsZi5fcmVzKQorICAgICAgICBzZWxmLl9yZXMgPSBOb25l CisKKyAgICBkZWYgc3RhdHVzKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5fbGliLlBRcmVz dWx0U3RhdHVzKHNlbGYuX3JlcykKKworCitjbGFzcyBQR2Nvbm4oY29udGV4dGxpYi5BYnN0cmFj dENvbnRleHRNYW5hZ2VyKToKKyAgICAiIiIKKyAgICBXcmFwcyBhIHJhdyBfUEdjb25uX3Agd2l0 aCBhIG1vcmUgZnJpZW5kbHkgaW50ZXJmYWNlLiBUaGlzIGlzIGp1c3QgYQorICAgIHN0dWI7IGl0 J3MgZXhwZWN0ZWQgdG8gZ3Jvdy4KKyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXygKKyAgICAg ICAgc2VsZiwKKyAgICAgICAgbGliOiBjdHlwZXMuQ0RMTCwKKyAgICAgICAgaGFuZGxlOiBfUEdj b25uX3AsCisgICAgICAgIHN0YWNrOiBjb250ZXh0bGliLkV4aXRTdGFjaywKKyAgICApOgorICAg ICAgICBzZWxmLl9saWIgPSBsaWIKKyAgICAgICAgc2VsZi5faGFuZGxlID0gaGFuZGxlCisgICAg ICAgIHNlbGYuX3N0YWNrID0gc3RhY2sKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqZXhjKToK KyAgICAgICAgc2VsZi5fbGliLlBRZmluaXNoKHNlbGYuX2hhbmRsZSkKKyAgICAgICAgc2VsZi5f aGFuZGxlID0gTm9uZQorCisgICAgZGVmIGV4ZWMoc2VsZiwgcXVlcnk6IHN0cikgLT4gUEdyZXN1 bHQ6CisgICAgICAgICIiIgorICAgICAgICBFeGVjdXRlcyBhIHF1ZXJ5IHZpYSBQUWV4ZWMoKSBh bmQgcmV0dXJucyBhIFBHcmVzdWx0LgorICAgICAgICAiIiIKKyAgICAgICAgcmVzID0gc2VsZi5f bGliLlBRZXhlYyhzZWxmLl9oYW5kbGUsIHF1ZXJ5LmVuY29kZSgpKQorICAgICAgICByZXR1cm4g c2VsZi5fc3RhY2suZW50ZXJfY29udGV4dChQR3Jlc3VsdChzZWxmLl9saWIsIHJlcykpCisKKwor QHB5dGVzdC5maXh0dXJlCitkZWYgbGlicHEobGlicHFfaGFuZGxlLCByZW1haW5pbmdfdGltZW91 dCk6CisgICAgIiIiCisgICAgUHJvdmlkZXMgYSBjdHlwZXMtYmFzZWQgQVBJIHdyYXBwZWQgYXJv dW5kIGxpYnBxLnNvLiBUaGlzIGZpeHR1cmUga2VlcHMKKyAgICB0cmFjayBvZiBhbGxvY2F0ZWQg cmVzb3VyY2VzIGFuZCBjbGVhbnMgdGhlbSB1cCBkdXJpbmcgdGVhcmRvd24uIFNlZQorICAgIF9M aWJwcSdzIHB1YmxpYyBBUEkgZm9yIGRldGFpbHMuCisgICAgIiIiCisKKyAgICBjbGFzcyBfTGli cHEoY29udGV4dGxpYi5FeGl0U3RhY2spOgorICAgICAgICBDT05ORUNUSU9OX09LID0gMAorCisg ICAgICAgIFBHUkVTX0VNUFRZX1FVRVJZID0gMAorCisgICAgICAgIGNsYXNzIEVycm9yKFJ1bnRp bWVFcnJvcik6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGxpYnBxLkVycm9yIGlzIHRo ZSBleGNlcHRpb24gY2xhc3MgZm9yIGFwcGxpY2F0aW9uLWxldmVsIGVycm9ycyB0aGF0CisgICAg ICAgICAgICBhcmUgZW5jb3VudGVyZWQgZHVyaW5nIGxpYnBxIG9wZXJhdGlvbnMuCisgICAgICAg ICAgICAiIiIKKworICAgICAgICAgICAgcGFzcworCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxm KToKKyAgICAgICAgICAgIHN1cGVyKCkuX19pbml0X18oKQorICAgICAgICAgICAgc2VsZi5saWIg PSBsaWJwcV9oYW5kbGUKKworICAgICAgICBkZWYgX2Nvbm5zdHIoc2VsZiwgb3B0czogRGljdFtz dHIsIEFueV0pIC0+IHN0cjoKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgRmxhdHRlbnMg dGhlIHByb3ZpZGVkIG9wdGlvbnMgaW50byBhIGxpYnBxIGNvbm5lY3Rpb24gc3RyaW5nLiBWYWx1 ZXMKKyAgICAgICAgICAgIGFyZSBjb252ZXJ0ZWQgdG8gc3RyIGFuZCBxdW90ZWQvZXNjYXBlZCBh cyBuZWNlc3NhcnkuCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHNldHRpbmdzID0gW10K KworICAgICAgICAgICAgZm9yIGssIHYgaW4gb3B0cy5pdGVtcygpOgorICAgICAgICAgICAgICAg IHYgPSBzdHIodikKKyAgICAgICAgICAgICAgICBpZiBub3QgdjoKKyAgICAgICAgICAgICAgICAg ICAgdiA9ICInJyIKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB2 ID0gdi5yZXBsYWNlKCJcXCIsICJcXFxcIikKKyAgICAgICAgICAgICAgICAgICAgdiA9IHYucmVw bGFjZSgiJyIsICJcXCciKQorCisgICAgICAgICAgICAgICAgICAgIGlmICIgIiBpbiB2OgorICAg ICAgICAgICAgICAgICAgICAgICAgdiA9IGYiJ3t2fSciCisKKyAgICAgICAgICAgICAgICBzZXR0 aW5ncy5hcHBlbmQoZiJ7a309e3Z9IikKKworICAgICAgICAgICAgcmV0dXJuICIgIi5qb2luKHNl dHRpbmdzKQorCisgICAgICAgIGRlZiBtdXN0X2Nvbm5lY3Qoc2VsZiwgKipvcHRzKSAtPiBQR2Nv bm46CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIENvbm5lY3RzIHRvIGEgc2VydmVyLCB1 c2luZyB0aGUgZ2l2ZW4gY29ubmVjdGlvbiBvcHRpb25zLCBhbmQKKyAgICAgICAgICAgIHJldHVy bnMgYSBsaWJwcS5QR2Nvbm4gb2JqZWN0IHdyYXBwaW5nIHRoZSBjb25uZWN0aW9uIGhhbmRsZS4g QQorICAgICAgICAgICAgZmFpbHVyZSB3aWxsIHJhaXNlIGxpYnBxLkVycm9yLgorCisgICAgICAg ICAgICBDb25uZWN0aW9ucyBob25vciBQR19URVNUX1RJTUVPVVRfREVGQVVMVCB1bmxlc3MgY29u bmVjdF90aW1lb3V0IGlzCisgICAgICAgICAgICBleHBsaWNpdGx5IG92ZXJyaWRkZW4gaW4gb3B0 cy4KKyAgICAgICAgICAgICIiIgorCisgICAgICAgICAgICBpZiAiY29ubmVjdF90aW1lb3V0IiBu b3QgaW4gb3B0czoKKyAgICAgICAgICAgICAgICB0ID0gaW50KHJlbWFpbmluZ190aW1lb3V0KCkp CisgICAgICAgICAgICAgICAgb3B0c1siY29ubmVjdF90aW1lb3V0Il0gPSBtYXgodCwgMSkKKwor ICAgICAgICAgICAgY29ubl9wID0gc2VsZi5saWIuUFFjb25uZWN0ZGIoc2VsZi5fY29ubnN0cihv cHRzKS5lbmNvZGUoKSkKKworICAgICAgICAgICAgIyBFbnN1cmUgdGhlIGNvbm5lY3Rpb24gaGFu ZGxlIGlzIGFsd2F5cyBjbG9zZWQgYXQgdGhlIGVuZCBvZiB0aGUKKyAgICAgICAgICAgICMgdGVz dC4KKyAgICAgICAgICAgIGNvbm4gPSBzZWxmLmVudGVyX2NvbnRleHQoUEdjb25uKHNlbGYubGli LCBjb25uX3AsIHN0YWNrPXNlbGYpKQorCisgICAgICAgICAgICBpZiBzZWxmLmxpYi5QUXN0YXR1 cyhjb25uX3ApICE9IHNlbGYuQ09OTkVDVElPTl9PSzoKKyAgICAgICAgICAgICAgICByYWlzZSBz ZWxmLkVycm9yKHNlbGYubGliLlBRZXJyb3JNZXNzYWdlKGNvbm5fcCkuZGVjb2RlKCkpCisKKyAg ICAgICAgICAgIHJldHVybiBjb25uCisKKyAgICB3aXRoIF9MaWJwcSgpIGFzIGxpYjoKKyAgICAg ICAgeWllbGQgbGliCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9weXRlc3QvcHl0L2NvbmZ0ZXN0LnB5 IGIvc3JjL3Rlc3QvcHl0ZXN0L3B5dC9jb25mdGVzdC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uZWNiNzJiZTI2ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGVz dC9weXRlc3QvcHl0L2NvbmZ0ZXN0LnB5CkBAIC0wLDAgKzEsMyBAQAorIyBDb3B5cmlnaHQgKGMp IDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK2Zyb20gcGcuZml4 dHVyZXMgaW1wb3J0ICoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3B5dGVzdC9weXQvdGVzdF9saWJw cS5weSBiL3NyYy90ZXN0L3B5dGVzdC9weXQvdGVzdF9saWJwcS5weQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWYwODU3Y2M2MTIKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvdGVzdC9weXRlc3QvcHl0L3Rlc3RfbGlicHEucHkKQEAgLTAsMCArMSwxNzEgQEAKKyMgQ29w eXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitp bXBvcnQgY29udGV4dGxpYgoraW1wb3J0IG9zCitpbXBvcnQgc29ja2V0CitpbXBvcnQgc3RydWN0 CitpbXBvcnQgdGhyZWFkaW5nCitmcm9tIHR5cGluZyBpbXBvcnQgQ2FsbGFibGUKKworaW1wb3J0 IHB5dGVzdAorCisKK0BweXRlc3QubWFyay5wYXJhbWV0cml6ZSgKKyAgICAib3B0cywgZXhwZWN0 ZWQiLAorICAgIFsKKyAgICAgICAgKGRpY3QoKSwgIiIpLAorICAgICAgICAoZGljdChwb3J0PTU0 MzIpLCAicG9ydD01NDMyIiksCisgICAgICAgIChkaWN0KHBvcnQ9NTQzMiwgZGJuYW1lPSJwb3N0 Z3JlcyIpLCAicG9ydD01NDMyIGRibmFtZT1wb3N0Z3JlcyIpLAorICAgICAgICAoZGljdChob3N0 PSIiKSwgImhvc3Q9JyciKSwKKyAgICAgICAgKGRpY3QoaG9zdD0iICIpLCByImhvc3Q9JyAnIiks CisgICAgICAgIChkaWN0KGtleXdvcmQ9IiciKSwgciJrZXl3b3JkPVwnIiksCisgICAgICAgIChk aWN0KGtleXdvcmQ9IiBcXCcgIiksIHIia2V5d29yZD0nIFxcXCcgJyIpLAorICAgIF0sCispCitk ZWYgdGVzdF9jb25uc3RyKGxpYnBxLCBvcHRzLCBleHBlY3RlZCk6CisgICAgIiIiVGVzdHMgdGhl IGVzY2FwZSBiZWhhdmlvciBmb3IgbGlicHEuX2Nvbm5zdHIoKS4iIiIKKyAgICBhc3NlcnQgbGli cHEuX2Nvbm5zdHIob3B0cykgPT0gZXhwZWN0ZWQKKworCitkZWYgdGVzdF9tdXN0X2Nvbm5lY3Rf ZXJyb3JzKGxpYnBxKToKKyAgICAiIiJUZXN0cyB0aGF0IG11c3RfY29ubmVjdCgpIHJhaXNlcyBs aWJwcS5FcnJvci4iIiIKKyAgICB3aXRoIHB5dGVzdC5yYWlzZXMobGlicHEuRXJyb3IsIG1hdGNo PSJpbnZhbGlkIGNvbm5lY3Rpb24gb3B0aW9uIik6CisgICAgICAgIGxpYnBxLm11c3RfY29ubmVj dChzb21lX3Vua25vd25fa2V5d29yZD0id2hhdGV2ZXIiKQorCisKK0BweXRlc3QuZml4dHVyZQor ZGVmIGxvY2FsX3NlcnZlcih0bXBfcGF0aCwgcmVtYWluaW5nX3RpbWVvdXQpOgorICAgICIiIgor ICAgIE9wZW5zIHVwIGEgbG9jYWwgVU5JWCBzb2NrZXQgZm9yIG1vY2tpbmcgYSBQb3N0Z3JlcyBz ZXJ2ZXIgb24gYSBiYWNrZ3JvdW5kCisgICAgdGhyZWFkLiBTZWUgdGhlIF9TZXJ2ZXIgQVBJIGZv ciB1c2FnZS4KKworICAgIFRoaXMgZml4dHVyZSByZXF1aXJlcyBBRl9VTklYIHN1cHBvcnQ7IGRl cGVuZGVudCB0ZXN0cyB3aWxsIGJlIHNraXBwZWQgb24KKyAgICBwbGF0Zm9ybXMgdGhhdCBkb24n dCBwcm92aWRlIGl0LgorICAgICIiIgorCisgICAgdHJ5OgorICAgICAgICBmcm9tIHNvY2tldCBp bXBvcnQgQUZfVU5JWAorICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoKKyAgICAgICAgcHl0ZXN0LnNr aXAoIkFGX1VOSVggbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtIikKKworICAgIGNsYXNz IF9TZXJ2ZXIoY29udGV4dGxpYi5FeGl0U3RhY2spOgorICAgICAgICAiIiIKKyAgICAgICAgSW1w bGVtZW50YXRpb24gY2xhc3MgZm9yIGxvY2FsX3NlcnZlci4gU2VlIC5iYWNrZ3JvdW5kKCkgZm9y IHRoZSBwcmltYXJ5CisgICAgICAgIGVudHJ5IHBvaW50IGZvciB0ZXN0cy4gUG9zdGdyZXMgY2xp ZW50cyBtYXkgY29ubmVjdCB0byB0aGlzIHNlcnZlciB2aWEKKyAgICAgICAgbG9jYWxfc2VydmVy Lmhvc3QvbG9jYWxfc2VydmVyLnBvcnQuCisKKyAgICAgICAgX1NlcnZlciBkZXJpdmVzIGZyb20g Y29udGV4dGxpYi5FeGl0U3RhY2sgdG8gcHJvdmlkZSBlYXN5IGNsZWFudXAgb2YKKyAgICAgICAg YXNzb2NpYXRlZCByZXNvdXJjZXM7IHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhhdCBjbGFz cyBmb3IgYSBmdWxsCisgICAgICAgIGV4cGxhbmF0aW9uLgorICAgICAgICAiIiIKKworICAgICAg ICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKwor ICAgICAgICAgICAgc2VsZi5ob3N0ID0gdG1wX3BhdGgKKyAgICAgICAgICAgIHNlbGYucG9ydCA9 IDU0MzIKKworICAgICAgICAgICAgc2VsZi5fdGhyZWFkID0gTm9uZQorICAgICAgICAgICAgc2Vs Zi5fdGhyZWFkX2V4YyA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyID0gc2VsZi5l bnRlcl9jb250ZXh0KAorICAgICAgICAgICAgICAgIHNvY2tldC5zb2NrZXQoQUZfVU5JWCwgc29j a2V0LlNPQ0tfU1RSRUFNKSwKKyAgICAgICAgICAgICkKKworICAgICAgICBkZWYgYmluZF9hbmRf bGlzdGVuKHNlbGYpOgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBEb2VzIHRoZSBhY3R1 YWwgd29yayBvZiBiaW5kaW5nIHRoZSBVTklYIHNvY2tldCB1c2luZyB0aGUgUG9zdGdyZXMKKyAg ICAgICAgICAgIHNlcnZlciBjb252ZW50aW9ucyBhbmQgbGlzdGVuaW5nIGZvciBjb25uZWN0aW9u cy4KKworICAgICAgICAgICAgVGhlIGxpc3RlbiBiYWNrbG9nIGlzIGN1cnJlbnRseSBoYXJkY29k ZWQgdG8gb25lLgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBzb2NrZmlsZSA9IHNlbGYu aG9zdCAvICIucy5QR1NRTC57fSIuZm9ybWF0KHNlbGYucG9ydCkKKworICAgICAgICAgICAgIyBM b2NrIGRvd24gdGhlIHBlcm1pc3Npb25zIG9uIHRoZSBuZXcgc29ja2V0LgorICAgICAgICAgICAg cHJldl9tYXNrID0gb3MudW1hc2soMG8wNzcpCisKKyAgICAgICAgICAgICMgQmluZCAoY3JlYXRp bmcgdGhlIHNvY2tldCBmaWxlKSwgYW5kIGltbWVkaWF0ZWx5IHJlZ2lzdGVyIGl0IGZvcgorICAg ICAgICAgICAgIyBkZWxldGlvbiBmcm9tIGRpc2sgd2hlbiB0aGUgc3RhY2sgaXMgY2xlYW5lZCB1 cC4KKyAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyLmJpbmQoYnl0ZXMoc29ja2ZpbGUpKQorICAg ICAgICAgICAgc2VsZi5jYWxsYmFjayhvcy51bmxpbmssIHNvY2tmaWxlKQorCisgICAgICAgICAg ICBvcy51bWFzayhwcmV2X21hc2spCisKKyAgICAgICAgICAgIHNlbGYuX2xpc3RlbmVyLmxpc3Rl bigxKQorCisgICAgICAgIGRlZiBiYWNrZ3JvdW5kKHNlbGYsIGZuOiBDYWxsYWJsZVtbc29ja2V0 LnNvY2tldF0sIE5vbmVdKSAtPiBOb25lOgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBB Y2NlcHRzIGEgY2xpZW50IGNvbm5lY3Rpb24gb24gYSBiYWNrZ3JvdW5kIHRocmVhZCBhbmQgcGFz c2VzIGl0IHRvCisgICAgICAgICAgICB0aGUgcHJvdmlkZWQgY2FsbGJhY2suIEFueSBleGNlcHRp b25zIHJhaXNlZCBmcm9tIHRoZSBjYWxsYmFjayB3aWxsCisgICAgICAgICAgICBiZSByZS1yYWlz ZWQgb24gdGhlIG1haW4gdGhyZWFkIGR1cmluZyBmaXh0dXJlIHRlYXJkb3duLgorCisgICAgICAg ICAgICBCbG9ja2luZyBvcGVyYXRpb25zIG9uIHRoZSBjb25uZWN0ZWQgc29ja2V0IGRlZmF1bHQg dG8gdXNpbmcgdGhlCisgICAgICAgICAgICByZW1haW5pbmdfdGltZW91dCgpLCB0aG91Z2ggdGhp cyBjYW4gYmUgY2hhbmdlZCBieSB0aGUgdGVzdCB2aWEgdGhlCisgICAgICAgICAgICBzb2NrZXQn cyAuc2V0dGltZW91dCgpLgorICAgICAgICAgICAgIiIiCisKKyAgICAgICAgICAgIGRlZiBfYmco KToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYuX2xpc3Rl bmVyLnNldHRpbWVvdXQocmVtYWluaW5nX3RpbWVvdXQoKSkKKyAgICAgICAgICAgICAgICAgICAg c29jaywgXyA9IHNlbGYuX2xpc3RlbmVyLmFjY2VwdCgpCisKKyAgICAgICAgICAgICAgICAgICAg d2l0aCBzb2NrOgorICAgICAgICAgICAgICAgICAgICAgICAgc29jay5zZXR0aW1lb3V0KHJlbWFp bmluZ190aW1lb3V0KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBmbihzb2NrKQorCisgICAg ICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgICAgICAgICAj IFNhdmUgdGhlIGV4Y2VwdGlvbiBmb3IgcmUtcmFpc2luZyBvbiB0aGUgbWFpbiB0aHJlYWQuCisg ICAgICAgICAgICAgICAgICAgIHNlbGYuX3RocmVhZF9leGMgPSBlCisKKyAgICAgICAgICAgICMg VE9ETzogcmF0aGVyIHRoYW4gdXNpbmcgY2FsbGJhY2soKSwgY29uc2lkZXIgZXhwbGljaXRseSBz aWduYWxpbmcKKyAgICAgICAgICAgICMgdGhlIGZuKCkgaW1wbGVtZW50YXRpb24gdG8gc3RvcCBl YXJseSBpZiB3ZSBnZXQgYW4gZXhjZXB0aW9uLgorICAgICAgICAgICAgIyBPdGhlcndpc2Ugd2Un bGwgaGFuZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSB0aW1lb3V0LgorICAgICAgICAgICAgc2VsZi5f dGhyZWFkID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9X2JnKQorICAgICAgICAgICAgc2VsZi5j YWxsYmFjayhzZWxmLl9qb2luKQorCisgICAgICAgICAgICBzZWxmLl90aHJlYWQuc3RhcnQoKQor CisgICAgICAgIGRlZiBfam9pbihzZWxmKToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAg V2FpdHMgZm9yIHRoZSBiYWNrZ3JvdW5kIHRocmVhZCB0byBmaW5pc2ggYW5kIHJhaXNlcyBhbnkg dGhyb3duCisgICAgICAgICAgICBleGNlcHRpb24uIFRoaXMgaXMgY2FsbGVkIGR1cmluZyBmaXh0 dXJlIHRlYXJkb3duLgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICAjIEdpdmUgYSBsaXR0 bGUgYml0IG9mIHdpZ2dsZSByb29tIG9uIHRoZSBqb2luIHRpbWVvdXQsIHNpbmNlIHdlJ3JlCisg ICAgICAgICAgICAjIHJhY2luZyBhZ2FpbnN0IHRoZSB0ZXN0J3Mgb3duIHVzZSBvZiByZW1haW5p bmdfdGltZW91dCgpLiAoSXQncworICAgICAgICAgICAgIyBwcmVmZXJhYmxlIHRvIGxldCB0ZXN0 cyByZXBvcnQgdGltZW91dHM7IHRoZSBzdGFjayB0cmFjZXMgd2lsbAorICAgICAgICAgICAgIyBo ZWxwIHdpdGggZGVidWdnaW5nLikKKyAgICAgICAgICAgIHNlbGYuX3RocmVhZC5qb2luKHJlbWFp bmluZ190aW1lb3V0KCkgKyAxKQorICAgICAgICAgICAgaWYgc2VsZi5fdGhyZWFkLmlzX2FsaXZl KCk6CisgICAgICAgICAgICAgICAgcmFpc2UgVGltZW91dEVycm9yKCJiYWNrZ3JvdW5kIHRocmVh ZCBpcyBzdGlsbCBydW5uaW5nIGFmdGVyIHRpbWVvdXQiKQorCisgICAgICAgICAgICBpZiBzZWxm Ll90aHJlYWRfZXhjIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuX3Ro cmVhZF9leGMKKworICAgIHdpdGggX1NlcnZlcigpIGFzIHM6CisgICAgICAgIHMuYmluZF9hbmRf bGlzdGVuKCkKKyAgICAgICAgeWllbGQgcworCisKK2RlZiB0ZXN0X2Nvbm5lY3Rpb25faXNfZmlu aXNoZWRfb25fZXJyb3IobGlicHEsIGxvY2FsX3NlcnZlciwgcmVtYWluaW5nX3RpbWVvdXQpOgor ICAgICIiIlRlc3RzIHRoYXQgUFFmaW5pc2goKSBnZXRzIGNhbGxlZCBhdCB0aGUgZW5kIG9mIHRl c3RpbmcuIiIiCisgICAgZXhwZWN0ZWRfZXJyb3IgPSAic29tZXRoaW5nIGlzIHdyb25nIgorCisg ICAgZGVmIHNlcnZlX2Vycm9yKHM6IHNvY2tldC5zb2NrZXQpIC0+IE5vbmU6CisgICAgICAgIHBr dGxlbiA9IHN0cnVjdC51bnBhY2soIiFJIiwgcy5yZWN2KDQpKVswXQorCisgICAgICAgICMgUXVp Y2sgY2hlY2sgZm9yIHRoZSBzdGFydHVwIHBhY2tldCB2ZXJzaW9uLgorICAgICAgICB2ZXJzaW9u ID0gc3RydWN0LnVucGFjaygiIUhIIiwgcy5yZWN2KDQpKQorICAgICAgICBhc3NlcnQgdmVyc2lv biA9PSAoMywgMCkKKworICAgICAgICAjIERpc2NhcmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgc3Rh cnR1cCBwYWNrZXQgYW5kIHNlbmQgYSB2MiBlcnJvci4KKyAgICAgICAgcy5yZWN2KHBrdGxlbiAt IDgpCisgICAgICAgIHMuc2VuZChiIkUiICsgZXhwZWN0ZWRfZXJyb3IuZW5jb2RlKCkgKyBiIlww IikKKworICAgICAgICAjIEFuZCBub3cgdGhlIHNvY2tldCBzaG91bGQgYmUgY2xvc2VkLgorICAg ICAgICBhc3NlcnQgbm90IHMucmVjdigxKSwgImNsaWVudCBzZW50IHVuZXhwZWN0ZWQgZGF0YSIK KworICAgIGxvY2FsX3NlcnZlci5iYWNrZ3JvdW5kKHNlcnZlX2Vycm9yKQorCisgICAgd2l0aCBw eXRlc3QucmFpc2VzKGxpYnBxLkVycm9yLCBtYXRjaD1leHBlY3RlZF9lcnJvcik6CisgICAgICAg ICMgRXhpdGluZyB0aGlzIGNvbnRleHQgc2hvdWxkIHJlc3VsdCBpbiBQUWZpbmlzaCgpLgorICAg ICAgICB3aXRoIGxpYnBxOgorICAgICAgICAgICAgbGlicHEubXVzdF9jb25uZWN0KGhvc3Q9bG9j YWxfc2VydmVyLmhvc3QsIHBvcnQ9bG9jYWxfc2VydmVyLnBvcnQpCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9zc2wvTWFrZWZpbGUgYi9zcmMvdGVzdC9zc2wvTWFrZWZpbGUKaW5kZXggZThhMTYzOWRi MmQuLjg5NWVhNWVhNDFjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zc2wvTWFrZWZpbGUKKysrIGIv c3JjL3Rlc3Qvc3NsL01ha2VmaWxlCkBAIC0zMCw2ICszMCw4IEBAIGNsZWFuIGRpc3RjbGVhbjoK ICMgRG9lc24ndCBkZXBlbmQgb24gc3NsZmlsZXMgYmVjYXVzZSB3ZSBkb24ndCByZWJ1aWxkIHRo ZW0gYnkgZGVmYXVsdAogY2hlY2s6CiAJJChwcm92ZV9jaGVjaykKKwkjIFhYWCB0aGVzZSBzdWl0 ZXMgc2hvdWxkIHJ1biBpbmRlcGVuZGVudGx5LCBub3Qgc2VyaWFsbHkKKwkkKHB5dGVzdF9jaGVj aykKIAogaW5zdGFsbGNoZWNrOgogCSQocHJvdmVfaW5zdGFsbGNoZWNrKQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3Qvc3NsL21lc29uLmJ1aWxkIGIvc3JjL3Rlc3Qvc3NsL21lc29uLmJ1aWxkCmluZGV4 IGQ4ZTBmYjUxOGUwLi5hMGVlMmFmMDg5OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3NsL21lc29u LmJ1aWxkCisrKyBiL3NyYy90ZXN0L3NzbC9tZXNvbi5idWlsZApAQCAtMTUsNCArMTUsMTAgQEAg dGVzdHMgKz0gewogICAgICAgJ3QvMDAzX3NzbGluZm8ucGwnLAogICAgIF0sCiAgIH0sCisgICdw eXRlc3QnOiB7CisgICAgJ3Rlc3RzJzogWworICAgICAgJ3B5dC90ZXN0X2NsaWVudC5weScsCisg ICAgICAncHl0L3Rlc3Rfc2VydmVyLnB5JywKKyAgICBdLAorICB9LAogfQpkaWZmIC0tZ2l0IGEv c3JjL3Rlc3Qvc3NsL3B5dC9jb25mdGVzdC5weSBiL3NyYy90ZXN0L3NzbC9weXQvY29uZnRlc3Qu cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZiNGRiMzcyZjAzCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3Qvc3NsL3B5dC9jb25mdGVzdC5weQpAQCAtMCwwICsx LDEyOSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3Bt ZW50IEdyb3VwCisKK2ltcG9ydCBkYXRldGltZQoraW1wb3J0IHRlbXBmaWxlCitmcm9tIGNvbGxl Y3Rpb25zIGltcG9ydCBuYW1lZHR1cGxlCisKK2ltcG9ydCBweXRlc3QKKworaW1wb3J0IHBnCitm cm9tIHBnLmZpeHR1cmVzIGltcG9ydCAqCisKKworQHB5dGVzdC5maXh0dXJlKHNjb3BlPSJzZXNz aW9uIikKK2RlZiBjcnlwdG9ncmFwaHkoKToKKyAgICByZXR1cm4gcHl0ZXN0LmltcG9ydG9yc2tp cCgiY3J5cHRvZ3JhcGh5IiwgIjMuMy4yIikKKworCitDZXJ0ID0gbmFtZWR0dXBsZSgiQ2VydCIs ICJjZXJ0LCBjZXJ0cGF0aCwga2V5LCBrZXlwYXRoIikKKworCitAcHl0ZXN0LmZpeHR1cmUoc2Nv cGU9InNlc3Npb24iKQorZGVmIGNlcnRzKGNyeXB0b2dyYXBoeSwgdG1wX3BhdGhfZmFjdG9yeSk6 CisgICAgIiIiCisgICAgQ2FjaGVzIGNvbW1vbmx5IHVzZWQgY2VydGlmaWNhdGVzIGF0IHRoZSBz ZXNzaW9uIGxldmVsLCBhbmQgcHJvdmlkZXMgYSB3YXkKKyAgICB0byBjcmVhdGUgbmV3IG9uZXMu CisKKyAgICAtIGNlcnRzLmNhOiB0aGUgcm9vdCBDQSBjZXJ0aWZpY2F0ZQorCisgICAgLSBjZXJ0 cy5zZXJ2ZXI6IHRoZSAic3RhbmRhcmQiIHNlcnZlciBjZXJ0ZmljYXRlLCBzaWduZWQgYnkgY2Vy dHMuY2EKKworICAgIC0gY2VydHMuc2VydmVyX2hvc3Q6IHRoZSBob3N0bmFtZSBvZiB0aGUgY2Vy dHMuc2VydmVyIGNlcnRpZmljYXRlCisKKyAgICAtIGNlcnRzLm5ldygpOiBjcmVhdGVzIGEgY3Vz dG9tIGNlcnRpZmljYXRlLCBzaWduZWQgYnkgY2VydHMuY2EKKyAgICAiIiIKKworICAgIGZyb20g Y3J5cHRvZ3JhcGh5IGltcG9ydCB4NTA5CisgICAgZnJvbSBjcnlwdG9ncmFwaHkuaGF6bWF0LnBy aW1pdGl2ZXMgaW1wb3J0IGhhc2hlcywgc2VyaWFsaXphdGlvbgorICAgIGZyb20gY3J5cHRvZ3Jh cGh5Lmhhem1hdC5wcmltaXRpdmVzLmFzeW1tZXRyaWMgaW1wb3J0IHJzYQorICAgIGZyb20gY3J5 cHRvZ3JhcGh5Lng1MDkub2lkIGltcG9ydCBOYW1lT0lECisKKyAgICB0bXBkaXIgPSB0bXBfcGF0 aF9mYWN0b3J5Lm1rdGVtcCgidGVzdC1jZXJ0cyIpCisKKyAgICBjbGFzcyBfQ2VydHM6CisgICAg ICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHNlbGYuY2EgPSBzZWxmLm5ldygK KyAgICAgICAgICAgICAgICB4NTA5Lk5hbWUoCisgICAgICAgICAgICAgICAgICAgIFt4NTA5Lk5h bWVBdHRyaWJ1dGUoTmFtZU9JRC5DT01NT05fTkFNRSwgIlBHIHB5dGVzdCBDQSIpXSwKKyAgICAg ICAgICAgICAgICApLAorICAgICAgICAgICAgICAgIGNhPVRydWUsCisgICAgICAgICAgICApCisK KyAgICAgICAgICAgIHNlbGYuc2VydmVyX2hvc3QgPSAiZXhhbXBsZS5vcmciCisgICAgICAgICAg ICBzZWxmLnNlcnZlciA9IHNlbGYubmV3KAorICAgICAgICAgICAgICAgIHg1MDkuTmFtZSgKKyAg ICAgICAgICAgICAgICAgICAgW3g1MDkuTmFtZUF0dHJpYnV0ZShOYW1lT0lELkNPTU1PTl9OQU1F LCBzZWxmLnNlcnZlcl9ob3N0KV0sCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQor CisgICAgICAgIGRlZiBuZXcoc2VsZiwgc3ViamVjdDogeDUwOS5OYW1lLCAqLCBjYT1GYWxzZSkg LT4gQ2VydDoKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgQ3JlYXRlcyBhbmQgc2lnbnMg YSBuZXcgQ2VydCB3aXRoIHRoZSBnaXZlbiBzdWJqZWN0IG5hbWUuIElmIGNhIGlzCisgICAgICAg ICAgICBUcnVlLCB0aGUgY2VydGlmaWNhdGUgd2lsbCBiZSBzZWxmLXNpZ25lZDsgb3RoZXJ3aXNl IHRoZSBjZXJ0aWZpY2F0ZQorICAgICAgICAgICAgaXMgc2lnbmVkIGJ5IHNlbGYuY2EuCisgICAg ICAgICAgICAiIiIKKyAgICAgICAgICAgIGtleSA9IHJzYS5nZW5lcmF0ZV9wcml2YXRlX2tleSgK KyAgICAgICAgICAgICAgICBwdWJsaWNfZXhwb25lbnQ9NjU1MzcsCisgICAgICAgICAgICAgICAg a2V5X3NpemU9MjA0OCwKKyAgICAgICAgICAgICkKKworICAgICAgICAgICAgYnVpbGRlciA9IHg1 MDkuQ2VydGlmaWNhdGVCdWlsZGVyKCkKKyAgICAgICAgICAgIG5vdyA9IGRhdGV0aW1lLmRhdGV0 aW1lLm5vdyhkYXRldGltZS50aW1lem9uZS51dGMpCisKKyAgICAgICAgICAgIGJ1aWxkZXIgPSAo CisgICAgICAgICAgICAgICAgYnVpbGRlci5zdWJqZWN0X25hbWUoc3ViamVjdCkKKyAgICAgICAg ICAgICAgICAucHVibGljX2tleShrZXkucHVibGljX2tleSgpKQorICAgICAgICAgICAgICAgIC5z ZXJpYWxfbnVtYmVyKHg1MDkucmFuZG9tX3NlcmlhbF9udW1iZXIoKSkKKyAgICAgICAgICAgICAg ICAubm90X3ZhbGlkX2JlZm9yZShub3cpCisgICAgICAgICAgICAgICAgLm5vdF92YWxpZF9hZnRl cihub3cgKyBkYXRldGltZS50aW1lZGVsdGEoaG91cnM9MSkpCisgICAgICAgICAgICApCisKKyAg ICAgICAgICAgIGlmIGNhOgorICAgICAgICAgICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLmlzc3Vl cl9uYW1lKHN1YmplY3QpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJ1aWxk ZXIgPSBidWlsZGVyLmlzc3Vlcl9uYW1lKHNlbGYuY2EuY2VydC5zdWJqZWN0KQorCisgICAgICAg ICAgICBidWlsZGVyID0gYnVpbGRlci5hZGRfZXh0ZW5zaW9uKAorICAgICAgICAgICAgICAgIHg1 MDkuQmFzaWNDb25zdHJhaW50cyhjYT1jYSwgcGF0aF9sZW5ndGg9Tm9uZSksCisgICAgICAgICAg ICAgICAgY3JpdGljYWw9VHJ1ZSwKKyAgICAgICAgICAgICkKKworICAgICAgICAgICAgY2VydCA9 IGJ1aWxkZXIuc2lnbigKKyAgICAgICAgICAgICAgICBwcml2YXRlX2tleT1rZXkgaWYgY2EgZWxz ZSBzZWxmLmNhLmtleSwKKyAgICAgICAgICAgICAgICBhbGdvcml0aG09aGFzaGVzLlNIQTI1Nigp LAorICAgICAgICAgICAgKQorCisgICAgICAgICAgICAjIER1bXAgdGhlIGNlcnRpZmljYXRlIGFu ZCBrZXkgdG8gZmlsZS4KKyAgICAgICAgICAgIGtleXBhdGggPSBzZWxmLl90b2ZpbGUoCisgICAg ICAgICAgICAgICAga2V5LnByaXZhdGVfYnl0ZXMoCisgICAgICAgICAgICAgICAgICAgIHNlcmlh bGl6YXRpb24uRW5jb2RpbmcuUEVNLAorICAgICAgICAgICAgICAgICAgICBzZXJpYWxpemF0aW9u LlByaXZhdGVGb3JtYXQuUEtDUzgsCisgICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6YXRpb24u Tm9FbmNyeXB0aW9uKCksCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICBzdWZm aXg9Ii5rZXkiLAorICAgICAgICAgICAgKQorICAgICAgICAgICAgY2VydHBhdGggPSBzZWxmLl90 b2ZpbGUoCisgICAgICAgICAgICAgICAgY2VydC5wdWJsaWNfYnl0ZXMoc2VyaWFsaXphdGlvbi5F bmNvZGluZy5QRU0pLAorICAgICAgICAgICAgICAgIHN1ZmZpeD0iLWNhLmNydCIgaWYgY2EgZWxz ZSAiLmNydCIsCisgICAgICAgICAgICApCisKKyAgICAgICAgICAgIHJldHVybiBDZXJ0KAorICAg ICAgICAgICAgICAgIGNlcnQ9Y2VydCwKKyAgICAgICAgICAgICAgICBjZXJ0cGF0aD1jZXJ0cGF0 aCwKKyAgICAgICAgICAgICAgICBrZXk9a2V5LAorICAgICAgICAgICAgICAgIGtleXBhdGg9a2V5 cGF0aCwKKyAgICAgICAgICAgICkKKworICAgICAgICBkZWYgX3RvZmlsZShzZWxmLCBkYXRhOiBi eXRlcywgKiwgc3VmZml4KSAtPiBzdHI6CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIER1 bXBzIGRhdGEgdG8gYSBmaWxlIG9uIGRpc2sgd2l0aCB0aGUgcmVxdWVzdGVkIHN1ZmZpeCBhbmQg cmV0dXJucworICAgICAgICAgICAgdGhlIHBhdGguIFRoZSBmaWxlIGlzIGxvY2F0ZWQgc29tZXdo ZXJlIGluIHB5dGVzdCdzIHRlbXBvcmFyeQorICAgICAgICAgICAgZGlyZWN0b3J5IHJvb3QuCisg ICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGYgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZp bGUoc3VmZml4PXN1ZmZpeCwgZGlyPXRtcGRpciwgZGVsZXRlPUZhbHNlKQorICAgICAgICAgICAg d2l0aCBmOgorICAgICAgICAgICAgICAgIGYud3JpdGUoZGF0YSkKKworICAgICAgICAgICAgcmV0 dXJuIGYubmFtZQorCisgICAgcmV0dXJuIF9DZXJ0cygpCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9z c2wvcHl0L3Rlc3RfY2xpZW50LnB5IGIvc3JjL3Rlc3Qvc3NsL3B5dC90ZXN0X2NsaWVudC5weQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMjgxMTBhZTA3MTcKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvdGVzdC9zc2wvcHl0L3Rlc3RfY2xpZW50LnB5CkBAIC0wLDAgKzEs Mjc4IEBACisjIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKworaW1wb3J0IGNvbnRleHRsaWIKK2ltcG9ydCBjdHlwZXMKK2ltcG9ydCBzb2Nr ZXQKK2ltcG9ydCBzc2wKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9ydCB0aHJlYWRpbmcKK2Zyb20gdHlw aW5nIGltcG9ydCBDYWxsYWJsZQorCitpbXBvcnQgcHl0ZXN0CisKK2ltcG9ydCBwZworCisjIFRo aXMgc3VpdGUgb3BlbnMgdXAgbG9jYWwgVENQIHBvcnRzIGFuZCBpcyBoaWRkZW4gYmVoaW5kIFBH X1RFU1RfRVhUUkE9c3NsLgorcHl0ZXN0bWFyayA9IHBnLnJlcXVpcmVfdGVzdF9leHRyYSgic3Ns IikKKworCitAcHl0ZXN0LmZpeHR1cmUoc2NvcGU9InNlc3Npb24iLCBhdXRvdXNlPVRydWUpCitk ZWYgc2tpcF9pZl9ub19zc2xfc3VwcG9ydChsaWJwcV9oYW5kbGUpOgorICAgICIiIlNraXBzIHRl c3RzIGlmIFNTTCBzdXBwb3J0IGlzIG5vdCBjb25maWd1cmVkLiIiIgorCisgICAgIyBEZWNsYXJl IFBRc3NsQXR0cmlidXRlKCkuCisgICAgUFFzc2xBdHRyaWJ1dGUgPSBsaWJwcV9oYW5kbGUuUFFz c2xBdHRyaWJ1dGUKKyAgICBQUXNzbEF0dHJpYnV0ZS5yZXN0eXBlID0gY3R5cGVzLmNfY2hhcl9w CisgICAgUFFzc2xBdHRyaWJ1dGUuYXJndHlwZXMgPSBbY3R5cGVzLmNfdm9pZF9wLCBjdHlwZXMu Y19jaGFyX3BdCisKKyAgICBpZiBub3QgUFFzc2xBdHRyaWJ1dGUoTm9uZSwgYiJsaWJyYXJ5Iik6 CisgICAgICAgIHB5dGVzdC5za2lwKCJyZXF1aXJlcyBTU0wgc3VwcG9ydCB0byBiZSBjb25maWd1 cmVkIikKKworCisjCisjIFRlc3QgRml4dHVyZXMKKyMKKworCitAcHl0ZXN0LmZpeHR1cmUKK2Rl ZiB0Y3Bfc2VydmVyX2NsYXNzKHJlbWFpbmluZ190aW1lb3V0KToKKyAgICAiIiIKKyAgICBNZXRh Zml4dHVyZSB0byBjb21iaW5lIHJlbGF0ZWQgbG9naWMgZm9yIHRjcF9zZXJ2ZXIgYW5kIHNzbF9z ZXJ2ZXIuCisKKyAgICBUT0RPOiBjb21iaW5lIHdpdGggdGVzdF9saWJwcS5sb2NhbF9zZXJ2ZXIK KyAgICAiIiIKKworICAgIGNsYXNzIF9UQ1BTZXJ2ZXIoY29udGV4dGxpYi5FeGl0U3RhY2spOgor ICAgICAgICAiIiIKKyAgICAgICAgSW1wbGVtZW50YXRpb24gY2xhc3MgZm9yIHRjcF9zZXJ2ZXIu IFNlZSAuYmFja2dyb3VuZCgpIGZvciB0aGUgcHJpbWFyeQorICAgICAgICBlbnRyeSBwb2ludCBm b3IgdGVzdHMuIFBvc3RncmVzIGNsaWVudHMgbWF5IGNvbm5lY3QgdG8gdGhpcyBzZXJ2ZXIgdmlh CisgICAgICAgICoqdGNwX3NlcnZlci5jb25uaW5mby4KKworICAgICAgICBfVENQU2VydmVyIGRl cml2ZXMgZnJvbSBjb250ZXh0bGliLkV4aXRTdGFjayB0byBwcm92aWRlIGVhc3kgY2xlYW51cCBv ZgorICAgICAgICBhc3NvY2lhdGVkIHJlc291cmNlczsgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZv ciB0aGF0IGNsYXNzIGZvciBhIGZ1bGwKKyAgICAgICAgZXhwbGFuYXRpb24uCisgICAgICAgICIi IgorCisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgICAgIHN1cGVyKCkuX19p bml0X18oKQorCisgICAgICAgICAgICBzZWxmLl90aHJlYWQgPSBOb25lCisgICAgICAgICAgICBz ZWxmLl90aHJlYWRfZXhjID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fbGlzdGVuZXIgPSBzZWxm LmVudGVyX2NvbnRleHQoCisgICAgICAgICAgICAgICAgc29ja2V0LnNvY2tldChzb2NrZXQuQUZf SU5FVCwgc29ja2V0LlNPQ0tfU1RSRUFNKSwKKyAgICAgICAgICAgICkKKworICAgICAgICAgICAg c2VsZi5fYmluZF9hbmRfbGlzdGVuKCkKKyAgICAgICAgICAgIHNvY2tuYW1lID0gc2VsZi5fbGlz dGVuZXIuZ2V0c29ja25hbWUoKQorICAgICAgICAgICAgc2VsZi5jb25uaW5mbyA9IGRpY3QoCisg ICAgICAgICAgICAgICAgaG9zdGFkZHI9c29ja25hbWVbMF0sCisgICAgICAgICAgICAgICAgcG9y dD1zb2NrbmFtZVsxXSwKKyAgICAgICAgICAgICkKKworICAgICAgICBkZWYgX2JpbmRfYW5kX2xp c3RlbihzZWxmKToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgRG9lcyB0aGUgYWN0dWFs IHdvcmsgb2YgYmluZGluZyB0aGUgc29ja2V0IGFuZCBsaXN0ZW5pbmcgZm9yCisgICAgICAgICAg ICBjb25uZWN0aW9ucy4KKworICAgICAgICAgICAgVGhlIGxpc3RlbiBiYWNrbG9nIGlzIGN1cnJl bnRseSBoYXJkY29kZWQgdG8gb25lLgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBzZWxm Ll9saXN0ZW5lci5iaW5kKCgiMTI3LjAuMC4xIiwgMCkpCisgICAgICAgICAgICBzZWxmLl9saXN0 ZW5lci5saXN0ZW4oMSkKKworICAgICAgICBkZWYgYmFja2dyb3VuZChzZWxmLCBmbjogQ2FsbGFi bGVbW3NvY2tldC5zb2NrZXRdLCBOb25lXSkgLT4gTm9uZToKKyAgICAgICAgICAgICIiIgorICAg ICAgICAgICAgQWNjZXB0cyBhIGNsaWVudCBjb25uZWN0aW9uIG9uIGEgYmFja2dyb3VuZCB0aHJl YWQgYW5kIHBhc3NlcyBpdCB0bworICAgICAgICAgICAgdGhlIHByb3ZpZGVkIGNhbGxiYWNrLiBB bnkgZXhjZXB0aW9ucyByYWlzZWQgZnJvbSB0aGUgY2FsbGJhY2sgd2lsbAorICAgICAgICAgICAg YmUgcmUtcmFpc2VkIG9uIHRoZSBtYWluIHRocmVhZCBkdXJpbmcgZml4dHVyZSB0ZWFyZG93bi4K KworICAgICAgICAgICAgQmxvY2tpbmcgb3BlcmF0aW9ucyBvbiB0aGUgY29ubmVjdGVkIHNvY2tl dCBkZWZhdWx0IHRvIHVzaW5nIHRoZQorICAgICAgICAgICAgcmVtYWluaW5nX3RpbWVvdXQoKSwg dGhvdWdoIHRoaXMgY2FuIGJlIGNoYW5nZWQgYnkgdGhlIHRlc3QgdmlhIHRoZQorICAgICAgICAg ICAgc29ja2V0J3MgLnNldHRpbWVvdXQoKS4KKyAgICAgICAgICAgICIiIgorCisgICAgICAgICAg ICBkZWYgX2JnKCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICBz ZWxmLl9saXN0ZW5lci5zZXR0aW1lb3V0KHJlbWFpbmluZ190aW1lb3V0KCkpCisgICAgICAgICAg ICAgICAgICAgIHNvY2ssIF8gPSBzZWxmLl9saXN0ZW5lci5hY2NlcHQoKQorCisgICAgICAgICAg ICAgICAgICAgIHdpdGggc29jazoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNvY2suc2V0dGlt ZW91dChyZW1haW5pbmdfdGltZW91dCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZm4oc29j aykKKworICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAg ICAgICAgICAgIyBTYXZlIHRoZSBleGNlcHRpb24gZm9yIHJlLXJhaXNpbmcgb24gdGhlIG1haW4g dGhyZWFkLgorICAgICAgICAgICAgICAgICAgICBzZWxmLl90aHJlYWRfZXhjID0gZQorCisgICAg ICAgICAgICAjIFRPRE86IHJhdGhlciB0aGFuIHVzaW5nIGNhbGxiYWNrKCksIGNvbnNpZGVyIGV4 cGxpY2l0bHkgc2lnbmFsaW5nCisgICAgICAgICAgICAjIHRoZSBmbigpIGltcGxlbWVudGF0aW9u IHRvIHN0b3AgZWFybHkgaWYgd2UgZ2V0IGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgICMgT3Ro ZXJ3aXNlIHdlJ2xsIGhhbmcgdW50aWwgdGhlIGVuZCBvZiB0aGUgdGltZW91dC4KKyAgICAgICAg ICAgIHNlbGYuX3RocmVhZCA9IHRocmVhZGluZy5UaHJlYWQodGFyZ2V0PV9iZykKKyAgICAgICAg ICAgIHNlbGYuY2FsbGJhY2soc2VsZi5fam9pbikKKworICAgICAgICAgICAgc2VsZi5fdGhyZWFk LnN0YXJ0KCkKKworICAgICAgICBkZWYgX2pvaW4oc2VsZik6CisgICAgICAgICAgICAiIiIKKyAg ICAgICAgICAgIFdhaXRzIGZvciB0aGUgYmFja2dyb3VuZCB0aHJlYWQgdG8gZmluaXNoIGFuZCBy YWlzZXMgYW55IHRocm93bgorICAgICAgICAgICAgZXhjZXB0aW9uLiBUaGlzIGlzIGNhbGxlZCBk dXJpbmcgZml4dHVyZSB0ZWFyZG93bi4KKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgIyBH aXZlIGEgbGl0dGxlIGJpdCBvZiB3aWdnbGUgcm9vbSBvbiB0aGUgam9pbiB0aW1lb3V0LCBzaW5j ZSB3ZSdyZQorICAgICAgICAgICAgIyByYWNpbmcgYWdhaW5zdCB0aGUgdGVzdCdzIG93biB1c2Ug b2YgcmVtYWluaW5nX3RpbWVvdXQoKS4gKEl0J3MKKyAgICAgICAgICAgICMgcHJlZmVyYWJsZSB0 byBsZXQgdGVzdHMgcmVwb3J0IHRpbWVvdXRzOyB0aGUgc3RhY2sgdHJhY2VzIHdpbGwKKyAgICAg ICAgICAgICMgaGVscCB3aXRoIGRlYnVnZ2luZy4pCisgICAgICAgICAgICBzZWxmLl90aHJlYWQu am9pbihyZW1haW5pbmdfdGltZW91dCgpICsgMSkKKyAgICAgICAgICAgIGlmIHNlbGYuX3RocmVh ZC5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgIHJhaXNlIFRpbWVvdXRFcnJvcigiYmFja2dy b3VuZCB0aHJlYWQgaXMgc3RpbGwgcnVubmluZyBhZnRlciB0aW1lb3V0IikKKworICAgICAgICAg ICAgaWYgc2VsZi5fdGhyZWFkX2V4YyBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICByYWlz ZSBzZWxmLl90aHJlYWRfZXhjCisKKyAgICByZXR1cm4gX1RDUFNlcnZlcgorCisKK0BweXRlc3Qu Zml4dHVyZQorZGVmIHRjcF9zZXJ2ZXIodGNwX3NlcnZlcl9jbGFzcyk6CisgICAgIiIiCisgICAg T3BlbnMgdXAgYSBsb2NhbCBUQ1Agc29ja2V0IGZvciBtb2NraW5nIGEgUG9zdGdyZXMgc2VydmVy IG9uIGEgYmFja2dyb3VuZAorICAgIHRocmVhZC4gU2VlIHRoZSBfVENQU2VydmVyIEFQSSBmb3Ig dXNhZ2UuCisgICAgIiIiCisgICAgd2l0aCB0Y3Bfc2VydmVyX2NsYXNzKCkgYXMgczoKKyAgICAg ICAgeWllbGQgcworCisKK0BweXRlc3QuZml4dHVyZQorZGVmIHNzbF9zZXJ2ZXIodGNwX3NlcnZl cl9jbGFzcywgY2VydHMpOgorICAgICIiIgorICAgIExpa2UgdGNwX3NlcnZlciwgYnV0IHdpdGgg YW4gYWRkaXRpb25hbCAuYmFja2dyb3VuZF9zc2woKSBtZXRob2Qgd2hpY2ggd2lsbAorICAgIHBl cmZvcm0gYSBTU0xSZXF1ZXN0IGhhbmRzaGFrZSBvbiB0aGUgc29ja2V0IGJlZm9yZSBoYW5kaW5n IHRoZSBjb25uZWN0aW9uCisgICAgdG8gdGhlIHRlc3QgY2FsbGJhY2suCisKKyAgICBUaGlzIHNl cnZlciB1c2VzIGNlcnRzLnNlcnZlciBhcyBpdHMgaWRlbnRpdHkuCisgICAgIiIiCisKKyAgICBj bGFzcyBfU1NMU2VydmVyKHRjcF9zZXJ2ZXJfY2xhc3MpOgorICAgICAgICBkZWYgX19pbml0X18o c2VsZik6CisgICAgICAgICAgICBzdXBlcigpLl9faW5pdF9fKCkKKworICAgICAgICAgICAgc2Vs Zi5jb25uaW5mb1siaG9zdCJdID0gY2VydHMuc2VydmVyX2hvc3QKKworICAgICAgICAgICAgc2Vs Zi5fY3R4ID0gc3NsLlNTTENvbnRleHQoc3NsLlBST1RPQ09MX1RMU19TRVJWRVIpCisgICAgICAg ICAgICBzZWxmLl9jdHgubG9hZF9jZXJ0X2NoYWluKGNlcnRzLnNlcnZlci5jZXJ0cGF0aCwgY2Vy dHMuc2VydmVyLmtleXBhdGgpCisKKyAgICAgICAgZGVmIGJhY2tncm91bmRfc3NsKHNlbGYsIGZu OiBDYWxsYWJsZVtbc3NsLlNTTFNvY2tldF0sIE5vbmVdKSAtPiBOb25lOgorICAgICAgICAgICAg IiIiCisgICAgICAgICAgICBJbnZva2VzIGEgc2VydmVyIGNhbGxiYWNrIGFzIHdpdGggLmJhY2tn cm91bmQoKSwgYnV0IGFuIFNTTFJlcXVlc3QKKyAgICAgICAgICAgIGhhbmRzaGFrZSBpcyBwZXJm b3JtZWQgZmlyc3QsIGFuZCB0aGUgc29ja2V0IHByb3ZpZGVkIHRvIHRoZQorICAgICAgICAgICAg Y2FsbGJhY2sgaGFzIGJlZW4gd3JhcHBlZCBpbiBhbiBPcGVuU1NMIGxheWVyLgorICAgICAgICAg ICAgIiIiCisKKyAgICAgICAgICAgIGRlZiBoYW5kc2hha2Uoczogc29ja2V0LnNvY2tldCk6Cisg ICAgICAgICAgICAgICAgcGt0bGVuID0gc3RydWN0LnVucGFjaygiIUkiLCBzLnJlY3YoNCkpWzBd CisKKyAgICAgICAgICAgICAgICAjIE1ha2Ugc3VyZSB3ZSBnZXQgYW4gU1NMUmVxdWVzdC4KKyAg ICAgICAgICAgICAgICB2ZXJzaW9uID0gc3RydWN0LnVucGFjaygiIUhIIiwgcy5yZWN2KDQpKQor ICAgICAgICAgICAgICAgIGFzc2VydCB2ZXJzaW9uID09ICgxMjM0LCA1Njc5KQorICAgICAgICAg ICAgICAgIGFzc2VydCBwa3RsZW4gPT0gOAorCisgICAgICAgICAgICAgICAgIyBBY2NlcHQgdGhl IFNTTFJlcXVlc3QuCisgICAgICAgICAgICAgICAgcy5zZW5kKGIiUyIpCisKKyAgICAgICAgICAg ICAgICB3aXRoIHNlbGYuX2N0eC53cmFwX3NvY2tldChzLCBzZXJ2ZXJfc2lkZT1UcnVlKSBhcyB3 cmFwcGVkOgorICAgICAgICAgICAgICAgICAgICBmbih3cmFwcGVkKQorCisgICAgICAgICAgICBz ZWxmLmJhY2tncm91bmQoaGFuZHNoYWtlKQorCisgICAgd2l0aCBfU1NMU2VydmVyKCkgYXMgczoK KyAgICAgICAgeWllbGQgcworCisKKyMKKyMgVGVzdHMKKyMKKworCitAcHl0ZXN0Lm1hcmsucGFy YW1ldHJpemUoInNzbG1vZGUiLCAoInJlcXVpcmUiLCAidmVyaWZ5LWNhIiwgInZlcmlmeS1mdWxs IikpCitkZWYgdGVzdF9zZXJ2ZXJfd2l0aF9zc2xfZGlzYWJsZWQobGlicHEsIHRjcF9zZXJ2ZXIs IGNlcnRzLCBzc2xtb2RlKToKKyAgICAiIiIKKyAgICBNYWtlIHN1cmUgY2xpZW50IHJlZnVzZXMg dG8gdGFsayB0byBub24tU1NMIHNlcnZlcnMgd2l0aCBzdHJpY3RlcgorICAgIHNzbG1vZGVzLgor ICAgICIiIgorCisgICAgZGVmIHJlZnVzZV9zc2woczogc29ja2V0LnNvY2tldCk6CisgICAgICAg IHBrdGxlbiA9IHN0cnVjdC51bnBhY2soIiFJIiwgcy5yZWN2KDQpKVswXQorCisgICAgICAgICMg TWFrZSBzdXJlIHdlIGdldCBhbiBTU0xSZXF1ZXN0LgorICAgICAgICB2ZXJzaW9uID0gc3RydWN0 LnVucGFjaygiIUhIIiwgcy5yZWN2KDQpKQorICAgICAgICBhc3NlcnQgdmVyc2lvbiA9PSAoMTIz NCwgNTY3OSkKKyAgICAgICAgYXNzZXJ0IHBrdGxlbiA9PSA4CisKKyAgICAgICAgIyBSZWZ1c2Ug dGhlIFNTTFJlcXVlc3QuCisgICAgICAgIHMuc2VuZChiIk4iKQorCisgICAgICAgICMgV2FpdCBm b3IgdGhlIGNsaWVudCB0byBjbG9zZSB0aGUgY29ubmVjdGlvbi4KKyAgICAgICAgYXNzZXJ0IG5v dCBzLnJlY3YoMSksICJjbGllbnQgc2VudCB1bmV4cGVjdGVkIGRhdGEiCisKKyAgICB0Y3Bfc2Vy dmVyLmJhY2tncm91bmQocmVmdXNlX3NzbCkKKworICAgIHdpdGggcHl0ZXN0LnJhaXNlcyhsaWJw cS5FcnJvciwgbWF0Y2g9InNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IFNTTCIpOgorICAgICAgICB3 aXRoIGxpYnBxOiAgIyBYWFggdGVzdHMgc2hvdWxkbid0IG5lZWQgdG8gZG8gdGhpcworICAgICAg ICAgICAgbGlicHEubXVzdF9jb25uZWN0KAorICAgICAgICAgICAgICAgICoqdGNwX3NlcnZlci5j b25uaW5mbywKKyAgICAgICAgICAgICAgICBzc2xyb290Y2VydD1jZXJ0cy5jYS5jZXJ0cGF0aCwK KyAgICAgICAgICAgICAgICBzc2xtb2RlPXNzbG1vZGUsCisgICAgICAgICAgICApCisKKworZGVm IHRlc3RfdmVyaWZ5X2Z1bGxfY29ubmVjdGlvbihsaWJwcSwgc3NsX3NlcnZlciwgY2VydHMpOgor ICAgICIiIkNvbXBsZXRlcyBhIHZlcmlmeS1mdWxsIGNvbm5lY3Rpb24gYW5kIGVtcHR5IHF1ZXJ5 LiIiIgorCisgICAgZGVmIGhhbmRsZV9lbXB0eV9xdWVyeShzOiBzc2wuU1NMU29ja2V0KToKKyAg ICAgICAgcGt0bGVuID0gc3RydWN0LnVucGFjaygiIUkiLCBzLnJlY3YoNCkpWzBdCisKKyAgICAg ICAgIyBDaGVjayB0aGUgc3RhcnR1cCBwYWNrZXQgdmVyc2lvbiwgdGhlbiBkaXNjYXJkIHRoZSBy ZW1haW5kZXIuCisgICAgICAgIHZlcnNpb24gPSBzdHJ1Y3QudW5wYWNrKCIhSEgiLCBzLnJlY3Yo NCkpCisgICAgICAgIGFzc2VydCB2ZXJzaW9uID09ICgzLCAwKQorICAgICAgICBzLnJlY3YocGt0 bGVuIC0gOCkKKworICAgICAgICAjIFNlbmQgdGhlIHJlcXVpcmVkIGxpdGFueSBvZiBzZXJ2ZXIg bWVzc2FnZXMuCisgICAgICAgIHMuc2VuZChzdHJ1Y3QucGFjaygiIWNJSSIsIGIiUiIsIDgsIDAp KSAgIyBBdXRoZW50aWNhdGlvbk9LCisKKyAgICAgICAgIyBQYXJhbWV0ZXJTdGF0dXM6IGNsaWVu dF9lbmNvZGluZworICAgICAgICBrZXkgPSBiImNsaWVudF9lbmNvZGluZ1wwIgorICAgICAgICB2 YWwgPSBiIlVURi04XDAiCisgICAgICAgIHMuc2VuZChzdHJ1Y3QucGFjaygiIWNJIiwgYiJTIiwg NCArIGxlbihrZXkpICsgbGVuKHZhbCkpICsga2V5ICsgdmFsKQorCisgICAgICAgICMgUGFyYW1l dGVyU3RhdHVzOiBEYXRlU3R5bGUKKyAgICAgICAga2V5ID0gYiJEYXRlU3R5bGVcMCIKKyAgICAg ICAgdmFsID0gYiJJU08sIE1EWVwwIgorICAgICAgICBzLnNlbmQoc3RydWN0LnBhY2soIiFjSSIs IGIiUyIsIDQgKyBsZW4oa2V5KSArIGxlbih2YWwpKSArIGtleSArIHZhbCkKKworICAgICAgICBz LnNlbmQoc3RydWN0LnBhY2soIiFjSUlJIiwgYiJLIiwgMTIsIDEyMzQsIDEyMzQpKSAgIyBCYWNr ZW5kS2V5RGF0YQorICAgICAgICBzLnNlbmQoc3RydWN0LnBhY2soIiFjSWMiLCBiIloiLCA1LCBi IkkiKSkgICMgUmVhZHlGb3JRdWVyeQorCisgICAgICAgICMgRXhwZWN0IGFuIGVtcHR5IHF1ZXJ5 LgorICAgICAgICBwa3R0eXBlID0gcy5yZWN2KDEpCisgICAgICAgIGFzc2VydCBwa3R0eXBlID09 IGIiUSIKKyAgICAgICAgcGt0bGVuID0gc3RydWN0LnVucGFjaygiIUkiLCBzLnJlY3YoNCkpWzBd CisgICAgICAgIGFzc2VydCBzLnJlY3YocGt0bGVuIC0gNCkgPT0gYiJcMCIKKworICAgICAgICAj IFNlbmQgYW4gRW1wdHlRdWVyeVJlc3BvbnNlK1JlYWR5Rm9yUXVlcnkuCisgICAgICAgIHMuc2Vu ZChzdHJ1Y3QucGFjaygiIWNJIiwgYiJJIiwgNCkpCisgICAgICAgIHMuc2VuZChzdHJ1Y3QucGFj aygiIWNJYyIsIGIiWiIsIDUsIGIiSSIpKQorCisgICAgICAgICMgbGlicHEgc2hvdWxkIHRlcm1p bmF0ZSBhbmQgY2xvc2UgdGhlIGNvbm5lY3Rpb24uCisgICAgICAgIGFzc2VydCBzLnJlY3YoMSkg PT0gYiJYIgorICAgICAgICBwa3RsZW4gPSBzdHJ1Y3QudW5wYWNrKCIhSSIsIHMucmVjdig0KSlb MF0KKyAgICAgICAgYXNzZXJ0IHBrdGxlbiA9PSA0CisKKyAgICAgICAgYXNzZXJ0IG5vdCBzLnJl Y3YoMSksICJjbGllbnQgc2VudCB1bmV4cGVjdGVkIGRhdGEiCisKKyAgICBzc2xfc2VydmVyLmJh Y2tncm91bmRfc3NsKGhhbmRsZV9lbXB0eV9xdWVyeSkKKworICAgIGNvbm4gPSBsaWJwcS5tdXN0 X2Nvbm5lY3QoCisgICAgICAgICoqc3NsX3NlcnZlci5jb25uaW5mbywKKyAgICAgICAgc3Nscm9v dGNlcnQ9Y2VydHMuY2EuY2VydHBhdGgsCisgICAgICAgIHNzbG1vZGU9InZlcmlmeS1mdWxsIiwK KyAgICApCisgICAgd2l0aCBjb25uOgorICAgICAgICBhc3NlcnQgY29ubi5leGVjKCIiKS5zdGF0 dXMoKSA9PSBsaWJwcS5QR1JFU19FTVBUWV9RVUVSWQotLSAKMi4zNC4xCgo= --000000000000b0ce9f063e654bfa Content-Type: application/octet-stream; name="v1-0004-WIP-pytest-Add-some-server-side-SSL-tests.patch" Content-Disposition: attachment; filename="v1-0004-WIP-pytest-Add-some-server-side-SSL-tests.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mfd2s6kt3 RnJvbSAxMTBlZTUyN2FlMmI2Y2FjNGZjODE1ZWIxODM5MDY4YzMzZGVkZWI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogRnJpLCAyMiBBdWcgMjAyNSAxNzozOTo0MCAtMDcwMApTdWJqZWN0 OiBbUEFUQ0ggdjEgNC82XSBXSVA6IHB5dGVzdDogQWRkIHNvbWUgc2VydmVyLXNpZGUgU1NMIHRl c3RzCgpJbiB0aGUgc2FtZSB2ZWluIGFzIHRoZSBwcmV2aW91cyBjb21taXQsIHRoaXMgaXMgYSBz ZXJ2ZXItb25seSB0ZXN0CnN1aXRlIG9wZXJhdGluZyBhZ2FpbnN0IGEgbW9jayBjbGllbnQuIFRo ZSB0ZXN0IGl0c2VsZiBpcyBhIGhlYXZpbHkKcGFyYW1ldGVyaXplZCBjaGVjayBmb3IgZGlyZWN0 LVNTTCBoYW5kc2hha2UgYmVoYXZpb3IsIHVzaW5nIGEKY29tYmluYXRpb24gb2YgInN0YW5kYXJk IiBhbmQgImN1c3RvbSIgY2VydGlmaWNhdGVzIHZpYSB0aGUgY2VydHMKZml4dHVyZS4KCmluc3Rh bGxjaGVjayBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQsIGJ1dCB0aGUgYXJjaGl0ZWN0dXJlIGhh cyBzb21lCmV4dGVuc2lvbiBwb2ludHMgdGhhdCBzaG91bGQgbWFrZSBpdCBwb3NzaWJsZSBsYXRl ci4gRm9yIG5vdywgYSBuZXcKc2VydmVyIGlzIGFsd2F5cyBzdGFydGVkIGZvciB0aGUgdGVzdCBz ZXNzaW9uLgoKTmV3IHNlc3Npb24tbGV2ZWwgZml4dHVyZXMgaGF2ZSBiZWVuIGFkZGVkIHdoaWNo IHByb2JhYmx5IG5lZWQgdG8KbWlncmF0ZSB0byB0aGUgYHBnYCBwYWNrYWdlLiBPZiBub3RlOgoK LSBkYXRhZGlyIHBvaW50cyB0byB0aGUgc2VydmVyJ3MgZGF0YSBkaXJlY3RvcnkKLSBzb2NrZGly IHBvaW50cyB0byB0aGUgc2VydmVyJ3MgVU5JWCBzb2NrZXQvbG9jayBkaXJlY3RvcnkKLSBzZXJ2 ZXJfaW5zdGFuY2UgYWN0dWFsbHkgaW5pdHMgYW5kIHN0YXJ0cyBhIHNlcnZlciB2aWEgdGhlIHBn X2N0bCBvbgogIFBBVEggKGFuZCBjb3VsZCBldmVudHVhbGx5IHBvaW50IGF0IGFuIGluc3RhbGxj aGVjayB0YXJnZXQpCgpXcmFwcGluZyB0aGVzZSBzZXNzaW9uLWxldmVsIGZpeHR1cmVzIGlzIHBn X3NlcnZlcltfc2Vzc2lvbl0sIHdoaWNoCnByb3ZpZGVzIEFQSXMgZm9yIGNvbmZpZ3VyYXRpb24g Y2hhbmdlcyB0aGF0IHVud2luZCB0aGVtc2VsdmVzIGF0IHRoZQplbmQgb2YgZml4dHVyZSBzY29w ZXMuIFRoZXJlJ3MgYWxzbyBhbiBleGFtcGxlIG9mIG5lc3RlZCBzY29wZXMsIHZpYQpwZ19zZXJ2 ZXJfc2Vzc2lvbi5zdWJjb250ZXh0KCkuIE1hbnkgVE9ET3MgcmVtYWluIGJlZm9yZSB3ZSdyZSBv biBwYXIKd2l0aCBUZXN0OjpDbHVzdGVyLCBidXQgdGhpcyBzaG91bGQgaWxsdXN0cmF0ZSBteSBk ZXNpcmVkIGFyY2hpdGVjdHVyZQpwcmV0dHkgd2VsbC4KCldpbmRvd3MgY3VycmVudGx5IHVzZXMg U0NSQU0tb3Zlci1VTklYIGZvciB0aGUgYWRtaW4gYWNjb3VudCByYXRoZXIgdGhhbgpTU1BJLW92 ZXItVENQLiBUaGVyZSdzIHNvbWUgZGVhZCBXaW4zMiBjb2RlIGluIHBnLmN1cnJlbnRfd2luZG93 c191c2VyLApidXQgSSd2ZSBrZXB0IGl0IGFzIGFuIGlsbHVzdHJhdGlvbiBvZiBob3cgYSBkZXZl bG9wZXIgbWlnaHQgd3JpdGUgc3VjaApjb2RlIGZvciBTU1BJLiBJJ2xsIHByb2JhYmx5IHJlbW92 ZSBpdCBpbiBhIGZ1dHVyZSBwYXRjaCB2ZXJzaW9uLgoKVE9ET3M6Ci0gcG9ydCBtb3JlIHNlcnZl ciBjb25maWd1cmF0aW9uIGJlaGF2aW9yIGZyb20gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlcgot IGRlY2lkZSBhZ2FpbiBvbiAic2Vzc2lvbiIgdnMuICJtb2R1bGUiIHNjb3BlIGZvciBzZXJ2ZXIg Zml4dHVyZXMKLSBpbXByb3ZlIHJlbWFpbmluZ190aW1lb3V0KCkgaW50ZWdyYXRpb24gd2l0aCBz b2NrZXQgb3BlcmF0aW9uczsgYXQgdGhlCiAgbW9tZW50LCB0aGUgdGltZW91dCByZXNldHMgb24g ZXZlcnkgY2FsbCByYXRoZXIgdGhhbiBkZWNyZW1lbnRpbmcKLS0tCiBzcmMvdGVzdC9weXRlc3Qv cGcvX19pbml0X18ucHkgIHwgICAxICsKIHNyYy90ZXN0L3B5dGVzdC9wZy9fd2luMzIucHkgICAg fCAxNDUgKysrKysrKysrCiBzcmMvdGVzdC9zc2wvcHl0L2NvbmZ0ZXN0LnB5ICAgIHwgMTEzICsr KysrKysKIHNyYy90ZXN0L3NzbC9weXQvdGVzdF9zZXJ2ZXIucHkgfCA1MzggKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdlZCwgNzk3IGluc2VydGlvbnMoKykK IGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9weXRlc3QvcGcvX3dpbjMyLnB5CiBjcmVhdGUg bW9kZSAxMDA2NDQgc3JjL3Rlc3Qvc3NsL3B5dC90ZXN0X3NlcnZlci5weQoKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3B5dGVzdC9wZy9fX2luaXRfXy5weSBiL3NyYy90ZXN0L3B5dGVzdC9wZy9fX2lu aXRfXy5weQppbmRleCBlZjhmYWY1NGNhNC4uNWRhZTQ5YjY0MDYgMTAwNjQ0Ci0tLSBhL3NyYy90 ZXN0L3B5dGVzdC9wZy9fX2luaXRfXy5weQorKysgYi9zcmMvdGVzdC9weXRlc3QvcGcvX19pbml0 X18ucHkKQEAgLTEsMyArMSw0IEBACiAjIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKIAogZnJvbSAuX2VudiBpbXBvcnQgaGFzX3Rlc3RfZXh0 cmEsIHJlcXVpcmVfdGVzdF9leHRyYQorZnJvbSAuX3dpbjMyIGltcG9ydCBjdXJyZW50X3dpbmRv d3NfdXNlcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcHl0ZXN0L3BnL193aW4zMi5weSBiL3NyYy90 ZXN0L3B5dGVzdC9wZy9fd2luMzIucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLjNmZDY3YjEwMTkxCi0tLSAvZGV2L251bGwKKysrIGIvc3JjL3Rlc3QvcHl0ZXN0L3Bn L193aW4zMi5weQpAQCAtMCwwICsxLDE0NSBAQAorIyBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3Rn cmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisKK2ltcG9ydCBjdHlwZXMKK2ltcG9ydCBw bGF0Zm9ybQorCisKK2RlZiBjdXJyZW50X3dpbmRvd3NfdXNlcigpOgorICAgICIiIgorICAgIEEg cG9ydCBvZiBwZ19yZWdyZXNzLmMncyBjdXJyZW50X3dpbmRvd3NfdXNlcigpIGhlbHBlci4gUmV0 dXJucworICAgIChhY2NvdW50bmFtZSwgZG9tYWlubmFtZSkuCisKKyAgICBYWFggVGhpcyBpcyBk ZWFkIGNvZGUgbm93LCBidXQgSSdtIGtlZXBpbmcgaXQgYXMgYSBtb3RpdmF0aW5nIGV4YW1wbGUg b2YKKyAgICBXaW4zMiBpbnRlcmFjdGlvbiwgYW5kIHNvbWVvbmUgbWF5IGZpbmQgaXQgdXNlZnVs IGluIHRoZSBmdXR1cmUgd2hlbiB3cml0aW5nCisgICAgU1NQSSB0ZXN0cz8KKyAgICAiIiIKKyAg ICB0cnk6CisgICAgICAgIGFkdmFwaTMyID0gY3R5cGVzLndpbmRsbC5hZHZhcGkzMgorICAgICAg ICBrZXJuZWwzMiA9IGN0eXBlcy53aW5kbGwua2VybmVsMzIKKyAgICBleGNlcHQgQXR0cmlidXRl RXJyb3I6CisgICAgICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgICAgIGYiY3VycmVu dF93aW5kb3dzX3VzZXIoKSBpcyBub3Qgc3VwcG9ydGVkIG9uIHtwbGF0Zm9ybS5zeXN0ZW0oKX0i CisgICAgICAgICkKKworICAgIGRlZiByYWlzZV93aW5lcnJvcl93aGVuX2ZhbHNlKHJlc3VsdCwg ZnVuYywgYXJndW1lbnRzKToKKyAgICAgICAgIiIiCisgICAgICAgIEEgY3R5cGVzIGVycmNoZWNr IGhhbmRsZXIgdGhhdCByYWlzZXMgV2luRXJyb3IgKHdoaWNoIHdpbGwgY29udGFpbiB0aGUKKyAg ICAgICAgcmVzdWx0IG9mIEdldExhc3RFcnJvcigpKSB3aGVuIHRoZSBmdW5jdGlvbidzIHJldHVy biB2YWx1ZSBpcyBmYWxzZS4KKyAgICAgICAgIiIiCisgICAgICAgIGlmIG5vdCByZXN1bHQ6Cisg ICAgICAgICAgICByYWlzZSBjdHlwZXMuV2luRXJyb3IoKQorCisgICAgIworICAgICMgRnVuY3Rp b24gUHJvdG90eXBlcworICAgICMKKworICAgIGZyb20gY3R5cGVzIGltcG9ydCB3aW50eXBlcwor CisgICAgIyBHZXRDdXJyZW50UHJvY2VzcworICAgIGtlcm5lbDMyLkdldEN1cnJlbnRQcm9jZXNz LnJlc3R5cGUgPSB3aW50eXBlcy5IQU5ETEUKKyAgICBrZXJuZWwzMi5HZXRDdXJyZW50UHJvY2Vz cy5hcmd0eXBlcyA9IFtdCisKKyAgICAjIE9wZW5Qcm9jZXNzVG9rZW4KKyAgICBUT0tFTl9SRUFE ID0gMHgwMDAyMDAwOAorCisgICAgYWR2YXBpMzIuT3BlblByb2Nlc3NUb2tlbi5yZXN0eXBlID0g d2ludHlwZXMuQk9PTAorICAgIGFkdmFwaTMyLk9wZW5Qcm9jZXNzVG9rZW4uYXJndHlwZXMgPSBb CisgICAgICAgIHdpbnR5cGVzLkhBTkRMRSwKKyAgICAgICAgd2ludHlwZXMuRFdPUkQsCisgICAg ICAgIHdpbnR5cGVzLlBIQU5ETEUsCisgICAgXQorICAgIGFkdmFwaTMyLk9wZW5Qcm9jZXNzVG9r ZW4uZXJyY2hlY2sgPSByYWlzZV93aW5lcnJvcl93aGVuX2ZhbHNlCisKKyAgICAjIEdldFRva2Vu SW5mb3JtYXRpb24KKyAgICBQU0lEID0gd2ludHlwZXMuTFBWT0lEICAjIHdlIGRvbid0IG5lZWQg dGhlIGludGVybmFscworICAgIFRPS0VOX0lORk9STUFUSU9OX0NMQVNTID0gd2ludHlwZXMuSU5U CisgICAgVG9rZW5Vc2VyID0gMQorCisgICAgY2xhc3MgU0lEX0FORF9BVFRSSUJVVEVTKGN0eXBl cy5TdHJ1Y3R1cmUpOgorICAgICAgICBfZmllbGRzXyA9IFsKKyAgICAgICAgICAgICgiU2lkIiwg UFNJRCksCisgICAgICAgICAgICAoIkF0dHJpYnV0ZXMiLCB3aW50eXBlcy5EV09SRCksCisgICAg ICAgIF0KKworICAgIGNsYXNzIFRPS0VOX1VTRVIoY3R5cGVzLlN0cnVjdHVyZSk6CisgICAgICAg IF9maWVsZHNfID0gWworICAgICAgICAgICAgKCJVc2VyIiwgU0lEX0FORF9BVFRSSUJVVEVTKSwK KyAgICAgICAgXQorCisgICAgYWR2YXBpMzIuR2V0VG9rZW5JbmZvcm1hdGlvbi5yZXN0eXBlID0g d2ludHlwZXMuQk9PTAorICAgIGFkdmFwaTMyLkdldFRva2VuSW5mb3JtYXRpb24uYXJndHlwZXMg PSBbCisgICAgICAgIHdpbnR5cGVzLkhBTkRMRSwKKyAgICAgICAgVE9LRU5fSU5GT1JNQVRJT05f Q0xBU1MsCisgICAgICAgIHdpbnR5cGVzLkxQVk9JRCwKKyAgICAgICAgd2ludHlwZXMuRFdPUkQs CisgICAgICAgIHdpbnR5cGVzLlBEV09SRCwKKyAgICBdCisgICAgYWR2YXBpMzIuR2V0VG9rZW5J bmZvcm1hdGlvbi5lcnJjaGVjayA9IHJhaXNlX3dpbmVycm9yX3doZW5fZmFsc2UKKworICAgICMg TG9va3VwQWNjb3VudFNpZAorICAgIFNJRF9OQU1FX1VTRSA9IHdpbnR5cGVzLklOVAorICAgIFBT SURfTkFNRV9VU0UgPSBjdHlwZXMuUE9JTlRFUihTSURfTkFNRV9VU0UpCisKKyAgICBhZHZhcGkz Mi5Mb29rdXBBY2NvdW50U2lkVy5yZXN0eXBlID0gd2ludHlwZXMuQk9PTAorICAgIGFkdmFwaTMy Lkxvb2t1cEFjY291bnRTaWRXLmFyZ3R5cGVzID0gWworICAgICAgICB3aW50eXBlcy5MUENXU1RS LAorICAgICAgICBQU0lELAorICAgICAgICB3aW50eXBlcy5MUFdTVFIsCisgICAgICAgIHdpbnR5 cGVzLkxQRFdPUkQsCisgICAgICAgIHdpbnR5cGVzLkxQV1NUUiwKKyAgICAgICAgd2ludHlwZXMu TFBEV09SRCwKKyAgICAgICAgUFNJRF9OQU1FX1VTRSwKKyAgICBdCisgICAgYWR2YXBpMzIuTG9v a3VwQWNjb3VudFNpZFcuZXJyY2hlY2sgPSByYWlzZV93aW5lcnJvcl93aGVuX2ZhbHNlCisKKyAg ICAjCisgICAgIyBJbXBsZW1lbnRhdGlvbiAoc2VlIHBnX1NTUElfcmVjdl9hdXRoKCkpCisgICAg IworCisgICAgIyBHZXQgdGhlIGN1cnJlbnQgcHJvY2VzcyB0b2tlbi4uLgorICAgIHRva2VuID0g d2ludHlwZXMuSEFORExFKCkKKyAgICBwcm9jID0ga2VybmVsMzIuR2V0Q3VycmVudFByb2Nlc3Mo KQorICAgIGFkdmFwaTMyLk9wZW5Qcm9jZXNzVG9rZW4ocHJvYywgVE9LRU5fUkVBRCwgdG9rZW4p CisKKyAgICAjIC4uLnRoZW4gcmVhZCB0aGUgVE9LRU5fVVNFUiBzdHJ1Y3QgZm9yIHRoYXQgdG9r ZW4uLi4KKyAgICBpbmZvID0gVE9LRU5fVVNFUigpCisgICAgaW5mb2xlbiA9IHdpbnR5cGVzLkRX T1JEKCkKKworICAgIHRyeToKKyAgICAgICAgIyAoR2V0VG9rZW5JbmZvcm1hdGlvbiBjcmVhdGVz IGEgYnVmZmVyIGJpZ2dlciB0aGFuIFRPS0VOX1VTRVIsIHNvIHdlCisgICAgICAgICMgaGF2ZSB0 byBxdWVyeSB0aGUgY29ycmVjdCBsZW5ndGggZmlyc3QuKQorICAgICAgICBhZHZhcGkzMi5HZXRU b2tlbkluZm9ybWF0aW9uKHRva2VuLCBUb2tlblVzZXIsIE5vbmUsIDAsIGN0eXBlcy5ieXJlZihp bmZvbGVuKSkKKyAgICAgICAgYXNzZXJ0IEZhbHNlLCAiR2V0VG9rZW5JbmZvcm1hdGlvbiBzdWNj ZWVkZWQgdW5leHBlY3RlZGx5IgorCisgICAgZXhjZXB0IE9TRXJyb3IgYXMgZXJyOgorICAgICAg ICBhc3NlcnQgZXJyLndpbmVycm9yID09IDEyMiAgIyBpbnN1ZmZpY2llbnQgYnVmZmVyCisKKyAg ICAgICAgY3R5cGVzLnJlc2l6ZShpbmZvLCBpbmZvbGVuLnZhbHVlKQorICAgICAgICBhZHZhcGkz Mi5HZXRUb2tlbkluZm9ybWF0aW9uKAorICAgICAgICAgICAgdG9rZW4sCisgICAgICAgICAgICBU b2tlblVzZXIsCisgICAgICAgICAgICBjdHlwZXMuYnlyZWYoaW5mbyksCisgICAgICAgICAgICBj dHlwZXMuc2l6ZW9mKGluZm8pLAorICAgICAgICAgICAgY3R5cGVzLmJ5cmVmKGluZm9sZW4pLAor ICAgICAgICApCisKKyAgICAjIC4uLnRoZW4gcHVsbCB0aGUgYWNjb3VudCBhbmQgZG9tYWluIG5h bWVzIG91dCBvZiB0aGUgdXNlciBTSUQuCisgICAgTUFYUEdQQVRIID0gMTAyNAorCisgICAgYWNj b3VudCA9IGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIoTUFYUEdQQVRIKQorICAgIGRvbWFp biA9IGN0eXBlcy5jcmVhdGVfdW5pY29kZV9idWZmZXIoTUFYUEdQQVRIKQorICAgIGFjY291bnRs ZW4gPSB3aW50eXBlcy5EV09SRChjdHlwZXMuc2l6ZW9mKGFjY291bnQpKQorICAgIGRvbWFpbmxl biA9IHdpbnR5cGVzLkRXT1JEKGN0eXBlcy5zaXplb2YoZG9tYWluKSkKKyAgICB1c2UgPSBTSURf TkFNRV9VU0UoKQorCisgICAgYWR2YXBpMzIuTG9va3VwQWNjb3VudFNpZFcoCisgICAgICAgIE5v bmUsCisgICAgICAgIGluZm8uVXNlci5TaWQsCisgICAgICAgIGFjY291bnQsCisgICAgICAgIGN0 eXBlcy5ieXJlZihhY2NvdW50bGVuKSwKKyAgICAgICAgZG9tYWluLAorICAgICAgICBjdHlwZXMu YnlyZWYoZG9tYWlubGVuKSwKKyAgICAgICAgY3R5cGVzLmJ5cmVmKHVzZSksCisgICAgKQorCisg ICAgcmV0dXJuIChhY2NvdW50LnZhbHVlLCBkb21haW4udmFsdWUpCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9zc2wvcHl0L2NvbmZ0ZXN0LnB5IGIvc3JjL3Rlc3Qvc3NsL3B5dC9jb25mdGVzdC5weQpp bmRleCBmYjRkYjM3MmYwMy4uODVkMmM5OTQ4MjggMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3NzbC9w eXQvY29uZnRlc3QucHkKKysrIGIvc3JjL3Rlc3Qvc3NsL3B5dC9jb25mdGVzdC5weQpAQCAtMSw2 ICsxLDEyIEBACiAjIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxv cG1lbnQgR3JvdXAKIAogaW1wb3J0IGRhdGV0aW1lCitpbXBvcnQgb3MKK2ltcG9ydCBwYXRobGli CitpbXBvcnQgcGxhdGZvcm0KK2ltcG9ydCBzZWNyZXRzCitpbXBvcnQgc29ja2V0CitpbXBvcnQg c3VicHJvY2VzcwogaW1wb3J0IHRlbXBmaWxlCiBmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBuYW1l ZHR1cGxlCiAKQEAgLTEyNywzICsxMzMsMTEwIEBAIGRlZiBjZXJ0cyhjcnlwdG9ncmFwaHksIHRt cF9wYXRoX2ZhY3RvcnkpOgogICAgICAgICAgICAgcmV0dXJuIGYubmFtZQogCiAgICAgcmV0dXJu IF9DZXJ0cygpCisKKworQHB5dGVzdC5maXh0dXJlKHNjb3BlPSJzZXNzaW9uIikKK2RlZiBkYXRh ZGlyKHRtcF9wYXRoX2ZhY3RvcnkpOgorICAgICIiIgorICAgIFJldHVybnMgdGhlIGRpcmVjdG9y eSBuYW1lIHRvIHVzZSBhcyB0aGUgc2VydmVyIGRhdGEgZGlyZWN0b3J5LiBJZgorICAgIFRFU1RE QVRBRElSIGlzIHByb3ZpZGVkLCB0aGF0IHdpbGwgYmUgdXNlZDsgb3RoZXJ3aXNlIGEgbmV3IHRl bXBvcmFyeQorICAgIGRpcmVjdG9yeSBpcyBjcmVhdGVkIGluIHRoZSBweXRlc3QgdGVtcCByb290 LgorICAgICIiIgorICAgIGQgPSBvcy5nZXRlbnYoIlRFU1REQVRBRElSIikKKyAgICBpZiBkOgor ICAgICAgICBkID0gcGF0aGxpYi5QYXRoKGQpCisgICAgZWxzZToKKyAgICAgICAgZCA9IHRtcF9w YXRoX2ZhY3RvcnkubWt0ZW1wKCJ0bXBfY2hlY2siKQorCisgICAgcmV0dXJuIGQKKworCitAcHl0 ZXN0LmZpeHR1cmUoc2NvcGU9InNlc3Npb24iKQorZGVmIHNvY2tkaXIodG1wX3BhdGhfZmFjdG9y eSk6CisgICAgIiIiCisgICAgUmV0dXJucyB0aGUgZGlyZWN0b3J5IG5hbWUgdG8gdXNlIGFzIHRo ZSBzZXJ2ZXIncyB1bml4X3NvY2tldF9kaXJlY3RvcmllcworICAgIHNldHRpbmcuIExvY2FsIGNs aWVudCBjb25uZWN0aW9ucyB1c2UgdGhpcyBhcyB0aGUgUEdIT1NULgorCisgICAgQXQgdGhlIG1v bWVudCwgdGhpcyBpcyBhbHdheXMgcHV0IHVuZGVyIHRoZSBweXRlc3QgdGVtcCByb290LgorICAg ICIiIgorICAgIHJldHVybiB0bXBfcGF0aF9mYWN0b3J5Lm1rdGVtcCgic29ja2ZpbGVzIikKKwor CitAcHl0ZXN0LmZpeHR1cmUoc2NvcGU9InNlc3Npb24iKQorZGVmIHdpbnBhc3N3b3JkKCk6Cisg ICAgIiIiVGhlIHBlci1zZXNzaW9uIFNDUkFNIHBhc3N3b3JkIGZvciB0aGUgc2VydmVyIGFkbWlu IG9uIFdpbmRvd3MuIiIiCisgICAgcmV0dXJuIHNlY3JldHMudG9rZW5fdXJsc2FmZSgxNikKKwor CitAcHl0ZXN0LmZpeHR1cmUoc2NvcGU9InNlc3Npb24iKQorZGVmIHNlcnZlcl9pbnN0YW5jZShj ZXJ0cywgZGF0YWRpciwgc29ja2Rpciwgd2lucGFzc3dvcmQpOgorICAgICIiIgorICAgIFN0YXJ0 cyBhIHJ1bm5pbmcgUG9zdGdyZXMgc2VydmVyIGxpc3RlbmluZyBvbiBsb2NhbGhvc3QuIFRoZSBI QkEgaW5pdGlhbGx5CisgICAgYWxsb3dzIG9ubHkgbG9jYWwgVU5JWCBjb25uZWN0aW9ucyBmcm9t IHRoZSBzYW1lIHVzZXIuCisKKyAgICBUT0RPOiB3aGVuIGluc3RhbGxjaGVjayBpcyBzdXBwb3J0 ZWQsIHRoaXMgc2hvdWxkIG9wdGlvbmFsbHkgcG9pbnQgdG8gdGhlCisgICAgY3VycmVudGx5IHJ1 bm5pbmcgc2VydmVyIGluc3RlYWQuCisgICAgIiIiCisKKyAgICAjIExvY2sgZG93biB0aGUgSEJB IGJ5IGRlZmF1bHQ7IHRlc3RzIGNhbiBvcGVuIGl0IGJhY2sgdXAgbGF0ZXIuCisgICAgaWYgcGxh dGZvcm0uc3lzdGVtKCkgPT0gIldpbmRvd3MiOgorICAgICAgICAjIE9uIFdpbmRvd3MsIGZvciBh ZG1pbiBjb25uZWN0aW9ucywgdXNlIFNDUkFNIHdpdGggYSBnZW5lcmF0ZWQgcGFzc3dvcmQKKyAg ICAgICAgIyBvdmVyIGxvY2FsIHNvY2tldHMuIFRoaXMgcmVxdWlyZXMgYWRkaXRpb25hbCB3b3Jr IGR1cmluZyBpbml0ZGIuCisgICAgICAgIG1ldGhvZCA9ICJzY3JhbS1zaGEtMjU2IgorCisgICAg ICAgICMgTmFtZWRUZW1wb3JhcnlGaWxlIGRvZXNuJ3Qgd29yayB2ZXJ5IG5pY2VseSBvbiBXaW5k b3dzIHVudGlsIFB5dGhvbgorICAgICAgICAjIDMuMTIsIHdoaWNoIGludHJvZHVjZXMgTmFtZWRU ZW1wb3JhcnlGaWxlKGRlbGV0ZV9vbl9jbG9zZT1GYWxzZSkuCisgICAgICAgICMgVW50aWwgdGhl biwgc3BlY2lmeSBkZWxldGU9RmFsc2UgYW5kIG1hbnVhbGx5IHVubGluayBhZnRlciB1c2UuCisg ICAgICAgIHdpdGggdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKCJ3IiwgZGVsZXRlPUZhbHNl KSBhcyBwd2ZpbGU6CisgICAgICAgICAgICBwd2ZpbGUud3JpdGUod2lucGFzc3dvcmQpCisKKyAg ICAgICAgc3VicHJvY2Vzcy5jaGVja19jYWxsKAorICAgICAgICAgICAgWyJpbml0ZGIiLCAiLS1h dXRoPXNjcmFtLXNoYS0yNTYiLCAiLS1wd2ZpbGUiLCBwd2ZpbGUubmFtZSwgZGF0YWRpcl0KKyAg ICAgICAgKQorICAgICAgICBvcy51bmxpbmsocHdmaWxlLm5hbWUpCisKKyAgICBlbHNlOgorICAg ICAgICAjIEZvciBvdGhlciBPU2VzIHdlIGNhbiBqdXN0IHVzZSBwZWVyIGF1dGguCisgICAgICAg IG1ldGhvZCA9ICJwZWVyIgorICAgICAgICBzdWJwcm9jZXNzLmNoZWNrX2NhbGwoWyJwZ19jdGwi LCAiLUQiLCBkYXRhZGlyLCAiaW5pdCJdKQorCisgICAgd2l0aCBvcGVuKGRhdGFkaXIgLyAicGdf aGJhLmNvbmYiLCAidyIpIGFzIGY6CisgICAgICAgIHByaW50KGYiIyBkZWZhdWx0OiBsb2NhbCB7 bWV0aG9kfSBjb25uZWN0aW9ucyBvbmx5IiwgZmlsZT1mKQorICAgICAgICBwcmludChmImxvY2Fs IGFsbCBhbGwge21ldGhvZH0iLCBmaWxlPWYpCisKKyAgICAjIEZpZ3VyZSBvdXQgYSBwb3J0IHRv IGxpc3RlbiBvbi4gQXR0ZW1wdCB0byByZXNlcnZlIGJvdGggSVB2NCBhbmQgSVB2NgorICAgICMg YWRkcmVzc2VzIGluIG9uZSBnby4KKyAgICAjCisgICAgIyBOb3RlOiBzb2NrZXQuaGFzX2R1YWxz dGFja19pcHY2L2NyZWF0ZV9zZXJ2ZXIgYXJlIG9ubHkgaW4gUHl0aG9uIDMuOCsuCisgICAgaWYg aGFzYXR0cihzb2NrZXQsICJoYXNfZHVhbHN0YWNrX2lwdjYiKSBhbmQgc29ja2V0Lmhhc19kdWFs c3RhY2tfaXB2NigpOgorICAgICAgICBhZGRyID0gKCI6OjEiLCAwKQorICAgICAgICBzID0gc29j a2V0LmNyZWF0ZV9zZXJ2ZXIoYWRkciwgZmFtaWx5PXNvY2tldC5BRl9JTkVUNiwgZHVhbHN0YWNr X2lwdjY9VHJ1ZSkKKworICAgICAgICBob3N0YWRkciwgcG9ydCwgXywgXyA9IHMuZ2V0c29ja25h bWUoKQorICAgICAgICBhZGRycyA9IFtob3N0YWRkciwgIjEyNy4wLjAuMSJdCisKKyAgICBlbHNl OgorICAgICAgICBhZGRyID0gKCIxMjcuMC4wLjEiLCAwKQorCisgICAgICAgIHMgPSBzb2NrZXQu c29ja2V0KCkKKyAgICAgICAgcy5iaW5kKGFkZHIpCisKKyAgICAgICAgaG9zdGFkZHIsIHBvcnQg PSBzLmdldHNvY2tuYW1lKCkKKyAgICAgICAgYWRkcnMgPSBbaG9zdGFkZHJdCisKKyAgICBsb2cg PSBvcy5wYXRoLmpvaW4oZGF0YWRpciwgInBvc3RncmVzcWwubG9nIikKKworICAgIHdpdGggcywg b3Blbihvcy5wYXRoLmpvaW4oZGF0YWRpciwgInBvc3RncmVzcWwuY29uZiIpLCAiYSIpIGFzIGY6 CisgICAgICAgIHByaW50KGZpbGU9ZikKKyAgICAgICAgcHJpbnQoInVuaXhfc29ja2V0X2RpcmVj dG9yaWVzID0gJ3t9JyIuZm9ybWF0KHNvY2tkaXIuYXNfcG9zaXgoKSksIGZpbGU9ZikKKyAgICAg ICAgcHJpbnQoImxpc3Rlbl9hZGRyZXNzZXMgPSAne30nIi5mb3JtYXQoIiwiLmpvaW4oYWRkcnMp KSwgZmlsZT1mKQorICAgICAgICBwcmludCgicG9ydCA9IiwgcG9ydCwgZmlsZT1mKQorICAgICAg ICBwcmludCgibG9nX2Nvbm5lY3Rpb25zID0gYWxsIiwgZmlsZT1mKQorCisgICAgIyBCZXR3ZWVu IGNsb3Npbmcgb2YgdGhlIHNvY2tldCwgcywgYW5kIHNlcnZlciBzdGFydCwgd2UncmUgcmFjaW5n IGFnYWluc3QKKyAgICAjIGFueXRoaW5nIHRoYXQgd2FudHMgdG8gb3BlbiB1cCBlcGhlbWVyYWwg cG9ydHMsIHNvIHRyeSBub3QgdG8gcHV0IGFueSBuZXcKKyAgICAjIHdvcmsgaGVyZS4KKworICAg IHN1YnByb2Nlc3MuY2hlY2tfY2FsbChbInBnX2N0bCIsICItRCIsIGRhdGFkaXIsICItbCIsIGxv ZywgInN0YXJ0Il0pCisgICAgeWllbGQgKGhvc3RhZGRyLCBwb3J0KQorICAgIHN1YnByb2Nlc3Mu Y2hlY2tfY2FsbChbInBnX2N0bCIsICItRCIsIGRhdGFkaXIsICItbCIsIGxvZywgInN0b3AiXSkK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3NzbC9weXQvdGVzdF9zZXJ2ZXIucHkgYi9zcmMvdGVzdC9z c2wvcHl0L3Rlc3Rfc2VydmVyLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi4yZDBiZTczNTM3MQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3NzbC9weXQvdGVz dF9zZXJ2ZXIucHkKQEAgLTAsMCArMSw1MzggQEAKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitpbXBvcnQgY29udGV4dGxpYgoraW1w b3J0IG9zCitpbXBvcnQgcGF0aGxpYgoraW1wb3J0IHBsYXRmb3JtCitpbXBvcnQgcmUKK2ltcG9y dCBzaHV0aWwKK2ltcG9ydCBzb2NrZXQKK2ltcG9ydCBzc2wKK2ltcG9ydCBzdHJ1Y3QKK2ltcG9y dCBzdWJwcm9jZXNzCitpbXBvcnQgdGVtcGZpbGUKK2Zyb20gY29sbGVjdGlvbnMgaW1wb3J0IG5h bWVkdHVwbGUKK2Zyb20gdHlwaW5nIGltcG9ydCBEaWN0LCBMaXN0LCBVbmlvbgorCitpbXBvcnQg cHl0ZXN0CisKK2ltcG9ydCBwZworCisjIFRoaXMgc3VpdGUgb3BlbnMgdXAgbG9jYWwgVENQIHBv cnRzIGFuZCBpcyBoaWRkZW4gYmVoaW5kIFBHX1RFU1RfRVhUUkE9c3NsLgorcHl0ZXN0bWFyayA9 IHBnLnJlcXVpcmVfdGVzdF9leHRyYSgic3NsIikKKworCisjCisjIFRlc3QgRml4dHVyZXMKKyMK KworCitAcHl0ZXN0LmZpeHR1cmUoc2NvcGU9InNlc3Npb24iKQorZGVmIGNvbm5lbnYoc2VydmVy X2luc3RhbmNlLCBzb2NrZGlyLCBkYXRhZGlyKToKKyAgICAiIiIKKyAgICBQcm92aWRlcyB0aGUg dmFsdWVzIGZvciBzZXZlcmFsIFBHKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgbmVlZGVkIGZvciBv dXIKKyAgICB1dGlsaXR5IHByb2dyYW1zIHRvIGNvbm5lY3QgdG8gdGhlIHNlcnZlcl9pbnN0YW5j ZS4KKyAgICAiIiIKKyAgICByZXR1cm4geworICAgICAgICAiUEdIT1NUIjogc3RyKHNvY2tkaXIp LAorICAgICAgICAiUEdQT1JUIjogc3RyKHNlcnZlcl9pbnN0YW5jZVsxXSksCisgICAgICAgICJQ R0RBVEFCQVNFIjogInBvc3RncmVzIiwKKyAgICAgICAgIlBHREFUQSI6IHN0cihkYXRhZGlyKSwK KyAgICB9CisKKworY2xhc3MgRmlsZUJhY2t1cChjb250ZXh0bGliLkFic3RyYWN0Q29udGV4dE1h bmFnZXIpOgorICAgICIiIgorICAgIEEgY29udGV4dCBtYW5hZ2VyIHdoaWNoIGJhY2tzIHVwIGEg ZmlsZSdzIGNvbnRlbnRzLCByZXN0b3JpbmcgdGhlbSBvbiBleGl0LgorICAgICIiIgorCisgICAg ZGVmIF9faW5pdF9fKHNlbGYsIGZpbGU6IHBhdGhsaWIuUGF0aCk6CisgICAgICAgIHN1cGVyKCku X19pbml0X18oKQorCisgICAgICAgIHNlbGYuX2ZpbGUgPSBmaWxlCisKKyAgICBkZWYgX19lbnRl cl9fKHNlbGYpOgorICAgICAgICB3aXRoIHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgKKyAg ICAgICAgICAgIHByZWZpeD1zZWxmLl9maWxlLm5hbWUsIGRpcj1zZWxmLl9maWxlLnBhcmVudCwg ZGVsZXRlPUZhbHNlCisgICAgICAgICkgYXMgZjoKKyAgICAgICAgICAgIHNlbGYuX2JhY2t1cCA9 IHBhdGhsaWIuUGF0aChmLm5hbWUpCisKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYuX2Zp bGUsIHNlbGYuX2JhY2t1cCkKKworICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIF9fZXhp dF9fKHNlbGYsICpleGMpOgorICAgICAgICAjIFN3YXAgdGhlIGJhY2t1cCBhbmQgdGhlIG9yaWdp bmFsIGZpbGUsIHNvIHRoYXQgdGhlIG1vZGlmaWVkIGNvbnRlbnRzCisgICAgICAgICMgY2FuIHN0 aWxsIGJlIGluc3BlY3RlZCBpbiBjYXNlIG9mIGZhaWx1cmUuCisgICAgICAgICMKKyAgICAgICAg IyBUT0RPOiB0aGlzIGlzIGxlc3MgaGVscGZ1bCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgbGF5ZXJz LCBiZWNhdXNlIGl0J3MKKyAgICAgICAgIyBub3QgY2xlYXIgd2hpY2ggYmFja3VwIHRvIGxvb2sg YXQuIENhbiB0aGUgYmFja3VwIG5hbWUgYmUgcHJpbnRlZCBhcworICAgICAgICAjIHBhcnQgb2Yg dGhlIGZhaWxlZCB0ZXN0IG91dHB1dD8gU2hvdWxkIHdlIG9ubHkgc3dhcCBvbiB0ZXN0IGZhaWx1 cmU/CisgICAgICAgIHRtcCA9IHNlbGYuX2JhY2t1cC5wYXJlbnQgLyAoc2VsZi5fYmFja3VwLm5h bWUgKyAiLnRtcCIpCisKKyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYuX2ZpbGUsIHRtcCkK KyAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNlbGYuX2JhY2t1cCwgc2VsZi5fZmlsZSkKKyAgICAg ICAgc2h1dGlsLm1vdmUodG1wLCBzZWxmLl9iYWNrdXApCisKKworY2xhc3MgSEJBKEZpbGVCYWNr dXApOgorICAgICIiIgorICAgIEJhY2tzIHVwIGEgc2VydmVyJ3MgSEJBIGNvbmZpZ3VyYXRpb24g YW5kIHByb3ZpZGVzIG1lYW5zIGZvciB0ZW1wb3JhcmlseQorICAgIGVkaXRpbmcgaXQuIFNlZSBh bHNvIHBnX3NlcnZlciwgd2hpY2ggcHJvdmlkZXMgYW4gaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBh bmQKKyAgICBjb250ZXh0IG1hbmFnZXJzIGZvciBlbmZvcmNpbmcgdGhlIHJlbG9hZC9yZXN0YXJ0 IG9yZGVyIG9mIG9wZXJhdGlvbnMuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg ZGF0YWRpcjogcGF0aGxpYi5QYXRoKToKKyAgICAgICAgc3VwZXIoKS5fX2luaXRfXyhkYXRhZGly IC8gInBnX2hiYS5jb25mIikKKworICAgIGRlZiBwcmVwZW5kKHNlbGYsICpsaW5lczogVW5pb25b c3RyLCBMaXN0W3N0cl1dKToKKyAgICAgICAgIiIiCisgICAgICAgIFRlbXBvcmFyaWx5IHByZXBl bmRzIGxpbmVzIHRvIHRoZSBzZXJ2ZXIncyBwZ19oYmEuY29uZi4KKworICAgICAgICBBcyBzdWdh ciBmb3IgYWxpZ25pbmcgSEJBIGNvbHVtbnMgaW4gdGhlIHRlc3RzLCBlYWNoIGxpbmUgY2FuIGJl IGVpdGhlcgorICAgICAgICBhIHN0cmluZyBvciBhIGxpc3Qgb2Ygc3RyaW5ncy4gTGlzdCBlbGVt ZW50cyB3aWxsIGJlIGpvaW5lZCBieSBzaW5nbGUKKyAgICAgICAgc3BhY2VzIGJlZm9yZSB0aGV5 IGFyZSB3cml0dGVuIHRvIGZpbGUuCisgICAgICAgICIiIgorICAgICAgICB3aXRoIG9wZW4oc2Vs Zi5fZmlsZSwgInIiKSBhcyBmOgorICAgICAgICAgICAgcHJpb3JfZGF0YSA9IGYucmVhZCgpCisK KyAgICAgICAgd2l0aCBvcGVuKHNlbGYuX2ZpbGUsICJ3IikgYXMgZjoKKyAgICAgICAgICAgIGZv ciBsIGluIGxpbmVzOgorICAgICAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UobCwgbGlzdCk6Cisg ICAgICAgICAgICAgICAgICAgIHByaW50KCpsLCBmaWxlPWYpCisgICAgICAgICAgICAgICAgZWxz ZToKKyAgICAgICAgICAgICAgICAgICAgcHJpbnQobCwgZmlsZT1mKQorCisgICAgICAgICAgICBm LndyaXRlKHByaW9yX2RhdGEpCisKKworY2xhc3MgQ29uZmlnKEZpbGVCYWNrdXApOgorICAgICIi IgorICAgIEJhY2tzIHVwIGEgc2VydmVyJ3MgcG9zdGdyZXNxbC5jb25mIGFuZCBwcm92aWRlcyBt ZWFucyBmb3IgdGVtcG9yYXJpbHkKKyAgICBlZGl0aW5nIGl0LiBTZWUgYWxzbyBwZ19zZXJ2ZXIs IHdoaWNoIHByb3ZpZGVzIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgYW5kCisgICAgY29udGV4 dCBtYW5hZ2VycyBmb3IgZW5mb3JjaW5nIHRoZSByZWxvYWQvcmVzdGFydCBvcmRlciBvZiBvcGVy YXRpb25zLgorICAgICIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRhdGFkaXI6IHBhdGhs aWIuUGF0aCk6CisgICAgICAgIHN1cGVyKCkuX19pbml0X18oZGF0YWRpciAvICJwb3N0Z3Jlc3Fs LmNvbmYiKQorCisgICAgZGVmIHNldChzZWxmLCAqKmd1Y3MpOgorICAgICAgICAiIiIKKyAgICAg ICAgVGVtcG9yYXJpbHkgYXBwZW5kcyBHVUMgc2V0dGluZ3MgdG8gdGhlIHNlcnZlcidzIHBvc3Rn cmVzcWwuY29uZi4KKyAgICAgICAgIiIiCisKKyAgICAgICAgd2l0aCBvcGVuKHNlbGYuX2ZpbGUs ICJhIikgYXMgZjoKKyAgICAgICAgICAgIHByaW50KGZpbGU9ZikKKworICAgICAgICAgICAgZm9y IG4sIHYgaW4gZ3Vjcy5pdGVtcygpOgorICAgICAgICAgICAgICAgIHYgPSBzdHIodikKKworICAg ICAgICAgICAgICAgICMgVE9ETzogcHJvcGVyIHF1b3RpbmcKKyAgICAgICAgICAgICAgICB2ID0g di5yZXBsYWNlKCJcXCIsICJcXFxcIikKKyAgICAgICAgICAgICAgICB2ID0gdi5yZXBsYWNlKCIn IiwgIlxcJyIpCisgICAgICAgICAgICAgICAgdiA9ICIne30nIi5mb3JtYXQodikKKworICAgICAg ICAgICAgICAgIHByaW50KG4sICI9IiwgdiwgZmlsZT1mKQorCisKK0BweXRlc3QuZml4dHVyZShz Y29wZT0ic2Vzc2lvbiIpCitkZWYgcGdfc2VydmVyX3Nlc3Npb24oc2VydmVyX2luc3RhbmNlLCBj b25uZW52LCBkYXRhZGlyLCB3aW5wYXNzd29yZCk6CisgICAgIiIiCisgICAgUHJvdmlkZXMgY29t bW9uIHJvdXRpbmVzIGZvciBjb25maWd1cmluZyBhbmQgY29ubmVjdGluZyB0byB0aGUKKyAgICBz ZXJ2ZXJfaW5zdGFuY2UuIEZvciBleGFtcGxlOgorCisgICAgICAgIHVzZXJzID0gcGdfc2VydmVy X3Nlc3Npb24uY3JlYXRlX3VzZXJzKCJvbmUiLCAidHdvIikKKyAgICAgICAgZGJzID0gcGdfc2Vy dmVyX3Nlc3Npb24uY3JlYXRlX2RicygiZGVmYXVsdCIpCisKKyAgICAgICAgd2l0aCBwZ19zZXJ2 ZXJfc2Vzc2lvbi5yZWxvYWRpbmcoKSBhcyBzOgorICAgICAgICAgICAgcy5oYmEucHJlcGVuZChb ImxvY2FsIiwgZGJzWyJkZWZhdWx0Il0sIHVzZXJzWyJ0d28iXSwgInBlZXIiXSkKKworICAgICAg ICBjb25uID0gY29ubmVjdF9zb21laG93KCoqcGdfc2VydmVyX3Nlc3Npb24uY29ubmluZm8pCisg ICAgICAgIC4uLgorCisgICAgQXR0cmlidXRlcyBvZiBub3RlIGFyZQorICAgIC0gLmNvbm5pbmZv OiBwcm92aWRlcyBUQ1AgY29ubmVjdGlvbiBpbmZvIGZvciB0aGUgc2VydmVyCisKKyAgICBUaGlz IGZpeHR1cmUgdW53aW5kcyBpdHMgY29uZmlndXJhdGlvbiBjaGFuZ2VzIGF0IHRoZSBlbmQgb2Yg dGhlIHB5dGVzdAorICAgIHNlc3Npb24uIEZvciBtb3JlIGdyYW51bGFyIGNoYW5nZXMsIHBnX3Nl cnZlcl9zZXNzaW9uLnN1YmNvbnRleHQoKSBzcGxpdHMKKyAgICBvZmYgYSAibmVzdGVkIiBjb250 ZXh0IHRvIGFsbG93IHNtYWxsZXIgc2NvcGVzLgorICAgICIiIgorCisgICAgY2xhc3MgX1NlcnZl cihjb250ZXh0bGliLkV4aXRTdGFjayk6CisgICAgICAgIGNvbm5pbmZvID0gZGljdCgKKyAgICAg ICAgICAgIGhvc3RhZGRyPXNlcnZlcl9pbnN0YW5jZVswXSwKKyAgICAgICAgICAgIHBvcnQ9c2Vy dmVyX2luc3RhbmNlWzFdLAorICAgICAgICApCisKKyAgICAgICAgIyBmb3IgX2JhY2t1cF9jb25m aWd1cmF0aW9uKCkKKyAgICAgICAgX0JhY2t1cCA9IG5hbWVkdHVwbGUoIkJhY2t1cCIsICJjb25m LCBoYmEiKQorCisgICAgICAgIGRlZiBzdWJjb250ZXh0KHNlbGYpOgorICAgICAgICAgICAgIiIi CisgICAgICAgICAgICBDcmVhdGVzIGEgbmV3IHNlcnZlciBzdGFjayBpbnN0YW5jZSB0aGF0IGNh biBiZSB0aWVkIHRvIGEgc21hbGxlcgorICAgICAgICAgICAgc2NvcGUgdGhhbiAic2Vzc2lvbiIu CisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgICMgU28gZmFyLCB0aGVyZSBkb2Vzbid0IHNl ZW0gdG8gYmUgYSBuZWVkIHRvIGxpbmsgdGhlIHR3byBvYmplY3RzLAorICAgICAgICAgICAgIyBz aW5jZSBIQkEvQ29uZmlnL0ZpbGVCYWNrdXAgb3BlcmF0ZSBkaXJlY3RseSBvbiB0aGUgZmlsZXN5 c3RlbSBhbmQKKyAgICAgICAgICAgICMgd2lsbCBhcHBlYXIgdG8gIm5lc3QiIG5hdHVyYWxseS4K KyAgICAgICAgICAgIHJldHVybiBzZWxmLl9fY2xhc3NfXygpCisKKyAgICAgICAgZGVmIGNyZWF0 ZV91c2VycyhzZWxmLCAqdXNlcmtleXM6IHN0cikgLT4gRGljdFtzdHIsIHN0cl06CisgICAgICAg ICAgICAiIiIKKyAgICAgICAgICAgIENyZWF0ZXMgbmV3IHVzZXJzIHdoaWNoIHdpbGwgYmUgZHJv cHBlZCBhdCB0aGUgZW5kIG9mIHRoZSBzZXJ2ZXIKKyAgICAgICAgICAgIGNvbnRleHQuCisKKyAg ICAgICAgICAgIEZvciBlYWNoIHByb3ZpZGVkIGtleSwgYSByZWxhdGVkIHVzZXIgbmFtZSB3aWxs IGJlIHNlbGVjdGVkIGFuZAorICAgICAgICAgICAgc3RvcmVkIGluIGEgbWFwLiBUaGlzIG1hcCBp cyByZXR1cm5lZCB0byBsZXQgY2FsbGluZyBjb2RlIGxvb2sgdXAKKyAgICAgICAgICAgIHRoZSBz ZWxlY3RlZCB1c2VybmFtZXMgKGluc3RlYWQgb2YgaGFyZGNvZGluZyB0aGVtIGFuZCBwb3RlbnRp YWxseQorICAgICAgICAgICAgc3RvbXBpbmcgb24gYW4gZXhpc3RpbmcgaW5zdGFsbGF0aW9uKS4K KyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgdXNlcm1hcCA9IHt9CisKKyAgICAgICAgICAg IGZvciB1IGluIHVzZXJrZXlzOgorICAgICAgICAgICAgICAgICMgVE9ETzogdXNlIGEgdW5pcXVp ZmllciB0byBzdXBwb3J0IGluc3RhbGxjaGVjaworICAgICAgICAgICAgICAgIG5hbWUgPSB1ICsg InVzZXIiCisgICAgICAgICAgICAgICAgdXNlcm1hcFt1XSA9IG5hbWUKKworICAgICAgICAgICAg ICAgICMgVE9ETzogcHJvcGVyIGVzY2FwaW5nCisgICAgICAgICAgICAgICAgc2VsZi5wc3FsKCIt YyIsICJDUkVBVEUgVVNFUiAiICsgbmFtZSkKKyAgICAgICAgICAgICAgICBzZWxmLmNhbGxiYWNr KHNlbGYucHNxbCwgIi1jIiwgIkRST1AgVVNFUiAiICsgbmFtZSkKKworICAgICAgICAgICAgcmV0 dXJuIHVzZXJtYXAKKworICAgICAgICBkZWYgY3JlYXRlX2RicyhzZWxmLCAqZGJrZXlzOiBzdHIp IC0+IERpY3Rbc3RyLCBzdHJdOgorICAgICAgICAgICAgIiIiCisgICAgICAgICAgICBDcmVhdGVz IG5ldyBkYXRhYmFzZXMgd2hpY2ggd2lsbCBiZSBkcm9wcGVkIGF0IHRoZSBlbmQgb2YgdGhlIHNl cnZlcgorICAgICAgICAgICAgY29udGV4dC4gU2VlIGNyZWF0ZV91c2VycygpIGZvciB0aGUgbWVh bmluZyBvZiB0aGUga2V5cyBhbmQgcmV0dXJuZWQKKyAgICAgICAgICAgIG1hcC4KKyAgICAgICAg ICAgICIiIgorICAgICAgICAgICAgZGJtYXAgPSB7fQorCisgICAgICAgICAgICBmb3IgZCBpbiBk YmtleXM6CisgICAgICAgICAgICAgICAgIyBUT0RPOiB1c2UgYSB1bmlxdWlmaWVyIHRvIHN1cHBv cnQgaW5zdGFsbGNoZWNrCisgICAgICAgICAgICAgICAgbmFtZSA9IGQgKyAiZGIiCisgICAgICAg ICAgICAgICAgZGJtYXBbZF0gPSBuYW1lCisKKyAgICAgICAgICAgICAgICAjIFRPRE86IHByb3Bl ciBlc2NhcGluZworICAgICAgICAgICAgICAgIHNlbGYucHNxbCgiLWMiLCAiQ1JFQVRFIERBVEFC QVNFICIgKyBuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuY2FsbGJhY2soc2VsZi5wc3FsLCAi LWMiLCAiRFJPUCBEQVRBQkFTRSAiICsgbmFtZSkKKworICAgICAgICAgICAgcmV0dXJuIGRibWFw CisKKyAgICAgICAgQGNvbnRleHRsaWIuY29udGV4dG1hbmFnZXIKKyAgICAgICAgZGVmIHJlbG9h ZGluZyhzZWxmKToKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgUHJvdmlkZXMgYSBjb250 ZXh0IG1hbmFnZXIgZm9yIG1ha2luZyBjb25maWd1cmF0aW9uIGNoYW5nZXMuCisKKyAgICAgICAg ICAgIElmIHRoZSBjb250ZXh0IHN1aXRlIGZpbmlzaGVzIHN1Y2Nlc3NmdWxseSwgdGhlIGNvbmZp Z3VyYXRpb24gd2lsbAorICAgICAgICAgICAgYmUgcmVsb2FkZWQgdmlhIHBnX2N0bC4gT24gdGVh cmRvd24sIHRoZSBjb25maWd1cmF0aW9uIGNoYW5nZXMgd2lsbAorICAgICAgICAgICAgYmUgdW53 b3VuZCwgYW5kIHRoZSBzZXJ2ZXIgd2lsbCBiZSBzaWduYWxlZCB0byByZWxvYWQgYWdhaW4uCisK KyAgICAgICAgICAgIFRoZSBjb250ZXh0IHRhcmdldCBjb250YWlucyB0aGUgZm9sbG93aW5nIGF0 dHJpYnV0ZXMgd2hpY2ggY2FuIGJlCisgICAgICAgICAgICB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUg c2VydmVyOgorICAgICAgICAgICAgLSAuY29uZjogbW9kaWZpZXMgcG9zdGdyZXNxbC5jb25mCisg ICAgICAgICAgICAtIC5oYmE6IG1vZGlmaWVzIHBnX2hiYS5jb25mCisKKyAgICAgICAgICAgIEZv ciBleGFtcGxlOgorCisgICAgICAgICAgICAgICAgd2l0aCBwZ19zZXJ2ZXJfc2Vzc2lvbi5yZWxv YWRpbmcoKSBhcyBzOgorICAgICAgICAgICAgICAgICAgICBzLmNvbmYuc2V0KGxvZ19jb25uZWN0 aW9ucz0ib24iKQorICAgICAgICAgICAgICAgICAgICBzLmhiYS5wcmVwZW5kKCJsb2NhbCBhbGwg YWxsIHRydXN0IikKKyAgICAgICAgICAgICIiIgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAg ICAgICAgICMgUHVzaCBhIHJlbG9hZCBvbnRvIHRoZSBzdGFjayBiZWZvcmUgbWFraW5nIGFueSBv dGhlcgorICAgICAgICAgICAgICAgICMgdW53aW5kYWJsZSBjaGFuZ2VzLiBUaGF0IHdheSB0aGUg b3JkZXIgb2Ygb3BlcmF0aW9ucyB3aWxsIGJlCisgICAgICAgICAgICAgICAgIworICAgICAgICAg ICAgICAgICMgICMgdGVzdAorICAgICAgICAgICAgICAgICMgICAtIGNvbmZpZyBjaGFuZ2UgMQor ICAgICAgICAgICAgICAgICMgICAtIGNvbmZpZyBjaGFuZ2UgMgorICAgICAgICAgICAgICAgICMg ICAtIHJlbG9hZAorICAgICAgICAgICAgICAgICMgICMgdGVhcmRvd24KKyAgICAgICAgICAgICAg ICAjICAgLSB1bmRvIGNvbmZpZyBjaGFuZ2UgMgorICAgICAgICAgICAgICAgICMgICAtIHVuZG8g Y29uZmlnIGNoYW5nZSAxCisgICAgICAgICAgICAgICAgIyAgIC0gcmVsb2FkCisgICAgICAgICAg ICAgICAgIworICAgICAgICAgICAgICAgIHNlbGYuY2FsbGJhY2soc2VsZi5wZ19jdGwsICJyZWxv YWQiKQorICAgICAgICAgICAgICAgIHlpZWxkIHNlbGYuX2JhY2t1cF9jb25maWd1cmF0aW9uKCkK KyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICAjIFdlIG9ubHkgd2FudCB0byBy ZWxvYWQgYXQgdGhlIGVuZCBvZiB0aGUgc3VpdGUgaWYgdGhlcmUgd2VyZQorICAgICAgICAgICAg ICAgICMgbm8gZXJyb3JzLiBEdXJpbmcgZXhjZXB0aW9ucywgdGhlIHB1c2hlZCBjYWxsYmFjayBo YW5kbGVzCisgICAgICAgICAgICAgICAgIyB0aGluZ3MgaW5zdGVhZCwgc28gdGhlcmUncyBub3Ro aW5nIHRvIGRvIGhlcmUuCisgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgIGVsc2U6 CisgICAgICAgICAgICAgICAgIyBTdWl0ZSBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorICAgICAg ICAgICAgICAgIHNlbGYucGdfY3RsKCJyZWxvYWQiKQorCisgICAgICAgIEBjb250ZXh0bGliLmNv bnRleHRtYW5hZ2VyCisgICAgICAgIGRlZiByZXN0YXJ0aW5nKHNlbGYpOgorICAgICAgICAgICAg IiIiTGlrZSAucmVsb2FkaW5nKCksIGJ1dCB3aXRoIGEgZnVsbCBzZXJ2ZXIgcmVzdGFydC4iIiIK KyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBzZWxmLmNhbGxiYWNrKHNlbGYucGdf Y3RsLCAicmVzdGFydCIpCisgICAgICAgICAgICAgICAgeWllbGQgc2VsZi5fYmFja3VwX2NvbmZp Z3VyYXRpb24oKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJhaXNlCisg ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHNlbGYucGdfY3RsKCJyZXN0YXJ0IikK KworICAgICAgICBkZWYgcHNxbChzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAiIiIKKyAgICAg ICAgICAgIFJ1bnMgcHNxbCB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuIFBhc3N3b3JkIHByb21w dHMgYXJlIGFsd2F5cworICAgICAgICAgICAgZGlzYWJsZWQuIE9uIFdpbmRvd3MsIHRoZSBhZG1p biBwYXNzd29yZCB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZQorICAgICAgICAgICAgZW52aXJvbm1l bnQuCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIGlmIHBsYXRmb3JtLnN5c3RlbSgpID09 ICJXaW5kb3dzIjoKKyAgICAgICAgICAgICAgICBwdyA9IGRpY3QoUEdQQVNTV09SRD13aW5wYXNz d29yZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHcgPSBOb25lCisKKyAg ICAgICAgICAgIHNlbGYuX3J1bigicHNxbCIsICItdyIsICphcmdzLCBhZGRlbnY9cHcpCisKKyAg ICAgICAgZGVmIHBnX2N0bChzZWxmLCAqYXJncyk6CisgICAgICAgICAgICAiIiIKKyAgICAgICAg ICAgIFJ1bnMgcGdfY3RsIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4gTG9nIG91dHB1dCB3aWxs IGJlIHBsYWNlZCBpbgorICAgICAgICAgICAgcG9zdGdyZXNxbC5sb2cgaW4gdGhlIHNlcnZlcidz IGRhdGEgZGlyZWN0b3J5LgorCisgICAgICAgICAgICBUT0RPOiBwdXQgdGhlIGxvZyBpbiBURVNU TE9HRElSCisgICAgICAgICAgICAiIiIKKyAgICAgICAgICAgIHNlbGYuX3J1bigicGdfY3RsIiwg Ii1sIiwgc3RyKGRhdGFkaXIgLyAicG9zdGdyZXNxbC5sb2ciKSwgKmFyZ3MpCisKKyAgICAgICAg ZGVmIF9ydW4oc2VsZiwgY21kLCAqYXJncywgYWRkZW52OiBkaWN0ID0gTm9uZSk6CisgICAgICAg ICAgICAjIE92ZXJyaWRlIHRoZSBleGlzdGluZyBlbnZpcm9ubWVudCB3aXRoIHRoZSBjb25uZW52 IHZhbHVlcyBhbmQKKyAgICAgICAgICAgICMgYW55dGhpbmcgdGhlIGNhbGxlciB3YW50ZWQgdG8g YWRkLiAoUHl0aG9uIDMuOSBnaXZlcyB1cyB0aGUKKyAgICAgICAgICAgICMgbGVzcy11Z2x5IGBv cy5lbnZpcm9uIHwgY29ubmVudmAgbWVyZ2Ugb3BlcmF0b3IuKQorICAgICAgICAgICAgc3ViZW52 ID0gZGljdChvcy5lbnZpcm9uLCAqKmNvbm5lbnYpCisgICAgICAgICAgICBpZiBhZGRlbnY6Cisg ICAgICAgICAgICAgICAgc3ViZW52LnVwZGF0ZShhZGRlbnYpCisKKyAgICAgICAgICAgIHN1YnBy b2Nlc3MuY2hlY2tfY2FsbChbY21kLCAqYXJnc10sIGVudj1zdWJlbnYpCisKKyAgICAgICAgZGVm IF9iYWNrdXBfY29uZmlndXJhdGlvbihzZWxmKToKKyAgICAgICAgICAgICMgV3JhcCB0aGUgZXhp c3RpbmcgSEJBIGFuZCBjb25maWd1cmF0aW9uIHdpdGggRmlsZUJhY2t1cHMuCisgICAgICAgICAg ICByZXR1cm4gc2VsZi5fQmFja3VwKAorICAgICAgICAgICAgICAgIGhiYT1zZWxmLmVudGVyX2Nv bnRleHQoSEJBKGRhdGFkaXIpKSwKKyAgICAgICAgICAgICAgICBjb25mPXNlbGYuZW50ZXJfY29u dGV4dChDb25maWcoZGF0YWRpcikpLAorICAgICAgICAgICAgKQorCisgICAgd2l0aCBfU2VydmVy KCkgYXMgczoKKyAgICAgICAgeWllbGQgcworCisKK0BweXRlc3QuZml4dHVyZShzY29wZT0ibW9k dWxlIiwgYXV0b3VzZT1UcnVlKQorZGVmIHNzbF9zZXR1cChwZ19zZXJ2ZXJfc2Vzc2lvbiwgY2Vy dHMsIGRhdGFkaXIpOgorICAgICIiIgorICAgIFNldHMgdXAgcmVxdWlyZWQgc2VydmVyIHNldHRp bmdzIGZvciBhbGwgdGVzdHMgaW4gdGhpcyBtb2R1bGUuIFRoZSBmaXh0dXJlCisgICAgdmFyaWFi bGUgaXMgYSB0dXBsZSAodXNlcnMsIGRicykgY29udGFpbmluZyB0aGUgdXNlciBhbmQgZGF0YWJh c2UgbmFtZXMgdGhhdAorICAgIGhhdmUgYmVlbiBjaG9zZW4gZm9yIHRoZSB0ZXN0IHNlc3Npb24u CisgICAgIiIiCisgICAgdHJ5OgorICAgICAgICB3aXRoIHBnX3NlcnZlcl9zZXNzaW9uLnJlc3Rh cnRpbmcoKSBhcyBzOgorICAgICAgICAgICAgcy5jb25mLnNldCgKKyAgICAgICAgICAgICAgICBz c2w9Im9uIiwKKyAgICAgICAgICAgICAgICBzc2xfY2FfZmlsZT1jZXJ0cy5jYS5jZXJ0cGF0aCwK KyAgICAgICAgICAgICAgICBzc2xfY2VydF9maWxlPWNlcnRzLnNlcnZlci5jZXJ0cGF0aCwKKyAg ICAgICAgICAgICAgICBzc2xfa2V5X2ZpbGU9Y2VydHMuc2VydmVyLmtleXBhdGgsCisgICAgICAg ICAgICApCisKKyAgICAgICAgICAgICMgUmVqZWN0IGJ5IGRlZmF1bHQuCisgICAgICAgICAgICBz LmhiYS5wcmVwZW5kKCJob3N0c3NsIGFsbCBhbGwgYWxsIHJlamVjdCIpCisKKyAgICBleGNlcHQg c3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3I6CisgICAgICAgICMgVGhpcyBpcyBhIGRlY2Vu dCBwbGFjZSB0byBza2lwIGlmIHRoZSBzZXJ2ZXIgaXNuJ3Qgc2V0IHVwIGZvciBTU0wuCisgICAg ICAgIGxvZ3BhdGggPSBkYXRhZGlyIC8gInBvc3RncmVzcWwubG9nIgorICAgICAgICB1bnN1cHBv cnRlZCA9IHJlLmNvbXBpbGUoIlNTTCBpcyBub3Qgc3VwcG9ydGVkIikKKworICAgICAgICB3aXRo IG9wZW4obG9ncGF0aCwgInIiKSBhcyBsb2c6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBsb2c6 CisgICAgICAgICAgICAgICAgaWYgdW5zdXBwb3J0ZWQuc2VhcmNoKGxpbmUpOgorICAgICAgICAg ICAgICAgICAgICBweXRlc3Quc2tpcCgidGhlIHNlcnZlciBkb2VzIG5vdCBzdXBwb3J0IFNTTCIp CisKKyAgICAgICAgIyBTb21lIG90aGVyIGVycm9yIGhhcHBlbmVkLgorICAgICAgICByYWlzZQor CisgICAgdXNlcnMgPSBwZ19zZXJ2ZXJfc2Vzc2lvbi5jcmVhdGVfdXNlcnMoCisgICAgICAgICJz c2wiLAorICAgICkKKworICAgIGRicyA9IHBnX3NlcnZlcl9zZXNzaW9uLmNyZWF0ZV9kYnMoCisg ICAgICAgICJzc2wiLAorICAgICkKKworICAgIHJldHVybiAodXNlcnMsIGRicykKKworCitAcHl0 ZXN0LmZpeHR1cmUoc2NvcGU9Im1vZHVsZSIpCitkZWYgY2xpZW50X2NlcnQoc3NsX3NldHVwLCBj ZXJ0cyk6CisgICAgIiIiCisgICAgQ3JlYXRlcyBhIENlcnQgZm9yIHRoZSAic3NsIiB1c2VyLgor ICAgICIiIgorICAgIGZyb20gY3J5cHRvZ3JhcGh5IGltcG9ydCB4NTA5CisgICAgZnJvbSBjcnlw dG9ncmFwaHkueDUwOS5vaWQgaW1wb3J0IE5hbWVPSUQKKworICAgIHVzZXJzLCBfID0gc3NsX3Nl dHVwCisgICAgdXNlciA9IHVzZXJzWyJzc2wiXQorCisgICAgcmV0dXJuIGNlcnRzLm5ldyh4NTA5 Lk5hbWUoW3g1MDkuTmFtZUF0dHJpYnV0ZShOYW1lT0lELkNPTU1PTl9OQU1FLCB1c2VyKV0pKQor CisKK0BweXRlc3QuZml4dHVyZQorZGVmIHBnX3NlcnZlcihwZ19zZXJ2ZXJfc2Vzc2lvbik6Cisg ICAgIiIiCisgICAgQSBwZXItdGVzdCBpbnN0YW5jZSBvZiBwZ19zZXJ2ZXJfc2Vzc2lvbi4gVXNl IHRoaXMgZml4dHVyZSB0byBtYWtlIGNoYW5nZXMKKyAgICB0byB0aGUgc2VydmVyIHdoaWNoIHdp bGwgYmUgcm9sbGVkIGJhY2sgYXQgdGhlIGVuZCBvZiBldmVyeSB0ZXN0LgorICAgICIiIgorICAg IHdpdGggcGdfc2VydmVyX3Nlc3Npb24uc3ViY29udGV4dCgpIGFzIHM6CisgICAgICAgIHlpZWxk IHMKKworCisjCisjIFRlc3RzCisjCisKKworIyBGb3IgdXNlIHdpdGggdGhlIGBjcmVkc2AgcGFy YW1ldGVyIGJlbG93LgorQ0xJRU5UID0gImNsaWVudCIKK1NFUlZFUiA9ICJzZXJ2ZXIiCisKKwor QHB5dGVzdC5tYXJrLnBhcmFtZXRyaXplKAorICAgICMgZm10OiBvZmYKKyAgICAiYXV0aF9tZXRo b2QsICAgICAgICAgICAgICAgICAgICBjcmVkcywgIGV4cGVjdGVkX2Vycm9yIiwKK1sKKyAgICAj IFRydXN0IGFsbG93cyBhbnl0aGluZy4KKyAgICAoInRydXN0IiwgICAgICAgICAgICAgICAgICAg ICAgICBOb25lLCAgIE5vbmUpLAorICAgICgidHJ1c3QiLCAgICAgICAgICAgICAgICAgICAgICAg IENMSUVOVCwgTm9uZSksCisgICAgKCJ0cnVzdCIsICAgICAgICAgICAgICAgICAgICAgICAgU0VS VkVSLCBOb25lKSwKKworICAgICMgdmVyaWZ5LWNhIGFsbG93cyBhbnkgQ0Etc2lnbmVkIGNlcnRp ZmljYXRlLgorICAgICgidHJ1c3QgY2xpZW50Y2VydD12ZXJpZnktY2EiLCAgIE5vbmUsICAgInJl cXVpcmVzIGEgdmFsaWQgY2xpZW50IGNlcnRpZmljYXRlIiksCisgICAgKCJ0cnVzdCBjbGllbnRj ZXJ0PXZlcmlmeS1jYSIsICAgQ0xJRU5ULCBOb25lKSwKKyAgICAoInRydXN0IGNsaWVudGNlcnQ9 dmVyaWZ5LWNhIiwgICBTRVJWRVIsIE5vbmUpLAorCisgICAgIyBjZXJ0IGFuZCB2ZXJpZnktZnVs bCBhbGxvdyBvbmx5IHRoZSBjb3JyZWN0IGNlcnRpZmljYXRlLgorICAgICgidHJ1c3QgY2xpZW50 Y2VydD12ZXJpZnktZnVsbCIsIE5vbmUsICAgInJlcXVpcmVzIGEgdmFsaWQgY2xpZW50IGNlcnRp ZmljYXRlIiksCisgICAgKCJ0cnVzdCBjbGllbnRjZXJ0PXZlcmlmeS1mdWxsIiwgQ0xJRU5ULCBO b25lKSwKKyAgICAoInRydXN0IGNsaWVudGNlcnQ9dmVyaWZ5LWZ1bGwiLCBTRVJWRVIsICJhdXRo ZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIiKSwKKyAgICAoImNlcnQiLCAgICAgICAgICAgICAg ICAgICAgICAgICBOb25lLCAgICJyZXF1aXJlcyBhIHZhbGlkIGNsaWVudCBjZXJ0aWZpY2F0ZSIp LAorICAgICgiY2VydCIsICAgICAgICAgICAgICAgICAgICAgICAgIENMSUVOVCwgTm9uZSksCisg ICAgKCJjZXJ0IiwgICAgICAgICAgICAgICAgICAgICAgICAgU0VSVkVSLCAiYXV0aGVudGljYXRp b24gZmFpbGVkIGZvciB1c2VyIiksCitdLAorICAgICMgZm10OiBvbgorKQorZGVmIHRlc3RfZGly ZWN0X3NzbF9jZXJ0aWZpY2F0ZV9hdXRoZW50aWNhdGlvbigKKyAgICBwZ19zZXJ2ZXIsCisgICAg c3NsX3NldHVwLAorICAgIGNlcnRzLAorICAgIGNsaWVudF9jZXJ0LAorICAgIHJlbWFpbmluZ190 aW1lb3V0LAorICAgICMgdGVzdCBwYXJhbWV0ZXJzCisgICAgYXV0aF9tZXRob2QsCisgICAgY3Jl ZHMsCisgICAgZXhwZWN0ZWRfZXJyb3IsCispOgorICAgICIiIgorICAgIFRlc3RzIGRpcmVjdCBT U0wgY29ubmVjdGlvbnMgd2l0aCB2YXJpb3VzIGNsaWVudC1jZXJ0aWZpY2F0ZS9IQkEKKyAgICBj b21iaW5hdGlvbnMuCisgICAgIiIiCisKKyAgICAjIFNldCB1cCB0aGUgSEJBIGFzIGRlc2lyZWQg YnkgdGhlIHRlc3QuCisgICAgdXNlcnMsIGRicyA9IHNzbF9zZXR1cAorCisgICAgdXNlciA9IHVz ZXJzWyJzc2wiXQorICAgIGRiID0gZGJzWyJzc2wiXQorCisgICAgd2l0aCBwZ19zZXJ2ZXIucmVs b2FkaW5nKCkgYXMgczoKKyAgICAgICAgcy5oYmEucHJlcGVuZCgKKyAgICAgICAgICAgIFsiaG9z dHNzbCIsIGRiLCB1c2VyLCAiMTI3LjAuMC4xLzMyIiwgYXV0aF9tZXRob2RdLAorICAgICAgICAg ICAgWyJob3N0c3NsIiwgZGIsIHVzZXIsICI6OjEvMTI4IiwgYXV0aF9tZXRob2RdLAorICAgICAg ICApCisKKyAgICAjIENvbmZpZ3VyZSB0aGUgU1NMIHNldHRpbmdzIGZvciB0aGUgY2xpZW50Lgor ICAgIGN0eCA9IHNzbC5TU0xDb250ZXh0KHNzbC5QUk9UT0NPTF9UTFNfQ0xJRU5UKQorICAgIGN0 eC5sb2FkX3ZlcmlmeV9sb2NhdGlvbnMoY2FmaWxlPWNlcnRzLmNhLmNlcnRwYXRoKQorICAgIGN0 eC5zZXRfYWxwbl9wcm90b2NvbHMoWyJwb3N0Z3Jlc3FsIl0pICAjIGZvciBkaXJlY3QgU1NMCisK KyAgICAjIExvYWQgdXAgYSBjbGllbnQgY2VydGlmaWNhdGUgaWYgcmVxdWlyZWQgYnkgdGhlIHRl c3QuCisgICAgaWYgY3JlZHMgPT0gQ0xJRU5UOgorICAgICAgICBjdHgubG9hZF9jZXJ0X2NoYWlu KGNsaWVudF9jZXJ0LmNlcnRwYXRoLCBjbGllbnRfY2VydC5rZXlwYXRoKQorICAgIGVsaWYgY3Jl ZHMgPT0gU0VSVkVSOgorICAgICAgICAjIFVzaW5nIGEgc2VydmVyIGNlcnRpZmljYXRlIGFzIHRo ZSBjbGllbnQgY3JlZGVudGlhbCBpcyBleHBlY3RlZCB0bworICAgICAgICAjIHdvcmsgb25seSBm b3IgY2xpZW50Y2VydD12ZXJpZnktY2EgKGFuZCBgdHJ1c3RgLCBuYXR1cmFsbHkpLgorICAgICAg ICBjdHgubG9hZF9jZXJ0X2NoYWluKGNlcnRzLnNlcnZlci5jZXJ0cGF0aCwgY2VydHMuc2VydmVy LmtleXBhdGgpCisKKyAgICAjIE1ha2UgYSBkaXJlY3QgU1NMIGNvbm5lY3Rpb24uIFRoZXJlJ3Mg bm8gU1NMUmVxdWVzdCBpbiB0aGUgaGFuZHNoYWtlOyB3ZQorICAgICMgc2ltcGx5IHdyYXAgYSBU Q1AgY29ubmVjdGlvbiB3aXRoIE9wZW5TU0wuCisgICAgYWRkciA9IChwZ19zZXJ2ZXIuY29ubmlu Zm9bImhvc3RhZGRyIl0sIHBnX3NlcnZlci5jb25uaW5mb1sicG9ydCJdKQorICAgIHdpdGggc29j a2V0LmNyZWF0ZV9jb25uZWN0aW9uKGFkZHIpIGFzIHM6CisgICAgICAgIHMuc2V0dGltZW91dChy ZW1haW5pbmdfdGltZW91dCgpKSAgIyBYWFggdGhpcyByZXNldHMgZXZlcnkgb3BlcmF0aW9uCisK KyAgICAgICAgd2l0aCBjdHgud3JhcF9zb2NrZXQocywgc2VydmVyX2hvc3RuYW1lPWNlcnRzLnNl cnZlcl9ob3N0KSBhcyBjb25uOgorICAgICAgICAgICAgIyBCdWlsZCBhbmQgc2VuZCB0aGUgc3Rh cnR1cCBwYWNrZXQuCisgICAgICAgICAgICBzdGFydHVwX29wdGlvbnMgPSBkaWN0KAorICAgICAg ICAgICAgICAgIHVzZXI9dXNlciwKKyAgICAgICAgICAgICAgICBkYXRhYmFzZT1kYiwKKyAgICAg ICAgICAgICAgICBhcHBsaWNhdGlvbl9uYW1lPSJweXRlc3QiLAorICAgICAgICAgICAgKQorCisg ICAgICAgICAgICBwYXlsb2FkID0gYiIiCisgICAgICAgICAgICBmb3IgaywgdiBpbiBzdGFydHVw X29wdGlvbnMuaXRlbXMoKToKKyAgICAgICAgICAgICAgICBwYXlsb2FkICs9IGsuZW5jb2RlKCkg KyBiIlwwIgorICAgICAgICAgICAgICAgIHBheWxvYWQgKz0gc3RyKHYpLmVuY29kZSgpICsgYiJc MCIKKyAgICAgICAgICAgIHBheWxvYWQgKz0gYiJcMCIgICMgbnVsbCB0ZXJtaW5hdG9yCisKKyAg ICAgICAgICAgIHBrdGxlbiA9IDQgKyA0ICsgbGVuKHBheWxvYWQpCisgICAgICAgICAgICBjb25u LnNlbmQoc3RydWN0LnBhY2soIiFJSEgiLCBwa3RsZW4sIDMsIDApICsgcGF5bG9hZCkKKworICAg ICAgICAgICAgaWYgbm90IGV4cGVjdGVkX2Vycm9yOgorICAgICAgICAgICAgICAgICMgRXhwZWN0 IGFuIEF1dGhlbnRpY2F0aW9uT0sgdG8gY29tZSBiYWNrLgorICAgICAgICAgICAgICAgIHBrdHR5 cGUsIHBrdGxlbiA9IHN0cnVjdC51bnBhY2soIiFjSSIsIGNvbm4ucmVjdig1KSkKKyAgICAgICAg ICAgICAgICBhc3NlcnQgcGt0dHlwZSA9PSBiIlIiCisgICAgICAgICAgICAgICAgYXNzZXJ0IHBr dGxlbiA9PSA4CisKKyAgICAgICAgICAgICAgICBhdXRobl9yZXN1bHQgPSBzdHJ1Y3QudW5wYWNr KCIhSSIsIGNvbm4ucmVjdig0KSlbMF0KKyAgICAgICAgICAgICAgICBhc3NlcnQgYXV0aG5fcmVz dWx0ID09IDAKKworICAgICAgICAgICAgICAgICMgUmVhZCBhbmQgZGlzY2FyZCB0byBSZWFkeUZv clF1ZXJ5LgorICAgICAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgICAg IHBrdHR5cGUsIHBrdGxlbiA9IHN0cnVjdC51bnBhY2soIiFjSSIsIGNvbm4ucmVjdig1KSkKKyAg ICAgICAgICAgICAgICAgICAgcGF5bG9hZCA9IGNvbm4ucmVjdihwa3RsZW4gLSA0KQorCisgICAg ICAgICAgICAgICAgICAgIGlmIHBrdHR5cGUgPT0gYiJaIjoKKyAgICAgICAgICAgICAgICAgICAg ICAgIGFzc2VydCBwYXlsb2FkID09IGIiSSIKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr CisKKyAgICAgICAgICAgICAgICAjIFNlbmQgYW4gZW1wdHkgcXVlcnkuCisgICAgICAgICAgICAg ICAgY29ubi5zZW5kKHN0cnVjdC5wYWNrKCIhY0kiLCBiIlEiLCA1KSArIGIiXDAiKQorCisgICAg ICAgICAgICAgICAgIyBFeHBlY3QgRW1wdHlRdWVyeVJlc3BvbnNlK1JlYWR5Rm9yUXVlcnkuCisg ICAgICAgICAgICAgICAgcGt0dHlwZSwgcGt0bGVuID0gc3RydWN0LnVucGFjaygiIWNJIiwgY29u bi5yZWN2KDUpKQorICAgICAgICAgICAgICAgIGFzc2VydCBwa3R0eXBlID09IGIiSSIKKyAgICAg ICAgICAgICAgICBhc3NlcnQgcGt0bGVuID09IDQKKworICAgICAgICAgICAgICAgIHBrdHR5cGUs IHBrdGxlbiA9IHN0cnVjdC51bnBhY2soIiFjSSIsIGNvbm4ucmVjdig1KSkKKyAgICAgICAgICAg ICAgICBhc3NlcnQgcGt0dHlwZSA9PSBiIloiCisKKyAgICAgICAgICAgICAgICBwYXlsb2FkID0g Y29ubi5yZWN2KHBrdGxlbiAtIDQpCisgICAgICAgICAgICAgICAgYXNzZXJ0IHBheWxvYWQgPT0g YiJJIgorCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICMgTWF0Y2ggdGhlIGV4 cGVjdGVkIGF1dGhlbnRpY2F0aW9uIGVycm9yLgorICAgICAgICAgICAgICAgIHBrdHR5cGUsIHBr dGxlbiA9IHN0cnVjdC51bnBhY2soIiFjSSIsIGNvbm4ucmVjdig1KSkKKyAgICAgICAgICAgICAg ICBhc3NlcnQgcGt0dHlwZSA9PSBiIkUiCisKKyAgICAgICAgICAgICAgICBwYXlsb2FkID0gY29u bi5yZWN2KHBrdGxlbiAtIDQpCisgICAgICAgICAgICAgICAgbXNnID0gTm9uZQorCisgICAgICAg ICAgICAgICAgZm9yIGNvbXBvbmVudCBpbiBwYXlsb2FkLnNwbGl0KGIiXDAiKToKKyAgICAgICAg ICAgICAgICAgICAgaWYgbm90IGNvbXBvbmVudDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrICAjIGVuZCBvZiBtZXNzYWdlCisKKyAgICAgICAgICAgICAgICAgICAga2V5LCB2YWwgPSBj b21wb25lbnRbOjFdLCBjb21wb25lbnRbMTpdCisgICAgICAgICAgICAgICAgICAgIGlmIGtleSA9 PSBiIlMiOgorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0IHZhbCA9PSBiIkZBVEFMIgor ICAgICAgICAgICAgICAgICAgICBlbGlmIGtleSA9PSBiIk0iOgorICAgICAgICAgICAgICAgICAg ICAgICAgbXNnID0gdmFsLmRlY29kZSgpCisKKyAgICAgICAgICAgICAgICBhc3NlcnQgcmUuc2Vh cmNoKGV4cGVjdGVkX2Vycm9yLCBtc2cpLCAic2VydmVyIGVycm9yIGRpZCBub3QgbWF0Y2giCisK KyAgICAgICAgICAgICMgVGVybWluYXRlLgorICAgICAgICAgICAgY29ubi5zZW5kKHN0cnVjdC5w YWNrKCIhY0kiLCBiIlgiLCA0KSkKLS0gCjIuMzQuMQoK --000000000000b0ce9f063e654bfa Content-Type: application/octet-stream; name="v1-0005-ci-Add-MTEST_SUITES-for-optional-test-tailoring.patch" Content-Disposition: attachment; filename="v1-0005-ci-Add-MTEST_SUITES-for-optional-test-tailoring.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mfd2s8jn4 RnJvbSBlYWIzMWNmOWMyODVhMjhhOTBkNDlhZDliOTBlYTVkMDUwNTA3MTVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVHVlLCAyIFNlcCAyMDI1IDE1OjM3OjUzIC0wNzAwClN1YmplY3Q6 IFtQQVRDSCB2MSA1LzZdIGNpOiBBZGQgTVRFU1RfU1VJVEVTIGZvciBvcHRpb25hbCB0ZXN0IHRh aWxvcmluZwoKU2hvdWxkIG1ha2UgaXQgZWFzaWVyIHRvIGNvbnRyb2wgdGhlIHRlc3QgY3ljbGUg dGltZSBmb3IgQ2lycnVzLiBBZGQgdGhlCmRlc2lyZWQgc3VpdGVzIChyZW1lbWJlcmluZyBgLS1z dWl0ZSBzZXR1cGAhKSB0byB0aGUgdG9wLWxldmVsIGVudnZhci4KLS0tCiAuY2lycnVzLnRhc2tz LnltbCB8IDE1ICsrKysrKysrLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDggaW5zZXJ0aW9ucygr KSwgNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS8uY2lycnVzLnRhc2tzLnltbCBiLy5jaXJy dXMudGFza3MueW1sCmluZGV4IDRlNzQ0ZjFjMTA1Li43MDZhODA5ZjY0MSAxMDA2NDQKLS0tIGEv LmNpcnJ1cy50YXNrcy55bWwKKysrIGIvLmNpcnJ1cy50YXNrcy55bWwKQEAgLTI4LDYgKzI4LDcg QEAgZW52OgogICAjIGVycm9ycy93YXJuaW5ncyBpbiBvbmUgcGxhY2UuCiAgIE1CVUlMRF9UQVJH RVQ6IGFsbCB0ZXN0cHJlcAogICBNVEVTVF9BUkdTOiAtLXByaW50LWVycm9ybG9ncyAtLW5vLXJl YnVpbGQgLUMgYnVpbGQKKyAgTVRFU1RfU1VJVEVTOiAjIC0tc3VpdGUgc2V0dXAgLS1zdWl0ZSBz c2wgLS1zdWl0ZSAuLi4KICAgUEdDVExUSU1FT1VUOiAxMjAgIyBhdm9pZHMgc3B1cmlvdXMgZmFp bHVyZXMgZHVyaW5nIHBhcmFsbGVsIHRlc3RzCiAgIFRFTVBfQ09ORklHOiAke0NJUlJVU19XT1JL SU5HX0RJUn0vc3JjL3Rvb2xzL2NpL3BnX2NpX2Jhc2UuY29uZgogICBQR19URVNUX0VYVFJBOiBr ZXJiZXJvcyBsZGFwIHNzbCBsaWJwcV9lbmNyeXB0aW9uIGxvYWRfYmFsYW5jZSBvYXV0aApAQCAt MjQ3LDcgKzI0OCw3IEBAIHRhc2s6CiAgIHRlc3Rfd29ybGRfc2NyaXB0OiB8CiAgICAgc3UgcG9z dGdyZXMgPDwtRU9GCiAgICAgICB1bGltaXQgLWMgdW5saW1pdGVkCi0gICAgICBtZXNvbiB0ZXN0 ICRNVEVTVF9BUkdTIC0tbnVtLXByb2Nlc3NlcyAke1RFU1RfSk9CU30KKyAgICAgIG1lc29uIHRl c3QgJE1URVNUX0FSR1MgLS1udW0tcHJvY2Vzc2VzICR7VEVTVF9KT0JTfSAke01URVNUX1NVSVRF U30KICAgICBFT0YKIAogICAjIHRlc3QgcnVubmluZ2NoZWNrLCBmcmVlYnNkIGNob3NlbiBiZWNh dXNlIGl0J3MgY3VycmVudGx5IGZhc3QgZW5vdWdoCkBAIC0zOTEsNyArMzkyLDcgQEAgdGFzazoK ICAgICAgICMgT3RoZXJ3aXNlIHRlc3RzIHdpbGwgZmFpbCBvbiBPcGVuQlNELCBkdWUgdG8gaW5h YmlsaXR5IHRvIHN0YXJ0IGVub3VnaAogICAgICAgIyBwcm9jZXNzZXMuCiAgICAgICB1bGltaXQg LXAgMjU2Ci0gICAgICBtZXNvbiB0ZXN0ICRNVEVTVF9BUkdTIC0tbnVtLXByb2Nlc3NlcyAke1RF U1RfSk9CU30KKyAgICAgIG1lc29uIHRlc3QgJE1URVNUX0FSR1MgLS1udW0tcHJvY2Vzc2VzICR7 VEVTVF9KT0JTfSAke01URVNUX1NVSVRFU30KICAgICBFT0YKIAogICBvbl9mYWlsdXJlOgpAQCAt NjA1LDcgKzYwNiw3IEBAIHRhc2s6CiAgICAgICB0ZXN0X3dvcmxkX3NjcmlwdDogfAogICAgICAg ICBzdSBwb3N0Z3JlcyA8PC1FT0YKICAgICAgICAgICB1bGltaXQgLWMgdW5saW1pdGVkCi0gICAg ICAgICAgbWVzb24gdGVzdCAkTVRFU1RfQVJHUyAtLW51bS1wcm9jZXNzZXMgJHtURVNUX0pPQlN9 CisgICAgICAgICAgbWVzb24gdGVzdCAkTVRFU1RfQVJHUyAtLW51bS1wcm9jZXNzZXMgJHtURVNU X0pPQlN9ICR7TVRFU1RfU1VJVEVTfQogICAgICAgICBFT0YKICAgICAgICAgIyBzbyB0aGF0IHdl IGRvbid0IHVwbG9hZCA2NGJpdCBsb2dzIGlmIDMyYml0IGZhaWxzCiAgICAgICAgIHJtIC1yZiBi dWlsZC8KQEAgLTYxNyw3ICs2MTgsNyBAQCB0YXNrOgogICAgICAgdGVzdF93b3JsZF8zMl9zY3Jp cHQ6IHwKICAgICAgICAgc3UgcG9zdGdyZXMgPDwtRU9GCiAgICAgICAgICAgdWxpbWl0IC1jIHVu bGltaXRlZAotICAgICAgICAgIFBZVEhPTkNPRVJDRUNMT0NBTEU9MCBMQU5HPUMgbWVzb24gdGVz dCAkTVRFU1RfQVJHUyAtQyBidWlsZC0zMiAtLW51bS1wcm9jZXNzZXMgJHtURVNUX0pPQlN9Cisg ICAgICAgICAgUFlUSE9OQ09FUkNFQ0xPQ0FMRT0wIExBTkc9QyBtZXNvbiB0ZXN0ICRNVEVTVF9B UkdTIC1DIGJ1aWxkLTMyIC0tbnVtLXByb2Nlc3NlcyAke1RFU1RfSk9CU30gJHtNVEVTVF9TVUlU RVN9CiAgICAgICAgIEVPRgogCiAgICAgICBvbl9mYWlsdXJlOgpAQCAtNzQzLDcgKzc0NCw3IEBA IHRhc2s6CiAgIHRlc3Rfd29ybGRfc2NyaXB0OiB8CiAgICAgdWxpbWl0IC1jIHVubGltaXRlZCAj IGRlZmF1bHQgaXMgMAogICAgIHVsaW1pdCAtbiAxMDI0ICMgZGVmYXVsdCBpcyAyNTYsIHByZXR0 eSBsb3cKLSAgICBtZXNvbiB0ZXN0ICRNVEVTVF9BUkdTIC0tbnVtLXByb2Nlc3NlcyAke1RFU1Rf Sk9CU30KKyAgICBtZXNvbiB0ZXN0ICRNVEVTVF9BUkdTIC0tbnVtLXByb2Nlc3NlcyAke1RFU1Rf Sk9CU30gJHtNVEVTVF9TVUlURVN9CiAKICAgb25fZmFpbHVyZToKICAgICA8PDogKm9uX2ZhaWx1 cmVfbWVzb24KQEAgLTgyNiw3ICs4MjcsNyBAQCB0YXNrOgogCiAgIGNoZWNrX3dvcmxkX3Njcmlw dDogfAogICAgIHZjdmFyc2FsbCB4NjQKLSAgICBtZXNvbiB0ZXN0ICVNVEVTVF9BUkdTJSAtLW51 bS1wcm9jZXNzZXMgJVRFU1RfSk9CUyUKKyAgICBtZXNvbiB0ZXN0ICVNVEVTVF9BUkdTJSAtLW51 bS1wcm9jZXNzZXMgJVRFU1RfSk9CUyUgJU1URVNUX1NVSVRFUyUKIAogICBvbl9mYWlsdXJlOgog ICAgIDw8OiAqb25fZmFpbHVyZV9tZXNvbgpAQCAtODg3LDcgKzg4OCw3IEBAIHRhc2s6CiAgIHVw bG9hZF9jYWNoZXM6IGNjYWNoZQogCiAgIHRlc3Rfd29ybGRfc2NyaXB0OiB8Ci0gICAgJUJBU0gl IC1jICJtZXNvbiB0ZXN0ICVNVEVTVF9BUkdTJSAtLW51bS1wcm9jZXNzZXMgJVRFU1RfSk9CUyUi CisgICAgJUJBU0glIC1jICJtZXNvbiB0ZXN0ICVNVEVTVF9BUkdTJSAtLW51bS1wcm9jZXNzZXMg JVRFU1RfSk9CUyUgJU1URVNUX1NVSVRFUyUiCiAKICAgb25fZmFpbHVyZToKICAgICA8PDogKm9u X2ZhaWx1cmVfbWVzb24KLS0gCjIuMzQuMQoK --000000000000b0ce9f063e654bfa Content-Type: application/octet-stream; name="v1-0006-XXX-run-pytest-and-ssl-suite-all-OSes.patch" Content-Disposition: attachment; filename="v1-0006-XXX-run-pytest-and-ssl-suite-all-OSes.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mfd2sah25 RnJvbSAxNzc2NzcwNzMxODAyZmY0MzAwY2Y2MTY2MGZmMDVmZWU5Y2Y3ZmZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWNvYiBDaGFtcGlvbiA8amFjb2IuY2hhbXBpb25AZW50ZXJw cmlzZWRiLmNvbT4KRGF0ZTogVHVlLCAyIFNlcCAyMDI1IDE1OjM4OjUyIC0wNzAwClN1YmplY3Q6 IFtQQVRDSCB2MSA2LzZdIFhYWCBydW4gcHl0ZXN0IGFuZCBzc2wgc3VpdGUsIGFsbCBPU2VzCgot LS0KIC5jaXJydXMuc3RhciAgICAgIHwgMiArLQogLmNpcnJ1cy50YXNrcy55bWwgfCAyICstCiAy IGZpbGVzIGNoYW5nZWQsIDIgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS8uY2lycnVzLnN0YXIgYi8uY2lycnVzLnN0YXIKaW5kZXggZTliYjY3MmI5NTkuLjdjMWNh YWExMmYxIDEwMDY0NAotLS0gYS8uY2lycnVzLnN0YXIKKysrIGIvLmNpcnJ1cy5zdGFyCkBAIC03 Myw3ICs3Myw3IEBAIGRlZiBjb21wdXRlX2Vudmlyb25tZW50X3ZhcnMoKToKICAgICAjIFJFUE9f Q0lfQVVUT01BVElDX1RSSUdHRVJfVEFTS1M9InRhc2tfbmFtZSBvdGhlcl90YXNrIiB1bmRlciAi UmVwb3NpdG9yeQogICAgICMgU2V0dGluZ3MiIG9uIENpcnJ1cyBDSSdzIHdlYnNpdGUuCiAKLSAg ICBkZWZhdWx0X21hbnVhbF90cmlnZ2VyX3Rhc2tzID0gWydtaW5ndycsICduZXRic2QnLCAnb3Bl bmJzZCddCisgICAgZGVmYXVsdF9tYW51YWxfdHJpZ2dlcl90YXNrcyA9IFtdCiAKICAgICByZXBv X2NpX2F1dG9tYXRpY190cmlnZ2VyX3Rhc2tzID0gZW52LmdldCgnUkVQT19DSV9BVVRPTUFUSUNf VFJJR0dFUl9UQVNLUycsICcnKQogICAgIGZvciB0YXNrIGluIGRlZmF1bHRfbWFudWFsX3RyaWdn ZXJfdGFza3M6CmRpZmYgLS1naXQgYS8uY2lycnVzLnRhc2tzLnltbCBiLy5jaXJydXMudGFza3Mu eW1sCmluZGV4IDcwNmE4MDlmNjQxLi5kZGI1MzA1ZGM4MSAxMDA2NDQKLS0tIGEvLmNpcnJ1cy50 YXNrcy55bWwKKysrIGIvLmNpcnJ1cy50YXNrcy55bWwKQEAgLTI4LDcgKzI4LDcgQEAgZW52Ogog ICAjIGVycm9ycy93YXJuaW5ncyBpbiBvbmUgcGxhY2UuCiAgIE1CVUlMRF9UQVJHRVQ6IGFsbCB0 ZXN0cHJlcAogICBNVEVTVF9BUkdTOiAtLXByaW50LWVycm9ybG9ncyAtLW5vLXJlYnVpbGQgLUMg YnVpbGQKLSAgTVRFU1RfU1VJVEVTOiAjIC0tc3VpdGUgc2V0dXAgLS1zdWl0ZSBzc2wgLS1zdWl0 ZSAuLi4KKyAgTVRFU1RfU1VJVEVTOiAtLXN1aXRlIHNldHVwIC0tc3VpdGUgcHl0ZXN0IC0tc3Vp dGUgc3NsCiAgIFBHQ1RMVElNRU9VVDogMTIwICMgYXZvaWRzIHNwdXJpb3VzIGZhaWx1cmVzIGR1 cmluZyBwYXJhbGxlbCB0ZXN0cwogICBURU1QX0NPTkZJRzogJHtDSVJSVVNfV09SS0lOR19ESVJ9 L3NyYy90b29scy9jaS9wZ19jaV9iYXNlLmNvbmYKICAgUEdfVEVTVF9FWFRSQToga2VyYmVyb3Mg bGRhcCBzc2wgbGlicHFfZW5jcnlwdGlvbiBsb2FkX2JhbGFuY2Ugb2F1dGgKLS0gCjIuMzQuMQoK --000000000000b0ce9f063e654bfa--