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 1fCBp7-0005v8-OY for pgadmin-hackers@arkaria.postgresql.org; Fri, 27 Apr 2018 22:26:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1fCBp4-00054n-Gs for pgadmin-hackers@arkaria.postgresql.org; Fri, 27 Apr 2018 22:26:34 +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 1fCBp3-00054d-DS for pgadmin-hackers@lists.postgresql.org; Fri, 27 Apr 2018 22:26:34 +0000 Received: from mx0a-00296801.pphosted.com ([148.163.150.38]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fCBos-0006Ku-Pt for pgadmin-hackers@postgresql.org; Fri, 27 Apr 2018 22:26:31 +0000 Received: from pps.filterd (m0114583.ppops.net [127.0.0.1]) by mx0a-00296801.pphosted.com (8.16.0.22/8.16.0.22) with SMTP id w3RMNJaa002206 for ; Fri, 27 Apr 2018 22:26:20 GMT Received: from mail-io0-f200.google.com (mail-io0-f200.google.com [209.85.223.200]) by mx0a-00296801.pphosted.com with ESMTP id 2hkk4qs4wg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 27 Apr 2018 22:26:18 +0000 Received: by mail-io0-f200.google.com with SMTP id c10-v6so3321926iob.11 for ; Fri, 27 Apr 2018 15:26:18 -0700 (PDT) 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=LalwcJ4VjPbjtubuTm9ABIii9jS/aiGxwmS+1dCcW2E=; b=PucIAyvDOBCPIQONRymqigDjJp00aCzr/yrYiNmKVlrolk+HvPNVXa9Ff7CfI7ffp2 I7NmM5tvwjoPs+6rSTw0w3ed7X1dBjgrfX5dZt1cJld7sTIPF04zp5iuMFo994+BJNS+ WQsZ7R3mV2LX/hmQ8n6O1Sg0NJCN2mqrdg5wF+3uZHfXXpd5e3hsnDcFRtVKDVyC420X wn2UhljtjLMY4flHz1bw9m9V8vn6INaGPiIN3wqgf+54ptEqHTLD4fOwfvcHXOzG+5em bAWGUgXSDDuf70nvU2WYr9WmNL8fXTnv1H/9P9uqKgKfwSWZXmZv/bJ7cn2f6mFGmk5g +kzw== X-Gm-Message-State: ALQs6tBcTMl9rR7DK2K+5rp8K1NvLsxi2ebmxknLfMR1qfoVPH+RROlj UOWd2K0Q3SBVP05NbAQs7cIb17GKoK6YnN2H1zX5idomE69vIH89fdSpSiFSVECmD/WYwtGXV7+ sOHEf7Rw35KTMk9GhECi/BFYgzLWAPGSWselHrxqCVJl924AB4++S90+dnUK2Er14hi/Z X-Received: by 2002:a6b:3708:: with SMTP id e8-v6mr4187454ioa.69.1524867977582; Fri, 27 Apr 2018 15:26:17 -0700 (PDT) X-Google-Smtp-Source: AB8JxZowiaqGKmikSx3+pUpEkhKbgrWk28T/OdYn3OuQoJy9Y7cz9KJGnvgiPJpXc6llvavbIlfPb3D28K8zAtqoZuM= X-Received: by 2002:a6b:3708:: with SMTP id e8-v6mr4187443ioa.69.1524867977235; Fri, 27 Apr 2018 15:26:17 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Joao De Almeida Pereira Date: Fri, 27 Apr 2018 22:25:41 +0000 Message-ID: Subject: Re: [pgadmin4][patch] Initial patch to decouple from ACI Tree To: Ashesh Vashi Cc: Dave Page , Khushboo Vashi , Murtuza Zabuawala , pgadmin-hackers Content-Type: multipart/mixed; boundary="0000000000001d3530056adbfecf" X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2018-04-27_06:,, signatures=0 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 priorityscore=1501 malwarescore=0 suspectscore=2 phishscore=0 bulkscore=0 spamscore=0 clxscore=1015 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1711220000 definitions=main-1804270208 X-Proofpoint-Quarantined: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --0000000000001d3530056adbfecf Content-Type: multipart/alternative; boundary="0000000000001d352b056adbfecd" --0000000000001d352b056adbfecd Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Hackers, As you are aware we kept on working on the patch, so we are attaching to this email a new version of the patch. This new version contains all the changes in the previous one plus more extractions of functions and refactoring of code. The objective of this patch is to create a separation between pgAdmin and the ACI Tree. We are doing this because we realized that at this point in time we have the ACI Tree all over the code of pgAdmin. I found a very interesting article that really talks about this: https://medium.freecodecamp.org/code-dependencies-are-the-devil-35ed28b556d In this patch there are some visions and ideas about the location of the code, the way to organize it and also try to pave the future for a application that is stable, easy to develop on and that can be release at a times notice. We are investing a big chunk of our time in doing this refactoring, but while doing that we also try to respond to the patches sent to the mailing list. We would like the feedback from the community because we believe this is a changing point for the application. The idea is to change the way we develop this application, instead of only correcting a bug of developing a feature, with every commit we should correct the bug or develop a feature but leave the code a little better than we found it (Refactoring, refactoring, refactoring). This is hard work but that is what the users from pgAdmin expect from this community of developers. =3D=3D=3D=3D=3D=3D It is a huge patch 86 files changed, 5492 inserts, 1840 deletions and we would like to get your feedback as soon as possible, because we are continuing to work on it which means it is going to grow in size. At this point in time we still have 124 of 176 calls to the function itemData from ACITree. What does each patch contain: 0001: Very simple patch, we found out that the linter was not looking into all the javascript test files, so this patch will ensure it is 0002: New Tree abstraction. This patch contains the new Tree that works as an adaptor for ACI Tree and is going to be used on all the extractions that we are doing 0003: Code that extracts, wrap with tests and replace ACI Tree invocations. We start creating new pattern for the location of Javascript files and their structure. Create patterns for creation of dialogs (backup and restore) Thanks Joao On Fri, Apr 27, 2018 at 5:34 AM Ashesh Vashi wrote: > I have quite a few comments for the patch. > I will send them soon. > > On Fri, Apr 27, 2018, 14:45 Dave Page wrote: > >> How is your work on this going Ashesh? Will you be committing today? >> >> On Wed, Apr 25, 2018 at 8:52 AM, Dave Page wrote: >> >>> Ashesh; you had agreed to work on this early this week. Please ensure >>> you do so today. >>> >>> Thanks. >>> >>> On Tue, Apr 24, 2018 at 8:13 PM, Joao De Almeida Pereira < >>> jdealmeidapereira@pivotal.io> wrote: >>> >>>> Hi Hackers, >>>> >>>> Can someone review and merge this patch? >>>> >>>> Thanks >>>> Joao >>>> >>>> On Wed, Apr 18, 2018 at 10:23 AM Joao De Almeida Pereira < >>>> jdealmeidapereira@pivotal.io> wrote: >>>> >>>>> Hi Hackers, >>>>> Any other comment about this patch? >>>>> >>>>> Thanks >>>>> Joao >>>>> >>>>> On Tue, Apr 10, 2018 at 12:00 PM Joao De Almeida Pereira < >>>>> jdealmeidapereira@pivotal.io> wrote: >>>>> >>>>>> Hello Khushboo >>>>>> >>>>>> On Mon, Apr 9, 2018 at 1:59 AM Khushboo Vashi < >>>>>> khushboo.vashi@enterprisedb.com> wrote: >>>>>> >>>>>>> Hi Joao, >>>>>>> >>>>>>> I have reviewed your patch and have some suggestions. >>>>>>> >>>>>>> On Sat, Apr 7, 2018 at 12:43 AM, Joao De Almeida Pereira < >>>>>>> jdealmeidapereira@pivotal.io> wrote: >>>>>>> >>>>>>>> Hello Murtuza/Dave, >>>>>>>> Yes now the extracted functions are spread into different files. >>>>>>>> The intent would be to make the files as small as possible, and al= so to >>>>>>>> group and name them in a way that would be easy to understand what= each >>>>>>>> file is doing without the need of opening it. >>>>>>>> As a example: >>>>>>>> static/js/backup will contain all the backup related functionality >>>>>>>> inside of this folder we can see the file: >>>>>>>> >>>>>>> menu_utils.js At this moment in time we decided to group all the >>>>>>>> functions that are related to the menu, but we can split that also= if we >>>>>>>> believe it is easier to see. >>>>>>>> >>>>>>> It's really very good to see the separated code for backup module. >>>>>>> As we have done for backup, we would like do it for other PG utilit= ies like >>>>>>> restore, maintenance etc. >>>>>>> Considering this, we should separate the code in a way that some of >>>>>>> the common functionalities can be used for other modules like menu= (as you >>>>>>> have mentioned above), dialogue factory etc. >>>>>>> Also, I think these functionalities should be in their respective >>>>>>> static folder instead of pgadmin/static. >>>>>>> >>>>>> >>>>>> About the location of the files. The move of the files to >>>>>> pgadmin/static/js was made on purpose in order to clearly separate >>>>>> Javascript from python code. >>>>>> The rational behind it was >>>>>> - Create a clear separation between the backend and frontend >>>>>> - Having Javascript code concentrated in a single place, hopefully, >>>>>> will encourage to developers to look for a functionality, that is al= ready >>>>>> implemented in another modules, because they are right there. (When = we >>>>>> started this journey we realized that the 'nodes' have a big groups = of code >>>>>> that could be shared, but because the Javascript is spread everywher= e it is >>>>>> much harder to look for it) >>>>>> >>>>>> >>>>>> There are some drawbacks of this separation: >>>>>> - When creating a new module we will need to put the javascript in a >>>>>> separate location from the backend code >>>>>> >>>>>> >>>>>>> >>>>>>> >>>>>>>> static/js/datagrid folder contains all the datagrid related >>>>>>>> functionality >>>>>>>> >>>>>>> Same as backup module, this should be in it's respective static/js >>>>>>> folder. >>>>>>> >>>>>>>> Inside of the folder we can see the files: >>>>>>>> get_panel_title.js is responsible for retrieving the name of the >>>>>>>> panel >>>>>>>> show_data.js is responsible for showing the datagrid >>>>>>>> show_query_tool.js is responsible for showing the query tool >>>>>>>> >>>>>>>> Does this structure make sense? >>>>>>>> Can you give an example of a comment that you think is missing and >>>>>>>> that could help? >>>>>>>> >>>>>>>> As a personal note, unless the algorithm is very obscure or very >>>>>>>> complicated, I believe that if the code needs comments it is a sig= nal that >>>>>>>> something needs to change in terms of naming, structure of the par= t in >>>>>>>> question. This being said, I am open to add some comments that mig= ht help >>>>>>>> people. >>>>>>>> >>>>>>> You are right, with the help of naming convention and structure of >>>>>>> the code, any one can get the idea about the code. But it is very u= seful to >>>>>>> understand the code >>>>>>> very easily with the proper comments especially when there are >>>>>>> multiple developers working on a single project. >>>>>>> >>>>>>> I found some of the places where it would be great to have comments= . >>>>>>> >>>>>>> - treeMenu: new tree.Tree() in a browser.js >>>>>>> - tree.js (especially Tree class) >>>>>>> >>>>>> About the comment point I need a more clear understanding on what >>>>>> kind of comments you are looking for. Because when you read the func= tion >>>>>> names you understand the intent, what they are doing. The parameters= also >>>>>> explain what you need to pass into them. >>>>>> >>>>>> If what you are looking for in these comments is the reasoning being >>>>>> the change itself, then that should be present in the commit message= . >>>>>> Specially because this is going to be a very big patch with a very b= ig >>>>>> number of changes. >>>>>> >>>>>>> >>>>>>> Thanks >>>>>>>> Joao >>>>>>>> =E2=80=8B >>>>>>>> >>>>>>>> Thanks, >>>>>>> Khushboo >>>>>>> >>>>>>>> >>>>>>>> On Fri, Apr 6, 2018 at 4:48 AM Murtuza Zabuawala < >>>>>>>> murtuza.zabuawala@enterprisedb.com> wrote: >>>>>>>> >>>>>>>>> Hi Joao, >>>>>>>>> >>>>>>>>> Patch looks good and working as expected. >>>>>>>>> >>>>>>>>> I also agree with Dave, Can we please add some comments in each >>>>>>>>> file which can help us to understand the flow, I'm saying because= now the >>>>>>>>> code is segregated in so many separate files it will be hard to k= eep track >>>>>>>>> of the flow from one file to another when debugging. >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Regards, >>>>>>>>> Murtuza Zabuawala >>>>>>>>> EnterpriseDB: http://www.enterprisedb.com >>>>>>>>> The Enterprise PostgreSQL Company >>>>>>>>> >>>>>>>>> >>>>>>>>> On Thu, Apr 5, 2018 at 7:08 PM, Joao De Almeida Pereira < >>>>>>>>> jdealmeidapereira@pivotal.io> wrote: >>>>>>>>> >>>>>>>>>> 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 wan= t to start >>>>>>>>>>>> the discussion and show some code. >>>>>>>>>>>> >>>>>>>>>>>> This job that we started is a massive tech debt chore that wil= l >>>>>>>>>>>> take some time to finalize and we would love the help of the c= ommunity to >>>>>>>>>>>> do it. >>>>>>>>>>>> >>>>>>>>>>>> *Summary of the patch:* >>>>>>>>>>>> 0001 patch: >>>>>>>>>>>> - Creates a new tree that will allow us to create a separatio= n >>>>>>>>>>>> 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 th= e 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 s= upported, the >>>>>>>>>>>> documentation is non existent and ACITree is no longer being a= ctively >>>>>>>>>>>> developed. >>>>>>>>>>>> >>>>>>>>>>>> Our process: >>>>>>>>>>>> 1. We "randomly" selected a function that is part of the >>>>>>>>>>>> ACITree. From this point we decided to replace that function w= ith 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 opt= ions: >>>>>>>>>>>> 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 wil= l 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 t= here 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 functio= n. >>>>>>>>>>>> >>>>>>>>>>>> 4. Extracted the function to a separate file >>>>>>>>>>>> >>>>>>>>>>>> 5. Wrap this function with tests >>>>>>>>>>>> >>>>>>>>>>>> 6. Refactor the function to ES6, give more declarative names t= o >>>>>>>>>>>> variables and break the functions into smaller chunks >>>>>>>>>>>> >>>>>>>>>>>> 7. When all the tests were passing we replaced ACITree with ou= r >>>>>>>>>>>> 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 t= he first step >>>>>>>>>>>> on the direction of completely isolating the ACITree so that w= e 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 >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>> >>> >>> >>> -- >>> Dave Page >>> Blog: http://pgsnake.blogspot.com >>> Twitter: @pgsnake >>> >>> EnterpriseDB UK: http://www.enterprisedb.com >>> The Enterprise PostgreSQL Company >>> >> >> >> >> -- >> Dave Page >> Blog: http://pgsnake.blogspot.com >> Twitter: @pgsnake >> >> EnterpriseDB UK: http://www.enterprisedb.com >> The Enterprise PostgreSQL Company >> > --0000000000001d352b056adbfecd Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Hackers,
As you are aware we kept on working on the = patch, so we are attaching to this email a new version of the patch.
Thi= s new version contains all the changes in the previous one plus more extrac= tions of functions and refactoring of code.

The objective of this pa= tch is to create a separation between pgAdmin and the ACI Tree. We are doin= g this because we realized that at this point in time we have the ACI Tree = all over the code of pgAdmin. I found a very interesting article that reall= y talks about this: https://medium.freecodecamp.org/code-depen= dencies-are-the-devil-35ed28b556d

In this patch there are some visions and ideas a= bout the location of the code, the way to organize it and also try to pave = the future for a application that is stable, easy to develop on and that ca= n be release at a times notice.

We are investing = a big chunk of our time in doing this refactoring, but while doing that we = also try to respond to the patches sent to the mailing list. We would like = the feedback from the community because we believe this is a changing point= for the application. The idea is to change the way we develop this applica= tion, instead of only correcting a bug of developing a feature, with every = commit we should correct the bug or develop a feature but leave the code a = little better than we found it (Refactoring, refactoring, refactoring). Thi= s is hard work but that is what the users from pgAdmin expect from this com= munity of developers.


=3D=3D=3D=3D= =3D=3D



It is a huge = patch
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 86 files changed, 5492 inserts, 1840 deleti= ons
and we would like to get your feedback as soon as possibl= e, because we are continuing to work on it which means it is going to grow = in size.=C2=A0


At this point in tim= e we still have 124 of 176 calls to the function itemData from ACITree.
=
What does each patch contain:
0001:
=C2=A0 Very simple pa= tch, we found out that the linter was not looking into all the javascript t= est files, so this patch will ensure it is

0002:=C2=A0 New Tree abstraction. This patch contains the new Tree that works = as an adaptor for ACI Tree and is going to be used on all the extractions t= hat we are doing

0003:
=C2=A0 Code that = extracts, wrap with tests and replace ACI Tree invocations.=C2=A0
=C2=A0 We start creating new pattern for the location of Javascript files = and their structure.
=C2=A0 Create patterns for creation of dialo= gs (backup and restore)
=C2=A0=C2=A0

Than= ks
Joao


On Fri, Apr 27, 2018 at 5:34 AM Ashesh Vashi <ashesh.vashi@enterprisedb.com> wr= ote:
I have quite= a few comments for the patch.
I will send them soon.=C2= =A0

On Fri, Apr = 27, 2018, 14:45 Dave Page <dpage@pgadmin.org> wrote:
How is your work on this going Ashesh? Will you = be committing today?

On Wed, Apr 25, 2018 at 8:52 AM, Dave Page <<= a href=3D"mailto:dpage@pgadmin.org" rel=3D"noreferrer" target=3D"_blank">dp= age@pgadmin.org> wrote:
Ashesh; you had agreed to work on this early this week. Pleas= e ensure you do so today.

Thanks.

On Tue, Apr 24, 2018 at 8:13 PM, Joa= o De Almeida Pereira <jdealmeidapereira@pivo= tal.io> wrote:
Hi Hackers,

Can someone review and merge this patch= ?

Thanks
=
Joao

On Wed, Apr 18, 2018 at 10:23 AM Joao De Almeida = Pereira <jdealmeidapereira@pivotal.io> wrote:
=
Hi Hackers,
Any other c= omment about this patch?

Thanks
Joao

On Tue, Apr 10, 2018 at 12:00 PM Joao De Almeida Pereira <= jdealmeidapereira@pivotal.io> wrote:
Hello Khushboo

=
On= Mon, Apr 9, 2018 at 1:59 AM Khushboo Vashi <khushboo.vashi= @enterprisedb.com> wrote:
Hi Joao,

I have reviewed your patch and have some suggestions.

<= /blockquote>
On Sat, Apr 7, 2018 at 12:43 AM, Joao De Almeida Pereir= a <jdealmeidapereira@pivotal.io> wrote:

Hello Murtuza/Dave,
Yes= now the extracted functions are spread into different files. The intent wo= uld be to make the files as small as possible, and also to group and name t= hem in a way that would be easy to understand what each file is doing witho= ut the need of opening it.
As a example:
static/js/b= ackup will contain all the backup related functionality inside of th= is folder we can see the file:

menu_utils.js At this moment in= time we decided to group all the functions that are related to the menu, b= ut we can split that also if we believe it is easier to see.

It's really very good to see the separa= ted code for backup module. As we have done for backup, we would like do it= for other PG utilities like restore, maintenance etc.
Considering this= , we should separate the code in a way that some of the common functionalit= ies can be used for other modules=C2=A0 like menu (as you have mentioned ab= ove), dialogue factory etc.
Also, I think these functionalities should = be in their respective static folder instead of pgadmin/static.
=

About the location of the files. The move of the files to pgadmin/static/j= s was made on purpose in order to clearly separate Javascript from python c= ode.
The rational behind it was
- Create a clear separa= tion between the backend and frontend
- Having Javascript code co= ncentrated in a single place, hopefully, will encourage to developers to lo= ok for a functionality, that is already implemented in another modules, bec= ause they are right there. (When we started this journey we realized that t= he 'nodes' have a big groups of code that could be shared, but beca= use the Javascript is spread everywhere it is much harder to look for it)


There are some drawbacks of this= separation:
- When creating a new module we will need to put the= javascript in a separate location from the backend code=C2=A0=C2=A0
<= /div>
=C2=A0
=C2=A0

static/js/datagrid folder contains all the datagrid related functionality

Same as backup module,=C2=A0 this should b= e in it's respective static/js folder.

Inside of the folder we can see the files:
get_panel_title.js
is responsible for retrieving the n= ame of the panel
show_data.js is responsible for= showing the datagrid
show_query_tool.js is resp= onsible for showing the query tool

Does this structure make sense?
Can yo= u give an example of a comment that you think is missing and that could hel= p?

As a personal note, unless the algorithm = is very obscure or very complicated, I believe that if the code needs comme= nts it is a signal that something needs to change in terms of naming, struc= ture of the part in question. This being said, I am open to add some commen= ts that might help people.

Y= ou are right, with the help of naming convention and structure of the code,= any one can get the idea about the code. But it is very useful to understa= nd the code=C2=A0
very easily with the proper comments especially= when there are multiple developers working on a single project.
=
I found some of the places where it would be great to have c= omments.

- treeMenu: new tree.Tree()=C2=A0 in a br= owser.js
- tree.js=C2=A0 (especially Tree class)
About the comment point I need a more clear understanding on what kin= d of comments you are looking for. Because when you read the function names= you understand the intent, what they are doing. The parameters also explai= n what you need to pass into them.

If what you are= looking for in these comments is the reasoning being the change itself, th= en that should be present in the commit message. Specially because this is = going to be a very big patch with a very big number of changes.
=

Thanks
Joao

=E2=80=8B

Thanks,
Khushboo=C2=A0
=
<= /div>

On Fri, Apr 6, 2018 at 4:48 AM Murtuza Zabuawala <murtu= za.zabuawala@enterprisedb.com> wrote:
Hi Joao,

Patch looks good and working as = expected.

I also agree with Dave, Can we please add some comments in each file= which can help us to understand the flow, I'm saying because now the c= ode is segregated in so many separate files it will be hard to keep track o= f the flow from one file to another when debugging.


=
--
Regards,
Murtuza Zabuawala
Ent= erpriseDB:=C2=A0http://www.enterprisedb.com
The Enterp= rise PostgreSQL Company


On Thu, Apr 5, 2018 at 7:08 PM, Joao De Alme= ida Pereira <jdealmeidapereira@pivotal.io> wrote:
Hi Khushboo,
Attached you can find both patches rebased<= /div>

Thanks


Hi Joao,
<= br>
Can you please rebase the second patch?

<= div>Thanks,
Khushboo


On Tue, Apr 3, 2018 at 1= 2:15 AM, Joao De Almeida Pereira <jdealmeida= pereira@pivotal.io> wrote:
Hi Hackers,

Attached= you can find the patch that will start to decouple pgAdmin from ACITree li= brary.
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 finaliz= e and we would love the help of the community to do it.

Summary of the patch:
0001 patch:=C2=A0
= =C2=A0- Creates a new tree that will allow us to create a separation betwee= n the application and ACI Tree
=C2=A0- Creates a Fake Tree (Test = double, for reference on the available test doubles:=C2=A0https://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
=C2=A0- Adds tests for all the tree functionalities<= /div>

0002 patch:
=C2=A0- Extracts, refactors,= adds tests and remove dependency from ACI Tree on:
- getTreeNodeHi= erarchy
- on backup.js: menu_enabled, menu_enabled_server, start_ba= ckup_global_server, backup_objects
- on datagrid.js: show_data_grid,= get_panel_title, show_query_tool
- Start using sprintf-js as Underscor= e.String is deprecating sprintf function
=C2=A0=C2=A0
Thi= s patch represents only 10 calls to ACITree.itemData out of 176 that are sp= read around our code


In D= epth 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.
<= br>
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" th= at a specific node of the tree find.
Given in order to replace th= e tree we would need to have a function that would give us the same informa= tion. We had 2 options:
=C2=A0 a) Create a tree with a function c= alled itemData
Pros:
=C2=A0- At first view this was the= simpler solution
=C2=A0- Would 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 n= ode would be responsible for giving it's data.
Pros:=C2=A0
=C2=A0- OOP Approach
=C2=A0- More flexible and we do not = need to bring the tree around, just a node
Cons:
=C2=A0= - Break the current status quo

Given these 2 optio= ns 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 sear= ched for occurrences of the function "itemData" and we found out = that there were 303 occurrences of "itemData" in the code and rou= ghly 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

<= div>6. Refactor the function to ES6, give more declarative names to variabl= es 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<= /div>

10. Ensure everything still works

11. Find the next function and execute from step 4 until all the f= unctions are replaced, refactored and tested.

As y= ou can see by the process this is a pretty huge undertake, because of the n= umber of calls to the function. This is just the first step on the directio= n of completely isolating the ACITree so that we can solve the problem with= a large number of elements on the tree.

What i= s on our radar that we need to address:
=C2=A0- Finish the co= mplete decoupling of the ACITree
=C2=A0- Performance of the curre= nt tree implementation
=C2=A0- Tweak the naming of the Tree class= to explicitly tell us this is to use only with ACITree.


Thanks
Joao






<= /div>--
Da= ve Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake
=
EnterpriseDB UK: http://www.enterprisedb.com
The Enterp= rise PostgreSQL Company



--
--0000000000001d352b056adbfecd-- --0000000000001d3530056adbfecf Content-Type: application/octet-stream; name="0001-Ensure-the-JS-linter-is-running-on-all-the-tests-fil.patch" Content-Disposition: attachment; filename="0001-Ensure-the-JS-linter-is-running-on-all-the-tests-fil.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jgihodwi0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FfZXNsaW50LmpzIGIvd2ViL3BnYV9lc2xpbnQuanMKaW5kZXgg OGM0ZTM4MDMuLjExNTExZDY3IDEwMDY0NAotLS0gYS93ZWIvcGdhX2VzbGludC5qcworKysgYi93 ZWIvcGdhX2VzbGludC5qcwpAQCAtMSw2ICsxLDcgQEAKICMhL3Vzci9iaW4vZW52IG5vZGUKIAog LyogZXNsaW50IG5vLWNvbnNvbGU6b2ZmICovCisvKiBlc2xpbnQgbm8tdW5kZWY6b2ZmICovCiAn dXNlIHN0cmljdCc7CiAKIGNvbnN0IGRlYnVnID0gKHByb2Nlc3MuYXJndi5pbmRleE9mKCctLWRl YnVnJykgPiAtMSksCkBAIC0xOCw5ICsxOSw5IEBAIGlmIChkZWJ1ZykgewogICByZXF1aXJlKCdk ZWJ1ZycpLmVuYWJsZSgnZXNsaW50OiosLWVzbGludDpjb2RlLXBhdGgnKTsKIH0KIAotY29uc3Qg ZnMgPSByZXF1aXJlKCdmcycpLAotICBwYXRoID0gcmVxdWlyZSgncGF0aCcpLAotICByZWFkID0g KGRpcikgPT4KK2NvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTsKK2NvbnN0IHBhdGggPSByZXF1aXJl KCdwYXRoJyk7Citjb25zdCByZWFkID0gKGRpcikgPT4KICAgZnMucmVhZGRpclN5bmMoZGlyKQog ICAucmVkdWNlKChmaWxlcywgZmlsZSkgPT4KICAgICBmcy5zdGF0U3luYyhwYXRoLmpvaW4oZGly LCBmaWxlKSkuaXNEaXJlY3RvcnkoKSA/CkBAIC0zOCw2ICszOSw2IEBAIHByb2Nlc3MuZXhpdENv ZGUgPSBlc2xpbnRfY2xpLmV4ZWN1dGUoCiAgIGZpbGVfYXJndiA+IC0xID8gYXJndiA6IGFyZ3Yu Y29uY2F0KAogICAgIHJlYWQocGF0aC5qb2luKF9fZGlybmFtZSwgJ3BnYWRtaW4nKSkKICAgKS5j b25jYXQoCi0gICAgJ3JlZ3Jlc3Npb24vamF2YXNjcmlwdC8qKi8qLmpzeCByZWdyZXNzaW9uL2ph dmFzY3JpcHQvKiovKi5qcyAqLmpzJworICAgIFsncmVncmVzc2lvbi9qYXZhc2NyaXB0LyoqLyou anN4JywncmVncmVzc2lvbi9qYXZhc2NyaXB0LyoqLyouanMnLCcqLmpzJ10KICAgKQogKTsKLS0g CjIuMTYuMgoK --0000000000001d3530056adbfecf Content-Type: application/octet-stream; name="0002-New-tree-implementation.patch" Content-Disposition: attachment; filename="0002-New-tree-implementation.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jgihogaz1 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2pzL2Jyb3dzZXIuanMgYi93 ZWIvcGdhZG1pbi9icm93c2VyL3N0YXRpYy9qcy9icm93c2VyLmpzCmluZGV4IDg5N2QyNzA4Li5m YzY4MDg5ZiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvYnJvd3Nl ci5qcworKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3N0YXRpYy9qcy9icm93c2VyLmpzCkBAIC0x LDQgKzEsNSBAQAogZGVmaW5lKCdwZ2FkbWluLmJyb3dzZXInLCBbCisgICdzb3VyY2VzL3RyZWUv dHJlZScsCiAgICdzb3VyY2VzL2dldHRleHQnLCAnc291cmNlcy91cmxfZm9yJywgJ3JlcXVpcmUn LCAnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAndW5kZXJzY29yZS5zdHJpbmcnLAogICAnYm9vdHN0 cmFwJywgJ3NvdXJjZXMvcGdhZG1pbicsICdwZ2FkbWluLmFsZXJ0aWZ5anMnLCAnYnVuZGxlZF9j b2RlbWlycm9yJywKICAgJ3NvdXJjZXMvY2hlY2tfbm9kZV92aXNpYmlsaXR5JywgJ3NvdXJjZXMv bW9kaWZ5X2FuaW1hdGlvbicsICdwZ2FkbWluLmJyb3dzZXIudXRpbHMnLCAnd2Nkb2NrZXInLApA QCAtMTAsNiArMTEsNyBAQCBkZWZpbmUoJ3BnYWRtaW4uYnJvd3NlcicsIFsKICAgJ3NvdXJjZXMv Y29kZW1pcnJvci9hZGRvbi9mb2xkL3BnYWRtaW4tc3FsZm9sZGNvZGUnLAogICAncGdhZG1pbi5i cm93c2VyLmtleWJvYXJkJywKIF0sIGZ1bmN0aW9uKAorICB0cmVlLAogICBnZXR0ZXh0LCB1cmxf Zm9yLCByZXF1aXJlLCAkLCBfLCBTLCBCb290c3RyYXAsIHBnQWRtaW4sIEFsZXJ0aWZ5LAogICBj b2RlbWlycm9yLCBjaGVja05vZGVWaXNpYmlsaXR5LCBtb2RpZnlBbmltYXRpb24KICkgewpAQCAt ODYsNiArODgsNyBAQCBkZWZpbmUoJ3BnYWRtaW4uYnJvd3NlcicsIFsKICAgICAgIH0pOwogCiAg ICAgICBiLnRyZWUgPSAkKCcjdHJlZScpLmFjaVRyZWUoJ2FwaScpOworICAgICAgYi50cmVlTWVu dS5yZWdpc3RlcigkKCcjdHJlZScpKTsKICAgICB9OwogCiAgIC8vIEV4dGVuZCB0aGUgYnJvd3Nl ciBjbGFzcyBhdHRyaWJ1dGVzCkBAIC0xMDAsNiArMTAzLDcgQEAgZGVmaW5lKCdwZ2FkbWluLmJy b3dzZXInLCBbCiAgICAgZWRpdG9yOm51bGwsCiAgICAgLy8gTGVmdCBoYW5kIGJyb3dzZXIgdHJl ZQogICAgIHRyZWU6bnVsbCwKKyAgICB0cmVlTWVudTogbmV3IHRyZWUuVHJlZSgpLAogICAgIC8v IGxpc3Qgb2Ygc2NyaXB0IHRvIGJlIGxvYWRlZCwgd2hlbiBhIGNlcnRhaW4gdHlwZSBvZiBub2Rl IGlzIGxvYWRlZAogICAgIC8vIEl0IHdpbGwgYmUgdXNlZCB0byByZWdpc3RlciBleHRlbnNpb25z LCB0b29scywgY2hpbGQgbm9kZSBzY3JpcHRzLAogICAgIC8vIGV0Yy4KZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL3N0YXRpYy9qcy90cmVlL3RyZWUuanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMv dHJlZS90cmVlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4wMjY4NWI0 OAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy90cmVlL3RyZWUuanMK QEAgLTAsMCArMSwxODcgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1pbiA0IC0g UG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgsIFRoZSBw Z0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5k ZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2V4cG9y dCBjbGFzcyBUcmVlTm9kZSB7CisgIGNvbnN0cnVjdG9yKGlkLCBkYXRhLCBkb21Ob2RlLCBwYXJl bnQpIHsKKyAgICB0aGlzLmlkID0gaWQ7CisgICAgdGhpcy5kYXRhID0gZGF0YTsKKyAgICB0aGlz LnNldFBhcmVudChwYXJlbnQpOworICAgIHRoaXMuY2hpbGRyZW4gPSBbXTsKKyAgICB0aGlzLmRv bU5vZGUgPSBkb21Ob2RlOworICB9CisKKyAgaGFzUGFyZW50KCkgeworICAgIHJldHVybiB0aGlz LnBhcmVudE5vZGUgIT09IG51bGwgJiYgdGhpcy5wYXJlbnROb2RlICE9PSB1bmRlZmluZWQ7Cisg IH0KKworICBwYXJlbnQoKSB7CisgICAgcmV0dXJuIHRoaXMucGFyZW50Tm9kZTsKKyAgfQorCisg IHNldFBhcmVudChwYXJlbnQpIHsKKyAgICB0aGlzLnBhcmVudE5vZGUgPSBwYXJlbnQ7CisgICAg dGhpcy5wYXRoID0gdGhpcy5pZDsKKyAgICBpZiAocGFyZW50ICE9PSBudWxsICYmIHBhcmVudCAh PT0gdW5kZWZpbmVkICYmIHBhcmVudC5wYXRoICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIHRoaXMu cGF0aCA9IHBhcmVudC5wYXRoICsgJy4nICsgdGhpcy5pZDsKKyAgICB9CisgIH0KKworICBnZXRE YXRhKCkgeworICAgIGlmICh0aGlzLmRhdGEgPT09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJu IHVuZGVmaW5lZDsKKyAgICB9IGVsc2UgaWYgKHRoaXMuZGF0YSA9PT0gbnVsbCkgeworICAgICAg cmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRh dGEpOworICB9CisKKyAgZ2V0SHRtbElkZW50aWZpZXIoKSB7CisgICAgcmV0dXJuIHRoaXMuZG9t Tm9kZTsKKyAgfQorCisgIHJlbG9hZCh0cmVlKSB7CisgICAgdGhpcy51bmxvYWQodHJlZSk7Cisg ICAgdHJlZS5hY2lUcmVlQXBpLnNldElub2RlKHRoaXMuZG9tTm9kZSk7CisgICAgdHJlZS5hY2lU cmVlQXBpLmRlc2VsZWN0KHRoaXMuZG9tTm9kZSk7CisgICAgc2V0VGltZW91dCgoKSA9PiB7Cisg ICAgICB0cmVlLnNlbGVjdE5vZGUodGhpcy5kb21Ob2RlKTsKKyAgICB9LCAwKTsKKyAgfQorCisg IHVubG9hZCh0cmVlKSB7CisgICAgdGhpcy5jaGlsZHJlbiA9IFtdOworICAgIHRyZWUuYWNpVHJl ZUFwaS51bmxvYWQodGhpcy5kb21Ob2RlKTsKKyAgfQorCisgIGFueVBhcmVudChjb25kaXRpb24p IHsKKyAgICBsZXQgbm9kZSA9IHRoaXM7CisKKyAgICB3aGlsZSAobm9kZS5oYXNQYXJlbnQoKSkg eworICAgICAgbm9kZSA9IG5vZGUucGFyZW50KCk7CisgICAgICBpZiAoY29uZGl0aW9uKG5vZGUp KSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBm YWxzZTsKKyAgfQorCisgIGFueUZhbWlseU1lbWJlcihjb25kaXRpb24pIHsKKyAgICBpZihjb25k aXRpb24odGhpcykpIHsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiB0 aGlzLmFueVBhcmVudChjb25kaXRpb24pOworICB9Cit9CisKK2V4cG9ydCBjbGFzcyBUcmVlIHsK KyAgY29uc3RydWN0b3IoKSB7CisgICAgdGhpcy5yb290Tm9kZSA9IG5ldyBUcmVlTm9kZSh1bmRl ZmluZWQsIHt9KTsKKyAgICB0aGlzLmFjaVRyZWVBcGkgPSB1bmRlZmluZWQ7CisgIH0KKworICBh ZGROZXdOb2RlKGlkLCBkYXRhLCBkb21Ob2RlLCBwYXJlbnRQYXRoKSB7CisgICAgY29uc3QgcGFy ZW50ID0gdGhpcy5maW5kTm9kZShwYXJlbnRQYXRoKTsKKyAgICByZXR1cm4gdGhpcy5jcmVhdGVP clVwZGF0ZU5vZGUoaWQsIGRhdGEsIHBhcmVudCwgZG9tTm9kZSk7CisgIH0KKworICBmaW5kTm9k ZShwYXRoKSB7CisgICAgaWYgKHBhdGggPT09IG51bGwgfHwgcGF0aCA9PT0gdW5kZWZpbmVkIHx8 IHBhdGgubGVuZ3RoID09PSAwKSB7CisgICAgICByZXR1cm4gdGhpcy5yb290Tm9kZTsKKyAgICB9 CisgICAgcmV0dXJuIGZpbmRJblRyZWUodGhpcy5yb290Tm9kZSwgcGF0aC5qb2luKCcuJykpOwor ICB9CisKKyAgZmluZE5vZGVCeURvbUVsZW1lbnQoZG9tRWxlbWVudCkgeworICAgIGNvbnN0IHBh dGggPSB0aGlzLnRyYW5zbGF0ZVRyZWVOb2RlSWRGcm9tQUNJVHJlZShkb21FbGVtZW50KTsKKyAg ICBpZighcGF0aCB8fCAhcGF0aFswXSkgeworICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICB9 CisKKyAgICByZXR1cm4gdGhpcy5maW5kTm9kZShwYXRoKTsKKyAgfQorCisgIHNlbGVjdGVkKCkg eworICAgIHJldHVybiB0aGlzLmFjaVRyZWVBcGkuc2VsZWN0ZWQoKTsKKyAgfQorCisgIHNlbGVj dE5vZGUoYWNpVHJlZUlkZW50aWZpZXIpIHsKKyAgICB0aGlzLmFjaVRyZWVBcGkuc2VsZWN0KGFj aVRyZWVJZGVudGlmaWVyKTsKKyAgfQorCisgIHJlZ2lzdGVyKCR0cmVlSlF1ZXJ5KSB7CisgICAg JHRyZWVKUXVlcnkub24oJ2FjaXRyZWUnLCBmdW5jdGlvbiAoZXZlbnQsIGFwaSwgaXRlbSwgZXZl bnROYW1lKSB7CisgICAgICBpZiAoYXBpLmlzSXRlbShpdGVtKSkgeworICAgICAgICBpZiAoZXZl bnROYW1lID09PSAnYWRkZWQnKSB7CisgICAgICAgICAgY29uc3QgaWQgPSBhcGkuZ2V0SWQoaXRl bSk7CisgICAgICAgICAgY29uc3QgZGF0YSA9IGFwaS5pdGVtRGF0YShpdGVtKTsKKyAgICAgICAg ICBjb25zdCBwYXJlbnRJZCA9IHRoaXMudHJhbnNsYXRlVHJlZU5vZGVJZEZyb21BQ0lUcmVlKGFw aS5wYXJlbnQoaXRlbSkpOworICAgICAgICAgIHRoaXMuYWRkTmV3Tm9kZShpZCwgZGF0YSwgaXRl bSwgcGFyZW50SWQpOworICAgICAgICB9CisgICAgICB9CisgICAgfS5iaW5kKHRoaXMpKTsKKyAg ICB0aGlzLmFjaVRyZWVBcGkgPSAkdHJlZUpRdWVyeS5hY2lUcmVlKCdhcGknKTsKKyAgfQorCisg IGNyZWF0ZU9yVXBkYXRlTm9kZShpZCwgZGF0YSwgcGFyZW50LCBkb21Ob2RlKSB7CisgICAgbGV0 IG9sZE5vZGVQYXRoID0gW2lkXTsKKyAgICBpZihwYXJlbnQgIT09IG51bGwgJiYgcGFyZW50ICE9 PSB1bmRlZmluZWQpIHsKKyAgICAgIG9sZE5vZGVQYXRoID0gW3BhcmVudC5wYXRoLCBpZF07Cisg ICAgfQorICAgIGNvbnN0IG9sZE5vZGUgPSB0aGlzLmZpbmROb2RlKG9sZE5vZGVQYXRoKTsKKyAg ICBpZiAob2xkTm9kZSAhPT0gbnVsbCkgeworICAgICAgb2xkTm9kZS5kYXRhID0gT2JqZWN0LmFz c2lnbih7fSwgZGF0YSk7CisgICAgICByZXR1cm4gb2xkTm9kZTsKKyAgICB9CisKKyAgICBjb25z dCBub2RlID0gbmV3IFRyZWVOb2RlKGlkLCBkYXRhLCBkb21Ob2RlLCBwYXJlbnQpOworICAgIGlm IChwYXJlbnQgPT09IHRoaXMucm9vdE5vZGUpIHsKKyAgICAgIG5vZGUucGFyZW50Tm9kZSA9IG51 bGw7CisgICAgfQorICAgIHBhcmVudC5jaGlsZHJlbi5wdXNoKG5vZGUpOworICAgIHJldHVybiBu b2RlOworICB9CisKKyAgdHJhbnNsYXRlVHJlZU5vZGVJZEZyb21BQ0lUcmVlKGFjaVRyZWVOb2Rl KSB7CisgICAgbGV0IGN1cnJlbnRUcmVlTm9kZSA9IGFjaVRyZWVOb2RlOworICAgIGxldCBwYXRo ID0gW107CisgICAgd2hpbGUgKGN1cnJlbnRUcmVlTm9kZSAhPT0gbnVsbCAmJiBjdXJyZW50VHJl ZU5vZGUgIT09IHVuZGVmaW5lZCAmJiBjdXJyZW50VHJlZU5vZGUubGVuZ3RoID4gMCkgeworICAg ICAgcGF0aC51bnNoaWZ0KHRoaXMuYWNpVHJlZUFwaS5nZXRJZChjdXJyZW50VHJlZU5vZGUpKTsK KyAgICAgIGlmICh0aGlzLmFjaVRyZWVBcGkuaGFzUGFyZW50KGN1cnJlbnRUcmVlTm9kZSkpIHsK KyAgICAgICAgY3VycmVudFRyZWVOb2RlID0gdGhpcy5hY2lUcmVlQXBpLnBhcmVudChjdXJyZW50 VHJlZU5vZGUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisgICAg fQorICAgIHJldHVybiBwYXRoOworICB9Cit9CisKK2V4cG9ydCBsZXQgdHJlZSA9IG5ldyBUcmVl KCk7CisKK2Z1bmN0aW9uIGZpbmRJblRyZWUocm9vdE5vZGUsIHBhdGgpIHsKKyAgaWYgKHBhdGgg PT09IG51bGwpIHsKKyAgICByZXR1cm4gcm9vdE5vZGU7CisgIH0KKyAgcmV0dXJuIChmdW5jdGlv biBmaW5kSW5Ob2RlKGN1cnJlbnROb2RlKSB7CisgICAgZm9yIChsZXQgaSA9IDAsIGxlbmd0aCA9 IGN1cnJlbnROb2RlLmNoaWxkcmVuLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CisgICAgICBj b25zdCBjYWxjdWxhdGVkTm9kZSA9IGZpbmRJbk5vZGUoY3VycmVudE5vZGUuY2hpbGRyZW5baV0p OworICAgICAgaWYgKGNhbGN1bGF0ZWROb2RlICE9PSBudWxsKSB7CisgICAgICAgIHJldHVybiBj YWxjdWxhdGVkTm9kZTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY3VycmVudE5vZGUucGF0 aCA9PT0gcGF0aCkgeworICAgICAgcmV0dXJuIGN1cnJlbnROb2RlOworICAgIH0gZWxzZSB7Cisg ICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgIH0pKHJvb3ROb2RlKTsKK30KZGlmZiAtLWdpdCBh L3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvdHJlZS90cmVlX2Zha2UuanMgYi93ZWIvcmVncmVz c2lvbi9qYXZhc2NyaXB0L3RyZWUvdHJlZV9mYWtlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwLi5iMjg1YTQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9yZWdyZXNzaW9u L2phdmFzY3JpcHQvdHJlZS90cmVlX2Zha2UuanMKQEAgLTAsMCArMSw2OSBAQAorLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8K Ky8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIw MTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJl IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitp bXBvcnQge1RyZWV9IGZyb20gJy4uLy4uLy4uL3BnYWRtaW4vc3RhdGljL2pzL3RyZWUvdHJlZSc7 CisKK2V4cG9ydCBjbGFzcyBUcmVlRmFrZSBleHRlbmRzIFRyZWUgeworICBjb25zdHJ1Y3Rvcigp IHsKKyAgICBzdXBlcigpOworICAgIHRoaXMuYWNpVHJlZVRvT3VyVHJlZVRyYW5zbGF0b3IgPSB7 fTsKKyAgICB0aGlzLmFjaVRyZWVBcGkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaigKKyAgICAgIFsn QUNJVHJlZUFwaSddLCBbJ3NldElub2RlJywgJ3VubG9hZCcsICdkZXNlbGVjdCcsICdzZWxlY3Qn XSk7CisgIH0KKworICBhZGROZXdOb2RlKGlkLCBkYXRhLCBkb21Ob2RlLCBwYXRoKSB7CisgICAg dGhpcy5hY2lUcmVlVG9PdXJUcmVlVHJhbnNsYXRvcltpZF0gPSBbaWRdOworICAgIGlmIChwYXRo ICE9PSBudWxsICYmIHBhdGggIT09IHVuZGVmaW5lZCkgeworICAgICAgdGhpcy5hY2lUcmVlVG9P dXJUcmVlVHJhbnNsYXRvcltpZF0gPSBwYXRoLmNvbmNhdChpZCk7CisgICAgfQorICAgIHJldHVy biBzdXBlci5hZGROZXdOb2RlKGlkLCBkYXRhLCBkb21Ob2RlLCBwYXRoKTsKKyAgfQorCisgIGFk ZENoaWxkKHBhcmVudCwgY2hpbGQpIHsKKyAgICBjaGlsZC5zZXRQYXJlbnQocGFyZW50KTsKKyAg ICB0aGlzLmFjaVRyZWVUb091clRyZWVUcmFuc2xhdG9yW2NoaWxkLmlkXSA9IHRoaXMuYWNpVHJl ZVRvT3VyVHJlZVRyYW5zbGF0b3JbcGFyZW50LmlkXS5jb25jYXQoY2hpbGQuaWQpOworICAgIHBh cmVudC5jaGlsZHJlbi5wdXNoKGNoaWxkKTsKKyAgfQorCisgIGhhc1BhcmVudChhY2lUcmVlTm9k ZSkgeworICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVRyZWVOb2RlSWRGcm9tQUNJVHJlZShhY2lU cmVlTm9kZSkubGVuZ3RoID4gMTsKKyAgfQorCisgIHBhcmVudChhY2lUcmVlTm9kZSkgeworICAg IGlmICh0aGlzLmhhc1BhcmVudChhY2lUcmVlTm9kZSkpIHsKKyAgICAgIGxldCBwYXRoID0gdGhp cy50cmFuc2xhdGVUcmVlTm9kZUlkRnJvbUFDSVRyZWUoYWNpVHJlZU5vZGUpOworICAgICAgcmV0 dXJuIFt7aWQ6IHRoaXMuZmluZE5vZGUocGF0aCkucGFyZW50KCkuaWR9XTsKKyAgICB9CisKKyAg ICByZXR1cm4gbnVsbDsKKyAgfQorCisgIHRyYW5zbGF0ZVRyZWVOb2RlSWRGcm9tQUNJVHJlZShh Y2lUcmVlTm9kZSkgeworICAgIGlmKGFjaVRyZWVOb2RlID09PSB1bmRlZmluZWQgfHwgYWNpVHJl ZU5vZGVbMF0gPT09IHVuZGVmaW5lZCkgeworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAg IHJldHVybiB0aGlzLmFjaVRyZWVUb091clRyZWVUcmFuc2xhdG9yW2FjaVRyZWVOb2RlWzBdLmlk XTsKKyAgfQorCisgIGl0ZW1EYXRhKGFjaVRyZWVOb2RlKSB7CisgICAgbGV0IG5vZGUgPSB0aGlz LmZpbmROb2RlQnlEb21FbGVtZW50KGFjaVRyZWVOb2RlKTsKKyAgICBpZiAobm9kZSA9PT0gdW5k ZWZpbmVkIHx8IG5vZGUgPT09IG51bGwpIHsKKyAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAg fQorICAgIHJldHVybiBub2RlLmdldERhdGEoKTsKKyAgfQorCisgIHNlbGVjdGVkKCkgeworICAg IHJldHVybiB0aGlzLnNlbGVjdGVkTm9kZTsKKyAgfQorCisgIHNlbGVjdE5vZGUoc2VsZWN0ZWRO b2RlKSB7CisgICAgdGhpcy5zZWxlY3RlZE5vZGUgPSBzZWxlY3RlZE5vZGU7CisgIH0KK30KZGlm ZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvdHJlZS90cmVlX3NwZWMuanMgYi93 ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3RyZWUvdHJlZV9zcGVjLmpzCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4xNjRjZWI1YgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9y ZWdyZXNzaW9uL2phdmFzY3JpcHQvdHJlZS90cmVlX3NwZWMuanMKQEAgLTAsMCArMSw0MjEgQEAK Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scwor Ly8KKy8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50 IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwg TGljZW5jZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2ltcG9ydCB7VHJlZSwgVHJlZU5vZGV9 IGZyb20gJy4uLy4uLy4uL3BnYWRtaW4vc3RhdGljL2pzL3RyZWUvdHJlZSc7CitpbXBvcnQge1Ry ZWVGYWtlfSBmcm9tICcuL3RyZWVfZmFrZSc7CisKK2NvbnN0IGNvbnRleHQgPSBkZXNjcmliZTsK KworY29uc3QgdHJlZVRlc3RzID0gKHRyZWVDbGFzcywgc2V0RGVmYXVsdENhbGxCYWNrKSA9PiB7 CisgIGxldCB0cmVlOworICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICB0cmVlID0gbmV3IHRyZWVD bGFzcygpOworICB9KTsKKworICBkZXNjcmliZSgnI2FkZE5ld05vZGUnLCAoKSA9PiB7CisgICAg ZGVzY3JpYmUoJ3doZW4gYWRkIGEgbmV3IHJvb3QgZWxlbWVudCcsICgpID0+IHsKKyAgICAgIGNv bnRleHQoJ3VzaW5nIFtdIGFzIHRoZSBwYXJlbnQnLCAoKSA9PiB7CisgICAgICAgIGJlZm9yZUVh Y2goKCkgPT4geworICAgICAgICAgIHRyZWUuYWRkTmV3Tm9kZSgnc29tZSBuZXcgbm9kZScsIHtk YXRhOiAnaW50ZXJlc3RpbmcnfSwgdW5kZWZpbmVkLCBbXSk7CisgICAgICAgIH0pOworCisgICAg ICAgIGl0KCdjYW4gYmUgcmV0cmlldmVkJywgKCkgPT4geworICAgICAgICAgIGNvbnN0IG5vZGUg PSB0cmVlLmZpbmROb2RlKFsnc29tZSBuZXcgbm9kZSddKTsKKyAgICAgICAgICBleHBlY3Qobm9k ZS5kYXRhKS50b0VxdWFsKHtkYXRhOiAnaW50ZXJlc3RpbmcnfSk7CisgICAgICAgIH0pOworCisg ICAgICAgIGl0KCdyZXR1cm4gZmFsc2UgZm9yICNoYXNQYXJlbnQoKScsICgpID0+IHsKKyAgICAg ICAgICBjb25zdCBub2RlID0gdHJlZS5maW5kTm9kZShbJ3NvbWUgbmV3IG5vZGUnXSk7CisgICAg ICAgICAgZXhwZWN0KG5vZGUuaGFzUGFyZW50KCkpLnRvQmUoZmFsc2UpOworICAgICAgICB9KTsK KworICAgICAgICBpdCgncmV0dXJuIG51bGwgZm9yICNwYXJlbnQoKScsICgpID0+IHsKKyAgICAg ICAgICBjb25zdCBub2RlID0gdHJlZS5maW5kTm9kZShbJ3NvbWUgbmV3IG5vZGUnXSk7CisgICAg ICAgICAgZXhwZWN0KG5vZGUucGFyZW50KCkpLnRvQmVOdWxsKCk7CisgICAgICAgIH0pOworICAg ICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3VzaW5nIG51bGwgYXMgdGhlIHBhcmVudCcsICgpID0+ IHsKKyAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgICAgdHJlZS5hZGROZXdOb2Rl KCdzb21lIG5ldyBub2RlJywge2RhdGE6ICdpbnRlcmVzdGluZyd9LCB1bmRlZmluZWQsIG51bGwp OworICAgICAgICB9KTsKKworICAgICAgICBpdCgnY2FuIGJlIHJldHJpZXZlZCcsICgpID0+IHsK KyAgICAgICAgICBjb25zdCBub2RlID0gdHJlZS5maW5kTm9kZShbJ3NvbWUgbmV3IG5vZGUnXSk7 CisgICAgICAgICAgZXhwZWN0KG5vZGUuZGF0YSkudG9FcXVhbCh7ZGF0YTogJ2ludGVyZXN0aW5n J30pOworICAgICAgICB9KTsKKworICAgICAgICBpdCgncmV0dXJuIGZhbHNlIGZvciAjaGFzUGFy ZW50KCknLCAoKSA9PiB7CisgICAgICAgICAgY29uc3Qgbm9kZSA9IHRyZWUuZmluZE5vZGUoWydz b21lIG5ldyBub2RlJ10pOworICAgICAgICAgIGV4cGVjdChub2RlLmhhc1BhcmVudCgpKS50b0Jl KGZhbHNlKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3JldHVybiBudWxsIGZvciAjcGFy ZW50KCknLCAoKSA9PiB7CisgICAgICAgICAgY29uc3Qgbm9kZSA9IHRyZWUuZmluZE5vZGUoWydz b21lIG5ldyBub2RlJ10pOworICAgICAgICAgIGV4cGVjdChub2RlLnBhcmVudCgpKS50b0JlTnVs bCgpOworICAgICAgICB9KTsKKyAgICAgIH0pOworCisgICAgICBjb250ZXh0KCd1c2luZyB1bmRl ZmluZWQgYXMgdGhlIHBhcmVudCcsICgpID0+IHsKKyAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7 CisgICAgICAgICAgdHJlZS5hZGROZXdOb2RlKCdzb21lIG5ldyBub2RlJywge2RhdGE6ICdpbnRl cmVzdGluZyd9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ2NhbiBiZSByZXRyaWV2ZWQn LCAoKSA9PiB7CisgICAgICAgICAgY29uc3Qgbm9kZSA9IHRyZWUuZmluZE5vZGUoWydzb21lIG5l dyBub2RlJ10pOworICAgICAgICAgIGV4cGVjdChub2RlLmRhdGEpLnRvRXF1YWwoe2RhdGE6ICdp bnRlcmVzdGluZyd9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3JldHVybiBmYWxzZSBm b3IgI2hhc1BhcmVudCgpJywgKCkgPT4geworICAgICAgICAgIGNvbnN0IG5vZGUgPSB0cmVlLmZp bmROb2RlKFsnc29tZSBuZXcgbm9kZSddKTsKKyAgICAgICAgICBleHBlY3Qobm9kZS5oYXNQYXJl bnQoKSkudG9CZShmYWxzZSk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdyZXR1cm4gbnVs bCBmb3IgI3BhcmVudCgpJywgKCkgPT4geworICAgICAgICAgIGNvbnN0IG5vZGUgPSB0cmVlLmZp bmROb2RlKFsnc29tZSBuZXcgbm9kZSddKTsKKyAgICAgICAgICBleHBlY3Qobm9kZS5wYXJlbnQo KSkudG9CZU51bGwoKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRl c2NyaWJlKCd3aGVuIGFkZCBhIG5ldyBlbGVtZW50IGFzIGEgY2hpbGQnLCAoKSA9PiB7CisgICAg ICBsZXQgcGFyZW50Tm9kZTsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICBwYXJl bnROb2RlID0gdHJlZS5hZGROZXdOb2RlKCdwYXJlbnQgbm9kZScsIHtkYXRhOiAncGFyZW50IGRh dGEnfSwgdW5kZWZpbmVkLCBbXSk7CisgICAgICAgIHRyZWUuYWRkTmV3Tm9kZSgnc29tZSBuZXcg bm9kZScsIHtkYXRhOiAnaW50ZXJlc3RpbmcnfSwgdW5kZWZpbmVkLCBbJ3BhcmVudCcgKworICAg ICAgICAnIG5vZGUnXSk7CisgICAgICB9KTsKKworICAgICAgaXQoJ2NhbiBiZSByZXRyaWV2ZWQn LCAoKSA9PiB7CisgICAgICAgIGNvbnN0IG5vZGUgPSB0cmVlLmZpbmROb2RlKFsncGFyZW50IG5v ZGUnLCAnc29tZSBuZXcgbm9kZSddKTsKKyAgICAgICAgZXhwZWN0KG5vZGUuZGF0YSkudG9FcXVh bCh7ZGF0YTogJ2ludGVyZXN0aW5nJ30pOworICAgICAgfSk7CisKKyAgICAgIGl0KCdyZXR1cm4g dHJ1ZSBmb3IgI2hhc1BhcmVudCgpJywgKCkgPT4geworICAgICAgICBjb25zdCBub2RlID0gdHJl ZS5maW5kTm9kZShbJ3BhcmVudCBub2RlJywgJ3NvbWUgbmV3IG5vZGUnXSk7CisgICAgICAgIGV4 cGVjdChub2RlLmhhc1BhcmVudCgpKS50b0JlKHRydWUpOworICAgICAgfSk7CisKKyAgICAgIGl0 KCdyZXR1cm4gInBhcmVudCBub2RlIiBvYmplY3QgZm9yICNwYXJlbnQoKScsICgpID0+IHsKKyAg ICAgICAgY29uc3Qgbm9kZSA9IHRyZWUuZmluZE5vZGUoWydwYXJlbnQgbm9kZScsICdzb21lIG5l dyBub2RlJ10pOworICAgICAgICBleHBlY3Qobm9kZS5wYXJlbnQoKSkudG9FcXVhbChwYXJlbnRO b2RlKTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ3doZW4gYWRkIGFuIGVs ZW1lbnQgdGhhdCBhbHJlYWR5IGV4aXN0cyB1bmRlciBhIHBhcmVudCcsICgpID0+IHsKKyAgICAg IGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICB0cmVlLmFkZE5ld05vZGUoJ3BhcmVudCBub2Rl Jywge2RhdGE6ICdwYXJlbnQgZGF0YSd9LCB1bmRlZmluZWQsIFtdKTsKKyAgICAgICAgdHJlZS5h ZGROZXdOb2RlKCdzb21lIG5ldyBub2RlJywge2RhdGE6ICdpbnRlcmVzdGluZyd9LCB1bmRlZmlu ZWQsIFsncGFyZW50JyArCisgICAgICAgICcgbm9kZSddKTsKKyAgICAgIH0pOworCisgICAgICBp dCgnZG9lcyBub3QgYWRkIGEgbmV3IGNoaWxkJywgKCkgPT4geworICAgICAgICB0cmVlLmFkZE5l d05vZGUoJ3NvbWUgbmV3IG5vZGUnLCB7ZGF0YTogJ2ludGVyZXN0aW5nIDEnfSwgdW5kZWZpbmVk LCBbJ3BhcmVudCcgKworICAgICAgICAnIG5vZGUnXSk7CisgICAgICAgIGNvbnN0IHBhcmVudE5v ZGUgPSB0cmVlLmZpbmROb2RlKFsncGFyZW50IG5vZGUnXSk7CisgICAgICAgIGV4cGVjdChwYXJl bnROb2RlLmNoaWxkcmVuLmxlbmd0aCkudG9CZSgxKTsKKyAgICAgIH0pOworCisgICAgICBpdCgn dXBkYXRlcyB0aGUgZXhpc3Rpbmcgbm9kZSBkYXRhJywgKCkgPT4geworICAgICAgICB0cmVlLmFk ZE5ld05vZGUoJ3NvbWUgbmV3IG5vZGUnLCB7ZGF0YTogJ2ludGVyZXN0aW5nIDEnfSwgdW5kZWZp bmVkLCBbJ3BhcmVudCcgKworICAgICAgICAnIG5vZGUnXSk7CisgICAgICAgIGNvbnN0IG5vZGUg PSB0cmVlLmZpbmROb2RlKFsncGFyZW50IG5vZGUnLCAnc29tZSBuZXcgbm9kZSddKTsKKyAgICAg ICAgZXhwZWN0KG5vZGUuZGF0YSkudG9FcXVhbCh7ZGF0YTogJ2ludGVyZXN0aW5nIDEnfSk7Cisg ICAgICB9KTsKKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJyN0cmFuc2xhdGVUcmVlTm9k ZUlkRnJvbUFDSVRyZWUnLCAoKSA9PiB7CisgICAgbGV0IGFjaVRyZWVBcGk7CisgICAgYmVmb3Jl RWFjaCgoKSA9PiB7CisgICAgICBhY2lUcmVlQXBpID0gamFzbWluZS5jcmVhdGVTcHlPYmooJ0FD SVRyZWVBcGknLCBbCisgICAgICAgICdoYXNQYXJlbnQnLAorICAgICAgICAncGFyZW50JywKKyAg ICAgICAgJ2dldElkJywKKyAgICAgIF0pOworCisgICAgICBhY2lUcmVlQXBpLmdldElkLmFuZC5j YWxsRmFrZSgobm9kZSkgPT4geworICAgICAgICByZXR1cm4gbm9kZVswXS5pZDsKKyAgICAgIH0p OworICAgICAgdHJlZS5hY2lUcmVlQXBpID0gYWNpVHJlZUFwaTsKKyAgICB9KTsKKworICAgIGRl c2NyaWJlKCdXaGVuIHRyZWUgYXMgYSBzaW5nbGUgbGV2ZWwnLCAoKSA9PiB7CisgICAgICBiZWZv cmVFYWNoKCgpID0+IHsKKyAgICAgICAgYWNpVHJlZUFwaS5oYXNQYXJlbnQuYW5kLnJldHVyblZh bHVlKGZhbHNlKTsKKyAgICAgIH0pOworCisgICAgICBpdCgncmV0dXJucyBhbiBhcnJheSB3aXRo IHRoZSBJRCBvZiB0aGUgZmlyc3QgbGV2ZWwnLCAoKSA9PiB7CisgICAgICAgIGxldCBub2RlID0g W3sKKyAgICAgICAgICBpZDogJ3NvbWUgaWQnLAorICAgICAgICB9XTsKKyAgICAgICAgdHJlZS5h ZGROZXdOb2RlKCdzb21lIGlkJywge30sIHVuZGVmaW5lZCwgW10pOworCisgICAgICAgIGV4cGVj dCh0cmVlLnRyYW5zbGF0ZVRyZWVOb2RlSWRGcm9tQUNJVHJlZShub2RlKSkudG9FcXVhbChbJ3Nv bWUgaWQnXSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCdXaGVuIHRyZWUg YXMgYSAyIGxldmVscycsICgpID0+IHsKKyAgICAgIGRlc2NyaWJlKCdXaGVuIHdlIHRyeSB0byBy ZXRyaWV2ZSB0aGUgbm9kZSBpbiB0aGUgc2Vjb25kIGxldmVsJywgKCkgPT4geworICAgICAgICBp dCgncmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBJRCBvZiB0aGUgZmlyc3QgbGV2ZWwgYW5kIHNl Y29uZCBsZXZlbCcsICgpID0+IHsKKyAgICAgICAgICBhY2lUcmVlQXBpLmhhc1BhcmVudC5hbmQu cmV0dXJuVmFsdWVzKHRydWUsIGZhbHNlKTsKKyAgICAgICAgICBhY2lUcmVlQXBpLnBhcmVudC5h bmQucmV0dXJuVmFsdWUoW3sKKyAgICAgICAgICAgIGlkOiAncGFyZW50IGlkJywKKyAgICAgICAg ICB9XSk7CisgICAgICAgICAgbGV0IG5vZGUgPSBbeworICAgICAgICAgICAgaWQ6ICdzb21lIGlk JywKKyAgICAgICAgICB9XTsKKworICAgICAgICAgIHRyZWUuYWRkTmV3Tm9kZSgncGFyZW50IGlk Jywge30sIHVuZGVmaW5lZCwgW10pOworICAgICAgICAgIHRyZWUuYWRkTmV3Tm9kZSgnc29tZSBp ZCcsIHt9LCB1bmRlZmluZWQsIFsncGFyZW50IGlkJ10pOworCisgICAgICAgICAgZXhwZWN0KHRy ZWUudHJhbnNsYXRlVHJlZU5vZGVJZEZyb21BQ0lUcmVlKG5vZGUpKQorICAgICAgICAgICAgLnRv RXF1YWwoWydwYXJlbnQgaWQnLCAnc29tZSBpZCddKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsK KyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJyNzZWxlY3RlZCcsICgpID0+IHsKKyAgICBj b250ZXh0KCdhIG5vZGUgaW4gdGhlIHRyZWUgaXMgc2VsZWN0ZWQnLCAoKSA9PiB7CisgICAgICBp dCgncmV0dXJucyB0aGF0IG5vZGUgb2JqZWN0JywgKCkgPT4geworICAgICAgICBsZXQgc2VsZWN0 ZWROb2RlID0gbmV3IFRyZWVOb2RlKCdiYW1tJywge30sIFtdKTsKKyAgICAgICAgc2V0RGVmYXVs dENhbGxCYWNrKHRyZWUsIHNlbGVjdGVkTm9kZSk7CisgICAgICAgIGV4cGVjdCh0cmVlLnNlbGVj dGVkKCkpLnRvRXF1YWwoc2VsZWN0ZWROb2RlKTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsK KworICBkZXNjcmliZSgnI2ZpbmROb2RlQnlUcmVlRWxlbWVudCcsICgpID0+IHsKKyAgICBjb250 ZXh0KCdyZXRyaWV2ZSBkYXRhIGZyb20gbm9kZSBub3QgZm91bmQnLCAoKSA9PiB7CisgICAgICBp dCgncmV0dXJuIHVuZGVmaW5lZCcsICgpID0+IHsKKyAgICAgICAgbGV0IGFjaVRyZWVBcGkgPSBq YXNtaW5lLmNyZWF0ZVNweU9iaignQUNJVHJlZUFwaScsIFsKKyAgICAgICAgICAnaGFzUGFyZW50 JywKKyAgICAgICAgICAncGFyZW50JywKKyAgICAgICAgICAnZ2V0SWQnLAorICAgICAgICBdKTsK KworICAgICAgICBhY2lUcmVlQXBpLmdldElkLmFuZC5jYWxsRmFrZSgobm9kZSkgPT4geworICAg ICAgICAgIHJldHVybiBub2RlWzBdLmlkOworICAgICAgICB9KTsKKyAgICAgICAgdHJlZS5hY2lU cmVlQXBpID0gYWNpVHJlZUFwaTsKKyAgICAgICAgZXhwZWN0KHRyZWUuZmluZE5vZGVCeURvbUVs ZW1lbnQoWyc8bGk+c29tZXRoaW5nPC9saT4nXSkpLnRvQmVVbmRlZmluZWQoKTsKKyAgICAgIH0p OworICAgIH0pOworICB9KTsKK307CisKK2Rlc2NyaWJlKCd0cmVlIHRlc3RzJywgKCkgPT4gewor ICBkZXNjcmliZSgnVHJlZU5vZGUnLCAoKSA9PiB7CisgICAgZGVzY3JpYmUoJyNoYXNQYXJlbnQn LCAoKSA9PiB7CisgICAgICBjb250ZXh0KCdwYXJlbnQgaXMgbnVsbCcsICgpID0+IHsKKyAgICAg ICAgaXQoJ3JldHVybnMgZmFsc2UnLCAoKSA9PiB7CisgICAgICAgICAgbGV0IHRyZWVOb2RlID0g bmV3IFRyZWVOb2RlKCcxMjMnLCB7fSwgW10sIG51bGwpOworICAgICAgICAgIGV4cGVjdCh0cmVl Tm9kZS5oYXNQYXJlbnQoKSkudG9CZShmYWxzZSk7CisgICAgICAgIH0pOworICAgICAgfSk7Cisg ICAgICBjb250ZXh0KCdwYXJlbnQgaXMgdW5kZWZpbmVkJywgKCkgPT4geworICAgICAgICBpdCgn cmV0dXJucyBmYWxzZScsICgpID0+IHsKKyAgICAgICAgICBsZXQgdHJlZU5vZGUgPSBuZXcgVHJl ZU5vZGUoJzEyMycsIHt9LCBbXSwgdW5kZWZpbmVkKTsKKyAgICAgICAgICBleHBlY3QodHJlZU5v ZGUuaGFzUGFyZW50KCkpLnRvQmUoZmFsc2UpOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAg ICAgY29udGV4dCgncGFyZW50IGV4aXN0cycsICgpID0+IHsKKyAgICAgICAgaXQoJ3JldHVybnMg dHJ1ZScsICgpID0+IHsKKyAgICAgICAgICBsZXQgcGFyZW50Tm9kZSA9IG5ldyBUcmVlTm9kZSgn NDU2Jywge30sIFtdKTsKKyAgICAgICAgICBsZXQgdHJlZU5vZGUgPSBuZXcgVHJlZU5vZGUoJzEy MycsIHt9LCBbXSwgcGFyZW50Tm9kZSk7CisgICAgICAgICAgZXhwZWN0KHRyZWVOb2RlLmhhc1Bh cmVudCgpKS50b0JlKHRydWUpOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgIH0pOworCisg ICAgZGVzY3JpYmUoJyNyZWxvYWQnLCAoKSA9PiB7CisgICAgICBsZXQgdHJlZTsKKyAgICAgIGxl dCBsZXZlbDI7CisgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgdHJlZSA9IG5ldyBU cmVlRmFrZSgpOworICAgICAgICB0cmVlLmFkZE5ld05vZGUoJ2xldmVsMScsIHtkYXRhOiAnaW50 ZXJlc3RpbmcnfSwgW3tpZDogJ2xldmVsMSd9XSwgW10pOworICAgICAgICBsZXZlbDIgPSB0cmVl LmFkZE5ld05vZGUoJ2xldmVsMicsIHtkYXRhOiAnZGF0YSd9LCBbe2lkOiAnbGV2ZWwyJ31dLCBb J2xldmVsMSddKTsKKyAgICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDMnLCB7ZGF0YTogJ21v cmUgZGF0YSd9LCBbe2lkOiAnbGV2ZWwzJ31dLCBbJ2xldmVsMScsICdsZXZlbDInXSk7CisKKyAg ICAgICAgdHJlZS5hY2lUcmVlQXBpID0gamFzbWluZS5jcmVhdGVTcHlPYmooCisgICAgICAgICAg J0FDSVRyZWVBcGknLCBbJ3NldElub2RlJywgJ3VubG9hZCcsICdkZXNlbGVjdCcsICdzZWxlY3Qn XSk7CisgICAgICB9KTsKKworICAgICAgaXQoJ3JlbG9hZHMgdGhlIG5vZGUgYW5kIGl0cyBjaGls ZHJlbicsICgpID0+IHsKKyAgICAgICAgbGV2ZWwyLnJlbG9hZCh0cmVlKTsKKyAgICAgICAgZXhw ZWN0KHRyZWUuZmluZE5vZGVCeURvbUVsZW1lbnQoW3tpZDogJ2xldmVsMid9XSkpLnRvRXF1YWwo bGV2ZWwyKTsKKyAgICAgIH0pOworCisgICAgICBpdCgnZG9lcyBub3QgcmVsb2FkIHRoZSBjaGls ZHJlbiBvZiBub2RlJywgKCkgPT4geworICAgICAgICBsZXZlbDIucmVsb2FkKHRyZWUpOworICAg ICAgICBleHBlY3QodHJlZS5maW5kTm9kZUJ5RG9tRWxlbWVudChbe2lkOiAnbGV2ZWwzJ31dKSku dG9CZU51bGwoKTsKKyAgICAgIH0pOworCisgICAgICBpdCgnc2VsZWN0IHRoZSBub2RlJywgKGRv bmUpID0+IHsKKyAgICAgICAgbGV2ZWwyLnJlbG9hZCh0cmVlKTsKKyAgICAgICAgc2V0VGltZW91 dCgoKSA9PiB7CisgICAgICAgICAgZXhwZWN0KHRyZWUuc2VsZWN0ZWQoKSkudG9FcXVhbChbe2lk OiAnbGV2ZWwyJ31dKTsKKyAgICAgICAgICBkb25lKCk7CisgICAgICAgIH0sIDIwKTsKKyAgICAg IH0pOworCisgICAgICBkZXNjcmliZSgnQUNJVHJlZSBzcGVjaWZpYycsICgpID0+IHsKKyAgICAg ICAgaXQoJ3NldHMgdGhlIGN1cnJlbnQgbm9kZSBhcyBhIElub2RlLCBjaGFuZ2luZyB0aGUgSWNv biBiYWNrIHRvICsnLCAoKSA9PiB7CisgICAgICAgICAgbGV2ZWwyLnJlbG9hZCh0cmVlKTsKKyAg ICAgICAgICBleHBlY3QodHJlZS5hY2lUcmVlQXBpLnNldElub2RlKS50b0hhdmVCZWVuQ2FsbGVk V2l0aChbe2lkOiAnbGV2ZWwyJ31dKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ2Rlc2Vs ZWN0IHRoZSBub2RlIGFuZCBzZWxlY3RzIGl0IGFnYWluIHRvIHRyaWdnZXIgQUNJIHRyZWUnICsK KyAgICAgICAgICAnIGV2ZW50cycsIChkb25lKSA9PiB7CisgICAgICAgICAgbGV2ZWwyLnJlbG9h ZCh0cmVlKTsKKyAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgIGV4cGVj dCh0cmVlLmFjaVRyZWVBcGkuZGVzZWxlY3QpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKFt7aWQ6ICds ZXZlbDInfV0pOworICAgICAgICAgICAgZG9uZSgpOworICAgICAgICAgIH0sIDIwKTsKKyAgICAg ICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCcjdW5sb2FkJywgKCkg PT4geworICAgICAgbGV0IHRyZWU7CisgICAgICBsZXQgbGV2ZWwyOworICAgICAgYmVmb3JlRWFj aCgoKSA9PiB7CisgICAgICAgIHRyZWUgPSBuZXcgVHJlZUZha2UoKTsKKyAgICAgICAgdHJlZS5h ZGROZXdOb2RlKCdsZXZlbDEnLCB7ZGF0YTogJ2ludGVyZXN0aW5nJ30sIFsnPGxpPmxldmVsMTwv bGk+J10sIFtdKTsKKyAgICAgICAgbGV2ZWwyID0gdHJlZS5hZGROZXdOb2RlKCdsZXZlbDInLCB7 ZGF0YTogJ2RhdGEnfSwgWyc8bGk+bGV2ZWwyPC9saT4nXSwgWydsZXZlbDEnXSk7CisgICAgICAg IHRyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwzJywge2RhdGE6ICdtb3JlIGRhdGEnfSwgWyc8bGk+bGV2 ZWwzPC9saT4nXSwgWydsZXZlbDEnLCAnbGV2ZWwyJ10pOworICAgICAgICB0cmVlLmFjaVRyZWVB cGkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignQUNJVHJlZUFwaScsIFsndW5sb2FkJ10pOworICAg ICAgfSk7CisKKyAgICAgIGl0KCd1bmxvYWRzIHRoZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCBu b2RlJywgKCkgPT4geworICAgICAgICBsZXZlbDIudW5sb2FkKHRyZWUpOworICAgICAgICBleHBl Y3QodHJlZS5maW5kTm9kZUJ5RG9tRWxlbWVudChbe2lkOiAnbGV2ZWwyJ31dKSkudG9FcXVhbChs ZXZlbDIpOworICAgICAgICBleHBlY3QodHJlZS5maW5kTm9kZUJ5RG9tRWxlbWVudChbe2lkOiAn bGV2ZWwzJ31dKSkudG9CZU51bGwoKTsKKyAgICAgIH0pOworCisgICAgICBpdCgnY2FsbHMgdW5s b2FkIG9uIHRoZSBBQ0kgVHJlZScsICgpID0+IHsKKyAgICAgICAgbGV2ZWwyLnVubG9hZCh0cmVl KTsKKyAgICAgICAgZXhwZWN0KHRyZWUuYWNpVHJlZUFwaS51bmxvYWQpLnRvSGF2ZUJlZW5DYWxs ZWRXaXRoKFsnPGxpPmxldmVsMjwvbGk+J10pOworICAgICAgfSk7CisgICAgfSk7CisgIH0pOwor CisgIGRlc2NyaWJlKCdUcmVlJywgKCkgPT4geworICAgIGZ1bmN0aW9uIHJlYWxUcmVlU2VsZWN0 Tm9kZSh0cmVlLCBzZWxlY3RlZE5vZGUpIHsKKyAgICAgIGxldCBhY2lUcmVlQXBpID0gamFzbWlu ZS5jcmVhdGVTcHlPYmooJ0FDSVRyZWVBcGknLCBbCisgICAgICAgICdzZWxlY3RlZCcsCisgICAg ICBdKTsKKyAgICAgIHRyZWUuYWNpVHJlZUFwaSA9IGFjaVRyZWVBcGk7CisgICAgICBhY2lUcmVl QXBpLnNlbGVjdGVkLmFuZC5yZXR1cm5WYWx1ZShzZWxlY3RlZE5vZGUpOworICAgIH0KKworICAg IHRyZWVUZXN0cyhUcmVlLCByZWFsVHJlZVNlbGVjdE5vZGUpOworICB9KTsKKworICBkZXNjcmli ZSgnVHJlZUZha2UnLCAoKSA9PiB7CisgICAgZnVuY3Rpb24gZmFrZVRyZWVTZWxlY3ROb2RlKHRy ZWUsIHNlbGVjdGVkTm9kZSkgeworICAgICAgdHJlZS5zZWxlY3ROb2RlKHNlbGVjdGVkTm9kZSk7 CisgICAgfQorCisgICAgdHJlZVRlc3RzKFRyZWVGYWtlLCBmYWtlVHJlZVNlbGVjdE5vZGUpOwor CisgICAgZGVzY3JpYmUoJyNoYXNQYXJlbnQnLCAoKSA9PiB7CisgICAgICBjb250ZXh0KCd0cmVl IGNvbnRhaW5zIG11bHRpcGxlIGxldmVscycsICgpID0+IHsKKyAgICAgICAgbGV0IHRyZWU7Cisg ICAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICAgIHRyZWUgPSBuZXcgVHJlZUZha2Uo KTsKKyAgICAgICAgICB0cmVlLmFkZE5ld05vZGUoJ2xldmVsMScsIHtkYXRhOiAnaW50ZXJlc3Rp bmcnfSwgdW5kZWZpbmVkLCBbXSk7CisgICAgICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDIn LCB7ZGF0YTogJ2ludGVyZXN0aW5nJ30sIHVuZGVmaW5lZCwgWydsZXZlbDEnXSk7CisgICAgICAg IH0pOworCisgICAgICAgIGNvbnRleHQoJ25vZGUgaXMgYXQgdGhlIGZpcnN0IGxldmVsJywgKCkg PT4geworICAgICAgICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAgICAgICAgICAg ZXhwZWN0KHRyZWUuaGFzUGFyZW50KFt7aWQ6ICdsZXZlbDEnfV0pKS50b0JlKGZhbHNlKTsKKyAg ICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29udGV4dCgnbm9kZSBpcyBhdCB0 aGUgc2Vjb25kIGxldmVsJywgKCkgPT4geworICAgICAgICAgIGl0KCdyZXR1cm5zIHRydWUnLCAo KSA9PiB7CisgICAgICAgICAgICBleHBlY3QodHJlZS5oYXNQYXJlbnQoW3tpZDogJ2xldmVsMid9 XSkpLnRvQmUodHJ1ZSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgfSk7Cisg ICAgfSk7CisKKyAgICBkZXNjcmliZSgnI3BhcmVudCcsICgpID0+IHsKKyAgICAgIGxldCB0cmVl OworICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgIHRyZWUgPSBuZXcgVHJlZUZha2Uo KTsKKyAgICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDEnLCB7ZGF0YTogJ2ludGVyZXN0aW5n J30sIHVuZGVmaW5lZCwgW10pOworICAgICAgICB0cmVlLmFkZE5ld05vZGUoJ2xldmVsMicsIHtk YXRhOiAnaW50ZXJlc3RpbmcnfSwgdW5kZWZpbmVkLCBbJ2xldmVsMSddKTsKKyAgICAgIH0pOwor CisgICAgICBjb250ZXh0KCdub2RlIGlzIHRoZSByb290JywgKCkgPT4geworICAgICAgICBpdCgn cmV0dXJucyBudWxsJywgKCkgPT4geworICAgICAgICAgIGV4cGVjdCh0cmVlLnBhcmVudChbe2lk OiAnbGV2ZWwxJ31dKSkudG9CZU51bGwoKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKworICAg ICAgY29udGV4dCgnbm9kZSBpcyBub3Qgcm9vdCcsICgpID0+IHsKKyAgICAgICAgaXQoJ3JldHVy bnMgcm9vdCBlbGVtZW50JywgKCkgPT4geworICAgICAgICAgIGV4cGVjdCh0cmVlLnBhcmVudChb e2lkOiAnbGV2ZWwyJ31dKSkudG9FcXVhbChbe2lkOiAnbGV2ZWwxJ31dKTsKKyAgICAgICAgfSk7 CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJlKCcjaXRlbURhdGEnLCAoKSA9PiB7 CisgICAgICBsZXQgdHJlZTsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICB0cmVl ID0gbmV3IFRyZWVGYWtlKCk7CisgICAgICAgIHRyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwxJywge2Rh dGE6ICdpbnRlcmVzdGluZyd9LCB1bmRlZmluZWQsIFtdKTsKKyAgICAgICAgdHJlZS5hZGROZXdO b2RlKCdsZXZlbDInLCB7ZGF0YTogJ2V4cGVjdGVkIGRhdGEnfSwgdW5kZWZpbmVkLCBbJ2xldmVs MSddKTsKKyAgICAgIH0pOworCisgICAgICBjb250ZXh0KCdyZXRyaWV2ZSBkYXRhIGZyb20gdGhl IG5vZGUnLCAoKSA9PiB7CisgICAgICAgIGl0KCdyZXR1cm4gdGhlIG5vZGUgZGF0YScsICgpID0+ IHsKKyAgICAgICAgICBleHBlY3QodHJlZS5pdGVtRGF0YShbe2lkOiAnbGV2ZWwyJ31dKSkudG9F cXVhbCh7CisgICAgICAgICAgICBkYXRhOiAnZXhwZWN0ZWQnICsKKyAgICAgICAgICAgICcgZGF0 YScsCisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgfSk7CisKKyAgICAgIGNvbnRl eHQoJ3JldHJpZXZlIGRhdGEgZnJvbSBub2RlIG5vdCBmb3VuZCcsICgpID0+IHsKKyAgICAgICAg aXQoJ3JldHVybiB1bmRlZmluZWQnLCAoKSA9PiB7CisgICAgICAgICAgZXhwZWN0KHRyZWUuaXRl bURhdGEoW3tpZDogJ2JhbW0nfV0pKS50b0JlVW5kZWZpbmVkKCk7CisgICAgICAgIH0pOworICAg ICAgfSk7CisgICAgfSk7CisKKyAgICBkZXNjcmliZSgnI2FkZENoaWxkJywgKCkgPT4geworICAg ICAgbGV0IHJvb3QsIGNoaWxkOworICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgIGxl dCB0cmVlID0gbmV3IFRyZWVGYWtlKCk7CisgICAgICAgIHJvb3QgPSB0cmVlLmFkZE5ld05vZGUo J3Jvb3QnLCB7fSwgW3tpZDogJ3Jvb3QnfV0pOworICAgICAgICBjaGlsZCA9IG5ldyBUcmVlTm9k ZSgnbm9kZS4xJywge30sIFt7aWQ6ICdub2RlLjEnfV0pOworICAgICAgICB0cmVlLmFkZENoaWxk KHJvb3QsIGNoaWxkKTsKKyAgICAgIH0pOworCisgICAgICBpdCgnYWRkcyBhIG5ldyBjaGlsZCB0 byBhIG5vZGUnLCAoKSA9PiB7CisgICAgICAgIGV4cGVjdChyb290LmNoaWxkcmVuKS50b0VxdWFs KFtjaGlsZF0pOworICAgICAgfSk7CisKKyAgICAgIGl0KCdjaGFuZ2VzIHRoZSBwYXJlbnQgb2Yg dGhlIGNoaWxkIG5vZGUnLCAoKSA9PiB7CisgICAgICAgIGV4cGVjdChyb290LmNoaWxkcmVuWzBd LnBhcmVudE5vZGUpLnRvRXF1YWwocm9vdCk7CisgICAgICAgIGV4cGVjdChjaGlsZC5wYXJlbnRO b2RlKS50b0VxdWFsKHJvb3QpOworICAgICAgfSk7CisKKyAgICAgIGl0KCdjaGFuZ2VzIHRoZSBw YXRoIG9mIHRoZSBjaGlsZCcsICgpID0+IHsKKyAgICAgICAgZXhwZWN0KGNoaWxkLnBhdGgpLnRv RXF1YWwoJ3Jvb3Qubm9kZS4xJyk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKKwot LSAKMi4xNi4yCgo= --0000000000001d3530056adbfecf Content-Type: application/octet-stream; name="0003-Extract-add-tests-and-refactor-code-to-use-the-new-T.patch" Content-Disposition: attachment; filename="0003-Extract-add-tests-and-refactor-code-to-use-the-new-T.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jgihoisc2 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL2NvbGxhdGlvbnMvc3RhdGljL2pzL2NvbGxhdGlvbi5qcyBiL3dlYi9w Z2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2Nv bGxhdGlvbnMvc3RhdGljL2pzL2NvbGxhdGlvbi5qcwppbmRleCA5MDE1ZDhkMi4uNWEzYTRiYzAg MTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL2NvbGxhdGlvbnMvc3RhdGljL2pzL2NvbGxhdGlvbi5qcworKysgYi93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy9jb2xsYXRpb25zL3N0YXRpYy9qcy9jb2xsYXRpb24uanMKQEAgLTEsOCArMSw5IEBACiBkZWZp bmUoJ3BnYWRtaW4ubm9kZS5jb2xsYXRpb24nLCBbCiAgICdzb3VyY2VzL2dldHRleHQnLCAnc291 cmNlcy91cmxfZm9yJywgJ2pxdWVyeScsICd1bmRlcnNjb3JlJywKICAgJ3VuZGVyc2NvcmUuc3Ry aW5nJywgJ3NvdXJjZXMvcGdhZG1pbicsICdwZ2FkbWluLmJyb3dzZXInLAorICAnc291cmNlcy9t ZW51L2Nhbl9jcmVhdGUnLAogICAncGdhZG1pbi5icm93c2VyLmNvbGxlY3Rpb24nLAotXSwgZnVu Y3Rpb24oZ2V0dGV4dCwgdXJsX2ZvciwgJCwgXywgUywgcGdBZG1pbiwgcGdCcm93c2VyKSB7Citd LCBmdW5jdGlvbihnZXR0ZXh0LCB1cmxfZm9yLCAkLCBfLCBTLCBwZ0FkbWluLCBwZ0Jyb3dzZXIs IGNhbkNyZWF0ZSkgewogCiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydjb2xsLWNvbGxhdGlvbidd KSB7CiAgICAgcGdBZG1pbi5Ccm93c2VyLk5vZGVzWydjb2xsLWNvbGxhdGlvbiddID0KQEAgLTIy MywzMiArMjI0LDcgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUuY29sbGF0aW9uJywgWwogICAgICAg ICB9LAogICAgICAgfSksCiAgICAgICBjYW5DcmVhdGU6IGZ1bmN0aW9uKGl0ZW1EYXRhLCBpdGVt LCBkYXRhKSB7Ci0gICAgICAgICAgLy9JZiBjaGVjayBpcyBmYWxzZSB0aGVuICwgd2Ugd2lsbCBh bGxvdyBjcmVhdGUgbWVudQotICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmNoZWNrID09IGZhbHNl KQotICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRy ZWUsIGkgPSBpdGVtLCBkID0gaXRlbURhdGE7Ci0gICAgICAgICAgLy8gVG8gaXRlcmF0ZSBvdmVy IHRyZWUgdG8gY2hlY2sgcGFyZW50IG5vZGUKLSAgICAgICAgd2hpbGUgKGkpIHsKLSAgICAgICAg ICAgIC8vIElmIGl0IGlzIHNjaGVtYSB0aGVuIGFsbG93IHVzZXIgdG8gY3JlYXRlIGNvbGxhdGlv bgotICAgICAgICAgIGlmIChfLmluZGV4T2YoWydzY2hlbWEnXSwgZC5fdHlwZSkgPiAtMSkKLSAg ICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgaWYgKCdjb2xsLWNvbGxhdGlvbicg PT0gZC5fdHlwZSkgewotICAgICAgICAgICAgICAvL0NoZWNrIGlmIHdlIGFyZSBub3QgY2hpbGQg b2YgY2F0YWxvZwotICAgICAgICAgICAgdmFyIHByZXZfaSA9IHQuaGFzUGFyZW50KGkpID8gdC5w YXJlbnQoaSkgOiBudWxsLAotICAgICAgICAgICAgICBwcmV2X2QgPSBwcmV2X2kgPyB0Lml0ZW1E YXRhKHByZXZfaSkgOiBudWxsOwotICAgICAgICAgICAgaWYoIHByZXZfZC5fdHlwZSA9PSAnY2F0 YWxvZycpIHsKLSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg fQotICAgICAgICAgIGkgPSB0Lmhhc1BhcmVudChpKSA/IHQucGFyZW50KGkpIDogbnVsbDsKLSAg ICAgICAgICBkID0gaSA/IHQuaXRlbURhdGEoaSkgOiBudWxsOwotICAgICAgICB9Ci0gICAgICAg ICAgLy8gYnkgZGVmYXVsdCB3ZSBkbyBub3Qgd2FudCB0byBhbGxvdyBjcmVhdGUgbWVudQotICAg ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNhbkNyZWF0ZS5jYW5DcmVhdGUocGdC cm93c2VyLCAnY29sbC1jb2xsYXRpb24nLCBpdGVtLCBkYXRhKTsKICAgICAgIH0sCiAgICAgfSk7 CiAKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9zY2hlbWFzL2RvbWFpbnMvc3RhdGljL2pzL2RvbWFpbi5qcyBiL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2RvbWFp bnMvc3RhdGljL2pzL2RvbWFpbi5qcwppbmRleCA0MDNjYTQ3MS4uMWEzOGIwODMgMTAwNjQ0Ci0t LSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9z Y2hlbWFzL2RvbWFpbnMvc3RhdGljL2pzL2RvbWFpbi5qcworKysgYi93ZWIvcGdhZG1pbi9icm93 c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9kb21haW5zL3N0YXRp Yy9qcy9kb21haW4uanMKQEAgLTIsOSArMiwxMSBAQAogZGVmaW5lKCdwZ2FkbWluLm5vZGUuZG9t YWluJywgWwogICAnc291cmNlcy9nZXR0ZXh0JywgJ3NvdXJjZXMvdXJsX2ZvcicsICdqcXVlcnkn LCAndW5kZXJzY29yZScsICdiYWNrYm9uZScsCiAgICdzb3VyY2VzL3BnYWRtaW4nLCAncGdhZG1p bi5icm93c2VyJywgJ3BnYWRtaW4uYmFja2Zvcm0nLCAncGdhZG1pbi5iYWNrZ3JpZCcsCisgICdz b3VyY2VzL21lbnUvY2FuX2NyZWF0ZScsCiAgICdwZ2FkbWluLmJyb3dzZXIuY29sbGVjdGlvbics CiBdLCBmdW5jdGlvbigKLSAgZ2V0dGV4dCwgdXJsX2ZvciwgJCwgXywgQmFja2JvbmUsIHBnQWRt aW4sIHBnQnJvd3NlciwgQmFja2Zvcm0sIEJhY2tncmlkCisgIGdldHRleHQsIHVybF9mb3IsICQs IF8sIEJhY2tib25lLCBwZ0FkbWluLCBwZ0Jyb3dzZXIsIEJhY2tmb3JtLCBCYWNrZ3JpZCwKKyAg Y2FuQ3JlYXRlCiApIHsKIAogICAvLyBEZWZpbmUgRG9tYWluIENvbGxlY3Rpb24gTm9kZQpAQCAt Mjk3LDMyICsyOTksNyBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS5kb21haW4nLCBbCiAgICAgICAg IH0sCiAgICAgICB9KSwKICAgICAgIGNhbkNyZWF0ZTogZnVuY3Rpb24oaXRlbURhdGEsIGl0ZW0s IGRhdGEpIHsKLSAgICAgICAgLy9JZiBjaGVjayBpcyBmYWxzZSB0aGVuICwgd2Ugd2lsbCBhbGxv dyBjcmVhdGUgbWVudQotICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmNoZWNrID09IGZhbHNlKQot ICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUs IGkgPSBpdGVtLCBkID0gaXRlbURhdGE7Ci0gICAgICAgIC8vIFRvIGl0ZXJhdGUgb3ZlciB0cmVl IHRvIGNoZWNrIHBhcmVudCBub2RlCi0gICAgICAgIHdoaWxlIChpKSB7Ci0gICAgICAgICAgLy8g SWYgaXQgaXMgc2NoZW1hIHRoZW4gYWxsb3cgdXNlciB0byBjcmVhdGUgZG9tYWluCi0gICAgICAg ICAgaWYgKF8uaW5kZXhPZihbJ3NjaGVtYSddLCBkLl90eXBlKSA+IC0xKQotICAgICAgICAgICAg cmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICBpZiAoJ2NvbGwtZG9tYWluJyA9PSBkLl90eXBlKSB7 Ci0gICAgICAgICAgICAvL0NoZWNrIGlmIHdlIGFyZSBub3QgY2hpbGQgb2YgY2F0YWxvZwotICAg ICAgICAgICAgdmFyIHByZXZfaSA9IHQuaGFzUGFyZW50KGkpID8gdC5wYXJlbnQoaSkgOiBudWxs LAotICAgICAgICAgICAgICBwcmV2X2QgPSBwcmV2X2kgPyB0Lml0ZW1EYXRhKHByZXZfaSkgOiBu dWxsOwotICAgICAgICAgICAgaWYoIHByZXZfZC5fdHlwZSA9PSAnY2F0YWxvZycpIHsKLSAgICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGkg PSB0Lmhhc1BhcmVudChpKSA/IHQucGFyZW50KGkpIDogbnVsbDsKLSAgICAgICAgICBkID0gaSA/ IHQuaXRlbURhdGEoaSkgOiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIC8vIGJ5IGRlZmF1bHQg d2UgZG8gbm90IHdhbnQgdG8gYWxsb3cgY3JlYXRlIG1lbnUKLSAgICAgICAgcmV0dXJuIHRydWU7 CisgICAgICAgIHJldHVybiBjYW5DcmVhdGUuY2FuQ3JlYXRlKHBnQnJvd3NlciwgJ2NvbGwtZG9t YWluJywgaXRlbSwgZGF0YSk7CiAgICAgICB9LAogICAgICAgaXNEaXNhYmxlZDogZnVuY3Rpb24o bSl7CiAgICAgICAgIGlmICghbS5pc05ldygpKSB7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mb3JlaWduX3Rh Ymxlcy9zdGF0aWMvanMvZm9yZWlnbl90YWJsZS5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2Vy dmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2ZvcmVpZ25fdGFibGVzL3N0YXRp Yy9qcy9mb3JlaWduX3RhYmxlLmpzCmluZGV4IDE2MGRiODNmLi4wZTgyMDM0MyAxMDA2NDQKLS0t IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvZm9yZWlnbl90YWJsZXMvc3RhdGljL2pzL2ZvcmVpZ25fdGFibGUuanMKKysrIGIvd2Vi L3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMv Zm9yZWlnbl90YWJsZXMvc3RhdGljL2pzL2ZvcmVpZ25fdGFibGUuanMKQEAgLTIsOSArMiwxMSBA QAogZGVmaW5lKCdwZ2FkbWluLm5vZGUuZm9yZWlnbl90YWJsZScsIFsKICAgJ3NvdXJjZXMvZ2V0 dGV4dCcsICdzb3VyY2VzL3VybF9mb3InLCAnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAnYmFja2Jv bmUnLAogICAnc291cmNlcy9wZ2FkbWluJywgJ3BnYWRtaW4uYnJvd3NlcicsICdwZ2FkbWluLmJh Y2tmb3JtJywgJ3BnYWRtaW4uYmFja2dyaWQnLAorICAnc291cmNlcy9tZW51L2Nhbl9jcmVhdGUn LAogICAncGdhZG1pbi5icm93c2VyLmNvbGxlY3Rpb24nLAogXSwgZnVuY3Rpb24oCi0gIGdldHRl eHQsIHVybF9mb3IsICQsIF8sIEJhY2tib25lLCBwZ0FkbWluLCBwZ0Jyb3dzZXIsIEJhY2tmb3Jt LCBCYWNrZ3JpZAorICBnZXR0ZXh0LCB1cmxfZm9yLCAkLCBfLCBCYWNrYm9uZSwgcGdBZG1pbiwg cGdCcm93c2VyLCBCYWNrZm9ybSwgQmFja2dyaWQsCisgIGNhbkNyZWF0ZQogKSB7CiAKICAgaWYg KCFwZ0Jyb3dzZXIuTm9kZXNbJ2NvbGwtZm9yZWlnbl90YWJsZSddKSB7CkBAIC02NjAsMzIgKzY2 Miw3IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmZvcmVpZ25fdGFibGUnLCBbCiAgICAgICAgIH0s CiAgICAgICB9KSwKICAgICAgIGNhbkNyZWF0ZTogZnVuY3Rpb24oaXRlbURhdGEsIGl0ZW0sIGRh dGEpIHsKLSAgICAgICAgLy9JZiBjaGVjayBpcyBmYWxzZSB0aGVuICwgd2Ugd2lsbCBhbGxvdyBj cmVhdGUgbWVudQotICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmNoZWNrID09IGZhbHNlKQotICAg ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsIGkg PSBpdGVtLCBkID0gaXRlbURhdGE7Ci0gICAgICAgIC8vIFRvIGl0ZXJhdGUgb3ZlciB0cmVlIHRv IGNoZWNrIHBhcmVudCBub2RlCi0gICAgICAgIHdoaWxlIChpKSB7Ci0gICAgICAgICAgLy8gSWYg aXQgaXMgc2NoZW1hIHRoZW4gYWxsb3cgdXNlciB0byBjcmVhdGUgZm9yZWlnbiB0YWJsZQotICAg ICAgICAgIGlmIChfLmluZGV4T2YoWydzY2hlbWEnXSwgZC5fdHlwZSkgPiAtMSkKLSAgICAgICAg ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgaWYgKCdjb2xsLWZvcmVpZ25fdGFibGUnID09 IGQuX3R5cGUpIHsKLSAgICAgICAgICAgIC8vQ2hlY2sgaWYgd2UgYXJlIG5vdCBjaGlsZCBvZiBj YXRhbG9nCi0gICAgICAgICAgICB2YXIgcHJldl9pID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVu dChpKSA6IG51bGwsCi0gICAgICAgICAgICAgIHByZXZfZCA9IHByZXZfaSA/IHQuaXRlbURhdGEo cHJldl9pKSA6IG51bGw7Ci0gICAgICAgICAgICBpZiggcHJldl9kLl90eXBlID09ICdjYXRhbG9n JykgewotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0g ICAgICAgICAgaSA9IHQuaGFzUGFyZW50KGkpID8gdC5wYXJlbnQoaSkgOiBudWxsOwotICAgICAg ICAgIGQgPSBpID8gdC5pdGVtRGF0YShpKSA6IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g YnkgZGVmYXVsdCB3ZSBkbyBub3Qgd2FudCB0byBhbGxvdyBjcmVhdGUgbWVudQotICAgICAgICBy ZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNhbkNyZWF0ZS5jYW5DcmVhdGUocGdCcm93c2Vy LCAnY29sbC1mb3JlaWduX3RhYmxlJywgaXRlbSwgZGF0YSk7CiAgICAgICB9LAogICAgIH0pOwog CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy9mdHNfY29uZmlndXJhdGlvbnMvc3RhdGljL2pzL2Z0c19jb25maWd1 cmF0aW9uLmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvZnRzX2NvbmZpZ3VyYXRpb25zL3N0YXRpYy9qcy9mdHNfY29uZmlndXJh dGlvbi5qcwppbmRleCA4OTgwNjY4MS4uZjJmZTg1YmUgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2Z0c19jb25m aWd1cmF0aW9ucy9zdGF0aWMvanMvZnRzX2NvbmZpZ3VyYXRpb24uanMKKysrIGIvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvZnRzX2Nv bmZpZ3VyYXRpb25zL3N0YXRpYy9qcy9mdHNfY29uZmlndXJhdGlvbi5qcwpAQCAtMSw5ICsxLDEx IEBACiBkZWZpbmUoJ3BnYWRtaW4ubm9kZS5mdHNfY29uZmlndXJhdGlvbicsIFsKICAgJ3NvdXJj ZXMvZ2V0dGV4dCcsICdzb3VyY2VzL3VybF9mb3InLCAnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAn YmFja2JvbmUnLAogICAnc291cmNlcy9wZ2FkbWluJywgJ3BnYWRtaW4uYnJvd3NlcicsICdwZ2Fk bWluLmJhY2tmb3JtJywgJ3BnYWRtaW4uYmFja2dyaWQnLAorICAnc291cmNlcy9tZW51L2Nhbl9j cmVhdGUnLAogICAncGdhZG1pbi5icm93c2VyLmNvbGxlY3Rpb24nLAogXSwgZnVuY3Rpb24oCi0g IGdldHRleHQsIHVybF9mb3IsICQsIF8sIEJhY2tib25lLCBwZ0FkbWluLCBwZ0Jyb3dzZXIsIEJh Y2tmb3JtLCBCYWNrZ3JpZAorICBnZXR0ZXh0LCB1cmxfZm9yLCAkLCBfLCBCYWNrYm9uZSwgcGdB ZG1pbiwgcGdCcm93c2VyLCBCYWNrZm9ybSwgQmFja2dyaWQsCisgIGNhbkNyZWF0ZQogKSB7CiAK ICAgLy8gTW9kZWwgZm9yIHRva2VucyBjb250cm9sCkBAIC01NzgsMzIgKzU4MCw3IEBAIGRlZmlu ZSgncGdhZG1pbi5ub2RlLmZ0c19jb25maWd1cmF0aW9uJywgWwogICAgICAgICB9LAogICAgICAg fSksCiAgICAgICBjYW5DcmVhdGU6IGZ1bmN0aW9uKGl0ZW1EYXRhLCBpdGVtLCBkYXRhKSB7Ci0g ICAgICAgIC8vSWYgY2hlY2sgaXMgZmFsc2UgdGhlbiAsIHdlIHdpbGwgYWxsb3cgY3JlYXRlIG1l bnUKLSAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5jaGVjayA9PSBmYWxzZSkKLSAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKLQotICAgICAgICB2YXIgdCA9IHBnQnJvd3Nlci50cmVlLCBpID0gaXRlbSwg ZCA9IGl0ZW1EYXRhOwotICAgICAgICAvLyBUbyBpdGVyYXRlIG92ZXIgdHJlZSB0byBjaGVjayBw YXJlbnQgbm9kZQotICAgICAgICB3aGlsZSAoaSkgewotICAgICAgICAgIC8vIElmIGl0IGlzIHNj aGVtYSB0aGVuIGFsbG93IHVzZXIgdG8gY3JlYXRlIGZ0cyBjb25maWd1cmF0aW9uCi0gICAgICAg ICAgaWYgKF8uaW5kZXhPZihbJ3NjaGVtYSddLCBkLl90eXBlKSA+IC0xKQotICAgICAgICAgICAg cmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICBpZiAoJ2NvbGwtZnRzX2NvbmZpZ3VyYXRpb24nID09 IGQuX3R5cGUpIHsKLSAgICAgICAgICAgIC8vQ2hlY2sgaWYgd2UgYXJlIG5vdCBjaGlsZCBvZiBj YXRhbG9nCi0gICAgICAgICAgICB2YXIgcHJldl9pID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVu dChpKSA6IG51bGwsCi0gICAgICAgICAgICAgIHByZXZfZCA9IHByZXZfaSA/IHQuaXRlbURhdGEo cHJldl9pKSA6IG51bGw7Ci0gICAgICAgICAgICBpZiggcHJldl9kLl90eXBlID09ICdjYXRhbG9n JykgewotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0g ICAgICAgICAgaSA9IHQuaGFzUGFyZW50KGkpID8gdC5wYXJlbnQoaSkgOiBudWxsOwotICAgICAg ICAgIGQgPSBpID8gdC5pdGVtRGF0YShpKSA6IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g YnkgZGVmYXVsdCB3ZSBkbyBub3Qgd2FudCB0byBhbGxvdyBjcmVhdGUgbWVudQotICAgICAgICBy ZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNhbkNyZWF0ZS5jYW5DcmVhdGUocGdCcm93c2Vy LCAnY29sbC1mdHNfY29uZmlndXJhdGlvbicsIGl0ZW0sIGRhdGEpOwogICAgICAgfSwKICAgICB9 KTsKICAgfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvZnRzX2RpY3Rpb25hcmllcy9zdGF0aWMvanMvZnRzX2Rp Y3Rpb25hcnkuanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy9mdHNfZGljdGlvbmFyaWVzL3N0YXRpYy9qcy9mdHNfZGljdGlvbmFy eS5qcwppbmRleCBlZDgzZmViMS4uZjFhMzMwZjcgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2Z0c19kaWN0aW9u YXJpZXMvc3RhdGljL2pzL2Z0c19kaWN0aW9uYXJ5LmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2Z0c19kaWN0aW9uYXJp ZXMvc3RhdGljL2pzL2Z0c19kaWN0aW9uYXJ5LmpzCkBAIC0xLDggKzEsMTAgQEAKIGRlZmluZSgn cGdhZG1pbi5ub2RlLmZ0c19kaWN0aW9uYXJ5JywgWwogICAnc291cmNlcy9nZXR0ZXh0JywgJ3Nv dXJjZXMvdXJsX2ZvcicsICdqcXVlcnknLCAndW5kZXJzY29yZScsCiAgICd1bmRlcnNjb3JlLnN0 cmluZycsICdzb3VyY2VzL3BnYWRtaW4nLCAncGdhZG1pbi5icm93c2VyJywgJ3BnYWRtaW4uYmFj a2Zvcm0nLAorICAnc291cmNlcy9tZW51L2Nhbl9jcmVhdGUnLAogICAncGdhZG1pbi5icm93c2Vy LmNvbGxlY3Rpb24nLAotXSwgZnVuY3Rpb24oZ2V0dGV4dCwgdXJsX2ZvciwgJCwgXywgUywgcGdB ZG1pbiwgcGdCcm93c2VyLCBCYWNrZm9ybSkgeworXSwgZnVuY3Rpb24oZ2V0dGV4dCwgdXJsX2Zv ciwgJCwgXywgUywgcGdBZG1pbiwgcGdCcm93c2VyLCBCYWNrZm9ybSwKKyAgY2FuQ3JlYXRlKSB7 CiAKICAgLy8gRXh0ZW5kIHRoZSBicm93c2VyJ3Mgbm9kZSBtb2RlbCBjbGFzcyB0byBjcmVhdGUg YSBvcHRpb24vdmFsdWUgcGFpcgogICB2YXIgT3B0aW9uTGFiZWxNb2RlbCA9IHBnQWRtaW4uQnJv d3Nlci5Ob2RlLk1vZGVsLmV4dGVuZCh7CkBAIC0xODcsMzIgKzE4OSw3IEBAIGRlZmluZSgncGdh ZG1pbi5ub2RlLmZ0c19kaWN0aW9uYXJ5JywgWwogICAgICAgICB9LAogICAgICAgfSksCiAgICAg ICBjYW5DcmVhdGU6IGZ1bmN0aW9uKGl0ZW1EYXRhLCBpdGVtLCBkYXRhKSB7Ci0gICAgICAgIC8v SWYgY2hlY2sgaXMgZmFsc2UgdGhlbiAsIHdlIHdpbGwgYWxsb3cgY3JlYXRlIG1lbnUKLSAgICAg ICAgaWYgKGRhdGEgJiYgZGF0YS5jaGVjayA9PSBmYWxzZSkKLSAgICAgICAgICByZXR1cm4gdHJ1 ZTsKLQotICAgICAgICB2YXIgdCA9IHBnQnJvd3Nlci50cmVlLCBpID0gaXRlbSwgZCA9IGl0ZW1E YXRhOwotICAgICAgICAvLyBUbyBpdGVyYXRlIG92ZXIgdHJlZSB0byBjaGVjayBwYXJlbnQgbm9k ZQotICAgICAgICB3aGlsZSAoaSkgewotICAgICAgICAgIC8vIElmIGl0IGlzIHNjaGVtYSB0aGVu IGFsbG93IHVzZXIgdG8gY3JlYXRlIGZ0cyBkaWN0aW9uYXJ5Ci0gICAgICAgICAgaWYgKF8uaW5k ZXhPZihbJ3NjaGVtYSddLCBkLl90eXBlKSA+IC0xKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7 Ci0KLSAgICAgICAgICBpZiAoJ2NvbGwtZnRzX2RpY3Rpb25hcnknID09IGQuX3R5cGUpIHsKLSAg ICAgICAgICAgIC8vQ2hlY2sgaWYgd2UgYXJlIG5vdCBjaGlsZCBvZiBjYXRhbG9nCi0gICAgICAg ICAgICB2YXIgcHJldl9pID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGwsCi0g ICAgICAgICAgICAgIHByZXZfZCA9IHByZXZfaSA/IHQuaXRlbURhdGEocHJldl9pKSA6IG51bGw7 Ci0gICAgICAgICAgICBpZiggcHJldl9kLl90eXBlID09ICdjYXRhbG9nJykgewotICAgICAgICAg ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaSA9IHQu aGFzUGFyZW50KGkpID8gdC5wYXJlbnQoaSkgOiBudWxsOwotICAgICAgICAgIGQgPSBpID8gdC5p dGVtRGF0YShpKSA6IG51bGw7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gYnkgZGVmYXVsdCB3ZSBk byBub3Qgd2FudCB0byBhbGxvdyBjcmVhdGUgbWVudQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg ICAgICAgcmV0dXJuIGNhbkNyZWF0ZS5jYW5DcmVhdGUocGdCcm93c2VyLCAnY29sbC1mdHNfZGlj dGlvbmFyeScsIGl0ZW0sIGRhdGEpOwogICAgICAgfSwKICAgICB9KTsKICAgfQpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvZnRzX3BhcnNlci9zdGF0aWMvanMvZnRzX3BhcnNlci5qcyBiL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2Z0c19wYXJzZXIv c3RhdGljL2pzL2Z0c19wYXJzZXIuanMKaW5kZXggOTJjMDc4NmUuLmRhZWEzNWRlIDEwMDY0NAot LS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv c2NoZW1hcy9mdHNfcGFyc2VyL3N0YXRpYy9qcy9mdHNfcGFyc2VyLmpzCisrKyBiL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2Z0c19w YXJzZXIvc3RhdGljL2pzL2Z0c19wYXJzZXIuanMKQEAgLTEsNyArMSw5IEBACiBkZWZpbmUoJ3Bn YWRtaW4ubm9kZS5mdHNfcGFyc2VyJywgWwogICAnc291cmNlcy9nZXR0ZXh0JywgJ3NvdXJjZXMv dXJsX2ZvcicsICdqcXVlcnknLCAndW5kZXJzY29yZScsCi0gICdzb3VyY2VzL3BnYWRtaW4nLCAn cGdhZG1pbi5icm93c2VyJywgJ3BnYWRtaW4uYnJvd3Nlci5jb2xsZWN0aW9uJywKLV0sIGZ1bmN0 aW9uKGdldHRleHQsIHVybF9mb3IsICQsIF8sIHBnQWRtaW4sIHBnQnJvd3NlcikgeworICAnc291 cmNlcy9wZ2FkbWluJywgJ3BnYWRtaW4uYnJvd3NlcicsCisgICdzb3VyY2VzL21lbnUvY2FuX2Ny ZWF0ZScsCisgICdwZ2FkbWluLmJyb3dzZXIuY29sbGVjdGlvbicsCitdLCBmdW5jdGlvbihnZXR0 ZXh0LCB1cmxfZm9yLCAkLCBfLCBwZ0FkbWluLCBwZ0Jyb3dzZXIsIGNhbkNyZWF0ZSkgewogCiAg IC8vIEV4dGVuZCB0aGUgY29sbGVjdGlvbiBjbGFzcyBmb3IgZnRzIHBhcnNlcgogICBpZiAoIXBn QnJvd3Nlci5Ob2Rlc1snY29sbC1mdHNfcGFyc2VyJ10pIHsKQEAgLTIwMCwzMiArMjAyLDcgQEAg ZGVmaW5lKCdwZ2FkbWluLm5vZGUuZnRzX3BhcnNlcicsIFsKICAgICAgICAgfSwKICAgICAgIH0p LAogICAgICAgY2FuQ3JlYXRlOiBmdW5jdGlvbihpdGVtRGF0YSwgaXRlbSwgZGF0YSkgewotICAg ICAgICAvL0lmIGNoZWNrIGlzIGZhbHNlIHRoZW4gLCB3ZSB3aWxsIGFsbG93IGNyZWF0ZSBtZW51 Ci0gICAgICAgIGlmIChkYXRhICYmIGRhdGEuY2hlY2sgPT0gZmFsc2UpCi0gICAgICAgICAgcmV0 dXJuIHRydWU7Ci0KLSAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwgaSA9IGl0ZW0sIGQg PSBpdGVtRGF0YTsKLSAgICAgICAgLy8gVG8gaXRlcmF0ZSBvdmVyIHRyZWUgdG8gY2hlY2sgcGFy ZW50IG5vZGUKLSAgICAgICAgd2hpbGUgKGkpIHsKLSAgICAgICAgICAvLyBJZiBpdCBpcyBzY2hl bWEgdGhlbiBhbGxvdyB1c2VyIHRvIGNyZWF0ZSBmdHMgcGFyc2VyCi0gICAgICAgICAgaWYgKF8u aW5kZXhPZihbJ3NjaGVtYSddLCBkLl90eXBlKSA+IC0xKQotICAgICAgICAgICAgcmV0dXJuIHRy dWU7Ci0KLSAgICAgICAgICBpZiAoJ2NvbGwtZnRzX3BhcnNlcicgPT0gZC5fdHlwZSkgewotICAg ICAgICAgICAgLy9DaGVjayBpZiB3ZSBhcmUgbm90IGNoaWxkIG9mIGNhdGFsb2cKLSAgICAgICAg ICAgIHZhciBwcmV2X2kgPSB0Lmhhc1BhcmVudChpKSA/IHQucGFyZW50KGkpIDogbnVsbCwKLSAg ICAgICAgICAgICAgcHJldl9kID0gcHJldl9pID8gdC5pdGVtRGF0YShwcmV2X2kpIDogbnVsbDsK LSAgICAgICAgICAgIGlmKCBwcmV2X2QuX3R5cGUgPT0gJ2NhdGFsb2cnKSB7Ci0gICAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHJl dHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpID0gdC5o YXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGw7Ci0gICAgICAgICAgZCA9IGkgPyB0Lml0 ZW1EYXRhKGkpIDogbnVsbDsKLSAgICAgICAgfQotICAgICAgICAvLyBieSBkZWZhdWx0IHdlIGRv IG5vdCB3YW50IHRvIGFsbG93IGNyZWF0ZSBtZW51Ci0gICAgICAgIHJldHVybiB0cnVlOworICAg ICAgICByZXR1cm4gY2FuQ3JlYXRlLmNhbkNyZWF0ZShwZ0Jyb3dzZXIsICdjb2xsLWZ0c19wYXJz ZXInLCBpdGVtLCBkYXRhKTsKICAgICAgIH0sCiAgICAgfSk7CiAgIH0KZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L2Z0c190ZW1wbGF0ZXMvc3RhdGljL2pzL2Z0c190ZW1wbGF0ZS5qcyBiL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2Z0c190ZW1wbGF0 ZXMvc3RhdGljL2pzL2Z0c190ZW1wbGF0ZS5qcwppbmRleCA2MDZhNTdhNi4uMGMwMDhjODMgMTAw NjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9zY2hlbWFzL2Z0c190ZW1wbGF0ZXMvc3RhdGljL2pzL2Z0c190ZW1wbGF0ZS5qcworKysg Yi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2No ZW1hcy9mdHNfdGVtcGxhdGVzL3N0YXRpYy9qcy9mdHNfdGVtcGxhdGUuanMKQEAgLTEsNyArMSw5 IEBACiBkZWZpbmUoJ3BnYWRtaW4ubm9kZS5mdHNfdGVtcGxhdGUnLCBbCiAgICdzb3VyY2VzL2dl dHRleHQnLCAnc291cmNlcy91cmxfZm9yJywgJ2pxdWVyeScsICd1bmRlcnNjb3JlJywKLSAgJ3Nv dXJjZXMvcGdhZG1pbicsICdwZ2FkbWluLmJyb3dzZXInLCAncGdhZG1pbi5icm93c2VyLmNvbGxl Y3Rpb24nLAotXSwgZnVuY3Rpb24oZ2V0dGV4dCwgdXJsX2ZvciwgJCwgXywgcGdBZG1pbiwgcGdC cm93c2VyKSB7CisgICdzb3VyY2VzL3BnYWRtaW4nLCAncGdhZG1pbi5icm93c2VyJywKKyAgJ3Nv dXJjZXMvbWVudS9jYW5fY3JlYXRlJywKKyAgJ3BnYWRtaW4uYnJvd3Nlci5jb2xsZWN0aW9uJywK K10sIGZ1bmN0aW9uKGdldHRleHQsIHVybF9mb3IsICQsIF8sIHBnQWRtaW4sIHBnQnJvd3Nlciwg Y2FuQ3JlYXRlKSB7CiAKICAgLy8gRXh0ZW5kIHRoZSBjb2xsZWN0aW9uIGNsYXNzIGZvciBmdHMg dGVtcGxhdGUKICAgaWYgKCFwZ0Jyb3dzZXIuTm9kZXNbJ2NvbGwtZnRzX3RlbXBsYXRlJ10pIHsK QEAgLTE0MCwzMiArMTQyLDcgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUuZnRzX3RlbXBsYXRlJywg WwogICAgICAgICB9LAogICAgICAgfSksCiAgICAgICBjYW5DcmVhdGU6IGZ1bmN0aW9uKGl0ZW1E YXRhLCBpdGVtLCBkYXRhKSB7Ci0gICAgICAgIC8vSWYgY2hlY2sgaXMgZmFsc2UgdGhlbiAsIHdl IHdpbGwgYWxsb3cgY3JlYXRlIG1lbnUKLSAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5jaGVjayA9 PSBmYWxzZSkKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICB2YXIgdCA9IHBnQnJv d3Nlci50cmVlLCBpID0gaXRlbSwgZCA9IGl0ZW1EYXRhOwotICAgICAgICAvLyBUbyBpdGVyYXRl IG92ZXIgdHJlZSB0byBjaGVjayBwYXJlbnQgbm9kZQotICAgICAgICB3aGlsZSAoaSkgewotICAg ICAgICAgIC8vIElmIGl0IGlzIHNjaGVtYSB0aGVuIGFsbG93IHVzZXIgdG8gY3JlYXRlIGZ0cyBm dHNfdGVtcGxhdGUKLSAgICAgICAgICBpZiAoXy5pbmRleE9mKFsnc2NoZW1hJ10sIGQuX3R5cGUp ID4gLTEpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgIGlmICgnY29sbC1m dHNfdGVtcGxhdGUnID09IGQuX3R5cGUpIHsKLSAgICAgICAgICAgIC8vQ2hlY2sgaWYgd2UgYXJl IG5vdCBjaGlsZCBvZiBjYXRhbG9nCi0gICAgICAgICAgICB2YXIgcHJldl9pID0gdC5oYXNQYXJl bnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGwsCi0gICAgICAgICAgICAgIHByZXZfZCA9IHByZXZf aSA/IHQuaXRlbURhdGEocHJldl9pKSA6IG51bGw7Ci0gICAgICAgICAgICBpZiggcHJldl9kLl90 eXBlID09ICdjYXRhbG9nJykgewotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICB9Ci0gICAgICAgICAgaSA9IHQuaGFzUGFyZW50KGkpID8gdC5wYXJlbnQoaSkg OiBudWxsOwotICAgICAgICAgIGQgPSBpID8gdC5pdGVtRGF0YShpKSA6IG51bGw7Ci0gICAgICAg IH0KLSAgICAgICAgLy8gYnkgZGVmYXVsdCB3ZSBkbyBub3Qgd2FudCB0byBhbGxvdyBjcmVhdGUg bWVudQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNhbkNyZWF0ZS5jYW5D cmVhdGUocGdCcm93c2VyLCAnY29sbC1mdHNfdGVtcGxhdGUnLCBpdGVtLCBkYXRhKTsKICAgICAg IH0sCiAgICAgfSk7CiAgIH0KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVy X2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL2Z1bmN0aW9ucy9zdGF0aWMvanMvZnVu Y3Rpb24uanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRh YmFzZXMvc2NoZW1hcy9mdW5jdGlvbnMvc3RhdGljL2pzL2Z1bmN0aW9uLmpzCmluZGV4IDZlNDA1 MTY1Li40MDYzNjQ0NiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3Jv dXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvZnVuY3Rpb25zL3N0YXRpYy9qcy9mdW5jdGlv bi5qcworKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRh YmFzZXMvc2NoZW1hcy9mdW5jdGlvbnMvc3RhdGljL2pzL2Z1bmN0aW9uLmpzCkBAIC0yLDggKzIs MTAgQEAKIGRlZmluZSgncGdhZG1pbi5ub2RlLmZ1bmN0aW9uJywgWwogICAnc291cmNlcy9nZXR0 ZXh0JywgJ3NvdXJjZXMvdXJsX2ZvcicsICdqcXVlcnknLCAndW5kZXJzY29yZScsICdiYWNrYm9u ZScsCiAgICdzb3VyY2VzL3BnYWRtaW4nLCAncGdhZG1pbi5icm93c2VyJywgJ3BnYWRtaW4uYmFj a2Zvcm0nLAorICAnc291cmNlcy9tZW51L2Nhbl9jcmVhdGUnLAogICAncGdhZG1pbi5icm93c2Vy LmNvbGxlY3Rpb24nLCAncGdhZG1pbi5icm93c2VyLnNlcnZlci5wcml2aWxlZ2UnLAotXSwgZnVu Y3Rpb24oZ2V0dGV4dCwgdXJsX2ZvciwgJCwgXywgQmFja2JvbmUsIHBnQWRtaW4sIHBnQnJvd3Nl ciwgQmFja2Zvcm0pIHsKK10sIGZ1bmN0aW9uKGdldHRleHQsIHVybF9mb3IsICQsIF8sIEJhY2ti b25lLCBwZ0FkbWluLCBwZ0Jyb3dzZXIsIEJhY2tmb3JtLAorICAgY2FuQ3JlYXRlKSB7CiAKICAg aWYgKCFwZ0Jyb3dzZXIuTm9kZXNbJ2NvbGwtZnVuY3Rpb24nXSkgewogICAgIHBnQnJvd3Nlci5O b2Rlc1snY29sbC1mdW5jdGlvbiddID0KQEAgLTQzOSwzMiArNDQxLDcgQEAgZGVmaW5lKCdwZ2Fk bWluLm5vZGUuZnVuY3Rpb24nLCBbCiAgICAgICAgIH0sCiAgICAgICB9KSwKICAgICAgIGNhbkNy ZWF0ZTogZnVuY3Rpb24oaXRlbURhdGEsIGl0ZW0sIGRhdGEpIHsKLSAgICAgICAgLy9JZiBjaGVj ayBpcyBmYWxzZSB0aGVuICwgd2Ugd2lsbCBhbGxvdyBjcmVhdGUgbWVudQotICAgICAgICBpZiAo ZGF0YSAmJiBkYXRhLmNoZWNrID09IGZhbHNlKQotICAgICAgICAgIHJldHVybiB0cnVlOwotCi0g ICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsIGkgPSBpdGVtLCBkID0gaXRlbURhdGE7Ci0g ICAgICAgIC8vIFRvIGl0ZXJhdGUgb3ZlciB0cmVlIHRvIGNoZWNrIHBhcmVudCBub2RlCi0gICAg ICAgIHdoaWxlIChpKSB7Ci0gICAgICAgICAgLy8gSWYgaXQgaXMgc2NoZW1hIHRoZW4gYWxsb3cg dXNlciB0byBjcmVhdGUgRnVuY3Rpb24KLSAgICAgICAgICBpZiAoXy5pbmRleE9mKFsnc2NoZW1h J10sIGQuX3R5cGUpID4gLTEpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAg IGlmICgnY29sbC1mdW5jdGlvbicgPT0gZC5fdHlwZSkgewotICAgICAgICAgICAgLy9DaGVjayBp ZiB3ZSBhcmUgbm90IGNoaWxkIG9mIGNhdGFsb2cKLSAgICAgICAgICAgIHZhciBwcmV2X2kgPSB0 Lmhhc1BhcmVudChpKSA/IHQucGFyZW50KGkpIDogbnVsbCwKLSAgICAgICAgICAgICAgcHJldl9k ID0gcHJldl9pID8gdC5pdGVtRGF0YShwcmV2X2kpIDogbnVsbDsKLSAgICAgICAgICAgIGlmKCBw cmV2X2QuX3R5cGUgPT0gJ2NhdGFsb2cnKSB7Ci0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg ICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBh cmVudChpKSA6IG51bGw7Ci0gICAgICAgICAgZCA9IGkgPyB0Lml0ZW1EYXRhKGkpIDogbnVsbDsK LSAgICAgICAgfQotICAgICAgICAvLyBieSBkZWZhdWx0IHdlIGRvIG5vdCB3YW50IHRvIGFsbG93 IGNyZWF0ZSBtZW51Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gY2FuQ3Jl YXRlLmNhbkNyZWF0ZShwZ0Jyb3dzZXIsICdjb2xsLWZ1bmN0aW9uJywgaXRlbSwgZGF0YSk7CiAg ICAgICB9LAogICAgIH0pOwogCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mdW5jdGlvbnMvc3RhdGljL2pzL3Ry aWdnZXJfZnVuY3Rpb24uanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mdW5jdGlvbnMvc3RhdGljL2pzL3RyaWdnZXJfZnVuY3Rp b24uanMKaW5kZXggYWViODI3MWIuLjExYjU4N2VkIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9mdW5jdGlvbnMv c3RhdGljL2pzL3RyaWdnZXJfZnVuY3Rpb24uanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9z ZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvZnVuY3Rpb25zL3N0YXRpYy9q cy90cmlnZ2VyX2Z1bmN0aW9uLmpzCkBAIC0yLDggKzIsOSBAQAogZGVmaW5lKCdwZ2FkbWluLm5v ZGUudHJpZ2dlcl9mdW5jdGlvbicsIFsKICAgJ3NvdXJjZXMvZ2V0dGV4dCcsICdzb3VyY2VzL3Vy bF9mb3InLCAnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLAogICAnc291cmNlcy9wZ2FkbWluJywgJ3Bn YWRtaW4uYnJvd3NlcicsICdwZ2FkbWluLmJhY2tmb3JtJywKKyAgJ3NvdXJjZXMvbWVudS9jYW5f Y3JlYXRlJywKICAgJ3BnYWRtaW4uYnJvd3Nlci5jb2xsZWN0aW9uJywgJ3BnYWRtaW4uYnJvd3Nl ci5zZXJ2ZXIucHJpdmlsZWdlJywKLV0sIGZ1bmN0aW9uKGdldHRleHQsIHVybF9mb3IsICQsIF8s IHBnQWRtaW4sIHBnQnJvd3NlciwgQmFja2Zvcm0pIHsKK10sIGZ1bmN0aW9uKGdldHRleHQsIHVy bF9mb3IsICQsIF8sIHBnQWRtaW4sIHBnQnJvd3NlciwgQmFja2Zvcm0sIGNhbkNyZWF0ZSkgewog CiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydjb2xsLXRyaWdnZXJfZnVuY3Rpb24nXSkgewogICAg IHBnQnJvd3Nlci5Ob2Rlc1snY29sbC10cmlnZ2VyX2Z1bmN0aW9uJ10gPQpAQCAtMzU4LDMyICsz NTksNyBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS50cmlnZ2VyX2Z1bmN0aW9uJywgWwogICAgICAg ICB9LAogICAgICAgfSksCiAgICAgICBjYW5DcmVhdGU6IGZ1bmN0aW9uKGl0ZW1EYXRhLCBpdGVt LCBkYXRhKSB7Ci0gICAgICAgIC8vSWYgY2hlY2sgaXMgZmFsc2UgdGhlbiAsIHdlIHdpbGwgYWxs b3cgY3JlYXRlIG1lbnUKLSAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS5jaGVjayA9PSBmYWxzZSkK LSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICB2YXIgdCA9IHBnQnJvd3Nlci50cmVl LCBpID0gaXRlbSwgZCA9IGl0ZW1EYXRhOwotICAgICAgICAvLyBUbyBpdGVyYXRlIG92ZXIgdHJl ZSB0byBjaGVjayBwYXJlbnQgbm9kZQotICAgICAgICB3aGlsZSAoaSkgewotICAgICAgICAgIC8v IElmIGl0IGlzIHNjaGVtYSB0aGVuIGFsbG93IHVzZXIgdG8gY3JlYXRlIEZ1bmN0aW9uCi0gICAg ICAgICAgaWYgKF8uaW5kZXhPZihbJ3NjaGVtYSddLCBkLl90eXBlKSA+IC0xKQotICAgICAgICAg ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICBpZiAoJ2NvbGwtdHJpZ2dlcl9mdW5jdGlvbicg PT0gZC5fdHlwZSkgewotICAgICAgICAgICAgLy9DaGVjayBpZiB3ZSBhcmUgbm90IGNoaWxkIG9m IGNhdGFsb2cKLSAgICAgICAgICAgIHZhciBwcmV2X2kgPSB0Lmhhc1BhcmVudChpKSA/IHQucGFy ZW50KGkpIDogbnVsbCwKLSAgICAgICAgICAgICAgcHJldl9kID0gcHJldl9pID8gdC5pdGVtRGF0 YShwcmV2X2kpIDogbnVsbDsKLSAgICAgICAgICAgIGlmKCBwcmV2X2QuX3R5cGUgPT0gJ2NhdGFs b2cnKSB7Ci0gICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSB7 Ci0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0K LSAgICAgICAgICBpID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGw7Ci0gICAg ICAgICAgZCA9IGkgPyB0Lml0ZW1EYXRhKGkpIDogbnVsbDsKLSAgICAgICAgfQotICAgICAgICAv LyBieSBkZWZhdWx0IHdlIGRvIG5vdCB3YW50IHRvIGFsbG93IGNyZWF0ZSBtZW51Ci0gICAgICAg IHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gY2FuQ3JlYXRlLmNhbkNyZWF0ZShwZ0Jyb3dz ZXIsICdjb2xsLXRyaWdnZXJfZnVuY3Rpb24nLCBpdGVtLCBkYXRhKTsKICAgICAgIH0sCiAgICAg fSk7CiAKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2 ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3NlcXVlbmNlcy9zdGF0aWMvanMvc2VxdWVuY2UuanMgYi93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy9zZXF1ZW5jZXMvc3RhdGljL2pzL3NlcXVlbmNlLmpzCmluZGV4IDU3Yzk1YWNkLi4wYTU5ZWZi MCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvc2VxdWVuY2VzL3N0YXRpYy9qcy9zZXF1ZW5jZS5qcworKysgYi93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy9zZXF1ZW5jZXMvc3RhdGljL2pzL3NlcXVlbmNlLmpzCkBAIC0xLDggKzEsMTAgQEAKIGRlZmlu ZSgncGdhZG1pbi5ub2RlLnNlcXVlbmNlJywgWwogICAnc291cmNlcy9nZXR0ZXh0JywgJ3NvdXJj ZXMvdXJsX2ZvcicsICdqcXVlcnknLCAndW5kZXJzY29yZScsCiAgICd1bmRlcnNjb3JlLnN0cmlu ZycsICdzb3VyY2VzL3BnYWRtaW4nLCAncGdhZG1pbi5icm93c2VyJywgJ3BnYWRtaW4uYmFja2Zv cm0nLAorICAnc291cmNlcy9tZW51L2Nhbl9jcmVhdGUnLAogICAncGdhZG1pbi5icm93c2VyLmNv bGxlY3Rpb24nLAotXSwgZnVuY3Rpb24oZ2V0dGV4dCwgdXJsX2ZvciwgJCwgXywgUywgcGdBZG1p biwgcGdCcm93c2VyLCBCYWNrZm9ybSkgeworXSwgZnVuY3Rpb24oZ2V0dGV4dCwgdXJsX2Zvciwg JCwgXywgUywgcGdBZG1pbiwgcGdCcm93c2VyLCBCYWNrZm9ybSwKKyAgIGNhbkNyZWF0ZSkgewog CiAgIC8vIEV4dGVuZCB0aGUgYnJvd3NlcidzIGNvbGxlY3Rpb24gY2xhc3MgZm9yIHNlcXVlbmNl IGNvbGxlY3Rpb24KICAgaWYgKCFwZ0Jyb3dzZXIuTm9kZXNbJ2NvbGwtc2VxdWVuY2UnXSkgewpA QCAtNjEsMzIgKzYzLDcgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUuc2VxdWVuY2UnLCBbCiAgICAg ICBjYW5Ecm9wOiBwZ0Jyb3dzZXIuTm9kZXNbJ3NjaGVtYSddLmNhbkNoaWxkRHJvcCwKICAgICAg IGNhbkRyb3BDYXNjYWRlOiBwZ0Jyb3dzZXIuTm9kZXNbJ3NjaGVtYSddLmNhbkNoaWxkRHJvcCwK ICAgICAgIGNhbkNyZWF0ZTogZnVuY3Rpb24oaXRlbURhdGEsIGl0ZW0sIGRhdGEpIHsKLSAgICAg ICAgICAvL0lmIGNoZWNrIGlzIGZhbHNlIHRoZW4gLCB3ZSB3aWxsIGFsbG93IGNyZWF0ZSBtZW51 Ci0gICAgICAgIGlmIChkYXRhICYmIGRhdGEuY2hlY2sgPT0gZmFsc2UpCi0gICAgICAgICAgcmV0 dXJuIHRydWU7Ci0KLSAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwgaSA9IGl0ZW0sIGQg PSBpdGVtRGF0YTsKLSAgICAgICAgICAvLyBUbyBpdGVyYXRlIG92ZXIgdHJlZSB0byBjaGVjayBw YXJlbnQgbm9kZQotICAgICAgICB3aGlsZSAoaSkgewotICAgICAgICAgICAgLy8gSWYgaXQgaXMg c2NoZW1hIHRoZW4gYWxsb3cgdXNlciB0byBjcmVhdGUgY29sbGF0aW9uCi0gICAgICAgICAgaWYg KF8uaW5kZXhPZihbJ3NjaGVtYSddLCBkLl90eXBlKSA+IC0xKQotICAgICAgICAgICAgcmV0dXJu IHRydWU7Ci0KLSAgICAgICAgICBpZiAoJ2NvbGwtc2VxdWVuY2UnID09IGQuX3R5cGUpIHsKLSAg ICAgICAgICAgICAgLy9DaGVjayBpZiB3ZSBhcmUgbm90IGNoaWxkIG9mIGNhdGFsb2cKLSAgICAg ICAgICAgIHZhciBwcmV2X2kgPSB0Lmhhc1BhcmVudChpKSA/IHQucGFyZW50KGkpIDogbnVsbCwK LSAgICAgICAgICAgICAgcHJldl9kID0gcHJldl9pID8gdC5pdGVtRGF0YShwcmV2X2kpIDogbnVs bDsKLSAgICAgICAgICAgIGlmKCBwcmV2X2QuX3R5cGUgPT0gJ2NhdGFsb2cnKSB7Ci0gICAgICAg ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg IHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgIH0KLSAgICAgICAgICBpID0g dC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGw7Ci0gICAgICAgICAgZCA9IGkgPyB0 Lml0ZW1EYXRhKGkpIDogbnVsbDsKLSAgICAgICAgfQotICAgICAgICAgIC8vIGJ5IGRlZmF1bHQg d2Ugd2FudCB0byBhbGxvdyBjcmVhdGUgbWVudQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg ICAgcmV0dXJuIGNhbkNyZWF0ZS5jYW5DcmVhdGUocGdCcm93c2VyLCAnY29sbC1zZXF1ZW5jZScs IGl0ZW0sIGRhdGEpOwogICAgICAgfSwKICAgICAgIC8vIERlZmluZSB0aGUgbW9kZWwgZm9yIHNl cXVlbmNlIG5vZGUuCiAgICAgICBtb2RlbDogcGdCcm93c2VyLk5vZGUuTW9kZWwuZXh0ZW5kKHsK ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL3N0YXRpYy9qcy9zY2hlbWEuanMgYi93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9zdGF0aWMvanMvc2NoZW1h LmpzCmluZGV4IGE3ZmQ0YzdjLi42ZDAwMzU3OCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJv d3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvc3RhdGljL2pzL3Nj aGVtYS5qcworKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy9zdGF0aWMvanMvc2NoZW1hLmpzCkBAIC0xLDggKzEsMTAgQEAKIGRl ZmluZSgncGdhZG1pbi5ub2RlLnNjaGVtYScsIFsKICAgJ3NvdXJjZXMvZ2V0dGV4dCcsICdzb3Vy Y2VzL3VybF9mb3InLCAnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLAogICAnc291cmNlcy9wZ2FkbWlu JywgJ3BnYWRtaW4uYnJvd3NlcicsICdwZ2FkbWluLmJhY2tmb3JtJywgJ3BnYWRtaW4uYmFja2dy aWQnLAorICAnc291cmNlcy9zY2hlbWEvY2FuX2Ryb3BfY2hpbGQnLAogICAncGdhZG1pbi5icm93 c2VyLmNvbGxlY3Rpb24nLCAncGdhZG1pbi5icm93c2VyLnNlcnZlci5wcml2aWxlZ2UnLAotXSwg ZnVuY3Rpb24oZ2V0dGV4dCwgdXJsX2ZvciwgJCwgXywgcGdBZG1pbiwgcGdCcm93c2VyLCBCYWNr Zm9ybSwgQmFja2dyaWQpIHsKK10sIGZ1bmN0aW9uKGdldHRleHQsIHVybF9mb3IsICQsIF8sIHBn QWRtaW4sIHBnQnJvd3NlciwgQmFja2Zvcm0sIEJhY2tncmlkLAorY2FuRHJvcENoaWxkKSB7CiAK ICAgLy8gVmFjdXVtU2V0dGluZ3MgQ29sbGVjdGlvbiB0byBkaXNwbGF5IGFsbCBzZXR0aW5ncyBw YXJhbWV0ZXJzIGFzIEdyaWQKICAgQmFja2Zvcm0uVmFjdXVtQ29sbGVjdGlvbkNvbnRyb2wgPQpA QCAtNDI4LDUxICs0MzAsMTIgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUuc2NoZW1hJywgWwogICAg ICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGNoZWNrcyB3aGV0aGVyIHdlIGNhbiBhbGxvdyB1c2Vy IHRvCiAgICAgICAvLyBkcm9wIG9iamVjdCBvciBub3QgYmFzZWQgb24gbG9jYXRpb24gd2l0aGlu IHNjaGVtYSAmIGNhdGFsb2cKICAgICAgIGNhbkNoaWxkRHJvcDogZnVuY3Rpb24oaXRlbURhdGEs IGl0ZW0pIHsKLSAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwgaSA9IGl0ZW0sIGQgPSBp dGVtRGF0YTsKLSAgICAgICAgLy8gVG8gaXRlcmF0ZSBvdmVyIHRyZWUgdG8gY2hlY2sgcGFyZW50 IG5vZGUKLSAgICAgICAgd2hpbGUgKGkpIHsKLSAgICAgICAgICAvLyBJZiBpdCBpcyBzY2hlbWEg dGhlbiBhbGxvdyB1c2VyIHRvIGNyZWF0ZSBjb2xsYXRpb24KLSAgICAgICAgICBpZiAoXy5pbmRl eE9mKFsnc2NoZW1hJ10sIGQuX3R5cGUpID4gLTEpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK LQotICAgICAgICAgICAgLy9DaGVjayBpZiB3ZSBhcmUgbm90IGNoaWxkIG9mIGNhdGFsb2cKLSAg ICAgICAgICB2YXIgcHJldl9pID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGws Ci0gICAgICAgICAgICBwcmV2X2QgPSBwcmV2X2kgPyB0Lml0ZW1EYXRhKHByZXZfaSkgOiBudWxs OwotICAgICAgICAgIGlmKHByZXZfZCAmJiBwcmV2X2QuX3R5cGUgPT0gJ2NhdGFsb2cnKSB7Ci0g ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgfQotICAgICAgICAgIGkgPSB0Lmhh c1BhcmVudChpKSA/IHQucGFyZW50KGkpIDogbnVsbDsKLSAgICAgICAgICBkID0gaSA/IHQuaXRl bURhdGEoaSkgOiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIC8vIGJ5IGRlZmF1bHQgd2UgZG8g bm90IHdhbnQgdG8gYWxsb3cgY3JlYXRlIG1lbnUKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAg ICAgIHJldHVybiBjYW5Ecm9wQ2hpbGQuY2FuRHJvcENoaWxkKHBnQnJvd3NlciwgaXRlbURhdGEs IGl0ZW0pOwogICAgICAgfSwKICAgICB9KTsKIAogICAgIHBnQnJvd3Nlci50YWJsZUNoaWxkVHJl ZU5vZGVIaWVyYXJjaHkgPSBmdW5jdGlvbihpKSB7Ci0gICAgICB2YXIgaWR4ID0gMCwKLSAgICAg ICAgcmVzID0ge30sCi0gICAgICAgIHQgPSBwZ0Jyb3dzZXIudHJlZTsKLQotICAgICAgZG8gewot ICAgICAgICB2YXIgZCA9IHQuaXRlbURhdGEoaSk7Ci0gICAgICAgIGlmICgKLSAgICAgICAgICBk Ll90eXBlIGluIHBnQnJvd3Nlci5Ob2RlcyAmJiBwZ0Jyb3dzZXIuTm9kZXNbZC5fdHlwZV0uaGFz SWQKLSAgICAgICAgKSB7Ci0gICAgICAgICAgaWYgKGQuX3R5cGUgPT09ICdwYXJ0aXRpb24nIHx8 IGQuX3R5cGUgPT09ICd0YWJsZScpIHsKLSAgICAgICAgICAgIGlmICghKCd0YWJsZScgaW4gcmVz KSkgewotICAgICAgICAgICAgICByZXNbJ3RhYmxlJ10gPSBfLmV4dGVuZCh7fSwgZCwgeydwcmlv cml0eSc6IGlkeH0pOwotICAgICAgICAgICAgICBpZHggLT0gMTsKLSAgICAgICAgICAgIH0KLSAg ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmVzW2QuX3R5cGVdID0gXy5leHRlbmQoe30s IGQsIHsncHJpb3JpdHknOiBpZHh9KTsKLSAgICAgICAgICAgIGlkeCAtPSAxOwotICAgICAgICAg IH0KLSAgICAgICAgfQotICAgICAgICBpID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6 IG51bGw7Ci0gICAgICB9IHdoaWxlIChpKTsKLQotICAgICAgcmV0dXJuIHJlczsKKyAgICAgIHJl dHVybiB0aGlzLmdldFRyZWVOb2RlSGllcmFyY2h5KGkpOwogICAgIH07CiAgIH0KIApkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2Vz L3NjaGVtYXMvdGFibGVzL2NvbHVtbi9zdGF0aWMvanMvY29sdW1uLmpzIGIvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2Nv bHVtbi9zdGF0aWMvanMvY29sdW1uLmpzCmluZGV4IDcyYjZlYjBjLi4xZmRhY2Y1MiAxMDA2NDQK LS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2Vz L3NjaGVtYXMvdGFibGVzL2NvbHVtbi9zdGF0aWMvanMvY29sdW1uLmpzCisrKyBiL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxl cy9jb2x1bW4vc3RhdGljL2pzL2NvbHVtbi5qcwpAQCAtODgsNyArODgsNiBAQCBkZWZpbmUoJ3Bn YWRtaW4ubm9kZS5jb2x1bW4nLCBbCiAKICAgaWYgKCFwZ0Jyb3dzZXIuTm9kZXNbJ2NvbHVtbidd KSB7CiAgICAgcGdCcm93c2VyLk5vZGVzWydjb2x1bW4nXSA9IHBnQnJvd3Nlci5Ob2RlLmV4dGVu ZCh7Ci0gICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdCcm93c2VyLnRhYmxlQ2hpbGRUcmVl Tm9kZUhpZXJhcmNoeSwKICAgICAgIHBhcmVudF90eXBlOiBbJ3RhYmxlJywgJ3ZpZXcnLCAnbXZp ZXcnXSwKICAgICAgIGNvbGxlY3Rpb25fdHlwZTogWydjb2xsLXRhYmxlJywgJ2NvbGwtdmlldycs ICdjb2xsLW12aWV3J10sCiAgICAgICB0eXBlOiAnY29sdW1uJywKZGlmZiAtLWdpdCBhL3dlYi9w Z2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3Rh Ymxlcy9jb25zdHJhaW50cy9jaGVja19jb25zdHJhaW50L3N0YXRpYy9qcy9jaGVja19jb25zdHJh aW50LmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJh c2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2NoZWNrX2NvbnN0cmFpbnQvc3RhdGljL2pz L2NoZWNrX2NvbnN0cmFpbnQuanMKaW5kZXggYmY3ZWY1NTYuLmIxY2IyNTE4IDEwMDY0NAotLS0g YS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2No ZW1hcy90YWJsZXMvY29uc3RyYWludHMvY2hlY2tfY29uc3RyYWludC9zdGF0aWMvanMvY2hlY2tf Y29uc3RyYWludC5qcworKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvY2hlY2tfY29uc3RyYWlu dC9zdGF0aWMvanMvY2hlY2tfY29uc3RyYWludC5qcwpAQCAtOCw3ICs4LDYgQEAgZGVmaW5lKCdw Z2FkbWluLm5vZGUuY2hlY2tfY29uc3RyYWludCcsIFsKICAgLy8gQ2hlY2sgQ29uc3RyYWludCBO b2RlCiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydjaGVja19jb25zdHJhaW50J10pIHsKICAgICBw Z0FkbWluLkJyb3dzZXIuTm9kZXNbJ2NoZWNrX2NvbnN0cmFpbnQnXSA9IHBnQnJvd3Nlci5Ob2Rl LmV4dGVuZCh7Ci0gICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdCcm93c2VyLnRhYmxlQ2hp bGRUcmVlTm9kZUhpZXJhcmNoeSwKICAgICAgIHR5cGU6ICdjaGVja19jb25zdHJhaW50JywKICAg ICAgIGxhYmVsOiBnZXR0ZXh0KCdDaGVjaycpLAogICAgICAgY29sbGVjdGlvbl90eXBlOiAnY29s bC1jb25zdHJhaW50cycsCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvZXhjbHVz aW9uX2NvbnN0cmFpbnQvc3RhdGljL2pzL2V4Y2x1c2lvbl9jb25zdHJhaW50LmpzIGIvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFi bGVzL2NvbnN0cmFpbnRzL2V4Y2x1c2lvbl9jb25zdHJhaW50L3N0YXRpYy9qcy9leGNsdXNpb25f Y29uc3RyYWludC5qcwppbmRleCAwYmJmNjZhMS4uYWRjY2YyZTkgMTAwNjQ0Ci0tLSBhL3dlYi9w Z2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3Rh Ymxlcy9jb25zdHJhaW50cy9leGNsdXNpb25fY29uc3RyYWludC9zdGF0aWMvanMvZXhjbHVzaW9u X2NvbnN0cmFpbnQuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2V4Y2x1c2lvbl9jb25z dHJhaW50L3N0YXRpYy9qcy9leGNsdXNpb25fY29uc3RyYWludC5qcwpAQCAtNjA1LDcgKzYwNSw2 IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmV4Y2x1c2lvbl9jb25zdHJhaW50JywgWwogICAvLyBF eHRlbmQgdGhlIGJyb3dzZXIncyBub2RlIGNsYXNzIGZvciBleGNsdXNpb24gY29uc3RyYWludCBu b2RlCiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydleGNsdXNpb25fY29uc3RyYWludCddKSB7CiAg ICAgcGdBZG1pbi5Ccm93c2VyLk5vZGVzWydleGNsdXNpb25fY29uc3RyYWludCddID0gcGdCcm93 c2VyLk5vZGUuZXh0ZW5kKHsKLSAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIu dGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgdHlwZTogJ2V4Y2x1c2lvbl9jb25z dHJhaW50JywKICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdFeGNsdXNpb24gY29uc3RyYWludCcpLAog ICAgICAgY29sbGVjdGlvbl90eXBlOiAnY29sbC1jb25zdHJhaW50cycsCmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvY29uc3RyYWludHMvZm9yZWlnbl9rZXkvc3RhdGljL2pzL2ZvcmVpZ25fa2V5Lmpz IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2ZvcmVpZ25fa2V5L3N0YXRpYy9qcy9mb3JlaWduX2tl eS5qcwppbmRleCA0OTk3ZDE3NS4uNzg4Y2VjZmMgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25z dHJhaW50cy9mb3JlaWduX2tleS9zdGF0aWMvanMvZm9yZWlnbl9rZXkuanMKKysrIGIvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFi bGVzL2NvbnN0cmFpbnRzL2ZvcmVpZ25fa2V5L3N0YXRpYy9qcy9mb3JlaWduX2tleS5qcwpAQCAt NjAzLDcgKzYwMyw2IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmZvcmVpZ25fa2V5JywgWwogICAv LyBFeHRlbmQgdGhlIGJyb3dzZXIncyBub2RlIGNsYXNzIGZvciBmb3JlaWduIGtleSBub2RlCiAg IGlmICghcGdCcm93c2VyLk5vZGVzWydmb3JlaWduX2tleSddKSB7CiAgICAgcGdBZG1pbi5Ccm93 c2VyLk5vZGVzWydmb3JlaWduX2tleSddID0gcGdCcm93c2VyLk5vZGUuZXh0ZW5kKHsKLSAgICAg IGdldFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFy Y2h5LAogICAgICAgdHlwZTogJ2ZvcmVpZ25fa2V5JywKICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdG b3JlaWduIGtleScpLAogICAgICAgY29sbGVjdGlvbl90eXBlOiAnY29sbC1jb25zdHJhaW50cycs CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvaW5kZXhfY29uc3RyYWludC9zdGF0 aWMvanMvcHJpbWFyeV9rZXkuanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMv c2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvaW5kZXhfY29uc3Ry YWludC9zdGF0aWMvanMvcHJpbWFyeV9rZXkuanMKaW5kZXggZDNhNmNmZjQuLjBhZDBmMDU0IDEw MDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRh YmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvaW5kZXhfY29uc3RyYWludC9zdGF0aWMv anMvcHJpbWFyeV9rZXkuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2luZGV4X2NvbnN0 cmFpbnQvc3RhdGljL2pzL3ByaW1hcnlfa2V5LmpzCkBAIC0yMCw3ICsyMCw2IEBAIGRlZmluZSgn cGdhZG1pbi5ub2RlLnByaW1hcnlfa2V5JywgWwogICAgICAgcGFyZW50X3R5cGU6IFsndGFibGUn LCdwYXJ0aXRpb24nXSwKICAgICAgIGNhbkRyb3A6IHRydWUsCiAgICAgICBjYW5Ecm9wQ2FzY2Fk ZTogdHJ1ZSwKLSAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVDaGls ZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgSW5pdDogZnVuY3Rpb24oKSB7CiAgICAgICAgIC8q IEF2b2lkIG11bHRpcGxlIHJlZ2lzdHJhdGlvbiBvZiBtZW51cyAqLwogICAgICAgICBpZiAodGhp cy5pbml0aWFsaXplZCkKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dy b3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9pbmRleF9j b25zdHJhaW50L3N0YXRpYy9qcy91bmlxdWVfY29uc3RyYWludC5qcyBiL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25z dHJhaW50cy9pbmRleF9jb25zdHJhaW50L3N0YXRpYy9qcy91bmlxdWVfY29uc3RyYWludC5qcwpp bmRleCA3NjkxODVkNi4uMThkM2NhMzMgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIv c2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50 cy9pbmRleF9jb25zdHJhaW50L3N0YXRpYy9qcy91bmlxdWVfY29uc3RyYWludC5qcworKysgYi93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvY29uc3RyYWludHMvaW5kZXhfY29uc3RyYWludC9zdGF0aWMvanMvdW5pcXVlX2Nv bnN0cmFpbnQuanMKQEAgLTIwLDcgKzIwLDYgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudW5pcXVl X2NvbnN0cmFpbnQnLCBbCiAgICAgICBwYXJlbnRfdHlwZTogWyd0YWJsZScsJ3BhcnRpdGlvbidd LAogICAgICAgY2FuRHJvcDogdHJ1ZSwKICAgICAgIGNhbkRyb3BDYXNjYWRlOiB0cnVlLAotICAg ICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6IHBnQnJvd3Nlci50YWJsZUNoaWxkVHJlZU5vZGVIaWVy YXJjaHksCiAgICAgICBJbml0OiBmdW5jdGlvbigpIHsKICAgICAgICAgLyogQXZvaWQgbXVsdGlw bGUgcmVnaXN0cmF0aW9uIG9mIG1lbnVzICovCiAgICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVk KQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL3N0YXRpYy9qcy9jb25zdHJhaW50 cy5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNl cy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9zdGF0aWMvanMvY29uc3RyYWludHMuanMKaW5k ZXggY2IyNDJjZDIuLjljMGUyNGZlIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3Nl cnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMv c3RhdGljL2pzL2NvbnN0cmFpbnRzLmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVy X2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9zdGF0 aWMvanMvY29uc3RyYWludHMuanMKQEAgLTEyLDE0ICsxMiwxMiBAQCBkZWZpbmUoJ3BnYWRtaW4u bm9kZS5jb25zdHJhaW50cycsIFsKICAgICAgICAgbm9kZTogJ2NvbnN0cmFpbnRzJywKICAgICAg ICAgbGFiZWw6IGdldHRleHQoJ0NvbnN0cmFpbnRzJyksCiAgICAgICAgIHR5cGU6ICdjb2xsLWNv bnN0cmFpbnRzJywKLSAgICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6IHBnQnJvd3Nlci50YWJs ZUNoaWxkVHJlZU5vZGVIaWVyYXJjaHksCiAgICAgICAgIGNvbHVtbnM6IFsnbmFtZScsICdjb21t ZW50J10sCiAgICAgICB9KTsKICAgfQogCiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydjb25zdHJh aW50cyddKSB7CiAgICAgcGdBZG1pbi5Ccm93c2VyLk5vZGVzWydjb25zdHJhaW50cyddID0gcGdC cm93c2VyLk5vZGUuZXh0ZW5kKHsKLSAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dz ZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgdHlwZTogJ2NvbnN0cmFpbnRz JywKICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdDb25zdHJhaW50cycpLAogICAgICAgY29sbGVjdGlv bl90eXBlOiAnY29sbC1jb25zdHJhaW50cycsCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93 c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvaW5kZXhl cy9zdGF0aWMvanMvaW5kZXguanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMv c2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvaW5kZXhlcy9zdGF0aWMvanMvaW5kZXgu anMKaW5kZXggZWMyYjRkYTEuLjJiNjg3YzFhIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93 c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvaW5kZXhl cy9zdGF0aWMvanMvaW5kZXguanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3Jv dXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2luZGV4ZXMvc3RhdGljL2pzL2lu ZGV4LmpzCkBAIC0xMyw3ICsxMyw2IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmluZGV4JywgWwog ICAgICAgICBub2RlOiAnaW5kZXgnLAogICAgICAgICBsYWJlbDogZ2V0dGV4dCgnSW5kZXhlcycp LAogICAgICAgICB0eXBlOiAnY29sbC1pbmRleCcsCi0gICAgICAgIGdldFRyZWVOb2RlSGllcmFy Y2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgICBzcWxB bHRlckhlbHA6ICdzcWwtYWx0ZXJpbmRleC5odG1sJywKICAgICAgICAgc3FsQ3JlYXRlSGVscDog J3NxbC1jcmVhdGVpbmRleC5odG1sJywKICAgICAgICAgZGlhbG9nSGVscDogdXJsX2ZvcignaGVs cC5zdGF0aWMnLCB7J2ZpbGVuYW1lJzogJ2luZGV4X2RpYWxvZy5odG1sJ30pLApAQCAtMjE1LDcg KzIxNCw2IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmluZGV4JywgWwogCiAgIGlmICghcGdCcm93 c2VyLk5vZGVzWydpbmRleCddKSB7CiAgICAgcGdBZG1pbi5Ccm93c2VyLk5vZGVzWydpbmRleCdd ID0gcGdCcm93c2VyLk5vZGUuZXh0ZW5kKHsKLSAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBw Z0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgcGFyZW50X3R5cGU6 IFsndGFibGUnLCAndmlldycsICdtdmlldycsICdwYXJ0aXRpb24nXSwKICAgICAgIGNvbGxlY3Rp b25fdHlwZTogWydjb2xsLXRhYmxlJywgJ2NvbGwtdmlldyddLAogICAgICAgc3FsQWx0ZXJIZWxw OiAnc3FsLWFsdGVyaW5kZXguaHRtbCcsCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcGFydGl0aW9u cy9zdGF0aWMvanMvcGFydGl0aW9uLmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3Jv dXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3BhcnRpdGlvbnMvc3RhdGljL2pz L3BhcnRpdGlvbi5qcwppbmRleCBmZDUzZjc0My4uMTdhMGU2Y2UgMTAwNjQ0Ci0tLSBhL3dlYi9w Z2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3Rh Ymxlcy9wYXJ0aXRpb25zL3N0YXRpYy9qcy9wYXJ0aXRpb24uanMKKysrIGIvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Bh cnRpdGlvbnMvc3RhdGljL2pzL3BhcnRpdGlvbi5qcwpAQCAtMSwxMSArMSwxNSBAQAogZGVmaW5l KFsKKyAgJ3NvdXJjZXMvdHJlZS9wZ2FkbWluX3RyZWVfbm9kZScsCiAgICdzb3VyY2VzL2dldHRl eHQnLCAnc291cmNlcy91cmxfZm9yJywgJ2pxdWVyeScsICd1bmRlcnNjb3JlJywKICAgJ3VuZGVy c2NvcmUuc3RyaW5nJywgJ3NvdXJjZXMvcGdhZG1pbicsICdwZ2FkbWluLmJyb3dzZXInLAogICAn cGdhZG1pbi5hbGVydGlmeWpzJywgJ3BnYWRtaW4uYmFja2Zvcm0nLCAncGdhZG1pbi5iYWNrZ3Jp ZCcsCisgICdzb3VyY2VzL21lbnUvY2FuX2NyZWF0ZScsCiAgICdwZ2FkbWluLmJyb3dzZXIuY29s bGVjdGlvbicsICdwZ2FkbWluLmJyb3dzZXIudGFibGUucGFydGl0aW9uLnV0aWxzJywKIF0sCiBm dW5jdGlvbigKLSAgZ2V0dGV4dCwgdXJsX2ZvciwgJCwgXywgUywgcGdBZG1pbiwgcGdCcm93c2Vy LCBBbGVydGlmeSwgQmFja2Zvcm0sIEJhY2tncmlkCisgIHBnYWRtaW5UcmVlTm9kZSwKKyAgZ2V0 dGV4dCwgdXJsX2ZvciwgJCwgXywgUywgcGdBZG1pbiwgcGdCcm93c2VyLCBBbGVydGlmeSwgQmFj a2Zvcm0sIEJhY2tncmlkLAorICBjYW5DcmVhdGUKICkgewogCiAgIGlmICghcGdCcm93c2VyLk5v ZGVzWydjb2xsLXBhcnRpdGlvbiddKSB7CkBAIC0xMyw3ICsxNyw2IEBAIGZ1bmN0aW9uKAogICAg ICAgcGdBZG1pbi5Ccm93c2VyLkNvbGxlY3Rpb24uZXh0ZW5kKHsKICAgICAgICAgbm9kZTogJ3Bh cnRpdGlvbicsCiAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdQYXJ0aXRpb25zJyksCi0gICAgICAg IGdldFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFy Y2h5LAogICAgICAgICB0eXBlOiAnY29sbC1wYXJ0aXRpb24nLAogICAgICAgICBjb2x1bW5zOiBb CiAgICAgICAgICAgJ25hbWUnLCAnc2NoZW1hJywgJ3BhcnRpdGlvbl92YWx1ZScsICdpc19wYXJ0 aXRpb25lZCcsICdkZXNjcmlwdGlvbicsCkBAIC04MCwzNiArODMsNiBAQCBmdW5jdGlvbigKICAg ICAgICAgfSwKICAgICAgICAgXSk7CiAgICAgICB9LAotICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJj aHk6IGZ1bmN0aW9uKGkpIHsKLSAgICAgICAgdmFyIGlkeCA9IDAsCi0gICAgICAgICAgcmVzID0g e30sCi0gICAgICAgICAgdCA9IHBnQnJvd3Nlci50cmVlOwotCi0gICAgICAgIGRvIHsKLSAgICAg ICAgICB2YXIgZCA9IHQuaXRlbURhdGEoaSk7Ci0gICAgICAgICAgaWYgKAotICAgICAgICAgICAg ZC5fdHlwZSBpbiBwZ0Jyb3dzZXIuTm9kZXMgJiYgcGdCcm93c2VyLk5vZGVzW2QuX3R5cGVdLmhh c0lkCi0gICAgICAgICAgKSB7Ci0gICAgICAgICAgICBpZiAoZC5fdHlwZSA9PSAncGFydGl0aW9u JyAmJiAncGFydGl0aW9uJyBpbiByZXMpIHsKLSAgICAgICAgICAgICAgaWYgKCEoJ3RhYmxlJyBp biByZXMpKSB7Ci0gICAgICAgICAgICAgICAgcmVzWyd0YWJsZSddID0gXy5leHRlbmQoe30sIGQs IHsncHJpb3JpdHknOiBpZHh9KTsKLSAgICAgICAgICAgICAgICBpZHggLT0gMTsKLSAgICAgICAg ICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChkLl90eXBlID09ICd0YWJsZScpIHsKLSAg ICAgICAgICAgICAgaWYgKCEoJ3RhYmxlJyBpbiByZXMpKSB7Ci0gICAgICAgICAgICAgICAgcmVz Wyd0YWJsZSddID0gXy5leHRlbmQoe30sIGQsIHsncHJpb3JpdHknOiBpZHh9KTsKLSAgICAgICAg ICAgICAgICBpZHggLT0gMTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgcmVzW2QuX3R5cGVdID0gXy5leHRlbmQoe30sIGQsIHsncHJpb3JpdHkn OiBpZHh9KTsKLSAgICAgICAgICAgICAgaWR4IC09IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgfQotICAgICAgICAgIGkgPSB0Lmhhc1BhcmVudChpKSA/IHQucGFyZW50KGkpIDogbnVsbDsK LSAgICAgICAgfSB3aGlsZSAoaSk7Ci0KLSAgICAgICAgcmV0dXJuIHJlczsKLSAgICAgIH0sCiAg ICAgICBnZW5lcmF0ZV91cmw6IGZ1bmN0aW9uKGl0ZW0sIHR5cGUsIGQsIHdpdGhfaWQsIGluZm8p IHsKICAgICAgICAgaWYgKF8uaW5kZXhPZihbCiAgICAgICAgICAgJ3N0YXRzJywgJ3N0YXRpc3Rp Y3MnLCAnZGVwZW5kZW5jeScsICdkZXBlbmRlbnQnLCAncmVzZXQnLApAQCAtMTIxOSwzMiArMTE5 Miw3IEBAIGZ1bmN0aW9uKAogICAgICAgICB9LAogICAgICAgfSksCiAgICAgICBjYW5DcmVhdGU6 IGZ1bmN0aW9uKGl0ZW1EYXRhLCBpdGVtLCBkYXRhKSB7Ci0gICAgICAgICAgLy9JZiBjaGVjayBp cyBmYWxzZSB0aGVuICwgd2Ugd2lsbCBhbGxvdyBjcmVhdGUgbWVudQotICAgICAgICBpZiAoZGF0 YSAmJiBkYXRhLmNoZWNrID09IGZhbHNlKQotICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg ICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsIGkgPSBpdGVtLCBkID0gaXRlbURhdGE7Ci0gICAg ICAgICAgLy8gVG8gaXRlcmF0ZSBvdmVyIHRyZWUgdG8gY2hlY2sgcGFyZW50IG5vZGUKLSAgICAg ICAgd2hpbGUgKGkpIHsKLSAgICAgICAgICAgIC8vIElmIGl0IGlzIHNjaGVtYSB0aGVuIGFsbG93 IHVzZXIgdG8gY3JlYXRlIHRhYmxlCi0gICAgICAgICAgaWYgKF8uaW5kZXhPZihbJ3NjaGVtYSdd LCBkLl90eXBlKSA+IC0xKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICBp ZiAoJ2NvbGwtdGFibGUnID09IGQuX3R5cGUpIHsKLSAgICAgICAgICAgICAgLy9DaGVjayBpZiB3 ZSBhcmUgbm90IGNoaWxkIG9mIGNhdGFsb2cKLSAgICAgICAgICAgIHZhciBwcmV2X2kgPSB0Lmhh c1BhcmVudChpKSA/IHQucGFyZW50KGkpIDogbnVsbDsKLSAgICAgICAgICAgIHZhciBwcmV2X2Qg PSBwcmV2X2kgPyB0Lml0ZW1EYXRhKHByZXZfaSkgOiBudWxsOwotICAgICAgICAgICAgaWYoIHBy ZXZfZC5fdHlwZSA9PSAnY2F0YWxvZycpIHsKLSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg ICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGkgPSB0Lmhhc1BhcmVudChpKSA/IHQucGFy ZW50KGkpIDogbnVsbDsKLSAgICAgICAgICBkID0gaSA/IHQuaXRlbURhdGEoaSkgOiBudWxsOwot ICAgICAgICB9Ci0gICAgICAgICAgLy8gYnkgZGVmYXVsdCB3ZSBkbyBub3Qgd2FudCB0byBhbGxv dyBjcmVhdGUgbWVudQotICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGNhbkNy ZWF0ZS5jYW5DcmVhdGUocGdCcm93c2VyLCAnY29sbC10YWJsZScsIGl0ZW0sIGRhdGEpOwogICAg ICAgfSwKICAgICAgIC8vIENoZWNrIHRvIHdoZXRoZXIgdGFibGUgaGFzIGRpc2FibGUgdHJpZ2dl cihzKQogICAgICAgY2FuQ3JlYXRlX3dpdGhfdHJpZ2dlcl9lbmFibGU6IGZ1bmN0aW9uKGl0ZW1E YXRhLCBpdGVtLCBkYXRhKSB7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcnVsZXMvc3RhdGljL2pz L3J1bGUuanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRh YmFzZXMvc2NoZW1hcy90YWJsZXMvcnVsZXMvc3RhdGljL2pzL3J1bGUuanMKaW5kZXggM2FmNjE3 NTQuLjM1NDkwOWYzIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcnVsZXMvc3RhdGljL2pzL3J1bGUu anMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJh c2VzL3NjaGVtYXMvdGFibGVzL3J1bGVzL3N0YXRpYy9qcy9ydWxlLmpzCkBAIC0xNiw3ICsxNiw2 IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnJ1bGUnLCBbCiAgICAgICAgIG5vZGU6ICdydWxlJywK ICAgICAgICAgbGFiZWw6IGdldHRleHQoJ1J1bGVzJyksCiAgICAgICAgIHR5cGU6ICdjb2xsLXJ1 bGUnLAotICAgICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdCcm93c2VyLnRhYmxlQ2hpbGRU cmVlTm9kZUhpZXJhcmNoeSwKICAgICAgICAgY29sdW1uczogWyduYW1lJywgJ293bmVyJywgJ2Nv bW1lbnQnXSwKICAgICAgIH0pOwogICB9CkBAIC0zNSw3ICszNCw2IEBAIGRlZmluZSgncGdhZG1p bi5ub2RlLnJ1bGUnLCBbCiAgICAqLwogICBpZiAoIXBnQnJvd3Nlci5Ob2Rlc1sncnVsZSddKSB7 CiAgICAgcGdBZG1pbi5Ccm93c2VyLk5vZGVzWydydWxlJ10gPSBwZ0Jyb3dzZXIuTm9kZS5leHRl bmQoewotICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6IHBnQnJvd3Nlci50YWJsZUNoaWxkVHJl ZU5vZGVIaWVyYXJjaHksCiAgICAgICBwYXJlbnRfdHlwZTogWyd0YWJsZScsJ3ZpZXcnLCAncGFy dGl0aW9uJ10sCiAgICAgICB0eXBlOiAncnVsZScsCiAgICAgICBzcWxBbHRlckhlbHA6ICdzcWwt YWx0ZXJydWxlLmh0bWwnLApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3N0YXRpYy9qcy90YWJsZS5q cyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9z Y2hlbWFzL3RhYmxlcy9zdGF0aWMvanMvdGFibGUuanMKaW5kZXggNjQ3ZDFiZmUuLmMwNTBjNDY5 IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvc3RhdGljL2pzL3RhYmxlLmpzCisrKyBiL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxl cy9zdGF0aWMvanMvdGFibGUuanMKQEAgLTEsMTMgKzEsMTcgQEAKIGRlZmluZSgncGdhZG1pbi5u b2RlLnRhYmxlJywgWworICAnc291cmNlcy90YWJsZScsCiAgICdzb3VyY2VzL2dldHRleHQnLCAn c291cmNlcy91cmxfZm9yJywgJ2pxdWVyeScsICd1bmRlcnNjb3JlJywKICAgJ3VuZGVyc2NvcmUu c3RyaW5nJywgJ3NvdXJjZXMvcGdhZG1pbicsICdwZ2FkbWluLmJyb3dzZXInLAogICAncGdhZG1p bi5hbGVydGlmeWpzJywgJ3BnYWRtaW4uYmFja2Zvcm0nLCAncGdhZG1pbi5iYWNrZ3JpZCcsCiAg ICdwZ2FkbWluLnRhYmxlcy5qcy9zaG93X2FkdmFuY2VkX3RhYicsCisgICdzb3VyY2VzL21lbnUv Y2FuX2NyZWF0ZScsCisKICAgJ3BnYWRtaW4uYnJvd3Nlci5jb2xsZWN0aW9uJywgJ3BnYWRtaW4u bm9kZS5jb2x1bW4nLAogICAncGdhZG1pbi5ub2RlLmNvbnN0cmFpbnRzJywgJ3BnYWRtaW4uYnJv d3Nlci50YWJsZS5wYXJ0aXRpb24udXRpbHMnLAogXSwgZnVuY3Rpb24oCisgIHRhYmxlRnVuY3Rp b25zLAogICBnZXR0ZXh0LCB1cmxfZm9yLCAkLCBfLCBTLCBwZ0FkbWluLCBwZ0Jyb3dzZXIsIEFs ZXJ0aWZ5LCBCYWNrZm9ybSwgQmFja2dyaWQsCi0gIFNob3dBZHZhbmNlZFRhYgorICBTaG93QWR2 YW5jZWRUYWIsIGNhbkNyZWF0ZQogKSB7CiAKICAgaWYgKCFwZ0Jyb3dzZXIuTm9kZXNbJ2NvbGwt dGFibGUnXSkgewpAQCAtMjYsNyArMzAsNiBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS50YWJsZScs IFsKIAogICBpZiAoIXBnQnJvd3Nlci5Ob2Rlc1sndGFibGUnXSkgewogICAgIHBnQnJvd3Nlci5O b2Rlc1sndGFibGUnXSA9IHBnQnJvd3Nlci5Ob2RlLmV4dGVuZCh7Ci0gICAgICBnZXRUcmVlTm9k ZUhpZXJhcmNoeTogcGdCcm93c2VyLnRhYmxlQ2hpbGRUcmVlTm9kZUhpZXJhcmNoeSwKICAgICAg IHR5cGU6ICd0YWJsZScsCiAgICAgICBsYWJlbDogZ2V0dGV4dCgnVGFibGUnKSwKICAgICAgIGNv bGxlY3Rpb25fdHlwZTogJ2NvbGwtdGFibGUnLApAQCAtMTE4LDUzICsxMjEsMjEgQEAgZGVmaW5l KCdwZ2FkbWluLm5vZGUudGFibGUnLCBbCiAgICAgICBjYWxsYmFja3M6IHsKICAgICAgICAgLyog RW5hYmxlIHRyaWdnZXIocykgb24gdGFibGUgKi8KICAgICAgICAgZW5hYmxlX3RyaWdnZXJzX29u X3RhYmxlOiBmdW5jdGlvbihhcmdzKSB7Ci0gICAgICAgICAgdmFyIHBhcmFtcyA9IHsnZW5hYmxl JzogdHJ1ZSB9OwotICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNldF90cmlnZ2Vycy5hcHBseSh0 aGlzLCBbYXJncywgcGFyYW1zXSk7CisgICAgICAgICAgdGFibGVGdW5jdGlvbnMuZW5hYmxlVHJp Z2dlcnMoCisgICAgICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUsCisgICAgICAgICAgICBBbGVy dGlmeSwKKyAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVfdXJsLmJpbmQodGhpcyksCisgICAgICAg ICAgICBhcmdzCisgICAgICAgICAgKTsKICAgICAgICAgfSwKICAgICAgICAgLyogRGlzYWJsZSB0 cmlnZ2VyKHMpIG9uIHRhYmxlICovCiAgICAgICAgIGRpc2FibGVfdHJpZ2dlcnNfb25fdGFibGU6 IGZ1bmN0aW9uKGFyZ3MpIHsKLSAgICAgICAgICB2YXIgcGFyYW1zID0geydlbmFibGUnOiBmYWxz ZSB9OwotICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNldF90cmlnZ2Vycy5hcHBseSh0aGlzLCBb YXJncywgcGFyYW1zXSk7Ci0gICAgICAgIH0sCi0gICAgICAgIHNldF90cmlnZ2VyczogZnVuY3Rp b24oYXJncywgcGFyYW1zKSB7Ci0gICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHNlbmQg cmVxdWVzdCB0byBlbmFibGUgb3IKLSAgICAgICAgICAvLyBkaXNhYmxlIHRyaWdnZXJzIG9uIHRh YmxlIGxldmVsCi0gICAgICAgICAgdmFyIGlucHV0ID0gYXJncyB8fCB7fSwKLSAgICAgICAgICAg IG9iaiA9IHRoaXMsCi0gICAgICAgICAgICB0ID0gcGdCcm93c2VyLnRyZWUsCi0gICAgICAgICAg ICBpID0gaW5wdXQuaXRlbSB8fCB0LnNlbGVjdGVkKCksCi0gICAgICAgICAgICBkID0gaSAmJiBp Lmxlbmd0aCA9PSAxID8gdC5pdGVtRGF0YShpKSA6IHVuZGVmaW5lZDsKLSAgICAgICAgICBpZiAo IWQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAkLmFqYXgoewotICAg ICAgICAgICAgdXJsOiBvYmouZ2VuZXJhdGVfdXJsKGksICdzZXRfdHJpZ2dlcicgLCBkLCB0cnVl KSwKLSAgICAgICAgICAgIHR5cGU6J1BVVCcsCi0gICAgICAgICAgICBkYXRhOiBwYXJhbXMsCi0g ICAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLAotICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rp b24ocmVzKSB7Ci0gICAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcyA9PSAxKSB7Ci0gICAgICAg ICAgICAgICAgQWxlcnRpZnkuc3VjY2VzcyhyZXMuaW5mbyk7Ci0gICAgICAgICAgICAgICAgdC51 bmxvYWQoaSk7Ci0gICAgICAgICAgICAgICAgdC5zZXRJbm9kZShpKTsKLSAgICAgICAgICAgICAg ICB0LmRlc2VsZWN0KGkpOwotICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7 Ci0gICAgICAgICAgICAgICAgICB0LnNlbGVjdChpKTsKLSAgICAgICAgICAgICAgICB9LCAxMCk7 Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBlcnJvcjogZnVu Y3Rpb24oeGhyKSB7Ci0gICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgdmFyIGVy ciA9ICQucGFyc2VKU09OKHhoci5yZXNwb25zZVRleHQpOwotICAgICAgICAgICAgICAgIGlmIChl cnIuc3VjY2VzcyA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICBBbGVydGlmeS5lcnJvcihlcnIu ZXJyb3Jtc2cpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSBjYXRjaCAoZSkg ewotICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlLnN0YWNrIHx8IGUpOwotICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgIHQudW5sb2FkKGkpOwotICAgICAgICAgICAgfSwKLSAgICAg ICAgICB9KTsKKyAgICAgICAgICB0YWJsZUZ1bmN0aW9ucy5kaXNhYmxlVHJpZ2dlcnMoCisgICAg ICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUsCisgICAgICAgICAgICBBbGVydGlmeSwKKyAgICAg ICAgICAgIHRoaXMuZ2VuZXJhdGVfdXJsLmJpbmQodGhpcyksCisgICAgICAgICAgICBhcmdzCisg ICAgICAgICAgKTsKICAgICAgICAgfSwKICAgICAgICAgLyogVHJ1bmNhdGUgdGFibGUgKi8KICAg ICAgICAgdHJ1bmNhdGVfdGFibGU6IGZ1bmN0aW9uKGFyZ3MpIHsKQEAgLTEzMjksMzIgKzEzMDAs NyBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS50YWJsZScsIFsKICAgICAgICAgfSwKICAgICAgIH0p LAogICAgICAgY2FuQ3JlYXRlOiBmdW5jdGlvbihpdGVtRGF0YSwgaXRlbSwgZGF0YSkgewotICAg ICAgICAvL0lmIGNoZWNrIGlzIGZhbHNlIHRoZW4gLCB3ZSB3aWxsIGFsbG93IGNyZWF0ZSBtZW51 Ci0gICAgICAgIGlmIChkYXRhICYmIGRhdGEuY2hlY2sgPT0gZmFsc2UpCi0gICAgICAgICAgcmV0 dXJuIHRydWU7Ci0KLSAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwgaSA9IGl0ZW0sIGQg PSBpdGVtRGF0YTsKLSAgICAgICAgLy8gVG8gaXRlcmF0ZSBvdmVyIHRyZWUgdG8gY2hlY2sgcGFy ZW50IG5vZGUKLSAgICAgICAgd2hpbGUgKGkpIHsKLSAgICAgICAgICAvLyBJZiBpdCBpcyBzY2hl bWEgdGhlbiBhbGxvdyB1c2VyIHRvIGNyZWF0ZSB0YWJsZQotICAgICAgICAgIGlmIChfLmluZGV4 T2YoWydzY2hlbWEnXSwgZC5fdHlwZSkgPiAtMSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot Ci0gICAgICAgICAgaWYgKCdjb2xsLXRhYmxlJyA9PSBkLl90eXBlKSB7Ci0gICAgICAgICAgICAv L0NoZWNrIGlmIHdlIGFyZSBub3QgY2hpbGQgb2YgY2F0YWxvZwotICAgICAgICAgICAgdmFyIHBy ZXZfaSA9IHQuaGFzUGFyZW50KGkpID8gdC5wYXJlbnQoaSkgOiBudWxsLAotICAgICAgICAgICAg ICBwcmV2X2QgPSBwcmV2X2kgPyB0Lml0ZW1EYXRhKHByZXZfaSkgOiBudWxsOwotICAgICAgICAg ICAgaWYoIHByZXZfZC5fdHlwZSA9PSAnY2F0YWxvZycpIHsKLSAgICAgICAgICAgICAgcmV0dXJu IGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgcmV0dXJuIHRydWU7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAgICAgIGkgPSB0Lmhhc1BhcmVudChp KSA/IHQucGFyZW50KGkpIDogbnVsbDsKLSAgICAgICAgICBkID0gaSA/IHQuaXRlbURhdGEoaSkg OiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIC8vIGJ5IGRlZmF1bHQgd2UgZG8gbm90IHdhbnQg dG8gYWxsb3cgY3JlYXRlIG1lbnUKLSAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVy biBjYW5DcmVhdGUuY2FuQ3JlYXRlKHBnQnJvd3NlciwgJ2NvbGwtdGFibGUnLCBpdGVtLCBkYXRh KTsKICAgICAgIH0sCiAgICAgICAvLyBDaGVjayB0byB3aGV0aGVyIHRhYmxlIGhhcyBkaXNhYmxl IHRyaWdnZXIocykKICAgICAgIGNhbkNyZWF0ZV93aXRoX3RyaWdnZXJfZW5hYmxlOiBmdW5jdGlv bihpdGVtRGF0YSwgaXRlbSwgZGF0YSkgewpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RyaWdnZXJz L3N0YXRpYy9qcy90cmlnZ2VyLmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RyaWdnZXJzL3N0YXRpYy9qcy90cmln Z2VyLmpzCmluZGV4IGZiZTc2NTllLi45YTFjZTJlMCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Ry aWdnZXJzL3N0YXRpYy9qcy90cmlnZ2VyLmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2Vy dmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90cmlnZ2Vycy9zdGF0 aWMvanMvdHJpZ2dlci5qcwpAQCAtMjksMTQgKzI5LDEyIEBAIGRlZmluZSgncGdhZG1pbi5ub2Rl LnRyaWdnZXInLCBbCiAgICAgICAgIG5vZGU6ICd0cmlnZ2VyJywKICAgICAgICAgbGFiZWw6IGdl dHRleHQoJ1RyaWdnZXJzJyksCiAgICAgICAgIHR5cGU6ICdjb2xsLXRyaWdnZXInLAotICAgICAg ICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdCcm93c2VyLnRhYmxlQ2hpbGRUcmVlTm9kZUhpZXJh cmNoeSwKICAgICAgICAgY29sdW1uczogWyduYW1lJywgJ2Rlc2NyaXB0aW9uJ10sCiAgICAgICB9 KTsKICAgfQogCiAgIGlmICghcGdCcm93c2VyLk5vZGVzWyd0cmlnZ2VyJ10pIHsKICAgICBwZ0Fk bWluLkJyb3dzZXIuTm9kZXNbJ3RyaWdnZXInXSA9IHBnQnJvd3Nlci5Ob2RlLmV4dGVuZCh7Ci0g ICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdCcm93c2VyLnRhYmxlQ2hpbGRUcmVlTm9kZUhp ZXJhcmNoeSwKICAgICAgIHBhcmVudF90eXBlOiBbJ3RhYmxlJywgJ3ZpZXcnLCAncGFydGl0aW9u J10sCiAgICAgICBjb2xsZWN0aW9uX3R5cGU6IFsnY29sbC10YWJsZScsICdjb2xsLXZpZXcnXSwK ICAgICAgIHR5cGU6ICd0cmlnZ2VyJywKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIv c2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3R5cGVzL3N0YXRpYy9qcy90 eXBlLmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJh c2VzL3NjaGVtYXMvdHlwZXMvc3RhdGljL2pzL3R5cGUuanMKaW5kZXggYzFjMjQ4NjEuLjkxY2U2 MTVmIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVy cy9kYXRhYmFzZXMvc2NoZW1hcy90eXBlcy9zdGF0aWMvanMvdHlwZS5qcworKysgYi93ZWIvcGdh ZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90eXBl cy9zdGF0aWMvanMvdHlwZS5qcwpAQCAtMSw4ICsxLDkgQEAKIGRlZmluZSgncGdhZG1pbi5ub2Rl LnR5cGUnLCBbCiAgICdzb3VyY2VzL2dldHRleHQnLCAnc291cmNlcy91cmxfZm9yJywgJ2pxdWVy eScsICd1bmRlcnNjb3JlJywKICAgJ3NvdXJjZXMvcGdhZG1pbicsICdwZ2FkbWluLmJyb3dzZXIn LCAncGdhZG1pbi5iYWNrZm9ybScsCi0gICdwZ2FkbWluLmJhY2tncmlkJywgJ3BnYWRtaW4uYnJv d3Nlci5jb2xsZWN0aW9uJywKLV0sIGZ1bmN0aW9uKGdldHRleHQsIHVybF9mb3IsICQsIF8sIHBn QWRtaW4sIHBnQnJvd3NlciwgQmFja2Zvcm0sIEJhY2tncmlkKSB7CisgICdwZ2FkbWluLmJhY2tn cmlkJywgJ3NvdXJjZXMvbWVudS9jYW5fY3JlYXRlJywgJ3BnYWRtaW4uYnJvd3Nlci5jb2xsZWN0 aW9uJywKK10sIGZ1bmN0aW9uKGdldHRleHQsIHVybF9mb3IsICQsIF8sIHBnQWRtaW4sIHBnQnJv d3NlciwgQmFja2Zvcm0sIEJhY2tncmlkLAorICAgY2FuQ3JlYXRlKSB7CiAKICAgaWYgKCFwZ0Jy b3dzZXIuTm9kZXNbJ2NvbGwtdHlwZSddKSB7CiAgICAgcGdCcm93c2VyLk5vZGVzWydjb2xsLXR5 cGUnXSA9CkBAIC05MTIsMzIgKzkxMyw3IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnR5cGUnLCBb CiAgICAgICAgIH0sCiAgICAgICB9KSwKICAgICAgIGNhbkNyZWF0ZTogZnVuY3Rpb24oaXRlbURh dGEsIGl0ZW0sIGRhdGEpIHsKLSAgICAgICAgLy9JZiBjaGVjayBpcyBmYWxzZSB0aGVuICwgd2Ug d2lsbCBhbGxvdyBjcmVhdGUgbWVudQotICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmNoZWNrID09 IGZhbHNlKQotICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIHZhciB0ID0gcGdCcm93 c2VyLnRyZWUsIGkgPSBpdGVtLCBkID0gaXRlbURhdGE7Ci0gICAgICAgIC8vIFRvIGl0ZXJhdGUg b3ZlciB0cmVlIHRvIGNoZWNrIHBhcmVudCBub2RlCi0gICAgICAgIHdoaWxlIChpKSB7Ci0gICAg ICAgICAgLy8gSWYgaXQgaXMgc2NoZW1hIHRoZW4gYWxsb3cgdXNlciB0byBjcmVhdGUgdGFibGUK LSAgICAgICAgICBpZiAoXy5pbmRleE9mKFsnc2NoZW1hJ10sIGQuX3R5cGUpID4gLTEpCi0gICAg ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgIGlmICgnY29sbC10eXBlJyA9PSBkLl90 eXBlKSB7Ci0gICAgICAgICAgICAvL0NoZWNrIGlmIHdlIGFyZSBub3QgY2hpbGQgb2YgY2F0YWxv ZwotICAgICAgICAgICAgdmFyIHByZXZfaSA9IHQuaGFzUGFyZW50KGkpID8gdC5wYXJlbnQoaSkg OiBudWxsLAotICAgICAgICAgICAgICBwcmV2X2QgPSBwcmV2X2kgPyB0Lml0ZW1EYXRhKHByZXZf aSkgOiBudWxsOwotICAgICAgICAgICAgaWYoIHByZXZfZC5fdHlwZSA9PSAnY2F0YWxvZycpIHsK LSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotICAgICAg ICAgIGkgPSB0Lmhhc1BhcmVudChpKSA/IHQucGFyZW50KGkpIDogbnVsbDsKLSAgICAgICAgICBk ID0gaSA/IHQuaXRlbURhdGEoaSkgOiBudWxsOwotICAgICAgICB9Ci0gICAgICAgIC8vIGJ5IGRl ZmF1bHQgd2UgZG8gbm90IHdhbnQgdG8gYWxsb3cgY3JlYXRlIG1lbnUKLSAgICAgICAgcmV0dXJu IHRydWU7CisgICAgICAgIHJldHVybiBjYW5DcmVhdGUuY2FuQ3JlYXRlKHBnQnJvd3NlciwgJ2Nv bGwtdHlwZScsIGl0ZW0sIGRhdGEpOwogICAgICAgfSwKICAgICB9KTsKICAgfQpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvdmlld3Mvc3RhdGljL2pzL212aWV3LmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2 ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdmlld3Mvc3RhdGljL2pzL212aWV3 LmpzCmluZGV4IDc5NWJiZmNmLi4xNWE1MTdiOCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJv d3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdmlld3Mvc3RhdGlj L2pzL212aWV3LmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2 ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3ZpZXdzL3N0YXRpYy9qcy9tdmlldy5qcwpAQCAtMSw4ICsx LDExIEBACiBkZWZpbmUoJ3BnYWRtaW4ubm9kZS5tdmlldycsIFsKICAgJ3NvdXJjZXMvZ2V0dGV4 dCcsICdzb3VyY2VzL3VybF9mb3InLCAnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLAogICAnc291cmNl cy9wZ2FkbWluJywgJ3BnYWRtaW4uYWxlcnRpZnlqcycsICdwZ2FkbWluLmJyb3dzZXInLAotICAn cGdhZG1pbi5iYWNrZm9ybScsICdwZ2FkbWluLmJyb3dzZXIuc2VydmVyLnByaXZpbGVnZScsCi1d LCBmdW5jdGlvbihnZXR0ZXh0LCB1cmxfZm9yLCAkLCBfLCBwZ0FkbWluLCBBbGVydGlmeSwgcGdC cm93c2VyLCBCYWNrZm9ybSkgeworICAncGdhZG1pbi5iYWNrZm9ybScsCisgICdzb3VyY2VzL21l bnUvY2FuX2NyZWF0ZScsCisgICdwZ2FkbWluLmJyb3dzZXIuc2VydmVyLnByaXZpbGVnZScsCitd LCBmdW5jdGlvbihnZXR0ZXh0LCB1cmxfZm9yLCAkLCBfLCBwZ0FkbWluLCBBbGVydGlmeSwgcGdC cm93c2VyLCBCYWNrZm9ybSwKKyAgY2FuQ3JlYXRlKSB7CiAKICAgLyoqCiAgICAgQ3JlYXRlIGFu ZCBhZGQgYSB2aWV3IGNvbGxlY3Rpb24gaW50byBub2RlcwpAQCAtMjQxLDM3ICsyNDQsNyBAQCBk ZWZpbmUoJ3BnYWRtaW4ubm9kZS5tdmlldycsIFsKICAgICAgICAgYW5kIGhpZGUgZm9yIHN5c3Rl bSB2aWV3IGluIGNhdGFsb2dzLgogICAgICAgICovCiAgICAgICBjYW5DcmVhdGU6IGZ1bmN0aW9u KGl0ZW1EYXRhLCBpdGVtLCBkYXRhKSB7Ci0KLSAgICAgICAgLy8gSWYgY2hlY2sgaXMgZmFsc2Ug dGhlbiwgd2Ugd2lsbCBhbGxvdyBjcmVhdGUgbWVudQotICAgICAgICBpZiAoZGF0YSAmJiBkYXRh LmNoZWNrID09PSBmYWxzZSkKLSAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICB2YXIg dCA9IHBnQnJvd3Nlci50cmVlLCBpID0gaXRlbSwgZCA9IGl0ZW1EYXRhOwotCi0gICAgICAgIC8v IFRvIGl0ZXJhdGUgb3ZlciB0cmVlIHRvIGNoZWNrIHBhcmVudCBub2RlCi0gICAgICAgIHdoaWxl IChpKSB7Ci0KLSAgICAgICAgICAvLyBJZiBpdCBpcyBzY2hlbWEgdGhlbiBhbGxvdyB1c2VyIHRv IGNyZWF0ZSB2aWV3Ci0gICAgICAgICAgaWYgKF8uaW5kZXhPZihbJ3NjaGVtYSddLCBkLl90eXBl KSA+IC0xKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICBpZiAoJ2NvbGwt bXZpZXcnID09IGQuX3R5cGUpIHsKLQotICAgICAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYXJlIG5v dCBjaGlsZCBvZiB2aWV3Ci0gICAgICAgICAgICB2YXIgcHJldl9pID0gdC5oYXNQYXJlbnQoaSkg PyB0LnBhcmVudChpKSA6IG51bGwsCi0gICAgICAgICAgICAgIHByZXZfZCA9IHByZXZfaSA/IHQu aXRlbURhdGEocHJldl9pKSA6IG51bGw7Ci0gICAgICAgICAgICBpZiggcHJldl9kLl90eXBlID09 ICdjYXRhbG9nJykgewotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg ICAgICB9Ci0gICAgICAgICAgaSA9IHQuaGFzUGFyZW50KGkpID8gdC5wYXJlbnQoaSkgOiBudWxs OwotICAgICAgICAgIGQgPSBpID8gdC5pdGVtRGF0YShpKSA6IG51bGw7Ci0gICAgICAgIH0KLQot ICAgICAgICAvLyBieSBkZWZhdWx0IHdlIGRvIG5vdCB3YW50IHRvIGFsbG93IGNyZWF0ZSBtZW51 Ci0gICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gY2FuQ3JlYXRlLmNhbkNyZWF0 ZShwZ0Jyb3dzZXIsICdjb2xsLW12aWV3JywgaXRlbSwgZGF0YSk7CiAgICAgICB9LAogICAgICAg cmVmcmVzaF9tdmlldzogZnVuY3Rpb24oYXJncykgewogICAgICAgICB2YXIgaW5wdXQgPSBhcmdz IHx8IHt9LApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdmlld3Mvc3RhdGljL2pzL3ZpZXcuanMgYi93ZWIvcGdh ZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy92aWV3 cy9zdGF0aWMvanMvdmlldy5qcwppbmRleCA1NzU1YTUwOS4uZTQyNTgxODggMTAwNjQ0Ci0tLSBh L3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hl bWFzL3ZpZXdzL3N0YXRpYy9qcy92aWV3LmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2Vy dmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3ZpZXdzL3N0YXRpYy9qcy92aWV3 LmpzCkBAIC0xLDkgKzEsMTIgQEAKIGRlZmluZSgncGdhZG1pbi5ub2RlLnZpZXcnLCBbCiAgICdz b3VyY2VzL2dldHRleHQnLAogICAnc291cmNlcy91cmxfZm9yJywgJ2pxdWVyeScsICd1bmRlcnNj b3JlJywgJ3NvdXJjZXMvcGdhZG1pbicsCi0gICdwZ2FkbWluLmJyb3dzZXInLCAncGdhZG1pbi5i YWNrZm9ybScsICdwZ2FkbWluLmJyb3dzZXIuc2VydmVyLnByaXZpbGVnZScsCisgICdwZ2FkbWlu LmJyb3dzZXInLCAncGdhZG1pbi5iYWNrZm9ybScsCisgICdzb3VyY2VzL21lbnUvY2FuX2NyZWF0 ZScsCisgICdwZ2FkbWluLmJyb3dzZXIuc2VydmVyLnByaXZpbGVnZScsCiAgICdwZ2FkbWluLm5v ZGUucnVsZScsCi1dLCBmdW5jdGlvbihnZXR0ZXh0LCB1cmxfZm9yLCAkLCBfLCBwZ0FkbWluLCBw Z0Jyb3dzZXIsIEJhY2tmb3JtKSB7CitdLCBmdW5jdGlvbihnZXR0ZXh0LCB1cmxfZm9yLCAkLCBf LCBwZ0FkbWluLCBwZ0Jyb3dzZXIsIEJhY2tmb3JtLAorICBjYW5DcmVhdGUpIHsKIAogICAvKioK ICAgICBDcmVhdGUgYW5kIGFkZCBhIHZpZXcgY29sbGVjdGlvbiBpbnRvIG5vZGVzCkBAIC0yMDMs MzggKzIwNiw3IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnZpZXcnLCBbCiAgICAgICAgIGFuZCBo aWRlIGZvciBzeXN0ZW0gdmlldyBpbiBjYXRhbG9ncy4KICAgICAgICAgKi8KICAgICAgIGNhbkNy ZWF0ZTogZnVuY3Rpb24oaXRlbURhdGEsIGl0ZW0sIGRhdGEpIHsKLQotICAgICAgICAvLyBJZiBj aGVjayBpcyBmYWxzZSB0aGVuLCB3ZSB3aWxsIGFsbG93IGNyZWF0ZSBtZW51Ci0gICAgICAgIGlm IChkYXRhICYmIGRhdGEuY2hlY2sgPT0gZmFsc2UpCi0gICAgICAgICAgcmV0dXJuIHRydWU7Ci0K LSAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwgaSA9IGl0ZW0sIGQgPSBpdGVtRGF0YTsK LQotICAgICAgICAvLyBUbyBpdGVyYXRlIG92ZXIgdHJlZSB0byBjaGVjayBwYXJlbnQgbm9kZQot ICAgICAgICB3aGlsZSAoaSkgewotCi0gICAgICAgICAgLy8gSWYgaXQgaXMgc2NoZW1hIHRoZW4g YWxsb3cgdXNlciB0byBjcmVhdGUgdmlldwotICAgICAgICAgIGlmIChfLmluZGV4T2YoWydzY2hl bWEnXSwgZC5fdHlwZSkgPiAtMSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAg ICAgaWYgKCdjb2xsLXZpZXcnID09IGQuX3R5cGUpIHsKLQotICAgICAgICAgICAgLy8gQ2hlY2sg aWYgd2UgYXJlIG5vdCBjaGlsZCBvZiB2aWV3Ci0gICAgICAgICAgICB2YXIgcHJldl9pID0gdC5o YXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGwsCi0gICAgICAgICAgICAgIHByZXZfZCA9 IHByZXZfaSA/IHQuaXRlbURhdGEocHJldl9pKSA6IG51bGw7Ci0gICAgICAgICAgICBpZiggcHJl dl9kLl90eXBlID09ICdjYXRhbG9nJykgewotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg ICAgIH0KLSAgICAgICAgICB9Ci0gICAgICAgICAgaSA9IHQuaGFzUGFyZW50KGkpID8gdC5wYXJl bnQoaSkgOiBudWxsOwotICAgICAgICAgIGQgPSBpID8gdC5pdGVtRGF0YShpKSA6IG51bGw7Ci0g ICAgICAgIH0KLQotICAgICAgICAvLyBieSBkZWZhdWx0IHdlIGRvIG5vdCB3YW50IHRvIGFsbG93 IGNyZWF0ZSBtZW51Ci0gICAgICAgIHJldHVybiB0cnVlOwotCisgICAgICAgIHJldHVybiBjYW5D cmVhdGUuY2FuQ3JlYXRlKHBnQnJvd3NlciwgJ2NvbGwtdmlldycsIGl0ZW0sIGRhdGEpOwogICAg ICAgfSwKICAgICB9KTsKICAgfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0 aWMvanMvbm9kZS5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2pzL25vZGUuanMKaW5k ZXggYWQ1ODI0ODMuLjNiYWY1NTRhIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3N0 YXRpYy9qcy9ub2RlLmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2pzL25vZGUu anMKQEAgLTEsOSArMSwxMiBAQAogZGVmaW5lKCdwZ2FkbWluLmJyb3dzZXIubm9kZScsIFsKKyAg J3NvdXJjZXMvdHJlZS9wZ2FkbWluX3RyZWVfbm9kZScsCiAgICdzb3VyY2VzL2dldHRleHQnLCAn anF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAndW5kZXJzY29yZS5zdHJpbmcnLCAnc291cmNlcy9wZ2Fk bWluJywKICAgJ3BnYWRtaW4uYnJvd3Nlci5tZW51JywgJ2JhY2tib25lJywgJ3BnYWRtaW4uYWxl cnRpZnlqcycsICdwZ2FkbWluLmJyb3dzZXIuZGF0YW1vZGVsJywKICAgJ2JhY2tmb3JtJywgJ3Nv dXJjZXMvYnJvd3Nlci9nZW5lcmF0ZV91cmwnLCAnc291cmNlcy91dGlscycsICdwZ2FkbWluLmJy b3dzZXIudXRpbHMnLAogICAncGdhZG1pbi5iYWNrZm9ybScsCi1dLCBmdW5jdGlvbihnZXR0ZXh0 LCAkLCBfLCBTLCBwZ0FkbWluLCBNZW51LCBCYWNrYm9uZSwgQWxlcnRpZnksIHBnQnJvd3Nlciwg QmFja2Zvcm0sIGdlbmVyYXRlVXJsLCBjb21tb25VdGlscykgeworXSwgZnVuY3Rpb24oCisgIHBn YWRtaW5UcmVlTm9kZSwKKyAgZ2V0dGV4dCwgJCwgXywgUywgcGdBZG1pbiwgTWVudSwgQmFja2Jv bmUsIEFsZXJ0aWZ5LCBwZ0Jyb3dzZXIsIEJhY2tmb3JtLCBnZW5lcmF0ZVVybCwgY29tbW9uVXRp bHMpIHsKIAogICB2YXIgd2NEb2NrZXIgPSB3aW5kb3cud2NEb2NrZXIsCiAgICAga2V5Q29kZSA9 IHsKQEAgLTE1NjYsNyArMTU2OSw2IEBAIGRlZmluZSgncGdhZG1pbi5icm93c2VyLm5vZGUnLCBb CiAgICAgICogZGVwZW5kcywgc3RhdGlzdGljcwogICAgICAqLwogICAgIGdlbmVyYXRlX3VybDog ZnVuY3Rpb24oaXRlbSwgdHlwZSwgZCwgd2l0aF9pZCwgaW5mbykgewotCiAgICAgICB2YXIgb3BV UkwgPSB7CiAgICAgICAgICAgJ2NyZWF0ZSc6ICdvYmonLAogICAgICAgICAgICdkcm9wJzogJ29i aicsCkBAIC0xNjA4LDI0ICsxNjEwLDcgQEAgZGVmaW5lKCdwZ2FkbWluLmJyb3dzZXIubm9kZScs IFsKICAgICBDb2xsZWN0aW9uOiBwZ0Jyb3dzZXIuRGF0YUNvbGxlY3Rpb24sCiAgICAgLy8gQmFz ZSBjbGFzcyBmb3IgTm9kZSBEYXRhIE1vZGVsCiAgICAgTW9kZWw6IHBnQnJvd3Nlci5EYXRhTW9k ZWwsCi0gICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6IGZ1bmN0aW9uKGkpIHsKLSAgICAgIHZhciBp ZHggPSAwLAotICAgICAgICByZXMgPSB7fSwKLSAgICAgICAgdCA9IHBnQnJvd3Nlci50cmVlLAot ICAgICAgICBkOwotICAgICAgZG8gewotICAgICAgICBkID0gdC5pdGVtRGF0YShpKTsKLSAgICAg ICAgaWYgKGQuX3R5cGUgaW4gcGdCcm93c2VyLk5vZGVzICYmIHBnQnJvd3Nlci5Ob2Rlc1tkLl90 eXBlXS5oYXNJZCkgewotICAgICAgICAgIHJlc1tkLl90eXBlXSA9IF8uZXh0ZW5kKHt9LCBkLCB7 Ci0gICAgICAgICAgICAncHJpb3JpdHknOiBpZHgsCi0gICAgICAgICAgfSk7Ci0gICAgICAgICAg aWR4IC09IDE7Ci0gICAgICAgIH0KLSAgICAgICAgaSA9IHQuaGFzUGFyZW50KGkpID8gdC5wYXJl bnQoaSkgOiBudWxsOwotICAgICAgfSB3aGlsZSAoaSk7Ci0KLSAgICAgIHJldHVybiByZXM7Ci0g ICAgfSwKKyAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdhZG1pblRyZWVOb2RlLmdldFRyZWVO b2RlSGllcmFyY2h5RnJvbUlkZW50aWZpZXIuYmluZChwZ0Jyb3dzZXIpLAogICAgIGNhY2hlOiBm dW5jdGlvbih1cmwsIG5vZGVfaW5mbywgbGV2ZWwsIGRhdGEpIHsKICAgICAgIHZhciBjYWNoZWQg PSB0aGlzLmNhY2hlZCA9IHRoaXMuY2FjaGVkIHx8IHt9LAogICAgICAgICBoYXNoID0gdXJsLApk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2FsZXJ0aWZ5L2RpYWxvZy5qcyBiL3dl Yi9wZ2FkbWluL3N0YXRpYy9qcy9hbGVydGlmeS9kaWFsb2cuanMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAuLjk1ODI5NmMzCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRt aW4vc3RhdGljL2pzL2FsZXJ0aWZ5L2RpYWxvZy5qcwpAQCAtMCwwICsxLDEwNyBAQAorLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor Ly8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMp IDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3 YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor CitpbXBvcnQgZ2V0dGV4dCBmcm9tICcuLi9nZXR0ZXh0JzsKK2ltcG9ydCB7c3ByaW50Zn0gZnJv bSAnc3ByaW50Zi1qcyc7CitpbXBvcnQge0RpYWxvZ0ZhY3Rvcnl9IGZyb20gJy4vZGlhbG9nX2Zh Y3RvcnknOworaW1wb3J0IEJhY2tmb3JtIGZyb20gJy4uL2JhY2tmb3JtLnBnYWRtaW4nOworCitl eHBvcnQgY2xhc3MgRGlhbG9nIHsKKyAgY29uc3RydWN0b3IoZXJyb3JBbGVydFRpdGxlLAorICAg ICAgICAgICAgICBkaWFsb2dDb250YWluZXJTZWxlY3RvciwKKyAgICAgICAgICAgICAgcGdCcm93 c2VyLCAkLCBhbGVydGlmeSwgRGlhbG9nTW9kZWwsCisgICAgICAgICAgICAgIGJhY2tmb3JtID0g QmFja2Zvcm0pIHsKKyAgICB0aGlzLmVycm9yQWxlcnRUaXRsZSA9IGVycm9yQWxlcnRUaXRsZTsK KyAgICB0aGlzLmFsZXJ0aWZ5ID0gYWxlcnRpZnk7CisgICAgdGhpcy5wZ0Jyb3dzZXIgPSBwZ0Jy b3dzZXI7CisgICAgdGhpcy5qcXVlcnkgPSAkOworICAgIHRoaXMuZGlhbG9nTW9kZWwgPSBEaWFs b2dNb2RlbDsKKyAgICB0aGlzLmJhY2tmb3JtID0gYmFja2Zvcm07CisgICAgdGhpcy5kaWFsb2dD b250YWluZXJTZWxlY3RvciA9IGRpYWxvZ0NvbnRhaW5lclNlbGVjdG9yOworICB9CisKKyAgcmV0 cmlldmVBbmNlc3Rvck9mVHlwZVNlcnZlcihpdGVtKSB7CisgICAgbGV0IHNlcnZlckluZm9ybWF0 aW9uID0gbnVsbDsKKyAgICBsZXQgYWNpVHJlZUl0ZW0gPSBpdGVtIHx8IHRoaXMucGdCcm93c2Vy LnRyZWVNZW51LnNlbGVjdGVkKCk7CisgICAgbGV0IHRyZWVOb2RlID0gdGhpcy5wZ0Jyb3dzZXIu dHJlZU1lbnUuZmluZE5vZGVCeURvbUVsZW1lbnQoYWNpVHJlZUl0ZW0pOworCisgICAgd2hpbGUg KHRyZWVOb2RlKSB7CisgICAgICBjb25zdCBub2RlX2RhdGEgPSB0cmVlTm9kZS5nZXREYXRhKCk7 CisgICAgICBpZiAobm9kZV9kYXRhLl90eXBlID09PSAnc2VydmVyJykgeworICAgICAgICBzZXJ2 ZXJJbmZvcm1hdGlvbiA9IG5vZGVfZGF0YTsKKyAgICAgICAgYnJlYWs7CisgICAgICB9CisKKyAg ICAgIGlmICh0cmVlTm9kZS5oYXNQYXJlbnQoKSkgeworICAgICAgICB0cmVlTm9kZSA9IHRyZWVO b2RlLnBhcmVudCgpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgdGhpcy5hbGVydGlmeS5hbGVy dCgKKyAgICAgICAgICBnZXR0ZXh0KHRoaXMuZXJyb3JBbGVydFRpdGxlKSwKKyAgICAgICAgICBn ZXR0ZXh0KCdQbGVhc2Ugc2VsZWN0IHNlcnZlciBvciBjaGlsZCBub2RlIGZyb20gdGhlIGJyb3dz ZXIgdHJlZS4nKQorICAgICAgICApOworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9Cisg ICAgcmV0dXJuIHNlcnZlckluZm9ybWF0aW9uOworICB9CisKKyAgaGFzQmluYXJpZXNDb25maWd1 cmF0aW9uKHNlcnZlckluZm9ybWF0aW9uKSB7CisgICAgY29uc3QgbW9kdWxlID0gJ3BhdGhzJzsK KyAgICBsZXQgcHJlZmVyZW5jZV9uYW1lID0gJ3BnX2Jpbl9kaXInOworICAgIGxldCBtc2cgPSBn ZXR0ZXh0KCdQbGVhc2UgY29uZmlndXJlIHRoZSBQb3N0Z3JlU1FMIEJpbmFyeSBQYXRoIGluIHRo ZSBQcmVmZXJlbmNlcyBkaWFsb2cuJyk7CisKKyAgICBpZiAoKHNlcnZlckluZm9ybWF0aW9uLnR5 cGUgJiYgc2VydmVySW5mb3JtYXRpb24udHlwZSA9PT0gJ3BwYXMnKSB8fAorICAgICAgc2VydmVy SW5mb3JtYXRpb24uc2VydmVyX3R5cGUgPT09ICdwcGFzJykgeworICAgICAgcHJlZmVyZW5jZV9u YW1lID0gJ3BwYXNfYmluX2Rpcic7CisgICAgICBtc2cgPSBnZXR0ZXh0KCdQbGVhc2UgY29uZmln dXJlIHRoZSBFREIgQWR2YW5jZWQgU2VydmVyIEJpbmFyeSBQYXRoIGluIHRoZSBQcmVmZXJlbmNl cyBkaWFsb2cuJyk7CisgICAgfQorICAgIGNvbnN0IHByZWZlcmVuY2UgPSB0aGlzLnBnQnJvd3Nl ci5nZXRfcHJlZmVyZW5jZShtb2R1bGUsIHByZWZlcmVuY2VfbmFtZSk7CisKKyAgICBpZiAocHJl ZmVyZW5jZSkgeworICAgICAgaWYgKCFwcmVmZXJlbmNlLnZhbHVlKSB7CisgICAgICAgIHRoaXMu YWxlcnRpZnkuYWxlcnQoZ2V0dGV4dCgnQ29uZmlndXJhdGlvbiByZXF1aXJlZCcpLCBtc2cpOwor ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgIHRoaXMu YWxlcnRpZnkuYWxlcnQoCisgICAgICAgIGdldHRleHQodGhpcy5lcnJvckFsZXJ0VGl0bGUpLAor ICAgICAgICBzcHJpbnRmKGdldHRleHQoJ0ZhaWxlZCB0byBsb2FkIHByZWZlcmVuY2UgJXMgb2Yg bW9kdWxlICVzJyksIHByZWZlcmVuY2VfbmFtZSwgbW9kdWxlKQorICAgICAgKTsKKyAgICAgIHJl dHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7CisgIH0KKworICBkaWFsb2dOYW1l KCkgeworICAgIHJldHVybiB1bmRlZmluZWQ7CisgIH0KKworICBjcmVhdGVPckdldERpYWxvZyhk aWFsb2dUaXRsZSwgdHlwZU9mRGlhbG9nKSB7CisgICAgY29uc3QgZGlhbG9nTmFtZSA9IHRoaXMu ZGlhbG9nTmFtZSh0eXBlT2ZEaWFsb2cpOworCisgICAgaWYgKCF0aGlzLmFsZXJ0aWZ5W2RpYWxv Z05hbWVdKSB7CisgICAgICBjb25zdCBzZWxmID0gdGhpczsKKyAgICAgIHRoaXMuYWxlcnRpZnku ZGlhbG9nKGRpYWxvZ05hbWUsIGZ1bmN0aW9uIGZhY3RvcnkoKSB7CisgICAgICAgIHJldHVybiBz ZWxmLmRpYWxvZ0ZhY3RvcnkoZGlhbG9nVGl0bGUsIHR5cGVPZkRpYWxvZyk7CisgICAgICB9KTsK KyAgICB9CisgICAgcmV0dXJuIHRoaXMuYWxlcnRpZnlbZGlhbG9nTmFtZV07CisgIH0KKworICBk aWFsb2dGYWN0b3J5KGRpYWxvZ1RpdGxlLCB0eXBlT2ZEaWFsb2cpIHsKKyAgICBjb25zdCBmYWN0 b3J5ID0gbmV3IERpYWxvZ0ZhY3RvcnkoCisgICAgICB0aGlzLnBnQnJvd3NlciwKKyAgICAgIHRo aXMuanF1ZXJ5LAorICAgICAgdGhpcy5hbGVydGlmeSwKKyAgICAgIHRoaXMuZGlhbG9nTW9kZWws CisgICAgICB0aGlzLmJhY2tmb3JtLAorICAgICAgdGhpcy5kaWFsb2dDb250YWluZXJTZWxlY3Rv cik7CisgICAgcmV0dXJuIGZhY3RvcnkuY3JlYXRlKGRpYWxvZ1RpdGxlLCB0eXBlT2ZEaWFsb2cp OworICB9Cit9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYWxlcnRpZnkvZGlh bG9nX2ZhY3RvcnkuanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYWxlcnRpZnkvZGlhbG9nX2Zh Y3RvcnkuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjgwNmY4Njg3Ci0t LSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2FsZXJ0aWZ5L2RpYWxvZ19m YWN0b3J5LmpzCkBAIC0wLDAgKzEsNTIgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBwZ0FkbWluIDQgLSBQb3N0 Z3JlU1FMIFRvb2xzCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwgVGhlIHBnQWRt aW4gRGV2ZWxvcG1lbnQgVGVhbQorLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0 aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworaW1wb3J0ICogYXMgQmFja3VwRGlh bG9nIGZyb20gJy4uL2JhY2t1cC9iYWNrdXBfZGlhbG9nX3dyYXBwZXInOworaW1wb3J0IHtSZXN0 b3JlRGlhbG9nV3JhcHBlcn0gZnJvbSAnLi4vcmVzdG9yZS9yZXN0b3JlX2RpYWxvZ193cmFwcGVy JzsKKworZXhwb3J0IGNsYXNzIERpYWxvZ0ZhY3RvcnkgeworICBjb25zdHJ1Y3RvcihwZ0Jyb3dz ZXIsICQsCisgICAgICAgICAgICAgIGFsZXJ0aWZ5LCBEaWFsb2dNb2RlbCwKKyAgICAgICAgICAg ICAgYmFja2Zvcm0sIGRpYWxvZ0NvbnRhaW5lclNlbGVjdG9yKSB7CisgICAgdGhpcy5wZ0Jyb3dz ZXIgPSBwZ0Jyb3dzZXI7CisgICAgdGhpcy5qcXVlcnkgPSAkOworICAgIHRoaXMuYWxlcnRpZnkg PSBhbGVydGlmeTsKKyAgICB0aGlzLmRpYWxvZ01vZGVsID0gRGlhbG9nTW9kZWw7CisgICAgdGhp cy5iYWNrZm9ybSA9IGJhY2tmb3JtOworICAgIHRoaXMuZGlhbG9nQ29udGFpbmVyU2VsZWN0b3Ig PSBkaWFsb2dDb250YWluZXJTZWxlY3RvcjsKKyAgfQorCisgIGNyZWF0ZShkaWFsb2dUaXRsZSwg dHlwZU9mRGlhbG9nKSB7CisgICAgaWYgKHR5cGVPZkRpYWxvZyA9PT0gJ3Jlc3RvcmUnKSB7Cisg ICAgICByZXR1cm4gdGhpcy5jcmVhdGVSZXN0b3JlRGlhbG9nKGRpYWxvZ1RpdGxlLCB0eXBlT2ZE aWFsb2cpOworICAgIH0gZWxzZSB7CisgICAgICByZXR1cm4gdGhpcy5jcmVhdGVCYWNrdXBEaWFs b2coZGlhbG9nVGl0bGUsIHR5cGVPZkRpYWxvZyk7CisgICAgfQorICB9CisKKyAgY3JlYXRlUmVz dG9yZURpYWxvZyhkaWFsb2dUaXRsZSwgdHlwZU9mRGlhbG9nKSB7CisgICAgcmV0dXJuIG5ldyBS ZXN0b3JlRGlhbG9nV3JhcHBlcigKKyAgICAgIHRoaXMuZGlhbG9nQ29udGFpbmVyU2VsZWN0b3Is IGRpYWxvZ1RpdGxlLCB0eXBlT2ZEaWFsb2csCisgICAgICB0aGlzLmpxdWVyeSwKKyAgICAgIHRo aXMucGdCcm93c2VyLAorICAgICAgdGhpcy5hbGVydGlmeSwKKyAgICAgIHRoaXMuZGlhbG9nTW9k ZWwsCisgICAgICB0aGlzLmJhY2tmb3JtKTsKKyAgfQorCisgIGNyZWF0ZUJhY2t1cERpYWxvZyhk aWFsb2dUaXRsZSwgdHlwZU9mRGlhbG9nKSB7CisgICAgcmV0dXJuIG5ldyBCYWNrdXBEaWFsb2cu QmFja3VwRGlhbG9nV3JhcHBlcigKKyAgICAgIHRoaXMuZGlhbG9nQ29udGFpbmVyU2VsZWN0b3Is IGRpYWxvZ1RpdGxlLCB0eXBlT2ZEaWFsb2csCisgICAgICB0aGlzLmpxdWVyeSwKKyAgICAgIHRo aXMucGdCcm93c2VyLAorICAgICAgdGhpcy5hbGVydGlmeSwKKyAgICAgIHRoaXMuZGlhbG9nTW9k ZWwsCisgICAgICB0aGlzLmJhY2tmb3JtKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vc3RhdGljL2pzL2FsZXJ0aWZ5L2RpYWxvZ193cmFwcGVyLmpzIGIvd2ViL3BnYWRtaW4vc3Rh dGljL2pzL2FsZXJ0aWZ5L2RpYWxvZ193cmFwcGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwLi5iNWZmODIwNAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3N0 YXRpYy9qcy9hbGVydGlmeS9kaWFsb2dfd3JhcHBlci5qcwpAQCAtMCwwICsxLDU3IEBACitpbXBv cnQgKiBhcyBjb21tb25VdGlscyBmcm9tICcuLi91dGlscyc7CisKK2V4cG9ydCBjbGFzcyBEaWFs b2dXcmFwcGVyIHsKKyAgY29uc3RydWN0b3IoCisgICAgZGlhbG9nQ29udGFpbmVyU2VsZWN0b3Is IGRpYWxvZ1RpdGxlLCBqcXVlcnksIHBnQnJvd3NlciwKKyAgICBhbGVydGlmeSwgZGlhbG9nTW9k ZWwsIGJhY2tmb3JtKSB7CisgICAgdGhpcy5ob29rcyA9IHsKKyAgICAgIG9uY2xvc2U6IGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgaWYgKHRoaXMudmlldykgeworICAgICAgICAgIHRoaXMudmlldy5y ZW1vdmUoeworICAgICAgICAgICAgZGF0YTogdHJ1ZSwKKyAgICAgICAgICAgIGludGVybmFsOiB0 cnVlLAorICAgICAgICAgICAgc2lsZW50OiB0cnVlLAorICAgICAgICAgIH0pOworICAgICAgICB9 CisgICAgICB9LAorICAgIH07CisgICAgdGhpcy5kaWFsb2dDb250YWluZXJTZWxlY3RvciA9IGRp YWxvZ0NvbnRhaW5lclNlbGVjdG9yOworICAgIHRoaXMuZGlhbG9nVGl0bGUgPSBkaWFsb2dUaXRs ZTsKKyAgICB0aGlzLmpxdWVyeSA9IGpxdWVyeTsKKyAgICB0aGlzLnBnQnJvd3NlciA9IHBnQnJv d3NlcjsKKyAgICB0aGlzLmFsZXJ0aWZ5ID0gYWxlcnRpZnk7CisgICAgdGhpcy5kaWFsb2dNb2Rl bCA9IGRpYWxvZ01vZGVsOworICAgIHRoaXMuYmFja2Zvcm0gPSBiYWNrZm9ybTsKKyAgfQorCisg IGJ1aWxkKCkgeworICAgIHRoaXMuYWxlcnRpZnkucGdEaWFsb2dCdWlsZC5hcHBseSh0aGlzKTsK KyAgfQorCisgIHdhc0hlbHBCdXR0b25QcmVzc2VkKGUpIHsKKyAgICByZXR1cm4gZS5idXR0b24u ZWxlbWVudC5uYW1lID09PSAnZGlhbG9nX2hlbHAnCisgICAgICB8fCBlLmJ1dHRvbi5lbGVtZW50 Lm5hbWUgPT09ICdvYmplY3RfaGVscCc7CisgIH0KKworICBnZXRTZWxlY3RlZE5vZGVEYXRhKHNl bGVjdGVkVHJlZU5vZGUpIHsKKyAgICBpZiAoIXRoaXMuaXNOb2RlU2VsZWN0ZWQoc2VsZWN0ZWRU cmVlTm9kZSkpIHsKKyAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgfQorICAgIGNvbnN0IHRy ZWVOb2RlRGF0YSA9IHNlbGVjdGVkVHJlZU5vZGUuZ2V0RGF0YSgpOworICAgIGlmICh0cmVlTm9k ZURhdGEpIHsKKyAgICAgIHJldHVybiB0cmVlTm9kZURhdGE7CisgICAgfQorICAgIHJldHVybiB1 bmRlZmluZWQ7CisgIH0KKworICBmb2N1c09uRGlhbG9nKGRpYWxvZykgeworICAgIGRpYWxvZy4k ZWwuYXR0cigndGFiaW5kZXgnLCAtMSk7CisgICAgdGhpcy5wZ0Jyb3dzZXIua2V5Ym9hcmROYXZp Z2F0aW9uLmdldERpYWxvZ1RhYk5hdmlnYXRvcihkaWFsb2cpOworICAgIGNvbnN0IGNvbnRhaW5l ciA9IGRpYWxvZy4kZWwuZmluZCgnLnRhYi1jb250ZW50OmZpcnN0ID4gLnRhYi1wYW5lLmFjdGl2 ZTpmaXJzdCcpOworICAgIGNvbW1vblV0aWxzLmZpbmRBbmRTZXRGb2N1cyhjb250YWluZXIpOwor ICB9CisKKyAgaXNOb2RlU2VsZWN0ZWQoc2VsZWN0ZWRUcmVlTm9kZSkgeworICAgIHJldHVybiBz ZWxlY3RlZFRyZWVOb2RlOworICB9Cit9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMv anMvYmFja3VwL2JhY2t1cF9kaWFsb2cuanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja3Vw L2JhY2t1cF9kaWFsb2cuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmFh NDQ2MWY1Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2JhY2t1cC9i YWNrdXBfZGlhbG9nLmpzCkBAIC0wLDAgKzEsNjUgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBwZ0FkbWluIDQg LSBQb3N0Z3JlU1FMIFRvb2xzCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwgVGhl IHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1 bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworaW1wb3J0IGdldHRleHQg ZnJvbSAnLi4vZ2V0dGV4dCc7CitpbXBvcnQgQmFja2Zvcm0gZnJvbSAnLi4vYmFja2Zvcm0ucGdh ZG1pbic7CitpbXBvcnQge0RpYWxvZ30gZnJvbSAnLi4vYWxlcnRpZnkvZGlhbG9nJzsKKworZXhw b3J0IGNsYXNzIEJhY2t1cERpYWxvZyBleHRlbmRzIERpYWxvZyB7CisgIGNvbnN0cnVjdG9yKHBn QnJvd3NlciwgJCwgYWxlcnRpZnksIEJhY2t1cE1vZGVsLCBiYWNrZm9ybSA9IEJhY2tmb3JtKSB7 CisgICAgc3VwZXIoJ0JhY2t1cCBFcnJvcicsCisgICAgICAnPGRpdiBjbGFzcz1cJ2JhY2t1cF9k aWFsb2dcJz48L2Rpdj4nLAorICAgICAgcGdCcm93c2VyLCAkLCBhbGVydGlmeSwgQmFja3VwTW9k ZWwsIGJhY2tmb3JtKTsKKyAgfQorCisgIGRyYXcoYWN0aW9uLCBhY2lUcmVlSXRlbSwgcGFyYW1z KSB7CisgICAgY29uc3Qgc2VydmVySW5mb3JtYXRpb24gPSB0aGlzLnJldHJpZXZlQW5jZXN0b3JP ZlR5cGVTZXJ2ZXIoYWNpVHJlZUl0ZW0pOworCisgICAgaWYgKCFzZXJ2ZXJJbmZvcm1hdGlvbikg eworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghdGhpcy5oYXNCaW5hcmllc0NvbmZp Z3VyYXRpb24oc2VydmVySW5mb3JtYXRpb24pKSB7CisgICAgICByZXR1cm47CisgICAgfQorCisg ICAgY29uc3QgdHlwZU9mRGlhbG9nID0gQmFja3VwRGlhbG9nLnR5cGVPZkRpYWxvZyhwYXJhbXMp OworCisgICAgY29uc3QgZGlhbG9nID0gdGhpcy5jcmVhdGVPckdldERpYWxvZyhCYWNrdXBEaWFs b2cuZGlhbG9nVGl0bGUodHlwZU9mRGlhbG9nKSwKKyAgICAgIHR5cGVPZkRpYWxvZyk7CisgICAg ZGlhbG9nKHRydWUpLnJlc2l6ZVRvKCc2MCUnLCAnNTAlJyk7CisgIH0KKworICBzdGF0aWMgdHlw ZU9mRGlhbG9nKHBhcmFtcykgeworICAgIGlmKHBhcmFtcyA9PT0gbnVsbCkgeworICAgICAgcmV0 dXJuICdiYWNrdXBfb2JqZWN0cyc7CisgICAgfQorICAgIGxldCB0eXBlT2ZEaWFsb2cgPSAnc2Vy dmVyJzsKKyAgICBpZiAoIV8uaXNVbmRlZmluZWQocGFyYW1zWydnbG9iYWxzJ10pICYmIHBhcmFt c1snZ2xvYmFscyddKSB7CisgICAgICB0eXBlT2ZEaWFsb2cgPSAnZ2xvYmFscyc7CisgICAgfQor ICAgIHJldHVybiB0eXBlT2ZEaWFsb2c7CisgIH0KKworICBzdGF0aWMgZGlhbG9nVGl0bGUodHlw ZU9mRGlhbG9nKSB7CisgICAgaWYodHlwZU9mRGlhbG9nID09PSAnYmFja3VwX29iamVjdHMnKSB7 CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuICgodHlwZU9mRGlhbG9nID09 PSAnZ2xvYmFscycpID8KKyAgICAgIGdldHRleHQoJ0JhY2t1cCBHbG9iYWxzLi4uJykgOgorICAg ICAgZ2V0dGV4dCgnQmFja3VwIFNlcnZlci4uLicpKTsKKyAgfQorCisgIGRpYWxvZ05hbWUodHlw ZU9mRGlhbG9nKSB7CisgICAgaWYodHlwZU9mRGlhbG9nID09PSAnYmFja3VwX29iamVjdHMnKSB7 CisgICAgICByZXR1cm4gdHlwZU9mRGlhbG9nOworICAgIH0KKyAgICByZXR1cm4gJ0JhY2t1cERp YWxvZ18nICsgdHlwZU9mRGlhbG9nOworICB9Cit9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9z dGF0aWMvanMvYmFja3VwL2JhY2t1cF9kaWFsb2dfd3JhcHBlci5qcyBiL3dlYi9wZ2FkbWluL3N0 YXRpYy9qcy9iYWNrdXAvYmFja3VwX2RpYWxvZ193cmFwcGVyLmpzCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwLi43YjYyNTBmNwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2Fk bWluL3N0YXRpYy9qcy9iYWNrdXAvYmFja3VwX2RpYWxvZ193cmFwcGVyLmpzCkBAIC0wLDAgKzEs MjU4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8v IENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0K Ky8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5j ZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vCisKK2ltcG9ydCB7Z2V0VHJlZU5vZGVIaWVyYXJjaHlGcm9tRWxlbWVudH0g ZnJvbSAnLi4vdHJlZS9wZ2FkbWluX3RyZWVfbm9kZSc7CitpbXBvcnQgYXhpb3MgZnJvbSAnYXhp b3MvaW5kZXgnOworaW1wb3J0IGdldHRleHQgZnJvbSAnLi4vZ2V0dGV4dCc7CitpbXBvcnQgdXJs X2ZvciBmcm9tICcuLi91cmxfZm9yJzsKK2ltcG9ydCBfIGZyb20gJ3VuZGVyc2NvcmUnOworaW1w b3J0IHtEaWFsb2dXcmFwcGVyfSBmcm9tICcuLi9hbGVydGlmeS9kaWFsb2dfd3JhcHBlcic7CisK K2V4cG9ydCBjbGFzcyBCYWNrdXBEaWFsb2dXcmFwcGVyIGV4dGVuZHMgRGlhbG9nV3JhcHBlciB7 CisgIGNvbnN0cnVjdG9yKGRpYWxvZ0NvbnRhaW5lclNlbGVjdG9yLCBkaWFsb2dUaXRsZSwgdHlw ZU9mRGlhbG9nLAorICAgICAgICAgICAgICBqcXVlcnksIHBnQnJvd3NlciwgYWxlcnRpZnksIGRp YWxvZ01vZGVsLCBiYWNrZm9ybSkgeworICAgIHN1cGVyKGRpYWxvZ0NvbnRhaW5lclNlbGVjdG9y LCBkaWFsb2dUaXRsZSwganF1ZXJ5LAorICAgICAgcGdCcm93c2VyLCBhbGVydGlmeSwgZGlhbG9n TW9kZWwsIGJhY2tmb3JtKTsKKyAgICB0aGlzLnR5cGVPZkRpYWxvZyA9IHR5cGVPZkRpYWxvZzsK KyAgfQorCisgIG1haW4odGl0bGUpIHsKKyAgICB0aGlzLnNldCgndGl0bGUnLCB0aXRsZSk7Cisg IH0KKworICBzZXR1cCgpIHsKKyAgICByZXR1cm4geworICAgICAgYnV0dG9uczogW3sKKyAgICAg ICAgdGV4dDogJycsCisgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tZGVmYXVsdCBwdWxsLWxl ZnQgZmEgZmEtbGcgZmEtaW5mbycsCisgICAgICAgIGF0dHJzOiB7CisgICAgICAgICAgbmFtZTog J29iamVjdF9oZWxwJywKKyAgICAgICAgICB0eXBlOiAnYnV0dG9uJywKKyAgICAgICAgICB1cmw6 ICdiYWNrdXAuaHRtbCcsCisgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ0JhY2t1cCcpLAorICAg ICAgICB9LAorICAgICAgfSwgeworICAgICAgICB0ZXh0OiAnJywKKyAgICAgICAga2V5OiAxMTIs CisgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tZGVmYXVsdCBwdWxsLWxlZnQgZmEgZmEtbGcg ZmEtcXVlc3Rpb24nLAorICAgICAgICBhdHRyczogeworICAgICAgICAgIG5hbWU6ICdkaWFsb2df aGVscCcsCisgICAgICAgICAgdHlwZTogJ2J1dHRvbicsCisgICAgICAgICAgbGFiZWw6IGdldHRl eHQoJ0JhY2t1cCcpLAorICAgICAgICAgIHVybDogdXJsX2ZvcignaGVscC5zdGF0aWMnLCB7Cisg ICAgICAgICAgICAnZmlsZW5hbWUnOiAnYmFja3VwX2RpYWxvZy5odG1sJywKKyAgICAgICAgICB9 KSwKKyAgICAgICAgfSwKKyAgICAgIH0sIHsKKyAgICAgICAgdGV4dDogZ2V0dGV4dCgnQmFja3Vw JyksCisgICAgICAgIGtleTogMTMsCisgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tcHJpbWFy eSBmYSBmYS1sZyBmYS1zYXZlIHBnLWFsZXJ0aWZ5LWJ1dHRvbicsCisgICAgICAgICdkYXRhLWJ0 bi1uYW1lJzogJ2JhY2t1cCcsCisgICAgICB9LCB7CisgICAgICAgIHRleHQ6IGdldHRleHQoJ0Nh bmNlbCcpLAorICAgICAgICBrZXk6IDI3LAorICAgICAgICBjbGFzc05hbWU6ICdidG4gYnRuLWRh bmdlciBmYSBmYS1sZyBmYS10aW1lcyBwZy1hbGVydGlmeS1idXR0b24nLAorICAgICAgICAnZGF0 YS1idG4tbmFtZSc6ICdjYW5jZWwnLAorICAgICAgfV0sCisgICAgICAvLyBTZXQgb3B0aW9ucyBm b3IgZGlhbG9nCisgICAgICBvcHRpb25zOiB7CisgICAgICAgIHRpdGxlOiB0aGlzLmRpYWxvZ1Rp dGxlLAorICAgICAgICAvL2Rpc2FibGUgYm90aCBwYWRkaW5nIGFuZCBvdmVyZmxvdyBjb250cm9s LgorICAgICAgICBwYWRkaW5nOiAhMSwKKyAgICAgICAgb3ZlcmZsb3c6ICExLAorICAgICAgICBt b2RlbDogMCwKKyAgICAgICAgcmVzaXphYmxlOiB0cnVlLAorICAgICAgICBtYXhpbWl6YWJsZTog dHJ1ZSwKKyAgICAgICAgcGlubmFibGU6IGZhbHNlLAorICAgICAgICBjbG9zYWJsZUJ5RGltbWVy OiBmYWxzZSwKKyAgICAgICAgbW9kYWw6IGZhbHNlLAorICAgICAgfSwKKyAgICB9OworICB9CisK KyAgcHJlcGFyZSgpIHsKKyAgICB0aGlzLmRpc2FibGVCYWNrdXBCdXR0b24oKTsKKworICAgIGNv bnN0ICRjb250YWluZXIgPSB0aGlzLmpxdWVyeSh0aGlzLmRpYWxvZ0NvbnRhaW5lclNlbGVjdG9y KTsKKyAgICBjb25zdCBzZWxlY3RlZFRyZWVOb2RlID0gdGhpcy5nZXRTZWxlY3RlZE5vZGUoKTsK KyAgICBjb25zdCBzZWxlY3RlZFRyZWVOb2RlRGF0YSA9IHRoaXMuZ2V0U2VsZWN0ZWROb2RlRGF0 YShzZWxlY3RlZFRyZWVOb2RlKTsKKyAgICBpZiAoIXNlbGVjdGVkVHJlZU5vZGVEYXRhKSB7Cisg ICAgICByZXR1cm47CisgICAgfQorCisgICAgY29uc3Qgbm9kZSA9IHRoaXMucGdCcm93c2VyLk5v ZGVzW3NlbGVjdGVkVHJlZU5vZGVEYXRhLl90eXBlXTsKKyAgICBpZiAodGhpcy5kaWFsb2dUaXRs ZSA9PT0gbnVsbCkgeworICAgICAgY29uc3QgdGl0bGUgPSBgQmFja3VwICgke25vZGUubGFiZWx9 OiAke3NlbGVjdGVkVHJlZU5vZGVEYXRhLmxhYmVsfSlgOworICAgICAgdGhpcy5tYWluKHRpdGxl KTsKKyAgICB9CisKKyAgICBjb25zdCB0cmVlSW5mbyA9IGdldFRyZWVOb2RlSGllcmFyY2h5RnJv bUVsZW1lbnQodGhpcy5wZ0Jyb3dzZXIsIHNlbGVjdGVkVHJlZU5vZGUpOworICAgIGNvbnN0IGRp YWxvZyA9IHRoaXMuY3JlYXRlRGlhbG9nKG5vZGUsIHRyZWVJbmZvLCB0aGlzLnR5cGVPZkRpYWxv ZywgJGNvbnRhaW5lcik7CisgICAgdGhpcy5hZGRBbGVydGlmeUNsYXNzVG9CYWNrdXBOb2RlQ2hp bGROb2RlcygpOworICAgIGRpYWxvZy5yZW5kZXIoKTsKKworICAgIHRoaXMuZWxlbWVudHMuY29u dGVudC5hcHBlbmRDaGlsZCgkY29udGFpbmVyLmdldCgwKSk7CisKKyAgICB0aGlzLmZvY3VzT25E aWFsb2coZGlhbG9nKTsKKyAgICB0aGlzLnNldExpc3RlbmVyc0ZvckZpbGVuYW1lQ2hhbmdlcygp OworICB9CisKKyAgY2FsbGJhY2soZXZlbnQpIHsKKyAgICBjb25zdCBzZWxlY3RlZFRyZWVOb2Rl ID0gdGhpcy5nZXRTZWxlY3RlZE5vZGUoKTsKKyAgICBjb25zdCBzZWxlY3RlZFRyZWVOb2RlRGF0 YSA9IHRoaXMuZ2V0U2VsZWN0ZWROb2RlRGF0YShzZWxlY3RlZFRyZWVOb2RlKTsKKyAgICBjb25z dCBub2RlID0gc2VsZWN0ZWRUcmVlTm9kZURhdGEgJiYgdGhpcy5wZ0Jyb3dzZXIuTm9kZXNbc2Vs ZWN0ZWRUcmVlTm9kZURhdGEuX3R5cGVdOworCisgICAgaWYgKHRoaXMud2FzSGVscEJ1dHRvblBy ZXNzZWQoZXZlbnQpKSB7CisgICAgICBldmVudC5jYW5jZWwgPSB0cnVlOworICAgICAgdGhpcy5w Z0Jyb3dzZXIuc2hvd0hlbHAoCisgICAgICAgIGV2ZW50LmJ1dHRvbi5lbGVtZW50Lm5hbWUsCisg ICAgICAgIGV2ZW50LmJ1dHRvbi5lbGVtZW50LmdldEF0dHJpYnV0ZSgndXJsJyksCisgICAgICAg IG5vZGUsCisgICAgICAgIHNlbGVjdGVkVHJlZU5vZGUsCisgICAgICAgIGV2ZW50LmJ1dHRvbi5l bGVtZW50LmdldEF0dHJpYnV0ZSgnbGFiZWwnKQorICAgICAgKTsKKyAgICAgIHJldHVybjsKKyAg ICB9CisKKyAgICBpZiAodGhpcy53YXNCYWNrdXBCdXR0b25QcmVzc2VkKGV2ZW50KSkgeworCisg ICAgICBpZiAoIXNlbGVjdGVkVHJlZU5vZGVEYXRhKQorICAgICAgICByZXR1cm47CisKKyAgICAg IGNvbnN0IHNlcnZlcklkZW50aWZpZXIgPSB0aGlzLnJldHJpZXZlU2VydmVySWRlbnRpZmllcihu b2RlLCBzZWxlY3RlZFRyZWVOb2RlKTsKKworICAgICAgY29uc3QgZGlhbG9nID0gdGhpczsKKyAg ICAgIGxldCB1cmxTaG9ydGN1dCA9ICdiYWNrdXAuY3JlYXRlX3NlcnZlcl9qb2InOworICAgICAg aWYgKHRoaXMudHlwZU9mRGlhbG9nID09PSAnYmFja3VwX29iamVjdHMnKSB7CisgICAgICAgIHVy bFNob3J0Y3V0ID0gJ2JhY2t1cC5jcmVhdGVfb2JqZWN0X2pvYic7CisgICAgICB9CisgICAgICBj b25zdCBiYXNlVXJsID0gdXJsX2Zvcih1cmxTaG9ydGN1dCwgeworICAgICAgICAnc2lkJzogc2Vy dmVySWRlbnRpZmllciwKKyAgICAgIH0pOworCisgICAgICBjb25zdCB0cmVlSW5mbyA9IGdldFRy ZWVOb2RlSGllcmFyY2h5RnJvbUVsZW1lbnQoCisgICAgICAgIHRoaXMucGdCcm93c2VyLAorICAg ICAgICBzZWxlY3RlZFRyZWVOb2RlCisgICAgICApOworCisgICAgICB0aGlzLnNldEV4dHJhUGFy YW1ldGVycyhzZWxlY3RlZFRyZWVOb2RlLCB0cmVlSW5mbyk7CisKKyAgICAgIGxldCBzZXJ2aWNl ID0gYXhpb3MuY3JlYXRlKHt9KTsKKyAgICAgIHNlcnZpY2UucG9zdCgKKyAgICAgICAgYmFzZVVy bCwKKyAgICAgICAgdGhpcy52aWV3Lm1vZGVsLnRvSlNPTigpCisgICAgICApLnRoZW4oZnVuY3Rp b24gKCkgeworICAgICAgICBkaWFsb2cuYWxlcnRpZnkuc3VjY2VzcyhnZXR0ZXh0KCdCYWNrdXAg am9iIGNyZWF0ZWQuJyksIDUpOworICAgICAgICBkaWFsb2cucGdCcm93c2VyLkV2ZW50cy50cmln Z2VyKCdwZ2FkbWluLWJncHJvY2VzczpjcmVhdGVkJywgZGlhbG9nKTsKKyAgICAgIH0pLmNhdGNo KGZ1bmN0aW9uIChlcnJvcikgeworICAgICAgICB0cnkgeworICAgICAgICAgIGNvbnN0IGVyciA9 IGVycm9yLnJlc3BvbnNlLmRhdGE7CisgICAgICAgICAgZGlhbG9nLmFsZXJ0aWZ5LmFsZXJ0KAor ICAgICAgICAgICAgZ2V0dGV4dCgnQmFja3VwIGpvYiBmYWlsZWQuJyksCisgICAgICAgICAgICBl cnIuZXJyb3Jtc2cKKyAgICAgICAgICApOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAg ICAgY29uc29sZS53YXJuKGUuc3RhY2sgfHwgZSk7CisgICAgICAgIH0KKyAgICAgIH0pOworICAg IH0KKyAgfQorCisgIGFkZEFsZXJ0aWZ5Q2xhc3NUb0JhY2t1cE5vZGVDaGlsZE5vZGVzKCkgewor ICAgIHRoaXMuanF1ZXJ5KHRoaXMuZWxlbWVudHMuYm9keS5jaGlsZE5vZGVzWzBdKS5hZGRDbGFz cygKKyAgICAgICdhbGVydGlmeV90b29sc19kaWFsb2dfcHJvcGVydGllcyBvYmpfcHJvcGVydGll cycKKyAgICApOworICB9CisKKyAgZ2V0U2VsZWN0ZWROb2RlKCkgeworICAgIGNvbnN0IHRyZWUg PSB0aGlzLnBnQnJvd3Nlci50cmVlTWVudTsKKyAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSB0cmVl LnNlbGVjdGVkKCk7CisgICAgaWYgKHNlbGVjdGVkTm9kZSkgeworICAgICAgcmV0dXJuIHRyZWUu ZmluZE5vZGVCeURvbUVsZW1lbnQoc2VsZWN0ZWROb2RlKTsKKyAgICB9IGVsc2UgeworICAgICAg cmV0dXJuIHVuZGVmaW5lZDsKKyAgICB9CisgIH0KKworICBkaXNhYmxlQmFja3VwQnV0dG9uKCkg eworICAgIHRoaXMuX19pbnRlcm5hbC5idXR0b25zWzJdLmVsZW1lbnQuZGlzYWJsZWQgPSB0cnVl OworICB9CisKKyAgZW5hYmxlQmFja3VwQnV0dG9uKCkgeworICAgIHRoaXMuX19pbnRlcm5hbC5i dXR0b25zWzJdLmVsZW1lbnQuZGlzYWJsZWQgPSBmYWxzZTsKKyAgfQorCisgIGNyZWF0ZURpYWxv Zyhub2RlLCB0cmVlSW5mbywgdHlwZU9mRGlhbG9nLCAkY29udGFpbmVyKSB7CisgICAgbGV0IGF0 dHJpYnV0ZXMgPSB7fTsKKyAgICBpZiAodHlwZU9mRGlhbG9nICE9PSAnYmFja3VwX29iamVjdHMn KSB7CisgICAgICBhdHRyaWJ1dGVzWyd0eXBlJ10gPSB0eXBlT2ZEaWFsb2c7CisgICAgfQorICAg IC8vIEluc3RhbmNlIG9mIGJhY2tib25lIG1vZGVsCisgICAgY29uc3QgbmV3TW9kZWwgPSBuZXcg dGhpcy5kaWFsb2dNb2RlbChhdHRyaWJ1dGVzLCB7CisgICAgICBub2RlX2luZm86IHRyZWVJbmZv LAorICAgIH0pOworICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMuYmFja2Zvcm0uZ2VuZXJhdGVWaWV3 U2NoZW1hKAorICAgICAgdHJlZUluZm8sIG5ld01vZGVsLCAnY3JlYXRlJywgbm9kZSwgdHJlZUlu Zm8uc2VydmVyLCB0cnVlCisgICAgKTsKKworICAgIHJldHVybiB0aGlzLnZpZXcgPSBuZXcgdGhp cy5iYWNrZm9ybS5EaWFsb2coeworICAgICAgZWw6ICRjb250YWluZXIsCisgICAgICBtb2RlbDog bmV3TW9kZWwsCisgICAgICBzY2hlbWE6IGZpZWxkcywKKyAgICB9KTsKKyAgfQorCisgIHJldHJp ZXZlU2VydmVySWRlbnRpZmllcihub2RlLCBzZWxlY3RlZFRyZWVOb2RlKSB7CisgICAgY29uc3Qg dHJlZUluZm8gPSBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21FbGVtZW50KAorICAgICAgdGhpcy5w Z0Jyb3dzZXIsCisgICAgICBzZWxlY3RlZFRyZWVOb2RlCisgICAgKTsKKyAgICByZXR1cm4gdHJl ZUluZm8uc2VydmVyLl9pZDsKKyAgfQorCisgIHNldExpc3RlbmVyc0ZvckZpbGVuYW1lQ2hhbmdl cygpIHsKKyAgICBjb25zdCBzZWxmID0gdGhpczsKKworICAgIHRoaXMudmlldy5tb2RlbC5vbign Y2hhbmdlJywgZnVuY3Rpb24gKCkgeworICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHRoaXMuZ2V0 KCdmaWxlJykpICYmIHRoaXMuZ2V0KCdmaWxlJykgIT09ICcnKSB7CisgICAgICAgIHRoaXMuZXJy b3JNb2RlbC5jbGVhcigpOworICAgICAgICBzZWxmLmVuYWJsZUJhY2t1cEJ1dHRvbigpOworICAg ICAgfSBlbHNlIHsKKyAgICAgICAgc2VsZi5kaXNhYmxlQmFja3VwQnV0dG9uKCk7CisgICAgICAg IHRoaXMuZXJyb3JNb2RlbC5zZXQoJ2ZpbGUnLCBnZXR0ZXh0KCdQbGVhc2UgcHJvdmlkZSBhIGZp bGVuYW1lJykpOworICAgICAgfQorICAgIH0pOworICB9CisKKyAgc2V0RXh0cmFQYXJhbWV0ZXJz KHNlbGVjdGVkVHJlZU5vZGUsIHRyZWVJbmZvKSB7CisgICAgaWYgKHRoaXMudHlwZU9mRGlhbG9n ID09PSAnYmFja3VwX29iamVjdHMnKSB7CisKKyAgICAgIHRoaXMudmlldy5tb2RlbC5zZXQoJ2Rh dGFiYXNlJywgdHJlZUluZm8uZGF0YWJhc2UuX2xhYmVsKTsKKworICAgICAgY29uc3Qgbm9kZURh dGEgPSBzZWxlY3RlZFRyZWVOb2RlLmdldERhdGEoKTsKKyAgICAgIGlmIChub2RlRGF0YS5fdHlw ZSA9PT0gJ3NjaGVtYScpIHsKKyAgICAgICAgdGhpcy52aWV3Lm1vZGVsLnNldCgnc2NoZW1hcycs IFtub2RlRGF0YS5fbGFiZWxdKTsKKyAgICAgIH0KKworICAgICAgaWYgKG5vZGVEYXRhLl90eXBl ID09PSAndGFibGUnKSB7CisgICAgICAgIHRoaXMudmlldy5tb2RlbC5zZXQoJ3RhYmxlcycsIFsK KyAgICAgICAgICBbdHJlZUluZm8uc2NoZW1hLl9sYWJlbCwgbm9kZURhdGEuX2xhYmVsXSwKKyAg ICAgICAgXSk7CisgICAgICB9CisKKyAgICAgIGlmIChfLmlzRW1wdHkodGhpcy52aWV3Lm1vZGVs LmdldCgncmF0aW8nKSkpIHsKKyAgICAgICAgdGhpcy52aWV3Lm1vZGVsLnVuc2V0KCdyYXRpbycp OworICAgICAgfQorICAgIH0KKyAgfQorCisgIHdhc0JhY2t1cEJ1dHRvblByZXNzZWQoZXZlbnQp IHsKKyAgICByZXR1cm4gZXZlbnQuYnV0dG9uWydkYXRhLWJ0bi1uYW1lJ10gPT09ICdiYWNrdXAn OworICB9Cit9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja3VwL21lbnVf dXRpbHMuanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja3VwL21lbnVfdXRpbHMuanMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmQzYzFiMTQzCi0tLSAvZGV2L251bGwK KysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2JhY2t1cC9tZW51X3V0aWxzLmpzCkBAIC0wLDAg KzEsMjMgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8KKy8vCisvLyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisvLwor Ly8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVh bQorLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNl bmNlCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8KKworaW1wb3J0IHtpc1Byb3ZpZGVkRGF0YVZhbGlkfSBmcm9tICcuLi9t ZW51L21lbnVfZW5hYmxlZCc7CisKK2V4cG9ydCBjb25zdCBiYWNrdXBTdXBwb3J0ZWROb2RlcyA9 IFsKKyAgJ2RhdGFiYXNlJywgJ3NjaGVtYScsICd0YWJsZScsICdwYXJ0aXRpb24nLAorXTsKKwor ZnVuY3Rpb24gaXNOb2RlQVNlcnZlckFuZENvbm5lY3RlZCh0cmVlTm9kZURhdGEpIHsKKyAgcmV0 dXJuICgoJ3NlcnZlcicgPT09IHRyZWVOb2RlRGF0YS5fdHlwZSkgJiYgdHJlZU5vZGVEYXRhLmNv bm5lY3RlZCk7Cit9CisKK2V4cG9ydCBmdW5jdGlvbiBtZW51RW5hYmxlZFNlcnZlcih0cmVlTm9k ZURhdGEpIHsKKyAgcmV0dXJuIGlzUHJvdmlkZWREYXRhVmFsaWQodHJlZU5vZGVEYXRhKQorICAg ICYmIGlzTm9kZUFTZXJ2ZXJBbmRDb25uZWN0ZWQodHJlZU5vZGVEYXRhKTsKK30KZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9kYXRhZ3JpZC9nZXRfcGFuZWxfdGl0bGUuanMgYi93 ZWIvcGdhZG1pbi9zdGF0aWMvanMvZGF0YWdyaWQvZ2V0X3BhbmVsX3RpdGxlLmpzCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5mNWE1NjY0ZAotLS0gL2Rldi9udWxsCisrKyBi L3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9kYXRhZ3JpZC9nZXRfcGFuZWxfdGl0bGUuanMKQEAgLTAs MCArMSwzMyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8v CisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBU ZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExp Y2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLworCitpbXBvcnQge2dldFRyZWVOb2RlSGllcmFyY2h5RnJvbUlkZW50 aWZpZXJ9IGZyb20gJy4uL3RyZWUvcGdhZG1pbl90cmVlX25vZGUnOworCitmdW5jdGlvbiBnZXRE YXRhYmFzZUxhYmVsKHBhcmVudERhdGEpIHsKKyAgcmV0dXJuIHBhcmVudERhdGEuZGF0YWJhc2Ug PyBwYXJlbnREYXRhLmRhdGFiYXNlLmxhYmVsCisgICAgOiBwYXJlbnREYXRhLnNlcnZlci5kYjsK K30KKworZnVuY3Rpb24gaXNTZXJ2ZXJJbmZvcm1hdGlvbkF2YWlsYWJsZShwYXJlbnREYXRhKSB7 CisgIHJldHVybiBwYXJlbnREYXRhLnNlcnZlciA9PT0gdW5kZWZpbmVkOworfQorCitleHBvcnQg ZnVuY3Rpb24gZ2V0UGFuZWxUaXRsZShwZ0Jyb3dzZXIpIHsKKyAgY29uc3Qgc2VsZWN0ZWRfaXRl bSA9IHBnQnJvd3Nlci50cmVlTWVudS5zZWxlY3RlZCgpOworCisgIGNvbnN0IHBhcmVudERhdGEg PSBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21JZGVudGlmaWVyCisgICAgLmNhbGwocGdCcm93c2Vy LCBzZWxlY3RlZF9pdGVtKTsKKyAgaWYgKGlzU2VydmVySW5mb3JtYXRpb25BdmFpbGFibGUocGFy ZW50RGF0YSkpIHsKKyAgICByZXR1cm47CisgIH0KKworICBjb25zdCBkYl9sYWJlbCA9IGdldERh dGFiYXNlTGFiZWwocGFyZW50RGF0YSk7CisKKyAgcmV0dXJuIGAke2RiX2xhYmVsfSBvbiAke3Bh cmVudERhdGEuc2VydmVyLnVzZXIubmFtZX1AJHtwYXJlbnREYXRhLnNlcnZlci5sYWJlbH1gOwor fQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2RhdGFncmlkL3Nob3dfZGF0YS5q cyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9kYXRhZ3JpZC9zaG93X2RhdGEuanMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmE0MTRmZDc3Ci0tLSAvZGV2L251bGwKKysrIGIv d2ViL3BnYWRtaW4vc3RhdGljL2pzL2RhdGFncmlkL3Nob3dfZGF0YS5qcwpAQCAtMCwwICsxLDky IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vCisvLworLy8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENv cHlyaWdodCAoQykgMjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8v IFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQor Ly8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vCitpbXBvcnQgZ2V0dGV4dCBmcm9tICcuLi9nZXR0ZXh0JzsKK2ltcG9ydCB1cmxf Zm9yIGZyb20gJy4uL3VybF9mb3InOworaW1wb3J0IHtnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21J ZGVudGlmaWVyfSBmcm9tICcuLi8uLi8uLi9zdGF0aWMvanMvdHJlZS9wZ2FkbWluX3RyZWVfbm9k ZSc7CisKK2V4cG9ydCBmdW5jdGlvbiBzaG93RGF0YUdyaWQoCisgIGRhdGFncmlkLAorICBwZ0Jy b3dzZXIsCisgIGFsZXJ0aWZ5LAorICBjb25uZWN0aW9uRGF0YSwKKyAgYWNpVHJlZUlkZW50aWZp ZXIKKykgeworICBjb25zdCBub2RlID0gcGdCcm93c2VyLnRyZWVNZW51LmZpbmROb2RlQnlEb21F bGVtZW50KGFjaVRyZWVJZGVudGlmaWVyKTsKKyAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCB8fCAh bm9kZS5nZXREYXRhKCkpIHsKKyAgICBhbGVydGlmeS5hbGVydCgKKyAgICAgIGdldHRleHQoJ0Rh dGEgR3JpZCBFcnJvcicpLAorICAgICAgZ2V0dGV4dCgnTm8gb2JqZWN0IHNlbGVjdGVkLicpCisg ICAgKTsKKyAgICByZXR1cm47CisgIH0KKworICBjb25zdCBwYXJlbnREYXRhID0gZ2V0VHJlZU5v ZGVIaWVyYXJjaHlGcm9tSWRlbnRpZmllci5jYWxsKAorICAgIHBnQnJvd3NlciwKKyAgICBhY2lU cmVlSWRlbnRpZmllcgorICApOworCisgIGlmIChoYXNTZXJ2ZXJPckRhdGFiYXNlQ29uZmlndXJh dGlvbihwYXJlbnREYXRhKQorICAgIHx8ICFoYXNTY2hlbWFPckNhdGFsb2dPclZpZXdJbmZvcm1h dGlvbihwYXJlbnREYXRhKSkgeworICAgIHJldHVybjsKKyAgfQorCisgIGxldCBuYW1lc3BhY2VO YW1lID0gcmV0cmlldmVOYW1lU3BhY2VOYW1lKHBhcmVudERhdGEpOworICBjb25zdCBiYXNlVXJs ID0gZ2VuZXJhdGVVcmwoY29ubmVjdGlvbkRhdGEsIG5vZGUuZ2V0RGF0YSgpLCBwYXJlbnREYXRh KTsKKyAgY29uc3QgZ3JpZF90aXRsZSA9IGdlbmVyYXRlRGF0YWdyaWRUaXRsZShwYXJlbnREYXRh LCBuYW1lc3BhY2VOYW1lLCBub2RlLmdldERhdGEoKSk7CisKKyAgZGF0YWdyaWQuY3JlYXRlX3Ry YW5zYWN0aW9uKAorICAgIGJhc2VVcmwsCisgICAgbnVsbCwKKyAgICAnZmFsc2UnLAorICAgIHBh cmVudERhdGEuc2VydmVyLnNlcnZlcl90eXBlLAorICAgICcnLAorICAgIGdyaWRfdGl0bGUsCisg ICAgJycKKyAgKTsKK30KKworCitmdW5jdGlvbiByZXRyaWV2ZU5hbWVTcGFjZU5hbWUocGFyZW50 RGF0YSkgeworICBpZiAocGFyZW50RGF0YS5zY2hlbWEgIT09IHVuZGVmaW5lZCkgeworICAgIHJl dHVybiBwYXJlbnREYXRhLnNjaGVtYS5sYWJlbDsKKyAgfQorICBlbHNlIGlmIChwYXJlbnREYXRh LnZpZXcgIT09IHVuZGVmaW5lZCkgeworICAgIHJldHVybiBwYXJlbnREYXRhLnZpZXcubGFiZWw7 CisgIH0KKyAgZWxzZSBpZiAocGFyZW50RGF0YS5jYXRhbG9nICE9PSB1bmRlZmluZWQpIHsKKyAg ICByZXR1cm4gcGFyZW50RGF0YS5jYXRhbG9nLmxhYmVsOworICB9CisgIHJldHVybiAnJzsKK30K KworZnVuY3Rpb24gZ2VuZXJhdGVVcmwoY29ubmVjdGlvbkRhdGEsIG5vZGVEYXRhLCBwYXJlbnRE YXRhKSB7CisgIGNvbnN0IHVybF9wYXJhbXMgPSB7CisgICAgJ2NtZF90eXBlJzogY29ubmVjdGlv bkRhdGEubW51aWQsCisgICAgJ29ial90eXBlJzogbm9kZURhdGEuX3R5cGUsCisgICAgJ3NnaWQn OiBwYXJlbnREYXRhLnNlcnZlcl9ncm91cC5faWQsCisgICAgJ3NpZCc6IHBhcmVudERhdGEuc2Vy dmVyLl9pZCwKKyAgICAnZGlkJzogcGFyZW50RGF0YS5kYXRhYmFzZS5faWQsCisgICAgJ29ial9p ZCc6IG5vZGVEYXRhLl9pZCwKKyAgfTsKKworICByZXR1cm4gdXJsX2ZvcignZGF0YWdyaWQuaW5p dGlhbGl6ZV9kYXRhZ3JpZCcsIHVybF9wYXJhbXMpOworfQorCitmdW5jdGlvbiBoYXNTZXJ2ZXJP ckRhdGFiYXNlQ29uZmlndXJhdGlvbihwYXJlbnREYXRhKSB7CisgIHJldHVybiBwYXJlbnREYXRh LnNlcnZlciA9PT0gdW5kZWZpbmVkIHx8IHBhcmVudERhdGEuZGF0YWJhc2UgPT09IHVuZGVmaW5l ZDsKK30KKworZnVuY3Rpb24gaGFzU2NoZW1hT3JDYXRhbG9nT3JWaWV3SW5mb3JtYXRpb24ocGFy ZW50RGF0YSkgeworICByZXR1cm4gcGFyZW50RGF0YS5zY2hlbWEgIT09IHVuZGVmaW5lZCB8fCBw YXJlbnREYXRhLnZpZXcgIT09IHVuZGVmaW5lZCB8fAorICAgIHBhcmVudERhdGEuY2F0YWxvZyAh PT0gdW5kZWZpbmVkOworfQorCitmdW5jdGlvbiBnZW5lcmF0ZURhdGFncmlkVGl0bGUocGFyZW50 RGF0YSwgbmFtZXNwYWNlTmFtZSwgbm9kZURhdGEpIHsKKyAgcmV0dXJuIGAke3BhcmVudERhdGEu c2VydmVyLmxhYmVsfSAtICR7cGFyZW50RGF0YS5kYXRhYmFzZS5sYWJlbH0gLSAke25hbWVzcGFj ZU5hbWV9LiR7bm9kZURhdGEubGFiZWx9YDsKK30KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0 YXRpYy9qcy9kYXRhZ3JpZC9zaG93X3F1ZXJ5X3Rvb2wuanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMv anMvZGF0YWdyaWQvc2hvd19xdWVyeV90b29sLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwLi4wNDM2ZTBmZAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRp Yy9qcy9kYXRhZ3JpZC9zaG93X3F1ZXJ5X3Rvb2wuanMKQEAgLTAsMCArMSw2MyBAQAorLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor Ly8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMp IDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3 YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor CitpbXBvcnQgZ2V0dGV4dCBmcm9tICcuLi9nZXR0ZXh0JzsKK2ltcG9ydCB1cmxfZm9yIGZyb20g Jy4uL3VybF9mb3InOworaW1wb3J0IHtnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21JZGVudGlmaWVy fSBmcm9tICcuLi8uLi8uLi9zdGF0aWMvanMvdHJlZS9wZ2FkbWluX3RyZWVfbm9kZSc7CisKK2Z1 bmN0aW9uIGhhc0RhdGFiYXNlSW5mb3JtYXRpb24ocGFyZW50RGF0YSkgeworICByZXR1cm4gcGFy ZW50RGF0YS5kYXRhYmFzZTsKK30KKworZnVuY3Rpb24gZ2VuZXJhdGVVcmwocGFyZW50RGF0YSkg eworICBsZXQgdXJsX2VuZHBvaW50ID0gJ2RhdGFncmlkLmluaXRpYWxpemVfcXVlcnlfdG9vbCc7 CisgIGxldCB1cmxfcGFyYW1zID0geworICAgICdzZ2lkJzogcGFyZW50RGF0YS5zZXJ2ZXJfZ3Jv dXAuX2lkLAorICAgICdzaWQnOiBwYXJlbnREYXRhLnNlcnZlci5faWQsCisgIH07CisKKyAgaWYg KGhhc0RhdGFiYXNlSW5mb3JtYXRpb24ocGFyZW50RGF0YSkpIHsKKyAgICB1cmxfcGFyYW1zWydk aWQnXSA9IHBhcmVudERhdGEuZGF0YWJhc2UuX2lkOworICAgIHVybF9lbmRwb2ludCA9ICdkYXRh Z3JpZC5pbml0aWFsaXplX3F1ZXJ5X3Rvb2xfd2l0aF9kaWQnOworICB9CisKKyAgcmV0dXJuIHVy bF9mb3IodXJsX2VuZHBvaW50LCB1cmxfcGFyYW1zKTsKK30KKworZnVuY3Rpb24gaGFzU2VydmVy SW5mb3JtYXRpb25zKHBhcmVudERhdGEpIHsKKyAgcmV0dXJuIHBhcmVudERhdGEuc2VydmVyID09 PSB1bmRlZmluZWQ7Cit9CisKK2V4cG9ydCBmdW5jdGlvbiBzaG93UXVlcnlUb29sKGRhdGFncmlk LCBwZ0Jyb3dzZXIsIGFsZXJ0aWZ5LCB1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhY2lUcmVlSWRlbnRpZmllciwgcGFuZWxUaXRsZSkgeworICBjb25zdCBzVVJMID0gdXJsIHx8 ICcnOworICBjb25zdCBxdWVyeVRvb2xUaXRsZSA9IHBhbmVsVGl0bGUgfHwgJyc7CisKKyAgY29u c3QgY3VycmVudE5vZGUgPSBwZ0Jyb3dzZXIudHJlZU1lbnUuZmluZE5vZGVCeURvbUVsZW1lbnQo YWNpVHJlZUlkZW50aWZpZXIpOworICBpZiAoY3VycmVudE5vZGUgPT09IHVuZGVmaW5lZCkgewor ICAgIGFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgZ2V0dGV4dCgnUXVlcnkgVG9vbCBFcnJvcicpLAor ICAgICAgZ2V0dGV4dCgnTm8gb2JqZWN0IHNlbGVjdGVkLicpCisgICAgKTsKKyAgICByZXR1cm47 CisgIH0KKworICBjb25zdCBwYXJlbnREYXRhID0gZ2V0VHJlZU5vZGVIaWVyYXJjaHlGcm9tSWRl bnRpZmllci5jYWxsKAorICAgIHBnQnJvd3NlciwgYWNpVHJlZUlkZW50aWZpZXIpOworCisgIGlm IChoYXNTZXJ2ZXJJbmZvcm1hdGlvbnMocGFyZW50RGF0YSkpIHsKKyAgICByZXR1cm47CisgIH0K KworICBjb25zdCBiYXNlVXJsID0gZ2VuZXJhdGVVcmwocGFyZW50RGF0YSk7CisKKyAgZGF0YWdy aWQuY3JlYXRlX3RyYW5zYWN0aW9uKAorICAgIGJhc2VVcmwsIG51bGwsICd0cnVlJywKKyAgICBw YXJlbnREYXRhLnNlcnZlci5zZXJ2ZXJfdHlwZSwgc1VSTCwgcXVlcnlUb29sVGl0bGUsICcnLCBm YWxzZSk7Cit9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvZ3JhbnQvd2l6YXJk L21lbnVfdXRpbHMuanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvZ3JhbnQvd2l6YXJkL21lbnVf dXRpbHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmI1NmNlM2NkCi0t LSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2dyYW50L3dpemFyZC9tZW51 X3V0aWxzLmpzCkBAIC0wLDAgKzEsMTYgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBwZ0FkbWluIDQgLSBQb3N0 Z3JlU1FMIFRvb2xzCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwgVGhlIHBnQWRt aW4gRGV2ZWxvcG1lbnQgVGVhbQorLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0 aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworZXhwb3J0IGNvbnN0IHN1cHBvcnRl ZE5vZGVzID0gWworICAnc2NoZW1hJywgJ2NvbGwtZnVuY3Rpb24nLCAnY29sbC1zZXF1ZW5jZScs CisgICdjb2xsLXRhYmxlJywgJ2NvbGwtdmlldycsICdjb2xsLXByb2NlZHVyZScsCisgICdjb2xs LW12aWV3JywgJ2RhdGFiYXNlJywgJ2NvbGwtdHJpZ2dlcl9mdW5jdGlvbicsCitdOworCisKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9tYWludGVuYW5jZS9tZW51X3V0aWxzLmpz IGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL21haW50ZW5hbmNlL21lbnVfdXRpbHMuanMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjhjZGUxYmFhCi0tLSAvZGV2L251bGwKKysr IGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL21haW50ZW5hbmNlL21lbnVfdXRpbHMuanMKQEAgLTAs MCArMSwxMyBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8v CisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBU ZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExp Y2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLworCitleHBvcnQgY29uc3QgbWFpbnRlbmFuY2VTdXBwb3J0ZWROb2Rl cyA9IFsKKyAgJ2RhdGFiYXNlJywgJ3RhYmxlJywgJ3ByaW1hcnlfa2V5JywKKyAgJ3VuaXF1ZV9j b25zdHJhaW50JywgJ2luZGV4JywgJ3BhcnRpdGlvbicsCitdOwpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vc3RhdGljL2pzL21lbnUvY2FuX2NyZWF0ZS5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9q cy9tZW51L2Nhbl9jcmVhdGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAu LjQ3NmJlNDM3Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL21lbnUv Y2FuX2NyZWF0ZS5qcwpAQCAtMCwwICsxLDM3IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1pbiA0IC0g UG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgsIFRoZSBw Z0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5k ZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworZXhwb3J0IGZ1bmN0aW9uIGNh bkNyZWF0ZShwZ0Jyb3dzZXIsIGNoaWxkT2ZDYXRhbG9nVHlwZSwgaXRlbSwgZGF0YSkgeworICAv L0lmIGNoZWNrIGlzIGZhbHNlIHRoZW4gLCB3ZSB3aWxsIGFsbG93IGNyZWF0ZSBtZW51CisgIGlm IChkYXRhICYmIGRhdGEuY2hlY2sgPT09IGZhbHNlKSB7CisgICAgcmV0dXJuIHRydWU7CisgIH0K KworICBsZXQgbm9kZSA9IHBnQnJvd3Nlci50cmVlTWVudS5maW5kTm9kZUJ5RG9tRWxlbWVudChp dGVtKTsKKworICBpZiAobm9kZS5hbnlGYW1pbHlNZW1iZXIocGFyZW50Q2F0YWxvZ09mVGFibGVD aGlsZC5iaW5kKG51bGwsIGNoaWxkT2ZDYXRhbG9nVHlwZSkpKSB7CisgICAgcmV0dXJuIGZhbHNl OworICB9CisKKyAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIHBhcmVudENhdGFsb2dPZlRh YmxlQ2hpbGQoYXJnLCBub2RlKSB7CisgIGlmIChhcmcgPT09IG5vZGUuZ2V0RGF0YSgpLl90eXBl KSB7CisgICAgaWYgKG5vZGUuaGFzUGFyZW50KCkpIHsKKworICAgICAgbGV0IHBhcmVudCA9IG5v ZGUucGFyZW50KCk7CisgICAgICBpZiAoJ2NhdGFsb2cnID09PSBwYXJlbnQuZ2V0RGF0YSgpLl90 eXBlKSB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHJl dHVybiBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9tZW51L21l bnVfZW5hYmxlZC5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9tZW51L21lbnVfZW5hYmxlZC5q cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMDVmZjBmNGEKLS0tIC9kZXYv bnVsbAorKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvbWVudS9tZW51X2VuYWJsZWQuanMKQEAg LTAsMCArMSw1MiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMK Ky8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVu dCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FM IExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLworCitmdW5jdGlvbiBpc05vZGVUeXBlU3VwcG9ydGVkKGJhY2t1 cFN1cHBvcnRlZE5vZGVzLCBub2RlRGF0YVR5cGUsIHRyZWVOb2RlKSB7CisgIHJldHVybiBfLmlu ZGV4T2YoYmFja3VwU3VwcG9ydGVkTm9kZXMsIG5vZGVEYXRhVHlwZSkgIT09IC0xCisgICAgJiYg YW5jZXN0b3JXaXRoVHlwZUNhdGFsb2dEb2VzTm90RXhpc3RzKHRyZWVOb2RlKTsKK30KKworZXhw b3J0IGZ1bmN0aW9uIGlzUHJvdmlkZWREYXRhVmFsaWQodHJlZU5vZGVEYXRhKSB7CisgIHJldHVy biAhXy5pc1VuZGVmaW5lZCh0cmVlTm9kZURhdGEpICYmICFfLmlzTnVsbCh0cmVlTm9kZURhdGEp OworfQorCitmdW5jdGlvbiBkb2VzTm9kZUhhdmVNZW51KHRyZWVOb2RlRGF0YSkgeworICByZXR1 cm4gKHRyZWVOb2RlRGF0YS5fdHlwZSA9PT0gJ2RhdGFiYXNlJyAmJiB0cmVlTm9kZURhdGEuYWxs b3dDb25uKQorICAgIHx8IHRyZWVOb2RlRGF0YS5fdHlwZSAhPT0gJ2RhdGFiYXNlJzsKK30KKwor ZnVuY3Rpb24gYW5jZXN0b3JXaXRoVHlwZUNhdGFsb2dEb2VzTm90RXhpc3RzKHRyZWVOb2RlKSB7 CisgIGxldCBjdXJyZW50Tm9kZSA9IHRyZWVOb2RlOworCisgIHdoaWxlKGN1cnJlbnROb2RlLmhh c1BhcmVudCgpICYmIHRyZWVOb2RlLnBhcmVudCgpLmdldERhdGEoKSAhPT0gbnVsbCkgeworICAg IGlmKGN1cnJlbnROb2RlLnBhcmVudCgpLmdldERhdGEoKS5fdHlwZSA9PT0gJ2NhdGFsb2cnKSB7 CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgY3VycmVudE5vZGUgPSBjdXJyZW50 Tm9kZS5wYXJlbnQoKTsKKyAgfQorCisgIHJldHVybiB0cnVlOworfQorCitleHBvcnQgZnVuY3Rp b24gbWVudUVuYWJsZWQodHJlZSwgYmFja3VwU3VwcG9ydGVkTm9kZXMsIHRyZWVOb2RlRGF0YSwg ZG9tVHJlZU5vZGUpIHsKKyAgbGV0IHRyZWVOb2RlID0gdHJlZS5maW5kTm9kZUJ5RG9tRWxlbWVu dChkb21UcmVlTm9kZSk7CisgIGlmICghdHJlZU5vZGUpIHsKKyAgICByZXR1cm4gZmFsc2U7Cisg IH0KKworICBpZiAoaXNQcm92aWRlZERhdGFWYWxpZCh0cmVlTm9kZURhdGEpKSB7CisgICAgcmV0 dXJuIGlzTm9kZVR5cGVTdXBwb3J0ZWQoYmFja3VwU3VwcG9ydGVkTm9kZXMsIHRyZWVOb2RlRGF0 YS5fdHlwZSwgdHJlZU5vZGUpCisgICAgICAmJiBkb2VzTm9kZUhhdmVNZW51KHRyZWVOb2RlRGF0 YSk7CisgIH0gZWxzZSB7CisgICAgcmV0dXJuIGZhbHNlOworICB9Cit9CisKKwpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3Jlc3RvcmUvbWVudV91dGlscy5qcyBiL3dlYi9wZ2Fk bWluL3N0YXRpYy9qcy9yZXN0b3JlL21lbnVfdXRpbHMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAuLjJkMzVjOTUxCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4v c3RhdGljL2pzL3Jlc3RvcmUvbWVudV91dGlscy5qcwpAQCAtMCwwICsxLDE4IEBACisvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisv LworLy8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykg MjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdh cmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisK K2V4cG9ydCBjb25zdCByZXN0b3JlU3VwcG9ydGVkTm9kZXMgPSBbCisgICdkYXRhYmFzZScsCisg ICdzY2hlbWEnLAorICAndGFibGUnLAorICAnZnVuY3Rpb24nLAorICAndHJpZ2dlcicsCisgICdp bmRleCcsCisgICdwYXJ0aXRpb24nLAorXTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRp Yy9qcy9yZXN0b3JlL3Jlc3RvcmVfZGlhbG9nLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3Jl c3RvcmUvcmVzdG9yZV9kaWFsb2cuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAuLjIzN2I4NDEyCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL3Jl c3RvcmUvcmVzdG9yZV9kaWFsb2cuanMKQEAgLTAsMCArMSw1MyBAQAorLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBn QWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAy MDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJl bGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitpbXBvcnQg Z2V0dGV4dCBmcm9tICcuLi9nZXR0ZXh0JzsKK2ltcG9ydCB7c3ByaW50Zn0gZnJvbSAnc3ByaW50 Zi1qcyc7CitpbXBvcnQgQmFja2Zvcm0gZnJvbSAnLi4vYmFja2Zvcm0ucGdhZG1pbic7CitpbXBv cnQge0RpYWxvZ30gZnJvbSAnLi4vYWxlcnRpZnkvZGlhbG9nJzsKKworZXhwb3J0IGNsYXNzIFJl c3RvcmVEaWFsb2cgZXh0ZW5kcyBEaWFsb2cgeworICBjb25zdHJ1Y3RvcihwZ0Jyb3dzZXIsICQs IGFsZXJ0aWZ5LCBSZXN0b3JlTW9kZWwsIGJhY2tmb3JtID0gQmFja2Zvcm0pIHsKKyAgICBzdXBl cignUmVzdG9yZSBFcnJvcicsCisgICAgICAnPGRpdiBjbGFzcz1cJ3Jlc3RvcmVfZGlhbG9nXCc+ PC9kaXY+JywKKyAgICAgIHBnQnJvd3NlciwgJCwgYWxlcnRpZnksIFJlc3RvcmVNb2RlbCwgYmFj a2Zvcm0pOworICB9CisKKyAgZHJhdyhhY3Rpb24sIGFjaVRyZWVJdGVtKSB7CisKKyAgICBjb25z dCBzZXJ2ZXJJbmZvcm1hdGlvbiA9IHRoaXMucmV0cmlldmVBbmNlc3Rvck9mVHlwZVNlcnZlcihh Y2lUcmVlSXRlbSk7CisKKyAgICBpZiAoIXNlcnZlckluZm9ybWF0aW9uKSB7CisgICAgICByZXR1 cm47CisgICAgfQorCisgICAgaWYgKCF0aGlzLmhhc0JpbmFyaWVzQ29uZmlndXJhdGlvbihzZXJ2 ZXJJbmZvcm1hdGlvbikpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBsZXQgYWNpVHJl ZUl0ZW0xID0gYWNpVHJlZUl0ZW0gfHwgdGhpcy5wZ0Jyb3dzZXIudHJlZU1lbnUuc2VsZWN0ZWQo KTsKKyAgICBsZXQgaXRlbSA9IHRoaXMucGdCcm93c2VyLnRyZWVNZW51LmZpbmROb2RlQnlEb21F bGVtZW50KGFjaVRyZWVJdGVtMSk7CisgICAgY29uc3QgZGF0YSA9IGl0ZW0uZ2V0RGF0YSgpOwor ICAgIGNvbnN0IG5vZGUgPSB0aGlzLnBnQnJvd3Nlci5Ob2Rlc1tkYXRhLl90eXBlXTsKKworICAg IGlmICghbm9kZSkKKyAgICAgIHJldHVybjsKKworICAgIGxldCB0aXRsZSA9IHNwcmludGYoZ2V0 dGV4dCgnUmVzdG9yZSAoJXM6ICVzKScpLCBub2RlLmxhYmVsLCBkYXRhLmxhYmVsKTsKKworICAg IHRoaXMuY3JlYXRlT3JHZXREaWFsb2codGl0bGUsICdyZXN0b3JlJyk7CisKKyAgICB0aGlzLmFs ZXJ0aWZ5LnBnX3Jlc3RvcmUodGl0bGUsIGFjaVRyZWVJdGVtMSwgZGF0YSwgbm9kZSkucmVzaXpl VG8oJzY1JScsICc2MCUnKTsKKyAgfQorCisgIGRpYWxvZ05hbWUoKSB7CisgICAgcmV0dXJuICdw Z19yZXN0b3JlJzsKKyAgfQorfQorCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMv cmVzdG9yZS9yZXN0b3JlX2RpYWxvZ193cmFwcGVyLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pz L3Jlc3RvcmUvcmVzdG9yZV9kaWFsb2dfd3JhcHBlci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMC4uMTNkNzgxZmIKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9z dGF0aWMvanMvcmVzdG9yZS9yZXN0b3JlX2RpYWxvZ193cmFwcGVyLmpzCkBAIC0wLDAgKzEsMjU1 IEBACitpbXBvcnQge2dldFRyZWVOb2RlSGllcmFyY2h5RnJvbUVsZW1lbnR9IGZyb20gJy4uL3Ry ZWUvcGdhZG1pbl90cmVlX25vZGUnOworaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zL2luZGV4JzsK K2ltcG9ydCBfIGZyb20gJ3VuZGVyc2NvcmUnOworaW1wb3J0IGdldHRleHQgZnJvbSAnLi4vZ2V0 dGV4dCc7CitpbXBvcnQgdXJsX2ZvciBmcm9tICcuLi91cmxfZm9yJzsKK2ltcG9ydCB7RGlhbG9n V3JhcHBlcn0gZnJvbSAnLi4vYWxlcnRpZnkvZGlhbG9nX3dyYXBwZXInOworCitleHBvcnQgY2xh c3MgUmVzdG9yZURpYWxvZ1dyYXBwZXIgZXh0ZW5kcyBEaWFsb2dXcmFwcGVyIHsKKyAgY29uc3Ry dWN0b3IoZGlhbG9nQ29udGFpbmVyU2VsZWN0b3IsIGRpYWxvZ1RpdGxlLCB0eXBlT2ZEaWFsb2cs CisgICAgICAgICAgICAgIGpxdWVyeSwgcGdCcm93c2VyLCBhbGVydGlmeSwgZGlhbG9nTW9kZWws IGJhY2tmb3JtKSB7CisgICAgc3VwZXIoZGlhbG9nQ29udGFpbmVyU2VsZWN0b3IsIGRpYWxvZ1Rp dGxlLCBqcXVlcnksCisgICAgICBwZ0Jyb3dzZXIsIGFsZXJ0aWZ5LCBkaWFsb2dNb2RlbCwgYmFj a2Zvcm0pOworICB9CisKKyAgbWFpbih0aXRsZSwgaXRlbSwgZGF0YSwgbm9kZSkgeworICAgIHRo aXMuc2V0KCd0aXRsZScsIHRpdGxlKTsKKyAgICB0aGlzLnNldHRpbmcoJ3BnX25vZGUnLCBub2Rl KTsKKyAgICB0aGlzLnNldHRpbmcoJ3BnX2l0ZW0nLCBpdGVtKTsKKyAgICB0aGlzLnNldHRpbmco J3BnX2l0ZW1fZGF0YScsIGRhdGEpOworICB9CisKKyAgc2V0dXAoKSB7CisgICAgcmV0dXJuIHsK KyAgICAgIGJ1dHRvbnM6IFt7CisgICAgICAgIHRleHQ6ICcnLAorICAgICAgICBjbGFzc05hbWU6 ICdidG4gYnRuLWRlZmF1bHQgcHVsbC1sZWZ0IGZhIGZhLWxnIGZhLWluZm8nLAorICAgICAgICBh dHRyczogeworICAgICAgICAgIG5hbWU6ICdvYmplY3RfaGVscCcsCisgICAgICAgICAgdHlwZTog J2J1dHRvbicsCisgICAgICAgICAgdXJsOiAnYmFja3VwLmh0bWwnLAorICAgICAgICAgIGxhYmVs OiBnZXR0ZXh0KCdSZXN0b3JlJyksCisgICAgICAgIH0sCisgICAgICB9LCB7CisgICAgICAgIHRl eHQ6ICcnLAorICAgICAgICBrZXk6IDExMiwKKyAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1k ZWZhdWx0IHB1bGwtbGVmdCBmYSBmYS1sZyBmYS1xdWVzdGlvbicsCisgICAgICAgIGF0dHJzOiB7 CisgICAgICAgICAgbmFtZTogJ2RpYWxvZ19oZWxwJywKKyAgICAgICAgICB0eXBlOiAnYnV0dG9u JywKKyAgICAgICAgICBsYWJlbDogZ2V0dGV4dCgnUmVzdG9yZScpLAorICAgICAgICAgIHVybDog dXJsX2ZvcignaGVscC5zdGF0aWMnLCB7CisgICAgICAgICAgICAnZmlsZW5hbWUnOiAncmVzdG9y ZV9kaWFsb2cuaHRtbCcsCisgICAgICAgICAgfSksCisgICAgICAgIH0sCisgICAgICB9LCB7Cisg ICAgICAgIHRleHQ6IGdldHRleHQoJ1Jlc3RvcmUnKSwKKyAgICAgICAga2V5OiAxMywKKyAgICAg ICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1wcmltYXJ5IGZhIGZhLXVwbG9hZCBwZy1hbGVydGlmeS1i dXR0b24nLAorICAgICAgICByZXN0b3JlOiB0cnVlLAorICAgICAgICAnZGF0YS1idG4tbmFtZSc6 ICdyZXN0b3JlJywKKyAgICAgIH0sIHsKKyAgICAgICAgdGV4dDogZ2V0dGV4dCgnQ2FuY2VsJyks CisgICAgICAgIGtleTogMjcsCisgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tZGFuZ2VyIGZh IGZhLWxnIGZhLXRpbWVzIHBnLWFsZXJ0aWZ5LWJ1dHRvbicsCisgICAgICAgIHJlc3RvcmU6IGZh bHNlLAorICAgICAgICAnZGF0YS1idG4tbmFtZSc6ICdjYW5jZWwnLAorICAgICAgfV0sCisgICAg ICAvLyBTZXQgb3B0aW9ucyBmb3IgZGlhbG9nCisgICAgICBvcHRpb25zOiB7CisgICAgICAgIHRp dGxlOiB0aGlzLmRpYWxvZ1RpdGxlLAorICAgICAgICAvL2Rpc2FibGUgYm90aCBwYWRkaW5nIGFu ZCBvdmVyZmxvdyBjb250cm9sLgorICAgICAgICBwYWRkaW5nOiAhMSwKKyAgICAgICAgb3ZlcmZs b3c6ICExLAorICAgICAgICBtb2RlbDogMCwKKyAgICAgICAgcmVzaXphYmxlOiB0cnVlLAorICAg ICAgICBtYXhpbWl6YWJsZTogdHJ1ZSwKKyAgICAgICAgcGlubmFibGU6IGZhbHNlLAorICAgICAg ICBjbG9zYWJsZUJ5RGltbWVyOiBmYWxzZSwKKyAgICAgICAgbW9kYWw6IGZhbHNlLAorICAgICAg fSwKKyAgICB9OworICB9CisKKyAgcHJlcGFyZSgpIHsKKyAgICB0aGlzLmRpc2FibGVSZXN0b3Jl QnV0dG9uKCk7CisKKyAgICBjb25zdCAkY29udGFpbmVyID0gdGhpcy5qcXVlcnkodGhpcy5kaWFs b2dDb250YWluZXJTZWxlY3Rvcik7CisgICAgY29uc3Qgc2VsZWN0ZWRUcmVlTm9kZSA9IHRoaXMu Z2V0U2VsZWN0ZWROb2RlKCk7CisgICAgY29uc3Qgc2VsZWN0ZWRUcmVlTm9kZURhdGEgPSB0aGlz LmdldFNlbGVjdGVkTm9kZURhdGEoc2VsZWN0ZWRUcmVlTm9kZSk7CisgICAgaWYgKCFzZWxlY3Rl ZFRyZWVOb2RlRGF0YSkgeworICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnN0IG5vZGUg PSB0aGlzLnBnQnJvd3Nlci5Ob2Rlc1tzZWxlY3RlZFRyZWVOb2RlRGF0YS5fdHlwZV07CisKKyAg ICBjb25zdCB0cmVlSW5mbyA9IGdldFRyZWVOb2RlSGllcmFyY2h5RnJvbUVsZW1lbnQodGhpcy5w Z0Jyb3dzZXIsIHNlbGVjdGVkVHJlZU5vZGUpOworICAgIGNvbnN0IGRpYWxvZyA9IHRoaXMuY3Jl YXRlRGlhbG9nKG5vZGUsIHRyZWVJbmZvLCAkY29udGFpbmVyKTsKKyAgICB0aGlzLmFkZEFsZXJ0 aWZ5Q2xhc3NUb1Jlc3RvcmVOb2RlQ2hpbGROb2RlcygpOworICAgIGRpYWxvZy5yZW5kZXIoKTsK KworICAgIHRoaXMuZWxlbWVudHMuY29udGVudC5hcHBlbmRDaGlsZCgkY29udGFpbmVyLmdldCgw KSk7CisKKyAgICB0aGlzLmZvY3VzT25EaWFsb2coZGlhbG9nKTsKKyAgICB0aGlzLnNldExpc3Rl bmVyc0ZvckZpbGVuYW1lQ2hhbmdlcygpOworICB9CisKKyAgY2FsbGJhY2soZXZlbnQpIHsKKyAg ICBjb25zdCBzZWxlY3RlZFRyZWVOb2RlID0gdGhpcy5nZXRTZWxlY3RlZE5vZGUoKTsKKyAgICBj b25zdCBzZWxlY3RlZFRyZWVOb2RlRGF0YSA9IHRoaXMuZ2V0U2VsZWN0ZWROb2RlRGF0YShzZWxl Y3RlZFRyZWVOb2RlKTsKKyAgICBjb25zdCBub2RlID0gc2VsZWN0ZWRUcmVlTm9kZURhdGEgJiYg dGhpcy5wZ0Jyb3dzZXIuTm9kZXNbc2VsZWN0ZWRUcmVlTm9kZURhdGEuX3R5cGVdOworCisgICAg aWYgKHRoaXMud2FzSGVscEJ1dHRvblByZXNzZWQoZXZlbnQpKSB7CisgICAgICBldmVudC5jYW5j ZWwgPSB0cnVlOworICAgICAgdGhpcy5wZ0Jyb3dzZXIuc2hvd0hlbHAoCisgICAgICAgIGV2ZW50 LmJ1dHRvbi5lbGVtZW50Lm5hbWUsCisgICAgICAgIGV2ZW50LmJ1dHRvbi5lbGVtZW50LmdldEF0 dHJpYnV0ZSgndXJsJyksCisgICAgICAgIG5vZGUsCisgICAgICAgIHNlbGVjdGVkVHJlZU5vZGUs CisgICAgICAgIGV2ZW50LmJ1dHRvbi5lbGVtZW50LmdldEF0dHJpYnV0ZSgnbGFiZWwnKQorICAg ICAgKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodGhpcy53YXNSZXN0b3JlQnV0 dG9uUHJlc3NlZChldmVudCkpIHsKKworICAgICAgaWYgKCFzZWxlY3RlZFRyZWVOb2RlRGF0YSkK KyAgICAgICAgcmV0dXJuOworCisgICAgICBjb25zdCBzZXJ2ZXJJZGVudGlmaWVyID0gdGhpcy5y ZXRyaWV2ZVNlcnZlcklkZW50aWZpZXIobm9kZSwgc2VsZWN0ZWRUcmVlTm9kZSk7CisKKyAgICAg IGNvbnN0IGRpYWxvZ1dyYXBwZXIgPSB0aGlzOworICAgICAgbGV0IHVybFNob3J0Y3V0ID0gJ3Jl c3RvcmUuY3JlYXRlX2pvYic7CisKKyAgICAgIGNvbnN0IGJhc2VVcmwgPSB1cmxfZm9yKHVybFNo b3J0Y3V0LCB7CisgICAgICAgICdzaWQnOiBzZXJ2ZXJJZGVudGlmaWVyLAorICAgICAgfSk7CisK KyAgICAgIGNvbnN0IHRyZWVJbmZvID0gZ2V0VHJlZU5vZGVIaWVyYXJjaHlGcm9tRWxlbWVudCgK KyAgICAgICAgdGhpcy5wZ0Jyb3dzZXIsCisgICAgICAgIHNlbGVjdGVkVHJlZU5vZGUKKyAgICAg ICk7CisKKyAgICAgIHRoaXMuc2V0RXh0cmFQYXJhbWV0ZXJzKHNlbGVjdGVkVHJlZU5vZGUsIHRy ZWVJbmZvKTsKKworICAgICAgbGV0IHNlcnZpY2UgPSBheGlvcy5jcmVhdGUoe30pOworICAgICAg c2VydmljZS5wb3N0KAorICAgICAgICBiYXNlVXJsLAorICAgICAgICB0aGlzLnZpZXcubW9kZWwu dG9KU09OKCkKKyAgICAgICkudGhlbihmdW5jdGlvbiAoKSB7CisgICAgICAgIGRpYWxvZ1dyYXBw ZXIuYWxlcnRpZnkuc3VjY2VzcyhnZXR0ZXh0KCdSZXN0b3JlIGpvYiBjcmVhdGVkLicpLCA1KTsK KyAgICAgICAgZGlhbG9nV3JhcHBlci5wZ0Jyb3dzZXIuRXZlbnRzLnRyaWdnZXIoJ3BnYWRtaW4t Ymdwcm9jZXNzOmNyZWF0ZWQnLCBkaWFsb2dXcmFwcGVyKTsKKyAgICAgIH0pLmNhdGNoKGZ1bmN0 aW9uIChlcnJvcikgeworICAgICAgICB0cnkgeworICAgICAgICAgIGNvbnN0IGVyciA9IGVycm9y LnJlc3BvbnNlLmRhdGE7CisgICAgICAgICAgZGlhbG9nV3JhcHBlci5hbGVydGlmeS5hbGVydCgK KyAgICAgICAgICAgIGdldHRleHQoJ1Jlc3RvcmUgam9iIGZhaWxlZC4nKSwKKyAgICAgICAgICAg IGVyci5lcnJvcm1zZworICAgICAgICAgICk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg ICAgICBjb25zb2xlLndhcm4oZS5zdGFjayB8fCBlKTsKKyAgICAgICAgfQorICAgICAgfSk7Cisg ICAgfQorICB9CisKKyAgYWRkQWxlcnRpZnlDbGFzc1RvUmVzdG9yZU5vZGVDaGlsZE5vZGVzKCkg eworICAgIHRoaXMuanF1ZXJ5KHRoaXMuZWxlbWVudHMuYm9keS5jaGlsZE5vZGVzWzBdKS5hZGRD bGFzcygKKyAgICAgICdhbGVydGlmeV90b29sc19kaWFsb2dfcHJvcGVydGllcyBvYmpfcHJvcGVy dGllcycKKyAgICApOworICB9CisKKyAgZ2V0U2VsZWN0ZWROb2RlKCkgeworICAgIGNvbnN0IHRy ZWUgPSB0aGlzLnBnQnJvd3Nlci50cmVlTWVudTsKKyAgICBjb25zdCBzZWxlY3RlZE5vZGUgPSB0 cmVlLnNlbGVjdGVkKCk7CisgICAgaWYgKHNlbGVjdGVkTm9kZSkgeworICAgICAgcmV0dXJuIHRy ZWUuZmluZE5vZGVCeURvbUVsZW1lbnQoc2VsZWN0ZWROb2RlKTsKKyAgICB9IGVsc2UgeworICAg ICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICB9CisgIH0KKworICBkaXNhYmxlUmVzdG9yZUJ1dHRv bigpIHsKKyAgICB0aGlzLl9faW50ZXJuYWwuYnV0dG9uc1syXS5lbGVtZW50LmRpc2FibGVkID0g dHJ1ZTsKKyAgfQorCisgIGVuYWJsZVJlc3RvcmVCdXR0b24oKSB7CisgICAgdGhpcy5fX2ludGVy bmFsLmJ1dHRvbnNbMl0uZWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOworICB9CisKKyAgY3JlYXRl RGlhbG9nKG5vZGUsIHRyZWVJbmZvLCAkY29udGFpbmVyKSB7CisgICAgY29uc3QgbmV3TW9kZWwg PSBuZXcgdGhpcy5kaWFsb2dNb2RlbCh7CisgICAgICBub2RlX2RhdGE6IG5vZGUsCisgICAgfSwg eworICAgICAgbm9kZV9pbmZvOiB0cmVlSW5mbywKKyAgICB9KTsKKyAgICBjb25zdCBmaWVsZHMg PSB0aGlzLmJhY2tmb3JtLmdlbmVyYXRlVmlld1NjaGVtYSgKKyAgICAgIHRyZWVJbmZvLCBuZXdN b2RlbCwgJ2NyZWF0ZScsIG5vZGUsIHRyZWVJbmZvLnNlcnZlciwgdHJ1ZQorICAgICk7CisKKyAg ICByZXR1cm4gdGhpcy52aWV3ID0gbmV3IHRoaXMuYmFja2Zvcm0uRGlhbG9nKHsKKyAgICAgIGVs OiAkY29udGFpbmVyLAorICAgICAgbW9kZWw6IG5ld01vZGVsLAorICAgICAgc2NoZW1hOiBmaWVs ZHMsCisgICAgfSk7CisgIH0KKworICByZXRyaWV2ZVNlcnZlcklkZW50aWZpZXIobm9kZSwgc2Vs ZWN0ZWRUcmVlTm9kZSkgeworICAgIGNvbnN0IHRyZWVJbmZvID0gZ2V0VHJlZU5vZGVIaWVyYXJj aHlGcm9tRWxlbWVudCgKKyAgICAgIHRoaXMucGdCcm93c2VyLAorICAgICAgc2VsZWN0ZWRUcmVl Tm9kZQorICAgICk7CisgICAgcmV0dXJuIHRyZWVJbmZvLnNlcnZlci5faWQ7CisgIH0KKworICBz ZXRMaXN0ZW5lcnNGb3JGaWxlbmFtZUNoYW5nZXMoKSB7CisgICAgY29uc3Qgc2VsZiA9IHRoaXM7 CisKKyAgICB0aGlzLnZpZXcubW9kZWwub24oJ2NoYW5nZScsIGZ1bmN0aW9uICgpIHsKKyAgICAg IGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLmdldCgnZmlsZScpKSAmJiB0aGlzLmdldCgnZmlsZScp ICE9PSAnJykgeworICAgICAgICB0aGlzLmVycm9yTW9kZWwuY2xlYXIoKTsKKyAgICAgICAgc2Vs Zi5lbmFibGVSZXN0b3JlQnV0dG9uKCk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzZWxmLmRp c2FibGVSZXN0b3JlQnV0dG9uKCk7CisgICAgICAgIHRoaXMuZXJyb3JNb2RlbC5zZXQoJ2ZpbGUn LCBnZXR0ZXh0KCdQbGVhc2UgcHJvdmlkZSBhIGZpbGVuYW1lJykpOworICAgICAgfQorICAgIH0p OworICB9CisKKyAgc2V0RXh0cmFQYXJhbWV0ZXJzKHNlbGVjdGVkVHJlZU5vZGUsIHRyZWVJbmZv KSB7CisgICAgdGhpcy52aWV3Lm1vZGVsLnNldCgnZGF0YWJhc2UnLCB0cmVlSW5mby5kYXRhYmFz ZS5fbGFiZWwpOworICAgIGlmICghdGhpcy52aWV3Lm1vZGVsLmdldCgnY3VzdG9tJykpIHsKKyAg ICAgIGNvbnN0IG5vZGVEYXRhID0gc2VsZWN0ZWRUcmVlTm9kZS5nZXREYXRhKCk7CisKKyAgICAg IHN3aXRjaCAobm9kZURhdGEuX3R5cGUpIHsKKyAgICAgIGNhc2UgJ3NjaGVtYSc6CisgICAgICAg IHRoaXMudmlldy5tb2RlbC5zZXQoJ3NjaGVtYXMnLCBbbm9kZURhdGEuX2xhYmVsXSk7CisgICAg ICAgIGJyZWFrOworICAgICAgY2FzZSAndGFibGUnOgorICAgICAgICB0aGlzLnZpZXcubW9kZWwu c2V0KCdzY2hlbWFzJywgW3RyZWVJbmZvLnNjaGVtYS5fbGFiZWxdKTsKKyAgICAgICAgdGhpcy52 aWV3Lm1vZGVsLnNldCgndGFibGVzJywgW25vZGVEYXRhLl9sYWJlbF0pOworICAgICAgICBicmVh azsKKyAgICAgIGNhc2UgJ2Z1bmN0aW9uJzoKKyAgICAgICAgdGhpcy52aWV3Lm1vZGVsLnNldCgn c2NoZW1hcycsIFt0cmVlSW5mby5zY2hlbWEuX2xhYmVsXSk7CisgICAgICAgIHRoaXMudmlldy5t b2RlbC5zZXQoJ2Z1bmN0aW9ucycsIFtub2RlRGF0YS5fbGFiZWxdKTsKKyAgICAgICAgYnJlYWs7 CisgICAgICBjYXNlICdpbmRleCc6CisgICAgICAgIHRoaXMudmlldy5tb2RlbC5zZXQoJ3NjaGVt YXMnLCBbdHJlZUluZm8uc2NoZW1hLl9sYWJlbF0pOworICAgICAgICB0aGlzLnZpZXcubW9kZWwu c2V0KCdpbmRleGVzJywgW25vZGVEYXRhLl9sYWJlbF0pOworICAgICAgICBicmVhazsKKyAgICAg IGNhc2UgJ3RyaWdnZXInOgorICAgICAgICB0aGlzLnZpZXcubW9kZWwuc2V0KCdzY2hlbWFzJywg W3RyZWVJbmZvLnNjaGVtYS5fbGFiZWxdKTsKKyAgICAgICAgdGhpcy52aWV3Lm1vZGVsLnNldCgn dHJpZ2dlcnMnLCBbbm9kZURhdGEuX2xhYmVsXSk7CisgICAgICAgIGJyZWFrOworICAgICAgY2Fz ZSAndHJpZ2dlcl9mdW5jJzoKKyAgICAgICAgdGhpcy52aWV3Lm1vZGVsLnNldCgnc2NoZW1hcycs IFt0cmVlSW5mby5zY2hlbWEuX2xhYmVsXSk7CisgICAgICAgIHRoaXMudmlldy5tb2RlbC5zZXQo J3RyaWdnZXJfZnVuY3MnLCBbbm9kZURhdGEuX2xhYmVsXSk7CisgICAgICAgIGJyZWFrOworICAg ICAgfQorICAgIH0KKyAgfQorCisgIHdhc1Jlc3RvcmVCdXR0b25QcmVzc2VkKGV2ZW50KSB7Cisg ICAgcmV0dXJuIGV2ZW50LmJ1dHRvblsnZGF0YS1idG4tbmFtZSddID09PSAncmVzdG9yZSc7Cisg IH0KK30KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zY2hlbWEvY2FuX2Ryb3Bf Y2hpbGQuanMgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2NoZW1hL2Nhbl9kcm9wX2NoaWxkLmpz Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi44NGUyNWI1YwotLS0gL2Rldi9u dWxsCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zY2hlbWEvY2FuX2Ryb3BfY2hpbGQuanMK QEAgLTAsMCArMSwxOCBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9v bHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9w bWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3Jl U1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitleHBvcnQgZnVuY3Rpb24gY2FuRHJvcENoaWxkKHBn QnJvd3NlciwgaXRlbURhdGEsIGl0ZW0pIHsKKyAgbGV0IG5vZGUgPSBwZ0Jyb3dzZXIudHJlZU1l bnUuZmluZE5vZGVCeURvbUVsZW1lbnQoaXRlbSk7CisKKyAgaWYgKG5vZGUuYW55UGFyZW50KChw YXJlbnQpID0+IHBhcmVudC5nZXREYXRhKCkuX3R5cGUgPT09ICdjYXRhbG9nJykpIHsKKyAgICBy ZXR1cm4gZmFsc2U7CisgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3dlYi9w Z2FkbWluL3N0YXRpYy9qcy90YWJsZS9lbmFibGVfZGlzYWJsZV90cmlnZ2Vycy5qcyBiL3dlYi9w Z2FkbWluL3N0YXRpYy9qcy90YWJsZS9lbmFibGVfZGlzYWJsZV90cmlnZ2Vycy5qcwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uMmQ3OTIwNDMKLS0tIC9kZXYvbnVsbAorKysg Yi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvdGFibGUvZW5hYmxlX2Rpc2FibGVfdHJpZ2dlcnMuanMK QEAgLTAsMCArMSw1MiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9v bHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9w bWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3Jl U1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnOworCitl eHBvcnQgZnVuY3Rpb24gZGlzYWJsZVRyaWdnZXJzKHRyZWUsIGFsZXJ0aWZ5LCBnZW5lcmF0ZVVy bCwgYXJncykgeworICByZXR1cm4gc2V0VHJpZ2dlcnModHJlZSwgYWxlcnRpZnksIGdlbmVyYXRl VXJsLCBhcmdzLCB7ZW5hYmxlOiAnZmFsc2UnIH0pOworfQorZXhwb3J0IGZ1bmN0aW9uIGVuYWJs ZVRyaWdnZXJzKHRyZWUsIGFsZXJ0aWZ5LCBnZW5lcmF0ZVVybCwgYXJncykgeworICByZXR1cm4g c2V0VHJpZ2dlcnModHJlZSwgYWxlcnRpZnksIGdlbmVyYXRlVXJsLCBhcmdzLCB7ZW5hYmxlOiAn dHJ1ZScgfSk7Cit9CisKK2Z1bmN0aW9uIHNldFRyaWdnZXJzKHRyZWUsIGFsZXJ0aWZ5LCBnZW5l cmF0ZVVybCwgYXJncywgcGFyYW1zKSB7CisgIGNvbnN0IHRyZWVOb2RlID0gcmV0cmlldmVUcmVl Tm9kZShhcmdzLCB0cmVlKTsKKworICBpZiAoIXRyZWVOb2RlIHx8IHRyZWVOb2RlLmdldERhdGEo KSA9PT0gbnVsbCB8fCB0cmVlTm9kZS5nZXREYXRhKCkgPT09IHVuZGVmaW5lZCkKKyAgICByZXR1 cm4gZmFsc2U7CisKKyAgYXhpb3MucHV0KAorICAgIGdlbmVyYXRlVXJsKHRyZWVOb2RlLmdldEh0 bWxJZGVudGlmaWVyKCksICdzZXRfdHJpZ2dlcicsIHRyZWVOb2RlLmdldERhdGEoKSwgdHJ1ZSks CisgICAgcGFyYW1zCisgICkKKyAgICAudGhlbigocmVzKSA9PiB7CisgICAgICBpZiAocmVzLmRh dGEuc3VjY2VzcyA9PT0gMSkgeworICAgICAgICBhbGVydGlmeS5zdWNjZXNzKHJlcy5kYXRhLmlu Zm8pOworICAgICAgICB0cmVlTm9kZS5yZWxvYWQodHJlZSk7CisgICAgICB9CisgICAgfSkKKyAg ICAuY2F0Y2goKHhocikgPT4geworICAgICAgdHJ5IHsKKyAgICAgICAgY29uc3QgZXJyID0geGhy LnJlc3BvbnNlLmRhdGE7CisgICAgICAgIGlmIChlcnIuc3VjY2VzcyA9PT0gMCkgeworICAgICAg ICAgIGFsZXJ0aWZ5LmVycm9yKGVyci5lcnJvcm1zZyk7CisgICAgICAgIH0KKyAgICAgIH0gY2F0 Y2ggKGUpIHsKKyAgICAgICAgY29uc29sZS53YXJuKGUuc3RhY2sgfHwgZSk7CisgICAgICB9Cisg ICAgICB0cmVlTm9kZS51bmxvYWQodHJlZSk7CisgICAgfSk7Cit9CisKK2Z1bmN0aW9uIHJldHJp ZXZlVHJlZU5vZGUoYXJncywgdHJlZSkgeworICBjb25zdCBpbnB1dCA9IGFyZ3MgfHwge307Cisg IGNvbnN0IGRvbUVsZW1lbnRJZGVudGlmaWVyID0gaW5wdXQuaXRlbSB8fCB0cmVlLnNlbGVjdGVk KCk7CisgIHJldHVybiB0cmVlLmZpbmROb2RlQnlEb21FbGVtZW50KGRvbUVsZW1lbnRJZGVudGlm aWVyKTsKK30KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy90YWJsZS9pbmRleC5q cyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy90YWJsZS9pbmRleC5qcwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMC4uNDBkMGMyMmQKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdh ZG1pbi9zdGF0aWMvanMvdGFibGUvaW5kZXguanMKQEAgLTAsMCArMSwxMCBAQAorLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8K Ky8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIw MTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJl IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitl eHBvcnQgKiBmcm9tICcuL2VuYWJsZV9kaXNhYmxlX3RyaWdnZXJzJzsKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL3N0YXRpYy9qcy90cmVlL3BnYWRtaW5fdHJlZV9ub2RlLmpzIGIvd2ViL3BnYWRt aW4vc3RhdGljL2pzL3RyZWUvcGdhZG1pbl90cmVlX25vZGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAuLmJjY2JlNTg3Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRt aW4vc3RhdGljL2pzL3RyZWUvcGdhZG1pbl90cmVlX25vZGUuanMKQEAgLTAsMCArMSw0MyBAQAor Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisv LworLy8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQg VGVhbQorLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBM aWNlbmNlCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworZXhwb3J0IGZ1bmN0aW9uIGdldFRyZWVO b2RlSGllcmFyY2h5RnJvbUVsZW1lbnQocGdCcm93c2VyLCB0cmVlTm9kZSkgeworICByZXR1cm4g Z2V0VHJlZU5vZGVIaWVyYXJjaHkuY2FsbChwZ0Jyb3dzZXIsIHRyZWVOb2RlKTsKK30KKworZXhw b3J0IGZ1bmN0aW9uIGdldFRyZWVOb2RlSGllcmFyY2h5RnJvbUlkZW50aWZpZXIoYWNpVHJlZU5v ZGVJZGVudGlmaWVyKSB7CisgIGxldCBpZGVudGlmaWVyID0gdGhpcy50cmVlTWVudS50cmFuc2xh dGVUcmVlTm9kZUlkRnJvbUFDSVRyZWUoYWNpVHJlZU5vZGVJZGVudGlmaWVyKTsKKyAgbGV0IGN1 cnJlbnROb2RlID0gdGhpcy50cmVlTWVudS5maW5kTm9kZShpZGVudGlmaWVyKTsKKyAgcmV0dXJu IGdldFRyZWVOb2RlSGllcmFyY2h5LmNhbGwodGhpcywgY3VycmVudE5vZGUpOworfQorCitleHBv cnQgZnVuY3Rpb24gZ2V0VHJlZU5vZGVIaWVyYXJjaHkoY3VycmVudE5vZGUpIHsKKyAgbGV0IGlk eCA9IDA7CisgIGxldCByZXN1bHQgPSB7fTsKKworICBkbyB7CisgICAgY29uc3QgY3VycmVudE5v ZGVEYXRhID0gY3VycmVudE5vZGUuZ2V0RGF0YSgpOworICAgIGlmIChjdXJyZW50Tm9kZURhdGEu X3R5cGUgaW4gdGhpcy5Ob2RlcyAmJiB0aGlzLk5vZGVzW2N1cnJlbnROb2RlRGF0YS5fdHlwZV0u aGFzSWQpIHsKKyAgICAgIGNvbnN0IG5vZGVUeXBlID0gbWFwVHlwZShjdXJyZW50Tm9kZURhdGEu X3R5cGUpOworICAgICAgaWYgKHJlc3VsdFtub2RlVHlwZV0gPT09IHVuZGVmaW5lZCkgeworICAg ICAgICByZXN1bHRbbm9kZVR5cGVdID0gXy5leHRlbmQoe30sIGN1cnJlbnROb2RlRGF0YSwgewor ICAgICAgICAgICdwcmlvcml0eSc6IGlkeCwKKyAgICAgICAgfSk7CisgICAgICAgIGlkeCAtPSAx OworICAgICAgfQorICAgIH0KKyAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLmhhc1BhcmVu dCgpID8gY3VycmVudE5vZGUucGFyZW50KCkgOiBudWxsOworICB9IHdoaWxlIChjdXJyZW50Tm9k ZSk7CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KKworZnVuY3Rpb24gbWFwVHlwZSh0eXBlKSB7Cisg IHJldHVybiB0eXBlID09PSAncGFydGl0aW9uJyA/ICd0YWJsZScgOiB0eXBlOworfQpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvYmFja3VwL3N0YXRpYy9qcy9iYWNrdXAuanMgYi93ZWIv cGdhZG1pbi90b29scy9iYWNrdXAvc3RhdGljL2pzL2JhY2t1cC5qcwppbmRleCBkZGJmYWVlNC4u NjQ1OWJlYWYgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL2JhY2t1cC9zdGF0aWMvanMv YmFja3VwLmpzCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2JhY2t1cC9zdGF0aWMvanMvYmFja3Vw LmpzCkBAIC0zLDkgKzMsMTEgQEAgZGVmaW5lKFsKICAgJ3NvdXJjZXMvZ2V0dGV4dCcsICdzb3Vy Y2VzL3VybF9mb3InLCAnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLAogICAndW5kZXJzY29yZS5zdHJp bmcnLCAncGdhZG1pbi5hbGVydGlmeWpzJywgJ2JhY2tib25lJywgJ3BnYWRtaW4uYmFja2dyaWQn LAogICAncGdhZG1pbi5iYWNrZm9ybScsICdwZ2FkbWluLmJyb3dzZXInLCAnc291cmNlcy91dGls cycsCisgICdzb3VyY2VzL2JhY2t1cC9tZW51X3V0aWxzJywgJ3NvdXJjZXMvYmFja3VwL2JhY2t1 cF9kaWFsb2cnLAorICAnc291cmNlcy9tZW51L21lbnVfZW5hYmxlZCcsCiBdLCBmdW5jdGlvbigK ICAgZ2V0dGV4dCwgdXJsX2ZvciwgJCwgXywgUywgYWxlcnRpZnksIEJhY2tib25lLCBCYWNrZ3Jp ZCwgQmFja2Zvcm0sIHBnQnJvd3NlciwKLWNvbW1vblV0aWxzCitjb21tb25VdGlscywgbWVudVV0 aWxzLCBnbG9iYWxCYWNrdXBEaWFsb2csIG1lbnVFbmFibGVkCiApIHsKIAogICAvLyBpZiBtb2R1 bGUgaXMgYWxyZWFkeSBpbml0aWFsaXplZCwgcmVmZXIgdG8gdGhhdC4KQEAgLTM5NCw0OCArMzk2 LDYgQEAgY29tbW9uVXRpbHMKIAogICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7CiAKLSAg ICAgIC8vIERlZmluZSBsaXN0IG9mIG5vZGVzIG9uIHdoaWNoIGJhY2t1cCBjb250ZXh0IG1lbnUg b3B0aW9uIGFwcGVhcnMKLSAgICAgIHZhciBiYWNrdXBfc3VwcG9ydGVkX25vZGVzID0gWwotICAg ICAgICAnZGF0YWJhc2UnLCAnc2NoZW1hJywgJ3RhYmxlJywgJ3BhcnRpdGlvbicsCi0gICAgICBd OwotCi0gICAgICAvKioKLSAgICAgICAgRW5hYmxlL2Rpc2FibGUgYmFja3VwIG1lbnUgaW4gdG9v bHMgYmFzZWQKLSAgICAgICAgb24gbm9kZSBzZWxlY3RlZAotICAgICAgICBpZiBzZWxlY3RlZCBu b2RlIGlzIHByZXNlbnQgaW4gc3VwcG9ydGVkX25vZGVzLAotICAgICAgICBtZW51IHdpbGwgYmUg ZW5hYmxlZCBvdGhlcndpc2UgZGlzYWJsZWQuCi0gICAgICAgIEFsc28sIGhpZGUgaXQgZm9yIHN5 c3RlbSB2aWV3IGluIGNhdGFsb2dzCi0gICAgICAqLwotICAgICAgdmFyIG1lbnVfZW5hYmxlZCA9 IGZ1bmN0aW9uKGl0ZW1EYXRhLCBpdGVtKSB7Ci0gICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRy ZWUsCi0gICAgICAgICAgaSA9IGl0ZW0sCi0gICAgICAgICAgZCA9IGl0ZW1EYXRhLAotICAgICAg ICAgIHBhcmVudF9pdGVtID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGwsCi0g ICAgICAgICAgcGFyZW50X2RhdGEgPSBwYXJlbnRfaXRlbSA/IHQuaXRlbURhdGEocGFyZW50X2l0 ZW0pIDogbnVsbDsKLQotICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZCkgJiYgIV8uaXNOdWxs KGQpICYmICFfLmlzTnVsbChwYXJlbnRfZGF0YSkpIHsKLSAgICAgICAgICBpZiAoXy5pbmRleE9m KGJhY2t1cF9zdXBwb3J0ZWRfbm9kZXMsIGQuX3R5cGUpICE9PSAtMSAmJgotICAgICAgICAgICAg cGFyZW50X2RhdGEuX3R5cGUgIT0gJ2NhdGFsb2cnKSB7Ci0gICAgICAgICAgICBpZiAoZC5fdHlw ZSA9PSAnZGF0YWJhc2UnICYmIGQuYWxsb3dDb25uKQotICAgICAgICAgICAgICByZXR1cm4gdHJ1 ZTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGQuX3R5cGUgIT0gJ2RhdGFiYXNlJykKLSAgICAgICAg ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIHJldHVy biBmYWxzZTsKLSAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg ICAgICAgfSBlbHNlCi0gICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgfTsKLQotICAgICAg dmFyIG1lbnVfZW5hYmxlZF9zZXJ2ZXIgPSBmdW5jdGlvbihpdGVtRGF0YSkgewotICAgICAgICAv LyBJZiBzZXJ2ZXIgbm9kZSBzZWxlY3RlZCAmJiBjb25uZWN0ZWQKLSAgICAgICAgaWYgKCFfLmlz VW5kZWZpbmVkKGl0ZW1EYXRhKSAmJiAhXy5pc051bGwoaXRlbURhdGEpKQotICAgICAgICAgIHJl dHVybiAoKCdzZXJ2ZXInID09PSBpdGVtRGF0YS5fdHlwZSkgJiYgaXRlbURhdGEuY29ubmVjdGVk KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH07Ci0KICAg ICAgIC8vIERlZmluZSB0aGUgbm9kZXMgb24gd2hpY2ggdGhlIG1lbnVzIHRvIGJlIGFwcGVhcgog ICAgICAgdmFyIG1lbnVzID0gW3sKICAgICAgICAgbmFtZTogJ2JhY2t1cF9nbG9iYWwnLApAQCAt NDQ1LDcgKzQwNSw3IEBAIGNvbW1vblV0aWxzCiAgICAgICAgIHByaW9yaXR5OiAxMiwKICAgICAg ICAgbGFiZWw6IGdldHRleHQoJ0JhY2t1cCBHbG9iYWxzLi4uJyksCiAgICAgICAgIGljb246ICdm YSBmYS1mbG9wcHktbycsCi0gICAgICAgIGVuYWJsZTogbWVudV9lbmFibGVkX3NlcnZlciwKKyAg ICAgICAgZW5hYmxlOiBtZW51VXRpbHMubWVudUVuYWJsZWRTZXJ2ZXIsCiAgICAgICB9LCB7CiAg ICAgICAgIG5hbWU6ICdiYWNrdXBfc2VydmVyJywKICAgICAgICAgbW9kdWxlOiB0aGlzLApAQCAt NDU0LDcgKzQxNCw3IEBAIGNvbW1vblV0aWxzCiAgICAgICAgIHByaW9yaXR5OiAxMiwKICAgICAg ICAgbGFiZWw6IGdldHRleHQoJ0JhY2t1cCBTZXJ2ZXIuLi4nKSwKICAgICAgICAgaWNvbjogJ2Zh IGZhLWZsb3BweS1vJywKLSAgICAgICAgZW5hYmxlOiBtZW51X2VuYWJsZWRfc2VydmVyLAorICAg ICAgICBlbmFibGU6IG1lbnVVdGlscy5tZW51RW5hYmxlZFNlcnZlciwKICAgICAgIH0sIHsKICAg ICAgICAgbmFtZTogJ2JhY2t1cF9nbG9iYWxfY3R4JywKICAgICAgICAgbW9kdWxlOiB0aGlzLApA QCAtNDY0LDcgKzQyNCw3IEBAIGNvbW1vblV0aWxzCiAgICAgICAgIHByaW9yaXR5OiAxMiwKICAg ICAgICAgbGFiZWw6IGdldHRleHQoJ0JhY2t1cCBHbG9iYWxzLi4uJyksCiAgICAgICAgIGljb246 ICdmYSBmYS1mbG9wcHktbycsCi0gICAgICAgIGVuYWJsZTogbWVudV9lbmFibGVkX3NlcnZlciwK KyAgICAgICAgZW5hYmxlOiBtZW51VXRpbHMubWVudUVuYWJsZWRTZXJ2ZXIsCiAgICAgICB9LCB7 CiAgICAgICAgIG5hbWU6ICdiYWNrdXBfc2VydmVyX2N0eCcsCiAgICAgICAgIG1vZHVsZTogdGhp cywKQEAgLTQ3NCw3ICs0MzQsNyBAQCBjb21tb25VdGlscwogICAgICAgICBwcmlvcml0eTogMTIs CiAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdCYWNrdXAgU2VydmVyLi4uJyksCiAgICAgICAgIGlj b246ICdmYSBmYS1mbG9wcHktbycsCi0gICAgICAgIGVuYWJsZTogbWVudV9lbmFibGVkX3NlcnZl ciwKKyAgICAgICAgZW5hYmxlOiBtZW51VXRpbHMubWVudUVuYWJsZWRTZXJ2ZXIsCiAgICAgICB9 LCB7CiAgICAgICAgIG5hbWU6ICdiYWNrdXBfb2JqZWN0JywKICAgICAgICAgbW9kdWxlOiB0aGlz LApAQCAtNDgzLDIwICs0NDMsMjIgQEAgY29tbW9uVXRpbHMKICAgICAgICAgcHJpb3JpdHk6IDEx LAogICAgICAgICBsYWJlbDogZ2V0dGV4dCgnQmFja3VwLi4uJyksCiAgICAgICAgIGljb246ICdm YSBmYS1mbG9wcHktbycsCi0gICAgICAgIGVuYWJsZTogbWVudV9lbmFibGVkLAorICAgICAgICBl bmFibGU6IG1lbnVFbmFibGVkLm1lbnVFbmFibGVkLmJpbmQobnVsbCwKKyAgICAgICAgICBwZ0Jy b3dzZXIudHJlZU1lbnUsIG1lbnVVdGlscy5iYWNrdXBTdXBwb3J0ZWROb2RlcyksCiAgICAgICB9 XTsKIAotICAgICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgYmFja3VwX3N1cHBvcnRlZF9ub2Rl cy5sZW5ndGg7IGlkeCsrKSB7CisgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBtZW51VXRp bHMuYmFja3VwU3VwcG9ydGVkTm9kZXMubGVuZ3RoOyBpZHgrKykgewogICAgICAgICBtZW51cy5w dXNoKHsKLSAgICAgICAgICBuYW1lOiAnYmFja3VwXycgKyBiYWNrdXBfc3VwcG9ydGVkX25vZGVz W2lkeF0sCi0gICAgICAgICAgbm9kZTogYmFja3VwX3N1cHBvcnRlZF9ub2Rlc1tpZHhdLAorICAg ICAgICAgIG5hbWU6ICdiYWNrdXBfJyArIG1lbnVVdGlscy5iYWNrdXBTdXBwb3J0ZWROb2Rlc1tp ZHhdLAorICAgICAgICAgIG5vZGU6IG1lbnVVdGlscy5iYWNrdXBTdXBwb3J0ZWROb2Rlc1tpZHhd LAogICAgICAgICAgIG1vZHVsZTogdGhpcywKICAgICAgICAgICBhcHBsaWVzOiBbJ2NvbnRleHQn XSwKICAgICAgICAgICBjYWxsYmFjazogJ2JhY2t1cF9vYmplY3RzJywKICAgICAgICAgICBwcmlv cml0eTogMTEsCiAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ0JhY2t1cC4uLicpLAogICAgICAg ICAgIGljb246ICdmYSBmYS1mbG9wcHktbycsCi0gICAgICAgICAgZW5hYmxlOiBtZW51X2VuYWJs ZWQsCisgICAgICAgICAgZW5hYmxlOiBtZW51RW5hYmxlZC5tZW51RW5hYmxlZC5iaW5kKG51bGws CisgICAgICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUsIG1lbnVVdGlscy5iYWNrdXBTdXBwb3J0 ZWROb2RlcyksCiAgICAgICAgIH0pOwogICAgICAgfQogCkBAIC01MjEsNTMxICs0ODMsMjUgQEAg Y29tbW9uVXRpbHMKICAgICB9LAogCiAgICAgLy8gQ2FsbGJhY2sgdG8gZHJhdyBCYWNrdXAgRGlh bG9nIGZvciBnbG9iYWxzL3NlcnZlcgotICAgIHN0YXJ0X2JhY2t1cF9nbG9iYWxfc2VydmVyOiBm dW5jdGlvbihhY3Rpb24sIGl0ZW0sIHBhcmFtcykgewotICAgICAgdmFyIGkgPSBpdGVtIHx8IHBn QnJvd3Nlci50cmVlLnNlbGVjdGVkKCksCi0gICAgICAgIHNlcnZlcl9kYXRhID0gbnVsbDsKLQot ICAgICAgd2hpbGUgKGkpIHsKLSAgICAgICAgdmFyIG5vZGVfZGF0YSA9IHBnQnJvd3Nlci50cmVl Lml0ZW1EYXRhKGkpOwotICAgICAgICBpZiAobm9kZV9kYXRhLl90eXBlID09ICdzZXJ2ZXInKSB7 Ci0gICAgICAgICAgc2VydmVyX2RhdGEgPSBub2RlX2RhdGE7Ci0gICAgICAgICAgYnJlYWs7Ci0g ICAgICAgIH0KLQotICAgICAgICBpZiAocGdCcm93c2VyLnRyZWUuaGFzUGFyZW50KGkpKSB7Ci0g ICAgICAgICAgaSA9ICQocGdCcm93c2VyLnRyZWUucGFyZW50KGkpKTsKLSAgICAgICAgfSBlbHNl IHsKLSAgICAgICAgICBhbGVydGlmeS5hbGVydCgKLSAgICAgICAgICAgIGdldHRleHQoJ0JhY2t1 cCBFcnJvcicpLAotICAgICAgICAgICAgZ2V0dGV4dCgnUGxlYXNlIHNlbGVjdCBzZXJ2ZXIgb3Ig Y2hpbGQgbm9kZSBmcm9tIHRoZSBicm93c2VyIHRyZWUuJykKLSAgICAgICAgICApOwotICAgICAg ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAgICAgIGlmICghc2VydmVyX2RhdGEp IHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAgICB2YXIgbW9kdWxlID0gJ3BhdGhz JywKLSAgICAgICAgcHJlZmVyZW5jZV9uYW1lID0gJ3BnX2Jpbl9kaXInLAotICAgICAgICBtc2cg PSBnZXR0ZXh0KCdQbGVhc2UgY29uZmlndXJlIHRoZSBQb3N0Z3JlU1FMIEJpbmFyeSBQYXRoIGlu IHRoZSBQcmVmZXJlbmNlcyBkaWFsb2cuJyk7Ci0KLSAgICAgIGlmICgoc2VydmVyX2RhdGEudHlw ZSAmJiBzZXJ2ZXJfZGF0YS50eXBlID09ICdwcGFzJykgfHwKLSAgICAgICAgc2VydmVyX2RhdGEu c2VydmVyX3R5cGUgPT0gJ3BwYXMnKSB7Ci0gICAgICAgIHByZWZlcmVuY2VfbmFtZSA9ICdwcGFz X2Jpbl9kaXInOwotICAgICAgICBtc2cgPSBnZXR0ZXh0KCdQbGVhc2UgY29uZmlndXJlIHRoZSBF REIgQWR2YW5jZWQgU2VydmVyIEJpbmFyeSBQYXRoIGluIHRoZSBQcmVmZXJlbmNlcyBkaWFsb2cu Jyk7Ci0gICAgICB9Ci0KLSAgICAgIHZhciBwcmVmZXJlbmNlID0gcGdCcm93c2VyLmdldF9wcmVm ZXJlbmNlKG1vZHVsZSwgcHJlZmVyZW5jZV9uYW1lKTsKLQotICAgICAgaWYgKHByZWZlcmVuY2Up IHsKLSAgICAgICAgaWYgKCFwcmVmZXJlbmNlLnZhbHVlKSB7Ci0gICAgICAgICAgYWxlcnRpZnku YWxlcnQoZ2V0dGV4dCgnQ29uZmlndXJhdGlvbiByZXF1aXJlZCcpLCBtc2cpOwotICAgICAgICAg IHJldHVybjsKLSAgICAgICAgfQotICAgICAgfSBlbHNlIHsKLSAgICAgICAgYWxlcnRpZnkuYWxl cnQoCi0gICAgICAgICAgZ2V0dGV4dCgnQmFja3VwIEVycm9yJyksCi0gICAgICAgICAgUyhnZXR0 ZXh0KCdGYWlsZWQgdG8gbG9hZCBwcmVmZXJlbmNlICVzIG9mIG1vZHVsZSAlcycpKS5zcHJpbnRm KHByZWZlcmVuY2VfbmFtZSwgbW9kdWxlKS52YWx1ZSgpCi0gICAgICAgICk7Ci0gICAgICAgIHJl dHVybjsKLSAgICAgIH0KLQotICAgICAgdmFyIG9mX3R5cGUgPSB1bmRlZmluZWQ7Ci0KLSAgICAg IC8vIFNldCBOb3RlcyBhY2NvcmRpbmcgdG8gdHlwZSBvZiBiYWNrdXAKLSAgICAgIGlmICghXy5p c1VuZGVmaW5lZChwYXJhbXNbJ2dsb2JhbHMnXSkgJiYgcGFyYW1zWydnbG9iYWxzJ10pIHsKLSAg ICAgICAgb2ZfdHlwZSA9ICdnbG9iYWxzJzsKLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIG9mX3R5 cGUgPSAnc2VydmVyJzsKLSAgICAgIH0KLQotICAgICAgdmFyIERpYWxvZ05hbWUgPSAnQmFja3Vw RGlhbG9nXycgKyBvZl90eXBlLAotICAgICAgICBEaWFsb2dUaXRsZSA9ICgob2ZfdHlwZSA9PSAn Z2xvYmFscycpID8KLSAgICAgICAgICBnZXR0ZXh0KCdCYWNrdXAgR2xvYmFscy4uLicpIDoKLSAg ICAgICAgICBnZXR0ZXh0KCdCYWNrdXAgU2VydmVyLi4uJykpOwotCi0gICAgICBpZiAoIWFsZXJ0 aWZ5W0RpYWxvZ05hbWVdKSB7Ci0gICAgICAgIGFsZXJ0aWZ5LmRpYWxvZyhEaWFsb2dOYW1lLCBm dW5jdGlvbiBmYWN0b3J5KCkgewotICAgICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICBtYWlu OiBmdW5jdGlvbih0aXRsZSkgewotICAgICAgICAgICAgICB0aGlzLnNldCgndGl0bGUnLCB0aXRs ZSk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgYnVpbGQ6IGZ1bmN0aW9uKCkgewotICAg ICAgICAgICAgICBhbGVydGlmeS5wZ0RpYWxvZ0J1aWxkLmFwcGx5KHRoaXMpOwotICAgICAgICAg ICAgfSwKLSAgICAgICAgICAgIHNldHVwOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgcmV0 dXJuIHsKLSAgICAgICAgICAgICAgICBidXR0b25zOiBbewotICAgICAgICAgICAgICAgICAgdGV4 dDogJycsCi0gICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdidG4gYnRuLWRlZmF1bHQgcHVs bC1sZWZ0IGZhIGZhLWxnIGZhLWluZm8nLAotICAgICAgICAgICAgICAgICAgYXR0cnM6IHsKLSAg ICAgICAgICAgICAgICAgICAgbmFtZTogJ29iamVjdF9oZWxwJywKLSAgICAgICAgICAgICAgICAg ICAgdHlwZTogJ2J1dHRvbicsCi0gICAgICAgICAgICAgICAgICAgIHVybDogJ2JhY2t1cC5odG1s JywKLSAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ0JhY2t1cCcpLAotICAgICAg ICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgICB0 ZXh0OiAnJywKLSAgICAgICAgICAgICAgICAgIGtleTogMTEyLAotICAgICAgICAgICAgICAgICAg Y2xhc3NOYW1lOiAnYnRuIGJ0bi1kZWZhdWx0IHB1bGwtbGVmdCBmYSBmYS1sZyBmYS1xdWVzdGlv bicsCi0gICAgICAgICAgICAgICAgICBhdHRyczogewotICAgICAgICAgICAgICAgICAgICBuYW1l OiAnZGlhbG9nX2hlbHAnLAotICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJywKLSAg ICAgICAgICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoJ0JhY2t1cCcpLAotICAgICAgICAgICAg ICAgICAgICB1cmw6IHVybF9mb3IoJ2hlbHAuc3RhdGljJywgewotICAgICAgICAgICAgICAgICAg ICAgICdmaWxlbmFtZSc6ICdiYWNrdXBfZGlhbG9nLmh0bWwnLAotICAgICAgICAgICAgICAgICAg ICB9KSwKLSAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgfSwgewotICAgICAg ICAgICAgICAgICAgdGV4dDogZ2V0dGV4dCgnQmFja3VwJyksCi0gICAgICAgICAgICAgICAgICBr ZXk6IDEzLAotICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1wcmltYXJ5IGZh IGZhLWxnIGZhLXNhdmUgcGctYWxlcnRpZnktYnV0dG9uJywKLSAgICAgICAgICAgICAgICAgICdk YXRhLWJ0bi1uYW1lJzogJ2JhY2t1cCcsCi0gICAgICAgICAgICAgICAgfSwgewotICAgICAgICAg ICAgICAgICAgdGV4dDogZ2V0dGV4dCgnQ2FuY2VsJyksCi0gICAgICAgICAgICAgICAgICBrZXk6 IDI3LAotICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1kYW5nZXIgZmEgZmEt bGcgZmEtdGltZXMgcGctYWxlcnRpZnktYnV0dG9uJywKLSAgICAgICAgICAgICAgICAgICdkYXRh LWJ0bi1uYW1lJzogJ2NhbmNlbCcsCi0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAg ICAgLy8gU2V0IG9wdGlvbnMgZm9yIGRpYWxvZwotICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsK LSAgICAgICAgICAgICAgICAgIHRpdGxlOiBEaWFsb2dUaXRsZSwKLSAgICAgICAgICAgICAgICAg IC8vZGlzYWJsZSBib3RoIHBhZGRpbmcgYW5kIG92ZXJmbG93IGNvbnRyb2wuCi0gICAgICAgICAg ICAgICAgICBwYWRkaW5nOiAhMSwKLSAgICAgICAgICAgICAgICAgIG92ZXJmbG93OiAhMSwKLSAg ICAgICAgICAgICAgICAgIG1vZGVsOiAwLAotICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0 cnVlLAotICAgICAgICAgICAgICAgICAgbWF4aW1pemFibGU6IHRydWUsCi0gICAgICAgICAgICAg ICAgICBwaW5uYWJsZTogZmFsc2UsCi0gICAgICAgICAgICAgICAgICBjbG9zYWJsZUJ5RGltbWVy OiBmYWxzZSwKLSAgICAgICAgICAgICAgICAgIG1vZGFsOiBmYWxzZSwKLSAgICAgICAgICAgICAg ICB9LAotICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIGhvb2tz OiB7Ci0gICAgICAgICAgICAgIC8vIFRyaWdnZXJlZCB3aGVuIHRoZSBkaWFsb2cgaXMgY2xvc2Vk Ci0gICAgICAgICAgICAgIG9uY2xvc2U6IGZ1bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlm ICh0aGlzLnZpZXcpIHsKLSAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIG91ciBiYWNrZm9ybSBt b2RlbC92aWV3Ci0gICAgICAgICAgICAgICAgICB0aGlzLnZpZXcucmVtb3ZlKHsKLSAgICAgICAg ICAgICAgICAgICAgZGF0YTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWw6IHRy dWUsCi0gICAgICAgICAgICAgICAgICAgIHNpbGVudDogdHJ1ZSwKLSAgICAgICAgICAgICAgICAg IH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIH0s Ci0gICAgICAgICAgICBwcmVwYXJlOiBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgdmFyIHNl bGYgPSB0aGlzOwotICAgICAgICAgICAgICAvLyBEaXNhYmxlIEJhY2t1cCBidXR0b24gdW50aWwg dXNlciBwcm92aWRlcyBGaWxlbmFtZQotICAgICAgICAgICAgICB0aGlzLl9faW50ZXJuYWwuYnV0 dG9uc1syXS5lbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgICB2YXIgJGNv bnRhaW5lciA9ICQoJzxkaXYgY2xhc3M9XCdiYWNrdXBfZGlhbG9nXCc+PC9kaXY+Jyk7Ci0gICAg ICAgICAgICAgIC8vIEZpbmQgY3VycmVudC9zZWxlY3RlZCBub2RlCi0gICAgICAgICAgICAgIHZh ciB0ID0gcGdCcm93c2VyLnRyZWUsCi0gICAgICAgICAgICAgICAgaSA9IHQuc2VsZWN0ZWQoKSwK LSAgICAgICAgICAgICAgICBkID0gaSAmJiBpLmxlbmd0aCA9PSAxID8gdC5pdGVtRGF0YShpKSA6 IHVuZGVmaW5lZCwKLSAgICAgICAgICAgICAgICBub2RlID0gZCAmJiBwZ0Jyb3dzZXIuTm9kZXNb ZC5fdHlwZV07Ci0KLSAgICAgICAgICAgICAgaWYgKCFkKQotICAgICAgICAgICAgICAgIHJldHVy bjsKLSAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRyZWVJbmZvCi0gICAgICAgICAgICAgIHZhciB0 cmVlSW5mbyA9IG5vZGUuZ2V0VHJlZU5vZGVIaWVyYXJjaHkuYXBwbHkobm9kZSwgW2ldKTsKLSAg ICAgICAgICAgICAgLy8gSW5zdGFuY2Ugb2YgYmFja2JvbmUgbW9kZWwKLSAgICAgICAgICAgICAg dmFyIG5ld01vZGVsID0gbmV3IEJhY2t1cE1vZGVsKHsKLSAgICAgICAgICAgICAgICAgIHR5cGU6 IG9mX3R5cGUsCi0gICAgICAgICAgICAgICAgfSwgewotICAgICAgICAgICAgICAgICAgbm9kZV9p bmZvOiB0cmVlSW5mbywKLSAgICAgICAgICAgICAgICB9KSwKLSAgICAgICAgICAgICAgICBmaWVs ZHMgPSBCYWNrZm9ybS5nZW5lcmF0ZVZpZXdTY2hlbWEoCi0gICAgICAgICAgICAgICAgICB0cmVl SW5mbywgbmV3TW9kZWwsICdjcmVhdGUnLCBub2RlLCB0cmVlSW5mby5zZXJ2ZXIsIHRydWUKLSAg ICAgICAgICAgICAgICApOwotCi0gICAgICAgICAgICAgIHZhciB2aWV3ID0gdGhpcy52aWV3ID0g bmV3IEJhY2tmb3JtLkRpYWxvZyh7Ci0gICAgICAgICAgICAgICAgZWw6ICRjb250YWluZXIsCi0g ICAgICAgICAgICAgICAgbW9kZWw6IG5ld01vZGVsLAotICAgICAgICAgICAgICAgIHNjaGVtYTog ZmllbGRzLAotICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgLy8gQWRkIG91ciBjbGFz cyB0byBhbGVydGlmeQotICAgICAgICAgICAgICAkKHRoaXMuZWxlbWVudHMuYm9keS5jaGlsZE5v ZGVzWzBdKS5hZGRDbGFzcygKLSAgICAgICAgICAgICAgICAnYWxlcnRpZnlfdG9vbHNfZGlhbG9n X3Byb3BlcnRpZXMgb2JqX3Byb3BlcnRpZXMnCi0gICAgICAgICAgICAgICk7Ci0gICAgICAgICAg ICAgIC8vIFJlbmRlciBkaWFsb2cKLSAgICAgICAgICAgICAgdmlldy5yZW5kZXIoKTsKLQotICAg ICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmNvbnRlbnQuYXBwZW5kQ2hpbGQoJGNvbnRhaW5lci5n ZXQoMCkpOwotCi0gICAgICAgICAgICAgIHZhciBjb250YWluZXIgPSB2aWV3LiRlbC5maW5kKCcu dGFiLWNvbnRlbnQ6Zmlyc3QgPiAudGFiLXBhbmUuYWN0aXZlOmZpcnN0Jyk7Ci0gICAgICAgICAg ICAgIGNvbW1vblV0aWxzLmZpbmRBbmRTZXRGb2N1cyhjb250YWluZXIpOwotCi0gICAgICAgICAg ICAgIC8vIExpc3RlbiB0byBtb2RlbCAmIGlmIGZpbGVuYW1lIGlzIHByb3ZpZGVkIHRoZW4gZW5h YmxlIEJhY2t1cCBidXR0b24KLSAgICAgICAgICAgICAgdGhpcy52aWV3Lm1vZGVsLm9uKCdjaGFu Z2UnLCBmdW5jdGlvbigpIHsKLSAgICAgICAgICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQodGhp cy5nZXQoJ2ZpbGUnKSkgJiYgdGhpcy5nZXQoJ2ZpbGUnKSAhPT0gJycpIHsKLSAgICAgICAgICAg ICAgICAgIHRoaXMuZXJyb3JNb2RlbC5jbGVhcigpOwotICAgICAgICAgICAgICAgICAgc2VsZi5f X2ludGVybmFsLmJ1dHRvbnNbMl0uZWxlbWVudC5kaXNhYmxlZCA9IGZhbHNlOwotICAgICAgICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICBzZWxmLl9faW50ZXJuYWwuYnV0dG9u c1syXS5lbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgIHRoaXMuZXJy b3JNb2RlbC5zZXQoJ2ZpbGUnLCBnZXR0ZXh0KCdQbGVhc2UgcHJvdmlkZSBhIGZpbGVuYW1lJykp OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9LAot ICAgICAgICAgICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb25zIHdoZW4gY2xpY2sgb24gdGhlIGJ1dHRv bnMgb2YgdGhlIEFsZXJ0aWZ5IGRpYWxvZ3MKLSAgICAgICAgICAgIGNhbGxiYWNrOiBmdW5jdGlv bihlKSB7Ci0gICAgICAgICAgICAgIC8vIEZldGNoIGN1cnJlbnQgc2VydmVyIGlkCi0gICAgICAg ICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsCi0gICAgICAgICAgICAgICAgaSA9IHQuc2Vs ZWN0ZWQoKSwKLSAgICAgICAgICAgICAgICBkID0gaSAmJiBpLmxlbmd0aCA9PSAxID8gdC5pdGVt RGF0YShpKSA6IHVuZGVmaW5lZCwKLSAgICAgICAgICAgICAgICBub2RlID0gZCAmJiBwZ0Jyb3dz ZXIuTm9kZXNbZC5fdHlwZV07Ci0KLSAgICAgICAgICAgICAgaWYgKGUuYnV0dG9uLmVsZW1lbnQu bmFtZSA9PSAnZGlhbG9nX2hlbHAnIHx8IGUuYnV0dG9uLmVsZW1lbnQubmFtZSA9PSAnb2JqZWN0 X2hlbHAnKSB7Ci0gICAgICAgICAgICAgICAgZS5jYW5jZWwgPSB0cnVlOwotICAgICAgICAgICAg ICAgIHBnQnJvd3Nlci5zaG93SGVscChlLmJ1dHRvbi5lbGVtZW50Lm5hbWUsIGUuYnV0dG9uLmVs ZW1lbnQuZ2V0QXR0cmlidXRlKCd1cmwnKSwKLSAgICAgICAgICAgICAgICAgIG5vZGUsIGksIGUu YnV0dG9uLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCdsYWJlbCcpKTsKLSAgICAgICAgICAgICAgICBy ZXR1cm47Ci0gICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICBpZiAoZS5idXR0b25bJ2Rh dGEtYnRuLW5hbWUnXSA9PT0gJ2JhY2t1cCcpIHsKLQotICAgICAgICAgICAgICAgIGlmICghZCkK LSAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIHZhciB0cmVlSW5m byA9IG5vZGUuZ2V0VHJlZU5vZGVIaWVyYXJjaHkuYXBwbHkobm9kZSwgW2ldKTsKLQotICAgICAg ICAgICAgICAgIHZhciBzZWxmID0gdGhpcywKLSAgICAgICAgICAgICAgICAgIGJhc2VVcmwgPSB1 cmxfZm9yKCdiYWNrdXAuY3JlYXRlX3NlcnZlcl9qb2InLCB7Ci0gICAgICAgICAgICAgICAgICAg ICdzaWQnOiB0cmVlSW5mby5zZXJ2ZXIuX2lkLAotICAgICAgICAgICAgICAgICAgfSksCi0gICAg ICAgICAgICAgICAgICBhcmdzID0gdGhpcy52aWV3Lm1vZGVsLnRvSlNPTigpOwotCi0gICAgICAg ICAgICAgICAgJC5hamF4KHsKLSAgICAgICAgICAgICAgICAgIHVybDogYmFzZVVybCwKLSAgICAg ICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAotICAgICAgICAgICAgICAgICAgZGF0YTogewot ICAgICAgICAgICAgICAgICAgICAnZGF0YSc6IEpTT04uc3RyaW5naWZ5KGFyZ3MpLAotICAgICAg ICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykg ewotICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MpIHsKLSAgICAgICAgICAgICAg ICAgICAgICBhbGVydGlmeS5zdWNjZXNzKGdldHRleHQoJ0JhY2t1cCBqb2IgY3JlYXRlZC4nKSwg NSk7Ci0gICAgICAgICAgICAgICAgICAgICAgcGdCcm93c2VyLkV2ZW50cy50cmlnZ2VyKCdwZ2Fk bWluLWJncHJvY2VzczpjcmVhdGVkJywgc2VsZik7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKHJlcyk7Ci0gICAgICAgICAg ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICBlcnJv cjogZnVuY3Rpb24oeGhyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAg ICAgICAgICAgICAgdmFyIGVyciA9ICQucGFyc2VKU09OKHhoci5yZXNwb25zZVRleHQpOwotICAg ICAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KAotICAgICAgICAgICAgICAgICAgICAg ICAgZ2V0dGV4dCgnQmFja3VwIGpvYiBmYWlsZWQuJyksCi0gICAgICAgICAgICAgICAgICAgICAg ICBlcnIuZXJyb3Jtc2cKLSAgICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAg ICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGUu c3RhY2sgfHwgZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgIH0s Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0sCi0g ICAgICAgICAgfTsKLSAgICAgICAgfSk7Ci0gICAgICB9Ci0gICAgICBhbGVydGlmeVtEaWFsb2dO YW1lXSh0cnVlKS5yZXNpemVUbygnNjAlJywgJzUwJScpOworICAgIHN0YXJ0X2JhY2t1cF9nbG9i YWxfc2VydmVyOiBmdW5jdGlvbihhY3Rpb24sIHRyZWVJdGVtLCBwYXJhbXMpIHsKKyAgICAgIGxl dCBkaWFsb2cgPSBuZXcgZ2xvYmFsQmFja3VwRGlhbG9nLkJhY2t1cERpYWxvZygKKyAgICAgICAg cGdCcm93c2VyLAorICAgICAgICAkLAorICAgICAgICBhbGVydGlmeSwKKyAgICAgICAgQmFja3Vw TW9kZWwKKyAgICAgICk7CisgICAgICBkaWFsb2cuZHJhdyhhY3Rpb24sIHRyZWVJdGVtLCBwYXJh bXMpOwogICAgIH0sCiAKICAgICAvLyBDYWxsYmFjayB0byBkcmF3IEJhY2t1cCBEaWFsb2cgZm9y IG9iamVjdHMKICAgICBiYWNrdXBfb2JqZWN0czogZnVuY3Rpb24oYWN0aW9uLCB0cmVlSXRlbSkg ewotCi0gICAgICB2YXIgaSA9IHRyZWVJdGVtIHx8IHBnQnJvd3Nlci50cmVlLnNlbGVjdGVkKCks Ci0gICAgICAgIHNlcnZlcl9kYXRhID0gbnVsbDsKLQotICAgICAgd2hpbGUgKGkpIHsKLSAgICAg ICAgdmFyIG5vZGVfZGF0YSA9IHBnQnJvd3Nlci50cmVlLml0ZW1EYXRhKGkpOwotICAgICAgICBp ZiAobm9kZV9kYXRhLl90eXBlID09ICdzZXJ2ZXInKSB7Ci0gICAgICAgICAgc2VydmVyX2RhdGEg PSBub2RlX2RhdGE7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo cGdCcm93c2VyLnRyZWUuaGFzUGFyZW50KGkpKSB7Ci0gICAgICAgICAgaSA9ICQocGdCcm93c2Vy LnRyZWUucGFyZW50KGkpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBhbGVydGlmeS5h bGVydCgKLSAgICAgICAgICAgIGdldHRleHQoJ0JhY2t1cCBFcnJvcicpLAotICAgICAgICAgICAg Z2V0dGV4dCgnUGxlYXNlIHNlbGVjdCBzZXJ2ZXIgb3IgY2hpbGQgbm9kZSBmcm9tIHRyZWUuJykK LSAgICAgICAgICApOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICB9Ci0KLSAg ICAgIGlmICghc2VydmVyX2RhdGEpIHsKLSAgICAgICAgcmV0dXJuOwotICAgICAgfQotCi0gICAg ICB2YXIgbW9kdWxlID0gJ3BhdGhzJywKLSAgICAgICAgcHJlZmVyZW5jZV9uYW1lID0gJ3BnX2Jp bl9kaXInLAotICAgICAgICBtc2cgPSBnZXR0ZXh0KCdQbGVhc2Ugc2V0IGJpbmFyeSBwYXRoIGZv ciBQb3N0Z3JlU1FMIFNlcnZlciBmcm9tIHByZWZlcmVuY2VzLicpOwotCi0gICAgICBpZiAoKHNl cnZlcl9kYXRhLnR5cGUgJiYgc2VydmVyX2RhdGEudHlwZSA9PSAncHBhcycpIHx8Ci0gICAgICAg IHNlcnZlcl9kYXRhLnNlcnZlcl90eXBlID09ICdwcGFzJykgewotICAgICAgICBwcmVmZXJlbmNl X25hbWUgPSAncHBhc19iaW5fZGlyJzsKLSAgICAgICAgbXNnID0gZ2V0dGV4dCgnUGxlYXNlIHNl dCBiaW5hcnkgcGF0aCBmb3IgRURCIFBvc3RncmVzIEFkdmFuY2VkIFNlcnZlciBmcm9tIHByZWZl cmVuY2VzLicpOwotICAgICAgfQotCi0gICAgICB2YXIgcHJlZmVyZW5jZSA9IHBnQnJvd3Nlci5n ZXRfcHJlZmVyZW5jZShtb2R1bGUsIHByZWZlcmVuY2VfbmFtZSk7Ci0KLSAgICAgIGlmIChwcmVm ZXJlbmNlKSB7Ci0gICAgICAgIGlmICghcHJlZmVyZW5jZS52YWx1ZSkgewotICAgICAgICAgIGFs ZXJ0aWZ5LmFsZXJ0KGdldHRleHQoJ0NvbmZpZ3VyYXRpb24gcmVxdWlyZWQnKSwgbXNnKTsKLSAg ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgIH0gZWxzZSB7Ci0gICAgICAgIGFsZXJ0 aWZ5LmFsZXJ0KAotICAgICAgICAgIGdldHRleHQoJ0JhY2t1cCBFcnJvcicpLAotICAgICAgICAg IFMoZ2V0dGV4dCgnRmFpbGVkIHRvIGxvYWQgcHJlZmVyZW5jZSAlcyBvZiBtb2R1bGUgJXMnKSku c3ByaW50ZihwcmVmZXJlbmNlX25hbWUsIG1vZHVsZSkudmFsdWUoKQotICAgICAgICApOwotICAg ICAgICByZXR1cm47Ci0gICAgICB9Ci0KLSAgICAgIHZhciB0aXRsZSA9IFMoZ2V0dGV4dCgnQmFj a3VwICglczogJXMpJykpLAotICAgICAgICB0cmVlID0gcGdCcm93c2VyLnRyZWUsCi0gICAgICAg IGl0ZW0gPSB0cmVlSXRlbSB8fCB0cmVlLnNlbGVjdGVkKCksCi0gICAgICAgIGRhdGEgPSBpdGVt ICYmIGl0ZW0ubGVuZ3RoID09IDEgJiYgdHJlZS5pdGVtRGF0YShpdGVtKSwKLSAgICAgICAgbm9k ZSA9IGRhdGEgJiYgZGF0YS5fdHlwZSAmJiBwZ0Jyb3dzZXIuTm9kZXNbZGF0YS5fdHlwZV07Ci0K LSAgICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgICB0aXRsZSA9IHRpdGxl LnNwcmludGYobm9kZS5sYWJlbCwgZGF0YS5sYWJlbCkudmFsdWUoKTsKLQotICAgICAgaWYgKCFh bGVydGlmeS5iYWNrdXBfb2JqZWN0cykgewotICAgICAgICAvLyBDcmVhdGUgRGlhbG9nIHRpdGxl IG9uIHRoZSBmbHkgd2l0aCBub2RlIGRldGFpbHMKLSAgICAgICAgYWxlcnRpZnkuZGlhbG9nKCdi YWNrdXBfb2JqZWN0cycsIGZ1bmN0aW9uIGZhY3RvcnkoKSB7Ci0gICAgICAgICAgcmV0dXJuIHsK LSAgICAgICAgICAgIG1haW46IGZ1bmN0aW9uKHRpdGxlKSB7Ci0gICAgICAgICAgICAgIHRoaXMu c2V0KCd0aXRsZScsIHRpdGxlKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBidWlsZDog ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgIGFsZXJ0aWZ5LnBnRGlhbG9nQnVpbGQuYXBwbHko dGhpcyk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9uKCkgewot ICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFt7Ci0gICAg ICAgICAgICAgICAgICB0ZXh0OiAnJywKLSAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0 biBidG4tZGVmYXVsdCBwdWxsLWxlZnQgZmEgZmEtbGcgZmEtaW5mbycsCi0gICAgICAgICAgICAg ICAgICBhdHRyczogewotICAgICAgICAgICAgICAgICAgICBuYW1lOiAnb2JqZWN0X2hlbHAnLAot ICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJywKLSAgICAgICAgICAgICAgICAgICAg dXJsOiAnYmFja3VwLmh0bWwnLAotICAgICAgICAgICAgICAgICAgICBsYWJlbDogZ2V0dGV4dCgn QmFja3VwJyksCi0gICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgIH0sIHsKLSAg ICAgICAgICAgICAgICAgIHRleHQ6ICcnLAotICAgICAgICAgICAgICAgICAga2V5OiAxMTIsCi0g ICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdidG4gYnRuLWRlZmF1bHQgcHVsbC1sZWZ0IGZh IGZhLWxnIGZhLXF1ZXN0aW9uJywKLSAgICAgICAgICAgICAgICAgIGF0dHJzOiB7Ci0gICAgICAg ICAgICAgICAgICAgIG5hbWU6ICdkaWFsb2dfaGVscCcsCi0gICAgICAgICAgICAgICAgICAgIHR5 cGU6ICdidXR0b24nLAotICAgICAgICAgICAgICAgICAgICBsYWJlbDogZ2V0dGV4dCgnQmFja3Vw JyksCi0gICAgICAgICAgICAgICAgICAgIHVybDogdXJsX2ZvcignaGVscC5zdGF0aWMnLCB7Ci0g ICAgICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJzogJ2JhY2t1cF9kaWFsb2cuaHRtbCcsCi0g ICAgICAgICAgICAgICAgICAgIH0pLAotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAg ICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdCYWNrdXAnKSwKLSAg ICAgICAgICAgICAgICAgIGtleTogMTMsCi0gICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdi dG4gYnRuLXByaW1hcnkgZmEgZmEtbGcgZmEtc2F2ZSBwZy1hbGVydGlmeS1idXR0b24nLAotICAg ICAgICAgICAgICAgICAgJ2RhdGEtYnRuLW5hbWUnOiAnYmFja3VwJywKLSAgICAgICAgICAgICAg ICB9LCB7Ci0gICAgICAgICAgICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdDYW5jZWwnKSwKLSAgICAg ICAgICAgICAgICAgIGtleTogMjcsCi0gICAgICAgICAgICAgICAgICBjbGFzc05hbWU6ICdidG4g YnRuLWRhbmdlciBmYSBmYS1sZyBmYS10aW1lcyBwZy1hbGVydGlmeS1idXR0b24nLAotICAgICAg ICAgICAgICAgICAgJ2RhdGEtYnRuLW5hbWUnOiAnY2FuY2VsJywKLSAgICAgICAgICAgICAgICB9 XSwKLSAgICAgICAgICAgICAgICAvLyBTZXQgb3B0aW9ucyBmb3IgZGlhbG9nCi0gICAgICAgICAg ICAgICAgb3B0aW9uczogewotICAgICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLAotICAgICAg ICAgICAgICAgICAgLy9kaXNhYmxlIGJvdGggcGFkZGluZyBhbmQgb3ZlcmZsb3cgY29udHJvbC4K LSAgICAgICAgICAgICAgICAgIHBhZGRpbmc6ICExLAotICAgICAgICAgICAgICAgICAgb3ZlcmZs b3c6ICExLAotICAgICAgICAgICAgICAgICAgbW9kZWw6IDAsCi0gICAgICAgICAgICAgICAgICBy ZXNpemFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgICBtYXhpbWl6YWJsZTogdHJ1ZSwKLSAg ICAgICAgICAgICAgICAgIHBpbm5hYmxlOiBmYWxzZSwKLSAgICAgICAgICAgICAgICAgIGNsb3Nh YmxlQnlEaW1tZXI6IGZhbHNlLAotICAgICAgICAgICAgICAgICAgbW9kYWw6IGZhbHNlLAotICAg ICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgIH07Ci0gICAgICAgICAgICB9LAotICAgICAg ICAgICAgaG9va3M6IHsKLSAgICAgICAgICAgICAgLy8gdHJpZ2dlcmVkIHdoZW4gdGhlIGRpYWxv ZyBpcyBjbG9zZWQKLSAgICAgICAgICAgICAgb25jbG9zZTogZnVuY3Rpb24oKSB7Ci0gICAgICAg ICAgICAgICAgaWYgKHRoaXMudmlldykgewotICAgICAgICAgICAgICAgICAgdGhpcy52aWV3LnJl bW92ZSh7Ci0gICAgICAgICAgICAgICAgICAgIGRhdGE6IHRydWUsCi0gICAgICAgICAgICAgICAg ICAgIGludGVybmFsOiB0cnVlLAotICAgICAgICAgICAgICAgICAgICBzaWxlbnQ6IHRydWUsCi0g ICAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0s Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgcHJlcGFyZTogZnVuY3Rpb24oKSB7Ci0gICAg ICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKLSAgICAgICAgICAgICAgLy8gRGlzYWJsZSBCYWNr dXAgYnV0dG9uIHVudGlsIHVzZXIgcHJvdmlkZXMgRmlsZW5hbWUKLSAgICAgICAgICAgICAgdGhp cy5fX2ludGVybmFsLmJ1dHRvbnNbMl0uZWxlbWVudC5kaXNhYmxlZCA9IHRydWU7Ci0gICAgICAg ICAgICAgIHZhciAkY29udGFpbmVyID0gJCgnPGRpdiBjbGFzcz1cJ2JhY2t1cF9kaWFsb2dcJz48 L2Rpdj4nKTsKLSAgICAgICAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwKLSAgICAgICAg ICAgICAgICBpID0gdC5zZWxlY3RlZCgpLAotICAgICAgICAgICAgICAgIGQgPSBpICYmIGkubGVu Z3RoID09IDEgPyB0Lml0ZW1EYXRhKGkpIDogdW5kZWZpbmVkLAotICAgICAgICAgICAgICAgIG5v ZGUgPSBkICYmIHBnQnJvd3Nlci5Ob2Rlc1tkLl90eXBlXTsKLQotICAgICAgICAgICAgICBpZiAo IWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgICAgICAgIHZhciB0cmVlSW5m byA9IG5vZGUuZ2V0VHJlZU5vZGVIaWVyYXJjaHkuYXBwbHkobm9kZSwgW2ldKTsKLQotICAgICAg ICAgICAgICB2YXIgbmV3TW9kZWwgPSBuZXcgQmFja3VwT2JqZWN0TW9kZWwoe30sIHsKLSAgICAg ICAgICAgICAgICAgIG5vZGVfaW5mbzogdHJlZUluZm8sCi0gICAgICAgICAgICAgICAgfSksCi0g ICAgICAgICAgICAgICAgZmllbGRzID0gQmFja2Zvcm0uZ2VuZXJhdGVWaWV3U2NoZW1hKAotICAg ICAgICAgICAgICAgICAgdHJlZUluZm8sIG5ld01vZGVsLCAnY3JlYXRlJywgbm9kZSwgdHJlZUlu Zm8uc2VydmVyLCB0cnVlCi0gICAgICAgICAgICAgICAgKTsKLQotICAgICAgICAgICAgICB2YXIg dmlldyA9IHRoaXMudmlldyA9IG5ldyBCYWNrZm9ybS5EaWFsb2coewotICAgICAgICAgICAgICAg IGVsOiAkY29udGFpbmVyLAotICAgICAgICAgICAgICAgIG1vZGVsOiBuZXdNb2RlbCwKLSAgICAg ICAgICAgICAgICBzY2hlbWE6IGZpZWxkcywKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAg ICAgICAgJCh0aGlzLmVsZW1lbnRzLmJvZHkuY2hpbGROb2Rlc1swXSkuYWRkQ2xhc3MoCi0gICAg ICAgICAgICAgICAgJ2FsZXJ0aWZ5X3Rvb2xzX2RpYWxvZ19wcm9wZXJ0aWVzIG9ial9wcm9wZXJ0 aWVzJwotICAgICAgICAgICAgICApOwotCi0gICAgICAgICAgICAgIHZpZXcucmVuZGVyKCk7Ci0K LSAgICAgICAgICAgICAgdGhpcy5lbGVtZW50cy5jb250ZW50LmFwcGVuZENoaWxkKCRjb250YWlu ZXIuZ2V0KDApKTsKLQotICAgICAgICAgICAgICBpZih2aWV3KSB7Ci0gICAgICAgICAgICAgICAg dmlldy4kZWwuYXR0cigndGFiaW5kZXgnLCAtMSk7Ci0gICAgICAgICAgICAgICAgLy8gdmFyIGRp YWxvZ1RhYk5hdmlnYXRvciA9IHBnQnJvd3Nlci5rZXlib2FyZE5hdmlnYXRpb24uZ2V0RGlhbG9n VGFiTmF2aWdhdG9yKHZpZXcpOwotICAgICAgICAgICAgICAgIHBnQnJvd3Nlci5rZXlib2FyZE5h dmlnYXRpb24uZ2V0RGlhbG9nVGFiTmF2aWdhdG9yKHZpZXcpOwotICAgICAgICAgICAgICAgIHZh ciBjb250YWluZXIgPSB2aWV3LiRlbC5maW5kKCcudGFiLWNvbnRlbnQ6Zmlyc3QgPiAudGFiLXBh bmUuYWN0aXZlOmZpcnN0Jyk7Ci0gICAgICAgICAgICAgICAgY29tbW9uVXRpbHMuZmluZEFuZFNl dEZvY3VzKGNvbnRhaW5lcik7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgLy8gTGlz dGVuIHRvIG1vZGVsICYgaWYgZmlsZW5hbWUgaXMgcHJvdmlkZWQgdGhlbiBlbmFibGUgQmFja3Vw IGJ1dHRvbgotICAgICAgICAgICAgICB0aGlzLnZpZXcubW9kZWwub24oJ2NoYW5nZScsIGZ1bmN0 aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLmdldCgnZmls ZScpKSAmJiB0aGlzLmdldCgnZmlsZScpICE9PSAnJykgewotICAgICAgICAgICAgICAgICAgdGhp cy5lcnJvck1vZGVsLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICBzZWxmLl9faW50ZXJuYWwu YnV0dG9uc1syXS5lbGVtZW50LmRpc2FibGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBl bHNlIHsKLSAgICAgICAgICAgICAgICAgIHNlbGYuX19pbnRlcm5hbC5idXR0b25zWzJdLmVsZW1l bnQuZGlzYWJsZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNl dCgnZmlsZScsIGdldHRleHQoJ1BsZWFzZSBwcm92aWRlIGZpbGVuYW1lJykpOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAg ICAvLyBDYWxsYmFjayBmdW5jdGlvbnMgd2hlbiBjbGljayBvbiB0aGUgYnV0dG9ucyBvZiB0aGUg QWxlcnRpZnkgZGlhbG9ncwotICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKGUpIHsKLSAg ICAgICAgICAgICAgLy8gRmV0Y2ggY3VycmVudCBzZXJ2ZXIgaWQKLSAgICAgICAgICAgICAgdmFy IHQgPSBwZ0Jyb3dzZXIudHJlZSwKLSAgICAgICAgICAgICAgICBpID0gdC5zZWxlY3RlZCgpLAot ICAgICAgICAgICAgICAgIGQgPSBpICYmIGkubGVuZ3RoID09IDEgPyB0Lml0ZW1EYXRhKGkpIDog dW5kZWZpbmVkLAotICAgICAgICAgICAgICAgIG5vZGUgPSBkICYmIHBnQnJvd3Nlci5Ob2Rlc1tk Ll90eXBlXTsKLQotICAgICAgICAgICAgICBpZiAoZS5idXR0b24uZWxlbWVudC5uYW1lID09ICdk aWFsb2dfaGVscCcgfHwgZS5idXR0b24uZWxlbWVudC5uYW1lID09ICdvYmplY3RfaGVscCcpIHsK LSAgICAgICAgICAgICAgICBlLmNhbmNlbCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcGdCcm93 c2VyLnNob3dIZWxwKGUuYnV0dG9uLmVsZW1lbnQubmFtZSwgZS5idXR0b24uZWxlbWVudC5nZXRB dHRyaWJ1dGUoJ3VybCcpLAotICAgICAgICAgICAgICAgICAgbm9kZSwgaSwgZS5idXR0b24uZWxl bWVudC5nZXRBdHRyaWJ1dGUoJ2xhYmVsJykpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAg ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgIGlmIChlLmJ1dHRvblsnZGF0YS1idG4tbmFt ZSddID09PSAnYmFja3VwJykgewotICAgICAgICAgICAgICAgIGlmICghZCkKLSAgICAgICAgICAg ICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgIHZhciB0cmVlSW5mbyA9IG5vZGUuZ2V0 VHJlZU5vZGVIaWVyYXJjaHkuYXBwbHkobm9kZSwgW2ldKTsKLQotICAgICAgICAgICAgICAgIC8v IFNldCBjdXJyZW50IGRhdGFiYXNlIGludG8gbW9kZWwKLSAgICAgICAgICAgICAgICB0aGlzLnZp ZXcubW9kZWwuc2V0KCdkYXRhYmFzZScsIHRyZWVJbmZvLmRhdGFiYXNlLl9sYWJlbCk7Ci0KLSAg ICAgICAgICAgICAgICAvLyBXZSB3aWxsIHJlbW92ZSBvbmNlIG9iamVjdCB0cmVlIGlzIGltcGxl bWVudGVkCi0gICAgICAgICAgICAgICAgLy8gSWYgc2VsZWN0ZWQgbm9kZSBpcyBTY2hlbWEgdGhl biBhZGQgaXQgaW4gbW9kZWwKLSAgICAgICAgICAgICAgICBpZiAoZC5fdHlwZSA9PSAnc2NoZW1h JykgewotICAgICAgICAgICAgICAgICAgdmFyIHNjaGVtYXMgPSBbXTsKLSAgICAgICAgICAgICAg ICAgIHNjaGVtYXMucHVzaChkLl9sYWJlbCk7Ci0gICAgICAgICAgICAgICAgICB0aGlzLnZpZXcu bW9kZWwuc2V0KCdzY2hlbWFzJywgc2NoZW1hcyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgIC8vIElmIHNlbGVjdGVkIG5vZGUgaXMgVGFibGUgdGhlbiBhZGQgaXQgaW4gbW9k ZWwgYWxvbmcgd2l0aAotICAgICAgICAgICAgICAgIC8vIGl0cyBzY2hlbWEKLSAgICAgICAgICAg ICAgICBpZiAoZC5fdHlwZSA9PSAndGFibGUnKSB7Ci0gICAgICAgICAgICAgICAgICB0aGlzLnZp ZXcubW9kZWwuc2V0KAotICAgICAgICAgICAgICAgICAgICAndGFibGVzJywgWwotICAgICAgICAg ICAgICAgICAgICAgIFt0cmVlSW5mby5zY2hlbWEuX2xhYmVsLCBkLl9sYWJlbF0sCi0gICAgICAg ICAgICAgICAgICAgIF0KLSAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgfQot Ci0gICAgICAgICAgICAgICAgLy8gUmVtb3ZlIHJhdGlvIGF0dHJpYnV0ZSBmcm9tIG1vZGVsIGlm IGl0IGhhcyBlbXB0eSBzdHJpbmcuCi0gICAgICAgICAgICAgICAgLy8gVGhlIHZhbGlkIHZhbHVl IGNhbiBiZSBiZXR3ZWVuIDAgdG8gOS4KLSAgICAgICAgICAgICAgICBpZiAoXy5pc0VtcHR5KHRo aXMudmlldy5tb2RlbC5nZXQoJ3JhdGlvJykpKSB7Ci0gICAgICAgICAgICAgICAgICB0aGlzLnZp ZXcubW9kZWwudW5zZXQoJ3JhdGlvJyk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg ICAgICAgdmFyIHNlbGYgPSB0aGlzLAotICAgICAgICAgICAgICAgICAgYmFzZVVybCA9IHVybF9m b3IoJ2JhY2t1cC5jcmVhdGVfb2JqZWN0X2pvYicsIHsKLSAgICAgICAgICAgICAgICAgICAgJ3Np ZCc6IHRyZWVJbmZvLnNlcnZlci5faWQsCi0gICAgICAgICAgICAgICAgICB9KSwKLSAgICAgICAg ICAgICAgICAgIGFyZ3MgPSB0aGlzLnZpZXcubW9kZWwudG9KU09OKCk7Ci0KLSAgICAgICAgICAg ICAgICAkLmFqYXgoewotICAgICAgICAgICAgICAgICAgdXJsOiBiYXNlVXJsLAotICAgICAgICAg ICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCi0gICAgICAgICAgICAgICAgICBkYXRhOiB7Ci0gICAg ICAgICAgICAgICAgICAgICdkYXRhJzogSlNPTi5zdHJpbmdpZnkoYXJncyksCi0gICAgICAgICAg ICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKSB7Ci0g ICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcykgewotICAgICAgICAgICAgICAgICAg ICAgIGFsZXJ0aWZ5LnN1Y2Nlc3MoZ2V0dGV4dCgnQmFja3VwIGpvYiBjcmVhdGVkLicpLCA1KTsK LSAgICAgICAgICAgICAgICAgICAgICBwZ0Jyb3dzZXIuRXZlbnRzLnRyaWdnZXIoJ3BnYWRtaW4t Ymdwcm9jZXNzOmNyZWF0ZWQnLCBzZWxmKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg ICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIpIHsK LSAgICAgICAgICAgICAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJy ID0gJC5wYXJzZUpTT04oeGhyLnJlc3BvbnNlVGV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAg YWxlcnRpZnkuYWxlcnQoCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXR0ZXh0KCdCYWNrdXAg am9iIGZhaWxlZC4nKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGVyci5lcnJvcm1zZwotICAg ICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsK LSAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZS5zdGFjayB8fCBlKTsKLSAgICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB9 KTsKLSAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSwKLSAgICAgICAgICB9OwotICAgICAg ICB9KTsKLSAgICAgIH0KLSAgICAgIGFsZXJ0aWZ5LmJhY2t1cF9vYmplY3RzKHRpdGxlKS5yZXNp emVUbygnNjUlJywgJzYwJScpOworICAgICAgbGV0IGRpYWxvZyA9IG5ldyBnbG9iYWxCYWNrdXBE aWFsb2cuQmFja3VwRGlhbG9nKAorICAgICAgICBwZ0Jyb3dzZXIsCisgICAgICAgICQsCisgICAg ICAgIGFsZXJ0aWZ5LAorICAgICAgICBCYWNrdXBPYmplY3RNb2RlbAorICAgICAgKTsKKyAgICAg IGRpYWxvZy5kcmF3KGFjdGlvbiwgdHJlZUl0ZW0sIG51bGwpOwogICAgIH0sCiAgIH07CiAgIHJl dHVybiBwZ0Jyb3dzZXIuQmFja3VwOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGF0 YWdyaWQvc3RhdGljL2pzL2RhdGFncmlkLmpzIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGF0YWdyaWQv c3RhdGljL2pzL2RhdGFncmlkLmpzCmluZGV4IGIwZWQ2MGY2Li5mOGIyY2ZhMiAxMDA2NDQKLS0t IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGF0YWdyaWQvc3RhdGljL2pzL2RhdGFncmlkLmpzCisrKyBi L3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlkL3N0YXRpYy9qcy9kYXRhZ3JpZC5qcwpAQCAtMSwx MCArMSwxMyBAQAogZGVmaW5lKCdwZ2FkbWluLmRhdGFncmlkJywgWwogICAnc291cmNlcy9nZXR0 ZXh0JywgJ3NvdXJjZXMvdXJsX2ZvcicsICdqcXVlcnknLCAndW5kZXJzY29yZScsCiAgICdwZ2Fk bWluLmFsZXJ0aWZ5anMnLCAnc291cmNlcy9wZ2FkbWluJywgJ2J1bmRsZWRfY29kZW1pcnJvcics Ci0gICdzb3VyY2VzL3NxbGVkaXRvcl91dGlscycsICdiYWNrYm9uZScsICd3Y2RvY2tlcicsCisg ICdzb3VyY2VzL3NxbGVkaXRvcl91dGlscycsICdiYWNrYm9uZScsICdzb3VyY2VzL2RhdGFncmlk L3Nob3dfZGF0YScsCisgICdzb3VyY2VzL2RhdGFncmlkL2dldF9wYW5lbF90aXRsZScsCisgICdz b3VyY2VzL2RhdGFncmlkL3Nob3dfcXVlcnlfdG9vbCcsCisgICd3Y2RvY2tlcicsCiBdLCBmdW5j dGlvbigKICAgZ2V0dGV4dCwgdXJsX2ZvciwgJCwgXywgYWxlcnRpZnksIHBnQWRtaW4sIGNvZGVt aXJyb3IsIHNxbEVkaXRvclV0aWxzLAotICBCYWNrYm9uZQorICBCYWNrYm9uZSwgc2hvd0RhdGEs IHBhbmVsVGl0bGUsIHNob3dRdWVyeVRvb2wKICkgewogICAvLyBTb21lIHNjcmlwdHMgZG8gZXhw b3J0IHRoZWlyIG9iamVjdCBpbiB0aGUgd2luZG93IG9ubHkuCiAgIC8vIEdlbmVyYWxseSB0aGUg b25lLCB3aGljaCBkbyBubyBoYXZlIEFNRCBzdXBwb3J0LgpAQCAtMTYxLDU1ICsxNjQsNyBAQCBk ZWZpbmUoJ3BnYWRtaW4uZGF0YWdyaWQnLCBbCiAKICAgICAgIC8vIFRoaXMgaXMgYSBjYWxsYmFj ayBmdW5jdGlvbiB0byBzaG93IGRhdGEgd2hlbiB1c2VyIGNsaWNrIG9uIG1lbnUgaXRlbS4KICAg ICAgIHNob3dfZGF0YV9ncmlkOiBmdW5jdGlvbihkYXRhLCBpKSB7Ci0gICAgICAgIHZhciBzZWxm ID0gdGhpcywKLSAgICAgICAgICBkID0gcGdBZG1pbi5Ccm93c2VyLnRyZWUuaXRlbURhdGEoaSk7 Ci0gICAgICAgIGlmIChkID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICBhbGVydGlmeS5hbGVy dCgKLSAgICAgICAgICAgIGdldHRleHQoJ0RhdGEgR3JpZCBFcnJvcicpLAotICAgICAgICAgICAg Z2V0dGV4dCgnTm8gb2JqZWN0IHNlbGVjdGVkLicpCi0gICAgICAgICAgKTsKLSAgICAgICAgICBy ZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBHZXQgdGhlIHBhcmVudCBkYXRhIGZyb20g dGhlIHRyZWUgbm9kZSBoaWVyYXJjaHkuCi0gICAgICAgIHZhciBub2RlID0gcGdCcm93c2VyLk5v ZGVzW2QuX3R5cGVdLAotICAgICAgICAgIHBhcmVudERhdGEgPSBub2RlLmdldFRyZWVOb2RlSGll cmFyY2h5KGkpOwotCi0gICAgICAgIC8vIElmIHNlcnZlciwgZGF0YWJhc2Ugb3Igc2NoZW1hIGlz IHVuZGVmaW5lZCB0aGVuIHJldHVybiBmcm9tIHRoZSBmdW5jdGlvbi4KLSAgICAgICAgaWYgKHBh cmVudERhdGEuc2VydmVyID09PSB1bmRlZmluZWQgfHwgcGFyZW50RGF0YS5kYXRhYmFzZSA9PT0g dW5kZWZpbmVkKSB7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIC8vIElm IHNjaGVtYSwgdmlldywgY2F0YWxvZyBvYmplY3QgYWxsIGFyZSB1bmRlZmluZWQgdGhlbiByZXR1 cm4gZnJvbSB0aGUgZnVuY3Rpb24uCi0gICAgICAgIGlmIChwYXJlbnREYXRhLnNjaGVtYSA9PT0g dW5kZWZpbmVkICYmIHBhcmVudERhdGEudmlldyA9PT0gdW5kZWZpbmVkICYmCi0gICAgICAgICAg ICAgcGFyZW50RGF0YS5jYXRhbG9nID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICByZXR1cm47 Ci0gICAgICAgIH0KLQotICAgICAgICB2YXIgbnNwX25hbWUgPSAnJzsKLQotICAgICAgICBpZiAo cGFyZW50RGF0YS5zY2hlbWEgIT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgbnNwX25hbWUgPSBw YXJlbnREYXRhLnNjaGVtYS5sYWJlbDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChwYXJl bnREYXRhLnZpZXcgIT0gdW5kZWZpbmVkKSB7Ci0gICAgICAgICAgbnNwX25hbWUgPSBwYXJlbnRE YXRhLnZpZXcubGFiZWw7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSBpZiAocGFyZW50RGF0YS5j YXRhbG9nICE9IHVuZGVmaW5lZCkgewotICAgICAgICAgIG5zcF9uYW1lID0gcGFyZW50RGF0YS5j YXRhbG9nLmxhYmVsOwotICAgICAgICB9Ci0gICAgICAgIHZhciB1cmxfcGFyYW1zID0gewotICAg ICAgICAgICdjbWRfdHlwZSc6IGRhdGEubW51aWQsCi0gICAgICAgICAgJ29ial90eXBlJzogZC5f dHlwZSwKLSAgICAgICAgICAnc2dpZCc6IHBhcmVudERhdGEuc2VydmVyX2dyb3VwLl9pZCwKLSAg ICAgICAgICAnc2lkJzogcGFyZW50RGF0YS5zZXJ2ZXIuX2lkLAotICAgICAgICAgICdkaWQnOiBw YXJlbnREYXRhLmRhdGFiYXNlLl9pZCwKLSAgICAgICAgICAnb2JqX2lkJzogZC5faWQsCi0gICAg ICAgIH07Ci0KLSAgICAgICAgdmFyIGJhc2VVcmwgPSB1cmxfZm9yKCdkYXRhZ3JpZC5pbml0aWFs aXplX2RhdGFncmlkJywgdXJsX3BhcmFtcyk7Ci0gICAgICAgIHZhciBncmlkX3RpdGxlID0gcGFy ZW50RGF0YS5zZXJ2ZXIubGFiZWwgKyAnIC0gJyArIHBhcmVudERhdGEuZGF0YWJhc2UubGFiZWwg KyAnIC0gJwotICAgICAgICAgICAgICAgICAgICAgICAgKyBuc3BfbmFtZSArICcuJyArIGQubGFi ZWw7Ci0KLSAgICAgICAgc2VsZi5jcmVhdGVfdHJhbnNhY3Rpb24oYmFzZVVybCwgbnVsbCwgJ2Zh bHNlJywgcGFyZW50RGF0YS5zZXJ2ZXIuc2VydmVyX3R5cGUsICcnLCBncmlkX3RpdGxlLCAnJyk7 CisgICAgICAgIHNob3dEYXRhLnNob3dEYXRhR3JpZCh0aGlzLCBwZ0Jyb3dzZXIsIGFsZXJ0aWZ5 LCBkYXRhLCBpKTsKICAgICAgIH0sCiAKICAgICAgIC8vIFRoaXMgaXMgYSBjYWxsYmFjayBmdW5j dGlvbiB0byBzaG93IGZpbHRlcmVkIGRhdGEgd2hlbiB1c2VyIGNsaWNrIG9uIG1lbnUgaXRlbS4K QEAgLTM4NCw2MyArMzM5LDEyIEBAIGRlZmluZSgncGdhZG1pbi5kYXRhZ3JpZCcsIFsKICAgICAg IH0sCiAKICAgICAgIGdldF9wYW5lbF90aXRsZTogZnVuY3Rpb24oKSB7Ci0gICAgICAgIC8vIEdl dCB0aGUgcGFyZW50IGRhdGEgZnJvbSB0aGUgdHJlZSBub2RlIGhpZXJhcmNoeS4KLSAgICAgICAg dmFyIHRyZWUgPSBwZ0FkbWluLkJyb3dzZXIudHJlZSwKLSAgICAgICAgICBzZWxlY3RlZF9pdGVt ID0gdHJlZS5zZWxlY3RlZCgpLAotICAgICAgICAgIGl0ZW1fZGF0YSA9IHRyZWUuaXRlbURhdGEo c2VsZWN0ZWRfaXRlbSk7Ci0KLSAgICAgICAgdmFyIG5vZGUgPSBwZ0Jyb3dzZXIuTm9kZXNbaXRl bV9kYXRhLl90eXBlXSwKLSAgICAgICAgICBwYXJlbnREYXRhID0gbm9kZS5nZXRUcmVlTm9kZUhp ZXJhcmNoeShzZWxlY3RlZF9pdGVtKTsKLQotICAgICAgICAvLyBJZiBzZXJ2ZXIsIGRhdGFiYXNl IGlzIHVuZGVmaW5lZCB0aGVuIHJldHVybiBmcm9tIHRoZSBmdW5jdGlvbi4KLSAgICAgICAgaWYg KHBhcmVudERhdGEuc2VydmVyID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICByZXR1cm47Ci0g ICAgICAgIH0KLSAgICAgICAgLy8gSWYgRGF0YWJhc2UgaXMgbm90IGF2YWlsYWJsZSB0aGVuIHVz ZSBkZWZhdWx0IGRiCi0gICAgICAgIHZhciBkYl9sYWJlbCA9IHBhcmVudERhdGEuZGF0YWJhc2Ug PyBwYXJlbnREYXRhLmRhdGFiYXNlLmxhYmVsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiBwYXJlbnREYXRhLnNlcnZlci5kYjsKLQotICAgICAgICB2YXIgZ3Jp ZF90aXRsZSA9IGRiX2xhYmVsICsgJyBvbiAnICsgcGFyZW50RGF0YS5zZXJ2ZXIudXNlci5uYW1l ICsgJ0AnICsKLSAgICAgICAgICAgICAgICBwYXJlbnREYXRhLnNlcnZlci5sYWJlbDsKLSAgICAg ICAgcmV0dXJuIGdyaWRfdGl0bGU7CisgICAgICAgIHJldHVybiBwYW5lbFRpdGxlLmdldFBhbmVs VGl0bGUocGdCcm93c2VyKTsKICAgICAgIH0sCiAgICAgICAvLyBUaGlzIGlzIGEgY2FsbGJhY2sg ZnVuY3Rpb24gdG8gc2hvdyBxdWVyeSB0b29sIHdoZW4gdXNlciBjbGljayBvbiBtZW51IGl0ZW0u Ci0gICAgICBzaG93X3F1ZXJ5X3Rvb2w6IGZ1bmN0aW9uKHVybCwgaSwgcGFuZWxfdGl0bGUpIHsK LSAgICAgICAgdmFyIHNVUkwgPSB1cmwgfHwgJycsCi0gICAgICAgICAgZCA9IHBnQWRtaW4uQnJv d3Nlci50cmVlLml0ZW1EYXRhKGkpOwotCi0gICAgICAgIHBhbmVsX3RpdGxlID0gcGFuZWxfdGl0 bGUgfHwgJyc7Ci0gICAgICAgIGlmIChkID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICBhbGVy dGlmeS5hbGVydCgKLSAgICAgICAgICAgIGdldHRleHQoJ1F1ZXJ5IFRvb2wgRXJyb3InKSwKLSAg ICAgICAgICAgIGdldHRleHQoJ05vIG9iamVjdCBzZWxlY3RlZC4nKQotICAgICAgICAgICk7Ci0g ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gR2V0IHRoZSBwYXJlbnQg ZGF0YSBmcm9tIHRoZSB0cmVlIG5vZGUgaGllcmFyY2h5LgotICAgICAgICB2YXIgbm9kZSA9IHBn QnJvd3Nlci5Ob2Rlc1tkLl90eXBlXSwKLSAgICAgICAgICBwYXJlbnREYXRhID0gbm9kZS5nZXRU cmVlTm9kZUhpZXJhcmNoeShpKTsKLQotICAgICAgICAvLyBJZiBzZXJ2ZXIsIGRhdGFiYXNlIGlz IHVuZGVmaW5lZCB0aGVuIHJldHVybiBmcm9tIHRoZSBmdW5jdGlvbi4KLSAgICAgICAgaWYgKHBh cmVudERhdGEuc2VydmVyID09PSB1bmRlZmluZWQpIHsKLSAgICAgICAgICByZXR1cm47Ci0gICAg ICAgIH0KLQotICAgICAgICB2YXIgdXJsX3BhcmFtcyA9IHsKLSAgICAgICAgICAgICdzZ2lkJzog cGFyZW50RGF0YS5zZXJ2ZXJfZ3JvdXAuX2lkLAotICAgICAgICAgICAgJ3NpZCc6IHBhcmVudERh dGEuc2VydmVyLl9pZCwKLSAgICAgICAgICB9LAotICAgICAgICAgIHVybF9lbmRwb2ludCA9ICdk YXRhZ3JpZC5pbml0aWFsaXplX3F1ZXJ5X3Rvb2wnOwotICAgICAgICAvLyBJZiBkYXRhYmFzZSBu b3QgcHJlc2VudCB0aGVuIHVzZSBNYWludGVuYW5jZSBkYXRhYmFzZQotICAgICAgICAvLyBXZSB3 aWxsIGhhbmRsZSB0aGlzIGF0IHNlcnZlciBzaWRlCi0gICAgICAgIGlmIChwYXJlbnREYXRhLmRh dGFiYXNlKSB7Ci0gICAgICAgICAgdXJsX3BhcmFtc1snZGlkJ10gPSBwYXJlbnREYXRhLmRhdGFi YXNlLl9pZDsKLSAgICAgICAgICB1cmxfZW5kcG9pbnQgPSAnZGF0YWdyaWQuaW5pdGlhbGl6ZV9x dWVyeV90b29sX3dpdGhfZGlkJzsKLSAgICAgICAgfQotICAgICAgICB2YXIgYmFzZVVybCA9IHVy bF9mb3IodXJsX2VuZHBvaW50LCB1cmxfcGFyYW1zKTsKLQotICAgICAgICB0aGlzLmNyZWF0ZV90 cmFuc2FjdGlvbihiYXNlVXJsLCBudWxsLCAndHJ1ZScsIHBhcmVudERhdGEuc2VydmVyLnNlcnZl cl90eXBlLCBzVVJMLCBwYW5lbF90aXRsZSwgJycsIGZhbHNlKTsKKyAgICAgIHNob3dfcXVlcnlf dG9vbDogZnVuY3Rpb24odXJsLCBhY2lUcmVlSWRlbnRpZmllciwgcGFuZWxUaXRsZSkgeworICAg ICAgICBzaG93UXVlcnlUb29sLnNob3dRdWVyeVRvb2wodGhpcywgcGdCcm93c2VyLCBhbGVydGlm eSwgdXJsLAorICAgICAgICAgIGFjaVRyZWVJZGVudGlmaWVyLCBwYW5lbFRpdGxlKTsKICAgICAg IH0sCiAgICAgICBjcmVhdGVfdHJhbnNhY3Rpb246IGZ1bmN0aW9uKGJhc2VVcmwsIHRhcmdldCwg aXNfcXVlcnlfdG9vbCwgc2VydmVyX3R5cGUsIHNVUkwsIHBhbmVsX3RpdGxlLCBzcWxfZmlsdGVy LCByZWNyZWF0ZSkgewogICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi90b29scy9ncmFudF93aXphcmQvc3RhdGljL2pzL2dyYW50X3dpemFyZC5qcyBiL3dl Yi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC9zdGF0aWMvanMvZ3JhbnRfd2l6YXJkLmpzCmlu ZGV4IDc1MDg4N2VjLi41NmViMzc4YSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvZ3Jh bnRfd2l6YXJkL3N0YXRpYy9qcy9ncmFudF93aXphcmQuanMKKysrIGIvd2ViL3BnYWRtaW4vdG9v bHMvZ3JhbnRfd2l6YXJkL3N0YXRpYy9qcy9ncmFudF93aXphcmQuanMKQEAgLTIsMTIgKzIsMTYg QEAKIGRlZmluZShbCiAgICdzb3VyY2VzL2dldHRleHQnLCAnc291cmNlcy91cmxfZm9yJywgJ2px dWVyeScsICd1bmRlcnNjb3JlJywgJ2JhY2tib25lJywKICAgJ3BnYWRtaW4uYWxlcnRpZnlqcycs ICdwZ2FkbWluLmJhY2tncmlkJywgJ3BnYWRtaW4uYmFja2Zvcm0nLAotICAncGdhZG1pbi5icm93 c2VyJywgJ3BnYWRtaW4uYnJvd3Nlci5ub2RlJywgJ2JhY2tncmlkLnNlbGVjdC5hbGwnLAorICAn cGdhZG1pbi5icm93c2VyJywgJ3BnYWRtaW4uYnJvd3Nlci5ub2RlJywKKyAgJ3NvdXJjZXMvZ3Jh bnQvd2l6YXJkL21lbnVfdXRpbHMnLAorICAnc291cmNlcy9tZW51L21lbnVfZW5hYmxlZCcsCisK KyAgJ2JhY2tncmlkLnNlbGVjdC5hbGwnLAogICAnYmFja2dyaWQuZmlsdGVyJywgJ3BnYWRtaW4u YnJvd3Nlci5zZXJ2ZXIucHJpdmlsZWdlJywKICAgJ3BnYWRtaW4uYnJvd3Nlci53aXphcmQnLAog XSwgZnVuY3Rpb24oCiAgIGdldHRleHQsIHVybF9mb3IsICQsIF8sIEJhY2tib25lLCBBbGVydGlm eSwgQmFja2dyaWQsIEJhY2tmb3JtLCBwZ0Jyb3dzZXIsCi0gIHBnTm9kZQorICBwZ05vZGUsIG1l bnVVdGlscywgbWVudUVuYWJsZWQKICkgewogCiAgIC8vIGlmIG1vZHVsZSBpcyBhbHJlYWR5IGlu aXRpYWxpemVkLCByZWZlciB0byB0aGF0LgpAQCAtMTQzLDQxICsxNDcsNiBAQCBkZWZpbmUoWwog CiAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTsKIAotICAgICAgLy8gRGVmaW5lIGxpc3Qg b2Ygbm9kZXMgb24gd2hpY2ggZ3JhbnQgd2l6YXJkIGNvbnRleHQgbWVudSBvcHRpb24gYXBwZWFy cwotICAgICAgdmFyIHN1cHBvcnRlZF9ub2RlcyA9IFsKLSAgICAgICAgICAnc2NoZW1hJywgJ2Nv bGwtZnVuY3Rpb24nLCAnY29sbC1zZXF1ZW5jZScsCi0gICAgICAgICAgJ2NvbGwtdGFibGUnLCAn Y29sbC12aWV3JywgJ2NvbGwtcHJvY2VkdXJlJywKLSAgICAgICAgICAnY29sbC1tdmlldycsICdk YXRhYmFzZScsICdjb2xsLXRyaWdnZXJfZnVuY3Rpb24nLAotICAgICAgICBdLAotCi0gICAgICAg IC8qKgotICAgICAgICAgIEVuYWJsZS9kaXNhYmxlIGdyYW50d2l6YXJkIG1lbnUgaW4gdG9vbHMg YmFzZWQKLSAgICAgICAgICBvbiBub2RlIHNlbGVjdGVkCi0gICAgICAgICAgaWYgc2VsZWN0ZWQg bm9kZSBpcyBwcmVzZW50IGluIHN1cHBvcnRlZF9ub2RlcywKLSAgICAgICAgICBtZW51IHdpbGwg YmUgZW5hYmxlZCBvdGhlcndpc2UgZGlzYWJsZWQuCi0gICAgICAgICAgQWxzbywgaGlkZSBpdCBm b3Igc3lzdGVtIHZpZXcgaW4gY2F0YWxvZ3MKLSAgICAgICAgKi8KLSAgICAgICAgbWVudV9lbmFi bGVkID0gZnVuY3Rpb24oaXRlbURhdGEsIGl0ZW0pIHsKLSAgICAgICAgICB2YXIgdCA9IHBnQnJv d3Nlci50cmVlLAotICAgICAgICAgICAgaSA9IGl0ZW0sCi0gICAgICAgICAgICBkID0gaXRlbURh dGE7Ci0gICAgICAgICAgdmFyIHBhcmVudF9pdGVtID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVu dChpKSA6IG51bGwsCi0gICAgICAgICAgICBwYXJlbnRfZGF0YSA9IHBhcmVudF9pdGVtID8gdC5p dGVtRGF0YShwYXJlbnRfaXRlbSkgOiBudWxsOwotICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5l ZChkKSAmJiAhXy5pc051bGwoZCkgJiYgIV8uaXNOdWxsKHBhcmVudF9kYXRhKSkgewotICAgICAg ICAgICAgaWYgKF8uaW5kZXhPZihzdXBwb3J0ZWRfbm9kZXMsIGQuX3R5cGUpICE9PSAtMSAmJgot ICAgICAgICAgICAgICBwYXJlbnRfZGF0YS5fdHlwZSAhPSAnY2F0YWxvZycpIHsKLSAgICAgICAg ICAgICAgaWYgKGQuX3R5cGUgPT0gJ2RhdGFiYXNlJyAmJiBkLmFsbG93Q29ubikKLSAgICAgICAg ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgZWxzZSBpZiAoZC5fdHlwZSAhPSAn ZGF0YWJhc2UnKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgICBl bHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgfSBlbHNlCi0g ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAg IHJldHVybiBmYWxzZTsKLSAgICAgICAgfTsKLQogICAgICAgLy8gRGVmaW5lIHRoZSBub2RlcyBv biB3aGljaCB0aGUgbWVudXMgdG8gYmUgYXBwZWFyCiAgICAgICB2YXIgbWVudXMgPSBbewogICAg ICAgICBuYW1lOiAnZ3JhbnRfd2l6YXJkX3NjaGVtYScsCkBAIC0xODcsMjEgKzE1NiwyMyBAQCBk ZWZpbmUoWwogICAgICAgICBwcmlvcml0eTogMTQsCiAgICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdH cmFudCBXaXphcmQuLi4nKSwKICAgICAgICAgaWNvbjogJ2ZhIGZhLXVubG9jay1hbHQnLAotICAg ICAgICBlbmFibGU6IG1lbnVfZW5hYmxlZCwKKyAgICAgICAgZW5hYmxlOiBtZW51RW5hYmxlZC5t ZW51RW5hYmxlZC5iaW5kKG51bGwsCisgICAgICAgICAgcGdCcm93c2VyLnRyZWVNZW51LCBtZW51 VXRpbHMuc3VwcG9ydGVkTm9kZXMpLAogICAgICAgfV07CiAKICAgICAgIC8vIEFkZCBzdXBwb3J0 ZWQgbWVudXMgaW50byB0aGUgbWVudXMgbGlzdAotICAgICAgZm9yICh2YXIgaWR4ID0gMDsgaWR4 IDwgc3VwcG9ydGVkX25vZGVzLmxlbmd0aDsgaWR4KyspIHsKKyAgICAgIGZvciAodmFyIGlkeCA9 IDA7IGlkeCA8IG1lbnVVdGlscy5zdXBwb3J0ZWROb2Rlcy5sZW5ndGg7IGlkeCsrKSB7CiAgICAg ICAgIG1lbnVzLnB1c2goewotICAgICAgICAgIG5hbWU6ICdncmFudF93aXphcmRfc2NoZW1hX2Nv bnRleHRfJyArIHN1cHBvcnRlZF9ub2Rlc1tpZHhdLAotICAgICAgICAgIG5vZGU6IHN1cHBvcnRl ZF9ub2Rlc1tpZHhdLAorICAgICAgICAgIG5hbWU6ICdncmFudF93aXphcmRfc2NoZW1hX2NvbnRl eHRfJyArIG1lbnVVdGlscy5zdXBwb3J0ZWROb2Rlc1tpZHhdLAorICAgICAgICAgIG5vZGU6IG1l bnVVdGlscy5zdXBwb3J0ZWROb2Rlc1tpZHhdLAogICAgICAgICAgIG1vZHVsZTogdGhpcywKICAg ICAgICAgICBhcHBsaWVzOiBbJ2NvbnRleHQnXSwKICAgICAgICAgICBjYWxsYmFjazogJ3N0YXJ0 X2dyYW50X3dpemFyZCcsCiAgICAgICAgICAgcHJpb3JpdHk6IDE0LAogICAgICAgICAgIGxhYmVs OiBnZXR0ZXh0KCdHcmFudCBXaXphcmQuLi4nKSwKICAgICAgICAgICBpY29uOiAnZmEgZmEtdW5s b2NrLWFsdCcsCi0gICAgICAgICAgZW5hYmxlOiBtZW51X2VuYWJsZWQsCisgICAgICAgICAgZW5h YmxlOiBtZW51RW5hYmxlZC5tZW51RW5hYmxlZC5iaW5kKG51bGwsCisgICAgICAgICAgICBwZ0Jy b3dzZXIudHJlZU1lbnUsIG1lbnVVdGlscy5zdXBwb3J0ZWROb2RlcyksCiAgICAgICAgIH0pOwog ICAgICAgfQogICAgICAgcGdCcm93c2VyLmFkZF9tZW51cyhtZW51cyk7CmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi90b29scy9pbXBvcnRfZXhwb3J0L3N0YXRpYy9qcy9pbXBvcnRfZXhwb3J0Lmpz IGIvd2ViL3BnYWRtaW4vdG9vbHMvaW1wb3J0X2V4cG9ydC9zdGF0aWMvanMvaW1wb3J0X2V4cG9y dC5qcwppbmRleCAzMDU4ZjEyMi4uYmJiMDQ1Y2QgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rv b2xzL2ltcG9ydF9leHBvcnQvc3RhdGljL2pzL2ltcG9ydF9leHBvcnQuanMKKysrIGIvd2ViL3Bn YWRtaW4vdG9vbHMvaW1wb3J0X2V4cG9ydC9zdGF0aWMvanMvaW1wb3J0X2V4cG9ydC5qcwpAQCAt MSwxMCArMSwxMyBAQAogZGVmaW5lKFsKICAgJ3NvdXJjZXMvZ2V0dGV4dCcsICdzb3VyY2VzL3Vy bF9mb3InLCAnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAndW5kZXJzY29yZS5zdHJpbmcnLCAncGdh ZG1pbi5hbGVydGlmeWpzJywKICAgJ3NvdXJjZXMvcGdhZG1pbicsICdwZ2FkbWluLmJyb3dzZXIn LCAnYmFja2JvbmUnLCAnYmFja2dyaWQnLCAnYmFja2Zvcm0nLAotICAnc291cmNlcy91dGlscycs ICdwZ2FkbWluLmJhY2tmb3JtJywgJ3BnYWRtaW4uYmFja2dyaWQnLCAncGdhZG1pbi5icm93c2Vy Lm5vZGUudWknLAorICAnc291cmNlcy91dGlscycsCisgICdzb3VyY2VzL21lbnUvbWVudV9lbmFi bGVkJywKKworICAncGdhZG1pbi5iYWNrZm9ybScsICdwZ2FkbWluLmJhY2tncmlkJywgJ3BnYWRt aW4uYnJvd3Nlci5ub2RlLnVpJywKIF0sIGZ1bmN0aW9uKAogICBnZXR0ZXh0LCB1cmxfZm9yLCAk LCBfLCBTLCBBbGVydGlmeSwgcGdBZG1pbiwgcGdCcm93c2VyLCBCYWNrYm9uZSwgQmFja2dyaWQs Ci1CYWNrZm9ybSwgY29tbW9uVXRpbHMKK0JhY2tmb3JtLCBjb21tb25VdGlscywgbWVudUVuYWJs ZWQKICkgewogCiAgIHBnQWRtaW4gPSBwZ0FkbWluIHx8IHdpbmRvdy5wZ0FkbWluIHx8IHt9OwpA QCAtMzgzLDI1ICszODYsNiBAQCBCYWNrZm9ybSwgY29tbW9uVXRpbHMKIAogICAgICAgdGhpcy5p bml0aWFsaXplZCA9IHRydWU7CiAKLSAgICAgIC8qCi0gICAgICAgKiBFbmFibGUvZGlzYWJsZSBp bXBvcnQgbWVudSBpbiB0b29scyBiYXNlZCBvbiBub2RlIHNlbGVjdGVkLiBJbXBvcnQKLSAgICAg ICAqIG1lbnUgd2lsbCBiZSBlbmFibGVkIG9ubHkgd2hlbiB1c2VyIHNlbGVjdCB0YWJsZSBub2Rl LgotICAgICAgICovCi0gICAgICB2YXIgbWVudV9lbmFibGVkID0gZnVuY3Rpb24oaXRlbURhdGEs IGl0ZW0pIHsKLSAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwKLSAgICAgICAgICBpID0g aXRlbSwKLSAgICAgICAgICBkID0gaXRlbURhdGE7Ci0gICAgICAgIHZhciBwYXJlbnRfaXRlbSA9 IHQuaGFzUGFyZW50KGkpID8gdC5wYXJlbnQoaSkgOiBudWxsLAotICAgICAgICAgIHBhcmVudF9k YXRhID0gcGFyZW50X2l0ZW0gPyB0Lml0ZW1EYXRhKHBhcmVudF9pdGVtKSA6IG51bGw7Ci0gICAg ICAgIGlmICghXy5pc1VuZGVmaW5lZChkKSAmJiAhXy5pc051bGwoZCkgJiYgIV8uaXNOdWxsKHBh cmVudF9kYXRhKSkKLSAgICAgICAgICByZXR1cm4gKAotICAgICAgICAgICAgKF8uaW5kZXhPZihb J3RhYmxlJ10sIGQuX3R5cGUpICE9PSAtMSAmJgotICAgICAgICAgICAgICBwYXJlbnRfZGF0YS5f dHlwZSAhPSAnY2F0YWxvZycpID8gdHJ1ZSA6IGZhbHNlCi0gICAgICAgICAgKTsKLSAgICAgICAg ZWxzZQotICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgIH07Ci0KICAgICAgIC8vIEluaXRp YWxpemUgdGhlIGNvbnRleHQgbWVudSB0byBkaXNwbGF5IHRoZSBpbXBvcnQgb3B0aW9ucyB3aGVu IHVzZXIgb3BlbiB0aGUgY29udGV4dCBtZW51IGZvciB0YWJsZQogICAgICAgcGdCcm93c2VyLmFk ZF9tZW51cyhbewogICAgICAgICBuYW1lOiAnaW1wb3J0JywKQEAgLTQxMyw3ICszOTcsNyBAQCBC YWNrZm9ybSwgY29tbW9uVXRpbHMKICAgICAgICAgcHJpb3JpdHk6IDEwLAogICAgICAgICBsYWJl bDogZ2V0dGV4dCgnSW1wb3J0L0V4cG9ydC4uLicpLAogICAgICAgICBpY29uOiAnZmEgZmEtc2hv cHBpbmctY2FydCcsCi0gICAgICAgIGVuYWJsZTogbWVudV9lbmFibGVkLAorICAgICAgICBlbmFi bGU6IG1lbnVFbmFibGVkLm1lbnVFbmFibGVkLmJpbmQobnVsbCwgcGdCcm93c2VyLnRyZWVNZW51 LCBbJ3RhYmxlJ10pLAogICAgICAgfV0pOwogICAgIH0sCiAKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL3Rvb2xzL21haW50ZW5hbmNlL3N0YXRpYy9qcy9tYWludGVuYW5jZS5qcyBiL3dlYi9wZ2Fk bWluL3Rvb2xzL21haW50ZW5hbmNlL3N0YXRpYy9qcy9tYWludGVuYW5jZS5qcwppbmRleCA4MWU0 NTk0NC4uYzk5NzZkNTMgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL21haW50ZW5hbmNl L3N0YXRpYy9qcy9tYWludGVuYW5jZS5qcworKysgYi93ZWIvcGdhZG1pbi90b29scy9tYWludGVu YW5jZS9zdGF0aWMvanMvbWFpbnRlbmFuY2UuanMKQEAgLTIsMTEgKzIsMTQgQEAgZGVmaW5lKFsK ICAgJ3NvdXJjZXMvZ2V0dGV4dCcsICdzb3VyY2VzL3VybF9mb3InLCAnanF1ZXJ5JywgJ3VuZGVy c2NvcmUnLAogICAndW5kZXJzY29yZS5zdHJpbmcnLCAncGdhZG1pbi5hbGVydGlmeWpzJywgJ3Nv dXJjZXMvcGdhZG1pbicsICdwZ2FkbWluLmJyb3dzZXInLCAnYmFja2JvbmUnLAogICAnYmFja2dy aWQnLCAnYmFja2Zvcm0nLCAnc291cmNlcy91dGlscycsCisgICdzb3VyY2VzL21haW50ZW5hbmNl L21lbnVfdXRpbHMnLAorICAnc291cmNlcy9tZW51L21lbnVfZW5hYmxlZCcsCiAgICdwZ2FkbWlu LmJhY2tmb3JtJywgJ3BnYWRtaW4uYmFja2dyaWQnLAogICAncGdhZG1pbi5icm93c2VyLm5vZGUu dWknLAogXSwgZnVuY3Rpb24oCiAgIGdldHRleHQsIHVybF9mb3IsICQsIF8sIFMsIEFsZXJ0aWZ5 LCBwZ0FkbWluLCBwZ0Jyb3dzZXIsIEJhY2tib25lLCBCYWNrZ3JpZCwKLSAgQmFja2Zvcm0sIGNv bW1vblV0aWxzCisgIEJhY2tmb3JtLCBjb21tb25VdGlscywKKyAgbWVudVV0aWxzLCBtZW51RW5h YmxlZAogKSB7CiAKICAgcGdBZG1pbiA9IHBnQWRtaW4gfHwgd2luZG93LnBnQWRtaW4gfHwge307 CkBAIC0xNjgsMzYgKzE3MSw2IEBAIGRlZmluZShbCiAKICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQg PSB0cnVlOwogCi0gICAgICB2YXIgbWFpbnRlbmFuY2Vfc3VwcG9ydGVkX25vZGVzID0gWwotICAg ICAgICAnZGF0YWJhc2UnLCAndGFibGUnLCAncHJpbWFyeV9rZXknLAotICAgICAgICAndW5pcXVl X2NvbnN0cmFpbnQnLCAnaW5kZXgnLCAncGFydGl0aW9uJywKLSAgICAgIF07Ci0KLSAgICAgIC8q KgotICAgICAgIEVuYWJsZS9kaXNhYmxlIE1haW50ZW5hbmNlIG1lbnUgaW4gdG9vbHMgYmFzZWQg b24gbm9kZSBzZWxlY3RlZC4KLSAgICAgICBNYWludGVuYW5jZSBtZW51IHdpbGwgYmUgZW5hYmxl ZCBvbmx5IHdoZW4gdXNlciBzZWxlY3QgdGFibGUgYW5kIGRhdGFiYXNlIG5vZGUuCi0gICAgICAq LwotICAgICAgdmFyIG1lbnVfZW5hYmxlZCA9IGZ1bmN0aW9uKGl0ZW1EYXRhLCBpdGVtKSB7Ci0g ICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsCi0gICAgICAgICAgaSA9IGl0ZW0sCi0gICAg ICAgICAgZCA9IGl0ZW1EYXRhOwotICAgICAgICB2YXIgcGFyZW50X2l0ZW0gPSB0Lmhhc1BhcmVu dChpKSA/IHQucGFyZW50KGkpIDogbnVsbCwKLSAgICAgICAgICBwYXJlbnRfZGF0YSA9IHBhcmVu dF9pdGVtID8gdC5pdGVtRGF0YShwYXJlbnRfaXRlbSkgOiBudWxsOwotICAgICAgICBpZiAoIV8u aXNVbmRlZmluZWQoZCkgJiYgIV8uaXNOdWxsKGQpICYmICFfLmlzTnVsbChwYXJlbnRfZGF0YSkp IHsKLSAgICAgICAgICBpZiAoXy5pbmRleE9mKG1haW50ZW5hbmNlX3N1cHBvcnRlZF9ub2Rlcywg ZC5fdHlwZSkgIT09IC0xICYmCi0gICAgICAgICAgICBwYXJlbnRfZGF0YS5fdHlwZSAhPSAnY2F0 YWxvZycpIHsKLSAgICAgICAgICAgIGlmIChkLl90eXBlID09ICdkYXRhYmFzZScgJiYgZC5hbGxv d0Nvbm4pCi0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgZWxzZSBpZiAo ZC5fdHlwZSAhPSAnZGF0YWJhc2UnKQotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgIH0gZWxz ZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICBy ZXR1cm4gZmFsc2U7Ci0gICAgICB9OwotCiAgICAgICB2YXIgbWVudXMgPSBbewogICAgICAgICBu YW1lOiAnbWFpbnRlbmFuY2UnLAogICAgICAgICBtb2R1bGU6IHRoaXMsCkBAIC0yMDYsMjEgKzE3 OSwyMyBAQCBkZWZpbmUoWwogICAgICAgICBwcmlvcml0eTogMTAsCiAgICAgICAgIGxhYmVsOiBn ZXR0ZXh0KCdNYWludGVuYW5jZS4uLicpLAogICAgICAgICBpY29uOiAnZmEgZmEtd3JlbmNoJywK LSAgICAgICAgZW5hYmxlOiBtZW51X2VuYWJsZWQsCisgICAgICAgIGVuYWJsZTogbWVudUVuYWJs ZWQubWVudUVuYWJsZWQuYmluZChudWxsLAorICAgICAgICAgIHBnQnJvd3Nlci50cmVlTWVudSwg bWVudVV0aWxzLm1haW50ZW5hbmNlU3VwcG9ydGVkTm9kZXMpLAogICAgICAgfV07CiAKICAgICAg IC8vIEFkZCBzdXBwb3J0ZWQgbWVudXMgaW50byB0aGUgbWVudXMgbGlzdAotICAgICAgZm9yICh2 YXIgaWR4ID0gMDsgaWR4IDwgbWFpbnRlbmFuY2Vfc3VwcG9ydGVkX25vZGVzLmxlbmd0aDsgaWR4 KyspIHsKKyAgICAgIGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IG1lbnVVdGlscy5tYWludGVuYW5j ZVN1cHBvcnRlZE5vZGVzLmxlbmd0aDsgaWR4KyspIHsKICAgICAgICAgbWVudXMucHVzaCh7Ci0g ICAgICAgICAgbmFtZTogJ21haW50ZW5hbmNlX2NvbnRleHRfJyArIG1haW50ZW5hbmNlX3N1cHBv cnRlZF9ub2Rlc1tpZHhdLAotICAgICAgICAgIG5vZGU6IG1haW50ZW5hbmNlX3N1cHBvcnRlZF9u b2Rlc1tpZHhdLAorICAgICAgICAgIG5hbWU6ICdtYWludGVuYW5jZV9jb250ZXh0XycgKyBtZW51 VXRpbHMubWFpbnRlbmFuY2VTdXBwb3J0ZWROb2Rlc1tpZHhdLAorICAgICAgICAgIG5vZGU6IG1l bnVVdGlscy5tYWludGVuYW5jZVN1cHBvcnRlZE5vZGVzW2lkeF0sCiAgICAgICAgICAgbW9kdWxl OiB0aGlzLAogICAgICAgICAgIGFwcGxpZXM6IFsnY29udGV4dCddLAogICAgICAgICAgIGNhbGxi YWNrOiAnY2FsbGJhY2tfbWFpbnRlbmFuY2UnLAogICAgICAgICAgIHByaW9yaXR5OiAxMCwKICAg ICAgICAgICBsYWJlbDogZ2V0dGV4dCgnTWFpbnRlbmFuY2UuLi4nKSwKICAgICAgICAgICBpY29u OiAnZmEgZmEtd3JlbmNoJywKLSAgICAgICAgICBlbmFibGU6IG1lbnVfZW5hYmxlZCwKKyAgICAg ICAgICBlbmFibGU6ICBtZW51RW5hYmxlZC5tZW51RW5hYmxlZC5iaW5kKG51bGwsCisgICAgICAg ICAgcGdCcm93c2VyLnRyZWVNZW51LCBtZW51VXRpbHMubWFpbnRlbmFuY2VTdXBwb3J0ZWROb2Rl cyksCiAgICAgICAgIH0pOwogICAgICAgfQogICAgICAgcGdCcm93c2VyLmFkZF9tZW51cyhtZW51 cyk7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9yZXN0b3JlL3N0YXRpYy9qcy9yZXN0 b3JlLmpzIGIvd2ViL3BnYWRtaW4vdG9vbHMvcmVzdG9yZS9zdGF0aWMvanMvcmVzdG9yZS5qcwpp bmRleCA1YzA4MmE5Zi4uNmM5ZTc0ZWQgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL3Jl c3RvcmUvc3RhdGljL2pzL3Jlc3RvcmUuanMKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvcmVzdG9y ZS9zdGF0aWMvanMvcmVzdG9yZS5qcwpAQCAtMSwxMSArMSwxMiBAQAotLy8gUmVzdG9yZSBkaWFs b2cKIGRlZmluZSgndG9vbHMucmVzdG9yZScsIFsKICAgJ3NvdXJjZXMvZ2V0dGV4dCcsICdzb3Vy Y2VzL3VybF9mb3InLCAnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAnYmFja2JvbmUnLAogICAndW5k ZXJzY29yZS5zdHJpbmcnLCAncGdhZG1pbi5hbGVydGlmeWpzJywgJ3BnYWRtaW4uYnJvd3Nlcics Ci0gICdwZ2FkbWluLmJhY2tncmlkJywgJ3BnYWRtaW4uYmFja2Zvcm0nLCAnc291cmNlcy91dGls cycsCisgICdwZ2FkbWluLmJhY2tncmlkJywgJ3BnYWRtaW4uYmFja2Zvcm0nLCAnc291cmNlcy91 dGlscycsICdzb3VyY2VzL3Jlc3RvcmUvbWVudV91dGlscycsCisgICdzb3VyY2VzL21lbnUvbWVu dV9lbmFibGVkJywKKyAgJ3NvdXJjZXMvcmVzdG9yZS9yZXN0b3JlX2RpYWxvZycsCiBdLCBmdW5j dGlvbigKICAgZ2V0dGV4dCwgdXJsX2ZvciwgJCwgXywgQmFja2JvbmUsIFMsIGFsZXJ0aWZ5LCBw Z0Jyb3dzZXIsIEJhY2tncmlkLCBCYWNrZm9ybSwKLWNvbW1vblV0aWxzCitjb21tb25VdGlscywg bWVudVV0aWxzLCBtZW51RW5hYmxlZCwgcmVzdG9yZURpYWxvZwogKSB7CiAKICAgLy8gaWYgbW9k dWxlIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIHJlZmVyIHRvIHRoYXQuCkBAIC0zMDcsNTkgKzMw OCw2IEBAIGNvbW1vblV0aWxzCiAKICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlOwogCi0g ICAgICAvLyBEZWZpbmUgbGlzdCBvZiBub2RlcyBvbiB3aGljaCByZXN0b3JlIGNvbnRleHQgbWVu dSBvcHRpb24gYXBwZWFycwotICAgICAgdmFyIHJlc3RvcmVfc3VwcG9ydGVkX25vZGVzID0gWwot ICAgICAgICAnZGF0YWJhc2UnLCAnc2NoZW1hJywKLSAgICAgICAgJ3RhYmxlJywgJ2Z1bmN0aW9u JywKLSAgICAgICAgJ3RyaWdnZXInLCAnaW5kZXgnLAotICAgICAgICAncGFydGl0aW9uJywKLSAg ICAgIF07Ci0KLSAgICAgIC8qKgotICAgICAgICBFbmFibGUvZGlzYWJsZSByZXN0b3JlIG1lbnUg aW4gdG9vbHMgYmFzZWQKLSAgICAgICAgb24gbm9kZSBzZWxlY3RlZAotICAgICAgICBpZiBzZWxl Y3RlZCBub2RlIGlzIHByZXNlbnQgaW4gc3VwcG9ydGVkX25vZGVzLAotICAgICAgICBtZW51IHdp bGwgYmUgZW5hYmxlZCBvdGhlcndpc2UgZGlzYWJsZWQuCi0gICAgICAgIEFsc28sIGhpZGUgaXQg Zm9yIHN5c3RlbSB2aWV3IGluIGNhdGFsb2dzCi0gICAgICAqLwotICAgICAgdmFyIG1lbnVfZW5h YmxlZCA9IGZ1bmN0aW9uKGl0ZW1EYXRhLCBpdGVtLCBkYXRhKSB7Ci0gICAgICAgIHZhciB0ID0g cGdCcm93c2VyLnRyZWUsCi0gICAgICAgICAgaSA9IGl0ZW0sCi0gICAgICAgICAgZCA9IGl0ZW1E YXRhOwotICAgICAgICB2YXIgcGFyZW50X2l0ZW0gPSB0Lmhhc1BhcmVudChpKSA/IHQucGFyZW50 KGkpIDogbnVsbCwKLSAgICAgICAgICBwYXJlbnRfZGF0YSA9IHBhcmVudF9pdGVtID8gdC5pdGVt RGF0YShwYXJlbnRfaXRlbSkgOiBudWxsOwotICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQoZCkg JiYgIV8uaXNOdWxsKGQpICYmICFfLmlzTnVsbChwYXJlbnRfZGF0YSkpIHsKLSAgICAgICAgICBp ZiAoXy5pbmRleE9mKHJlc3RvcmVfc3VwcG9ydGVkX25vZGVzLCBkLl90eXBlKSAhPT0gLTEgJiYK LSAgICAgICAgICAgIGlzX3BhcmVudF9jYXRhbG9nKGl0ZW1EYXRhLCBpdGVtLCBkYXRhKSkgewot ICAgICAgICAgICAgaWYgKGQuX3R5cGUgPT0gJ2RhdGFiYXNlJyAmJiBkLmFsbG93Q29ubikKLSAg ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICBlbHNlIGlmIChkLl90eXBlICE9 ICdkYXRhYmFzZScpCi0gICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgZWxz ZQotICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgfSBlbHNlCi0gICAgICAg ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgIHJldHVybiBmYWxz ZTsKLSAgICAgIH07Ci0KLSAgICAgIHZhciBpc19wYXJlbnRfY2F0YWxvZyA9IGZ1bmN0aW9uKGl0 ZW1EYXRhLCBpdGVtKSB7Ci0gICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsCi0gICAgICAg ICAgaSA9IGl0ZW0sCi0gICAgICAgICAgZCA9IGl0ZW1EYXRhOwotCi0gICAgICAgIC8vIFRvIGl0 ZXJhdGUgb3ZlciB0cmVlIHRvIGNoZWNrIHBhcmVudCBub2RlCi0gICAgICAgIHdoaWxlIChpKSB7 Ci0gICAgICAgICAgLy8gSWYgaXQgaXMgc2NoZW1hIHRoZW4gYWxsb3cgdXNlciB0byByZXN0b3Jl Ci0gICAgICAgICAgaWYgKF8uaW5kZXhPZihbJ2NhdGFsb2cnXSwgZC5fdHlwZSkgPiAtMSkKLSAg ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICBpID0gdC5oYXNQYXJlbnQoaSkgPyB0 LnBhcmVudChpKSA6IG51bGw7Ci0gICAgICAgICAgZCA9IGkgPyB0Lml0ZW1EYXRhKGkpIDogbnVs bDsKLSAgICAgICAgfQotICAgICAgICAvLyBieSBkZWZhdWx0IHdlIGRvIG5vdCB3YW50IHRvIGFs bG93IGNyZWF0ZSBtZW51Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgICAgfTsKLQogICAgICAg Ly8gRGVmaW5lIHRoZSBub2RlcyBvbiB3aGljaCB0aGUgbWVudXMgdG8gYmUgYXBwZWFyCiAgICAg ICB2YXIgbWVudXMgPSBbewogICAgICAgICBuYW1lOiAncmVzdG9yZV9vYmplY3QnLApAQCAtMzY5 LDIwICszMTcsMjIgQEAgY29tbW9uVXRpbHMKICAgICAgICAgcHJpb3JpdHk6IDEzLAogICAgICAg ICBsYWJlbDogZ2V0dGV4dCgnUmVzdG9yZS4uLicpLAogICAgICAgICBpY29uOiAnZmEgZmEtdXBs b2FkJywKLSAgICAgICAgZW5hYmxlOiBtZW51X2VuYWJsZWQsCisgICAgICAgIGVuYWJsZTogbWVu dUVuYWJsZWQubWVudUVuYWJsZWQuYmluZChudWxsLAorICAgICAgICAgICAgcGdCcm93c2VyLnRy ZWVNZW51LCBtZW51VXRpbHMucmVzdG9yZVN1cHBvcnRlZE5vZGVzKSwKICAgICAgIH1dOwogCi0g ICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCByZXN0b3JlX3N1cHBvcnRlZF9ub2Rlcy5sZW5n dGg7IGlkeCsrKSB7CisgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBtZW51VXRpbHMucmVz dG9yZVN1cHBvcnRlZE5vZGVzLmxlbmd0aDsgaWR4KyspIHsKICAgICAgICAgbWVudXMucHVzaCh7 Ci0gICAgICAgICAgbmFtZTogJ3Jlc3RvcmVfJyArIHJlc3RvcmVfc3VwcG9ydGVkX25vZGVzW2lk eF0sCi0gICAgICAgICAgbm9kZTogcmVzdG9yZV9zdXBwb3J0ZWRfbm9kZXNbaWR4XSwKKyAgICAg ICAgICBuYW1lOiAncmVzdG9yZV8nICsgbWVudVV0aWxzLnJlc3RvcmVTdXBwb3J0ZWROb2Rlc1tp ZHhdLAorICAgICAgICAgIG5vZGU6IG1lbnVVdGlscy5yZXN0b3JlU3VwcG9ydGVkTm9kZXNbaWR4 XSwKICAgICAgICAgICBtb2R1bGU6IHRoaXMsCiAgICAgICAgICAgYXBwbGllczogWydjb250ZXh0 J10sCiAgICAgICAgICAgY2FsbGJhY2s6ICdyZXN0b3JlX29iamVjdHMnLAogICAgICAgICAgIHBy aW9yaXR5OiAxMywKICAgICAgICAgICBsYWJlbDogZ2V0dGV4dCgnUmVzdG9yZS4uLicpLAogICAg ICAgICAgIGljb246ICdmYSBmYS11cGxvYWQnLAotICAgICAgICAgIGVuYWJsZTogbWVudV9lbmFi bGVkLAorICAgICAgICAgIGVuYWJsZTogbWVudUVuYWJsZWQubWVudUVuYWJsZWQuYmluZChudWxs LAorICAgICAgICAgICAgcGdCcm93c2VyLnRyZWVNZW51LCBtZW51VXRpbHMucmVzdG9yZVN1cHBv cnRlZE5vZGVzKSwKICAgICAgICAgfSk7CiAgICAgICB9CiAKQEAgLTM5MSwzMDcgKzM0MSw4IEBA IGNvbW1vblV0aWxzCiAgICAgfSwKICAgICAvLyBDYWxsYmFjayB0byBkcmF3IEJhY2t1cCBEaWFs b2cgZm9yIG9iamVjdHMKICAgICByZXN0b3JlX29iamVjdHM6IGZ1bmN0aW9uKGFjdGlvbiwgdHJl ZUl0ZW0pIHsKLQotICAgICAgdmFyIGkgPSB0cmVlSXRlbSB8fCBwZ0Jyb3dzZXIudHJlZS5zZWxl Y3RlZCgpLAotICAgICAgICBzZXJ2ZXJfZGF0YSA9IG51bGw7Ci0KLSAgICAgIHdoaWxlIChpKSB7 Ci0gICAgICAgIHZhciBub2RlX2RhdGEgPSBwZ0Jyb3dzZXIudHJlZS5pdGVtRGF0YShpKTsKLSAg ICAgICAgaWYgKG5vZGVfZGF0YS5fdHlwZSA9PSAnc2VydmVyJykgewotICAgICAgICAgIHNlcnZl cl9kYXRhID0gbm9kZV9kYXRhOwotICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAg ICAgaWYgKHBnQnJvd3Nlci50cmVlLmhhc1BhcmVudChpKSkgewotICAgICAgICAgIGkgPSAkKHBn QnJvd3Nlci50cmVlLnBhcmVudChpKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgYWxl cnRpZnkuYWxlcnQoCi0gICAgICAgICAgICBnZXR0ZXh0KCdSZXN0b3JlIEVycm9yJyksCi0gICAg ICAgICAgICBnZXR0ZXh0KCdQbGVhc2Ugc2VsZWN0IHNlcnZlciBvciBjaGlsZCBub2RlIGZyb20g dHJlZS4nKQotICAgICAgICAgICk7Ci0gICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAg IH0KLQotICAgICAgaWYgKCFzZXJ2ZXJfZGF0YSkgewotICAgICAgICByZXR1cm47Ci0gICAgICB9 Ci0KLSAgICAgIHZhciBtb2R1bGUgPSAncGF0aHMnLAotICAgICAgICBwcmVmZXJlbmNlX25hbWUg PSAncGdfYmluX2RpcicsCi0gICAgICAgIG1zZyA9IGdldHRleHQoJ1BsZWFzZSBjb25maWd1cmUg dGhlIFBvc3RncmVTUUwgQmluYXJ5IFBhdGggaW4gdGhlIFByZWZlcmVuY2VzIGRpYWxvZy4nKTsK LQotICAgICAgaWYgKChzZXJ2ZXJfZGF0YS50eXBlICYmIHNlcnZlcl9kYXRhLnR5cGUgPT0gJ3Bw YXMnKSB8fAotICAgICAgICBzZXJ2ZXJfZGF0YS5zZXJ2ZXJfdHlwZSA9PSAncHBhcycpIHsKLSAg ICAgICAgcHJlZmVyZW5jZV9uYW1lID0gJ3BwYXNfYmluX2Rpcic7Ci0gICAgICAgIG1zZyA9IGdl dHRleHQoJ1BsZWFzZSBjb25maWd1cmUgdGhlIEVEQiBBZHZhbmNlZCBTZXJ2ZXIgQmluYXJ5IFBh dGggaW4gdGhlIFByZWZlcmVuY2VzIGRpYWxvZy4nKTsKLSAgICAgIH0KLQotICAgICAgdmFyIHBy ZWZlcmVuY2UgPSBwZ0Jyb3dzZXIuZ2V0X3ByZWZlcmVuY2UobW9kdWxlLCBwcmVmZXJlbmNlX25h bWUpOwotCi0gICAgICBpZiAocHJlZmVyZW5jZSkgewotICAgICAgICBpZiAoIXByZWZlcmVuY2Uu dmFsdWUpIHsKLSAgICAgICAgICBhbGVydGlmeS5hbGVydChnZXR0ZXh0KCdDb25maWd1cmF0aW9u IHJlcXVpcmVkJyksIG1zZyk7Ci0gICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICB9 IGVsc2UgewotICAgICAgICBhbGVydGlmeS5hbGVydCgKLSAgICAgICAgICBnZXR0ZXh0KCdSZXN0 b3JlIEVycm9yJyksCi0gICAgICAgICAgUyhnZXR0ZXh0KCdGYWlsZWQgdG8gbG9hZCBwcmVmZXJl bmNlICVzIG9mIG1vZHVsZSAlcycpKS5zcHJpbnRmKHByZWZlcmVuY2VfbmFtZSwgbW9kdWxlKS52 YWx1ZSgpCi0gICAgICAgICk7Ci0gICAgICAgIHJldHVybjsKLSAgICAgIH0KLQotICAgICAgdmFy IHRpdGxlID0gUyhnZXR0ZXh0KCdSZXN0b3JlICglczogJXMpJykpLAotICAgICAgICB0cmVlID0g cGdCcm93c2VyLnRyZWUsCi0gICAgICAgIGl0ZW0gPSB0cmVlSXRlbSB8fCB0cmVlLnNlbGVjdGVk KCksCi0gICAgICAgIGRhdGEgPSBpdGVtICYmIGl0ZW0ubGVuZ3RoID09IDEgJiYgdHJlZS5pdGVt RGF0YShpdGVtKSwKLSAgICAgICAgbm9kZSA9IGRhdGEgJiYgZGF0YS5fdHlwZSAmJiBwZ0Jyb3dz ZXIuTm9kZXNbZGF0YS5fdHlwZV07Ci0KLSAgICAgIGlmICghbm9kZSkKLSAgICAgICAgcmV0dXJu OwotCi0gICAgICB0aXRsZSA9IHRpdGxlLnNwcmludGYobm9kZS5sYWJlbCwgZGF0YS5sYWJlbCku dmFsdWUoKTsKLQotICAgICAgaWYgKCFhbGVydGlmeS5wZ19yZXN0b3JlKSB7Ci0gICAgICAgIC8v IENyZWF0ZSBEaWFsb2cgdGl0bGUgb24gdGhlIGZseSB3aXRoIG5vZGUgZGV0YWlscwotICAgICAg ICBhbGVydGlmeS5kaWFsb2coJ3BnX3Jlc3RvcmUnLCBmdW5jdGlvbiBmYWN0b3J5KCkgewotICAg ICAgICAgIHJldHVybiB7Ci0gICAgICAgICAgICBtYWluOiBmdW5jdGlvbih0aXRsZSwgaXRlbSwg ZGF0YSwgbm9kZSkgewotICAgICAgICAgICAgICB0aGlzLnNldCgndGl0bGUnLCB0aXRsZSk7Ci0g ICAgICAgICAgICAgIHRoaXMuc2V0dGluZygncGdfbm9kZScsIG5vZGUpOwotICAgICAgICAgICAg ICB0aGlzLnNldHRpbmcoJ3BnX2l0ZW0nLCBpdGVtKTsKLSAgICAgICAgICAgICAgdGhpcy5zZXR0 aW5nKCdwZ19pdGVtX2RhdGEnLCBkYXRhKTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBi dWlsZDogZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgIGFsZXJ0aWZ5LnBnRGlhbG9nQnVpbGQu YXBwbHkodGhpcyk7Ci0gICAgICAgICAgICB9LAotICAgICAgICAgICAgc2V0dXA6IGZ1bmN0aW9u KCkgewotICAgICAgICAgICAgICByZXR1cm4gewotICAgICAgICAgICAgICAgIGJ1dHRvbnM6IFt7 Ci0gICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKLSAgICAgICAgICAgICAgICAgIGNsYXNzTmFt ZTogJ2J0biBidG4tZGVmYXVsdCBwdWxsLWxlZnQgZmEgZmEtbGcgZmEtaW5mbycsCi0gICAgICAg ICAgICAgICAgICBhdHRyczogewotICAgICAgICAgICAgICAgICAgICBuYW1lOiAnb2JqZWN0X2hl bHAnLAotICAgICAgICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJywKLSAgICAgICAgICAgICAg ICAgICAgdXJsOiAnYmFja3VwLmh0bWwnLAotICAgICAgICAgICAgICAgICAgICBsYWJlbDogZ2V0 dGV4dCgnUmVzdG9yZScpLAotICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICB9 LCB7Ci0gICAgICAgICAgICAgICAgICB0ZXh0OiAnJywKLSAgICAgICAgICAgICAgICAgIGtleTog MTEyLAotICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiAnYnRuIGJ0bi1kZWZhdWx0IHB1bGwt bGVmdCBmYSBmYS1sZyBmYS1xdWVzdGlvbicsCi0gICAgICAgICAgICAgICAgICBhdHRyczogewot ICAgICAgICAgICAgICAgICAgICBuYW1lOiAnZGlhbG9nX2hlbHAnLAotICAgICAgICAgICAgICAg ICAgICB0eXBlOiAnYnV0dG9uJywKLSAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGdldHRleHQo J1Jlc3RvcmUnKSwKLSAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmxfZm9yKCdoZWxwLnN0YXRp YycsIHsKLSAgICAgICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnOiAncmVzdG9yZV9kaWFsb2cu aHRtbCcsCi0gICAgICAgICAgICAgICAgICAgIH0pLAotICAgICAgICAgICAgICAgICAgfSwKLSAg ICAgICAgICAgICAgICB9LCB7Ci0gICAgICAgICAgICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdSZXN0 b3JlJyksCi0gICAgICAgICAgICAgICAgICBrZXk6IDEzLAotICAgICAgICAgICAgICAgICAgY2xh c3NOYW1lOiAnYnRuIGJ0bi1wcmltYXJ5IGZhIGZhLXVwbG9hZCBwZy1hbGVydGlmeS1idXR0b24n LAotICAgICAgICAgICAgICAgICAgcmVzdG9yZTogdHJ1ZSwKLSAgICAgICAgICAgICAgICAgICdk YXRhLWJ0bi1uYW1lJzogJ3Jlc3RvcmUnLAotICAgICAgICAgICAgICAgIH0sIHsKLSAgICAgICAg ICAgICAgICAgIHRleHQ6IGdldHRleHQoJ0NhbmNlbCcpLAotICAgICAgICAgICAgICAgICAga2V5 OiAyNywKLSAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogJ2J0biBidG4tZGFuZ2VyIGZhIGZh LWxnIGZhLXRpbWVzIHBnLWFsZXJ0aWZ5LWJ1dHRvbicsCi0gICAgICAgICAgICAgICAgICByZXN0 b3JlOiBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICdkYXRhLWJ0bi1uYW1lJzogJ2NhbmNlbCcs Ci0gICAgICAgICAgICAgICAgfV0sCi0gICAgICAgICAgICAgICAgLy8gU2V0IG9wdGlvbnMgZm9y IGRpYWxvZwotICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsKLSAgICAgICAgICAgICAgICAgIHRp dGxlOiB0aXRsZSwKLSAgICAgICAgICAgICAgICAgIC8vZGlzYWJsZSBib3RoIHBhZGRpbmcgYW5k IG92ZXJmbG93IGNvbnRyb2wuCi0gICAgICAgICAgICAgICAgICBwYWRkaW5nOiAhMSwKLSAgICAg ICAgICAgICAgICAgIG92ZXJmbG93OiAhMSwKLSAgICAgICAgICAgICAgICAgIG1vZGVsOiAwLAot ICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiB0cnVlLAotICAgICAgICAgICAgICAgICAgbWF4 aW1pemFibGU6IHRydWUsCi0gICAgICAgICAgICAgICAgICBwaW5uYWJsZTogZmFsc2UsCi0gICAg ICAgICAgICAgICAgICBjbG9zYWJsZUJ5RGltbWVyOiBmYWxzZSwKLSAgICAgICAgICAgICAgICAg IG1vZGFsOiBmYWxzZSwKLSAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICB9OwotICAg ICAgICAgICAgfSwKLSAgICAgICAgICAgIGhvb2tzOiB7Ci0gICAgICAgICAgICAgIC8vIHRyaWdn ZXJlZCB3aGVuIHRoZSBkaWFsb2cgaXMgY2xvc2VkCi0gICAgICAgICAgICAgIG9uY2xvc2U6IGZ1 bmN0aW9uKCkgewotICAgICAgICAgICAgICAgIGlmICh0aGlzLnZpZXcpIHsKLSAgICAgICAgICAg ICAgICAgIHRoaXMudmlldy5yZW1vdmUoewotICAgICAgICAgICAgICAgICAgICBkYXRhOiB0cnVl LAotICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZSwKLSAgICAgICAgICAgICAgICAg ICAgc2lsZW50OiB0cnVlLAotICAgICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgICAg fQotICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgfSwKLSAgICAgICAgICAgIHNldHRpbmdz OiB7Ci0gICAgICAgICAgICAgIHBnX25vZGU6IG51bGwsCi0gICAgICAgICAgICAgIHBnX2l0ZW06 IG51bGwsCi0gICAgICAgICAgICAgIHBnX2l0ZW1fZGF0YTogbnVsbCwKLSAgICAgICAgICAgIH0s Ci0gICAgICAgICAgICBwcmVwYXJlOiBmdW5jdGlvbigpIHsKLQotICAgICAgICAgICAgICB2YXIg c2VsZiA9IHRoaXM7Ci0gICAgICAgICAgICAgIC8vIERpc2FibGUgQmFja3VwIGJ1dHRvbiB1bnRp bCB1c2VyIHByb3ZpZGVzIEZpbGVuYW1lCi0gICAgICAgICAgICAgIHRoaXMuX19pbnRlcm5hbC5i dXR0b25zWzJdLmVsZW1lbnQuZGlzYWJsZWQgPSB0cnVlOwotICAgICAgICAgICAgICB2YXIgJGNv bnRhaW5lciA9ICQoJzxkaXYgY2xhc3M9XCdyZXN0b3JlX2RpYWxvZ1wnPjwvZGl2PicpOwotICAg ICAgICAgICAgICB2YXIgdCA9IHBnQnJvd3Nlci50cmVlLAotICAgICAgICAgICAgICAgIGkgPSB0 LnNlbGVjdGVkKCksCi0gICAgICAgICAgICAgICAgZCA9IGkgJiYgaS5sZW5ndGggPT0gMSA/IHQu aXRlbURhdGEoaSkgOiB1bmRlZmluZWQsCi0gICAgICAgICAgICAgICAgbm9kZSA9IGQgJiYgcGdC cm93c2VyLk5vZGVzW2QuX3R5cGVdOwotCi0gICAgICAgICAgICAgIGlmICghZCkKLSAgICAgICAg ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgICAgdmFyIHRyZWVJbmZvID0gbm9kZS5nZXRU cmVlTm9kZUhpZXJhcmNoeS5hcHBseShub2RlLCBbaV0pOwotCi0gICAgICAgICAgICAgIHZhciBu ZXdNb2RlbCA9IG5ldyBSZXN0b3JlT2JqZWN0TW9kZWwoewotICAgICAgICAgICAgICAgICAgbm9k ZV9kYXRhOiBub2RlLAotICAgICAgICAgICAgICAgIH0sIHsKLSAgICAgICAgICAgICAgICAgIG5v ZGVfaW5mbzogdHJlZUluZm8sCi0gICAgICAgICAgICAgICAgfSksCi0gICAgICAgICAgICAgICAg ZmllbGRzID0gQmFja2Zvcm0uZ2VuZXJhdGVWaWV3U2NoZW1hKAotICAgICAgICAgICAgICAgICAg dHJlZUluZm8sIG5ld01vZGVsLCAnY3JlYXRlJywgbm9kZSwgdHJlZUluZm8uc2VydmVyLCB0cnVl Ci0gICAgICAgICAgICAgICAgKTsKLQotICAgICAgICAgICAgICB2YXIgdmlldyA9IHRoaXMudmll dyA9IG5ldyBCYWNrZm9ybS5EaWFsb2coewotICAgICAgICAgICAgICAgIGVsOiAkY29udGFpbmVy LAotICAgICAgICAgICAgICAgIG1vZGVsOiBuZXdNb2RlbCwKLSAgICAgICAgICAgICAgICBzY2hl bWE6IGZpZWxkcywKLSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgICAgJCh0aGlzLmVs ZW1lbnRzLmJvZHkuY2hpbGROb2Rlc1swXSkuYWRkQ2xhc3MoCi0gICAgICAgICAgICAgICAgJ2Fs ZXJ0aWZ5X3Rvb2xzX2RpYWxvZ19wcm9wZXJ0aWVzIG9ial9wcm9wZXJ0aWVzJwotICAgICAgICAg ICAgICApOwotCi0gICAgICAgICAgICAgIHZpZXcucmVuZGVyKCk7Ci0KLSAgICAgICAgICAgICAg dGhpcy5lbGVtZW50cy5jb250ZW50LmFwcGVuZENoaWxkKCRjb250YWluZXIuZ2V0KDApKTsKLQot ICAgICAgICAgICAgICB2aWV3LiRlbC5hdHRyKCd0YWJpbmRleCcsIC0xKTsKLSAgICAgICAgICAg ICAgLy8gdmFyIGRpYWxvZ1RhYk5hdmlnYXRvciA9IHBnQnJvd3Nlci5rZXlib2FyZE5hdmlnYXRp b24uZ2V0RGlhbG9nVGFiTmF2aWdhdG9yKHZpZXcpOwotICAgICAgICAgICAgICBwZ0Jyb3dzZXIu a2V5Ym9hcmROYXZpZ2F0aW9uLmdldERpYWxvZ1RhYk5hdmlnYXRvcih2aWV3KTsKLSAgICAgICAg ICAgICAgdmFyIGNvbnRhaW5lciA9IHZpZXcuJGVsLmZpbmQoJy50YWItY29udGVudDpmaXJzdCA+ IC50YWItcGFuZS5hY3RpdmU6Zmlyc3QnKTsKLSAgICAgICAgICAgICAgY29tbW9uVXRpbHMuZmlu ZEFuZFNldEZvY3VzKGNvbnRhaW5lcik7Ci0KLSAgICAgICAgICAgICAgLy8gTGlzdGVuIHRvIG1v ZGVsICYgaWYgZmlsZW5hbWUgaXMgcHJvdmlkZWQgdGhlbiBlbmFibGUgQmFja3VwIGJ1dHRvbgot ICAgICAgICAgICAgICB0aGlzLnZpZXcubW9kZWwub24oJ2NoYW5nZScsIGZ1bmN0aW9uKCkgewot ICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh0aGlzLmdldCgnZmlsZScpKSAmJiB0 aGlzLmdldCgnZmlsZScpICE9PSAnJykgewotICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1v ZGVsLmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICBzZWxmLl9faW50ZXJuYWwuYnV0dG9uc1sy XS5lbGVtZW50LmRpc2FibGVkID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg ICAgICAgICAgICAgICAgIHNlbGYuX19pbnRlcm5hbC5idXR0b25zWzJdLmVsZW1lbnQuZGlzYWJs ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgnZmlsZScs IGdldHRleHQoJ1BsZWFzZSBwcm92aWRlIGZpbGVuYW1lJykpOwotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAvLyBDYWxs YmFjayBmdW5jdGlvbnMgd2hlbiBjbGljayBvbiB0aGUgYnV0dG9ucyBvZiB0aGUgQWxlcnRpZnkg ZGlhbG9ncwotICAgICAgICAgICAgY2FsbGJhY2s6IGZ1bmN0aW9uKGUpIHsKLSAgICAgICAgICAg ICAgLy8gRmV0Y2ggY3VycmVudCBzZXJ2ZXIgaWQKLSAgICAgICAgICAgICAgdmFyIHQgPSBwZ0Jy b3dzZXIudHJlZSwKLSAgICAgICAgICAgICAgICBpID0gdGhpcy5zZXR0aW5nc1sncGdfaXRlbSdd IHx8IHQuc2VsZWN0ZWQoKSwKLSAgICAgICAgICAgICAgICBkID0gdGhpcy5zZXR0aW5nc1sncGdf aXRlbV9kYXRhJ10gfHwgKAotICAgICAgICAgICAgICAgICAgaSAmJiBpLmxlbmd0aCA9PSAxID8g dC5pdGVtRGF0YShpKSA6IHVuZGVmaW5lZAotICAgICAgICAgICAgICAgICksCi0gICAgICAgICAg ICAgICAgbm9kZSA9IHRoaXMuc2V0dGluZ3NbJ3BnX25vZGUnXSB8fCAoCi0gICAgICAgICAgICAg ICAgICBkICYmIHBnQnJvd3Nlci5Ob2Rlc1tkLl90eXBlXQotICAgICAgICAgICAgICAgICk7Ci0K LSAgICAgICAgICAgICAgaWYgKGUuYnV0dG9uLmVsZW1lbnQubmFtZSA9PSAnZGlhbG9nX2hlbHAn IHx8IGUuYnV0dG9uLmVsZW1lbnQubmFtZSA9PSAnb2JqZWN0X2hlbHAnKSB7Ci0gICAgICAgICAg ICAgICAgZS5jYW5jZWwgPSB0cnVlOwotICAgICAgICAgICAgICAgIHBnQnJvd3Nlci5zaG93SGVs cChlLmJ1dHRvbi5lbGVtZW50Lm5hbWUsIGUuYnV0dG9uLmVsZW1lbnQuZ2V0QXR0cmlidXRlKCd1 cmwnKSwKLSAgICAgICAgICAgICAgICAgIG5vZGUsIGksIGUuYnV0dG9uLmVsZW1lbnQuZ2V0QXR0 cmlidXRlKCdsYWJlbCcpKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAg IH0KLQotICAgICAgICAgICAgICBpZiAoZS5idXR0b25bJ2RhdGEtYnRuLW5hbWUnXSA9PT0gJ3Jl c3RvcmUnKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFkKQotICAgICAgICAgICAgICAgICAgcmV0 dXJuOwotCi0gICAgICAgICAgICAgICAgdmFyIGluZm8gPSBub2RlLmdldFRyZWVOb2RlSGllcmFy Y2h5LmFwcGx5KG5vZGUsIFtpXSksCi0gICAgICAgICAgICAgICAgICBtID0gdGhpcy52aWV3Lm1v ZGVsOwotICAgICAgICAgICAgICAgIC8vIFNldCBjdXJyZW50IG5vZGUgaW5mbyBpbnRvIG1vZGVs Ci0gICAgICAgICAgICAgICAgbS5zZXQoJ2RhdGFiYXNlJywgaW5mby5kYXRhYmFzZS5fbGFiZWwp OwotICAgICAgICAgICAgICAgIGlmICghbS5nZXQoJ2N1c3RvbScpKSB7Ci0gICAgICAgICAgICAg ICAgICBzd2l0Y2ggKGQuX3R5cGUpIHsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJ3NjaGVtYSc6 Ci0gICAgICAgICAgICAgICAgICAgIG0uc2V0KCdzY2hlbWFzJywgW2QuX2xhYmVsXSk7Ci0gICAg ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgY2FzZSAndGFibGUnOgot ICAgICAgICAgICAgICAgICAgICBtLnNldCgnc2NoZW1hcycsIFtpbmZvLnNjaGVtYS5fbGFiZWxd KTsKLSAgICAgICAgICAgICAgICAgICAgbS5zZXQoJ3RhYmxlcycsIFtkLl9sYWJlbF0pOwotICAg ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9u JzoKLSAgICAgICAgICAgICAgICAgICAgbS5zZXQoJ3NjaGVtYXMnLCBbaW5mby5zY2hlbWEuX2xh YmVsXSk7Ci0gICAgICAgICAgICAgICAgICAgIG0uc2V0KCdmdW5jdGlvbnMnLCBbZC5fbGFiZWxd KTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICBjYXNlICdp bmRleCc6Ci0gICAgICAgICAgICAgICAgICAgIG0uc2V0KCdzY2hlbWFzJywgW2luZm8uc2NoZW1h Ll9sYWJlbF0pOwotICAgICAgICAgICAgICAgICAgICBtLnNldCgnaW5kZXhlcycsIFtkLl9sYWJl bF0pOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgIGNhc2Ug J3RyaWdnZXInOgotICAgICAgICAgICAgICAgICAgICBtLnNldCgnc2NoZW1hcycsIFtpbmZvLnNj aGVtYS5fbGFiZWxdKTsKLSAgICAgICAgICAgICAgICAgICAgbS5zZXQoJ3RyaWdnZXJzJywgW2Qu X2xhYmVsXSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAg Y2FzZSAndHJpZ2dlcl9mdW5jJzoKLSAgICAgICAgICAgICAgICAgICAgbS5zZXQoJ3NjaGVtYXMn LCBbaW5mby5zY2hlbWEuX2xhYmVsXSk7Ci0gICAgICAgICAgICAgICAgICAgIG0uc2V0KCd0cmln Z2VyX2Z1bmNzJywgW2QuX2xhYmVsXSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg ICAgICAvLyBUT0RPOjoKLSAgICAgICAgICAgICAgICAgIC8vIFdoZW4gd2Ugd2lsbCBpbXBsZW1l bnQgdGhlIG9iamVjdCBzZWxlY3Rpb24gaW4gdGhlCi0gICAgICAgICAgICAgICAgICAvLyBpbXBv cnQgZGlhbG9nLCB3ZSB3aWxsIG5lZWQgdG8gc2VsZWN0IHRoZSBvYmplY3RzIGZyb20KLSAgICAg ICAgICAgICAgICAgIC8vIHRoZSB0cmVlIHNlbGVjdGlvbiB0YWIuCi0gICAgICAgICAgICAgICAg fQotCi0gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAotICAgICAgICAgICAgICAgICAg YmFzZVVybCA9IHVybF9mb3IoJ3Jlc3RvcmUuY3JlYXRlX2pvYicsIHsKLSAgICAgICAgICAgICAg ICAgICAgJ3NpZCc6IGluZm8uc2VydmVyLl9pZCwKLSAgICAgICAgICAgICAgICAgIH0pLAotICAg ICAgICAgICAgICAgICAgYXJncyA9IHRoaXMudmlldy5tb2RlbC50b0pTT04oKTsKLQotICAgICAg ICAgICAgICAgICQuYWpheCh7Ci0gICAgICAgICAgICAgICAgICB1cmw6IGJhc2VVcmwsCi0gICAg ICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywKLSAgICAgICAgICAgICAgICAgIGRhdGE6IHsK LSAgICAgICAgICAgICAgICAgICAgJ2RhdGEnOiBKU09OLnN0cmluZ2lmeShhcmdzKSwKLSAgICAg ICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMp IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzKSB7Ci0gICAgICAgICAgICAg ICAgICAgICAgYWxlcnRpZnkuc3VjY2VzcygKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldHRl eHQoJ1Jlc3RvcmUgam9iIGNyZWF0ZWQuJyksIDUKLSAgICAgICAgICAgICAgICAgICAgICApOwot ICAgICAgICAgICAgICAgICAgICAgIHBnQnJvd3Nlci5FdmVudHMudHJpZ2dlcigncGdhZG1pbi1i Z3Byb2Nlc3M6Y3JlYXRlZCcsIHNlbGYpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot ICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihyZXMpOwotICAgICAgICAgICAgICAg ICAgICB9Ci0gICAgICAgICAgICAgICAgICB9LAotICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1 bmN0aW9uKHhocikgewotICAgICAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAg ICAgICAgIHZhciBlcnIgPSAkLnBhcnNlSlNPTih4aHIucmVzcG9uc2VUZXh0KTsKLSAgICAgICAg ICAgICAgICAgICAgICBhbGVydGlmeS5hbGVydCgKLSAgICAgICAgICAgICAgICAgICAgICAgIGdl dHRleHQoJ1Jlc3RvcmUgZmFpbGVkLicpLAotICAgICAgICAgICAgICAgICAgICAgICAgZXJyLmVy cm9ybXNnCi0gICAgICAgICAgICAgICAgICAgICAgKTsKLSAgICAgICAgICAgICAgICAgICAgfSBj YXRjaCAoZSkgewotICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlLnN0YWNrIHx8 IGUpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICB9LAotICAgICAg ICAgICAgICAgIH0pOwotICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9LAotICAgICAgICAg IH07Ci0gICAgICAgIH0pOwotICAgICAgfQotCi0gICAgICBhbGVydGlmeS5wZ19yZXN0b3JlKHRp dGxlLCBpdGVtLCBkYXRhLCBub2RlKS5yZXNpemVUbygnNjUlJywgJzYwJScpOworICAgICAgbGV0 IGRpYWxvZyA9IG5ldyByZXN0b3JlRGlhbG9nLlJlc3RvcmVEaWFsb2cocGdCcm93c2VyLCAkLCBh bGVydGlmeSwgUmVzdG9yZU9iamVjdE1vZGVsKTsKKyAgICAgIGRpYWxvZy5kcmF3KGFjdGlvbiwg dHJlZUl0ZW0pOwogICAgIH0sCiAgIH07CiAgIHJldHVybiBwZ0Jyb3dzZXIuUmVzdG9yZTsKZGlm ZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvYmFja2Zvcm1fY29udHJvbHMva2V5 Ym9hcmRzaG9ydGN1dF9zcGVjLmpzIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9iYWNrZm9y bV9jb250cm9scy9rZXlib2FyZHNob3J0Y3V0X3NwZWMuanMKaW5kZXggMDJmMDcxNWMuLjQwNGNj MzY1IDEwMDY0NAotLS0gYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2JhY2tmb3JtX2NvbnRy b2xzL2tleWJvYXJkc2hvcnRjdXRfc3BlYy5qcworKysgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2Ny aXB0L2JhY2tmb3JtX2NvbnRyb2xzL2tleWJvYXJkc2hvcnRjdXRfc3BlYy5qcwpAQCAtMTIsMTYg KzEyLDE2IEBAIGRlZmluZShbCiAgICdwZ2FkbWluLmJhY2tmb3JtJywKIF0sIGZ1bmN0aW9uICgk LCBCYWNrYm9uZSwgQmFja2Zvcm0pIHsKICAgZGVzY3JpYmUoJ0tleWJvYXJkc2hvcnRjdXRDb250 cm9sJywgZnVuY3Rpb24gKCkgewotICAgIGxldCBmaWVsZCwgaW5uZXJGaWVsZHMsIGNvbnRyb2ws IG1vZGVsLCBldmVudDsKKyAgICBsZXQgZmllbGQsIGlubmVyRmllbGRzLCBjb250cm9sLCBtb2Rl bDsKIAogICAgIGJlZm9yZUVhY2goKCkgPT4gewogCiAgICAgICBpbm5lckZpZWxkcyA9IFsKICAg ICAgICAgeyduYW1lJzogJ2tleScsICd0eXBlJzogJ2tleUNvZGUnLCAnbGFiZWwnOiAnS2V5J30s CiAgICAgICAgIHsnbmFtZSc6ICdhbHRfb3B0aW9uJywgJ3R5cGUnOiAnY2hlY2tib3gnLAotICAg ICAgICAgJ2xhYmVsJzogJ0FsdC9PcHRpb24nfSwKKyAgICAgICAgICAnbGFiZWwnOiAnQWx0L09w dGlvbid9LAogICAgICAgICB7J25hbWUnOiAnY29udHJvbCcsICd0eXBlJzogJ2NoZWNrYm94JywK LSAgICAgICAgICdsYWJlbCc6ICdDdHJsJ30sCisgICAgICAgICAgJ2xhYmVsJzogJ0N0cmwnfSwK ICAgICAgICAgeyduYW1lJzogJ3NoaWZ0JywgJ3R5cGUnOiAnY2hlY2tib3gnLCAnbGFiZWwnOiAn U2hpZnQnfSwKICAgICAgIF07CiAKQEAgLTkxLDcgKzkxLDcgQEAgZGVmaW5lKFsKICAgICAgICAg ICAgICdrZXknOiB7CiAgICAgICAgICAgICAgICdrZXlfY29kZSc6IDY1LAogICAgICAgICAgICAg ICAnY2hhcic6ICdBJywKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCiAgICAgICAgICAg fSkKICAgICAgICAgKTsKIApAQCAtMTI4LDcgKzEyOCw3IEBAIGRlZmluZShbCiAKICAgICAgICAg bW9kZWwuc2V0KGZpZWxkLmdldCgnbmFtZScpLAogICAgICAgICAgICQuZXh0ZW5kKHRydWUsIHZh bCwgewotICAgICAgICAgICAgJ2NvbnRyb2wnOiBmYWxzZQorICAgICAgICAgICAgJ2NvbnRyb2wn OiBmYWxzZSwKICAgICAgICAgICB9KQogICAgICAgICApOwogCkBAIC0xNjUsNyArMTY1LDcgQEAg ZGVmaW5lKFsKIAogICAgICAgICBtb2RlbC5zZXQoZmllbGQuZ2V0KCduYW1lJyksCiAgICAgICAg ICAgJC5leHRlbmQodHJ1ZSwgdmFsLCB7Ci0gICAgICAgICAgICAnc2hpZnQnOiB0cnVlCisgICAg ICAgICAgICAnc2hpZnQnOiB0cnVlLAogICAgICAgICAgIH0pCiAgICAgICAgICk7CiAKQEAgLTIw Miw3ICsyMDIsNyBAQCBkZWZpbmUoWwogCiAgICAgICAgIG1vZGVsLnNldChmaWVsZC5nZXQoJ25h bWUnKSwKICAgICAgICAgICAkLmV4dGVuZCh0cnVlLCB2YWwsIHsKLSAgICAgICAgICAgICdhbHRf b3B0aW9uJzogZmFsc2UKKyAgICAgICAgICAgICdhbHRfb3B0aW9uJzogZmFsc2UsCiAgICAgICAg ICAgfSkKICAgICAgICAgKTsKIApAQCAtMzg3LDE0ICszODcsMTQgQEAgZGVmaW5lKFsKICAgICAg ICAgICAvLyB0aGlzIHNob3VsZCBjaGFuZ2UKICAgICAgICAgICBleHBlY3QoY29udHJvbC4kZWwu ZmluZCgnaW5wdXQ6Y2hlY2tib3hbbmFtZT0iYWx0X29wdGlvbiJdJylbMF0uY2hlY2tlZCkudG9C ZUZhbHN5KCk7CiAgICAgICAgICAgZXhwZWN0KG1vZGVsLmdldChmaWVsZC5nZXQoJ25hbWUnKSkp LnRvRXF1YWwoewotICAgICAgICAgICdjb250cm9sJzogdHJ1ZSwKLSAgICAgICAgICAnc2hpZnQn OiBmYWxzZSwKLSAgICAgICAgICAnYWx0X29wdGlvbic6IGZhbHNlLAotICAgICAgICAgICdrZXkn OiB7Ci0gICAgICAgICAgICAna2V5X2NvZGUnOiA3MywKLSAgICAgICAgICAgICdjaGFyJzogJ0kn LAotICAgICAgICAgIH0sCi0gICAgICAgIH0pOworICAgICAgICAgICAgJ2NvbnRyb2wnOiB0cnVl LAorICAgICAgICAgICAgJ3NoaWZ0JzogZmFsc2UsCisgICAgICAgICAgICAnYWx0X29wdGlvbic6 IGZhbHNlLAorICAgICAgICAgICAgJ2tleSc6IHsKKyAgICAgICAgICAgICAgJ2tleV9jb2RlJzog NzMsCisgICAgICAgICAgICAgICdjaGFyJzogJ0knLAorICAgICAgICAgICAgfSwKKyAgICAgICAg ICB9KTsKIAogICAgICAgICAgIC8vIGJlbG93IHRocmVlIHNob3VsZCBub3QgY2hhbmdlLgogICAg ICAgICAgIGV4cGVjdChjb250cm9sLiRlbC5maW5kKCdpbnB1dDpjaGVja2JveFtuYW1lPSJzaGlm dCJdJylbMF0uY2hlY2tlZCkudG9CZUZhbHN5KCk7CkBAIC00MzEsNCArNDMxLDQgQEAgZGVmaW5l KFsKICAgICB9KTsKIAogICB9KTsKLX0pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30p OwpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9iYWNrZm9ybV9jb250cm9s cy9rZXljb2RlX3NwZWMuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2JhY2tmb3JtX2Nv bnRyb2xzL2tleWNvZGVfc3BlYy5qcwppbmRleCBkNzFlZjQ4Yy4uNmU1N2Q5NzIgMTAwNjQ0Ci0t LSBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvYmFja2Zvcm1fY29udHJvbHMva2V5Y29kZV9z cGVjLmpzCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvYmFja2Zvcm1fY29udHJvbHMv a2V5Y29kZV9zcGVjLmpzCkBAIC0xOCw4ICsxOCw4IEBAIGRlZmluZShbCiAgICAgICAgICdrZXkn OiB7CiAgICAgICAgICAgJ2tleV9jb2RlJzogNjUsCiAgICAgICAgICAgJ2NoYXInOiAnQScsCi0g ICAgICAgICAgfQotICAgICAgICB9KTsKKyAgICAgICAgfSwKKyAgICAgIH0pOwogCiAgICAgICBm aWVsZCA9IG5ldyBCYWNrZm9ybS5GaWVsZCh7CiAgICAgICAgIGlkOiAna2V5JywKZGlmZiAtLWdp dCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvYmFja3VwL2JhY2t1cF9kaWFsb2dfc3BlYy5q cyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvYmFja3VwL2JhY2t1cF9kaWFsb2dfc3BlYy5q cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYzJkYTYxYzQKLS0tIC9kZXYv bnVsbAorKysgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2JhY2t1cC9iYWNrdXBfZGlhbG9n X3NwZWMuanMKQEAgLTAsMCArMSwxOTAgQEAKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisvLyBwZ0FkbWluIDQgLSBQb3N0 Z3JlU1FMIFRvb2xzCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOCwgVGhlIHBnQWRt aW4gRGV2ZWxvcG1lbnQgVGVhbQorLy8gVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0 aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisvLworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2ltcG9ydCB7QmFja3VwRGlhbG9nfSBm cm9tICcuLi8uLi8uLi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNrdXAvYmFja3VwX2RpYWxvZyc7Citp bXBvcnQge1RyZWVGYWtlfSBmcm9tICcuLi90cmVlL3RyZWVfZmFrZSc7CitpbXBvcnQge1RyZWVO b2RlfSBmcm9tICcuLi8uLi8uLi9wZ2FkbWluL3N0YXRpYy9qcy90cmVlL3RyZWUnOworCitjb25z dCBjb250ZXh0ID0gZGVzY3JpYmU7CisKK2Rlc2NyaWJlKCdPYmplY3RCYWNrdXBEaWFsb2cnLCAo KSA9PiB7CisgIGxldCBiYWNrdXBEaWFsb2c7CisgIGxldCBwZ0Jyb3dzZXI7CisgIGxldCBqcXVl cnlTcHk7CisgIGxldCBhbGVydGlmeVNweTsKKyAgbGV0IGJhY2t1cE1vZGVsU3B5OworCisKKyAg bGV0IHJvb3ROb2RlOworICBsZXQgc2VydmVyVHJlZU5vZGU7CisgIGxldCBkYXRhYmFzZVRyZWVO b2RlOworICBsZXQgcHBhc1NlcnZlclRyZWVOb2RlOworICBsZXQgbm9EYXRhTm9kZTsKKworICBi ZWZvcmVFYWNoKCgpID0+IHsKKyAgICBwZ0Jyb3dzZXIgPSB7CisgICAgICB0cmVlTWVudTogbmV3 IFRyZWVGYWtlKCksCisgICAgICBOb2RlczogeworICAgICAgICBzZXJ2ZXI6IHsKKyAgICAgICAg ICBoYXNJZDogdHJ1ZSwKKyAgICAgICAgICBsYWJlbDogJ3NlcnZlcicsCisgICAgICAgICAgZ2V0 VHJlZU5vZGVIaWVyYXJjaHk6IGphc21pbmUuY3JlYXRlU3B5KCdzZXJ2ZXIuZ2V0VHJlZU5vZGVI aWVyYXJjaHknKSwKKyAgICAgICAgfSwKKyAgICAgICAgZGF0YWJhc2U6IHsKKyAgICAgICAgICBo YXNJZDogdHJ1ZSwKKyAgICAgICAgICBsYWJlbDogJ2RhdGFiYXNlJywKKyAgICAgICAgICBnZXRU cmVlTm9kZUhpZXJhcmNoeTogamFzbWluZS5jcmVhdGVTcHkoJ2RiLmdldFRyZWVOb2RlSGllcmFy Y2h5JyksCisgICAgICAgIH0sCisgICAgICAgIHNjaGVtYTogeworICAgICAgICAgIGhhc0lkOiB0 cnVlLAorICAgICAgICAgIGxhYmVsOiAnc2NoZW1hJywKKyAgICAgICAgICBnZXRUcmVlTm9kZUhp ZXJhcmNoeTogamFzbWluZS5jcmVhdGVTcHkoJ2RiLmdldFRyZWVOb2RlSGllcmFyY2h5JyksCisg ICAgICAgIH0sCisgICAgICB9LAorICAgIH07CisgICAgcGdCcm93c2VyLk5vZGVzLnNlcnZlci5o YXNJZCA9IHRydWU7CisgICAgcGdCcm93c2VyLk5vZGVzLmRhdGFiYXNlLmhhc0lkID0gdHJ1ZTsK KyAgICBqcXVlcnlTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgnanF1ZXJ5U3B5Jyk7CisgICAgYmFj a3VwTW9kZWxTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgnYmFja3VwTW9kZWxTcHknKTsKKworICAg IHJvb3ROb2RlID0gcGdCcm93c2VyLnRyZWVNZW51LmFkZE5ld05vZGUoJ2xldmVsMScsIHt9LCBb XSk7CisKKyAgICBzZXJ2ZXJUcmVlTm9kZSA9IG5ldyBUcmVlTm9kZSgnbGV2ZWwxLjEnLCB7Cisg ICAgICBfdHlwZTogJ3NlcnZlcicsCisgICAgICBfaWQ6IDEwLAorICAgIH0pOworICAgIHBnQnJv d3Nlci50cmVlTWVudS5hZGRDaGlsZChyb290Tm9kZSwgc2VydmVyVHJlZU5vZGUpOworCisgICAg ZGF0YWJhc2VUcmVlTm9kZSA9IG5ldyBUcmVlTm9kZSgKKyAgICAgICdsZXZlbDEuMS4xJywgewor ICAgICAgICBfdHlwZTogJ2RhdGFiYXNlJywKKyAgICAgICAgX2lkOiAxMSwKKyAgICAgICAgbGFi ZWw6ICdzb21lX2RhdGFiYXNlJywKKyAgICAgICAgX2xhYmVsOiAnc29tZV9kYXRhYmFzZV9sYWJl bCcsCisgICAgICB9LCBbe2lkOiAnbGV2ZWwxLjEuMSd9XSk7CisgICAgcGdCcm93c2VyLnRyZWVN ZW51LmFkZENoaWxkKHNlcnZlclRyZWVOb2RlLCBkYXRhYmFzZVRyZWVOb2RlKTsKKworICAgIHBw YXNTZXJ2ZXJUcmVlTm9kZSA9IG5ldyBUcmVlTm9kZSgnbGV2ZWwxLjInLCB7CisgICAgICBfdHlw ZTogJ3NlcnZlcicsCisgICAgICBzZXJ2ZXJfdHlwZTogJ3BwYXMnLAorICAgIH0pOworICAgIHBn QnJvd3Nlci50cmVlTWVudS5hZGRDaGlsZChyb290Tm9kZSwgcHBhc1NlcnZlclRyZWVOb2RlKTsK KworICAgIGNvbnN0IHNvbWVOb2RlVW5kZXJuZWF0aFBQQVNTZXJ2ZXIgPSBuZXcgVHJlZU5vZGUo J2xldmVsMycsIHt9KTsKKyAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuYWRkQ2hpbGQocHBhc1NlcnZl clRyZWVOb2RlLAorICAgICAgc29tZU5vZGVVbmRlcm5lYXRoUFBBU1NlcnZlcik7CisKKyAgICBu b0RhdGFOb2RlID0gbmV3IFRyZWVOb2RlKAorICAgICAgJ2xldmVsMy4xJywgdW5kZWZpbmVkKTsK KyAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuYWRkQ2hpbGQoc29tZU5vZGVVbmRlcm5lYXRoUFBBU1Nl cnZlciwgbm9EYXRhTm9kZSk7CisgIH0pOworCisgIGRlc2NyaWJlKCcjZHJhdycsICgpID0+IHsK KyAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgIGFsZXJ0aWZ5U3B5ID0gamFzbWluZS5jcmVh dGVTcHlPYmooJ2FsZXJ0aWZ5JywgWydhbGVydCcsICdkaWFsb2cnXSk7CisgICAgICBhbGVydGlm eVNweVsnYmFja3VwX29iamVjdHMnXSA9IGphc21pbmUuY3JlYXRlU3B5KCdiYWNrdXBfb2JqZWN0 cycpOworICAgICAgYmFja3VwRGlhbG9nID0gbmV3IEJhY2t1cERpYWxvZygKKyAgICAgICAgcGdC cm93c2VyLAorICAgICAgICBqcXVlcnlTcHksCisgICAgICAgIGFsZXJ0aWZ5U3B5LAorICAgICAg ICBiYWNrdXBNb2RlbFNweQorICAgICAgKTsKKworICAgICAgcGdCcm93c2VyLmdldF9wcmVmZXJl bmNlID0gamFzbWluZS5jcmVhdGVTcHkoJ2dldF9wcmVmZXJlbmNlcycpOworICAgIH0pOworCisg ICAgY29udGV4dCgndGhlcmUgYXJlIG5vIGFuY2VzdG9ycyBvZiB0aGUgdHlwZSBzZXJ2ZXInLCAo KSA9PiB7CisgICAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEgZGlhbG9nJywgKCkgPT4geworICAg ICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2VsZWN0Tm9kZShbcm9vdE5vZGVdKTsKKyAgICAgICAg YmFja3VwRGlhbG9nLmRyYXcobnVsbCwgbnVsbCwgbnVsbCk7CisgICAgICAgIGV4cGVjdChhbGVy dGlmeVNweVsnYmFja3VwX29iamVjdHMnXSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICAg IH0pOworCisgICAgICBpdCgnZGlzcGxheSBhbiBhbGVydCB3aXRoIGEgQmFja3VwIEVycm9yJywg KCkgPT4geworICAgICAgICBiYWNrdXBEaWFsb2cuZHJhdyhudWxsLCBbcm9vdE5vZGVdLCBudWxs KTsKKyAgICAgICAgZXhwZWN0KGFsZXJ0aWZ5U3B5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0 aCgKKyAgICAgICAgICAnQmFja3VwIEVycm9yJywKKyAgICAgICAgICAnUGxlYXNlIHNlbGVjdCBz ZXJ2ZXIgb3IgY2hpbGQgbm9kZSBmcm9tIHRoZSBicm93c2VyIHRyZWUuJworICAgICAgICApOwor ICAgICAgfSk7CisgICAgfSk7CisKKyAgICBjb250ZXh0KCd0aGVyZSBpcyBhbiBhbmNlc3RvciBv ZiB0aGUgdHlwZSBzZXJ2ZXInLCAoKSA9PiB7CisgICAgICBjb250ZXh0KCdubyBwcmVmZXJlbmNl IGNhbiBiZSBmb3VuZCcsICgpID0+IHsKKyAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAg ICAgICAgcGdCcm93c2VyLmdldF9wcmVmZXJlbmNlLmFuZC5yZXR1cm5WYWx1ZSh1bmRlZmluZWQp OworICAgICAgICB9KTsKKworICAgICAgICBjb250ZXh0KCdzZXJ2ZXIgaXMgYSBwcGFzIHNlcnZl cicsICgpID0+IHsKKyAgICAgICAgICBpdCgnZGlzcGxheSBhbiBhbGVydCB3aXRoICJCYWNrdXAg RXJyb3IiJywgKCkgPT4geworICAgICAgICAgICAgYmFja3VwRGlhbG9nLmRyYXcobnVsbCwgW3tp ZDogJ2xldmVsMS4xLjEnfV0sIG51bGwpOworICAgICAgICAgICAgZXhwZWN0KGFsZXJ0aWZ5U3B5 LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAgICAgJ0JhY2t1cCBFcnJv cicsCisgICAgICAgICAgICAgICdGYWlsZWQgdG8gbG9hZCBwcmVmZXJlbmNlIHBnX2Jpbl9kaXIg b2YgbW9kdWxlIHBhdGhzJworICAgICAgICAgICAgKTsKKyAgICAgICAgICB9KTsKKyAgICAgICAg fSk7CisKKyAgICAgICAgY29udGV4dCgnc2VydmVyIGlzIG5vdCBhIHBwYXMgc2VydmVyJywgKCkg PT4geworICAgICAgICAgIGl0KCdkaXNwbGF5IGFuIGFsZXJ0IHdpdGggIkJhY2t1cCBFcnJvciIn LCAoKSA9PiB7CisgICAgICAgICAgICBiYWNrdXBEaWFsb2cuZHJhdyhudWxsLCBbcHBhc1NlcnZl clRyZWVOb2RlXSwgbnVsbCk7CisgICAgICAgICAgICBleHBlY3QoYWxlcnRpZnlTcHkuYWxlcnQp LnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAgICAgICAnQmFja3VwIEVycm9yJywKKyAg ICAgICAgICAgICAgJ0ZhaWxlZCB0byBsb2FkIHByZWZlcmVuY2UgcHBhc19iaW5fZGlyIG9mIG1v ZHVsZSBwYXRocycKKyAgICAgICAgICAgICk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOwor ICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3ByZWZlcmVuY2UgY2FuIGJlIGZvdW5kJywgKCkg PT4geworICAgICAgICBjb250ZXh0KCdiaW5hcnkgZm9sZGVyIGlzIG5vdCBjb25maWd1cmVkJywg KCkgPT4geworICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICAgICAgcGdCcm93 c2VyLmdldF9wcmVmZXJlbmNlLmFuZC5yZXR1cm5WYWx1ZSh7fSk7CisgICAgICAgICAgfSk7CisK KyAgICAgICAgICBjb250ZXh0KCdzZXJ2ZXIgaXMgYSBwcGFzIHNlcnZlcicsICgpID0+IHsKKyAg ICAgICAgICAgIGl0KCdkaXNwbGF5IGFuIGFsZXJ0IHdpdGggIkNvbmZpZ3VyYXRpb24gcmVxdWly ZWQiJywgKCkgPT4geworICAgICAgICAgICAgICBiYWNrdXBEaWFsb2cuZHJhdyhudWxsLCBbc2Vy dmVyVHJlZU5vZGVdLCBudWxsKTsKKyAgICAgICAgICAgICAgZXhwZWN0KGFsZXJ0aWZ5U3B5LmFs ZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAgICAgICAnQ29uZmlndXJhdGlv biByZXF1aXJlZCcsCisgICAgICAgICAgICAgICAgJ1BsZWFzZSBjb25maWd1cmUgdGhlIFBvc3Rn cmVTUUwgQmluYXJ5IFBhdGggaW4gdGhlIFByZWZlcmVuY2VzIGRpYWxvZy4nCisgICAgICAgICAg ICAgICk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIGNvbnRl eHQoJ3NlcnZlciBpcyBub3QgYSBwcGFzIHNlcnZlcicsICgpID0+IHsKKyAgICAgICAgICAgIGl0 KCdkaXNwbGF5IGFuIGFsZXJ0IHdpdGggIkNvbmZpZ3VyYXRpb24gcmVxdWlyZWQiJywgKCkgPT4g eworICAgICAgICAgICAgICBiYWNrdXBEaWFsb2cuZHJhdyhudWxsLCBbcHBhc1NlcnZlclRyZWVO b2RlXSwgbnVsbCk7CisgICAgICAgICAgICAgIGV4cGVjdChhbGVydGlmeVNweS5hbGVydCkudG9I YXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAgICAgICAgICAgJ0NvbmZpZ3VyYXRpb24gcmVxdWly ZWQnLAorICAgICAgICAgICAgICAgICdQbGVhc2UgY29uZmlndXJlIHRoZSBFREIgQWR2YW5jZWQg U2VydmVyIEJpbmFyeSBQYXRoIGluIHRoZSBQcmVmZXJlbmNlcyBkaWFsb2cuJworICAgICAgICAg ICAgICApOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisg ICAgICAgIGNvbnRleHQoJ2JpbmFyeSBmb2xkZXIgaXMgY29uZmlndXJlZCcsICgpID0+IHsKKyAg ICAgICAgICBsZXQgYmFja3VwRGlhbG9nUmVzaXplVG9TcHk7CisgICAgICAgICAgYmVmb3JlRWFj aCgoKSA9PiB7CisgICAgICAgICAgICBiYWNrdXBEaWFsb2dSZXNpemVUb1NweSA9IGphc21pbmUu Y3JlYXRlU3B5T2JqKCdiYWNrdXBEaWFsb2dSZXNpemVUb1NweScsIFsncmVzaXplVG8nXSk7Cisg ICAgICAgICAgICBhbGVydGlmeVNweVsnYmFja3VwX29iamVjdHMnXS5hbmQKKyAgICAgICAgICAg ICAgLnJldHVyblZhbHVlKGJhY2t1cERpYWxvZ1Jlc2l6ZVRvU3B5KTsKKyAgICAgICAgICAgIHBn QnJvd3Nlci5nZXRfcHJlZmVyZW5jZS5hbmQucmV0dXJuVmFsdWUoe3ZhbHVlOiAnL3NvbWUvcGF0 aCd9KTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIGl0KCdkaXNwbGF5cyB0aGUgZGlhbG9n JywgKCkgPT4geworICAgICAgICAgICAgYmFja3VwRGlhbG9nLmRyYXcobnVsbCwgW3NlcnZlclRy ZWVOb2RlXSwgbnVsbCk7CisgICAgICAgICAgICBleHBlY3QoYWxlcnRpZnlTcHlbJ2JhY2t1cF9v YmplY3RzJ10pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHRydWUpOworICAgICAgICAgICAgZXhwZWN0 KGJhY2t1cERpYWxvZ1Jlc2l6ZVRvU3B5LnJlc2l6ZVRvKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgn NjAlJywgJzUwJScpOworICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAg IH0pOworICB9KTsKKworfSk7CmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0 L2JhY2t1cC9iYWNrdXBfZGlhbG9nX3dyYXBwZXJfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2ph dmFzY3JpcHQvYmFja3VwL2JhY2t1cF9kaWFsb2dfd3JhcHBlcl9zcGVjLmpzCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi43M2U0NTNlNQotLS0gL2Rldi9udWxsCisrKyBiL3dl Yi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvYmFja3VwL2JhY2t1cF9kaWFsb2dfd3JhcHBlcl9zcGVj LmpzCkBAIC0wLDAgKzEsNjc1IEBACitpbXBvcnQge1RyZWVGYWtlfSBmcm9tICcuLi90cmVlL3Ry ZWVfZmFrZSc7CitpbXBvcnQge0JhY2t1cERpYWxvZ1dyYXBwZXJ9IGZyb20gJy4uLy4uLy4uL3Bn YWRtaW4vc3RhdGljL2pzL2JhY2t1cC9iYWNrdXBfZGlhbG9nX3dyYXBwZXInOworaW1wb3J0IGF4 aW9zIGZyb20gJ2F4aW9zL2luZGV4JzsKK2ltcG9ydCBNb2NrQWRhcHRlciBmcm9tICdheGlvcy1t b2NrLWFkYXB0ZXInOworaW1wb3J0IHtGYWtlTW9kZWx9IGZyb20gJy4uL2Zha2VfbW9kZWwnOwor aW1wb3J0IHtUcmVlTm9kZX0gZnJvbSAnLi4vLi4vLi4vcGdhZG1pbi9zdGF0aWMvanMvdHJlZS90 cmVlJzsKKworbGV0IGNvbnRleHQgPSBkZXNjcmliZTsKKworZGVzY3JpYmUoJ0JhY2t1cERpYWxv Z1dyYXBwZXInLCAoKSA9PiB7CisgIGxldCBqcXVlcnlTcHk7CisgIGxldCBwZ0Jyb3dzZXI7Cisg IGxldCBhbGVydGlmeVNweTsKKyAgbGV0IGRpYWxvZ01vZGVsS2xhc3NTcHk7CisgIGxldCBiYWNr Zm9ybTsKKyAgbGV0IGdlbmVyYXRlZEJhY2t1cE1vZGVsOworICBsZXQgYmFja3VwRGlhbG9nV3Jh cHBlcjsKKyAgbGV0IG5vRGF0YU5vZGU7CisgIGxldCBzZXJ2ZXJUcmVlTm9kZTsKKyAgbGV0IGRh dGFiYXNlVHJlZU5vZGU7CisgIGxldCB2aWV3U2NoZW1hOworICBsZXQgYmFja3VwSlF1ZXJ5Q29u dGFpbmVyU3B5OworICBsZXQgYmFja3VwTm9kZUNoaWxkTm9kZVNweTsKKyAgbGV0IGJhY2t1cE5v ZGU7CisKKyAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgcGdCcm93c2VyID0geworICAgICAgdHJl ZU1lbnU6IG5ldyBUcmVlRmFrZSgpLAorICAgICAgTm9kZXM6IHsKKyAgICAgICAgc2VydmVyOiB7 CisgICAgICAgICAgaGFzSWQ6IHRydWUsCisgICAgICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6 IGphc21pbmUuY3JlYXRlU3B5KCdnZXRUcmVlTm9kZUhpZXJhcmNoeScpLAorICAgICAgICB9LAor ICAgICAgICBkYXRhYmFzZTogeworICAgICAgICAgIGhhc0lkOiB0cnVlLAorICAgICAgICB9LAor ICAgICAgfSwKKyAgICAgIGtleWJvYXJkTmF2aWdhdGlvbjogamFzbWluZS5jcmVhdGVTcHlPYmoo J2tleWJvYXJkTmF2aWdhdGlvbicsIFsnZ2V0RGlhbG9nVGFiTmF2aWdhdG9yJ10pLAorICAgIH07 CisgICAgbm9EYXRhTm9kZSA9IHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdsZXZlbDEu MScsIHVuZGVmaW5lZCwgW3tpZDogJ2xldmVsMSd9XSk7CisgICAgc2VydmVyVHJlZU5vZGUgPSBw Z0Jyb3dzZXIudHJlZU1lbnUuYWRkTmV3Tm9kZSgnbGV2ZWwyLjEnLCB7CisgICAgICBfdHlwZTog J3NlcnZlcicsCisgICAgICBfaWQ6IDEwLAorICAgICAgbGFiZWw6ICdzb21lLXRyZWUtbGFiZWwn LAorICAgIH0sIFt7aWQ6ICdsZXZlbDIuMSd9XSk7CisgICAgZGF0YWJhc2VUcmVlTm9kZSA9IG5l dyBUcmVlTm9kZSgnZGF0YWJhc2UtdHJlZS1ub2RlJywgeworICAgICAgX3R5cGU6ICdkYXRhYmFz ZScsCisgICAgICBfbGFiZWw6ICdzb21lLWRhdGFiYXNlLWxhYmVsJywKKyAgICB9LCBbe2lkOiAn ZGF0YWJhc2UtdHJlZS1ub2RlJ31dKTsKKyAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuYWRkQ2hpbGQo c2VydmVyVHJlZU5vZGUsIGRhdGFiYXNlVHJlZU5vZGUpOworCisgICAganF1ZXJ5U3B5ID0gamFz bWluZS5jcmVhdGVTcHkoJ2pxdWVyeVNweScpOworICAgIGJhY2t1cE5vZGUgPSB7CisgICAgICBf X2ludGVybmFsOiB7CisgICAgICAgIGJ1dHRvbnM6IFt7fSwge30sIHsKKyAgICAgICAgICBlbGVt ZW50OiB7CisgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsCisgICAgICAgICAgfSwKKyAgICAg ICAgfV0sCisgICAgICB9LAorICAgICAgZWxlbWVudHM6IHsKKyAgICAgICAgYm9keTogeworICAg ICAgICAgIGNoaWxkTm9kZXM6IFsKKyAgICAgICAgICAgIHt9LAorICAgICAgICAgIF0sCisgICAg ICAgIH0sCisgICAgICAgIGNvbnRlbnQ6IGphc21pbmUuY3JlYXRlU3B5T2JqKCdjb250ZW50Jywg WydhcHBlbmRDaGlsZCcsICdhdHRyJ10pLAorICAgICAgfSwKKyAgICB9OworCisgICAgYmFja3Vw SlF1ZXJ5Q29udGFpbmVyU3B5ID0gamFzbWluZS5jcmVhdGVTcHlPYmooJ2JhY2t1cEpRdWVyeUNv bnRhaW5lcicsIFsnZ2V0JywgJ2F0dHInXSk7CisgICAgYmFja3VwSlF1ZXJ5Q29udGFpbmVyU3B5 LmdldC5hbmQucmV0dXJuVmFsdWUoYmFja3VwSlF1ZXJ5Q29udGFpbmVyU3B5KTsKKworICAgIGdl bmVyYXRlZEJhY2t1cE1vZGVsID0ge307CisgICAgZGlhbG9nTW9kZWxLbGFzc1NweSA9IGphc21p bmUuY3JlYXRlU3B5KCdkaWFsb2dNb2RlbEtsYXNzJyk7CisgICAgZGlhbG9nTW9kZWxLbGFzc1Nw eS5hbmQucmV0dXJuVmFsdWUoZ2VuZXJhdGVkQmFja3VwTW9kZWwpOworCisgICAgdmlld1NjaGVt YSA9IHt9OworICAgIGJhY2tmb3JtID0gamFzbWluZS5jcmVhdGVTcHlPYmooJ2JhY2tmb3JtJywg WydnZW5lcmF0ZVZpZXdTY2hlbWEnLCAnRGlhbG9nJ10pOworICAgIGJhY2tmb3JtLmdlbmVyYXRl Vmlld1NjaGVtYS5hbmQucmV0dXJuVmFsdWUodmlld1NjaGVtYSk7CisKKyAgICBiYWNrdXBOb2Rl Q2hpbGROb2RlU3B5ID0gamFzbWluZS5jcmVhdGVTcHlPYmooJ3NvbWV0aGluZycsIFsnYWRkQ2xh c3MnXSk7CisgICAganF1ZXJ5U3B5LmFuZC5jYWxsRmFrZSgoc2VsZWN0b3IpID0+IHsKKyAgICAg IGlmIChzZWxlY3RvciA9PT0gJzxkaXYgY2xhc3M9XCdiYWNrdXBfZGlhbG9nXCc+PC9kaXY+Jykg eworICAgICAgICByZXR1cm4gYmFja3VwSlF1ZXJ5Q29udGFpbmVyU3B5OworICAgICAgfSBlbHNl IGlmIChzZWxlY3RvciA9PT0gYmFja3VwTm9kZS5lbGVtZW50cy5ib2R5LmNoaWxkTm9kZXNbMF0p IHsKKyAgICAgICAgcmV0dXJuIGJhY2t1cE5vZGVDaGlsZE5vZGVTcHk7CisgICAgICB9CisgICAg fSk7CisKKyAgfSk7CisKKyAgZGVzY3JpYmUoJyNwcmVwYXJlJywgKCkgPT4geworICAgIGJlZm9y ZUVhY2goKCkgPT4geworICAgICAgYWxlcnRpZnlTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaign YWxlcnRpZnknLCBbJ2FsZXJ0JywgJ2RpYWxvZyddKTsKKyAgICAgIGJhY2t1cERpYWxvZ1dyYXBw ZXIgPSBuZXcgQmFja3VwRGlhbG9nV3JhcHBlcigKKyAgICAgICAgJzxkaXYgY2xhc3M9XCdiYWNr dXBfZGlhbG9nXCc+PC9kaXY+JywKKyAgICAgICAgJ2JhY2t1cERpYWxvZ1RpdGxlJywKKyAgICAg ICAgJ2JhY2t1cCcsCisgICAgICAgIGpxdWVyeVNweSwKKyAgICAgICAgcGdCcm93c2VyLAorICAg ICAgICBhbGVydGlmeVNweSwKKyAgICAgICAgZGlhbG9nTW9kZWxLbGFzc1NweSwKKyAgICAgICAg YmFja2Zvcm0KKyAgICAgICk7CisgICAgICBiYWNrdXBEaWFsb2dXcmFwcGVyID0gT2JqZWN0LmFz c2lnbihiYWNrdXBEaWFsb2dXcmFwcGVyLCBiYWNrdXBOb2RlKTsKKyAgICB9KTsKKworICAgIGNv bnRleHQoJ25vIHRyZWUgZWxlbWVudCBpcyBzZWxlY3RlZCcsICgpID0+IHsKKyAgICAgIGl0KCdk b2VzIG5vdCBjcmVhdGUgYSBiYWNrZm9ybSBkaWFsb2cnLCAoKSA9PiB7CisgICAgICAgIGJhY2t1 cERpYWxvZ1dyYXBwZXIucHJlcGFyZSgpOworICAgICAgICBleHBlY3QoYmFja2Zvcm0uRGlhbG9n KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpOworICAgICAgfSk7CisKKyAgICAgIGl0KCdkaXNhYmxl cyB0aGUgYnV0dG9uICJzdWJtaXQgYnV0dG9uIiB1bnRpbCBhIGZpbGVuYW1lIGlzIHNlbGVjdGVk JywgKCkgPT4geworICAgICAgICBiYWNrdXBEaWFsb2dXcmFwcGVyLnByZXBhcmUoKTsKKyAgICAg ICAgZXhwZWN0KGJhY2t1cERpYWxvZ1dyYXBwZXIuX19pbnRlcm5hbC5idXR0b25zWzJdLmVsZW1l bnQuZGlzYWJsZWQpLnRvQmUodHJ1ZSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGNvbnRl eHQoJ3NlbGVjdGVkIHRyZWUgbm9kZSBoYXMgbm8gZGF0YScsICgpID0+IHsKKyAgICAgIGJlZm9y ZUVhY2goKCkgPT4geworICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2VsZWN0Tm9kZShub0Rh dGFOb2RlLmRvbU5vZGUpOworICAgICAgfSk7CisKKyAgICAgIGl0KCdkb2VzIG5vdCBjcmVhdGUg YSBiYWNrZm9ybSBkaWFsb2cnLCAoKSA9PiB7CisgICAgICAgIGJhY2t1cERpYWxvZ1dyYXBwZXIu cHJlcGFyZSgpOworICAgICAgICBleHBlY3QoYmFja2Zvcm0uRGlhbG9nKS5ub3QudG9IYXZlQmVl bkNhbGxlZCgpOworICAgICAgfSk7CisKKyAgICAgIGl0KCdkaXNhYmxlcyB0aGUgYnV0dG9uICJz dWJtaXQgYnV0dG9uIiB1bnRpbCBhIGZpbGVuYW1lIGlzIHNlbGVjdGVkJywgKCkgPT4geworICAg ICAgICBiYWNrdXBEaWFsb2dXcmFwcGVyLnByZXBhcmUoKTsKKyAgICAgICAgZXhwZWN0KGJhY2t1 cERpYWxvZ1dyYXBwZXIuX19pbnRlcm5hbC5idXR0b25zWzJdLmVsZW1lbnQuZGlzYWJsZWQpLnRv QmUodHJ1ZSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGNvbnRleHQoJ3RyZWUgZWxlbWVu dCBpcyBzZWxlY3RlZCcsICgpID0+IHsKKyAgICAgIGxldCB0cmVlSGllcmFyY2h5SW5mb3JtYXRp b247CisgICAgICBsZXQgZGlhbG9nU3B5OworCisgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAg ICAgICAgdHJlZUhpZXJhcmNoeUluZm9ybWF0aW9uID0geworICAgICAgICAgIHNlcnZlcjogewor ICAgICAgICAgICAgX3R5cGU6ICdzZXJ2ZXInLAorICAgICAgICAgICAgX2lkOiAxMCwKKyAgICAg ICAgICAgIHByaW9yaXR5OiAwLAorICAgICAgICAgICAgbGFiZWw6ICdzb21lLXRyZWUtbGFiZWwn LAorICAgICAgICAgIH0sCisgICAgICAgIH07CisgICAgICAgIHBnQnJvd3Nlci50cmVlTWVudS5z ZWxlY3ROb2RlKHNlcnZlclRyZWVOb2RlLmRvbU5vZGUpOworICAgICAgICBwZ0Jyb3dzZXIuTm9k ZXNbJ3NlcnZlciddLmdldFRyZWVOb2RlSGllcmFyY2h5LmFuZAorICAgICAgICAgIC5yZXR1cm5W YWx1ZSh0cmVlSGllcmFyY2h5SW5mb3JtYXRpb24pOworICAgICAgICBkaWFsb2dTcHkgPSBqYXNt aW5lLmNyZWF0ZVNweU9iaignbmV3VmlldycsIFsncmVuZGVyJ10pOworICAgICAgICBkaWFsb2dT cHkuJGVsID0gamFzbWluZS5jcmVhdGVTcHlPYmooJyRlbCcsIFsnZmluZCcsICdhdHRyJ10pOwor ICAgICAgICBkaWFsb2dTcHkubW9kZWwgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignbW9kZWwnLCBb J29uJ10pOworICAgICAgICBkaWFsb2dTcHkuJGVsLmZpbmQuYW5kLnJldHVyblZhbHVlKFtdKTsK KworICAgICAgICBiYWNrZm9ybS5EaWFsb2cuYW5kLnJldHVyblZhbHVlKGRpYWxvZ1NweSk7Cisg ICAgICB9KTsKKworICAgICAgaXQoJ2NyZWF0ZXMgYSBiYWNrZm9ybSBkaWFsb2cgYW5kIGRpc3Bs YXlzIGl0JywgKCkgPT4geworICAgICAgICBiYWNrdXBEaWFsb2dXcmFwcGVyLnByZXBhcmUoKTsK KyAgICAgICAgZXhwZWN0KGJhY2tmb3JtLkRpYWxvZykudG9IYXZlQmVlbkNhbGxlZFdpdGgoewor ICAgICAgICAgIGVsOiBiYWNrdXBKUXVlcnlDb250YWluZXJTcHksCisgICAgICAgICAgbW9kZWw6 IGdlbmVyYXRlZEJhY2t1cE1vZGVsLAorICAgICAgICAgIHNjaGVtYTogdmlld1NjaGVtYSwKKyAg ICAgICAgfSk7CisKKyAgICAgICAgZXhwZWN0KGRpYWxvZ1NweS5yZW5kZXIpLnRvSGF2ZUJlZW5D YWxsZWQoKTsKKyAgICAgIH0pOworCisKKyAgICAgIGl0KCdhZGQgYWxlcnRpZnkgY2xhc3NlcyB0 byByZXN0b3JlIG5vZGUgY2hpbGRub2RlJywgKCkgPT4geworICAgICAgICBiYWNrdXBEaWFsb2dX cmFwcGVyLnByZXBhcmUoKTsKKyAgICAgICAgZXhwZWN0KGJhY2t1cE5vZGVDaGlsZE5vZGVTcHku YWRkQ2xhc3MpCisgICAgICAgICAgLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKCdhbGVydGlmeV90b29s c19kaWFsb2dfcHJvcGVydGllcyBvYmpfcHJvcGVydGllcycpOworICAgICAgfSk7CisKKyAgICAg IGl0KCdkaXNhYmxlcyB0aGUgYnV0dG9uIHN1Ym1pdCBidXR0b24gdW50aWwgYSBmaWxlbmFtZSBp cyBzZWxlY3RlZCcsICgpID0+IHsKKyAgICAgICAgYmFja3VwRGlhbG9nV3JhcHBlci5wcmVwYXJl KCk7CisgICAgICAgIGV4cGVjdChiYWNrdXBOb2RlLl9faW50ZXJuYWwuYnV0dG9uc1syXS5lbGVt ZW50LmRpc2FibGVkKS50b0JlKHRydWUpOworICAgICAgfSk7CisKKyAgICAgIGl0KCdnZW5lcmF0 ZXMgYSBuZXcgYmFja3VwIG1vZGVsJywgKCkgPT4geworICAgICAgICBiYWNrdXBEaWFsb2dXcmFw cGVyLnByZXBhcmUoKTsKKyAgICAgICAgZXhwZWN0KGRpYWxvZ01vZGVsS2xhc3NTcHkpLnRvSGF2 ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAgIHt0eXBlOiAnYmFja3VwJ30sCisgICAgICAgICAg e25vZGVfaW5mbzogdHJlZUhpZXJhcmNoeUluZm9ybWF0aW9ufQorICAgICAgICApOworICAgICAg fSk7CisKKyAgICAgIGl0KCdhZGQgdGhlIG5ldyBkaWFsb2cgdG8gdGhlIGJhY2t1cCBub2RlIEhU TUwnLCAoKSA9PiB7CisgICAgICAgIGJhY2t1cERpYWxvZ1dyYXBwZXIucHJlcGFyZSgpOworICAg ICAgICBleHBlY3QoYmFja3VwTm9kZS5lbGVtZW50cy5jb250ZW50LmFwcGVuZENoaWxkKS50b0hh dmVCZWVuQ2FsbGVkV2l0aChiYWNrdXBKUXVlcnlDb250YWluZXJTcHkpOworICAgICAgfSk7Cisg ICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdvbkJ1dHRvbkNsaWNrZWQnLCAoKSA9PiB7Cisg ICAgbGV0IG5ldHdvcmtNb2NrOworICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgbmV0d29y a01vY2sgPSBuZXcgTW9ja0FkYXB0ZXIoYXhpb3MpOworICAgICAgYmFja3VwRGlhbG9nV3JhcHBl ciA9IG5ldyBCYWNrdXBEaWFsb2dXcmFwcGVyKAorICAgICAgICAnPGRpdiBjbGFzcz1cJ2JhY2t1 cF9kaWFsb2dcJz48L2Rpdj4nLAorICAgICAgICAnYmFja3VwRGlhbG9nVGl0bGUnLAorICAgICAg ICAnYmFja3VwJywKKyAgICAgICAganF1ZXJ5U3B5LAorICAgICAgICBwZ0Jyb3dzZXIsCisgICAg ICAgIGFsZXJ0aWZ5U3B5LAorICAgICAgICBkaWFsb2dNb2RlbEtsYXNzU3B5LAorICAgICAgICBi YWNrZm9ybQorICAgICAgKTsKKworICAgICAgYmFja3VwRGlhbG9nV3JhcHBlciA9IE9iamVjdC5h c3NpZ24oYmFja3VwRGlhbG9nV3JhcHBlciwgYmFja3VwTm9kZSk7CisgICAgfSk7CisKKyAgICBh ZnRlckVhY2goKCkgPT4geworICAgICAgbmV0d29ya01vY2sucmVzdG9yZSgpOworICAgIH0pOwor CisgICAgY29udGV4dCgnZGlhbG9nIGhlbHAgYnV0dG9uIHdhcyBwcmVzc2VkJywgKCkgPT4gewor ICAgICAgbGV0IG5ldHdvcmtDYWxsZWQ7CisgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAg ICAgbmV0d29ya0NhbGxlZCA9IGZhbHNlOworICAgICAgICBuZXR3b3JrTW9jay5vbkFueSgvLiov KS5yZXBseSgoKSA9PiB7CisgICAgICAgICAgbmV0d29ya0NhbGxlZCA9IHRydWU7CisgICAgICAg ICAgcmV0dXJuIFsyMDAsIHt9XTsKKyAgICAgICAgfSk7CisgICAgICAgIHBnQnJvd3Nlci50cmVl TWVudS5zZWxlY3ROb2RlKHNlcnZlclRyZWVOb2RlLmRvbU5vZGUpOworICAgICAgICBwZ0Jyb3dz ZXIuc2hvd0hlbHAgPSBqYXNtaW5lLmNyZWF0ZVNweSgnc2hvd0hlbHAnKTsKKworICAgICAgICBj b25zdCBldmVudCA9IHsKKyAgICAgICAgICBidXR0b246IHsKKyAgICAgICAgICAgIGVsZW1lbnQ6 IHsKKyAgICAgICAgICAgICAgbmFtZTogJ2RpYWxvZ19oZWxwJywKKyAgICAgICAgICAgICAgZ2V0 QXR0cmlidXRlOiAoYXR0cmlidXRlTmFtZSkgPT4geworICAgICAgICAgICAgICAgIGlmIChhdHRy aWJ1dGVOYW1lID09PSAndXJsJykgeworICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRwOi8v c29tZXVybCc7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lID09PSAn bGFiZWwnKSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NvbWUgbGFiZWwnOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAg fSwKKyAgICAgICAgfTsKKyAgICAgICAgYmFja3VwRGlhbG9nV3JhcHBlci5jYWxsYmFjayhldmVu dCk7CisgICAgICB9KTsKKworICAgICAgaXQoJ2Rpc3BsYXlzIGhlbHAgZm9yIGRpYWxvZycsICgp ID0+IHsKKyAgICAgICAgZXhwZWN0KHBnQnJvd3Nlci5zaG93SGVscCkudG9IYXZlQmVlbkNhbGxl ZFdpdGgoCisgICAgICAgICAgJ2RpYWxvZ19oZWxwJywKKyAgICAgICAgICAnaHR0cDovL3NvbWV1 cmwnLAorICAgICAgICAgIHBnQnJvd3Nlci5Ob2Rlc1snc2VydmVyJ10sCisgICAgICAgICAgc2Vy dmVyVHJlZU5vZGUsCisgICAgICAgICAgJ3NvbWUgbGFiZWwnCisgICAgICAgICk7CisgICAgICB9 KTsKKworICAgICAgaXQoJ2RvZXMgbm90IHN0YXJ0IHRoZSBiYWNrdXAnLCAoKSA9PiB7CisgICAg ICAgIGV4cGVjdChuZXR3b3JrQ2FsbGVkKS50b0JlKGZhbHNlKTsKKyAgICAgIH0pOworICAgIH0p OworCisgICAgY29udGV4dCgnb2JqZWN0IGhlbHAgYnV0dG9uIHdhcyBwcmVzc2VkJywgKCkgPT4g eworICAgICAgbGV0IG5ldHdvcmtDYWxsZWQ7CisgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAg ICAgICAgbmV0d29ya0NhbGxlZCA9IGZhbHNlOworICAgICAgICBuZXR3b3JrTW9jay5vbkFueSgv LiovKS5yZXBseSgoKSA9PiB7CisgICAgICAgICAgbmV0d29ya0NhbGxlZCA9IHRydWU7CisgICAg ICAgICAgcmV0dXJuIFsyMDAsIHt9XTsKKyAgICAgICAgfSk7CisgICAgICAgIHBnQnJvd3Nlci50 cmVlTWVudS5zZWxlY3ROb2RlKHNlcnZlclRyZWVOb2RlLmRvbU5vZGUpOworICAgICAgICBwZ0Jy b3dzZXIuc2hvd0hlbHAgPSBqYXNtaW5lLmNyZWF0ZVNweSgnc2hvd0hlbHAnKTsKKworICAgICAg ICBjb25zdCBldmVudCA9IHsKKyAgICAgICAgICBidXR0b246IHsKKyAgICAgICAgICAgIGVsZW1l bnQ6IHsKKyAgICAgICAgICAgICAgbmFtZTogJ29iamVjdF9oZWxwJywKKyAgICAgICAgICAgICAg Z2V0QXR0cmlidXRlOiAoYXR0cmlidXRlTmFtZSkgPT4geworICAgICAgICAgICAgICAgIGlmIChh dHRyaWJ1dGVOYW1lID09PSAndXJsJykgeworICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRw Oi8vc29tZXVybCc7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lID09 PSAnbGFiZWwnKSB7CisgICAgICAgICAgICAgICAgICByZXR1cm4gJ3NvbWUgbGFiZWwnOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIH0sCisgICAgICAg ICAgfSwKKyAgICAgICAgfTsKKyAgICAgICAgYmFja3VwRGlhbG9nV3JhcHBlci5jYWxsYmFjayhl dmVudCk7CisgICAgICB9KTsKKworICAgICAgaXQoJ2Rpc3BsYXlzIGhlbHAgZm9yIGRpYWxvZycs ICgpID0+IHsKKyAgICAgICAgZXhwZWN0KHBnQnJvd3Nlci5zaG93SGVscCkudG9IYXZlQmVlbkNh bGxlZFdpdGgoCisgICAgICAgICAgJ29iamVjdF9oZWxwJywKKyAgICAgICAgICAnaHR0cDovL3Nv bWV1cmwnLAorICAgICAgICAgIHBnQnJvd3Nlci5Ob2Rlc1snc2VydmVyJ10sCisgICAgICAgICAg c2VydmVyVHJlZU5vZGUsCisgICAgICAgICAgJ3NvbWUgbGFiZWwnCisgICAgICAgICk7CisgICAg ICB9KTsKKworICAgICAgaXQoJ2RvZXMgbm90IHN0YXJ0IHRoZSBiYWNrdXAnLCAoKSA9PiB7Cisg ICAgICAgIGV4cGVjdChuZXR3b3JrQ2FsbGVkKS50b0JlKGZhbHNlKTsKKyAgICAgIH0pOworICAg IH0pOworCisgICAgY29udGV4dCgnYmFja3VwIGJ1dHRvbiB3YXMgcHJlc3NlZCcsICgpID0+IHsK KyAgICAgIGNvbnRleHQoJ25vIHRyZWUgbm9kZSBpcyBzZWxlY3RlZCcsICgpID0+IHsKKyAgICAg ICAgaXQoJ2RvZXMgbm90IHN0YXJ0IHRoZSBiYWNrdXAnLCAoKSA9PiB7CisgICAgICAgICAgbGV0 IG5ldHdvcmtDYWxsZWQgPSBmYWxzZTsKKyAgICAgICAgICBuZXR3b3JrTW9jay5vbkFueSgvLiov KS5yZXBseSgoKSA9PiB7CisgICAgICAgICAgICBuZXR3b3JrQ2FsbGVkID0gdHJ1ZTsKKyAgICAg ICAgICAgIHJldHVybiBbMjAwLCB7fV07CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICBsZXQg ZXZlbnQgPSB7CisgICAgICAgICAgICBidXR0b246IHsKKyAgICAgICAgICAgICAgJ2RhdGEtYnRu LW5hbWUnOiAnYmFja3VwJywKKyAgICAgICAgICAgICAgZWxlbWVudDogeworICAgICAgICAgICAg ICAgIGdldEF0dHJpYnV0ZTogKCkgPT4geworICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRw Oi8vc29tZXVybCc7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgfSwKKyAgICAg ICAgICAgIH0sCisgICAgICAgICAgfTsKKworICAgICAgICAgIGJhY2t1cERpYWxvZ1dyYXBwZXIu Y2FsbGJhY2soZXZlbnQpOworICAgICAgICAgIGV4cGVjdChuZXR3b3JrQ2FsbGVkKS50b0JlKGZh bHNlKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKworICAgICAgY29udGV4dCgndHJlZSBub2Rl IGhhcyBubyBkYXRhJywgKCkgPT4geworICAgICAgICBpdCgnZG9lcyBub3Qgc3RhcnQgdGhlIGJh Y2t1cCcsICgpID0+IHsKKyAgICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2VsZWN0Tm9kZShu b0RhdGFOb2RlLmRvbU5vZGUpOworCisgICAgICAgICAgbGV0IG5ldHdvcmtDYWxsZWQgPSBmYWxz ZTsKKyAgICAgICAgICBuZXR3b3JrTW9jay5vbkFueSgvLiovKS5yZXBseSgoKSA9PiB7CisgICAg ICAgICAgICBuZXR3b3JrQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBbMjAwLCB7 fV07CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICBsZXQgZXZlbnQgPSB7CisgICAgICAgICAg ICBidXR0b246IHsKKyAgICAgICAgICAgICAgJ2RhdGEtYnRuLW5hbWUnOiAnYmFja3VwJywKKyAg ICAgICAgICAgICAgZWxlbWVudDogeworICAgICAgICAgICAgICAgIGdldEF0dHJpYnV0ZTogKCkg PT4geworICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRwOi8vc29tZXVybCc7CisgICAgICAg ICAgICAgICAgfSwKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIH0sCisgICAgICAgICAg fTsKKworICAgICAgICAgIGJhY2t1cERpYWxvZ1dyYXBwZXIuY2FsbGJhY2soZXZlbnQpOworICAg ICAgICAgIGV4cGVjdChuZXR3b3JrQ2FsbGVkKS50b0JlKGZhbHNlKTsKKyAgICAgICAgfSk7Cisg ICAgICB9KTsKKworICAgICAgY29udGV4dCgndHJlZSBub2RlIGhhcyBkYXRhJywgKCkgPT4gewor ICAgICAgICBjb250ZXh0KCd3aGVuIGRpYWxvZyB0eXBlIGlzIGdsb2JhbCcsICgpID0+IHsKKyAg ICAgICAgICBsZXQgZXZlbnQ7CisgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAg ICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2VsZWN0Tm9kZShzZXJ2ZXJUcmVlTm9kZS5kb21Ob2Rl KTsKKworICAgICAgICAgICAgYmFja3VwRGlhbG9nV3JhcHBlci52aWV3ID0geworICAgICAgICAg ICAgICBtb2RlbDogbmV3IEZha2VNb2RlbCgpLAorICAgICAgICAgICAgfTsKKworICAgICAgICAg ICAgZXZlbnQgPSB7CisgICAgICAgICAgICAgIGJ1dHRvbjogeworICAgICAgICAgICAgICAgICdk YXRhLWJ0bi1uYW1lJzogJ2JhY2t1cCcsCisgICAgICAgICAgICAgICAgZWxlbWVudDogeworICAg ICAgICAgICAgICAgICAgZ2V0QXR0cmlidXRlOiAoKSA9PiB7CisgICAgICAgICAgICAgICAgICAg IHJldHVybiAnaHR0cDovL3NvbWV1cmwnOworICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAg ICAgICAgICB9LAorICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfTsKKyAgICAgICAgICB9 KTsKKworICAgICAgICAgIGNvbnRleHQoJ3doZW4gdGhlIGJhY2t1cCBqb2IgaXMgY3JlYXRlZCBz dWNjZXNzZnVsbHknLCAoKSA9PiB7CisgICAgICAgICAgICBsZXQgZGF0YVNlbnRUb1NlcnZlcjsK KyAgICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICAgICAgICBwZ0Jyb3dzZXIu RXZlbnRzID0gamFzbWluZS5jcmVhdGVTcHlPYmooJ0V2ZW50cycsIFsndHJpZ2dlciddKTsKKyAg ICAgICAgICAgICAgYWxlcnRpZnlTcHkuc3VjY2VzcyA9IGphc21pbmUuY3JlYXRlU3B5KCdzdWNj ZXNzJyk7CisKKyAgICAgICAgICAgICAgbmV0d29ya01vY2sub25Qb3N0KCcvYmFja3VwL2pvYi8x MCcpLnJlcGx5KChyZXF1ZXN0KSA9PiB7CisgICAgICAgICAgICAgICAgZGF0YVNlbnRUb1NlcnZl ciA9IHJlcXVlc3QuZGF0YTsKKyAgICAgICAgICAgICAgICByZXR1cm4gWzIwMCwge31dOworICAg ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpdCgnY3JlYXRl cyBhIHN1Y2Nlc3MgYWxlcnQgYm94JywgKGRvbmUpID0+IHsKKyAgICAgICAgICAgICAgYmFja3Vw RGlhbG9nV3JhcHBlci5jYWxsYmFjayhldmVudCk7CisgICAgICAgICAgICAgIHNldFRpbWVvdXQo KCkgPT4geworICAgICAgICAgICAgICAgIGV4cGVjdChhbGVydGlmeVNweS5zdWNjZXNzKS50b0hh dmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAgICAgICAgICdCYWNrdXAgam9iIGNyZWF0ZWQu JywKKyAgICAgICAgICAgICAgICAgIDUKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAg ICAgIGRvbmUoKTsKKyAgICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICB9KTsKKworICAg ICAgICAgICAgaXQoJ3RyaWdnZXIgYW4gZXZlbnQgdG8gYmFja2dyb3VuZCBwcm9jZXNzJywgKGRv bmUpID0+IHsKKyAgICAgICAgICAgICAgYmFja3VwRGlhbG9nV3JhcHBlci5jYWxsYmFjayhldmVu dCk7CisKKyAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CisgICAgICAgICAgICAgICAg ZXhwZWN0KHBnQnJvd3Nlci5FdmVudHMudHJpZ2dlcikudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisg ICAgICAgICAgICAgICAgICAncGdhZG1pbi1iZ3Byb2Nlc3M6Y3JlYXRlZCcsCisgICAgICAgICAg ICAgICAgICBiYWNrdXBEaWFsb2dXcmFwcGVyCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICAgICAgICBkb25lKCk7CisgICAgICAgICAgICAgIH0sIDApOworICAgICAgICAgICAgfSk7CisK KyAgICAgICAgICAgIGl0KCdzZW5kIHRoZSBjb3JyZWN0IHBhcmFtZW50ZXJzIHRvIHRoZSBiYWNr ZW5kJywgKGRvbmUpID0+IHsKKyAgICAgICAgICAgICAgYmFja3VwRGlhbG9nV3JhcHBlci5jYWxs YmFjayhldmVudCk7CisgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAgICAg ICAgICAgIGV4cGVjdChKU09OLnBhcnNlKGRhdGFTZW50VG9TZXJ2ZXIpKS50b0VxdWFsKAorICAg ICAgICAgICAgICAgICAge30KKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGRv bmUoKTsKKyAgICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9 KTsKKworICAgICAgICAgIGNvbnRleHQoJ3doZW4gY3JlYXRpbmcgYmFja3VwIGpvYiBmYWlscycs ICgpID0+IHsKKyAgICAgICAgICAgIGl0KCdjcmVhdGVzIGFuIGFsZXJ0IGJveCcsIChkb25lKSA9 PiB7CisgICAgICAgICAgICAgIGFsZXJ0aWZ5U3B5LmFsZXJ0ID0gamFzbWluZS5jcmVhdGVTcHko J2FsZXJ0Jyk7CisgICAgICAgICAgICAgIG5ldHdvcmtNb2NrLm9uUG9zdCgnL2JhY2t1cC9qb2Iv MTAnKS5yZXBseSgoKSA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFs0MDAsIHsKKyAgICAg ICAgICAgICAgICAgIGVycm9ybXNnOiAnc29tZS1lcnJvci1tZXNzYWdlJywKKyAgICAgICAgICAg ICAgICB9XTsKKyAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgYmFja3VwRGlhbG9n V3JhcHBlci5jYWxsYmFjayhldmVudCk7CisgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4g eworICAgICAgICAgICAgICAgIGV4cGVjdChhbGVydGlmeVNweS5hbGVydCkudG9IYXZlQmVlbkNh bGxlZFdpdGgoCisgICAgICAgICAgICAgICAgICAnQmFja3VwIGpvYiBmYWlsZWQuJywKKyAgICAg ICAgICAgICAgICAgICdzb21lLWVycm9yLW1lc3NhZ2UnCisgICAgICAgICAgICAgICAgKTsKKyAg ICAgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgICAgIH0sIDApOworCisgICAgICAgICAg ICB9KTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29udGV4dCgnd2hl biBkaWFsb2cgdHlwZSBpcyBvYmplY3QnLCAoKSA9PiB7CisgICAgICAgICAgbGV0IGV2ZW50Owor ICAgICAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICAgICAgYmFja3VwRGlhbG9nV3Jh cHBlciA9IG5ldyBCYWNrdXBEaWFsb2dXcmFwcGVyKAorICAgICAgICAgICAgICAnPGRpdiBjbGFz cz1cJ2JhY2t1cF9kaWFsb2dcJz48L2Rpdj4nLAorICAgICAgICAgICAgICAnYmFja3VwRGlhbG9n VGl0bGUnLAorICAgICAgICAgICAgICAnYmFja3VwX29iamVjdHMnLAorICAgICAgICAgICAgICBq cXVlcnlTcHksCisgICAgICAgICAgICAgIHBnQnJvd3NlciwKKyAgICAgICAgICAgICAgYWxlcnRp ZnlTcHksCisgICAgICAgICAgICAgIGRpYWxvZ01vZGVsS2xhc3NTcHksCisgICAgICAgICAgICAg IGJhY2tmb3JtCisgICAgICAgICAgICApOworCisgICAgICAgICAgICBwZ0Jyb3dzZXIudHJlZU1l bnUuc2VsZWN0Tm9kZShkYXRhYmFzZVRyZWVOb2RlLmRvbU5vZGUpOworCisgICAgICAgICAgICBi YWNrdXBEaWFsb2dXcmFwcGVyLnZpZXcgPSB7CisgICAgICAgICAgICAgIG1vZGVsOiBuZXcgRmFr ZU1vZGVsKCksCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICBldmVudCA9IHsKKyAgICAg ICAgICAgICAgYnV0dG9uOiB7CisgICAgICAgICAgICAgICAgJ2RhdGEtYnRuLW5hbWUnOiAnYmFj a3VwJywKKyAgICAgICAgICAgICAgICBlbGVtZW50OiB7CisgICAgICAgICAgICAgICAgICBnZXRB dHRyaWJ1dGU6ICgpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRwOi8vc29t ZXVybCc7CisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIH0sCisgICAgICAg ICAgICAgIH0sCisgICAgICAgICAgICB9OworICAgICAgICAgIH0pOworCisgICAgICAgICAgY29u dGV4dCgnd2hlbiB0aGUgYmFja3VwIGpvYiBpcyBjcmVhdGVkIHN1Y2Nlc3NmdWxseScsICgpID0+ IHsKKyAgICAgICAgICAgIGxldCBkYXRhU2VudFRvU2VydmVyOworICAgICAgICAgICAgYmVmb3Jl RWFjaCgoKSA9PiB7CisgICAgICAgICAgICAgIHBnQnJvd3Nlci5FdmVudHMgPSBqYXNtaW5lLmNy ZWF0ZVNweU9iaignRXZlbnRzJywgWyd0cmlnZ2VyJ10pOworICAgICAgICAgICAgICBhbGVydGlm eVNweS5zdWNjZXNzID0gamFzbWluZS5jcmVhdGVTcHkoJ3N1Y2Nlc3MnKTsKKworICAgICAgICAg ICAgICBuZXR3b3JrTW9jay5vblBvc3QoJy9iYWNrdXAvam9iLzEwL29iamVjdCcpLnJlcGx5KChy ZXF1ZXN0KSA9PiB7CisgICAgICAgICAgICAgICAgZGF0YVNlbnRUb1NlcnZlciA9IHJlcXVlc3Qu ZGF0YTsKKyAgICAgICAgICAgICAgICByZXR1cm4gWzIwMCwge31dOworICAgICAgICAgICAgICB9 KTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICBpdCgnY3JlYXRlcyBhIHN1Y2Nlc3Mg YWxlcnQgYm94JywgKGRvbmUpID0+IHsKKyAgICAgICAgICAgICAgYmFja3VwRGlhbG9nV3JhcHBl ci5jYWxsYmFjayhldmVudCk7CisgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geworICAg ICAgICAgICAgICAgIGV4cGVjdChhbGVydGlmeVNweS5zdWNjZXNzKS50b0hhdmVCZWVuQ2FsbGVk V2l0aCgKKyAgICAgICAgICAgICAgICAgICdCYWNrdXAgam9iIGNyZWF0ZWQuJywKKyAgICAgICAg ICAgICAgICAgIDUKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGRvbmUoKTsK KyAgICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgaXQo J3RyaWdnZXIgYW4gZXZlbnQgdG8gYmFja2dyb3VuZCBwcm9jZXNzJywgKGRvbmUpID0+IHsKKyAg ICAgICAgICAgICAgYmFja3VwRGlhbG9nV3JhcHBlci5jYWxsYmFjayhldmVudCk7CisKKyAgICAg ICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CisgICAgICAgICAgICAgICAgZXhwZWN0KHBnQnJv d3Nlci5FdmVudHMudHJpZ2dlcikudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAgICAgICAg ICAgICAncGdhZG1pbi1iZ3Byb2Nlc3M6Y3JlYXRlZCcsCisgICAgICAgICAgICAgICAgICBiYWNr dXBEaWFsb2dXcmFwcGVyCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICBkb25l KCk7CisgICAgICAgICAgICAgIH0sIDApOworICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAg IGl0KCdzZW5kIHRoZSBjb3JyZWN0IHBhcmFtZXRlcnMgdG8gdGhlIGJhY2tlbmQnLCAoZG9uZSkg PT4geworICAgICAgICAgICAgICBiYWNrdXBEaWFsb2dXcmFwcGVyLmNhbGxiYWNrKGV2ZW50KTsK KyAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CisgICAgICAgICAgICAgICAgZXhwZWN0 KEpTT04ucGFyc2UoZGF0YVNlbnRUb1NlcnZlcikpLnRvRXF1YWwoCisgICAgICAgICAgICAgICAg ICB7ZGF0YWJhc2U6ICdzb21lLWRhdGFiYXNlLWxhYmVsJ30KKyAgICAgICAgICAgICAgICApOwor ICAgICAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICAgICAgfSwgMCk7CisgICAgICAgICAg ICB9KTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIGNvbnRleHQoJ3doZW4gY3JlYXRpbmcg YmFja3VwIGpvYiBmYWlscycsICgpID0+IHsKKyAgICAgICAgICAgIGl0KCdjcmVhdGVzIGFuIGFs ZXJ0IGJveCcsIChkb25lKSA9PiB7CisgICAgICAgICAgICAgIGFsZXJ0aWZ5U3B5LmFsZXJ0ID0g amFzbWluZS5jcmVhdGVTcHkoJ2FsZXJ0Jyk7CisgICAgICAgICAgICAgIG5ldHdvcmtNb2NrLm9u UG9zdCgnL2JhY2t1cC9qb2IvMTAvb2JqZWN0JykucmVwbHkoKCkgPT4geworICAgICAgICAgICAg ICAgIHJldHVybiBbNDAwLCB7CisgICAgICAgICAgICAgICAgICBlcnJvcm1zZzogJ3NvbWUtZXJy b3ItbWVzc2FnZScsCisgICAgICAgICAgICAgICAgfV07CisgICAgICAgICAgICAgIH0pOworCisg ICAgICAgICAgICAgIGJhY2t1cERpYWxvZ1dyYXBwZXIuY2FsbGJhY2soZXZlbnQpOworICAgICAg ICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgICAgICBleHBlY3QoYWxlcnRp ZnlTcHkuYWxlcnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAgICAgICAgICAgJ0Jh Y2t1cCBqb2IgZmFpbGVkLicsCisgICAgICAgICAgICAgICAgICAnc29tZS1lcnJvci1tZXNzYWdl JworICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgZG9uZSgpOworICAgICAgICAg ICAgICB9LCAwKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0pOworICAgICAgICB9KTsK KyAgICAgIH0pOworICAgIH0pOworICB9KTsKKworICBkZXNjcmliZSgnI3NldEV4dHJhUGFyYW1l dGVycycsICgpID0+IHsKKyAgICBsZXQgc2VsZWN0ZWRUcmVlTm9kZTsKKyAgICBsZXQgdHJlZUlu Zm87CisgICAgbGV0IG1vZGVsOworCisgICAgY29udGV4dCgnd2hlbiBkaWFsb2cgdHlwZSBpcyBn bG9iYWwnLCAoKSA9PiB7CisgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgYmFja3Vw RGlhbG9nV3JhcHBlciA9IG5ldyBCYWNrdXBEaWFsb2dXcmFwcGVyKAorICAgICAgICAgICc8ZGl2 IGNsYXNzPVwnYmFja3VwX2RpYWxvZ1wnPjwvZGl2PicsCisgICAgICAgICAgJ2JhY2t1cERpYWxv Z1RpdGxlJywKKyAgICAgICAgICAnYmFja3VwJywKKyAgICAgICAgICBqcXVlcnlTcHksCisgICAg ICAgICAgcGdCcm93c2VyLAorICAgICAgICAgIGFsZXJ0aWZ5U3B5LAorICAgICAgICAgIGRpYWxv Z01vZGVsS2xhc3NTcHksCisgICAgICAgICAgYmFja2Zvcm0KKyAgICAgICAgKTsKKworICAgICAg ICB0cmVlSW5mbyA9IHt9OworICAgICAgICBtb2RlbCA9IG5ldyBGYWtlTW9kZWwoKTsKKyAgICAg ICAgYmFja3VwRGlhbG9nV3JhcHBlci52aWV3ID0geworICAgICAgICAgIG1vZGVsOiBtb2RlbCwK KyAgICAgICAgfTsKKyAgICAgIH0pOworCisKKyAgICAgIGl0KCdzZXRzIG5vdGhpbmcgb24gdGhl IHZpZXcgbW9kZWwnLCAoKSA9PiB7CisgICAgICAgIGJhY2t1cERpYWxvZ1dyYXBwZXIuc2V0RXh0 cmFQYXJhbWV0ZXJzKHNlbGVjdGVkVHJlZU5vZGUsIHRyZWVJbmZvKTsKKyAgICAgICAgZXhwZWN0 KG1vZGVsLnRvSlNPTigpKS50b0VxdWFsKHt9KTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAg Y29udGV4dCgnd2hlbiBkaWFsb2cgdHlwZSBpcyBvYmplY3QnLCAoKSA9PiB7CisgICAgICBiZWZv cmVFYWNoKCgpID0+IHsKKyAgICAgICAgYmFja3VwRGlhbG9nV3JhcHBlciA9IG5ldyBCYWNrdXBE aWFsb2dXcmFwcGVyKAorICAgICAgICAgICc8ZGl2IGNsYXNzPVwnYmFja3VwX2RpYWxvZ1wnPjwv ZGl2PicsCisgICAgICAgICAgJ2JhY2t1cERpYWxvZ1RpdGxlJywKKyAgICAgICAgICAnYmFja3Vw X29iamVjdHMnLAorICAgICAgICAgIGpxdWVyeVNweSwKKyAgICAgICAgICBwZ0Jyb3dzZXIsCisg ICAgICAgICAgYWxlcnRpZnlTcHksCisgICAgICAgICAgZGlhbG9nTW9kZWxLbGFzc1NweSwKKyAg ICAgICAgICBiYWNrZm9ybQorICAgICAgICApOworCisgICAgICAgIHRyZWVJbmZvID0geworICAg ICAgICAgIGRhdGFiYXNlOiB7CisgICAgICAgICAgICBfbGFiZWw6ICdzb21lLWRhdGFiYXNlLWxh YmVsJywKKyAgICAgICAgICB9LAorICAgICAgICAgIHNjaGVtYTogeworICAgICAgICAgICAgX2xh YmVsOiAnc29tZS10cmVlaW5mby1sYWJlbCcsCisgICAgICAgICAgfSwKKyAgICAgICAgfTsKKwor ICAgICAgICBtb2RlbCA9IG5ldyBGYWtlTW9kZWwoKTsKKyAgICAgICAgc2VsZWN0ZWRUcmVlTm9k ZSA9IG5ldyBUcmVlTm9kZSgnc29tZS1zZWxlY3RlZC1ub2RlJywKKyAgICAgICAgICB7X3R5cGU6 ICdzb21lLXR5cGUnLCBfbGFiZWw6ICdzb21lLXNlbGVjdGVkLWxhYmVsJ30sCisgICAgICAgICAg W10pOworICAgICAgICBiYWNrdXBEaWFsb2dXcmFwcGVyLnZpZXcgPSB7CisgICAgICAgICAgbW9k ZWw6IG1vZGVsLAorICAgICAgICB9OworICAgICAgfSk7CisKKyAgICAgIGl0KCdzZXRzIHRoZSBk YXRhYmFzZSBsYWJlbCBvbiB0aGUgbW9kZWwnLCAoKSA9PiB7CisgICAgICAgIGJhY2t1cERpYWxv Z1dyYXBwZXIuc2V0RXh0cmFQYXJhbWV0ZXJzKHNlbGVjdGVkVHJlZU5vZGUsIHRyZWVJbmZvKTsK KyAgICAgICAgZXhwZWN0KG1vZGVsLnRvSlNPTigpKS50b0VxdWFsKHsKKyAgICAgICAgICAnZGF0 YWJhc2UnOiAnc29tZS1kYXRhYmFzZS1sYWJlbCcsCisgICAgICAgIH0pOworICAgICAgfSk7CisK KyAgICAgIGNvbnRleHQoJ3doZW4gdGhlIHNlbGVjdGVkIGlzIGEgc2NoZW1hIHR5cGUnLCAoKSA9 PiB7CisgICAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICAgIHNlbGVjdGVkVHJlZU5v ZGUgPSBuZXcgVHJlZU5vZGUoJ3NvbWUtc2VsZWN0ZWQtbm9kZScsCisgICAgICAgICAgICB7X3R5 cGU6ICdzY2hlbWEnLCBfbGFiZWw6ICdzb21lLXNjaGVtYS1sYWJlbCd9LAorICAgICAgICAgICAg W10pOworICAgICAgICB9KTsKKworICAgICAgICBpdCgnc2V0cyB0aGUgc2NoZW1hIGxhYmVsIG9u IHRoZSBtb2RlbCcsICgpID0+IHsKKyAgICAgICAgICBiYWNrdXBEaWFsb2dXcmFwcGVyLnNldEV4 dHJhUGFyYW1ldGVycyhzZWxlY3RlZFRyZWVOb2RlLCB0cmVlSW5mbyk7CisgICAgICAgICAgZXhw ZWN0KG1vZGVsLnRvSlNPTigpKS50b0VxdWFsKHsKKyAgICAgICAgICAgICdkYXRhYmFzZSc6ICdz b21lLWRhdGFiYXNlLWxhYmVsJywKKyAgICAgICAgICAgICdzY2hlbWFzJzogWydzb21lLXNjaGVt YS1sYWJlbCddLAorICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgIH0pOworCisgICAg ICBjb250ZXh0KCd3aGVuIHRoZSBzZWxlY3RlZCBpcyBhIHRhYmxlIHR5cGUnLCAoKSA9PiB7Cisg ICAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICAgIHNlbGVjdGVkVHJlZU5vZGUgPSBu ZXcgVHJlZU5vZGUoJ3NvbWUtc2VsZWN0ZWQtbm9kZScsCisgICAgICAgICAgICB7X3R5cGU6ICd0 YWJsZScsIF9sYWJlbDogJ3NvbWUtdGFibGUtbGFiZWwnfSwKKyAgICAgICAgICAgIFtdKTsKKyAg ICAgICAgfSk7CisKKyAgICAgICAgaXQoJ3NldHMgdGhlIHNjaGVtYSBsYWJlbCBvbiB0aGUgbW9k ZWwnLCAoKSA9PiB7CisgICAgICAgICAgYmFja3VwRGlhbG9nV3JhcHBlci5zZXRFeHRyYVBhcmFt ZXRlcnMoc2VsZWN0ZWRUcmVlTm9kZSwgdHJlZUluZm8pOworICAgICAgICAgIGV4cGVjdChtb2Rl bC50b0pTT04oKSkudG9FcXVhbCh7CisgICAgICAgICAgICAnZGF0YWJhc2UnOiAnc29tZS1kYXRh YmFzZS1sYWJlbCcsCisgICAgICAgICAgICAndGFibGVzJzogW1snc29tZS10cmVlaW5mby1sYWJl bCcsICdzb21lLXRhYmxlLWxhYmVsJ11dLAorICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAg ICAgIH0pOworCisgICAgICBjb250ZXh0KCd3aGVuIHRoZSBtb2RlbCBoYXMgbm8gcmF0aW8gdmFs dWUnLCAoKSA9PiB7CisgICAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICAgIG1vZGVs LnNldCgncmF0aW8nLCAnJyk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdzZXRzIGNsZWFy cyB0aGUgcmF0aW8gdmFsdWUnLCAoKSA9PiB7CisgICAgICAgICAgYmFja3VwRGlhbG9nV3JhcHBl ci5zZXRFeHRyYVBhcmFtZXRlcnMoc2VsZWN0ZWRUcmVlTm9kZSwgdHJlZUluZm8pOworICAgICAg ICAgIGV4cGVjdChtb2RlbC5nZXQoJ3JhdGlvJykpLnRvQmVVbmRlZmluZWQoKTsKKyAgICAgICAg fSk7CisgICAgICB9KTsKKworICAgICAgY29udGV4dCgnd2hlbiB0aGUgbW9kZWwgaGFzIGEgdmFs aWQgcmF0aW8gdmFsdWUnLCAoKSA9PiB7CisgICAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAg ICAgICAgIG1vZGVsLnNldCgncmF0aW8nLCAnMC4yNScpOworICAgICAgICB9KTsKKworICAgICAg ICBpdCgnc2V0cyBjbGVhcnMgdGhlIHJhdGlvIHZhbHVlJywgKCkgPT4geworICAgICAgICAgIGJh Y2t1cERpYWxvZ1dyYXBwZXIuc2V0RXh0cmFQYXJhbWV0ZXJzKHNlbGVjdGVkVHJlZU5vZGUsIHRy ZWVJbmZvKTsKKyAgICAgICAgICBleHBlY3QobW9kZWwuZ2V0KCdyYXRpbycpKS50b0VxdWFsKCcw LjI1Jyk7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7CisgIH0pOworfSk7CmRpZmYg LS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2JhY2t1cC9nbG9iYWxfc2VydmVyX2Jh Y2t1cF9kaWFsb2dfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvYmFja3VwL2ds b2JhbF9zZXJ2ZXJfYmFja3VwX2RpYWxvZ19zcGVjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwLi42N2NjYTlkYgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9yZWdyZXNzaW9u L2phdmFzY3JpcHQvYmFja3VwL2dsb2JhbF9zZXJ2ZXJfYmFja3VwX2RpYWxvZ19zcGVjLmpzCkBA IC0wLDAgKzEsMTY4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29s cworLy8KKy8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3Bt ZW50IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVT UUwgTGljZW5jZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCitpbXBvcnQge0JhY2t1cERpYWxvZ30gZnJvbSAnLi4vLi4v Li4vcGdhZG1pbi9zdGF0aWMvanMvYmFja3VwL2JhY2t1cF9kaWFsb2cnOworaW1wb3J0IHtUcmVl RmFrZX0gZnJvbSAnLi4vdHJlZS90cmVlX2Zha2UnOworCitjb25zdCBjb250ZXh0ID0gZGVzY3Jp YmU7CisKK2Rlc2NyaWJlKCdHbG9iYWxTZXJ2ZXJCYWNrdXBEaWFsb2cnLCAoKSA9PiB7CisgIGxl dCBiYWNrdXBEaWFsb2c7CisgIGxldCBwZ0Jyb3dzZXI7CisgIGxldCBqcXVlcnlTcHk7CisgIGxl dCBhbGVydGlmeVNweTsKKyAgbGV0IGJhY2t1cE1vZGVsU3B5OworCisKKyAgbGV0IHJvb3ROb2Rl OworICBsZXQgc2VydmVyVHJlZU5vZGU7CisgIGxldCBwcGFzU2VydmVyVHJlZU5vZGU7CisKKyAg YmVmb3JlRWFjaCgoKSA9PiB7CisgICAgcGdCcm93c2VyID0geworICAgICAgdHJlZU1lbnU6IG5l dyBUcmVlRmFrZSgpLAorICAgICAgTm9kZXM6IHsKKyAgICAgICAgc2VydmVyOiBqYXNtaW5lLmNy ZWF0ZVNweU9iaignTm9kZVtzZXJ2ZXJdJywgWydnZXRUcmVlTm9kZUhpZXJhcmNoeSddKSwKKyAg ICAgIH0sCisgICAgfTsKKyAgICBwZ0Jyb3dzZXIuTm9kZXMuc2VydmVyLmhhc0lkID0gdHJ1ZTsK KyAgICBqcXVlcnlTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgnanF1ZXJ5U3B5Jyk7CisgICAgYmFj a3VwTW9kZWxTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgnYmFja3VwTW9kZWxTcHknKTsKKworICAg IHJvb3ROb2RlID0gcGdCcm93c2VyLnRyZWVNZW51LmFkZE5ld05vZGUoJ2xldmVsMScsIHt9LCB1 bmRlZmluZWQsIFtdKTsKKyAgICBzZXJ2ZXJUcmVlTm9kZSA9IHBnQnJvd3Nlci50cmVlTWVudS5h ZGROZXdOb2RlKCdsZXZlbDEuMScsIHsKKyAgICAgIF90eXBlOiAnc2VydmVyJywKKyAgICAgIF9p ZDogMTAsCisgICAgfSwgdW5kZWZpbmVkLCBbJ2xldmVsMSddKTsKKyAgICBwcGFzU2VydmVyVHJl ZU5vZGUgPSBwZ0Jyb3dzZXIudHJlZU1lbnUuYWRkTmV3Tm9kZSgnbGV2ZWwxLjInLCB7CisgICAg ICBfdHlwZTogJ3NlcnZlcicsCisgICAgICBzZXJ2ZXJfdHlwZTogJ3BwYXMnLAorICAgIH0sIHVu ZGVmaW5lZCwgWydsZXZlbDEnXSk7CisgICAgcGdCcm93c2VyLnRyZWVNZW51LmFkZE5ld05vZGUo J2xldmVsMycsIHt9LCB1bmRlZmluZWQsIFsnbGV2ZWwxJywgJ2xldmVsMS4yJ10pOworICAgIHBn QnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdsZXZlbDMuMScsIHVuZGVmaW5lZCwgdW5kZWZp bmVkLCBbJ2xldmVsMScsICdsZXZlbDEuMicsICdsZXZlbDMnXSk7CisgIH0pOworCisgIGRlc2Ny aWJlKCcjZHJhdycsICgpID0+IHsKKyAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgIGFsZXJ0 aWZ5U3B5ID0gamFzbWluZS5jcmVhdGVTcHlPYmooJ2FsZXJ0aWZ5JywgWydhbGVydCcsICdkaWFs b2cnXSk7CisgICAgICBhbGVydGlmeVNweVsnQmFja3VwRGlhbG9nX2dsb2JhbHMnXSA9IGphc21p bmUuY3JlYXRlU3B5KCdCYWNrdXBEaWFsb2dfZ2xvYmFscycpOworICAgICAgYWxlcnRpZnlTcHlb J0JhY2t1cERpYWxvZ19zZXJ2ZXInXSA9IGphc21pbmUuY3JlYXRlU3B5KCdCYWNrdXBEaWFsb2df c2VydmVyJyk7CisgICAgICBiYWNrdXBEaWFsb2cgPSBuZXcgQmFja3VwRGlhbG9nKAorICAgICAg ICBwZ0Jyb3dzZXIsCisgICAgICAgIGpxdWVyeVNweSwKKyAgICAgICAgYWxlcnRpZnlTcHksCisg ICAgICAgIGJhY2t1cE1vZGVsU3B5CisgICAgICApOworCisgICAgICBwZ0Jyb3dzZXIuZ2V0X3By ZWZlcmVuY2UgPSBqYXNtaW5lLmNyZWF0ZVNweSgnZ2V0X3ByZWZlcmVuY2VzJyk7CisgICAgfSk7 CisKKyAgICBjb250ZXh0KCd0aGVyZSBhcmUgbm8gYW5jZXN0b3JzIG9mIHRoZSB0eXBlIHNlcnZl cicsICgpID0+IHsKKyAgICAgIGl0KCdkb2VzIG5vdCBjcmVhdGUgYSBkaWFsb2cnLCAoKSA9PiB7 CisgICAgICAgIHBnQnJvd3Nlci50cmVlTWVudS5zZWxlY3ROb2RlKFt7aWQ6ICdsZXZlbDEnfV0p OworICAgICAgICBiYWNrdXBEaWFsb2cuZHJhdyhudWxsLCBudWxsLCBudWxsKTsKKyAgICAgICAg ZXhwZWN0KGFsZXJ0aWZ5U3B5WydCYWNrdXBEaWFsb2dfZ2xvYmFscyddKS5ub3QudG9IYXZlQmVl bkNhbGxlZCgpOworICAgICAgICBleHBlY3QoYWxlcnRpZnlTcHlbJ0JhY2t1cERpYWxvZ19zZXJ2 ZXInXSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICAgIH0pOworCisgICAgICBpdCgnZGlz cGxheSBhbiBhbGVydCB3aXRoIGEgQmFja3VwIEVycm9yJywgKCkgPT4geworICAgICAgICBiYWNr dXBEaWFsb2cuZHJhdyhudWxsLCBbcm9vdE5vZGVdLCBudWxsKTsKKyAgICAgICAgZXhwZWN0KGFs ZXJ0aWZ5U3B5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAnQmFja3Vw IEVycm9yJywKKyAgICAgICAgICAnUGxlYXNlIHNlbGVjdCBzZXJ2ZXIgb3IgY2hpbGQgbm9kZSBm cm9tIHRoZSBicm93c2VyIHRyZWUuJworICAgICAgICApOworICAgICAgfSk7CisgICAgfSk7CisK KyAgICBjb250ZXh0KCd0aGVyZSBpcyBhbiBhbmNlc3RvciBvZiB0aGUgdHlwZSBzZXJ2ZXInLCAo KSA9PiB7CisgICAgICBjb250ZXh0KCdubyBwcmVmZXJlbmNlIGNhbiBiZSBmb3VuZCcsICgpID0+ IHsKKyAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgICAgcGdCcm93c2VyLmdldF9w cmVmZXJlbmNlLmFuZC5yZXR1cm5WYWx1ZSh1bmRlZmluZWQpOworICAgICAgICB9KTsKKworICAg ICAgICBjb250ZXh0KCdzZXJ2ZXIgaXMgYSBwcGFzIHNlcnZlcicsICgpID0+IHsKKyAgICAgICAg ICBpdCgnZGlzcGxheSBhbiBhbGVydCB3aXRoICJCYWNrdXAgRXJyb3IiJywgKCkgPT4geworICAg ICAgICAgICAgYmFja3VwRGlhbG9nLmRyYXcobnVsbCwgW3NlcnZlclRyZWVOb2RlXSwgbnVsbCk7 CisgICAgICAgICAgICBleHBlY3QoYWxlcnRpZnlTcHkuYWxlcnQpLnRvSGF2ZUJlZW5DYWxsZWRX aXRoKAorICAgICAgICAgICAgICAnQmFja3VwIEVycm9yJywKKyAgICAgICAgICAgICAgJ0ZhaWxl ZCB0byBsb2FkIHByZWZlcmVuY2UgcGdfYmluX2RpciBvZiBtb2R1bGUgcGF0aHMnCisgICAgICAg ICAgICApOworICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgICAgICBjb250ZXh0KCdz ZXJ2ZXIgaXMgbm90IGEgcHBhcyBzZXJ2ZXInLCAoKSA9PiB7CisgICAgICAgICAgaXQoJ2Rpc3Bs YXkgYW4gYWxlcnQgd2l0aCAiQmFja3VwIEVycm9yIicsICgpID0+IHsKKyAgICAgICAgICAgIGJh Y2t1cERpYWxvZy5kcmF3KG51bGwsIFtwcGFzU2VydmVyVHJlZU5vZGVdLCBudWxsKTsKKyAgICAg ICAgICAgIGV4cGVjdChhbGVydGlmeVNweS5hbGVydCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisg ICAgICAgICAgICAgICdCYWNrdXAgRXJyb3InLAorICAgICAgICAgICAgICAnRmFpbGVkIHRvIGxv YWQgcHJlZmVyZW5jZSBwcGFzX2Jpbl9kaXIgb2YgbW9kdWxlIHBhdGhzJworICAgICAgICAgICAg KTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKworICAgICAgY29udGV4 dCgncHJlZmVyZW5jZSBjYW4gYmUgZm91bmQnLCAoKSA9PiB7CisgICAgICAgIGNvbnRleHQoJ2Jp bmFyeSBmb2xkZXIgaXMgbm90IGNvbmZpZ3VyZWQnLCAoKSA9PiB7CisgICAgICAgICAgYmVmb3Jl RWFjaCgoKSA9PiB7CisgICAgICAgICAgICBwZ0Jyb3dzZXIuZ2V0X3ByZWZlcmVuY2UuYW5kLnJl dHVyblZhbHVlKHt9KTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIGNvbnRleHQoJ3NlcnZl ciBpcyBhIHBwYXMgc2VydmVyJywgKCkgPT4geworICAgICAgICAgICAgaXQoJ2Rpc3BsYXkgYW4g YWxlcnQgd2l0aCAiQ29uZmlndXJhdGlvbiByZXF1aXJlZCInLCAoKSA9PiB7CisgICAgICAgICAg ICAgIGJhY2t1cERpYWxvZy5kcmF3KG51bGwsIFtzZXJ2ZXJUcmVlTm9kZV0sIG51bGwpOworICAg ICAgICAgICAgICBleHBlY3QoYWxlcnRpZnlTcHkuYWxlcnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRo KAorICAgICAgICAgICAgICAgICdDb25maWd1cmF0aW9uIHJlcXVpcmVkJywKKyAgICAgICAgICAg ICAgICAnUGxlYXNlIGNvbmZpZ3VyZSB0aGUgUG9zdGdyZVNRTCBCaW5hcnkgUGF0aCBpbiB0aGUg UHJlZmVyZW5jZXMgZGlhbG9nLicKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0pOwor ICAgICAgICAgIH0pOworCisgICAgICAgICAgY29udGV4dCgnc2VydmVyIGlzIG5vdCBhIHBwYXMg c2VydmVyJywgKCkgPT4geworICAgICAgICAgICAgaXQoJ2Rpc3BsYXkgYW4gYWxlcnQgd2l0aCAi Q29uZmlndXJhdGlvbiByZXF1aXJlZCInLCAoKSA9PiB7CisgICAgICAgICAgICAgIGJhY2t1cERp YWxvZy5kcmF3KG51bGwsIFtwcGFzU2VydmVyVHJlZU5vZGVdLCBudWxsKTsKKyAgICAgICAgICAg ICAgZXhwZWN0KGFsZXJ0aWZ5U3B5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAg ICAgICAgICAgICAnQ29uZmlndXJhdGlvbiByZXF1aXJlZCcsCisgICAgICAgICAgICAgICAgJ1Bs ZWFzZSBjb25maWd1cmUgdGhlIEVEQiBBZHZhbmNlZCBTZXJ2ZXIgQmluYXJ5IFBhdGggaW4gdGhl IFByZWZlcmVuY2VzIGRpYWxvZy4nCisgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9KTsK KyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29udGV4dCgnYmluYXJ5IGZv bGRlciBpcyBjb25maWd1cmVkJywgKCkgPT4geworICAgICAgICAgIGxldCBnbG9iYWxSZXNpemVU b1NweTsKKyAgICAgICAgICBsZXQgc2VydmVyUmVzaXplVG9TcHk7CisgICAgICAgICAgYmVmb3Jl RWFjaCgoKSA9PiB7CisgICAgICAgICAgICBnbG9iYWxSZXNpemVUb1NweSA9IGphc21pbmUuY3Jl YXRlU3B5T2JqKCdnbG9iYWxzJywgWydyZXNpemVUbyddKTsKKyAgICAgICAgICAgIGFsZXJ0aWZ5 U3B5WydCYWNrdXBEaWFsb2dfZ2xvYmFscyddLmFuZAorICAgICAgICAgICAgICAucmV0dXJuVmFs dWUoZ2xvYmFsUmVzaXplVG9TcHkpOworICAgICAgICAgICAgc2VydmVyUmVzaXplVG9TcHkgPSBq YXNtaW5lLmNyZWF0ZVNweU9iaignc2VydmVyJywgWydyZXNpemVUbyddKTsKKyAgICAgICAgICAg IGFsZXJ0aWZ5U3B5WydCYWNrdXBEaWFsb2dfc2VydmVyJ10uYW5kCisgICAgICAgICAgICAgIC5y ZXR1cm5WYWx1ZShzZXJ2ZXJSZXNpemVUb1NweSk7CisgICAgICAgICAgICBwZ0Jyb3dzZXIuZ2V0 X3ByZWZlcmVuY2UuYW5kLnJldHVyblZhbHVlKHt2YWx1ZTogJy9zb21lL3BhdGgnfSk7CisgICAg ICAgICAgfSk7CisKKyAgICAgICAgICBjb250ZXh0KCdkaWFsb2cgZm9yIGdsb2JhbCBiYWNrdXAn LCAoKSA9PiB7CisgICAgICAgICAgICBpdCgnZGlzcGxheXMgdGhlIGRpYWxvZycsICgpID0+IHsK KyAgICAgICAgICAgICAgYmFja3VwRGlhbG9nLmRyYXcobnVsbCwgW3NlcnZlclRyZWVOb2RlXSwg e2dsb2JhbHM6IHRydWV9KTsKKyAgICAgICAgICAgICAgZXhwZWN0KGFsZXJ0aWZ5U3B5WydCYWNr dXBEaWFsb2dfZ2xvYmFscyddKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh0cnVlKTsKKyAgICAgICAg ICAgICAgZXhwZWN0KGdsb2JhbFJlc2l6ZVRvU3B5LnJlc2l6ZVRvKS50b0hhdmVCZWVuQ2FsbGVk V2l0aCgnNjAlJywgJzUwJScpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfSk7CisKKyAg ICAgICAgICBjb250ZXh0KCdkaWFsb2cgZm9yIHNlcnZlciBiYWNrdXAnLCAoKSA9PiB7CisgICAg ICAgICAgICBpdCgnZGlzcGxheXMgdGhlIGRpYWxvZycsICgpID0+IHsKKyAgICAgICAgICAgICAg YmFja3VwRGlhbG9nLmRyYXcobnVsbCwgW3NlcnZlclRyZWVOb2RlXSwge3NlcnZlcjogdHJ1ZX0p OworICAgICAgICAgICAgICBleHBlY3QoYWxlcnRpZnlTcHlbJ0JhY2t1cERpYWxvZ19zZXJ2ZXIn XSkudG9IYXZlQmVlbkNhbGxlZFdpdGgodHJ1ZSk7CisgICAgICAgICAgICAgIGV4cGVjdChzZXJ2 ZXJSZXNpemVUb1NweS5yZXNpemVUbykudG9IYXZlQmVlbkNhbGxlZFdpdGgoJzYwJScsICc1MCUn KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgIH0p OworICAgIH0pOworICB9KTsKK30pOwpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNj cmlwdC9iYWNrdXAvbWVudV91dGlsc19zcGVjLmpzIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlw dC9iYWNrdXAvbWVudV91dGlsc19zcGVjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwLi5lY2Y4YWJjZAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFz Y3JpcHQvYmFja3VwL21lbnVfdXRpbHNfc3BlYy5qcwpAQCAtMCwwICsxLDU1IEBACisvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisv LworLy8gcGdBZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykg MjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdh cmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisK KworaW1wb3J0IHttZW51RW5hYmxlZFNlcnZlcn0gZnJvbSAnLi4vLi4vLi4vcGdhZG1pbi9zdGF0 aWMvanMvYmFja3VwL21lbnVfdXRpbHMnOworCitjb25zdCBjb250ZXh0ID0gZGVzY3JpYmU7CisK K2Rlc2NyaWJlKCdiYWNrdXAubWVudVV0aWxzJywgKCkgPT4geworICBkZXNjcmliZSgnI21lbnVF bmFibGVkU2VydmVyJywgKCkgPT4geworICAgIGNvbnRleHQoJ3Byb3ZpZGVkIG5vZGUgZGF0YSBp cyB1bmRlZmluZWQnLCAoKSA9PiB7CisgICAgICBpdCgncmV0dXJucyBmYWxzZScsICgpID0+IHsK KyAgICAgICAgZXhwZWN0KG1lbnVFbmFibGVkU2VydmVyKHVuZGVmaW5lZCkpLnRvQmUoZmFsc2Up OworICAgICAgfSk7CisgICAgfSk7CisKKyAgICBjb250ZXh0KCdwcm92aWRlZCBub2RlIGRhdGEg aXMgbnVsbCcsICgpID0+IHsKKyAgICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAg ICAgICBleHBlY3QobWVudUVuYWJsZWRTZXJ2ZXIobnVsbCkpLnRvQmUoZmFsc2UpOworICAgICAg fSk7CisgICAgfSk7CisKKyAgICBjb250ZXh0KCdjdXJyZW50IG5vZGUgdHlwZSBpcyBub3Qgb2Yg dGhlIHR5cGUgc2VydmVyJywgKCkgPT4geworICAgICAgaXQoJ3JldHVybnMgZmFsc2UnLCAoKSA9 PiB7CisgICAgICAgIGV4cGVjdChtZW51RW5hYmxlZFNlcnZlcih7X3R5cGU6ICdzY2hlbWEnfSkp LnRvQmUoZmFsc2UpOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICBjb250ZXh0KCdjdXJyZW50 IG5vZGUgdHlwZSBpcyBvZiB0aGUgdHlwZSBzZXJ2ZXInLCAoKSA9PiB7CisgICAgICBjb250ZXh0 KCdpcyBjb25uZWN0ZWQnLCAoKSA9PiB7CisgICAgICAgIGl0KCdyZXR1cm5zIHRydWUnLCAoKSA9 PiB7CisgICAgICAgICAgZXhwZWN0KG1lbnVFbmFibGVkU2VydmVyKHsKKyAgICAgICAgICAgIF90 eXBlOiAnc2VydmVyJywKKyAgICAgICAgICAgIGNvbm5lY3RlZDogdHJ1ZSwKKyAgICAgICAgICB9 KSkudG9CZSh0cnVlKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICAgIGNvbnRleHQoJ2lz IG5vdCBjb25uZWN0ZWQnLCAoKSA9PiB7CisgICAgICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkg PT4geworICAgICAgICAgIGV4cGVjdChtZW51RW5hYmxlZFNlcnZlcih7CisgICAgICAgICAgICBf dHlwZTogJ3NlcnZlcicsCisgICAgICAgICAgICBjb25uZWN0ZWQ6IGZhbHNlLAorICAgICAgICAg IH0pKS50b0JlKGZhbHNlKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7 Cit9KTsKKwpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9icm93c2VyL21v ZGlmeV9hbmltYXRpb25fc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvYnJvd3Nl ci9tb2RpZnlfYW5pbWF0aW9uX3NwZWMuanMKaW5kZXggYjgwNjBlZWQuLjUxYzg4MmQxIDEwMDY0 NAotLS0gYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2Jyb3dzZXIvbW9kaWZ5X2FuaW1hdGlv bl9zcGVjLmpzCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvYnJvd3Nlci9tb2RpZnlf YW5pbWF0aW9uX3NwZWMuanMKQEAgLTcsOCArNyw4IEBACiAvLwogLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotaW1wb3J0ICQg ZnJvbSAnanF1ZXJ5JwotaW1wb3J0IG1vZGlmeUFuaW1hdGlvbiBmcm9tICdzb3VyY2VzL21vZGlm eV9hbmltYXRpb24nCitpbXBvcnQgJCBmcm9tICdqcXVlcnknOworaW1wb3J0IG1vZGlmeUFuaW1h dGlvbiBmcm9tICdzb3VyY2VzL21vZGlmeV9hbmltYXRpb24nOwogCiAKIGRlc2NyaWJlKCdtb2Rp ZnlBbmltYXRpb24nLCBmdW5jdGlvbiAoKSB7CkBAIC0xNiwxMiArMTYsMTIgQEAgZGVzY3JpYmUo J21vZGlmeUFuaW1hdGlvbicsIGZ1bmN0aW9uICgpIHsKICAgbGV0IGR1bW15RWxlbWVudDsKIAog ICBiZWZvcmVFYWNoKCgpID0+IHsKLSAgICBwZ0Jyb3dzZXIgPSBqYXNtaW5lLmNyZWF0ZVNweU9i aigncGdCcm93c2VyJywgWydnZXRfcHJlZmVyZW5jZScsICd0cmVlJ10pCisgICAgcGdCcm93c2Vy ID0gamFzbWluZS5jcmVhdGVTcHlPYmooJ3BnQnJvd3NlcicsIFsnZ2V0X3ByZWZlcmVuY2UnLCAn dHJlZSddKTsKICAgICBwZ0Jyb3dzZXIudHJlZSA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCd0cmVl JywgWydvcHRpb25zJ10pOwogICAgIHBnQnJvd3Nlci50cmVlLm9wdGlvbnMuYW5kLnJldHVyblZh bHVlKHsKLSAgICAgICAgICBzaG93OiB7fSwKLSAgICAgICAgICBoaWRlOiB7fSwKLSAgICAgICAg ICB2aWV3OiB7fSwKKyAgICAgIHNob3c6IHt9LAorICAgICAgaGlkZToge30sCisgICAgICB2aWV3 OiB7fSwKICAgICB9KTsKICAgICBkdW1teUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50 KCdsaW5rJyk7CiAgICAgc3B5T24oJC5mbiwgJ2ZpbmQnKS5hbmQucmV0dXJuVmFsdWUoJChkdW1t eUVsZW1lbnQpKTsKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvbW9kZWxfdmFsaWRhdGlvbl9zcGVjLmpzIGIvd2ViL3Jl Z3Jlc3Npb24vamF2YXNjcmlwdC9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9tb2RlbF92 YWxpZGF0aW9uX3NwZWMuanMKaW5kZXggODVlNTFlYjkuLjk5MDUwNzQyIDEwMDY0NAotLS0gYS93 ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL21v ZGVsX3ZhbGlkYXRpb25fc3BlYy5qcworKysgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL21vZGVsX3ZhbGlkYXRpb25fc3BlYy5qcwpAQCAt NjIsNyArNjIsNyBAQCBkZXNjcmliZSgnU2VydmVyI01vZGVsVmFsaWRhdGlvbicsICgpID0+IHsK ICAgICAgICAgICBleHBlY3QobW9kZWwuZXJyb3JNb2RlbC5zZXQpLnRvSGF2ZUJlZW5DYWxsZWRX aXRoKHsKICAgICAgICAgICAgIGhvc3Q6ICdFaXRoZXIgSG9zdCBuYW1lLCBBZGRyZXNzIG9yIFNl cnZpY2UgbXVzdCBiZSBzcGVjaWZpZWQuJywKICAgICAgICAgICAgIGhvc3RhZGRyOiAnRWl0aGVy IEhvc3QgbmFtZSwgQWRkcmVzcyBvciBTZXJ2aWNlIG11c3QgYmUgc3BlY2lmaWVkLicsCi0gICAg ICAgICAgICBkYjogJ01haW50ZW5hbmNlIGRhdGFiYXNlIG11c3QgYmUgc3BlY2lmaWVkLicKKyAg ICAgICAgICAgIGRiOiAnTWFpbnRlbmFuY2UgZGF0YWJhc2UgbXVzdCBiZSBzcGVjaWZpZWQuJywK ICAgICAgICAgICB9KTsKICAgICAgICAgfSk7CiAgICAgICB9KTsKQEAgLTgxLDcgKzgxLDcgQEAg ZGVzY3JpYmUoJ1NlcnZlciNNb2RlbFZhbGlkYXRpb24nLCAoKSA9PiB7CiAgICAgICAgICAgICBo b3N0YWRkcjogJ0VpdGhlciBIb3N0IG5hbWUsIEFkZHJlc3Mgb3IgU2VydmljZSBtdXN0IGJlIHNw ZWNpZmllZC4nLAogICAgICAgICAgICAgZGI6ICdNYWludGVuYW5jZSBkYXRhYmFzZSBtdXN0IGJl IHNwZWNpZmllZC4nLAogICAgICAgICAgICAgdXNlcm5hbWU6ICdVc2VybmFtZSBtdXN0IGJlIHNw ZWNpZmllZC4nLAotICAgICAgICAgICAgcG9ydDogJ1BvcnQgbXVzdCBiZSBzcGVjaWZpZWQuJwor ICAgICAgICAgICAgcG9ydDogJ1BvcnQgbXVzdCBiZSBzcGVjaWZpZWQuJywKICAgICAgICAgICB9 KTsKICAgICAgICAgfSk7CiAgICAgICB9KTsKQEAgLTk2LDcgKzk2LDcgQEAgZGVzY3JpYmUoJ1Nl cnZlciNNb2RlbFZhbGlkYXRpb24nLCAoKSA9PiB7CiAgICAgICAgICAgICBob3N0YWRkcjogJ0hv c3QgYWRkcmVzcyBtdXN0IGJlIHZhbGlkIElQdjQgb3IgSVB2NiBhZGRyZXNzLicsCiAgICAgICAg ICAgICBkYjogJ01haW50ZW5hbmNlIGRhdGFiYXNlIG11c3QgYmUgc3BlY2lmaWVkLicsCiAgICAg ICAgICAgICB1c2VybmFtZTogJ1VzZXJuYW1lIG11c3QgYmUgc3BlY2lmaWVkLicsCi0gICAgICAg ICAgICBwb3J0OiAnUG9ydCBtdXN0IGJlIHNwZWNpZmllZC4nCisgICAgICAgICAgICBwb3J0OiAn UG9ydCBtdXN0IGJlIHNwZWNpZmllZC4nLAogICAgICAgICAgIH0pOwogICAgICAgICB9KTsKICAg ICAgIH0pOwpAQCAtMTA5LDcgKzEwOSw3IEBAIGRlc2NyaWJlKCdTZXJ2ZXIjTW9kZWxWYWxpZGF0 aW9uJywgKCkgPT4gewogICAgICAgICAgIGV4cGVjdChtb2RlbC5lcnJvck1vZGVsLnNldCkudG9I YXZlQmVlbkNhbGxlZFdpdGgoewogICAgICAgICAgICAgbmFtZTogJ05hbWUgbXVzdCBiZSBzcGVj aWZpZWQuJywKICAgICAgICAgICAgIHVzZXJuYW1lOiAnVXNlcm5hbWUgbXVzdCBiZSBzcGVjaWZp ZWQuJywKLSAgICAgICAgICAgIHBvcnQ6ICdQb3J0IG11c3QgYmUgc3BlY2lmaWVkLicKKyAgICAg ICAgICAgIHBvcnQ6ICdQb3J0IG11c3QgYmUgc3BlY2lmaWVkLicsCiAgICAgICAgICAgfSk7CiAg ICAgICAgIH0pOwogICAgICAgfSk7CmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZhc2Ny aXB0L2NvbW1vbl9rZXlib2FyZF9zaG9ydGN1dHNfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2ph dmFzY3JpcHQvY29tbW9uX2tleWJvYXJkX3Nob3J0Y3V0c19zcGVjLmpzCmluZGV4IGI4OWFmNWIw Li5lMjc5MjliZiAxMDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9jb21tb25f a2V5Ym9hcmRfc2hvcnRjdXRzX3NwZWMuanMKKysrIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlw dC9jb21tb25fa2V5Ym9hcmRfc2hvcnRjdXRzX3NwZWMuanMKQEAgLTEwLDE4ICsxMCwxNCBAQAog aW1wb3J0IGtleWJvYXJkU2hvcnRjdXRzIGZyb20gJ3NvdXJjZXMva2V5Ym9hcmRfc2hvcnRjdXRz JzsKIAogZGVzY3JpYmUoJ3RoZSBrZXlib2FyZCBzaG9ydGN1dHMnLCAoKSA9PiB7Ci0gIGNvbnN0 IEYxX0tFWSA9IDExMiwKLSAgICBFRElUX0tFWSA9IDcxLCAgLy8gS2V5OiBHIC0+IEdyaWQgdmFs dWVzCi0gICAgTEVGVF9BUlJPV19LRVkgPSAzNywKLSAgICBSSUdIVF9BUlJPV19LRVkgPSAzOSwK LSAgICBNT1ZFX05FWFQgPSAncmlnaHQnOworICBjb25zdCBGMV9LRVkgPSAxMTI7CiAKICAgbGV0 IGRlYnVnZ2VyRWxlbWVudFNweSwgZXZlbnQsIGRlYnVnZ2VyVXNlclNob3J0Y3V0U3B5OwogICBk ZWJ1Z2dlclVzZXJTaG9ydGN1dFNweSA9IGphc21pbmUuY3JlYXRlU3B5T2JqKAogICAgICd1c2Vy RGVmaW5lZFNob3J0Y3V0cycsIFsKICAgICAgIHsgJ2VkaXRfZ3JpZF9rZXlzJzogbnVsbCB9LAog ICAgICAgeyAnbmV4dF9wYW5lbF9rZXlzJzogbnVsbCB9LAotICAgICAgeyAncHJldmlvdXNfcGFu ZWxfa2V5cyc6IG51bGwgfQorICAgICAgeyAncHJldmlvdXNfcGFuZWxfa2V5cyc6IG51bGwgfSwK ICAgICBdCiAgICk7CiAgIGJlZm9yZUVhY2goKCkgPT4gewpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jl c3Npb24vamF2YXNjcmlwdC9kYXRhZ3JpZC9nZXRfcGFuZWxfdGl0bGVfc3BlYy5qcyBiL3dlYi9y ZWdyZXNzaW9uL2phdmFzY3JpcHQvZGF0YWdyaWQvZ2V0X3BhbmVsX3RpdGxlX3NwZWMuanMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjI1OTRlYzk2Ci0tLSAvZGV2L251bGwK KysrIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9kYXRhZ3JpZC9nZXRfcGFuZWxfdGl0bGVf c3BlYy5qcwpAQCAtMCwwICsxLDgyIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1pbiA0IC0gUG9zdGdy ZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgsIFRoZSBwZ0FkbWlu IERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhl IFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKK2ltcG9ydCB7Z2V0UGFuZWxUaXRsZX0g ZnJvbSAnLi4vLi4vLi4vcGdhZG1pbi9zdGF0aWMvanMvZGF0YWdyaWQvZ2V0X3BhbmVsX3RpdGxl JzsKK2ltcG9ydCB7VHJlZUZha2V9IGZyb20gJy4uL3RyZWUvdHJlZV9mYWtlJzsKK2ltcG9ydCB7 VHJlZU5vZGV9IGZyb20gJy4uLy4uLy4uL3BnYWRtaW4vc3RhdGljL2pzL3RyZWUvdHJlZSc7CisK K2NvbnN0IGNvbnRleHQgPSBkZXNjcmliZTsKKworZGVzY3JpYmUoJyNnZXRQYW5lbFRpdGxlJywg KCkgPT4geworICBsZXQgcGdCcm93c2VyOworICBsZXQgdHJlZTsKKyAgYmVmb3JlRWFjaCgoKSA9 PiB7CisgICAgdHJlZSA9IG5ldyBUcmVlRmFrZSgpOworICAgIHBnQnJvd3NlciA9IHsKKyAgICAg IHRyZWVNZW51OiB0cmVlLAorICAgICAgTm9kZXM6IHsKKyAgICAgICAgc2VydmVyOiB7CisgICAg ICAgICAgaGFzSWQ6IHRydWUsCisgICAgICAgICAgX3R5cGU6ICdzZXJ2ZXInLAorICAgICAgICB9 LAorICAgICAgICBkYXRhYmFzZTogeworICAgICAgICAgIGhhc0lkOiB0cnVlLAorICAgICAgICAg IF90eXBlOiAnZGF0YWJhc2UnLAorICAgICAgICB9LAorICAgICAgfSwKKyAgICB9OworICB9KTsK KworICBjb250ZXh0KCdzZWxlY3RlZCBub2RlIGRvZXMgbm90IGJlbG9uZyB0byBhIHNlcnZlcics ICgpID0+IHsKKyAgICBpdCgncmV0dXJucyB1bmRlZmluZWQnLCAoKSA9PiB7CisgICAgICBjb25z dCByb290ID0gdHJlZS5hZGROZXdOb2RlKCdsZXZlbDEnLCB7X3R5cGU6ICdzZXJ2ZXJfZ3JvdXBz J30pOworICAgICAgdHJlZS5hZGRDaGlsZChyb290LCBuZXcgVHJlZU5vZGUoJ2xldmVsMS4xJywg e190eXBlOiAnb3RoZXInfSkpOworICAgICAgdHJlZS5zZWxlY3ROb2RlKFt7aWQ6ICdsZXZlbDEn fV0pOworICAgICAgZXhwZWN0KGdldFBhbmVsVGl0bGUocGdCcm93c2VyKSkudG9CZVVuZGVmaW5l ZCgpOworICAgIH0pOworICB9KTsKKworICBjb250ZXh0KCdzZWxlY3RlZCBub2RlIGJlbG9uZyB0 byBhIHNlcnZlcicsICgpID0+IHsKKyAgICBjb250ZXh0KCdzZWxlY3RlZCBub2RlIGRvZXMgbm90 IGJlbG9uZyB0byBhIGRhdGFiYXNlJywgKCkgPT4geworICAgICAgaXQoJ3JldHVybnMgdGhlIHNl cnZlciBsYWJlbCBhbmQgdGhlIHVzZXJuYW1lJywgKCkgPT4geworICAgICAgICB0cmVlLmFkZE5l d05vZGUoJ2xldmVsMScsIHsKKyAgICAgICAgICBfdHlwZTogJ3NlcnZlcicsCisgICAgICAgICAg ZGI6ICdvdGhlciBkYiBsYWJlbCcsCisgICAgICAgICAgdXNlcjoge25hbWU6ICdzb21lIHVzZXIg bmFtZSd9LAorICAgICAgICAgIGxhYmVsOiAnc2VydmVyIGxhYmVsJywKKyAgICAgICAgfSwgW10p OworCisgICAgICAgIHRyZWUuc2VsZWN0Tm9kZShbe2lkOiAnbGV2ZWwxJ31dKTsKKyAgICAgICAg ZXhwZWN0KGdldFBhbmVsVGl0bGUocGdCcm93c2VyKSkKKyAgICAgICAgICAudG9CZSgnb3RoZXIg ZGIgbGFiZWwgb24gc29tZSB1c2VyIG5hbWVAc2VydmVyIGxhYmVsJyk7CisgICAgICB9KTsKKyAg ICB9KTsKKworICAgIGNvbnRleHQoJ3NlbGVjdGVkIG5vZGUgYmVsb25ncyB0byBhIGRhdGFiYXNl JywgKCkgPT4geworICAgICAgaXQoJ3JldHVybnMgdGhlIGRhdGFiYXNlIGxhYmVsIGFuZCB0aGUg dXNlcm5hbWUnLCAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJvb3QgPSB0cmVlLmFkZE5ld05vZGUo J2xldmVsMScsIHsKKyAgICAgICAgICBfdHlwZTogJ3NlcnZlcicsCisgICAgICAgICAgZGI6ICdv dGhlciBkYiBsYWJlbCcsCisgICAgICAgICAgdXNlcjoge25hbWU6ICdzb21lIHVzZXIgbmFtZSd9 LAorICAgICAgICAgIGxhYmVsOiAnc2VydmVyIGxhYmVsJywKKyAgICAgICAgfSk7CisgICAgICAg IGNvbnN0IGxldmVsMSA9IG5ldyBUcmVlTm9kZSgnbGV2ZWwxLjEnLCB7CisgICAgICAgICAgX3R5 cGU6ICdkYXRhYmFzZScsCisgICAgICAgICAgbGFiZWw6ICdkYiBsYWJlbCcsCisgICAgICAgIH0p OworICAgICAgICB0cmVlLmFkZENoaWxkKHJvb3QsIGxldmVsMSk7CisgICAgICAgIHRyZWUuYWRk Q2hpbGQobGV2ZWwxLAorICAgICAgICAgIG5ldyBUcmVlTm9kZSgnbGV2ZWwxLjEuMScsIHtfdHlw ZTogJ3RhYmxlJ30pKTsKKyAgICAgICAgdHJlZS5zZWxlY3ROb2RlKFt7aWQ6ICdsZXZlbDEuMS4x J31dKTsKKyAgICAgICAgZXhwZWN0KGdldFBhbmVsVGl0bGUocGdCcm93c2VyKSkKKyAgICAgICAg ICAudG9CZSgnZGIgbGFiZWwgb24gc29tZSB1c2VyIG5hbWVAc2VydmVyIGxhYmVsJyk7CisgICAg ICB9KTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2ph dmFzY3JpcHQvZGF0YWdyaWQvc2hvd19kYXRhX3NwZWMuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZh c2NyaXB0L2RhdGFncmlkL3Nob3dfZGF0YV9zcGVjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwLi4zZTRmZWVjOQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9yZWdyZXNzaW9u L2phdmFzY3JpcHQvZGF0YWdyaWQvc2hvd19kYXRhX3NwZWMuanMKQEAgLTAsMCArMSwxNzEgQEAK Ky8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8KKy8vCisvLyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisvLworLy8gQ29weXJp Z2h0IChDKSAyMDEzIC0gMjAxOCwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorLy8gVGhp cyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisvLwor Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8KKworaW1wb3J0IHtzaG93RGF0YUdyaWR9IGZyb20gJy4uLy4uLy4uL3BnYWRtaW4vc3Rh dGljL2pzL2RhdGFncmlkL3Nob3dfZGF0YSc7CitpbXBvcnQge1RyZWVGYWtlfSBmcm9tICcuLi90 cmVlL3RyZWVfZmFrZSc7CitpbXBvcnQge1RyZWVOb2RlfSBmcm9tICcuLi8uLi8uLi9wZ2FkbWlu L3N0YXRpYy9qcy90cmVlL3RyZWUnOworCitjb25zdCBjb250ZXh0ID0gZGVzY3JpYmU7CisKK2Rl c2NyaWJlKCcjc2hvd19kYXRhJywgKCkgPT4geworICBsZXQgZGF0YWdyaWQ7CisgIGxldCBwZ0Jy b3dzZXI7CisgIGxldCBhbGVydGlmeTsKKyAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgYWxlcnRp ZnkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignYWxlcnRpZnknLCBbJ2FsZXJ0J10pOworICAgIGRh dGFncmlkID0geworICAgICAgY3JlYXRlX3RyYW5zYWN0aW9uOiBqYXNtaW5lLmNyZWF0ZVNweSgn Y3JlYXRlX3RyYW5zYWN0aW9uJyksCisgICAgfTsKKyAgICBwZ0Jyb3dzZXIgPSB7CisgICAgICB0 cmVlTWVudTogbmV3IFRyZWVGYWtlKCksCisgICAgICBOb2RlczogeworICAgICAgICBzZXJ2ZXJf Z3JvdXA6IHsKKyAgICAgICAgICBfdHlwZTogJ3NlcnZlcl9ncm91cCcsCisgICAgICAgICAgaGFz SWQ6IHRydWUsCisgICAgICAgIH0sCisgICAgICAgIHNlcnZlcjogeworICAgICAgICAgIF90eXBl OiAnc2VydmVyJywKKyAgICAgICAgICBoYXNJZDogdHJ1ZSwKKyAgICAgICAgfSwKKyAgICAgICAg ZGF0YWJhc2U6IHsKKyAgICAgICAgICBfdHlwZTogJ2RhdGFiYXNlJywKKyAgICAgICAgICBoYXNJ ZDogdHJ1ZSwKKyAgICAgICAgfSwKKyAgICAgICAgc2NoZW1hOiB7CisgICAgICAgICAgX3R5cGU6 ICdzY2hlbWEnLAorICAgICAgICAgIGhhc0lkOiB0cnVlLAorICAgICAgICB9LAorICAgICAgICB2 aWV3OiB7CisgICAgICAgICAgX3R5cGU6ICd2aWV3JywKKyAgICAgICAgICBoYXNJZDogdHJ1ZSwK KyAgICAgICAgfSwKKyAgICAgICAgY2F0YWxvZzogeworICAgICAgICAgIF90eXBlOiAnY2F0YWxv ZycsCisgICAgICAgICAgaGFzSWQ6IHRydWUsCisgICAgICAgIH0sCisgICAgICB9LAorICAgIH07 CisgICAgY29uc3QgcGFyZW50ID0gcGdCcm93c2VyLnRyZWVNZW51LmFkZE5ld05vZGUoJ3BhcmVu dCcsIHtfdHlwZTogJ3BhcmVudCd9LCBbXSk7CisgICAgY29uc3Qgc2VydmVyR3JvdXAxID0gbmV3 IFRyZWVOb2RlKCdzZXJ2ZXJfZ3JvdXAxJywgeworICAgICAgX3R5cGU6ICdzZXJ2ZXJfZ3JvdXAn LAorICAgICAgX2lkOiAxLAorICAgIH0pOworICAgIHBnQnJvd3Nlci50cmVlTWVudS5hZGRDaGls ZChwYXJlbnQsIHNlcnZlckdyb3VwMSk7CisKKyAgICBjb25zdCBzZXJ2ZXIxID0gbmV3IFRyZWVO b2RlKCdzZXJ2ZXIxJywgeworICAgICAgX3R5cGU6ICdzZXJ2ZXInLAorICAgICAgbGFiZWw6ICdz ZXJ2ZXIxJywKKyAgICAgIHNlcnZlcl90eXBlOiAncGcnLAorICAgICAgX2lkOiAyLAorICAgIH0s IFsncGFyZW50JywgJ3NlcnZlcl9ncm91cDEnXSk7CisgICAgcGdCcm93c2VyLnRyZWVNZW51LmFk ZENoaWxkKHNlcnZlckdyb3VwMSwgc2VydmVyMSk7CisKKyAgICBjb25zdCBkYXRhYmFzZTEgPSBu ZXcgVHJlZU5vZGUoJ2RhdGFiYXNlMScsIHsKKyAgICAgIF90eXBlOiAnZGF0YWJhc2UnLAorICAg ICAgbGFiZWw6ICdkYXRhYmFzZTEnLAorICAgICAgX2lkOiAzLAorICAgIH0sIFsncGFyZW50Jywg J3NlcnZlcl9ncm91cDEnLCAnc2VydmVyMSddKTsKKyAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuYWRk Q2hpbGQoc2VydmVyMSwgZGF0YWJhc2UxKTsKKworICAgIGNvbnN0IHNjaGVtYTEgPSBuZXcgVHJl ZU5vZGUoJ3NjaGVtYTEnLCB7CisgICAgICBfdHlwZTogJ3NjaGVtYScsCisgICAgICBsYWJlbDog J3NjaGVtYTEnLAorICAgICAgX2lkOiA0LAorICAgIH0pOworICAgIHBnQnJvd3Nlci50cmVlTWVu dS5hZGRDaGlsZChkYXRhYmFzZTEsIHNjaGVtYTEpOworCisgICAgY29uc3QgdmlldzEgPSBuZXcg VHJlZU5vZGUoJ3ZpZXcxJywgeworICAgICAgX3R5cGU6ICd2aWV3JywKKyAgICAgIGxhYmVsOiAn dmlldzEnLAorICAgICAgX2lkOiA1LAorICAgIH0sIFsncGFyZW50JywgJ3NlcnZlcl9ncm91cDEn LCAnc2VydmVyMScsICdkYXRhYmFzZTEnXSk7CisgICAgcGdCcm93c2VyLnRyZWVNZW51LmFkZENo aWxkKGRhdGFiYXNlMSwgdmlldzEpOworCisgICAgY29uc3QgY2F0YWxvZzEgPSBuZXcgVHJlZU5v ZGUoJ2NhdGFsb2cxJywgeworICAgICAgX3R5cGU6ICdjYXRhbG9nJywKKyAgICAgIGxhYmVsOiAn Y2F0YWxvZzEnLAorICAgICAgX2lkOiA2LAorICAgIH0sIFsncGFyZW50JywgJ3NlcnZlcl9ncm91 cDEnLCAnc2VydmVyMScsICdkYXRhYmFzZTEnXSk7CisgICAgcGdCcm93c2VyLnRyZWVNZW51LmFk ZENoaWxkKGRhdGFiYXNlMSwgY2F0YWxvZzEpOworICB9KTsKKworICBjb250ZXh0KCdjYW5ub3Qg ZmluZCB0aGUgdHJlZSBub2RlJywgKCkgPT4geworICAgIGl0KCdkb2VzIG5vdCBjcmVhdGUgYSB0 cmFuc2FjdGlvbicsICgpID0+IHsKKyAgICAgIHNob3dEYXRhR3JpZChkYXRhZ3JpZCwgcGdCcm93 c2VyLCBhbGVydGlmeSwge30sIFt7aWQ6ICcxMCd9XSk7CisgICAgICBleHBlY3QoZGF0YWdyaWQu Y3JlYXRlX3RyYW5zYWN0aW9uKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpOworICAgIH0pOworCisg ICAgaXQoJ2Rpc3BsYXkgYWxlcnQnLCAoKSA9PiB7CisgICAgICBzaG93RGF0YUdyaWQoZGF0YWdy aWQsIHBnQnJvd3NlciwgYWxlcnRpZnksIHt9LCBbe2lkOiAnMTAnfV0pOworICAgICAgZXhwZWN0 KGFsZXJ0aWZ5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgJ0RhdGEgR3Jp ZCBFcnJvcicsCisgICAgICAgICdObyBvYmplY3Qgc2VsZWN0ZWQuJworICAgICAgKTsKKyAgICB9 KTsKKyAgfSk7CisKKyAgY29udGV4dCgnY3VycmVudCBub2RlIGlzIG5vdCB1bmRlcm5lYXRoIGEg c2VydmVyJywgKCkgPT4geworICAgIGl0KCdkb2VzIG5vdCBjcmVhdGUgYSB0cmFuc2FjdGlvbics ICgpID0+IHsKKyAgICAgIHNob3dEYXRhR3JpZChkYXRhZ3JpZCwgcGdCcm93c2VyLCBhbGVydGlm eSwge30sIFt7aWQ6ICdwYXJlbnQnfV0pOworICAgICAgZXhwZWN0KGRhdGFncmlkLmNyZWF0ZV90 cmFuc2FjdGlvbikubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICB9KTsKKyAgfSk7CisKKyAg Y29udGV4dCgnY3VycmVudCBub2RlIGlzIG5vdCB1bmRlcm5lYXRoIGEgc2NoZW1hIG9yIHZpZXcg b3IgY2F0YWxvZycsICgpID0+IHsKKyAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEgdHJhbnNhY3Rp b24nLCAoKSA9PiB7CisgICAgICBzaG93RGF0YUdyaWQoZGF0YWdyaWQsIHBnQnJvd3NlciwgYWxl cnRpZnksIHt9LCBbe2lkOiAnZGF0YWJhc2UxJ31dKTsKKyAgICAgIGV4cGVjdChkYXRhZ3JpZC5j cmVhdGVfdHJhbnNhY3Rpb24pLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7CisgICAgfSk7CisgIH0p OworCisgIGNvbnRleHQoJ2N1cnJlbnQgbm9kZSBpcyB1bmRlcm5lYXRoIGEgc2NoZW1hJywgKCkg PT4geworICAgIGl0KCdkb2VzIG5vdCBjcmVhdGUgYSB0cmFuc2FjdGlvbicsICgpID0+IHsKKyAg ICAgIHNob3dEYXRhR3JpZChkYXRhZ3JpZCwgcGdCcm93c2VyLCBhbGVydGlmeSwge21udWlkOiAx MX0sIFt7aWQ6ICdzY2hlbWExJ31dKTsKKyAgICAgIGV4cGVjdChkYXRhZ3JpZC5jcmVhdGVfdHJh bnNhY3Rpb24pLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAnL2luaXRpYWxpemUvZGF0 YWdyaWQvMTEvc2NoZW1hLzEvMi8zLzQnLAorICAgICAgICBudWxsLAorICAgICAgICAnZmFsc2Un LAorICAgICAgICAncGcnLAorICAgICAgICAnJywKKyAgICAgICAgJ3NlcnZlcjEgLSBkYXRhYmFz ZTEgLSBzY2hlbWExLnNjaGVtYTEnLAorICAgICAgICAnJworICAgICAgKTsKKyAgICB9KTsKKyAg fSk7CisKKyAgY29udGV4dCgnY3VycmVudCBub2RlIGlzIHVuZGVybmVhdGggYSB2aWV3JywgKCkg PT4geworICAgIGl0KCdkb2VzIG5vdCBjcmVhdGUgYSB0cmFuc2FjdGlvbicsICgpID0+IHsKKyAg ICAgIHNob3dEYXRhR3JpZChkYXRhZ3JpZCwgcGdCcm93c2VyLCBhbGVydGlmeSwge21udWlkOiAx MX0sIFt7aWQ6ICd2aWV3MSd9XSk7CisgICAgICBleHBlY3QoZGF0YWdyaWQuY3JlYXRlX3RyYW5z YWN0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgJy9pbml0aWFsaXplL2RhdGFn cmlkLzExL3ZpZXcvMS8yLzMvNScsCisgICAgICAgIG51bGwsCisgICAgICAgICdmYWxzZScsCisg ICAgICAgICdwZycsCisgICAgICAgICcnLAorICAgICAgICAnc2VydmVyMSAtIGRhdGFiYXNlMSAt IHZpZXcxLnZpZXcxJywKKyAgICAgICAgJycKKyAgICAgICk7CisgICAgfSk7CisgIH0pOworCisg IGNvbnRleHQoJ2N1cnJlbnQgbm9kZSBpcyB1bmRlcm5lYXRoIGEgY2F0YWxvZycsICgpID0+IHsK KyAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEgdHJhbnNhY3Rpb24nLCAoKSA9PiB7CisgICAgICBz aG93RGF0YUdyaWQoZGF0YWdyaWQsIHBnQnJvd3NlciwgYWxlcnRpZnksIHttbnVpZDogMTF9LCBb e2lkOiAnY2F0YWxvZzEnfV0pOworICAgICAgZXhwZWN0KGRhdGFncmlkLmNyZWF0ZV90cmFuc2Fj dGlvbikudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAgICcvaW5pdGlhbGl6ZS9kYXRhZ3Jp ZC8xMS9jYXRhbG9nLzEvMi8zLzYnLAorICAgICAgICBudWxsLAorICAgICAgICAnZmFsc2UnLAor ICAgICAgICAncGcnLAorICAgICAgICAnJywKKyAgICAgICAgJ3NlcnZlcjEgLSBkYXRhYmFzZTEg LSBjYXRhbG9nMS5jYXRhbG9nMScsCisgICAgICAgICcnCisgICAgICApOworICAgIH0pOworICB9 KTsKK30pOwpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9kYXRhZ3JpZC9z aG93X3F1ZXJ5X3Rvb2xfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvZGF0YWdy aWQvc2hvd19xdWVyeV90b29sX3NwZWMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAuLmU1ODExMmMwCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNj cmlwdC9kYXRhZ3JpZC9zaG93X3F1ZXJ5X3Rvb2xfc3BlYy5qcwpAQCAtMCwwICsxLDEyNSBAQAor Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmln aHQgKEMpIDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlz IHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisv Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLworCitpbXBvcnQge1RyZWVGYWtlfSBmcm9tICcuLi90cmVlL3RyZWVfZmFrZSc7CitpbXBv cnQge3Nob3dRdWVyeVRvb2x9IGZyb20gJy4uLy4uLy4uL3BnYWRtaW4vc3RhdGljL2pzL2RhdGFn cmlkL3Nob3dfcXVlcnlfdG9vbCc7CitpbXBvcnQge1RyZWVOb2RlfSBmcm9tICcuLi8uLi8uLi9w Z2FkbWluL3N0YXRpYy9qcy90cmVlL3RyZWUnOworCitjb25zdCBjb250ZXh0ID0gZGVzY3JpYmU7 CisKK2Rlc2NyaWJlKCcjc2hvd1F1ZXJ5VG9vbCcsICgpID0+IHsKKyAgbGV0IHF1ZXJ5VG9vbDsK KyAgbGV0IHBnQnJvd3NlcjsKKyAgbGV0IGFsZXJ0aWZ5OworICBiZWZvcmVFYWNoKCgpID0+IHsK KyAgICBhbGVydGlmeSA9IGphc21pbmUuY3JlYXRlU3B5T2JqKCdhbGVydGlmeScsIFsnYWxlcnQn XSk7CisgICAgcXVlcnlUb29sID0geworICAgICAgY3JlYXRlX3RyYW5zYWN0aW9uOiBqYXNtaW5l LmNyZWF0ZVNweSgnY3JlYXRlX3RyYW5zYWN0aW9uJyksCisgICAgfTsKKyAgICBwZ0Jyb3dzZXIg PSB7CisgICAgICB0cmVlTWVudTogbmV3IFRyZWVGYWtlKCksCisgICAgICBOb2RlczogeworICAg ICAgICBzZXJ2ZXJfZ3JvdXA6IHsKKyAgICAgICAgICBfdHlwZTogJ3NlcnZlcl9ncm91cCcsCisg ICAgICAgICAgaGFzSWQ6IHRydWUsCisgICAgICAgIH0sCisgICAgICAgIHNlcnZlcjogeworICAg ICAgICAgIF90eXBlOiAnc2VydmVyJywKKyAgICAgICAgICBoYXNJZDogdHJ1ZSwKKyAgICAgICAg fSwKKyAgICAgICAgZGF0YWJhc2U6IHsKKyAgICAgICAgICBfdHlwZTogJ2RhdGFiYXNlJywKKyAg ICAgICAgICBoYXNJZDogdHJ1ZSwKKyAgICAgICAgfSwKKyAgICAgIH0sCisgICAgfTsKKyAgICBj b25zdCBwYXJlbnQgPSBwZ0Jyb3dzZXIudHJlZU1lbnUuYWRkTmV3Tm9kZSgncGFyZW50Jywge190 eXBlOiAncGFyZW50J30pOworICAgIGNvbnN0IHNlcnZlckdyb3VwMSA9ICBuZXcgVHJlZU5vZGUo J3NlcnZlcl9ncm91cDEnLCB7CisgICAgICBfdHlwZTogJ3NlcnZlcl9ncm91cCcsCisgICAgICBf aWQ6IDEsCisgICAgfSwgWydwYXJlbnQnXSk7CisgICAgcGdCcm93c2VyLnRyZWVNZW51LmFkZENo aWxkKHBhcmVudCwgc2VydmVyR3JvdXAxKTsKKworICAgIGNvbnN0IHNlcnZlcjEgPSBuZXcgVHJl ZU5vZGUoJ3NlcnZlcjEnLCB7CisgICAgICBfdHlwZTogJ3NlcnZlcicsCisgICAgICBsYWJlbDog J3NlcnZlcjEnLAorICAgICAgc2VydmVyX3R5cGU6ICdwZycsCisgICAgICBfaWQ6IDIsCisgICAg fSk7CisgICAgcGdCcm93c2VyLnRyZWVNZW51LmFkZENoaWxkKHNlcnZlckdyb3VwMSwgc2VydmVy MSk7CisKKyAgICBjb25zdCBkYXRhYmFzZTEgPSBuZXcgIFRyZWVOb2RlKCdkYXRhYmFzZTEnLCB7 CisgICAgICBfdHlwZTogJ2RhdGFiYXNlJywKKyAgICAgIGxhYmVsOiAnZGF0YWJhc2UxJywKKyAg ICAgIF9pZDogMywKKyAgICB9KTsKKyAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuYWRkQ2hpbGQoc2Vy dmVyMSwgZGF0YWJhc2UxKTsKKyAgfSk7CisKKyAgY29udGV4dCgnY2Fubm90IGZpbmQgdGhlIHRy ZWUgbm9kZScsICgpID0+IHsKKyAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgIHNob3dRdWVy eVRvb2wocXVlcnlUb29sLCBwZ0Jyb3dzZXIsIGFsZXJ0aWZ5LCAnJywgW3tpZDogJzEwJ31dLCAn dGl0bGUnKTsKKyAgICB9KTsKKyAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEgdHJhbnNhY3Rpb24n LCAoKSA9PiB7CisgICAgICBleHBlY3QocXVlcnlUb29sLmNyZWF0ZV90cmFuc2FjdGlvbikubm90 LnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICB9KTsKKworICAgIGl0KCdkaXNwbGF5IGFsZXJ0Jywg KCkgPT4geworICAgICAgZXhwZWN0KGFsZXJ0aWZ5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0 aCgKKyAgICAgICAgJ1F1ZXJ5IFRvb2wgRXJyb3InLAorICAgICAgICAnTm8gb2JqZWN0IHNlbGVj dGVkLicKKyAgICAgICk7CisgICAgfSk7CisgIH0pOworCisgIGNvbnRleHQoJ2N1cnJlbnQgbm9k ZSBpcyBub3QgdW5kZXJuZWF0aCBhIHNlcnZlcicsICgpID0+IHsKKyAgICBpdCgnZG9lcyBub3Qg Y3JlYXRlIGEgdHJhbnNhY3Rpb24nLCAoKSA9PiB7CisgICAgICBzaG93UXVlcnlUb29sKHF1ZXJ5 VG9vbCwgcGdCcm93c2VyLCBhbGVydGlmeSwgJycsIFt7aWQ6ICdwYXJlbnQnfV0sICd0aXRsZScp OworICAgICAgZXhwZWN0KHF1ZXJ5VG9vbC5jcmVhdGVfdHJhbnNhY3Rpb24pLm5vdC50b0hhdmVC ZWVuQ2FsbGVkKCk7CisgICAgfSk7CisKKyAgICBpdCgnbm8gYWxlcnQgaXMgZGlzcGxheWVkJywg KCkgPT4geworICAgICAgZXhwZWN0KGFsZXJ0aWZ5LmFsZXJ0KS5ub3QudG9IYXZlQmVlbkNhbGxl ZCgpOworICAgIH0pOworICB9KTsKKworICBjb250ZXh0KCdjdXJyZW50IG5vZGUgaXMgdW5kZXJu ZWF0aCBhIHNlcnZlcicsICgpID0+IHsKKyAgICBjb250ZXh0KCdjdXJyZW50IG5vZGUgaXMgbm90 IHVuZGVybmVhdGggYSBkYXRhYmFzZScsICgpID0+IHsKKyAgICAgIGl0KCdjcmVhdGVzIGEgdHJh bnNhY3Rpb24nLCAoKSA9PiB7CisgICAgICAgIHNob3dRdWVyeVRvb2wocXVlcnlUb29sLCBwZ0Jy b3dzZXIsIGFsZXJ0aWZ5LCAnaHR0cDovL3NvbWV1cmwnLCBbe2lkOiAnc2VydmVyMSd9XSwgJ3Rp dGxlJyk7CisgICAgICAgIGV4cGVjdChxdWVyeVRvb2wuY3JlYXRlX3RyYW5zYWN0aW9uKS50b0hh dmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAnL2luaXRpYWxpemUvcXVlcnlfdG9vbC8xLzIn LAorICAgICAgICAgIG51bGwsCisgICAgICAgICAgJ3RydWUnLAorICAgICAgICAgICdwZycsCisg ICAgICAgICAgJ2h0dHA6Ly9zb21ldXJsJywKKyAgICAgICAgICAndGl0bGUnLAorICAgICAgICAg ICcnLAorICAgICAgICAgIGZhbHNlCisgICAgICAgICk7CisgICAgICB9KTsKKyAgICB9KTsKKwor ICAgIGNvbnRleHQoJ2N1cnJlbnQgbm9kZSBpcyB1bmRlcm5lYXRoIGEgZGF0YWJhc2UnLCAoKSA9 PiB7CisgICAgICBpdCgnY3JlYXRlcyBhIHRyYW5zYWN0aW9uJywgKCkgPT4geworICAgICAgICBz aG93UXVlcnlUb29sKHF1ZXJ5VG9vbCwgcGdCcm93c2VyLCBhbGVydGlmeSwgJ2h0dHA6Ly9zb21l dXJsJywgW3tpZDogJ2RhdGFiYXNlMSd9XSwgJ3RpdGxlJyk7CisgICAgICAgIGV4cGVjdChxdWVy eVRvb2wuY3JlYXRlX3RyYW5zYWN0aW9uKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAg ICAnL2luaXRpYWxpemUvcXVlcnlfdG9vbC8xLzIvMycsCisgICAgICAgICAgbnVsbCwKKyAgICAg ICAgICAndHJ1ZScsCisgICAgICAgICAgJ3BnJywKKyAgICAgICAgICAnaHR0cDovL3NvbWV1cmwn LAorICAgICAgICAgICd0aXRsZScsCisgICAgICAgICAgJycsCisgICAgICAgICAgZmFsc2UKKyAg ICAgICAgKTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKK30pOwpkaWZmIC0tZ2l0IGEvd2Vi L3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9kZWJ1Z2dlcl91dGlsc19zcGVjLmpzIGIvd2ViL3JlZ3Jl c3Npb24vamF2YXNjcmlwdC9kZWJ1Z2dlcl91dGlsc19zcGVjLmpzCmluZGV4IDNlNmJlOTc2Li42 NWY5NWRkZSAxMDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9kZWJ1Z2dlcl91 dGlsc19zcGVjLmpzCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvZGVidWdnZXJfdXRp bHNfc3BlYy5qcwpAQCAtMTYsMTIgKzE2LDEyIEBAIGRlc2NyaWJlKCdkZWJ1Z2dlclV0aWxzJywg ZnVuY3Rpb24gKCkgewogICBsZXQgdGFiX2tleSA9IHsKICAgICB3aGljaDogOSwKICAgICBrZXlD b2RlOiA5LAotICB9CisgIH07CiAKICAgbGV0IGVudGVyX2tleSA9IHsKICAgICB3aGljaDogMTMs CiAgICAga2V5Q29kZTogMTMsCi0gIH0KKyAgfTsKIAogICBkZXNjcmliZSgnZGVidWdnZXJVdGls cycsIGZ1bmN0aW9uICgpIHsKICAgICBpdCgncmV0dXJucyB1bmRlZmluZWQgaWYgbm8gY29tbWFu ZCBpcyBwYXNzZWQnLCBmdW5jdGlvbiAoKSB7CkBAIC0zMSw3ICszMSw3IEBAIGRlc2NyaWJlKCdk ZWJ1Z2dlclV0aWxzJywgZnVuY3Rpb24gKCkgewogCiAgIGRlc2NyaWJlKCdkZWJ1Z2dlclV0aWxz JywgZnVuY3Rpb24gKCkgewogICAgIGl0KCdzaG91bGQgY2FsbCBmb2N1cyBvbiBlZGl0b3InLCBm dW5jdGlvbiAoKSB7Ci0gICAgICBzZXRGb2N1c1RvRGVidWdnZXJFZGl0b3IoZWRpdG9yLCBlbnRl cl9rZXkpCisgICAgICBzZXRGb2N1c1RvRGVidWdnZXJFZGl0b3IoZWRpdG9yLCBlbnRlcl9rZXkp OwogICAgICAgZXhwZWN0KGVkaXRvci5mb2N1cykudG9IYXZlQmVlbkNhbGxlZCgpOwogICAgIH0p OwogICB9KTsKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvZGlhbG9nX3Rh Yl9uYXZpZ2F0b3Jfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvZGlhbG9nX3Rh Yl9uYXZpZ2F0b3Jfc3BlYy5qcwppbmRleCBkNDA4MmM4Ny4uODMyMWU0ZjIgMTAwNjQ0Ci0tLSBh L3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvZGlhbG9nX3RhYl9uYXZpZ2F0b3Jfc3BlYy5qcwor KysgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2RpYWxvZ190YWJfbmF2aWdhdG9yX3NwZWMu anMKQEAgLTEwLDExICsxMCwxMSBAQCBpbXBvcnQgZGlhbG9nVGFiTmF2aWdhdG9yIGZyb20gJ3Nv dXJjZXMvZGlhbG9nX3RhYl9uYXZpZ2F0b3InOwogaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JzsKIGlt cG9ydCAnYm9vdHN0cmFwJzsKIAotICBkZXNjcmliZSgnZGlhbG9nVGFiTmF2aWdhdG9yJywgZnVu Y3Rpb24gKCkgewotICAgIGxldCBkaWFsb2csIHRhYk5hdmlnYXRvciwgYmFja3dhcmRfc2hvcnRj dXQsIGZvcndhcmRfc2hvcnRjdXQ7CitkZXNjcmliZSgnZGlhbG9nVGFiTmF2aWdhdG9yJywgZnVu Y3Rpb24gKCkgeworICBsZXQgZGlhbG9nLCB0YWJOYXZpZ2F0b3IsIGJhY2t3YXJkX3Nob3J0Y3V0 LCBmb3J3YXJkX3Nob3J0Y3V0OwogCi0gICAgYmVmb3JlRWFjaCgoKSA9PiB7Ci0gICAgICBsZXQg ZGlhbG9nSHRtbCA9JCgnPGRpdiB0YWJpbmRleD0iMSIgY2xhc3M9ImJhY2tmb3JtLXRhYiIgcm9s ZT0idGFicGFuZWwiPicrCisgIGJlZm9yZUVhY2goKCkgPT4geworICAgIGxldCBkaWFsb2dIdG1s ID0kKCc8ZGl2IHRhYmluZGV4PSIxIiBjbGFzcz0iYmFja2Zvcm0tdGFiIiByb2xlPSJ0YWJwYW5l bCI+JysKICAgICAgICAgJyAgIDx1bCBjbGFzcz0ibmF2IG5hdi10YWJzIiByb2xlPSJ0YWJsaXN0 Ij4nKwogICAgICAgICAnICAgICAgPGxpIHJvbGU9InByZXNlbnRhdGlvbiIgY2xhc3M9ImFjdGl2 ZSI+JysKICAgICAgICAgJyAgICAgICAgIDxhIGRhdGEtdG9nZ2xlPSJ0YWIiIHRhYmluZGV4PSIt MSIgZGF0YS10YWItaW5kZXg9IjEiIGhyZWY9IiMxIiBhcmlhLWNvbnRyb2xzPSIxIj4gR2VuZXJh bDwvYT4nKwpAQCAtNTIsNjQgKzUyLDY0IEBAIGltcG9ydCAnYm9vdHN0cmFwJzsKICAgICAgICAg JyAgIDwvdWw+JysKICAgICAgICAgJzwvZGl2PicpOwogCi0gICAgICAgIGRpYWxvZyA9IHt9Owor ICAgIGRpYWxvZyA9IHt9OwogCi0gICAgICAgIGRpYWxvZy5lbCA9IGRpYWxvZ0h0bWxbMF07Ci0g ICAgICAgIGRpYWxvZy4kZWwgPSBkaWFsb2dIdG1sOworICAgIGRpYWxvZy5lbCA9IGRpYWxvZ0h0 bWxbMF07CisgICAgZGlhbG9nLiRlbCA9IGRpYWxvZ0h0bWw7CiAKLSAgICAgICAgYmFja3dhcmRf c2hvcnRjdXQgPSB7Ci0gICAgICAgICAgJ2FsdCc6IGZhbHNlLAotICAgICAgICAgICdzaGlmdCc6 IHRydWUsCi0gICAgICAgICAgJ2NvbnRyb2wnOiB0cnVlLAotICAgICAgICAgICdrZXknOiB7J2tl eV9jb2RlJzogOTEsICdjaGFyJzogJ1snfQotICAgICAgICB9OworICAgIGJhY2t3YXJkX3Nob3J0 Y3V0ID0geworICAgICAgJ2FsdCc6IGZhbHNlLAorICAgICAgJ3NoaWZ0JzogdHJ1ZSwKKyAgICAg ICdjb250cm9sJzogdHJ1ZSwKKyAgICAgICdrZXknOiB7J2tleV9jb2RlJzogOTEsICdjaGFyJzog J1snfSwKKyAgICB9OwogCi0gICAgICAgIGZvcndhcmRfc2hvcnRjdXQgPSB7Ci0gICAgICAgICAg J2FsdCc6IGZhbHNlLAotICAgICAgICAgICdzaGlmdCc6IHRydWUsCi0gICAgICAgICAgJ2NvbnRy b2wnOiB0cnVlLAotICAgICAgICAgICdrZXknOiB7J2tleV9jb2RlJzogOTMsICdjaGFyJzogJ10n fQotICAgICAgICB9OworICAgIGZvcndhcmRfc2hvcnRjdXQgPSB7CisgICAgICAnYWx0JzogZmFs c2UsCisgICAgICAnc2hpZnQnOiB0cnVlLAorICAgICAgJ2NvbnRyb2wnOiB0cnVlLAorICAgICAg J2tleSc6IHsna2V5X2NvZGUnOiA5MywgJ2NoYXInOiAnXSd9LAorICAgIH07CiAKLSAgICAgICAg dGFiTmF2aWdhdG9yID0gbmV3IGRpYWxvZ1RhYk5hdmlnYXRvci5kaWFsb2dUYWJOYXZpZ2F0b3Io CisgICAgdGFiTmF2aWdhdG9yID0gbmV3IGRpYWxvZ1RhYk5hdmlnYXRvci5kaWFsb2dUYWJOYXZp Z2F0b3IoCiAgICAgICAgICAgZGlhbG9nLCBiYWNrd2FyZF9zaG9ydGN1dCwgZm9yd2FyZF9zaG9y dGN1dCk7Ci0gICAgfSk7CisgIH0pOwogCi0gICAgZGVzY3JpYmUoJ25hdmlnYXRlJywgZnVuY3Rp b24gKCkgeworICBkZXNjcmliZSgnbmF2aWdhdGUnLCBmdW5jdGlvbiAoKSB7CiAKLSAgICAgIGJl Zm9yZUVhY2goKCkgPT4gewotICAgICAgICBzcHlPbih0YWJOYXZpZ2F0b3IsICduYXZpZ2F0ZUJh Y2t3YXJkJykuYW5kLmNhbGxUaHJvdWdoKCk7Ci0KLSAgICAgICAgc3B5T24odGFiTmF2aWdhdG9y LCAnbmF2aWdhdGVGb3J3YXJkJykuYW5kLmNhbGxUaHJvdWdoKCk7Ci0gICAgICB9KTsKKyAgICBi ZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgIHNweU9uKHRhYk5hdmlnYXRvciwgJ25hdmlnYXRlQmFj a3dhcmQnKS5hbmQuY2FsbFRocm91Z2goKTsKIAotICAgICAgaXQoJ25hdmlnYXRlIGJhY2t3YXJk JywgZnVuY3Rpb24gKCkgewotICAgICAgICAgIHRhYk5hdmlnYXRvci5vbktleWJvYXJkRXZlbnQo e30sICdzaGlmdCtjdHJsK1snKTsKKyAgICAgIHNweU9uKHRhYk5hdmlnYXRvciwgJ25hdmlnYXRl Rm9yd2FyZCcpLmFuZC5jYWxsVGhyb3VnaCgpOworICAgIH0pOwogCi0gICAgICAgICAgZXhwZWN0 KHRhYk5hdmlnYXRvci5uYXZpZ2F0ZUJhY2t3YXJkKS50b0hhdmVCZWVuQ2FsbGVkKCk7CisgICAg aXQoJ25hdmlnYXRlIGJhY2t3YXJkJywgZnVuY3Rpb24gKCkgeworICAgICAgdGFiTmF2aWdhdG9y Lm9uS2V5Ym9hcmRFdmVudCh7fSwgJ3NoaWZ0K2N0cmwrWycpOwogCi0gICAgICAgICAgZXhwZWN0 KHRhYk5hdmlnYXRvci5uYXZpZ2F0ZUZvcndhcmQpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7Cisg ICAgICBleHBlY3QodGFiTmF2aWdhdG9yLm5hdmlnYXRlQmFja3dhcmQpLnRvSGF2ZUJlZW5DYWxs ZWQoKTsKIAotICAgICAgfSk7CisgICAgICBleHBlY3QodGFiTmF2aWdhdG9yLm5hdmlnYXRlRm9y d2FyZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKIAotICAgICAgaXQoJ25hdmlnYXRlIGZvcndh cmQnLCBmdW5jdGlvbiAoKSB7Ci0gICAgICAgICAgdGFiTmF2aWdhdG9yLm9uS2V5Ym9hcmRFdmVu dCh7fSwgJ3NoaWZ0K2N0cmwrXScpOworICAgIH0pOwogCi0gICAgICAgICAgZXhwZWN0KHRhYk5h dmlnYXRvci5uYXZpZ2F0ZUZvcndhcmQpLnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICBpdCgnbmF2 aWdhdGUgZm9yd2FyZCcsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHRhYk5hdmlnYXRvci5vbktleWJv YXJkRXZlbnQoe30sICdzaGlmdCtjdHJsK10nKTsKIAotICAgICAgICAgIGV4cGVjdCh0YWJOYXZp Z2F0b3IubmF2aWdhdGVCYWNrd2FyZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICAgIGV4 cGVjdCh0YWJOYXZpZ2F0b3IubmF2aWdhdGVGb3J3YXJkKS50b0hhdmVCZWVuQ2FsbGVkKCk7CiAK LSAgICAgIH0pOworICAgICAgZXhwZWN0KHRhYk5hdmlnYXRvci5uYXZpZ2F0ZUJhY2t3YXJkKS5u b3QudG9IYXZlQmVlbkNhbGxlZCgpOwogCi0gICAgICBpdCgnc2hvdWxkIG5vdCBuYXZpZ2F0ZScs IGZ1bmN0aW9uICgpIHsKLSAgICAgICAgICB0YWJOYXZpZ2F0b3Iub25LZXlib2FyZEV2ZW50KHt9 LCAnc2hpZnQrY3RybCthJyk7CisgICAgfSk7CiAKLSAgICAgICAgICBleHBlY3QodGFiTmF2aWdh dG9yLm5hdmlnYXRlRm9yd2FyZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICBpdCgnc2hv dWxkIG5vdCBuYXZpZ2F0ZScsIGZ1bmN0aW9uICgpIHsKKyAgICAgIHRhYk5hdmlnYXRvci5vbktl eWJvYXJkRXZlbnQoe30sICdzaGlmdCtjdHJsK2EnKTsKIAotICAgICAgICAgIGV4cGVjdCh0YWJO YXZpZ2F0b3IubmF2aWdhdGVCYWNrd2FyZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICAg IGV4cGVjdCh0YWJOYXZpZ2F0b3IubmF2aWdhdGVGb3J3YXJkKS5ub3QudG9IYXZlQmVlbkNhbGxl ZCgpOwogCi0gICAgICB9KTsKKyAgICAgIGV4cGVjdCh0YWJOYXZpZ2F0b3IubmF2aWdhdGVCYWNr d2FyZCkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTsKIAogICAgIH0pOwogCi0gIH0pOwpcIE5vIG5l d2xpbmUgYXQgZW5kIG9mIGZpbGUKKyAgfSk7CisKK30pOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m IGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvZmFrZV9lbmRwb2lu dHMuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2Zha2VfZW5kcG9pbnRzLmpzCmluZGV4 IDYzYWIwNWRjLi5jMDYwYmE3OCAxMDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlw dC9mYWtlX2VuZHBvaW50cy5qcworKysgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2Zha2Vf ZW5kcG9pbnRzLmpzCkBAIC0xMSw2ICsxMSwxMiBAQCBkZWZpbmUoZnVuY3Rpb24gKCkgewogICBy ZXR1cm4gewogICAgICdzdGF0aWMnOiAnL2Jhc2UvcGdhZG1pbi9zdGF0aWMvPHBhdGg6ZmlsZW5h bWU+JywKICAgICAnc3FsZWRpdG9yLnBvbGwnOiAnL3NxbGVkaXRvci9xdWVyeV90b29sL3BvbGwv PHBhdGg6dHJhbnNfaWQ+JywKLSAgICAnc3FsZWRpdG9yLnF1ZXJ5X3Rvb2xfc3RhcnQnOiAnL3Nx bGVkaXRvci9xdWVyeV90b29sL3N0YXJ0LzxwYXRoOnRyYW5zX2lkPicKKyAgICAnc3FsZWRpdG9y LnF1ZXJ5X3Rvb2xfc3RhcnQnOiAnL3NxbGVkaXRvci9xdWVyeV90b29sL3N0YXJ0LzxwYXRoOnRy YW5zX2lkPicsCisgICAgJ2JhY2t1cC5jcmVhdGVfc2VydmVyX2pvYic6ICAnL2JhY2t1cC9qb2Iv PGludDpzaWQ+JywKKyAgICAnYmFja3VwLmNyZWF0ZV9vYmplY3Rfam9iJzogICcvYmFja3VwL2pv Yi88aW50OnNpZD4vb2JqZWN0JywKKyAgICAnZGF0YWdyaWQuaW5pdGlhbGl6ZV9kYXRhZ3JpZCc6 ICcvaW5pdGlhbGl6ZS9kYXRhZ3JpZC88aW50OmNtZF90eXBlPi88b2JqX3R5cGU+LzxpbnQ6c2dp ZD4vPGludDpzaWQ+LzxpbnQ6ZGlkPi88aW50Om9ial9pZD4nLAorICAgICdkYXRhZ3JpZC5pbml0 aWFsaXplX3F1ZXJ5X3Rvb2wnOiAnL2luaXRpYWxpemUvcXVlcnlfdG9vbC88aW50OnNnaWQ+Lzxp bnQ6c2lkPicsCisgICAgJ2RhdGFncmlkLmluaXRpYWxpemVfcXVlcnlfdG9vbF93aXRoX2RpZCc6 ICcvaW5pdGlhbGl6ZS9xdWVyeV90b29sLzxpbnQ6c2dpZD4vPGludDpzaWQ+LzxpbnQ6ZGlkPics CisgICAgJ3Jlc3RvcmUuY3JlYXRlX2pvYic6ICcvcmVzdG9yZS9qb2IvPGludDpzaWQ+JywKICAg fTsKIH0pOwpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9mYWtlX21vZGVs LmpzIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9mYWtlX21vZGVsLmpzCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi5hY2ZhYTUzMgotLS0gL2Rldi9udWxsCisrKyBiL3dl Yi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvZmFrZV9tb2RlbC5qcwpAQCAtMCwwICsxLDIxIEBACitl eHBvcnQgY2xhc3MgRmFrZU1vZGVsIHsKKyAgY29uc3RydWN0b3IoKSB7CisgICAgdGhpcy52YWx1 ZXMgPSB7fTsKKyAgfQorCisgIHNldChrZXksIHZhbHVlKSB7CisgICAgdGhpcy52YWx1ZXNba2V5 XSA9IHZhbHVlOworICB9CisKKyAgZ2V0KGtleSkgeworICAgIHJldHVybiB0aGlzLnZhbHVlc1tr ZXldOworICB9CisKKyAgdW5zZXQoa2V5KSB7CisgICAgZGVsZXRlIHRoaXMudmFsdWVzW2tleV07 CisgIH0KKworICB0b0pTT04oKSB7CisgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHRoaXMu dmFsdWVzKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9t ZW51L2Nhbl9jcmVhdGVfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvbWVudS9j YW5fY3JlYXRlX3NwZWMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjVl ZTAzMGYyCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9tZW51 L2Nhbl9jcmVhdGVfc3BlYy5qcwpAQCAtMCwwICsxLDk4IEBACisvLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1p biA0IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgs IFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFz ZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworaW1wb3J0IHtjYW5D cmVhdGV9IGZyb20gJy4uLy4uLy4uL3BnYWRtaW4vc3RhdGljL2pzL21lbnUvY2FuX2NyZWF0ZSc7 CitpbXBvcnQge1RyZWVGYWtlfSBmcm9tICcuLi90cmVlL3RyZWVfZmFrZSc7CisKK2NvbnN0IGNv bnRleHQgPSBkZXNjcmliZTsKKworZGVzY3JpYmUoJyNjYW5DcmVhdGUnLCAoKSA9PiB7CisgIGxl dCBvdXJCcm93c2VyOworICBsZXQgZGF0YTsKKyAgbGV0IHRyZWU7CisKKyAgYmVmb3JlRWFjaCgo KSA9PiB7CisgICAgdHJlZSA9IG5ldyBUcmVlRmFrZSgpOworICAgIG91ckJyb3dzZXIgPSB7Cisg ICAgICB0cmVlTWVudTogdHJlZSwKKyAgICB9OworCisgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZl bDEnLCB7fSwgdW5kZWZpbmVkLCBbXSk7CisgIH0pOworCisgIGNvbnRleHQoJ2RhdGEgaXMgbm90 IG51bGwgYW5kIGNoZWNrIGlzIGZhbHNlICcsICgpID0+IHsKKyAgICBiZWZvcmVFYWNoKCgpID0+ IHsKKyAgICAgIGRhdGEgPSB7YWN0aW9uOiAnY3JlYXRlJywgY2hlY2s6IGZhbHNlfTsKKyAgICB9 KTsKKyAgICBpdCgncmV0dXJucyB0cnVlJywgKCkgPT4geworICAgICAgZXhwZWN0KGNhbkNyZWF0 ZSh7fSwge30sIHt9LCBkYXRhKSkudG9CZSh0cnVlKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgY29u dGV4dCgnZGF0YSBpcyBub3QgbnVsbCBhbmQgY2hlY2sgaXMgdHJ1ZScsICgpID0+IHsKKyAgICBi ZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgIGRhdGEgPSB7YWN0aW9uOiAnY3JlYXRlJywgY2hlY2s6 IHRydWV9OworICAgIH0pOworCisgICAgY29udGV4dCgnaXMgbm9kZSB3aXRoIHR5cGUgc2NoZW1h JywgKCkgPT4geworICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgIHRyZWUuYWRkTmV3 Tm9kZSgnbGV2ZWwyJywge190eXBlOiAnc2NoZW1hJ30sIFt7aWQ6ICdsZXZlbDInfV0sIFsnbGV2 ZWwxJ10pOworICAgICAgfSk7CisKKyAgICAgIGl0KCdyZXR1cm5zIHRydWUnLCAoKSA9PiB7Cisg ICAgICAgIGV4cGVjdChjYW5DcmVhdGUob3VyQnJvd3NlciwgJ2NvbGwtdGFibGUnLCBbe2lkOiAn bGV2ZWwyJ31dLCBkYXRhKSkudG9CZSh0cnVlKTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAg Y29udGV4dCgnaGFzIGFuY2VzdG9yIHdpdGggdHlwZSBzY2hlbWEnLCAoKSA9PiB7CisgICAgICBi ZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDInLCB7X3R5 cGU6ICdzY2hlbWEnfSwgdW5kZWZpbmVkLCBbJ2xldmVsMSddKTsKKyAgICAgICAgdHJlZS5hZGRO ZXdOb2RlKCdsZXZlbDMnLCB7X3R5cGU6ICdkYXRhYmFzZSd9LCBbe2lkOiAnbGV2ZWwzJ31dLCBb J2xldmVsMScsICdsZXZlbDInXSk7CisgICAgICB9KTsKKworICAgICAgaXQoJ3JldHVybnMgdHJ1 ZScsICgpID0+IHsKKyAgICAgICAgZXhwZWN0KGNhbkNyZWF0ZShvdXJCcm93c2VyLCAnY29sbC10 YWJsZScsIFt7aWQ6ICdsZXZlbDMnfV0sIGRhdGEpKS50b0JlKHRydWUpOworICAgICAgfSk7Cisg ICAgfSk7CisKKyAgICBjb250ZXh0KCd3aGVuIHR5cGUgaXMgbm90ICJjb2xsLXRhYmxlIicsICgp ID0+IHsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICB0cmVlLmFkZE5ld05vZGUo J2xldmVsMicsIHtfdHlwZTogJ2RhdGFiYXNlJ30sIHVuZGVmaW5lZCwgWydsZXZlbDEnXSk7Cisg ICAgICB9KTsKKworICAgICAgaXQoJ3JldHVybnMgdHJ1ZScsICgpID0+IHsKKyAgICAgICAgZXhw ZWN0KGNhbkNyZWF0ZShvdXJCcm93c2VyLCAnY29sbC10YWJsZScsIFt7aWQ6ICdsZXZlbDInfV0s IGRhdGEpKS50b0JlKHRydWUpOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICBjb250ZXh0KCd3 aGVuIHR5cGUgaXMgImNvbGwtdGFibGUiJywgKCkgPT4geworICAgICAgY29udGV4dCgnd2hlbiBw YXJlbnQgdHlwZSBpcyAiY2F0YWxvZyInLCAoKSA9PiB7CisgICAgICAgIGJlZm9yZUVhY2goKCkg PT4geworICAgICAgICAgIHRyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwyJywge190eXBlOiAnY2F0YWxv Zyd9LCB1bmRlZmluZWQsIFsnbGV2ZWwxJ10pOworICAgICAgICAgIHRyZWUuYWRkTmV3Tm9kZSgn bGV2ZWwzJywge190eXBlOiAnY29sbC10YWJsZSd9LCBbe2lkOiAnbGV2ZWwzJ31dLCBbJ2xldmVs MScsICdsZXZlbDInXSk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdyZXR1cm5zIGZhbHNl JywgKCkgPT4geworICAgICAgICAgIGV4cGVjdChjYW5DcmVhdGUob3VyQnJvd3NlciwgJ2NvbGwt dGFibGUnLCBbe2lkOiAnbGV2ZWwzJ31dLCBkYXRhKSkudG9CZShmYWxzZSk7CisgICAgICAgIH0p OworICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3doZW4gcGFyZW50IHR5cGUgaXMgbm90ICJj YXRhbG9nIicsICgpID0+IHsKKyAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgICAg dHJlZS5hZGROZXdOb2RlKCdsZXZlbDInLCB7X3R5cGU6ICdkYXRhYmFzZSd9LCB1bmRlZmluZWQs IFsnbGV2ZWwxJ10pOworICAgICAgICAgIHRyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwzJywge190eXBl OiAnY29sbC10YWJsZSd9LCBbe2lkOiAnbGV2ZWwzJ31dLCBbJ2xldmVsMScsICdsZXZlbDInXSk7 CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAg ICAgICAgIGV4cGVjdChjYW5DcmVhdGUob3VyQnJvd3NlciwgJ2NvbGwtdGFibGUnLCBbe2lkOiAn bGV2ZWwzJ31dLCBkYXRhKSkudG9CZSh0cnVlKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAg ICB9KTsKKyAgfSk7Cit9KTsKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQv bWVudS9tZW51X2VuYWJsZWRfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvbWVu dS9tZW51X2VuYWJsZWRfc3BlYy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MC4uMDY5NjdkNzcKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0 L21lbnUvbWVudV9lbmFibGVkX3NwZWMuanMKQEAgLTAsMCArMSwxMzEgQEAKKy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vCisv LyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisvLworLy8gQ29weXJpZ2h0IChDKSAyMDEz IC0gMjAxOCwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorLy8gVGhpcyBzb2Z0d2FyZSBp cyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisvLworLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK2ltcG9y dCB7VHJlZUZha2V9IGZyb20gJy4uL3RyZWUvdHJlZV9mYWtlJzsKK2ltcG9ydCB7bWVudUVuYWJs ZWR9IGZyb20gJy4uLy4uLy4uL3BnYWRtaW4vc3RhdGljL2pzL21lbnUvbWVudV9lbmFibGVkJzsK KworY29uc3QgY29udGV4dCA9IGRlc2NyaWJlOworZGVzY3JpYmUoJyNtZW51RW5hYmxlZCcsICgp ID0+IHsKKyAgbGV0IG91ckJyb3dzZXI7CisgIGJlZm9yZUVhY2goKCkgPT4geworICAgIGNvbnN0 IHRyZWUgPSBuZXcgVHJlZUZha2UoKTsKKyAgICBvdXJCcm93c2VyID0geworICAgICAgdHJlZU1l bnU6IHRyZWUsCisgICAgfTsKKyAgICB0cmVlLmFkZE5ld05vZGUoJ2xldmVsMScsIHt9LCB1bmRl ZmluZWQsIFtdKTsKKyAgICB0cmVlLmFkZE5ld05vZGUoJ2xldmVsMS4xJywge190eXBlOiAnY2F0 YWxvZyd9LCB1bmRlZmluZWQsIFsnbGV2ZWwxJ10pOworICAgIHRyZWUuYWRkTmV3Tm9kZSgnbGV2 ZWwxLjEuMScsIHtfdHlwZTogJ2RhdGFiYXNlJ30sIHVuZGVmaW5lZCwgWydsZXZlbDEnLCAnbGV2 ZWwxLjEnXSk7CisgICAgdHJlZS5hZGROZXdOb2RlKCdsZXZlbDEuMicsIHtfdHlwZTogJ2JhbW0n fSwgdW5kZWZpbmVkLCBbJ2xldmVsMSddKTsKKyAgICB0cmVlLmFkZE5ld05vZGUoJ2xldmVsMS4y LjEnLCB7CisgICAgICBfdHlwZTogJ2RhdGFiYXNlJywKKyAgICAgIGFsbG93Q29ubjogdHJ1ZSwK KyAgICB9LCB1bmRlZmluZWQsIFsnbGV2ZWwxJywgJ2xldmVsMS4yJ10pOworICAgIHRyZWUuYWRk TmV3Tm9kZSgnbGV2ZWwxLjIuMicsIHsKKyAgICAgIF90eXBlOiAnZGF0YWJhc2UnLAorICAgICAg YWxsb3dDb25uOiBmYWxzZSwKKyAgICB9LCB1bmRlZmluZWQsIFsnbGV2ZWwxJywgJ2xldmVsMS4y J10pOworICAgIHRyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwxLjIuMycsIHsKKyAgICAgIF90eXBlOiAn dGFibGUnLAorICAgIH0sIHVuZGVmaW5lZCwgWydsZXZlbDEnLCAnbGV2ZWwxLjInXSk7CisKKyAg ICB0cmVlLmFkZE5ld05vZGUoJ2xldmVsMicsIHt9LCB1bmRlZmluZWQsIFtdKTsKKyAgICB0cmVl LmFkZE5ld05vZGUoJ2xldmVsMi4xJywgbnVsbCwgdW5kZWZpbmVkLCBbJ2xldmVsMiddKTsKKyAg ICB0cmVlLmFkZE5ld05vZGUoJ2xldmVsMi4xLjEnLCB7fSwgdW5kZWZpbmVkLCBbJ2xldmVsMics ICdsZXZlbDIuMSddKTsKKyAgfSk7CisKKyAgY29udGV4dCgnV2hlbiB0aGUgY3VycmVudCBub2Rl IGlzIGEgcm9vdCBub2RlJywgKCkgPT4geworICAgIGl0KCdyZXR1cm4gZmFsc2UnLCAoKSA9PiB7 CisgICAgICBleHBlY3QobWVudUVuYWJsZWQob3VyQnJvd3Nlci50cmVlTWVudSwgW10sIHt9LCBb e2lkOiAnbGV2ZWwxJ31dKSkudG9CZShmYWxzZSk7CisgICAgfSk7CisgIH0pOworCisgIGNvbnRl eHQoJ3doZW4gY3VycmVudCBub2RlIGRvZXMgbm90IGV4aXN0JywgKCkgPT4geworICAgIGl0KCdy ZXR1cm4gZmFsc2UnLCAoKSA9PiB7CisgICAgICBleHBlY3QobWVudUVuYWJsZWQob3VyQnJvd3Nl ci50cmVlTWVudSwgW10sIHt9LCBbe2lkOiAnYmFtbSd9XSkpLnRvQmUoZmFsc2UpOworICAgIH0p OworICB9KTsKKworICBjb250ZXh0KCdwcm92aWRlZCBub2RlIGRhdGEgaXMgdW5kZWZpbmVkJywg KCkgPT4geworICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAgICAgZXhwZWN0KG1l bnVFbmFibGVkKG91ckJyb3dzZXIudHJlZU1lbnUsIFtdLCB1bmRlZmluZWQsIFt7aWQ6ICdsZXZl bDEnfV0pKS50b0JlKGZhbHNlKTsKKyAgICB9KTsKKyAgfSk7CisKKyAgY29udGV4dCgncHJvdmlk ZWQgbm9kZSBkYXRhIGlzIG51bGwnLCAoKSA9PiB7CisgICAgaXQoJ3JldHVybnMgZmFsc2UnLCAo KSA9PiB7CisgICAgICBleHBlY3QobWVudUVuYWJsZWQob3VyQnJvd3Nlci50cmVlTWVudSwgW10s IG51bGwsIFt7aWQ6ICdsZXZlbDEnfV0pKS50b0JlKGZhbHNlKTsKKyAgICB9KTsKKyAgfSk7CisK KyAgY29udGV4dCgnV2hlbiB0aGUgY3VycmVudCBub2RlIGlzIG5vdCBhIHJvb3Qgbm9kZScsICgp ID0+IHsKKyAgICBjb250ZXh0KCdwYXJlbnQgZGF0YSBkb2VzIG5vdCBleGlzdCcsICgpID0+IHsK KyAgICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAgICAgICBleHBlY3QobWVudUVu YWJsZWQob3VyQnJvd3Nlci50cmVlTWVudSwgW10sIHt9LCBbe2lkOiAnbGV2ZWwyLjEuMSd9XSkp LnRvQmUoZmFsc2UpOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICBjb250ZXh0KCdwYXJlbnQg YXMgZGF0YScsICgpID0+IHsKKyAgICAgIGNvbnRleHQoJ3RoZSBjdXJyZW50IG5vZGUgdHlwZSBp cyBpbiB0aGUgc3VwcG9ydGVkIG5vZGUgdHlwZXMnLCAoKSA9PiB7CisgICAgICAgIGNvbnRleHQo J3RoZSBwYXJlbnQgaXMgb2YgdGhlIHR5cGUgY2F0YWxvZycsICgpID0+IHsKKyAgICAgICAgICBp dCgncmV0dXJucyBmYWxzZScsICgpID0+IHsKKyAgICAgICAgICAgIGV4cGVjdChtZW51RW5hYmxl ZChvdXJCcm93c2VyLnRyZWVNZW51LAorICAgICAgICAgICAgICBbJ3NjaGVtYSddLAorICAgICAg ICAgICAgICB7X3R5cGU6ICdzY2hlbWEnfSwKKyAgICAgICAgICAgICAgW3tpZDogJ2xldmVsMS4x LjEnfV0KKyAgICAgICAgICAgICkpLnRvQmUoZmFsc2UpOworICAgICAgICAgIH0pOworICAgICAg ICB9KTsKKyAgICAgICAgY29udGV4dCgnYW4gYW5jZXN0b3Igd2l0aCB0eXBlIGNhdGFsb2cgZXhp c3RzJywgKCkgPT4geworICAgICAgICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAg ICAgICAgICAgZXhwZWN0KG1lbnVFbmFibGVkKG91ckJyb3dzZXIudHJlZU1lbnUsCisgICAgICAg ICAgICAgIFsndGFibGUnXSwKKyAgICAgICAgICAgICAge190eXBlOiAndGFibGUnfSwKKyAgICAg ICAgICAgICAgW3tpZDogJ2xldmVsMS4xLjEuMSd9XQorICAgICAgICAgICAgKSkudG9CZShmYWxz ZSk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgICBjb250ZXh0KCd0aGUgcGFy ZW50IGlzIG5vdCBvZiB0aGUgdHlwZSBjYXRhbG9nJywgKCkgPT4geworICAgICAgICAgIGNvbnRl eHQoJ2N1cnJlbnQgbm9kZSBpcyBvZiB0aGUgdHlwZSBkYXRhYmFzZScsICgpID0+IHsKKyAgICAg ICAgICAgIGNvbnRleHQoJ2N1cnJlbnQgbm9kZSBhbGxvd3MgY29ubmVjdGlvbicsICgpID0+IHsK KyAgICAgICAgICAgICAgaXQoJ3JldHVybnMgdHJ1ZScsICgpID0+IHsKKyAgICAgICAgICAgICAg ICBleHBlY3QobWVudUVuYWJsZWQob3VyQnJvd3Nlci50cmVlTWVudSwKKyAgICAgICAgICAgICAg ICAgICAgWydkYXRhYmFzZSddLAorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAg ICAgICBfdHlwZTogJ2RhdGFiYXNlJywKKyAgICAgICAgICAgICAgICAgICAgYWxsb3dDb25uOiB0 cnVlLAorICAgICAgICAgICAgICAgICAgfSwgW3tpZDogJ2xldmVsMS4yLjEnfV0pKS50b0JlKHRy dWUpOworICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgY29u dGV4dCgnY3VycmVudCBub2RlIGRvIG5vdCBhbGxvdyBjb25uZWN0aW9uJywgKCkgPT4geworICAg ICAgICAgICAgICBpdCgncmV0dXJucyBmYWxzZScsICgpID0+IHsKKyAgICAgICAgICAgICAgICBl eHBlY3QobWVudUVuYWJsZWQob3VyQnJvd3Nlci50cmVlTWVudSwKKyAgICAgICAgICAgICAgICAg ICAgWydkYXRhYmFzZSddLCB7CisgICAgICAgICAgICAgICAgICAgICAgX3R5cGU6ICdkYXRhYmFz ZScsCisgICAgICAgICAgICAgICAgICAgICAgYWxsb3dDb25uOiBmYWxzZSwKKyAgICAgICAgICAg ICAgICAgICAgfSwgW3tpZDogJ2xldmVsMS4yLjInfV0pKS50b0JlKGZhbHNlKTsKKyAgICAgICAg ICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgICBjb250 ZXh0KCdjdXJyZW50IG5vZGUgaXMgbm90IG9mIHRoZSB0eXBlIGRhdGFiYXNlJywgKCkgPT4gewor ICAgICAgICAgICAgaXQoJ3JldHVybnMgdHJ1ZScsICgpID0+IHsKKyAgICAgICAgICAgICAgZXhw ZWN0KG1lbnVFbmFibGVkKG91ckJyb3dzZXIudHJlZU1lbnUsCisgICAgICAgICAgICAgICAgICBb J3NjaGVtYSddLCB7CisgICAgICAgICAgICAgICAgICAgIF90eXBlOiAnc2NoZW1hJywKKyAgICAg ICAgICAgICAgICAgIH0sIFt7aWQ6ICdsZXZlbDEuMi4zJ31dKSkudG9CZSh0cnVlKTsKKyAgICAg ICAgICAgIH0pOworICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgICAg Y29udGV4dCgndGhlIGN1cnJlbnQgbm9kZSB0eXBlIGlzIG5vdCBpbiB0aGUgc3VwcG9ydGVkIG5v ZGUgdHlwZXMnLCAoKSA9PiB7CisgICAgICAgIGl0KCdyZXR1cm5zIGZhbHNlJywgKCkgPT4gewor ICAgICAgICAgIGV4cGVjdChtZW51RW5hYmxlZChvdXJCcm93c2VyLnRyZWVNZW51LCBbXSwge190 eXBlOiAnY2F0YWxvZyd9LCBbe2lkOiAnbGV2ZWwxLjEnfV0pKS50b0JlKGZhbHNlKTsKKyAgICAg ICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKZGlmZiAtLWdpdCBhL3dlYi9y ZWdyZXNzaW9uL2phdmFzY3JpcHQvbWlzYy9zdGF0aXN0aWNzL3N0YXRpc3RpY3Nfc3BlYy5qcyBi L3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvbWlzYy9zdGF0aXN0aWNzL3N0YXRpc3RpY3Nfc3Bl Yy5qcwppbmRleCA0MGMwMDY1ZS4uZTYzZmZhZDkgMTAwNjQ0Ci0tLSBhL3dlYi9yZWdyZXNzaW9u L2phdmFzY3JpcHQvbWlzYy9zdGF0aXN0aWNzL3N0YXRpc3RpY3Nfc3BlYy5qcworKysgYi93ZWIv cmVncmVzc2lvbi9qYXZhc2NyaXB0L21pc2Mvc3RhdGlzdGljcy9zdGF0aXN0aWNzX3NwZWMuanMK QEAgLTcsNyArNyw3IEBACiAvLwogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAotaW1wb3J0IHtub2RlSGFz U3RhdGlzdGljc30gZnJvbSAiLi4vLi4vLi4vLi4vcGdhZG1pbi9zdGF0aWMvanMvbWlzYy9zdGF0 aXN0aWNzL3N0YXRpc3RpY3MiOworaW1wb3J0IHtub2RlSGFzU3RhdGlzdGljc30gZnJvbSAnLi4v Li4vLi4vLi4vcGdhZG1pbi9zdGF0aWMvanMvbWlzYy9zdGF0aXN0aWNzL3N0YXRpc3RpY3MnOwog CiBkZXNjcmliZSgnI25vZGVIYXNTdGF0aXN0aWNzJywgKCkgPT4gewogICBkZXNjcmliZSgnd2hl biBub2RlIGhhc1N0YXRpc3RpY3MgaXMgbm90IGEgZnVuY3Rpb24nLCAoKSA9PiB7CmRpZmYgLS1n aXQgYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3Jlc3RvcmUvcmVzdG9yZV9kaWFsb2dfc3Bl Yy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvcmVzdG9yZS9yZXN0b3JlX2RpYWxvZ19z cGVjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi40OGVmNTk2MQotLS0g L2Rldi9udWxsCisrKyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvcmVzdG9yZS9yZXN0b3Jl X2RpYWxvZ19zcGVjLmpzCkBAIC0wLDAgKzEsMTgxIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLworLy8gcGdBZG1pbiA0 IC0gUG9zdGdyZVNRTCBUb29scworLy8KKy8vIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTgsIFRo ZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKy8vIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQg dW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorLy8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitpbXBvcnQge1RyZWVGYWtl fSBmcm9tICcuLi90cmVlL3RyZWVfZmFrZSc7CitpbXBvcnQgeworICBSZXN0b3JlRGlhbG9nLAor fSBmcm9tICcuLi8uLi8uLi9wZ2FkbWluL3N0YXRpYy9qcy9yZXN0b3JlL3Jlc3RvcmVfZGlhbG9n JzsKK2ltcG9ydCB7VHJlZU5vZGV9IGZyb20gJy4uLy4uLy4uL3BnYWRtaW4vc3RhdGljL2pzL3Ry ZWUvdHJlZSc7CisKK2NvbnN0IGNvbnRleHQgPSBkZXNjcmliZTsKKworZGVzY3JpYmUoJ1Jlc3Rv cmVEaWFsb2cnLCAoKSA9PiB7CisgIGxldCByZXN0b3JlRGlhbG9nOworICBsZXQgcGdCcm93c2Vy OworICBsZXQganF1ZXJ5U3B5OworICBsZXQgYWxlcnRpZnlTcHk7CisgIGxldCByZXN0b3JlTW9k ZWxTcHk7CisKKworICBsZXQgcm9vdE5vZGU7CisgIGxldCBzZXJ2ZXJUcmVlTm9kZTsKKyAgbGV0 IGRhdGFiYXNlVHJlZU5vZGU7CisgIGxldCBwcGFzU2VydmVyVHJlZU5vZGU7CisgIGxldCBub0Rh dGFOb2RlOworCisgIGJlZm9yZUVhY2goKCkgPT4geworICAgIHBnQnJvd3NlciA9IHsKKyAgICAg IHRyZWVNZW51OiBuZXcgVHJlZUZha2UoKSwKKyAgICAgIE5vZGVzOiB7CisgICAgICAgIHNlcnZl cjogamFzbWluZS5jcmVhdGVTcHlPYmooJ05vZGVbc2VydmVyXScsIFsnZ2V0VHJlZU5vZGVIaWVy YXJjaHknXSksCisgICAgICAgIGRhdGFiYXNlOiBqYXNtaW5lLmNyZWF0ZVNweU9iaignTm9kZVtk YXRhYmFzZV0nLCBbJ2dldFRyZWVOb2RlSGllcmFyY2h5J10pLAorICAgICAgfSwKKyAgICB9Owor ICAgIHBnQnJvd3Nlci5Ob2Rlcy5zZXJ2ZXIuaGFzSWQgPSB0cnVlOworICAgIHBnQnJvd3Nlci5O b2Rlcy5kYXRhYmFzZS5oYXNJZCA9IHRydWU7CisgICAganF1ZXJ5U3B5ID0gamFzbWluZS5jcmVh dGVTcHkoJ2pxdWVyeVNweScpOworICAgIHJlc3RvcmVNb2RlbFNweSA9IGphc21pbmUuY3JlYXRl U3B5KCdyZXN0b3JlTW9kZWxTcHknKTsKKworICAgIHJvb3ROb2RlID0gcGdCcm93c2VyLnRyZWVN ZW51LmFkZE5ld05vZGUoJ2xldmVsMScsIHt9LCBbe2lkOiAnbGV2ZWwxJ31dLCBbXSk7CisgICAg c2VydmVyVHJlZU5vZGUgPSBuZXcgVHJlZU5vZGUoJ2xldmVsMS4xJywgeworICAgICAgX3R5cGU6 ICdzZXJ2ZXInLAorICAgICAgX2lkOiAxMCwKKyAgICAgIGxhYmVsOiAnc29tZS10cmVlLWxhYmVs JywKKyAgICB9LCBbe2lkOiAnbGV2ZWwxLjEnfV0pOworICAgIHBnQnJvd3Nlci50cmVlTWVudS5h ZGRDaGlsZChyb290Tm9kZSwgc2VydmVyVHJlZU5vZGUpOworCisgICAgZGF0YWJhc2VUcmVlTm9k ZSA9IG5ldyBUcmVlTm9kZSgnbGV2ZWwxLjEuMScsIHsKKyAgICAgIF90eXBlOiAnZGF0YWJhc2Un LAorICAgICAgX2lkOiAxMCwKKyAgICAgIF9sYWJlbDogJ3NvbWUtZGF0YWJhc2UtbGFiZWwnLAor ICAgIH0sIFt7aWQ6ICdsZXZlbDEuMS4xJ31dLCBbJ2xldmVsMScsICdsZXZlbDEuMSddKTsKKyAg ICBwZ0Jyb3dzZXIudHJlZU1lbnUuYWRkQ2hpbGQoc2VydmVyVHJlZU5vZGUsIGRhdGFiYXNlVHJl ZU5vZGUpOworCisgICAgcHBhc1NlcnZlclRyZWVOb2RlID0gbmV3IFRyZWVOb2RlKCdsZXZlbDEu MicsIHsKKyAgICAgIF90eXBlOiAnc2VydmVyJywKKyAgICAgIHNlcnZlcl90eXBlOiAncHBhcycs CisgICAgfSwgW3tpZDogJ2xldmVsMS4yJ31dLCBbJ2xldmVsMSddKTsKKyAgICBwZ0Jyb3dzZXIu dHJlZU1lbnUuYWRkQ2hpbGQocm9vdE5vZGUsIHBwYXNTZXJ2ZXJUcmVlTm9kZSk7CisKKyAgICBj b25zdCBsZXZlbDMgPSBuZXcgVHJlZU5vZGUoJ2xldmVsMycsIHt9LCBbe2lkOiAnbGV2ZWwzJ31d KTsKKyAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuYWRkQ2hpbGQocHBhc1NlcnZlclRyZWVOb2RlLCBs ZXZlbDMpOworCisgICAgbm9EYXRhTm9kZSA9IHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2Rl KCdsZXZlbDMuMScsIHVuZGVmaW5lZCwgW3tpZDogJ2xldmVsMSd9XSk7CisgICAgcGdCcm93c2Vy LnRyZWVNZW51LmFkZENoaWxkKGxldmVsMywgbm9EYXRhTm9kZSk7CisKKyAgfSk7CisKKyAgZGVz Y3JpYmUoJyNkcmF3JywgKCkgPT4geworICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgYWxl cnRpZnlTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignYWxlcnRpZnknLCBbJ2FsZXJ0JywgJ2Rp YWxvZyddKTsKKyAgICAgIGFsZXJ0aWZ5U3B5WydwZ19yZXN0b3JlJ10gPSBqYXNtaW5lLmNyZWF0 ZVNweSgncGdfcmVzdG9yZScpOworICAgICAgcmVzdG9yZURpYWxvZyA9IG5ldyBSZXN0b3JlRGlh bG9nKAorICAgICAgICBwZ0Jyb3dzZXIsCisgICAgICAgIGpxdWVyeVNweSwKKyAgICAgICAgYWxl cnRpZnlTcHksCisgICAgICAgIHJlc3RvcmVNb2RlbFNweQorICAgICAgKTsKKworICAgICAgcGdC cm93c2VyLmdldF9wcmVmZXJlbmNlID0gamFzbWluZS5jcmVhdGVTcHkoJ2dldF9wcmVmZXJlbmNl cycpOworICAgIH0pOworCisgICAgY29udGV4dCgndGhlcmUgYXJlIG5vIGFuY2VzdG9ycyBvZiB0 aGUgdHlwZSBzZXJ2ZXInLCAoKSA9PiB7CisgICAgICBpdCgnZG9lcyBub3QgY3JlYXRlIGEgZGlh bG9nJywgKCkgPT4geworICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2VsZWN0Tm9kZShbe2lk OiAnbGV2ZWwxJ31dKTsKKyAgICAgICAgcmVzdG9yZURpYWxvZy5kcmF3KG51bGwsIG51bGwsIG51 bGwpOworICAgICAgICBleHBlY3QoYWxlcnRpZnlTcHlbJ3BnX3Jlc3RvcmUnXSkubm90LnRvSGF2 ZUJlZW5DYWxsZWQoKTsKKyAgICAgIH0pOworCisgICAgICBpdCgnZGlzcGxheSBhbiBhbGVydCB3 aXRoIGEgUmVzdG9yZSBFcnJvcicsICgpID0+IHsKKyAgICAgICAgcmVzdG9yZURpYWxvZy5kcmF3 KG51bGwsIFt7aWQ6ICdsZXZlbDEnfV0sIG51bGwpOworICAgICAgICBleHBlY3QoYWxlcnRpZnlT cHkuYWxlcnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAgICdSZXN0b3JlIEVycm9y JywKKyAgICAgICAgICAnUGxlYXNlIHNlbGVjdCBzZXJ2ZXIgb3IgY2hpbGQgbm9kZSBmcm9tIHRo ZSBicm93c2VyIHRyZWUuJworICAgICAgICApOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICBj b250ZXh0KCd0aGVyZSBpcyBhbiBhbmNlc3RvciBvZiB0aGUgdHlwZSBzZXJ2ZXInLCAoKSA9PiB7 CisgICAgICBjb250ZXh0KCdubyBwcmVmZXJlbmNlIGNhbiBiZSBmb3VuZCcsICgpID0+IHsKKyAg ICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgICAgcGdCcm93c2VyLmdldF9wcmVmZXJl bmNlLmFuZC5yZXR1cm5WYWx1ZSh1bmRlZmluZWQpOworICAgICAgICB9KTsKKworICAgICAgICBj b250ZXh0KCdzZXJ2ZXIgaXMgYSBwcGFzIHNlcnZlcicsICgpID0+IHsKKyAgICAgICAgICBpdCgn ZGlzcGxheSBhbiBhbGVydCB3aXRoICJSZXN0b3JlIEVycm9yIicsICgpID0+IHsKKyAgICAgICAg ICAgIHJlc3RvcmVEaWFsb2cuZHJhdyhudWxsLCBbc2VydmVyVHJlZU5vZGVdLCBudWxsKTsKKyAg ICAgICAgICAgIGV4cGVjdChhbGVydGlmeVNweS5hbGVydCkudG9IYXZlQmVlbkNhbGxlZFdpdGgo CisgICAgICAgICAgICAgICdSZXN0b3JlIEVycm9yJywKKyAgICAgICAgICAgICAgJ0ZhaWxlZCB0 byBsb2FkIHByZWZlcmVuY2UgcGdfYmluX2RpciBvZiBtb2R1bGUgcGF0aHMnCisgICAgICAgICAg ICApOworICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgICAgICBjb250ZXh0KCdzZXJ2 ZXIgaXMgbm90IGEgcHBhcyBzZXJ2ZXInLCAoKSA9PiB7CisgICAgICAgICAgaXQoJ2Rpc3BsYXkg YW4gYWxlcnQgd2l0aCAiUmVzdG9yZSBFcnJvciInLCAoKSA9PiB7CisgICAgICAgICAgICByZXN0 b3JlRGlhbG9nLmRyYXcobnVsbCwgW3BwYXNTZXJ2ZXJUcmVlTm9kZV0sIG51bGwpOworICAgICAg ICAgICAgZXhwZWN0KGFsZXJ0aWZ5U3B5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAg ICAgICAgICAgICAgJ1Jlc3RvcmUgRXJyb3InLAorICAgICAgICAgICAgICAnRmFpbGVkIHRvIGxv YWQgcHJlZmVyZW5jZSBwcGFzX2Jpbl9kaXIgb2YgbW9kdWxlIHBhdGhzJworICAgICAgICAgICAg KTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKworICAgICAgY29udGV4 dCgncHJlZmVyZW5jZSBjYW4gYmUgZm91bmQnLCAoKSA9PiB7CisgICAgICAgIGNvbnRleHQoJ2Jp bmFyeSBmb2xkZXIgaXMgbm90IGNvbmZpZ3VyZWQnLCAoKSA9PiB7CisgICAgICAgICAgYmVmb3Jl RWFjaCgoKSA9PiB7CisgICAgICAgICAgICBwZ0Jyb3dzZXIuZ2V0X3ByZWZlcmVuY2UuYW5kLnJl dHVyblZhbHVlKHt9KTsKKyAgICAgICAgICB9KTsKKworICAgICAgICAgIGNvbnRleHQoJ3NlcnZl ciBpcyBhIHBwYXMgc2VydmVyJywgKCkgPT4geworICAgICAgICAgICAgaXQoJ2Rpc3BsYXkgYW4g YWxlcnQgd2l0aCAiQ29uZmlndXJhdGlvbiByZXF1aXJlZCInLCAoKSA9PiB7CisgICAgICAgICAg ICAgIHJlc3RvcmVEaWFsb2cuZHJhdyhudWxsLCBbc2VydmVyVHJlZU5vZGVdLCBudWxsKTsKKyAg ICAgICAgICAgICAgZXhwZWN0KGFsZXJ0aWZ5U3B5LmFsZXJ0KS50b0hhdmVCZWVuQ2FsbGVkV2l0 aCgKKyAgICAgICAgICAgICAgICAnQ29uZmlndXJhdGlvbiByZXF1aXJlZCcsCisgICAgICAgICAg ICAgICAgJ1BsZWFzZSBjb25maWd1cmUgdGhlIFBvc3RncmVTUUwgQmluYXJ5IFBhdGggaW4gdGhl IFByZWZlcmVuY2VzIGRpYWxvZy4nCisgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9KTsK KyAgICAgICAgICB9KTsKKworICAgICAgICAgIGNvbnRleHQoJ3NlcnZlciBpcyBub3QgYSBwcGFz IHNlcnZlcicsICgpID0+IHsKKyAgICAgICAgICAgIGl0KCdkaXNwbGF5IGFuIGFsZXJ0IHdpdGgg IkNvbmZpZ3VyYXRpb24gcmVxdWlyZWQiJywgKCkgPT4geworICAgICAgICAgICAgICByZXN0b3Jl RGlhbG9nLmRyYXcobnVsbCwgW3BwYXNTZXJ2ZXJUcmVlTm9kZV0sIG51bGwpOworICAgICAgICAg ICAgICBleHBlY3QoYWxlcnRpZnlTcHkuYWxlcnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAg ICAgICAgICAgICAgICdDb25maWd1cmF0aW9uIHJlcXVpcmVkJywKKyAgICAgICAgICAgICAgICAn UGxlYXNlIGNvbmZpZ3VyZSB0aGUgRURCIEFkdmFuY2VkIFNlcnZlciBCaW5hcnkgUGF0aCBpbiB0 aGUgUHJlZmVyZW5jZXMgZGlhbG9nLicKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0p OworICAgICAgICAgIH0pOworICAgICAgICB9KTsKKworICAgICAgICBjb250ZXh0KCdiaW5hcnkg Zm9sZGVyIGlzIGNvbmZpZ3VyZWQnLCAoKSA9PiB7CisgICAgICAgICAgbGV0IHNweTsKKyAgICAg ICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgICAgIHNweSA9IGphc21pbmUuY3JlYXRl U3B5T2JqKCdnbG9iYWxzJywgWydyZXNpemVUbyddKTsKKyAgICAgICAgICAgIGFsZXJ0aWZ5U3B5 WydwZ19yZXN0b3JlJ10uYW5kCisgICAgICAgICAgICAgIC5yZXR1cm5WYWx1ZShzcHkpOworICAg ICAgICAgICAgcGdCcm93c2VyLmdldF9wcmVmZXJlbmNlLmFuZC5yZXR1cm5WYWx1ZSh7dmFsdWU6 ICcvc29tZS9wYXRoJ30pOworICAgICAgICAgICAgcGdCcm93c2VyLk5vZGVzLnNlcnZlci5sYWJl bCA9ICdzb21lLXNlcnZlci1sYWJlbCc7CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICBpdCgn ZGlzcGxheXMgdGhlIGRpYWxvZycsICgpID0+IHsKKyAgICAgICAgICAgIHJlc3RvcmVEaWFsb2cu ZHJhdyhudWxsLCBbe2lkOiAnbGV2ZWwxLjEnfV0sIHtzZXJ2ZXI6IHRydWV9KTsKKyAgICAgICAg ICAgIGV4cGVjdChhbGVydGlmeVNweVsncGdfcmVzdG9yZSddKS50b0hhdmVCZWVuQ2FsbGVkV2l0 aCgKKyAgICAgICAgICAgICAgJ1Jlc3RvcmUgKHNvbWUtc2VydmVyLWxhYmVsOiBzb21lLXRyZWUt bGFiZWwpJywKKyAgICAgICAgICAgICAgW3tpZDogJ2xldmVsMS4xJ31dLAorICAgICAgICAgICAg ICBzZXJ2ZXJUcmVlTm9kZS5nZXREYXRhKCksCisgICAgICAgICAgICAgIHBnQnJvd3Nlci5Ob2Rl cy5zZXJ2ZXIKKyAgICAgICAgICAgICk7CisgICAgICAgICAgICBleHBlY3Qoc3B5LnJlc2l6ZVRv KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnNjUlJywgJzYwJScpOworICAgICAgICAgIH0pOworICAg ICAgICB9KTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKK30pOwpkaWZmIC0tZ2l0IGEvd2Vi L3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9yZXN0b3JlL3Jlc3RvcmVfZGlhbG9nX3dyYXBwZXJfc3Bl Yy5qcyBiL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvcmVzdG9yZS9yZXN0b3JlX2RpYWxvZ193 cmFwcGVyX3NwZWMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjg0ZGU4 ZTYyCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9yZXN0b3Jl L3Jlc3RvcmVfZGlhbG9nX3dyYXBwZXJfc3BlYy5qcwpAQCAtMCwwICsxLDU5MyBAQAorLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor Ly8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMp IDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3 YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwor aW1wb3J0IHtUcmVlRmFrZX0gZnJvbSAnLi4vdHJlZS90cmVlX2Zha2UnOworaW1wb3J0IHtSZXN0 b3JlRGlhbG9nV3JhcHBlcn0gZnJvbSAnLi4vLi4vLi4vcGdhZG1pbi9zdGF0aWMvanMvcmVzdG9y ZS9yZXN0b3JlX2RpYWxvZ193cmFwcGVyJzsKK2ltcG9ydCBNb2NrQWRhcHRlciBmcm9tICdheGlv cy1tb2NrLWFkYXB0ZXInOworaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zL2luZGV4JzsKK2ltcG9y dCB7RmFrZU1vZGVsfSBmcm9tICcuLi9mYWtlX21vZGVsJzsKK2ltcG9ydCB7VHJlZU5vZGV9IGZy b20gJy4uLy4uLy4uL3BnYWRtaW4vc3RhdGljL2pzL3RyZWUvdHJlZSc7CisKK2xldCBjb250ZXh0 ID0gZGVzY3JpYmU7CisKK2Rlc2NyaWJlKCdSZXN0b3JlRGlhbG9nV3JhcHBlcicsICgpID0+IHsK KyAgbGV0IGpxdWVyeVNweTsKKyAgbGV0IHBnQnJvd3NlcjsKKyAgbGV0IGFsZXJ0aWZ5U3B5Owor ICBsZXQgZGlhbG9nTW9kZWxLbGFzc1NweTsKKyAgbGV0IGJhY2tmb3JtOworICBsZXQgZ2VuZXJh dGVkUmVzdG9yZU1vZGVsOworICBsZXQgcmVzdG9yZURpYWxvZ1dyYXBwZXI7CisgIGxldCBub0Rh dGFOb2RlOworICBsZXQgc2VydmVyVHJlZU5vZGU7CisgIGxldCB2aWV3U2NoZW1hOworICBsZXQg cmVzdG9yZUpRdWVyeUNvbnRhaW5lclNweTsKKyAgbGV0IHJlc3RvcmVOb2RlQ2hpbGROb2RlU3B5 OworICBsZXQgcmVzdG9yZU5vZGU7CisKKyAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgcGdCcm93 c2VyID0geworICAgICAgdHJlZU1lbnU6IG5ldyBUcmVlRmFrZSgpLAorICAgICAgTm9kZXM6IHsK KyAgICAgICAgc2VydmVyOiB7CisgICAgICAgICAgaGFzSWQ6IHRydWUsCisgICAgICAgICAgZ2V0 VHJlZU5vZGVIaWVyYXJjaHk6IGphc21pbmUuY3JlYXRlU3B5KCdnZXRUcmVlTm9kZUhpZXJhcmNo eScpLAorICAgICAgICB9LAorICAgICAgfSwKKyAgICAgIGtleWJvYXJkTmF2aWdhdGlvbjogamFz bWluZS5jcmVhdGVTcHlPYmooJ2tleWJvYXJkTmF2aWdhdGlvbicsIFsnZ2V0RGlhbG9nVGFiTmF2 aWdhdG9yJ10pLAorICAgIH07CisKKyAgICBub0RhdGFOb2RlID0gcGdCcm93c2VyLnRyZWVNZW51 LmFkZE5ld05vZGUoJ2xldmVsMS4xJywgdW5kZWZpbmVkLCBbe2lkOiAnbGV2ZWwxJ31dKTsKKyAg ICBzZXJ2ZXJUcmVlTm9kZSA9IHBnQnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdsZXZlbDIu MScsIHsKKyAgICAgIF90eXBlOiAnc2VydmVyJywKKyAgICAgIF9pZDogMTAsCisgICAgICBsYWJl bDogJ3NvbWUtdHJlZS1sYWJlbCcsCisgICAgfSwgW3tpZDogJ2xldmVsMi4xJ31dKTsKKyAgICBq cXVlcnlTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgnanF1ZXJ5U3B5Jyk7CisgICAgZGlhbG9nTW9k ZWxLbGFzc1NweSA9IGphc21pbmUuY3JlYXRlU3B5KCdkaWFsb2dNb2RlbEtsYXNzJyk7CisgICAg Z2VuZXJhdGVkUmVzdG9yZU1vZGVsID0ge307CisgICAgdmlld1NjaGVtYSA9IHt9OworICAgIGJh Y2tmb3JtID0gamFzbWluZS5jcmVhdGVTcHlPYmooJ2JhY2tmb3JtJywgWydnZW5lcmF0ZVZpZXdT Y2hlbWEnLCAnRGlhbG9nJ10pOworICAgIGJhY2tmb3JtLmdlbmVyYXRlVmlld1NjaGVtYS5hbmQu cmV0dXJuVmFsdWUodmlld1NjaGVtYSk7CisgICAgZGlhbG9nTW9kZWxLbGFzc1NweS5hbmQucmV0 dXJuVmFsdWUoZ2VuZXJhdGVkUmVzdG9yZU1vZGVsKTsKKyAgICByZXN0b3JlSlF1ZXJ5Q29udGFp bmVyU3B5ID0gamFzbWluZS5jcmVhdGVTcHlPYmooJ3Jlc3RvcmVKUXVlcnlDb250YWluZXInLCBb J2dldCcsICdhdHRyJ10pOworICAgIHJlc3RvcmVKUXVlcnlDb250YWluZXJTcHkuZ2V0LmFuZC5y ZXR1cm5WYWx1ZShyZXN0b3JlSlF1ZXJ5Q29udGFpbmVyU3B5KTsKKworICAgIHJlc3RvcmVOb2Rl ID0geworICAgICAgX19pbnRlcm5hbDogeworICAgICAgICBidXR0b25zOiBbCisgICAgICAgICAg e30sIHt9LAorICAgICAgICAgIHsKKyAgICAgICAgICAgIGVsZW1lbnQ6IHsKKyAgICAgICAgICAg ICAgZGlzYWJsZWQ6IGZhbHNlLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICB9LAorICAgICAg ICBdLAorICAgICAgfSwKKyAgICAgIGVsZW1lbnRzOiB7CisgICAgICAgIGJvZHk6IHsKKyAgICAg ICAgICBjaGlsZE5vZGVzOiBbCisgICAgICAgICAgICB7fSwKKyAgICAgICAgICBdLAorICAgICAg ICB9LAorICAgICAgICBjb250ZW50OiBqYXNtaW5lLmNyZWF0ZVNweU9iaignY29udGVudCcsIFsn YXBwZW5kQ2hpbGQnLCAnYXR0ciddKSwKKyAgICAgIH0sCisgICAgfTsKKworCisgICAgcmVzdG9y ZU5vZGVDaGlsZE5vZGVTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignc29tZXRoaW5nJywgWydh ZGRDbGFzcyddKTsKKworICAgIGpxdWVyeVNweS5hbmQuY2FsbEZha2UoKHNlbGVjdG9yKSA9PiB7 CisgICAgICBpZiAoc2VsZWN0b3IgPT09ICc8ZGl2IGNsYXNzPVwncmVzdG9yZV9kaWFsb2dcJz48 L2Rpdj4nKSB7CisgICAgICAgIHJldHVybiByZXN0b3JlSlF1ZXJ5Q29udGFpbmVyU3B5OworICAg ICAgfSBlbHNlIGlmIChzZWxlY3RvciA9PT0gcmVzdG9yZU5vZGUuZWxlbWVudHMuYm9keS5jaGls ZE5vZGVzWzBdKSB7CisgICAgICAgIHJldHVybiByZXN0b3JlTm9kZUNoaWxkTm9kZVNweTsKKyAg ICAgIH0KKyAgICB9KTsKKyAgfSk7CisKKyAgZGVzY3JpYmUoJyNwcmVwYXJlJywgKCkgPT4gewor CisgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICBhbGVydGlmeVNweSA9IGphc21pbmUuY3Jl YXRlU3B5T2JqKCdhbGVydGlmeScsIFsnYWxlcnQnLCAnZGlhbG9nJ10pOworICAgICAgcmVzdG9y ZURpYWxvZ1dyYXBwZXIgPSBuZXcgUmVzdG9yZURpYWxvZ1dyYXBwZXIoCisgICAgICAgICc8ZGl2 IGNsYXNzPVwncmVzdG9yZV9kaWFsb2dcJz48L2Rpdj4nLAorICAgICAgICAncmVzdG9yZURpYWxv Z1RpdGxlJywKKyAgICAgICAgJ3Jlc3RvcmUnLAorICAgICAgICBqcXVlcnlTcHksCisgICAgICAg IHBnQnJvd3NlciwKKyAgICAgICAgYWxlcnRpZnlTcHksCisgICAgICAgIGRpYWxvZ01vZGVsS2xh c3NTcHksCisgICAgICAgIGJhY2tmb3JtCisgICAgICApOworICAgICAgcmVzdG9yZURpYWxvZ1dy YXBwZXIgPSBPYmplY3QuYXNzaWduKHJlc3RvcmVEaWFsb2dXcmFwcGVyLCByZXN0b3JlTm9kZSk7 CisgICAgfSk7CisgICAgY29udGV4dCgnbm8gdHJlZSBlbGVtZW50IGlzIHNlbGVjdGVkJywgKCkg PT4geworICAgICAgaXQoJ2RvZXMgbm90IGNyZWF0ZSBhIGJhY2tmb3JtIGRpYWxvZycsICgpID0+ IHsKKyAgICAgICAgcmVzdG9yZURpYWxvZ1dyYXBwZXIucHJlcGFyZSgpOworICAgICAgICBleHBl Y3QoYmFja2Zvcm0uRGlhbG9nKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpOworICAgICAgfSk7CisK KyAgICAgIGl0KCdkaXNhYmxlcyB0aGUgYnV0dG9uICJzdWJtaXQgYnV0dG9uIiB1bnRpbCBhIGZp bGVuYW1lIGlzIHNlbGVjdGVkJywgKCkgPT4geworICAgICAgICByZXN0b3JlRGlhbG9nV3JhcHBl ci5wcmVwYXJlKCk7CisgICAgICAgIGV4cGVjdChyZXN0b3JlRGlhbG9nV3JhcHBlci5fX2ludGVy bmFsLmJ1dHRvbnNbMl0uZWxlbWVudC5kaXNhYmxlZCkudG9CZSh0cnVlKTsKKyAgICAgIH0pOwor ICAgIH0pOworCisgICAgY29udGV4dCgnc2VsZWN0ZWQgdHJlZSBub2RlIGhhcyBubyBkYXRhJywg KCkgPT4geworICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgIHBnQnJvd3Nlci50cmVl TWVudS5zZWxlY3ROb2RlKG5vRGF0YU5vZGUuZG9tTm9kZSk7CisgICAgICB9KTsKKworICAgICAg aXQoJ2RvZXMgbm90IGNyZWF0ZSBhIGJhY2tmb3JtIGRpYWxvZycsICgpID0+IHsKKyAgICAgICAg cmVzdG9yZURpYWxvZ1dyYXBwZXIucHJlcGFyZSgpOworICAgICAgICBleHBlY3QoYmFja2Zvcm0u RGlhbG9nKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpOworICAgICAgfSk7CisKKyAgICAgIGl0KCdk aXNhYmxlcyB0aGUgYnV0dG9uICJzdWJtaXQgYnV0dG9uIiB1bnRpbCBhIGZpbGVuYW1lIGlzIHNl bGVjdGVkJywgKCkgPT4geworICAgICAgICByZXN0b3JlRGlhbG9nV3JhcHBlci5wcmVwYXJlKCk7 CisgICAgICAgIGV4cGVjdChyZXN0b3JlRGlhbG9nV3JhcHBlci5fX2ludGVybmFsLmJ1dHRvbnNb Ml0uZWxlbWVudC5kaXNhYmxlZCkudG9CZSh0cnVlKTsKKyAgICAgIH0pOworICAgIH0pOworCisg ICAgY29udGV4dCgndHJlZSBlbGVtZW50IGlzIHNlbGVjdGVkJywgKCkgPT4geworICAgICAgbGV0 IHRyZWVIaWVyYXJjaHlJbmZvcm1hdGlvbjsKKyAgICAgIGxldCBkaWFsb2dTcHk7CisgICAgICBi ZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgdHJlZUhpZXJhcmNoeUluZm9ybWF0aW9uID0gewor ICAgICAgICAgIHNlcnZlcjogeworICAgICAgICAgICAgX3R5cGU6ICdzZXJ2ZXInLAorICAgICAg ICAgICAgX2lkOiAxMCwKKyAgICAgICAgICAgIHByaW9yaXR5OiAwLAorICAgICAgICAgICAgbGFi ZWw6ICdzb21lLXRyZWUtbGFiZWwnLAorICAgICAgICAgIH0sCisgICAgICAgIH07CisgICAgICAg IHBnQnJvd3Nlci50cmVlTWVudS5zZWxlY3ROb2RlKHNlcnZlclRyZWVOb2RlLmRvbU5vZGUpOwor ICAgICAgICBwZ0Jyb3dzZXIuTm9kZXNbJ3NlcnZlciddLmdldFRyZWVOb2RlSGllcmFyY2h5LmFu ZAorICAgICAgICAgIC5yZXR1cm5WYWx1ZSh0cmVlSGllcmFyY2h5SW5mb3JtYXRpb24pOworICAg ICAgICBkaWFsb2dTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignbmV3VmlldycsIFsncmVuZGVy J10pOworICAgICAgICBkaWFsb2dTcHkuJGVsID0gamFzbWluZS5jcmVhdGVTcHlPYmooJyRlbCcs IFsnZmluZCcsICdhdHRyJ10pOworICAgICAgICBkaWFsb2dTcHkubW9kZWwgPSBqYXNtaW5lLmNy ZWF0ZVNweU9iaignbW9kZWwnLCBbJ29uJ10pOworICAgICAgICBkaWFsb2dTcHkuJGVsLmZpbmQu YW5kLnJldHVyblZhbHVlKFtdKTsKKworICAgICAgICBiYWNrZm9ybS5EaWFsb2cuYW5kLnJldHVy blZhbHVlKGRpYWxvZ1NweSk7CisgICAgICB9KTsKKworICAgICAgaXQoJ2NyZWF0ZXMgYSBiYWNr Zm9ybSBkaWFsb2cgYW5kIGRpc3BsYXlzIGl0JywgKCkgPT4geworICAgICAgICByZXN0b3JlRGlh bG9nV3JhcHBlci5wcmVwYXJlKCk7CisgICAgICAgIGV4cGVjdChiYWNrZm9ybS5EaWFsb2cpLnRv SGF2ZUJlZW5DYWxsZWRXaXRoKHsKKyAgICAgICAgICBlbDogcmVzdG9yZUpRdWVyeUNvbnRhaW5l clNweSwKKyAgICAgICAgICBtb2RlbDogZ2VuZXJhdGVkUmVzdG9yZU1vZGVsLAorICAgICAgICAg IHNjaGVtYTogdmlld1NjaGVtYSwKKyAgICAgICAgfSk7CisKKyAgICAgICAgZXhwZWN0KGRpYWxv Z1NweS5yZW5kZXIpLnRvSGF2ZUJlZW5DYWxsZWQoKTsKKyAgICAgIH0pOworCisgICAgICBpdCgn YWRkIGFsZXJ0aWZ5IGNsYXNzZXMgdG8gcmVzdG9yZSBub2RlIGNoaWxkbm9kZScsICgpID0+IHsK KyAgICAgICAgcmVzdG9yZURpYWxvZ1dyYXBwZXIucHJlcGFyZSgpOworICAgICAgICBleHBlY3Qo cmVzdG9yZU5vZGVDaGlsZE5vZGVTcHkuYWRkQ2xhc3MpCisgICAgICAgICAgLnRvSGF2ZUJlZW5D YWxsZWRXaXRoKCdhbGVydGlmeV90b29sc19kaWFsb2dfcHJvcGVydGllcyBvYmpfcHJvcGVydGll cycpOworICAgICAgfSk7CisKKyAgICAgIGl0KCdkaXNhYmxlcyB0aGUgYnV0dG9uIHN1Ym1pdCBi dXR0b24gdW50aWwgYSBmaWxlbmFtZSBpcyBzZWxlY3RlZCcsICgpID0+IHsKKyAgICAgICAgcmVz dG9yZURpYWxvZ1dyYXBwZXIucHJlcGFyZSgpOworICAgICAgICBleHBlY3QocmVzdG9yZU5vZGUu X19pbnRlcm5hbC5idXR0b25zWzJdLmVsZW1lbnQuZGlzYWJsZWQpLnRvQmUodHJ1ZSk7CisgICAg ICB9KTsKKworICAgICAgaXQoJ2dlbmVyYXRlcyBhIG5ldyByZXN0b3JlIG1vZGVsJywgKCkgPT4g eworICAgICAgICByZXN0b3JlRGlhbG9nV3JhcHBlci5wcmVwYXJlKCk7CisgICAgICAgIGV4cGVj dChkaWFsb2dNb2RlbEtsYXNzU3B5KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICB7 bm9kZV9kYXRhOiBwZ0Jyb3dzZXIuTm9kZXNbJ3NlcnZlciddfSwKKyAgICAgICAgICB7bm9kZV9p bmZvOiB0cmVlSGllcmFyY2h5SW5mb3JtYXRpb259CisgICAgICAgICk7CisgICAgICB9KTsKKwor ICAgICAgaXQoJ2FkZCB0aGUgbmV3IGRpYWxvZyB0byB0aGUgcmVzdG9yZSBub2RlIEhUTUwnLCAo KSA9PiB7CisgICAgICAgIHJlc3RvcmVEaWFsb2dXcmFwcGVyLnByZXBhcmUoKTsKKyAgICAgICAg ZXhwZWN0KHJlc3RvcmVOb2RlLmVsZW1lbnRzLmNvbnRlbnQuYXBwZW5kQ2hpbGQpLnRvSGF2ZUJl ZW5DYWxsZWRXaXRoKHJlc3RvcmVKUXVlcnlDb250YWluZXJTcHkpOworICAgICAgfSk7CisgICAg fSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdvbkJ1dHRvbkNsaWNrZWQnLCAoKSA9PiB7CisgICAg bGV0IG5ldHdvcmtNb2NrOworCisgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICBwZ0Jyb3dz ZXIuc2hvd0hlbHAgPSBqYXNtaW5lLmNyZWF0ZVNweSgnc2hvd0hlbHAnKTsKKyAgICAgIG5ldHdv cmtNb2NrID0gbmV3IE1vY2tBZGFwdGVyKGF4aW9zKTsKKyAgICAgIGFsZXJ0aWZ5U3B5ID0gamFz bWluZS5jcmVhdGVTcHlPYmooJ2FsZXJ0aWZ5JywgWydzdWNjZXNzJywgJ2FsZXJ0J10pOworICAg ICAgcmVzdG9yZURpYWxvZ1dyYXBwZXIgPSBuZXcgUmVzdG9yZURpYWxvZ1dyYXBwZXIoCisgICAg ICAgICc8ZGl2IGNsYXNzPVwncmVzdG9yZV9kaWFsb2dcJz48L2Rpdj4nLAorICAgICAgICAncmVz dG9yZURpYWxvZ1RpdGxlJywKKyAgICAgICAgJ3Jlc3RvcmUnLAorICAgICAgICBqcXVlcnlTcHks CisgICAgICAgIHBnQnJvd3NlciwKKyAgICAgICAgYWxlcnRpZnlTcHksCisgICAgICAgIGRpYWxv Z01vZGVsS2xhc3NTcHksCisgICAgICAgIGJhY2tmb3JtCisgICAgICApOworICAgICAgcmVzdG9y ZURpYWxvZ1dyYXBwZXIgPSBPYmplY3QuYXNzaWduKHJlc3RvcmVEaWFsb2dXcmFwcGVyLCByZXN0 b3JlTm9kZSk7CisKKyAgICB9KTsKKworICAgIGFmdGVyRWFjaChmdW5jdGlvbiAoKSB7CisgICAg ICBuZXR3b3JrTW9jay5yZXN0b3JlKCk7CisgICAgfSk7CisKKyAgICBjb250ZXh0KCdkaWFsb2cg aGVscCBidXR0b24gd2FzIHByZXNzZWQnLCAoKSA9PiB7CisgICAgICBsZXQgbmV0d29ya0NhbGxl ZDsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICBuZXR3b3JrQ2FsbGVkID0gZmFs c2U7CisgICAgICAgIHBnQnJvd3Nlci50cmVlTWVudS5zZWxlY3ROb2RlKHNlcnZlclRyZWVOb2Rl LmRvbU5vZGUpOworICAgICAgICBuZXR3b3JrTW9jay5vbkFueSgvLisvKS5yZXBseSgoKSA9PiB7 CisgICAgICAgICAgbmV0d29ya0NhbGxlZCA9IHRydWU7CisgICAgICAgICAgcmV0dXJuIFsyMDAs IHt9XTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29uc3QgZXZlbnQgPSB7CisgICAgICAgICAg YnV0dG9uOiB7CisgICAgICAgICAgICBlbGVtZW50OiB7CisgICAgICAgICAgICAgIG5hbWU6ICdk aWFsb2dfaGVscCcsCisgICAgICAgICAgICAgIGdldEF0dHJpYnV0ZTogKGF0dHJpYnV0ZU5hbWUp ID0+IHsKKyAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PT0gJ3VybCcpIHsKKyAg ICAgICAgICAgICAgICAgIHJldHVybiAnaHR0cDovL3NvbWV1cmwnOworICAgICAgICAgICAgICAg IH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZSA9PT0gJ2xhYmVsJykgeworICAgICAgICAgICAgICAg ICAgcmV0dXJuICdzb21lIGxhYmVsJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg IH0sCisgICAgICAgICAgICB9LAorICAgICAgICAgIH0sCisgICAgICAgIH07CisgICAgICAgIHJl c3RvcmVEaWFsb2dXcmFwcGVyLmNhbGxiYWNrKGV2ZW50KTsKKyAgICAgIH0pOworCisgICAgICBp dCgnZGlzcGxheXMgaGVscCBmb3IgZGlhbG9nJywgKCkgPT4geworICAgICAgICBleHBlY3QocGdC cm93c2VyLnNob3dIZWxwKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgKKyAgICAgICAgICAnZGlhbG9n X2hlbHAnLAorICAgICAgICAgICdodHRwOi8vc29tZXVybCcsCisgICAgICAgICAgcGdCcm93c2Vy Lk5vZGVzWydzZXJ2ZXInXSwKKyAgICAgICAgICBzZXJ2ZXJUcmVlTm9kZSwKKyAgICAgICAgICAn c29tZSBsYWJlbCcKKyAgICAgICAgKTsKKyAgICAgIH0pOworCisgICAgICBpdCgnZG9lcyBub3Qg c3RhcnQgdGhlIHJlc3RvcmUnLCAoKSA9PiB7CisgICAgICAgIGV4cGVjdChuZXR3b3JrQ2FsbGVk KS50b0JlKGZhbHNlKTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgY29udGV4dCgnb2JqZWN0 IGhlbHAgYnV0dG9uIHdhcyBwcmVzc2VkJywgKCkgPT4geworICAgICAgbGV0IG5ldHdvcmtDYWxs ZWQ7CisgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgbmV0d29ya0NhbGxlZCA9IGZh bHNlOworICAgICAgICBwZ0Jyb3dzZXIudHJlZU1lbnUuc2VsZWN0Tm9kZShzZXJ2ZXJUcmVlTm9k ZS5kb21Ob2RlKTsKKyAgICAgICAgbmV0d29ya01vY2sub25BbnkoLy4rLykucmVwbHkoKCkgPT4g eworICAgICAgICAgIG5ldHdvcmtDYWxsZWQgPSB0cnVlOworICAgICAgICAgIHJldHVybiBbMjAw LCB7fV07CisgICAgICAgIH0pOworCisgICAgICAgIGNvbnN0IGV2ZW50ID0geworICAgICAgICAg IGJ1dHRvbjogeworICAgICAgICAgICAgZWxlbWVudDogeworICAgICAgICAgICAgICBuYW1lOiAn b2JqZWN0X2hlbHAnLAorICAgICAgICAgICAgICBnZXRBdHRyaWJ1dGU6IChhdHRyaWJ1dGVOYW1l KSA9PiB7CisgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT09ICd1cmwnKSB7Cisg ICAgICAgICAgICAgICAgICByZXR1cm4gJ2h0dHA6Ly9zb21ldXJsJzsKKyAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWUgPT09ICdsYWJlbCcpIHsKKyAgICAgICAgICAgICAg ICAgIHJldHVybiAnc29tZSBsYWJlbCc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICB9LAorICAgICAgICAgICAgfSwKKyAgICAgICAgICB9LAorICAgICAgICB9OworICAgICAgICBy ZXN0b3JlRGlhbG9nV3JhcHBlci5jYWxsYmFjayhldmVudCk7CisgICAgICB9KTsKKworICAgICAg aXQoJ2Rpc3BsYXlzIGhlbHAgZm9yIGRpYWxvZycsICgpID0+IHsKKyAgICAgICAgZXhwZWN0KHBn QnJvd3Nlci5zaG93SGVscCkudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAgICAgICAgJ29iamVj dF9oZWxwJywKKyAgICAgICAgICAnaHR0cDovL3NvbWV1cmwnLAorICAgICAgICAgIHBnQnJvd3Nl ci5Ob2Rlc1snc2VydmVyJ10sCisgICAgICAgICAgc2VydmVyVHJlZU5vZGUsCisgICAgICAgICAg J3NvbWUgbGFiZWwnCisgICAgICAgICk7CisgICAgICB9KTsKKworICAgICAgaXQoJ2RvZXMgbm90 IHN0YXJ0IHRoZSByZXN0b3JlJywgKCkgPT4geworICAgICAgICBleHBlY3QobmV0d29ya0NhbGxl ZCkudG9CZShmYWxzZSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGNvbnRleHQoJ3Jlc3Rv cmUgYnV0dG9uIHdhcyBwcmVzc2VkJywgKCkgPT4geworICAgICAgbGV0IG5ldHdvcmtDYWxsZWQ7 CisgICAgICBsZXQgZXZlbnQ7CisKKyAgICAgIGNvbnRleHQoJ25vIHRyZWUgbm9kZSBpcyBzZWxl Y3RlZCcsICgpID0+IHsKKyAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7CisgICAgICAgICAgbmV0 d29ya0NhbGxlZCA9IGZhbHNlOworICAgICAgICAgIG5ldHdvcmtNb2NrLm9uQW55KC8uKy8pLnJl cGx5KCgpID0+IHsKKyAgICAgICAgICAgIG5ldHdvcmtDYWxsZWQgPSB0cnVlOworICAgICAgICAg ICAgcmV0dXJuIFsyMDAsIHt9XTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgICBldmVudCA9IHsK KyAgICAgICAgICAgIGJ1dHRvbjogeworICAgICAgICAgICAgICAnZGF0YS1idG4tbmFtZSc6ICdy ZXN0b3JlJywKKyAgICAgICAgICAgICAgZWxlbWVudDogeworICAgICAgICAgICAgICAgIGdldEF0 dHJpYnV0ZTogKCkgPT4geworICAgICAgICAgICAgICAgICAgcmV0dXJuICdodHRwOi8vc29tZXVy bCc7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIH0s CisgICAgICAgICAgfTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgaXQoJ2RvZXMgbm90IHN0YXJ0 IHRoZSByZXN0b3JlJywgKCkgPT4geworICAgICAgICAgIHJlc3RvcmVEaWFsb2dXcmFwcGVyLmNh bGxiYWNrKGV2ZW50KTsKKyAgICAgICAgICBleHBlY3QobmV0d29ya0NhbGxlZCkudG9CZShmYWxz ZSk7CisgICAgICAgIH0pOworICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3RyZWUgbm9kZSBz ZWxlY3RlZCBoYXMgbm8gZGF0YScsICgpID0+IHsKKyAgICAgICAgYmVmb3JlRWFjaCgoKSA9PiB7 CisgICAgICAgICAgbmV0d29ya0NhbGxlZCA9IGZhbHNlOworICAgICAgICAgIG5ldHdvcmtNb2Nr Lm9uQW55KC8uKy8pLnJlcGx5KCgpID0+IHsKKyAgICAgICAgICAgIG5ldHdvcmtDYWxsZWQgPSB0 cnVlOworICAgICAgICAgICAgcmV0dXJuIFsyMDAsIHt9XTsKKyAgICAgICAgICB9KTsKKyAgICAg ICAgICBldmVudCA9IHsKKyAgICAgICAgICAgIGJ1dHRvbjogeworICAgICAgICAgICAgICAnZGF0 YS1idG4tbmFtZSc6ICdyZXN0b3JlJywKKyAgICAgICAgICAgICAgZWxlbWVudDogeworICAgICAg ICAgICAgICAgIGdldEF0dHJpYnV0ZTogKCkgPT4geworICAgICAgICAgICAgICAgICAgcmV0dXJu ICdodHRwOi8vc29tZXVybCc7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgfSwK KyAgICAgICAgICAgIH0sCisgICAgICAgICAgfTsKKyAgICAgICAgICBwZ0Jyb3dzZXIudHJlZU1l bnUuc2VsZWN0Tm9kZShub0RhdGFOb2RlLmRvbU5vZGUpOworICAgICAgICB9KTsKKworICAgICAg ICBpdCgnZG9lcyBub3Qgc3RhcnQgdGhlIHJlc3RvcmUnLCAoKSA9PiB7CisgICAgICAgICAgcmVz dG9yZURpYWxvZ1dyYXBwZXIuY2FsbGJhY2soZXZlbnQpOworICAgICAgICAgIGV4cGVjdChuZXR3 b3JrQ2FsbGVkKS50b0JlKGZhbHNlKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKworICAgICAg Y29udGV4dCgndHJlZSBub2RlIHNlbGVjdCBoYXMgZGF0YScsICgpID0+IHsKKworICAgICAgICBs ZXQgZGF0YWJhc2VUcmVlTm9kZTsKKworICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAg ICAgICBkYXRhYmFzZVRyZWVOb2RlID0gcGdCcm93c2VyLnRyZWVNZW51LmFkZE5ld05vZGUoJ2xl dmVsMy4xJywgeworICAgICAgICAgICAgX3R5cGU6ICdkYXRhYmFzZScsCisgICAgICAgICAgICBf aWQ6IDEwLAorICAgICAgICAgICAgX2xhYmVsOiAnc29tZS1kYXRhYmFzZS1sYWJlbCcsCisgICAg ICAgICAgfSwgW3tpZDogJ2xldmVsMy4xJ31dKTsKKyAgICAgICAgICBwZ0Jyb3dzZXIudHJlZU1l bnUuYWRkQ2hpbGQoc2VydmVyVHJlZU5vZGUsIGRhdGFiYXNlVHJlZU5vZGUpOworICAgICAgICAg IHBnQnJvd3Nlci5Ob2Rlcy5kYXRhYmFzZSA9IHsKKyAgICAgICAgICAgIGhhc0lkOiB0cnVlLAor ICAgICAgICAgICAgX2xhYmVsOiAnc29tZS1kYXRhYmFzZS1sYWJlbCcsCisgICAgICAgICAgfTsK KyAgICAgICAgICBsZXQgZmFrZU1vZGVsID0gbmV3IEZha2VNb2RlbCgpOworICAgICAgICAgIGZh a2VNb2RlbC5zZXQoJ3NvbWUta2V5JywgJ3NvbWUtdmFsdWUnKTsKKyAgICAgICAgICByZXN0b3Jl RGlhbG9nV3JhcHBlci52aWV3ID0geworICAgICAgICAgICAgbW9kZWw6IGZha2VNb2RlbCwKKyAg ICAgICAgICB9OworICAgICAgICAgIHBnQnJvd3Nlci50cmVlTWVudS5zZWxlY3ROb2RlKGRhdGFi YXNlVHJlZU5vZGUuZG9tTm9kZSk7CisgICAgICAgICAgcGdCcm93c2VyLkV2ZW50cyA9IGphc21p bmUuY3JlYXRlU3B5T2JqKCdwZ0Jyb3dzZXJFdmVudHNTcHknLCBbJ3RyaWdnZXInXSk7CisgICAg ICAgICAgZXZlbnQgPSB7CisgICAgICAgICAgICBidXR0b246IHsKKyAgICAgICAgICAgICAgJ2Rh dGEtYnRuLW5hbWUnOiAncmVzdG9yZScsCisgICAgICAgICAgICAgIGVsZW1lbnQ6IHsKKyAgICAg ICAgICAgICAgICBnZXRBdHRyaWJ1dGU6ICgpID0+IHsKKyAgICAgICAgICAgICAgICAgIHJldHVy biAnaHR0cDovL3NvbWV1cmwnOworICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgIH0s CisgICAgICAgICAgICB9LAorICAgICAgICAgIH07CisgICAgICAgIH0pOworICAgICAgICBjb250 ZXh0KCdyZXN0b3JlIGpvYiBjcmVhdGVkIHN1Y2Nlc3NmdWxseScsICgpID0+IHsKKyAgICAgICAg ICBsZXQgZGF0YVNlbnRUb1NlcnZlcjsKKyAgICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAg ICAgICAgICAgIG5ldHdvcmtNb2NrLm9uUG9zdCgnL3Jlc3RvcmUvam9iLzEwJykucmVwbHkoKHJl cXVlc3QpID0+IHsKKyAgICAgICAgICAgICAgZGF0YVNlbnRUb1NlcnZlciA9IHJlcXVlc3QuZGF0 YTsKKyAgICAgICAgICAgICAgcmV0dXJuIFsyMDAsIHt9XTsKKyAgICAgICAgICAgIH0pOworICAg ICAgICAgIH0pOworCisgICAgICAgICAgaXQoJ2NyZWF0ZSBhbiBzdWNjZXNzIGFsZXJ0IGJveCcs IChkb25lKSA9PiB7CisgICAgICAgICAgICByZXN0b3JlRGlhbG9nV3JhcHBlci5jYWxsYmFjayhl dmVudCk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgICAgZXhw ZWN0KGFsZXJ0aWZ5U3B5LnN1Y2Nlc3MpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAg ICAgICAgICdSZXN0b3JlIGpvYiBjcmVhdGVkLicsCisgICAgICAgICAgICAgICAgNQorICAgICAg ICAgICAgICApOworICAgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgICB9LCAwKTsKKyAg ICAgICAgICB9KTsKKworICAgICAgICAgIGl0KCd0cmlnZ2VyIGJhY2tncm91bmQgcHJvY2Vzcycs IChkb25lKSA9PiB7CisgICAgICAgICAgICByZXN0b3JlRGlhbG9nV3JhcHBlci5jYWxsYmFjayhl dmVudCk7CisgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgICAgZXhw ZWN0KHBnQnJvd3Nlci5FdmVudHMudHJpZ2dlcikudG9IYXZlQmVlbkNhbGxlZFdpdGgoCisgICAg ICAgICAgICAgICAgJ3BnYWRtaW4tYmdwcm9jZXNzOmNyZWF0ZWQnLAorICAgICAgICAgICAgICAg IHJlc3RvcmVEaWFsb2dXcmFwcGVyCisgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgIGRv bmUoKTsKKyAgICAgICAgICAgIH0sIDApOworICAgICAgICAgIH0pOworCisgICAgICAgICAgaXQo J3NlbmQgY29ycmVjdCBkYXRhIHRvIHNlcnZlcicsIChkb25lKSA9PiB7CisgICAgICAgICAgICBy ZXN0b3JlRGlhbG9nV3JhcHBlci5jYWxsYmFjayhldmVudCk7CisgICAgICAgICAgICBzZXRUaW1l b3V0KCgpID0+IHsKKyAgICAgICAgICAgICAgZXhwZWN0KEpTT04ucGFyc2UoZGF0YVNlbnRUb1Nl cnZlcikpLnRvRXF1YWwoeworICAgICAgICAgICAgICAgICdzb21lLWtleSc6ICdzb21lLXZhbHVl JywKKyAgICAgICAgICAgICAgICAnZGF0YWJhc2UnOiAnc29tZS1kYXRhYmFzZS1sYWJlbCcsCisg ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgICB9LCAw KTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgY29udGV4dCgnZXJyb3Ig Y3JlYXRpbmcgcmVzdG9yZSBqb2InLCAoKSA9PiB7CisgICAgICAgICAgYmVmb3JlRWFjaCgoKSA9 PiB7CisgICAgICAgICAgICBuZXR3b3JrTW9jay5vblBvc3QoJy9yZXN0b3JlL2pvYi8xMCcpLnJl cGx5KCgpID0+IHsKKyAgICAgICAgICAgICAgcmV0dXJuIFs0MDAsIHt9XTsKKyAgICAgICAgICAg IH0pOworICAgICAgICAgIH0pOworCisgICAgICAgICAgaXQoJ2NyZWF0ZXMgYW4gYWxlcnQgYm94 JywgKGRvbmUpID0+IHsKKyAgICAgICAgICAgIHJlc3RvcmVEaWFsb2dXcmFwcGVyLmNhbGxiYWNr KGV2ZW50KTsKKyAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAgICAgICAgICBl eHBlY3QoYWxlcnRpZnlTcHkuYWxlcnQpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKAorICAgICAgICAg ICAgICAgICdSZXN0b3JlIGpvYiBmYWlsZWQuJywKKyAgICAgICAgICAgICAgICB1bmRlZmluZWQK KyAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgZG9uZSgpOworICAgICAgICAgICAgfSwg MCk7CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7CisgIH0p OworCisgIGRlc2NyaWJlKCdzZXRFeHRyYVBhcmFtZXRlcnMnLCAoKSA9PiB7CisgICAgbGV0IHNl bGVjdGVkTm9kZTsKKyAgICBsZXQgdHJlZUluZm87CisgICAgbGV0IG1vZGVsOworCisgICAgYmVm b3JlRWFjaCgoKSA9PiB7CisgICAgICByZXN0b3JlRGlhbG9nV3JhcHBlciA9IG5ldyBSZXN0b3Jl RGlhbG9nV3JhcHBlcigKKyAgICAgICAgJzxkaXYgY2xhc3M9XCdyZXN0b3JlX2RpYWxvZ1wnPjwv ZGl2PicsCisgICAgICAgICdyZXN0b3JlRGlhbG9nVGl0bGUnLAorICAgICAgICAncmVzdG9yZScs CisgICAgICAgIGpxdWVyeVNweSwKKyAgICAgICAgcGdCcm93c2VyLAorICAgICAgICBhbGVydGlm eVNweSwKKyAgICAgICAgZGlhbG9nTW9kZWxLbGFzc1NweSwKKyAgICAgICAgYmFja2Zvcm0KKyAg ICAgICk7CisKKyAgICAgIG1vZGVsID0gbmV3IEZha2VNb2RlbCgpOworICAgICAgcmVzdG9yZURp YWxvZ1dyYXBwZXIudmlldyA9IHsKKyAgICAgICAgbW9kZWw6IG1vZGVsLAorICAgICAgfTsKKyAg ICB9KTsKKworICAgIGNvbnRleHQoJ3doZW4gaXQgaXMgYSBjdXN0b20gbW9kZWwnLCAoKSA9PiB7 CisgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgbW9kZWwuc2V0KCdjdXN0b20nLCB0 cnVlKTsKKyAgICAgICAgdHJlZUluZm8gPSB7CisgICAgICAgICAgJ2RhdGFiYXNlJzogeworICAg ICAgICAgICAgJ19sYWJlbCc6ICdzb21lLWRhdGFiYXNlLWxhYmVsJywKKyAgICAgICAgICB9LAor ICAgICAgICB9OworICAgICAgfSk7CisKKyAgICAgIGl0KCdvbmx5IHNldHMgdGhlIGRhdGFiYXNl JywgKCkgPT4geworICAgICAgICByZXN0b3JlRGlhbG9nV3JhcHBlci5zZXRFeHRyYVBhcmFtZXRl cnMoc2VsZWN0ZWROb2RlLCB0cmVlSW5mbyk7CisgICAgICAgIGV4cGVjdChtb2RlbC50b0pTT04o KSkudG9FcXVhbCh7CisgICAgICAgICAgJ2N1c3RvbSc6IHRydWUsCisgICAgICAgICAgJ2RhdGFi YXNlJzogJ3NvbWUtZGF0YWJhc2UtbGFiZWwnLAorICAgICAgICB9KTsKKyAgICAgIH0pOworICAg IH0pOworCisgICAgY29udGV4dCgnd2hlbiBpdCBpcyBub3QgYSBjdXN0b20gbW9kZWwnLCAoKSA9 PiB7CisgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgbW9kZWwuc2V0KCdjdXN0b20n LCBmYWxzZSk7CisgICAgICAgIHRyZWVJbmZvID0geworICAgICAgICAgICdkYXRhYmFzZSc6IHsK KyAgICAgICAgICAgICdfbGFiZWwnOiAnc29tZS1kYXRhYmFzZS1sYWJlbCcsCisgICAgICAgICAg fSwKKyAgICAgICAgICAnc2NoZW1hJzogeworICAgICAgICAgICAgJ19sYWJlbCc6ICdzb21lLXNj aGVtYS1sYWJlbCcsCisgICAgICAgICAgfSwKKyAgICAgICAgfTsKKyAgICAgIH0pOworCisgICAg ICBjb250ZXh0KCd3aGVuIHNlbGVjdGVkIG5vZGUgaXMgYSBzY2hlbWEnLCAoKSA9PiB7CisgICAg ICAgIGl0KCdzZXRzIHNjaGVtYXMgb24gdGhlIG1vZGVsJywgKCkgPT4geworICAgICAgICAgIHNl bGVjdGVkTm9kZSA9IG5ldyBUcmVlTm9kZSgnc2NoZW1hJywge190eXBlOiAnc2NoZW1hJywgX2xh YmVsOiAnc29tZS1zY2hlbWEtbGFiZWwnfSwgJycpOworICAgICAgICAgIHJlc3RvcmVEaWFsb2dX cmFwcGVyLnNldEV4dHJhUGFyYW1ldGVycyhzZWxlY3RlZE5vZGUsIHRyZWVJbmZvKTsKKyAgICAg ICAgICBleHBlY3QobW9kZWwudG9KU09OKCkpLnRvRXF1YWwoeworICAgICAgICAgICAgY3VzdG9t OiBmYWxzZSwKKyAgICAgICAgICAgIGRhdGFiYXNlOiAnc29tZS1kYXRhYmFzZS1sYWJlbCcsCisg ICAgICAgICAgICBzY2hlbWFzOiBbJ3NvbWUtc2NoZW1hLWxhYmVsJ10sCisgICAgICAgICAgfSk7 CisgICAgICAgIH0pOworICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3doZW4gc2VsZWN0ZWQg bm9kZSBpcyBhIHRhYmxlJywgKCkgPT4geworICAgICAgICBpdCgnc2V0cyBzY2hlbWFzIGFuZCB0 YWJsZSBvbiB0aGUgbW9kZWwnLCAoKSA9PiB7CisgICAgICAgICAgc2VsZWN0ZWROb2RlID0gbmV3 IFRyZWVOb2RlKCd0YWJsZScsIHtfdHlwZTogJ3RhYmxlJywgX2xhYmVsOiAnc29tZS10YWJsZS1s YWJlbCd9LCAnJyk7CisgICAgICAgICAgcmVzdG9yZURpYWxvZ1dyYXBwZXIuc2V0RXh0cmFQYXJh bWV0ZXJzKHNlbGVjdGVkTm9kZSwgdHJlZUluZm8pOworICAgICAgICAgIGV4cGVjdChtb2RlbC50 b0pTT04oKSkudG9FcXVhbCh7CisgICAgICAgICAgICBjdXN0b206IGZhbHNlLAorICAgICAgICAg ICAgZGF0YWJhc2U6ICdzb21lLWRhdGFiYXNlLWxhYmVsJywKKyAgICAgICAgICAgIHNjaGVtYXM6 IFsnc29tZS1zY2hlbWEtbGFiZWwnXSwKKyAgICAgICAgICAgIHRhYmxlczogWydzb21lLXRhYmxl LWxhYmVsJ10sCisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgfSk7CisKKyAgICAg IGNvbnRleHQoJ3doZW4gc2VsZWN0ZWQgbm9kZSBpcyBhIGZ1bmN0aW9uJywgKCkgPT4geworICAg ICAgICBpdCgnc2V0cyBzY2hlbWFzIGFuZCBmdW5jdGlvbiBvbiB0aGUgbW9kZWwnLCAoKSA9PiB7 CisgICAgICAgICAgc2VsZWN0ZWROb2RlID0gbmV3IFRyZWVOb2RlKCdmdW5jdGlvbicsIHtfdHlw ZTogJ2Z1bmN0aW9uJywgX2xhYmVsOiAnc29tZS1mdW5jdGlvbi1sYWJlbCd9LCAnJyk7CisgICAg ICAgICAgcmVzdG9yZURpYWxvZ1dyYXBwZXIuc2V0RXh0cmFQYXJhbWV0ZXJzKHNlbGVjdGVkTm9k ZSwgdHJlZUluZm8pOworICAgICAgICAgIGV4cGVjdChtb2RlbC50b0pTT04oKSkudG9FcXVhbCh7 CisgICAgICAgICAgICBjdXN0b206IGZhbHNlLAorICAgICAgICAgICAgZGF0YWJhc2U6ICdzb21l LWRhdGFiYXNlLWxhYmVsJywKKyAgICAgICAgICAgIHNjaGVtYXM6IFsnc29tZS1zY2hlbWEtbGFi ZWwnXSwKKyAgICAgICAgICAgIGZ1bmN0aW9uczogWydzb21lLWZ1bmN0aW9uLWxhYmVsJ10sCisg ICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgICAgfSk7CisKKyAgICAgIGNvbnRleHQoJ3do ZW4gc2VsZWN0ZWQgbm9kZSBpcyBhbiBpbmRleCcsICgpID0+IHsKKyAgICAgICAgaXQoJ3NldHMg c2NoZW1hcyBhbmQgaW5kZXggb24gdGhlIG1vZGVsJywgKCkgPT4geworICAgICAgICAgIHNlbGVj dGVkTm9kZSA9IG5ldyBUcmVlTm9kZSgnaW5kZXgnLCB7X3R5cGU6ICdpbmRleCcsIF9sYWJlbDog J3NvbWUtaW5kZXgtbGFiZWwnfSwgJycpOworICAgICAgICAgIHJlc3RvcmVEaWFsb2dXcmFwcGVy LnNldEV4dHJhUGFyYW1ldGVycyhzZWxlY3RlZE5vZGUsIHRyZWVJbmZvKTsKKyAgICAgICAgICBl eHBlY3QobW9kZWwudG9KU09OKCkpLnRvRXF1YWwoeworICAgICAgICAgICAgY3VzdG9tOiBmYWxz ZSwKKyAgICAgICAgICAgIGRhdGFiYXNlOiAnc29tZS1kYXRhYmFzZS1sYWJlbCcsCisgICAgICAg ICAgICBzY2hlbWFzOiBbJ3NvbWUtc2NoZW1hLWxhYmVsJ10sCisgICAgICAgICAgICBpbmRleGVz OiBbJ3NvbWUtaW5kZXgtbGFiZWwnXSwKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAg ICB9KTsKKworICAgICAgY29udGV4dCgnd2hlbiBzZWxlY3RlZCBub2RlIGlzIGEgdHJpZ2dlcics ICgpID0+IHsKKyAgICAgICAgaXQoJ3NldHMgc2NoZW1hcyBhbmQgdHJpZ2dlciBvbiB0aGUgbW9k ZWwnLCAoKSA9PiB7CisgICAgICAgICAgc2VsZWN0ZWROb2RlID0gbmV3IFRyZWVOb2RlKCd0cmln Z2VyJywge190eXBlOiAndHJpZ2dlcicsIF9sYWJlbDogJ3NvbWUtdHJpZ2dlci1sYWJlbCd9LCAn Jyk7CisgICAgICAgICAgcmVzdG9yZURpYWxvZ1dyYXBwZXIuc2V0RXh0cmFQYXJhbWV0ZXJzKHNl bGVjdGVkTm9kZSwgdHJlZUluZm8pOworICAgICAgICAgIGV4cGVjdChtb2RlbC50b0pTT04oKSku dG9FcXVhbCh7CisgICAgICAgICAgICBjdXN0b206IGZhbHNlLAorICAgICAgICAgICAgZGF0YWJh c2U6ICdzb21lLWRhdGFiYXNlLWxhYmVsJywKKyAgICAgICAgICAgIHNjaGVtYXM6IFsnc29tZS1z Y2hlbWEtbGFiZWwnXSwKKyAgICAgICAgICAgIHRyaWdnZXJzOiBbJ3NvbWUtdHJpZ2dlci1sYWJl bCddLAorICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICAgIH0pOworCisgICAgICBjb250 ZXh0KCd3aGVuIHNlbGVjdGVkIG5vZGUgaXMgYSB0cmlnZ2VyX2Z1bmMnLCAoKSA9PiB7CisgICAg ICAgIGl0KCdzZXRzIHNjaGVtYXMgYW5kIHRyaWdnZXJfZnVuYyBvbiB0aGUgbW9kZWwnLCAoKSA9 PiB7CisgICAgICAgICAgc2VsZWN0ZWROb2RlID0gbmV3IFRyZWVOb2RlKCd0cmlnZ2VyX2Z1bmMn LCB7X3R5cGU6ICd0cmlnZ2VyX2Z1bmMnLCBfbGFiZWw6ICdzb21lLXRyaWdnZXJfZnVuYy1sYWJl bCd9LCAnJyk7CisgICAgICAgICAgcmVzdG9yZURpYWxvZ1dyYXBwZXIuc2V0RXh0cmFQYXJhbWV0 ZXJzKHNlbGVjdGVkTm9kZSwgdHJlZUluZm8pOworICAgICAgICAgIGV4cGVjdChtb2RlbC50b0pT T04oKSkudG9FcXVhbCh7CisgICAgICAgICAgICBjdXN0b206IGZhbHNlLAorICAgICAgICAgICAg ZGF0YWJhc2U6ICdzb21lLWRhdGFiYXNlLWxhYmVsJywKKyAgICAgICAgICAgIHNjaGVtYXM6IFsn c29tZS1zY2hlbWEtbGFiZWwnXSwKKyAgICAgICAgICAgIHRyaWdnZXJfZnVuY3M6IFsnc29tZS10 cmlnZ2VyX2Z1bmMtbGFiZWwnXSwKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgICB9 KTsKKyAgICB9KTsKKyAgfSk7Cit9KTsKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFz Y3JpcHQvc2NoZW1hL2Nhbl9kcm9wX2NoaWxkX3NwZWMuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZh c2NyaXB0L3NjaGVtYS9jYW5fZHJvcF9jaGlsZF9zcGVjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwLi4zODhkZmZiYwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9yZWdyZXNz aW9uL2phdmFzY3JpcHQvc2NoZW1hL2Nhbl9kcm9wX2NoaWxkX3NwZWMuanMKQEAgLTAsMCArMSw4 MiBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3RncmVTUUwgVG9vbHMKKy8vCisvLyBD b3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisv LyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UK Ky8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLworCitpbXBvcnQge2NhbkRyb3BDaGlsZH0gZnJvbSAnLi4vLi4vLi4vcGdhZG1p bi9zdGF0aWMvanMvc2NoZW1hL2Nhbl9kcm9wX2NoaWxkJzsKK2ltcG9ydCB7VHJlZUZha2V9IGZy b20gJy4uL3RyZWUvdHJlZV9mYWtlJzsKKworbGV0IGNvbnRleHQgPSBkZXNjcmliZTsKKworZGVz Y3JpYmUoJ2Nhbl9kcm9wX2NoaWxkJywgKCkgPT4geworCisgIGxldCBicm93c2VyOworICBsZXQg aXRlbURhdGE7CisgIGxldCBpdGVtOworCisgIGJlZm9yZUVhY2goKCkgPT4geworICAgIGJyb3dz ZXIgPSB7CisgICAgICB0cmVlTWVudTogbmV3IFRyZWVGYWtlKCksCisgICAgfTsKKyAgICBpdGVt ID0gW107CisgICAgYnJvd3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdub2RlMScsIHtfdHlwZTog J3NjaGVtYSd9LCBbe2lkOiAnbm9kZTEnfV0sIFtdKTsKKyAgICBicm93c2VyLnRyZWVNZW51LmFk ZE5ld05vZGUoJ25vZGUxLjEnLCB7X3R5cGU6ICdkYXRhYmFzZSd9LCBbe2lkOiAnbm9kZTEuMSd9 XSwgWydub2RlMSddKTsKKyAgICBicm93c2VyLnRyZWVNZW51LmFkZE5ld05vZGUoJ25vZGUyJywg e190eXBlOiAnY2F0YWxvZyd9LCBbe2lkOiAnbm9kZTInfV0sIFtdKTsKKyAgICBicm93c2VyLnRy ZWVNZW51LmFkZE5ld05vZGUoJ25vZGUyLjEnLCB7X3R5cGU6ICd0YWJsZSd9LCBbe2lkOiAnbm9k ZTIuMSd9XSwgWydub2RlMiddKTsKKyAgICBicm93c2VyLnRyZWVNZW51LmFkZE5ld05vZGUoJ25v ZGUzJywge190eXBlOiAnZnVuY3Rpb24nfSwgW3tpZDogJ25vZGUzJ31dLCBbXSk7CisgICAgYnJv d3Nlci50cmVlTWVudS5hZGROZXdOb2RlKCdub2RlMy4xJywge190eXBlOiAncHJvY2VkdXJlJ30s IFt7aWQ6ICdub2RlMy4xJ31dLCBbJ25vZGUzJ10pOworICB9KTsKKworICBjb250ZXh0KCd3aGVu IGN1cnJlbnQgbm9kZSBpcyBvZiB0aGUgdHlwZSBzY2hlbWEnLCAoKSA9PiB7CisgICAgYmVmb3Jl RWFjaCgoKSA9PiB7CisgICAgICBpdGVtRGF0YSA9IHsKKyAgICAgICAgX3R5cGU6ICdzY2hlbWEn LAorICAgICAgfTsKKyAgICAgIGl0ZW0gPSBbe2lkOiAnbm9kZTEnfV07CisgICAgfSk7CisKKyAg ICBpdCgncmV0dXJucyB0cnVlJywgKCkgPT4geworICAgICAgbGV0IGJvb2wgPSBjYW5Ecm9wQ2hp bGQoYnJvd3NlciwgaXRlbURhdGEsIGl0ZW0pOworICAgICAgZXhwZWN0KGJvb2wpLnRvQmUodHJ1 ZSk7CisgICAgfSk7CisgIH0pOworCisgIGNvbnRleHQoJ3doZW4gYSBwYXJlbnQgb2YgdGhlIGN1 cnJlbnQgbm9kZSBpcyBhIHNjaGVtYScsICgpID0+IHsKKyAgICBpdCgncmV0dXJucyB0cnVlJywg KCkgPT4geworICAgICAgaXRlbURhdGEgPSB7CisgICAgICAgIF90eXBlOiAnZGF0YWJhc2UnLAor ICAgICAgfTsKKyAgICAgIGl0ZW0gPSBbe2lkOiAnbm9kZTEuMSd9XTsKKyAgICAgIGxldCBib29s ID0gY2FuRHJvcENoaWxkKGJyb3dzZXIsIGl0ZW1EYXRhLCBpdGVtKTsKKyAgICAgIGV4cGVjdChi b29sKS50b0JlKHRydWUpOworICAgIH0pOworICB9KTsKKworICBjb250ZXh0KCd3aGVuIGEgcGFy ZW50IG9mIHRoZSBjdXJyZW50IG5vZGUgaXMgYSBjYXRhbG9nJywgKCkgPT4geworICAgIGl0KCdy ZXR1cm5zIGZhbHNlJywgKCkgPT4geworICAgICAgaXRlbURhdGE9IHsKKyAgICAgICAgX3R5cGU6 ICd0YWJsZScsCisgICAgICB9OworICAgICAgaXRlbSA9IFt7aWQ6ICdub2RlMi4xJ31dOworCisg ICAgICBsZXQgYm9vbCA9IGNhbkRyb3BDaGlsZChicm93c2VyLCBpdGVtRGF0YSwgaXRlbSk7Cisg ICAgICBleHBlY3QoYm9vbCkudG9CZShmYWxzZSk7CisgICAgfSk7CisgIH0pOworCisgIGNvbnRl eHQoJ3doZW4gYSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgbm9kZSBpcyBub3QgY2F0YWxvZyBub3Ig c2NoZW1hJywgKCkgPT4geworICAgIGl0KCdyZXR1cm5zIHRydWUnLCAoKSA9PiB7CisgICAgICBp dGVtRGF0YSA9IHsKKyAgICAgICAgX3R5cGU6ICdwcm9jZWR1cmUnLAorICAgICAgfTsKKyAgICAg IGl0ZW0gPSBbe2lkOiAnbm9kZTMuMSd9XTsKKworICAgICAgbGV0IGJvb2wgPSBjYW5Ecm9wQ2hp bGQoYnJvd3NlciwgaXRlbURhdGEsIGl0ZW0pOworICAgICAgZXhwZWN0KGJvb2wpLnRvQmUodHJ1 ZSk7CisgICAgfSk7CisgIH0pOworfSk7CmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZh c2NyaXB0L3NxbGVkaXRvci9jYWxjdWxhdGVfcXVlcnlfcnVuX3RpbWVfc3BlYy5qcyBiL3dlYi9y ZWdyZXNzaW9uL2phdmFzY3JpcHQvc3FsZWRpdG9yL2NhbGN1bGF0ZV9xdWVyeV9ydW5fdGltZV9z cGVjLmpzCmluZGV4IGMxZWQ1YzU3Li4zMWMxNDI5NCAxMDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Np b24vamF2YXNjcmlwdC9zcWxlZGl0b3IvY2FsY3VsYXRlX3F1ZXJ5X3J1bl90aW1lX3NwZWMuanMK KysrIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9zcWxlZGl0b3IvY2FsY3VsYXRlX3F1ZXJ5 X3J1bl90aW1lX3NwZWMuanMKQEAgLTI5LDcgKzI5LDcgQEAgZGVzY3JpYmUoJyNjYWxjdWxhdGVR dWVyeVJ1blRpbWUnLCAoKSA9PiB7CiAgICAgICAgIG1pbnV0ZXM6MzAsCiAgICAgICAgIHNlY29u ZHM6MjEsCiAgICAgICAgIG1pbGxpc2Vjb25kczo3MH0pLnRvRGF0ZSgpOwotICAgICAgICBleHBl Y3QoY2FsY3VsYXRlUXVlcnlSdW5UaW1lKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkpCisgICAgICBleHBl Y3QoY2FsY3VsYXRlUXVlcnlSdW5UaW1lKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkpCiAgICAgICAgICAg LnRvRXF1YWwoJzk0NyBtc2VjJyk7CiAgICAgfSk7CiAgIH0pOwpAQCAtNTIsNyArNTIsNyBAQCBk ZXNjcmliZSgnI2NhbGN1bGF0ZVF1ZXJ5UnVuVGltZScsICgpID0+IHsKICAgICAgICAgbWludXRl czozMSwKICAgICAgICAgc2Vjb25kczoxNSwKICAgICAgICAgbWlsbGlzZWNvbmRzOjcwfSkudG9E YXRlKCk7Ci0gICAgICAgIGV4cGVjdChjYWxjdWxhdGVRdWVyeVJ1blRpbWUoc3RhcnREYXRlLCBl bmREYXRlKSkKKyAgICAgIGV4cGVjdChjYWxjdWxhdGVRdWVyeVJ1blRpbWUoc3RhcnREYXRlLCBl bmREYXRlKSkKICAgICAgICAgICAudG9FcXVhbCgnNTQgc2VjcyA5NDcgbXNlYycpOwogICAgIH0p OwogICB9KTsKQEAgLTc1LDcgKzc1LDcgQEAgZGVzY3JpYmUoJyNjYWxjdWxhdGVRdWVyeVJ1blRp bWUnLCAoKSA9PiB7CiAgICAgICAgIG1pbnV0ZXM6NDAsCiAgICAgICAgIHNlY29uZHM6MTUsCiAg ICAgICAgIG1pbGxpc2Vjb25kczo3MH0pLnRvRGF0ZSgpOwotICAgICAgICBleHBlY3QoY2FsY3Vs YXRlUXVlcnlSdW5UaW1lKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkpCisgICAgICBleHBlY3QoY2FsY3Vs YXRlUXVlcnlSdW5UaW1lKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkpCiAgICAgICAgICAgLnRvRXF1YWwo JzkgbWluIDU0IHNlY3MnKTsKICAgICB9KTsKICAgfSk7CmRpZmYgLS1naXQgYS93ZWIvcmVncmVz c2lvbi9qYXZhc2NyaXB0L3NxbGVkaXRvci9maWx0ZXJfZGlhbG9nX3NwZWNzLmpzIGIvd2ViL3Jl Z3Jlc3Npb24vamF2YXNjcmlwdC9zcWxlZGl0b3IvZmlsdGVyX2RpYWxvZ19zcGVjcy5qcwppbmRl eCBlMTNmYTA5Ny4uY2VhNzVlNmIgMTAwNjQ0Ci0tLSBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3Jp cHQvc3FsZWRpdG9yL2ZpbHRlcl9kaWFsb2dfc3BlY3MuanMKKysrIGIvd2ViL3JlZ3Jlc3Npb24v amF2YXNjcmlwdC9zcWxlZGl0b3IvZmlsdGVyX2RpYWxvZ19zcGVjcy5qcwpAQCAtNywxOCArNywx NSBAQAogLy8KIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBpbXBvcnQgZmlsdGVyRGlhbG9nIGZyb20gJ3Nv dXJjZXMvc3FsZWRpdG9yL2ZpbHRlcl9kaWFsb2cnOwotaW1wb3J0IGZpbHRlckRpYWxvZ01vZGVs IGZyb20gJ3NvdXJjZXMvc3FsZWRpdG9yL2ZpbHRlcl9kaWFsb2dfbW9kZWwnOwogCiBkZXNjcmli ZSgnZmlsdGVyRGlhbG9nJywgKCkgPT4gewotICBsZXQgc3FsRWRpdG9yQ29udHJvbGxlcjsKLSAg c3FsRWRpdG9yQ29udHJvbGxlciA9IGphc21pbmUuY3JlYXRlU3B5KCdzcWxFZGl0b3JDb250cm9s bGVyJykKICAgZGVzY3JpYmUoJ2ZpbHRlckRpYWxvZycsICgpID0+IHsKICAgICBkZXNjcmliZSgn d2hlbiB1c2luZyBmaWx0ZXIgZGlhbG9nJywgKCkgPT4gewogICAgICAgYmVmb3JlRWFjaCgoKSA9 PiB7CiAgICAgICAgIHNweU9uKGZpbHRlckRpYWxvZywgJ2RpYWxvZycpOwogICAgICAgfSk7CiAK LSAgICAgIGl0KCJpdCBzaG91bGQgYmUgZGVmaW5lZCBhcyBmdW5jdGlvbiIsIGZ1bmN0aW9uKCkg eworICAgICAgaXQoJ2l0IHNob3VsZCBiZSBkZWZpbmVkIGFzIGZ1bmN0aW9uJywgZnVuY3Rpb24o KSB7CiAgICAgICAgIGV4cGVjdChmaWx0ZXJEaWFsb2cuZGlhbG9nKS50b0JlRGVmaW5lZCgpOwog ICAgICAgfSk7CiAKZGlmZiAtLWdpdCBhL3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc3FsZWRp dG9yL2tleWJvYXJkX3Nob3J0Y3V0c19zcGVjLmpzIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlw dC9zcWxlZGl0b3Iva2V5Ym9hcmRfc2hvcnRjdXRzX3NwZWMuanMKaW5kZXggMThhNGNjMWIuLjA2 NTg2ZDM0IDEwMDY0NAotLS0gYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3NxbGVkaXRvci9r ZXlib2FyZF9zaG9ydGN1dHNfc3BlYy5qcworKysgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0 L3NxbGVkaXRvci9rZXlib2FyZF9zaG9ydGN1dHNfc3BlYy5qcwpAQCAtMzUsNDggKzM1LDQ4IEBA IGRlc2NyaWJlKCd0aGUga2V5Ym9hcmQgc2hvcnRjdXRzJywgKCkgPT4gewogICAgICAgICBzaGlm dDogZmFsc2UsCiAgICAgICAgIGNvbnRyb2w6IGZhbHNlLAogICAgICAgICBrZXk6IHsKLSAgICAg ICAgICBrZXlfY29kZTogRjVfS0VZCi0gICAgICAgIH0KKyAgICAgICAgICBrZXlfY29kZTogRjVf S0VZLAorICAgICAgICB9LAogICAgICAgfSwKICAgICAgIGV4cGxhaW46IHsKICAgICAgICAgYWx0 OiBmYWxzZSwKICAgICAgICAgc2hpZnQ6IGZhbHNlLAogICAgICAgICBjb250cm9sOiBmYWxzZSwK ICAgICAgICAga2V5OiB7Ci0gICAgICAgICAga2V5X2NvZGU6IEY3X0tFWQotICAgICAgICB9Cisg ICAgICAgICAga2V5X2NvZGU6IEY3X0tFWSwKKyAgICAgICAgfSwKICAgICAgIH0sCiAgICAgICBl eHBsYWluX2FuYWx5emU6IHsKICAgICAgICAgYWx0OiBmYWxzZSwKICAgICAgICAgc2hpZnQ6IHRy dWUsCiAgICAgICAgIGNvbnRyb2w6IGZhbHNlLAogICAgICAgICBrZXk6IHsKLSAgICAgICAgICBr ZXlfY29kZTogRjdfS0VZCi0gICAgICAgIH0KKyAgICAgICAgICBrZXlfY29kZTogRjdfS0VZLAor ICAgICAgICB9LAogICAgICAgfSwKICAgICAgIGRvd25sb2FkX2NzdjogewogICAgICAgICBhbHQ6 IGZhbHNlLAogICAgICAgICBzaGlmdDogZmFsc2UsCiAgICAgICAgIGNvbnRyb2w6IGZhbHNlLAog ICAgICAgICBrZXk6IHsKLSAgICAgICAgICBrZXlfY29kZTogRjhfS0VZCi0gICAgICAgIH0KKyAg ICAgICAgICBrZXlfY29kZTogRjhfS0VZLAorICAgICAgICB9LAogICAgICAgfSwKICAgICAgIG1v dmVfbmV4dDogewogICAgICAgICBhbHQ6IGZhbHNlLAogICAgICAgICBzaGlmdDogZmFsc2UsCiAg ICAgICAgIGNvbnRyb2w6IGZhbHNlLAogICAgICAgICBrZXk6IHsKLSAgICAgICAgICBrZXlfY29k ZTogbnVsbAotICAgICAgICB9CisgICAgICAgICAga2V5X2NvZGU6IG51bGwsCisgICAgICAgIH0s CiAgICAgICB9LAogICAgICAgbW92ZV9wcmV2aW91czogewogICAgICAgICBhbHQ6IGZhbHNlLAog ICAgICAgICBzaGlmdDogZmFsc2UsCiAgICAgICAgIGNvbnRyb2w6IGZhbHNlLAogICAgICAgICBr ZXk6IHsKLSAgICAgICAgICBrZXlfY29kZTogbnVsbAotICAgICAgICB9CisgICAgICAgICAga2V5 X2NvZGU6IG51bGwsCisgICAgICAgIH0sCiAgICAgICB9LAogICAgIH07CiAKZGlmZiAtLWdpdCBh L3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvc3FsZWRpdG9yL3F1ZXJ5X3Rvb2xfaHR0cF9lcnJv cl9oYW5kbGVyX3NwZWMuanMgYi93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L3NxbGVkaXRvci9x dWVyeV90b29sX2h0dHBfZXJyb3JfaGFuZGxlcl9zcGVjLmpzCmluZGV4IDIxMjgxNTIzLi5iYzVm NTBlMiAxMDA2NDQKLS0tIGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9zcWxlZGl0b3IvcXVl cnlfdG9vbF9odHRwX2Vycm9yX2hhbmRsZXJfc3BlYy5qcworKysgYi93ZWIvcmVncmVzc2lvbi9q YXZhc2NyaXB0L3NxbGVkaXRvci9xdWVyeV90b29sX2h0dHBfZXJyb3JfaGFuZGxlcl9zcGVjLmpz CkBAIC05LDcgKzksNyBAQAogCiBpbXBvcnQgewogICBodHRwUmVzcG9uc2VSZXF1aXJlc05ld1Ry YW5zYWN0aW9uLAotICBoYW5kbGVRdWVyeVRvb2xBamF4RXJyb3IKKyAgaGFuZGxlUXVlcnlUb29s QWpheEVycm9yLAogfSBmcm9tICcuLi8uLi8uLi9wZ2FkbWluL3N0YXRpYy9qcy9zcWxlZGl0b3Iv cXVlcnlfdG9vbF9odHRwX2Vycm9yX2hhbmRsZXInOwogCiBkZXNjcmliZSgnI2h0dHBSZXNwb25z ZVJlcXVpcmVzTmV3VHJhbnNhY3Rpb24nLCAoKSA9PiB7CkBAIC03MSwyOSArNzEsMjkgQEAgZGVz Y3JpYmUoJyNodHRwUmVzcG9uc2VSZXF1aXJlc05ld1RyYW5zYWN0aW9uJywgKCkgPT4gewogZGVz Y3JpYmUoJyNoYW5kbGVRdWVyeVRvb2xBamF4RXJyb3InLCAoKSA9PiB7CiAgIGxldCBzcWxFZGl0 b3JIYW5kbGVyLAogICAgIGV4Y2VwdGlvblNweSwgc3RhdGVUb1NhdmUsCi0gICAgc3RhdGVQYXJh bWV0ZXJzLCBjaGVja1RyYW5zYWN0aW9uLCBVc2VyTWFuYWdlbWVudE1vY2ssCisgICAgc3RhdGVQ YXJhbWV0ZXJzLCBjaGVja1RyYW5zYWN0aW9uLAogICAgIHBnQnJvd3Nlck1vY2s7CiAKLSAgICBi ZWZvcmVFYWNoKCgpID0+IHsKLSAgICAgIHN0YXRlVG9TYXZlID0gJ3Rlc3RTdGF0ZSc7Ci0gICAg ICBzdGF0ZVBhcmFtZXRlcnMgPSBbXTsKLSAgICAgIGNoZWNrVHJhbnNhY3Rpb24gPSBmYWxzZTsK LSAgICAgIHNxbEVkaXRvckhhbmRsZXIgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaigKKyAgYmVmb3Jl RWFjaCgoKSA9PiB7CisgICAgc3RhdGVUb1NhdmUgPSAndGVzdFN0YXRlJzsKKyAgICBzdGF0ZVBh cmFtZXRlcnMgPSBbXTsKKyAgICBjaGVja1RyYW5zYWN0aW9uID0gZmFsc2U7CisgICAgc3FsRWRp dG9ySGFuZGxlciA9IGphc21pbmUuY3JlYXRlU3B5T2JqKAogICAgICAgICAnaGFuZGxlcicsIFsn aW5pdFRyYW5zYWN0aW9uJywgJ3NhdmVTdGF0ZScsICdoYW5kbGVfY29ubmVjdGlvbl9sb3N0J10K ICAgICAgICk7Ci0gICAgICBleGNlcHRpb25TcHkgPSB7Ci0gICAgICAgIHJlYWR5U3RhdGU6IDAs Ci0gICAgICAgIHN0YXR1czogNDA0LAotICAgICAgICBkYXRhOiB7Ci0gICAgICAgICAgaW5mbzog J0NPTk5FQ1RJT05fTE9TVCcsCi0gICAgICAgIH0sCi0gICAgICB9OwotICAgICAgcGdCcm93c2Vy TW9jayA9IHsKLSAgICAgICAgJ0Jyb3dzZXInOiB7Ci0gICAgICAgICAgJ1VzZXJNYW5hZ2VtZW50 JzogamFzbWluZS5jcmVhdGVTcHlPYmooJ1VzZXJNYW5hZ2VtZW50JywgWydpc1BnYUxvZ2luUmVx dWlyZWQnLCAncGdhTG9naW4nXSkKLSAgICAgICAgfQotICAgICAgfTsKLSAgICB9KTsKKyAgICBl eGNlcHRpb25TcHkgPSB7CisgICAgICByZWFkeVN0YXRlOiAwLAorICAgICAgc3RhdHVzOiA0MDQs CisgICAgICBkYXRhOiB7CisgICAgICAgIGluZm86ICdDT05ORUNUSU9OX0xPU1QnLAorICAgICAg fSwKKyAgICB9OworICAgIHBnQnJvd3Nlck1vY2sgPSB7CisgICAgICAnQnJvd3Nlcic6IHsKKyAg ICAgICAgJ1VzZXJNYW5hZ2VtZW50JzogamFzbWluZS5jcmVhdGVTcHlPYmooJ1VzZXJNYW5hZ2Vt ZW50JywgWydpc1BnYUxvZ2luUmVxdWlyZWQnLCAncGdhTG9naW4nXSksCisgICAgICB9LAorICAg IH07CisgIH0pOwogCiAgIGRlc2NyaWJlKCd3aGVuIHJlYWR5IHN0YXRlIGlzIDAnLCAoKSA9PiB7 CiAgICAgaXQoJ3Nob3VsZCByZXR1cm4gY29ubmVjdGlvbicsICgpID0+IHsKQEAgLTE0OSw3ICsx NDksNyBAQCBkZXNjcmliZSgnI2hhbmRsZVF1ZXJ5VG9vbEFqYXhFcnJvcicsICgpID0+IHsKICAg ICAgIGV4Y2VwdGlvblNweS5yZWFkeVN0YXRlID0gMTsKICAgICAgIGV4Y2VwdGlvblNweS5zdGF0 dXMgPSA1MDM7CiAgICAgICBleGNlcHRpb25TcHkucmVzcG9uc2VKU09OID0gewotICAgICAgICAn aW5mbyc6ICdDT05ORUNUSU9OX0xPU1QnCisgICAgICAgICdpbmZvJzogJ0NPTk5FQ1RJT05fTE9T VCcsCiAgICAgICB9OwogICAgICAgcGdCcm93c2VyTW9jay5Ccm93c2VyLlVzZXJNYW5hZ2VtZW50 LmlzUGdhTG9naW5SZXF1aXJlZC5hbmQucmV0dXJuVmFsdWUoZmFsc2UpOwogICAgICAgY2hlY2tU cmFuc2FjdGlvbiA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlw dC90YWJsZS9lbmFibGVfZGlzYWJsZV90cmlnZ2Vyc19zcGVjLmpzIGIvd2ViL3JlZ3Jlc3Npb24v amF2YXNjcmlwdC90YWJsZS9lbmFibGVfZGlzYWJsZV90cmlnZ2Vyc19zcGVjLmpzCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi43NjdjNzhhNAotLS0gL2Rldi9udWxsCisrKyBi L3dlYi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvdGFibGUvZW5hYmxlX2Rpc2FibGVfdHJpZ2dlcnNf c3BlYy5qcwpAQCAtMCwwICsxLDI3MSBAQAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBvc3Rn cmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4LCBUaGUgcGdBZG1p biBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRo ZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitpbXBvcnQgTW9ja0FkYXB0ZXIgZnJv bSAnYXhpb3MtbW9jay1hZGFwdGVyJzsKK2ltcG9ydCBheGlvcyBmcm9tICdheGlvcy9pbmRleCc7 CitpbXBvcnQgeworICBlbmFibGVUcmlnZ2VycywKKyAgZGlzYWJsZVRyaWdnZXJzLAorfSBmcm9t ICcuLi8uLi8uLi9wZ2FkbWluL3N0YXRpYy9qcy90YWJsZS9lbmFibGVfZGlzYWJsZV90cmlnZ2Vy cyc7CitpbXBvcnQge1RyZWVGYWtlfSBmcm9tICcuLi90cmVlL3RyZWVfZmFrZSc7CitpbXBvcnQg e1RyZWVOb2RlfSBmcm9tICcuLi8uLi8uLi9wZ2FkbWluL3N0YXRpYy9qcy90cmVlL3RyZWUnOwor CitkZXNjcmliZSgnI2VuYWJsZVRyaWdnZXJzJywgKCkgPT4geworICBsZXQgbmV0d29ya01vY2s7 CisgIGxldCB0cmVlOworICBsZXQgYWxlcnRpZnk7CisgIGxldCBnZW5lcmF0ZVVybFNweTsKKyAg YmVmb3JlRWFjaCgoKSA9PiB7CisgICAgbmV0d29ya01vY2sgPSBuZXcgTW9ja0FkYXB0ZXIoYXhp b3MpOworICAgIHRyZWUgPSBuZXcgVHJlZUZha2UoKTsKKyAgICBjb25zdCBzZXJ2ZXIxID0gdHJl ZS5hZGROZXdOb2RlKCdzZXJ2ZXIxJywge19pZDogMX0sIFsnPGxpPnNlcnZlcjE8L2xpPiddKTsK KyAgICBjb25zdCBkYXRhYmFzZTEgPSB0cmVlLmFkZE5ld05vZGUoJ2RhdGFiYXNlMScsIHtfdHlw ZTogJ2RhdGFiYXNlJ30sIFsnPGxpPmRhdGFiYXNlMTwvbGk+J10pOworICAgIHRyZWUuYWRkQ2hp bGQoc2VydmVyMSwgZGF0YWJhc2UxKTsKKworICAgIGNvbnN0IHNjaGVtYTEgPSB0cmVlLmFkZE5l d05vZGUoJ3NjaGVtYTEnLCB7X3R5cGU6ICdzY2hlbWEnfSwgWyc8bGk+c2NoZW1hMTwvbGk+J10p OworICAgIHRyZWUuYWRkQ2hpbGQoZGF0YWJhc2UxLCBzY2hlbWExKTsKKworICAgIGNvbnN0IHRh YmxlMSA9IHRyZWUuYWRkTmV3Tm9kZSgndGFibGUxJywge190eXBlOiAndGFibGUnfSwgWyc8bGk+ dGFibGUxPC9saT4nXSk7CisgICAgdHJlZS5hZGRDaGlsZChzY2hlbWExLCB0YWJsZTEpOworCisg ICAgY29uc3QgY29sdW1uMSA9IHRyZWUuYWRkTmV3Tm9kZSgnY29sdW1uMScsIHtfdHlwZTogJ2Nv bHVtbid9LCBbJzxsaT5jb2x1bW4xPC9saT4nXSk7CisgICAgdHJlZS5hZGRDaGlsZCh0YWJsZTEs IGNvbHVtbjEpOworCisgICAgY29uc3QgdGFibGVOb0RhdGEgPSB0cmVlLmFkZE5ld05vZGUoJ3Rh YmxlLW5vLWRhdGEnLCB1bmRlZmluZWQsIFsnPGxpPnRhYmxlLW5vLWRhdGE8L2xpPiddKTsKKyAg ICB0cmVlLmFkZENoaWxkKHNjaGVtYTEsIHRhYmxlTm9EYXRhKTsKKworICAgIGFsZXJ0aWZ5ID0g amFzbWluZS5jcmVhdGVTcHlPYmooJ2FsZXJ0aWZ5JywgWydzdWNjZXNzJywgJ2Vycm9yJ10pOwor ICAgIGdlbmVyYXRlVXJsU3B5ID0gamFzbWluZS5jcmVhdGVTcHkoJ2dlbmVyYXRlVXJsJyk7Cisg ICAgZ2VuZXJhdGVVcmxTcHkuYW5kLnJldHVyblZhbHVlKCcvc29tZS9wbGFjZScpOworICB9KTsK KworICBkZXNjcmliZSgnbm8gbm9kZSBpcyBzZWxlY3RlZCcsICgpID0+IHsKKyAgICBpdCgnZG9l cyBub3Qgc2VuZCB0aGUgcmVxdWVzdCB0byB0aGUgYmFja2VuZCcsIChkb25lKSA9PiB7CisgICAg ICBuZXR3b3JrTW9jay5vbkFueSgnLionKS5yZXBseSgyMDAsICgpID0+IHsKKyAgICAgIH0pOwor CisgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgZXhwZWN0KGVuYWJsZVRyaWdnZXJz KHRyZWUsIGFsZXJ0aWZ5LCBnZW5lcmF0ZVVybFNweSwge30pKS50b0JlKGZhbHNlKTsKKyAgICAg ICAgZG9uZSgpOworICAgICAgfSwgMCk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2NyaWJlKCdh IG5vZGUgaXMgc2VsZWN0ZWQnLCAoKSA9PiB7CisgICAgZGVzY3JpYmUoJ25vZGUgYXMgbm8gZGF0 YScsICgpID0+IHsKKyAgICAgIGl0KCdkb2VzIG5vdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBi YWNrZW5kJywgKCkgPT4geworICAgICAgICB0cmVlLnNlbGVjdE5vZGUoW3tpZDogJ3RhYmxlLW5v LWRhdGEnfV0pOworCisgICAgICAgIG5ldHdvcmtNb2NrLm9uQW55KCcuKicpLnJlcGx5KDIwMCwg KCkgPT4geworICAgICAgICB9KTsKKworICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAg ICAgICBleHBlY3QoZW5hYmxlVHJpZ2dlcnModHJlZSwgYWxlcnRpZnksIGdlbmVyYXRlVXJsU3B5 LCB7fSkpLnRvQmUoZmFsc2UpOworICAgICAgICB9LCAwKTsKKyAgICAgIH0pOworICAgIH0pOwor CisgICAgZGVzY3JpYmUoJ25vZGUgYXMgIGRhdGEnLCAoKSA9PiB7CisgICAgICBkZXNjcmliZSgn YmFja2VuZCByZXNwb25kcyB3aXRoIHN1Y2Nlc3MnLCAoKSA9PiB7CisgICAgICAgIGxldCBuZXR3 b3JrTW9ja0NhbGxlZFdpdGg7CisgICAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICAg IG5ldHdvcmtNb2NrQ2FsbGVkV2l0aCA9IGZhbHNlOworICAgICAgICAgIG5ldHdvcmtNb2NrLm9u UHV0KC8uKi8pLnJlcGx5KChjb25maWd1cmF0aW9uKSA9PiB7CisgICAgICAgICAgICBuZXR3b3Jr TW9ja0NhbGxlZFdpdGggPSBjb25maWd1cmF0aW9uOworICAgICAgICAgICAgcmV0dXJuIFsyMDAs IHsKKyAgICAgICAgICAgICAgc3VjY2VzczogMSwKKyAgICAgICAgICAgICAgaW5mbzogJ3NvbWUg aW5mb3JtYXRpb24nLAorICAgICAgICAgICAgfV07CisgICAgICAgICAgfSk7CisgICAgICAgIH0p OworCisgICAgICAgIGl0KCdkaXNwbGF5cyBhbiBhbGVydCBib3ggd2l0aCBzdWNjZXNzJywgKGRv bmUpID0+IHsKKyAgICAgICAgICB0cmVlLnNlbGVjdE5vZGUoW3tpZDogJ3RhYmxlMSd9XSk7Cisg ICAgICAgICAgZW5hYmxlVHJpZ2dlcnModHJlZSwgYWxlcnRpZnksIGdlbmVyYXRlVXJsU3B5LCB7 fSk7CisgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CisgICAgICAgICAgICBleHBlY3QoYWxl cnRpZnkuc3VjY2VzcykudG9IYXZlQmVlbkNhbGxlZFdpdGgoJ3NvbWUgaW5mb3JtYXRpb24nKTsK KyAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfSk7CisKKyAg ICAgICAgaXQoJ3JlbG9hZHMgdGhlIG5vZGUnLCAoZG9uZSkgPT4geworICAgICAgICAgIGVuYWJs ZVRyaWdnZXJzKHRyZWUsIGFsZXJ0aWZ5LCBnZW5lcmF0ZVVybFNweSwge2l0ZW06IFt7aWQ6ICd0 YWJsZTEnfV19KTsKKyAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgIGV4 cGVjdCh0cmVlLnNlbGVjdGVkKCkpLnRvRXF1YWwoWyc8bGk+dGFibGUxPC9saT4nXSk7CisgICAg ICAgICAgICBkb25lKCk7CisgICAgICAgICAgfSwgMjApOworICAgICAgICB9KTsKKworICAgICAg ICBpdCgnY2FsbCBiYWNrZW5kIHdpdGggdGhlIGNvcnJlY3QgcGFyYW1ldGVycycsIChkb25lKSA9 PiB7CisgICAgICAgICAgZW5hYmxlVHJpZ2dlcnModHJlZSwgYWxlcnRpZnksIGdlbmVyYXRlVXJs U3B5LCB7aXRlbTogW3tpZDogJ3RhYmxlMSd9XX0pOworICAgICAgICAgIHNldFRpbWVvdXQoKCkg PT4geworICAgICAgICAgICAgZXhwZWN0KG5ldHdvcmtNb2NrQ2FsbGVkV2l0aC5kYXRhKS50b0Vx dWFsKEpTT04uc3RyaW5naWZ5KHtlbmFibGU6ICd0cnVlJ30pKTsKKyAgICAgICAgICAgIGRvbmUo KTsKKyAgICAgICAgICB9LCAwKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKworICAgICAgZGVz Y3JpYmUoJ2JhY2tlbmQgcmVzcG9uZHMgd2l0aCBlcnJvcicsICgpID0+IHsKKyAgICAgICAgYmVm b3JlRWFjaCgoKSA9PiB7CisgICAgICAgICAgbmV0d29ya01vY2sub25QdXQoLy4qLykucmVwbHko KCkgPT4geworICAgICAgICAgICAgcmV0dXJuIFs1MDAsIHsKKyAgICAgICAgICAgICAgc3VjY2Vz czogMCwKKyAgICAgICAgICAgICAgZXJyb3Jtc2c6ICdzb21lIGVycm9yIG1lc3NhZ2UnLAorICAg ICAgICAgICAgfV07CisgICAgICAgICAgfSk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCdk aXNwbGF5cyBhbiBlcnJvciBhbGVydCcsIChkb25lKSA9PiB7CisgICAgICAgICAgdHJlZS5zZWxl Y3ROb2RlKFt7aWQ6ICd0YWJsZTEnfV0pOworICAgICAgICAgIGVuYWJsZVRyaWdnZXJzKHRyZWUs IGFsZXJ0aWZ5LCBnZW5lcmF0ZVVybFNweSwge30pOworICAgICAgICAgIHNldFRpbWVvdXQoKCkg PT4geworICAgICAgICAgICAgZXhwZWN0KGFsZXJ0aWZ5LmVycm9yKS50b0hhdmVCZWVuQ2FsbGVk V2l0aCgnc29tZSBlcnJvciBtZXNzYWdlJyk7CisgICAgICAgICAgICBkb25lKCk7CisgICAgICAg ICAgfSwgMCk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCd1bmxvYWQgdGhlIG5vZGUnLCAo ZG9uZSkgPT4geworICAgICAgICAgIGVuYWJsZVRyaWdnZXJzKHRyZWUsIGFsZXJ0aWZ5LCBnZW5l cmF0ZVVybFNweSwge2l0ZW06IFt7aWQ6ICd0YWJsZTEnfV19KTsKKworICAgICAgICAgIHNldFRp bWVvdXQoKCkgPT4geworICAgICAgICAgICAgZXhwZWN0KHRyZWUuZmluZE5vZGVCeURvbUVsZW1l bnQoW3tpZDogJ3RhYmxlMSd9XSkuY2hpbGRyZW4ubGVuZ3RoKS50b0JlKDApOworICAgICAgICAg ICAgZG9uZSgpOworICAgICAgICAgIH0sIDIwKTsKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAg ICB9KTsKKyAgfSk7Cit9KTsKKworZGVzY3JpYmUoJyNkaXNhYmxlVHJpZ2dlcnMnLCAoKSA9PiB7 CisgIGxldCBuZXR3b3JrTW9jazsKKyAgbGV0IHRyZWU7CisgIGxldCBhbGVydGlmeTsKKyAgbGV0 IGdlbmVyYXRlVXJsU3B5OworICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICBuZXR3b3JrTW9jayA9 IG5ldyBNb2NrQWRhcHRlcihheGlvcyk7CisgICAgdHJlZSA9IG5ldyBUcmVlRmFrZSgpOworICAg IGNvbnN0IHNlcnZlcjEgPSB0cmVlLmFkZE5ld05vZGUoJ3NlcnZlcjEnLCB7X2lkOiAxfSwgWyc8 bGk+c2VydmVyMTwvbGk+J10pOworICAgIGNvbnN0IGRhdGFiYXNlMSA9IG5ldyBUcmVlTm9kZSgn ZGF0YWJhc2UxJywge190eXBlOiAnZGF0YWJhc2UnfSwgWyc8bGk+ZGF0YWJhc2UxPC9saT4nXSk7 CisgICAgdHJlZS5hZGRDaGlsZChzZXJ2ZXIxLCBkYXRhYmFzZTEpOworCisgICAgY29uc3Qgc2No ZW1hMSA9IG5ldyBUcmVlTm9kZSgnc2NoZW1hMScsIHtfdHlwZTogJ3NjaGVtYSd9LCBbJzxsaT5z Y2hlbWExPC9saT4nXSk7CisgICAgdHJlZS5hZGRDaGlsZChkYXRhYmFzZTEsIHNjaGVtYTEpOwor CisgICAgY29uc3QgdGFibGUxID0gbmV3IFRyZWVOb2RlKCd0YWJsZTEnLCB7X3R5cGU6ICd0YWJs ZSd9LCBbJzxsaT50YWJsZTE8L2xpPiddKTsKKyAgICB0cmVlLmFkZENoaWxkKHNjaGVtYTEsIHRh YmxlMSk7CisKKyAgICBjb25zdCBjb2x1bW4xID0gbmV3IFRyZWVOb2RlKCdjb2x1bW4xJywge190 eXBlOiAnY29sdW1uJ30sIFsnPGxpPmNvbHVtbjE8L2xpPiddKTsKKyAgICB0cmVlLmFkZENoaWxk KHRhYmxlMSwgY29sdW1uMSk7CisKKyAgICBjb25zdCB0YWJsZU5vRGF0YSA9IG5ldyBUcmVlTm9k ZSgndGFibGUtbm8tZGF0YScsIHVuZGVmaW5lZCwgWyc8bGk+dGFibGUtbm8tZGF0YTwvbGk+J10p OworICAgIHRyZWUuYWRkQ2hpbGQoc2NoZW1hMSwgdGFibGVOb0RhdGEpOworCisgICAgYWxlcnRp ZnkgPSBqYXNtaW5lLmNyZWF0ZVNweU9iaignYWxlcnRpZnknLCBbJ3N1Y2Nlc3MnLCAnZXJyb3In XSk7CisgICAgZ2VuZXJhdGVVcmxTcHkgPSBqYXNtaW5lLmNyZWF0ZVNweSgnZ2VuZXJhdGVVcmwn KTsKKyAgICBnZW5lcmF0ZVVybFNweS5hbmQucmV0dXJuVmFsdWUoJy9zb21lL3BsYWNlJyk7Cisg IH0pOworCisgIGRlc2NyaWJlKCdubyBub2RlIGlzIHNlbGVjdGVkJywgKCkgPT4geworICAgIGl0 KCdkb2VzIG5vdCBzZW5kIHRoZSByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kJywgKGRvbmUpID0+IHsK KyAgICAgIG5ldHdvcmtNb2NrLm9uQW55KCcuKicpLnJlcGx5KDIwMCwgKCkgPT4geworICAgICAg fSk7CisKKyAgICAgIHNldFRpbWVvdXQoKCkgPT4geworICAgICAgICBleHBlY3QoZGlzYWJsZVRy aWdnZXJzKHRyZWUsIGFsZXJ0aWZ5LCBnZW5lcmF0ZVVybFNweSwge30pKS50b0JlKGZhbHNlKTsK KyAgICAgICAgZG9uZSgpOworICAgICAgfSwgMCk7CisgICAgfSk7CisgIH0pOworCisgIGRlc2Ny aWJlKCdhIG5vZGUgaXMgc2VsZWN0ZWQnLCAoKSA9PiB7CisgICAgZGVzY3JpYmUoJ25vZGUgYXMg bm8gZGF0YScsICgpID0+IHsKKyAgICAgIGl0KCdkb2VzIG5vdCBzZW5kIHRoZSByZXF1ZXN0IHRv IHRoZSBiYWNrZW5kJywgKCkgPT4geworICAgICAgICB0cmVlLnNlbGVjdE5vZGUoW3tpZDogJ3Rh YmxlLW5vLWRhdGEnfV0pOworCisgICAgICAgIG5ldHdvcmtNb2NrLm9uQW55KCcuKicpLnJlcGx5 KDIwMCwgKCkgPT4geworICAgICAgICB9KTsKKworICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsK KyAgICAgICAgICBleHBlY3QoZGlzYWJsZVRyaWdnZXJzKHRyZWUsIGFsZXJ0aWZ5LCBnZW5lcmF0 ZVVybFNweSwge30pKS50b0JlKGZhbHNlKTsKKyAgICAgICAgfSwgMCk7CisgICAgICB9KTsKKyAg ICB9KTsKKworICAgIGRlc2NyaWJlKCdub2RlIGFzICBkYXRhJywgKCkgPT4geworICAgICAgZGVz Y3JpYmUoJ2JhY2tlbmQgcmVzcG9uZHMgd2l0aCBzdWNjZXNzJywgKCkgPT4geworICAgICAgICBs ZXQgbmV0d29ya01vY2tDYWxsZWRXaXRoOworICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAg ICAgICAgICBuZXR3b3JrTW9ja0NhbGxlZFdpdGggPSBmYWxzZTsKKyAgICAgICAgICBuZXR3b3Jr TW9jay5vblB1dCgvLiovKS5yZXBseSgoY29uZmlndXJhdGlvbikgPT4geworICAgICAgICAgICAg bmV0d29ya01vY2tDYWxsZWRXaXRoID0gY29uZmlndXJhdGlvbjsKKyAgICAgICAgICAgIHJldHVy biBbMjAwLCB7CisgICAgICAgICAgICAgIHN1Y2Nlc3M6IDEsCisgICAgICAgICAgICAgIGluZm86 ICdzb21lIGluZm9ybWF0aW9uJywKKyAgICAgICAgICAgIH1dOworICAgICAgICAgIH0pOworICAg ICAgICB9KTsKKworICAgICAgICBpdCgnZGlzcGxheXMgYW4gYWxlcnQgYm94IHdpdGggc3VjY2Vz cycsIChkb25lKSA9PiB7CisgICAgICAgICAgdHJlZS5zZWxlY3ROb2RlKFt7aWQ6ICd0YWJsZTEn fV0pOworICAgICAgICAgIGRpc2FibGVUcmlnZ2Vycyh0cmVlLCBhbGVydGlmeSwgZ2VuZXJhdGVV cmxTcHksIHt9KTsKKyAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgIGV4 cGVjdChhbGVydGlmeS5zdWNjZXNzKS50b0hhdmVCZWVuQ2FsbGVkV2l0aCgnc29tZSBpbmZvcm1h dGlvbicpOworICAgICAgICAgICAgZG9uZSgpOworICAgICAgICAgIH0sIDApOworICAgICAgICB9 KTsKKworICAgICAgICBpdCgncmVsb2FkcyB0aGUgbm9kZScsIChkb25lKSA9PiB7CisgICAgICAg ICAgZGlzYWJsZVRyaWdnZXJzKHRyZWUsIGFsZXJ0aWZ5LCBnZW5lcmF0ZVVybFNweSwge2l0ZW06 IFt7aWQ6ICd0YWJsZTEnfV19KTsKKyAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAg ICAgICAgIGV4cGVjdCh0cmVlLnNlbGVjdGVkKCkpLnRvRXF1YWwoWyc8bGk+dGFibGUxPC9saT4n XSk7CisgICAgICAgICAgICBkb25lKCk7CisgICAgICAgICAgfSwgMjApOworICAgICAgICB9KTsK KworICAgICAgICBpdCgnY2FsbCBiYWNrZW5kIHdpdGggdGhlIGNvcnJlY3QgcGFyYW1ldGVycycs IChkb25lKSA9PiB7CisgICAgICAgICAgZGlzYWJsZVRyaWdnZXJzKHRyZWUsIGFsZXJ0aWZ5LCBn ZW5lcmF0ZVVybFNweSwge2l0ZW06IFt7aWQ6ICd0YWJsZTEnfV19KTsKKyAgICAgICAgICBzZXRU aW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgIGV4cGVjdChuZXR3b3JrTW9ja0NhbGxlZFdpdGgu ZGF0YSkudG9FcXVhbChKU09OLnN0cmluZ2lmeSh7ZW5hYmxlOiAnZmFsc2UnfSkpOworICAgICAg ICAgICAgZG9uZSgpOworICAgICAgICAgIH0sIDApOworICAgICAgICB9KTsKKyAgICAgIH0pOwor CisgICAgICBkZXNjcmliZSgnYmFja2VuZCByZXNwb25kcyB3aXRoIGVycm9yJywgKCkgPT4gewor ICAgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgICBuZXR3b3JrTW9jay5vblB1dCgv LiovKS5yZXBseSgoKSA9PiB7CisgICAgICAgICAgICByZXR1cm4gWzUwMCwgeworICAgICAgICAg ICAgICBzdWNjZXNzOiAwLAorICAgICAgICAgICAgICBlcnJvcm1zZzogJ3NvbWUgZXJyb3IgbWVz c2FnZScsCisgICAgICAgICAgICB9XTsKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisKKyAg ICAgICAgaXQoJ2Rpc3BsYXlzIGFuIGVycm9yIGFsZXJ0JywgKGRvbmUpID0+IHsKKyAgICAgICAg ICB0cmVlLnNlbGVjdE5vZGUoW3tpZDogJ3RhYmxlMSd9XSk7CisgICAgICAgICAgZGlzYWJsZVRy aWdnZXJzKHRyZWUsIGFsZXJ0aWZ5LCBnZW5lcmF0ZVVybFNweSwge30pOworICAgICAgICAgIHNl dFRpbWVvdXQoKCkgPT4geworICAgICAgICAgICAgZXhwZWN0KGFsZXJ0aWZ5LmVycm9yKS50b0hh dmVCZWVuQ2FsbGVkV2l0aCgnc29tZSBlcnJvciBtZXNzYWdlJyk7CisgICAgICAgICAgICBkb25l KCk7CisgICAgICAgICAgfSwgMCk7CisgICAgICAgIH0pOworCisgICAgICAgIGl0KCd1bmxvYWQg dGhlIG5vZGUnLCAoZG9uZSkgPT4geworICAgICAgICAgIGRpc2FibGVUcmlnZ2Vycyh0cmVlLCBh bGVydGlmeSwgZ2VuZXJhdGVVcmxTcHksIHtpdGVtOiBbe2lkOiAndGFibGUxJ31dfSk7CisKKyAg ICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKKyAgICAgICAgICAgIGV4cGVjdCh0cmVlLmZpbmRO b2RlQnlEb21FbGVtZW50KFt7aWQ6ICd0YWJsZTEnfV0pLmNoaWxkcmVuLmxlbmd0aCkudG9CZSgw KTsKKyAgICAgICAgICAgIGRvbmUoKTsKKyAgICAgICAgICB9LCAyMCk7CisgICAgICAgIH0pOwor ICAgICAgfSk7CisgICAgfSk7CisgIH0pOworfSk7CmRpZmYgLS1naXQgYS93ZWIvcmVncmVzc2lv bi9qYXZhc2NyaXB0L3RyZWUvcGdhZG1pbl90cmVlX25vZGVfc3BlYy5qcyBiL3dlYi9yZWdyZXNz aW9uL2phdmFzY3JpcHQvdHJlZS9wZ2FkbWluX3RyZWVfbm9kZV9zcGVjLmpzCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi40NzllNTE1YwotLS0gL2Rldi9udWxsCisrKyBiL3dl Yi9yZWdyZXNzaW9uL2phdmFzY3JpcHQvdHJlZS9wZ2FkbWluX3RyZWVfbm9kZV9zcGVjLmpzCkBA IC0wLDAgKzEsMzUzIEBACisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8KKy8vIHBnQWRtaW4gNCAtIFBv c3RncmVTUUwgVG9vbHMKKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE4LCBUaGUgcGdB ZG1pbiBEZXZlbG9wbWVudCBUZWFtCisvLyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVy IHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKKy8vCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCitpbXBvcnQg eworICBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21FbGVtZW50LAorICBnZXRUcmVlTm9kZUhpZXJh cmNoeUZyb21JZGVudGlmaWVyLAorfSBmcm9tICcuLi8uLi8uLi9wZ2FkbWluL3N0YXRpYy9qcy90 cmVlL3BnYWRtaW5fdHJlZV9ub2RlJzsKK2ltcG9ydCB7VHJlZU5vZGV9IGZyb20gJy4uLy4uLy4u L3BnYWRtaW4vc3RhdGljL2pzL3RyZWUvdHJlZSc7CitpbXBvcnQge1RyZWVGYWtlfSBmcm9tICcu L3RyZWVfZmFrZSc7CisKK2NvbnN0IGNvbnRleHQgPSBkZXNjcmliZTsKKworZGVzY3JpYmUoJ3Ry ZWUjbm9kZSNnZXRUcmVlTm9kZUhpZXJhcmNoeScsICgpID0+IHsKKyAgbGV0IGJyb3dzZXI7Cisg IGxldCBuZXdUcmVlOworICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICBuZXdUcmVlID0gbmV3IFRy ZWVGYWtlKCk7CisgICAgYnJvd3NlciA9IHsKKyAgICAgIE5vZGVzOiB7CisgICAgICAgICdzcGVj aWFsIG9uZSc6IHtoYXNJZDogdHJ1ZX0sCisgICAgICAgICdjaGlsZCBzcGVjaWFsJzoge2hhc0lk OiB0cnVlfSwKKyAgICAgICAgJ290aGVyIHR5cGUnOiB7aGFzSWQ6IHRydWV9LAorICAgICAgICAn dGFibGUnOiB7aGFzSWQ6IHRydWV9LAorICAgICAgICAncGFydGl0aW9uJzoge2hhc0lkOiB0cnVl fSwKKyAgICAgICAgJ25vIGlkJzoge2hhc0lkOiBmYWxzZX0sCisgICAgICB9LAorICAgIH07Cisg ICAgYnJvd3Nlci50cmVlTWVudSA9IG5ld1RyZWU7CisgIH0pOworCisgIGNvbnRleHQoJ2dldFRy ZWVOb2RlSGllcmFyY2h5IGlzIGNhbGxlZCB3aXRoIGFjaVRyZWVOb2RlIG9iamVjdCcsICgpID0+ IHsKKyAgICBkZXNjcmliZSgnV2hlbiB0aGUgY3VycmVudCBub2RlIGlzIHJvb3QgZWxlbWVudCcs ICgpID0+IHsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICBuZXdUcmVlLmFkZE5l d05vZGUoJ3Jvb3QnLCB7CisgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAg ICAgICAgICdfdHlwZSc6ICdzcGVjaWFsIG9uZScsCisgICAgICAgIH0pOworICAgICAgfSk7CisK KyAgICAgIGl0KCdyZXR1cm5zIGEgb2JqZWN0IHdpdGggdGhlIGVsZW1lbnQgdHlwZSBwYXNzZWQg ZGF0YSBhbmQgcHJpb3JpdHkgPT0gMCcsICgpID0+IHsKKyAgICAgICAgY29uc3QgcmVzdWx0ID0g Z2V0VHJlZU5vZGVIaWVyYXJjaHlGcm9tSWRlbnRpZmllci5iaW5kKGJyb3dzZXIpKFt7aWQ6ICdy b290J31dKTsKKyAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7CisgICAgICAgICAgJ3Nw ZWNpYWwgb25lJzogeworICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAg ICAgICAgICAgJ190eXBlJzogJ3NwZWNpYWwgb25lJywKKyAgICAgICAgICAgICdwcmlvcml0eSc6 IDAsCisgICAgICAgICAgfSwKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAg IGRlc2NyaWJlKCdXaGVuIHRoZSBjdXJyZW50IG5vZGUgaXMgbm90IG9mIGEga25vd24gdHlwZScs ICgpID0+IHsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICBuZXdUcmVlLmFkZE5l d05vZGUoJ3Jvb3QnLCB7CisgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAg ICAgICAgICdfdHlwZSc6ICdkbyBub3QgZXhpc3QnLAorICAgICAgICB9LCBbXSk7CisgICAgICB9 KTsKKworICAgICAgaXQoJ3JldHVybnMgYSBlbXB0eSBvYmplY3QnLCAoKSA9PiB7CisgICAgICAg IGNvbnN0IHJlc3VsdCA9IGdldFRyZWVOb2RlSGllcmFyY2h5RnJvbUlkZW50aWZpZXIuYmluZChi cm93c2VyKSgncm9vdCcpOworICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHt9KTsKKyAg ICAgIH0pOworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ1doZW4gdGhlIGN1cnJlbnQgbm9kZSB0 eXBlIGhhcyBubyBpZCcsICgpID0+IHsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAg ICBuZXdUcmVlLmFkZE5ld05vZGUoJ3Jvb3QnLCB7CisgICAgICAgICAgJ3NvbWUga2V5JzogJ3Nv bWUgdmFsdWUnLAorICAgICAgICAgICdfdHlwZSc6ICdubyBpZCcsCisgICAgICAgIH0sIFtdKTsK KyAgICAgIH0pOworCisgICAgICBpdCgncmV0dXJucyBhIGVtcHR5IG9iamVjdCcsICgpID0+IHsK KyAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHJlZU5vZGVIaWVyYXJjaHlGcm9tSWRlbnRpZmll ci5iaW5kKGJyb3dzZXIpKCdyb290Jyk7CisgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwo e30pOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICBkZXNjcmliZSgnV2hlbiB0aGUgY3VycmVu dCBub2RlIGlzIGF0IHRoZSBzZWNvbmQgbGV2ZWwnLCAoKSA9PiB7CisgICAgICBiZWZvcmVFYWNo KCgpID0+IHsKKyAgICAgICAgY29uc3Qgcm9vdCA9IG5ld1RyZWUuYWRkTmV3Tm9kZSgncm9vdCcs IHsKKyAgICAgICAgICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisgICAgICAgICAgJ190eXBl JzogJ3NwZWNpYWwgb25lJywKKyAgICAgICAgfSk7CisgICAgICAgIGNvbnN0IGZpcnN0Q2hpbGQg PSBuZXcgVHJlZU5vZGUoJ2ZpcnN0IGNoaWxkJywgeworICAgICAgICAgICdzb21lIGtleSc6ICdz b21lIG90aGVyIHZhbHVlJywKKyAgICAgICAgICAnX3R5cGUnOiAnY2hpbGQgc3BlY2lhbCcsCisg ICAgICAgIH0sIFsncm9vdCddKTsKKyAgICAgICAgbmV3VHJlZS5hZGRDaGlsZChyb290LCBmaXJz dENoaWxkKTsKKyAgICAgIH0pOworCisgICAgICBpdCgncmV0dXJucyBhIGVtcHR5IG9iamVjdCcs ICgpID0+IHsKKyAgICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHJlZU5vZGVIaWVyYXJjaHlGcm9t SWRlbnRpZmllci5iaW5kKGJyb3dzZXIpKFt7aWQ6ICdmaXJzdCBjaGlsZCd9XSk7CisgICAgICAg IGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeworICAgICAgICAgICdjaGlsZCBzcGVjaWFsJzogewor ICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgb3RoZXIgdmFsdWUnLAorICAgICAgICAgICAg J190eXBlJzogJ2NoaWxkIHNwZWNpYWwnLAorICAgICAgICAgICAgJ3ByaW9yaXR5JzogMCwKKyAg ICAgICAgICB9LAorICAgICAgICAgICdzcGVjaWFsIG9uZSc6IHsKKyAgICAgICAgICAgICdzb21l IGtleSc6ICdzb21lIHZhbHVlJywKKyAgICAgICAgICAgICdfdHlwZSc6ICdzcGVjaWFsIG9uZScs CisgICAgICAgICAgICAncHJpb3JpdHknOiAtMSwKKyAgICAgICAgICB9LAorICAgICAgICB9KTsK KyAgICAgIH0pOworICAgIH0pOworCisgICAgY29udGV4dCgnV2hlbiB0cmVlIGFzICJzcGVjaWFs IHR5cGUiJywgKCkgPT4geworICAgICAgY29udGV4dCgnV2hlbiAic3BlY2lhbCB0eXBlIiBoYXZl ICJvdGhlciB0eXBlIicsICgpID0+IHsKKyAgICAgICAgY29udGV4dCgnV2hlbiAib3RoZXIgdHlw ZSIgaGF2ZSAic3BlY2lhbCB0eXBlIicsICgpID0+IHsKKyAgICAgICAgICBkZXNjcmliZSgnV2hl biByZXRyaWV2aW5nIGxlYWQgbm9kZScsICgpID0+IHsKKyAgICAgICAgICAgIGl0KCdkb2VzIG5v dCBvdmVycmlkZSBwcmV2aW91cyBub2RlIHR5cGUgZGF0YScsICgpID0+IHsKKyAgICAgICAgICAg ICAgY29uc3Qgcm9vdE5vZGUgPSBuZXdUcmVlLmFkZE5ld05vZGUoJ3Jvb3QnLCB7CisgICAgICAg ICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAgICAgICAgICAgICAgICdfdHlw ZSc6ICdzcGVjaWFsIG9uZScsCisgICAgICAgICAgICAgIH0sIFtdKTsKKworICAgICAgICAgICAg ICBjb25zdCBsZXZlbDEgPSBuZXcgVHJlZU5vZGUoJ2xldmVsIDEnLCB7CisgICAgICAgICAgICAg ICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAgICAgICAgICAgICAgICdfdHlwZSc6ICdv dGhlciB0eXBlJywKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgIG5ld1RyZWUuYWRk Q2hpbGQocm9vdE5vZGUsIGxldmVsMSk7CisKKyAgICAgICAgICAgICAgbmV3VHJlZS5hZGRDaGls ZChsZXZlbDEsIG5ldyBUcmVlTm9kZSgnbGV2ZWwgMicsIHsKKyAgICAgICAgICAgICAgICAnc29t ZSBrZXknOiAnZXhwZWN0ZWQgdmFsdWUnLAorICAgICAgICAgICAgICAgICdfdHlwZSc6ICdzcGVj aWFsIG9uZScsCisgICAgICAgICAgICAgICAgJ3NvbWUgb3RoZXIga2V5JzogJ3NvbWUgb3RoZXIg dmFsdWUnLAorICAgICAgICAgICAgICB9KSk7CisKKyAgICAgICAgICAgICAgY29uc3QgcmVzdWx0 ID0gZ2V0VHJlZU5vZGVIaWVyYXJjaHlGcm9tSWRlbnRpZmllci5iaW5kKGJyb3dzZXIpKFt7aWQ6 ICdsZXZlbCAyJ31dKTsKKyAgICAgICAgICAgICAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7Cisg ICAgICAgICAgICAgICAgJ3NwZWNpYWwgb25lJzogeworICAgICAgICAgICAgICAgICAgJ3NvbWUg a2V5JzogJ2V4cGVjdGVkIHZhbHVlJywKKyAgICAgICAgICAgICAgICAgICdfdHlwZSc6ICdzcGVj aWFsIG9uZScsCisgICAgICAgICAgICAgICAgICAnc29tZSBvdGhlciBrZXknOiAnc29tZSBvdGhl ciB2YWx1ZScsCisgICAgICAgICAgICAgICAgICAncHJpb3JpdHknOiAwLAorICAgICAgICAgICAg ICAgIH0sCisgICAgICAgICAgICAgICAgJ290aGVyIHR5cGUnOiB7CisgICAgICAgICAgICAgICAg ICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisgICAgICAgICAgICAgICAgICAnX3R5cGUnOiAn b3RoZXIgdHlwZScsCisgICAgICAgICAgICAgICAgICAncHJpb3JpdHknOiAtMSwKKyAgICAgICAg ICAgICAgICB9LAorICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg IH0pOworICAgICAgICB9KTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgY29udGV4dCgnV2hl biB0cmVlIGhhcyB0YWJsZScsICgpID0+IHsKKyAgICAgIGNvbnRleHQoJ3doZW4gdGFibGUgaGFz IHBhcnRpdGlvbicsICgpID0+IHsKKyAgICAgICAgaXQoJ3JldHVybnMgdGFibGUgd2l0aCBwYXJ0 aXRpb24gcGFyYW1ldGVycycsICgpID0+IHsKKyAgICAgICAgICBjb25zdCByb290ID0gbmV3VHJl ZS5hZGROZXdOb2RlKCdyb290JywgeworICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFs dWUnLAorICAgICAgICAgICAgJ190eXBlJzogJ3NwZWNpYWwgb25lJywKKyAgICAgICAgICB9LCBb XSk7CisgICAgICAgICAgY29uc3QgbGV2ZWwxID0gbmV3IFRyZWVOb2RlKCdsZXZlbCAxJywgewor ICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAgICAgICAgICAgJ190eXBl JzogJ3RhYmxlJywKKyAgICAgICAgICB9KTsKKyAgICAgICAgICBuZXdUcmVlLmFkZENoaWxkKHJv b3QsIGxldmVsMSk7CisgICAgICAgICAgbmV3VHJlZS5hZGRDaGlsZChsZXZlbDEsIG5ldyBUcmVl Tm9kZSgnbGV2ZWwgMicsIHsKKyAgICAgICAgICAgICdzb21lIGtleSc6ICdleHBlY3RlZCB2YWx1 ZScsCisgICAgICAgICAgICAnX3R5cGUnOiAncGFydGl0aW9uJywKKyAgICAgICAgICAgICdzb21l IG90aGVyIGtleSc6ICdzb21lIG90aGVyIHZhbHVlJywKKyAgICAgICAgICB9KSk7CisKKyAgICAg ICAgICBjb25zdCByZXN1bHQgPSBnZXRUcmVlTm9kZUhpZXJhcmNoeUZyb21JZGVudGlmaWVyLmJp bmQoYnJvd3NlcikoW3tpZDonbGV2ZWwgMid9XSk7CisgICAgICAgICAgZXhwZWN0KHJlc3VsdCku dG9FcXVhbCh7CisgICAgICAgICAgICAnc3BlY2lhbCBvbmUnOiB7CisgICAgICAgICAgICAgICdz b21lIGtleSc6ICdzb21lIHZhbHVlJywKKyAgICAgICAgICAgICAgJ190eXBlJzogJ3NwZWNpYWwg b25lJywKKyAgICAgICAgICAgICAgJ3ByaW9yaXR5JzogLTEsCisgICAgICAgICAgICB9LAorICAg ICAgICAgICAgJ3RhYmxlJzogeworICAgICAgICAgICAgICAnc29tZSBrZXknOiAnZXhwZWN0ZWQg dmFsdWUnLAorICAgICAgICAgICAgICAnc29tZSBvdGhlciBrZXknOiAnc29tZSBvdGhlciB2YWx1 ZScsCisgICAgICAgICAgICAgICdfdHlwZSc6ICdwYXJ0aXRpb24nLAorICAgICAgICAgICAgICAn cHJpb3JpdHknOiAwLAorICAgICAgICAgICAgfSwKKyAgICAgICAgICB9KTsKKyAgICAgICAgfSk7 CisgICAgICB9KTsKKyAgICB9KTsKKyAgfSk7CisKKyAgY29udGV4dCgnZ2V0VHJlZU5vZGVIaWVy YXJjaHkgaXMgY2FsbGVkIHdpdGggVHJlZU5vZGUgb2JqZWN0JywgKCkgPT4geworICAgIGxldCB0 cmVlTm9kZTsKKyAgICBkZXNjcmliZSgnV2hlbiB0aGUgY3VycmVudCBub2RlIGlzIHJvb3QgZWxl bWVudCcsICgpID0+IHsKKyAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICB0cmVlTm9k ZSA9IG5ld1RyZWUuYWRkTmV3Tm9kZSgncm9vdCcsIHsKKyAgICAgICAgICAnc29tZSBrZXknOiAn c29tZSB2YWx1ZScsCisgICAgICAgICAgJ190eXBlJzogJ3NwZWNpYWwgb25lJywKKyAgICAgICAg fSwgW10pOworICAgICAgfSk7CisKKyAgICAgIGl0KCdyZXR1cm5zIGEgb2JqZWN0IHdpdGggdGhl IGVsZW1lbnQgdHlwZSBwYXNzZWQgZGF0YSBhbmQgcHJpb3JpdHkgPT0gMCcsICgpID0+IHsKKyAg ICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0VHJlZU5vZGVIaWVyYXJjaHlGcm9tRWxlbWVudChicm93 c2VyLCB0cmVlTm9kZSk7CisgICAgICAgIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoeworICAgICAg ICAgICdzcGVjaWFsIG9uZSc6IHsKKyAgICAgICAgICAgICdzb21lIGtleSc6ICdzb21lIHZhbHVl JywKKyAgICAgICAgICAgICdfdHlwZSc6ICdzcGVjaWFsIG9uZScsCisgICAgICAgICAgICAncHJp b3JpdHknOiAwLAorICAgICAgICAgIH0sCisgICAgICAgIH0pOworICAgICAgfSk7CisgICAgfSk7 CisKKyAgICBkZXNjcmliZSgnV2hlbiB0aGUgY3VycmVudCBub2RlIGlzIG5vdCBvZiBhIGtub3du IHR5cGUnLCAoKSA9PiB7CisgICAgICBiZWZvcmVFYWNoKCgpID0+IHsKKyAgICAgICAgdHJlZU5v ZGUgPSBuZXdUcmVlLmFkZE5ld05vZGUoJ3Jvb3QnLCB7CisgICAgICAgICAgJ3NvbWUga2V5Jzog J3NvbWUgdmFsdWUnLAorICAgICAgICAgICdfdHlwZSc6ICdkbyBub3QgZXhpc3QnLAorICAgICAg ICB9LCBbXSk7CisgICAgICB9KTsKKworICAgICAgaXQoJ3JldHVybnMgYSBlbXB0eSBvYmplY3Qn LCAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFRyZWVOb2RlSGllcmFyY2h5RnJv bUVsZW1lbnQoYnJvd3NlciwgdHJlZU5vZGUpOworICAgICAgICBleHBlY3QocmVzdWx0KS50b0Vx dWFsKHt9KTsKKyAgICAgIH0pOworICAgIH0pOworCisgICAgZGVzY3JpYmUoJ1doZW4gdGhlIGN1 cnJlbnQgbm9kZSB0eXBlIGhhcyBubyBpZCcsICgpID0+IHsKKyAgICAgIGJlZm9yZUVhY2goKCkg PT4geworICAgICAgICB0cmVlTm9kZSA9IG5ld1RyZWUuYWRkTmV3Tm9kZSgncm9vdCcsIHsKKyAg ICAgICAgICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisgICAgICAgICAgJ190eXBlJzogJ25v IGlkJywKKyAgICAgICAgfSwgW10pOworICAgICAgfSk7CisKKyAgICAgIGl0KCdyZXR1cm5zIGEg ZW1wdHkgb2JqZWN0JywgKCkgPT4geworICAgICAgICBjb25zdCByZXN1bHQgPSBnZXRUcmVlTm9k ZUhpZXJhcmNoeUZyb21FbGVtZW50KGJyb3dzZXIsIHRyZWVOb2RlKTsKKyAgICAgICAgZXhwZWN0 KHJlc3VsdCkudG9FcXVhbCh7fSk7CisgICAgICB9KTsKKyAgICB9KTsKKworICAgIGRlc2NyaWJl KCdXaGVuIHRoZSBjdXJyZW50IG5vZGUgaXMgYXQgdGhlIHNlY29uZCBsZXZlbCcsICgpID0+IHsK KyAgICAgIGJlZm9yZUVhY2goKCkgPT4geworICAgICAgICBjb25zdCByb290ID0gbmV3VHJlZS5h ZGROZXdOb2RlKCdyb290JywgeworICAgICAgICAgICdzb21lIGtleSc6ICdzb21lIHZhbHVlJywK KyAgICAgICAgICAnX3R5cGUnOiAnc3BlY2lhbCBvbmUnLAorICAgICAgICB9LCBbXSk7CisgICAg ICAgIHRyZWVOb2RlID0gbmV3IFRyZWVOb2RlKCdmaXJzdCBjaGlsZCcsIHsKKyAgICAgICAgICAn c29tZSBrZXknOiAnc29tZSBvdGhlciB2YWx1ZScsCisgICAgICAgICAgJ190eXBlJzogJ2NoaWxk IHNwZWNpYWwnLAorICAgICAgICB9KTsKKyAgICAgICAgbmV3VHJlZS5hZGRDaGlsZChyb290LCB0 cmVlTm9kZSk7CisgICAgICB9KTsKKworICAgICAgaXQoJ3JldHVybnMgYSBlbXB0eSBvYmplY3Qn LCAoKSA9PiB7CisgICAgICAgIGNvbnN0IHJlc3VsdCA9IGdldFRyZWVOb2RlSGllcmFyY2h5RnJv bUVsZW1lbnQoYnJvd3NlciwgdHJlZU5vZGUpOworICAgICAgICBleHBlY3QocmVzdWx0KS50b0Vx dWFsKHsKKyAgICAgICAgICAnY2hpbGQgc3BlY2lhbCc6IHsKKyAgICAgICAgICAgICdzb21lIGtl eSc6ICdzb21lIG90aGVyIHZhbHVlJywKKyAgICAgICAgICAgICdfdHlwZSc6ICdjaGlsZCBzcGVj aWFsJywKKyAgICAgICAgICAgICdwcmlvcml0eSc6IDAsCisgICAgICAgICAgfSwKKyAgICAgICAg ICAnc3BlY2lhbCBvbmUnOiB7CisgICAgICAgICAgICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScs CisgICAgICAgICAgICAnX3R5cGUnOiAnc3BlY2lhbCBvbmUnLAorICAgICAgICAgICAgJ3ByaW9y aXR5JzogLTEsCisgICAgICAgICAgfSwKKyAgICAgICAgfSk7CisgICAgICB9KTsKKyAgICB9KTsK KworICAgIGNvbnRleHQoJ1doZW4gdHJlZSBhcyAic3BlY2lhbCB0eXBlIicsICgpID0+IHsKKyAg ICAgIGNvbnRleHQoJ1doZW4gInNwZWNpYWwgdHlwZSIgaGF2ZSAib3RoZXIgdHlwZSInLCAoKSA9 PiB7CisgICAgICAgIGNvbnRleHQoJ1doZW4gIm90aGVyIHR5cGUiIGhhdmUgInNwZWNpYWwgdHlw ZSInLCAoKSA9PiB7CisgICAgICAgICAgZGVzY3JpYmUoJ1doZW4gcmV0cmlldmluZyBsZWFkIG5v ZGUnLCAoKSA9PiB7CisgICAgICAgICAgICBpdCgnZG9lcyBub3Qgb3ZlcnJpZGUgcHJldmlvdXMg bm9kZSB0eXBlIGRhdGEnLCAoKSA9PiB7CisgICAgICAgICAgICAgIGNvbnN0IHJvb3QgPSBuZXdU cmVlLmFkZE5ld05vZGUoJ3Jvb3QnLCB7CisgICAgICAgICAgICAgICAgJ3NvbWUga2V5JzogJ3Nv bWUgdmFsdWUnLAorICAgICAgICAgICAgICAgICdfdHlwZSc6ICdzcGVjaWFsIG9uZScsCisgICAg ICAgICAgICAgIH0sIFtdKTsKKyAgICAgICAgICAgICAgY29uc3QgbGV2ZWwxID0gbmV3IFRyZWVO b2RlKCdsZXZlbCAxJywgeworICAgICAgICAgICAgICAgICdzb21lIGtleSc6ICdzb21lIHZhbHVl JywKKyAgICAgICAgICAgICAgICAnX3R5cGUnOiAnb3RoZXIgdHlwZScsCisgICAgICAgICAgICAg IH0pOworICAgICAgICAgICAgICBuZXdUcmVlLmFkZENoaWxkKHJvb3QsIGxldmVsMSk7CisgICAg ICAgICAgICAgIHRyZWVOb2RlID0gbmV3IFRyZWVOb2RlKCdsZXZlbCAyJywgeworICAgICAgICAg ICAgICAgICdzb21lIGtleSc6ICdleHBlY3RlZCB2YWx1ZScsCisgICAgICAgICAgICAgICAgJ190 eXBlJzogJ3NwZWNpYWwgb25lJywKKyAgICAgICAgICAgICAgICAnc29tZSBvdGhlciBrZXknOiAn c29tZSBvdGhlciB2YWx1ZScsCisgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICBuZXdU cmVlLmFkZENoaWxkKGxldmVsMSwgdHJlZU5vZGUpOworCisgICAgICAgICAgICAgIGNvbnN0IHJl c3VsdCA9IGdldFRyZWVOb2RlSGllcmFyY2h5RnJvbUVsZW1lbnQoYnJvd3NlciwgdHJlZU5vZGUp OworICAgICAgICAgICAgICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHsKKyAgICAgICAgICAgICAg ICAnc3BlY2lhbCBvbmUnOiB7CisgICAgICAgICAgICAgICAgICAnc29tZSBrZXknOiAnZXhwZWN0 ZWQgdmFsdWUnLAorICAgICAgICAgICAgICAgICAgJ190eXBlJzogJ3NwZWNpYWwgb25lJywKKyAg ICAgICAgICAgICAgICAgICdzb21lIG90aGVyIGtleSc6ICdzb21lIG90aGVyIHZhbHVlJywKKyAg ICAgICAgICAgICAgICAgICdwcmlvcml0eSc6IDAsCisgICAgICAgICAgICAgICAgfSwKKyAgICAg ICAgICAgICAgICAnb3RoZXIgdHlwZSc6IHsKKyAgICAgICAgICAgICAgICAgICdzb21lIGtleSc6 ICdzb21lIHZhbHVlJywKKyAgICAgICAgICAgICAgICAgICdfdHlwZSc6ICdvdGhlciB0eXBlJywK KyAgICAgICAgICAgICAgICAgICdwcmlvcml0eSc6IC0xLAorICAgICAgICAgICAgICAgIH0sCisg ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgfSk7CisgICAgICAg IH0pOworICAgICAgfSk7CisgICAgfSk7CisKKyAgICBjb250ZXh0KCdXaGVuIHRyZWUgaGFzIHRh YmxlJywgKCkgPT4geworICAgICAgY29udGV4dCgnd2hlbiB0YWJsZSBoYXMgcGFydGl0aW9uJywg KCkgPT4geworICAgICAgICBpdCgncmV0dXJucyB0YWJsZSB3aXRoIHBhcnRpdGlvbiBwYXJhbWV0 ZXJzJywgKCkgPT4geworICAgICAgICAgIGNvbnN0IHJvb3QgPSBuZXdUcmVlLmFkZE5ld05vZGUo J3Jvb3QnLCB7CisgICAgICAgICAgICAnc29tZSBrZXknOiAnc29tZSB2YWx1ZScsCisgICAgICAg ICAgICAnX3R5cGUnOiAnc3BlY2lhbCBvbmUnLAorICAgICAgICAgIH0pOworICAgICAgICAgIGNv bnN0IGxldmVsMSA9IG5ld1RyZWUuYWRkTmV3Tm9kZSgnbGV2ZWwgMScsIHsKKyAgICAgICAgICAg ICdzb21lIGtleSc6ICdzb21lIHZhbHVlJywKKyAgICAgICAgICAgICdfdHlwZSc6ICd0YWJsZScs CisgICAgICAgICAgfSk7CisgICAgICAgICAgbmV3VHJlZS5hZGRDaGlsZChyb290LCBsZXZlbDEp OworICAgICAgICAgIHRyZWVOb2RlID0gbmV3IFRyZWVOb2RlKCdsZXZlbCAyJywgeworICAgICAg ICAgICAgJ3NvbWUga2V5JzogJ2V4cGVjdGVkIHZhbHVlJywKKyAgICAgICAgICAgICdfdHlwZSc6 ICdwYXJ0aXRpb24nLAorICAgICAgICAgICAgJ3NvbWUgb3RoZXIga2V5JzogJ3NvbWUgb3RoZXIg dmFsdWUnLAorICAgICAgICAgIH0pOworICAgICAgICAgIG5ld1RyZWUuYWRkQ2hpbGQobGV2ZWwx LCB0cmVlTm9kZSk7CisKKyAgICAgICAgICBjb25zdCByZXN1bHQgPSBnZXRUcmVlTm9kZUhpZXJh cmNoeUZyb21FbGVtZW50KGJyb3dzZXIsIHRyZWVOb2RlKTsKKyAgICAgICAgICBleHBlY3QocmVz dWx0KS50b0VxdWFsKHsKKyAgICAgICAgICAgICdzcGVjaWFsIG9uZSc6IHsKKyAgICAgICAgICAg ICAgJ3NvbWUga2V5JzogJ3NvbWUgdmFsdWUnLAorICAgICAgICAgICAgICAnX3R5cGUnOiAnc3Bl Y2lhbCBvbmUnLAorICAgICAgICAgICAgICAncHJpb3JpdHknOiAtMSwKKyAgICAgICAgICAgIH0s CisgICAgICAgICAgICAndGFibGUnOiB7CisgICAgICAgICAgICAgICdzb21lIGtleSc6ICdleHBl Y3RlZCB2YWx1ZScsCisgICAgICAgICAgICAgICdzb21lIG90aGVyIGtleSc6ICdzb21lIG90aGVy IHZhbHVlJywKKyAgICAgICAgICAgICAgJ190eXBlJzogJ3BhcnRpdGlvbicsCisgICAgICAgICAg ICAgICdwcmlvcml0eSc6IDAsCisgICAgICAgICAgICB9LAorICAgICAgICAgIH0pOworICAgICAg ICB9KTsKKyAgICAgIH0pOworICAgIH0pOworICB9KTsKK30pOwotLSAKMi4xNi4yCgo= --0000000000001d3530056adbfecf--