Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f456N-0007EC-Fj for pgadmin-hackers@arkaria.postgresql.org; Thu, 05 Apr 2018 13:38:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1f456L-0005T1-IN for pgadmin-hackers@arkaria.postgresql.org; Thu, 05 Apr 2018 13:38:53 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1f456K-0005Sr-Lx for pgadmin-hackers@lists.postgresql.org; Thu, 05 Apr 2018 13:38:53 +0000 Received: from mail-io0-x22b.google.com ([2607:f8b0:4001:c06::22b]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1f456C-00069r-CZ for pgadmin-hackers@postgresql.org; Thu, 05 Apr 2018 13:38:50 +0000 Received: by mail-io0-x22b.google.com with SMTP id 141so30623938iou.12 for ; Thu, 05 Apr 2018 06:38:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pivotal-io.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=7dNVhiijybVhSJIMZiZKMhbNvoSv109VfbcZGrnDOKk=; b=AnB0ihmzinOQgCiUcsgg5xb+SLTEV8qFHt74iK+mpCfv/Vqk++VvUdOT3NPRcS7rJX QKo6+fmXm3E8ln0rw5P/A/DatFvQ7Bcd5ba+Rj52RQYzyl1O6kh9Dj71zFlOvT4rXVZT +BT0rqy0MGw0wrRaI/A/CKHJaNt5eCroAU8107+ZL68vwVPab2JTfasHeBEyImKB8GsE 5aIWKE5tPxMt+v+TZVHrVCmY/4wb9fs8dmOAqpsPHXiL332Ep+0VoMxCYKTLQTK+/wyx Q9CWNbMzokFVkipkru3hNUivPqjRqWUv1UF7NroBfzhDa81Gz1xkjT8kmB3JzEslQfHD cuhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=7dNVhiijybVhSJIMZiZKMhbNvoSv109VfbcZGrnDOKk=; b=kNU6gT241gpmNPSN768toX2XsMpUQDfz4T8OjoL96CVgFPodT/0KiF/mNWDIlJdZod 9liPM2wN/zbKWO6CJ6Rg6pE2GftaayasrUg8nuI1aifnXnlGcYXzCcIEEdlDtp97pifu /ULjQMbmxL7w2N+PRS2F8IeqAxawtnlifkORn+9xx4bEZeqIIXTS7oGqiG+enBdntN9Q pUYD4hue+GU5yiSig5fUVmgqy6gIi6WPQJyIhBF0qSUmKjomBEuB3QNHb6oD3DRIT4Fg m/LZ+Vqx01/CZPkwbSs6Wk5BEBHaECQoO8R2MYLyMGQQMnhIU322ZT8SK4zUzC8Ux8FZ CxFg== X-Gm-Message-State: ALQs6tBmYmMYweVWQn0dkIP5u9H1SBBxXiQSu8X6BwWfH+TMR6DNYsfl bkrF1mN8QIZnzYN7wUcmeKFO9Rr+F2BWWtk4TUfL/g== X-Google-Smtp-Source: AIpwx4+ahi1jriFtJ95VXWqjbzU18UXvRllV7t/n60GczCRofvyDBiZQe6aPFjw19Ox3kFpcUAeUL5JlAp6GjeMt1Y4= X-Received: by 10.107.181.141 with SMTP id e135mr19723048iof.189.1522935522740; Thu, 05 Apr 2018 06:38:42 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Joao De Almeida Pereira Date: Thu, 05 Apr 2018 13:38:31 +0000 Message-ID: Subject: Re: [pgadmin4][patch] Initial patch to decouple from ACI Tree To: Khushboo Vashi Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary="001a114449ced999d805691a0e92" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --001a114449ced999d805691a0e92 Content-Type: multipart/alternative; boundary="001a114449ced999d305691a0e90" --001a114449ced999d305691a0e90 Content-Type: text/plain; charset="UTF-8" Hi Khushboo, Attached you can find both patches rebased Thanks On Thu, Apr 5, 2018 at 6:31 AM Khushboo Vashi < khushboo.vashi@enterprisedb.com> wrote: > Hi Joao, > > Can you please rebase the second patch? > > Thanks, > Khushboo > > > On Tue, Apr 3, 2018 at 12:15 AM, Joao De Almeida Pereira < > jdealmeidapereira@pivotal.io> wrote: > >> Hi Hackers, >> >> Attached you can find the patch that will start to decouple pgAdmin from >> ACITree library. >> This patch is intended to be merged after 3.0, because we do not want to >> cause any entropy or delay the release, but we want to start the discussion >> and show some code. >> >> This job that we started is a massive tech debt chore that will take some >> time to finalize and we would love the help of the community to do it. >> >> *Summary of the patch:* >> 0001 patch: >> - Creates a new tree that will allow us to create a separation between >> the application and ACI Tree >> - Creates a Fake Tree (Test double, for reference on the available test >> doubles: https://martinfowler.com/bliki/TestDouble.html) that can be >> used to inplace to replace the ACITree and also encapsulate the new tree >> behavior on our tests >> - Adds tests for all the tree functionalities >> >> 0002 patch: >> - Extracts, refactors, adds tests and remove dependency from ACI Tree on: >> - getTreeNodeHierarchy >> - on backup.js: menu_enabled, menu_enabled_server, >> start_backup_global_server, backup_objects >> - on datagrid.js: show_data_grid, get_panel_title, show_query_tool >> - Start using sprintf-js as Underscore.String is deprecating sprintf >> function >> >> This patch represents only 10 calls to ACITree.itemData out of 176 that >> are spread around our code >> >> >> *In Depth look on the process behind the patch:* >> >> We started writing this patch with the idea that we need to decouple >> pgAdmin4 from ACITree, because ACITree is no longer supported, the >> documentation is non existent and ACITree is no longer being actively >> developed. >> >> Our process: >> 1. We "randomly" selected a function that is part of the ACITree. From >> this point we decided to replace that function with our own version. The >> function that we choose was "itemData". >> The function gives us all the "data" that a specific node of the tree >> find. >> Given in order to replace the tree we would need to have a function that >> would give us the same information. We had 2 options: >> a) Create a tree with a function called itemData >> Pros: >> - At first view this was the simpler solution >> - Would keep the status quo >> Cons: >> - Not a OOP approach >> - Not very flexible >> b) Create a tree that would return a node given an ID and then the node >> would be responsible for giving it's data. >> Pros: >> - OOP Approach >> - More flexible and we do not need to bring the tree around, just a node >> Cons: >> - Break the current status quo >> >> Given these 2 options we decided to go for a more OOP approach creating a >> Tree and a TreeNode classes, that in the future will be renamed to >> ACITreeWrapper and TreeNode. >> >> 2. After we decided on the starting point we searched for occurrences of >> the function "itemData" and we found out that there were 303 occurrences of >> "itemData" in the code and roughly 176 calls to the function itself (some >> of the hits were variable names). >> >> 3. We selected the first file on the search and found the function that >> was responsible for calling the itemData function. >> >> 4. Extracted the function to a separate file >> >> 5. Wrap this function with tests >> >> 6. Refactor the function to ES6, give more declarative names to variables >> and break the functions into smaller chunks >> >> 7. When all the tests were passing we replaced ACITree with our Tree >> >> 8. We ensured that all tests were passing >> >> 9. Remove function from the original file and use the new function >> >> 10. Ensure everything still works >> >> 11. Find the next function and execute from step 4 until all the >> functions are replaced, refactored and tested. >> >> As you can see by the process this is a pretty huge undertake, because of >> the number of calls to the function. This is just the first step on the >> direction of completely isolating the ACITree so that we can solve the >> problem with a large number of elements on the tree. >> >> *What is on our radar that we need to address:* >> - Finish the complete decoupling of the ACITree >> - Performance of the current tree implementation >> - Tweak the naming of the Tree class to explicitly tell us this is to >> use only with ACITree. >> >> >> Thanks >> Joao >> >> > --001a114449ced999d305691a0e90 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Khushboo,
Attached you can find both patches rebase= d

Thanks


On Thu, Apr 5, 2018 at 6:31 AM Khushboo Vashi &l= t;khushboo.vashi@enterpr= isedb.com> wrote:
Hi Joao,

Can you please rebase the second patch= ?

Thanks,
Khushboo


On Tue, Apr 3, 2018 at 12:15 AM, Joao De Almeida Pereira <jdea= lmeidapereira@pivotal.io> wrote:
Hi Hackers,

Attached you can find= the patch that will start to decouple pgAdmin from ACITree library.
<= div>This patch is intended to be merged after 3.0, because we do not want t= o cause any entropy or delay the release, but we want to start the discussi= on and show some code.

This job that we started is= a massive tech debt chore that will take some time to finalize and we woul= d love the help of the community to do it.

Summ= ary of the patch:
0001 patch:=C2=A0
=C2=A0- Creates= a new tree that will allow us to create a separation between the applicati= on and ACI Tree
=C2=A0- Creates a Fake Tree (Test double, for ref= erence on the available test doubles:=C2=A0https://martinfowler.com/bliki= /TestDouble.html) that can be used to inplace to replace the ACITree an= d also encapsulate the new tree behavior on our tests
=C2=A0- Add= s tests for all the tree functionalities

0002 patc= h:
=C2=A0- Extracts, refactors, adds tests and remove dependency = from ACI Tree on:
- getTreeNodeHierarchy
- on backup.js: me= nu_enabled, menu_enabled_server, start_backup_global_server, backup_objects=
- on datagrid.js: show_data_grid, get_panel_title, show_query_tool<= div>- Start using sprintf-js as Underscore.String is deprecating sprintf fu= nction
=C2=A0=C2=A0
This patch represents only 10 calls t= o ACITree.itemData out of 176 that are spread around our code

In Depth look on the process behind th= e patch:

We started writing this patch with th= e idea that we need to decouple pgAdmin4 from ACITree, because ACITree is n= o longer supported, the documentation is non existent and ACITree is no lon= ger being actively developed.

Our process:
1. We "randomly" selected a function that is part of the ACITr= ee. From this point we decided to replace that function with our own versio= n. The function that we choose was "itemData".
The func= tion gives us all the "data" that a specific node of the tree fin= d.
Given in order to replace the tree we would need to have a fun= ction that would give us the same information. We had 2 options:
= =C2=A0 a) Create a tree with a function called itemData
Pros:
=C2=A0- At first view this was the simpler solution
=C2=A0- Wou= ld keep the status quo
Cons:
=C2=A0- Not a OOP approach
=
=C2=A0- Not very flexible
=C2=A0 b) Create a tree that would= return a node given an ID and then the node would be responsible for givin= g it's data.
Pros:=C2=A0
=C2=A0- OOP Approach
=
=C2=A0- More flexible and we do not need to bring the tree around, jus= t a node
Cons:
=C2=A0- Break the current status quo

Given these 2 options we decided to go for a more OOP= approach creating a Tree and a TreeNode classes, that in the future will b= e renamed to ACITreeWrapper and TreeNode.

2. After= we decided on the starting point we searched for occurrences of the functi= on "itemData" and we found out that there were 303 occurrences of= "itemData" in the code and roughly 176 calls to the function its= elf (some of the hits were variable names).

3. We = selected the first file on the search and found the function that was respo= nsible for calling the itemData function.

4. Extra= cted the function to a separate file

5. Wrap this = function with tests

6. Refactor the function to ES= 6, give more declarative names to variables and break the functions into sm= aller chunks

7. When all the tests were passing we= replaced ACITree with our Tree

8. We ensured that= all tests were passing

9. Remove function from th= e original file and use the new function

10. Ensur= e everything still works

11. Find the next functio= n and execute from step 4 until all the functions are replaced, refactored = and tested.

As you can see by the process this is = a pretty huge undertake, because of the number of calls to the function. Th= is is just the first step on the direction of completely isolating the ACIT= ree so that we can solve the problem with a large number of elements on the= tree.

What is on our radar that we need to add= ress:
=C2=A0- Finish the complete decoupling of the ACITree
=C2=A0- Performance of the current tree implementation
= =C2=A0- Tweak the naming of the Tree class to explicitly tell us this is to= use only with ACITree.


Thanks
J= oao


--001a114449ced999d305691a0e90-- --001a114449ced999d805691a0e92 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Tree-of-information-on-the-current-status-of-the-app_v1.patch" Content-Disposition: attachment; filename="0001-Tree-of-information-on-the-current-status-of-the-app_v1.patch" Content-Transfer-Encoding: base64 Content-ID: <1629607b2bd9f29bd141> X-Attachment-Id: 1629607b2bd9f29bd141 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy90cmVlL3RyZWUuanMgYi93ZWIvcGdh ZG1pbi9zdGF0aWMvanMvdHJlZS90cmVlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwLi5lZDY3YWE4NQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9q cy90cmVlL3RyZWUuanMKQEAgLTAsMCArMSwxMzQgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLwor Ly8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykgMjAx MyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUg aXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vCitleHBvcnQgY2xhc3MgVHJlZU5vZGUgeworICBjb25zdHJ1Y3RvcihpZCwgZGF0YSwg cGFyZW50KSB7CisgICAgdGhpcy5pZCA9IGlkOworICAgIHRoaXMuZGF0YSA9IGRhdGE7CisgICAg dGhpcy5wYXJlbnROb2RlID0gcGFyZW50OworICAgIHRoaXMucGF0aCA9IHRoaXMuaWQ7CisgICAg aWYgKHBhcmVudCAhPT0gbnVsbCAmJiBwYXJlbnQgIT09IHVuZGVmaW5lZCAmJiBwYXJlbnQucGF0 aCAhPT0gdW5kZWZpbmVkKSB7CisgICAgICB0aGlzLnBhdGggPSBwYXJlbnQucGF0aCArICcuJyAr IGlkOworICAgIH0KKyAgICB0aGlzLmNoaWxkcmVuID0gW107CisgIH0KKworICBoYXNQYXJlbnQo KSB7CisgICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZSAhPT0gbnVsbCAmJiB0aGlzLnBhcmVudE5v ZGUgIT09IHVuZGVmaW5lZDsKKyAgfQorCisgIHBhcmVudCgpIHsKKyAgICByZXR1cm4gdGhpcy5w YXJlbnROb2RlOworICB9CisKKyAgZ2V0RGF0YSgpIHsKKyAgICBpZiAodGhpcy5kYXRhID09PSB1 bmRlZmluZWQpIHsKKyAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgfSBlbHNlIGlmICh0aGlz LmRhdGEgPT09IG51bGwpIHsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4g T2JqZWN0LmFzc2lnbih7fSwgdGhpcy5kYXRhKTsKKyAgfQorfQorCitleHBvcnQgY2xhc3MgVHJl ZSB7CisgIGNvbnN0cnVjdG9yKCkgeworICAgIHRoaXMucm9vdE5vZGUgPSBuZXcgVHJlZU5vZGUo dW5kZWZpbmVkLCB7fSk7CisgICAgdGhpcy5hY2lUcmVlQXBpID0gdW5kZWZpbmVkOworICB9CisK KyAgYWRkTmV3Tm9kZShpZCwgZGF0YSwgcGF0aCkgeworICAgIGNvbnN0IHBhcmVudCA9IHRoaXMu ZmluZE5vZGUocGF0aCk7CisgICAgcmV0dXJuIHRoaXMuY3JlYXRlT3JVcGRhdGVOb2RlKGlkLCBk YXRhLCBwYXJlbnQpOworICB9CisKKyAgZmluZE5vZGUocGF0aCkgeworICAgIGlmIChwYXRoLmxl bmd0aCA9PT0gMCkgeworICAgICAgcmV0dXJuIHRoaXMucm9vdE5vZGU7CisgICAgfQorICAgIHJl dHVybiBmaW5kSW5UcmVlKHRoaXMucm9vdE5vZGUsIHBhdGguam9pbignLicpKTsKKyAgfQorCisg IGZpbmROb2RlQnlEb21FbGVtZW50KGRvbUVsZW1lbnQpIHsKKyAgICBjb25zdCBwYXRoID0gdGhp cy50cmFuc2xhdGVUcmVlTm9kZUlkRnJvbUFDSVRyZWUoZG9tRWxlbWVudCk7CisgICAgaWYoIXBh dGggfHwgIXBhdGhbMF0pIHsKKyAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgfQorCisgICAg cmV0dXJuIHRoaXMuZmluZE5vZGUocGF0aCk7CisgIH0KKworICBzZWxlY3RlZCgpIHsKKyAgICBy ZXR1cm4gdGhpcy5hY2lUcmVlQXBpLnNlbGVjdGVkKCk7CisgIH0KKworICByZWdpc3RlcigkdHJl ZUpRdWVyeSkgeworICAgICR0cmVlSlF1ZXJ5Lm9uKCdhY2l0cmVlJywgZnVuY3Rpb24gKGV2ZW50 LCBhcGksIGl0ZW0sIGV2ZW50TmFtZSkgeworICAgICAgaWYgKGFwaS5pc0l0ZW0oaXRlbSkpIHsK KyAgICAgICAgaWYgKGV2ZW50TmFtZSA9PT0gJ2FkZGVkJykgeworICAgICAgICAgIGNvbnN0IGlk ID0gYXBpLmdldElkKGl0ZW0pOworICAgICAgICAgIGNvbnN0IGRhdGEgPSBhcGkuaXRlbURhdGEo aXRlbSk7CisgICAgICAgICAgY29uc3QgcGFyZW50SWQgPSB0aGlzLnRyYW5zbGF0ZVRyZWVOb2Rl SWRGcm9tQUNJVHJlZShhcGkucGFyZW50KGl0ZW0pKTsKKyAgICAgICAgICB0aGlzLmFkZE5ld05v ZGUoaWQsIGRhdGEsIHBhcmVudElkKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0uYmluZCh0 aGlzKSk7CisgICAgdGhpcy5hY2lUcmVlQXBpID0gJHRyZWVKUXVlcnkuYWNpVHJlZSgnYXBpJyk7 CisgIH0KKworICBjcmVhdGVPclVwZGF0ZU5vZGUoaWQsIGRhdGEsIHBhcmVudCkgeworICAgIGNv bnN0IG9sZE5vZGUgPSB0aGlzLmZpbmROb2RlKFtwYXJlbnQucGF0aCwgaWRdKTsKKyAgICBpZiAo b2xkTm9kZSAhPT0gbnVsbCkgeworICAgICAgb2xkTm9kZS5kYXRhID0gT2JqZWN0LmFzc2lnbih7 fSwgZGF0YSk7CisgICAgICByZXR1cm4gb2xkTm9kZTsKKyAgICB9CisKKyAgICBjb25zdCBub2Rl ID0gbmV3IFRyZWVOb2RlKGlkLCBkYXRhLCBwYXJlbnQpOworICAgIGlmIChwYXJlbnQgPT09IHRo aXMucm9vdE5vZGUpIHsKKyAgICAgIG5vZGUucGFyZW50Tm9kZSA9IG51bGw7CisgICAgfQorICAg IHBhcmVudC5jaGlsZHJlbi5wdXNoKG5vZGUpOworICAgIHJldHVybiBub2RlOworICB9CisKKyAg dHJhbnNsYXRlVHJlZU5vZGVJZEZyb21BQ0lUcmVlKGFjaVRyZWVOb2RlKSB7CisgICAgbGV0IGN1 cnJlbnRUcmVlTm9kZSA9IGFjaVRyZWVOb2RlOworICAgIGxldCBwYXRoID0gW107CisgICAgd2hp bGUgKGN1cnJlbnRUcmVlTm9kZSAhPT0gbnVsbCAmJiBjdXJyZW50VHJlZU5vZGUgIT09IHVuZGVm aW5lZCAmJiBjdXJyZW50VHJlZU5vZGUubGVuZ3RoID4gMCkgeworICAgICAgcGF0aC51bnNoaWZ0 KHRoaXMuYWNpVHJlZUFwaS5nZXRJZChjdXJyZW50VHJlZU5vZGUpKTsKKyAgICAgIGlmICh0aGlz LmFjaVRyZWVBcGkuaGFzUGFyZW50KGN1cnJlbnRUcmVlTm9kZSkpIHsKKyAgICAgICAgY3VycmVu dFRyZWVOb2RlID0gdGhpcy5hY2lUcmVlQXBpLnBhcmVudChjdXJyZW50VHJlZU5vZGUpOworICAg ICAgfSBlbHNlIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAgfQorICAgIHJldHVybiBw YXRoOworICB9Cit9CisKK2V4cG9ydCBsZXQgdHJlZSA9IG5ldyBUcmVlKCk7CisKK2Z1bmN0aW9u IGZpbmRJblRyZWUocm9vdE5vZGUsIHBhdGgpIHsKKyAgaWYgKHBhdGggPT09IG51bGwpIHsKKyAg ICByZXR1cm4gcm9vdE5vZGU7CisgIH0KKyAgcmV0dXJuIChmdW5jdGlvbiBmaW5kSW5Ob2RlKGN1 cnJlbnROb2RlKSB7CisgICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9IGN1cnJlbnROb2RlLmNo aWxkcmVuLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICBjb25zdCBjYWxjdWxhdGVk Tm9kZSA9IGZpbmRJbk5vZGUoY3VycmVudE5vZGUuY2hpbGRyZW5baV0pOworICAgICAgaWYgKGNh bGN1bGF0ZWROb2RlICE9PSBudWxsKSB7CisgICAgICAgIHJldHVybiBjYWxjdWxhdGVkTm9kZTsK KyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY3VycmVudE5vZGUucGF0aCA9PT0gcGF0aCkgewor ICAgICAgcmV0dXJuIGN1cnJlbnROb2RlOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gbnVs bDsKKyAgICB9CisgIH0pKHJvb3ROb2RlKTsKK30KZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9u L2phdmFzY3JpcHQvdHJlZS90cmVlX2Zha2UuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0 L3RyZWUvdHJlZV9mYWtlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5h MDk4M2M2NwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvdHJl ZS90cmVlX2Zha2UuanMKQEAgLTAsMCArMSw1NSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAt IFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4LCBUaGUg cGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVu ZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitpbXBvcnQge1RyZWV9IGZy b20gIi4uLy4uLy4uL3BnYWRtaW4vc3RhdGljL2pzL3RyZWUvdHJlZSI7CisKK2V4cG9ydCBjbGFz cyBUcmVlRmFrZSBleHRlbmRzIFRyZWUgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICBzdXBlcigp OworICAgIHRoaXMuYWNpVHJlZVRvT3VyVHJlZVRyYW5zbGF0b3IgPSB7fTsKKyAgfQorCisgIGFk ZE5ld05vZGUoaWQsIGRhdGEsIHBhdGgpIHsKKyAgICB0aGlzLmFjaVRyZWVUb091clRyZWVUcmFu c2xhdG9yW2lkXSA9IHBhdGguY29uY2F0KGlkKTsKKyAgICByZXR1cm4gc3VwZXIuYWRkTmV3Tm9k ZShpZCwgZGF0YSwgcGF0aCk7CisgIH0KKworICBoYXNQYXJlbnQoYWNpVHJlZU5vZGUpIHsKKyAg ICByZXR1cm4gdGhpcy50cmFuc2xhdGVUcmVlTm9kZUlkRnJvbUFDSVRyZWUoYWNpVHJlZU5vZGUp Lmxlbmd0aCA+IDE7CisgIH0KKworICBwYXJlbnQoYWNpVHJlZU5vZGUpIHsKKyAgICBpZiAodGhp cy5oYXNQYXJlbnQoYWNpVHJlZU5vZGUpKSB7CisgICAgICBsZXQgcGF0aCA9IHRoaXMudHJhbnNs YXRlVHJlZU5vZGVJZEZyb21BQ0lUcmVlKGFjaVRyZWVOb2RlKTsKKyAgICAgIHJldHVybiBbe2lk OiB0aGlzLmZpbmROb2RlKHBhdGgpLnBhcmVudCgpLmlkfV07CisgICAgfQorCisgICAgcmV0dXJu IG51bGw7CisgIH0KKworICB0cmFuc2xhdGVUcmVlTm9kZUlkRnJvbUFDSVRyZWUoYWNpVHJlZU5v ZGUpIHsKKyAgICByZXR1cm4gdGhpcy5hY2lUcmVlVG9PdXJUcmVlVHJhbnNsYXRvclthY2lUcmVl Tm9kZVswXS5pZF07CisgIH0KKworICBpdGVtRGF0YShhY2lUcmVlTm9kZSkgeworICAgIGxldCBw YXRoID0gdGhpcy50cmFuc2xhdGVUcmVlTm9kZUlkRnJvbUFDSVRyZWUoYWNpVHJlZU5vZGUpOwor ICAgIGlmKHBhdGggPT09IHVuZGVmaW5lZCB8fCBwYXRoID09PSBudWxsKSB7CisgICAgICByZXR1 cm4gdW5kZWZpbmVkOworICAgIH0KKyAgICByZXR1cm4gdGhpcy5maW5kTm9kZShwYXRoKS5nZXRE YXRhKCk7CisgIH0KKworICBzZWxlY3RlZCgpIHsKKyAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE5v ZGU7CisgIH0KKworICBzZXRTZWxlY3RlZE5vZGUoc2VsZWN0ZWROb2RlKSB7CisgICAgdGhpcy5z ZWxlY3RlZE5vZGUgPSBzZWxlY3RlZE5vZGU7CisgIH0KK30KZGlmZiAtLWdpdCBhL3dlYi9yZWdy ZXNzaW9uL2phdmFzY3JpcHQvdHJlZS90cmVlX3NwZWMuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZh c2NyaXB0L3RyZWUvdHJlZV9zcGVjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwLi5lODkzMGQ4NAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3Jp cHQvdHJlZS90cmVlX3NwZWMuanMKQEAgLTAsMCArMSwyODQgQEAKKy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v CisvLworLy8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAo QykgMjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29m dHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vCisKK2ltcG9ydCB7VHJlZSwgVHJlZU5vZGV9IGZyb20gIi4uLy4uLy4uL3Bn YWRtaW4vc3RhdGljL2pzL3RyZWUvdHJlZSI7CitpbXBvcnQge1RyZWVGYWtlfSBmcm9tICIuL3Ry ZWVfZmFrZSI7CisKK2NvbnN0IGNvbnRleHQgPSBkZXNjcmliZTsKKworY29uc3QgdHJlZVRlc3Rz ID0gKHRyZWVDbGFzcywgc2V0RGVmYXVsdENhbGxCYWNrKSA9PiB7CisgIGxldCB0cmVlOworICBi ZWZvcmVFYWNoKCgpID0+IHsKKyAgICB0cmVlID0gbmV3IHRyZWVDbGFzcygpOworICB9KTsKKwor ICBkZXNjcmliZSgnI2FkZE5ld05vZGUnLCAoKSA9PiB7CisgICAgZGVzY3JpYmUoJ3doZW4gYWRk IGEgbmV3IHJvb3QgZWxlbWVudCcsICgpID0+IHsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4gewor ICAgICAgICB0cmVlLmFkZE5ld05vZGUoJ3NvbWUgbmV3IG5vZGUnLCB7ZGF0YTogJ2ludGVyZXN0 aW5nJ30sIFtdKTsKKyAgICAgIH0pOworCisgICAgICBpdCgnY2FuIGJlIHJldHJpZXZlZCcsICgp ID0+IHsKKyAgICAgICAgY29uc3Qgbm9kZSA9IHRyZWUuZmluZE5vZGUoWydzb21lIG5ldyBub2Rl J10pOworICAgICAgICBleHBlY3Qobm9kZS5kYXRhKS50b0VxdWFsKHtkYXRhOiAnaW50ZXJlc3Rp bmcnfSk7CisgICAgICB9KTsKKworICAgICAgaXQoJ3JldHVybiBmYWxzZSBmb3IgI2hhc1BhcmVu dCgpJywgKCkgPT4geworICAgICAgICBjb25zdCBub2RlID0gdHJlZS5maW5kTm9kZShbJ3NvbWUg bmV3IG5vZGUnXSk7CisgICAgICAgIGV4cGVjdChub2RlLmhhc1BhcmVudCgpKS50b0JlKGZhbHNl KTsKKyAgICAgIH0pOworCisgICAgICBpdCgncmV0dXJuIG51bGwgZm9yICNwYXJlbnQoKScsICgp ID0+IHsKKyAgICAgICAgY29uc3Qgbm9kZSA9IHRyZWUuZmluZE5vZGUoWydzb21lIG5ldyBub2Rl J10pOworICAgICAgICBleHBlY3Qobm9kZS5wYXJlbnQoKSkudG9CZU51bGwoKTsKKyAgICAgIH0p OworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ3doZW4gYWRkIGEgbmV3IGVsZW1lbnQgYXMgYSBj aGlsZCcsICgpID0+IHsKKyAgICAgIGxldCBwYXJlbnROb2RlOworICAgICAgYmVmb3JlRWFjaCgo KSA9PiB7CisgICAgICAgIHBhcmVudE5vZGUgPSB0cmVlLmFkZE5ld05vZGUoJ3BhcmVudCBub2Rl Jywge2RhdGE6ICdwYXJlbnQgZGF0YSd9LCBbXSk7CisgICAgICAgIHRyZWUuYWRkTmV3Tm9kZSgn c29tZSBuZXcgbm9kZScsIHtkYXRhOiAnaW50ZXJlc3RpbmcnfSwgWydwYXJlbnQnICsKKyAgICAg ICAgJyBub2RlJ10pOworICAgICAgfSk7CisKKyAgICAgIGl0KCdjYW4gYmUgcmV0cmlldmVkJywg KCkgPT4geworICAgICAgICBjb25zdCBub2RlID0gdHJlZS5maW5kTm9kZShbJ3BhcmVudCBub2Rl JywgJ3NvbWUgbmV3IG5vZGUnXSk7CisgICAgICAgIGV4cGVjdChub2RlLmRhdGEpLnRvRXF1YWwo e2RhdGE6ICdpbnRlcmVzdGluZyd9KTsKKyAgICAgIH0pOworCisgICAgICBpdCgncmV0dXJuIHRy dWUgZm9yICNoYXNQYXJlbnQoKScsICgpID0+IHsKKyAgICAgICAgY29uc3Qgbm9kZSA9IHRyZWUu ZmluZE5vZGUoWydwYXJlbnQgbm9kZScsICdzb21lIG5ldyBub2RlJ10pOworICAgICAgICBleHBl Y3Qobm9kZS5oYXNQYXJlbnQoKSkudG9CZSh0cnVlKTsKKyAgICAgIH0pOworCisgICAgICBpdCgn cmV0dXJuICJwYXJlbnQgbm9kZSIgb2JqZWN0IGZvciAjcGFyZW50KCknLCAoKSA9PiB7CisgICAg ICAgIGNvbnN0IG5vZGUgPSB0cmVlLmZpbmROb2RlKFsncGFyZW50IG5vZGUnLCAnc29tZSBuZXcg bm9kZSddKTsKKyAgICAgICAgZXhwZWN0KG5vZGUucGFyZW50KCkpLnRvRXF1YWwocGFyZW50Tm9k ZSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCd3aGVuIGFkZCBhbiBlbGVt ZW50IHRoYXQgYWxyZWFkeSBleGlzdHMgdW5kZXIgYSBwYXJlbnQnLCAoKSA9PiB7CisgICAgICBs ZXQgcGFyZW50Tm9kZTsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICBwYXJlbnRO b2RlID0gdHJlZS5hZGROZXdOb2RlKCdwYXJlbnQgbm9kZScsIHtkYXRhOiAncGFyZW50IGRhdGEn fSwgW10pOworICAgICAgICB0cmVlLmFkZE5ld05vZGUoJ3NvbWUgbmV3IG5vZGUnLCB7ZGF0YTog J2ludGVyZXN0aW5nJ30sIFsncGFyZW50JyArCisgICAgICAgICcgbm9kZSddKTsKKyAgICAgIH0p OworCisgICAgICBpdCgnZG9lcyBub3QgYWRkIGEgbmV3IGNoaWxkJywgKCkgPT4geworICAgICAg ICB0cmVlLmFkZE5ld05vZGUoJ3NvbWUgbmV3IG5vZGUnLCB7ZGF0YTogJ2ludGVyZXN0aW5nIDEn fSwgWydwYXJlbnQnICsKKyAgICAgICAgJyBub2RlJ10pOworICAgICAgICBjb25zdCBwYXJlbnRO b2RlID0gdHJlZS5maW5kTm9kZShbJ3BhcmVudCBub2RlJ10pOworICAgICAgICBleHBlY3QocGFy ZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGgpLnRvQmUoMSk7CisgICAgICB9KTsKKworICAgICAgaXQo J3VwZGF0ZXMgdGhlIGV4aXN0aW5nIG5vZGUgZGF0YScsICgpID0+IHsKKyAgICAgICAgdHJlZS5h ZGROZXdOb2RlKCdzb21lIG5ldyBub2RlJywge2RhdGE6ICdpbnRlcmVzdGluZyAxJ30sIFsncGFy ZW50JyArCisgICAgICAgICcgbm9kZSddKTsKKyAgICAgICAgY29uc3Qgbm9kZSA9IHRyZWUuZmlu ZE5vZGUoWydwYXJlbnQgbm9kZScsICdzb21lIG5ldyBub2RlJ10pOworICAgICAgICBleHBlY3Qo bm9kZS5kYXRhKS50b0VxdWFsKHtkYXRhOiAnaW50ZXJlc3RpbmcgMSd9KTsKKyAgICAgIH0pOwor ICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnI3RyYW5zbGF0ZVRyZWVOb2RlSWRGcm9tQUNJ VHJlZScsICgpID0+IHsKKyAgICBsZXQgYWNpVHJlZUFwaTsKKyAgICBiZWZvcmVFYWNoKCgpID0+ IHsKKyAgICAgIGFjaVRyZWVBcGkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignQUNJVHJlZUFwaScs IFsKKyAgICAgICAgJ2hhc1BhcmVudCcsCisgICAgICAgICdwYXJlbnQnLAorICAgICAgICAnZ2V0 SWQnLAorICAgICAgXSk7CisKKyAgICAgIGFjaVRyZWVBcGkuZ2V0SWQuYW5kLmNhbGxGYWtlKChu b2RlKSA9PiB7CisgICAgICAgIHJldHVybiBub2RlWzBdLmlkOworICAgICAgfSk7CisgICAgICB0 cmVlLmFjaVRyZWVBcGkgPSBhY2lUcmVlQXBpOworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ1do ZW4gdHJlZSBhcyBhIHNpbmdsZSBsZXZlbCcsICgpID0+IHsKKyAgICAgIGJlZm9yZUVhY2goKCkg PT4geworICAgICAgICBhY2lUcmVlQXBpLmhhc1BhcmVudC5hbmQucmV0dXJuVmFsdWUoZmFsc2Up OworICAgICAgfSk7CisKKyAgICAgIGl0KCdyZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIElEIG9m IHRoZSBmaXJzdCBsZXZlbCcsICgpID0+IHsKKyAgICAgICAgbGV0IG5vZGUgPSBbeworICAgICAg ICAgIGlkOiAnc29tZSBpZCcsCisgICAgICAgIH1dOworICAgICAgICB0cmVlLmFkZE5ld05vZGUo J3NvbWUgaWQnLCB7fSwgW10pOworCisgICAgICAgIGV4cGVjdCh0cmVlLnRyYW5zbGF0ZVRyZWVO b2RlSWRGcm9tQUNJVHJlZShub2RlKSkudG9FcXVhbChbJ3NvbWUgaWQnXSk7CisgICAgICB9KTsK KyAgICB9KTsKKworICAgIGRlc2NyaWJlKCdXaGVuIHRyZWUgYXMgYSAyIGxldmVscycsICgpID0+ IHsKKyAgICAgIGRlc2NyaWJlKCdXaGVuIHdlIHRyeSB0byByZXRyaWV2ZSB0aGUgbm9kZSBpbiB0 aGUgc2Vjb25kIGxldmVsJywgKCkgPT4geworICAgICAgICBpdCgncmV0dXJucyBhbiBhcnJheSB3 aXRoIHRoZSBJRCBvZiB0aGUgZmlyc3QgbGV2ZWwgYW5kIHNlY29uZCBsZXZlbCcsICgpID0+IHsK KyAgICAgICAgICBhY2lUcmVlQXBpLmhhc1BhcmVudC5hbmQucmV0dXJuVmFsdWVzKHRydWUsIGZh bHNlKTsKKyAgICAgICAgICBhY2lUcmVlQXBpLnBhcmVudC5hbmQucmV0dXJuVmFsdWUoW3sKKyAg ICAgICAgICAgIGlkOiAncGFyZW50IGlkJworICAgICAgICAgIH1dKTsKKyAgICAgICAgICBsZXQg bm9kZSA9IFt7CisgICAgICAgICAgICBpZDogJ3NvbWUgaWQnLAorICAgICAgICAgIH1dOworCisg ICAgICAgICAgdHJlZS5hZGROZXdOb2RlKCdwYXJlbnQgaWQnLCB7fSwgW10pOworICAgICAgICAg IHRyZWUuYWRkTmV3Tm9kZSgnc29tZSBpZCcsIHt9LCBbJ3BhcmVudCBpZCddKTsKKworICAgICAg ICAgIGV4cGVjdCh0cmVlLnRyYW5zbGF0ZVRyZWVOb2RlSWRGcm9tQUNJVHJlZShub2RlKSkKKyAg ICAgICAgICAgIC50b0VxdWFsKFsncGFyZW50IGlkJywgJ3NvbWUgaWQnXSk7CisgICAgICAgIH0p OworICAgICAgfSk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCcjc2VsZWN0ZWQnLCAo KSA9PiB7CisgICAgY29udGV4dCgnYSBub2RlIGluIHRoZSB0cmVlIGlzIHNlbGVjdGVkJywgKCkg PT4geworICAgICAgaXQoJ3JldHVybnMgdGhhdCBub2RlIG9iamVjdCcsICgpID0+IHsKKyAgICAg ICAgbGV0IHNlbGVjdGVkTm9kZSA9IG5ldyBUcmVlTm9kZSgnYmFtbScsIHt9LCBbXSk7CisgICAg ICAgIHNldERlZmF1bHRDYWxsQmFjayh0cmVlLCBzZWxlY3RlZE5vZGUpCisgICAgICAgIGV4cGVj dCh0cmVlLnNlbGVjdGVkKCkpLnRvRXF1YWwoc2VsZWN0ZWROb2RlKTsKKyAgICAgIH0pOworICAg IH0pOworICB9KTsKKworICBkZXNjcmliZSgnI2ZpbmROb2RlQnlUcmVlRWxlbWVudCcsICgpID0+ IHsKKyAgICBjb250ZXh0KCdyZXRyaWV2ZSBkYXRhIGZyb20gbm9kZSBub3QgZm91bmQnLCAoKSA9 PiB7CisgICAgICBpdCgncmV0dXJuIHVuZGVmaW5lZCcsICgpID0+IHsKKyAgICAgICAgbGV0IGFj aVRyZWVBcGkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignQUNJVHJlZUFwaScsIFsKKyAgICAgICAg ICAnaGFzUGFyZW50JywKKyAgICAgICAgICAncGFyZW50JywKKyAgICAgICAgICAnZ2V0SWQnLAor ICAgICAgICBdKTsKKworICAgICAgICBhY2lUcmVlQXBpLmdldElkLmFuZC5jYWxsRmFrZSgobm9k ZSkgPT4geworICAgICAgICAgIHJldHVybiBub2RlWzBdLmlkOworICAgICAgICB9KTsKKyAgICAg ICAgdHJlZS5hY2lUcmVlQXBpID0gYWNpVHJlZUFwaTsKKyAgICAgICAgZXhwZWN0KHRyZWUuZmlu ZE5vZGVCeURvbUVsZW1lbnQoWyc8bGk+c29tZXRoaW5nPC9saT4nXSkpLnRvQmVVbmRlZmluZWQo KTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKK307CisKK2Rlc2NyaWJlKCd0cmVlIHRlc3Rz JywgKCkgPT4geworICBkZXNjcmliZSgnVHJlZU5vZGUnLCAoKSA9PiB7CisgICAgZGVzY3JpYmUo JyNoYXNQYXJlbnQnLCAoKSA9PiB7CisgICAgICBjb250ZXh0KCdwYXJlbnQgaXMgbnVsbCcsICgp ID0+IHsKKyAgICAgICAgaXQoJ3JldHVybnMgZmFsc2UnLCAoKSA9PiB7CisgICAgICAgICAgbGV0 IHRyZWVOb2RlID0gbmV3IFRyZWVOb2RlKCcxMjMnLCB7fSwgbnVsbCk7CisgICAgICAgICAgZXhw ZWN0KHRyZWVOb2RlLmhhc1BhcmVudCgpKS50b0JlKGZhbHNlKTsKKyAgICAgICAgfSk7CisgICAg ICB9KTsKKyAgICAgIGNvbnRleHQoJ3BhcmVudCBpcyB1bmRlZmluZWQnLCAoKSA9PiB7CisgICAg ICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAgICAgICAgIGxldCB0cmVlTm9kZSA9 IG5ldyBUcmVlTm9kZSgnMTIzJywge30sIHVuZGVmaW5lZCk7CisgICAgICAgICAgZXhwZWN0KHRy ZWVOb2RlLmhhc1BhcmVudCgpKS50b0JlKGZhbHNlKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsK KyAgICAgIGNvbnRleHQoJ3BhcmVudCBleGlzdHMnLCAoKSA9PiB7CisgICAgICAgIGl0KCdyZXR1 cm5zIHRydWUnLCAoKSA9PiB7CisgICAgICAgICAgbGV0IHBhcmVudE5vZGUgPSBuZXcgVHJlZU5v ZGUoJzQ1NicsIHt9LCB1bmRlZmluZWQpOworICAgICAgICAgIGxldCB0cmVlTm9kZSA9IG5ldyBU cmVlTm9kZSgnMTIzJywge30sIHBhcmVudE5vZGUpOworICAgICAgICAgIGV4cGVjdCh0cmVlTm9k ZS5oYXNQYXJlbnQoKSkudG9CZSh0cnVlKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9 KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJ1RyZWUnLCAoKSA9PiB7CisgICAgZnVuY3Rpb24gcmVh bFRyZWVTZWxlY3ROb2RlKHRyZWUsIHNlbGVjdGVkTm9kZSkgeworICAgICAgbGV0IGFjaVRyZWVB cGkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignQUNJVHJlZUFwaScsIFsKKyAgICAgICAgJ3NlbGVj dGVkJywKKyAgICAgIF0pOworICAgICAgdHJlZS5hY2lUcmVlQXBpID0gYWNpVHJlZUFwaTsKKyAg ICAgIGFjaVRyZWVBcGkuc2VsZWN0ZWQuYW5kLnJldHVyblZhbHVlKHNlbGVjdGVkTm9kZSk7Cisg ICAgfQorCisgICAgdHJlZVRlc3RzKFRyZWUsIHJlYWxUcmVlU2VsZWN0Tm9kZSk7CisgIH0pOwor CisgIGRlc2NyaWJlKCdUcmVlRmFrZScsICgpID0+IHsKKyAgICBmdW5jdGlvbiBmYWtlVHJlZVNl bGVjdE5vZGUodHJlZSwgc2VsZWN0ZWROb2RlKSB7CisgICAgICB0cmVlLnNldFNlbGVjdGVkTm9k ZShzZWxlY3RlZE5vZGUpOworICAgIH0KKworICAgIHRyZWVUZXN0cyhUcmVlRmFrZSwgZmFrZVRy ZWVTZWxlY3ROb2RlKTsKKworICAgIGRlc2NyaWJlKCcjaGFzUGFyZW50JywgKCkgPT4geworICAg ICAgY29udGV4dCgndHJlZSBjb250YWlucyBtdWx0aXBsZSBsZXZlbHMnLCAoKSA9PiB7CisgICAg ICAgIGxldCB0cmVlOworICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgICB0cmVl ID0gbmV3IFRyZWVGYWtlKCk7CisgICAgICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDEnLCB7 ZGF0YTogJ2ludGVyZXN0aW5nJ30sIFtdKTsKKyAgICAgICAgICB0cmVlLmFkZE5ld05vZGUoJ2xl dmVsMicsIHtkYXRhOiAnaW50ZXJlc3RpbmcnfSwgWydsZXZlbDEnXSk7CisgICAgICAgIH0pOwor CisgICAgICAgIGNvbnRleHQoJ25vZGUgaXMgYXQgdGhlIGZpcnN0IGxldmVsJywgKCkgPT4gewor ICAgICAgICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAgICAgICAgICAgZXhwZWN0 KHRyZWUuaGFzUGFyZW50KFt7aWQ6ICdsZXZlbDEnfV0pKS50b0JlKGZhbHNlKTsKKyAgICAgICAg ICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29udGV4dCgnbm9kZSBpcyBhdCB0aGUgc2Vj b25kIGxldmVsJywgKCkgPT4geworICAgICAgICAgIGl0KCdyZXR1cm5zIHRydWUnLCAoKSA9PiB7 CisgICAgICAgICAgICBleHBlY3QodHJlZS5oYXNQYXJlbnQoW3tpZDogJ2xldmVsMid9XSkpLnRv QmUodHJ1ZSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7 CisKKyAgICBkZXNjcmliZSgnI3BhcmVudCcsICgpID0+IHsKKyAgICAgIGxldCB0cmVlOworICAg ICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgIHRyZWUgPSBuZXcgVHJlZUZha2UoKTsKKyAg ICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDEnLCB7ZGF0YTogJ2ludGVyZXN0aW5nJ30sIFtd KTsKKyAgICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDInLCB7ZGF0YTogJ2ludGVyZXN0aW5n J30sIFsnbGV2ZWwxJ10pOworICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ25vZGUgaXMgdGhl IHJvb3QnLCAoKSA9PiB7CisgICAgICAgIGl0KCdyZXR1cm5zIG51bGwnLCAoKSA9PiB7CisgICAg ICAgICAgZXhwZWN0KHRyZWUucGFyZW50KFt7aWQ6ICdsZXZlbDEnfV0pKS50b0JlTnVsbCgpOwor ICAgICAgICB9KTsKKyAgICAgIH0pOworCisgICAgICBjb250ZXh0KCdub2RlIGlzIG5vdCByb290 JywgKCkgPT4geworICAgICAgICBpdCgncmV0dXJucyByb290IGVsZW1lbnQnLCAoKSA9PiB7Cisg ICAgICAgICAgZXhwZWN0KHRyZWUucGFyZW50KFt7aWQ6ICdsZXZlbDInfV0pKS50b0VxdWFsKFt7 aWQ6ICdsZXZlbDEnfV0pOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAg ZGVzY3JpYmUoJyNpdGVtRGF0YScsICgpID0+IHsKKyAgICAgIGxldCB0cmVlOworICAgICAgYmVm b3JlRWFjaCgoKSA9PiB7CisgICAgICAgIHRyZWUgPSBuZXcgVHJlZUZha2UoKTsKKyAgICAgICAg dHJlZS5hZGROZXdOb2RlKCdsZXZlbDEnLCB7ZGF0YTogJ2ludGVyZXN0aW5nJ30sIFtdKTsKKyAg ICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDInLCB7ZGF0YTogJ2V4cGVjdGVkIGRhdGEnfSwg WydsZXZlbDEnXSk7CisgICAgICB9KTsKKworICAgICAgY29udGV4dCgncmV0cmlldmUgZGF0YSBm cm9tIHRoZSBub2RlJywgKCkgPT4geworICAgICAgICBpdCgncmV0dXJuIHRoZSBub2RlIGRhdGEn LCAoKSA9PiB7CisgICAgICAgICAgZXhwZWN0KHRyZWUuaXRlbURhdGEoW3tpZDogJ2xldmVsMid9 XSkpLnRvRXF1YWwoeworICAgICAgICAgICAgZGF0YTogJ2V4cGVjdGVkJyArCisgICAgICAgICAg ICAnIGRhdGEnCisgICAgICAgICAgfSkKKyAgICAgICAgfSk7CisgICAgICB9KTsKKworICAgICAg Y29udGV4dCgncmV0cmlldmUgZGF0YSBmcm9tIG5vZGUgbm90IGZvdW5kJywgKCkgPT4geworICAg ICAgICBpdCgncmV0dXJuIHVuZGVmaW5lZCcsICgpID0+IHsKKyAgICAgICAgICBleHBlY3QodHJl ZS5pdGVtRGF0YShbe2lkOiAnYmFtbSd9XSkpLnRvQmVVbmRlZmluZWQoKTsKKyAgICAgICAgfSk7 CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKKwo= --001a114449ced999d805691a0e92 Content-Type: text/x-patch; charset="US-ASCII"; name="0002-Extractions-of-multiples-locations-where-we-used-the_v2.patch" Content-Disposition: attachment; filename="0002-Extractions-of-multiples-locations-where-we-used-the_v2.patch" Content-Transfer-Encoding: base64 Content-ID: <1629607b2ce12efbd3e2> X-Attachment-Id: 1629607b2ce12efbd3e2 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL3N0YXRpYy9qcy9zY2hlbWEuanMgYi93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9zdGF0aWMvanMvc2NoZW1h LmpzCmluZGV4IGE3ZmQ0YzdjLi4xMGRjN2UzYiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJv d3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvc3RhdGljL2pzL3Nj aGVtYS5qcworKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy9zdGF0aWMvanMvc2NoZW1hLmpzCkBAIC00NTAsMjkgKzQ1MCw3IEBA IGRlZmluZSgncGdhZG1pbi5ub2RlLnNjaGVtYScsIFsKICAgICB9KTsKIAogICAgIHBnQnJvd3Nl ci50YWJsZUNoaWxkVHJlZU5vZGVIaWVyYXJjaHkgPSBmdW5jdGlvbihpKSB7Ci0gICAgICB2YXIg aWR4ID0gMCwKLSAgICAgICAgcmVzID0ge30sCi0gICAgICAgIHQgPSBwZ0Jyb3dzZXIudHJlZTsK LQotICAgICAgZG8gewotICAgICAgICB2YXIgZCA9IHQuaXRlbURhdGEoaSk7Ci0gICAgICAgIGlm ICgKLSAgICAgICAgICBkLl90eXBlIGluIHBnQnJvd3Nlci5Ob2RlcyAmJiBwZ0Jyb3dzZXIuTm9k ZXNbZC5fdHlwZV0uaGFzSWQKLSAgICAgICAgKSB7Ci0gICAgICAgICAgaWYgKGQuX3R5cGUgPT09 ICdwYXJ0aXRpb24nIHx8IGQuX3R5cGUgPT09ICd0YWJsZScpIHsKLSAgICAgICAgICAgIGlmICgh KCd0YWJsZScgaW4gcmVzKSkgewotICAgICAgICAgICAgICByZXNbJ3RhYmxlJ10gPSBfLmV4dGVu ZCh7fSwgZCwgeydwcmlvcml0eSc6IGlkeH0pOwotICAgICAgICAgICAgICBpZHggLT0gMTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVzW2QuX3R5cGVd ID0gXy5leHRlbmQoe30sIGQsIHsncHJpb3JpdHknOiBpZHh9KTsKLSAgICAgICAgICAgIGlkeCAt PSAxOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpID0gdC5oYXNQYXJlbnQoaSkg PyB0LnBhcmVudChpKSA6IG51bGw7Ci0gICAgICB9IHdoaWxlIChpKTsKLQotICAgICAgcmV0dXJu IHJlczsKKyAgICAgIHJldHVybiB0aGlzLmdldFRyZWVOb2RlSGllcmFyY2h5KGkpOwogICAgIH07 CiAgIH0KIApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbHVtbi9zdGF0aWMvanMvY29sdW1uLmpz IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvdGFibGVzL2NvbHVtbi9zdGF0aWMvanMvY29sdW1uLmpzCmluZGV4IDcyYjZlYjBjLi4x ZmRhY2Y1MiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbHVtbi9zdGF0aWMvanMvY29sdW1uLmpz CisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNl cy9zY2hlbWFzL3RhYmxlcy9jb2x1bW4vc3RhdGljL2pzL2NvbHVtbi5qcwpAQCAtODgsNyArODgs NiBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS5jb2x1bW4nLCBbCiAKICAgaWYgKCFwZ0Jyb3dzZXIu Tm9kZXNbJ2NvbHVtbiddKSB7CiAgICAgcGdCcm93c2VyLk5vZGVzWydjb2x1bW4nXSA9IHBnQnJv d3Nlci5Ob2RlLmV4dGVuZCh7Ci0gICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdCcm93c2Vy LnRhYmxlQ2hpbGRUcmVlTm9kZUhpZXJhcmNoeSwKICAgICAgIHBhcmVudF90eXBlOiBbJ3RhYmxl JywgJ3ZpZXcnLCAnbXZpZXcnXSwKICAgICAgIGNvbGxlY3Rpb25fdHlwZTogWydjb2xsLXRhYmxl JywgJ2NvbGwtdmlldycsICdjb2xsLW12aWV3J10sCiAgICAgICB0eXBlOiAnY29sdW1uJywKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9jaGVja19jb25zdHJhaW50L3N0YXRpYy9q cy9jaGVja19jb25zdHJhaW50LmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2NoZWNrX2NvbnN0 cmFpbnQvc3RhdGljL2pzL2NoZWNrX2NvbnN0cmFpbnQuanMKaW5kZXggYmY3ZWY1NTYuLmIxY2Iy NTE4IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVy cy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvY2hlY2tfY29uc3RyYWludC9z dGF0aWMvanMvY2hlY2tfY29uc3RyYWludC5qcworKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3Nl cnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMv Y2hlY2tfY29uc3RyYWludC9zdGF0aWMvanMvY2hlY2tfY29uc3RyYWludC5qcwpAQCAtOCw3ICs4 LDYgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUuY2hlY2tfY29uc3RyYWludCcsIFsKICAgLy8gQ2hl Y2sgQ29uc3RyYWludCBOb2RlCiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydjaGVja19jb25zdHJh aW50J10pIHsKICAgICBwZ0FkbWluLkJyb3dzZXIuTm9kZXNbJ2NoZWNrX2NvbnN0cmFpbnQnXSA9 IHBnQnJvd3Nlci5Ob2RlLmV4dGVuZCh7Ci0gICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdC cm93c2VyLnRhYmxlQ2hpbGRUcmVlTm9kZUhpZXJhcmNoeSwKICAgICAgIHR5cGU6ICdjaGVja19j b25zdHJhaW50JywKICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDaGVjaycpLAogICAgICAgY29sbGVj dGlvbl90eXBlOiAnY29sbC1jb25zdHJhaW50cycsCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29u c3RyYWludHMvZXhjbHVzaW9uX2NvbnN0cmFpbnQvc3RhdGljL2pzL2V4Y2x1c2lvbl9jb25zdHJh aW50LmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJh c2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2V4Y2x1c2lvbl9jb25zdHJhaW50L3N0YXRp Yy9qcy9leGNsdXNpb25fY29uc3RyYWludC5qcwppbmRleCAwYmJmNjZhMS4uYWRjY2YyZTkgMTAw NjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9leGNsdXNpb25fY29uc3RyYWludC9zdGF0 aWMvanMvZXhjbHVzaW9uX2NvbnN0cmFpbnQuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9z ZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRz L2V4Y2x1c2lvbl9jb25zdHJhaW50L3N0YXRpYy9qcy9leGNsdXNpb25fY29uc3RyYWludC5qcwpA QCAtNjA1LDcgKzYwNSw2IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmV4Y2x1c2lvbl9jb25zdHJh aW50JywgWwogICAvLyBFeHRlbmQgdGhlIGJyb3dzZXIncyBub2RlIGNsYXNzIGZvciBleGNsdXNp b24gY29uc3RyYWludCBub2RlCiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydleGNsdXNpb25fY29u c3RyYWludCddKSB7CiAgICAgcGdBZG1pbi5Ccm93c2VyLk5vZGVzWydleGNsdXNpb25fY29uc3Ry YWludCddID0gcGdCcm93c2VyLk5vZGUuZXh0ZW5kKHsKLSAgICAgIGdldFRyZWVOb2RlSGllcmFy Y2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgdHlwZTog J2V4Y2x1c2lvbl9jb25zdHJhaW50JywKICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdFeGNsdXNpb24g Y29uc3RyYWludCcpLAogICAgICAgY29sbGVjdGlvbl90eXBlOiAnY29sbC1jb25zdHJhaW50cycs CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvZm9yZWlnbl9rZXkvc3RhdGljL2pz L2ZvcmVpZ25fa2V5LmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2ZvcmVpZ25fa2V5L3N0YXRp Yy9qcy9mb3JlaWduX2tleS5qcwppbmRleCA0OTk3ZDE3NS4uNzg4Y2VjZmMgMTAwNjQ0Ci0tLSBh L3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hl bWFzL3RhYmxlcy9jb25zdHJhaW50cy9mb3JlaWduX2tleS9zdGF0aWMvanMvZm9yZWlnbl9rZXku anMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJh c2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2ZvcmVpZ25fa2V5L3N0YXRpYy9qcy9mb3Jl aWduX2tleS5qcwpAQCAtNjAzLDcgKzYwMyw2IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmZvcmVp Z25fa2V5JywgWwogICAvLyBFeHRlbmQgdGhlIGJyb3dzZXIncyBub2RlIGNsYXNzIGZvciBmb3Jl aWduIGtleSBub2RlCiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydmb3JlaWduX2tleSddKSB7CiAg ICAgcGdBZG1pbi5Ccm93c2VyLk5vZGVzWydmb3JlaWduX2tleSddID0gcGdCcm93c2VyLk5vZGUu ZXh0ZW5kKHsKLSAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVDaGls ZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgdHlwZTogJ2ZvcmVpZ25fa2V5JywKICAgICAgIGxh YmVsOiBnZXR0ZXh0KCdGb3JlaWduIGtleScpLAogICAgICAgY29sbGVjdGlvbl90eXBlOiAnY29s bC1jb25zdHJhaW50cycsCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvaW5kZXhf Y29uc3RyYWludC9zdGF0aWMvanMvcHJpbWFyeV9rZXkuanMgYi93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWlu dHMvaW5kZXhfY29uc3RyYWludC9zdGF0aWMvanMvcHJpbWFyeV9rZXkuanMKaW5kZXggZDNhNmNm ZjQuLjBhZDBmMDU0IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvaW5kZXhfY29u c3RyYWludC9zdGF0aWMvanMvcHJpbWFyeV9rZXkuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFp bnRzL2luZGV4X2NvbnN0cmFpbnQvc3RhdGljL2pzL3ByaW1hcnlfa2V5LmpzCkBAIC0yMCw3ICsy MCw2IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnByaW1hcnlfa2V5JywgWwogICAgICAgcGFyZW50 X3R5cGU6IFsndGFibGUnLCdwYXJ0aXRpb24nXSwKICAgICAgIGNhbkRyb3A6IHRydWUsCiAgICAg ICBjYW5Ecm9wQ2FzY2FkZTogdHJ1ZSwKLSAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jy b3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgSW5pdDogZnVuY3Rpb24o KSB7CiAgICAgICAgIC8qIEF2b2lkIG11bHRpcGxlIHJlZ2lzdHJhdGlvbiBvZiBtZW51cyAqLwog ICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25z dHJhaW50cy9pbmRleF9jb25zdHJhaW50L3N0YXRpYy9qcy91bmlxdWVfY29uc3RyYWludC5qcyBi L3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hl bWFzL3RhYmxlcy9jb25zdHJhaW50cy9pbmRleF9jb25zdHJhaW50L3N0YXRpYy9qcy91bmlxdWVf Y29uc3RyYWludC5qcwppbmRleCA3NjkxODVkNi4uMThkM2NhMzMgMTAwNjQ0Ci0tLSBhL3dlYi9w Z2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3Rh Ymxlcy9jb25zdHJhaW50cy9pbmRleF9jb25zdHJhaW50L3N0YXRpYy9qcy91bmlxdWVfY29uc3Ry YWludC5qcworKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvaW5kZXhfY29uc3RyYWludC9zdGF0 aWMvanMvdW5pcXVlX2NvbnN0cmFpbnQuanMKQEAgLTIwLDcgKzIwLDYgQEAgZGVmaW5lKCdwZ2Fk bWluLm5vZGUudW5pcXVlX2NvbnN0cmFpbnQnLCBbCiAgICAgICBwYXJlbnRfdHlwZTogWyd0YWJs ZScsJ3BhcnRpdGlvbiddLAogICAgICAgY2FuRHJvcDogdHJ1ZSwKICAgICAgIGNhbkRyb3BDYXNj YWRlOiB0cnVlLAotICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6IHBnQnJvd3Nlci50YWJsZUNo aWxkVHJlZU5vZGVIaWVyYXJjaHksCiAgICAgICBJbml0OiBmdW5jdGlvbigpIHsKICAgICAgICAg LyogQXZvaWQgbXVsdGlwbGUgcmVnaXN0cmF0aW9uIG9mIG1lbnVzICovCiAgICAgICAgIGlmICh0 aGlzLmluaXRpYWxpemVkKQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL3N0YXRp Yy9qcy9jb25zdHJhaW50cy5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9z ZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9zdGF0aWMvanMvY29u c3RyYWludHMuanMKaW5kZXggY2IyNDJjZDIuLjljMGUyNGZlIDEwMDY0NAotLS0gYS93ZWIvcGdh ZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJs ZXMvY29uc3RyYWludHMvc3RhdGljL2pzL2NvbnN0cmFpbnRzLmpzCisrKyBiL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9j b25zdHJhaW50cy9zdGF0aWMvanMvY29uc3RyYWludHMuanMKQEAgLTEyLDE0ICsxMiwxMiBAQCBk ZWZpbmUoJ3BnYWRtaW4ubm9kZS5jb25zdHJhaW50cycsIFsKICAgICAgICAgbm9kZTogJ2NvbnN0 cmFpbnRzJywKICAgICAgICAgbGFiZWw6IGdldHRleHQoJ0NvbnN0cmFpbnRzJyksCiAgICAgICAg IHR5cGU6ICdjb2xsLWNvbnN0cmFpbnRzJywKLSAgICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6 IHBnQnJvd3Nlci50YWJsZUNoaWxkVHJlZU5vZGVIaWVyYXJjaHksCiAgICAgICAgIGNvbHVtbnM6 IFsnbmFtZScsICdjb21tZW50J10sCiAgICAgICB9KTsKICAgfQogCiAgIGlmICghcGdCcm93c2Vy Lk5vZGVzWydjb25zdHJhaW50cyddKSB7CiAgICAgcGdBZG1pbi5Ccm93c2VyLk5vZGVzWydjb25z dHJhaW50cyddID0gcGdCcm93c2VyLk5vZGUuZXh0ZW5kKHsKLSAgICAgIGdldFRyZWVOb2RlSGll cmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgdHlw ZTogJ2NvbnN0cmFpbnRzJywKICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDb25zdHJhaW50cycpLAog ICAgICAgY29sbGVjdGlvbl90eXBlOiAnY29sbC1jb25zdHJhaW50cycsCmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvaW5kZXhlcy9zdGF0aWMvanMvaW5kZXguanMgYi93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvaW5kZXhlcy9z dGF0aWMvanMvaW5kZXguanMKaW5kZXggZWMyYjRkYTEuLjJiNjg3YzFhIDEwMDY0NAotLS0gYS93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvaW5kZXhlcy9zdGF0aWMvanMvaW5kZXguanMKKysrIGIvd2ViL3BnYWRtaW4vYnJv d3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2luZGV4 ZXMvc3RhdGljL2pzL2luZGV4LmpzCkBAIC0xMyw3ICsxMyw2IEBAIGRlZmluZSgncGdhZG1pbi5u b2RlLmluZGV4JywgWwogICAgICAgICBub2RlOiAnaW5kZXgnLAogICAgICAgICBsYWJlbDogZ2V0 dGV4dCgnSW5kZXhlcycpLAogICAgICAgICB0eXBlOiAnY29sbC1pbmRleCcsCi0gICAgICAgIGdl dFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5 LAogICAgICAgICBzcWxBbHRlckhlbHA6ICdzcWwtYWx0ZXJpbmRleC5odG1sJywKICAgICAgICAg c3FsQ3JlYXRlSGVscDogJ3NxbC1jcmVhdGVpbmRleC5odG1sJywKICAgICAgICAgZGlhbG9nSGVs cDogdXJsX2ZvcignaGVscC5zdGF0aWMnLCB7J2ZpbGVuYW1lJzogJ2luZGV4X2RpYWxvZy5odG1s J30pLApAQCAtMjE1LDcgKzIxNCw2IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmluZGV4JywgWwog CiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydpbmRleCddKSB7CiAgICAgcGdBZG1pbi5Ccm93c2Vy Lk5vZGVzWydpbmRleCddID0gcGdCcm93c2VyLk5vZGUuZXh0ZW5kKHsKLSAgICAgIGdldFRyZWVO b2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAg ICAgcGFyZW50X3R5cGU6IFsndGFibGUnLCAndmlldycsICdtdmlldycsICdwYXJ0aXRpb24nXSwK ICAgICAgIGNvbGxlY3Rpb25fdHlwZTogWydjb2xsLXRhYmxlJywgJ2NvbGwtdmlldyddLAogICAg ICAgc3FsQWx0ZXJIZWxwOiAnc3FsLWFsdGVyaW5kZXguaHRtbCcsCmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90 YWJsZXMvcGFydGl0aW9ucy9zdGF0aWMvanMvcGFydGl0aW9uLmpzIGIvd2ViL3BnYWRtaW4vYnJv d3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3BhcnRp dGlvbnMvc3RhdGljL2pzL3BhcnRpdGlvbi5qcwppbmRleCBmZDUzZjc0My4uZWY4ZWI1MzQgMTAw NjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9zY2hlbWFzL3RhYmxlcy9wYXJ0aXRpb25zL3N0YXRpYy9qcy9wYXJ0aXRpb24uanMKKysr IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvdGFibGVzL3BhcnRpdGlvbnMvc3RhdGljL2pzL3BhcnRpdGlvbi5qcwpAQCAtMSwxMCAr MSwxMiBAQAogZGVmaW5lKFsKKyAgJ3NvdXJjZXMvdHJlZS9wZ2FkbWluX3RyZWVfbm9kZScsCiAg ICdzb3VyY2VzL2dldHRleHQnLCAnc291cmNlcy91cmxfZm9yJywgJ2pxdWVyeScsICd1bmRlcnNj b3JlJywKICAgJ3VuZGVyc2NvcmUuc3RyaW5nJywgJ3NvdXJjZXMvcGdhZG1pbicsICdwZ2FkbWlu LmJyb3dzZXInLAogICAncGdhZG1pbi5hbGVydGlmeWpzJywgJ3BnYWRtaW4uYmFja2Zvcm0nLCAn cGdhZG1pbi5iYWNrZ3JpZCcsCiAgICdwZ2FkbWluLmJyb3dzZXIuY29sbGVjdGlvbicsICdwZ2Fk bWluLmJyb3dzZXIudGFibGUucGFydGl0aW9uLnV0aWxzJywKIF0sCiBmdW5jdGlvbigKKyAgcGdh ZG1pblRyZWVOb2RlLAogICBnZXR0ZXh0LCB1cmxfZm9yLCAkLCBfLCBTLCBwZ0FkbWluLCBwZ0Jy b3dzZXIsIEFsZXJ0aWZ5LCBCYWNrZm9ybSwgQmFja2dyaWQKICkgewogCkBAIC0xMyw3ICsxNSw2 IEBAIGZ1bmN0aW9uKAogICAgICAgcGdBZG1pbi5Ccm93c2VyLkNvbGxlY3Rpb24uZXh0ZW5kKHsK ICAgICAgICAgbm9kZTogJ3BhcnRpdGlvbicsCiAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdQYXJ0 aXRpb25zJyksCi0gICAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVD aGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgICB0eXBlOiAnY29sbC1wYXJ0aXRpb24nLAog ICAgICAgICBjb2x1bW5zOiBbCiAgICAgICAgICAgJ25hbWUnLCAnc2NoZW1hJywgJ3BhcnRpdGlv bl92YWx1ZScsICdpc19wYXJ0aXRpb25lZCcsICdkZXNjcmlwdGlvbicsCkBAIC04MCwzNiArODEs NiBAQCBmdW5jdGlvbigKICAgICAgICAgfSwKICAgICAgICAgXSk7CiAgICAgICB9LAotICAgICAg Z2V0VHJlZU5vZGVIaWVyYXJjaHk6IGZ1bmN0aW9uKGkpIHsKLSAgICAgICAgdmFyIGlkeCA9IDAs Ci0gICAgICAgICAgcmVzID0ge30sCi0gICAgICAgICAgdCA9IHBnQnJvd3Nlci50cmVlOwotCi0g ICAgICAgIGRvIHsKLSAgICAgICAgICB2YXIgZCA9IHQuaXRlbURhdGEoaSk7Ci0gICAgICAgICAg aWYgKAotICAgICAgICAgICAgZC5fdHlwZSBpbiBwZ0Jyb3dzZXIuTm9kZXMgJiYgcGdCcm93c2Vy Lk5vZGVzW2QuX3R5cGVdLmhhc0lkCi0gICAgICAgICAgKSB7Ci0gICAgICAgICAgICBpZiAoZC5f dHlwZSA9PSAncGFydGl0aW9uJyAmJiAncGFydGl0aW9uJyBpbiByZXMpIHsKLSAgICAgICAgICAg ICAgaWYgKCEoJ3RhYmxlJyBpbiByZXMpKSB7Ci0gICAgICAgICAgICAgICAgcmVzWyd0YWJsZSdd ID0gXy5leHRlbmQoe30sIGQsIHsncHJpb3JpdHknOiBpZHh9KTsKLSAgICAgICAgICAgICAgICBp ZHggLT0gMTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChkLl90eXBl ID09ICd0YWJsZScpIHsKLSAgICAgICAgICAgICAgaWYgKCEoJ3RhYmxlJyBpbiByZXMpKSB7Ci0g ICAgICAgICAgICAgICAgcmVzWyd0YWJsZSddID0gXy5leHRlbmQoe30sIGQsIHsncHJpb3JpdHkn OiBpZHh9KTsKLSAgICAgICAgICAgICAgICBpZHggLT0gMTsKLSAgICAgICAgICAgICAgfQotICAg ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcmVzW2QuX3R5cGVdID0gXy5leHRlbmQo e30sIGQsIHsncHJpb3JpdHknOiBpZHh9KTsKLSAgICAgICAgICAgICAgaWR4IC09IDE7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGkgPSB0Lmhhc1BhcmVudChpKSA/IHQu cGFyZW50KGkpIDogbnVsbDsKLSAgICAgICAgfSB3aGlsZSAoaSk7Ci0KLSAgICAgICAgcmV0dXJu IHJlczsKLSAgICAgIH0sCiAgICAgICBnZW5lcmF0ZV91cmw6IGZ1bmN0aW9uKGl0ZW0sIHR5cGUs IGQsIHdpdGhfaWQsIGluZm8pIHsKICAgICAgICAgaWYgKF8uaW5kZXhPZihbCiAgICAgICAgICAg J3N0YXRzJywgJ3N0YXRpc3RpY3MnLCAnZGVwZW5kZW5jeScsICdkZXBlbmRlbnQnLCAncmVzZXQn LApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3J1bGVzL3N0YXRpYy9qcy9ydWxlLmpzIGIvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFi bGVzL3J1bGVzL3N0YXRpYy9qcy9ydWxlLmpzCmluZGV4IDNhZjYxNzU0Li4zNTQ5MDlmMyAxMDA2 NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJh c2VzL3NjaGVtYXMvdGFibGVzL3J1bGVzL3N0YXRpYy9qcy9ydWxlLmpzCisrKyBiL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxl cy9ydWxlcy9zdGF0aWMvanMvcnVsZS5qcwpAQCAtMTYsNyArMTYsNiBAQCBkZWZpbmUoJ3BnYWRt aW4ubm9kZS5ydWxlJywgWwogICAgICAgICBub2RlOiAncnVsZScsCiAgICAgICAgIGxhYmVsOiBn ZXR0ZXh0KCdSdWxlcycpLAogICAgICAgICB0eXBlOiAnY29sbC1ydWxlJywKLSAgICAgICAgZ2V0 VHJlZU5vZGVIaWVyYXJjaHk6IHBnQnJvd3Nlci50YWJsZUNoaWxkVHJlZU5vZGVIaWVyYXJjaHks CiAgICAgICAgIGNvbHVtbnM6IFsnbmFtZScsICdvd25lcicsICdjb21tZW50J10sCiAgICAgICB9 KTsKICAgfQpAQCAtMzUsNyArMzQsNiBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS5ydWxlJywgWwog ICAgKi8KICAgaWYgKCFwZ0Jyb3dzZXIuTm9kZXNbJ3J1bGUnXSkgewogICAgIHBnQWRtaW4uQnJv d3Nlci5Ob2Rlc1sncnVsZSddID0gcGdCcm93c2VyLk5vZGUuZXh0ZW5kKHsKLSAgICAgIGdldFRy ZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAog ICAgICAgcGFyZW50X3R5cGU6IFsndGFibGUnLCd2aWV3JywgJ3BhcnRpdGlvbiddLAogICAgICAg dHlwZTogJ3J1bGUnLAogICAgICAgc3FsQWx0ZXJIZWxwOiAnc3FsLWFsdGVycnVsZS5odG1sJywK ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9zdGF0aWMvanMvdGFibGUuanMgYi93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvc3Rh dGljL2pzL3RhYmxlLmpzCmluZGV4IDY0N2QxYmZlLi45OWQ2MDI0MyAxMDA2NDQKLS0tIGEvd2Vi L3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMv dGFibGVzL3N0YXRpYy9qcy90YWJsZS5qcworKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvc3RhdGljL2pzL3RhYmxl LmpzCkBAIC0yNiw3ICsyNiw2IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnRhYmxlJywgWwogCiAg IGlmICghcGdCcm93c2VyLk5vZGVzWyd0YWJsZSddKSB7CiAgICAgcGdCcm93c2VyLk5vZGVzWyd0 YWJsZSddID0gcGdCcm93c2VyLk5vZGUuZXh0ZW5kKHsKLSAgICAgIGdldFRyZWVOb2RlSGllcmFy Y2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgdHlwZTog J3RhYmxlJywKICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdUYWJsZScpLAogICAgICAgY29sbGVjdGlv bl90eXBlOiAnY29sbC10YWJsZScsCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3Nl cnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdHJpZ2dlcnMvc3Rh dGljL2pzL3RyaWdnZXIuanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdHJpZ2dlcnMvc3RhdGljL2pzL3RyaWdnZXIu anMKaW5kZXggZmJlNzY1OWUuLjlhMWNlMmUwIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93 c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdHJpZ2dl cnMvc3RhdGljL2pzL3RyaWdnZXIuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RyaWdnZXJzL3N0YXRpYy9q cy90cmlnZ2VyLmpzCkBAIC0yOSwxNCArMjksMTIgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudHJp Z2dlcicsIFsKICAgICAgICAgbm9kZTogJ3RyaWdnZXInLAogICAgICAgICBsYWJlbDogZ2V0dGV4 dCgnVHJpZ2dlcnMnKSwKICAgICAgICAgdHlwZTogJ2NvbGwtdHJpZ2dlcicsCi0gICAgICAgIGdl dFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5 LAogICAgICAgICBjb2x1bW5zOiBbJ25hbWUnLCAnZGVzY3JpcHRpb24nXSwKICAgICAgIH0pOwog ICB9CiAKICAgaWYgKCFwZ0Jyb3dzZXIuTm9kZXNbJ3RyaWdnZXInXSkgewogICAgIHBnQWRtaW4u QnJvd3Nlci5Ob2Rlc1sndHJpZ2dlciddID0gcGdCcm93c2VyLk5vZGUuZXh0ZW5kKHsKLSAgICAg IGdldFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFy Y2h5LAogICAgICAgcGFyZW50X3R5cGU6IFsndGFibGUnLCAndmlldycsICdwYXJ0aXRpb24nXSwK ICAgICAgIGNvbGxlY3Rpb25fdHlwZTogWydjb2xsLXRhYmxlJywgJ2NvbGwtdmlldyddLAogICAg ICAgdHlwZTogJ3RyaWdnZXInLApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0 aWMvanMvYnJvd3Nlci5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2pzL2Jyb3dzZXIu anMKaW5kZXggMGY2NDBhOTAuLmM5NDYxNmRkIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93 c2VyL3N0YXRpYy9qcy9icm93c2VyLmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGlj L2pzL2Jyb3dzZXIuanMKQEAgLTEsNCArMSw1IEBACiBkZWZpbmUoJ3BnYWRtaW4uYnJvd3Nlcics IFsKKyAgJ3NvdXJjZXMvdHJlZS90cmVlJywKICAgJ3NvdXJjZXMvZ2V0dGV4dCcsICdzb3VyY2Vz L3VybF9mb3InLCAncmVxdWlyZScsICdqcXVlcnknLCAndW5kZXJzY29yZScsICd1bmRlcnNjb3Jl LnN0cmluZycsCiAgICdib290c3RyYXAnLCAnc291cmNlcy9wZ2FkbWluJywgJ3BnYWRtaW4uYWxl cnRpZnlqcycsICdidW5kbGVkX2NvZGVtaXJyb3InLAogICAnc291cmNlcy9jaGVja19ub2RlX3Zp c2liaWxpdHknLCAnc291cmNlcy9tb2RpZnlfYW5pbWF0aW9uJywgJ3BnYWRtaW4uYnJvd3Nlci51 dGlscycsICd3Y2RvY2tlcicsCkBAIC0xMCw2ICsxMSw3IEBAIGRlZmluZSgncGdhZG1pbi5icm93 c2VyJywgWwogICAnc291cmNlcy9jb2RlbWlycm9yL2FkZG9uL2ZvbGQvcGdhZG1pbi1zcWxmb2xk Y29kZScsCiAgICdwZ2FkbWluLmJyb3dzZXIua2V5Ym9hcmQnLAogXSwgZnVuY3Rpb24oCisgIHRy ZWUsCiAgIGdldHRleHQsIHVybF9mb3IsIHJlcXVpcmUsICQsIF8sIFMsIEJvb3RzdHJhcCwgcGdB ZG1pbiwgQWxlcnRpZnksCiAgIGNvZGVtaXJyb3IsIGNoZWNrTm9kZVZpc2liaWxpdHksIG1vZGlm eUFuaW1hdGlvbgogKSB7CkBAIC04Niw2ICs4OCw3IEBAIGRlZmluZSgncGdhZG1pbi5icm93c2Vy JywgWwogICAgICAgfSk7CiAKICAgICAgIGIudHJlZSA9ICQoJyN0cmVlJykuYWNpVHJlZSgnYXBp Jyk7CisgICAgICBiLnRyZWVNZW51LnJlZ2lzdGVyKCQoJyN0cmVlJykpOwogICAgIH07CiAKICAg Ly8gRXh0ZW5kIHRoZSBicm93c2VyIGNsYXNzIGF0dHJpYnV0ZXMKQEAgLTEwMCw2ICsxMDMsNyBA QCBkZWZpbmUoJ3BnYWRtaW4uYnJvd3NlcicsIFsKICAgICBlZGl0b3I6bnVsbCwKICAgICAvLyBM ZWZ0IGhhbmQgYnJvd3NlciB0cmVlCiAgICAgdHJlZTpudWxsLAorICAgIHRyZWVNZW51OiBuZXcg dHJlZS5UcmVlKCksCiAgICAgLy8gbGlzdCBvZiBzY3JpcHQgdG8gYmUgbG9hZGVkLCB3aGVuIGEg Y2VydGFpbiB0eXBlIG9mIG5vZGUgaXMgbG9hZGVkCiAgICAgLy8gSXQgd2lsbCBiZSB1c2VkIHRv IHJlZ2lzdGVyIGV4dGVuc2lvbnMsIHRvb2xzLCBjaGlsZCBub2RlIHNjcmlwdHMsCiAgICAgLy8g ZXRjLgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvbm9kZS5qcyBi L3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2pzL25vZGUuanMKaW5kZXggYWQ1ODI0ODMuLjNi YWY1NTRhIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3N0YXRpYy9qcy9ub2RlLmpz CisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2pzL25vZGUuanMKQEAgLTEsOSArMSwx MiBAQAogZGVmaW5lKCdwZ2FkbWluLmJyb3dzZXIubm9kZScsIFsKKyAgJ3NvdXJjZXMvdHJlZS9w Z2FkbWluX3RyZWVfbm9kZScsCiAgICdzb3VyY2VzL2dldHRleHQnLCAnanF1ZXJ5JywgJ3VuZGVy c2NvcmUnLCAndW5kZXJzY29yZS5zdHJpbmcnLCAnc291cmNlcy9wZ2FkbWluJywKICAgJ3BnYWRt aW4uYnJvd3Nlci5tZW51JywgJ2JhY2tib25lJywgJ3BnYWRtaW4uYWxlcnRpZnlqcycsICdwZ2Fk bWluLmJyb3dzZXIuZGF0YW1vZGVsJywKICAgJ2JhY2tmb3JtJywgJ3NvdXJjZXMvYnJvd3Nlci9n ZW5lcmF0ZV91cmwnLCAnc291cmNlcy91dGlscycsICdwZ2FkbWluLmJyb3dzZXIudXRpbHMnLAog ICAncGdhZG1pbi5iYWNrZm9ybScsCi1dLCBmdW5jdGlvbihnZXR0ZXh0LCAkLCBfLCBTLCBwZ0Fk bWluLCBNZW51LCBCYWNrYm9uZSwgQWxlcnRpZnksIHBnQnJvd3NlciwgQmFja2Zvcm0sIGdlbmVy YXRlVXJsLCBjb21tb25VdGlscykgeworXSwgZnVuY3Rpb24oCisgIHBnYWRtaW5UcmVlTm9kZSwK KyAgZ2V0dGV4dCwgJCwgXywgUywgcGdBZG1pbiwgTWVudSwgQmFja2JvbmUsIEFsZXJ0aWZ5LCBw Z0Jyb3dzZXIsIEJhY2tmb3JtLCBnZW5lcmF0ZVVybCwgY29tbW9uVXRpbHMpIHsKIAogICB2YXIg d2NEb2NrZXIgPSB3aW5kb3cud2NEb2NrZXIsCiAgICAga2V5Q29kZSA9IHsKQEAgLTE1NjYsNyAr MTU2OSw2IEBAIGRlZmluZSgncGdhZG1pbi5icm93c2VyLm5vZGUnLCBbCiAgICAgICogZGVwZW5k cywgc3RhdGlzdGljcwogICAgICAqLwogICAgIGdlbmVyYXRlX3VybDogZnVuY3Rpb24oaXRlbSwg dHlwZSwgZCwgd2l0aF9pZCwgaW5mbykgewotCiAgICAgICB2YXIgb3BVUkwgPSB7CiAgICAgICAg ICAgJ2NyZWF0ZSc6ICdvYmonLAogICAgICAgICAgICdkcm9wJzogJ29iaicsCkBAIC0xNjA4LDI0 ICsxNjEwLDcgQEAgZGVmaW5lKCdwZ2FkbWluLmJyb3dzZXIubm9kZScsIFsKICAgICBDb2xsZWN0 aW9uOiBwZ0Jyb3dzZXIuRGF0YUNvbGxlY3Rpb24sCiAgICAgLy8gQmFzZSBjbGFzcyBmb3IgTm9k ZSBEYXRhIE1vZGVsCiAgICAgTW9kZWw6IHBnQnJvd3Nlci5EYXRhTW9kZWwsCi0gICAgZ2V0VHJl ZU5vZGVIaWVyYXJjaHk6IGZ1bmN0aW9uKGkpIHsKLSAgICAgIHZhciBpZHggPSAwLAotICAgICAg ICByZXMgPSB7fSwKLSAgICAgICAgdCA9IHBnQnJvd3Nlci50cmVlLAotICAgICAgICBkOwotICAg ICAgZG8gewotICAgICAgICBkID0gdC5pdGVtRGF0YShpKTsKLSAgICAgICAgaWYgKGQuX3R5cGUg aW4gcGdCcm93c2VyLk5vZGVzICYmIHBnQnJvd3Nlci5Ob2Rlc1tkLl90eXBlXS5oYXNJZCkgewot ICAgICAgICAgIHJlc1tkLl90eXBlXSA9IF8uZXh0ZW5kKHt9LCBkLCB7Ci0gICAgICAgICAgICAn cHJpb3JpdHknOiBpZHgsCi0gICAgICAgICAgfSk7Ci0gICAgICAgICAgaWR4IC09IDE7Ci0gICAg ICAgIH0KLSAgICAgICAgaSA9IHQuaGFzUGFyZW50KGkpID8gdC5wYXJlbnQoaSkgOiBudWxsOwot ICAgICAgfSB3aGlsZSAoaSk7Ci0KLSAgICAgIHJldHVybiByZXM7Ci0gICAgfSwKKyAgICBnZXRU cmVlTm9kZUhpZXJhcmNoeTogcGdhZG1pblRyZWVOb2RlLmdldFRyZWVOb2RlSGllcmFyY2h5RnJv bUlkZW50aWZpZXIuYmluZChwZ0Jyb3dzZXIpLAogICAgIGNhY2hlOiBmdW5jdGlvbih1cmwsIG5v ZGVfaW5mbywgbGV2ZWwsIGRhdGEpIHsKICAgICAgIHZhciBjYWNoZWQgPSB0aGlzLmNhY2hlZCA9 IHRoaXMuY2FjaGVkIHx8IHt9LAogICAgICAgICBoYXNoID0gdXJsLApkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vc3RhdGljL2pzL2JhY2t1cC9iYWNrdXBfZGlhbG9nLmpzIGIvd2ViL3BnYWRtaW4v c3RhdGljL2pzL2JhY2t1cC9iYWNrdXBfZGlhbG9nLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwLi43NzkxNzBlZQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3N0 YXRpYy9qcy9iYWNrdXAvYmFja3VwX2RpYWxvZy5qcwpAQCAtMCwwICsxLDE0MiBAQAorLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor Ly8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMp IDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3 YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor CitpbXBvcnQgZ2V0dGV4dCBmcm9tICcuLi9nZXR0ZXh0JzsKK2ltcG9ydCB7c3ByaW50Zn0gZnJv bSAnc3ByaW50Zi1qcyc7CitpbXBvcnQgQmFja2Zvcm0gZnJvbSAnLi4vYmFja2Zvcm0ucGdhZG1p bic7CitpbXBvcnQge0RpYWxvZ0ZhY3Rvcnl9IGZyb20gJy4vYmFja3VwX2RpYWxvZ19mYWN0b3J5 JzsKKworZXhwb3J0IGNsYXNzIEJhY2t1cERpYWxvZyB7CisgIGNvbnN0cnVjdG9yKHBnQnJvd3Nl ciwgJCwgYWxlcnRpZnksIEJhY2t1cE1vZGVsLCBiYWNrZm9ybSA9IEJhY2tmb3JtKSB7CisgICAg dGhpcy5wZ0Jyb3dzZXIgPSBwZ0Jyb3dzZXI7CisgICAgdGhpcy5qcXVlcnkgPSAkOworICAgIHRo aXMuYWxlcnRpZnkgPSBhbGVydGlmeTsKKyAgICB0aGlzLmJhY2t1cE1vZGVsID0gQmFja3VwTW9k ZWw7CisgICAgdGhpcy5iYWNrZm9ybSA9IGJhY2tmb3JtOworICB9CisKKyAgZHJhdyhhY3Rpb24s IGl0ZW0sIHBhcmFtcykgeworICAgIGNvbnN0IHNlcnZlckluZm9ybWF0aW9uID0gdGhpcy5yZXRy aWV2ZUFuY2VzdG9yT2ZUeXBlU2VydmVyKGl0ZW0pOworCisgICAgaWYgKCFzZXJ2ZXJJbmZvcm1h dGlvbikgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdGhpcy5oYXNCaW5hcmll c0NvbmZpZ3VyYXRpb24oc2VydmVySW5mb3JtYXRpb24pKSB7CisgICAgICByZXR1cm47CisgICAg fQorCisgICAgY29uc3QgdHlwZU9mRGlhbG9nID0gQmFja3VwRGlhbG9nLnR5cGVPZkRpYWxvZyhw YXJhbXMpOworCisgICAgY29uc3QgZGlhbG9nID0gdGhpcy5jcmVhdGVPckdldERpYWxvZyh0eXBl T2ZEaWFsb2cpOworICAgIGRpYWxvZyh0cnVlKS5yZXNpemVUbygnNjAlJywgJzUwJScpOworICB9 CisKKyAgc3RhdGljIHR5cGVPZkRpYWxvZyhwYXJhbXMpIHsKKyAgICBpZihwYXJhbXMgPT09IG51 bGwpIHsKKyAgICAgIHJldHVybiAnYmFja3VwX29iamVjdHMnOworICAgIH0KKyAgICBsZXQgdHlw ZU9mRGlhbG9nID0gJ3NlcnZlcic7CisgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHBhcmFtc1snZ2xv YmFscyddKSAmJiBwYXJhbXNbJ2dsb2JhbHMnXSkgeworICAgICAgdHlwZU9mRGlhbG9nID0gJ2ds b2JhbHMnOworICAgIH0KKyAgICByZXR1cm4gdHlwZU9mRGlhbG9nOworICB9CisKKyAgc3RhdGlj IGRpYWxvZ1RpdGxlKHR5cGVPZkRpYWxvZykgeworICAgIGlmKHR5cGVPZkRpYWxvZyA9PT0gJ2Jh Y2t1cF9vYmplY3RzJykgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiAo KHR5cGVPZkRpYWxvZyA9PT0gJ2dsb2JhbHMnKSA/CisgICAgICBnZXR0ZXh0KCdCYWNrdXAgR2xv YmFscy4uLicpIDoKKyAgICAgIGdldHRleHQoJ0JhY2t1cCBTZXJ2ZXIuLi4nKSk7CisgIH0KKwor ICBjcmVhdGVPckdldERpYWxvZyh0eXBlT2ZEaWFsb2cpIHsKKyAgICBjb25zdCBkaWFsb2dOYW1l ID0gdGhpcy5kaWFsb2dOYW1lKHR5cGVPZkRpYWxvZyk7CisgICAgY29uc3QgZGlhbG9nVGl0bGUg PSBCYWNrdXBEaWFsb2cuZGlhbG9nVGl0bGUodHlwZU9mRGlhbG9nKTsKKworICAgIGlmICghdGhp cy5hbGVydGlmeVtkaWFsb2dOYW1lXSkgeworICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7CisgICAg ICB0aGlzLmFsZXJ0aWZ5LmRpYWxvZyhkaWFsb2dOYW1lLCBmdW5jdGlvbiBmYWN0b3J5KCkgewor ICAgICAgICByZXR1cm4gc2VsZi5kaWFsb2dGYWN0b3J5KGRpYWxvZ1RpdGxlLCB0eXBlT2ZEaWFs b2cpOworICAgICAgfSk7CisgICAgfQorICAgIHJldHVybiB0aGlzLmFsZXJ0aWZ5W2RpYWxvZ05h bWVdOworICB9CisKKyAgZGlhbG9nTmFtZSh0eXBlT2ZEaWFsb2cpIHsKKyAgICBpZih0eXBlT2ZE aWFsb2cgPT09ICdiYWNrdXBfb2JqZWN0cycpIHsKKyAgICAgIHJldHVybiB0eXBlT2ZEaWFsb2c7 CisgICAgfQorICAgIHJldHVybiAnQmFja3VwRGlhbG9nXycgKyB0eXBlT2ZEaWFsb2c7CisgIH0K KworICBoYXNCaW5hcmllc0NvbmZpZ3VyYXRpb24oc2VydmVySW5mb3JtYXRpb24pIHsKKyAgICBj b25zdCBtb2R1bGUgPSAncGF0aHMnOworICAgIGxldCBwcmVmZXJlbmNlX25hbWUgPSAncGdfYmlu X2Rpcic7CisgICAgbGV0IG1zZyA9IGdldHRleHQoJ1BsZWFzZSBjb25maWd1cmUgdGhlIFBvc3Rn cmVTUUwgQmluYXJ5IFBhdGggaW4gdGhlIFByZWZlcmVuY2VzIGRpYWxvZy4nKTsKKworICAgIGlm ICgoc2VydmVySW5mb3JtYXRpb24udHlwZSAmJiBzZXJ2ZXJJbmZvcm1hdGlvbi50eXBlID09PSAn cHBhcycpIHx8CisgICAgICBzZXJ2ZXJJbmZvcm1hdGlvbi5zZXJ2ZXJfdHlwZSA9PT0gJ3BwYXMn KSB7CisgICAgICBwcmVmZXJlbmNlX25hbWUgPSAncHBhc19iaW5fZGlyJzsKKyAgICAgIG1zZyA9 IGdldHRleHQoJ1BsZWFzZSBjb25maWd1cmUgdGhlIEVEQiBBZHZhbmNlZCBTZXJ2ZXIgQmluYXJ5 IFBhdGggaW4gdGhlIFByZWZlcmVuY2VzIGRpYWxvZy4nKTsKKyAgICB9CisgICAgY29uc3QgcHJl ZmVyZW5jZSA9IHRoaXMucGdCcm93c2VyLmdldF9wcmVmZXJlbmNlKG1vZHVsZSwgcHJlZmVyZW5j ZV9uYW1lKTsKKworICAgIGlmIChwcmVmZXJlbmNlKSB7CisgICAgICBpZiAoIXByZWZlcmVuY2Uu dmFsdWUpIHsKKyAgICAgICAgdGhpcy5hbGVydGlmeS5hbGVydChnZXR0ZXh0KCdDb25maWd1cmF0 aW9uIHJlcXVpcmVkJyksIG1zZyk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAg ICB9IGVsc2UgeworICAgICAgdGhpcy5hbGVydGlmeS5hbGVydCgKKyAgICAgICAgZ2V0dGV4dCgn QmFja3VwIEVycm9yJyksCisgICAgICAgIHNwcmludGYoZ2V0dGV4dCgnRmFpbGVkIHRvIGxvYWQg cHJlZmVyZW5jZSAlcyBvZiBtb2R1bGUgJXMnKSwgcHJlZmVyZW5jZV9uYW1lLCBtb2R1bGUpCisg ICAgICApOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKKyAg fQorCisgIHJldHJpZXZlQW5jZXN0b3JPZlR5cGVTZXJ2ZXIoaXRlbSkgeworICAgIGxldCBzZXJ2 ZXJJbmZvcm1hdGlvbiA9IG51bGw7CisgICAgbGV0IGFjaVRyZWVJdGVtID0gaXRlbSB8fCB0aGlz LnBnQnJvd3Nlci50cmVlTWVudS5zZWxlY3RlZCgpOworICAgIGxldCB0cmVlTm9kZSA9IHRoaXMu cGdCcm93c2VyLnRyZWVNZW51LmZpbmROb2RlQnlEb21FbGVtZW50KGFjaVRyZWVJdGVtKTsKKwor ICAgIHdoaWxlICh0cmVlTm9kZSkgeworICAgICAgY29uc3Qgbm9kZV9kYXRhID0gdHJlZU5vZGUu Z2V0RGF0YSgpOworICAgICAgaWYgKG5vZGVfZGF0YS5fdHlwZSA9PT0gJ3NlcnZlcicpIHsKKyAg ICAgICAgc2VydmVySW5mb3JtYXRpb24gPSBub2RlX2RhdGE7CisgICAgICAgIGJyZWFrOworICAg ICAgfQorCisgICAgICBpZiAodHJlZU5vZGUuaGFzUGFyZW50KCkpIHsKKyAgICAgICAgdHJlZU5v ZGUgPSB0cmVlTm9kZS5wYXJlbnQoKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHRoaXMuYWxl cnRpZnkuYWxlcnQoCisgICAgICAgICAgZ2V0dGV4dCgnQmFja3VwIEVycm9yJyksCisgICAgICAg ICAgZ2V0dGV4dCgnUGxlYXNlIHNlbGVjdCBzZXJ2ZXIgb3IgY2hpbGQgbm9kZSBmcm9tIHRoZSBi cm93c2VyIHRyZWUuJykKKyAgICAgICAgKTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAg fQorICAgIHJldHVybiBzZXJ2ZXJJbmZvcm1hdGlvbjsKKyAgfQorCisgIGRpYWxvZ0ZhY3Rvcnko ZGlhbG9nVGl0bGUsIHR5cGVPZkRpYWxvZykgeworICAgIGNvbnN0IGZhY3RvcnkgPSBuZXcgRGlh bG9nRmFjdG9yeSgKKyAgICAgIHRoaXMucGdCcm93c2VyLAorICAgICAgdGhpcy5qcXVlcnksCisg ICAgICB0aGlzLmFsZXJ0aWZ5LAorICAgICAgdGhpcy5iYWNrdXBNb2RlbCwKKyAgICAgIHRoaXMu YmFja2Zvcm0pOworICAgIHJldHVybiBmYWN0b3J5LmNyZWF0ZShkaWFsb2dUaXRsZSwgdHlwZU9m RGlhbG9nKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2JhY2t1 cC9iYWNrdXBfZGlhbG9nX2ZhY3RvcnkuanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja3Vw L2JhY2t1cF9kaWFsb2dfZmFjdG9yeS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMC4uMmZkNDkxZDYKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMv YmFja3VwL2JhY2t1cF9kaWFsb2dfZmFjdG9yeS5qcwpAQCAtMCwwICsxLDU2IEBACisvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisv LworLy8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykg MjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdh cmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisK K2ltcG9ydCAqIGFzIGNvbW1vblV0aWxzIGZyb20gJy4uL3V0aWxzJzsKK2ltcG9ydCB7RGlhbG9n V3JhcHBlcn0gZnJvbSAnLi9iYWNrdXBfZGlhbG9nX3dyYXBwZXInOworCitleHBvcnQgY2xhc3Mg RGlhbG9nRmFjdG9yeSB7CisgIGNvbnN0cnVjdG9yKHBnQnJvd3NlciwgJCwgYWxlcnRpZnksIEJh Y2t1cE1vZGVsLCBiYWNrZm9ybSkgeworICAgIHRoaXMucGdCcm93c2VyID0gcGdCcm93c2VyOwor ICAgIHRoaXMuanF1ZXJ5ID0gJDsKKyAgICB0aGlzLmFsZXJ0aWZ5ID0gYWxlcnRpZnk7CisgICAg dGhpcy5iYWNrdXBNb2RlbCA9IEJhY2t1cE1vZGVsOworICAgIHRoaXMuYmFja2Zvcm0gPSBiYWNr Zm9ybTsKKyAgfQorCisgIGNyZWF0ZShkaWFsb2dUaXRsZSwgdHlwZU9mRGlhbG9nKSB7CisgICAg Y29uc3QgZGlhbG9nQ29udGFpbmVyU2VsZWN0b3IgPSAnPGRpdiBjbGFzcz1cJ2JhY2t1cF9kaWFs b2dcJz48L2Rpdj4nOworICAgIHJldHVybiBuZXcgRGlhbG9nV3JhcHBlcihkaWFsb2dDb250YWlu ZXJTZWxlY3RvciwgdGhpcywgZGlhbG9nVGl0bGUsIHR5cGVPZkRpYWxvZyk7CisgIH0KKworICBz dGF0aWMgd2FzQmFja3VwQnV0dG9uUHJlc3NlZChldmVudCkgeworICAgIHJldHVybiBldmVudC5i dXR0b25bJ2RhdGEtYnRuLW5hbWUnXSA9PT0gJ2JhY2t1cCc7CisgIH0KKworICBzdGF0aWMgd2Fz SGVscEJ1dHRvblByZXNzZWQoZSkgeworICAgIHJldHVybiBlLmJ1dHRvbi5lbGVtZW50Lm5hbWUg PT09ICdkaWFsb2dfaGVscCcKKyAgICAgIHx8IGUuYnV0dG9uLmVsZW1lbnQubmFtZSA9PT0gJ29i amVjdF9oZWxwJzsKKyAgfQorCisgIHN0YXRpYyBnZXRTZWxlY3RlZE5vZGUoc2VsZWN0ZWRUcmVl Tm9kZSkgeworICAgIGlmICghRGlhbG9nRmFjdG9yeS5pc05vZGVTZWxlY3RlZChzZWxlY3RlZFRy ZWVOb2RlKSkgeworICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICB9CisgICAgY29uc3QgdHJl ZU5vZGVEYXRhID0gc2VsZWN0ZWRUcmVlTm9kZS5nZXREYXRhKCk7CisgICAgaWYgKHRyZWVOb2Rl RGF0YSkgeworICAgICAgcmV0dXJuIHRyZWVOb2RlRGF0YTsKKyAgICB9CisgICAgcmV0dXJuIHVu ZGVmaW5lZDsKKyAgfQorCisgIHN0YXRpYyBmb2N1c09uRGlhbG9nKGRpYWxvZykgeworICAgIGNv bnN0IGNvbnRhaW5lciA9IGRpYWxvZy4kZWwuZmluZCgnLnRhYi1jb250ZW50OmZpcnN0ID4gLnRh Yi1wYW5lLmFjdGl2ZTpmaXJzdCcpOworICAgIGNvbW1vblV0aWxzLmZpbmRBbmRTZXRGb2N1cyhj b250YWluZXIpOworICB9CisKKyAgc3RhdGljIGlzTm9kZVNlbGVjdGVkKHNlbGVjdGVkVHJlZU5v ZGUpIHsKKyAgICByZXR1cm4gc2VsZWN0ZWRUcmVlTm9kZTsKKyAgfQorfQorCmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja3VwL2JhY2t1cF9kaWFsb2dfd3JhcHBlci5qcyBi L3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNrdXAvYmFja3VwX2RpYWxvZ193cmFwcGVyLmpzCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5lNWM4MDNjMAotLS0gL2Rldi9udWxs CisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNrdXAvYmFja3VwX2RpYWxvZ193cmFwcGVy LmpzCkBAIC0wLDAgKzEsMjcwIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1pbiA0IC0gUG9zdGdyZVNR TCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWluIERl dmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBv c3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2ltcG9ydCB7Z2V0VHJlZU5vZGVIaWVyYXJj aHlGcm9tRWxlbWVudH0gZnJvbSAnLi4vdHJlZS9wZ2FkbWluX3RyZWVfbm9kZSc7CitpbXBvcnQg YXhpb3MgZnJvbSAnYXhpb3MvaW5kZXgnOworaW1wb3J0IHtEaWFsb2dGYWN0b3J5fSBmcm9tICcu L2JhY2t1cF9kaWFsb2dfZmFjdG9yeSc7CitpbXBvcnQgZ2V0dGV4dCBmcm9tICcuLi9nZXR0ZXh0 JzsKK2ltcG9ydCB1cmxfZm9yIGZyb20gJy4uL3VybF9mb3InOworaW1wb3J0IF8gZnJvbSAndW5k ZXJzY29yZSc7CisKK2V4cG9ydCBjbGFzcyBEaWFsb2dXcmFwcGVyIHsKKyAgY29uc3RydWN0b3Io ZGlhbG9nQ29udGFpbmVyU2VsZWN0b3IsIGZhY3RvcnksIGRpYWxvZ1RpdGxlLCB0eXBlT2ZEaWFs b2cpIHsKKyAgICB0aGlzLmhvb2tzID0geworICAgICAgLy8gVHJpZ2dlcmVkIHdoZW4gdGhlIGRp YWxvZyBpcyBjbG9zZWQKKyAgICAgIG9uY2xvc2U6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYg KHRoaXMudmlldykgeworICAgICAgICAgIC8vIGNsZWFyIG91ciBiYWNrZm9ybSBtb2RlbC92aWV3 CisgICAgICAgICAgdGhpcy52aWV3LnJlbW92ZSh7CisgICAgICAgICAgICBkYXRhOiB0cnVlLAor ICAgICAgICAgICAgaW50ZXJuYWw6IHRydWUsCisgICAgICAgICAgICBzaWxlbnQ6IHRydWUsCisg ICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgIH0sCisgICAgfTsKKyAgICB0aGlzLmRpYWxv Z0NvbnRhaW5lclNlbGVjdG9yID0gZGlhbG9nQ29udGFpbmVyU2VsZWN0b3I7CisgICAgdGhpcy5m YWN0b3J5ID0gZmFjdG9yeTsKKyAgICB0aGlzLmRpYWxvZ1RpdGxlID0gZGlhbG9nVGl0bGU7Cisg ICAgdGhpcy50eXBlT2ZEaWFsb2cgPSB0eXBlT2ZEaWFsb2c7CisgIH0KKworICBtYWluKHRpdGxl KSB7CisgICAgdGhpcy5zZXQoJ3RpdGxlJywgdGl0bGUpOworICB9CisKKyAgYnVpbGQoKSB7Cisg ICAgdGhpcy5mYWN0b3J5LmFsZXJ0aWZ5LnBnRGlhbG9nQnVpbGQuYXBwbHkodGhpcyk7CisgIH0K KworICBzZXR1cCgpIHsKKyAgICByZXR1cm4geworICAgICAgYnV0dG9uczogW3sKKyAgICAgICAg dGV4dDogJycsCisgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tZGVmYXVsdCBwdWxsLWxlZnQg ZmEgZmEtbGcgZmEtaW5mbycsCisgICAgICAgIGF0dHJzOiB7CisgICAgICAgICAgbmFtZTogJ29i amVjdF9oZWxwJywKKyAgICAgICAgICB0eXBlOiAnYnV0dG9uJywKKyAgICAgICAgICB1cmw6ICdi YWNrdXAuaHRtbCcsCisgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ0JhY2t1cCcpLAorICAgICAg ICB9LAorICAgICAgfSwgeworICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAga2V5OiAxMTIsCisg ICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tZGVmYXVsdCBwdWxsLWxlZnQgZmEgZmEtbGcgZmEt cXVlc3Rpb24nLAorICAgICAgICBhdHRyczogeworICAgICAgICAgIG5hbWU6ICdkaWFsb2dfaGVs cCcsCisgICAgICAgICAgdHlwZTogJ2J1dHRvbicsCisgICAgICAgICAgbGFiZWw6IGdldHRleHQo J0JhY2t1cCcpLAorICAgICAgICAgIHVybDogdXJsX2ZvcignaGVscC5zdGF0aWMnLCB7CisgICAg ICAgICAgICAnZmlsZW5hbWUnOiAnYmFja3VwX2RpYWxvZy5odG1sJywKKyAgICAgICAgICB9KSwK KyAgICAgICAgfSwKKyAgICAgIH0sIHsKKyAgICAgICAgdGV4dDogZ2V0dGV4dCgnQmFja3VwJyks CisgICAgICAgIGtleTogMTMsCisgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tcHJpbWFyeSBm YSBmYS1sZyBmYS1zYXZlIHBnLWFsZXJ0aWZ5LWJ1dHRvbicsCisgICAgICAgICdkYXRhLWJ0bi1u YW1lJzogJ2JhY2t1cCcsCisgICAgICB9LCB7CisgICAgICAgIHRleHQ6IGdldHRleHQoJ0NhbmNl bCcpLAorICAgICAgICBrZXk6IDI3LAorICAgICAgICBjbGFzc05hbWU6ICdidG4gYnRuLWRhbmdl ciBmYSBmYS1sZyBmYS10aW1lcyBwZy1hbGVydGlmeS1idXR0b24nLAorICAgICAgICAnZGF0YS1i dG4tbmFtZSc6ICdjYW5jZWwnLAorICAgICAgfV0sCisgICAgICAvLyBTZXQgb3B0aW9ucyBmb3Ig ZGlhbG9nCisgICAgICBvcHRpb25zOiB7CisgICAgICAgIHRpdGxlOiB0aGlzLmRpYWxvZ1RpdGxl LAorICAgICAgICAvL2Rpc2FibGUgYm90aCBwYWRkaW5nIGFuZCBvdmVyZmxvdyBjb250cm9sLgor ICAgICAgICBwYWRkaW5nOiAhMSwKKyAgICAgICAgb3ZlcmZsb3c6ICExLAorICAgICAgICBtb2Rl bDogMCwKKyAgICAgICAgcmVzaXphYmxlOiB0cnVlLAorICAgICAgICBtYXhpbWl6YWJsZTogdHJ1 ZSwKKyAgICAgICAgcGlubmFibGU6IGZhbHNlLAorICAgICAgICBjbG9zYWJsZUJ5RGltbWVyOiBm YWxzZSwKKyAgICAgICAgbW9kYWw6IGZhbHNlLAorICAgICAgfSwKKyAgICB9OworICB9CisKKyAg cHJlcGFyZSgpIHsKKyAgICB0aGlzLmRpc2FibGVCYWNrdXBCdXR0b24oKTsKKworICAgIGNvbnN0 ICRjb250YWluZXIgPSB0aGlzLmZhY3RvcnkuanF1ZXJ5KHRoaXMuZGlhbG9nQ29udGFpbmVyU2Vs ZWN0b3IpOworICAgIGNvbnN0IHNlbGVjdGVkVHJlZU5vZGUgPSB0aGlzLmdldFNlbGVjdGVkTm9k ZSgpOworICAgIGNvbnN0IHNlbGVjdGVkVHJlZU5vZGVEYXRhID0gRGlhbG9nRmFjdG9yeS5nZXRT ZWxlY3RlZE5vZGUoc2VsZWN0ZWRUcmVlTm9kZSk7CisgICAgaWYgKCFzZWxlY3RlZFRyZWVOb2Rl RGF0YSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZh Y3RvcnkucGdCcm93c2VyLk5vZGVzW3NlbGVjdGVkVHJlZU5vZGVEYXRhLl90eXBlXTsKKyAgICBp ZiAodGhpcy5kaWFsb2dUaXRsZSA9PT0gbnVsbCkgeworICAgICAgY29uc3QgdGl0bGUgPSBgQmFj a3VwICgke25vZGUubGFiZWx9OiAke3NlbGVjdGVkVHJlZU5vZGVEYXRhLmxhYmVsfSlgOworICAg ICAgdGhpcy5tYWluKHRpdGxlKTsKKyAgICB9CisKKyAgICBjb25zdCB0cmVlSW5mbyA9IGdldFRy ZWVOb2RlSGllcmFyY2h5RnJvbUVsZW1lbnQodGhpcy5mYWN0b3J5LnBnQnJvd3Nlciwgc2VsZWN0 ZWRUcmVlTm9kZSk7CisgICAgY29uc3QgZGlhbG9nID0gdGhpcy5jcmVhdGVEaWFsb2cobm9kZSwg dHJlZUluZm8sIHRoaXMudHlwZU9mRGlhbG9nLCAkY29udGFpbmVyKTsKKyAgICB0aGlzLmFkZEFs ZXJ0aWZ5Q2xhc3NUb0JhY2t1cE5vZGVDaGlsZE5vZGVzKCk7CisgICAgZGlhbG9nLnJlbmRlcigp OworCisgICAgdGhpcy5lbGVtZW50cy5jb250ZW50LmFwcGVuZENoaWxkKCRjb250YWluZXIuZ2V0 KDApKTsKKworICAgIERpYWxvZ0ZhY3RvcnkuZm9jdXNPbkRpYWxvZyhkaWFsb2cpOworICAgIHRo aXMuc2V0TGlzdGVuZXJzRm9yRmlsZW5hbWVDaGFuZ2VzKCk7CisgIH0KKworICBjYWxsYmFjayhl dmVudCkgeworICAgIGNvbnN0IHNlbGVjdGVkVHJlZU5vZGUgPSB0aGlzLmdldFNlbGVjdGVkTm9k ZSgpOworICAgIGNvbnN0IHNlbGVjdGVkVHJlZU5vZGVEYXRhID0gRGlhbG9nRmFjdG9yeS5nZXRT ZWxlY3RlZE5vZGUoc2VsZWN0ZWRUcmVlTm9kZSk7CisgICAgY29uc3Qgbm9kZSA9IHNlbGVjdGVk VHJlZU5vZGVEYXRhICYmIHRoaXMuZmFjdG9yeS5wZ0Jyb3dzZXIuTm9kZXNbc2VsZWN0ZWRUcmVl Tm9kZURhdGEuX3R5cGVdOworCisgICAgaWYgKERpYWxvZ0ZhY3Rvcnkud2FzSGVscEJ1dHRvblBy ZXNzZWQoZXZlbnQpKSB7CisgICAgICBldmVudC5jYW5jZWwgPSB0cnVlOworICAgICAgdGhpcy5m YWN0b3J5LnBnQnJvd3Nlci5zaG93SGVscCgKKyAgICAgICAgZXZlbnQuYnV0dG9uLmVsZW1lbnQu bmFtZSwKKyAgICAgICAgZXZlbnQuYnV0dG9uLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCd1cmwnKSwK KyAgICAgICAgbm9kZSwKKyAgICAgICAgc2VsZWN0ZWRUcmVlTm9kZSwKKyAgICAgICAgZXZlbnQu YnV0dG9uLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCdsYWJlbCcpCisgICAgICApOworICAgICAgcmV0 dXJuOworICAgIH0KKworICAgIGlmIChEaWFsb2dGYWN0b3J5Lndhc0JhY2t1cEJ1dHRvblByZXNz ZWQoZXZlbnQpKSB7CisKKyAgICAgIGlmICghc2VsZWN0ZWRUcmVlTm9kZURhdGEpCisgICAgICAg IHJldHVybjsKKworICAgICAgY29uc3Qgc2VydmVySWRlbnRpZmllciA9IHRoaXMucmV0cmlldmVT ZXJ2ZXJJZGVudGlmaWVyKG5vZGUsIHNlbGVjdGVkVHJlZU5vZGUpOworCisgICAgICBjb25zdCBm YWN0b3J5ID0gdGhpcy5mYWN0b3J5OworICAgICAgbGV0IHVybFNob3J0Y3V0ID0gJ2JhY2t1cC5j cmVhdGVfc2VydmVyX2pvYic7CisgICAgICBpZiAodGhpcy50eXBlT2ZEaWFsb2cgPT09ICdiYWNr dXBfb2JqZWN0cycpIHsKKyAgICAgICAgdXJsU2hvcnRjdXQgPSAnYmFja3VwLmNyZWF0ZV9vYmpl Y3Rfam9iJzsKKyAgICAgIH0KKyAgICAgIGNvbnN0IGJhc2VVcmwgPSB1cmxfZm9yKHVybFNob3J0 Y3V0LCB7CisgICAgICAgICdzaWQnOiBzZXJ2ZXJJZGVudGlmaWVyLAorICAgICAgfSk7CisKKyAg ICAgIHRoaXMuc2V0RXh0cmFQYXJhbWV0ZXJzKHNlbGVjdGVkVHJlZU5vZGUpOworCisgICAgICBs ZXQgc2VydmljZSA9IGF4aW9zLmNyZWF0ZSh7fSk7CisgICAgICBzZXJ2aWNlLnBvc3QoCisgICAg ICAgIGJhc2VVcmwsCisgICAgICAgIHRoaXMudmlldy5tb2RlbC50b0pTT04oKQorICAgICAgKS50 aGVuKGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZmFjdG9yeS5hbGVydGlmeS5zdWNjZXNzKGdldHRl eHQoJ0JhY2t1cCBqb2IgY3JlYXRlZC4nKSwgNSk7CisgICAgICAgIGZhY3RvcnkucGdCcm93c2Vy LkV2ZW50cy50cmlnZ2VyKCdwZ2FkbWluLWJncHJvY2VzczpjcmVhdGVkJywgZmFjdG9yeSk7Cisg ICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAg ICBjb25zdCBlcnIgPSBlcnJvci5yZXNwb25zZS5kYXRhOworICAgICAgICAgIGZhY3RvcnkuYWxl cnRpZnkuYWxlcnQoCisgICAgICAgICAgICBnZXR0ZXh0KCdCYWNrdXAgam9iIGZhaWxlZC4nKSwK KyAgICAgICAgICAgIGVyci5lcnJvcm1zZworICAgICAgICAgICk7CisgICAgICAgIH0gY2F0Y2gg KGUpIHsKKyAgICAgICAgICBjb25zb2xlLndhcm4oZS5zdGFjayB8fCBlKTsKKyAgICAgICAgfQor ICAgICAgfSk7CisgICAgfQorICB9CisKKyAgYWRkQWxlcnRpZnlDbGFzc1RvQmFja3VwTm9kZUNo aWxkTm9kZXMoKSB7CisgICAgdGhpcy5mYWN0b3J5LmpxdWVyeSh0aGlzLmVsZW1lbnRzLmJvZHku Y2hpbGROb2Rlc1swXSkuYWRkQ2xhc3MoCisgICAgICAnYWxlcnRpZnlfdG9vbHNfZGlhbG9nX3By b3BlcnRpZXMgb2JqX3Byb3BlcnRpZXMnCisgICAgKTsKKyAgfQorCisgIGdldFNlbGVjdGVkTm9k ZSgpIHsKKyAgICBjb25zdCB0cmVlID0gdGhpcy5mYWN0b3J5LnBnQnJvd3Nlci50cmVlTWVudTsK KyAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSB0cmVlLnNlbGVjdGVkKCk7CisgICAgaWYgKHNlbGVj dGVkTm9kZSkgeworICAgICAgcmV0dXJuIHRyZWUuZmluZE5vZGVCeURvbUVsZW1lbnQoc2VsZWN0 ZWROb2RlKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICB9Cisg IH0KKworICBkaXNhYmxlQmFja3VwQnV0dG9uKCkgeworICAgIHRoaXMuX19pbnRlcm5hbC5idXR0 b25zWzJdLmVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOworICB9CisKKyAgZW5hYmxlQmFja3VwQnV0 dG9uKCkgeworICAgIHRoaXMuX19pbnRlcm5hbC5idXR0b25zWzJdLmVsZW1lbnQuZGlzYWJsZWQg PSBmYWxzZTsKKyAgfQorCisgIGNyZWF0ZURpYWxvZyhub2RlLCB0cmVlSW5mbywgdHlwZU9mRGlh bG9nLCAkY29udGFpbmVyKSB7CisgICAgbGV0IGF0dHJpYnV0ZXMgPSB7fTsKKyAgICBpZiAodHlw ZU9mRGlhbG9nICE9PSAnYmFja3VwX29iamVjdHMnKSB7CisgICAgICBhdHRyaWJ1dGVzWyd0eXBl J10gPSB0eXBlT2ZEaWFsb2c7CisgICAgfQorICAgIC8vIEluc3RhbmNlIG9mIGJhY2tib25lIG1v ZGVsCisgICAgY29uc3QgbmV3TW9kZWwgPSBuZXcgdGhpcy5mYWN0b3J5LmJhY2t1cE1vZGVsKGF0 dHJpYnV0ZXMsIHsKKyAgICAgIG5vZGVfaW5mbzogdHJlZUluZm8sCisgICAgfSk7CisgICAgY29u c3QgZmllbGRzID0gdGhpcy5mYWN0b3J5LmJhY2tmb3JtLmdlbmVyYXRlVmlld1NjaGVtYSgKKyAg ICAgIHRyZWVJbmZvLCBuZXdNb2RlbCwgJ2NyZWF0ZScsIG5vZGUsIHRyZWVJbmZvLnNlcnZlciwg dHJ1ZQorICAgICk7CisKKyAgICByZXR1cm4gdGhpcy52aWV3ID0gbmV3IHRoaXMuZmFjdG9yeS5i YWNrZm9ybS5EaWFsb2coeworICAgICAgZWw6ICRjb250YWluZXIsCisgICAgICBtb2RlbDogbmV3 TW9kZWwsCisgICAgICBzY2hlbWE6IGZpZWxkcywKKyAgICB9KTsKKyAgfQorCisgIHJldHJpZXZl U2VydmVySWRlbnRpZmllcihub2RlLCBzZWxlY3RlZFRyZWVOb2RlKSB7CisgICAgY29uc3QgdHJl ZUluZm8gPSBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21FbGVtZW50KAorICAgICAgdGhpcy5mYWN0 b3J5LnBnQnJvd3NlciwKKyAgICAgIHNlbGVjdGVkVHJlZU5vZGUKKyAgICApOworICAgIHJldHVy biB0cmVlSW5mby5zZXJ2ZXIuX2lkOworICB9CisKKyAgc2V0TGlzdGVuZXJzRm9yRmlsZW5hbWVD aGFuZ2VzKCkgeworICAgIGNvbnN0IHNlbGYgPSB0aGlzOworCisgICAgdGhpcy52aWV3Lm1vZGVs Lm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoKSB7CisgICAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhp cy5nZXQoJ2ZpbGUnKSkgJiYgdGhpcy5nZXQoJ2ZpbGUnKSAhPT0gJycpIHsKKyAgICAgICAgdGhp cy5lcnJvck1vZGVsLmNsZWFyKCk7CisgICAgICAgIHNlbGYuZW5hYmxlQmFja3VwQnV0dG9uKCk7 CisgICAgICB9IGVsc2UgeworICAgICAgICBzZWxmLmRpc2FibGVCYWNrdXBCdXR0b24oKTsKKyAg ICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgnZmlsZScsIGdldHRleHQoJ1BsZWFzZSBwcm92aWRl IGEgZmlsZW5hbWUnKSk7CisgICAgICB9CisgICAgfSk7CisgIH0KKworICBzZXRFeHRyYVBhcmFt ZXRlcnMoc2VsZWN0ZWRUcmVlTm9kZSkgeworICAgIGlmICh0aGlzLnR5cGVPZkRpYWxvZyA9PT0g J2JhY2t1cF9vYmplY3RzJykgeworICAgICAgY29uc3QgdHJlZUluZm8gPSBnZXRUcmVlTm9kZUhp ZXJhcmNoeUZyb21FbGVtZW50KAorICAgICAgICB0aGlzLmZhY3RvcnkucGdCcm93c2VyLAorICAg ICAgICBzZWxlY3RlZFRyZWVOb2RlCisgICAgICApOworCisgICAgICB0aGlzLnZpZXcubW9kZWwu c2V0KCdkYXRhYmFzZScsIHRyZWVJbmZvLmRhdGFiYXNlLl9sYWJlbCk7CisKKyAgICAgIGNvbnN0 IG5vZGVEYXRhID0gc2VsZWN0ZWRUcmVlTm9kZS5nZXREYXRhKCk7CisgICAgICBpZiAobm9kZURh dGEuX3R5cGUgPT09ICdzY2hlbWEnKSB7CisgICAgICAgIHRoaXMudmlldy5tb2RlbC5zZXQoJ3Nj aGVtYXMnLCBbbm9kZURhdGEuX2xhYmVsXSk7CisgICAgICB9CisKKyAgICAgIGlmIChub2RlRGF0 YS5fdHlwZSA9PT0gJ3RhYmxlJykgeworICAgICAgICB0aGlzLnZpZXcubW9kZWwuc2V0KCd0YWJs ZXMnLCBbCisgICAgICAgICAgW3RyZWVJbmZvLnNjaGVtYS5fbGFiZWwsIG5vZGVEYXRhLl9sYWJl bF0sCisgICAgICAgIF0pOworICAgICAgfQorCisgICAgICBpZiAoXy5pc0VtcHR5KHRoaXMudmll dy5tb2RlbC5nZXQoJ3JhdGlvJykpKSB7CisgICAgICAgIHRoaXMudmlldy5tb2RlbC51bnNldCgn cmF0aW8nKTsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWlu L3N0YXRpYy9qcy9iYWNrdXAvbWVudV91dGlscy5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9i YWNrdXAvbWVudV91dGlscy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4u ZjY3YTQzNmEKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja3Vw L21lbnVfdXRpbHMuanMKQEAgLTAsMCArMSw2MCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAt IFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4LCBUaGUg cGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVu ZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitleHBvcnQgY29uc3QgYmFj a3VwU3VwcG9ydGVkTm9kZXMgPSBbCisgICdkYXRhYmFzZScsICdzY2hlbWEnLCAndGFibGUnLCAn cGFydGl0aW9uJywKK107CisKK2Z1bmN0aW9uIGlzTm9kZVR5cGVTdXBwb3J0ZWQobm9kZURhdGFU eXBlLCBwYXJlbnROb2RlVHlwZSkgeworICByZXR1cm4gXy5pbmRleE9mKGJhY2t1cFN1cHBvcnRl ZE5vZGVzLCBub2RlRGF0YVR5cGUpICE9PSAtMQorICAgICYmIHBhcmVudE5vZGVUeXBlICE9PSAn Y2F0YWxvZyc7Cit9CisKK2Z1bmN0aW9uIGlzUHJvdmlkZWREYXRhVmFsaWQodHJlZU5vZGVEYXRh KSB7CisgIHJldHVybiAhXy5pc1VuZGVmaW5lZCh0cmVlTm9kZURhdGEpICYmICFfLmlzTnVsbCh0 cmVlTm9kZURhdGEpOworfQorCitmdW5jdGlvbiBkb2VzTm9kZUhhdmVNZW51KHRyZWVOb2RlRGF0 YSkgeworICByZXR1cm4gKHRyZWVOb2RlRGF0YS5fdHlwZSA9PT0gJ2RhdGFiYXNlJyAmJiB0cmVl Tm9kZURhdGEuYWxsb3dDb25uKQorICAgIHx8IHRyZWVOb2RlRGF0YS5fdHlwZSAhPT0gJ2RhdGFi YXNlJzsKK30KKworZnVuY3Rpb24gcmV0cmlldmVQYXJlbnROb2RlVHlwZSh0cmVlTm9kZSkgewor ICBpZiAoIXRyZWVOb2RlLmhhc1BhcmVudCgpKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAg aWYodHJlZU5vZGUucGFyZW50KCkuZ2V0RGF0YSgpID09PSBudWxsKSB7CisgICAgcmV0dXJuIG51 bGw7CisgIH0KKyAgcmV0dXJuIHRyZWVOb2RlLnBhcmVudCgpLmdldERhdGEoKS5fdHlwZTsKK30K KworZXhwb3J0IGZ1bmN0aW9uIG1lbnVFbmFibGVkKHRyZWVOb2RlRGF0YSwgZG9tVHJlZU5vZGUp IHsKKyAgbGV0IHRyZWVOb2RlID0gdGhpcy50cmVlTWVudS5maW5kTm9kZUJ5RG9tRWxlbWVudChk b21UcmVlTm9kZSk7CisgIGlmKCF0cmVlTm9kZSkgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQor ICBsZXQgcGFyZW50Tm9kZVR5cGUgPSByZXRyaWV2ZVBhcmVudE5vZGVUeXBlKHRyZWVOb2RlKTsK KworICBpZiAoaXNQcm92aWRlZERhdGFWYWxpZCh0cmVlTm9kZURhdGEpICYmICFfLmlzTnVsbChw YXJlbnROb2RlVHlwZSkpIHsKKyAgICByZXR1cm4gaXNOb2RlVHlwZVN1cHBvcnRlZCh0cmVlTm9k ZURhdGEuX3R5cGUsIHBhcmVudE5vZGVUeXBlKQorICAgICAgJiYgZG9lc05vZGVIYXZlTWVudSh0 cmVlTm9kZURhdGEpOworICB9IGVsc2UgeworICAgIHJldHVybiBmYWxzZTsKKyAgfQorfQorCitm dW5jdGlvbiBpc05vZGVBU2VydmVyQW5kQ29ubmVjdGVkKHRyZWVOb2RlRGF0YSkgeworICByZXR1 cm4gKCgnc2VydmVyJyA9PT0gdHJlZU5vZGVEYXRhLl90eXBlKSAmJiB0cmVlTm9kZURhdGEuY29u bmVjdGVkKTsKK30KKworZXhwb3J0IGZ1bmN0aW9uIG1lbnVFbmFibGVkU2VydmVyKHRyZWVOb2Rl RGF0YSkgeworICByZXR1cm4gaXNQcm92aWRlZERhdGFWYWxpZCh0cmVlTm9kZURhdGEpCisgICAg JiYgaXNOb2RlQVNlcnZlckFuZENvbm5lY3RlZCh0cmVlTm9kZURhdGEpOworfQpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2RhdGFncmlkL2dldF9wYW5lbF90aXRsZS5qcyBiL3dl Yi9wZ2FkbWluL3N0YXRpYy9qcy9kYXRhZ3JpZC9nZXRfcGFuZWxfdGl0bGUuanMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmY1YTU2NjRkCi0tLSAvZGV2L251bGwKKysrIGIv d2ViL3BnYWRtaW4vc3RhdGljL2pzL2RhdGFncmlkL2dldF9wYW5lbF90aXRsZS5qcwpAQCAtMCww ICsxLDMzIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworLy8K Ky8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRl YW0KKy8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGlj ZW5jZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vCisKK2ltcG9ydCB7Z2V0VHJlZU5vZGVIaWVyYXJjaHlGcm9tSWRlbnRp Zmllcn0gZnJvbSAnLi4vdHJlZS9wZ2FkbWluX3RyZWVfbm9kZSc7CisKK2Z1bmN0aW9uIGdldERh dGFiYXNlTGFiZWwocGFyZW50RGF0YSkgeworICByZXR1cm4gcGFyZW50RGF0YS5kYXRhYmFzZSA/ IHBhcmVudERhdGEuZGF0YWJhc2UubGFiZWwKKyAgICA6IHBhcmVudERhdGEuc2VydmVyLmRiOwor fQorCitmdW5jdGlvbiBpc1NlcnZlckluZm9ybWF0aW9uQXZhaWxhYmxlKHBhcmVudERhdGEpIHsK KyAgcmV0dXJuIHBhcmVudERhdGEuc2VydmVyID09PSB1bmRlZmluZWQ7Cit9CisKK2V4cG9ydCBm dW5jdGlvbiBnZXRQYW5lbFRpdGxlKHBnQnJvd3NlcikgeworICBjb25zdCBzZWxlY3RlZF9pdGVt ID0gcGdCcm93c2VyLnRyZWVNZW51LnNlbGVjdGVkKCk7CisKKyAgY29uc3QgcGFyZW50RGF0YSA9 IGdldFRyZWVOb2RlSGllcmFyY2h5RnJvbUlkZW50aWZpZXIKKyAgICAuY2FsbChwZ0Jyb3dzZXIs IHNlbGVjdGVkX2l0ZW0pOworICBpZiAoaXNTZXJ2ZXJJbmZvcm1hdGlvbkF2YWlsYWJsZShwYXJl bnREYXRhKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIGNvbnN0IGRiX2xhYmVsID0gZ2V0RGF0 YWJhc2VMYWJlbChwYXJlbnREYXRhKTsKKworICByZXR1cm4gYCR7ZGJfbGFiZWx9IG9uICR7cGFy ZW50RGF0YS5zZXJ2ZXIudXNlci5uYW1lfUAke3BhcmVudERhdGEuc2VydmVyLmxhYmVsfWA7Cit9 CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvZGF0YWdyaWQvc2hvd19kYXRhLmpz IGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2RhdGFncmlkL3Nob3dfZGF0YS5qcwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYTQxNGZkNzcKLS0tIC9kZXYvbnVsbAorKysgYi93 ZWIvcGdhZG1pbi9zdGF0aWMvanMvZGF0YWdyaWQvc2hvd19kYXRhLmpzCkBAIC0wLDAgKzEsOTIg QEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8KKy8vCisvLyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisvLworLy8gQ29w eXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorLy8g VGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisv LworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8KK2ltcG9ydCBnZXR0ZXh0IGZyb20gJy4uL2dldHRleHQnOworaW1wb3J0IHVybF9m b3IgZnJvbSAnLi4vdXJsX2Zvcic7CitpbXBvcnQge2dldFRyZWVOb2RlSGllcmFyY2h5RnJvbUlk ZW50aWZpZXJ9IGZyb20gJy4uLy4uLy4uL3N0YXRpYy9qcy90cmVlL3BnYWRtaW5fdHJlZV9ub2Rl JzsKKworZXhwb3J0IGZ1bmN0aW9uIHNob3dEYXRhR3JpZCgKKyAgZGF0YWdyaWQsCisgIHBnQnJv d3NlciwKKyAgYWxlcnRpZnksCisgIGNvbm5lY3Rpb25EYXRhLAorICBhY2lUcmVlSWRlbnRpZmll cgorKSB7CisgIGNvbnN0IG5vZGUgPSBwZ0Jyb3dzZXIudHJlZU1lbnUuZmluZE5vZGVCeURvbUVs ZW1lbnQoYWNpVHJlZUlkZW50aWZpZXIpOworICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkIHx8ICFu b2RlLmdldERhdGEoKSkgeworICAgIGFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgZ2V0dGV4dCgnRGF0 YSBHcmlkIEVycm9yJyksCisgICAgICBnZXR0ZXh0KCdObyBvYmplY3Qgc2VsZWN0ZWQuJykKKyAg ICApOworICAgIHJldHVybjsKKyAgfQorCisgIGNvbnN0IHBhcmVudERhdGEgPSBnZXRUcmVlTm9k ZUhpZXJhcmNoeUZyb21JZGVudGlmaWVyLmNhbGwoCisgICAgcGdCcm93c2VyLAorICAgIGFjaVRy ZWVJZGVudGlmaWVyCisgICk7CisKKyAgaWYgKGhhc1NlcnZlck9yRGF0YWJhc2VDb25maWd1cmF0 aW9uKHBhcmVudERhdGEpCisgICAgfHwgIWhhc1NjaGVtYU9yQ2F0YWxvZ09yVmlld0luZm9ybWF0 aW9uKHBhcmVudERhdGEpKSB7CisgICAgcmV0dXJuOworICB9CisKKyAgbGV0IG5hbWVzcGFjZU5h bWUgPSByZXRyaWV2ZU5hbWVTcGFjZU5hbWUocGFyZW50RGF0YSk7CisgIGNvbnN0IGJhc2VVcmwg PSBnZW5lcmF0ZVVybChjb25uZWN0aW9uRGF0YSwgbm9kZS5nZXREYXRhKCksIHBhcmVudERhdGEp OworICBjb25zdCBncmlkX3RpdGxlID0gZ2VuZXJhdGVEYXRhZ3JpZFRpdGxlKHBhcmVudERhdGEs IG5hbWVzcGFjZU5hbWUsIG5vZGUuZ2V0RGF0YSgpKTsKKworICBkYXRhZ3JpZC5jcmVhdGVfdHJh bnNhY3Rpb24oCisgICAgYmFzZVVybCwKKyAgICBudWxsLAorICAgICdmYWxzZScsCisgICAgcGFy ZW50RGF0YS5zZXJ2ZXIuc2VydmVyX3R5cGUsCisgICAgJycsCisgICAgZ3JpZF90aXRsZSwKKyAg ICAnJworICApOworfQorCisKK2Z1bmN0aW9uIHJldHJpZXZlTmFtZVNwYWNlTmFtZShwYXJlbnRE YXRhKSB7CisgIGlmIChwYXJlbnREYXRhLnNjaGVtYSAhPT0gdW5kZWZpbmVkKSB7CisgICAgcmV0 dXJuIHBhcmVudERhdGEuc2NoZW1hLmxhYmVsOworICB9CisgIGVsc2UgaWYgKHBhcmVudERhdGEu dmlldyAhPT0gdW5kZWZpbmVkKSB7CisgICAgcmV0dXJuIHBhcmVudERhdGEudmlldy5sYWJlbDsK KyAgfQorICBlbHNlIGlmIChwYXJlbnREYXRhLmNhdGFsb2cgIT09IHVuZGVmaW5lZCkgeworICAg IHJldHVybiBwYXJlbnREYXRhLmNhdGFsb2cubGFiZWw7CisgIH0KKyAgcmV0dXJuICcnOworfQor CitmdW5jdGlvbiBnZW5lcmF0ZVVybChjb25uZWN0aW9uRGF0YSwgbm9kZURhdGEsIHBhcmVudERh dGEpIHsKKyAgY29uc3QgdXJsX3BhcmFtcyA9IHsKKyAgICAnY21kX3R5cGUnOiBjb25uZWN0aW9u RGF0YS5tbnVpZCwKKyAgICAnb2JqX3R5cGUnOiBub2RlRGF0YS5fdHlwZSwKKyAgICAnc2dpZCc6 IHBhcmVudERhdGEuc2VydmVyX2dyb3VwLl9pZCwKKyAgICAnc2lkJzogcGFyZW50RGF0YS5zZXJ2 ZXIuX2lkLAorICAgICdkaWQnOiBwYXJlbnREYXRhLmRhdGFiYXNlLl9pZCwKKyAgICAnb2JqX2lk Jzogbm9kZURhdGEuX2lkLAorICB9OworCisgIHJldHVybiB1cmxfZm9yKCdkYXRhZ3JpZC5pbml0 aWFsaXplX2RhdGFncmlkJywgdXJsX3BhcmFtcyk7Cit9CisKK2Z1bmN0aW9uIGhhc1NlcnZlck9y RGF0YWJhc2VDb25maWd1cmF0aW9uKHBhcmVudERhdGEpIHsKKyAgcmV0dXJuIHBhcmVudERhdGEu c2VydmVyID09PSB1bmRlZmluZWQgfHwgcGFyZW50RGF0YS5kYXRhYmFzZSA9PT0gdW5kZWZpbmVk OworfQorCitmdW5jdGlvbiBoYXNTY2hlbWFPckNhdGFsb2dPclZpZXdJbmZvcm1hdGlvbihwYXJl bnREYXRhKSB7CisgIHJldHVybiBwYXJlbnREYXRhLnNjaGVtYSAhPT0gdW5kZWZpbmVkIHx8IHBh cmVudERhdGEudmlldyAhPT0gdW5kZWZpbmVkIHx8CisgICAgcGFyZW50RGF0YS5jYXRhbG9nICE9 PSB1bmRlZmluZWQ7Cit9CisKK2Z1bmN0aW9uIGdlbmVyYXRlRGF0YWdyaWRUaXRsZShwYXJlbnRE YXRhLCBuYW1lc3BhY2VOYW1lLCBub2RlRGF0YSkgeworICByZXR1cm4gYCR7cGFyZW50RGF0YS5z ZXJ2ZXIubGFiZWx9IC0gJHtwYXJlbnREYXRhLmRhdGFiYXNlLmxhYmVsfSAtICR7bmFtZXNwYWNl TmFtZX0uJHtub2RlRGF0YS5sYWJlbH1gOworfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3Rh dGljL2pzL2RhdGFncmlkL3Nob3dfcXVlcnlfdG9vbC5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9q cy9kYXRhZ3JpZC9zaG93X3F1ZXJ5X3Rvb2wuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAuLjA0MzZlMGZkCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGlj L2pzL2RhdGFncmlkL3Nob3dfcXVlcnlfdG9vbC5qcwpAQCAtMCwwICsxLDYzIEBACisvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisv LworLy8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykg MjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdh cmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisK K2ltcG9ydCBnZXR0ZXh0IGZyb20gJy4uL2dldHRleHQnOworaW1wb3J0IHVybF9mb3IgZnJvbSAn Li4vdXJsX2Zvcic7CitpbXBvcnQge2dldFRyZWVOb2RlSGllcmFyY2h5RnJvbUlkZW50aWZpZXJ9 IGZyb20gJy4uLy4uLy4uL3N0YXRpYy9qcy90cmVlL3BnYWRtaW5fdHJlZV9ub2RlJzsKKworZnVu Y3Rpb24gaGFzRGF0YWJhc2VJbmZvcm1hdGlvbihwYXJlbnREYXRhKSB7CisgIHJldHVybiBwYXJl bnREYXRhLmRhdGFiYXNlOworfQorCitmdW5jdGlvbiBnZW5lcmF0ZVVybChwYXJlbnREYXRhKSB7 CisgIGxldCB1cmxfZW5kcG9pbnQgPSAnZGF0YWdyaWQuaW5pdGlhbGl6ZV9xdWVyeV90b29sJzsK KyAgbGV0IHVybF9wYXJhbXMgPSB7CisgICAgJ3NnaWQnOiBwYXJlbnREYXRhLnNlcnZlcl9ncm91 cC5faWQsCisgICAgJ3NpZCc6IHBhcmVudERhdGEuc2VydmVyLl9pZCwKKyAgfTsKKworICBpZiAo aGFzRGF0YWJhc2VJbmZvcm1hdGlvbihwYXJlbnREYXRhKSkgeworICAgIHVybF9wYXJhbXNbJ2Rp ZCddID0gcGFyZW50RGF0YS5kYXRhYmFzZS5faWQ7CisgICAgdXJsX2VuZHBvaW50ID0gJ2RhdGFn cmlkLmluaXRpYWxpemVfcXVlcnlfdG9vbF93aXRoX2RpZCc7CisgIH0KKworICByZXR1cm4gdXJs X2Zvcih1cmxfZW5kcG9pbnQsIHVybF9wYXJhbXMpOworfQorCitmdW5jdGlvbiBoYXNTZXJ2ZXJJ bmZvcm1hdGlvbnMocGFyZW50RGF0YSkgeworICByZXR1cm4gcGFyZW50RGF0YS5zZXJ2ZXIgPT09 IHVuZGVmaW5lZDsKK30KKworZXhwb3J0IGZ1bmN0aW9uIHNob3dRdWVyeVRvb2woZGF0YWdyaWQs IHBnQnJvd3NlciwgYWxlcnRpZnksIHVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFjaVRyZWVJZGVudGlmaWVyLCBwYW5lbFRpdGxlKSB7CisgIGNvbnN0IHNVUkwgPSB1cmwgfHwg Jyc7CisgIGNvbnN0IHF1ZXJ5VG9vbFRpdGxlID0gcGFuZWxUaXRsZSB8fCAnJzsKKworICBjb25z dCBjdXJyZW50Tm9kZSA9IHBnQnJvd3Nlci50cmVlTWVudS5maW5kTm9kZUJ5RG9tRWxlbWVudChh Y2lUcmVlSWRlbnRpZmllcik7CisgIGlmIChjdXJyZW50Tm9kZSA9PT0gdW5kZWZpbmVkKSB7Cisg ICAgYWxlcnRpZnkuYWxlcnQoCisgICAgICBnZXR0ZXh0KCdRdWVyeSBUb29sIEVycm9yJyksCisg ICAgICBnZXR0ZXh0KCdObyBvYmplY3Qgc2VsZWN0ZWQuJykKKyAgICApOworICAgIHJldHVybjsK KyAgfQorCisgIGNvbnN0IHBhcmVudERhdGEgPSBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21JZGVu dGlmaWVyLmNhbGwoCisgICAgcGdCcm93c2VyLCBhY2lUcmVlSWRlbnRpZmllcik7CisKKyAgaWYg KGhhc1NlcnZlckluZm9ybWF0aW9ucyhwYXJlbnREYXRhKSkgeworICAgIHJldHVybjsKKyAgfQor CisgIGNvbnN0IGJhc2VVcmwgPSBnZW5lcmF0ZVVybChwYXJlbnREYXRhKTsKKworICBkYXRhZ3Jp ZC5jcmVhdGVfdHJhbnNhY3Rpb24oCisgICAgYmFzZVVybCwgbnVsbCwgJ3RydWUnLAorICAgIHBh cmVudERhdGEuc2VydmVyLnNlcnZlcl90eXBlLCBzVVJMLCBxdWVyeVRvb2xUaXRsZSwgJycsIGZh bHNlKTsKK30KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy90cmVlL3BnYWRtaW5f dHJlZV9ub2RlLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3RyZWUvcGdhZG1pbl90cmVlX25v ZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmJjY2JlNTg3Ci0tLSAv ZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3RyZWUvcGdhZG1pbl90cmVlX25v ZGUuanMKQEAgLTAsMCArMSw0MyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBwZ0FkbWlu IDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwg VGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNl ZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwor ZXhwb3J0IGZ1bmN0aW9uIGdldFRyZWVOb2RlSGllcmFyY2h5RnJvbUVsZW1lbnQocGdCcm93c2Vy LCB0cmVlTm9kZSkgeworICByZXR1cm4gZ2V0VHJlZU5vZGVIaWVyYXJjaHkuY2FsbChwZ0Jyb3dz ZXIsIHRyZWVOb2RlKTsKK30KKworZXhwb3J0IGZ1bmN0aW9uIGdldFRyZWVOb2RlSGllcmFyY2h5 RnJvbUlkZW50aWZpZXIoYWNpVHJlZU5vZGVJZGVudGlmaWVyKSB7CisgIGxldCBpZGVudGlmaWVy ID0gdGhpcy50cmVlTWVudS50cmFuc2xhdGVUcmVlTm9kZUlkRnJvbUFDSVRyZWUoYWNpVHJlZU5v ZGVJZGVudGlmaWVyKTsKKyAgbGV0IGN1cnJlbnROb2RlID0gdGhpcy50cmVlTWVudS5maW5kTm9k ZShpZGVudGlmaWVyKTsKKyAgcmV0dXJuIGdldFRyZWVOb2RlSGllcmFyY2h5LmNhbGwodGhpcywg Y3VycmVudE5vZGUpOworfQorCitleHBvcnQgZnVuY3Rpb24gZ2V0VHJlZU5vZGVIaWVyYXJjaHko Y3VycmVudE5vZGUpIHsKKyAgbGV0IGlkeCA9IDA7CisgIGxldCByZXN1bHQgPSB7fTsKKworICBk byB7CisgICAgY29uc3QgY3VycmVudE5vZGVEYXRhID0gY3VycmVudE5vZGUuZ2V0RGF0YSgpOwor ICAgIGlmIChjdXJyZW50Tm9kZURhdGEuX3R5cGUgaW4gdGhpcy5Ob2RlcyAmJiB0aGlzLk5vZGVz W2N1cnJlbnROb2RlRGF0YS5fdHlwZV0uaGFzSWQpIHsKKyAgICAgIGNvbnN0IG5vZGVUeXBlID0g bWFwVHlwZShjdXJyZW50Tm9kZURhdGEuX3R5cGUpOworICAgICAgaWYgKHJlc3VsdFtub2RlVHlw ZV0gPT09IHVuZGVmaW5lZCkgeworICAgICAgICByZXN1bHRbbm9kZVR5cGVdID0gXy5leHRlbmQo e30sIGN1cnJlbnROb2RlRGF0YSwgeworICAgICAgICAgICdwcmlvcml0eSc6IGlkeCwKKyAgICAg ICAgfSk7CisgICAgICAgIGlkeCAtPSAxOworICAgICAgfQorICAgIH0KKyAgICBjdXJyZW50Tm9k ZSA9IGN1cnJlbnROb2RlLmhhc1BhcmVudCgpID8gY3VycmVudE5vZGUucGFyZW50KCkgOiBudWxs OworICB9IHdoaWxlIChjdXJyZW50Tm9kZSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworZnVu Y3Rpb24gbWFwVHlwZSh0eXBlKSB7CisgIHJldHVybiB0eXBlID09PSAncGFydGl0aW9uJyA/ICd0 YWJsZScgOiB0eXBlOworfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvYmFja3VwL3N0 YXRpYy9qcy9iYWNrdXAuanMgYi93ZWIvcGdhZG1pbi90b29scy9iYWNrdXAvc3RhdGljL2pzL2Jh Y2t1cC5qcwppbmRleCBkZGJmYWVlNC4uZmZiYWUxMjcgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWlu L3Rvb2xzL2JhY2t1cC9zdGF0aWMvanMvYmFja3VwLmpzCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xz L2JhY2t1cC9zdGF0aWMvanMvYmFja3VwLmpzCkBAIC0zLDkgKzMsMTAgQEAgZGVmaW5lKFsKICAg J3NvdXJjZXMvZ2V0dGV4dCcsICdzb3VyY2VzL3VybF9mb3InLCAnanF1ZXJ5JywgJ3VuZGVyc2Nv cmUnLAogICAndW5kZXJzY29yZS5zdHJpbmcnLCAncGdhZG1pbi5hbGVydGlmeWpzJywgJ2JhY2ti b25lJywgJ3BnYWRtaW4uYmFja2dyaWQnLAogICAncGdhZG1pbi5iYWNrZm9ybScsICdwZ2FkbWlu LmJyb3dzZXInLCAnc291cmNlcy91dGlscycsCisgICdzb3VyY2VzL2JhY2t1cC9tZW51X3V0aWxz JywgJ3NvdXJjZXMvYmFja3VwL2JhY2t1cF9kaWFsb2cnLAogXSwgZnVuY3Rpb24oCiAgIGdldHRl eHQsIHVybF9mb3IsICQsIF8sIFMsIGFsZXJ0aWZ5LCBCYWNrYm9uZSwgQmFja2dyaWQsIEJhY2tm b3JtLCBwZ0Jyb3dzZXIsCi1jb21tb25VdGlscworY29tbW9uVXRpbHMsIG1lbnVVdGlscywgZ2xv YmFsQmFja3VwRGlhbG9nCiApIHsKIAogICAvLyBpZiBtb2R1bGUgaXMgYWxyZWFkeSBpbml0aWFs aXplZCwgcmVmZXIgdG8gdGhhdC4KQEAgLTM5NCw0OCArMzk1LDYgQEAgY29tbW9uVXRpbHMKIAog ICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7CiAKLSAgICAgIC8vIERlZmluZSBsaXN0IG9m IG5vZGVzIG9uIHdoaWNoIGJhY2t1cCBjb250ZXh0IG1lbnUgb3B0aW9uIGFwcGVhcnMKLSAgICAg IHZhciBiYWNrdXBfc3VwcG9ydGVkX25vZGVzID0gWwotICAgICAgICAnZGF0YWJhc2UnLCAnc2No ZW1hJywgJ3RhYmxlJywgJ3BhcnRpdGlvbicsCi0gICAgICBdOwotCi0gICAgICAvKioKLSAgICAg ICAgRW5hYmxlL2Rpc2FibGUgYmFja3VwIG1lbnUgaW4gdG9vbHMgYmFzZWQKLSAgICAgICAgb24g bm9kZSBzZWxlY3RlZAotICAgICAgICBpZiBzZWxlY3RlZCBub2RlIGlzIHByZXNlbnQgaW4gc3Vw cG9ydGVkX25vZGVzLAotICAgICAgICBtZW51IHdpbGwgYmUgZW5hYmxlZCBvdGhlcndpc2UgZGlz YWJsZWQuCi0gICAgICAgIEFsc28sIGhpZGUgaXQgZm9yIHN5c3RlbSB2aWV3IGluIGNhdGFsb2dz Ci0gICAgICAqLwotICAgICAgdmFyIG1lbnVfZW5hYmxlZCA9IGZ1bmN0aW9uKGl0ZW1EYXRhLCBp dGVtKSB7Ci0gICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsCi0gICAgICAgICAgaSA9IGl0 ZW0sCi0gICAgICAgICAgZCA9IGl0ZW1EYXRhLAotICAgICAgICAgIHBhcmVudF9pdGVtID0gdC5o YXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGwsCi0gICAgICAgICAgcGFyZW50X2RhdGEg PSBwYXJlbnRfaXRlbSA/IHQuaXRlbURhdGEocGFyZW50X2l0ZW0pIDogbnVsbDsKLQotICAgICAg ICBpZiAoIV8uaXNVbmRlZmluZWQoZCkgJiYgIV8uaXNOdWxsKGQpICYmICFfLmlzTnVsbChwYXJl bnRfZGF0YSkpIHsKLSAgICAgICAgICBpZiAoXy5pbmRleE9mKGJhY2t1cF9zdXBwb3J0ZWRfbm9k ZXMsIGQuX3R5cGUpICE9PSAtMSAmJgotICAgICAgICAgICAgcGFyZW50X2RhdGEuX3R5cGUgIT0g J2NhdGFsb2cnKSB7Ci0gICAgICAgICAgICBpZiAoZC5fdHlwZSA9PSAnZGF0YWJhc2UnICYmIGQu YWxsb3dDb25uKQotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIGVsc2Ug aWYgKGQuX3R5cGUgIT0gJ2RhdGFiYXNlJykKLSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9 IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg ICAgcmV0dXJuIGZhbHNlOwotICAgICAgfTsKLQotICAgICAgdmFyIG1lbnVfZW5hYmxlZF9zZXJ2 ZXIgPSBmdW5jdGlvbihpdGVtRGF0YSkgewotICAgICAgICAvLyBJZiBzZXJ2ZXIgbm9kZSBzZWxl Y3RlZCAmJiBjb25uZWN0ZWQKLSAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKGl0ZW1EYXRhKSAm JiAhXy5pc051bGwoaXRlbURhdGEpKQotICAgICAgICAgIHJldHVybiAoKCdzZXJ2ZXInID09PSBp dGVtRGF0YS5fdHlwZSkgJiYgaXRlbURhdGEuY29ubmVjdGVkKTsKLSAgICAgICAgZWxzZQotICAg ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH07Ci0KICAgICAgIC8vIERlZmluZSB0aGUgbm9k ZXMgb24gd2hpY2ggdGhlIG1lbnVzIHRvIGJlIGFwcGVhcgogICAgICAgdmFyIG1lbnVzID0gW3sK ICAgICAgICAgbmFtZTogJ2JhY2t1cF9nbG9iYWwnLApAQCAtNDQ1LDcgKzQwNCw3IEBAIGNvbW1v blV0aWxzCiAgICAgICAgIHByaW9yaXR5OiAxMiwKICAgICAgICAgbGFiZWw6IGdldHRleHQoJ0Jh Y2t1cCBHbG9iYWxzLi4uJyksCiAgICAgICAgIGljb246ICdmYSBmYS1mbG9wcHktbycsCi0gICAg ICAgIGVuYWJsZTogbWVudV9lbmFibGVkX3NlcnZlciwKKyAgICAgICAgZW5hYmxlOiBtZW51VXRp bHMubWVudUVuYWJsZWRTZXJ2ZXIsCiAgICAgICB9LCB7CiAgICAgICAgIG5hbWU6ICdiYWNrdXBf c2VydmVyJywKICAgICAgICAgbW9kdWxlOiB0aGlzLApAQCAtNDU0LDcgKzQxMyw3IEBAIGNvbW1v blV0aWxzCiAgICAgICAgIHByaW9yaXR5OiAxMiwKICAgICAgICAgbGFiZWw6IGdldHRleHQoJ0Jh Y2t1cCBTZXJ2ZXIuLi4nKSwKICAgICAgICAgaWNvbjogJ2ZhIGZhLWZsb3BweS1vJywKLSAgICAg ICAgZW5hYmxlOiBtZW51X2VuYWJsZWRfc2VydmVyLAorICAgICAgICBlbmFibGU6IG1lbnVVdGls cy5tZW51RW5hYmxlZFNlcnZlciwKICAgICAgIH0sIHsKICAgICAgICAgbmFtZTogJ2JhY2t1cF9n bG9iYWxfY3R4JywKICAgICAgICAgbW9kdWxlOiB0aGlzLApAQCAtNDY0LDcgKzQyMyw3IEBAIGNv bW1vblV0aWxzCiAgICAgICAgIHByaW9yaXR5OiAxMiwKICAgICAgICAgbGFiZWw6IGdldHRleHQo J0JhY2t1cCBHbG9iYWxzLi4uJyksCiAgICAgICAgIGljb246ICdmYSBmYS1mbG9wcHktbycsCi0g ICAgICAgIGVuYWJsZTogbWVudV9lbmFibGVkX3NlcnZlciwKKyAgICAgICAgZW5hYmxlOiBtZW51 VXRpbHMubWVudUVuYWJsZWRTZXJ2ZXIsCiAgICAgICB9LCB7CiAgICAgICAgIG5hbWU6ICdiYWNr dXBfc2VydmVyX2N0eCcsCiAgICAgICAgIG1vZHVsZTogdGhpcywKQEAgLTQ3NCw3ICs0MzMsNyBA QCBjb21tb25VdGlscwogICAgICAgICBwcmlvcml0eTogMTIsCiAgICAgICAgIGxhYmVsOiBnZXR0 ZXh0KCdCYWNrdXAgU2VydmVyLi4uJyksCiAgICAgICAgIGljb246ICdmYSBmYS1mbG9wcHktbycs Ci0gICAgICAgIGVuYWJsZTogbWVudV9lbmFibGVkX3NlcnZlciwKKyAgICAgICAgZW5hYmxlOiBt ZW51VXRpbHMubWVudUVuYWJsZWRTZXJ2ZXIsCiAgICAgICB9LCB7CiAgICAgICAgIG5hbWU6ICdi YWNrdXBfb2JqZWN0JywKICAgICAgICAgbW9kdWxlOiB0aGlzLApAQCAtNDgzLDIwICs0NDIsMjAg QEAgY29tbW9uVXRpbHMKICAgICAgICAgcHJpb3JpdHk6IDExLAogICAgICAgICBsYWJlbDogZ2V0 dGV4dCgnQmFja3VwLi4uJyksCiAgICAgICAgIGljb246ICdmYSBmYS1mbG9wcHktbycsCi0gICAg ICAgIGVuYWJsZTogbWVudV9lbmFibGVkLAorICAgICAgICBlbmFibGU6IG1lbnVVdGlscy5tZW51 RW5hYmxlZC5iaW5kKHBnQnJvd3NlciksCiAgICAgICB9XTsKIAotICAgICAgZm9yICh2YXIgaWR4 ID0gMDsgaWR4IDwgYmFja3VwX3N1cHBvcnRlZF9ub2Rlcy5sZW5ndGg7IGlkeCsrKSB7CisgICAg ICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBtZW51VXRpbHMuYmFja3VwU3VwcG9ydGVkTm9kZXMu bGVuZ3RoOyBpZHgrKykgewogICAgICAgICBtZW51cy5wdXNoKHsKLSAgICAgICAgICBuYW1lOiAn YmFja3VwXycgKyBiYWNrdXBfc3VwcG9ydGVkX25vZGVzW2lkeF0sCi0gICAgICAgICAgbm9kZTog YmFja3VwX3N1cHBvcnRlZF9ub2Rlc1tpZHhdLAorICAgICAgICAgIG5hbWU6ICdiYWNrdXBfJyAr IG1lbnVVdGlscy5iYWNrdXBTdXBwb3J0ZWROb2Rlc1tpZHhdLAorICAgICAgICAgIG5vZGU6IG1l bnVVdGlscy5iYWNrdXBTdXBwb3J0ZWROb2Rlc1tpZHhdLAogICAgICAgICAgIG1vZHVsZTogdGhp cywKICAgICAgICAgICBhcHBsaWVzOiBbJ2NvbnRleHQnXSwKICAgICAgICAgICBjYWxsYmFjazog J2JhY2t1cF9vYmplY3RzJywKICAgICAgICAgICBwcmlvcml0eTogMTEsCiAgICAgICAgICAgbGFi ZWw6IGdldHRleHQoJ0JhY2t1cC4uLicpLAogICAgICAgICAgIGljb246ICdmYSBmYS1mbG9wcHkt bycsCi0gICAgICAgICAgZW5hYmxlOiBtZW51X2VuYWJsZWQsCisgICAgICAgICAgZW5hYmxlOiBt ZW51VXRpbHMubWVudUVuYWJsZWQuYmluZChwZ0Jyb3dzZXIpLAogICAgICAgICB9KTsKICAgICAg IH0KIApAQCAtNTIxLDUzMSArNDgwLDI1IEBAIGNvbW1vblV0aWxzCiAgICAgfSwKIAogICAgIC8v IENhbGxiYWNrIHRvIGRyYXcgQmFja3VwIERpYWxvZyBmb3IgZ2xvYmFscy9zZXJ2ZXIKLSAgICBz dGFydF9iYWNrdXBfZ2xvYmFsX3NlcnZlcjogZnVuY3Rpb24oYWN0aW9uLCBpdGVtLCBwYXJhbXMp IHsKLSAgICAgIHZhciBpID0gaXRlbSB8fCBwZ0Jyb3dzZXIudHJlZS5zZWxlY3RlZCgpLAotICAg ICAgICBzZXJ2ZXJfZGF0YSA9IG51bGw7Ci0KLSAgICAgIHdoaWxlIChpKSB7Ci0gICAgICAgIHZh ciBub2RlX2RhdGEgPSBwZ0Jyb3dzZXIudHJlZS5pdGVtRGF0YShpKTsKLSAgICAgICAgaWYgKG5v ZGVfZGF0YS5fdHlwZSA9PSAnc2VydmVyJykgewotICAgICAgICAgIHNlcnZlcl9kYXRhID0gbm9k ZV9kYXRhOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBnQnJv d3Nlci50cmVlLmhhc1BhcmVudChpKSkgewotICAgICAgICAgIGkgPSAkKHBnQnJvd3Nlci50cmVl LnBhcmVudChpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgYWxlcnRpZnkuYWxlcnQo Ci0gICAgICAgICAgICBnZXR0ZXh0KCdCYWNrdXAgRXJyb3InKSwKLSAgICAgICAgICAgIGdldHRl eHQoJ1BsZWFzZSBzZWxlY3Qgc2VydmVyIG9yIGNoaWxkIG5vZGUgZnJvbSB0aGUgYnJvd3NlciB0 cmVlLicpCi0gICAgICAgICAgKTsKLSAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg fQotCi0gICAgICBpZiAoIXNlcnZlcl9kYXRhKSB7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0K LQotICAgICAgdmFyIG1vZHVsZSA9ICdwYXRocycsCi0gICAgICAgIHByZWZlcmVuY2VfbmFtZSA9 ICdwZ19iaW5fZGlyJywKLSAgICAgICAgbXNnID0gZ2V0dGV4dCgnUGxlYXNlIGNvbmZpZ3VyZSB0 aGUgUG9zdGdyZVNRTCBCaW5hcnkgUGF0aCBpbiB0aGUgUHJlZmVyZW5jZXMgZGlhbG9nLicpOwot Ci0gICAgICBpZiAoKHNlcnZlcl9kYXRhLnR5cGUgJiYgc2VydmVyX2RhdGEudHlwZSA9PSAncHBh cycpIHx8Ci0gICAgICAgIHNlcnZlcl9kYXRhLnNlcnZlcl90eXBlID09ICdwcGFzJykgewotICAg ICAgICBwcmVmZXJlbmNlX25hbWUgPSAncHBhc19iaW5fZGlyJzsKLSAgICAgICAgbXNnID0gZ2V0 dGV4dCgnUGxlYXNlIGNvbmZpZ3VyZSB0aGUgRURCIEFkdmFuY2VkIFNlcnZlciBCaW5hcnkgUGF0 aCBpbiB0aGUgUHJlZmVyZW5jZXMgZGlhbG9nLicpOwotICAgICAgfQotCi0gICAgICB2YXIgcHJl ZmVyZW5jZSA9IHBnQnJvd3Nlci5nZXRfcHJlZmVyZW5jZShtb2R1bGUsIHByZWZlcmVuY2VfbmFt ZSk7Ci0KLSAgICAgIGlmIChwcmVmZXJlbmNlKSB7Ci0gICAgICAgIGlmICghcHJlZmVyZW5jZS52 YWx1ZSkgewotICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KGdldHRleHQoJ0NvbmZpZ3VyYXRpb24g cmVxdWlyZWQnKSwgbXNnKTsKLSAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0g ZWxzZSB7Ci0gICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KAotICAgICAgICAgIGdldHRleHQoJ0JhY2t1 cCBFcnJvcicpLAotICAgICAgICAgIFMoZ2V0dGV4dCgnRmFpbGVkIHRvIGxvYWQgcHJlZmVyZW5j ZSAlcyBvZiBtb2R1bGUgJXMnKSkuc3ByaW50ZihwcmVmZXJlbmNlX25hbWUsIG1vZHVsZSkudmFs dWUoKQotICAgICAgICApOwotICAgICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHZhciBv Zl90eXBlID0gdW5kZWZpbmVkOwotCi0gICAgICAvLyBTZXQgTm90ZXMgYWNjb3JkaW5nIHRvIHR5 cGUgb2YgYmFja3VwCi0gICAgICBpZiAoIV8uaXNVbmRlZmluZWQocGFyYW1zWydnbG9iYWxzJ10p ICYmIHBhcmFtc1snZ2xvYmFscyddKSB7Ci0gICAgICAgIG9mX3R5cGUgPSAnZ2xvYmFscyc7Ci0g ICAgICB9IGVsc2UgewotICAgICAgICBvZl90eXBlID0gJ3NlcnZlcic7Ci0gICAgICB9Ci0KLSAg ICAgIHZhciBEaWFsb2dOYW1lID0gJ0JhY2t1cERpYWxvZ18nICsgb2ZfdHlwZSwKLSAgICAgICAg RGlhbG9nVGl0bGUgPSAoKG9mX3R5cGUgPT0gJ2dsb2JhbHMnKSA/Ci0gICAgICAgICAgZ2V0dGV4 dCgnQmFja3VwIEdsb2JhbHMuLi4nKSA6Ci0gICAgICAgICAgZ2V0dGV4dCgnQmFja3VwIFNlcnZl ci4uLicpKTsKLQotICAgICAgaWYgKCFhbGVydGlmeVtEaWFsb2dOYW1lXSkgewotICAgICAgICBh bGVydGlmeS5kaWFsb2coRGlhbG9nTmFtZSwgZnVuY3Rpb24gZmFjdG9yeSgpIHsKLSAgICAgICAg ICByZXR1cm4gewotICAgICAgICAgICAgbWFpbjogZnVuY3Rpb24odGl0bGUpIHsKLSAgICAgICAg ICAgICAgdGhpcy5zZXQoJ3RpdGxlJywgdGl0bGUpOwotICAgICAgICAgICAgfSwKLSAgICAgICAg ICAgIGJ1aWxkOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgYWxlcnRpZnkucGdEaWFsb2dC dWlsZC5hcHBseSh0aGlzKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBzZXR1cDogZnVu Y3Rpb24oKSB7Ci0gICAgICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICAgICAgYnV0dG9u czogW3sKLSAgICAgICAgICAgICAgICAgIHRleHQ6ICcnLAotICAgICAgICAgICAgICAgICAgY2xh c3NOYW1lOiAnYnRuIGJ0bi1kZWZhdWx0IHB1bGwtbGVmdCBmYSBmYS1sZyBmYS1pbmZvJywKLSAg ICAgICAgICAgICAgICAgIGF0dHJzOiB7Ci0gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdvYmpl Y3RfaGVscCcsCi0gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLAotICAgICAgICAg ICAgICAgICAgICB1cmw6ICdiYWNrdXAuaHRtbCcsCi0gICAgICAgICAgICAgICAgICAgIGxhYmVs OiBnZXR0ZXh0KCdCYWNrdXAnKSwKLSAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAg ICAgfSwgewotICAgICAgICAgICAgICAgICAgdGV4dDogJycsCi0gICAgICAgICAgICAgICAgICBr ZXk6IDExMiwKLSAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tZGVmYXVsdCBw dWxsLWxlZnQgZmEgZmEtbGcgZmEtcXVlc3Rpb24nLAotICAgICAgICAgICAgICAgICAgYXR0cnM6 IHsKLSAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2RpYWxvZ19oZWxwJywKLSAgICAgICAgICAg ICAgICAgICAgdHlwZTogJ2J1dHRvbicsCi0gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBnZXR0 ZXh0KCdCYWNrdXAnKSwKLSAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmxfZm9yKCdoZWxwLnN0 YXRpYycsIHsKLSAgICAgICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnOiAnYmFja3VwX2RpYWxv Zy5odG1sJywKLSAgICAgICAgICAgICAgICAgICAgfSksCi0gICAgICAgICAgICAgICAgICB9LAot ICAgICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAgIHRleHQ6IGdldHRleHQoJ0Jh Y2t1cCcpLAotICAgICAgICAgICAgICAgICAga2V5OiAxMywKLSAgICAgICAgICAgICAgICAgIGNs YXNzTmFtZTogJ2J0biBidG4tcHJpbWFyeSBmYSBmYS1sZyBmYS1zYXZlIHBnLWFsZXJ0aWZ5LWJ1 dHRvbicsCi0gICAgICAgICAgICAgICAgICAnZGF0YS1idG4tbmFtZSc6ICdiYWNrdXAnLAotICAg ICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAgIHRleHQ6IGdldHRleHQoJ0NhbmNl bCcpLAotICAgICAgICAgICAgICAgICAga2V5OiAyNywKLSAgICAgICAgICAgICAgICAgIGNsYXNz TmFtZTogJ2J0biBidG4tZGFuZ2VyIGZhIGZhLWxnIGZhLXRpbWVzIHBnLWFsZXJ0aWZ5LWJ1dHRv bicsCi0gICAgICAgICAgICAgICAgICAnZGF0YS1idG4tbmFtZSc6ICdjYW5jZWwnLAotICAgICAg ICAgICAgICAgIH1dLAotICAgICAgICAgICAgICAgIC8vIFNldCBvcHRpb25zIGZvciBkaWFsb2cK LSAgICAgICAgICAgICAgICBvcHRpb25zOiB7Ci0gICAgICAgICAgICAgICAgICB0aXRsZTogRGlh bG9nVGl0bGUsCi0gICAgICAgICAgICAgICAgICAvL2Rpc2FibGUgYm90aCBwYWRkaW5nIGFuZCBv dmVyZmxvdyBjb250cm9sLgotICAgICAgICAgICAgICAgICAgcGFkZGluZzogITEsCi0gICAgICAg ICAgICAgICAgICBvdmVyZmxvdzogITEsCi0gICAgICAgICAgICAgICAgICBtb2RlbDogMCwKLSAg ICAgICAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgIG1heGlt aXphYmxlOiB0cnVlLAotICAgICAgICAgICAgICAgICAgcGlubmFibGU6IGZhbHNlLAotICAgICAg ICAgICAgICAgICAgY2xvc2FibGVCeURpbW1lcjogZmFsc2UsCi0gICAgICAgICAgICAgICAgICBt b2RhbDogZmFsc2UsCi0gICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgfTsKLSAgICAg ICAgICAgIH0sCi0gICAgICAgICAgICBob29rczogewotICAgICAgICAgICAgICAvLyBUcmlnZ2Vy ZWQgd2hlbiB0aGUgZGlhbG9nIGlzIGNsb3NlZAotICAgICAgICAgICAgICBvbmNsb3NlOiBmdW5j dGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAodGhpcy52aWV3KSB7Ci0gICAgICAgICAgICAg ICAgICAvLyBjbGVhciBvdXIgYmFja2Zvcm0gbW9kZWwvdmlldwotICAgICAgICAgICAgICAgICAg dGhpcy52aWV3LnJlbW92ZSh7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRydWUsCi0gICAg ICAgICAgICAgICAgICAgIGludGVybmFsOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICBzaWxl bnQ6IHRydWUsCi0gICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg ICAgICAgICAgIH0sCi0gICAgICAgICAgICB9LAotICAgICAgICAgICAgcHJlcGFyZTogZnVuY3Rp b24oKSB7Ci0gICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgICAgICAgLy8g RGlzYWJsZSBCYWNrdXAgYnV0dG9uIHVudGlsIHVzZXIgcHJvdmlkZXMgRmlsZW5hbWUKLSAgICAg ICAgICAgICAgdGhpcy5fX2ludGVybmFsLmJ1dHRvbnNbMl0uZWxlbWVudC5kaXNhYmxlZCA9IHRy dWU7Ci0KLSAgICAgICAgICAgICAgdmFyICRjb250YWluZXIgPSAkKCc8ZGl2IGNsYXNzPVwnYmFj a3VwX2RpYWxvZ1wnPjwvZGl2PicpOwotICAgICAgICAgICAgICAvLyBGaW5kIGN1cnJlbnQvc2Vs ZWN0ZWQgbm9kZQotICAgICAgICAgICAgICB2YXIgdCA9IHBnQnJvd3Nlci50cmVlLAotICAgICAg ICAgICAgICAgIGkgPSB0LnNlbGVjdGVkKCksCi0gICAgICAgICAgICAgICAgZCA9IGkgJiYgaS5s ZW5ndGggPT0gMSA/IHQuaXRlbURhdGEoaSkgOiB1bmRlZmluZWQsCi0gICAgICAgICAgICAgICAg bm9kZSA9IGQgJiYgcGdCcm93c2VyLk5vZGVzW2QuX3R5cGVdOwotCi0gICAgICAgICAgICAgIGlm ICghZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIC8vIENyZWF0ZSB0 cmVlSW5mbwotICAgICAgICAgICAgICB2YXIgdHJlZUluZm8gPSBub2RlLmdldFRyZWVOb2RlSGll cmFyY2h5LmFwcGx5KG5vZGUsIFtpXSk7Ci0gICAgICAgICAgICAgIC8vIEluc3RhbmNlIG9mIGJh Y2tib25lIG1vZGVsCi0gICAgICAgICAgICAgIHZhciBuZXdNb2RlbCA9IG5ldyBCYWNrdXBNb2Rl bCh7Ci0gICAgICAgICAgICAgICAgICB0eXBlOiBvZl90eXBlLAotICAgICAgICAgICAgICAgIH0s IHsKLSAgICAgICAgICAgICAgICAgIG5vZGVfaW5mbzogdHJlZUluZm8sCi0gICAgICAgICAgICAg ICAgfSksCi0gICAgICAgICAgICAgICAgZmllbGRzID0gQmFja2Zvcm0uZ2VuZXJhdGVWaWV3U2No ZW1hKAotICAgICAgICAgICAgICAgICAgdHJlZUluZm8sIG5ld01vZGVsLCAnY3JlYXRlJywgbm9k ZSwgdHJlZUluZm8uc2VydmVyLCB0cnVlCi0gICAgICAgICAgICAgICAgKTsKLQotICAgICAgICAg ICAgICB2YXIgdmlldyA9IHRoaXMudmlldyA9IG5ldyBCYWNrZm9ybS5EaWFsb2coewotICAgICAg ICAgICAgICAgIGVsOiAkY29udGFpbmVyLAotICAgICAgICAgICAgICAgIG1vZGVsOiBuZXdNb2Rl bCwKLSAgICAgICAgICAgICAgICBzY2hlbWE6IGZpZWxkcywKLSAgICAgICAgICAgICAgfSk7Ci0g ICAgICAgICAgICAgIC8vIEFkZCBvdXIgY2xhc3MgdG8gYWxlcnRpZnkKLSAgICAgICAgICAgICAg JCh0aGlzLmVsZW1lbnRzLmJvZHkuY2hpbGROb2Rlc1swXSkuYWRkQ2xhc3MoCi0gICAgICAgICAg ICAgICAgJ2FsZXJ0aWZ5X3Rvb2xzX2RpYWxvZ19wcm9wZXJ0aWVzIG9ial9wcm9wZXJ0aWVzJwot ICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAvLyBSZW5kZXIgZGlhbG9nCi0gICAgICAg ICAgICAgIHZpZXcucmVuZGVyKCk7Ci0KLSAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5jb250 ZW50LmFwcGVuZENoaWxkKCRjb250YWluZXIuZ2V0KDApKTsKLQotICAgICAgICAgICAgICB2YXIg Y29udGFpbmVyID0gdmlldy4kZWwuZmluZCgnLnRhYi1jb250ZW50OmZpcnN0ID4gLnRhYi1wYW5l LmFjdGl2ZTpmaXJzdCcpOwotICAgICAgICAgICAgICBjb21tb25VdGlscy5maW5kQW5kU2V0Rm9j dXMoY29udGFpbmVyKTsKLQotICAgICAgICAgICAgICAvLyBMaXN0ZW4gdG8gbW9kZWwgJiBpZiBm aWxlbmFtZSBpcyBwcm92aWRlZCB0aGVuIGVuYWJsZSBCYWNrdXAgYnV0dG9uCi0gICAgICAgICAg ICAgIHRoaXMudmlldy5tb2RlbC5vbignY2hhbmdlJywgZnVuY3Rpb24oKSB7Ci0gICAgICAgICAg ICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuZ2V0KCdmaWxlJykpICYmIHRoaXMuZ2V0KCdm aWxlJykgIT09ICcnKSB7Ci0gICAgICAgICAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuY2xlYXIo KTsKLSAgICAgICAgICAgICAgICAgIHNlbGYuX19pbnRlcm5hbC5idXR0b25zWzJdLmVsZW1lbnQu ZGlzYWJsZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg ICAgICAgc2VsZi5fX2ludGVybmFsLmJ1dHRvbnNbMl0uZWxlbWVudC5kaXNhYmxlZCA9IHRydWU7 Ci0gICAgICAgICAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCdmaWxlJywgZ2V0dGV4dCgn UGxlYXNlIHByb3ZpZGUgYSBmaWxlbmFtZScpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgIH0pOwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIC8vIENhbGxiYWNrIGZ1bmN0 aW9ucyB3aGVuIGNsaWNrIG9uIHRoZSBidXR0b25zIG9mIHRoZSBBbGVydGlmeSBkaWFsb2dzCi0g ICAgICAgICAgICBjYWxsYmFjazogZnVuY3Rpb24oZSkgewotICAgICAgICAgICAgICAvLyBGZXRj aCBjdXJyZW50IHNlcnZlciBpZAotICAgICAgICAgICAgICB2YXIgdCA9IHBnQnJvd3Nlci50cmVl LAotICAgICAgICAgICAgICAgIGkgPSB0LnNlbGVjdGVkKCksCi0gICAgICAgICAgICAgICAgZCA9 IGkgJiYgaS5sZW5ndGggPT0gMSA/IHQuaXRlbURhdGEoaSkgOiB1bmRlZmluZWQsCi0gICAgICAg ICAgICAgICAgbm9kZSA9IGQgJiYgcGdCcm93c2VyLk5vZGVzW2QuX3R5cGVdOwotCi0gICAgICAg ICAgICAgIGlmIChlLmJ1dHRvbi5lbGVtZW50Lm5hbWUgPT0gJ2RpYWxvZ19oZWxwJyB8fCBlLmJ1 dHRvbi5lbGVtZW50Lm5hbWUgPT0gJ29iamVjdF9oZWxwJykgewotICAgICAgICAgICAgICAgIGUu Y2FuY2VsID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICBwZ0Jyb3dzZXIuc2hvd0hlbHAoZS5idXR0 b24uZWxlbWVudC5uYW1lLCBlLmJ1dHRvbi5lbGVtZW50LmdldEF0dHJpYnV0ZSgndXJsJyksCi0g ICAgICAgICAgICAgICAgICBub2RlLCBpLCBlLmJ1dHRvbi5lbGVtZW50LmdldEF0dHJpYnV0ZSgn bGFiZWwnKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICB9Ci0KLSAg ICAgICAgICAgICAgaWYgKGUuYnV0dG9uWydkYXRhLWJ0bi1uYW1lJ10gPT09ICdiYWNrdXAnKSB7 Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWQpCi0gICAgICAgICAgICAgICAgICByZXR1cm47Ci0K LSAgICAgICAgICAgICAgICB2YXIgdHJlZUluZm8gPSBub2RlLmdldFRyZWVOb2RlSGllcmFyY2h5 LmFwcGx5KG5vZGUsIFtpXSk7Ci0KLSAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCi0g ICAgICAgICAgICAgICAgICBiYXNlVXJsID0gdXJsX2ZvcignYmFja3VwLmNyZWF0ZV9zZXJ2ZXJf am9iJywgewotICAgICAgICAgICAgICAgICAgICAnc2lkJzogdHJlZUluZm8uc2VydmVyLl9pZCwK LSAgICAgICAgICAgICAgICAgIH0pLAotICAgICAgICAgICAgICAgICAgYXJncyA9IHRoaXMudmll dy5tb2RlbC50b0pTT04oKTsKLQotICAgICAgICAgICAgICAgICQuYWpheCh7Ci0gICAgICAgICAg ICAgICAgICB1cmw6IGJhc2VVcmwsCi0gICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywK LSAgICAgICAgICAgICAgICAgIGRhdGE6IHsKLSAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiBK U09OLnN0cmluZ2lmeShhcmdzKSwKLSAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAg ICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJl cy5zdWNjZXNzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgYWxlcnRpZnkuc3VjY2VzcyhnZXR0 ZXh0KCdCYWNrdXAgam9iIGNyZWF0ZWQuJyksIDUpOwotICAgICAgICAgICAgICAgICAgICAgIHBn QnJvd3Nlci5FdmVudHMudHJpZ2dlcigncGdhZG1pbi1iZ3Byb2Nlc3M6Y3JlYXRlZCcsIHNlbGYp OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgIGNv bnNvbGUud2FybihyZXMpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg ICB9LAotICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKHhocikgewotICAgICAgICAg ICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSAkLnBhcnNl SlNPTih4aHIucmVzcG9uc2VUZXh0KTsKLSAgICAgICAgICAgICAgICAgICAgICBhbGVydGlmeS5h bGVydCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldHRleHQoJ0JhY2t1cCBqb2IgZmFpbGVk LicpLAotICAgICAgICAgICAgICAgICAgICAgICAgZXJyLmVycm9ybXNnCi0gICAgICAgICAgICAg ICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAg ICAgICAgICAgICAgIGNvbnNvbGUud2FybihlLnN0YWNrIHx8IGUpOwotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIH0pOwotICAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICB9LAotICAgICAgICAgIH07Ci0gICAgICAgIH0pOwotICAg ICAgfQotICAgICAgYWxlcnRpZnlbRGlhbG9nTmFtZV0odHJ1ZSkucmVzaXplVG8oJzYwJScsICc1 MCUnKTsKKyAgICBzdGFydF9iYWNrdXBfZ2xvYmFsX3NlcnZlcjogZnVuY3Rpb24oYWN0aW9uLCB0 cmVlSXRlbSwgcGFyYW1zKSB7CisgICAgICBsZXQgZGlhbG9nID0gbmV3IGdsb2JhbEJhY2t1cERp YWxvZy5CYWNrdXBEaWFsb2coCisgICAgICAgIHBnQnJvd3NlciwKKyAgICAgICAgJCwKKyAgICAg ICAgYWxlcnRpZnksCisgICAgICAgIEJhY2t1cE1vZGVsCisgICAgICApOworICAgICAgZGlhbG9n LmRyYXcoYWN0aW9uLCB0cmVlSXRlbSwgcGFyYW1zKTsKICAgICB9LAogCiAgICAgLy8gQ2FsbGJh Y2sgdG8gZHJhdyBCYWNrdXAgRGlhbG9nIGZvciBvYmplY3RzCiAgICAgYmFja3VwX29iamVjdHM6 IGZ1bmN0aW9uKGFjdGlvbiwgdHJlZUl0ZW0pIHsKLQotICAgICAgdmFyIGkgPSB0cmVlSXRlbSB8 fCBwZ0Jyb3dzZXIudHJlZS5zZWxlY3RlZCgpLAotICAgICAgICBzZXJ2ZXJfZGF0YSA9IG51bGw7 Ci0KLSAgICAgIHdoaWxlIChpKSB7Ci0gICAgICAgIHZhciBub2RlX2RhdGEgPSBwZ0Jyb3dzZXIu dHJlZS5pdGVtRGF0YShpKTsKLSAgICAgICAgaWYgKG5vZGVfZGF0YS5fdHlwZSA9PSAnc2VydmVy JykgewotICAgICAgICAgIHNlcnZlcl9kYXRhID0gbm9kZV9kYXRhOwotICAgICAgICAgIGJyZWFr OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBnQnJvd3Nlci50cmVlLmhhc1BhcmVudChpKSkg ewotICAgICAgICAgIGkgPSAkKHBnQnJvd3Nlci50cmVlLnBhcmVudChpKSk7Ci0gICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgYWxlcnRpZnkuYWxlcnQoCi0gICAgICAgICAgICBnZXR0ZXh0KCdC YWNrdXAgRXJyb3InKSwKLSAgICAgICAgICAgIGdldHRleHQoJ1BsZWFzZSBzZWxlY3Qgc2VydmVy IG9yIGNoaWxkIG5vZGUgZnJvbSB0cmVlLicpCi0gICAgICAgICAgKTsKLSAgICAgICAgICBicmVh azsKLSAgICAgICAgfQotICAgICAgfQotCi0gICAgICBpZiAoIXNlcnZlcl9kYXRhKSB7Ci0gICAg ICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgdmFyIG1vZHVsZSA9ICdwYXRocycsCi0gICAg ICAgIHByZWZlcmVuY2VfbmFtZSA9ICdwZ19iaW5fZGlyJywKLSAgICAgICAgbXNnID0gZ2V0dGV4 dCgnUGxlYXNlIHNldCBiaW5hcnkgcGF0aCBmb3IgUG9zdGdyZVNRTCBTZXJ2ZXIgZnJvbSBwcmVm ZXJlbmNlcy4nKTsKLQotICAgICAgaWYgKChzZXJ2ZXJfZGF0YS50eXBlICYmIHNlcnZlcl9kYXRh LnR5cGUgPT0gJ3BwYXMnKSB8fAotICAgICAgICBzZXJ2ZXJfZGF0YS5zZXJ2ZXJfdHlwZSA9PSAn cHBhcycpIHsKLSAgICAgICAgcHJlZmVyZW5jZV9uYW1lID0gJ3BwYXNfYmluX2Rpcic7Ci0gICAg ICAgIG1zZyA9IGdldHRleHQoJ1BsZWFzZSBzZXQgYmluYXJ5IHBhdGggZm9yIEVEQiBQb3N0Z3Jl cyBBZHZhbmNlZCBTZXJ2ZXIgZnJvbSBwcmVmZXJlbmNlcy4nKTsKLSAgICAgIH0KLQotICAgICAg dmFyIHByZWZlcmVuY2UgPSBwZ0Jyb3dzZXIuZ2V0X3ByZWZlcmVuY2UobW9kdWxlLCBwcmVmZXJl bmNlX25hbWUpOwotCi0gICAgICBpZiAocHJlZmVyZW5jZSkgewotICAgICAgICBpZiAoIXByZWZl cmVuY2UudmFsdWUpIHsKLSAgICAgICAgICBhbGVydGlmeS5hbGVydChnZXR0ZXh0KCdDb25maWd1 cmF0aW9uIHJlcXVpcmVkJyksIG1zZyk7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g ICAgICB9IGVsc2UgewotICAgICAgICBhbGVydGlmeS5hbGVydCgKLSAgICAgICAgICBnZXR0ZXh0 KCdCYWNrdXAgRXJyb3InKSwKLSAgICAgICAgICBTKGdldHRleHQoJ0ZhaWxlZCB0byBsb2FkIHBy ZWZlcmVuY2UgJXMgb2YgbW9kdWxlICVzJykpLnNwcmludGYocHJlZmVyZW5jZV9uYW1lLCBtb2R1 bGUpLnZhbHVlKCkKLSAgICAgICAgKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAg ICB2YXIgdGl0bGUgPSBTKGdldHRleHQoJ0JhY2t1cCAoJXM6ICVzKScpKSwKLSAgICAgICAgdHJl ZSA9IHBnQnJvd3Nlci50cmVlLAotICAgICAgICBpdGVtID0gdHJlZUl0ZW0gfHwgdHJlZS5zZWxl Y3RlZCgpLAotICAgICAgICBkYXRhID0gaXRlbSAmJiBpdGVtLmxlbmd0aCA9PSAxICYmIHRyZWUu aXRlbURhdGEoaXRlbSksCi0gICAgICAgIG5vZGUgPSBkYXRhICYmIGRhdGEuX3R5cGUgJiYgcGdC cm93c2VyLk5vZGVzW2RhdGEuX3R5cGVdOwotCi0gICAgICBpZiAoIW5vZGUpCi0gICAgICAgIHJl dHVybjsKLQotICAgICAgdGl0bGUgPSB0aXRsZS5zcHJpbnRmKG5vZGUubGFiZWwsIGRhdGEubGFi ZWwpLnZhbHVlKCk7Ci0KLSAgICAgIGlmICghYWxlcnRpZnkuYmFja3VwX29iamVjdHMpIHsKLSAg ICAgICAgLy8gQ3JlYXRlIERpYWxvZyB0aXRsZSBvbiB0aGUgZmx5IHdpdGggbm9kZSBkZXRhaWxz Ci0gICAgICAgIGFsZXJ0aWZ5LmRpYWxvZygnYmFja3VwX29iamVjdHMnLCBmdW5jdGlvbiBmYWN0 b3J5KCkgewotICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICBtYWluOiBmdW5jdGlvbih0 aXRsZSkgewotICAgICAgICAgICAgICB0aGlzLnNldCgndGl0bGUnLCB0aXRsZSk7Ci0gICAgICAg ICAgICB9LAotICAgICAgICAgICAgYnVpbGQ6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICBh bGVydGlmeS5wZ0RpYWxvZ0J1aWxkLmFwcGx5KHRoaXMpOwotICAgICAgICAgICAgfSwKLSAgICAg ICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHsKLSAgICAg ICAgICAgICAgICBidXR0b25zOiBbewotICAgICAgICAgICAgICAgICAgdGV4dDogJycsCi0gICAg ICAgICAgICAgICAgICBjbGFzc05hbWU6ICdidG4gYnRuLWRlZmF1bHQgcHVsbC1sZWZ0IGZhIGZh LWxnIGZhLWluZm8nLAotICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKLSAgICAgICAgICAgICAg ICAgICAgbmFtZTogJ29iamVjdF9oZWxwJywKLSAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2J1 dHRvbicsCi0gICAgICAgICAgICAgICAgICAgIHVybDogJ2JhY2t1cC5odG1sJywKLSAgICAgICAg ICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ0JhY2t1cCcpLAotICAgICAgICAgICAgICAgICAg fSwKLSAgICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKLSAg ICAgICAgICAgICAgICAgIGtleTogMTEyLAotICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAn YnRuIGJ0bi1kZWZhdWx0IHB1bGwtbGVmdCBmYSBmYS1sZyBmYS1xdWVzdGlvbicsCi0gICAgICAg ICAgICAgICAgICBhdHRyczogewotICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZGlhbG9nX2hl bHAnLAotICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJywKLSAgICAgICAgICAgICAg ICAgICAgbGFiZWw6IGdldHRleHQoJ0JhY2t1cCcpLAotICAgICAgICAgICAgICAgICAgICB1cmw6 IHVybF9mb3IoJ2hlbHAuc3RhdGljJywgewotICAgICAgICAgICAgICAgICAgICAgICdmaWxlbmFt ZSc6ICdiYWNrdXBfZGlhbG9nLmh0bWwnLAotICAgICAgICAgICAgICAgICAgICB9KSwKLSAgICAg ICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICAg dGV4dDogZ2V0dGV4dCgnQmFja3VwJyksCi0gICAgICAgICAgICAgICAgICBrZXk6IDEzLAotICAg ICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1wcmltYXJ5IGZhIGZhLWxnIGZhLXNh dmUgcGctYWxlcnRpZnktYnV0dG9uJywKLSAgICAgICAgICAgICAgICAgICdkYXRhLWJ0bi1uYW1l JzogJ2JhY2t1cCcsCi0gICAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICAgdGV4 dDogZ2V0dGV4dCgnQ2FuY2VsJyksCi0gICAgICAgICAgICAgICAgICBrZXk6IDI3LAotICAgICAg ICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1kYW5nZXIgZmEgZmEtbGcgZmEtdGltZXMg cGctYWxlcnRpZnktYnV0dG9uJywKLSAgICAgICAgICAgICAgICAgICdkYXRhLWJ0bi1uYW1lJzog J2NhbmNlbCcsCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgLy8gU2V0IG9w dGlvbnMgZm9yIGRpYWxvZwotICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsKLSAgICAgICAgICAg ICAgICAgIHRpdGxlOiB0aXRsZSwKLSAgICAgICAgICAgICAgICAgIC8vZGlzYWJsZSBib3RoIHBh ZGRpbmcgYW5kIG92ZXJmbG93IGNvbnRyb2wuCi0gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAh MSwKLSAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAhMSwKLSAgICAgICAgICAgICAgICAgIG1v ZGVsOiAwLAotICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLAotICAgICAgICAgICAg ICAgICAgbWF4aW1pemFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgICBwaW5uYWJsZTogZmFs c2UsCi0gICAgICAgICAgICAgICAgICBjbG9zYWJsZUJ5RGltbWVyOiBmYWxzZSwKLSAgICAgICAg ICAgICAgICAgIG1vZGFsOiBmYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAg ICB9OwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGhvb2tzOiB7Ci0gICAgICAgICAgICAg IC8vIHRyaWdnZXJlZCB3aGVuIHRoZSBkaWFsb2cgaXMgY2xvc2VkCi0gICAgICAgICAgICAgIG9u Y2xvc2U6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpZXcpIHsKLSAg ICAgICAgICAgICAgICAgIHRoaXMudmlldy5yZW1vdmUoewotICAgICAgICAgICAgICAgICAgICBk YXRhOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZSwKLSAgICAgICAg ICAgICAgICAgICAgc2lsZW50OiB0cnVlLAotICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAg IHByZXBhcmU6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Ci0g ICAgICAgICAgICAgIC8vIERpc2FibGUgQmFja3VwIGJ1dHRvbiB1bnRpbCB1c2VyIHByb3ZpZGVz IEZpbGVuYW1lCi0gICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbC5idXR0b25zWzJdLmVsZW1l bnQuZGlzYWJsZWQgPSB0cnVlOwotICAgICAgICAgICAgICB2YXIgJGNvbnRhaW5lciA9ICQoJzxk aXYgY2xhc3M9XCdiYWNrdXBfZGlhbG9nXCc+PC9kaXY+Jyk7Ci0gICAgICAgICAgICAgIHZhciB0 ID0gcGdCcm93c2VyLnRyZWUsCi0gICAgICAgICAgICAgICAgaSA9IHQuc2VsZWN0ZWQoKSwKLSAg ICAgICAgICAgICAgICBkID0gaSAmJiBpLmxlbmd0aCA9PSAxID8gdC5pdGVtRGF0YShpKSA6IHVu ZGVmaW5lZCwKLSAgICAgICAgICAgICAgICBub2RlID0gZCAmJiBwZ0Jyb3dzZXIuTm9kZXNbZC5f dHlwZV07Ci0KLSAgICAgICAgICAgICAgaWYgKCFkKQotICAgICAgICAgICAgICAgIHJldHVybjsK LQotICAgICAgICAgICAgICB2YXIgdHJlZUluZm8gPSBub2RlLmdldFRyZWVOb2RlSGllcmFyY2h5 LmFwcGx5KG5vZGUsIFtpXSk7Ci0KLSAgICAgICAgICAgICAgdmFyIG5ld01vZGVsID0gbmV3IEJh Y2t1cE9iamVjdE1vZGVsKHt9LCB7Ci0gICAgICAgICAgICAgICAgICBub2RlX2luZm86IHRyZWVJ bmZvLAotICAgICAgICAgICAgICAgIH0pLAotICAgICAgICAgICAgICAgIGZpZWxkcyA9IEJhY2tm b3JtLmdlbmVyYXRlVmlld1NjaGVtYSgKLSAgICAgICAgICAgICAgICAgIHRyZWVJbmZvLCBuZXdN b2RlbCwgJ2NyZWF0ZScsIG5vZGUsIHRyZWVJbmZvLnNlcnZlciwgdHJ1ZQotICAgICAgICAgICAg ICAgICk7Ci0KLSAgICAgICAgICAgICAgdmFyIHZpZXcgPSB0aGlzLnZpZXcgPSBuZXcgQmFja2Zv cm0uRGlhbG9nKHsKLSAgICAgICAgICAgICAgICBlbDogJGNvbnRhaW5lciwKLSAgICAgICAgICAg ICAgICBtb2RlbDogbmV3TW9kZWwsCi0gICAgICAgICAgICAgICAgc2NoZW1hOiBmaWVsZHMsCi0g ICAgICAgICAgICAgIH0pOwotCi0gICAgICAgICAgICAgICQodGhpcy5lbGVtZW50cy5ib2R5LmNo aWxkTm9kZXNbMF0pLmFkZENsYXNzKAotICAgICAgICAgICAgICAgICdhbGVydGlmeV90b29sc19k aWFsb2dfcHJvcGVydGllcyBvYmpfcHJvcGVydGllcycKLSAgICAgICAgICAgICAgKTsKLQotICAg ICAgICAgICAgICB2aWV3LnJlbmRlcigpOwotCi0gICAgICAgICAgICAgIHRoaXMuZWxlbWVudHMu Y29udGVudC5hcHBlbmRDaGlsZCgkY29udGFpbmVyLmdldCgwKSk7Ci0KLSAgICAgICAgICAgICAg aWYodmlldykgewotICAgICAgICAgICAgICAgIHZpZXcuJGVsLmF0dHIoJ3RhYmluZGV4JywgLTEp OwotICAgICAgICAgICAgICAgIC8vIHZhciBkaWFsb2dUYWJOYXZpZ2F0b3IgPSBwZ0Jyb3dzZXIu a2V5Ym9hcmROYXZpZ2F0aW9uLmdldERpYWxvZ1RhYk5hdmlnYXRvcih2aWV3KTsKLSAgICAgICAg ICAgICAgICBwZ0Jyb3dzZXIua2V5Ym9hcmROYXZpZ2F0aW9uLmdldERpYWxvZ1RhYk5hdmlnYXRv cih2aWV3KTsKLSAgICAgICAgICAgICAgICB2YXIgY29udGFpbmVyID0gdmlldy4kZWwuZmluZCgn LnRhYi1jb250ZW50OmZpcnN0ID4gLnRhYi1wYW5lLmFjdGl2ZTpmaXJzdCcpOwotICAgICAgICAg ICAgICAgIGNvbW1vblV0aWxzLmZpbmRBbmRTZXRGb2N1cyhjb250YWluZXIpOwotICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgIC8vIExpc3RlbiB0byBtb2RlbCAmIGlmIGZpbGVuYW1lIGlz IHByb3ZpZGVkIHRoZW4gZW5hYmxlIEJhY2t1cCBidXR0b24KLSAgICAgICAgICAgICAgdGhpcy52 aWV3Lm1vZGVsLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAo IV8uaXNVbmRlZmluZWQodGhpcy5nZXQoJ2ZpbGUnKSkgJiYgdGhpcy5nZXQoJ2ZpbGUnKSAhPT0g JycpIHsKLSAgICAgICAgICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC5jbGVhcigpOwotICAgICAg ICAgICAgICAgICAgc2VsZi5fX2ludGVybmFsLmJ1dHRvbnNbMl0uZWxlbWVudC5kaXNhYmxlZCA9 IGZhbHNlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBzZWxm Ll9faW50ZXJuYWwuYnV0dG9uc1syXS5lbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKLSAgICAgICAg ICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC5zZXQoJ2ZpbGUnLCBnZXR0ZXh0KCdQbGVhc2UgcHJv dmlkZSBmaWxlbmFtZScpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0pOwot Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb25zIHdoZW4g Y2xpY2sgb24gdGhlIGJ1dHRvbnMgb2YgdGhlIEFsZXJ0aWZ5IGRpYWxvZ3MKLSAgICAgICAgICAg IGNhbGxiYWNrOiBmdW5jdGlvbihlKSB7Ci0gICAgICAgICAgICAgIC8vIEZldGNoIGN1cnJlbnQg c2VydmVyIGlkCi0gICAgICAgICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsCi0gICAgICAg ICAgICAgICAgaSA9IHQuc2VsZWN0ZWQoKSwKLSAgICAgICAgICAgICAgICBkID0gaSAmJiBpLmxl bmd0aCA9PSAxID8gdC5pdGVtRGF0YShpKSA6IHVuZGVmaW5lZCwKLSAgICAgICAgICAgICAgICBu b2RlID0gZCAmJiBwZ0Jyb3dzZXIuTm9kZXNbZC5fdHlwZV07Ci0KLSAgICAgICAgICAgICAgaWYg KGUuYnV0dG9uLmVsZW1lbnQubmFtZSA9PSAnZGlhbG9nX2hlbHAnIHx8IGUuYnV0dG9uLmVsZW1l bnQubmFtZSA9PSAnb2JqZWN0X2hlbHAnKSB7Ci0gICAgICAgICAgICAgICAgZS5jYW5jZWwgPSB0 cnVlOwotICAgICAgICAgICAgICAgIHBnQnJvd3Nlci5zaG93SGVscChlLmJ1dHRvbi5lbGVtZW50 Lm5hbWUsIGUuYnV0dG9uLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCd1cmwnKSwKLSAgICAgICAgICAg ICAgICAgIG5vZGUsIGksIGUuYnV0dG9uLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCdsYWJlbCcpKTsK LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg ICBpZiAoZS5idXR0b25bJ2RhdGEtYnRuLW5hbWUnXSA9PT0gJ2JhY2t1cCcpIHsKLSAgICAgICAg ICAgICAgICBpZiAoIWQpCi0gICAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAg ICAgICB2YXIgdHJlZUluZm8gPSBub2RlLmdldFRyZWVOb2RlSGllcmFyY2h5LmFwcGx5KG5vZGUs IFtpXSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBTZXQgY3VycmVudCBkYXRhYmFzZSBpbnRvIG1v ZGVsCi0gICAgICAgICAgICAgICAgdGhpcy52aWV3Lm1vZGVsLnNldCgnZGF0YWJhc2UnLCB0cmVl SW5mby5kYXRhYmFzZS5fbGFiZWwpOwotCi0gICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCByZW1v dmUgb25jZSBvYmplY3QgdHJlZSBpcyBpbXBsZW1lbnRlZAotICAgICAgICAgICAgICAgIC8vIElm IHNlbGVjdGVkIG5vZGUgaXMgU2NoZW1hIHRoZW4gYWRkIGl0IGluIG1vZGVsCi0gICAgICAgICAg ICAgICAgaWYgKGQuX3R5cGUgPT0gJ3NjaGVtYScpIHsKLSAgICAgICAgICAgICAgICAgIHZhciBz Y2hlbWFzID0gW107Ci0gICAgICAgICAgICAgICAgICBzY2hlbWFzLnB1c2goZC5fbGFiZWwpOwot ICAgICAgICAgICAgICAgICAgdGhpcy52aWV3Lm1vZGVsLnNldCgnc2NoZW1hcycsIHNjaGVtYXMp OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBJZiBzZWxlY3RlZCBub2Rl IGlzIFRhYmxlIHRoZW4gYWRkIGl0IGluIG1vZGVsIGFsb25nIHdpdGgKLSAgICAgICAgICAgICAg ICAvLyBpdHMgc2NoZW1hCi0gICAgICAgICAgICAgICAgaWYgKGQuX3R5cGUgPT0gJ3RhYmxlJykg ewotICAgICAgICAgICAgICAgICAgdGhpcy52aWV3Lm1vZGVsLnNldCgKLSAgICAgICAgICAgICAg ICAgICAgJ3RhYmxlcycsIFsKLSAgICAgICAgICAgICAgICAgICAgICBbdHJlZUluZm8uc2NoZW1h Ll9sYWJlbCwgZC5fbGFiZWxdLAotICAgICAgICAgICAgICAgICAgICBdCi0gICAgICAgICAgICAg ICAgICApOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBy YXRpbyBhdHRyaWJ1dGUgZnJvbSBtb2RlbCBpZiBpdCBoYXMgZW1wdHkgc3RyaW5nLgotICAgICAg ICAgICAgICAgIC8vIFRoZSB2YWxpZCB2YWx1ZSBjYW4gYmUgYmV0d2VlbiAwIHRvIDkuCi0gICAg ICAgICAgICAgICAgaWYgKF8uaXNFbXB0eSh0aGlzLnZpZXcubW9kZWwuZ2V0KCdyYXRpbycpKSkg ewotICAgICAgICAgICAgICAgICAgdGhpcy52aWV3Lm1vZGVsLnVuc2V0KCdyYXRpbycpOwotICAg ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcywKLSAgICAg ICAgICAgICAgICAgIGJhc2VVcmwgPSB1cmxfZm9yKCdiYWNrdXAuY3JlYXRlX29iamVjdF9qb2In LCB7Ci0gICAgICAgICAgICAgICAgICAgICdzaWQnOiB0cmVlSW5mby5zZXJ2ZXIuX2lkLAotICAg ICAgICAgICAgICAgICAgfSksCi0gICAgICAgICAgICAgICAgICBhcmdzID0gdGhpcy52aWV3Lm1v ZGVsLnRvSlNPTigpOwotCi0gICAgICAgICAgICAgICAgJC5hamF4KHsKLSAgICAgICAgICAgICAg ICAgIHVybDogYmFzZVVybCwKLSAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAotICAg ICAgICAgICAgICAgICAgZGF0YTogewotICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IEpTT04u c3RyaW5naWZ5KGFyZ3MpLAotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAg IHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgewotICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnN1 Y2Nlc3MpIHsKLSAgICAgICAgICAgICAgICAgICAgICBhbGVydGlmeS5zdWNjZXNzKGdldHRleHQo J0JhY2t1cCBqb2IgY3JlYXRlZC4nKSwgNSk7Ci0gICAgICAgICAgICAgICAgICAgICAgcGdCcm93 c2VyLkV2ZW50cy50cmlnZ2VyKCdwZ2FkbWluLWJncHJvY2VzczpjcmVhdGVkJywgc2VsZik7Ci0g ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAg ICAgICBlcnJvcjogZnVuY3Rpb24oeGhyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0g ICAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9ICQucGFyc2VKU09OKHhoci5yZXNwb25zZVRl eHQpOwotICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KAotICAgICAgICAgICAg ICAgICAgICAgICAgZ2V0dGV4dCgnQmFja3VwIGpvYiBmYWlsZWQuJyksCi0gICAgICAgICAgICAg ICAgICAgICAgICBlcnIuZXJyb3Jtc2cKLSAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAg ICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY29uc29s ZS53YXJuKGUuc3RhY2sgfHwgZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg ICAgICAgIH0sCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgIH0sCi0gICAgICAgICAgfTsKLSAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAgICBhbGVydGlm eS5iYWNrdXBfb2JqZWN0cyh0aXRsZSkucmVzaXplVG8oJzY1JScsICc2MCUnKTsKKyAgICAgIGxl dCBkaWFsb2cgPSBuZXcgZ2xvYmFsQmFja3VwRGlhbG9nLkJhY2t1cERpYWxvZygKKyAgICAgICAg cGdCcm93c2VyLAorICAgICAgICAkLAorICAgICAgICBhbGVydGlmeSwKKyAgICAgICAgQmFja3Vw T2JqZWN0TW9kZWwKKyAgICAgICk7CisgICAgICBkaWFsb2cuZHJhdyhhY3Rpb24sIHRyZWVJdGVt LCBudWxsKTsKICAgICB9LAogICB9OwogICByZXR1cm4gcGdCcm93c2VyLkJhY2t1cDsKZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlkL3N0YXRpYy9qcy9kYXRhZ3JpZC5qcyBi L3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlkL3N0YXRpYy9qcy9kYXRhZ3JpZC5qcwppbmRleCA0 NzNmMjBhZC4uZDhkMWM5MDIgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlk L3N0YXRpYy9qcy9kYXRhZ3JpZC5qcworKysgYi93ZWIvcGdhZG1pbi90b29scy9kYXRhZ3JpZC9z dGF0aWMvanMvZGF0YWdyaWQuanMKQEAgLTEsMTAgKzEsMTMgQEAKIGRlZmluZSgncGdhZG1pbi5k YXRhZ3JpZCcsIFsKICAgJ3NvdXJjZXMvZ2V0dGV4dCcsICdzb3VyY2VzL3VybF9mb3InLCAnanF1 ZXJ5JywgJ3VuZGVyc2NvcmUnLAogICAncGdhZG1pbi5hbGVydGlmeWpzJywgJ3NvdXJjZXMvcGdh ZG1pbicsICdidW5kbGVkX2NvZGVtaXJyb3InLAotICAnc291cmNlcy9zcWxlZGl0b3JfdXRpbHMn LCAnYmFja2JvbmUnLCAnd2Nkb2NrZXInLAorICAnc291cmNlcy9zcWxlZGl0b3JfdXRpbHMnLCAn YmFja2JvbmUnLCAnc291cmNlcy9kYXRhZ3JpZC9zaG93X2RhdGEnLAorICAnc291cmNlcy9kYXRh Z3JpZC9nZXRfcGFuZWxfdGl0bGUnLAorICAnc291cmNlcy9kYXRhZ3JpZC9zaG93X3F1ZXJ5X3Rv b2wnLAorICAnd2Nkb2NrZXInLAogXSwgZnVuY3Rpb24oCiAgIGdldHRleHQsIHVybF9mb3IsICQs IF8sIGFsZXJ0aWZ5LCBwZ0FkbWluLCBjb2RlbWlycm9yLCBzcWxFZGl0b3JVdGlscywKLSAgQmFj a2JvbmUKKyAgQmFja2JvbmUsIHNob3dEYXRhLCBwYW5lbFRpdGxlLCBzaG93UXVlcnlUb29sCiAp IHsKICAgLy8gU29tZSBzY3JpcHRzIGRvIGV4cG9ydCB0aGVpciBvYmplY3QgaW4gdGhlIHdpbmRv dyBvbmx5LgogICAvLyBHZW5lcmFsbHkgdGhlIG9uZSwgd2hpY2ggZG8gbm8gaGF2ZSBBTUQgc3Vw cG9ydC4KQEAgLTE2MSw1NSArMTY0LDcgQEAgZGVmaW5lKCdwZ2FkbWluLmRhdGFncmlkJywgWwog CiAgICAgICAvLyBUaGlzIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2hvdyBkYXRhIHdoZW4g dXNlciBjbGljayBvbiBtZW51IGl0ZW0uCiAgICAgICBzaG93X2RhdGFfZ3JpZDogZnVuY3Rpb24o ZGF0YSwgaSkgewotICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCi0gICAgICAgICAgZCA9IHBnQWRt aW4uQnJvd3Nlci50cmVlLml0ZW1EYXRhKGkpOwotICAgICAgICBpZiAoZCA9PT0gdW5kZWZpbmVk KSB7Ci0gICAgICAgICAgYWxlcnRpZnkuYWxlcnQoCi0gICAgICAgICAgICBnZXR0ZXh0KCdEYXRh IEdyaWQgRXJyb3InKSwKLSAgICAgICAgICAgIGdldHRleHQoJ05vIG9iamVjdCBzZWxlY3RlZC4n KQotICAgICAgICAgICk7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAg Ly8gR2V0IHRoZSBwYXJlbnQgZGF0YSBmcm9tIHRoZSB0cmVlIG5vZGUgaGllcmFyY2h5LgotICAg ICAgICB2YXIgbm9kZSA9IHBnQnJvd3Nlci5Ob2Rlc1tkLl90eXBlXSwKLSAgICAgICAgICBwYXJl bnREYXRhID0gbm9kZS5nZXRUcmVlTm9kZUhpZXJhcmNoeShpKTsKLQotICAgICAgICAvLyBJZiBz ZXJ2ZXIsIGRhdGFiYXNlIG9yIHNjaGVtYSBpcyB1bmRlZmluZWQgdGhlbiByZXR1cm4gZnJvbSB0 aGUgZnVuY3Rpb24uCi0gICAgICAgIGlmIChwYXJlbnREYXRhLnNlcnZlciA9PT0gdW5kZWZpbmVk IHx8IHBhcmVudERhdGEuZGF0YWJhc2UgPT09IHVuZGVmaW5lZCkgewotICAgICAgICAgIHJldHVy bjsKLSAgICAgICAgfQotICAgICAgICAvLyBJZiBzY2hlbWEsIHZpZXcsIGNhdGFsb2cgb2JqZWN0 IGFsbCBhcmUgdW5kZWZpbmVkIHRoZW4gcmV0dXJuIGZyb20gdGhlIGZ1bmN0aW9uLgotICAgICAg ICBpZiAocGFyZW50RGF0YS5zY2hlbWEgPT09IHVuZGVmaW5lZCAmJiBwYXJlbnREYXRhLnZpZXcg PT09IHVuZGVmaW5lZCAmJgotICAgICAgICAgICAgIHBhcmVudERhdGEuY2F0YWxvZyA9PT0gdW5k ZWZpbmVkKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIG5z cF9uYW1lID0gJyc7Ci0KLSAgICAgICAgaWYgKHBhcmVudERhdGEuc2NoZW1hICE9IHVuZGVmaW5l ZCkgewotICAgICAgICAgIG5zcF9uYW1lID0gcGFyZW50RGF0YS5zY2hlbWEubGFiZWw7Ci0gICAg ICAgIH0KLSAgICAgICAgZWxzZSBpZiAocGFyZW50RGF0YS52aWV3ICE9IHVuZGVmaW5lZCkgewot ICAgICAgICAgIG5zcF9uYW1lID0gcGFyZW50RGF0YS52aWV3LmxhYmVsOwotICAgICAgICB9Ci0g ICAgICAgIGVsc2UgaWYgKHBhcmVudERhdGEuY2F0YWxvZyAhPSB1bmRlZmluZWQpIHsKLSAgICAg ICAgICBuc3BfbmFtZSA9IHBhcmVudERhdGEuY2F0YWxvZy5sYWJlbDsKLSAgICAgICAgfQotICAg ICAgICB2YXIgdXJsX3BhcmFtcyA9IHsKLSAgICAgICAgICAnY21kX3R5cGUnOiBkYXRhLm1udWlk LAotICAgICAgICAgICdvYmpfdHlwZSc6IGQuX3R5cGUsCi0gICAgICAgICAgJ3NnaWQnOiBwYXJl bnREYXRhLnNlcnZlcl9ncm91cC5faWQsCi0gICAgICAgICAgJ3NpZCc6IHBhcmVudERhdGEuc2Vy dmVyLl9pZCwKLSAgICAgICAgICAnZGlkJzogcGFyZW50RGF0YS5kYXRhYmFzZS5faWQsCi0gICAg ICAgICAgJ29ial9pZCc6IGQuX2lkLAotICAgICAgICB9OwotCi0gICAgICAgIHZhciBiYXNlVXJs ID0gdXJsX2ZvcignZGF0YWdyaWQuaW5pdGlhbGl6ZV9kYXRhZ3JpZCcsIHVybF9wYXJhbXMpOwot ICAgICAgICB2YXIgZ3JpZF90aXRsZSA9IHBhcmVudERhdGEuc2VydmVyLmxhYmVsICsgJyAtICcg KyBwYXJlbnREYXRhLmRhdGFiYXNlLmxhYmVsICsgJyAtICcKLSAgICAgICAgICAgICAgICAgICAg ICAgICsgbnNwX25hbWUgKyAnLicgKyBkLmxhYmVsOwotCi0gICAgICAgIHNlbGYuY3JlYXRlX3Ry YW5zYWN0aW9uKGJhc2VVcmwsIG51bGwsICdmYWxzZScsIHBhcmVudERhdGEuc2VydmVyLnNlcnZl cl90eXBlLCAnJywgZ3JpZF90aXRsZSwgJycpOworICAgICAgICBzaG93RGF0YS5zaG93RGF0YUdy aWQodGhpcywgcGdCcm93c2VyLCBhbGVydGlmeSwgZGF0YSwgaSk7CiAgICAgICB9LAogCiAgICAg ICAvLyBUaGlzIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gc2hvdyBmaWx0ZXJlZCBkYXRhIHdo ZW4gdXNlciBjbGljayBvbiBtZW51IGl0ZW0uCkBAIC0zODIsNjMgKzMzNywxMiBAQCBkZWZpbmUo J3BnYWRtaW4uZGF0YWdyaWQnLCBbCiAgICAgICB9LAogCiAgICAgICBnZXRfcGFuZWxfdGl0bGU6 IGZ1bmN0aW9uKCkgewotICAgICAgICAvLyBHZXQgdGhlIHBhcmVudCBkYXRhIGZyb20gdGhlIHRy ZWUgbm9kZSBoaWVyYXJjaHkuCi0gICAgICAgIHZhciB0cmVlID0gcGdBZG1pbi5Ccm93c2VyLnRy ZWUsCi0gICAgICAgICAgc2VsZWN0ZWRfaXRlbSA9IHRyZWUuc2VsZWN0ZWQoKSwKLSAgICAgICAg ICBpdGVtX2RhdGEgPSB0cmVlLml0ZW1EYXRhKHNlbGVjdGVkX2l0ZW0pOwotCi0gICAgICAgIHZh ciBub2RlID0gcGdCcm93c2VyLk5vZGVzW2l0ZW1fZGF0YS5fdHlwZV0sCi0gICAgICAgICAgcGFy ZW50RGF0YSA9IG5vZGUuZ2V0VHJlZU5vZGVIaWVyYXJjaHkoc2VsZWN0ZWRfaXRlbSk7Ci0KLSAg ICAgICAgLy8gSWYgc2VydmVyLCBkYXRhYmFzZSBpcyB1bmRlZmluZWQgdGhlbiByZXR1cm4gZnJv bSB0aGUgZnVuY3Rpb24uCi0gICAgICAgIGlmIChwYXJlbnREYXRhLnNlcnZlciA9PT0gdW5kZWZp bmVkKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIElmIERhdGFi YXNlIGlzIG5vdCBhdmFpbGFibGUgdGhlbiB1c2UgZGVmYXVsdCBkYgotICAgICAgICB2YXIgZGJf bGFiZWwgPSBwYXJlbnREYXRhLmRhdGFiYXNlID8gcGFyZW50RGF0YS5kYXRhYmFzZS5sYWJlbAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcGFyZW50RGF0YS5z ZXJ2ZXIuZGI7Ci0KLSAgICAgICAgdmFyIGdyaWRfdGl0bGUgPSBkYl9sYWJlbCArICcgb24gJyAr IHBhcmVudERhdGEuc2VydmVyLnVzZXIubmFtZSArICdAJyArCi0gICAgICAgICAgICAgICAgcGFy ZW50RGF0YS5zZXJ2ZXIubGFiZWw7Ci0gICAgICAgIHJldHVybiBncmlkX3RpdGxlOworICAgICAg ICByZXR1cm4gcGFuZWxUaXRsZS5nZXRQYW5lbFRpdGxlKHBnQnJvd3Nlcik7CiAgICAgICB9LAog ICAgICAgLy8gVGhpcyBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHNob3cgcXVlcnkgdG9vbCB3 aGVuIHVzZXIgY2xpY2sgb24gbWVudSBpdGVtLgotICAgICAgc2hvd19xdWVyeV90b29sOiBmdW5j dGlvbih1cmwsIGksIHBhbmVsX3RpdGxlKSB7Ci0gICAgICAgIHZhciBzVVJMID0gdXJsIHx8ICcn LAotICAgICAgICAgIGQgPSBwZ0FkbWluLkJyb3dzZXIudHJlZS5pdGVtRGF0YShpKTsKLQotICAg ICAgICBwYW5lbF90aXRsZSA9IHBhbmVsX3RpdGxlIHx8ICcnOwotICAgICAgICBpZiAoZCA9PT0g dW5kZWZpbmVkKSB7Ci0gICAgICAgICAgYWxlcnRpZnkuYWxlcnQoCi0gICAgICAgICAgICBnZXR0 ZXh0KCdRdWVyeSBUb29sIEVycm9yJyksCi0gICAgICAgICAgICBnZXR0ZXh0KCdObyBvYmplY3Qg c2VsZWN0ZWQuJykKLSAgICAgICAgICApOwotICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot Ci0gICAgICAgIC8vIEdldCB0aGUgcGFyZW50IGRhdGEgZnJvbSB0aGUgdHJlZSBub2RlIGhpZXJh cmNoeS4KLSAgICAgICAgdmFyIG5vZGUgPSBwZ0Jyb3dzZXIuTm9kZXNbZC5fdHlwZV0sCi0gICAg ICAgICAgcGFyZW50RGF0YSA9IG5vZGUuZ2V0VHJlZU5vZGVIaWVyYXJjaHkoaSk7Ci0KLSAgICAg ICAgLy8gSWYgc2VydmVyLCBkYXRhYmFzZSBpcyB1bmRlZmluZWQgdGhlbiByZXR1cm4gZnJvbSB0 aGUgZnVuY3Rpb24uCi0gICAgICAgIGlmIChwYXJlbnREYXRhLnNlcnZlciA9PT0gdW5kZWZpbmVk KSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyIHVybF9wYXJh bXMgPSB7Ci0gICAgICAgICAgICAnc2dpZCc6IHBhcmVudERhdGEuc2VydmVyX2dyb3VwLl9pZCwK LSAgICAgICAgICAgICdzaWQnOiBwYXJlbnREYXRhLnNlcnZlci5faWQsCi0gICAgICAgICAgfSwK LSAgICAgICAgICB1cmxfZW5kcG9pbnQgPSAnZGF0YWdyaWQuaW5pdGlhbGl6ZV9xdWVyeV90b29s JzsKLSAgICAgICAgLy8gSWYgZGF0YWJhc2Ugbm90IHByZXNlbnQgdGhlbiB1c2UgTWFpbnRlbmFu Y2UgZGF0YWJhc2UKLSAgICAgICAgLy8gV2Ugd2lsbCBoYW5kbGUgdGhpcyBhdCBzZXJ2ZXIgc2lk ZQotICAgICAgICBpZiAocGFyZW50RGF0YS5kYXRhYmFzZSkgewotICAgICAgICAgIHVybF9wYXJh bXNbJ2RpZCddID0gcGFyZW50RGF0YS5kYXRhYmFzZS5faWQ7Ci0gICAgICAgICAgdXJsX2VuZHBv aW50ID0gJ2RhdGFncmlkLmluaXRpYWxpemVfcXVlcnlfdG9vbF93aXRoX2RpZCc7Ci0gICAgICAg IH0KLSAgICAgICAgdmFyIGJhc2VVcmwgPSB1cmxfZm9yKHVybF9lbmRwb2ludCwgdXJsX3BhcmFt cyk7Ci0KLSAgICAgICAgdGhpcy5jcmVhdGVfdHJhbnNhY3Rpb24oYmFzZVVybCwgbnVsbCwgJ3Ry dWUnLCBwYXJlbnREYXRhLnNlcnZlci5zZXJ2ZXJfdHlwZSwgc1VSTCwgcGFuZWxfdGl0bGUsICcn LCBmYWxzZSk7CisgICAgICBzaG93X3F1ZXJ5X3Rvb2w6IGZ1bmN0aW9uKHVybCwgYWNpVHJlZUlk ZW50aWZpZXIsIHBhbmVsVGl0bGUpIHsKKyAgICAgICAgc2hvd1F1ZXJ5VG9vbC5zaG93UXVlcnlU b29sKHRoaXMsIHBnQnJvd3NlciwgYWxlcnRpZnksIHVybCwKKyAgICAgICAgICBhY2lUcmVlSWRl bnRpZmllciwgcGFuZWxUaXRsZSk7CiAgICAgICB9LAogICAgICAgY3JlYXRlX3RyYW5zYWN0aW9u OiBmdW5jdGlvbihiYXNlVXJsLCB0YXJnZXQsIGlzX3F1ZXJ5X3Rvb2wsIHNlcnZlcl90eXBlLCBz VVJMLCBwYW5lbF90aXRsZSwgc3FsX2ZpbHRlciwgcmVjcmVhdGUpIHsKICAgICAgICAgdmFyIHNl bGYgPSB0aGlzOwpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9iYWNrdXAv YmFja3VwX2RpYWxvZ19zcGVjLmpzIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9iYWNrdXAv YmFja3VwX2RpYWxvZ19zcGVjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw Li5lMjcyZjA5NAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQv YmFja3VwL2JhY2t1cF9kaWFsb2dfc3BlYy5qcwpAQCAtMCwwICsxLDY1MSBAQAorLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8K Ky8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIw MTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJl IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworaW1w b3J0IHtCYWNrdXBEaWFsb2d9IGZyb20gJy4uLy4uLy4uL3BnYWRtaW4vc3RhdGljL2pzL2JhY2t1 cC9iYWNrdXBfZGlhbG9nJzsKK2ltcG9ydCB7VHJlZUZha2V9IGZyb20gJy4uL3RyZWUvdHJlZV9m YWtlJzsKK2ltcG9ydCBNb2NrQWRhcHRlciBmcm9tICdheGlvcy1tb2NrLWFkYXB0ZXInOworaW1w b3J0IGF4aW9zIGZyb20gJ2F4aW9zL2luZGV4JzsKK2ltcG9ydCB7RmFrZU1vZGVsfSBmcm9tICcu Li9mYWtlX21vZGVsJzsKK2ltcG9ydCB7RGlhbG9nV3JhcHBlcn0gZnJvbSAiLi4vLi4vLi4vcGdh ZG1pbi9zdGF0aWMvanMvYmFja3VwL2JhY2t1cF9kaWFsb2dfd3JhcHBlciI7CisKK2NvbnN0IGNv bnRleHQgPSBkZXNjcmliZTsKKworZGVzY3JpYmUoJ09iamVjdEJhY2t1cERpYWxvZycsICgpID0+ IHsKKyAgbGV0IGJhY2t1cERpYWxvZzsKKyAgbGV0IGJhY2t1cE5vZGU7CisgIGxldCBwZ0Jyb3dz ZXI7CisgIGxldCBqcXVlcnlTcHk7CisgIGxldCBhbGVydGlmeVNweTsKKyAgbGV0IGJhY2t1cE1v ZGVsU3B5OworICBsZXQgYmFja2Zvcm07CisKKworICBsZXQgcm9vdE5vZGU7CisgIGxldCBzZXJ2 ZXJUcmVlTm9kZTsKKyAgbGV0IGRhdGFiYXNlVHJlZU5vZGU7CisgIGxldCBwcGFzU2VydmVyVHJl ZU5vZGU7CisgIGxldCBub0RhdGFOb2RlOworCisgIGJlZm9yZUVhY2goKCkgPT4geworICAgIHBn QnJvd3NlciA9IHsKKyAgICAgIHRyZWVNZW51OiBuZXcgVHJlZUZha2UoKSwKKyAgICAgIE5vZGVz OiB7CisgICAgICAgIHNlcnZlcjogeworICAgICAgICAgIGhhc0lkOiB0cnVlLAorICAgICAgICAg IGxhYmVsOiAnc2VydmVyJywKKyAgICAgICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogamFzbWlu ZS5jcmVhdGVTcHkoJ3NlcnZlci5nZXRUcmVlTm9kZUhpZXJhcmNoeScpLAorICAgICAgICB9LAor ICAgICAgICBkYXRhYmFzZTogeworICAgICAgICAgIGhhc0lkOiB0cnVlLAorICAgICAgICAgIGxh YmVsOiAnZGF0YWJhc2UnLAorICAgICAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBqYXNtaW5l LmNyZWF0ZVNweSgnZGIuZ2V0VHJlZU5vZGVIaWVyYXJjaHknKSwKKyAgICAgICAgfSwKKyAgICAg ICAgc2NoZW1hOiB7CisgICAgICAgICAgaGFzSWQ6IHRydWUsCisgICAgICAgICAgbGFiZWw6ICdz Y2hlbWEnLAorICAgICAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBqYXNtaW5lLmNyZWF0ZVNw eSgnZGIuZ2V0VHJlZU5vZGVIaWVyYXJjaHknKSwKKyAgICAgICAgfSwKKyAgICAgIH0KKyAgICB9 OworICAgIHBnQnJvd3Nlci5Ob2Rlcy5zZXJ2ZXIuaGFzSWQgPSB0cnVlOworICAgIHBnQnJvd3Nl ci5Ob2Rlcy5kYXRhYmFzZS5oYXNJZCA9IHRydWU7CisgICAganF1ZXJ5U3B5ID0gamFzbWluZS5j cmVhdGVTcHkoJ2pxdWVyeVNweScpOworICAgIGJhY2t1cE1vZGVsU3B5ID0gamFzbWluZS5jcmVh dGVTcHkoJ2JhY2t1cE1vZGVsU3B5Jyk7CisgICAgYmFja3VwTm9kZSA9IHt9OworICAgIGJhY2tm b3JtID0gamFzbWluZS5jcmVhdGVTcHlPYmooJ2JhY2tmb3JtJywgWydnZW5lcmF0ZVZpZXdTY2hl bWEnLCAnRGlhbG9nJ10pOworCisgICAgcm9vdE5vZGUgPSBwZ0Jyb3dzZXIudHJlZU1lbnUuYWRk TmV3Tm9kZSgnbGV2ZWwxJywge30sIFtdKTsKKyAgICBzZXJ2ZXJUcmVlTm9kZSA9IHBnQnJvd3Nl ci50cmVlTWVudS5hZGROZXdOb2RlKCdsZXZlbDEuMScsIHsKKyAgICAgIF90eXBlOiAnc2VydmVy JywKKyAgICAgIF9pZDogMTAsCisgICAgfSwgWydsZXZlbDEnXSk7CisgICAgZGF0YWJhc2VUcmVl Tm9kZSA9IHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKAorICAgICAgJ2xldmVsMS4xLjEn LCB7CisgICAgICAgIF90eXBlOiAnZGF0YWJhc2UnLAorICAgICAgICBfaWQ6IDExLAorICAgICAg ICBsYWJlbDogJ3NvbWVfZGF0YWJhc2UnLAorICAgICAgICBfbGFiZWw6ICdzb21lX2RhdGFiYXNl X2xhYmVsJywKKyAgICAgIH0sIFsnbGV2ZWwxJywgJ2xldmVsMS4xJ10pOworICAgIHBwYXNTZXJ2 ZXJUcmVlTm9kZSA9IHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdsZXZlbDEuMicsIHsK KyAgICAgIF90eXBlOiAnc2VydmVyJywKKyAgICAgIHNlcnZlcl90eXBlOiAncHBhcycsCisgICAg fSwgWydsZXZlbDEnXSk7CisgICAgcGdCcm93c2VyLnRyZWVNZW51LmFkZE5ld05vZGUoJ2xldmVs MycsIHt9LCBbJ2xldmVsMScsICdsZXZlbDEuMiddKTsKKyAgICBub0RhdGFOb2RlID0gcGdCcm93 c2VyLnRyZWVNZW51LmFkZE5ld05vZGUoCisgICAgICAnbGV2ZWwzLjEnLCB1bmRlZmluZWQsIFsn bGV2ZWwxJywgJ2xldmVsMS4yJywgJ2xldmVsMyddKTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJyNk cmF3JywgKCkgPT4geworICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgYWxlcnRpZnlTcHkg PSBqYXNtaW5lLmNyZWF0ZVNweU9iaignYWxlcnRpZnknLCBbJ2FsZXJ0JywgJ2RpYWxvZyddKTsK KyAgICAgIGFsZXJ0aWZ5U3B5WydiYWNrdXBfb2JqZWN0cyddID0gamFzbWluZS5jcmVhdGVTcHko J2JhY2t1cF9vYmplY3RzJyk7CisgICAgICBiYWNrdXBEaWFsb2cgPSBuZXcgQmFja3VwRGlhbG9n KAorICAgICAgICBwZ0Jyb3dzZXIsCisgICAgICAgIGpxdWVyeVNweSwKKyAgICAgICAgYWxlcnRp ZnlTcHksCisgICAgICAgIGJhY2t1cE1vZGVsU3B5CisgICAgICApOworCisgICAgICBwZ0Jyb3dz ZXIuZ2V0X3ByZWZlcmVuY2UgPSBqYXNtaW5lLmNyZWF0ZVNweSgnZ2V0X3ByZWZlcmVuY2VzJyk7 CisgICAgfSk7CisKKyAgICBjb250ZXh0KCd0aGVyZSBhcmUgbm8gYW5jZXN0b3JzIG9mIHRoZSB0 eXBlIHNlcnZlcicsICgpID0+IHsKKyAgICAgIGl0KCdkb2VzIG5vdCBjcmVhdGUgYSBkaWFsb2cn LCAoKSA9PiB7CisgICAgICAgIHBnQnJvd3Nlci50cmVlTWVudS5zZXRTZWxlY3RlZE5vZGUoW3Jv b3ROb2RlXSk7CisgICAgICAgIGJhY2t1cERpYWxvZy5kcmF3KG51bGwsIG51bGwsIG51bGwpOwor ICAgICAgICBleHBlY3QoYWxlcnRpZnlTcHlbJ2JhY2t1cF9vYmplY3RzJ10pLm5vdC50b0hhdmVC ZWVuQ2FsbGVkKCk7CisgICAgICB9KTsKKworICAgICAgaXQoJ2Rpc3BsYXkgYW4gYWxlcnQgd2l0 aCBhIEJhY2t1cCBFcnJvcicsICgpID0+IHsKKyAgICAgICAgYmFja3VwRGlhbG9nLmRyYXcobnVs bCwgW3Jvb3ROb2RlXSwgbnVsbCk7CisgICAgICAgIGV4cGVjdChhbGVydGlmeVNweS5hbGVydCku dG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAgICAgJ0JhY2t1cCBFcnJvcicsCisgICAgICAg ICAgJ1BsZWFzZSBzZWxlY3Qgc2VydmVyIG9yIGNoaWxkIG5vZGUgZnJvbSB0aGUgYnJvd3NlciB0 cmVlLicKKyAgICAgICAgKTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgY29udGV4dCgndGhl cmUgaXMgYW4gYW5jZXN0b3Igb2YgdGhlIHR5cGUgc2VydmVyJywgKCkgPT4geworICAgICAgY29u dGV4dCgnbm8gcHJlZmVyZW5jZSBjYW4gYmUgZm91bmQnLCAoKSA9PiB7CisgICAgICAgIGJlZm9y ZUVhY2goKCkgPT4geworICAgICAgICAgIHBnQnJvd3Nlci5nZXRfcHJlZmVyZW5jZS5hbmQucmV0 dXJuVmFsdWUodW5kZWZpbmVkKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29udGV4dCgnc2Vy dmVyIGlzIGEgcHBhcyBzZXJ2ZXInLCAoKSA9PiB7CisgICAgICAgICAgaXQoJ2Rpc3BsYXkgYW4g YWxlcnQgd2l0aCAiQmFja3VwIEVycm9yIicsICgpID0+IHsKKyAgICAgICAgICAgIGJhY2t1cERp YWxvZy5kcmF3KG51bGwsIFtzZXJ2ZXJUcmVlTm9kZV0sIG51bGwpOworICAgICAgICAgICAgZXhw ZWN0KGFsZXJ0aWZ5U3B5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAg ICAgJ0JhY2t1cCBFcnJvcicsCisgICAgICAgICAgICAgICdGYWlsZWQgdG8gbG9hZCBwcmVmZXJl bmNlIHBnX2Jpbl9kaXIgb2YgbW9kdWxlIHBhdGhzJworICAgICAgICAgICAgKTsKKyAgICAgICAg ICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29udGV4dCgnc2VydmVyIGlzIG5vdCBhIHBw YXMgc2VydmVyJywgKCkgPT4geworICAgICAgICAgIGl0KCdkaXNwbGF5IGFuIGFsZXJ0IHdpdGgg IkJhY2t1cCBFcnJvciInLCAoKSA9PiB7CisgICAgICAgICAgICBiYWNrdXBEaWFsb2cuZHJhdyhu dWxsLCBbcHBhc1NlcnZlclRyZWVOb2RlXSwgbnVsbCk7CisgICAgICAgICAgICBleHBlY3QoYWxl cnRpZnlTcHkuYWxlcnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAgICAgICAnQmFj a3VwIEVycm9yJywKKyAgICAgICAgICAgICAgJ0ZhaWxlZCB0byBsb2FkIHByZWZlcmVuY2UgcHBh c19iaW5fZGlyIG9mIG1vZHVsZSBwYXRocycKKyAgICAgICAgICAgICk7CisgICAgICAgICAgfSk7 CisgICAgICAgIH0pOworICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3ByZWZlcmVuY2UgY2Fu IGJlIGZvdW5kJywgKCkgPT4geworICAgICAgICBjb250ZXh0KCdiaW5hcnkgZm9sZGVyIGlzIG5v dCBjb25maWd1cmVkJywgKCkgPT4geworICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAg ICAgICAgICAgcGdCcm93c2VyLmdldF9wcmVmZXJlbmNlLmFuZC5yZXR1cm5WYWx1ZSh7fSk7Cisg ICAgICAgICAgfSk7CisKKyAgICAgICAgICBjb250ZXh0KCdzZXJ2ZXIgaXMgYSBwcGFzIHNlcnZl cicsICgpID0+IHsKKyAgICAgICAgICAgIGl0KCdkaXNwbGF5IGFuIGFsZXJ0IHdpdGggIkNvbmZp Z3VyYXRpb24gcmVxdWlyZWQiJywgKCkgPT4geworICAgICAgICAgICAgICBiYWNrdXBEaWFsb2cu ZHJhdyhudWxsLCBbc2VydmVyVHJlZU5vZGVdLCBudWxsKTsKKyAgICAgICAgICAgICAgZXhwZWN0 KGFsZXJ0aWZ5U3B5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAgICAg ICAnQ29uZmlndXJhdGlvbiByZXF1aXJlZCcsCisgICAgICAgICAgICAgICAgJ1BsZWFzZSBjb25m aWd1cmUgdGhlIFBvc3RncmVTUUwgQmluYXJ5IFBhdGggaW4gdGhlIFByZWZlcmVuY2VzIGRpYWxv Zy4nCisgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9KTsKKwor ICAgICAgICAgIGNvbnRleHQoJ3NlcnZlciBpcyBub3QgYSBwcGFzIHNlcnZlcicsICgpID0+IHsK KyAgICAgICAgICAgIGl0KCdkaXNwbGF5IGFuIGFsZXJ0IHdpdGggIkNvbmZpZ3VyYXRpb24gcmVx dWlyZWQiJywgKCkgPT4geworICAgICAgICAgICAgICBiYWNrdXBEaWFsb2cuZHJhdyhudWxsLCBb cHBhc1NlcnZlclRyZWVOb2RlXSwgbnVsbCk7CisgICAgICAgICAgICAgIGV4cGVjdChhbGVydGlm eVNweS5hbGVydCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAgICAgICAgICAgJ0NvbmZp Z3VyYXRpb24gcmVxdWlyZWQnLAorICAgICAgICAgICAgICAgICdQbGVhc2UgY29uZmlndXJlIHRo ZSBFREIgQWR2YW5jZWQgU2VydmVyIEJpbmFyeSBQYXRoIGluIHRoZSBQcmVmZXJlbmNlcyBkaWFs b2cuJworICAgICAgICAgICAgICApOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfSk7Cisg ICAgICAgIH0pOworCisgICAgICAgIGNvbnRleHQoJ2JpbmFyeSBmb2xkZXIgaXMgY29uZmlndXJl ZCcsICgpID0+IHsKKyAgICAgICAgICBsZXQgYmFja3VwRGlhbG9nUmVzaXplVG9TcHk7CisgICAg ICAgICAgbGV0IHNlcnZlclJlc2l6ZVRvU3B5OworICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4g eworICAgICAgICAgICAgYmFja3VwRGlhbG9nUmVzaXplVG9TcHkgPSBqYXNtaW5lLmNyZWF0ZVNw eU9iaignYmFja3VwRGlhbG9nUmVzaXplVG9TcHknLCBbJ3Jlc2l6ZVRvJ10pOworICAgICAgICAg ICAgYWxlcnRpZnlTcHlbJ2JhY2t1cF9vYmplY3RzJ10uYW5kCisgICAgICAgICAgICAgIC5yZXR1 cm5WYWx1ZShiYWNrdXBEaWFsb2dSZXNpemVUb1NweSk7CisgICAgICAgICAgICBwZ0Jyb3dzZXIu Z2V0X3ByZWZlcmVuY2UuYW5kLnJldHVyblZhbHVlKHt2YWx1ZTogJy9zb21lL3BhdGgnfSk7Cisg ICAgICAgICAgfSk7CisKKyAgICAgICAgICBpdCgnZGlzcGxheXMgdGhlIGRpYWxvZycsICgpID0+ IHsKKyAgICAgICAgICAgIGJhY2t1cERpYWxvZy5kcmF3KG51bGwsIFtzZXJ2ZXJUcmVlTm9kZV0s IG51bGwpOworICAgICAgICAgICAgZXhwZWN0KGFsZXJ0aWZ5U3B5WydiYWNrdXBfb2JqZWN0cydd KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh0cnVlKTsKKyAgICAgICAgICAgIGV4cGVjdChiYWNrdXBE aWFsb2dSZXNpemVUb1NweS5yZXNpemVUbykudG9IYXZlQmVlbkNhbGxlZFdpdGgoJzYwJScsICc1 MCUnKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKyAg fSk7CisKKyAgZGVzY3JpYmUoJyNkaWFsb2dGYWN0b3J5JywgKCkgPT4geworICAgIGRlc2NyaWJl KCcjcHJlcGFyZScsICgpID0+IHsKKyAgICAgIGxldCBiYWNrdXBKUXVlcnlDb250YWluZXI7Cisg ICAgICBsZXQgdmlld1NjaGVtYTsKKyAgICAgIGxldCBnZW5lcmF0ZWRCYWNrdXBNb2RlbDsKKyAg ICAgIGxldCBiYWNrdXBOb2RlQ2hpbGROb2RlOworICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7Cisg ICAgICAgIGJhY2t1cEpRdWVyeUNvbnRhaW5lciA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCdiYWNr dXBKUXVlcnlDb250YWluZXInLCBbJ2dldCddKTsKKyAgICAgICAgYmFja3VwSlF1ZXJ5Q29udGFp bmVyLmdldC5hbmQucmV0dXJuVmFsdWUoYmFja3VwSlF1ZXJ5Q29udGFpbmVyKTsKKyAgICAgICAg dmlld1NjaGVtYSA9IHt9OworICAgICAgICBnZW5lcmF0ZWRCYWNrdXBNb2RlbCA9IHt9OworICAg ICAgICBiYWNrdXBOb2RlLl9faW50ZXJuYWwgPSB7CisgICAgICAgICAgYnV0dG9uczogWworICAg ICAgICAgICAge30sIHt9LAorICAgICAgICAgICAgeworICAgICAgICAgICAgICBlbGVtZW50OiB7 CisgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLAorICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgICAgXQorICAgICAgICB9OworICAgICAgICBiYWNrdXBOb2RlLmVs ZW1lbnRzID0geworICAgICAgICAgIGJvZHk6IHsKKyAgICAgICAgICAgIGNoaWxkTm9kZXM6IFsK KyAgICAgICAgICAgICAge30KKyAgICAgICAgICAgIF0KKyAgICAgICAgICB9LAorICAgICAgICAg IGNvbnRlbnQ6IGphc21pbmUuY3JlYXRlU3B5T2JqKCdjb250ZW50JywgWydhcHBlbmRDaGlsZCdd KSwKKyAgICAgICAgfTsKKworICAgICAgICBiYWNrZm9ybS5nZW5lcmF0ZVZpZXdTY2hlbWEuYW5k LnJldHVyblZhbHVlKHZpZXdTY2hlbWEpOworICAgICAgICBiYWNrdXBNb2RlbFNweS5hbmQucmV0 dXJuVmFsdWUoZ2VuZXJhdGVkQmFja3VwTW9kZWwpOworCisgICAgICAgIGJhY2t1cERpYWxvZyA9 IG5ldyBCYWNrdXBEaWFsb2coCisgICAgICAgICAgcGdCcm93c2VyLAorICAgICAgICAgIGpxdWVy eVNweSwKKyAgICAgICAgICBhbGVydGlmeVNweSwKKyAgICAgICAgICBiYWNrdXBNb2RlbFNweSwK KyAgICAgICAgICBiYWNrZm9ybQorICAgICAgICApOworCisgICAgICAgIGJhY2t1cE5vZGVDaGls ZE5vZGUgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignc29tZXRoaW5nJywgWydhZGRDbGFzcyddKTsK KworICAgICAgICBqcXVlcnlTcHkuYW5kLmNhbGxGYWtlKChzZWxlY3RvcikgPT4geworICAgICAg ICAgIGlmIChzZWxlY3RvciA9PT0gJzxkaXYgY2xhc3M9XCdiYWNrdXBfZGlhbG9nXCc+PC9kaXY+ JykgeworICAgICAgICAgICAgcmV0dXJuIGJhY2t1cEpRdWVyeUNvbnRhaW5lcjsKKyAgICAgICAg ICB9IGVsc2UgaWYgKHNlbGVjdG9yID09PSBiYWNrdXBOb2RlLmVsZW1lbnRzLmJvZHkuY2hpbGRO b2Rlc1swXSkgeworICAgICAgICAgICAgcmV0dXJuIGJhY2t1cE5vZGVDaGlsZE5vZGU7CisgICAg ICAgICAgfQorICAgICAgICB9KQorICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3NlbGVjdGVk IHRyZWUgbm9kZSBoYXMgbm8gZGF0YScsICgpID0+IHsKKyAgICAgICAgYmVmb3JlRWFjaCgoKSA9 PiB7CisgICAgICAgICAgcGdCcm93c2VyLnRyZWVNZW51LnNldFNlbGVjdGVkTm9kZShbbm9EYXRh Tm9kZV0pOworICAgICAgICAgIGNvbnN0IGRpYWxvZyA9IGJhY2t1cERpYWxvZy5kaWFsb2dGYWN0 b3J5KG51bGwsICdiYWNrdXBfb2JqZWN0cycpOworICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGlh bG9nLCBiYWNrdXBOb2RlKS5wcmVwYXJlKCk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdk b2VzIG5vdCBjcmVhdGUgYSBiYWNrZm9ybSBkaWFsb2cnLCAoKSA9PiB7CisgICAgICAgICAgZXhw ZWN0KGJhY2tmb3JtLkRpYWxvZykubm90LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCk7CisgICAgICAg IH0pOworCisgICAgICAgIGl0KCdkaXNhYmxlcyB0aGUgYnV0dG9uIHN1Ym1pdCBidXR0b24gdW50 aWwgYSBmaWxlbmFtZSBpcyBzZWxlY3RlZCcsICgpID0+IHsKKyAgICAgICAgICBleHBlY3QoYmFj a3VwTm9kZS5fX2ludGVybmFsLmJ1dHRvbnNbMl0uZWxlbWVudC5kaXNhYmxlZCkudG9CZSh0cnVl KTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKworICAgICAgY29udGV4dCgnbm8gdHJlZSBlbGVt ZW50IGlzIHNlbGVjdGVkJywgKCkgPT4geworICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAg ICAgICAgICBjb25zdCBkaWFsb2cgPSBiYWNrdXBEaWFsb2cuZGlhbG9nRmFjdG9yeShudWxsLCAn YmFja3VwX29iamVjdHMnKTsKKyAgICAgICAgICBPYmplY3QuYXNzaWduKGRpYWxvZywgYmFja3Vw Tm9kZSkucHJlcGFyZSgpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnZG9lcyBub3QgY3Jl YXRlIGEgYmFja2Zvcm0gZGlhbG9nJywgKCkgPT4geworICAgICAgICAgIGV4cGVjdChiYWNrZm9y bS5EaWFsb2cpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aCgpOworICAgICAgICB9KTsKKworICAg ICAgICBpdCgnZGlzYWJsZXMgdGhlIGJ1dHRvbiBzdWJtaXQgYnV0dG9uIHVudGlsIGEgZmlsZW5h bWUgaXMgc2VsZWN0ZWQnLCAoKSA9PiB7CisgICAgICAgICAgZXhwZWN0KGJhY2t1cE5vZGUuX19p bnRlcm5hbC5idXR0b25zWzJdLmVsZW1lbnQuZGlzYWJsZWQpLnRvQmUodHJ1ZSk7CisgICAgICAg IH0pOworICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3RyZWUgZWxlbWVudCBpcyBzZWxlY3Rl ZCcsICgpID0+IHsKKyAgICAgICAgbGV0IHRyZWVIaWVyYXJjaHlJbmZvcm1hdGlvbjsKKyAgICAg ICAgbGV0IGRpYWxvZ1NweTsKKyAgICAgICAgbGV0IGRpYWxvZzsKKyAgICAgICAgYmVmb3JlRWFj aCgoKSA9PiB7CisgICAgICAgICAgdHJlZUhpZXJhcmNoeUluZm9ybWF0aW9uID0geworICAgICAg ICAgICAgZGF0YWJhc2U6IHsKKyAgICAgICAgICAgICAgX3R5cGU6ICdkYXRhYmFzZScsCisgICAg ICAgICAgICAgIF9pZDogMTEsCisgICAgICAgICAgICAgIGxhYmVsOiAnc29tZV9kYXRhYmFzZScs CisgICAgICAgICAgICAgIF9sYWJlbDogJ3NvbWVfZGF0YWJhc2VfbGFiZWwnLAorICAgICAgICAg ICAgICBwcmlvcml0eTogMCwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzZXJ2ZXI6IHsK KyAgICAgICAgICAgICAgX3R5cGU6ICdzZXJ2ZXInLAorICAgICAgICAgICAgICBfaWQ6IDEwLAor ICAgICAgICAgICAgICBwcmlvcml0eTogLTEsCisgICAgICAgICAgICB9CisgICAgICAgICAgfTsK KyAgICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2V0U2VsZWN0ZWROb2RlKFt7aWQ6ICdsZXZl bDEuMS4xJ31dKTsKKyAgICAgICAgICBwZ0Jyb3dzZXIuTm9kZXNbJ2RhdGFiYXNlJ10uZ2V0VHJl ZU5vZGVIaWVyYXJjaHkuYW5kCisgICAgICAgICAgICAucmV0dXJuVmFsdWUodHJlZUhpZXJhcmNo eUluZm9ybWF0aW9uKTsKKyAgICAgICAgICBkaWFsb2dTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweU9i aignbmV3VmlldycsIFsncmVuZGVyJ10pOworICAgICAgICAgIGRpYWxvZ1NweS4kZWwgPSBqYXNt aW5lLmNyZWF0ZVNweU9iaignJGVsJywgWydmaW5kJ10pOworICAgICAgICAgIGRpYWxvZ1NweS5t b2RlbCA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCdtb2RlbCcsIFsnb24nXSkKKyAgICAgICAgICBk aWFsb2dTcHkuJGVsLmZpbmQuYW5kLnJldHVyblZhbHVlKFtdKTsKKworICAgICAgICAgIGJhY2tm b3JtLkRpYWxvZy5hbmQucmV0dXJuVmFsdWUoZGlhbG9nU3B5KTsKKworICAgICAgICAgIGRpYWxv ZyA9IGJhY2t1cERpYWxvZy5kaWFsb2dGYWN0b3J5KG51bGwsICdiYWNrdXBfb2JqZWN0cycpOwor ICAgICAgICAgIGRpYWxvZy5zZXQgPSBqYXNtaW5lLmNyZWF0ZVNweSgnZGlhbG9nLnNldCcpOwor ICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGlhbG9nLCBiYWNrdXBOb2RlKS5wcmVwYXJlKCk7Cisg ICAgICAgIH0pOworCisgICAgICAgIGl0KCdjcmVhdGVzIGEgYmFja2Zvcm0gZGlhbG9nIGFuZCBk aXNwbGF5cyBpdCcsICgpID0+IHsKKyAgICAgICAgICBleHBlY3QoYmFja2Zvcm0uRGlhbG9nKS50 b0hhdmVCZWVuQ2FsbGVkV2l0aCh7CisgICAgICAgICAgICBlbDogYmFja3VwSlF1ZXJ5Q29udGFp bmVyLAorICAgICAgICAgICAgbW9kZWw6IGdlbmVyYXRlZEJhY2t1cE1vZGVsLAorICAgICAgICAg ICAgc2NoZW1hOiB2aWV3U2NoZW1hLAorICAgICAgICAgIH0pOworCisgICAgICAgICAgZXhwZWN0 KGRpYWxvZ1NweS5yZW5kZXIpLnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICAgICAgfSk7CisKKyAg ICAgICAgaXQoJ2FkZCBhbGVydGlmeSBjbGFzc2VzIHRvIGJhY2t1cCBub2RlIGNoaWxkbm9kZScs ICgpID0+IHsKKyAgICAgICAgICBleHBlY3QoYmFja3VwTm9kZUNoaWxkTm9kZS5hZGRDbGFzcykK KyAgICAgICAgICAgIC50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnYWxlcnRpZnlfdG9vbHNfZGlhbG9n X3Byb3BlcnRpZXMgb2JqX3Byb3BlcnRpZXMnKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQo J2Rpc2FibGVzIHRoZSBidXR0b24gc3VibWl0IGJ1dHRvbiB1bnRpbCBhIGZpbGVuYW1lIGlzIHNl bGVjdGVkJywgKCkgPT4geworICAgICAgICAgIGV4cGVjdChiYWNrdXBOb2RlLl9faW50ZXJuYWwu YnV0dG9uc1syXS5lbGVtZW50LmRpc2FibGVkKS50b0JlKHRydWUpOworICAgICAgICB9KTsKKwor ICAgICAgICBpdCgnZ2VuZXJhdGVzIGEgbmV3IGJhY2t1cCBtb2RlbCcsICgpID0+IHsKKyAgICAg ICAgICBleHBlY3QoYmFja3VwTW9kZWxTcHkpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAg ICAgICAge30sCisgICAgICAgICAgICB7bm9kZV9pbmZvOiB0cmVlSGllcmFyY2h5SW5mb3JtYXRp b259CisgICAgICAgICAgKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ2FkZCB0aGUgbmV3 IGRpYWxvZyB0byB0aGUgYmFja3VwIG5vZGUgSFRNTCcsICgpID0+IHsKKyAgICAgICAgICBleHBl Y3QoYmFja3VwTm9kZS5lbGVtZW50cy5jb250ZW50LmFwcGVuZENoaWxkKS50b0hhdmVCZWVuQ2Fs bGVkV2l0aChiYWNrdXBKUXVlcnlDb250YWluZXIpOworICAgICAgICB9KTsKKworICAgICAgICBp dCgnc2V0cyB0aGUgdGl0bGUgdG8gIkJhY2t1cCAoZGF0YWJhc2U6IHNvbWVfZGF0YWJhc2UpIics ICgpID0+IHsKKyAgICAgICAgICBleHBlY3QoZGlhbG9nLnNldCkudG9IYXZlQmVlbkNhbGxlZFdp dGgoJ3RpdGxlJywgJ0JhY2t1cCAoZGF0YWJhc2U6IHNvbWVfZGF0YWJhc2UpJyk7CisgICAgICAg IH0pOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICBkZXNjcmliZSgnI29uQnV0dG9uQ2xpY2tl ZCcsICgpID0+IHsKKyAgICAgIGxldCBiYWNrdXBKUXVlcnlDb250YWluZXI7CisgICAgICBsZXQg YmFja3VwTm9kZUNoaWxkTm9kZTsKKyAgICAgIGxldCBkaWFsb2c7CisgICAgICBsZXQgbmV0d29y a01vY2s7CisKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICBuZXR3b3JrTW9jayA9 IG5ldyBNb2NrQWRhcHRlcihheGlvcyk7CisgICAgICAgIGJhY2t1cEpRdWVyeUNvbnRhaW5lciA9 IGphc21pbmUuY3JlYXRlU3B5T2JqKCdiYWNrdXBKUXVlcnlDb250YWluZXInLCBbJ2dldCddKTsK KyAgICAgICAgYmFja3VwSlF1ZXJ5Q29udGFpbmVyLmdldC5hbmQucmV0dXJuVmFsdWUoYmFja3Vw SlF1ZXJ5Q29udGFpbmVyKTsKKyAgICAgICAgcGdCcm93c2VyLnNob3dIZWxwID0gamFzbWluZS5j cmVhdGVTcHkoJ3Nob3dIZWxwJyk7CisgICAgICAgIGFsZXJ0aWZ5U3B5ID0gamFzbWluZS5jcmVh dGVTcHlPYmooJ2FsZXJ0aWZ5JywgWydzdWNjZXNzJywgJ2FsZXJ0J10pOworCisgICAgICAgIGJh Y2t1cERpYWxvZyA9IG5ldyBCYWNrdXBEaWFsb2coCisgICAgICAgICAgcGdCcm93c2VyLAorICAg ICAgICAgIGpxdWVyeVNweSwKKyAgICAgICAgICBhbGVydGlmeVNweSwKKyAgICAgICAgICBiYWNr dXBNb2RlbFNweSwKKyAgICAgICAgICBiYWNrZm9ybQorICAgICAgICApOworCisgICAgICAgIGJh Y2t1cE5vZGVDaGlsZE5vZGUgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignc29tZXRoaW5nJywgWydh ZGRDbGFzcyddKTsKKworICAgICAgICBkaWFsb2cgPSBPYmplY3QuYXNzaWduKAorICAgICAgICAg IGJhY2t1cERpYWxvZy5kaWFsb2dGYWN0b3J5KG51bGwsICdiYWNrdXBfb2JqZWN0cycpLAorICAg ICAgICAgIGJhY2t1cE5vZGUKKyAgICAgICAgKTsKKyAgICAgIH0pOworCisgICAgICBhZnRlckVh Y2goKCkgPT4geworICAgICAgICBuZXR3b3JrTW9jay5yZXN0b3JlKCk7CisgICAgICB9KTsKKwor ICAgICAgY29udGV4dCgnZGlhbG9nIGhlbHAgYnV0dG9uIHdhcyBwcmVzc2VkJywgKCkgPT4gewor ICAgICAgICBsZXQgbmV0d29ya0NhbGxlZDsKKyAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7Cisg ICAgICAgICAgcGdCcm93c2VyLnRyZWVNZW51LnNldFNlbGVjdGVkTm9kZShbe2lkOiAnbGV2ZWwx LjEuMSd9XSk7CisgICAgICAgICAgbmV0d29ya0NhbGxlZCA9IGZhbHNlOworICAgICAgICAgIG5l dHdvcmtNb2NrLm9uQW55KC8uKy8pLnJlcGx5KCgpID0+IHsKKyAgICAgICAgICAgIG5ldHdvcmtD YWxsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIFsyMDAsIHt9XTsKKyAgICAgICAgICB9 KTsKKworICAgICAgICAgIGNvbnN0IGV2ZW50ID0geworICAgICAgICAgICAgYnV0dG9uOiB7Cisg ICAgICAgICAgICAgIGVsZW1lbnQ6IHsKKyAgICAgICAgICAgICAgICBuYW1lOiAnZGlhbG9nX2hl bHAnLAorICAgICAgICAgICAgICAgIGdldEF0dHJpYnV0ZTogKGF0dHJpYnV0ZU5hbWUpID0+IHsK KyAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09PSAndXJsJykgeworICAgICAg ICAgICAgICAgICAgICByZXR1cm4gJ2h0dHA6Ly9zb21ldXJsJzsKKyAgICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PT0gJ2xhYmVsJykgeworICAgICAgICAgICAgICAg ICAgICByZXR1cm4gJ3NvbWUgbGFiZWwnOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH07Cisg ICAgICAgICAgZGlhbG9nLmNhbGxiYWNrKGV2ZW50KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg aXQoJ2Rpc3BsYXlzIGhlbHAgZm9yIGRpYWxvZycsICgpID0+IHsKKyAgICAgICAgICBleHBlY3Qo cGdCcm93c2VyLnNob3dIZWxwKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAgICdk aWFsb2dfaGVscCcsCisgICAgICAgICAgICAnaHR0cDovL3NvbWV1cmwnLAorICAgICAgICAgICAg cGdCcm93c2VyLk5vZGVzWydkYXRhYmFzZSddLAorICAgICAgICAgICAgZGF0YWJhc2VUcmVlTm9k ZSwKKyAgICAgICAgICAgICdzb21lIGxhYmVsJworICAgICAgICAgICkKKyAgICAgICAgfSk7CisK KyAgICAgICAgaXQoJ2RvZXMgbm90IHN0YXJ0IHRoZSBiYWNrdXAnLCAoKSA9PiB7CisgICAgICAg ICAgZXhwZWN0KG5ldHdvcmtDYWxsZWQpLnRvQmUoZmFsc2UpOworICAgICAgICB9KTsKKyAgICAg IH0pOworCisgICAgICBjb250ZXh0KCdvYmplY3QgaGVscCBidXR0b24gd2FzIHByZXNzZWQnLCAo KSA9PiB7CisgICAgICAgIGxldCBuZXR3b3JrQ2FsbGVkOworICAgICAgICBiZWZvcmVFYWNoKCgp ID0+IHsKKyAgICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2V0U2VsZWN0ZWROb2RlKFt7aWQ6 ICdsZXZlbDEuMS4xJ31dKTsKKyAgICAgICAgICBuZXR3b3JrQ2FsbGVkID0gZmFsc2U7CisgICAg ICAgICAgbmV0d29ya01vY2sub25BbnkoLy4rLykucmVwbHkoKCkgPT4geworICAgICAgICAgICAg bmV0d29ya0NhbGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gWzIwMCwge31dOworICAg ICAgICAgIH0pOworCisgICAgICAgICAgY29uc3QgZXZlbnQgPSB7CisgICAgICAgICAgICBidXR0 b246IHsKKyAgICAgICAgICAgICAgZWxlbWVudDogeworICAgICAgICAgICAgICAgIG5hbWU6ICdv YmplY3RfaGVscCcsCisgICAgICAgICAgICAgICAgZ2V0QXR0cmlidXRlOiAoYXR0cmlidXRlTmFt ZSkgPT4geworICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT09ICd1cmwnKSB7 CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaHR0cDovL3NvbWV1cmwnOworICAgICAgICAg ICAgICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lID09PSAnbGFiZWwnKSB7CisgICAgICAg ICAgICAgICAgICAgIHJldHVybiAnc29tZSBsYWJlbCc7CisgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg ICAgfTsKKyAgICAgICAgICBkaWFsb2cuY2FsbGJhY2soZXZlbnQpOworICAgICAgICB9KTsKKwor ICAgICAgICBpdCgnZGlzcGxheXMgaGVscCBmb3IgZGlhbG9nJywgKCkgPT4geworICAgICAgICAg IGV4cGVjdChwZ0Jyb3dzZXIuc2hvd0hlbHApLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAg ICAgICAgJ29iamVjdF9oZWxwJywKKyAgICAgICAgICAgICdodHRwOi8vc29tZXVybCcsCisgICAg ICAgICAgICBwZ0Jyb3dzZXIuTm9kZXNbJ2RhdGFiYXNlJ10sCisgICAgICAgICAgICBkYXRhYmFz ZVRyZWVOb2RlLAorICAgICAgICAgICAgJ3NvbWUgbGFiZWwnCisgICAgICAgICAgKQorICAgICAg ICB9KTsKKworICAgICAgICBpdCgnZG9lcyBub3Qgc3RhcnQgdGhlIGJhY2t1cCcsICgpID0+IHsK KyAgICAgICAgICBleHBlY3QobmV0d29ya0NhbGxlZCkudG9CZShmYWxzZSk7CisgICAgICAgIH0p OworICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ2JhY2t1cCBidXR0b24gd2FzIHByZXNzZWQn LCAoKSA9PiB7CisgICAgICAgIGNvbnRleHQoJ25vIHRyZWUgbm9kZSBpcyBzZWxlY3RlZCcsICgp ID0+IHsKKyAgICAgICAgICBsZXQgbmV0d29ya0NhbGxlZDsKKyAgICAgICAgICBiZWZvcmVFYWNo KCgpID0+IHsKKyAgICAgICAgICAgIG5ldHdvcmtDYWxsZWQgPSBmYWxzZTsKKyAgICAgICAgICAg IG5ldHdvcmtNb2NrLm9uUG9zdCgnL2JhY2t1cC9qb2IvMTAvb2JqZWN0JykucmVwbHkoKCkgPT4g eworICAgICAgICAgICAgICBuZXR3b3JrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgcmV0 dXJuIFsyMDAsIHt9XTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBjb25zdCBldmVu dCA9IHsKKyAgICAgICAgICAgICAgYnV0dG9uOiB7CisgICAgICAgICAgICAgICAgJ2RhdGEtYnRu LW5hbWUnOiAnYmFja3VwJywKKyAgICAgICAgICAgICAgICBlbGVtZW50OiB7CisgICAgICAgICAg ICAgICAgICBnZXRBdHRyaWJ1dGU6IChhdHRyaWJ1dGVOYW1lKSA9PiB7CisgICAgICAgICAgICAg ICAgICAgIGlmIChhdHRyaWJ1dGVOYW1lID09PSAndXJsJykgeworICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiAnaHR0cDovL3NvbWV1cmwnOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKGF0dHJpYnV0ZU5hbWUgPT09ICdsYWJlbCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gJ3NvbWUgbGFiZWwnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 OworICAgICAgICAgICAgZGlhbG9nLmNhbGxiYWNrKGV2ZW50KTsKKyAgICAgICAgICB9KTsKKwor ICAgICAgICAgIGl0KCdkb2VzIG5vdCBzdGFydCB0aGUgYmFja3VwJywgKCkgPT4geworICAgICAg ICAgICAgZXhwZWN0KG5ldHdvcmtDYWxsZWQpLnRvQmUoZmFsc2UpOworICAgICAgICAgIH0pOwor ICAgICAgICB9KTsKKworICAgICAgICBjb250ZXh0KCdzZWxlY3RlZCBub2RlIGhhcyBubyBkYXRh JywgKCkgPT4geworICAgICAgICAgIGxldCBuZXR3b3JrQ2FsbGVkOworICAgICAgICAgIGJlZm9y ZUVhY2goKCkgPT4geworICAgICAgICAgICAgcGdCcm93c2VyLnRyZWVNZW51LnNldFNlbGVjdGVk Tm9kZShbbm9EYXRhTm9kZV0pOworICAgICAgICAgICAgbmV0d29ya0NhbGxlZCA9IGZhbHNlOwor ICAgICAgICAgICAgbmV0d29ya01vY2sub25Qb3N0KCcvYmFja3VwL2pvYi8xMC9vYmplY3QnKS5y ZXBseSgoKSA9PiB7CisgICAgICAgICAgICAgIG5ldHdvcmtDYWxsZWQgPSB0cnVlOworICAgICAg ICAgICAgICByZXR1cm4gWzIwMCwge31dOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg IGNvbnN0IGV2ZW50ID0geworICAgICAgICAgICAgICBidXR0b246IHsKKyAgICAgICAgICAgICAg ICAnZGF0YS1idG4tbmFtZSc6ICdiYWNrdXAnLAorICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHsK KyAgICAgICAgICAgICAgICAgIGdldEF0dHJpYnV0ZTogKGF0dHJpYnV0ZU5hbWUpID0+IHsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT09ICd1cmwnKSB7CisgICAgICAg ICAgICAgICAgICAgICAgcmV0dXJuICdodHRwOi8vc29tZXVybCc7CisgICAgICAgICAgICAgICAg ICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PT0gJ2xhYmVsJykgeworICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiAnc29tZSBsYWJlbCc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH07CisgICAgICAgICAgICBkaWFsb2cuY2FsbGJhY2soZXZlbnQpOworICAgICAg ICAgIH0pOworCisgICAgICAgICAgaXQoJ2RvZXMgbm90IHN0YXJ0IHRoZSBiYWNrdXAnLCAoKSA9 PiB7CisgICAgICAgICAgICBleHBlY3QobmV0d29ya0NhbGxlZCkudG9CZShmYWxzZSk7CisgICAg ICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIGNvbnRleHQoJ3NlbGVjdGVkIG5vZGUg aGFzIGRhdGEnLCAoKSA9PiB7CisgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAg ICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2V0U2VsZWN0ZWROb2RlKFt7aWQ6ICdsZXZlbDEuMS4x J31dKTsKKyAgICAgICAgICAgIHBnQnJvd3Nlci5FdmVudHMgPSBqYXNtaW5lLmNyZWF0ZVNweU9i aignRXZlbnRzJywgWyd0cmlnZ2VyJ10pOworCisgICAgICAgICAgICBiYWNrdXBOb2RlLnZpZXcg PSB7CisgICAgICAgICAgICAgIG1vZGVsOiBuZXcgRmFrZU1vZGVsKCksCisgICAgICAgICAgICB9 OworICAgICAgICAgICAgYmFja3VwTm9kZS52aWV3Lm1vZGVsLnNldCgnZHFvdXRlJywgZmFsc2Up OworICAgICAgICAgICAgYmFja3VwTm9kZS52aWV3Lm1vZGVsLnNldCgnZmlsZScsICd0ZXN0Jyk7 CisgICAgICAgICAgICBiYWNrdXBOb2RlLnZpZXcubW9kZWwuc2V0KCd2ZXJib3NlJywgdHJ1ZSk7 CisKKyAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0geworICAgICAgICAgICAgICBidXR0b246IHsK KyAgICAgICAgICAgICAgICAnZGF0YS1idG4tbmFtZSc6ICdiYWNrdXAnLAorICAgICAgICAgICAg ICAgIGVsZW1lbnQ6IHsKKyAgICAgICAgICAgICAgICAgIGdldEF0dHJpYnV0ZTogKGF0dHJpYnV0 ZU5hbWUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT09ICd1 cmwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRwOi8vc29tZXVybCc7Cisg ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PT0gJ2xhYmVsJykg eworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnc29tZSBsYWJlbCc7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBPYmplY3QuYXNzaWduKGRp YWxvZywgYmFja3VwTm9kZSkuY2FsbGJhY2soZXZlbnQpOworICAgICAgICAgIH0pOworICAgICAg ICAgIGNvbnRleHQoJ2NyZWF0aW9uIG9mIGJhY2t1cCBqb2Igc3VjY2Vzc2Z1bGwnLCAoKSA9PiB7 CisgICAgICAgICAgICBsZXQgZGF0YVNlbnRUb1NlcnZlcjsKKyAgICAgICAgICAgIGJlZm9yZUVh Y2goKCkgPT4geworICAgICAgICAgICAgICBuZXR3b3JrTW9jay5vblBvc3QoJy9iYWNrdXAvam9i LzEwL29iamVjdCcpLnJlcGx5KChyZXF1ZXN0KSA9PiB7CisgICAgICAgICAgICAgICAgZGF0YVNl bnRUb1NlcnZlciA9IHJlcXVlc3QuZGF0YTsKKyAgICAgICAgICAgICAgICByZXR1cm4gWzIwMCwg e31dOworICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBp dCgnY3JlYXRlcyBhbiBzdWNjZXNzIGFsZXJ0IGJveCcsIChkb25lKSA9PiB7CisgICAgICAgICAg ICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAgICAgICAgICAgIGV4cGVjdChhbGVydGlmeVNw eS5zdWNjZXNzKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnQmFja3VwIGpvYicgKworICAgICAgICAg ICAgICAgICAgJyBjcmVhdGVkLicsIDUpOworICAgICAgICAgICAgICAgIGRvbmUoKTsKKyAgICAg ICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaXQoJ3RyaWdn ZXIgYmFja2dyb3VuZCBwcm9jZXNzJywgKGRvbmUpID0+IHsKKyAgICAgICAgICAgICAgc2V0VGlt ZW91dCgoKSA9PiB7CisgICAgICAgICAgICAgICAgZXhwZWN0KHBnQnJvd3Nlci5FdmVudHMudHJp Z2dlcikudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAgICAgICAgICAgICAncGdhZG1pbi1i Z3Byb2Nlc3M6Y3JlYXRlZCcsCisgICAgICAgICAgICAgICAgICBqYXNtaW5lLmFueXRoaW5nKCkK KyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICAg ICAgfSwgMCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaXQoJ3NlbmQgY29ycmVj dCBkYXRhIHRvIHNlcnZlcicsICgpID0+IHsKKyAgICAgICAgICAgICAgZXhwZWN0KGRhdGFTZW50 VG9TZXJ2ZXIpLnRvRXF1YWwoSlNPTi5zdHJpbmdpZnkoeworICAgICAgICAgICAgICAgIGRxb3V0 ZTogZmFsc2UsCisgICAgICAgICAgICAgICAgZmlsZTogJ3Rlc3QnLAorICAgICAgICAgICAgICAg IHZlcmJvc2U6IHRydWUsCisgICAgICAgICAgICAgICAgZGF0YWJhc2U6ICdzb21lX2RhdGFiYXNl X2xhYmVsJworICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9 KTsKKworICAgICAgICAgIGNvbnRleHQoJ2Vycm9yIGNyZWF0aW5nIGJhY2t1cCBqb2InLCAoKSA9 PiB7CisgICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgICAgICAgY29uc3Qg cmVzcG9uc2UgPSB7CisgICAgICAgICAgICAgICAgZXJyb3Jtc2c6ICdzb21lIGVycm9yIG1lc3Nh Z2UnCisgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgbmV0d29ya01vY2sub25Qb3N0 KCcvYmFja3VwL2pvYi8xMC9vYmplY3QnKS5yZXBseSgoKSA9PiB7CisgICAgICAgICAgICAgICAg cmV0dXJuIFs1MDAsIHJlc3BvbnNlXTsKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9 KTsKKworICAgICAgICAgICAgaXQoJ2NyZWF0ZXMgYW4gYWxlcnQgYm94JywgKGRvbmUpID0+IHsK KyAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CisgICAgICAgICAgICAgICAgZXhwZWN0 KGFsZXJ0aWZ5U3B5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnQmFja3VwIGpvYicgKwor ICAgICAgICAgICAgICAgICAgJyBmYWlsZWQuJywgJ3NvbWUgZXJyb3IgbWVzc2FnZScpOworICAg ICAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICB9 KTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7 CisKKyAgZGVzY3JpYmUoJ0JhY2t1cERpYWxvZ1dyYXBwZXInLCAoKSA9PiB7CisgICAgZGVzY3Jp YmUoJyNzZXRFeHRyYVBhcmFtZXRlcnMnLCAoKSA9PiB7CisgICAgICBsZXQgbW9kZWw7CisgICAg ICBsZXQgZGlhbG9nOworICAgICAgbGV0IHNjaGVtYU5vZGU7CisgICAgICBsZXQgdGFibGVOb2Rl OworICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgIG1vZGVsID0gbmV3IEZha2VNb2Rl bCgpOworICAgICAgICBkaWFsb2cgPSBuZXcgRGlhbG9nV3JhcHBlcih7fSwgeworICAgICAgICAg IHBnQnJvd3NlcjogcGdCcm93c2VyLAorICAgICAgICB9LCAnJywgJ2JhY2t1cF9vYmplY3RzJyk7 CisgICAgICAgIGRpYWxvZy52aWV3ID0geworICAgICAgICAgIG1vZGVsOiBtb2RlbCwKKyAgICAg ICAgfTsKKyAgICAgICAgc2NoZW1hTm9kZSA9IHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2Rl KAorICAgICAgICAgICdzY2hlbWEnLCB7CisgICAgICAgICAgICBfbGFiZWw6ICdzY2hlbWFfbGFi ZWwnLAorICAgICAgICAgICAgX3R5cGU6ICdzY2hlbWEnLAorICAgICAgICAgIH0sIFsnbGV2ZWwx JywgJ2xldmVsMS4xJywgJ2xldmVsMS4xLjEnXSk7CisgICAgICAgIHRhYmxlTm9kZSA9IHBnQnJv d3Nlci50cmVlTWVudS5hZGROZXdOb2RlKAorICAgICAgICAgICd0YWJsZScsIHsKKyAgICAgICAg ICAgIF9sYWJlbDogJ3RhYmxlX2xhYmVsJywKKyAgICAgICAgICAgIF90eXBlOiAndGFibGUnLAor ICAgICAgICAgIH0sIFsnbGV2ZWwxJywgJ2xldmVsMS4xJywgJ2xldmVsMS4xLjEnLCAnc2NoZW1h J10pOworICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3R5cGUgaXMgc2NoZW1hJywgKCkgPT4g eworICAgICAgICBpdCgnYWRkIHNjaGVtYSBhcnJheSB0byB0aGUgbW9kZWwnLCAoKSA9PiB7Cisg ICAgICAgICAgZGlhbG9nLnNldEV4dHJhUGFyYW1ldGVycyhzY2hlbWFOb2RlKTsKKyAgICAgICAg ICBleHBlY3QobW9kZWwuZ2V0KCdzY2hlbWFzJykpLnRvRXF1YWwoWydzY2hlbWFfbGFiZWwnXSk7 CisgICAgICAgIH0pOworICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3R5cGUgaXMgdGFibGUn LCAoKSA9PiB7CisgICAgICAgIGl0KCdhZGQgc2NoZW1hIGFuZCB0YWJsZSB0byB0aGUgbW9kZWwn LCAoKSA9PiB7CisgICAgICAgICAgZGlhbG9nLnNldEV4dHJhUGFyYW1ldGVycyh0YWJsZU5vZGUp OworICAgICAgICAgIGV4cGVjdChtb2RlbC5nZXQoJ3RhYmxlcycpKS50b0VxdWFsKFtbJ3NjaGVt YV9sYWJlbCcsICd0YWJsZV9sYWJlbCddXSk7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAg fSk7CisgIH0pOworfSk7CmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2Jh Y2t1cC9nbG9iYWxfc2VydmVyX2JhY2t1cF9kaWFsb2dfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9u L2phdmFzY3JpcHQvYmFja3VwL2dsb2JhbF9zZXJ2ZXJfYmFja3VwX2RpYWxvZ19zcGVjLmpzCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4wYjIyOTAzOAotLS0gL2Rldi9udWxs CisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvYmFja3VwL2dsb2JhbF9zZXJ2ZXJfYmFj a3VwX2RpYWxvZ19zcGVjLmpzCkBAIC0wLDAgKzEsNTg1IEBACisvLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1p biA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgs IFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFz ZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitpbXBvcnQge0JhY2t1 cERpYWxvZ30gZnJvbSAnLi4vLi4vLi4vcGdhZG1pbi9zdGF0aWMvanMvYmFja3VwL2JhY2t1cF9k aWFsb2cnOworaW1wb3J0IHtUcmVlRmFrZX0gZnJvbSAnLi4vdHJlZS90cmVlX2Zha2UnOworaW1w b3J0IE1vY2tBZGFwdGVyIGZyb20gJ2F4aW9zLW1vY2stYWRhcHRlcic7CitpbXBvcnQgYXhpb3Mg ZnJvbSAnYXhpb3MvaW5kZXgnOworaW1wb3J0IHtGYWtlTW9kZWx9IGZyb20gJy4uL2Zha2VfbW9k ZWwnOworCitjb25zdCBjb250ZXh0ID0gZGVzY3JpYmU7CisKK2Rlc2NyaWJlKCdHbG9iYWxTZXJ2 ZXJCYWNrdXBEaWFsb2cnLCAoKSA9PiB7CisgIGxldCBiYWNrdXBEaWFsb2c7CisgIGxldCBiYWNr dXBOb2RlOworICBsZXQgcGdCcm93c2VyOworICBsZXQganF1ZXJ5U3B5OworICBsZXQgYWxlcnRp ZnlTcHk7CisgIGxldCBiYWNrdXBNb2RlbFNweTsKKyAgbGV0IGJhY2tmb3JtOworCisKKyAgbGV0 IHJvb3ROb2RlOworICBsZXQgc2VydmVyVHJlZU5vZGU7CisgIGxldCBwcGFzU2VydmVyVHJlZU5v ZGU7CisgIGxldCBub0RhdGFOb2RlOworCisgIGJlZm9yZUVhY2goKCkgPT4geworICAgIHBnQnJv d3NlciA9IHsKKyAgICAgIHRyZWVNZW51OiBuZXcgVHJlZUZha2UoKSwKKyAgICAgIE5vZGVzOiB7 CisgICAgICAgIHNlcnZlcjogamFzbWluZS5jcmVhdGVTcHlPYmooJ05vZGVbc2VydmVyXScsIFsn Z2V0VHJlZU5vZGVIaWVyYXJjaHknXSksCisgICAgICB9CisgICAgfTsKKyAgICBwZ0Jyb3dzZXIu Tm9kZXMuc2VydmVyLmhhc0lkID0gdHJ1ZTsKKyAgICBqcXVlcnlTcHkgPSBqYXNtaW5lLmNyZWF0 ZVNweSgnanF1ZXJ5U3B5Jyk7CisgICAgYmFja3VwTW9kZWxTcHkgPSBqYXNtaW5lLmNyZWF0ZVNw eSgnYmFja3VwTW9kZWxTcHknKTsKKyAgICBiYWNrdXBOb2RlID0ge307CisgICAgYmFja2Zvcm0g PSBqYXNtaW5lLmNyZWF0ZVNweU9iaignYmFja2Zvcm0nLCBbJ2dlbmVyYXRlVmlld1NjaGVtYScs ICdEaWFsb2cnXSk7CisKKyAgICByb290Tm9kZSA9IHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdO b2RlKCdsZXZlbDEnLCB7fSwgW10pOworICAgIHNlcnZlclRyZWVOb2RlID0gcGdCcm93c2VyLnRy ZWVNZW51LmFkZE5ld05vZGUoJ2xldmVsMS4xJywgeworICAgICAgX3R5cGU6ICdzZXJ2ZXInLAor ICAgICAgX2lkOiAxMCwKKyAgICB9LCBbJ2xldmVsMSddKTsKKyAgICBwcGFzU2VydmVyVHJlZU5v ZGUgPSBwZ0Jyb3dzZXIudHJlZU1lbnUuYWRkTmV3Tm9kZSgnbGV2ZWwxLjInLCB7CisgICAgICBf dHlwZTogJ3NlcnZlcicsCisgICAgICBzZXJ2ZXJfdHlwZTogJ3BwYXMnLAorICAgIH0sIFsnbGV2 ZWwxJ10pOworICAgIHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdsZXZlbDMnLCB7fSwg WydsZXZlbDEnLCAnbGV2ZWwxLjInXSk7CisgICAgbm9EYXRhTm9kZSA9IHBnQnJvd3Nlci50cmVl TWVudS5hZGROZXdOb2RlKAorICAgICAgJ2xldmVsMy4xJywgdW5kZWZpbmVkLCBbJ2xldmVsMScs ICdsZXZlbDEuMicsICdsZXZlbDMnXSk7CisgIH0pOworCisgIGRlc2NyaWJlKCcjZHJhdycsICgp ID0+IHsKKyAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgIGFsZXJ0aWZ5U3B5ID0gamFzbWlu ZS5jcmVhdGVTcHlPYmooJ2FsZXJ0aWZ5JywgWydhbGVydCcsICdkaWFsb2cnXSk7CisgICAgICBh bGVydGlmeVNweVsnQmFja3VwRGlhbG9nX2dsb2JhbHMnXSA9IGphc21pbmUuY3JlYXRlU3B5KCdC YWNrdXBEaWFsb2dfZ2xvYmFscycpOworICAgICAgYWxlcnRpZnlTcHlbJ0JhY2t1cERpYWxvZ19z ZXJ2ZXInXSA9IGphc21pbmUuY3JlYXRlU3B5KCdCYWNrdXBEaWFsb2dfc2VydmVyJyk7CisgICAg ICBiYWNrdXBEaWFsb2cgPSBuZXcgQmFja3VwRGlhbG9nKAorICAgICAgICBwZ0Jyb3dzZXIsCisg ICAgICAgIGpxdWVyeVNweSwKKyAgICAgICAgYWxlcnRpZnlTcHksCisgICAgICAgIGJhY2t1cE1v ZGVsU3B5CisgICAgICApOworCisgICAgICBwZ0Jyb3dzZXIuZ2V0X3ByZWZlcmVuY2UgPSBqYXNt aW5lLmNyZWF0ZVNweSgnZ2V0X3ByZWZlcmVuY2VzJyk7CisgICAgfSk7CisKKyAgICBjb250ZXh0 KCd0aGVyZSBhcmUgbm8gYW5jZXN0b3JzIG9mIHRoZSB0eXBlIHNlcnZlcicsICgpID0+IHsKKyAg ICAgIGl0KCdkb2VzIG5vdCBjcmVhdGUgYSBkaWFsb2cnLCAoKSA9PiB7CisgICAgICAgIHBnQnJv d3Nlci50cmVlTWVudS5zZXRTZWxlY3RlZE5vZGUoW3tpZDogJ2xldmVsMSd9XSk7CisgICAgICAg IGJhY2t1cERpYWxvZy5kcmF3KG51bGwsIG51bGwsIG51bGwpOworICAgICAgICBleHBlY3QoYWxl cnRpZnlTcHlbJ0JhY2t1cERpYWxvZ19nbG9iYWxzJ10pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7 CisgICAgICAgIGV4cGVjdChhbGVydGlmeVNweVsnQmFja3VwRGlhbG9nX3NlcnZlciddKS5ub3Qu dG9IYXZlQmVlbkNhbGxlZCgpOworICAgICAgfSk7CisKKyAgICAgIGl0KCdkaXNwbGF5IGFuIGFs ZXJ0IHdpdGggYSBCYWNrdXAgRXJyb3InLCAoKSA9PiB7CisgICAgICAgIGJhY2t1cERpYWxvZy5k cmF3KG51bGwsIFtyb290Tm9kZV0sIG51bGwpOworICAgICAgICBleHBlY3QoYWxlcnRpZnlTcHku YWxlcnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAgICdCYWNrdXAgRXJyb3InLAor ICAgICAgICAgICdQbGVhc2Ugc2VsZWN0IHNlcnZlciBvciBjaGlsZCBub2RlIGZyb20gdGhlIGJy b3dzZXIgdHJlZS4nCisgICAgICAgICk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGNvbnRl eHQoJ3RoZXJlIGlzIGFuIGFuY2VzdG9yIG9mIHRoZSB0eXBlIHNlcnZlcicsICgpID0+IHsKKyAg ICAgIGNvbnRleHQoJ25vIHByZWZlcmVuY2UgY2FuIGJlIGZvdW5kJywgKCkgPT4geworICAgICAg ICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgICBwZ0Jyb3dzZXIuZ2V0X3ByZWZlcmVuY2Uu YW5kLnJldHVyblZhbHVlKHVuZGVmaW5lZCk7CisgICAgICAgIH0pOworCisgICAgICAgIGNvbnRl eHQoJ3NlcnZlciBpcyBhIHBwYXMgc2VydmVyJywgKCkgPT4geworICAgICAgICAgIGl0KCdkaXNw bGF5IGFuIGFsZXJ0IHdpdGggIkJhY2t1cCBFcnJvciInLCAoKSA9PiB7CisgICAgICAgICAgICBi YWNrdXBEaWFsb2cuZHJhdyhudWxsLCBbc2VydmVyVHJlZU5vZGVdLCBudWxsKTsKKyAgICAgICAg ICAgIGV4cGVjdChhbGVydGlmeVNweS5hbGVydCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAg ICAgICAgICAgICdCYWNrdXAgRXJyb3InLAorICAgICAgICAgICAgICAnRmFpbGVkIHRvIGxvYWQg cHJlZmVyZW5jZSBwZ19iaW5fZGlyIG9mIG1vZHVsZSBwYXRocycKKyAgICAgICAgICAgICk7Cisg ICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIGNvbnRleHQoJ3NlcnZlciBpcyBu b3QgYSBwcGFzIHNlcnZlcicsICgpID0+IHsKKyAgICAgICAgICBpdCgnZGlzcGxheSBhbiBhbGVy dCB3aXRoICJCYWNrdXAgRXJyb3IiJywgKCkgPT4geworICAgICAgICAgICAgYmFja3VwRGlhbG9n LmRyYXcobnVsbCwgW3BwYXNTZXJ2ZXJUcmVlTm9kZV0sIG51bGwpOworICAgICAgICAgICAgZXhw ZWN0KGFsZXJ0aWZ5U3B5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAg ICAgJ0JhY2t1cCBFcnJvcicsCisgICAgICAgICAgICAgICdGYWlsZWQgdG8gbG9hZCBwcmVmZXJl bmNlIHBwYXNfYmluX2RpciBvZiBtb2R1bGUgcGF0aHMnCisgICAgICAgICAgICApOworICAgICAg ICAgIH0pOworICAgICAgICB9KTsKKyAgICAgIH0pOworCisgICAgICBjb250ZXh0KCdwcmVmZXJl bmNlIGNhbiBiZSBmb3VuZCcsICgpID0+IHsKKyAgICAgICAgY29udGV4dCgnYmluYXJ5IGZvbGRl ciBpcyBub3QgY29uZmlndXJlZCcsICgpID0+IHsKKyAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+ IHsKKyAgICAgICAgICAgIHBnQnJvd3Nlci5nZXRfcHJlZmVyZW5jZS5hbmQucmV0dXJuVmFsdWUo e30pOworICAgICAgICAgIH0pOworCisgICAgICAgICAgY29udGV4dCgnc2VydmVyIGlzIGEgcHBh cyBzZXJ2ZXInLCAoKSA9PiB7CisgICAgICAgICAgICBpdCgnZGlzcGxheSBhbiBhbGVydCB3aXRo ICJDb25maWd1cmF0aW9uIHJlcXVpcmVkIicsICgpID0+IHsKKyAgICAgICAgICAgICAgYmFja3Vw RGlhbG9nLmRyYXcobnVsbCwgW3NlcnZlclRyZWVOb2RlXSwgbnVsbCk7CisgICAgICAgICAgICAg IGV4cGVjdChhbGVydGlmeVNweS5hbGVydCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAg ICAgICAgICAgJ0NvbmZpZ3VyYXRpb24gcmVxdWlyZWQnLAorICAgICAgICAgICAgICAgICdQbGVh c2UgY29uZmlndXJlIHRoZSBQb3N0Z3JlU1FMIEJpbmFyeSBQYXRoIGluIHRoZSBQcmVmZXJlbmNl cyBkaWFsb2cuJworICAgICAgICAgICAgICApOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg fSk7CisKKyAgICAgICAgICBjb250ZXh0KCdzZXJ2ZXIgaXMgbm90IGEgcHBhcyBzZXJ2ZXInLCAo KSA9PiB7CisgICAgICAgICAgICBpdCgnZGlzcGxheSBhbiBhbGVydCB3aXRoICJDb25maWd1cmF0 aW9uIHJlcXVpcmVkIicsICgpID0+IHsKKyAgICAgICAgICAgICAgYmFja3VwRGlhbG9nLmRyYXco bnVsbCwgW3BwYXNTZXJ2ZXJUcmVlTm9kZV0sIG51bGwpOworICAgICAgICAgICAgICBleHBlY3Qo YWxlcnRpZnlTcHkuYWxlcnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAgICAgICAg ICdDb25maWd1cmF0aW9uIHJlcXVpcmVkJywKKyAgICAgICAgICAgICAgICAnUGxlYXNlIGNvbmZp Z3VyZSB0aGUgRURCIEFkdmFuY2VkIFNlcnZlciBCaW5hcnkgUGF0aCBpbiB0aGUgUHJlZmVyZW5j ZXMgZGlhbG9nLicKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg IH0pOworICAgICAgICB9KTsKKworICAgICAgICBjb250ZXh0KCdiaW5hcnkgZm9sZGVyIGlzIGNv bmZpZ3VyZWQnLCAoKSA9PiB7CisgICAgICAgICAgbGV0IGdsb2JhbFJlc2l6ZVRvU3B5OworICAg ICAgICAgIGxldCBzZXJ2ZXJSZXNpemVUb1NweTsKKyAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+ IHsKKyAgICAgICAgICAgIGdsb2JhbFJlc2l6ZVRvU3B5ID0gamFzbWluZS5jcmVhdGVTcHlPYmoo J2dsb2JhbHMnLCBbJ3Jlc2l6ZVRvJ10pOworICAgICAgICAgICAgYWxlcnRpZnlTcHlbJ0JhY2t1 cERpYWxvZ19nbG9iYWxzJ10uYW5kCisgICAgICAgICAgICAgIC5yZXR1cm5WYWx1ZShnbG9iYWxS ZXNpemVUb1NweSk7CisgICAgICAgICAgICBzZXJ2ZXJSZXNpemVUb1NweSA9IGphc21pbmUuY3Jl YXRlU3B5T2JqKCdzZXJ2ZXInLCBbJ3Jlc2l6ZVRvJ10pOworICAgICAgICAgICAgYWxlcnRpZnlT cHlbJ0JhY2t1cERpYWxvZ19zZXJ2ZXInXS5hbmQKKyAgICAgICAgICAgICAgLnJldHVyblZhbHVl KHNlcnZlclJlc2l6ZVRvU3B5KTsKKyAgICAgICAgICAgIHBnQnJvd3Nlci5nZXRfcHJlZmVyZW5j ZS5hbmQucmV0dXJuVmFsdWUoe3ZhbHVlOiAnL3NvbWUvcGF0aCd9KTsKKyAgICAgICAgICB9KTsK KworICAgICAgICAgIGNvbnRleHQoJ2RpYWxvZyBmb3IgZ2xvYmFsIGJhY2t1cCcsICgpID0+IHsK KyAgICAgICAgICAgIGl0KCdkaXNwbGF5cyB0aGUgZGlhbG9nJywgKCkgPT4geworICAgICAgICAg ICAgICBiYWNrdXBEaWFsb2cuZHJhdyhudWxsLCBbc2VydmVyVHJlZU5vZGVdLCB7Z2xvYmFsczog dHJ1ZX0pOworICAgICAgICAgICAgICBleHBlY3QoYWxlcnRpZnlTcHlbJ0JhY2t1cERpYWxvZ19n bG9iYWxzJ10pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHRydWUpOworICAgICAgICAgICAgICBleHBl Y3QoZ2xvYmFsUmVzaXplVG9TcHkucmVzaXplVG8pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCc2MCUn LCAnNTAlJyk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIGNv bnRleHQoJ2RpYWxvZyBmb3IgZ2xvYmFsIGJhY2t1cCcsICgpID0+IHsKKyAgICAgICAgICAgIGl0 KCdkaXNwbGF5cyB0aGUgZGlhbG9nJywgKCkgPT4geworICAgICAgICAgICAgICBiYWNrdXBEaWFs b2cuZHJhdyhudWxsLCBbc2VydmVyVHJlZU5vZGVdLCB7c2VydmVyOiB0cnVlfSk7CisgICAgICAg ICAgICAgIGV4cGVjdChhbGVydGlmeVNweVsnQmFja3VwRGlhbG9nX3NlcnZlciddKS50b0hhdmVC ZWVuQ2FsbGVkV2l0aCh0cnVlKTsKKyAgICAgICAgICAgICAgZXhwZWN0KHNlcnZlclJlc2l6ZVRv U3B5LnJlc2l6ZVRvKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnNjAlJywgJzUwJScpOworICAgICAg ICAgICAgfSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7 CisgIH0pOworCisgIGRlc2NyaWJlKCcjZGlhbG9nRmFjdG9yeScsICgpID0+IHsKKyAgICBkZXNj cmliZSgnI3ByZXBhcmUnLCAoKSA9PiB7CisgICAgICBsZXQgYmFja3VwSlF1ZXJ5Q29udGFpbmVy OworICAgICAgbGV0IHZpZXdTY2hlbWE7CisgICAgICBsZXQgZ2VuZXJhdGVkQmFja3VwTW9kZWw7 CisgICAgICBsZXQgYmFja3VwTm9kZUNoaWxkTm9kZTsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4g eworICAgICAgICBiYWNrdXBKUXVlcnlDb250YWluZXIgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaign YmFja3VwSlF1ZXJ5Q29udGFpbmVyJywgWydnZXQnXSk7CisgICAgICAgIGJhY2t1cEpRdWVyeUNv bnRhaW5lci5nZXQuYW5kLnJldHVyblZhbHVlKGJhY2t1cEpRdWVyeUNvbnRhaW5lcik7CisgICAg ICAgIHZpZXdTY2hlbWEgPSB7fTsKKyAgICAgICAgZ2VuZXJhdGVkQmFja3VwTW9kZWwgPSB7fTsK KyAgICAgICAgYmFja3VwTm9kZS5fX2ludGVybmFsID0geworICAgICAgICAgIGJ1dHRvbnM6IFsK KyAgICAgICAgICAgIHt9LCB7fSwKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZWxlbWVu dDogeworICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSwKKyAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICAgIF0KKyAgICAgICAgfTsKKyAgICAgICAgYmFja3VwTm9k ZS5lbGVtZW50cyA9IHsKKyAgICAgICAgICBib2R5OiB7CisgICAgICAgICAgICBjaGlsZE5vZGVz OiBbCisgICAgICAgICAgICAgIHt9CisgICAgICAgICAgICBdCisgICAgICAgICAgfSwKKyAgICAg ICAgICBjb250ZW50OiBqYXNtaW5lLmNyZWF0ZVNweU9iaignY29udGVudCcsIFsnYXBwZW5kQ2hp bGQnXSksCisgICAgICAgIH07CisKKyAgICAgICAgYmFja2Zvcm0uZ2VuZXJhdGVWaWV3U2NoZW1h LmFuZC5yZXR1cm5WYWx1ZSh2aWV3U2NoZW1hKTsKKyAgICAgICAgYmFja3VwTW9kZWxTcHkuYW5k LnJldHVyblZhbHVlKGdlbmVyYXRlZEJhY2t1cE1vZGVsKTsKKworICAgICAgICBiYWNrdXBEaWFs b2cgPSBuZXcgQmFja3VwRGlhbG9nKAorICAgICAgICAgIHBnQnJvd3NlciwKKyAgICAgICAgICBq cXVlcnlTcHksCisgICAgICAgICAgYWxlcnRpZnlTcHksCisgICAgICAgICAgYmFja3VwTW9kZWxT cHksCisgICAgICAgICAgYmFja2Zvcm0KKyAgICAgICAgKTsKKworICAgICAgICBiYWNrdXBOb2Rl Q2hpbGROb2RlID0gamFzbWluZS5jcmVhdGVTcHlPYmooJ3NvbWV0aGluZycsIFsnYWRkQ2xhc3Mn XSk7CisKKyAgICAgICAganF1ZXJ5U3B5LmFuZC5jYWxsRmFrZSgoc2VsZWN0b3IpID0+IHsKKyAg ICAgICAgICBpZiAoc2VsZWN0b3IgPT09ICc8ZGl2IGNsYXNzPVwnYmFja3VwX2RpYWxvZ1wnPjwv ZGl2PicpIHsKKyAgICAgICAgICAgIHJldHVybiBiYWNrdXBKUXVlcnlDb250YWluZXI7CisgICAg ICAgICAgfSBlbHNlIGlmIChzZWxlY3RvciA9PT0gYmFja3VwTm9kZS5lbGVtZW50cy5ib2R5LmNo aWxkTm9kZXNbMF0pIHsKKyAgICAgICAgICAgIHJldHVybiBiYWNrdXBOb2RlQ2hpbGROb2RlOwor ICAgICAgICAgIH0KKyAgICAgICAgfSkKKyAgICAgIH0pOworCisgICAgICBjb250ZXh0KCdzZWxl Y3RlZCB0cmVlIG5vZGUgaGFzIG5vIGRhdGEnLCAoKSA9PiB7CisgICAgICAgIGJlZm9yZUVhY2go KCkgPT4geworICAgICAgICAgIHBnQnJvd3Nlci50cmVlTWVudS5zZXRTZWxlY3RlZE5vZGUoW25v RGF0YU5vZGVdKTsKKyAgICAgICAgICBjb25zdCBkaWFsb2cgPSBiYWNrdXBEaWFsb2cuZGlhbG9n RmFjdG9yeSgnU29tZSB0aXRsZScsICdnbG9iYWxzJyk7CisgICAgICAgICAgT2JqZWN0LmFzc2ln bihkaWFsb2csIGJhY2t1cE5vZGUpLnByZXBhcmUoKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAg aXQoJ2RvZXMgbm90IGNyZWF0ZSBhIGJhY2tmb3JtIGRpYWxvZycsICgpID0+IHsKKyAgICAgICAg ICBleHBlY3QoYmFja2Zvcm0uRGlhbG9nKS5ub3QudG9IYXZlQmVlbkNhbGxlZFdpdGgoKTsKKyAg ICAgICAgfSk7CisKKyAgICAgICAgaXQoJ2Rpc2FibGVzIHRoZSBidXR0b24gc3VibWl0IGJ1dHRv biB1bnRpbCBhIGZpbGVuYW1lIGlzIHNlbGVjdGVkJywgKCkgPT4geworICAgICAgICAgIGV4cGVj dChiYWNrdXBOb2RlLl9faW50ZXJuYWwuYnV0dG9uc1syXS5lbGVtZW50LmRpc2FibGVkKS50b0Jl KHRydWUpOworICAgICAgICB9KTsKKyAgICAgIH0pOworCisgICAgICBjb250ZXh0KCdubyB0cmVl IGVsZW1lbnQgaXMgc2VsZWN0ZWQnLCAoKSA9PiB7CisgICAgICAgIGJlZm9yZUVhY2goKCkgPT4g eworICAgICAgICAgIGNvbnN0IGRpYWxvZyA9IGJhY2t1cERpYWxvZy5kaWFsb2dGYWN0b3J5KCdT b21lIHRpdGxlJywgJ2dsb2JhbHMnKTsKKyAgICAgICAgICBPYmplY3QuYXNzaWduKGRpYWxvZywg YmFja3VwTm9kZSkucHJlcGFyZSgpOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnZG9lcyBu b3QgY3JlYXRlIGEgYmFja2Zvcm0gZGlhbG9nJywgKCkgPT4geworICAgICAgICAgIGV4cGVjdChi YWNrZm9ybS5EaWFsb2cpLm5vdC50b0hhdmVCZWVuQ2FsbGVkV2l0aCgpOworICAgICAgICB9KTsK KworICAgICAgICBpdCgnZGlzYWJsZXMgdGhlIGJ1dHRvbiBzdWJtaXQgYnV0dG9uIHVudGlsIGEg ZmlsZW5hbWUgaXMgc2VsZWN0ZWQnLCAoKSA9PiB7CisgICAgICAgICAgZXhwZWN0KGJhY2t1cE5v ZGUuX19pbnRlcm5hbC5idXR0b25zWzJdLmVsZW1lbnQuZGlzYWJsZWQpLnRvQmUodHJ1ZSk7Cisg ICAgICAgIH0pOworICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3RyZWUgZWxlbWVudCBpcyBz ZWxlY3RlZCcsICgpID0+IHsKKyAgICAgICAgbGV0IHRyZWVIaWVyYXJjaHlJbmZvcm1hdGlvbjsK KyAgICAgICAgbGV0IGRpYWxvZ1NweTsKKyAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAg ICAgICAgdHJlZUhpZXJhcmNoeUluZm9ybWF0aW9uID0geworICAgICAgICAgICAgc2VydmVyOiB7 CisgICAgICAgICAgICAgIF90eXBlOiAnc2VydmVyJywKKyAgICAgICAgICAgICAgX2lkOiAxMCwK KyAgICAgICAgICAgICAgcHJpb3JpdHk6IDAsCisgICAgICAgICAgICB9CisgICAgICAgICAgfTsK KyAgICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2V0U2VsZWN0ZWROb2RlKFtzZXJ2ZXJUcmVl Tm9kZV0pOworICAgICAgICAgIHBnQnJvd3Nlci5Ob2Rlc1snc2VydmVyJ10uZ2V0VHJlZU5vZGVI aWVyYXJjaHkuYW5kCisgICAgICAgICAgICAucmV0dXJuVmFsdWUodHJlZUhpZXJhcmNoeUluZm9y bWF0aW9uKTsKKyAgICAgICAgICBkaWFsb2dTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignbmV3 VmlldycsIFsncmVuZGVyJ10pOworICAgICAgICAgIGRpYWxvZ1NweS4kZWwgPSBqYXNtaW5lLmNy ZWF0ZVNweU9iaignJGVsJywgWydmaW5kJ10pOworICAgICAgICAgIGRpYWxvZ1NweS5tb2RlbCA9 IGphc21pbmUuY3JlYXRlU3B5T2JqKCdtb2RlbCcsIFsnb24nXSkKKyAgICAgICAgICBkaWFsb2dT cHkuJGVsLmZpbmQuYW5kLnJldHVyblZhbHVlKFtdKTsKKworICAgICAgICAgIGJhY2tmb3JtLkRp YWxvZy5hbmQucmV0dXJuVmFsdWUoZGlhbG9nU3B5KTsKKworICAgICAgICAgIGNvbnN0IGRpYWxv ZyA9IGJhY2t1cERpYWxvZy5kaWFsb2dGYWN0b3J5KCdTb21lIHRpdGxlJywgJ2dsb2JhbHMnKTsK KyAgICAgICAgICBPYmplY3QuYXNzaWduKGRpYWxvZywgYmFja3VwTm9kZSkucHJlcGFyZSgpOwor ICAgICAgICB9KTsKKworICAgICAgICBpdCgnY3JlYXRlcyBhIGJhY2tmb3JtIGRpYWxvZyBhbmQg ZGlzcGxheXMgaXQnLCAoKSA9PiB7CisgICAgICAgICAgZXhwZWN0KGJhY2tmb3JtLkRpYWxvZyku dG9IYXZlQmVlbkNhbGxlZFdpdGgoeworICAgICAgICAgICAgZWw6IGJhY2t1cEpRdWVyeUNvbnRh aW5lciwKKyAgICAgICAgICAgIG1vZGVsOiBnZW5lcmF0ZWRCYWNrdXBNb2RlbCwKKyAgICAgICAg ICAgIHNjaGVtYTogdmlld1NjaGVtYSwKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIGV4cGVj dChkaWFsb2dTcHkucmVuZGVyKS50b0hhdmVCZWVuQ2FsbGVkKCk7CisgICAgICAgIH0pOworCisg ICAgICAgIGl0KCdhZGQgYWxlcnRpZnkgY2xhc3NlcyB0byBiYWNrdXAgbm9kZSBjaGlsZG5vZGUn LCAoKSA9PiB7CisgICAgICAgICAgZXhwZWN0KGJhY2t1cE5vZGVDaGlsZE5vZGUuYWRkQ2xhc3Mp CisgICAgICAgICAgICAudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ2FsZXJ0aWZ5X3Rvb2xzX2RpYWxv Z19wcm9wZXJ0aWVzIG9ial9wcm9wZXJ0aWVzJyk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0 KCdkaXNhYmxlcyB0aGUgYnV0dG9uIHN1Ym1pdCBidXR0b24gdW50aWwgYSBmaWxlbmFtZSBpcyBz ZWxlY3RlZCcsICgpID0+IHsKKyAgICAgICAgICBleHBlY3QoYmFja3VwTm9kZS5fX2ludGVybmFs LmJ1dHRvbnNbMl0uZWxlbWVudC5kaXNhYmxlZCkudG9CZSh0cnVlKTsKKyAgICAgICAgfSk7CisK KyAgICAgICAgaXQoJ2dlbmVyYXRlcyBhIG5ldyBiYWNrdXAgbW9kZWwnLCAoKSA9PiB7CisgICAg ICAgICAgZXhwZWN0KGJhY2t1cE1vZGVsU3B5KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAg ICAgICAgIHt0eXBlOiAnZ2xvYmFscyd9LAorICAgICAgICAgICAge25vZGVfaW5mbzogdHJlZUhp ZXJhcmNoeUluZm9ybWF0aW9ufQorICAgICAgICAgICk7CisgICAgICAgIH0pOworCisgICAgICAg IGl0KCdhZGQgdGhlIG5ldyBkaWFsb2cgdG8gdGhlIGJhY2t1cCBub2RlIEhUTUwnLCAoKSA9PiB7 CisgICAgICAgICAgZXhwZWN0KGJhY2t1cE5vZGUuZWxlbWVudHMuY29udGVudC5hcHBlbmRDaGls ZCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoYmFja3VwSlF1ZXJ5Q29udGFpbmVyKTsKKyAgICAgICAg fSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCcjb25CdXR0b25DbGlja2Vk JywgKCkgPT4geworICAgICAgbGV0IGJhY2t1cEpRdWVyeUNvbnRhaW5lcjsKKyAgICAgIGxldCBi YWNrdXBOb2RlQ2hpbGROb2RlOworICAgICAgbGV0IGRpYWxvZzsKKyAgICAgIGxldCBuZXR3b3Jr TW9jazsKKworICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgIG5ldHdvcmtNb2NrID0g bmV3IE1vY2tBZGFwdGVyKGF4aW9zKTsKKyAgICAgICAgYmFja3VwSlF1ZXJ5Q29udGFpbmVyID0g amFzbWluZS5jcmVhdGVTcHlPYmooJ2JhY2t1cEpRdWVyeUNvbnRhaW5lcicsIFsnZ2V0J10pOwor ICAgICAgICBiYWNrdXBKUXVlcnlDb250YWluZXIuZ2V0LmFuZC5yZXR1cm5WYWx1ZShiYWNrdXBK UXVlcnlDb250YWluZXIpOworICAgICAgICBwZ0Jyb3dzZXIuc2hvd0hlbHAgPSBqYXNtaW5lLmNy ZWF0ZVNweSgnc2hvd0hlbHAnKTsKKyAgICAgICAgYWxlcnRpZnlTcHkgPSBqYXNtaW5lLmNyZWF0 ZVNweU9iaignYWxlcnRpZnknLCBbJ3N1Y2Nlc3MnLCAnYWxlcnQnXSk7CisKKyAgICAgICAgYmFj a3VwRGlhbG9nID0gbmV3IEJhY2t1cERpYWxvZygKKyAgICAgICAgICBwZ0Jyb3dzZXIsCisgICAg ICAgICAganF1ZXJ5U3B5LAorICAgICAgICAgIGFsZXJ0aWZ5U3B5LAorICAgICAgICAgIGJhY2t1 cE1vZGVsU3B5LAorICAgICAgICAgIGJhY2tmb3JtCisgICAgICAgICk7CisKKyAgICAgICAgYmFj a3VwTm9kZUNoaWxkTm9kZSA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCdzb21ldGhpbmcnLCBbJ2Fk ZENsYXNzJ10pOworCisgICAgICAgIGRpYWxvZyA9IE9iamVjdC5hc3NpZ24oYmFja3VwRGlhbG9n LmRpYWxvZ0ZhY3RvcnkoJ1NvbWUgdGl0bGUnLCAnc2VydmVyJyksIGJhY2t1cE5vZGUpOworICAg ICAgfSk7CisKKyAgICAgIGFmdGVyRWFjaCgoKSA9PiB7CisgICAgICAgIG5ldHdvcmtNb2NrLnJl c3RvcmUoKTsKKyAgICAgIH0pOworCisgICAgICBjb250ZXh0KCdkaWFsb2cgaGVscCBidXR0b24g d2FzIHByZXNzZWQnLCAoKSA9PiB7CisgICAgICAgIGxldCBuZXR3b3JrQ2FsbGVkOworICAgICAg ICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2V0U2Vs ZWN0ZWROb2RlKFtzZXJ2ZXJUcmVlTm9kZV0pOworICAgICAgICAgIG5ldHdvcmtDYWxsZWQgPSBm YWxzZTsKKyAgICAgICAgICBuZXR3b3JrTW9jay5vbkFueSgvLisvKS5yZXBseSgoKSA9PiB7Cisg ICAgICAgICAgICBuZXR3b3JrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBbMjAw LCB7fV07CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICBjb25zdCBldmVudCA9IHsKKyAgICAg ICAgICAgIGJ1dHRvbjogeworICAgICAgICAgICAgICBlbGVtZW50OiB7CisgICAgICAgICAgICAg ICAgbmFtZTogJ2RpYWxvZ19oZWxwJywKKyAgICAgICAgICAgICAgICBnZXRBdHRyaWJ1dGU6IChh dHRyaWJ1dGVOYW1lKSA9PiB7CisgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9 PT0gJ3VybCcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRwOi8vc29tZXVybCc7 CisgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT09ICdsYWJlbCcp IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdzb21lIGxhYmVsJzsKKyAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgICB9OworICAgICAgICAgIGRpYWxvZy5jYWxsYmFjayhldmVudCk7CisgICAg ICAgIH0pOworCisgICAgICAgIGl0KCdkaXNwbGF5cyBoZWxwIGZvciBkaWFsb2cnLCAoKSA9PiB7 CisgICAgICAgICAgZXhwZWN0KHBnQnJvd3Nlci5zaG93SGVscCkudG9IYXZlQmVlbkNhbGxlZFdp dGgoCisgICAgICAgICAgICAnZGlhbG9nX2hlbHAnLAorICAgICAgICAgICAgJ2h0dHA6Ly9zb21l dXJsJywKKyAgICAgICAgICAgIHBnQnJvd3Nlci5Ob2Rlc1snc2VydmVyJ10sCisgICAgICAgICAg ICBzZXJ2ZXJUcmVlTm9kZSwKKyAgICAgICAgICAgICdzb21lIGxhYmVsJworICAgICAgICAgICkK KyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ2RvZXMgbm90IHN0YXJ0IHRoZSBiYWNrdXAnLCAo KSA9PiB7CisgICAgICAgICAgZXhwZWN0KG5ldHdvcmtDYWxsZWQpLnRvQmUoZmFsc2UpOworICAg ICAgICB9KTsKKyAgICAgIH0pOworCisgICAgICBjb250ZXh0KCdvYmplY3QgaGVscCBidXR0b24g d2FzIHByZXNzZWQnLCAoKSA9PiB7CisgICAgICAgIGxldCBuZXR3b3JrQ2FsbGVkOworICAgICAg ICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2V0U2Vs ZWN0ZWROb2RlKFtzZXJ2ZXJUcmVlTm9kZV0pOworICAgICAgICAgIG5ldHdvcmtDYWxsZWQgPSBm YWxzZTsKKyAgICAgICAgICBuZXR3b3JrTW9jay5vbkFueSgvLisvKS5yZXBseSgoKSA9PiB7Cisg ICAgICAgICAgICBuZXR3b3JrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBbMjAw LCB7fV07CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICBjb25zdCBldmVudCA9IHsKKyAgICAg ICAgICAgIGJ1dHRvbjogeworICAgICAgICAgICAgICBlbGVtZW50OiB7CisgICAgICAgICAgICAg ICAgbmFtZTogJ29iamVjdF9oZWxwJywKKyAgICAgICAgICAgICAgICBnZXRBdHRyaWJ1dGU6IChh dHRyaWJ1dGVOYW1lKSA9PiB7CisgICAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9 PT0gJ3VybCcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRwOi8vc29tZXVybCc7 CisgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT09ICdsYWJlbCcp IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdzb21lIGxhYmVsJzsKKyAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgICB9OworICAgICAgICAgIGRpYWxvZy5jYWxsYmFjayhldmVudCk7CisgICAg ICAgIH0pOworCisgICAgICAgIGl0KCdkaXNwbGF5cyBoZWxwIGZvciBkaWFsb2cnLCAoKSA9PiB7 CisgICAgICAgICAgZXhwZWN0KHBnQnJvd3Nlci5zaG93SGVscCkudG9IYXZlQmVlbkNhbGxlZFdp dGgoCisgICAgICAgICAgICAnb2JqZWN0X2hlbHAnLAorICAgICAgICAgICAgJ2h0dHA6Ly9zb21l dXJsJywKKyAgICAgICAgICAgIHBnQnJvd3Nlci5Ob2Rlc1snc2VydmVyJ10sCisgICAgICAgICAg ICBzZXJ2ZXJUcmVlTm9kZSwKKyAgICAgICAgICAgICdzb21lIGxhYmVsJworICAgICAgICAgICkK KyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ2RvZXMgbm90IHN0YXJ0IHRoZSBiYWNrdXAnLCAo KSA9PiB7CisgICAgICAgICAgZXhwZWN0KG5ldHdvcmtDYWxsZWQpLnRvQmUoZmFsc2UpOworICAg ICAgICB9KTsKKyAgICAgIH0pOworCisgICAgICBjb250ZXh0KCdiYWNrdXAgYnV0dG9uIHdhcyBw cmVzc2VkJywgKCkgPT4geworICAgICAgICBjb250ZXh0KCdubyB0cmVlIG5vZGUgaXMgc2VsZWN0 ZWQnLCAoKSA9PiB7CisgICAgICAgICAgbGV0IG5ldHdvcmtDYWxsZWQ7CisgICAgICAgICAgYmVm b3JlRWFjaCgoKSA9PiB7CisgICAgICAgICAgICBuZXR3b3JrQ2FsbGVkID0gZmFsc2U7CisgICAg ICAgICAgICBuZXR3b3JrTW9jay5vbkFueSgvLisvKS5yZXBseSgoKSA9PiB7CisgICAgICAgICAg ICAgIG5ldHdvcmtDYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgICByZXR1cm4gWzIwMCwge31d OworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0geworICAgICAg ICAgICAgICBidXR0b246IHsKKyAgICAgICAgICAgICAgICAnZGF0YS1idG4tbmFtZSc6ICdiYWNr dXAnLAorICAgICAgICAgICAgICAgIGVsZW1lbnQ6IHsKKyAgICAgICAgICAgICAgICAgIGdldEF0 dHJpYnV0ZTogKGF0dHJpYnV0ZU5hbWUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0 dHJpYnV0ZU5hbWUgPT09ICd1cmwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdo dHRwOi8vc29tZXVybCc7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRl TmFtZSA9PT0gJ2xhYmVsJykgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnc29tZSBs YWJlbCc7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAg ICBkaWFsb2cuY2FsbGJhY2soZXZlbnQpOworICAgICAgICAgIH0pOworCisgICAgICAgICAgaXQo J2RvZXMgbm90IHN0YXJ0IHRoZSBiYWNrdXAnLCAoKSA9PiB7CisgICAgICAgICAgICBleHBlY3Qo bmV0d29ya0NhbGxlZCkudG9CZShmYWxzZSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOwor CisgICAgICAgIGNvbnRleHQoJ3NlbGVjdGVkIG5vZGUgaGFzIG5vIGRhdGEnLCAoKSA9PiB7Cisg ICAgICAgICAgbGV0IG5ldHdvcmtDYWxsZWQ7CisgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7 CisgICAgICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2V0U2VsZWN0ZWROb2RlKFtub0RhdGFO b2RlXSk7CisgICAgICAgICAgICBuZXR3b3JrQ2FsbGVkID0gZmFsc2U7CisgICAgICAgICAgICBu ZXR3b3JrTW9jay5vbkFueSgvLisvKS5yZXBseSgoKSA9PiB7CisgICAgICAgICAgICAgIG5ldHdv cmtDYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgICByZXR1cm4gWzIwMCwge31dOworICAgICAg ICAgICAgfSk7CisKKyAgICAgICAgICAgIGNvbnN0IGV2ZW50ID0geworICAgICAgICAgICAgICBi dXR0b246IHsKKyAgICAgICAgICAgICAgICAnZGF0YS1idG4tbmFtZSc6ICdiYWNrdXAnLAorICAg ICAgICAgICAgICAgIGVsZW1lbnQ6IHsKKyAgICAgICAgICAgICAgICAgIGdldEF0dHJpYnV0ZTog KGF0dHJpYnV0ZU5hbWUpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5h bWUgPT09ICd1cmwnKSB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRwOi8vc29t ZXVybCc7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PT0g J2xhYmVsJykgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnc29tZSBsYWJlbCc7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBkaWFsb2cu Y2FsbGJhY2soZXZlbnQpOworICAgICAgICAgIH0pOworCisgICAgICAgICAgaXQoJ2RvZXMgbm90 IHN0YXJ0IHRoZSBiYWNrdXAnLCAoKSA9PiB7CisgICAgICAgICAgICBleHBlY3QobmV0d29ya0Nh bGxlZCkudG9CZShmYWxzZSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAg IGNvbnRleHQoJ3NlbGVjdGVkIG5vZGUgaGFzIGRhdGEnLCAoKSA9PiB7CisgICAgICAgICAgYmVm b3JlRWFjaCgoKSA9PiB7CisgICAgICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2V0U2VsZWN0 ZWROb2RlKFtzZXJ2ZXJUcmVlTm9kZV0pOworICAgICAgICAgICAgcGdCcm93c2VyLkV2ZW50cyA9 IGphc21pbmUuY3JlYXRlU3B5T2JqKCdFdmVudHMnLCBbJ3RyaWdnZXInXSk7CisKKyAgICAgICAg ICAgIGJhY2t1cE5vZGUudmlldyA9IHsKKyAgICAgICAgICAgICAgbW9kZWw6IG5ldyBGYWtlTW9k ZWwoKSwKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBiYWNrdXBOb2RlLnZpZXcubW9kZWwu c2V0KCdkcW91dGUnLCBmYWxzZSk7CisgICAgICAgICAgICBiYWNrdXBOb2RlLnZpZXcubW9kZWwu c2V0KCdmaWxlJywgJ3Rlc3QnKTsKKyAgICAgICAgICAgIGJhY2t1cE5vZGUudmlldy5tb2RlbC5z ZXQoJ3R5cGUnLCAnZ2xvYmFscycpOworICAgICAgICAgICAgYmFja3VwTm9kZS52aWV3Lm1vZGVs LnNldCgndmVyYm9zZScsIHRydWUpOworCisgICAgICAgICAgICBjb25zdCBldmVudCA9IHsKKyAg ICAgICAgICAgICAgYnV0dG9uOiB7CisgICAgICAgICAgICAgICAgJ2RhdGEtYnRuLW5hbWUnOiAn YmFja3VwJywKKyAgICAgICAgICAgICAgICBlbGVtZW50OiB7CisgICAgICAgICAgICAgICAgICBn ZXRBdHRyaWJ1dGU6IChhdHRyaWJ1dGVOYW1lKSA9PiB7CisgICAgICAgICAgICAgICAgICAgIGlm IChhdHRyaWJ1dGVOYW1lID09PSAndXJsJykgeworICAgICAgICAgICAgICAgICAgICAgIHJldHVy biAnaHR0cDovL3NvbWV1cmwnOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGF0dHJp YnV0ZU5hbWUgPT09ICdsYWJlbCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3Nv bWUgbGFiZWwnOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAg ICAgICAgT2JqZWN0LmFzc2lnbihkaWFsb2csIGJhY2t1cE5vZGUpLmNhbGxiYWNrKGV2ZW50KTsK KyAgICAgICAgICB9KTsKKyAgICAgICAgICBjb250ZXh0KCdjcmVhdGlvbiBvZiBiYWNrdXAgam9i IHN1Y2Nlc3NmdWxsJywgKCkgPT4geworICAgICAgICAgICAgbGV0IGRhdGFTZW50VG9TZXJ2ZXI7 CisgICAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgICAgICAgbmV0d29ya01v Y2sub25Qb3N0KCcvYmFja3VwL2pvYi8xMCcpLnJlcGx5KChyZXF1ZXN0KSA9PiB7CisgICAgICAg ICAgICAgICAgZGF0YVNlbnRUb1NlcnZlciA9IHJlcXVlc3QuZGF0YTsKKyAgICAgICAgICAgICAg ICByZXR1cm4gWzIwMCwge31dOworICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOwor CisgICAgICAgICAgICBpdCgnY3JlYXRlcyBhbiBzdWNjZXNzIGFsZXJ0IGJveCcsIChkb25lKSA9 PiB7CisgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAgICAgICAgICAgIGV4 cGVjdChhbGVydGlmeVNweS5zdWNjZXNzKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnQmFja3VwIGpv YicgKworICAgICAgICAgICAgICAgICAgJyBjcmVhdGVkLicsIDUpOworICAgICAgICAgICAgICAg IGRvbmUoKTsKKyAgICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICB9KTsKKworICAgICAg ICAgICAgaXQoJ3RyaWdnZXIgYmFja2dyb3VuZCBwcm9jZXNzJywgKGRvbmUpID0+IHsKKyAgICAg ICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CisgICAgICAgICAgICAgICAgZXhwZWN0KHBnQnJv d3Nlci5FdmVudHMudHJpZ2dlcikudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAgICAgICAg ICAgICAncGdhZG1pbi1iZ3Byb2Nlc3M6Y3JlYXRlZCcsCisgICAgICAgICAgICAgICAgICBqYXNt aW5lLmFueXRoaW5nKCkKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGRvbmUo KTsKKyAgICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAg aXQoJ3NlbmQgY29ycmVjdCBkYXRhIHRvIHNlcnZlcicsICgpID0+IHsKKyAgICAgICAgICAgICAg ZXhwZWN0KGRhdGFTZW50VG9TZXJ2ZXIpLnRvRXF1YWwoSlNPTi5zdHJpbmdpZnkoeworICAgICAg ICAgICAgICAgIGRxb3V0ZTogZmFsc2UsCisgICAgICAgICAgICAgICAgZmlsZTogJ3Rlc3QnLAor ICAgICAgICAgICAgICAgIHR5cGU6ICdnbG9iYWxzJywKKyAgICAgICAgICAgICAgICB2ZXJib3Nl OiB0cnVlCisgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0p OworCisgICAgICAgICAgY29udGV4dCgnZXJyb3IgY3JlYXRpbmcgYmFja3VwIGpvYicsICgpID0+ IHsKKyAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICAgICAgICBjb25zdCBy ZXNwb25zZSA9IHsKKyAgICAgICAgICAgICAgICBlcnJvcm1zZzogJ3NvbWUgZXJyb3IgbWVzc2Fn ZScKKyAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICBuZXR3b3JrTW9jay5vblBvc3Qo Jy9iYWNrdXAvam9iLzEwJykucmVwbHkoKCkgPT4geworICAgICAgICAgICAgICAgIHJldHVybiBb NTAwLCByZXNwb25zZV07CisgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisKKyAg ICAgICAgICAgIGl0KCdjcmVhdGVzIGFuIGFsZXJ0IGJveCcsIChkb25lKSA9PiB7CisgICAgICAg ICAgICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAgICAgICAgICAgIGV4cGVjdChhbGVydGlm eVNweS5hbGVydCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ0JhY2t1cCBqb2InICsKKyAgICAgICAg ICAgICAgICAgICcgZmFpbGVkLicsICdzb21lIGVycm9yIG1lc3NhZ2UnKTsKKyAgICAgICAgICAg ICAgICBkb25lKCk7CisgICAgICAgICAgICAgIH0sIDApOworICAgICAgICAgICAgfSk7CisgICAg ICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7CisgIH0pOworfSk7CmRp ZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2JhY2t1cC9tZW51X3V0aWxzX3Nw ZWMuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2JhY2t1cC9tZW51X3V0aWxzX3NwZWMu anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjhmNzc2OTc2Ci0tLSAvZGV2 L251bGwKKysrIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9iYWNrdXAvbWVudV91dGlsc19z cGVjLmpzCkBAIC0wLDAgKzEsMTY3IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1pbiA0IC0gUG9zdGdy ZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWlu IERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhl IFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKworaW1wb3J0IHtUcmVlRmFrZX0gZnJv bSAiLi4vdHJlZS90cmVlX2Zha2UiOworaW1wb3J0IHsKKyAgbWVudUVuYWJsZWRTZXJ2ZXIsCisg IG1lbnVFbmFibGVkCit9IGZyb20gIi4uLy4uLy4uL3BnYWRtaW4vc3RhdGljL2pzL2JhY2t1cC9t ZW51X3V0aWxzIjsKKworY29uc3QgY29udGV4dCA9IGRlc2NyaWJlOworCitkZXNjcmliZSgnYmFj a3VwLm1lbnVVdGlscycsICgpID0+IHsKKyAgZGVzY3JpYmUoJyNtZW51RW5hYmxlZCcsICgpID0+ IHsKKyAgICBsZXQgb3VyQnJvd3NlcjsKKyAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgIGNv bnN0IHRyZWUgPSBuZXcgVHJlZUZha2UoKTsKKyAgICAgIG91ckJyb3dzZXIgPSB7CisgICAgICAg IHRyZWVNZW51OiB0cmVlLAorICAgICAgfTsKKyAgICAgIHRyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwx Jywge30sIFtdKTsKKyAgICAgIHRyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwxLjEnLCB7X3R5cGU6ICdj YXRhbG9nJ30sIFsnbGV2ZWwxJ10pOworICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDEuMS4x Jywge190eXBlOiAnZGF0YWJhc2UnfSwgWydsZXZlbDEnLCAnbGV2ZWwxLjEnXSk7CisgICAgICB0 cmVlLmFkZE5ld05vZGUoJ2xldmVsMS4yJywge190eXBlOiAnYmFtbSd9LCBbJ2xldmVsMSddKTsK KyAgICAgIHRyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwxLjIuMScsIHsKKyAgICAgICAgX3R5cGU6ICdk YXRhYmFzZScsCisgICAgICAgIGFsbG93Q29ubjogdHJ1ZQorICAgICAgfSwgWydsZXZlbDEnLCAn bGV2ZWwxLjInXSk7CisgICAgICB0cmVlLmFkZE5ld05vZGUoJ2xldmVsMS4yLjInLCB7CisgICAg ICAgIF90eXBlOiAnZGF0YWJhc2UnLAorICAgICAgICBhbGxvd0Nvbm46IGZhbHNlCisgICAgICB9 LCBbJ2xldmVsMScsICdsZXZlbDEuMiddKTsKKyAgICAgIHRyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwx LjIuMycsIHsKKyAgICAgICAgX3R5cGU6ICd0YWJsZScKKyAgICAgIH0sIFsnbGV2ZWwxJywgJ2xl dmVsMS4yJ10pOworCisgICAgICB0cmVlLmFkZE5ld05vZGUoJ2xldmVsMicsIHt9LCBbXSk7Cisg ICAgICB0cmVlLmFkZE5ld05vZGUoJ2xldmVsMi4xJywgbnVsbCwgWydsZXZlbDInXSk7CisgICAg ICB0cmVlLmFkZE5ld05vZGUoJ2xldmVsMi4xLjEnLCB7fSwgWydsZXZlbDInLCAnbGV2ZWwyLjEn XSk7CisgICAgfSk7CisKKyAgICBjb250ZXh0KCdXaGVuIHRoZSBjdXJyZW50IG5vZGUgaXMgYSBy b290IG5vZGUnLCAoKSA9PiB7CisgICAgICBpdCgncmV0dXJuIGZhbHNlJywgKCkgPT4geworICAg ICAgICBleHBlY3QobWVudUVuYWJsZWQuYXBwbHkob3VyQnJvd3NlciwgW3t9LCBbe2lkOiAnbGV2 ZWwxJ31dXSkpLnRvQmUoZmFsc2UpOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICBjb250ZXh0 KCd3aGVuIGN1cnJlbnQgbm9kZSBkb2VzIG5vdCBleGlzdCcsICgpID0+IHsKKyAgICAgIGl0KCdy ZXR1cm4gZmFsc2UnLCAoKSA9PiB7CisgICAgICAgIGV4cGVjdChtZW51RW5hYmxlZC5hcHBseShv dXJCcm93c2VyLCBbe30sIFt7aWQ6ICdiYW1tJ31dXSkpLnRvQmUoZmFsc2UpOworICAgICAgfSk7 CisgICAgfSk7CisKKyAgICBjb250ZXh0KCdXaGVuIHRoZSBjdXJyZW50IG5vZGUgaXMgbm90IGEg cm9vdCBub2RlJywgKCkgPT4geworICAgICAgY29udGV4dCgncGFyZW50IGRhdGEgZG9lcyBub3Qg ZXhpc3QnLCAoKSA9PiB7CisgICAgICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAg ICAgICAgIGV4cGVjdChtZW51RW5hYmxlZC5hcHBseShvdXJCcm93c2VyLCBbe30sIFt7aWQ6ICds ZXZlbDIuMS4xJ31dXSkpLnRvQmUoZmFsc2UpOworICAgICAgICB9KTsKKyAgICAgIH0pOworCisg ICAgICBjb250ZXh0KCdwYXJlbnQgYXMgZGF0YScsICgpID0+IHsKKyAgICAgICAgY29udGV4dCgn dGhlIGN1cnJlbnQgbm9kZSB0eXBlIGlzIGluIHRoZSBzdXBwb3J0ZWQgbm9kZSB0eXBlcycsICgp ID0+IHsKKyAgICAgICAgICBjb250ZXh0KCd0aGUgcGFyZW50IGlzIG9mIHRoZSB0eXBlIGNhdGFs b2cnLCAoKSA9PiB7CisgICAgICAgICAgICBpdCgncmV0dXJucyBmYWxzZScsICgpID0+IHsKKyAg ICAgICAgICAgICAgZXhwZWN0KG1lbnVFbmFibGVkLmFwcGx5KG91ckJyb3dzZXIsIFsKKyAgICAg ICAgICAgICAgICB7X3R5cGU6ICdzY2hlbWEnfSwKKyAgICAgICAgICAgICAgICBbe2lkOiAnbGV2 ZWwxLjEuMSd9XQorICAgICAgICAgICAgICBdKSkudG9CZShmYWxzZSk7CisgICAgICAgICAgICB9 KTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgICBjb250ZXh0KCd0aGUgcGFyZW50IGlzIG5vdCBv ZiB0aGUgdHlwZSBjYXRhbG9nJywgKCkgPT4geworICAgICAgICAgICAgY29udGV4dCgnY3VycmVu dCBub2RlIGlzIG9mIHRoZSB0eXBlIGRhdGFiYXNlJywgKCkgPT4geworICAgICAgICAgICAgICBj b250ZXh0KCdjdXJyZW50IG5vZGUgYWxsb3dzIGNvbm5lY3Rpb24nLCAoKSA9PiB7CisgICAgICAg ICAgICAgICAgaXQoJ3JldHVybnMgdHJ1ZScsICgpID0+IHsKKyAgICAgICAgICAgICAgICAgIGV4 cGVjdChtZW51RW5hYmxlZC5hcHBseShvdXJCcm93c2VyLCBbeworICAgICAgICAgICAgICAgICAg ICBfdHlwZTogJ2RhdGFiYXNlJywKKyAgICAgICAgICAgICAgICAgICAgYWxsb3dDb25uOiB0cnVl CisgICAgICAgICAgICAgICAgICB9LCBbe2lkOiAnbGV2ZWwxLjIuMSd9XV0pKS50b0JlKHRydWUp OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg Y29udGV4dCgnY3VycmVudCBub2RlIGRvIG5vdCBhbGxvdyBjb25uZWN0aW9uJywgKCkgPT4gewor ICAgICAgICAgICAgICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAgICAgICAgICAg ICAgICAgZXhwZWN0KG1lbnVFbmFibGVkLmFwcGx5KG91ckJyb3dzZXIsIFt7CisgICAgICAgICAg ICAgICAgICAgIF90eXBlOiAnZGF0YWJhc2UnLAorICAgICAgICAgICAgICAgICAgICBhbGxvd0Nv bm46IGZhbHNlCisgICAgICAgICAgICAgICAgICB9LCBbe2lkOiAnbGV2ZWwxLjIuMid9XV0pKS50 b0JlKGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgfSk7CisgICAg ICAgICAgICB9KTsKKyAgICAgICAgICAgIGNvbnRleHQoJ2N1cnJlbnQgbm9kZSBpcyBub3Qgb2Yg dGhlIHR5cGUgZGF0YWJhc2UnLCAoKSA9PiB7CisgICAgICAgICAgICAgIGl0KCdyZXR1cm5zIHRy dWUnLCAoKSA9PiB7CisgICAgICAgICAgICAgICAgZXhwZWN0KG1lbnVFbmFibGVkLmFwcGx5KG91 ckJyb3dzZXIsIFt7CisgICAgICAgICAgICAgICAgICBfdHlwZTogJ3NjaGVtYScKKyAgICAgICAg ICAgICAgICB9LCBbe2lkOiAnbGV2ZWwxLjIuMyd9XV0pKS50b0JlKHRydWUpOworICAgICAgICAg ICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAg ICAgICAgY29udGV4dCgndGhlIGN1cnJlbnQgbm9kZSB0eXBlIGlzIG5vdCBpbiB0aGUgc3VwcG9y dGVkIG5vZGUgdHlwZXMnLCAoKSA9PiB7CisgICAgICAgICAgaXQoJ3JldHVybnMgZmFsc2UnLCAo KSA9PiB7CisgICAgICAgICAgICBleHBlY3QobWVudUVuYWJsZWQuYXBwbHkob3VyQnJvd3Nlciwg W3tfdHlwZTogJ2NhdGFsb2cnfSwgW3tpZDogJ2xldmVsMS4xJ31dXSkpLnRvQmUoZmFsc2UpOwor ICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgY29u dGV4dCgncHJvdmlkZWQgbm9kZSBkYXRhIGlzIHVuZGVmaW5lZCcsICgpID0+IHsKKyAgICAgIGl0 KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAgICAgICBleHBlY3QobWVudUVuYWJsZWQuYXBw bHkob3VyQnJvd3NlciwgW3VuZGVmaW5lZCwgW3tpZDogJ2xldmVsMSd9XV0pKS50b0JlKGZhbHNl KTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgY29udGV4dCgncHJvdmlkZWQgbm9kZSBkYXRh IGlzIG51bGwnLCAoKSA9PiB7CisgICAgICBpdCgncmV0dXJucyBmYWxzZScsICgpID0+IHsKKyAg ICAgICAgZXhwZWN0KG1lbnVFbmFibGVkLmFwcGx5KG91ckJyb3dzZXIsIFtudWxsLCBbe2lkOiAn bGV2ZWwxJ31dXSkpLnRvQmUoZmFsc2UpOworICAgICAgfSk7CisgICAgfSk7CisgIH0pOworCisg IGRlc2NyaWJlKCcjbWVudUVuYWJsZWRTZXJ2ZXInLCAoKSA9PiB7CisgICAgbGV0IG91ckJyb3dz ZXI7CisgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICBjb25zdCB0cmVlID0gbmV3IFRyZWVG YWtlKCk7CisgICAgICBvdXJCcm93c2VyID0geworICAgICAgICB0cmVlTWVudTogdHJlZSwKKyAg ICAgIH07CisgICAgfSk7CisKKyAgICBjb250ZXh0KCdwcm92aWRlZCBub2RlIGRhdGEgaXMgdW5k ZWZpbmVkJywgKCkgPT4geworICAgICAgaXQoJ3JldHVybnMgZmFsc2UnLCAoKSA9PiB7CisgICAg ICAgIGV4cGVjdChtZW51RW5hYmxlZFNlcnZlcih1bmRlZmluZWQpKS50b0JlKGZhbHNlKTsKKyAg ICAgIH0pOworICAgIH0pOworCisgICAgY29udGV4dCgncHJvdmlkZWQgbm9kZSBkYXRhIGlzIG51 bGwnLCAoKSA9PiB7CisgICAgICBpdCgncmV0dXJucyBmYWxzZScsICgpID0+IHsKKyAgICAgICAg ZXhwZWN0KG1lbnVFbmFibGVkU2VydmVyKG51bGwpKS50b0JlKGZhbHNlKTsKKyAgICAgIH0pOwor ICAgIH0pOworCisgICAgY29udGV4dCgnY3VycmVudCBub2RlIHR5cGUgaXMgbm90IG9mIHRoZSB0 eXBlIHNlcnZlcicsICgpID0+IHsKKyAgICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4gewor ICAgICAgICBleHBlY3QobWVudUVuYWJsZWRTZXJ2ZXIoe190eXBlOiAnc2NoZW1hJ30pKS50b0Jl KGZhbHNlKTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgY29udGV4dCgnY3VycmVudCBub2Rl IHR5cGUgaXMgb2YgdGhlIHR5cGUgc2VydmVyJywgKCkgPT4geworICAgICAgY29udGV4dCgnaXMg Y29ubmVjdGVkJywgKCkgPT4geworICAgICAgICBpdCgncmV0dXJucyB0cnVlJywgKCkgPT4gewor ICAgICAgICAgIGV4cGVjdChtZW51RW5hYmxlZFNlcnZlcih7X3R5cGU6ICdzZXJ2ZXInLCBjb25u ZWN0ZWQ6IHRydWV9KSkudG9CZSh0cnVlKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICAg IGNvbnRleHQoJ2lzIG5vdCBjb25uZWN0ZWQnLCAoKSA9PiB7CisgICAgICAgIGl0KCdyZXR1cm5z IGZhbHNlJywgKCkgPT4geworICAgICAgICAgIGV4cGVjdChtZW51RW5hYmxlZFNlcnZlcih7X3R5 cGU6ICdzZXJ2ZXInLCBjb25uZWN0ZWQ6IGZhbHNlfSkpLnRvQmUoZmFsc2UpOworICAgICAgICB9 KTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKK30pOworCmRpZmYgLS1naXQgYS93ZWIvcmVn cmVzc2lvbi9qYXZhc2NyaXB0L2RhdGFncmlkL2dldF9wYW5lbF90aXRsZV9zcGVjLmpzIGIvd2Vi L3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9kYXRhZ3JpZC9nZXRfcGFuZWxfdGl0bGVfc3BlYy5qcwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uM2JhZWRhYTEKLS0tIC9kZXYvbnVs bAorKysgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2RhdGFncmlkL2dldF9wYW5lbF90aXRs ZV9zcGVjLmpzCkBAIC0wLDAgKzEsNzkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBwZ0FkbWluIDQgLSBQb3N0 Z3JlU1FMIFRvb2xzCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwgVGhlIHBnQWRt aW4gRGV2ZWxvcG1lbnQgVGVhbQorLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0 aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworaW1wb3J0IHtnZXRQYW5lbFRpdGxl fSBmcm9tICIuLi8uLi8uLi9wZ2FkbWluL3N0YXRpYy9qcy9kYXRhZ3JpZC9nZXRfcGFuZWxfdGl0 bGUiOworaW1wb3J0IHtUcmVlRmFrZX0gZnJvbSAiLi4vdHJlZS90cmVlX2Zha2UiOworCitjb25z dCBjb250ZXh0ID0gZGVzY3JpYmU7Citjb25zdCB4Y29udGV4dCA9IHhkZXNjcmliZTsKKworZGVz Y3JpYmUoJyNnZXRQYW5lbFRpdGxlJywgKCkgPT4geworICBsZXQgcGdCcm93c2VyOworICBsZXQg dHJlZTsKKyAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgdHJlZSA9IG5ldyBUcmVlRmFrZSgpOwor ICAgIHBnQnJvd3NlciA9IHsKKyAgICAgIHRyZWVNZW51OiB0cmVlLAorICAgICAgTm9kZXM6IHsK KyAgICAgICAgc2VydmVyOiB7CisgICAgICAgICAgaGFzSWQ6IHRydWUsCisgICAgICAgICAgX3R5 cGU6ICdzZXJ2ZXInLAorICAgICAgICB9LAorICAgICAgICBkYXRhYmFzZTogeworICAgICAgICAg IGhhc0lkOiB0cnVlLAorICAgICAgICAgIF90eXBlOiAnZGF0YWJhc2UnLAorICAgICAgICB9LAor ICAgICAgfQorICAgIH07CisgIH0pOworCisgIGNvbnRleHQoJ3NlbGVjdGVkIG5vZGUgZG9lcyBu b3QgYmVsb25nIHRvIGEgc2VydmVyJywgKCkgPT4geworICAgIGl0KCdyZXR1cm5zIHVuZGVmaW5l ZCcsICgpID0+IHsKKyAgICAgIHRyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwxJywge190eXBlOiAnc2Vy dmVyX2dyb3Vwcyd9LCBbXSk7CisgICAgICB0cmVlLmFkZE5ld05vZGUoJ2xldmVsMS4xJywge190 eXBlOiAnb3RoZXInfSwgWydsZXZlbDEnXSk7CisgICAgICB0cmVlLnNldFNlbGVjdGVkTm9kZShb e2lkOiAnbGV2ZWwxJ31dKTsKKyAgICAgIGV4cGVjdChnZXRQYW5lbFRpdGxlKHBnQnJvd3Nlcikp LnRvQmVVbmRlZmluZWQoKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgY29udGV4dCgnc2VsZWN0ZWQg bm9kZSBiZWxvbmcgdG8gYSBzZXJ2ZXInLCAoKSA9PiB7CisgICAgY29udGV4dCgnc2VsZWN0ZWQg bm9kZSBkb2VzIG5vdCBiZWxvbmcgdG8gYSBkYXRhYmFzZScsICgpID0+IHsKKyAgICAgIGl0KCdy ZXR1cm5zIHRoZSBzZXJ2ZXIgbGFiZWwgYW5kIHRoZSB1c2VybmFtZScsICgpID0+IHsKKyAgICAg ICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDEnLCB7CisgICAgICAgICAgX3R5cGU6ICdzZXJ2ZXIn LAorICAgICAgICAgIGRiOiAnb3RoZXIgZGIgbGFiZWwnLAorICAgICAgICAgIHVzZXI6IHtuYW1l OiAnc29tZSB1c2VyIG5hbWUnfSwKKyAgICAgICAgICBsYWJlbDogJ3NlcnZlciBsYWJlbCcKKyAg ICAgICAgfSwgW10pOworICAgICAgICB0cmVlLnNldFNlbGVjdGVkTm9kZShbe2lkOiAnbGV2ZWwx J31dKTsKKyAgICAgICAgZXhwZWN0KGdldFBhbmVsVGl0bGUocGdCcm93c2VyKSkKKyAgICAgICAg ICAudG9CZSgnb3RoZXIgZGIgbGFiZWwgb24gc29tZSB1c2VyIG5hbWVAc2VydmVyIGxhYmVsJyk7 CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGNvbnRleHQoJ3NlbGVjdGVkIG5vZGUgYmVsb25n cyB0byBhIGRhdGFiYXNlJywgKCkgPT4geworICAgICAgaXQoJ3JldHVybnMgdGhlIGRhdGFiYXNl IGxhYmVsIGFuZCB0aGUgdXNlcm5hbWUnLCAoKSA9PiB7CisgICAgICAgIHRyZWUuYWRkTmV3Tm9k ZSgnbGV2ZWwxJywgeworICAgICAgICAgIF90eXBlOiAnc2VydmVyJywKKyAgICAgICAgICBkYjog J290aGVyIGRiIGxhYmVsJywKKyAgICAgICAgICB1c2VyOiB7bmFtZTogJ3NvbWUgdXNlciBuYW1l J30sCisgICAgICAgICAgbGFiZWw6ICdzZXJ2ZXIgbGFiZWwnCisgICAgICAgIH0sIFtdKTsKKyAg ICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDEuMScsIHsKKyAgICAgICAgICBfdHlwZTogJ2Rh dGFiYXNlJywKKyAgICAgICAgICBsYWJlbDogJ2RiIGxhYmVsJworICAgICAgICB9LCBbJ2xldmVs MSddKTsKKyAgICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDEuMS4xJywge190eXBlOiAndGFi bGUnfSwgWydsZXZlbDEnLCAnbGV2ZWwxLjEnXSk7CisgICAgICAgIHRyZWUuc2V0U2VsZWN0ZWRO b2RlKFt7aWQ6ICdsZXZlbDEuMS4xJ31dKTsKKyAgICAgICAgZXhwZWN0KGdldFBhbmVsVGl0bGUo cGdCcm93c2VyKSkKKyAgICAgICAgICAudG9CZSgnZGIgbGFiZWwgb24gc29tZSB1c2VyIG5hbWVA c2VydmVyIGxhYmVsJyk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKZGlmZiAtLWdp dCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvZGF0YWdyaWQvc2hvd19kYXRhX3NwZWMuanMg Yi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2RhdGFncmlkL3Nob3dfZGF0YV9zcGVjLmpzCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5lMGVmODc4MwotLS0gL2Rldi9udWxs CisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvZGF0YWdyaWQvc2hvd19kYXRhX3NwZWMu anMKQEAgLTAsMCArMSwxNTkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FM IFRvb2xzCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwgVGhlIHBnQWRtaW4gRGV2 ZWxvcG1lbnQgVGVhbQorLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9z dGdyZVNRTCBMaWNlbmNlCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworaW1wb3J0IHtzaG93RGF0YUdyaWR9IGZyb20g Ii4uLy4uLy4uL3BnYWRtaW4vc3RhdGljL2pzL2RhdGFncmlkL3Nob3dfZGF0YSI7CitpbXBvcnQg e1RyZWVGYWtlfSBmcm9tICIuLi90cmVlL3RyZWVfZmFrZSI7CisKK2NvbnN0IGNvbnRleHQgPSBk ZXNjcmliZTsKKworZGVzY3JpYmUoJyNzaG93X2RhdGEnLCAoKSA9PiB7CisgIGxldCBkYXRhZ3Jp ZDsKKyAgbGV0IHBnQnJvd3NlcjsKKyAgbGV0IGFsZXJ0aWZ5OworICBiZWZvcmVFYWNoKCgpID0+ IHsKKyAgICBhbGVydGlmeSA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCdhbGVydGlmeScsIFsnYWxl cnQnXSk7CisgICAgZGF0YWdyaWQgPSB7CisgICAgICBjcmVhdGVfdHJhbnNhY3Rpb246IGphc21p bmUuY3JlYXRlU3B5KCdjcmVhdGVfdHJhbnNhY3Rpb24nKSwKKyAgICB9OworICAgIHBnQnJvd3Nl ciA9IHsKKyAgICAgIHRyZWVNZW51OiBuZXcgVHJlZUZha2UoKSwKKyAgICAgIE5vZGVzOiB7Cisg ICAgICAgIHNlcnZlcl9ncm91cDogeworICAgICAgICAgIF90eXBlOiAnc2VydmVyX2dyb3VwJywK KyAgICAgICAgICBoYXNJZDogdHJ1ZSwKKyAgICAgICAgfSwKKyAgICAgICAgc2VydmVyOiB7Cisg ICAgICAgICAgX3R5cGU6ICdzZXJ2ZXInLAorICAgICAgICAgIGhhc0lkOiB0cnVlLAorICAgICAg ICB9LAorICAgICAgICBkYXRhYmFzZTogeworICAgICAgICAgIF90eXBlOiAnZGF0YWJhc2UnLAor ICAgICAgICAgIGhhc0lkOiB0cnVlLAorICAgICAgICB9LAorICAgICAgICBzY2hlbWE6IHsKKyAg ICAgICAgICBfdHlwZTogJ3NjaGVtYScsCisgICAgICAgICAgaGFzSWQ6IHRydWUsCisgICAgICAg IH0sCisgICAgICAgIHZpZXc6IHsKKyAgICAgICAgICBfdHlwZTogJ3ZpZXcnLAorICAgICAgICAg IGhhc0lkOiB0cnVlLAorICAgICAgICB9LAorICAgICAgICBjYXRhbG9nOiB7CisgICAgICAgICAg X3R5cGU6ICdjYXRhbG9nJywKKyAgICAgICAgICBoYXNJZDogdHJ1ZSwKKyAgICAgICAgfSwKKyAg ICAgIH0KKyAgICB9OworICAgIHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdwYXJlbnQn LCB7X3R5cGU6ICdwYXJlbnQnfSwgW10pOworICAgIHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdO b2RlKCdzZXJ2ZXJfZ3JvdXAxJywgeworICAgICAgX3R5cGU6ICdzZXJ2ZXJfZ3JvdXAnLAorICAg ICAgX2lkOiAxLAorICAgIH0sIFsncGFyZW50J10pOworICAgIHBnQnJvd3Nlci50cmVlTWVudS5h ZGROZXdOb2RlKCdzZXJ2ZXIxJywgeworICAgICAgX3R5cGU6ICdzZXJ2ZXInLAorICAgICAgbGFi ZWw6ICdzZXJ2ZXIxJywKKyAgICAgIHNlcnZlcl90eXBlOiAncGcnLAorICAgICAgX2lkOiAyLAor ICAgIH0sIFsncGFyZW50JywgJ3NlcnZlcl9ncm91cDEnXSk7CisgICAgcGdCcm93c2VyLnRyZWVN ZW51LmFkZE5ld05vZGUoJ2RhdGFiYXNlMScsIHsKKyAgICAgIF90eXBlOiAnZGF0YWJhc2UnLAor ICAgICAgbGFiZWw6ICdkYXRhYmFzZTEnLAorICAgICAgX2lkOiAzLAorICAgIH0sIFsncGFyZW50 JywgJ3NlcnZlcl9ncm91cDEnLCAnc2VydmVyMSddKTsKKyAgICBwZ0Jyb3dzZXIudHJlZU1lbnUu YWRkTmV3Tm9kZSgnc2NoZW1hMScsIHsKKyAgICAgIF90eXBlOiAnc2NoZW1hJywKKyAgICAgIGxh YmVsOiAnc2NoZW1hMScsCisgICAgICBfaWQ6IDQsCisgICAgfSwgWydwYXJlbnQnLCAnc2VydmVy X2dyb3VwMScsICdzZXJ2ZXIxJywgJ2RhdGFiYXNlMSddKTsKKyAgICBwZ0Jyb3dzZXIudHJlZU1l bnUuYWRkTmV3Tm9kZSgndmlldzEnLCB7CisgICAgICBfdHlwZTogJ3ZpZXcnLAorICAgICAgbGFi ZWw6ICd2aWV3MScsCisgICAgICBfaWQ6IDUsCisgICAgfSwgWydwYXJlbnQnLCAnc2VydmVyX2dy b3VwMScsICdzZXJ2ZXIxJywgJ2RhdGFiYXNlMSddKTsKKyAgICBwZ0Jyb3dzZXIudHJlZU1lbnUu YWRkTmV3Tm9kZSgnY2F0YWxvZzEnLCB7CisgICAgICBfdHlwZTogJ2NhdGFsb2cnLAorICAgICAg bGFiZWw6ICdjYXRhbG9nMScsCisgICAgICBfaWQ6IDYsCisgICAgfSwgWydwYXJlbnQnLCAnc2Vy dmVyX2dyb3VwMScsICdzZXJ2ZXIxJywgJ2RhdGFiYXNlMSddKTsKKyAgfSk7CisKKyAgY29udGV4 dCgnY2Fubm90IGZpbmQgdGhlIHRyZWUgbm9kZScsICgpID0+IHsKKyAgICBpdCgnZG9lcyBub3Qg Y3JlYXRlIGEgdHJhbnNhY3Rpb24nLCAoKSA9PiB7CisgICAgICBzaG93RGF0YUdyaWQoZGF0YWdy aWQsIHBnQnJvd3NlciwgYWxlcnRpZnksIHt9LCBbe2lkOiAnMTAnfV0pOworICAgICAgZXhwZWN0 KGRhdGFncmlkLmNyZWF0ZV90cmFuc2FjdGlvbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAg ICB9KTsKKworICAgIGl0KCdkaXNwbGF5IGFsZXJ0JywgKCkgPT4geworICAgICAgc2hvd0RhdGFH cmlkKGRhdGFncmlkLCBwZ0Jyb3dzZXIsIGFsZXJ0aWZ5LCB7fSwgW3tpZDogJzEwJ31dKTsKKyAg ICAgIGV4cGVjdChhbGVydGlmeS5hbGVydCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAg ICdEYXRhIEdyaWQgRXJyb3InLAorICAgICAgICAnTm8gb2JqZWN0IHNlbGVjdGVkLicKKyAgICAg ICk7CisgICAgfSk7CisgIH0pOworCisgIGNvbnRleHQoJ2N1cnJlbnQgbm9kZSBpcyBub3QgdW5k ZXJuZWF0aCBhIHNlcnZlcicsICgpID0+IHsKKyAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEgdHJh bnNhY3Rpb24nLCAoKSA9PiB7CisgICAgICBzaG93RGF0YUdyaWQoZGF0YWdyaWQsIHBnQnJvd3Nl ciwgYWxlcnRpZnksIHt9LCBbe2lkOiAncGFyZW50J31dKTsKKyAgICAgIGV4cGVjdChkYXRhZ3Jp ZC5jcmVhdGVfdHJhbnNhY3Rpb24pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7CisgICAgfSk7Cisg IH0pOworCisgIGNvbnRleHQoJ2N1cnJlbnQgbm9kZSBpcyBub3QgdW5kZXJuZWF0aCBhIHNjaGVt YSBvciB2aWV3IG9yIGNhdGFsb2cnLCAoKSA9PiB7CisgICAgaXQoJ2RvZXMgbm90IGNyZWF0ZSBh IHRyYW5zYWN0aW9uJywgKCkgPT4geworICAgICAgc2hvd0RhdGFHcmlkKGRhdGFncmlkLCBwZ0Jy b3dzZXIsIGFsZXJ0aWZ5LCB7fSwgW3tpZDogJ2RhdGFiYXNlMSd9XSk7CisgICAgICBleHBlY3Qo ZGF0YWdyaWQuY3JlYXRlX3RyYW5zYWN0aW9uKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpOworICAg IH0pOworICB9KTsKKworICBjb250ZXh0KCdjdXJyZW50IG5vZGUgaXMgdW5kZXJuZWF0aCBhIHNj aGVtYScsICgpID0+IHsKKyAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEgdHJhbnNhY3Rpb24nLCAo KSA9PiB7CisgICAgICBzaG93RGF0YUdyaWQoZGF0YWdyaWQsIHBnQnJvd3NlciwgYWxlcnRpZnks IHttbnVpZDogMTF9LCBbe2lkOiAnc2NoZW1hMSd9XSk7CisgICAgICBleHBlY3QoZGF0YWdyaWQu Y3JlYXRlX3RyYW5zYWN0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgJy9pbml0 aWFsaXplL2RhdGFncmlkLzExL3NjaGVtYS8xLzIvMy80JywKKyAgICAgICAgbnVsbCwKKyAgICAg ICAgJ2ZhbHNlJywKKyAgICAgICAgJ3BnJywKKyAgICAgICAgJycsCisgICAgICAgICdzZXJ2ZXIx IC0gZGF0YWJhc2UxIC0gc2NoZW1hMS5zY2hlbWExJywKKyAgICAgICAgJycKKyAgICAgICk7Cisg ICAgfSk7CisgIH0pOworCisgIGNvbnRleHQoJ2N1cnJlbnQgbm9kZSBpcyB1bmRlcm5lYXRoIGEg dmlldycsICgpID0+IHsKKyAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEgdHJhbnNhY3Rpb24nLCAo KSA9PiB7CisgICAgICBzaG93RGF0YUdyaWQoZGF0YWdyaWQsIHBnQnJvd3NlciwgYWxlcnRpZnks IHttbnVpZDogMTF9LCBbe2lkOiAndmlldzEnfV0pOworICAgICAgZXhwZWN0KGRhdGFncmlkLmNy ZWF0ZV90cmFuc2FjdGlvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAgICcvaW5pdGlh bGl6ZS9kYXRhZ3JpZC8xMS92aWV3LzEvMi8zLzUnLAorICAgICAgICBudWxsLAorICAgICAgICAn ZmFsc2UnLAorICAgICAgICAncGcnLAorICAgICAgICAnJywKKyAgICAgICAgJ3NlcnZlcjEgLSBk YXRhYmFzZTEgLSB2aWV3MS52aWV3MScsCisgICAgICAgICcnCisgICAgICApOworICAgIH0pOwor ICB9KTsKKworICBjb250ZXh0KCdjdXJyZW50IG5vZGUgaXMgdW5kZXJuZWF0aCBhIGNhdGFsb2cn LCAoKSA9PiB7CisgICAgaXQoJ2RvZXMgbm90IGNyZWF0ZSBhIHRyYW5zYWN0aW9uJywgKCkgPT4g eworICAgICAgc2hvd0RhdGFHcmlkKGRhdGFncmlkLCBwZ0Jyb3dzZXIsIGFsZXJ0aWZ5LCB7bW51 aWQ6IDExfSwgW3tpZDogJ2NhdGFsb2cxJ31dKTsKKyAgICAgIGV4cGVjdChkYXRhZ3JpZC5jcmVh dGVfdHJhbnNhY3Rpb24pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAnL2luaXRpYWxp emUvZGF0YWdyaWQvMTEvY2F0YWxvZy8xLzIvMy82JywKKyAgICAgICAgbnVsbCwKKyAgICAgICAg J2ZhbHNlJywKKyAgICAgICAgJ3BnJywKKyAgICAgICAgJycsCisgICAgICAgICdzZXJ2ZXIxIC0g ZGF0YWJhc2UxIC0gY2F0YWxvZzEuY2F0YWxvZzEnLAorICAgICAgICAnJworICAgICAgKTsKKyAg ICB9KTsKKyAgfSk7Cit9KTsKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQv ZGF0YWdyaWQvc2hvd19xdWVyeV90b29sX3NwZWMuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2Ny aXB0L2RhdGFncmlkL3Nob3dfcXVlcnlfdG9vbF9zcGVjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwLi5iMzZkYzRhNwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9yZWdyZXNz aW9uL2phdmFzY3JpcHQvZGF0YWdyaWQvc2hvd19xdWVyeV90b29sX3NwZWMuanMKQEAgLTAsMCAr MSwxMTkgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8KKy8vCisvLyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisvLwor Ly8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVh bQorLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNl bmNlCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8KKworaW1wb3J0IHtUcmVlRmFrZX0gZnJvbSAnLi4vdHJlZS90cmVlX2Zh a2UnOworaW1wb3J0IHtzaG93UXVlcnlUb29sfSBmcm9tICcuLi8uLi8uLi9wZ2FkbWluL3N0YXRp Yy9qcy9kYXRhZ3JpZC9zaG93X3F1ZXJ5X3Rvb2wnOworCitjb25zdCBjb250ZXh0ID0gZGVzY3Jp YmU7CisKK2Rlc2NyaWJlKCcjc2hvd1F1ZXJ5VG9vbCcsICgpID0+IHsKKyAgbGV0IHF1ZXJ5VG9v bDsKKyAgbGV0IHBnQnJvd3NlcjsKKyAgbGV0IGFsZXJ0aWZ5OworICBiZWZvcmVFYWNoKCgpID0+ IHsKKyAgICBhbGVydGlmeSA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCdhbGVydGlmeScsIFsnYWxl cnQnXSk7CisgICAgcXVlcnlUb29sID0geworICAgICAgY3JlYXRlX3RyYW5zYWN0aW9uOiBqYXNt aW5lLmNyZWF0ZVNweSgnY3JlYXRlX3RyYW5zYWN0aW9uJyksCisgICAgfTsKKyAgICBwZ0Jyb3dz ZXIgPSB7CisgICAgICB0cmVlTWVudTogbmV3IFRyZWVGYWtlKCksCisgICAgICBOb2Rlczogewor ICAgICAgICBzZXJ2ZXJfZ3JvdXA6IHsKKyAgICAgICAgICBfdHlwZTogJ3NlcnZlcl9ncm91cCcs CisgICAgICAgICAgaGFzSWQ6IHRydWUsCisgICAgICAgIH0sCisgICAgICAgIHNlcnZlcjogewor ICAgICAgICAgIF90eXBlOiAnc2VydmVyJywKKyAgICAgICAgICBoYXNJZDogdHJ1ZSwKKyAgICAg ICAgfSwKKyAgICAgICAgZGF0YWJhc2U6IHsKKyAgICAgICAgICBfdHlwZTogJ2RhdGFiYXNlJywK KyAgICAgICAgICBoYXNJZDogdHJ1ZSwKKyAgICAgICAgfSwKKyAgICAgIH0KKyAgICB9OworICAg IHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdwYXJlbnQnLCB7X3R5cGU6ICdwYXJlbnQn fSwgW10pOworICAgIHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdzZXJ2ZXJfZ3JvdXAx JywgeworICAgICAgX3R5cGU6ICdzZXJ2ZXJfZ3JvdXAnLAorICAgICAgX2lkOiAxLAorICAgIH0s IFsncGFyZW50J10pOworICAgIHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdzZXJ2ZXIx JywgeworICAgICAgX3R5cGU6ICdzZXJ2ZXInLAorICAgICAgbGFiZWw6ICdzZXJ2ZXIxJywKKyAg ICAgIHNlcnZlcl90eXBlOiAncGcnLAorICAgICAgX2lkOiAyLAorICAgIH0sIFsncGFyZW50Jywg J3NlcnZlcl9ncm91cDEnXSk7CisgICAgcGdCcm93c2VyLnRyZWVNZW51LmFkZE5ld05vZGUoJ2Rh dGFiYXNlMScsIHsKKyAgICAgIF90eXBlOiAnZGF0YWJhc2UnLAorICAgICAgbGFiZWw6ICdkYXRh YmFzZTEnLAorICAgICAgX2lkOiAzLAorICAgIH0sIFsncGFyZW50JywgJ3NlcnZlcl9ncm91cDEn LCAnc2VydmVyMSddKTsKKyAgfSk7CisKKyAgY29udGV4dCgnY2Fubm90IGZpbmQgdGhlIHRyZWUg bm9kZScsICgpID0+IHsKKyAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgIHNob3dRdWVyeVRv b2wocXVlcnlUb29sLCBwZ0Jyb3dzZXIsIGFsZXJ0aWZ5LCAnJywgW3tpZDogJzEwJ31dLCAndGl0 bGUnKTsKKyAgICB9KTsKKyAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEgdHJhbnNhY3Rpb24nLCAo KSA9PiB7CisgICAgICBleHBlY3QocXVlcnlUb29sLmNyZWF0ZV90cmFuc2FjdGlvbikubm90LnRv SGF2ZUJlZW5DYWxsZWQoKTsKKyAgICB9KTsKKworICAgIGl0KCdkaXNwbGF5IGFsZXJ0JywgKCkg PT4geworICAgICAgZXhwZWN0KGFsZXJ0aWZ5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgK KyAgICAgICAgJ1F1ZXJ5IFRvb2wgRXJyb3InLAorICAgICAgICAnTm8gb2JqZWN0IHNlbGVjdGVk LicKKyAgICAgICk7CisgICAgfSk7CisgIH0pOworCisgIGNvbnRleHQoJ2N1cnJlbnQgbm9kZSBp cyBub3QgdW5kZXJuZWF0aCBhIHNlcnZlcicsICgpID0+IHsKKyAgICBpdCgnZG9lcyBub3QgY3Jl YXRlIGEgdHJhbnNhY3Rpb24nLCAoKSA9PiB7CisgICAgICBzaG93UXVlcnlUb29sKHF1ZXJ5VG9v bCwgcGdCcm93c2VyLCBhbGVydGlmeSwgJycsIFt7aWQ6ICdwYXJlbnQnfV0sICd0aXRsZScpOwor ICAgICAgZXhwZWN0KHF1ZXJ5VG9vbC5jcmVhdGVfdHJhbnNhY3Rpb24pLm5vdC50b0hhdmVCZWVu Q2FsbGVkKCk7CisgICAgfSk7CisKKyAgICBpdCgnbm8gYWxlcnQgaXMgZGlzcGxheWVkJywgKCkg PT4geworICAgICAgZXhwZWN0KGFsZXJ0aWZ5LmFsZXJ0KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgp OworICAgIH0pOworICB9KTsKKworICBjb250ZXh0KCdjdXJyZW50IG5vZGUgaXMgdW5kZXJuZWF0 aCBhIHNlcnZlcicsICgpID0+IHsKKyAgICBjb250ZXh0KCdjdXJyZW50IG5vZGUgaXMgbm90IHVu ZGVybmVhdGggYSBkYXRhYmFzZScsICgpID0+IHsKKyAgICAgIGl0KCdjcmVhdGVzIGEgdHJhbnNh Y3Rpb24nLCAoKSA9PiB7CisgICAgICAgIHNob3dRdWVyeVRvb2wocXVlcnlUb29sLCBwZ0Jyb3dz ZXIsIGFsZXJ0aWZ5LCAnaHR0cDovL3NvbWV1cmwnLCBbe2lkOiAnc2VydmVyMSd9XSwgJ3RpdGxl Jyk7CisgICAgICAgIGV4cGVjdChxdWVyeVRvb2wuY3JlYXRlX3RyYW5zYWN0aW9uKS50b0hhdmVC ZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAnL2luaXRpYWxpemUvcXVlcnlfdG9vbC8xLzInLAor ICAgICAgICAgIG51bGwsCisgICAgICAgICAgJ3RydWUnLAorICAgICAgICAgICdwZycsCisgICAg ICAgICAgJ2h0dHA6Ly9zb21ldXJsJywKKyAgICAgICAgICAndGl0bGUnLAorICAgICAgICAgICcn LAorICAgICAgICAgIGZhbHNlCisgICAgICAgICk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAg IGNvbnRleHQoJ2N1cnJlbnQgbm9kZSBpcyB1bmRlcm5lYXRoIGEgZGF0YWJhc2UnLCAoKSA9PiB7 CisgICAgICBpdCgnY3JlYXRlcyBhIHRyYW5zYWN0aW9uJywgKCkgPT4geworICAgICAgICBzaG93 UXVlcnlUb29sKHF1ZXJ5VG9vbCwgcGdCcm93c2VyLCBhbGVydGlmeSwgJ2h0dHA6Ly9zb21ldXJs JywgW3tpZDogJ2RhdGFiYXNlMSd9XSwgJ3RpdGxlJyk7CisgICAgICAgIGV4cGVjdChxdWVyeVRv b2wuY3JlYXRlX3RyYW5zYWN0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAn L2luaXRpYWxpemUvcXVlcnlfdG9vbC8xLzIvMycsCisgICAgICAgICAgbnVsbCwKKyAgICAgICAg ICAndHJ1ZScsCisgICAgICAgICAgJ3BnJywKKyAgICAgICAgICAnaHR0cDovL3NvbWV1cmwnLAor ICAgICAgICAgICd0aXRsZScsCisgICAgICAgICAgJycsCisgICAgICAgICAgZmFsc2UKKyAgICAg ICAgKTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKK30pOwpkaWZmIC0tZ2l0IGEvd2ViL3Jl Z3Jlc3Npb24vamF2YXNjcmlwdC9mYWtlX2VuZHBvaW50cy5qcyBiL3dlYi9yZWdyZXNzaW9uL2ph dmFzY3JpcHQvZmFrZV9lbmRwb2ludHMuanMKaW5kZXggNjNhYjA1ZGMuLmU0YWU3MDIwIDEwMDY0 NAotLS0gYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2Zha2VfZW5kcG9pbnRzLmpzCisrKyBi L3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvZmFrZV9lbmRwb2ludHMuanMKQEAgLTExLDYgKzEx LDEyIEBAIGRlZmluZShmdW5jdGlvbiAoKSB7CiAgIHJldHVybiB7CiAgICAgJ3N0YXRpYyc6ICcv YmFzZS9wZ2FkbWluL3N0YXRpYy88cGF0aDpmaWxlbmFtZT4nLAogICAgICdzcWxlZGl0b3IucG9s bCc6ICcvc3FsZWRpdG9yL3F1ZXJ5X3Rvb2wvcG9sbC88cGF0aDp0cmFuc19pZD4nLAotICAgICdz cWxlZGl0b3IucXVlcnlfdG9vbF9zdGFydCc6ICcvc3FsZWRpdG9yL3F1ZXJ5X3Rvb2wvc3RhcnQv PHBhdGg6dHJhbnNfaWQ+JworICAgICdzcWxlZGl0b3IucXVlcnlfdG9vbF9zdGFydCc6ICcvc3Fs ZWRpdG9yL3F1ZXJ5X3Rvb2wvc3RhcnQvPHBhdGg6dHJhbnNfaWQ+JywKKyAgICAnYmFja3VwLmNy ZWF0ZV9zZXJ2ZXJfam9iJzogICcvYmFja3VwL2pvYi88aW50OnNpZD4nLAorICAgICdiYWNrdXAu Y3JlYXRlX29iamVjdF9qb2InOiAgJy9iYWNrdXAvam9iLzxpbnQ6c2lkPi9vYmplY3QnLAorICAg ICdkYXRhZ3JpZC5pbml0aWFsaXplX2RhdGFncmlkJzogJy9pbml0aWFsaXplL2RhdGFncmlkLzxp bnQ6Y21kX3R5cGU+LzxvYmpfdHlwZT4vPGludDpzZ2lkPi88aW50OnNpZD4vPGludDpkaWQ+Lzxp bnQ6b2JqX2lkPicsCisgICAgJ2RhdGFncmlkLmluaXRpYWxpemVfcXVlcnlfdG9vbCc6ICcvaW5p dGlhbGl6ZS9xdWVyeV90b29sLzxpbnQ6c2dpZD4vPGludDpzaWQ+JywKKyAgICAnZGF0YWdyaWQu aW5pdGlhbGl6ZV9xdWVyeV90b29sX3dpdGhfZGlkJzogJy9pbml0aWFsaXplL3F1ZXJ5X3Rvb2wv PGludDpzZ2lkPi88aW50OnNpZD4vPGludDpkaWQ+JywKKwogICB9OwogfSk7CmRpZmYgLS1naXQg YS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2Zha2VfbW9kZWwuanMgYi93ZWIvcmVncmVzc2lv bi9qYXZhc2NyaXB0L2Zha2VfbW9kZWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAuLmFjZmFhNTMyCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNj cmlwdC9mYWtlX21vZGVsLmpzCkBAIC0wLDAgKzEsMjEgQEAKK2V4cG9ydCBjbGFzcyBGYWtlTW9k ZWwgeworICBjb25zdHJ1Y3RvcigpIHsKKyAgICB0aGlzLnZhbHVlcyA9IHt9OworICB9CisKKyAg c2V0KGtleSwgdmFsdWUpIHsKKyAgICB0aGlzLnZhbHVlc1trZXldID0gdmFsdWU7CisgIH0KKwor ICBnZXQoa2V5KSB7CisgICAgcmV0dXJuIHRoaXMudmFsdWVzW2tleV07CisgIH0KKworICB1bnNl dChrZXkpIHsKKyAgICBkZWxldGUgdGhpcy52YWx1ZXNba2V5XTsKKyAgfQorCisgIHRvSlNPTigp IHsKKyAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy52YWx1ZXMpOworICB9Cit9CmRp ZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3RyZWUvcGdhZG1pbl90cmVlX25v ZGVfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvdHJlZS9wZ2FkbWluX3RyZWVf bm9kZV9zcGVjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4xY2FiNjVm MAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvdHJlZS9wZ2Fk bWluX3RyZWVfbm9kZV9zcGVjLmpzCkBAIC0wLDAgKzEsMzUzIEBACisvLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v LworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQg KEMpIDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNv ZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLworCitpbXBvcnQgeworICBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21FbGVt ZW50LAorICBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21JZGVudGlmaWVyCit9IGZyb20gIi4uLy4u Ly4uL3BnYWRtaW4vc3RhdGljL2pzL3RyZWUvcGdhZG1pbl90cmVlX25vZGUiOworaW1wb3J0IHtU cmVlfSBmcm9tICIuLi8uLi8uLi9wZ2FkbWluL3N0YXRpYy9qcy90cmVlL3RyZWUiOworCitjb25z dCBjb250ZXh0ID0gZGVzY3JpYmU7CisKK2Rlc2NyaWJlKCd0cmVlI25vZGUjZ2V0VHJlZU5vZGVI aWVyYXJjaHknLCAoKSA9PiB7CisgIGxldCBicm93c2VyOworICBsZXQgbmV3VHJlZTsKKyAgbGV0 IHRyYW5zbGF0ZVRyZWVOb2RlSWRGcm9tQUNJVHJlZVNweTsKKyAgYmVmb3JlRWFjaCgoKSA9PiB7 CisgICAgbmV3VHJlZSA9IG5ldyBUcmVlKCk7CisgICAgYnJvd3NlciA9IHsKKyAgICAgIE5vZGVz OiB7CisgICAgICAgICdzcGVjaWFsIG9uZSc6IHtoYXNJZDogdHJ1ZX0sCisgICAgICAgICdjaGls ZCBzcGVjaWFsJzoge2hhc0lkOiB0cnVlfSwKKyAgICAgICAgJ290aGVyIHR5cGUnOiB7aGFzSWQ6 IHRydWV9LAorICAgICAgICAndGFibGUnOiB7aGFzSWQ6IHRydWV9LAorICAgICAgICAncGFydGl0 aW9uJzoge2hhc0lkOiB0cnVlfSwKKyAgICAgICAgJ25vIGlkJzoge2hhc0lkOiBmYWxzZX0sCisg ICAgICB9CisgICAgfTsKKyAgICBicm93c2VyLnRyZWVNZW51ID0gbmV3VHJlZTsKKyAgICB0cmFu c2xhdGVUcmVlTm9kZUlkRnJvbUFDSVRyZWVTcHkgPSBzcHlPbihuZXdUcmVlLCAndHJhbnNsYXRl VHJlZU5vZGVJZEZyb21BQ0lUcmVlJyk7CisgIH0pOworCisgIGNvbnRleHQoJ2dldFRyZWVOb2Rl SGllcmFyY2h5IGlzIGNhbGxlZCB3aXRoIGFjaVRyZWVOb2RlIG9iamVjdCcsICgpID0+IHsKKyAg ICBkZXNjcmliZSgnV2hlbiB0aGUgY3VycmVudCBub2RlIGlzIHJvb3QgZWxlbWVudCcsICgpID0+ IHsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICBuZXdUcmVlLmFkZE5ld05vZGUo J3Jvb3QnLCB7CisgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAgICAgICAg ICdfdHlwZSc6ICdzcGVjaWFsIG9uZScKKyAgICAgICAgfSwgW10pOworICAgICAgICB0cmFuc2xh dGVUcmVlTm9kZUlkRnJvbUFDSVRyZWVTcHkuYW5kLnJldHVyblZhbHVlKFsncm9vdCddKTsKKyAg ICAgIH0pOworCisgICAgICBpdCgncmV0dXJucyBhIG9iamVjdCB3aXRoIHRoZSBlbGVtZW50IHR5 cGUgcGFzc2VkIGRhdGEgYW5kIHByaW9yaXR5ID09IDAnLCAoKSA9PiB7CisgICAgICAgIGNvbnN0 IHJlc3VsdCA9IGdldFRyZWVOb2RlSGllcmFyY2h5RnJvbUlkZW50aWZpZXIuYmluZChicm93c2Vy KSgncm9vdCcpOworICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsKKyAgICAgICAgICAn c3BlY2lhbCBvbmUnOiB7CisgICAgICAgICAgICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisg ICAgICAgICAgICAnX3R5cGUnOiAnc3BlY2lhbCBvbmUnLAorICAgICAgICAgICAgJ3ByaW9yaXR5 JzogMCwKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7CisKKyAg ICBkZXNjcmliZSgnV2hlbiB0aGUgY3VycmVudCBub2RlIGlzIG5vdCBvZiBhIGtub3duIHR5cGUn LCAoKSA9PiB7CisgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgbmV3VHJlZS5hZGRO ZXdOb2RlKCdyb290JywgeworICAgICAgICAgICdzb21lIGtleSc6ICdzb21lIHZhbHVlJywKKyAg ICAgICAgICAnX3R5cGUnOiAnZG8gbm90IGV4aXN0JworICAgICAgICB9LCBbXSk7CisgICAgICAg IHRyYW5zbGF0ZVRyZWVOb2RlSWRGcm9tQUNJVHJlZVNweS5hbmQucmV0dXJuVmFsdWUoWydyb290 J10pOworICAgICAgfSk7CisKKyAgICAgIGl0KCdyZXR1cm5zIGEgZW1wdHkgb2JqZWN0JywgKCkg PT4geworICAgICAgICBjb25zdCByZXN1bHQgPSBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21JZGVu dGlmaWVyLmJpbmQoYnJvd3NlcikoJ3Jvb3QnKTsKKyAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9F cXVhbCh7fSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCdXaGVuIHRoZSBj dXJyZW50IG5vZGUgdHlwZSBoYXMgbm8gaWQnLCAoKSA9PiB7CisgICAgICBiZWZvcmVFYWNoKCgp ID0+IHsKKyAgICAgICAgbmV3VHJlZS5hZGROZXdOb2RlKCdyb290JywgeworICAgICAgICAgICdz b21lIGtleSc6ICdzb21lIHZhbHVlJywKKyAgICAgICAgICAnX3R5cGUnOiAnbm8gaWQnCisgICAg ICAgIH0sIFtdKTsKKyAgICAgICAgdHJhbnNsYXRlVHJlZU5vZGVJZEZyb21BQ0lUcmVlU3B5LmFu ZC5yZXR1cm5WYWx1ZShbJ3Jvb3QnXSk7CisgICAgICB9KTsKKworICAgICAgaXQoJ3JldHVybnMg YSBlbXB0eSBvYmplY3QnLCAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFRyZWVO b2RlSGllcmFyY2h5RnJvbUlkZW50aWZpZXIuYmluZChicm93c2VyKSgncm9vdCcpOworICAgICAg ICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHt9KTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAg ZGVzY3JpYmUoJ1doZW4gdGhlIGN1cnJlbnQgbm9kZSBpcyBhdCB0aGUgc2Vjb25kIGxldmVsJywg KCkgPT4geworICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgIG5ld1RyZWUuYWRkTmV3 Tm9kZSgncm9vdCcsIHsKKyAgICAgICAgICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisgICAg ICAgICAgJ190eXBlJzogJ3NwZWNpYWwgb25lJworICAgICAgICB9LCBbXSk7CisgICAgICAgIG5l d1RyZWUuYWRkTmV3Tm9kZSgnZmlyc3QgY2hpbGQnLCB7CisgICAgICAgICAgJ3NvbWUga2V5Jzog J3NvbWUgb3RoZXIgdmFsdWUnLAorICAgICAgICAgICdfdHlwZSc6ICdjaGlsZCBzcGVjaWFsJwor ICAgICAgICB9LCBbJ3Jvb3QnXSk7CisgICAgICAgIHRyYW5zbGF0ZVRyZWVOb2RlSWRGcm9tQUNJ VHJlZVNweS5hbmQucmV0dXJuVmFsdWUoWydyb290JywgJ2ZpcnN0JyArCisgICAgICAgICcgY2hp bGQnXSk7CisgICAgICB9KTsKKworICAgICAgaXQoJ3JldHVybnMgYSBlbXB0eSBvYmplY3QnLCAo KSA9PiB7CisgICAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFRyZWVOb2RlSGllcmFyY2h5RnJvbUlk ZW50aWZpZXIuYmluZChicm93c2VyKSgnZmlyc3QgY2hpbGQnKTsKKyAgICAgICAgZXhwZWN0KHJl c3VsdCkudG9FcXVhbCh7CisgICAgICAgICAgJ2NoaWxkIHNwZWNpYWwnOiB7CisgICAgICAgICAg ICAnc29tZSBrZXknOiAnc29tZSBvdGhlciB2YWx1ZScsCisgICAgICAgICAgICAnX3R5cGUnOiAn Y2hpbGQgc3BlY2lhbCcsCisgICAgICAgICAgICAncHJpb3JpdHknOiAwLAorICAgICAgICAgIH0s CisgICAgICAgICAgJ3NwZWNpYWwgb25lJzogeworICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3Nv bWUgdmFsdWUnLAorICAgICAgICAgICAgJ190eXBlJzogJ3NwZWNpYWwgb25lJywKKyAgICAgICAg ICAgICdwcmlvcml0eSc6IC0xLAorICAgICAgICAgIH0sCisgICAgICAgIH0pOworICAgICAgfSk7 CisgICAgfSk7CisKKyAgICBjb250ZXh0KCdXaGVuIHRyZWUgYXMgInNwZWNpYWwgdHlwZSInLCAo KSA9PiB7CisgICAgICBjb250ZXh0KCdXaGVuICJzcGVjaWFsIHR5cGUiIGhhdmUgIm90aGVyIHR5 cGUiJywgKCkgPT4geworICAgICAgICBjb250ZXh0KCdXaGVuICJvdGhlciB0eXBlIiBoYXZlICJz cGVjaWFsIHR5cGUiJywgKCkgPT4geworICAgICAgICAgIGRlc2NyaWJlKCdXaGVuIHJldHJpZXZp bmcgbGVhZCBub2RlJywgKCkgPT4geworICAgICAgICAgICAgaXQoJ2RvZXMgbm90IG92ZXJyaWRl IHByZXZpb3VzIG5vZGUgdHlwZSBkYXRhJywgKCkgPT4geworICAgICAgICAgICAgICBuZXdUcmVl LmFkZE5ld05vZGUoJ3Jvb3QnLCB7CisgICAgICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUg dmFsdWUnLAorICAgICAgICAgICAgICAgICdfdHlwZSc6ICdzcGVjaWFsIG9uZScKKyAgICAgICAg ICAgICAgfSwgW10pOworICAgICAgICAgICAgICBuZXdUcmVlLmFkZE5ld05vZGUoJ2xldmVsIDEn LCB7CisgICAgICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAgICAgICAg ICAgICAgICdfdHlwZSc6ICdvdGhlciB0eXBlJworICAgICAgICAgICAgICB9LCBbJ3Jvb3QnXSk7 CisgICAgICAgICAgICAgIG5ld1RyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwgMicsIHsKKyAgICAgICAg ICAgICAgICAnc29tZSBrZXknOiAnZXhwZWN0ZWQgdmFsdWUnLAorICAgICAgICAgICAgICAgICdf dHlwZSc6ICdzcGVjaWFsIG9uZScsCisgICAgICAgICAgICAgICAgJ3NvbWUgb3RoZXIga2V5Jzog J3NvbWUgb3RoZXIgdmFsdWUnLAorICAgICAgICAgICAgICB9LCBbJ3Jvb3QnLCAnbGV2ZWwgMSdd KTsKKworICAgICAgICAgICAgICB0cmFuc2xhdGVUcmVlTm9kZUlkRnJvbUFDSVRyZWVTcHkuYW5k LnJldHVyblZhbHVlKFsncm9vdCcsICdsZXZlbCAxJywgJ2xldmVsIDInXSk7CisKKyAgICAgICAg ICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHJlZU5vZGVIaWVyYXJjaHlGcm9tSWRlbnRpZmllci5i aW5kKGJyb3dzZXIpKCdsZXZlbCAyJyk7CisgICAgICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRv RXF1YWwoeworICAgICAgICAgICAgICAgICdzcGVjaWFsIG9uZSc6IHsKKyAgICAgICAgICAgICAg ICAgICdzb21lIGtleSc6ICdleHBlY3RlZCB2YWx1ZScsCisgICAgICAgICAgICAgICAgICAnX3R5 cGUnOiAnc3BlY2lhbCBvbmUnLAorICAgICAgICAgICAgICAgICAgJ3NvbWUgb3RoZXIga2V5Jzog J3NvbWUgb3RoZXIgdmFsdWUnLAorICAgICAgICAgICAgICAgICAgJ3ByaW9yaXR5JzogMCwKKyAg ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICdvdGhlciB0eXBlJzogeworICAgICAg ICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAgICAgICAgICAgICAgICAg J190eXBlJzogJ290aGVyIHR5cGUnLAorICAgICAgICAgICAgICAgICAgJ3ByaW9yaXR5JzogLTEs CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsK KyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGNv bnRleHQoJ1doZW4gdHJlZSBoYXMgdGFibGUnLCAoKSA9PiB7CisgICAgICBjb250ZXh0KCd3aGVu IHRhYmxlIGhhcyBwYXJ0aXRpb24nLCAoKSA9PiB7CisgICAgICAgIGl0KCdyZXR1cm5zIHRhYmxl IHdpdGggcGFydGl0aW9uIHBhcmFtZXRlcnMnLCAoKSA9PiB7CisgICAgICAgICAgbmV3VHJlZS5h ZGROZXdOb2RlKCdyb290JywgeworICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUn LAorICAgICAgICAgICAgJ190eXBlJzogJ3NwZWNpYWwgb25lJworICAgICAgICAgIH0sIFtdKTsK KyAgICAgICAgICBuZXdUcmVlLmFkZE5ld05vZGUoJ2xldmVsIDEnLCB7CisgICAgICAgICAgICAn c29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisgICAgICAgICAgICAnX3R5cGUnOiAndGFibGUnCisg ICAgICAgICAgfSwgWydyb290J10pOworICAgICAgICAgIG5ld1RyZWUuYWRkTmV3Tm9kZSgnbGV2 ZWwgMicsIHsKKyAgICAgICAgICAgICdzb21lIGtleSc6ICdleHBlY3RlZCB2YWx1ZScsCisgICAg ICAgICAgICAnX3R5cGUnOiAncGFydGl0aW9uJywKKyAgICAgICAgICAgICdzb21lIG90aGVyIGtl eSc6ICdzb21lIG90aGVyIHZhbHVlJywKKyAgICAgICAgICB9LCBbJ3Jvb3QnLCAnbGV2ZWwgMSdd KTsKKworICAgICAgICAgIHRyYW5zbGF0ZVRyZWVOb2RlSWRGcm9tQUNJVHJlZVNweS5hbmQucmV0 dXJuVmFsdWUoWydyb290JywgJ2xldmVsIDEnLCAnbGV2ZWwgMiddKTsKKworICAgICAgICAgIGNv bnN0IHJlc3VsdCA9IGdldFRyZWVOb2RlSGllcmFyY2h5RnJvbUlkZW50aWZpZXIuYmluZChicm93 c2VyKSgnbGV2ZWwgMicpOworICAgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeworICAg ICAgICAgICAgJ3NwZWNpYWwgb25lJzogeworICAgICAgICAgICAgICAnc29tZSBrZXknOiAnc29t ZSB2YWx1ZScsCisgICAgICAgICAgICAgICdfdHlwZSc6ICdzcGVjaWFsIG9uZScsCisgICAgICAg ICAgICAgICdwcmlvcml0eSc6IC0xLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICd0YWJs ZSc6IHsKKyAgICAgICAgICAgICAgJ3NvbWUga2V5JzogJ2V4cGVjdGVkIHZhbHVlJywKKyAgICAg ICAgICAgICAgJ3NvbWUgb3RoZXIga2V5JzogJ3NvbWUgb3RoZXIgdmFsdWUnLAorICAgICAgICAg ICAgICAnX3R5cGUnOiAncGFydGl0aW9uJywKKyAgICAgICAgICAgICAgJ3ByaW9yaXR5JzogMCwK KyAgICAgICAgICAgIH0sCisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgfSk7Cisg ICAgfSk7CisgIH0pOworCisgIGNvbnRleHQoJ2dldFRyZWVOb2RlSGllcmFyY2h5IGlzIGNhbGxl ZCB3aXRoIFRyZWVOb2RlIG9iamVjdCcsICgpID0+IHsKKyAgICBsZXQgdHJlZU5vZGU7CisgICAg ZGVzY3JpYmUoJ1doZW4gdGhlIGN1cnJlbnQgbm9kZSBpcyByb290IGVsZW1lbnQnLCAoKSA9PiB7 CisgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgdHJlZU5vZGUgPSBuZXdUcmVlLmFk ZE5ld05vZGUoJ3Jvb3QnLCB7CisgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAor ICAgICAgICAgICdfdHlwZSc6ICdzcGVjaWFsIG9uZScKKyAgICAgICAgfSwgW10pOworICAgICAg fSk7CisKKyAgICAgIGl0KCdyZXR1cm5zIGEgb2JqZWN0IHdpdGggdGhlIGVsZW1lbnQgdHlwZSBw YXNzZWQgZGF0YSBhbmQgcHJpb3JpdHkgPT0gMCcsICgpID0+IHsKKyAgICAgICAgY29uc3QgcmVz dWx0ID0gZ2V0VHJlZU5vZGVIaWVyYXJjaHlGcm9tRWxlbWVudChicm93c2VyLCB0cmVlTm9kZSk7 CisgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeworICAgICAgICAgICdzcGVjaWFsIG9u ZSc6IHsKKyAgICAgICAgICAgICdzb21lIGtleSc6ICdzb21lIHZhbHVlJywKKyAgICAgICAgICAg ICdfdHlwZSc6ICdzcGVjaWFsIG9uZScsCisgICAgICAgICAgICAncHJpb3JpdHknOiAwLAorICAg ICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJl KCdXaGVuIHRoZSBjdXJyZW50IG5vZGUgaXMgbm90IG9mIGEga25vd24gdHlwZScsICgpID0+IHsK KyAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICB0cmVlTm9kZSA9IG5ld1RyZWUuYWRk TmV3Tm9kZSgncm9vdCcsIHsKKyAgICAgICAgICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisg ICAgICAgICAgJ190eXBlJzogJ2RvIG5vdCBleGlzdCcKKyAgICAgICAgfSwgW10pOworICAgICAg fSk7CisKKyAgICAgIGl0KCdyZXR1cm5zIGEgZW1wdHkgb2JqZWN0JywgKCkgPT4geworICAgICAg ICBjb25zdCByZXN1bHQgPSBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21FbGVtZW50KGJyb3dzZXIs IHRyZWVOb2RlKTsKKyAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7fSk7CisgICAgICB9 KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCdXaGVuIHRoZSBjdXJyZW50IG5vZGUgdHlwZSBo YXMgbm8gaWQnLCAoKSA9PiB7CisgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgdHJl ZU5vZGUgPSBuZXdUcmVlLmFkZE5ld05vZGUoJ3Jvb3QnLCB7CisgICAgICAgICAgJ3NvbWUga2V5 JzogJ3NvbWUgdmFsdWUnLAorICAgICAgICAgICdfdHlwZSc6ICdubyBpZCcKKyAgICAgICAgfSwg W10pOworICAgICAgfSk7CisKKyAgICAgIGl0KCdyZXR1cm5zIGEgZW1wdHkgb2JqZWN0JywgKCkg PT4geworICAgICAgICBjb25zdCByZXN1bHQgPSBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21FbGVt ZW50KGJyb3dzZXIsIHRyZWVOb2RlKTsKKyAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7 fSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCdXaGVuIHRoZSBjdXJyZW50 IG5vZGUgaXMgYXQgdGhlIHNlY29uZCBsZXZlbCcsICgpID0+IHsKKyAgICAgIGJlZm9yZUVhY2go KCkgPT4geworICAgICAgICBuZXdUcmVlLmFkZE5ld05vZGUoJ3Jvb3QnLCB7CisgICAgICAgICAg J3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAgICAgICAgICdfdHlwZSc6ICdzcGVjaWFsIG9u ZScKKyAgICAgICAgfSwgW10pOworICAgICAgICB0cmVlTm9kZSA9IG5ld1RyZWUuYWRkTmV3Tm9k ZSgnZmlyc3QgY2hpbGQnLCB7CisgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgb3RoZXIgdmFs dWUnLAorICAgICAgICAgICdfdHlwZSc6ICdjaGlsZCBzcGVjaWFsJworICAgICAgICB9LCBbJ3Jv b3QnXSk7CisgICAgICB9KTsKKworICAgICAgaXQoJ3JldHVybnMgYSBlbXB0eSBvYmplY3QnLCAo KSA9PiB7CisgICAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFRyZWVOb2RlSGllcmFyY2h5RnJvbUVs ZW1lbnQoYnJvd3NlciwgdHJlZU5vZGUpOworICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFs KHsKKyAgICAgICAgICAnY2hpbGQgc3BlY2lhbCc6IHsKKyAgICAgICAgICAgICdzb21lIGtleSc6 ICdzb21lIG90aGVyIHZhbHVlJywKKyAgICAgICAgICAgICdfdHlwZSc6ICdjaGlsZCBzcGVjaWFs JywKKyAgICAgICAgICAgICdwcmlvcml0eSc6IDAsCisgICAgICAgICAgfSwKKyAgICAgICAgICAn c3BlY2lhbCBvbmUnOiB7CisgICAgICAgICAgICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisg ICAgICAgICAgICAnX3R5cGUnOiAnc3BlY2lhbCBvbmUnLAorICAgICAgICAgICAgJ3ByaW9yaXR5 JzogLTEsCisgICAgICAgICAgfSwKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKwor ICAgIGNvbnRleHQoJ1doZW4gdHJlZSBhcyAic3BlY2lhbCB0eXBlIicsICgpID0+IHsKKyAgICAg IGNvbnRleHQoJ1doZW4gInNwZWNpYWwgdHlwZSIgaGF2ZSAib3RoZXIgdHlwZSInLCAoKSA9PiB7 CisgICAgICAgIGNvbnRleHQoJ1doZW4gIm90aGVyIHR5cGUiIGhhdmUgInNwZWNpYWwgdHlwZSIn LCAoKSA9PiB7CisgICAgICAgICAgZGVzY3JpYmUoJ1doZW4gcmV0cmlldmluZyBsZWFkIG5vZGUn LCAoKSA9PiB7CisgICAgICAgICAgICBpdCgnZG9lcyBub3Qgb3ZlcnJpZGUgcHJldmlvdXMgbm9k ZSB0eXBlIGRhdGEnLCAoKSA9PiB7CisgICAgICAgICAgICAgIG5ld1RyZWUuYWRkTmV3Tm9kZSgn cm9vdCcsIHsKKyAgICAgICAgICAgICAgICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisgICAg ICAgICAgICAgICAgJ190eXBlJzogJ3NwZWNpYWwgb25lJworICAgICAgICAgICAgICB9LCBbXSk7 CisgICAgICAgICAgICAgIG5ld1RyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwgMScsIHsKKyAgICAgICAg ICAgICAgICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisgICAgICAgICAgICAgICAgJ190eXBl JzogJ290aGVyIHR5cGUnCisgICAgICAgICAgICAgIH0sIFsncm9vdCddKTsKKyAgICAgICAgICAg ICAgdHJlZU5vZGUgPSBuZXdUcmVlLmFkZE5ld05vZGUoJ2xldmVsIDInLCB7CisgICAgICAgICAg ICAgICAgJ3NvbWUga2V5JzogJ2V4cGVjdGVkIHZhbHVlJywKKyAgICAgICAgICAgICAgICAnX3R5 cGUnOiAnc3BlY2lhbCBvbmUnLAorICAgICAgICAgICAgICAgICdzb21lIG90aGVyIGtleSc6ICdz b21lIG90aGVyIHZhbHVlJywKKyAgICAgICAgICAgICAgfSwgWydyb290JywgJ2xldmVsIDEnXSk7 CisKKyAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHJlZU5vZGVIaWVyYXJjaHlGcm9t RWxlbWVudChicm93c2VyLCB0cmVlTm9kZSk7CisgICAgICAgICAgICAgIGV4cGVjdChyZXN1bHQp LnRvRXF1YWwoeworICAgICAgICAgICAgICAgICdzcGVjaWFsIG9uZSc6IHsKKyAgICAgICAgICAg ICAgICAgICdzb21lIGtleSc6ICdleHBlY3RlZCB2YWx1ZScsCisgICAgICAgICAgICAgICAgICAn X3R5cGUnOiAnc3BlY2lhbCBvbmUnLAorICAgICAgICAgICAgICAgICAgJ3NvbWUgb3RoZXIga2V5 JzogJ3NvbWUgb3RoZXIgdmFsdWUnLAorICAgICAgICAgICAgICAgICAgJ3ByaW9yaXR5JzogMCwK KyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICdvdGhlciB0eXBlJzogeworICAg ICAgICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAgICAgICAgICAgICAg ICAgJ190eXBlJzogJ290aGVyIHR5cGUnLAorICAgICAgICAgICAgICAgICAgJ3ByaW9yaXR5Jzog LTEsCisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9 KTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAg IGNvbnRleHQoJ1doZW4gdHJlZSBoYXMgdGFibGUnLCAoKSA9PiB7CisgICAgICBjb250ZXh0KCd3 aGVuIHRhYmxlIGhhcyBwYXJ0aXRpb24nLCAoKSA9PiB7CisgICAgICAgIGl0KCdyZXR1cm5zIHRh YmxlIHdpdGggcGFydGl0aW9uIHBhcmFtZXRlcnMnLCAoKSA9PiB7CisgICAgICAgICAgbmV3VHJl ZS5hZGROZXdOb2RlKCdyb290JywgeworICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFs dWUnLAorICAgICAgICAgICAgJ190eXBlJzogJ3NwZWNpYWwgb25lJworICAgICAgICAgIH0sIFtd KTsKKyAgICAgICAgICBuZXdUcmVlLmFkZE5ld05vZGUoJ2xldmVsIDEnLCB7CisgICAgICAgICAg ICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisgICAgICAgICAgICAnX3R5cGUnOiAndGFibGUn CisgICAgICAgICAgfSwgWydyb290J10pOworICAgICAgICAgIHRyZWVOb2RlID0gbmV3VHJlZS5h ZGROZXdOb2RlKCdsZXZlbCAyJywgeworICAgICAgICAgICAgJ3NvbWUga2V5JzogJ2V4cGVjdGVk IHZhbHVlJywKKyAgICAgICAgICAgICdfdHlwZSc6ICdwYXJ0aXRpb24nLAorICAgICAgICAgICAg J3NvbWUgb3RoZXIga2V5JzogJ3NvbWUgb3RoZXIgdmFsdWUnLAorICAgICAgICAgIH0sIFsncm9v dCcsICdsZXZlbCAxJ10pOworCisgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHJlZU5vZGVI aWVyYXJjaHlGcm9tRWxlbWVudChicm93c2VyLCB0cmVlTm9kZSk7CisgICAgICAgICAgZXhwZWN0 KHJlc3VsdCkudG9FcXVhbCh7CisgICAgICAgICAgICAnc3BlY2lhbCBvbmUnOiB7CisgICAgICAg ICAgICAgICdzb21lIGtleSc6ICdzb21lIHZhbHVlJywKKyAgICAgICAgICAgICAgJ190eXBlJzog J3NwZWNpYWwgb25lJywKKyAgICAgICAgICAgICAgJ3ByaW9yaXR5JzogLTEsCisgICAgICAgICAg ICB9LAorICAgICAgICAgICAgJ3RhYmxlJzogeworICAgICAgICAgICAgICAnc29tZSBrZXknOiAn ZXhwZWN0ZWQgdmFsdWUnLAorICAgICAgICAgICAgICAnc29tZSBvdGhlciBrZXknOiAnc29tZSBv dGhlciB2YWx1ZScsCisgICAgICAgICAgICAgICdfdHlwZSc6ICdwYXJ0aXRpb24nLAorICAgICAg ICAgICAgICAncHJpb3JpdHknOiAwLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICB9KTsKKyAg ICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7Cit9KTsK --001a114449ced999d805691a0e92--