Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dPQ8I-0007dR-HB for pgadmin-hackers@arkaria.postgresql.org; Mon, 26 Jun 2017 09:16:35 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dPQ8H-0005Cj-PS for pgadmin-hackers@arkaria.postgresql.org; Mon, 26 Jun 2017 09:16:33 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1dPQ8H-0005CZ-E4 for pgadmin-hackers@lists.postgresql.org; Mon, 26 Jun 2017 09:16:33 +0000 Received: from mail-yb0-x234.google.com ([2607:f8b0:4002:c09::234]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1dPQ85-0000e8-L9 for pgadmin-hackers@postgresql.org; Mon, 26 Jun 2017 09:16:32 +0000 Received: by mail-yb0-x234.google.com with SMTP id 84so26705529ybe.0 for ; Mon, 26 Jun 2017 02:16:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=Qbe07Uyu+JQTiKxS/jClTRkai5eESjwNHfdxP9fvJ/8=; b=eNlgXgtYCFxcNEBXk3LdcU0ebY6r/JqlxL/oVISu8x5LOdCjZmTSTWCfFnHLuzUDSy oNokIuprzEEbsYFAoqy2j+K6HeKZJHTJZrbc6i1xIUTBXUHGPTfLo8DUiTxUiJoX9HkY jJtMHgx2qlm2QwGkxnPrbu3JOE67YJ79gbusjOKWuOfvyn1r6TyhbWuecqyTEABWJ1Gm Ar6arq40PSwPXCTLXsxFc2fq6bfAjbE9Bwt63GnslUHv9WKYFIjxncaZ8dDLAus0/khs 6/Gh7OiNV/4IT3Y3OtKMENEw+bvaA5S0ineBubS2xSVTHK3ANwKfcVuUP3AwjJDVikkj KElQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=Qbe07Uyu+JQTiKxS/jClTRkai5eESjwNHfdxP9fvJ/8=; b=XN1s+sCsqXlcLxz3niTTtDqPf23ojvEYAjs/LTKQD09Otq5WxC+S4g9UuTEMOJhfx0 sWGQiyGd+EaAVECwIeXEkY5rxadZrs4tWlEDkXN/H0T4hBt/to/gPvwcUptjw1BRki6F +D3SHZRQTXUU0ipOT4ctYC7w/CRnqj+gnGI3SM7DJWUGkhP/LOWwSAKw/3zruIg/p/Tz 8dBnNMRlS2OLr1bg+YtBnAoToIbD+2BzmmE3wQNTnzeT3P8BUTgbZbLHU0waZZO2g76R dMsr2dczfqjPbG3kfLzh1k0bWs70VL+kIp4DDTMuYQr4tIGWztB0aO7ul1ikLKdlPC6r l05Q== X-Gm-Message-State: AKS2vOzm7Ff6pj92h9QjQLgtFV+qQk41XcICtoL4mwzVnZS9hAnoWZyG dFk0J/HkDvTD9HNm0y9Mx4c+qX3KUrXq X-Received: by 10.37.190.81 with SMTP id d17mr9988688ybm.82.1498468579085; Mon, 26 Jun 2017 02:16:19 -0700 (PDT) MIME-Version: 1.0 Received: by 10.13.193.68 with HTTP; Mon, 26 Jun 2017 02:16:17 -0700 (PDT) In-Reply-To: References: From: Harshal Dhumal Date: Mon, 26 Jun 2017 14:46:17 +0530 Message-ID: Subject: Re: [pgadmin-hackers] Re: Server side cursor limitations for on demand loading of data in query tool [RM2137] [pgAdmin4] To: Dave Page Cc: Harshal Dhumal , Ashesh Vashi , pgadmin-hackers Content-Type: multipart/mixed; boundary="089e08229a705d554b0552d96783" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Unsubscribe: , List-Archive: Precedence: bulk --089e08229a705d554b0552d96783 Content-Type: multipart/alternative; boundary="089e08229a705d55470552d96781" --089e08229a705d55470552d96781 Content-Type: text/plain; charset="UTF-8" Hi Dave, Please find updated rebased patch for RM2137 On Fri, Jun 23, 2017 at 9:00 PM, Dave Page wrote: > Hi Harshal, > > When can we expect an updated version of this patch? I think it's > important to get this into the next release. > > Thanks! > > On Fri, Jun 16, 2017 at 10:55 AM, Dave Page wrote: > > Hi, > > > > That's better - the failures are far less random now :-). I got the > > following two though, on both PG and EPAS 9.5: > > > > ====================================================================== > > ERROR: runTest (pgadmin.feature_tests.query_tool_tests. > QueryToolFeatureTest) > > Query tool feature test > > ---------------------------------------------------------------------- > > Traceback (most recent call last): > > File "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/ > query_tool_tests.py", > > line 95, in runTest > > self._query_tool_explain_analyze_buffers() > > File "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/ > query_tool_tests.py", > > line 443, in _query_tool_explain_analyze_buffers > > canvas.find_element_by_xpath("//*[contains(string(), 'Shared Read > > Blocks')]") > > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/webelement.py", > > line 260, in find_element_by_xpath > > return self.find_element(by=By.XPATH, value=xpath) > > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/webelement.py", > > line 508, in find_element > > {"using": by, "value": value})['value'] > > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/webelement.py", > > line 491, in _execute > > return self._parent.execute(command, params) > > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/webdriver.py", > > line 238, in execute > > self.error_handler.check_response(response) > > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/errorhandler.py", > > line 193, in check_response > > raise exception_class(message, screen, stacktrace) > > NoSuchElementException: Message: no such element: Unable to locate > > element: {"method":"xpath","selector":"//*[contains(string(), 'Shared > > Read Blocks')]"} > > (Session info: chrome=58.0.3029.110) > > (Driver info: chromedriver=2.29.461585 > > (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=Mac OS X 10.12.3 > > x86_64) > > > > > > ====================================================================== > > ERROR: runTest (pgadmin.feature_tests.view_data_dml_queries. > CheckForViewDataTest) > > Validate Insert, Update operations in View data with given test data > > ---------------------------------------------------------------------- > > Traceback (most recent call last): > > File "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/ > view_data_dml_queries.py", > > line 104, in runTest > > self._add_row() > > File "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/ > view_data_dml_queries.py", > > line 255, in _add_row > > self._update_cell(cell_xpath, config_data[str(idx)]) > > File "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/ > view_data_dml_queries.py", > > line 164, in _update_cell > > cell_el = self.page.find_by_xpath(xpath) > > File "/Users/dpage/git/pgadmin4/web/regression/feature_utils/ > pgadmin_page.py", > > line 122, in find_by_xpath > > return self.wait_for_element(lambda driver: > > driver.find_element_by_xpath(xpath)) > > File "/Users/dpage/git/pgadmin4/web/regression/feature_utils/ > pgadmin_page.py", > > line 205, in wait_for_element > > return self._wait_for("element to exist", element_if_it_exists) > > File "/Users/dpage/git/pgadmin4/web/regression/feature_utils/ > pgadmin_page.py", > > line 255, in _wait_for > > "Timed out waiting for " + waiting_for_message) > > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/support/wait.py", > > line 71, in until > > value = method(self._driver) > > File "/Users/dpage/git/pgadmin4/web/regression/feature_utils/ > pgadmin_page.py", > > line 200, in element_if_it_exists > > if element.is_displayed() and element.is_enabled(): > > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/webelement.py", > > line 358, in is_displayed > > return self._execute(Command.IS_ELEMENT_DISPLAYED)['value'] > > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/webelement.py", > > line 491, in _execute > > return self._parent.execute(command, params) > > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/webdriver.py", > > line 238, in execute > > self.error_handler.check_response(response) > > File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/errorhandler.py", > > line 193, in check_response > > raise exception_class(message, screen, stacktrace) > > StaleElementReferenceException: Message: stale element reference: > > element is not attached to the page document > > (Session info: chrome=58.0.3029.110) > > (Driver info: chromedriver=2.29.461585 > > (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=Mac OS X 10.12.3 > > x86_64) > > > I checked my feature test cases for any database server version/type (PG, EPAS) specific failures and I found that test cases are working fine on all of them. However I have slightly modified test case to overcome above mentioned failures. > > > > On 9.4 everything passes. On 9.6, I get one failure: > > > > ====================================================================== > > FAIL: runTest (pgadmin.feature_tests.view_data_dml_queries. > CheckForViewDataTest) > > Validate Insert, Update operations in View data with given test data > > ---------------------------------------------------------------------- > > Traceback (most recent call last): > > File "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/ > view_data_dml_queries.py", > > line 105, in runTest > > self._verify_row_data(True) > > File "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/ > view_data_dml_queries.py", > > line 282, in _verify_row_data > > self.assertEquals(cells[idx], config_data[str(idx)][1]) > > AssertionError: u'[default]' != u'1' > > - [default] > > + 1 > > > I guess Khushboo has fixed this recently. > > Screenshots attached. > > > > On Fri, Jun 16, 2017 at 7:54 AM, Harshal Dhumal > > wrote: > >> Hi Dave, > >> > >> Please find attached patch where I have added timeout of 2 seconds > before > >> selecting object menu in connect to server function. > >> > >> Note: Apply this patch on top of previous patch for on demand loading > >> feature. > >> > >> > >> -- > >> Harshal Dhumal > >> Sr. Software Engineer > >> > >> EnterpriseDB India: http://www.enterprisedb.com > >> The Enterprise PostgreSQL Company > >> > >> On Fri, Jun 16, 2017 at 2:25 AM, Dave Page wrote: > >>> > >>> Sounds good, thanks. > >>> > >>> On Thu, Jun 15, 2017 at 9:54 PM, Harshal Dhumal > >>> wrote: > >>> > Hi > >>> > > >>> > On Fri, Jun 16, 2017 at 2:07 AM, Dave Page > wrote: > >>> >> > >>> >> Hi > >>> >> > >>> >> On Thu, Jun 15, 2017 at 9:30 PM, Harshal Dhumal > >>> >> wrote: > >>> >> > Hi Dave, > >>> >> > > >>> >> > Please find attached updated patch. > >>> >> > > >>> >> > On Thu, Jun 15, 2017 at 3:58 PM, Dave Page > wrote: > >>> >> >> > >>> >> >> Hi > >>> >> >> > >>> >> >> On Wed, Jun 14, 2017 at 11:36 PM, Harshal Dhumal > >>> >> >> wrote: > >>> >> >>> > >>> >> >>> Hi Dave, > >>> >> >>> > >>> >> >>> Please find rebased patch for RM2137. > >>> >> >> > >>> >> >> > >>> >> >> Looking very good. The only issues I see are: > >>> >> >> > >>> >> >> - The row headers should auto-size such that they can display the > >>> >> >> row > >>> >> >> numbers if the last row was displayed. E.g. if there are 12345 > rows > >>> >> >> in > >>> >> >> total, then the row header should be sized to display 5 digits. > >>> >> >> > >>> >> > Fixed. > >>> >> > > >>> >> > > >>> >> >> > >>> >> >> - The tests are comprehensive, which is awesome. However, every > time > >>> >> >> I > >>> >> >> ran > >>> >> >> them, at least one of the feature tests failed. Unfortunately, it > >>> >> >> was a > >>> >> >> different one each time. In the last two runs, I got: > >>> >> >> > >>> >> >> > >>> >> >> ============================================================ > ========== > >>> >> >> ERROR: runTest > >>> >> >> (pgadmin.feature_tests.query_tool_tests.QueryToolFeatureTest) > >>> >> >> Query tool feature test > >>> >> >> > >>> >> >> ------------------------------------------------------------ > ---------- > >>> >> >> Traceback (most recent call last): > >>> >> >> File > >>> >> >> > >>> >> >> > >>> >> >> "/Users/dpage/git/pgadmin4/web/regression/feature_utils/ > base_feature_test.py", > >>> >> >> line 40, in setUp > >>> >> >> self.before() > >>> >> >> File > >>> >> >> > >>> >> >> > >>> >> >> "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/ > query_tool_tests.py", > >>> >> >> line 40, in before > >>> >> >> self._connects_to_server() > >>> >> >> File > >>> >> >> > >>> >> >> > >>> >> >> "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/ > query_tool_tests.py", > >>> >> >> line 144, in _connects_to_server > >>> >> >> self.page.driver.find_element_by_link_text("Create"))\ > >>> >> >> File > >>> >> >> > >>> >> >> > >>> >> >> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/webdriver.py", > >>> >> >> line 319, in find_element_by_link_text > >>> >> >> return self.find_element(by=By.LINK_TEXT, value=link_text) > >>> >> >> File > >>> >> >> > >>> >> >> > >>> >> >> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/webdriver.py", > >>> >> >> line 756, in find_element > >>> >> >> 'value': value})['value'] > >>> >> >> File > >>> >> >> > >>> >> >> > >>> >> >> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/webdriver.py", > >>> >> >> line 238, in execute > >>> >> >> self.error_handler.check_response(response) > >>> >> >> File > >>> >> >> > >>> >> >> > >>> >> >> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/errorhandler.py", > >>> >> >> line 193, in check_response > >>> >> >> raise exception_class(message, screen, stacktrace) > >>> >> >> NoSuchElementException: Message: no such element: Unable to > locate > >>> >> >> element: {"method":"link text","selector":"Create"} > >>> >> >> (Session info: chrome=58.0.3029.110) > >>> >> >> (Driver info: chromedriver=2.29.461585 > >>> >> >> (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=Mac OS X > 10.12.3 > >>> >> >> x86_64) > >>> >> >> > >>> >> > I checked code from _connects_to_server function which is common > in > >>> >> > all > >>> >> > features test cases. I didn't find anything wrong with this. If > there > >>> >> > is > >>> >> > a > >>> >> > bug in this function then all feature test must fail. > >>> >> > Let me know if you are getting failure consistently in > >>> >> > _connects_to_server > >>> >> > function. > >>> >> > >>> >> I wondered if that one is a race condition. Do we need a short delay > >>> >> before clicking the Object menu? I have seen this occasionally > before. > >>> > > >>> > > >>> > OK. In that case let's try putting 1-2 second delay and observer > >>> > behaviour. > >>> > I'll send separate patch for this tomorrow as this is not related to > on > >>> > demand query result feature or its test cases. > >>> > > >>> >> > >>> >> > >>> >> >> > >>> >> >> > >>> >> >> > >>> >> >> ============================================================ > ========== > >>> >> >> ERROR: runTest > >>> >> >> (pgadmin.feature_tests.query_tool_tests.QueryToolFeatureTest) > >>> >> >> Query tool feature test > >>> >> >> > >>> >> >> ------------------------------------------------------------ > ---------- > >>> >> >> Traceback (most recent call last): > >>> >> >> File > >>> >> >> > >>> >> >> > >>> >> >> "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/ > query_tool_tests.py", > >>> >> >> line 119, in runTest > >>> >> >> self._query_tool_auto_rollback_enabled() > >>> >> >> File > >>> >> >> > >>> >> >> > >>> >> >> "/Users/dpage/git/pgadmin4/web/pgadmin/feature_tests/ > query_tool_tests.py", > >>> >> >> line 697, in _query_tool_auto_rollback_enabled > >>> >> >> '//div[contains(@class, "sql-editor-message") and > >>> >> >> contains(string(), > >>> >> >> "COMMIT")]' > >>> >> >> File > >>> >> >> > >>> >> >> > >>> >> >> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/webdriver.py", > >>> >> >> line 295, in find_element_by_xpath > >>> >> >> return self.find_element(by=By.XPATH, value=xpath) > >>> >> >> File > >>> >> >> > >>> >> >> > >>> >> >> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/webdriver.py", > >>> >> >> line 756, in find_element > >>> >> >> 'value': value})['value'] > >>> >> >> File > >>> >> >> > >>> >> >> > >>> >> >> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/webdriver.py", > >>> >> >> line 238, in execute > >>> >> >> self.error_handler.check_response(response) > >>> >> >> File > >>> >> >> > >>> >> >> > >>> >> >> "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site- > packages/selenium/webdriver/remote/errorhandler.py", > >>> >> >> line 193, in check_response > >>> >> >> raise exception_class(message, screen, stacktrace) > >>> >> >> NoSuchElementException: Message: no such element: Unable to > locate > >>> >> >> element: {"method":"xpath","selector":"//div[contains(@class, > >>> >> >> "sql-editor-message") and contains(string(), "COMMIT")]"} > >>> >> >> (Session info: chrome=58.0.3029.110) > >>> >> >> (Driver info: chromedriver=2.29.461585 > >>> >> >> (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=Mac OS X > 10.12.3 > >>> >> >> x86_64) > >>> >> >> > >>> >> > I have updated Auto rollback enabled test in this patch. > >>> >> > > >>> >> >> > >>> >> >> Relevant screenshots attached. > >>> >> >> > >>> >> >> - Can you tidy up the regression output a little please? Instead > of: > >>> >> >> > >>> >> >> ------- > >>> >> >> runTest > >>> >> >> (pgadmin.feature_tests.query_tool_tests.QueryToolFeatureTest) > >>> >> >> Query tool feature test ... On demand result set on scrolling... > >>> >> >> OK. > >>> >> >> > >>> >> >> On demand result set on grid select all... > >>> >> >> OK. > >>> >> >> > >>> >> >> On demand result set on column select all... > >>> >> >> OK. > >>> >> >> > >>> >> >> Explain query... > >>> >> >> OK. > >>> >> >> > >>> >> >> Explain query with verbose... > >>> >> >> OK. > >>> >> >> > >>> >> >> Explain query with costs... > >>> >> >> OK. > >>> >> >> > >>> >> >> Explain analyze query... > >>> >> >> OK. > >>> >> >> > >>> >> >> Explain analyze query with buffers... > >>> >> >> OK. > >>> >> >> > >>> >> >> Explain analyze query with timing... > >>> >> >> OK. > >>> >> >> > >>> >> >> Auto commit disabled... > >>> >> >> OK. > >>> >> >> > >>> >> >> Auto commit enabled... > >>> >> >> OK. > >>> >> >> > >>> >> >> Auto rollback enabled... > >>> >> >> ERROR > >>> >> >> ------- > >>> >> >> > >>> >> >> Something like: > >>> >> >> > >>> >> >> ------- > >>> >> >> runTest > >>> >> >> (pgadmin.feature_tests.query_tool_tests.QueryToolFeatureTest) > >>> >> >> Query tool feature test ... > >>> >> >> On demand result set on scrolling... OK. > >>> >> >> On demand result set on grid select all... OK. > >>> >> >> On demand result set on column select all... OK. > >>> >> >> Explain query... OK. > >>> >> >> Explain query with verbose... OK. > >>> >> >> Explain query with costs... OK. > >>> >> >> Explain analyze query... OK. > >>> >> >> Explain analyze query with buffers... OK. > >>> >> >> Explain analyze query with timing... OK. > >>> >> >> Auto commit disabled... OK. > >>> >> >> Auto commit enabled... OK. > >>> >> >> Auto rollback enabled... ERROR > >>> >> >> -------- > >>> >> >> > >>> >> > Fixed. > >>> >> > > >>> >> > > >>> >> >> > >>> >> >> Thanks! > >>> >> >> > >>> >> >> -- > >>> >> >> Dave Page > >>> >> >> Blog: http://pgsnake.blogspot.com > >>> >> >> Twitter: @pgsnake > >>> >> >> > >>> >> >> EnterpriseDB UK: http://www.enterprisedb.com > >>> >> >> The Enterprise PostgreSQL Company > >>> >> > > >>> >> > > >>> >> > >>> >> > >>> >> > >>> >> -- > >>> >> Dave Page > >>> >> Blog: http://pgsnake.blogspot.com > >>> >> Twitter: @pgsnake > >>> >> > >>> >> EnterpriseDB UK: http://www.enterprisedb.com > >>> >> The Enterprise PostgreSQL Company > >>> > > >>> > > >>> > >>> > >>> > >>> -- > >>> Dave Page > >>> Blog: http://pgsnake.blogspot.com > >>> Twitter: @pgsnake > >>> > >>> EnterpriseDB UK: http://www.enterprisedb.com > >>> The Enterprise PostgreSQL Company > >> > >> > > > > > > > > -- > > Dave Page > > Blog: http://pgsnake.blogspot.com > > Twitter: @pgsnake > > > > EnterpriseDB UK: http://www.enterprisedb.com > > The Enterprise PostgreSQL Company > > > > -- > Dave Page > Blog: http://pgsnake.blogspot.com > Twitter: @pgsnake > > EnterpriseDB UK: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > --089e08229a705d55470552d96781 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Dave,

Please find updated rebased pa= tch for RM2137

On Fri, Jun 23, 2017 at 9:00 PM, Dave Page <dpage@pgadmi= n.org> wrote:
Hi Harshal,
When can we expect an updated version of this patch? I think it's
important to get this into the next release.

Thanks!

On Fri, Jun 16, 2017 at 10:55 AM, Dave Page <dpage@pgadmin.org> wrote:
> Hi,
>
> That's better - the failures are far less random now :-). I got th= e
> following two though, on both PG and EPAS 9.5:
>
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D
> ERROR: runTest (pgadmin.feature_tests.query_tool_tests.Query= ToolFeatureTest)
> Query tool feature test
> ------------------------------------------------------------= ----------
> Traceback (most recent call last):
>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/pgadmin/feat= ure_tests/query_tool_tests.py",
> line 95, in runTest
>=C2=A0 =C2=A0 =C2=A0self._query_tool_explain_analyze_buffers()
>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/pgadmin/feat= ure_tests/query_tool_tests.py",
> line 443, in _query_tool_explain_analyze_buffers
>=C2=A0 =C2=A0 =C2=A0canvas.find_element_by_xpath("//*[contain= s(string(), 'Shared Read
> Blocks')]")
>=C2=A0 =C2=A0File "/Users/dpage/.virtualenvs/pgadmin4/lib/pyt= hon2.7/site-packages/selenium/webdriver/remote/webelement.py"= ;,
> line 260, in find_element_by_xpath
>=C2=A0 =C2=A0 =C2=A0return self.find_element(by=3DBy.XPATH, value=3Dxpa= th)
>=C2=A0 =C2=A0File "/Users/dpage/.virtualenvs/pgadmin4/lib/pyt= hon2.7/site-packages/selenium/webdriver/remote/webelement.py"= ;,
> line 508, in find_element
>=C2=A0 =C2=A0 =C2=A0{"using": by, "value": value})[= 'value']
>=C2=A0 =C2=A0File "/Users/dpage/.virtualenvs/pgadmin4/lib/pyt= hon2.7/site-packages/selenium/webdriver/remote/webelement.py"= ;,
> line 491, in _execute
>=C2=A0 =C2=A0 =C2=A0return self._parent.execute(command, params)
>=C2=A0 =C2=A0File "/Users/dpage/.virtualenvs/pgadmin4/lib/pyt= hon2.7/site-packages/selenium/webdriver/remote/webdriver.py"= ,
> line 238, in execute
>=C2=A0 =C2=A0 =C2=A0self.error_handler.check_response(response) >=C2=A0 =C2=A0File "/Users/dpage/.virtualenvs/pgadmin4/lib/pyt= hon2.7/site-packages/selenium/webdriver/remote/errorhandler.py&qu= ot;,
> line 193, in check_response
>=C2=A0 =C2=A0 =C2=A0raise exception_class(message, screen, stacktrace)<= br> > NoSuchElementException: Message: no such element: Unable to locate
> element: {"method":"xpath","selector":&q= uot;//*[contains(string(), 'Shared
> Read Blocks')]"}
>=C2=A0 =C2=A0(Session info: chrome=3D58.0.3029.110)
>=C2=A0 =C2=A0(Driver info: chromedriver=3D2.29.461585
> (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=3DMac OS= X 10.12.3
> x86_64)
>
>
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D
> ERROR: runTest (pgadmin.feature_tests.view_data_dml_queries.= CheckForViewDataTest)
> Validate Insert, Update operations in View data with given test data > ------------------------------------------------------------= ----------
> Traceback (most recent call last):
>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/pgadmin/feat= ure_tests/view_data_dml_queries.py",
> line 104, in runTest
>=C2=A0 =C2=A0 =C2=A0self._add_row()
>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/pgadmin/feat= ure_tests/view_data_dml_queries.py",
> line 255, in _add_row
>=C2=A0 =C2=A0 =C2=A0self._update_cell(cell_xpath, config_data[str(idx)]= )
>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/pgadmin/feat= ure_tests/view_data_dml_queries.py",
> line 164, in _update_cell
>=C2=A0 =C2=A0 =C2=A0cell_el =3D self.page.find_by_xpath(xpath)
>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/regression/f= eature_utils/pgadmin_page.py",
> line 122, in find_by_xpath
>=C2=A0 =C2=A0 =C2=A0return self.wait_for_element(lambda driver:
> driver.find_element_by_xpath(xpath))
>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/regression/f= eature_utils/pgadmin_page.py",
> line 205, in wait_for_element
>=C2=A0 =C2=A0 =C2=A0return self._wait_for("element to exist",= element_if_it_exists)
>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/regression/f= eature_utils/pgadmin_page.py",
> line 255, in _wait_for
>=C2=A0 =C2=A0 =C2=A0"Timed out waiting for " + waiting_for_me= ssage)
>=C2=A0 =C2=A0File "/Users/dpage/.virtualenvs/pgadmin4/lib/pyt= hon2.7/site-packages/selenium/webdriver/support/wait.py", > line 71, in until
>=C2=A0 =C2=A0 =C2=A0value =3D method(self._driver)
>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/regression/f= eature_utils/pgadmin_page.py",
> line 200, in element_if_it_exists
>=C2=A0 =C2=A0 =C2=A0if element.is_displayed() and element.is_enabled():=
>=C2=A0 =C2=A0File "/Users/dpage/.virtualenvs/pgadmin4/lib/pyt= hon2.7/site-packages/selenium/webdriver/remote/webelement.py"= ;,
> line 358, in is_displayed
>=C2=A0 =C2=A0 =C2=A0return self._execute(Command.IS_ELEMENT_DISPLA= YED)['value']
>=C2=A0 =C2=A0File "/Users/dpage/.virtualenvs/pgadmin4/lib/pyt= hon2.7/site-packages/selenium/webdriver/remote/webelement.py"= ;,
> line 491, in _execute
>=C2=A0 =C2=A0 =C2=A0return self._parent.execute(command, params)
>=C2=A0 =C2=A0File "/Users/dpage/.virtualenvs/pgadmin4/lib/pyt= hon2.7/site-packages/selenium/webdriver/remote/webdriver.py"= ,
> line 238, in execute
>=C2=A0 =C2=A0 =C2=A0self.error_handler.check_response(response) >=C2=A0 =C2=A0File "/Users/dpage/.virtualenvs/pgadmin4/lib/pyt= hon2.7/site-packages/selenium/webdriver/remote/errorhandler.py&qu= ot;,
> line 193, in check_response
>=C2=A0 =C2=A0 =C2=A0raise exception_class(message, screen, stacktrace)<= br> > StaleElementReferenceException: Message: stale element reference:=
> element is not attached to the page document
>=C2=A0 =C2=A0(Session info: chrome=3D58.0.3029.110)
>=C2=A0 =C2=A0(Driver info: chromedriver=3D2.29.461585
> (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=3DMac OS= X 10.12.3
> x86_64)
>

I checked my feature t= est cases for any database server version/type (PG, EPAS) specific failures= and I found that test cases are working fine on all of them. However I hav= e slightly modified test case to overcome above mentioned failures.
=C2=A0
>
> On 9.4 everything passes. On 9.6, I get one failure:
>
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D
> FAIL: runTest (pgadmin.feature_tests.view_data_dml_queries.C= heckForViewDataTest)
> Validate Insert, Update operations in View data with given test data > ------------------------------------------------------------= ----------
> Traceback (most recent call last):
>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/pgadmin/feat= ure_tests/view_data_dml_queries.py",
> line 105, in runTest
>=C2=A0 =C2=A0 =C2=A0self._verify_row_data(True)
>=C2=A0 =C2=A0File "/Users/dpage/git/pgadmin4/web/pgadmin/feat= ure_tests/view_data_dml_queries.py",
> line 282, in _verify_row_data
>=C2=A0 =C2=A0 =C2=A0self.assertEquals(cells[idx], config_data[str(idx)]= [1])
> AssertionError: u'[default]' !=3D u'1'
> - [default]
> + 1
>
I guess Khushboo has fixed this recen= tly.

=C2=A0
> Screenshots attached.
>
> On Fri, Jun 16, 2017 at 7:54 AM, Harshal Dhumal
> <harshal.dhumal@= enterprisedb.com> wrote:
>> Hi Dave,
>>
>> Please find attached patch where I have added timeout of 2 seconds= before
>> selecting object menu in connect to server function.
>>
>> Note: Apply this patch on top of previous patch for on demand load= ing
>> feature.
>>
>>
>> --
>> Harshal Dhumal
>> Sr. Software Engineer
>>
>> EnterpriseDB India: http://www.enterprisedb.com
>> The Enterprise PostgreSQL Company
>>
>> On Fri, Jun 16, 2017 at 2:25 AM, Dave Page <dpage@pgadmin.org> wrote:
>>>
>>> Sounds good, thanks.
>>>
>>> On Thu, Jun 15, 2017 at 9:54 PM, Harshal Dhumal
>>> <harshal= .dhumal@enterprisedb.com> wrote:
>>> > Hi
>>> >
>>> > On Fri, Jun 16, 2017 at 2:07 AM, Dave Page <dpage@pgadmin.org> wrote:
>>> >>
>>> >> Hi
>>> >>
>>> >> On Thu, Jun 15, 2017 at 9:30 PM, Harshal Dhumal
>>> >> <harshal.dhumal@enterprisedb.com> wrote:
>>> >> > Hi Dave,
>>> >> >
>>> >> > Please find attached updated patch.
>>> >> >
>>> >> > On Thu, Jun 15, 2017 at 3:58 PM, Dave Page <<= a href=3D"mailto:dpage@pgadmin.org">dpage@pgadmin.org> wrote:
>>> >> >>
>>> >> >> Hi
>>> >> >>
>>> >> >> On Wed, Jun 14, 2017 at 11:36 PM, Harshal Dh= umal
>>> >> >> <harshal.dhumal@enterprisedb.com> wrote:
>>> >> >>>
>>> >> >>> Hi Dave,
>>> >> >>>
>>> >> >>> Please find rebased patch for RM2137. >>> >> >>
>>> >> >>
>>> >> >> Looking very good. The only issues I see are= :
>>> >> >>
>>> >> >> - The row headers should auto-size such that= they can display the
>>> >> >> row
>>> >> >> numbers if the last row was displayed. E.g. = if there are 12345 rows
>>> >> >> in
>>> >> >> total, then the row header should be sized t= o display 5 digits.
>>> >> >>
>>> >> > Fixed.
>>> >> >
>>> >> >
>>> >> >>
>>> >> >> - The tests are comprehensive, which is awes= ome. However, every time
>>> >> >> I
>>> >> >> ran
>>> >> >> them, at least one of the feature tests fail= ed. Unfortunately, it
>>> >> >> was a
>>> >> >> different one each time. In the last two run= s, I got:
>>> >> >>
>>> >> >>
>>> >> >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>> >> >> ERROR: runTest
>>> >> >> (pgadmin.feature_tests.query_tool_tests= .QueryToolFeatureTest)
>>> >> >> Query tool feature test
>>> >> >>
>>> >> >> ---------------------------------------= -------------------------------
>>> >> >> Traceback (most recent call last):
>>> >> >>=C2=A0 =C2=A0File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/dpage/git/pgadmin4/web/reg= ression/feature_utils/base_feature_test.py",
>>> >> >> line 40, in setUp
>>> >> >>=C2=A0 =C2=A0 =C2=A0self.before()
>>> >> >>=C2=A0 =C2=A0File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/dpage/git/pgadmin4/web/pga= dmin/feature_tests/query_tool_tests.py",
>>> >> >> line 40, in before
>>> >> >>=C2=A0 =C2=A0 =C2=A0self._connects_to_server(= )
>>> >> >>=C2=A0 =C2=A0File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/dpage/git/pgadmin4/web/pga= dmin/feature_tests/query_tool_tests.py",
>>> >> >> line 144, in _connects_to_server
>>> >> >>=C2=A0 =C2=A0 =C2=A0self.page.driver.find_ele= ment_by_link_text("Create"))\
>>> >> >>=C2=A0 =C2=A0File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/dpage/.virtualenvs/pgadmin= 4/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver= .py",
>>> >> >> line 319, in find_element_by_link_text
>>> >> >>=C2=A0 =C2=A0 =C2=A0return self.find_element(= by=3DBy.LINK_TEXT, value=3Dlink_text)
>>> >> >>=C2=A0 =C2=A0File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/dpage/.virtualenvs/pgadmin= 4/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver= .py",
>>> >> >> line 756, in find_element
>>> >> >>=C2=A0 =C2=A0 =C2=A0'value': value})[= 'value']
>>> >> >>=C2=A0 =C2=A0File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/dpage/.virtualenvs/pgadmin= 4/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver= .py",
>>> >> >> line 238, in execute
>>> >> >>=C2=A0 =C2=A0 =C2=A0self.error_handler.check_= response(response)
>>> >> >>=C2=A0 =C2=A0File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/dpage/.virtualenvs/pgadmin= 4/lib/python2.7/site-packages/selenium/webdriver/remote/errorhand= ler.py",
>>> >> >> line 193, in check_response
>>> >> >>=C2=A0 =C2=A0 =C2=A0raise exception_class(mes= sage, screen, stacktrace)
>>> >> >> NoSuchElementException: Message: no such ele= ment: Unable to locate
>>> >> >> element: {"method":"link text= ","selector":"Create"}
>>> >> >>=C2=A0 =C2=A0(Session info: chrome=3D58.0.302= 9.110)
>>> >> >>=C2=A0 =C2=A0(Driver info: chromedriver=3D2.2= 9.461585
>>> >> >> (0be2cd95f834e9ee7c46bcc7cf405b483= f5ae83b),platform=3DMac OS X 10.12.3
>>> >> >> x86_64)
>>> >> >>
>>> >> > I checked code from _connects_to_server function= which is common in
>>> >> > all
>>> >> > features test cases. I didn't find anything = wrong with this. If there
>>> >> > is
>>> >> > a
>>> >> > bug in this function then all feature test must = fail.
>>> >> > Let me know if you are getting failure consisten= tly in
>>> >> > _connects_to_server
>>> >> > function.
>>> >>
>>> >> I wondered if that one is a race condition. Do we nee= d a short delay
>>> >> before clicking the Object menu? I have seen this occ= asionally before.
>>> >
>>> >
>>> > OK. In that case let's try putting 1-2 second delay a= nd observer
>>> > behaviour.
>>> > I'll send separate patch for this tomorrow as this is= not related to on
>>> > demand query result feature or its test cases.
>>> >
>>> >>
>>> >>
>>> >> >>
>>> >> >>
>>> >> >>
>>> >> >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>>> >> >> ERROR: runTest
>>> >> >> (pgadmin.feature_tests.query_tool_tests= .QueryToolFeatureTest)
>>> >> >> Query tool feature test
>>> >> >>
>>> >> >> ---------------------------------------= -------------------------------
>>> >> >> Traceback (most recent call last):
>>> >> >>=C2=A0 =C2=A0File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/dpage/git/pgadmin4/web/pga= dmin/feature_tests/query_tool_tests.py",
>>> >> >> line 119, in runTest
>>> >> >>=C2=A0 =C2=A0 =C2=A0self._query_tool_auto_rollback_enabled()
>>> >> >>=C2=A0 =C2=A0File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/dpage/git/pgadmin4/web/pga= dmin/feature_tests/query_tool_tests.py",
>>> >> >> line 697, in _query_tool_auto_rollback_= enabled
>>> >> >>=C2=A0 =C2=A0 =C2=A0'//div[contains(@clas= s, "sql-editor-message") and
>>> >> >> contains(string(),
>>> >> >> "COMMIT")]'
>>> >> >>=C2=A0 =C2=A0File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/dpage/.virtualenvs/pgadmin= 4/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver= .py",
>>> >> >> line 295, in find_element_by_xpath
>>> >> >>=C2=A0 =C2=A0 =C2=A0return self.find_element(= by=3DBy.XPATH, value=3Dxpath)
>>> >> >>=C2=A0 =C2=A0File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/dpage/.virtualenvs/pgadmin= 4/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver= .py",
>>> >> >> line 756, in find_element
>>> >> >>=C2=A0 =C2=A0 =C2=A0'value': value})[= 'value']
>>> >> >>=C2=A0 =C2=A0File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/dpage/.virtualenvs/pgadmin= 4/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver= .py",
>>> >> >> line 238, in execute
>>> >> >>=C2=A0 =C2=A0 =C2=A0self.error_handler.check_= response(response)
>>> >> >>=C2=A0 =C2=A0File
>>> >> >>
>>> >> >>
>>> >> >> "/Users/dpage/.virtualenvs/pgadmin= 4/lib/python2.7/site-packages/selenium/webdriver/remote/errorhand= ler.py",
>>> >> >> line 193, in check_response
>>> >> >>=C2=A0 =C2=A0 =C2=A0raise exception_class(mes= sage, screen, stacktrace)
>>> >> >> NoSuchElementException: Message: no such ele= ment: Unable to locate
>>> >> >> element: {"method":"xpath&quo= t;,"selector":"//div[contains(@class,
>>> >> >> "sql-editor-message") and contains= (string(), "COMMIT")]"}
>>> >> >>=C2=A0 =C2=A0(Session info: chrome=3D58.0.302= 9.110)
>>> >> >>=C2=A0 =C2=A0(Driver info: chromedriver=3D2.2= 9.461585
>>> >> >> (0be2cd95f834e9ee7c46bcc7cf405b483= f5ae83b),platform=3DMac OS X 10.12.3
>>> >> >> x86_64)
>>> >> >>
>>> >> > I have updated Auto rollback enabled test in thi= s patch.
>>> >> >
>>> >> >>
>>> >> >> Relevant screenshots attached.
>>> >> >>
>>> >> >> - Can you tidy up the regression output a li= ttle please? Instead of:
>>> >> >>
>>> >> >> -------
>>> >> >> runTest
>>> >> >> (pgadmin.feature_tests.query_tool_tests= .QueryToolFeatureTest)
>>> >> >> Query tool feature test ... On demand result= set on scrolling...
>>> >> >> OK.
>>> >> >>
>>> >> >> On demand result set on grid select all... >>> >> >> OK.
>>> >> >>
>>> >> >> On demand result set on column select all...=
>>> >> >> OK.
>>> >> >>
>>> >> >> Explain query...
>>> >> >> OK.
>>> >> >>
>>> >> >> Explain query with verbose...
>>> >> >> OK.
>>> >> >>
>>> >> >> Explain query with costs...
>>> >> >> OK.
>>> >> >>
>>> >> >> Explain analyze query...
>>> >> >> OK.
>>> >> >>
>>> >> >> Explain analyze query with buffers...
>>> >> >> OK.
>>> >> >>
>>> >> >> Explain analyze query with timing...
>>> >> >> OK.
>>> >> >>
>>> >> >> Auto commit disabled...
>>> >> >> OK.
>>> >> >>
>>> >> >> Auto commit enabled...
>>> >> >> OK.
>>> >> >>
>>> >> >> Auto rollback enabled...
>>> >> >> ERROR
>>> >> >> -------
>>> >> >>
>>> >> >> Something like:
>>> >> >>
>>> >> >> -------
>>> >> >> runTest
>>> >> >> (pgadmin.feature_tests.query_tool_tests= .QueryToolFeatureTest)
>>> >> >> Query tool feature test ...
>>> >> >> On demand result set on scrolling... OK.
>>> >> >> On demand result set on grid select all... O= K.
>>> >> >> On demand result set on column select all...= OK.
>>> >> >> Explain query... OK.
>>> >> >> Explain query with verbose... OK.
>>> >> >> Explain query with costs... OK.
>>> >> >> Explain analyze query... OK.
>>> >> >> Explain analyze query with buffers... OK. >>> >> >> Explain analyze query with timing... OK.
>>> >> >> Auto commit disabled... OK.
>>> >> >> Auto commit enabled... OK.
>>> >> >> Auto rollback enabled... ERROR
>>> >> >> --------
>>> >> >>
>>> >> > Fixed.
>>> >> >
>>> >> >
>>> >> >>
>>> >> >> Thanks!
>>> >> >>
>>> >> >> --
>>> >> >> Dave Page
>>> >> >> Blog: http://pgsnake.blogspot.com
>>> >> >> Twitter: @pgsnake
>>> >> >>
>>> >> >> EnterpriseDB UK: http://www.enterprisedb.c= om
>>> >> >> The Enterprise PostgreSQL Company
>>> >> >
>>> >> >
>>> >>
>>> >>
>>> >>
>>> >> --
>>> >> Dave Page
>>> >> Blog: http://pgsnake.blogspot.com
>>> >> Twitter: @pgsnake
>>> >>
>>> >> EnterpriseDB UK: http://www.enterprisedb.com >>> >> The Enterprise PostgreSQL Company
>>> >
>>> >
>>>
>>>
>>>
>>> --
>>> Dave Page
>>> Blog: http://pgsnake.blogspot.com
>>> Twitter: @pgsnake
>>>
>>> EnterpriseDB UK: http://www.enterprisedb.com
>>> The Enterprise PostgreSQL Company
>>
>>
>
>
>
> --
> Dave Page
> Blog: http://pgsnake.blogspot.com
> Twitter: @pgsnake
>
> EnterpriseDB UK: http://www.enterprisedb.com
> The Enterprise PostgreSQL Company



--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--089e08229a705d55470552d96781-- --089e08229a705d554b0552d96783 Content-Type: text/x-patch; charset="US-ASCII"; name="RM2137_query_tool_on_demand_result_V8.patch" Content-Disposition: attachment; filename="RM2137_query_tool_on_demand_result_V8.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j4dx5p410 ZGlmZiAtLWdpdCBhL3dlYi9jb25maWcucHkgYi93ZWIvY29uZmlnLnB5CmluZGV4IDZhMzEyOGUu LmU0MDIwMWQgMTAwNjQ0Ci0tLSBhL3dlYi9jb25maWcucHkKKysrIGIvd2ViL2NvbmZpZy5weQpA QCAtMzIyLDYgKzMyMiwxMiBAQCBUSFJFQURFRF9NT0RFID0gVHJ1ZQogU1FMQUxDSEVNWV9UUkFD S19NT0RJRklDQVRJT05TID0gRmFsc2UKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTnVtYmVyIG9m IHJlY29yZHMgdG8gZmV0Y2ggaW4gb25lIGJhdGNoIGluIHF1ZXJ5IHRvb2wgd2hlbiBxdWVyeSBy ZXN1bHQKKyMgc2V0IGlzIGxhcmdlLgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK09OX0RFTUFORF9SRUNP UkRfQ09VTlQgPSAxMDAwCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIExvY2FsIGNvbmZpZyBzZXR0 aW5ncwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vZmVhdHVy ZV90ZXN0cy9jb25uZWN0X3RvX3NlcnZlcl9mZWF0dXJlX3Rlc3QucHkgYi93ZWIvcGdhZG1pbi9m ZWF0dXJlX3Rlc3RzL2Nvbm5lY3RfdG9fc2VydmVyX2ZlYXR1cmVfdGVzdC5weQppbmRleCBlOGRl MTYxLi42YmVjNGFjIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9mZWF0dXJlX3Rlc3RzL2Nvbm5l Y3RfdG9fc2VydmVyX2ZlYXR1cmVfdGVzdC5weQorKysgYi93ZWIvcGdhZG1pbi9mZWF0dXJlX3Rl c3RzL2Nvbm5lY3RfdG9fc2VydmVyX2ZlYXR1cmVfdGVzdC5weQpAQCAtNyw2ICs3LDcgQEAKICMK ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjCiAKK2ltcG9ydCB0aW1lCiBmcm9tIHNlbGVuaXVtLndlYmRyaXZl ciBpbXBvcnQgQWN0aW9uQ2hhaW5zCiAKIGltcG9ydCBjb25maWcgYXMgYXBwX2NvbmZpZwpAQCAt NTMsNiArNTQsNyBAQCBjbGFzcyBDb25uZWN0c1RvU2VydmVyRmVhdHVyZVRlc3QoQmFzZUZlYXR1 cmVUZXN0KToKIAogICAgIGRlZiBfY29ubmVjdHNfdG9fc2VydmVyKHNlbGYpOgogICAgICAgICBz ZWxmLnBhZ2UuZmluZF9ieV94cGF0aCgiLy8qW0BjbGFzcz0nYWNpVHJlZVRleHQnIGFuZCAuPSdT ZXJ2ZXJzJ10iKS5jbGljaygpCisgICAgICAgIHRpbWUuc2xlZXAoMikKICAgICAgICAgc2VsZi5w YWdlLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJPYmplY3QiKS5jbGljaygpCiAg ICAgICAgIEFjdGlvbkNoYWlucyhzZWxmLnBhZ2UuZHJpdmVyKSBcCiAgICAgICAgICAgICAubW92 ZV90b19lbGVtZW50KHNlbGYucGFnZS5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgi Q3JlYXRlIikpIFwKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2ZlYXR1cmVfdGVzdHMvcGdfZGF0 YXR5cGVfdmFsaWRhdGlvbl90ZXN0LnB5IGIvd2ViL3BnYWRtaW4vZmVhdHVyZV90ZXN0cy9wZ19k YXRhdHlwZV92YWxpZGF0aW9uX3Rlc3QucHkKaW5kZXggODQ4Mzg3Ni4uMjZjNzg3YiAxMDA2NDQK LS0tIGEvd2ViL3BnYWRtaW4vZmVhdHVyZV90ZXN0cy9wZ19kYXRhdHlwZV92YWxpZGF0aW9uX3Rl c3QucHkKKysrIGIvd2ViL3BnYWRtaW4vZmVhdHVyZV90ZXN0cy9wZ19kYXRhdHlwZV92YWxpZGF0 aW9uX3Rlc3QucHkKQEAgLTYsNiArNiw3IEBACiAjIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQg dW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQogIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2ltcG9y dCB0aW1lCiBmcm9tIHNlbGVuaXVtLndlYmRyaXZlciBpbXBvcnQgQWN0aW9uQ2hhaW5zCiBmcm9t IHNlbGVuaXVtLmNvbW1vbi5leGNlcHRpb25zIGltcG9ydCBUaW1lb3V0RXhjZXB0aW9uCiBmcm9t IHNlbGVuaXVtLndlYmRyaXZlci5zdXBwb3J0LnVpIGltcG9ydCBXZWJEcml2ZXJXYWl0CkBAIC01 Niw2ICs1Nyw3IEBAIGNsYXNzIFBHRGF0YXlwZUZlYXR1cmVUZXN0KEJhc2VGZWF0dXJlVGVzdCk6 CiAgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X3hwYXRoKAogICAgICAgICAgICAgIi8vKltAY2xh c3M9J2FjaVRyZWVUZXh0JyBhbmQgLj0nU2VydmVycyddIgogICAgICAgICApLmNsaWNrKCkKKyAg ICAgICAgdGltZS5zbGVlcCgyKQogICAgICAgICBzZWxmLnBhZ2UuZHJpdmVyLmZpbmRfZWxlbWVu dF9ieV9saW5rX3RleHQoIk9iamVjdCIpLmNsaWNrKCkKICAgICAgICAgQWN0aW9uQ2hhaW5zKHNl bGYucGFnZS5kcml2ZXIpIFwKICAgICAgICAgICAgIC5tb3ZlX3RvX2VsZW1lbnQoCkBAIC0xMDYs NDUgKzEwOCwxOSBAQCBjbGFzcyBQR0RhdGF5cGVGZWF0dXJlVGVzdChCYXNlRmVhdHVyZVRlc3Qp OgogICAgICAgICBzZWxmLnBhZ2UuZmlsbF9jb2RlbWlycm9yX2FyZWFfd2l0aChxdWVyeSkKICAg ICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1mbGFzaCIpLmNsaWNrKCkKICAgICAgICAg d2FpdCA9IFdlYkRyaXZlcldhaXQoc2VsZi5wYWdlLmRyaXZlciwgNSkKLSAgICAgICAgd2FpdC51 bnRpbChFQy5wcmVzZW5jZV9vZl9lbGVtZW50X2xvY2F0ZWQoCi0gICAgICAgICAgICAoQnkuWFBB VEgsICIvLypbQGlkPScwJ10vLypbQGlkPSdkYXRhZ3JpZCddL2Rpdls1XS9kaXYvZGl2WzFdLyIK LSAgICAgICAgICAgICAgICAgICAgICAgImRpdlsyXS9zcGFuIikpKQorCisgICAgICAgIGNhbnZh cyA9IHdhaXQudW50aWwoRUMucHJlc2VuY2Vfb2ZfZWxlbWVudF9sb2NhdGVkKAorICAgICAgICAg ICAgKEJ5LkNTU19TRUxFQ1RPUiwgIiNkYXRhZ3JpZCAuc2xpY2stdmlld3BvcnQgLmdyaWQtY2Fu dmFzIikpCisgICAgICAgICkKIAogICAgICAgICAjIEZvciBldmVyeSBzYW1wbGUgZGF0YS10eXBl IHZhbHVlLCBjaGVjayB0aGUgZXhwZWN0ZWQgb3V0cHV0LgogICAgICAgICBjbnQgPSAyCi0gICAg ICAgIGZvciB2YWwgaW4gZXhwZWN0ZWRfb3V0cHV0WzoxMF06Ci0gICAgICAgICAgICB0cnk6Ci0g ICAgICAgICAgICAgICAgc291cmNlX2NvZGUgPSBzZWxmLnBhZ2UuZmluZF9ieV94cGF0aCgKLSAg ICAgICAgICAgICAgICAgICAgIi8vKltAaWQ9JzAnXS8vKltAaWQ9J2RhdGFncmlkJ10vZGl2WzVd L2Rpdi9kaXZbMV0vZGl2WyIKLSAgICAgICAgICAgICAgICAgICAgKyBzdHIoY250KQotICAgICAg ICAgICAgICAgICAgICArICJdL3NwYW4iCi0gICAgICAgICAgICAgICAgKS5nZXRfYXR0cmlidXRl KCdpbm5lckhUTUwnKQotCi0gICAgICAgICAgICAgICAgUEdEYXRheXBlRmVhdHVyZVRlc3QuY2hl Y2tfcmVzdWx0KAotICAgICAgICAgICAgICAgICAgICBzb3VyY2VfY29kZSwKLSAgICAgICAgICAg ICAgICAgICAgZXhwZWN0ZWRfb3V0cHV0W2NudCAtIDJdCi0gICAgICAgICAgICAgICAgKQotICAg ICAgICAgICAgICAgIGNudCArPSAxCi0gICAgICAgICAgICBleGNlcHQgVGltZW91dEV4Y2VwdGlv bjoKLSAgICAgICAgICAgICAgICBhc3NlcnQgRmFsc2UsICJ7MH0gZG9lcyBub3QgbWF0Y2ggd2l0 aCB7MX0iLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgdmFsLCBleHBlY3RlZF9vdXRwdXRb Y250XQotICAgICAgICAgICAgICAgICkKLQotICAgICAgICBjbnQgPSAxMgotICAgICAgICBmb3Ig dmFsIGluIGV4cGVjdGVkX291dHB1dFsxMDpdOgorICAgICAgICBjZWxscyA9IGNhbnZhcy5maW5k X2VsZW1lbnRzX2J5X2Nzc19zZWxlY3RvcignLnNsaWNrLWNlbGwnKQorICAgICAgICAjIHJlbW92 ZSBmaXJzdCBlbGVtZW50IGFzIGl0IGlzIHJvdyBudW1iZXIuCisgICAgICAgIGNlbGxzLnBvcCgw KQorICAgICAgICBmb3IgdmFsLCBjZWxsIGluIHppcChleHBlY3RlZF9vdXRwdXQsIGNlbGxzKToK ICAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICBpZiBjbnQgPT0gMTQ6Ci0gICAgICAg ICAgICAgICAgICAgIHhwYXRoID0gIi8vKltAaWQ9JzAnXS8vKltAaWQ9J2RhdGFncmlkJ10vZGl2 WzVdL2Rpdi9kaXZbMV0vZGl2WyIgXAotICAgICAgICAgICAgICAgICAgICArIHN0cihjbnQpIFwK LSAgICAgICAgICAgICAgICAgICAgKyAiXS9zcGFuIgotICAgICAgICAgICAgICAgIGVsc2U6Ci0g ICAgICAgICAgICAgICAgICAgIHhwYXRoID0gIi8vKltAaWQ9JzAnXS8vKltAaWQ9J2RhdGFncmlk J10vZGl2WzVdL2Rpdi9kaXYvZGl2WyIgXAotICAgICAgICAgICAgICAgICAgICArIHN0cihjbnQp IFwKLSAgICAgICAgICAgICAgICAgICAgKyAiXSIKLQotICAgICAgICAgICAgICAgIHNvdXJjZV9j b2RlID0gc2VsZi5wYWdlLmZpbmRfYnlfeHBhdGgoCi0gICAgICAgICAgICAgICAgICAgICB4cGF0 aAotICAgICAgICAgICAgICAgICkuZ2V0X2F0dHJpYnV0ZSgnaW5uZXJIVE1MJykKKyAgICAgICAg ICAgICAgICBzb3VyY2VfY29kZSA9IGNlbGwuZ2V0X2F0dHJpYnV0ZSgnaW5uZXJIVE1MJykKIAog ICAgICAgICAgICAgICAgIFBHRGF0YXlwZUZlYXR1cmVUZXN0LmNoZWNrX3Jlc3VsdCgKICAgICAg ICAgICAgICAgICAgICAgc291cmNlX2NvZGUsCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9mZWF0 dXJlX3Rlc3RzL3F1ZXJ5X3Rvb2xfdGVzdHMucHkgYi93ZWIvcGdhZG1pbi9mZWF0dXJlX3Rlc3Rz L3F1ZXJ5X3Rvb2xfdGVzdHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u NTIwZjQxZQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2ZlYXR1cmVfdGVzdHMvcXVl cnlfdG9vbF90ZXN0cy5weQpAQCAtMCwwICsxLDc2MSBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMK KyMgcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMg LSAyMDE3LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29mdHdhcmUgaXMg cmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorIworIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKKworZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgoraW1wb3J0IHRpbWUK K2ltcG9ydCBzeXMKK2ltcG9ydCBjb25maWcKK2Zyb20gc2VsZW5pdW0ud2ViZHJpdmVyIGltcG9y dCBBY3Rpb25DaGFpbnMKK2Zyb20gc2VsZW5pdW0ud2ViZHJpdmVyLnN1cHBvcnQudWkgaW1wb3J0 IFdlYkRyaXZlcldhaXQKK2Zyb20gc2VsZW5pdW0ud2ViZHJpdmVyLnN1cHBvcnQgaW1wb3J0IGV4 cGVjdGVkX2NvbmRpdGlvbnMgYXMgRUMKK2Zyb20gc2VsZW5pdW0ud2ViZHJpdmVyLmNvbW1vbi5i eSBpbXBvcnQgQnkKK2Zyb20gcmVncmVzc2lvbi5weXRob25fdGVzdF91dGlscyBpbXBvcnQgdGVz dF91dGlscworZnJvbSByZWdyZXNzaW9uLmZlYXR1cmVfdXRpbHMuYmFzZV9mZWF0dXJlX3Rlc3Qg aW1wb3J0IEJhc2VGZWF0dXJlVGVzdAorCisKK2NsYXNzIFF1ZXJ5VG9vbEZlYXR1cmVUZXN0KEJh c2VGZWF0dXJlVGVzdCk6CisgICAgIiIiCisgICAgICAgIFRoaXMgZmVhdHVyZSB0ZXN0IHdpbGwg dGVzdCB0aGUgZGlmZmVyZW50IHF1ZXJ5IHRvb2wgZmVhdHVyZXMuCisgICAgIiIiCisKKyAgICBz Y2VuYXJpb3MgPSBbCisgICAgICAgICgiUXVlcnkgdG9vbCBmZWF0dXJlIHRlc3QiLCBkaWN0KCkp CisgICAgXQorCisgICAgZGVmIGJlZm9yZShzZWxmKToKKyAgICAgICAgY29ubmVjdGlvbiA9IHRl c3RfdXRpbHMuZ2V0X2RiX2Nvbm5lY3Rpb24oc2VsZi5zZXJ2ZXJbJ2RiJ10sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyWyd1c2Vy bmFtZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzZWxmLnNlcnZlclsnZGJfcGFzc3dvcmQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJbJ2hvc3QnXSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJbJ3BvcnQn XSkKKyAgICAgICAgdGVzdF91dGlscy5kcm9wX2RhdGFiYXNlKGNvbm5lY3Rpb24sICJhY2NlcHRh bmNlX3Rlc3RfZGIiKQorICAgICAgICB0ZXN0X3V0aWxzLmNyZWF0ZV9kYXRhYmFzZShzZWxmLnNl cnZlciwgImFjY2VwdGFuY2VfdGVzdF9kYiIpCisgICAgICAgIHNlbGYucGFnZS53YWl0X2Zvcl9z cGlubmVyX3RvX2Rpc2FwcGVhcigpCisgICAgICAgIHNlbGYuX2Nvbm5lY3RzX3RvX3NlcnZlcigp CisgICAgICAgIHNlbGYuX2xvY2F0ZV9kYXRhYmFzZV90cmVlX25vZGUoKQorICAgICAgICBzZWxm LnBhZ2Uub3Blbl9xdWVyeV90b29sKCkKKyAgICAgICAgc2VsZi5wYWdlLmRyaXZlci5zd2l0Y2hf dG9fZnJhbWUoCisgICAgICAgICAgICBzZWxmLnBhZ2UuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV90 YWdfbmFtZSgiaWZyYW1lIikKKyAgICAgICAgKQorCisgICAgZGVmIHJ1blRlc3Qoc2VsZik6Cisg ICAgICAgICMgb24gZGVtYW5kIHJlc3VsdCBzZXQgb24gc2Nyb2xsaW5nLgorICAgICAgICBwcmlu dCgiXG5PbiBkZW1hbmQgcmVzdWx0IHNldCBvbiBzY3JvbGxpbmcuLi4gIiwKKyAgICAgICAgICAg ICAgZmlsZT1zeXMuc3RkZXJyLCBlbmQ9IiIpCisgICAgICAgIHNlbGYuX29uX2RlbWFuZF9yZXN1 bHQoKQorICAgICAgICBwcmludCgiT0suIiwKKyAgICAgICAgICAgICAgZmlsZT1zeXMuc3RkZXJy KQorICAgICAgICBzZWxmLl9jbGVhcl9xdWVyeV90b29sKCkKKworICAgICAgICAjIG9uIGRlbWFu ZCByZXN1bHQgc2V0IG9uIGdyaWQgc2VsZWN0IGFsbC4KKyAgICAgICAgcHJpbnQoIk9uIGRlbWFu ZCByZXN1bHQgc2V0IG9uIGdyaWQgc2VsZWN0IGFsbC4uLiAiLAorICAgICAgICAgICAgICBmaWxl PXN5cy5zdGRlcnIsIGVuZD0iIikKKyAgICAgICAgc2VsZi5fb25fZGVtYW5kX3Jlc3VsdF9zZWxl Y3RfYWxsX2dyaWQoKQorICAgICAgICBwcmludCgiT0suIiwKKyAgICAgICAgICAgICAgZmlsZT1z eXMuc3RkZXJyKQorICAgICAgICBzZWxmLl9jbGVhcl9xdWVyeV90b29sKCkKKworICAgICAgICAj IG9uIGRlbWFuZCByZXN1bHQgc2V0IG9uIGNvbHVtbiBzZWxlY3QgYWxsLgorICAgICAgICBwcmlu dCgiT24gZGVtYW5kIHJlc3VsdCBzZXQgb24gY29sdW1uIHNlbGVjdCBhbGwuLi4gIiwKKyAgICAg ICAgICAgICAgZmlsZT1zeXMuc3RkZXJyLCBlbmQ9IiIpCisgICAgICAgIHNlbGYuX29uX2RlbWFu ZF9yZXN1bHRfc2VsZWN0X2FsbF9jb2x1bW4oKQorICAgICAgICBwcmludCgiT0suIiwKKyAgICAg ICAgICAgICAgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBzZWxmLl9jbGVhcl9xdWVyeV90b29s KCkKKworICAgICAgICAjIGV4cGxhaW4gcXVlcnkKKyAgICAgICAgcHJpbnQoIkV4cGxhaW4gcXVl cnkuLi4gIiwgZmlsZT1zeXMuc3RkZXJyLCBlbmQ9IiIpCisgICAgICAgIHNlbGYuX3F1ZXJ5X3Rv b2xfZXhwbGFpbigpCisgICAgICAgIHByaW50KCJPSy4iLCBmaWxlPXN5cy5zdGRlcnIpCisgICAg ICAgIHNlbGYuX2NsZWFyX3F1ZXJ5X3Rvb2woKQorCisgICAgICAgICMgZXhwbGFpbiBxdWVyeSB3 aXRoIHZlcmJvc2UKKyAgICAgICAgcHJpbnQoIkV4cGxhaW4gcXVlcnkgd2l0aCB2ZXJib3NlLi4u ICIsIGZpbGU9c3lzLnN0ZGVyciwgZW5kPSIiKQorICAgICAgICBzZWxmLl9xdWVyeV90b29sX2V4 cGxhaW5fdmVyYm9zZSgpCisgICAgICAgIHByaW50KCJPSy4iLCBmaWxlPXN5cy5zdGRlcnIpCisg ICAgICAgIHNlbGYuX2NsZWFyX3F1ZXJ5X3Rvb2woKQorCisgICAgICAgICMgZXhwbGFpbiBxdWVy eSB3aXRoIGNvc3RzCisgICAgICAgIHByaW50KCJFeHBsYWluIHF1ZXJ5IHdpdGggY29zdHMuLi4g IiwgZmlsZT1zeXMuc3RkZXJyLCBlbmQ9IiIpCisgICAgICAgIHNlbGYuX3F1ZXJ5X3Rvb2xfZXhw bGFpbl9jb3N0KCkKKyAgICAgICAgcHJpbnQoIk9LLiIsIGZpbGU9c3lzLnN0ZGVycikKKyAgICAg ICAgc2VsZi5fY2xlYXJfcXVlcnlfdG9vbCgpCisKKyAgICAgICAgIyBleHBsYWluIGFuYWx5emUg cXVlcnkKKyAgICAgICAgcHJpbnQoIkV4cGxhaW4gYW5hbHl6ZSBxdWVyeS4uLiAiLCBmaWxlPXN5 cy5zdGRlcnIsIGVuZD0iIikKKyAgICAgICAgc2VsZi5fcXVlcnlfdG9vbF9leHBsYWluX2FuYWx5 emUoKQorICAgICAgICBwcmludCgiT0suIiwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBzZWxm Ll9jbGVhcl9xdWVyeV90b29sKCkKKworICAgICAgICAjIGV4cGxhaW4gYW5hbHl6ZSBxdWVyeSB3 aXRoIGJ1ZmZlcnMKKyAgICAgICAgcHJpbnQoIkV4cGxhaW4gYW5hbHl6ZSBxdWVyeSB3aXRoIGJ1 ZmZlcnMuLi4gIiwgZmlsZT1zeXMuc3RkZXJyLCBlbmQ9IiIpCisgICAgICAgIHNlbGYuX3F1ZXJ5 X3Rvb2xfZXhwbGFpbl9hbmFseXplX2J1ZmZlcnMoKQorICAgICAgICBwcmludCgiT0suIiwgZmls ZT1zeXMuc3RkZXJyKQorICAgICAgICBzZWxmLl9jbGVhcl9xdWVyeV90b29sKCkKKworICAgICAg ICAjIGV4cGxhaW4gYW5hbHl6ZSBxdWVyeSB3aXRoIHRpbWluZworICAgICAgICBwcmludCgiRXhw bGFpbiBhbmFseXplIHF1ZXJ5IHdpdGggdGltaW5nLi4uICIsIGZpbGU9c3lzLnN0ZGVyciwgZW5k PSIiKQorICAgICAgICBzZWxmLl9xdWVyeV90b29sX2V4cGxhaW5fYW5hbHl6ZV90aW1pbmcoKQor ICAgICAgICBwcmludCgiT0suIiwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBzZWxmLl9jbGVh cl9xdWVyeV90b29sKCkKKworICAgICAgICAjIGF1dG8gY29tbWl0IGRpc2FibGVkLgorICAgICAg ICBwcmludCgiQXV0byBjb21taXQgZGlzYWJsZWQuLi4gIiwgZmlsZT1zeXMuc3RkZXJyLCBlbmQ9 IiIpCisgICAgICAgIHNlbGYuX3F1ZXJ5X3Rvb2xfYXV0b19jb21taXRfZGlzYWJsZWQoKQorICAg ICAgICBwcmludCgiT0suIiwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBzZWxmLl9jbGVhcl9x dWVyeV90b29sKCkKKworICAgICAgICAjIGF1dG8gY29tbWl0IGVuYWJsZWQuCisgICAgICAgIHBy aW50KCJBdXRvIGNvbW1pdCBlbmFibGVkLi4uICIsIGZpbGU9c3lzLnN0ZGVyciwgZW5kPSIiKQor ICAgICAgICBzZWxmLl9xdWVyeV90b29sX2F1dG9fY29tbWl0X2VuYWJsZWQoKQorICAgICAgICBw cmludCgiT0suIiwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBzZWxmLl9jbGVhcl9xdWVyeV90 b29sKCkKKworICAgICAgICAjIGF1dG8gcm9sbGJhY2sgZW5hYmxlZC4KKyAgICAgICAgcHJpbnQo IkF1dG8gcm9sbGJhY2sgZW5hYmxlZC4uLiIsIGZpbGU9c3lzLnN0ZGVyciwgZW5kPSIiKQorICAg ICAgICBzZWxmLl9xdWVyeV90b29sX2F1dG9fcm9sbGJhY2tfZW5hYmxlZCgpCisgICAgICAgIHBy aW50KCIgT0suIiwgZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICBzZWxmLl9jbGVhcl9xdWVyeV90 b29sKCkKKworICAgICAgICAjIGNhbmNlbCBxdWVyeS4KKyAgICAgICAgcHJpbnQoIkNhbmNlbCBx dWVyeS4uLiAiLCBmaWxlPXN5cy5zdGRlcnIsIGVuZD0iIikKKyAgICAgICAgc2VsZi5fcXVlcnlf dG9vbF9jYW5jZWxfcXVlcnkoKQorICAgICAgICBwcmludCgiT0suIiwgZmlsZT1zeXMuc3RkZXJy KQorICAgICAgICBzZWxmLl9jbGVhcl9xdWVyeV90b29sKCkKKworICAgIGRlZiBhZnRlcihzZWxm KToKKyAgICAgICAgc2VsZi5wYWdlLnJlbW92ZV9zZXJ2ZXIoc2VsZi5zZXJ2ZXIpCisgICAgICAg IGNvbm5lY3Rpb24gPSB0ZXN0X3V0aWxzLmdldF9kYl9jb25uZWN0aW9uKHNlbGYuc2VydmVyWydk YiddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz ZWxmLnNlcnZlclsndXNlcm5hbWUnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2VsZi5zZXJ2ZXJbJ2RiX3Bhc3N3b3JkJ10sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VydmVyWydob3N0 J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl bGYuc2VydmVyWydwb3J0J10pCisgICAgICAgIHRlc3RfdXRpbHMuZHJvcF9kYXRhYmFzZShjb25u ZWN0aW9uLCAiYWNjZXB0YW5jZV90ZXN0X2RiIikKKworICAgIGRlZiBfY29ubmVjdHNfdG9fc2Vy dmVyKHNlbGYpOgorICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV94cGF0aCgKKyAgICAgICAgICAg ICIvLypbQGNsYXNzPSdhY2lUcmVlVGV4dCcgYW5kIC49J1NlcnZlcnMnXSIpLmNsaWNrKCkKKyAg ICAgICAgdGltZS5zbGVlcCgyKQorICAgICAgICBzZWxmLnBhZ2UuZHJpdmVyLmZpbmRfZWxlbWVu dF9ieV9saW5rX3RleHQoIk9iamVjdCIpLmNsaWNrKCkKKyAgICAgICAgQWN0aW9uQ2hhaW5zKHNl bGYucGFnZS5kcml2ZXIpIFwKKyAgICAgICAgICAgIC5tb3ZlX3RvX2VsZW1lbnQoCisgICAgICAg ICAgICBzZWxmLnBhZ2UuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV9saW5rX3RleHQoIkNyZWF0ZSIp KVwKKyAgICAgICAgICAgIC5wZXJmb3JtKCkKKyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfcGFy dGlhbF9saW5rX3RleHQoIlNlcnZlci4uLiIpLmNsaWNrKCkKKworICAgICAgICBzZXJ2ZXJfY29u ZmlnID0gc2VsZi5zZXJ2ZXIKKyAgICAgICAgc2VsZi5wYWdlLmZpbGxfaW5wdXRfYnlfZmllbGRf bmFtZSgibmFtZSIsIHNlcnZlcl9jb25maWdbJ25hbWUnXSkKKyAgICAgICAgc2VsZi5wYWdlLmZp bmRfYnlfcGFydGlhbF9saW5rX3RleHQoIkNvbm5lY3Rpb24iKS5jbGljaygpCisgICAgICAgIHNl bGYucGFnZS5maWxsX2lucHV0X2J5X2ZpZWxkX25hbWUoImhvc3QiLCBzZXJ2ZXJfY29uZmlnWydo b3N0J10pCisgICAgICAgIHNlbGYucGFnZS5maWxsX2lucHV0X2J5X2ZpZWxkX25hbWUoInBvcnQi LCBzZXJ2ZXJfY29uZmlnWydwb3J0J10pCisgICAgICAgIHNlbGYucGFnZS5maWxsX2lucHV0X2J5 X2ZpZWxkX25hbWUoCisgICAgICAgICAgICAidXNlcm5hbWUiLAorICAgICAgICAgICAgc2VydmVy X2NvbmZpZ1sndXNlcm5hbWUnXQorICAgICAgICApCisgICAgICAgIHNlbGYucGFnZS5maWxsX2lu cHV0X2J5X2ZpZWxkX25hbWUoCisgICAgICAgICAgICAicGFzc3dvcmQiLAorICAgICAgICAgICAg c2VydmVyX2NvbmZpZ1snZGJfcGFzc3dvcmQnXQorICAgICAgICApCisgICAgICAgIHNlbGYucGFn ZS5maW5kX2J5X3hwYXRoKCIvL2J1dHRvbltjb250YWlucyguLCdTYXZlJyldIikuY2xpY2soKQor CisgICAgZGVmIF9sb2NhdGVfZGF0YWJhc2VfdHJlZV9ub2RlKHNlbGYpOgorICAgICAgICBzZWxm LnBhZ2UudG9nZ2xlX29wZW5fdHJlZV9pdGVtKHNlbGYuc2VydmVyWyduYW1lJ10pCisgICAgICAg IHNlbGYucGFnZS50b2dnbGVfb3Blbl90cmVlX2l0ZW0oJ0RhdGFiYXNlcycpCisgICAgICAgIHNl bGYucGFnZS50b2dnbGVfb3Blbl90cmVlX2l0ZW0oJ2FjY2VwdGFuY2VfdGVzdF9kYicpCisKKyAg ICBkZWYgX29wZW5fcXVlcnlfdG9vbChzZWxmKToKKyAgICAgICAgc2VsZi5wYWdlLmRyaXZlci5m aW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJUb29scyIpLmNsaWNrKCkKKworICAgICAgICB0b29s c19tZW51ID0gc2VsZi5wYWdlLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfaWQoJ21udV90b29scycp CisKKyAgICAgICAgIyBRdWVyeSBUb29sIGlzIGZpcnN0IGxpCisgICAgICAgIHF1ZXJ5X3Rvb2wg PSB0b29sc19tZW51LmZpbmRfZWxlbWVudF9ieV90YWdfbmFtZSgnbGknKQorCisgICAgICAgIHQg PSB0aW1lLnRpbWUoKQorICAgICAgICAjIHdhaXQgdW50aWwgUXVlcnkgVG9vbCBtZW51IGJlY29t ZXMgZW5hYmxlZC4KKyAgICAgICAgd2hpbGUgdGltZS50aW1lKCkgLSB0IDwgMjA6ICAjIDIwIHNl Y29uZHMKKyAgICAgICAgICAgICMgaWYgbWVudSBpcyBkaXNhYmxlZCB0aGVuIGl0IHdpbGwgaGF2 ZQorICAgICAgICAgICAgIyB0d28gY2xhc3NlcyAnbWVudS1pdGVtIGRpc2FibGVkJy4KKyAgICAg ICAgICAgICMgQW5kIGlmIG1lbnUgaXMgZW5hYmxlZCB0aGUgaXQgd2lsbCBoYXZlCisgICAgICAg ICAgICAjIG9ubHkgb25lIGNsYXNzICdtZW51LWl0ZW0nLgorICAgICAgICAgICAgaWYgJ21lbnUt aXRlbScgPT0gc3RyKHF1ZXJ5X3Rvb2wuZ2V0X2F0dHJpYnV0ZSgnY2xhc3MnKSk6CisgICAgICAg ICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIHRpbWUuc2xlZXAoMC4xKQorICAgICAgICBlbHNl OgorICAgICAgICAgICAgYXNzZXJ0IEZhbHNlLCAiJ1Rvb2xzIC0+IFF1ZXJ5IFRvb2wnIG1lbnUg ZGlkIG5vdCBlbmFibGUuIgorCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X3BhcnRpYWxfbGlu a190ZXh0KCJRdWVyeSBUb29sIikuY2xpY2soKQorICAgICAgICBzZWxmLnBhZ2UuY2xpY2tfdGFi KCdRdWVyeSAtJykKKworICAgIGRlZiBfY2xlYXJfcXVlcnlfdG9vbChzZWxmKToKKyAgICAgICAg IyBjbGVhciBjb2RlbWlycm9yLgorICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLWVk aXQiKS5jbGljaygpCisgICAgICAgICMgd2FpdCBmb3IgYWxlcnRpZnkgZGlhbG9nIG9wZW4gYW5p bWF0aW9uIHRvIGNvbXBsZXRlLgorICAgICAgICB0aW1lLnNsZWVwKDEpCisKKyAgICAgICAgc2Vs Zi5wYWdlLmNsaWNrX2VsZW1lbnQoc2VsZi5wYWdlLmZpbmRfYnlfeHBhdGgoIi8vYnV0dG9uW2Nv bnRhaW5zKC4sJ1llcycpXSIpKQorICAgICAgICAjIHdhaXQgZm9yIGFsZXJ0aWZ5IGRpYWxvZyBj bG9zZSBhbmltYXRpb24gdG8gY29tcGxldGUuCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAg IGRlZiBfb25fZGVtYW5kX3Jlc3VsdChzZWxmKToKKyAgICAgICAgT05fREVNQU5EX0NIVU5LUyA9 IDIKKyAgICAgICAgcXVlcnkgPSAiIiItLSBPbiBkZW1hbmQgcXVlcnkgcmVzdWx0IG9uIHNjcm9s bAorU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCB7fSkgYXMgaWQiIiIuZm9ybWF0KAorICAgICAg ICAgICAgY29uZmlnLk9OX0RFTUFORF9SRUNPUkRfQ09VTlQgKiBPTl9ERU1BTkRfQ0hVTktTKQor CisgICAgICAgIHdhaXQgPSBXZWJEcml2ZXJXYWl0KHNlbGYucGFnZS5kcml2ZXIsIDEwKQorICAg ICAgICBzZWxmLnBhZ2UuZmlsbF9jb2RlbWlycm9yX2FyZWFfd2l0aChxdWVyeSkKKworICAgICAg ICBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLWZsYXNoIikuY2xpY2soKQorCisgICAgICAgIHNl bGYucGFnZS53YWl0X2Zvcl9xdWVyeV90b29sX2xvYWRpbmdfaW5kaWNhdG9yX3RvX2Rpc2FwcGVh cigpCisKKyAgICAgICAgY2FudmFzID0gd2FpdC51bnRpbChFQy5wcmVzZW5jZV9vZl9lbGVtZW50 X2xvY2F0ZWQoCisgICAgICAgICAgICAoQnkuQ1NTX1NFTEVDVE9SLCAiI2RhdGFncmlkIC5zbGlj ay12aWV3cG9ydCAuZ3JpZC1jYW52YXMiKSkpCisKKyAgICAgICAgIyBzY3JvbGwgdG8gYm90dG9t IHRvIGZldGNoIG5leHQgY2h1bmsgb2YgcmVzdWx0IHNldC4KKyAgICAgICAgc2VsZi5kcml2ZXIu ZXhlY3V0ZV9zY3JpcHQoCisgICAgICAgICAgICAiJCgnLnNsaWNrLXZpZXdwb3J0Jykuc2Nyb2xs VG9wKCQoJy5ncmlkLWNhbnZhcycpLmhlaWdodCgpKTsiCisgICAgICAgICkKKworICAgICAgICAj IHdhaXQgZm9yIGFqYXggdG8gY29tcGxldGUuCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKworICAg ICAgICAjIGFnYWluIHNjcm9sbCB0byBib3R0b20gdG8gYnJpbmcgbGFzdCByb3cgb2YgbmV4dCBj aHVuayBpbgorICAgICAgICAjIHZpZXdwb3J0LgorICAgICAgICBzZWxmLmRyaXZlci5leGVjdXRl X3NjcmlwdCgKKyAgICAgICAgICAgICIkKCcuc2xpY2stdmlld3BvcnQnKS5zY3JvbGxUb3AoJCgn LmdyaWQtY2FudmFzJykuaGVpZ2h0KCkpOyIKKyAgICAgICAgKQorCisgICAgICAgIHJvd19pZF90 b19maW5kID0gY29uZmlnLk9OX0RFTUFORF9SRUNPUkRfQ09VTlQgKiBPTl9ERU1BTkRfQ0hVTktT CisKKyAgICAgICAgY2FudmFzLmZpbmRfZWxlbWVudF9ieV94cGF0aCgKKyAgICAgICAgICAgICcv L3NwYW5bdGV4dCgpPSJ7fSJdJy5mb3JtYXQocm93X2lkX3RvX2ZpbmQpCisgICAgICAgICkKKwor ICAgIGRlZiBfb25fZGVtYW5kX3Jlc3VsdF9zZWxlY3RfYWxsX2dyaWQoc2VsZik6CisgICAgICAg IE9OX0RFTUFORF9DSFVOS1MgPSAzCisgICAgICAgIHF1ZXJ5ID0gIiIiLS0gT24gZGVtYW5kIHF1 ZXJ5IHJlc3VsdCBvbiBncmlkIHNlbGVjdCBhbGwKK1NFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwg e30pIGFzIGlkIiIiLmZvcm1hdCgKKyAgICAgICAgICAgIGNvbmZpZy5PTl9ERU1BTkRfUkVDT1JE X0NPVU5UICogT05fREVNQU5EX0NIVU5LUykKKworICAgICAgICB3YWl0ID0gV2ViRHJpdmVyV2Fp dChzZWxmLnBhZ2UuZHJpdmVyLCAxMCkKKworICAgICAgICBzZWxmLnBhZ2UuZmlsbF9jb2RlbWly cm9yX2FyZWFfd2l0aChxdWVyeSkKKworICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRu LWZsYXNoIikuY2xpY2soKQorCisgICAgICAgIHNlbGYucGFnZS53YWl0X2Zvcl9xdWVyeV90b29s X2xvYWRpbmdfaW5kaWNhdG9yX3RvX2Rpc2FwcGVhcigpCisKKyAgICAgICAgd2FpdC51bnRpbChF Qy5wcmVzZW5jZV9vZl9lbGVtZW50X2xvY2F0ZWQoCisgICAgICAgICAgICAoQnkuQ1NTX1NFTEVD VE9SLCAiLnNsaWNrLWhlYWRlci1jb2x1bW4iKSkpLmNsaWNrKCkKKworICAgICAgICAjIHdhaXQg Zm9yIHVudGlsIGFsbCByZWNvcmRzIGFyZSBmZXRjaGVkIGFuZCBzZWxlY3RlZC4KKyAgICAgICAg dGltZS5zbGVlcCgxKQorICAgICAgICAjIHNjcm9sbCB0byBib3R0b20gdG8gYnJpbmcgbGFzdCBy b3cgb2YgbmV4dCBjaHVuayBpbgorICAgICAgICAjIHZpZXdwb3J0LgorICAgICAgICBzZWxmLmRy aXZlci5leGVjdXRlX3NjcmlwdCgKKyAgICAgICAgICAgICIkKCcuc2xpY2stdmlld3BvcnQnKS5z Y3JvbGxUb3AoJCgnLmdyaWQtY2FudmFzJykuaGVpZ2h0KCkpOyIKKyAgICAgICAgKQorCisgICAg ICAgIGNhbnZhcyA9IHdhaXQudW50aWwoRUMucHJlc2VuY2Vfb2ZfZWxlbWVudF9sb2NhdGVkKAor ICAgICAgICAgICAgKEJ5LkNTU19TRUxFQ1RPUiwgIiNkYXRhZ3JpZCAuc2xpY2stdmlld3BvcnQg LmdyaWQtY2FudmFzIikpCisgICAgICAgICkKKworICAgICAgICByb3dfaWRfdG9fZmluZCA9IGNv bmZpZy5PTl9ERU1BTkRfUkVDT1JEX0NPVU5UICogT05fREVNQU5EX0NIVU5LUworCisgICAgICAg IGNhbnZhcy5maW5kX2VsZW1lbnRfYnlfeHBhdGgoCisgICAgICAgICAgICAnLy9zcGFuW3RleHQo KT0ie30iXScuZm9ybWF0KHJvd19pZF90b19maW5kKQorICAgICAgICApCisKKyAgICBkZWYgX29u X2RlbWFuZF9yZXN1bHRfc2VsZWN0X2FsbF9jb2x1bW4oc2VsZik6CisgICAgICAgIE9OX0RFTUFO RF9DSFVOS1MgPSA0CisgICAgICAgIHF1ZXJ5ID0gIiIiLS0gT24gZGVtYW5kIHF1ZXJ5IHJlc3Vs dCBvbiBjb2x1bW4gc2VsZWN0IGFsbAorU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCB7fSkgYXMg aWQxLCAnZHVtbXknIGFzIGlkMiIiIi5mb3JtYXQoCisgICAgICAgICAgICBjb25maWcuT05fREVN QU5EX1JFQ09SRF9DT1VOVCAqIE9OX0RFTUFORF9DSFVOS1MpCisKKyAgICAgICAgd2FpdCA9IFdl YkRyaXZlcldhaXQoc2VsZi5wYWdlLmRyaXZlciwgMTApCisKKyAgICAgICAgc2VsZi5wYWdlLmZp bGxfY29kZW1pcnJvcl9hcmVhX3dpdGgocXVlcnkpCisKKyAgICAgICAgc2VsZi5wYWdlLmZpbmRf YnlfaWQoImJ0bi1mbGFzaCIpLmNsaWNrKCkKKworICAgICAgICBzZWxmLnBhZ2Uud2FpdF9mb3Jf cXVlcnlfdG9vbF9sb2FkaW5nX2luZGljYXRvcl90b19kaXNhcHBlYXIoKQorCisgICAgICAgICMg Y2xpY2sgb24gZmlyc3QgZGF0YSBjb2x1bW4gdG8gc2VsZWN0IGFsbCBjb2x1bW4uCisKKyAgICAg ICAgd2FpdC51bnRpbChFQy5wcmVzZW5jZV9vZl9lbGVtZW50X2xvY2F0ZWQoCisgICAgICAgICAg KAorICAgICAgICAgICAgQnkuWFBBVEgsCisgICAgICAgICAgICAiLy9zcGFuW2NvbnRhaW5zKEBj bGFzcywgJ2NvbHVtbi1uYW1lJykgYW5kIGNvbnRhaW5zKC4sICdpZDEnKV0iKSkKKyAgICAgICAg KS5jbGljaygpCisKKyAgICAgICAgIyB3YWl0IGZvciB1bnRpbCBhbGwgcmVjb3JkcyBhcmUgZmV0 Y2hlZCBhbmQgc2VsZWN0ZWQuCisgICAgICAgIHRpbWUuc2xlZXAoMSkKKyAgICAgICAgIyBzY3Jv bGwgdG8gYm90dG9tIHRvIGJyaW5nIGxhc3Qgcm93IG9mIG5leHQgY2h1bmsgaW4KKyAgICAgICAg IyB2aWV3cG9ydC4KKyAgICAgICAgc2VsZi5kcml2ZXIuZXhlY3V0ZV9zY3JpcHQoCisgICAgICAg ICAgICAiJCgnLnNsaWNrLXZpZXdwb3J0Jykuc2Nyb2xsVG9wKCQoJy5ncmlkLWNhbnZhcycpLmhl aWdodCgpKTsiCisgICAgICAgICkKKworICAgICAgICBjYW52YXMgPSB3YWl0LnVudGlsKEVDLnBy ZXNlbmNlX29mX2VsZW1lbnRfbG9jYXRlZCgKKyAgICAgICAgICAgIChCeS5DU1NfU0VMRUNUT1Is ICIjZGF0YWdyaWQgLnNsaWNrLXZpZXdwb3J0IC5ncmlkLWNhbnZhcyIpKQorICAgICAgICApCisK KyAgICAgICAgcm93X2lkX3RvX2ZpbmQgPSBjb25maWcuT05fREVNQU5EX1JFQ09SRF9DT1VOVCAq IE9OX0RFTUFORF9DSFVOS1MKKworICAgICAgICBjYW52YXMuZmluZF9lbGVtZW50X2J5X3hwYXRo KAorICAgICAgICAgICAgJy8vc3Bhblt0ZXh0KCk9Int9Il0nLmZvcm1hdChyb3dfaWRfdG9fZmlu ZCkKKyAgICAgICAgKQorCisgICAgZGVmIF9xdWVyeV90b29sX2V4cGxhaW4oc2VsZik6CisgICAg ICAgIHF1ZXJ5ID0gIiIiLS0gRXhwbGFpbiBxdWVyeQorU0VMRUNUIGdlbmVyYXRlX3Nlcmllcygx LCAxMDAwKSBhcyBpZCBvcmRlciBieSBpZCBkZXNjIiIiCisKKyAgICAgICAgd2FpdCA9IFdlYkRy aXZlcldhaXQoc2VsZi5wYWdlLmRyaXZlciwgMTApCisKKyAgICAgICAgc2VsZi5wYWdlLmZpbGxf Y29kZW1pcnJvcl9hcmVhX3dpdGgocXVlcnkpCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lk KCJidG4tcXVlcnktZHJvcGRvd24iKS5jbGljaygpCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5 X2lkKCJidG4tZXhwbGFpbiIpLmNsaWNrKCkKKworICAgICAgICBzZWxmLnBhZ2Uud2FpdF9mb3Jf cXVlcnlfdG9vbF9sb2FkaW5nX2luZGljYXRvcl90b19kaXNhcHBlYXIoKQorCisgICAgICAgIHNl bGYucGFnZS5jbGlja190YWIoJ0RhdGEgT3V0cHV0JykKKworICAgICAgICBjYW52YXMgPSB3YWl0 LnVudGlsKEVDLnByZXNlbmNlX29mX2VsZW1lbnRfbG9jYXRlZCgKKyAgICAgICAgICAgIChCeS5D U1NfU0VMRUNUT1IsICIjZGF0YWdyaWQgLnNsaWNrLXZpZXdwb3J0IC5ncmlkLWNhbnZhcyIpKQor ICAgICAgICApCisgICAgICAgICMgU2VhcmNoIGZvciBQbGFuIHdvcmQgaW4gcmVzdWx0CisgICAg ICAgIGNhbnZhcy5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltjb250YWlucyhzdHJpbmcoKSwn UGxhbicpXSIpCisKKyAgICBkZWYgX3F1ZXJ5X3Rvb2xfZXhwbGFpbl92ZXJib3NlKHNlbGYpOgor ICAgICAgICBxdWVyeSA9ICIiIi0tIEV4cGxhaW4gcXVlcnkgd2l0aCB2ZXJib3NlCitTRUxFQ1Qg Z2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApIGFzIGlkIG9yZGVyIGJ5IGlkIGRlc2MiIiIKKworICAg ICAgICB3YWl0ID0gV2ViRHJpdmVyV2FpdChzZWxmLnBhZ2UuZHJpdmVyLCAxMCkKKworICAgICAg ICBzZWxmLnBhZ2UuZmlsbF9jb2RlbWlycm9yX2FyZWFfd2l0aChxdWVyeSkKKworICAgICAgICBx dWVyeV9vcCA9IHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tcXVlcnktZHJvcGRvd24iKQorICAg ICAgICBxdWVyeV9vcC5jbGljaygpCisKKyAgICAgICAgQWN0aW9uQ2hhaW5zKHNlbGYuZHJpdmVy KS5tb3ZlX3RvX2VsZW1lbnQoCisgICAgICAgICAgICBxdWVyeV9vcC5maW5kX2VsZW1lbnRfYnlf eHBhdGgoCisgICAgICAgICAgICAgICAgIi8vbGlbY29udGFpbnMoLiwnRXhwbGFpbiBPcHRpb25z JyldIikpLnBlcmZvcm0oKQorCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tZXhw bGFpbi12ZXJib3NlIikuY2xpY2soKQorCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lkKCJi dG4tZXhwbGFpbiIpLmNsaWNrKCkKKworICAgICAgICBzZWxmLnBhZ2Uud2FpdF9mb3JfcXVlcnlf dG9vbF9sb2FkaW5nX2luZGljYXRvcl90b19kaXNhcHBlYXIoKQorCisgICAgICAgIHNlbGYucGFn ZS5jbGlja190YWIoJ0RhdGEgT3V0cHV0JykKKworICAgICAgICBjYW52YXMgPSB3YWl0LnVudGls KEVDLnByZXNlbmNlX29mX2VsZW1lbnRfbG9jYXRlZCgKKyAgICAgICAgICAgIChCeS5DU1NfU0VM RUNUT1IsICIjZGF0YWdyaWQgLnNsaWNrLXZpZXdwb3J0IC5ncmlkLWNhbnZhcyIpKQorICAgICAg ICApCisgICAgICAgICMgU2VhcmNoIGZvciAnT3V0cHV0JyB3b3JkIGluIHJlc3VsdAorICAgICAg ICBjYW52YXMuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbY29udGFpbnMoc3RyaW5nKCksICdP dXRwdXQnKV0iKQorCisgICAgZGVmIF9xdWVyeV90b29sX2V4cGxhaW5fY29zdChzZWxmKToKKyAg ICAgICAgcXVlcnkgPSAiIiItLSBFeHBsYWluIHF1ZXJ5IHdpdGggY29zdHMKK1NFTEVDVCBnZW5l cmF0ZV9zZXJpZXMoMSwgMTAwMCkgYXMgaWQgb3JkZXIgYnkgaWQgZGVzYyIiIgorCisgICAgICAg IHdhaXQgPSBXZWJEcml2ZXJXYWl0KHNlbGYucGFnZS5kcml2ZXIsIDEwKQorCisgICAgICAgIHNl bGYucGFnZS5maWxsX2NvZGVtaXJyb3JfYXJlYV93aXRoKHF1ZXJ5KQorICAgICAgICBxdWVyeV9v cCA9IHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tcXVlcnktZHJvcGRvd24iKQorICAgICAgICBx dWVyeV9vcC5jbGljaygpCisKKyAgICAgICAgQWN0aW9uQ2hhaW5zKHNlbGYuZHJpdmVyKS5tb3Zl X3RvX2VsZW1lbnQoCisgICAgICAgICAgICBxdWVyeV9vcC5maW5kX2VsZW1lbnRfYnlfeHBhdGgo CisgICAgICAgICAgICAgICAgIi8vbGlbY29udGFpbnMoLiwnRXhwbGFpbiBPcHRpb25zJyldIikp LnBlcmZvcm0oKQorCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tZXhwbGFpbi1j b3N0cyIpLmNsaWNrKCkKKworICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLWV4cGxh aW4iKS5jbGljaygpCisKKyAgICAgICAgc2VsZi5wYWdlLndhaXRfZm9yX3F1ZXJ5X3Rvb2xfbG9h ZGluZ19pbmRpY2F0b3JfdG9fZGlzYXBwZWFyKCkKKworICAgICAgICBzZWxmLnBhZ2UuY2xpY2tf dGFiKCdEYXRhIE91dHB1dCcpCisKKyAgICAgICAgY2FudmFzID0gd2FpdC51bnRpbChFQy5wcmVz ZW5jZV9vZl9lbGVtZW50X2xvY2F0ZWQoCisgICAgICAgICAgICAoQnkuQ1NTX1NFTEVDVE9SLCAi I2RhdGFncmlkIC5zbGljay12aWV3cG9ydCAuZ3JpZC1jYW52YXMiKSkKKyAgICAgICAgKQorICAg ICAgICAjIFNlYXJjaCBmb3IgJ1RvdGFsIENvc3Qgd29yZCBpbiByZXN1bHQKKyAgICAgICAgY2Fu dmFzLmZpbmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW2NvbnRhaW5zKHN0cmluZygpLCdUb3RhbCBD b3N0JyldIikKKworICAgIGRlZiBfcXVlcnlfdG9vbF9leHBsYWluX2FuYWx5emUoc2VsZik6Cisg ICAgICAgIHF1ZXJ5ID0gIiIiLS0gRXhwbGFpbiBhbmFseXplIHF1ZXJ5CitTRUxFQ1QgZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMDApIGFzIGlkIG9yZGVyIGJ5IGlkIGRlc2MiIiIKKworICAgICAgICB3 YWl0ID0gV2ViRHJpdmVyV2FpdChzZWxmLnBhZ2UuZHJpdmVyLCAxMCkKKworICAgICAgICBzZWxm LnBhZ2UuZmlsbF9jb2RlbWlycm9yX2FyZWFfd2l0aChxdWVyeSkKKworICAgICAgICBzZWxmLnBh Z2UuZmluZF9ieV9pZCgiYnRuLXF1ZXJ5LWRyb3Bkb3duIikuY2xpY2soKQorICAgICAgICBzZWxm LnBhZ2UuZmluZF9ieV9pZCgiYnRuLWV4cGxhaW4tYW5hbHl6ZSIpLmNsaWNrKCkKKworICAgICAg ICBzZWxmLnBhZ2Uud2FpdF9mb3JfcXVlcnlfdG9vbF9sb2FkaW5nX2luZGljYXRvcl90b19kaXNh cHBlYXIoKQorCisgICAgICAgIHNlbGYucGFnZS5jbGlja190YWIoJ0RhdGEgT3V0cHV0JykKKwor ICAgICAgICBjYW52YXMgPSB3YWl0LnVudGlsKEVDLnByZXNlbmNlX29mX2VsZW1lbnRfbG9jYXRl ZCgKKyAgICAgICAgICAgIChCeS5DU1NfU0VMRUNUT1IsICIjZGF0YWdyaWQgLnNsaWNrLXZpZXdw b3J0IC5ncmlkLWNhbnZhcyIpKQorICAgICAgICApCisgICAgICAgICMgU2VhcmNoIGZvciBBY3R1 YWwgUm93cyB3b3JkIGluIHJlc3VsdAorICAgICAgICBjYW52YXMuZmluZF9lbGVtZW50X2J5X3hw YXRoKCIvLypbY29udGFpbnMoc3RyaW5nKCksJ0FjdHVhbCBSb3dzJyldIikKKworICAgIGRlZiBf cXVlcnlfdG9vbF9leHBsYWluX2FuYWx5emVfYnVmZmVycyhzZWxmKToKKyAgICAgICAgcXVlcnkg PSAiIiItLSBFeHBsYWluIGFuYWx5emUgcXVlcnkgd2l0aCBidWZmZXJzCitTRUxFQ1QgZ2VuZXJh dGVfc2VyaWVzKDEsIDEwMDApIGFzIGlkIG9yZGVyIGJ5IGlkIGRlc2MiIiIKKworICAgICAgICB3 YWl0ID0gV2ViRHJpdmVyV2FpdChzZWxmLnBhZ2UuZHJpdmVyLCAxMCkKKworICAgICAgICBzZWxm LnBhZ2UuZmlsbF9jb2RlbWlycm9yX2FyZWFfd2l0aChxdWVyeSkKKworICAgICAgICBxdWVyeV9v cCA9IHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tcXVlcnktZHJvcGRvd24iKQorICAgICAgICBx dWVyeV9vcC5jbGljaygpCisKKyAgICAgICAgQWN0aW9uQ2hhaW5zKHNlbGYuZHJpdmVyKS5tb3Zl X3RvX2VsZW1lbnQoCisgICAgICAgICAgICBxdWVyeV9vcC5maW5kX2VsZW1lbnRfYnlfeHBhdGgo CisgICAgICAgICAgICAgICAgIi8vbGlbY29udGFpbnMoLiwnRXhwbGFpbiBPcHRpb25zJyldIikp LnBlcmZvcm0oKQorCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tZXhwbGFpbi1i dWZmZXJzIikuY2xpY2soKQorCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tZXhw bGFpbi1hbmFseXplIikuY2xpY2soKQorCisgICAgICAgIHNlbGYucGFnZS53YWl0X2Zvcl9xdWVy eV90b29sX2xvYWRpbmdfaW5kaWNhdG9yX3RvX2Rpc2FwcGVhcigpCisKKyAgICAgICAgc2VsZi5w YWdlLmNsaWNrX3RhYignRGF0YSBPdXRwdXQnKQorCisgICAgICAgIGNhbnZhcyA9IHdhaXQudW50 aWwoRUMucHJlc2VuY2Vfb2ZfZWxlbWVudF9sb2NhdGVkKAorICAgICAgICAgICAgKEJ5LkNTU19T RUxFQ1RPUiwgIiNkYXRhZ3JpZCAuc2xpY2stdmlld3BvcnQgLmdyaWQtY2FudmFzIikpCisgICAg ICAgICkKKyAgICAgICAgIyBTZWFyY2ggZm9yICdTaGFyZWQgUmVhZCBCbG9ja3MnIHdvcmQgaW4g cmVzdWx0CisgICAgICAgIGNhbnZhcy5maW5kX2VsZW1lbnRfYnlfeHBhdGgoIi8vKltjb250YWlu cyhzdHJpbmcoKSwgJ1NoYXJlZCBSZWFkIEJsb2NrcycpXSIpCisKKyAgICBkZWYgX3F1ZXJ5X3Rv b2xfZXhwbGFpbl9hbmFseXplX3RpbWluZyhzZWxmKToKKyAgICAgICAgcXVlcnkgPSAiIiItLSBF eHBsYWluIGFuYWx5emUgcXVlcnkgd2l0aCB0aW1pbmcKK1NFTEVDVCBnZW5lcmF0ZV9zZXJpZXMo MSwgMTAwMCkgYXMgaWQgb3JkZXIgYnkgaWQgZGVzYyIiIgorCisgICAgICAgIHdhaXQgPSBXZWJE cml2ZXJXYWl0KHNlbGYucGFnZS5kcml2ZXIsIDEwKQorCisgICAgICAgIHNlbGYucGFnZS5maWxs X2NvZGVtaXJyb3JfYXJlYV93aXRoKHF1ZXJ5KQorICAgICAgICBxdWVyeV9vcCA9IHNlbGYucGFn ZS5maW5kX2J5X2lkKCJidG4tcXVlcnktZHJvcGRvd24iKQorICAgICAgICBxdWVyeV9vcC5jbGlj aygpCisKKyAgICAgICAgQWN0aW9uQ2hhaW5zKHNlbGYuZHJpdmVyKS5tb3ZlX3RvX2VsZW1lbnQo CisgICAgICAgICAgICBxdWVyeV9vcC5maW5kX2VsZW1lbnRfYnlfeHBhdGgoCisgICAgICAgICAg ICAgICAgIi8vbGlbY29udGFpbnMoLiwnRXhwbGFpbiBPcHRpb25zJyldIikpLnBlcmZvcm0oKQor CisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tZXhwbGFpbi10aW1pbmciKS5jbGlj aygpCisKKyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1leHBsYWluLWFuYWx5emUi KS5jbGljaygpCisKKyAgICAgICAgc2VsZi5wYWdlLndhaXRfZm9yX3F1ZXJ5X3Rvb2xfbG9hZGlu Z19pbmRpY2F0b3JfdG9fZGlzYXBwZWFyKCkKKworICAgICAgICBzZWxmLnBhZ2UuY2xpY2tfdGFi KCdEYXRhIE91dHB1dCcpCisKKyAgICAgICAgY2FudmFzID0gd2FpdC51bnRpbChFQy5wcmVzZW5j ZV9vZl9lbGVtZW50X2xvY2F0ZWQoCisgICAgICAgICAgICAoQnkuQ1NTX1NFTEVDVE9SLCAiI2Rh dGFncmlkIC5zbGljay12aWV3cG9ydCAuZ3JpZC1jYW52YXMiKSkKKyAgICAgICAgKQorICAgICAg ICAjIFNlYXJjaCBmb3IgJ0FjdHVhbCBUb3RhbCBUaW1lJyB3b3JkIGluIHJlc3VsdAorICAgICAg ICBjYW52YXMuZmluZF9lbGVtZW50X2J5X3hwYXRoKCIvLypbY29udGFpbnMoc3RyaW5nKCksICdB Y3R1YWwgVG90YWwgVGltZScpXSIpCisKKyAgICBkZWYgX3F1ZXJ5X3Rvb2xfYXV0b19jb21taXRf ZGlzYWJsZWQoc2VsZik6CisgICAgICAgIHRhYmxlX25hbWUgPSAncXVlcnlfdG9vbF9hdXRvX2Nv bW1pdF9kaXNhYmxlZF90YWJsZScKKyAgICAgICAgcXVlcnkgPSAiIiItLSAxLiBEaXNhYmxlIGF1 dG8gY29tbWl0LgorLS0gMi4gQ3JlYXRlIHRhYmxlIGluIHB1YmxpYyBzY2hlbWEuCistLSAzLiBS T0xMQkFDSyB0cmFuc2FjdGlvbi4KKy0tIDQuIENoZWNrIGlmIHRhYmxlIGlzICpOT1QqIGNyZWF0 ZWQuCitDUkVBVEUgVEFCTEUgcHVibGljLnt9KCk7IiIiLmZvcm1hdCh0YWJsZV9uYW1lKQorICAg ICAgICB3YWl0ID0gV2ViRHJpdmVyV2FpdChzZWxmLnBhZ2UuZHJpdmVyLCAxMCkKKworICAgICAg ICBzZWxmLnBhZ2UuZmlsbF9jb2RlbWlycm9yX2FyZWFfd2l0aChxdWVyeSkKKworICAgICAgICBz ZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLXF1ZXJ5LWRyb3Bkb3duIikuY2xpY2soKQorCisgICAg ICAgIGF1dG9fY29tbWl0X2J0biA9IHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tYXV0by1jb21t aXQiKQorCisgICAgICAgIGF1dG9fY29tbWl0X2NoZWNrID0gYXV0b19jb21taXRfYnRuLmZpbmRf ZWxlbWVudF9ieV90YWdfbmFtZSgiaSIpCisKKyAgICAgICAgIyBpZiBhdXRvIGNvbW1pdCBpcyBl bmFibGVkIHRoZW4gJ2knIGVsZW1lbnQgd2lsbAorICAgICAgICAjIGhhdmUgJ2F1dG8tY29tbWl0 IGZhIGZhLWNoZWNrJyBjbGFzc2VzCisgICAgICAgICMgaWYgYXV0byBjb21taXQgaXMgZGlzYWJs ZWQgdGhlbiAnaScgZWxlbWVudCB3aWxsCisgICAgICAgICMgaGF2ZSAnYXV0by1jb21taXQgZmEg ZmEtY2hlY2sgdmlzaWJpbGl0eS1oaWRkZW4nIGNsYXNzZXMKKworICAgICAgICBpZiAnYXV0by1j b21taXQgZmEgZmEtY2hlY2snID09IHN0cihhdXRvX2NvbW1pdF9jaGVjay5nZXRfYXR0cmlidXRl KAorICAgICAgICAgICAgICAgICdjbGFzcycpKToKKyAgICAgICAgICAgIGF1dG9fY29tbWl0X2J0 bi5jbGljaygpCisKKyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1mbGFzaCIpLmNs aWNrKCkKKyAgICAgICAgc2VsZi5wYWdlLndhaXRfZm9yX3F1ZXJ5X3Rvb2xfbG9hZGluZ19pbmRp Y2F0b3JfdG9fZGlzYXBwZWFyKCkKKyAgICAgICAgc2VsZi5wYWdlLmNsaWNrX3RhYignTWVzc2Fn ZXMnKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoCisgICAgICAg ICAgICAnLy9kaXZbY29udGFpbnMoQGNsYXNzLCAic3FsLWVkaXRvci1tZXNzYWdlIikgYW5kIGNv bnRhaW5zKHN0cmluZygpLCAiQ1JFQVRFIFRBQkxFIildJworICAgICAgICApCisKKyAgICAgICAg c2VsZi5fY2xlYXJfcXVlcnlfdG9vbCgpCisgICAgICAgIHF1ZXJ5ID0gIiIiLS0gMS4gKERvbmUp IERpc2FibGUgYXV0byBjb21taXQuCistLSAyLiAoRG9uZSkgQ3JlYXRlIHRhYmxlIGluIHB1Ymxp YyBzY2hlbWEuCistLSAzLiBST0xMQkFDSyB0cmFuc2FjdGlvbi4KKy0tIDQuIENoZWNrIGlmIHRh YmxlIGlzICpOT1QqIGNyZWF0ZWQuCitST0xMQkFDSzsiIiIKKyAgICAgICAgc2VsZi5wYWdlLmZp bGxfY29kZW1pcnJvcl9hcmVhX3dpdGgocXVlcnkpCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5 X2lkKCJidG4tZmxhc2giKS5jbGljaygpCisgICAgICAgIHNlbGYucGFnZS53YWl0X2Zvcl9xdWVy eV90b29sX2xvYWRpbmdfaW5kaWNhdG9yX3RvX2Rpc2FwcGVhcigpCisgICAgICAgIHNlbGYucGFn ZS5jbGlja190YWIoJ01lc3NhZ2VzJykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9lbGVtZW50 X2J5X3hwYXRoKAorICAgICAgICAgICAgJy8vZGl2W2NvbnRhaW5zKEBjbGFzcywgInNxbC1lZGl0 b3ItbWVzc2FnZSIpIGFuZCBjb250YWlucyhzdHJpbmcoKSwgIlJPTExCQUNLIildJworICAgICAg ICApCisKKyAgICAgICAgc2VsZi5fY2xlYXJfcXVlcnlfdG9vbCgpCisgICAgICAgIHF1ZXJ5ID0g IiIiLS0gMS4gKERvbmUpIERpc2FibGUgYXV0byBjb21taXQuCistLSAyLiAoRG9uZSkgQ3JlYXRl IHRhYmxlIGluIHB1YmxpYyBzY2hlbWEuCistLSAzLiAoRG9uZSkgUk9MTEJBQ0sgdHJhbnNhY3Rp b24uCistLSA0LiBDaGVjayBpZiB0YWJsZSBpcyAqTk9UKiBjcmVhdGVkLgorU0VMRUNUIHJlbG5h bWUgRlJPTSBwZ19jbGFzcyBXSEVSRSByZWxraW5kIElOICgncicsJ3MnLCd0JykgYW5kIHJlbG5h bWVzcGFjZSA9IDIyMDA6Om9pZDsiIiIKKyAgICAgICAgc2VsZi5wYWdlLmZpbGxfY29kZW1pcnJv cl9hcmVhX3dpdGgocXVlcnkpCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tZmxh c2giKS5jbGljaygpCisgICAgICAgIHNlbGYucGFnZS53YWl0X2Zvcl9xdWVyeV90b29sX2xvYWRp bmdfaW5kaWNhdG9yX3RvX2Rpc2FwcGVhcigpCisgICAgICAgIHNlbGYucGFnZS5jbGlja190YWIo J0RhdGEgT3V0cHV0JykKKyAgICAgICAgY2FudmFzID0gd2FpdC51bnRpbChFQy5wcmVzZW5jZV9v Zl9lbGVtZW50X2xvY2F0ZWQoCisgICAgICAgICAgICAoQnkuQ1NTX1NFTEVDVE9SLCAiI2RhdGFn cmlkIC5zbGljay12aWV3cG9ydCAuZ3JpZC1jYW52YXMiKSkpCisKKyAgICAgICAgZWwgPSBjYW52 YXMuZmluZF9lbGVtZW50c19ieV94cGF0aCgiLy9kaXZbY29udGFpbnMoQGNsYXNzLCAnc2xpY2st Y2VsbCcpIGFuZCBjb250YWlucyh0ZXh0KCksICd7fScpXSIuZm9ybWF0KHRhYmxlX25hbWUpKQor CisgICAgICAgIGFzc2VydCBsZW4oZWwpID09IDAsICJUYWJsZSAne30nIGNyZWF0ZWQgd2l0aCBh dXRvIGNvbW1pdCBkaXNhYmxlZCBhbmQgd2l0aG91dCBhbnkgZXhwbGljaXQgY29tbWl0LiIuZm9y bWF0KHRhYmxlX25hbWUpCisKKyAgICBkZWYgX3F1ZXJ5X3Rvb2xfYXV0b19jb21taXRfZW5hYmxl ZChzZWxmKToKKyAgICAgICAgdGFibGVfbmFtZSA9ICdxdWVyeV90b29sX2F1dG9fY29tbWl0X2Vu YWJsZWRfdGFibGUnCisgICAgICAgIHF1ZXJ5ID0gIiIiLS0gMS4gRU5EIGFueSBvcGVuIHRyYW5z YWN0aW9uLgorLS0gMi4gRW5hYmxlIGF1dG8gY29tbWl0LgorLS0gMy4gQ3JlYXRlIHRhYmxlIGlu IHB1YmxpYyBzY2hlbWEuCistLSA0LiBST0xMQkFDSyB0cmFuc2FjdGlvbgorLS0gNS4gQ2hlY2sg aWYgdGFibGUgaXMgY3JlYXRlZCBldmVudCBhZnRlciBST0xMQkFDSy4KK0VORDsKK0NSRUFURSBU QUJMRSBwdWJsaWMue30oKTsiIiIuZm9ybWF0KHRhYmxlX25hbWUpCisgICAgICAgIHdhaXQgPSBX ZWJEcml2ZXJXYWl0KHNlbGYucGFnZS5kcml2ZXIsIDEwKQorCisgICAgICAgIHNlbGYucGFnZS5m aWxsX2NvZGVtaXJyb3JfYXJlYV93aXRoKHF1ZXJ5KQorCisgICAgICAgIHNlbGYucGFnZS5maW5k X2J5X2lkKCJidG4tcXVlcnktZHJvcGRvd24iKS5jbGljaygpCisKKyAgICAgICAgYXV0b19jb21t aXRfYnRuID0gc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1hdXRvLWNvbW1pdCIpCisKKyAgICAg ICAgYXV0b19jb21taXRfY2hlY2sgPSBhdXRvX2NvbW1pdF9idG4uZmluZF9lbGVtZW50X2J5X3Rh Z19uYW1lKCJpIikKKworICAgICAgICAjIGlmIGF1dG8gY29tbWl0IGlzIGVuYWJsZWQgdGhlbiAn aScgZWxlbWVudCB3aWxsCisgICAgICAgICMgaGF2ZSAnYXV0by1jb21taXQgZmEgZmEtY2hlY2sn IGNsYXNzZXMKKyAgICAgICAgIyBpZiBhdXRvIGNvbW1pdCBpcyBkaXNhYmxlZCB0aGVuICdpJyBl bGVtZW50IHdpbGwKKyAgICAgICAgIyBoYXZlICdhdXRvLWNvbW1pdCBmYSBmYS1jaGVjayB2aXNp YmlsaXR5LWhpZGRlbicgY2xhc3NlcworCisgICAgICAgIGlmICdhdXRvLWNvbW1pdCBmYSBmYS1j aGVjayB2aXNpYmlsaXR5LWhpZGRlbicgPT0gc3RyKGF1dG9fY29tbWl0X2NoZWNrLmdldF9hdHRy aWJ1dGUoCisgICAgICAgICAgICAgICAgJ2NsYXNzJykpOgorICAgICAgICAgICAgYXV0b19jb21t aXRfYnRuLmNsaWNrKCkKKyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1mbGFzaCIp LmNsaWNrKCkKKyAgICAgICAgc2VsZi5wYWdlLndhaXRfZm9yX3F1ZXJ5X3Rvb2xfbG9hZGluZ19p bmRpY2F0b3JfdG9fZGlzYXBwZWFyKCkKKyAgICAgICAgc2VsZi5wYWdlLmNsaWNrX3RhYignTWVz c2FnZXMnKQorICAgICAgICBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfeHBhdGgoCisgICAg ICAgICAgICAnLy9kaXZbY29udGFpbnMoQGNsYXNzLCAic3FsLWVkaXRvci1tZXNzYWdlIikgYW5k IGNvbnRhaW5zKHN0cmluZygpLCAiQ1JFQVRFIFRBQkxFIildJworICAgICAgICApCisKKyAgICAg ICAgc2VsZi5fY2xlYXJfcXVlcnlfdG9vbCgpCisgICAgICAgIHF1ZXJ5ID0gIiIiLS0gMS4gKERv bmUpIEVORCBhbnkgb3BlbiB0cmFuc2FjdGlvbiBpZiBhbnkuCistLSAyLiAoRG9uZSkgRW5hYmxl IGF1dG8gY29tbWl0LgorLS0gMy4gKERvbmUpIENyZWF0ZSB0YWJsZSBpbiBwdWJsaWMgc2NoZW1h LgorLS0gNC4gUk9MTEJBQ0sgdHJhbnNhY3Rpb24KKy0tIDUuIENoZWNrIGlmIHRhYmxlIGlzIGNy ZWF0ZWQgZXZlbnQgYWZ0ZXIgUk9MTEJBQ0suCitST0xMQkFDSzsiIiIKKyAgICAgICAgc2VsZi5w YWdlLmZpbGxfY29kZW1pcnJvcl9hcmVhX3dpdGgocXVlcnkpCisgICAgICAgIHNlbGYucGFnZS5m aW5kX2J5X2lkKCJidG4tZmxhc2giKS5jbGljaygpCisgICAgICAgIHNlbGYucGFnZS53YWl0X2Zv cl9xdWVyeV90b29sX2xvYWRpbmdfaW5kaWNhdG9yX3RvX2Rpc2FwcGVhcigpCisgICAgICAgIHNl bGYucGFnZS5jbGlja190YWIoJ01lc3NhZ2VzJykKKyAgICAgICAgc2VsZi5kcml2ZXIuZmluZF9l bGVtZW50X2J5X3hwYXRoKAorICAgICAgICAgICAgJy8vZGl2W2NvbnRhaW5zKEBjbGFzcywgInNx bC1lZGl0b3ItbWVzc2FnZSIpIGFuZCBjb250YWlucyhzdHJpbmcoKSwgIlJPTExCQUNLIildJwor ICAgICAgICApCisKKyAgICAgICAgc2VsZi5fY2xlYXJfcXVlcnlfdG9vbCgpCisgICAgICAgIHF1 ZXJ5ID0gIiIiLS0gMS4gKERvbmUpIEVORCBhbnkgb3BlbiB0cmFuc2FjdGlvbiBpZiBhbnkuCist LSAyLiAoRG9uZSkgRW5hYmxlIGF1dG8gY29tbWl0LgorLS0gMy4gKERvbmUpIENyZWF0ZSB0YWJs ZSBpbiBwdWJsaWMgc2NoZW1hLgorLS0gNC4gKERvbmUpIFJPTExCQUNLIHRyYW5zYWN0aW9uCist LSA1LiBDaGVjayBpZiB0YWJsZSBpcyBjcmVhdGVkIGV2ZW50IGFmdGVyIFJPTExCQUNLLgorU0VM RUNUIHJlbG5hbWUgRlJPTSBwZ19jbGFzcyBXSEVSRSByZWxraW5kIElOICgncicsJ3MnLCd0Jykg YW5kIHJlbG5hbWVzcGFjZSA9IDIyMDA6Om9pZDsiIiIKKyAgICAgICAgc2VsZi5wYWdlLmZpbGxf Y29kZW1pcnJvcl9hcmVhX3dpdGgocXVlcnkpCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lk KCJidG4tZmxhc2giKS5jbGljaygpCisgICAgICAgIHNlbGYucGFnZS5jbGlja190YWIoJ0RhdGEg T3V0cHV0JykKKyAgICAgICAgc2VsZi5wYWdlLndhaXRfZm9yX3F1ZXJ5X3Rvb2xfbG9hZGluZ19p bmRpY2F0b3JfdG9fZGlzYXBwZWFyKCkKKworICAgICAgICBjYW52YXMgPSB3YWl0LnVudGlsKEVD LnByZXNlbmNlX29mX2VsZW1lbnRfbG9jYXRlZCgKKyAgICAgICAgICAgIChCeS5DU1NfU0VMRUNU T1IsICIjZGF0YWdyaWQgLnNsaWNrLXZpZXdwb3J0IC5ncmlkLWNhbnZhcyIpKSkKKworICAgICAg ICBlbCA9IGNhbnZhcy5maW5kX2VsZW1lbnRzX2J5X3hwYXRoKCIvL2Rpdltjb250YWlucyhAY2xh c3MsICdzbGljay1jZWxsJykgYW5kIGNvbnRhaW5zKHRleHQoKSwgJ3t9JyldIi5mb3JtYXQodGFi bGVfbmFtZSkpCisKKyAgICAgICAgYXNzZXJ0IGxlbihlbCkgIT0gMCwgIlRhYmxlICd7fScgaXMg bm90IGNyZWF0ZWQgd2l0aCBhdXRvIGNvbW1pdCBlbmFibGVkLiIuZm9ybWF0KHRhYmxlX25hbWUp CisKKyAgICBkZWYgX3F1ZXJ5X3Rvb2xfYXV0b19yb2xsYmFja19lbmFibGVkKHNlbGYpOgorICAg ICAgICB0YWJsZV9uYW1lID0gJ3F1ZXJ5X3Rvb2xfYXV0b19yb2xsYmFja19lbmFibGVkX3RhYmxl JworICAgICAgICBxdWVyeSA9ICIiIi0tIDEuIEVORCBhbnkgb3BlbiB0cmFuc2FjdGlvbi4KKy0t IDIuIEVuYWJsZSBhdXRvIHJvbGxiYWNrIGFuZCBkaXNhYmxlIGF1dG8gY29tbWl0LgorLS0gMy4g Q3JlYXRlIHRhYmxlIGluIHB1YmxpYyBzY2hlbWEuCistLSA0LiBHZW5lcmF0ZSBlcnJvciBpbiB0 cmFuc2FjdGlvbi4KKy0tIDUuIEVORCB0cmFuc2FjdGlvbi4KKy0tIDYuIENoZWNrIGlmIHRhYmxl IGlzICpOT1QqIGNyZWF0ZWQgYWZ0ZXIgZW5kaW5nIHRyYW5zYWN0aW9uLgorRU5EOyIiIgorICAg ICAgICBzZWxmLnBhZ2UuZmlsbF9jb2RlbWlycm9yX2FyZWFfd2l0aChxdWVyeSkKKworICAgICAg ICBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLWZsYXNoIikuY2xpY2soKQorICAgICAgICBzZWxm LnBhZ2Uud2FpdF9mb3JfcXVlcnlfdG9vbF9sb2FkaW5nX2luZGljYXRvcl90b19kaXNhcHBlYXIo KQorICAgICAgICBzZWxmLl9jbGVhcl9xdWVyeV90b29sKCkKKworICAgICAgICBxdWVyeSA9ICIi Ii0tIDEuIChEb25lKSBFTkQgYW55IG9wZW4gdHJhbnNhY3Rpb24uCistLSAyLiBFbmFibGUgYXV0 byByb2xsYmFjayBhbmQgZGlzYWJsZSBhdXRvIGNvbW1pdC4KKy0tIDMuIENyZWF0ZSB0YWJsZSBp biBwdWJsaWMgc2NoZW1hLgorLS0gNC4gR2VuZXJhdGUgZXJyb3IgaW4gdHJhbnNhY3Rpb24uCist LSA1LiBFTkQgdHJhbnNhY3Rpb24uCistLSA2LiBDaGVjayBpZiB0YWJsZSBpcyAqTk9UKiBjcmVh dGVkIGFmdGVyIGVuZGluZyB0cmFuc2FjdGlvbi4KK0NSRUFURSBUQUJMRSBwdWJsaWMue30oKTsi IiIuZm9ybWF0KHRhYmxlX25hbWUpCisgICAgICAgIHdhaXQgPSBXZWJEcml2ZXJXYWl0KHNlbGYu cGFnZS5kcml2ZXIsIDEwKQorCisgICAgICAgIHNlbGYucGFnZS5maWxsX2NvZGVtaXJyb3JfYXJl YV93aXRoKHF1ZXJ5KQorCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tcXVlcnkt ZHJvcGRvd24iKS5jbGljaygpCisKKyAgICAgICAgYXV0b19yb2xsYmFja19idG4gPSBzZWxmLnBh Z2UuZmluZF9ieV9pZCgiYnRuLWF1dG8tcm9sbGJhY2siKQorCisgICAgICAgIGF1dG9fcm9sbGJh Y2tfY2hlY2sgPSBhdXRvX3JvbGxiYWNrX2J0bi5maW5kX2VsZW1lbnRfYnlfdGFnX25hbWUoImki KQorCisgICAgICAgICMgaWYgYXV0byByb2xsYmFjayBpcyBlbmFibGVkIHRoZW4gJ2knIGVsZW1l bnQgd2lsbAorICAgICAgICAjIGhhdmUgJ2F1dG8tcm9sbGJhY2sgZmEgZmEtY2hlY2snIGNsYXNz ZXMKKyAgICAgICAgIyBpZiBhdXRvIHJvbGxiYWNrIGlzIGRpc2FibGVkIHRoZW4gJ2knIGVsZW1l bnQgd2lsbAorICAgICAgICAjIGhhdmUgJ2F1dG8tcm9sbGJhY2sgZmEgZmEtY2hlY2sgdmlzaWJp bGl0eS1oaWRkZW4nIGNsYXNzZXMKKworICAgICAgICBpZiAnYXV0by1yb2xsYmFjayBmYSBmYS1j aGVjayB2aXNpYmlsaXR5LWhpZGRlbicgPT0gc3RyKGF1dG9fcm9sbGJhY2tfY2hlY2suZ2V0X2F0 dHJpYnV0ZSgKKyAgICAgICAgICAgICAgICAnY2xhc3MnKSk6CisgICAgICAgICAgICBhdXRvX3Jv bGxiYWNrX2J0bi5jbGljaygpCisKKyAgICAgICAgYXV0b19jb21taXRfYnRuID0gc2VsZi5wYWdl LmZpbmRfYnlfaWQoImJ0bi1hdXRvLWNvbW1pdCIpCisKKyAgICAgICAgYXV0b19jb21taXRfY2hl Y2sgPSBhdXRvX2NvbW1pdF9idG4uZmluZF9lbGVtZW50X2J5X3RhZ19uYW1lKCJpIikKKworICAg ICAgICAjIGlmIGF1dG8gY29tbWl0IGlzIGVuYWJsZWQgdGhlbiAnaScgZWxlbWVudCB3aWxsCisg ICAgICAgICMgaGF2ZSAnYXV0by1jb21taXQgZmEgZmEtY2hlY2snIGNsYXNzZXMKKyAgICAgICAg IyBpZiBhdXRvIGNvbW1pdCBpcyBkaXNhYmxlZCB0aGVuICdpJyBlbGVtZW50IHdpbGwKKyAgICAg ICAgIyBoYXZlICdhdXRvLWNvbW1pdCBmYSBmYS1jaGVjayB2aXNpYmlsaXR5LWhpZGRlbicgY2xh c3NlcworCisgICAgICAgIGlmICdhdXRvLWNvbW1pdCBmYSBmYS1jaGVjaycgPT0gc3RyKGF1dG9f Y29tbWl0X2NoZWNrLmdldF9hdHRyaWJ1dGUoCisgICAgICAgICAgICAgICAgJ2NsYXNzJykpOgor ICAgICAgICAgICAgYXV0b19jb21taXRfYnRuLmNsaWNrKCkKKworICAgICAgICBzZWxmLnBhZ2Uu ZmluZF9ieV9pZCgiYnRuLWZsYXNoIikuY2xpY2soKQorICAgICAgICBzZWxmLnBhZ2Uud2FpdF9m b3JfcXVlcnlfdG9vbF9sb2FkaW5nX2luZGljYXRvcl90b19kaXNhcHBlYXIoKQorICAgICAgICBz ZWxmLnBhZ2UuY2xpY2tfdGFiKCdNZXNzYWdlcycpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRf ZWxlbWVudF9ieV94cGF0aCgKKyAgICAgICAgICAgICcvL2Rpdltjb250YWlucyhAY2xhc3MsICJz cWwtZWRpdG9yLW1lc3NhZ2UiKSBhbmQgY29udGFpbnMoc3RyaW5nKCksICJDUkVBVEUgVEFCTEUi KV0nCisgICAgICAgICkKKworICAgICAgICBzZWxmLl9jbGVhcl9xdWVyeV90b29sKCkKKyAgICAg ICAgcXVlcnkgPSAiIiItLSAxLiAoRG9uZSkgRU5EIGFueSBvcGVuIHRyYW5zYWN0aW9uLgorLS0g Mi4gKERvbmUpIEVuYWJsZSBhdXRvIHJvbGxiYWNrIGFuZCBkaXNhYmxlIGF1dG8gY29tbWl0Lgor LS0gMy4gKERvbmUpIENyZWF0ZSB0YWJsZSBpbiBwdWJsaWMgc2NoZW1hLgorLS0gNC4gR2VuZXJh dGUgZXJyb3IgaW4gdHJhbnNhY3Rpb24uCistLSA1LiBFTkQgdHJhbnNhY3Rpb24uCistLSA2LiBD aGVjayBpZiB0YWJsZSBpcyAqTk9UKiBjcmVhdGVkIGFmdGVyIGVuZGluZyB0cmFuc2FjdGlvbi4K K1NFTEVDVCAxLzA7IiIiCisgICAgICAgIHNlbGYucGFnZS5maWxsX2NvZGVtaXJyb3JfYXJlYV93 aXRoKHF1ZXJ5KQorICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLWZsYXNoIikuY2xp Y2soKQorICAgICAgICBzZWxmLnBhZ2Uud2FpdF9mb3JfcXVlcnlfdG9vbF9sb2FkaW5nX2luZGlj YXRvcl90b19kaXNhcHBlYXIoKQorICAgICAgICBzZWxmLnBhZ2UuY2xpY2tfdGFiKCdNZXNzYWdl cycpCisgICAgICAgIHNlbGYuZHJpdmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgKKyAgICAgICAg ICAgICcvL2Rpdltjb250YWlucyhAY2xhc3MsICJzcWwtZWRpdG9yLW1lc3NhZ2UiKSBhbmQgY29u dGFpbnMoc3RyaW5nKCksICJkaXZpc2lvbiBieSB6ZXJvIildJworICAgICAgICApCisKKyAgICAg ICAgc2VsZi5fY2xlYXJfcXVlcnlfdG9vbCgpCisgICAgICAgIHF1ZXJ5ID0gIiIiLS0gMS4gKERv bmUpIEVORCBhbnkgb3BlbiB0cmFuc2FjdGlvbi4KKy0tIDIuIChEb25lKSBFbmFibGUgYXV0byBy b2xsYmFjayBhbmQgZGlzYWJsZSBhdXRvIGNvbW1pdC4KKy0tIDMuIChEb25lKSBDcmVhdGUgdGFi bGUgaW4gcHVibGljIHNjaGVtYS4KKy0tIDQuIChEb25lKSBHZW5lcmF0ZSBlcnJvciBpbiB0cmFu c2FjdGlvbi4KKy0tIDUuIEVORCB0cmFuc2FjdGlvbi4KKy0tIDYuIENoZWNrIGlmIHRhYmxlIGlz ICpOT1QqIGNyZWF0ZWQgYWZ0ZXIgZW5kaW5nIHRyYW5zYWN0aW9uLgorRU5EOyIiIgorCisgICAg ICAgIHNlbGYucGFnZS5maWxsX2NvZGVtaXJyb3JfYXJlYV93aXRoKHF1ZXJ5KQorICAgICAgICBz ZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLWZsYXNoIikuY2xpY2soKQorICAgICAgICBzZWxmLnBh Z2Uud2FpdF9mb3JfcXVlcnlfdG9vbF9sb2FkaW5nX2luZGljYXRvcl90b19kaXNhcHBlYXIoKQor ICAgICAgICBzZWxmLnBhZ2UuY2xpY2tfdGFiKCdNZXNzYWdlcycpCisgICAgICAgIHNlbGYuZHJp dmVyLmZpbmRfZWxlbWVudF9ieV94cGF0aCgKKyAgICAgICAgICAgICcvL2Rpdltjb250YWlucyhA Y2xhc3MsICJzcWwtZWRpdG9yLW1lc3NhZ2UiKSBhbmQgY29udGFpbnMoc3RyaW5nKCksICJRdWVy eSByZXR1cm5lZCBzdWNjZXNzZnVsbHkiKV0nCisgICAgICAgICkKKworICAgICAgICBzZWxmLl9j bGVhcl9xdWVyeV90b29sKCkKKyAgICAgICAgcXVlcnkgPSAiIiItLSAxLiAoRG9uZSkgRU5EIGFu eSBvcGVuIHRyYW5zYWN0aW9uLgorLS0gMi4gKERvbmUpIEVuYWJsZSBhdXRvIHJvbGxiYWNrIGFu ZCBkaXNhYmxlIGF1dG8gY29tbWl0LgorLS0gMy4gKERvbmUpIENyZWF0ZSB0YWJsZSBpbiBwdWJs aWMgc2NoZW1hLgorLS0gNC4gKERvbmUpIEdlbmVyYXRlIGVycm9yIGluIHRyYW5zYWN0aW9uLgor LS0gNS4gKERvbmUpIEVORCB0cmFuc2FjdGlvbi4KKy0tIDYuIENoZWNrIGlmIHRhYmxlIGlzICpO T1QqIGNyZWF0ZWQgYWZ0ZXIgZW5kaW5nIHRyYW5zYWN0aW9uLgorU0VMRUNUIHJlbG5hbWUgRlJP TSBwZ19jbGFzcyBXSEVSRSByZWxraW5kIElOICgncicsJ3MnLCd0JykgYW5kIHJlbG5hbWVzcGFj ZSA9IDIyMDA6Om9pZDsiIiIKKyAgICAgICAgc2VsZi5wYWdlLmZpbGxfY29kZW1pcnJvcl9hcmVh X3dpdGgocXVlcnkpCisgICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tZmxhc2giKS5j bGljaygpCisgICAgICAgIHNlbGYucGFnZS53YWl0X2Zvcl9xdWVyeV90b29sX2xvYWRpbmdfaW5k aWNhdG9yX3RvX2Rpc2FwcGVhcigpCisgICAgICAgIHNlbGYucGFnZS5jbGlja190YWIoJ0RhdGEg T3V0cHV0JykKKyAgICAgICAgY2FudmFzID0gd2FpdC51bnRpbChFQy5wcmVzZW5jZV9vZl9lbGVt ZW50X2xvY2F0ZWQoCisgICAgICAgICAgICAoQnkuQ1NTX1NFTEVDVE9SLCAiI2RhdGFncmlkIC5z bGljay12aWV3cG9ydCAuZ3JpZC1jYW52YXMiKSkpCisKKyAgICAgICAgZWwgPSBjYW52YXMuZmlu ZF9lbGVtZW50c19ieV94cGF0aCgiLy9kaXZbY29udGFpbnMoQGNsYXNzLCAnc2xpY2stY2VsbCcp IGFuZCBjb250YWlucyh0ZXh0KCksICd7fScpXSIuZm9ybWF0KHRhYmxlX25hbWUpKQorCisgICAg ICAgIGFzc2VydCBsZW4oZWwpID09IDAsICJUYWJsZSAne30nIGNyZWF0ZWQgZXZlbiBhZnRlciBS T0xMQkFDSyBkdWUgdG8gc3FsIGVycm9yLiIuZm9ybWF0KHRhYmxlX25hbWUpCisKKyAgICBkZWYg X3F1ZXJ5X3Rvb2xfY2FuY2VsX3F1ZXJ5KHNlbGYpOgorICAgICAgICBxdWVyeSA9ICIiIi0tIDEu IEVORCBhbnkgb3BlbiB0cmFuc2FjdGlvbi4KKy0tIDIuIEVuYWJsZSBhdXRvIGNvbW1pdCBhbmQg RGlzYWJsZSBhdXRvIHJvbGxiYWNrLgorLS0gMy4gRXhlY3V0ZSBsb25nIHJ1bm5pbmcgcXVlcnku CistLSA0LiBDYW5jZWwgbG9uZyBydW5uaW5nIHF1ZXJ5IGV4ZWN1dGlvbi4KK0VORDsKK1NFTEVD VCAxLCBwZ19zbGVlcCgxMCkiIiIKKyAgICAgICAgc2VsZi5wYWdlLmZpbGxfY29kZW1pcnJvcl9h cmVhX3dpdGgocXVlcnkpCisKKyAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1xdWVy eS1kcm9wZG93biIpLmNsaWNrKCkKKworICAgICAgICBhdXRvX3JvbGxiYWNrX2J0biA9IHNlbGYu cGFnZS5maW5kX2J5X2lkKCJidG4tYXV0by1yb2xsYmFjayIpCisKKyAgICAgICAgYXV0b19yb2xs YmFja19jaGVjayA9IGF1dG9fcm9sbGJhY2tfYnRuLmZpbmRfZWxlbWVudF9ieV90YWdfbmFtZSgi aSIpCisKKyAgICAgICAgIyBpZiBhdXRvIHJvbGxiYWNrIGlzIGVuYWJsZWQgdGhlbiAnaScgZWxl bWVudCB3aWxsCisgICAgICAgICMgaGF2ZSAnYXV0by1yb2xsYmFjayBmYSBmYS1jaGVjaycgY2xh c3NlcworICAgICAgICAjIGlmIGF1dG8gcm9sbGJhY2sgaXMgZGlzYWJsZWQgdGhlbiAnaScgZWxl bWVudCB3aWxsCisgICAgICAgICMgaGF2ZSAnYXV0by1yb2xsYmFjayBmYSBmYS1jaGVjayB2aXNp YmlsaXR5LWhpZGRlbicgY2xhc3NlcworCisgICAgICAgIGlmICdhdXRvLXJvbGxiYWNrIGZhIGZh LWNoZWNrJyA9PSBzdHIoYXV0b19yb2xsYmFja19jaGVjay5nZXRfYXR0cmlidXRlKAorICAgICAg ICAgICAgICAgICdjbGFzcycpKToKKyAgICAgICAgICAgIGF1dG9fcm9sbGJhY2tfYnRuLmNsaWNr KCkKKworICAgICAgICBhdXRvX2NvbW1pdF9idG4gPSBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRu LWF1dG8tY29tbWl0IikKKworICAgICAgICBhdXRvX2NvbW1pdF9jaGVjayA9IGF1dG9fY29tbWl0 X2J0bi5maW5kX2VsZW1lbnRfYnlfdGFnX25hbWUoImkiKQorCisgICAgICAgICMgaWYgYXV0byBj b21taXQgaXMgZW5hYmxlZCB0aGVuICdpJyBlbGVtZW50IHdpbGwKKyAgICAgICAgIyBoYXZlICdh dXRvLWNvbW1pdCBmYSBmYS1jaGVjaycgY2xhc3NlcworICAgICAgICAjIGlmIGF1dG8gY29tbWl0 IGlzIGRpc2FibGVkIHRoZW4gJ2knIGVsZW1lbnQgd2lsbAorICAgICAgICAjIGhhdmUgJ2F1dG8t Y29tbWl0IGZhIGZhLWNoZWNrIHZpc2liaWxpdHktaGlkZGVuJyBjbGFzc2VzCisKKyAgICAgICAg aWYgJ2F1dG8tY29tbWl0IGZhIGZhLWNoZWNrIHZpc2liaWxpdHktaGlkZGVuJyA9PSBzdHIoYXV0 b19jb21taXRfY2hlY2suZ2V0X2F0dHJpYnV0ZSgKKyAgICAgICAgICAgICAgICAnY2xhc3MnKSk6 CisgICAgICAgICAgICBhdXRvX2NvbW1pdF9idG4uY2xpY2soKQorCisgICAgICAgIHNlbGYucGFn ZS5maW5kX2J5X2lkKCJidG4tZmxhc2giKS5jbGljaygpCisgICAgICAgIHNlbGYuZHJpdmVyLmZp bmRfZWxlbWVudF9ieV94cGF0aCgiLy8qW0BpZD0nZmV0Y2hpbmdfZGF0YSddIikKKyAgICAgICAg c2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1jYW5jZWwtcXVlcnkiKS5jbGljaygpCisgICAgICAg IHNlbGYucGFnZS53YWl0X2Zvcl9xdWVyeV90b29sX2xvYWRpbmdfaW5kaWNhdG9yX3RvX2Rpc2Fw cGVhcigpCisgICAgICAgIHNlbGYucGFnZS5jbGlja190YWIoJ01lc3NhZ2VzJykKKyAgICAgICAg c2VsZi5kcml2ZXIuZmluZF9lbGVtZW50X2J5X3hwYXRoKAorICAgICAgICAgICAgJy8vZGl2W2Nv bnRhaW5zKEBjbGFzcywgInNxbC1lZGl0b3ItbWVzc2FnZSIpIGFuZCBjb250YWlucyhzdHJpbmco KSwgImNhbmNlbGluZyBzdGF0ZW1lbnQgZHVlIHRvIHVzZXIgcmVxdWVzdCIpXScKKyAgICAgICAg KQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vZmVhdHVyZV90ZXN0cy92aWV3X2RhdGFfZG1sX3F1 ZXJpZXMucHkgYi93ZWIvcGdhZG1pbi9mZWF0dXJlX3Rlc3RzL3ZpZXdfZGF0YV9kbWxfcXVlcmll cy5weQppbmRleCA1NWI0NWFkLi5hNmJjNWFhIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9mZWF0 dXJlX3Rlc3RzL3ZpZXdfZGF0YV9kbWxfcXVlcmllcy5weQorKysgYi93ZWIvcGdhZG1pbi9mZWF0 dXJlX3Rlc3RzL3ZpZXdfZGF0YV9kbWxfcXVlcmllcy5weQpAQCAtOSw2ICs5LDcgQEAKIAogaW1w b3J0IGpzb24KIGltcG9ydCBvcworaW1wb3J0IHRpbWUKIGZyb20gc2VsZW5pdW0ud2ViZHJpdmVy IGltcG9ydCBBY3Rpb25DaGFpbnMKIGZyb20gcmVncmVzc2lvbi5weXRob25fdGVzdF91dGlscyBp bXBvcnQgdGVzdF91dGlscwogZnJvbSByZWdyZXNzaW9uLmZlYXR1cmVfdXRpbHMuYmFzZV9mZWF0 dXJlX3Rlc3QgaW1wb3J0IEJhc2VGZWF0dXJlVGVzdApAQCAtMjA1LDYgKzIwNiwxMCBAQCBDUkVB VEUgVEFCTEUgcHVibGljLmRlZmF1bHRzCiAgICAgICAgICAgICAgICAgc2VsZi5wYWdlLmRyaXZl ci5maW5kX2VsZW1lbnRfYnlfbGlua190ZXh0KCJWaWV3IERhdGEiKSkgXAogICAgICAgICAgICAg LnBlcmZvcm0oKQogICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV9wYXJ0aWFsX2xpbmtfdGV4dCgi VmlldyBBbGwgUm93cyIpLmNsaWNrKCkKKworICAgICAgICAjIHdhaXQgdW50aWwgZGF0YWdyaWQg ZnJhbWUgaXMgbG9hZGVkLgorICAgICAgICBzZWxmLnBhZ2UuY2xpY2tfdGFiKCdFZGl0IERhdGEg LScpCisKICAgICAgICAgc2VsZi53YWl0LnVudGlsKAogICAgICAgICAgICAgRUMudmlzaWJpbGl0 eV9vZl9lbGVtZW50X2xvY2F0ZWQoCiAgICAgICAgICAgICAgICAgKEJ5LkNTU19TRUxFQ1RPUiwg J2lmcmFtZScpCkBAIC0yNDIsNiArMjQ3LDExIEBAIENSRUFURSBUQUJMRSBwdWJsaWMuZGVmYXVs dHMKICAgICAgICAgc2VsZi5fdXBkYXRlX2NlbGwocm93MV9jZWxsMl94cGF0aCwgWyIxIiwgIiIs ICJpbnQiXSkKIAogICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV9pZCgiYnRuLXNhdmUiKS5jbGlj aygpICAjIFNhdmUgZGF0YQorICAgICAgICAjIFRoZXJlIHNob3VsZCBiZSBzb21lIGRlbGF5IGFm dGVyIHNhdmUgYnV0dG9uIGlzIGNsaWNrZWQsIGFzIGl0CisgICAgICAgICMgdGFrZXMgc29tZSB0 aW1lIHRvIGNvbXBsZXRlIHNhdmUgYWpheCBjYWxsIG90aGVyd2lzZSBkaXNjYXJkIHVuc2F2ZWQK KyAgICAgICAgIyBjaGFuZ2VzIGRpYWxvZyB3aWxsIGFwcGVhciBpZiB3ZSB0cnkgdG8gZXhlY3V0 ZSBxdWVyeSBiZWZvcmUgcHJldmlvdXMKKyAgICAgICAgIyBzYXZlIGFqYXggaXMgY29tcGxldGVk LgorICAgICAgICB0aW1lLnNsZWVwKDIpCiAKICAgICAgICAgIyBWZXJpZnkgcm93IDEgYW5kIHJv dyAyIGRhdGEKICAgICAgICAgc2VsZi5fdmVyaWZ5X3Jvd19kYXRhKEZhbHNlKQpAQCAtMjU0LDYg KzI2NCwxMSBAQCBDUkVBVEUgVEFCTEUgcHVibGljLmRlZmF1bHRzCiAgICAgICAgICAgICBzZWxm Ll91cGRhdGVfY2VsbChjZWxsX3hwYXRoLCBjb25maWdfZGF0YVtzdHIoaWR4KV0pCiAKICAgICAg ICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1zYXZlIikuY2xpY2soKSAgIyBTYXZlIGRhdGEK KyAgICAgICAgIyBUaGVyZSBzaG91bGQgYmUgc29tZSBkZWxheSBhZnRlciBzYXZlIGJ1dHRvbiBp cyBjbGlja2VkLCBhcyBpdAorICAgICAgICAjIHRha2VzIHNvbWUgdGltZSB0byBjb21wbGV0ZSBz YXZlIGFqYXggY2FsbCBvdGhlcndpc2UgZGlzY2FyZCB1bnNhdmVkCisgICAgICAgICMgY2hhbmdl cyBkaWFsb2cgd2lsbCBhcHBlYXIgaWYgd2UgdHJ5IHRvIGV4ZWN1dGUgcXVlcnkgYmVmb3JlIHBy ZXZpb3VzCisgICAgICAgICMgc2F2ZSBhamF4IGlzIGNvbXBsZXRlZC4KKyAgICAgICAgdGltZS5z bGVlcCgyKQogCiAgICAgZGVmIF92ZXJpZnlfcm93X2RhdGEoc2VsZiwgaXNfbmV3X3Jvdyk6CiAg ICAgICAgIHNlbGYucGFnZS5maW5kX2J5X2lkKCJidG4tZmxhc2giKS5jbGljaygpCkBAIC0yNjQs MTcgKzI3OSwxNyBAQCBDUkVBVEUgVEFCTEUgcHVibGljLmRlZmF1bHRzCiAgICAgICAgIHhwYXRo ID0gIi8vKltjb250YWlucyhAY2xhc3MsICd1aS13aWRnZXQtY29udGVudCcpIGFuZCAiIFwKICAg ICAgICAgICAgICAgICAiY29udGFpbnMoQHN0eWxlLCAndG9wOiIgKyBzdHIocm93X2hlaWdodCkg KyAicHgnKV0iCiAKLSAgICAgICAgIyB3YWl0IGZvciBzdGFsZSBlbGVtZW50IHJlZmVyZW5jZSBl eGNlcHRpb24KLSAgICAgICAgc2VsZi5wYWdlLndhaXRfZm9yX2VsZW1lbnRfdG9fc3RhbGUoeHBh dGgpCisgICAgICAgIHNlbGYucGFnZS53YWl0X2Zvcl9xdWVyeV90b29sX2xvYWRpbmdfaW5kaWNh dG9yX3RvX2Rpc2FwcGVhcigpCisKICAgICAgICAgcmVzdWx0X3JvdyA9IHNlbGYucGFnZS5maW5k X2J5X3hwYXRoKHhwYXRoKQogCiAgICAgICAgICMgTGlzdCBvZiByb3cgdmFsdWVzIGluIGFuIGFy cmF5CiAgICAgICAgIGNlbGxzID0gW2VsLnRleHQgZm9yIGVsIGluIHJlc3VsdF9yb3cuZmluZF9l bGVtZW50c19ieV90YWdfbmFtZSgnZGl2JyldCiAKICAgICAgICAgZm9yIGlkeCBpbiByYW5nZSgx LCBsZW4oY29uZmlnX2RhdGEua2V5cygpKSk6Ci0gICAgICAgICAgICAjICMgYWZ0ZXIgY29weSAm IHBhc3RlIHJvdywgdGhlIGZpcnN0IGNlbGwgb2Ygcm93IDEgYW5kCi0gICAgICAgICAgICAjICMg cm93IDIoYmVpbmcgcHJpbWFyeSBrZXlzKSB3b24ndCBtYXRjaAotICAgICAgICAgICAgIyAjIHNl ZSBpZiBjZWxsIHZhbHVlcyBtYXRjaGVkIHRvIGFjdHVhbCB2YWx1ZQorICAgICAgICAgICAgIyBh ZnRlciBjb3B5ICYgcGFzdGUgcm93LCB0aGUgZmlyc3QgY2VsbCBvZiByb3cgMSBhbmQKKyAgICAg ICAgICAgICMgcm93IDIoYmVpbmcgcHJpbWFyeSBrZXlzKSB3b24ndCBtYXRjaAorICAgICAgICAg ICAgIyBzZWUgaWYgY2VsbCB2YWx1ZXMgbWF0Y2hlZCB0byBhY3R1YWwgdmFsdWUKICAgICAgICAg ICAgIGlmIGlkeCAhPSAxIGFuZCBub3QgaXNfbmV3X3JvdzoKICAgICAgICAgICAgICAgICBzZWxm LmFzc2VydEVxdWFscyhjZWxsc1tpZHhdLCBjb25maWdfZGF0YVtzdHIoaWR4KV1bMV0pCiAgICAg ICAgICAgICBlbGlmIGlzX25ld19yb3c6CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9mZWF0dXJl X3Rlc3RzL3hzc19jaGVja3NfcGFuZWxzX2FuZF9xdWVyeV90b29sX3Rlc3QucHkgYi93ZWIvcGdh ZG1pbi9mZWF0dXJlX3Rlc3RzL3hzc19jaGVja3NfcGFuZWxzX2FuZF9xdWVyeV90b29sX3Rlc3Qu cHkKaW5kZXggNGZkMDc4My4uNzViNDIyMiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vZmVhdHVy ZV90ZXN0cy94c3NfY2hlY2tzX3BhbmVsc19hbmRfcXVlcnlfdG9vbF90ZXN0LnB5CisrKyBiL3dl Yi9wZ2FkbWluL2ZlYXR1cmVfdGVzdHMveHNzX2NoZWNrc19wYW5lbHNfYW5kX3F1ZXJ5X3Rvb2xf dGVzdC5weQpAQCAtMTAsNiArMTAsOSBAQAogZnJvbSBzZWxlbml1bS53ZWJkcml2ZXIgaW1wb3J0 IEFjdGlvbkNoYWlucwogZnJvbSByZWdyZXNzaW9uLnB5dGhvbl90ZXN0X3V0aWxzIGltcG9ydCB0 ZXN0X3V0aWxzCiBmcm9tIHJlZ3Jlc3Npb24uZmVhdHVyZV91dGlscy5iYXNlX2ZlYXR1cmVfdGVz dCBpbXBvcnQgQmFzZUZlYXR1cmVUZXN0Citmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5zdXBwb3J0 LnVpIGltcG9ydCBXZWJEcml2ZXJXYWl0Citmcm9tIHNlbGVuaXVtLndlYmRyaXZlci5zdXBwb3J0 IGltcG9ydCBleHBlY3RlZF9jb25kaXRpb25zIGFzIEVDCitmcm9tIHNlbGVuaXVtLndlYmRyaXZl ci5jb21tb24uYnkgaW1wb3J0IEJ5CiBpbXBvcnQgdGltZQogCiBjbGFzcyBDaGVja0Zvclhzc0Zl YXR1cmVUZXN0KEJhc2VGZWF0dXJlVGVzdCk6CkBAIC03Miw2ICs3NSw3IEBAIGNsYXNzIENoZWNr Rm9yWHNzRmVhdHVyZVRlc3QoQmFzZUZlYXR1cmVUZXN0KToKIAogICAgIGRlZiBfY29ubmVjdHNf dG9fc2VydmVyKHNlbGYpOgogICAgICAgICBzZWxmLnBhZ2UuZmluZF9ieV94cGF0aCgiLy8qW0Bj bGFzcz0nYWNpVHJlZVRleHQnIGFuZCAuPSdTZXJ2ZXJzJ10iKS5jbGljaygpCisgICAgICAgIHRp bWUuc2xlZXAoMikKICAgICAgICAgc2VsZi5wYWdlLmRyaXZlci5maW5kX2VsZW1lbnRfYnlfbGlu a190ZXh0KCJPYmplY3QiKS5jbGljaygpCiAgICAgICAgIEFjdGlvbkNoYWlucyhzZWxmLnBhZ2Uu ZHJpdmVyKSBcCiAgICAgICAgICAgICAubW92ZV90b19lbGVtZW50KHNlbGYucGFnZS5kcml2ZXIu ZmluZF9lbGVtZW50X2J5X2xpbmtfdGV4dCgiQ3JlYXRlIikpIFwKQEAgLTE1MiwxMSArMTU2LDE2 IEBAIGNsYXNzIENoZWNrRm9yWHNzRmVhdHVyZVRlc3QoQmFzZUZlYXR1cmVUZXN0KToKICAgICAg ICAgc2VsZi5wYWdlLmZpbGxfY29kZW1pcnJvcl9hcmVhX3dpdGgoInNlbGVjdCAnPGltZyBzcmM9 XCJ4XCIgb25lcnJvcj1cImNvbnNvbGUubG9nKDEpXCI+JyIpCiAgICAgICAgIHRpbWUuc2xlZXAo MSkKICAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfaWQoImJ0bi1mbGFzaCIpLmNsaWNrKCkKLSAg ICAgICAgdGltZS5zbGVlcCgyKQorICAgICAgICB3YWl0ID0gV2ViRHJpdmVyV2FpdChzZWxmLnBh Z2UuZHJpdmVyLCA1KQogCi0gICAgICAgIHNvdXJjZV9jb2RlID0gc2VsZi5wYWdlLmZpbmRfYnlf eHBhdGgoCi0gICAgICAgICAgICAiLy8qW0BpZD0nMCddLy8qW0BpZD0nZGF0YWdyaWQnXS9kaXZb NV0vZGl2L2RpdlsxXS9kaXZbMl0iCi0gICAgICAgICkuZ2V0X2F0dHJpYnV0ZSgnaW5uZXJIVE1M JykKKyAgICAgICAgcmVzdWx0X3JvdyA9IHNlbGYucGFnZS5maW5kX2J5X3hwYXRoKAorICAgICAg ICAgICAgIi8vKltjb250YWlucyhAY2xhc3MsICd1aS13aWRnZXQtY29udGVudCcpIGFuZCBjb250 YWlucyhAc3R5bGUsICd0b3A6MHB4JyldIgorICAgICAgICApCisKKyAgICAgICAgY2VsbHMgPSBy ZXN1bHRfcm93LmZpbmRfZWxlbWVudHNfYnlfdGFnX25hbWUoJ2RpdicpCisKKyAgICAgICAgIyBy ZW1vdmUgZmlyc3QgZWxlbWVudCBhcyBpdCBpcyByb3cgbnVtYmVyLgorICAgICAgICBzb3VyY2Vf Y29kZSA9IGNlbGxzWzFdLmdldF9hdHRyaWJ1dGUoJ2lubmVySFRNTCcpCiAKICAgICAgICAgc2Vs Zi5fY2hlY2tfZXNjYXBlZF9jaGFyYWN0ZXJzKAogICAgICAgICAgICAgc291cmNlX2NvZGUsCmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9mZWF0dXJlX3Rlc3RzL3hzc19jaGVja3NfcGdhZG1pbl9k ZWJ1Z2dlcl90ZXN0LnB5IGIvd2ViL3BnYWRtaW4vZmVhdHVyZV90ZXN0cy94c3NfY2hlY2tzX3Bn YWRtaW5fZGVidWdnZXJfdGVzdC5weQppbmRleCAwOTRkZmVkLi5lODQ3MDQwIDEwMDY0NAotLS0g YS93ZWIvcGdhZG1pbi9mZWF0dXJlX3Rlc3RzL3hzc19jaGVja3NfcGdhZG1pbl9kZWJ1Z2dlcl90 ZXN0LnB5CisrKyBiL3dlYi9wZ2FkbWluL2ZlYXR1cmVfdGVzdHMveHNzX2NoZWNrc19wZ2FkbWlu X2RlYnVnZ2VyX3Rlc3QucHkKQEAgLTQyLDYgKzQyLDcgQEAgY2xhc3MgQ2hlY2tEZWJ1Z2dlckZv clhzc0ZlYXR1cmVUZXN0KEJhc2VGZWF0dXJlVGVzdCk6CiAKICAgICBkZWYgX2Nvbm5lY3RzX3Rv X3NlcnZlcihzZWxmKToKICAgICAgICAgc2VsZi5wYWdlLmZpbmRfYnlfeHBhdGgoIi8vKltAY2xh c3M9J2FjaVRyZWVUZXh0JyBhbmQgLj0nU2VydmVycyddIikuY2xpY2soKQorICAgICAgICB0aW1l LnNsZWVwKDIpCiAgICAgICAgIHNlbGYucGFnZS5kcml2ZXIuZmluZF9lbGVtZW50X2J5X2xpbmtf dGV4dCgiT2JqZWN0IikuY2xpY2soKQogICAgICAgICBBY3Rpb25DaGFpbnMoc2VsZi5wYWdlLmRy aXZlcikgXAogICAgICAgICAgICAgLm1vdmVfdG9fZWxlbWVudChzZWxmLnBhZ2UuZHJpdmVyLmZp bmRfZWxlbWVudF9ieV9saW5rX3RleHQoIkNyZWF0ZSIpKSBcCmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi9zdGF0aWMvYnVuZGxlL3NsaWNrZ3JpZC5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9idW5k bGUvc2xpY2tncmlkLmpzCmluZGV4IDBkODJhNmIuLmRkN2Y4NzAgMTAwNjQ0Ci0tLSBhL3dlYi9w Z2FkbWluL3N0YXRpYy9idW5kbGUvc2xpY2tncmlkLmpzCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRp Yy9idW5kbGUvc2xpY2tncmlkLmpzCkBAIC0zLDYgKzMsNyBAQCBpbXBvcnQgJ3NsaWNrZ3JpZC9z bGljay1kZWZhdWx0LXRoZW1lLmNzcyc7CiBpbXBvcnQgJ3NsaWNrZ3JpZC9jc3Mvc21vb3RobmVz cy9qcXVlcnktdWktMS4xMS4zLmN1c3RvbS5jc3MnOwogaW1wb3J0ICdzbGlja2dyaWQvc2xpY2su Y29yZSc7CiBpbXBvcnQgJ3NsaWNrZ3JpZC9zbGljay5ncmlkJzsKK2ltcG9ydCAnc2xpY2tncmlk L3NsaWNrLmRhdGF2aWV3JzsKIGltcG9ydCAnc2xpY2tncmlkL3NsaWNrLmVkaXRvcnMnOwogaW1w b3J0ICdzbGlja2dyaWQvc2xpY2suZm9ybWF0dGVycyc7CiBpbXBvcnQgJ3NsaWNrZ3JpZC9wbHVn aW5zL3NsaWNrLmF1dG90b29sdGlwcyc7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMv anMvc2VsZWN0aW9uL2NvbHVtbl9zZWxlY3Rvci5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9z ZWxlY3Rpb24vY29sdW1uX3NlbGVjdG9yLmpzCmluZGV4IDMwNWI0MzguLmYzY2I3MjcgMTAwNjQ0 Ci0tLSBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vY29sdW1uX3NlbGVjdG9yLmpz CisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vY29sdW1uX3NlbGVjdG9yLmpz CkBAIC00LDEzICs0LDE4IEBAIGRlZmluZShbCiAgICdzbGlja2dyaWQnLAogXSwgZnVuY3Rpb24g KCQsIFJhbmdlU2VsZWN0aW9uSGVscGVyKSB7CiAgIHZhciBDb2x1bW5TZWxlY3RvciA9IGZ1bmN0 aW9uICgpIHsKLSAgICB2YXIgU2xpY2sgPSB3aW5kb3cuU2xpY2s7Ci0gICAgdmFyIGdyaWRFdmVu dEJ1cyA9IG5ldyBTbGljay5FdmVudEhhbmRsZXIoKTsKKyAgICB2YXIgU2xpY2sgPSB3aW5kb3cu U2xpY2ssCisgICAgICBncmlkRXZlbnRCdXMgPSBuZXcgU2xpY2suRXZlbnRIYW5kbGVyKCksCisg ICAgICBvbkJlZm9yZUNvbHVtblNlbGVjdEFsbCA9IG5ldyBTbGljay5FdmVudCgpLAorICAgICAg b25Db2x1bW5TZWxlY3RBbGwgPSBuZXcgU2xpY2suRXZlbnQoKTsKIAogICAgIHZhciBpbml0ID0g ZnVuY3Rpb24gKGdyaWQpIHsKICAgICAgIGdyaWRFdmVudEJ1cy5zdWJzY3JpYmUoZ3JpZC5vbkhl YWRlckNsaWNrLCBoYW5kbGVIZWFkZXJDbGljay5iaW5kKG51bGwsIGdyaWQpKTsKICAgICAgIGdy aWQuZ2V0U2VsZWN0aW9uTW9kZWwoKS5vblNlbGVjdGVkUmFuZ2VzQ2hhbmdlZAogICAgICAgICAu c3Vic2NyaWJlKGhhbmRsZVNlbGVjdGVkUmFuZ2VzQ2hhbmdlZC5iaW5kKG51bGwsIGdyaWQpKTsK KyAgICAgIG9uQ29sdW1uU2VsZWN0QWxsLnN1YnNjcmliZShmdW5jdGlvbihlLCBhcmdzKSB7Cisg ICAgICAgIHVwZGF0ZVJhbmdlcyhhcmdzLmdyaWQsIGFyZ3MuY29sdW1uLmlkKTsKKyAgICAgIH0p OwogICAgIH07CiAKICAgICB2YXIgaGFuZGxlSGVhZGVyQ2xpY2sgPSBmdW5jdGlvbiAoZ3JpZCwg ZXZlbnQsIGFyZ3MpIHsKQEAgLTIxLDExICsyNiwyMCBAQCBkZWZpbmUoWwogICAgICAgaWYgKGlz Q29sdW1uU2VsZWN0YWJsZShjb2x1bW5EZWZpbml0aW9uKSkgewogICAgICAgICB2YXIgJGNvbHVt bkhlYWRlciA9ICQoZXZlbnQudGFyZ2V0KTsKICAgICAgICAgaWYgKGhhc0NsaWNrZWRDaGlsZE9m Q29sdW1uSGVhZGVyKGV2ZW50KSkgeworICAgICAgICAgIGlmICgkKGV2ZW50LnRhcmdldCkuaGFz Q2xhc3MoJ3NsaWNrLXJlc2l6YWJsZS1oYW5kbGUnKSkgeworICAgICAgICAgICAgcmV0dXJuOwor ICAgICAgICAgIH0KICAgICAgICAgICAkY29sdW1uSGVhZGVyID0gJChldmVudC50YXJnZXQpLnBh cmVudHMoJy5zbGljay1oZWFkZXItY29sdW1uJyk7CiAgICAgICAgIH0KICAgICAgICAgJGNvbHVt bkhlYWRlci50b2dnbGVDbGFzcygnc2VsZWN0ZWQnKTsKIAotICAgICAgICB1cGRhdGVSYW5nZXMo Z3JpZCwgY29sdW1uRGVmaW5pdGlvbi5pZCk7CisgICAgICAgIGlmICgkY29sdW1uSGVhZGVyLmhh c0NsYXNzKCdzZWxlY3RlZCcpKSB7CisgICAgICAgICAgb25CZWZvcmVDb2x1bW5TZWxlY3RBbGwu bm90aWZ5KGFyZ3MsIGV2ZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKGV2ZW50Lmlz UHJvcGFnYXRpb25TdG9wcGVkKCkgfHwgZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3Bw ZWQoKSkpIHsKKyAgICAgICAgICB1cGRhdGVSYW5nZXMoZ3JpZCwgY29sdW1uRGVmaW5pdGlvbi5p ZCk7CisgICAgICAgIH0KICAgICAgIH0KICAgICB9OwogCkBAIC0xMDcsNiArMTIxLDggQEAgZGVm aW5lKFsKICAgICAkLmV4dGVuZCh0aGlzLCB7CiAgICAgICAnaW5pdCc6IGluaXQsCiAgICAgICAn Z2V0Q29sdW1uRGVmaW5pdGlvbnMnOiBnZXRDb2x1bW5EZWZpbml0aW9ucywKKyAgICAgICdvbkJl Zm9yZUNvbHVtblNlbGVjdEFsbCc6IG9uQmVmb3JlQ29sdW1uU2VsZWN0QWxsLAorICAgICAgJ29u Q29sdW1uU2VsZWN0QWxsJzogb25Db2x1bW5TZWxlY3RBbGwsCiAgICAgfSk7CiAgIH07CiAgIHJl dHVybiBDb2x1bW5TZWxlY3RvcjsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9z ZWxlY3Rpb24vY29weV9kYXRhLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NlbGVjdGlvbi9j b3B5X2RhdGEuanMKaW5kZXggYzIyNjMyMy4uMzUyNTk2NiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRt aW4vc3RhdGljL2pzL3NlbGVjdGlvbi9jb3B5X2RhdGEuanMKKysrIGIvd2ViL3BnYWRtaW4vc3Rh dGljL2pzL3NlbGVjdGlvbi9jb3B5X2RhdGEuanMKQEAgLTEyLDE5ICsxMiwxOSBAQCBmdW5jdGlv biAoJCwgXywgY2xpcGJvYXJkLCBSYW5nZVNlbGVjdGlvbkhlbHBlciwgcmFuZ2VCb3VuZGFyeU5h dmlnYXRvcikgewogICAgIHZhciBncmlkID0gc2VsZi5zbGlja2dyaWQ7CiAgICAgdmFyIGNvbHVt bkRlZmluaXRpb25zID0gZ3JpZC5nZXRDb2x1bW5zKCk7CiAgICAgdmFyIHNlbGVjdGVkUmFuZ2Vz ID0gZ3JpZC5nZXRTZWxlY3Rpb25Nb2RlbCgpLmdldFNlbGVjdGVkUmFuZ2VzKCk7Ci0gICAgdmFy IGRhdGEgPSBncmlkLmdldERhdGEoKTsKKyAgICB2YXIgZGF0YVZpZXcgPSBncmlkLmdldERhdGEo KTsKICAgICB2YXIgcm93cyA9IGdyaWQuZ2V0U2VsZWN0ZWRSb3dzKCk7CiAKICAgICBpZiAoUmFu Z2VTZWxlY3Rpb25IZWxwZXIuYXJlQWxsUmFuZ2VzQ29tcGxldGVSb3dzKGdyaWQsIHNlbGVjdGVk UmFuZ2VzKSkgewogICAgICAgc2VsZi5jb3BpZWRfcm93cyA9IHJvd3MubWFwKGZ1bmN0aW9uIChy b3dJbmRleCkgewotICAgICAgICByZXR1cm4gZGF0YVtyb3dJbmRleF07CisgICAgICAgIHJldHVy biBncmlkLmdldERhdGFJdGVtKHJvd0luZGV4KTsKICAgICAgIH0pOwogICAgICAgc2V0UGFzdGVS b3dCdXR0b25FbmFibGVtZW50KHNlbGYuY2FuX2VkaXQsIHRydWUpOwogICAgIH0gZWxzZSB7CiAg ICAgICBzZWxmLmNvcGllZF9yb3dzID0gW107CiAgICAgICBzZXRQYXN0ZVJvd0J1dHRvbkVuYWJs ZW1lbnQoc2VsZi5jYW5fZWRpdCwgZmFsc2UpOwogICAgIH0KLSAgICB2YXIgY3N2VGV4dCA9IHJh bmdlQm91bmRhcnlOYXZpZ2F0b3IucmFuZ2VzVG9Dc3YoZGF0YSwgY29sdW1uRGVmaW5pdGlvbnMs IHNlbGVjdGVkUmFuZ2VzKTsKKyAgICB2YXIgY3N2VGV4dCA9IHJhbmdlQm91bmRhcnlOYXZpZ2F0 b3IucmFuZ2VzVG9Dc3YoZGF0YVZpZXcuZ2V0SXRlbXMoKSwgY29sdW1uRGVmaW5pdGlvbnMsIHNl bGVjdGVkUmFuZ2VzKTsKICAgICBpZiAoY3N2VGV4dCkgewogICAgICAgY2xpcGJvYXJkLmNvcHlU ZXh0VG9DbGlwYm9hcmQoY3N2VGV4dCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v c3RhdGljL2pzL3NlbGVjdGlvbi9ncmlkX3NlbGVjdG9yLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGlj L2pzL3NlbGVjdGlvbi9ncmlkX3NlbGVjdG9yLmpzCmluZGV4IDI0ZmQ5ZDYuLmRkYmJlMjMgMTAw NjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vZ3JpZF9zZWxlY3Rvci5q cworKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2VsZWN0aW9uL2dyaWRfc2VsZWN0b3IuanMK QEAgLTYsMjEgKzYsMzEgQEAgZGVmaW5lKFsnanF1ZXJ5JywKICAgJ3NvdXJjZXMvdXJsX2Zvcics CiBdLCBmdW5jdGlvbiAoJCwgZ2V0dGV4dCwgQ29sdW1uU2VsZWN0b3IsIFJvd1NlbGVjdG9yLCBS YW5nZVNlbGVjdGlvbkhlbHBlciwgdXJsX2ZvcikgewogICB2YXIgR3JpZFNlbGVjdG9yID0gZnVu Y3Rpb24gKGNvbHVtbkRlZmluaXRpb25zKSB7Ci0gICAgdmFyIHJvd1NlbGVjdG9yID0gbmV3IFJv d1NlbGVjdG9yKGNvbHVtbkRlZmluaXRpb25zKTsKLSAgICB2YXIgY29sdW1uU2VsZWN0b3IgPSBu ZXcgQ29sdW1uU2VsZWN0b3IoY29sdW1uRGVmaW5pdGlvbnMpOworICAgIHZhciBTbGljayA9IHdp bmRvdy5TbGljaywKKyAgICAgIHJvd1NlbGVjdG9yID0gbmV3IFJvd1NlbGVjdG9yKGNvbHVtbkRl ZmluaXRpb25zKSwKKyAgICAgIGNvbHVtblNlbGVjdG9yID0gbmV3IENvbHVtblNlbGVjdG9yKGNv bHVtbkRlZmluaXRpb25zKSwKKyAgICAgIG9uQmVmb3JlR3JpZFNlbGVjdEFsbCA9IG5ldyBTbGlj ay5FdmVudCgpLAorICAgICAgb25HcmlkU2VsZWN0QWxsID0gbmV3IFNsaWNrLkV2ZW50KCksCisg ICAgICBvbkJlZm9yZUdyaWRDb2x1bW5TZWxlY3RBbGwgPSBjb2x1bW5TZWxlY3Rvci5vbkJlZm9y ZUNvbHVtblNlbGVjdEFsbCwKKyAgICAgIG9uR3JpZENvbHVtblNlbGVjdEFsbCA9IGNvbHVtblNl bGVjdG9yLm9uQ29sdW1uU2VsZWN0QWxsOwogCiAgICAgdmFyIGluaXQgPSBmdW5jdGlvbiAoZ3Jp ZCkgewogICAgICAgdGhpcy5ncmlkID0gZ3JpZDsKICAgICAgIGdyaWQub25IZWFkZXJDbGljay5z dWJzY3JpYmUoZnVuY3Rpb24gKGV2ZW50LCBldmVudEFyZ3VtZW50cykgewotICAgICAgICBpZiAo ZXZlbnRBcmd1bWVudHMuY29sdW1uLnNlbGVjdEFsbE9uQ2xpY2spIHsKLSAgICAgICAgICB0b2dn bGVTZWxlY3RBbGwoZ3JpZCk7CisgICAgICAgIGlmIChldmVudEFyZ3VtZW50cy5jb2x1bW4uc2Vs ZWN0QWxsT25DbGljayAmJiAhJChldmVudC50YXJnZXQpLmhhc0NsYXNzKCdzbGljay1yZXNpemFi bGUtaGFuZGxlJykpIHsKKyAgICAgICAgICB0b2dnbGVTZWxlY3RBbGwoZ3JpZCwgZXZlbnQsIGV2 ZW50QXJndW1lbnRzKTsKICAgICAgICAgfQogICAgICAgfSk7CiAKICAgICAgIGdyaWQuZ2V0U2Vs ZWN0aW9uTW9kZWwoKS5vblNlbGVjdGVkUmFuZ2VzQ2hhbmdlZAotICAgICAgICAgIC5zdWJzY3Jp YmUoaGFuZGxlU2VsZWN0ZWRSYW5nZXNDaGFuZ2VkLmJpbmQobnVsbCwgZ3JpZCkpOworICAgICAg ICAuc3Vic2NyaWJlKGhhbmRsZVNlbGVjdGVkUmFuZ2VzQ2hhbmdlZC5iaW5kKG51bGwsIGdyaWQp KTsKKwogICAgICAgZ3JpZC5yZWdpc3RlclBsdWdpbihyb3dTZWxlY3Rvcik7CiAgICAgICBncmlk LnJlZ2lzdGVyUGx1Z2luKGNvbHVtblNlbGVjdG9yKTsKKworICAgICAgb25HcmlkU2VsZWN0QWxs LnN1YnNjcmliZShmdW5jdGlvbihlLCBhcmdzKSB7CisgICAgICAgIFJhbmdlU2VsZWN0aW9uSGVs cGVyLnNlbGVjdEFsbChhcmdzLmdyaWQpOworICAgICAgfSk7CiAgICAgfTsKIAogICAgIHZhciBn ZXRDb2x1bW5EZWZpbml0aW9ucyA9IGZ1bmN0aW9uIChjb2x1bW5EZWZpbml0aW9ucykgewpAQCAt NDUsMTEgKzU1LDE0IEBAIGRlZmluZShbJ2pxdWVyeScsCiAgICAgICB9CiAgICAgfQogCi0gICAg ZnVuY3Rpb24gdG9nZ2xlU2VsZWN0QWxsKGdyaWQpIHsKKyAgICBmdW5jdGlvbiB0b2dnbGVTZWxl Y3RBbGwoZ3JpZCwgZXZlbnQsIGV2ZW50QXJndW1lbnRzKSB7CiAgICAgICBpZiAoUmFuZ2VTZWxl Y3Rpb25IZWxwZXIuaXNFbnRpcmVHcmlkU2VsZWN0ZWQoZ3JpZCkpIHsKICAgICAgICAgc2VsZWN0 Tm9uZShncmlkKTsKICAgICAgIH0gZWxzZSB7Ci0gICAgICAgIFJhbmdlU2VsZWN0aW9uSGVscGVy LnNlbGVjdEFsbChncmlkKTsKKyAgICAgICAgb25CZWZvcmVHcmlkU2VsZWN0QWxsLm5vdGlmeShl dmVudEFyZ3VtZW50cywgZXZlbnQpOworICAgICAgICBpZiAoIShldmVudC5pc1Byb3BhZ2F0aW9u U3RvcHBlZCgpIHx8IGV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkpKSB7Cisg ICAgICAgICAgUmFuZ2VTZWxlY3Rpb25IZWxwZXIuc2VsZWN0QWxsKGdyaWQpOworICAgICAgICB9 CiAgICAgICB9CiAgICAgfQogCkBAIC02MSw2ICs3NCwxMCBAQCBkZWZpbmUoWydqcXVlcnknLAog ICAgICQuZXh0ZW5kKHRoaXMsIHsKICAgICAgICdpbml0JzogaW5pdCwKICAgICAgICdnZXRDb2x1 bW5EZWZpbml0aW9ucyc6IGdldENvbHVtbkRlZmluaXRpb25zLAorICAgICAgJ29uQmVmb3JlR3Jp ZFNlbGVjdEFsbCc6IG9uQmVmb3JlR3JpZFNlbGVjdEFsbCwKKyAgICAgICdvbkdyaWRTZWxlY3RB bGwnOiBvbkdyaWRTZWxlY3RBbGwsCisgICAgICAnb25CZWZvcmVHcmlkQ29sdW1uU2VsZWN0QWxs Jzogb25CZWZvcmVHcmlkQ29sdW1uU2VsZWN0QWxsLAorICAgICAgJ29uR3JpZENvbHVtblNlbGVj dEFsbCc6IG9uR3JpZENvbHVtblNlbGVjdEFsbCwKICAgICB9KTsKICAgfTsKIApkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NlbGVjdGlvbi9yYW5nZV9ib3VuZGFyeV9uYXZpZ2F0 b3IuanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2VsZWN0aW9uL3JhbmdlX2JvdW5kYXJ5X25h dmlnYXRvci5qcwppbmRleCA4MDNmNzVhLi4yNzRiNjIxIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1p bi9zdGF0aWMvanMvc2VsZWN0aW9uL3JhbmdlX2JvdW5kYXJ5X25hdmlnYXRvci5qcworKysgYi93 ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2VsZWN0aW9uL3JhbmdlX2JvdW5kYXJ5X25hdmlnYXRvci5q cwpAQCAtNTgsNiArNTgsNyBAQCBmdW5jdGlvbiAoUmFuZ2VTZWxlY3Rpb25IZWxwZXIpIHsKICAg ICB9LAogCiAgICAgcmFuZ2VzVG9Dc3Y6IGZ1bmN0aW9uIChkYXRhLCBjb2x1bW5EZWZpbml0aW9u cywgc2VsZWN0ZWRSYW5nZXMpIHsKKwogICAgICAgdmFyIHJvd1JhbmdlQm91bmRzID0gc2VsZWN0 ZWRSYW5nZXMubWFwKGZ1bmN0aW9uIChyYW5nZSkgewogICAgICAgICByZXR1cm4gW3JhbmdlLmZy b21Sb3csIHJhbmdlLnRvUm93XTsKICAgICAgIH0pOwpAQCAtNzIsNiArNzMsNyBAQCBmdW5jdGlv biAoUmFuZ2VTZWxlY3Rpb25IZWxwZXIpIHsKICAgICAgIHZhciBjc3ZSb3dzID0gdGhpcy5tYXBP dmVyMkRBcnJheShyb3dSYW5nZUJvdW5kcywgY29sUmFuZ2VCb3VuZHMsIHRoaXMuY3N2Q2VsbC5i aW5kKHRoaXMsIGRhdGEsIGNvbHVtbkRlZmluaXRpb25zKSwgZnVuY3Rpb24gKHJvd0RhdGEpIHsK ICAgICAgICAgcmV0dXJuIHJvd0RhdGEuam9pbignLCcpOwogICAgICAgfSk7CisKICAgICAgIHJl dHVybiBjc3ZSb3dzLmpvaW4oJ1xuJyk7CiAgICAgfSwKIApAQCAtMTAxLDcgKzEwMyw3IEBAIGZ1 bmN0aW9uIChSYW5nZVNlbGVjdGlvbkhlbHBlcikgewogICAgIH0sCiAKICAgICBjc3ZDZWxsOiBm dW5jdGlvbiAoZGF0YSwgY29sdW1uRGVmaW5pdGlvbnMsIHJvd0lkLCBjb2xJZCkgewotICAgICAg dmFyIHZhbCA9IGRhdGFbcm93SWRdW2NvbHVtbkRlZmluaXRpb25zW2NvbElkXS5wb3NdOworICAg ICAgdmFyIHZhbCA9IGRhdGFbcm93SWRdW2NvbHVtbkRlZmluaXRpb25zW2NvbElkXS5maWVsZF07 CiAKICAgICAgIGlmICh2YWwgJiYgXy5pc09iamVjdCh2YWwpKSB7CiAgICAgICAgIHZhbCA9ICdc JycgKyBKU09OLnN0cmluZ2lmeSh2YWwpICsgJ1wnJzsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWlu L3N0YXRpYy9qcy9zZWxlY3Rpb24vcm93X3NlbGVjdG9yLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGlj L2pzL3NlbGVjdGlvbi9yb3dfc2VsZWN0b3IuanMKaW5kZXggMjM2ZWQ2Mi4uNTlkMmZhMiAxMDA2 NDQKLS0tIGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NlbGVjdGlvbi9yb3dfc2VsZWN0b3IuanMK KysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NlbGVjdGlvbi9yb3dfc2VsZWN0b3IuanMKQEAg LTgyLDcgKzgyLDggQEAgZGVmaW5lKFsKICAgICAgICAgZm9ybWF0dGVyOiBmdW5jdGlvbiAocm93 SW5kZXgpIHsKICAgICAgICAgICByZXR1cm4gJzxzcGFuICcgKwogICAgICAgICAgICAgJ2RhdGEt cm93PSInICsgcm93SW5kZXggKyAnIiAnICsKLSAgICAgICAgICAgICdkYXRhLWNlbGwtdHlwZT0i cm93LWhlYWRlci1zZWxlY3RvciIvPic7CisgICAgICAgICAgICAnZGF0YS1jZWxsLXR5cGU9InJv dy1oZWFkZXItc2VsZWN0b3IiPicgKworICAgICAgICAgICAgKHJvd0luZGV4KzEpICsgJzwvc3Bh bj4nOwogICAgICAgICB9LAogICAgICAgICB3aWR0aDogMzAsCiAgICAgICB9KTsKZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vc2V0X3N0YWdlZF9yb3dzLmpzIGIv d2ViL3BnYWRtaW4vc3RhdGljL2pzL3NlbGVjdGlvbi9zZXRfc3RhZ2VkX3Jvd3MuanMKaW5kZXgg NDY5NzdlMy4uZTdhNTI5YyAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NlbGVj dGlvbi9zZXRfc3RhZ2VkX3Jvd3MuanMKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NlbGVj dGlvbi9zZXRfc3RhZ2VkX3Jvd3MuanMKQEAgLTIyLDUzICsyMiw0NCBAQCBkZWZpbmUoCiAgICAg ICAkKHNlbGVjdG9yKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKICAgICB9CiAKLSAgICBmdW5j dGlvbiBnZXRSb3dQcmltYXJ5S2V5VmFsdWVzVG9TdGFnZShzZWxlY3RlZFJvd3MsIHByaW1hcnlL ZXlDb2x1bW5JbmRpY2VzLCBncmlkRGF0YSkgeworICAgIGZ1bmN0aW9uIGdldFJvd1ByaW1hcnlL ZXlWYWx1ZXNUb1N0YWdlKHNlbGVjdGVkUm93cywgcHJpbWFyeUtleXMsIGRhdGFWaWV3LCBjbGll bnRfcHJpbWFyeV9rZXkpIHsKICAgICAgIHJldHVybiBfLnJlZHVjZShzZWxlY3RlZFJvd3MsIGZ1 bmN0aW9uIChwcmltYXJ5S2V5VmFsdWVzVG9TdGFnZSwgZGF0YUdyaWRSb3dJbmRleCkgewotICAg ICAgICB2YXIgZ3JpZFJvdyA9IGdyaWREYXRhW2RhdGFHcmlkUm93SW5kZXhdOwotCi0gICAgICAg IGlmIChpc1Jvd01pc3NpbmdQcmltYXJ5S2V5cyhncmlkUm93LCBwcmltYXJ5S2V5Q29sdW1uSW5k aWNlcykpIHsKKyAgICAgICAgdmFyIGdyaWRSb3cgPSBkYXRhVmlldy5nZXRJdGVtKGRhdGFHcmlk Um93SW5kZXgpOworICAgICAgICBpZiAoaXNSb3dNaXNzaW5nUHJpbWFyeUtleXMoZ3JpZFJvdywg cHJpbWFyeUtleXMpKSB7CiAgICAgICAgICAgcmV0dXJuIHByaW1hcnlLZXlWYWx1ZXNUb1N0YWdl OwogICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHRlbXBQSyA9IGdyaWRSb3cuX190ZW1wX1BLOwot ICAgICAgICBwcmltYXJ5S2V5VmFsdWVzVG9TdGFnZVt0ZW1wUEtdID0gZ2V0U2luZ2xlUm93UHJp bWFyeUtleVZhbHVlVG9TdGFnZShwcmltYXJ5S2V5Q29sdW1uSW5kaWNlcywgZ3JpZFJvdyk7Ci0K KyAgICAgICAgdmFyIHRlbXBQSyA9IGdyaWRSb3dbY2xpZW50X3ByaW1hcnlfa2V5XTsKKyAgICAg ICAgcHJpbWFyeUtleVZhbHVlc1RvU3RhZ2VbdGVtcFBLXSA9IGdldFNpbmdsZVJvd1ByaW1hcnlL ZXlWYWx1ZVRvU3RhZ2UocHJpbWFyeUtleXMsIGdyaWRSb3cpOwogICAgICAgICByZXR1cm4gcHJp bWFyeUtleVZhbHVlc1RvU3RhZ2U7CiAgICAgICB9LCB7fSk7CiAgICAgfQogCi0gICAgZnVuY3Rp b24gaXNSb3dNaXNzaW5nUHJpbWFyeUtleXMoZ3JpZFJvdywgcHJpbWFyeUtleUNvbHVtbkluZGlj ZXMpIHsKKyAgICBmdW5jdGlvbiBpc1Jvd01pc3NpbmdQcmltYXJ5S2V5cyhncmlkUm93LCBwcmlt YXJ5S2V5cykgewogICAgICAgaWYgKF8uaXNVbmRlZmluZWQoZ3JpZFJvdykpIHsKICAgICAgICAg cmV0dXJuIHRydWU7CiAgICAgICB9CiAKICAgICAgIHJldHVybiAhXy5pc1VuZGVmaW5lZCgKLSAg ICAgICAgXy5maW5kKHByaW1hcnlLZXlDb2x1bW5JbmRpY2VzLCBmdW5jdGlvbiAocGtJbmRleCkg ewotICAgICAgICAgIHJldHVybiBfLmlzVW5kZWZpbmVkKGdyaWRSb3dbcGtJbmRleF0pOworICAg ICAgICBfLmZpbmQocHJpbWFyeUtleXMgLCBmdW5jdGlvbiAocGspIHsKKyAgICAgICAgICByZXR1 cm4gXy5pc1VuZGVmaW5lZChncmlkUm93W3BrXSk7CiAgICAgICAgIH0pCiAgICAgICApOwogICAg IH0KIAotICAgIGZ1bmN0aW9uIGdldFNpbmdsZVJvd1ByaW1hcnlLZXlWYWx1ZVRvU3RhZ2UocHJp bWFyeUtleUNvbHVtbkluZGljZXMsIGdyaWRSb3cpIHsKKyAgICBmdW5jdGlvbiBnZXRTaW5nbGVS b3dQcmltYXJ5S2V5VmFsdWVUb1N0YWdlKHByaW1hcnlLZXlzLCBncmlkUm93KSB7CiAgICAgICB2 YXIgcm93VG9TdGFnZSA9IHt9OwotICAgICAgaWYgKHByaW1hcnlLZXlDb2x1bW5JbmRpY2VzLmxl bmd0aCkgewotICAgICAgICBfLmVhY2goXy5rZXlzKGdyaWRSb3cpLCBmdW5jdGlvbiAoY29sdW1u UG9zKSB7Ci0gICAgICAgICAgaWYgKF8uY29udGFpbnMocHJpbWFyeUtleUNvbHVtbkluZGljZXMs IE51bWJlcihjb2x1bW5Qb3MpKSkKLSAgICAgICAgICAgIHJvd1RvU3RhZ2VbY29sdW1uUG9zXSA9 IGdyaWRSb3dbY29sdW1uUG9zXTsKKyAgICAgIGlmIChwcmltYXJ5S2V5cyAmJiBwcmltYXJ5S2V5 cy5sZW5ndGgpIHsKKyAgICAgICAgXy5lYWNoKF8ua2V5cyhncmlkUm93KSwgZnVuY3Rpb24gKGNv bHVtbk5hbWVzKSB7CisgICAgICAgICAgaWYgKF8uY29udGFpbnMocHJpbWFyeUtleXMsIGNvbHVt bk5hbWVzKSkKKyAgICAgICAgICAgIHJvd1RvU3RhZ2VbY29sdW1uTmFtZXNdID0gZ3JpZFJvd1tj b2x1bW5OYW1lc107CiAgICAgICAgIH0pOwogICAgICAgfQogICAgICAgcmV0dXJuIHJvd1RvU3Rh Z2U7CiAgICAgfQogCiAgICAgZnVuY3Rpb24gZ2V0UHJpbWFyeUtleXNGb3JTZWxlY3RlZFJvd3Mo c2VsZiwgc2VsZWN0ZWRSb3dzKSB7Ci0gICAgICB2YXIgcHJpbWFyeUtleUNvbHVtbkluZGljZXMg PSBfLm1hcChfLmtleXMoc2VsZi5rZXlzKSwgZnVuY3Rpb24gKGNvbHVtbk5hbWUpIHsKLSAgICAg ICAgdmFyIGNvbHVtbkluZm8gPSBfLmZpbmRXaGVyZShzZWxmLmNvbHVtbnMsIHtuYW1lOiBjb2x1 bW5OYW1lfSk7Ci0gICAgICAgIHJldHVybiBjb2x1bW5JbmZvWydwb3MnXTsKLSAgICAgIH0pOwot Ci0gICAgICB2YXIgZ3JpZERhdGEgPSBzZWxmLmdyaWQuZ2V0RGF0YSgpOwotICAgICAgdmFyIHN0 YWdlZFJvd3MgPSBnZXRSb3dQcmltYXJ5S2V5VmFsdWVzVG9TdGFnZShzZWxlY3RlZFJvd3MsIHBy aW1hcnlLZXlDb2x1bW5JbmRpY2VzLCBncmlkRGF0YSk7Ci0KKyAgICAgIHZhciBkYXRhVmlldyA9 IHNlbGYuZ3JpZC5nZXREYXRhKCk7CisgICAgICB2YXIgc3RhZ2VkUm93cyA9IGdldFJvd1ByaW1h cnlLZXlWYWx1ZXNUb1N0YWdlKHNlbGVjdGVkUm93cywgXy5rZXlzKHNlbGYua2V5cyksIGRhdGFW aWV3LCBzZWxmLmNsaWVudF9wcmltYXJ5X2tleSk7CiAgICAgICByZXR1cm4gc3RhZ2VkUm93czsK ICAgICB9CiAKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zbGlja2dyaWQvc2xp Y2sucGdhZG1pbi5lZGl0b3JzLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NsaWNrZ3JpZC9z bGljay5wZ2FkbWluLmVkaXRvcnMuanMKaW5kZXggZjJkYWJlMC4uMTViNWZlOSAxMDA2NDQKLS0t IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NsaWNrZ3JpZC9zbGljay5wZ2FkbWluLmVkaXRvcnMu anMKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3NsaWNrZ3JpZC9zbGljay5wZ2FkbWluLmVk aXRvcnMuanMKQEAgLTc2LDE4ICs3NiwxOCBAQAogICAgICAgICAgIGxhc3RfdmFsdWUgPSAoY29s dW1uX3R5cGUgPT09ICdudW1iZXInKSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAoXy5pc0Vt cHR5KGxhc3RfdmFsdWUpIHx8IGxhc3RfdmFsdWUpIDogbGFzdF92YWx1ZTsKIAotICAgICAgaXRl bVthcmdzLmNvbHVtbi5wb3NdID0gc3RhdGU7CisgICAgICBpdGVtW2FyZ3MuY29sdW1uLmZpZWxk XSA9IHN0YXRlOwogICAgICAgaWYgKGxhc3RfdmFsdWUgJiYgXy5pc051bGwoc3RhdGUpICYmCiAg ICAgICAgICAgKF8uaXNVbmRlZmluZWQoZ3JpZC5jb3BpZWRfcm93c1tyb3ddKSB8fAogICAgICAg ICAgIF8uaXNVbmRlZmluZWQoZ3JpZC5jb3BpZWRfcm93c1tyb3ddW2NlbGxdKSkKICAgICAgICkg ewotICAgICAgICBpdGVtW2FyZ3MuY29sdW1uLnBvc10gPSB1bmRlZmluZWQ7CisgICAgICAgIGl0 ZW1bYXJncy5jb2x1bW4uZmllbGRdID0gdW5kZWZpbmVkOwogICAgICAgICBpZiAoZ3JpZC5jb3Bp ZWRfcm93c1tyb3ddID09IHVuZGVmaW5lZCkgZ3JpZC5jb3BpZWRfcm93c1tyb3ddID0gW107CiAg ICAgICAgIGdyaWQuY29waWVkX3Jvd3Nbcm93XVtjZWxsXSA9IDE7CiAgICAgICB9CiAgICAgfQog ICAgIGVsc2UgewotICAgICAgaXRlbVthcmdzLmNvbHVtbi5wb3NdID0gc3RhdGU7CisgICAgICBp dGVtW2FyZ3MuY29sdW1uLmZpZWxkXSA9IHN0YXRlOwogICAgIH0KICAgfQogCkBAIC0xODksMTQg KzE4OSwxNCBAQAogICAgIHRoaXMubG9hZFZhbHVlID0gZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAg IHZhciBjb2wgPSBhcmdzLmNvbHVtbjsKIAotICAgICAgaWYgKF8uaXNVbmRlZmluZWQoaXRlbVth cmdzLmNvbHVtbi5wb3NdKSAmJiBjb2wuaGFzX2RlZmF1bHRfdmFsKSB7CisgICAgICBpZiAoXy5p c1VuZGVmaW5lZChpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXSkgJiYgY29sLmhhc19kZWZhdWx0X3Zh bCkgewogICAgICAgICAkaW5wdXQudmFsKGRlZmF1bHRWYWx1ZSA9ICIiKTsKICAgICAgIH0KLSAg ICAgIGVsc2UgaWYgKGl0ZW1bYXJncy5jb2x1bW4ucG9zXSA9PT0gIiIpIHsKKyAgICAgIGVsc2Ug aWYgKGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdID09PSAiIikgewogICAgICAgICAkaW5wdXQudmFs KGRlZmF1bHRWYWx1ZSA9ICInJyIpOwogICAgICAgfQogICAgICAgZWxzZSB7Ci0gICAgICAgICRp bnB1dC52YWwoZGVmYXVsdFZhbHVlID0gaXRlbVthcmdzLmNvbHVtbi5wb3NdKTsKKyAgICAgICAg JGlucHV0LnZhbChkZWZhdWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXSk7CiAgICAg ICAgICRpbnB1dC5zZWxlY3QoKTsKICAgICAgIH0KICAgICB9OwpAQCAtMzIzLDcgKzMyMyw3IEBA CiAgICAgfTsKIAogICAgIHRoaXMubG9hZFZhbHVlID0gZnVuY3Rpb24gKGl0ZW0pIHsKLSAgICAg IHZhciBkYXRhID0gZGVmYXVsdFZhbHVlID0gaXRlbVthcmdzLmNvbHVtbi5wb3NdOworICAgICAg dmFyIGRhdGEgPSBkZWZhdWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXTsKICAgICAg IGlmIChkYXRhICYmIHR5cGVvZiBkYXRhID09PSAib2JqZWN0IiAmJiAhQXJyYXkuaXNBcnJheShk YXRhKSkgewogICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7CiAgICAgICB9IGVs c2UgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHsKQEAgLTQ0Myw3ICs0NDMsNyBAQAogICAgIH07 CiAKICAgICB0aGlzLmxvYWRWYWx1ZSA9IGZ1bmN0aW9uIChpdGVtKSB7Ci0gICAgICAkaW5wdXQu dmFsKGRlZmF1bHRWYWx1ZSA9IGl0ZW1bYXJncy5jb2x1bW4ucG9zXSk7CisgICAgICAkaW5wdXQu dmFsKGRlZmF1bHRWYWx1ZSA9IGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdKTsKICAgICAgICRpbnB1 dC5zZWxlY3QoKTsKICAgICB9OwogCkBAIC00NTIsNyArNDUyLDcgQEAKICAgICB9OwogCiAgICAg dGhpcy5hcHBseVZhbHVlID0gZnVuY3Rpb24gKGl0ZW0sIHN0YXRlKSB7Ci0gICAgICBpdGVtW2Fy Z3MuY29sdW1uLnBvc10gPSBzdGF0ZTsKKyAgICAgIGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdID0g c3RhdGU7CiAgICAgfTsKIAogICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7 CkBAIC01MzEsMTMgKzUzMSwxMyBAQAogICAgIH07CiAKICAgICB0aGlzLmxvYWRWYWx1ZSA9IGZ1 bmN0aW9uIChpdGVtKSB7Ci0gICAgICBkZWZhdWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29sdW1uLnBv c107Ci0gICAgICBpZiAoXy5pc051bGwoZGVmYXVsdFZhbHVlKXx8IF8uaXNVbmRlZmluZWQoZGVm YXVsdFZhbHVlKSkgeworICAgICAgZGVmYXVsdFZhbHVlID0gaXRlbVthcmdzLmNvbHVtbi5maWVs ZF07CisgICAgICBpZiAoXy5pc051bGwoZGVmYXVsdFZhbHVlKXx8Xy5pc1VuZGVmaW5lZChkZWZh dWx0VmFsdWUpKSB7CiAgICAgICAgICRzZWxlY3QucHJvcCgnaW5kZXRlcm1pbmF0ZScsIHRydWUp OwogICAgICAgICAkc2VsZWN0LmRhdGEoJ2NoZWNrZWQnLCAyKTsKICAgICAgIH0KICAgICAgIGVs c2UgewotICAgICAgICBkZWZhdWx0VmFsdWUgPSAhIWl0ZW1bYXJncy5jb2x1bW4ucG9zXTsKKyAg ICAgICAgZGVmYXVsdFZhbHVlID0gISFpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXTsKICAgICAgICAg aWYgKGRlZmF1bHRWYWx1ZSkgewogICAgICAgICAgICRzZWxlY3QucHJvcCgnY2hlY2tlZCcsIHRy dWUpOwogICAgICAgICAgICRzZWxlY3QuZGF0YSgnY2hlY2tlZCcsIDApOwpAQCAtNTU2LDcgKzU1 Niw3IEBACiAgICAgfTsKIAogICAgIHRoaXMuYXBwbHlWYWx1ZSA9IGZ1bmN0aW9uIChpdGVtLCBz dGF0ZSkgewotICAgICAgaXRlbVthcmdzLmNvbHVtbi5wb3NdID0gc3RhdGU7CisgICAgICBpdGVt W2FyZ3MuY29sdW1uLmZpZWxkXSA9IHN0YXRlOwogICAgIH07CiAKICAgICB0aGlzLmlzVmFsdWVD aGFuZ2VkID0gZnVuY3Rpb24gKCkgewpAQCAtNjQ4LDcgKzY0OCw3IEBACiAgICAgfTsKIAogICAg IHRoaXMubG9hZFZhbHVlID0gZnVuY3Rpb24gKGl0ZW0pIHsKLSAgICAgIHZhciBkYXRhID0gZGVm YXVsdFZhbHVlID0gaXRlbVthcmdzLmNvbHVtbi5wb3NdOworICAgICAgdmFyIGRhdGEgPSBkZWZh dWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29sdW1uLmZpZWxkXTsKICAgICAgIGlmICh0eXBlb2YgZGF0 YSA9PT0gIm9iamVjdCIgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSkpIHsKICAgICAgICAgZGF0YSA9 IEpTT04uc3RyaW5naWZ5KGRhdGEpOwogICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRh dGEpKSB7CkBAIC02NzEsNyArNjcxLDcgQEAKICAgICB9OwogCiAgICAgdGhpcy5hcHBseVZhbHVl ID0gZnVuY3Rpb24gKGl0ZW0sIHN0YXRlKSB7Ci0gICAgICBpdGVtW2FyZ3MuY29sdW1uLnBvc10g PSBzdGF0ZTsKKyAgICAgIGl0ZW1bYXJncy5jb2x1bW4uZmllbGRdID0gc3RhdGU7CiAgICAgfTsK IAogICAgIHRoaXMuaXNWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7CkBAIC03MjUsNyArNzI1 LDcgQEAKICAgICB9OwogCiAgICAgdGhpcy5sb2FkVmFsdWUgPSBmdW5jdGlvbiAoaXRlbSkgewot ICAgICAgdmFyIHZhbHVlID0gaXRlbVthcmdzLmNvbHVtbi5wb3NdOworICAgICAgdmFyIHZhbHVl ID0gaXRlbVthcmdzLmNvbHVtbi5maWVsZF07CiAKICAgICAgIC8vIENoZWNrIGlmIHZhbHVlIGlz IG51bGwgb3IgdW5kZWZpbmVkCiAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiB0eXBl b2YgdmFsdWUgPT09ICJ1bmRlZmluZWQiKSB7CkBAIC04NTgsNyArODU4LDcgQEAKICAgICB9Owog CiAgICAgdGhpcy5sb2FkVmFsdWUgPSBmdW5jdGlvbiAoaXRlbSkgewotICAgICAgZGVmYXVsdFZh bHVlID0gaXRlbVthcmdzLmNvbHVtbi5wb3NdOworICAgICAgZGVmYXVsdFZhbHVlID0gaXRlbVth cmdzLmNvbHVtbi5maWVsZF07CiAgICAgICAkaW5wdXQudmFsKGRlZmF1bHRWYWx1ZSk7CiAgICAg ICAkaW5wdXRbMF0uZGVmYXVsdFZhbHVlID0gZGVmYXVsdFZhbHVlOwogICAgICAgJGlucHV0LnNl bGVjdCgpOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL19faW5pdF9f LnB5IGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL19faW5pdF9fLnB5CmluZGV4IDgyOGNi OTkuLjcwOTMzMmMgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9fX2lu aXRfXy5weQorKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvX19pbml0X18ucHkKQEAg LTI3LDcgKzI3LDcgQEAgZnJvbSBwZ2FkbWluLnV0aWxzLnNxbGF1dG9jb21wbGV0ZS5hdXRvY29t cGxldGUgaW1wb3J0IFNRTEF1dG9Db21wbGV0ZQogZnJvbSBwZ2FkbWluLm1pc2MuZmlsZV9tYW5h Z2VyIGltcG9ydCBGaWxlbWFuYWdlcgogCiAKLWZyb20gY29uZmlnIGltcG9ydCBQR19ERUZBVUxU X0RSSVZFUgorZnJvbSBjb25maWcgaW1wb3J0IFBHX0RFRkFVTFRfRFJJVkVSLCBPTl9ERU1BTkRf UkVDT1JEX0NPVU5UCiAKIE1PRFVMRV9OQU1FID0gJ3NxbGVkaXRvcicKIApAQCAtMjI5LDEzICsy MjksMzIgQEAgZGVmIHN0YXJ0X3ZpZXdfZGF0YSh0cmFuc19pZCk6CiAKICAgICAjIENoZWNrIHRo ZSB0cmFuc2FjdGlvbiBhbmQgY29ubmVjdGlvbiBzdGF0dXMKICAgICBzdGF0dXMsIGVycm9yX21z ZywgY29ubiwgdHJhbnNfb2JqLCBzZXNzaW9uX29iaiA9IGNoZWNrX3RyYW5zYWN0aW9uX3N0YXR1 cyh0cmFuc19pZCkKKworICAgICMgZ2V0IHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gYXMgY3VycmVu dCBjb25uZWN0aW9uIHdoaWNoIGlzIGF0dGFjaGVkIHRvCisgICAgIyB0cmFucyBpZCBob2xkcyB0 aGUgY3Vyc29yIHdoaWNoIGhhcyBxdWVyeSByZXN1bHQgc28gd2UgY2Fubm90IHVzZSB0aGF0Cisg ICAgIyBjb25uZWN0aW9uIHRvIGV4ZWN1dGUgYW5vdGhlciBxdWVyeSBvdGhlcndpc2Ugd2UnbGwg bG9zZSBxdWVyeSByZXN1bHQuCisKKyAgICBtYW5hZ2VyID0gZ2V0X2RyaXZlcihQR19ERUZBVUxU X0RSSVZFUikuY29ubmVjdGlvbl9tYW5hZ2VyKHRyYW5zX29iai5zaWQpCisgICAgZGVmYXVsdF9j b25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRpZD10cmFuc19vYmouZGlkKQorCisgICAgIyBDb25u ZWN0IHRvIHRoZSBTZXJ2ZXIgaWYgbm90IGNvbm5lY3RlZC4KKyAgICBpZiBub3QgZGVmYXVsdF9j b25uLmNvbm5lY3RlZCgpOgorICAgICAgICBzdGF0dXMsIG1zZyA9IGRlZmF1bHRfY29ubi5jb25u ZWN0KCkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBtYWtlX2pz b25fcmVzcG9uc2UoCisgICAgICAgICAgICAgICAgZGF0YT17J3N0YXR1cyc6IHN0YXR1cywgJ3Jl c3VsdCc6IHUie30iLmZvcm1hdChtc2cpfQorICAgICAgICAgICAgKQorCiAgICAgaWYgc3RhdHVz IGFuZCBjb25uIGlzIG5vdCBOb25lIFwKICAgICAgICAgICAgIGFuZCB0cmFuc19vYmogaXMgbm90 IE5vbmUgYW5kIHNlc3Npb25fb2JqIGlzIG5vdCBOb25lOgogICAgICAgICB0cnk6CisgICAgICAg ICAgICAjIHNldCBmZXRjaGVkIHJvdyBjb3VudCB0byAwIGFzIHdlIGFyZSBleGVjdXRpbmcgcXVl cnkgYWdhaW4uCisgICAgICAgICAgICB0cmFuc19vYmoudXBkYXRlX2ZldGNoZWRfcm93X2NudCgw KQorICAgICAgICAgICAgc2Vzc2lvbl9vYmpbJ2NvbW1hbmRfb2JqJ10gPSBwaWNrbGUuZHVtcHMo dHJhbnNfb2JqLCAtMSkKIAogICAgICAgICAgICAgIyBGZXRjaCB0aGUgc3FsIGFuZCBwcmltYXJ5 X2tleXMgZnJvbSB0aGUgb2JqZWN0CiAgICAgICAgICAgICBzcWwgPSB0cmFuc19vYmouZ2V0X3Nx bCgpCi0gICAgICAgICAgICBwa19uYW1lcywgcHJpbWFyeV9rZXlzID0gdHJhbnNfb2JqLmdldF9w cmltYXJ5X2tleXMoKQorICAgICAgICAgICAgcGtfbmFtZXMsIHByaW1hcnlfa2V5cyA9IHRyYW5z X29iai5nZXRfcHJpbWFyeV9rZXlzKGRlZmF1bHRfY29ubikKIAogICAgICAgICAgICAgIyBGZXRj aCB0aGUgYXBwbGllZCBmaWx0ZXIuCiAgICAgICAgICAgICBmaWx0ZXJfYXBwbGllZCA9IHRyYW5z X29iai5pc19maWx0ZXJfYXBwbGllZCgpCkBAIC0zMDMsNiArMzIyLDggQEAgZGVmIHN0YXJ0X3F1 ZXJ5X3Rvb2wodHJhbnNfaWQpOgogICAgICMgVXNlIHBpY2tsZS5sb2FkcyBmdW5jdGlvbiB0byBn ZXQgdGhlIGNvbW1hbmQgb2JqZWN0CiAgICAgc2Vzc2lvbl9vYmogPSBncmlkX2RhdGFbc3RyKHRy YW5zX2lkKV0KICAgICB0cmFuc19vYmogPSBwaWNrbGUubG9hZHMoc2Vzc2lvbl9vYmpbJ2NvbW1h bmRfb2JqJ10pCisgICAgIyBzZXQgZmV0Y2hlZCByb3cgY291bnQgdG8gMCBhcyB3ZSBhcmUgZXhl Y3V0aW5nIHF1ZXJ5IGFnYWluLgorICAgIHRyYW5zX29iai51cGRhdGVfZmV0Y2hlZF9yb3dfY250 KDApCiAKICAgICBjYW5fZWRpdCA9IEZhbHNlCiAgICAgY2FuX2ZpbHRlciA9IEZhbHNlCkBAIC00 MjksNjUgKzQ1MCw2IEBAIGRlZiBwcmVmZXJlbmNlcyh0cmFuc19pZCk6CiAgICAgICAgIHJldHVy biBzdWNjZXNzX3JldHVybigpCiAKIAotQGJsdWVwcmludC5yb3V0ZSgnL2NvbHVtbnMvPGludDp0 cmFuc19pZD4nLCBtZXRob2RzPVsiR0VUIl0pCi1AbG9naW5fcmVxdWlyZWQKLWRlZiBnZXRfY29s dW1ucyh0cmFuc19pZCk6Ci0gICAgIiIiCi0gICAgVGhpcyBtZXRob2Qgd2lsbCByZXR1cm5zIGxp c3Qgb2YgY29sdW1ucyBvZiBsYXN0IGFzeW5jIHF1ZXJ5LgotCi0gICAgQXJnczoKLSAgICAgICAg dHJhbnNfaWQ6IHVuaXF1ZSB0cmFuc2FjdGlvbiBpZAotICAgICIiIgotICAgIGNvbHVtbnMgPSBk aWN0KCkKLSAgICBjb2x1bW5zX2luZm8gPSBOb25lCi0gICAgcHJpbWFyeV9rZXlzID0gTm9uZQot ICAgIHJzZXQgPSBOb25lCi0gICAgc3RhdHVzLCBlcnJvcl9tc2csIGNvbm4sIHRyYW5zX29iaiwg c2Vzc2lvbl9vYmogPSBjaGVja190cmFuc2FjdGlvbl9zdGF0dXModHJhbnNfaWQpCi0gICAgaWYg c3RhdHVzIGFuZCBjb25uIGlzIG5vdCBOb25lIGFuZCBzZXNzaW9uX29iaiBpcyBub3QgTm9uZToK LQotICAgICAgICB2ZXIgPSBjb25uLm1hbmFnZXIudmVyc2lvbgotICAgICAgICAjIEdldCB0aGUg dGVtcGxhdGUgcGF0aCBmb3IgdGhlIGNvbHVtbgotICAgICAgICB0ZW1wbGF0ZV9wYXRoID0gJ2Nv bHVtbi9zcWwvI3swfSMnLmZvcm1hdCh2ZXIpCi0gICAgICAgIGNvbW1hbmRfb2JqID0gcGlja2xl LmxvYWRzKHNlc3Npb25fb2JqWydjb21tYW5kX29iaiddKQotICAgICAgICBpZiBoYXNhdHRyKGNv bW1hbmRfb2JqLCAnb2JqX2lkJyk6Ci0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUo Ii8iLmpvaW4oW3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdub2Rlcy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGlkPWNvbW1hbmRfb2JqLm9ial9pZCkKLSAgICAgICAgICAgICMgcm93cyB3aXRoIGF0 dHJpYnV0ZSBub3RfbnVsbAotICAgICAgICAgICAgc3RhdHVzLCByc2V0ID0gY29ubi5leGVjdXRl XzJkYXJyYXkoU1FMKQotICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgICAg ICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJzZXQpCi0KLSAgICAgICAg IyBDaGVjayBQSyBjb2x1bW4gaW5mbyBpcyBhdmFpbGFibGUgb3Igbm90Ci0gICAgICAgIGlmICdw cmltYXJ5X2tleXMnIGluIHNlc3Npb25fb2JqOgotICAgICAgICAgICAgcHJpbWFyeV9rZXlzID0g c2Vzc2lvbl9vYmpbJ3ByaW1hcnlfa2V5cyddCi0KLSAgICAgICAgIyBGZXRjaCBjb2x1bW4gaW5m b3JtYXRpb24KLSAgICAgICAgY29sdW1uc19pbmZvID0gY29ubi5nZXRfY29sdW1uX2luZm8oKQot ICAgICAgICBpZiBjb2x1bW5zX2luZm8gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBmb3Iga2V5 LCBjb2wgaW4gZW51bWVyYXRlKGNvbHVtbnNfaW5mbyk6Ci0gICAgICAgICAgICAgICAgY29sX3R5 cGUgPSBkaWN0KCkKLSAgICAgICAgICAgICAgICBjb2xfdHlwZVsndHlwZV9jb2RlJ10gPSBjb2xb J3R5cGVfY29kZSddCi0gICAgICAgICAgICAgICAgY29sX3R5cGVbJ3R5cGVfbmFtZSddID0gTm9u ZQotICAgICAgICAgICAgICAgIGlmIHJzZXQ6Ci0gICAgICAgICAgICAgICAgICAgIGNvbF90eXBl Wydub3RfbnVsbCddID0gY29sWydub3RfbnVsbCddID0gXAotICAgICAgICAgICAgICAgICAgICAg ICAgcnNldFsncm93cyddW2tleV1bJ25vdF9udWxsJ10KLQotICAgICAgICAgICAgICAgICAgICBj b2xfdHlwZVsnaGFzX2RlZmF1bHRfdmFsJ10gPSBjb2xbJ2hhc19kZWZhdWx0X3ZhbCddID0gXAot ICAgICAgICAgICAgICAgICAgICAgICAgcnNldFsncm93cyddW2tleV1bJ2hhc19kZWZhdWx0X3Zh bCddCi0KLSAgICAgICAgICAgICAgICBjb2x1bW5zW2NvbFsnbmFtZSddXSA9IGNvbF90eXBlCi0K LSAgICAgICAgIyBBcyB3ZSBjaGFuZ2VkIHRoZSB0cmFuc2FjdGlvbiBvYmplY3Qgd2UgbmVlZCB0 bwotICAgICAgICAjIHJlc3RvcmUgaXQgYW5kIHVwZGF0ZSB0aGUgc2Vzc2lvbiB2YXJpYWJsZS4K LSAgICAgICAgc2Vzc2lvbl9vYmpbJ2NvbHVtbnNfaW5mbyddID0gY29sdW1ucwotICAgICAgICB1 cGRhdGVfc2Vzc2lvbl9ncmlkX3RyYW5zYWN0aW9uKHRyYW5zX2lkLCBzZXNzaW9uX29iaikKLQot ICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6IFRydWUsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sdW1ucyc6IGNvbHVtbnNfaW5mbywK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcmltYXJ5X2tleXMnOiBwcmlt YXJ5X2tleXN9KQotCi0KIEBibHVlcHJpbnQucm91dGUoJy9wb2xsLzxpbnQ6dHJhbnNfaWQ+Jywg bWV0aG9kcz1bIkdFVCJdKQogQGxvZ2luX3JlcXVpcmVkCiBkZWYgcG9sbCh0cmFuc19pZCk6CkBA IC00OTksMTIgKzQ2MSwyMSBAQCBkZWYgcG9sbCh0cmFuc19pZCk6CiAgICAgIiIiCiAgICAgcmVz dWx0ID0gTm9uZQogICAgIHJvd3NfYWZmZWN0ZWQgPSAwCisgICAgcm93c19mZXRjaGVkX2Zyb20g PSAwCisgICAgcm93c19mZXRjaGVkX3RvID0gMAorICAgIGhhc19tb3JlX3Jvd3MgPSBGYWxzZQog ICAgIGFkZGl0aW9uYWxfcmVzdWx0ID0gW10KKyAgICBjb2x1bW5zID0gZGljdCgpCisgICAgY29s dW1uc19pbmZvID0gTm9uZQorICAgIHByaW1hcnlfa2V5cyA9IE5vbmUKKyAgICB0eXBlcyA9IHt9 CisgICAgY2xpZW50X3ByaW1hcnlfa2V5ID0gTm9uZQorICAgIHJzZXQgPSBOb25lCiAKICAgICAj IENoZWNrIHRoZSB0cmFuc2FjdGlvbiBhbmQgY29ubmVjdGlvbiBzdGF0dXMKICAgICBzdGF0dXMs IGVycm9yX21zZywgY29ubiwgdHJhbnNfb2JqLCBzZXNzaW9uX29iaiA9IGNoZWNrX3RyYW5zYWN0 aW9uX3N0YXR1cyh0cmFuc19pZCkKICAgICBpZiBzdGF0dXMgYW5kIGNvbm4gaXMgbm90IE5vbmUg YW5kIHNlc3Npb25fb2JqIGlzIG5vdCBOb25lOgotICAgICAgICBzdGF0dXMsIHJlc3VsdCA9IGNv bm4ucG9sbChmb3JtYXR0ZWRfZXhjZXB0aW9uX21zZz1UcnVlKQorICAgICAgICBzdGF0dXMsIHJl c3VsdCA9IGNvbm4ucG9sbChmb3JtYXR0ZWRfZXhjZXB0aW9uX21zZz1UcnVlLCBub19yZXN1bHQ9 VHJ1ZSkKICAgICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5h bF9zZXJ2ZXJfZXJyb3IocmVzdWx0KQogICAgICAgICBlbGlmIHN0YXR1cyA9PSBBU1lOQ19PSzoK QEAgLTUxOSw2ICs0OTAsODAgQEAgZGVmIHBvbGwodHJhbnNfaWQpOgogICAgICAgICAgICAgICAg IGlmICh0cmFuc19zdGF0dXMgPT0gVFhfU1RBVFVTX0lORVJST1IgYW5kCiAgICAgICAgICAgICAg ICAgICAgICAgICB0cmFuc19vYmouYXV0b19yb2xsYmFjayk6CiAgICAgICAgICAgICAgICAgICAg IGNvbm4uZXhlY3V0ZV92b2lkKCJST0xMQkFDSzsiKQorCisgICAgICAgICAgICBzdCwgcmVzdWx0 ID0gY29ubi5hc3luY19mZXRjaG1hbnlfMmRhcnJheShPTl9ERU1BTkRfUkVDT1JEX0NPVU5UKQor ICAgICAgICAgICAgaWYgc3Q6CisgICAgICAgICAgICAgICAgaWYgJ3ByaW1hcnlfa2V5cycgaW4g c2Vzc2lvbl9vYmo6CisgICAgICAgICAgICAgICAgICAgIHByaW1hcnlfa2V5cyA9IHNlc3Npb25f b2JqWydwcmltYXJ5X2tleXMnXQorCisgICAgICAgICAgICAgICAgIyBGZXRjaCBjb2x1bW4gaW5m b3JtYXRpb24KKyAgICAgICAgICAgICAgICBjb2x1bW5zX2luZm8gPSBjb25uLmdldF9jb2x1bW5f aW5mbygpCisgICAgICAgICAgICAgICAgY2xpZW50X3ByaW1hcnlfa2V5ID0gZ2VuZXJhdGVfY2xp ZW50X3ByaW1hcnlfa2V5X25hbWUoCisgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNfaW5mbwor ICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBzZXNzaW9uX29ialsnY2xpZW50X3By aW1hcnlfa2V5J10gPSBjbGllbnRfcHJpbWFyeV9rZXkKKworICAgICAgICAgICAgICAgIGlmIGNv bHVtbnNfaW5mbyBpcyBub3QgTm9uZToKKworICAgICAgICAgICAgICAgICAgICBjb21tYW5kX29i aiA9IHBpY2tsZS5sb2FkcyhzZXNzaW9uX29ialsnY29tbWFuZF9vYmonXSkKKyAgICAgICAgICAg ICAgICAgICAgaWYgaGFzYXR0cihjb21tYW5kX29iaiwgJ29ial9pZCcpOgorICAgICAgICAgICAg ICAgICAgICAgICAgIyBHZXQgdGhlIHRlbXBsYXRlIHBhdGggZm9yIHRoZSBjb2x1bW4KKyAgICAg ICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlX3BhdGggPSAnY29sdW1uL3NxbC8jezB9IycuZm9y bWF0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm4ubWFuYWdlci52ZXJzaW9uCisg ICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgICAgICAgICAgICAgIFNRTCA9 IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vZGVzLnNxbCddKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9Y29tbWFu ZF9vYmoub2JqX2lkKQorICAgICAgICAgICAgICAgICAgICAgICAgIyByb3dzIHdpdGggYXR0cmli dXRlIG5vdF9udWxsCisgICAgICAgICAgICAgICAgICAgICAgICBjb2xzdCwgcnNldCA9IGNvbm4u ZXhlY3V0ZV8yZGFycmF5KFNRTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBjb2xz dDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXJzZXQpCisKKyAgICAgICAgICAgICAgICAgICAgZm9yIGtleSwgY29sIGlu IGVudW1lcmF0ZShjb2x1bW5zX2luZm8pOgorICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5 cGUgPSBkaWN0KCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlWyd0eXBlX2NvZGUn XSA9IGNvbFsndHlwZV9jb2RlJ10KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlWyd0 eXBlX25hbWUnXSA9IE5vbmUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNbY29sWydu YW1lJ11dID0gY29sX3R5cGUKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgcnNldDoKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZVsnbm90X251bGwnXSA9IGNvbFsnbm90 X251bGwnXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNldFsncm93cydd W2tleV1bJ25vdF9udWxsJ10KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBl WydoYXNfZGVmYXVsdF92YWwnXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29sWydoYXNfZGVmYXVsdF92YWwnXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcnNldFsncm93cyddW2tleV1bJ2hhc19kZWZhdWx0X3ZhbCddCisKKyAgICAgICAgICAgICAg ICBpZiBjb2x1bW5zOgorICAgICAgICAgICAgICAgICAgICBzdCwgdHlwZXMgPSBmZXRjaF9wZ190 eXBlcyhjb2x1bW5zLCB0cmFuc19vYmopCisKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN0 OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcih0 eXBlcykKKworICAgICAgICAgICAgICAgICAgICBmb3IgY29sX2luZm8gaW4gY29sdW1ucy52YWx1 ZXMoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjb2xfdHlwZSBpbiB0eXBlczoKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2xfdHlwZVsnb2lkJ10gPT0gY29sX2luZm9b J3R5cGVfY29kZSddOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfaW5mb1sn dHlwZV9uYW1lJ10gPSBjb2xfdHlwZVsndHlwbmFtZSddCisKKyAgICAgICAgICAgICAgICAgICAg c2Vzc2lvbl9vYmpbJ2NvbHVtbnNfaW5mbyddID0gY29sdW1ucworICAgICAgICAgICAgICAgICMg c3RhdHVzIG9mIGFzeW5jX2ZldGNobWFueV8yZGFycmF5IGlzIFRydWUgYW5kIHJlc3VsdCBpcyBu b25lCisgICAgICAgICAgICAgICAgIyBtZWFucyBub3RoaW5nIHRvIGZldGNoCisgICAgICAgICAg ICAgICAgaWYgcmVzdWx0IGFuZCByb3dzX2FmZmVjdGVkID4gLTE6CisgICAgICAgICAgICAgICAg ICAgIHJlc19sZW4gPSBsZW4ocmVzdWx0KQorICAgICAgICAgICAgICAgICAgICBpZiByZXNfbGVu ID09IE9OX0RFTUFORF9SRUNPUkRfQ09VTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNf bW9yZV9yb3dzID0gVHJ1ZQorCisgICAgICAgICAgICAgICAgICAgIGlmIHJlc19sZW4gPiAwOgor ICAgICAgICAgICAgICAgICAgICAgICAgcm93c19mZXRjaGVkX2Zyb20gPSB0cmFuc19vYmouZ2V0 X2ZldGNoZWRfcm93X2NudCgpCisgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc19vYmoudXBk YXRlX2ZldGNoZWRfcm93X2NudChyb3dzX2ZldGNoZWRfZnJvbSArIHJlc19sZW4pCisgICAgICAg ICAgICAgICAgICAgICAgICByb3dzX2ZldGNoZWRfZnJvbSArPSAxCisgICAgICAgICAgICAgICAg ICAgICAgICByb3dzX2ZldGNoZWRfdG8gPSB0cmFuc19vYmouZ2V0X2ZldGNoZWRfcm93X2NudCgp CisgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uX29ialsnY29tbWFuZF9vYmonXSA9IHBp Y2tsZS5kdW1wcyh0cmFuc19vYmosIC0xKQorCisgICAgICAgICAgICAgICAgIyBBcyB3ZSBjaGFu Z2VkIHRoZSB0cmFuc2FjdGlvbiBvYmplY3Qgd2UgbmVlZCB0bworICAgICAgICAgICAgICAgICMg cmVzdG9yZSBpdCBhbmQgdXBkYXRlIHRoZSBzZXNzaW9uIHZhcmlhYmxlLgorICAgICAgICAgICAg ICAgIHVwZGF0ZV9zZXNzaW9uX2dyaWRfdHJhbnNhY3Rpb24odHJhbnNfaWQsIHNlc3Npb25fb2Jq KQorCiAgICAgICAgIGVsaWYgc3RhdHVzID09IEFTWU5DX0VYRUNVVElPTl9BQk9SVEVEOgogICAg ICAgICAgICAgc3RhdHVzID0gJ0NhbmNlbCcKICAgICAgICAgZWxzZToKQEAgLTU1OSw1MSArNjA0 LDEyMyBAQCBkZWYgcG9sbCh0cmFuc19pZCk6CiAgICAgICAgIGRhdGE9ewogICAgICAgICAgICAg J3N0YXR1cyc6IHN0YXR1cywgJ3Jlc3VsdCc6IHJlc3VsdCwKICAgICAgICAgICAgICdyb3dzX2Fm ZmVjdGVkJzogcm93c19hZmZlY3RlZCwKLSAgICAgICAgICAgICdhZGRpdGlvbmFsX21lc3NhZ2Vz JzogYWRkaXRpb25hbF9tZXNzYWdlcworICAgICAgICAgICAgJ3Jvd3NfZmV0Y2hlZF9mcm9tJzog cm93c19mZXRjaGVkX2Zyb20sCisgICAgICAgICAgICAncm93c19mZXRjaGVkX3RvJzogcm93c19m ZXRjaGVkX3RvLAorICAgICAgICAgICAgJ2FkZGl0aW9uYWxfbWVzc2FnZXMnOiBhZGRpdGlvbmFs X21lc3NhZ2VzLAorICAgICAgICAgICAgJ2hhc19tb3JlX3Jvd3MnOiBoYXNfbW9yZV9yb3dzLAor ICAgICAgICAgICAgJ2NvbGluZm8nOiBjb2x1bW5zX2luZm8sCisgICAgICAgICAgICAncHJpbWFy eV9rZXlzJzogcHJpbWFyeV9rZXlzLAorICAgICAgICAgICAgJ3R5cGVzJzogdHlwZXMsCisgICAg ICAgICAgICAnY2xpZW50X3ByaW1hcnlfa2V5JzogY2xpZW50X3ByaW1hcnlfa2V5CiAgICAgICAg IH0KICAgICApCiAKIAotQGJsdWVwcmludC5yb3V0ZSgnL2ZldGNoL3R5cGVzLzxpbnQ6dHJhbnNf aWQ+JywgbWV0aG9kcz1bIkdFVCJdKQorQGJsdWVwcmludC5yb3V0ZSgnL2ZldGNoLzxpbnQ6dHJh bnNfaWQ+JywgbWV0aG9kcz1bIkdFVCJdKQorQGJsdWVwcmludC5yb3V0ZSgnL2ZldGNoLzxpbnQ6 dHJhbnNfaWQ+LzxpbnQ6ZmV0Y2hfYWxsPicsIG1ldGhvZHM9WyJHRVQiXSkKIEBsb2dpbl9yZXF1 aXJlZAotZGVmIGZldGNoX3BnX3R5cGVzKHRyYW5zX2lkKToKK2RlZiBmZXRjaCh0cmFuc19pZCwg ZmV0Y2hfYWxsPU5vbmUpOgorICAgIHJlc3VsdCA9IE5vbmUKKyAgICBoYXNfbW9yZV9yb3dzID0g RmFsc2UKKyAgICByb3dzX2ZldGNoZWRfZnJvbSA9IDAKKyAgICByb3dzX2ZldGNoZWRfdG8gPSAw CisgICAgZmV0Y2hfcm93X2NudCA9IC0xIGlmIGZldGNoX2FsbCA9PSAxIGVsc2UgT05fREVNQU5E X1JFQ09SRF9DT1VOVAorCisgICAgIyBDaGVjayB0aGUgdHJhbnNhY3Rpb24gYW5kIGNvbm5lY3Rp b24gc3RhdHVzCisgICAgc3RhdHVzLCBlcnJvcl9tc2csIGNvbm4sIHRyYW5zX29iaiwgc2Vzc2lv bl9vYmogPSBjaGVja190cmFuc2FjdGlvbl9zdGF0dXModHJhbnNfaWQpCisgICAgaWYgc3RhdHVz IGFuZCBjb25uIGlzIG5vdCBOb25lIGFuZCBzZXNzaW9uX29iaiBpcyBub3QgTm9uZToKKyAgICAg ICAgc3RhdHVzLCByZXN1bHQgPSBjb25uLmFzeW5jX2ZldGNobWFueV8yZGFycmF5KGZldGNoX3Jv d19jbnQpCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICBzdGF0dXMgPSAnRXJy b3InCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzdGF0dXMgPSAnU3VjY2VzcycKKyAgICAg ICAgICAgIHJlc19sZW4gPSBsZW4ocmVzdWx0KQorICAgICAgICAgICAgaWYgZmV0Y2hfcm93X2Nu dCAhPSAtMSBhbmQgcmVzX2xlbiA9PSBPTl9ERU1BTkRfUkVDT1JEX0NPVU5UOgorICAgICAgICAg ICAgICAgIGhhc19tb3JlX3Jvd3MgPSBUcnVlCisKKyAgICAgICAgICAgIGlmIHJlc19sZW46Cisg ICAgICAgICAgICAgICAgcm93c19mZXRjaGVkX2Zyb20gPSB0cmFuc19vYmouZ2V0X2ZldGNoZWRf cm93X2NudCgpCisgICAgICAgICAgICAgICAgdHJhbnNfb2JqLnVwZGF0ZV9mZXRjaGVkX3Jvd19j bnQocm93c19mZXRjaGVkX2Zyb20gKyByZXNfbGVuKQorICAgICAgICAgICAgICAgIHJvd3NfZmV0 Y2hlZF9mcm9tICs9IDEKKyAgICAgICAgICAgICAgICByb3dzX2ZldGNoZWRfdG8gPSB0cmFuc19v YmouZ2V0X2ZldGNoZWRfcm93X2NudCgpCisgICAgICAgICAgICAgICAgc2Vzc2lvbl9vYmpbJ2Nv bW1hbmRfb2JqJ10gPSBwaWNrbGUuZHVtcHModHJhbnNfb2JqLCAtMSkKKyAgICAgICAgICAgICAg ICB1cGRhdGVfc2Vzc2lvbl9ncmlkX3RyYW5zYWN0aW9uKHRyYW5zX2lkLCBzZXNzaW9uX29iaikK KyAgICBlbHNlOgorICAgICAgICBzdGF0dXMgPSAnTm90Q29ubmVjdGVkJworICAgICAgICByZXN1 bHQgPSBlcnJvcl9tc2cKKworICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAg IGRhdGE9eworICAgICAgICAgICAgJ3N0YXR1cyc6IHN0YXR1cywgJ3Jlc3VsdCc6IHJlc3VsdCwK KyAgICAgICAgICAgICdoYXNfbW9yZV9yb3dzJzogaGFzX21vcmVfcm93cywKKyAgICAgICAgICAg ICdyb3dzX2ZldGNoZWRfZnJvbSc6IHJvd3NfZmV0Y2hlZF9mcm9tLAorICAgICAgICAgICAgJ3Jv d3NfZmV0Y2hlZF90byc6IHJvd3NfZmV0Y2hlZF90bworICAgICAgICB9CisgICAgKQorCisKK2Rl ZiBmZXRjaF9wZ190eXBlcyhjb2x1bW5zX2luZm8sIHRyYW5zX29iaik6CiAgICAgIiIiCiAgICAg VGhpcyBtZXRob2QgaXMgdXNlZCB0byBmZXRjaCB0aGUgcGcgdHlwZXMsIHdoaWNoIGlzIHJlcXVp cmVkCiAgICAgdG8gbWFwIHRoZSBkYXRhIHR5cGUgY29tZXMgYXMgYSByZXN1bHQgb2YgdGhlIHF1 ZXJ5LgogCiAgICAgQXJnczoKLSAgICAgICAgdHJhbnNfaWQ6IHVuaXF1ZSB0cmFuc2FjdGlvbiBp ZAorICAgICAgICBjb2x1bW5zX2luZm86CiAgICAgIiIiCiAKLSAgICAjIENoZWNrIHRoZSB0cmFu c2FjdGlvbiBhbmQgY29ubmVjdGlvbiBzdGF0dXMKLSAgICBzdGF0dXMsIGVycm9yX21zZywgY29u biwgdHJhbnNfb2JqLCBzZXNzaW9uX29iaiA9IGNoZWNrX3RyYW5zYWN0aW9uX3N0YXR1cyh0cmFu c19pZCkKLSAgICBpZiBzdGF0dXMgYW5kIGNvbm4gaXMgbm90IE5vbmUgXAotICAgICAgICAgICAg YW5kIHRyYW5zX29iaiBpcyBub3QgTm9uZSBhbmQgc2Vzc2lvbl9vYmogaXMgbm90IE5vbmU6Ci0g ICAgICAgIHJlcyA9IHt9Ci0gICAgICAgIGlmICdjb2x1bW5zX2luZm8nIGluIHNlc3Npb25fb2Jq IFwKLSAgICAgICAgICAgICAgICBhbmQgc2Vzc2lvbl9vYmpbJ2NvbHVtbnNfaW5mbyddIGlzIG5v dCBOb25lOgorICAgICMgZ2V0IHRoZSBkZWZhdWx0IGNvbm5lY3Rpb24gYXMgY3VycmVudCBjb25u ZWN0aW9uIGF0dGFjaGVkIHRvIHRyYW5zIGlkCisgICAgIyBob2xkcyB0aGUgY3Vyc29yIHdoaWNo IGhhcyBxdWVyeSByZXN1bHQgc28gd2UgY2Fubm90IHVzZSB0aGF0IGNvbm5lY3Rpb24KKyAgICAj IHRvIGV4ZWN1dGUgYW5vdGhlciBxdWVyeSBvdGhlcndpc2Ugd2UnbGwgbG9zZSBxdWVyeSByZXN1 bHQuCisKKyAgICBtYW5hZ2VyID0gZ2V0X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikuY29ubmVj dGlvbl9tYW5hZ2VyKHRyYW5zX29iai5zaWQpCisgICAgZGVmYXVsdF9jb25uID0gbWFuYWdlci5j b25uZWN0aW9uKGRpZD10cmFuc19vYmouZGlkKQorCisgICAgIyBDb25uZWN0IHRvIHRoZSBTZXJ2 ZXIgaWYgbm90IGNvbm5lY3RlZC4KKyAgICByZXMgPSBbXQorICAgIGlmIG5vdCBkZWZhdWx0X2Nv bm4uY29ubmVjdGVkKCk6CisgICAgICAgIHN0YXR1cywgbXNnID0gZGVmYXVsdF9jb25uLmNvbm5l Y3QoKQorICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIHN0YXR1cywg bXNnCiAKLSAgICAgICAgICAgIG9pZHMgPSBbc2Vzc2lvbl9vYmpbJ2NvbHVtbnNfaW5mbyddW2Nv bF1bJ3R5cGVfY29kZSddIGZvciBjb2wgaW4gc2Vzc2lvbl9vYmpbJ2NvbHVtbnNfaW5mbyddXQor ICAgIG9pZHMgPSBbY29sdW1uc19pbmZvW2NvbF1bJ3R5cGVfY29kZSddIGZvciBjb2wgaW4gY29s dW1uc19pbmZvXQogCi0gICAgICAgICAgICBpZiBvaWRzOgotICAgICAgICAgICAgICAgIHN0YXR1 cywgcmVzID0gY29ubi5leGVjdXRlX2RpY3QoCi0gICAgICAgICAgICAgICAgICAgIHUiIiJTRUxF Q1Qgb2lkLCBmb3JtYXRfdHlwZShvaWQsbnVsbCkgYXMgdHlwbmFtZSBGUk9NIHBnX3R5cGUgV0hF UkUgb2lkIElOICVzIE9SREVSIEJZIG9pZDsKKyAgICBpZiBvaWRzOgorICAgICAgICBzdGF0dXMs IHJlcyA9IGRlZmF1bHRfY29ubi5leGVjdXRlX2RpY3QoCisgICAgICAgICAgICB1IiIiU0VMRUNU IG9pZCwgZm9ybWF0X3R5cGUob2lkLG51bGwpIGFzIHR5cG5hbWUgRlJPTSBwZ190eXBlIFdIRVJF IG9pZCBJTiAlcyBPUkRFUiBCWSBvaWQ7CiAiIiIsIFt0dXBsZShvaWRzKV0pCiAKLSAgICAgICAg ICAgICAgICBpZiBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgICAgICMgaXRlcmF0ZSB0aHJvdWdo IHBnX3R5cGVzIGFuZCB1cGRhdGUgdGhlIHR5cGUgbmFtZSBpbiBzZXNzaW9uIG9iamVjdAotICAg ICAgICAgICAgICAgICAgICBmb3IgcmVjb3JkIGluIHJlc1sncm93cyddOgotICAgICAgICAgICAg ICAgICAgICAgICAgZm9yIGNvbCBpbiBzZXNzaW9uX29ialsnY29sdW1uc19pbmZvJ106Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9vYmogPSBzZXNzaW9uX29ialsnY29sdW1uc19p bmZvJ11bY29sXQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHR5cGVfb2JqWyd0eXBl X2NvZGUnXSA9PSByZWNvcmRbJ29pZCddOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0eXBlX29ialsndHlwZV9uYW1lJ10gPSByZWNvcmRbJ3R5cG5hbWUnXQorICAgICAgICBpZiBu b3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCByZXMKIAotICAgICAgICAgICAg ICAgICAgICB1cGRhdGVfc2Vzc2lvbl9ncmlkX3RyYW5zYWN0aW9uKHRyYW5zX2lkLCBzZXNzaW9u X29iaikKKyAgICAgICAgcmV0dXJuIHN0YXR1cywgcmVzWydyb3dzJ10KICAgICBlbHNlOgotICAg ICAgICBzdGF0dXMgPSBGYWxzZQotICAgICAgICByZXMgPSBlcnJvcl9tc2cKLQotICAgIHJldHVy biBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6IHN0YXR1cywgJ3Jlc3VsdCc6IHJl c30pCisgICAgICAgIHJldHVybiBUcnVlLCBbXQorCisKK2RlZiBnZW5lcmF0ZV9jbGllbnRfcHJp bWFyeV9rZXlfbmFtZShjb2x1bW5zX2luZm8pOgorICAgIHRlbXBfa2V5ID0gJ19fdGVtcF9QSycK KyAgICBpZiBub3QgY29sdW1uc19pbmZvOgorICAgICAgICByZXR1cm4gdGVtcF9rZXkKKworICAg IGluaXRpYWxfdGVtcF9rZXlfbGVuID0gbGVuKHRlbXBfa2V5KQorICAgIGR1cGxpY2F0ZSA9IEZh bHNlCisgICAgc3VmZml4ID0gMQorICAgIHdoaWxlIDE6CisgICAgICAgIGZvciBjb2wgaW4gY29s dW1uc19pbmZvOgorICAgICAgICAgICAgaWYgY29sWyduYW1lJ10gPT0gdGVtcF9rZXk6CisgICAg ICAgICAgICAgICAgZHVwbGljYXRlID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisgICAg ICAgIGlmIGR1cGxpY2F0ZToKKyAgICAgICAgICAgIGlmIGluaXRpYWxfdGVtcF9rZXlfbGVuID09 IGxlbih0ZW1wX2tleSk6CisgICAgICAgICAgICAgICAgdGVtcF9rZXkgKz0gc3RyKHN1ZmZpeCkK KyAgICAgICAgICAgICAgICBzdWZmaXggKz0gMQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAg ICAgICAgICB0ZW1wX2tleSA9IHRlbXBfa2V5WzotMV0gKyBzdHIoc3VmZml4KQorICAgICAgICAg ICAgICAgIHN1ZmZpeCArPSAxCisgICAgICAgICAgICBkdXBsaWNhdGUgPSBGYWxzZQorICAgICAg ICBlbHNlOgorICAgICAgICAgICAgYnJlYWsKKyAgICByZXR1cm4gdGVtcF9rZXkKIAogCiBAYmx1 ZXByaW50LnJvdXRlKCcvc2F2ZS88aW50OnRyYW5zX2lkPicsIG1ldGhvZHM9WyJQVVQiLCAiUE9T VCJdKQpAQCAtNjE1LDcgKzczMiw2IEBAIGRlZiBzYXZlKHRyYW5zX2lkKToKICAgICBBcmdzOgog ICAgICAgICB0cmFuc19pZDogdW5pcXVlIHRyYW5zYWN0aW9uIGlkCiAgICAgIiIiCi0KICAgICBp ZiByZXF1ZXN0LmRhdGE6CiAgICAgICAgIGNoYW5nZWRfZGF0YSA9IGpzb24ubG9hZHMocmVxdWVz dC5kYXRhLCBlbmNvZGluZz0ndXRmLTgnKQogICAgIGVsc2U6CkBAIC02MjUsNyArNzQxLDYgQEAg ZGVmIHNhdmUodHJhbnNfaWQpOgogICAgIHN0YXR1cywgZXJyb3JfbXNnLCBjb25uLCB0cmFuc19v YmosIHNlc3Npb25fb2JqID0gY2hlY2tfdHJhbnNhY3Rpb25fc3RhdHVzKHRyYW5zX2lkKQogICAg IGlmIHN0YXR1cyBhbmQgY29ubiBpcyBub3QgTm9uZSBcCiAgICAgICAgICAgICBhbmQgdHJhbnNf b2JqIGlzIG5vdCBOb25lIGFuZCBzZXNzaW9uX29iaiBpcyBub3QgTm9uZToKLSAgICAgICAgc2V0 YXR0cih0cmFuc19vYmosICdjb2x1bW5zX2luZm8nLCBzZXNzaW9uX29ialsnY29sdW1uc19pbmZv J10pCiAKICAgICAgICAgIyBJZiB0aGVyZSBpcyBubyBwcmltYXJ5IGtleSBmb3VuZCB0aGVuIHJl dHVybiBmcm9tIHRoZSBmdW5jdGlvbi4KICAgICAgICAgaWYgbGVuKHNlc3Npb25fb2JqWydwcmlt YXJ5X2tleXMnXSkgPD0gMCBvciBsZW4oY2hhbmdlZF9kYXRhKSA8PSAwOgpAQCAtNjM2LDcgKzc1 MSwyMiBAQCBkZWYgc2F2ZSh0cmFuc19pZCk6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg ICAgKQogCi0gICAgICAgIHN0YXR1cywgcmVzLCBxdWVyeV9yZXMsIF9yb3dpZCA9IHRyYW5zX29i ai5zYXZlKGNoYW5nZWRfZGF0YSkKKyAgICAgICAgbWFuYWdlciA9IGdldF9kcml2ZXIoUEdfREVG QVVMVF9EUklWRVIpLmNvbm5lY3Rpb25fbWFuYWdlcih0cmFuc19vYmouc2lkKQorICAgICAgICBk ZWZhdWx0X2Nvbm4gPSBtYW5hZ2VyLmNvbm5lY3Rpb24oZGlkPXRyYW5zX29iai5kaWQpCisKKyAg ICAgICAgIyBDb25uZWN0IHRvIHRoZSBTZXJ2ZXIgaWYgbm90IGNvbm5lY3RlZC4KKyAgICAgICAg aWYgbm90IGRlZmF1bHRfY29ubi5jb25uZWN0ZWQoKToKKyAgICAgICAgICAgIHN0YXR1cywgbXNn ID0gZGVmYXVsdF9jb25uLmNvbm5lY3QoKQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAg ICAgICAgICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgICAg ICAgICBkYXRhPXsnc3RhdHVzJzogc3RhdHVzLCAncmVzdWx0JzogdSJ7fSIuZm9ybWF0KG1zZyl9 CisgICAgICAgICAgICAgICAgKQorCisgICAgICAgIHN0YXR1cywgcmVzLCBxdWVyeV9yZXMsIF9y b3dpZCA9IHRyYW5zX29iai5zYXZlKAorICAgICAgICAgICAgY2hhbmdlZF9kYXRhLAorICAgICAg ICAgICAgc2Vzc2lvbl9vYmpbJ2NvbHVtbnNfaW5mbyddLAorICAgICAgICAgICAgc2Vzc2lvbl9v YmpbJ2NsaWVudF9wcmltYXJ5X2tleSddLAorICAgICAgICAgICAgZGVmYXVsdF9jb25uKQogICAg IGVsc2U6CiAgICAgICAgIHN0YXR1cyA9IEZhbHNlCiAgICAgICAgIHJlcyA9IGVycm9yX21zZwpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL2NvbW1hbmQucHkgYi93ZWIv cGdhZG1pbi90b29scy9zcWxlZGl0b3IvY29tbWFuZC5weQppbmRleCBiN2Q4YTc4Li4zYjdlZmQw IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvY29tbWFuZC5weQorKysg Yi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvY29tbWFuZC5weQpAQCAtMjU4LDcgKzI1OCwy MSBAQCBjbGFzcyBTUUxGaWx0ZXIob2JqZWN0KToKICAgICAgICAgcmV0dXJuIHN0YXR1cywgcmVz dWx0CiAKIAotY2xhc3MgR3JpZENvbW1hbmQoQmFzZUNvbW1hbmQsIFNRTEZpbHRlcik6CitjbGFz cyBGZXRjaGVkUm93VHJhY2tlcihvYmplY3QpOgorICAgICIiIgorICAgIEtlZXBzIHRyYWNrIG9m IGZldGNoZWQgcm93IGNvdW50LgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3 YXJncyk6CisgICAgICAgIHNlbGYuZmV0Y2hlZF9yb3dzID0gMAorCisgICAgZGVmIGdldF9mZXRj aGVkX3Jvd19jbnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmZldGNoZWRfcm93cworCisg ICAgZGVmIHVwZGF0ZV9mZXRjaGVkX3Jvd19jbnQoc2VsZiwgcm93c19jbnQpOgorICAgICAgICBz ZWxmLmZldGNoZWRfcm93cyA9IHJvd3NfY250CisKKworY2xhc3MgR3JpZENvbW1hbmQoQmFzZUNv bW1hbmQsIFNRTEZpbHRlciwgRmV0Y2hlZFJvd1RyYWNrZXIpOgogICAgICIiIgogICAgIGNsYXNz IEdyaWRDb21tYW5kKG9iamVjdCkKIApAQCAtMjkwLDYgKzMwNCw3IEBAIGNsYXNzIEdyaWRDb21t YW5kKEJhc2VDb21tYW5kLCBTUUxGaWx0ZXIpOgogICAgICAgICAiIiIKICAgICAgICAgQmFzZUNv bW1hbmQuX19pbml0X18oc2VsZiwgKiprd2FyZ3MpCiAgICAgICAgIFNRTEZpbHRlci5fX2luaXRf XyhzZWxmLCAqKmt3YXJncykKKyAgICAgICAgRmV0Y2hlZFJvd1RyYWNrZXIuX19pbml0X18oc2Vs ZiwgKiprd2FyZ3MpCiAKICAgICAgICAgIyBTYXZlIHRoZSBjb25uZWN0aW9uIGlkLCBjb21tYW5k IHR5cGUKICAgICAgICAgc2VsZi5jb25uX2lkID0ga3dhcmdzWydjb25uX2lkJ10gaWYgJ2Nvbm5f aWQnIGluIGt3YXJncyBlbHNlIE5vbmUKQEAgLTI5OSwxMCArMzE0LDEwIEBAIGNsYXNzIEdyaWRD b21tYW5kKEJhc2VDb21tYW5kLCBTUUxGaWx0ZXIpOgogICAgICAgICBpZiBzZWxmLmNtZF90eXBl ID09IFZJRVdfRklSU1RfMTAwX1JPV1Mgb3Igc2VsZi5jbWRfdHlwZSA9PSBWSUVXX0xBU1RfMTAw X1JPV1M6CiAgICAgICAgICAgICBzZWxmLmxpbWl0ID0gMTAwCiAKLSAgICBkZWYgZ2V0X3ByaW1h cnlfa2V5cyhzZWxmKToKKyAgICBkZWYgZ2V0X3ByaW1hcnlfa2V5cyhzZWxmLCAqYXJncywgKipr d2FyZ3MpOgogICAgICAgICByZXR1cm4gTm9uZSwgTm9uZQogCi0gICAgZGVmIHNhdmUoc2VsZiwg Y2hhbmdlZF9kYXRhKToKKyAgICBkZWYgc2F2ZShzZWxmLCBjaGFuZ2VkX2RhdGEsIGRlZmF1bHRf Y29ubj1Ob25lKToKICAgICAgICAgcmV0dXJuIGZvcmJpZGRlbihlcnJtc2c9Z2V0dGV4dCgiRGF0 YSBjYW5ub3QgYmUgc2F2ZWQgZm9yIHRoZSBjdXJyZW50IG9iamVjdC4iKSkKIAogICAgIGRlZiBn ZXRfbGltaXQoc2VsZik6CkBAIC0zNDAsMTQgKzM1NSwxNCBAQCBjbGFzcyBUYWJsZUNvbW1hbmQo R3JpZENvbW1hbmQpOgogICAgICAgICAjIGNhbGwgYmFzZSBjbGFzcyBpbml0IHRvIGZldGNoIHRo ZSB0YWJsZSBuYW1lCiAgICAgICAgIHN1cGVyKFRhYmxlQ29tbWFuZCwgc2VsZikuX19pbml0X18o Kiprd2FyZ3MpCiAKLSAgICBkZWYgZ2V0X3NxbChzZWxmKToKKyAgICBkZWYgZ2V0X3NxbChzZWxm LCBkZWZhdWx0X2Nvbm49Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBUaGlzIG1ldGhvZCBp cyB1c2VkIHRvIGNyZWF0ZSBhIHByb3BlciBTUUwgcXVlcnkKICAgICAgICAgdG8gZmV0Y2ggdGhl IGRhdGEgZm9yIHRoZSBzcGVjaWZpZWQgdGFibGUKICAgICAgICAgIiIiCiAKICAgICAgICAgIyBG ZXRjaCB0aGUgcHJpbWFyeSBrZXlzIGZvciB0aGUgdGFibGUKLSAgICAgICAgcGtfbmFtZXMsIHBy aW1hcnlfa2V5cyA9IHNlbGYuZ2V0X3ByaW1hcnlfa2V5cygpCisgICAgICAgIHBrX25hbWVzLCBw cmltYXJ5X2tleXMgPSBzZWxmLmdldF9wcmltYXJ5X2tleXMoZGVmYXVsdF9jb25uKQogCiAgICAg ICAgIHNxbF9maWx0ZXIgPSBzZWxmLmdldF9maWx0ZXIoKQogCkBAIC0zNjIsMTMgKzM3NywxNiBA QCBjbGFzcyBUYWJsZUNvbW1hbmQoR3JpZENvbW1hbmQpOgogCiAgICAgICAgIHJldHVybiBzcWwK IAotICAgIGRlZiBnZXRfcHJpbWFyeV9rZXlzKHNlbGYpOgorICAgIGRlZiBnZXRfcHJpbWFyeV9r ZXlzKHNlbGYsIGRlZmF1bHRfY29ubj1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIFRoaXMg ZnVuY3Rpb24gaXMgdXNlZCB0byBmZXRjaCB0aGUgcHJpbWFyeSBrZXkgY29sdW1ucy4KICAgICAg ICAgIiIiCiAgICAgICAgIGRyaXZlciA9IGdldF9kcml2ZXIoUEdfREVGQVVMVF9EUklWRVIpCi0g ICAgICAgIG1hbmFnZXIgPSBkcml2ZXIuY29ubmVjdGlvbl9tYW5hZ2VyKHNlbGYuc2lkKQotICAg ICAgICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRpZD1zZWxmLmRpZCwgY29ubl9pZD1zZWxm LmNvbm5faWQpCisgICAgICAgIGlmIGRlZmF1bHRfY29ubiBpcyBOb25lOgorICAgICAgICAgICAg bWFuYWdlciA9IGRyaXZlci5jb25uZWN0aW9uX21hbmFnZXIoc2VsZi5zaWQpCisgICAgICAgICAg ICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRpZD1zZWxmLmRpZCwgY29ubl9pZD1zZWxmLmNv bm5faWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb25uID0gZGVmYXVsdF9jb25uCiAK ICAgICAgICAgcGtfbmFtZXMgPSAnJwogICAgICAgICBwcmltYXJ5X2tleXMgPSBPcmRlcmVkRGlj dCgpCkBAIC00MDAsNyArNDE4LDExIEBAIGNsYXNzIFRhYmxlQ29tbWFuZChHcmlkQ29tbWFuZCk6 CiAgICAgZGVmIGNhbl9maWx0ZXIoc2VsZik6CiAgICAgICAgIHJldHVybiBUcnVlCiAKLSAgICBk ZWYgc2F2ZShzZWxmLCBjaGFuZ2VkX2RhdGEpOgorICAgIGRlZiBzYXZlKHNlbGYsCisgICAgICAg ICAgICAgY2hhbmdlZF9kYXRhLAorICAgICAgICAgICAgIGNvbHVtbnNfaW5mbywKKyAgICAgICAg ICAgICBjbGllbnRfcHJpbWFyeV9rZXk9J19fdGVtcF9QSycsCisgICAgICAgICAgICAgZGVmYXVs dF9jb25uPU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2Vk IHRvIHNhdmUgdGhlIGRhdGEgaW50byB0aGUgZGF0YWJhc2UuCiAgICAgICAgIERlcGVuZGluZyBv biBjb25kaXRpb24gaXQgd2lsbCBlaXRoZXIgdXBkYXRlIG9yIGluc2VydCB0aGUKQEAgLTQwOCwx MCArNDMwLDE2IEBAIGNsYXNzIFRhYmxlQ29tbWFuZChHcmlkQ29tbWFuZCk6CiAKICAgICAgICAg QXJnczoKICAgICAgICAgICAgIGNoYW5nZWRfZGF0YTogQ29udGFpbnMgZGF0YSB0byBiZSBzYXZl ZAorICAgICAgICAgICAgY29sdW1uc19pbmZvOgorICAgICAgICAgICAgZGVmYXVsdF9jb25uOgor ICAgICAgICAgICAgY2xpZW50X3ByaW1hcnlfa2V5OgogICAgICAgICAiIiIKLQotICAgICAgICBt YW5hZ2VyID0gZ2V0X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikuY29ubmVjdGlvbl9tYW5hZ2Vy KHNlbGYuc2lkKQotICAgICAgICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRpZD1zZWxmLmRp ZCwgY29ubl9pZD1zZWxmLmNvbm5faWQpCisgICAgICAgIGRyaXZlciA9IGdldF9kcml2ZXIoUEdf REVGQVVMVF9EUklWRVIpCisgICAgICAgIGlmIGRlZmF1bHRfY29ubiBpcyBOb25lOgorICAgICAg ICAgICAgbWFuYWdlciA9IGRyaXZlci5jb25uZWN0aW9uX21hbmFnZXIoc2VsZi5zaWQpCisgICAg ICAgICAgICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRpZD1zZWxmLmRpZCwgY29ubl9pZD1z ZWxmLmNvbm5faWQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBjb25uID0gZGVmYXVsdF9j b25uCiAKICAgICAgICAgc3RhdHVzID0gRmFsc2UKICAgICAgICAgcmVzID0gTm9uZQpAQCAtNDIx LDE0ICs0NDksNiBAQCBjbGFzcyBUYWJsZUNvbW1hbmQoR3JpZENvbW1hbmQpOgogICAgICAgICBs aXN0X29mX3NxbCA9IFtdCiAgICAgICAgIF9yb3dpZCA9IE5vbmUKIAotICAgICAgICAjIFJlcGxh Y2UgY29sdW1uIHBvc2l0aW9ucyB3aXRoIG5hbWVzCi0gICAgICAgIGRlZiBzZXRfY29sdW1uX25h bWVzKGRhdGEpOgotICAgICAgICAgICAgbmV3X2RhdGEgPSB7fQotICAgICAgICAgICAgZm9yIGtl eSBpbiBkYXRhOgotICAgICAgICAgICAgICAgIG5ld19kYXRhW2NoYW5nZWRfZGF0YVsnY29sdW1u cyddW2ludChrZXkpXVsnbmFtZSddXSA9IGRhdGFba2V5XQotCi0gICAgICAgICAgICByZXR1cm4g bmV3X2RhdGEKLQogICAgICAgICBpZiBjb25uLmNvbm5lY3RlZCgpOgogCiAgICAgICAgICAgICAj IFN0YXJ0IHRoZSB0cmFuc2FjdGlvbgpAQCAtNDQzLDYgKzQ2MywyMCBAQCBjbGFzcyBUYWJsZUNv bW1hbmQoR3JpZENvbW1hbmQpOgogICAgICAgICAgICAgICAgIGlmIGxlbihjaGFuZ2VkX2RhdGFb b2ZfdHlwZV0pIDwgMToKICAgICAgICAgICAgICAgICAgICAgY29udGludWUKIAorICAgICAgICAg ICAgICAgIGNvbHVtbl90eXBlID0ge30KKyAgICAgICAgICAgICAgICBmb3IgZWFjaF9jb2wgaW4g Y29sdW1uc19pbmZvOgorICAgICAgICAgICAgICAgICAgICBpZiAoCisgICAgICAgICAgICAgICAg ICAgICAgICBjb2x1bW5zX2luZm9bZWFjaF9jb2xdWydub3RfbnVsbCddIGFuZAorICAgICAgICAg ICAgICAgICAgICAgICAgbm90IGNvbHVtbnNfaW5mb1tlYWNoX2NvbF1bCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ2hhc19kZWZhdWx0X3ZhbCddCisgICAgICAgICAgICAgICAgICAgICk6 CisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5fZGF0YVtlYWNoX2NvbF0gPSBOb25lCisg ICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5fdHlwZVtlYWNoX2NvbF0gPVwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb2x1bW5zX2luZm9bZWFjaF9jb2xdWyd0eXBlX25hbWUnXQor ICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1u X3R5cGVbZWFjaF9jb2xdID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnNf aW5mb1tlYWNoX2NvbF1bJ3R5cGVfbmFtZSddCisKICAgICAgICAgICAgICAgICAjIEZvciBuZXds eSBhZGRlZCByb3dzCiAgICAgICAgICAgICAgICAgaWYgb2ZfdHlwZSA9PSAnYWRkZWQnOgogCkBA IC00NTEsMzcgKzQ4NSwxOCBAQCBjbGFzcyBUYWJsZUNvbW1hbmQoR3JpZENvbW1hbmQpOgogICAg ICAgICAgICAgICAgICAgICAjIG5vX2RlZmF1bHRfdmFsdWUsIHNldCBjb2x1bW4gdG8gYmxhbmss IGluc3RlYWQKICAgICAgICAgICAgICAgICAgICAgIyBvZiBub3QgbnVsbCB3aGljaCBpcyBzZXQg YnkgZGVmYXVsdC4KICAgICAgICAgICAgICAgICAgICAgY29sdW1uX2RhdGEgPSB7fQotICAgICAg ICAgICAgICAgICAgICBjb2x1bW5fdHlwZSA9IHt9CiAgICAgICAgICAgICAgICAgICAgIHBrX25h bWVzLCBwcmltYXJ5X2tleXMgPSBzZWxmLmdldF9wcmltYXJ5X2tleXMoKQogCi0gICAgICAgICAg ICAgICAgICAgIGZvciBlYWNoX2NvbCBpbiBzZWxmLmNvbHVtbnNfaW5mbzoKLSAgICAgICAgICAg ICAgICAgICAgICAgIGlmICgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbHVt bnNfaW5mb1tlYWNoX2NvbF1bJ25vdF9udWxsJ10gYW5kCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgbm90IHNlbGYuY29sdW1uc19pbmZvW2VhY2hfY29sXVsKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ2hhc19kZWZhdWx0X3ZhbCddCi0gICAgICAgICAgICAgICAgICAgICAg ICApOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl9kYXRhW2VhY2hfY29sXSA9 IE5vbmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5fdHlwZVtlYWNoX2NvbF0g PVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2x1bW5zX2luZm9bZWFj aF9jb2xdWyd0eXBlX25hbWUnXQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5fdHlwZVtlYWNoX2NvbF0gPSBcCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY29sdW1uc19pbmZvW2VhY2hfY29sXVsndHlw ZV9uYW1lJ10KLQotCiAgICAgICAgICAgICAgICAgICAgIGZvciBlYWNoX3JvdyBpbiBjaGFuZ2Vk X2RhdGFbb2ZfdHlwZV06CiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gY2hhbmdlZF9k YXRhW29mX3R5cGVdW2VhY2hfcm93XVsnZGF0YSddCiAgICAgICAgICAgICAgICAgICAgICAgICAj IFJlbW92ZSBvdXIgdW5pcXVlIHRyYWNraW5nIGtleQotICAgICAgICAgICAgICAgICAgICAgICAg ZGF0YS5wb3AoJ19fdGVtcF9QSycsIE5vbmUpCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRh LnBvcChjbGllbnRfcHJpbWFyeV9rZXksIE5vbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICBk YXRhLnBvcCgnaXNfcm93X2NvcGllZCcsIE5vbmUpCi0gICAgICAgICAgICAgICAgICAgICAgICBk YXRhID0gc2V0X2NvbHVtbl9uYW1lcyhkYXRhKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0 YV90eXBlID0gc2V0X2NvbHVtbl9uYW1lcyhjaGFuZ2VkX2RhdGFbb2ZfdHlwZV1bZWFjaF9yb3dd WydkYXRhX3R5cGUnXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rfb2Zfcm93aWQuYXBw ZW5kKGRhdGEuZ2V0KCdfX3RlbXBfUEsnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rf b2Zfcm93aWQuYXBwZW5kKGRhdGEuZ2V0KGNsaWVudF9wcmltYXJ5X2tleSkpCiAKLSAgICAgICAg ICAgICAgICAgICAgICAgICMgVXBkYXRlIGNvbHVtbnMgdmFsdWUgYW5kIGRhdGEgdHlwZQotICAg ICAgICAgICAgICAgICAgICAgICAgIyB3aXRoIGNvbHVtbnMgaGF2aW5nIG5vdF9udWxsPUZhbHNl IGFuZCBoYXMKLSAgICAgICAgICAgICAgICAgICAgICAgICMgbm8gZGVmYXVsdCB2YWx1ZQorICAg ICAgICAgICAgICAgICAgICAgICAgIyBVcGRhdGUgY29sdW1ucyB2YWx1ZSB3aXRoIGNvbHVtbnMg aGF2aW5nCisgICAgICAgICAgICAgICAgICAgICAgICAjIG5vdF9udWxsPUZhbHNlIGFuZCBoYXMg bm8gZGVmYXVsdCB2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uX2RhdGEudXBk YXRlKGRhdGEpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5fdHlwZS51cGRhdGUoZGF0 YV90eXBlKQogCiAgICAgICAgICAgICAgICAgICAgICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUo Ii8iLmpvaW4oW3NlbGYuc3FsX3BhdGgsICdpbnNlcnQuc3FsJ10pLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdG9fYmVfc2F2ZWQ9Y29sdW1uX2Rh dGEsCkBAIC00OTcsMTUgKzUxMiwxNCBAQCBjbGFzcyBUYWJsZUNvbW1hbmQoR3JpZENvbW1hbmQp OgogICAgICAgICAgICAgICAgICMgRm9yIHVwZGF0ZWQgcm93cwogICAgICAgICAgICAgICAgIGVs aWYgb2ZfdHlwZSA9PSAndXBkYXRlZCc6CiAgICAgICAgICAgICAgICAgICAgIGZvciBlYWNoX3Jv dyBpbiBjaGFuZ2VkX2RhdGFbb2ZfdHlwZV06Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRh ID0gc2V0X2NvbHVtbl9uYW1lcyhjaGFuZ2VkX2RhdGFbb2ZfdHlwZV1bZWFjaF9yb3ddWydkYXRh J10pCi0gICAgICAgICAgICAgICAgICAgICAgICBwayA9IHNldF9jb2x1bW5fbmFtZXMoY2hhbmdl ZF9kYXRhW29mX3R5cGVdW2VhY2hfcm93XVsncHJpbWFyeV9rZXlzJ10pCi0gICAgICAgICAgICAg ICAgICAgICAgICBkYXRhX3R5cGUgPSBzZXRfY29sdW1uX25hbWVzKGNoYW5nZWRfZGF0YVtvZl90 eXBlXVtlYWNoX3Jvd11bJ2RhdGFfdHlwZSddKQorICAgICAgICAgICAgICAgICAgICAgICAgZGF0 YSA9IGNoYW5nZWRfZGF0YVtvZl90eXBlXVtlYWNoX3Jvd11bJ2RhdGEnXQorICAgICAgICAgICAg ICAgICAgICAgICAgcGsgPSBjaGFuZ2VkX2RhdGFbb2ZfdHlwZV1bZWFjaF9yb3ddWydwcmltYXJ5 X2tleXMnXQogICAgICAgICAgICAgICAgICAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFtzZWxmLnNxbF9wYXRoLCAndXBkYXRlLnNxbCddKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3RvX2JlX3NhdmVkPWRhdGEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXlzPXBr LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF9u YW1lPXNlbGYub2JqZWN0X25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnNwX25hbWU9c2VsZi5uc3BfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3R5cGU9ZGF0YV90eXBlKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdHlwZT1jb2x1bW5fdHlw ZSkKICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Rfb2Zfc3FsLmFwcGVuZChzcWwpCiAgICAg ICAgICAgICAgICAgICAgICAgICBsaXN0X29mX3Jvd2lkLmFwcGVuZChkYXRhKQogCkBAIC01MTks MTggKzUzMywxOSBAQCBjbGFzcyBUYWJsZUNvbW1hbmQoR3JpZENvbW1hbmQpOgogICAgICAgICAg ICAgICAgICAgICAgICAgcm93c190b19kZWxldGUuYXBwZW5kKGNoYW5nZWRfZGF0YVtvZl90eXBl XVtlYWNoX3Jvd10pCiAgICAgICAgICAgICAgICAgICAgICAgICAjIEZldGNoIHRoZSBrZXlzIGZv ciBTUUwgZ2VuZXJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgaXNfZmlyc3Q6Ci0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGNvdmVydCBkaWN0X2tleXMg dG8gbm9ybWFsIGxpc3QgaW4gUHl0aG9uMwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg SW4gUHl0aG9uMiwgaXQncyBhbHJlYWR5IGEgbGlzdCAmIFdlIHdpbGwgYWxzbyBmZXRjaCBjb2x1 bW4gbmFtZXMgdXNpbmcgaW5kZXgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzID0g WwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkX2RhdGFbJ2NvbHVtbnMn XVtpbnQoayldWyduYW1lJ10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZvciBrIGluIGxpc3QoY2hhbmdlZF9kYXRhW29mX3R5cGVdW2VhY2hfcm93XS5rZXlzKCkpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICMgV2UgbmVlZCB0byBjb3ZlcnQgZGljdF9rZXlzIHRvIG5vcm1hbCBsaXN0IGluCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIyBQeXRob24zCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBJbiBQeXRob24yLCBpdCdzIGFscmVhZHkgYSBsaXN0ICYgV2Ugd2lsbCBhbHNvCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIyBmZXRjaCBjb2x1bW4gbmFtZXMgdXNpbmcgaW5kZXgK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzID0gbGlzdChjaGFuZ2VkX2RhdGFbb2Zf dHlwZV1bZWFjaF9yb3ddLmtleXMoKSkKKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v X29mX2tleXMgPSBsZW4oa2V5cykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19maXJz dCA9IEZhbHNlCiAgICAgICAgICAgICAgICAgICAgICMgTWFwIGluZGV4IHdpdGggY29sdW1uIG5h bWUgZm9yIGVhY2ggcm93CiAgICAgICAgICAgICAgICAgICAgIGZvciByb3cgaW4gcm93c190b19k ZWxldGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgaywgdiBpbiByb3cuaXRlbXMoKToK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFNldCBwcmltYXJ5IGtleSB3aXRoIGxhYmVs ICYgZGVsZXRlIGluZGV4IGJhc2VkIG1hcHBlZCBrZXkKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAjIFNldCBwcmltYXJ5IGtleSB3aXRoIGxhYmVsICYgZGVsZXRlIGluZGV4IGJhc2VkCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBtYXBwZWQga2V5CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dbY2hh bmdlZF9kYXRhWydjb2x1bW5zJ11baW50KGspXVsnbmFtZSddXSA9IHYKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoKQEAgLTU5Nyw3ICs2MTIsNyBAQCBjbGFz cyBWaWV3Q29tbWFuZChHcmlkQ29tbWFuZCk6CiAgICAgICAgICMgY2FsbCBiYXNlIGNsYXNzIGlu aXQgdG8gZmV0Y2ggdGhlIHRhYmxlIG5hbWUKICAgICAgICAgc3VwZXIoVmlld0NvbW1hbmQsIHNl bGYpLl9faW5pdF9fKCoqa3dhcmdzKQogCi0gICAgZGVmIGdldF9zcWwoc2VsZik6CisgICAgZGVm IGdldF9zcWwoc2VsZiwgZGVmYXVsdF9jb25uPU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAg VGhpcyBtZXRob2QgaXMgdXNlZCB0byBjcmVhdGUgYSBwcm9wZXIgU1FMIHF1ZXJ5CiAgICAgICAg IHRvIGZldGNoIHRoZSBkYXRhIGZvciB0aGUgc3BlY2lmaWVkIHZpZXcKQEAgLTY1Miw3ICs2Njcs NyBAQCBjbGFzcyBGb3JlaWduVGFibGVDb21tYW5kKEdyaWRDb21tYW5kKToKICAgICAgICAgIyBj YWxsIGJhc2UgY2xhc3MgaW5pdCB0byBmZXRjaCB0aGUgdGFibGUgbmFtZQogICAgICAgICBzdXBl cihGb3JlaWduVGFibGVDb21tYW5kLCBzZWxmKS5fX2luaXRfXygqKmt3YXJncykKIAotICAgIGRl ZiBnZXRfc3FsKHNlbGYpOgorICAgIGRlZiBnZXRfc3FsKHNlbGYsIGRlZmF1bHRfY29ubj1Ob25l KToKICAgICAgICAgIiIiCiAgICAgICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY3JlYXRlIGEg cHJvcGVyIFNRTCBxdWVyeQogICAgICAgICB0byBmZXRjaCB0aGUgZGF0YSBmb3IgdGhlIHNwZWNp ZmllZCBmb3JlaWduIHRhYmxlCkBAIC02OTcsNyArNzEyLDcgQEAgY2xhc3MgQ2F0YWxvZ0NvbW1h bmQoR3JpZENvbW1hbmQpOgogICAgICAgICAjIGNhbGwgYmFzZSBjbGFzcyBpbml0IHRvIGZldGNo IHRoZSB0YWJsZSBuYW1lCiAgICAgICAgIHN1cGVyKENhdGFsb2dDb21tYW5kLCBzZWxmKS5fX2lu aXRfXygqKmt3YXJncykKIAotICAgIGRlZiBnZXRfc3FsKHNlbGYpOgorICAgIGRlZiBnZXRfc3Fs KHNlbGYsIGRlZmF1bHRfY29ubj1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIFRoaXMgbWV0 aG9kIGlzIHVzZWQgdG8gY3JlYXRlIGEgcHJvcGVyIFNRTCBxdWVyeQogICAgICAgICB0byBmZXRj aCB0aGUgZGF0YSBmb3IgdGhlIHNwZWNpZmllZCBjYXRhbG9nIG9iamVjdApAQCAtNzIyLDcgKzcz Nyw3IEBAIGNsYXNzIENhdGFsb2dDb21tYW5kKEdyaWRDb21tYW5kKToKICAgICAgICAgcmV0dXJu IFRydWUKIAogCi1jbGFzcyBRdWVyeVRvb2xDb21tYW5kKEJhc2VDb21tYW5kKToKK2NsYXNzIFF1 ZXJ5VG9vbENvbW1hbmQoQmFzZUNvbW1hbmQsIEZldGNoZWRSb3dUcmFja2VyKToKICAgICAiIiIK ICAgICBjbGFzcyBRdWVyeVRvb2xDb21tYW5kKEJhc2VDb21tYW5kKQogCkBAIC03MzIsMTMgKzc0 NywxNSBAQCBjbGFzcyBRdWVyeVRvb2xDb21tYW5kKEJhc2VDb21tYW5kKToKIAogICAgIGRlZiBf X2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CiAgICAgICAgICMgY2FsbCBiYXNlIGNsYXNzIGluaXQg dG8gZmV0Y2ggdGhlIHRhYmxlIG5hbWUKLSAgICAgICAgc3VwZXIoUXVlcnlUb29sQ29tbWFuZCwg c2VsZikuX19pbml0X18oKiprd2FyZ3MpCisKKyAgICAgICAgQmFzZUNvbW1hbmQuX19pbml0X18o c2VsZiwgKiprd2FyZ3MpCisgICAgICAgIEZldGNoZWRSb3dUcmFja2VyLl9faW5pdF9fKHNlbGYs ICoqa3dhcmdzKQogCiAgICAgICAgIHNlbGYuY29ubl9pZCA9IE5vbmUKICAgICAgICAgc2VsZi5h dXRvX3JvbGxiYWNrID0gRmFsc2UKICAgICAgICAgc2VsZi5hdXRvX2NvbW1pdCA9IFRydWUKIAot ICAgIGRlZiBnZXRfc3FsKHNlbGYpOgorICAgIGRlZiBnZXRfc3FsKHNlbGYsIGRlZmF1bHRfY29u bj1Ob25lKToKICAgICAgICAgcmV0dXJuIE5vbmUKIAogICAgIGRlZiBjYW5fZWRpdChzZWxmKToK ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9zdGF0aWMvY3NzL3NxbGVk aXRvci5jc3MgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3RhdGljL2Nzcy9zcWxlZGl0 b3IuY3NzCmluZGV4IDcyNjZiMzQuLmQ4ZjQ4ODEgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rv b2xzL3NxbGVkaXRvci9zdGF0aWMvY3NzL3NxbGVkaXRvci5jc3MKKysrIGIvd2ViL3BnYWRtaW4v dG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9jc3Mvc3FsZWRpdG9yLmNzcwpAQCAtNDIzLDcgKzQyMyw3 IEBAIGlucHV0LmVkaXRvci1jaGVja2JveDpmb2N1cyB7CiAKIC8qIFRvIGhpZ2hsaWdodCBhbGwg bmV3bHkgaW5zZXJ0ZWQgcm93cyAqLwogLmdyaWQtY2FudmFzIC5uZXdfcm93IHsKLSAgYmFja2dy b3VuZDogI2RmZjBkNzsKKyAgYmFja2dyb3VuZDogI2RmZjBkNyAhaW1wb3J0YW50OwogfQogCiAv KiBUbyBoaWdobGlnaHQgYWxsIHRoZSB1cGRhdGVkIHJvd3MgKi8KQEAgLTQzMyw3ICs0MzMsNyBA QCBpbnB1dC5lZGl0b3ItY2hlY2tib3g6Zm9jdXMgewogCiAvKiBUbyBoaWdobGlnaHQgcm93IGF0 IGZhdWx0ICovCiAuZ3JpZC1jYW52YXMgLm5ld19yb3cuZXJyb3IsIC5ncmlkLWNhbnZhcyAudXBk YXRlZF9yb3cuZXJyb3IgewotICBiYWNrZ3JvdW5kOiAjZjJkZWRlOworICBiYWNrZ3JvdW5kOiAj ZjJkZWRlICFpbXBvcnRhbnQ7CiB9CiAKIC8qIERpc2FibGVkIHJvdyAqLwpAQCAtNDYwLDYgKzQ2 MCwxMSBAQCBpbnB1dC5lZGl0b3ItY2hlY2tib3g6Zm9jdXMgewogICBiYWNrZ3JvdW5kLWNvbG9y OiAjMkM3NkI0OwogfQogCisuc2xpY2stY2VsbCBzcGFuW2RhdGEtY2VsbC10eXBlPSJyb3ctaGVh ZGVyLXNlbGVjdG9yIl0geworICBkaXNwbGF5OiBibG9jazsKKyAgdGV4dC1hbGlnbjogcmlnaHQ7 Cit9CisKICNkYXRhZ3JpZCBkaXYuc2xpY2staGVhZGVyLnVpLXN0YXRlLWRlZmF1bHQgewogICBi YWNrZ3JvdW5kOiAjZmZmZmZmOwogICBib3JkZXItYm90dG9tOiBub25lOwpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3RlbXBsYXRlcy9zcWxlZGl0b3IvanMvc3FsZWRp dG9yLmpzIGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3RlbXBsYXRlcy9zcWxlZGl0b3Iv anMvc3FsZWRpdG9yLmpzCmluZGV4IGU2Yzk3ZWMuLjVlNzczYmYgMTAwNjQ0Ci0tLSBhL3dlYi9w Z2FkbWluL3Rvb2xzL3NxbGVkaXRvci90ZW1wbGF0ZXMvc3FsZWRpdG9yL2pzL3NxbGVkaXRvci5q cworKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVtcGxhdGVzL3NxbGVkaXRvci9q cy9zcWxlZGl0b3IuanMKQEAgLTQ2NCw3ICs0NjQsNyBAQCBkZWZpbmUoWwogICAgICAgICAgLSBz dGFnZWRfcm93czoKICAgICAgICAgICAgVGhpcyB3aWxsIGhvbGQgYWxsIHRoZSBkYXRhIHdoaWNo IHVzZXIgY29waWVzL3Bhc3Rlcy9kZWxldGVzIGluIGdyaWQKICAgICAgICAgIC0gZGVsZXRlZDoK LSAgICAgICAgICAgVGhpcyB3aWxsIGhvbGQgYWxsIHRoZSBkYXRhIHdoaWNoIHVzZXIgZGVsZXRz IGluIGdyaWQKKyAgICAgICAgICAgVGhpcyB3aWxsIGhvbGQgYWxsIHRoZSBkYXRhIHdoaWNoIHVz ZXIgZGVsZXRlcyBpbiBncmlkCiAKICAgICAgICBFdmVudHMgaGFuZGxpbmc6CiAgICAgICAgLS0t LS0tLS0tLS0tLS0tLQpAQCAtNDgwLDM0ICs0ODAsMTAgQEAgZGVmaW5lKFsKICAgICAgICAgICAg LSBXZSBhcmUgdXNpbmcgdGhpcyBldmVudCBmb3IgQ29weSBvcGVyYXRpb24gb24gZ3JpZAogICAg ICAgICovCiAKLSAgICAgIC8vIEdldCB0aGUgaXRlbSBjb2x1bW4gdmFsdWUgdXNpbmcgYSBjdXN0 b20gJ2ZpZWxkSWR4JyBjb2x1bW4gcGFyYW0KLSAgICAgIGdldF9pdGVtX2NvbHVtbl92YWx1ZTog ZnVuY3Rpb24gKGl0ZW0sIGNvbHVtbikgewotICAgICAgICBpZiAoY29sdW1uLnBvcyAhPT0gdW5k ZWZpbmVkKSB7Ci0gICAgICAgICAgcmV0dXJuIGl0ZW1bY29sdW1uLnBvc107Ci0gICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgIH0KLSAgICAgIH0sCi0KICAg ICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgdG8gY3JlYXRlIGFuZCByZW5kZXIg dGhlIFNsaWNrR3JpZC4KLSAgICAgIHJlbmRlcl9ncmlkOiBmdW5jdGlvbihjb2xsZWN0aW9uLCBj b2x1bW5zLCBpc19lZGl0YWJsZSkgeworICAgICAgcmVuZGVyX2dyaWQ6IGZ1bmN0aW9uKGNvbGxl Y3Rpb24sIGNvbHVtbnMsIGlzX2VkaXRhYmxlLCBjbGllbnRfcHJpbWFyeV9rZXksIHJvd3NfYWZm ZWN0ZWQpIHsKICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogCi0gICAgICAgIC8vIHJldHVybnMg cHJpbWFyeSBrZXlzCi0gICAgICAgIHNlbGYuaGFuZGxlci5nZXRfcm93X3ByaW1hcnlfa2V5ID0g ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAotICAgICAgICAgICAgdG1w X2tleXMgPSBbXTsKLSAgICAgICAgICBfLmVhY2goc2VsZi5wcmltYXJ5X2tleXMsIGZ1bmN0aW9u KHAsIGlkeCkgewotICAgICAgICAgICAgLy8gRm9yIGVhY2ggY29sdW1ucyBzZWFyY2ggcHJpbWFy eSBrZXkgcG9zaXRpb24KLSAgICAgICAgICAgIF8uZWFjaChzZWxmLmNvbHVtbnMsIGZ1bmN0aW9u KGMpIHsKLSAgICAgICAgICAgICAgIGlmKGMubmFtZSA9PSBpZHgpIHsKLSAgICAgICAgICAgICAg ICAgdG1wX2tleXMucHVzaChjLnBvcyk7Ci0gICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9 KTsKLSAgICAgICAgICB9KTsKLSAgICAgICAgICByZXR1cm4gdG1wX2tleXM7Ci0gICAgICAgIH07 Ci0KICAgICAgICAgLy8gVGhpcyB3aWxsIHdvcmsgYXMgZGF0YSBzdG9yZSBhbmQgaG9sZHMgYWxs IHRoZQogICAgICAgICAvLyBpbnNlcnRlZC91cGRhdGVkL2RlbGV0ZWQgZGF0YSBmcm9tIGdyaWQK ICAgICAgICAgc2VsZi5oYW5kbGVyLmRhdGFfc3RvcmUgPSB7CkBAIC01MjIsOCArNDk4LDkgQEAg ZGVmaW5lKFsKICAgICAgICAgLy8gVG8gc3RvcmUgcHJpbWFyeSBrZXlzIGJlZm9yZSB0aGV5IGdl dHMgY2hhbmdlZAogICAgICAgICBzZWxmLmhhbmRsZXIucHJpbWFyeV9rZXlzX2RhdGEgPSB7fTsK IAotICAgICAgICAvLyBBZGQgZ2V0SXRlbU1ldGFkYXRhIGludG8gaGFuZGxlciBmb3IgbGF0ZXIg dXNlCi0gICAgICAgIHNlbGYuaGFuZGxlci5kYXRhX3ZpZXcgPSBjb2xsZWN0aW9uOworICAgICAg ICBzZWxmLmNsaWVudF9wcmltYXJ5X2tleSA9IGNsaWVudF9wcmltYXJ5X2tleTsKKworICAgICAg ICBzZWxmLmNsaWVudF9wcmltYXJ5X2tleV9jb3VudGVyID0gMDsKIAogICAgICAgICAvLyBSZW1v dmUgYW55IGV4aXN0aW5nIGdyaWQgZmlyc3QKICAgICAgICAgaWYgKHNlbGYuaGFuZGxlci5zbGlj a2dyaWQpIHsKQEAgLTYwMSw3ICs1NzgsMTIgQEAgZGVmaW5lKFsKICAgICAgICAgfSk7CiAKICAg ICAgICAgdmFyIGdyaWRTZWxlY3RvciA9IG5ldyBHcmlkU2VsZWN0b3IoKTsKLSAgICAgICAgZ3Jp ZF9jb2x1bW5zID0gZ3JpZFNlbGVjdG9yLmdldENvbHVtbkRlZmluaXRpb25zKGdyaWRfY29sdW1u cyk7CisgICAgICAgIGdyaWRfY29sdW1ucyA9IHNlbGYuZ3JpZF9jb2x1bW5zID0gZ3JpZFNlbGVj dG9yLmdldENvbHVtbkRlZmluaXRpb25zKGdyaWRfY29sdW1ucyk7CisKKyAgICAgICAgaWYgKHJv d3NfYWZmZWN0ZWQpIHsKKyAgICAgICAgICAvLyBjYWxjdWxhdGUgd2l0aCBmb3IgaGVhZGVyIHJv dyBjb2x1bW4uCisgICAgICAgIGdyaWRfY29sdW1uc1swXVsnd2lkdGgnXSA9IFNxbEVkaXRvclV0 aWxzLmNhbGN1bGF0ZUNvbHVtbldpZHRoKHJvd3NfYWZmZWN0ZWQpOworICAgICAgICB9CiAKICAg ICAgICAgdmFyIGdyaWRfb3B0aW9ucyA9IHsKICAgICAgICAgICBlZGl0YWJsZTogdHJ1ZSwKQEAg LTYwOSw4ICs1OTEsNyBAQCBkZWZpbmUoWwogICAgICAgICAgIGVuYWJsZUNlbGxOYXZpZ2F0aW9u OiB0cnVlLAogICAgICAgICAgIGVuYWJsZUNvbHVtblJlb3JkZXI6IGZhbHNlLAogICAgICAgICAg IGFzeW5jRWRpdG9yTG9hZGluZzogZmFsc2UsCi0gICAgICAgICAgYXV0b0VkaXQ6IGZhbHNlLAot ICAgICAgICAgIGRhdGFJdGVtQ29sdW1uVmFsdWVFeHRyYWN0b3I6IHRoaXMuZ2V0X2l0ZW1fY29s dW1uX3ZhbHVlCisgICAgICAgICAgYXV0b0VkaXQ6IGZhbHNlCiAgICAgICAgIH07CiAKICAgICAg ICAgdmFyICRkYXRhX2dyaWQgPSBzZWxmLiRlbC5maW5kKCcjZGF0YWdyaWQnKTsKQEAgLTYxOCwx NyArNTk5LDE1IEBAIGRlZmluZShbCiAgICAgICAgIHZhciBncmlkX2hlaWdodCA9ICQoJCgnI2Vk aXRvci1wYW5lbCcpLmZpbmQoJy53Y0ZyYW1lJylbMV0pLmhlaWdodCgpIC0gMzU7CiAgICAgICAg ICRkYXRhX2dyaWQuaGVpZ2h0KGdyaWRfaGVpZ2h0KTsKIAotICAgICAgICAvLyBBZGQgb3VyIG93 biBjdXN0b20gcHJpbWFyeSBrZXkgdG8ga2VlcCB0cmFjayBvZiBjaGFuZ2VzCi0gICAgICAgIF8u ZWFjaChjb2xsZWN0aW9uLCBmdW5jdGlvbihyb3cpewotICAgICAgICAgIHJvd1snX190ZW1wX1BL J10gPSBTcWxFZGl0b3JVdGlscy5lcGljUmFuZG9tU3RyaW5nKDE1KTsKLSAgICAgICAgfSk7Cisg ICAgICAgIHZhciBkYXRhVmlldyA9IHNlbGYuZGF0YVZpZXcgPSBuZXcgU2xpY2suRGF0YS5EYXRh VmlldygpLAorICAgICAgICAgICAgZ3JpZCA9IHNlbGYuZ3JpZCA9IG5ldyBTbGljay5HcmlkKCRk YXRhX2dyaWQsIGRhdGFWaWV3LCBncmlkX2NvbHVtbnMsIGdyaWRfb3B0aW9ucyk7CiAKICAgICAg ICAgLy8gQWRkLW9uIGZ1bmN0aW9uIHdoaWNoIGFsbG93IHVzIHRvIGlkZW50aWZ5IHRoZSBmYXVs dHkgcm93IGFmdGVyIGluc2VydC91cGRhdGUKICAgICAgICAgLy8gYW5kIGFwcGx5IGNzcyBhY2Nv cmRpbmdseQotICAgICAgICBjb2xsZWN0aW9uLmdldEl0ZW1NZXRhZGF0YSA9IGZ1bmN0aW9uKGkp IHsKLSAgICAgICAgICB2YXIgcmVzID0ge30sCi0gICAgICAgICAgICBjc3NDbGFzcyA9ICcnLAot ICAgICAgICAgICAgZGF0YV9zdG9yZSA9IHNlbGYuaGFuZGxlci5kYXRhX3N0b3JlOworCisgICAg ICAgIGRhdGFWaWV3LmdldEl0ZW1NZXRhZGF0YSA9IGZ1bmN0aW9uKGkpIHsKKyAgICAgICAgICB2 YXIgcmVzID0ge30sIGNzc0NsYXNzID0gJycsCisgICAgICAgICAgICAgIGRhdGFfc3RvcmUgPSBz ZWxmLmhhbmRsZXIuZGF0YV9zdG9yZTsKIAogICAgICAgICAgIGlmIChfLmhhcyhzZWxmLmhhbmRs ZXIsICdkYXRhX3N0b3JlJykpIHsKICAgICAgICAgICAgIGlmIChpIGluIGRhdGFfc3RvcmUuYWRk ZWRfaW5kZXggJiYKQEAgLTY1MSw5ICs2MzAsOCBAQCBkZWZpbmUoWwogICAgICAgICAgICAgY3Nz Q2xhc3MgKz0gJyBkaXNhYmxlZF9yb3cnOwogICAgICAgICAgIH0KICAgICAgICAgICByZXR1cm4g eydjc3NDbGFzc2VzJzogY3NzQ2xhc3N9OwotICAgICAgICB9CisgICAgICAgIH07CiAKLSAgICAg ICAgdmFyIGdyaWQgPSBuZXcgU2xpY2suR3JpZCgkZGF0YV9ncmlkLCBjb2xsZWN0aW9uLCBncmlk X2NvbHVtbnMsIGdyaWRfb3B0aW9ucyk7CiAgICAgICAgIGdyaWQucmVnaXN0ZXJQbHVnaW4oIG5l dyBTbGljay5BdXRvVG9vbHRpcHMoeyBlbmFibGVGb3JIZWFkZXJDZWxsczogZmFsc2UgfSkgKTsK ICAgICAgICAgZ3JpZC5yZWdpc3RlclBsdWdpbihuZXcgQWN0aXZlQ2VsbENhcHR1cmUoKSk7CiAg ICAgICAgIGdyaWQuc2V0U2VsZWN0aW9uTW9kZWwobmV3IFhDZWxsU2VsZWN0aW9uTW9kZWwoKSk7 CkBAIC02NjUsNyArNjQzLDggQEAgZGVmaW5lKFsKICAgICAgICAgICBjb2x1bW5zOiBjb2x1bW5z LAogICAgICAgICAgIGdyaWQ6IGdyaWQsCiAgICAgICAgICAgc2VsZWN0aW9uOiBncmlkLmdldFNl bGVjdGlvbk1vZGVsKCksCi0gICAgICAgICAgZWRpdG9yOiBzZWxmCisgICAgICAgICAgZWRpdG9y OiBzZWxmLAorICAgICAgICAgIGNsaWVudF9wcmltYXJ5X2tleTogc2VsZi5jbGllbnRfcHJpbWFy eV9rZXkKICAgICAgICAgfTsKIAogICAgICAgICBzZWxmLmhhbmRsZXIuc2xpY2tncmlkID0gZ3Jp ZDsKQEAgLTY4NCw2ICs2NjMsNDIgQEAgZGVmaW5lKFsKICAgICAgICAgICAgIH0pOwogICAgICAg ICB9KTsKIAorICAgICAgICBncmlkU2VsZWN0b3Iub25CZWZvcmVHcmlkU2VsZWN0QWxsLnN1YnNj cmliZShmdW5jdGlvbihlLCBhcmdzKSB7CisgICAgICAgICAgaWYgKHNlbGYuaGFuZGxlci5oYXNf bW9yZV9yb3dzKSB7CisgICAgICAgICAgICAvLyB0aGlzIHdpbGwgcHJldmVudCBzZWxlY3Rpb24g dW4tdGlsbCB3ZSBsb2FkIGFsbCBkYXRhCisgICAgICAgICAgICBlLnN0b3BJbW1lZGlhdGVQcm9w YWdhdGlvbigpOworICAgICAgICAgICAgc2VsZi5mZXRjaF9uZXh0X2FsbChmdW5jdGlvbigpIHsK KyAgICAgICAgICAgICAgLy8gc2luY2Ugd2UndmUgc3RvcHBlZCBldmVudCBwcm9wYWdhdGlvbiB3 ZSBuZWVkIHRvCisgICAgICAgICAgICAgIC8vIHRyaWdnZXIgb25HcmlkU2VsZWN0QWxsIG1hbnVh bGx5IHdpdGggbmV3IGV2ZW50IGRhdGEuCisgICAgICAgICAgICAgIGdyaWRTZWxlY3Rvci5vbkdy aWRTZWxlY3RBbGwubm90aWZ5KGFyZ3MsIG5ldyBTbGljay5FdmVudERhdGEoKSk7CisgICAgICAg ICAgICB9KTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworCisgICAgICAgIGdyaWRTZWxlY3Rv ci5vbkJlZm9yZUdyaWRDb2x1bW5TZWxlY3RBbGwuc3Vic2NyaWJlKGZ1bmN0aW9uKGUsIGFyZ3Mp IHsKKyAgICAgICAgICBpZiAoc2VsZi5oYW5kbGVyLmhhc19tb3JlX3Jvd3MpIHsKKyAgICAgICAg ICAgIC8vIHRoaXMgd2lsbCBwcmV2ZW50IHNlbGVjdGlvbiB1bi10aWxsIHdlIGxvYWQgYWxsIGRh dGEKKyAgICAgICAgICAgIGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7CisgICAgICAgICAg ICBzZWxmLmZldGNoX25leHRfYWxsKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAvLyBzaW5j ZSB3ZSd2ZSBzdG9wcGVkIGV2ZW50IHByb3BhZ2F0aW9uIHdlIG5lZWQgdG8KKyAgICAgICAgICAg ICAgLy8gdHJpZ2dlciBvbkdyaWRDb2x1bW5TZWxlY3RBbGwgbWFudWFsbHkgd2l0aCBuZXcgZXZl bnQgZGF0YS4KKyAgICAgICAgICAgICAgZ3JpZFNlbGVjdG9yLm9uR3JpZENvbHVtblNlbGVjdEFs bC5ub3RpZnkoYXJncywgbmV3IFNsaWNrLkV2ZW50RGF0YSgpKTsKKyAgICAgICAgICAgIH0pOwor ICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gbGlzdGVuIGZvciByb3cgY291 bnQgY2hhbmdlLgorICAgICAgICBkYXRhVmlldy5vblJvd0NvdW50Q2hhbmdlZC5zdWJzY3JpYmUo ZnVuY3Rpb24gKGUsIGFyZ3MpIHsKKyAgICAgICAgICBncmlkLnVwZGF0ZVJvd0NvdW50KCk7Cisg ICAgICAgICAgZ3JpZC5yZW5kZXIoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gbGlzdGVu IGZvciByb3dzIGNoYW5nZS4KKyAgICAgICAgZGF0YVZpZXcub25Sb3dzQ2hhbmdlZC5zdWJzY3Jp YmUoZnVuY3Rpb24gKGUsIGFyZ3MpIHsKKyAgICAgICAgICBncmlkLmludmFsaWRhdGVSb3dzKGFy Z3Mucm93cyk7CisgICAgICAgICAgZ3JpZC5yZW5kZXIoKTsKKyAgICAgICAgfSk7CisKICAgICAg ICAgLy8gTGlzdGVuZXIgZnVuY3Rpb24gd2hpY2ggd2lsbCBiZSBjYWxsZWQgYmVmb3JlIHVzZXIg dXBkYXRlcyBleGlzdGluZyBjZWxsCiAgICAgICAgIC8vIFRoaXMgd2lsbCBiZSB1c2VkIHRvIGNv bGxlY3QgcHJpbWFyeSBrZXkgZm9yIHRoYXQgcm93CiAgICAgICAgIGdyaWQub25CZWZvcmVFZGl0 Q2VsbC5zdWJzY3JpYmUoZnVuY3Rpb24gKGUsIGFyZ3MpIHsKQEAgLTY5Niw4ICs3MTEsOCBAQCBk ZWZpbmUoWwogICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAg ICAgICAgICAgIGlmKHNlbGYuaGFuZGxlci5jYW5fZWRpdCAmJiBiZWZvcmVfZGF0YSAmJiAnX190 ZW1wX1BLJyBpbiBiZWZvcmVfZGF0YSkgewotICAgICAgICAgICAgICB2YXIgX3BrID0gYmVmb3Jl X2RhdGEuX190ZW1wX1BLLAorICAgICAgICAgICAgaWYoc2VsZi5oYW5kbGVyLmNhbl9lZGl0ICYm IGJlZm9yZV9kYXRhICYmIHNlbGYuY2xpZW50X3ByaW1hcnlfa2V5IGluIGJlZm9yZV9kYXRhKSB7 CisgICAgICAgICAgICAgIHZhciBfcGsgPSBiZWZvcmVfZGF0YVtzZWxmLmNsaWVudF9wcmltYXJ5 X2tleV0sCiAgICAgICAgICAgICAgICAgX2tleXMgPSBzZWxmLmhhbmRsZXIucHJpbWFyeV9rZXlz LAogICAgICAgICAgICAgICAgIGN1cnJlbnRfcGsgPSB7fSwgZWFjaF9wa19rZXkgPSB7fTsKIApA QCAtNzA5LDIyICs3MjQsMzQgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgLy8gRmV0Y2ggcHJp bWFyeSBrZXlzIGZvciB0aGUgcm93IGJlZm9yZSB0aGV5IGdldHMgbW9kaWZpZWQKICAgICAgICAg ICAgICAgdmFyIF9jb2x1bW5zID0gc2VsZi5oYW5kbGVyLmNvbHVtbnM7CiAgICAgICAgICAgICAg IF8uZWFjaChfa2V5cywgZnVuY3Rpb24odmFsdWUsIGtleSkgewotICAgICAgICAgICAgICAgIHBv cyA9IF8ud2hlcmUoX2NvbHVtbnMsIHtuYW1lOiBrZXl9KVswXVsncG9zJ10KLSAgICAgICAgICAg ICAgICBjdXJyZW50X3BrW3Bvc10gPSBiZWZvcmVfZGF0YVtwb3NdOworICAgICAgICAgICAgICAg IGN1cnJlbnRfcGtba2V5XSA9IGJlZm9yZV9kYXRhW2tleV07CiAgICAgICAgICAgICAgIH0pOwog ICAgICAgICAgICAgICAvLyBQbGFjZSBpdCBpbiBtYWluIHZhcmlhYmxlIGZvciBsYXRlciB1c2UK ICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVyLnByaW1hcnlfa2V5c19kYXRhW19wa10gPSBjdXJy ZW50X3BrCiAgICAgICAgICAgICB9CiAgICAgICAgIH0pOwogCi0gICAgICAgIGdyaWQub25LZXlE b3duLnN1YnNjcmliZShoYW5kbGVRdWVyeU91dHB1dEtleWJvYXJkRXZlbnQpOworICAgICAgICBn cmlkLm9uS2V5RG93bi5zdWJzY3JpYmUoZnVuY3Rpb24oZXZlbnQsIGFyZ3MpIHsKKyAgICAgICAg ICB2YXIgS0VZX0EgPSA2NTsKKyAgICAgICAgICB2YXIgbW9kaWZpZWRLZXkgPSBldmVudC5rZXlD b2RlOworICAgICAgICAgIHZhciBpc01vZGlmaWVyRG93biA9IGV2ZW50LmN0cmxLZXkgfHwgZXZl bnQubWV0YUtleTsKKyAgICAgICAgICAvLyBJbnRlcmNlcHQgQ3RybC9DbWQgKyBBIGtleSBib2Fy ZCBldmVudC4KKyAgICAgICAgICAvLyBBcyB3ZSBtaWdodCB3YW50IHRvIGxvYWQgYWxsIHJvd3Mg YmVmb3JlIHNlbGVjdGluZyBhbGwuCisgICAgICAgICAgaWYgKGlzTW9kaWZpZXJEb3duICYmIG1v ZGlmaWVkS2V5ID09IEtFWV9BICYmIHNlbGYuaGFuZGxlci5oYXNfbW9yZV9yb3dzKSB7CisgICAg ICAgICAgICBzZWxmLmZldGNoX25leHRfYWxsKGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICBo YW5kbGVRdWVyeU91dHB1dEtleWJvYXJkRXZlbnQoZXZlbnQsIGFyZ3MpOworICAgICAgICAgICAg fSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGhhbmRsZVF1ZXJ5T3V0cHV0S2V5 Ym9hcmRFdmVudChldmVudCwgYXJncyk7CisgICAgICAgICAgfQorICAgICAgICB9KTsKIAogICAg ICAgICAvLyBMaXN0ZW5lciBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCB3aGVuIHVzZXIg dXBkYXRlcyBleGlzdGluZyByb3dzCiAgICAgICAgIGdyaWQub25DZWxsQ2hhbmdlLnN1YnNjcmli ZShmdW5jdGlvbiAoZSwgYXJncykgewogICAgICAgICAgIC8vIHNlbGYuaGFuZGxlci5kYXRhX3N0 b3JlLnVwZGF0ZWQgd2lsbCBob2xkcyBhbGwgdGhlIHVwZGF0ZWQgZGF0YQotICAgICAgICAgIHZh ciBjaGFuZ2VkX2NvbHVtbiA9IGFyZ3MuZ3JpZC5nZXRDb2x1bW5zKClbYXJncy5jZWxsXS5wb3Ms IC8vIEN1cnJlbnQgZmllbGQgcG9zCisgICAgICAgICAgdmFyIGNoYW5nZWRfY29sdW1uID0gYXJn cy5ncmlkLmdldENvbHVtbnMoKVthcmdzLmNlbGxdLmZpZWxkLAogICAgICAgICAgICAgdXBkYXRl ZF9kYXRhID0gYXJncy5pdGVtW2NoYW5nZWRfY29sdW1uXSwgICAgICAgICAgICAgICAgICAgLy8g TmV3IHZhbHVlIGZvciBjdXJyZW50IGZpZWxkCi0gICAgICAgICAgICBfcGsgPSBhcmdzLml0ZW0u X190ZW1wX1BLIHx8IG51bGwsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBVbmlxdWUga2V5 IHRvIGlkZW50aWZ5IHJvdworICAgICAgICAgICAgX3BrID0gYXJncy5pdGVtW3NlbGYuY2xpZW50 X3ByaW1hcnlfa2V5XSB8fCBudWxsLCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW5pcXVl IGtleSB0byBpZGVudGlmeSByb3cKICAgICAgICAgICAgIGNvbHVtbl9kYXRhID0ge30sCiAgICAg ICAgICAgICBfdHlwZTsKIApAQCAtNzM0LDExICs3NjEsMTYgQEAgZGVmaW5lKFsKICAgICAgICAg ICAvLyBzbyB0aGF0IGNlbGwgZWRpdCBpcyBlbmFibGVkIGZvciB0aGF0IHJvdy4KICAgICAgICAg ICB2YXIgZ3JpZCA9IGFyZ3MuZ3JpZCwKICAgICAgICAgICAgIHJvd19kYXRhID0gZ3JpZC5nZXRE YXRhSXRlbShhcmdzLnJvdyksCi0gICAgICAgICAgICBwX2tleXNfbGlzdCA9IF8ucGljaygKLSAg ICAgICAgICAgICAgcm93X2RhdGEsIHNlbGYuaGFuZGxlci5nZXRfcm93X3ByaW1hcnlfa2V5KCkK LSAgICAgICAgICAgICksCi0gICAgICAgICAgICBpc19wcmltYXJ5X2tleSA9IE9iamVjdC5rZXlz KHBfa2V5c19saXN0KS5sZW5ndGggPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwX2tl eXNfbGlzdFswXSA6IHVuZGVmaW5lZDsKKyAgICAgICAgICAgIGlzX3ByaW1hcnlfa2V5ID0gXy5h bGwoCisgICAgICAgICAgICAgICAgXy52YWx1ZXMoCisgICAgICAgICAgICAgICAgICBfLnBpY2so CisgICAgICAgICAgICAgICAgICAgICAgcm93X2RhdGEsIHNlbGYucHJpbWFyeV9rZXlzCisgICAg ICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICAgICBmdW5j dGlvbih2YWwpIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiB2YWwgIT0gdW5kZWZpbmVkCisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICApOwogCiAgICAgICAgICAgLy8gdGVtcF9u ZXdfcm93cyBpcyBhdmFpbGFibGUgb25seSBmb3IgdmlldyBkYXRhLgogICAgICAgICAgIGlmIChp c19wcmltYXJ5X2tleSAmJiBzZWxmLmhhbmRsZXIudGVtcF9uZXdfcm93cykgewpAQCAtNzU4LDcg Kzc5MCw2IEBAIGRlZmluZShbCiAgICAgICAgICAgICAgICAgICBjb2x1bW5fZGF0YSk7CiAgICAg ICAgICAgICAgIC8vRmluZCB0eXBlIGZvciBjdXJyZW50IGNvbHVtbgogICAgICAgICAgICAgICBz ZWxmLmhhbmRsZXIuZGF0YV9zdG9yZS5hZGRlZFtfcGtdWydlcnInXSA9IGZhbHNlCi0gICAgICAg ICAgICAgIHNlbGYuaGFuZGxlci5kYXRhX3N0b3JlLmFkZGVkW19wa11bJ2RhdGFfdHlwZSddW2No YW5nZWRfY29sdW1uXSA9IF8ud2hlcmUodGhpcy5jb2x1bW5zLCB7cG9zOiBjaGFuZ2VkX2NvbHVt bn0pWzBdWyd0eXBlJ107CiAgICAgICAgICAgICAvLyBDaGVjayBpZiBpdCBpcyB1cGRhdGVkIGRh dGEgZnJvbSBleGlzdGluZyByb3dzPwogICAgICAgICAgICAgfSBlbHNlIGlmKF9wayBpbiBzZWxm LmhhbmRsZXIuZGF0YV9zdG9yZS51cGRhdGVkKSB7CiAgICAgICAgICAgICAgIF8uZXh0ZW5kKApA QCAtNzY2LDkgKzc5Nyw2IEBAIGRlZmluZShbCiAgICAgICAgICAgICAgICAgY29sdW1uX2RhdGEK ICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVyLmRhdGFfc3RvcmUu dXBkYXRlZFtfcGtdWydlcnInXSA9IGZhbHNlCi0KLSAgICAgICAgICAgICAvL0ZpbmQgdHlwZSBm b3IgY3VycmVudCBjb2x1bW4KLSAgICAgICAgICAgICBzZWxmLmhhbmRsZXIuZGF0YV9zdG9yZS51 cGRhdGVkW19wa11bJ2RhdGFfdHlwZSddW2NoYW5nZWRfY29sdW1uXSA9IF8ud2hlcmUodGhpcy5j b2x1bW5zLCB7cG9zOiBjaGFuZ2VkX2NvbHVtbn0pWzBdWyd0eXBlJ107CiAgICAgICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICAgICAvLyBGaXJzdCB1cGRhdGVkIGRhdGEgZm9yIHRoaXMgcHJp bWFyeSBrZXkKICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVyLmRhdGFfc3RvcmUudXBkYXRlZFtf cGtdID0gewpAQCAtNzc2LDMyICs4MDQsMTkgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgICAn cHJpbWFyeV9rZXlzJzogc2VsZi5oYW5kbGVyLnByaW1hcnlfa2V5c19kYXRhW19wa10KICAgICAg ICAgICAgICAgfTsKICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVyLmRhdGFfc3RvcmUudXBkYXRl ZF9pbmRleFthcmdzLnJvd10gPSBfcGs7Ci0gICAgICAgICAgICAgIC8vIEZpbmQgJiBhZGQgY29s dW1uIGRhdGEgdHlwZSBmb3IgY3VycmVudCBjaGFuZ2VkIGNvbHVtbgotICAgICAgICAgICAgICB2 YXIgdGVtcCA9IHt9OwotICAgICAgICAgICAgICB0ZW1wW2NoYW5nZWRfY29sdW1uXSA9IF8ud2hl cmUodGhpcy5jb2x1bW5zLCB7cG9zOiBjaGFuZ2VkX2NvbHVtbn0pWzBdWyd0eXBlJ107Ci0gICAg ICAgICAgICAgIHNlbGYuaGFuZGxlci5kYXRhX3N0b3JlLnVwZGF0ZWRbX3BrXVsnZGF0YV90eXBl J10gPSB0ZW1wOwogICAgICAgICAgICAgfQogICAgICAgICAgIH0KICAgICAgICAgICAvLyBFbmFi bGUgc2F2ZSBidXR0b24KICAgICAgICAgICAkKCIjYnRuLXNhdmUiKS5wcm9wKCdkaXNhYmxlZCcs IGZhbHNlKTsKICAgICAgICAgfS5iaW5kKGVkaXRvcl9kYXRhKSk7CiAKLSAgICAgICAgZ3JpZC5h ZGRCbGFua1JvdyA9IGZ1bmN0aW9uKCkgewotICAgICAgICAgIC8vIEFkZCBhIGJsYW5rIHJvdyBp biB0aGUgZW5kIG9mIGdyaWQKLSAgICAgICAgICB0aGlzLnNldERhdGEodGhpcy5nZXREYXRhKCks IHRydWUpOwotICAgICAgICAgIHRoaXMudXBkYXRlUm93Q291bnQoKTsKLSAgICAgICAgICB0aGlz LmludmFsaWRhdGVBbGxSb3dzKCk7Ci0gICAgICAgICAgdGhpcy5yZW5kZXIoKTsKLSAgICAgICAg fTsKLQogICAgICAgICAvLyBMaXN0ZW5lciBmdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCB3 aGVuIHVzZXIgYWRkcyBuZXcgcm93cwogICAgICAgICBncmlkLm9uQWRkTmV3Um93LnN1YnNjcmli ZShmdW5jdGlvbiAoZSwgYXJncykgewogICAgICAgICAgIC8vIHNlbGYuaGFuZGxlci5kYXRhX3N0 b3JlLmFkZGVkIHdpbGwgaG9sZHMgYWxsIHRoZSBuZXdseSBhZGRlZCByb3dzL2RhdGEKLSAgICAg ICAgICB2YXIgX2tleSA9IFNxbEVkaXRvclV0aWxzLmVwaWNSYW5kb21TdHJpbmcoMTApLAotICAg ICAgICAgICAgY29sdW1uID0gYXJncy5jb2x1bW4sCi0gICAgICAgICAgICBpdGVtID0gYXJncy5p dGVtLAotICAgICAgICAgICAgZGF0YV9sZW5ndGggPSB0aGlzLmdyaWQuZ2V0RGF0YUxlbmd0aCgp LAotICAgICAgICAgICAgbmV3X2NvbGxlY3Rpb24gPSBhcmdzLmdyaWQuZ2V0RGF0YSgpOworICAg ICAgICAgIHZhciBjb2x1bW4gPSBhcmdzLmNvbHVtbiwKKyAgICAgICAgICAgIGl0ZW0gPSBhcmdz Lml0ZW0sIGRhdGFfbGVuZ3RoID0gdGhpcy5ncmlkLmdldERhdGFMZW5ndGgoKSwKKyAgICAgICAg ICAgIF9rZXkgPSAoc2VsZi5jbGllbnRfcHJpbWFyeV9rZXlfY291bnRlcisrKS50b1N0cmluZygp LAorICAgICAgICAgICAgZGF0YVZpZXcgPSB0aGlzLmdyaWQuZ2V0RGF0YSgpOwogCiAgICAgICAg ICAgLy8gQWRkIG5ldyByb3cgaW4gbGlzdCB0byBrZWVwIHRyYWNrIG9mIGl0CiAgICAgICAgICAg aWYgKF8uaXNVbmRlZmluZWQoaXRlbVswXSkpIHsKQEAgLTgxMCwyOSArODI1LDMyIEBAIGRlZmlu ZShbCiAKICAgICAgICAgICAvLyBJZiBjb3BpZWQgaXRlbSBoYXMgYWxyZWFkeSBwcmltYXJ5IGtl eSwgdXNlIGl0LgogICAgICAgICAgIGlmKGl0ZW0pIHsKLSAgICAgICAgICAgIGl0ZW0uX190ZW1w X1BLID0gX2tleTsKKyAgICAgICAgICAgIGl0ZW1bc2VsZi5jbGllbnRfcHJpbWFyeV9rZXldID0g X2tleTsKICAgICAgICAgICB9Ci0gICAgICAgICAgbmV3X2NvbGxlY3Rpb24ucHVzaChpdGVtKTsK IAorICAgICAgICAgIGRhdGFWaWV3LmFkZEl0ZW0oaXRlbSk7CiAgICAgICAgICAgc2VsZi5oYW5k bGVyLmRhdGFfc3RvcmUuYWRkZWRbX2tleV0gPSB7J2Vycic6IGZhbHNlLCAnZGF0YSc6IGl0ZW19 OwogICAgICAgICAgIHNlbGYuaGFuZGxlci5kYXRhX3N0b3JlLmFkZGVkX2luZGV4W2RhdGFfbGVu Z3RoXSA9IF9rZXk7CiAgICAgICAgICAgLy8gRmV0Y2ggZGF0YSB0eXBlICYgYWRkIGl0IGZvciB0 aGUgY29sdW1uCiAgICAgICAgICAgdmFyIHRlbXAgPSB7fTsKLSAgICAgICAgICB0ZW1wW2NvbHVt bi5wb3NdID0gXy53aGVyZSh0aGlzLmNvbHVtbnMsIHtwb3M6IGNvbHVtbi5wb3N9KVswXVsndHlw ZSddOwotICAgICAgICAgIHNlbGYuaGFuZGxlci5kYXRhX3N0b3JlLmFkZGVkW19rZXldWydkYXRh X3R5cGUnXSA9ICB0ZW1wOwotICAgICAgICAgIGdyaWQuaW52YWxpZGF0ZVJvd3MoW25ld19jb2xs ZWN0aW9uLmxlbmd0aCAtIDFdKTsKKyAgICAgICAgICB0ZW1wW2NvbHVtbi5uYW1lXSA9IF8ud2hl cmUodGhpcy5jb2x1bW5zLCB7cG9zOiBjb2x1bW4ucG9zfSlbMF1bJ3R5cGUnXTsKICAgICAgICAg ICBncmlkLnVwZGF0ZVJvd0NvdW50KCk7CiAgICAgICAgICAgZ3JpZC5yZW5kZXIoKTsKIAotICAg ICAgICAgIC8vIEFkZCBhIGJsYW5rIHJvdyBhZnRlciBhZGQgcm93Ci0gICAgICAgICAgaWYgKCFh cmdzLmlzX2NvcHlfcm93KSB7Ci0gICAgICAgICAgICBncmlkLmFkZEJsYW5rUm93KCk7Ci0gICAg ICAgICAgfQotCiAgICAgICAgICAgLy8gRW5hYmxlIHNhdmUgYnV0dG9uCiAgICAgICAgICAgJCgi I2J0bi1zYXZlIikucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CiAgICAgICAgIH0uYmluZChlZGl0 b3JfZGF0YSkpOwogCisgICAgICAgIC8vIExpc3RlbiBncmlkIHZpZXdwb3J0Q2hhbmdlZCBldmVu dCB0byBsb2FkIG5leHQgY2h1bmsgb2YgZGF0YS4KKyAgICAgICAgZ3JpZC5vblZpZXdwb3J0Q2hh bmdlZC5zdWJzY3JpYmUoZnVuY3Rpb24oZSwgYXJncykgeworICAgICAgICAgIHZhciByZW5kZXJl ZF9yYW5nZSA9IGFyZ3MuZ3JpZC5nZXRSZW5kZXJlZFJhbmdlKCksCisgICAgICAgICAgICAgIGRh dGFfbGVuID0gYXJncy5ncmlkLmdldERhdGFMZW5ndGgoKTsKKyAgICAgICAgICAvLyBzdGFydCBm ZXRjaGluZyBuZXh0IGJhdGNoIG9mIHJlY29yZHMgYmVmb3JlIHJlYWNoaW5nIHRvIGJvdHRvbS4K KyAgICAgICAgICBpZiAoc2VsZi5oYW5kbGVyLmhhc19tb3JlX3Jvd3MgJiYgIXNlbGYuaGFuZGxl ci5mZXRjaGluZ19yb3dzICYmIHJlbmRlcmVkX3JhbmdlLmJvdHRvbSA+IGRhdGFfbGVuIC0gMTAw KSB7CisgICAgICAgICAgICAvLyBmZXRjaCBhc3luY2hyb25vdXMKKyAgICAgICAgICAgIHNldFRp bWVvdXQoc2VsZi5mZXRjaF9uZXh0LmJpbmQoc2VsZikpOworICAgICAgICAgIH0KKyAgICAgICAg fSkKICAgICAgICAgLy8gUmVzaXplIFNsaWNrR3JpZCB3aGVuIHdpbmRvdyByZXNpemUKICAgICAg ICAgJCggd2luZG93ICkucmVzaXplKCBmdW5jdGlvbigpIHsKICAgICAgICAgICAvLyBSZXNpemUg Z3JpZCBvbmx5IHdoZW4gJ0RhdGEgT3V0cHV0JyBwYW5lbCBpcyB2aXNpYmxlLgpAQCAtODU1LDYg Kzg3Myw4NCBAQCBkZWZpbmUoWwogICAgICAgICAgIGlmKHNlbGYuZGF0YV9vdXRwdXRfcGFuZWwu aXNWaXNpYmxlKCkpCiAgICAgICAgICAgICBzZWxmLmdyaWRfcmVzaXplKGdyaWQpOwogICAgICAg ICB9KTsKKworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbGxlY3Rpb24ubGVuZ3RoOyBp KyspIHsKKyAgICAgICAgICAvLyBDb252ZXJ0IHRvIGRpY3QgZnJvbSAyZGFycmF5CisgICAgICAg ICAgdmFyIGl0ZW0gPSB7fTsKKyAgICAgICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGdyaWRfY29s dW1ucy5sZW5ndGg7IGorKykgeworICAgICAgICAgICAgaXRlbVtncmlkX2NvbHVtbnNbal1bJ2Zp ZWxkJ11dID0gY29sbGVjdGlvbltpXVtncmlkX2NvbHVtbnNbal1bJ3BvcyddXQorICAgICAgICAg IH0KKworICAgICAgICAgIGl0ZW1bc2VsZi5jbGllbnRfcHJpbWFyeV9rZXldID0gKHNlbGYuY2xp ZW50X3ByaW1hcnlfa2V5X2NvdW50ZXIrKykudG9TdHJpbmcoKTsKKyAgICAgICAgICBjb2xsZWN0 aW9uW2ldID0gaXRlbTsKKyAgICAgICAgfQorICAgICAgICBkYXRhVmlldy5zZXRJdGVtcyhjb2xs ZWN0aW9uLCBzZWxmLmNsaWVudF9wcmltYXJ5X2tleSk7CisgICAgICB9LAorICAgICAgZmV0Y2hf bmV4dF9hbGwoY2IpIHsKKyAgICAgICAgdGhpcy5mZXRjaF9uZXh0KHRydWUsIGNiKTsKKyAgICAg IH0sCisgICAgICBmZXRjaF9uZXh0OiBmdW5jdGlvbihmZXRjaF9hbGwsIGNiKSB7CisgICAgICAg IHZhciBzZWxmID0gdGhpczsKKworICAgICAgICAvLyBUaGlzIHdpbGwgcHJldmVudCBmZXRjaCBv cGVyYXRpb24gaWYgcHJldmlvdXMgZmV0Y2ggb3BlcmF0aW9uIGlzCisgICAgICAgIC8vIGFscmVh ZHkgaW4gcHJvZ3Jlc3MuCisgICAgICAgIHNlbGYuaGFuZGxlci5mZXRjaGluZ19yb3dzID0gdHJ1 ZTsKKworICAgICAgICAkKCIjYnRuLWZsYXNoIikucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKKwor ICAgICAgICBpZiAoZmV0Y2hfYWxsKSB7CisgICAgICAgICAgc2VsZi5oYW5kbGVyLnRyaWdnZXIo CisgICAgICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6bG9hZGluZy1pY29uOnNob3cnLAorICAg ICAgICAgICAgZ2V0dGV4dCgnRmV0Y2hpbmcgYWxsIHJlY29yZHMuLi4nKQorICAgICAgICAgICk7 CisgICAgICAgIH0KKworICAgICAgICAkLmFqYXgoeworICAgICAgICAgIHVybDogInt7IHVybF9m b3IoJ3NxbGVkaXRvci5pbmRleCcpIH19IiArICJmZXRjaC8iICsgc2VsZi50cmFuc0lkICsgKGZl dGNoX2FsbCA/ICIvMSI6ICIiKSwKKyAgICAgICAgICBtZXRob2Q6ICdHRVQnLAorICAgICAgICAg IHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgeworICAgICAgICAgICAgc2VsZi5oYW5kbGVyLmhhc19t b3JlX3Jvd3MgPSByZXMuZGF0YS5oYXNfbW9yZV9yb3dzOworICAgICAgICAgICAgJCgiI2J0bi1m bGFzaCIpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpOworICAgICAgICAgICAgc2VsZi5oYW5kbGVy LnRyaWdnZXIoJ3BnYWRtaW4tc3FsZWRpdG9yOmxvYWRpbmctaWNvbjpoaWRlJyk7CisgICAgICAg ICAgICBzZWxmLnVwZGF0ZV9ncmlkX2RhdGEocmVzLmRhdGEucmVzdWx0KTsKKyAgICAgICAgICAg IHNlbGYuaGFuZGxlci5mZXRjaGluZ19yb3dzID0gZmFsc2U7CisgICAgICAgICAgICBpZiAodHlw ZW9mIGNiID09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgICAgY2IoKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICB9LAorICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihlKSB7CisgICAgICAg ICAgICAkKCIjYnRuLWZsYXNoIikucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CisgICAgICAgICAg ICBzZWxmLmhhbmRsZXIudHJpZ2dlcigncGdhZG1pbi1zcWxlZGl0b3I6bG9hZGluZy1pY29uOmhp ZGUnKTsKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlci5oYXNfbW9yZV9yb3dzID0gZmFsc2U7Cisg ICAgICAgICAgICBzZWxmLmhhbmRsZXIuZmV0Y2hpbmdfcm93cyA9IGZhbHNlOworICAgICAgICAg ICAgaWYgKHR5cGVvZiBjYiA9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICAgIGNiKCk7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZS5yZWFkeVN0YXRlID09IDApIHsKKyAgICAg ICAgICAgICAgc2VsZi51cGRhdGVfbXNnX2hpc3RvcnkoZmFsc2UsCisgICAgICAgICAgICAgICAg Z2V0dGV4dCgnTm90IGNvbm5lY3RlZCB0byB0aGUgc2VydmVyIG9yIHRoZSBjb25uZWN0aW9uIHRv IHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicpCisgICAgICAgICAgICAgICk7CisgICAgICAg ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0pOwor ICAgICAgfSwKKworICAgICAgdXBkYXRlX2dyaWRfZGF0YTogZnVuY3Rpb24oZGF0YSkgeworICAg ICAgICB0aGlzLmRhdGFWaWV3LmJlZ2luVXBkYXRlKCk7CisKKyAgICAgICAgZm9yICh2YXIgaSA9 IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgLy8gQ29udmVydCAyZGFycmF5 IHRvIGRpY3QuCisgICAgICAgICAgdmFyIGl0ZW0gPSB7fTsKKyAgICAgICAgICBmb3IgKHZhciBq ID0gMTsgaiA8IHRoaXMuZ3JpZF9jb2x1bW5zLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICBp dGVtW3RoaXMuZ3JpZF9jb2x1bW5zW2pdWydmaWVsZCddXSA9IGRhdGFbaV1bdGhpcy5ncmlkX2Nv bHVtbnNbal1bJ3BvcyddXQorICAgICAgICAgIH0KKworICAgICAgICAgIGl0ZW1bdGhpcy5jbGll bnRfcHJpbWFyeV9rZXldID0gKHRoaXMuY2xpZW50X3ByaW1hcnlfa2V5X2NvdW50ZXIrKykudG9T dHJpbmcoKTsKKyAgICAgICAgICB0aGlzLmRhdGFWaWV3LmFkZEl0ZW0oaXRlbSk7CisgICAgICAg IH0KKworICAgICAgICB0aGlzLmRhdGFWaWV3LmVuZFVwZGF0ZSgpOwogICAgICAgfSwKIAogICAg ICAgLyogVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSB0byByZW5kZXIgb3V0cHV0IGdyaWQg Ki8KQEAgLTEzOTYsNiArMTQ5Miw4IEBAIGRlZmluZShbCiAgICAgICAgICAgc2VsZi5leHBsYWlu X2J1ZmZlcnMgPSBmYWxzZTsKICAgICAgICAgICBzZWxmLmV4cGxhaW5fdGltaW5nID0gZmFsc2U7 CiAgICAgICAgICAgc2VsZi5pc19uZXdfYnJvd3Nlcl90YWIgPSBpc19uZXdfYnJvd3Nlcl90YWI7 CisgICAgICAgICAgc2VsZi5oYXNfbW9yZV9yb3dzID0gZmFsc2U7CisgICAgICAgICAgc2VsZi5m ZXRjaGluZ19yb3dzID0gZmFsc2U7CiAKICAgICAgICAgICAvLyBXZSBkbyBub3QgYWxsb3cgdG8g Y2FsbCB0aGUgc3RhcnQgbXVsdGlwbGUgdGltZXMuCiAgICAgICAgICAgaWYgKHNlbGYuZ3JpZFZp ZXcpCkBAIC0xNTAzLDYgKzE2MDEsOCBAQCBkZWZpbmUoWwogICAgICAgICAgIHNlbGYucm93c190 b19kaXNhYmxlID0gbmV3IEFycmF5KCk7CiAgICAgICAgICAgLy8gVGVtcG9yYXJpbHkgaG9sZCBu ZXcgcm93cyBhZGRlZAogICAgICAgICAgIHNlbGYudGVtcF9uZXdfcm93cyA9IG5ldyBBcnJheSgp OworICAgICAgICAgIHNlbGYuaGFzX21vcmVfcm93cyA9IGZhbHNlOworICAgICAgICAgIHNlbGYu ZmV0Y2hpbmdfcm93cyA9IGZhbHNlOwogCiAgICAgICAgICAgc2VsZi50cmlnZ2VyKAogICAgICAg ICAgICAgJ3BnYWRtaW4tc3FsZWRpdG9yOmxvYWRpbmctaWNvbjpzaG93JywKQEAgLTE1ODEsNDUg KzE2ODEsMTQgQEAgZGVmaW5lKFsKICAgICAgICAgICB9KTsKICAgICAgICAgfSwKIAotICAgICAg ICAvLyBUaGlzIGZ1bmN0aW9uIG1ha2VzIHRoZSBhamF4IGNhbGwgdG8gZmV0Y2ggY29sdW1ucyBm b3IgbGFzdCBhc3luYyBxdWVyeSwKLSAgICAgICAgZ2V0X2NvbHVtbnM6IGZ1bmN0aW9uKHBvbGxf cmVzdWx0KSB7Ci0gICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwotICAgICAgICAgIC8vIENoZWNr IHRoZSBmbGFnIGFuZCBkZWNpZGUgaWYgd2UgbmVlZCB0byBmZXRjaCBjb2x1bW5zIGZyb20gc2Vy dmVyCi0gICAgICAgICAgLy8gb3IgdXNlIHRoZSBjb2x1bW5zIGRhdGEgc3RvcmVkIGxvY2FsbHkg ZnJvbSBwcmV2aW91cyBjYWxsPwotICAgICAgICAgIGlmIChzZWxmLkZFVENIX0NPTFVNTlNfRlJP TV9TRVJWRVIpIHsKLSAgICAgICAgICAgICQuYWpheCh7Ci0gICAgICAgICAgICAgIHVybDogInt7 IHVybF9mb3IoJ3NxbGVkaXRvci5pbmRleCcpIH19IiArICJjb2x1bW5zLyIgKyBzZWxmLnRyYW5z SWQsCi0gICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsCi0gICAgICAgICAgICAgIHN1Y2Nlc3M6 IGZ1bmN0aW9uKHJlcykgewotICAgICAgICAgICAgICAgIHBvbGxfcmVzdWx0LmNvbGluZm8gPSBy ZXMuZGF0YS5jb2x1bW5zOwotICAgICAgICAgICAgICAgIHBvbGxfcmVzdWx0LnByaW1hcnlfa2V5 cyA9IHJlcy5kYXRhLnByaW1hcnlfa2V5czsKLSAgICAgICAgICAgICAgICBzZWxmLmNhbGxfcmVu ZGVyX2FmdGVyX3BvbGwocG9sbF9yZXN1bHQpOwotICAgICAgICAgICAgICAgIC8vIFNldCBhIGZs YWcgdG8gZ2V0IGNvbHVtbnMgdG8gZmFsc2UgJiBzZXQgdGhlIHZhbHVlIGZvciBmdXR1cmUgdXNl Ci0gICAgICAgICAgICAgICAgc2VsZi5GRVRDSF9DT0xVTU5TX0ZST01fU0VSVkVSID0gZmFsc2U7 Ci0gICAgICAgICAgICAgICAgc2VsZi5DT0xVTU5TX0RBVEEgPSByZXM7Ci0gICAgICAgICAgICAg IH0sCi0gICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgICAg dmFyIG1zZyA9IGUucmVzcG9uc2VUZXh0OwotICAgICAgICAgICAgICAgIGlmIChlLnJlc3BvbnNl SlNPTiAhPSB1bmRlZmluZWQgJiYgZS5yZXNwb25zZUpTT04uZXJyb3Jtc2cgIT0gdW5kZWZpbmVk KQotICAgICAgICAgICAgICAgICAgbXNnID0gZS5yZXNwb25zZUpTT04uZXJyb3Jtc2c7Ci0gICAg ICAgICAgICAgICAgICBhbGVydGlmeS5lcnJvcihtc2csIDUpOwotICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICB9KTsKLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8gVXNlIHRo ZSBwcmV2aW91c2x5IHNhdmVkIGNvbHVtbnMgZGF0YQotICAgICAgICAgICAgcG9sbF9yZXN1bHQu Y29saW5mbyA9IHNlbGYuQ09MVU1OU19EQVRBLmRhdGEuY29sdW1uczsKLSAgICAgICAgICAgIHBv bGxfcmVzdWx0LnByaW1hcnlfa2V5cyA9IHNlbGYuQ09MVU1OU19EQVRBLmRhdGEucHJpbWFyeV9r ZXlzOwotICAgICAgICAgICAgc2VsZi5jYWxsX3JlbmRlcl9hZnRlcl9wb2xsKHBvbGxfcmVzdWx0 KTsKLSAgICAgICAgICB9Ci0gICAgICAgIH0sCi0KICAgICAgICAgLy8gVGhpcyBpcyBhIHdyYXBw ZXIgdG8gY2FsbCBfcmVuZGVyIGZ1bmN0aW9uCiAgICAgICAgIC8vIFdlIG5lZWQgdGhpcyBiZWNh dXNlIHdlIGhhdmUgc2VwYXJhdGVkIGNvbHVtbnMgcm91dGUgJiByZXN1bHQgcm91dGUKICAgICAg ICAgLy8gV2UgbmVlZCB0byBjb21iaW5lIGJvdGggcmVzdWx0IGhlcmUgaW4gd3JhcHBlciBiZWZv cmUgcmVuZGVyaW5nIGdyaWQKICAgICAgICAgY2FsbF9yZW5kZXJfYWZ0ZXJfcG9sbDogZnVuY3Rp b24ocmVzKSB7CiAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgICAgIHNlbGYucXVl cnlfZW5kX3RpbWUgPSBuZXcgRGF0ZSgpOwotICAgICAgICAgIHNlbGYucm93c19hZmZlY3RlZCA9 IHJlcy5yb3dzX2FmZmVjdGVkOworICAgICAgICAgIHNlbGYucm93c19hZmZlY3RlZCA9IHJlcy5y b3dzX2FmZmVjdGVkLAorICAgICAgICAgIHNlbGYuaGFzX21vcmVfcm93cyA9IHJlcy5oYXNfbW9y ZV9yb3dzOwogCiAgICAgICAgICAgLyogSWYgbm8gY29sdW1uIGluZm9ybWF0aW9uIGlzIGF2YWls YWJsZSBpdCBtZWFucyBxdWVyeQogICAgICAgICAgICAgIHJ1bnMgc3VjY2Vzc2Z1bGx5IHdpdGgg bm8gcmVzdWx0IHRvIGRpc3BsYXkuIEluIHRoaXMKQEAgLTE2NjgsNyArMTczNyw4IEBAIGRlZmlu ZShbCiAgICAgICAgICAgICAgICAgICAgICAgJ3BnYWRtaW4tc3FsZWRpdG9yOmxvYWRpbmctaWNv bjptZXNzYWdlJywKICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXh0KCJMb2FkaW5nIGRhdGEg ZnJvbSB0aGUgZGF0YWJhc2Ugc2VydmVyIGFuZCByZW5kZXJpbmcuLi4iKQogICAgICAgICAgICAg ICAgICAgICApOwotICAgICAgICAgICAgICAgICAgICBzZWxmLmdldF9jb2x1bW5zKHJlcy5kYXRh KTsKKworICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGxfcmVuZGVyX2FmdGVyX3BvbGwocmVz LmRhdGEpOwogICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo cmVzLmRhdGEuc3RhdHVzID09PSAnQnVzeScpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gSWYg c3RhdHVzIGlzIEJ1c3kgdGhlbiBwb2xsIHRoZSByZXN1bHQgYnkgcmVjdXJzaXZlIGNhbGwgdG8g dGhlIHBvbGwgZnVuY3Rpb24KQEAgLTE3MjgsNiArMTc5OCw3IEBAIGRlZmluZShbCiAgICAgICAg ICAgdmFyIHNlbGYgPSB0aGlzOwogICAgICAgICAgIHNlbGYuY29saW5mbyA9IGRhdGEuY29sX2lu Zm87CiAgICAgICAgICAgc2VsZi5wcmltYXJ5X2tleXMgPSBkYXRhLnByaW1hcnlfa2V5czsKKyAg ICAgICAgICBzZWxmLmNsaWVudF9wcmltYXJ5X2tleSA9IGRhdGEuY2xpZW50X3ByaW1hcnlfa2V5 OwogICAgICAgICAgIHNlbGYuY2VsbF9zZWxlY3RlZCA9IGZhbHNlOwogICAgICAgICAgIHNlbGYu c2VsZWN0ZWRfbW9kZWwgPSBudWxsOwogICAgICAgICAgIHNlbGYuY2hhbmdlZE1vZGVscyA9IFtd OwpAQCAtMTc4MCw3ICsxODUxLDcgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgc2VsZi50b3Rh bF90aW1lID0gc2VsZi5nZXRfcXVlcnlfcnVuX3RpbWUoc2VsZi5xdWVyeV9zdGFydF90aW1lLCBz ZWxmLnF1ZXJ5X2VuZF90aW1lKTsKICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfbXNnX2hpc3Rv cnkodHJ1ZSwgIiIsIGZhbHNlKTsKICAgICAgICAgICAgICAgdmFyIG1zZzEgPSBTKGdldHRleHQo IlRvdGFsIHF1ZXJ5IHJ1bnRpbWU6ICVzLiIpKS5zcHJpbnRmKHNlbGYudG90YWxfdGltZSkudmFs dWUoKTsKLSAgICAgICAgICAgICAgdmFyIG1zZzIgPSBTKGdldHRleHQoIiVzIHJvd3MgcmV0cmll dmVkLiIpKS5zcHJpbnRmKHNlbGYucm93c19hZmZlY3RlZCkudmFsdWUoKTsKKyAgICAgICAgICAg ICAgdmFyIG1zZzIgPSBTKGdldHRleHQoIiVzIHJvd3MgYWZmZWN0ZWQuIikpLnNwcmludGYoc2Vs Zi5yb3dzX2FmZmVjdGVkKS52YWx1ZSgpOwogCiAgICAgICAgICAgICAgIC8vIERpc3BsYXkgdGhl IG5vdGlmaWVyIGlmIHRoZSB0aW1lb3V0IGlzIHNldCB0byA+PSAwCiAgICAgICAgICAgICAgIGlm IChzZWxmLmluZm9fbm90aWZpZXJfdGltZW91dCA+PSAwKSB7CkBAIC0xODE2LDcgKzE4ODcsOCBA QCBkZWZpbmUoWwogICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoCiAgICAgICAgICAgICAgICAg ICBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgc2VsZi5ncmlkVmlldy5yZW5kZXJf Z3JpZCgKLSAgICAgICAgICAgICAgICAgICAgICBleHBsYWluX2RhdGFfYXJyYXksIHNlbGYuY29s dW1ucywgc2VsZi5jYW5fZWRpdAorICAgICAgICAgICAgICAgICAgICAgIGV4cGxhaW5fZGF0YV9h cnJheSwgc2VsZi5jb2x1bW5zLCBzZWxmLmNhbl9lZGl0LAorICAgICAgICAgICAgICAgICAgICAg IHNlbGYuY2xpZW50X3ByaW1hcnlfa2V5CiAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAg ICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSAtIHRoZSAnRXhwbGFpbicgcGFuZWwgaXMgdmlzaWJs ZSwgYmVmb3JlIC0gd2UKICAgICAgICAgICAgICAgICAgICAgLy8gc3RhcnQgcmVuZGVyaW5nIHRo ZSBncmlkLgpAQCAtMTgzMiw3ICsxOTA0LDggQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgICBz ZWxmLmdyaWRWaWV3LmRhdGFfb3V0cHV0X3BhbmVsLmZvY3VzKCk7CiAgICAgICAgICAgICAgICAg c2V0VGltZW91dCgKICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkgewotICAgICAgICAgICAg ICAgICAgICBzZWxmLmdyaWRWaWV3LnJlbmRlcl9ncmlkKGRhdGEucmVzdWx0LCBzZWxmLmNvbHVt bnMsIHNlbGYuY2FuX2VkaXQpOworICAgICAgICAgICAgICAgICAgICBzZWxmLmdyaWRWaWV3LnJl bmRlcl9ncmlkKGRhdGEucmVzdWx0LCBzZWxmLmNvbHVtbnMsCisgICAgICAgICAgICAgICAgICAg IHNlbGYuY2FuX2VkaXQsIHNlbGYuY2xpZW50X3ByaW1hcnlfa2V5LCBkYXRhLnJvd3NfYWZmZWN0 ZWQpOwogICAgICAgICAgICAgICAgICAgfSwgMTAKICAgICAgICAgICAgICAgICApOwogICAgICAg ICAgICAgICB9CkBAIC0xODQwLDEzNiArMTkxMywxMTQgQEAgZGVmaW5lKFsKICAgICAgICAgICAg ICAgLy8gSGlkZSB0aGUgbG9hZGluZyBpY29uCiAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcign cGdhZG1pbi1zcWxlZGl0b3I6bG9hZGluZy1pY29uOmhpZGUnKTsKICAgICAgICAgICAgICAgJCgi I2J0bi1mbGFzaCIpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpOwotICAgICAgICAgICAgfS5iaW5k KHNlbGYpLAotICAgICAgICAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgIHRoaXMudHJp Z2dlcigncGdhZG1pbi1zcWxlZGl0b3I6bG9hZGluZy1pY29uOmhpZGUnKTsKLSAgICAgICAgICAg ICAgJCgiI2J0bi1mbGFzaCIpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpOwogICAgICAgICAgICAg fS5iaW5kKHNlbGYpCiAgICAgICAgICAgKTsKICAgICAgICAgfSwKIAogICAgICAgICAvLyBUaGlz IGZ1bmN0aW9uIGNyZWF0ZXMgdGhlIGNvbHVtbnMgYXMgcmVxdWlyZWQgYnkgdGhlIGJhY2tncmlk Ci0gICAgICAgIF9mZXRjaF9jb2x1bW5fbWV0YWRhdGE6IGZ1bmN0aW9uKGRhdGEsIGNiLCBfZmFp bCkgeworICAgICAgICBfZmV0Y2hfY29sdW1uX21ldGFkYXRhOiBmdW5jdGlvbihkYXRhLCBjYikg ewogICAgICAgICAgIHZhciBjb2xpbmZvID0gZGF0YS5jb2xpbmZvLAogICAgICAgICAgICAgICBw cmltYXJ5X2tleXMgPSBkYXRhLnByaW1hcnlfa2V5cywKICAgICAgICAgICAgICAgcmVzdWx0ID0g ZGF0YS5yZXN1bHQsCiAgICAgICAgICAgICAgIGNvbHVtbnMgPSBbXSwKICAgICAgICAgICAgICAg c2VsZiA9IHRoaXM7CisgICAgICAgICAgLy8gU3RvcmUgcGdfdHlwZXMgaW4gYW4gYXJyYXkKKyAg ICAgICAgICB2YXIgcGdfdHlwZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICBfLmVhY2goZGF0 YS50eXBlcywgZnVuY3Rpb24ocikgeworICAgICAgICAgICAgcGdfdHlwZXNbci5vaWRdID0gW3Iu dHlwbmFtZV07CisgICAgICAgICAgfSk7CiAKLSAgICAgICAgICBzZWxmLnRyaWdnZXIoCi0gICAg ICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6bG9hZGluZy1pY29uOm1lc3NhZ2UnLAotICAgICAg ICAgICAgZ2V0dGV4dCgiUmV0cmlldmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29sdW1ucyBy ZXR1cm5lZC4uLiIpCi0gICAgICAgICAgKTsKLQotICAgICAgICAgIC8vIE1ha2UgYWpheCBjYWxs IHRvIGZldGNoIHRoZSBwZyB0eXBlcyB0byBtYXAgbnVtZXJpYyBkYXRhIHR5cGUKLSAgICAgICAg ICAkLmFqYXgoewotICAgICAgICAgICAgdXJsOiAie3sgdXJsX2Zvcignc3FsZWRpdG9yLmluZGV4 JykgfX0iICsgImZldGNoL3R5cGVzLyIgKyBzZWxmLnRyYW5zSWQsCi0gICAgICAgICAgICBtZXRo b2Q6ICdHRVQnLAotICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKSB7Ci0gICAgICAg ICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMpIHsKLSAgICAgICAgICAgICAgICAvLyBTdG9yZSBw Z190eXBlcyBpbiBhbiBhcnJheQotICAgICAgICAgICAgICAgIHZhciBwZ190eXBlcyA9IG5ldyBB cnJheSgpOwotICAgICAgICAgICAgICAgIF8uZWFjaChyZXMuZGF0YS5yZXN1bHQucm93cywgZnVu Y3Rpb24ocikgewotICAgICAgICAgICAgICAgICAgcGdfdHlwZXNbci5vaWRdID0gW3IudHlwbmFt ZV07Ci0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBDcmVhdGUgY29s dW1ucyByZXF1aXJlZCBieSBiYWNrZ3JpZCB0byByZW5kZXIKLSAgICAgICAgICAgICAgICBfLmVh Y2goY29saW5mbywgZnVuY3Rpb24oYykgewotICAgICAgICAgICAgICAgICAgdmFyIGlzX3ByaW1h cnlfa2V5ID0gZmFsc2U7CisgICAgICAgICAgLy8gQ3JlYXRlIGNvbHVtbnMgcmVxdWlyZWQgYnkg c2xpY2sgZ3JpZCB0byByZW5kZXIKKyAgICAgICAgICBfLmVhY2goY29saW5mbywgZnVuY3Rpb24o YykgeworICAgICAgICAgICAgdmFyIGlzX3ByaW1hcnlfa2V5ID0gZmFsc2U7CiAKLSAgICAgICAg ICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGFibGUgaGF2ZSBwcmltYXJ5IGtleQotICAgICAg ICAgICAgICAgICAgaWYgKF8uc2l6ZShwcmltYXJ5X2tleXMpID4gMCkgewotICAgICAgICAgICAg ICAgICAgICBfLmVhY2gocHJpbWFyeV9rZXlzLCBmdW5jdGlvbiAodmFsdWUsIGtleSkgewotICAg ICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IGMubmFtZSkKLSAgICAgICAgICAgICAgICAg ICAgICAgIGlzX3ByaW1hcnlfa2V5ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSk7Ci0g ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRhYmxlIGhh dmUgcHJpbWFyeSBrZXkKKyAgICAgICAgICAgIGlmIChfLnNpemUocHJpbWFyeV9rZXlzKSA+IDAp IHsKKyAgICAgICAgICAgICAgXy5lYWNoKHByaW1hcnlfa2V5cywgZnVuY3Rpb24gKHZhbHVlLCBr ZXkpIHsKKyAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBjLm5hbWUpCisgICAgICAgICAgICAg ICAgICBpc19wcmltYXJ5X2tleSA9IHRydWU7CisgICAgICAgICAgICAgIH0pOworICAgICAgICAg ICAgfQogCi0gICAgICAgICAgICAgICAgICAvLyBUbyBzaG93IGNvbHVtbiBsYWJlbCBhbmQgZGF0 YSB0eXBlIGluIG11bHRpbGluZSwKLSAgICAgICAgICAgICAgICAgIC8vIFRoZSBlbGVtZW50cyBz aG91bGQgYmUgcHV0IGluc2lkZSB0aGUgZGl2LgotICAgICAgICAgICAgICAgICAgLy8gQ3JlYXRl IGNvbHVtbiBsYWJlbCBhbmQgdHlwZS4KLSAgICAgICAgICAgICAgICAgIHZhciBjb2xfdHlwZSA9 IGNvbHVtbl9sYWJlbCA9ICcnOwotICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBwZ190eXBl c1tjLnR5cGVfY29kZV0gPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX3R5cGVz W2MudHlwZV9jb2RlXVswXSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhp cyBpcyB0aGUgY2FzZSB3aGVyZSB1c2VyIG1pZ2h0Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gaGF2ZSB1c2UgY2FzdGluZyBzbyB3ZSB3aWxsIHVzZSB0eXBlCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuZWQgYnkgY2FzdCBmdW5jdGlvbgotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX3R5cGVzW3BnX3R5cGVzLmxlbmd0aCAtIDFdWzBd ID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX3R5cGVzW3BnX3R5cGVzLmxl bmd0aCAtIDFdWzBdIDogJ3Vua25vd24nOwotCi0gICAgICAgICAgICAgICAgICBpZiAoIWlzX3By aW1hcnlfa2V5KQotICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZSArPSAnICcgKyB0eXBlOwot ICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZSArPSAn IFtQS10gJyArIHR5cGU7CisgICAgICAgICAgICAvLyBUbyBzaG93IGNvbHVtbiBsYWJlbCBhbmQg ZGF0YSB0eXBlIGluIG11bHRpbGluZSwKKyAgICAgICAgICAgIC8vIFRoZSBlbGVtZW50cyBzaG91 bGQgYmUgcHV0IGluc2lkZSB0aGUgZGl2LgorICAgICAgICAgICAgLy8gQ3JlYXRlIGNvbHVtbiBs YWJlbCBhbmQgdHlwZS4KKyAgICAgICAgICAgIHZhciBjb2xfdHlwZSA9IGNvbHVtbl9sYWJlbCA9 ICcnOworICAgICAgICAgICAgdmFyIHR5cGUgPSBwZ190eXBlc1tjLnR5cGVfY29kZV0gPworICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX3R5cGVzW2MudHlwZV9jb2RlXVswXSA6CisgICAgICAg ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB1c2VyIG1pZ2h0Cisg ICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGF2ZSB1c2UgY2FzdGluZyBzbyB3ZSB3aWxsIHVz ZSB0eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJuZWQgYnkgY2FzdCBmdW5j dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgIHBnX3R5cGVzW3BnX3R5cGVzLmxlbmd0aCAt IDFdWzBdID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX3R5cGVzW3BnX3R5cGVzLmxl bmd0aCAtIDFdWzBdIDogJ3Vua25vd24nOworCisgICAgICAgICAgICBpZiAoIWlzX3ByaW1hcnlf a2V5KQorICAgICAgICAgICAgICBjb2xfdHlwZSArPSAnICcgKyB0eXBlOworICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICBjb2xfdHlwZSArPSAnIFtQS10gJyArIHR5cGU7CiAKLSAgICAg ICAgICAgICAgICAgIGlmIChjLnByZWNpc2lvbiAmJiBjLnByZWNpc2lvbiA+PSAwICYmIGMucHJl Y2lzaW9uICE9IDY1NTM1KSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlICs9ICcgKCcg KyBjLnByZWNpc2lvbjsKLSAgICAgICAgICAgICAgICAgICAgY29sX3R5cGUgKz0gYy5zY2FsZSAm JiBjLnNjYWxlICE9IDY1NTM1ID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJywn ICsgYy5zY2FsZSArICcpJzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJyknOwot ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMucHJlY2lzaW9uICYmIGMucHJl Y2lzaW9uID49IDAgJiYgYy5wcmVjaXNpb24gIT0gNjU1MzUpIHsKKyAgICAgICAgICAgICAgY29s X3R5cGUgKz0gJyAoJyArIGMucHJlY2lzaW9uOworICAgICAgICAgICAgICBjb2xfdHlwZSArPSBj LnNjYWxlICYmIGMuc2NhbGUgIT0gNjU1MzUgPworICAgICAgICAgICAgICAgICAgICAgICAgICAn LCcgKyBjLnNjYWxlICsgJyknOgorICAgICAgICAgICAgICAgICAgICAgICAgICAnKSc7CisgICAg ICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgIC8vIElkZW50aWZ5IGNlbGwgdHlwZSBvZiBj b2x1bW4uCi0gICAgICAgICAgICAgICAgICBzd2l0Y2godHlwZSkgewotICAgICAgICAgICAgICAg ICAgICBjYXNlICJqc29uIjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAianNvbltdIjoKLSAg ICAgICAgICAgICAgICAgICAgY2FzZSAianNvbmIiOgotICAgICAgICAgICAgICAgICAgICBjYXNl ICJqc29uYltdIjoKLSAgICAgICAgICAgICAgICAgICAgICBjb2xfY2VsbCA9ICdKc29uJzsKLSAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAic21h bGxpbnQiOgotICAgICAgICAgICAgICAgICAgICBjYXNlICJpbnRlZ2VyIjoKLSAgICAgICAgICAg ICAgICAgICAgY2FzZSAiYmlnaW50IjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiZGVjaW1h bCI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgIm51bWVyaWMiOgotICAgICAgICAgICAgICAg ICAgICBjYXNlICJyZWFsIjoKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiZG91YmxlIHByZWNp c2lvbiI6Ci0gICAgICAgICAgICAgICAgICAgICAgY29sX2NlbGwgPSAnbnVtYmVyJzsKLSAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY2FzZSAiYm9vbGVh biI6Ci0gICAgICAgICAgICAgICAgICAgICAgY29sX2NlbGwgPSAnYm9vbGVhbic7Ci0gICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgImNoYXJhY3Rl ciI6Ci0gICAgICAgICAgICAgICAgICAgIGNhc2UgImNoYXJhY3RlcltdIjoKLSAgICAgICAgICAg ICAgICAgICAgY2FzZSAiY2hhcmFjdGVyIHZhcnlpbmciOgotICAgICAgICAgICAgICAgICAgICBj YXNlICJjaGFyYWN0ZXIgdmFyeWluZ1tdIjoKLSAgICAgICAgICAgICAgICAgICAgICBpZiAoYy5p bnRlcm5hbF9zaXplICYmIGMuaW50ZXJuYWxfc2l6ZSA+PSAwICYmIGMuaW50ZXJuYWxfc2l6ZSAh PSA2NTUzNSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIGNvbHVtbiB0eXBl IHRvIGRpc3BsYXkgbGVuZ3RoIG9uIGNvbHVtbiBoZWFkZXIKLSAgICAgICAgICAgICAgICAgICAg ICAgIGNvbF90eXBlICs9ICcgKCcgKyBjLmludGVybmFsX3NpemUgKyAnKSc7Ci0gICAgICAgICAg ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgIGNvbF9jZWxsID0gJ3N0cmluZyc7 Ci0gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgIGRlZmF1 bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgY29sX2NlbGwgPSAnc3RyaW5nJzsKLSAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIC8vIElkZW50aWZ5IGNlbGwgdHlwZSBvZiBjb2x1bW4u CisgICAgICAgICAgICBzd2l0Y2godHlwZSkgeworICAgICAgICAgICAgICBjYXNlICJqc29uIjoK KyAgICAgICAgICAgICAgY2FzZSAianNvbltdIjoKKyAgICAgICAgICAgICAgY2FzZSAianNvbmIi OgorICAgICAgICAgICAgICBjYXNlICJqc29uYltdIjoKKyAgICAgICAgICAgICAgICBjb2xfY2Vs bCA9ICdKc29uJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAi c21hbGxpbnQiOgorICAgICAgICAgICAgICBjYXNlICJpbnRlZ2VyIjoKKyAgICAgICAgICAgICAg Y2FzZSAiYmlnaW50IjoKKyAgICAgICAgICAgICAgY2FzZSAiZGVjaW1hbCI6CisgICAgICAgICAg ICAgIGNhc2UgIm51bWVyaWMiOgorICAgICAgICAgICAgICBjYXNlICJyZWFsIjoKKyAgICAgICAg ICAgICAgY2FzZSAiZG91YmxlIHByZWNpc2lvbiI6CisgICAgICAgICAgICAgICAgY29sX2NlbGwg PSAnbnVtYmVyJzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgY2FzZSAi Ym9vbGVhbiI6CisgICAgICAgICAgICAgICAgY29sX2NlbGwgPSAnYm9vbGVhbic7CisgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGNhc2UgImNoYXJhY3RlciI6CisgICAgICAg ICAgICAgIGNhc2UgImNoYXJhY3RlcltdIjoKKyAgICAgICAgICAgICAgY2FzZSAiY2hhcmFjdGVy IHZhcnlpbmciOgorICAgICAgICAgICAgICBjYXNlICJjaGFyYWN0ZXIgdmFyeWluZ1tdIjoKKyAg ICAgICAgICAgICAgICBpZiAoYy5pbnRlcm5hbF9zaXplICYmIGMuaW50ZXJuYWxfc2l6ZSA+PSAw ICYmIGMuaW50ZXJuYWxfc2l6ZSAhPSA2NTUzNSkgeworICAgICAgICAgICAgICAgICAgLy8gVXBk YXRlIGNvbHVtbiB0eXBlIHRvIGRpc3BsYXkgbGVuZ3RoIG9uIGNvbHVtbiBoZWFkZXIKKyAgICAg ICAgICAgICAgICAgIGNvbF90eXBlICs9ICcgKCcgKyBjLmludGVybmFsX3NpemUgKyAnKSc7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNvbF9jZWxsID0gJ3N0cmluZyc7Cisg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg ICAgICAgY29sX2NlbGwgPSAnc3RyaW5nJzsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAg ICAgICAgY29sdW1uX2xhYmVsID0gYy5kaXNwbGF5X25hbWUgKyAnPGJyPicgKyBjb2xfdHlwZTsK LQotICAgICAgICAgICAgICAgICAgdmFyIGNvbCA9IHsKLSAgICAgICAgICAgICAgICAgICAgJ25h bWUnOiBjLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICdwb3MnOiBjLnBvcywKLSAgICAgICAg ICAgICAgICAgICAgJ2xhYmVsJzogY29sdW1uX2xhYmVsLAotICAgICAgICAgICAgICAgICAgICAn Y2VsbCc6IGNvbF9jZWxsLAotICAgICAgICAgICAgICAgICAgICAnY2FuX2VkaXQnOiBzZWxmLmNh bl9lZGl0LAotICAgICAgICAgICAgICAgICAgICAndHlwZSc6IHR5cGUsCi0gICAgICAgICAgICAg ICAgICAgICdkaXNwbGF5X25hbWUnOiBjLmRpc3BsYXlfbmFtZSwKLSAgICAgICAgICAgICAgICAg ICAgJ2NvbHVtbl90eXBlJzogY29sX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICdub3RfbnVs bCc6IGMubm90X251bGwsCi0gICAgICAgICAgICAgICAgICAgICdoYXNfZGVmYXVsdF92YWwnOiBj Lmhhc19kZWZhdWx0X3ZhbAotICAgICAgICAgICAgICAgICAgfTsKLSAgICAgICAgICAgICAgICAg IGNvbHVtbnMucHVzaChjb2wpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoJ0Zl dGNoaW5nIFR5cGUgRXJyb3InLCByZXMuZGF0YS5yZXN1bHQpOwotICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgIHNlbGYuY29sdW1ucyA9IGNvbHVtbnM7Ci0gICAgICAgICAgICAgIGlmIChj YiAmJiB0eXBlb2YoY2IpID09ICdmdW5jdGlvbicpIHsKLSAgICAgICAgICAgICAgICBjYigpOwot ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgZmFpbDogX2ZhaWwK KyAgICAgICAgICAgIGNvbHVtbl9sYWJlbCA9IGMuZGlzcGxheV9uYW1lICsgJzxicj4nICsgY29s X3R5cGU7CisKKyAgICAgICAgICAgIHZhciBjb2wgPSB7CisgICAgICAgICAgICAgICduYW1lJzog Yy5uYW1lLAorICAgICAgICAgICAgICAnZGlzcGxheV9uYW1lJzogYy5kaXNwbGF5X25hbWUsCisg ICAgICAgICAgICAgICdjb2x1bW5fdHlwZSc6IGNvbF90eXBlLAorICAgICAgICAgICAgICAncG9z JzogYy5wb3MsCisgICAgICAgICAgICAgICdsYWJlbCc6IGNvbHVtbl9sYWJlbCwKKyAgICAgICAg ICAgICAgJ2NlbGwnOiBjb2xfY2VsbCwKKyAgICAgICAgICAgICAgJ2Nhbl9lZGl0Jzogc2VsZi5j YW5fZWRpdCwKKyAgICAgICAgICAgICAgJ3R5cGUnOiB0eXBlLAorICAgICAgICAgICAgICAnbm90 X251bGwnOiBjLm5vdF9udWxsLAorICAgICAgICAgICAgICAnaGFzX2RlZmF1bHRfdmFsJzogYy5o YXNfZGVmYXVsdF92YWwKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBjb2x1bW5zLnB1c2go Y29sKTsKICAgICAgICAgICB9KTsKKworICAgICAgICAgIHNlbGYuY29sdW1ucyA9IGNvbHVtbnM7 CisgICAgICAgICAgaWYgKGNiICYmIHR5cGVvZihjYikgPT0gJ2Z1bmN0aW9uJykgeworICAgICAg ICAgICAgY2IoKTsKKyAgICAgICAgICB9CiAgICAgICAgIH0sCiAKICAgICAgICAgLy8gVGhpcyBm dW5jdGlvbiBpcyB1c2VkIHRvIHJhaXNlIGFwcHJvcHJpYXRlIG1lc3NhZ2UuCkBAIC0xOTgwLDIy ICsyMDMxLDIxIEBAIGRlZmluZShbCiAKICAgICAgICAgICBzZWxmLmdyaWRWaWV3Lm1lc3NhZ2Vz X3BhbmVsLmZvY3VzKCk7CiAKLSAgICAgICAgICBpZiAoc2VsZi5pc19xdWVyeV90b29sKSB7Ci0g ICAgICAgICAgICBpZiAoY2xlYXJfZ3JpZCkgewotICAgICAgICAgICAgICAvLyBEZWxldGUgZ3Jp ZAotICAgICAgICAgICAgICBpZiAoc2VsZi5ncmlkVmlldy5oYW5kbGVyLnNsaWNrZ3JpZCkgewot ICAgICAgICAgICAgICAgIHNlbGYuZ3JpZFZpZXcuaGFuZGxlci5zbGlja2dyaWQuZGVzdHJveSgp OwotCi0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLy8gTWlzYyBjbGVhbmluZwotICAg ICAgICAgICAgICBzZWxmLmNvbHVtbnMgPSB1bmRlZmluZWQ7Ci0gICAgICAgICAgICAgIHNlbGYu Y29sbGVjdGlvbiA9IHVuZGVmaW5lZDsKKyAgICAgICAgICBpZiAoY2xlYXJfZ3JpZCkgeworICAg ICAgICAgICAgLy8gRGVsZXRlIGdyaWQKKyAgICAgICAgICAgIGlmIChzZWxmLmdyaWRWaWV3Lmhh bmRsZXIuc2xpY2tncmlkKSB7CisgICAgICAgICAgICAgIHNlbGYuZ3JpZFZpZXcuaGFuZGxlci5z bGlja2dyaWQuZGVzdHJveSgpOwogCi0gICAgICAgICAgICAgICQoJy5zcWwtZWRpdG9yLW1lc3Nh Z2UnKS50ZXh0KG1zZyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAkKCcu c3FsLWVkaXRvci1tZXNzYWdlJykuYXBwZW5kKG1zZyk7CiAgICAgICAgICAgICB9CisgICAgICAg ICAgICAvLyBNaXNjIGNsZWFuaW5nCisgICAgICAgICAgICBzZWxmLmNvbHVtbnMgPSB1bmRlZmlu ZWQ7CisgICAgICAgICAgICBzZWxmLmNvbGxlY3Rpb24gPSB1bmRlZmluZWQ7CisKKyAgICAgICAg ICAgICQoJy5zcWwtZWRpdG9yLW1lc3NhZ2UnKS50ZXh0KG1zZyk7CisgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICQoJy5zcWwtZWRpdG9yLW1lc3NhZ2UnKS5hcHBlbmQobXNnKTsKICAg ICAgICAgICB9CisKICAgICAgICAgICAvLyBTY3JvbGwgYXV0b21hdGljYWxseSB3aGVuIG1zZ3Mg YXBwZW5kcyB0byBlbGVtZW50CiAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAg ICAgICAgICAgJCgiLnNxbC1lZGl0b3ItbWVzc2FnZSIpLnNjcm9sbFRvcCgkKCIuc3FsLWVkaXRv ci1tZXNzYWdlIilbMF0uc2Nyb2xsSGVpZ2h0KTs7CkBAIC0yMDQ5LDcgKzIwOTksNyBAQCBkZWZp bmUoWwogCiAgICAgICAgIHJvd3NfdG9fZGVsZXRlOiBmdW5jdGlvbihkYXRhKSB7CiAgICAgICAg ICAgdmFyIHNlbGYgPSB0aGlzLAotICAgICAgICAgICAgdG1wX2tleXMgPSBzZWxmLmdldF9yb3df cHJpbWFyeV9rZXkuY2FsbChzZWxmKTsKKyAgICAgICAgICAgIHRtcF9rZXlzID0gc2VsZi5wcmlt YXJ5X2tleXM7CiAKICAgICAgICAgICAvLyByZS1jYWxjdWxhdGUgcm93cyB3aXRoIG5vIHByaW1h cnkga2V5cwogICAgICAgICAgIHNlbGYudGVtcF9uZXdfcm93cyA9IFtdOwpAQCAtMjA2Miw3ICsy MTEyLDYgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgc2VsZi50ZW1wX25ld19yb3dzLnB1c2go aWR4KTsKICAgICAgICAgICAgIH0KICAgICAgICAgICB9KTsKLSAgICAgICAgICBkYXRhLmdldEl0 ZW1NZXRhZGF0YSA9IHNlbGYuZGF0YV92aWV3LmdldEl0ZW1NZXRhZGF0YTsKICAgICAgICAgICBz ZWxmLnJvd3NfdG9fZGlzYWJsZSA9IF8uY2xvbmUoc2VsZi50ZW1wX25ld19yb3dzKTsKICAgICAg ICAgfSwKIApAQCAtMjA3Myw2OSArMjEyMiw3MyBAQCBkZWZpbmUoWwogICAgICAgICAgICAgICBp c19hZGRlZCA9IF8uc2l6ZShzZWxmLmRhdGFfc3RvcmUuYWRkZWQpLAogICAgICAgICAgICAgICBp c191cGRhdGVkID0gXy5zaXplKHNlbGYuZGF0YV9zdG9yZS51cGRhdGVkKTsKIAotICAgICAgICAg ICAgICAvLyBSZW1vdmUgbmV3bHkgYWRkZWQgcm93cyBmcm9tIHN0YWdlZCByb3dzIGFzIHdlIGRv bid0IHdhbnQgdG8gc2VuZCB0aGVtIG9uIHNlcnZlcgotICAgICAgICAgICAgICBpZihpc19hZGRl ZCkgewotICAgICAgICAgICAgICAgICAgXy5lYWNoKHNlbGYuZGF0YV9zdG9yZS5hZGRlZCwgZnVu Y3Rpb24odmFsLCBrZXkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYoa2V5IGluIHNlbGYuZGF0 YV9zdG9yZS5zdGFnZWRfcm93cykgewotICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0 aGUgcm93IGZyb20gZGF0YSBzdG9yZSBzbyB0aGF0IHdlIGRvIG5vdCBzZW5kIGl0IG9uIHNlcnZl cgotICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZWRfa2V5cy5wdXNoKGtleSk7Ci0gICAgICAg ICAgICAgICAgICAgICAgZGVsZXRlIHNlbGYuZGF0YV9zdG9yZS5zdGFnZWRfcm93c1trZXldOwot ICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmLmRhdGFfc3RvcmUuYWRkZWRba2V5XQot ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAv LyBSZW1vdmUgbmV3bHkgYWRkZWQgcm93cyBmcm9tIHN0YWdlZCByb3dzIGFzIHdlIGRvbid0IHdh bnQgdG8gc2VuZCB0aGVtIG9uIHNlcnZlcgorICAgICAgICAgIGlmKGlzX2FkZGVkKSB7CisgICAg ICAgICAgICBfLmVhY2goc2VsZi5kYXRhX3N0b3JlLmFkZGVkLCBmdW5jdGlvbih2YWwsIGtleSkg eworICAgICAgICAgICAgICBpZihrZXkgaW4gc2VsZi5kYXRhX3N0b3JlLnN0YWdlZF9yb3dzKSB7 CisgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSByb3cgZnJvbSBkYXRhIHN0b3JlIHNvIHRo YXQgd2UgZG8gbm90IHNlbmQgaXQgb24gc2VydmVyCisgICAgICAgICAgICAgICAgZGVsZXRlZF9r ZXlzLnB1c2goa2V5KTsKKyAgICAgICAgICAgICAgICBkZWxldGUgc2VsZi5kYXRhX3N0b3JlLnN0 YWdlZF9yb3dzW2tleV07CisgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGYuZGF0YV9zdG9yZS5h ZGRlZFtrZXldOworICAgICAgICAgICAgICAgIGRlbGV0ZSBzZWxmLmRhdGFfc3RvcmUuYWRkZWRf aW5kZXhba2V5XTsKICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIC8vIElmIG9ubHkg bmV3bHkgcm93cyB0byBkZWxldGUgYW5kIG5vIGRhdGEgaXMgdGhlcmUgdG8gc2VuZCBvbiBzZXJ2 ZXIKLSAgICAgICAgICAgICAgLy8gdGhlbiBqdXN0IHJlLXJlbmRlciB0aGUgZ3JpZAotICAgICAg ICAgICAgICBpZihfLnNpemUoc2VsZi5kYXRhX3N0b3JlLnN0YWdlZF9yb3dzKSA9PSAwKSB7Ci0g ICAgICAgICAgICAgICAgdmFyIGdyaWQgPSBzZWxmLnNsaWNrZ3JpZCwgZGF0YSA9IGdyaWQuZ2V0 RGF0YSgpLCBpZHggPSAwOwotICAgICAgICAgICAgICAgICAgaWYoZGVsZXRlZF9rZXlzLmxlbmd0 aCl7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBuZXcgcm93cyBmcm9tIGdyaWQgZGF0 YSB1c2luZyBkZWxldGVkIGtleXMKLSAgICAgICAgICAgICAgICAgICBkYXRhID0gXy5yZWplY3Qo ZGF0YSwgZnVuY3Rpb24oZCl7Ci0gICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGQgJiYgXy5p bmRleE9mKGRlbGV0ZWRfa2V5cywgZC5fX3RlbXBfUEspID4gLTEpCi0gICAgICAgICAgICAgICAg ICAgfSk7Ci0gICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBzZWxmLnJvd3Nf dG9fZGVsZXRlLmFwcGx5KHNlbGYsIFtkYXRhXSk7Ci0gICAgICAgICAgICAgICAgICBncmlkLnJl c2V0QWN0aXZlQ2VsbCgpOwotICAgICAgICAgICAgICAgICAgZ3JpZC5zZXREYXRhKGRhdGEsIHRy dWUpOwotICAgICAgICAgICAgICAgICAgZ3JpZC5zZXRTZWxlY3RlZFJvd3MoW10pOwotICAgICAg ICAgICAgICAgICAgZ3JpZC5pbnZhbGlkYXRlKCk7Ci0gICAgICAgICAgICAgICAgICAvLyBOb3Ro aW5nIHRvIGNvcHkgb3IgZGVsZXRlIGhlcmUKLSAgICAgICAgICAgICAgICAgICQoIiNidG4tZGVs ZXRlLXJvdyIpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAkKCIj YnRuLWNvcHktcm93IikucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKLSAgICAgICAgICAgICAgICAg IGlmKF8uc2l6ZShzZWxmLmRhdGFfc3RvcmUuYWRkZWQpIHx8IGlzX3VwZGF0ZWQpIHsKLSAgICAg ICAgICAgICAgICAgICAgLy8gRG8gbm90IGRpc2FibGUgc2F2ZSBidXR0b24gaWYgdGhlcmUgYXJl Ci0gICAgICAgICAgICAgICAgICAgIC8vIGFueSBvdGhlciBjaGFuZ2VzIHByZXNlbnQgaW4gZ3Jp ZCBkYXRhCi0gICAgICAgICAgICAgICAgICAgICQoIiNidG4tc2F2ZSIpLnByb3AoJ2Rpc2FibGVk JywgZmFsc2UpOwotICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAg ICAgJCgiI2J0bi1zYXZlIikucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKLSAgICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LnN1Y2Nlc3MoZ2V0dGV4dCgiUm93KHMp IGRlbGV0ZWQiKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9CisgICAgICAgICAgLy8g SWYgb25seSBuZXdseSByb3dzIHRvIGRlbGV0ZSBhbmQgbm8gZGF0YSBpcyB0aGVyZSB0byBzZW5k IG9uIHNlcnZlcgorICAgICAgICAgIC8vIHRoZW4ganVzdCByZS1yZW5kZXIgdGhlIGdyaWQKKyAg ICAgICAgICBpZihfLnNpemUoc2VsZi5kYXRhX3N0b3JlLnN0YWdlZF9yb3dzKSA9PSAwKSB7Cisg ICAgICAgICAgICAgIHZhciBncmlkID0gc2VsZi5zbGlja2dyaWQsCisgICAgICAgICAgICAgIGRh dGFWaWV3ID0gZ3JpZC5nZXREYXRhKCksCisgICAgICAgICAgICAgIGRhdGEgPSBkYXRhVmlldy5n ZXRJdGVtcygpLAorICAgICAgICAgICAgICBpZHggPSAwOworCisgICAgICAgICAgICAgIGdyaWQu cmVzZXRBY3RpdmVDZWxsKCk7CisKKyAgICAgICAgICAgICAgZGF0YVZpZXcuYmVnaW5VcGRhdGUo KTsKKyAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkZWxldGVkX2tleXMubGVuZ3Ro OyBpKyspIHsKKyAgICAgICAgICAgICAgICBkYXRhVmlldy5kZWxldGVJdGVtKGRlbGV0ZWRfa2V5 c1tpXSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZGF0YVZpZXcuZW5kVXBkYXRl KCk7CisgICAgICAgICAgICAgIHNlbGYucm93c190b19kZWxldGUuYXBwbHkoc2VsZiwgW2RhdGFW aWV3LmdldEl0ZW1zKCldKTsKKyAgICAgICAgICAgICAgZ3JpZC5yZXNldEFjdGl2ZUNlbGwoKTsK KyAgICAgICAgICAgICAgZ3JpZC5zZXRTZWxlY3RlZFJvd3MoW10pOworICAgICAgICAgICAgICBn cmlkLmludmFsaWRhdGUoKTsKKworICAgICAgICAgICAgICAvLyBOb3RoaW5nIHRvIGNvcHkgb3Ig ZGVsZXRlIGhlcmUKKyAgICAgICAgICAgICAgJCgiI2J0bi1kZWxldGUtcm93IikucHJvcCgnZGlz YWJsZWQnLCB0cnVlKTsKKyAgICAgICAgICAgICAgJCgiI2J0bi1jb3B5LXJvdyIpLnByb3AoJ2Rp c2FibGVkJywgdHJ1ZSk7CisgICAgICAgICAgICAgIGlmKF8uc2l6ZShzZWxmLmRhdGFfc3RvcmUu YWRkZWQpIHx8IGlzX3VwZGF0ZWQpIHsKKyAgICAgICAgICAgICAgICAvLyBEbyBub3QgZGlzYWJs ZSBzYXZlIGJ1dHRvbiBpZiB0aGVyZSBhcmUKKyAgICAgICAgICAgICAgICAvLyBhbnkgb3RoZXIg Y2hhbmdlcyBwcmVzZW50IGluIGdyaWQgZGF0YQorICAgICAgICAgICAgICAgICQoIiNidG4tc2F2 ZSIpLnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpOwogICAgICAgICAgICAgICB9IGVsc2UgewotICAg ICAgICAgICAgICAgIC8vIFRoZXJlIGFyZSBvdGhlciBkYXRhIHRvIG5lZWRzIHRvIGJlIHVwZGF0 ZWQgb24gc2VydmVyCi0gICAgICAgICAgICAgICAgaWYoaXNfdXBkYXRlZCkgewotICAgICAgICAg ICAgICAgICAgYWxlcnRpZnkuYWxlcnQoZ2V0dGV4dCgiT3BlcmF0aW9uIGZhaWxlZCIpLAorICAg ICAgICAgICAgICAgICQoIiNidG4tc2F2ZSIpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgYWxlcnRpZnkuc3VjY2VzcyhnZXR0ZXh0KCJSb3co cykgZGVsZXRlZCIpKTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhlcmUg YXJlIG90aGVyIGRhdGEgdG8gbmVlZHMgdG8gYmUgdXBkYXRlZCBvbiBzZXJ2ZXIKKyAgICAgICAg ICAgIGlmKGlzX3VwZGF0ZWQpIHsKKyAgICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoZ2V0dGV4 dCgiT3BlcmF0aW9uIGZhaWxlZCIpLAogICAgICAgICAgICAgICAgICAgICBnZXR0ZXh0KCJUaGVy ZSBhcmUgdW5zYXZlZCBjaGFuZ2VzIGluIGdyaWQsIFBsZWFzZSBzYXZlIHRoZW0gZmlyc3QgdG8g YXZvaWQgaW5jb25zaXN0ZW5jeSBpbiBkYXRhIikKICAgICAgICAgICAgICAgICAgICk7Ci0gICAg ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg IGFsZXJ0aWZ5LmNvbmZpcm0oZ2V0dGV4dCgiRGVsZXRlIFJvdyhzKSIpLAorICAgICAgICAgICAg ICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhbGVydGlmeS5jb25maXJtKGdl dHRleHQoIkRlbGV0ZSBSb3cocykiKSwKICAgICAgICAgICAgICAgICAgIGdldHRleHQoIkFyZSB5 b3Ugc3VyZSB5b3Ugd2lzaCB0byBkZWxldGUgc2VsZWN0ZWQgcm93KHMpPyIpLAotICAgICAgICAg ICAgICAgICAgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgICAgICAgICQoIiNidG4tZGVsZXRl LXJvdyIpLnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgICQoIiNi dG4tY29weS1yb3ciKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOwotICAgICAgICAgICAgICAgICAg ICAvLyBDaGFuZ2UgdGhlIHN0YXRlCi0gICAgICAgICAgICAgICAgICAgIHNlbGYuZGF0YV9zdG9y ZS5kZWxldGVkID0gc2VsZi5kYXRhX3N0b3JlLnN0YWdlZF9yb3dzOwotICAgICAgICAgICAgICAg ICAgICBzZWxmLmRhdGFfc3RvcmUuc3RhZ2VkX3Jvd3MgPSB7fTsKLSAgICAgICAgICAgICAgICAg ICAgLy8gU2F2ZSB0aGUgY2hhbmdlcyBvbiBzZXJ2ZXIKLSAgICAgICAgICAgICAgICAgICAgc2Vs Zi5fc2F2ZSgpOwotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgIGZ1bmN0 aW9uKCkgewotICAgICAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nIGFzIHVzZXIgY2FuY2Vs ZWQgdGhlIG9wZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAp LnNldCgnbGFiZWxzJywge29rOidZZXMnLCBjYW5jZWw6J05vJ30pOworICAgICAgICAgICAgICBm dW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAkKCIjYnRuLWRlbGV0ZS1yb3ciKS5wcm9wKCdk aXNhYmxlZCcsIHRydWUpOworICAgICAgICAgICAgICAgICQoIiNidG4tY29weS1yb3ciKS5wcm9w KCdkaXNhYmxlZCcsIHRydWUpOworICAgICAgICAgICAgICAgIC8vIENoYW5nZSB0aGUgc3RhdGUK KyAgICAgICAgICAgICAgICBzZWxmLmRhdGFfc3RvcmUuZGVsZXRlZCA9IHNlbGYuZGF0YV9zdG9y ZS5zdGFnZWRfcm93czsKKyAgICAgICAgICAgICAgICBzZWxmLmRhdGFfc3RvcmUuc3RhZ2VkX3Jv d3MgPSB7fTsKKyAgICAgICAgICAgICAgICAvLyBTYXZlIHRoZSBjaGFuZ2VzIG9uIHNlcnZlcgor ICAgICAgICAgICAgICAgIHNlbGYuX3NhdmUoKTsKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAg ICAgICAgZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgLy8gRG8gbm90aGluZyBhcyB1c2Vy IGNhbmNlbGVkIHRoZSBvcGVyYXRpb24uCiAgICAgICAgICAgICAgIH0KLQorICAgICAgICAgICAg KS5zZXQoJ2xhYmVscycsIHtvazogZ2V0dGV4dCgiWWVzIiksIGNhbmNlbDpnZXR0ZXh0KCJObyIp fSk7CisgICAgICAgICAgfQogICAgICAgICB9LAogCiAgICAgICAgIC8qIFRoaXMgZnVuY3Rpb24g d2lsbCBmZXRjaCB0aGUgbGlzdCBvZiBjaGFuZ2VkIG1vZGVscyBhbmQgbWFrZQpAQCAtMjE5Nyw3 ICsyMjUwLDkgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnko cmVxX2RhdGEpLAogICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKICAgICAg ICAgICAgICAgICB2YXIgZ3JpZCA9IHNlbGYuc2xpY2tncmlkLAotICAgICAgICAgICAgICAgICAg ZGF0YSA9IGdyaWQuZ2V0RGF0YSgpOworICAgICAgICAgICAgICAgICAgICBkYXRhVmlldyA9IGdy aWQuZ2V0RGF0YSgpLAorICAgICAgICAgICAgICAgICAgICBkYXRhX2xlbmd0aCA9IGRhdGFWaWV3 LmdldExlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICBkYXRhID0gW107CiAgICAgICAgICAg ICAgICAgaWYgKHJlcy5kYXRhLnN0YXR1cykgewogICAgICAgICAgICAgICAgICAgICAvLyBSZW1v dmUgZmxhZyBpc19yb3dfY29waWVkIGZyb20gY29waWVkIHJvd3MKICAgICAgICAgICAgICAgICAg ICAgXy5lYWNoKGRhdGEsIGZ1bmN0aW9uKHJvdywgaWR4KSB7CkBAIC0yMjE0LDIyICsyMjY5LDIw IEBAIGRlZmluZShbCiAgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBkZWxldGVkIHJvd3Mg ZnJvbSBjbGllbnQgYXMgd2VsbAogICAgICAgICAgICAgICAgICAgICBpZihpc19kZWxldGVkKSB7 CiAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJvd3MgPSBncmlkLmdldFNlbGVjdGVkUm93cygp OwotICAgICAgICAgICAgICAgICAgICAgIC8qIEluIEphdmFTY3JpcHQgc29ydGluZyBieSBkZWZh dWx0IGlzIGxleGljYWwsCi0gICAgICAgICAgICAgICAgICAgICAgICogVG8gbWFrZSBzb3J0aW5n IG51bWVyaWNhbCB3ZSBuZWVkIHRvIHBhc3MgZnVuY3Rpb24KLSAgICAgICAgICAgICAgICAgICAg ICAgKiBBZnRlciB0aGF0IHdlIHdpbGwgUmV2ZXJzZSB0aGUgb3JkZXIgb2Ygc29ydGVkIGFycmF5 Ci0gICAgICAgICAgICAgICAgICAgICAgICogc28gdGhhdCB3aGVuIHdlIHJlbW92ZSBpdCBkb2Vz IG5vdCBhZmZlY3QgYXJyYXkgaW5kZXgKLSAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAg ICAgICAgICAgICAgICAgICBpZihkYXRhLmxlbmd0aCA9PSByb3dzLmxlbmd0aCkgeworICAgICAg ICAgICAgICAgICAgICAgIGlmKGRhdGFfbGVuZ3RoID09IHJvd3MubGVuZ3RoKSB7CiAgICAgICAg ICAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zIGFsbCB0aGUgcm93cyBhcmUgc2VsZWN0ZWQs IGNsZWFyIGFsbCBkYXRhCiAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gW107CisgICAg ICAgICAgICAgICAgICAgICAgICBkYXRhVmlldy5zZXRJdGVtcyhkYXRhLCBzZWxmLmNsaWVudF9w cmltYXJ5X2tleSk7CiAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHJvd3MgPSByb3dzLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSAtIGJ9 KS5yZXZlcnNlKCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByb3dzLmZvckVhY2goZnVuY3Rp b24oaWR4KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuc3BsaWNlKGlkeCwgMSk7 Ci0gICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRh dGFWaWV3LmJlZ2luVXBkYXRlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBp ID0gMDsgaSA8IHJvd3MubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg aXRlbSA9IGdyaWQuZ2V0RGF0YUl0ZW0ocm93c1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgIGRhdGEucHVzaChpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVZpZXcu ZGVsZXRlSXRlbShpdGVtW3NlbGYuY2xpZW50X3ByaW1hcnlfa2V5XSk7CisgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVmlldy5lbmRVcGRhdGUo KTsKICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5y b3dzX3RvX2RlbGV0ZS5hcHBseShzZWxmLCBbZGF0YV0pOwotICAgICAgICAgICAgICAgICAgICAg IGdyaWQuc2V0RGF0YShkYXRhLCB0cnVlKTsKICAgICAgICAgICAgICAgICAgICAgICBncmlkLnNl dFNlbGVjdGVkUm93cyhbXSk7CiAgICAgICAgICAgICAgICAgICAgIH0KIApAQCAtMjI0Miw2ICsy Mjk1LDcgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yb3dzX3RvX2Rp c2FibGUgPSBfLmNsb25lKHNlbGYudGVtcF9uZXdfcm93cyk7CiAgICAgICAgICAgICAgICAgICAg IH0KIAorICAgICAgICAgICAgICAgICAgICBncmlkLnNldFNlbGVjdGVkUm93cyhbXSk7CiAgICAg ICAgICAgICAgICAgICAgIC8vIFJlc2V0IGRhdGEgc3RvcmUKICAgICAgICAgICAgICAgICAgICAg c2VsZi5kYXRhX3N0b3JlID0gewogICAgICAgICAgICAgICAgICAgICAgICdhZGRlZCc6IHt9LApA QCAtMjI2Miw3ICsyMzE2LDcgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgICAgICQoJy5zcWwt ZWRpdG9yLW1lc3NhZ2UnKS50ZXh0KHJlcy5kYXRhLnJlc3VsdCk7CiAgICAgICAgICAgICAgICAg ICB2YXIgZXJyX21zZyA9IFMoZ2V0dGV4dCgiJXMuIikpLnNwcmludGYocmVzLmRhdGEucmVzdWx0 KS52YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgYWxlcnRpZnkubm90aWZ5KGVycl9tc2csICdl cnJvcicsIDIwKTsKLQorICAgICAgICAgICAgICAgICAgZ3JpZC5zZXRTZWxlY3RlZFJvd3MoW10p OwogICAgICAgICAgICAgICAgICAgLy8gVG8gaGlnaGxpZ2h0IHRoZSByb3cgYXQgZmF1bHQKICAg ICAgICAgICAgICAgICAgIGlmKF8uaGFzKHJlcy5kYXRhLCAnX3Jvd2lkJykgJiYKICAgICAgICAg ICAgICAgICAgICAgICAoIV8uaXNVbmRlZmluZWQocmVzLmRhdGEuX3Jvd2lkKXx8ICFfLmlzTnVs bChyZXMuZGF0YS5fcm93aWQpKSkgewpAQCAtMjMxOCwxNCArMjM3MiwyMSBAQCBkZWZpbmUoWwog CiAgICAgICAgIC8vIEZpbmQgaW5kZXggb2Ygcm93IGF0IGZhdWx0IGZyb20gZ3JpZCBkYXRhCiAg ICAgICAgIF9maW5kX3Jvd2luZGV4OiBmdW5jdGlvbihyb3dpZCkgewotICAgICAgICAgIHZhciBz ZWxmID0gdGhpczsKLSAgICAgICAgICB2YXIgZ3JpZCA9IHNlbGYuc2xpY2tncmlkLAotICAgICAg ICAgICAgZGF0YSA9IGdyaWQuZ2V0RGF0YSgpLCBfcm93aWQsIGNvdW50ID0gMCwgX2lkeCA9IC0x OworICAgICAgICAgIHZhciBzZWxmID0gdGhpcywKKyAgICAgICAgICAgIGdyaWQgPSBzZWxmLnNs aWNrZ3JpZCwKKyAgICAgICAgICAgIGRhdGFWaWV3ID0gZ3JpZC5nZXREYXRhKCksCisgICAgICAg ICAgICBkYXRhID0gZGF0YVZpZXcuZ2V0SXRlbXMoKSwKKyAgICAgICAgICAgIF9yb3dpZCwKKyAg ICAgICAgICAgIGNvdW50ID0gMCwKKyAgICAgICAgICAgIF9pZHggPSAtMTsKKwogICAgICAgICAg IC8vIElmIF9yb3dpZCBpcyBvYmplY3QgdGhlbiBpdCdzIHVwZGF0ZS9kZWxldGUgb3BlcmF0aW9u CiAgICAgICAgICAgaWYoXy5pc09iamVjdChyb3dpZCkpIHsKICAgICAgICAgICAgICAgX3Jvd2lk ID0gcm93aWQ7Ci0gICAgICAgICAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKHJvd2lkKSkgeyAvLyBJ bnNlcnQgb3ByYXRpb24KLSAgICAgICAgICAgIF9yb3dpZCA9IHsgJ19fdGVtcF9QSyc6IHJvd2lk IH07CisgICAgICAgICAgfSBlbHNlIGlmIChfLmlzU3RyaW5nKHJvd2lkKSkgeyAvLyBJbnNlcnQg b3BlcmF0aW9uCisgICAgICAgICAgICB2YXIgcm93aWQgPSB7fTsKKyAgICAgICAgICAgIHJvd2lk W3NlbGYuY2xpZW50X3ByaW1hcnlfa2V5XT0gcm93aWQ7CisgICAgICAgICAgICBfcm93aWQgPSBy b3dpZDsKICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gU29tZXRoaW5nIGlzIHdy b25nIHdpdGggdW5pcXVlIGlkCiAgICAgICAgICAgICByZXR1cm4gX2lkeDsKQEAgLTI1NDcsMTEg KzI2MDgsNiBAQCBkZWZpbmUoWwogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0IHRo ZSByZXF1aXJlZCBmbGFnIGZvciBwb2xsaW5nIHJlc3BvbnNlIGRhdGEKICAgICAgICAgX2luaXRf cG9sbGluZ19mbGFnczogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwot ICAgICAgICAgIC8vIFNldCBhIGZsYWcgdG8gZ2V0IGNvbHVtbnMKLSAgICAgICAgICBzZWxmLkZF VENIX0NPTFVNTlNfRlJPTV9TRVJWRVIgPSB0cnVlOwotICAgICAgICAgIC8vIFdlIHdpbGwgc2V0 IGNvbHVtbnMgZGF0YSBpbiB0aGlzIHZhcmlhYmxlIGZvciBmdXR1cmUgdXNlIG9uY2Ugd2UgZmV0 Y2ggaXQKLSAgICAgICAgICAvLyBmcm9tIHNlcnZlcgotICAgICAgICAgIHNlbGYuQ09MVU1OU19E QVRBID0ge307CiAKICAgICAgICAgICAvLyBUbyBnZXQgYSB0aW1lb3V0IGZvciBwb2xsaW5nIGZh bGxiYWNrIHRpbWVyIGluIHNlY29uZHMgaW4KICAgICAgICAgICAvLyByZWdhcmRzIHRvIGVsYXBz ZWQgdGltZQpAQCAtMjY0Nyw3ICsyNzAzLDcgQEAgZGVmaW5lKFsKICAgICAgICAgICAgIHJldHVy bjsKIAogICAgICAgICAgIC8vIEFkZCBjb2x1bW4gcG9zaXRpb24gYW5kIGl0J3MgdmFsdWUgdG8g ZGF0YQotICAgICAgICAgIGRhdGFbY29sdW1uX2luZm8uZmllbGRdID0gX3ZhbHVlc1tjb2x1bW5f aW5mby5wb3NdIHx8ICcnOworICAgICAgICAgIGRhdGFbY29sdW1uX2luZm8uZmllbGRdID0gX3Zh bHVlc1tjb2x1bW5faW5mby5maWVsZF0gfHwgJyc7CiAKICAgICAgICAgICBzZWxmLnRyaWdnZXIo CiAgICAgICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6bG9hZGluZy1pY29uOnNob3cnLApAQCAt MjcxNyw3ICsyNzczLDcgQEAgZGVmaW5lKFsKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg ICAgIC8vIEFkZCBjb2x1bW4gcG9zaXRpb24gYW5kIGl0J3MgdmFsdWUgdG8gZGF0YQotICAgICAg ICAgIGRhdGFbY29sdW1uX2luZm8uZmllbGRdID0gX3ZhbHVlc1tjb2x1bW5faW5mby5wb3NdIHx8 ICcnOworICAgICAgICAgIGRhdGFbY29sdW1uX2luZm8uZmllbGRdID0gX3ZhbHVlc1tjb2x1bW5f aW5mby5maWVsZF0gfHwgJyc7CiAKICAgICAgICAgICBzZWxmLnRyaWdnZXIoCiAgICAgICAgICAg ICAncGdhZG1pbi1zcWxlZGl0b3I6bG9hZGluZy1pY29uOnNob3cnLApAQCAtMjg4MCwxNiArMjkz NiwxOCBAQCBkZWZpbmUoWwogICAgICAgICBfcGFzdGVfcm93OiBmdW5jdGlvbigpIHsKICAgICAg ICAgICB2YXIgc2VsZiA9IHRoaXMsIGNvbF9pbmZvID0ge30sCiAgICAgICAgICAgICBncmlkID0g c2VsZi5zbGlja2dyaWQsCi0gICAgICAgICAgICBkYXRhID0gZ3JpZC5nZXREYXRhKCksCi0gICAg ICAgICAgICBjb3VudCA9IE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aC0xOwotCi0gICAgICAgICAg dmFyIHJvd3MgPSBncmlkLmdldFNlbGVjdGVkUm93cygpLnNvcnQoCisgICAgICAgICAgICBkYXRh VmlldyA9IGdyaWQuZ2V0RGF0YSgpLAorICAgICAgICAgICAgZGF0YSA9IGRhdGFWaWV3LmdldEl0 ZW1zKCksCisgICAgICAgICAgICBjb3VudCA9IGRhdGFWaWV3LmdldExlbmd0aCgpLAorICAgICAg ICAgICAgcm93cyA9IGdyaWQuZ2V0U2VsZWN0ZWRSb3dzKCkuc29ydCgKICAgICAgICAgICAgICAg ZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgLSBiOyB9CiAgICAgICAgICAgICApLAotICAgICAg ICAgICAgcm93cyA9IHJvd3MubGVuZ3RoID09IDAgPyBzZWxmLmxhc3RfY29waWVkX3Jvd3MgOiBy b3dzLAogICAgICAgICAgICAgY29waWVkX3Jvd3MgPSByb3dzLm1hcChmdW5jdGlvbiAocm93SW5k ZXgpIHsKICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFbcm93SW5kZXhdOwogICAgICAgICAgICAg fSk7CisKKyAgICAgICAgICAgIHJvd3MgPSByb3dzLmxlbmd0aCA9PSAwID8gc2VsZi5sYXN0X2Nv cGllZF9yb3dzIDogcm93cworCiAgICAgICAgICAgICBzZWxmLmxhc3RfY29waWVkX3Jvd3MgPSBy b3dzOwogCiAgICAgICAgICAgICAvLyBJZiB0aGVyZSBhcmUgcm93cyB0byBwYXN0ZT8KQEAgLTI5 MjIsMjIgKzI5ODAsMjIgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgLy8gQWRkIGluZGV4IG9m IGNvcGllZCByb3cgaW50byB0ZW1wX25ld19yb3dzCiAgICAgICAgICAgICAgIC8vIFRyaWdnZXIg Z3JpZC5vbkFkZE5ld1JvdyB3aGVuIGEgcm93IGlzIGNvcGllZAogICAgICAgICAgICAgICAvLyBS ZXNldCBzZWxlY3Rpb24KKworICAgICAgICAgICAgICBkYXRhVmlldy5iZWdpblVwZGF0ZSgpOwog ICAgICAgICAgICAgICBfLmVhY2goY29waWVkX3Jvd3MsIGZ1bmN0aW9uKHJvdykgewotICAgICAg ICAgICAgICAgICAgdmFyIG5ld19yb3cgPSBhcnJfdG9fb2JqZWN0KHJvdyk7CisgICAgICAgICAg ICAgICAgICB2YXIgbmV3X3JvdyA9IGFycl90b19vYmplY3Qocm93KSwKKyAgICAgICAgICAgICAg ICAgIF9rZXkgPSAoc2VsZi5ncmlkVmlldy5jbGllbnRfcHJpbWFyeV9rZXlfY291bnRlcisrKS50 b1N0cmluZygpOwogICAgICAgICAgICAgICAgICAgbmV3X3Jvdy5pc19yb3dfY29waWVkID0gdHJ1 ZTsKLSAgICAgICAgICAgICAgICAgIHJvdyA9IG5ld19yb3c7CiAgICAgICAgICAgICAgICAgICBz ZWxmLnRlbXBfbmV3X3Jvd3MucHVzaChjb3VudCk7Ci0gICAgICAgICAgICAgICAgICBncmlkLm9u QWRkTmV3Um93Lm5vdGlmeSgKLSAgICAgICAgICAgICAgICAgICAgeyBpdGVtOiBuZXdfcm93LAot ICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbjogc2VsZi5jb2x1bW5zWzBdLAotICAgICAgICAg ICAgICAgICAgICAgIGdyaWQ6IGdyaWQsCi0gICAgICAgICAgICAgICAgICAgICAgaXNfY29weV9y b3c6IHRydWUKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgKQorICAg ICAgICAgICAgICAgICAgbmV3X3Jvd1tzZWxmLmNsaWVudF9wcmltYXJ5X2tleV0gPSBfa2V5Owor ICAgICAgICAgICAgICAgICAgZGF0YVZpZXcuYWRkSXRlbShuZXdfcm93KTsKKyAgICAgICAgICAg ICAgICAgIHNlbGYuZGF0YV9zdG9yZS5hZGRlZFtfa2V5XSA9IHsnZXJyJzogZmFsc2UsICdkYXRh JzogbmV3X3Jvd307CisgICAgICAgICAgICAgICAgICBzZWxmLmRhdGFfc3RvcmUuYWRkZWRfaW5k ZXhbY291bnRdID0gX2tleTsKICAgICAgICAgICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgICAg ICAgIH0pOwotICAgICAgICAgICAgICAvLyBBZGQgYSBibGFuayByb3cgYWZ0ZXIgY29weS9wYXN0 ZSByb3cKLSAgICAgICAgICAgICAgZ3JpZC5hZGRCbGFua1JvdygpOworICAgICAgICAgICAgICBk YXRhVmlldy5lbmRVcGRhdGUoKTsKKyAgICAgICAgICAgICAgZ3JpZC51cGRhdGVSb3dDb3VudCgp OworICAgICAgICAgICAgICBncmlkLnJlbmRlcigpOwogICAgICAgICAgICAgICBncmlkLnNldFNl bGVjdGVkUm93cyhbXSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0sCkBAIC0zMDA5LDYgKzMw NjcsOSBAQCBkZWZpbmUoWwogICAgICAgICAgICAgICBzcWwgPSAnJywKICAgICAgICAgICAgICAg aGlzdG9yeV9tc2cgPSAnJzsKIAorICAgICAgICAgIHNlbGYuaGFzX21vcmVfcm93cyA9IGZhbHNl OworICAgICAgICAgIHNlbGYuZmV0Y2hpbmdfcm93cyA9IGZhbHNlOworCiAgICAgICAgICAgLyog SWYgY29kZSBpcyBzZWxlY3RlZCBpbiB0aGUgY29kZSBtaXJyb3IgdGhlbiBleGVjdXRlCiAgICAg ICAgICAgICogdGhlIHNlbGVjdGVkIHBhcnQgZWxzZSBleGVjdXRlIHRoZSBjb21wbGV0ZSBjb2Rl LgogICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL2Fi c3RyYWN0LnB5IGIvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL2Fic3RyYWN0LnB5CmluZGV4IDli MjM2M2MuLjdkYjNlMzcgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3V0aWxzL2RyaXZlci9hYnN0 cmFjdC5weQorKysgYi93ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvYWJzdHJhY3QucHkKQEAgLTEw MSw2ICsxMDEsMTIgQEAgY2xhc3MgQmFzZUNvbm5lY3Rpb24ob2JqZWN0KToKICAgICAgIC0gSW1w bGVtZW50IHRoaXMgbWV0aG9kIHRvIGV4ZWN1dGUgdGhlIGdpdmVuIHF1ZXJ5IGFuZCByZXR1cm5z IHRoZSByZXN1bHQKICAgICAgICAgYXMgYW4gYXJyYXkgb2YgZGljdCAoY29sdW1uIG5hbWUgLT4g dmFsdWUpIGZvcm1hdC4KIAorICAgICogZGVmIGFzeW5jX2ZldGNobWFueV8yZGFycmF5KHJlY29y ZHM9LTEsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnPUZhbHNlKToKKyAgICAgIC0gSW1wbGVtZW50 IHRoaXMgbWV0aG9kIHRvIHJldHJpZXZlIHJlc3VsdCBvZiBhc3luY2hyb25vdXMgY29ubmVjdGlv biBhbmQKKyAgICAgICAgcG9sbGluZyB3aXRoIG5vX3Jlc3VsdCBmbGFnIHNldCB0byBUcnVlLgor ICAgICAgICBUaGlzIHJldHVybnMgdGhlIHJlc3VsdCBhcyBhIDIgZGltZW5zaW9uYWwgYXJyYXku CisgICAgICAgIElmIHJlY29yZHMgaXMgLTEgdGhlbiBmZXRjaG1hbnkgd2lsbCBiZWhhdmUgYXMg ZmV0Y2hhbGwuCisKICAgICAqIGNvbm5lY3RlZCgpCiAgICAgICAtIEltcGxlbWVudCB0aGlzIG1l dGhvZCB0byBnZXQgdGhlIHN0YXR1cyBvZiB0aGUgY29ubmVjdGlvbi4gSXQgc2hvdWxkCiAgICAg ICAgIHJldHVybiBUcnVlIGZvciBjb25uZWN0ZWQsIG90aGVyd2lzZSBGYWxzZQpAQCAtMTMzLDcg KzEzOSw3IEBAIGNsYXNzIEJhc2VDb25uZWN0aW9uKG9iamVjdCk6CiAgICAgICAtIEltcGxlbWVu dCB0aGlzIG1ldGhvZCB0byB3YWl0IGZvciBhc3luY2hyb25vdXMgY29ubmVjdGlvbiB3aXRoIHRp bWVvdXQuCiAgICAgICAgIFRoaXMgbXVzdCBiZSBhIG5vbiBibG9ja2luZyBjYWxsLgogCi0gICAg KiBwb2xsKGZvcm1hdHRlZF9leGNlcHRpb25fbXNnKQorICAgICogcG9sbChmb3JtYXR0ZWRfZXhj ZXB0aW9uX21zZywgbm9fcmVzdWx0KQogICAgICAgLSBJbXBsZW1lbnQgdGhpcyBtZXRob2QgdG8g cG9sbCB0aGUgZGF0YSBvZiBxdWVyeSBydW5uaW5nIG9uIGFzeW5jaHJvbm91cwogICAgICAgICBj b25uZWN0aW9uLgogCkBAIC0xODAsNiArMTg2LDEwIEBAIGNsYXNzIEJhc2VDb25uZWN0aW9uKG9i amVjdCk6CiAgICAgICAgIHBhc3MKIAogICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBhc3lu Y19mZXRjaG1hbnlfMmRhcnJheShzZWxmLCByZWNvcmRzPS0xLCBmb3JtYXR0ZWRfZXhjZXB0aW9u X21zZz1GYWxzZSk6CisgICAgICAgIHBhc3MKKworICAgIEBhYnN0cmFjdG1ldGhvZAogICAgIGRl ZiBjb25uZWN0ZWQoc2VsZik6CiAgICAgICAgIHBhc3MKIApAQCAtMjA4LDcgKzIxOCw3IEBAIGNs YXNzIEJhc2VDb25uZWN0aW9uKG9iamVjdCk6CiAgICAgICAgIHBhc3MKIAogICAgIEBhYnN0cmFj dG1ldGhvZAotICAgIGRlZiBwb2xsKHNlbGYsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnPVRydWUp OgorICAgIGRlZiBwb2xsKHNlbGYsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnPVRydWUsIG5vX3Jl c3VsdD1GYWxzZSk6CiAgICAgICAgIHBhc3MKIAogICAgIEBhYnN0cmFjdG1ldGhvZApkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vdXRpbHMvZHJpdmVyL3BzeWNvcGcyL19faW5pdF9fLnB5IGIvd2Vi L3BnYWRtaW4vdXRpbHMvZHJpdmVyL3BzeWNvcGcyL19faW5pdF9fLnB5CmluZGV4IDg3NmI4ODcu Ljg0ODA1OGQgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3V0aWxzL2RyaXZlci9wc3ljb3BnMi9f X2luaXRfXy5weQorKysgYi93ZWIvcGdhZG1pbi91dGlscy9kcml2ZXIvcHN5Y29wZzIvX19pbml0 X18ucHkKQEAgLTEwNzgsNiArMTA3OCw1NSBAQCBGYWlsZWQgdG8gZXhlY3V0ZSBxdWVyeSAoZXhl Y3V0ZV92b2lkKSBmb3IgdGhlIHNlcnZlciAje3NlcnZlcl9pZH0gLSB7Y29ubl9pZH0KIAogICAg ICAgICByZXR1cm4gVHJ1ZSwgeydjb2x1bW5zJzogY29sdW1ucywgJ3Jvd3MnOiByb3dzfQogCisg ICAgZGVmIGFzeW5jX2ZldGNobWFueV8yZGFycmF5KHNlbGYsIHJlY29yZHM9MjAwMCwgZm9ybWF0 dGVkX2V4Y2VwdGlvbl9tc2c9RmFsc2UpOgorICAgICAgICAiIiIKKyAgICAgICAgVXNlciBzaG91 bGQgcG9sbCBhbmQgY2hlY2sgaWYgc3RhdHVzIGlzIEFTWU5DX09LIGJlZm9yZSBjYWxsaW5nIHRo aXMKKyAgICAgICAgZnVuY3Rpb24KKyAgICAgICAgQXJnczoKKyAgICAgICAgICByZWNvcmRzOiBu byBvZiByZWNvcmRzIHRvIGZldGNoLiB1c2UgLTEgdG8gZmV0Y2hhbGwuCisgICAgICAgICAgZm9y bWF0dGVkX2V4Y2VwdGlvbl9tc2c6CisKKyAgICAgICAgUmV0dXJuczoKKworICAgICAgICAiIiIK KyAgICAgICAgY3VyID0gc2VsZi5fX2FzeW5jX2N1cnNvcgorICAgICAgICBpZiBub3QgY3VyOgor ICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCBnZXR0ZXh0KAorICAgICAgICAgICAgICAgICJDdXJz b3IgY291bGQgbm90IGJlIGZvdW5kIGZvciB0aGUgYXN5bmMgY29ubmVjdGlvbi4iCisgICAgICAg ICAgICApCisKKyAgICAgICAgaWYgc2VsZi5jb25uLmlzZXhlY3V0aW5nKCk6CisgICAgICAgICAg ICByZXR1cm4gRmFsc2UsIGdldHRleHQoCisgICAgICAgICAgICAgICAgIkFzeW5jaHJvbm91cyBx dWVyeSBleGVjdXRpb24vb3BlcmF0aW9uIHVuZGVyd2F5LiIKKyAgICAgICAgICAgICkKKworICAg ICAgICBpZiBzZWxmLnJvd19jb3VudCA+IDA6CisgICAgICAgICAgICByZXN1bHQgPSBbXQorICAg ICAgICAgICAgIyBGb3IgRERMIG9wZXJhdGlvbiwgd2UgbWF5IG5vdCBoYXZlIHJlc3VsdC4KKyAg ICAgICAgICAgICMKKyAgICAgICAgICAgICMgQmVjYXVzZSAtIHRoZXJlIGlzIG5vdCBkaXJlY3Qg d2F5IHRvIGRpZmZlcmVudGlhdGUgRE1MIGFuZAorICAgICAgICAgICAgIyBEREwgb3BlcmF0aW9u cywgd2UgbmVlZCB0byByZWx5IG9uIGV4Y2VwdGlvbiB0byBmaWd1cmUKKyAgICAgICAgICAgICMg dGhhdCBvdXQgYXQgdGhlIG1vbWVudC4KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg ICBpZiByZWNvcmRzID09IC0xOgorICAgICAgICAgICAgICAgICAgICByZXMgPSBjdXIuZmV0Y2hh bGwoKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IGN1 ci5mZXRjaG1hbnkocmVjb3JkcykKKyAgICAgICAgICAgICAgICBmb3Igcm93IGluIHJlczoKKyAg ICAgICAgICAgICAgICAgICAgbmV3X3JvdyA9IFtdCisgICAgICAgICAgICAgICAgICAgIGZvciBj b2wgaW4gc2VsZi5jb2x1bW5faW5mbzoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld19yb3cu YXBwZW5kKHJvd1tjb2xbJ25hbWUnXV0pCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl bmQobmV3X3JvdykKKyAgICAgICAgICAgIGV4Y2VwdCBwc3ljb3BnMi5Qcm9ncmFtbWluZ0Vycm9y IGFzIGU6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gTm9uZQorICAgICAgICBlbHNlOgorICAg ICAgICAgICAgIyBVc2VyIHBlcmZvcm1lZCBvcGVyYXRpb24gd2hpY2ggZG9zZSBub3QgcHJvZHVj ZSByZWNvcmQvcyBhcworICAgICAgICAgICAgIyByZXN1bHQuCisgICAgICAgICAgICAjIGZvciBl Zy4gRERMIG9wZXJhdGlvbnMuCisgICAgICAgICAgICByZXR1cm4gVHJ1ZSwgTm9uZQorCisgICAg ICAgIHJldHVybiBUcnVlLCByZXN1bHQKKwogICAgIGRlZiBjb25uZWN0ZWQoc2VsZik6CiAgICAg ICAgIGlmIHNlbGYuY29ubjoKICAgICAgICAgICAgIGlmIG5vdCBzZWxmLmNvbm4uY2xvc2VkOgpA QCAtMTIyNCw3ICsxMjczLDcgQEAgRmFpbGVkIHRvIHJlc2V0IHRoZSBjb25uZWN0aW9uIHRvIHRo ZSBzZXJ2ZXIgZHVlIHRvIGZvbGxvd2luZyBlcnJvcjoKICAgICAgICAgICAgICAgICAicG9sbCgp IHJldHVybmVkICVzIGZyb20gX3dhaXRfdGltZW91dCBmdW5jdGlvbiIgJSBzdGF0ZQogICAgICAg ICAgICAgKQogCi0gICAgZGVmIHBvbGwoc2VsZiwgZm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2c9RmFs c2UpOgorICAgIGRlZiBwb2xsKHNlbGYsIGZvcm1hdHRlZF9leGNlcHRpb25fbXNnPUZhbHNlLCBu b19yZXN1bHQ9RmFsc2UpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyBh IHdyYXBwZXIgYXJvdW5kIGNvbm5lY3Rpb24ncyBwb2xsIGZ1bmN0aW9uLgogICAgICAgICBJdCBp bnRlcm5hbGx5IHVzZXMgdGhlIF93YWl0X3RpbWVvdXQgbWV0aG9kIHRvIHBvbGwgdGhlCkBAIC0x MjM0LDYgKzEyODMsNyBAQCBGYWlsZWQgdG8gcmVzZXQgdGhlIGNvbm5lY3Rpb24gdG8gdGhlIHNl cnZlciBkdWUgdG8gZm9sbG93aW5nIGVycm9yOgogICAgICAgICBBcmdzOgogICAgICAgICAgICAg Zm9ybWF0dGVkX2V4Y2VwdGlvbl9tc2c6IGlmIFRydWUgdGhlbiBmdW5jdGlvbiByZXR1cm4gdGhl IGZvcm1hdHRlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlv biBtZXNzYWdlLCBvdGhlcndpc2UgZXJyb3Igc3RyaW5nLgorICAgICAgICAgICAgbm9fcmVzdWx0 OiBJZiBUcnVlIHRoZW4gb25seSBwb2xsIHN0YXR1cyB3aWxsIGJlIHJldHVybmVkLgogICAgICAg ICAiIiIKIAogICAgICAgICBjdXIgPSBzZWxmLl9fYXN5bmNfY3Vyc29yCkBAIC0xMjg5LDIzICsx MzM5LDIzIEBAIEZhaWxlZCB0byByZXNldCB0aGUgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIGR1 ZSB0byBmb2xsb3dpbmcgZXJyb3I6CiAgICAgICAgICAgICAgICAgICAgIHBvcyArPSAxCiAKICAg ICAgICAgICAgIHNlbGYucm93X2NvdW50ID0gY3VyLnJvd2NvdW50Ci0KLSAgICAgICAgICAgIGlm IGN1ci5yb3djb3VudCA+IDA6Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gW10KLSAgICAgICAg ICAgICAgICAjIEZvciBEREwgb3BlcmF0aW9uLCB3ZSBtYXkgbm90IGhhdmUgcmVzdWx0LgotICAg ICAgICAgICAgICAgICMKLSAgICAgICAgICAgICAgICAjIEJlY2F1c2UgLSB0aGVyZSBpcyBub3Qg ZGlyZWN0IHdheSB0byBkaWZmZXJlbnRpYXRlIERNTCBhbmQKLSAgICAgICAgICAgICAgICAjIERE TCBvcGVyYXRpb25zLCB3ZSBuZWVkIHRvIHJlbHkgb24gZXhjZXB0aW9uIHRvIGZpZ3VyZSB0aGF0 Ci0gICAgICAgICAgICAgICAgIyBvdXQgYXQgdGhlIG1vbWVudC4KLSAgICAgICAgICAgICAgICB0 cnk6Ci0gICAgICAgICAgICAgICAgICAgIGZvciByb3cgaW4gY3VyOgotICAgICAgICAgICAgICAg ICAgICAgICAgbmV3X3JvdyA9IFtdCi0gICAgICAgICAgICAgICAgICAgICAgICBmb3IgY29sIGlu IHNlbGYuY29sdW1uX2luZm86Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3Jvdy5h cHBlbmQocm93W2NvbFsnbmFtZSddXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5h cHBlbmQobmV3X3JvdykKLQotICAgICAgICAgICAgICAgIGV4Y2VwdCBwc3ljb3BnMi5Qcm9ncmFt bWluZ0Vycm9yOgotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBOb25lCisgICAgICAgICAg ICBpZiBub3Qgbm9fcmVzdWx0OgorICAgICAgICAgICAgICAgIGlmIGN1ci5yb3djb3VudCA+IDA6 CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgICAgICAgICAgICAgICMg Rm9yIERETCBvcGVyYXRpb24sIHdlIG1heSBub3QgaGF2ZSByZXN1bHQuCisgICAgICAgICAgICAg ICAgICAgICMKKyAgICAgICAgICAgICAgICAgICAgIyBCZWNhdXNlIC0gdGhlcmUgaXMgbm90IGRp cmVjdCB3YXkgdG8gZGlmZmVyZW50aWF0ZSBETUwgYW5kCisgICAgICAgICAgICAgICAgICAgICMg RERMIG9wZXJhdGlvbnMsIHdlIG5lZWQgdG8gcmVseSBvbiBleGNlcHRpb24gdG8gZmlndXJlCisg ICAgICAgICAgICAgICAgICAgICMgdGhhdCBvdXQgYXQgdGhlIG1vbWVudC4KKyAgICAgICAgICAg ICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHJvdyBpbiBjdXI6Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3X3JvdyA9IFtdCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZm9yIGNvbCBpbiBzZWxmLmNvbHVtbl9pbmZvOgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBuZXdfcm93LmFwcGVuZChyb3dbY29sWyduYW1lJ11dKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQobmV3X3JvdykKKworICAgICAgICAg ICAgICAgICAgICBleGNlcHQgcHN5Y29wZzIuUHJvZ3JhbW1pbmdFcnJvcjoKKyAgICAgICAgICAg ICAgICAgICAgICAgIHJlc3VsdCA9IE5vbmUKIAogICAgICAgICByZXR1cm4gc3RhdHVzLCByZXN1 bHQKIApkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vZmVhdHVyZV91dGlscy9wZ2FkbWluX3Bh Z2UucHkgYi93ZWIvcmVncmVzc2lvbi9mZWF0dXJlX3V0aWxzL3BnYWRtaW5fcGFnZS5weQppbmRl eCBjNjE2NjNhLi40MjRmZjU2IDEwMDY0NAotLS0gYS93ZWIvcmVncmVzc2lvbi9mZWF0dXJlX3V0 aWxzL3BnYWRtaW5fcGFnZS5weQorKysgYi93ZWIvcmVncmVzc2lvbi9mZWF0dXJlX3V0aWxzL3Bn YWRtaW5fcGFnZS5weQpAQCAtODUsNyArODUsNyBAQCBjbGFzcyBQZ2FkbWluUGFnZToKIAogICAg ICAgICAgICAgaWYgJ21lbnUtaXRlbScgPT0gc3RyKG1lbnVfaXRlbS5nZXRfYXR0cmlidXRlKCdj bGFzcycpKToKICAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgICAgIHRpbWUuc2xl ZXAoMC4xKQorICAgICAgICAgICAgdGltZS5zbGVlcCgwLjEpCiAgICAgICAgIGVsc2U6CiAgICAg ICAgICAgICBhc3NlcnQgRmFsc2UsICInVG9vbHMgLT4gUXVlcnkgVG9vbCcgbWVudSBkaWQgbm90 IGVuYWJsZS4iCiAKQEAgLTI1MSw2ICsyNTEsMjAgQEAgY2xhc3MgUGdhZG1pblBhZ2U6CiAKICAg ICAgICAgc2VsZi5fd2FpdF9mb3IoInNwaW5uZXIgdG8gZGlzYXBwZWFyIiwgc3Bpbm5lcl9oYXNf ZGlzYXBwZWFyZWQpCiAKKyAgICBkZWYgd2FpdF9mb3JfcXVlcnlfdG9vbF9sb2FkaW5nX2luZGlj YXRvcl90b19kaXNhcHBlYXIoc2VsZik6CisgICAgICAgIGRlZiBzcGlubmVyX2hhc19kaXNhcHBl YXJlZChkcml2ZXIpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIGRyaXZlci5m aW5kX2VsZW1lbnRfYnlfeHBhdGgoCisgICAgICAgICAgICAgICAgICAgICIvLypbQGlkPSdmZXRj aGluZ19kYXRhJyBhbmQgQGNsYXNzPSdoaWRlJ10iCisgICAgICAgICAgICAgICAgKQorICAgICAg ICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgZXhjZXB0IE5vU3VjaEVsZW1lbnRF eGNlcHRpb246CisgICAgICAgICAgICAgICAgIyB3YWl0IGZvciBsb2FkaW5nIGluZGljYXRvciBk aXNhcHBlYXIgYW5pbWF0aW9uIHRvIGNvbXBsZXRlLgorICAgICAgICAgICAgICAgIHRpbWUuc2xl ZXAoMC41KQorICAgICAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAgICAgc2VsZi5fd2Fp dF9mb3IoInNwaW5uZXIgdG8gZGlzYXBwZWFyIiwgc3Bpbm5lcl9oYXNfZGlzYXBwZWFyZWQpCisK ICAgICBkZWYgd2FpdF9mb3JfYXBwKHNlbGYpOgogICAgICAgICBkZWYgcGFnZV9zaG93c19hcHAo ZHJpdmVyKToKICAgICAgICAgICAgIGlmIGRyaXZlci50aXRsZSA9PSBzZWxmLmFwcF9jb25maWcu QVBQX05BTUU6CkBAIC0yNjYsMTkgKzI4MCwzIEBAIGNsYXNzIFBnYWRtaW5QYWdlOgogICAgICAg ICAgICAgdGltZW91dCA9IHNlbGYudGltZW91dAogICAgICAgICByZXR1cm4gV2ViRHJpdmVyV2Fp dChzZWxmLmRyaXZlciwgdGltZW91dCwgMC4wMSkudW50aWwoY29uZGl0aW9uX21ldF9mdW5jdGlv biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIlRpbWVkIG91dCB3YWl0aW5nIGZvciAiICsgd2FpdGluZ19mb3JfbWVz c2FnZSkKLQotICAgIGRlZiB3YWl0X2Zvcl9lbGVtZW50X3RvX3N0YWxlKHNlbGYsIHhwYXRoKToK LSAgICAgICAgIyBSZWZlcmVuY2U6IGh0dHA6Ly93d3cub2JleXRoZXRlc3Rpbmdnb2F0LmNvbS8K LSAgICAgICAgIyBob3ctdG8tZ2V0LXNlbGVuaXVtLXRvLXdhaXQtZm9yLXBhZ2UtbG9hZC1hZnRl ci1hLWNsaWNrLmh0bWwKLSAgICAgICAgZWwgPSBzZWxmLmRyaXZlci5maW5kX2VsZW1lbnRfYnlf eHBhdGgoeHBhdGgpCi0KLSAgICAgICAgZGVmIGVsZW1lbnRfaGFzX2dvbmVfc3RhbGUoZHJpdmVy KToKLSAgICAgICAgICAgIHRyeToKLSAgICAgICAgICAgICAgICAjIHBvbGwgYW4gYXJiaXRyYXJ5 IGVsZW1lbnQKLSAgICAgICAgICAgICAgICBlbC5maW5kX2VsZW1lbnRzX2J5X2lkKCdlbGVtZW50 LWRvbnQtZXhpc3QnKQotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAg ZXhjZXB0IFN0YWxlRWxlbWVudFJlZmVyZW5jZUV4Y2VwdGlvbjoKLSAgICAgICAgICAgICAgICBy ZXR1cm4gVHJ1ZQotCi0gICAgICAgIHNlbGYuX3dhaXRfZm9yKCJlbGVtZW50IHRvIGF0dGFjaCB0 byB0aGUgcGFnZSBkb2N1bWVudCIsCi0gICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRfaGFz X2dvbmVfc3RhbGUpCmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3NlbGVj dGlvbi9jb3B5X2RhdGFfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2VsZWN0 aW9uL2NvcHlfZGF0YV9zcGVjLmpzCmluZGV4IDllMDVlODQuLjJiNjIzYjMgMTAwNjQ0Ci0tLSBh L3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2VsZWN0aW9uL2NvcHlfZGF0YV9zcGVjLmpzCisr KyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2VsZWN0aW9uL2NvcHlfZGF0YV9zcGVjLmpz CkBAIC0xNiwxNiArMTYsMTYgQEAgaW1wb3J0IGNsaXBib2FyZCBmcm9tICcuLi8uLi8uLi9wZ2Fk bWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vY2xpcGJvYXJkJzsKIGltcG9ydCBjb3B5RGF0YSBmcm9t ICcuLi8uLi8uLi9wZ2FkbWluL3N0YXRpYy9qcy9zZWxlY3Rpb24vY29weV9kYXRhJzsKIGltcG9y dCBSYW5nZVNlbGVjdGlvbkhlbHBlciBmcm9tICdzb3VyY2VzL3NlbGVjdGlvbi9yYW5nZV9zZWxl Y3Rpb25faGVscGVyJzsKIGltcG9ydCBYQ2VsbFNlbGVjdGlvbk1vZGVsIGZyb20gJ3NvdXJjZXMv c2VsZWN0aW9uL3hjZWxsX3NlbGVjdGlvbl9tb2RlbCc7Ci0KIGRlc2NyaWJlKCdjb3B5RGF0YScs IGZ1bmN0aW9uICgpIHsKICAgdmFyIGdyaWQsIHNxbEVkaXRvciwgZ3JpZENvbnRhaW5lciwgYnV0 dG9uUGFzdGVSb3c7CiAgIHZhciBTbGlja0dyaWQ7CiAKICAgYmVmb3JlRWFjaChmdW5jdGlvbiAo KSB7CiAgICAgU2xpY2tHcmlkID0gU2xpY2suR3JpZDsKLSAgICB2YXIgZGF0YSA9IFtbMSwgJ2xl b3BvcmQnLCAnMTInXSwKLSAgICAgIFsyLCAnbGlvbicsICcxMyddLAotICAgICAgWzMsICdwdW1h JywgJzknXV07CisgICAgdmFyIGRhdGEgPSBbeydpZCc6IDEsICdicmFuZCc6J2xlb3BvcmQnLCAn c2l6ZSc6JzEyJywgJ19fdGVtcF9QSyc6ICcxMjMnfSwKKyAgICAgICAgICAgICAgICB7J2lkJzog MiwgJ2JyYW5kJzonbGlvbicsICdzaXplJzonMTMnLCAnX190ZW1wX1BLJzogJzQ1Nid9LAorICAg ICAgICAgICAgICAgIHsnaWQnOiAzLCAnYnJhbmQnOidwdW1hJywgJ3NpemUnOic5JywgJ19fdGVt cF9QSyc6ICc3ODknfV0sCisgICAgICBkYXRhVmlldyA9IG5ldyBTbGljay5EYXRhLkRhdGFWaWV3 KCk7CiAKICAgICB2YXIgY29sdW1ucyA9IFsKICAgICAgIHsKQEAgLTM3LDYgKzM3LDcgQEAgZGVz Y3JpYmUoJ2NvcHlEYXRhJywgZnVuY3Rpb24gKCkgewogICAgICAgfSwKICAgICAgIHsKICAgICAg ICAgbmFtZTogJ2lkJywKKyAgICAgICAgZmllbGQ6ICdpZCcsCiAgICAgICAgIHBvczogMCwKICAg ICAgICAgbGFiZWw6ICdpZDxicj4gbnVtZXJpYycsCiAgICAgICAgIGNlbGw6ICdudW1iZXInLApA QCAtNDQsNiArNDUsNyBAQCBkZXNjcmliZSgnY29weURhdGEnLCBmdW5jdGlvbiAoKSB7CiAgICAg ICAgIHR5cGU6ICdudW1lcmljJywKICAgICAgIH0sIHsKICAgICAgICAgbmFtZTogJ2JyYW5kJywK KyAgICAgICAgZmllbGQ6ICdicmFuZCcsCiAgICAgICAgIHBvczogMSwKICAgICAgICAgbGFiZWw6 ICdmbGF2b3I8YnI+IGNoYXJhY3RlciB2YXJ5aW5nJywKICAgICAgICAgY2VsbDogJ3N0cmluZycs CkBAIC01MSwyNCArNTMsMjYgQEAgZGVzY3JpYmUoJ2NvcHlEYXRhJywgZnVuY3Rpb24gKCkgewog ICAgICAgICB0eXBlOiAnY2hhcmFjdGVyIHZhcnlpbmcnLAogICAgICAgfSwgewogICAgICAgICBu YW1lOiAnc2l6ZScsCisgICAgICAgIGZpZWxkOiAnc2l6ZScsCiAgICAgICAgIHBvczogMiwKICAg ICAgICAgbGFiZWw6ICdzaXplPGJyPiBudW1lcmljJywKICAgICAgICAgY2VsbDogJ251bWJlcics CiAgICAgICAgIGNhbl9lZGl0OiBmYWxzZSwKICAgICAgICAgdHlwZTogJ251bWVyaWMnLAogICAg ICAgfSwKLSAgICBdCi0gICAgOwotICAgIGdyaWRDb250YWluZXIgPSAkKCc8ZGl2IGlkPVwnZ3Jp ZFwnPjwvZGl2PicpOworICAgIF07CisgICAgZ3JpZENvbnRhaW5lciA9ICQoJzxkaXYgaWQ9Imdy aWQiPjwvZGl2PicpOwogICAgICQoJ2JvZHknKS5hcHBlbmQoZ3JpZENvbnRhaW5lcik7Ci0gICAg YnV0dG9uUGFzdGVSb3cgPSAkKCc8YnV0dG9uIGlkPVwnYnRuLXBhc3RlLXJvd1wnIGRpc2FibGVk PjwvYnV0dG9uPicpOworICAgIGJ1dHRvblBhc3RlUm93ID0gJCgnPGJ1dHRvbiBpZD0iYnRuLXBh c3RlLXJvdyIgZGlzYWJsZWQ+PC9idXR0b24+Jyk7CiAgICAgJCgnYm9keScpLmFwcGVuZChidXR0 b25QYXN0ZVJvdyk7Ci0gICAgZ3JpZCA9IG5ldyBTbGlja0dyaWQoJyNncmlkJywgZGF0YSwgY29s dW1ucywge30pOworICAgIGdyaWQgPSBuZXcgU2xpY2tHcmlkKCcjZ3JpZCcsIGRhdGFWaWV3LCBj b2x1bW5zLCB7fSk7CisgICAgZGF0YVZpZXcuc2V0SXRlbXMoZGF0YSwgJ19fdGVtcF9QSycpOwog ICAgIGdyaWQuc2V0U2VsZWN0aW9uTW9kZWwobmV3IFhDZWxsU2VsZWN0aW9uTW9kZWwoKSk7CiAg ICAgc3FsRWRpdG9yID0ge3NsaWNrZ3JpZDogZ3JpZH07CiAgIH0pOwogCi0gIGFmdGVyRWFjaChm dW5jdGlvbiAoKSB7CisgIGFmdGVyRWFjaChmdW5jdGlvbigpIHsKKyAgICBncmlkLmRlc3Ryb3ko KTsKICAgICBncmlkQ29udGFpbmVyLnJlbW92ZSgpOwogICAgIGJ1dHRvblBhc3RlUm93LnJlbW92 ZSgpOwogICB9KTsKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2VsZWN0 aW9uL3JhbmdlX2JvdW5kYXJ5X25hdmlnYXRvcl9zcGVjLmpzIGIvd2ViL3JlZ3Jlc3Npb24vamF2 YXNjcmlwdC9zZWxlY3Rpb24vcmFuZ2VfYm91bmRhcnlfbmF2aWdhdG9yX3NwZWMuanMKaW5kZXgg MWRlNmQ4MS4uMmQ1NmIwNSAxMDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9z ZWxlY3Rpb24vcmFuZ2VfYm91bmRhcnlfbmF2aWdhdG9yX3NwZWMuanMKKysrIGIvd2ViL3JlZ3Jl c3Npb24vamF2YXNjcmlwdC9zZWxlY3Rpb24vcmFuZ2VfYm91bmRhcnlfbmF2aWdhdG9yX3NwZWMu anMKQEAgLTEzNCwxNyArMTM0LDE5IEBAIGRlc2NyaWJlKCdSYW5nZUJvdW5kYXJ5TmF2aWdhdG9y JywgZnVuY3Rpb24gKCkgewogICBkZXNjcmliZSgnI3Jhbmdlc1RvQ3N2JywgZnVuY3Rpb24gKCkg ewogICAgIHZhciBkYXRhLCBjb2x1bW5EZWZpbml0aW9ucywgcmFuZ2VzOwogICAgIGJlZm9yZUVh Y2goZnVuY3Rpb24gKCkgewotICAgICAgZGF0YSA9IFtbMSwgJ2xlb3BhcmQnLCAnMTInXSwKLSAg ICAgICAgWzIsICdsaW9uJywgJzEzJ10sCi0gICAgICAgIFszLCAnY291Z2FyJywgJzknXSwKLSAg ICAgICAgWzQsICd0aWdlcicsICcxMCddXTsKLSAgICAgIGNvbHVtbkRlZmluaXRpb25zID0gW3tu YW1lOiAnaWQnLCBwb3M6IDB9LCB7bmFtZTogJ2FuaW1hbCcsIHBvczogMX0sIHtuYW1lOiAnc2l6 ZScsIHBvczogMn1dOworICAgICAgZGF0YSA9IFt7J2lkJzoxLCAnYW5pbWFsJzonbGVvcGFyZCcs ICdzaXplJzonMTInfSwKKyAgICAgICAgICAgICAgeydpZCc6MiwgJ2FuaW1hbCc6J2xpb24nLCAn c2l6ZSc6JzEzJ30sCisgICAgICAgICAgICAgIHsnaWQnOjMsICdhbmltYWwnOidjb3VnYXInLCAn c2l6ZSc6JzknfSwKKyAgICAgICAgICAgICAgeydpZCc6NCwgJ2FuaW1hbCc6J3RpZ2VyJywgJ3Np emUnOicxMCd9XTsKKworICAgICAgY29sdW1uRGVmaW5pdGlvbnMgPSBbe25hbWU6ICdpZCcsIGZp ZWxkOiAnaWQnLCBwb3M6IDB9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtuYW1lOiAn YW5pbWFsJywgZmllbGQ6ICdhbmltYWwnLCBwb3M6IDF9LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHtuYW1lOiAnc2l6ZScsIGZpZWxkOiAnc2l6ZScsIHBvczogMn1dOwogICAgICAgcmFu Z2VzID0gW25ldyBTbGljay5SYW5nZSgwLCAwLCAwLCAyKSwgbmV3IFNsaWNrLlJhbmdlKDMsIDAs IDMsIDIpXTsKICAgICB9KTsKIAogICAgIGl0KCdyZXR1cm5zIGNzdiBmb3IgdGhlIHByb3ZpZGVk IHJhbmdlcycsIGZ1bmN0aW9uICgpIHsKICAgICAgIHZhciBjc3ZSZXN1bHQgPSByYW5nZUJvdW5k YXJ5TmF2aWdhdG9yLnJhbmdlc1RvQ3N2KGRhdGEsIGNvbHVtbkRlZmluaXRpb25zLCByYW5nZXMp OwotCiAgICAgICBleHBlY3QoY3N2UmVzdWx0KS50b0VxdWFsKCcxLFwnbGVvcGFyZFwnLFwnMTJc J1xuNCxcJ3RpZ2VyXCcsXCcxMFwnJyk7CiAgICAgfSk7CiAKQEAgLTE1OCwxMCArMTYwLDEwIEBA IGRlc2NyaWJlKCdSYW5nZUJvdW5kYXJ5TmF2aWdhdG9yJywgZnVuY3Rpb24gKCkgewogCiAgICAg ZGVzY3JpYmUoJ3doZW4gdGhlcmUgaXMgYW4gZXh0cmEgY29sdW1uIHdpdGggY2hlY2tib3hlcycs IGZ1bmN0aW9uICgpIHsKICAgICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkgewotICAgICAgICBj b2x1bW5EZWZpbml0aW9ucyA9IFt7bmFtZTogJ25vdC1hLWRhdGEtY29sdW1uJ30sIHtuYW1lOiAn aWQnLCBwb3M6IDB9LCB7bmFtZTogJ2FuaW1hbCcsIHBvczogMX0sIHsKLSAgICAgICAgICBuYW1l OiAnc2l6ZScsCi0gICAgICAgICAgcG9zOiAyLAotICAgICAgICB9XTsKKyAgICAgICAgY29sdW1u RGVmaW5pdGlvbnMgPSBbe25hbWU6ICdub3QtYS1kYXRhLWNvbHVtbid9LAorICAgICAgICAgIHtu YW1lOiAnaWQnLCBmaWVsZDogJ2lkJywgcG9zOiAwfSwKKyAgICAgICAgICB7bmFtZTogJ2FuaW1h bCcsIGZpZWxkOiAnYW5pbWFsJywgcG9zOiAxfSwKKyAgICAgICAgICB7bmFtZTogJ3NpemUnLCBm aWVsZDogJ3NpemUnLHBvczogMn1dOwogICAgICAgICByYW5nZXMgPSBbbmV3IFNsaWNrLlJhbmdl KDAsIDAsIDAsIDMpLCBuZXcgU2xpY2suUmFuZ2UoMywgMCwgMywgMyldOwogICAgICAgfSk7CiAK ZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2VsZWN0aW9uL3Jvd19zZWxl Y3Rvcl9zcGVjLmpzIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9zZWxlY3Rpb24vcm93X3Nl bGVjdG9yX3NwZWMuanMKaW5kZXggZGIzYzBiNC4uYjZkNGQwMSAxMDA2NDQKLS0tIGEvd2ViL3Jl Z3Jlc3Npb24vamF2YXNjcmlwdC9zZWxlY3Rpb24vcm93X3NlbGVjdG9yX3NwZWMuanMKKysrIGIv d2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9zZWxlY3Rpb24vcm93X3NlbGVjdG9yX3NwZWMuanMK QEAgLTYsNyArNiw2IEBACiAvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQ b3N0Z3JlU1FMIExpY2VuY2UKIC8vCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotCiBpbXBvcnQgJCBmcm9t ICdqcXVlcnknOwogCiBpbXBvcnQgU2xpY2sgZnJvbSAnc2xpY2tncmlkJzsKQEAgLTIzLDcgKzIy LDcgQEAgZGVzY3JpYmUoJ1Jvd1NlbGVjdG9yJywgZnVuY3Rpb24gKCkgewogICAgIFVQOiAzOCwK ICAgICBET1dOOiA0MCwKICAgfTsKLSAgdmFyIGNvbnRhaW5lciwgZGF0YSwgY29sdW1uRGVmaW5p dGlvbnMsIGdyaWQsIGNlbGxTZWxlY3Rpb25Nb2RlbDsKKyAgdmFyIGNvbnRhaW5lciwgZGF0YVZp ZXcsIGNvbHVtbkRlZmluaXRpb25zLCBncmlkLCBjZWxsU2VsZWN0aW9uTW9kZWw7CiAgIHZhciBT bGlja0dyaWQgPSBTbGljay5HcmlkOwogCiAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkgewpAQCAt NDMsMTQgKzQyLDE1IEBAIGRlc2NyaWJlKCdSb3dTZWxlY3RvcicsIGZ1bmN0aW9uICgpIHsKICAg ICAgIHBvczogMSwKICAgICB9XTsKIAorICAgIGRhdGFWaWV3ID0gbmV3IFNsaWNrLkRhdGEuRGF0 YVZpZXcoKTsKICAgICB2YXIgcm93U2VsZWN0b3IgPSBuZXcgUm93U2VsZWN0b3IoKTsKLSAgICBk YXRhID0gW107CisgICAgdmFyIGRhdGEgPSBbXTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEw OyBpKyspIHsKLSAgICAgIGRhdGEucHVzaChbJ3NvbWUtdmFsdWUtJyArIGksICdzZWNvbmQgdmFs dWUgJyArIGldKTsKKyAgICAgIGRhdGEucHVzaCh7J3NvbWUtY29sdW1uLW5hbWUnOidzb21lLXZh bHVlLScgKyBpLCAnc2Vjb25kIGNvbHVtbic6J3NlY29uZCB2YWx1ZSAnICsgaX0pOwogICAgIH0K ICAgICBjb2x1bW5EZWZpbml0aW9ucyA9IHJvd1NlbGVjdG9yLmdldENvbHVtbkRlZmluaXRpb25z KGNvbHVtbkRlZmluaXRpb25zKTsKLSAgICBncmlkID0gbmV3IFNsaWNrR3JpZChjb250YWluZXIs IGRhdGEsIGNvbHVtbkRlZmluaXRpb25zKTsKLQorICAgIGRhdGFWaWV3LnNldEl0ZW1zKGRhdGEs ICdzb21lLWNvbHVtbi1uYW1lJyk7CisgICAgZ3JpZCA9IG5ldyBTbGlja0dyaWQoY29udGFpbmVy LCBkYXRhVmlldywgY29sdW1uRGVmaW5pdGlvbnMpOwogICAgIGdyaWQucmVnaXN0ZXJQbHVnaW4o bmV3IEFjdGl2ZUNlbGxDYXB0dXJlKCkpOwogICAgIGNlbGxTZWxlY3Rpb25Nb2RlbCA9IG5ldyBY Q2VsbFNlbGVjdGlvbk1vZGVsKCk7CiAgICAgZ3JpZC5zZXRTZWxlY3Rpb25Nb2RlbChjZWxsU2Vs ZWN0aW9uTW9kZWwpOwpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9zZWxl Y3Rpb24vc2V0X3N0YWdlZF9yb3dzX3NwZWMuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0 L3NlbGVjdGlvbi9zZXRfc3RhZ2VkX3Jvd3Nfc3BlYy5qcwppbmRleCA2NzM1MzE0Li42ZmQ3ODBh IDEwMDY0NAotLS0gYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3NlbGVjdGlvbi9zZXRfc3Rh Z2VkX3Jvd3Nfc3BlYy5qcworKysgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3NlbGVjdGlv bi9zZXRfc3RhZ2VkX3Jvd3Nfc3BlYy5qcwpAQCAtNywyMzYgKzcsMjQ3IEBACiAvLwogLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K IAotZGVmaW5lKFsKLSAgJ2pxdWVyeScsCi0gICd1bmRlcnNjb3JlJywKLSAgJ3NvdXJjZXMvc2Vs ZWN0aW9uL3NldF9zdGFnZWRfcm93cycsCi1dLCBmdW5jdGlvbiAoJCwgXywgU2V0U3RhZ2VkUm93 cykgewotICBkZXNjcmliZSgnc2V0X3N0YWdlZF9yb3dzJywgZnVuY3Rpb24gKCkgewotICAgIHZh ciBzcWxFZGl0b3JPYmosIGdyaWRTcHksIGRlbGV0ZUJ1dHRvbiwgY29weUJ1dHRvbiwgc2VsZWN0 aW9uU3B5OwotICAgIGJlZm9yZUVhY2goZnVuY3Rpb24gKCkgewotICAgICAgZ3JpZFNweSA9IGph c21pbmUuY3JlYXRlU3B5T2JqKCdncmlkU3B5JywgWydnZXREYXRhJywgJ2dldENlbGxOb2RlJywg J2dldENvbHVtbnMnXSk7Ci0gICAgICBncmlkU3B5LmdldERhdGEuYW5kLnJldHVyblZhbHVlKFsK LSAgICAgICAgezA6ICdvbmUnLCAxOiAndHdvJywgX190ZW1wX1BLOiAnMTIzJ30sCi0gICAgICAg IHswOiAndGhyZWUnLCAxOiAnZm91cicsIF9fdGVtcF9QSzogJzQ1Nid9LAotICAgICAgICB7MDog J2ZpdmUnLCAxOiAnc2l4JywgX190ZW1wX1BLOiAnNzg5J30sCi0gICAgICAgIHswOiAnc2V2ZW4n LCAxOiAnZWlnaHQnLCBfX3RlbXBfUEs6ICc0MzInfSwKLSAgICAgIF0pOwotICAgICAgZ3JpZFNw eS5nZXRDb2x1bW5zLmFuZC5yZXR1cm5WYWx1ZShbCitpbXBvcnQgJCBmcm9tICdqcXVlcnknOwor aW1wb3J0ICdzbGlja2dyaWQuZ3JpZCc7CitpbXBvcnQgU2xpY2sgZnJvbSAnc2xpY2tncmlkJzsK K2ltcG9ydCBTZXRTdGFnZWRSb3dzIGZyb20gJ3NvdXJjZXMvc2VsZWN0aW9uL3NldF9zdGFnZWRf cm93cyc7CisKK2Rlc2NyaWJlKCdzZXRfc3RhZ2VkX3Jvd3MnLCBmdW5jdGlvbiAoKSB7CisgIHZh ciBzcWxFZGl0b3JPYmosIGdyaWRTcHksIGRlbGV0ZUJ1dHRvbiwgY29weUJ1dHRvbiwgc2VsZWN0 aW9uU3B5OworICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgZGF0YSA9IFt7J2Eg cGsgY29sdW1uJzogJ29uZScsICdzb21lIGNvbHVtbic6ICd0d28nLCAnX190ZW1wX1BLJzogJzEy Myd9LAorICAgICAgICB7J2EgcGsgY29sdW1uJzogJ3RocmVlJywgJ3NvbWUgY29sdW1uJzogJ2Zv dXInLCAnX190ZW1wX1BLJzogJzQ1Nid9LAorICAgICAgICB7J2EgcGsgY29sdW1uJzogJ2ZpdmUn LCAnc29tZSBjb2x1bW4nOiAnc2l4JywgJ19fdGVtcF9QSyc6ICc3ODknfSwKKyAgICAgICAgeydh IHBrIGNvbHVtbic6ICdzZXZlbicsICdzb21lIGNvbHVtbic6ICdlaWdodCcsICdfX3RlbXBfUEsn OiAnNDMyJ31dLAorICAgICAgZGF0YVZpZXcgPSBuZXcgU2xpY2suRGF0YS5EYXRhVmlldygpOwor CisgICAgZGF0YVZpZXcuc2V0SXRlbXMoZGF0YSwgJ19fdGVtcF9QSycpOworCisgICAgZ3JpZFNw eSA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCdncmlkU3B5JywgWydnZXREYXRhJywgJ2dldENlbGxO b2RlJywgJ2dldENvbHVtbnMnXSk7CisgICAgZ3JpZFNweS5nZXREYXRhLmFuZC5yZXR1cm5WYWx1 ZShkYXRhVmlldyk7CisgICAgZ3JpZFNweS5nZXRDb2x1bW5zLmFuZC5yZXR1cm5WYWx1ZShbCisg ICAgICB7CisgICAgICAgIG5hbWU6ICdhIHBrIGNvbHVtbicsCisgICAgICAgIGZpZWxkOiAnYSBw ayBjb2x1bW4nLAorICAgICAgICBwb3M6IDAsCisgICAgICAgIHNlbGVjdGFibGU6IHRydWUsCisg ICAgICB9LCB7CisgICAgICAgIG5hbWU6ICdzb21lIGNvbHVtbicsCisgICAgICAgIGZpZWxkOiAn c29tZSBjb2x1bW4nLAorICAgICAgICBwb3M6IDEsCisgICAgICAgIHNlbGVjdGFibGU6IHRydWUs CisgICAgICB9LAorICAgIF0pOworICAgIHNlbGVjdGlvblNweSA9IGphc21pbmUuY3JlYXRlU3B5 T2JqKCdzZWxlY3Rpb25TcHknLCBbJ3NldFNlbGVjdGVkUm93cycsICdnZXRTZWxlY3RlZFJhbmdl cyddKTsKKyAgICBkZWxldGVCdXR0b24gPSAkKCc8YnV0dG9uIGlkPSJidG4tZGVsZXRlLXJvdyI+ PC9idXR0b24+Jyk7CisgICAgY29weUJ1dHRvbiA9ICQoJzxidXR0b24gaWQ9ImJ0bi1jb3B5LXJv dyI+PC9idXR0b24+Jyk7CisKKyAgICBzcWxFZGl0b3JPYmogPSB7CisgICAgICBncmlkOiBncmlk U3B5LAorICAgICAgZWRpdG9yOiB7CisgICAgICAgIGhhbmRsZXI6IHsKKyAgICAgICAgICBkYXRh X3N0b3JlOiB7CisgICAgICAgICAgICBzdGFnZWRfcm93czogeyc0NTYnOiB7fX0sCisgICAgICAg ICAgfSwKKyAgICAgICAgICBjYW5fZWRpdDogZmFsc2UsCisgICAgICAgIH0sCisgICAgICB9LAor ICAgICAga2V5czogbnVsbCwKKyAgICAgIHNlbGVjdGlvbjogc2VsZWN0aW9uU3B5LAorICAgICAg Y29sdW1uczogWwogICAgICAgICB7CisgICAgICAgICAgbmFtZTogJ2EgcGsgY29sdW1uJywKKyAg ICAgICAgICBmaWVsZDogJ2EgcGsgY29sdW1uJywKICAgICAgICAgICBwb3M6IDAsCi0gICAgICAg ICAgc2VsZWN0YWJsZTogdHJ1ZSwKLSAgICAgICAgfSwgeworICAgICAgICB9LAorICAgICAgICB7 CisgICAgICAgICAgbmFtZTogJ3NvbWUgY29sdW1uJywKKyAgICAgICAgICBmaWVsZDogJ3NvbWUg Y29sdW1uJywKICAgICAgICAgICBwb3M6IDEsCi0gICAgICAgICAgc2VsZWN0YWJsZTogdHJ1ZSwK ICAgICAgICAgfSwKLSAgICAgIF0pOworICAgICAgXSwKKyAgICAgIGNsaWVudF9wcmltYXJ5X2tl eTogJ19fdGVtcF9QSycsCisgICAgfTsKIAotICAgICAgc2VsZWN0aW9uU3B5ID0gamFzbWluZS5j cmVhdGVTcHlPYmooJ3NlbGVjdGlvblNweScsIFsnc2V0U2VsZWN0ZWRSb3dzJywgJ2dldFNlbGVj dGVkUmFuZ2VzJ10pOworICAgICQoJ2JvZHknKS5hcHBlbmQoZGVsZXRlQnV0dG9uKTsKKyAgICAk KCdib2R5JykuYXBwZW5kKGNvcHlCdXR0b24pOwogCi0gICAgICBkZWxldGVCdXR0b24gPSAkKCc8 YnV0dG9uIGlkPSJidG4tZGVsZXRlLXJvdyI+PC9idXR0b24+Jyk7Ci0gICAgICBjb3B5QnV0dG9u ID0gJCgnPGJ1dHRvbiBpZD0iYnRuLWNvcHktcm93Ij48L2J1dHRvbj4nKTsKKyAgICBkZWxldGVC dXR0b24ucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKKyAgICBjb3B5QnV0dG9uLnByb3AoJ2Rpc2Fi bGVkJywgdHJ1ZSk7CiAKLSAgICAgIHNxbEVkaXRvck9iaiA9IHsKLSAgICAgICAgZ3JpZDogZ3Jp ZFNweSwKLSAgICAgICAgZWRpdG9yOiB7Ci0gICAgICAgICAgaGFuZGxlcjogewotICAgICAgICAg ICAgZGF0YV9zdG9yZTogewotICAgICAgICAgICAgICBzdGFnZWRfcm93czogeyc0NTYnOiB7fX0s Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgY2FuX2VkaXQ6IGZhbHNlLAotICAgICAgICAg IH0sCi0gICAgICAgIH0sCi0gICAgICAgIGtleXM6IG51bGwsCi0gICAgICAgIHNlbGVjdGlvbjog c2VsZWN0aW9uU3B5LAotICAgICAgICBjb2x1bW5zOiBbCi0gICAgICAgICAgewotICAgICAgICAg ICAgbmFtZTogJ2EgcGsgY29sdW1uJywKLSAgICAgICAgICAgIHBvczogMCwKLSAgICAgICAgICB9 LAotICAgICAgICAgIHsKLSAgICAgICAgICAgIG5hbWU6ICdzb21lIGNvbHVtbicsCi0gICAgICAg ICAgICBwb3M6IDEsCi0gICAgICAgICAgfSwKLSAgICAgICAgXSwKLSAgICAgIH07CisgICAgc2Vs ZWN0aW9uU3B5ID0gamFzbWluZS5jcmVhdGVTcHlPYmooJ3NlbGVjdGlvblNweScsIFsKKyAgICAg ICdzZXRTZWxlY3RlZFJvd3MnLAorICAgICAgJ2dldFNlbGVjdGVkUmFuZ2VzJywKKyAgICBdKTsK KyAgfSk7CiAKLSAgICAgICQoJ2JvZHknKS5hcHBlbmQoZGVsZXRlQnV0dG9uKTsKLSAgICAgICQo J2JvZHknKS5hcHBlbmQoY29weUJ1dHRvbik7CisgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7Cisg ICAgY29weUJ1dHRvbi5yZW1vdmUoKTsKKyAgICBkZWxldGVCdXR0b24ucmVtb3ZlKCk7CisgIH0p OworICBkZXNjcmliZSgnd2hlbiBubyBmdWxsIHJvd3MgYXJlIHNlbGVjdGVkJywgZnVuY3Rpb24g KCkgeworICAgIGRlc2NyaWJlKCd3aGVuIG5vdGhpbmcgaXMgc2VsZWN0ZWQnLCBmdW5jdGlvbiAo KSB7CisgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgc2VsZWN0aW9uU3B5 LmdldFNlbGVjdGVkUmFuZ2VzLmFuZC5yZXR1cm5WYWx1ZShbXSk7CisgICAgICAgIHNxbEVkaXRv ck9iai5zZWxlY3Rpb24gPSBzZWxlY3Rpb25TcHk7CisgICAgICAgIFNldFN0YWdlZFJvd3MuY2Fs bChzcWxFZGl0b3JPYmosIHt9LCB7fSk7CisgICAgICB9KTsKIAotICAgICAgZGVsZXRlQnV0dG9u LnByb3AoJ2Rpc2FibGVkJywgdHJ1ZSk7Ci0gICAgICBjb3B5QnV0dG9uLnByb3AoJ2Rpc2FibGVk JywgdHJ1ZSk7CisgICAgICBpdCgnc2hvdWxkIGRpc2FibGUgdGhlIGRlbGV0ZSByb3cgYnV0dG9u JywgZnVuY3Rpb24gKCkgeworICAgICAgICBleHBlY3QoJCgnI2J0bi1kZWxldGUtcm93JykucHJv cCgnZGlzYWJsZWQnKSkudG9CZVRydXRoeSgpOworICAgICAgfSk7CiAKLSAgICAgIHNlbGVjdGlv blNweSA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCdzZWxlY3Rpb25TcHknLCBbCi0gICAgICAgICdz ZXRTZWxlY3RlZFJvd3MnLAotICAgICAgICAnZ2V0U2VsZWN0ZWRSYW5nZXMnLAotICAgICAgXSk7 Ci0gICAgfSk7CisgICAgICBpdCgnc2hvdWxkIGRpc2FibGUgdGhlIGNvcHkgcm93IGJ1dHRvbics IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXhwZWN0KCQoJyNidG4tY29weS1yb3cnKS5wcm9wKCdk aXNhYmxlZCcpKS50b0JlVHJ1dGh5KCk7CisgICAgICB9KTsKIAotICAgIGFmdGVyRWFjaChmdW5j dGlvbiAoKSB7Ci0gICAgICBjb3B5QnV0dG9uLnJlbW92ZSgpOwotICAgICAgZGVsZXRlQnV0dG9u LnJlbW92ZSgpOworICAgICAgaXQoJ3Nob3VsZCBjbGVhciBzdGFnZWQgcm93cycsIGZ1bmN0aW9u ICgpIHsKKyAgICAgICAgZXhwZWN0KHNxbEVkaXRvck9iai5lZGl0b3IuaGFuZGxlci5kYXRhX3N0 b3JlLnN0YWdlZF9yb3dzKS50b0VxdWFsKHt9KTsKKyAgICAgIH0pOwogICAgIH0pOwotICAgIGRl c2NyaWJlKCd3aGVuIG5vIGZ1bGwgcm93cyBhcmUgc2VsZWN0ZWQnLCBmdW5jdGlvbiAoKSB7Ci0g ICAgICBkZXNjcmliZSgnd2hlbiBub3RoaW5nIGlzIHNlbGVjdGVkJywgZnVuY3Rpb24gKCkgewot ICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICBzZWxlY3Rpb25TcHku Z2V0U2VsZWN0ZWRSYW5nZXMuYW5kLnJldHVyblZhbHVlKFtdKTsKLSAgICAgICAgICBzcWxFZGl0 b3JPYmouc2VsZWN0aW9uID0gc2VsZWN0aW9uU3B5OwotICAgICAgICAgIFNldFN0YWdlZFJvd3Mu Y2FsbChzcWxFZGl0b3JPYmosIHt9LCB7fSk7Ci0gICAgICAgIH0pOwogCi0gICAgICAgIGl0KCdz aG91bGQgZGlzYWJsZSB0aGUgZGVsZXRlIHJvdyBidXR0b24nLCBmdW5jdGlvbiAoKSB7Ci0gICAg ICAgICAgZXhwZWN0KCQoJyNidG4tZGVsZXRlLXJvdycpLnByb3AoJ2Rpc2FibGVkJykpLnRvQmVU cnV0aHkoKTsKLSAgICAgICAgfSk7CisgICAgZGVzY3JpYmUoJ3doZW4gdGhlcmUgaXMgYSBzZWxl Y3Rpb24nLCBmdW5jdGlvbiAoKSB7CisgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKKyAg ICAgICAgdmFyIHJhbmdlID0geworICAgICAgICAgIGZyb21DZWxsOiAwLAorICAgICAgICAgIHRv Q2VsbDogMCwKKyAgICAgICAgICBmcm9tUm93OiAxLAorICAgICAgICAgIHRvUm93OiAxLAorICAg ICAgICB9OwogCi0gICAgICAgIGl0KCdzaG91bGQgZGlzYWJsZSB0aGUgY29weSByb3cgYnV0dG9u JywgZnVuY3Rpb24gKCkgewotICAgICAgICAgIGV4cGVjdCgkKCcjYnRuLWNvcHktcm93JykucHJv cCgnZGlzYWJsZWQnKSkudG9CZVRydXRoeSgpOwotICAgICAgICB9KTsKKyAgICAgICAgc2VsZWN0 aW9uU3B5LmdldFNlbGVjdGVkUmFuZ2VzLmFuZC5yZXR1cm5WYWx1ZShbcmFuZ2VdKTsKKyAgICAg ICAgc3FsRWRpdG9yT2JqLnNlbGVjdGlvbiA9IHNlbGVjdGlvblNweTsKKyAgICAgICAgU2V0U3Rh Z2VkUm93cy5jYWxsKHNxbEVkaXRvck9iaiwge30sIHt9KTsKKyAgICAgIH0pOwogCi0gICAgICAg IGl0KCdzaG91bGQgY2xlYXIgc3RhZ2VkIHJvd3MnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAg ZXhwZWN0KHNxbEVkaXRvck9iai5lZGl0b3IuaGFuZGxlci5kYXRhX3N0b3JlLnN0YWdlZF9yb3dz KS50b0VxdWFsKHt9KTsKLSAgICAgICAgfSk7CisgICAgICBpdCgnc2hvdWxkIGRpc2FibGUgdGhl IGRlbGV0ZSByb3cgYnV0dG9uJywgZnVuY3Rpb24gKCkgeworICAgICAgICBleHBlY3QoJCgnI2J0 bi1kZWxldGUtcm93JykucHJvcCgnZGlzYWJsZWQnKSkudG9CZVRydXRoeSgpOwogICAgICAgfSk7 CiAKLSAgICAgIGRlc2NyaWJlKCd3aGVuIHRoZXJlIGlzIGEgc2VsZWN0aW9uJywgZnVuY3Rpb24g KCkgewotICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICB2YXIgcmFu Z2UgPSB7Ci0gICAgICAgICAgICBmcm9tQ2VsbDogMCwKLSAgICAgICAgICAgIHRvQ2VsbDogMCwK LSAgICAgICAgICAgIGZyb21Sb3c6IDEsCi0gICAgICAgICAgICB0b1JvdzogMSwKLSAgICAgICAg ICB9OwotCi0gICAgICAgICAgc2VsZWN0aW9uU3B5LmdldFNlbGVjdGVkUmFuZ2VzLmFuZC5yZXR1 cm5WYWx1ZShbcmFuZ2VdKTsKLSAgICAgICAgICBzcWxFZGl0b3JPYmouc2VsZWN0aW9uID0gc2Vs ZWN0aW9uU3B5OwotICAgICAgICAgIFNldFN0YWdlZFJvd3MuY2FsbChzcWxFZGl0b3JPYmosIHt9 LCB7fSk7Ci0gICAgICAgIH0pOworICAgICAgaXQoJ3Nob3VsZCBkaXNhYmxlIHRoZSBjb3B5IHJv dyBidXR0b24nLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGV4cGVjdCgkKCcjYnRuLWNvcHktcm93 JykucHJvcCgnZGlzYWJsZWQnKSkudG9CZUZhbHN5KCk7CisgICAgICB9KTsKIAotICAgICAgICBp dCgnc2hvdWxkIGRpc2FibGUgdGhlIGRlbGV0ZSByb3cgYnV0dG9uJywgZnVuY3Rpb24gKCkgewot ICAgICAgICAgIGV4cGVjdCgkKCcjYnRuLWRlbGV0ZS1yb3cnKS5wcm9wKCdkaXNhYmxlZCcpKS50 b0JlVHJ1dGh5KCk7Ci0gICAgICAgIH0pOworICAgICAgaXQoJ3Nob3VsZCBjbGVhciBzdGFnZWQg cm93cycsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXhwZWN0KHNxbEVkaXRvck9iai5lZGl0b3Iu aGFuZGxlci5kYXRhX3N0b3JlLnN0YWdlZF9yb3dzKS50b0VxdWFsKHt9KTsKKyAgICAgIH0pOwor ICAgIH0pOworICB9KTsKIAotICAgICAgICBpdCgnc2hvdWxkIGRpc2FibGUgdGhlIGNvcHkgcm93 IGJ1dHRvbicsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICBleHBlY3QoJCgnI2J0bi1jb3B5LXJv dycpLnByb3AoJ2Rpc2FibGVkJykpLnRvQmVGYWxzeSgpOwotICAgICAgICB9KTsKKyAgZGVzY3Jp YmUoJ3doZW4gMiBmdWxsIHJvd3MgYXJlIHNlbGVjdGVkJywgZnVuY3Rpb24gKCkgeworICAgIGJl Zm9yZUVhY2goZnVuY3Rpb24gKCkgeworICAgICAgdmFyIHJhbmdlMSA9IHsKKyAgICAgICAgZnJv bUNlbGw6IDAsCisgICAgICAgIHRvQ2VsbDogMSwKKyAgICAgICAgZnJvbVJvdzogMSwKKyAgICAg ICAgdG9Sb3c6IDEsCisgICAgICB9OworICAgICAgdmFyIHJhbmdlMiA9IHsKKyAgICAgICAgZnJv bUNlbGw6IDAsCisgICAgICAgIHRvQ2VsbDogMSwKKyAgICAgICAgZnJvbVJvdzogMiwKKyAgICAg ICAgdG9Sb3c6IDIsCisgICAgICB9OwogCi0gICAgICAgIGl0KCdzaG91bGQgY2xlYXIgc3RhZ2Vk IHJvd3MnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgZXhwZWN0KHNxbEVkaXRvck9iai5lZGl0 b3IuaGFuZGxlci5kYXRhX3N0b3JlLnN0YWdlZF9yb3dzKS50b0VxdWFsKHt9KTsKLSAgICAgICAg fSk7Ci0gICAgICB9KTsKKyAgICAgIHNlbGVjdGlvblNweS5nZXRTZWxlY3RlZFJhbmdlcy5hbmQu cmV0dXJuVmFsdWUoW3JhbmdlMSwgcmFuZ2UyXSk7CisgICAgICBzcWxFZGl0b3JPYmouc2VsZWN0 aW9uID0gc2VsZWN0aW9uU3B5OwogICAgIH0pOwogCi0gICAgZGVzY3JpYmUoJ3doZW4gMiBmdWxs IHJvd3MgYXJlIHNlbGVjdGVkJywgZnVuY3Rpb24gKCkgewotICAgICAgYmVmb3JlRWFjaChmdW5j dGlvbiAoKSB7Ci0gICAgICAgIHZhciByYW5nZTEgPSB7Ci0gICAgICAgICAgZnJvbUNlbGw6IDAs Ci0gICAgICAgICAgdG9DZWxsOiAxLAotICAgICAgICAgIGZyb21Sb3c6IDEsCi0gICAgICAgICAg dG9Sb3c6IDEsCi0gICAgICAgIH07Ci0gICAgICAgIHZhciByYW5nZTIgPSB7Ci0gICAgICAgICAg ZnJvbUNlbGw6IDAsCi0gICAgICAgICAgdG9DZWxsOiAxLAotICAgICAgICAgIGZyb21Sb3c6IDIs Ci0gICAgICAgICAgdG9Sb3c6IDIsCi0gICAgICAgIH07CisgICAgZGVzY3JpYmUoJ3doZW4gdGFi bGUgZG9lcyBub3QgaGF2ZSBwcmltYXJ5IGtleXMnLCBmdW5jdGlvbiAoKSB7CisgICAgICBpdCgn c2hvdWxkIGVuYWJsZSB0aGUgY29weSByb3cgYnV0dG9uJywgZnVuY3Rpb24gKCkgeworICAgICAg ICBTZXRTdGFnZWRSb3dzLmNhbGwoc3FsRWRpdG9yT2JqLCB7fSwge30pOworICAgICAgICBleHBl Y3QoJCgnI2J0bi1jb3B5LXJvdycpLnByb3AoJ2Rpc2FibGVkJykpLnRvQmVGYWxzeSgpOworICAg ICAgfSk7CiAKLSAgICAgICAgc2VsZWN0aW9uU3B5LmdldFNlbGVjdGVkUmFuZ2VzLmFuZC5yZXR1 cm5WYWx1ZShbcmFuZ2UxLCByYW5nZTJdKTsKLSAgICAgICAgc3FsRWRpdG9yT2JqLnNlbGVjdGlv biA9IHNlbGVjdGlvblNweTsKKyAgICAgIGl0KCdzaG91bGQgbm90IGVuYWJsZSB0aGUgZGVsZXRl IHJvdyBidXR0b24nLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIFNldFN0YWdlZFJvd3MuY2FsbChz cWxFZGl0b3JPYmosIHt9LCB7fSk7CisgICAgICAgIGV4cGVjdCgkKCcjYnRuLWRlbGV0ZS1yb3cn KS5wcm9wKCdkaXNhYmxlZCcpKS50b0JlVHJ1dGh5KCk7CiAgICAgICB9KTsKIAotICAgICAgZGVz Y3JpYmUoJ3doZW4gdGFibGUgZG9lcyBub3QgaGF2ZSBwcmltYXJ5IGtleXMnLCBmdW5jdGlvbiAo KSB7Ci0gICAgICAgIGl0KCdzaG91bGQgZW5hYmxlIHRoZSBjb3B5IHJvdyBidXR0b24nLCBmdW5j dGlvbiAoKSB7Ci0gICAgICAgICAgU2V0U3RhZ2VkUm93cy5jYWxsKHNxbEVkaXRvck9iaiwge30s IHt9KTsKLSAgICAgICAgICBleHBlY3QoJCgnI2J0bi1jb3B5LXJvdycpLnByb3AoJ2Rpc2FibGVk JykpLnRvQmVGYWxzeSgpOwotICAgICAgICB9KTsKKyAgICAgIGl0KCdzaG91bGQgdXBkYXRlIHN0 YWdlZCByb3dzIHdpdGggdGhlIF9fdGVtcF9QSyB2YWx1ZSBvZiB0aGUgbmV3IFNlbGVjdGVkIFJv d3MnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIFNldFN0YWdlZFJvd3MuY2FsbChzcWxFZGl0b3JP YmosIHt9LCB7fSk7CisgICAgICAgIGV4cGVjdChzcWxFZGl0b3JPYmouZWRpdG9yLmhhbmRsZXIu ZGF0YV9zdG9yZS5zdGFnZWRfcm93cykudG9FcXVhbCh7JzQ1Nic6IHt9LCAnNzg5Jzoge319KTsK KyAgICAgIH0pOwogCi0gICAgICAgIGl0KCdzaG91bGQgbm90IGVuYWJsZSB0aGUgZGVsZXRlIHJv dyBidXR0b24nLCBmdW5jdGlvbiAoKSB7CisgICAgICBkZXNjcmliZSgndGhlIHVzZXIgY2FuIGVk aXQnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGl0KCdzaG91bGQgZW5hYmxlIHRoZSBkZWxldGUg cm93IGJ1dHRvbicsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICBzcWxFZGl0b3JPYmouZWRpdG9y LmhhbmRsZXIuY2FuX2VkaXQgPSB0cnVlOwogICAgICAgICAgIFNldFN0YWdlZFJvd3MuY2FsbChz cWxFZGl0b3JPYmosIHt9LCB7fSk7Ci0gICAgICAgICAgZXhwZWN0KCQoJyNidG4tZGVsZXRlLXJv dycpLnByb3AoJ2Rpc2FibGVkJykpLnRvQmVUcnV0aHkoKTsKKyAgICAgICAgICBleHBlY3QoJCgn I2J0bi1kZWxldGUtcm93JykucHJvcCgnZGlzYWJsZWQnKSkudG9CZUZhbHN5KCk7CiAgICAgICAg IH0pOworICAgICAgfSk7CisgICAgfSk7CiAKLSAgICAgICAgaXQoJ3Nob3VsZCB1cGRhdGUgc3Rh Z2VkIHJvd3Mgd2l0aCB0aGUgX190ZW1wX1BLIHZhbHVlIG9mIHRoZSBuZXcgU2VsZWN0ZWQgUm93 cycsIGZ1bmN0aW9uICgpIHsKKyAgICBkZXNjcmliZSgnd2hlbiB0YWJsZSBoYXMgcHJpbWFyeSBr ZXlzJywgZnVuY3Rpb24gKCkgeworICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7CisgICAg ICAgIHNxbEVkaXRvck9iai5rZXlzID0geydhIHBrIGNvbHVtbic6ICd2YXJjaGFyJ307CisgICAg ICAgIHNxbEVkaXRvck9iai5lZGl0b3IuaGFuZGxlci5kYXRhX3N0b3JlLnN0YWdlZF9yb3dzID0g eyc0NTYnOiB7J2EgcGsgY29sdW1uJzogJ3RocmVlJ319OworICAgICAgfSk7CisKKyAgICAgIGRl c2NyaWJlKCdzZWxlY3RlZCByb3dzIGhhdmUgcHJpbWFyeSBrZXknLCBmdW5jdGlvbiAoKSB7Cisg ICAgICAgIGl0KCdzaG91bGQgc2V0IHRoZSBzdGFnZWQgcm93cyBjb3JyZWN0bHknLCBmdW5jdGlv biAoKSB7CiAgICAgICAgICAgU2V0U3RhZ2VkUm93cy5jYWxsKHNxbEVkaXRvck9iaiwge30sIHt9 KTsKLSAgICAgICAgICBleHBlY3Qoc3FsRWRpdG9yT2JqLmVkaXRvci5oYW5kbGVyLmRhdGFfc3Rv cmUuc3RhZ2VkX3Jvd3MpLnRvRXF1YWwoeyc0NTYnOiB7fSwgJzc4OSc6IHt9fSk7CisgICAgICAg ICAgZXhwZWN0KHNxbEVkaXRvck9iai5lZGl0b3IuaGFuZGxlci5kYXRhX3N0b3JlLnN0YWdlZF9y b3dzKS50b0VxdWFsKAorICAgICAgICAgICAgeyc0NTYnOiB7J2EgcGsgY29sdW1uJzogJ3RocmVl J30sICc3ODknOiB7J2EgcGsgY29sdW1uJzogJ2ZpdmUnfX0pOwogICAgICAgICB9KTsKIAotICAg ICAgICBkZXNjcmliZSgndGhlIHVzZXIgY2FuIGVkaXQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAg ICAgaXQoJ3Nob3VsZCBlbmFibGUgdGhlIGRlbGV0ZSByb3cgYnV0dG9uJywgZnVuY3Rpb24gKCkg ewotICAgICAgICAgICAgc3FsRWRpdG9yT2JqLmVkaXRvci5oYW5kbGVyLmNhbl9lZGl0ID0gdHJ1 ZTsKLSAgICAgICAgICAgIFNldFN0YWdlZFJvd3MuY2FsbChzcWxFZGl0b3JPYmosIHt9LCB7fSk7 Ci0gICAgICAgICAgICBleHBlY3QoJCgnI2J0bi1kZWxldGUtcm93JykucHJvcCgnZGlzYWJsZWQn KSkudG9CZUZhbHN5KCk7Ci0gICAgICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgbm90IGNs ZWFyIHNlbGVjdGVkIHJvd3MgaW4gQ2VsbCBTZWxlY3Rpb24gTW9kZWwnLCBmdW5jdGlvbiAoKSB7 CisgICAgICAgICAgU2V0U3RhZ2VkUm93cy5jYWxsKHNxbEVkaXRvck9iaiwge30sIHt9KTsKKyAg ICAgICAgICBleHBlY3Qoc3FsRWRpdG9yT2JqLnNlbGVjdGlvbi5zZXRTZWxlY3RlZFJvd3MpLm5v dC50b0hhdmVCZWVuQ2FsbGVkV2l0aCgpOwogICAgICAgICB9KTsKICAgICAgIH0pOwogCi0gICAg ICBkZXNjcmliZSgnd2hlbiB0YWJsZSBoYXMgcHJpbWFyeSBrZXlzJywgZnVuY3Rpb24gKCkgewor ICAgICAgZGVzY3JpYmUoJ3NlbGVjdGVkIHJvd3MgbWlzc2luZyBwcmltYXJ5IGtleScsIGZ1bmN0 aW9uICgpIHsKICAgICAgICAgYmVmb3JlRWFjaChmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgc3Fs RWRpdG9yT2JqLmtleXMgPSB7J2EgcGsgY29sdW1uJzogJ3ZhcmNoYXInfTsKLSAgICAgICAgICBz cWxFZGl0b3JPYmouZWRpdG9yLmhhbmRsZXIuZGF0YV9zdG9yZS5zdGFnZWRfcm93cyA9IHsnNDU2 JzogezA6ICd0aHJlZSd9fTsKLSAgICAgICAgfSk7CisgICAgICAgICAgdmFyIGRhdGEgPSBbeydh IHBrIGNvbHVtbic6ICdvbmUnLCAnc29tZSBjb2x1bW4nOiAndHdvJywgJ19fdGVtcF9QSyc6ICcx MjMnfSwKKyAgICAgICAgICAgICAgICB7J3NvbWUgY29sdW1uJzogJ2ZvdXInLCAnX190ZW1wX1BL JzogJzQ1Nid9LAorICAgICAgICAgICAgICAgIHsnc29tZSBjb2x1bW4nOiAnc2l4JywgJ19fdGVt cF9QSyc6ICc3ODknfSwKKyAgICAgICAgICAgICAgICB7J2EgcGsgY29sdW1uJzogJ3NldmVuJywg J3NvbWUgY29sdW1uJzogJ2VpZ2h0JywgJ19fdGVtcF9QSyc6ICc0MzInfV0sCisgICAgICAgICAg ICBkYXRhVmlldyA9IG5ldyBTbGljay5EYXRhLkRhdGFWaWV3KCk7CiAKLSAgICAgICAgZGVzY3Jp YmUoJ3NlbGVjdGVkIHJvd3MgaGF2ZSBwcmltYXJ5IGtleScsIGZ1bmN0aW9uICgpIHsKLSAgICAg ICAgICBpdCgnc2hvdWxkIHNldCB0aGUgc3RhZ2VkIHJvd3MgY29ycmVjdGx5JywgZnVuY3Rpb24g KCkgewotICAgICAgICAgICAgU2V0U3RhZ2VkUm93cy5jYWxsKHNxbEVkaXRvck9iaiwge30sIHt9 KTsKLSAgICAgICAgICAgIGV4cGVjdChzcWxFZGl0b3JPYmouZWRpdG9yLmhhbmRsZXIuZGF0YV9z dG9yZS5zdGFnZWRfcm93cykudG9FcXVhbCgKLSAgICAgICAgICAgICAgeyc0NTYnOiB7MDogJ3Ro cmVlJ30sICc3ODknOiB7MDogJ2ZpdmUnfX0pOwotICAgICAgICAgIH0pOworICAgICAgICAgIGRh dGFWaWV3LnNldEl0ZW1zKGRhdGEsICdfX3RlbXBfUEsnKTsKIAotICAgICAgICAgIGl0KCdzaG91 bGQgbm90IGNsZWFyIHNlbGVjdGVkIHJvd3MgaW4gQ2VsbCBTZWxlY3Rpb24gTW9kZWwnLCBmdW5j dGlvbiAoKSB7Ci0gICAgICAgICAgICBTZXRTdGFnZWRSb3dzLmNhbGwoc3FsRWRpdG9yT2JqLCB7 fSwge30pOwotICAgICAgICAgICAgZXhwZWN0KHNxbEVkaXRvck9iai5zZWxlY3Rpb24uc2V0U2Vs ZWN0ZWRSb3dzKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoKTsKLSAgICAgICAgICB9KTsKKyAg ICAgICAgICBncmlkU3B5LmdldERhdGEuYW5kLnJldHVyblZhbHVlKGRhdGFWaWV3KTsKICAgICAg ICAgfSk7CiAKLSAgICAgICAgZGVzY3JpYmUoJ3NlbGVjdGVkIHJvd3MgbWlzc2luZyBwcmltYXJ5 IGtleScsIGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsK LSAgICAgICAgICAgIGdyaWRTcHkuZ2V0RGF0YS5hbmQucmV0dXJuVmFsdWUoWwotICAgICAgICAg ICAgICB7MDogJ29uZScsIDE6ICd0d28nLCBfX3RlbXBfUEs6ICcxMjMnfSwKLSAgICAgICAgICAg ICAgezE6ICdmb3VyJywgX190ZW1wX1BLOiAnNDU2J30sCi0gICAgICAgICAgICAgIHsxOiAnc2l4 JywgX190ZW1wX1BLOiAnNzg5J30sCi0gICAgICAgICAgICAgIHswOiAnc2V2ZW4nLCAxOiAnZWln aHQnLCBfX3RlbXBfUEs6ICc0MzInfSwKLSAgICAgICAgICAgIF0pOwotICAgICAgICAgIH0pOwot Ci0gICAgICAgICAgaXQoJ3Nob3VsZCBjbGVhciB0aGUgc3RhZ2VkIHJvd3MnLCBmdW5jdGlvbiAo KSB7Ci0gICAgICAgICAgICBTZXRTdGFnZWRSb3dzLmNhbGwoc3FsRWRpdG9yT2JqLCB7fSwge30p OwotICAgICAgICAgICAgZXhwZWN0KHNxbEVkaXRvck9iai5lZGl0b3IuaGFuZGxlci5kYXRhX3N0 b3JlLnN0YWdlZF9yb3dzKS50b0VxdWFsKHt9KTsKLSAgICAgICAgICB9KTsKKyAgICAgICAgaXQo J3Nob3VsZCBjbGVhciB0aGUgc3RhZ2VkIHJvd3MnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg U2V0U3RhZ2VkUm93cy5jYWxsKHNxbEVkaXRvck9iaiwge30sIHt9KTsKKyAgICAgICAgICBleHBl Y3Qoc3FsRWRpdG9yT2JqLmVkaXRvci5oYW5kbGVyLmRhdGFfc3RvcmUuc3RhZ2VkX3Jvd3MpLnRv RXF1YWwoe30pOworICAgICAgICB9KTsKIAotICAgICAgICAgIGl0KCdzaG91bGQgY2xlYXIgc2Vs ZWN0ZWQgcm93cyBpbiBDZWxsIFNlbGVjdGlvbiBNb2RlbCcsIGZ1bmN0aW9uICgpIHsKLSAgICAg ICAgICAgIFNldFN0YWdlZFJvd3MuY2FsbChzcWxFZGl0b3JPYmosIHt9LCB7fSk7Ci0gICAgICAg ICAgICBleHBlY3Qoc3FsRWRpdG9yT2JqLnNlbGVjdGlvbi5zZXRTZWxlY3RlZFJvd3MpLnRvSGF2 ZUJlZW5DYWxsZWRXaXRoKFtdKTsKLSAgICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCBj bGVhciBzZWxlY3RlZCByb3dzIGluIENlbGwgU2VsZWN0aW9uIE1vZGVsJywgZnVuY3Rpb24gKCkg eworICAgICAgICAgIFNldFN0YWdlZFJvd3MuY2FsbChzcWxFZGl0b3JPYmosIHt9LCB7fSk7Cisg ICAgICAgICAgZXhwZWN0KHNxbEVkaXRvck9iai5zZWxlY3Rpb24uc2V0U2VsZWN0ZWRSb3dzKS50 b0hhdmVCZWVuQ2FsbGVkV2l0aChbXSk7CiAgICAgICAgIH0pOworICAgICAgfSk7CiAKLSAgICAg ICAgZGVzY3JpYmUoJ3doZW4gdGhlIHNlbGVjdGVkIHJvdyBpcyBhIG5ldyByb3cnLCBmdW5jdGlv biAoKSB7Ci0gICAgICAgICAgdmFyIHBhcmVudERpdjsKLSAgICAgICAgICBiZWZvcmVFYWNoKGZ1 bmN0aW9uICgpIHsKLSAgICAgICAgICAgIHZhciBjaGlsZERpdiA9ICQoJzxkaXY+PC9kaXY+Jyk7 Ci0gICAgICAgICAgICBwYXJlbnREaXYgPSAkKCc8ZGl2IGNsYXNzPSJuZXdfcm93Ij48L2Rpdj4n KTsKLSAgICAgICAgICAgIHBhcmVudERpdi5hcHBlbmQoY2hpbGREaXYpOwotICAgICAgICAgICAg JCgnYm9keScpLmFwcGVuZChwYXJlbnREaXYpOwotICAgICAgICAgICAgZ3JpZFNweS5nZXRDZWxs Tm9kZS5hbmQucmV0dXJuVmFsdWUoY2hpbGREaXYpOwotICAgICAgICAgICAgU2V0U3RhZ2VkUm93 cy5jYWxsKHNxbEVkaXRvck9iaiwge30sIHt9KTsKLSAgICAgICAgICB9KTsKKyAgICAgIGRlc2Ny aWJlKCd3aGVuIHRoZSBzZWxlY3RlZCByb3cgaXMgYSBuZXcgcm93JywgZnVuY3Rpb24gKCkgewor ICAgICAgICB2YXIgcGFyZW50RGl2OworICAgICAgICBiZWZvcmVFYWNoKGZ1bmN0aW9uICgpIHsK KyAgICAgICAgICB2YXIgY2hpbGREaXYgPSAkKCc8ZGl2PjwvZGl2PicpOworICAgICAgICAgIHBh cmVudERpdiA9ICQoJzxkaXYgY2xhc3M9Im5ld19yb3ciPjwvZGl2PicpOworICAgICAgICAgIHBh cmVudERpdi5hcHBlbmQoY2hpbGREaXYpOworICAgICAgICAgICQoJ2JvZHknKS5hcHBlbmQocGFy ZW50RGl2KTsKKyAgICAgICAgICBncmlkU3B5LmdldENlbGxOb2RlLmFuZC5yZXR1cm5WYWx1ZShj aGlsZERpdik7CisgICAgICAgICAgU2V0U3RhZ2VkUm93cy5jYWxsKHNxbEVkaXRvck9iaiwge30s IHt9KTsKKyAgICAgICAgfSk7CiAKLSAgICAgICAgICBhZnRlckVhY2goZnVuY3Rpb24gKCkgewot ICAgICAgICAgICAgcGFyZW50RGl2LnJlbW92ZSgpOwotICAgICAgICAgIH0pOworICAgICAgICBh ZnRlckVhY2goZnVuY3Rpb24gKCkgeworICAgICAgICAgIHBhcmVudERpdi5yZW1vdmUoKTsKKyAg ICAgICAgfSk7CiAKLSAgICAgICAgICBpdCgnc2hvdWxkIG5vdCBjbGVhciB0aGUgc3RhZ2VkIHJv d3MnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBleHBlY3Qoc3FsRWRpdG9yT2JqLmVkaXRv ci5oYW5kbGVyLmRhdGFfc3RvcmUuc3RhZ2VkX3Jvd3MpLnRvRXF1YWwoewotICAgICAgICAgICAg ICAnNDU2JzogezA6ICd0aHJlZSd9LAotICAgICAgICAgICAgICAnNzg5JzogezA6ICdmaXZlJ30s Ci0gICAgICAgICAgICB9KTsKKyAgICAgICAgaXQoJ3Nob3VsZCBub3QgY2xlYXIgdGhlIHN0YWdl ZCByb3dzJywgZnVuY3Rpb24gKCkgeworICAgICAgICAgIGV4cGVjdChzcWxFZGl0b3JPYmouZWRp dG9yLmhhbmRsZXIuZGF0YV9zdG9yZS5zdGFnZWRfcm93cykudG9FcXVhbCh7CisgICAgICAgICAg ICAnNDU2JzogeydhIHBrIGNvbHVtbic6ICd0aHJlZSd9LAorICAgICAgICAgICAgJzc4OSc6IHsn YSBwayBjb2x1bW4nOiAnZml2ZSd9LAogICAgICAgICAgIH0pOworICAgICAgICB9KTsKIAotICAg ICAgICAgIGl0KCdzaG91bGQgbm90IGNsZWFyIHNlbGVjdGVkIHJvd3MgaW4gQ2VsbCBTZWxlY3Rp b24gTW9kZWwnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgICBleHBlY3Qoc3FsRWRpdG9yT2Jq LnNlbGVjdGlvbi5zZXRTZWxlY3RlZFJvd3MpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7Ci0gICAg ICAgICAgfSk7CisgICAgICAgIGl0KCdzaG91bGQgbm90IGNsZWFyIHNlbGVjdGVkIHJvd3MgaW4g Q2VsbCBTZWxlY3Rpb24gTW9kZWwnLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgZXhwZWN0KHNx bEVkaXRvck9iai5zZWxlY3Rpb24uc2V0U2VsZWN0ZWRSb3dzKS5ub3QudG9IYXZlQmVlbkNhbGxl ZCgpOwogICAgICAgICB9KTsKICAgICAgIH0pOwogICAgIH0pOwogICB9KTsKIH0pOworCmRpZmYg LS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3NlbGVjdGlvbi94Y2VsbF9zZWxlY3Rp b25fbW9kZWxfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2VsZWN0aW9uL3hj ZWxsX3NlbGVjdGlvbl9tb2RlbF9zcGVjLmpzCmluZGV4IGY0MWQ5NmMuLmE3ZjE5YWEgMTAwNjQ0 Ci0tLSBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2VsZWN0aW9uL3hjZWxsX3NlbGVjdGlv bl9tb2RlbF9zcGVjLmpzCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2VsZWN0aW9u L3hjZWxsX3NlbGVjdGlvbl9tb2RlbF9zcGVjLmpzCkBAIC0zMywxNCArMzMsMTcgQEAgZGVzY3Jp YmUoJ1hDZWxsU2VsZWN0aW9uTW9kZWwnLCBmdW5jdGlvbiAoKSB7CiAgICAgfSwgewogICAgICAg aWQ6ICcxJywKICAgICAgIG5hbWU6ICdzb21lLWNvbHVtbi1uYW1lJywKKyAgICAgIGZpZWxkOiAn c29tZS1jb2x1bW4tbmFtZScsCiAgICAgICBwb3M6IDAsCiAgICAgfSwgewogICAgICAgaWQ6ICdz ZWNvbmQtY29sdW1uLWlkJywKICAgICAgIG5hbWU6ICdzZWNvbmQgY29sdW1uJywKKyAgICAgIGZp ZWxkOiAnc2Vjb25kIGNvbHVtbicsCiAgICAgICBwb3M6IDEsCiAgICAgfSwgewogICAgICAgaWQ6 ICd0aGlyZC1jb2x1bW4taWQnLAogICAgICAgbmFtZTogJ3RoaXJkIGNvbHVtbicsCisgICAgICBm aWVsZDogJ3RoaXJkIGNvbHVtbicsCiAgICAgICBwb3M6IDIsCiAgICAgfSwKICAgICBdOwpAQCAt NTIsMTMgKzU1LDE1IEBAIGRlc2NyaWJlKCdYQ2VsbFNlbGVjdGlvbk1vZGVsJywgZnVuY3Rpb24g KCkgewogICAgICAgICAnc2Vjb25kIGNvbHVtbic6ICdzZWNvbmQgdmFsdWUgJyArIGksCiAgICAg ICAgICd0aGlyZCBjb2x1bW4nOiAndGhpcmQgdmFsdWUgJyArIGksCiAgICAgICAgICdmb3VydGgg Y29sdW1uJzogJ2ZvdXJ0aCB2YWx1ZSAnICsgaSwKKyAgICAgICAgJ19fdGVtcF9QSyc6ICcxMjMn ICsgaSwKICAgICAgIH0pOwogICAgIH0KICAgICBjb250YWluZXIgPSAkKCc8ZGl2PjwvZGl2Picp OworICAgIHZhciBkYXRhVmlldyA9IG5ldyBTbGljay5EYXRhLkRhdGFWaWV3KCk7CiAgICAgY29u dGFpbmVyLmhlaWdodCg5OTk5KTsKICAgICBjb250YWluZXIud2lkdGgoOTk5OSk7Ci0KLSAgICBn cmlkID0gbmV3IFNsaWNrR3JpZChjb250YWluZXIsIGRhdGEsIGNvbHVtbnMpOworICAgIGRhdGFW aWV3LnNldEl0ZW1zKGRhdGEsICdfX3RlbXBfUEsnKTsKKyAgICBncmlkID0gbmV3IFNsaWNrR3Jp ZChjb250YWluZXIsIGRhdGFWaWV3LCBjb2x1bW5zKTsKICAgICBncmlkLnNldFNlbGVjdGlvbk1v ZGVsKG5ldyBYQ2VsbFNlbGVjdGlvbk1vZGVsKCkpOwogICAgICQoJ2JvZHknKS5hcHBlbmQoY29u dGFpbmVyKTsKICAgfSk7CmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3Ns aWNrZ3JpZC9ldmVudF9oYW5kbGVycy9oYW5kbGVfcXVlcnlfb3V0cHV0X2tleWJvYXJkX2V2ZW50 X3NwZWMuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3NsaWNrZ3JpZC9ldmVudF9oYW5k bGVycy9oYW5kbGVfcXVlcnlfb3V0cHV0X2tleWJvYXJkX2V2ZW50X3NwZWMuanMKaW5kZXggZTJl ZGFmNy4uODA3ZTQ2OCAxMDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9zbGlj a2dyaWQvZXZlbnRfaGFuZGxlcnMvaGFuZGxlX3F1ZXJ5X291dHB1dF9rZXlib2FyZF9ldmVudF9z cGVjLmpzCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc2xpY2tncmlkL2V2ZW50X2hh bmRsZXJzL2hhbmRsZV9xdWVyeV9vdXRwdXRfa2V5Ym9hcmRfZXZlbnRfc3BlYy5qcwpAQCAtMjgs MjEgKzI4LDIyIEBAIGRlc2NyaWJlKCcjaGFuZGxlUXVlcnlPdXRwdXRLZXlib2FyZEV2ZW50Jywg ZnVuY3Rpb24gKCkgewogICAgICAgbWV0YUtleTogZmFsc2UsCiAgICAgICB3aGljaDogLTEsCiAg ICAgICBrZXlDb2RlOiAtMSwKLSAgICAgIHByZXZlbnREZWZhdWx0OiBqYXNtaW5lLmNyZWF0ZVNw eSgncHJldmVudERlZmF1bHQnKSwKKyAgICAgIHByZXZlbnREZWZhdWx0OiBqYXNtaW5lLmNyZWF0 ZVNweSgncHJldmVudERlZmF1bHQnKQogICAgIH07CiAKLSAgICB2YXIgZGF0YSA9IFtbJycsICcw LDAtY2VsbC1jb250ZW50JywgJzAsMS1jZWxsLWNvbnRlbnQnXSwKLSAgICAgIFsnJywgJzEsMC1j ZWxsLWNvbnRlbnQnLCAnMSwxLWNlbGwtY29udGVudCddLAotICAgICAgWycnLCAnMiwwLWNlbGwt Y29udGVudCcsICcyLDEtY2VsbC1jb250ZW50J11dOwotICAgIHZhciBjb2x1bW5EZWZpbml0aW9u cyA9IFt7bmFtZTogJ2NoZWNrYm94Q29sdW1uJ30sIHtwb3M6IDEsIG5hbWU6ICdmaXJzdENvbHVt bid9LCB7Ci0gICAgICBwb3M6IDIsCi0gICAgICBuYW1lOiAnc2Vjb25kQ29sdW1uJywKLSAgICB9 XTsKLSAgICBncmlkID0gbmV3IFNsaWNrR3JpZCgkKCc8ZGl2PjwvZGl2PicpLCBkYXRhLCBjb2x1 bW5EZWZpbml0aW9ucyk7Ci0gICAgZ3JpZC5zZXRTZWxlY3Rpb25Nb2RlbChuZXcgWENlbGxTZWxl Y3Rpb25Nb2RlbCgpKTsKKyAgICB2YXIgZGF0YSA9IFt7J2NoZWNrYm94Q29sdW1uJzogJycsICdm aXJzdENvbHVtbic6ICcwLDAtY2VsbC1jb250ZW50JywgJ3NlY29uZENvbHVtbic6ICcwLDEtY2Vs bC1jb250ZW50JywgJ19fdGVtcF9QSyc6ICcxMjMnfSwKKyAgICAgICAgeydjaGVja2JveENvbHVt bic6ICcnLCAnZmlyc3RDb2x1bW4nOiAnMSwwLWNlbGwtY29udGVudCcsICdzZWNvbmRDb2x1bW4n OiAnMSwxLWNlbGwtY29udGVudCcsICdfX3RlbXBfUEsnOiAnNDU2J30sCisgICAgICAgIHsnY2hl Y2tib3hDb2x1bW4nOiAnJywgJ2ZpcnN0Q29sdW1uJzogJzIsMC1jZWxsLWNvbnRlbnQnLCAnc2Vj b25kQ29sdW1uJzogJzIsMS1jZWxsLWNvbnRlbnQnLCAnX190ZW1wX1BLJzogJzc4OSd9XSwKKyAg ICAgIGNvbHVtbkRlZmluaXRpb25zID0gW3tuYW1lOiAnY2hlY2tib3hDb2x1bW4nfSwKKyAgICAg ICAge3BvczogMSwgbmFtZTogJ2ZpcnN0Q29sdW1uJywgZmllbGQ6ICdmaXJzdENvbHVtbid9LAor ICAgICAgICB7IHBvczogMiwgbmFtZTogJ3NlY29uZENvbHVtbicsIGZpZWxkOiAnc2Vjb25kQ29s dW1uJ31dLAorICAgICAgZGF0YVZpZXcgPSBuZXcgU2xpY2suRGF0YS5EYXRhVmlldygpOwogCisg ICAgZ3JpZCA9IG5ldyBTbGljay5HcmlkKCQoJzxkaXY+PC9kaXY+JyksIGRhdGFWaWV3LCBjb2x1 bW5EZWZpbml0aW9ucyk7CisgICAgZ3JpZC5zZXRTZWxlY3Rpb25Nb2RlbChuZXcgWENlbGxTZWxl Y3Rpb25Nb2RlbCgpKTsKKyAgICBkYXRhVmlldy5zZXRJdGVtcyhkYXRhLCAnX190ZW1wX1BLJyk7 CiAgICAgc2xpY2tFdmVudCA9IHsKLSAgICAgIGdyaWQ6IGdyaWQsCisgICAgICBncmlkOiBncmlk CiAgICAgfTsKIAogICAgIHNweU9uKGNsaXBib2FyZCwgJ2NvcHlUZXh0VG9DbGlwYm9hcmQnKTsK --089e08229a705d554b0552d96783--