Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dSKyA-0004vW-VH for pgadmin-hackers@arkaria.postgresql.org; Tue, 04 Jul 2017 10:22:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dSKyA-0006Qx-75 for pgadmin-hackers@arkaria.postgresql.org; Tue, 04 Jul 2017 10:22:10 +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.84_2) (envelope-from ) id 1dSKy9-0006Ql-2p for pgadmin-hackers@lists.postgresql.org; Tue, 04 Jul 2017 10:22:09 +0000 Received: from mail-pg0-x22c.google.com ([2607:f8b0:400e:c05::22c]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1dSKy3-0006ft-Tb for pgadmin-hackers@postgresql.org; Tue, 04 Jul 2017 10:22:07 +0000 Received: by mail-pg0-x22c.google.com with SMTP id u62so108258533pgb.3 for ; Tue, 04 Jul 2017 03:22:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=FMwDrbbKaWBL6UTkbGng2/XCrwbYO7BPNRtB9BMkU8M=; b=Wjy09W3DsZSeKWYtkJ8/lnpn5nH6P5AwSi1vTH6q2XhJw02FQ01V+3GkH89Gzu4nxi L14ZDPMXhPwlSSBDAegP+nuMSS1nNlBCMJk7IE+v9x8uTY/vfO1AiJP+EYYbphCck+8y HFDbZrrqQbzyFlQNj8jy8L1mo5bBaYtjVvYgwayVcWlv181uGinunxTanIiaio7s0ja8 BKpGjkwM/HYf1osmXUYz2DfTjdkZPMTga6865lPM4ebrzusgouz1xYWE8tF1Ftv2nqYH FGjCIUwffPhpvN76hOzYOmm1QwY9NpW68gs7t6kJvek/Mbcj8UVUfFlfD1VUg2g6/KLl cPvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=FMwDrbbKaWBL6UTkbGng2/XCrwbYO7BPNRtB9BMkU8M=; b=V7TzAFXSYm//T7VidqLQVIk29by24xD0z6P0HYH62kfYTlUPUzf7R+luheQF8Dd62X jZZpOo4504TVuUWPOx7TCUb24JwljzCEOWlhAu+Vp2QNTxaEGPePx8vpU7urnks2xgg8 JQgkwNOAHKWrvtMU8jrsJRDT33+DZh4NoARJoMe7nO3AJyx5LzbySaEMZzCajOmspEd7 FqH72YJVM7XYQUzwBqbogJ44+r8gmxNlUtlAwPts5dFL9ju6zDNpw1ULWDx9tEk18gpY 93u87T9l1Lt6DvfVeTADGj8kYBT1detWSVOkFSIAnWcu9uljL0amUdc0UAX+0ssOpAKp KzFg== X-Gm-Message-State: AIVw110bI3ePx6oMFexquYo8HgZDONwLD4id5KwOKFt2rw3HP+BewhW4 9itqoTn5AhxRMWPGF0b1NSeR0BxRhhsm X-Received: by 10.84.231.141 with SMTP id g13mr15269602plk.157.1499163721697; Tue, 04 Jul 2017 03:22:01 -0700 (PDT) MIME-Version: 1.0 Received: by 10.100.134.226 with HTTP; Tue, 4 Jul 2017 03:22:00 -0700 (PDT) In-Reply-To: References: From: Akshay Joshi Date: Tue, 4 Jul 2017 15:52:00 +0530 Message-ID: Subject: Re: [pgadmin-hackers] Declarative partitioning in pgAdmin4 To: Ashesh Vashi Cc: Harshal Dhumal , pgadmin-hackers , Dave Page , Robert Eckhardt , Shirley Wang Content-Type: multipart/mixed; boundary="f403045fe28c17e3ab05537b411b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Unsubscribe: , List-Archive: Precedence: bulk --f403045fe28c17e3ab05537b411b Content-Type: multipart/related; boundary="f403045fe28c17e3a905537b411a" --f403045fe28c17e3a905537b411a Content-Type: multipart/alternative; boundary="f403045fe28c17e3a505537b4119" --f403045fe28c17e3a505537b4119 Content-Type: text/plain; charset="UTF-8" Hi Ashesh On Tue, Jul 4, 2017 at 11:35 AM, Ashesh Vashi wrote: > Hi Akshay, > > I found couple of issues, and fixed them in the updated patch. > - Validation issue resolved > - Disable "Is primary key?" in columns subnode for partitioned table. > > Review comments: > - Add note about - what value is expected in 'from', and 'to' field. > Please add an example in the note. > Fixed. > - PostgreSQL allows to create partioned table using 'OF TYPE'. > I have tried to add support of the above, but there are couple of issues in existing functionality. I'll create one RM case for this. Once that is fixed, I'll add support. > - We should add collation, and opclass for 'partition by statement (We can > do this later). > It requires some R&D, so we will add it later. > - Refresh the browser tree after creating, attaching, and detaching the > partitions. > As per our discussion, I have modified the logic and return oid and schema id for all the created/attached/detached partitions. Attached is the latest patch, can you please review it. > > > -- Thanks, Ashesh > > On Mon, Jul 3, 2017 at 3:14 PM, Akshay Joshi < > akshay.joshi@enterprisedb.com> wrote: > >> Hi Ashesh >> >> On Fri, Jun 30, 2017 at 12:46 PM, Ashesh Vashi < >> ashesh.vashi@enterprisedb.com> wrote: >> >>> On Thu, Jun 29, 2017 at 5:02 PM, Ashesh Vashi < >>> ashesh.vashi@enterprisedb.com> wrote: >>> >>>> Hi Harshal, >>>> >>>> These are initial review comments. >>>> 1. >>>> Please share a separate patch for generic code changes from this patch >>>> for the following files: >>>> - web/pgadmin/tools/user_management/templates/user_management/ >>>> js/user_management.js >>>> - web/pgadmin/static/js/backform.pgadmin.js >>>> - web/pgadmin/static/js/backgrid.pgadmin.js >>>> >>>> This should be committed as separate functionality, and should not be >>>> part of this commit. >>>> >>> >> Committed. >> >>> >>>> 2. >>>> Please put a space after a colon (:) in javascript object definition. >>>> i.e. >>>> {cell: Backgrid.Extension.StringDepCell, cellHeaderClasses: >>>> 'width_percent_30'} >>>> >>>> 3. >>>> Conversion of ptid (partition table OID) to tid (table OID) for its >>>> children must not be in 'web/pgadmin/browser/utils.py' file. >>>> Please create a inherited class of PGChildNodeView, and extend the >>>> functionality in it, and use it as the base class for all children of table. >>>> >>>> I will keep you posted for further review comments. >>>> >>> 4. >>> URL definition of the javascript for tables & partition tables utility >>> must be exposed from the table/partition table module, and not from the >>> database module. >>> i.e. >>> No changes should be done in the database module for this feature. Hence >>> - I don't expect any change in the file: >>> web/pgadmin/browser/server_groups/servers/databases/__init__.py >>> >> >> Fixed. >> >> Apart from above this patch contains test cases as well. >> >>> >>> -- Thanks, Ashesh >>> >>>> >>>> >>>> -- >>>> >>>> Thanks & Regards, >>>> >>>> Ashesh Vashi >>>> EnterpriseDB INDIA: Enterprise PostgreSQL Company >>>> >>>> >>>> >>>> *http://www.linkedin.com/in/asheshvashi* >>>> >>>> >>>> On Fri, Jun 23, 2017 at 6:55 PM, Harshal Dhumal < >>>> harshal.dhumal@enterprisedb.com> wrote: >>>> >>>>> Hi, >>>>> >>>>> Please find attached patch for partition support. >>>>> >>>>> This patch includes all the work done by Akashy and support for child >>>>> nodes (constraints, rules, index, triggers and partition itself ) under >>>>> partition node. >>>>> >>>>> >>>>> Thanks, >>>>> >>>>> -- >>>>> *Harshal Dhumal* >>>>> *Sr. Software Engineer* >>>>> >>>>> EnterpriseDB India: http://www.enterprisedb.com >>>>> The Enterprise PostgreSQL Company >>>>> >>>>> On Tue, Jun 20, 2017 at 12:16 AM, Shirley Wang >>>>> wrote: >>>>> >>>>>> >>>>>> >>>>>> On Mon, Jun 19, 2017 at 1:59 AM Akshay Joshi < >>>>>> akshay.joshi@enterprisedb.com> wrote: >>>>>> >>>>>>> On Fri, Jun 16, 2017 at 11:16 PM, Shirley Wang >>>>>>> wrote: >>>>>>> >>>>>>>> Looks good. I noticed people clicking back and forth to the columns >>>>>>>> tab to remember which columns they've created while filling out the >>>>>>>> Expressions column. It might be better to have a list of the columns and >>>>>>>> the datatype above the 'Partition Keys' subnode and have columns as a type >>>>>>>> field rather than a drop down. >>>>>>>> >>>>>>> >>>>>>> I think we should not duplicate that data as we already have all >>>>>>> the information on "Columns" tab and by providing drop down user can select >>>>>>> columns from there only. >>>>>>> >>>>>>>> >>>>>>>> Also, I think the fields someone sees after selecting the Key type >>>>>>>> needs to depend on what they select. Seeing both Column and Expressions >>>>>>>> type field might lead someone to think they need to fill out both fields. >>>>>>>> >>>>>>> >>>>>>> We can't, because user can select one column and provide an >>>>>>> expression as partition key in this case we will have to show both the >>>>>>> columns in subnode control. Anyways when user select columns I have >>>>>>> disabled the expression cell and if user selects expression column cell is >>>>>>> disabled. >>>>>>> >>>>>> >>>>>> Ah I see what you mean. What I meant was that the column would change >>>>>> depending on if someone selects Column or Expressions from the dropdown >>>>>> [image: expression.png] >>>>>> Can a user select more than one key type? The use case I can see >>>>>> where hiding 'Columns' or 'Expressions' would fail is if someone can create >>>>>> an expression key type and a column key type. >>>>>> >>>>>> Disabling a feature is one way to guide user behavior, but it doesn't >>>>>> provide enough context for someone to understand why it's disabled. It's >>>>>> better to only display what is absolutely necessary and hide fields that >>>>>> are unrelated to the workflow. >>>>>> >>>>>> Typically, disabling a UI element is useful when that disabled UI >>>>>> element also provides some context or value while disabled. In this case, >>>>>> I'm not sure it is. >>>>>> >>>>>> If hiding options isn't possible, providing some text in the fields >>>>>> (like N/A or --) would be helpful. >>>>>> >>>>>> >>>>>> >>>>>>> >>>>>>>> [image: coluns_partitioning.png] >>>>>>>> When is the 'In' column in the Partitions subnode enabled? >>>>>>>> >>>>>>> >>>>>>> In case of 'List' Partition. >>>>>>> >>>>>> >>>>>> It would improve the experience if the 'In' column was removed when a >>>>>> user selects 'Range' partitions then. And then if a user is creating a >>>>>> 'List' partition, 'From/To' should be hidden. In this case, 'From/To' and >>>>>> 'In' are dependent on that first drop down step, so seeing 'In' while on >>>>>> 'Range partitions' (and 'From/To' on 'List partitions') is not providing >>>>>> any value. >>>>>> >>>>>> >>>>>>> >>>>>>>> For the NoteControl on the bottom, what do 'Mode Control' or >>>>>>>> 'Attach Mode' refer to? And how can I tell the difference between 'Create >>>>>>>> Mode' and 'Edit Mode'? >>>>>>>> >>>>>>> >>>>>>> 'Mode control' is a switch control in subnode control that should >>>>>>> be "Mode switch control". 'Create Mode' is when user creates the new table >>>>>>> by clicking create-> table and 'Edit Mode' is when user open the properties >>>>>>> dialog for the existing table. In case of 'Edit Mode' there are two ways >>>>>>> user can create/attach partitions. In Attach mode we will identify and list >>>>>>> down the suitable tables to be attached. >>>>>>> >>>>>> >>>>>> I see. Describing these various states is great in case a user needs >>>>>> it. What are your thoughts on having it live in the documentation of >>>>>> pgAdmin4 rather than in the dialog? This seems to be the established >>>>>> pattern for all other explanations. >>>>>> >>>>>>> >>>>> >>>> >>> >> >> >> -- >> *Akshay Joshi* >> *Principal Software Engineer * >> >> >> >> *Phone: +91 20-3058-9517Mobile: +91 976-788-8246* >> > > -- *Akshay Joshi* *Principal Software Engineer * *Phone: +91 20-3058-9517Mobile: +91 976-788-8246* --f403045fe28c17e3a505537b4119 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Ashesh

On Tue, Jul 4, 2017 at 11:35 AM, Ashesh Vashi &l= t;ashesh= .vashi@enterprisedb.com> wrote:
Hi Akshay,

I found couple of issues, and fixed them in the updated patch.
<= div class=3D"gmail_quote">- Validation issue resolved
- Disable "Is primary key?" in columns subnode for par= titioned table.

Review comments:
- Add note about= - what value is expected in 'from', and 'to' field. Please= add an example in the note.
=C2=A0 =C2= =A0Fixed.=C2=A0
- PostgreSQL allows to crea= te partioned table using 'OF TYPE'.
<= div>=C2=A0 =C2=A0I have tried to add support of the above, but there are co= uple of issues in existing functionality. I'll create one RM case for t= his. Once that is fixed, I'll add support.
- We should add collation, and opclass for 'partition by statement = (We can do this later).=C2=A0
=C2=A0 =C2= =A0It requires some R&D, so we will add it later.=C2=A0
- Refresh the browser tree after creating, attaching, and = detaching the partitions.
=C2=A0 =C2= =A0 As per our discussion, I have modified the logic and return oid and sch= ema id for all the created/attached/detached partitions.

=
=C2=A0Attached is the latest patch, can you please review it.


-- Thanks, As= hesh

On Mon, Jul 3, 2017 at 3:14 PM, Akshay Joshi <akshay.joshi@enterprisedb.com> wrote:
Hi Ashesh

On Fri, Jun 30, 2017 at 12:46 PM, Ashesh Vashi <ashesh.vashi@enterprisedb.com> wrote:
On Thu, Jun 29, 2017 at 5:02 PM,= Ashesh Vashi <ashesh.vashi@enterprisedb.com> wrote:
Hi Harshal,

These are initial review comments.
1.
Please share a separate patch for generic code changes f= rom this patch for the following files:
- web/pgadmin/tools/user_= management/templates/user_management/js/user_management.js
<= div>- web/pgadmin/static/js/backform.pgadmin.js
- web/pgadmi= n/static/js/backgrid.pgadmin.js

This should b= e committed as separate functionality, and should not be part of this commi= t.

<= /div>
=C2=A0 =C2=A0 =C2=A0 Committed.=C2=A0
<= div>
2.
Please put a space after a colon (:) in jav= ascript object definition.
i.e.
{cell: Ba= ckgrid.Extension.StringDepCell, cellHeaderClasses: 'width_percent_= 30'}

3.
Conversion of ptid (p= artition table OID) to tid (table OID) for its children must not be in '= ;web/pgadmin/browser/utils.py' =C2=A0file.
Please create a in= herited class of PGChildNodeView, and extend the functionality in it, and u= se it as the base class for all children of table.

I will keep you posted for further review comments.=C2=A0
4.
URL definition of the javascript for tab= les & partition tables utility must be exposed from the table/partition= table module, and not from the database module.
i.e.
N= o changes should be done in the database module for this feature. Hence - I= don't expect any change in the file:
web/pgadmin/browser/ser= ver_groups/servers/databases/__init__.py
<= /blockquote>

=C2=A0 =C2=A0 Fixed.

<= /div>
=C2=A0 =C2=A0Apart from above this patch contains test cases as w= ell.=C2=A0

-- Thanks, Ashesh=
=

--

Thanks & Regards,

Ashesh Vashi
EnterpriseDB INDIA: Enterprise PostgreSQL Company


http://www.linkedin.com/in/asheshvashi


On Fri, Jun 23, 2017 at 6:55 PM, Harshal Dhu= mal <harshal.dhumal@enterprisedb.com> wro= te:
H= i,

Please find attached patch for partition support.

This patch includes all the work done by Akashy and s= upport for child nodes (constraints, rules, index, triggers and partition i= tself ) under partition node.


Thank= s,

=
--=C2=A0
Harshal Dhumal
Sr. Software Engineer

EnterpriseDB India:=C2=A0<= /span>http://www.enterprisedb.com<= br style=3D"color:rgb(136,136,136);font-size:12.8px">The Enterprise PostgreSQL Company<= br>
=

On Tue, Jun 20, 2017 at 12:16 AM, Shirley Wa= ng <swang@pivotal.io> wrote:


On Mon, Jun 19, 2017 at 1:59 AM Akshay Joshi <akshay.joshi@= enterprisedb.com> wrote:
On Fri, Jun 16, 2017 at 11:16 PM, Shirley Wang <swang@pi= votal.io> wrote:
Looks good. I noticed people clicking back and = forth to the columns tab to remember which columns they've created whil= e filling out the Expressions column. It might be better to have a list of = the columns and the datatype above the 'Partition Keys' subnode and= have columns as a type field rather than a drop down.

=
=C2=A0 =C2=A0I think we should not duplicat= e that data as we already have all the information on "Columns" t= ab and by providing drop down user can select columns from there only.=C2= =A0

Also, I think the fields someone sees af= ter selecting the Key type needs to depend on what they select. Seeing both= Column and Expressions type field might lead someone to think they need to= fill out both fields.

<= /div>
=C2=A0 =C2=A0We can't, because user can select one column and pro= vide an expression as partition key in this case we will have to show both = the columns in subnode control. Anyways when user select columns I have dis= abled the expression cell and if user selects expression column cell is dis= abled. =C2=A0

Ah I see what you mean. What I meant was that the column would change dep= ending on if someone selects Column or Expressions from the dropdown
<= div>3D"expression.png"
Can a user select more than one key= type? The use case I can see where hiding 'Columns' or 'Expres= sions' would fail is if someone can create an expression key type and a= column key type.

Disabling a feature is one way t= o guide user behavior, but it doesn't provide enough context for someon= e to understand why it's disabled. It's better to only display what= is absolutely necessary and hide fields that are unrelated to the workflow= .=C2=A0

Typically, disabling a UI element is usefu= l when that disabled UI element also provides some context or value while d= isabled. In this case, I'm not sure it is.

If = hiding options isn't possible, providing some text in the fields (like = N/A or --) would be helpful.

=C2=A0

3D"coluns_partitioning.png"
When is the 'In' column in the Partitions subnode e= nabled?=C2=A0

=C2= =A0 =C2=A0 In case of 'List' Partition.=C2=A0

It would improve the experience i= f the 'In' column was removed when a user selects 'Range' p= artitions then. And then if a user is creating a 'List' partition, = 'From/To' should be hidden. In this case, 'From/To' and = 9;In' are dependent on that first drop down step, so seeing 'In'= ; while on 'Range partitions' (and 'From/To' on 'List p= artitions') is not providing any value.
=C2=A0

For the NoteControl= on the bottom, what do 'Mode Control' or 'Attach Mode' ref= er to? And how can I tell the difference between 'Create Mode' and = 'Edit Mode'?

<= div>=C2=A0 =C2=A0'Mode control' is a switch control in subnode cont= rol that should be "Mode switch control". 'Create Mode' i= s when user creates the new table by clicking create-> table and 'Ed= it Mode' is when user open the properties dialog for the existing table= . In case of 'Edit Mode' there are two ways user can create/attach = partitions. In Attach mode we will identify and list down the suitable tabl= es to be attached.=C2=A0

I see. Describing these various states is great in case a user= needs it. What are your thoughts on having it live in the documentation of= pgAdmin4 rather than in the dialog? This seems to be the established patte= rn for all other explanations.






--
Akshay Joshi<= /font>
Prin= cipal Software Engineer=C2=A0


Phone: +91 20-3058-9517
Mobile: +91 976-788-8246<= /span>




--
Akshay Joshi


<= b>Phone: +91 20-3058-9517
Mobile: +91 976-788= -8246
--f403045fe28c17e3a505537b4119-- --f403045fe28c17e3a905537b411a Content-Type: image/png; name="coluns_partitioning.png" Content-Disposition: inline; filename="coluns_partitioning.png" Content-Transfer-Encoding: base64 Content-ID: <15cb1f7bd866477d6182> X-Attachment-Id: 15cb1f7bd866477d6182 iVBORw0KGgoAAAANSUhEUgAAA4QAAALvCAYAAAA9CgsWAAAACXBIWXMAAAsTAAALEwEAmpwYAAAA AXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAATnbSURBVHgB7L13cBzH/aetqqururqru3PV3f11 VVeuu7eu3tc/B9lUlizJClawomVZwYpWtGQr50BSgRIVSWVSpERSmRLFIOYIkmACE8CcAeYcQYKZ 7Hc+DXyXjeEusFgugF3M81Q9BezO7ITdntn+TPf0nrRixQqHiIiIiIiIyfOkYtpYREREREREzJ8E QkRERERExIRKIEREREREREyoxwXCXz41BBEREREREduYBEJERERERMSESiBERERERERMqARCRERE RETEBPqrpwYTCBEREREREZPor5/6iUCIiIiIiIhYCF7asb974f2v3Uc9ernPP/88J/VaLUPLanh9 g91v8hEIf/HsSPd/PljjftFjs/vlpxvdr3tsdL/tscG167nenfrZMU+LPCV67jc91rv/t9vG6DWr /WsL9cNARERERERsKe95s2/OITCTd73Rt4F1DnYn5yMQ/n8Kdd3WuadKD7pXp+13Xabvdr1mbXMD 525yo+ZvcGMXyvVuzIL1bkD5Ovf2+PXur/02ut90W+P+jUCIiIiIiIgJV615CnC9evVyJSUlbvHi xTn/hqBeq2VoWVpm5pbCwe63Tw3KTyD8Vbf1rkPZEff6zCPupWkH3QuT97unJtS4h8bsdvcM3+X+ Nmi7u/bHre6Sbza7s3pvcr+MWhP/H1oIERERERER3Qvvf+XDm4JcrkEwrpalZWrZ6debx0D46ygQ vlJ2yL0764B7vWyf6zB5r3tq/B73r9HV7q5hO91NA7e5a36IAuG3m925X2xyv+m5yXcZ/f8IhIiI iIiImHDtnsETaRlM11Jo9xSmX28eA+Fvu69131ZscxVLV7m5S6vcnKUr3dxlq9wc72o3Z/ma6G/k irVu+tIoPI7b6H758RoCISIiIiIiJl675y9fYdC05aZfbx4D4WndV7nJ81e6qsoVrqqqMvpb6ZYt W+pWVlW5VStXusro+XVr17oN69e7TRs3uhnLN7nTP13j/t9nCISIiIiIiJhsiz8QfrrKTVtQ6Sqj eSujMLhkyRI3YsQIt3z5cv/6MWPG+L9rfShc5+at2uzO6NH0QPh83wpXvnK721K9363bvtf9OH21 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 tnbWDRKj8KjpGjjGumtqlNHfvzTKD04TsmLTbh9GT6QAWADcHLVk6rFGObUBbYS6xFpYva9nWWow HLV8Gmq91M9K6PXrttdO71Q3yui3UUtiOMqowuD9n/HzE4iIiIiIhWA29xAuXbrUdx0Nn9NP/ekn /lr1HsKW9uq3x/v75NSN8qyO2QVK/YyDul4qBMV/h/D6rqV+cJXwd/5C9fuDV0dh9KwOx153Seex fv0a4KW59vPM9iPdfdH23tltaoPz6XcI0+1X3HOjMKv9vOvTqc22zYiIiIiI2HSzCYS52CYDISIi IiIiYluSQIiIiIiIiJhQP+rRywc3dQHNVxjUsrRMLTv9egmEiIiIiIiIre4L73/lw1tJSUneAqGW pWVq2enXSyBERERERERsdS/t2N+Ht169evkgdyIthXqtlqFlaZladvr1EggRERERERELwnve/C51 z1++vLNz3wbWSSBEREREREQsGNWapy6edk9hLuq1WkbmlkGTQIiIiIiIiJhQCYSIiIiIiIgJlUCI iIiIiIiYUAmEiIiIiIiICbUJgbBv376IiIiIiIjYRvzuu+/ct99+SyBERERERERMmk0KhKtXr0ZE RERERMQ24qpVqzL+uD2BEBERERERsQ1LIEREREREREyoBEJERERERMSESiBExKJz48aNbu/eve7w 4cOuraJ90z5qX4vps0FERMTikkCIiEXljh07XNLQPhfTZ4SIiIjFI4EQEYtGtZYdPXrUJQ3tMy2F iIiI2BwSCBGxaKypqXFJRfteTJ8VIiIiFocEQkQsGtvyPYONoX0vps8KERERi0MCISIWjUmnmD4r RERELA4JhIhYNCadYvqsEBERsTgkECJi0Zh0iumzQkRExOKQQIiIRWPSKabPChEREYtDAiEiFo1J p5g+K0RERCwO8x4If5q80D3y+RR3Q5fx7rYPJ7hX+k535YsKJ0wuXbHSvfL9DDdh9tK8Lre0Ypl7 /usyd/N7490tH0xwL35T5srmLc/qtdqWV76f7pZXrmyWfW4tfyxdkCoLf/94onuz/0y3eHnz7uPK qEBXrVyV02tHli12r0ZlY9WqxuetrMptHSdiRXQc6Xj6auzcRucdNm2R6zpodotvY1PV8fhy3xl+ 37KZvzH27NnjnnvuuXo+++yzbuTIkS5XwpFN161b5zp06OAOHTrU6LTmINv39eOh5b6smC9HvjVg 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 iIiIiFjs3vXp1KwzW7MGwj++TiBERERERERsSe/sNiXrzEYgREREREREbEMSCBERERERERMqgRAR ERERETGhEggRERERERGLyMtfG+Ee7THOvdBnfNY++dk4d/3bo45bFoEQERERERGxSOzwRYmbM2ee z16VlZVZq/kXLFjgHu/yXb3lEQgRERERERGLwItfGeamzZrjampq3OHDh92RI0ea5MGDB91Hn3Rz f3iyd2qZBEJERERERMQC99+eHOzu7DrSLVu+3B06dChnhw4d6m54qku0vJ/8cgs+EP7+pVHu3MDz Xh7tTn9xRF7f3N89P8wvO900rUvTfvvssLx/qNq3czqOcr95emi95095frhf56kvDM/7OhERERER sfhUILzvw5E+cx04cCCtajncsmWLq66uzjjPiBEj3N+eetv92xNFEAhPfmaoW7Rul1u+sTrlik3V bu7qHe79EYvdqc83PTD96ukh7taPJ7vL3xjnH//uuWFu8Ow1bnbVdv/4j6+Pcbd/MsWvW497TVjh Fq7d6W7+aFJeP9DfRMtfsGanm7pssw+G9vx5r4x2Zcu3umXRvr7wfUWzFShERERERCwe1aJngXD/ /v1pff/9991f//pX984777i9e/emnWf48OF1gXCQX25BB8LfPTfU7Tt42O3ed9DNWLHVTV++xZWv 3O6fO3T4iOsybFGT30gFvcpNu324rG2hG+nmrNrhw5mmfzBysTt05Kh74PMZ/vFnJcvd2m017vr3 J+b1A/3ts0Ndzf5Dbu32mlQgvPH9Ur8th6P1/zh9tftdM7RKIiIiIiJi8WmBcPny5T7spfP+++93 7dq1cw888IDbuXNn2nmGDRtWfIFw6Ybqeq1o/+o9wx08fNRVrNzhH5/2wgh3y0eT3Uv957rno1a1 a94dn5r3ss7jfKvbxa+NdS/9OM/d02OaW7l5j9u4c5+769Op7sz2I9xf3yt113WZ6Lfhi4krfCBT 2Dy7w0h3WdSSeF/Pab4bp5bX7vlh7sYPJ0XLql3Xn+paGuVFnca4q98e785/dbRr32+On+eyYHpo PBDe+P4k3xJpQVctmTbvBdHyHv9qtntlwDz353cnRPs73G+HtleB1uZr91ztcxe8Osa//s9dJriO /ea6DpE3RGFT6yykQo2IiIiIiNlpgXDZsmVuz549aQ0D4fbt29POU5SBcNnG+oFQoWvb7v1uwdra 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 5mXe1uUJBOn8889vSMhklCcesI9vfvObTeIUvyM4fnv55ZeXextrnHLKKY2NTNVJOMnODjvs0Pjt V77ylSbhmwr1uu+++8q5557bNybr9x/+8Ifl0EMPXeKYBP2CCy4Y1cb++te/NvaxvMbBiUL7xRlt jfEOkdVnv/jFLyZkVwcddFATw1cEMiyuXnTRRZPux2KQMWmjjTYqP//5zydUxlNPPVW22267cvbZ Z09q3WpceOGFZeutt15i4oNOJjOu8APjmEmhruNsRc61zTbblA022KCxwYneS1lf/vKXy/HHHz+u 6+TtG2+88WJxfjLw+OOPN/HAmF7/Lo589KMfbSa0R7teXiRXOOqoo4Z6kqXGs88+W770pS81MXxZ 3icJ4Tjx0EMPlfXXX78JXIKIAGMgmejM6njAOSRr22+//aSVKZiss846ZdVVV23a4h5HH3108/en P/3pcQXIcN4TTzyxfO1rX1vmAyTip44xkyQZQ0T32muvZXrfyexP5J4d1b/Tudm7M888s2lfm7yZ STXgSMD222+/cd3zV7/6VaMfZS7PYKu+X/ziF8s555wz0va2LvSfldHNNtusmXSZbF1L0o844ojl 1ublAYm6eGQQnozy+Ozmm29eVl555bLbbruNJI4GeDHhvV65lfREXJqKyQLi/MlPfrKZfJDgLu+J l374wx/+UDbddNO+9aFPdbbS0D527bXXNon+aDZmopItTvXdMhKetdZaq7FlZJ0NHXLIIc3fxvSJ jHe//vWvy9e//vUVghAec8wxDQlpJ+uToVdJq4nMn/70pxMqQ2z585//PCZhmAiiryTU/KC9+mSn jonWyYopdo4heldffXXfXUvae+mll5ZPfepTE1qdjHIjZo93bBOfTLBN1tgR6Kdj91tppZWaFfXR dnL5XZ4gpkxmvVZksCe+YSfCsrxPEsJxwgzqJptsUm644YaR3yRNZlj934BiFcSMj39/9rOfNdfE cr6gaXCWlJtZrIMfPZ522mnNMcTPgBWDDJ05JqmWMJ911lkN4npOhJQqe88992xWjmIGdDQEITRT 9L3vfa+pHzLn7zrxYohWlxAKK4B1YsiIzjjjjKbeyOBhhx22GCGUhEgW1Eu72v3vPLo6/fTTxzVQ jUUI1dv2FauGfvOvwF/f17YNhF4/WXGs76/e2qrtJ598clPGn/70p1HriPiY4TQj3z7mXldccUWj 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 SCUJYUpKSkpKSkpKSkpKypBKEsKUlJSUlJSUlJSUlJQhlSSEKSkpKSkpKSkpKSkpQypJCFNSUlJS UlJSUlJSUoZUkhCmpKSkpKSkpKSkpKQMqSQhTElJSUlJSUlJSUlJGVJJQpiSkpKSkpKSkpKSkjKk koQwJSUlJSUlJSUlJSVlSCUJYUpKSkpKSkpKSkpKypBKEsKUlJSUlJSUlJSUlJQhlSSEKSkpKSkp KSkpKSkpQypJCFNSUlJSUlJSUlJSUoZUkhCmpKSkpKSkpKSkpKQMqSQhTElJSUlJSUlJSUlJGVJJ QpiSkpKSkpKSkpKSkjKkkoQwJSUlJSUlJSUlJSVlSCUJYUpKSkpKSkpKSkpKypBKEsKUlJSUlJSU lJSUlJQhlSSEKSkpKSkpKSkpKSkpQypJCFNSUlJSUlJSUlJSUoZUkhCmpKSkpKSkpKSkpKQMqSQh TElJSUlJSUlJSUlJGVJJQpiSkpKSkpKSkpKSkjKkkoQwJSUlJSUlJSUlJSVlSCUJYUpKSkpKSkpK SkpKypBKEsKUlJSUlJSUlJSUlJQhlSSEKSkpKSkpKSkpKSkpQypJCFNSUlJSUlJSUlJSUoZUkhCm pKSkpKSkpKSkpKQMqSQhTElJSUlJSUlJSUlJGVJJQpiSkpKSkpKSkpKSkjKkkoQwJSUlJSUlJSUl JSVlSCUJYUpKSkpKSkpKSkpKypBKEsKUlJSUlJSUlJSUlJQhlSSEKSkpKSkpKSkpKSkpQypJCFNS UlJSUlJSUlJSUoZUkhCmpKSkpKSkpKSkpKQMqSQhTElJSUlJSUlJSUlJGVJJQpiSkpKSkpKSkpKS kjKkkoQwJSUlJSUlJSUlJSVlSCUJYUpKSkpKSkpKSkpKypBKEsKUlJSUlJSUlJSUlJQhlSSEKSkp KSkpKSkpKSkpQypJCFNSUlJSUlJSUlJSUoZUkhCmpKSkpKSkpKSkpKQMqSQhTElJSUlJSUlJSUlJ GVJJQpiSkpKSkpKSkpKSkjKkkoQwJSUlJSUlJSUlJSVlSCUJYUpKSkpKSkpKSkpKypBKEsKUlJSU lJSUlJSUlJQhlSSEKSkpKSkpKSkpKSkpQypJCFNSUlJSUlJSUlJSUoZUkhCmpKSkpKSkpKSkpKQM qSQhTElJSUlJSUlJSUlJGVJJQpiSkpKSkpKSkpKSkjKkkoQwJSUlJSUlJSUlJSVlSCUJYUpKSkpK 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 7HTmYvhwDw0hPP7qsmsPixPCv42cd8ntj438vem+f32XFD5VVtrhmCXL/N4p5eo7F60IvfOPf5S/ v/XOotWi3v8POfuGhkS2r1mW6CKEd/UIWReu+Oia5f5TTlLZMuvii8rFvb/j2G3rfaxM+9xmZV4v 136zl29e+e3tyy09UthVzoweGbz+B98rb73xxqK2v/VW+cfbbzf/f3P+vHL9N7/Wtw7LA3/b6ydN XZ468rDO452E8LQ1lsBLp3ykwSunrlEW3PK7Xjvf+Od20dn39s5Zszn+8Anrl3fe/OexhY9fUR48 YuXywOErd5YL82/ar/STNxfMKU/8cZu+104GXrtxvzL/xUfKqxf0v88yI4Tz5s1bKiBEPr0Q3+Tz TN3SlgldhHCiZR1xxBGLEcBNN920bL755kusFE5GXROJRCKRSCSGHSOE8PunL4GGEB53VY8QXrVY 0n3xLQ+XD3zz2AbTb324TLvtbyPXbLrPhQ0p/NNVdy9R3s9Pu7G5/saHni3r7nlO89t3j7mqzH/j zWZ76np7LfrtQzueWv7t60eWf/3qoT0c1qwq/sf3Tisf+u7J5V+/dkTv+CkjZX6o9/u/ff2I5gU4 zd/O+erhzbX/1px7amfboJMQ9ghbF2Yec9RiOnh8+rRy8Tprllt7xO/iz25a5j/7zD8Jz+sLyh1f 266znDu++uUeAXqzvPP3v5cnD9x/0e+9lbdnlP/OO2XhnFfKXZtu3Px+08fXKdPX/kiZttZHmn/9 7fc7ewT08t69b+79fUXv3zh+68c/OnIf51z10UXH4Ore//0Wx2/r1fuSd8u+dO01yh3vHnt0jx8v IoSHH9pZ/05CeOrqS+DF03t1OGzNctWvPtzDh8oth69f3njs8h4DfqfMvegrzTlevvL6jKPKwofO Ln//20XltUevKLcfvUl57Oojy+PXHl2eO3G1zrLn3fibpo6v33dqee2Sb/WwQ4OFj1ywiFQ+d8fI uU8dt2q595D/Lncf/F/l4SNXKi+f8s9y/nb0yuWeQ/6r3NM79uDhK5XZJ//z2Eu9/z90xErNsXt7 5zx74qoj5b1w09GofHnsrG3L08ev2lnHZUYIX3vttQlj1qxZ5cILL1wMtl8uTZmBLkI40bKef/75 5tlGxO/kk0/u+cU7DY477rgRQrjWWmtNSl0TiUQikUgkhh1BCD/0vVMXw3/0sIgQXll2PWHxFcL7 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 m4/e/+t2h5STLrqpHHzODUvUBboI4W090teFG9davVzYI1jxbF4/aUjhaiuXW/uU83yPxJFHzj2n TF9tpabcG9Zcrfx19VXK3MdnNWRt5g937pGTt8qcBx8sN/ZW5a7vHb/lx4u2cv7toAPKPVtvOUII o9yZP9plEZE7+MAyu1cHctMPvt+UfV0P9x16cHPNE4cc2Dxv+My115TLVl+53NS7/2W9ez90xunl 0WOOWqycrvp3EsITP9SJNx46exHBvfLgcuUv/q1c9fP/Ua7Z+3+W6375P8vtv/2X5pxnf//B8sR1 R5e7T9++XN07fvXe/6M8Mm3f8vxd55U503boLPe16/b+JyGsfn/1/M83RG3hE1eXeVfv1pzz5BX7 lSeO+kB5/tgPlkeOW7e8cN/F5eXpO5aX7/9rmTV97/Lku8devOmI5vzX7z25ed7QFtEHDvuv5phz nrj812X2jDPKyyevUubffnhzn2f+tEV5rlf/rjouM0Log+1Lgy5CuLRlQhchnIxyH3jggXLZZZc1 uPfeeye9rolEIpFIJBLDjhFC+O5nJEbwrWPfJYTTy849WH1b4pwKH3z3/J2Oml526ZHIhhC2zvnZ yYs+cO+lMvuceFH5zv5nlL1+/5fy5POvNL/vfep15aq7H2/udfQ515TvHXhWmX7T/c2xZ2a/Wj77 szOacn552nUjBOyQ824dKf+ae55ofjvjklvLt/c7vZw+fdH2wzOuur+zzl2E8NYeQerC9GZlcEky +E7HS2Ueu/iv5XLP/XWUc9fmm5W35r66iChNn1au7RG96/f6SXnhrjub3+b0iNqMjddvSNvrs2eX 6/bcvdz0y73L6y8u2jL6t7+cX+7b/msjhDDKfahHIhcRuQMaQkmJC154vnf9T8qNvev/3ltYsV11 xqc2KHNuvL45d+bZfypX7fKDMvPPf2z+fuGcsxcrp6v+nYTwhA90wmclvNDllUeuXaSr3grcm/Nf bp79mzPzkuac+3//id7vf1/0kpuF88tbb7zWPAto1c71XeXOu+7n7xLCfRc/dtJKPb0tLPOfun3R /9+Y03zj8OGL9yn3ntUjgY8sspt5V+3WbDd9561/HnvurvMXEcIZR5YFtx7Q/N9W0Xv/+L3y8EW/ bOr49pxHm/ssuOPw5vhTN59SnrngO511XGaEcHbPKCaKadOmle22224xQrj++uuXffbZp7zYM7Cl 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 IpFIDCn+/+6eCsZPWwq7AAAAAElFTkSuQmCC --f403045fe28c17e3a905537b411a Content-Type: image/png; name="expression.png" Content-Disposition: inline; filename="expression.png" Content-Transfer-Encoding: base64 Content-ID: <15cc18ce64fb15721d31> X-Attachment-Id: 15cc18ce64fb15721d31 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 EolEIpGc+iJCKJFIJBKJRCKRSCQlKiKEEolEIpFIJBKJRFKiIkIokUgkEolEIpFIJCUqIoQSiUQi kUgkEolEUqIiQiiRSCQSiUQikUgkJSoihBKJRCKRSCQSiURSoiJCKJFIJBKJRCKRSCQlKiKEEolE IpFIJBKJRFKiIkIokUgkEolEIpFIJCUqIoQSiUQikUgkEolEUqIiQiiRSCQSiUQikUgkJSoihBKJ RCKRSCQSiURSoiJCKJFIJBKJRCKRSCQlKiKEEolEIpFIJBKJRFKiIkIokUgkEolEIpFIJCUqIoQS iUQikUgkEolEUqIiQiiRSCQSiUQikUgkJSoihBKJRCKRSCQSiURSoiJCKJFIJBKJRCKRSCQlKiKE EolEIpFIJBKJRFKiIkIokUgkEolEIpFIJCUqIoQSiUQikUgkEolEUqIiQiiRSCQSiUQikUgkJSoi hBKJRCKRSCQSiURSoiJCKJFIJBKJRCKRSCQlKiKEEolEIpFIJBKJRFKiIkIokUgkEolEIpFIJCUq IoQSiUQikUgkEolEUqIiQiiRSCQSiUQikUgkJSoihBKJRCKRSCQSiURSoiJCKJFIJBKJRCKRSCQl KiKEEolEIpFIJBKJRFKiIkIokUgkEolEIpFIJCUqIoQSiUQikUgkEolEUqIiQiiRSCQSiUQikUgk JSoihBKJRCKRSCQSiURSoiJCKJFIJBKJRCKRSCQlKiKEEolEIpFIJBKJRFKiIkIokUgkEolEIpFI JCUqIoQSiUQikUgkEolEUqIiQiiRSCQSiUQikUgkJSoihBKJRCKRSCQSiURSYvLLL7+4srIyEUKJ RCKRSCQSiUQiKTXJixC2bNlSEARBEARBEARB+A3hnnvuESEUBEEQBEEQBEEoRXTt2jUdIfzhhx8E QRAEQRAEQRCE3xA+/fRTEUJBEARBEARBEIRShAihIAiCIAiCIAhCiUKEUBAEQRAEQRAEoURRbUI4 f/58N2fOHDdr1qxTAtSFOp3udRUEQRAEQSh1jJo41d3wZHf3t9tecb9r2f43C9p3w1Pd3eiovUl6 mDNmtJvY6mY3pt45bvSZfxQioIuJt94c6WZMos4WThvhfuxzuVvT+X+5nzv+byUL2v9j38vdwukj M/pZtQjhvHnz3OzZs93GjRvdkSNH/HcsTiYOHz7s60KdqNvpWldBEARBEIRSx5hJU91ZrTq4eg/2 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 IAglimyE8P8H4sam5is+PfIAAAAASUVORK5CYII= --f403045fe28c17e3a905537b411a-- --f403045fe28c17e3ab05537b411b Content-Type: application/octet-stream; name="Partition_v8.patch" Content-Disposition: attachment; filename="Partition_v8.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j4pfd99r1 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL3N0YXRpYy9qcy9zY2hlbWEuanMgYi93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy9zdGF0aWMvanMvc2NoZW1h LmpzCmluZGV4IDBlOTA5OTcuLmVmNDk2ZTcgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3N0YXRpYy9qcy9zY2hl bWEuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvc3RhdGljL2pzL3NjaGVtYS5qcwpAQCAtMTQ1LDYgKzE0NSwxNiBAQCBk ZWZpbmUoJ3BnYWRtaW4ubm9kZS5zY2hlbWEnLCBbCiAgICAgZ3JvdXA6IGdldHRleHQoJ1RhYmxl JyksIG1vZGU6IFsnZWRpdCcsICdjcmVhdGUnXSwKICAgICB0eXBlOiAnc3dpdGNoJywKICAgICBk aXNhYmxlZDogZnVuY3Rpb24obSkgeworICAgICAgLy8gSWYgdGFibGUgaXMgcGFydGl0aW9uZWQg dGFibGUgdGhlbiBkaXNhYmxlZCBpdC4KKyAgICAgIGlmIChtLnRvcCAmJiBtLnRvcC5nZXQoJ2lz X3BhcnRpdGlvbmVkJykpIHsKKyAgICAgICAgLy8gV2UgYWxzbyBuZWVkIHRvIHVuc2V0IHJlc3Qg b2YgYWxsCisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgbS5zZXQo J2F1dG92YWN1dW1fY3VzdG9tJywgZmFsc2UpOworICAgICAgICB9LCAxMCk7CisKKyAgICAgICAg cmV0dXJuIHRydWU7CisgICAgICB9CisKICAgICAgIGlmKCFtLnRvcC5pblNjaGVtYS5hcHBseSh0 aGlzLCBbbV0pKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgIH0KQEAgLTQ1OSw2ICs0 NjksMzIgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUuc2NoZW1hJywgWwogICAgICAgICByZXR1cm4g dHJ1ZTsKICAgICAgIH0KICAgICB9KTsKKworICAgIHBnQnJvd3Nlci50YWJsZUNoaWxkVHJlZU5v ZGVIaWVyYXJjaHkgPSBmdW5jdGlvbihpKSB7CisgICAgICB2YXIgaWR4ID0gMCwKKyAgICAgICAg ICByZXMgPSB7fSwKKyAgICAgICAgICB0ID0gcGdCcm93c2VyLnRyZWU7CisKKyAgICAgIGRvIHsK KyAgICAgICAgZCA9IHQuaXRlbURhdGEoaSk7CisgICAgICAgIGlmICgKKyAgICAgICAgICBkLl90 eXBlIGluIHBnQnJvd3Nlci5Ob2RlcyAmJiBwZ0Jyb3dzZXIuTm9kZXNbZC5fdHlwZV0uaGFzSWQK KyAgICAgICAgKSB7CisgICAgICAgICAgaWYgKGQuX3R5cGUgPT09ICdwYXJ0aXRpb24nIHx8IGQu X3R5cGUgPT09ICd0YWJsZScpIHsKKyAgICAgICAgICAgIGlmICghKCd0YWJsZScgaW4gcmVzKSkg eworICAgICAgICAgICAgICByZXNbJ3RhYmxlJ10gPSBfLmV4dGVuZCh7fSwgZCwgeydwcmlvcml0 eSc6IGlkeH0pOworICAgICAgICAgICAgICBpZHggLT0gMTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzW2QuX3R5cGVdID0gXy5leHRlbmQoe30sIGQs IHsncHJpb3JpdHknOiBpZHh9KTsKKyAgICAgICAgICAgIGlkeCAtPSAxOworICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICBpID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51 bGw7CisgICAgICB9IHdoaWxlIChpKTsKKworICAgICAgcmV0dXJuIHJlczsKKyAgICB9OwogICB9 CiAKICAgLy8gU3dpdGNoIENlbGwgd2l0aCBEZXBzIChzcGVjaWZpY2FsbHkgZm9yIHRhYmxlIGNo aWxkcmVuKQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL19f aW5pdF9fLnB5CmluZGV4IGY2ZmE2NWUuLjE3ZDk3MDcgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9f X2luaXRfXy5weQorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVy cy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvX19pbml0X18ucHkKQEAgLTExLDIyICsxMSwxNiBA QAogCiBpbXBvcnQgc2ltcGxlanNvbiBhcyBqc29uCiBpbXBvcnQgcmUKLWZyb20gZnVuY3Rvb2xz IGltcG9ydCB3cmFwcwogCiBpbXBvcnQgcGdhZG1pbi5icm93c2VyLnNlcnZlcl9ncm91cHMuc2Vy dmVycy5kYXRhYmFzZXMgYXMgZGF0YWJhc2UKLWZyb20gZmxhc2sgaW1wb3J0IHJlbmRlcl90ZW1w bGF0ZSwgcmVxdWVzdCwganNvbmlmeQorZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRl LCByZXF1ZXN0LCBqc29uaWZ5LCB1cmxfZm9yCiBmcm9tIGZsYXNrX2JhYmVsIGltcG9ydCBnZXR0 ZXh0CiBmcm9tIHBnYWRtaW4uYnJvd3Nlci5zZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMuZGF0YWJhc2Vz LnNjaGVtYXMudXRpbHMgXAotICAgIGltcG9ydCBTY2hlbWFDaGlsZE1vZHVsZSwgRGF0YVR5cGVS ZWFkZXIsIFZhY3V1bVNldHRpbmdzLCBcCi0gICAgdHJpZ2dlcl9kZWZpbml0aW9uLCBwYXJzZV9y dWxlX2RlZmluaXRpb24KLWZyb20gcGdhZG1pbi5icm93c2VyLnNlcnZlcl9ncm91cHMuc2VydmVy cy51dGlscyBpbXBvcnQgcGFyc2VfcHJpdl9mcm9tX2RiLCBcCi0gICAgcGFyc2VfcHJpdl90b19k YgotZnJvbSBwZ2FkbWluLmJyb3dzZXIudXRpbHMgaW1wb3J0IFBHQ2hpbGROb2RlVmlldworICAg IGltcG9ydCBTY2hlbWFDaGlsZE1vZHVsZSwgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdz Citmcm9tIHBnYWRtaW4uYnJvd3Nlci5zZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMudXRpbHMgaW1wb3J0 IHBhcnNlX3ByaXZfdG9fZGIKIGZyb20gcGdhZG1pbi51dGlscy5hamF4IGltcG9ydCBtYWtlX2pz b25fcmVzcG9uc2UsIGludGVybmFsX3NlcnZlcl9lcnJvciwgXAogICAgIG1ha2VfcmVzcG9uc2Ug YXMgYWpheF9yZXNwb25zZSwgZ29uZQotZnJvbSBwZ2FkbWluLnV0aWxzLmRyaXZlciBpbXBvcnQg Z2V0X2RyaXZlcgotCi1mcm9tIGNvbmZpZyBpbXBvcnQgUEdfREVGQVVMVF9EUklWRVIKK2Zyb20g LnV0aWxzIGltcG9ydCBCYXNlVGFibGVWaWV3CiAKIAogY2xhc3MgVGFibGVNb2R1bGUoU2NoZW1h Q2hpbGRNb2R1bGUpOgpAQCAtNzksMTEgKzczLDIyIEBAIGNsYXNzIFRhYmxlTW9kdWxlKFNjaGVt YUNoaWxkTW9kdWxlKToKICAgICAgICAgIiIiCiAgICAgICAgIHJldHVybiBkYXRhYmFzZS5EYXRh YmFzZU1vZHVsZS5OT0RFX1RZUEUKIAorICAgIGRlZiBnZXRfb3duX2phdmFzY3JpcHRzKHNlbGYp OgorICAgICAgICBzY3JpcHRzID0gU2NoZW1hQ2hpbGRNb2R1bGUuZ2V0X293bl9qYXZhc2NyaXB0 cyhzZWxmKQorCisgICAgICAgIHNjcmlwdHMuYXBwZW5kKHsKKyAgICAgICAgICAgICduYW1lJzog J3BnYWRtaW4uYnJvd3Nlci50YWJsZS5wYXJ0aXRpb24udXRpbHMnLAorICAgICAgICAgICAgJ3Bh dGgnOiB1cmxfZm9yKCdicm93c2VyLmluZGV4JykgKyAndGFibGUvc3RhdGljL2pzL3BhcnRpdGlv bi51dGlscycsCisgICAgICAgICAgICAnd2hlbic6ICdkYXRhYmFzZScsICdpc190ZW1wbGF0ZSc6 IEZhbHNlCisgICAgICAgIH0pCisKKyAgICAgICAgcmV0dXJuIHNjcmlwdHMKKwogCiBibHVlcHJp bnQgPSBUYWJsZU1vZHVsZShfX25hbWVfXykKIAogCi1jbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5v ZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgorY2xhc3MgVGFibGVWaWV3 KEJhc2VUYWJsZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgIiIi CiAgICAgVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGluZyByb3V0ZXMgZm9y IFRhYmxlIG5vZGUKIApAQCAtOTYsMTEgKzEwMSw2IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxk Tm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAtIFRoaXMg cHJvcGVydHkgZGVmaW5lcyAoaWYgamF2YXNjcmlwdCkgZXhpc3RzIGZvciB0aGlzIG5vZGUuCiAg ICAgICAgIE92ZXJyaWRlIHRoaXMgcHJvcGVydHkgZm9yIHlvdXIgb3duIGxvZ2ljCiAKLSAgICAq IGNoZWNrX3ByZWNvbmRpdGlvbigpCi0gICAgICAtIFRoaXMgZnVuY3Rpb24gd2lsbCBiZWhhdmUg YXMgYSBkZWNvcmF0b3Igd2hpY2ggd2lsbCBjaGVja3MKLSAgICAgICAgZGF0YWJhc2UgY29ubmVj dGlvbiBiZWZvcmUgcnVubmluZyB2aWV3LCBpdCB3aWxsIGFsc28gYXR0YWNoZXMKLSAgICAgICAg bWFuYWdlcixjb25uICYgdGVtcGxhdGVfcGF0aCBwcm9wZXJ0aWVzIHRvIHNlbGYKLQogICAgICog bGlzdCgpCiAgICAgICAtIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBsaXN0IGFsbCB0aGUgVGFi bGUgbm9kZXMgd2l0aGluIHRoYXQKICAgICAgIGNvbGxlY3Rpb24uCkBAIC0xNDksMTAgKzE0OSw2 IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1 dW1TZXR0aW5ncyk6CiAgICAgICAtIFRoaXMgZnVuY3Rpb24gd2lsbCBnZW5lcmF0ZSBkZXBlbmRl bnQgbGlzdCB0byBzaG93IGl0IGluIGRlcGVuZGVudAogICAgICAgICBwYW5lIGZvciB0aGUgc2Vs ZWN0ZWQgbm9kZS4KIAotICAgICogX2Zvcm1hdHRlcihkYXRhLCB0aWQpCi0gICAgICAtIEl0IHdp bGwgcmV0dXJuIGZvcm1hdHRlZCBvdXRwdXQgb2YgcXVlcnkgcmVzdWx0Ci0gICAgICAgIGFzIHBl ciBjbGllbnQgbW9kZWwgZm9ybWF0Ci0KICAgICAqIGdldF90eXBlcyhzZWxmLCBnaWQsIHNpZCwg ZGlkLCBzY2lkKQogICAgICAgLSBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGxpc3Qgb2YgdHlw ZXMgYXZhaWxhYmxlIGZvciBjb2x1bW5zIG5vZGUKICAgICAgICAgdmlhIEFKQVggcmVzcG9uc2UK QEAgLTE3OCwxOSArMTc0LDYgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0 YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAqIGdldF90b2FzdF90YWJsZV92YWN1 dW0oZ2lkLCBzaWQsIGRpZCwgc2NpZD1Ob25lLCB0aWQ9Tm9uZSkKICAgICAgIC0gRmV0Y2ggdGhl IGRlZmF1bHQgdmFsdWVzIGZvciB0b2FzdCB0YWJsZSBhdXRvLXZhY3V1bQogCi0gICAgKiBfY29s dW1uc19mb3JtYXR0ZXIodGlkLCBkYXRhKToKLSAgICAgIC0gSXQgd2lsbCByZXR1cm4gZm9ybWF0 dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1bHQKLSAgICAgICAgYXMgcGVyIGNsaWVudCBtb2RlbCBm b3JtYXQgZm9yIGNvbHVtbiBub2RlCi0KLSAgICAqIF9pbmRleF9jb25zdHJhaW50c19mb3JtYXR0 ZXIoc2VsZiwgZGlkLCB0aWQsIGRhdGEpOgotICAgICAgLSBJdCB3aWxsIHJldHVybiBmb3JtYXR0 ZWQgb3V0cHV0IG9mIHF1ZXJ5IHJlc3VsdAotICAgICAgICBhcyBwZXIgY2xpZW50IG1vZGVsIGZv cm1hdCBmb3IgaW5kZXggY29uc3RyYWludCBub2RlCi0KLSAgICAqIF9jbHR5cGVfZm9ybWF0dGVy KHR5cGUpOiAoc3RhdGljbWV0aG9kKQotICAgICAgLSBXZSBuZWVkIHRvIHJlbW92ZSBbXSBmcm9t IHR5cGUgYW5kIGFwcGVuZCBpdAotICAgICAgICBhZnRlciBsZW5ndGgvcHJlY2lzaW9uIHNvIHdl IHdpbGwgc2VuZCBmbGFnIGZvcgotICAgICAgICBzcWwgdGVtcGxhdGUKLQogICAgICogX3BhcnNl X2Zvcm1hdF9jb2x1bW5zKHNlbGYsIGRhdGEsIG1vZGU9Tm9uZSk6CiAgICAgICAgLSBUaGlzIGZ1 bmN0aW9uIHdpbGwgcGFyc2UgYW5kIHJldHVybiBmb3JtYXR0ZWQgbGlzdCBvZiBjb2x1bW5zCiAg ICAgICAgICBhZGRlZCBieSB1c2VyCkBAIC0yNTIsNzEgKzIzNSwxNiBAQCBjbGFzcyBUYWJsZVZp ZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAg ICAgICAnZ2V0X2FjY2Vzc19tZXRob2RzJzogW3t9LCB7J2dldCc6ICdnZXRfYWNjZXNzX21ldGhv ZHMnfV0sCiAgICAgICAgICdnZXRfb3Blcl9jbGFzcyc6IFt7fSwgeydnZXQnOiAnZ2V0X29wZXJf Y2xhc3MnfV0sCiAgICAgICAgICdnZXRfb3BlcmF0b3InOiBbe30sIHsnZ2V0JzogJ2dldF9vcGVy YXRvcid9XSwKKyAgICAgICAgJ2dldF9hdHRhY2hfdGFibGVzJzogWworICAgICAgICAgICAgeydn ZXQnOiAnZ2V0X2F0dGFjaF90YWJsZXMnfSwKKyAgICAgICAgICAgIHsnZ2V0JzogJ2dldF9hdHRh Y2hfdGFibGVzJ31dLAogICAgICAgICAnc2VsZWN0X3NxbCc6IFt7J2dldCc6ICdzZWxlY3Rfc3Fs J31dLAogICAgICAgICAnaW5zZXJ0X3NxbCc6IFt7J2dldCc6ICdpbnNlcnRfc3FsJ31dLAogICAg ICAgICAndXBkYXRlX3NxbCc6IFt7J2dldCc6ICd1cGRhdGVfc3FsJ31dLAogICAgICAgICAnZGVs ZXRlX3NxbCc6IFt7J2dldCc6ICdkZWxldGVfc3FsJ31dCi0KICAgICB9KQogCi0gICAgZGVmIGNo ZWNrX3ByZWNvbmRpdGlvbihmKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRoaXMgZnVuY3Rpb24g d2lsbCBiZWhhdmUgYXMgYSBkZWNvcmF0b3Igd2hpY2ggd2lsbCBjaGVja3MKLSAgICAgICAgZGF0 YWJhc2UgY29ubmVjdGlvbiBiZWZvcmUgcnVubmluZyB2aWV3LCBpdCB3aWxsIGFsc28gYXR0YWNo ZXMKLSAgICAgICAgbWFuYWdlcixjb25uICYgdGVtcGxhdGVfcGF0aCBwcm9wZXJ0aWVzIHRvIHNl bGYKLSAgICAgICAgIiIiCi0KLSAgICAgICAgQHdyYXBzKGYpCi0gICAgICAgIGRlZiB3cmFwKCph cmdzLCAqKmt3YXJncyk6Ci0gICAgICAgICAgICAjIEhlcmUgYXJnc1swXSB3aWxsIGhvbGQgc2Vs ZiAmIGt3YXJncyB3aWxsIGhvbGQgZ2lkLHNpZCxkaWQKLSAgICAgICAgICAgIHNlbGYgPSBhcmdz WzBdCi0gICAgICAgICAgICBkcml2ZXIgPSBnZXRfZHJpdmVyKFBHX0RFRkFVTFRfRFJJVkVSKQot ICAgICAgICAgICAgZGlkID0ga3dhcmdzWydkaWQnXQotICAgICAgICAgICAgc2VsZi5tYW5hZ2Vy ID0gZHJpdmVyLmNvbm5lY3Rpb25fbWFuYWdlcihrd2FyZ3NbJ3NpZCddKQotICAgICAgICAgICAg c2VsZi5jb25uID0gc2VsZi5tYW5hZ2VyLmNvbm5lY3Rpb24oZGlkPWt3YXJnc1snZGlkJ10pCi0g ICAgICAgICAgICBzZWxmLnF0SWRlbnQgPSBkcml2ZXIucXRJZGVudAotICAgICAgICAgICAgc2Vs Zi5xdFR5cGVJZGVudCA9IGRyaXZlci5xdFR5cGVJZGVudAotICAgICAgICAgICAgIyBXZSBuZWVk IGRhdGxhc3RzeXNvaWQgdG8gY2hlY2sgaWYgY3VycmVudCB0YWJsZSBpcyBzeXN0ZW0gdGFibGUK LSAgICAgICAgICAgIHNlbGYuZGF0bGFzdHN5c29pZCA9IHNlbGYubWFuYWdlci5kYl9pbmZvWwot ICAgICAgICAgICAgICAgIGRpZAotICAgICAgICAgICAgXVsnZGF0bGFzdHN5c29pZCddIGlmIHNl bGYubWFuYWdlci5kYl9pbmZvIGlzIG5vdCBOb25lIGFuZCBcCi0gICAgICAgICAgICAgICAgZGlk IGluIHNlbGYubWFuYWdlci5kYl9pbmZvIGVsc2UgMAotCi0gICAgICAgICAgICB2ZXIgPSBzZWxm Lm1hbmFnZXIudmVyc2lvbgotICAgICAgICAgICAgIyBTZXQgdGhlIHRlbXBsYXRlIHBhdGggZm9y IHRoZSBTUUwgc2NyaXB0cwotICAgICAgICAgICAgc2VsZi50ZW1wbGF0ZV9wYXRoID0gJ3RhYmxl L3NxbC8jezB9IycuZm9ybWF0KHZlcikKLQotICAgICAgICAgICAgIyBUZW1wbGF0ZSBmb3IgQ29s dW1uICxjaGVjayBjb25zdHJhaW50IGFuZCBleGNsdXNpb24gY29uc3RyYWludCBub2RlCi0gICAg ICAgICAgICBzZWxmLmNvbHVtbl90ZW1wbGF0ZV9wYXRoID0gJ2NvbHVtbi9zcWwvI3swfSMnLmZv cm1hdCh2ZXIpCi0gICAgICAgICAgICBzZWxmLmNoZWNrX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0 aCA9ICdjaGVja19jb25zdHJhaW50L3NxbC8jezB9IycuZm9ybWF0KHZlcikKLSAgICAgICAgICAg IHNlbGYuZXhjbHVzaW9uX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCA9ICdleGNsdXNpb25fY29u c3RyYWludC9zcWwvI3swfSMnLmZvcm1hdCh2ZXIpCi0KLSAgICAgICAgICAgICMgVGVtcGxhdGUg Zm9yIFBLICYgVW5pcXVlIGNvbnN0cmFpbnQgbm9kZQotICAgICAgICAgICAgc2VsZi5pbmRleF9j b25zdHJhaW50X3RlbXBsYXRlX3BhdGggPSAnaW5kZXhfY29uc3RyYWludC9zcWwnCi0KLSAgICAg ICAgICAgICMgVGVtcGxhdGUgZm9yIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgbm9kZQotICAgICAg ICAgICAgc2VsZi5mb3JlaWduX2tleV90ZW1wbGF0ZV9wYXRoID0gJ2ZvcmVpZ25fa2V5L3NxbC8j ezB9IycuZm9ybWF0KHZlcikKLQotICAgICAgICAgICAgIyBUZW1wbGF0ZSBmb3IgaW5kZXggbm9k ZQotICAgICAgICAgICAgc2VsZi5pbmRleF90ZW1wbGF0ZV9wYXRoID0gJ2luZGV4L3NxbC8jezB9 IycuZm9ybWF0KHZlcikKLQotICAgICAgICAgICAgIyBUZW1wbGF0ZSBmb3IgdHJpZ2dlciBub2Rl Ci0gICAgICAgICAgICBzZWxmLnRyaWdnZXJfdGVtcGxhdGVfcGF0aCA9ICd0cmlnZ2VyL3NxbC8j ezB9IycuZm9ybWF0KHZlcikKLQotICAgICAgICAgICAgIyBUZW1wbGF0ZSBmb3IgcnVsZXMgbm9k ZQotICAgICAgICAgICAgc2VsZi5ydWxlc190ZW1wbGF0ZV9wYXRoID0gJ3J1bGVzL3NxbCcKLQot ICAgICAgICAgICAgIyBTdXBwb3J0ZWQgQUNMIGZvciB0YWJsZQotICAgICAgICAgICAgc2VsZi5h Y2wgPSBbJ2EnLCAncicsICd3JywgJ2QnLCAnRCcsICd4JywgJ3QnXQotCi0gICAgICAgICAgICAj IFN1cHBvcnRlZCBBQ0wgZm9yIGNvbHVtbnMKLSAgICAgICAgICAgIHNlbGYuY29sdW1uX2FjbCA9 IFsnYScsICdyJywgJ3cnLCAneCddCi0KLSAgICAgICAgICAgIHJldHVybiBmKCphcmdzLCAqKmt3 YXJncykKLQotICAgICAgICByZXR1cm4gd3JhcAotCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgor ICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBsaXN0KHNlbGYs IGdpZCwgc2lkLCBkaWQsIHNjaWQpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBmdW5jdGlv biBpcyB1c2VkIHRvIGxpc3QgYWxsIHRoZSB0YWJsZSBub2RlcyB3aXRoaW4gdGhhdCBjb2xsZWN0 aW9uLgpAQCAtMzMwLDEwICsyNTgsMTEgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmll dywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgUmV0dXJuczoKICAg ICAgICAgICAgIEpTT04gb2YgYXZhaWxhYmxlIHRhYmxlIG5vZGVzCiAgICAgICAgICIiIgotICAg ICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwn XSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWQ9ZGlkLCBzY2lkPXNjaWQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5 c29pZCkKKyAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgIi8iLmpv aW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAg ICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLAorICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxm LmRhdGxhc3RzeXNvaWQKKyAgICAgICAgKQogICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29u bi5leGVjdXRlX2RpY3QoU1FMKQogCiAgICAgICAgIGlmIG5vdCBzdGF0dXM6CkBAIC0zNDMsNyAr MjcyLDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIs IFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgICAgIHN0YXR1cz0yMDAKICAgICAgICAgKQogCi0g ICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRp dGlvbgogICAgIGRlZiBub2RlKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCk6CiAgICAg ICAgICIiIgogICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gbGlzdCBhbGwgdGhlIHRh YmxlIG5vZGVzIHdpdGhpbiB0aGF0IGNvbGxlY3Rpb24uCkBAIC0zNTksOSArMjg4LDEwIEBAIGNs YXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0 aW5ncyk6CiAgICAgICAgICAgICBKU09OIG9mIGF2YWlsYWJsZSB0YWJsZSBub2RlcwogICAgICAg ICAiIiIKICAgICAgICAgcmVzID0gW10KLSAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ25vZGVzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNjaWQ9c2NpZCwgdGlkPXRpZCkKKyAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAg ICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ25vZGVzLnNxbCdd KSwKKyAgICAgICAgICAgIHNjaWQ9c2NpZCwgdGlkPXRpZAorICAgICAgICApCiAgICAgICAgIHN0 YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQogICAgICAgICBpZiBu b3Qgc3RhdHVzOgogICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJv cm1zZz1yc2V0KQpAQCAtMzcyLDkgKzMwMiwxMCBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5v ZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgICAg IHJzZXRbJ3Jvd3MnXVswXVsnb2lkJ10sCiAgICAgICAgICAgICAgICAgc2NpZCwKICAgICAgICAg ICAgICAgICByc2V0Wydyb3dzJ11bMF1bJ25hbWUnXSwKLSAgICAgICAgICAgICAgICBpY29uPSJp Y29uLXRhYmxlIiwKKyAgICAgICAgICAgICAgICBpY29uPSJpY29uLXBhcnRpdGlvbiIgaWYgJ2lz X3BhcnRpdGlvbmVkJyBpbiByc2V0Wydyb3dzJ11bMF0gYW5kIHJzZXRbJ3Jvd3MnXVswXVsnaXNf cGFydGl0aW9uZWQnXSBlbHNlICJpY29uLXRhYmxlIiwKICAgICAgICAgICAgICAgICB0aWdnZXJf Y291bnQ9cnNldFsncm93cyddWzBdWyd0cmlnZ2VyY291bnQnXSwKLSAgICAgICAgICAgICAgICBo YXNfZW5hYmxlX3RyaWdnZXJzPXJzZXRbJ3Jvd3MnXVswXVsnaGFzX2VuYWJsZV90cmlnZ2Vycydd CisgICAgICAgICAgICAgICAgaGFzX2VuYWJsZV90cmlnZ2Vycz1yc2V0Wydyb3dzJ11bMF1bJ2hh c19lbmFibGVfdHJpZ2dlcnMnXSwKKyAgICAgICAgICAgICAgICBpc19wYXJ0aXRpb25lZD1yc2V0 Wydyb3dzJ11bMF1bJ2lzX3BhcnRpdGlvbmVkJ10gaWYgJ2lzX3BhcnRpdGlvbmVkJyBpbiByc2V0 Wydyb3dzJ11bMF0gZWxzZSBGYWxzZQogICAgICAgICAgICAgKQogCiAgICAgICAgIHJldHVybiBt YWtlX2pzb25fcmVzcG9uc2UoCkBAIC0zODIsOCArMzEzLDcgQEAgY2xhc3MgVGFibGVWaWV3KFBH Q2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAg ICAgIHN0YXR1cz0yMDAKICAgICAgICAgKQogCi0KLSAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisg ICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIG5vZGVzKHNlbGYs IGdpZCwgc2lkLCBkaWQsIHNjaWQpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBmdW5jdGlv biBpcyB1c2VkIHRvIGxpc3QgYWxsIHRoZSB0YWJsZSBub2RlcyB3aXRoaW4gdGhhdCBjb2xsZWN0 aW9uLgpAQCAtMzk4LDkgKzMyOCwxMCBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3 LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgSlNPTiBvZiBh dmFpbGFibGUgdGFibGUgbm9kZXMKICAgICAgICAgIiIiCiAgICAgICAgIHJlcyA9IFtdCi0gICAg ICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub2Rlcy5zcWwnXSksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2lkPXNjaWQpCisgICAgICAgIFNRTCA9IHJl bmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRl X3BhdGgsICdub2Rlcy5zcWwnXSksCisgICAgICAgICAgICBzY2lkPXNjaWQKKyAgICAgICAgKQog ICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKICAg ICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9cnNldCkKQEAgLTQxMSw5ICszNDIsMTAgQEAgY2xhc3MgVGFibGVWaWV3 KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAg ICAgICAgICAgICAgICAgcm93WydvaWQnXSwKICAgICAgICAgICAgICAgICAgICAgc2NpZCwKICAg ICAgICAgICAgICAgICAgICAgcm93WyduYW1lJ10sCi0gICAgICAgICAgICAgICAgICAgIGljb249 Imljb24tdGFibGUiLAorICAgICAgICAgICAgICAgICAgICBpY29uPSJpY29uLXBhcnRpdGlvbiIg aWYgJ2lzX3BhcnRpdGlvbmVkJyBpbiByb3cgYW5kIHJvd1snaXNfcGFydGl0aW9uZWQnXSBlbHNl ICJpY29uLXRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgdGlnZ2VyX2NvdW50PXJvd1sndHJp Z2dlcmNvdW50J10sCi0gICAgICAgICAgICAgICAgICAgIGhhc19lbmFibGVfdHJpZ2dlcnM9cm93 WydoYXNfZW5hYmxlX3RyaWdnZXJzJ10KKyAgICAgICAgICAgICAgICAgICAgaGFzX2VuYWJsZV90 cmlnZ2Vycz1yb3dbJ2hhc19lbmFibGVfdHJpZ2dlcnMnXSwKKyAgICAgICAgICAgICAgICAgICAg aXNfcGFydGl0aW9uZWQ9cm93Wydpc19wYXJ0aXRpb25lZCddIGlmICdpc19wYXJ0aXRpb25lZCcg aW4gcm93IGVsc2UgRmFsc2UKICAgICAgICAgICAgICAgICApKQogCiAgICAgICAgIHJldHVybiBt YWtlX2pzb25fcmVzcG9uc2UoCkBAIC00MjEsNyArMzUzLDcgQEAgY2xhc3MgVGFibGVWaWV3KFBH Q2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAg ICAgIHN0YXR1cz0yMDAKICAgICAgICAgKQogCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAg IEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBnZXRfYWxsX3RhYmxl cyhzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQ9Tm9uZSk6CiAgICAgICAgICIiIgogICAg ICAgICBBcmdzOgpAQCAtNDM1LDkgKzM2NywxMiBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5v ZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgUmV0 dXJucyB0aGUgbGl0cyBvZiB0YWJsZXMgcmVxdWlyZWQgZm9yIGNvbnN0cmFpbnRzLgogICAgICAg ICAiIiIKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdnZXRfdGFibGVzX2Zvcl9jb25zdHJhaW50cy5zcWwnXSksCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd19zeXNvYmo9c2VsZi5ibHVlcHJpbnQu c2hvd19zeXN0ZW1fb2JqZWN0cykKKyAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgK KyAgICAgICAgICAgICAgICAiLyIuam9pbihbCisgICAgICAgICAgICAgICAgICAgIHNlbGYudGFi bGVfdGVtcGxhdGVfcGF0aCwgJ2dldF90YWJsZXNfZm9yX2NvbnN0cmFpbnRzLnNxbCcKKyAgICAg ICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICBzaG93X3N5c29iaj1zZWxmLmJsdWVwcmlu dC5zaG93X3N5c3RlbV9vYmplY3RzCisgICAgICAgICAgICApCiAKICAgICAgICAgICAgIHN0YXR1 cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCiAKQEAgLTQ1Miw3ICszODcsNyBA QCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVt U2V0dGluZ3MpOgogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICBy ZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0cihlKSkKIAotICAgIEBjaGVj a19wcmVjb25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KICAg ICBkZWYgZ2V0X3RhYmxlX3ZhY3V1bShzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkPU5vbmUsIHRp ZD1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIEZldGNoIHRoZSBkZWZhdWx0IHZhbHVlcyBm b3IgdGFibGUgYXV0by12YWN1dW0KQEAgLTQ2OCw3ICs0MDMsNyBAQCBjbGFzcyBUYWJsZVZpZXco UEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAg ICAgICAgc3RhdHVzPTIwMAogICAgICAgICApCiAKLSAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisg ICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIGdldF90b2FzdF90 YWJsZV92YWN1dW0oc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZD1Ob25lLCB0aWQ9Tm9uZSk6CiAg ICAgICAgICIiIgogICAgICAgICBGZXRjaCB0aGUgZGVmYXVsdCB2YWx1ZXMgZm9yIHRvYXN0IHRh YmxlIGF1dG8tdmFjdXVtCkBAIC00ODQsNyArNDE5LDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hp bGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgICAg IHN0YXR1cz0yMDAKICAgICAgICAgKQogCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBC YXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBnZXRfYWNjZXNzX21ldGhv ZHMoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkPU5vbmUpOgogICAgICAgICAiIiIKICAg ICAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFjY2VzcyBtZXRob2RzLgpAQCAtNTAxLDkgKzQz NiwxMCBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwg VmFjdXVtU2V0dGluZ3MpOgogCiAgICAgICAgICIiIgogICAgICAgICByZXMgPSBbeydsYWJlbCc6 ICcnLCAndmFsdWUnOiAnJ31dCi0gICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgKLSAgICAg ICAgICAgICIvIi5qb2luKFtzZWxmLmV4Y2x1c2lvbl9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgs Ci0gICAgICAgICAgICAgICAgICAgICAgJ2dldF9hY2Nlc3NfbWV0aG9kcy5zcWwnXSkpCisgICAg ICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbCisgICAgICAgICAgICBzZWxmLmV4 Y2x1c2lvbl9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsICdnZXRfYWNjZXNzX21ldGhvZHMuc3Fs JworICAgICAgICBdKSkKKwogICAgICAgICBzdGF0dXMsIHJlc3QgPSBzZWxmLmNvbm4uZXhlY3V0 ZV8yZGFycmF5KHNxbCkKIAogICAgICAgICBpZiBub3Qgc3RhdHVzOgpAQCAtNTE4LDcgKzQ1NCw3 IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1 dW1TZXR0aW5ncyk6CiAgICAgICAgICAgICBzdGF0dXM9MjAwCiAgICAgICAgICkKIAotICAgIEBj aGVja19wcmVjb25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24K ICAgICBkZWYgZ2V0X29wZXJfY2xhc3Moc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkPU5v bmUpOgogICAgICAgICAiIiIKIApAQCAtNTM3LDkgKzQ3MywxMiBAQCBjbGFzcyBUYWJsZVZpZXco UEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAg ICB0cnk6CiAgICAgICAgICAgICBpZiBkYXRhIGFuZCAnaW5kZXh0eXBlJyBpbiBkYXRhOgogICAg ICAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKLSAgICAgICAgICAgICAgICAgICAg Ii8iLmpvaW4oW3NlbGYuZXhjbHVzaW9uX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfb3Blcl9jbGFzcy5zcWwnXSksCi0gICAgICAg ICAgICAgICAgICAgIGluZGV4dHlwZT1kYXRhWydpbmRleHR5cGUnXSkKKyAgICAgICAgICAgICAg ICAgICAgIi8iLmpvaW4oWworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leGNsdXNpb25f Y29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9v cGVyX2NsYXNzLnNxbCcKKyAgICAgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAg ICAgIGluZGV4dHlwZT1kYXRhWydpbmRleHR5cGUnXQorICAgICAgICAgICAgICAgICkKIAogICAg ICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwp CiAKQEAgLTU1NSw3ICs0OTQsNyBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBE YXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICBleGNlcHQgRXhjZXB0aW9u IGFzIGU6CiAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXN0cihlKSkKIAotICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5j aGVja19wcmVjb25kaXRpb24KICAgICBkZWYgZ2V0X29wZXJhdG9yKHNlbGYsIGdpZCwgc2lkLCBk aWQsIHNjaWQsIHRpZD1Ob25lKToKICAgICAgICAgIiIiCiAKQEAgLTU3NCwxMCArNTEzLDEzIEBA IGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1T ZXR0aW5ncyk6CiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIGRhdGEgYW5kICdjb2xfdHlw ZScgaW4gZGF0YToKICAgICAgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCi0gICAg ICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLmV4Y2x1c2lvbl9jb25zdHJhaW50X3RlbXBs YXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X29wZXJhdG9yLnNx bCddKSwKKyAgICAgICAgICAgICAgICAgICAgIi8iLmpvaW4oWworICAgICAgICAgICAgICAgICAg ICAgICAgc2VsZi5leGNsdXNpb25fY29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAg ICAgICAgICAgICAgICAgJ2dldF9vcGVyYXRvci5zcWwnCisgICAgICAgICAgICAgICAgICAgIF0p LAogICAgICAgICAgICAgICAgICAgICB0eXBlPWRhdGFbJ2NvbF90eXBlJ10sCi0gICAgICAgICAg ICAgICAgICAgIHNob3dfc3lzb2JqPXNlbGYuYmx1ZXByaW50LnNob3dfc3lzdGVtX29iamVjdHMp CisgICAgICAgICAgICAgICAgICAgIHNob3dfc3lzb2JqPXNlbGYuYmx1ZXByaW50LnNob3dfc3lz dGVtX29iamVjdHMKKyAgICAgICAgICAgICAgICApCiAKICAgICAgICAgICAgICAgICBzdGF0dXMs IHJlcyA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQogCkBAIC01OTMsNTA2ICs1MzUs NyBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFj dXVtU2V0dGluZ3MpOgogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAg ICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0cihlKSkKIAotICAgIGRl ZiBfY29sdW1uc19mb3JtYXR0ZXIoc2VsZiwgdGlkLCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAg ICAgIEFyZ3M6Ci0gICAgICAgICAgICB0aWQ6IFRhYmxlIE9JRAotICAgICAgICAgICAgZGF0YTog ZGljdCBvZiBxdWVyeSByZXN1bHQKLQotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgSXQg d2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1bHQKLSAgICAgICAgICAg IGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0IGZvciBjb2x1bW4gbm9kZQotICAgICAgICAiIiIK LSAgICAgICAgZm9yIGNvbHVtbiBpbiBkYXRhWydjb2x1bW5zJ106Ci0KLSAgICAgICAgICAgICMg V2UgbmVlZCB0byBmb3JtYXQgdmFyaWFibGVzIGFjY29yZGluZyB0byBjbGllbnQganMgY29sbGVj dGlvbgotICAgICAgICAgICAgaWYgJ2F0dG9wdGlvbnMnIGluIGNvbHVtbiBhbmQgY29sdW1uWydh dHRvcHRpb25zJ10gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICAgICAgc3Bjb3B0aW9ucyA9IFtd Ci0gICAgICAgICAgICAgICAgZm9yIHNwY29wdGlvbiBpbiBjb2x1bW5bJ2F0dG9wdGlvbnMnXToK LSAgICAgICAgICAgICAgICAgICAgaywgdiA9IHNwY29wdGlvbi5zcGxpdCgnPScpCi0gICAgICAg ICAgICAgICAgICAgIHNwY29wdGlvbnMuYXBwZW5kKHsnbmFtZSc6IGssICd2YWx1ZSc6IHZ9KQot Ci0gICAgICAgICAgICAgICAgY29sdW1uWydhdHRvcHRpb25zJ10gPSBzcGNvcHRpb25zCi0KLSAg ICAgICAgICAgICMgTmVlZCB0byBmb3JtYXQgc2VjdXJpdHkgbGFiZWxzIGFjY29yZGluZyB0byBj bGllbnQganMgY29sbGVjdGlvbgotICAgICAgICAgICAgaWYgJ3NlY2xhYmVscycgaW4gY29sdW1u IGFuZCBjb2x1bW5bJ3NlY2xhYmVscyddIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIHNl Y2xhYmVscyA9IFtdCi0gICAgICAgICAgICAgICAgZm9yIHNlY2xibHMgaW4gY29sdW1uWydzZWNs YWJlbHMnXToKLSAgICAgICAgICAgICAgICAgICAgaywgdiA9IHNlY2xibHMuc3BsaXQoJz0nKQot ICAgICAgICAgICAgICAgICAgICBzZWNsYWJlbHMuYXBwZW5kKHsncHJvdmlkZXInOiBrLCAnbGFi ZWwnOiB2fSkKLQotICAgICAgICAgICAgICAgIGNvbHVtblsnc2VjbGFiZWxzJ10gPSBzZWNsYWJl bHMKLQotICAgICAgICAgICAgaWYgJ2F0dG51bScgaW4gY29sdW1uIGFuZCBjb2x1bW5bJ2F0dG51 bSddIGlzIG5vdCBOb25lIGFuZCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1u WydhdHRudW0nXSA+IDA6Ci0gICAgICAgICAgICAgICAgIyBXZSBuZWVkIHRvIHBhcnNlICYgY29u dmVydCBBQ0wgY29taW5nIGZyb20gZGF0YWJhc2UgdG8ganNvbiBmb3JtYXQKLSAgICAgICAgICAg ICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuY29sdW1uX3RlbXBsYXRl X3BhdGgsICdhY2wuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0aWQ9dGlkLCBjbGlkPWNvbHVtblsnYXR0bnVtJ10pCi0gICAgICAgICAgICAgICAgc3RhdHVz LCBhY2wgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKLQotICAgICAgICAgICAgICAgIGlm IG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9YWNsKQotCi0gICAgICAgICAgICAgICAgIyBXZSB3aWxsIHNldCBnZXQg cHJpdmlsZWdlcyBmcm9tIGFjbCBzcWwgc28gd2UgZG9uJ3QgbmVlZAotICAgICAgICAgICAgICAg ICMgaXQgZnJvbSBwcm9wZXJ0aWVzIHNxbAotICAgICAgICAgICAgICAgIGNvbHVtblsnYXR0YWNs J10gPSBbXQotCi0gICAgICAgICAgICAgICAgZm9yIHJvdyBpbiBhY2xbJ3Jvd3MnXToKLSAgICAg ICAgICAgICAgICAgICAgcHJpdiA9IHBhcnNlX3ByaXZfZnJvbV9kYihyb3cpCi0gICAgICAgICAg ICAgICAgICAgIGNvbHVtbi5zZXRkZWZhdWx0KHJvd1snZGVmdHlwZSddLCBbXSkuYXBwZW5kKHBy aXYpCi0KLSAgICAgICAgICAgICAgICAjIHdlIGFyZSByZWNlaXZpbmcgcmVxdWVzdCB3aGVuIGlu IGVkaXQgbW9kZQotICAgICAgICAgICAgICAgICMgd2Ugd2lsbCBzZW5kIGZpbHRlcmVkIHR5cGVz IHJlbGF0ZWQgdG8gY3VycmVudCB0eXBlCi0gICAgICAgICAgICAgICAgcHJlc2VudF90eXBlID0g Y29sdW1uWydjbHR5cGUnXQotCi0gICAgICAgICAgICAgICAgdHlwZV9pZCA9IGNvbHVtblsnYXR0 dHlwaWQnXQotCi0gICAgICAgICAgICAgICAgZnVsbHR5cGUgPSBzZWxmLmdldF9mdWxsX3R5cGUo Ci0gICAgICAgICAgICAgICAgICAgIGNvbHVtblsndHlwbnNwbmFtZSddLCBjb2x1bW5bJ3R5cG5h bWUnXSwKLSAgICAgICAgICAgICAgICAgICAgY29sdW1uWydpc2R1cCddLCBjb2x1bW5bJ2F0dG5k aW1zJ10sIGNvbHVtblsnYXR0dHlwbW9kJ10KLSAgICAgICAgICAgICAgICApCi0KLSAgICAgICAg ICAgICAgICBsZW5ndGggPSBGYWxzZQotICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9IEZhbHNl Ci0gICAgICAgICAgICAgICAgaWYgJ2VsZW1vaWQnIGluIGNvbHVtbjoKLSAgICAgICAgICAgICAg ICAgICAgbGVuZ3RoLCBwcmVjaXNpb24sIHR5cGV2YWwgPSBzZWxmLmdldF9sZW5ndGhfcHJlY2lz aW9uKGNvbHVtblsnZWxlbW9pZCddKQotCi0gICAgICAgICAgICAgICAgIyBTZXQgbGVuZ3RoIGFu ZCBwcmVjaXNpb24gdG8gTm9uZQotICAgICAgICAgICAgICAgIGNvbHVtblsnYXR0bGVuJ10gPSBO b25lCi0gICAgICAgICAgICAgICAgY29sdW1uWydhdHRwcmVjaXNpb24nXSA9IE5vbmUKLQotICAg ICAgICAgICAgICAgICMgSWYgd2UgaGF2ZSBsZW5ndGggJiBwcmVjaXNpb24gYm90aAotICAgICAg ICAgICAgICAgIGlmIGxlbmd0aCBhbmQgcHJlY2lzaW9uOgotICAgICAgICAgICAgICAgICAgICBt YXRjaE9iaiA9IHJlLnNlYXJjaChyJyhcZCspLChcZCspJywgZnVsbHR5cGUpCi0gICAgICAgICAg ICAgICAgICAgIGlmIG1hdGNoT2JqOgotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uWydh dHRsZW4nXSA9IG1hdGNoT2JqLmdyb3VwKDEpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1 bW5bJ2F0dHByZWNpc2lvbiddID0gbWF0Y2hPYmouZ3JvdXAoMikKLSAgICAgICAgICAgICAgICBl bGlmIGxlbmd0aDoKLSAgICAgICAgICAgICAgICAgICAgIyBJZiB3ZSBoYXZlIGxlbmd0aCBvbmx5 Ci0gICAgICAgICAgICAgICAgICAgIG1hdGNoT2JqID0gcmUuc2VhcmNoKHInKFxkKyknLCBmdWxs dHlwZSkKLSAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2hPYmo6Ci0gICAgICAgICAgICAgICAg ICAgICAgICBjb2x1bW5bJ2F0dGxlbiddID0gbWF0Y2hPYmouZ3JvdXAoMSkKLSAgICAgICAgICAg ICAgICAgICAgICAgIGNvbHVtblsnYXR0cHJlY2lzaW9uJ10gPSBOb25lCi0KLQotICAgICAgICAg ICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5jb2x1bW5fdGVtcGxh dGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdpc19yZWZlcmVuY2VkLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGlkPXRpZCwgY2xpZD1jb2x1bW5bJ2F0dG51bSddKQotCi0gICAgICAgICAgICAgICAg c3RhdHVzLCBpc19yZWZlcmVuY2UgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoU1FMKQotCi0g ICAgICAgICAgICAgICAgZWRpdF90eXBlc19saXN0ID0gbGlzdCgpCi0gICAgICAgICAgICAgICAg IyBXZSB3aWxsIG5lZWQgcHJlc2VudCB0eXBlIGluIGVkaXQgbW9kZQotCi0gICAgICAgICAgICAg ICAgaWYgY29sdW1uWyd0eXBuc3BuYW1lJ10gPT0gInBnX2NhdGFsb2ciIG9yIGNvbHVtblsndHlw bnNwbmFtZSddID09ICJwdWJsaWMiOgotICAgICAgICAgICAgICAgICAgICBlZGl0X3R5cGVzX2xp c3QuYXBwZW5kKHByZXNlbnRfdHlwZSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAg ICAgICAgICAgICB0ID0gc2VsZi5xdFR5cGVJZGVudChzZWxmLmNvbm4sIGNvbHVtblsndHlwbnNw bmFtZSddLCBwcmVzZW50X3R5cGUpCi0gICAgICAgICAgICAgICAgICAgIGVkaXRfdHlwZXNfbGlz dC5hcHBlbmQodCkKLSAgICAgICAgICAgICAgICAgICAgY29sdW1uWydjbHR5cGUnXSA9IHQKLQot ICAgICAgICAgICAgICAgIGlmIGludChpc19yZWZlcmVuY2UpID09IDA6Ci0gICAgICAgICAgICAg ICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5jb2x1bW5fdGVtcGxh dGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnZWRpdF9tb2RlX3R5cGVzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHR5cGVfaWQ9dHlwZV9pZCkKLSAgICAgICAgICAgICAgICAgICAgc3Rh dHVzLCByc2V0ID0gc2VsZi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCi0KLSAgICAgICAgICAg ICAgICAgICAgZm9yIHJvdyBpbiByc2V0Wydyb3dzJ106Ci0gICAgICAgICAgICAgICAgICAgICAg ICBlZGl0X3R5cGVzX2xpc3QuYXBwZW5kKHJvd1sndHlwbmFtZSddKQotICAgICAgICAgICAgICAg IGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIGVkaXRfdHlwZXNfbGlzdC5hcHBlbmQocHJlc2Vu dF90eXBlKQotCi0gICAgICAgICAgICAgICAgY29sdW1uWydlZGl0X3R5cGVzJ10gPSBlZGl0X3R5 cGVzX2xpc3QKLSAgICAgICAgICAgICAgICBjb2x1bW5bJ2NsdHlwZSddID0gRGF0YVR5cGVSZWFk ZXIucGFyc2VfdHlwZV9uYW1lKGNvbHVtblsnY2x0eXBlJ10pCi0KLSAgICAgICAgICAgICAgICBp ZiAnaW5ka2V5JyBpbiBjb2x1bW46Ci0gICAgICAgICAgICAgICAgICAgICMgQ3VycmVudCBjb2x1 bW4KLSAgICAgICAgICAgICAgICAgICAgYXR0bnVtID0gc3RyKGNvbHVtblsnYXR0bnVtJ10pCi0K LSAgICAgICAgICAgICAgICAgICAgIyBTaW5nbGUvTGlzdCBvZiBwcmltYXJ5IGtleSBjb2x1bW4o cykKLSAgICAgICAgICAgICAgICAgICAgaW5ka2V5ID0gc3RyKGNvbHVtblsnaW5ka2V5J10pCi0K LSAgICAgICAgICAgICAgICAgICAgIyBXZSB3aWxsIGNoZWNrIGlmIGNvbHVtbiBpcyBpbiBwcmlt YXJ5IGNvbHVtbihzKQotICAgICAgICAgICAgICAgICAgICBpZiBhdHRudW0gaW4gaW5ka2V5LnNw bGl0KCIgIik6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5bJ2lzX3ByaW1hcnlfa2V5 J10gPSBUcnVlCi0gICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAg ICAgICBjb2x1bW5bJ2lzX3ByaW1hcnlfa2V5J10gPSBGYWxzZQotCi0gICAgICAgIHJldHVybiBk YXRhCi0KLSAgICBkZWYgX2luZGV4X2NvbnN0cmFpbnRzX2Zvcm1hdHRlcihzZWxmLCBkaWQsIHRp ZCwgZGF0YSk6Ci0gICAgICAgICIiIgotICAgICAgICBBcmdzOgotICAgICAgICAgICAgdGlkOiBU YWJsZSBPSUQKLSAgICAgICAgICAgIGRhdGE6IGRpY3Qgb2YgcXVlcnkgcmVzdWx0Ci0KLSAgICAg ICAgUmV0dXJuczoKLSAgICAgICAgICAgIEl0IHdpbGwgcmV0dXJuIGZvcm1hdHRlZCBvdXRwdXQg b2YgcXVlcnkgcmVzdWx0Ci0gICAgICAgICAgICBhcyBwZXIgY2xpZW50IG1vZGVsIGZvcm1hdCBm b3IgaW5kZXggY29uc3RyYWludCBub2RlCi0gICAgICAgICIiIgotCi0gICAgICAgICMgV2Ugd2ls bCBmZXRjaCBhbGwgdGhlIGluZGV4IGNvbnN0cmFpbnRzIGZvciB0aGUgdGFibGUKLSAgICAgICAg aW5kZXhfY29uc3RyYWludHMgPSB7Ci0gICAgICAgICAgICAncCc6ICdwcmltYXJ5X2tleScsICd1 JzogJ3VuaXF1ZV9jb25zdHJhaW50JwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIGN0eXBlIGlu IGluZGV4X2NvbnN0cmFpbnRzLmtleXMoKToKLSAgICAgICAgICAgIGRhdGFbaW5kZXhfY29uc3Ry YWludHNbY3R5cGVdXSA9IFtdCi0KLSAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgi LyIuam9pbihbc2VsZi5pbmRleF9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWQ9ZGlkLCB0aWQ9dGlkLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRfdHlwZT1jdHlwZSkKLSAgICAg ICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCi0KLSAgICAg ICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3Nl cnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCi0KLSAgICAgICAgICAgIGZvciByb3cgaW4gcmVzWydy b3dzJ106Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gcm93Ci0gICAgICAgICAgICAgICAgc3Fs ID0gcmVuZGVyX3RlbXBsYXRlKAotICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5p bmRleF9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnZ2V0X2NvbnN0cmFpbnRfY29scy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgIGNp ZD1yb3dbJ29pZCddLAotICAgICAgICAgICAgICAgICAgICBjb2xjbnQ9cm93WydpbmRuYXR0cydd KQotICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChz cWwpCi0KLSAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAgICAg ICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKLQotICAgICAgICAg ICAgICAgIGNvbHVtbnMgPSBbXQotICAgICAgICAgICAgICAgIGZvciByIGluIHJlc1sncm93cydd OgotICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLmFwcGVuZCh7ImNvbHVtbiI6IHJbJ2NvbHVt biddLnN0cmlwKCciJyl9KQotCi0gICAgICAgICAgICAgICAgcmVzdWx0Wydjb2x1bW5zJ10gPSBj b2x1bW5zCi0KLSAgICAgICAgICAgICAgICAjIElmIG5vdCBleGlzdHMgdGhlbiBjcmVhdGUgbGlz dCBhbmQvb3IgYXBwZW5kIGludG8KLSAgICAgICAgICAgICAgICAjIGV4aXN0aW5nIGxpc3QgWyBB ZGRpbmcgaW50byBtYWluIGRhdGEgZGljdF0KLSAgICAgICAgICAgICAgICBkYXRhLnNldGRlZmF1 bHQoaW5kZXhfY29uc3RyYWludHNbY3R5cGVdLCBbXSkuYXBwZW5kKHJlc3VsdCkKLQotICAgICAg ICByZXR1cm4gZGF0YQotCi0gICAgZGVmIF9mb3JlaWduX2tleV9mb3JtYXR0ZXIoc2VsZiwgdGlk LCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICB0aWQ6IFRh YmxlIE9JRAotICAgICAgICAgICAgZGF0YTogZGljdCBvZiBxdWVyeSByZXN1bHQKLQotICAgICAg ICBSZXR1cm5zOgotICAgICAgICAgICAgSXQgd2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBv ZiBxdWVyeSByZXN1bHQKLSAgICAgICAgICAgIGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0IGZv ciBmb3JlaWduIGtleSBjb25zdHJhaW50IG5vZGUKLSAgICAgICAgIiIiCi0KLSAgICAgICAgIyBX ZSB3aWxsIGZldGNoIGFsbCB0aGUgaW5kZXggY29uc3RyYWludHMgZm9yIHRoZSB0YWJsZQotICAg ICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuZm9yZWlnbl9rZXlfdGVt cGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJv cGVydGllcy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkKQot Ci0gICAgICAgIHN0YXR1cywgcmVzdWx0ID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCi0K LSAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2 ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzdWx0KQotCi0gICAgICAgIGZvciBmayBpbiByZXN1bHRbJ3Jv d3MnXToKLQotICAgICAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxm LmZvcmVpZ25fa2V5X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdnZXRfY29uc3RyYWludF9jb2xzLnNxbCddKSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGtleXM9emlwKGZrWydjb25ma2V5J10sIGZrWydjb25rZXknXSksCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZnJlbGlkPWZrWydjb25mcmVsaWQnXSkKLQot ICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKLQot ICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJu YWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKLQotICAgICAgICAgICAgY29sdW1ucyA9IFtd Ci0gICAgICAgICAgICBjb2xzID0gW10KLSAgICAgICAgICAgIGZvciByb3cgaW4gcmVzWydyb3dz J106Ci0gICAgICAgICAgICAgICAgY29sdW1ucy5hcHBlbmQoeyJsb2NhbF9jb2x1bW4iOiByb3db J2NvbmF0dG5hbWUnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5j ZXMiOiBma1snY29uZnJlbGlkJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJy ZWZlcmVuY2VkIjogcm93Wydjb25mYXR0bmFtZSddfSkKLSAgICAgICAgICAgICAgICBjb2xzLmFw cGVuZChyb3dbJ2NvbmF0dG5hbWUnXSkKLQotICAgICAgICAgICAgZmtbJ2NvbHVtbnMnXSA9IGNv bHVtbnMKLQotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxm LmZvcmVpZ25fa2V5X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdnZXRfcGFyZW50LnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0aWQ9ZmtbJ2NvbHVtbnMnXVswXVsncmVmZXJlbmNlcyddKQotCi0gICAg ICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKLSAg ICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFs X3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQotCi0gICAgICAgICAgICBma1sncmVtb3RlX3Nj aGVtYSddID0gcnNldFsncm93cyddWzBdWydzY2hlbWEnXQotICAgICAgICAgICAgZmtbJ3JlbW90 ZV90YWJsZSddID0gcnNldFsncm93cyddWzBdWyd0YWJsZSddCi0KLSAgICAgICAgICAgIGNvdmVy aW5naW5kZXggPSBzZWxmLnNlYXJjaF9jb3ZlcmluZ2luZGV4KHRpZCwgY29scykKLQotICAgICAg ICAgICAgZmtbJ2NvdmVyaW5naW5kZXgnXSA9IGNvdmVyaW5naW5kZXgKLSAgICAgICAgICAgIGlm IGNvdmVyaW5naW5kZXg6Ci0gICAgICAgICAgICAgICAgZmtbJ2F1dG9pbmRleCddID0gVHJ1ZQot ICAgICAgICAgICAgICAgIGZrWydoYXNpbmRleCddID0gVHJ1ZQotICAgICAgICAgICAgZWxzZToK LSAgICAgICAgICAgICAgICBma1snYXV0b2luZGV4J10gPSBGYWxzZQotICAgICAgICAgICAgICAg IGZrWydoYXNpbmRleCddID0gRmFsc2UKLSAgICAgICAgICAgICMgSWYgbm90IGV4aXN0cyB0aGVu IGNyZWF0ZSBsaXN0IGFuZC9vciBhcHBlbmQgaW50bwotICAgICAgICAgICAgIyBleGlzdGluZyBs aXN0IFsgQWRkaW5nIGludG8gbWFpbiBkYXRhIGRpY3RdCi0gICAgICAgICAgICBkYXRhLnNldGRl ZmF1bHQoJ2ZvcmVpZ25fa2V5JywgW10pLmFwcGVuZChmaykKLQotICAgICAgICByZXR1cm4gZGF0 YQotCi0gICAgZGVmIF9jaGVja19jb25zdHJhaW50X2Zvcm1hdHRlcihzZWxmLCB0aWQsIGRhdGEp OgotICAgICAgICAiIiIKLSAgICAgICAgQXJnczoKLSAgICAgICAgICAgIHRpZDogVGFibGUgT0lE Ci0gICAgICAgICAgICBkYXRhOiBkaWN0IG9mIHF1ZXJ5IHJlc3VsdAotCi0gICAgICAgIFJldHVy bnM6Ci0gICAgICAgICAgICBJdCB3aWxsIHJldHVybiBmb3JtYXR0ZWQgb3V0cHV0IG9mIHF1ZXJ5 IHJlc3VsdAotICAgICAgICAgICAgYXMgcGVyIGNsaWVudCBtb2RlbCBmb3JtYXQgZm9yIGNoZWNr IGNvbnN0cmFpbnQgbm9kZQotICAgICAgICAiIiIKLQotICAgICAgICAjIFdlIHdpbGwgZmV0Y2gg YWxsIHRoZSBpbmRleCBjb25zdHJhaW50cyBmb3IgdGhlIHRhYmxlCi0gICAgICAgIFNRTCA9IHJl bmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5jaGVja19jb25zdHJhaW50X3RlbXBsYXRlX3Bh dGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMu c3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCkKLQotICAgICAg ICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQotCi0gICAgICAgIGlm IG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVy cm9ybXNnPXJlcykKLSAgICAgICAgIyBJZiBub3QgZXhpc3RzIHRoZW4gY3JlYXRlIGxpc3QgYW5k L29yIGFwcGVuZCBpbnRvCi0gICAgICAgICMgZXhpc3RpbmcgbGlzdCBbIEFkZGluZyBpbnRvIG1h aW4gZGF0YSBkaWN0XQotCi0gICAgICAgIGRhdGFbJ2NoZWNrX2NvbnN0cmFpbnQnXSA9IHJlc1sn cm93cyddCi0KLSAgICAgICAgcmV0dXJuIGRhdGEKLQotICAgIGRlZiBfZXhjbHVzaW9uX2NvbnN0 cmFpbnRfZm9ybWF0dGVyKHNlbGYsIGRpZCwgdGlkLCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAg ICAgIEFyZ3M6Ci0gICAgICAgICAgICB0aWQ6IFRhYmxlIE9JRAotICAgICAgICAgICAgZGF0YTog ZGljdCBvZiBxdWVyeSByZXN1bHQKLQotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgSXQg d2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1bHQKLSAgICAgICAgICAg IGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0IGZvciBleGNsdXNpb24gY29uc3RyYWludCBub2Rl Ci0gICAgICAgICIiIgotCi0gICAgICAgICMgV2Ugd2lsbCBmZXRjaCBhbGwgdGhlIGluZGV4IGNv bnN0cmFpbnRzIGZvciB0aGUgdGFibGUKLSAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFtzZWxmLmV4Y2x1c2lvbl9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRpZCwgdGlkPXRpZCkKLQotICAgICAgICBz dGF0dXMsIHJlc3VsdCA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3Qoc3FsKQotCi0gICAgICAgIGlm IG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVy cm9ybXNnPXJlc3VsdCkKLQotICAgICAgICBmb3IgZXggaW4gcmVzdWx0Wydyb3dzJ106Ci0KLSAg ICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5leGNsdXNpb25f Y29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnZ2V0X2NvbnN0cmFpbnRfY29scy5zcWwnXSksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2lkPWV4WydvaWQnXSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb2xjbnQ9ZXhbJ2luZG5hdHRzJ10pCi0KLSAgICAgICAgICAgIHN0YXR1 cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCi0KLSAgICAgICAgICAgIGlmIG5v dCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihl cnJvcm1zZz1yZXMpCi0KLSAgICAgICAgICAgIGNvbHVtbnMgPSBbXQotICAgICAgICAgICAgZm9y IHJvdyBpbiByZXNbJ3Jvd3MnXToKLSAgICAgICAgICAgICAgICBpZiByb3dbJ29wdGlvbnMnXSAm IDE6Ci0gICAgICAgICAgICAgICAgICAgIG9yZGVyID0gRmFsc2UKLSAgICAgICAgICAgICAgICAg ICAgbnVsbHNfb3JkZXIgPSBUcnVlIGlmIChyb3dbJ29wdGlvbnMnXSAmIDIpIGVsc2UgRmFsc2UK LSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICBvcmRlciA9IFRydWUK LSAgICAgICAgICAgICAgICAgICAgbnVsbHNfb3JkZXIgPSBUcnVlIGlmIChyb3dbJ29wdGlvbnMn XSAmIDIpIGVsc2UgRmFsc2UKLQotICAgICAgICAgICAgICAgIGNvbHVtbnMuYXBwZW5kKHsiY29s dW1uIjogcm93Wydjb2xkZWYnXS5zdHJpcCgnIicpLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAib3Blcl9jbGFzcyI6IHJvd1snb3BjbmFtZSddLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAib3JkZXIiOiBvcmRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIm51bGxzX29yZGVyIjogbnVsbHNfb3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJvcGVyYXRvciI6IHJvd1snb3BybmFtZSddLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiY29sX3R5cGUiOiByb3dbJ2RhdGF0eXBlJ10KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfSkKLQotICAgICAgICAgICAgZXhbJ2NvbHVtbnMnXSA9IGNvbHVt bnMKLSAgICAgICAgICAgICMgSWYgbm90IGV4aXN0cyB0aGVuIGNyZWF0ZSBsaXN0IGFuZC9vciBh cHBlbmQgaW50bwotICAgICAgICAgICAgIyBleGlzdGluZyBsaXN0IFsgQWRkaW5nIGludG8gbWFp biBkYXRhIGRpY3RdCi0gICAgICAgICAgICBkYXRhLnNldGRlZmF1bHQoJ2V4Y2x1ZGVfY29uc3Ry YWludCcsIFtdKS5hcHBlbmQoZXgpCi0KLSAgICAgICAgcmV0dXJuIGRhdGEKLQotICAgIGRlZiBz ZWFyY2hfY292ZXJpbmdpbmRleChzZWxmLCB0aWQsIGNvbHMpOgotICAgICAgICAiIiIKLQotICAg ICAgICBBcmdzOgotICAgICAgICAgIHRpZDogVGFibGUgaWQKLSAgICAgICAgICBjb2xzOiBjb2x1 bW4gbGlzdAotCi0gICAgICAgIFJldHVybnM6Ci0KLSAgICAgICAgIiIiCi0KLSAgICAgICAgY29s cyA9IHNldChjb2xzKQotICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3Nl bGYuZm9yZWlnbl9rZXlfdGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnZ2V0X2NvbnN0cmFpbnRzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRpZD10aWQpCi0gICAgICAgIHN0YXR1cywgY29uc3RyYWludHMgPSBzZWxm LmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKLQotICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAg ICAgICAgcmFpc2UgRXhjZXB0aW9uKGNvbnN0cmFpbnRzKQotCi0gICAgICAgIGZvciBjb3N0cm50 IGluIGNvbnN0cmFpbnRzWydyb3dzJ106Ci0KLSAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1w bGF0ZSgKLSAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5mb3JlaWduX2tleV90ZW1wbGF0 ZV9wYXRoLCAnZ2V0X2NvbHMuc3FsJ10pLAotICAgICAgICAgICAgICAgIGNpZD1jb3N0cm50Wydv aWQnXSwKLSAgICAgICAgICAgICAgICBjb2xjbnQ9Y29zdHJudFsnaW5kbmF0dHMnXSkKLSAgICAg ICAgICAgIHN0YXR1cywgcmVzdCA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3Qoc3FsKQotCi0gICAg ICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9z ZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzdCkKLQotICAgICAgICAgICAgaW5kZXhjb2xzID0gc2V0 KCkKLSAgICAgICAgICAgIGZvciByIGluIHJlc3RbJ3Jvd3MnXToKLSAgICAgICAgICAgICAgICBp bmRleGNvbHMuYWRkKHJbJ2NvbHVtbiddLnN0cmlwKCciJykpCi0KLSAgICAgICAgICAgIGlmIGxl bihjb2xzIC0gaW5kZXhjb2xzKSA9PSBsZW4oaW5kZXhjb2xzIC0gY29scykgPT0gMDoKLSAgICAg ICAgICAgICAgICByZXR1cm4gY29zdHJudFsiaWR4bmFtZSJdCi0KLSAgICAgICAgcmV0dXJuIE5v bmUKLQotICAgIGRlZiBfZm9ybWF0dGVyKHNlbGYsIGRpZCwgc2NpZCwgdGlkLCBkYXRhKToKLSAg ICAgICAgIiIiCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBkYXRhOiBkaWN0IG9mIHF1ZXJ5 IHJlc3VsdAotICAgICAgICAgICAgc2NpZDogc2NoZW1hIG9pZAotICAgICAgICAgICAgdGlkOiB0 YWJsZSBvaWQKLQotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgSXQgd2lsbCByZXR1cm4g Zm9ybWF0dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1bHQKLSAgICAgICAgICAgIGFzIHBlciBjbGll bnQgbW9kZWwgZm9ybWF0Ci0gICAgICAgICIiIgotICAgICAgICAjIE5lZWQgdG8gZm9ybWF0IHNl Y3VyaXR5IGxhYmVscyBhY2NvcmRpbmcgdG8gY2xpZW50IGpzIGNvbGxlY3Rpb24KLSAgICAgICAg aWYgJ3NlY2xhYmVscycgaW4gZGF0YSBhbmQgZGF0YVsnc2VjbGFiZWxzJ10gaXMgbm90IE5vbmU6 Ci0gICAgICAgICAgICBzZWNsYWJlbHMgPSBbXQotICAgICAgICAgICAgZm9yIHNlY2xibHMgaW4g ZGF0YVsnc2VjbGFiZWxzJ106Ci0gICAgICAgICAgICAgICAgaywgdiA9IHNlY2xibHMuc3BsaXQo Jz0nKQotICAgICAgICAgICAgICAgIHNlY2xhYmVscy5hcHBlbmQoeydwcm92aWRlcic6IGssICds YWJlbCc6IHZ9KQotCi0gICAgICAgICAgICBkYXRhWydzZWNsYWJlbHMnXSA9IHNlY2xhYmVscwot Ci0gICAgICAgICMgV2UgbmVlZCB0byBwYXJzZSAmIGNvbnZlcnQgQUNMIGNvbWluZyBmcm9tIGRh dGFiYXNlIHRvIGpzb24gZm9ybWF0Ci0gICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIu am9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAnYWNsLnNxbCddKSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRpZD10aWQsIHNjaWQ9c2NpZCkKLSAgICAgICAgc3RhdHVzLCBhY2wgPSBz ZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKLSAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9YWNsKQotCi0gICAg ICAgICMgV2Ugd2lsbCBzZXQgZ2V0IHByaXZpbGVnZXMgZnJvbSBhY2wgc3FsIHNvIHdlIGRvbid0 IG5lZWQKLSAgICAgICAgIyBpdCBmcm9tIHByb3BlcnRpZXMgc3FsCi0gICAgICAgIGZvciByb3cg aW4gYWNsWydyb3dzJ106Ci0gICAgICAgICAgICBwcml2ID0gcGFyc2VfcHJpdl9mcm9tX2RiKHJv dykKLSAgICAgICAgICAgIGlmIHJvd1snZGVmdHlwZSddIGluIGRhdGE6Ci0gICAgICAgICAgICAg ICAgZGF0YVtyb3dbJ2RlZnR5cGUnXV0uYXBwZW5kKHByaXYpCi0gICAgICAgICAgICBlbHNlOgot ICAgICAgICAgICAgICAgIGRhdGFbcm93WydkZWZ0eXBlJ11dID0gW3ByaXZdCi0KLSAgICAgICAg IyBXZSB3aWxsIGFkZCBBdXRvIHZhY3V1bSBkZWZhdWx0cyB3aXRoIG91dCByZXN1bHQgZm9yIGdy aWQKLSAgICAgICAgZGF0YVsndmFjdXVtX3RhYmxlJ10gPSBzZWxmLnBhcnNlX3ZhY3V1bV9kYXRh KHNlbGYuY29ubiwgZGF0YSwgJ3RhYmxlJykKLSAgICAgICAgZGF0YVsndmFjdXVtX3RvYXN0J10g PSBzZWxmLnBhcnNlX3ZhY3V1bV9kYXRhKHNlbGYuY29ubiwgZGF0YSwgJ3RvYXN0JykKLQotICAg ICAgICAjIEZldGNoIGNvbHVtbnMgZm9yIHRoZSB0YWJsZSBsb2dpYwotICAgICAgICAjCi0gICAg ICAgICMgMSkgQ2hlY2sgaWYgb2ZfdHlwZSBhbmQgaW5oZXJpdGVkIHRhYmxlcyBhcmUgcHJlc2Vu dD8KLSAgICAgICAgIyAyKSBJZiB5ZXMgdGhlbiBGZXRjaCBhbGwgdGhlIGNvbHVtbnMgZm9yIG9m X3R5cGUgYW5kIGluaGVyaXRlZCB0YWJsZXMKLSAgICAgICAgIyAzKSBBZGQgY29sdW1ucyBpbiBj b2x1bW5zIGNvbGxlY3Rpb24KLSAgICAgICAgIyA0KSBGaW5kIGFsbCB0aGUgY29sdW1ucyBmb3Ig dGFibGVzIGFuZCBmaWx0ZXIgb3V0IGNvbHVtbnMgd2hpY2ggYXJlCi0gICAgICAgICMgICBub3Qg aW5oZXJpdGVkIGZyb20gYW55IHRhYmxlICYgZm9ybWF0IHRoZW0gb25lIGJ5IG9uZQotCi0gICAg ICAgICMgR2V0IG9mX3R5cGUgdGFibGUgY29sdW1ucyBhbmQgYWRkIGl0IGludG8gY29sdW1ucyBk aWN0Ci0gICAgICAgIGlmIGRhdGFbJ3R5cG5hbWUnXToKLSAgICAgICAgICAgIFNRTCA9IHJlbmRl cl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2NvbHVtbnNfZm9yX3RhYmxlLnNxbCdd KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bmFtZT1kYXRhWyd0eXBuYW1l J10pCi0KLSAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChT UUwpCi0gICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAgIHJldHVybiBp bnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQotICAgICAgICAgICAgZGF0YVsnY29s dW1ucyddID0gcmVzWydyb3dzJ10KLQotICAgICAgICAjIEdldCBpbmhlcml0ZWQgdGFibGUocykg Y29sdW1ucyBhbmQgYWRkIGl0IGludG8gY29sdW1ucyBkaWN0Ci0gICAgICAgIGVsaWYgZGF0YVsn Y29sbF9pbmhlcml0cyddIGFuZCBsZW4oZGF0YVsnY29sbF9pbmhlcml0cyddKSA+IDA6Ci0gICAg ICAgICAgICBjb2x1bW5zID0gW10KLSAgICAgICAgICAgICMgUmV0dXJuIGFsbCB0YWJsZXMgd2hp Y2ggY2FuIGJlIGluaGVyaXRlZCAmIGRvIG5vdCBzaG93Ci0gICAgICAgICAgICAjIHN5c3RlbSBj b2x1bW5zCi0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYu dGVtcGxhdGVfcGF0aCwgJ2dldF9pbmhlcml0cy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2hvd19zeXN0ZW1fb2JqZWN0cz1GYWxzZQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29u bi5leGVjdXRlXzJkYXJyYXkoU1FMKQotICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAg ICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJzZXQpCi0K LSAgICAgICAgICAgIGZvciByb3cgaW4gcnNldFsncm93cyddOgotICAgICAgICAgICAgICAgIGlm IHJvd1snaW5oZXJpdHMnXSBpbiBkYXRhWydjb2xsX2luaGVyaXRzJ106Ci0gICAgICAgICAgICAg ICAgICAgICMgRmV0Y2ggY29sdW1ucyB1c2luZyBpbmhlcml0ZWQgdGFibGUgT0lECi0gICAgICAg ICAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0 ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdnZXRfY29sdW1uc19mb3JfdGFibGUuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGlkPXJvd1snb2lkJ10pCi0gICAgICAgICAgICAgICAgICAg IHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCi0gICAgICAgICAgICAg ICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50 ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKLSAgICAgICAgICAgICAgICAgICAgY29s dW1ucy5leHRlbmQocmVzWydyb3dzJ11bOl0pCi0gICAgICAgICAgICBkYXRhWydjb2x1bW5zJ10g PSBjb2x1bW5zCi0KLSAgICAgICAgIyBXZSB3aWxsIGZldGNoIGFsbCB0aGUgY29sdW1ucyBmb3Ig dGhlIHRhYmxlIHVzaW5nCi0gICAgICAgICMgY29sdW1ucyBwcm9wZXJ0aWVzLnNxbCwgc28gd2Ug bmVlZCB0byBzZXQgdGVtcGxhdGUgcGF0aAotICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUo Ii8iLmpvaW4oW3NlbGYuY29sdW1uX3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGlkPXRpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo b3dfc3lzX29iamVjdHM9RmFsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLQot ICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQotICAgICAg ICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1yZXMpCi0gICAgICAgIGFsbF9jb2x1bW5zID0gcmVzWydyb3dzJ10KLQotICAg ICAgICAjIEZpbHRlciBpbmhlcml0ZWQgY29sdW1ucyBmcm9tIGFsbCBjb2x1bW5zCi0gICAgICAg IGlmICdjb2x1bW5zJyBpbiBkYXRhIGFuZCBsZW4oZGF0YVsnY29sdW1ucyddKSA+IDAgXAotICAg ICAgICAgICAgICAgIGFuZCBsZW4oYWxsX2NvbHVtbnMpID4gMDoKLSAgICAgICAgICAgIGZvciBy b3cgaW4gZGF0YVsnY29sdW1ucyddOgotICAgICAgICAgICAgICAgIGZvciBpLCBjb2wgaW4gZW51 bWVyYXRlKGFsbF9jb2x1bW5zKToKLSAgICAgICAgICAgICAgICAgICAgIyBJZiBib3RoIG5hbWUg YXJlIHNhbWUgdGhlbiByZW1vdmUgaXQKLSAgICAgICAgICAgICAgICAgICAgIyBhcyBpdCBpcyBp bmhlcml0ZWQgZnJvbSBvdGhlciB0YWJsZQotICAgICAgICAgICAgICAgICAgICBpZiBjb2xbJ25h bWUnXSA9PSByb3dbJ25hbWUnXToKLSAgICAgICAgICAgICAgICAgICAgICAgICMgUmVtb3ZlIHNh bWUgY29sdW1uIGZyb20gYWxsX2NvbHVtbnMgYXMKLSAgICAgICAgICAgICAgICAgICAgICAgICMg YWxyZWFkeSBoYXZlIGl0IGNvbHVtbnMgY29sbGVjdGlvbgotICAgICAgICAgICAgICAgICAgICAg ICAgZGVsIGFsbF9jb2x1bW5zW2ldCi0KLSAgICAgICAgICAgICMgSWYgYW55IGNvbHVtbiBpcyBh ZGRlZCB0aGVuIHVwZGF0ZSBjb2x1bW5zIGNvbGxlY3Rpb24KLSAgICAgICAgICAgIGlmIGxlbihh bGxfY29sdW1ucykgPiAwOgotICAgICAgICAgICAgICAgIGRhdGFbJ2NvbHVtbnMnXSArPSBhbGxf Y29sdW1ucwotICAgICAgICAjIElmIG5vIGluaGVyaXRlZCBjb2x1bW5zIGZvdW5kIHRoZW4gYWRk IGFsbCBjb2x1bW5zCi0gICAgICAgIGVsaWYgbGVuKGFsbF9jb2x1bW5zKSA+IDA6Ci0gICAgICAg ICAgICBkYXRhWydjb2x1bW5zJ10gPSBhbGxfY29sdW1ucwotCi0gICAgICAgIGlmICdjb2x1bW5z JyBpbiBkYXRhIGFuZCBsZW4oZGF0YVsnY29sdW1ucyddKSA+IDA6Ci0gICAgICAgICAgICBkYXRh ID0gc2VsZi5fY29sdW1uc19mb3JtYXR0ZXIodGlkLCBkYXRhKQotCi0gICAgICAgICMgSGVyZSB3 ZSB3aWxsIGFkZCBjb25zdHJhaW50IGluIG91ciBvdXRwdXQKLSAgICAgICAgZGF0YSA9IHNlbGYu X2luZGV4X2NvbnN0cmFpbnRzX2Zvcm1hdHRlcihkaWQsIHRpZCwgZGF0YSkKLSAgICAgICAgZGF0 YSA9IHNlbGYuX2ZvcmVpZ25fa2V5X2Zvcm1hdHRlcih0aWQsIGRhdGEpCi0gICAgICAgIGRhdGEg PSBzZWxmLl9jaGVja19jb25zdHJhaW50X2Zvcm1hdHRlcih0aWQsIGRhdGEpCi0gICAgICAgIGRh dGEgPSBzZWxmLl9leGNsdXNpb25fY29uc3RyYWludF9mb3JtYXR0ZXIoZGlkLCB0aWQsIGRhdGEp Ci0KLSAgICAgICAgcmV0dXJuIGRhdGEKLQotICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBA QmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KICAgICBkZWYgcHJvcGVydGllcyhzZWxm LCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBm dW5jdGlvbiB3aWxsIHNob3cgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdGVkIHRhYmxlIG5v ZGUuCkBAIC0xMTA5LDEwICs1NTIsMTEgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmll dywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgICAgIEpTT04gb2Yg c2VsZWN0ZWQgdGFibGUgbm9kZQogICAgICAgICAiIiIKIAotICAgICAgICBTUUwgPSByZW5kZXJf dGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkaWQ9ZGlkLCBzY2lkPXNjaWQsIHRpZD10aWQsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKKyAg ICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYu dGFibGVfdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAgZGlk PWRpZCwgc2NpZD1zY2lkLCB0aWQ9dGlkLAorICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxm LmRhdGxhc3RzeXNvaWQKKyAgICAgICAgKQogICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29u bi5leGVjdXRlX2RpY3QoU1FMKQogICAgICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAg cmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCkBAIC0xMTIwLDQxICs1 NjQsMjIgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIs IFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgaWYgbGVuKHJlc1sncm93cyddKSA9PSAwOgogICAg ICAgICAgICAgICAgIHJldHVybiBnb25lKGdldHRleHQoIlRoZSBzcGVjaWZpZWQgdGFibGUgY291 bGQgbm90IGJlIGZvdW5kLiIpKQogCi0gICAgICAgIGRhdGEgPSByZXNbJ3Jvd3MnXVswXQotCi0g ICAgICAgIGRhdGFbJ3ZhY3V1bV9zZXR0aW5nc19zdHInXSA9ICIiCi0KLSAgICAgICAgaWYgZGF0 YVsndGFibGVfdmFjdXVtX3NldHRpbmdzX3N0ciddIGlzIG5vdCBOb25lOgotICAgICAgICAgICAg ZGF0YVsndmFjdXVtX3NldHRpbmdzX3N0ciddICs9IGRhdGFbCi0gICAgICAgICAgICAgICAgJ3Rh YmxlX3ZhY3V1bV9zZXR0aW5nc19zdHInXS5yZXBsYWNlKCcsJywgJ1xuJykKLQotICAgICAgICBp ZiBkYXRhWyd0b2FzdF90YWJsZV92YWN1dW1fc2V0dGluZ3Nfc3RyJ10gaXMgbm90IE5vbmU6Ci0g ICAgICAgICAgICBkYXRhWyd2YWN1dW1fc2V0dGluZ3Nfc3RyJ10gKz0gJ1xuJyArICdcbicuam9p bigKLSAgICAgICAgICAgICAgICBbJ3RvYXN0XycgKyBzZXR0aW5nIGZvciBzZXR0aW5nIGluIGRh dGFbCi0gICAgICAgICAgICAgICAgICAgICd0b2FzdF90YWJsZV92YWN1dW1fc2V0dGluZ3Nfc3Ry JwotICAgICAgICAgICAgICAgIF0uc3BsaXQoJywnKV0KLSAgICAgICAgICAgICkKLSAgICAgICAg ZGF0YVsndmFjdXVtX3NldHRpbmdzX3N0ciddID0gZGF0YVsKLSAgICAgICAgICAgICd2YWN1dW1f c2V0dGluZ3Nfc3RyJwotICAgICAgICBdLnJlcGxhY2UoIj0iLCAiID0gIikKLQotICAgICAgICBk YXRhID0gc2VsZi5fZm9ybWF0dGVyKGRpZCwgc2NpZCwgdGlkLCBkYXRhKQotCi0gICAgICAgIHJl dHVybiBhamF4X3Jlc3BvbnNlKAotICAgICAgICAgICAgcmVzcG9uc2U9ZGF0YSwKLSAgICAgICAg ICAgIHN0YXR1cz0yMDAKLSAgICAgICAgKQorICAgICAgICByZXR1cm4gc3VwZXIoVGFibGVWaWV3 LCBzZWxmKS5wcm9wZXJ0aWVzKAorICAgICAgICAgICAgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlk LCByZXMpCiAKLSAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisgICAgQEJhc2VUYWJsZVZpZXcuY2hl Y2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIHR5cGVzKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQs IHRpZD1Ob25lLCBjbGlkPU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAgUmV0dXJuczoKICAg ICAgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gbGlzdCBvZiB0eXBlcyBhdmFpbGFi bGUgZm9yIGNvbHVtbiBub2RlCiAgICAgICAgICAgICBmb3Igbm9kZS1hamF4LWNvbnRyb2wKICAg ICAgICAgIiIiCi0gICAgICAgIGNvbmRpdGlvbiA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihb c2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdnZXRfdHlwZXNfd2hlcmVfY29uZGl0aW9uLnNxbCddKSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dfc3lzdGVtX29iamVjdHM9c2VsZi5ibHVlcHJp bnQuc2hvd19zeXN0ZW1fb2JqZWN0cykKKyAgICAgICAgY29uZGl0aW9uID0gcmVuZGVyX3RlbXBs YXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oWworICAgICAgICAgICAgICAgIHNlbGYudGFibGVf dGVtcGxhdGVfcGF0aCwgJ2dldF90eXBlc193aGVyZV9jb25kaXRpb24uc3FsJworICAgICAgICAg ICAgXSksCisgICAgICAgICAgICBzaG93X3N5c3RlbV9vYmplY3RzPXNlbGYuYmx1ZXByaW50LnNo b3dfc3lzdGVtX29iamVjdHMKKyAgICAgICAgKQogCiAgICAgICAgIHN0YXR1cywgdHlwZXMgPSBz ZWxmLmdldF90eXBlcyhzZWxmLmNvbm4sIGNvbmRpdGlvbiwgVHJ1ZSkKIApAQCAtMTE2Niw3ICs1 OTEsNyBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwg VmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgc3RhdHVzPTIwMAogICAgICAgICApCiAKLSAg ICBAY2hlY2tfcHJlY29uZGl0aW9uCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0 aW9uCiAgICAgZGVmIGdldF9jb2x1bW5zKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZD1O b25lKToKICAgICAgICAgIiIiCiAgICAgICAgIFJldHVybnMgdGhlIFRhYmxlIENvbHVtbnMuCkBA IC0xMTg5LDEzICs2MTQsMTkgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0 YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgZGF0YSA9IHJlcXVlc3QuYXJn cyBpZiByZXF1ZXN0LmFyZ3MgZWxzZSBOb25lCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlm IGRhdGEgYW5kICd0aWQnIGluIGRhdGE6Ci0gICAgICAgICAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2NvbHVtbnNfZm9yX3RhYmxlLnNxbCdd KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPWRhdGFbJ3RpZCdd KQorICAgICAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAg ICAgICAgIi8iLmpvaW4oWworICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZV90ZW1w bGF0ZV9wYXRoLCAnZ2V0X2NvbHVtbnNfZm9yX3RhYmxlLnNxbCcKKyAgICAgICAgICAgICAgICAg ICAgXSksCisgICAgICAgICAgICAgICAgICAgIHRpZD1kYXRhWyd0aWQnXQorICAgICAgICAgICAg ICAgICkKICAgICAgICAgICAgIGVsaWYgZGF0YSBhbmQgJ3RuYW1lJyBpbiBkYXRhOgotICAgICAg ICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9w YXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dl dF9jb2x1bW5zX2Zvcl90YWJsZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRuYW1lPWRhdGFbJ3RuYW1lJ10pCisgICAgICAgICAgICAgICAgU1FMID0gcmVu ZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbCisgICAgICAgICAg ICAgICAgICAgICAgICBzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsICdnZXRfY29sdW1uc19mb3Jf dGFibGUuc3FsJworICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAgICAgICAgICAgICAgICAg dG5hbWU9ZGF0YVsndG5hbWUnXQorICAgICAgICAgICAgICAgICkKIAogICAgICAgICAgICAgaWYg U1FMOgogICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGlj dChTUUwpCkBAIC0xMjExLDcgKzY0Miw3IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZp ZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIGV4Y2VwdCBFeGNl cHRpb24gYXMgZToKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJy b3Jtc2c9c3RyKGUpKQogCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVW aWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBnZXRfb2Z0eXBlKHNlbGYsIGdpZCwgc2lk LCBkaWQsIHNjaWQsIHRpZD1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIFJldHVybnM6CkBA IC0xMjIwLDEwICs2NTEsMTIgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0 YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgIiIiCiAgICAgICAgIHJlcyA9 IFt7J2xhYmVsJzogJycsICd2YWx1ZSc6ICcnfV0KICAgICAgICAgdHJ5OgotICAgICAgICAgICAg U1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfb2Z0eXBlLnNxbCdd KSwgc2NpZD1zY2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl90 eXBlPXNlbGYubWFuYWdlci5zZXJ2ZXJfdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaG93X3N5c19vYmplY3RzPXNlbGYuYmx1ZXByaW50LnNob3dfc3lzdGVtX29iamVj dHMpCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAg Ii8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ2dldF9vZnR5cGUuc3FsJ10pLAor ICAgICAgICAgICAgICAgIHNjaWQ9c2NpZCwKKyAgICAgICAgICAgICAgICBzZXJ2ZXJfdHlwZT1z ZWxmLm1hbmFnZXIuc2VydmVyX3R5cGUsCisgICAgICAgICAgICAgICAgc2hvd19zeXNfb2JqZWN0 cz1zZWxmLmJsdWVwcmludC5zaG93X3N5c3RlbV9vYmplY3RzCisgICAgICAgICAgICApCiAgICAg ICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKICAg ICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFs X3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCkBAIC0xMjQxLDcgKzY3NCw3IEBAIGNsYXNzIFRh YmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6 CiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHJldHVybiBpbnRl cm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUpKQogCi0gICAgQGNoZWNrX3ByZWNvbmRp dGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBnZXRf aW5oZXJpdHMoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkPU5vbmUpOgogICAgICAgICAi IiIKICAgICAgICAgUmV0dXJuczoKQEAgLTEyNTAsMTAgKzY4MywxMiBAQCBjbGFzcyBUYWJsZVZp ZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAg ICAgICAiIiIKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcmVzID0gW10KLSAgICAgICAgICAg IFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAnZ2V0 X2luaGVyaXRzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93 X3N5c3RlbV9vYmplY3RzPXNlbGYuYmx1ZXByaW50LnNob3dfc3lzdGVtX29iamVjdHMsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZXJ2ZXJfdHlwZT1zZWxmLm1hbmFnZXIuc2VydmVyX3R5cGUpCisg ICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgIi8iLmpv aW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ2dldF9pbmhlcml0cy5zcWwnXSksCisgICAg ICAgICAgICAgICAgc2hvd19zeXN0ZW1fb2JqZWN0cz1zZWxmLmJsdWVwcmludC5zaG93X3N5c3Rl bV9vYmplY3RzLAorICAgICAgICAgICAgICAgIHRpZD10aWQsCisgICAgICAgICAgICAgICAgc2Vy dmVyX3R5cGU9c2VsZi5tYW5hZ2VyLnNlcnZlcl90eXBlCisgICAgICAgICAgICApCiAgICAgICAg ICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKICAgICAg ICAgICAgIGlmIG5vdCBzdGF0dXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3Nl cnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCkBAIC0xMjcxLDI1ICs3MDYsMzEgQEAgY2xhc3MgVGFi bGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToK ICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgcmV0dXJuIGludGVy bmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1zdHIoZSkpCiAKLSAgICBAY2hlY2tfcHJlY29uZGl0 aW9uCi0gICAgZGVmIGdldF9yZWxhdGlvbnMoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlk PU5vbmUpOgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgorICAgIGRlZiBn ZXRfYXR0YWNoX3RhYmxlcyhzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQ9Tm9uZSk6CiAg ICAgICAgICIiIgogICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiB3 aWxsIHJldHVybiBsaXN0IG9mIHRhYmxlcyBhdmFpbGFibGUgZm9yIGxpa2UvcmVsYXRpb24KLSAg ICAgICAgICAgIGNvbWJvYm94IHdoaWxlIGNyZWF0aW5nIG5ldyB0YWJsZQorICAgICAgICAgICAg VGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBsaXN0IG9mIHRhYmxlcyBhdmFpbGFibGUgdG8gYmUg YXR0YWNoZWQKKyAgICAgICAgICAgIHRvIHRoZSBwYXJ0aXRpb25lZCB0YWJsZS4KICAgICAgICAg IiIiCi0gICAgICAgIHJlcyA9IFt7J2xhYmVsJzogJycsICd2YWx1ZSc6ICcnfV0KICAgICAgICAg dHJ5OgotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRl bXBsYXRlX3BhdGgsICdnZXRfcmVsYXRpb25zLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaG93X3N5c19vYmplY3RzPXNlbGYuYmx1ZXByaW50LnNob3dfc3lzdGVt X29iamVjdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyX3R5cGU9 c2VsZi5tYW5hZ2VyLnNlcnZlcl90eXBlKQorICAgICAgICAgICAgcmVzID0gW10KKyAgICAgICAg ICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAiLyIuam9pbihbCisg ICAgICAgICAgICAgICAgICAgIHNlbGYucGFydGl0aW9uX3RlbXBsYXRlX3BhdGgsICdnZXRfYXR0 YWNoX3RhYmxlcy5zcWwnCisgICAgICAgICAgICAgICAgXSksCisgICAgICAgICAgICAgICAgdGlk PXRpZAorICAgICAgICAgICAgKQorCiAgICAgICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNv bm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CiAgICAg ICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisK ICAgICAgICAgICAgIGZvciByb3cgaW4gcnNldFsncm93cyddOgogICAgICAgICAgICAgICAgIHJl cy5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgIHsnbGFiZWwnOiByb3dbJ2xpa2VfcmVsYXRp b24nXSwgJ3ZhbHVlJzogcm93WydsaWtlX3JlbGF0aW9uJ119CisgICAgICAgICAgICAgICAgICAg IHsnbGFiZWwnOiByb3dbJ3RhYmxlX25hbWUnXSwgJ3ZhbHVlJzogcm93WydvaWQnXX0KICAgICAg ICAgICAgICAgICApCisKICAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCiAg ICAgICAgICAgICAgICAgZGF0YT1yZXMsCiAgICAgICAgICAgICAgICAgc3RhdHVzPTIwMApAQCAt MTI5OCw0MCArNzM5LDM0IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFU eXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMg ZToKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3Ry KGUpKQogCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBfY2x0eXBlX2Zvcm1hdHRlcihkYXRh X3R5cGUpOgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgorICAgIGRlZiBn ZXRfcmVsYXRpb25zKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZD1Ob25lKToKICAgICAg ICAgIiIiCi0KLSAgICAgICAgQXJnczoKLSAgICAgICAgICAgIGRhdGFfdHlwZTogVHlwZSBzdHJp bmcKLQogICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgV2UgbmVlZCB0byByZW1vdmUgW10g ZnJvbSB0eXBlIGFuZCBhcHBlbmQgaXQKLSAgICAgICAgICAgIGFmdGVyIGxlbmd0aC9wcmVjaXNp b24gc28gd2Ugd2lsbCBzZW5kIGZsYWcgZm9yCi0gICAgICAgICAgICBzcWwgdGVtcGxhdGUKLSAg ICAgICAgIiIiCi0gICAgICAgIGlmICdbXScgaW4gZGF0YV90eXBlOgotICAgICAgICAgICAgcmV0 dXJuIGRhdGFfdHlwZVs6LTJdLCBUcnVlCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1 cm4gZGF0YV90eXBlLCBGYWxzZQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBjb252ZXJ0 X2xlbmd0aF9wcmVjaXNpb25fdG9fc3RyaW5nKGRhdGEpOgorICAgICAgICAgICAgVGhpcyBmdW5j dGlvbiB3aWxsIHJldHVybiBsaXN0IG9mIHRhYmxlcyBhdmFpbGFibGUgZm9yIGxpa2UvcmVsYXRp b24KKyAgICAgICAgICAgIGNvbWJvYm94IHdoaWxlIGNyZWF0aW5nIG5ldyB0YWJsZQogICAgICAg ICAiIiIKLSAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNvbnZlcnQgbGVuZ3RoICYg cHJlY2lzaW9uIHRvIHN0cmluZwotICAgICAgICB0byBoYW5kbGUgY2FzZSBsaWtlIHdoZW4gdXNl ciBnaXZlcyAwIGFzIGxlbmd0aAotCi0gICAgICAgIEFyZ3M6Ci0gICAgICAgICAgICBkYXRhOiBE YXRhIGZyb20gY2xpZW50CisgICAgICAgIHJlcyA9IFt7J2xhYmVsJzogJycsICd2YWx1ZSc6ICcn fV0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAg ICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsICdnZXRfcmVs YXRpb25zLnNxbCddKSwKKyAgICAgICAgICAgICAgICBzaG93X3N5c19vYmplY3RzPXNlbGYuYmx1 ZXByaW50LnNob3dfc3lzdGVtX29iamVjdHMsCisgICAgICAgICAgICAgICAgc2VydmVyX3R5cGU9 c2VsZi5tYW5hZ2VyLnNlcnZlcl90eXBlCisgICAgICAgICAgICApCisgICAgICAgICAgICBzdGF0 dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKKyAgICAgICAgICAgIGlm IG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1yZXMpCisgICAgICAgICAgICBmb3Igcm93IGluIHJzZXRbJ3Jvd3MnXToKKyAg ICAgICAgICAgICAgICByZXMuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICB7J2xhYmVsJzog cm93WydsaWtlX3JlbGF0aW9uJ10sICd2YWx1ZSc6IHJvd1snbGlrZV9yZWxhdGlvbiddfQorICAg ICAgICAgICAgICAgICkKKyAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisg ICAgICAgICAgICAgICAgZGF0YT1yZXMsCisgICAgICAgICAgICAgICAgc3RhdHVzPTIwMAorICAg ICAgICAgICAgKQogCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAgICBDb252ZXJ0ZWQgZGF0 YQotICAgICAgICAiIiIKLSAgICAgICAgaWYgJ2F0dGxlbicgaW4gZGF0YSBhbmQgZGF0YVsnYXR0 bGVuJ10gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBkYXRhWydhdHRsZW4nXSA9IHN0cihkYXRh WydhdHRsZW4nXSkKLSAgICAgICAgaWYgJ2F0dHByZWNpc2lvbicgaW4gZGF0YSBhbmQgZGF0YVsn YXR0cHJlY2lzaW9uJ10gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBkYXRhWydhdHRwcmVjaXNp b24nXSA9IHN0cihkYXRhWydhdHRwcmVjaXNpb24nXSkKLSAgICAgICAgcmV0dXJuIGRhdGEKKyAg ICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFs X3NlcnZlcl9lcnJvcihlcnJvcm1zZz1zdHIoZSkpCiAKICAgICBkZWYgX3BhcnNlX2Zvcm1hdF9j b2x1bW5zKHNlbGYsIGRhdGEsIG1vZGU9Tm9uZSk6CiAgICAgICAgICIiIgpAQCAtMTM2MCwxMiAr Nzk1LDEyIEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVy LCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBjaGVjayB0 eXBlIGZvciAnW10nIGluIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1snY2x0eXBl J10sIGNbJ2hhc1NxckJyYWNrZXQnXSA9IHNlbGYuX2NsdHlwZV9mb3JtYXR0ZXIoY1snY2x0eXBl J10pCiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBzZWxmLmNvbnZlcnRfbGVuZ3RoX3By ZWNpc2lvbl90b19zdHJpbmcoYykKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBUYWJsZVZp ZXcuY29udmVydF9sZW5ndGhfcHJlY2lzaW9uX3RvX3N0cmluZyhjKQogCiAgICAgICAgICAgICAg ICAgICAgIGRhdGFbJ2NvbHVtbnMnXVthY3Rpb25dID0gZmluYWxfY29sdW1ucwogICAgICAgICBl bHNlOgotICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGV4Y2x1ZGUgYWxsIHRoZSBjb2x1bW5zIHdo aWNoIGFyZSBpbmhlcml0ZWQgZnJvbSBvdGhlciB0YWJsZXMKLSAgICAgICAgICAgICMgJ0NSRUFU RScgbW9kZQorICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGV4Y2x1ZGUgYWxsIHRoZSBjb2x1bW5z IHdoaWNoIGFyZSBpbmhlcml0ZWQgZnJvbSBvdGhlcgorICAgICAgICAgICAgIyB0YWJsZXMgJ0NS RUFURScgbW9kZQogICAgICAgICAgICAgZmluYWxfY29sdW1ucyA9IFtdCiAKICAgICAgICAgICAg IGZvciBjIGluIGNvbHVtbnM6CkBAIC0xMzgyLDM1ICs4MTcsMTMgQEAgY2xhc3MgVGFibGVWaWV3 KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAg ICAgICAgICAgICAgICAgIyBjaGVjayB0eXBlIGZvciAnW10nIGluIGl0CiAgICAgICAgICAgICAg ICAgICAgIGNbJ2NsdHlwZSddLCBjWydoYXNTcXJCcmFja2V0J10gPSBzZWxmLl9jbHR5cGVfZm9y bWF0dGVyKGNbJ2NsdHlwZSddKQogCi0gICAgICAgICAgICAgICAgYyA9IHNlbGYuY29udmVydF9s ZW5ndGhfcHJlY2lzaW9uX3RvX3N0cmluZyhjKQorICAgICAgICAgICAgICAgIGMgPSBUYWJsZVZp ZXcuY29udmVydF9sZW5ndGhfcHJlY2lzaW9uX3RvX3N0cmluZyhjKQogCiAgICAgICAgICAgICBk YXRhWydjb2x1bW5zJ10gPSBmaW5hbF9jb2x1bW5zCiAKICAgICAgICAgcmV0dXJuIGRhdGEKIAot ICAgIGRlZiBjaGVja19hbmRfY29udmVydF9uYW1lX3RvX3N0cmluZyhzZWxmLCBkYXRhKToKLSAg ICAgICAgIiIiCi0gICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayBhbmQgY292ZXJ0IHRh YmxlIHRvIHN0cmluZyBpbmNhc2UKLSAgICAgICAgaXQgaXMgbnVtZXJpYwotCi0gICAgICAgIEFy Z3M6Ci0gICAgICAgICAgICBkYXRhOiBkYXRhIGRpY3QKLQotICAgICAgICBSZXR1cm5zOgotICAg ICAgICAgICAgVXBkYXRlZCBkYXRhIGRpY3QKLSAgICAgICAgIiIiCi0gICAgICAgICMgRm9yIFB5 dGhvbjIsIGl0IGNhbiBiZSBpbnQsIGxvbmcsIGZsb2F0Ci0gICAgICAgIGlmIGhhc2F0dHIoc3Ry LCAnZGVjb2RlJyk6Ci0gICAgICAgICAgICBpZiBpc2luc3RhbmNlKGRhdGFbJ25hbWUnXSwgKGlu dCwgbG9uZywgZmxvYXQpKToKLSAgICAgICAgICAgICAgICBkYXRhWyduYW1lJ10gPSBzdHIoZGF0 YVsnbmFtZSddKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgIyBGb3IgUHl0aG9uMywgaXQg Y2FuIGJlIGludCwgZmxvYXQKLSAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZGF0YVsnbmFtZSdd LCAoaW50LCBmbG9hdCkpOgotICAgICAgICAgICAgICAgIGRhdGFbJ25hbWUnXSA9IHN0cihkYXRh WyduYW1lJ10pCi0gICAgICAgIHJldHVybiBkYXRhCi0KLQotICAgIEBjaGVja19wcmVjb25kaXRp b24KKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KICAgICBkZWYgY3JlYXRl KHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBm dW5jdGlvbiB3aWxsIGNyZWF0ZXMgbmV3IHRoZSB0YWJsZSBvYmplY3QKQEAgLTE0NTEsNyArODY0 LDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZh Y3V1bVNldHRpbmdzKToKIAogICAgICAgICAjIFBhcnNlICYgZm9ybWF0IGNvbHVtbnMKICAgICAg ICAgZGF0YSA9IHNlbGYuX3BhcnNlX2Zvcm1hdF9jb2x1bW5zKGRhdGEpCi0gICAgICAgIGRhdGEg PSBzZWxmLmNoZWNrX2FuZF9jb252ZXJ0X25hbWVfdG9fc3RyaW5nKGRhdGEpCisgICAgICAgIGRh dGEgPSBUYWJsZVZpZXcuY2hlY2tfYW5kX2NvbnZlcnRfbmFtZV90b19zdHJpbmcoZGF0YSkKIAog ICAgICAgICAjICdjb2xsX2luaGVyaXRzJyBpcyBBcnJheSBidXQgaXQgY29tZXMgYXMgc3RyaW5n IGZyb20gYnJvd3NlcgogICAgICAgICAjIFdlIHdpbGwgY29udmVydCBpdCBhZ2FpbiB0byBsaXN0 CkBAIC0xNDYzLDkgKzg3NiwxMiBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBE YXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogCiAgICAgICAgIGlmICdmb3JlaWduX2tl eScgaW4gZGF0YToKICAgICAgICAgICAgIGZvciBjIGluIGRhdGFbJ2ZvcmVpZ25fa2V5J106Ci0g ICAgICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmZvcmVp Z25fa2V5X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnZ2V0X3BhcmVudC5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRpZD1jWydjb2x1bW5zJ11bMF1bJ3JlZmVyZW5jZXMnXSkKKyAgICAg ICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICAgICIv Ii5qb2luKFsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm9yZWlnbl9rZXlfdGVtcGxh dGVfcGF0aCwgJ2dldF9wYXJlbnQuc3FsJworICAgICAgICAgICAgICAgICAgICBdKSwKKyAgICAg ICAgICAgICAgICAgICAgdGlkPWNbJ2NvbHVtbnMnXVswXVsncmVmZXJlbmNlcyddCisgICAgICAg ICAgICAgICAgKQogICAgICAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVj dXRlXzJkYXJyYXkoU1FMKQogICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CiAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cnNldCkK QEAgLTE0NzQsMTIgKzg5MCwyNiBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBE YXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgICAgIGNbJ3JlbW90 ZV90YWJsZSddID0gcnNldFsncm93cyddWzBdWyd0YWJsZSddCiAKICAgICAgICAgdHJ5OgotICAg ICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3Bh dGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGUu c3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29u bj1zZWxmLmNvbm4pCi0gICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRl X3NjYWxhcihTUUwpCi0gICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAg IHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorICAgICAgICAgICAg cGFydGl0aW9uc19zcWwgPSAnJworICAgICAgICAgICAgcGFydGl0aW9uZWQgPSBGYWxzZQorICAg ICAgICAgICAgaWYgJ2lzX3BhcnRpdGlvbmVkJyBpbiBkYXRhIGFuZCBkYXRhWydpc19wYXJ0aXRp b25lZCddOgorICAgICAgICAgICAgICAgIGRhdGFbJ3JlbGtpbmQnXSA9ICdwJworICAgICAgICAg ICAgICAgICMgY3JlYXRlIHBhcnRpdGlvbiBzY2hlbWUKKyAgICAgICAgICAgICAgICBkYXRhWydw YXJ0aXRpb25fc2NoZW1lJ10gPSBzZWxmLmdldF9wYXJ0aXRpb25fc2NoZW1lKGRhdGEpCisgICAg ICAgICAgICAgICAgcGFydGl0aW9uc19zcWwgPSBzZWxmLmdldF9wYXJ0aXRpb25zX3NxbChkYXRh KQorICAgICAgICAgICAgICAgIHBhcnRpdGlvbmVkID0gVHJ1ZQorCisgICAgICAgICAgICBTUUwg PSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGFibGVf dGVtcGxhdGVfcGF0aCwgJ2NyZWF0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgZGF0YT1kYXRh LCBjb25uPXNlbGYuY29ubgorICAgICAgICAgICAgKQorCisgICAgICAgICAgICAjIEFwcGVuZCBT UUwgZm9yIHBhcnRpdGlvbnMKKyAgICAgICAgICAgIFNRTCArPSAnXG4nICsgcGFydGl0aW9uc19z cWwKKworICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIo U1FMKQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICByZXR1cm4g aW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKIAogICAgICAgICAgICAgIyBQb3N0 Z3JlU1FMIHRydW5jYXRlcyB0aGUgdGFibGUgbmFtZSB0byA2MyBjaGFyYWN0ZXJzLgogICAgICAg ICAgICAgIyBIYXZlIHRvIHRydW5jYXRlIHRoZSBuYW1lIGxpa2UgUG9zdGdyZVNRTCB0byBnZXQg dGhlCkBAIC0xNDkwLDE2ICs5MjAsMjEgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmll dywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgICAgICAgICBkYXRh WyduYW1lJ10gPSBkYXRhWyduYW1lJ11bMDpDT05TVF9NQVhfQ0hBUl9DT1VOVF0KIAogICAgICAg ICAgICAgIyBHZXQgdXBkYXRlZCBzY2hlbWEgb2lkCi0gICAgICAgICAgICBTUUwgPSByZW5kZXJf dGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnZ2V0X3NjaGVtYV9vaWQuc3FsJ10pLCB0bmFtZT1kYXRhWyduYW1l J10pCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAg Ii8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ2dldF9zY2hlbWFfb2lkLnNxbCdd KSwKKyAgICAgICAgICAgICAgICB0bmFtZT1kYXRhWyduYW1lJ10KKyAgICAgICAgICAgICkKIAog ICAgICAgICAgICAgc3RhdHVzLCBzY2lkID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKFNRTCkK ICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVy bmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1zY2lkKQogCiAgICAgICAgICAgICAjIHdlIG5lZWQg b2lkIHRvIHRvIGFkZCBvYmplY3QgaW4gdHJlZSBhdCBicm93c2VyCi0gICAgICAgICAgICBTUUwg PSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X29pZC5zcWwnXSksIHNjaWQ9c2NpZCwgZGF0 YT1kYXRhKQorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAg ICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsICdnZXRfb2lkLnNxbCddKSwK KyAgICAgICAgICAgICAgICBzY2lkPXNjaWQsIGRhdGE9ZGF0YQorICAgICAgICAgICAgKQorCiAg ICAgICAgICAgICBzdGF0dXMsIHRpZCA9IHNlbGYuY29ubi5leGVjdXRlX3NjYWxhcihTUUwpCiAg ICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5h bF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9dGlkKQpAQCAtMTUwOSwxMyArOTQ0LDE0IEBAIGNsYXNz IFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5n cyk6CiAgICAgICAgICAgICAgICAgICAgIHRpZCwKICAgICAgICAgICAgICAgICAgICAgc2NpZCwK ICAgICAgICAgICAgICAgICAgICAgZGF0YVsnbmFtZSddLAotICAgICAgICAgICAgICAgICAgICBp Y29uPSJpY29uLXRhYmxlIgorICAgICAgICAgICAgICAgICAgICBpY29uPSJpY29uLXBhcnRpdGlv biIgaWYgcGFydGl0aW9uZWQgZWxzZSAiaWNvbi10YWJsZSIsCisgICAgICAgICAgICAgICAgICAg IGlzX3BhcnRpdGlvbmVkPXBhcnRpdGlvbmVkCiAgICAgICAgICAgICAgICAgKQogICAgICAgICAg ICAgKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICByZXR1cm4g aW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0cihlKSkKIAotICAgIEBjaGVja19wcmVj b25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KICAgICBkZWYg dXBkYXRlKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCk6CiAgICAgICAgICIiIgogICAg ICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgdXBkYXRlIGFuIGV4aXN0aW5nIHRhYmxlIG9iamVjdApA QCAtMTUzOCwzNCArOTc0LDIxIEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERh dGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgICAgICAgICAgZGF0YVtrXSA9 IHYKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBTUUwsIG5hbWUgPSBzZWxmLmdldF9zcWwo ZGlkLCBzY2lkLCB0aWQsIGRhdGEpCi0KLSAgICAgICAgICAgIFNRTCA9IFNRTC5zdHJpcCgnXG4n KS5zdHJpcCgnICcpCi0gICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRl X3NjYWxhcihTUUwpCi0gICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAg IHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQotCi0gICAgICAgICAg ICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X3NjaGVtYV9vaWQuc3FsJ10pLCB0 aWQ9dGlkKQotICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFy cmF5KFNRTCkKKyAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAg ICAgICAiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwn XSksCisgICAgICAgICAgICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0aWQ9dGlkLAorICAgICAg ICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkCisgICAgICAgICAgICAp CisgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQog ICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJu YWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKIAotICAgICAgICAgICAgIyBuZXcgc2NoZW1h IGlkCi0gICAgICAgICAgICBzY2lkID0gcmVzWydyb3dzJ11bMF1bJ3NjaWQnXQotCi0gICAgICAg ICAgICByZXR1cm4ganNvbmlmeSgKLSAgICAgICAgICAgICAgICBub2RlPXNlbGYuYmx1ZXByaW50 LmdlbmVyYXRlX2Jyb3dzZXJfbm9kZSgKLSAgICAgICAgICAgICAgICAgICAgdGlkLAotICAgICAg ICAgICAgICAgICAgICBzY2lkLAotICAgICAgICAgICAgICAgICAgICBuYW1lLAotICAgICAgICAg ICAgICAgICAgICBpY29uPSJpY29uLSVzIiAlIHNlbGYubm9kZV90eXBlCi0gICAgICAgICAgICAg ICAgKQotICAgICAgICAgICAgKQorICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFRhYmxlVmlldywg c2VsZikudXBkYXRlKAorICAgICAgICAgICAgICAgIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCwg ZGF0YSwgcmVzKQogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICBy ZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0cihlKSkKIAotICAgIEBjaGVj a19wcmVjb25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KICAg ICBkZWYgZGVsZXRlKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCk6CiAgICAgICAgICIi IgogICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgZGVsZXRlcyB0aGUgdGFibGUgb2JqZWN0CkBA IC0xNTg1LDEwICsxMDA4LDExIEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERh dGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgICAgICBjYXNjYWRlID0gRmFs c2UKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8i LmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKKyAg ICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAiLyIuam9p bihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwnXSksCisgICAgICAg ICAgICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0aWQ9dGlkLAorICAgICAgICAgICAgICAgIGRh dGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkCisgICAgICAgICAgICApCiAgICAgICAgICAg ICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQogICAgICAgICAgICAg aWYgbm90IHN0YXR1czoKICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXJlcykKQEAgLTE2MDYsMTAgKzEwMzAsMTEgQEAgY2xhc3MgVGFibGVWaWV3 KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKIAogICAg ICAgICAgICAgZGF0YSA9IHJlc1sncm93cyddWzBdCiAKLSAgICAgICAgICAgIFNRTCA9IHJlbmRl cl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVsZXRlLnNxbCddKSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEsIGNhc2NhZGU9Y2FzY2FkZSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uPXNlbGYuY29ubikKKyAgICAgICAgICAg IFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi50 YWJsZV90ZW1wbGF0ZV9wYXRoLCAnZGVsZXRlLnNxbCddKSwKKyAgICAgICAgICAgICAgICBkYXRh PWRhdGEsIGNhc2NhZGU9Y2FzY2FkZSwKKyAgICAgICAgICAgICAgICBjb25uPXNlbGYuY29ubgor ICAgICAgICAgICAgKQogICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0 ZV9zY2FsYXIoU1FMKQogICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgICAg ICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKQEAgLTE2MjYsNyAr MTA1MSw3IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVy LCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUpKQogCi0g ICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRp dGlvbgogICAgIGRlZiB0cnVuY2F0ZShzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQpOgog ICAgICAgICAiIiIKICAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHRydW5jYXRlIHRoZSB0YWJs ZSBvYmplY3QKQEAgLTE2MzgsNDMgKzEwNjMsMjMgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGRO b2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgICAgc2Np ZDogU2NoZW1hIElECiAgICAgICAgICAgIHRpZDogVGFibGUgSUQKICAgICAgICAgIiIiCi0gICAg ICAgICMgQmVsb3cgd2lsbCBkZWNpZGUgaWYgaXQncyBzaW1wbGUgZHJvcCBvciBkcm9wIHdpdGgg Y2FzY2FkZSBjYWxsCi0gICAgICAgIGRhdGEgPSByZXF1ZXN0LmZvcm0gaWYgcmVxdWVzdC5mb3Jt IGVsc2UganNvbi5sb2FkcygKLSAgICAgICAgICAgIHJlcXVlc3QuZGF0YSwgZW5jb2Rpbmc9J3V0 Zi04JwotICAgICAgICApCi0gICAgICAgICMgQ29udmVydCBzdHIgJ3RydWUnIHRvIGJvb2xlYW4g dHlwZQotICAgICAgICBpc19jYXNjYWRlID0ganNvbi5sb2FkcyhkYXRhWydjYXNjYWRlJ10pCiAK ICAgICAgICAgdHJ5OgotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2lu KFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkaWQ9ZGlkLCBzY2lkPXNjaWQsIHRpZD10aWQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCisgICAgICAg ICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3Nl bGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAg ICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKKyAgICAgICAgICAgICAgICBkYXRsYXN0 c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZAorICAgICAgICAgICAgKQogICAgICAgICAgICAgc3Rh dHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKICAgICAgICAgICAgIGlmIG5v dCBzdGF0dXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihl cnJvcm1zZz1yZXMpCi0gICAgICAgICAgICBkYXRhID0gcmVzWydyb3dzJ11bMF0KIAotICAgICAg ICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0cnVuY2F0ZS5z cWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBjYXNj YWRlPWlzX2Nhc2NhZGUpCi0gICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVj dXRlX3NjYWxhcihTUUwpCi0gICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAg ICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQotCi0gICAgICAg ICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAotICAgICAgICAgICAgICAgIHN1Y2Nlc3M9 MSwKLSAgICAgICAgICAgICAgICBpbmZvPWdldHRleHQoIlRhYmxlIHRydW5jYXRlZCIpLAotICAg ICAgICAgICAgICAgIGRhdGE9ewotICAgICAgICAgICAgICAgICAgICAnaWQnOiB0aWQsCi0gICAg ICAgICAgICAgICAgICAgICdzY2lkJzogc2NpZAotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg ICAgICkKKyAgICAgICAgICAgIHJldHVybiBzdXBlcihUYWJsZVZpZXcsIHNlbGYpLnRydW5jYXRl KGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCwgcmVzKQogCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRp b24gYXMgZToKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jt c2c9c3RyKGUpKQogCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3 LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBlbmFibGVfZGlzYWJsZV90cmlnZ2VycyhzZWxm LCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBm dW5jdGlvbiB3aWxsIGVuYWJsZS9kaXNhYmxlIHRyaWdnZXIocykgb24gdGhlIHRhYmxlIG9iamVj dApAQCAtMTY5NCwxOCArMTA5OSwyMiBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3 LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICBpc19lbmFibGUgPSBq c29uLmxvYWRzKGRhdGFbJ2VuYWJsZSddKQogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIFNR TCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSks Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0 aWQ9dGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9 c2VsZi5kYXRsYXN0c3lzb2lkKQorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAor ICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsICdwcm9w ZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICBkaWQ9ZGlkLCBzY2lkPXNjaWQsIHRpZD10 aWQsCisgICAgICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQKKyAg ICAgICAgICAgICkKICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVf ZGljdChTUUwpCiAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgICAgIHJl dHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQogICAgICAgICAgICAgZGF0 YSA9IHJlc1sncm93cyddWzBdCiAKLSAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgi LyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnZW5hYmxlX2Rpc2FibGVfdHJpZ2dlci5zcWwnXSksCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBpc19lbmFibGVfdHJpZ2dlcj1p c19lbmFibGUpCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAg ICAgICAgIi8iLmpvaW4oWworICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxlX3RlbXBsYXRl X3BhdGgsICdlbmFibGVfZGlzYWJsZV90cmlnZ2VyLnNxbCcKKyAgICAgICAgICAgICAgICBdKSwK KyAgICAgICAgICAgICAgICBkYXRhPWRhdGEsIGlzX2VuYWJsZV90cmlnZ2VyPWlzX2VuYWJsZQor ICAgICAgICAgICAgKQogICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0 ZV9zY2FsYXIoU1FMKQogICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgICAg ICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKQEAgLTE3MjMsNyAr MTEzMiw3IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVy LCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUpKQogCi0g ICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRp dGlvbgogICAgIGRlZiByZXNldChzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQpOgogICAg ICAgICAiIiIKICAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHJlc2V0IHN0YXRpc3RpY3Mgb2Yg dGFibGUKQEAgLTE3MzUsMjcgKzExNDQsOSBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVW aWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICBzY2lkOiBT Y2hlbWEgSUQKICAgICAgICAgICAgdGlkOiBUYWJsZSBJRAogICAgICAgICAiIiIKLSAgICAgICAg dHJ5OgotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRl bXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdyZXNldF9zdGF0cy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGlkPXRpZCkKLSAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfc2Nh bGFyKFNRTCkKLSAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0 dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCi0KLSAgICAgICAgICAgIHJl dHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCi0gICAgICAgICAgICAgICAgc3VjY2Vzcz0xLAotICAg ICAgICAgICAgICAgIGluZm89Z2V0dGV4dCgiVGFibGUgc3RhdGlzdGljcyBoYXZlIGJlZW4gcmVz ZXQiKSwKLSAgICAgICAgICAgICAgICBkYXRhPXsKLSAgICAgICAgICAgICAgICAgICAgJ2lkJzog dGlkLAotICAgICAgICAgICAgICAgICAgICAnc2NpZCc6IHNjaWQKLSAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICApCisgICAgICAgIHJldHVybiBCYXNlVGFibGVWaWV3LnJlc2V0X3N0YXRp c3RpY3Moc2VsZiwgc2NpZCwgdGlkKQogCi0gICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToK LSAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUp KQotCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3By ZWNvbmRpdGlvbgogICAgIGRlZiBtc3FsKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZD1O b25lKToKICAgICAgICAgIiIiCiAgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgbW9k aWZpZWQgc3FsIGZvciB0YWJsZSBvYmplY3QKQEAgLTE3NjgsNjg2ICsxMTU5LDM0IEBAIGNsYXNz IFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5n cyk6CiAgICAgICAgICAgIHRpZDogVGFibGUgSUQKICAgICAgICAgIiIiCiAgICAgICAgIGRhdGEg PSBkaWN0KCkKKyAgICAgICAgcmVzID0gTm9uZQogICAgICAgICBmb3IgaywgdiBpbiByZXF1ZXN0 LmFyZ3MuaXRlbXMoKToKICAgICAgICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBkYXRhW2td ID0ganNvbi5sb2Fkcyh2LCBlbmNvZGluZz0ndXRmLTgnKQogICAgICAgICAgICAgZXhjZXB0IChW YWx1ZUVycm9yLCBUeXBlRXJyb3IsIEtleUVycm9yKToKICAgICAgICAgICAgICAgICBkYXRhW2td ID0gdgogCi0gICAgICAgIFNRTCwgbmFtZSA9IHNlbGYuZ2V0X3NxbChkaWQsIHNjaWQsIHRpZCwg ZGF0YSkKLSAgICAgICAgU1FMID0gcmUuc3ViKCdcbnsyLH0nLCAnXG5cbicsIFNRTCkKLSAgICAg ICAgU1FMID0gU1FMLnN0cmlwKCdcbicpCi0gICAgICAgIGlmIFNRTCA9PSAnJzoKLSAgICAgICAg ICAgIFNRTCA9ICItLW1vZGlmaWVkIFNRTCIKLSAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNw b25zZSgKLSAgICAgICAgICAgIGRhdGE9U1FMLAotICAgICAgICAgICAgc3RhdHVzPTIwMAotICAg ICAgICApCi0KLSAgICBkZWYgZ2V0X2luZGV4X2NvbnN0cmFpbnRfc3FsKHNlbGYsIGRpZCwgdGlk LCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAgICAgICBBcmdzOgotICAgICAgICAgICB0aWQ6IFRh YmxlIElECi0gICAgICAgICAgIGRhdGE6IGRhdGEgZGljdCBjb21pbmcgZnJvbSB0aGUgY2xpZW50 Ci0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGdlbmVyYXRl IG1vZGlmaWVkIHNxbCBmb3IgaW5kZXggY29uc3RyYWludHMKLSAgICAgICAgKFByaW1hcnkgS2V5 ICYgVW5pcXVlKQotICAgICAgICAiIiIKLSAgICAgICAgc3FsID0gW10KLSAgICAgICAgIyBXZSB3 aWxsIGZldGNoIGFsbCB0aGUgaW5kZXggY29uc3RyYWludHMgZm9yIHRoZSB0YWJsZQotICAgICAg ICBpbmRleF9jb25zdHJhaW50cyA9IHsKLSAgICAgICAgICAgICdwJzogJ3ByaW1hcnlfa2V5Jywg J3UnOiAndW5pcXVlX2NvbnN0cmFpbnQnCi0gICAgICAgIH0KLQotICAgICAgICBmb3IgY3R5cGUg aW4gaW5kZXhfY29uc3RyYWludHMua2V5cygpOgotICAgICAgICAgICAgIyBDaGVjayBpZiBjb25z dHJhaW50IGlzIGluIGRhdGEKLSAgICAgICAgICAgICMgSWYgeWVzIHRoZW4gd2UgbmVlZCB0byBj aGVjayBmb3IgYWRkL2NoYW5nZS9kZWxldGUKLSAgICAgICAgICAgIGlmIGluZGV4X2NvbnN0cmFp bnRzW2N0eXBlXSBpbiBkYXRhOgotICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQgPSBkYXRhW2lu ZGV4X2NvbnN0cmFpbnRzW2N0eXBlXV0KLSAgICAgICAgICAgICAgICAjIElmIGNvbnN0cmFpbnQo cykgaXMvYXJlIGRlbGV0ZWQKLSAgICAgICAgICAgICAgICBpZiAnZGVsZXRlZCcgaW4gY29uc3Ry YWludDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gY29uc3RyYWludFsnZGVsZXRlZCdd OgotICAgICAgICAgICAgICAgICAgICAgICAgY1snc2NoZW1hJ10gPSBkYXRhWydzY2hlbWEnXQot ICAgICAgICAgICAgICAgICAgICAgICAgY1sndGFibGUnXSA9IGRhdGFbJ25hbWUnXQotCi0gICAg ICAgICAgICAgICAgICAgICAgICAjIFNxbCBmb3IgZHJvcAotICAgICAgICAgICAgICAgICAgICAg ICAgc3FsLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfdGVtcGxh dGUoIi8iLmpvaW4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxmLmluZGV4 X2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdkZWxldGUuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh PWMsIGNvbm49c2VsZi5jb25uKS5zdHJpcCgnXG4nKQotICAgICAgICAgICAgICAgICAgICAgICAg KQotCi0gICAgICAgICAgICAgICAgaWYgJ2NoYW5nZWQnIGluIGNvbnN0cmFpbnQ6Ci0gICAgICAg ICAgICAgICAgICAgIGZvciBjIGluIGNvbnN0cmFpbnRbJ2NoYW5nZWQnXToKLSAgICAgICAgICAg ICAgICAgICAgICAgIGNbJ3NjaGVtYSddID0gZGF0YVsnc2NoZW1hJ10KLSAgICAgICAgICAgICAg ICAgICAgICAgIGNbJ3RhYmxlJ10gPSBkYXRhWyduYW1lJ10KLQotICAgICAgICAgICAgICAgICAg ICAgICAgcHJvcGVydGllc19zcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgW3NlbGYuaW5kZXhfY29uc3RyYWludF90ZW1wbGF0ZV9wYXRo LCAncHJvcGVydGllcy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRp ZCwgdGlkPXRpZCwgY2lkPWNbJ29pZCddLCBjb25zdHJhaW50X3R5cGU9Y3R5cGUpCi0gICAgICAg ICAgICAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QocHJv cGVydGllc19zcWwpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJy b3Jtc2c9cmVzKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBvbGRfZGF0YSA9IHJlc1sncm93 cyddWzBdCi0gICAgICAgICAgICAgICAgICAgICAgICAjIFNxbCB0byB1cGRhdGUgb2JqZWN0Ci0g ICAgICAgICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNlbGYuaW5kZXhfY29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAndXBkYXRlLnNxbCddKSwgZGF0YT1jLCBvX2RhdGE9b2xk X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm49c2VsZi5jb25uKS5z dHJpcCgnXG4nKQotICAgICAgICAgICAgICAgICAgICAgICAgKQotCi0gICAgICAgICAgICAgICAg aWYgJ2FkZGVkJyBpbiBjb25zdHJhaW50OgotICAgICAgICAgICAgICAgICAgICBmb3IgYyBpbiBj b25zdHJhaW50WydhZGRlZCddOgotICAgICAgICAgICAgICAgICAgICAgICAgY1snc2NoZW1hJ10g PSBkYXRhWydzY2hlbWEnXQotICAgICAgICAgICAgICAgICAgICAgICAgY1sndGFibGUnXSA9IGRh dGFbJ25hbWUnXQotCi0gICAgICAgICAgICAgICAgICAgICAgICAjIFNxbCB0byBhZGQgb2JqZWN0 Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiBzZWxmLnZhbGlkYXRlX2NvbnN0cmFpbnMoaW5k ZXhfY29uc3RyYWludHNbY3R5cGVdLCBjKToKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBz cWwuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfdGVtcGxh dGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5p bmRleF9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkYXRhPWMsIGNvbm49c2VsZi5jb25uLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3RyYWludF9uYW1lPSdQUklNQVJZIEtFWScKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGN0eXBlID09ICdwJyBlbHNlICdVTklR VUUnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkuc3RyaXAoJ1xuJykKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbC5hcHBlbmQoCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGdldHRleHQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnLS0gZGVmaW5pdGlvbiBpbmNvbXBsZXRlIGZvciB7MH0gY29uc3RyYWludCcuZm9ybWF0 KGluZGV4X2NvbnN0cmFpbnRzW2N0eXBlXSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgaWYgbGVuKHNxbCkg PiAwOgotICAgICAgICAgICAgIyBKb2luIGFsbCB0aGUgc3FsKHMpIGFzIHNpbmdsZSBzdHJpbmcK LSAgICAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzcWwpCi0gICAgICAgIGVsc2U6Ci0gICAg ICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGdldF9mb3JlaWduX2tleV9zcWwoc2VsZiwg dGlkLCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAgICAgICBBcmdzOgotICAgICAgICAgICB0aWQ6 IFRhYmxlIElECi0gICAgICAgICAgIGRhdGE6IGRhdGEgZGljdCBjb21pbmcgZnJvbSB0aGUgY2xp ZW50Ci0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGdlbmVy YXRlIG1vZGlmaWVkIHNxbCBmb3IgZm9yZWlnbiBrZXkKLSAgICAgICAgIiIiCi0gICAgICAgIHNx bCA9IFtdCi0gICAgICAgICMgQ2hlY2sgaWYgY29uc3RyYWludCBpcyBpbiBkYXRhCi0gICAgICAg ICMgSWYgeWVzIHRoZW4gd2UgbmVlZCB0byBjaGVjayBmb3IgYWRkL2NoYW5nZS9kZWxldGUKLSAg ICAgICAgaWYgJ2ZvcmVpZ25fa2V5JyBpbiBkYXRhOgotICAgICAgICAgICAgY29uc3RyYWludCA9 IGRhdGFbJ2ZvcmVpZ25fa2V5J10KLSAgICAgICAgICAgICMgSWYgY29uc3RyYWludChzKSBpcy9h cmUgZGVsZXRlZAotICAgICAgICAgICAgaWYgJ2RlbGV0ZWQnIGluIGNvbnN0cmFpbnQ6Ci0gICAg ICAgICAgICAgICAgZm9yIGMgaW4gY29uc3RyYWludFsnZGVsZXRlZCddOgotICAgICAgICAgICAg ICAgICAgICBjWydzY2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCi0gICAgICAgICAgICAgICAgICAg IGNbJ3RhYmxlJ10gPSBkYXRhWyduYW1lJ10KLQotICAgICAgICAgICAgICAgICAgICAjIFNxbCBm b3IgZHJvcAotICAgICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKAotICAgICAgICAgICAgICAg ICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFtzZWxmLmZvcmVpZ25fa2V5X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdkZWxldGUuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRhdGE9YywgY29ubj1zZWxmLmNvbm4pLnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAgICAg ICkKLQotICAgICAgICAgICAgaWYgJ2NoYW5nZWQnIGluIGNvbnN0cmFpbnQ6Ci0gICAgICAgICAg ICAgICAgZm9yIGMgaW4gY29uc3RyYWludFsnY2hhbmdlZCddOgotICAgICAgICAgICAgICAgICAg ICBjWydzY2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCi0gICAgICAgICAgICAgICAgICAgIGNbJ3Rh YmxlJ10gPSBkYXRhWyduYW1lJ10KLQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzX3Nx bCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKLSAgICAgICAgICAgICAgICAgICAgICAgIFtz ZWxmLmZvcmVpZ25fa2V5X3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKLSAgICAg ICAgICAgICAgICAgICAgICAgIHRpZD10aWQsIGNpZD1jWydvaWQnXSkKLSAgICAgICAgICAgICAg ICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KHByb3BlcnRpZXNfc3Fs KQotICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCi0KLSAgICAg ICAgICAgICAgICAgICAgb2xkX2RhdGEgPSByZXNbJ3Jvd3MnXVswXQotICAgICAgICAgICAgICAg ICAgICAjIFNxbCB0byB1cGRhdGUgb2JqZWN0Ci0gICAgICAgICAgICAgICAgICAgIHNxbC5hcHBl bmQoCi0gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oWwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZm9yZWlnbl9rZXlfdGVtcGxhdGVfcGF0 aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXBkYXRlLnNxbCddKSwgZGF0YT1jLCBv X2RhdGE9b2xkX2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubj1zZWxmLmNv bm4pLnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAgICAgICkKLQotICAgICAgICAgICAgICAg ICAgICBpZiBub3Qgc2VsZi52YWxpZGF0ZV9jb25zdHJhaW5zKCdmb3JlaWduX2tleScsIGMpOgot ICAgICAgICAgICAgICAgICAgICAgICAgc3FsLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICBnZXR0ZXh0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS0gZGVm aW5pdGlvbiBpbmNvbXBsZXRlIGZvciBmb3JlaWduX2tleSBjb25zdHJhaW50JwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzcWwpCi0KLSAgICAgICAgICAgICAg ICAgICAgaWYgJ2NvbHVtbnMnIGluIGM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb2xzID0g W10KLSAgICAgICAgICAgICAgICAgICAgICAgIGZvciBjb2wgaW4gY1snY29sdW1ucyddOgotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHMuYXBwZW5kKGNvbFsnbG9jYWxfY29sdW1uJ10p Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNvdmVyaW5naW5kZXggPSBzZWxmLnNlYXJjaF9j b3ZlcmluZ2luZGV4KHRpZCwgY29scykKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgY292 ZXJpbmdpbmRleCBpcyBOb25lIGFuZCAnYXV0b2luZGV4JyBpbiBjIGFuZCBjWydhdXRvaW5kZXgn XSBhbmQgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoJ2NvdmVyaW5naW5kZXgn IGluIGMgYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbJ2Nv dmVyaW5naW5kZXgnXSAhPSAnJyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsLmFw cGVuZChyZW5kZXJfdGVtcGxhdGUoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIv Ii5qb2luKFtzZWxmLmZvcmVpZ25fa2V5X3RlbXBsYXRlX3BhdGgsICdjcmVhdGVfaW5kZXguc3Fs J10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWMsIGNvbm49c2VsZi5j b25uKS5zdHJpcCgnXG4nKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KQotCi0gICAgICAgICAgICBpZiAnYWRkZWQnIGluIGNvbnN0cmFpbnQ6Ci0gICAgICAgICAgICAg ICAgZm9yIGMgaW4gY29uc3RyYWludFsnYWRkZWQnXToKLSAgICAgICAgICAgICAgICAgICAgY1sn c2NoZW1hJ10gPSBkYXRhWydzY2hlbWEnXQotICAgICAgICAgICAgICAgICAgICBjWyd0YWJsZSdd ID0gZGF0YVsnbmFtZSddCi0KLSAgICAgICAgICAgICAgICAgICAgIyBTcWwgdG8gYWRkIG9iamVj dAotICAgICAgICAgICAgICAgICAgICAjIENvbHVtbnMKLQotICAgICAgICAgICAgICAgICAgICBp ZiBub3Qgc2VsZi52YWxpZGF0ZV9jb25zdHJhaW5zKCdmb3JlaWduX2tleScsIGMpOgotICAgICAg ICAgICAgICAgICAgICAgICAgc3FsLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBnZXR0ZXh0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS0gZGVmaW5pdGlv biBpbmNvbXBsZXRlIGZvciBmb3JlaWduX2tleSBjb25zdHJhaW50JwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICAg ICAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzcWwpCi0KLSAgICAgICAgICAgICAgICAgICAg U1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmZvcmVpZ25fa2V5X3RlbXBsYXRl X3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ2dldF9wYXJlbnQuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGlkPWNbJ2NvbHVtbnMnXVswXVsncmVmZXJlbmNlcyddKQotICAgICAgICAgICAg ICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKLSAg ICAgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cnNldCkKLQotICAgICAgICAg ICAgICAgICAgICBjWydyZW1vdGVfc2NoZW1hJ10gPSByc2V0Wydyb3dzJ11bMF1bJ3NjaGVtYSdd Ci0gICAgICAgICAgICAgICAgICAgIGNbJ3JlbW90ZV90YWJsZSddID0gcnNldFsncm93cyddWzBd Wyd0YWJsZSddCi0KLSAgICAgICAgICAgICAgICAgICAgc3FsLmFwcGVuZCgKLSAgICAgICAgICAg ICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiLyIuam9pbihbc2VsZi5mb3JlaWduX2tleV90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnY3JlYXRlLnNxbCddKSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkYXRhPWMsIGNvbm49c2VsZi5jb25uCi0gICAgICAgICAgICAgICAgICAg ICAgICApLnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAgICAgICkKLQotICAgICAgICAgICAg ICAgICAgICBpZiBjWydhdXRvaW5kZXgnXToKLSAgICAgICAgICAgICAgICAgICAgICAgIHNxbC5h cHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5mb3JlaWduX2tleV90 ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J2NyZWF0ZV9pbmRleC5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh dGE9YywgY29ubj1zZWxmLmNvbm4pLnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAgICAgICAg ICApCi0KLSAgICAgICAgaWYgbGVuKHNxbCkgPiAwOgotICAgICAgICAgICAgIyBKb2luIGFsbCB0 aGUgc3FsKHMpIGFzIHNpbmdsZSBzdHJpbmcKLSAgICAgICAgICAgIHJldHVybiAnXG5cbicuam9p bihzcWwpCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVm IGdldF9jaGVja19jb25zdHJhaW50X3NxbChzZWxmLCB0aWQsIGRhdGEpOgotICAgICAgICAiIiIK LSAgICAgICAgIEFyZ3M6Ci0gICAgICAgICAgIHRpZDogVGFibGUgSUQKLSAgICAgICAgICAgZGF0 YTogZGF0YSBkaWN0IGNvbWluZyBmcm9tIHRoZSBjbGllbnQKLQotICAgICAgICBSZXR1cm5zOgot ICAgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBnZW5lcmF0ZSBtb2RpZmllZCBzcWwgZm9yIGNo ZWNrIGNvbnN0cmFpbnQKLSAgICAgICAgIiIiCi0gICAgICAgIHNxbCA9IFtdCi0gICAgICAgICMg Q2hlY2sgaWYgY29uc3RyYWludCBpcyBpbiBkYXRhCi0gICAgICAgICMgSWYgeWVzIHRoZW4gd2Ug bmVlZCB0byBjaGVjayBmb3IgYWRkL2NoYW5nZS9kZWxldGUKLSAgICAgICAgaWYgJ2NoZWNrX2Nv bnN0cmFpbnQnIGluIGRhdGE6Ci0gICAgICAgICAgICBjb25zdHJhaW50ID0gZGF0YVsnY2hlY2tf Y29uc3RyYWludCddCi0gICAgICAgICAgICAjIElmIGNvbnN0cmFpbnQocykgaXMvYXJlIGRlbGV0 ZWQKLSAgICAgICAgICAgIGlmICdkZWxldGVkJyBpbiBjb25zdHJhaW50OgotICAgICAgICAgICAg ICAgIGZvciBjIGluIGNvbnN0cmFpbnRbJ2RlbGV0ZWQnXToKLSAgICAgICAgICAgICAgICAgICAg Y1snc2NoZW1hJ10gPSBkYXRhWydzY2hlbWEnXQotICAgICAgICAgICAgICAgICAgICBjWyd0YWJs ZSddID0gZGF0YVsnbmFtZSddCi0KLSAgICAgICAgICAgICAgICAgICAgIyBTcWwgZm9yIGRyb3AK LSAgICAgICAgICAgICAgICAgICAgc3FsLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAg IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBb c2VsZi5jaGVja19jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdkZWxldGUuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh dGE9YywgY29ubj1zZWxmLmNvbm4pLnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAgICAgICkK LQotICAgICAgICAgICAgaWYgJ2NoYW5nZWQnIGluIGNvbnN0cmFpbnQ6Ci0gICAgICAgICAgICAg ICAgZm9yIGMgaW4gY29uc3RyYWludFsnY2hhbmdlZCddOgotICAgICAgICAgICAgICAgICAgICBj WydzY2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCi0gICAgICAgICAgICAgICAgICAgIGNbJ3RhYmxl J10gPSBkYXRhWyduYW1lJ10KLQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzX3NxbCA9 IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKLSAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxm LmNoZWNrX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAg ICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCwgY2lkPWNbJ29pZCddKQotICAgICAgICAgICAg ICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QocHJvcGVydGllc19z cWwpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKLQotICAg ICAgICAgICAgICAgICAgICBvbGRfZGF0YSA9IHJlc1sncm93cyddWzBdCi0gICAgICAgICAgICAg ICAgICAgICMgU3FsIHRvIHVwZGF0ZSBvYmplY3QKLSAgICAgICAgICAgICAgICAgICAgc3FsLmFw cGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihb Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGVja19jb25zdHJhaW50X3RlbXBs YXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VwZGF0ZS5zcWwnXSksIGRh dGE9Yywgb19kYXRhPW9sZF9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm49 c2VsZi5jb25uKS5zdHJpcCgnXG4nKQotICAgICAgICAgICAgICAgICAgICApCi0KLSAgICAgICAg ICAgIGlmICdhZGRlZCcgaW4gY29uc3RyYWludDoKLSAgICAgICAgICAgICAgICBmb3IgYyBpbiBj b25zdHJhaW50WydhZGRlZCddOgotICAgICAgICAgICAgICAgICAgICBjWydzY2hlbWEnXSA9IGRh dGFbJ3NjaGVtYSddCi0gICAgICAgICAgICAgICAgICAgIGNbJ3RhYmxlJ10gPSBkYXRhWyduYW1l J10KLQotICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi52YWxpZGF0ZV9jb25zdHJhaW5z KCdjaGVja19jb25zdHJhaW50JywgYyk6Ci0gICAgICAgICAgICAgICAgICAgICAgICBzcWwuYXBw ZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRleHQoCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICctLSBkZWZpbml0aW9uIGluY29tcGxldGUgZm9yIGNoZWNrX2Nv bnN0cmFpbnQnCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAgICAg ICAgICAgICAgKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNx bCkKLQotICAgICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKAotICAgICAgICAgICAgICAgICAg ICAgICAgcmVuZGVyX3RlbXBsYXRlKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIi5q b2luKFtzZWxmLmNoZWNrX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGF0YT1jLCBjb25uPXNlbGYuY29ubgotICAgICAgICAgICAgICAgICAgICAg ICAgKS5zdHJpcCgnXG4nKQotICAgICAgICAgICAgICAgICAgICApCi0KLSAgICAgICAgaWYgbGVu KHNxbCkgPiAwOgotICAgICAgICAgICAgIyBKb2luIGFsbCB0aGUgc3FsKHMpIGFzIHNpbmdsZSBz dHJpbmcKLSAgICAgICAgICAgIHJldHVybiAnXG5cbicuam9pbihzcWwpCi0gICAgICAgIGVsc2U6 Ci0gICAgICAgICAgICByZXR1cm4gTm9uZQotCi0gICAgZGVmIGdldF9leGNsdXNpb25fY29uc3Ry YWludF9zcWwoc2VsZiwgZGlkLCB0aWQsIGRhdGEpOgotICAgICAgICAiIiIKLSAgICAgICAgIEFy Z3M6Ci0gICAgICAgICAgIHRpZDogVGFibGUgSUQKLSAgICAgICAgICAgZGF0YTogZGF0YSBkaWN0 IGNvbWluZyBmcm9tIHRoZSBjbGllbnQKLQotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgIFRo aXMgZnVuY3Rpb24gd2lsbCBnZW5lcmF0ZSBtb2RpZmllZCBzcWwgZm9yIGV4Y2x1c2lvbiBjb25z dHJhaW50Ci0gICAgICAgICIiIgotICAgICAgICBzcWwgPSBbXQotICAgICAgICAjIENoZWNrIGlm IGNvbnN0cmFpbnQgaXMgaW4gZGF0YQotICAgICAgICAjIElmIHllcyB0aGVuIHdlIG5lZWQgdG8g Y2hlY2sgZm9yIGFkZC9jaGFuZ2UvZGVsZXRlCi0gICAgICAgIGlmICdleGNsdWRlX2NvbnN0cmFp bnQnIGluIGRhdGE6Ci0gICAgICAgICAgICBjb25zdHJhaW50ID0gZGF0YVsnZXhjbHVkZV9jb25z dHJhaW50J10KLSAgICAgICAgICAgICMgSWYgY29uc3RyYWludChzKSBpcy9hcmUgZGVsZXRlZAot ICAgICAgICAgICAgaWYgJ2RlbGV0ZWQnIGluIGNvbnN0cmFpbnQ6Ci0gICAgICAgICAgICAgICAg Zm9yIGMgaW4gY29uc3RyYWludFsnZGVsZXRlZCddOgotICAgICAgICAgICAgICAgICAgICBjWydz Y2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCi0gICAgICAgICAgICAgICAgICAgIGNbJ3RhYmxlJ10g PSBkYXRhWyduYW1lJ10KLQotICAgICAgICAgICAgICAgICAgICAjIFNxbCBmb3IgZHJvcAotICAg ICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKAotICAgICAgICAgICAgICAgICAgICAgICAgcmVu ZGVyX3RlbXBsYXRlKCIvIi5qb2luKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxm LmV4Y2x1c2lvbl9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdkZWxldGUuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh dGE9YywgY29ubj1zZWxmLmNvbm4pLnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAgICAgICkK LQotICAgICAgICAgICAgaWYgJ2NoYW5nZWQnIGluIGNvbnN0cmFpbnQ6Ci0gICAgICAgICAgICAg ICAgZm9yIGMgaW4gY29uc3RyYWludFsnY2hhbmdlZCddOgotICAgICAgICAgICAgICAgICAgICBj WydzY2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCi0gICAgICAgICAgICAgICAgICAgIGNbJ3RhYmxl J10gPSBkYXRhWyduYW1lJ10KLQotICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzX3NxbCA9 IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKLSAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxm LmV4Y2x1c2lvbl9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwK LSAgICAgICAgICAgICAgICAgICAgICAgIGRpZD1kaWQsIHRpZD10aWQsIGNpZD1jWydvaWQnXSkK LSAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0 KHByb3BlcnRpZXNfc3FsKQotICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1z Zz1yZXMpCi0KLSAgICAgICAgICAgICAgICAgICAgb2xkX2RhdGEgPSByZXNbJ3Jvd3MnXVswXQot ICAgICAgICAgICAgICAgICAgICAjIFNxbCB0byB1cGRhdGUgb2JqZWN0Ci0gICAgICAgICAgICAg ICAgICAgIHNxbC5hcHBlbmQoCi0gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfdGVtcGxh dGUoIi8iLmpvaW4oWwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXhjbHVzaW9u X2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAn dXBkYXRlLnNxbCddKSwgZGF0YT1jLCBvX2RhdGE9b2xkX2RhdGEsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29ubj1zZWxmLmNvbm4pLnN0cmlwKCdcbicpCi0gICAgICAgICAgICAgICAg ICAgICkKLQotICAgICAgICAgICAgaWYgJ2FkZGVkJyBpbiBjb25zdHJhaW50OgotICAgICAgICAg ICAgICAgIGZvciBjIGluIGNvbnN0cmFpbnRbJ2FkZGVkJ106Ci0gICAgICAgICAgICAgICAgICAg IGNbJ3NjaGVtYSddID0gZGF0YVsnc2NoZW1hJ10KLSAgICAgICAgICAgICAgICAgICAgY1sndGFi bGUnXSA9IGRhdGFbJ25hbWUnXQotCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnZh bGlkYXRlX2NvbnN0cmFpbnMoJ2V4Y2x1ZGVfY29uc3RyYWludCcsIGMpOgotICAgICAgICAgICAg ICAgICAgICAgICAgc3FsLmFwcGVuZCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXR0 ZXh0KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLS0gZGVmaW5pdGlvbiBpbmNv bXBsZXRlIGZvciBleGNsdXNpb25fY29uc3RyYWludCcKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICApCi0gICAgICAgICAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gJ1xuXG4nLmpvaW4oc3FsKQotCi0gICAgICAgICAgICAgICAgICAgIHNxbC5hcHBl bmQoCi0gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfdGVtcGxhdGUoCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYuZXhjbHVzaW9uX2NvbnN0cmFpbnRfdGVt cGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0 ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1jLCBjb25uPXNlbGYu Y29ubgotICAgICAgICAgICAgICAgICAgICAgICAgKS5zdHJpcCgnXG4nKQotICAgICAgICAgICAg ICAgICAgICApCi0KLSAgICAgICAgaWYgbGVuKHNxbCkgPiAwOgotICAgICAgICAgICAgIyBKb2lu IGFsbCB0aGUgc3FsKHMpIGFzIHNpbmdsZSBzdHJpbmcKLSAgICAgICAgICAgIHJldHVybiB1J1xu XG4nLmpvaW4oc3FsKQotICAgICAgICBlbHNlOgotICAgICAgICAgICAgcmV0dXJuIE5vbmUKLQot ICAgIGRlZiBnZXRfdHJpZ2dlcl9mdW5jdGlvbl9zY2hlbWEoc2VsZiwgZGF0YSk6Ci0gICAgICAg ICIiIgotICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRyaWdnZXIgZnVuY3Rpb24g d2l0aCBzY2hlbWEgbmFtZQotICAgICAgICAiIiIKLSAgICAgICAgIyBJZiBsYW5ndWFnZSBpcyAn ZWRic3BsJyB0aGVuIHRyaWdnZXIgZnVuY3Rpb24gc2hvdWxkIGJlCi0gICAgICAgICMgJ0lubGlu ZSBFREItU1BMJyBlbHNlIHdlIHdpbGwgZmluZCB0aGUgdHJpZ2dlciBmdW5jdGlvbgotICAgICAg ICAjIHdpdGggc2NoZW1hIG5hbWUuCi0gICAgICAgIGlmIGRhdGFbJ2xhbm5hbWUnXSA9PSAnZWRi c3BsJzoKLSAgICAgICAgICAgIGRhdGFbJ3RmdW5jdGlvbiddID0gJ0lubGluZSBFREItU1BMJwot ICAgICAgICBlbHNlOgorICAgICAgICBpZiB0aWQgaXMgbm90IE5vbmU6CiAgICAgICAgICAgICBT UUwgPSByZW5kZXJfdGVtcGxhdGUoCi0gICAgICAgICAgICAgICAgIi8iLmpvaW4oCi0gICAgICAg ICAgICAgICAgICAgIFtzZWxmLnRyaWdnZXJfdGVtcGxhdGVfcGF0aCwnZ2V0X3RyaWdnZXJmdW5j dGlvbnMuc3FsJ10KLSAgICAgICAgICAgICAgICApLAotICAgICAgICAgICAgICAgIHRnZm9pZD1k YXRhWyd0Z2ZvaWQnXSwKLSAgICAgICAgICAgICAgICBzaG93X3N5c3RlbV9vYmplY3RzPXNlbGYu Ymx1ZXByaW50LnNob3dfc3lzdGVtX29iamVjdHMKKyAgICAgICAgICAgICAgICAiLyIuam9pbihb c2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwnXSksCisgICAgICAgICAg ICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0aWQ9dGlkLAorICAgICAgICAgICAgICAgIGRhdGxh c3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkCiAgICAgICAgICAgICApCi0KLSAgICAgICAgICAg IHN0YXR1cywgcmVzdWx0ID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCi0gICAgICAgICAg ICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9cmVzKQotCi0gICAgICAgICAgICAjIFVwZGF0ZSB0aGUgdHJpZ2dlciBm dW5jdGlvbiB3aGljaCB3ZSBoYXZlIGZldGNoZWQgd2l0aAotICAgICAgICAgICAgIyBzY2hlbWEg bmFtZQotICAgICAgICAgICAgaWYgJ3Jvd3MnIGluIHJlc3VsdCBhbmQgbGVuKHJlc3VsdFsncm93 cyddKSA+IDAgYW5kIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGZ1bmN0aW9ucycg aW4gcmVzdWx0Wydyb3dzJ11bMF06Ci0gICAgICAgICAgICAgICAgZGF0YVsndGZ1bmN0aW9uJ10g PSByZXN1bHRbJ3Jvd3MnXVswXVsndGZ1bmN0aW9ucyddCi0gICAgICAgIHJldHVybiBkYXRhCi0K LSAgICBkZWYgX2Zvcm1hdF9hcmdzKHNlbGYsIGFyZ3MpOgotICAgICAgICAiIiIKLSAgICAgICAg VGhpcyBmdW5jdGlvbiB3aWxsIGZvcm1hdCBhcmd1bWVudHMuCi0KLSAgICAgICAgQXJnczoKLSAg ICAgICAgICAgIGFyZ3M6IEFyZ3VtZW50cwotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAgICAg ICBGb3JtYXRlZCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uCi0gICAgICAgICIiIgotICAgICAgICBm b3JtYXR0ZWRfYXJncyA9IFsiJ3swfSciLmZvcm1hdChhcmcpIGZvciBhcmcgaW4gYXJnc10KLSAg ICAgICAgcmV0dXJuICcsICcuam9pbihmb3JtYXR0ZWRfYXJncykKLQotICAgIGRlZiBnZXRfc3Fs KHNlbGYsIGRpZCwgc2NpZCwgdGlkLCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAgICAgIFRoaXMg ZnVuY3Rpb24gd2lsbCBnZW5lcmF0ZSBjcmVhdGUvdXBkYXRlIHNxbCBmcm9tIG1vZGVsIGRhdGEK LSAgICAgICAgY29taW5nIGZyb20gY2xpZW50Ci0gICAgICAgICIiIgotICAgICAgICBpZiB0aWQg aXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4o W3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKICAgICAgICAg ICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCiAgICAgICAgICAg ICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9cmVzKQogCi0gICAgICAgICAgICBvbGRfZGF0YSA9IHJlc1sncm93cydd WzBdCi0gICAgICAgICAgICBvbGRfZGF0YSA9IHNlbGYuX2Zvcm1hdHRlcihkaWQsIHNjaWQsIHRp ZCwgb2xkX2RhdGEpCi0KLSAgICAgICAgICAgICMgV2Ugd2lsbCBjb252ZXJ0IHByaXZpbGVnZXMg Y29taW5nIGZyb20gY2xpZW50IHJlcXVpcmVkCi0gICAgICAgICAgICBpZiAncmVsYWNsJyBpbiBk YXRhOgotICAgICAgICAgICAgICAgIGZvciBtb2RlIGluIFsnYWRkZWQnLCAnY2hhbmdlZCcsICdk ZWxldGVkJ106Ci0gICAgICAgICAgICAgICAgICAgIGlmIG1vZGUgaW4gZGF0YVsncmVsYWNsJ106 Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydyZWxhY2wnXVttb2RlXSA9IHBhcnNlX3By aXZfdG9fZGIoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsncmVsYWNsJ11bbW9k ZV0sIHNlbGYuYWNsCi0gICAgICAgICAgICAgICAgICAgICAgICApCi0KLSAgICAgICAgICAgICMg SWYgbmFtZSBpcyBub3QgcHJlc2VudCBpbiByZXF1ZXN0IGRhdGEKLSAgICAgICAgICAgIGlmICdu YW1lJyBub3QgaW4gZGF0YToKLSAgICAgICAgICAgICAgICBkYXRhWyduYW1lJ10gPSBvbGRfZGF0 YVsnbmFtZSddCi0KLSAgICAgICAgICAgIGRhdGEgPSBzZWxmLmNoZWNrX2FuZF9jb252ZXJ0X25h bWVfdG9fc3RyaW5nKGRhdGEpCi0KLSAgICAgICAgICAgICMgSWYgbmFtZSBpZiBub3QgcHJlc2Vu dAotICAgICAgICAgICAgaWYgJ3NjaGVtYScgbm90IGluIGRhdGE6Ci0gICAgICAgICAgICAgICAg ZGF0YVsnc2NoZW1hJ10gPSBvbGRfZGF0YVsnc2NoZW1hJ10KLQotICAgICAgICAgICAgIyBGaWx0 ZXIgb3V0IG5ldyB0YWJsZXMgZnJvbSBsaXN0LCB3ZSB3aWxsIHNlbmQgY29tcGxldGUgbGlzdAot ICAgICAgICAgICAgIyBhbmQgbm90IG5ld2x5IGFkZGVkIHRhYmxlcyBpbiB0aGUgbGlzdCBmcm9t IGNsaWVudAotICAgICAgICAgICAgIyBzbyB3ZSB3aWxsIGZpbHRlciBuZXcgdGFibGVzIGhlcmUK LSAgICAgICAgICAgIGlmICdjb2xsX2luaGVyaXRzJyBpbiBkYXRhOgotICAgICAgICAgICAgICAg IHBfbGVuID0gbGVuKG9sZF9kYXRhWydjb2xsX2luaGVyaXRzJ10pCi0gICAgICAgICAgICAgICAg Y19sZW4gPSBsZW4oZGF0YVsnY29sbF9pbmhlcml0cyddKQotICAgICAgICAgICAgICAgICMgSWYg dGFibGUocykgYWRkZWQKLSAgICAgICAgICAgICAgICBpZiBjX2xlbiA+IHBfbGVuOgotICAgICAg ICAgICAgICAgICAgICBkYXRhWydjb2xsX2luaGVyaXRzX2FkZGVkJ10gPSBsaXN0KAotICAgICAg ICAgICAgICAgICAgICAgICAgc2V0KGRhdGFbJ2NvbGxfaW5oZXJpdHMnXSkgLSBzZXQob2xkX2Rh dGFbJ2NvbGxfaW5oZXJpdHMnXSkKLSAgICAgICAgICAgICAgICAgICAgKQotICAgICAgICAgICAg ICAgICMgSWYgdGFibGUocylyZW1vdmVkCi0gICAgICAgICAgICAgICAgZWxpZiBjX2xlbiA8IHBf bGVuOgotICAgICAgICAgICAgICAgICAgICBkYXRhWydjb2xsX2luaGVyaXRzX3JlbW92ZWQnXSA9 IGxpc3QoCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXQob2xkX2RhdGFbJ2NvbGxfaW5oZXJp dHMnXSkgLSBzZXQoZGF0YVsnY29sbF9pbmhlcml0cyddKQotICAgICAgICAgICAgICAgICAgICAp Ci0gICAgICAgICAgICAgICAgIyBTYWZlIHNpZGUgdmVyaWZpY2F0aW9uLEluIGNhc2UgaXQgaGFw cGVucy4uCi0gICAgICAgICAgICAgICAgIyBJZiB1c2VyIHJlbW92ZXMgYW5kIGFkZHMgc2FtZSBu dW1iZXIgb2YgdGFibGUKLSAgICAgICAgICAgICAgICAjIGVnIHJlbW92ZWQgb25lIHRhYmxlIGFu ZCBhZGRlZCBvbmUgbmV3IHRhYmxlCi0gICAgICAgICAgICAgICAgZWxpZiBjX2xlbiA9PSBwX2xl bjoKLSAgICAgICAgICAgICAgICAgICAgZGF0YVsnY29sbF9pbmhlcml0c19hZGRlZCddID0gbGlz dCgKLSAgICAgICAgICAgICAgICAgICAgICAgIHNldChkYXRhWydjb2xsX2luaGVyaXRzJ10pIC0g c2V0KG9sZF9kYXRhWydjb2xsX2luaGVyaXRzJ10pCi0gICAgICAgICAgICAgICAgICAgICkKLSAg ICAgICAgICAgICAgICAgICAgZGF0YVsnY29sbF9pbmhlcml0c19yZW1vdmVkJ10gPSBsaXN0KAot ICAgICAgICAgICAgICAgICAgICAgICAgc2V0KG9sZF9kYXRhWydjb2xsX2luaGVyaXRzJ10pIC0g c2V0KGRhdGFbJ2NvbGxfaW5oZXJpdHMnXSkKLSAgICAgICAgICAgICAgICAgICAgKQotCi0gICAg ICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0 aCwgJ3VwZGF0ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb19k YXRhPW9sZF9kYXRhLCBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25uKQotICAgICAgICAgICAgIyBS ZW1vdmVzIHRyYWluaW5nIG5ldyBsaW5lcwotICAgICAgICAgICAgU1FMID0gU1FMLnN0cmlwKCdc bicpICsgJ1xuXG4nCi0KLSAgICAgICAgICAgICMgUGFyc2UvRm9ybWF0IGNvbHVtbnMgJiBjcmVh dGUgc3FsCi0gICAgICAgICAgICBpZiAnY29sdW1ucycgaW4gZGF0YToKLSAgICAgICAgICAgICAg ICAjIFBhcnNlIHRoZSBkYXRhIGNvbWluZyBmcm9tIGNsaWVudAotICAgICAgICAgICAgICAgIGRh dGEgPSBzZWxmLl9wYXJzZV9mb3JtYXRfY29sdW1ucyhkYXRhLCBtb2RlPSdlZGl0JykKLQotICAg ICAgICAgICAgICAgIGNvbHVtbnMgPSBkYXRhWydjb2x1bW5zJ10KLSAgICAgICAgICAgICAgICBj b2x1bW5fc3FsID0gJ1xuJwotCi0gICAgICAgICAgICAgICAgIyBJZiBjb2x1bW4ocykgaXMvYXJl IGRlbGV0ZWQKLSAgICAgICAgICAgICAgICBpZiAnZGVsZXRlZCcgaW4gY29sdW1uczoKLSAgICAg ICAgICAgICAgICAgICAgZm9yIGMgaW4gY29sdW1uc1snZGVsZXRlZCddOgotICAgICAgICAgICAg ICAgICAgICAgICAgY1snc2NoZW1hJ10gPSBkYXRhWydzY2hlbWEnXQotICAgICAgICAgICAgICAg ICAgICAgICAgY1sndGFibGUnXSA9IGRhdGFbJ25hbWUnXQotICAgICAgICAgICAgICAgICAgICAg ICAgIyBTcWwgZm9yIGRyb3AgY29sdW1uCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAnaW5o ZXJpdGVkZnJvbScgbm90IGluIGM6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1u X3NxbCArPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFtzZWxmLmNvbHVtbl90ZW1wbGF0ZV9wYXRoLCAnZGVsZXRlLnNxbCddKSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1jLCBjb25uPXNlbGYuY29ubikuc3Ry aXAoJ1xuJykgKyAnXG5cbicKLQotICAgICAgICAgICAgICAgICMgSWYgY29sdW1uKHMpIGlzL2Fy ZSBjaGFuZ2VkCi0gICAgICAgICAgICAgICAgIyBIZXJlIHdlIHdpbGwgYmUgbmVlZGluZyBwcmV2 aW91cyBwcm9wZXJ0aWVzIG9mIGNvbHVtbgotICAgICAgICAgICAgICAgICMgc28gdGhhdCB3ZSBj YW4gY29tcGFyZSAmIHVwZGF0ZSBpdAotICAgICAgICAgICAgICAgIGlmICdjaGFuZ2VkJyBpbiBj b2x1bW5zOgotICAgICAgICAgICAgICAgICAgICBmb3IgYyBpbiBjb2x1bW5zWydjaGFuZ2VkJ106 Ci0gICAgICAgICAgICAgICAgICAgICAgICBjWydzY2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCi0g ICAgICAgICAgICAgICAgICAgICAgICBjWyd0YWJsZSddID0gZGF0YVsnbmFtZSddCi0gICAgICAg ICAgICAgICAgICAgICAgICBpZiAnYXR0YWNsJyBpbiBjOgotICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNbJ2F0dGFjbCddID0gcGFyc2VfcHJpdl90b19kYihjWydhdHRhY2wnXSwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs Zi5jb2x1bW5fYWNsKQotCi0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzX3NxbCA9 IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5jb2x1bW5fdGVtcGxhdGVfcGF0aCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZD1jWydhdHRudW0nXSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNob3dfc3lzX29iamVjdHM9c2VsZi5ibHVlcHJpbnQuc2hvd19zeXN0ZW1fb2JqZWN0cwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQot Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRl X2RpY3QocHJvcGVydGllc19zcWwpCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc3Rh dHVzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9cmVzKQotICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2RhdGEgPSBy ZXNbJ3Jvd3MnXVswXQotCi0gICAgICAgICAgICAgICAgICAgICAgICBvbGRfZGF0YVsnY2x0eXBl J10sIG9sZF9kYXRhWydoYXNTcXJCcmFja2V0J10gPSBzZWxmLl9jbHR5cGVfZm9ybWF0dGVyKG9s ZF9kYXRhWydjbHR5cGUnXSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9kYXRhID0gc2Vs Zi5jb252ZXJ0X2xlbmd0aF9wcmVjaXNpb25fdG9fc3RyaW5nKG9sZF9kYXRhKQotCi0gICAgICAg ICAgICAgICAgICAgICAgICBmdWxsdHlwZSA9IHNlbGYuZ2V0X2Z1bGxfdHlwZSgKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvbGRfZGF0YVsndHlwbnNwbmFtZSddLCBvbGRfZGF0YVsndHlw bmFtZSddLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9kYXRhWydpc2R1cCddLCBv bGRfZGF0YVsnYXR0bmRpbXMnXSwgb2xkX2RhdGFbJ2F0dHR5cG1vZCddCi0gICAgICAgICAgICAg ICAgICAgICAgICApCi0KLSAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgd2UgaGF2ZSBsZW5n dGggJiBwcmVjaXNpb24gYm90aAotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hPYmogPSBy ZS5zZWFyY2gocicoXGQrKSwoXGQrKScsIGZ1bGx0eXBlKQotICAgICAgICAgICAgICAgICAgICAg ICAgaWYgbWF0Y2hPYmo6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2RhdGFbJ2F0 dGxlbiddID0gaW50KG1hdGNoT2JqLmdyb3VwKDEpKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG9sZF9kYXRhWydhdHRwcmVjaXNpb24nXSA9IGludChtYXRjaE9iai5ncm91cCgyKSkKLSAg ICAgICAgICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg IyBJZiB3ZSBoYXZlIGxlbmd0aCBvbmx5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0 Y2hPYmogPSByZS5zZWFyY2gocicoXGQrKScsIGZ1bGx0eXBlKQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIG1hdGNoT2JqOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv bGRfZGF0YVsnYXR0bGVuJ10gPSBpbnQobWF0Y2hPYmouZ3JvdXAoMSkpCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9sZF9kYXRhWydhdHRwcmVjaXNpb24nXSA9IE5vbmUKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBvbGRfZGF0YVsnYXR0bGVuJ10gPSBOb25lCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG9sZF9kYXRhWydhdHRwcmVjaXNpb24nXSA9IE5vbmUKLQotICAgICAgICAgICAgICAg ICAgICAgICAgb2xkX2RhdGFbJ2NsdHlwZSddID0gRGF0YVR5cGVSZWFkZXIucGFyc2VfdHlwZV9u YW1lKG9sZF9kYXRhWydjbHR5cGUnXSkKLQotICAgICAgICAgICAgICAgICAgICAgICAgIyBTcWwg Zm9yIGFsdGVyIGNvbHVtbgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ2luaGVyaXRlZGZy b20nIG5vdCBpbiBjOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl9zcWwgKz0g cmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBbc2VsZi5jb2x1bW5fdGVtcGxhdGVfcGF0aCwgJ3VwZGF0ZS5zcWwnXSksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRhdGE9Yywgb19kYXRhPW9sZF9kYXRhLCBjb25uPXNlbGYu Y29ubikuc3RyaXAoJ1xuJykgKyAnXG5cbicKLQotICAgICAgICAgICAgICAgICMgSWYgY29sdW1u KHMpIGlzL2FyZSBhZGRlZAotICAgICAgICAgICAgICAgIGlmICdhZGRlZCcgaW4gY29sdW1uczoK LSAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gY29sdW1uc1snYWRkZWQnXToKLSAgICAgICAg ICAgICAgICAgICAgICAgIGNbJ3NjaGVtYSddID0gZGF0YVsnc2NoZW1hJ10KLSAgICAgICAgICAg ICAgICAgICAgICAgIGNbJ3RhYmxlJ10gPSBkYXRhWyduYW1lJ10KLSAgICAgICAgICAgICAgICAg ICAgICAgICMgU3FsIGZvciBjcmVhdGUgY29sdW1uCi0gICAgICAgICAgICAgICAgICAgICAgICBp ZiAnYXR0YWNsJyBpbiBjOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbJ2F0dGFjbCdd ID0gcGFyc2VfcHJpdl90b19kYihjWydhdHRhY2wnXSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2x1bW5fYWNsKQotCi0g ICAgICAgICAgICAgICAgICAgICAgICBjID0gc2VsZi5jb252ZXJ0X2xlbmd0aF9wcmVjaXNpb25f dG9fc3RyaW5nKGMpCi0KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICdpbmhlcml0ZWRmcm9t JyBub3QgaW4gYzoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5fc3FsICs9IHJl bmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg W3NlbGYuY29sdW1uX3RlbXBsYXRlX3BhdGgsICdjcmVhdGUuc3FsJ10pLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkYXRhPWMsIGNvbm49c2VsZi5jb25uKS5zdHJpcCgnXG4nKSAr ICdcblxuJwotCi0gICAgICAgICAgICAgICAgIyBDb21iaW5lIGFsbCB0aGUgU1FMIHRvZ2V0aGVy Ci0gICAgICAgICAgICAgICAgU1FMICs9IGNvbHVtbl9zcWwuc3RyaXAoJ1xuJykKLQotICAgICAg ICAgICAgIyBDaGVjayBpZiBpbmRleCBjb25zdHJhaW50cyBhcmUgYWRkZWQvY2hhbmdlZC9kZWxl dGVkCi0gICAgICAgICAgICBpbmRleF9jb25zdHJhaW50X3NxbCA9IHNlbGYuZ2V0X2luZGV4X2Nv bnN0cmFpbnRfc3FsKGRpZCwgdGlkLCBkYXRhKQotICAgICAgICAgICAgIyBJZiB3ZSBoYXZlIGlu ZGV4IGNvbnN0cmFpbnQgc3FsIHRoZW4gYWQgaXQgaW4gbWFpbiBzcWwKLSAgICAgICAgICAgIGlm IGluZGV4X2NvbnN0cmFpbnRfc3FsIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIFNRTCAr PSAnXG4nICsgaW5kZXhfY29uc3RyYWludF9zcWwKLQotICAgICAgICAgICAgIyBDaGVjayBpZiBm b3JlaWduIGtleShzKSBpcy9hcmUgYWRkZWQvY2hhbmdlZC9kZWxldGVkCi0gICAgICAgICAgICBm b3JlaWduX2tleV9zcWwgPSBzZWxmLmdldF9mb3JlaWduX2tleV9zcWwodGlkLCBkYXRhKQotICAg ICAgICAgICAgIyBJZiB3ZSBoYXZlIGZvcmVpZ24ga2V5IHNxbCB0aGVuIGFkIGl0IGluIG1haW4g c3FsCi0gICAgICAgICAgICBpZiBmb3JlaWduX2tleV9zcWwgaXMgbm90IE5vbmU6Ci0gICAgICAg ICAgICAgICAgU1FMICs9ICdcbicgKyBmb3JlaWduX2tleV9zcWwKLQotICAgICAgICAgICAgIyBD aGVjayBpZiBjaGVjayBjb25zdHJhaW50KHMpIGlzL2FyZSBhZGRlZC9jaGFuZ2VkL2RlbGV0ZWQK LSAgICAgICAgICAgIGNoZWNrX2NvbnN0cmFpbnRfc3FsID0gc2VsZi5nZXRfY2hlY2tfY29uc3Ry YWludF9zcWwodGlkLCBkYXRhKQotICAgICAgICAgICAgIyBJZiB3ZSBoYXZlIGNoZWNrIGNvbnN0 cmFpbnQgc3FsIHRoZW4gYWQgaXQgaW4gbWFpbiBzcWwKLSAgICAgICAgICAgIGlmIGNoZWNrX2Nv bnN0cmFpbnRfc3FsIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIFNRTCArPSAnXG4nICsg Y2hlY2tfY29uc3RyYWludF9zcWwKLQotICAgICAgICAgICAgIyBDaGVjayBpZiBleGNsdXNpb24g Y29uc3RyYWludChzKSBpcy9hcmUgYWRkZWQvY2hhbmdlZC9kZWxldGVkCi0gICAgICAgICAgICBl eGNsdXNpb25fY29uc3RyYWludF9zcWwgPSBzZWxmLmdldF9leGNsdXNpb25fY29uc3RyYWludF9z cWwoZGlkLCB0aWQsIGRhdGEpCi0gICAgICAgICAgICAjIElmIHdlIGhhdmUgY2hlY2sgY29uc3Ry YWludCBzcWwgdGhlbiBhZCBpdCBpbiBtYWluIHNxbAotICAgICAgICAgICAgaWYgZXhjbHVzaW9u X2NvbnN0cmFpbnRfc3FsIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgICAgIFNRTCArPSAnXG4n ICsgZXhjbHVzaW9uX2NvbnN0cmFpbnRfc3FsCi0KLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg IHJlcXVpcmVkX2FyZ3MgPSBbCi0gICAgICAgICAgICAgICAgJ25hbWUnCi0gICAgICAgICAgICBd Ci0KLSAgICAgICAgICAgIGZvciBhcmcgaW4gcmVxdWlyZWRfYXJnczoKLSAgICAgICAgICAgICAg ICBpZiBhcmcgbm90IGluIGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXR0ZXh0 KCctLSBkZWZpbml0aW9uIGluY29tcGxldGUnKQotCi0gICAgICAgICAgICAjIHZhbGlkYXRlIGNv bnN0cmFpbnQgZGF0YS4KLSAgICAgICAgICAgIGZvciBrZXkgaW4gWydwcmltYXJ5X2tleScsICd1 bmlxdWVfY29uc3RyYWludCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAnZm9yZWlnbl9rZXkn LCAnY2hlY2tfY29uc3RyYWludCcsCi0gICAgICAgICAgICAgICAgICAgICAgICAnZXhjbHVkZV9j b25zdHJhaW50J106Ci0gICAgICAgICAgICAgICAgaWYga2V5IGluIGRhdGEgYW5kIGxlbihkYXRh W2tleV0pID4gMDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIGNvbnN0cmFpbnQgaW4gZGF0YVtr ZXldOgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYudmFsaWRhdGVfY29uc3Ry YWlucyhrZXksIGNvbnN0cmFpbnQpOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBnZXR0ZXh0KCctLSBkZWZpbml0aW9uIGluY29tcGxldGUgZm9yIHswfScuZm9ybWF0KGtleSkp Ci0KLSAgICAgICAgICAgICMgV2Ugd2lsbCBjb252ZXJ0IHByaXZpbGVnZXMgY29taW5nIGZyb20g Y2xpZW50IHJlcXVpcmVkCi0gICAgICAgICAgICAjIGluIHNlcnZlciBzaWRlIGZvcm1hdAotICAg ICAgICAgICAgaWYgJ3JlbGFjbCcgaW4gZGF0YToKLSAgICAgICAgICAgICAgICBkYXRhWydyZWxh Y2wnXSA9IHBhcnNlX3ByaXZfdG9fZGIoZGF0YVsncmVsYWNsJ10sIHNlbGYuYWNsKQotCi0gICAg ICAgICAgICAjIFBhcnNlICYgZm9ybWF0IGNvbHVtbnMKLSAgICAgICAgICAgIGRhdGEgPSBzZWxm Ll9wYXJzZV9mb3JtYXRfY29sdW1ucyhkYXRhKQotICAgICAgICAgICAgZGF0YSA9IHNlbGYuY2hl Y2tfYW5kX2NvbnZlcnRfbmFtZV90b19zdHJpbmcoZGF0YSkKLQotICAgICAgICAgICAgaWYgJ2Zv cmVpZ25fa2V5JyBpbiBkYXRhOgotICAgICAgICAgICAgICAgIGZvciBjIGluIGRhdGFbJ2ZvcmVp Z25fa2V5J106Ci0gICAgICAgICAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIu am9pbihbc2VsZi5mb3JlaWduX2tleV90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfcGFyZW50LnNxbCddKSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZD1jWydjb2x1bW5zJ11b MF1bJ3JlZmVyZW5jZXMnXSkKLSAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCByc2V0ID0gc2Vs Zi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBz dGF0dXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXJzZXQpCi0KLSAgICAgICAgICAgICAgICAgICAgY1sncmVtb3RlX3NjaGVt YSddID0gcnNldFsncm93cyddWzBdWydzY2hlbWEnXQotICAgICAgICAgICAgICAgICAgICBjWydy ZW1vdGVfdGFibGUnXSA9IHJzZXRbJ3Jvd3MnXVswXVsndGFibGUnXQotCi0gICAgICAgICAgICAj IElmIHRoZSByZXF1ZXN0IGZvciBuZXcgb2JqZWN0IHdoaWNoIGRvIG5vdCBoYXZlIGRpZAotICAg ICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3Bh dGgsICdjcmVhdGUuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh dGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCisgICAgICAgIFNRTCwgbmFtZSA9IHNlbGYuZ2V0X3Nx bChkaWQsIHNjaWQsIHRpZCwgZGF0YSwgcmVzKQogICAgICAgICBTUUwgPSByZS5zdWIoJ1xuezIs fScsICdcblxuJywgU1FMKQogICAgICAgICBTUUwgPSBTUUwuc3RyaXAoJ1xuJykKKyAgICAgICAg aWYgU1FMID09ICcnOgorICAgICAgICAgICAgU1FMID0gIi0tbW9kaWZpZWQgU1FMIgorICAgICAg ICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgZGF0YT1TUUwsCisgICAg ICAgICAgICBzdGF0dXM9MjAwCisgICAgICAgICkKIAotICAgICAgICByZXR1cm4gU1FMLCBkYXRh WyduYW1lJ10gaWYgJ25hbWUnIGluIGRhdGEgZWxzZSBvbGRfZGF0YVsnbmFtZSddCi0KLSAgICBA c3RhdGljbWV0aG9kCi0gICAgZGVmIHZhbGlkYXRlX2NvbnN0cmFpbnMoa2V5LCBkYXRhKToKLQot ICAgICAgICBpZiBrZXkgPT0gJ3ByaW1hcnlfa2V5JyBvciBrZXkgPT0gJ3VuaXF1ZV9jb25zdHJh aW50JzoKLSAgICAgICAgICAgIGlmICdjb2x1bW5zJyBpbiBkYXRhIGFuZCBsZW4oZGF0YVsnY29s dW1ucyddKSA+IDA6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKLSAgICAgICAgICAgIGVs c2U6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgIGVsaWYga2V5ID09ICdm b3JlaWduX2tleSc6Ci0gICAgICAgICAgICBpZiAnb2lkJyBub3QgaW4gZGF0YToKLSAgICAgICAg ICAgICAgICBmb3IgYXJnIGluIFsnY29sdW1ucyddOgotICAgICAgICAgICAgICAgICAgICBpZiBh cmcgbm90IGluIGRhdGE6Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKLSAg ICAgICAgICAgICAgICAgICAgZWxpZiBpc2luc3RhbmNlKGRhdGFbYXJnXSwgbGlzdCkgYW5kIGxl bihkYXRhW2FyZ10pIDwgMToKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQot Ci0gICAgICAgICAgICAgICAgaWYgJ2F1dG9pbmRleCcgaW4gZGF0YSBhbmQgZGF0YVsnYXV0b2lu ZGV4J10gYW5kIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICgnY292ZXJpbmdpbmRleCcgbm90 IGluIGRhdGEgb3IKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGF0YVsnY292ZXJpbmdpbmRleCddID09ICcnKToKLSAgICAgICAgICAgICAgICAgICAg cmV0dXJuIEZhbHNlCi0KLSAgICAgICAgICAgIHJldHVybiBUcnVlCi0KLSAgICAgICAgZWxpZiBr ZXkgPT0gJ2NoZWNrX2NvbnN0cmFpbnQnOgotICAgICAgICAgICAgZm9yIGFyZyBpbiBbJ2NvbnNy YyddOgotICAgICAgICAgICAgICAgIGlmIGFyZyBub3QgaW4gZGF0YSBvciBkYXRhW2FyZ10gPT0g Jyc6Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgcmV0dXJu IFRydWUKLQotICAgICAgICBlbGlmIGtleSA9PSAnZXhjbHVkZV9jb25zdHJhaW50JzoKLSAgICAg ICAgICAgIHBhc3MKLQotICAgICAgICByZXR1cm4gVHJ1ZQotCi0gICAgQGNoZWNrX3ByZWNvbmRp dGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBkZXBl bmRlbnRzKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCk6CiAgICAgICAgICIiIgogICAg ICAgICBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgZGVwZW5kZW50cyBhbmQgcmV0dXJuIGFqYXggcmVz cG9uc2UKQEAgLTI0NjAsNDMgKzExOTksOSBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVW aWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgc2NpZDog U2NoZW1hIElECiAgICAgICAgICAgICB0aWQ6IFRhYmxlIElECiAgICAgICAgICIiIgotICAgICAg ICAjIFNwZWNpZmljIGNvbmRpdGlvbiBmb3IgY29sdW1uIHdoaWNoIHdlIG5lZWQgdG8gYXBwZW5k Ci0gICAgICAgIHdoZXJlID0gIldIRVJFIGRlcC5yZWZvYmppZD17MH06Ok9JRCIuZm9ybWF0KHRp ZCkKKyAgICAgICAgcmV0dXJuIEJhc2VUYWJsZVZpZXcuZ2V0X3RhYmxlX2RlcGVuZGVudHMoc2Vs ZiwgdGlkKQogCi0gICAgICAgIGRlcGVuZGVudHNfcmVzdWx0ID0gc2VsZi5nZXRfZGVwZW5kZW50 cygKLSAgICAgICAgICAgIHNlbGYuY29ubiwgdGlkCi0gICAgICAgICkKLQotICAgICAgICAjIFNw ZWNpZmljIHNxbCB0byBydW4gYWdhaW50IGNvbHVtbiB0byBmZXRjaCBkZXBlbmRlbnRzCi0gICAg ICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXBlbmQuc3FsJ10pLCB3 aGVyZT13aGVyZSkKLQotICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2Rp Y3QoU1FMKQotICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgcmV0dXJuIGludGVy bmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCi0KLSAgICAgICAgZm9yIHJvdyBpbiByZXNb J3Jvd3MnXToKLSAgICAgICAgICAgIHJlZl9uYW1lID0gcm93WydyZWZuYW1lJ10KLSAgICAgICAg ICAgIGlmIHJlZl9uYW1lIGlzIE5vbmU6Ci0gICAgICAgICAgICAgICAgY29udGludWUKLQotICAg ICAgICAgICAgZGVwX3R5cGUgPSAnJwotICAgICAgICAgICAgZGVwX3N0ciA9IHJvd1snZGVwdHlw ZSddCi0gICAgICAgICAgICBpZiBkZXBfc3RyID09ICdhJzoKLSAgICAgICAgICAgICAgICBkZXBf dHlwZSA9ICdhdXRvJwotICAgICAgICAgICAgZWxpZiBkZXBfc3RyID09ICduJzoKLSAgICAgICAg ICAgICAgICBkZXBfdHlwZSA9ICdub3JtYWwnCi0gICAgICAgICAgICBlbGlmIGRlcF9zdHIgPT0g J2knOgotICAgICAgICAgICAgICAgIGRlcF90eXBlID0gJ2ludGVybmFsJwotCi0gICAgICAgICAg ICBkZXBlbmRlbnRzX3Jlc3VsdC5hcHBlbmQoeyd0eXBlJzogJ3NlcXVlbmNlJywgJ25hbWUnOiBy ZWZfbmFtZSwgJ2ZpZWxkJzogZGVwX3R5cGV9KQotCi0gICAgICAgIHJldHVybiBhamF4X3Jlc3Bv bnNlKAotICAgICAgICAgICAgcmVzcG9uc2U9ZGVwZW5kZW50c19yZXN1bHQsCi0gICAgICAgICAg ICBzdGF0dXM9MjAwCi0gICAgICAgICkKLQotICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBA QmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KICAgICBkZWYgZGVwZW5kZW5jaWVzKHNl bGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCk6CiAgICAgICAgICIiIgogICAgICAgICBUaGlz IGZ1bmN0aW9uIGdldCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZXR1cm4gYWpheCByZXNwb25zZQpA QCAtMjUwOCwxOCArMTIxMywxMCBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBE YXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgZGlkOiBEYXRhYmFz ZSBJRAogICAgICAgICAgICAgc2NpZDogU2NoZW1hIElECiAgICAgICAgICAgICB0aWQ6IFRhYmxl IElECi0KICAgICAgICAgIiIiCi0gICAgICAgIGRlcGVuZGVuY2llc19yZXN1bHQgPSBzZWxmLmdl dF9kZXBlbmRlbmNpZXMoCi0gICAgICAgICAgICBzZWxmLmNvbm4sIHRpZAotICAgICAgICApCi0K LSAgICAgICAgcmV0dXJuIGFqYXhfcmVzcG9uc2UoCi0gICAgICAgICAgICByZXNwb25zZT1kZXBl bmRlbmNpZXNfcmVzdWx0LAotICAgICAgICAgICAgc3RhdHVzPTIwMAotICAgICAgICApCisgICAg ICAgIHJldHVybiBCYXNlVGFibGVWaWV3LmdldF90YWJsZV9kZXBlbmRlbmNpZXMoc2VsZiwgdGlk KQogCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3By ZWNvbmRpdGlvbgogICAgIGRlZiBzcWwoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkKToK ICAgICAgICAgIiIiCiAgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGVzIHJldmVyc2Ug ZW5naW5lZXJlZCBzcWwgZm9yCkBAIC0yNTM0LDE1ICsxMjMxLDExIEBAIGNsYXNzIFRhYmxlVmll dyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAg ICAgICIiIgogICAgICAgICBtYWluX3NxbCA9IFtdCiAKLSAgICAgICAgIiIiCi0gICAgICAgICMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgIyAxKSBSZXZlcnNl IGVuZ2luZWVyZWQgc3FsIGZvciBUQUJMRQotICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICIiIgotICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxh dGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkaWQ9ZGlkLCBzY2lkPXNjaWQsIHRpZD10aWQsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKKyAgICAgICAg U1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGFibGVf dGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAgZGlkPWRpZCwg c2NpZD1zY2lkLCB0aWQ9dGlkLAorICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxh c3RzeXNvaWQKKyAgICAgICAgKQogICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVj dXRlX2RpY3QoU1FMKQogICAgICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgcmV0dXJu IGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCkBAIC0yNTUyLDI1MCArMTI0NSwx MCBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFj dXVtU2V0dGluZ3MpOgogCiAgICAgICAgIGRhdGEgPSByZXNbJ3Jvd3MnXVswXQogCi0gICAgICAg ICMgVGFibGUgJiBTY2hlbWEgZGVjbGFyYXRpb24gc28gdGhhdCB3ZSBjYW4gdXNlIHRoZW0gaW4g Y2hpbGQgbm9kZXMKLSAgICAgICAgc2NoZW1hID0gZGF0YVsnc2NoZW1hJ10KLSAgICAgICAgdGFi bGUgPSBkYXRhWyduYW1lJ10KLQotICAgICAgICBkYXRhID0gc2VsZi5fZm9ybWF0dGVyKGRpZCwg c2NpZCwgdGlkLCBkYXRhKQotCi0gICAgICAgICMgTm93IHdlIGhhdmUgYWxsIGxpcyBvZiBjb2x1 bW5zIHdoaWNoIHdlIG5lZWQKLSAgICAgICAgIyB0byBpbmNsdWRlIGluIG91ciBjcmVhdGUgZGVm aW5pdGlvbiwgTGV0J3MgZm9ybWF0IHRoZW0KLSAgICAgICAgaWYgJ2NvbHVtbnMnIGluIGRhdGE6 Ci0gICAgICAgICAgICBmb3IgYyBpbiBkYXRhWydjb2x1bW5zJ106Ci0gICAgICAgICAgICAgICAg aWYgJ2F0dGFjbCcgaW4gYzoKLSAgICAgICAgICAgICAgICAgICAgY1snYXR0YWNsJ10gPSBwYXJz ZV9wcml2X3RvX2RiKGNbJ2F0dGFjbCddLCBzZWxmLmNvbHVtbl9hY2wpCi0KLSAgICAgICAgICAg ICAgICAjIGNoZWNrIHR5cGUgZm9yICdbXScgaW4gaXQKLSAgICAgICAgICAgICAgICBpZiAnY2x0 eXBlJyBpbiBjOgotICAgICAgICAgICAgICAgICAgICBjWydjbHR5cGUnXSwgY1snaGFzU3FyQnJh Y2tldCddID0gc2VsZi5fY2x0eXBlX2Zvcm1hdHRlcihjWydjbHR5cGUnXSkKLQotICAgICAgICBz cWxfaGVhZGVyID0gdSItLSBUYWJsZTogezB9XG5cbi0tICIuZm9ybWF0KHNlbGYucXRJZGVudChz ZWxmLmNvbm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGF0YVsnc2NoZW1hJ10sCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsnbmFtZSddKSkK LQotICAgICAgICBzcWxfaGVhZGVyICs9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50 ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ2RlbGV0ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCi0KLSAgICAgICAgc3FsX2hlYWRlciA9IHNx bF9oZWFkZXIuc3RyaXAoJ1xuJykKLSAgICAgICAgc3FsX2hlYWRlciArPSAnXG4nCi0KLSAgICAg ICAgIyBBZGQgaW50byBtYWluIHNxbAotICAgICAgICBtYWluX3NxbC5hcHBlbmQoc3FsX2hlYWRl cikKLQotICAgICAgICAjIFBhcnNlIHByaXZpbGVnZSBkYXRhCi0gICAgICAgIGlmICdyZWxhY2wn IGluIGRhdGE6Ci0gICAgICAgICAgICBkYXRhWydyZWxhY2wnXSA9IHBhcnNlX3ByaXZfdG9fZGIo ZGF0YVsncmVsYWNsJ10sIHNlbGYuYWNsKQotCi0gICAgICAgICMgSWYgdGhlIHJlcXVlc3QgZm9y IG5ldyBvYmplY3Qgd2hpY2ggZG8gbm90IGhhdmUgZGlkCi0gICAgICAgIHRhYmxlX3NxbCA9IHJl bmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGUuc3FsJ10pLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBjb25uPXNlbGYuY29ubiwg aXNfc3FsPVRydWUpCi0KLSAgICAgICAgIyBBZGQgaW50byBtYWluIHNxbAotICAgICAgICB0YWJs ZV9zcWwgPSByZS5zdWIoJ1xuezIsfScsICdcblxuJywgdGFibGVfc3FsKQotICAgICAgICBtYWlu X3NxbC5hcHBlbmQodGFibGVfc3FsLnN0cmlwKCdcbicpKQotCi0gICAgICAgICIiIgotICAgICAg ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICAjIDIpIFJl dmVyc2UgZW5naW5lZXJlZCBzcWwgZm9yIElOREVYCi0gICAgICAgICMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICIiIgotCi0gICAgICAgIFNRTCA9IHJlbmRl cl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5pbmRleF90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub2Rlcy5zcWwnXSksIHRpZD10aWQpCi0g ICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQotICAg ICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9l cnJvcihlcnJvcm1zZz1yc2V0KQorICAgICAgICByZXR1cm4gQmFzZVRhYmxlVmlldy5nZXRfcmV2 ZXJzZV9lbmdpbmVlcmVkX3NxbCgKKyAgICAgICAgICAgIHNlbGYsIGRpZCwgc2NpZCwgdGlkLCBt YWluX3NxbCwgZGF0YSkKIAotICAgICAgICBmb3Igcm93IGluIHJzZXRbJ3Jvd3MnXToKLQotICAg ICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmluZGV4X3RlbXBs YXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdw cm9wZXJ0aWVzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWQ9 ZGlkLCB0aWQ9dGlkLCBpZHg9cm93WydvaWQnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKLQotICAgICAgICAgICAg c3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKLSAgICAgICAgICAgIGlm IG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1yZXMpCi0KLSAgICAgICAgICAgIGRhdGEgPSBkaWN0KHJlc1sncm93cyddWzBd KQotICAgICAgICAgICAgIyBBZGRpbmcgcGFyZW50IGludG8gZGF0YSBkaWN0LCB3aWxsIGJlIHVz aW5nIGl0IHdoaWxlIGNyZWF0aW5nIHNxbAotICAgICAgICAgICAgZGF0YVsnc2NoZW1hJ10gPSBz Y2hlbWEKLSAgICAgICAgICAgIGRhdGFbJ3RhYmxlJ10gPSB0YWJsZQotICAgICAgICAgICAgIyBX ZSBhbHNvIG5lZWQgdG8gZmVjdGggY29sdW1ucyBvZiBpbmRleAotICAgICAgICAgICAgU1FMID0g cmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmluZGV4X3RlbXBsYXRlX3BhdGgsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2x1bW5fZGV0YWlscy5z cWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4PXJvd1snb2lkJ10p Ci0gICAgICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNR TCkKLSAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlu dGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQotCi0gICAgICAgICAgICAjICdhdHRk ZWYnIGNvbWVzIHdpdGggcXVvdGVzIGZyb20gcXVlcnkgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVt Ci0gICAgICAgICAgICAjICdvcHRpb25zJyB3ZSBuZWVkIHRydWUvZmFsc2UgdG8gcmVuZGVyIHN3 aXRjaCBBU0MoZmFsc2UpL0RFU0ModHJ1ZSkKLSAgICAgICAgICAgIGNvbHVtbnMgPSBbXQotICAg ICAgICAgICAgY29scyA9IFtdCi0gICAgICAgICAgICBmb3IgY29sX3JvdyBpbiByc2V0Wydyb3dz J106Ci0gICAgICAgICAgICAgICAgIyBXZSBuZWVkIGFsbCBkYXRhIGFzIGNvbGxlY3Rpb24gZm9y IENvbHVtbnNNb2RlbAotICAgICAgICAgICAgICAgIGNvbHNfZGF0YSA9IHsKLSAgICAgICAgICAg ICAgICAgICAgJ2NvbG5hbWUnOiBjb2xfcm93WydhdHRkZWYnXS5zdHJpcCgnIicpLAotICAgICAg ICAgICAgICAgICAgICAnY29sbHNwY25hbWUnOiBjb2xfcm93Wydjb2xsbnNwbmFtZSddLAotICAg ICAgICAgICAgICAgICAgICAnb3BfY2xhc3MnOiBjb2xfcm93WydvcGNuYW1lJ10sCi0gICAgICAg ICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIGNvbF9yb3dbJ29wdGlvbnMnXVswXSA9PSAn REVTQyc6Ci0gICAgICAgICAgICAgICAgICAgIGNvbHNfZGF0YVsnc29ydF9vcmRlciddID0gVHJ1 ZQotICAgICAgICAgICAgICAgIGNvbHVtbnMuYXBwZW5kKGNvbHNfZGF0YSkKLQotICAgICAgICAg ICAgICAgICMgV2UgbmVlZCBzYW1lIGRhdGEgYXMgc3RyaW5nIHRvIGRpc3BsYXkgaW4gcHJvcGVy dGllcyB3aW5kb3cKLSAgICAgICAgICAgICAgICAjIElmIG11bHRpcGxlIGNvbHVtbiB0aGVuIHNl cGFyYXRlIGl0IGJ5IGNvbG9uCi0gICAgICAgICAgICAgICAgY29sc19zdHIgPSBjb2xfcm93Wydh dHRkZWYnXQotICAgICAgICAgICAgICAgIGlmIGNvbF9yb3dbJ2NvbGxuc3BuYW1lJ106Ci0gICAg ICAgICAgICAgICAgICAgIGNvbHNfc3RyICs9ICcgQ09MTEFURSAnICsgY29sX3Jvd1snY29sbG5z cG5hbWUnXQotICAgICAgICAgICAgICAgIGlmIGNvbF9yb3dbJ29wY25hbWUnXToKLSAgICAgICAg ICAgICAgICAgICAgY29sc19zdHIgKz0gJyAnICsgY29sX3Jvd1snb3BjbmFtZSddCi0gICAgICAg ICAgICAgICAgaWYgY29sX3Jvd1snb3B0aW9ucyddWzBdID09ICdERVNDJzoKLSAgICAgICAgICAg ICAgICAgICAgY29sc19zdHIgKz0gJyBERVNDJwotICAgICAgICAgICAgICAgIGNvbHMuYXBwZW5k KGNvbHNfc3RyKQotCi0gICAgICAgICAgICAjIFB1c2ggYXMgY29sbGVjdGlvbgotICAgICAgICAg ICAgZGF0YVsnY29sdW1ucyddID0gY29sdW1ucwotICAgICAgICAgICAgIyBQdXNoIGFzIHN0cmlu ZwotICAgICAgICAgICAgZGF0YVsnY29scyddID0gJywgJy5qb2luKGNvbHMpCi0KLSAgICAgICAg ICAgIHNxbF9oZWFkZXIgPSB1IlxuLS0gSW5kZXg6IHswfVxuXG4tLSAiLmZvcm1hdChkYXRhWydu YW1lJ10pCi0KLSAgICAgICAgICAgIHNxbF9oZWFkZXIgKz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKFtzZWxmLmluZGV4X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlbGV0ZS5zcWwnXSksCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25uKQot Ci0gICAgICAgICAgICBpbmRleF9zcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYu aW5kZXhfdGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ2NyZWF0ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBjb25uPXNlbGYuY29ubikKLSAgICAgICAgICAgIGlu ZGV4X3NxbCArPSAiXG4iCi0gICAgICAgICAgICBpbmRleF9zcWwgKz0gcmVuZGVyX3RlbXBsYXRl KCIvIi5qb2luKFtzZWxmLmluZGV4X3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnYWx0ZXIuc3FsJ10pLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25u KQotCi0gICAgICAgICAgICAjIEFkZCBpbnRvIG1haW4gc3FsCi0gICAgICAgICAgICBpbmRleF9z cWwgPSByZS5zdWIoJ1xuezIsfScsICdcblxuJywgaW5kZXhfc3FsKQotICAgICAgICAgICAgbWFp bl9zcWwuYXBwZW5kKHNxbF9oZWFkZXIgKyAnXG5cbicgKyBpbmRleF9zcWwuc3RyaXAoJ1xuJykp Ci0KLSAgICAgICAgIiIiCi0gICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKLSAgICAgICAgIyAzKSBSZXZlcnNlIGVuZ2luZWVyZWQgc3FsIGZvciBUUklHR0VS UwotICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAg ICAgICIiIgotICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudHJp Z2dlcl90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdub2Rlcy5zcWwnXSksIHRpZD10aWQpCi0gICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYu Y29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQotICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAg ICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQotCi0gICAg ICAgIGZvciByb3cgaW4gcnNldFsncm93cyddOgotICAgICAgICAgICAgdHJpZ2dlcl9zcWwgPSAn JwotCi0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudHJp Z2dlcl90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGlkPXRpZCwgdHJpZD1yb3dbJ29pZCddLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkKQotCi0gICAgICAgICAg ICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQotICAgICAgICAgICAg aWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXJlcykKLQotICAgICAgICAgICAgZGF0YSA9IGRpY3QocmVzWydyb3dzJ11b MF0pCi0gICAgICAgICAgICAjIEFkZGluZyBwYXJlbnQgaW50byBkYXRhIGRpY3QsIHdpbGwgYmUg dXNpbmcgaXQgd2hpbGUgY3JlYXRpbmcgc3FsCi0gICAgICAgICAgICBkYXRhWydzY2hlbWEnXSA9 IHNjaGVtYQotICAgICAgICAgICAgZGF0YVsndGFibGUnXSA9IHRhYmxlCi0KLSAgICAgICAgICAg IGRhdGEgPSBzZWxmLmdldF90cmlnZ2VyX2Z1bmN0aW9uX3NjaGVtYShkYXRhKQotCi0gICAgICAg ICAgICBpZiBsZW4oZGF0YVsnY3VzdG9tX3RnYXJncyddKSA+IDE6Ci0gICAgICAgICAgICAgICAg IyBXZSBrbm93IHRoYXQgdHJpZ2dlciBoYXMgbW9yZSB0aGFuIDEgYXJndW1lbnQsIGxldCdzIGpv aW4gdGhlbQotICAgICAgICAgICAgICAgIGRhdGFbJ3RnYXJncyddID0gc2VsZi5fZm9ybWF0X2Fy Z3MoZGF0YVsnY3VzdG9tX3RnYXJncyddKQotCi0gICAgICAgICAgICBpZiBsZW4oZGF0YVsndGdh dHRyJ10pID4gMToKLSAgICAgICAgICAgICAgICBjb2x1bW5zID0gJywgJy5qb2luKGRhdGFbJ3Rn YXR0ciddLnNwbGl0KCcgJykpCi0KLSAgICAgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxh dGUoIi8iLmpvaW4oW3NlbGYudHJpZ2dlcl90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9jb2x1bW5zLnNxbCddKSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCwgY2xpc3Q9Y29sdW1u cykKLQotICAgICAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJk YXJyYXkoU1FMKQotICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cnNldCkKLSAgICAg ICAgICAgICAgICAjICd0Z2F0dHInIGNvbnRhaW5zIGxpc3Qgb2YgY29sdW1ucyBmcm9tIHRhYmxl IHVzZWQgaW4gdHJpZ2dlcgotICAgICAgICAgICAgICAgIGNvbHVtbnMgPSBbXQotCi0gICAgICAg ICAgICAgICAgZm9yIGNvbF9yb3cgaW4gcnNldFsncm93cyddOgotICAgICAgICAgICAgICAgICAg ICBjb2x1bW5zLmFwcGVuZCh7J2NvbHVtbic6IGNvbF9yb3dbJ25hbWUnXX0pCi0KLSAgICAgICAg ICAgICAgICBkYXRhWydjb2x1bW5zJ10gPSBjb2x1bW5zCi0KLSAgICAgICAgICAgIGRhdGEgPSB0 cmlnZ2VyX2RlZmluaXRpb24oZGF0YSkKLQotICAgICAgICAgICAgc3FsX2hlYWRlciA9IHUiXG4t LSBUcmlnZ2VyOiB7MH1cblxuLS0gIi5mb3JtYXQoZGF0YVsnbmFtZSddKQotCi0gICAgICAgICAg ICBzcWxfaGVhZGVyICs9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50cmlnZ2VyX3Rl bXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ2RlbGV0ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25uKQotCi0gICAgICAgICAgICAjIElm IHRoZSByZXF1ZXN0IGZvciBuZXcgb2JqZWN0IHdoaWNoIGRvIG5vdCBoYXZlIGRpZAotICAgICAg ICAgICAgdHJpZ2dlcl9zcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudHJpZ2dl cl90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdjcmVhdGUuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBjb25uPXNlbGYuY29ubikKLQotICAgICAgICAgICAg dHJpZ2dlcl9zcWwgPSBzcWxfaGVhZGVyICsgJ1xuXG4nICsgdHJpZ2dlcl9zcWwuc3RyaXAoJ1xu JykKLQotICAgICAgICAgICAgIyBJZiB0cmlnZ2VyIGlzIGRpc2FibGVkIHRoZW4gYWRkIHNxbCBj b2RlIGZvciB0aGUgc2FtZQotICAgICAgICAgICAgaWYgbm90IGRhdGFbJ2lzX2VuYWJsZV90cmln Z2VyJ106Ci0gICAgICAgICAgICAgICAgdHJpZ2dlcl9zcWwgKz0gJ1xuXG4nCi0gICAgICAgICAg ICAgICAgdHJpZ2dlcl9zcWwgKz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFsKLSAgICAgICAg ICAgICAgICAgICAgc2VsZi50cmlnZ2VyX3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAg ICAgICdlbmFibGVfZGlzYWJsZV90cmlnZ2VyLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAg ZGF0YT1kYXRhLCBjb25uPXNlbGYuY29ubikKLQotICAgICAgICAgICAgIyBBZGQgaW50byBtYWlu IHNxbAotICAgICAgICAgICAgdHJpZ2dlcl9zcWwgPSByZS5zdWIoJ1xuezIsfScsICdcblxuJywg dHJpZ2dlcl9zcWwpCi0gICAgICAgICAgICBtYWluX3NxbC5hcHBlbmQodHJpZ2dlcl9zcWwpCi0K LSAgICAgICAgIiIiCi0gICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKLSAgICAgICAgIyA0KSBSZXZlcnNlIGVuZ2luZWVyZWQgc3FsIGZvciBSVUxFUwotICAgICAg ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICIiIgotCi0g ICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKLSAgICAgICAgICAgIFtzZWxm LnJ1bGVzX3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwgdGlkPXRpZCkKLQotICAg ICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKLSAgICAg ICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJy b3IoZXJyb3Jtc2c9cnNldCkKLQotICAgICAgICBmb3Igcm93IGluIHJzZXRbJ3Jvd3MnXToKLSAg ICAgICAgICAgIHJ1bGVzX3NxbCA9ICdcbicKLSAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1w bGF0ZSgiLyIuam9pbigKLSAgICAgICAgICAgICAgICBbc2VsZi5ydWxlc190ZW1wbGF0ZV9wYXRo LCAncHJvcGVydGllcy5zcWwnXQotICAgICAgICAgICAgKSwgcmlkPXJvd1snb2lkJ10sIGRhdGxh c3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkKQotCi0gICAgICAgICAgICBzdGF0dXMsIHJlcyA9 IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQotICAgICAgICAgICAgaWYgbm90IHN0YXR1czoK LSAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJl cykKLQotICAgICAgICAgICAgcmVzX2RhdGEgPSBwYXJzZV9ydWxlX2RlZmluaXRpb24ocmVzKQot ICAgICAgICAgICAgcnVsZXNfc3FsICs9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKLSAgICAg ICAgICAgICAgICBbc2VsZi5ydWxlc190ZW1wbGF0ZV9wYXRoLCAnY3JlYXRlLnNxbCddKSwKLSAg ICAgICAgICAgICAgICBkYXRhPXJlc19kYXRhLCBkaXNwbGF5X2NvbW1lbnRzPVRydWUpCi0KLSAg ICAgICAgICAgICMgQWRkIGludG8gbWFpbiBzcWwKLSAgICAgICAgICAgIHJ1bGVzX3NxbCA9IHJl LnN1YignXG57Mix9JywgJ1xuXG4nLCBydWxlc19zcWwpCi0gICAgICAgICAgICBtYWluX3NxbC5h cHBlbmQocnVsZXNfc3FsKQotCi0gICAgICAgIHNxbCA9ICdcbicuam9pbihtYWluX3NxbCkKLQot ICAgICAgICByZXR1cm4gYWpheF9yZXNwb25zZShyZXNwb25zZT1zcWwuc3RyaXAoJ1xuJykpCi0K LSAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29u ZGl0aW9uCiAgICAgZGVmIHNlbGVjdF9zcWwoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlk KToKICAgICAgICAgIiIiCiAgICAgICAgIFNFTEVDVCBzY3JpcHQgc3FsIGZvciB0aGUgb2JqZWN0 CkBAIC0yODEwLDEwICsxMjYzLDExIEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcs IERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIFJldHVybnM6CiAgICAg ICAgICAgICBTRUxFQ1QgU2NyaXB0IHNxbCBmb3IgdGhlIG9iamVjdAogICAgICAgICAiIiIKLSAg ICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgs Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3Fs J10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0 aWQ9dGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxm LmRhdGxhc3RzeXNvaWQpCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAg ICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCdd KSwKKyAgICAgICAgICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKKyAgICAgICAgICAg IGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkCisgICAgICAgICkKICAgICAgICAgc3Rh dHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKICAgICAgICAgaWYgbm90IHN0 YXR1czoKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9 cmVzKQpAQCAtMjgzOSw3ICsxMjkzLDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmll dywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgKQogICAgICAgICBy ZXR1cm4gYWpheF9yZXNwb25zZShyZXNwb25zZT1zcWwpCiAKLSAgICBAY2hlY2tfcHJlY29uZGl0 aW9uCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIGluc2Vy dF9zcWwoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkKToKICAgICAgICAgIiIiCiAgICAg ICAgIElOU0VSVCBzY3JpcHQgc3FsIGZvciB0aGUgb2JqZWN0CkBAIC0yODU0LDEwICsxMzA4LDEx IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1 dW1TZXR0aW5ncyk6CiAgICAgICAgIFJldHVybnM6CiAgICAgICAgICAgICBJTlNFUlQgU2NyaXB0 IHNxbCBmb3IgdGhlIG9iamVjdAogICAgICAgICAiIiIKLSAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0aWQ9dGlkLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCisgICAg ICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRh YmxlX3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgIGRpZD1k aWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKKyAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5k YXRsYXN0c3lzb2lkCisgICAgICAgICkKICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4u ZXhlY3V0ZV9kaWN0KFNRTCkKICAgICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgIHJl dHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQpAQCAtMjg4Niw3ICsxMzQx LDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZh Y3V1bVNldHRpbmdzKToKIAogICAgICAgICByZXR1cm4gYWpheF9yZXNwb25zZShyZXNwb25zZT1z cWwpCiAKLSAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tf cHJlY29uZGl0aW9uCiAgICAgZGVmIHVwZGF0ZV9zcWwoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2Np ZCwgdGlkKToKICAgICAgICAgIiIiCiAgICAgICAgIFVQREFURSBzY3JpcHQgc3FsIGZvciB0aGUg b2JqZWN0CkBAIC0yOTAxLDEwICsxMzU2LDExIEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9k ZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIFJldHVybnM6 CiAgICAgICAgICAgICBVUERBVEUgU2NyaXB0IHNxbCBmb3IgdGhlIG9iamVjdAogICAgICAgICAi IiIKLSAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRl X3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRp ZXMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRpZCwgc2NpZD1z Y2lkLCB0aWQ9dGlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0bGFzdHN5c29p ZD1zZWxmLmRhdGxhc3RzeXNvaWQpCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAg ICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVz LnNxbCddKSwKKyAgICAgICAgICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKKyAgICAg ICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkCisgICAgICAgICkKICAgICAg ICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKICAgICAgICAgaWYg bm90IHN0YXR1czoKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJy b3Jtc2c9cmVzKQpAQCAtMjkzNSw3ICsxMzkxLDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGRO b2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKIAogICAgICAgICByZXR1 cm4gYWpheF9yZXNwb25zZShyZXNwb25zZT1zcWwpCiAKLSAgICBAY2hlY2tfcHJlY29uZGl0aW9u CisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIGRlbGV0ZV9z cWwoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkKToKICAgICAgICAgIiIiCiAgICAgICAg IERFTEVURSBzY3JpcHQgc3FsIGZvciB0aGUgb2JqZWN0CkBAIC0yOTUwLDEwICsxNDA2LDExIEBA IGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1T ZXR0aW5ncyk6CiAgICAgICAgIFJldHVybnM6CiAgICAgICAgICAgICBERUxFVEUgU2NyaXB0IHNx bCBmb3IgdGhlIG9iamVjdAogICAgICAgICAiIiIKLSAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBs YXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0aWQ9dGlkLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCisgICAgICAg IFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxl X3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgIGRpZD1kaWQs IHNjaWQ9c2NpZCwgdGlkPXRpZCwKKyAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRs YXN0c3lzb2lkCisgICAgICAgICkKICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhl Y3V0ZV9kaWN0KFNRTCkKICAgICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgIHJldHVy biBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQpAQCAtMjk2Niw3ICsxNDIzLDcg QEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1 bVNldHRpbmdzKToKIAogICAgICAgICByZXR1cm4gYWpheF9yZXNwb25zZShyZXNwb25zZT1zcWwp CiAKLSAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJl Y29uZGl0aW9uCiAgICAgZGVmIHN0YXRpc3RpY3Moc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwg dGlkPU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAgU3RhdGlzdGljcwpAQCAtMjk4Miw2MyAr MTQzOSw2IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVy LCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiBzdGF0 aXN0aWNzIGZvciBhbGwgdGhlIHRhYmxlcyBpbiB0aGF0CiAgICAgICAgIHNjaGVtYS4KICAgICAg ICAgIiIiCi0KLSAgICAgICAgIyBGZXRjaCBzY2hlbWEgbmFtZQotICAgICAgICBzdGF0dXMsIHNj aGVtYV9uYW1lID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKAotICAgICAgICAgICAgcmVuZGVy X3RlbXBsYXRlKAotICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgs ICdnZXRfc2NoZW1hLnNxbCddKSwKLSAgICAgICAgICAgICAgICBjb25uPXNlbGYuY29ubiwgc2Np ZD1zY2lkCi0gICAgICAgICAgICApCi0gICAgICAgICkKLSAgICAgICAgaWYgbm90IHN0YXR1czoK LSAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c2NoZW1h X25hbWUpCi0KLSAgICAgICAgaWYgdGlkIGlzIE5vbmU6Ci0gICAgICAgICAgICBzdGF0dXMsIHJl cyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoCi0gICAgICAgICAgICAgICAgcmVuZGVyX3RlbXBs YXRlKAotICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAn Y29sbF90YWJsZV9zdGF0cy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgIGNvbm49c2VsZi5j b25uLCBzY2hlbWFfbmFtZT1zY2hlbWFfbmFtZQotICAgICAgICAgICAgICAgICkKLSAgICAgICAg ICAgICkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgICMgRm9yIEluZGl2aWR1YWwgdGFibGUg c3RhdHMKLQotICAgICAgICAgICAgIyBDaGVjayBpZiBwZ3N0YXR0dXBsZSBleHRlbnNpb24gaXMg YWxyZWFkeSBjcmVhdGVkPwotICAgICAgICAgICAgIyBpZiBjcmVhdGVkIHRoZW4gb25seSBhZGQg ZXh0ZW5kZWQgc3RhdHMKLSAgICAgICAgICAgIHN0YXR1cywgaXNfcGdzdGF0dHVwbGUgPSBzZWxm LmNvbm4uZXhlY3V0ZV9zY2FsYXIoIiIiCi0gICAgICAgICAgICBTRUxFQ1QgKGNvdW50KGV4dG5h bWUpID4gMCkgQVMgaXNfcGdzdGF0dHVwbGUKLSAgICAgICAgICAgIEZST00gcGdfZXh0ZW5zaW9u Ci0gICAgICAgICAgICBXSEVSRSBleHRuYW1lPSdwZ3N0YXR0dXBsZScKLSAgICAgICAgICAgICIi IikKLSAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGlu dGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1pc19wZ3N0YXR0dXBsZSkKLQotICAgICAgICAg ICAgIyBGZXRjaCBUYWJsZSBuYW1lCi0gICAgICAgICAgICBzdGF0dXMsIHRhYmxlX25hbWUgPSBz ZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoCi0gICAgICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRl KAotICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAnZ2V0 X3RhYmxlLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgY29ubj1zZWxmLmNvbm4sIHNjaWQ9 c2NpZCwgdGlkPXRpZAotICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgICkKLSAgICAgICAg ICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz10YWJsZV9uYW1lKQotCi0gICAgICAgICAgICBzdGF0dXMsIHJlcyA9 IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoCi0gICAgICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRl KAotICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAnc3Rh dHMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICBjb25uPXNlbGYuY29ubiwgc2NoZW1hX25h bWU9c2NoZW1hX25hbWUsCi0gICAgICAgICAgICAgICAgICAgIHRhYmxlX25hbWU9dGFibGVfbmFt ZSwKLSAgICAgICAgICAgICAgICAgICAgaXNfcGdzdGF0dHVwbGU9aXNfcGdzdGF0dHVwbGUsIHRp ZD10aWQKLSAgICAgICAgICAgICAgICApCi0gICAgICAgICAgICApCi0KLSAgICAgICAgaWYgbm90 IHN0YXR1czoKLSAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jt c2c9cmVzKQotCi0gICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCi0gICAgICAgICAg ICBkYXRhPXJlcywKLSAgICAgICAgICAgIHN0YXR1cz0yMDAKLSAgICAgICAgKQotCisgICAgICAg IHJldHVybiBCYXNlVGFibGVWaWV3LmdldF90YWJsZV9zdGF0aXN0aWNzKHNlbGYsIHNjaWQsIHRp ZCkKIAogVGFibGVWaWV3LnJlZ2lzdGVyX25vZGVfdmlldyhibHVlcHJpbnQpCmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2No ZW1hcy90YWJsZXMvY29sdW1uL3RlbXBsYXRlcy9jb2x1bW4vanMvY29sdW1uLmpzIGIvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFi bGVzL2NvbHVtbi90ZW1wbGF0ZXMvY29sdW1uL2pzL2NvbHVtbi5qcwppbmRleCAxNzliOTYxLi4x MDczN2UwIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29sdW1uL3RlbXBsYXRlcy9jb2x1bW4vanMv Y29sdW1uLmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb2x1bW4vdGVtcGxhdGVzL2NvbHVtbi9qcy9jb2x1 bW4uanMKQEAgLTg2LDYgKzg2LDcgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUuY29sdW1uJywgWwog CiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydjb2x1bW4nXSkgewogICAgIHBnQnJvd3Nlci5Ob2Rl c1snY29sdW1uJ10gPSBwZ0Jyb3dzZXIuTm9kZS5leHRlbmQoeworICAgICAgZ2V0VHJlZU5vZGVI aWVyYXJjaHk6IHBnQnJvd3Nlci50YWJsZUNoaWxkVHJlZU5vZGVIaWVyYXJjaHksCiAgICAgICBw YXJlbnRfdHlwZTogWyd0YWJsZScsICd2aWV3JywgJ212aWV3J10sCiAgICAgICBjb2xsZWN0aW9u X3R5cGU6IFsnY29sbC10YWJsZScsICdjb2xsLXZpZXcnLCAnY29sbC1tdmlldyddLAogICAgICAg dHlwZTogJ2NvbHVtbicsCkBAIC0xOTcsMTEgKzE5OCwxNyBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9k ZS5jb2x1bW4nLCBbCiAgICAgICAgICAgICApOwogICAgICAgICAgIH0sCiAgICAgICAgICAgZGlz YWJsZWQ6IGZ1bmN0aW9uKG0pewotICAgICAgICAgICAgLy8gSWYgcHJpbWFyeSBrZXkgYWxyZWFk eSBleGlzdCB0aGVuIGRpc2FibGUuCisgICAgICAgICAgICAvLyBEaXNhYmxlIGl0LCB3aGVuIG9u ZSBvZiB0aGlzOgorICAgICAgICAgICAgLy8gLSBQcmltYXJ5IGtleSBhbHJlYWR5IGV4aXN0Cisg ICAgICAgICAgICAvLyAtIFRhYmxlIGlzIGEgcGFydGl0aW9uZWQgdGFibGUKICAgICAgICAgICAg IGlmICgKLSAgICAgICAgICAgICAgbS50b3AgJiYgIV8uaXNVbmRlZmluZWQobS50b3AuZ2V0KCdv aWQnKSkgJiYKLSAgICAgICAgICAgICAgICBtLnRvcC5nZXQoJ3ByaW1hcnlfa2V5JykubGVuZ3Ro ID4gMCAmJgotICAgICAgICAgICAgICAgICFfLmlzVW5kZWZpbmVkKG0udG9wLmdldCgncHJpbWFy eV9rZXknKS5maXJzdCgpLmdldCgnb2lkJykpCisgICAgICAgICAgICAgIG0udG9wICYmICgoCisg ICAgICAgICAgICAgICAgIV8uaXNVbmRlZmluZWQobS50b3AuZ2V0KCdvaWQnKSkgJiYKKyAgICAg ICAgICAgICAgICAgIG0udG9wLmdldCgncHJpbWFyeV9rZXknKS5sZW5ndGggPiAwICYmCisgICAg ICAgICAgICAgICAgICAhXy5pc1VuZGVmaW5lZChtLnRvcC5nZXQoJ3ByaW1hcnlfa2V5JykuZmly c3QoKS5nZXQoJ29pZCcpKQorICAgICAgICAgICAgICApIHx8ICgKKyAgICAgICAgICAgICAgICBt LnRvcC5oYXMoJ2lzX3BhcnRpdGlvbmVkJykgJiYgbS50b3AuZ2V0KCdpc19wYXJ0aXRpb25lZCcp CisgICAgICAgICAgICAgICkpCiAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgcmV0dXJu IHRydWU7CiAgICAgICAgICAgICB9CkBAIC0yMjgsNiArMjM1LDE3IEBAIGRlZmluZSgncGdhZG1p bi5ub2RlLmNvbHVtbicsIFsKICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAg ICAgfQogCisgICAgICAgICAgICAvLyBJZiB0YWJsZSBpcyBwYXJ0aXRpb25lZCB0YWJsZSB0aGVu IGRpc2FibGUKKyAgICAgICAgICAgIGlmIChtLnRvcCAmJiAhXy5pc1VuZGVmaW5lZChtLnRvcC5n ZXQoJ2lzX3BhcnRpdGlvbmVkJykpICYmCisgICAgICAgICAgICAgIG0udG9wLmdldCgnaXNfcGFy dGl0aW9uZWQnKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5j dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgbS5zZXQoJ2lzX3ByaW1hcnlfa2V5JywgZmFsc2Up OworICAgICAgICAgICAgICB9LCAxMCk7CisKKyAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor ICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZighbS5pblNjaGVtYVdpdGhDb2x1bW5DaGVj ay5hcHBseSh0aGlzLCBbbV0pICYmCiAgICAgICAgICAgICAgICFfLmlzVW5kZWZpbmVkKG5hbWUp ICYmICFfLmlzTnVsbChuYW1lKSAmJiBuYW1lICE9PSAnJykgewogICAgICAgICAgICAgICByZXR1 cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9z ZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb2x1bW4vdGVzdHMvdGVzdF9jb2x1bW5f Z2V0LnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJh c2VzL3NjaGVtYXMvdGFibGVzL2NvbHVtbi90ZXN0cy90ZXN0X2NvbHVtbl9nZXQucHkKaW5kZXgg NzEzZDk5OS4uNGFkZmJlZiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbHVtbi90ZXN0cy90ZXN0 X2NvbHVtbl9nZXQucHkKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbHVtbi90ZXN0cy90ZXN0X2NvbHVtbl9n ZXQucHkKQEAgLTI0LDcgKzI0LDcgQEAgZnJvbSAuIGltcG9ydCB1dGlscyBhcyBjb2x1bW5zX3V0 aWxzCiBjbGFzcyBDb2x1bW5HZXRUZXN0Q2FzZShCYXNlVGVzdEdlbmVyYXRvcik6CiAgICAgIiIi VGhpcyBjbGFzcyB3aWxsIGdldCBjb2x1bW4gdW5kZXIgdGFibGUgbm9kZS4iIiIKICAgICBzY2Vu YXJpb3MgPSBbCi0gICAgICAgICgnRmV0Y2ggdGFibGUgTm9kZSBVUkwnLCBkaWN0KHVybD0nL2Jy b3dzZXIvY29sdW1uL29iai8nKSkKKyAgICAgICAgKCdGZXRjaCBjb2x1bW5zIHVuZGVyIHRhYmxl IG5vZGUnLCBkaWN0KHVybD0nL2Jyb3dzZXIvY29sdW1uL29iai8nKSkKICAgICBdCiAKICAgICBk ZWYgc2V0VXAoc2VsZik6CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvY2hlY2tf Y29uc3RyYWludC90ZW1wbGF0ZXMvY2hlY2tfY29uc3RyYWludC9qcy9jaGVja19jb25zdHJhaW50 LmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2Vz L3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2NoZWNrX2NvbnN0cmFpbnQvdGVtcGxhdGVzL2No ZWNrX2NvbnN0cmFpbnQvanMvY2hlY2tfY29uc3RyYWludC5qcwppbmRleCBiMTJkOWQzLi44NWY2 MmY3IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVy cy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvY2hlY2tfY29uc3RyYWludC90 ZW1wbGF0ZXMvY2hlY2tfY29uc3RyYWludC9qcy9jaGVja19jb25zdHJhaW50LmpzCisrKyBiL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L3RhYmxlcy9jb25zdHJhaW50cy9jaGVja19jb25zdHJhaW50L3RlbXBsYXRlcy9jaGVja19jb25z dHJhaW50L2pzL2NoZWNrX2NvbnN0cmFpbnQuanMKQEAgLTEwLDYgKzEwLDcgQEAgZGVmaW5lKCdw Z2FkbWluLm5vZGUuY2hlY2tfY29uc3RyYWludHMnLCBbCiAgIC8vIENoZWNrIENvbnN0cmFpbnQg Tm9kZQogICBpZiAoIXBnQnJvd3Nlci5Ob2Rlc1snY2hlY2tfY29uc3RyYWludHMnXSkgewogICAg IHBnQWRtaW4uQnJvd3Nlci5Ob2Rlc1snY2hlY2tfY29uc3RyYWludHMnXSA9IHBnQnJvd3Nlci5O b2RlLmV4dGVuZCh7CisgICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdCcm93c2VyLnRhYmxl Q2hpbGRUcmVlTm9kZUhpZXJhcmNoeSwKICAgICAgIHR5cGU6ICdjaGVja19jb25zdHJhaW50cycs CiAgICAgICBsYWJlbDogZ2V0dGV4dCgnQ2hlY2snKSwKICAgICAgIGNvbGxlY3Rpb25fdHlwZTog J2NvbGwtY29uc3RyYWludHMnLApAQCAtMTgsNyArMTksNyBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9k ZS5jaGVja19jb25zdHJhaW50cycsIFsKICAgICAgIGRpYWxvZ0hlbHA6IHVybF9mb3IoJ2hlbHAu c3RhdGljJywgeydmaWxlbmFtZSc6ICdjaGVja19kaWFsb2cuaHRtbCd9KSwKICAgICAgIGhhc1NR TDogdHJ1ZSwKICAgICAgIGhhc0RlcGVuZHM6IHRydWUsCi0gICAgICBwYXJlbnRfdHlwZTogWyd0 YWJsZSddLAorICAgICAgcGFyZW50X3R5cGU6IFsndGFibGUnLCdwYXJ0aXRpb24nXSwKICAgICAg IEluaXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAvLyBBdm9pZCBtdWxpdHBsZSByZWdpc3RyYXRp b24gb2YgbWVudXMKICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpCkBAIC0xMzcsNiArMTM4 LDE4IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmNoZWNrX2NvbnN0cmFpbnRzJywgWwogICAgICAg ICAgICdzd2l0Y2gnLCBjZWxsOiAnYm9vbGVhbicsIGdyb3VwOiBnZXR0ZXh0KCdEZWZpbml0aW9u JyksIG1vZGU6CiAgICAgICAgICAgWydwcm9wZXJ0aWVzJywgJ2NyZWF0ZScsICdlZGl0J10sIG1p bl92ZXJzaW9uOiA5MDIwMCwKICAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24obSkgeworICAg ICAgICAgICAgLy8gRGlzYWJsZWQgaWYgdGFibGUgaXMgYSBwYXJ0aXRpb25lZCB0YWJsZS4KKyAg ICAgICAgICAgIGlmICgoXy5oYXMobSAsICd0b3AnKSAmJiAhXy5pc1VuZGVmaW5lZChtLnRvcCkg JiYgbS50b3AuZ2V0KCdpc19wYXJ0aXRpb25lZCcpKSB8fAorICAgICAgICAgICAgICAgIChfLmhh cyhtLCAnbm9kZV9pbmZvJykgJiYgXy5oYXMobS5ub2RlX2luZm8sICd0YWJsZScpICYmCisgICAg ICAgICAgICAgICAgXy5oYXMobS5ub2RlX2luZm8udGFibGUsICdpc19wYXJ0aXRpb25lZCcpICYm IG0ubm9kZV9pbmZvLnRhYmxlLmlzX3BhcnRpdGlvbmVkKQorICAgICAgICAgICAgKXsKKyAgICAg ICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgbS5zZXQo J2Nvbm5vaW5oZXJpdCcsIGZhbHNlKTsKKyAgICAgICAgICAgICAgfSwxMCk7CisKKyAgICAgICAg ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHJldHVybiAo KF8uaGFzKG0sICdoYW5kbGVyJykgJiYKICAgICAgICAgICAgICAgIV8uaXNVbmRlZmluZWQobS5o YW5kbGVyKSAmJgogICAgICAgICAgICAgICAhXy5pc1VuZGVmaW5lZChtLmdldCgnb2lkJykpKSB8 fCAoXy5pc0Z1bmN0aW9uKG0uaXNOZXcpICYmICFtLmlzTmV3KCkpKTsKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L3RhYmxlcy9jb25zdHJhaW50cy9leGNsdXNpb25fY29uc3RyYWludC90ZW1wbGF0ZXMvZXhjbHVz aW9uX2NvbnN0cmFpbnQvanMvZXhjbHVzaW9uX2NvbnN0cmFpbnQuanMgYi93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29u c3RyYWludHMvZXhjbHVzaW9uX2NvbnN0cmFpbnQvdGVtcGxhdGVzL2V4Y2x1c2lvbl9jb25zdHJh aW50L2pzL2V4Y2x1c2lvbl9jb25zdHJhaW50LmpzCmluZGV4IDgxNGVkY2UuLjYwNTQ5NWQgMTAw NjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9leGNsdXNpb25fY29uc3RyYWludC90ZW1w bGF0ZXMvZXhjbHVzaW9uX2NvbnN0cmFpbnQvanMvZXhjbHVzaW9uX2NvbnN0cmFpbnQuanMKKysr IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2V4Y2x1c2lvbl9jb25zdHJhaW50L3RlbXBsYXRlcy9l eGNsdXNpb25fY29uc3RyYWludC9qcy9leGNsdXNpb25fY29uc3RyYWludC5qcwpAQCAtNjAyLDYg KzYwMiw3IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmV4Y2x1c2lvbl9jb25zdHJhaW50JywgWwog ICAvLyBFeHRlbmQgdGhlIGJyb3dzZXIncyBub2RlIGNsYXNzIGZvciBleGNsdXNpb24gY29uc3Ry YWludCBub2RlCiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydleGNsdXNpb25fY29uc3RyYWludCdd KSB7CiAgICAgcGdBZG1pbi5Ccm93c2VyLk5vZGVzWydleGNsdXNpb25fY29uc3RyYWludCddID0g cGdCcm93c2VyLk5vZGUuZXh0ZW5kKHsKKyAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jy b3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgdHlwZTogJ2V4Y2x1c2lv bl9jb25zdHJhaW50JywKICAgICAgIGxhYmVsOiBnZXR0ZXh0KCdFeGNsdXNpb24gY29uc3RyYWlu dCcpLAogICAgICAgY29sbGVjdGlvbl90eXBlOiAnY29sbC1jb25zdHJhaW50cycsCkBAIC02MDks NyArNjEwLDcgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUuZXhjbHVzaW9uX2NvbnN0cmFpbnQnLCBb CiAgICAgICBzcWxDcmVhdGVIZWxwOiAnZGRsLWNvbnN0cmFpbnRzLmh0bWwnLAogICAgICAgZGlh bG9nSGVscDogdXJsX2ZvcignaGVscC5zdGF0aWMnLCB7J2ZpbGVuYW1lJzogJ2V4Y2x1c2lvbl9j b25zdHJhaW50X2RpYWxvZy5odG1sJ30pLAogICAgICAgaGFzU1FMOiB0cnVlLAotICAgICAgcGFy ZW50X3R5cGU6ICd0YWJsZScsCisgICAgICBwYXJlbnRfdHlwZTogWyd0YWJsZScsJ3BhcnRpdGlv biddLAogICAgICAgY2FuRHJvcDogdHJ1ZSwKICAgICAgIGNhbkRyb3BDYXNjYWRlOiB0cnVlLAog ICAgICAgaGFzRGVwZW5kczogdHJ1ZSwKQEAgLTkxNiwxMiArOTE3LDIyIEBAIGRlZmluZSgncGdh ZG1pbi5ub2RlLmV4Y2x1c2lvbl9jb25zdHJhaW50JywgWwogICAgICAgICAgIGlmIChkYXRhICYm IGRhdGEuY2hlY2sgPT0gZmFsc2UpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAg ICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsIGkgPSBpdGVtLCBkID0gaXRlbURhdGEsIHBhcmVu dHMgPSBbXTsKKyAgICAgICAgICB2YXIgdCA9IHBnQnJvd3Nlci50cmVlLCBpID0gaXRlbSwgZCA9 IGl0ZW1EYXRhLCBwYXJlbnRzID0gW10sCisgICAgICAgICAgICBpbW1lZGlhdGVfcGFyZW50X3Rh YmxlX2ZvdW5kID0gZmFsc2UsCisgICAgICAgICAgICBpc19pbW1lZGlhdGVfcGFyZW50X3RhYmxl X3BhcnRpdGlvbmVkID0gZmFsc2U7CiAgICAgICAgICAgLy8gVG8gaXRlcmF0ZSBvdmVyIHRyZWUg dG8gY2hlY2sgcGFyZW50IG5vZGUKICAgICAgICAgICB3aGlsZSAoaSkgeworICAgICAgICAgICAg Ly8gSWYgdGFibGUgaXMgcGFydGl0aW9uZWQgdGFibGUgdGhlbiByZXR1cm4gZmFsc2UKKyAgICAg ICAgICAgIGlmICghaW1tZWRpYXRlX3BhcmVudF90YWJsZV9mb3VuZCAmJiAoZC5fdHlwZSA9PSAn dGFibGUnIHx8IGQuX3R5cGUgPT0gJ3BhcnRpdGlvbicpKSB7CisgICAgICAgICAgICAgIGltbWVk aWF0ZV9wYXJlbnRfdGFibGVfZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICBpZiAoJ2lzX3Bh cnRpdGlvbmVkJyBpbiBkICYmIGQuaXNfcGFydGl0aW9uZWQpIHsKKyAgICAgICAgICAgICAgICBp c19pbW1lZGlhdGVfcGFyZW50X3RhYmxlX3BhcnRpdGlvbmVkID0gdHJ1ZTsKKyAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBJZiBpdCBpcyBzY2hlbWEgdGhl biBhbGxvdyB1c2VyIHRvIGNyZWF0ZSB0YWJsZQogICAgICAgICAgICAgaWYgKF8uaW5kZXhPZihb J3NjaGVtYSddLCBkLl90eXBlKSA+IC0xKQotICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg ICAgICAgICAgICAgcmV0dXJuICFpc19pbW1lZGlhdGVfcGFyZW50X3RhYmxlX3BhcnRpdGlvbmVk OwogICAgICAgICAgICAgcGFyZW50cy5wdXNoKGQuX3R5cGUpOwogICAgICAgICAgICAgaSA9IHQu aGFzUGFyZW50KGkpID8gdC5wYXJlbnQoaSkgOiBudWxsOwogICAgICAgICAgICAgZCA9IGkgPyB0 Lml0ZW1EYXRhKGkpIDogbnVsbDsKQEAgLTkzMCw3ICs5NDEsNyBAQCBkZWZpbmUoJ3BnYWRtaW4u bm9kZS5leGNsdXNpb25fY29uc3RyYWludCcsIFsKICAgICAgICAgICBpZiAoXy5pbmRleE9mKHBh cmVudHMsICdjYXRhbG9nJykgPiAtMSkgewogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJl dHVybiAhaXNfaW1tZWRpYXRlX3BhcmVudF90YWJsZV9wYXJ0aXRpb25lZDsKICAgICAgICAgICB9 CiAgICAgICB9CiAgICAgfSk7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvZm9y ZWlnbl9rZXkvdGVtcGxhdGVzL2ZvcmVpZ25fa2V5L2pzL2ZvcmVpZ25fa2V5LmpzIGIvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFi bGVzL2NvbnN0cmFpbnRzL2ZvcmVpZ25fa2V5L3RlbXBsYXRlcy9mb3JlaWduX2tleS9qcy9mb3Jl aWduX2tleS5qcwppbmRleCA5NWFmYTNlLi5hNGJlYzA5IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1p bi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMv Y29uc3RyYWludHMvZm9yZWlnbl9rZXkvdGVtcGxhdGVzL2ZvcmVpZ25fa2V5L2pzL2ZvcmVpZ25f a2V5LmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9mb3JlaWduX2tleS90ZW1wbGF0ZXMv Zm9yZWlnbl9rZXkvanMvZm9yZWlnbl9rZXkuanMKQEAgLTYwMiw2ICs2MDIsNyBAQCBkZWZpbmUo J3BnYWRtaW4ubm9kZS5mb3JlaWduX2tleScsIFsKICAgLy8gRXh0ZW5kIHRoZSBicm93c2VyJ3Mg bm9kZSBjbGFzcyBmb3IgZm9yZWlnbiBrZXkgbm9kZQogICBpZiAoIXBnQnJvd3Nlci5Ob2Rlc1sn Zm9yZWlnbl9rZXknXSkgewogICAgIHBnQWRtaW4uQnJvd3Nlci5Ob2Rlc1snZm9yZWlnbl9rZXkn XSA9IHBnQnJvd3Nlci5Ob2RlLmV4dGVuZCh7CisgICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTog cGdCcm93c2VyLnRhYmxlQ2hpbGRUcmVlTm9kZUhpZXJhcmNoeSwKICAgICAgIHR5cGU6ICdmb3Jl aWduX2tleScsCiAgICAgICBsYWJlbDogZ2V0dGV4dCgnRm9yZWlnbiBrZXknKSwKICAgICAgIGNv bGxlY3Rpb25fdHlwZTogJ2NvbGwtY29uc3RyYWludHMnLApAQCAtNjEwLDcgKzYxMSw3IEBAIGRl ZmluZSgncGdhZG1pbi5ub2RlLmZvcmVpZ25fa2V5JywgWwogICAgICAgZGlhbG9nSGVscDogdXJs X2ZvcignaGVscC5zdGF0aWMnLCB7J2ZpbGVuYW1lJzogJ2ZvcmVpZ25fa2V5X2RpYWxvZy5odG1s J30pLAogICAgICAgaGFzU1FMOiB0cnVlLAogICAgICAgaGFzRGVwZW5kczogZmFsc2UsCi0gICAg ICBwYXJlbnRfdHlwZTogJ3RhYmxlJywKKyAgICAgIHBhcmVudF90eXBlOiBbJ3RhYmxlJywncGFy dGl0aW9uJ10sCiAgICAgICBjYW5Ecm9wOiB0cnVlLAogICAgICAgY2FuRHJvcENhc2NhZGU6IHRy dWUsCiAgICAgICBoYXNEZXBlbmRzOiB0cnVlLApAQCAtMTA2OCwxMiArMTA2OSwyMiBAQCBkZWZp bmUoJ3BnYWRtaW4ubm9kZS5mb3JlaWduX2tleScsIFsKICAgICAgICAgICBpZiAoZGF0YSAmJiBk YXRhLmNoZWNrID09IGZhbHNlKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICAgICAg ICB2YXIgdCA9IHBnQnJvd3Nlci50cmVlLCBpID0gaXRlbSwgZCA9IGl0ZW1EYXRhLCBwYXJlbnRz ID0gW107CisgICAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwgaSA9IGl0ZW0sIGQgPSBp dGVtRGF0YSwgcGFyZW50cyA9IFtdLAorICAgICAgICAgICAgaW1tZWRpYXRlX3BhcmVudF90YWJs ZV9mb3VuZCA9IGZhbHNlLAorICAgICAgICAgICAgaXNfaW1tZWRpYXRlX3BhcmVudF90YWJsZV9w YXJ0aXRpb25lZCA9IGZhbHNlOwogICAgICAgICAgIC8vIFRvIGl0ZXJhdGUgb3ZlciB0cmVlIHRv IGNoZWNrIHBhcmVudCBub2RlCiAgICAgICAgICAgd2hpbGUgKGkpIHsKKyAgICAgICAgICAgIC8v IElmIHRhYmxlIGlzIHBhcnRpdGlvbmVkIHRhYmxlIHRoZW4gcmV0dXJuIGZhbHNlCisgICAgICAg ICAgICBpZiAoIWltbWVkaWF0ZV9wYXJlbnRfdGFibGVfZm91bmQgJiYgKGQuX3R5cGUgPT0gJ3Rh YmxlJyB8fCBkLl90eXBlID09ICdwYXJ0aXRpb24nKSkgeworICAgICAgICAgICAgICBpbW1lZGlh dGVfcGFyZW50X3RhYmxlX2ZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgICAgaWYgKCdpc19wYXJ0 aXRpb25lZCcgaW4gZCAmJiBkLmlzX3BhcnRpdGlvbmVkKSB7CisgICAgICAgICAgICAgICAgaXNf aW1tZWRpYXRlX3BhcmVudF90YWJsZV9wYXJ0aXRpb25lZCA9IHRydWU7CisgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLy8gSWYgaXQgaXMgc2NoZW1hIHRoZW4g YWxsb3cgdXNlciB0byBjIHJlYXRlIHRhYmxlCiAgICAgICAgICAgICBpZiAoXy5pbmRleE9mKFsn c2NoZW1hJ10sIGQuX3R5cGUpID4gLTEpCi0gICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg ICAgICAgICAgICByZXR1cm4gIWlzX2ltbWVkaWF0ZV9wYXJlbnRfdGFibGVfcGFydGl0aW9uZWQ7 CiAgICAgICAgICAgICBwYXJlbnRzLnB1c2goZC5fdHlwZSk7CiAgICAgICAgICAgICBpID0gdC5o YXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGw7CiAgICAgICAgICAgICBkID0gaSA/IHQu aXRlbURhdGEoaSkgOiBudWxsOwpAQCAtMTA4Miw3ICsxMDkzLDcgQEAgZGVmaW5lKCdwZ2FkbWlu Lm5vZGUuZm9yZWlnbl9rZXknLCBbCiAgICAgICAgICAgaWYgKF8uaW5kZXhPZihwYXJlbnRzLCAn Y2F0YWxvZycpID4gLTEpIHsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICB9 IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gIWlz X2ltbWVkaWF0ZV9wYXJlbnRfdGFibGVfcGFydGl0aW9uZWQ7CiAgICAgICAgICAgfQogICAgICAg fQogICAgIH0pOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2luZGV4X2NvbnN0 cmFpbnQvdGVtcGxhdGVzL2luZGV4X2NvbnN0cmFpbnQvanMvaW5kZXhfY29uc3RyYWludC5qcyBi L3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hl bWFzL3RhYmxlcy9jb25zdHJhaW50cy9pbmRleF9jb25zdHJhaW50L3RlbXBsYXRlcy9pbmRleF9j b25zdHJhaW50L2pzL2luZGV4X2NvbnN0cmFpbnQuanMKaW5kZXggOTdhNDA0YS4uOTQ3OWFjZCAx MDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2luZGV4X2NvbnN0cmFpbnQvdGVtcGxh dGVzL2luZGV4X2NvbnN0cmFpbnQvanMvaW5kZXhfY29uc3RyYWludC5qcworKysgYi93ZWIvcGdh ZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJs ZXMvY29uc3RyYWludHMvaW5kZXhfY29uc3RyYWludC90ZW1wbGF0ZXMvaW5kZXhfY29uc3RyYWlu dC9qcy9pbmRleF9jb25zdHJhaW50LmpzCkBAIC02LDYgKzYsNyBAQCBkZWZpbmUoJ3BnYWRtaW4u bm9kZS57e25vZGVfdHlwZX19JywgWwogICAvLyBFeHRlbmQgdGhlIGJyb3dzZXIncyBub2RlIGNs YXNzIGZvciBpbmRleCBjb25zdHJhaW50IG5vZGUKICAgaWYgKCFwZ0Jyb3dzZXIuTm9kZXNbJ3t7 bm9kZV90eXBlfX0nXSkgewogICAgIHBnQWRtaW4uQnJvd3Nlci5Ob2Rlc1sne3tub2RlX3R5cGV9 fSddID0gcGdCcm93c2VyLk5vZGUuZXh0ZW5kKHsKKyAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5 OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgdHlwZTogJ3t7 bm9kZV90eXBlfX0nLAogICAgICAgbGFiZWw6ICd7eyBub2RlX2xhYmVsIH19JywKICAgICAgIGNv bGxlY3Rpb25fdHlwZTogJ2NvbGwtY29uc3RyYWludHMnLApAQCAtMjAsNyArMjEsNyBAQCBkZWZp bmUoJ3BnYWRtaW4ubm9kZS57e25vZGVfdHlwZX19JywgWwogICAgICAgaGFzRGVwZW5kczogdHJ1 ZSwKICAgICAgIGhhc1N0YXRpc3RpY3M6IHRydWUsCiAgICAgICBzdGF0c1ByZXR0aWZ5RmllbGRz OiBbJ0luZGV4IHNpemUnXSwKLSAgICAgIHBhcmVudF90eXBlOiAndGFibGUnLAorICAgICAgcGFy ZW50X3R5cGU6IFsndGFibGUnLCdwYXJ0aXRpb24nXSwKICAgICAgIGNhbkRyb3A6IHRydWUsCiAg ICAgICBjYW5Ecm9wQ2FzY2FkZTogdHJ1ZSwKICAgICAgIEluaXQ6IGZ1bmN0aW9uKCkgewpAQCAt NDUsMTIgKzQ2LDI4IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnt7bm9kZV90eXBlfX0nLCBbCiAg ICAgICAgIGlmIChkYXRhICYmIGRhdGEuY2hlY2sgPT0gZmFsc2UpCiAgICAgICAgICAgcmV0dXJu IHRydWU7CiAKLSAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwgaSA9IGl0ZW0sIGQgPSBp dGVtRGF0YSwgcGFyZW50cyA9IFtdOworICAgICAgICB2YXIgdCA9IHBnQnJvd3Nlci50cmVlLCBp ID0gaXRlbSwgZCA9IGl0ZW1EYXRhLCBwYXJlbnRzID0gW10sCisgICAgICAgICAgaW1tZWRpYXRl X3BhcmVudF90YWJsZV9mb3VuZCA9IGZhbHNlLAorICAgICAgICAgIGlzX2ltbWVkaWF0ZV9wYXJl bnRfdGFibGVfcGFydGl0aW9uZWQgPSBmYWxzZTsKKwogICAgICAgICAvLyBUbyBpdGVyYXRlIG92 ZXIgdHJlZSB0byBjaGVjayBwYXJlbnQgbm9kZQogICAgICAgICB3aGlsZSAoaSkgewotICAgICAg ICAgIC8vIElmIGl0IGlzIHNjaGVtYSB0aGVuIGFsbG93IHVzZXIgdG8gYyByZWF0ZSB0YWJsZQor ICAgICAgICAgIC8vIElmIHRhYmxlIGlzIHBhcnRpdGlvbmVkIHRhYmxlIHRoZW4gcmV0dXJuIGZh bHNlCisgICAgICAgICAgaWYgKCFpbW1lZGlhdGVfcGFyZW50X3RhYmxlX2ZvdW5kICYmIChkLl90 eXBlID09ICd0YWJsZScgfHwgZC5fdHlwZSA9PSAncGFydGl0aW9uJykpIHsKKyAgICAgICAgICAg IGltbWVkaWF0ZV9wYXJlbnRfdGFibGVfZm91bmQgPSB0cnVlOworICAgICAgICAgICAgaWYgKCdp c19wYXJ0aXRpb25lZCcgaW4gZCAmJiBkLmlzX3BhcnRpdGlvbmVkKSB7CisgICAgICAgICAgICAg ICAgaXNfaW1tZWRpYXRlX3BhcmVudF90YWJsZV9wYXJ0aXRpb25lZCA9IHRydWU7CisgICAgICAg ICAgICB9CisgICAgICAgICAgfQorCisgICAgICAgICAgLy8gSWYgaXQgaXMgc2NoZW1hIHRoZW4g YWxsb3cgdXNlciB0byBjcmVhdGUgdGFibGUKICAgICAgICAgICBpZiAoXy5pbmRleE9mKFsnc2No ZW1hJ10sIGQuX3R5cGUpID4gLTEpIHsKICAgICAgICAgICAgIHslIGlmIG5vZGVfdHlwZSA9PSAn cHJpbWFyeV9rZXknICV9CisKKyAgICAgICAgICAgIGlmIChpc19pbW1lZGlhdGVfcGFyZW50X3Rh YmxlX3BhcnRpdGlvbmVkKSB7CisgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg ICAgIH0KKwogICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lIHByaW1hcnkg a2V5IHBlciB0YWJsZS4KICAgICAgICAgICAgIHZhciBjaGlsZHJlbiA9IHQuY2hpbGRyZW4oYXJn dW1lbnRzWzFdLCBmYWxzZSksCiAgICAgICAgICAgICAgIHByaW1hcnlfa2V5X2ZvdW5kID0gZmFs c2U7CkBAIC02Myw3ICs4MCw3IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnt7bm9kZV90eXBlfX0n LCBbCiAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgIHJldHVybiAhcHJpbWFyeV9rZXlfZm91 bmQ7CiAgICAgICAgICAgICB7JSBlbHNlICV9Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg ICAgICAgICAgIHJldHVybiAhaXNfaW1tZWRpYXRlX3BhcmVudF90YWJsZV9wYXJ0aXRpb25lZDsK ICAgICAgICAgICAgIHslIGVuZGlmICV9CiAgICAgICAgICAgfQogICAgICAgICAgIHBhcmVudHMu cHVzaChkLl90eXBlKTsKQEAgLTc0LDcgKzkxLDcgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUue3tu b2RlX3R5cGV9fScsIFsKICAgICAgICAgaWYgKF8uaW5kZXhPZihwYXJlbnRzLCAnY2F0YWxvZycp ID4gLTEpIHsKICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiAhaXNfaW1tZWRpYXRlX3Bh cmVudF90YWJsZV9wYXJ0aXRpb25lZDsKICAgICAgICAgfQogICAgICAgfSwKIApkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL3RlbXBsYXRlcy9jb25zdHJhaW50cy9qcy9jb25zdHJh aW50cy5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy90ZW1wbGF0ZXMvY29uc3RyYWludHMvanMv Y29uc3RyYWludHMuanMKaW5kZXggYTczNDZmMS4uZTM3MmIzYyAxMDA2NDQKLS0tIGEvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFi bGVzL2NvbnN0cmFpbnRzL3RlbXBsYXRlcy9jb25zdHJhaW50cy9qcy9jb25zdHJhaW50cy5qcwor KysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv c2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvdGVtcGxhdGVzL2NvbnN0cmFpbnRzL2pzL2NvbnN0 cmFpbnRzLmpzCkBAIC05LDE2ICs5LDE4IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmNvbnN0cmFp bnRzJywgWwogICAgICAgICBub2RlOiAnY29uc3RyYWludHMnLAogICAgICAgICBsYWJlbDogZ2V0 dGV4dCgnQ29uc3RyYWludHMnKSwKICAgICAgICAgdHlwZTogJ2NvbGwtY29uc3RyYWludHMnLAor ICAgICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdCcm93c2VyLnRhYmxlQ2hpbGRUcmVlTm9k ZUhpZXJhcmNoeSwKICAgICAgICAgY29sdW1uczogWyduYW1lJywgJ2NvbW1lbnQnXQogICAgICAg fSk7CiAgIH07CiAKICAgaWYgKCFwZ0Jyb3dzZXIuTm9kZXNbJ2NvbnN0cmFpbnRzJ10pIHsKICAg ICBwZ0FkbWluLkJyb3dzZXIuTm9kZXNbJ2NvbnN0cmFpbnRzJ10gPSBwZ0Jyb3dzZXIuTm9kZS5l eHRlbmQoeworICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6IHBnQnJvd3Nlci50YWJsZUNoaWxk VHJlZU5vZGVIaWVyYXJjaHksCiAgICAgICB0eXBlOiAnY29uc3RyYWludHMnLAogICAgICAgbGFi ZWw6IGdldHRleHQoJ0NvbnN0cmFpbnRzJyksCiAgICAgICBjb2xsZWN0aW9uX3R5cGU6ICdjb2xs LWNvbnN0cmFpbnRzJywKLSAgICAgIHBhcmVudF90eXBlOiBbJ3RhYmxlJ10sCisgICAgICBwYXJl bnRfdHlwZTogWyd0YWJsZScsJ3BhcnRpdGlvbiddLAogICAgICAgSW5pdDogZnVuY3Rpb24oKSB7 CiAgICAgICAgIC8qIEF2b2lkIG11bGl0cGxlIHJlZ2lzdHJhdGlvbiBvZiBtZW51cyAqLwogICAg ICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9pbmRleGVz L19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2luZGV4ZXMvX19pbml0X18ucHkKaW5kZXggZTUyYzE1 Yi4uMTNmOWQ4NiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2luZGV4ZXMvX19pbml0X18ucHkKKysr IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvdGFibGVzL2luZGV4ZXMvX19pbml0X18ucHkKQEAgLTcyLDEyICs3MiwyOCBAQCBjbGFz cyBJbmRleGVzTW9kdWxlKENvbGxlY3Rpb25Ob2RlTW9kdWxlKToKICAgICAgICAgaWYgc3VwZXIo SW5kZXhlc01vZHVsZSwgc2VsZikuQmFja2VuZFN1cHBvcnRlZChtYW5hZ2VyLCAqKmt3YXJncyk6 CiAgICAgICAgICAgICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRpZD1rd2FyZ3NbJ2RpZCdd KQogCisgICAgICAgICAgICAjIEluIGNhc2Ugb2YgcGFydGl0aW9uZWQgdGFibGUgcmV0dXJuIGZh bHNlLgorICAgICAgICAgICAgaWYgJ3RpZCcgaW4ga3dhcmdzIGFuZCBtYW5hZ2VyLnZlcnNpb24g Pj0gMTAwMDAwOgorICAgICAgICAgICAgICAgIHBhcnRpdGlvbl9wYXRoID0gJ3BhcnRpdGlvbi9z cWwvI3swfSMnLmZvcm1hdChtYW5hZ2VyLnZlcnNpb24pCisgICAgICAgICAgICAgICAgU1FMID0g cmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbcGFydGl0aW9u X3BhdGgsICdiYWNrZW5kX3N1cHBvcnQuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICB0aWQ9 a3dhcmdzWyd0aWQnXQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBzdGF0dXMs IHJlcyA9IGNvbm4uZXhlY3V0ZV9zY2FsYXIoU1FMKQorCisgICAgICAgICAgICAgICAgIyBjaGVj ayBpZiBhbnkgZXJyb3JzCisgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisg ICAgICAgICAgICAgICAgcmV0dXJuIG5vdCByZXMKKwogICAgICAgICAgICAgaWYgJ3ZpZCcgbm90 IGluIGt3YXJnczoKICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQogCiAgICAgICAgICAgICB0 ZW1wbGF0ZV9wYXRoID0gJ2luZGV4L3NxbC8jezB9IycuZm9ybWF0KG1hbmFnZXIudmVyc2lvbikK LSAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKLSAgICAgICAgICAg ICAgICBbdGVtcGxhdGVfcGF0aCwgJ2JhY2tlbmRfc3VwcG9ydC5zcWwnXSksIHZpZD1rd2FyZ3Nb J3ZpZCddKQorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAg ICAgICIvIi5qb2luKFt0ZW1wbGF0ZV9wYXRoLCAnYmFja2VuZF9zdXBwb3J0LnNxbCddKSwKKyAg ICAgICAgICAgICAgICB2aWQ9a3dhcmdzWyd2aWQnXQorICAgICAgICAgICAgKQogICAgICAgICAg ICAgc3RhdHVzLCByZXMgPSBjb25uLmV4ZWN1dGVfc2NhbGFyKFNRTCkKIAogICAgICAgICAgICAg IyBjaGVjayBpZiBhbnkgZXJyb3JzCkBAIC0yMzksOSArMjU1LDEwIEBAIGNsYXNzIEluZGV4ZXNW aWV3KFBHQ2hpbGROb2RlVmlldyk6CiAgICAgICAgICAgICAjIFdlIG5lZWQgcGFyZW50J3MgbmFt ZSBlZyB0YWJsZSBuYW1lIGFuZCBzY2hlbWEgbmFtZQogICAgICAgICAgICAgIyB3aGVuIHdlIGNy ZWF0ZSBuZXcgaW5kZXggaW4gdXBkYXRlIHdlIGNhbiBmZXRjaCBpdCB1c2luZwogICAgICAgICAg ICAgIyBwcm9wZXJ0eSBzcWwKLSAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIu am9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnZ2V0X3BhcmVudC5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGlkPWt3YXJnc1sndGlkJ10pCisgICAgICAgICAgICBTUUwgPSByZW5kZXJf dGVtcGxhdGUoCisgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwg J2dldF9wYXJlbnQuc3FsJ10pLAorICAgICAgICAgICAgICAgIHRpZD1rd2FyZ3NbJ3RpZCddCisg ICAgICAgICAgICApCiAgICAgICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0 ZV8yZGFycmF5KFNRTCkKICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CiAgICAgICAgICAgICAg ICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQpAQCAtMjYyLDgg KzI3OSw5IEBAIGNsYXNzIEluZGV4ZXNWaWV3KFBHQ2hpbGROb2RlVmlldyk6CiAgICAgICAgICIi IgogICAgICAgICByZXMgPSBbeydsYWJlbCc6ICcnLCAndmFsdWUnOiAnJ31dCiAgICAgICAgIHRy eToKLSAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1w bGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn Z2V0X2NvbGxhdGlvbnMuc3FsJ10pKQorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRl KAorICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsICdnZXRfY29s bGF0aW9ucy5zcWwnXSkKKyAgICAgICAgICAgICkKICAgICAgICAgICAgIHN0YXR1cywgcnNldCA9 IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQogICAgICAgICAgICAgaWYgbm90IHN0YXR1 czoKICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXJlcykKQEAgLTI4OSw4ICszMDcsNyBAQCBjbGFzcyBJbmRleGVzVmlldyhQR0NoaWxkTm9kZVZp ZXcpOgogICAgICAgICAiIiIKICAgICAgICAgcmVzID0gW3snbGFiZWwnOiAnJywgJ3ZhbHVlJzog Jyd9XQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8i LmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ2dldF9hbS5zcWwnXSkpCisgICAgICAgICAgICBTUUwgPSByZW5kZXJf dGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwgJ2dldF9hbS5zcWwnXSkpCiAg ICAgICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkK ICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVy bmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCkBAIC0zMTcsMTcgKzMzNCwxNyBAQCBjbGFz cyBJbmRleGVzVmlldyhQR0NoaWxkTm9kZVZpZXcpOgogICAgICAgICByZXMgPSBkaWN0KCkKICAg ICAgICAgdHJ5OgogICAgICAgICAgICAgIyBGZXRjaGluZyBhbGwgdGhlIGFjY2VzcyBtZXRob2Rz Ci0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxh dGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dl dF9hbS5zcWwnXSkpCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4o W3NlbGYudGVtcGxhdGVfcGF0aCwgJ2dldF9hbS5zcWwnXSkpCiAgICAgICAgICAgICBzdGF0dXMs IHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKICAgICAgICAgICAgIGlmIG5v dCBzdGF0dXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihl cnJvcm1zZz1yZXMpCiAKICAgICAgICAgICAgIGZvciByb3cgaW4gcnNldFsncm93cyddOgogICAg ICAgICAgICAgICAgICMgRmV0Y2hpbmcgYWxsIHRoZSBvcF9jbGFzc2VzIGZvciBlYWNoIGFjY2Vz cyBtZXRob2QKLSAgICAgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4o W3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdnZXRfb3BfY2xhc3Muc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBvaWQ9cm93WydvaWQnXSkKKyAgICAgICAgICAgICAgICBTUUwgPSBy ZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRlbXBs YXRlX3BhdGgsICdnZXRfb3BfY2xhc3Muc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICBvaWQ9 cm93WydvaWQnXQorICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICBzdGF0dXMsIHJl c3VsdCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQogICAgICAgICAgICAgICAgIGlm IG5vdCBzdGF0dXM6CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9cmVzKQpAQCAtMzY1LDggKzM4Miw5IEBAIGNsYXNzIEluZGV4ZXNWaWV3 KFBHQ2hpbGROb2RlVmlldyk6CiAgICAgICAgICAgICBKU09OIG9mIGF2YWlsYWJsZSBzY2hlbWEg bm9kZXMKICAgICAgICAgIiIiCiAKLSAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ25vZGVzLnNxbCddKSwgdGlkPXRpZCkKKyAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwgJ25vZGVz LnNxbCddKSwgdGlkPXRpZAorICAgICAgICApCiAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5j b25uLmV4ZWN1dGVfZGljdChTUUwpCiAKICAgICAgICAgaWYgbm90IHN0YXR1czoKQEAgLTM5Mywx MCArNDExLDEwIEBAIGNsYXNzIEluZGV4ZXNWaWV3KFBHQ2hpbGROb2RlVmlldyk6CiAgICAgICAg IFJldHVybnM6CiAgICAgICAgICAgICBKU09OIG9mIGF2YWlsYWJsZSBzY2hlbWEgY2hpbGQgbm9k ZXMKICAgICAgICAgIiIiCi0gICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihb c2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdub2Rlcy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlk LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4PWlkeCkKKyAgICAgICAgU1FMID0g cmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0 aCwgJ25vZGVzLnNxbCddKSwKKyAgICAgICAgICAgIHRpZD10aWQsIGlkeD1pZHgKKyAgICAgICAg KQogICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkK ICAgICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2 ZXJfZXJyb3IoZXJyb3Jtc2c9cnNldCkKQEAgLTQzMyw4ICs0NTEsOSBAQCBjbGFzcyBJbmRleGVz VmlldyhQR0NoaWxkTm9kZVZpZXcpOgogICAgICAgICAgICAgSlNPTiBvZiBhdmFpbGFibGUgc2No ZW1hIGNoaWxkIG5vZGVzCiAgICAgICAgICIiIgogICAgICAgICByZXMgPSBbXQotICAgICAgICBT UUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9kZXMuc3FsJ10pLCB0aWQ9dGlk KQorICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAiLyIuam9pbihb c2VsZi50ZW1wbGF0ZV9wYXRoLCAnbm9kZXMuc3FsJ10pLCB0aWQ9dGlkCisgICAgICAgICkKICAg ICAgICAgc3RhdHVzLCByc2V0ID0gc2VsZi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCiAgICAg ICAgIGlmIG5vdCBzdGF0dXM6CiAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXJzZXQpCkBAIC00NjUsOCArNDg0LDkgQEAgY2xhc3MgSW5kZXhlc1ZpZXco UEdDaGlsZE5vZGVWaWV3KToKICAgICAgICAgICAgIFVwZGF0ZWQgcHJvcGVydGllcyBkYXRhIHdp dGggY29sdW1uIGRldGFpbHMKICAgICAgICAgIiIiCiAKLSAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ2NvbHVtbl9kZXRhaWxzLnNxbCddKSwgaWR4PWlkeCkKKyAg ICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYu dGVtcGxhdGVfcGF0aCwgJ2NvbHVtbl9kZXRhaWxzLnNxbCddKSwgaWR4PWlkeAorICAgICAgICAp CiAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQog ICAgICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz1yc2V0KQpAQCAtNTIxLDEwICs1NDEsMTAgQEAgY2xhc3MgSW5kZXhl c1ZpZXcoUEdDaGlsZE5vZGVWaWV3KToKICAgICAgICAgICAgIEpTT04gb2Ygc2VsZWN0ZWQgc2No ZW1hIG5vZGUKICAgICAgICAgIiIiCiAKLSAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGlkPWRpZCwgdGlkPXRpZCwgaWR4PWlkeCwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkKQorICAgICAgICBTUUwgPSBy ZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRo LCAncHJvcGVydGllcy5zcWwnXSksCisgICAgICAgICAgICBkaWQ9ZGlkLCB0aWQ9dGlkLCBpZHg9 aWR4LCBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZAorICAgICAgICApCiAKICAgICAg ICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKIApAQCAtNTk1LDkg KzYxNSwxMCBAQCBjbGFzcyBJbmRleGVzVmlldyhQR0NoaWxkTm9kZVZpZXcpOgogICAgICAgICB0 cnk6CiAgICAgICAgICAgICAjIFN0YXJ0IHRyYW5zYWN0aW9uLgogICAgICAgICAgICAgc2VsZi5j b25uLmV4ZWN1dGVfc2NhbGFyKCJCRUdJTjsiKQotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGUuc3FsJ10pLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4sIG1vZGU9J2NyZWF0 ZScpCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAg Ii8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwgJ2NyZWF0ZS5zcWwnXSksCisgICAgICAgICAg ICAgICAgZGF0YT1kYXRhLCBjb25uPXNlbGYuY29ubiwgbW9kZT0nY3JlYXRlJworICAgICAgICAg ICAgKQogICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIo U1FMKQogICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgICAgICAjIEVuZCB0 cmFuc2FjdGlvbi4KQEAgLTYwNiw5ICs2MjcsMTAgQEAgY2xhc3MgSW5kZXhlc1ZpZXcoUEdDaGls ZE5vZGVWaWV3KToKIAogICAgICAgICAgICAgIyBJZiB1c2VyIGNob29zZXMgY29uY3VycmVudCBp bmRleCB0aGVuIHdlIGNhbm5vdCBydW4gaXQgYWxvbmcKICAgICAgICAgICAgICMgd2l0aCBvdGhl ciBhbHRlciBzdGF0ZW1lbnRzIHNvIHdlIHdpbGwgc2VwYXJhdGUgYWx0ZXIgaW5kZXggcGFydAot ICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRl X3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbHRl ci5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBj b25uPXNlbGYuY29ubikKKyAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAg ICAgICAgICAgICAiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAnYWx0ZXIuc3FsJ10pLAor ICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4KKyAgICAgICAgICAgICkK ICAgICAgICAgICAgIFNRTCA9IFNRTC5zdHJpcCgnXG4nKS5zdHJpcCgnICcpCiAgICAgICAgICAg ICBpZiBTUUwgIT0gJyc6CiAgICAgICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4u ZXhlY3V0ZV9zY2FsYXIoU1FMKQpAQCAtNjE4LDkgKzY0MCwxMCBAQCBjbGFzcyBJbmRleGVzVmll dyhQR0NoaWxkTm9kZVZpZXcpOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxf c2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKIAogICAgICAgICAgICAgIyB3ZSBuZWVkIG9pZCB0 byB0byBhZGQgb2JqZWN0IGluIHRyZWUgYXQgYnJvd3NlcgotICAgICAgICAgICAgU1FMID0gcmVu ZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfb2lkLnNxbCddKSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkLCBkYXRhPWRhdGEpCisgICAgICAgICAg ICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYu dGVtcGxhdGVfcGF0aCwgJ2dldF9vaWQuc3FsJ10pLAorICAgICAgICAgICAgICAgIHRpZD10aWQs IGRhdGE9ZGF0YQorICAgICAgICAgICAgKQogICAgICAgICAgICAgc3RhdHVzLCBpZHggPSBzZWxm LmNvbm4uZXhlY3V0ZV9zY2FsYXIoU1FMKQogICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKICAg ICAgICAgICAgICAgICAjIEVuZCB0cmFuc2FjdGlvbi4KQEAgLTY2NSwxMCArNjg4LDEwIEBAIGNs YXNzIEluZGV4ZXNWaWV3KFBHQ2hpbGROb2RlVmlldyk6CiAgICAgICAgIHRyeToKICAgICAgICAg ICAgICMgV2Ugd2lsbCBmaXJzdCBmZXRjaCB0aGUgaW5kZXggbmFtZSBmb3IgY3VycmVudCByZXF1 ZXN0CiAgICAgICAgICAgICAjIHNvIHRoYXQgd2UgY3JlYXRlIHRlbXBsYXRlIGZvciBkcm9wcGlu ZyBpbmRleAotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxm LnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkaWQ9ZGlkLCB0aWQ9dGlkLCBpZHg9aWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkKQorICAgICAgICAgICAgU1FM ID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRlbXBs YXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICBkaWQ9ZGlkLCB0 aWQ9dGlkLCBpZHg9aWR4LCBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZAorICAgICAg ICAgICAgKQogCiAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2Rp Y3QoU1FMKQogICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKQEAgLTY4Nyw5ICs3MTAsMTAgQEAg Y2xhc3MgSW5kZXhlc1ZpZXcoUEdDaGlsZE5vZGVWaWV3KToKIAogICAgICAgICAgICAgZGF0YSA9 IGRpY3QocmVzWydyb3dzJ11bMF0pCiAKLSAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0 ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnZGVsZXRlLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25uLCBjYXNjYWRlPWNhc2NhZGUp CisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgIi8i LmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwgJ2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICAg ICAgZGF0YT1kYXRhLCBjb25uPXNlbGYuY29ubiwgY2FzY2FkZT1jYXNjYWRlCisgICAgICAgICAg ICApCiAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX3NjYWxhcihT UUwpCiAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgICAgIHJldHVybiBp bnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQpAQCAtNzg3LDEwICs4MTEsMTAgQEAg Y2xhc3MgSW5kZXhlc1ZpZXcoUEdDaGlsZE5vZGVWaWV3KToKICAgICAgICAgVGhpcyBmdW5jdGlv biB3aWxsIGdlbnJhdGUgc3FsIGZyb20gbW9kZWwgZGF0YQogICAgICAgICAiIiIKICAgICAgICAg aWYgaWR4IGlzIG5vdCBOb25lOgotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkaWQ9ZGlkLCB0aWQ9dGlkLCBpZHg9aWR4LAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkKQorICAg ICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICIvIi5qb2lu KFtzZWxmLnRlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgICAg ICBkaWQ9ZGlkLCB0aWQ9dGlkLCBpZHg9aWR4LCBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5 c29pZAorICAgICAgICAgICAgKQogCiAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29u bi5leGVjdXRlX2RpY3QoU1FMKQogICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKQEAgLTgyNiwx MSArODUwLDE1IEBAIGNsYXNzIEluZGV4ZXNWaWV3KFBHQ2hpbGROb2RlVmlldyk6CiAgICAgICAg ICAgICAgICAgICAgIHJldHVybiBnZXR0ZXh0KCctLSBkZWZpbml0aW9uIGluY29tcGxldGUnKQog CiAgICAgICAgICAgICAjIElmIHRoZSByZXF1ZXN0IGZvciBuZXcgb2JqZWN0IHdoaWNoIGRvIG5v dCBoYXZlIGRpZAotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtz ZWxmLnRlbXBsYXRlX3BhdGgsICdjcmVhdGUuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4sIG1vZGU9bW9kZSkKKyAgICAg ICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAiLyIuam9pbihb c2VsZi50ZW1wbGF0ZV9wYXRoLCAnY3JlYXRlLnNxbCddKSwKKyAgICAgICAgICAgICAgICBkYXRh PWRhdGEsIGNvbm49c2VsZi5jb25uLCBtb2RlPW1vZGUKKyAgICAgICAgICAgICkKICAgICAgICAg ICAgIFNRTCArPSAiXG4iCi0gICAgICAgICAgICBTUUwgKz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsICdhbHRlci5zcWwnXSksCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCisgICAgICAgICAg ICBTUUwgKz0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxm LnRlbXBsYXRlX3BhdGgsICdhbHRlci5zcWwnXSksCisgICAgICAgICAgICAgICAgZGF0YT1kYXRh LCBjb25uPXNlbGYuY29ubgorICAgICAgICAgICAgKQogCiAgICAgICAgIHJldHVybiBTUUwsIGRh dGFbJ25hbWUnXSBpZiAnbmFtZScgaW4gZGF0YSBlbHNlIG9sZF9kYXRhWyduYW1lJ10KIApAQCAt ODQ4LDEwICs4NzYsMTAgQEAgY2xhc3MgSW5kZXhlc1ZpZXcoUEdDaGlsZE5vZGVWaWV3KToKICAg ICAgICAgICAgaWR4OiBJbmRleCBJRAogICAgICAgICAiIiIKIAotICAgICAgICBTUUwgPSByZW5k ZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkaWQ9ZGlkLCB0aWQ9dGlkLCBpZHg9aWR4LAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCisg ICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICIvIi5qb2luKFtzZWxm LnRlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgIGRpZD1kaWQs IHRpZD10aWQsIGlkeD1pZHgsIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkCisgICAg ICAgICkKIAogICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FM KQogICAgICAgICBpZiBub3Qgc3RhdHVzOgpAQCAtODcyLDkgKzkwMCwxMCBAQCBjbGFzcyBJbmRl eGVzVmlldyhQR0NoaWxkTm9kZVZpZXcpOgogICAgICAgICAgICAgcmV0dXJuIFNRTAogICAgICAg ICBzcWxfaGVhZGVyID0gdSItLSBJbmRleDogezB9XG5cbi0tICIuZm9ybWF0KGRhdGFbJ25hbWUn XSkKIAotICAgICAgICBzcWxfaGVhZGVyICs9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2Vs Zi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ2RlbGV0ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCisgICAgICAgIHNxbF9oZWFkZXIgKz0g cmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0 aCwgJ2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25u CisgICAgICAgICkKIAogICAgICAgICBTUUwgPSBzcWxfaGVhZGVyICsgJ1xuXG4nICsgU1FMCiAK QEAgLTk1OSwxMCArOTg4LDExIEBAIGNsYXNzIEluZGV4ZXNWaWV3KFBHQ2hpbGROb2RlVmlldyk6 CiAKICAgICAgICAgICAgIGlmIGlzX3Bnc3RhdHR1cGxlOgogICAgICAgICAgICAgICAgICMgRmV0 Y2ggaW5kZXggZGV0YWlscyBvbmx5IGlmIGV4dGVuZGVkIHN0YXRzIGF2YWlsYWJsZQotICAgICAg ICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9w YXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3By b3BlcnRpZXMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk aWQ9ZGlkLCB0aWQ9dGlkLCBpZHg9aWR4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKKyAgICAgICAgICAgICAg ICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtz ZWxmLnRlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAg ICAgZGlkPWRpZCwgdGlkPXRpZCwgaWR4PWlkeCwKKyAgICAgICAgICAgICAgICAgICAgZGF0bGFz dHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQKKyAgICAgICAgICAgICAgICApCiAgICAgICAgICAg ICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKICAgICAgICAg ICAgICAgICBpZiBub3Qgc3RhdHVzOgogICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJu YWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9pbmRl eGVzL3RlbXBsYXRlcy9pbmRleC9qcy9pbmRleC5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2Vy dmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9pbmRleGVzL3RlbXBs YXRlcy9pbmRleC9qcy9pbmRleC5qcwppbmRleCAyNGYzN2YwLi40ZmMxZDU0IDEwMDY0NAotLS0g YS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2No ZW1hcy90YWJsZXMvaW5kZXhlcy90ZW1wbGF0ZXMvaW5kZXgvanMvaW5kZXguanMKKysrIGIvd2Vi L3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMv dGFibGVzL2luZGV4ZXMvdGVtcGxhdGVzL2luZGV4L2pzL2luZGV4LmpzCkBAIC0xMCw2ICsxMCw3 IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmluZGV4JywgWwogICAgICAgICBub2RlOiAnaW5kZXgn LAogICAgICAgICBsYWJlbDogZ2V0dGV4dCgnSW5kZXhlcycpLAogICAgICAgICB0eXBlOiAnY29s bC1pbmRleCcsCisgICAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVD aGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgICBzcWxBbHRlckhlbHA6ICdzcWwtYWx0ZXJp bmRleC5odG1sJywKICAgICAgICAgc3FsQ3JlYXRlSGVscDogJ3NxbC1jcmVhdGVpbmRleC5odG1s JywKICAgICAgICAgZGlhbG9nSGVscDogdXJsX2ZvcignaGVscC5zdGF0aWMnLCB7J2ZpbGVuYW1l JzogJ2luZGV4X2RpYWxvZy5odG1sJ30pLApAQCAtMjEwLDggKzIxMSw5IEBAIGRlZmluZSgncGdh ZG1pbi5ub2RlLmluZGV4JywgWwogICAgIH0pOwogCiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydp bmRleCddKSB7Ci0gICAgcGdBZG1pbi5Ccm93c2VyLk5vZGVzWydpbmRleCddID0gcGdBZG1pbi5C cm93c2VyLk5vZGUuZXh0ZW5kKHsKLSAgICAgIHBhcmVudF90eXBlOiBbJ3RhYmxlJywgJ3ZpZXcn LCAnbXZpZXcnXSwKKyAgICBwZ0FkbWluLkJyb3dzZXIuTm9kZXNbJ2luZGV4J10gPSBwZ0Jyb3dz ZXIuTm9kZS5leHRlbmQoeworICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6IHBnQnJvd3Nlci50 YWJsZUNoaWxkVHJlZU5vZGVIaWVyYXJjaHksCisgICAgICBwYXJlbnRfdHlwZTogWyd0YWJsZScs ICd2aWV3JywgJ212aWV3JywgJ3BhcnRpdGlvbiddLAogICAgICAgY29sbGVjdGlvbl90eXBlOiBb J2NvbGwtdGFibGUnLCAnY29sbC12aWV3J10sCiAgICAgICBzcWxBbHRlckhlbHA6ICdzcWwtYWx0 ZXJpbmRleC5odG1sJywKICAgICAgIHNxbENyZWF0ZUhlbHA6ICdzcWwtY3JlYXRlaW5kZXguaHRt bCcsCkBAIC0yNDcsNiArMjQ5LDEyIEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmluZGV4JywgWwog ICAgICAgICAgIGljb246ICd3Y1RhYkljb24gaWNvbi1pbmRleCcsIGRhdGE6IHthY3Rpb246ICdj cmVhdGUnLCBjaGVjazogdHJ1ZX0sCiAgICAgICAgICAgZW5hYmxlOiAnY2FuQ3JlYXRlJwogICAg ICAgICB9LHsKKyAgICAgICAgICBuYW1lOiAnY3JlYXRlX2luZGV4X29uUGFydGl0aW9uJywgbm9k ZTogJ3BhcnRpdGlvbicsIG1vZHVsZTogdGhpcywKKyAgICAgICAgICBhcHBsaWVzOiBbJ29iamVj dCcsICdjb250ZXh0J10sIGNhbGxiYWNrOiAnc2hvd19vYmpfcHJvcGVydGllcycsCisgICAgICAg ICAgY2F0ZWdvcnk6ICdjcmVhdGUnLCBwcmlvcml0eTogNCwgbGFiZWw6IGdldHRleHQoJ0luZGV4 Li4uJyksCisgICAgICAgICAgaWNvbjogJ3djVGFiSWNvbiBpY29uLWluZGV4JywgZGF0YToge2Fj dGlvbjogJ2NyZWF0ZScsIGNoZWNrOiB0cnVlfSwKKyAgICAgICAgICBlbmFibGU6ICdjYW5DcmVh dGUnCisgICAgICAgIH0sewogICAgICAgICAgIG5hbWU6ICdjcmVhdGVfaW5kZXhfb25NYXRWaWV3 Jywgbm9kZTogJ212aWV3JywgbW9kdWxlOiB0aGlzLAogICAgICAgICAgIGFwcGxpZXM6IFsnb2Jq ZWN0JywgJ2NvbnRleHQnXSwgY2FsbGJhY2s6ICdzaG93X29ial9wcm9wZXJ0aWVzJywKICAgICAg ICAgICBjYXRlZ29yeTogJ2NyZWF0ZScsIHByaW9yaXR5OiA1LCBsYWJlbDogZ2V0dGV4dCgnSW5k ZXguLi4nKSwKQEAgLTQ3MiwxMiArNDgwLDIzIEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmluZGV4 JywgWwogICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEuY2hlY2sgPT0gZmFsc2UpCiAgICAgICAg ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsIGkg PSBpdGVtLCBkID0gaXRlbURhdGEsIHBhcmVudHMgPSBbXTsKKyAgICAgICAgICB2YXIgdCA9IHBn QnJvd3Nlci50cmVlLCBpID0gaXRlbSwgZCA9IGl0ZW1EYXRhLCBwYXJlbnRzID0gW10sCisgICAg ICAgICAgICBpbW1lZGlhdGVfcGFyZW50X3RhYmxlX2ZvdW5kID0gZmFsc2UsCisgICAgICAgICAg ICBpc19pbW1lZGlhdGVfcGFyZW50X3RhYmxlX3BhcnRpdGlvbmVkID0gZmFsc2U7CiAgICAgICAg ICAgLy8gVG8gaXRlcmF0ZSBvdmVyIHRyZWUgdG8gY2hlY2sgcGFyZW50IG5vZGUKICAgICAgICAg ICB3aGlsZSAoaSkgewotICAgICAgICAgICAgLy8gSWYgaXQgaXMgc2NoZW1hIHRoZW4gYWxsb3cg dXNlciB0byBjIHJlYXRlIHRhYmxlCisgICAgICAgICAgICAvLyBEbyBub3QgYWxsb3cgY3JlYXRp bmcgaW5kZXggb24gcGFydGl0aW9uZWQgdGFibGVzLgorICAgICAgICAgICAgaWYgKCFpbW1lZGlh dGVfcGFyZW50X3RhYmxlX2ZvdW5kICYmCisgICAgICAgICAgICAgICAgXy5pbmRleE9mKFsndGFi bGUnLCAncGFydGl0aW9uJ10sIGQuX3R5cGUpID4gLTEpIHsKKyAgICAgICAgICAgICAgaW1tZWRp YXRlX3BhcmVudF90YWJsZV9mb3VuZCA9IHRydWU7CisgICAgICAgICAgICAgIGlmICgnaXNfcGFy dGl0aW9uZWQnIGluIGQgJiYgZC5pc19wYXJ0aXRpb25lZCkgeworICAgICAgICAgICAgICAgIGlz X2ltbWVkaWF0ZV9wYXJlbnRfdGFibGVfcGFydGl0aW9uZWQgPSB0cnVlOworICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElmIGl0IGlzIHNjaGVtYSB0aGVu IGFsbG93IHVzZXIgdG8gY3JlYXRlIGluZGV4CiAgICAgICAgICAgICBpZiAoXy5pbmRleE9mKFsn c2NoZW1hJ10sIGQuX3R5cGUpID4gLTEpCi0gICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg ICAgICAgICAgICByZXR1cm4gIWlzX2ltbWVkaWF0ZV9wYXJlbnRfdGFibGVfcGFydGl0aW9uZWQ7 CiAgICAgICAgICAgICBwYXJlbnRzLnB1c2goZC5fdHlwZSk7CiAgICAgICAgICAgICBpID0gdC5o YXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGw7CiAgICAgICAgICAgICBkID0gaSA/IHQu aXRlbURhdGEoaSkgOiBudWxsOwpAQCAtNDg2LDcgKzUwNSw3IEBAIGRlZmluZSgncGdhZG1pbi5u b2RlLmluZGV4JywgWwogICAgICAgICAgIGlmIChfLmluZGV4T2YocGFyZW50cywgJ2NhdGFsb2cn KSA+IC0xKSB7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuICFpc19pbW1lZGlh dGVfcGFyZW50X3RhYmxlX3BhcnRpdGlvbmVkOwogICAgICAgICAgIH0KICAgICAgIH0KICAgfSk7 CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcGFydGl0aW9ucy9fX2luaXRfXy5weSBiL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxl cy9wYXJ0aXRpb25zL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmExYzAxMGYKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcGFydGl0aW9ucy9fX2lu aXRfXy5weQpAQCAtMCwwICsxLDU4MyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1p biA0IC0gUG9zdGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE3LCBU aGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQg dW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIiIi IEltcGxlbWVudHMgUGFydGl0aW9ucyBOb2RlICIiIgorCitpbXBvcnQgcmUKK2ltcG9ydCBzaW1w bGVqc29uIGFzIGpzb24KK2ltcG9ydCBwZ2FkbWluLmJyb3dzZXIuc2VydmVyX2dyb3Vwcy5zZXJ2 ZXJzLmRhdGFiYXNlcy5zY2hlbWFzIGFzIHNjaGVtYQorZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVy X3RlbXBsYXRlLCByZXF1ZXN0Citmcm9tIGZsYXNrX2JhYmVsIGltcG9ydCBnZXR0ZXh0Citmcm9t IHBnYWRtaW4uYnJvd3Nlci5zZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMuZGF0YWJhc2VzLnNjaGVtYXMu dXRpbHMgXAorICAgIGltcG9ydCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MKK2Zyb20g cGdhZG1pbi51dGlscy5hamF4IGltcG9ydCBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IsIFwKKyAgICBt YWtlX3Jlc3BvbnNlIGFzIGFqYXhfcmVzcG9uc2UsIGdvbmUKK2Zyb20gcGdhZG1pbi5icm93c2Vy LnNlcnZlcl9ncm91cHMuc2VydmVycy5kYXRhYmFzZXMuc2NoZW1hcy50YWJsZXMudXRpbHMgXAor ICAgIGltcG9ydCBCYXNlVGFibGVWaWV3Citmcm9tIHBnYWRtaW4uYnJvd3Nlci5jb2xsZWN0aW9u IGltcG9ydCBDb2xsZWN0aW9uTm9kZU1vZHVsZQorZnJvbSBwZ2FkbWluLnV0aWxzLmFqYXggaW1w b3J0IG1ha2VfanNvbl9yZXNwb25zZSwgcHJlY29uZGl0aW9uX3JlcXVpcmVkCitmcm9tIGNvbmZp ZyBpbXBvcnQgUEdfREVGQVVMVF9EUklWRVIKK2Zyb20gcGdhZG1pbi5icm93c2VyLnV0aWxzIGlt cG9ydCBQR0NoaWxkTW9kdWxlCisKKworY2xhc3MgUGFydGl0aW9uc01vZHVsZShDb2xsZWN0aW9u Tm9kZU1vZHVsZSk6CisgICAgIiIiCisgICAgIGNsYXNzIFBhcnRpdGlvbnNNb2R1bGUoQ29sbGVj dGlvbk5vZGVNb2R1bGUpCisKKyAgICAgICAgQSBtb2R1bGUgY2xhc3MgZm9yIFBhcnRpdGlvbiBu b2RlIGRlcml2ZWQgZnJvbSBDb2xsZWN0aW9uTm9kZU1vZHVsZS4KKworICAgIE1ldGhvZHM6Cisg ICAgLS0tLS0tLQorICAgICogX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgLSBNZXRo b2QgaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBQYXJ0aXRpb24gYW5kIGl0J3MgYmFzZSBtb2R1 bGUuCisKKyAgICAqIGdldF9ub2RlcyhnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQpCisgICAgICAt IE1ldGhvZCBpcyB1c2VkIHRvIGdlbmVyYXRlIHRoZSBicm93c2VyIGNvbGxlY3Rpb24gbm9kZS4K KworICAgICogbm9kZV9pbm9kZSgpCisgICAgICAtIE1ldGhvZCBpcyBvdmVycmlkZGVuIGZyb20g aXRzIGJhc2UgY2xhc3MgdG8gbWFrZSB0aGUgbm9kZSBhcyBsZWFmIG5vZGUuCisKKyAgICAqIHNj cmlwdF9sb2FkKCkKKyAgICAgIC0gTG9hZCB0aGUgbW9kdWxlIHNjcmlwdCBmb3Igc2NoZW1hLCB3 aGVuIGFueSBvZiB0aGUgc2VydmVyIG5vZGUgaXMKKyAgICAgICAgaW5pdGlhbGl6ZWQuCisgICAg IiIiCisKKyAgICBOT0RFX1RZUEUgPSAncGFydGl0aW9uJworICAgIENPTExFQ1RJT05fTEFCRUwg PSBnZXR0ZXh0KCJQYXJ0aXRpb25zIikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqYXJncywg Kiprd2FyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgTWV0aG9kIGlzIHVzZWQgdG8gaW5pdGlh bGl6ZSB0aGUgUGFydGl0aW9uc01vZHVsZSBhbmQgaXQncyBiYXNlIG1vZHVsZS4KKworICAgICAg ICBBcmdzOgorICAgICAgICAgICAgKmFyZ3M6CisgICAgICAgICAgICAqKmt3YXJnczoKKyAgICAg ICAgIiIiCisgICAgICAgIHN1cGVyKFBhcnRpdGlvbnNNb2R1bGUsIHNlbGYpLl9faW5pdF9fKCph cmdzLCAqKmt3YXJncykKKyAgICAgICAgc2VsZi5taW5fdmVyID0gMTAwMDAwCisgICAgICAgIHNl bGYubWF4X3ZlciA9IE5vbmUKKworICAgIGRlZiBnZXRfbm9kZXMoc2VsZiwgZ2lkLCBzaWQsIGRp ZCwgc2NpZCwgKiprd2FyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgR2VuZXJhdGUgdGhlIGNv bGxlY3Rpb24gbm9kZQorICAgICAgICAiIiIKKyAgICAgICAgeWllbGQgc2VsZi5nZW5lcmF0ZV9i cm93c2VyX2NvbGxlY3Rpb25fbm9kZShrd2FyZ3NbJ3RpZCddKQorCisgICAgQHByb3BlcnR5Cisg ICAgZGVmIHNjcmlwdF9sb2FkKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgTG9hZCB0aGUg bW9kdWxlIHNjcmlwdCBmb3Igc2VydmVyLCB3aGVuIGFueSBvZiB0aGUgc2VydmVyLWdyb3VwIG5v ZGUgaXMKKyAgICAgICAgaW5pdGlhbGl6ZWQuCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4g c2NoZW1hLlNjaGVtYU1vZHVsZS5OT0RFX1RZUEUKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBu b2RlX2lub2RlKHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgTG9hZCB0aGUgbW9kdWxlIG5v ZGUgYXMgYSBsZWFmIG5vZGUKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBUcnVlCisKKyAg ICBkZWYgQmFja2VuZFN1cHBvcnRlZChzZWxmLCBtYW5hZ2VyLCAqKmt3YXJncyk6CisgICAgICAg ICIiIgorICAgICAgICBMb2FkIHRoaXMgbW9kdWxlIGlmIGl0IGlzIGEgcGFydGl0aW9uIHRhYmxl CisgICAgICAgICIiIgorICAgICAgICBpZiAndGlkJyBpbiBrd2FyZ3MgYW5kIENvbGxlY3Rpb25O b2RlTW9kdWxlLkJhY2tlbmRTdXBwb3J0ZWQoc2VsZiwgbWFuYWdlciwgKiprd2FyZ3MpOgorICAg ICAgICAgICAgY29ubiA9IG1hbmFnZXIuY29ubmVjdGlvbihkaWQ9a3dhcmdzWydkaWQnXSkKKwor ICAgICAgICAgICAgdGVtcGxhdGVfcGF0aCA9ICdwYXJ0aXRpb24vc3FsLyN7MH0jJy5mb3JtYXQo bWFuYWdlci52ZXJzaW9uKQorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKAorICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZV9wYXRoLCAnYmFja2VuZF9zdXBwb3J0LnNx bCddKSwgdGlkPWt3YXJnc1sndGlkJ10pCisgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IGNvbm4u ZXhlY3V0ZV9zY2FsYXIoU1FMKQorCisgICAgICAgICAgICAjIGNoZWNrIGlmIGFueSBlcnJvcnMK KyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVy bmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgICAgIHJldHVybiByZXMK KworICAgIGRlZiByZWdpc3RlcihzZWxmLCBhcHAsIG9wdGlvbnMsIGZpcnN0X3JlZ2lzdHJhdGlv bj1GYWxzZSk6CisgICAgICAgICIiIgorICAgICAgICBPdmVycmlkZSB0aGUgZGVmYXVsdCByZWdp c3RlciBmdW5jdGlvbiB0byBhdXRvbWF0aWNhbGx5IHJlZ2lzdGVyCisgICAgICAgIHN1Yi1tb2R1 bGVzIG9mIHRhYmxlIG5vZGUgdW5kZXIgcGFydGl0aW9uIHRhYmxlIG5vZGUuCisgICAgICAgICIi IgorCisgICAgICAgIGlmIGZpcnN0X3JlZ2lzdHJhdGlvbjoKKyAgICAgICAgICAgIHNlbGYuc3Vi bW9kdWxlcyA9IGxpc3QoYXBwLmZpbmRfc3VibW9kdWxlcyhzZWxmLmltcG9ydF9uYW1lKSkKKwor ICAgICAgICBzdXBlcihDb2xsZWN0aW9uTm9kZU1vZHVsZSwgc2VsZikucmVnaXN0ZXIoYXBwLCBv cHRpb25zLCBmaXJzdF9yZWdpc3RyYXRpb24pCisKKyAgICAgICAgZm9yIG1vZHVsZSBpbiBzZWxm LnN1Ym1vZHVsZXM6CisgICAgICAgICAgICBpZiBmaXJzdF9yZWdpc3RyYXRpb246CisgICAgICAg ICAgICAgICAgbW9kdWxlLnBhcmVudG1vZHVsZXMuYXBwZW5kKHNlbGYpCisgICAgICAgICAgICBh cHAucmVnaXN0ZXJfYmx1ZXByaW50KG1vZHVsZSkKKworICAgICAgICAjIE5vdyBhZGQgc3ViIG1v ZHVsZXMgb2YgdGFibGUgbm9kZSB0byBwYXJ0aXRpb24gdGFibGUgbm9kZS4KKyAgICAgICAgaWYg Zmlyc3RfcmVnaXN0cmF0aW9uOgorICAgICAgICAgICAgIyBFeGNsdWRlICdwYXJ0aXRpb24nIG1v ZHVsZSBmb3Igbm93IHRvIGF2b2lkIGN5Y2xpYyBpbXBvcnQgaXNzdWUuCisgICAgICAgICAgICBt b2R1bGVzX3RvX3NraXAgPSBbJ3BhcnRpdGlvbicsICdjb2x1bW4nXQorICAgICAgICAgICAgZm9y IHBhcmVudCBpbiBzZWxmLnBhcmVudG1vZHVsZXM6CisgICAgICAgICAgICAgICAgaWYgcGFyZW50 Lk5PREVfVFlQRSA9PSAndGFibGUnOgorICAgICAgICAgICAgICAgICAgICBzZWxmLnN1Ym1vZHVs ZXMgKz0gWworICAgICAgICAgICAgICAgICAgICAgICAgc3VibW9kdWxlIGZvciBzdWJtb2R1bGUg aW4gcGFyZW50LnN1Ym1vZHVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHN1Ym1vZHVs ZS5OT0RFX1RZUEUgbm90IGluIG1vZHVsZXNfdG9fc2tpcAorICAgICAgICAgICAgICAgICAgICBd CisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgbW9kdWxlX3VzZV90ZW1wbGF0ZV9qYXZhc2NyaXB0 KHNlbGYpOgorICAgICAgICAiIiIKKyAgICAgICAgUmV0dXJucyB3aGV0aGVyIEppbmphMiB0ZW1w bGF0ZSBpcyB1c2VkIGZvciBnZW5lcmF0aW5nIHRoZSBqYXZhc2NyaXB0CisgICAgICAgIG1vZHVs ZS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2JsdWVwcmludCA9IFBh cnRpdGlvbnNNb2R1bGUoX19uYW1lX18pCisKKworY2xhc3MgUGFydGl0aW9uc1ZpZXcoQmFzZVRh YmxlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKKyAgICAiIiIKKyAgICBU aGlzIGNsYXNzIGlzIHJlc3BvbnNpYmxlIGZvciBnZW5lcmF0aW5nIHJvdXRlcyBmb3IgUGFydGl0 aW9uIG5vZGUKKworICAgIE1ldGhvZHM6CisgICAgLS0tLS0tLQorCisgICAgKiBsaXN0KCkKKyAg ICAgIC0gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGxpc3QgYWxsIHRoZSBQYXJ0aXRpb24gbm9k ZXMgd2l0aGluIHRoYXQKKyAgICAgIGNvbGxlY3Rpb24uCisKKyAgICAqIG5vZGVzKCkKKyAgICAg IC0gVGhpcyBmdW5jdGlvbiB3aWxsIHVzZWQgdG8gY3JlYXRlIGFsbCB0aGUgY2hpbGQgbm9kZSB3 aXRoaW4gdGhhdAorICAgICAgICBjb2xsZWN0aW9uLCBIZXJlIGl0IHdpbGwgY3JlYXRlIGFsbCB0 aGUgUGFydGl0aW9uIG5vZGUuCisKKyAgICAqIHByb3BlcnRpZXMoZ2lkLCBzaWQsIGRpZCwgc2Np ZCwgdGlkLCBwdGlkKQorICAgICAgLSBUaGlzIGZ1bmN0aW9uIHdpbGwgc2hvdyB0aGUgcHJvcGVy dGllcyBvZiB0aGUgc2VsZWN0ZWQgUGFydGl0aW9uIG5vZGUKKworICAgICIiIgorCisgICAgbm9k ZV90eXBlID0gYmx1ZXByaW50Lm5vZGVfdHlwZQorCisgICAgcGFyZW50X2lkcyA9IFsKKyAgICAg ICAgeyd0eXBlJzogJ2ludCcsICdpZCc6ICdnaWQnfSwKKyAgICAgICAgeyd0eXBlJzogJ2ludCcs ICdpZCc6ICdzaWQnfSwKKyAgICAgICAgeyd0eXBlJzogJ2ludCcsICdpZCc6ICdkaWQnfSwKKyAg ICAgICAgeyd0eXBlJzogJ2ludCcsICdpZCc6ICdzY2lkJ30sCisgICAgICAgIHsndHlwZSc6ICdp bnQnLCAnaWQnOiAndGlkJ30KKyAgICBdCisgICAgaWRzID0gWworICAgICAgICB7J3R5cGUnOiAn aW50JywgJ2lkJzogJ3B0aWQnfQorICAgIF0KKworICAgIG9wZXJhdGlvbnMgPSBkaWN0KHsKKyAg ICAgICAgJ29iaic6IFsKKyAgICAgICAgICAgIHsnZ2V0JzogJ3Byb3BlcnRpZXMnLCAnZGVsZXRl JzogJ2RlbGV0ZScsICdwdXQnOiAndXBkYXRlJ30sCisgICAgICAgICAgICB7J2dldCc6ICdsaXN0 JywgJ3Bvc3QnOiAnY3JlYXRlJ30KKyAgICAgICAgXSwKKyAgICAgICAgJ25vZGVzJzogW3snZ2V0 JzogJ25vZGVzJ30sIHsnZ2V0JzogJ25vZGVzJ31dLAorICAgICAgICAnY2hpbGRyZW4nOiBbeydn ZXQnOiAnY2hpbGRyZW4nfV0sCisgICAgICAgICdzcWwnOiBbeydnZXQnOiAnc3FsJ31dLAorICAg ICAgICAnbXNxbCc6IFt7J2dldCc6ICdtc3FsJ30sIHt9XSwKKyAgICAgICAgJ2RldGFjaCc6IFt7 J3B1dCc6ICdkZXRhY2gnfV0sCisgICAgICAgICd0cnVuY2F0ZSc6IFt7J3B1dCc6ICd0cnVuY2F0 ZSd9XQorCisgICAgfSkKKworICAgIGRlZiBjaGlsZHJlbihzZWxmLCAqKmt3YXJncyk6CisgICAg ICAgICIiIkJ1aWxkIGEgbGlzdCBvZiB0cmVldmlldyBub2RlcyBmcm9tIHRoZSBjaGlsZCBub2Rl cy4iIiIKKworICAgICAgICBpZiAnc2lkJyBub3QgaW4ga3dhcmdzOgorICAgICAgICAgICAgcmV0 dXJuIHByZWNvbmRpdGlvbl9yZXF1aXJlZCgKKyAgICAgICAgICAgICAgICBnZXR0ZXh0KCdSZXF1 aXJlZCBwcm9wZXJ0aWVzIGFyZSBtaXNzaW5nLicpCisgICAgICAgICAgICApCisKKyAgICAgICAg ZnJvbSBwZ2FkbWluLnV0aWxzLmRyaXZlciBpbXBvcnQgZ2V0X2RyaXZlcgorICAgICAgICBtYW5h Z2VyID0gZ2V0X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikuY29ubmVjdGlvbl9tYW5hZ2VyKAor ICAgICAgICAgICAgc2lkPWt3YXJnc1snc2lkJ10KKyAgICAgICAgKQorCisgICAgICAgIGRpZCA9 IE5vbmUKKyAgICAgICAgaWYgJ2RpZCcgaW4ga3dhcmdzOgorICAgICAgICAgICAgZGlkID0ga3dh cmdzWydkaWQnXQorCisgICAgICAgIGNvbm4gPSBtYW5hZ2VyLmNvbm5lY3Rpb24oZGlkPWRpZCkK KworICAgICAgICBpZiBub3QgY29ubi5jb25uZWN0ZWQoKToKKyAgICAgICAgICAgIHJldHVybiBw cmVjb25kaXRpb25fcmVxdWlyZWQoCisgICAgICAgICAgICAgICAgZ2V0dGV4dCgKKyAgICAgICAg ICAgICAgICAgICAgIkNvbm5lY3Rpb24gdG8gdGhlIHNlcnZlciBoYXMgYmVlbiBsb3N0LiIKKyAg ICAgICAgICAgICAgICApCisgICAgICAgICAgICApCisKKyAgICAgICAgbm9kZXMgPSBbXQorICAg ICAgICBmb3IgbW9kdWxlIGluIHNlbGYuYmx1ZXByaW50LnN1Ym1vZHVsZXM6CisgICAgICAgICAg ICBpZiBpc2luc3RhbmNlKG1vZHVsZSwgUEdDaGlsZE1vZHVsZSk6CisgICAgICAgICAgICAgICAg aWYgbWFuYWdlciBpcyBub3QgTm9uZSBhbmQgXAorICAgICAgICAgICAgICAgICAgICAgICAgbW9k dWxlLkJhY2tlbmRTdXBwb3J0ZWQobWFuYWdlciwgKiprd2FyZ3MpOgorICAgICAgICAgICAgICAg ICAgICAjIHRyZWF0IHBhcnRpdGlvbiB0YWJsZSBhcyBub3JtYWwgdGFibGUuCisgICAgICAgICAg ICAgICAgICAgICMgcmVwbGFjZSB0aWQgd2l0aCBwdGlkIGFuZCBwb3AgcHRpZCBmcm9tIGt3YXJn cworICAgICAgICAgICAgICAgICAgICBpZiAncHRpZCcgaW4ga3dhcmdzOgorICAgICAgICAgICAg ICAgICAgICAgICAgcHRpZCA9IGt3YXJncy5wb3AoJ3B0aWQnKQorICAgICAgICAgICAgICAgICAg ICAgICAga3dhcmdzWyd0aWQnXSA9IHB0aWQKKyAgICAgICAgICAgICAgICAgICAgbm9kZXMuZXh0 ZW5kKG1vZHVsZS5nZXRfbm9kZXMoKiprd2FyZ3MpKQorICAgICAgICAgICAgZWxzZToKKyAgICAg ICAgICAgICAgICBub2Rlcy5leHRlbmQobW9kdWxlLmdldF9ub2RlcygqKmt3YXJncykpCisKKyAg ICAgICAgIyBFeHBsaWNpdGx5IGluY2x1ZGUgJ3BhcnRpdGlvbicgbW9kdWxlIGFzIHdlIGhhZCBl eGNsdWRlZCBpdCBkdXJpbmcKKyAgICAgICAgIyByZWdpc3RyYXRpb24uCisgICAgICAgIG5vZGVz LmV4dGVuZChzZWxmLmJsdWVwcmludC5nZXRfbm9kZXMoKiprd2FyZ3MpKQorCisgICAgICAgICMg UmV0dXJuIHNvcnRlZCBub2RlcyBiYXNlZCBvbiBsYWJlbAorICAgICAgICByZXR1cm4gbWFrZV9q c29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgZGF0YT1zb3J0ZWQoCisgICAgICAgICAgICAgICAg bm9kZXMsIGtleT1sYW1iZGEgYzogY1snbGFiZWwnXQorICAgICAgICAgICAgKQorICAgICAgICAp CisKKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KKyAgICBkZWYgbGlzdChz ZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhp cyBmdW5jdGlvbiBpcyB1c2VkIHRvIGxpc3QgYWxsIHRoZSB0YWJsZSBub2RlcyB3aXRoaW4gdGhh dAorICAgICAgICBjb2xsZWN0aW9uLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBnaWQ6 IFNlcnZlciBncm91cCBJRAorICAgICAgICAgICAgc2lkOiBTZXJ2ZXIgSUQKKyAgICAgICAgICAg IGRpZDogRGF0YWJhc2UgSUQKKyAgICAgICAgICAgIHNjaWQ6IFNjaGVtYSBJRAorICAgICAgICAg ICAgdGlkOiBUYWJsZSBJRAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBKU09OIG9m IGF2YWlsYWJsZSB0YWJsZSBub2RlcworICAgICAgICAiIiIKKyAgICAgICAgU1FMID0gcmVuZGVy X3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnBhcnRpdGlvbl90ZW1wbGF0ZV9wYXRoLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0 c3lzb2lkKQorICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FM KQorCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxf c2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKyAgICAgICAgcmV0dXJuIGFqYXhfcmVzcG9uc2Uo CisgICAgICAgICAgICByZXNwb25zZT1yZXNbJ3Jvd3MnXSwKKyAgICAgICAgICAgIHN0YXR1cz0y MDAKKyAgICAgICAgKQorCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCisg ICAgZGVmIG5vZGVzKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCwgcHRpZD1Ob25lKToK KyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBsaXN0IGFsbCB0 aGUgdGFibGUgbm9kZXMgd2l0aGluIHRoYXQKKyAgICAgICAgY29sbGVjdGlvbi4KKworICAgICAg ICBBcmdzOgorICAgICAgICAgICAgZ2lkOiBTZXJ2ZXIgZ3JvdXAgSUQKKyAgICAgICAgICAgIHNp ZDogU2VydmVyIElECisgICAgICAgICAgICBkaWQ6IERhdGFiYXNlIElECisgICAgICAgICAgICBz Y2lkOiBTY2hlbWEgSUQKKyAgICAgICAgICAgIHRpZDogUGFyZW50IFRhYmxlIElECisgICAgICAg ICAgICBwdGlkOiBQYXJ0aXRpb24gVGFibGUgSUQKKworICAgICAgICBSZXR1cm5zOgorICAgICAg ICAgICAgSlNPTiBvZiBhdmFpbGFibGUgdGFibGUgbm9kZXMKKyAgICAgICAgIiIiCisgICAgICAg IFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5w YXJ0aXRpb25fdGVtcGxhdGVfcGF0aCwgJ25vZGVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICBz Y2lkPXNjaWQsIHRpZD10aWQKKyAgICAgICAgICAgICAgICApCisgICAgICAgIHN0YXR1cywgcnNl dCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQorICAgICAgICBpZiBub3Qgc3RhdHVz OgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0 KQorCisgICAgICAgIGRlZiBicm93c2VyX25vZGUocm93KToKKyAgICAgICAgICAgIHJldHVybiBz ZWxmLmJsdWVwcmludC5nZW5lcmF0ZV9icm93c2VyX25vZGUoCisgICAgICAgICAgICAgICAgcm93 WydvaWQnXSwKKyAgICAgICAgICAgICAgICB0aWQsCisgICAgICAgICAgICAgICAgcm93WyduYW1l J10sCisgICAgICAgICAgICAgICAgaWNvbj0iaWNvbi1wYXJ0aXRpb24iLAorICAgICAgICAgICAg ICAgIHRpZ2dlcl9jb3VudD1yb3dbJ3RyaWdnZXJjb3VudCddLAorICAgICAgICAgICAgICAgIGhh c19lbmFibGVfdHJpZ2dlcnM9cm93WydoYXNfZW5hYmxlX3RyaWdnZXJzJ10sCisgICAgICAgICAg ICAgICAgaXNfcGFydGl0aW9uZWQ9cm93Wydpc19wYXJ0aXRpb25lZCddLAorICAgICAgICAgICAg ICAgIHBhcmVudF9zY2hlbWFfaWQ9c2NpZCwKKyAgICAgICAgICAgICAgICBzY2hlbWFfaWQ9cm93 WydzY2hlbWFfaWQnXSwKKyAgICAgICAgICAgICAgICBzY2hlbWFfbmFtZT1yb3dbJ3NjaGVtYV9u YW1lJ10KKyAgICAgICAgICAgICkKKworICAgICAgICBpZiBwdGlkIGlzIG5vdCBOb25lOgorICAg ICAgICAgICAgaWYgbGVuKHJzZXRbJ3Jvd3MnXSkgPT0gMDoKKyAgICAgICAgICAgICAgICByZXR1 cm4gZ29uZShnZXR0ZXh0KAorICAgICAgICAgICAgICAgICAgICAiVGhlIHNwZWNpZmllZCBwYXJ0 aXRpb25lZCB0YWJsZSBjb3VsZCBub3QgYmUgZm91bmQuIgorICAgICAgICAgICAgICAgICkpCisK KyAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICAgICAg ZGF0YT1icm93c2VyX25vZGUocnNldFsncm93cyddWzBdKSwgc3RhdHVzPTIwMAorICAgICAgICAg ICAgICAgICkKKworICAgICAgICByZXMgPSBbXQorICAgICAgICBmb3Igcm93IGluIHJzZXRbJ3Jv d3MnXToKKyAgICAgICAgICAgIHJlcy5hcHBlbmQoYnJvd3Nlcl9ub2RlKHJvdykpCisKKyAgICAg ICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAgICAgICAgIGRhdGE9cmVzLAorICAg ICAgICAgICAgc3RhdHVzPTIwMAorICAgICAgICApCisKKyAgICBAQmFzZVRhYmxlVmlldy5jaGVj a19wcmVjb25kaXRpb24KKyAgICBkZWYgcHJvcGVydGllcyhzZWxmLCBnaWQsIHNpZCwgZGlkLCBz Y2lkLCB0aWQsIHB0aWQpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxs IHNob3cgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdGVkIHRhYmxlIG5vZGUuCisKKyAgICAg ICAgQXJnczoKKyAgICAgICAgICAgIGdpZDogU2VydmVyIEdyb3VwIElECisgICAgICAgICAgICBz aWQ6IFNlcnZlciBJRAorICAgICAgICAgICAgZGlkOiAgRGF0YWJhc2UgSUQKKyAgICAgICAgICAg IHNjaWQ6IFNjaGVtYSBJRAorICAgICAgICAgICAgc2NpZDogU2NoZW1hIElECisgICAgICAgICAg ICB0aWQ6IFRhYmxlIElECisgICAgICAgICAgICBwdGlkOiBQYXJ0aXRpb24gVGFibGUgSUQKKwor ICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgSlNPTiBvZiBzZWxlY3RlZCB0YWJsZSBub2Rl CisgICAgICAgICIiIgorCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihb c2VsZi5wYXJ0aXRpb25fdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkaWQ9ZGlkLCBzY2lkPXNjaWQsIHRpZD10aWQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwdGlkPXB0aWQsIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkKQor ICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQorICAgICAg ICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgaWYgbGVuKHJlc1sncm93cyddKSA9PSAwOgorICAg ICAgICAgICAgICAgIHJldHVybiBnb25lKGdldHRleHQoCisgICAgICAgICAgICAgICAgICAgICJU aGUgc3BlY2lmaWVkIHBhcnRpdGlvbmVkIHRhYmxlIGNvdWxkIG5vdCBiZSBmb3VuZC4iKSkKKwor ICAgICAgICByZXR1cm4gc3VwZXIoUGFydGl0aW9uc1ZpZXcsIHNlbGYpLnByb3BlcnRpZXMoCisg ICAgICAgICAgICBnaWQsIHNpZCwgZGlkLCBzY2lkLCBwdGlkLCByZXMpCisKKyAgICBAQmFzZVRh YmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KKyAgICBkZWYgc3FsKHNlbGYsIGdpZCwgc2lkLCBk aWQsIHNjaWQsIHRpZCwgcHRpZCk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9u IHdpbGwgY3JlYXRlcyByZXZlcnNlIGVuZ2luZWVyZWQgc3FsIGZvcgorICAgICAgICB0aGUgdGFi bGUgb2JqZWN0CisKKyAgICAgICAgIEFyZ3M6CisgICAgICAgICAgIGdpZDogU2VydmVyIEdyb3Vw IElECisgICAgICAgICAgIHNpZDogU2VydmVyIElECisgICAgICAgICAgIGRpZDogRGF0YWJhc2Ug SUQKKyAgICAgICAgICAgc2NpZDogU2NoZW1hIElECisgICAgICAgICAgIHRpZDogVGFibGUgSUQK KyAgICAgICAgICAgcHRpZDogUGFydGl0aW9uIFRhYmxlIElECisgICAgICAgICIiIgorICAgICAg ICBtYWluX3NxbCA9IFtdCisKKyAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2lu KFtzZWxmLnBhcnRpdGlvbl90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHB0aWQ9cHRpZCwgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQp CisgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCisgICAg ICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXJlcykKKworICAgICAgICBpZiBsZW4ocmVzWydyb3dzJ10pID09IDA6Cisg ICAgICAgICAgICAgICAgcmV0dXJuIGdvbmUoZ2V0dGV4dCgKKyAgICAgICAgICAgICAgICAgICAg IlRoZSBzcGVjaWZpZWQgcGFydGl0aW9uZWQgdGFibGUgY291bGQgbm90IGJlIGZvdW5kLiIpKQor CisgICAgICAgIGRhdGEgPSByZXNbJ3Jvd3MnXVswXQorCisgICAgICAgIHJldHVybiBCYXNlVGFi bGVWaWV3LmdldF9yZXZlcnNlX2VuZ2luZWVyZWRfc3FsKHNlbGYsIGRpZCwgc2NpZCwgcHRpZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bWFpbl9zcWwsIGRhdGEpCisKKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24K KyAgICBkZWYgZGV0YWNoKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCwgcHRpZCk6Cisg ICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVzZXQgc3RhdGlzdGljcyBv ZiB0YWJsZQorCisgICAgICAgICBBcmdzOgorICAgICAgICAgICBnaWQ6IFNlcnZlciBHcm91cCBJ RAorICAgICAgICAgICBzaWQ6IFNlcnZlciBJRAorICAgICAgICAgICBkaWQ6IERhdGFiYXNlIElE CisgICAgICAgICAgIHNjaWQ6IFNjaGVtYSBJRAorICAgICAgICAgICB0aWQ6IFRhYmxlIElECisg ICAgICAgICAgIHB0aWQ6IFBhcnRpdGlvbiBUYWJsZSBJRAorICAgICAgICAiIiIKKyAgICAgICAg IyBGZXRjaCBzY2hlbWEgbmFtZQorICAgICAgICBzdGF0dXMsIHBhcmVudF9zY2hlbWEgPSBzZWxm LmNvbm4uZXhlY3V0ZV9zY2FsYXIoCisgICAgICAgICAgICByZW5kZXJfdGVtcGxhdGUoCisgICAg ICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ2dldF9zY2hl bWEuc3FsJ10pLAorICAgICAgICAgICAgICAgIGNvbm49c2VsZi5jb25uLCBzY2lkPXNjaWQKKyAg ICAgICAgICAgICkKKyAgICAgICAgKQorICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAg ICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1wYXJlbnRfc2NoZW1hKQor CisgICAgICAgICMgRmV0Y2ggUGFyZW50IFRhYmxlIG5hbWUKKyAgICAgICAgc3RhdHVzLCBwYXJ0 aXRpb25lZF90YWJsZV9uYW1lID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKAorICAgICAgICAg ICAgcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxl X3RlbXBsYXRlX3BhdGgsICdnZXRfdGFibGUuc3FsJ10pLAorICAgICAgICAgICAgICAgIGNvbm49 c2VsZi5jb25uLCBzY2lkPXNjaWQsIHRpZD10aWQKKyAgICAgICAgICAgICkKKyAgICAgICAgKQor ICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz1wYXJ0aXRpb25lZF90YWJsZV9uYW1lKQorCisgICAgICAgICMgR2V0 IHNjaGVtYSBvaWQgb2YgcGFydGl0aW9uCisgICAgICAgIHN0YXR1cywgcHNjaWQgPSBzZWxmLmNv bm4uZXhlY3V0ZV9zY2FsYXIoCisgICAgICAgICAgICByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4o W3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ2dldF9zY2hlbWFfb2lkLnNxbCddKSwgdGlkPXB0aWQpKQorICAgICAgICBpZiBu b3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJv cm1zZz1zY2lkKQorCisgICAgICAgICMgRmV0Y2ggc2NoZW1hIG5hbWUKKyAgICAgICAgc3RhdHVz LCBwYXJ0aXRpb25fc2NoZW1hID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKAorICAgICAgICAg ICAgcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfc2NoZW1hLnNxbCddKSwg Y29ubj1zZWxmLmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NpZD1wc2NpZCkK KyAgICAgICAgKQorICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGlu dGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1wYXJ0aXRpb25fc2NoZW1hKQorCisgICAgICAg ICMgRmV0Y2ggUGFydGl0aW9uIFRhYmxlIG5hbWUKKyAgICAgICAgc3RhdHVzLCBwYXJ0aXRpb25f bmFtZSA9IHNlbGYuY29ubi5leGVjdXRlX3NjYWxhcigKKyAgICAgICAgICAgIHJlbmRlcl90ZW1w bGF0ZSgKKyAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRo LCAnZ2V0X3RhYmxlLnNxbCddKSwKKyAgICAgICAgICAgICAgICBjb25uPXNlbGYuY29ubiwgc2Np ZD1wc2NpZCwgdGlkPXB0aWQKKyAgICAgICAgICAgICkKKyAgICAgICAgKQorICAgICAgICBpZiBu b3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJv cm1zZz1wYXJ0aXRpb25fbmFtZSkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICB0ZW1wX2Rh dGEgPSBkaWN0KCkKKyAgICAgICAgICAgIHRlbXBfZGF0YVsncGFyZW50X3NjaGVtYSddID0gcGFy ZW50X3NjaGVtYQorICAgICAgICAgICAgdGVtcF9kYXRhWydwYXJ0aXRpb25lZF90YWJsZV9uYW1l J10gPSBwYXJ0aXRpb25lZF90YWJsZV9uYW1lCisgICAgICAgICAgICB0ZW1wX2RhdGFbJ3NjaGVt YSddID0gcGFydGl0aW9uX3NjaGVtYQorICAgICAgICAgICAgdGVtcF9kYXRhWyduYW1lJ10gPSBw YXJ0aXRpb25fbmFtZQorCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpv aW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYucGFydGl0aW9uX3RlbXBsYXRl X3BhdGgsICdkZXRhY2guc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9 dGVtcF9kYXRhLCBjb25uPXNlbGYuY29ubikKKworICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBz ZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoU1FMKQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoK KyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJl cykKKworICAgICAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAgICAgICAg ICAgICBzdWNjZXNzPTEsCisgICAgICAgICAgICAgICAgaW5mbz1nZXR0ZXh0KCJQYXJ0aXRpb24g ZGV0YWNoZWQuIiksCisgICAgICAgICAgICAgICAgZGF0YT17CisgICAgICAgICAgICAgICAgICAg ICdpZCc6IHB0aWQsCisgICAgICAgICAgICAgICAgICAgICdzY2lkJzogc2NpZAorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgor ICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1zdHIoZSkp CisKKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KKyAgICBkZWYgbXNxbChz ZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQsIHB0aWQ9Tm9uZSk6CisgICAgICAgICIiIgor ICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlIG1vZGlmaWVkIHNxbCBmb3IgdGFibGUg b2JqZWN0CisKKyAgICAgICAgIEFyZ3M6CisgICAgICAgICAgIGdpZDogU2VydmVyIEdyb3VwIElE CisgICAgICAgICAgIHNpZDogU2VydmVyIElECisgICAgICAgICAgIGRpZDogRGF0YWJhc2UgSUQK KyAgICAgICAgICAgc2NpZDogU2NoZW1hIElECisgICAgICAgICAgIHRpZDogVGFibGUgSUQKKyAg ICAgICAgIiIiCisgICAgICAgIGRhdGEgPSBkaWN0KCkKKyAgICAgICAgZm9yIGssIHYgaW4gcmVx dWVzdC5hcmdzLml0ZW1zKCk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgZGF0 YVtrXSA9IGpzb24ubG9hZHModiwgZW5jb2Rpbmc9J3V0Zi04JykKKyAgICAgICAgICAgIGV4Y2Vw dCAoVmFsdWVFcnJvciwgVHlwZUVycm9yLCBLZXlFcnJvcik6CisgICAgICAgICAgICAgICAgZGF0 YVtrXSA9IHYKKworICAgICAgICBpZiBwdGlkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgU1FM ID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnBhcnRpdGlvbl90ZW1wbGF0ZV9wYXRo LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGll cy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRpZCwgc2Np ZD1zY2lkLCB0aWQ9dGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aWQ9 cHRpZCwgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCisgICAgICAgICAgICBzdGF0 dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQorICAgICAgICAgICAgaWYgbm90 IHN0YXR1czoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVy cm9ybXNnPXJlcykKKworICAgICAgICBTUUwsIG5hbWUgPSBzZWxmLmdldF9zcWwoZGlkLCBzY2lk LCBwdGlkLCBkYXRhLCByZXMpCisgICAgICAgIFNRTCA9IHJlLnN1YignXG57Mix9JywgJ1xuXG4n LCBTUUwpCisgICAgICAgIFNRTCA9IFNRTC5zdHJpcCgnXG4nKQorICAgICAgICBpZiBTUUwgPT0g Jyc6CisgICAgICAgICAgICBTUUwgPSAiLS1tb2RpZmllZCBTUUwiCisgICAgICAgIHJldHVybiBt YWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICBkYXRhPVNRTCwKKyAgICAgICAgICAgIHN0 YXR1cz0yMDAKKyAgICAgICAgKQorCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0 aW9uCisgICAgZGVmIHVwZGF0ZShzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQsIHB0aWQp OgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHVwZGF0ZSBhbiBleGlz dGluZyB0YWJsZSBvYmplY3QKKworICAgICAgICAgQXJnczoKKyAgICAgICAgICAgZ2lkOiBTZXJ2 ZXIgR3JvdXAgSUQKKyAgICAgICAgICAgc2lkOiBTZXJ2ZXIgSUQKKyAgICAgICAgICAgZGlkOiBE YXRhYmFzZSBJRAorICAgICAgICAgICBzY2lkOiBTY2hlbWEgSUQKKyAgICAgICAgICAgdGlkOiBU YWJsZSBJRAorICAgICAgICAgICBwdGlkOiBQYXJ0aXRpb24gVGFibGUgSUQKKyAgICAgICAgIiIi CisgICAgICAgIGRhdGEgPSByZXF1ZXN0LmZvcm0gaWYgcmVxdWVzdC5mb3JtIGVsc2UganNvbi5s b2FkcygKKyAgICAgICAgICAgIHJlcXVlc3QuZGF0YSwgZW5jb2Rpbmc9J3V0Zi04JworICAgICAg ICApCisKKyAgICAgICAgZm9yIGssIHYgaW4gZGF0YS5pdGVtcygpOgorICAgICAgICAgICAgdHJ5 OgorICAgICAgICAgICAgICAgIGRhdGFba10gPSBqc29uLmxvYWRzKHYsIGVuY29kaW5nPSd1dGYt OCcpCisgICAgICAgICAgICBleGNlcHQgKFZhbHVlRXJyb3IsIFR5cGVFcnJvciwgS2V5RXJyb3Ip OgorICAgICAgICAgICAgICAgIGRhdGFba10gPSB2CisKKyAgICAgICAgdHJ5OgorICAgICAgICAg ICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnBhcnRpdGlvbl90ZW1wbGF0 ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJv cGVydGllcy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRp ZCwgc2NpZD1zY2lkLCB0aWQ9dGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHB0aWQ9cHRpZCwgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCisgICAgICAgICAg ICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQorICAgICAgICAgICAg aWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXJlcykKKworICAgICAgICAgICAgcmV0dXJuIHN1cGVyKFBhcnRpdGlvbnNW aWV3LCBzZWxmKS51cGRhdGUoCisgICAgICAgICAgICAgICAgZ2lkLCBzaWQsIGRpZCwgc2NpZCwg cHRpZCwgZGF0YSwgcmVzLCBwYXJlbnRfaWQ9dGlkKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9u IGFzIGU6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXN0cihlKSkKKworICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgorICAgIGRl ZiB0cnVuY2F0ZShzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQsIHB0aWQpOgorICAgICAg ICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHRydW5jYXRlIHRoZSB0YWJsZSBvYmpl Y3QKKworICAgICAgICAgQXJnczoKKyAgICAgICAgICAgZ2lkOiBTZXJ2ZXIgR3JvdXAgSUQKKyAg ICAgICAgICAgc2lkOiBTZXJ2ZXIgSUQKKyAgICAgICAgICAgZGlkOiBEYXRhYmFzZSBJRAorICAg ICAgICAgICBzY2lkOiBTY2hlbWEgSUQKKyAgICAgICAgICAgdGlkOiBUYWJsZSBJRAorICAgICAg ICAiIiIKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUo Ii8iLmpvaW4oW3NlbGYucGFydGl0aW9uX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkaWQ9ZGlkLCBzY2lkPXNjaWQsIHRpZD10aWQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRpZD1wdGlkLCBkYXRsYXN0c3lzb2lk PXNlbGYuZGF0bGFzdHN5c29pZCkKKyAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25u LmV4ZWN1dGVfZGljdChTUUwpCisgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorCisgICAg ICAgICAgICByZXR1cm4gc3VwZXIoUGFydGl0aW9uc1ZpZXcsIHNlbGYpLnRydW5jYXRlKGdpZCwg c2lkLCBkaWQsIHNjaWQsIHB0aWQsIHJlcykKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFz IGU6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0 cihlKSkKKworCitQYXJ0aXRpb25zVmlldy5yZWdpc3Rlcl9ub2RlX3ZpZXcoYmx1ZXByaW50KQpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvdGFibGVzL3BhcnRpdGlvbnMvc3RhdGljL2ltZy9jb2xsLXBhcnRpdGlv bi5wbmcgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFz ZXMvc2NoZW1hcy90YWJsZXMvcGFydGl0aW9ucy9zdGF0aWMvaW1nL2NvbGwtcGFydGl0aW9uLnBu ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi44NTM2YzY2YWZiMTA5OWUxODk4ZjNjNjE2M2E3MDllM2U1Mzc1NTY0CkdJ VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxNDMzCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeMHdC ITYxfDtQX3w0IyVga3xuTVlDQmdZPUNGT31sc1NKKU9gQU1rPwp6cDFGelhzWD9pVURWMnBNUSo5 VSttQDZfdkIxJDVCZVhOcjZiTStFSVlWO357M3hLKkE3O05rLTNLRW1FUSVlKyoKelFxd2NAWT9h PmMtbWojUG5QUklIWnQ4MmBUaX4zVWs/QiFZbHAwKis3bXszK29vdHorV04pV25RKCotKEFVQ3hu CnpRSzJGP0MkSEc1IWQzfXZ0YCgzQzY0cUJ6MDRwaVV3cEReU0QjQUJGITh5TXVSbCF1eE9nR3Vr KmgwYkZRcVIhVAp6KCEkNkBONVJPeiZgalVKUXMyLS0qVEIlcXp8elhWUHlxXipmVkxILXEqKD5J eEl5ZyNAQCRuZE49Z2M+XiEzWmoKeiVrfDJRXzQxMy1eJGpnOEUlZ25JXm9AKmtmaHUmMUVBdlZj RHxHWFVtMD4yaHEhdVJeV2ZxaVY9STFHWk9pV0Q1CnpGRDxjRTA9Zzk5aDE+I1BVJTBffSNuNkJQ MkFPX0VWdThNKW9gSFVERjM0WUMpeHstMnNSKENhUmIzb1hTJip0OQp6bHY8byRUOWdjb2syR2JO Vz88T2l3K04mVj1vJX5rcUQpfDxCPDhyfUN6c30/PTlQSDUqZVVeS15pbmNZdGtUUloKejV7Km9h bDVgRD9PYnZCU09jTzExbFlsX2lKa2BYKUZ2WSttKWcmbm1XKTMjfUUqNmReUE50NGRDTjdSSGhL OD1ACnpQSHZ7b0YzeUhWbVg1fSpaak1ke0Z1azY2I1UrVigkKkN+QUdsNnpQXipaOSFZdm8qJm5w bCF3NnEyOHgxNHsofgp6OFRscG8jVG9lcDNlTGA7U1R8U0RASiZxNCVtV0UoZis3bXlaPG99ZiUo QiFKeDEjKTkxI24xUFdueXVLc2ZEU2oKek1UJWlFKDk2a2J4K2FPcTJEK0IhQ2FKb3s3RCsmPFJM Y318bFZsflJ7dUZYVVAjQD9oZU5ie2lOPEpfbFY0NEltCno7aDYhKmZvR0BHSllYSXcwJW4lcUQt UzYlRmZlWlNiYTQhK3hIVl9lZEY+V1FpUjFmPy0keThWMjZjQm87dWtwVwp6PStSWUdLN0ctZ3ps P2woZTRGYWw9RSVxX25LTVZtTU5gdjB0TjdORjF1OHw4cEQ2S2RkN0dNaFpRdFhXbUV7e0gKemp+ TSVZdTNoJUxAfHAyQHAzaU9IJU9ee1VgQipuaFFKOEVaKGFSdEVaZXNRSztEMiF2Sn1hS01kfWxr clpUUVFnCnpgez0zNjFDdTBiMUZHZ15hWkdWI1p+QWQ4O15MNztwSWZzWFVRNFo+VyY2WEpIQHdt SzxBJDsjNlZHYnQhQDlmYAp6ZH5YITRQUU0pT0BwRjVyJnBsQ3p0Nk9KaFomfmNldyl9SGNfKVYq ZVl0bnZnSGhDVSNAUFQjanFIYEF1VEdiUnsKelB0OyMxbjBqa2wlP3E8NUYzRSk9KWpFNSU7PEYj VlRQPE4yUmBCV0AyamgmNDlqWENZT0FXOzV2biohdkkpQXpECnoqMjJlNlJEVEBtX0Z3aCMrZlZK QHlIOHZqQ3BXJFFlQ1U0NitnRVMpYnFRKXxucTY4dip+aTRrPmNOJk1CailiNQp6KXZeeyhVZTlu a2N6PEtEJTlwNygoeHIwVXVlPDNVY15rUFRue31iZmprY04zKHVNdUE3aml+alpSdmI9b3ZFXn4K enZDWCpjQG4tMlF6aEF2QClqOHN+PyF3S1d7eDdTV2A8NzxaRiQkbWNfeCpDQUp8U3E5cipAbENA JXBYMzNycE5zCnFnVG9gZyZBbkBXP2Y7U3xAMDMyTjliaG9aX195ckhrQUBBUCFxVV4jJnQ7dWNM SzZWTmNAcjRgCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1p bi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMv cGFydGl0aW9ucy9zdGF0aWMvaW1nL3BhcnRpdGlvbi5wbmcgYi93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcGFydGl0aW9u cy9zdGF0aWMvaW1nL3BhcnRpdGlvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQ2ZGQ4YjM1YWQyZGExYzE1 MGRjZmU1YmU4ODYxYzczY2VmNzJlNgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTI2NAp6Y21l QVNATj8ob2xIeWB1VkJxIWlhMHZwXjB3QiE2MXw7UF98NCMlYGt8bk1ZQ0JnWT1DRk99bHNTSilP YEFNaz8KenAxRnpYc1g/aVVEVjJwTVEqOVUrbV5DcyhCMSQ1QmVYTnI2Yk0rRUlZVjt+ezN4SypB NztOay0zS0VtRVElZSsqCnpRcXdjQFk/YT5jLW1qI1BuUFJJSFp0ODJgVGl+M1VrP0IhWWxwMCor N217Mytvb3R6K1dOKVduUSgqLShBVUN4bgp6UUsyRj9DJEhHNSFkM312dGAoM0M2NHFCejA0cGlV d3BEXlNEI0FCRiE4eU11UmwhdXhPZ0d1aypoMGJGUXFSIVQKeighJDZATjVST3omYGpVSlFzMi0t KlRCJXF6fHpYVlB5cV4qZlZMSC1xKig+SXhJeWcjQEAkbmROPWdjPl4hM1pqCnola3wyUV80MTMt XiRqZzhFJWduSV5vQCprZmh1JjFFQXZWY0R8R1hVbTA+MmhxIXVSXldmcWlWPUkxR1pPaVdENQp6 RkQ8Y0UwPWc5OWgxPiRUdjNiU05VOytsMWVubnp8ek0tQjAkVilKVnpQfFhDPUh8ang3bmNPM0JI V0FCO05wPFYKemY+aXlXKVorWm9xR1Z2aXI3NDR+RHpJYGNOPSs9dUZBQi1lJncrKHZLdF9IXmVz TTtBZnI3SSREQWRkcUc8Kn0yCnpHeEk9I25xWGJOekUrLWojVStWKCQqRzwkd257KkFeZkVKM3RT c0ZPLUhlPmZFbG4ocTRHaiVsJWBJS2JvdCNYYQp6T3grQlBVN1hDIysrY2NMQHs+eipRfWFxLWRR JVgzOWRZVWZDNVlTdHB2XjkrTVZWIShEUS1waXhlOCM5VFY+KlEKemkjYm03cG42a3F5VHQ7aFVW V2ZyXmcrPiE2eH1jKFU+WDgzO2ZXVz5maFlnZUpZYnFIMHcoU14zb35qTTcjUU9gCnpUXnZJeVpt a0tuXj4jS0N1e0hOeHtYJjdPPjRET1ZNX083SThjSERvUnpJMmxhTypXKTs4VktOZkFDPWFMO2Vr MQp6Y1NXcHJ1M1d1KF41cEotVFRpTWNlYjNeNGJTZUdOVVh8eH1pemlqVD8+O200LXJjJiZtMVdF VkJBRmhhUEhEYmEKejtUWSszPXZQSUl0OXxVWFchK0VDcFc7bjgpXlU3LVVaMzUkTGVweGRoXztf U1coVHJrcm10OCRCa09IPXRjXyV3Cno8RnlvfkV1RVhyZXA5UEd2d3JJMUtFcGtzQXt7WjM+K2lx KmMrOUEkXm9uM2EtMVd7eSFhNk83Vzw5QHB5anRzbgp6MiMzZ3lqUXd1NU5BS09MUUlaellkSGU3 c3VsNEZ+ayp5cn0od1F2ZEJJQkV1WERvPV83WEtoQUZoKnhPbzVaVDwKelJucVUpUno+KSZSfXtA X0RFMWU9K1ZZJlUmbn17UW5WMyszP3ZlbGZCM1ZhKzNNVCVvKnp0UkhAOWc/NWgxRHkxCnpxcHo/ MTUtKnllZUNnb2c9bDwpb1ooZSpJdjU5Rz5XcmolPXhBeGF7e1B5UX11OXYoMnJsNTd7YD1YanBl fUJHLQpiWmVWMEVkQjYxNHMoalRwUCNOVXU+Z1RlfkRXTTRmMjJhSiUKCmxpdGVyYWwgMApIY21W P2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9z ZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9wYXJ0aXRpb25zL3N0YXRpYy9qcy9wYXJ0 aXRpb24uanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRh YmFzZXMvc2NoZW1hcy90YWJsZXMvcGFydGl0aW9ucy9zdGF0aWMvanMvcGFydGl0aW9uLmpzCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYWRiNWUKLS0tIC9kZXYvbnVsbAor KysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv c2NoZW1hcy90YWJsZXMvcGFydGl0aW9ucy9zdGF0aWMvanMvcGFydGl0aW9uLmpzCkBAIC0wLDAg KzEsMTI3NiBAQAorZGVmaW5lKFsKKyAgJ3NvdXJjZXMvZ2V0dGV4dCcsICdzb3VyY2VzL3VybF9m b3InLCAnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLAorICAndW5kZXJzY29yZS5zdHJpbmcnLCAncGdh ZG1pbicsICdwZ2FkbWluLmJyb3dzZXInLCAnYmFja2Zvcm0nLCAnYWxlcnRpZnknLAorICAncGdh ZG1pbi5icm93c2VyLmNvbGxlY3Rpb24nLCAncGdhZG1pbi5icm93c2VyLnRhYmxlLnBhcnRpdGlv bi51dGlscycKK10sCitmdW5jdGlvbihnZXR0ZXh0LCB1cmxfZm9yLCAkLCBfLCBTLCBwZ0FkbWlu LCBwZ0Jyb3dzZXIsIEJhY2tmb3JtLCBhbGVydGlmeSkgeworCisgIGlmICghcGdCcm93c2VyLk5v ZGVzWydjb2xsLXBhcnRpdGlvbiddKSB7CisgICAgdmFyIGRhdGFiYXNlcyA9IHBnQWRtaW4uQnJv d3Nlci5Ob2Rlc1snY29sbC1wYXJ0aXRpb24nXSA9CisgICAgICBwZ0FkbWluLkJyb3dzZXIuQ29s bGVjdGlvbi5leHRlbmQoeworICAgICAgICBub2RlOiAncGFydGl0aW9uJywKKyAgICAgICAgbGFi ZWw6IGdldHRleHQoJ1BhcnRpdGlvbnMnKSwKKyAgICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6 IHBnQnJvd3Nlci50YWJsZUNoaWxkVHJlZU5vZGVIaWVyYXJjaHksCisgICAgICAgIHR5cGU6ICdj b2xsLXBhcnRpdGlvbicsCisgICAgICAgIGNvbHVtbnM6IFsKKyAgICAgICAgICAnbmFtZScsICdz Y2hlbWEnLCAncGFydGl0aW9uX3ZhbHVlJywgJ2lzX3BhcnRpdGlvbmVkJywgJ2Rlc2NyaXB0aW9u JworICAgICAgICBdLAorICAgICAgICBoYXNTdGF0aXN0aWNzOiB0cnVlCisgICAgICB9KTsKKyAg fTsKKworICBpZiAoIXBnQnJvd3Nlci5Ob2Rlc1sncGFydGl0aW9uJ10pIHsKKyAgICBwZ0FkbWlu LkJyb3dzZXIuTm9kZXNbJ3BhcnRpdGlvbiddID0gcGdCcm93c2VyLk5vZGUuZXh0ZW5kKHsKKyAg ICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBwZ0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGll cmFyY2h5LAorICAgICAgcGFyZW50X3R5cGU6ICd0YWJsZScsCisgICAgICBjb2xsZWN0aW9uX3R5 cGU6ICdjb2xsLXBhcnRpdGlvbicsCisgICAgICB0eXBlOiAncGFydGl0aW9uJywKKyAgICAgIGxh YmVsOiBnZXR0ZXh0KCdQYXJ0aXRpb24nKSwKKyAgICAgIGhhc1NRTDogdHJ1ZSwKKyAgICAgIGhh c0RlcGVuZHM6IHRydWUsCisgICAgICBoYXNTdGF0aXN0aWNzOiB0cnVlLAorICAgICAgc3RhdHNQ cmV0dGlmeUZpZWxkczogWydTaXplJywgJ0luZGV4ZXMgc2l6ZScsICdUYWJsZSBzaXplJywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnVG9hc3QgdGFibGUgc2l6ZScsICdUdXBsZSBsZW5n dGgnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdEZWFkIHR1cGxlIGxlbmd0aCcsICdG cmVlIHNwYWNlJ10sCisgICAgICBzcWxBbHRlckhlbHA6ICdzcWwtYWx0ZXJ0YWJsZS5odG1sJywK KyAgICAgIHNxbENyZWF0ZUhlbHA6ICdzcWwtY3JlYXRldGFibGUuaHRtbCcsCisgICAgICBkaWFs b2dIZWxwOiB1cmxfZm9yKCdoZWxwLnN0YXRpYycsIHsnZmlsZW5hbWUnOiAndGFibGVfZGlhbG9n Lmh0bWwnfSksCisgICAgICBoYXNTY3JpcHRUeXBlczogWydjcmVhdGUnXSwKKyAgICAgIGhlaWdo dDogJzk1JScsCisgICAgICB3aWR0aDogJzg1JScsCisgICAgICBJbml0OiBmdW5jdGlvbigpIHsK KyAgICAgICAgLyogQXZvaWQgbXVsaXRwbGUgcmVnaXN0cmF0aW9uIG9mIG1lbnVzICovCisgICAg ICAgIGlmICh0aGlzLmluaXRpYWxpemVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg IHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgICAgIHBnQnJvd3Nlci5hZGRfbWVudXMo W3sKKyAgICAgICAgICBuYW1lOiAndHJ1bmNhdGVfdGFibGUnLCBub2RlOiAncGFydGl0aW9uJywg bW9kdWxlOiB0aGlzLAorICAgICAgICAgIGFwcGxpZXM6IFsnb2JqZWN0JywgJ2NvbnRleHQnXSwg Y2FsbGJhY2s6ICd0cnVuY2F0ZV90YWJsZScsCisgICAgICAgICAgY2F0ZWdvcnk6ICdUcnVuY2F0 ZScsIHByaW9yaXR5OiAzLCBsYWJlbDogZ2V0dGV4dCgnVHJ1bmNhdGUnKSwKKyAgICAgICAgICBp Y29uOiAnZmEgZmEtZXJhc2VyJywgZW5hYmxlIDogJ2NhbkNyZWF0ZScKKyAgICAgICAgfSx7Cisg ICAgICAgICAgbmFtZTogJ3RydW5jYXRlX3RhYmxlX2Nhc2NhZGUnLCBub2RlOiAncGFydGl0aW9u JywgbW9kdWxlOiB0aGlzLAorICAgICAgICAgIGFwcGxpZXM6IFsnb2JqZWN0JywgJ2NvbnRleHQn XSwgY2FsbGJhY2s6ICd0cnVuY2F0ZV90YWJsZV9jYXNjYWRlJywKKyAgICAgICAgICBjYXRlZ29y eTogJ1RydW5jYXRlJywgcHJpb3JpdHk6IDMsIGxhYmVsOiBnZXR0ZXh0KCdUcnVuY2F0ZSBDYXNj YWRlJyksCisgICAgICAgICAgaWNvbjogJ2ZhIGZhLWVyYXNlcicsIGVuYWJsZSA6ICdjYW5DcmVh dGUnCisgICAgICAgIH0seworICAgICAgICAgIC8vIFRvIGVuYWJsZS9kaXNhYmxlIGFsbCB0cmln Z2VycyBmb3IgdGhlIHRhYmxlCisgICAgICAgICAgbmFtZTogJ2VuYWJsZV9hbGxfdHJpZ2dlcnMn LCBub2RlOiAncGFydGl0aW9uJywgbW9kdWxlOiB0aGlzLAorICAgICAgICAgIGFwcGxpZXM6IFsn b2JqZWN0JywgJ2NvbnRleHQnXSwgY2FsbGJhY2s6ICdlbmFibGVfdHJpZ2dlcnNfb25fdGFibGUn LAorICAgICAgICAgIGNhdGVnb3J5OiAnVHJpZ2dlcihzKScsIHByaW9yaXR5OiA0LCBsYWJlbDog Z2V0dGV4dCgnRW5hYmxlIEFsbCcpLAorICAgICAgICAgIGljb246ICdmYSBmYS1jaGVjaycsIGVu YWJsZSA6ICdjYW5DcmVhdGVfd2l0aF90cmlnZ2VyX2VuYWJsZScKKyAgICAgICAgfSx7CisgICAg ICAgICAgbmFtZTogJ2Rpc2FibGVfYWxsX3RyaWdnZXJzJywgbm9kZTogJ3BhcnRpdGlvbicsIG1v ZHVsZTogdGhpcywKKyAgICAgICAgICBhcHBsaWVzOiBbJ29iamVjdCcsICdjb250ZXh0J10sIGNh bGxiYWNrOiAnZGlzYWJsZV90cmlnZ2Vyc19vbl90YWJsZScsCisgICAgICAgICAgY2F0ZWdvcnk6 ICdUcmlnZ2VyKHMpJywgcHJpb3JpdHk6IDQsIGxhYmVsOiBnZXR0ZXh0KCdEaXNhYmxlIEFsbCcp LAorICAgICAgICAgIGljb246ICdmYSBmYS10aW1lcycsIGVuYWJsZSA6ICdjYW5DcmVhdGVfd2l0 aF90cmlnZ2VyX2Rpc2FibGUnCisgICAgICAgIH0seworICAgICAgICAgIG5hbWU6ICdyZXNldF90 YWJsZV9zdGF0cycsIG5vZGU6ICdwYXJ0aXRpb24nLCBtb2R1bGU6IHRoaXMsCisgICAgICAgICAg YXBwbGllczogWydvYmplY3QnLCAnY29udGV4dCddLCBjYWxsYmFjazogJ3Jlc2V0X3RhYmxlX3N0 YXRzJywKKyAgICAgICAgICBjYXRlZ29yeTogJ1Jlc2V0JywgcHJpb3JpdHk6IDQsIGxhYmVsOiBn ZXR0ZXh0KCdSZXNldCBTdGF0aXN0aWNzJyksCisgICAgICAgICAgaWNvbjogJ2ZhIGZhLWJhci1j aGFydCcsIGVuYWJsZSA6ICdjYW5DcmVhdGUnCisgICAgICAgIH0seworICAgICAgICAgIG5hbWU6 ICdkZXRhY2hfcGFydGl0aW9uJywgbm9kZTogJ3BhcnRpdGlvbicsIG1vZHVsZTogdGhpcywKKyAg ICAgICAgICBhcHBsaWVzOiBbJ29iamVjdCcsICdjb250ZXh0J10sIGNhbGxiYWNrOiAnZGV0YWNo X3BhcnRpdGlvbicsCisgICAgICAgICAgcHJpb3JpdHk6IDIsIGxhYmVsOiBnZXR0ZXh0KCdEZXRh Y2ggUGFydGl0aW9uJyksCisgICAgICAgICAgaWNvbjogJ2ZhIGZhLXJlbW92ZScKKyAgICAgICAg fQorICAgICAgICBdKTsKKyAgICAgIH0sCisgICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogZnVu Y3Rpb24oaSkgeworICAgICAgICB2YXIgaWR4ID0gMCwKKyAgICAgICAgICAgIHJlcyA9IHt9LAor ICAgICAgICAgICAgdCA9IHBnQnJvd3Nlci50cmVlOworCisgICAgICAgIGRvIHsKKyAgICAgICAg ICBkID0gdC5pdGVtRGF0YShpKTsKKyAgICAgICAgICBpZiAoCisgICAgICAgICAgICBkLl90eXBl IGluIHBnQnJvd3Nlci5Ob2RlcyAmJiBwZ0Jyb3dzZXIuTm9kZXNbZC5fdHlwZV0uaGFzSWQKKyAg ICAgICAgICApIHsKKyAgICAgICAgICAgIGlmIChkLl90eXBlID09ICdwYXJ0aXRpb24nICYmICdw YXJ0aXRpb24nIGluIHJlcykgeworICAgICAgICAgICAgICBpZiAoISgndGFibGUnIGluIHJlcykp IHsKKyAgICAgICAgICAgICAgICByZXNbJ3RhYmxlJ10gPSBfLmV4dGVuZCh7fSwgZCwgeydwcmlv cml0eSc6IGlkeH0pOworICAgICAgICAgICAgICAgIGlkeCAtPSAxOworICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9IGVsc2UgaWYgKGQuX3R5cGUgPT0gJ3RhYmxlJykgeworICAgICAgICAg ICAgICBpZiAoISgndGFibGUnIGluIHJlcykpIHsKKyAgICAgICAgICAgICAgICByZXNbJ3RhYmxl J10gPSBfLmV4dGVuZCh7fSwgZCwgeydwcmlvcml0eSc6IGlkeH0pOworICAgICAgICAgICAgICAg IGlkeCAtPSAxOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICByZXNbZC5fdHlwZV0gPSBfLmV4dGVuZCh7fSwgZCwgeydwcmlvcml0eSc6IGlkeH0p OworICAgICAgICAgICAgICBpZHggLT0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9Cisg ICAgICAgICAgaSA9IHQuaGFzUGFyZW50KGkpID8gdC5wYXJlbnQoaSkgOiBudWxsOworICAgICAg ICB9IHdoaWxlIChpKTsKKworICAgICAgICByZXR1cm4gcmVzOworICAgICAgfSwKKyAgICAgIGdl bmVyYXRlX3VybDogZnVuY3Rpb24oaXRlbSwgdHlwZSwgZCwgd2l0aF9pZCwgaW5mbykgeworICAg ICAgICBpZiAoXy5pbmRleE9mKFsKKyAgICAgICAgICAgICdzdGF0cycsICdzdGF0aXN0aWNzJywg J2RlcGVuZGVuY3knLCAnZGVwZW5kZW50JywgJ3Jlc2V0JywKKyAgICAgICAgICAgICdnZXRfcmVs YXRpb25zJywgJ2dldF9vZnR5cGUnLCAnZ2V0X2F0dGFjaF90YWJsZXMnCisgICAgICAgICAgICBd LCB0eXBlKSA9PSAtMSkgeworICAgICAgICAgIHJldHVybiBwZ0Jyb3dzZXIuTm9kZS5nZW5lcmF0 ZV91cmwuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0 eXBlID09ICdzdGF0aXN0aWNzJykgeworICAgICAgICAgIHR5cGUgPSAnc3RhdHMnOworICAgICAg ICB9CisKKyAgICAgICAgaW5mbyA9IChfLmlzVW5kZWZpbmVkKGl0ZW0pIHx8IF8uaXNOdWxsKGl0 ZW0pKSA/CisgICAgICAgICAgaW5mbyB8fCB7fSA6IHRoaXMuZ2V0VHJlZU5vZGVIaWVyYXJjaHko aXRlbSk7CisKKyAgICAgICAgcmV0dXJuIFMoJ3RhYmxlLyVzLyVzLyVzLyVzLyVzLyVzJykuc3By aW50ZigKKyAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudCh0eXBlKSwgZW5jb2RlVVJJQ29t cG9uZW50KGluZm9bJ3NlcnZlci1ncm91cCddLl9pZCksCisgICAgICAgICAgICBlbmNvZGVVUklD b21wb25lbnQoaW5mb1snc2VydmVyJ10uX2lkKSwKKyAgICAgICAgICAgIGVuY29kZVVSSUNvbXBv bmVudChpbmZvWydkYXRhYmFzZSddLl9pZCksCisgICAgICAgICAgICBlbmNvZGVVUklDb21wb25l bnQoaW5mb1sncGFydGl0aW9uJ10uc2NoZW1hX2lkKSwKKyAgICAgICAgICAgIGVuY29kZVVSSUNv bXBvbmVudChpbmZvWydwYXJ0aXRpb24nXS5faWQpCisgICAgICAgICAgICApLnZhbHVlKCk7Cisg ICAgICB9LAorICAgICAgY2FuRHJvcDogcGdCcm93c2VyLk5vZGVzWydzY2hlbWEnXS5jYW5DaGls ZERyb3AsCisgICAgICBjYW5Ecm9wQ2FzY2FkZTogcGdCcm93c2VyLk5vZGVzWydzY2hlbWEnXS5j YW5DaGlsZERyb3AsCisgICAgICBjYWxsYmFja3M6IHsKKyAgICAgICAgLyogRW5hYmxlIHRyaWdn ZXIocykgb24gdGFibGUgKi8KKyAgICAgICAgZW5hYmxlX3RyaWdnZXJzX29uX3RhYmxlOiBmdW5j dGlvbihhcmdzKSB7CisgICAgICAgICAgICB2YXIgcGFyYW1zID0geydlbmFibGUnOiB0cnVlIH07 CisgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zZXRfdHJpZ2dlcnMuYXBwbHkodGhpcywgW2Fy Z3MsIHBhcmFtc10pOworICAgICAgICB9LAorICAgICAgICAvKiBEaXNhYmxlIHRyaWdnZXIocykg b24gdGFibGUgKi8KKyAgICAgICAgZGlzYWJsZV90cmlnZ2Vyc19vbl90YWJsZTogZnVuY3Rpb24o YXJncykgeworICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHsnZW5hYmxlJzogZmFsc2UgfTsKKyAg ICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnNldF90cmlnZ2Vycy5hcHBseSh0aGlzLCBbYXJncywg cGFyYW1zXSk7CisgICAgICAgIH0sCisgICAgICAgIHNldF90cmlnZ2VyczogZnVuY3Rpb24oYXJn cywgcGFyYW1zKSB7CisgICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHNlbmQgcmVxdWVz dCB0byBlbmFibGUgb3IKKyAgICAgICAgICAvLyBkaXNhYmxlIHRyaWdnZXJzIG9uIHRhYmxlIGxl dmVsCisgICAgICAgICAgdmFyIGlucHV0ID0gYXJncyB8fCB7fTsKKyAgICAgICAgICBvYmogPSB0 aGlzLAorICAgICAgICAgIHQgPSBwZ0Jyb3dzZXIudHJlZSwKKyAgICAgICAgICBpID0gaW5wdXQu aXRlbSB8fCB0LnNlbGVjdGVkKCksCisgICAgICAgICAgZCA9IGkgJiYgaS5sZW5ndGggPT0gMSA/ IHQuaXRlbURhdGEoaSkgOiB1bmRlZmluZWQ7CisgICAgICAgICAgaWYgKCFkKQorICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgIHVybDog b2JqLmdlbmVyYXRlX3VybChpLCAnc2V0X3RyaWdnZXInICwgZCwgdHJ1ZSksCisgICAgICAgICAg ICB0eXBlOidQVVQnLAorICAgICAgICAgICAgZGF0YTogcGFyYW1zLAorICAgICAgICAgICAgZGF0 YVR5cGU6ICJqc29uIiwKKyAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgeworICAg ICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MgPT0gMSkgeworICAgICAgICAgICAgICAgIGFsZXJ0 aWZ5LnN1Y2Nlc3MocmVzLmluZm8pOworICAgICAgICAgICAgICAgIHQudW5sb2FkKGkpOworICAg ICAgICAgICAgICAgIHQuc2V0SW5vZGUoaSk7CisgICAgICAgICAgICAgICAgdC5kZXNlbGVjdChp KTsKKyAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAg ICAgICAgdC5zZWxlY3QoaSk7CisgICAgICAgICAgICAgICAgfSwgMTApOworICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKHhociwgc3Rh dHVzLCBlcnJvcikgeworICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgIHZhciBl cnIgPSAkLnBhcnNlSlNPTih4aHIucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgICAgICBpZiAo ZXJyLnN1Y2Nlc3MgPT0gMCkgeworICAgICAgICAgICAgICAgICAgYWxlcnRpZnkuZXJyb3IoZXJy LmVycm9ybXNnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0gY2F0Y2ggKGUp IHt9CisgICAgICAgICAgICAgIHQudW5sb2FkKGkpOworICAgICAgICAgICAgfQorICAgICAgICAg IH0pOworICAgICAgICB9LAorICAgICAgICAvKiBUcnVuY2F0ZSB0YWJsZSAqLworICAgICAgICB0 cnVuY2F0ZV90YWJsZTogZnVuY3Rpb24oYXJncykgeworICAgICAgICAgICAgdmFyIHBhcmFtcyA9 IHsnY2FzY2FkZSc6IGZhbHNlIH07CisgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy50cnVuY2F0 ZS5hcHBseSh0aGlzLCBbYXJncywgcGFyYW1zXSk7CisgICAgICAgIH0sCisgICAgICAgIC8qIFRy dW5jYXRlIHRhYmxlIHdpdGggY2FzY2FkZSAqLworICAgICAgICB0cnVuY2F0ZV90YWJsZV9jYXNj YWRlOiBmdW5jdGlvbihhcmdzKSB7CisgICAgICAgICAgICB2YXIgcGFyYW1zID0geydjYXNjYWRl JzogdHJ1ZSB9OworICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MudHJ1bmNhdGUuYXBwbHkodGhp cywgW2FyZ3MsIHBhcmFtc10pOworICAgICAgICB9LAorICAgICAgICB0cnVuY2F0ZTogZnVuY3Rp b24oYXJncywgcGFyYW1zKSB7CisgICAgICAgICAgdmFyIGlucHV0ID0gYXJncyB8fCB7fTsKKyAg ICAgICAgICBvYmogPSB0aGlzLAorICAgICAgICAgIHQgPSBwZ0Jyb3dzZXIudHJlZSwKKyAgICAg ICAgICBpID0gaW5wdXQuaXRlbSB8fCB0LnNlbGVjdGVkKCksCisgICAgICAgICAgZCA9IGkgJiYg aS5sZW5ndGggPT0gMSA/IHQuaXRlbURhdGEoaSkgOiB1bmRlZmluZWQ7CisKKyAgICAgICAgICBp ZiAoIWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICBhbGVydGlmeS5j b25maXJtKAorICAgICAgICAgICAgZ2V0dGV4dCgnVHJ1bmNhdGUgVGFibGUnKSwKKyAgICAgICAg ICAgIFMoZ2V0dGV4dCgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHRydW5jYXRlIHRhYmxlICVz PycpKS5zcHJpbnRmKGQubGFiZWwpLnZhbHVlKCksCisgICAgICAgICAgICBmdW5jdGlvbiAoZSkg eworICAgICAgICAgICAgaWYgKGUpIHsKKyAgICAgICAgICAgICAgdmFyIGRhdGEgPSBkOworICAg ICAgICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAgICAgIHVybDogb2JqLmdlbmVyYXRlX3Vy bChpLCAndHJ1bmNhdGUnICwgZCwgdHJ1ZSksCisgICAgICAgICAgICAgICAgdHlwZTonUFVUJywK KyAgICAgICAgICAgICAgICBkYXRhOiBwYXJhbXMsCisgICAgICAgICAgICAgICAgZGF0YVR5cGU6 ICJqc29uIiwKKyAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAg ICAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcyA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAg IGFsZXJ0aWZ5LnN1Y2Nlc3MocmVzLmluZm8pOworICAgICAgICAgICAgICAgICAgICB0LnJlbW92 ZUljb24oaSk7CisgICAgICAgICAgICAgICAgICAgIGRhdGEuaWNvbiA9ICdpY29uLXRhYmxlJzsK KyAgICAgICAgICAgICAgICAgICAgdC5hZGRJY29uKGksIHtpY29uOiBkYXRhLmljb259KTsKKyAg ICAgICAgICAgICAgICAgICAgdC51bmxvYWQoaSk7CisgICAgICAgICAgICAgICAgICAgIHQuc2V0 SW5vZGUoaSk7CisgICAgICAgICAgICAgICAgICAgIHQuZGVzZWxlY3QoaSk7CisgICAgICAgICAg ICAgICAgICAgIC8vIEZldGNoIHVwZGF0ZWQgZGF0YSBmcm9tIHNlcnZlcgorICAgICAgICAgICAg ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICAgIHQu c2VsZWN0KGkpOworICAgICAgICAgICAgICAgICAgICB9LCAxMCk7CisgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24o eGhyLCBzdGF0dXMsIGVycm9yKSB7CisgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAg ICAgICAgICAgICB2YXIgZXJyID0gJC5wYXJzZUpTT04oeGhyLnJlc3BvbnNlVGV4dCk7CisgICAg ICAgICAgICAgICAgICAgIGlmIChlcnIuc3VjY2VzcyA9PSAwKSB7CisgICAgICAgICAgICAgICAg ICAgICAgYWxlcnRpZnkuZXJyb3IoZXJyLmVycm9ybXNnKTsKKyAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge30KKyAgICAgICAgICAgICAgICAgIHQu dW5sb2FkKGkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSk7CisgICAgICAg ICAgICB9fSwKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkge30KKyAgICAgICAgICApOworICAgICAg ICB9LAorICAgICAgICByZXNldF90YWJsZV9zdGF0czogZnVuY3Rpb24oYXJncykgeworICAgICAg ICAgIHZhciBpbnB1dCA9IGFyZ3MgfHwge30sCisgICAgICAgICAgICBvYmogPSB0aGlzLAorICAg ICAgICAgICAgdCA9IHBnQnJvd3Nlci50cmVlLAorICAgICAgICAgICAgaSA9IGlucHV0Lml0ZW0g fHwgdC5zZWxlY3RlZCgpLAorICAgICAgICAgICAgZCA9IGkgJiYgaS5sZW5ndGggPT0gMSA/IHQu aXRlbURhdGEoaSkgOiB1bmRlZmluZWQ7CisKKyAgICAgICAgICBpZiAoIWQpCisgICAgICAgICAg ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICBhbGVydGlmeS5jb25maXJtKAorICAgICAgICAg ICAgZ2V0dGV4dCgnUmVzZXQgc3RhdGlzdGljcycpLAorICAgICAgICAgICAgUyhnZXR0ZXh0KCdB cmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVzZXQgdGhlIHN0YXRpc3RpY3MgZm9yIHRhYmxlICVz PycpKS5zcHJpbnRmKGQuX2xhYmVsKS52YWx1ZSgpLAorICAgICAgICAgICAgZnVuY3Rpb24gKGUp IHsKKyAgICAgICAgICAgICAgaWYgKGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGQ7 CisgICAgICAgICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgICAgICAgIHVybDogb2JqLmdl bmVyYXRlX3VybChpLCAncmVzZXQnICwgZCwgdHJ1ZSksCisgICAgICAgICAgICAgICAgICB0eXBl OidERUxFVEUnLAorICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKSB7Cisg ICAgICAgICAgICAgICAgICAgIGlmIChyZXMuc3VjY2VzcyA9PSAxKSB7CisgICAgICAgICAgICAg ICAgICAgICAgYWxlcnRpZnkuc3VjY2VzcyhyZXMuaW5mbyk7CisgICAgICAgICAgICAgICAgICAg ICAgdC5yZW1vdmVJY29uKGkpOworICAgICAgICAgICAgICAgICAgICAgIGRhdGEuaWNvbiA9ICdp Y29uLXRhYmxlJzsKKyAgICAgICAgICAgICAgICAgICAgICB0LmFkZEljb24oaSwge2ljb246IGRh dGEuaWNvbn0pOworICAgICAgICAgICAgICAgICAgICAgIHQudW5sb2FkKGkpOworICAgICAgICAg ICAgICAgICAgICAgIHQuc2V0SW5vZGUoaSk7CisgICAgICAgICAgICAgICAgICAgICAgdC5kZXNl bGVjdChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAvLyBGZXRjaCB1cGRhdGVkIGRhdGEgZnJv bSBzZXJ2ZXIKKyAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewor ICAgICAgICAgICAgICAgICAgICAgICAgdC5zZWxlY3QoaSk7CisgICAgICAgICAgICAgICAgICAg ICAgfSwgMTApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9LAor ICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKHhociwgc3RhdHVzLCBlcnJvcikgewor ICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIg PSAkLnBhcnNlSlNPTih4aHIucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICBp ZiAoZXJyLnN1Y2Nlc3MgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnRpZnku ZXJyb3IoZXJyLmVycm9ybXNnKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CisgICAgICAgICAgICAgICAgICAgIHQudW5sb2FkKGkp OworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZnVuY3Rpb24oKSB7fQorICAgICAgICAg ICk7CisgICAgICAgIH0sCisgICAgICAgIGRldGFjaF9wYXJ0aXRpb246IGZ1bmN0aW9uKGFyZ3Mp IHsKKyAgICAgICAgICB2YXIgaW5wdXQgPSBhcmdzIHx8IHt9LAorICAgICAgICAgICAgb2JqID0g dGhpcywKKyAgICAgICAgICAgIHQgPSBwZ0Jyb3dzZXIudHJlZSwKKyAgICAgICAgICAgIGkgPSBp bnB1dC5pdGVtIHx8IHQuc2VsZWN0ZWQoKSwKKyAgICAgICAgICAgIGQgPSBpICYmIGkubGVuZ3Ro ID09IDEgPyB0Lml0ZW1EYXRhKGkpIDogdW5kZWZpbmVkOworCisgICAgICAgICAgaWYgKCFkKQor ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgYWxlcnRpZnkuY29uZmlybSgK KyAgICAgICAgICAgIGdldHRleHQoJ0RldGFjaCBQYXJ0aXRpb24nKSwKKyAgICAgICAgICAgIFMo Z2V0dGV4dCgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRldGFjaCB0aGUgcGFydGl0aW9uICVz PycpKS5zcHJpbnRmKGQuX2xhYmVsKS52YWx1ZSgpLAorICAgICAgICAgICAgZnVuY3Rpb24gKGUp IHsKKyAgICAgICAgICAgICAgaWYgKGUpIHsKKyAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IGQ7 CisgICAgICAgICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgICAgICAgIHVybDogb2JqLmdl bmVyYXRlX3VybChpLCAnZGV0YWNoJyAsIGQsIHRydWUpLAorICAgICAgICAgICAgICAgICAgdHlw ZTonUFVUJywKKyAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgeworICAg ICAgICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MgPT0gMSkgeworICAgICAgICAgICAgICAg ICAgICAgIGFsZXJ0aWZ5LnN1Y2Nlc3MocmVzLmluZm8pOworICAgICAgICAgICAgICAgICAgICAg IHZhciBuID0gdC5uZXh0KGkpOworICAgICAgICAgICAgICAgICAgICAgIGlmICghbiB8fCAhbi5s ZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSB0LnByZXYoaSk7CisgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoIW4gfHwgIW4ubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIG4gPSB0LnBhcmVudChpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdC5z ZXRJbm9kZShuLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgdC5yZW1vdmUoaSk7CisgICAgICAg ICAgICAgICAgICAgICAgaWYgKG4ubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0 LnNlbGVjdChuKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rp b24oeGhyLCBzdGF0dXMsIGVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAg ICAgICAgICAgICAgICAgICAgdmFyIGVyciA9ICQucGFyc2VKU09OKHhoci5yZXNwb25zZVRleHQp OworICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIuc3VjY2VzcyA9PSAwKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBhbGVydGlmeS5lcnJvcihlcnIuZXJyb3Jtc2cpOworICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge30KKyAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfSwKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkge30KKyAgICAgICAgICApOworICAg ICAgIH0KKyAgICAgIH0sCisgICAgICBtb2RlbDogcGdCcm93c2VyLk5vZGUuTW9kZWwuZXh0ZW5k KHsKKyAgICAgICAgZGVmYXVsdHM6IHsKKyAgICAgICAgICBuYW1lOiB1bmRlZmluZWQsCisgICAg ICAgICAgb2lkOiB1bmRlZmluZWQsCisgICAgICAgICAgc3Bjb2lkOiB1bmRlZmluZWQsCisgICAg ICAgICAgc3BjbmFtZTogdW5kZWZpbmVkLAorICAgICAgICAgIHJlbG93bmVyOiB1bmRlZmluZWQs CisgICAgICAgICAgcmVsYWNsOiB1bmRlZmluZWQsCisgICAgICAgICAgcmVsaGFzb2lkczogdW5k ZWZpbmVkLAorICAgICAgICAgIHJlbGhhc3N1YmNsYXNzOiB1bmRlZmluZWQsCisgICAgICAgICAg cmVsdHVwbGVzOiB1bmRlZmluZWQsCisgICAgICAgICAgZGVzY3JpcHRpb246IHVuZGVmaW5lZCwK KyAgICAgICAgICBjb25uYW1lOiB1bmRlZmluZWQsCisgICAgICAgICAgY29ua2V5OiB1bmRlZmlu ZWQsCisgICAgICAgICAgaXNyZXBsOiB1bmRlZmluZWQsCisgICAgICAgICAgdHJpZ2dlcmNvdW50 OiB1bmRlZmluZWQsCisgICAgICAgICAgcmVscGVyc2lzdGVuY2U6IHVuZGVmaW5lZCwKKyAgICAg ICAgICBmaWxsZmFjdG9yOiB1bmRlZmluZWQsCisgICAgICAgICAgcmVsb2Z0eXBlOiB1bmRlZmlu ZWQsCisgICAgICAgICAgdHlwbmFtZTogdW5kZWZpbmVkLAorICAgICAgICAgIGxhYmVsczogdW5k ZWZpbmVkLAorICAgICAgICAgIHByb3ZpZGVyczogdW5kZWZpbmVkLAorICAgICAgICAgIGlzX3N5 c190YWJsZTogdW5kZWZpbmVkLAorICAgICAgICAgIGNvbGxfaW5oZXJpdHM6IFtdLAorICAgICAg ICAgIGhhc3RvYXN0dGFibGU6IHRydWUsCisgICAgICAgICAgdG9hc3RfYXV0b3ZhY3V1bV9lbmFi bGVkOiBmYWxzZSwKKyAgICAgICAgICBhdXRvdmFjdXVtX2VuYWJsZWQ6IGZhbHNlLAorICAgICAg ICAgIHByaW1hcnlfa2V5OiBbXSwKKyAgICAgICAgICBwYXJ0aXRpb25zOiBbXSwKKyAgICAgICAg ICBwYXJ0aXRpb25fdHlwZTogJ3JhbmdlJywKKyAgICAgICAgICBpc19wYXJ0aXRpb25lZDogZmFs c2UsCisgICAgICAgICAgcGFydGl0aW9uX3ZhbHVlOiB1bmRlZmluZWQKKyAgICAgICAgfSwKKyAg ICAgICAgLy8gRGVmYXVsdCB2YWx1ZXMhCisgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGF0 dHJzLCBhcmdzKSB7CisgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAgICAgaWYg KF8uc2l6ZShhdHRycykgPT09IDApIHsKKyAgICAgICAgICAgIHZhciB1c2VySW5mbyA9IHBnQnJv d3Nlci5zZXJ2ZXJJbmZvW2FyZ3Mubm9kZV9pbmZvLnNlcnZlci5faWRdLnVzZXIsCisgICAgICAg ICAgICAgICAgc2NoZW1hSW5mbyA9IGFyZ3Mubm9kZV9pbmZvLnNjaGVtYTsKKworICAgICAgICAg ICAgdGhpcy5zZXQoeworICAgICAgICAgICAgICAncmVsb3duZXInOiB1c2VySW5mby5uYW1lLCAn c2NoZW1hJzogc2NoZW1hSW5mby5fbGFiZWwKKyAgICAgICAgICAgIH0sIHtzaWxlbnQ6IHRydWV9 KTsKKyAgICAgICAgICB9CisgICAgICAgICAgcGdCcm93c2VyLk5vZGUuTW9kZWwucHJvdG90eXBl LmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAgICAgICB9LAorICAgICAg ICBzY2hlbWE6IFt7CisgICAgICAgICAgaWQ6ICduYW1lJywgbGFiZWw6IGdldHRleHQoJ05hbWUn KSwgdHlwZTogJ3RleHQnLAorICAgICAgICAgIG1vZGU6IFsncHJvcGVydGllcycsICdjcmVhdGUn LCAnZWRpdCddLCBkaXNhYmxlZDogJ2luU2NoZW1hJworICAgICAgICB9LHsKKyAgICAgICAgICBp ZDogJ29pZCcsIGxhYmVsOiBnZXR0ZXh0KCdPSUQnKSwgdHlwZTogJ3RleHQnLCBtb2RlOiBbJ3By b3BlcnRpZXMnXQorICAgICAgICB9LHsKKyAgICAgICAgICBpZDogJ3JlbG93bmVyJywgbGFiZWw6 IGdldHRleHQoJ093bmVyJyksIHR5cGU6ICd0ZXh0Jywgbm9kZTogJ3JvbGUnLAorICAgICAgICAg IG1vZGU6IFsncHJvcGVydGllcycsICdjcmVhdGUnLCAnZWRpdCddLCBzZWxlY3QyOiB7YWxsb3dD bGVhcjogZmFsc2V9LAorICAgICAgICAgIGRpc2FibGVkOiAnaW5TY2hlbWEnLCBjb250cm9sOiAn bm9kZS1saXN0LWJ5LW5hbWUnCisgICAgICAgIH0seworICAgICAgICAgIGlkOiAnc2NoZW1hJywg bGFiZWw6IGdldHRleHQoJ1NjaGVtYScpLCB0eXBlOiAndGV4dCcsIG5vZGU6ICdzY2hlbWEnLAor ICAgICAgICAgIGNvbnRyb2w6ICdub2RlLWxpc3QtYnktbmFtZScsIG1vZGU6IFsnY3JlYXRlJywg J2VkaXQnLCAncHJvcGVydGllcyddLAorICAgICAgICAgIGRpc2FibGVkOiAnaW5TY2hlbWEnLCBm aWx0ZXI6IGZ1bmN0aW9uKGQpIHsKKyAgICAgICAgICAgIC8vIElmIHNjaGVtYSBuYW1lIHN0YXJ0 IHdpdGggcGdfKiB0aGVuIHdlIG5lZWQgdG8gZXhjbHVkZSB0aGVtCisgICAgICAgICAgICBpZihk ICYmIGQubGFiZWwubWF0Y2goL15wZ18vKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg ICAgICAgICAgfSwgY2FjaGVfbm9kZTogJ2RhdGFiYXNlJywgY2FjaGVfbGV2ZWw6ICdkYXRhYmFz ZScKKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdzcGNuYW1lJywgbGFiZWw6IGdldHRleHQo J1RhYmxlc3BhY2UnKSwgbm9kZTogJ3RhYmxlc3BhY2UnLAorICAgICAgICAgIHR5cGU6ICd0ZXh0 JywgY29udHJvbDogJ25vZGUtbGlzdC1ieS1uYW1lJywgZGlzYWJsZWQ6ICdpblNjaGVtYScsCisg ICAgICAgICAgbW9kZTogWydwcm9wZXJ0aWVzJywgJ2NyZWF0ZScsICdlZGl0J10sCisgICAgICAg ICAgZmlsdGVyOiBmdW5jdGlvbihkKSB7CisgICAgICAgICAgICAvLyBJZiB0YWJsZXNwYWNlIG5h bWUgaXMgbm90ICJwZ19nbG9iYWwiIHRoZW4gd2UgbmVlZCB0byBleGNsdWRlIHRoZW0KKyAgICAg ICAgICAgIHJldHVybiAoIShkICYmIGQubGFiZWwubWF0Y2goL3BnX2dsb2JhbC8pKSkKKyAgICAg ICAgICB9CisgICAgICAgIH0seworICAgICAgICAgIGlkOiAncGFydGl0aW9uJywgdHlwZTogJ2dy b3VwJywgbGFiZWw6IGdldHRleHQoJ1BhcnRpdGlvbicpLAorICAgICAgICAgIG1vZGU6IFsnZWRp dCcsICdjcmVhdGUnXSwgbWluX3ZlcnNpb246IDEwMDAwMCwKKyAgICAgICAgICB2aXNpYmxlOiBm dW5jdGlvbihtKSB7CisgICAgICAgICAgICAvLyBBbHdheXMgc2hvdyBpbiBjYXNlIG9mIGNyZWF0 ZSBtb2RlCisgICAgICAgICAgICBpZiAobS5pc05ldygpIHx8IG0uZ2V0KCdpc19wYXJ0aXRpb25l ZCcpKQorICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz ZTsKKyAgICAgICAgICB9CisgICAgICAgIH0seworICAgICAgICAgIGlkOiAnaXNfcGFydGl0aW9u ZWQnLCBsYWJlbDpnZXR0ZXh0KCdQYXJ0aXRpb25lZCBUYWJsZT8nKSwgY2VsbDogJ3N3aXRjaCcs CisgICAgICAgICAgdHlwZTogJ3N3aXRjaCcsIG1vZGU6IFsncHJvcGVydGllcycsICdjcmVhdGUn LCAnZWRpdCddLAorICAgICAgICAgIHZpc2libGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAg IGlmKCFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvKSAmJiAhXy5pc1VuZGVmaW5lZChtLm5vZGVf aW5mby5zZXJ2ZXIpCisgICAgICAgICAgICAgICYmICFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZv LnNlcnZlci52ZXJzaW9uKSAmJgorICAgICAgICAgICAgICBtLm5vZGVfaW5mby5zZXJ2ZXIudmVy c2lvbiA+PSAxMDAwMDApCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAg ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfSwKKyAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rp b24obSkgeworICAgICAgICAgICAgaWYgKCFtLmlzTmV3KCkpCisgICAgICAgICAgICAgIHJldHVy biB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAg fSx7CisgICAgICAgICAgaWQ6ICdkZXNjcmlwdGlvbicsIGxhYmVsOiBnZXR0ZXh0KCdDb21tZW50 JyksIHR5cGU6ICdtdWx0aWxpbmUnLAorICAgICAgICAgIG1vZGU6IFsncHJvcGVydGllcycsICdj cmVhdGUnLCAnZWRpdCddLCBkaXNhYmxlZDogJ2luU2NoZW1hJworICAgICAgICB9LAorICAgICAg ICB7CisgICAgICAgICAgaWQ6ICdwYXJ0aXRpb25fdmFsdWUnLCBsYWJlbDpnZXR0ZXh0KCdQYXJ0 aXRpb24gU2NoZW1lJyksCisgICAgICAgICAgdHlwZTogJ3RleHQnLCB2aXNpYmxlOiBmYWxzZQor ICAgICAgICB9LHsKKyAgICAgICAgICBpZDogJ2NvbGxfaW5oZXJpdHMnLCBsYWJlbDogZ2V0dGV4 dCgnSW5oZXJpdGVkIGZyb20gdGFibGUocyknKSwKKyAgICAgICAgICB0eXBlOiAndGV4dCcsIGdy b3VwOiBnZXR0ZXh0KCdBZHZhbmNlZCcpLCBtb2RlOiBbJ3Byb3BlcnRpZXMnXQorICAgICAgICB9 LHsKKyAgICAgICAgICBpZDogJ0NvbHVtbnMnLCB0eXBlOiAnZ3JvdXAnLCBsYWJlbDogZ2V0dGV4 dCgnQ29sdW1ucycpLAorICAgICAgICAgIG1vZGU6IFsnZWRpdCcsICdjcmVhdGUnXSwgbWluX3Zl cnNpb246IDEwMDAwMCwKKyAgICAgICAgICB2aXNpYmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAg ICAgICAvLyBBbHdheXMgaGlkZSBpbiBjYXNlIG9mIHBhcnRpdGlvbiB0YWJsZS4KKyAgICAgICAg ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgIH0seworICAgICAgICAgIC8v IFRhYiBjb250cm9sIGZvciBjb2x1bW5zCisgICAgICAgICAgaWQ6ICdjb2x1bW5zJywgbGFiZWw6 IGdldHRleHQoJ0NvbHVtbnMnKSwgdHlwZTogJ2NvbGxlY3Rpb24nLAorICAgICAgICAgIGdyb3Vw OiBnZXR0ZXh0KCdDb2x1bW5zJyksCisgICAgICAgICAgbW9kZWw6IHBnQnJvd3Nlci5Ob2Rlc1sn Y29sdW1uJ10ubW9kZWwsCisgICAgICAgICAgc3Vibm9kZTogcGdCcm93c2VyLk5vZGVzWydjb2x1 bW4nXS5tb2RlbCwKKyAgICAgICAgICBtb2RlOiBbJ2NyZWF0ZScsICdlZGl0J10sCisgICAgICAg ICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgcGFy dGl0aW9uZWQgdGFibGUgcmVtb3ZlIGluaGVyaXRlZCBjb2x1bW5zCisgICAgICAgICAgICBpZiAo bS5pc05ldygpICYmIG0uZ2V0KCdpc19wYXJ0aXRpb25lZCcpKSB7CisgICAgICAgICAgICAgIHNl dFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbGwgPSBtLmdldCgn Y29sdW1ucycpOworICAgICAgICAgICAgICAgIGNvbGwucmVtb3ZlKGNvbGwuZmlsdGVyKGZ1bmN0 aW9uKG1vZGVsKSB7CisgICAgICAgICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChtb2RlbC5n ZXQoJ2luaGVyaXRlZGZyb20nKSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK KyAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pKTsKKyAg ICAgICAgICAgICAgfSwgMTApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZih0aGlz Lm5vZGVfaW5mbyAmJiAgJ2NhdGFsb2cnIGluIHRoaXMubm9kZV9pbmZvKQorICAgICAgICAgICAg eworICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9LAorICAgICAgICAgIGRlcHM6IFsndHlwbmFtZScs ICdpc19wYXJ0aXRpb25lZCddLAorICAgICAgICAgIGNhbkFkZDogJ2NoZWNrX2dyaWRfYWRkX2Nv bmRpdGlvbicsCisgICAgICAgICAgY2FuRWRpdDogdHJ1ZSwgY2FuRGVsZXRlOiB0cnVlLAorICAg ICAgICAgIC8vIEZvciBlYWNoIHJvdyBlZGl0L2RlbGV0ZSBidXR0b24gZW5hYmxlL2Rpc2FibGUK KyAgICAgICAgICBjYW5FZGl0Um93OiAnY2hlY2tfZ3JpZF9yb3dfZWRpdF9kZWxldGUnLAorICAg ICAgICAgIGNhbkRlbGV0ZVJvdzogJ2NoZWNrX2dyaWRfcm93X2VkaXRfZGVsZXRlJywKKyAgICAg ICAgICB1bmlxdWVDb2wgOiBbJ25hbWUnXSwKKyAgICAgICAgICBjb2x1bW5zIDogWyduYW1lJyAs ICdjbHR5cGUnLCAnYXR0bGVuJywgJ2F0dHByZWNpc2lvbicsICdhdHRub3RudWxsJywgJ2lzX3By aW1hcnlfa2V5J10sCisgICAgICAgICAgY29udHJvbDogQmFja2Zvcm0uVW5pcXVlQ29sQ29sbGVj dGlvbkNvbnRyb2wuZXh0ZW5kKHsKKyAgICAgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkg eworICAgICAgICAgICAgICBCYWNrZm9ybS5VbmlxdWVDb2xDb2xsZWN0aW9uQ29udHJvbC5wcm90 b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAgICAgICB2 YXIgc2VsZiA9IHRoaXMsCisgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uID0gc2VsZi5tb2Rl bC5nZXQoc2VsZi5maWVsZC5nZXQoJ25hbWUnKSk7CisKKyAgICAgICAgICAgICAgY29sbGVjdGlv bi5vbigiY2hhbmdlOmlzX3ByaW1hcnlfa2V5IiwgZnVuY3Rpb24obSkgeworICAgICAgICAgICAg ICAgIHZhciBwcmltYXJ5X2tleV9jb2xsID0gc2VsZi5tb2RlbC5nZXQoJ3ByaW1hcnlfa2V5Jyks CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbl9uYW1lID0gbS5nZXQoJ25hbWUnKSwKKyAgICAg ICAgICAgICAgICAgICAgcHJpbWFyeV9rZXk7CisKKyAgICAgICAgICAgICAgICBpZihtLmdldCgn aXNfcHJpbWFyeV9rZXknKSkgeworICAgICAgICAgICAgICAgIC8vIEFkZCBjb2x1bW4gdG8gcHJp bWFyeSBrZXkuCisgICAgICAgICAgICAgICAgICBpZiAocHJpbWFyeV9rZXlfY29sbC5sZW5ndGgg PCAxKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW1hcnlfa2V5ID0gbmV3IChwcmltYXJ5X2tl eV9jb2xsLm1vZGVsKSh7fSwgeworICAgICAgICAgICAgICAgICAgICAgIHRvcDogc2VsZi5tb2Rl bCwKKyAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBwcmltYXJ5X2tleV9jb2xsLAor ICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXI6IHByaW1hcnlfa2V5X2NvbGwKKyAgICAgICAg ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIHByaW1hcnlfa2V5X2NvbGwuYWRk KHByaW1hcnlfa2V5KTsKKyAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgICAgIHByaW1hcnlfa2V5ID0gcHJpbWFyeV9rZXlfY29sbC5maXJzdCgpOworICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IGFsdGVyIGV4aXN0aW5nIHBy aW1hcnkga2V5IGNvbHVtbnMuCisgICAgICAgICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChw cmltYXJ5X2tleS5nZXQoJ29pZCcpKSkgeworICAgICAgICAgICAgICAgICAgICB2YXIgcHJpbWFy eV9rZXlfY29sdW1uX2NvbGwgPSBwcmltYXJ5X2tleS5nZXQoJ2NvbHVtbnMnKSwKKyAgICAgICAg ICAgICAgICAgICAgICBwcmltYXJ5X2tleV9jb2x1bW5fZXhpc3QgPSBwcmltYXJ5X2tleV9jb2x1 bW5fY29sbC53aGVyZSh7Y29sdW1uOmNvbHVtbl9uYW1lfSk7CisKKyAgICAgICAgICAgICAgICAg ICAgaWYgKHByaW1hcnlfa2V5X2NvbHVtbl9leGlzdC5sZW5ndGggPT0gMCkgeworICAgICAgICAg ICAgICAgICAgICAgIHZhciBwcmltYXJ5X2tleV9jb2x1bW4gPSBuZXcgKHByaW1hcnlfa2V5X2Nv bHVtbl9jb2xsLm1vZGVsKSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAge2NvbHVtbjogY29s dW1uX25hbWV9LCB7IHNpbGVudDogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdG9w OiBzZWxmLm1vZGVsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBwcmlt YXJ5X2tleV9jb2xsLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyOiBwcmltYXJ5 X2tleV9jb2xsCisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg ICAgICAgIHByaW1hcnlfa2V5X2NvbHVtbl9jb2xsLmFkZChwcmltYXJ5X2tleV9jb2x1bW4pOwor ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXlf Y29sdW1uX2NvbGwudHJpZ2dlcigncGdhZG1pbjptdWx0aWNvbHVtbjp1cGRhdGVkJywgcHJpbWFy eV9rZXlfY29sdW1uX2NvbGwpOworICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyByZW1vdmUgY29sdW1uIGZyb20gcHJpbWFy eSBrZXkuCisgICAgICAgICAgICAgICAgICBpZiAocHJpbWFyeV9rZXlfY29sbC5sZW5ndGggPiAw KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBwcmltYXJ5X2tleSA9IHByaW1hcnlfa2V5X2Nv bGwuZmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgLy8gRG8gbm90IGFsdGVyIGV4aXN0aW5n IHByaW1hcnkga2V5IGNvbHVtbnMuCisgICAgICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVm aW5lZChwcmltYXJ5X2tleS5nZXQoJ29pZCcpKSkgeworICAgICAgICAgICAgICAgICAgICAgIHJl dHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIHZhciAg cHJpbWFyeV9rZXlfY29sdW1uX2NvbGwgPSBwcmltYXJ5X2tleS5nZXQoJ2NvbHVtbnMnKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRDb2xzID0gcHJpbWFyeV9rZXlfY29sdW1uX2Nv bGwud2hlcmUoe2NvbHVtbjpjb2x1bW5fbmFtZX0pOworICAgICAgICAgICAgICAgICAgICBpZiAo cmVtb3ZlZENvbHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgIHByaW1hcnlf a2V5X2NvbHVtbl9jb2xsLnJlbW92ZShyZW1vdmVkQ29scyk7CisgICAgICAgICAgICAgICAgICAg ICAgXy5lYWNoKHJlbW92ZWRDb2xzLCBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBtLmRlc3Ryb3koKTsKKyAgICAgICAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAg ICAgICAgICAgIGlmIChwcmltYXJ5X2tleV9jb2x1bW5fY29sbC5sZW5ndGggPT0gMCkgeworICAg ICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIFRoZXJlIHdpbGwgYmUgb25seSBvbiBwcmltYXJ5IGtleSBzbyBy ZW1vdmUgdGhlIGZpcnN0IG9uZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9r ZXlfY29sbC5yZW1vdmUocHJpbWFyeV9rZXlfY29sbC5maXJzdCgpKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgLyogSWRlYWxseSBhYm92ZSBsaW5lIG9mIGNvZGUgc2hvdWxkIGJlICJwcmlt YXJ5X2tleV9jb2xsLnJlc2V0KCkiLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBCdXQg b3VyIGN1c3RvbSBEYXRhQ29sbGVjdGlvbiAoZXh0ZW5kZWQgZnJvbSBCYWNrYm9uZSBjb2xsZWN0 aW9uIGluIGRhdGFtb2RlbC5qcykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICogZG9lcyBu b3QgcmVzcG9uZCB0byByZXNldCBldmVudCwgaXQgb25seSBzdXBwb3J0cyBhZGQsIHJlbW92ZSwg Y2hhbmdlIGV2ZW50cy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICogQW5kIGhlbmNlIG5v IGN1c3RvbSBldmVudCBsaXN0ZW5lcnMvdmFsaWRhdG9ycyBnZXQgY2FsbGVkIGZvciByZXNldCBl dmVudC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAg ICAgICB9LCAxMCk7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgIHByaW1hcnlfa2V5X2NvbHVtbl9jb2xsLnRyaWdnZXIo J3BnYWRtaW46bXVsdGljb2x1bW46dXBkYXRlZCcsIHByaW1hcnlfa2V5X2NvbHVtbl9jb2xsKTsK KyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0p CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsKKyAgICAg ICAgICAgICAgdmFyIGNvbGxlY3Rpb24gPSB0aGlzLm1vZGVsLmdldCh0aGlzLmZpZWxkLmdldCgn bmFtZScpKTsKKyAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24pIHsKKyAgICAgICAgICAgICAg ICBjb2xsZWN0aW9uLm9mZigiY2hhbmdlOmlzX3ByaW1hcnlfa2V5Iik7CisgICAgICAgICAgICAg IH0KKworICAgICAgICAgICAgICBCYWNrZm9ybS5VbmlxdWVDb2xDb2xsZWN0aW9uQ29udHJvbC5w cm90b3R5cGUucmVtb3ZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgfSksCisgICAgICAgICAgYWxsb3dNdWx0aXBsZUVtcHR5Um93OiBmYWxzZQorICAg ICAgICB9LHsKKyAgICAgICAgICBpZDogJ2luaGVyaXRlZF90YWJsZXNfY250JywgbGFiZWw6IGdl dHRleHQoJ0luaGVyaXRlZCB0YWJsZXMgY291bnQnKSwKKyAgICAgICAgICB0eXBlOiAndGV4dCcs IG1vZGU6IFsncHJvcGVydGllcyddLCBncm91cDogZ2V0dGV4dCgnQWR2YW5jZWQnKSwKKyAgICAg ICAgICBkaXNhYmxlZDogJ2luU2NoZW1hJworICAgICAgICB9LHsKKyAgICAgICAgICAvLyBIZXJl IHdlIHdpbGwgY3JlYXRlIHRhYiBjb250cm9sIGZvciBjb25zdHJhaW50cworICAgICAgICAgIHR5 cGU6ICduZXN0ZWQnLCBjb250cm9sOiAndGFiJywgZ3JvdXA6IGdldHRleHQoJ0NvbnN0cmFpbnRz JyksCisgICAgICAgICAgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLAorICAgICAgICAgIHNjaGVt YTogW3sKKyAgICAgICAgICAgICAgaWQ6ICdwcmltYXJ5X2tleScsIGxhYmVsOiBnZXR0ZXh0KCdQ cmltYXJ5IGtleScpLAorICAgICAgICAgICAgICBtb2RlbDogcGdCcm93c2VyLk5vZGVzWydwcmlt YXJ5X2tleSddLm1vZGVsLAorICAgICAgICAgICAgICBzdWJub2RlOiBwZ0Jyb3dzZXIuTm9kZXNb J3ByaW1hcnlfa2V5J10ubW9kZWwsCisgICAgICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSwgdHlw ZTogJ2NvbGxlY3Rpb24nLAorICAgICAgICAgICAgICBncm91cDogZ2V0dGV4dCgnUHJpbWFyeSBL ZXknKSwgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLAorICAgICAgICAgICAgICBjYW5FZGl0OiB0 cnVlLCBjYW5EZWxldGU6IHRydWUsIGRlcHM6Wydpc19wYXJ0aXRpb25lZCddLAorICAgICAgICAg ICAgICBjb250cm9sOiAndW5pcXVlLWNvbC1jb2xsZWN0aW9uJywKKyAgICAgICAgICAgICAgY29s dW1ucyA6IFsnbmFtZScsICdjb2x1bW5zJ10sCisgICAgICAgICAgICAgIGNhbkFkZDogZnVuY3Rp b24obSkgeworICAgICAgICAgICAgICAgIGlmIChtLmdldCgnaXNfcGFydGl0aW9uZWQnKSkgewor ICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg ICAgICAgdmFyIGNvbGwgPSBtLmdldCgncHJpbWFyeV9rZXknKTsKKyAgICAgICAgICAgICAgICAg ICAgY29sbC5yZW1vdmUoY29sbC5maWx0ZXIoZnVuY3Rpb24obW9kZWwpIHsKKyAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAg ICAgICAgICAgICAgfSwgMTApOworICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg ICAgICB9LAorICAgICAgICAgICAgICBjYW5BZGRSb3c6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAg ICAgICAgIC8vIFVzZXIgY2FuIG9ubHkgYWRkIG9uZSBwcmltYXJ5IGtleQorICAgICAgICAgICAg ICAgdmFyIGNvbHVtbnMgPSBtLmdldCgnY29sdW1ucycpOworCisgICAgICAgICAgICAgICByZXR1 cm4gKG0uZ2V0KCdwcmltYXJ5X2tleScpICYmCisgICAgICAgICAgICAgICAgICAgICAgICBtLmdl dCgncHJpbWFyeV9rZXknKS5sZW5ndGggPCAxICYmCisgICAgICAgICAgICAgICAgICAgICAgICBf LnNvbWUoY29sdW1ucy5wbHVjaygnbmFtZScpKSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0seworICAgICAgICAgICAgICBpZDogJ2ZvcmVpZ25fa2V5JywgbGFiZWw6IGdldHRleHQo J0ZvcmVpZ24ga2V5JyksCisgICAgICAgICAgICAgIG1vZGVsOiBwZ0Jyb3dzZXIuTm9kZXNbJ2Zv cmVpZ25fa2V5J10ubW9kZWwsCisgICAgICAgICAgICAgIHN1Ym5vZGU6IHBnQnJvd3Nlci5Ob2Rl c1snZm9yZWlnbl9rZXknXS5tb2RlbCwKKyAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLCB0 eXBlOiAnY29sbGVjdGlvbicsCisgICAgICAgICAgICAgIGdyb3VwOiBnZXR0ZXh0KCdGb3JlaWdu IEtleScpLCBtb2RlOiBbJ2VkaXQnLCAnY3JlYXRlJ10sCisgICAgICAgICAgICAgIGNhbkVkaXQ6 IHRydWUsIGNhbkRlbGV0ZTogdHJ1ZSwgZGVwczpbJ2lzX3BhcnRpdGlvbmVkJ10sCisgICAgICAg ICAgICAgIGNvbnRyb2w6ICd1bmlxdWUtY29sLWNvbGxlY3Rpb24nLAorICAgICAgICAgICAgICBj YW5BZGQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgICAgICBpZiAobS5nZXQoJ2lzX3BhcnRp dGlvbmVkJykpIHsKKyAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Cisg ICAgICAgICAgICAgICAgICAgIHZhciBjb2xsID0gbS5nZXQoJ2ZvcmVpZ25fa2V5Jyk7CisgICAg ICAgICAgICAgICAgICAgIGNvbGwucmVtb3ZlKGNvbGwuZmlsdGVyKGZ1bmN0aW9uKG1vZGVsKSB7 CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAg IH0pKTsKKyAgICAgICAgICAgICAgICAgIH0sIDEwKTsKKyAgICAgICAgICAgICAgICAgIHJldHVy biBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1 ZTsKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgY29sdW1ucyA6IFsnbmFtZScsICdj b2x1bW5zJ10sCisgICAgICAgICAgICAgIGNhbkFkZFJvdzogZnVuY3Rpb24obSkgeworICAgICAg ICAgICAgICAgLy8gVXNlciBjYW4gb25seSBhZGQgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNv bHVtbiB3aXRoIG5hbWUuCisgICAgICAgICAgICAgICB2YXIgY29sdW1ucyA9IG0uZ2V0KCdjb2x1 bW5zJyk7CisgICAgICAgICAgICAgICByZXR1cm4gXy5zb21lKGNvbHVtbnMucGx1Y2soJ25hbWUn KSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0seworICAgICAgICAgICAgICBpZDog J2NoZWNrX2NvbnN0cmFpbnQnLCBsYWJlbDogZ2V0dGV4dCgnQ2hlY2sgY29uc3RyYWludCcpLAor ICAgICAgICAgICAgICBtb2RlbDogcGdCcm93c2VyLk5vZGVzWydjaGVja19jb25zdHJhaW50cydd Lm1vZGVsLAorICAgICAgICAgICAgICBzdWJub2RlOiBwZ0Jyb3dzZXIuTm9kZXNbJ2NoZWNrX2Nv bnN0cmFpbnRzJ10ubW9kZWwsCisgICAgICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSwgdHlwZTog J2NvbGxlY3Rpb24nLAorICAgICAgICAgICAgICBncm91cDogZ2V0dGV4dCgnQ2hlY2snKSwgbW9k ZTogWydlZGl0JywgJ2NyZWF0ZSddLAorICAgICAgICAgICAgICBjYW5FZGl0OiB0cnVlLCBjYW5E ZWxldGU6IHRydWUsIGRlcHM6Wydpc19wYXJ0aXRpb25lZCddLAorICAgICAgICAgICAgICBjb250 cm9sOiAndW5pcXVlLWNvbC1jb2xsZWN0aW9uJywKKyAgICAgICAgICAgICAgY2FuQWRkOiB0cnVl LAorICAgICAgICAgICAgICBjb2x1bW5zIDogWyduYW1lJywgJ2NvbnNyYyddCisgICAgICAgICAg ICB9LHsKKyAgICAgICAgICAgICAgaWQ6ICd1bmlxdWVfY29uc3RyYWludCcsIGxhYmVsOiBnZXR0 ZXh0KCdVbmlxdWUgQ29uc3RyYWludCcpLAorICAgICAgICAgICAgICBtb2RlbDogcGdCcm93c2Vy Lk5vZGVzWyd1bmlxdWVfY29uc3RyYWludCddLm1vZGVsLAorICAgICAgICAgICAgICBzdWJub2Rl OiBwZ0Jyb3dzZXIuTm9kZXNbJ3VuaXF1ZV9jb25zdHJhaW50J10ubW9kZWwsCisgICAgICAgICAg ICAgIGVkaXRhYmxlOiBmYWxzZSwgdHlwZTogJ2NvbGxlY3Rpb24nLAorICAgICAgICAgICAgICBn cm91cDogZ2V0dGV4dCgnVW5pcXVlJyksIG1vZGU6IFsnZWRpdCcsICdjcmVhdGUnXSwKKyAgICAg ICAgICAgICAgY2FuRWRpdDogdHJ1ZSwgY2FuRGVsZXRlOiB0cnVlLCBkZXBzOlsnaXNfcGFydGl0 aW9uZWQnXSwKKyAgICAgICAgICAgICAgY29udHJvbDogJ3VuaXF1ZS1jb2wtY29sbGVjdGlvbics CisgICAgICAgICAgICAgIGNvbHVtbnMgOiBbJ25hbWUnLCAnY29sdW1ucyddLAorICAgICAgICAg ICAgICBjYW5BZGQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgICAgICBpZiAobS5nZXQoJ2lz X3BhcnRpdGlvbmVkJykpIHsKKyAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjb2xsID0gbS5nZXQoJ3VuaXF1ZV9jb25zdHJh aW50Jyk7CisgICAgICAgICAgICAgICAgICAgIGNvbGwucmVtb3ZlKGNvbGwuZmlsdGVyKGZ1bmN0 aW9uKG1vZGVsKSB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg ICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICAgIH0sIDEwKTsKKyAgICAgICAgICAg ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgY2FuQWRkUm93 OiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICAgICAvLyBVc2VyIGNhbiBvbmx5IGFkZCBpZiB0 aGVyZSBpcyBhdCBsZWFzdCBvbmUgY29sdW1uIHdpdGggbmFtZS4KKyAgICAgICAgICAgICAgIHZh ciBjb2x1bW5zID0gbS5nZXQoJ2NvbHVtbnMnKTsKKyAgICAgICAgICAgICAgIHJldHVybiBfLnNv bWUoY29sdW1ucy5wbHVjaygnbmFtZScpKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fSx7CisgICAgICAgICAgICAgIGlkOiAnZXhjbHVkZV9jb25zdHJhaW50JywgbGFiZWw6IGdldHRl eHQoJ0V4Y2x1ZGUgY29uc3RyYWludCcpLAorICAgICAgICAgICAgICBtb2RlbDogcGdCcm93c2Vy Lk5vZGVzWydleGNsdXNpb25fY29uc3RyYWludCddLm1vZGVsLAorICAgICAgICAgICAgICBzdWJu b2RlOiBwZ0Jyb3dzZXIuTm9kZXNbJ2V4Y2x1c2lvbl9jb25zdHJhaW50J10ubW9kZWwsCisgICAg ICAgICAgICAgIGVkaXRhYmxlOiBmYWxzZSwgdHlwZTogJ2NvbGxlY3Rpb24nLAorICAgICAgICAg ICAgICBncm91cDogZ2V0dGV4dCgnRXhjbHVkZScpLCBtb2RlOiBbJ2VkaXQnLCAnY3JlYXRlJ10s CisgICAgICAgICAgICAgIGNhbkVkaXQ6IHRydWUsIGNhbkRlbGV0ZTogdHJ1ZSwgZGVwczpbJ2lz X3BhcnRpdGlvbmVkJ10sCisgICAgICAgICAgICAgIGNvbnRyb2w6ICd1bmlxdWUtY29sLWNvbGxl Y3Rpb24nLAorICAgICAgICAgICAgICBjb2x1bW5zIDogWyduYW1lJywgJ2NvbHVtbnMnLCAnY29u c3RyYWludCddLAorICAgICAgICAgICAgICBjYW5BZGQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAg ICAgICAgICBpZiAobS5nZXQoJ2lzX3BhcnRpdGlvbmVkJykpIHsKKyAgICAgICAgICAgICAgICAg IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjb2xsID0g bS5nZXQoJ2V4Y2x1ZGVfY29uc3RyYWludCcpOworICAgICAgICAgICAgICAgICAgICBjb2xsLnJl bW92ZShjb2xsLmZpbHRlcihmdW5jdGlvbihtb2RlbCkgeworICAgICAgICAgICAgICAgICAgICAg IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAgICAg ICB9LCAxMCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg ICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgIH0sCisg ICAgICAgICAgICAgIGNhbkFkZFJvdzogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgICAgLy8g VXNlciBjYW4gb25seSBhZGQgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNvbHVtbiB3aXRoIG5h bWUuCisgICAgICAgICAgICAgICB2YXIgY29sdW1ucyA9IG0uZ2V0KCdjb2x1bW5zJyk7CisgICAg ICAgICAgICAgICByZXR1cm4gXy5zb21lKGNvbHVtbnMucGx1Y2soJ25hbWUnKSk7CisgICAgICAg ICAgICAgIH0KKyAgICAgICAgICB9XQorICAgICAgICB9LHsKKyAgICAgICAgICBpZDogJ3R5cG5h bWUnLCBsYWJlbDogZ2V0dGV4dCgnT2YgdHlwZScpLCB0eXBlOiAndGV4dCcsCisgICAgICAgICAg Y29udHJvbDogJ25vZGUtYWpheC1vcHRpb25zJywgbW9kZTogWydwcm9wZXJ0aWVzJywgJ2NyZWF0 ZScsICdlZGl0J10sCisgICAgICAgICAgZGlzYWJsZWQ6ICdjaGVja09mVHlwZScsIHVybDogJ2dl dF9vZnR5cGUnLCBncm91cDogZ2V0dGV4dCgnQWR2YW5jZWQnKSwKKyAgICAgICAgICBkZXBzOiBb J2NvbGxfaW5oZXJpdHMnLCAnaXNfcGFydGl0aW9uZWQnXSwgdHJhbnNmb3JtOiBmdW5jdGlvbihk YXRhLCBjZWxsKSB7CisgICAgICAgICAgICB2YXIgY29udHJvbCA9IGNlbGwgfHwgdGhpcywKKyAg ICAgICAgICAgICAgbSA9IGNvbnRyb2wubW9kZWw7CisgICAgICAgICAgICAgIG0ub2ZfdHlwZXNf dGFibGVzID0gZGF0YTsKKyAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgICAgfSwK KyAgICAgICAgICBjb250cm9sOiBCYWNrZm9ybS5Ob2RlQWpheE9wdGlvbnNDb250cm9sLmV4dGVu ZCh7CisgICAgICAgICAgICAgIC8vIFdoZW4gb2ZfdHlwZXMgY2hhbmdlcyB3ZSBuZWVkIHRvIGNs ZWFyIGNvbHVtbnMgY29sbGVjdGlvbgorICAgICAgICAgICAgICBvbkNoYW5nZTogZnVuY3Rpb24o KSB7CisgICAgICAgICAgICAgICAgQmFja2Zvcm0uTm9kZUFqYXhPcHRpb25zQ29udHJvbC5wcm90 b3R5cGUub25DaGFuZ2UuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAgICAgICAgICAgICB2 YXIgc2VsZiA9IHRoaXMsCisgICAgICAgICAgICAgICAgICB0Ymxfb2lkID0gdW5kZWZpbmVkLAor ICAgICAgICAgICAgICAgICAgdGJsX25hbWUgPSBzZWxmLm1vZGVsLmdldCgndHlwbmFtZScpLAor ICAgICAgICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICAgIGFy ZyA9IHVuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICAgIGNvbHVtbl9jb2xsZWN0aW9uID0gc2Vs Zi5tb2RlbC5nZXQoJ2NvbHVtbnMnKTsKKworICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVm aW5lZCh0YmxfbmFtZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgdGJsX25hbWUgIT09ICcnICYm IGNvbHVtbl9jb2xsZWN0aW9uLmxlbmd0aCAhPT0gMCkgeworICAgICAgICAgICAgICAgICAgdmFy IG1zZyA9IGdldHRleHQoJ0NoYW5naW5nIG9mIHR5cGUgdGFibGUgd2lsbCBjbGVhciBjb2x1bW5z IGNvbGxlY3Rpb24nKTsKKyAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmNvbmZpcm0obXNnLCBm dW5jdGlvbiAoZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZSkgeworICAgICAgICAgICAg ICAgICAgICAgIC8vIFVzZXIgY2xpY2tzIE9rLCBsZXRzIGNsZWFyIGNvbHVtbnMgY29sbGVjdGlv bgorICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl9jb2xsZWN0aW9uLnJlc2V0KCk7CisgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo aXM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0pOworICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoIV8uaXNVbmRlZmluZWQodGJsX25hbWUpICYmIHRibF9uYW1l ID09PSAnJykgeworICAgICAgICAgICAgICAgICAgY29sdW1uX2NvbGxlY3Rpb24ucmVzZXQoKTsK KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBSdW4gQWpheCBub3cgdG8g ZmV0Y2ggY29sdW1ucworICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVmaW5lZCh0YmxfbmFt ZSkgJiYgdGJsX25hbWUgIT09ICcnKSB7CisgICAgICAgICAgICAgICAgICBhcmcgPSB7ICd0bmFt ZSc6IHRibF9uYW1lIH0KKyAgICAgICAgICAgICAgICAgIGRhdGEgPSBzZWxmLm1vZGVsLmZldGNo X2NvbHVtbnNfYWpheC5hcHBseShzZWxmLCBbYXJnXSk7CisgICAgICAgICAgICAgICAgICAvLyBB ZGQgaW50byBjb2x1bW4gY29sbGVjdGlvbgorICAgICAgICAgICAgICAgICAgY29sdW1uX2NvbGxl Y3Rpb24uc2V0KGRhdGEsIHsgbWVyZ2U6ZmFsc2UscmVtb3ZlOmZhbHNlIH0pOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSkKKyAgICAgICAgfSx7Cisg ICAgICAgICAgaWQ6ICdmaWxsZmFjdG9yJywgbGFiZWw6IGdldHRleHQoJ0ZpbGwgZmFjdG9yJyks IHR5cGU6ICdpbnQnLAorICAgICAgICAgIG1vZGU6IFsnY3JlYXRlJywgJ2VkaXQnXSwgbWluOiAx MCwgbWF4OiAxMDAsCisgICAgICAgICAgZGlzYWJsZWQ6ICdpblNjaGVtYScsZ3JvdXA6IGdldHRl eHQoJ0FkdmFuY2VkJykKKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdyZWxoYXNvaWRzJywg bGFiZWw6IGdldHRleHQoJ0hhcyBPSURzPycpLCBjZWxsOiAnc3dpdGNoJywKKyAgICAgICAgICB0 eXBlOiAnc3dpdGNoJywgbW9kZTogWydwcm9wZXJ0aWVzJywgJ2NyZWF0ZScsICdlZGl0J10sCisg ICAgICAgICAgZGlzYWJsZWQ6ICdpblNjaGVtYScsIGdyb3VwOiBnZXR0ZXh0KCdBZHZhbmNlZCcp CisgICAgICAgIH0seworICAgICAgICAgIGlkOiAncmVscGVyc2lzdGVuY2UnLCBsYWJlbDogZ2V0 dGV4dCgnVW5sb2dnZWQ/JyksIGNlbGw6ICdzd2l0Y2gnLAorICAgICAgICAgIHR5cGU6ICdzd2l0 Y2gnLCBtb2RlOiBbJ3Byb3BlcnRpZXMnLCAnY3JlYXRlJywgJ2VkaXQnXSwKKyAgICAgICAgICBk aXNhYmxlZDogJ2luU2NoZW1hV2l0aE1vZGVsQ2hlY2snLAorICAgICAgICAgIGdyb3VwOiBnZXR0 ZXh0KCdBZHZhbmNlZCcpCisgICAgICAgIH0seworICAgICAgICAgIGlkOiAnY29ubmFtZScsIGxh YmVsOiBnZXR0ZXh0KCdQcmltYXJ5IGtleScpLCBjZWxsOiAnc3RyaW5nJywKKyAgICAgICAgICB0 eXBlOiAndGV4dCcsIG1vZGU6IFsncHJvcGVydGllcyddLCBncm91cDogZ2V0dGV4dCgnQWR2YW5j ZWQnKSwKKyAgICAgICAgICBkaXNhYmxlZDogJ2luU2NoZW1hJworICAgICAgICB9LHsKKyAgICAg ICAgICBpZDogJ3JlbHR1cGxlcycsIGxhYmVsOiBnZXR0ZXh0KCdSb3dzIChlc3RpbWF0ZWQpJyks IGNlbGw6ICdzdHJpbmcnLAorICAgICAgICAgIHR5cGU6ICd0ZXh0JywgbW9kZTogWydwcm9wZXJ0 aWVzJ10sIGdyb3VwOiBnZXR0ZXh0KCdBZHZhbmNlZCcpLAorICAgICAgICAgIGRpc2FibGVkOiAn aW5TY2hlbWEnCisgICAgICAgIH0seworICAgICAgICAgIGlkOiAncm93c19jbnQnLCBsYWJlbDog Z2V0dGV4dCgnUm93cyAoY291bnRlZCknKSwgY2VsbDogJ3N0cmluZycsCisgICAgICAgICAgdHlw ZTogJ3RleHQnLCBtb2RlOiBbJ3Byb3BlcnRpZXMnXSwgZ3JvdXA6IGdldHRleHQoJ0FkdmFuY2Vk JyksCisgICAgICAgICAgZGlzYWJsZWQ6ICdpblNjaGVtYScKKyAgICAgICAgfSx7CisgICAgICAg ICAgaWQ6ICdyZWxoYXNzdWJjbGFzcycsIGxhYmVsOiBnZXR0ZXh0KCdJbmhlcml0cyB0YWJsZXM/ JyksIGNlbGw6ICdzd2l0Y2gnLAorICAgICAgICAgIHR5cGU6ICdzd2l0Y2gnLCBtb2RlOiBbJ3By b3BlcnRpZXMnXSwgZ3JvdXA6IGdldHRleHQoJ0FkdmFuY2VkJyksCisgICAgICAgICAgZGlzYWJs ZWQ6ICdpblNjaGVtYScKKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdpc19zeXNfdGFibGUn LCBsYWJlbDogZ2V0dGV4dCgnU3lzdGVtIHRhYmxlPycpLCBjZWxsOiAnc3dpdGNoJywKKyAgICAg ICAgICB0eXBlOiAnc3dpdGNoJywgbW9kZTogWydwcm9wZXJ0aWVzJ10sCisgICAgICAgICAgZGlz YWJsZWQ6ICdpblNjaGVtYScKKyAgICAgICAgfSx7CisgICAgICAgICAgdHlwZTogJ25lc3RlZCcs IGNvbnRyb2w6ICdmaWVsZHNldCcsIGxhYmVsOiBnZXR0ZXh0KCdMaWtlJyksCisgICAgICAgICAg Z3JvdXA6IGdldHRleHQoJ0FkdmFuY2VkJyksCisgICAgICAgICAgc2NoZW1hOlt7CisgICAgICAg ICAgICBpZDogJ2xpa2VfcmVsYXRpb24nLCBsYWJlbDogZ2V0dGV4dCgnUmVsYXRpb24nKSwKKyAg ICAgICAgICAgIHR5cGU6ICd0ZXh0JywgbW9kZTogWydjcmVhdGUnLCAnZWRpdCddLCBkZXBzOiBb J3R5cG5hbWUnXSwKKyAgICAgICAgICAgIGNvbnRyb2w6ICdub2RlLWFqYXgtb3B0aW9ucycsIHVy bDogJ2dldF9yZWxhdGlvbnMnLAorICAgICAgICAgICAgZGlzYWJsZWQ6ICdpc0xpa2VEaXNhYmxl JywgZ3JvdXA6IGdldHRleHQoJ0xpa2UnKQorICAgICAgICAgIH0seworICAgICAgICAgICAgaWQ6 ICdsaWtlX2RlZmF1bHRfdmFsdWUnLCBsYWJlbDogZ2V0dGV4dCgnV2l0aCBkZWZhdWx0IHZhbHVl cz8nKSwKKyAgICAgICAgICAgIHR5cGU6ICdzd2l0Y2gnLCBtb2RlOiBbJ2NyZWF0ZScsICdlZGl0 J10sIGRlcHM6IFsndHlwbmFtZSddLAorICAgICAgICAgICAgZGlzYWJsZWQ6ICdpc0xpa2VEaXNh YmxlJywgZ3JvdXA6IGdldHRleHQoJ0xpa2UnKQorICAgICAgICAgIH0seworICAgICAgICAgICAg aWQ6ICdsaWtlX2NvbnN0cmFpbnRzJywgbGFiZWw6IGdldHRleHQoJ1dpdGggY29uc3RyYWludHM/ JyksCisgICAgICAgICAgICB0eXBlOiAnc3dpdGNoJywgbW9kZTogWydjcmVhdGUnLCAnZWRpdCdd LCBkZXBzOiBbJ3R5cG5hbWUnXSwKKyAgICAgICAgICAgIGRpc2FibGVkOiAnaXNMaWtlRGlzYWJs ZScsIGdyb3VwOiBnZXR0ZXh0KCdMaWtlJykKKyAgICAgICAgICB9LHsKKyAgICAgICAgICAgIGlk OiAnbGlrZV9pbmRleGVzJywgbGFiZWw6IGdldHRleHQoJ1dpdGggaW5kZXhlcz8nKSwKKyAgICAg ICAgICAgIHR5cGU6ICdzd2l0Y2gnLCBtb2RlOiBbJ2NyZWF0ZScsICdlZGl0J10sIGRlcHM6IFsn dHlwbmFtZSddLAorICAgICAgICAgICAgZGlzYWJsZWQ6ICdpc0xpa2VEaXNhYmxlJywgZ3JvdXA6 IGdldHRleHQoJ0xpa2UnKQorICAgICAgICAgIH0seworICAgICAgICAgICAgaWQ6ICdsaWtlX3N0 b3JhZ2UnLCBsYWJlbDogZ2V0dGV4dCgnV2l0aCBzdG9yYWdlPycpLAorICAgICAgICAgICAgdHlw ZTogJ3N3aXRjaCcsIG1vZGU6IFsnY3JlYXRlJywgJ2VkaXQnXSwgZGVwczogWyd0eXBuYW1lJ10s CisgICAgICAgICAgICBkaXNhYmxlZDogJ2lzTGlrZURpc2FibGUnLCBncm91cDogZ2V0dGV4dCgn TGlrZScpCisgICAgICAgICAgfSx7CisgICAgICAgICAgICBpZDogJ2xpa2VfY29tbWVudHMnLCBs YWJlbDogZ2V0dGV4dCgnV2l0aCBjb21tZW50cz8nKSwKKyAgICAgICAgICAgIHR5cGU6ICdzd2l0 Y2gnLCBtb2RlOiBbJ2NyZWF0ZScsICdlZGl0J10sIGRlcHM6IFsndHlwbmFtZSddLAorICAgICAg ICAgICAgZGlzYWJsZWQ6ICdpc0xpa2VEaXNhYmxlJywgZ3JvdXA6IGdldHRleHQoJ0xpa2UnKQor ICAgICAgICAgIH1dCisgICAgICAgIH0seworICAgICAgICAgIGlkOiAncGFydGl0aW9uX3R5cGUn LCBsYWJlbDpnZXR0ZXh0KCdQYXJ0aXRpb24gVHlwZScpLAorICAgICAgICAgIGVkaXRhYmxlOiBm YWxzZSwgdHlwZTogJ3NlbGVjdDInLCBzZWxlY3QyOiB7YWxsb3dDbGVhcjogZmFsc2V9LAorICAg ICAgICAgIGdyb3VwOiAncGFydGl0aW9uJywgZGVwczogWydpc19wYXJ0aXRpb25lZCddLAorICAg ICAgICAgIG9wdGlvbnM6W3sKKyAgICAgICAgICAgIGxhYmVsOiAnUmFuZ2UnLCB2YWx1ZTogJ3Jh bmdlJworICAgICAgICAgIH0seworICAgICAgICAgICAgbGFiZWw6ICdMaXN0JywgdmFsdWU6ICds aXN0JworICAgICAgICAgIH1dLAorICAgICAgICAgIG1vZGU6WydjcmVhdGUnXSwKKyAgICAgICAg ICB2aXNpYmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBpZighXy5pc1VuZGVmaW5lZCht Lm5vZGVfaW5mbykgJiYgIV8uaXNVbmRlZmluZWQobS5ub2RlX2luZm8uc2VydmVyKQorICAgICAg ICAgICAgICAmJiAhXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lvbikgJiYK KyAgICAgICAgICAgICAgbS5ub2RlX2luZm8uc2VydmVyLnZlcnNpb24gPj0gMTAwMDAwKQorICAg ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg ICAgICAgIH0sCisgICAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAg IGlmICghbS5pc05ldygpIHx8ICFtLmdldCgnaXNfcGFydGl0aW9uZWQnKSkKKyAgICAgICAgICAg ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQor ICAgICAgICB9LHsKKyAgICAgICAgICBpZDogJ3BhcnRpdGlvbl9rZXlzJywgbGFiZWw6Z2V0dGV4 dCgnUGFydGl0aW9uIEtleXMnKSwKKyAgICAgICAgICBtb2RlbDogQmFja2Zvcm0uUGFydGl0aW9u S2V5TW9kZWwsCisgICAgICAgICAgc3Vibm9kZTogQmFja2Zvcm0uUGFydGl0aW9uS2V5TW9kZWws CisgICAgICAgICAgZWRpdGFibGU6IHRydWUsIHR5cGU6ICdjb2xsZWN0aW9uJywKKyAgICAgICAg ICBncm91cDogJ3BhcnRpdGlvbicsIG1vZGU6IFsnY3JlYXRlJ10sCisgICAgICAgICAgZGVwczog Wydpc19wYXJ0aXRpb25lZCcsICdwYXJ0aXRpb25fdHlwZSddLAorICAgICAgICAgIGNhbkVkaXQ6 IGZhbHNlLCBjYW5EZWxldGU6IHRydWUsCisgICAgICAgICAgY29udHJvbDogJ3N1Yi1ub2RlLWNv bGxlY3Rpb24nLAorICAgICAgICAgIGNhbkFkZDogZnVuY3Rpb24obSkgeworICAgICAgICAgICAg aWYgKG0uaXNOZXcoKSAmJiBtLmdldCgnaXNfcGFydGl0aW9uZWQnKSkKKyAgICAgICAgICAgICAg cmV0dXJuIHRydWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfSwKKyAg ICAgICAgICBjYW5BZGRSb3c6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIHZhciBjb2x1bW5z ID0gbS5nZXQoJ2NvbHVtbnMnKTsKKyAgICAgICAgICAgIHZhciBtYXhfcm93X2NvdW50ID0gMTAw MDsKKworICAgICAgICAgICAgaWYgKG0uZ2V0KCdwYXJ0aXRpb25fdHlwZScpICYmIG0uZ2V0KCdw YXJ0aXRpb25fdHlwZScpID09ICdsaXN0JykKKyAgICAgICAgICAgICAgbWF4X3Jvd19jb3VudCA9 IDE7CisKKyAgICAgICAgICAgIHJldHVybiAobS5nZXQoJ3BhcnRpdGlvbl9rZXlzJykgJiYKKyAg ICAgICAgICAgICAgICBtLmdldCgncGFydGl0aW9uX2tleXMnKS5sZW5ndGggPCBtYXhfcm93X2Nv dW50ICYmCisgICAgICAgICAgICAgICAgXy5zb21lKGNvbHVtbnMucGx1Y2soJ25hbWUnKSkKKyAg ICAgICAgICAgICk7CisgICAgICAgICAgfSwKKyAgICAgICAgICB2aXNpYmxlOiBmdW5jdGlvbiht KSB7CisgICAgICAgICAgICBpZighXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mbykgJiYgIV8uaXNV bmRlZmluZWQobS5ub2RlX2luZm8uc2VydmVyKQorICAgICAgICAgICAgICAmJiAhXy5pc1VuZGVm aW5lZChtLm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lvbikgJiYKKyAgICAgICAgICAgICAgbS5ub2Rl X2luZm8uc2VydmVyLnZlcnNpb24gPj0gMTAwMDAwKQorICAgICAgICAgICAgICByZXR1cm4gdHJ1 ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0sCisgICAgICAgICAg ZGlzYWJsZWQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmIChtLmdldCgncGFydGl0aW9u X2tleXMnKSAmJiBtLmdldCgncGFydGl0aW9uX2tleXMnKS5tb2RlbHMubGVuZ3RoID4gMCkgewor ICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICB2 YXIgY29sbCA9IG0uZ2V0KCdwYXJ0aXRpb25fa2V5cycpOworICAgICAgICAgICAgICAgIGNvbGwu cmVtb3ZlKGNvbGwuZmlsdGVyKGZ1bmN0aW9uKG1vZGVsKSB7CisgICAgICAgICAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9KSk7CisgICAgICAgICAgICAgIH0sIDEwKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0seworICAgICAgICAgIGlkOiAn cGFydGl0aW9uX3NjaGVtZScsIGxhYmVsOiBnZXR0ZXh0KCdQYXJ0aXRpb24gU2NoZW1lJyksCisg ICAgICAgICAgdHlwZTogJ25vdGUnLCBncm91cDogJ3BhcnRpdGlvbicsIG1vZGU6IFsnZWRpdCdd LAorICAgICAgICAgIHZpc2libGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmKCFfLmlz VW5kZWZpbmVkKG0ubm9kZV9pbmZvKSAmJiAhXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mby5zZXJ2 ZXIpCisgICAgICAgICAgICAgICYmICFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvLnNlcnZlci52 ZXJzaW9uKSAmJgorICAgICAgICAgICAgICBtLm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lvbiA+PSAx MDAwMDApCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICByZXR1cm4g ZmFsc2U7CisgICAgICAgICAgfSwKKyAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24obSkgewor ICAgICAgICAgICAgaWYgKCFtLmlzTmV3KCkpIHsKKyAgICAgICAgICAgICAgdGhpcy50ZXh0ID0g bS5nZXQoJ3BhcnRpdGlvbl9zY2hlbWUnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9Cisg ICAgICAgIH0seworICAgICAgICAgIGlkOiAncGFydGl0aW9ucycsIGxhYmVsOmdldHRleHQoJ1Bh cnRpdGlvbnMnKSwKKyAgICAgICAgICBtb2RlbDogQmFja2Zvcm0uUGFydGl0aW9uc01vZGVsLAor ICAgICAgICAgIHN1Ym5vZGU6IEJhY2tmb3JtLlBhcnRpdGlvbnNNb2RlbCwKKyAgICAgICAgICBl ZGl0YWJsZTogdHJ1ZSwgdHlwZTogJ2NvbGxlY3Rpb24nLAorICAgICAgICAgIGdyb3VwOiAncGFy dGl0aW9uJywgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLAorICAgICAgICAgIGRlcHM6IFsnaXNf cGFydGl0aW9uZWQnLCAncGFydGl0aW9uX3R5cGUnXSwKKyAgICAgICAgICBjYW5FZGl0OiBmYWxz ZSwgY2FuRGVsZXRlOiB0cnVlLAorICAgICAgICAgIGN1c3RvbURlbGV0ZVRpdGxlOiBnZXR0ZXh0 KCdEZXRhY2ggUGFydGl0aW9uJyksCisgICAgICAgICAgY3VzdG9tRGVsZXRlTXNnOiBnZXR0ZXh0 KCdBcmUgeW91IHN1cmUgeW91IHdpc2ggdG8gZGV0YWNoIHRoaXMgcGFydGl0aW9uPycpLAorICAg ICAgICAgIGNvbHVtbnM6Wydpc19hdHRhY2gnLCAncGFydGl0aW9uX25hbWUnLCAndmFsdWVzX2Zy b20nLCAndmFsdWVzX3RvJywgJ3ZhbHVlc19pbiddLAorICAgICAgICAgIGNvbnRyb2w6IEJhY2tm b3JtLlN1Yk5vZGVDb2xsZWN0aW9uQ29udHJvbC5leHRlbmQoeworICAgICAgICAgICAgcm93OiBC YWNrZ3JpZC5QYXJ0aXRpb25Sb3csCisgICAgICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbigp IHsKKyAgICAgICAgICAgICAgQmFja2Zvcm0uU3ViTm9kZUNvbGxlY3Rpb25Db250cm9sLnByb3Rv dHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICAgIHZh ciBzZWxmID0gdGhpczsKKyAgICAgICAgICAgICAgaWYgKCF0aGlzLm1vZGVsLmlzTmV3KCkpIHsK KyAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMuZmllbGQuZ2V0KCdzY2hlbWFfbm9kZScp LAorICAgICAgICAgICAgICAgICAgICBub2RlX2luZm8gPSB0aGlzLmZpZWxkLmdldCgnbm9kZV9p bmZvJyk7CisKKyAgICAgICAgICAgICAgICAvLyBNYWtlIGFqYXggY2FsbCB0byBnZXQgdGhlIHRh YmxlcyB0byBiZSBhdHRhY2hlZAorICAgICAgICAgICAgICAgICQuYWpheCh7CisgICAgICAgICAg ICAgICAgICB1cmw6IG5vZGUuZ2VuZXJhdGVfdXJsLmFwcGx5KAorICAgICAgICAgICAgICAgICAg ICAgIG5vZGUsIFsKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsICdnZXRfYXR0YWNoX3Rh YmxlcycsIHRoaXMuZmllbGQuZ2V0KCdub2RlX2RhdGEnKSwKKyAgICAgICAgICAgICAgICAgICAg ICAgIHRydWUsIG5vZGVfaW5mbworICAgICAgICAgICAgICAgICAgICAgIF0pLAorCisgICAgICAg ICAgICAgICAgICB0eXBlOiAnR0VUJywKKyAgICAgICAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwK KyAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgeworICAgICAgICAgICAg ICAgICAgICBpZiAocmVzLnN1Y2Nlc3MgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgIHNl bGYubW9kZWwudGFibGVfb3B0aW9ucyA9IHJlcy5kYXRhOworICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0 aWZ5LmFsZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgJ0Vycm9yIGZldGNoaW5nIHRhYmxl cyB0byBiZSBhdHRhY2hlZCcsIHJlcy5kYXRhLnJlc3VsdAorICAgICAgICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0sCisgICAgICAg ICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgICAgICAgICB2YXIg ZXJybXNnID0gJC5wYXJzZUpTT04oZS5yZXNwb25zZVRleHQpOworICAgICAgICAgICAgICAgICAg ICBhbGVydGlmeS5hbGVydCgnRXJyb3IgZmV0Y2hpbmcgdGFibGVzIHRvIGJlIGF0dGFjaGVkLics IGVycm1zZy5lcnJvcm1zZyk7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAg ICAgKSwKKyAgICAgICAgICBjYW5BZGQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmICht LmdldCgnaXNfcGFydGl0aW9uZWQnKSkKKyAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfSwKKyAgICAgICAgICB2aXNpYmxlOiBm dW5jdGlvbihtKSB7CisgICAgICAgICAgICBpZighXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mbykg JiYgIV8uaXNVbmRlZmluZWQobS5ub2RlX2luZm8uc2VydmVyKQorICAgICAgICAgICAgICAmJiAh Xy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lvbikgJiYKKyAgICAgICAgICAg ICAgbS5ub2RlX2luZm8uc2VydmVyLnZlcnNpb24gPj0gMTAwMDAwKQorICAgICAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0sCisg ICAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmIChtLmlzTmV3 KCkgJiYgbS5nZXQoJ3BhcnRpdGlvbnMnKSAmJiBtLmdldCgncGFydGl0aW9ucycpLm1vZGVscy5s ZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeworICAg ICAgICAgICAgICAgIHZhciBjb2xsID0gbS5nZXQoJ3BhcnRpdGlvbnMnKTsKKyAgICAgICAgICAg ICAgICBjb2xsLnJlbW92ZShjb2xsLmZpbHRlcihmdW5jdGlvbihtb2RlbCkgeworICAgICAgICAg ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAg ICB9LCAxMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9LHsKKyAgICAg ICAgICBpZDogJ3BhcnRpdGlvbl9ub3RlJywgbGFiZWw6IGdldHRleHQoJ1BhcnRpdGlvbicpLAor ICAgICAgICAgIHR5cGU6ICdub3RlJywgZ3JvdXA6ICdwYXJ0aXRpb24nLAorICAgICAgICAgIHRl eHQ6IGdldHRleHQoJ0Fib3ZlIGNvbnRyb2wgd2lsbCBiZSB1c2VkIHRvIENyZWF0ZS9BdHRhY2gv RGV0YWNoIHBhcnRpdGlvbnMuPGJyPicgKworICAgICAgICAgICAgJzx1bD48bGk+Q3JlYXRlIE1v ZGU6IFVzZXIgd2lsbCBiZSBhYmxlIHRvIGNyZWF0ZSBOIG51bWJlciBvZiBwYXJ0aXRpb25zLiBN b2RlIHN3aXRjaCBjb250cm9sIGlzIGRpc2FibGVkIGluIHRoaXMgc2NlbmFyaW8uPC9saT4nICsK KyAgICAgICAgICAgICc8bGk+RWRpdCBNb2RlOiBVc2VyIHdpbGwgYmUgYWJsZSB0byBjcmVhdGUv YXR0YWNoL2RldGFjaCBOIG51bWJlciBvZiBwYXJ0aXRpb25zLicgKworICAgICAgICAgICAgJ0lu IGF0dGFjaCBtb2RlIHRoZXJlIHdpbGwgYmUgbGlzdCBvZiBzdWl0YWJsZSB0YWJsZXMgdG8gYmUg YXR0YWNoZWQuPC9saT48L3VsPicpLAorICAgICAgICAgIHZpc2libGU6IGZ1bmN0aW9uKG0pIHsK KyAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvKSAmJiAhXy5pc1VuZGVm aW5lZChtLm5vZGVfaW5mby5zZXJ2ZXIpCisgICAgICAgICAgICAgICYmICFfLmlzVW5kZWZpbmVk KG0ubm9kZV9pbmZvLnNlcnZlci52ZXJzaW9uKSAmJgorICAgICAgICAgICAgICBtLm5vZGVfaW5m by5zZXJ2ZXIudmVyc2lvbiA+PSAxMDAwMDApCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICB9LHsKKyAg ICAgICAgICAvLyBIZXJlIC0gd2Ugd2lsbCBjcmVhdGUgdGFiIGNvbnRyb2wgZm9yIHN0b3JhZ2Ug cGFyYW1ldGVycworICAgICAgICAgIC8vIChhdXRvIHZhY3V1bSkuCisgICAgICAgICAgdHlwZTog J25lc3RlZCcsIGNvbnRyb2w6ICd0YWInLCBncm91cDogZ2V0dGV4dCgnUGFyYW1ldGVyJyksCisg ICAgICAgICAgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLCBkZXBzOiBbJ2lzX3BhcnRpdGlvbmVk J10sCisgICAgICAgICAgc2NoZW1hOiBCYWNrZm9ybS5WYWN1dW1TZXR0aW5nc1NjaGVtYQorICAg ICAgICB9LHsKKyAgICAgICAgICBpZDogJ3JlbGFjbF9zdHInLCBsYWJlbDogZ2V0dGV4dCgnUHJp dmlsZWdlcycpLCBkaXNhYmxlZDogJ2luU2NoZW1hJywKKyAgICAgICAgICB0eXBlOiAndGV4dCcs IG1vZGU6IFsncHJvcGVydGllcyddLCBncm91cDogZ2V0dGV4dCgnU2VjdXJpdHknKQorICAgICAg ICB9LCBwZ0Jyb3dzZXIuU2VjdXJpdHlHcm91cFVuZGVyU2NoZW1hLHsKKyAgICAgICAgICBpZDog J3JlbGFjbCcsIGxhYmVsOiBnZXR0ZXh0KCdQcml2aWxlZ2VzJyksIHR5cGU6ICdjb2xsZWN0aW9u JywKKyAgICAgICAgICBncm91cDogJ3NlY3VyaXR5JywgY29udHJvbDogJ3VuaXF1ZS1jb2wtY29s bGVjdGlvbicsCisgICAgICAgICAgbW9kZWw6IHBnQnJvd3Nlci5Ob2RlLlByaXZpbGVnZVJvbGVN b2RlbC5leHRlbmQoeworICAgICAgICAgIHByaXZpbGVnZXM6IFsnYScsJ3InLCd3JywnZCcsJ0Qn LCd4JywndCddfSksCisgICAgICAgICAgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLCBjYW5BZGQ6 IHRydWUsIGNhbkRlbGV0ZTogdHJ1ZSwKKyAgICAgICAgICB1bmlxdWVDb2wgOiBbJ2dyYW50ZWUn XQorICAgICAgICB9LHsKKyAgICAgICAgICBpZDogJ3NlY2xhYmVscycsIGxhYmVsOiBnZXR0ZXh0 KCdTZWN1cml0eSBsYWJlbHMnKSwgY2FuRWRpdDogZmFsc2UsCisgICAgICAgICAgbW9kZWw6IHBn QnJvd3Nlci5TZWNMYWJlbE1vZGVsLCBlZGl0YWJsZTogZmFsc2UsIGNhbkFkZDogdHJ1ZSwKKyAg ICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsIG1pbl92ZXJzaW9uOiA5MDEwMCwgbW9kZTogWydl ZGl0JywgJ2NyZWF0ZSddLAorICAgICAgICAgIGdyb3VwOiAnc2VjdXJpdHknLCBjYW5EZWxldGU6 IHRydWUsIGNvbnRyb2w6ICd1bmlxdWUtY29sLWNvbGxlY3Rpb24nCisgICAgICAgIH0seworICAg ICAgICAgIGlkOiAndmFjdXVtX3NldHRpbmdzX3N0cicsIGxhYmVsOiBnZXR0ZXh0KCdTdG9yYWdl IHNldHRpbmdzJyksCisgICAgICAgICAgdHlwZTogJ211bHRpbGluZScsIGdyb3VwOiBnZXR0ZXh0 KCdBZHZhbmNlZCcpLCBtb2RlOiBbJ3Byb3BlcnRpZXMnXQorICAgICAgICB9XSwKKyAgICAgICAg dmFsaWRhdGU6IGZ1bmN0aW9uKGtleXMpIHsKKyAgICAgICAgICB2YXIgZXJyID0ge30sCisgICAg ICAgICAgICAgIGNoYW5nZWRBdHRycyA9IHRoaXMuY2hhbmdlZCwKKyAgICAgICAgICAgICAgbXNn ID0gdW5kZWZpbmVkLAorICAgICAgICAgICAgICBuYW1lID0gdGhpcy5nZXQoJ25hbWUnKSwKKyAg ICAgICAgICAgICAgc2NoZW1hID0gdGhpcy5nZXQoJ3NjaGVtYScpLAorICAgICAgICAgICAgICBy ZWxvd25lciA9IHRoaXMuZ2V0KCdyZWxvd25lcicpLAorICAgICAgICAgICAgICBpc19wYXJ0aXRp b25lZCA9IHRoaXMuZ2V0KCdpc19wYXJ0aXRpb25lZCcpLAorICAgICAgICAgICAgICBwYXJ0aXRp b25fa2V5cyA9IHRoaXMuZ2V0KCdwYXJ0aXRpb25fa2V5cycpOworCisgICAgICAgICAgLy8gSWYg bm90aGluZyB0byB2YWxpZGF0ZSBvciBWYWN1dW1TZXR0aW5nIGtleXMgdGhlbgorICAgICAgICAg IC8vIHJldHVybiBmcm9tIGhlcmUKKyAgICAgICAgICBpZiAoIGtleXMgJiYgKGtleXMubGVuZ3Ro ID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IF8uaW5kZXhPZihrZXlzLCAnYXV0b3Zh Y3V1bV9lbmFibGVkJykgIT0gLTEKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IF8uaW5kZXhP ZihrZXlzLCAndG9hc3RfYXV0b3ZhY3V1bV9lbmFibGVkJykgIT0gLTEpICkgeworICAgICAgICAg ICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgfQorCisgICAgICAgICAgLy8gSGF2ZSB0byBjbGVh ciBleGlzdGluZyB2YWxpZGF0aW9uIGJlZm9yZSBpbml0aWF0aW5nIGN1cnJlbnQgc3RhdGUgdmFs aWRhdGlvbiBvbmx5CisgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLmNsZWFyKCk7CisKKyAgICAg ICAgICBpZiAoXy5pc1VuZGVmaW5lZChuYW1lKSB8fCBfLmlzTnVsbChuYW1lKSB8fAorICAgICAg ICAgICAgU3RyaW5nKG5hbWUpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykgPT0gJycpIHsKKyAg ICAgICAgICAgIG1zZyA9IGdldHRleHQoJ1RhYmxlIG5hbWUgY2Fubm90IGJlIGVtcHR5LicpOwor ICAgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgnbmFtZScsIG1zZyk7CisgICAgICAgICAg ICByZXR1cm4gbXNnOworICAgICAgICAgIH0gZWxzZSBpZiAoXy5pc1VuZGVmaW5lZChzY2hlbWEp IHx8IF8uaXNOdWxsKHNjaGVtYSkgfHwKKyAgICAgICAgICAgIFN0cmluZyhzY2hlbWEpLnJlcGxh Y2UoL15ccyt8XHMrJC9nLCAnJykgPT0gJycpIHsKKyAgICAgICAgICAgIG1zZyA9IGdldHRleHQo J1RhYmxlIHNjaGVtYSBjYW5ub3QgYmUgZW1wdHkuJyk7CisgICAgICAgICAgICB0aGlzLmVycm9y TW9kZWwuc2V0KCdzY2hlbWEnLCBtc2cpOworICAgICAgICAgICAgcmV0dXJuIG1zZzsKKyAgICAg ICAgICB9IGVsc2UgaWYgKF8uaXNVbmRlZmluZWQocmVsb3duZXIpIHx8IF8uaXNOdWxsKHJlbG93 bmVyKSB8fAorICAgICAgICAgICAgU3RyaW5nKHJlbG93bmVyKS5yZXBsYWNlKC9eXHMrfFxzKyQv ZywgJycpID09ICcnKSB7CisgICAgICAgICAgICBtc2cgPSBnZXR0ZXh0KCdUYWJsZSBvd25lciBj YW5ub3QgYmUgZW1wdHkuJyk7CisgICAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCdyZWxv d25lcicsIG1zZyk7CisgICAgICAgICAgICByZXR1cm4gbXNnOworICAgICAgICAgIH0gZWxzZSBp ZiAoaXNfcGFydGl0aW9uZWQgJiYgdGhpcy5pc05ldygpICYmCisgICAgICAgICAgICAhXy5pc051 bGwocGFydGl0aW9uX2tleXMpICYmIHBhcnRpdGlvbl9rZXlzLmxlbmd0aCA8PSAwKQorICAgICAg ICAgIHsKKyAgICAgICAgICAgIG1zZyA9IGdldHRleHQoJ1BsZWFzZSBzcGVjaWZ5IGF0IGxlYXN0 IG9uZSBrZXkgZm9yIHBhcnRpdGlvbmVkIHRhYmxlLicpOworICAgICAgICAgICAgdGhpcy5lcnJv ck1vZGVsLnNldCgncGFydGl0aW9uX2tleXMnLCBtc2cpOworICAgICAgICAgICAgcmV0dXJuIG1z ZzsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0sCisgICAg ICAgIC8vIFdlIHdpbGwgZGlzYWJsZSBldmVyeXRoaW5nIGlmIHdlIGFyZSB1bmRlciBjYXRhbG9n IG5vZGUKKyAgICAgICAgaW5TY2hlbWE6IGZ1bmN0aW9uKCkgeworICAgICAgICAgIGlmKHRoaXMu bm9kZV9pbmZvICYmICAnY2F0YWxvZycgaW4gdGhpcy5ub2RlX2luZm8pCisgICAgICAgICAgewor ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBm YWxzZTsKKyAgICAgICAgfSwKKyAgICAgICAgaXNJbmhlcml0ZWRUYWJsZTogZnVuY3Rpb24obSkg eworICAgICAgICAgIGlmKCFtLmluU2NoZW1hLmFwcGx5KHRoaXMsIFttXSkpIHsKKyAgICAgICAg ICAgIGlmKAorICAgICAgICAgICAgICAoIV8uaXNVbmRlZmluZWQobS5nZXQoJ2NvbGxfaW5oZXJp dHMnKSkgJiYgbS5nZXQoJ2NvbGxfaW5oZXJpdHMnKS5sZW5ndGggIT0gMCkKKyAgICAgICAgICAg ICAgICB8fAorICAgICAgICAgICAgICAgICAgKCFfLmlzVW5kZWZpbmVkKG0uZ2V0KCd0eXBuYW1l JykpICYmIFN0cmluZyhtLmdldCgndHlwbmFtZScpKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycp ICE9PSAnJykKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgICAvLyBFaXRoZXIgb2ZfdHlw ZXMgb3IgY29sbF9pbmhlcml0cyBoYXMgdmFsdWUKKyAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg ICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg fSwKKyAgICAgICAgLy8gT2Z0eXBlIGlzIGRlZmluZWQ/CisgICAgICAgIGNoZWNrSW5oZXJpdGFu Y2U6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAvLyBEaXNhYmxlZCBpZiBpdCBpcyBwYXJ0aXRp b25lZCB0YWJsZQorICAgICAgICAgIGlmIChtLmdldCgnaXNfcGFydGl0aW9uZWQnKSkgeworICAg ICAgICAgICAgc2V0VGltZW91dCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICBtLnNldCgn Y29sbF9pbmhlcml0cycsIFtdKTsKKyAgICAgICAgICAgIH0sIDEwKTsKKyAgICAgICAgICAgIHJl dHVybiB0cnVlOworICAgICAgICAgIH0KKworICAgICAgICAgIC8vIGNvbGxfaW5oZXJpdHMgfHwg dHlwbmFtZQorICAgICAgICAgIGlmKCFtLmluU2NoZW1hLmFwcGx5KHRoaXMsIFttXSkgJiYKKyAg ICAgICAgICAgICAgKCBfLmlzVW5kZWZpbmVkKG0uZ2V0KCd0eXBuYW1lJykpIHx8CisgICAgICAg ICAgICAgICAgXy5pc051bGwobS5nZXQoJ3R5cG5hbWUnKSkgfHwKKyAgICAgICAgICAgICAgICBT dHJpbmcobS5nZXQoJ3R5cG5hbWUnKSkucmVwbGFjZSgvXlxzK3xccyskL2csICcnKSA9PSAnJykp IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0 dXJuIHRydWU7CisgICAgICAgIH0sCisgICAgICAgIC8vIFdlIHdpbGwgZGlzYWJsZSBMaWtlIGlm IG9mVHlwZSBpcyBkZWZpbmVkCisgICAgICAgIGlzTGlrZURpc2FibGU6IGZ1bmN0aW9uKG0pIHsK KyAgICAgICAgICBpZighbS5pblNjaGVtYVdpdGhNb2RlbENoZWNrLmFwcGx5KHRoaXMsIFttXSkg JiYKKyAgICAgICAgICAgICAgKCBfLmlzVW5kZWZpbmVkKG0uZ2V0KCd0eXBuYW1lJykpIHx8Cisg ICAgICAgICAgICAgICAgXy5pc051bGwobS5nZXQoJ3R5cG5hbWUnKSkgfHwKKyAgICAgICAgICAg ICAgICBTdHJpbmcobS5nZXQoJ3R5cG5hbWUnKSkucmVwbGFjZSgvXlxzK3xccyskL2csICcnKSA9 PSAnJykpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAg ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0sCisgICAgICAgIC8vIENoZWNrIGZvciBjb2x1bW4g Z3JpZCB3aGVuIHRvIEFkZAorICAgICAgICBjaGVja19ncmlkX2FkZF9jb25kaXRpb246IGZ1bmN0 aW9uKG0pIHsKKyAgICAgICAgICB2YXIgZW5hYmxlX2ZsYWcgPSB0cnVlOworICAgICAgICAgIGlm KCFtLmluU2NoZW1hLmFwcGx5KHRoaXMsIFttXSkpIHsKKyAgICAgICAgICAgIC8vIGlmIG9mX3R5 cGUgdGhlbiBkaXNhYmxlIGFkZCBpbiBncmlkCisgICAgICAgICAgICBpZiAoIV8uaXNVbmRlZmlu ZWQobS5nZXQoJ3R5cG5hbWUnKSkgJiYKKyAgICAgICAgICAgICAgICAhXy5pc051bGwobS5nZXQo J3R5cG5hbWUnKSkgJiYKKyAgICAgICAgICAgICAgICBtLmdldCgndHlwbmFtZScpICE9PSAnJykg eworICAgICAgICAgICAgICAgICAgICBlbmFibGVfZmxhZyA9IGZhbHNlOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIGVuYWJsZV9mbGFnOworICAgICAg ICB9LAorICAgICAgICAvLyBDaGVjayBmb3IgY29sdW1uIGdyaWQgd2hlbiB0byBlZGl0L2RlbGV0 ZSAoZm9yIGVhY2ggcm93KQorICAgICAgICBjaGVja19ncmlkX3Jvd19lZGl0X2RlbGV0ZTogZnVu Y3Rpb24obSkgeworICAgICAgICAgIHZhciBmbGFnID0gdHJ1ZTsKKyAgICAgICAgICBpZighXy5p c1VuZGVmaW5lZChtLmdldCgnaW5oZXJpdGVkZnJvbScpKSAmJgorICAgICAgICAgICAgICAgIV8u aXNOdWxsKG0uZ2V0KCdpbmhlcml0ZWRmcm9tJykpICYmCisgICAgICAgICAgICAgICBTdHJpbmco bS5nZXQoJ2luaGVyaXRlZGZyb20nKSkucmVwbGFjZSgvXlxzK3xccyskL2csICcnKSAhPT0gJycp IHsKKyAgICAgICAgICAgIGZsYWcgPSBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0 dXJuIGZsYWc7CisgICAgICAgIH0sCisgICAgICAgIC8vIFdlIHdpbGwgZGlzYWJsZSBpdCBpZiBJ bmhlcml0YW5jZSBpcyBkZWZpbmVkCisgICAgICAgIGNoZWNrT2ZUeXBlOiBmdW5jdGlvbihtKSB7 CisgICAgICAgICAgLy8gRGlzYWJsZWQgaWYgaXQgaXMgcGFydGl0aW9uZWQgdGFibGUKKyAgICAg ICAgICBpZiAobS5nZXQoJ2lzX3BhcnRpdGlvbmVkJykpIHsKKyAgICAgICAgICAgIHNldFRpbWVv dXQoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgbS5zZXQoJ3R5cG5hbWUnLCB1bmRlZmlu ZWQpOworICAgICAgICAgICAgfSwgMTApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg ICAgICAgfQorCisgICAgICAgICAgLy9jb2xsX2luaGVyaXRzIHx8IHR5cG5hbWUKKyAgICAgICAg ICBpZighbS5pblNjaGVtYVdpdGhNb2RlbENoZWNrLmFwcGx5KHRoaXMsIFttXSkgJiYKKyAgICAg ICAgICAgICAgKF8uaXNVbmRlZmluZWQobS5nZXQoJ2NvbGxfaW5oZXJpdHMnKSkgfHwKKyAgICAg ICAgICAgICAgIF8uaXNOdWxsKG0uZ2V0KCdjb2xsX2luaGVyaXRzJykpIHx8CisgICAgICAgICAg ICAgICBTdHJpbmcobS5nZXQoJ2NvbGxfaW5oZXJpdHMnKSkucmVwbGFjZSgvXlxzK3xccyskL2cs ICcnKSA9PSAnJykpIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9Cisg ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0sCisgICAgICAgIC8vIFdlIHdpbGwgY2hl Y2sgaWYgd2UgYXJlIHVuZGVyIHNjaGVtYSBub2RlICYgaW4gJ2NyZWF0ZScgbW9kZQorICAgICAg ICBpblNjaGVtYVdpdGhNb2RlbENoZWNrOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgaWYodGhp cy5ub2RlX2luZm8gJiYgICdzY2hlbWEnIGluIHRoaXMubm9kZV9pbmZvKQorICAgICAgICAgIHsK KyAgICAgICAgICAgIC8vIFdlIHdpbGwgZGlzYmFsZSBjb250cm9sIGlmIGl0J3MgaW4gJ2VkaXQn IG1vZGUKKyAgICAgICAgICAgIGlmIChtLmlzTmV3KCkpIHsKKyAgICAgICAgICAgICAgcmV0dXJu IGZhbHNlOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHRydWU7 CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiB0cnVlOworICAg ICAgICB9LAorICAgICAgICBpc1RhYmxlQXV0b1ZhY3V1bUVuYWJsZTogZnVuY3Rpb24obSkgewor ICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWRkaXRpb25hbCBjb25kaXRpb24gdG8gdG9n Z2xlIGVuYWJsZS9kaXNhYmxlCisgICAgICAgICAgLy8gZm9yIHRhYmxlIGF1dG8tdmFjdXVtCisg ICAgICAgICAgaWYoIW0uaW5TY2hlbWEuYXBwbHkodGhpcywgW21dKSAmJgorICAgICAgICAgICAg ICBtLmdldCgnYXV0b3ZhY3V1bV9lbmFibGVkJykgPT09IHRydWUpIHsKKyAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg IH0sCisgICAgICAgIGlzVG9hc3RUYWJsZUF1dG9WYWN1dW1FbmFibGU6IGZ1bmN0aW9uKG0pIHsK KyAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFkZGl0aW9uYWwgY29uZGl0aW9uIHRvIHRv Z2dsZSBlbmFibGUvZGlzYWJsZQorICAgICAgICAgIC8vIGZvciB0b2FzdCB0YWJsZSBhdXRvLXZh Y3V1bQorICAgICAgICAgIGlmKCFtLmluU2NoZW1hV2l0aE1vZGVsQ2hlY2suYXBwbHkodGhpcywg W21dKSAmJgorICAgICAgICAgICAgICBtLmdldCgndG9hc3RfYXV0b3ZhY3V1bV9lbmFibGVkJykg PT0gdHJ1ZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAg ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgZmV0Y2hfY29sdW1uc19hamF4 OiBmdW5jdGlvbihhcmcpIHsKKyAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCisgICAgICAgICAg ICAgIHVybCA9ICdnZXRfY29sdW1ucycsCisgICAgICAgICAgICAgIG0gPSBzZWxmLm1vZGVsLnRv cCB8fCBzZWxmLm1vZGVsLAorICAgICAgICAgICAgICBvbGRfY29sdW1ucyA9IF8uY2xvbmUobS5n ZXQoJ2NvbHVtbnMnKSkKKyAgICAgICAgICAgICAgZGF0YSA9IHVuZGVmaW5lZCwKKyAgICAgICAg ICAgICAgbm9kZSA9IHRoaXMuZmllbGQuZ2V0KCdzY2hlbWFfbm9kZScpLAorICAgICAgICAgICAg ICBub2RlX2luZm8gPSB0aGlzLmZpZWxkLmdldCgnbm9kZV9pbmZvJyksCisgICAgICAgICAgICAg IGZ1bGxfdXJsID0gbm9kZS5nZW5lcmF0ZV91cmwuYXBwbHkoCisgICAgICAgICAgICAgICAgbm9k ZSwgWworICAgICAgICAgICAgICAgICAgbnVsbCwgdXJsLCB0aGlzLmZpZWxkLmdldCgnbm9kZV9k YXRhJyksCisgICAgICAgICAgICAgICAgICB0aGlzLmZpZWxkLmdldCgndXJsX3dpdGhfaWQnKSB8 fCBmYWxzZSwgbm9kZV9pbmZvCisgICAgICAgICAgICAgICAgXQorICAgICAgICAgICAgICApLAor ICAgICAgICAgICAgICBjYWNoZV9sZXZlbCA9IHRoaXMuZmllbGQuZ2V0KCdjYWNoZV9sZXZlbCcp IHx8IG5vZGUudHlwZSwKKyAgICAgICAgICAgICAgY2FjaGVfbm9kZSA9IHRoaXMuZmllbGQuZ2V0 KCdjYWNoZV9ub2RlJyk7CisKKyAgICAgICAgICBjYWNoZV9ub2RlID0gKGNhY2hlX25vZGUgJiYg cGdCcm93c2VyLk5vZGVzWydjYWNoZV9ub2RlJ10pIHx8IG5vZGU7CisKKyAgICAgICAgICBtLnRy aWdnZXIoJ3BnYWRtaW46dmlldzpmZXRjaGluZycsIG0sIHNlbGYuZmllbGQpOworICAgICAgICAg IC8vIEZldGNoaW5nIENvbHVtbnMgZGF0YSBmb3IgdGhlIHNlbGVjdGVkIHRhYmxlLgorICAgICAg ICAgICQuYWpheCh7CisgICAgICAgICAgICBhc3luYzogZmFsc2UsCisgICAgICAgICAgICB1cmw6 IGZ1bGxfdXJsLAorICAgICAgICAgICAgZGF0YTogYXJnLAorICAgICAgICAgICAgc3VjY2Vzczog ZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgICAgIGRhdGEgPSBjYWNoZV9ub2RlLmNhY2hlKHVy bCwgbm9kZV9pbmZvLCBjYWNoZV9sZXZlbCwgcmVzLmRhdGEpOworICAgICAgICAgICAgfSwKKyAg ICAgICAgICAgIGVycm9yOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgbS50cmlnZ2VyKCdw Z2FkbWluOnZpZXc6ZmV0Y2g6ZXJyb3InLCBtLCBzZWxmLmZpZWxkKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICB9KTsKKyAgICAgICAgICBtLnRyaWdnZXIoJ3BnYWRtaW46dmlldzpmZXRjaGVk JywgbSwgc2VsZi5maWVsZCk7CisgICAgICAgICAgZGF0YSA9IChkYXRhICYmIGRhdGEuZGF0YSkg fHwgW107CisgICAgICAgICAgcmV0dXJuIGRhdGE7CisgICAgICAgIH0KKyAgICAgIH0pLAorICAg ICAgY2FuQ3JlYXRlOiBmdW5jdGlvbihpdGVtRGF0YSwgaXRlbSwgZGF0YSkgeworICAgICAgICAg IC8vSWYgY2hlY2sgaXMgZmFsc2UgdGhlbiAsIHdlIHdpbGwgYWxsb3cgY3JlYXRlIG1lbnUKKyAg ICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLmNoZWNrID09IGZhbHNlKQorICAgICAgICAgICAgcmV0 dXJuIHRydWU7CisKKyAgICAgICAgICB2YXIgdCA9IHBnQnJvd3Nlci50cmVlLCBpID0gaXRlbSwg ZCA9IGl0ZW1EYXRhOworICAgICAgICAgIC8vIFRvIGl0ZXJhdGUgb3ZlciB0cmVlIHRvIGNoZWNr IHBhcmVudCBub2RlCisgICAgICAgICAgd2hpbGUgKGkpIHsKKyAgICAgICAgICAgIC8vIElmIGl0 IGlzIHNjaGVtYSB0aGVuIGFsbG93IHVzZXIgdG8gY3JlYXRlIHRhYmxlCisgICAgICAgICAgICBp ZiAoXy5pbmRleE9mKFsnc2NoZW1hJ10sIGQuX3R5cGUpID4gLTEpCisgICAgICAgICAgICAgIHJl dHVybiB0cnVlOworCisgICAgICAgICAgICBpZiAoJ2NvbGwtdGFibGUnID09IGQuX3R5cGUpIHsK KyAgICAgICAgICAgICAgLy9DaGVjayBpZiB3ZSBhcmUgbm90IGNoaWxkIG9mIGNhdGFsb2cKKyAg ICAgICAgICAgICAgcHJldl9pID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGw7 CisgICAgICAgICAgICAgIHByZXZfZCA9IHByZXZfaSA/IHQuaXRlbURhdGEocHJldl9pKSA6IG51 bGw7CisgICAgICAgICAgICAgIGlmKCBwcmV2X2QuX3R5cGUgPT0gJ2NhdGFsb2cnKSB7CisgICAg ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICBpID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGw7CisgICAg ICAgICAgICBkID0gaSA/IHQuaXRlbURhdGEoaSkgOiBudWxsOworICAgICAgICAgIH0KKyAgICAg ICAgICAvLyBieSBkZWZhdWx0IHdlIGRvIG5vdCB3YW50IHRvIGFsbG93IGNyZWF0ZSBtZW51Cisg ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9LAorICAgICAgLy8gQ2hlY2sgdG8gd2hldGhl ciB0YWJsZSBoYXMgZGlzYWJsZSB0cmlnZ2VyKHMpCisgICAgICBjYW5DcmVhdGVfd2l0aF90cmln Z2VyX2VuYWJsZTogZnVuY3Rpb24oaXRlbURhdGEsIGl0ZW0sIGRhdGEpIHsKKyAgICAgICAgaWYo dGhpcy5jYW5DcmVhdGUuYXBwbHkodGhpcywgW2l0ZW1EYXRhLCBpdGVtLCBkYXRhXSkpIHsKKyAg ICAgICAgICAvLyBXZSBhcmUgaGVyZSBtZWFucyB3ZSBjYW4gY3JlYXRlIG1lbnUsIG5vdyBsZXQn cyBjaGVjayBjb25kaXRpb24KKyAgICAgICAgICBpZihpdGVtRGF0YS50aWdnZXJfY291bnQgPiAw KSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgfSwKKyAg ICAgIC8vIENoZWNrIHRvIHdoZXRoZXIgdGFibGUgaGFzIGVuYWJsZSB0cmlnZ2VyKHMpCisgICAg ICBjYW5DcmVhdGVfd2l0aF90cmlnZ2VyX2Rpc2FibGU6IGZ1bmN0aW9uKGl0ZW1EYXRhLCBpdGVt LCBkYXRhKSB7CisgICAgICAgIGlmKHRoaXMuY2FuQ3JlYXRlLmFwcGx5KHRoaXMsIFtpdGVtRGF0 YSwgaXRlbSwgZGF0YV0pKSB7CisgICAgICAgICAgLy8gV2UgYXJlIGhlcmUgbWVhbnMgd2UgY2Fu IGNyZWF0ZSBtZW51LCBub3cgbGV0J3MgY2hlY2sgY29uZGl0aW9uCisgICAgICAgICAgaWYoaXRl bURhdGEudGlnZ2VyX2NvdW50ID4gMCAmJiBpdGVtRGF0YS5oYXNfZW5hYmxlX3RyaWdnZXJzID4g MCkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAg ICB9KTsKKyAgfQorCisgIHJldHVybiBwZ0Jyb3dzZXIuTm9kZXNbJ3BhcnRpdGlvbiddOworfSk7 CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcnVsZXMvdGVtcGxhdGVzL3J1bGVzL2pzL3J1bGVzLmpz IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvdGFibGVzL3J1bGVzL3RlbXBsYXRlcy9ydWxlcy9qcy9ydWxlcy5qcwppbmRleCAyNWZl OTYzLi5kYjkxYWYzIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcnVsZXMvdGVtcGxhdGVzL3J1bGVz L2pzL3J1bGVzLmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2 ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9ydWxlcy90ZW1wbGF0ZXMvcnVsZXMvanMvcnVs ZXMuanMKQEAgLTE2LDYgKzE2LDcgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUucnVsZScsIFsKICAg ICAgICAgbm9kZTogJ3J1bGUnLAogICAgICAgICBsYWJlbDogZ2V0dGV4dCgnUnVsZXMnKSwKICAg ICAgICAgdHlwZTogJ2NvbGwtcnVsZScsCisgICAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBw Z0Jyb3dzZXIudGFibGVDaGlsZFRyZWVOb2RlSGllcmFyY2h5LAogICAgICAgICBjb2x1bW5zOiBb Im5hbWUiLCAib3duZXIiLCAiY29tbWVudCJdCiAgICAgICB9KTsKICAgfQpAQCAtMzMsOCArMzQs OSBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS5ydWxlJywgWwogICAgIHJ1bGUgb3B0aW9uIGluIHRo ZSBjb250ZXh0IG1lbnUKICAgICovCiAgIGlmICghcGdCcm93c2VyLk5vZGVzWydydWxlJ10pIHsK LSAgICBwZ0FkbWluLkJyb3dzZXIuTm9kZXNbJ3J1bGUnXSA9IHBnQWRtaW4uQnJvd3Nlci5Ob2Rl LmV4dGVuZCh7Ci0gICAgICBwYXJlbnRfdHlwZTogWyd0YWJsZScsJ3ZpZXcnXSwKKyAgICBwZ0Fk bWluLkJyb3dzZXIuTm9kZXNbJ3J1bGUnXSA9IHBnQnJvd3Nlci5Ob2RlLmV4dGVuZCh7CisgICAg ICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdCcm93c2VyLnRhYmxlQ2hpbGRUcmVlTm9kZUhpZXJh cmNoeSwKKyAgICAgIHBhcmVudF90eXBlOiBbJ3RhYmxlJywndmlldycsICdwYXJ0aXRpb24nXSwK ICAgICAgIHR5cGU6ICdydWxlJywKICAgICAgIHNxbEFsdGVySGVscDogJ3NxbC1hbHRlcnJ1bGUu aHRtbCcsCiAgICAgICBzcWxDcmVhdGVIZWxwOiAnc3FsLWNyZWF0ZXJ1bGUuaHRtbCcsCkBAIC05 OCw2ICsxMDAsMTIgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUucnVsZScsIFsKICAgICAgICAgICBj YXRlZ29yeTogJ2NyZWF0ZScsIHByaW9yaXR5OiA0LCBsYWJlbDogZ2V0dGV4dCgnUnVsZS4uLicp LAogICAgICAgICAgIGljb246ICd3Y1RhYkljb24gaWNvbi1ydWxlJywgZGF0YToge2FjdGlvbjog J2NyZWF0ZScsIGNoZWNrOiB0cnVlfSwKICAgICAgICAgICBlbmFibGU6ICdjYW5DcmVhdGUnCisg ICAgICAgIH0seworICAgICAgICAgIG5hbWU6ICdjcmVhdGVfcnVsZScsIG5vZGU6ICdwYXJ0aXRp b24nLCBtb2R1bGU6IHRoaXMsCisgICAgICAgICAgYXBwbGllczogWydvYmplY3QnLCAnY29udGV4 dCddLCBjYWxsYmFjazogJ3Nob3dfb2JqX3Byb3BlcnRpZXMnLAorICAgICAgICAgIGNhdGVnb3J5 OiAnY3JlYXRlJywgcHJpb3JpdHk6IDQsIGxhYmVsOiBnZXR0ZXh0KCdSdWxlLi4uJyksCisgICAg ICAgICAgaWNvbjogJ3djVGFiSWNvbiBpY29uLXJ1bGUnLCBkYXRhOiB7YWN0aW9uOiAnY3JlYXRl JywgY2hlY2s6IHRydWV9LAorICAgICAgICAgIGVuYWJsZTogJ2NhbkNyZWF0ZScKICAgICAgICAg fQogICAgICAgICBdKTsKICAgICAgIH0sCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvc3RhdGljL2pz L3BhcnRpdGlvbi51dGlscy5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9z ZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9zdGF0aWMvanMvcGFydGl0aW9uLnV0aWxz LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZTQ2YmEKLS0tIC9kZXYv bnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRh YmFzZXMvc2NoZW1hcy90YWJsZXMvc3RhdGljL2pzL3BhcnRpdGlvbi51dGlscy5qcwpAQCAtMCww ICsxLDMyMyBAQAorZGVmaW5lKAorICAgICAgICBbJ3NvdXJjZXMvZ2V0dGV4dCcsICdqcXVlcnkn LCAndW5kZXJzY29yZScsICdwZ2FkbWluLmJyb3dzZXInLAorICAgICAgICAnYmFja2Zvcm0nLCdi YWNrZ3JpZCcsICdwZ2FkbWluLmJyb3dzZXIuY29sbGVjdGlvbiddLAorZnVuY3Rpb24oZ2V0dGV4 dCwgJCwgXywgcGdCcm93c2VyLCBCYWNrZm9ybSwgQmFja2dyaWQpIHsKKworICBCYWNrZ3JpZC5Q YXJ0aXRpb25Sb3cgPSBCYWNrZ3JpZC5Sb3cuZXh0ZW5kKHsKKyAgICBtb2RlbER1cGxpY2F0ZUNv bG9yOiAibGlnaHRZZWxsb3ciLAorCisgICAgbW9kZWxVbmlxdWVDb2xvcjogIiNmZmYiLAorCisg ICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKCkgeworICAgICAgQmFja2dyaWQuUm93LnByb3RvdHlw ZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICB2YXIgc2VsZiA9IHRo aXM7CisgICAgICBzZWxmLm1vZGVsLm9uKCJjaGFuZ2U6aXNfYXR0YWNoIiwgZnVuY3Rpb24oKSB7 CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgc2VsZi5jb2x1bW5z LmVhY2goZnVuY3Rpb24oY29sKSB7CisgICAgICAgICAgICBpZiAoY29sLmdldCgnbmFtZScpID09 ICdwYXJ0aXRpb25fbmFtZScpIHsKKyAgICAgICAgICAgICAgdmFyIGlkeCA9IHNlbGYuY29sdW1u cy5pbmRleE9mKGNvbCksCisgICAgICAgICAgICAgICAgY2YgPSBjb2wuZ2V0KCJjZWxsRnVuY3Rp b24iKSwKKyAgICAgICAgICAgICAgICBjZWxsID0gbmV3IChjZi5hcHBseShjb2wsIFtzZWxmLm1v ZGVsXSkpKHsKKyAgICAgICAgICAgICAgICAgIGNvbHVtbjogY29sLAorICAgICAgICAgICAgICAg ICAgbW9kZWw6IHNlbGYubW9kZWwKKyAgICAgICAgICAgICAgICB9KSwKKyAgICAgICAgICAgICAg ICAgIG9sZENlbGwgPSBzZWxmLmNlbGxzW2lkeF07CisgICAgICAgICAgICAgICAgb2xkQ2VsbC5y ZW1vdmUoKTsKKyAgICAgICAgICAgICAgICBzZWxmLmNlbGxzW2lkeF0gPSBjZWxsOworICAgICAg ICAgICAgICAgIHNlbGYucmVuZGVyKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7Cisg ICAgICAgIH0sIDEwKTsKKyAgICAgIH0pOworICAgICAgc2VsZi5saXN0ZW5UbyhzZWxmLm1vZGVs LCAncGdhZG1pbi1zZXNzaW9uOm1vZGVsOmR1cGxpY2F0ZScsIHNlbGYubW9kZWxEdXBsaWNhdGUp OworICAgICAgc2VsZi5saXN0ZW5UbyhzZWxmLm1vZGVsLCAncGdhZG1pbi1zZXNzaW9uOm1vZGVs OnVuaXF1ZScsIHNlbGYubW9kZWxVbmlxdWUpOworICAgIH0sCisgICAgbW9kZWxEdXBsaWNhdGU6 IGZ1bmN0aW9uKCkgeworICAgICAgJCh0aGlzLmVsKS5yZW1vdmVDbGFzcygibmV3Iik7CisgICAg ICB0aGlzLmVsLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMubW9kZWxEdXBsaWNhdGVDb2xv cjsKKyAgICB9LAorICAgIG1vZGVsVW5pcXVlOiBmdW5jdGlvbigpIHsKKyAgICAgIHRoaXMuZWwu c3R5bGUuYmFja2dyb3VuZENvbG9yID0gdGhpcy5tb2RlbFVuaXF1ZUNvbG9yOworICAgIH0KKyAg fSk7CisKKyAgdmFyIGdldFBhcnRpdGlvbkNlbGwgPSBmdW5jdGlvbihtb2RlbCkgeworICAgIHZh ciBpc19hdHRhY2ggPSBtb2RlbC5nZXQoImlzX2F0dGFjaCIpOworICAgIGlmIChpc19hdHRhY2gp IHsKKyAgICAgIHZhciBvcHRpb25zID0gW107CisgICAgICBtb2RlbC5zZXQoeydwYXJ0aXRpb25f bmFtZSc6IHVuZGVmaW5lZH0sIHtzaWxlbnQ6dHJ1ZX0pOworICAgICAgXy5lYWNoKG1vZGVsLnRv cC50YWJsZV9vcHRpb25zLCBmdW5jdGlvbih0KSB7CisgICAgICAgIG9wdGlvbnMucHVzaChbdC5s YWJlbCwgdC52YWx1ZV0pOworICAgICAgfSk7CisgICAgICByZXR1cm4gQmFja2dyaWQuRXh0ZW5z aW9uLlNlbGVjdDJDZWxsLmV4dGVuZCh7b3B0aW9uVmFsdWVzOiBvcHRpb25zfSk7CisKKyAgICB9 IGVsc2UgeworICAgICAgcmV0dXJuIEJhY2tncmlkLlN0cmluZ0NlbGw7CisgICAgfQorICB9Owor CisgIEJhY2tmb3JtLlBhcnRpdGlvbktleU1vZGVsID0gcGdCcm93c2VyLk5vZGUuTW9kZWwuZXh0 ZW5kKHsKKyAgICAgZGVmYXVsdHM6IHsKKyAgICAgICBrZXlfdHlwZTogJ2NvbHVtbicsCisgICAg ICAgcHRfY29sdW1uOiB1bmRlZmluZWQsCisgICAgICAgZXhwcmVzc2lvbjogdW5kZWZpbmVkCisg ICAgIH0sCisgICAgIGtleXM6WydwdF9jb2x1bW4nXSwKKyAgICAgc2NoZW1hOiBbeworICAgICAg IGlkOiAna2V5X3R5cGUnLCBsYWJlbDonS2V5IHR5cGUnLCB0eXBlOidzZWxlY3QyJywgZWRpdGFi bGU6IHRydWUsCisgICAgICAgY2VsbDonc2VsZWN0MicsIGNlbGxIZWFkZXJDbGFzc2VzOiAnd2lk dGhfcGVyY2VudF8yNScsCisgICAgICAgc2VsZWN0Mjoge2FsbG93Q2xlYXI6IGZhbHNlfSwKKyAg ICAgICBvcHRpb25zOlt7CisgICAgICAgICBsYWJlbDogJ0NvbHVtbicsIHZhbHVlOiAnY29sdW1u JworICAgICAgIH0seworICAgICAgICAgbGFiZWw6ICdFeHByZXNzaW9uJywgdmFsdWU6ICdleHBy ZXNzaW9uJworICAgICAgIH1dCisgICAgIH0seworICAgICAgIGlkOiAncHRfY29sdW1uJywgbGFi ZWw6IGdldHRleHQoJ0NvbHVtbicpLCB0eXBlOid0ZXh0JywKKyAgICAgICBjZWxsOiBCYWNrZ3Jp ZC5FeHRlbnNpb24uU2VsZWN0MkRlcENlbGwuZXh0ZW5kKHsKKyAgICAgICAgIGtleVBhdGhBY2Nl c3NvcjogZnVuY3Rpb24ob2JqLCBwYXRoKSB7CisgICAgICAgICAgIHZhciByZXMgPSBvYmo7Cisg ICAgICAgICAgIGlmKF8uaXNBcnJheShyZXMpKSB7CisgICAgICAgICAgICAgcmV0dXJuIF8ubWFw KHJlcywgZnVuY3Rpb24obykgeyByZXR1cm4gb1sncHRfY29sdW1uJ10KKyAgICAgICAgICAgICB9 KTsKKyAgICAgICAgICAgfQorICAgICAgICAgICBwYXRoID0gcGF0aC5zcGxpdCgnLicpOworICAg ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg ICAgICBpZiAoXy5pc051bGwocmVzKSkgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgaWYgKF8u aXNFbXB0eShwYXRoW2ldKSkgY29udGludWU7CisgICAgICAgICAgICAgaWYgKCFfLmlzVW5kZWZp bmVkKHJlc1twYXRoW2ldXSkpIHJlcyA9IHJlc1twYXRoW2ldXTsKKyAgICAgICAgICAgfQorICAg ICAgICAgICByZXR1cm4gXy5pc09iamVjdChyZXMpICYmICFfLmlzQXJyYXkocmVzKSA/IG51bGwg OiByZXM7CisgICAgICAgICB9LAorICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7Cisg ICAgICAgICAvLyBIZXJlIHdlIHdpbGwgZGVjaWRlIGlmIHdlIG5lZWQgdG8gY2FsbCBVUkwKKyAg ICAgICAgIC8vIE9yIGZldGNoIHRoZSBkYXRhIGZyb20gcGFyZW50IGNvbHVtbnMgY29sbGVjdGlv bgorICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgICAgIGlmKHRoaXMubW9kZWwu aGFuZGxlcikgeworICAgICAgICAgICAgIEJhY2tncmlkLkV4dGVuc2lvbi5TZWxlY3QyRGVwQ2Vs bC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAg ICAgIC8vIERvIG5vdCBsaXN0ZW4gZm9yIGFueSBldmVudChzKSBmb3IgZXhpc3RpbmcgY29uc3Ry YWludC4KKyAgICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChzZWxmLm1vZGVsLmdldCgnb2lk JykpKSB7CisgICAgICAgICAgICAgICB2YXIgdGFibGVDb2xzID0gc2VsZi5tb2RlbC50b3AuZ2V0 KCdjb2x1bW5zJyk7CisgICAgICAgICAgICAgICBzZWxmLmxpc3RlblRvKHRhYmxlQ29scywgJ3Jl bW92ZScgLCBzZWxmLnJlc2V0Q29sT3B0aW9ucyk7CisgICAgICAgICAgICAgICBzZWxmLmxpc3Rl blRvKHRhYmxlQ29scywgJ2NoYW5nZTpuYW1lJywgc2VsZi5yZXNldENvbE9wdGlvbnMpOworICAg ICAgICAgICAgIH0KKworICAgICAgICAgICAgIHNlbGYuY3VzdG9tX29wdGlvbnMoKTsKKyAgICAg ICAgICAgfQorICAgICAgICAgfSwKKyAgICAgICAgIHJlc2V0Q29sT3B0aW9uczogZnVuY3Rpb24o bSkgeworICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgICAgc2V0VGltZW91 dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgc2VsZi5jdXN0b21fb3B0aW9ucygpOworICAg ICAgICAgICAgIHNlbGYucmVuZGVyLmFwcGx5KHNlbGYpOworICAgICAgICAgICB9LCA1MCk7Cisg ICAgICAgICB9LAorICAgICAgICAgY3VzdG9tX29wdGlvbnM6IGZ1bmN0aW9uKCkgeworICAgICAg ICAgICAvLyBXZSB3aWxsIGFkZCBhbGwgdGhlIGNvbHVtbnMgZW50ZXJlZCBieSB1c2VyIGluIHRh YmxlIG1vZGVsCisgICAgICAgICAgIHZhciBjb2x1bW5zID0gdGhpcy5tb2RlbC50b3AuZ2V0KCdj b2x1bW5zJyksCisgICAgICAgICAgICAgYWRkZWRfY29sdW1uc19mcm9tX3RhYmxlcyA9IFtdOwor CisgICAgICAgICAgIGlmIChjb2x1bW5zLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICBfLmVh Y2goY29sdW1ucy5tb2RlbHMsIGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgICAgICAgdmFyIGNv bCA9IG0uZ2V0KCduYW1lJyk7CisgICAgICAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKGNv bCkgJiYgIV8uaXNOdWxsKGNvbCkpIHsKKyAgICAgICAgICAgICAgICAgICBhZGRlZF9jb2x1bW5z X2Zyb21fdGFibGVzLnB1c2goCisgICAgICAgICAgICAgICAgICAgICB7bGFiZWw6IGNvbCwgdmFs dWU6IGNvbCwgaW1hZ2U6J2ljb24tY29sdW1uJ30KKyAgICAgICAgICAgICAgICAgICApOworICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgfSk7CisgICAgICAgICAgIH0KKyAgICAgICAg ICAgLy8gU2V0IHRoZSB2YWx1ZXMgaW4gdG8gb3B0aW9ucyBzbyB0aGF0IHVzZXIgY2FuIHNlbGVj dAorICAgICAgICAgICB0aGlzLmNvbHVtbi5zZXQoJ29wdGlvbnMnLCBhZGRlZF9jb2x1bW5zX2Zy b21fdGFibGVzKTsKKyAgICAgICAgIH0sCisgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uKCkgewor ICAgICAgICAgICBpZih0aGlzLm1vZGVsLmhhbmRsZXIpIHsKKyAgICAgICAgICAgICB2YXIgc2Vs ZiA9IHRoaXMsCisgICAgICAgICAgICAgdGFibGVDb2xzID0gc2VsZi5tb2RlbC50b3AuZ2V0KCdj b2x1bW5zJyk7CisgICAgICAgICAgICAgc2VsZi5zdG9wTGlzdGVuaW5nKHRhYmxlQ29scywgJ3Jl bW92ZScgLCBzZWxmLnJlc2V0Q29sT3B0aW9ucyk7CisgICAgICAgICAgICAgc2VsZi5zdG9wTGlz dGVuaW5nKHRhYmxlQ29scywgJ2NoYW5nZTpuYW1lJyAsIHNlbGYucmVzZXRDb2xPcHRpb25zKTsK KyAgICAgICAgICAgICBCYWNrZ3JpZC5FeHRlbnNpb24uU2VsZWN0MkRlcENlbGwucHJvdG90eXBl LnJlbW92ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAgICB9CisgICAgICAgICB9 CisgICAgICAgfSksCisgICAgICAgZGVwczogWydrZXlfdHlwZSddLAorICAgICAgIGNlbGxIZWFk ZXJDbGFzc2VzOiAnd2lkdGhfcGVyY2VudF8zMCcsCisgICAgICAgdHJhbnNmb3JtIDogZnVuY3Rp b24oZGF0YSl7CisgICAgICAgICB2YXIgcmVzID0gW107CisgICAgICAgICBpZiAoZGF0YSAmJiBf LmlzQXJyYXkoZGF0YSkpIHsKKyAgICAgICAgICAgXy5lYWNoKGRhdGEsIGZ1bmN0aW9uKGQpIHsK KyAgICAgICAgICAgICByZXMucHVzaCh7bGFiZWw6IGQubGFiZWwsIHZhbHVlOiBkLmxhYmVsLCBp bWFnZTonaWNvbi1jb2x1bW4nfSk7CisgICAgICAgICAgIH0pCisgICAgICAgICB9CisgICAgICAg ICByZXR1cm4gcmVzOworICAgICAgIH0sCisgICAgICAgc2VsZWN0Mjp7YWxsb3dDbGVhcjpmYWxz ZX0sCisgICAgICAgZWRpdGFibGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgIGlmIChtLmdldCgn a2V5X3R5cGUnKSA9PSAnZXhwcmVzc2lvbicpIHsKKyAgICAgICAgICAgc2V0VGltZW91dCggZnVu Y3Rpb24oKSB7CisgICAgICAgICAgICAgIG0uc2V0KCdwdF9jb2x1bW4nLCB1bmRlZmluZWQpOwor ICAgICAgICAgICB9LCAxMCk7CisgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgIH0K KyAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgIH0KKyAgICAgfSx7CisgICAgICAgaWQ6ICdl eHByZXNzaW9uJywgbGFiZWw6J0V4cHJlc3Npb24nLCB0eXBlOid0ZXh0JywKKyAgICAgICBjZWxs OkJhY2tncmlkLkV4dGVuc2lvbi5TdHJpbmdEZXBDZWxsLAorICAgICAgIGNlbGxIZWFkZXJDbGFz c2VzOiAnd2lkdGhfcGVyY2VudF80NScsCisgICAgICAgZGVwczogWydrZXlfdHlwZSddLAorICAg ICAgIGVkaXRhYmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAgICBpZiAobS5nZXQoJ2tleV90eXBl JykgPT0gJ2NvbHVtbicpIHsKKyAgICAgICAgICAgc2V0VGltZW91dCggZnVuY3Rpb24oKSB7Cisg ICAgICAgICAgICAgIG0uc2V0KCdleHByZXNzaW9uJywgdW5kZWZpbmVkKTsKKyAgICAgICAgICAg fSwgMTApOworICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICB9CisgICAgICAgICBy ZXR1cm4gdHJ1ZTsKKyAgICAgICB9CisgICAgIH0KKyAgICBdLAorICAgIHZhbGlkYXRlOiBmdW5j dGlvbihrZXlzKSB7CisgICAgICB2YXIgY29sX3R5cGUgPSB0aGlzLmdldCgna2V5X3R5cGUnKSwK KyAgICAgICAgIHB0X2NvbHVtbiA9IHRoaXMuZ2V0KCdwdF9jb2x1bW4nKSwKKyAgICAgICAgIGV4 cHJlc3Npb24gPSB0aGlzLmdldCgnZXhwcmVzc2lvbicpOworCisgICAgICAvLyBIYXZlIHRvIGNs ZWFyIGV4aXN0aW5nIHZhbGlkYXRpb24gYmVmb3JlIGluaXRpYXRpbmcgY3VycmVudCBzdGF0ZQor ICAgICAgLy8gdmFsaWRhdGlvbiBvbmx5CisgICAgICB0aGlzLmVycm9yTW9kZWwuY2xlYXIoKTsK KworICAgICAgaWYgKF8uaXNVbmRlZmluZWQoY29sX3R5cGUpIHx8IF8uaXNOdWxsKGNvbF90eXBl KSB8fAorICAgICAgICBTdHJpbmcoY29sX3R5cGUpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykg PT0gJycpIHsKKyAgICAgICAgbXNnID0gZ2V0dGV4dCgnUGFydGl0aW9uIGtleSB0eXBlIGNhbm5v dCBiZSBlbXB0eS4nKTsKKyAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgna2V5X3R5cGUnLCBt c2cpOworICAgICAgICByZXR1cm4gbXNnOworICAgICAgfQorICAgICAgZWxzZSBpZiAoY29sX3R5 cGUgPT0gJ2NvbHVtbicgJiYKKyAgICAgICAgXy5pc1VuZGVmaW5lZChwdF9jb2x1bW4pIHx8IF8u aXNOdWxsKHB0X2NvbHVtbikgfHwKKyAgICAgICAgU3RyaW5nKHB0X2NvbHVtbikucmVwbGFjZSgv XlxzK3xccyskL2csICcnKSA9PSAnJykgeworICAgICAgICBtc2cgPSBnZXR0ZXh0KCdQYXJ0aXRp b24ga2V5IGNvbHVtbiBjYW5ub3QgYmUgZW1wdHkuJyk7CisgICAgICAgIHRoaXMuZXJyb3JNb2Rl bC5zZXQoJ3B0X2NvbHVtbicsIG1zZyk7CisgICAgICAgIHJldHVybiBtc2c7CisgICAgICB9Cisg ICAgICBlbHNlIGlmIChjb2xfdHlwZSA9PSAnZXhwcmVzc2lvbicgJiYKKyAgICAgICAgXy5pc1Vu ZGVmaW5lZChleHByZXNzaW9uKSB8fCBfLmlzTnVsbChleHByZXNzaW9uKSB8fAorICAgICAgICBT dHJpbmcoZXhwcmVzc2lvbikucmVwbGFjZSgvXlxzK3xccyskL2csICcnKSA9PSAnJykgeworICAg ICAgICBtc2cgPSBnZXR0ZXh0KCdQYXJ0aXRpb24ga2V5IGV4cHJlc3Npb24gY2Fubm90IGJlIGVt cHR5LicpOworICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCdleHByZXNzaW9uJywgbXNnKTsK KyAgICAgICAgcmV0dXJuIG1zZzsKKyAgICAgIH0KKworICAgICAgcmV0dXJuIG51bGw7CisgICAg fQorICB9KTsKKworICBCYWNrZm9ybS5QYXJ0aXRpb25zTW9kZWwgPSBwZ0Jyb3dzZXIuTm9kZS5N b2RlbC5leHRlbmQoeworICAgIGRlZmF1bHRzOiB7CisgICAgICBvaWQ6IHVuZGVmaW5lZCwKKyAg ICAgIGlzX2F0dGFjaDogZmFsc2UsCisgICAgICBwYXJ0aXRpb25fbmFtZTogdW5kZWZpbmVkLAor ICAgICAgdmFsdWVzX2Zyb206IHVuZGVmaW5lZCwKKyAgICAgIHZhbHVlc190bzogdW5kZWZpbmVk LAorICAgICAgdmFsdWVzX2luOiB1bmRlZmluZWQKKyAgICB9LAorICAgIGtleXM6WydwYXJ0aXRp b25fbmFtZSddLAorICAgIHNjaGVtYTogW3sKKyAgICAgIGlkOiAnb2lkJywgbGFiZWw6IGdldHRl eHQoJ09JRCcpLCB0eXBlOiAndGV4dCcKKyAgICB9LHsKKyAgICAgIGlkOiAnaXNfYXR0YWNoJywg bGFiZWw6Z2V0dGV4dCgnT3BlcmF0aW9uJyksIGNlbGw6ICdzd2l0Y2gnLAorICAgICAgdHlwZTog J3N3aXRjaCcsIG9wdGlvbnM6IHsgJ29uVGV4dCc6ICdBdHRhY2gnLCAnb2ZmVGV4dCc6ICdDcmVh dGUnfSwKKyAgICAgIGNlbGxIZWFkZXJDbGFzc2VzOiAnd2lkdGhfcGVyY2VudF81JywKKyAgICAg IGVkaXRhYmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAgIGlmIChtIGluc3RhbmNlb2YgQmFja2Jv bmUuTW9kZWwgJiYgbS5pc05ldygpICYmICFtLnRvcC5pc05ldygpKQorICAgICAgICAgIHJldHVy biB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfSx7CisgICAgICBp ZDogJ3BhcnRpdGlvbl9uYW1lJywgbGFiZWw6IGdldHRleHQoJ05hbWUnKSwgdHlwZTogJ3RleHQn LCBjZWxsOidzdHJpbmcnLAorICAgICAgY2VsbEhlYWRlckNsYXNzZXM6ICd3aWR0aF9wZXJjZW50 XzI1JywKKyAgICAgIGVkaXRhYmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAgIGlmIChtIGluc3Rh bmNlb2YgQmFja2JvbmUuTW9kZWwgJiYgbS5pc05ldygpKQorICAgICAgICAgIHJldHVybiB0cnVl OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9LCBjZWxsRnVuY3Rpb246IGdldFBhcnRp dGlvbkNlbGwKKyAgICB9LHsKKyAgICAgIGlkOiAndmFsdWVzX2Zyb20nLCBsYWJlbDonRnJvbScs IHR5cGU6J3RleHQnLAorICAgICAgY2VsbDpCYWNrZ3JpZC5FeHRlbnNpb24uU3RyaW5nRGVwQ2Vs bCwKKyAgICAgIGNlbGxIZWFkZXJDbGFzc2VzOiAnd2lkdGhfcGVyY2VudF8yMCcsCisgICAgICBl ZGl0YWJsZTogZnVuY3Rpb24obSkgeworICAgICAgIGlmKG0uaGFuZGxlciAmJiBtLmhhbmRsZXIu dG9wICYmCisgICAgICAgICAgbS5oYW5kbGVyLnRvcC5hdHRyaWJ1dGVzICYmCisgICAgICAgICAg bS5oYW5kbGVyLnRvcC5hdHRyaWJ1dGVzLnBhcnRpdGlvbl90eXBlID09ICdyYW5nZScgJiYKKyAg ICAgICAgICBtIGluc3RhbmNlb2YgQmFja2JvbmUuTW9kZWwgJiYgbS5pc05ldygpKQorICAgICAg ICAgIHJldHVybiB0cnVlOworICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgIH0KKyAgICB9LHsK KyAgICAgIGlkOiAndmFsdWVzX3RvJywgbGFiZWw6J1RvJywgdHlwZTondGV4dCcsCisgICAgICBj ZWxsOkJhY2tncmlkLkV4dGVuc2lvbi5TdHJpbmdEZXBDZWxsLAorICAgICAgY2VsbEhlYWRlckNs YXNzZXM6ICd3aWR0aF9wZXJjZW50XzIwJywKKyAgICAgIGVkaXRhYmxlOiBmdW5jdGlvbihtKSB7 CisgICAgICAgIGlmKG0uaGFuZGxlciAmJiBtLmhhbmRsZXIudG9wICYmCisgICAgICAgICAgbS5o YW5kbGVyLnRvcC5hdHRyaWJ1dGVzICYmCisgICAgICAgICAgbS5oYW5kbGVyLnRvcC5hdHRyaWJ1 dGVzLnBhcnRpdGlvbl90eXBlID09ICdyYW5nZScgJiYKKyAgICAgICAgICBtIGluc3RhbmNlb2Yg QmFja2JvbmUuTW9kZWwgJiYgbS5pc05ldygpKQorICAgICAgICAgIHJldHVybiB0cnVlOworICAg ICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgfSx7CisgICAgICBpZDogJ3ZhbHVlc19p bicsIGxhYmVsOidJbicsIHR5cGU6J3RleHQnLAorICAgICAgY2VsbDpCYWNrZ3JpZC5FeHRlbnNp b24uU3RyaW5nRGVwQ2VsbCwKKyAgICAgIGNlbGxIZWFkZXJDbGFzc2VzOiAnd2lkdGhfcGVyY2Vu dF8yNScsCisgICAgICBlZGl0YWJsZTogZnVuY3Rpb24obSkgeworICAgICAgICBpZihtLmhhbmRs ZXIgJiYgbS5oYW5kbGVyLnRvcCAmJgorICAgICAgICAgIG0uaGFuZGxlci50b3AuYXR0cmlidXRl cyAmJgorICAgICAgICAgIG0uaGFuZGxlci50b3AuYXR0cmlidXRlcy5wYXJ0aXRpb25fdHlwZSA9 PSAnbGlzdCcgJiYKKyAgICAgICAgICBtIGluc3RhbmNlb2YgQmFja2JvbmUuTW9kZWwgJiYgbS5p c05ldygpKQorICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg ICAgICB9CisgICAgfV0sCisgICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGtleXMpIHsKKyAgICAgIHZh ciBwYXJ0aXRpb25fbmFtZSA9IHRoaXMuZ2V0KCdwYXJ0aXRpb25fbmFtZScpLAorICAgICAgICAg dmFsdWVzX2Zyb20gPSB0aGlzLmdldCgndmFsdWVzX2Zyb20nKSwKKyAgICAgICAgIHZhbHVlc190 byA9IHRoaXMuZ2V0KCd2YWx1ZXNfdG8nKSwKKyAgICAgICAgIHZhbHVlc19pbiA9IHRoaXMuZ2V0 KCd2YWx1ZXNfaW4nKTsKKworICAgICAgLy8gSGF2ZSB0byBjbGVhciBleGlzdGluZyB2YWxpZGF0 aW9uIGJlZm9yZSBpbml0aWF0aW5nIGN1cnJlbnQgc3RhdGUKKyAgICAgIC8vIHZhbGlkYXRpb24g b25seQorICAgICAgdGhpcy5lcnJvck1vZGVsLmNsZWFyKCk7CisKKyAgICAgIGlmIChfLmlzVW5k ZWZpbmVkKHBhcnRpdGlvbl9uYW1lKSB8fCBfLmlzTnVsbChwYXJ0aXRpb25fbmFtZSkgfHwKKyAg ICAgICBTdHJpbmcocGFydGl0aW9uX25hbWUpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykgPT0g JycpIHsKKyAgICAgICBtc2cgPSBnZXR0ZXh0KCdQYXJ0aXRpb24gbmFtZSBjYW5ub3QgYmUgZW1w dHkuJyk7CisgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgncGFydGl0aW9uX25hbWUnLCBtc2cp OworICAgICAgIHJldHVybiBtc2c7CisgICAgICB9CisKKyAgICAgIGlmICh0aGlzLnRvcC5nZXQo J3BhcnRpdGlvbl90eXBlJykgPT0gJ3JhbmdlJykgeworICAgICAgICBpZiAoXy5pc1VuZGVmaW5l ZCh2YWx1ZXNfZnJvbSkgfHwgXy5pc051bGwodmFsdWVzX2Zyb20pIHx8CisgICAgICAgICAgU3Ry aW5nKHZhbHVlc19mcm9tKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpID09ICcnKSB7CisgICAg ICAgICAgbXNnID0gZ2V0dGV4dCgnRm9yIHJhbmdlIHBhcnRpdGlvbiBGcm9tIGZpZWxkIGNhbm5v dCBiZSBlbXB0eS4nKTsKKyAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCd2YWx1ZXNfZnJv bScsIG1zZyk7CisgICAgICAgICAgcmV0dXJuIG1zZzsKKyAgICAgICAgfSBlbHNlIGlmIChfLmlz VW5kZWZpbmVkKHZhbHVlc190bykgfHwgXy5pc051bGwodmFsdWVzX3RvKSB8fAorICAgICAgICAg IFN0cmluZyh2YWx1ZXNfdG8pLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykgPT0gJycpIHsKKyAg ICAgICAgICBtc2cgPSBnZXR0ZXh0KCdGb3IgcmFuZ2UgcGFydGl0aW9uIFRvIGZpZWxkIGNhbm5v dCBiZSBlbXB0eS4nKTsKKyAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCd2YWx1ZXNfdG8n LCBtc2cpOworICAgICAgICAgIHJldHVybiBtc2c7CisgICAgICAgIH0KKyAgICAgIH0gZWxzZSBp ZiAodGhpcy50b3AuZ2V0KCdwYXJ0aXRpb25fdHlwZScpID09ICdsaXN0JykgeworICAgICAgICBp ZiAoXy5pc1VuZGVmaW5lZCh2YWx1ZXNfaW4pIHx8IF8uaXNOdWxsKHZhbHVlc19pbikgfHwKKyAg ICAgICAgICBTdHJpbmcodmFsdWVzX2luKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpID09ICcn KSB7CisgICAgICAgICAgbXNnID0gZ2V0dGV4dCgnRm9yIGxpc3QgcGFydGl0aW9uIEluIGZpZWxk IGNhbm5vdCBiZSBlbXB0eS4nKTsKKyAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCd2YWx1 ZXNfaW4nLCBtc2cpOworICAgICAgICAgIHJldHVybiBtc2c7CisgICAgICAgIH0KKyAgICAgIH0K KworICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICB9KTsKKworfSk7CmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvc3RhdGljL2pzL3RhYmxlLmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3N0YXRpYy9qcy90YWJsZS5q cwppbmRleCBkYmQxNzFlLi4xNGYxMzBlIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvc3RhdGljL2pz L3RhYmxlLmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9zdGF0aWMvanMvdGFibGUuanMKQEAgLTMsOCArMywx MCBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS50YWJsZScsIFsKICAgJ3VuZGVyc2NvcmUuc3RyaW5n JywgJ3BnYWRtaW4nLCAncGdhZG1pbi5icm93c2VyJywgJ2FsZXJ0aWZ5JywKICAgJ3NvdXJjZXMv YWxlcnRzL2FsZXJ0aWZ5X3dyYXBwZXInLAogICAncGdhZG1pbi5icm93c2VyLmNvbGxlY3Rpb24n LCAncGdhZG1pbi5ub2RlLmNvbHVtbicsCi0gICdwZ2FkbWluLm5vZGUuY29uc3RyYWludHMnCi1d LCBmdW5jdGlvbihnZXR0ZXh0LCB1cmxfZm9yLCAkLCBfLCBTLCBwZ0FkbWluLCBwZ0Jyb3dzZXIs IGFsZXJ0aWZ5LCBBbGVydGlmeVdyYXBwZXIpIHsKKyAgJ3BnYWRtaW4ubm9kZS5jb25zdHJhaW50 cycsICdwZ2FkbWluLmJyb3dzZXIudGFibGUucGFydGl0aW9uLnV0aWxzJworXSwgZnVuY3Rpb24o CisgIGdldHRleHQsIHVybF9mb3IsICQsIF8sIFMsIHBnQWRtaW4sIHBnQnJvd3NlciwgYWxlcnRp ZnksIEFsZXJ0aWZ5V3JhcHBlcgorKSB7CiAKICAgaWYgKCFwZ0Jyb3dzZXIuTm9kZXNbJ2NvbGwt dGFibGUnXSkgewogICAgIHZhciBkYXRhYmFzZXMgPSBwZ0Jyb3dzZXIuTm9kZXNbJ2NvbGwtdGFi bGUnXSA9CkBAIC0xMiw3ICsxNCw3IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnRhYmxlJywgWwog ICAgICAgICBub2RlOiAndGFibGUnLAogICAgICAgICBsYWJlbDogZ2V0dGV4dCgnVGFibGVzJyks CiAgICAgICAgIHR5cGU6ICdjb2xsLXRhYmxlJywKLSAgICAgICAgY29sdW1uczogWyduYW1lJywg J3JlbG93bmVyJywgJ2Rlc2NyaXB0aW9uJ10sCisgICAgICAgIGNvbHVtbnM6IFsnbmFtZScsICdy ZWxvd25lcicsICdpc19wYXJ0aXRpb25lZCcsICdkZXNjcmlwdGlvbiddLAogICAgICAgICBoYXNT dGF0aXN0aWNzOiB0cnVlLAogICAgICAgICBzdGF0c1ByZXR0aWZ5RmllbGRzOiBbJ1NpemUnLCAn SW5kZXhlcyBzaXplJywgJ1RhYmxlIHNpemUnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ1RvYXN0IHRhYmxlIHNpemUnLCAnVHVwbGUgbGVuZ3RoJywKQEAgLTIyLDYgKzI0LDcgQEAg ZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFibGUnLCBbCiAKICAgaWYgKCFwZ0Jyb3dzZXIuTm9kZXNb J3RhYmxlJ10pIHsKICAgICBwZ0Jyb3dzZXIuTm9kZXNbJ3RhYmxlJ10gPSBwZ0Jyb3dzZXIuTm9k ZS5leHRlbmQoeworICAgICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6IHBnQnJvd3Nlci50YWJsZUNo aWxkVHJlZU5vZGVIaWVyYXJjaHksCiAgICAgICB0eXBlOiAndGFibGUnLAogICAgICAgbGFiZWw6 IGdldHRleHQoJ1RhYmxlJyksCiAgICAgICBjb2xsZWN0aW9uX3R5cGU6ICdjb2xsLXRhYmxlJywK QEAgLTM5LDcgKzQyLDcgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFibGUnLCBbCiAgICAgICBo ZWlnaHQ6ICc5NSUnLAogICAgICAgd2lkdGg6ICc4NSUnLAogICAgICAgSW5pdDogZnVuY3Rpb24o KSB7Ci0gICAgICAgIC8qIEF2b2lkIG11bGl0cGxlIHJlZ2lzdHJhdGlvbiBvZiBtZW51cyAqLwor ICAgICAgICAvKiBBdm9pZCBtdWx0aXBsZSByZWdpc3RyYXRpb24gb2YgbWVudXMgKi8KICAgICAg ICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpCiAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTI4NCw3 ICsyODcsMTAgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFibGUnLCBbCiAgICAgICAgICAgaGFz dG9hc3R0YWJsZTogdHJ1ZSwKICAgICAgICAgICB0b2FzdF9hdXRvdmFjdXVtX2VuYWJsZWQ6IGZh bHNlLAogICAgICAgICAgIGF1dG92YWN1dW1fZW5hYmxlZDogZmFsc2UsCi0gICAgICAgICAgcHJp bWFyeV9rZXk6IFtdCisgICAgICAgICAgcHJpbWFyeV9rZXk6IFtdLAorICAgICAgICAgIHBhcnRp dGlvbnM6IFtdLAorICAgICAgICAgIHBhcnRpdGlvbl90eXBlOiAncmFuZ2UnLAorICAgICAgICAg IGlzX3BhcnRpdGlvbmVkOiBmYWxzZQogICAgICAgICB9LAogICAgICAgICAvLyBEZWZhdWx0IHZh bHVlcyEKICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oYXR0cnMsIGFyZ3MpIHsKQEAgLTMz MCwxMiArMzM2LDM3IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnRhYmxlJywgWwogICAgICAgICAg ICAgcmV0dXJuICghKGQgJiYgZC5sYWJlbC5tYXRjaCgvcGdfZ2xvYmFsLykpKQogICAgICAgICAg IH0KICAgICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdwYXJ0aXRpb24nLCB0eXBlOiAnZ3JvdXAn LCBsYWJlbDogZ2V0dGV4dCgnUGFydGl0aW9uJyksCisgICAgICAgICAgbW9kZTogWydlZGl0Jywg J2NyZWF0ZSddLCBtaW5fdmVyc2lvbjogMTAwMDAwLAorICAgICAgICAgIHZpc2libGU6IGZ1bmN0 aW9uKG0pIHsKKyAgICAgICAgICAgIC8vIEFsd2F5cyBzaG93IGluIGNhc2Ugb2YgY3JlYXRlIG1v ZGUKKyAgICAgICAgICAgIGlmIChtLmlzTmV3KCkgfHwgbS5nZXQoJ2lzX3BhcnRpdGlvbmVkJykp CisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor ICAgICAgICAgIH0KKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdpc19wYXJ0aXRpb25lZCcs IGxhYmVsOmdldHRleHQoJ1BhcnRpdGlvbmVkIFRhYmxlPycpLCBjZWxsOiAnc3dpdGNoJywKKyAg ICAgICAgICB0eXBlOiAnc3dpdGNoJywgbW9kZTogWydwcm9wZXJ0aWVzJywgJ2NyZWF0ZScsICdl ZGl0J10sCisgICAgICAgICAgdmlzaWJsZTogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgaWYo IV8uaXNVbmRlZmluZWQobS5ub2RlX2luZm8pICYmICFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZv LnNlcnZlcikKKyAgICAgICAgICAgICAgJiYgIV8uaXNVbmRlZmluZWQobS5ub2RlX2luZm8uc2Vy dmVyLnZlcnNpb24pICYmCisgICAgICAgICAgICAgIG0ubm9kZV9pbmZvLnNlcnZlci52ZXJzaW9u ID49IDEwMDAwMCkKKyAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKKyAgICAgICAgICB9LAorICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlvbiht KSB7CisgICAgICAgICAgICBpZiAoIW0uaXNOZXcoKSkKKyAgICAgICAgICAgICAgcmV0dXJuIHRy dWU7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICB9LHsK ICAgICAgICAgICBpZDogJ2Rlc2NyaXB0aW9uJywgbGFiZWw6IGdldHRleHQoJ0NvbW1lbnQnKSwg dHlwZTogJ211bHRpbGluZScsCiAgICAgICAgICAgbW9kZTogWydwcm9wZXJ0aWVzJywgJ2NyZWF0 ZScsICdlZGl0J10sIGRpc2FibGVkOiAnaW5TY2hlbWEnCiAgICAgICAgIH0sewogICAgICAgICAg IGlkOiAnY29sbF9pbmhlcml0cycsIGxhYmVsOiBnZXR0ZXh0KCdJbmhlcml0ZWQgZnJvbSB0YWJs ZShzKScpLAogICAgICAgICAgIHVybDogJ2dldF9pbmhlcml0cycsIHR5cGU6ICdhcnJheScsIGdy b3VwOiBnZXR0ZXh0KCdDb2x1bW5zJyksCi0gICAgICAgICAgZGlzYWJsZWQ6ICdjaGVja0luaGVy aXRhbmNlJywgZGVwczogWyd0eXBuYW1lJ10sCisgICAgICAgICAgZGlzYWJsZWQ6ICdjaGVja0lu aGVyaXRhbmNlJywgZGVwczogWyd0eXBuYW1lJywgJ2lzX3BhcnRpdGlvbmVkJ10sCiAgICAgICAg ICAgbW9kZTogWydjcmVhdGUnLCAnZWRpdCddLAogICAgICAgICAgIHNlbGVjdDI6IHsgbXVsdGlw bGU6IHRydWUsIGFsbG93Q2xlYXI6IHRydWUsCiAgICAgICAgICAgcGxhY2Vob2xkZXI6IGdldHRl eHQoJ1NlbGVjdCB0byBpbmhlcml0IGZyb20uLi4nKX0sCkBAIC00MzIsNyArNDYzLDI2IEBAIGRl ZmluZSgncGdhZG1pbi5ub2RlLnRhYmxlJywgWwogICAgICAgICAgIG1vZGVsOiBwZ0Jyb3dzZXIu Tm9kZXNbJ2NvbHVtbiddLm1vZGVsLAogICAgICAgICAgIHN1Ym5vZGU6IHBnQnJvd3Nlci5Ob2Rl c1snY29sdW1uJ10ubW9kZWwsCiAgICAgICAgICAgbW9kZTogWydjcmVhdGUnLCAnZWRpdCddLAot ICAgICAgICAgIGRpc2FibGVkOiAnaW5TY2hlbWEnLCBkZXBzOiBbJ3R5cG5hbWUnXSwKKyAgICAg ICAgICBkaXNhYmxlZDogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBw YXJ0aXRpb25lZCB0YWJsZSByZW1vdmUgaW5oZXJpdGVkIGNvbHVtbnMKKyAgICAgICAgICAgIGlm IChtLmlzTmV3KCkgJiYgbS5nZXQoJ2lzX3BhcnRpdGlvbmVkJykpIHsKKyAgICAgICAgICAgICAg c2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29sbCA9IG0uZ2V0 KCdjb2x1bW5zJyk7CisgICAgICAgICAgICAgICAgY29sbC5yZW1vdmUoY29sbC5maWx0ZXIoZnVu Y3Rpb24obW9kZWwpIHsKKyAgICAgICAgICAgICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKG1vZGVs LmdldCgnaW5oZXJpdGVkZnJvbScpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl OworICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfSkpOwor ICAgICAgICAgICAgICB9LCAxMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKHRo aXMubm9kZV9pbmZvICYmICAnY2F0YWxvZycgaW4gdGhpcy5ub2RlX2luZm8pCisgICAgICAgICAg ICB7CisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0sCisgICAgICAgICAgZGVwczogWyd0eXBuYW1l JywgJ2lzX3BhcnRpdGlvbmVkJ10sCiAgICAgICAgICAgY2FuQWRkOiAnY2hlY2tfZ3JpZF9hZGRf Y29uZGl0aW9uJywKICAgICAgICAgICBjYW5FZGl0OiB0cnVlLCBjYW5EZWxldGU6IHRydWUsCiAg ICAgICAgICAgLy8gRm9yIGVhY2ggcm93IGVkaXQvZGVsZXRlIGJ1dHRvbiBlbmFibGUvZGlzYWJs ZQpAQCAtNTM1LDEwICs1ODUsMjIgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFibGUnLCBbCiAg ICAgICAgICAgICAgIHN1Ym5vZGU6IHBnQnJvd3Nlci5Ob2Rlc1sncHJpbWFyeV9rZXknXS5tb2Rl bCwKICAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLCB0eXBlOiAnY29sbGVjdGlvbicsCiAg ICAgICAgICAgICAgIGdyb3VwOiBnZXR0ZXh0KCdQcmltYXJ5IEtleScpLCBtb2RlOiBbJ2VkaXQn LCAnY3JlYXRlJ10sCi0gICAgICAgICAgICAgIGNhbkVkaXQ6IHRydWUsIGNhbkRlbGV0ZTogdHJ1 ZSwKKyAgICAgICAgICAgICAgY2FuRWRpdDogdHJ1ZSwgY2FuRGVsZXRlOiB0cnVlLCBkZXBzOlsn aXNfcGFydGl0aW9uZWQnXSwKICAgICAgICAgICAgICAgY29udHJvbDogJ3VuaXF1ZS1jb2wtY29s bGVjdGlvbicsCiAgICAgICAgICAgICAgIGNvbHVtbnMgOiBbJ25hbWUnLCAnY29sdW1ucyddLAot ICAgICAgICAgICAgICBjYW5BZGQ6IHRydWUsCisgICAgICAgICAgICAgIGNhbkFkZDogZnVuY3Rp b24obSkgeworICAgICAgICAgICAgICAgIGlmIChtLmdldCgnaXNfcGFydGl0aW9uZWQnKSkgewor ICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg ICAgICAgdmFyIGNvbGwgPSBtLmdldCgncHJpbWFyeV9rZXknKTsKKyAgICAgICAgICAgICAgICAg ICAgY29sbC5yZW1vdmUoY29sbC5maWx0ZXIoZnVuY3Rpb24obW9kZWwpIHsKKyAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAg ICAgICAgICAgICAgfSwgMTApOworICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg ICAgICB9LAogICAgICAgICAgICAgICBjYW5BZGRSb3c6IGZ1bmN0aW9uKG0pIHsKICAgICAgICAg ICAgICAgIC8vIFVzZXIgY2FuIG9ubHkgYWRkIG9uZSBwcmltYXJ5IGtleQogICAgICAgICAgICAg ICAgdmFyIGNvbHVtbnMgPSBtLmdldCgnY29sdW1ucycpOwpAQCAtNTUzLDkgKzYxNSwyMSBAQCBk ZWZpbmUoJ3BnYWRtaW4ubm9kZS50YWJsZScsIFsKICAgICAgICAgICAgICAgc3Vibm9kZTogcGdC cm93c2VyLk5vZGVzWydmb3JlaWduX2tleSddLm1vZGVsLAogICAgICAgICAgICAgICBlZGl0YWJs ZTogZmFsc2UsIHR5cGU6ICdjb2xsZWN0aW9uJywKICAgICAgICAgICAgICAgZ3JvdXA6IGdldHRl eHQoJ0ZvcmVpZ24gS2V5JyksIG1vZGU6IFsnZWRpdCcsICdjcmVhdGUnXSwKLSAgICAgICAgICAg ICAgY2FuRWRpdDogdHJ1ZSwgY2FuRGVsZXRlOiB0cnVlLAorICAgICAgICAgICAgICBjYW5FZGl0 OiB0cnVlLCBjYW5EZWxldGU6IHRydWUsIGRlcHM6Wydpc19wYXJ0aXRpb25lZCddLAogICAgICAg ICAgICAgICBjb250cm9sOiAndW5pcXVlLWNvbC1jb2xsZWN0aW9uJywKLSAgICAgICAgICAgICAg Y2FuQWRkOiB0cnVlLAorICAgICAgICAgICAgICBjYW5BZGQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAg ICAgICAgICAgICBpZiAobS5nZXQoJ2lzX3BhcnRpdGlvbmVkJykpIHsKKyAgICAgICAgICAgICAg ICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBjb2xs ID0gbS5nZXQoJ2ZvcmVpZ25fa2V5Jyk7CisgICAgICAgICAgICAgICAgICAgIGNvbGwucmVtb3Zl KGNvbGwuZmlsdGVyKGZ1bmN0aW9uKG1vZGVsKSB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgICAgIH0s IDEwKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgfSwKICAgICAg ICAgICAgICAgY29sdW1ucyA6IFsnbmFtZScsICdjb2x1bW5zJ10sCiAgICAgICAgICAgICAgIGNh bkFkZFJvdzogZnVuY3Rpb24obSkgewogICAgICAgICAgICAgICAgLy8gVXNlciBjYW4gb25seSBh ZGQgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNvbHVtbiB3aXRoIG5hbWUuCkBAIC01NjgsNyAr NjQyLDcgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFibGUnLCBbCiAgICAgICAgICAgICAgIHN1 Ym5vZGU6IHBnQnJvd3Nlci5Ob2Rlc1snY2hlY2tfY29uc3RyYWludHMnXS5tb2RlbCwKICAgICAg ICAgICAgICAgZWRpdGFibGU6IGZhbHNlLCB0eXBlOiAnY29sbGVjdGlvbicsCiAgICAgICAgICAg ICAgIGdyb3VwOiBnZXR0ZXh0KCdDaGVjaycpLCBtb2RlOiBbJ2VkaXQnLCAnY3JlYXRlJ10sCi0g ICAgICAgICAgICAgIGNhbkVkaXQ6IHRydWUsIGNhbkRlbGV0ZTogdHJ1ZSwKKyAgICAgICAgICAg ICAgY2FuRWRpdDogdHJ1ZSwgY2FuRGVsZXRlOiB0cnVlLCBkZXBzOlsnaXNfcGFydGl0aW9uZWQn XSwKICAgICAgICAgICAgICAgY29udHJvbDogJ3VuaXF1ZS1jb2wtY29sbGVjdGlvbicsCiAgICAg ICAgICAgICAgIGNhbkFkZDogdHJ1ZSwKICAgICAgICAgICAgICAgY29sdW1ucyA6IFsnbmFtZScs ICdjb25zcmMnXQpAQCAtNTc4LDEwICs2NTIsMjIgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFi bGUnLCBbCiAgICAgICAgICAgICAgIHN1Ym5vZGU6IHBnQnJvd3Nlci5Ob2Rlc1sndW5pcXVlX2Nv bnN0cmFpbnQnXS5tb2RlbCwKICAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLCB0eXBlOiAn Y29sbGVjdGlvbicsCiAgICAgICAgICAgICAgIGdyb3VwOiBnZXR0ZXh0KCdVbmlxdWUnKSwgbW9k ZTogWydlZGl0JywgJ2NyZWF0ZSddLAotICAgICAgICAgICAgICBjYW5FZGl0OiB0cnVlLCBjYW5E ZWxldGU6IHRydWUsCisgICAgICAgICAgICAgIGNhbkVkaXQ6IHRydWUsIGNhbkRlbGV0ZTogdHJ1 ZSwgZGVwczpbJ2lzX3BhcnRpdGlvbmVkJ10sCiAgICAgICAgICAgICAgIGNvbnRyb2w6ICd1bmlx dWUtY29sLWNvbGxlY3Rpb24nLAogICAgICAgICAgICAgICBjb2x1bW5zIDogWyduYW1lJywgJ2Nv bHVtbnMnXSwKLSAgICAgICAgICAgICAgY2FuQWRkOiB0cnVlLAorICAgICAgICAgICAgICBjYW5B ZGQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgICAgICBpZiAobS5nZXQoJ2lzX3BhcnRpdGlv bmVkJykpIHsKKyAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAg ICAgICAgICAgICAgICAgIHZhciBjb2xsID0gbS5nZXQoJ3VuaXF1ZV9jb25zdHJhaW50Jyk7Cisg ICAgICAgICAgICAgICAgICAgIGNvbGwucmVtb3ZlKGNvbGwuZmlsdGVyKGZ1bmN0aW9uKG1vZGVs KSB7CisgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg ICAgIH0pKTsKKyAgICAgICAgICAgICAgICAgIH0sIDEwKTsKKyAgICAgICAgICAgICAgICAgIHJl dHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4g dHJ1ZTsKKyAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgY2FuQWRkUm93OiBmdW5jdGlv bihtKSB7CiAgICAgICAgICAgICAgICAvLyBVc2VyIGNhbiBvbmx5IGFkZCBpZiB0aGVyZSBpcyBh dCBsZWFzdCBvbmUgY29sdW1uIHdpdGggbmFtZS4KICAgICAgICAgICAgICAgIHZhciBjb2x1bW5z ID0gbS5nZXQoJ2NvbHVtbnMnKTsKQEAgLTU5MywxMCArNjc5LDIyIEBAIGRlZmluZSgncGdhZG1p bi5ub2RlLnRhYmxlJywgWwogICAgICAgICAgICAgICBzdWJub2RlOiBwZ0Jyb3dzZXIuTm9kZXNb J2V4Y2x1c2lvbl9jb25zdHJhaW50J10ubW9kZWwsCiAgICAgICAgICAgICAgIGVkaXRhYmxlOiBm YWxzZSwgdHlwZTogJ2NvbGxlY3Rpb24nLAogICAgICAgICAgICAgICBncm91cDogZ2V0dGV4dCgn RXhjbHVkZScpLCBtb2RlOiBbJ2VkaXQnLCAnY3JlYXRlJ10sCi0gICAgICAgICAgICAgIGNhbkVk aXQ6IHRydWUsIGNhbkRlbGV0ZTogdHJ1ZSwKKyAgICAgICAgICAgICAgY2FuRWRpdDogdHJ1ZSwg Y2FuRGVsZXRlOiB0cnVlLCBkZXBzOlsnaXNfcGFydGl0aW9uZWQnXSwKICAgICAgICAgICAgICAg Y29udHJvbDogJ3VuaXF1ZS1jb2wtY29sbGVjdGlvbicsCiAgICAgICAgICAgICAgIGNvbHVtbnMg OiBbJ25hbWUnLCAnY29sdW1ucycsICdjb25zdHJhaW50J10sCi0gICAgICAgICAgICAgIGNhbkFk ZDogdHJ1ZSwKKyAgICAgICAgICAgICAgY2FuQWRkOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAg ICAgICAgaWYgKG0uZ2V0KCdpc19wYXJ0aXRpb25lZCcpKSB7CisgICAgICAgICAgICAgICAgICBz ZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgY29sbCA9IG0u Z2V0KCdleGNsdWRlX2NvbnN0cmFpbnQnKTsKKyAgICAgICAgICAgICAgICAgICAgY29sbC5yZW1v dmUoY29sbC5maWx0ZXIoZnVuY3Rpb24obW9kZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgICAg fSwgMTApOworICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg IH0KKworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICB9LAogICAg ICAgICAgICAgICBjYW5BZGRSb3c6IGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgIC8vIFVz ZXIgY2FuIG9ubHkgYWRkIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjb2x1bW4gd2l0aCBuYW1l LgogICAgICAgICAgICAgICAgdmFyIGNvbHVtbnMgPSBtLmdldCgnY29sdW1ucycpOwpAQCAtNjA3 LDcgKzcwNSw3IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnRhYmxlJywgWwogICAgICAgICAgIGlk OiAndHlwbmFtZScsIGxhYmVsOiBnZXR0ZXh0KCdPZiB0eXBlJyksIHR5cGU6ICd0ZXh0JywKICAg ICAgICAgICBjb250cm9sOiAnbm9kZS1hamF4LW9wdGlvbnMnLCBtb2RlOiBbJ3Byb3BlcnRpZXMn LCAnY3JlYXRlJywgJ2VkaXQnXSwKICAgICAgICAgICBkaXNhYmxlZDogJ2NoZWNrT2ZUeXBlJywg dXJsOiAnZ2V0X29mdHlwZScsIGdyb3VwOiBnZXR0ZXh0KCdBZHZhbmNlZCcpLAotICAgICAgICAg IGRlcHM6IFsnY29sbF9pbmhlcml0cyddLCB0cmFuc2Zvcm06IGZ1bmN0aW9uKGRhdGEsIGNlbGwp IHsKKyAgICAgICAgICBkZXBzOiBbJ2NvbGxfaW5oZXJpdHMnLCAnaXNfcGFydGl0aW9uZWQnXSwg dHJhbnNmb3JtOiBmdW5jdGlvbihkYXRhLCBjZWxsKSB7CiAgICAgICAgICAgICB2YXIgY29udHJv bCA9IGNlbGwgfHwgdGhpcywKICAgICAgICAgICAgICAgbSA9IGNvbnRyb2wubW9kZWw7CiAgICAg ICAgICAgICAgIG0ub2ZfdHlwZXNfdGFibGVzID0gZGF0YTsKQEAgLTcxMSwxMCArODA5LDIwNSBA QCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS50YWJsZScsIFsKICAgICAgICAgICAgIGRpc2FibGVkOiAn aXNMaWtlRGlzYWJsZScsIGdyb3VwOiBnZXR0ZXh0KCdMaWtlJykKICAgICAgICAgICB9XQogICAg ICAgICB9LHsKKyAgICAgICAgICBpZDogJ3BhcnRpdGlvbl90eXBlJywgbGFiZWw6Z2V0dGV4dCgn UGFydGl0aW9uIFR5cGUnKSwKKyAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsIHR5cGU6ICdzZWxl Y3QyJywgc2VsZWN0Mjoge2FsbG93Q2xlYXI6IGZhbHNlfSwKKyAgICAgICAgICBncm91cDogJ3Bh cnRpdGlvbicsIGRlcHM6IFsnaXNfcGFydGl0aW9uZWQnXSwKKyAgICAgICAgICBvcHRpb25zOlt7 CisgICAgICAgICAgICBsYWJlbDogJ1JhbmdlJywgdmFsdWU6ICdyYW5nZScKKyAgICAgICAgICB9 LHsKKyAgICAgICAgICAgIGxhYmVsOiAnTGlzdCcsIHZhbHVlOiAnbGlzdCcKKyAgICAgICAgICB9 XSwKKyAgICAgICAgICBtb2RlOlsnY3JlYXRlJ10sCisgICAgICAgICAgdmlzaWJsZTogZnVuY3Rp b24obSkgeworICAgICAgICAgICAgaWYoIV8uaXNVbmRlZmluZWQobS5ub2RlX2luZm8pICYmICFf LmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvLnNlcnZlcikKKyAgICAgICAgICAgICAgJiYgIV8uaXNV bmRlZmluZWQobS5ub2RlX2luZm8uc2VydmVyLnZlcnNpb24pICYmCisgICAgICAgICAgICAgIG0u bm9kZV9pbmZvLnNlcnZlci52ZXJzaW9uID49IDEwMDAwMCkKKyAgICAgICAgICAgICAgcmV0dXJu IHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9LAorICAgICAg ICAgIGRpc2FibGVkOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBpZiAoIW0uaXNOZXcoKSB8 fCAhbS5nZXQoJ2lzX3BhcnRpdGlvbmVkJykpCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAgfSx7CisgICAg ICAgICAgaWQ6ICdwYXJ0aXRpb25fa2V5cycsIGxhYmVsOmdldHRleHQoJ1BhcnRpdGlvbiBLZXlz JyksCisgICAgICAgICAgbW9kZWw6IEJhY2tmb3JtLlBhcnRpdGlvbktleU1vZGVsLAorICAgICAg ICAgIHN1Ym5vZGU6IEJhY2tmb3JtLlBhcnRpdGlvbktleU1vZGVsLAorICAgICAgICAgIGVkaXRh YmxlOiB0cnVlLCB0eXBlOiAnY29sbGVjdGlvbicsCisgICAgICAgICAgZ3JvdXA6ICdwYXJ0aXRp b24nLCBtb2RlOiBbJ2NyZWF0ZSddLAorICAgICAgICAgIGRlcHM6IFsnaXNfcGFydGl0aW9uZWQn LCAncGFydGl0aW9uX3R5cGUnXSwKKyAgICAgICAgICBjYW5FZGl0OiBmYWxzZSwgY2FuRGVsZXRl OiB0cnVlLAorICAgICAgICAgIGNvbnRyb2w6ICdzdWItbm9kZS1jb2xsZWN0aW9uJywKKyAgICAg ICAgICBjYW5BZGQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmIChtLmlzTmV3KCkgJiYg bS5nZXQoJ2lzX3BhcnRpdGlvbmVkJykpCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0sCisgICAgICAgICAgY2FuQWRkUm93 OiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICB2YXIgY29sdW1ucyA9IG0uZ2V0KCdjb2x1bW5z Jyk7CisgICAgICAgICAgICB2YXIgbWF4X3Jvd19jb3VudCA9IDEwMDA7CisKKyAgICAgICAgICAg IGlmIChtLmdldCgncGFydGl0aW9uX3R5cGUnKSAmJiBtLmdldCgncGFydGl0aW9uX3R5cGUnKSA9 PSAnbGlzdCcpCisgICAgICAgICAgICAgIG1heF9yb3dfY291bnQgPSAxOworCisgICAgICAgICAg ICByZXR1cm4gKG0uZ2V0KCdwYXJ0aXRpb25fa2V5cycpICYmCisgICAgICAgICAgICAgICAgbS5n ZXQoJ3BhcnRpdGlvbl9rZXlzJykubGVuZ3RoIDwgbWF4X3Jvd19jb3VudCAmJgorICAgICAgICAg ICAgICAgIF8uc29tZShjb2x1bW5zLnBsdWNrKCduYW1lJykpCisgICAgICAgICAgICApOworICAg ICAgICAgIH0sCisgICAgICAgICAgdmlzaWJsZTogZnVuY3Rpb24obSkgeworICAgICAgICAgICAg aWYoIV8uaXNVbmRlZmluZWQobS5ub2RlX2luZm8pICYmICFfLmlzVW5kZWZpbmVkKG0ubm9kZV9p bmZvLnNlcnZlcikKKyAgICAgICAgICAgICAgJiYgIV8uaXNVbmRlZmluZWQobS5ub2RlX2luZm8u c2VydmVyLnZlcnNpb24pICYmCisgICAgICAgICAgICAgIG0ubm9kZV9pbmZvLnNlcnZlci52ZXJz aW9uID49IDEwMDAwMCkKKyAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAg IHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9LAorICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlv bihtKSB7CisgICAgICAgICAgICBpZiAobS5nZXQoJ3BhcnRpdGlvbl9rZXlzJykgJiYgbS5nZXQo J3BhcnRpdGlvbl9rZXlzJykubW9kZWxzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAgc2V0 VGltZW91dChmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAgdmFyIGNvbGwgPSBtLmdldCgn cGFydGl0aW9uX2tleXMnKTsKKyAgICAgICAgICAgICAgICBjb2xsLnJlbW92ZShjb2xsLmZpbHRl cihmdW5jdGlvbihtb2RlbCkgeworICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg ICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICB9LCAxMCk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgfQorICAgICAgICB9LHsKKyAgICAgICAgICBpZDogJ3BhcnRpdGlvbl9zY2hlbWUn LCBsYWJlbDogZ2V0dGV4dCgnUGFydGl0aW9uIFNjaGVtZScpLAorICAgICAgICAgIHR5cGU6ICdu b3RlJywgZ3JvdXA6ICdwYXJ0aXRpb24nLCBtb2RlOiBbJ2VkaXQnXSwKKyAgICAgICAgICB2aXNp YmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBpZighXy5pc1VuZGVmaW5lZChtLm5vZGVf aW5mbykgJiYgIV8uaXNVbmRlZmluZWQobS5ub2RlX2luZm8uc2VydmVyKQorICAgICAgICAgICAg ICAmJiAhXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lvbikgJiYKKyAgICAg ICAgICAgICAgbS5ub2RlX2luZm8uc2VydmVyLnZlcnNpb24gPj0gMTAwMDAwKQorICAgICAgICAg ICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg IH0sCisgICAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmICgh bS5pc05ldygpKSB7CisgICAgICAgICAgICAgIHRoaXMudGV4dCA9IG0uZ2V0KCdwYXJ0aXRpb25f c2NoZW1lJyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9LHsKKyAgICAg ICAgICBpZDogJ3BhcnRpdGlvbl9rZXlfbm90ZScsIGxhYmVsOiBnZXR0ZXh0KCdQYXJ0aXRpb24g S2V5cycpLAorICAgICAgICAgIHR5cGU6ICdub3RlJywgZ3JvdXA6ICdwYXJ0aXRpb24nLCBtb2Rl OiBbJ2NyZWF0ZSddLAorICAgICAgICAgIHRleHQ6IGdldHRleHQoJ1RvIGNyZWF0ZSBwYXJ0aXRp b25lZCB0YWJsZSBmb2xsb3dpbmcga2V5IHR5cGVzIGFyZSBzdXBwb3J0ZWQ8YnI+JyArCisgICAg ICAgICAgICAnPHVsPjxsaT5Db2x1bW46IFVzZXIgY2FuIHNlbGVjdCBhbnkgY29sdW1uIGZyb20g dGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNvbHVtbnMuPC9saT4nICsKKyAgICAgICAgICAgICc8bGk+ RXhwcmVzc2lvbjogVXNlciBjYW4gc3BlY2lmeSBleHByZXNzaW9uIHRvIGNyZWF0ZSBwYXJ0aXRp b24ga2V5Ljxicj4nKworICAgICAgICAgICAgJ0V4YW1wbGU6IENvbnNpZGVyIHRoZXJlIGlzIGEg Y29sdW1uIFwnc2FsZWRhdGVcJyBvZiB0eXBlIERhdGUuIE5vdyB1c2VyIHdhbnRzICcgKworICAg ICAgICAgICAgJ3RvIGNyZWF0ZSBwYXJ0aXRpb24gYmFzZWQgb24gWWVhciwgc28gdXNlciBjYW4g Z2l2ZSBleHByZXNzaW9uIGxpa2UgJyArCisgICAgICAgICAgICAnXCdleHRyYWN0KFlFQVIgZnJv bSBzYWxlZGF0ZSlcJy48L2xpPjwvdWw+JyksCisgICAgICAgICAgdmlzaWJsZTogZnVuY3Rpb24o bSkgeworICAgICAgICAgICAgaWYoIV8uaXNVbmRlZmluZWQobS5ub2RlX2luZm8pICYmICFfLmlz VW5kZWZpbmVkKG0ubm9kZV9pbmZvLnNlcnZlcikKKyAgICAgICAgICAgICAgJiYgIV8uaXNVbmRl ZmluZWQobS5ub2RlX2luZm8uc2VydmVyLnZlcnNpb24pICYmCisgICAgICAgICAgICAgIG0ubm9k ZV9pbmZvLnNlcnZlci52ZXJzaW9uID49IDEwMDAwMCkKKyAgICAgICAgICAgICAgcmV0dXJuIHRy dWU7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAgIH0s IHsKKyAgICAgICAgICBpZDogJ3BhcnRpdGlvbnMnLCBsYWJlbDpnZXR0ZXh0KCdQYXJ0aXRpb25z JyksCisgICAgICAgICAgbW9kZWw6IEJhY2tmb3JtLlBhcnRpdGlvbnNNb2RlbCwKKyAgICAgICAg ICBzdWJub2RlOiBCYWNrZm9ybS5QYXJ0aXRpb25zTW9kZWwsCisgICAgICAgICAgZWRpdGFibGU6 IHRydWUsIHR5cGU6ICdjb2xsZWN0aW9uJywKKyAgICAgICAgICBncm91cDogJ3BhcnRpdGlvbics IG1vZGU6IFsnZWRpdCcsICdjcmVhdGUnXSwKKyAgICAgICAgICBkZXBzOiBbJ2lzX3BhcnRpdGlv bmVkJywgJ3BhcnRpdGlvbl90eXBlJ10sCisgICAgICAgICAgY2FuRWRpdDogZmFsc2UsIGNhbkRl bGV0ZTogdHJ1ZSwKKyAgICAgICAgICBjdXN0b21EZWxldGVUaXRsZTogZ2V0dGV4dCgnRGV0YWNo IFBhcnRpdGlvbicpLAorICAgICAgICAgIGN1c3RvbURlbGV0ZU1zZzogZ2V0dGV4dCgnQXJlIHlv dSBzdXJlIHlvdSB3aXNoIHRvIGRldGFjaCB0aGlzIHBhcnRpdGlvbj8nKSwKKyAgICAgICAgICBj b2x1bW5zOlsnaXNfYXR0YWNoJywgJ3BhcnRpdGlvbl9uYW1lJywgJ3ZhbHVlc19mcm9tJywgJ3Zh bHVlc190bycsICd2YWx1ZXNfaW4nXSwKKyAgICAgICAgICBjb250cm9sOiBCYWNrZm9ybS5TdWJO b2RlQ29sbGVjdGlvbkNvbnRyb2wuZXh0ZW5kKHsKKyAgICAgICAgICAgIHJvdzogQmFja2dyaWQu UGFydGl0aW9uUm93LAorICAgICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7CisgICAg ICAgICAgICAgIEJhY2tmb3JtLlN1Yk5vZGVDb2xsZWN0aW9uQ29udHJvbC5wcm90b3R5cGUuaW5p dGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICAgICAgICB2YXIgc2VsZiA9 IHRoaXM7CisgICAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbC5pc05ldygpKSB7CisgICAgICAg ICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmZpZWxkLmdldCgnc2NoZW1hX25vZGUnKSwKKyAgICAg ICAgICAgICAgICAgICAgbm9kZV9pbmZvID0gdGhpcy5maWVsZC5nZXQoJ25vZGVfaW5mbycpOwor CisgICAgICAgICAgICAgICAgLy8gTWFrZSBhamF4IGNhbGwgdG8gZ2V0IHRoZSB0YWJsZXMgdG8g YmUgYXR0YWNoZWQKKyAgICAgICAgICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAgICAgICAg dXJsOiBub2RlLmdlbmVyYXRlX3VybC5hcHBseSgKKyAgICAgICAgICAgICAgICAgICAgICBub2Rl LCBbCisgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCAnZ2V0X2F0dGFjaF90YWJsZXMnLCB0 aGlzLmZpZWxkLmdldCgnbm9kZV9kYXRhJyksCisgICAgICAgICAgICAgICAgICAgICAgICB0cnVl LCBub2RlX2luZm8KKyAgICAgICAgICAgICAgICAgICAgICBdKSwKKworICAgICAgICAgICAgICAg ICAgdHlwZTogJ0dFVCcsCisgICAgICAgICAgICAgICAgICBhc3luYzogZmFsc2UsCisgICAgICAg ICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgICAgICAgICAg aWYgKHJlcy5zdWNjZXNzID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1vZGVs LnRhYmxlX29wdGlvbnMgPSByZXMuZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICBhbGVydGlmeS5hbGVy dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICdFcnJvciBmZXRjaGluZyB0YWJsZXMgdG8gYmUg YXR0YWNoZWQnLCByZXMuZGF0YS5yZXN1bHQKKyAgICAgICAgICAgICAgICAgICAgICApOworICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg ICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGVycm1zZyA9 ICQucGFyc2VKU09OKGUucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgYWxlcnRp ZnkuYWxlcnQoJ0Vycm9yIGZldGNoaW5nIHRhYmxlcyB0byBiZSBhdHRhY2hlZC4nLCBlcnJtc2cu ZXJyb3Jtc2cpOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAg ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgICksCisg ICAgICAgICAgY2FuQWRkOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBpZiAobS5nZXQoJ2lz X3BhcnRpdGlvbmVkJykpCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg cmV0dXJuIGZhbHNlOworICAgICAgICAgIH0sCisgICAgICAgICAgdmlzaWJsZTogZnVuY3Rpb24o bSkgeworICAgICAgICAgICAgaWYoIV8uaXNVbmRlZmluZWQobS5ub2RlX2luZm8pICYmICFfLmlz VW5kZWZpbmVkKG0ubm9kZV9pbmZvLnNlcnZlcikKKyAgICAgICAgICAgICAgJiYgIV8uaXNVbmRl ZmluZWQobS5ub2RlX2luZm8uc2VydmVyLnZlcnNpb24pICYmCisgICAgICAgICAgICAgIG0ubm9k ZV9pbmZvLnNlcnZlci52ZXJzaW9uID49IDEwMDAwMCkKKyAgICAgICAgICAgICAgcmV0dXJuIHRy dWU7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9LAorICAgICAgICAg IGRpc2FibGVkOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBpZiAobS5pc05ldygpICYmIG0u Z2V0KCdwYXJ0aXRpb25zJykgJiYgbS5nZXQoJ3BhcnRpdGlvbnMnKS5tb2RlbHMubGVuZ3RoID4g MCkgeworICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg ICAgICB2YXIgY29sbCA9IG0uZ2V0KCdwYXJ0aXRpb25zJyk7CisgICAgICAgICAgICAgICAgY29s bC5yZW1vdmUoY29sbC5maWx0ZXIoZnVuY3Rpb24obW9kZWwpIHsKKyAgICAgICAgICAgICAgICAg IHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgfSwgMTAp OworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6 ICdwYXJ0aXRpb25fbm90ZScsIGxhYmVsOiBnZXR0ZXh0KCdQYXJ0aXRpb25zJyksCisgICAgICAg ICAgdHlwZTogJ25vdGUnLCBncm91cDogJ3BhcnRpdGlvbicsCisgICAgICAgICAgdGV4dDogZ2V0 dGV4dCgnPHVsPjxsaT5DcmVhdGUgbmV3IHRhYmxlOiBVc2VyIGNhbiBjcmVhdGUgbXVsdGlwbGUg cGFydGl0aW9ucyAnICsKKyAgICAgICAgICAgICdwYXJ0aXRpb25zIHdoaWxlIGNyZWF0aW5nIG5l dyBwYXJ0aXRpb25lZCB0YWJsZS4gT3BlcmF0aW9uIHN3aXRjaCBpcyBkaXNhYmxlZCBpbiB0aGlz IHNjZW5hcmlvLjwvbGk+JyArCisgICAgICAgICAgICAnPGxpPkVkaXQgZXhpc3RpbmcgdGFibGU6 IFVzZXIgY2FuIGNyZWF0ZS9hdHRhY2gvZGV0YWNoIG11bHRpcGxlIHBhcnRpdGlvbnMuICcgKwor ICAgICAgICAgICAgJ0luIGF0dGFjaCBvcGVyYXRpb24gdXNlciBjYW4gc2VsZWN0IHRhYmxlIGZy b20gdGhlIGxpc3Qgb2Ygc3VpdGFibGUgdGFibGVzIHRvIGJlIGF0dGFjaGVkLjwvbGk+JyArCisg ICAgICAgICAgICAnPGxpPkZyb20vVG8vSW4gdmFsdWVzOiBUaGUgdmFsdWVzIGZvciB0aGVzZSBm aWVsZHMgbXVzdCBiZSBxdW90ZWQgd2l0aCBzaW5nbGUgcXVvdGUuICcgKworICAgICAgICAgICAg J0ZvciBtb3JlIHRoYW4gb25lIHBhcnRpdGlvbiBrZXkgdmFsdWVzIG11c3QgYmUgY29tbWEoLCkg c2VwYXJhdGVkLiA8YnI+JyArCisgICAgICAgICAgICAnRXhhbXBsZTo8dWw+PGxpPkZyb20vVG86 IEVuYWJsZWQgZm9yIHJhbmdlIHBhcnRpdGlvbi4gJysKKyAgICAgICAgICAgICdDb25zaWRlciBw YXJ0aXRpb25lZCB0YWJsZSB3aXRoIG11bHRpcGxlIGtleXMgb2YgdHlwZSBJbnRlZ2VyLCAnICsK KyAgICAgICAgICAgICd0aGVuIHZhbHVlcyBzaG91bGQgYmUgc3BlY2lmaWVkIGxpa2UgXCcxMDBc JyxcJzIwMFwnLjwvbGk+JysKKyAgICAgICAgICAgICc8bGk+IEluOiBFbmFibGVkIGZvciBsaXN0 IHBhcnRpdGlvbi4gVmFsdWVzIG11c3QgYmUgY29tbWEoLCkgJysKKyAgICAgICAgICAgICdzZXBh cmF0ZWQgYW5kIHF1b3RlZCB3aXRoIHNpbmdsZSBxdW90ZS4gPC9saT48L3VsPicrCisgICAgICAg ICAgICAnPC9saT48L3VsPicpLAorICAgICAgICAgIHZpc2libGU6IGZ1bmN0aW9uKG0pIHsKKyAg ICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvKSAmJiAhXy5pc1VuZGVmaW5l ZChtLm5vZGVfaW5mby5zZXJ2ZXIpCisgICAgICAgICAgICAgICYmICFfLmlzVW5kZWZpbmVkKG0u bm9kZV9pbmZvLnNlcnZlci52ZXJzaW9uKSAmJgorICAgICAgICAgICAgICBtLm5vZGVfaW5mby5z ZXJ2ZXIudmVyc2lvbiA+PSAxMDAwMDApCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisg ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICB9LHsKICAgICAg ICAgICAvLyBIZXJlIC0gd2Ugd2lsbCBjcmVhdGUgdGFiIGNvbnRyb2wgZm9yIHN0b3JhZ2UgcGFy YW1ldGVycwogICAgICAgICAgIC8vIChhdXRvIHZhY3V1bSkuCiAgICAgICAgICAgdHlwZTogJ25l c3RlZCcsIGNvbnRyb2w6ICd0YWInLCBncm91cDogZ2V0dGV4dCgnUGFyYW1ldGVyJyksCi0gICAg ICAgICAgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLAorICAgICAgICAgIG1vZGU6IFsnZWRpdCcs ICdjcmVhdGUnXSwgZGVwczogWydpc19wYXJ0aXRpb25lZCddLAogICAgICAgICAgIHNjaGVtYTog QmFja2Zvcm0uVmFjdXVtU2V0dGluZ3NTY2hlbWEKICAgICAgICAgfSx7CiAgICAgICAgICAgaWQ6 ICdyZWxhY2xfc3RyJywgbGFiZWw6IGdldHRleHQoJ1ByaXZpbGVnZXMnKSwgZGlzYWJsZWQ6ICdp blNjaGVtYScsCkBAIC03NDEsMzUgKzEwMzQsNDYgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFi bGUnLCBbCiAgICAgICAgICAgICAgIG1zZyA9IHVuZGVmaW5lZCwKICAgICAgICAgICAgICAgbmFt ZSA9IHRoaXMuZ2V0KCduYW1lJyksCiAgICAgICAgICAgICAgIHNjaGVtYSA9IHRoaXMuZ2V0KCdz Y2hlbWEnKSwKLSAgICAgICAgICAgICAgcmVsb3duZXIgPSB0aGlzLmdldCgncmVsb3duZXInKTsK LQotICAgICAgICAgIC8vIElmIG5vdGhpbmcgdG8gdmFsaWRhdGUgb3IgVmFjdXVtU2V0dGluZyBr ZXlzIHRoZW4KLSAgICAgICAgICAvLyByZXR1cm4gZnJvbSBoZXJlCi0gICAgICAgICAgaWYgKCBr ZXlzICYmIChrZXlzLmxlbmd0aCA9PSAwCi0gICAgICAgICAgICAgICAgICAgICAgICB8fCBfLmlu ZGV4T2Yoa2V5cywgJ2F1dG92YWN1dW1fZW5hYmxlZCcpICE9IC0xCi0gICAgICAgICAgICAgICAg ICAgICAgICB8fCBfLmluZGV4T2Yoa2V5cywgJ3RvYXN0X2F1dG92YWN1dW1fZW5hYmxlZCcpICE9 IC0xKSApIHsKLSAgICAgICAgICAgIHJldHVybiBudWxsOwotICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgcmVsb3duZXIgPSB0aGlzLmdldCgncmVsb3duZXInKSwKKyAgICAgICAgICAgICAgaXNf cGFydGl0aW9uZWQgPSB0aGlzLmdldCgnaXNfcGFydGl0aW9uZWQnKSwKKyAgICAgICAgICAgICAg cGFydGl0aW9uX2tleXMgPSB0aGlzLmdldCgncGFydGl0aW9uX2tleXMnKTsKIAotICAgICAgICAg IC8vIEhhdmUgdG8gY2xlYXIgZXhpc3RpbmcgdmFsaWRhdGlvbiBiZWZvcmUgaW5pdGlhdGluZyBj dXJyZW50IHN0YXRlIHZhbGlkYXRpb24gb25seQotICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC5j bGVhcigpOwotCi0gICAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQobmFtZSkgfHwgXy5pc051bGwo bmFtZSkgfHwKLSAgICAgICAgICAgIFN0cmluZyhuYW1lKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywg JycpID09ICcnKSB7CisgICAgICAgICAgaWYgKAorICAgICAgICAgICAgXy5pc1VuZGVmaW5lZChu YW1lKSB8fCBfLmlzTnVsbChuYW1lKSB8fAorICAgICAgICAgICAgU3RyaW5nKG5hbWUpLnJlcGxh Y2UoL15ccyt8XHMrJC9nLCAnJykgPT0gJycKKyAgICAgICAgICApIHsKICAgICAgICAgICAgIG1z ZyA9IGdldHRleHQoJ1RhYmxlIG5hbWUgY2Fubm90IGJlIGVtcHR5LicpOwogICAgICAgICAgICAg dGhpcy5lcnJvck1vZGVsLnNldCgnbmFtZScsIG1zZyk7CiAgICAgICAgICAgICByZXR1cm4gbXNn OwotICAgICAgICAgIH0gZWxzZSBpZiAoXy5pc1VuZGVmaW5lZChzY2hlbWEpIHx8IF8uaXNOdWxs KHNjaGVtYSkgfHwKLSAgICAgICAgICAgIFN0cmluZyhzY2hlbWEpLnJlcGxhY2UoL15ccyt8XHMr JC9nLCAnJykgPT0gJycpIHsKKyAgICAgICAgICB9CisgICAgICAgICAgdGhpcy5lcnJvck1vZGVs LnVuc2V0KCduYW1lJyk7CisgICAgICAgICAgaWYgKAorICAgICAgICAgICAgXy5pc1VuZGVmaW5l ZChzY2hlbWEpIHx8IF8uaXNOdWxsKHNjaGVtYSkgfHwKKyAgICAgICAgICAgIFN0cmluZyhzY2hl bWEpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykgPT0gJycKKyAgICAgICAgICApIHsKICAgICAg ICAgICAgIG1zZyA9IGdldHRleHQoJ1RhYmxlIHNjaGVtYSBjYW5ub3QgYmUgZW1wdHkuJyk7CiAg ICAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCdzY2hlbWEnLCBtc2cpOwogICAgICAgICAg ICAgcmV0dXJuIG1zZzsKLSAgICAgICAgICB9IGVsc2UgaWYgKF8uaXNVbmRlZmluZWQocmVsb3du ZXIpIHx8IF8uaXNOdWxsKHJlbG93bmVyKSB8fAotICAgICAgICAgICAgU3RyaW5nKHJlbG93bmVy KS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpID09ICcnKSB7CisgICAgICAgICAgfQorICAgICAg ICAgIHRoaXMuZXJyb3JNb2RlbC51bnNldCgnc2NoZW1hJyk7CisgICAgICAgICAgaWYgKAorICAg ICAgICAgICAgXy5pc1VuZGVmaW5lZChyZWxvd25lcikgfHwgXy5pc051bGwocmVsb3duZXIpIHx8 CisgICAgICAgICAgICBTdHJpbmcocmVsb3duZXIpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykg PT0gJycKKyAgICAgICAgICApIHsKICAgICAgICAgICAgIG1zZyA9IGdldHRleHQoJ1RhYmxlIG93 bmVyIGNhbm5vdCBiZSBlbXB0eS4nKTsKICAgICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC5zZXQo J3JlbG93bmVyJywgbXNnKTsKICAgICAgICAgICAgIHJldHVybiBtc2c7CiAgICAgICAgICAgfQor ICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC51bnNldCgncmVsb3duZXInKTsKKyAgICAgICAgICBp ZiAoCisgICAgICAgICAgICBpc19wYXJ0aXRpb25lZCAmJiB0aGlzLmlzTmV3KCkgJiYKKyAgICAg ICAgICAgICFfLmlzTnVsbChwYXJ0aXRpb25fa2V5cykgJiYgcGFydGl0aW9uX2tleXMubGVuZ3Ro IDw9IDAKKyAgICAgICAgICApIHsKKyAgICAgICAgICAgIG1zZyA9IGdldHRleHQoJ1BsZWFzZSBz cGVjaWZ5IGF0IGxlYXN0IG9uZSBrZXkgZm9yIHBhcnRpdGlvbmVkIHRhYmxlLicpOworICAgICAg ICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgncGFydGl0aW9uX2tleXMnLCBtc2cpOworICAgICAg ICAgICAgcmV0dXJuIG1zZzsKKyAgICAgICAgICB9CisgICAgICAgICAgdGhpcy5lcnJvck1vZGVs LnVuc2V0KCdwYXJ0aXRpb25fa2V5cycpOwogICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAg ICB9LAogICAgICAgICAvLyBXZSB3aWxsIGRpc2FibGUgZXZlcnl0aGluZyBpZiB3ZSBhcmUgdW5k ZXIgY2F0YWxvZyBub2RlCkBAIC03OTcsNyArMTEwMSwxNSBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9k ZS50YWJsZScsIFsKICAgICAgICAgfSwKICAgICAgICAgLy8gT2Z0eXBlIGlzIGRlZmluZWQ/CiAg ICAgICAgIGNoZWNrSW5oZXJpdGFuY2U6IGZ1bmN0aW9uKG0pIHsKLSAgICAgICAgIC8vIGNvbGxf aW5oZXJpdHMgfHwgdHlwbmFtZQorICAgICAgICAgIC8vIERpc2FibGVkIGlmIGl0IGlzIHBhcnRp dGlvbmVkIHRhYmxlCisgICAgICAgICAgaWYgKG0uZ2V0KCdpc19wYXJ0aXRpb25lZCcpKSB7Cisg ICAgICAgICAgICBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgIG0uc2V0 KCdjb2xsX2luaGVyaXRzJywgW10pOworICAgICAgICAgICAgfSwgMTApOworICAgICAgICAgICAg cmV0dXJuIHRydWU7CisgICAgICAgICAgfQorCisgICAgICAgICAgLy8gY29sbF9pbmhlcml0cyB8 fCB0eXBuYW1lCiAgICAgICAgICAgaWYoIW0uaW5TY2hlbWEuYXBwbHkodGhpcywgW21dKSAmJgog ICAgICAgICAgICAgICAoIF8uaXNVbmRlZmluZWQobS5nZXQoJ3R5cG5hbWUnKSkgfHwKICAgICAg ICAgICAgICAgICBfLmlzTnVsbChtLmdldCgndHlwbmFtZScpKSB8fApAQCAtODQxLDcgKzExNTMs MTUgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFibGUnLCBbCiAgICAgICAgIH0sCiAgICAgICAg IC8vIFdlIHdpbGwgZGlzYWJsZSBpdCBpZiBJbmhlcml0YW5jZSBpcyBkZWZpbmVkCiAgICAgICAg IGNoZWNrT2ZUeXBlOiBmdW5jdGlvbihtKSB7Ci0gICAgICAgIC8vY29sbF9pbmhlcml0cyB8fCB0 eXBuYW1lCisgICAgICAgICAgLy8gRGlzYWJsZWQgaWYgaXQgaXMgcGFydGl0aW9uZWQgdGFibGUK KyAgICAgICAgICBpZiAobS5nZXQoJ2lzX3BhcnRpdGlvbmVkJykpIHsKKyAgICAgICAgICAgIHNl dFRpbWVvdXQoIGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgbS5zZXQoJ3R5cG5hbWUnLCB1 bmRlZmluZWQpOworICAgICAgICAgICAgfSwgMTApOworICAgICAgICAgICAgcmV0dXJuIHRydWU7 CisgICAgICAgICAgfQorCisgICAgICAgICAgLy9jb2xsX2luaGVyaXRzIHx8IHR5cG5hbWUKICAg ICAgICAgICBpZighbS5pblNjaGVtYVdpdGhNb2RlbENoZWNrLmFwcGx5KHRoaXMsIFttXSkgJiYK ICAgICAgICAgICAgICAgKF8uaXNVbmRlZmluZWQobS5nZXQoJ2NvbGxfaW5oZXJpdHMnKSkgfHwK ICAgICAgICAgICAgICAgIF8uaXNOdWxsKG0uZ2V0KCdjb2xsX2luaGVyaXRzJykpIHx8CmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFz ZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3BhcnRpdGlvbi9zcWwvMTBfcGx1cy9hdHRhY2gu c3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2Vz L3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMvYXR0YWNoLnNx bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjYxZDljCi0tLSAvZGV2L251 bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJh c2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMvYXR0YWNo LnNxbApAQCAtMCwwICsxLDIgQEAKK0FMVEVSIFRBQkxFIHt7Y29ubnxxdElkZW50KGRhdGEucGFy ZW50X3NjaGVtYSwgZGF0YS5wYXJ0aXRpb25lZF90YWJsZV9uYW1lKX19IEFUVEFDSCBQQVJUSVRJ T04ge3tjb25ufHF0SWRlbnQoZGF0YS5zY2hlbWEsIGRhdGEubmFtZSl9fQorICAgIHt7IGRhdGEu cGFydGl0aW9uX3ZhbHVlIH19OwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2 ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0 aXRpb24vc3FsLzEwX3BsdXMvYmFja2VuZF9zdXBwb3J0LnNxbCBiL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0 ZXMvcGFydGl0aW9uL3NxbC8xMF9wbHVzL2JhY2tlbmRfc3VwcG9ydC5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWZhMWQ3ZQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9w Z2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3Rh Ymxlcy90ZW1wbGF0ZXMvcGFydGl0aW9uL3NxbC8xMF9wbHVzL2JhY2tlbmRfc3VwcG9ydC5zcWwK QEAgLTAsMCArMSw5IEBACit7Iz09PT09PT09PT09PT1DaGVja3MgaWYgaXQgaXMgcGFydGl0aW9u ZWQgdGFibGU9PT09PT09PSN9Cit7JSBpZiB0aWQgJX0KK1NFTEVDVAorICAgIENBU0UgV0hFTiBj LnJlbGtpbmQgPSAncCcgVEhFTiBUcnVlIEVMU0UgRmFsc2UgRU5EIEFzIHB0YWJsZQorRlJPTQor ICAgIHBnX2NsYXNzIGMKK1dIRVJFCisgICAgYy5vaWQgPSB7eyB0aWQgfX06Om9pZAoreyUgZW5k aWYgJX0KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2 ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvcGFydGl0aW9uL3NxbC8xMF9w bHVzL2NyZWF0ZS5zcWwgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVy cy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3BhcnRpdGlvbi9zcWwvMTBfcGx1 cy9jcmVhdGUuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZTk0MDQK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3BhcnRpdGlvbi9zcWwvMTBf cGx1cy9jcmVhdGUuc3FsCkBAIC0wLDAgKzEsMzAgQEAKK3slIGltcG9ydCAndGFibGUvc3FsL21h Y3Jvcy9jb25zdHJhaW50cy5tYWNybycgYXMgQ09OU1RSQUlOVFMgJX0KK3sjPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSN9Cit7Iz09PT09PSBNQUlOIFRBQkxFIFRF TVBMQVRFIFNUQVJUUyBIRVJFID09PT09PSN9Cit7Iz09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0jfQoreyMjIyBDUkVBVEUgVEFCTEUgU1RBVEVNRU5UIEZPUiBwYXJ0 aXRpb25zICMjI30KK0NSRUFURSB7JSBpZiBkYXRhLnJlbHBlcnNpc3RlbmNlICV9VU5MT0dHRUQg eyUgZW5kaWYgJX1UQUJMRSB7e2Nvbm58cXRJZGVudChkYXRhLnNjaGVtYSwgZGF0YS5uYW1lKX19 eyUgaWYgZGF0YS5yZWxpc3BhcnRpdGlvbiBpcyBkZWZpbmVkIGFuZCBkYXRhLnJlbGlzcGFydGl0 aW9uICV9IFBBUlRJVElPTiBPRiB7e2Nvbm58cXRJZGVudChkYXRhLnBhcmVudF9zY2hlbWEsIGRh dGEucGFydGl0aW9uZWRfdGFibGVfbmFtZSl9fXslIGVuZGlmICV9CisKK3sjIE1hY3JvIHRvIHJl bmRlciBmb3IgY29uc3RyYWludHMgI30KK3slIGlmIGRhdGEucHJpbWFyeV9rZXl8bGVuZ3RoID4g MCBvciBkYXRhLnVuaXF1ZV9jb25zdHJhaW50fGxlbmd0aCA+IDAgb3IgZGF0YS5mb3JlaWduX2tl eXxsZW5ndGggPiAwIG9yIGRhdGEuY2hlY2tfY29uc3RyYWludHxsZW5ndGggPiAwIG9yIGRhdGEu ZXhjbHVkZV9jb25zdHJhaW50fGxlbmd0aCA+IDAgJX0KKyggeyUgZW5kaWYgJX0KK3slIGlmIGRh dGEucHJpbWFyeV9rZXl8bGVuZ3RoID4gMCAlfXt7Q09OU1RSQUlOVFMuUFJJTUFSWV9LRVkoY29u biwgZGF0YS5wcmltYXJ5X2tleVswXSl9fXslIGVuZGlmICV9eyUgaWYgZGF0YS51bmlxdWVfY29u c3RyYWludHxsZW5ndGggPiAwICV9eyUgaWYgZGF0YS5wcmltYXJ5X2tleXxsZW5ndGggPiAwICV9 LHslIGVuZGlmICV9Cit7e0NPTlNUUkFJTlRTLlVOSVFVRShjb25uLCBkYXRhLnVuaXF1ZV9jb25z dHJhaW50KX19eyUgZW5kaWYgJX17JSBpZiBkYXRhLmZvcmVpZ25fa2V5fGxlbmd0aCA+IDAgJX17 JSBpZiBkYXRhLnByaW1hcnlfa2V5fGxlbmd0aCA+IDAgb3IgZGF0YS51bmlxdWVfY29uc3RyYWlu dHxsZW5ndGggPiAwICV9LHslIGVuZGlmICV9Cit7e0NPTlNUUkFJTlRTLkZPUkVJR05fS0VZKGNv bm4sIGRhdGEuZm9yZWlnbl9rZXkpfX17JSBlbmRpZiAlfXslIGlmIGRhdGEuY2hlY2tfY29uc3Ry YWludHxsZW5ndGggPiAwICV9eyUgaWYgZGF0YS5wcmltYXJ5X2tleXxsZW5ndGggPiAwIG9yIGRh dGEudW5pcXVlX2NvbnN0cmFpbnR8bGVuZ3RoID4gMCBvciBkYXRhLmZvcmVpZ25fa2V5fGxlbmd0 aCA+IDAgJX0seyUgZW5kaWYgJX0KK3t7Q09OU1RSQUlOVFMuQ0hFQ0soY29ubiwgZGF0YS5jaGVj a19jb25zdHJhaW50KX19eyUgZW5kaWYgJX17JSBpZiBkYXRhLmV4Y2x1ZGVfY29uc3RyYWludHxs ZW5ndGggPiAwICV9eyUgaWYgZGF0YS5wcmltYXJ5X2tleXxsZW5ndGggPiAwIG9yIGRhdGEudW5p cXVlX2NvbnN0cmFpbnR8bGVuZ3RoID4gMCBvciBkYXRhLmZvcmVpZ25fa2V5fGxlbmd0aCA+IDAg b3IgZGF0YS5jaGVja19jb25zdHJhaW50fGxlbmd0aCA+IDAgJX0seyUgZW5kaWYgJX0KK3t7Q09O U1RSQUlOVFMuRVhDTFVERShjb25uLCBkYXRhLmV4Y2x1ZGVfY29uc3RyYWludCl9fXslIGVuZGlm ICV9Cit7JSBpZiBkYXRhLnByaW1hcnlfa2V5fGxlbmd0aCA+IDAgb3IgZGF0YS51bmlxdWVfY29u c3RyYWludHxsZW5ndGggPiAwIG9yIGRhdGEuZm9yZWlnbl9rZXl8bGVuZ3RoID4gMCBvciBkYXRh LmNoZWNrX2NvbnN0cmFpbnR8bGVuZ3RoID4gMCBvciBkYXRhLmV4Y2x1ZGVfY29uc3RyYWludHxs ZW5ndGggPiAwICV9CisKKykKK3slIGVuZGlmICV9CisgICAge3sgZGF0YS5wYXJ0aXRpb25fdmFs dWUgfX17JSBpZiBkYXRhLmlzX3BhcnRpdGlvbmVkIGlzIGRlZmluZWQgYW5kIGRhdGEuaXNfcGFy dGl0aW9uZWQgJX0KKworICAgIFBBUlRJVElPTiBCWSB7eyBkYXRhLnBhcnRpdGlvbl9zY2hlbWUg fX17JSBlbmRpZiAlfTsKKworCit7IyMjIEFsdGVyIFNRTCBmb3IgT3duZXIgIyMjfQoreyUgaWYg ZGF0YS5yZWxvd25lciAlfQorCitBTFRFUiBUQUJMRSB7e2Nvbm58cXRJZGVudChkYXRhLnNjaGVt YSwgZGF0YS5uYW1lKX19CisgICAgT1dORVIgdG8ge3tjb25ufHF0SWRlbnQoZGF0YS5yZWxvd25l cil9fTsKK3slIGVuZGlmICV9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3BhcnRp dGlvbi9zcWwvMTBfcGx1cy9kZXRhY2guc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0aXRp b24vc3FsLzEwX3BsdXMvZGV0YWNoLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi40YjQxM2RiCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2 ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0 aXRpb24vc3FsLzEwX3BsdXMvZGV0YWNoLnNxbApAQCAtMCwwICsxIEBACitBTFRFUiBUQUJMRSB7 e2Nvbm58cXRJZGVudChkYXRhLnBhcmVudF9zY2hlbWEsIGRhdGEucGFydGl0aW9uZWRfdGFibGVf bmFtZSl9fSBERVRBQ0ggUEFSVElUSU9OIHt7Y29ubnxxdElkZW50KGRhdGEuc2NoZW1hLCBkYXRh Lm5hbWUpfX07CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMv c2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3BhcnRpdGlvbi9zcWwv MTBfcGx1cy9nZXRfYXR0YWNoX3RhYmxlcy5zcWwgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3BhcnRp dGlvbi9zcWwvMTBfcGx1cy9nZXRfYXR0YWNoX3RhYmxlcy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uNDc2ZGMzZgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90 ZW1wbGF0ZXMvcGFydGl0aW9uL3NxbC8xMF9wbHVzL2dldF9hdHRhY2hfdGFibGVzLnNxbApAQCAt MCwwICsxLDIzIEBACitTRUxFQ1Qgb2lkLCBxdW90ZV9pZGVudChuc3BuYW1lKXx8Jy4nfHxxdW90 ZV9pZGVudChyZWxuYW1lKSBBUyB0YWJsZV9uYW1lIEZST00KKyhTRUxFQ1QKKwlyLm9pZCwgci5y ZWxuYW1lLCBuLm5zcG5hbWUsIGFycmF5X2FnZyhhLmF0dG5hbWUpIGF0dG5hbWVzLCBhcnJheV9h Z2coYS5hdHR0eXBpZCkgYXR0dHlwZXMKK0ZST00KKwkoU0VMRUNUIG9pZCwgcmVsbmFtZSwgcmVs bmFtZXNwYWNlIEZST00gcGdfY2F0YWxvZy5wZ19jbGFzcworCSAgV0hFUkUgcmVsa2luZCBpbiAo J3InLCAncCcpIEFORCBOT1QgcmVsaXNwYXJ0aXRpb24pIHIKKyAgICBKT0lOIChTRUxFQ1Qgb2lk IEFTIG5zcG9pZCwgbnNwbmFtZSBGUk9NCisgICAgICAgICAgcGdfY2F0YWxvZy5wZ19uYW1lc3Bh Y2UgV0hFUkUgbnNwbmFtZSBOT1QgTElLRSBFJ3BnXF8lJykgbgorICAgICAgICAgIE9OIChyLnJl bG5hbWVzcGFjZSA9IG4ubnNwb2lkKQorICAgIEpPSU4gKFNFTEVDVCBhdHRyZWxpZCwgYXR0bmFt ZSwgYXR0dHlwaWQgRlJPTQorICAgICAgICAgIHBnX2NhdGFsb2cucGdfYXR0cmlidXRlIFdIRVJF IGF0dG51bSA+IDAgT1JERVIgQlkgYXR0cmVsaWQsIGF0dG51bSkgYQorICAgICAgICAgIE9OIChy Lm9pZCA9IGEuYXR0cmVsaWQpCitHUk9VUCBCWSByLm9pZCwgci5yZWxuYW1lLCByLnJlbG5hbWVz cGFjZSwgbi5uc3BuYW1lKSBhbGxfdGFibGVzCitKT0lOCisoU0VMRUNUCisJYXR0cmVsaWQsIGFy cmF5X2FnZyhhdHRuYW1lKSBhdHRuYW1lcywgYXJyYXlfYWdnKGF0dHR5cGlkKSBhdHR0eXBlcwor RlJPTQorCShTRUxFQ1QgKiBGUk9NIHBnX2NhdGFsb2cucGdfYXR0cmlidXRlCisJICBXSEVSRSBh dHRyZWxpZCA9IHt7IHRpZCB9fSBBTkQgYXR0bnVtID4gMAorCSAgT1JERVIgQlkgYXR0cmVsaWQs IGF0dG51bSkgYXR0cmlidXRlcworR1JPVVAgQlkgYXR0cmVsaWQpIGN1cnJlbnRfdGFibGUgT04g Y3VycmVudF90YWJsZS5hdHRyZWxpZCAhPSBhbGxfdGFibGVzLm9pZAorICBBTkQgY3VycmVudF90 YWJsZS5hdHRuYW1lcyA9IGFsbF90YWJsZXMuYXR0bmFtZXMKKyAgQU5EIGN1cnJlbnRfdGFibGUu YXR0dHlwZXMgPSBhbGxfdGFibGVzLmF0dHR5cGVzClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls ZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMv bm9kZXMuc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMvbm9k ZXMuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkODI4Y2QKLS0tIC9k ZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3BhcnRpdGlvbi9zcWwvMTBfcGx1cy9u b2Rlcy5zcWwKQEAgLTAsMCArMSwxNSBAQAorU0VMRUNUIHJlbC5vaWQsIHJlbC5yZWxuYW1lIEFT IG5hbWUsCisgICAgKFNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3RyaWdnZXIgV0hFUkUgdGdyZWxp ZD1yZWwub2lkIEFORCB0Z2lzaW50ZXJuYWwgPSBGQUxTRSkgQVMgdHJpZ2dlcmNvdW50LAorICAg IChTRUxFQ1QgY291bnQoKikgRlJPTSBwZ190cmlnZ2VyIFdIRVJFIHRncmVsaWQ9cmVsLm9pZCBB TkQgdGdpc2ludGVybmFsID0gRkFMU0UgQU5EIHRnZW5hYmxlZCA9ICdPJykgQVMgaGFzX2VuYWJs ZV90cmlnZ2VycywKKyAgICBwZ19nZXRfZXhwcihyZWwucmVscGFydGJvdW5kLCByZWwub2lkKSBB UyBwYXJ0aXRpb25fdmFsdWUsCisgICAgcmVsLnJlbG5hbWVzcGFjZSBBUyBzY2hlbWFfaWQsCisg ICAgbnNwLm5zcG5hbWUgQVMgc2NoZW1hX25hbWUsCisgICAgKENBU0UgV0hFTiByZWwucmVsa2lu ZCA9ICdwJyBUSEVOIHRydWUgRUxTRSBmYWxzZSBFTkQpIEFTIGlzX3BhcnRpdGlvbmVkLAorICAg IChDQVNFIFdIRU4gcmVsLnJlbGtpbmQgPSAncCcgVEhFTiBwZ19nZXRfcGFydGtleWRlZihyZWwu b2lkOjpvaWQpIEVMU0UgJycgRU5EKSBBUyBwYXJ0aXRpb25fc2NoZW1lCitGUk9NCisgICAgKFNF TEVDVCAqIEZST00gcGdfaW5oZXJpdHMgV0hFUkUgaW5ocGFyZW50ID0ge3sgdGlkIH19OjpvaWQp IGluaAorICAgIExFRlQgSk9JTiBwZ19jbGFzcyByZWwgT04gaW5oLmluaHJlbGlkID0gcmVsLm9p ZAorICAgIExFRlQgSk9JTiBwZ19uYW1lc3BhY2UgbnNwIE9OIHJlbC5yZWxuYW1lc3BhY2UgPSBu c3Aub2lkCisgICAgV0hFUkUgcmVsLnJlbGlzcGFydGl0aW9uCisgICAgeyUgaWYgcHRpZCAlfSBB TkQgcmVsLm9pZCA9IHt7IHB0aWQgfX06Ok9JRCB7JSBlbmRpZiAlfQorICAgIE9SREVSIEJZIHJl bC5yZWxuYW1lOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0aXRpb24vc3Fs LzEwX3BsdXMvcHJvcGVydGllcy5zcWwgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3BhcnRpdGlvbi9z cWwvMTBfcGx1cy9wcm9wZXJ0aWVzLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi44NWY0NDc2Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2 ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0 aXRpb24vc3FsLzEwX3BsdXMvcHJvcGVydGllcy5zcWwKQEAgLTAsMCArMSw4MiBAQAorU0VMRUNU IHJlbC5vaWQsIHJlbC5yZWxuYW1lIEFTIG5hbWUsIHJlbC5yZWx0YWJsZXNwYWNlIEFTIHNwY29p ZCxyZWwucmVsYWNsIEFTIHJlbGFjbF9zdHIsCisgIChDQVNFIFdIRU4gbGVuZ3RoKHNwYy5zcGNu YW1lKSA+IDAgVEhFTiBzcGMuc3BjbmFtZSBFTFNFCisgICAgKFNFTEVDVCBzcC5zcGNuYW1lIEZS T00gcGdfZGF0YWJhc2UgZHRiCisgICAgSk9JTiBwZ190YWJsZXNwYWNlIHNwIE9OIGR0Yi5kYXR0 YWJsZXNwYWNlPXNwLm9pZAorICAgIFdIRVJFIGR0Yi5vaWQgPSB7eyBkaWQgfX06Om9pZCkKKyAg RU5EKSBhcyBzcGNuYW1lLAorICAoc2VsZWN0IG5zcG5hbWUgRlJPTSBwZ19uYW1lc3BhY2UgV0hF UkUgb2lkID0ge3tzY2lkfX06Om9pZCApIGFzIHBhcmVudF9zY2hlbWEsCisgIG5zcC5uc3BuYW1l IGFzIHNjaGVtYSwKKyAgcGdfZ2V0X3VzZXJieWlkKHJlbC5yZWxvd25lcikgQVMgcmVsb3duZXIs IHJlbC5yZWxoYXNvaWRzLCByZWwucmVsaXNwYXJ0aXRpb24sCisgIHJlbC5yZWxoYXNzdWJjbGFz cywgcmVsLnJlbHR1cGxlcywgZGVzLmRlc2NyaXB0aW9uLCBjb24uY29ubmFtZSwgY29uLmNvbmtl eSwKKwlFWElTVFMoc2VsZWN0IDEgRlJPTSBwZ190cmlnZ2VyCisJCQlKT0lOIHBnX3Byb2MgcHQg T04gcHQub2lkPXRnZm9pZCBBTkQgcHQucHJvbmFtZT0nbG9ndHJpZ2dlcicKKwkJCUpPSU4gcGdf cHJvYyBwYyBPTiBwYy5wcm9uYW1lc3BhY2U9cHQucHJvbmFtZXNwYWNlIEFORCBwYy5wcm9uYW1l PSdzbG9ueXZlcnNpb24nCisJCQlXSEVSRSB0Z3JlbGlkPXJlbC5vaWQpIEFTIGlzcmVwbCwKKwko U0VMRUNUIGNvdW50KCopIEZST00gcGdfdHJpZ2dlciBXSEVSRSB0Z3JlbGlkPXJlbC5vaWQgQU5E IHRnaXNpbnRlcm5hbCA9IEZBTFNFKSBBUyB0cmlnZ2VyY291bnQsCisJKFNFTEVDVCBBUlJBWShT RUxFQ1QgQ0FTRSBXSEVOIChuc3BuYW1lIE5PVCBMSUtFIEUncGdcXyUnKSBUSEVOCisgICAgICAg ICAgICBxdW90ZV9pZGVudChuc3BuYW1lKXx8Jy4nfHxxdW90ZV9pZGVudChjLnJlbG5hbWUpCisg ICAgICAgICAgICBFTFNFIHF1b3RlX2lkZW50KGMucmVsbmFtZSkgRU5EIEFTIGluaGVyaXRlZF90 YWJsZXMKKyAgICBGUk9NIHBnX2luaGVyaXRzIGkKKyAgICBKT0lOIHBnX2NsYXNzIGMgT04gYy5v aWQgPSBpLmluaHBhcmVudAorICAgIEpPSU4gcGdfbmFtZXNwYWNlIG4gT04gbi5vaWQ9Yy5yZWxu YW1lc3BhY2UKKyAgICBXSEVSRSBpLmluaHJlbGlkID0gcmVsLm9pZCBPUkRFUiBCWSBpbmhzZXFu bykpIEFTIGNvbGxfaW5oZXJpdHMsCisgIChTRUxFQ1QgY291bnQoKikKKwkJRlJPTSBwZ19pbmhl cml0cyBpCisgICAgICBKT0lOIHBnX2NsYXNzIGMgT04gYy5vaWQgPSBpLmluaHBhcmVudAorICAg ICAgSk9JTiBwZ19uYW1lc3BhY2UgbiBPTiBuLm9pZD1jLnJlbG5hbWVzcGFjZQorCQlXSEVSRSBp LmluaHJlbGlkID0gcmVsLm9pZCkgQVMgaW5oZXJpdGVkX3RhYmxlc19jbnQsCisJKENBU0UgV0hF TiByZWwucmVscGVyc2lzdGVuY2UgPSAndScgVEhFTiB0cnVlIEVMU0UgZmFsc2UgRU5EKSBBUyBy ZWxwZXJzaXN0ZW5jZSwKKwlzdWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHJlbC5yZWxvcHRpb25z LCAnLCcpIEZST00gJ2ZpbGxmYWN0b3I9KFswLTldKiknKSBBUyBmaWxsZmFjdG9yLAorCShDQVNF IFdIRU4gKHN1YnN0cmluZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcsJykgRlJP TSAnYXV0b3ZhY3V1bV9lbmFibGVkPShbYS16fDAtOV0qKScpID0gJ3RydWUnKQorCSAgVEhFTiB0 cnVlIEVMU0UgZmFsc2UgRU5EKSBBUyBhdXRvdmFjdXVtX2VuYWJsZWQsCisJc3Vic3RyaW5nKGFy cmF5X3RvX3N0cmluZyhyZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX3ZhY3V1 bV90aHJlc2hvbGQ9KFswLTldKiknKSBBUyBhdXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQsCisJ c3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhyZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRv dmFjdXVtX3ZhY3V1bV9zY2FsZV9mYWN0b3I9KFswLTldKlsuXVswLTldKiknKSBBUyBhdXRvdmFj dXVtX3ZhY3V1bV9zY2FsZV9mYWN0b3IsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhyZWwu cmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2FuYWx5emVfdGhyZXNob2xkPShbMC05 XSopJykgQVMgYXV0b3ZhY3V1bV9hbmFseXplX3RocmVzaG9sZCwKKwlzdWJzdHJpbmcoYXJyYXlf dG9fc3RyaW5nKHJlbC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fYW5hbHl6ZV9z Y2FsZV9mYWN0b3I9KFswLTldKlsuXVswLTldKiknKSBBUyBhdXRvdmFjdXVtX2FuYWx5emVfc2Nh bGVfZmFjdG9yLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcs JykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9kZWxheT0oWzAtOV0qKScpIEFTIGF1dG92 YWN1dW1fdmFjdXVtX2Nvc3RfZGVsYXksCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhyZWwu cmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX3ZhY3V1bV9jb3N0X2xpbWl0PShbMC05 XSopJykgQVMgYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9saW1pdCwKKwlzdWJzdHJpbmcoYXJyYXlf dG9fc3RyaW5nKHJlbC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fZnJlZXplX21p bl9hZ2U9KFswLTldKiknKSBBUyBhdXRvdmFjdXVtX2ZyZWV6ZV9taW5fYWdlLAorCXN1YnN0cmlu ZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV9m cmVlemVfbWF4X2FnZT0oWzAtOV0qKScpIEFTIGF1dG92YWN1dW1fZnJlZXplX21heF9hZ2UsCisJ c3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhyZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRv dmFjdXVtX2ZyZWV6ZV90YWJsZV9hZ2U9KFswLTldKiknKSBBUyBhdXRvdmFjdXVtX2ZyZWV6ZV90 YWJsZV9hZ2UsCisJKENBU0UgV0hFTiAoc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3QucmVs b3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2VuYWJsZWQ9KFthLXp8MC05XSopJykgPSAg J3RydWUnKQorCSAgVEhFTiB0cnVlIEVMU0UgZmFsc2UgRU5EKSBBUyB0b2FzdF9hdXRvdmFjdXVt X2VuYWJsZWQsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3QucmVsb3B0aW9ucywgJywn KSBGUk9NICdhdXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQ9KFswLTldKiknKSBBUyB0b2FzdF9h dXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0 c3QucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX3ZhY3V1bV9zY2FsZV9mYWN0b3I9 KFswLTldKlsuXVswLTldKiknKSBBUyB0b2FzdF9hdXRvdmFjdXVtX3ZhY3V1bV9zY2FsZV9mYWN0 b3IsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3QucmVsb3B0aW9ucywgJywnKSBGUk9N ICdhdXRvdmFjdXVtX2FuYWx5emVfdGhyZXNob2xkPShbMC05XSopJykgQVMgdG9hc3RfYXV0b3Zh Y3V1bV9hbmFseXplX3RocmVzaG9sZCwKKwlzdWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHRzdC5y ZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fYW5hbHl6ZV9zY2FsZV9mYWN0b3I9KFsw LTldKlsuXVswLTldKiknKSBBUyB0b2FzdF9hdXRvdmFjdXVtX2FuYWx5emVfc2NhbGVfZmFjdG9y LAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlvbnMsICcsJykgRlJPTSAn YXV0b3ZhY3V1bV92YWN1dW1fY29zdF9kZWxheT0oWzAtOV0qKScpIEFTIHRvYXN0X2F1dG92YWN1 dW1fdmFjdXVtX2Nvc3RfZGVsYXksCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3QucmVs b3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX3ZhY3V1bV9jb3N0X2xpbWl0PShbMC05XSop JykgQVMgdG9hc3RfYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9saW1pdCwKKwlzdWJzdHJpbmcoYXJy YXlfdG9fc3RyaW5nKHRzdC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fZnJlZXpl X21pbl9hZ2U9KFswLTldKiknKSBBUyB0b2FzdF9hdXRvdmFjdXVtX2ZyZWV6ZV9taW5fYWdlLAor CXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0 b3ZhY3V1bV9mcmVlemVfbWF4X2FnZT0oWzAtOV0qKScpIEFTIHRvYXN0X2F1dG92YWN1dW1fZnJl ZXplX21heF9hZ2UsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3QucmVsb3B0aW9ucywg JywnKSBGUk9NICdhdXRvdmFjdXVtX2ZyZWV6ZV90YWJsZV9hZ2U9KFswLTldKiknKSBBUyB0b2Fz dF9hdXRvdmFjdXVtX2ZyZWV6ZV90YWJsZV9hZ2UsCisJYXJyYXlfdG9fc3RyaW5nKHJlbC5yZWxv cHRpb25zLCAnLCcpIEFTIHRhYmxlX3ZhY3V1bV9zZXR0aW5nc19zdHIsCisJYXJyYXlfdG9fc3Ry aW5nKHRzdC5yZWxvcHRpb25zLCAnLCcpIEFTIHRvYXN0X3RhYmxlX3ZhY3V1bV9zZXR0aW5nc19z dHIsCisJcmVsLnJlbG9wdGlvbnMgQVMgcmVsb3B0aW9ucywgdHN0LnJlbG9wdGlvbnMgQVMgdG9h c3RfcmVsb3B0aW9ucywgcmVsLnJlbG9mdHlwZSwgdHlwLnR5cG5hbWUsCisJKENBU0UgV0hFTiBy ZWwucmVsdG9hc3RyZWxpZCA9IDAgVEhFTiBmYWxzZSBFTFNFIHRydWUgRU5EKSBBUyBoYXN0b2Fz dHRhYmxlLAorICAgIC0tIEFkZGVkIGZvciBwZ0FkbWluNAorCShDQVNFIFdIRU4gKHN1YnN0cmlu ZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV9l bmFibGVkPShbYS16fDAtOV0qKScpKTo6Ym9vbGVhbiAgVEhFTiB0cnVlIEVMU0UgZmFsc2UgRU5E KSBBUyBhdXRvdmFjdXVtX2N1c3RvbSwKKwkoQ0FTRSBXSEVOIChzdWJzdHJpbmcoYXJyYXlfdG9f c3RyaW5nKHRzdC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fZW5hYmxlZD0oW2Et enwwLTldKiknKSk6OmJvb2xlYW4gIEFORCByZWwucmVsdG9hc3RyZWxpZCAhPSAwIFRIRU4gdHJ1 ZSBFTFNFIGZhbHNlIEVORCkgQVMgdG9hc3RfYXV0b3ZhY3V1bSwKKworCShTRUxFQ1QgYXJyYXlf YWdnKHByb3ZpZGVyIHx8ICc9JyB8fCBsYWJlbCkgRlJPTSBwZ19zZWNsYWJlbHMgc2wxIFdIRVJF IHNsMS5vYmpvaWQ9cmVsLm9pZCBBTkQgc2wxLm9ianN1YmlkPTApIEFTIHNlY2xhYmVscywKKwko Q0FTRSBXSEVOIHJlbC5vaWQgPD0ge3sgZGF0bGFzdHN5c29pZH19OjpvaWQgVEhFTiB0cnVlIEVs U0UgZmFsc2UgRU5EKSBBUyBpc19zeXNfdGFibGUsCisJLS0gQWRkZWQgZm9yIHBhcnRpdGlvbiB0 YWJsZQorCShDQVNFIFdIRU4gcmVsLnJlbGtpbmQgPSAncCcgVEhFTiB0cnVlIEVMU0UgZmFsc2Ug RU5EKSBBUyBpc19wYXJ0aXRpb25lZCwKKwkoQ0FTRSBXSEVOIHJlbC5yZWxraW5kID0gJ3AnIFRI RU4gcGdfZ2V0X3BhcnRrZXlkZWYocmVsLm9pZDo6b2lkKSBFTFNFICcnIEVORCkgQVMgcGFydGl0 aW9uX3NjaGVtZSwKKwl7JSBpZiBwdGlkICV9CisJICAoQ0FTRSBXSEVOIHJlbC5yZWxpc3BhcnRp dGlvbiBUSEVOIHBnX2dldF9leHByKHJlbC5yZWxwYXJ0Ym91bmQsIHt7IHB0aWQgfX06Om9pZCkg RUxTRSAnJyBFTkQpIEFTIHBhcnRpdGlvbl92YWx1ZSwKKwkgIChTRUxFQ1QgcmVsbmFtZSBGUk9N IHBnX2NsYXNzIFdIRVJFIG9pZCA9IHt7IHRpZCB9fTo6b2lkKSBBUyBwYXJ0aXRpb25lZF90YWJs ZV9uYW1lCisJeyUgZWxzZSAlfQorCSAgcGdfZ2V0X2V4cHIocmVsLnJlbHBhcnRib3VuZCwgcmVs Lm9pZCkgQVMgcGFydGl0aW9uX3ZhbHVlCisJeyUgZW5kaWYgJX0KKworRlJPTSBwZ19jbGFzcyBy ZWwKKyAgTEVGVCBPVVRFUiBKT0lOIHBnX3RhYmxlc3BhY2Ugc3BjIG9uIHNwYy5vaWQ9cmVsLnJl bHRhYmxlc3BhY2UKKyAgTEVGVCBPVVRFUiBKT0lOIHBnX2Rlc2NyaXB0aW9uIGRlcyBPTiAoZGVz Lm9iam9pZD1yZWwub2lkIEFORCBkZXMub2Jqc3ViaWQ9MCBBTkQgZGVzLmNsYXNzb2lkPSdwZ19j bGFzcyc6OnJlZ2NsYXNzKQorICBMRUZUIE9VVEVSIEpPSU4gcGdfY29uc3RyYWludCBjb24gT04g Y29uLmNvbnJlbGlkPXJlbC5vaWQgQU5EIGNvbi5jb250eXBlPSdwJworICBMRUZUIE9VVEVSIEpP SU4gcGdfY2xhc3MgdHN0IE9OIHRzdC5vaWQgPSByZWwucmVsdG9hc3RyZWxpZAorICBMRUZUIEpP SU4gcGdfdHlwZSB0eXAgT04gcmVsLnJlbG9mdHlwZT10eXAub2lkCisgIExFRlQgSk9JTiBwZ19p bmhlcml0cyBpbmggT04gaW5oLmluaHJlbGlkID0gcmVsLm9pZAorICBMRUZUIEpPSU4gcGdfbmFt ZXNwYWNlIG5zcCBPTiByZWwucmVsbmFtZXNwYWNlID0gbnNwLm9pZAorV0hFUkUgcmVsLnJlbGlz cGFydGl0aW9uIEFORCBpbmguaW5ocGFyZW50ID0ge3sgdGlkIH19OjpvaWQKK3slIGlmIHB0aWQg JX0gIEFORCByZWwub2lkID0ge3sgcHRpZCB9fTo6b2lkIHslIGVuZGlmICV9CitPUkRFUiBCWSBy ZWwucmVsbmFtZTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsLzEw X3BsdXMvYWNsLnNxbCBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsLzEwX3BsdXMvYWNs LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYWRmOWQ1Ci0tLSAvZGV2 L251bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9hY2wuc3Fs CkBAIC0wLDAgKzEsNDYgQEAKK3sjIyMgU1FMIHRvIGZldGNoIHByaXZpbGVnZXMgZm9yIHRhYmxl c3BhY2UgIyMjfQorU0VMRUNUICdyZWxhY2wnIGFzIGRlZnR5cGUsIENPQUxFU0NFKGd0LnJvbG5h bWUsICdQVUJMSUMnKSBncmFudGVlLCBnLnJvbG5hbWUgZ3JhbnRvciwKKyAgICBhcnJheV9hZ2co cHJpdmlsZWdlX3R5cGUpIGFzIHByaXZpbGVnZXMsIGFycmF5X2FnZyhpc19ncmFudGFibGUpIGFz IGdyYW50YWJsZQorRlJPTQorICAoU0VMRUNUCisgICAgZC5ncmFudGVlLCBkLmdyYW50b3IsIGQu aXNfZ3JhbnRhYmxlLAorICAgIENBU0UgZC5wcml2aWxlZ2VfdHlwZQorCQlXSEVOICdDT05ORUNU JyBUSEVOICdjJworCQlXSEVOICdDUkVBVEUnIFRIRU4gJ0MnCisJCVdIRU4gJ0RFTEVURScgVEhF TiAnZCcKKwkJV0hFTiAnRVhFQ1VURScgVEhFTiAnWCcKKwkJV0hFTiAnSU5TRVJUJyBUSEVOICdh JworCQlXSEVOICdSRUZFUkVOQ0VTJyBUSEVOICd4JworCQlXSEVOICdTRUxFQ1QnIFRIRU4gJ3In CisJCVdIRU4gJ1RFTVBPUkFSWScgVEhFTiAnVCcKKwkJV0hFTiAnVFJJR0dFUicgVEhFTiAndCcK KwkJV0hFTiAnVFJVTkNBVEUnIFRIRU4gJ0QnCisJCVdIRU4gJ1VQREFURScgVEhFTiAndycKKwkJ V0hFTiAnVVNBR0UnIFRIRU4gJ1UnCisJCUVMU0UgJ1VOS05PV04nCisJRU5EIEFTIHByaXZpbGVn ZV90eXBlCisgIEZST00KKyAgICAoU0VMRUNUIHJlbC5yZWxhY2wKKyAgICAgICAgRlJPTSBwZ19j bGFzcyByZWwKKyAgICAgICAgICBMRUZUIE9VVEVSIEpPSU4gcGdfdGFibGVzcGFjZSBzcGMgb24g c3BjLm9pZD1yZWwucmVsdGFibGVzcGFjZQorICAgICAgICAgIExFRlQgT1VURVIgSk9JTiBwZ19j b25zdHJhaW50IGNvbiBPTiBjb24uY29ucmVsaWQ9cmVsLm9pZCBBTkQgY29uLmNvbnR5cGU9J3An CisgICAgICAgICAgTEVGVCBPVVRFUiBKT0lOIHBnX2NsYXNzIHRzdCBPTiB0c3Qub2lkID0gcmVs LnJlbHRvYXN0cmVsaWQKKyAgICAgICAgICBMRUZUIEpPSU4gcGdfdHlwZSB0eXAgT04gcmVsLnJl bG9mdHlwZT10eXAub2lkCisgICAgICAgIFdIRVJFIHJlbC5yZWxraW5kIElOICgncicsJ3MnLCd0 JywncCcpIEFORCByZWwucmVsbmFtZXNwYWNlID0ge3sgc2NpZCB9fTo6b2lkCisgICAgICAgICAg ICBBTkQgcmVsLm9pZCA9IHt7IHRpZCB9fTo6b2lkCisgICAgKSBhY2wsCisgICAgKFNFTEVDVCAo ZCkuZ3JhbnRlZSBBUyBncmFudGVlLCAoZCkuZ3JhbnRvciBBUyBncmFudG9yLCAoZCkuaXNfZ3Jh bnRhYmxlCisgICAgICAgIEFTIGlzX2dyYW50YWJsZSwgKGQpLnByaXZpbGVnZV90eXBlIEFTIHBy aXZpbGVnZV90eXBlIEZST00gKFNFTEVDVAorICAgICAgICBhY2xleHBsb2RlKHJlbC5yZWxhY2wp IGFzIGQKKyAgICAgICAgRlJPTSBwZ19jbGFzcyByZWwKKyAgICAgICAgICBMRUZUIE9VVEVSIEpP SU4gcGdfdGFibGVzcGFjZSBzcGMgb24gc3BjLm9pZD1yZWwucmVsdGFibGVzcGFjZQorICAgICAg ICAgIExFRlQgT1VURVIgSk9JTiBwZ19jb25zdHJhaW50IGNvbiBPTiBjb24uY29ucmVsaWQ9cmVs Lm9pZCBBTkQgY29uLmNvbnR5cGU9J3AnCisgICAgICAgICAgTEVGVCBPVVRFUiBKT0lOIHBnX2Ns YXNzIHRzdCBPTiB0c3Qub2lkID0gcmVsLnJlbHRvYXN0cmVsaWQKKyAgICAgICAgICBMRUZUIEpP SU4gcGdfdHlwZSB0eXAgT04gcmVsLnJlbG9mdHlwZT10eXAub2lkCisgICAgICAgIFdIRVJFIHJl bC5yZWxraW5kIElOICgncicsJ3MnLCd0JywncCcpIEFORCByZWwucmVsbmFtZXNwYWNlID0ge3sg c2NpZCB9fTo6b2lkCisgICAgICAgICAgICBBTkQgcmVsLm9pZCA9IHt7IHRpZCB9fTo6b2lkCisg ICAgICAgICkgYSkgZAorICAgICkgZAorICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19yb2xlcyBn IE9OIChkLmdyYW50b3IgPSBnLm9pZCkKKyAgTEVGVCBKT0lOIHBnX2NhdGFsb2cucGdfcm9sZXMg Z3QgT04gKGQuZ3JhbnRlZSA9IGd0Lm9pZCkKK0dST1VQIEJZIGcucm9sbmFtZSwgZ3Qucm9sbmFt ZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9nZXRf aW5oZXJpdHMuc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9nZXRf aW5oZXJpdHMuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOGYyOTgK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2Vy dmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3RhYmxlL3NxbC8xMF9wbHVz L2dldF9pbmhlcml0cy5zcWwKQEAgLTAsMCArMSwxNyBAQAoreyUgaW1wb3J0ICd0YWJsZS9zcWwv bWFjcm9zL2RiX2NhdGFsb2dzLm1hY3JvJyBhcyBDQVRBTE9HICV9CitTRUxFQ1QgYy5vaWQsIGMu cmVsbmFtZSAsIG5zcG5hbWUsCitDQVNFIFdIRU4gbnNwbmFtZSBOT1QgTElLRSBFJ3BnXF8lJyBU SEVOCisgcXVvdGVfaWRlbnQobnNwbmFtZSl8fCcuJ3x8cXVvdGVfaWRlbnQoYy5yZWxuYW1lKQor RUxTRSBxdW90ZV9pZGVudChjLnJlbG5hbWUpCitFTkQgQVMgaW5oZXJpdHMKK0ZST00gcGdfY2xh c3MgYworSk9JTiBwZ19uYW1lc3BhY2UgbgorT04gbi5vaWQ9Yy5yZWxuYW1lc3BhY2UKK1dIRVJF IHJlbGtpbmQ9J3InIEFORCBOT1QgcmVsaXNwYXJ0aXRpb24KK3slIGlmIG5vdCBzaG93X3N5c3Rl bV9vYmplY3RzICV9Cit7eyBDQVRBTE9HLlZBTElEX0NBVEFMT0dTKHNlcnZlcl90eXBlKSB9fQor eyUgZW5kaWYgJX0KK3slIGlmIHRpZCAlfQorQU5EIGMub2lkICE9IHRpZAoreyUgZW5kaWYgJX0K K09SREVSIEJZIHJlbG5hbWVzcGFjZSwgYy5yZWxuYW1lClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg ZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9n ZXRfb2lkLnNxbCBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsLzEwX3BsdXMvZ2V0X29p ZC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYzMDY5OAotLS0gL2Rl di9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsLzEwX3BsdXMvZ2V0X29p ZC5zcWwKQEAgLTAsMCArMSw1IEBACitTRUxFQ1QgcmVsLm9pZCBhcyB0aWQKK0ZST00gcGdfY2xh c3MgcmVsCitXSEVSRSByZWwucmVsa2luZCBJTiAoJ3InLCdzJywndCcsJ3AnKQorQU5EIHJlbC5y ZWxuYW1lc3BhY2UgPSB7eyBzY2lkIH19OjpvaWQKK0FORCByZWwucmVsbmFtZSA9IHt7ZGF0YS5u YW1lfHF0TGl0ZXJhbH19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVt YXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9nZXRfdGFibGUuc3FsIGIvd2Vi L3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMv dGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9nZXRfdGFibGUuc3FsCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NTJjOGQKLS0tIC9kZXYvbnVsbAorKysgYi93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvdGVtcGxhdGVzL3RhYmxlL3NxbC8xMF9wbHVzL2dldF90YWJsZS5zcWwKQEAgLTAs MCArMSw4IEBACitTRUxFQ1QKKyAgICByZWwucmVsbmFtZSBBUyBuYW1lCitGUk9NCisgICAgcGdf Y2xhc3MgcmVsCitXSEVSRQorICAgIHJlbC5yZWxraW5kIElOICgncicsJ3MnLCd0JywncCcpCisg ICAgQU5EIHJlbC5yZWxuYW1lc3BhY2UgPSB7eyBzY2lkIH19OjpvaWQKKyAgICBBTkQgcmVsLm9p ZCA9IHt7IHRpZCB9fTo6b2lkOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp dCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9z Y2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsLzEwX3BsdXMvbm9kZXMuc3FsIGIvd2Vi L3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMv dGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9ub2Rlcy5zcWwKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJmOWM0MgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9w Z2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3Rh Ymxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsLzEwX3BsdXMvbm9kZXMuc3FsCkBAIC0wLDAgKzEsOSBA QAorU0VMRUNUIHJlbC5vaWQsIHJlbC5yZWxuYW1lIEFTIG5hbWUsCisgICAgKFNFTEVDVCBjb3Vu dCgqKSBGUk9NIHBnX3RyaWdnZXIgV0hFUkUgdGdyZWxpZD1yZWwub2lkIEFORCB0Z2lzaW50ZXJu YWwgPSBGQUxTRSkgQVMgdHJpZ2dlcmNvdW50LAorICAgIChTRUxFQ1QgY291bnQoKikgRlJPTSBw Z190cmlnZ2VyIFdIRVJFIHRncmVsaWQ9cmVsLm9pZCBBTkQgdGdpc2ludGVybmFsID0gRkFMU0Ug QU5EIHRnZW5hYmxlZCA9ICdPJykgQVMgaGFzX2VuYWJsZV90cmlnZ2VycywKKyAgICAoQ0FTRSBX SEVOIHJlbC5yZWxraW5kID0gJ3AnIFRIRU4gdHJ1ZSBFTFNFIGZhbHNlIEVORCkgQVMgaXNfcGFy dGl0aW9uZWQKK0ZST00gcGdfY2xhc3MgcmVsCisgICAgV0hFUkUgcmVsLnJlbGtpbmQgSU4gKCdy JywncycsJ3QnLCdwJykgQU5EIHJlbC5yZWxuYW1lc3BhY2UgPSB7eyBzY2lkIH19OjpvaWQKKyAg ICBBTkQgTk9UIHJlbC5yZWxpc3BhcnRpdGlvbgorICAgIHslIGlmIHRpZCAlfSBBTkQgcmVsLm9p ZCA9IHt7dGlkfX06Ok9JRCB7JSBlbmRpZiAlfQorICAgIE9SREVSIEJZIHJlbC5yZWxuYW1lOwpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9wcm9wZXJ0 aWVzLnNxbCBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsLzEwX3BsdXMvcHJvcGVydGll cy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ1ODlkZgotLS0gL2Rl di9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsLzEwX3BsdXMvcHJvcGVy dGllcy5zcWwKQEAgLTAsMCArMSw3MyBAQAorU0VMRUNUIHJlbC5vaWQsIHJlbC5yZWxuYW1lIEFT IG5hbWUsIHJlbC5yZWx0YWJsZXNwYWNlIEFTIHNwY29pZCxyZWwucmVsYWNsIEFTIHJlbGFjbF9z dHIsCisgIChDQVNFIFdIRU4gbGVuZ3RoKHNwYy5zcGNuYW1lKSA+IDAgVEhFTiBzcGMuc3BjbmFt ZSBFTFNFCisgICAgKFNFTEVDVCBzcC5zcGNuYW1lIEZST00gcGdfZGF0YWJhc2UgZHRiCisgICAg Sk9JTiBwZ190YWJsZXNwYWNlIHNwIE9OIGR0Yi5kYXR0YWJsZXNwYWNlPXNwLm9pZAorICAgIFdI RVJFIGR0Yi5vaWQgPSB7eyBkaWQgfX06Om9pZCkKKyAgRU5EKSBhcyBzcGNuYW1lLAorICAoc2Vs ZWN0IG5zcG5hbWUgRlJPTSBwZ19uYW1lc3BhY2UgV0hFUkUgb2lkID0ge3tzY2lkfX06Om9pZCAp IGFzIHNjaGVtYSwKKyAgcGdfZ2V0X3VzZXJieWlkKHJlbC5yZWxvd25lcikgQVMgcmVsb3duZXIs IHJlbC5yZWxoYXNvaWRzLCByZWwucmVsa2luZCwKKyAgKENBU0UgV0hFTiByZWwucmVsa2luZCA9 ICdwJyBUSEVOIHRydWUgRUxTRSBmYWxzZSBFTkQpIEFTIGlzX3BhcnRpdGlvbmVkLAorICByZWwu cmVsaGFzc3ViY2xhc3MsIHJlbC5yZWx0dXBsZXMsIGRlcy5kZXNjcmlwdGlvbiwgY29uLmNvbm5h bWUsIGNvbi5jb25rZXksCisJRVhJU1RTKHNlbGVjdCAxIEZST00gcGdfdHJpZ2dlcgorCQkJSk9J TiBwZ19wcm9jIHB0IE9OIHB0Lm9pZD10Z2ZvaWQgQU5EIHB0LnByb25hbWU9J2xvZ3RyaWdnZXIn CisJCQlKT0lOIHBnX3Byb2MgcGMgT04gcGMucHJvbmFtZXNwYWNlPXB0LnByb25hbWVzcGFjZSBB TkQgcGMucHJvbmFtZT0nc2xvbnl2ZXJzaW9uJworCQkJV0hFUkUgdGdyZWxpZD1yZWwub2lkKSBB UyBpc3JlcGwsCisJKFNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3RyaWdnZXIgV0hFUkUgdGdyZWxp ZD1yZWwub2lkIEFORCB0Z2lzaW50ZXJuYWwgPSBGQUxTRSkgQVMgdHJpZ2dlcmNvdW50LAorCShT RUxFQ1QgQVJSQVkoU0VMRUNUIENBU0UgV0hFTiAobnNwbmFtZSBOT1QgTElLRSBFJ3BnXF8lJykg VEhFTgorICAgICAgICAgICAgcXVvdGVfaWRlbnQobnNwbmFtZSl8fCcuJ3x8cXVvdGVfaWRlbnQo Yy5yZWxuYW1lKQorICAgICAgICAgICAgRUxTRSBxdW90ZV9pZGVudChjLnJlbG5hbWUpIEVORCBB UyBpbmhlcml0ZWRfdGFibGVzCisgICAgRlJPTSBwZ19pbmhlcml0cyBpCisgICAgSk9JTiBwZ19j bGFzcyBjIE9OIGMub2lkID0gaS5pbmhwYXJlbnQKKyAgICBKT0lOIHBnX25hbWVzcGFjZSBuIE9O IG4ub2lkPWMucmVsbmFtZXNwYWNlCisgICAgV0hFUkUgaS5pbmhyZWxpZCA9IHJlbC5vaWQgT1JE RVIgQlkgaW5oc2Vxbm8pKSBBUyBjb2xsX2luaGVyaXRzLAorICAoU0VMRUNUIGNvdW50KCopCisJ CUZST00gcGdfaW5oZXJpdHMgaQorICAgICAgSk9JTiBwZ19jbGFzcyBjIE9OIGMub2lkID0gaS5p bmhwYXJlbnQKKyAgICAgIEpPSU4gcGdfbmFtZXNwYWNlIG4gT04gbi5vaWQ9Yy5yZWxuYW1lc3Bh Y2UKKwkJV0hFUkUgaS5pbmhyZWxpZCA9IHJlbC5vaWQpIEFTIGluaGVyaXRlZF90YWJsZXNfY250 LAorCShDQVNFIFdIRU4gcmVsLnJlbHBlcnNpc3RlbmNlID0gJ3UnIFRIRU4gdHJ1ZSBFTFNFIGZh bHNlIEVORCkgQVMgcmVscGVyc2lzdGVuY2UsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhy ZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdmaWxsZmFjdG9yPShbMC05XSopJykgQVMgZmlsbGZh Y3RvciwKKwkoQ0FTRSBXSEVOIChzdWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHJlbC5yZWxvcHRp b25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fZW5hYmxlZD0oW2EtenwwLTldKiknKSA9ICd0cnVl JykKKwkgIFRIRU4gdHJ1ZSBFTFNFIGZhbHNlIEVORCkgQVMgYXV0b3ZhY3V1bV9lbmFibGVkLAor CXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0 b3ZhY3V1bV92YWN1dW1fdGhyZXNob2xkPShbMC05XSopJykgQVMgYXV0b3ZhY3V1bV92YWN1dW1f dGhyZXNob2xkLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcs JykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1fc2NhbGVfZmFjdG9yPShbMC05XSpbLl1bMC05XSop JykgQVMgYXV0b3ZhY3V1bV92YWN1dW1fc2NhbGVfZmFjdG9yLAorCXN1YnN0cmluZyhhcnJheV90 b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV9hbmFseXplX3Ro cmVzaG9sZD0oWzAtOV0qKScpIEFTIGF1dG92YWN1dW1fYW5hbHl6ZV90aHJlc2hvbGQsCisJc3Vi c3RyaW5nKGFycmF5X3RvX3N0cmluZyhyZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFj dXVtX2FuYWx5emVfc2NhbGVfZmFjdG9yPShbMC05XSpbLl1bMC05XSopJykgQVMgYXV0b3ZhY3V1 bV9hbmFseXplX3NjYWxlX2ZhY3RvciwKKwlzdWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHJlbC5y ZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fdmFjdXVtX2Nvc3RfZGVsYXk9KFswLTld KiknKSBBUyBhdXRvdmFjdXVtX3ZhY3V1bV9jb3N0X2RlbGF5LAorCXN1YnN0cmluZyhhcnJheV90 b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1fY29z dF9saW1pdD0oWzAtOV0qKScpIEFTIGF1dG92YWN1dW1fdmFjdXVtX2Nvc3RfbGltaXQsCisJc3Vi c3RyaW5nKGFycmF5X3RvX3N0cmluZyhyZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFj dXVtX2ZyZWV6ZV9taW5fYWdlPShbMC05XSopJykgQVMgYXV0b3ZhY3V1bV9mcmVlemVfbWluX2Fn ZSwKKwlzdWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHJlbC5yZWxvcHRpb25zLCAnLCcpIEZST00g J2F1dG92YWN1dW1fZnJlZXplX21heF9hZ2U9KFswLTldKiknKSBBUyBhdXRvdmFjdXVtX2ZyZWV6 ZV9tYXhfYWdlLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcs JykgRlJPTSAnYXV0b3ZhY3V1bV9mcmVlemVfdGFibGVfYWdlPShbMC05XSopJykgQVMgYXV0b3Zh Y3V1bV9mcmVlemVfdGFibGVfYWdlLAorCShDQVNFIFdIRU4gKHN1YnN0cmluZyhhcnJheV90b19z dHJpbmcodHN0LnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV9lbmFibGVkPShbYS16 fDAtOV0qKScpID0gICd0cnVlJykKKwkgIFRIRU4gdHJ1ZSBFTFNFIGZhbHNlIEVORCkgQVMgdG9h c3RfYXV0b3ZhY3V1bV9lbmFibGVkLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJl bG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1fdGhyZXNob2xkPShbMC05XSop JykgQVMgdG9hc3RfYXV0b3ZhY3V1bV92YWN1dW1fdGhyZXNob2xkLAorCXN1YnN0cmluZyhhcnJh eV90b19zdHJpbmcodHN0LnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1f c2NhbGVfZmFjdG9yPShbMC05XSpbLl1bMC05XSopJykgQVMgdG9hc3RfYXV0b3ZhY3V1bV92YWN1 dW1fc2NhbGVfZmFjdG9yLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlv bnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV9hbmFseXplX3RocmVzaG9sZD0oWzAtOV0qKScpIEFT IHRvYXN0X2F1dG92YWN1dW1fYW5hbHl6ZV90aHJlc2hvbGQsCisJc3Vic3RyaW5nKGFycmF5X3Rv X3N0cmluZyh0c3QucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2FuYWx5emVfc2Nh bGVfZmFjdG9yPShbMC05XSpbLl1bMC05XSopJykgQVMgdG9hc3RfYXV0b3ZhY3V1bV9hbmFseXpl X3NjYWxlX2ZhY3RvciwKKwlzdWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHRzdC5yZWxvcHRpb25z LCAnLCcpIEZST00gJ2F1dG92YWN1dW1fdmFjdXVtX2Nvc3RfZGVsYXk9KFswLTldKiknKSBBUyB0 b2FzdF9hdXRvdmFjdXVtX3ZhY3V1bV9jb3N0X2RlbGF5LAorCXN1YnN0cmluZyhhcnJheV90b19z dHJpbmcodHN0LnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9s aW1pdD0oWzAtOV0qKScpIEFTIHRvYXN0X2F1dG92YWN1dW1fdmFjdXVtX2Nvc3RfbGltaXQsCisJ c3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3QucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRv dmFjdXVtX2ZyZWV6ZV9taW5fYWdlPShbMC05XSopJykgQVMgdG9hc3RfYXV0b3ZhY3V1bV9mcmVl emVfbWluX2FnZSwKKwlzdWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHRzdC5yZWxvcHRpb25zLCAn LCcpIEZST00gJ2F1dG92YWN1dW1fZnJlZXplX21heF9hZ2U9KFswLTldKiknKSBBUyB0b2FzdF9h dXRvdmFjdXVtX2ZyZWV6ZV9tYXhfYWdlLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0 LnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV9mcmVlemVfdGFibGVfYWdlPShbMC05 XSopJykgQVMgdG9hc3RfYXV0b3ZhY3V1bV9mcmVlemVfdGFibGVfYWdlLAorCWFycmF5X3RvX3N0 cmluZyhyZWwucmVsb3B0aW9ucywgJywnKSBBUyB0YWJsZV92YWN1dW1fc2V0dGluZ3Nfc3RyLAor CWFycmF5X3RvX3N0cmluZyh0c3QucmVsb3B0aW9ucywgJywnKSBBUyB0b2FzdF90YWJsZV92YWN1 dW1fc2V0dGluZ3Nfc3RyLAorCXJlbC5yZWxvcHRpb25zIEFTIHJlbG9wdGlvbnMsIHRzdC5yZWxv cHRpb25zIEFTIHRvYXN0X3JlbG9wdGlvbnMsIHJlbC5yZWxvZnR5cGUsIHR5cC50eXBuYW1lLAor CShDQVNFIFdIRU4gcmVsLnJlbHRvYXN0cmVsaWQgPSAwIFRIRU4gZmFsc2UgRUxTRSB0cnVlIEVO RCkgQVMgaGFzdG9hc3R0YWJsZSwKKyAgICAtLSBBZGRlZCBmb3IgcGdBZG1pbjQKKwkoQ0FTRSBX SEVOIChzdWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHJlbC5yZWxvcHRpb25zLCAnLCcpIEZST00g J2F1dG92YWN1dW1fZW5hYmxlZD0oW2EtenwwLTldKiknKSk6OmJvb2xlYW4gIFRIRU4gdHJ1ZSBF TFNFIGZhbHNlIEVORCkgQVMgYXV0b3ZhY3V1bV9jdXN0b20sCisJKENBU0UgV0hFTiAoc3Vic3Ry aW5nKGFycmF5X3RvX3N0cmluZyh0c3QucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVt X2VuYWJsZWQ9KFthLXp8MC05XSopJykpOjpib29sZWFuICBBTkQgcmVsLnJlbHRvYXN0cmVsaWQg IT0gMCBUSEVOIHRydWUgRUxTRSBmYWxzZSBFTkQpIEFTIHRvYXN0X2F1dG92YWN1dW0sCisKKwko U0VMRUNUIGFycmF5X2FnZyhwcm92aWRlciB8fCAnPScgfHwgbGFiZWwpIEZST00gcGdfc2VjbGFi ZWxzIHNsMSBXSEVSRSBzbDEub2Jqb2lkPXJlbC5vaWQgQU5EIHNsMS5vYmpzdWJpZD0wKSBBUyBz ZWNsYWJlbHMsCisJKENBU0UgV0hFTiByZWwub2lkIDw9IHt7IGRhdGxhc3RzeXNvaWR9fTo6b2lk IFRIRU4gdHJ1ZSBFbFNFIGZhbHNlIEVORCkgQVMgaXNfc3lzX3RhYmxlCisJLS0gQWRkZWQgZm9y IHBhcnRpdGlvbiB0YWJsZQorICAgIHslIGlmIHRpZCAlfSwgKENBU0UgV0hFTiByZWwucmVsa2lu ZCA9ICdwJyBUSEVOIHBnX2dldF9wYXJ0a2V5ZGVmKHt7IHRpZCB9fTo6b2lkKSBFTFNFICcnIEVO RCkgQVMgcGFydGl0aW9uX3NjaGVtZSB7JSBlbmRpZiAlfQorRlJPTSBwZ19jbGFzcyByZWwKKyAg TEVGVCBPVVRFUiBKT0lOIHBnX3RhYmxlc3BhY2Ugc3BjIG9uIHNwYy5vaWQ9cmVsLnJlbHRhYmxl c3BhY2UKKyAgTEVGVCBPVVRFUiBKT0lOIHBnX2Rlc2NyaXB0aW9uIGRlcyBPTiAoZGVzLm9iam9p ZD1yZWwub2lkIEFORCBkZXMub2Jqc3ViaWQ9MCBBTkQgZGVzLmNsYXNzb2lkPSdwZ19jbGFzcyc6 OnJlZ2NsYXNzKQorICBMRUZUIE9VVEVSIEpPSU4gcGdfY29uc3RyYWludCBjb24gT04gY29uLmNv bnJlbGlkPXJlbC5vaWQgQU5EIGNvbi5jb250eXBlPSdwJworICBMRUZUIE9VVEVSIEpPSU4gcGdf Y2xhc3MgdHN0IE9OIHRzdC5vaWQgPSByZWwucmVsdG9hc3RyZWxpZAorICBMRUZUIEpPSU4gcGdf dHlwZSB0eXAgT04gcmVsLnJlbG9mdHlwZT10eXAub2lkCitXSEVSRSByZWwucmVsa2luZCBJTiAo J3InLCdzJywndCcsJ3AnKSBBTkQgcmVsLnJlbG5hbWVzcGFjZSA9IHt7IHNjaWQgfX06Om9pZAor QU5EIE5PVCByZWwucmVsaXNwYXJ0aXRpb24KK3slIGlmIHRpZCAlfSAgQU5EIHJlbC5vaWQgPSB7 eyB0aWQgfX06Om9pZCB7JSBlbmRpZiAlfQorT1JERVIgQlkgcmVsLnJlbG5hbWU7CmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv c2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3RhYmxlL3NxbC9kZWZhdWx0L2NyZWF0ZS5zcWwgYi93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvdGVtcGxhdGVzL3RhYmxlL3NxbC9kZWZhdWx0L2NyZWF0ZS5zcWwKaW5kZXggZjhl ODU4Zi4uNWVjOGZmYyAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3Jv dXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwv ZGVmYXVsdC9jcmVhdGUuc3FsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsL2Rl ZmF1bHQvY3JlYXRlLnNxbApAQCAtNTcsNyArNTcsOCBAQCBDUkVBVEUgeyUgaWYgZGF0YS5yZWxw ZXJzaXN0ZW5jZSAlfVVOTE9HR0VEIHslIGVuZGlmICV9VEFCTEUge3tjb25ufHF0SWRlbnQoZGF0 YQoge3tDT05TVFJBSU5UUy5FWENMVURFKGNvbm4sIGRhdGEuZXhjbHVkZV9jb25zdHJhaW50KX19 eyUgZW5kaWYgJX0KIHslIGlmIGRhdGEubGlrZV9yZWxhdGlvbiBvciBkYXRhLmNvbGxfaW5oZXJp dHMgb3IgZGF0YS5jb2x1bW5zfGxlbmd0aCA+IDAgb3IgZGF0YS5wcmltYXJ5X2tleXxsZW5ndGgg PiAwIG9yIGRhdGEudW5pcXVlX2NvbnN0cmFpbnR8bGVuZ3RoID4gMCBvciBkYXRhLmZvcmVpZ25f a2V5fGxlbmd0aCA+IDAgb3IgZGF0YS5jaGVja19jb25zdHJhaW50fGxlbmd0aCA+IDAgb3IgZGF0 YS5leGNsdWRlX2NvbnN0cmFpbnR8bGVuZ3RoID4gMCAlfQogCi0pCispeyUgaWYgZGF0YS5yZWxr aW5kIGlzIGRlZmluZWQgYW5kIGRhdGEucmVsa2luZCA9PSAncCcgJX0gUEFSVElUSU9OIEJZIHt7 IGRhdGEucGFydGl0aW9uX3NjaGVtZSB9fSB7JSBlbmRpZiAlfQorCiB7JSBlbmRpZiAlfQogeyMj IyBJZiB3ZSBhcmUgaW5oZXJpdGluZyBpdCBmcm9tIGFub3RoZXIgdGFibGUocykgIyMjfQogeyUg aWYgZGF0YS5jb2xsX2luaGVyaXRzICV9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVz L3RhYmxlL3NxbC9kZWZhdWx0L2dldF9zY2hlbWFfb2lkLnNxbCBiL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0 ZXMvdGFibGUvc3FsL2RlZmF1bHQvZ2V0X3NjaGVtYV9vaWQuc3FsCmluZGV4IDRkMzI5ZDIuLjhk Zjg0YjUgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2 ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsL2RlZmF1bHQv Z2V0X3NjaGVtYV9vaWQuc3FsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsL2Rl ZmF1bHQvZ2V0X3NjaGVtYV9vaWQuc3FsCkBAIC0xLDggKzEsOSBAQAogeyMgPT09PT0gZmV0Y2gg bmV3IGFzc2lnbmVkIHNjaGVtYSBvaWQgPT09PT0gI30KIFNFTEVDVAotICAgIGMucmVsbmFtZXNw YWNlIGFzIHNjaWQKKyAgICBjLnJlbG5hbWVzcGFjZSBhcyBzY2lkLCBuc3AubnNwbmFtZSBhcyBu c3BuYW1lCiBGUk9NCiAgICAgcGdfY2xhc3MgYworTEVGVCBKT0lOIHBnX25hbWVzcGFjZSBuc3Ag T04gbnNwLm9pZCA9IGMucmVsbmFtZXNwYWNlCiBXSEVSRQogeyUgaWYgdGlkICV9CiAgICAgYy5v aWQgPSB7e3RpZH19OjpvaWQ7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVzdHMvdGVzdF90YWJs ZV9hZGQucHkgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRh YmFzZXMvc2NoZW1hcy90YWJsZXMvdGVzdHMvdGVzdF90YWJsZV9hZGQucHkKaW5kZXggMDcwM2Ni YS4uOWU0ODQ2YyAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rlc3RzL3Rlc3RfdGFibGVfYWRkLnB5 CisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNl cy9zY2hlbWFzL3RhYmxlcy90ZXN0cy90ZXN0X3RhYmxlX2FkZC5weQpAQCAtMTQsNiArMTQsNyBA QCBmcm9tIHBnYWRtaW4uYnJvd3Nlci5zZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMuZGF0YWJhc2VzLnNj aGVtYXMudGVzdHMgaW1wb3J0IFwKICAgICB1dGlscyBhcyBzY2hlbWFfdXRpbHMKIGZyb20gcGdh ZG1pbi5icm93c2VyLnNlcnZlcl9ncm91cHMuc2VydmVycy5kYXRhYmFzZXMudGVzdHMgaW1wb3J0 IHV0aWxzIGFzIFwKICAgICBkYXRhYmFzZV91dGlscworZnJvbSBwZ2FkbWluLmJyb3dzZXIuc2Vy dmVyX2dyb3Vwcy5zZXJ2ZXJzLnRlc3RzIGltcG9ydCB1dGlscyBhcyBzZXJ2ZXJfdXRpbHMKIGZy b20gcGdhZG1pbi51dGlscy5yb3V0ZSBpbXBvcnQgQmFzZVRlc3RHZW5lcmF0b3IKIGZyb20gcmVn cmVzc2lvbiBpbXBvcnQgcGFyZW50X25vZGVfZGljdAogZnJvbSByZWdyZXNzaW9uLnB5dGhvbl90 ZXN0X3V0aWxzIGltcG9ydCB0ZXN0X3V0aWxzIGFzIHV0aWxzCkBAIC0yMyw3ICsyNCwxOSBAQCBj bGFzcyBUYWJsZUFkZFRlc3RDYXNlKEJhc2VUZXN0R2VuZXJhdG9yKToKICAgICAiIiIgVGhpcyBj bGFzcyB3aWxsIGFkZCBuZXcgY29sbGF0aW9uIHVuZGVyIHNjaGVtYSBub2RlLiAiIiIKICAgICBz Y2VuYXJpb3MgPSBbCiAgICAgICAgICMgRmV0Y2hpbmcgZGVmYXVsdCBVUkwgZm9yIHRhYmxlIG5v ZGUuCi0gICAgICAgICgnRmV0Y2ggdGFibGUgTm9kZSBVUkwnLCBkaWN0KHVybD0nL2Jyb3dzZXIv dGFibGUvb2JqLycpKQorICAgICAgICAoJ0NyZWF0ZSBUYWJsZScsIGRpY3QodXJsPScvYnJvd3Nl ci90YWJsZS9vYmovJykpLAorICAgICAgICAoJ0NyZWF0ZSBSYW5nZSBwYXJ0aXRpb25lZCB0YWJs ZSB3aXRoIDIgcGFydGl0aW9ucycsCisgICAgICAgICBkaWN0KHVybD0nL2Jyb3dzZXIvdGFibGUv b2JqLycsCisgICAgICAgICAgICAgIHNlcnZlcl9taW5fdmVyc2lvbj0xMDAwMDAsCisgICAgICAg ICAgICAgIHBhcnRpdGlvbl90eXBlPSdyYW5nZScKKyAgICAgICAgICAgICAgKQorICAgICAgICAg KSwKKyAgICAgICAgKCdDcmVhdGUgTGlzdCBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIDIgcGFydGl0 aW9ucycsCisgICAgICAgICBkaWN0KHVybD0nL2Jyb3dzZXIvdGFibGUvb2JqLycsCisgICAgICAg ICAgICAgIHNlcnZlcl9taW5fdmVyc2lvbj0xMDAwMDAsCisgICAgICAgICAgICAgIHBhcnRpdGlv bl90eXBlPSdsaXN0JworICAgICAgICAgICAgICApCisgICAgICAgICApCiAgICAgXQogCiAgICAg ZGVmIHNldFVwKHNlbGYpOgpAQCAtNDMsNiArNTYsMTkgQEAgY2xhc3MgVGFibGVBZGRUZXN0Q2Fz ZShCYXNlVGVzdEdlbmVyYXRvcik6CiAgICAgICAgIGlmIG5vdCBzY2hlbWFfcmVzcG9uc2U6CiAg ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvdWxkIG5vdCBmaW5kIHRoZSBzY2hlbWEgdG8g YWRkIGEgdGFibGUuIikKIAorICAgICAgICBzZWxmLmlzX3BhcnRpdGlvbiA9IEZhbHNlCisgICAg ICAgIGlmIGhhc2F0dHIoc2VsZiwgJ3NlcnZlcl9taW5fdmVyc2lvbicpOgorICAgICAgICAgICAg c2VydmVyX2NvbiA9IHNlcnZlcl91dGlscy5jb25uZWN0X3NlcnZlcihzZWxmLCBzZWxmLnNlcnZl cl9pZCkKKyAgICAgICAgICAgIGlmIG5vdCBzZXJ2ZXJfY29uWyJpbmZvIl0gPT0gIlNlcnZlciBj b25uZWN0ZWQuIjoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oIkNvdWxkIG5vdCBj b25uZWN0IHRvIHNlcnZlciB0byBhZGQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAicGFydGl0aW9uZWQgdGFibGUuIikKKyAgICAgICAgICAgIGlmIHNlcnZlcl9jb25bImRhdGEi XVsidmVyc2lvbiJdIDwgc2VsZi5zZXJ2ZXJfbWluX3ZlcnNpb246CisgICAgICAgICAgICAgICAg bWVzc2FnZSA9ICJQYXJ0aXRpb25lZCB0YWJsZSBhcmUgbm90IHN1cHBvcnRlZCBieSAiIFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIlBQQVMvUEcgMTAuMCBhbmQgYmVsb3cuIgorICAgICAg ICAgICAgICAgIHNlbGYuc2tpcFRlc3QobWVzc2FnZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAg ICAgICAgICAgICAgc2VsZi5pc19wYXJ0aXRpb24gPSBUcnVlCisKICAgICBkZWYgcnVuVGVzdChz ZWxmKToKICAgICAgICAgIiIiIFRoaXMgZnVuY3Rpb24gd2lsbCBhZGQgdGFibGUgdW5kZXIgc2No ZW1hIG5vZGUuICIiIgogICAgICAgICBkYl91c2VyID0gc2VsZi5zZXJ2ZXJbInVzZXJuYW1lIl0K QEAgLTY4LDcgKzk0LDcgQEAgY2xhc3MgVGFibGVBZGRUZXN0Q2FzZShCYXNlVGVzdEdlbmVyYXRv cik6CiAgICAgICAgICAgICAgICAgICAgICJzZWNsYWJlbHMiOiBbXQogICAgICAgICAgICAgICAg IH0sCiAgICAgICAgICAgICAgICAgeyJuYW1lIjogIkRPSiIsCi0gICAgICAgICAgICAgICAgICJj bHR5cGUiOiAiZGF0ZVtdIiwKKyAgICAgICAgICAgICAgICAgImNsdHlwZSI6ICJkYXRlIiwKICAg ICAgICAgICAgICAgICAgImF0dGFjbCI6IFtdLAogICAgICAgICAgICAgICAgICAiaXNfcHJpbWFy eV9rZXkiOiBGYWxzZSwKICAgICAgICAgICAgICAgICAgImF0dG9wdGlvbnMiOiBbXSwKQEAgLTc2 LDcgKzEwMiw3IEBAIGNsYXNzIFRhYmxlQWRkVGVzdENhc2UoQmFzZVRlc3RHZW5lcmF0b3IpOgog ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBdLAogICAgICAgICAgICAgImV4Y2x1ZGVf Y29uc3RyYWludCI6IFtdLAotICAgICAgICAgICAgImZpbGxmYWN0b3IiOiAiMTEiLAorICAgICAg ICAgICAgImZpbGxmYWN0b3IiOiAiIiwKICAgICAgICAgICAgICJoYXN0b2FzdHRhYmxlIjogVHJ1 ZSwKICAgICAgICAgICAgICJsaWtlX2NvbnN0cmFpbnRzIjogVHJ1ZSwKICAgICAgICAgICAgICJs aWtlX2RlZmF1bHRfdmFsdWUiOiBUcnVlLApAQCAtMTY2LDYgKzE5MiwzNSBAQCBjbGFzcyBUYWJs ZUFkZFRlc3RDYXNlKEJhc2VUZXN0R2VuZXJhdG9yKToKICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICBdCiAgICAgICAgIH0KKworICAgICAgICBpZiBzZWxmLmlzX3BhcnRpdGlvbjoKKyAg ICAgICAgICAgIGRhdGFbJ3BhcnRpdGlvbl90eXBlJ10gPSBzZWxmLnBhcnRpdGlvbl90eXBlCisg ICAgICAgICAgICBkYXRhWydpc19wYXJ0aXRpb25lZCddID0gVHJ1ZQorICAgICAgICAgICAgaWYg c2VsZi5wYXJ0aXRpb25fdHlwZSA9PSAncmFuZ2UnOgorICAgICAgICAgICAgICAgIGRhdGFbJ3Bh cnRpdGlvbnMnXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgW3sndmFsdWVzX2Zyb20nOiAiJzIw MTAtMDEtMDEnIiwKKyAgICAgICAgICAgICAgICAgICAgICAndmFsdWVzX3RvJzogIicyMDEwLTEy LTMxJyIsCisgICAgICAgICAgICAgICAgICAgICAgJ2lzX2F0dGFjaCc6IEZhbHNlLAorICAgICAg ICAgICAgICAgICAgICAgICdwYXJ0aXRpb25fbmFtZSc6ICdlbXBfMjAxMCcKKyAgICAgICAgICAg ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgeyd2YWx1ZXNfZnJvbSc6ICInMjAx MS0wMS0wMSciLAorICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZXNfdG8nOiAiJzIwMTEtMTIt MzEnIiwKKyAgICAgICAgICAgICAgICAgICAgICAnaXNfYXR0YWNoJzogRmFsc2UsCisgICAgICAg ICAgICAgICAgICAgICAgJ3BhcnRpdGlvbl9uYW1lJzogJ2VtcF8yMDExJworICAgICAgICAgICAg ICAgICAgICAgIH1dCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGRhdGFbJ3Bh cnRpdGlvbnMnXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgW3sndmFsdWVzX2luJzogIicyMDEy LTAxLTAxJywgJzIwMTItMTItMzEnIiwKKyAgICAgICAgICAgICAgICAgICAgICAnaXNfYXR0YWNo JzogRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgJ3BhcnRpdGlvbl9uYW1lJzogJ2VtcF8y MDEyJworICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICB7J3Zh bHVlc19pbic6ICInMjAxMy0wMS0wMScsICcyMDEzLTEyLTMxJyIsCisgICAgICAgICAgICAgICAg ICAgICAgJ2lzX2F0dGFjaCc6IEZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICdwYXJ0aXRp b25fbmFtZSc6ICdlbXBfMjAxMycKKyAgICAgICAgICAgICAgICAgICAgICB9XQorICAgICAgICAg ICAgZGF0YVsncGFydGl0aW9uX2tleXMnXSA9IFwKKyAgICAgICAgICAgICAgICBbeydrZXlfdHlw ZSc6ICdjb2x1bW4nLCAncHRfY29sdW1uJzogJ0RPSid9XQorCiAgICAgICAgICMgQWRkIHRhYmxl CiAgICAgICAgIHJlc3BvbnNlID0gc2VsZi50ZXN0ZXIucG9zdCgKICAgICAgICAgICAgIHNlbGYu dXJsICsgc3RyKHV0aWxzLlNFUlZFUl9HUk9VUCkgKyAnLycgKwpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFi bGVzL3Rlc3RzL3Rlc3RfdGFibGVfZGVsZXRlLnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2 ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rlc3RzL3Rlc3RfdGFi bGVfZGVsZXRlLnB5CmluZGV4IDFiMmY5ZjUuLjk3NDlmZWQgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxl cy90ZXN0cy90ZXN0X3RhYmxlX2RlbGV0ZS5weQorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3Nl cnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVzdHMvdGVzdF90 YWJsZV9kZWxldGUucHkKQEAgLTIzLDcgKzIzLDcgQEAgY2xhc3MgVGFibGVEZWxldGVUZXN0Q2Fz ZShCYXNlVGVzdEdlbmVyYXRvcik6CiAgICAgIiIiVGhpcyBjbGFzcyB3aWxsIGRlbGV0ZSBuZXcg dGFibGUgdW5kZXIgc2NoZW1hIG5vZGUuIiIiCiAgICAgc2NlbmFyaW9zID0gWwogICAgICAgICAj IEZldGNoaW5nIGRlZmF1bHQgVVJMIGZvciB0YWJsZSBub2RlLgotICAgICAgICAoJ0ZldGNoIHRh YmxlIE5vZGUgVVJMJywgZGljdCh1cmw9Jy9icm93c2VyL3RhYmxlL29iai8nKSkKKyAgICAgICAg KCdEZWxldGUgVGFibGUnLCBkaWN0KHVybD0nL2Jyb3dzZXIvdGFibGUvb2JqLycpKQogICAgIF0K IAogICAgIGRlZiBzZXRVcChzZWxmKToKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIv c2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZXN0cy90ZXN0 X3RhYmxlX3B1dC5weSBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZXN0cy90ZXN0X3RhYmxlX3B1dC5weQppbmRleCBi ZmJmODg0Li5lZjQ3NmQ3IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9n cm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVzdHMvdGVzdF90YWJsZV9w dXQucHkKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rlc3RzL3Rlc3RfdGFibGVfcHV0LnB5CkBAIC0xNCw2ICsx NCw3IEBAIGZyb20gcGdhZG1pbi5icm93c2VyLnNlcnZlcl9ncm91cHMuc2VydmVycy5kYXRhYmFz ZXMuc2NoZW1hcy50ZXN0cyBpbXBvcnQgXAogICAgIHV0aWxzIGFzIHNjaGVtYV91dGlscwogZnJv bSBwZ2FkbWluLmJyb3dzZXIuc2VydmVyX2dyb3Vwcy5zZXJ2ZXJzLmRhdGFiYXNlcy50ZXN0cyBp bXBvcnQgdXRpbHMgYXMgXAogICAgIGRhdGFiYXNlX3V0aWxzCitmcm9tIHBnYWRtaW4uYnJvd3Nl ci5zZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMudGVzdHMgaW1wb3J0IHV0aWxzIGFzIHNlcnZlcl91dGls cwogZnJvbSBwZ2FkbWluLnV0aWxzLnJvdXRlIGltcG9ydCBCYXNlVGVzdEdlbmVyYXRvcgogZnJv bSByZWdyZXNzaW9uIGltcG9ydCBwYXJlbnRfbm9kZV9kaWN0CiBmcm9tIHJlZ3Jlc3Npb24ucHl0 aG9uX3Rlc3RfdXRpbHMgaW1wb3J0IHRlc3RfdXRpbHMgYXMgdXRpbHMKQEAgLTI0LDcgKzI1LDQ5 IEBAIGNsYXNzIFRhYmxlVXBkYXRlVGVzdENhc2UoQmFzZVRlc3RHZW5lcmF0b3IpOgogICAgICIi IlRoaXMgY2xhc3Mgd2lsbCBhZGQgbmV3IGNvbGxhdGlvbiB1bmRlciBzY2hlbWEgbm9kZS4iIiIK ICAgICBzY2VuYXJpb3MgPSBbCiAgICAgICAgICMgRmV0Y2hpbmcgZGVmYXVsdCBVUkwgZm9yIHRh YmxlIG5vZGUuCi0gICAgICAgICgnRmV0Y2ggdGFibGUgTm9kZSBVUkwnLCBkaWN0KHVybD0nL2Jy b3dzZXIvdGFibGUvb2JqLycpKQorICAgICAgICAoJ1VwZGF0ZSBUYWJsZScsIGRpY3QodXJsPScv YnJvd3Nlci90YWJsZS9vYmovJykpLAorICAgICAgICAoJ0NyZWF0ZSBwYXJ0aXRpb25zIG9mIGV4 aXN0aW5nIHJhbmdlIHBhcnRpdGlvbmVkIHRhYmxlJywKKyAgICAgICAgIGRpY3QodXJsPScvYnJv d3Nlci90YWJsZS9vYmovJywKKyAgICAgICAgICAgICAgc2VydmVyX21pbl92ZXJzaW9uPTEwMDAw MCwKKyAgICAgICAgICAgICAgcGFydGl0aW9uX3R5cGU9J3JhbmdlJywKKyAgICAgICAgICAgICAg bW9kZT0nY3JlYXRlJworICAgICAgICAgICAgICApCisgICAgICAgICApLAorICAgICAgICAoJ0Ny ZWF0ZSBwYXJ0aXRpb25zIG9mIGV4aXN0aW5nIGxpc3QgcGFydGl0aW9uZWQgdGFibGUnLAorICAg ICAgICAgZGljdCh1cmw9Jy9icm93c2VyL3RhYmxlL29iai8nLAorICAgICAgICAgICAgICBzZXJ2 ZXJfbWluX3ZlcnNpb249MTAwMDAwLAorICAgICAgICAgICAgICBwYXJ0aXRpb25fdHlwZT0nbGlz dCcsCisgICAgICAgICAgICAgIG1vZGU9J2NyZWF0ZScKKyAgICAgICAgICAgICAgKQorICAgICAg ICAgKSwKKyAgICAgICAgKCdEZXRhY2ggcGFydGl0aW9uIGZyb20gZXhpc3RpbmcgcmFuZ2UgcGFy dGl0aW9uZWQgdGFibGUnLAorICAgICAgICAgZGljdCh1cmw9Jy9icm93c2VyL3RhYmxlL29iai8n LAorICAgICAgICAgICAgICBzZXJ2ZXJfbWluX3ZlcnNpb249MTAwMDAwLAorICAgICAgICAgICAg ICBwYXJ0aXRpb25fdHlwZT0ncmFuZ2UnLAorICAgICAgICAgICAgICBtb2RlPSdkZXRhY2gnCisg ICAgICAgICAgICAgICkKKyAgICAgICAgICksCisgICAgICAgICgnRGV0YWNoIHBhcnRpdGlvbiBm cm9tIGV4aXN0aW5nIGxpc3QgcGFydGl0aW9uZWQgdGFibGUnLAorICAgICAgICAgZGljdCh1cmw9 Jy9icm93c2VyL3RhYmxlL29iai8nLAorICAgICAgICAgICAgICBzZXJ2ZXJfbWluX3ZlcnNpb249 MTAwMDAwLAorICAgICAgICAgICAgICBwYXJ0aXRpb25fdHlwZT0nbGlzdCcsCisgICAgICAgICAg ICAgIG1vZGU9J2RldGFjaCcKKyAgICAgICAgICAgICAgKQorICAgICAgICAgKSwKKyAgICAgICAg KCdBdHRhY2ggcGFydGl0aW9uIHRvIGV4aXN0aW5nIHJhbmdlIHBhcnRpdGlvbmVkIHRhYmxlJywK KyAgICAgICAgIGRpY3QodXJsPScvYnJvd3Nlci90YWJsZS9vYmovJywKKyAgICAgICAgICAgICAg c2VydmVyX21pbl92ZXJzaW9uPTEwMDAwMCwKKyAgICAgICAgICAgICAgcGFydGl0aW9uX3R5cGU9 J3JhbmdlJywKKyAgICAgICAgICAgICAgbW9kZT0nYXR0YWNoJworICAgICAgICAgICAgICApCisg ICAgICAgICApLAorICAgICAgICAoJ0F0dGFjaCBwYXJ0aXRpb24gdG8gZXhpc3RpbmcgbGlzdCBw YXJ0aXRpb25lZCB0YWJsZScsCisgICAgICAgICBkaWN0KHVybD0nL2Jyb3dzZXIvdGFibGUvb2Jq LycsCisgICAgICAgICAgICAgIHNlcnZlcl9taW5fdmVyc2lvbj0xMDAwMDAsCisgICAgICAgICAg ICAgIHBhcnRpdGlvbl90eXBlPSdsaXN0JywKKyAgICAgICAgICAgICAgbW9kZT0nYXR0YWNoJwor ICAgICAgICAgICAgICApCisgICAgICAgICApCiAgICAgXQogCiAgICAgZGVmIHNldFVwKHNlbGYp OgpAQCAtNDQsOSArODcsMzEgQEAgY2xhc3MgVGFibGVVcGRhdGVUZXN0Q2FzZShCYXNlVGVzdEdl bmVyYXRvcik6CiAgICAgICAgIGlmIG5vdCBzY2hlbWFfcmVzcG9uc2U6CiAgICAgICAgICAgICBy YWlzZSBFeGNlcHRpb24oIkNvdWxkIG5vdCBmaW5kIHRoZSBzY2hlbWEgdG8gYWRkIGEgdGFibGUu IikKICAgICAgICAgc2VsZi50YWJsZV9uYW1lID0gInRlc3RfdGFibGVfcHV0XyVzIiAlIChzdHIo dXVpZC51dWlkNCgpKVsxOjZdKQotICAgICAgICBzZWxmLnRhYmxlX2lkID0gdGFibGVzX3V0aWxz LmNyZWF0ZV90YWJsZShzZWxmLnNlcnZlciwgc2VsZi5kYl9uYW1lLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNjaGVtYV9uYW1lLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRhYmxl X25hbWUpCisKKyAgICAgICAgc2VsZi5pc19wYXJ0aXRpb24gPSBGYWxzZQorICAgICAgICBpZiBo YXNhdHRyKHNlbGYsICdzZXJ2ZXJfbWluX3ZlcnNpb24nKToKKyAgICAgICAgICAgIHNlcnZlcl9j b24gPSBzZXJ2ZXJfdXRpbHMuY29ubmVjdF9zZXJ2ZXIoc2VsZiwgc2VsZi5zZXJ2ZXJfaWQpCisg ICAgICAgICAgICBpZiBub3Qgc2VydmVyX2NvblsiaW5mbyJdID09ICJTZXJ2ZXIgY29ubmVjdGVk LiI6CisgICAgICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb3VsZCBub3QgY29ubmVjdCB0 byBzZXJ2ZXIgdG8gYWRkICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBhcnRp dGlvbmVkIHRhYmxlLiIpCisgICAgICAgICAgICBpZiBzZXJ2ZXJfY29uWyJkYXRhIl1bInZlcnNp b24iXSA8IHNlbGYuc2VydmVyX21pbl92ZXJzaW9uOgorICAgICAgICAgICAgICAgIG1lc3NhZ2Ug PSAiUGFydGl0aW9uZWQgdGFibGUgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgIiBcCisgICAgICAgICAg ICAgICAgICAgICAgICAgICJQUEFTL1BHIDEwLjAgYW5kIGJlbG93LiIKKyAgICAgICAgICAgICAg ICBzZWxmLnNraXBUZXN0KG1lc3NhZ2UpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAg ICAgIHNlbGYuaXNfcGFydGl0aW9uID0gVHJ1ZQorCisgICAgICAgICAgICBzZWxmLnRhYmxlX2lk ID0gdGFibGVzX3V0aWxzLmNyZWF0ZV90YWJsZV9mb3JfcGFydGl0aW9uKAorICAgICAgICAgICAg ICAgIHNlbGYuc2VydmVyLAorICAgICAgICAgICAgICAgIHNlbGYuZGJfbmFtZSwKKyAgICAgICAg ICAgICAgICBzZWxmLnNjaGVtYV9uYW1lLAorICAgICAgICAgICAgICAgIHNlbGYudGFibGVfbmFt ZSwKKyAgICAgICAgICAgICAgICAncGFydGl0aW9uZWQnLAorICAgICAgICAgICAgICAgIHNlbGYu cGFydGl0aW9uX3R5cGUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnRhYmxlX2lk ID0gdGFibGVzX3V0aWxzLmNyZWF0ZV90YWJsZShzZWxmLnNlcnZlciwgc2VsZi5kYl9uYW1lLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vs Zi5zY2hlbWFfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNlbGYudGFibGVfbmFtZSkKIAogICAgIGRlZiBydW5UZXN0KHNlbGYpOgog ICAgICAgICAiIiJUaGlzIGZ1bmN0aW9uIHdpbGwgZmV0Y2ggYWRkZWQgdGFibGUgdW5kZXIgc2No ZW1hIG5vZGUuIiIiCkBAIC01NCwxMCArMTE5LDE4IEBAIGNsYXNzIFRhYmxlVXBkYXRlVGVzdENh c2UoQmFzZVRlc3RHZW5lcmF0b3IpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2VsZi50YWJsZV9pZCkKICAgICAgICAgaWYgbm90IHRhYmxlX3Jl c3BvbnNlOgogICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKCJDb3VsZCBub3QgZmluZCB0aGUg dGFibGUgdG8gdXBkYXRlLiIpCi0gICAgICAgIGRhdGEgPSB7Ci0gICAgICAgICAgICAiZGVzY3Jp cHRpb24iOiAiVGhpcyBpcyB0ZXN0IGNvbW1lbnQgZm9yIHRhYmxlIiwKLSAgICAgICAgICAgICJp ZCI6IHNlbGYudGFibGVfaWQKLSAgICAgICAgfQorCisgICAgICAgIGlmIHNlbGYuaXNfcGFydGl0 aW9uOgorICAgICAgICAgICAgZGF0YSA9IHsiaWQiOiBzZWxmLnRhYmxlX2lkfQorICAgICAgICAg ICAgdGFibGVzX3V0aWxzLnNldF9wYXJ0aXRpb25fZGF0YSgKKyAgICAgICAgICAgICAgICBzZWxm LnNlcnZlciwgc2VsZi5kYl9uYW1lLCBzZWxmLnNjaGVtYV9uYW1lLCBzZWxmLnRhYmxlX25hbWUs CisgICAgICAgICAgICAgICAgc2VsZi5wYXJ0aXRpb25fdHlwZSwgZGF0YSwgc2VsZi5tb2RlKQor ICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YSA9IHsKKyAgICAgICAgICAgICAgICAiZGVz Y3JpcHRpb24iOiAiVGhpcyBpcyB0ZXN0IGNvbW1lbnQgZm9yIHRhYmxlIiwKKyAgICAgICAgICAg ICAgICAiaWQiOiBzZWxmLnRhYmxlX2lkCisgICAgICAgICAgICB9CisKICAgICAgICAgcmVzcG9u c2UgPSBzZWxmLnRlc3Rlci5wdXQoCiAgICAgICAgICAgICBzZWxmLnVybCArIHN0cih1dGlscy5T RVJWRVJfR1JPVVApICsgJy8nICsKICAgICAgICAgICAgIHN0cihzZWxmLnNlcnZlcl9pZCkgKyAn LycgKyBzdHIoc2VsZi5kYl9pZCkgKyAnLycgKwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJv d3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rlc3Rz L3V0aWxzLnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rlc3RzL3V0aWxzLnB5CmluZGV4IDQ1NmYwMjAuLjBjN2Fl ZGUgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZXN0cy91dGlscy5weQorKysgYi93ZWIvcGdhZG1p bi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMv dGVzdHMvdXRpbHMucHkKQEAgLTg1LDMgKzg1LDE1MyBAQCBkZWYgdmVyaWZ5X3RhYmxlKHNlcnZl ciwgZGJfbmFtZSwgdGFibGVfaWQpOgogICAgIGV4Y2VwdCBFeGNlcHRpb246CiAgICAgICAgIHRy YWNlYmFjay5wcmludF9leGMoZmlsZT1zeXMuc3RkZXJyKQogICAgICAgICByYWlzZQorCisKK2Rl ZiBjcmVhdGVfdGFibGVfZm9yX3BhcnRpdGlvbihzZXJ2ZXIsIGRiX25hbWUsIHNjaGVtYV9uYW1l LCB0YWJsZV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX3R5cGUs IHBhcnRpdGlvbl90eXBlLCBwYXJ0aXRpb25fbmFtZT1Ob25lKToKKyAgICAiIiIKKyAgICBUaGlz IGZ1bmN0aW9uIGNyZWF0ZXMgcGFydGl0aW9uZWQvcGFydGl0aW9uL3JlZ3VsYXIgdGFibGUKKyAg ICB1bmRlciBwcm92aWRlZCBzY2hlbWEuCisKKyAgICA6cGFyYW0gc2VydmVyOiBzZXJ2ZXIgZGV0 YWlscworICAgIDpwYXJhbSBkYl9uYW1lOiBkYXRhYmFzZSBuYW1lCisgICAgOnBhcmFtIHNjaGVt YV9uYW1lOiBzY2hlbWEgbmFtZQorICAgIDpwYXJhbSB0YWJsZV9uYW1lOiB0YWJsZSBuYW1lCisg ICAgOnBhcmFtIHRhYmxlX3R5cGU6IHJlZ3VsYXIvcGFydGl0aW9uZWQvcGFydGl0aW9uCisgICAg OnBhcmFtIHBhcnRpdGlvbl90eXBlOiBwYXJ0aXRpb24gdGFibGUgdHlwZSAocmFuZ2UvbGlzdCkK KyAgICA6cGFyYW0gcGFydGl0aW9uX25hbWU6IFBhcnRpdGlvbiBOYW1lCisgICAgOnJldHVybiB0 YWJsZV9pZDogdGFibGUgaWQKKyAgICAiIiIKKyAgICB0cnk6CisgICAgICAgIGNvbm5lY3Rpb24g PSB1dGlscy5nZXRfZGJfY29ubmVjdGlvbihkYl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyWyd1c2VybmFtZSddLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyWydkYl9wYXNzd29yZCddLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VydmVyWydob3N0 J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJb J3BvcnQnXSkKKyAgICAgICAgb2xkX2lzb2xhdGlvbl9sZXZlbCA9IGNvbm5lY3Rpb24uaXNvbGF0 aW9uX2xldmVsCisgICAgICAgIGNvbm5lY3Rpb24uc2V0X2lzb2xhdGlvbl9sZXZlbCgwKQorICAg ICAgICBwZ19jdXJzb3IgPSBjb25uZWN0aW9uLmN1cnNvcigpCisKKyAgICAgICAgcXVlcnkgPSAn JworICAgICAgICBpZiB0YWJsZV90eXBlID09ICdwYXJ0aXRpb25lZCc6CisgICAgICAgICAgICBp ZiBwYXJ0aXRpb25fdHlwZSA9PSAncmFuZ2UnOgorICAgICAgICAgICAgICAgIHF1ZXJ5ID0gIkNS RUFURSBUQUJMRSAlcy4lcyhjb3VudHJ5IHRleHQsIHNhbGVzIGJpZ2ludCwgIiBcCisgICAgICAg ICAgICAgICAgICAgICAgICAic2FsZWRhdGUgZGF0ZSkgUEFSVElUSU9OIEJZIFJBTkdFKHNhbGVk YXRlKSIgJSBcCisgICAgICAgICAgICAgICAgICAgICAgICAoc2NoZW1hX25hbWUsIHRhYmxlX25h bWUpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHF1ZXJ5ID0gIkNSRUFURSBU QUJMRSAlcy4lcyhjb3VudHJ5IHRleHQsIHNhbGVzIGJpZ2ludCwgIiBcCisgICAgICAgICAgICAg ICAgICAgICAgICAic2FsZWRhdGUgZGF0ZSkgUEFSVElUSU9OIEJZIExJU1Qoc2FsZWRhdGUpIiAl IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIChzY2hlbWFfbmFtZSwgdGFibGVfbmFtZSkKKyAg ICAgICAgZWxpZiB0YWJsZV90eXBlID09ICdwYXJ0aXRpb24nOgorICAgICAgICAgICAgaWYgcGFy dGl0aW9uX3R5cGUgPT0gJ3JhbmdlJzoKKyAgICAgICAgICAgICAgICBxdWVyeSA9ICJDUkVBVEUg VEFCTEUgJXMuJXMgUEFSVElUSU9OIE9GICVzLiVzICIgXAorICAgICAgICAgICAgICAgICAgICAg ICAgIkZPUiBWQUxVRVMgRlJPTSAoJzIwMTItMDEtMDEnKSBUTyAoJzIwMTItMTItMzEnKSIgJSBc CisgICAgICAgICAgICAgICAgICAgICAgICAoc2NoZW1hX25hbWUsIHBhcnRpdGlvbl9uYW1lLCBz Y2hlbWFfbmFtZSwgdGFibGVfbmFtZSkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg ICAgcXVlcnkgPSAiQ1JFQVRFIFRBQkxFICVzLiVzIFBBUlRJVElPTiBPRiAlcy4lcyAiIFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICJGT1IgVkFMVUVTIElOICgnMjAxMy0wMS0wMScpIiAlIFwK KyAgICAgICAgICAgICAgICAgICAgICAgIChzY2hlbWFfbmFtZSwgcGFydGl0aW9uX25hbWUsIHNj aGVtYV9uYW1lLCB0YWJsZV9uYW1lKQorCisgICAgICAgICAgICAjIFRvIGZldGNoIE9JRCB0YWJs ZSBuYW1lIGlzIGFjdHVhbGx5IHBhcnRpdGlvbiBuYW1lCisgICAgICAgICAgICB0YWJsZV9uYW1l ID0gcGFydGl0aW9uX25hbWUKKyAgICAgICAgZWxpZiB0YWJsZV90eXBlID09ICdyZWd1bGFyJzoK KyAgICAgICAgICAgIHF1ZXJ5ID0gIkNSRUFURSBUQUJMRSAlcy4lcyhjb3VudHJ5IHRleHQsIHNh bGVzIGJpZ2ludCwiIFwKKyAgICAgICAgICAgICAgICAgICAgInNhbGVkYXRlIGRhdGUgTk9UIE5V TEwpIiAlIChzY2hlbWFfbmFtZSwgdGFibGVfbmFtZSkKKworICAgICAgICBwZ19jdXJzb3IuZXhl Y3V0ZShxdWVyeSkKKyAgICAgICAgY29ubmVjdGlvbi5zZXRfaXNvbGF0aW9uX2xldmVsKG9sZF9p c29sYXRpb25fbGV2ZWwpCisgICAgICAgIGNvbm5lY3Rpb24uY29tbWl0KCkKKyAgICAgICAgIyBH ZXQgJ29pZCcgZnJvbSBuZXdseSBjcmVhdGVkIHRhYmxlCisgICAgICAgIHBnX2N1cnNvci5leGVj dXRlKCJzZWxlY3Qgb2lkIGZyb20gcGdfY2xhc3Mgd2hlcmUgcmVsbmFtZT0nJXMnIiAlCisgICAg ICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX25hbWUpCisgICAgICAgIHRhYmxlID0gcGdfY3Vy c29yLmZldGNob25lKCkKKyAgICAgICAgdGFibGVfaWQgPSAnJworICAgICAgICBpZiB0YWJsZToK KyAgICAgICAgICAgIHRhYmxlX2lkID0gdGFibGVbMF0KKyAgICAgICAgY29ubmVjdGlvbi5jbG9z ZSgpCisgICAgICAgIHJldHVybiB0YWJsZV9pZAorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAg ICAgIHRyYWNlYmFjay5wcmludF9leGMoZmlsZT1zeXMuc3RkZXJyKQorICAgICAgICByYWlzZQor CisKK2RlZiBzZXRfcGFydGl0aW9uX2RhdGEoc2VydmVyLCBkYl9uYW1lLCBzY2hlbWFfbmFtZSwg dGFibGVfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uX3R5cGUsIGRhdGEs IG1vZGUpOgorICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgdGhlIHBh cnRpdGlvbnMgZGF0YSBvbiB0aGUgYmFzaXMgb2YKKyAgICBwYXJ0aXRpb24gdHlwZSBhbmQgYWN0 aW9uLgorCisgICAgOnBhcmFtIHNlcnZlcjogc2VydmVyIGRldGFpbHMKKyAgICA6cGFyYW0gZGJf bmFtZTogRGF0YWJhc2UgTmFtZQorICAgIDpwYXJhbSBzY2hlbWFfbmFtZTogU2NoZW1hIE5hbWUK KyAgICA6cGFyYW0gdGFibGVfbmFtZTogVGFibGUgTmFtZQorICAgIDpwYXJhbSBwYXJ0aXRpb25f dHlwZTogcmFuZ2Ugb3IgbGlzdAorICAgIDpwYXJhbSBkYXRhOiBEYXRhCisgICAgOnBhcmFtIG1v ZGU6IGNyZWF0ZS9kZXRhY2gKKyAgICA6cmV0dXJuOgorICAgICIiIgorCisgICAgZGF0YVsncGFy dGl0aW9ucyddID0gZGljdCgpCisgICAgaWYgcGFydGl0aW9uX3R5cGUgPT0gJ3JhbmdlJyBhbmQg bW9kZSA9PSAnY3JlYXRlJzoKKyAgICAgICAgZGF0YVsncGFydGl0aW9ucyddLnVwZGF0ZSgKKyAg ICAgICAgICAgIHsnYWRkZWQnOiBbeyd2YWx1ZXNfZnJvbSc6ICInMjAxNC0wMS0wMSciLAorICAg ICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlc190byc6ICInMjAxNC0xMi0zMSciLAorICAgICAg ICAgICAgICAgICAgICAgICAgJ2lzX2F0dGFjaCc6IEZhbHNlLAorICAgICAgICAgICAgICAgICAg ICAgICAgJ3BhcnRpdGlvbl9uYW1lJzogJ3NhbGVfMjAxNCd9LAorICAgICAgICAgICAgICAgICAg ICAgICB7J3ZhbHVlc19mcm9tJzogIicyMDE1LTAxLTAxJyIsCisgICAgICAgICAgICAgICAgICAg ICAgICAndmFsdWVzX3RvJzogIicyMDE1LTEyLTMxJyIsCisgICAgICAgICAgICAgICAgICAgICAg ICAnaXNfYXR0YWNoJzogRmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAncGFydGl0aW9u X25hbWUnOiAnc2FsZV8yMDE1JworICAgICAgICAgICAgICAgICAgICAgICAgfV0KKyAgICAgICAg ICAgICB9CisgICAgICAgICkKKyAgICBlbGlmIHBhcnRpdGlvbl90eXBlID09ICdsaXN0JyBhbmQg bW9kZSA9PSAnY3JlYXRlJzoKKyAgICAgICAgZGF0YVsncGFydGl0aW9ucyddLnVwZGF0ZSgKKyAg ICAgICAgICAgIHsnYWRkZWQnOiBbeyd2YWx1ZXNfaW4nOiAiJzIwMTYtMDEtMDEnLCAnMjAxNi0x Mi0zMSciLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX2F0dGFjaCc6IEZhbHNlLAorICAg ICAgICAgICAgICAgICAgICAgICAgJ3BhcnRpdGlvbl9uYW1lJzogJ3NhbGVfMjAxNid9LAorICAg ICAgICAgICAgICAgICAgICAgICB7J3ZhbHVlc19pbic6ICInMjAxNy0wMS0wMScsICcyMDE3LTEy LTMxJyIsCisgICAgICAgICAgICAgICAgICAgICAgICAnaXNfYXR0YWNoJzogRmFsc2UsCisgICAg ICAgICAgICAgICAgICAgICAgICAncGFydGl0aW9uX25hbWUnOiAnc2FsZV8yMDE3JworICAgICAg ICAgICAgICAgICAgICAgICAgfV0KKyAgICAgICAgICAgICB9CisgICAgICAgICkKKyAgICBlbGlm IHBhcnRpdGlvbl90eXBlID09ICdyYW5nZScgYW5kIG1vZGUgPT0gJ2RldGFjaCc6CisgICAgICAg IHBhcnRpdGlvbl9pZCA9IGNyZWF0ZV90YWJsZV9mb3JfcGFydGl0aW9uKHNlcnZlciwgZGJfbmFt ZSwgc2NoZW1hX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRhYmxlX25hbWUsICdwYXJ0aXRpb24nLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25fdHlwZSwgJ3NhbGVfMjAxMicp CisgICAgICAgIGRhdGFbJ3BhcnRpdGlvbnMnXS51cGRhdGUoCisgICAgICAgICAgICB7J2RlbGV0 ZWQnOiBbeydvaWQnOiBwYXJ0aXRpb25faWR9XQorICAgICAgICAgICAgIH0KKyAgICAgICAgKQor ICAgIGVsaWYgcGFydGl0aW9uX3R5cGUgPT0gJ2xpc3QnIGFuZCBtb2RlID09ICdkZXRhY2gnOgor ICAgICAgICBwYXJ0aXRpb25faWQgPSBjcmVhdGVfdGFibGVfZm9yX3BhcnRpdGlvbihzZXJ2ZXIs IGRiX25hbWUsIHNjaGVtYV9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0YWJsZV9uYW1lLCAncGFydGl0aW9uJywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uX3R5cGUsICdzYWxl XzIwMTMnKQorICAgICAgICBkYXRhWydwYXJ0aXRpb25zJ10udXBkYXRlKAorICAgICAgICAgICAg eydkZWxldGVkJzogW3snb2lkJzogcGFydGl0aW9uX2lkfV0KKyAgICAgICAgICAgICB9CisgICAg ICAgICkKKyAgICBlbGlmIHBhcnRpdGlvbl90eXBlID09ICdyYW5nZScgYW5kIG1vZGUgPT0gJ2F0 dGFjaCc6CisgICAgICAgIHBhcnRpdGlvbl9pZCA9IGNyZWF0ZV90YWJsZV9mb3JfcGFydGl0aW9u KHNlcnZlciwgZGJfbmFtZSwgc2NoZW1hX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdhdHRhY2hfc2FsZV8yMDEwJywgJ3JlZ3VsYXInLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aXRp b25fdHlwZSkKKyAgICAgICAgZGF0YVsncGFydGl0aW9ucyddLnVwZGF0ZSgKKyAgICAgICAgICAg IHsnYWRkZWQnOiBbeyd2YWx1ZXNfZnJvbSc6ICInMjAxMC0wMS0wMSciLAorICAgICAgICAgICAg ICAgICAgICAgICAgJ3ZhbHVlc190byc6ICInMjAxMC0xMi0zMSciLAorICAgICAgICAgICAgICAg ICAgICAgICAgJ2lzX2F0dGFjaCc6IFRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAncGFy dGl0aW9uX25hbWUnOiBwYXJ0aXRpb25faWQKKyAgICAgICAgICAgICAgICAgICAgICAgIH1dCisg ICAgICAgICAgICAgfQorICAgICAgICApCisgICAgZWxpZiBwYXJ0aXRpb25fdHlwZSA9PSAnbGlz dCcgYW5kIG1vZGUgPT0gJ2F0dGFjaCc6CisgICAgICAgIHBhcnRpdGlvbl9pZCA9IGNyZWF0ZV90 YWJsZV9mb3JfcGFydGl0aW9uKHNlcnZlciwgZGJfbmFtZSwgc2NoZW1hX25hbWUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhdHRhY2hfc2FsZV8y MDExJywgJ3JlZ3VsYXInLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwYXJ0aXRpb25fdHlwZSkKKyAgICAgICAgZGF0YVsncGFydGl0aW9ucyddLnVw ZGF0ZSgKKyAgICAgICAgICAgIHsnYWRkZWQnOiBbeyd2YWx1ZXNfaW4nOiAiJzIwMTEtMDEtMDEn IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICdpc19hdHRhY2gnOiBUcnVlLAorICAgICAgICAg ICAgICAgICAgICAgICAgJ3BhcnRpdGlvbl9uYW1lJzogcGFydGl0aW9uX2lkCisgICAgICAgICAg ICAgICAgICAgICAgICB9XQorICAgICAgICAgICAgIH0KKyAgICAgICAgKQpkaWZmIC0tZ2l0IGEv d2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVt YXMvdGFibGVzL3RyaWdnZXJzL3RlbXBsYXRlcy90cmlnZ2VyL2pzL3RyaWdnZXIuanMgYi93ZWIv cGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90 YWJsZXMvdHJpZ2dlcnMvdGVtcGxhdGVzL3RyaWdnZXIvanMvdHJpZ2dlci5qcwppbmRleCAxNjIz ZmU1Li44N2YxZWIzIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdHJpZ2dlcnMvdGVtcGxhdGVzL3Ry aWdnZXIvanMvdHJpZ2dlci5qcworKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdHJpZ2dlcnMvdGVtcGxhdGVzL3Ry aWdnZXIvanMvdHJpZ2dlci5qcwpAQCAtMzAsMTMgKzMwLDE1IEBAIGRlZmluZSgncGdhZG1pbi5u b2RlLnRyaWdnZXInLCBbCiAgICAgICAgIG5vZGU6ICd0cmlnZ2VyJywKICAgICAgICAgbGFiZWw6 IGdldHRleHQoJ1RyaWdnZXJzJyksCiAgICAgICAgIHR5cGU6ICdjb2xsLXRyaWdnZXInLAorICAg ICAgICBnZXRUcmVlTm9kZUhpZXJhcmNoeTogcGdCcm93c2VyLnRhYmxlQ2hpbGRUcmVlTm9kZUhp ZXJhcmNoeSwKICAgICAgICAgY29sdW1uczogWyduYW1lJywgJ2Rlc2NyaXB0aW9uJ10KICAgICAg IH0pOwogICB9OwogCiAgIGlmICghcGdCcm93c2VyLk5vZGVzWyd0cmlnZ2VyJ10pIHsKLSAgICBw Z0FkbWluLkJyb3dzZXIuTm9kZXNbJ3RyaWdnZXInXSA9IHBnQWRtaW4uQnJvd3Nlci5Ob2RlLmV4 dGVuZCh7Ci0gICAgICBwYXJlbnRfdHlwZTogWyd0YWJsZScsICd2aWV3J10sCisgICAgcGdBZG1p bi5Ccm93c2VyLk5vZGVzWyd0cmlnZ2VyJ10gPSBwZ0Jyb3dzZXIuTm9kZS5leHRlbmQoeworICAg ICAgZ2V0VHJlZU5vZGVIaWVyYXJjaHk6IHBnQnJvd3Nlci50YWJsZUNoaWxkVHJlZU5vZGVIaWVy YXJjaHksCisgICAgICBwYXJlbnRfdHlwZTogWyd0YWJsZScsICd2aWV3JywgJ3BhcnRpdGlvbidd LAogICAgICAgY29sbGVjdGlvbl90eXBlOiBbJ2NvbGwtdGFibGUnLCAnY29sbC12aWV3J10sCiAg ICAgICB0eXBlOiAndHJpZ2dlcicsCiAgICAgICBsYWJlbDogZ2V0dGV4dCgnVHJpZ2dlcicpLApA QCAtNzIsNiArNzQsMTIgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudHJpZ2dlcicsIFsKICAgICAg ICAgICBpY29uOiAnd2NUYWJJY29uIGljb24tdHJpZ2dlcicsIGRhdGE6IHthY3Rpb246ICdjcmVh dGUnLCBjaGVjazogdHJ1ZX0sCiAgICAgICAgICAgZW5hYmxlOiAnY2FuQ3JlYXRlJwogICAgICAg ICB9LHsKKyAgICAgICAgICBuYW1lOiAnY3JlYXRlX3RyaWdnZXJfb25QYXJ0aXRpb24nLCBub2Rl OiAncGFydGl0aW9uJywgbW9kdWxlOiB0aGlzLAorICAgICAgICAgIGFwcGxpZXM6IFsnb2JqZWN0 JywgJ2NvbnRleHQnXSwgY2FsbGJhY2s6ICdzaG93X29ial9wcm9wZXJ0aWVzJywKKyAgICAgICAg ICBjYXRlZ29yeTogJ2NyZWF0ZScsIHByaW9yaXR5OiA0LCBsYWJlbDogZ2V0dGV4dCgnVHJpZ2dl ci4uLicpLAorICAgICAgICAgIGljb246ICd3Y1RhYkljb24gaWNvbi10cmlnZ2VyJywgZGF0YTog e2FjdGlvbjogJ2NyZWF0ZScsIGNoZWNrOiB0cnVlfSwKKyAgICAgICAgICBlbmFibGU6ICdjYW5D cmVhdGUnCisgICAgICAgIH0sewogICAgICAgICAgIG5hbWU6ICdlbmFibGVfdHJpZ2dlcicsIG5v ZGU6ICd0cmlnZ2VyJywgbW9kdWxlOiB0aGlzLAogICAgICAgICAgIGFwcGxpZXM6IFsnb2JqZWN0 JywgJ2NvbnRleHQnXSwgY2FsbGJhY2s6ICdlbmFibGVfdHJpZ2dlcicsCiAgICAgICAgICAgY2F0 ZWdvcnk6ICdjb25uZWN0JywgcHJpb3JpdHk6IDMsIGxhYmVsOiBnZXR0ZXh0KCdFbmFibGUgdHJp Z2dlcicpLApAQCAtMjA2LDYgKzIxNCwxNyBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS50cmlnZ2Vy JywgWwogICAgICAgICAgIG1vZGU6IFsnY3JlYXRlJywnZWRpdCcsICdwcm9wZXJ0aWVzJ10sCiAg ICAgICAgICAgZGVwczogWydpc19jb25zdHJhaW50X3RyaWdnZXInXSwKICAgICAgICAgICBkaXNh YmxlZDogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgLy8gRGlzYWJsZWQgaWYgdGFibGUgaXMg YSBwYXJ0aXRpb25lZCB0YWJsZS4KKyAgICAgICAgICAgIGlmIChfLmhhcyhtLCAnbm9kZV9pbmZv JykgJiYgXy5oYXMobS5ub2RlX2luZm8sICd0YWJsZScpICYmCisgICAgICAgICAgICAgICAgXy5o YXMobS5ub2RlX2luZm8udGFibGUsICdpc19wYXJ0aXRpb25lZCcpICYmIG0ubm9kZV9pbmZvLnRh YmxlLmlzX3BhcnRpdGlvbmVkKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzZXRUaW1l b3V0KGZ1bmN0aW9uKCl7CisgICAgICAgICAgICAgICAgICBtLnNldCgnaXNfcm93X3RyaWdnZXIn LCBmYWxzZSk7CisgICAgICAgICAgICAgIH0sMTApOworCisgICAgICAgICAgICAgIHJldHVybiB0 cnVlOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBJZiBjb25zdHJhaW50IHRyaWdn ZXIgaXMgc2V0IHRvIFRydWUgdGhlbiByb3cgdHJpZ2dlciB3aWxsCiAgICAgICAgICAgICAvLyBh dXRvbWF0aWNhbGx5IHNldCB0byBUcnVlIGFuZCBiZWNvbWVzIGRpc2FibGUKICAgICAgICAgICAg IHZhciBpc19jb25zdHJhaW50X3RyaWdnZXIgPSBtLmdldCgnaXNfY29uc3RyYWludF90cmlnZ2Vy Jyk7CkBAIC0yMzIsNyArMjUxLDE5IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnRyaWdnZXInLCBb CiAgICAgICAgICAgaWQ6ICdpc19jb25zdHJhaW50X3RyaWdnZXInLCBsYWJlbDogZ2V0dGV4dCgn Q29uc3RyYWludCB0cmlnZ2VyPycpLAogICAgICAgICAgIHR5cGU6ICdzd2l0Y2gnLCBkaXNhYmxl ZDogJ2luU2NoZW1hV2l0aE1vZGVsQ2hlY2snLAogICAgICAgICAgIG1vZGU6IFsnY3JlYXRlJywn ZWRpdCcsICdwcm9wZXJ0aWVzJ10sCi0gICAgICAgICAgZ3JvdXA6IGdldHRleHQoJ0RlZmluaXRp b24nKQorICAgICAgICAgIGdyb3VwOiBnZXR0ZXh0KCdEZWZpbml0aW9uJyksCisgICAgICAgICAg ZGlzYWJsZWQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIC8vIERpc2FibGVkIGlmIHRhYmxl IGlzIGEgcGFydGl0aW9uZWQgdGFibGUuCisgICAgICAgICAgICBpZiAoXy5oYXMobSwgJ25vZGVf aW5mbycpICYmIF8uaGFzKG0ubm9kZV9pbmZvLCAndGFibGUnKSAmJgorICAgICAgICAgICAgICAg IF8uaGFzKG0ubm9kZV9pbmZvLnRhYmxlLCAnaXNfcGFydGl0aW9uZWQnKSAmJiBtLm5vZGVfaW5m by50YWJsZS5pc19wYXJ0aXRpb25lZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2V0 VGltZW91dChmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgbS5zZXQoJ2lzX2NvbnN0cmFp bnRfdHJpZ2dlcicsIGZhbHNlKTsKKyAgICAgICAgICAgICAgfSwxMCk7CisKKyAgICAgICAgICAg ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQogICAgICAgICB9LHsK ICAgICAgICAgICBpZDogJ3RnZGVmZXJyYWJsZScsIGxhYmVsOiBnZXR0ZXh0KCdEZWZlcnJhYmxl PycpLAogICAgICAgICAgIHR5cGU6ICdzd2l0Y2gnLCBncm91cDogZ2V0dGV4dCgnRGVmaW5pdGlv bicpLApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3V0aWxzLnB5IGIvd2ViL3BnYWRtaW4vYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3V0aWxzLnB5 Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjQ5MWEKLS0tIC9kZXYvbnVs bAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFz ZXMvc2NoZW1hcy90YWJsZXMvdXRpbHMucHkKQEAgLTAsMCArMSwyMTcxIEBACisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworIworIyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdo dCAoQykgMjAxMyAtIDIwMTcsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBz b2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworCisiIiIgSW1wbGVtZW50cyBVdGlsaXR5IGNsYXNzIGZvciBUYWJsZSBh bmQgUGFydGl0aW9uZWQgVGFibGUuICIiIgorCitpbXBvcnQgcmUKK2Zyb20gZnVuY3Rvb2xzIGlt cG9ydCB3cmFwcworaW1wb3J0IHNpbXBsZWpzb24gYXMganNvbgorZnJvbSBmbGFzayBpbXBvcnQg cmVuZGVyX3RlbXBsYXRlLCBqc29uaWZ5LCByZXF1ZXN0Citmcm9tIGZsYXNrX2JhYmVsIGltcG9y dCBnZXR0ZXh0Citmcm9tIHBnYWRtaW4udXRpbHMuYWpheCBpbXBvcnQgbWFrZV9qc29uX3Jlc3Bv bnNlLCBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IsIFwKKyAgICBtYWtlX3Jlc3BvbnNlIGFzIGFqYXhf cmVzcG9uc2UsIGdvbmUKK2Zyb20gcGdhZG1pbi5icm93c2VyLnNlcnZlcl9ncm91cHMuc2VydmVy cy5kYXRhYmFzZXMuc2NoZW1hcy51dGlscyBcCisgICAgaW1wb3J0IERhdGFUeXBlUmVhZGVyLCB0 cmlnZ2VyX2RlZmluaXRpb24sIHBhcnNlX3J1bGVfZGVmaW5pdGlvbgorZnJvbSBwZ2FkbWluLmJy b3dzZXIuc2VydmVyX2dyb3Vwcy5zZXJ2ZXJzLnV0aWxzIGltcG9ydCBwYXJzZV9wcml2X2Zyb21f ZGIsIFwKKyAgICBwYXJzZV9wcml2X3RvX2RiCitmcm9tIHBnYWRtaW4uYnJvd3Nlci51dGlscyBp bXBvcnQgUEdDaGlsZE5vZGVWaWV3Citmcm9tIHBnYWRtaW4udXRpbHMuZHJpdmVyIGltcG9ydCBn ZXRfZHJpdmVyCitmcm9tIGNvbmZpZyBpbXBvcnQgUEdfREVGQVVMVF9EUklWRVIKKworCitjbGFz cyBCYXNlVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldyk6CisgICAgIiIiCisgICAgVGhpcyBjbGFz cyBpcyBiYXNlIGNsYXNzIGZvciB0YWJsZXMgYW5kIHBhcnRpdGlvbmVkIHRhYmxlcy4KKworICAg IE1ldGhvZHM6CisgICAgLS0tLS0tLQorICAgICogY2hlY2tfcHJlY29uZGl0aW9uKCkKKyAgICAg IC0gVGhpcyBmdW5jdGlvbiB3aWxsIGJlaGF2ZSBhcyBhIGRlY29yYXRvciB3aGljaCB3aWxsIGNo ZWNrcworICAgICAgICBkYXRhYmFzZSBjb25uZWN0aW9uIGJlZm9yZSBydW5uaW5nIHZpZXcsIGl0 IHdpbGwgYWxzbyBhdHRhY2hlcworICAgICAgICBtYW5hZ2VyLGNvbm4gJiB0ZW1wbGF0ZV9wYXRo IHByb3BlcnRpZXMgdG8gc2VsZgorCisgICAgKiBfZm9ybWF0dGVyKGRhdGEsIHRpZCkKKyAgICAg IC0gSXQgd2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1bHQKKyAgICAg ICAgYXMgcGVyIGNsaWVudCBtb2RlbCBmb3JtYXQKKworICAgICogX2NvbHVtbnNfZm9ybWF0dGVy KHRpZCwgZGF0YSk6CisgICAgICAtIEl0IHdpbGwgcmV0dXJuIGZvcm1hdHRlZCBvdXRwdXQgb2Yg cXVlcnkgcmVzdWx0CisgICAgICAgIGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0IGZvciBjb2x1 bW4gbm9kZQorCisgICAgKiBfaW5kZXhfY29uc3RyYWludHNfZm9ybWF0dGVyKHNlbGYsIGRpZCwg dGlkLCBkYXRhKToKKyAgICAgIC0gSXQgd2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBvZiBx dWVyeSByZXN1bHQKKyAgICAgICAgYXMgcGVyIGNsaWVudCBtb2RlbCBmb3JtYXQgZm9yIGluZGV4 IGNvbnN0cmFpbnQgbm9kZQorCisgICAgKiBfY2x0eXBlX2Zvcm1hdHRlcih0eXBlKTogKHN0YXRp Y21ldGhvZCkKKyAgICAgIC0gV2UgbmVlZCB0byByZW1vdmUgW10gZnJvbSB0eXBlIGFuZCBhcHBl bmQgaXQKKyAgICAgICAgYWZ0ZXIgbGVuZ3RoL3ByZWNpc2lvbiBzbyB3ZSB3aWxsIHNlbmQgZmxh ZyBmb3IKKyAgICAgICAgc3FsIHRlbXBsYXRlLgorCisgICAgKiBnZXRfdGFibGVfZGVwZW5kZW50 cyhzZWxmLCB0aWQpOgorICAgICAgLSBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgZGVwZW5kZW50cyBh bmQgcmV0dXJuIGFqYXggcmVzcG9uc2UKKyAgICAgICAgZm9yIHRoZSB0YWJsZSBub2RlLgorCisg ICAgKiBnZXRfdGFibGVfZGVwZW5kZW5jaWVzKHNlbGYsIHRpZCk6CisgICAgICAtIFRoaXMgZnVu Y3Rpb24gZ2V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJldHVybiBhamF4IHJlc3BvbnNlCisgICAg ICAgIGZvciB0aGUgdGFibGUgbm9kZS4KKworICAgICogZ2V0X3RhYmxlX3N0YXRpc3RpY3Moc2Vs ZiwgdGlkKToKKyAgICAgIC0gUmV0dXJucyB0aGUgc3RhdGlzdGljcyBmb3IgYSBwYXJ0aWN1bGFy IHRhYmxlIGlmIHRpZCBpcyBzcGVjaWZpZWQsCisgICAgICAgIG90aGVyd2lzZSBpdCB3aWxsIHJl dHVybiBzdGF0aXN0aWNzIGZvciBhbGwgdGhlIHRhYmxlcyBpbiB0aGF0CisgICAgICAgIHNjaGVt YS4KKyAgICAqIGdldF9yZXZlcnNlX2VuZ2luZWVyZWRfc3FsKHNlbGYsIGRpZCwgc2NpZCwgdGlk LCBtYWluX3NxbCwgZGF0YSk6CisgICAgICAtIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGVzIHJl dmVyc2UgZW5naW5lZXJlZCBzcWwgZm9yCisgICAgICAgIHRoZSB0YWJsZSBvYmplY3QuCisKKyAg ICAqIHJlc2V0X3N0YXRpc3RpY3Moc2VsZiwgc2NpZCwgdGlkKToKKyAgICAgIC0gVGhpcyBmdW5j dGlvbiB3aWxsIHJlc2V0IHN0YXRpc3RpY3Mgb2YgdGFibGUuCisgICAgIiIiCisgICAgQHN0YXRp Y21ldGhvZAorICAgIGRlZiBjaGVja19wcmVjb25kaXRpb24oZik6CisgICAgICAgICIiIgorICAg ICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYmVoYXZlIGFzIGEgZGVjb3JhdG9yIHdoaWNoIHdpbGwg Y2hlY2tzCisgICAgICAgIGRhdGFiYXNlIGNvbm5lY3Rpb24gYmVmb3JlIHJ1bm5pbmcgdmlldywg aXQgd2lsbCBhbHNvIGF0dGFjaGVzCisgICAgICAgIG1hbmFnZXIsY29ubiAmIHRlbXBsYXRlX3Bh dGggcHJvcGVydGllcyB0byBzZWxmCisgICAgICAgICIiIgorCisgICAgICAgIEB3cmFwcyhmKQor ICAgICAgICBkZWYgd3JhcCgqYXJncywgKiprd2FyZ3MpOgorICAgICAgICAgICAgIyBIZXJlIGFy Z3NbMF0gd2lsbCBob2xkIHNlbGYgJiBrd2FyZ3Mgd2lsbCBob2xkIGdpZCxzaWQsZGlkCisgICAg ICAgICAgICBzZWxmID0gYXJnc1swXQorICAgICAgICAgICAgZHJpdmVyID0gZ2V0X2RyaXZlcihQ R19ERUZBVUxUX0RSSVZFUikKKyAgICAgICAgICAgIGRpZCA9IGt3YXJnc1snZGlkJ10KKyAgICAg ICAgICAgIHNlbGYubWFuYWdlciA9IGRyaXZlci5jb25uZWN0aW9uX21hbmFnZXIoa3dhcmdzWydz aWQnXSkKKyAgICAgICAgICAgIHNlbGYuY29ubiA9IHNlbGYubWFuYWdlci5jb25uZWN0aW9uKGRp ZD1rd2FyZ3NbJ2RpZCddKQorICAgICAgICAgICAgc2VsZi5xdElkZW50ID0gZHJpdmVyLnF0SWRl bnQKKyAgICAgICAgICAgIHNlbGYucXRUeXBlSWRlbnQgPSBkcml2ZXIucXRUeXBlSWRlbnQKKyAg ICAgICAgICAgICMgV2UgbmVlZCBkYXRsYXN0c3lzb2lkIHRvIGNoZWNrIGlmIGN1cnJlbnQgdGFi bGUgaXMgc3lzdGVtIHRhYmxlCisgICAgICAgICAgICBzZWxmLmRhdGxhc3RzeXNvaWQgPSBzZWxm Lm1hbmFnZXIuZGJfaW5mb1sKKyAgICAgICAgICAgICAgICBkaWQKKyAgICAgICAgICAgIF1bJ2Rh dGxhc3RzeXNvaWQnXSBpZiBzZWxmLm1hbmFnZXIuZGJfaW5mbyBpcyBub3QgTm9uZSBhbmQgXAor ICAgICAgICAgICAgICAgIGRpZCBpbiBzZWxmLm1hbmFnZXIuZGJfaW5mbyBlbHNlIDAKKworICAg ICAgICAgICAgdmVyID0gc2VsZi5tYW5hZ2VyLnZlcnNpb24KKyAgICAgICAgICAgICMgU2V0IHRo ZSB0ZW1wbGF0ZSBwYXRoIGZvciB0aGUgU1FMIHNjcmlwdHMKKyAgICAgICAgICAgIHNlbGYudGFi bGVfdGVtcGxhdGVfcGF0aCA9ICd0YWJsZS9zcWwvI3swfSMnLmZvcm1hdCh2ZXIpCisgICAgICAg ICAgICBzZWxmLnBhcnRpdGlvbl90ZW1wbGF0ZV9wYXRoID0gJ3BhcnRpdGlvbi9zcWwvI3swfSMn LmZvcm1hdCh2ZXIpCisKKyAgICAgICAgICAgICMgVGVtcGxhdGUgZm9yIENvbHVtbiAsY2hlY2sg Y29uc3RyYWludCBhbmQgZXhjbHVzaW9uCisgICAgICAgICAgICAjIGNvbnN0cmFpbnQgbm9kZQor ICAgICAgICAgICAgc2VsZi5jb2x1bW5fdGVtcGxhdGVfcGF0aCA9ICdjb2x1bW4vc3FsLyN7MH0j Jy5mb3JtYXQodmVyKQorICAgICAgICAgICAgc2VsZi5jaGVja19jb25zdHJhaW50X3RlbXBsYXRl X3BhdGggPSBcCisgICAgICAgICAgICAgICAgJ2NoZWNrX2NvbnN0cmFpbnQvc3FsLyN7MH0jJy5m b3JtYXQodmVyKQorICAgICAgICAgICAgc2VsZi5leGNsdXNpb25fY29uc3RyYWludF90ZW1wbGF0 ZV9wYXRoID0gXAorICAgICAgICAgICAgICAgICdleGNsdXNpb25fY29uc3RyYWludC9zcWwvI3sw fSMnLmZvcm1hdCh2ZXIpCisKKyAgICAgICAgICAgICMgVGVtcGxhdGUgZm9yIFBLICYgVW5pcXVl IGNvbnN0cmFpbnQgbm9kZQorICAgICAgICAgICAgc2VsZi5pbmRleF9jb25zdHJhaW50X3RlbXBs YXRlX3BhdGggPSAnaW5kZXhfY29uc3RyYWludC9zcWwnCisKKyAgICAgICAgICAgICMgVGVtcGxh dGUgZm9yIGZvcmVpZ24ga2V5IGNvbnN0cmFpbnQgbm9kZQorICAgICAgICAgICAgc2VsZi5mb3Jl aWduX2tleV90ZW1wbGF0ZV9wYXRoID0gJ2ZvcmVpZ25fa2V5L3NxbC8jezB9IycuZm9ybWF0KHZl cikKKworICAgICAgICAgICAgIyBUZW1wbGF0ZSBmb3IgaW5kZXggbm9kZQorICAgICAgICAgICAg c2VsZi5pbmRleF90ZW1wbGF0ZV9wYXRoID0gJ2luZGV4L3NxbC8jezB9IycuZm9ybWF0KHZlcikK KworICAgICAgICAgICAgIyBUZW1wbGF0ZSBmb3IgdHJpZ2dlciBub2RlCisgICAgICAgICAgICBz ZWxmLnRyaWdnZXJfdGVtcGxhdGVfcGF0aCA9ICd0cmlnZ2VyL3NxbC8jezB9IycuZm9ybWF0KHZl cikKKworICAgICAgICAgICAgIyBUZW1wbGF0ZSBmb3IgcnVsZXMgbm9kZQorICAgICAgICAgICAg c2VsZi5ydWxlc190ZW1wbGF0ZV9wYXRoID0gJ3J1bGVzL3NxbCcKKworICAgICAgICAgICAgIyBT dXBwb3J0ZWQgQUNMIGZvciB0YWJsZQorICAgICAgICAgICAgc2VsZi5hY2wgPSBbJ2EnLCAncics ICd3JywgJ2QnLCAnRCcsICd4JywgJ3QnXQorCisgICAgICAgICAgICAjIFN1cHBvcnRlZCBBQ0wg Zm9yIGNvbHVtbnMKKyAgICAgICAgICAgIHNlbGYuY29sdW1uX2FjbCA9IFsnYScsICdyJywgJ3cn LCAneCddCisKKyAgICAgICAgICAgIHJldHVybiBmKCphcmdzLCAqKmt3YXJncykKKworICAgICAg ICByZXR1cm4gd3JhcAorCisgICAgZGVmIF9jb2x1bW5zX2Zvcm1hdHRlcihzZWxmLCB0aWQsIGRh dGEpOgorICAgICAgICAiIiIKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHRpZDogVGFibGUg T0lECisgICAgICAgICAgICBkYXRhOiBkaWN0IG9mIHF1ZXJ5IHJlc3VsdAorCisgICAgICAgIFJl dHVybnM6CisgICAgICAgICAgICBJdCB3aWxsIHJldHVybiBmb3JtYXR0ZWQgb3V0cHV0IG9mIHF1 ZXJ5IHJlc3VsdAorICAgICAgICAgICAgYXMgcGVyIGNsaWVudCBtb2RlbCBmb3JtYXQgZm9yIGNv bHVtbiBub2RlCisgICAgICAgICIiIgorICAgICAgICBmb3IgY29sdW1uIGluIGRhdGFbJ2NvbHVt bnMnXToKKworICAgICAgICAgICAgIyBXZSBuZWVkIHRvIGZvcm1hdCB2YXJpYWJsZXMgYWNjb3Jk aW5nIHRvIGNsaWVudCBqcyBjb2xsZWN0aW9uCisgICAgICAgICAgICBpZiAnYXR0b3B0aW9ucycg aW4gY29sdW1uIGFuZCBjb2x1bW5bJ2F0dG9wdGlvbnMnXSBpcyBub3QgTm9uZToKKyAgICAgICAg ICAgICAgICBzcGNvcHRpb25zID0gW10KKyAgICAgICAgICAgICAgICBmb3Igc3Bjb3B0aW9uIGlu IGNvbHVtblsnYXR0b3B0aW9ucyddOgorICAgICAgICAgICAgICAgICAgICBrLCB2ID0gc3Bjb3B0 aW9uLnNwbGl0KCc9JykKKyAgICAgICAgICAgICAgICAgICAgc3Bjb3B0aW9ucy5hcHBlbmQoeydu YW1lJzogaywgJ3ZhbHVlJzogdn0pCisKKyAgICAgICAgICAgICAgICBjb2x1bW5bJ2F0dG9wdGlv bnMnXSA9IHNwY29wdGlvbnMKKworICAgICAgICAgICAgIyBOZWVkIHRvIGZvcm1hdCBzZWN1cml0 eSBsYWJlbHMgYWNjb3JkaW5nIHRvIGNsaWVudCBqcyBjb2xsZWN0aW9uCisgICAgICAgICAgICBp ZiAnc2VjbGFiZWxzJyBpbiBjb2x1bW4gYW5kIGNvbHVtblsnc2VjbGFiZWxzJ10gaXMgbm90IE5v bmU6CisgICAgICAgICAgICAgICAgc2VjbGFiZWxzID0gW10KKyAgICAgICAgICAgICAgICBmb3Ig c2VjbGJscyBpbiBjb2x1bW5bJ3NlY2xhYmVscyddOgorICAgICAgICAgICAgICAgICAgICBrLCB2 ID0gc2VjbGJscy5zcGxpdCgnPScpCisgICAgICAgICAgICAgICAgICAgIHNlY2xhYmVscy5hcHBl bmQoeydwcm92aWRlcic6IGssICdsYWJlbCc6IHZ9KQorCisgICAgICAgICAgICAgICAgY29sdW1u WydzZWNsYWJlbHMnXSA9IHNlY2xhYmVscworCisgICAgICAgICAgICBpZiAnYXR0bnVtJyBpbiBj b2x1bW4gYW5kIGNvbHVtblsnYXR0bnVtJ10gaXMgbm90IE5vbmUgXAorICAgICAgICAgICAgICAg ICAgICBhbmQgY29sdW1uWydhdHRudW0nXSA+IDA6CisgICAgICAgICAgICAgICAgIyBXZSBuZWVk IHRvIHBhcnNlICYgY29udmVydCBBQ0wgY29taW5nIGZyb20gZGF0YWJhc2UgdG8KKyAgICAgICAg ICAgICAgICAjIGpzb24gZm9ybWF0CisgICAgICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBs YXRlKCIvIi5qb2luKAorICAgICAgICAgICAgICAgICAgICBbc2VsZi5jb2x1bW5fdGVtcGxhdGVf cGF0aCwgJ2FjbC5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgIHRpZD10aWQsIGNsaWQ9Y29s dW1uWydhdHRudW0nXQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBzdGF0dXMs IGFjbCA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQorCisgICAgICAgICAgICAgICAgaWYg bm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9l cnJvcihlcnJvcm1zZz1hY2wpCisKKyAgICAgICAgICAgICAgICAjIFdlIHdpbGwgc2V0IGdldCBw cml2aWxlZ2VzIGZyb20gYWNsIHNxbCBzbyB3ZSBkb24ndCBuZWVkCisgICAgICAgICAgICAgICAg IyBpdCBmcm9tIHByb3BlcnRpZXMgc3FsCisgICAgICAgICAgICAgICAgY29sdW1uWydhdHRhY2wn XSA9IFtdCisKKyAgICAgICAgICAgICAgICBmb3Igcm93IGluIGFjbFsncm93cyddOgorICAgICAg ICAgICAgICAgICAgICBwcml2ID0gcGFyc2VfcHJpdl9mcm9tX2RiKHJvdykKKyAgICAgICAgICAg ICAgICAgICAgY29sdW1uLnNldGRlZmF1bHQocm93WydkZWZ0eXBlJ10sIFtdKS5hcHBlbmQocHJp dikKKworICAgICAgICAgICAgICAgICMgd2UgYXJlIHJlY2VpdmluZyByZXF1ZXN0IHdoZW4gaW4g ZWRpdCBtb2RlCisgICAgICAgICAgICAgICAgIyB3ZSB3aWxsIHNlbmQgZmlsdGVyZWQgdHlwZXMg cmVsYXRlZCB0byBjdXJyZW50IHR5cGUKKyAgICAgICAgICAgICAgICBwcmVzZW50X3R5cGUgPSBj b2x1bW5bJ2NsdHlwZSddCisKKyAgICAgICAgICAgICAgICB0eXBlX2lkID0gY29sdW1uWydhdHR0 eXBpZCddCisKKyAgICAgICAgICAgICAgICBmdWxsdHlwZSA9IHNlbGYuZ2V0X2Z1bGxfdHlwZSgK KyAgICAgICAgICAgICAgICAgICAgY29sdW1uWyd0eXBuc3BuYW1lJ10sIGNvbHVtblsndHlwbmFt ZSddLAorICAgICAgICAgICAgICAgICAgICBjb2x1bW5bJ2lzZHVwJ10sIGNvbHVtblsnYXR0bmRp bXMnXSwgY29sdW1uWydhdHR0eXBtb2QnXQorICAgICAgICAgICAgICAgICkKKworICAgICAgICAg ICAgICAgIGxlbmd0aCA9IEZhbHNlCisgICAgICAgICAgICAgICAgcHJlY2lzaW9uID0gRmFsc2UK KyAgICAgICAgICAgICAgICBpZiAnZWxlbW9pZCcgaW4gY29sdW1uOgorICAgICAgICAgICAgICAg ICAgICBsZW5ndGgsIHByZWNpc2lvbiwgdHlwZXZhbCA9IFwKKyAgICAgICAgICAgICAgICAgICAg ICAgIHNlbGYuZ2V0X2xlbmd0aF9wcmVjaXNpb24oY29sdW1uWydlbGVtb2lkJ10pCisKKyAgICAg ICAgICAgICAgICAjIFNldCBsZW5ndGggYW5kIHByZWNpc2lvbiB0byBOb25lCisgICAgICAgICAg ICAgICAgY29sdW1uWydhdHRsZW4nXSA9IE5vbmUKKyAgICAgICAgICAgICAgICBjb2x1bW5bJ2F0 dHByZWNpc2lvbiddID0gTm9uZQorCisgICAgICAgICAgICAgICAgIyBJZiB3ZSBoYXZlIGxlbmd0 aCAmIHByZWNpc2lvbiBib3RoCisgICAgICAgICAgICAgICAgaWYgbGVuZ3RoIGFuZCBwcmVjaXNp b246CisgICAgICAgICAgICAgICAgICAgIG1hdGNoT2JqID0gcmUuc2VhcmNoKHInKFxkKyksKFxk KyknLCBmdWxsdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgbWF0Y2hPYmo6CisgICAgICAg ICAgICAgICAgICAgICAgICBjb2x1bW5bJ2F0dGxlbiddID0gbWF0Y2hPYmouZ3JvdXAoMSkKKyAg ICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblsnYXR0cHJlY2lzaW9uJ10gPSBtYXRjaE9iai5n cm91cCgyKQorICAgICAgICAgICAgICAgIGVsaWYgbGVuZ3RoOgorICAgICAgICAgICAgICAgICAg ICAjIElmIHdlIGhhdmUgbGVuZ3RoIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hPYmog PSByZS5zZWFyY2gocicoXGQrKScsIGZ1bGx0eXBlKQorICAgICAgICAgICAgICAgICAgICBpZiBt YXRjaE9iajoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblsnYXR0bGVuJ10gPSBtYXRj aE9iai5ncm91cCgxKQorICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uWydhdHRwcmVjaXNp b24nXSA9IE5vbmUKKworCisgICAgICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFtzZWxmLmNvbHVtbl90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2lzX3JlZmVyZW5jZWQuc3FsJ10pLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkLCBjbGlkPWNvbHVtblsnYXR0 bnVtJ10pCisKKyAgICAgICAgICAgICAgICBzdGF0dXMsIGlzX3JlZmVyZW5jZSA9IHNlbGYuY29u bi5leGVjdXRlX3NjYWxhcihTUUwpCisKKyAgICAgICAgICAgICAgICBlZGl0X3R5cGVzX2xpc3Qg PSBsaXN0KCkKKyAgICAgICAgICAgICAgICAjIFdlIHdpbGwgbmVlZCBwcmVzZW50IHR5cGUgaW4g ZWRpdCBtb2RlCisKKyAgICAgICAgICAgICAgICBpZiBjb2x1bW5bJ3R5cG5zcG5hbWUnXSA9PSAi cGdfY2F0YWxvZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgb3IgY29sdW1uWyd0eXBuc3Bu YW1lJ10gPT0gInB1YmxpYyI6CisgICAgICAgICAgICAgICAgICAgIGVkaXRfdHlwZXNfbGlzdC5h cHBlbmQocHJlc2VudF90eXBlKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAg ICAgICAgIHQgPSBzZWxmLnF0VHlwZUlkZW50KHNlbGYuY29ubiwgY29sdW1uWyd0eXBuc3BuYW1l J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlbnRfdHlw ZSkKKyAgICAgICAgICAgICAgICAgICAgZWRpdF90eXBlc19saXN0LmFwcGVuZCh0KQorICAgICAg ICAgICAgICAgICAgICBjb2x1bW5bJ2NsdHlwZSddID0gdAorCisgICAgICAgICAgICAgICAgaWYg aW50KGlzX3JlZmVyZW5jZSkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgU1FMID0gcmVuZGVy X3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmNvbHVtbl90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlZGl0X21vZGVfdHlw ZXMuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw ZV9pZD10eXBlX2lkKQorICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNv bm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKKworICAgICAgICAgICAgICAgICAgICBmb3Igcm93IGlu IHJzZXRbJ3Jvd3MnXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRfdHlwZXNfbGlzdC5h cHBlbmQocm93Wyd0eXBuYW1lJ10pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg ICAgICAgICAgZWRpdF90eXBlc19saXN0LmFwcGVuZChwcmVzZW50X3R5cGUpCisKKyAgICAgICAg ICAgICAgICBjb2x1bW5bJ2VkaXRfdHlwZXMnXSA9IGVkaXRfdHlwZXNfbGlzdAorICAgICAgICAg ICAgICAgIGNvbHVtblsnY2x0eXBlJ10gPSBEYXRhVHlwZVJlYWRlci5wYXJzZV90eXBlX25hbWUo Y29sdW1uWydjbHR5cGUnXSkKKworICAgICAgICAgICAgICAgIGlmICdpbmRrZXknIGluIGNvbHVt bjoKKyAgICAgICAgICAgICAgICAgICAgIyBDdXJyZW50IGNvbHVtbgorICAgICAgICAgICAgICAg ICAgICBhdHRudW0gPSBzdHIoY29sdW1uWydhdHRudW0nXSkKKworICAgICAgICAgICAgICAgICAg ICAjIFNpbmdsZS9MaXN0IG9mIHByaW1hcnkga2V5IGNvbHVtbihzKQorICAgICAgICAgICAgICAg ICAgICBpbmRrZXkgPSBzdHIoY29sdW1uWydpbmRrZXknXSkKKworICAgICAgICAgICAgICAgICAg ICAjIFdlIHdpbGwgY2hlY2sgaWYgY29sdW1uIGlzIGluIHByaW1hcnkgY29sdW1uKHMpCisgICAg ICAgICAgICAgICAgICAgIGlmIGF0dG51bSBpbiBpbmRrZXkuc3BsaXQoIiAiKToKKyAgICAgICAg ICAgICAgICAgICAgICAgIGNvbHVtblsnaXNfcHJpbWFyeV9rZXknXSA9IFRydWUKKyAgICAgICAg ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblsnaXNfcHJp bWFyeV9rZXknXSA9IEZhbHNlCisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBfaW5k ZXhfY29uc3RyYWludHNfZm9ybWF0dGVyKHNlbGYsIGRpZCwgdGlkLCBkYXRhKToKKyAgICAgICAg IiIiCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB0aWQ6IFRhYmxlIE9JRAorICAgICAgICAg ICAgZGF0YTogZGljdCBvZiBxdWVyeSByZXN1bHQKKworICAgICAgICBSZXR1cm5zOgorICAgICAg ICAgICAgSXQgd2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1bHQKKyAg ICAgICAgICAgIGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0IGZvciBpbmRleCBjb25zdHJhaW50 IG5vZGUKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSB3aWxsIGZldGNoIGFsbCB0aGUgaW5k ZXggY29uc3RyYWludHMgZm9yIHRoZSB0YWJsZQorICAgICAgICBpbmRleF9jb25zdHJhaW50cyA9 IHsKKyAgICAgICAgICAgICdwJzogJ3ByaW1hcnlfa2V5JywgJ3UnOiAndW5pcXVlX2NvbnN0cmFp bnQnCisgICAgICAgIH0KKworICAgICAgICBmb3IgY3R5cGUgaW4gaW5kZXhfY29uc3RyYWludHMu a2V5cygpOgorICAgICAgICAgICAgZGF0YVtpbmRleF9jb25zdHJhaW50c1tjdHlwZV1dID0gW10K KworICAgICAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmluZGV4 X2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRpZD1kaWQsIHRpZD10aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3RyYWludF90eXBlPWN0eXBlKQorICAgICAgICAgICAgc3RhdHVzLCByZXMg PSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKKworICAgICAgICAgICAgaWYgbm90IHN0YXR1 czoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXJlcykKKworICAgICAgICAgICAgZm9yIHJvdyBpbiByZXNbJ3Jvd3MnXToKKyAgICAgICAgICAg ICAgICByZXN1bHQgPSByb3cKKyAgICAgICAgICAgICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUo CisgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLmluZGV4X2NvbnN0cmFpbnRfdGVt cGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfY29uc3RyYWlu dF9jb2xzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgY2lkPXJvd1snb2lkJ10sCisgICAg ICAgICAgICAgICAgICAgIGNvbGNudD1yb3dbJ2luZG5hdHRzJ10pCisgICAgICAgICAgICAgICAg c3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKKworICAgICAgICAgICAg ICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9z ZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorCisgICAgICAgICAgICAgICAgY29sdW1ucyA9IFtd CisgICAgICAgICAgICAgICAgZm9yIHIgaW4gcmVzWydyb3dzJ106CisgICAgICAgICAgICAgICAg ICAgIGNvbHVtbnMuYXBwZW5kKHsiY29sdW1uIjogclsnY29sdW1uJ10uc3RyaXAoJyInKX0pCisK KyAgICAgICAgICAgICAgICByZXN1bHRbJ2NvbHVtbnMnXSA9IGNvbHVtbnMKKworICAgICAgICAg ICAgICAgICMgSWYgbm90IGV4aXN0cyB0aGVuIGNyZWF0ZSBsaXN0IGFuZC9vciBhcHBlbmQgaW50 bworICAgICAgICAgICAgICAgICMgZXhpc3RpbmcgbGlzdCBbIEFkZGluZyBpbnRvIG1haW4gZGF0 YSBkaWN0XQorICAgICAgICAgICAgICAgIGRhdGEuc2V0ZGVmYXVsdChpbmRleF9jb25zdHJhaW50 c1tjdHlwZV0sIFtdKS5hcHBlbmQocmVzdWx0KQorCisgICAgICAgIHJldHVybiBkYXRhCisKKyAg ICBkZWYgX2ZvcmVpZ25fa2V5X2Zvcm1hdHRlcihzZWxmLCB0aWQsIGRhdGEpOgorICAgICAgICAi IiIKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHRpZDogVGFibGUgT0lECisgICAgICAgICAg ICBkYXRhOiBkaWN0IG9mIHF1ZXJ5IHJlc3VsdAorCisgICAgICAgIFJldHVybnM6CisgICAgICAg ICAgICBJdCB3aWxsIHJldHVybiBmb3JtYXR0ZWQgb3V0cHV0IG9mIHF1ZXJ5IHJlc3VsdAorICAg ICAgICAgICAgYXMgcGVyIGNsaWVudCBtb2RlbCBmb3JtYXQgZm9yIGZvcmVpZ24ga2V5IGNvbnN0 cmFpbnQgbm9kZQorICAgICAgICAiIiIKKworICAgICAgICAjIFdlIHdpbGwgZmV0Y2ggYWxsIHRo ZSBpbmRleCBjb25zdHJhaW50cyBmb3IgdGhlIHRhYmxlCisgICAgICAgIHNxbCA9IHJlbmRlcl90 ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5mb3JlaWduX2tleV90ZW1wbGF0ZV9wYXRoLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZD10aWQpCisKKyAgICAgICAgc3RhdHVzLCBy ZXN1bHQgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKKworICAgICAgICBpZiBub3Qgc3Rh dHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1y ZXN1bHQpCisKKyAgICAgICAgZm9yIGZrIGluIHJlc3VsdFsncm93cyddOgorCisgICAgICAgICAg ICBzcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuZm9yZWlnbl9rZXlfdGVtcGxh dGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dl dF9jb25zdHJhaW50X2NvbHMuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRpZD10aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5cz16aXAo ZmtbJ2NvbmZrZXknXSwgZmtbJ2NvbmtleSddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25mcmVsaWQ9ZmtbJ2NvbmZyZWxpZCddKQorCisgICAgICAgICAgICBzdGF0dXMs IHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3Qoc3FsKQorCisgICAgICAgICAgICBpZiBub3Qg c3RhdHVzOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJy b3Jtc2c9cmVzKQorCisgICAgICAgICAgICBjb2x1bW5zID0gW10KKyAgICAgICAgICAgIGNvbHMg PSBbXQorICAgICAgICAgICAgZm9yIHJvdyBpbiByZXNbJ3Jvd3MnXToKKyAgICAgICAgICAgICAg ICBjb2x1bW5zLmFwcGVuZCh7ImxvY2FsX2NvbHVtbiI6IHJvd1snY29uYXR0bmFtZSddLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVmZXJlbmNlcyI6IGZrWydjb25mcmVsaWQn XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZWQiOiByb3dbJ2Nv bmZhdHRuYW1lJ119KQorICAgICAgICAgICAgICAgIGNvbHMuYXBwZW5kKHJvd1snY29uYXR0bmFt ZSddKQorCisgICAgICAgICAgICBma1snY29sdW1ucyddID0gY29sdW1ucworCisgICAgICAgICAg ICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuZm9yZWlnbl9rZXlfdGVtcGxh dGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dl dF9wYXJlbnQuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZD1m a1snY29sdW1ucyddWzBdWydyZWZlcmVuY2VzJ10pCisKKyAgICAgICAgICAgIHN0YXR1cywgcnNl dCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQorICAgICAgICAgICAgaWYgbm90IHN0 YXR1czoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9y bXNnPXJzZXQpCisKKyAgICAgICAgICAgIGZrWydyZW1vdGVfc2NoZW1hJ10gPSByc2V0Wydyb3dz J11bMF1bJ3NjaGVtYSddCisgICAgICAgICAgICBma1sncmVtb3RlX3RhYmxlJ10gPSByc2V0Wydy b3dzJ11bMF1bJ3RhYmxlJ10KKworICAgICAgICAgICAgY292ZXJpbmdpbmRleCA9IHNlbGYuc2Vh cmNoX2NvdmVyaW5naW5kZXgodGlkLCBjb2xzKQorCisgICAgICAgICAgICBma1snY292ZXJpbmdp bmRleCddID0gY292ZXJpbmdpbmRleAorICAgICAgICAgICAgaWYgY292ZXJpbmdpbmRleDoKKyAg ICAgICAgICAgICAgICBma1snYXV0b2luZGV4J10gPSBUcnVlCisgICAgICAgICAgICAgICAgZmtb J2hhc2luZGV4J10gPSBUcnVlCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGZr WydhdXRvaW5kZXgnXSA9IEZhbHNlCisgICAgICAgICAgICAgICAgZmtbJ2hhc2luZGV4J10gPSBG YWxzZQorICAgICAgICAgICAgIyBJZiBub3QgZXhpc3RzIHRoZW4gY3JlYXRlIGxpc3QgYW5kL29y IGFwcGVuZCBpbnRvCisgICAgICAgICAgICAjIGV4aXN0aW5nIGxpc3QgWyBBZGRpbmcgaW50byBt YWluIGRhdGEgZGljdF0KKyAgICAgICAgICAgIGRhdGEuc2V0ZGVmYXVsdCgnZm9yZWlnbl9rZXkn LCBbXSkuYXBwZW5kKGZrKQorCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgX2NoZWNr X2NvbnN0cmFpbnRfZm9ybWF0dGVyKHNlbGYsIHRpZCwgZGF0YSk6CisgICAgICAgICIiIgorICAg ICAgICBBcmdzOgorICAgICAgICAgICAgdGlkOiBUYWJsZSBPSUQKKyAgICAgICAgICAgIGRhdGE6 IGRpY3Qgb2YgcXVlcnkgcmVzdWx0CisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEl0 IHdpbGwgcmV0dXJuIGZvcm1hdHRlZCBvdXRwdXQgb2YgcXVlcnkgcmVzdWx0CisgICAgICAgICAg ICBhcyBwZXIgY2xpZW50IG1vZGVsIGZvcm1hdCBmb3IgY2hlY2sgY29uc3RyYWludCBub2RlCisg ICAgICAgICIiIgorCisgICAgICAgICMgV2Ugd2lsbCBmZXRjaCBhbGwgdGhlIGluZGV4IGNvbnN0 cmFpbnRzIGZvciB0aGUgdGFibGUKKyAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKFtzZWxmLmNoZWNrX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkKQorCisgICAgICAgIHN0YXR1cywgcmVzID0gc2Vs Zi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCisKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorICAgICAg ICAjIElmIG5vdCBleGlzdHMgdGhlbiBjcmVhdGUgbGlzdCBhbmQvb3IgYXBwZW5kIGludG8KKyAg ICAgICAgIyBleGlzdGluZyBsaXN0IFsgQWRkaW5nIGludG8gbWFpbiBkYXRhIGRpY3RdCisKKyAg ICAgICAgZGF0YVsnY2hlY2tfY29uc3RyYWludCddID0gcmVzWydyb3dzJ10KKworICAgICAgICBy ZXR1cm4gZGF0YQorCisgICAgZGVmIF9leGNsdXNpb25fY29uc3RyYWludF9mb3JtYXR0ZXIoc2Vs ZiwgZGlkLCB0aWQsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgQXJnczoKKyAgICAgICAg ICAgIHRpZDogVGFibGUgT0lECisgICAgICAgICAgICBkYXRhOiBkaWN0IG9mIHF1ZXJ5IHJlc3Vs dAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBJdCB3aWxsIHJldHVybiBmb3JtYXR0 ZWQgb3V0cHV0IG9mIHF1ZXJ5IHJlc3VsdAorICAgICAgICAgICAgYXMgcGVyIGNsaWVudCBtb2Rl bCBmb3JtYXQgZm9yIGV4Y2x1c2lvbiBjb25zdHJhaW50IG5vZGUKKyAgICAgICAgIiIiCisKKyAg ICAgICAgIyBXZSB3aWxsIGZldGNoIGFsbCB0aGUgaW5kZXggY29uc3RyYWludHMgZm9yIHRoZSB0 YWJsZQorICAgICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuZXhjbHVz aW9uX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkaWQ9ZGlkLCB0aWQ9dGlkKQorCisgICAgICAgIHN0YXR1cywgcmVzdWx0ID0gc2Vs Zi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCisKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzdWx0KQorCisg ICAgICAgIGZvciBleCBpbiByZXN1bHRbJ3Jvd3MnXToKKworICAgICAgICAgICAgc3FsID0gcmVu ZGVyX3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgICAgIFtzZWxmLmV4Y2x1c2lvbl9j b25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICdnZXRfY29uc3RyYWlu dF9jb2xzLnNxbCddKSwKKyAgICAgICAgICAgICAgICBjaWQ9ZXhbJ29pZCddLAorICAgICAgICAg ICAgICAgIGNvbGNudD1leFsnaW5kbmF0dHMnXSkKKworICAgICAgICAgICAgc3RhdHVzLCByZXMg PSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKKworICAgICAgICAgICAgaWYgbm90IHN0YXR1 czoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXJlcykKKworICAgICAgICAgICAgY29sdW1ucyA9IFtdCisgICAgICAgICAgICBmb3Igcm93IGlu IHJlc1sncm93cyddOgorICAgICAgICAgICAgICAgIGlmIHJvd1snb3B0aW9ucyddICYgMToKKyAg ICAgICAgICAgICAgICAgICAgb3JkZXIgPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICBudWxs c19vcmRlciA9IFRydWUgaWYgKHJvd1snb3B0aW9ucyddICYgMikgZWxzZSBGYWxzZQorICAgICAg ICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIG9yZGVyID0gVHJ1ZQorICAgICAg ICAgICAgICAgICAgICBudWxsc19vcmRlciA9IFRydWUgaWYgKHJvd1snb3B0aW9ucyddICYgMikg ZWxzZSBGYWxzZQorCisgICAgICAgICAgICAgICAgY29sdW1ucy5hcHBlbmQoeyJjb2x1bW4iOiBy b3dbJ2NvbGRlZiddLnN0cmlwKCciJyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJvcGVyX2NsYXNzIjogcm93WydvcGNuYW1lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJvcmRlciI6IG9yZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi bnVsbHNfb3JkZXIiOiBudWxsc19vcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIm9wZXJhdG9yIjogcm93WydvcHJuYW1lJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJjb2xfdHlwZSI6IHJvd1snZGF0YXR5cGUnXQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9KQorCisgICAgICAgICAgICBleFsnY29sdW1ucyddID0gY29sdW1ucworICAg ICAgICAgICAgIyBJZiBub3QgZXhpc3RzIHRoZW4gY3JlYXRlIGxpc3QgYW5kL29yIGFwcGVuZCBp bnRvCisgICAgICAgICAgICAjIGV4aXN0aW5nIGxpc3QgWyBBZGRpbmcgaW50byBtYWluIGRhdGEg ZGljdF0KKyAgICAgICAgICAgIGRhdGEuc2V0ZGVmYXVsdCgnZXhjbHVkZV9jb25zdHJhaW50Jywg W10pLmFwcGVuZChleCkKKworICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVmIF9mb3JtYXR0 ZXIoc2VsZiwgZGlkLCBzY2lkLCB0aWQsIGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgQXJn czoKKyAgICAgICAgICAgIGRhdGE6IGRpY3Qgb2YgcXVlcnkgcmVzdWx0CisgICAgICAgICAgICBz Y2lkOiBzY2hlbWEgb2lkCisgICAgICAgICAgICB0aWQ6IHRhYmxlIG9pZAorCisgICAgICAgIFJl dHVybnM6CisgICAgICAgICAgICBJdCB3aWxsIHJldHVybiBmb3JtYXR0ZWQgb3V0cHV0IG9mIHF1 ZXJ5IHJlc3VsdAorICAgICAgICAgICAgYXMgcGVyIGNsaWVudCBtb2RlbCBmb3JtYXQKKyAgICAg ICAgIiIiCisgICAgICAgICMgTmVlZCB0byBmb3JtYXQgc2VjdXJpdHkgbGFiZWxzIGFjY29yZGlu ZyB0byBjbGllbnQganMgY29sbGVjdGlvbgorICAgICAgICBpZiAnc2VjbGFiZWxzJyBpbiBkYXRh IGFuZCBkYXRhWydzZWNsYWJlbHMnXSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlY2xhYmVs cyA9IFtdCisgICAgICAgICAgICBmb3Igc2VjbGJscyBpbiBkYXRhWydzZWNsYWJlbHMnXToKKyAg ICAgICAgICAgICAgICBrLCB2ID0gc2VjbGJscy5zcGxpdCgnPScpCisgICAgICAgICAgICAgICAg c2VjbGFiZWxzLmFwcGVuZCh7J3Byb3ZpZGVyJzogaywgJ2xhYmVsJzogdn0pCisKKyAgICAgICAg ICAgIGRhdGFbJ3NlY2xhYmVscyddID0gc2VjbGFiZWxzCisKKyAgICAgICAgIyBXZSBuZWVkIHRv IHBhcnNlICYgY29udmVydCBBQ0wgY29taW5nIGZyb20gZGF0YWJhc2UgdG8ganNvbiBmb3JtYXQK KyAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBs YXRlX3BhdGgsICdhY2wuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlk PXRpZCwgc2NpZD1zY2lkKQorICAgICAgICBzdGF0dXMsIGFjbCA9IHNlbGYuY29ubi5leGVjdXRl X2RpY3QoU1FMKQorICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGlu dGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1hY2wpCisKKyAgICAgICAgIyBXZSB3aWxsIHNl dCBnZXQgcHJpdmlsZWdlcyBmcm9tIGFjbCBzcWwgc28gd2UgZG9uJ3QgbmVlZAorICAgICAgICAj IGl0IGZyb20gcHJvcGVydGllcyBzcWwKKyAgICAgICAgZm9yIHJvdyBpbiBhY2xbJ3Jvd3MnXToK KyAgICAgICAgICAgIHByaXYgPSBwYXJzZV9wcml2X2Zyb21fZGIocm93KQorICAgICAgICAgICAg aWYgcm93WydkZWZ0eXBlJ10gaW4gZGF0YToKKyAgICAgICAgICAgICAgICBkYXRhW3Jvd1snZGVm dHlwZSddXS5hcHBlbmQocHJpdikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAg ZGF0YVtyb3dbJ2RlZnR5cGUnXV0gPSBbcHJpdl0KKworICAgICAgICAjIFdlIHdpbGwgYWRkIEF1 dG8gdmFjdXVtIGRlZmF1bHRzIHdpdGggb3V0IHJlc3VsdCBmb3IgZ3JpZAorICAgICAgICBkYXRh Wyd2YWN1dW1fdGFibGUnXSA9IHNlbGYucGFyc2VfdmFjdXVtX2RhdGEoc2VsZi5jb25uLCBkYXRh LCAndGFibGUnKQorICAgICAgICBkYXRhWyd2YWN1dW1fdG9hc3QnXSA9IHNlbGYucGFyc2VfdmFj dXVtX2RhdGEoc2VsZi5jb25uLCBkYXRhLCAndG9hc3QnKQorCisgICAgICAgICMgRmV0Y2ggY29s dW1ucyBmb3IgdGhlIHRhYmxlIGxvZ2ljCisgICAgICAgICMKKyAgICAgICAgIyAxKSBDaGVjayBp ZiBvZl90eXBlIGFuZCBpbmhlcml0ZWQgdGFibGVzIGFyZSBwcmVzZW50PworICAgICAgICAjIDIp IElmIHllcyB0aGVuIEZldGNoIGFsbCB0aGUgY29sdW1ucyBmb3Igb2ZfdHlwZSBhbmQgaW5oZXJp dGVkIHRhYmxlcworICAgICAgICAjIDMpIEFkZCBjb2x1bW5zIGluIGNvbHVtbnMgY29sbGVjdGlv bgorICAgICAgICAjIDQpIEZpbmQgYWxsIHRoZSBjb2x1bW5zIGZvciB0YWJsZXMgYW5kIGZpbHRl ciBvdXQgY29sdW1ucyB3aGljaCBhcmUKKyAgICAgICAgIyAgIG5vdCBpbmhlcml0ZWQgZnJvbSBh bnkgdGFibGUgJiBmb3JtYXQgdGhlbSBvbmUgYnkgb25lCisKKyAgICAgICAgIyBHZXQgb2ZfdHlw ZSB0YWJsZSBjb2x1bW5zIGFuZCBhZGQgaXQgaW50byBjb2x1bW5zIGRpY3QKKyAgICAgICAgaWYg ZGF0YVsndHlwbmFtZSddOgorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICdnZXRfY29sdW1uc19mb3JfdGFibGUuc3FsJ10pLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRuYW1lPWRhdGFbJ3R5cG5hbWUnXSkKKworICAg ICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKyAgICAg ICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3Nl cnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisgICAgICAgICAgICBkYXRhWydjb2x1bW5zJ10gPSBy ZXNbJ3Jvd3MnXQorCisgICAgICAgICMgR2V0IGluaGVyaXRlZCB0YWJsZShzKSBjb2x1bW5zIGFu ZCBhZGQgaXQgaW50byBjb2x1bW5zIGRpY3QKKyAgICAgICAgZWxpZiBkYXRhWydjb2xsX2luaGVy aXRzJ10gYW5kIGxlbihkYXRhWydjb2xsX2luaGVyaXRzJ10pID4gMDoKKyAgICAgICAgICAgIGNv bHVtbnMgPSBbXQorICAgICAgICAgICAgIyBSZXR1cm4gYWxsIHRhYmxlcyB3aGljaCBjYW4gYmUg aW5oZXJpdGVkICYgZG8gbm90IHNob3cKKyAgICAgICAgICAgICMgc3lzdGVtIGNvbHVtbnMKKyAg ICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJsZV90ZW1w bGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn Z2V0X2luaGVyaXRzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aG93X3N5c3RlbV9vYmplY3RzPUZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKQorICAgICAgICAgICAgc3RhdHVzLCByc2V0ID0gc2VsZi5jb25uLmV4ZWN1dGVfMmRhcnJh eShTUUwpCisgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJldHVy biBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cnNldCkKKworICAgICAgICAgICAgZm9y IHJvdyBpbiByc2V0Wydyb3dzJ106CisgICAgICAgICAgICAgICAgaWYgcm93Wydpbmhlcml0cydd IGluIGRhdGFbJ2NvbGxfaW5oZXJpdHMnXToKKyAgICAgICAgICAgICAgICAgICAgIyBGZXRjaCBj b2x1bW5zIHVzaW5nIGluaGVyaXRlZCB0YWJsZSBPSUQKKyAgICAgICAgICAgICAgICAgICAgU1FM ID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgICAgICAgICAgICAgW3Nl bGYudGFibGVfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2Nv bHVtbnNfZm9yX3RhYmxlLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpZD1yb3db J29pZCddCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVz LCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKyAgICAgICAgICAgICAgICAgICAg aWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9z ZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLmV4 dGVuZChyZXNbJ3Jvd3MnXVs6XSkKKyAgICAgICAgICAgIGRhdGFbJ2NvbHVtbnMnXSA9IGNvbHVt bnMKKworICAgICAgICAjIFdlIHdpbGwgZmV0Y2ggYWxsIHRoZSBjb2x1bW5zIGZvciB0aGUgdGFi bGUgdXNpbmcKKyAgICAgICAgIyBjb2x1bW5zIHByb3BlcnRpZXMuc3FsLCBzbyB3ZSBuZWVkIHRv IHNldCB0ZW1wbGF0ZSBwYXRoCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9p bihbc2VsZi5jb2x1bW5fdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0aWQ9dGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd19zeXNf b2JqZWN0cz1GYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAg IHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCisgICAgICAgIGlmIG5v dCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9y bXNnPXJlcykKKyAgICAgICAgYWxsX2NvbHVtbnMgPSByZXNbJ3Jvd3MnXQorCisgICAgICAgICMg RmlsdGVyIGluaGVyaXRlZCBjb2x1bW5zIGZyb20gYWxsIGNvbHVtbnMKKyAgICAgICAgaWYgJ2Nv bHVtbnMnIGluIGRhdGEgYW5kIGxlbihkYXRhWydjb2x1bW5zJ10pID4gMCBcCisgICAgICAgICAg ICAgICAgYW5kIGxlbihhbGxfY29sdW1ucykgPiAwOgorICAgICAgICAgICAgZm9yIHJvdyBpbiBk YXRhWydjb2x1bW5zJ106CisgICAgICAgICAgICAgICAgZm9yIGksIGNvbCBpbiBlbnVtZXJhdGUo YWxsX2NvbHVtbnMpOgorICAgICAgICAgICAgICAgICAgICAjIElmIGJvdGggbmFtZSBhcmUgc2Ft ZSB0aGVuIHJlbW92ZSBpdAorICAgICAgICAgICAgICAgICAgICAjIGFzIGl0IGlzIGluaGVyaXRl ZCBmcm9tIG90aGVyIHRhYmxlCisgICAgICAgICAgICAgICAgICAgIGlmIGNvbFsnbmFtZSddID09 IHJvd1snbmFtZSddOgorICAgICAgICAgICAgICAgICAgICAgICAgIyBSZW1vdmUgc2FtZSBjb2x1 bW4gZnJvbSBhbGxfY29sdW1ucyBhcworICAgICAgICAgICAgICAgICAgICAgICAgIyBhbHJlYWR5 IGhhdmUgaXQgY29sdW1ucyBjb2xsZWN0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBkZWwg YWxsX2NvbHVtbnNbaV0KKworICAgICAgICAgICAgIyBJZiBhbnkgY29sdW1uIGlzIGFkZGVkIHRo ZW4gdXBkYXRlIGNvbHVtbnMgY29sbGVjdGlvbgorICAgICAgICAgICAgaWYgbGVuKGFsbF9jb2x1 bW5zKSA+IDA6CisgICAgICAgICAgICAgICAgZGF0YVsnY29sdW1ucyddICs9IGFsbF9jb2x1bW5z CisgICAgICAgICMgSWYgbm8gaW5oZXJpdGVkIGNvbHVtbnMgZm91bmQgdGhlbiBhZGQgYWxsIGNv bHVtbnMKKyAgICAgICAgZWxpZiBsZW4oYWxsX2NvbHVtbnMpID4gMDoKKyAgICAgICAgICAgIGRh dGFbJ2NvbHVtbnMnXSA9IGFsbF9jb2x1bW5zCisKKyAgICAgICAgaWYgJ2NvbHVtbnMnIGluIGRh dGEgYW5kIGxlbihkYXRhWydjb2x1bW5zJ10pID4gMDoKKyAgICAgICAgICAgIGRhdGEgPSBzZWxm Ll9jb2x1bW5zX2Zvcm1hdHRlcih0aWQsIGRhdGEpCisKKyAgICAgICAgIyBIZXJlIHdlIHdpbGwg YWRkIGNvbnN0cmFpbnQgaW4gb3VyIG91dHB1dAorICAgICAgICBkYXRhID0gc2VsZi5faW5kZXhf Y29uc3RyYWludHNfZm9ybWF0dGVyKGRpZCwgdGlkLCBkYXRhKQorICAgICAgICBkYXRhID0gc2Vs Zi5fZm9yZWlnbl9rZXlfZm9ybWF0dGVyKHRpZCwgZGF0YSkKKyAgICAgICAgZGF0YSA9IHNlbGYu X2NoZWNrX2NvbnN0cmFpbnRfZm9ybWF0dGVyKHRpZCwgZGF0YSkKKyAgICAgICAgZGF0YSA9IHNl bGYuX2V4Y2x1c2lvbl9jb25zdHJhaW50X2Zvcm1hdHRlcihkaWQsIHRpZCwgZGF0YSkKKworICAg ICAgICByZXR1cm4gZGF0YQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBfY2x0eXBlX2Zv cm1hdHRlcihkYXRhX3R5cGUpOgorICAgICAgICAiIiIKKworICAgICAgICBBcmdzOgorICAgICAg ICAgICAgZGF0YV90eXBlOiBUeXBlIHN0cmluZworCisgICAgICAgIFJldHVybnM6CisgICAgICAg ICAgICBXZSBuZWVkIHRvIHJlbW92ZSBbXSBmcm9tIHR5cGUgYW5kIGFwcGVuZCBpdAorICAgICAg ICAgICAgYWZ0ZXIgbGVuZ3RoL3ByZWNpc2lvbiBzbyB3ZSB3aWxsIHNlbmQgZmxhZyBmb3IKKyAg ICAgICAgICAgIHNxbCB0ZW1wbGF0ZQorICAgICAgICAiIiIKKyAgICAgICAgaWYgJ1tdJyBpbiBk YXRhX3R5cGU6CisgICAgICAgICAgICByZXR1cm4gZGF0YV90eXBlWzotMl0sIFRydWUKKyAgICAg ICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBkYXRhX3R5cGUsIEZhbHNlCisKKyAgICBkZWYg Z2V0X3RhYmxlX2RlcGVuZGVudHMoc2VsZiwgdGlkKToKKyAgICAgICAgIiIiCisgICAgICAgIFRo aXMgZnVuY3Rpb24gZ2V0IHRoZSBkZXBlbmRlbnRzIGFuZCByZXR1cm4gYWpheCByZXNwb25zZQor ICAgICAgICBmb3IgdGhlIHRhYmxlIG5vZGUuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAg IHRpZDogVGFibGUgSUQKKyAgICAgICAgIiIiCisgICAgICAgICMgU3BlY2lmaWMgY29uZGl0aW9u IGZvciBjb2x1bW4gd2hpY2ggd2UgbmVlZCB0byBhcHBlbmQKKyAgICAgICAgd2hlcmUgPSAiV0hF UkUgZGVwLnJlZm9iamlkPXswfTo6T0lEIi5mb3JtYXQodGlkKQorCisgICAgICAgIGRlcGVuZGVu dHNfcmVzdWx0ID0gc2VsZi5nZXRfZGVwZW5kZW50cygKKyAgICAgICAgICAgIHNlbGYuY29ubiwg dGlkCisgICAgICAgICkKKworICAgICAgICAjIFNwZWNpZmljIHNxbCB0byBydW4gYWdhaW50IGNv bHVtbiB0byBmZXRjaCBkZXBlbmRlbnRzCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgi LyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICdkZXBlbmQuc3FsJ10pLCB3aGVyZT13aGVyZSkKKworICAgICAg ICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQorICAgICAgICBpZiBu b3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJv cm1zZz1yZXMpCisKKyAgICAgICAgZm9yIHJvdyBpbiByZXNbJ3Jvd3MnXToKKyAgICAgICAgICAg IHJlZl9uYW1lID0gcm93WydyZWZuYW1lJ10KKyAgICAgICAgICAgIGlmIHJlZl9uYW1lIGlzIE5v bmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAgICAgZGVwX3R5cGUgPSAn JworICAgICAgICAgICAgZGVwX3N0ciA9IHJvd1snZGVwdHlwZSddCisgICAgICAgICAgICBpZiBk ZXBfc3RyID09ICdhJzoKKyAgICAgICAgICAgICAgICBkZXBfdHlwZSA9ICdhdXRvJworICAgICAg ICAgICAgZWxpZiBkZXBfc3RyID09ICduJzoKKyAgICAgICAgICAgICAgICBkZXBfdHlwZSA9ICdu b3JtYWwnCisgICAgICAgICAgICBlbGlmIGRlcF9zdHIgPT0gJ2knOgorICAgICAgICAgICAgICAg IGRlcF90eXBlID0gJ2ludGVybmFsJworCisgICAgICAgICAgICBkZXBlbmRlbnRzX3Jlc3VsdC5h cHBlbmQoeyd0eXBlJzogJ3NlcXVlbmNlJywgJ25hbWUnOiByZWZfbmFtZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpZWxkJzogZGVwX3R5cGV9KQorCisgICAgICAg IHJldHVybiBhamF4X3Jlc3BvbnNlKAorICAgICAgICAgICAgcmVzcG9uc2U9ZGVwZW5kZW50c19y ZXN1bHQsCisgICAgICAgICAgICBzdGF0dXM9MjAwCisgICAgICAgICkKKworICAgIGRlZiBnZXRf dGFibGVfZGVwZW5kZW5jaWVzKHNlbGYsIHRpZCk6CisgICAgICAgICIiIgorICAgICAgICBUaGlz IGZ1bmN0aW9uIGdldCB0aGUgZGVwZW5kZW5jaWVzIGFuZCByZXR1cm4gYWpheCByZXNwb25zZQor ICAgICAgICBmb3IgdGhlIHRhYmxlIG5vZGUuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAg IHRpZDogVGFibGUgSUQKKworICAgICAgICAiIiIKKyAgICAgICAgZGVwZW5kZW5jaWVzX3Jlc3Vs dCA9IHNlbGYuZ2V0X2RlcGVuZGVuY2llcygKKyAgICAgICAgICAgIHNlbGYuY29ubiwgdGlkCisg ICAgICAgICkKKworICAgICAgICByZXR1cm4gYWpheF9yZXNwb25zZSgKKyAgICAgICAgICAgIHJl c3BvbnNlPWRlcGVuZGVuY2llc19yZXN1bHQsCisgICAgICAgICAgICBzdGF0dXM9MjAwCisgICAg ICAgICkKKworICAgIGRlZiBnZXRfdGFibGVfc3RhdGlzdGljcyhzZWxmLCBzY2lkLCB0aWQpOgor ICAgICAgICAiIiIKKyAgICAgICAgU3RhdGlzdGljcworCisgICAgICAgIEFyZ3M6CisgICAgICAg ICAgICBzY2lkOiBTY2hlbWEgSWQKKyAgICAgICAgICAgIHRpZDogVGFibGUgSWQKKworICAgICAg ICBSZXR1cm5zIHRoZSBzdGF0aXN0aWNzIGZvciBhIHBhcnRpY3VsYXIgdGFibGUgaWYgdGlkIGlz IHNwZWNpZmllZCwKKyAgICAgICAgb3RoZXJ3aXNlIGl0IHdpbGwgcmV0dXJuIHN0YXRpc3RpY3Mg Zm9yIGFsbCB0aGUgdGFibGVzIGluIHRoYXQKKyAgICAgICAgc2NoZW1hLgorICAgICAgICAiIiIK KworICAgICAgICAjIEZldGNoIHNjaGVtYSBuYW1lCisgICAgICAgIHN0YXR1cywgc2NoZW1hX25h bWUgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoCisgICAgICAgICAgICByZW5kZXJfdGVtcGxh dGUoCisgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwg J2dldF9zY2hlbWEuc3FsJ10pLAorICAgICAgICAgICAgICAgIGNvbm49c2VsZi5jb25uLCBzY2lk PXNjaWQKKyAgICAgICAgICAgICkKKyAgICAgICAgKQorICAgICAgICBpZiBub3Qgc3RhdHVzOgor ICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1zY2hlbWFf bmFtZSkKKworICAgICAgICBpZiB0aWQgaXMgTm9uZToKKyAgICAgICAgICAgIHN0YXR1cywgcmVz ID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdCgKKyAgICAgICAgICAgICAgICByZW5kZXJfdGVtcGxh dGUoCisgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3Bh dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sbF90YWJsZV9zdGF0cy5zcWwn XSksIGNvbm49c2VsZi5jb25uLAorICAgICAgICAgICAgICAgICAgICBzY2hlbWFfbmFtZT1zY2hl bWFfbmFtZQorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICkKKyAgICAgICAgZWxzZToK KyAgICAgICAgICAgICMgRm9yIEluZGl2aWR1YWwgdGFibGUgc3RhdHMKKworICAgICAgICAgICAg IyBDaGVjayBpZiBwZ3N0YXR0dXBsZSBleHRlbnNpb24gaXMgYWxyZWFkeSBjcmVhdGVkPworICAg ICAgICAgICAgIyBpZiBjcmVhdGVkIHRoZW4gb25seSBhZGQgZXh0ZW5kZWQgc3RhdHMKKyAgICAg ICAgICAgIHN0YXR1cywgaXNfcGdzdGF0dHVwbGUgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIo IiIiCisgICAgICAgICAgICBTRUxFQ1QgKGNvdW50KGV4dG5hbWUpID4gMCkgQVMgaXNfcGdzdGF0 dHVwbGUKKyAgICAgICAgICAgIEZST00gcGdfZXh0ZW5zaW9uCisgICAgICAgICAgICBXSEVSRSBl eHRuYW1lPSdwZ3N0YXR0dXBsZScKKyAgICAgICAgICAgICIiIikKKyAgICAgICAgICAgIGlmIG5v dCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihl cnJvcm1zZz1pc19wZ3N0YXR0dXBsZSkKKworICAgICAgICAgICAgIyBGZXRjaCBUYWJsZSBuYW1l CisgICAgICAgICAgICBzdGF0dXMsIHRhYmxlX25hbWUgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2Fs YXIoCisgICAgICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICAg ICAiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLCAnZ2V0X3RhYmxlLnNxbCddKSwK KyAgICAgICAgICAgICAgICAgICAgY29ubj1zZWxmLmNvbm4sIHNjaWQ9c2NpZCwgdGlkPXRpZAor ICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0 dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1z Zz10YWJsZV9uYW1lKQorCisgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVj dXRlX2RpY3QoCisgICAgICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAg ICAgICAgICAiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLCAnc3RhdHMuc3FsJ10p LAorICAgICAgICAgICAgICAgICAgICBjb25uPXNlbGYuY29ubiwgc2NoZW1hX25hbWU9c2NoZW1h X25hbWUsCisgICAgICAgICAgICAgICAgICAgIHRhYmxlX25hbWU9dGFibGVfbmFtZSwKKyAgICAg ICAgICAgICAgICAgICAgaXNfcGdzdGF0dHVwbGU9aXNfcGdzdGF0dHVwbGUsIHRpZD10aWQKKyAg ICAgICAgICAgICAgICApCisgICAgICAgICAgICApCisKKyAgICAgICAgaWYgbm90IHN0YXR1czoK KyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQor CisgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICBkYXRhPXJl cywKKyAgICAgICAgICAgIHN0YXR1cz0yMDAKKyAgICAgICAgKQorCisgICAgZGVmIGdldF9yZXZl cnNlX2VuZ2luZWVyZWRfc3FsKHNlbGYsIGRpZCwgc2NpZCwgdGlkLCBtYWluX3NxbCwgZGF0YSk6 CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgY3JlYXRlcyByZXZlcnNl IGVuZ2luZWVyZWQgc3FsIGZvcgorICAgICAgICB0aGUgdGFibGUgb2JqZWN0CisKKyAgICAgICAg IEFyZ3M6CisgICAgICAgICAgIGRpZDogRGF0YWJhc2UgSUQKKyAgICAgICAgICAgc2NpZDogU2No ZW1hIElECisgICAgICAgICAgIHRpZDogVGFibGUgSUQKKyAgICAgICAgICAgbWFpbl9zcWw6IExp c3QgY29udGFpbnMgYWxsIHRoZSByZXZlcnNlZCBlbmdpbmVlcmVkIHNxbAorICAgICAgICAgICBk YXRhOiBUYWJsZSdzIERhdGEKKyAgICAgICAgIiIiCisgICAgICAgICIiIgorICAgICAgICAjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgMSkgUmV2ZXJzZSBl bmdpbmVlcmVkIHNxbCBmb3IgVEFCTEUKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIworICAgICAgICAiIiIKKworICAgICAgICAjIFRhYmxlICYgU2NoZW1hIGRl Y2xhcmF0aW9uIHNvIHRoYXQgd2UgY2FuIHVzZSB0aGVtIGluIGNoaWxkIG5vZGVzCisgICAgICAg IHNjaGVtYSA9IGRhdGFbJ3NjaGVtYSddCisgICAgICAgIHRhYmxlID0gZGF0YVsnbmFtZSddCisK KyAgICAgICAgZGF0YSA9IHNlbGYuX2Zvcm1hdHRlcihkaWQsIHNjaWQsIHRpZCwgZGF0YSkKKwor ICAgICAgICAjIE5vdyB3ZSBoYXZlIGFsbCBsaXMgb2YgY29sdW1ucyB3aGljaCB3ZSBuZWVkCisg ICAgICAgICMgdG8gaW5jbHVkZSBpbiBvdXIgY3JlYXRlIGRlZmluaXRpb24sIExldCdzIGZvcm1h dCB0aGVtCisgICAgICAgIGlmICdjb2x1bW5zJyBpbiBkYXRhOgorICAgICAgICAgICAgZm9yIGMg aW4gZGF0YVsnY29sdW1ucyddOgorICAgICAgICAgICAgICAgIGlmICdhdHRhY2wnIGluIGM6Cisg ICAgICAgICAgICAgICAgICAgIGNbJ2F0dGFjbCddID0gcGFyc2VfcHJpdl90b19kYihjWydhdHRh Y2wnXSwgc2VsZi5jb2x1bW5fYWNsKQorCisgICAgICAgICAgICAgICAgIyBjaGVjayB0eXBlIGZv ciAnW10nIGluIGl0CisgICAgICAgICAgICAgICAgaWYgJ2NsdHlwZScgaW4gYzoKKyAgICAgICAg ICAgICAgICAgICAgY1snY2x0eXBlJ10sIGNbJ2hhc1NxckJyYWNrZXQnXSA9IFwKKyAgICAgICAg ICAgICAgICAgICAgICAgIHNlbGYuX2NsdHlwZV9mb3JtYXR0ZXIoY1snY2x0eXBlJ10pCisKKyAg ICAgICAgc3FsX2hlYWRlciA9IHUiLS0gVGFibGU6IHswfVxuXG4tLSAiLmZvcm1hdCgKKyAgICAg ICAgICAgIHNlbGYucXRJZGVudChzZWxmLmNvbm4sIGRhdGFbJ3NjaGVtYSddLCBkYXRhWyduYW1l J10pKQorCisgICAgICAgIHNxbF9oZWFkZXIgKz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtz ZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnZGVsZXRlLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBjb25uPXNlbGYuY29ubikKKworICAgICAgICBzcWxf aGVhZGVyID0gc3FsX2hlYWRlci5zdHJpcCgnXG4nKQorICAgICAgICBzcWxfaGVhZGVyICs9ICdc bicKKworICAgICAgICAjIEFkZCBpbnRvIG1haW4gc3FsCisgICAgICAgIG1haW5fc3FsLmFwcGVu ZChzcWxfaGVhZGVyKQorCisgICAgICAgICMgUGFyc2UgcHJpdmlsZWdlIGRhdGEKKyAgICAgICAg aWYgJ3JlbGFjbCcgaW4gZGF0YToKKyAgICAgICAgICAgIGRhdGFbJ3JlbGFjbCddID0gcGFyc2Vf cHJpdl90b19kYihkYXRhWydyZWxhY2wnXSwgc2VsZi5hY2wpCisKKyAgICAgICAgIyBpZiB0YWJs ZSBpcyBwYXJ0aXRpb25zIHRoZW4KKyAgICAgICAgaWYgJ3JlbGlzcGFydGl0aW9uJyBpbiBkYXRh IGFuZCBkYXRhWydyZWxpc3BhcnRpdGlvbiddOgorICAgICAgICAgICAgdGFibGVfc3FsID0gcmVu ZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnBhcnRpdGlvbl90ZW1wbGF0ZV9wYXRoLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3JlYXRlLnNx bCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEs IGNvbm49c2VsZi5jb25uKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdGFibGVfc3FsID0g cmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGUuc3Fs J10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwg Y29ubj1zZWxmLmNvbm4pCisKKyAgICAgICAgIyBBZGQgaW50byBtYWluIHNxbAorICAgICAgICB0 YWJsZV9zcWwgPSByZS5zdWIoJ1xuezIsfScsICdcblxuJywgdGFibGVfc3FsKQorICAgICAgICBt YWluX3NxbC5hcHBlbmQodGFibGVfc3FsLnN0cmlwKCdcbicpKQorCisgICAgICAgICIiIgorICAg ICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIDIp IFJldmVyc2UgZW5naW5lZXJlZCBzcWwgZm9yIElOREVYCisgICAgICAgICMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICIiIgorCisgICAgICAgIFNRTCA9IHJl bmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5pbmRleF90ZW1wbGF0ZV9wYXRoLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub2Rlcy5zcWwnXSksIHRpZD10aWQp CisgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQor ICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz1yc2V0KQorCisgICAgICAgIGZvciByb3cgaW4gcnNldFsncm93cydd OgorCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuaW5k ZXhfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRpZD1kaWQsIHRpZD10aWQsIGlkeD1yb3dbJ29pZCddLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkKQorCisgICAg ICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQorICAgICAg ICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2Vy dmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKworICAgICAgICAgICAgZGF0YSA9IGRpY3QocmVzWydy b3dzJ11bMF0pCisgICAgICAgICAgICAjIEFkZGluZyBwYXJlbnQgaW50byBkYXRhIGRpY3QsIHdp bGwgYmUgdXNpbmcgaXQgd2hpbGUgY3JlYXRpbmcgc3FsCisgICAgICAgICAgICBkYXRhWydzY2hl bWEnXSA9IHNjaGVtYQorICAgICAgICAgICAgZGF0YVsndGFibGUnXSA9IHRhYmxlCisgICAgICAg ICAgICAjIFdlIGFsc28gbmVlZCB0byBmZWN0aCBjb2x1bW5zIG9mIGluZGV4CisgICAgICAgICAg ICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuaW5kZXhfdGVtcGxhdGVfcGF0 aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbHVtbl9k ZXRhaWxzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHg9cm93 WydvaWQnXSkKKyAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJk YXJyYXkoU1FMKQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICBy ZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJzZXQpCisKKyAgICAgICAgICAg ICMgJ2F0dGRlZicgY29tZXMgd2l0aCBxdW90ZXMgZnJvbSBxdWVyeSBzbyB3ZSBuZWVkIHRvIHN0 cmlwIHRoZW0KKyAgICAgICAgICAgICMgJ29wdGlvbnMnIHdlIG5lZWQgdHJ1ZS9mYWxzZSB0byBy ZW5kZXIgc3dpdGNoCisgICAgICAgICAgICAjIEFTQyhmYWxzZSkvREVTQyh0cnVlKQorICAgICAg ICAgICAgY29sdW1ucyA9IFtdCisgICAgICAgICAgICBjb2xzID0gW10KKyAgICAgICAgICAgIGZv ciBjb2xfcm93IGluIHJzZXRbJ3Jvd3MnXToKKyAgICAgICAgICAgICAgICAjIFdlIG5lZWQgYWxs IGRhdGEgYXMgY29sbGVjdGlvbiBmb3IgQ29sdW1uc01vZGVsCisgICAgICAgICAgICAgICAgY29s c19kYXRhID0geworICAgICAgICAgICAgICAgICAgICAnY29sbmFtZSc6IGNvbF9yb3dbJ2F0dGRl ZiddLnN0cmlwKCciJyksCisgICAgICAgICAgICAgICAgICAgICdjb2xsc3BjbmFtZSc6IGNvbF9y b3dbJ2NvbGxuc3BuYW1lJ10sCisgICAgICAgICAgICAgICAgICAgICdvcF9jbGFzcyc6IGNvbF9y b3dbJ29wY25hbWUnXSwKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgY29s X3Jvd1snb3B0aW9ucyddWzBdID09ICdERVNDJzoKKyAgICAgICAgICAgICAgICAgICAgY29sc19k YXRhWydzb3J0X29yZGVyJ10gPSBUcnVlCisgICAgICAgICAgICAgICAgY29sdW1ucy5hcHBlbmQo Y29sc19kYXRhKQorCisgICAgICAgICAgICAgICAgIyBXZSBuZWVkIHNhbWUgZGF0YSBhcyBzdHJp bmcgdG8gZGlzcGxheSBpbiBwcm9wZXJ0aWVzIHdpbmRvdworICAgICAgICAgICAgICAgICMgSWYg bXVsdGlwbGUgY29sdW1uIHRoZW4gc2VwYXJhdGUgaXQgYnkgY29sb24KKyAgICAgICAgICAgICAg ICBjb2xzX3N0ciA9IGNvbF9yb3dbJ2F0dGRlZiddCisgICAgICAgICAgICAgICAgaWYgY29sX3Jv d1snY29sbG5zcG5hbWUnXToKKyAgICAgICAgICAgICAgICAgICAgY29sc19zdHIgKz0gJyBDT0xM QVRFICcgKyBjb2xfcm93Wydjb2xsbnNwbmFtZSddCisgICAgICAgICAgICAgICAgaWYgY29sX3Jv d1snb3BjbmFtZSddOgorICAgICAgICAgICAgICAgICAgICBjb2xzX3N0ciArPSAnICcgKyBjb2xf cm93WydvcGNuYW1lJ10KKyAgICAgICAgICAgICAgICBpZiBjb2xfcm93WydvcHRpb25zJ11bMF0g PT0gJ0RFU0MnOgorICAgICAgICAgICAgICAgICAgICBjb2xzX3N0ciArPSAnIERFU0MnCisgICAg ICAgICAgICAgICAgY29scy5hcHBlbmQoY29sc19zdHIpCisKKyAgICAgICAgICAgICMgUHVzaCBh cyBjb2xsZWN0aW9uCisgICAgICAgICAgICBkYXRhWydjb2x1bW5zJ10gPSBjb2x1bW5zCisgICAg ICAgICAgICAjIFB1c2ggYXMgc3RyaW5nCisgICAgICAgICAgICBkYXRhWydjb2xzJ10gPSAnLCAn LmpvaW4oY29scykKKworICAgICAgICAgICAgc3FsX2hlYWRlciA9IHUiXG4tLSBJbmRleDogezB9 XG5cbi0tICIuZm9ybWF0KGRhdGFbJ25hbWUnXSkKKworICAgICAgICAgICAgc3FsX2hlYWRlciAr PSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuaW5kZXhfdGVtcGxhdGVfcGF0aCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVsZXRl LnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9 ZGF0YSwgY29ubj1zZWxmLmNvbm4pCisKKyAgICAgICAgICAgIGluZGV4X3NxbCA9IHJlbmRlcl90 ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5pbmRleF90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3JlYXRlLnNxbCddKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2Vs Zi5jb25uKQorICAgICAgICAgICAgaW5kZXhfc3FsICs9ICJcbiIKKyAgICAgICAgICAgIGluZGV4 X3NxbCArPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuaW5kZXhfdGVtcGxhdGVfcGF0 aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdh bHRlci5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh dGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCisKKyAgICAgICAgICAgICMgQWRkIGludG8gbWFpbiBz cWwKKyAgICAgICAgICAgIGluZGV4X3NxbCA9IHJlLnN1YignXG57Mix9JywgJ1xuXG4nLCBpbmRl eF9zcWwpCisgICAgICAgICAgICBtYWluX3NxbC5hcHBlbmQoc3FsX2hlYWRlciArICdcblxuJyAr IGluZGV4X3NxbC5zdHJpcCgnXG4nKSkKKworICAgICAgICAiIiIKKyAgICAgICAgIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIDMpIFJldmVyc2UgZW5n aW5lZXJlZCBzcWwgZm9yIFRSSUdHRVJTCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIiIiCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1w bGF0ZSgiLyIuam9pbihbc2VsZi50cmlnZ2VyX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vZGVzLnNxbCddKSwgdGlkPXRpZCkKKyAgICAg ICAgc3RhdHVzLCByc2V0ID0gc2VsZi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCisgICAgICAg IGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9y KGVycm9ybXNnPXJzZXQpCisKKyAgICAgICAgZm9yIHJvdyBpbiByc2V0Wydyb3dzJ106CisgICAg ICAgICAgICB0cmlnZ2VyX3NxbCA9ICcnCisKKyAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1w bGF0ZSgiLyIuam9pbihbc2VsZi50cmlnZ2VyX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkLCB0cmlkPXJvd1snb2lkJ10sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxh c3RzeXNvaWQpCisKKyAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVf ZGljdChTUUwpCisgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJl dHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorCisgICAgICAgICAgICBk YXRhID0gZGljdChyZXNbJ3Jvd3MnXVswXSkKKyAgICAgICAgICAgICMgQWRkaW5nIHBhcmVudCBp bnRvIGRhdGEgZGljdCwgd2lsbCBiZSB1c2luZyBpdCB3aGlsZSBjcmVhdGluZyBzcWwKKyAgICAg ICAgICAgIGRhdGFbJ3NjaGVtYSddID0gc2NoZW1hCisgICAgICAgICAgICBkYXRhWyd0YWJsZSdd ID0gdGFibGUKKworICAgICAgICAgICAgaWYgZGF0YVsndGduYXJncyddID4gMToKKyAgICAgICAg ICAgICAgICAjIFdlIGtub3cgdGhhdCB0cmlnZ2VyIGhhcyBtb3JlIHRoYW4gMSBhcmd1bWVudHMs CisgICAgICAgICAgICAgICAgIyBsZXQncyBqb2luIHRoZW0KKyAgICAgICAgICAgICAgICBkYXRh Wyd0Z2FyZ3MnXSA9ICcsICcuam9pbihkYXRhWyd0Z2FyZ3MnXSkKKworICAgICAgICAgICAgaWYg bGVuKGRhdGFbJ3RnYXR0ciddKSA+IDE6CisgICAgICAgICAgICAgICAgY29sdW1ucyA9ICcsICcu am9pbihkYXRhWyd0Z2F0dHInXS5zcGxpdCgnICcpKQorCisgICAgICAgICAgICAgICAgU1FMID0g cmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRyaWdnZXJfdGVtcGxhdGVfcGF0aCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfY29sdW1u cy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZD10aWQs IGNsaXN0PWNvbHVtbnMpCisKKyAgICAgICAgICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNv bm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKKyAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgor ICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXJzZXQpCisgICAgICAgICAgICAgICAgIyAndGdhdHRyJyBjb250YWlucyBsaXN0IG9mIGNvbHVt bnMgZnJvbSB0YWJsZSB1c2VkIGluIHRyaWdnZXIKKyAgICAgICAgICAgICAgICBjb2x1bW5zID0g W10KKworICAgICAgICAgICAgICAgIGZvciBjb2xfcm93IGluIHJzZXRbJ3Jvd3MnXToKKyAgICAg ICAgICAgICAgICAgICAgY29sdW1ucy5hcHBlbmQoeydjb2x1bW4nOiBjb2xfcm93WyduYW1lJ119 KQorCisgICAgICAgICAgICAgICAgZGF0YVsnY29sdW1ucyddID0gY29sdW1ucworCisgICAgICAg ICAgICBkYXRhID0gdHJpZ2dlcl9kZWZpbml0aW9uKGRhdGEpCisKKyAgICAgICAgICAgIHNxbF9o ZWFkZXIgPSB1IlxuLS0gVHJpZ2dlcjogezB9XG5cbi0tICIuZm9ybWF0KGRhdGFbJ25hbWUnXSkK KworICAgICAgICAgICAgc3FsX2hlYWRlciArPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3Nl bGYudHJpZ2dlcl90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdkZWxldGUuc3FsJ10pLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBjb25uPXNlbGYuY29ubikKKworICAg ICAgICAgICAgIyBJZiB0aGUgcmVxdWVzdCBmb3IgbmV3IG9iamVjdCB3aGljaCBkbyBub3QgaGF2 ZSBkaWQKKyAgICAgICAgICAgIHRyaWdnZXJfc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2lu KFtzZWxmLnRyaWdnZXJfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnY3JlYXRlLnNxbCddKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCisK KyAgICAgICAgICAgIHRyaWdnZXJfc3FsID0gc3FsX2hlYWRlciArICdcblxuJyArIHRyaWdnZXJf c3FsLnN0cmlwKCdcbicpCisKKyAgICAgICAgICAgICMgSWYgdHJpZ2dlciBpcyBkaXNhYmxlZCB0 aGVuIGFkZCBzcWwgY29kZSBmb3IgdGhlIHNhbWUKKyAgICAgICAgICAgIGlmIG5vdCBkYXRhWydp c19lbmFibGVfdHJpZ2dlciddOgorICAgICAgICAgICAgICAgIHRyaWdnZXJfc3FsICs9ICdcblxu JworICAgICAgICAgICAgICAgIHRyaWdnZXJfc3FsICs9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9p bihbCisgICAgICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcl90ZW1wbGF0ZV9wYXRoLAorICAg ICAgICAgICAgICAgICAgICAnZW5hYmxlX2Rpc2FibGVfdHJpZ2dlci5zcWwnXSksCisgICAgICAg ICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCisKKyAgICAgICAgICAgICMg QWRkIGludG8gbWFpbiBzcWwKKyAgICAgICAgICAgIHRyaWdnZXJfc3FsID0gcmUuc3ViKCdcbnsy LH0nLCAnXG5cbicsIHRyaWdnZXJfc3FsKQorICAgICAgICAgICAgbWFpbl9zcWwuYXBwZW5kKHRy aWdnZXJfc3FsKQorCisgICAgICAgICIiIgorICAgICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgNCkgUmV2ZXJzZSBlbmdpbmVlcmVkIHNxbCBmb3Ig UlVMRVMKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAg ICAgICAiIiIKKworICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCisgICAg ICAgICAgICBbc2VsZi5ydWxlc190ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwnXSksIHRp ZD10aWQpCisKKyAgICAgICAgc3RhdHVzLCByc2V0ID0gc2VsZi5jb25uLmV4ZWN1dGVfMmRhcnJh eShTUUwpCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJu YWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJzZXQpCisKKyAgICAgICAgZm9yIHJvdyBpbiByc2V0 Wydyb3dzJ106CisgICAgICAgICAgICBydWxlc19zcWwgPSAnXG4nCisgICAgICAgICAgICBTUUwg PSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCisgICAgICAgICAgICAgICAgW3NlbGYucnVsZXNf dGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10KKyAgICAgICAgICAgICksIHJpZD1yb3db J29pZCddLCBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKKworICAgICAgICAgICAg c3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKyAgICAgICAgICAgIGlm IG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgICAgIHJlc19kYXRhID0gcGFyc2VfcnVsZV9kZWZp bml0aW9uKHJlcykKKyAgICAgICAgICAgIHJ1bGVzX3NxbCArPSByZW5kZXJfdGVtcGxhdGUoIi8i LmpvaW4oCisgICAgICAgICAgICAgICAgW3NlbGYucnVsZXNfdGVtcGxhdGVfcGF0aCwgJ2NyZWF0 ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgZGF0YT1yZXNfZGF0YSwgZGlzcGxheV9jb21tZW50 cz1UcnVlKQorCisgICAgICAgICAgICAjIEFkZCBpbnRvIG1haW4gc3FsCisgICAgICAgICAgICBy dWxlc19zcWwgPSByZS5zdWIoJ1xuezIsfScsICdcblxuJywgcnVsZXNfc3FsKQorICAgICAgICAg ICAgbWFpbl9zcWwuYXBwZW5kKHJ1bGVzX3NxbCkKKworICAgICAgICAiIiIKKyAgICAgICAgIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICMgNSkgUmV2 ZXJzZSBlbmdpbmVlcmVkIHNxbCBmb3IgUEFSVElUSU9OUworICAgICAgICAjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIiIiCisgICAgICAgIGlmICdp c19wYXJ0aXRpb25lZCcgaW4gZGF0YSBhbmQgZGF0YVsnaXNfcGFydGl0aW9uZWQnXToKKyAgICAg ICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5wYXJ0aXRpb25fdGVt cGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J25vZGVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2lkPXNj aWQsIHRpZD10aWQpCisgICAgICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0 ZV8yZGFycmF5KFNRTCkKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAg ICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQorCisgICAgICAg ICAgICBzcWxfaGVhZGVyID0gdSJcbi0tIFBhcnRpdGlvbnMgU1FMIgorICAgICAgICAgICAgcGFy dGl0aW9uX3NxbCA9ICcnCisgICAgICAgICAgICBmb3Igcm93IGluIHJzZXRbJ3Jvd3MnXToKKyAg ICAgICAgICAgICAgICBwYXJ0X2RhdGEgPSBkaWN0KCkKKyAgICAgICAgICAgICAgICBwYXJ0X2Rh dGFbJ3BhcnRpdGlvbmVkX3RhYmxlX25hbWUnXSA9IGRhdGFbJ25hbWUnXQorICAgICAgICAgICAg ICAgIHBhcnRfZGF0YVsncGFyZW50X3NjaGVtYSddID0gZGF0YVsnc2NoZW1hJ10KKyAgICAgICAg ICAgICAgICBwYXJ0X2RhdGFbJ3NjaGVtYSddID0gcm93WydzY2hlbWFfbmFtZSddCisgICAgICAg ICAgICAgICAgcGFydF9kYXRhWydyZWxpc3BhcnRpdGlvbiddID0gVHJ1ZQorICAgICAgICAgICAg ICAgIHBhcnRfZGF0YVsnbmFtZSddID0gcm93WyduYW1lJ10KKyAgICAgICAgICAgICAgICBwYXJ0 X2RhdGFbJ3BhcnRpdGlvbl92YWx1ZSddID0gcm93WydwYXJ0aXRpb25fdmFsdWUnXQorICAgICAg ICAgICAgICAgIHBhcnRfZGF0YVsnaXNfcGFydGl0aW9uZWQnXSA9IHJvdyBbJ2lzX3BhcnRpdGlv bmVkJ10KKyAgICAgICAgICAgICAgICBwYXJ0X2RhdGFbJ3BhcnRpdGlvbl9zY2hlbWUnXSA9IHJv d1sncGFydGl0aW9uX3NjaGVtZSddCisKKyAgICAgICAgICAgICAgICBwYXJ0aXRpb25fc3FsICs9 IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKKyAgICAgICAgICAgICAgICAgICAgW3NlbGYucGFy dGl0aW9uX3RlbXBsYXRlX3BhdGgsICdjcmVhdGUuc3FsJ10pLAorICAgICAgICAgICAgICAgICAg ICBkYXRhPXBhcnRfZGF0YSwgY29ubj1zZWxmLmNvbm4pCisKKyAgICAgICAgICAgICMgQWRkIGlu dG8gbWFpbiBzcWwKKyAgICAgICAgICAgIHBhcnRpdGlvbl9zcWwgPSByZS5zdWIoJ1xuezIsfScs ICdcblxuJywgcGFydGl0aW9uX3NxbCkKKyAgICAgICAgICAgIG1haW5fc3FsLmFwcGVuZChzcWxf aGVhZGVyICsgJ1xuXG4nICsgcGFydGl0aW9uX3NxbC5zdHJpcCgnXG4nKSkKKworICAgICAgICBz cWwgPSAnXG4nLmpvaW4obWFpbl9zcWwpCisKKyAgICAgICAgcmV0dXJuIGFqYXhfcmVzcG9uc2Uo cmVzcG9uc2U9c3FsLnN0cmlwKCdcbicpKQorCisgICAgZGVmIHJlc2V0X3N0YXRpc3RpY3Moc2Vs Ziwgc2NpZCwgdGlkKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBy ZXNldCBzdGF0aXN0aWNzIG9mIHRhYmxlCisKKyAgICAgICAgIEFyZ3M6CisgICAgICAgICAgIHNj aWQ6IFNjaGVtYSBJRAorICAgICAgICAgICB0aWQ6IFRhYmxlIElECisgICAgICAgICIiIgorICAg ICAgICB0cnk6CisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3Nl bGYudGFibGVfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ3Jlc2V0X3N0YXRzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0aWQ9dGlkKQorICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4u ZXhlY3V0ZV9zY2FsYXIoU1FMKQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAg ICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKworICAg ICAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAgICAgICAgICAgICBzdWNj ZXNzPTEsCisgICAgICAgICAgICAgICAgaW5mbz1nZXR0ZXh0KCJUYWJsZSBzdGF0aXN0aWNzIGhh dmUgYmVlbiByZXNldCIpLAorICAgICAgICAgICAgICAgIGRhdGE9eworICAgICAgICAgICAgICAg ICAgICAnaWQnOiB0aWQsCisgICAgICAgICAgICAgICAgICAgICdzY2lkJzogc2NpZAorICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICkKKworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFz IGU6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0 cihlKSkKKworICAgIGRlZiBnZXRfcGFydGl0aW9uX3NjaGVtZShzZWxmLCBkYXRhKToKKyAgICAg ICAgcGFydGl0aW9uX3NjaGVtZSA9IE5vbmUKKyAgICAgICAgaWYgJ3BhcnRpdGlvbl90eXBlJyBp biBkYXRhIFwKKyAgICAgICAgICAgICAgICBhbmQgZGF0YVsncGFydGl0aW9uX3R5cGUnXSA9PSAn cmFuZ2UnOgorICAgICAgICAgICAgcGFydGl0aW9uX3NjaGVtZSA9ICdSQU5HRSAoJworICAgICAg ICBlbGlmICdwYXJ0aXRpb25fdHlwZScgaW4gZGF0YSBcCisgICAgICAgICAgICAgICAgYW5kIGRh dGFbJ3BhcnRpdGlvbl90eXBlJ10gPT0gJ2xpc3QnOgorICAgICAgICAgICAgcGFydGl0aW9uX3Nj aGVtZSA9ICdMSVNUICgnCisKKyAgICAgICAgZm9yIHJvdyBpbiBkYXRhWydwYXJ0aXRpb25fa2V5 cyddOgorICAgICAgICAgICAgaWYgcm93WydrZXlfdHlwZSddID09ICdjb2x1bW4nOgorICAgICAg ICAgICAgICAgIHBhcnRpdGlvbl9zY2hlbWUgKz0gc2VsZi5xdElkZW50KAorICAgICAgICAgICAg ICAgICAgICBzZWxmLmNvbm4sIHJvd1sncHRfY29sdW1uJ10pICsgJywgJworICAgICAgICAgICAg ZWxpZiByb3dbJ2tleV90eXBlJ10gPT0gJ2V4cHJlc3Npb24nOgorICAgICAgICAgICAgICAgIHBh cnRpdGlvbl9zY2hlbWUgKz0gcm93WydleHByZXNzaW9uJ10gKyAnLCAnCisKKyAgICAgICAgIyBS ZW1vdmUgZXh0cmEgc3BhY2UgYW5kIGNvbW1hCisgICAgICAgIGlmIGxlbihkYXRhWydwYXJ0aXRp b25fa2V5cyddKSA+IDA6CisgICAgICAgICAgICBwYXJ0aXRpb25fc2NoZW1lID0gcGFydGl0aW9u X3NjaGVtZVs6LTJdCisgICAgICAgIHBhcnRpdGlvbl9zY2hlbWUgKz0gJyknCisKKyAgICAgICAg cmV0dXJuIHBhcnRpdGlvbl9zY2hlbWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgdmFs aWRhdGVfY29uc3RyYWlucyhrZXksIGRhdGEpOgorCisgICAgICAgIGlmIGtleSA9PSAncHJpbWFy eV9rZXknIG9yIGtleSA9PSAndW5pcXVlX2NvbnN0cmFpbnQnOgorICAgICAgICAgICAgaWYgJ2Nv bHVtbnMnIGluIGRhdGEgYW5kIGxlbihkYXRhWydjb2x1bW5zJ10pID4gMDoKKyAgICAgICAgICAg ICAgICByZXR1cm4gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1 cm4gRmFsc2UKKyAgICAgICAgZWxpZiBrZXkgPT0gJ2ZvcmVpZ25fa2V5JzoKKyAgICAgICAgICAg IGlmICdvaWQnIG5vdCBpbiBkYXRhOgorICAgICAgICAgICAgICAgIGZvciBhcmcgaW4gWydjb2x1 bW5zJ106CisgICAgICAgICAgICAgICAgICAgIGlmIGFyZyBub3QgaW4gZGF0YToKKyAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICAgICAgICAgICAgICBlbGlmIGlz aW5zdGFuY2UoZGF0YVthcmddLCBsaXN0KSBhbmQgbGVuKGRhdGFbYXJnXSkgPCAxOgorICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgICAgICAgICBpZiAnYXV0 b2luZGV4JyBpbiBkYXRhIGFuZCBkYXRhWydhdXRvaW5kZXgnXSBhbmQgXAorICAgICAgICAgICAg ICAgICAgICAgICAgKCdjb3ZlcmluZ2luZGV4JyBub3QgaW4gZGF0YSBvcgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydjb3ZlcmluZ2luZGV4 J10gPT0gJycpOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICAg ICAgcmV0dXJuIFRydWUKKworICAgICAgICBlbGlmIGtleSA9PSAnY2hlY2tfY29uc3RyYWludCc6 CisgICAgICAgICAgICBmb3IgYXJnIGluIFsnY29uc3JjJ106CisgICAgICAgICAgICAgICAgaWYg YXJnIG5vdCBpbiBkYXRhIG9yIGRhdGFbYXJnXSA9PSAnJzoKKyAgICAgICAgICAgICAgICAgICAg cmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgICAgIGVsaWYga2V5 ID09ICdleGNsdWRlX2NvbnN0cmFpbnQnOgorICAgICAgICAgICAgcGFzcworCisgICAgICAgIHJl dHVybiBUcnVlCisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNoZWNrX2FuZF9jb252ZXJ0 X25hbWVfdG9fc3RyaW5nKGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlv biB3aWxsIGNoZWNrIGFuZCBjb3ZlcnQgdGFibGUgdG8gc3RyaW5nIGluY2FzZQorICAgICAgICBp dCBpcyBudW1lcmljCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIGRhdGE6IGRhdGEgZGlj dAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBVcGRhdGVkIGRhdGEgZGljdAorICAg ICAgICAiIiIKKyAgICAgICAgIyBGb3IgUHl0aG9uMiwgaXQgY2FuIGJlIGludCwgbG9uZywgZmxv YXQKKyAgICAgICAgaWYgaGFzYXR0cihzdHIsICdkZWNvZGUnKToKKyAgICAgICAgICAgIGlmIGlz aW5zdGFuY2UoZGF0YVsnbmFtZSddLCAoaW50LCBsb25nLCBmbG9hdCkpOgorICAgICAgICAgICAg ICAgIGRhdGFbJ25hbWUnXSA9IHN0cihkYXRhWyduYW1lJ10pCisgICAgICAgIGVsc2U6CisgICAg ICAgICAgICAjIEZvciBQeXRob24zLCBpdCBjYW4gYmUgaW50LCBmbG9hdAorICAgICAgICAgICAg aWYgaXNpbnN0YW5jZShkYXRhWyduYW1lJ10sIChpbnQsIGZsb2F0KSk6CisgICAgICAgICAgICAg ICAgZGF0YVsnbmFtZSddID0gc3RyKGRhdGFbJ25hbWUnXSkKKyAgICAgICAgcmV0dXJuIGRhdGEK KworICAgIGRlZiBnZXRfaW5kZXhfY29uc3RyYWludF9zcWwoc2VsZiwgZGlkLCB0aWQsIGRhdGEp OgorICAgICAgICAiIiIKKyAgICAgICAgIEFyZ3M6CisgICAgICAgICAgIHRpZDogVGFibGUgSUQK KyAgICAgICAgICAgZGF0YTogZGF0YSBkaWN0IGNvbWluZyBmcm9tIHRoZSBjbGllbnQKKworICAg ICAgICBSZXR1cm5zOgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2VuZXJhdGUgbW9kaWZp ZWQgc3FsIGZvciBpbmRleCBjb25zdHJhaW50cworICAgICAgICAoUHJpbWFyeSBLZXkgJiBVbmlx dWUpCisgICAgICAgICIiIgorICAgICAgICBzcWwgPSBbXQorICAgICAgICAjIFdlIHdpbGwgZmV0 Y2ggYWxsIHRoZSBpbmRleCBjb25zdHJhaW50cyBmb3IgdGhlIHRhYmxlCisgICAgICAgIGluZGV4 X2NvbnN0cmFpbnRzID0geworICAgICAgICAgICAgJ3AnOiAncHJpbWFyeV9rZXknLCAndSc6ICd1 bmlxdWVfY29uc3RyYWludCcKKyAgICAgICAgfQorCisgICAgICAgIGZvciBjdHlwZSBpbiBpbmRl eF9jb25zdHJhaW50cy5rZXlzKCk6CisgICAgICAgICAgICAjIENoZWNrIGlmIGNvbnN0cmFpbnQg aXMgaW4gZGF0YQorICAgICAgICAgICAgIyBJZiB5ZXMgdGhlbiB3ZSBuZWVkIHRvIGNoZWNrIGZv ciBhZGQvY2hhbmdlL2RlbGV0ZQorICAgICAgICAgICAgaWYgaW5kZXhfY29uc3RyYWludHNbY3R5 cGVdIGluIGRhdGE6CisgICAgICAgICAgICAgICAgY29uc3RyYWludCA9IGRhdGFbaW5kZXhfY29u c3RyYWludHNbY3R5cGVdXQorICAgICAgICAgICAgICAgICMgSWYgY29uc3RyYWludChzKSBpcy9h cmUgZGVsZXRlZAorICAgICAgICAgICAgICAgIGlmICdkZWxldGVkJyBpbiBjb25zdHJhaW50Ogor ICAgICAgICAgICAgICAgICAgICBmb3IgYyBpbiBjb25zdHJhaW50WydkZWxldGVkJ106CisgICAg ICAgICAgICAgICAgICAgICAgICBjWydzY2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCisgICAgICAg ICAgICAgICAgICAgICAgICBjWyd0YWJsZSddID0gZGF0YVsnbmFtZSddCisKKyAgICAgICAgICAg ICAgICAgICAgICAgICMgU3FsIGZvciBkcm9wCisgICAgICAgICAgICAgICAgICAgICAgICBzcWwu YXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgiLyIu am9pbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYuaW5kZXhfY29uc3Ry YWludF90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rl bGV0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9YywgY29u bj1zZWxmLmNvbm4pLnN0cmlwKCdcbicpCisgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAg ICAgICAgICAgICAgICBpZiAnY2hhbmdlZCcgaW4gY29uc3RyYWludDoKKyAgICAgICAgICAgICAg ICAgICAgZm9yIGMgaW4gY29uc3RyYWludFsnY2hhbmdlZCddOgorICAgICAgICAgICAgICAgICAg ICAgICAgY1snc2NoZW1hJ10gPSBkYXRhWydzY2hlbWEnXQorICAgICAgICAgICAgICAgICAgICAg ICAgY1sndGFibGUnXSA9IGRhdGFbJ25hbWUnXQorCisgICAgICAgICAgICAgICAgICAgICAgICBw cm9wZXJ0aWVzX3NxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBbc2VsZi5pbmRleF9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsICdwcm9w ZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWQ9ZGlkLCB0aWQ9 dGlkLCBjaWQ9Y1snb2lkJ10sIGNvbnN0cmFpbnRfdHlwZT1jdHlwZSkKKyAgICAgICAgICAgICAg ICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChwcm9wZXJ0aWVz X3NxbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1y ZXMpCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9kYXRhID0gcmVzWydyb3dzJ11bMF0K KyAgICAgICAgICAgICAgICAgICAgICAgICMgU3FsIHRvIHVwZGF0ZSBvYmplY3QKKyAgICAgICAg ICAgICAgICAgICAgICAgIHNxbC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg cmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2VsZi5pbmRleF9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICd1cGRhdGUuc3FsJ10pLCBkYXRhPWMsIG9fZGF0YT1vbGRfZGF0YSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubj1zZWxmLmNvbm4pLnN0cmlwKCdc bicpCisgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAgICAgICAgICAgICAgICBpZiAnYWRk ZWQnIGluIGNvbnN0cmFpbnQ6CisgICAgICAgICAgICAgICAgICAgIGZvciBjIGluIGNvbnN0cmFp bnRbJ2FkZGVkJ106CisgICAgICAgICAgICAgICAgICAgICAgICBjWydzY2hlbWEnXSA9IGRhdGFb J3NjaGVtYSddCisgICAgICAgICAgICAgICAgICAgICAgICBjWyd0YWJsZSddID0gZGF0YVsnbmFt ZSddCisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgU3FsIHRvIGFkZCBvYmplY3QKKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmIHNlbGYudmFsaWRhdGVfY29uc3RyYWlucyhpbmRleF9jb25z dHJhaW50c1tjdHlwZV0sIGMpOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbC5hcHBl bmQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLmluZGV4X2Nv bnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnY3JlYXRlLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRhdGE9YywgY29ubj1zZWxmLmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdHJhaW50X25hbWU9J1BSSU1BUlkgS0VZJworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgY3R5cGUgPT0gJ3AnIGVsc2UgJ1VOSVFVRScKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKS5zdHJpcCgnXG4nKQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3FsLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ2V0dGV4dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICct LSBkZWZpbml0aW9uIGluY29tcGxldGUgZm9yIHswfSBjb25zdHJhaW50Jy5mb3JtYXQoaW5kZXhf Y29uc3RyYWludHNbY3R5cGVdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICBpZiBsZW4oc3FsKSA+IDA6Cisg ICAgICAgICAgICAjIEpvaW4gYWxsIHRoZSBzcWwocykgYXMgc2luZ2xlIHN0cmluZworICAgICAg ICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNxbCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAg IHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0X2ZvcmVpZ25fa2V5X3NxbChzZWxmLCB0aWQsIGRh dGEpOgorICAgICAgICAiIiIKKyAgICAgICAgIEFyZ3M6CisgICAgICAgICAgIHRpZDogVGFibGUg SUQKKyAgICAgICAgICAgZGF0YTogZGF0YSBkaWN0IGNvbWluZyBmcm9tIHRoZSBjbGllbnQKKwor ICAgICAgICBSZXR1cm5zOgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2VuZXJhdGUgbW9k aWZpZWQgc3FsIGZvciBmb3JlaWduIGtleQorICAgICAgICAiIiIKKyAgICAgICAgc3FsID0gW10K KyAgICAgICAgIyBDaGVjayBpZiBjb25zdHJhaW50IGlzIGluIGRhdGEKKyAgICAgICAgIyBJZiB5 ZXMgdGhlbiB3ZSBuZWVkIHRvIGNoZWNrIGZvciBhZGQvY2hhbmdlL2RlbGV0ZQorICAgICAgICBp ZiAnZm9yZWlnbl9rZXknIGluIGRhdGE6CisgICAgICAgICAgICBjb25zdHJhaW50ID0gZGF0YVsn Zm9yZWlnbl9rZXknXQorICAgICAgICAgICAgIyBJZiBjb25zdHJhaW50KHMpIGlzL2FyZSBkZWxl dGVkCisgICAgICAgICAgICBpZiAnZGVsZXRlZCcgaW4gY29uc3RyYWludDoKKyAgICAgICAgICAg ICAgICBmb3IgYyBpbiBjb25zdHJhaW50WydkZWxldGVkJ106CisgICAgICAgICAgICAgICAgICAg IGNbJ3NjaGVtYSddID0gZGF0YVsnc2NoZW1hJ10KKyAgICAgICAgICAgICAgICAgICAgY1sndGFi bGUnXSA9IGRhdGFbJ25hbWUnXQorCisgICAgICAgICAgICAgICAgICAgICMgU3FsIGZvciBkcm9w CisgICAgICAgICAgICAgICAgICAgIHNxbC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAg ICByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg W3NlbGYuZm9yZWlnbl9rZXlfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1j LCBjb25uPXNlbGYuY29ubikuc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgKQorCisg ICAgICAgICAgICBpZiAnY2hhbmdlZCcgaW4gY29uc3RyYWludDoKKyAgICAgICAgICAgICAgICBm b3IgYyBpbiBjb25zdHJhaW50WydjaGFuZ2VkJ106CisgICAgICAgICAgICAgICAgICAgIGNbJ3Nj aGVtYSddID0gZGF0YVsnc2NoZW1hJ10KKyAgICAgICAgICAgICAgICAgICAgY1sndGFibGUnXSA9 IGRhdGFbJ25hbWUnXQorCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNfc3FsID0gcmVu ZGVyX3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYuZm9y ZWlnbl9rZXlfdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAg ICAgICAgICAgICAgdGlkPXRpZCwgY2lkPWNbJ29pZCddKQorICAgICAgICAgICAgICAgICAgICBz dGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QocHJvcGVydGllc19zcWwpCisgICAg ICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgICAgICAgICBy ZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKworICAgICAgICAgICAg ICAgICAgICBvbGRfZGF0YSA9IHJlc1sncm93cyddWzBdCisgICAgICAgICAgICAgICAgICAgICMg U3FsIHRvIHVwZGF0ZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgc3FsLmFwcGVuZCgKKyAg ICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2VsZi5mb3JlaWduX2tleV90ZW1wbGF0ZV9wYXRoLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICd1cGRhdGUuc3FsJ10pLCBkYXRhPWMsIG9fZGF0YT1v bGRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uPXNlbGYuY29ubikuc3Ry aXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICAgICAgICAgIGlm IG5vdCBzZWxmLnZhbGlkYXRlX2NvbnN0cmFpbnMoJ2ZvcmVpZ25fa2V5JywgYyk6CisgICAgICAg ICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdldHRleHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLSBkZWZpbml0aW9u IGluY29tcGxldGUgZm9yIGZvcmVpZ25fa2V5IGNvbnN0cmFpbnQnCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNxbCkKKworICAgICAgICAgICAgICAgICAgICBp ZiAnY29sdW1ucycgaW4gYzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHMgPSBbXQorICAg ICAgICAgICAgICAgICAgICAgICAgZm9yIGNvbCBpbiBjWydjb2x1bW5zJ106CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29scy5hcHBlbmQoY29sWydsb2NhbF9jb2x1bW4nXSkKKworICAg ICAgICAgICAgICAgICAgICAgICAgY292ZXJpbmdpbmRleCA9IHNlbGYuc2VhcmNoX2NvdmVyaW5n aW5kZXgodGlkLCBjb2xzKQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb3ZlcmluZ2lu ZGV4IGlzIE5vbmUgYW5kICdhdXRvaW5kZXgnIGluIGMgYW5kIGNbJ2F1dG9pbmRleCddIGFuZCBc CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgnY292ZXJpbmdpbmRleCcgaW4gYyBh bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1snY292ZXJpbmdp bmRleCddICE9ICcnKToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKHJl bmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi8iLmpvaW4o W3NlbGYuZm9yZWlnbl9rZXlfdGVtcGxhdGVfcGF0aCwgJ2NyZWF0ZV9pbmRleC5zcWwnXSksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9YywgY29ubj1zZWxmLmNvbm4pLnN0 cmlwKCdcbicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisKKyAg ICAgICAgICAgIGlmICdhZGRlZCcgaW4gY29uc3RyYWludDoKKyAgICAgICAgICAgICAgICBmb3Ig YyBpbiBjb25zdHJhaW50WydhZGRlZCddOgorICAgICAgICAgICAgICAgICAgICBjWydzY2hlbWEn XSA9IGRhdGFbJ3NjaGVtYSddCisgICAgICAgICAgICAgICAgICAgIGNbJ3RhYmxlJ10gPSBkYXRh WyduYW1lJ10KKworICAgICAgICAgICAgICAgICAgICAjIFNxbCB0byBhZGQgb2JqZWN0CisgICAg ICAgICAgICAgICAgICAgICMgQ29sdW1ucworCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBz ZWxmLnZhbGlkYXRlX2NvbnN0cmFpbnMoJ2ZvcmVpZ25fa2V5JywgYyk6CisgICAgICAgICAgICAg ICAgICAgICAgICBzcWwuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRl eHQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLSBkZWZpbml0aW9uIGluY29t cGxldGUgZm9yIGZvcmVpZ25fa2V5IGNvbnN0cmFpbnQnCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKQorICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuICdcblxuJy5qb2luKHNxbCkKKworICAgICAgICAgICAgICAgICAgICBTUUwgPSBy ZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuZm9yZWlnbl9rZXlfdGVtcGxhdGVfcGF0aCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0 X3BhcmVudC5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0aWQ9Y1snY29sdW1ucyddWzBdWydyZWZlcmVuY2VzJ10pCisgICAgICAgICAgICAgICAgICAg IHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQorICAgICAgICAg ICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQorCisgICAgICAgICAgICAgICAg ICAgIGNbJ3JlbW90ZV9zY2hlbWEnXSA9IHJzZXRbJ3Jvd3MnXVswXVsnc2NoZW1hJ10KKyAgICAg ICAgICAgICAgICAgICAgY1sncmVtb3RlX3RhYmxlJ10gPSByc2V0Wydyb3dzJ11bMF1bJ3RhYmxl J10KKworICAgICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKAorICAgICAgICAgICAgICAgICAg ICAgICAgcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIi5q b2luKFtzZWxmLmZvcmVpZ25fa2V5X3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICdjcmVhdGUuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRhdGE9YywgY29ubj1zZWxmLmNvbm4KKyAgICAgICAgICAgICAgICAgICAgICAgICku c3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICAgICAgICAg IGlmIGNbJ2F1dG9pbmRleCddOgorICAgICAgICAgICAgICAgICAgICAgICAgc3FsLmFwcGVuZCgK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLmZvcmVpZ25fa2V5X3RlbXBsYXRl X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3JlYXRl X2luZGV4LnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1jLCBj b25uPXNlbGYuY29ubikuc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgICAgICkKKwor ICAgICAgICBpZiBsZW4oc3FsKSA+IDA6CisgICAgICAgICAgICAjIEpvaW4gYWxsIHRoZSBzcWwo cykgYXMgc2luZ2xlIHN0cmluZworICAgICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNxbCkK KyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0X2No ZWNrX2NvbnN0cmFpbnRfc3FsKHNlbGYsIHRpZCwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAg ICAgQXJnczoKKyAgICAgICAgICAgdGlkOiBUYWJsZSBJRAorICAgICAgICAgICBkYXRhOiBkYXRh IGRpY3QgY29taW5nIGZyb20gdGhlIGNsaWVudAorCisgICAgICAgIFJldHVybnM6CisgICAgICAg ICAgVGhpcyBmdW5jdGlvbiB3aWxsIGdlbmVyYXRlIG1vZGlmaWVkIHNxbCBmb3IgY2hlY2sgY29u c3RyYWludAorICAgICAgICAiIiIKKyAgICAgICAgc3FsID0gW10KKyAgICAgICAgIyBDaGVjayBp ZiBjb25zdHJhaW50IGlzIGluIGRhdGEKKyAgICAgICAgIyBJZiB5ZXMgdGhlbiB3ZSBuZWVkIHRv IGNoZWNrIGZvciBhZGQvY2hhbmdlL2RlbGV0ZQorICAgICAgICBpZiAnY2hlY2tfY29uc3RyYWlu dCcgaW4gZGF0YToKKyAgICAgICAgICAgIGNvbnN0cmFpbnQgPSBkYXRhWydjaGVja19jb25zdHJh aW50J10KKyAgICAgICAgICAgICMgSWYgY29uc3RyYWludChzKSBpcy9hcmUgZGVsZXRlZAorICAg ICAgICAgICAgaWYgJ2RlbGV0ZWQnIGluIGNvbnN0cmFpbnQ6CisgICAgICAgICAgICAgICAgZm9y IGMgaW4gY29uc3RyYWludFsnZGVsZXRlZCddOgorICAgICAgICAgICAgICAgICAgICBjWydzY2hl bWEnXSA9IGRhdGFbJ3NjaGVtYSddCisgICAgICAgICAgICAgICAgICAgIGNbJ3RhYmxlJ10gPSBk YXRhWyduYW1lJ10KKworICAgICAgICAgICAgICAgICAgICAjIFNxbCBmb3IgZHJvcAorICAgICAg ICAgICAgICAgICAgICBzcWwuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVy X3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxmLmNo ZWNrX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1jLCBj b25uPXNlbGYuY29ubikuc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAg ICAgICAgICBpZiAnY2hhbmdlZCcgaW4gY29uc3RyYWludDoKKyAgICAgICAgICAgICAgICBmb3Ig YyBpbiBjb25zdHJhaW50WydjaGFuZ2VkJ106CisgICAgICAgICAgICAgICAgICAgIGNbJ3NjaGVt YSddID0gZGF0YVsnc2NoZW1hJ10KKyAgICAgICAgICAgICAgICAgICAgY1sndGFibGUnXSA9IGRh dGFbJ25hbWUnXQorCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNfc3FsID0gcmVuZGVy X3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYuY2hlY2tf Y29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwnXSksCisgICAgICAgICAg ICAgICAgICAgICAgICB0aWQ9dGlkLCBjaWQ9Y1snb2lkJ10pCisgICAgICAgICAgICAgICAgICAg IHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChwcm9wZXJ0aWVzX3NxbCkKKyAg ICAgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorCisgICAgICAgICAg ICAgICAgICAgIG9sZF9kYXRhID0gcmVzWydyb3dzJ11bMF0KKyAgICAgICAgICAgICAgICAgICAg IyBTcWwgdG8gdXBkYXRlIG9iamVjdAorICAgICAgICAgICAgICAgICAgICBzcWwuYXBwZW5kKAor ICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNoZWNrX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0 aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXBkYXRlLnNxbCddKSwgZGF0YT1jLCBv X2RhdGE9b2xkX2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubj1zZWxmLmNv bm4pLnN0cmlwKCdcbicpCisgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICAgICAgaWYg J2FkZGVkJyBpbiBjb25zdHJhaW50OgorICAgICAgICAgICAgICAgIGZvciBjIGluIGNvbnN0cmFp bnRbJ2FkZGVkJ106CisgICAgICAgICAgICAgICAgICAgIGNbJ3NjaGVtYSddID0gZGF0YVsnc2No ZW1hJ10KKyAgICAgICAgICAgICAgICAgICAgY1sndGFibGUnXSA9IGRhdGFbJ25hbWUnXQorCisg ICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzZWxmLnZhbGlkYXRlX2NvbnN0cmFpbnMoJ2NoZWNr X2NvbnN0cmFpbnQnLCBjKToKKyAgICAgICAgICAgICAgICAgICAgICAgIHNxbC5hcHBlbmQoCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0dGV4dCgKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJy0tIGRlZmluaXRpb24gaW5jb21wbGV0ZSBmb3IgY2hlY2tfY29uc3RyYWlu dCcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAg ICApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xuXG4nLmpvaW4oc3FsKQorCisg ICAgICAgICAgICAgICAgICAgIHNxbC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICBy ZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3Nl bGYuY2hlY2tfY29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnY3JlYXRlLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkYXRhPWMsIGNvbm49c2VsZi5jb25uCisgICAgICAgICAgICAgICAgICAgICAgICApLnN0 cmlwKCdcbicpCisgICAgICAgICAgICAgICAgICAgICkKKworICAgICAgICBpZiBsZW4oc3FsKSA+ IDA6CisgICAgICAgICAgICAjIEpvaW4gYWxsIHRoZSBzcWwocykgYXMgc2luZ2xlIHN0cmluZwor ICAgICAgICAgICAgcmV0dXJuICdcblxuJy5qb2luKHNxbCkKKyAgICAgICAgZWxzZToKKyAgICAg ICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgZ2V0X2V4Y2x1c2lvbl9jb25zdHJhaW50X3Nx bChzZWxmLCBkaWQsIHRpZCwgZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICAgQXJnczoKKyAg ICAgICAgICAgdGlkOiBUYWJsZSBJRAorICAgICAgICAgICBkYXRhOiBkYXRhIGRpY3QgY29taW5n IGZyb20gdGhlIGNsaWVudAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgVGhpcyBmdW5j dGlvbiB3aWxsIGdlbmVyYXRlIG1vZGlmaWVkIHNxbCBmb3IgZXhjbHVzaW9uIGNvbnN0cmFpbnQK KyAgICAgICAgIiIiCisgICAgICAgIHNxbCA9IFtdCisgICAgICAgICMgQ2hlY2sgaWYgY29uc3Ry YWludCBpcyBpbiBkYXRhCisgICAgICAgICMgSWYgeWVzIHRoZW4gd2UgbmVlZCB0byBjaGVjayBm b3IgYWRkL2NoYW5nZS9kZWxldGUKKyAgICAgICAgaWYgJ2V4Y2x1ZGVfY29uc3RyYWludCcgaW4g ZGF0YToKKyAgICAgICAgICAgIGNvbnN0cmFpbnQgPSBkYXRhWydleGNsdWRlX2NvbnN0cmFpbnQn XQorICAgICAgICAgICAgIyBJZiBjb25zdHJhaW50KHMpIGlzL2FyZSBkZWxldGVkCisgICAgICAg ICAgICBpZiAnZGVsZXRlZCcgaW4gY29uc3RyYWludDoKKyAgICAgICAgICAgICAgICBmb3IgYyBp biBjb25zdHJhaW50WydkZWxldGVkJ106CisgICAgICAgICAgICAgICAgICAgIGNbJ3NjaGVtYSdd ID0gZGF0YVsnc2NoZW1hJ10KKyAgICAgICAgICAgICAgICAgICAgY1sndGFibGUnXSA9IGRhdGFb J25hbWUnXQorCisgICAgICAgICAgICAgICAgICAgICMgU3FsIGZvciBkcm9wCisgICAgICAgICAg ICAgICAgICAgIHNxbC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfdGVt cGxhdGUoIi8iLmpvaW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYuZXhjbHVz aW9uX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1jLCBj b25uPXNlbGYuY29ubikuc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgKQorCisgICAg ICAgICAgICBpZiAnY2hhbmdlZCcgaW4gY29uc3RyYWludDoKKyAgICAgICAgICAgICAgICBmb3Ig YyBpbiBjb25zdHJhaW50WydjaGFuZ2VkJ106CisgICAgICAgICAgICAgICAgICAgIGNbJ3NjaGVt YSddID0gZGF0YVsnc2NoZW1hJ10KKyAgICAgICAgICAgICAgICAgICAgY1sndGFibGUnXSA9IGRh dGFbJ25hbWUnXQorCisgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXNfc3FsID0gcmVuZGVy X3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYuZXhjbHVz aW9uX2NvbnN0cmFpbnRfdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAg ICAgICAgICAgICAgICAgICAgZGlkPWRpZCwgdGlkPXRpZCwgY2lkPWNbJ29pZCddKQorICAgICAg ICAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QocHJvcGVy dGllc19zcWwpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAg ICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykK KworICAgICAgICAgICAgICAgICAgICBvbGRfZGF0YSA9IHJlc1sncm93cyddWzBdCisgICAgICAg ICAgICAgICAgICAgICMgU3FsIHRvIHVwZGF0ZSBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAg c3FsLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgiLyIu am9pbihbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5leGNsdXNpb25fY29uc3Ry YWludF90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cGRhdGUu c3FsJ10pLCBkYXRhPWMsIG9fZGF0YT1vbGRfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25uPXNlbGYuY29ubikuc3RyaXAoJ1xuJykKKyAgICAgICAgICAgICAgICAgICAgKQor CisgICAgICAgICAgICBpZiAnYWRkZWQnIGluIGNvbnN0cmFpbnQ6CisgICAgICAgICAgICAgICAg Zm9yIGMgaW4gY29uc3RyYWludFsnYWRkZWQnXToKKyAgICAgICAgICAgICAgICAgICAgY1snc2No ZW1hJ10gPSBkYXRhWydzY2hlbWEnXQorICAgICAgICAgICAgICAgICAgICBjWyd0YWJsZSddID0g ZGF0YVsnbmFtZSddCisKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHNlbGYudmFsaWRhdGVf Y29uc3RyYWlucygnZXhjbHVkZV9jb25zdHJhaW50JywgYyk6CisgICAgICAgICAgICAgICAgICAg ICAgICBzcWwuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHRleHQoCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLSBkZWZpbml0aW9uIGluY29tcGxldGUg Zm9yIGV4Y2x1c2lvbl9jb25zdHJhaW50JworICAgICAgICAgICAgICAgICAgICAgICAgICAgICkK KyAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biAnXG5cbicuam9pbihzcWwpCisKKyAgICAgICAgICAgICAgICAgICAgc3FsLmFwcGVuZCgKKyAg ICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiLyIuam9pbihbc2VsZi5leGNsdXNpb25fY29uc3RyYWludF90ZW1wbGF0ZV9w YXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3JlYXRlLnNxbCdd KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWMsIGNvbm49c2VsZi5jb25uCisg ICAgICAgICAgICAgICAgICAgICAgICApLnN0cmlwKCdcbicpCisgICAgICAgICAgICAgICAgICAg ICkKKworICAgICAgICBpZiBsZW4oc3FsKSA+IDA6CisgICAgICAgICAgICAjIEpvaW4gYWxsIHRo ZSBzcWwocykgYXMgc2luZ2xlIHN0cmluZworICAgICAgICAgICAgcmV0dXJuIHUnXG5cbicuam9p bihzcWwpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVm IGdldF9zcWwoc2VsZiwgZGlkLCBzY2lkLCB0aWQsIGRhdGEsIHJlcyk6CisgICAgICAgICIiIgor ICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2VuZXJhdGUgY3JlYXRlL3VwZGF0ZSBzcWwgZnJv bSBtb2RlbCBkYXRhCisgICAgICAgIGNvbWluZyBmcm9tIGNsaWVudAorICAgICAgICAiIiIKKyAg ICAgICAgaWYgdGlkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgb2xkX2RhdGEgPSByZXNbJ3Jv d3MnXVswXQorICAgICAgICAgICAgb2xkX2RhdGEgPSBzZWxmLl9mb3JtYXR0ZXIoZGlkLCBzY2lk LCB0aWQsIG9sZF9kYXRhKQorCisgICAgICAgICAgICAjIFdlIHdpbGwgY29udmVydCBwcml2aWxl Z2VzIGNvbWluZyBmcm9tIGNsaWVudCByZXF1aXJlZAorICAgICAgICAgICAgaWYgJ3JlbGFjbCcg aW4gZGF0YToKKyAgICAgICAgICAgICAgICBmb3IgbW9kZSBpbiBbJ2FkZGVkJywgJ2NoYW5nZWQn LCAnZGVsZXRlZCddOgorICAgICAgICAgICAgICAgICAgICBpZiBtb2RlIGluIGRhdGFbJ3JlbGFj bCddOgorICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVsncmVsYWNsJ11bbW9kZV0gPSBwYXJz ZV9wcml2X3RvX2RiKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbJ3JlbGFjbCdd W21vZGVdLCBzZWxmLmFjbAorICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAg ICAjIElmIG5hbWUgaXMgbm90IHByZXNlbnQgaW4gcmVxdWVzdCBkYXRhCisgICAgICAgICAgICBp ZiAnbmFtZScgbm90IGluIGRhdGE6CisgICAgICAgICAgICAgICAgZGF0YVsnbmFtZSddID0gb2xk X2RhdGFbJ25hbWUnXQorCisgICAgICAgICAgICBkYXRhID0gQmFzZVRhYmxlVmlldy5jaGVja19h bmRfY29udmVydF9uYW1lX3RvX3N0cmluZyhkYXRhKQorCisgICAgICAgICAgICAjIElmIG5hbWUg aWYgbm90IHByZXNlbnQKKyAgICAgICAgICAgIGlmICdzY2hlbWEnIG5vdCBpbiBkYXRhOgorICAg ICAgICAgICAgICAgIGRhdGFbJ3NjaGVtYSddID0gb2xkX2RhdGFbJ3NjaGVtYSddCisKKyAgICAg ICAgICAgICMgRmlsdGVyIG91dCBuZXcgdGFibGVzIGZyb20gbGlzdCwgd2Ugd2lsbCBzZW5kIGNv bXBsZXRlIGxpc3QKKyAgICAgICAgICAgICMgYW5kIG5vdCBuZXdseSBhZGRlZCB0YWJsZXMgaW4g dGhlIGxpc3QgZnJvbSBjbGllbnQKKyAgICAgICAgICAgICMgc28gd2Ugd2lsbCBmaWx0ZXIgbmV3 IHRhYmxlcyBoZXJlCisgICAgICAgICAgICBpZiAnY29sbF9pbmhlcml0cycgaW4gZGF0YToKKyAg ICAgICAgICAgICAgICBwX2xlbiA9IGxlbihvbGRfZGF0YVsnY29sbF9pbmhlcml0cyddKQorICAg ICAgICAgICAgICAgIGNfbGVuID0gbGVuKGRhdGFbJ2NvbGxfaW5oZXJpdHMnXSkKKyAgICAgICAg ICAgICAgICAjIElmIHRhYmxlKHMpIGFkZGVkCisgICAgICAgICAgICAgICAgaWYgY19sZW4gPiBw X2xlbjoKKyAgICAgICAgICAgICAgICAgICAgZGF0YVsnY29sbF9pbmhlcml0c19hZGRlZCddID0g bGlzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldChkYXRhWydjb2xsX2luaGVyaXRzJ10p IC0gc2V0KG9sZF9kYXRhWydjb2xsX2luaGVyaXRzJ10pCisgICAgICAgICAgICAgICAgICAgICkK KyAgICAgICAgICAgICAgICAjIElmIHRhYmxlKHMpcmVtb3ZlZAorICAgICAgICAgICAgICAgIGVs aWYgY19sZW4gPCBwX2xlbjoKKyAgICAgICAgICAgICAgICAgICAgZGF0YVsnY29sbF9pbmhlcml0 c19yZW1vdmVkJ10gPSBsaXN0KAorICAgICAgICAgICAgICAgICAgICAgICAgc2V0KG9sZF9kYXRh Wydjb2xsX2luaGVyaXRzJ10pIC0gc2V0KGRhdGFbJ2NvbGxfaW5oZXJpdHMnXSkKKyAgICAgICAg ICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgICMgU2FmZSBzaWRlIHZlcmlmaWNhdGlvbixJ biBjYXNlIGl0IGhhcHBlbnMuLgorICAgICAgICAgICAgICAgICMgSWYgdXNlciByZW1vdmVzIGFu ZCBhZGRzIHNhbWUgbnVtYmVyIG9mIHRhYmxlCisgICAgICAgICAgICAgICAgIyBlZyByZW1vdmVk IG9uZSB0YWJsZSBhbmQgYWRkZWQgb25lIG5ldyB0YWJsZQorICAgICAgICAgICAgICAgIGVsaWYg Y19sZW4gPT0gcF9sZW46CisgICAgICAgICAgICAgICAgICAgIGRhdGFbJ2NvbGxfaW5oZXJpdHNf YWRkZWQnXSA9IGxpc3QoCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQoZGF0YVsnY29sbF9p bmhlcml0cyddKSAtIHNldChvbGRfZGF0YVsnY29sbF9pbmhlcml0cyddKQorICAgICAgICAgICAg ICAgICAgICApCisgICAgICAgICAgICAgICAgICAgIGRhdGFbJ2NvbGxfaW5oZXJpdHNfcmVtb3Zl ZCddID0gbGlzdCgKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldChvbGRfZGF0YVsnY29sbF9p bmhlcml0cyddKSAtIHNldChkYXRhWydjb2xsX2luaGVyaXRzJ10pCisgICAgICAgICAgICAgICAg ICAgICkKKworICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxm LnRhYmxlX3RlbXBsYXRlX3BhdGgsICd1cGRhdGUuc3FsJ10pLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9fZGF0YT1vbGRfZGF0YSwgZGF0YT1kYXRhLCBjb25uPXNlbGYuY29u bikKKyAgICAgICAgICAgICMgUmVtb3ZlcyB0cmFpbmluZyBuZXcgbGluZXMKKyAgICAgICAgICAg IFNRTCA9IFNRTC5zdHJpcCgnXG4nKSArICdcblxuJworCisgICAgICAgICAgICAjIFBhcnNlL0Zv cm1hdCBjb2x1bW5zICYgY3JlYXRlIHNxbAorICAgICAgICAgICAgaWYgJ2NvbHVtbnMnIGluIGRh dGE6CisgICAgICAgICAgICAgICAgIyBQYXJzZSB0aGUgZGF0YSBjb21pbmcgZnJvbSBjbGllbnQK KyAgICAgICAgICAgICAgICBkYXRhID0gc2VsZi5fcGFyc2VfZm9ybWF0X2NvbHVtbnMoZGF0YSwg bW9kZT0nZWRpdCcpCisKKyAgICAgICAgICAgICAgICBjb2x1bW5zID0gZGF0YVsnY29sdW1ucydd CisgICAgICAgICAgICAgICAgY29sdW1uX3NxbCA9ICdcbicKKworICAgICAgICAgICAgICAgICMg SWYgY29sdW1uKHMpIGlzL2FyZSBkZWxldGVkCisgICAgICAgICAgICAgICAgaWYgJ2RlbGV0ZWQn IGluIGNvbHVtbnM6CisgICAgICAgICAgICAgICAgICAgIGZvciBjIGluIGNvbHVtbnNbJ2RlbGV0 ZWQnXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNbJ3NjaGVtYSddID0gZGF0YVsnc2NoZW1h J10KKyAgICAgICAgICAgICAgICAgICAgICAgIGNbJ3RhYmxlJ10gPSBkYXRhWyduYW1lJ10KKyAg ICAgICAgICAgICAgICAgICAgICAgICMgU3FsIGZvciBkcm9wIGNvbHVtbgorICAgICAgICAgICAg ICAgICAgICAgICAgaWYgJ2luaGVyaXRlZGZyb20nIG5vdCBpbiBjOgorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbHVtbl9zcWwgKz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZi5jb2x1bW5fdGVtcGxhdGVfcGF0aCwg J2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9Yywg Y29ubj1zZWxmLmNvbm4pLnN0cmlwKCdcbicpICsgJ1xuXG4nCisKKyAgICAgICAgICAgICAgICAj IElmIGNvbHVtbihzKSBpcy9hcmUgY2hhbmdlZAorICAgICAgICAgICAgICAgICMgSGVyZSB3ZSB3 aWxsIGJlIG5lZWRpbmcgcHJldmlvdXMgcHJvcGVydGllcyBvZiBjb2x1bW4KKyAgICAgICAgICAg ICAgICAjIHNvIHRoYXQgd2UgY2FuIGNvbXBhcmUgJiB1cGRhdGUgaXQKKyAgICAgICAgICAgICAg ICBpZiAnY2hhbmdlZCcgaW4gY29sdW1uczoKKyAgICAgICAgICAgICAgICAgICAgZm9yIGMgaW4g Y29sdW1uc1snY2hhbmdlZCddOgorICAgICAgICAgICAgICAgICAgICAgICAgY1snc2NoZW1hJ10g PSBkYXRhWydzY2hlbWEnXQorICAgICAgICAgICAgICAgICAgICAgICAgY1sndGFibGUnXSA9IGRh dGFbJ25hbWUnXQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ2F0dGFjbCcgaW4gYzoKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjWydhdHRhY2wnXSA9IHBhcnNlX3ByaXZfdG9fZGIo Y1snYXR0YWNsJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNlbGYuY29sdW1uX2FjbCkKKworICAgICAgICAgICAgICAgICAgICAg ICAgcHJvcGVydGllc19zcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuY29sdW1u X3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNsaWQ9Y1snYXR0bnVtJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzaG93X3N5c19vYmplY3RzPXNlbGYuYmx1ZXByaW50LnNob3df c3lzdGVtX29iamVjdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICkKKworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCByZXMg PSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KHByb3BlcnRpZXNfc3FsKQorICAgICAgICAgICAgICAg ICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKyAgICAgICAgICAgICAgICAg ICAgICAgIG9sZF9kYXRhID0gcmVzWydyb3dzJ11bMF0KKworICAgICAgICAgICAgICAgICAgICAg ICAgb2xkX2RhdGFbJ2NsdHlwZSddLCBvbGRfZGF0YVsnaGFzU3FyQnJhY2tldCddID0gc2VsZi5f Y2x0eXBlX2Zvcm1hdHRlcihvbGRfZGF0YVsnY2x0eXBlJ10pCisgICAgICAgICAgICAgICAgICAg ICAgICBvbGRfZGF0YSA9IEJhc2VUYWJsZVZpZXcuY29udmVydF9sZW5ndGhfcHJlY2lzaW9uX3Rv X3N0cmluZyhvbGRfZGF0YSkKKworICAgICAgICAgICAgICAgICAgICAgICAgZnVsbHR5cGUgPSBz ZWxmLmdldF9mdWxsX3R5cGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2RhdGFb J3R5cG5zcG5hbWUnXSwgb2xkX2RhdGFbJ3R5cG5hbWUnXSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBvbGRfZGF0YVsnaXNkdXAnXSwgb2xkX2RhdGFbJ2F0dG5kaW1zJ10sIG9sZF9kYXRh WydhdHR0eXBtb2QnXQorICAgICAgICAgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICAg ICAgICAgICAgICAjIElmIHdlIGhhdmUgbGVuZ3RoICYgcHJlY2lzaW9uIGJvdGgKKyAgICAgICAg ICAgICAgICAgICAgICAgIG1hdGNoT2JqID0gcmUuc2VhcmNoKHInKFxkKyksKFxkKyknLCBmdWxs dHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG1hdGNoT2JqOgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG9sZF9kYXRhWydhdHRsZW4nXSA9IGludChtYXRjaE9iai5ncm91cCgx KSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfZGF0YVsnYXR0cHJlY2lzaW9uJ10g PSBpbnQobWF0Y2hPYmouZ3JvdXAoMikpCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlOgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgSWYgd2UgaGF2ZSBsZW5ndGggb25seQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoT2JqID0gcmUuc2VhcmNoKHInKFxkKyknLCBm dWxsdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBtYXRjaE9iajoKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2RhdGFbJ2F0dGxlbiddID0gaW50KG1hdGNo T2JqLmdyb3VwKDEpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfZGF0YVsn YXR0cHJlY2lzaW9uJ10gPSBOb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2RhdGFbJ2F0dGxlbiddID0gTm9u ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfZGF0YVsnYXR0cHJlY2lzaW9u J10gPSBOb25lCisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9kYXRhWydjbHR5cGUnXSA9 IERhdGFUeXBlUmVhZGVyLnBhcnNlX3R5cGVfbmFtZShvbGRfZGF0YVsnY2x0eXBlJ10pCisKKyAg ICAgICAgICAgICAgICAgICAgICAgICMgU3FsIGZvciBhbHRlciBjb2x1bW4KKyAgICAgICAgICAg ICAgICAgICAgICAgIGlmICdpbmhlcml0ZWRmcm9tJyBub3QgaW4gYzoKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb2x1bW5fc3FsICs9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYuY29sdW1uX3RlbXBsYXRlX3BhdGgs ICd1cGRhdGUuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWMs IG9fZGF0YT1vbGRfZGF0YSwgY29ubj1zZWxmLmNvbm4pLnN0cmlwKCdcbicpICsgJ1xuXG4nCisK KyAgICAgICAgICAgICAgICAjIElmIGNvbHVtbihzKSBpcy9hcmUgYWRkZWQKKyAgICAgICAgICAg ICAgICBpZiAnYWRkZWQnIGluIGNvbHVtbnM6CisgICAgICAgICAgICAgICAgICAgIGZvciBjIGlu IGNvbHVtbnNbJ2FkZGVkJ106CisgICAgICAgICAgICAgICAgICAgICAgICBjWydzY2hlbWEnXSA9 IGRhdGFbJ3NjaGVtYSddCisgICAgICAgICAgICAgICAgICAgICAgICBjWyd0YWJsZSddID0gZGF0 YVsnbmFtZSddCisgICAgICAgICAgICAgICAgICAgICAgICAjIFNxbCBmb3IgY3JlYXRlIGNvbHVt bgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgJ2F0dGFjbCcgaW4gYzoKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjWydhdHRhY2wnXSA9IHBhcnNlX3ByaXZfdG9fZGIoY1snYXR0YWNs J10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNlbGYuY29sdW1uX2FjbCkKKworICAgICAgICAgICAgICAgICAgICAgICAgYyA9IEJh c2VUYWJsZVZpZXcuY29udmVydF9sZW5ndGhfcHJlY2lzaW9uX3RvX3N0cmluZyhjKQorCisgICAg ICAgICAgICAgICAgICAgICAgICBpZiAnaW5oZXJpdGVkZnJvbScgbm90IGluIGM6CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29sdW1uX3NxbCArPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpv aW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxmLmNvbHVtbl90ZW1wbGF0 ZV9wYXRoLCAnY3JlYXRlLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGF0YT1jLCBjb25uPXNlbGYuY29ubikuc3RyaXAoJ1xuJykgKyAnXG5cbicKKworICAgICAgICAg ICAgICAgICMgQ29tYmluZSBhbGwgdGhlIFNRTCB0b2dldGhlcgorICAgICAgICAgICAgICAgIFNR TCArPSBjb2x1bW5fc3FsLnN0cmlwKCdcbicpCisKKyAgICAgICAgICAgICMgQ2hlY2sgZm9yIHBh cnRpdGlvbnMKKyAgICAgICAgICAgIGlmICdwYXJ0aXRpb25zJyBpbiBkYXRhOgorICAgICAgICAg ICAgICAgIHBhcnRpdGlvbnMgPSBkYXRhWydwYXJ0aXRpb25zJ10KKyAgICAgICAgICAgICAgICBw YXJ0aXRpb25zX3NxbCA9ICdcbicKKworICAgICAgICAgICAgICAgICMgSWYgcGFydGl0aW9uKHMp IGlzL2FyZSBkZWxldGVkCisgICAgICAgICAgICAgICAgaWYgJ2RlbGV0ZWQnIGluIHBhcnRpdGlv bnM6CisgICAgICAgICAgICAgICAgICAgIGZvciByb3cgaW4gcGFydGl0aW9uc1snZGVsZXRlZCdd OgorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhID0gZGljdCgpCisgICAgICAgICAg ICAgICAgICAgICAgICBzY2hlbWFfbmFtZSwgdGFibGVfbmFtZSA9IFwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZWxmLmdldF9zY2hlbWFfYW5kX3RhYmxlX25hbWUocm93WydvaWQnXSkK KworICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhWydwYXJlbnRfc2NoZW1hJ10gPSBv bGRfZGF0YVsnc2NoZW1hJ10KKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfZGF0YVsncGFy dGl0aW9uZWRfdGFibGVfbmFtZSddID0gb2xkX2RhdGFbJ25hbWUnXQorICAgICAgICAgICAgICAg ICAgICAgICAgdGVtcF9kYXRhWydzY2hlbWEnXSA9IHNjaGVtYV9uYW1lCisgICAgICAgICAgICAg ICAgICAgICAgICB0ZW1wX2RhdGFbJ25hbWUnXSA9IHRhYmxlX25hbWUKKworICAgICAgICAgICAg ICAgICAgICAgICAgIyBTcWwgZm9yIGRldGFjaCBwYXJ0aXRpb24KKyAgICAgICAgICAgICAgICAg ICAgICAgIHBhcnRpdGlvbnNfc3FsICs9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBbc2VsZi5wYXJ0aXRpb25fdGVtcGxhdGVfcGF0aCwgJ2Rl dGFjaC5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT10ZW1wX2RhdGEs IGNvbm49c2VsZi5jb25uKS5zdHJpcCgnXG4nKSArICdcblxuJworCisgICAgICAgICAgICAgICAg IyBJZiBwYXJ0aXRpb24ocykgaXMvYXJlIGFkZGVkCisgICAgICAgICAgICAgICAgaWYgJ2FkZGVk JyBpbiBwYXJ0aXRpb25zOgorICAgICAgICAgICAgICAgICAgICB0ZW1wX2RhdGEgPSBkaWN0KCkK KyAgICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhWydzY2hlbWEnXSA9IG9sZF9kYXRhWydzY2hl bWEnXQorICAgICAgICAgICAgICAgICAgICB0ZW1wX2RhdGFbJ25hbWUnXSA9IG9sZF9kYXRhWydu YW1lJ10KKyAgICAgICAgICAgICAgICAgICAgIyBnZXQgdGhlIHBhcnRpdGlvbiB0eXBlCisgICAg ICAgICAgICAgICAgICAgIHRlbXBfZGF0YVsncGFydGl0aW9uX3R5cGUnXSA9IFwKKyAgICAgICAg ICAgICAgICAgICAgICAgIG9sZF9kYXRhWydwYXJ0aXRpb25fc2NoZW1lJ10uc3BsaXQoKVswXS5s b3dlcigpCisgICAgICAgICAgICAgICAgICAgIHRlbXBfZGF0YVsncGFydGl0aW9ucyddID0gcGFy dGl0aW9uc1snYWRkZWQnXQorCisgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbnNfc3FsICs9 IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0X3BhcnRpdGlvbnNfc3FsKHRlbXBf ZGF0YSkuc3RyaXAoJ1xuJykgKyAnXG5cbicKKworICAgICAgICAgICAgICAgICMgQ29tYmluZSBh bGwgdGhlIFNRTCB0b2dldGhlcgorICAgICAgICAgICAgICAgIFNRTCArPSBwYXJ0aXRpb25zX3Nx bC5zdHJpcCgnXG4nKQorCisgICAgICAgICAgICAjIENoZWNrIGlmIGluZGV4IGNvbnN0cmFpbnRz IGFyZSBhZGRlZC9jaGFuZ2VkL2RlbGV0ZWQKKyAgICAgICAgICAgIGluZGV4X2NvbnN0cmFpbnRf c3FsID0gc2VsZi5nZXRfaW5kZXhfY29uc3RyYWludF9zcWwoZGlkLCB0aWQsIGRhdGEpCisgICAg ICAgICAgICAjIElmIHdlIGhhdmUgaW5kZXggY29uc3RyYWludCBzcWwgdGhlbiBhZCBpdCBpbiBt YWluIHNxbAorICAgICAgICAgICAgaWYgaW5kZXhfY29uc3RyYWludF9zcWwgaXMgbm90IE5vbmU6 CisgICAgICAgICAgICAgICAgU1FMICs9ICdcbicgKyBpbmRleF9jb25zdHJhaW50X3NxbAorCisg ICAgICAgICAgICAjIENoZWNrIGlmIGZvcmVpZ24ga2V5KHMpIGlzL2FyZSBhZGRlZC9jaGFuZ2Vk L2RlbGV0ZWQKKyAgICAgICAgICAgIGZvcmVpZ25fa2V5X3NxbCA9IHNlbGYuZ2V0X2ZvcmVpZ25f a2V5X3NxbCh0aWQsIGRhdGEpCisgICAgICAgICAgICAjIElmIHdlIGhhdmUgZm9yZWlnbiBrZXkg c3FsIHRoZW4gYWQgaXQgaW4gbWFpbiBzcWwKKyAgICAgICAgICAgIGlmIGZvcmVpZ25fa2V5X3Nx bCBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBTUUwgKz0gJ1xuJyArIGZvcmVpZ25fa2V5 X3NxbAorCisgICAgICAgICAgICAjIENoZWNrIGlmIGNoZWNrIGNvbnN0cmFpbnQocykgaXMvYXJl IGFkZGVkL2NoYW5nZWQvZGVsZXRlZAorICAgICAgICAgICAgY2hlY2tfY29uc3RyYWludF9zcWwg PSBzZWxmLmdldF9jaGVja19jb25zdHJhaW50X3NxbCh0aWQsIGRhdGEpCisgICAgICAgICAgICAj IElmIHdlIGhhdmUgY2hlY2sgY29uc3RyYWludCBzcWwgdGhlbiBhZCBpdCBpbiBtYWluIHNxbAor ICAgICAgICAgICAgaWYgY2hlY2tfY29uc3RyYWludF9zcWwgaXMgbm90IE5vbmU6CisgICAgICAg ICAgICAgICAgU1FMICs9ICdcbicgKyBjaGVja19jb25zdHJhaW50X3NxbAorCisgICAgICAgICAg ICAjIENoZWNrIGlmIGV4Y2x1c2lvbiBjb25zdHJhaW50KHMpIGlzL2FyZSBhZGRlZC9jaGFuZ2Vk L2RlbGV0ZWQKKyAgICAgICAgICAgIGV4Y2x1c2lvbl9jb25zdHJhaW50X3NxbCA9IHNlbGYuZ2V0 X2V4Y2x1c2lvbl9jb25zdHJhaW50X3NxbChkaWQsIHRpZCwgZGF0YSkKKyAgICAgICAgICAgICMg SWYgd2UgaGF2ZSBjaGVjayBjb25zdHJhaW50IHNxbCB0aGVuIGFkIGl0IGluIG1haW4gc3FsCisg ICAgICAgICAgICBpZiBleGNsdXNpb25fY29uc3RyYWludF9zcWwgaXMgbm90IE5vbmU6CisgICAg ICAgICAgICAgICAgU1FMICs9ICdcbicgKyBleGNsdXNpb25fY29uc3RyYWludF9zcWwKKworICAg ICAgICBlbHNlOgorICAgICAgICAgICAgcmVzID0gTm9uZQorICAgICAgICAgICAgcmVxdWlyZWRf YXJncyA9IFsKKyAgICAgICAgICAgICAgICAnbmFtZScKKyAgICAgICAgICAgIF0KKworICAgICAg ICAgICAgZm9yIGFyZyBpbiByZXF1aXJlZF9hcmdzOgorICAgICAgICAgICAgICAgIGlmIGFyZyBu b3QgaW4gZGF0YToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldHRleHQoJy0tIGRlZmlu aXRpb24gaW5jb21wbGV0ZScpCisKKyAgICAgICAgICAgICMgdmFsaWRhdGUgY29uc3RyYWludCBk YXRhLgorICAgICAgICAgICAgZm9yIGtleSBpbiBbJ3ByaW1hcnlfa2V5JywgJ3VuaXF1ZV9jb25z dHJhaW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICdmb3JlaWduX2tleScsICdjaGVja19j b25zdHJhaW50JywKKyAgICAgICAgICAgICAgICAgICAgICAgICdleGNsdWRlX2NvbnN0cmFpbnQn XToKKyAgICAgICAgICAgICAgICBpZiBrZXkgaW4gZGF0YSBhbmQgbGVuKGRhdGFba2V5XSkgPiAw OgorICAgICAgICAgICAgICAgICAgICBmb3IgY29uc3RyYWludCBpbiBkYXRhW2tleV06CisgICAg ICAgICAgICAgICAgICAgICAgICBpZiBub3Qgc2VsZi52YWxpZGF0ZV9jb25zdHJhaW5zKGtleSwg Y29uc3RyYWludCk6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldHRleHQo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICctLSBkZWZpbml0aW9uIGluY29tcGxl dGUgZm9yIHswfScuZm9ybWF0KGtleSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisK KyAgICAgICAgICAgICMgV2Ugd2lsbCBjb252ZXJ0IHByaXZpbGVnZXMgY29taW5nIGZyb20gY2xp ZW50IHJlcXVpcmVkCisgICAgICAgICAgICAjIGluIHNlcnZlciBzaWRlIGZvcm1hdAorICAgICAg ICAgICAgaWYgJ3JlbGFjbCcgaW4gZGF0YToKKyAgICAgICAgICAgICAgICBkYXRhWydyZWxhY2wn XSA9IHBhcnNlX3ByaXZfdG9fZGIoZGF0YVsncmVsYWNsJ10sIHNlbGYuYWNsKQorCisgICAgICAg ICAgICAjIFBhcnNlICYgZm9ybWF0IGNvbHVtbnMKKyAgICAgICAgICAgIGRhdGEgPSBzZWxmLl9w YXJzZV9mb3JtYXRfY29sdW1ucyhkYXRhKQorICAgICAgICAgICAgZGF0YSA9IEJhc2VUYWJsZVZp ZXcuY2hlY2tfYW5kX2NvbnZlcnRfbmFtZV90b19zdHJpbmcoZGF0YSkKKworICAgICAgICAgICAg aWYgJ2ZvcmVpZ25fa2V5JyBpbiBkYXRhOgorICAgICAgICAgICAgICAgIGZvciBjIGluIGRhdGFb J2ZvcmVpZ25fa2V5J106CisgICAgICAgICAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0 ZSgiLyIuam9pbigKKyAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxmLmZvcmVpZ25fa2V5X3Rl bXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9wYXJlbnQuc3FsJ10p LAorICAgICAgICAgICAgICAgICAgICAgICAgdGlkPWNbJ2NvbHVtbnMnXVswXVsncmVmZXJlbmNl cyddKQorICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0 ZV8yZGFycmF5KFNRTCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9 cnNldCkKKworICAgICAgICAgICAgICAgICAgICBjWydyZW1vdGVfc2NoZW1hJ10gPSByc2V0Wydy b3dzJ11bMF1bJ3NjaGVtYSddCisgICAgICAgICAgICAgICAgICAgIGNbJ3JlbW90ZV90YWJsZSdd ID0gcnNldFsncm93cyddWzBdWyd0YWJsZSddCisKKyAgICAgICAgICAgIHBhcnRpdGlvbnNfc3Fs ID0gJycKKyAgICAgICAgICAgIGlmICdpc19wYXJ0aXRpb25lZCcgaW4gZGF0YSBhbmQgZGF0YVsn aXNfcGFydGl0aW9uZWQnXToKKyAgICAgICAgICAgICAgICBkYXRhWydyZWxraW5kJ10gPSAncCcK KyAgICAgICAgICAgICAgICAjIGNyZWF0ZSBwYXJ0aXRpb24gc2NoZW1lCisgICAgICAgICAgICAg ICAgZGF0YVsncGFydGl0aW9uX3NjaGVtZSddID0gc2VsZi5nZXRfcGFydGl0aW9uX3NjaGVtZShk YXRhKQorICAgICAgICAgICAgICAgIHBhcnRpdGlvbnNfc3FsID0gc2VsZi5nZXRfcGFydGl0aW9u c19zcWwoZGF0YSkKKworICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2lu KFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdjcmVhdGUuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCisKKyAgICAgICAgICAgICMgQXBw ZW5kIFNRTCBmb3IgcGFydGl0aW9ucworICAgICAgICAgICAgU1FMICs9ICdcbicgKyBwYXJ0aXRp b25zX3NxbAorCisgICAgICAgIFNRTCA9IHJlLnN1YignXG57Mix9JywgJ1xuXG4nLCBTUUwpCisg ICAgICAgIFNRTCA9IFNRTC5zdHJpcCgnXG4nKQorCisgICAgICAgIHJldHVybiBTUUwsIGRhdGFb J25hbWUnXSBpZiAnbmFtZScgaW4gZGF0YSBlbHNlIG9sZF9kYXRhWyduYW1lJ10KKworICAgIGRl ZiB1cGRhdGUoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkLCBkYXRhLCByZXMsIHBhcmVu dF9pZD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCB1cGRh dGUgYW4gZXhpc3RpbmcgdGFibGUgb2JqZWN0CisKKyAgICAgICAgIEFyZ3M6CisgICAgICAgICAg IGdpZDogU2VydmVyIEdyb3VwIElECisgICAgICAgICAgIHNpZDogU2VydmVyIElECisgICAgICAg ICAgIGRpZDogRGF0YWJhc2UgSUQKKyAgICAgICAgICAgc2NpZDogU2NoZW1hIElECisgICAgICAg ICAgIHRpZDogVGFibGUgSUQKKyAgICAgICAgICAgZGF0YTogRGF0YSB0byB1cGRhdGUKKyAgICAg ICAgICAgcmVzOiBUYWJsZSBwcm9wZXJ0aWVzCisgICAgICAgICAgIHBhcmVudF9pZDogcGFyZW50 IHRhYmxlIGlkIGlmIGN1cnJlbnQgdGFibGUgaXMgcGFydGl0aW9uIG9mIHBhcmVudAorICAgICAg ICAgICAgICAgICAgICB0YWJsZSBlbHNlIG5vbmUKKyAgICAgICAgIiIiCisgICAgICAgIHRyeToK KyAgICAgICAgICAgIHJlbGtpbmQgPSByZXNbJ3JlbGtpbmQnXSBpZiAncmVsa2luZCcgaW4gcmVz IGVsc2UgJycKKyAgICAgICAgICAgIFNRTCwgbmFtZSA9IHNlbGYuZ2V0X3NxbChkaWQsIHNjaWQs IHRpZCwgZGF0YSwgcmVzKQorCisgICAgICAgICAgICBTUUwgPSBTUUwuc3RyaXAoJ1xuJykuc3Ry aXAoJyAnKQorICAgICAgICAgICAgc3RhdHVzLCByZXN0ID0gc2VsZi5jb25uLmV4ZWN1dGVfc2Nh bGFyKFNRTCkKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0 dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXN0KQorCisgICAgICAgICAgICBT UUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X3NjaGVtYV9vaWQuc3FsJ10p LCB0aWQ9dGlkKQorICAgICAgICAgICAgc3RhdHVzLCByZXN0ID0gc2VsZi5jb25uLmV4ZWN1dGVf MmRhcnJheShTUUwpCisgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAg IHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzdCkKKworICAgICAgICAg ICAgaWYgbm90IHBhcmVudF9pZDoKKyAgICAgICAgICAgICAgICBwYXJlbnRfaWQgPSBzY2lkCisK KyAgICAgICAgICAgICMgQ2hlY2sgZm9yIHBhcnRpdGlvbnMKKyAgICAgICAgICAgIHBhcnRpdGlv bnNfb2lkID0gZGljdCgpCisgICAgICAgICAgICBpZiAncGFydGl0aW9ucycgaW4gZGF0YToKKyAg ICAgICAgICAgICAgICAjIEZldGNoIG9pZCBvZiBzY2hlbWEgZm9yIGFsbCBkZXRhY2hlZCBwYXJ0 aXRpb25zCisgICAgICAgICAgICAgICAgaWYgJ2RlbGV0ZWQnIGluIGRhdGFbJ3BhcnRpdGlvbnMn XToKKyAgICAgICAgICAgICAgICAgICAgZGV0YWNoZWQgPSBbXQorICAgICAgICAgICAgICAgICAg ICBmb3Igcm93IGluIGRhdGFbJ3BhcnRpdGlvbnMnXVsnZGVsZXRlZCddOgorICAgICAgICAgICAg ICAgICAgICAgICAgc3RhdHVzLCBwc2NpZCA9IHNlbGYuY29ubi5leGVjdXRlX3NjYWxhcigKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYu dGFibGVfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICdnZXRfc2NoZW1hX29pZC5zcWwnXSksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZD1yb3dbJ29pZCddKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1wc2NpZCkKKworICAgICAg ICAgICAgICAgICAgICAgICAgZGV0YWNoZWQuYXBwZW5kKHsnb2lkJzogcm93WydvaWQnXSwgJ3Nj aGVtYV9pZCc6IHBzY2lkfSkKKyAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uc19vaWRbJ2Rl dGFjaGVkJ10gPSBkZXRhY2hlZAorCisgICAgICAgICAgICAgICAgIyBGZXRjaCBvaWQgYW5kIHNj aGVtYSBvaWQgZm9yIGFsbCBjcmVhdGVkL2F0dGFjaGVkIHBhcnRpdGlvbnMKKyAgICAgICAgICAg ICAgICBpZiAnYWRkZWQnIGluIGRhdGFbJ3BhcnRpdGlvbnMnXToKKyAgICAgICAgICAgICAgICAg ICAgY3JlYXRlZCA9IFtdCisgICAgICAgICAgICAgICAgICAgIGF0dGFjaGVkID0gW10KKyAgICAg ICAgICAgICAgICAgICAgZm9yIHJvdyBpbiBkYXRhWydwYXJ0aXRpb25zJ11bJ2FkZGVkJ106Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiByb3dbJ2lzX2F0dGFjaCddOgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0YXR1cywgcHNjaWQgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBs YXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J2dldF9zY2hlbWFfb2lkLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRpZD1yb3dbJ3BhcnRpdGlvbl9uYW1lJ10pKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cHNjaWQpCisKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhdHRhY2hlZC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHsnb2lkJzogcm93WydwYXJ0aXRpb25fbmFtZSddLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ3NjaGVtYV9pZCc6IHBzY2lkCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAg ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfZGF0YSA9 IGRpY3QoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcF9kYXRhWyduYW1lJ10gPSBy b3dbJ3BhcnRpdGlvbl9uYW1lJ10KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTUUwgPSBy ZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvIi5qb2lu KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlbGYudGFibGVfdGVtcGxh dGVfcGF0aCwgJ2dldF9vaWQuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzY2lkPXNjaWQsIGRhdGE9dG1wX2RhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAp CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIHB0aWQgPSBzZWxmLmNvbm4u ZXhlY3V0ZV9zY2FsYXIoU1FMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBz dGF0dXM6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9z ZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cHRpZCkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNyZWF0ZWQuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7J29pZCc6 IHB0aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2NoZW1hX2lkJzogc2Np ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICkKKworICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25zX29pZFsnY3JlYXRl ZCddID0gY3JlYXRlZAorICAgICAgICAgICAgICAgICAgICBwYXJ0aXRpb25zX29pZFsnYXR0YWNo ZWQnXSA9IGF0dGFjaGVkCisKKyAgICAgICAgICAgIHJldHVybiBqc29uaWZ5KAorICAgICAgICAg ICAgICAgIG5vZGU9c2VsZi5ibHVlcHJpbnQuZ2VuZXJhdGVfYnJvd3Nlcl9ub2RlKAorICAgICAg ICAgICAgICAgICAgICB0aWQsCisgICAgICAgICAgICAgICAgICAgIHBhcmVudF9pZCwKKyAgICAg ICAgICAgICAgICAgICAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgaWNvbj0iaWNvbi1wYXJ0 aXRpb24iIGlmICgnaXNfcGFydGl0aW9uZWQnIGluIHJlc1sncm93cyddWzBdIGFuZAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzWydyb3dzJ11bMF1bJ2lz X3BhcnRpdGlvbmVkJ10pIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzZWxmLm5vZGVfdHlwZSA9PSAncGFydGl0aW9uJyBlbHNlICJpY29uLXRhYmxlIiwK KyAgICAgICAgICAgICAgICAgICAgaXNfcGFydGl0aW9uZWQ9VHJ1ZSBpZiByZWxraW5kID09ICdw JyBlbHNlIEZhbHNlLAorICAgICAgICAgICAgICAgICAgICBwYXJlbnRfc2NoZW1hX2lkPXNjaWQs CisgICAgICAgICAgICAgICAgICAgIHNjaGVtYV9pZD1yZXN0Wydyb3dzJ11bMF1bJ3NjaWQnXSwK KyAgICAgICAgICAgICAgICAgICAgc2NoZW1hX25hbWU9cmVzdFsncm93cyddWzBdWyduc3BuYW1l J10sCisgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbnNfb2lkPXBhcnRpdGlvbnNfb2lkCisg ICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9u IGFzIGU6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXN0cihlKSkKKworICAgIGRlZiBwcm9wZXJ0aWVzKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQs IHRpZCwgcmVzKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBzaG93 IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzZWxlY3RlZCB0YWJsZSBub2RlLgorCisgICAgICAgIEFy Z3M6CisgICAgICAgICAgICBnaWQ6IFNlcnZlciBHcm91cCBJRAorICAgICAgICAgICAgc2lkOiBT ZXJ2ZXIgSUQKKyAgICAgICAgICAgIGRpZDogIERhdGFiYXNlIElECisgICAgICAgICAgICBzY2lk OiBTY2hlbWEgSUQKKyAgICAgICAgICAgIHNjaWQ6IFNjaGVtYSBJRAorICAgICAgICAgICAgdGlk OiBUYWJsZSBJRAorICAgICAgICAgICAgcmVzOiBUYWJsZS9QYXJ0aXRpb24gdGFibGUgcHJvcGVy dGllcworCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBKU09OIG9mIHNlbGVjdGVkIHRh YmxlIG5vZGUKKyAgICAgICAgIiIiCisgICAgICAgIGRhdGEgPSByZXNbJ3Jvd3MnXVswXQorCisg ICAgICAgIGRhdGFbJ3ZhY3V1bV9zZXR0aW5nc19zdHInXSA9ICIiCisKKyAgICAgICAgaWYgZGF0 YVsndGFibGVfdmFjdXVtX3NldHRpbmdzX3N0ciddIGlzIG5vdCBOb25lOgorICAgICAgICAgICAg ZGF0YVsndmFjdXVtX3NldHRpbmdzX3N0ciddICs9IGRhdGFbCisgICAgICAgICAgICAgICAgJ3Rh YmxlX3ZhY3V1bV9zZXR0aW5nc19zdHInXS5yZXBsYWNlKCcsJywgJ1xuJykKKworICAgICAgICBp ZiBkYXRhWyd0b2FzdF90YWJsZV92YWN1dW1fc2V0dGluZ3Nfc3RyJ10gaXMgbm90IE5vbmU6Cisg ICAgICAgICAgICBkYXRhWyd2YWN1dW1fc2V0dGluZ3Nfc3RyJ10gKz0gJ1xuJyArICdcbicuam9p bigKKyAgICAgICAgICAgICAgICBbJ3RvYXN0XycgKyBzZXR0aW5nIGZvciBzZXR0aW5nIGluIGRh dGFbCisgICAgICAgICAgICAgICAgICAgICd0b2FzdF90YWJsZV92YWN1dW1fc2V0dGluZ3Nfc3Ry JworICAgICAgICAgICAgICAgIF0uc3BsaXQoJywnKV0KKyAgICAgICAgICAgICkKKyAgICAgICAg ZGF0YVsndmFjdXVtX3NldHRpbmdzX3N0ciddID0gZGF0YVsKKyAgICAgICAgICAgICd2YWN1dW1f c2V0dGluZ3Nfc3RyJworICAgICAgICBdLnJlcGxhY2UoIj0iLCAiID0gIikKKworICAgICAgICBk YXRhID0gc2VsZi5fZm9ybWF0dGVyKGRpZCwgc2NpZCwgdGlkLCBkYXRhKQorCisgICAgICAgICMg RmV0Y2ggcGFydGl0aW9uIG9mIHRoaXMgdGFibGUgaWYgaXQgaXMgcGFydGl0aW9uZWQgdGFibGUu CisgICAgICAgIGlmICdpc19wYXJ0aXRpb25lZCcgaW4gZGF0YSBhbmQgZGF0YVsnaXNfcGFydGl0 aW9uZWQnXToKKyAgICAgICAgICAgICMgZ2V0IHRoZSBwYXJ0aXRpb24gdHlwZQorICAgICAgICAg ICAgZGF0YVsncGFydGl0aW9uX3R5cGUnXSA9IGRhdGFbJ3BhcnRpdGlvbl9zY2hlbWUnXS5zcGxp dCgpWzBdLmxvd2VyKCkKKworICAgICAgICAgICAgcGFydGl0aW9ucyA9IFtdCisgICAgICAgICAg ICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYucGFydGl0aW9uX3RlbXBsYXRl X3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub2Rl cy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NpZD1zY2lkLCB0 aWQ9dGlkKQorICAgICAgICAgICAgc3RhdHVzLCByc2V0ID0gc2VsZi5jb25uLmV4ZWN1dGVfMmRh cnJheShTUUwpCisgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJl dHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cnNldCkKKworICAgICAgICAgICAg Zm9yIHJvdyBpbiByc2V0Wydyb3dzJ106CisgICAgICAgICAgICAgICAgcGFydGl0aW9uX25hbWUg PSByb3dbJ25hbWUnXQorICAgICAgICAgICAgICAgICMgaWYgc2NoZW1hIG5hbWUgaXMgZGlmZmVy ZW50IHRoZW4gZGlzcGxheSBzY2hlbWEKKyAgICAgICAgICAgICAgICAjIHF1YWxpZmllZCBuYW1l IG9uIFVJLgorICAgICAgICAgICAgICAgIGlmIGRhdGFbJ3NjaGVtYSddICE9IHJvd1snc2NoZW1h X25hbWUnXToKKyAgICAgICAgICAgICAgICAgICAgcGFydGl0aW9uX25hbWUgPSByb3dbJ3NjaGVt YV9uYW1lJ10gKyAnLicgKyByb3dbJ25hbWUnXQorCisgICAgICAgICAgICAgICAgaWYgZGF0YVsn cGFydGl0aW9uX3R5cGUnXSA9PSAncmFuZ2UnOgorICAgICAgICAgICAgICAgICAgICByYW5nZV9w YXJ0ID0gcm93WydwYXJ0aXRpb25fdmFsdWUnXS5zcGxpdCgKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnRk9SIFZBTFVFUyBGUk9NICgnKVsxXS5zcGxpdCgnKSBUTycpCisgICAgICAgICAg ICAgICAgICAgIHJhbmdlX2Zyb20gPSByYW5nZV9wYXJ0WzBdCisgICAgICAgICAgICAgICAgICAg IHJhbmdlX3RvID0gcmFuZ2VfcGFydFsxXVsyOi0xXQorCisgICAgICAgICAgICAgICAgICAgIHBh cnRpdGlvbnMuYXBwZW5kKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICdvaWQnOiByb3dbJ29p ZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3BhcnRpdGlvbl9uYW1lJzogcGFydGl0aW9u X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAndmFsdWVzX2Zyb20nOiByYW5nZV9mcm9t LAorICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlc190byc6IHJhbmdlX3RvCisgICAgICAg ICAgICAgICAgICAgIH0pCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg ICAgcmFuZ2VfcGFydCA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvd1sncGFydGl0aW9u X3ZhbHVlJ10uc3BsaXQoJ0ZPUiBWQUxVRVMgSU4gKCcpWzFdCisKKyAgICAgICAgICAgICAgICAg ICAgcmFuZ2VfaW4gPSByYW5nZV9wYXJ0WzotMV0KKyAgICAgICAgICAgICAgICAgICAgcGFydGl0 aW9ucy5hcHBlbmQoeworICAgICAgICAgICAgICAgICAgICAgICAgJ29pZCc6IHJvd1snb2lkJ10s CisgICAgICAgICAgICAgICAgICAgICAgICAncGFydGl0aW9uX25hbWUnOiBwYXJ0aXRpb25fbmFt ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICd2YWx1ZXNfaW4nOiByYW5nZV9pbgorICAgICAg ICAgICAgICAgICAgICB9KQorCisgICAgICAgICAgICBkYXRhWydwYXJ0aXRpb25zJ10gPSBwYXJ0 aXRpb25zCisKKyAgICAgICAgcmV0dXJuIGFqYXhfcmVzcG9uc2UoCisgICAgICAgICAgICByZXNw b25zZT1kYXRhLAorICAgICAgICAgICAgc3RhdHVzPTIwMAorICAgICAgICApCisKKyAgICBkZWYg Z2V0X3BhcnRpdGlvbnNfc3FsKHNlbGYsIHBhcnRpdGlvbnMpOgorICAgICAgICAiIiIKKyAgICAg ICAgVGhpcyBmdW5jdGlvbiB3aWxsIGl0ZXJhdGUgYWxsIHRoZSBwYXJ0aXRpb25zIGFuZCBjcmVh dGUgU1FMLgorCisgICAgICAgIDpwYXJhbSBwYXJ0aXRpb25zOiBMaXN0IG9mIHBhcnRpdGlvbnMK KyAgICAgICAgIiIiCisgICAgICAgIHNxbCA9ICcnCisKKyAgICAgICAgZm9yIHJvdyBpbiBwYXJ0 aXRpb25zWydwYXJ0aXRpb25zJ106CisgICAgICAgICAgICBwYXJ0X2RhdGEgPSBkaWN0KCkKKyAg ICAgICAgICAgIHBhcnRfZGF0YVsncGFydGl0aW9uZWRfdGFibGVfbmFtZSddID0gcGFydGl0aW9u c1snbmFtZSddCisgICAgICAgICAgICBwYXJ0X2RhdGFbJ3BhcmVudF9zY2hlbWEnXSA9IHBhcnRp dGlvbnNbJ3NjaGVtYSddCisKKyAgICAgICAgICAgIGlmICdpc19hdHRhY2gnIGluIHJvdyBhbmQg cm93Wydpc19hdHRhY2gnXToKKyAgICAgICAgICAgICAgICBzY2hlbWFfbmFtZSwgdGFibGVfbmFt ZSA9IFwKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5nZXRfc2NoZW1hX2FuZF90YWJsZV9uYW1l KHJvd1sncGFydGl0aW9uX25hbWUnXSkKKworICAgICAgICAgICAgICAgIHBhcnRfZGF0YVsnc2No ZW1hJ10gPSBzY2hlbWFfbmFtZQorICAgICAgICAgICAgICAgIHBhcnRfZGF0YVsnbmFtZSddID0g dGFibGVfbmFtZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJ0X2RhdGFb J3NjaGVtYSddID0gcGFydGl0aW9uc1snc2NoZW1hJ10KKyAgICAgICAgICAgICAgICBwYXJ0X2Rh dGFbJ3JlbGlzcGFydGl0aW9uJ10gPSBUcnVlCisgICAgICAgICAgICAgICAgcGFydF9kYXRhWydu YW1lJ10gPSByb3dbJ3BhcnRpdGlvbl9uYW1lJ10KKworICAgICAgICAgICAgaWYgcGFydGl0aW9u c1sncGFydGl0aW9uX3R5cGUnXSA9PSAncmFuZ2UnOgorICAgICAgICAgICAgICAgIHJhbmdlX2Zy b20gPSByb3dbJ3ZhbHVlc19mcm9tJ10uc3BsaXQoJywnKQorICAgICAgICAgICAgICAgIHJhbmdl X3RvID0gcm93Wyd2YWx1ZXNfdG8nXS5zcGxpdCgnLCcpCisKKyAgICAgICAgICAgICAgICBmcm9t X3N0ciA9ICcsICcuam9pbigiezB9Ii5mb3JtYXQoaXRlbSkgZm9yIGl0ZW0gaW4gcmFuZ2VfZnJv bSkKKyAgICAgICAgICAgICAgICB0b19zdHIgPSAnLCAnLmpvaW4oInswfSIuZm9ybWF0KGl0ZW0p IGZvciBpdGVtIGluIHJhbmdlX3RvKQorCisgICAgICAgICAgICAgICAgcGFydF9kYXRhWydwYXJ0 aXRpb25fdmFsdWUnXSA9ICdGT1IgVkFMVUVTIEZST00gKCcgKyBmcm9tX3N0ciBcCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgJykgVE8gKCcgKyB0b19z dHIgKyAnKScKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmFuZ2VfaW4gPSBy b3dbJ3ZhbHVlc19pbiddLnNwbGl0KCcsJykKKyAgICAgICAgICAgICAgICBpbl9zdHIgPSAnLCAn LmpvaW4oInswfSIuZm9ybWF0KGl0ZW0pIGZvciBpdGVtIGluIHJhbmdlX2luKQorICAgICAgICAg ICAgICAgIHBhcnRfZGF0YVsncGFydGl0aW9uX3ZhbHVlJ10gPSAnRk9SIFZBTFVFUyBJTiAoJyAr IGluX3N0ciArICcpJworCisgICAgICAgICAgICBpZiAnaXNfYXR0YWNoJyBpbiByb3cgYW5kIHJv d1snaXNfYXR0YWNoJ106CisgICAgICAgICAgICAgICAgcGFydGl0aW9uX3NxbCA9IHJlbmRlcl90 ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYucGFydGl0aW9uX3Rl bXBsYXRlX3BhdGgsICdhdHRhY2guc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICBkYXRhPXBh cnRfZGF0YSwgY29ubj1zZWxmLmNvbm4KKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICBl bHNlOgorICAgICAgICAgICAgICAgIHBhcnRpdGlvbl9zcWwgPSByZW5kZXJfdGVtcGxhdGUoCisg ICAgICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnBhcnRpdGlvbl90ZW1wbGF0ZV9wYXRo LCAnY3JlYXRlLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgZGF0YT1wYXJ0X2RhdGEsIGNv bm49c2VsZi5jb25uCisgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICBzcWwgKz0gcGFy dGl0aW9uX3NxbCArICdcbicKKworICAgICAgICByZXR1cm4gc3FsCisKKyAgICBkZWYgdHJ1bmNh dGUoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkLCByZXMpOgorICAgICAgICAiIiIKKyAg ICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHRydW5jYXRlIHRoZSB0YWJsZSBvYmplY3QKKworICAg ICAgICAgQXJnczoKKyAgICAgICAgICAgZ2lkOiBTZXJ2ZXIgR3JvdXAgSUQKKyAgICAgICAgICAg c2lkOiBTZXJ2ZXIgSUQKKyAgICAgICAgICAgZGlkOiBEYXRhYmFzZSBJRAorICAgICAgICAgICBz Y2lkOiBTY2hlbWEgSUQKKyAgICAgICAgICAgdGlkOiBUYWJsZSBJRAorICAgICAgICAiIiIKKyAg ICAgICAgIyBCZWxvdyB3aWxsIGRlY2lkZSBpZiBpdCdzIHNpbXBsZSBkcm9wIG9yIGRyb3Agd2l0 aCBjYXNjYWRlIGNhbGwKKyAgICAgICAgZGF0YSA9IHJlcXVlc3QuZm9ybSBpZiByZXF1ZXN0LmZv cm0gZWxzZSBqc29uLmxvYWRzKAorICAgICAgICAgICAgcmVxdWVzdC5kYXRhLCBlbmNvZGluZz0n dXRmLTgnCisgICAgICAgICkKKyAgICAgICAgIyBDb252ZXJ0IHN0ciAndHJ1ZScgdG8gYm9vbGVh biB0eXBlCisgICAgICAgIGlzX2Nhc2NhZGUgPSBqc29uLmxvYWRzKGRhdGFbJ2Nhc2NhZGUnXSkK KworICAgICAgICBkYXRhID0gcmVzWydyb3dzJ11bMF0KKworICAgICAgICBTUUwgPSByZW5kZXJf dGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJ1bmNhdGUuc3FsJ10pLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBjYXNjYWRlPWlzX2Nhc2NhZGUpCisgICAg ICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKFNRTCkKKyAgICAgICAg aWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3Io ZXJyb3Jtc2c9cmVzKQorCisgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAg ICAgICAgICBzdWNjZXNzPTEsCisgICAgICAgICAgICBpbmZvPWdldHRleHQoIlRhYmxlIHRydW5j YXRlZCIpLAorICAgICAgICAgICAgZGF0YT17CisgICAgICAgICAgICAgICAgJ2lkJzogdGlkLAor ICAgICAgICAgICAgICAgICdzY2lkJzogc2NpZAorICAgICAgICAgICAgfQorICAgICAgICApCisK KyAgICBkZWYgZ2V0X3NjaGVtYV9hbmRfdGFibGVfbmFtZShzZWxmLCB0aWQpOgorICAgICAgICAi IiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGZldGNoIHRoZSBzY2hlbWEgcXVhbGlmaWVk IG5hbWUgb2YgdGhlCisgICAgICAgIGdpdmVuIHRhYmxlIGlkLgorCisgICAgICAgIDpwYXJhbSB0 aWQ6IFRhYmxlIElkLgorICAgICAgICAiIiIKKyAgICAgICAgIyBHZXQgc2NoZW1hIG9pZAorICAg ICAgICBzdGF0dXMsIHNjaWQgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoCisgICAgICAgICAg ICByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9zY2hlbWFfb2lkLnNxbCdd KSwgdGlkPXRpZCkpCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4g aW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXNjaWQpCisKKyAgICAgICAgIyBGZXRjaCBz Y2hlbWEgbmFtZQorICAgICAgICBzdGF0dXMsIHNjaGVtYV9uYW1lID0gc2VsZi5jb25uLmV4ZWN1 dGVfc2NhbGFyKAorICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRh YmxlX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdnZXRfc2NoZW1hLnNxbCddKSwgY29ubj1zZWxmLmNvbm4sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2NpZD1zY2lkKQorICAgICAgICApCisgICAgICAgIGlmIG5vdCBzdGF0dXM6Cisg ICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXNjaGVtYV9u YW1lKQorCisgICAgICAgICMgRmV0Y2ggVGFibGUgbmFtZQorICAgICAgICBzdGF0dXMsIHRhYmxl X25hbWUgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoCisgICAgICAgICAgICByZW5kZXJfdGVt cGxhdGUoCisgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0 aCwgJ2dldF90YWJsZS5zcWwnXSksCisgICAgICAgICAgICAgICAgY29ubj1zZWxmLmNvbm4sIHNj aWQ9c2NpZCwgdGlkPXRpZAorICAgICAgICAgICAgKQorICAgICAgICApCisgICAgICAgIGlmIG5v dCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9y bXNnPXRhYmxlX25hbWUpCisKKyAgICAgICAgcmV0dXJuIHNjaGVtYV9uYW1lLCB0YWJsZV9uYW1l CisKKyAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGNvbnZlcnRfbGVuZ3RoX3ByZWNpc2lvbl90 b19zdHJpbmcoZGF0YSk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVz ZWQgdG8gY29udmVydCBsZW5ndGggJiBwcmVjaXNpb24gdG8gc3RyaW5nCisgICAgICAgIHRvIGhh bmRsZSBjYXNlIGxpa2Ugd2hlbiB1c2VyIGdpdmVzIDAgYXMgbGVuZ3RoCisKKyAgICAgICAgQXJn czoKKyAgICAgICAgICAgIGRhdGE6IERhdGEgZnJvbSBjbGllbnQKKworICAgICAgICBSZXR1cm5z OgorICAgICAgICAgICAgQ29udmVydGVkIGRhdGEKKyAgICAgICAgIiIiCisgICAgICAgIGlmICdh dHRsZW4nIGluIGRhdGEgYW5kIGRhdGFbJ2F0dGxlbiddIGlzIG5vdCBOb25lOgorICAgICAgICAg ICAgZGF0YVsnYXR0bGVuJ10gPSBzdHIoZGF0YVsnYXR0bGVuJ10pCisgICAgICAgIGlmICdhdHRw cmVjaXNpb24nIGluIGRhdGEgYW5kIGRhdGFbJ2F0dHByZWNpc2lvbiddIGlzIG5vdCBOb25lOgor ICAgICAgICAgICAgZGF0YVsnYXR0cHJlY2lzaW9uJ10gPSBzdHIoZGF0YVsnYXR0cHJlY2lzaW9u J10pCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBkZWYgc2VhcmNoX2NvdmVyaW5naW5kZXgo c2VsZiwgdGlkLCBjb2xzKToKKyAgICAgICAgIiIiCisKKyAgICAgICAgQXJnczoKKyAgICAgICAg ICB0aWQ6IFRhYmxlIGlkCisgICAgICAgICAgY29sczogY29sdW1uIGxpc3QKKworICAgICAgICBS ZXR1cm5zOgorCisgICAgICAgICIiIgorCisgICAgICAgIGNvbHMgPSBzZXQoY29scykKKyAgICAg ICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmZvcmVpZ25fa2V5X3RlbXBs YXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9j b25zdHJhaW50cy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlk KQorICAgICAgICBzdGF0dXMsIGNvbnN0cmFpbnRzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChT UUwpCisKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlv bihjb25zdHJhaW50cykKKworICAgICAgICBmb3IgY29zdHJudCBpbiBjb25zdHJhaW50c1sncm93 cyddOgorCisgICAgICAgICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAg ICAgIi8iLmpvaW4oW3NlbGYuZm9yZWlnbl9rZXlfdGVtcGxhdGVfcGF0aCwgJ2dldF9jb2xzLnNx bCddKSwKKyAgICAgICAgICAgICAgICBjaWQ9Y29zdHJudFsnb2lkJ10sCisgICAgICAgICAgICAg ICAgY29sY250PWNvc3RybnRbJ2luZG5hdHRzJ10pCisgICAgICAgICAgICBzdGF0dXMsIHJlc3Qg PSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKKworICAgICAgICAgICAgaWYgbm90IHN0YXR1 czoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXJlc3QpCisKKyAgICAgICAgICAgIGluZGV4Y29scyA9IHNldCgpCisgICAgICAgICAgICBmb3Ig ciBpbiByZXN0Wydyb3dzJ106CisgICAgICAgICAgICAgICAgaW5kZXhjb2xzLmFkZChyWydjb2x1 bW4nXS5zdHJpcCgnIicpKQorCisgICAgICAgICAgICBpZiBsZW4oY29scyAtIGluZGV4Y29scykg PT0gbGVuKGluZGV4Y29scyAtIGNvbHMpID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIGNv c3RybnRbImlkeG5hbWUiXQorCisgICAgICAgIHJldHVybiBOb25lClwgTm8gbmV3bGluZSBhdCBl bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvYmFja3VwL3RlbXBsYXRl cy9iYWNrdXAvanMvYmFja3VwLmpzIGIvd2ViL3BnYWRtaW4vdG9vbHMvYmFja3VwL3RlbXBsYXRl cy9iYWNrdXAvanMvYmFja3VwLmpzCmluZGV4IGM0M2RjZDIuLjNiNTg0NTUgMTAwNjQ0Ci0tLSBh L3dlYi9wZ2FkbWluL3Rvb2xzL2JhY2t1cC90ZW1wbGF0ZXMvYmFja3VwL2pzL2JhY2t1cC5qcwor KysgYi93ZWIvcGdhZG1pbi90b29scy9iYWNrdXAvdGVtcGxhdGVzL2JhY2t1cC9qcy9iYWNrdXAu anMKQEAgLTI3MCw3ICsyNzAsNyBAQCBUT0RPIExJU1QgRk9SIEJBQ0tVUDoKIAogICAgICAgICAv LyBEZWZpbmUgbGlzdCBvZiBub2RlcyBvbiB3aGljaCBiYWNrdXAgY29udGV4dCBtZW51IG9wdGlv biBhcHBlYXJzCiAgICAgICAgIHZhciBiYWNrdXBfc3VwcG9ydGVkX25vZGVzID0gWwotICAgICAg ICAgICAgICAnZGF0YWJhc2UnLCAnc2NoZW1hJywgJ3RhYmxlJworICAgICAgICAgICAgICAnZGF0 YWJhc2UnLCAnc2NoZW1hJywgJ3RhYmxlJywgJ3BhcnRpdGlvbicKICAgICAgICAgICAgIF07CiAK ICAgICAgICAgLyoqCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9kYXRhZ3JpZC9fX2lu aXRfXy5weSBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlkL19faW5pdF9fLnB5CmluZGV4IDY3 ZjY3MjkuLjk1YzgzZGQgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlkL19f aW5pdF9fLnB5CisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlkL19faW5pdF9fLnB5CkBA IC0xMjcsNiArMTI3LDEwIEBAIGRlZiBpbml0aWFsaXplX2RhdGFncmlkKGNtZF90eXBlLCBvYmpf dHlwZSwgc2lkLCBkaWQsIG9ial9pZCk6CiAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9c3RyKG1zZykpCiAKICAgICB0cnk6CisgICAgICAgICMgaWYgb2JqZWN0 IHR5cGUgaXMgcGFydGl0aW9uIHRoZW4gaXQgaXMgbm90aGluZyBidXQgYSB0YWJsZS4KKyAgICAg ICAgaWYgb2JqX3R5cGUgPT0gJ3BhcnRpdGlvbic6CisgICAgICAgICAgICBvYmpfdHlwZSA9ICd0 YWJsZScKKwogICAgICAgICAjIEdldCB0aGUgb2JqZWN0IGFzIHBlciB0aGUgb2JqZWN0IHR5cGUK ICAgICAgICAgY29tbWFuZF9vYmogPSBPYmplY3RSZWdpc3RyeS5nZXRfb2JqZWN0KG9ial90eXBl LCBjb25uX2lkPWNvbm5faWQsIHNpZD1zaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkaWQ9ZGlkLCBvYmpfaWQ9b2JqX2lkLCBjbWRfdHlwZT1jbWRf dHlwZSwKQEAgLTIwMSwxMiArMjA1LDE0IEBAIGRlZiBwYW5lbCh0cmFuc19pZCwgaXNfcXVlcnlf dG9vbCwgZWRpdG9yX3RpdGxlKToKICAgICBlbHNlOgogICAgICAgICBuZXdfYnJvd3Nlcl90YWIg PSAnZmFsc2UnCiAKLSAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCJkYXRhZ3JpZC9pbmRleC5o dG1sIiwgXz1nZXR0ZXh0LCB1bmlxdWVJZD10cmFuc19pZCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIGlzX3F1ZXJ5X3Rvb2w9aXNfcXVlcnlfdG9vbCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgIGVkaXRvcl90aXRsZT1lZGl0b3JfdGl0bGUsIHNjcmlwdF90eXBlX3VybD1zVVJMLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfZGVza3RvcF9tb2RlPWFwcC5QR0FETUlOX1JV TlRJTUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpc19saW51eD1pc19saW51eF9wbGF0 Zm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzX25ld19icm93c2VyX3RhYj1uZXdf YnJvd3Nlcl90YWIpCisgICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgImRhdGFn cmlkL2luZGV4Lmh0bWwiLCBfPWdldHRleHQsIHVuaXF1ZUlkPXRyYW5zX2lkLAorICAgICAgICBp c19xdWVyeV90b29sPWlzX3F1ZXJ5X3Rvb2wsCisgICAgICAgIGVkaXRvcl90aXRsZT1lZGl0b3Jf dGl0bGUsIHNjcmlwdF90eXBlX3VybD1zVVJMLAorICAgICAgICBpc19kZXNrdG9wX21vZGU9YXBw LlBHQURNSU5fUlVOVElNRSwKKyAgICAgICAgaXNfbGludXg9aXNfbGludXhfcGxhdGZvcm0sCisg ICAgICAgIGlzX25ld19icm93c2VyX3RhYj1uZXdfYnJvd3Nlcl90YWIKKyAgICApCiAKIAogQGJs dWVwcmludC5yb3V0ZSgKQEAgLTM0Niw2ICszNTIsOCBAQCBkZWYgdmFsaWRhdGVfZmlsdGVyKHNp ZCwgZGlkLCBvYmpfaWQpOgogQGxvZ2luX3JlcXVpcmVkCiBkZWYgc2NyaXB0KCk6CiAgICAgIiIi cmVuZGVyIHRoZSByZXF1aXJlZCBqYXZhc2NyaXB0IiIiCi0gICAgcmV0dXJuIFJlc3BvbnNlKHJl c3BvbnNlPXJlbmRlcl90ZW1wbGF0ZSgiZGF0YWdyaWQvanMvZGF0YWdyaWQuanMiLCBfPWdldHRl eHQpLAotICAgICAgICAgICAgICAgICAgICBzdGF0dXM9MjAwLAotICAgICAgICAgICAgICAgICAg ICBtaW1ldHlwZT0iYXBwbGljYXRpb24vamF2YXNjcmlwdCIpCisgICAgcmV0dXJuIFJlc3BvbnNl KAorICAgICAgICByZXNwb25zZT1yZW5kZXJfdGVtcGxhdGUoImRhdGFncmlkL2pzL2RhdGFncmlk LmpzIiwgXz1nZXR0ZXh0KSwKKyAgICAgICAgc3RhdHVzPTIwMCwgbWltZXR5cGU9ImFwcGxpY2F0 aW9uL2phdmFzY3JpcHQiCisgICAgKQorCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9k YXRhZ3JpZC90ZW1wbGF0ZXMvZGF0YWdyaWQvanMvZGF0YWdyaWQuanMgYi93ZWIvcGdhZG1pbi90 b29scy9kYXRhZ3JpZC90ZW1wbGF0ZXMvZGF0YWdyaWQvanMvZGF0YWdyaWQuanMKaW5kZXggZWI4 NmExMi4uY2RhNWM1MyAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvZGF0YWdyaWQvdGVt cGxhdGVzL2RhdGFncmlkL2pzL2RhdGFncmlkLmpzCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2Rh dGFncmlkL3RlbXBsYXRlcy9kYXRhZ3JpZC9qcy9kYXRhZ3JpZC5qcwpAQCAtMjksNyArMjksNyBA QCBkZWZpbmUoWwogICAgICAgICAvLyBEZWZpbmUgbGlzdCBvZiBub2RlcyBvbiB3aGljaCB2aWV3 IGRhdGEgb3B0aW9uIGFwcGVhcnMKICAgICAgICAgdmFyIHN1cHBvcnRlZF9ub2RlcyA9IFsKICAg ICAgICAgICAgJ3RhYmxlJywgJ3ZpZXcnLCAnbXZpZXcnLAotICAgICAgICAgICAnZm9yZWlnbi10 YWJsZScsICdjYXRhbG9nX29iamVjdCcKKyAgICAgICAgICAgJ2ZvcmVpZ24tdGFibGUnLCAnY2F0 YWxvZ19vYmplY3QnLCAncGFydGl0aW9uJwogICAgICAgICBdLAogCiAgICAgICAgIC8qIEVuYWJs ZS9kaXNhYmxlIFZpZXcgZGF0YSBtZW51IGluIHRvb2xzIGJhc2VkCmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi90b29scy9tYWludGVuYW5jZS90ZW1wbGF0ZXMvbWFpbnRlbmFuY2UvanMvbWFpbnRl bmFuY2UuanMgYi93ZWIvcGdhZG1pbi90b29scy9tYWludGVuYW5jZS90ZW1wbGF0ZXMvbWFpbnRl bmFuY2UvanMvbWFpbnRlbmFuY2UuanMKaW5kZXggNWFiM2M0NC4uMGU1MWZkOSAxMDA2NDQKLS0t IGEvd2ViL3BnYWRtaW4vdG9vbHMvbWFpbnRlbmFuY2UvdGVtcGxhdGVzL21haW50ZW5hbmNlL2pz L21haW50ZW5hbmNlLmpzCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL21haW50ZW5hbmNlL3RlbXBs YXRlcy9tYWludGVuYW5jZS9qcy9tYWludGVuYW5jZS5qcwpAQCAtMTUwLDcgKzE1MCw3IEBAIGRl ZmluZShbCiAKICAgICAgICAgdmFyIG1haW50ZW5hbmNlX3N1cHBvcnRlZF9ub2RlcyA9IFsKICAg ICAgICAgICAgICAgJ2RhdGFiYXNlJywgJ3RhYmxlJywgJ3ByaW1hcnlfa2V5JywKLSAgICAgICAg ICAgICAgJ3VuaXF1ZV9jb25zdHJhaW50JywgJ2luZGV4JworICAgICAgICAgICAgICAndW5pcXVl X2NvbnN0cmFpbnQnLCAnaW5kZXgnLCAncGFydGl0aW9uJwogICAgICAgICAgICAgXTsKIAogICAg ICAgICAvKioKQEAgLTE4MCw3ICsxODAsNyBAQCBkZWZpbmUoWwogCiAgICAgICAgIHZhciBtZW51 cyA9IFt7CiAgICAgICAgICAgbmFtZTogJ21haW50ZW5hbmNlJywgbW9kdWxlOiB0aGlzLAotICAg ICAgICAgIGFwcGxpZXM6IFsndG9vbHMnXSwgY2FsbGJhY2s6ICdjYWxsYmFja19tYWludGVuYWNl JywKKyAgICAgICAgICBhcHBsaWVzOiBbJ3Rvb2xzJ10sIGNhbGxiYWNrOiAnY2FsbGJhY2tfbWFp bnRlbmFuY2UnLAogICAgICAgICAgIHByaW9yaXR5OiAxMCwgbGFiZWw6IGdldHRleHQoJ01haW50 ZW5hbmNlLi4uJyksCiAgICAgICAgICAgaWNvbjogJ2ZhIGZhLXdyZW5jaCcsIGVuYWJsZTogbWVu dV9lbmFibGVkCiAgICAgICAgIH1dOwpAQCAtMTkwLDcgKzE5MCw3IEBAIGRlZmluZShbCiAgICAg ICAgICAgbWVudXMucHVzaCh7CiAgICAgICAgICAgICBuYW1lOiAnbWFpbnRlbmFuY2VfY29udGV4 dF8nICsgbWFpbnRlbmFuY2Vfc3VwcG9ydGVkX25vZGVzW2lkeF0sCiAgICAgICAgICAgICBub2Rl OiBtYWludGVuYW5jZV9zdXBwb3J0ZWRfbm9kZXNbaWR4XSwgbW9kdWxlOiB0aGlzLAotICAgICAg ICAgICAgYXBwbGllczogWydjb250ZXh0J10sIGNhbGxiYWNrOiAnY2FsbGJhY2tfbWFpbnRlbmFj ZScsCisgICAgICAgICAgICBhcHBsaWVzOiBbJ2NvbnRleHQnXSwgY2FsbGJhY2s6ICdjYWxsYmFj a19tYWludGVuYW5jZScsCiAgICAgICAgICAgICBwcmlvcml0eTogMTAsIGxhYmVsOiBnZXR0ZXh0 KCdNYWludGVuYW5jZS4uLicpLAogICAgICAgICAgICAgaWNvbjogJ2ZhIGZhLXdyZW5jaCcsIGVu YWJsZTogbWVudV9lbmFibGVkCiAgICAgICAgICAgfSk7CkBAIC0yMDEsNyArMjAxLDcgQEAgZGVm aW5lKFsKICAgICAgIC8qCiAgICAgICAgIE9wZW4gdGhlIGRpYWxvZyBmb3IgdGhlIG1haW50ZW5h bmNlIGZ1bmN0aW9uYWxpdHkKICAgICAgICovCi0gICAgICBjYWxsYmFja19tYWludGVuYWNlOiBm dW5jdGlvbihhcmdzLCBpdGVtKSB7CisgICAgICBjYWxsYmFja19tYWludGVuYW5jZTogZnVuY3Rp b24oYXJncywgaXRlbSkgewogICAgICAgICB2YXIgaSA9IGl0ZW0gfHwgcGdCcm93c2VyLnRyZWUu c2VsZWN0ZWQoKSwKICAgICAgICAgICBzZXJ2ZXJfZGF0YSA9IG51bGw7CiAKQEAgLTMyMCw3ICsz MjAsMTAgQEAgZGVmaW5lKFsKICAgICAgICAgICAgICAgICAgIGlmICh0cmVlSW5mby5zY2hlbWEg IT0gdW5kZWZpbmVkKSB7CiAgICAgICAgICAgICAgICAgICAgIHNjaGVtYSA9IHRyZWVJbmZvLnNj aGVtYS5fbGFiZWw7CiAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICBpZiAo dHJlZUluZm8udGFibGUgIT0gdW5kZWZpbmVkKSB7CisKKyAgICAgICAgICAgICAgICAgIGlmICh0 cmVlSW5mby5wYXJ0aXRpb24gIT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgICAgIHRh YmxlID0gdHJlZUluZm8ucGFydGl0aW9uLl9sYWJlbDsKKyAgICAgICAgICAgICAgICAgIH0gZWxz ZSBpZiAgKHRyZWVJbmZvLnRhYmxlICE9IHVuZGVmaW5lZCkgewogICAgICAgICAgICAgICAgICAg ICB0YWJsZSA9IHRyZWVJbmZvLnRhYmxlLl9sYWJlbDsKICAgICAgICAgICAgICAgICAgIH0KIApk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvcmVzdG9yZS90ZW1wbGF0ZXMvcmVzdG9yZS9q cy9yZXN0b3JlLmpzIGIvd2ViL3BnYWRtaW4vdG9vbHMvcmVzdG9yZS90ZW1wbGF0ZXMvcmVzdG9y ZS9qcy9yZXN0b3JlLmpzCmluZGV4IGMyM2Q5ZTMuLjBkYTAwMDQgMTAwNjQ0Ci0tLSBhL3dlYi9w Z2FkbWluL3Rvb2xzL3Jlc3RvcmUvdGVtcGxhdGVzL3Jlc3RvcmUvanMvcmVzdG9yZS5qcworKysg Yi93ZWIvcGdhZG1pbi90b29scy9yZXN0b3JlL3RlbXBsYXRlcy9yZXN0b3JlL2pzL3Jlc3RvcmUu anMKQEAgLTIyOCw3ICsyMjgsOCBAQCBkZWZpbmUoWwogICAgICAgICB2YXIgcmVzdG9yZV9zdXBw b3J0ZWRfbm9kZXMgPSBbCiAgICAgICAgICAgICAgICdkYXRhYmFzZScsICdzY2hlbWEnLAogICAg ICAgICAgICAgICAndGFibGUnLCAnZnVuY3Rpb24nLAotICAgICAgICAgICAgICAndHJpZ2dlcics ICdpbmRleCcKKyAgICAgICAgICAgICAgJ3RyaWdnZXInLCAnaW5kZXgnLAorICAgICAgICAgICAg ICAncGFydGl0aW9uJwogICAgICAgICAgICAgXTsKIAogICAgICAgICAvKioKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL3V0aWxzL19faW5pdF9fLnB5IGIvd2ViL3BnYWRtaW4vdXRpbHMvX19pbml0 X18ucHkKaW5kZXggNTUwYmFkMi4uNzAxYTM4YyAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdXRp bHMvX19pbml0X18ucHkKKysrIGIvd2ViL3BnYWRtaW4vdXRpbHMvX19pbml0X18ucHkKQEAgLTI5 LDYgKzI5LDcgQEAgY2xhc3MgUGdBZG1pbk1vZHVsZShCbHVlcHJpbnQpOgogICAgICAgICBrd2Fy Z3Muc2V0ZGVmYXVsdCgndGVtcGxhdGVfZm9sZGVyJywgJ3RlbXBsYXRlcycpCiAgICAgICAgIGt3 YXJncy5zZXRkZWZhdWx0KCdzdGF0aWNfZm9sZGVyJywgJ3N0YXRpYycpCiAgICAgICAgIHNlbGYu c3VibW9kdWxlcyA9IFtdCisgICAgICAgIHNlbGYucGFyZW50bW9kdWxlcyA9IFtdCiAKICAgICAg ICAgc3VwZXIoUGdBZG1pbk1vZHVsZSwgc2VsZikuX19pbml0X18obmFtZSwgaW1wb3J0X25hbWUs ICoqa3dhcmdzKQogCkBAIC01OSw2ICs2MCw4IEBAIGNsYXNzIFBnQWRtaW5Nb2R1bGUoQmx1ZXBy aW50KToKICAgICAgICAgc3VwZXIoUGdBZG1pbk1vZHVsZSwgc2VsZikucmVnaXN0ZXIoYXBwLCBv cHRpb25zLCBmaXJzdF9yZWdpc3RyYXRpb24pCiAKICAgICAgICAgZm9yIG1vZHVsZSBpbiBzZWxm LnN1Ym1vZHVsZXM6CisgICAgICAgICAgICBpZiBmaXJzdF9yZWdpc3RyYXRpb246CisgICAgICAg ICAgICAgICAgbW9kdWxlLnBhcmVudG1vZHVsZXMuYXBwZW5kKHNlbGYpCiAgICAgICAgICAgICBh cHAucmVnaXN0ZXJfYmx1ZXByaW50KG1vZHVsZSkKIAogICAgIGRlZiBnZXRfb3duX3N0eWxlc2hl ZXRzKHNlbGYpOgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdXRpbHMvZXhjZXB0aW9uLnB5IGIv d2ViL3BnYWRtaW4vdXRpbHMvZXhjZXB0aW9uLnB5CmluZGV4IDU3YzMyMjQuLjc3ZDU5ZGEgMTAw NjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3V0aWxzL2V4Y2VwdGlvbi5weQorKysgYi93ZWIvcGdhZG1p bi91dGlscy9leGNlcHRpb24ucHkKQEAgLTQwLDMgKzQwLDExIEBAIGNsYXNzIENvbm5lY3Rpb25M b3N0KEhUVFBFeGNlcHRpb24pOgogICAgICAgICAgICAgICAgICdjb25uX2lkJzogc2VsZi5jb25u X2lkCiAgICAgICAgICAgICB9CiAgICAgICAgICkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgor ICAgICAgICByZXR1cm4gIkNvbm5lY3Rpb24gKGlkICN7Mn0pIGxvc3QgZm9yIHRoZSBzZXJ2ZXIg KCN7MH0pIG9uICIgXAorICAgICAgICAgICAgICAgImRhdGFiYXNlICh7MX0pIi5mb3JtYXQoc2Vs Zi5zaWQsIHNlbGYuZGIsIHNlbGYuY29ubl9pZCkKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToK KyAgICAgICAgcmV0dXJuICJDb25uZWN0aW9uIChpZCAjezJ9KSBsb3N0IGZvciB0aGUgc2VydmVy ICgjezB9KSBvbiAiIFwKKyAgICAgICAgICAgICAgICJkYXRhYmFzZSAoezF9KSIuZm9ybWF0KHNl bGYuc2lkLCBzZWxmLmRiLCBzZWxmLmNvbm5faWQpCg== --f403045fe28c17e3ab05537b411b--