Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dMt29-0007cZ-CE for pgadmin-hackers@arkaria.postgresql.org; Mon, 19 Jun 2017 09:31:46 +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 1dMt28-00059P-QR for pgadmin-hackers@arkaria.postgresql.org; Mon, 19 Jun 2017 09:31:44 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1dMt28-00058q-59 for pgadmin-hackers@lists.postgresql.org; Mon, 19 Jun 2017 09:31:44 +0000 Received: from mail-pf0-x22b.google.com ([2607:f8b0:400e:c00::22b]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1dMt21-0008O8-Fr for pgadmin-hackers@postgresql.org; Mon, 19 Jun 2017 09:31:43 +0000 Received: by mail-pf0-x22b.google.com with SMTP id l89so51281629pfi.2 for ; Mon, 19 Jun 2017 02:31:36 -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=ugO81MMQjr/oqxnjhttFoj9MYsK8CkVMiJ8l2Wt1gTA=; b=aK/gUnwVnf2ognmB2qmXKbY/1dY1A2bwlmz89BqHR21p2SsWHXKgC7yFc6GkBlHlKG BHlvVPgzDF4UY3/v11olzW6IstfT/jnLdkYylFf6dnd5iJXVbVGNUdSI91CT2UpH87UJ DM0Yt6htqNi0ZV27rldZ0Nc3ga2YWzmG+9tqIOQonAI/xGFdUoCsJXVDJaQ0qDzGIhAZ P9UIuJj8cEVV/4NnT3M+W2YTgWgp4AGOaoICEmn6A8r8WGjrztZrl3NHMB8M2dCqjpIN TPnynabrsqCwENPM6CXw+YKoxYxhrUM/9UM8873rZ+kuSM0intqq0mx7XsPWtRiQrbbR 7J4Q== 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=ugO81MMQjr/oqxnjhttFoj9MYsK8CkVMiJ8l2Wt1gTA=; b=lINuudVhTDJH8V71ng2io8dOheoJZ4Xwg3viXInNBDkFNZ3pIjxIQ1oesQlFi5Kk+Q id5rL4HeZ9hPIqaAtitqSmrn6FwN8g3NqZj6JnDvcOMTVC6S3gH+5gO6zx6kGHId9WOj WAdgp34njNEOBSYsZoJ9pqIZeTlGlKKpYWx9rwmsO0H03+CEcsG9FRJPz2CYUAPlOBXY S5If1g2ZjAd1Ogn5XtDTozSeFw0OA4lCWCOiKA3dzb1JqODnlfZz9Gt0CVkZsr9nrg4h dCcPd3wBl4H32hXgDhGzeNDcbYqcn5mgIrFKJDmKBBin17s1qkqsOcnM3P+OlETw/zRP +iUg== X-Gm-Message-State: AKS2vOw0nrpClfPia1urK83jXnL/EQhNE+Ijwcr7fj/rdE0pEn7cwc4Z lycQIyQu0JAkTpRlYplKa03NlcmT6rlMI60= X-Received: by 10.84.231.141 with SMTP id g13mr28024492plk.157.1497864694108; Mon, 19 Jun 2017 02:31:34 -0700 (PDT) MIME-Version: 1.0 Received: by 10.100.184.72 with HTTP; Mon, 19 Jun 2017 02:31:32 -0700 (PDT) In-Reply-To: References: From: Akshay Joshi Date: Mon, 19 Jun 2017 15:01:32 +0530 Message-ID: Subject: Re: [pgadmin-hackers] Declarative partitioning in pgAdmin4 To: pgadmin-hackers Cc: Shirley Wang , Robert Eckhardt Content-Type: multipart/mixed; boundary="f403045fe28c03da6105524ccd0e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Unsubscribe: , Precedence: bulk --f403045fe28c03da6105524ccd0e Content-Type: multipart/related; boundary="f403045fe28c03da5f05524ccd0d" --f403045fe28c03da5f05524ccd0d Content-Type: multipart/alternative; boundary="f403045fe28c03da5c05524ccd0c" --f403045fe28c03da5c05524ccd0c Content-Type: text/plain; charset="UTF-8" Hi All Attached is the latest WIP patch. Following task is completed - User will be able to create partitioned table (Range and List) using columns and expression as partition key. - User will be able to create N partitions while creating the partitioned table itself. - User will be able to see SQL of all partitions (child tables) along with the partitioned table in SQL pane when select parent node. - Controls are disabled/hide from table dialog which are not supported by Partitioning. - User will be able to create/attach/detach N no of partitions from the parent table dialog. - User will be able to detach partition by selecting and clicking on "Detach Partition" menu. Visible only on partitions. Following tasks are remaining: - Refresh Tables/Partitions collection when any new node is created or removed from the collection. For example user will detach/create/attach N no of partitions from parent table in that case we will have to refresh the complete Tables/Partitions collection. *Need some suggestions how we can achieve it*. - Table dialog for child tables(Partitions). (Harshal working on it.) - Displaying Constraints, Indexes, Rules, Triggers collection/node when expanding partition node. (Harshal working on it.) Please review/run the latest patch and let me know your thoughts/suggestions on it. On Mon, Jun 19, 2017 at 11:29 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. > >> >> [image: coluns_partitioning.png] >> When is the 'In' column in the Partitions subnode enabled? >> > > In case of 'List' Partition. > >> >> 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. > >> >> >> >> On Thu, Jun 15, 2017 at 2:12 AM Akshay Joshi < >> akshay.joshi@enterprisedb.com> wrote: >> >>> On Wed, Jun 14, 2017 at 5:39 PM, Dave Page wrote: >>> >>>> >>>> >>>> On Wed, Jun 14, 2017 at 1:06 PM, Ashesh Vashi < >>>> ashesh.vashi@enterprisedb.com> wrote: >>>> >>>>> On Wed, Jun 14, 2017 at 1:59 PM, Dave Page wrote: >>>>> >>>>>> >>>>>> >>>>>> On Tue, Jun 13, 2017 at 2:59 PM, Akshay Joshi < >>>>>> akshay.joshi@enterprisedb.com> wrote: >>>>>> >>>>>>> Hi All >>>>>>> >>>>>>> For further implementation following task needs to be work upon: >>>>>>> >>>>>>> - How to parse and show partitions keys. For example user has >>>>>>> created below partitioned table >>>>>>> >>>>>>> CREATE TABLE public.sales >>>>>>> ( >>>>>>> country character varying COLLATE pg_catalog."default" NOT NULL, >>>>>>> sales bigint, >>>>>>> saledate date >>>>>>> ) PARTITION BY RANGE (*country, date_part('year'::text, sale date)*) >>>>>>> >>>>>>> When user open the properties dialog I am not able to figure out >>>>>>> how to parse keys(displayed in bold in above example) and show them in our >>>>>>> control that we used. For the time being I have hide that control in 'Edit' >>>>>>> mode (Refer Attach Partition.png) >>>>>>> >>>>>>> >>>>>> I assume psql with display that info with \dt or similar? What does >>>>>> it do? Failing that, look at pg_dump? >>>>>> >>>>> psql, and pg_dump use 'pg_get_partkeydef' function for reverse >>>>> engineering, and we too. >>>>> They don't need particular key information. >>>>> >>>>> In properties dialog, we need to find out - what individual partition >>>>> key is? (column/expression). >>>>> >>>>> Let me give an example. >>>>> I have a partition table with the following definition (with two >>>>> partition keys). >>>>> >>>>> *CREATE TABLE public.sales* >>>>> *(* >>>>> * country character varying COLLATE pg_catalog."default" NOT NULL,* >>>>> * sales bigint,* >>>>> * saledate date* >>>>> *) PARTITION BY RANGE (country, EXTRACT(year from saledate));* >>>>> >>>>> And, the following query will give as: >>>>> *SELECT relname, pg_get_partkeydef(oid) FROM pg_catalog.pg_class WHERE >>>>> relname like 'sal%';* >>>>> >>>>> relname | *pg_get_partkeydef* >>>>> ---------+---------------------------------------------------- >>>>> sales | *RANGE (country, date_part('year'::text, saledate))* >>>>> >>>>> Here - we have two option in edit mode. >>>>> 1. Parse the output of the '*pg_get_partkeydef'*, and identify all >>>>> individual keys, and its detailed information (i.e. column/expression) >>>>> 2. Show that output about the partition keys in static control, and >>>>> hide the Partition type, partition keys controls. >>>>> >>>>> I prefer the second option, as user can not modify the partition >>>>> keys/type (RANGE/LIST), and we will not have to write logic to parse the >>>>> keys from that output. >>>>> >>>>> What do you say? >>>>> >>>> >>>> I agree. >>>> >>> >>> I have modified the logic as per above suggestion. In create mode we >>> will show "Partition Type" and "Partition Keys", so that user will be able >>> to create partitioned table and in edit mode we will show "Partition >>> Scheme" in NoteControl, as it's been difficult to parse and identify >>> whether it is a column or expression. Please refer Create_Table.png. >>> >>> Apart from that as per discussion with Dave yesterday I have remove >>> the "Attach Partition" control and merge that functionality into >>> "Partitions" control. I have added one switch control with text >>> (Attach/Create). By default this control is disabled in create mode, while >>> in edit mode user can create/attach partitions. When user select create >>> then "Name" is input control and when user selects attach then "Name" is >>> select2 control containing list of all the suitable(with same columns, >>> datatype and oids ) tables to be attached. Refer Edit_Table.png >>> >>> I have also added one NoteControl at the bottom which will give >>> information about the Partitions control how to use that. Please correct >>> the string if it looks wrong. >>> >>>> >>>> >>>>> >>>>> -- Thanks, Ashesh >>>>> >>>>>> >>>>>> >>>>>>> >>>>>>> - *Support of sub partitioning*: To implement sub-partitioning, >>>>>>> specify the PARTITION BY clause in the commands used to create individual >>>>>>> partitions, for example: >>>>>>> - >>>>>>> >>>>>>> CREATE TABLE measurement_y2006 PARTITION OF measurement >>>>>>> FOR VALUES FROM ('2006-02-01') TO ('2006-03-01') >>>>>>> PARTITION BY RANGE (peaktemp); >>>>>>> >>>>>>> >>>>>>> To achieve above I have made some changes in GUI (Refer >>>>>>> Sub Partition.png). >>>>>>> *Complex and challenging part here is >>>>>>> "measurement_y2006" is partition of "measurement" and parent table for >>>>>>> other partitions too which user can create later. How we will going to show >>>>>>> this in browser tree? * >>>>>>> One option could be >>>>>>> Tables >>>>>>> ->measurement(table) >>>>>>> ->Partitions >>>>>>> ->measurement_y2006(Partition of measurement and >>>>>>> parent of p1) >>>>>>> ->Partitions >>>>>>> ->p1 >>>>>>> >>>>>> >>>>>> Urgh. But yeah. I think that makes logical sense. >>>>>> >>>>>> >>>>>>> >>>>>>> - *Attach Partitions*: To implement attach N partitions I have >>>>>>> made some changes in GUI( Refer Attach Partition.png). Attach >>>>>>> Partitions control will only be visible in "Edit" mode. >>>>>>> >>>>>>> I have only modified the UI changes, there are lots of work needs >>>>>>> to be done to complete that. >>>>>>> >>>>>> >>>>>> I don't think I'd include Attach on the dialog. I think it should be >>>>>> a separate menu option, with a simple dialogue to let the user choose the >>>>>> table to attach. >>>>>> >>>>>> The reason for that is that Attach is an action not a property. On >>>>>> the Properties panels we expect any changes we make to be the same the next >>>>>> time the dialogue is opened - e.g. if you toggle "Enable Trigger" to >>>>>> disabled and hit OK, then next time you open the dialogue you see the >>>>>> switch in the same position. With Attach, that's not the case - you'll list >>>>>> one or more tables to attach, hit OK, and when you next open the Properties >>>>>> dialogue, those partitions will be listed in the partition list, not the >>>>>> Attach list. >>>>>> >>>>>> >>>>>>> Please review the design. Suggestions/Comments are welcome. >>>>>>> >>>>>>> >>>>>>> On Tue, Jun 6, 2017 at 4:30 PM, Robert Eckhardt >>>>>> io> wrote: >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Tue, Jun 6, 2017 at 4:32 AM, Dave Page >>>>>>>> wrote: >>>>>>>> >>>>>>>>> >>>>>>>>> For roll up this pattern seems obvious, identify the n partitions >>>>>>>>>> you need/want to combine and then run a job to combine them. >>>>>>>>>> >>>>>>>>> >>>>>>>>> You're thinking Greenplum :-). There is no roll up in PostgreSQL, >>>>>>>>> unless you're thinking we should create such a feature in pgAdmin. >>>>>>>>> >>>>>>>>> Of course, I have no objection to extending what we do in PG to >>>>>>>>> add GP feature support, but let's start with PG. >>>>>>>>> >>>>>>>> >>>>>>>> No not at all. That was a very specific and consistent pattern >>>>>>>> described by users leveraging time based range partitions in Postgres. I'm >>>>>>>> not sure if that same use case will be supported with partitioning as >>>>>>>> implemented in Postgres 10 but it is a Postgres pattern. >>>>>>>> >>>>>>>> -- Rob >>>>>>>> >>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>>>> For other patterns such as creating indexes and such it requires >>>>>>>>>> a bit more thought. Generally users described wanting to treat all of the >>>>>>>>>> children like a single table (just like Oracle), however, other users >>>>>>>>>> described potentially modifying chunks of partitions differently depending >>>>>>>>>> on some criterion. This means that users will need to identify the subset >>>>>>>>>> they want to optimize and then ideally be able to act on them all at once. >>>>>>>>>> >>>>>>>>> >>>>>>>>> Right. >>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- Rob >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> So... it sounds like we're on the right lines :-) >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> For the former, this can be addressed by enabling users to >>>>>>>>>>>> modify one or more child partitions at the same time. For the latter, that >>>>>>>>>>>> is a workflow that might be addressed outside of the create table with >>>>>>>>>>>> partition workflow we're working on currently. >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> On Mon, Jun 5, 2017 at 5:21 AM Dave Page >>>>>>>>>>>> wrote: >>>>>>>>>>>> >>>>>>>>>>>>> On Fri, Jun 2, 2017 at 9:01 AM, Akshay Joshi < >>>>>>>>>>>>> akshay.joshi@enterprisedb.com> wrote: >>>>>>>>>>>>> >>>>>>>>>>>>>> Hi All >>>>>>>>>>>>>> >>>>>>>>>>>>>> Following are the further implementation updates to support >>>>>>>>>>>>>> Declarative Partitioning: >>>>>>>>>>>>>> >>>>>>>>>>>>>> - Show all the existing partitions of the parent table in >>>>>>>>>>>>>> Partitions tab (Refer Existing_Partitions.png) >>>>>>>>>>>>>> - Ability to create N partitions and detach existing >>>>>>>>>>>>>> partitions. Refer (Create_Detach_Partition.png), in this >>>>>>>>>>>>>> example I have detach two existing partition and create two new partitions. >>>>>>>>>>>>>> - Added "Detach Partition" menu to partitions node only >>>>>>>>>>>>>> and user will be able to detach from there as well. Refer (Detach. >>>>>>>>>>>>>> png) >>>>>>>>>>>>>> >>>>>>>>>>>>>> That's looking good to me :-) >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> On Wed, May 24, 2017 at 8:00 PM, Robert Eckhardt < >>>>>>>>>>>>>> reckhardt@pivotal.io> wrote: >>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Wed, May 24, 2017 at 3:35 AM, Akshay Joshi < >>>>>>>>>>>>>>> akshay.joshi@enterprisedb.com> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Taking average of two columns is just an >>>>>>>>>>>>>>>> example/representation of expression, there is no use case of that. As I am >>>>>>>>>>>>>>>> also in learning phase. Below are some use case that I can think of: >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> - >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Partitions based on first letter of their username >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> CREATE TABLE users ( >>>>>>>>>>>>>>>> id serial not null, >>>>>>>>>>>>>>>> username text not null, >>>>>>>>>>>>>>>> password text, >>>>>>>>>>>>>>>> created_on timestamptz not null, >>>>>>>>>>>>>>>> last_logged_on timestamptz not null >>>>>>>>>>>>>>>> )PARTITION BY RANGE ( lower( left( username, 1 ) ) ); >>>>>>>>>>>>>>>> CREATE TABLE users_0 >>>>>>>>>>>>>>>> partition of users (id, primary key (id), unique (username)) >>>>>>>>>>>>>>>> for values from ('a') to ('g'); >>>>>>>>>>>>>>>> CREATE TABLE users_1 >>>>>>>>>>>>>>>> partition of users (id, primary key (id), unique (username)) >>>>>>>>>>>>>>>> for values from ('g') to (unbounded); >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> - Partition based on country's sale for each month of >>>>>>>>>>>>>>>> an year. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> CREATE TABLE public.sales >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> ( >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> country text NOT NULL, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> sales bigint NOT NULL, >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> saledate date >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> ) PARTITION BY RANGE (country, (extract (YEAR FROM saledate)), >>>>>>>>>>>>>>>> (extract(MONTH FROM saledate))) >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> CREATE TABLE public.sale_usa_2017_jan PARTITION OF sales >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> FOR VALUES FROM ('usa', 2017, 01) TO ('usa', 2017, 02); >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> CREATE TABLE public.sale_india_2017_jan PARTITION OF sales >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> FOR VALUES FROM ('india', 2017, 01) TO ('india', 2017, >>>>>>>>>>>>>>>> 02); >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> CREATE TABLE public.sale_uk_2017_jan PARTITION OF sales >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> FOR VALUES FROM ('uk', 2017, 01) TO ('uk', 2017, 02); >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> INSERT INTO sales VALUES ('india', 10000, '2017-1-15'); >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> INSERT INTO sales VALUES ('uk', 20000, '2017-1-08'); >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> INSERT INTO sales VALUES ('usa', 30000, '2017-1-10'); >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>> Apart from above there may be N number of use cases that >>>>>>>>>>>>>>>> depends on specific requirement of user. >>>>>>>>>>>>>>>> >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Thank you for the example, you are absolutely correct and we >>>>>>>>>>>>>>> were confused. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Given our new found understanding do you mind if we iterate >>>>>>>>>>>>>>> a bit on the UI/UX? What we were suggesting with the daily/monthly/yearly >>>>>>>>>>>>>>> drop down was a specific example of an expression. Given that fact that >>>>>>>>>>>>>>> doesn't seem to be required in an MVP, however, I do think a more >>>>>>>>>>>>>>> interactive experience between the definition of the child partitions and >>>>>>>>>>>>>>> the creation of the partitions would be optimal. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I'm not sure where you are with respect to implementing the >>>>>>>>>>>>>>> UI but I'd love to float some ideas and mock ups past you. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> -- Rob >>>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> *Akshay Joshi* >>>>>>>>>>>>>> *Principal Software Engineer * >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> *Phone: +91 20-3058-9517 <+91%2020%203058%209517>Mobile: +91 >>>>>>>>>>>>>> 976-788-8246 <+91%2097678%2088246>* >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>>> -- >>>>>>>>>>>>>> Sent via pgadmin-hackers mailing list ( >>>>>>>>>>>>>> pgadmin-hackers@postgresql.org) >>>>>>>>>>>>>> To make changes to your subscription: >>>>>>>>>>>>>> http://www.postgresql.org/mailpref/pgadmin-hackers >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> Dave Page >>>>>>>>>>>>> >>>>>>>>>>>>> Blog: http://pgsnake.blogspot.com >>>>>>>>>>>>> Twitter: @pgsnake >>>>>>>>>>>>> >>>>>>>>>>>>> EnterpriseDB UK: http://www.enterprisedb.com >>>>>>>>>>>>> The Enterprise PostgreSQL Company >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> Dave Page >>>>>>>>>>> Blog: http://pgsnake.blogspot.com >>>>>>>>>>> Twitter: @pgsnake >>>>>>>>>>> >>>>>>>>>>> EnterpriseDB UK: http://www.enterprisedb.com >>>>>>>>>>> The Enterprise PostgreSQL Company >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Dave Page >>>>>>>>> Blog: http://pgsnake.blogspot.com >>>>>>>>> Twitter: @pgsnake >>>>>>>>> >>>>>>>>> EnterpriseDB UK: http://www.enterprisedb.com >>>>>>>>> The Enterprise PostgreSQL Company >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> >>>>>>> -- >>>>>>> *Akshay Joshi* >>>>>>> *Principal Software Engineer * >>>>>>> >>>>>>> >>>>>>> >>>>>>> *Phone: +91 20-3058-9517 <+91%2020%203058%209517>Mobile: +91 >>>>>>> 976-788-8246 <+91%2097678%2088246>* >>>>>>> >>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Dave Page >>>>>> Blog: http://pgsnake.blogspot.com >>>>>> Twitter: @pgsnake >>>>>> >>>>>> EnterpriseDB UK: http://www.enterprisedb.com >>>>>> The Enterprise PostgreSQL Company >>>>>> >>>>> >>>>> >>>> >>>> >>>> -- >>>> Dave Page >>>> Blog: http://pgsnake.blogspot.com >>>> Twitter: @pgsnake >>>> >>>> EnterpriseDB UK: http://www.enterprisedb.com >>>> The Enterprise PostgreSQL Company >>>> >>> >>> >>> >>> -- >>> *Akshay Joshi* >>> *Principal Software Engineer * >>> >>> >>> >>> *Phone: +91 20-3058-9517 <+91%2020%203058%209517>Mobile: +91 >>> 976-788-8246 <+91%2097678%2088246>* >>> >> > > > -- > *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* --f403045fe28c03da5c05524ccd0c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi All=C2=A0

Attached is the latest WIP= patch. Following task is completed
  • User will be able to = create partitioned table (Range and List) using columns and expression as p= artition key.
  • User will be able to create N partitions while creati= ng the partitioned table itself.
  • User will be able to see SQL o= f all partitions (child tables) along with the partitioned table in SQL pan= e when select parent node.
  • Controls are disabled/hide from table di= alog which are not supported by Partitioning.
  • User will be able to = create/attach/detach N no of partitions from the parent table dialog.
  • <= li>User will be able to detach partition by selecting and clicking on "= ;Detach Partition" menu. Visible only on partitions.
Followin= g tasks are remaining:
  • Refresh Tables/Partitions collecti= on when any new node is created or removed from the collection. For example= user will detach/create/attach N no of partitions from parent table in tha= t case we will have to refresh the complete Tables/Partitions collection. <= b>Need some suggestions how we can achieve it.=C2=A0
  • Table dial= og for child tables(Partitions). (Harshal working on it.)
  • Displayin= g Constraints, Indexes, Rules, Triggers collection/node when expanding part= ition node.=C2=A0(Harshal working on it.)
Please review/run the la= test patch and let me know your thoughts/suggestions on it.
=

On Mon, Jun 19, 2= 017 at 11:29 AM, Akshay Joshi <akshay.joshi@enterprisedb.com> wrote:

On Fri, Jun 16, 2017 at 11:16 PM, Shirley Wang <swang@pivotal.io> wrote:
Looks good.= I noticed people clicking back and forth to the columns tab to remember wh= ich columns they've created while filling out the Expressions column. I= t 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 th= an a drop down.

=C2=A0 =C2=A0I= think we should not duplicate that data as we already have all the informa= tion on "Columns" tab and by providing drop down user can select = columns from there only.=C2=A0

Also, I think the fields some= one 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 t= hey need to fill out both fields.

=C2=A0 =C2=A0We can't, because user can select one column and= provide an expression as partition key in this case we will have to show b= oth 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. =C2=A0

=3D"coluns_partitioning.png"
<= div>When is the 'In' column in the Partitions subnode enabled?=C2= =A0

=C2=A0 =C2=A0 In cas= e of 'List' Partition.=C2=A0

For the NoteControl on = the bottom, what do 'Mode Control' or 'Attach Mode' refer t= o? And how can I tell the difference between 'Create Mode' and '= ;Edit Mode'?

=C2=A0 = =C2=A0'Mode control' is a switch control in subnode control that sh= ould 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 o= f '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 at= tached.=C2=A0

<= div>

On Thu, Jun 1= 5, 2017 at 2:12 AM Akshay Joshi <akshay.joshi@enterprisedb.com> wrot= e:
On Wed, Jun 14, 2017 at 5:39 PM, Dav= e Page <dpage@pgadmin.org> wro= te:


On Wed, Jun 14, 2017 a= t 1:06 PM, Ashesh Vashi <ashesh.vashi@enterprisedb.com> wrote:
On Wed, Jun 14, 201= 7 at 1:59 PM, Dave Page <dpage@pgadmin.org> wrote:


O= n Tue, Jun 13, 2017 at 2:59 PM, Akshay Joshi <akshay.joshi@en= terprisedb.com> wrote:
Hi All=C2=A0

For further implementation following task needs = to be work upon:
  • How to parse and show partitions keys. F= or example user has created below partitioned table=C2=A0
CR= EATE TABLE public.sales
(
=C2=A0 =C2=A0 country charact= er varying COLLATE pg_catalog."default" NOT NULL,
=C2= =A0 =C2=A0 sales bigint,
=C2=A0 =C2=A0 saledate date
) PARTITION BY RANGE (country, date_part('year'::text, s= ale date))

When user open the properties dial= og I am not able to figure out how to parse keys(displayed in bold i= n above example) and show them in our control that we used. For the time be= ing I have hide that control in 'Edit' mode (Refer Attach Partition= .p= ng)

I assu= me psql with display that info with \dt or similar? What does it do? Failin= g that, look at pg_dump?
ps= ql, and pg_dump use 'pg_get_partkeydef' function for reverse engineering, and we too.
They don'= ;t need particular key information.

In properties dialog, we need to find out - what= individual partition key is? (column/expression).

Let me give an example.
I have a partition table with the following definition (with two partiti= on keys).

CREATE TABLE public.sales
(
= =C2=A0 =C2=A0 coun= try character varying COLLATE pg_catalog."default" NOT NULL,
= =C2=A0 =C2=A0 sales bigint,
=C2=A0 =C2=A0 saledate date
=
) PART= ITION BY RANGE (country, EXTRACT(year from saledate));

And, the following query will give as:=C2=A0
<= font face=3D"monospace, monospace" color=3D"#444444">SELECT relname, pg_get= _partkeydef(oid) FROM pg_catalog.pg_class WHERE relname like 'sal%'= ;

=C2=A0relname | =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = pg_get_partkeydef
---------+---------------------------------------= -------------
=C2=A0sales =C2=A0 | RANGE (country, date_part('year&= #39;::text, saledate))

Here - we = have two option in edit mode.
1. Parse the output of the =C2=A0&#= 39;pg_get_partkeyd= ef', and identify all individual keys, and its detailed info= rmation (i.e. column/expression)
2. Show that output about the pa= rtition keys in static control, and hide the Partition type, partition keys= controls.

I prefer the second option, as user can= not modify the partition keys/type (RANGE/LIST), and we will not have to w= rite logic to parse the keys from that output.

Wha= t do you say?

I agree.

=C2=A0 =C2=A0I have modified the logic as per above suggestion. = In create mode we will show "Partition Type" and "Partition = Keys", so that user will be able to create partitioned table and in ed= it mode we will show "Partition Scheme" in NoteControl, as it's been difficult to parse and identify whether it is a colu= mn or expression. Please refer Create_Table.png.=C2=A0
=

=C2=A0 Apart from that as per discussion with Dave yest= erday I have remove the "Attach Partition" control and merge that= functionality into "Partitions" control. I have added one switch= control with text (Attach/Create). By default this control is disabled in = create mode, while in edit mode user can create/attach partitions. When use= r select create then "Name" is input control and when user select= s attach then "Name" is select2 control containing list of all th= e suitable(with same columns, datatype and oids ) tables to be attached. Refer Edit_Table.png
<= br>
=C2=A0I have also added one NoteControl at the bottom which w= ill give information about the Partitions control how to use that. Please c= orrect the string if it looks wrong. =C2=A0 =C2=A0 =C2=A0 =C2=A0
=C2=A0

-- Thanks, Ashesh
=C2=A0
  • Support of sub partitioning:=C2= =A0To implement sub-partitioning, specify the PARTITION BY clause in the co= mmands used to create individual partitions, for example:
  • CREATE TABLE measurement_y2006 PARTITION OF measurement
        FOR VALUES FROM ('2006-02-01') TO ('2006-03-01')
        PARTITION BY RANGE (peaktemp);
=C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0To achieve above I have made some changes in GUI (Refe= r Sub Partition.png).=C2=A0
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0Complex and challenging part here is "measurement_y2006&q= uot; is partition of "measurement" and parent table for other par= titions too which user can create later. How we will going to show this in = browser tree?=C2=A0
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0One option could be
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0Tables
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0->me= asurement(table)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0->Partitions
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0->measurement_y2006(Partition of measurement and par= ent of p1)=C2=A0
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0->Partitions
=C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0->p1=C2=A0

Urgh. But yeah. I think that makes lo= gical sense.
=C2=A0
  • Attach= Partitions: To implement attach N partitions I have made some changes = in GUI( Refer=C2=A0Attach Partition.png). Attach Partitions control wi= ll only be visible in "Edit" mode.
I have only modi= fied the UI changes, there are lots of work needs to be done to comple= te that. =C2=A0

I = don't think I'd include Attach on the dialog. I think it should be = a separate menu option, with a simple dialogue to let the user choose the t= able to attach.

The reason for that is that Attach= is an action not a property. On the Properties panels we expect any change= s we make to be the same the next time the dialogue is opened - e.g. if you= toggle "Enable Trigger" to disabled and hit OK, then next time y= ou open the dialogue you see the switch in the same position. With Attach, = that's not the case - you'll list one or more tables to attach, hit= OK, and when you next open the Properties dialogue, those partitions will = be listed in the partition list, not the Attach list.
=C2=A0
Please review the design. Suggestions/Comm= ents are welcome.
=C2=A0=C2=A0

On Tue, Jun 6, 2017 at 4:30 PM, Robert Eckhardt <reckhardt<= /span>@pivotal.io> wrote:


=
On Tue, Jun 6, 2017 at 4:32 AM, Dave Page = <dpage@pgadmin.org> wrote:

For roll up this pattern seems obvious, identify the n partit= ions you need/want to combine and then run a job to combine them.=C2=A0

You're thin= king Greenplum :-). There is no roll up in PostgreSQL, unless you're th= inking we should create such a feature in pgAdmin.

Of course, I have no objection to extending what we do in PG to add GP fea= ture support, but let's start with PG.

No not at all. That was a very specific and = consistent pattern described by users leveraging time based range partition= s in Postgres. I'm not sure if that same use case will be supported wit= h partitioning as implemented in Postgres 10 but it is a Postgres pattern.= =C2=A0

-- Rob
=C2=A0
=C2=A0

For other patterns such as creating indexes and such i= t requires a bit more thought. Generally users described wanting to treat a= ll of the children like a single table (just like Oracle), however, other u= sers described potentially modifying chunks of partitions differently depen= ding on some criterion. This means that users will need to identify the sub= set they want to optimize and then ideally be able to act on them all at on= ce.=C2=A0

Ri= ght.
=C2=A0
<= br>
-- Rob




=C2=A0

So... it sounds like we're on the = right lines :-)
=C2=A0

For the former, this can be addressed by= enabling users to modify one or more child partitions at the same time. Fo= r the latter, that is a workflow that might be addressed outside of the cre= ate table with partition workflow we're working on currently.=C2=A0




<= div class=3D"m_6667015591871817771m_5847031722815338572m_662741793254894434= 1m_250602670466465012m_6065641664552352939gmail-m_4514327467440529168m_-858= 8986124962921849gmail-m_-280870434934732704m_-2770180097690768620m_-2259689= 550879110169gmail-m_-5017812971044198737m_5818726432971483358m_877674250733= 5498506m_8850063569488123921m_-2609497184265763028m_-8370408843946770147h5"= >
On Mon, Jun 5, 2017 at 5:2= 1 AM Dave Page <d= page@pgadmin.org> wrote:
On Fri, Jun 2, 2017 at 9:01 AM, Akshay Joshi = <aksh= ay.joshi@enterprisedb.com> wrote:
Hi All=C2=A0

Following are the further implementation updates to support Declarat= ive Partitioning:
  • Show all the existing partitions of the= parent table in Partitions tab (Refer Existing_Partitions.png)
  • Abi= lity to create N partitions and detach existing partitions. Refer (Create_D= etach_Partition.png), in this example I have detach two existing partition = and create two new partitions.
  • Added "Detach Partition" m= enu to partitions node only and user will be able to detach from there as w= ell. Refer (Detach.png) =C2=A0=C2=A0
That's looking good to me :-)

= =C2=A0
=

=C2=A0 =C2=A0Apart from above there may be N number of u= se cases that depends on specific requirement of user.=C2=A0




<= /div>



-= -


--
Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-ha= ckers




--
Dave Page

Blog: http://pgsnake.blogspot.com
Twitter: @pgsnak= e

EnterpriseDB UK: http://www.enterprise= db.com
The Enterprise PostgreSQL Company



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

E= nterpriseDB UK: h= ttp://www.enterprisedb.com
The Enterprise PostgreSQL Company




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

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Compan= y




--
Akshay Joshi
Principal Software Engineer=C2=A0





--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake
EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company




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

Ent= erpriseDB UK: htt= p://www.enterprisedb.com
The Enterprise PostgreSQL Company
=


--
Akshay Joshi
P= rincipal Software Engineer=C2=A0


Phone: +91 20-3058-9517
Mobile: +91 976-788-8246



--
Akshay Joshi
Principal Software = Engineer=C2=A0

<= /font>

=
Phone: +91 20-3058-9517
Mobile: +91 976-788-8246



--
Akshay Joshi


<= b>Phone: +91 20-3058-9517
Mobile: +91 976-788= -8246
--f403045fe28c03da5c05524ccd0c-- --f403045fe28c03da5f05524ccd0d 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 --f403045fe28c03da5f05524ccd0d-- --f403045fe28c03da6105524ccd0e Content-Type: application/octet-stream; name="Partition_WIP_v3.patch" Content-Disposition: attachment; filename="Partition_WIP_v3.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j43xyjx40 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9fX2luaXRfXy5weSBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIv c2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9fX2luaXRfXy5w eQppbmRleCBmNmZhNjVlLi5iNGQ5OWQ3IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvX19pbml0X18u cHkKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJh c2VzL3NjaGVtYXMvdGFibGVzL19faW5pdF9fLnB5CkBAIC0xMSw3ICsxMSw2IEBACiAKIGltcG9y dCBzaW1wbGVqc29uIGFzIGpzb24KIGltcG9ydCByZQotZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHdy YXBzCiAKIGltcG9ydCBwZ2FkbWluLmJyb3dzZXIuc2VydmVyX2dyb3Vwcy5zZXJ2ZXJzLmRhdGFi YXNlcyBhcyBkYXRhYmFzZQogZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRlLCByZXF1 ZXN0LCBqc29uaWZ5CkBAIC0yMSwxMiArMjAsMTEgQEAgZnJvbSBwZ2FkbWluLmJyb3dzZXIuc2Vy dmVyX2dyb3Vwcy5zZXJ2ZXJzLmRhdGFiYXNlcy5zY2hlbWFzLnV0aWxzIFwKICAgICB0cmlnZ2Vy X2RlZmluaXRpb24sIHBhcnNlX3J1bGVfZGVmaW5pdGlvbgogZnJvbSBwZ2FkbWluLmJyb3dzZXIu c2VydmVyX2dyb3Vwcy5zZXJ2ZXJzLnV0aWxzIGltcG9ydCBwYXJzZV9wcml2X2Zyb21fZGIsIFwK ICAgICBwYXJzZV9wcml2X3RvX2RiCi1mcm9tIHBnYWRtaW4uYnJvd3Nlci51dGlscyBpbXBvcnQg UEdDaGlsZE5vZGVWaWV3CiBmcm9tIHBnYWRtaW4udXRpbHMuYWpheCBpbXBvcnQgbWFrZV9qc29u X3Jlc3BvbnNlLCBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IsIFwKICAgICBtYWtlX3Jlc3BvbnNlIGFz IGFqYXhfcmVzcG9uc2UsIGdvbmUKIGZyb20gcGdhZG1pbi51dGlscy5kcml2ZXIgaW1wb3J0IGdl dF9kcml2ZXIKLQogZnJvbSBjb25maWcgaW1wb3J0IFBHX0RFRkFVTFRfRFJJVkVSCitmcm9tIC51 dGlscyBpbXBvcnQgQmFzZVRhYmxlVmlldwogCiAKIGNsYXNzIFRhYmxlTW9kdWxlKFNjaGVtYUNo aWxkTW9kdWxlKToKQEAgLTgzLDcgKzgxLDcgQEAgY2xhc3MgVGFibGVNb2R1bGUoU2NoZW1hQ2hp bGRNb2R1bGUpOgogYmx1ZXByaW50ID0gVGFibGVNb2R1bGUoX19uYW1lX18pCiAKIAotY2xhc3Mg VGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdz KToKK2NsYXNzIFRhYmxlVmlldyhCYXNlVGFibGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVt U2V0dGluZ3MpOgogICAgICIiIgogICAgIFRoaXMgY2xhc3MgaXMgcmVzcG9uc2libGUgZm9yIGdl bmVyYXRpbmcgcm91dGVzIGZvciBUYWJsZSBub2RlCiAKQEAgLTk2LDExICs5NCw2IEBAIGNsYXNz IFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5n cyk6CiAgICAgICAtIFRoaXMgcHJvcGVydHkgZGVmaW5lcyAoaWYgamF2YXNjcmlwdCkgZXhpc3Rz IGZvciB0aGlzIG5vZGUuCiAgICAgICAgIE92ZXJyaWRlIHRoaXMgcHJvcGVydHkgZm9yIHlvdXIg b3duIGxvZ2ljCiAKLSAgICAqIGNoZWNrX3ByZWNvbmRpdGlvbigpCi0gICAgICAtIFRoaXMgZnVu Y3Rpb24gd2lsbCBiZWhhdmUgYXMgYSBkZWNvcmF0b3Igd2hpY2ggd2lsbCBjaGVja3MKLSAgICAg ICAgZGF0YWJhc2UgY29ubmVjdGlvbiBiZWZvcmUgcnVubmluZyB2aWV3LCBpdCB3aWxsIGFsc28g YXR0YWNoZXMKLSAgICAgICAgbWFuYWdlcixjb25uICYgdGVtcGxhdGVfcGF0aCBwcm9wZXJ0aWVz IHRvIHNlbGYKLQogICAgICogbGlzdCgpCiAgICAgICAtIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0 byBsaXN0IGFsbCB0aGUgVGFibGUgbm9kZXMgd2l0aGluIHRoYXQKICAgICAgIGNvbGxlY3Rpb24u CkBAIC0xNDksMTAgKzE0Miw2IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERh dGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAtIFRoaXMgZnVuY3Rpb24gd2ls bCBnZW5lcmF0ZSBkZXBlbmRlbnQgbGlzdCB0byBzaG93IGl0IGluIGRlcGVuZGVudAogICAgICAg ICBwYW5lIGZvciB0aGUgc2VsZWN0ZWQgbm9kZS4KIAotICAgICogX2Zvcm1hdHRlcihkYXRhLCB0 aWQpCi0gICAgICAtIEl0IHdpbGwgcmV0dXJuIGZvcm1hdHRlZCBvdXRwdXQgb2YgcXVlcnkgcmVz dWx0Ci0gICAgICAgIGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0Ci0KICAgICAqIGdldF90eXBl cyhzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkKQogICAgICAgLSBUaGlzIGZ1bmN0aW9uIHdpbGwg cmV0dXJuIGxpc3Qgb2YgdHlwZXMgYXZhaWxhYmxlIGZvciBjb2x1bW5zIG5vZGUKICAgICAgICAg dmlhIEFKQVggcmVzcG9uc2UKQEAgLTE3OCwxOSArMTY3LDYgQEAgY2xhc3MgVGFibGVWaWV3KFBH Q2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAqIGdl dF90b2FzdF90YWJsZV92YWN1dW0oZ2lkLCBzaWQsIGRpZCwgc2NpZD1Ob25lLCB0aWQ9Tm9uZSkK ICAgICAgIC0gRmV0Y2ggdGhlIGRlZmF1bHQgdmFsdWVzIGZvciB0b2FzdCB0YWJsZSBhdXRvLXZh Y3V1bQogCi0gICAgKiBfY29sdW1uc19mb3JtYXR0ZXIodGlkLCBkYXRhKToKLSAgICAgIC0gSXQg d2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1bHQKLSAgICAgICAgYXMg cGVyIGNsaWVudCBtb2RlbCBmb3JtYXQgZm9yIGNvbHVtbiBub2RlCi0KLSAgICAqIF9pbmRleF9j b25zdHJhaW50c19mb3JtYXR0ZXIoc2VsZiwgZGlkLCB0aWQsIGRhdGEpOgotICAgICAgLSBJdCB3 aWxsIHJldHVybiBmb3JtYXR0ZWQgb3V0cHV0IG9mIHF1ZXJ5IHJlc3VsdAotICAgICAgICBhcyBw ZXIgY2xpZW50IG1vZGVsIGZvcm1hdCBmb3IgaW5kZXggY29uc3RyYWludCBub2RlCi0KLSAgICAq IF9jbHR5cGVfZm9ybWF0dGVyKHR5cGUpOiAoc3RhdGljbWV0aG9kKQotICAgICAgLSBXZSBuZWVk IHRvIHJlbW92ZSBbXSBmcm9tIHR5cGUgYW5kIGFwcGVuZCBpdAotICAgICAgICBhZnRlciBsZW5n dGgvcHJlY2lzaW9uIHNvIHdlIHdpbGwgc2VuZCBmbGFnIGZvcgotICAgICAgICBzcWwgdGVtcGxh dGUKLQogICAgICogX3BhcnNlX2Zvcm1hdF9jb2x1bW5zKHNlbGYsIGRhdGEsIG1vZGU9Tm9uZSk6 CiAgICAgICAgLSBUaGlzIGZ1bmN0aW9uIHdpbGwgcGFyc2UgYW5kIHJldHVybiBmb3JtYXR0ZWQg bGlzdCBvZiBjb2x1bW5zCiAgICAgICAgICBhZGRlZCBieSB1c2VyCkBAIC0yNTIsNzEgKzIyOCwx NCBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFj dXVtU2V0dGluZ3MpOgogICAgICAgICAnZ2V0X2FjY2Vzc19tZXRob2RzJzogW3t9LCB7J2dldCc6 ICdnZXRfYWNjZXNzX21ldGhvZHMnfV0sCiAgICAgICAgICdnZXRfb3Blcl9jbGFzcyc6IFt7fSwg eydnZXQnOiAnZ2V0X29wZXJfY2xhc3MnfV0sCiAgICAgICAgICdnZXRfb3BlcmF0b3InOiBbe30s IHsnZ2V0JzogJ2dldF9vcGVyYXRvcid9XSwKKyAgICAgICAgJ2dldF9hdHRhY2hfdGFibGVzJzog W3snZ2V0JzogJ2dldF9hdHRhY2hfdGFibGVzJ30seydnZXQnOiAnZ2V0X2F0dGFjaF90YWJsZXMn fV0sCiAgICAgICAgICdzZWxlY3Rfc3FsJzogW3snZ2V0JzogJ3NlbGVjdF9zcWwnfV0sCiAgICAg ICAgICdpbnNlcnRfc3FsJzogW3snZ2V0JzogJ2luc2VydF9zcWwnfV0sCiAgICAgICAgICd1cGRh dGVfc3FsJzogW3snZ2V0JzogJ3VwZGF0ZV9zcWwnfV0sCiAgICAgICAgICdkZWxldGVfc3FsJzog W3snZ2V0JzogJ2RlbGV0ZV9zcWwnfV0KLQogICAgIH0pCiAKLSAgICBkZWYgY2hlY2tfcHJlY29u ZGl0aW9uKGYpOgotICAgICAgICAiIiIKLSAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlaGF2 ZSBhcyBhIGRlY29yYXRvciB3aGljaCB3aWxsIGNoZWNrcwotICAgICAgICBkYXRhYmFzZSBjb25u ZWN0aW9uIGJlZm9yZSBydW5uaW5nIHZpZXcsIGl0IHdpbGwgYWxzbyBhdHRhY2hlcwotICAgICAg ICBtYW5hZ2VyLGNvbm4gJiB0ZW1wbGF0ZV9wYXRoIHByb3BlcnRpZXMgdG8gc2VsZgotICAgICAg ICAiIiIKLQotICAgICAgICBAd3JhcHMoZikKLSAgICAgICAgZGVmIHdyYXAoKmFyZ3MsICoqa3dh cmdzKToKLSAgICAgICAgICAgICMgSGVyZSBhcmdzWzBdIHdpbGwgaG9sZCBzZWxmICYga3dhcmdz IHdpbGwgaG9sZCBnaWQsc2lkLGRpZAotICAgICAgICAgICAgc2VsZiA9IGFyZ3NbMF0KLSAgICAg ICAgICAgIGRyaXZlciA9IGdldF9kcml2ZXIoUEdfREVGQVVMVF9EUklWRVIpCi0gICAgICAgICAg ICBkaWQgPSBrd2FyZ3NbJ2RpZCddCi0gICAgICAgICAgICBzZWxmLm1hbmFnZXIgPSBkcml2ZXIu Y29ubmVjdGlvbl9tYW5hZ2VyKGt3YXJnc1snc2lkJ10pCi0gICAgICAgICAgICBzZWxmLmNvbm4g PSBzZWxmLm1hbmFnZXIuY29ubmVjdGlvbihkaWQ9a3dhcmdzWydkaWQnXSkKLSAgICAgICAgICAg IHNlbGYucXRJZGVudCA9IGRyaXZlci5xdElkZW50Ci0gICAgICAgICAgICBzZWxmLnF0VHlwZUlk ZW50ID0gZHJpdmVyLnF0VHlwZUlkZW50Ci0gICAgICAgICAgICAjIFdlIG5lZWQgZGF0bGFzdHN5 c29pZCB0byBjaGVjayBpZiBjdXJyZW50IHRhYmxlIGlzIHN5c3RlbSB0YWJsZQotICAgICAgICAg ICAgc2VsZi5kYXRsYXN0c3lzb2lkID0gc2VsZi5tYW5hZ2VyLmRiX2luZm9bCi0gICAgICAgICAg ICAgICAgZGlkCi0gICAgICAgICAgICBdWydkYXRsYXN0c3lzb2lkJ10gaWYgc2VsZi5tYW5hZ2Vy LmRiX2luZm8gaXMgbm90IE5vbmUgYW5kIFwKLSAgICAgICAgICAgICAgICBkaWQgaW4gc2VsZi5t YW5hZ2VyLmRiX2luZm8gZWxzZSAwCi0KLSAgICAgICAgICAgIHZlciA9IHNlbGYubWFuYWdlci52 ZXJzaW9uCi0gICAgICAgICAgICAjIFNldCB0aGUgdGVtcGxhdGUgcGF0aCBmb3IgdGhlIFNRTCBz Y3JpcHRzCi0gICAgICAgICAgICBzZWxmLnRlbXBsYXRlX3BhdGggPSAndGFibGUvc3FsLyN7MH0j Jy5mb3JtYXQodmVyKQotCi0gICAgICAgICAgICAjIFRlbXBsYXRlIGZvciBDb2x1bW4gLGNoZWNr IGNvbnN0cmFpbnQgYW5kIGV4Y2x1c2lvbiBjb25zdHJhaW50IG5vZGUKLSAgICAgICAgICAgIHNl bGYuY29sdW1uX3RlbXBsYXRlX3BhdGggPSAnY29sdW1uL3NxbC8jezB9IycuZm9ybWF0KHZlcikK LSAgICAgICAgICAgIHNlbGYuY2hlY2tfY29uc3RyYWludF90ZW1wbGF0ZV9wYXRoID0gJ2NoZWNr X2NvbnN0cmFpbnQvc3FsLyN7MH0jJy5mb3JtYXQodmVyKQotICAgICAgICAgICAgc2VsZi5leGNs dXNpb25fY29uc3RyYWludF90ZW1wbGF0ZV9wYXRoID0gJ2V4Y2x1c2lvbl9jb25zdHJhaW50L3Nx bC8jezB9IycuZm9ybWF0KHZlcikKLQotICAgICAgICAgICAgIyBUZW1wbGF0ZSBmb3IgUEsgJiBV bmlxdWUgY29uc3RyYWludCBub2RlCi0gICAgICAgICAgICBzZWxmLmluZGV4X2NvbnN0cmFpbnRf dGVtcGxhdGVfcGF0aCA9ICdpbmRleF9jb25zdHJhaW50L3NxbCcKLQotICAgICAgICAgICAgIyBU ZW1wbGF0ZSBmb3IgZm9yZWlnbiBrZXkgY29uc3RyYWludCBub2RlCi0gICAgICAgICAgICBzZWxm LmZvcmVpZ25fa2V5X3RlbXBsYXRlX3BhdGggPSAnZm9yZWlnbl9rZXkvc3FsLyN7MH0jJy5mb3Jt YXQodmVyKQotCi0gICAgICAgICAgICAjIFRlbXBsYXRlIGZvciBpbmRleCBub2RlCi0gICAgICAg ICAgICBzZWxmLmluZGV4X3RlbXBsYXRlX3BhdGggPSAnaW5kZXgvc3FsLyN7MH0jJy5mb3JtYXQo dmVyKQotCi0gICAgICAgICAgICAjIFRlbXBsYXRlIGZvciB0cmlnZ2VyIG5vZGUKLSAgICAgICAg ICAgIHNlbGYudHJpZ2dlcl90ZW1wbGF0ZV9wYXRoID0gJ3RyaWdnZXIvc3FsLyN7MH0jJy5mb3Jt YXQodmVyKQotCi0gICAgICAgICAgICAjIFRlbXBsYXRlIGZvciBydWxlcyBub2RlCi0gICAgICAg ICAgICBzZWxmLnJ1bGVzX3RlbXBsYXRlX3BhdGggPSAncnVsZXMvc3FsJwotCi0gICAgICAgICAg ICAjIFN1cHBvcnRlZCBBQ0wgZm9yIHRhYmxlCi0gICAgICAgICAgICBzZWxmLmFjbCA9IFsnYScs ICdyJywgJ3cnLCAnZCcsICdEJywgJ3gnLCAndCddCi0KLSAgICAgICAgICAgICMgU3VwcG9ydGVk IEFDTCBmb3IgY29sdW1ucwotICAgICAgICAgICAgc2VsZi5jb2x1bW5fYWNsID0gWydhJywgJ3In LCAndycsICd4J10KLQotICAgICAgICAgICAgcmV0dXJuIGYoKmFyZ3MsICoqa3dhcmdzKQotCi0g ICAgICAgIHJldHVybiB3cmFwCi0KLSAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisgICAgQEJhc2VU YWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIGxpc3Qoc2VsZiwgZ2lkLCBzaWQs IGRpZCwgc2NpZCk6CiAgICAgICAgICIiIgogICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQg dG8gbGlzdCBhbGwgdGhlIHRhYmxlIG5vZGVzIHdpdGhpbiB0aGF0IGNvbGxlY3Rpb24uCkBAIC0z MzAsNyArMjQ5LDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVS ZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgIEpT T04gb2YgYXZhaWxhYmxlIHRhYmxlIG5vZGVzCiAgICAgICAgICIiIgotICAgICAgICBTUUwgPSBy ZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKKyAgICAgICAgU1FM ID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10p LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNv aWQpCkBAIC0zNDMsNyArMjYyLDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywg RGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgICAgIHN0YXR1cz0yMDAK ICAgICAgICAgKQogCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3 LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBub2RlKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNj aWQsIHRpZCk6CiAgICAgICAgICIiIgogICAgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8g bGlzdCBhbGwgdGhlIHRhYmxlIG5vZGVzIHdpdGhpbiB0aGF0IGNvbGxlY3Rpb24uCkBAIC0zNTks NyArMjc4LDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFk ZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgICAgIEpTT04gb2YgYXZhaWxhYmxlIHRhYmxl IG5vZGVzCiAgICAgICAgICIiIgogICAgICAgICByZXMgPSBbXQotICAgICAgICBTUUwgPSByZW5k ZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKKyAgICAgICAgU1FMID0g cmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25vZGVzLnNxbCddKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNjaWQ9c2NpZCwgdGlkPXRpZCkKICAgICAgICAgc3Rh dHVzLCByc2V0ID0gc2VsZi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCkBAIC0zNzQsNyArMjkz LDggQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZh Y3V1bVNldHRpbmdzKToKICAgICAgICAgICAgICAgICByc2V0Wydyb3dzJ11bMF1bJ25hbWUnXSwK ICAgICAgICAgICAgICAgICBpY29uPSJpY29uLXRhYmxlIiwKICAgICAgICAgICAgICAgICB0aWdn ZXJfY291bnQ9cnNldFsncm93cyddWzBdWyd0cmlnZ2VyY291bnQnXSwKLSAgICAgICAgICAgICAg ICBoYXNfZW5hYmxlX3RyaWdnZXJzPXJzZXRbJ3Jvd3MnXVswXVsnaGFzX2VuYWJsZV90cmlnZ2Vy cyddCisgICAgICAgICAgICAgICAgaGFzX2VuYWJsZV90cmlnZ2Vycz1yc2V0Wydyb3dzJ11bMF1b J2hhc19lbmFibGVfdHJpZ2dlcnMnXSwKKyAgICAgICAgICAgICAgICBpc19wYXJ0aXRpb25lZD1y c2V0Wydyb3dzJ11bMF1bJ2lzX3BhcnRpdGlvbmVkJ10gaWYgJ2lzX3BhcnRpdGlvbmVkJyBpbiBy c2V0Wydyb3dzJ11bMF0gZWxzZSBGYWxzZQogICAgICAgICAgICAgKQogCiAgICAgICAgIHJldHVy biBtYWtlX2pzb25fcmVzcG9uc2UoCkBAIC0zODIsOCArMzAyLDcgQEAgY2xhc3MgVGFibGVWaWV3 KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAg ICAgICAgIHN0YXR1cz0yMDAKICAgICAgICAgKQogCi0KLSAgICBAY2hlY2tfcHJlY29uZGl0aW9u CisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIG5vZGVzKHNl bGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBmdW5j dGlvbiBpcyB1c2VkIHRvIGxpc3QgYWxsIHRoZSB0YWJsZSBub2RlcyB3aXRoaW4gdGhhdCBjb2xs ZWN0aW9uLgpAQCAtMzk4LDcgKzMxNyw3IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZp ZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgICAgICBKU09OIG9m IGF2YWlsYWJsZSB0YWJsZSBub2RlcwogICAgICAgICAiIiIKICAgICAgICAgcmVzID0gW10KLSAg ICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgs CisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJsZV90ZW1w bGF0ZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub2Rl cy5zcWwnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY2lkPXNjaWQpCiAgICAg ICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQpAQCAtNDEz LDcgKzMzMiw4IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVh ZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgICAgICAgICAgICAgIHJvd1snbmFtZSddLAog ICAgICAgICAgICAgICAgICAgICBpY29uPSJpY29uLXRhYmxlIiwKICAgICAgICAgICAgICAgICAg ICAgdGlnZ2VyX2NvdW50PXJvd1sndHJpZ2dlcmNvdW50J10sCi0gICAgICAgICAgICAgICAgICAg IGhhc19lbmFibGVfdHJpZ2dlcnM9cm93WydoYXNfZW5hYmxlX3RyaWdnZXJzJ10KKyAgICAgICAg ICAgICAgICAgICAgaGFzX2VuYWJsZV90cmlnZ2Vycz1yb3dbJ2hhc19lbmFibGVfdHJpZ2dlcnMn XSwKKyAgICAgICAgICAgICAgICAgICAgaXNfcGFydGl0aW9uZWQ9cm93Wydpc19wYXJ0aXRpb25l ZCddIGlmICdpc19wYXJ0aXRpb25lZCcgaW4gcm93IGVsc2UgRmFsc2UKICAgICAgICAgICAgICAg ICApKQogCiAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCkBAIC00MjEsNyArMzQx LDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZh Y3V1bVNldHRpbmdzKToKICAgICAgICAgICAgIHN0YXR1cz0yMDAKICAgICAgICAgKQogCi0gICAg QGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlv bgogICAgIGRlZiBnZXRfYWxsX3RhYmxlcyhzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQ9 Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBBcmdzOgpAQCAtNDM1LDcgKzM1NSw3IEBAIGNs YXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0 aW5ncyk6CiAgICAgICAgICAgICBSZXR1cm5zIHRoZSBsaXRzIG9mIHRhYmxlcyByZXF1aXJlZCBm b3IgY29uc3RyYWludHMuCiAgICAgICAgICIiIgogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBT UUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKKyAgICAg ICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0 ZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0 X3RhYmxlc19mb3JfY29uc3RyYWludHMuc3FsJ10pLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNob3dfc3lzb2JqPXNlbGYuYmx1ZXByaW50LnNob3dfc3lzdGVtX29iamVjdHMp CiAKQEAgLTQ1Miw3ICszNzIsNyBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBE YXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICBleGNlcHQgRXhjZXB0aW9u IGFzIGU6CiAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXN0cihlKSkKIAotICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5j aGVja19wcmVjb25kaXRpb24KICAgICBkZWYgZ2V0X3RhYmxlX3ZhY3V1bShzZWxmLCBnaWQsIHNp ZCwgZGlkLCBzY2lkPU5vbmUsIHRpZD1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIEZldGNo IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGFibGUgYXV0by12YWN1dW0KQEAgLTQ2OCw3ICszODgs NyBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFj dXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgc3RhdHVzPTIwMAogICAgICAgICApCiAKLSAgICBA Y2hlY2tfcHJlY29uZGl0aW9uCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9u CiAgICAgZGVmIGdldF90b2FzdF90YWJsZV92YWN1dW0oc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2Np ZD1Ob25lLCB0aWQ9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBGZXRjaCB0aGUgZGVmYXVs dCB2YWx1ZXMgZm9yIHRvYXN0IHRhYmxlIGF1dG8tdmFjdXVtCkBAIC00ODQsNyArNDA0LDcgQEAg Y2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNl dHRpbmdzKToKICAgICAgICAgICAgIHN0YXR1cz0yMDAKICAgICAgICAgKQogCi0gICAgQGNoZWNr X3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAg IGRlZiBnZXRfYWNjZXNzX21ldGhvZHMoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkPU5v bmUpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFjY2VzcyBt ZXRob2RzLgpAQCAtNTE4LDcgKzQzOCw3IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZp ZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgICAgICBzdGF0dXM9 MjAwCiAgICAgICAgICkKIAotICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBAQmFzZVRhYmxl Vmlldy5jaGVja19wcmVjb25kaXRpb24KICAgICBkZWYgZ2V0X29wZXJfY2xhc3Moc2VsZiwgZ2lk LCBzaWQsIGRpZCwgc2NpZCwgdGlkPU5vbmUpOgogICAgICAgICAiIiIKIApAQCAtNTU1LDcgKzQ3 NSw3IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBW YWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAg ICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUpKQogCi0gICAg QGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlv bgogICAgIGRlZiBnZXRfb3BlcmF0b3Ioc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkPU5v bmUpOgogICAgICAgICAiIiIKIApAQCAtNTkzLDMzOSArNTEzLDYgQEAgY2xhc3MgVGFibGVWaWV3 KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAg ICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3Nl cnZlcl9lcnJvcihlcnJvcm1zZz1zdHIoZSkpCiAKLSAgICBkZWYgX2NvbHVtbnNfZm9ybWF0dGVy KHNlbGYsIHRpZCwgZGF0YSk6Ci0gICAgICAgICIiIgotICAgICAgICBBcmdzOgotICAgICAgICAg ICAgdGlkOiBUYWJsZSBPSUQKLSAgICAgICAgICAgIGRhdGE6IGRpY3Qgb2YgcXVlcnkgcmVzdWx0 Ci0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIEl0IHdpbGwgcmV0dXJuIGZvcm1hdHRl ZCBvdXRwdXQgb2YgcXVlcnkgcmVzdWx0Ci0gICAgICAgICAgICBhcyBwZXIgY2xpZW50IG1vZGVs IGZvcm1hdCBmb3IgY29sdW1uIG5vZGUKLSAgICAgICAgIiIiCi0gICAgICAgIGZvciBjb2x1bW4g aW4gZGF0YVsnY29sdW1ucyddOgotCi0gICAgICAgICAgICAjIFdlIG5lZWQgdG8gZm9ybWF0IHZh cmlhYmxlcyBhY2NvcmRpbmcgdG8gY2xpZW50IGpzIGNvbGxlY3Rpb24KLSAgICAgICAgICAgIGlm ICdhdHRvcHRpb25zJyBpbiBjb2x1bW4gYW5kIGNvbHVtblsnYXR0b3B0aW9ucyddIGlzIG5vdCBO b25lOgotICAgICAgICAgICAgICAgIHNwY29wdGlvbnMgPSBbXQotICAgICAgICAgICAgICAgIGZv ciBzcGNvcHRpb24gaW4gY29sdW1uWydhdHRvcHRpb25zJ106Ci0gICAgICAgICAgICAgICAgICAg IGssIHYgPSBzcGNvcHRpb24uc3BsaXQoJz0nKQotICAgICAgICAgICAgICAgICAgICBzcGNvcHRp b25zLmFwcGVuZCh7J25hbWUnOiBrLCAndmFsdWUnOiB2fSkKLQotICAgICAgICAgICAgICAgIGNv bHVtblsnYXR0b3B0aW9ucyddID0gc3Bjb3B0aW9ucwotCi0gICAgICAgICAgICAjIE5lZWQgdG8g Zm9ybWF0IHNlY3VyaXR5IGxhYmVscyBhY2NvcmRpbmcgdG8gY2xpZW50IGpzIGNvbGxlY3Rpb24K LSAgICAgICAgICAgIGlmICdzZWNsYWJlbHMnIGluIGNvbHVtbiBhbmQgY29sdW1uWydzZWNsYWJl bHMnXSBpcyBub3QgTm9uZToKLSAgICAgICAgICAgICAgICBzZWNsYWJlbHMgPSBbXQotICAgICAg ICAgICAgICAgIGZvciBzZWNsYmxzIGluIGNvbHVtblsnc2VjbGFiZWxzJ106Ci0gICAgICAgICAg ICAgICAgICAgIGssIHYgPSBzZWNsYmxzLnNwbGl0KCc9JykKLSAgICAgICAgICAgICAgICAgICAg c2VjbGFiZWxzLmFwcGVuZCh7J3Byb3ZpZGVyJzogaywgJ2xhYmVsJzogdn0pCi0KLSAgICAgICAg ICAgICAgICBjb2x1bW5bJ3NlY2xhYmVscyddID0gc2VjbGFiZWxzCi0KLSAgICAgICAgICAgIGlm ICdhdHRudW0nIGluIGNvbHVtbiBhbmQgY29sdW1uWydhdHRudW0nXSBpcyBub3QgTm9uZSBhbmQg XAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblsnYXR0bnVtJ10gPiAwOgotICAg ICAgICAgICAgICAgICMgV2UgbmVlZCB0byBwYXJzZSAmIGNvbnZlcnQgQUNMIGNvbWluZyBmcm9t IGRhdGFiYXNlIHRvIGpzb24gZm9ybWF0Ci0gICAgICAgICAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFtzZWxmLmNvbHVtbl90ZW1wbGF0ZV9wYXRoLCAnYWNsLnNxbCddKSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCwgY2xpZD1jb2x1 bW5bJ2F0dG51bSddKQotICAgICAgICAgICAgICAgIHN0YXR1cywgYWNsID0gc2VsZi5jb25uLmV4 ZWN1dGVfZGljdChTUUwpCi0KLSAgICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAg ICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPWFjbCkK LQotICAgICAgICAgICAgICAgICMgV2Ugd2lsbCBzZXQgZ2V0IHByaXZpbGVnZXMgZnJvbSBhY2wg c3FsIHNvIHdlIGRvbid0IG5lZWQKLSAgICAgICAgICAgICAgICAjIGl0IGZyb20gcHJvcGVydGll cyBzcWwKLSAgICAgICAgICAgICAgICBjb2x1bW5bJ2F0dGFjbCddID0gW10KLQotICAgICAgICAg ICAgICAgIGZvciByb3cgaW4gYWNsWydyb3dzJ106Ci0gICAgICAgICAgICAgICAgICAgIHByaXYg PSBwYXJzZV9wcml2X2Zyb21fZGIocm93KQotICAgICAgICAgICAgICAgICAgICBjb2x1bW4uc2V0 ZGVmYXVsdChyb3dbJ2RlZnR5cGUnXSwgW10pLmFwcGVuZChwcml2KQotCi0gICAgICAgICAgICAg ICAgIyB3ZSBhcmUgcmVjZWl2aW5nIHJlcXVlc3Qgd2hlbiBpbiBlZGl0IG1vZGUKLSAgICAgICAg ICAgICAgICAjIHdlIHdpbGwgc2VuZCBmaWx0ZXJlZCB0eXBlcyByZWxhdGVkIHRvIGN1cnJlbnQg dHlwZQotICAgICAgICAgICAgICAgIHByZXNlbnRfdHlwZSA9IGNvbHVtblsnY2x0eXBlJ10KLQot ICAgICAgICAgICAgICAgIHR5cGVfaWQgPSBjb2x1bW5bJ2F0dHR5cGlkJ10KLQotICAgICAgICAg ICAgICAgIGZ1bGx0eXBlID0gc2VsZi5nZXRfZnVsbF90eXBlKAotICAgICAgICAgICAgICAgICAg ICBjb2x1bW5bJ3R5cG5zcG5hbWUnXSwgY29sdW1uWyd0eXBuYW1lJ10sCi0gICAgICAgICAgICAg ICAgICAgIGNvbHVtblsnaXNkdXAnXSwgY29sdW1uWydhdHRuZGltcyddLCBjb2x1bW5bJ2F0dHR5 cG1vZCddCi0gICAgICAgICAgICAgICAgKQotCi0gICAgICAgICAgICAgICAgbGVuZ3RoID0gRmFs c2UKLSAgICAgICAgICAgICAgICBwcmVjaXNpb24gPSBGYWxzZQotICAgICAgICAgICAgICAgIGlm ICdlbGVtb2lkJyBpbiBjb2x1bW46Ci0gICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgcHJlY2lz aW9uLCB0eXBldmFsID0gc2VsZi5nZXRfbGVuZ3RoX3ByZWNpc2lvbihjb2x1bW5bJ2VsZW1vaWQn XSkKLQotICAgICAgICAgICAgICAgICMgU2V0IGxlbmd0aCBhbmQgcHJlY2lzaW9uIHRvIE5vbmUK LSAgICAgICAgICAgICAgICBjb2x1bW5bJ2F0dGxlbiddID0gTm9uZQotICAgICAgICAgICAgICAg IGNvbHVtblsnYXR0cHJlY2lzaW9uJ10gPSBOb25lCi0KLSAgICAgICAgICAgICAgICAjIElmIHdl IGhhdmUgbGVuZ3RoICYgcHJlY2lzaW9uIGJvdGgKLSAgICAgICAgICAgICAgICBpZiBsZW5ndGgg YW5kIHByZWNpc2lvbjoKLSAgICAgICAgICAgICAgICAgICAgbWF0Y2hPYmogPSByZS5zZWFyY2go cicoXGQrKSwoXGQrKScsIGZ1bGx0eXBlKQotICAgICAgICAgICAgICAgICAgICBpZiBtYXRjaE9i ajoKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblsnYXR0bGVuJ10gPSBtYXRjaE9iai5n cm91cCgxKQotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uWydhdHRwcmVjaXNpb24nXSA9 IG1hdGNoT2JqLmdyb3VwKDIpCi0gICAgICAgICAgICAgICAgZWxpZiBsZW5ndGg6Ci0gICAgICAg ICAgICAgICAgICAgICMgSWYgd2UgaGF2ZSBsZW5ndGggb25seQotICAgICAgICAgICAgICAgICAg ICBtYXRjaE9iaiA9IHJlLnNlYXJjaChyJyhcZCspJywgZnVsbHR5cGUpCi0gICAgICAgICAgICAg ICAgICAgIGlmIG1hdGNoT2JqOgotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uWydhdHRs ZW4nXSA9IG1hdGNoT2JqLmdyb3VwKDEpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5b J2F0dHByZWNpc2lvbiddID0gTm9uZQotCi0KLSAgICAgICAgICAgICAgICBTUUwgPSByZW5kZXJf dGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuY29sdW1uX3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXNfcmVmZXJlbmNlZC5zcWwn XSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZD10aWQsIGNsaWQ9 Y29sdW1uWydhdHRudW0nXSkKLQotICAgICAgICAgICAgICAgIHN0YXR1cywgaXNfcmVmZXJlbmNl ID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKFNRTCkKLQotICAgICAgICAgICAgICAgIGVkaXRf dHlwZXNfbGlzdCA9IGxpc3QoKQotICAgICAgICAgICAgICAgICMgV2Ugd2lsbCBuZWVkIHByZXNl bnQgdHlwZSBpbiBlZGl0IG1vZGUKLQotICAgICAgICAgICAgICAgIGlmIGNvbHVtblsndHlwbnNw bmFtZSddID09ICJwZ19jYXRhbG9nIiBvciBjb2x1bW5bJ3R5cG5zcG5hbWUnXSA9PSAicHVibGlj IjoKLSAgICAgICAgICAgICAgICAgICAgZWRpdF90eXBlc19saXN0LmFwcGVuZChwcmVzZW50X3R5 cGUpCi0gICAgICAgICAgICAgICAgZWxzZToKLSAgICAgICAgICAgICAgICAgICAgdCA9IHNlbGYu cXRUeXBlSWRlbnQoc2VsZi5jb25uLCBjb2x1bW5bJ3R5cG5zcG5hbWUnXSwgcHJlc2VudF90eXBl KQotICAgICAgICAgICAgICAgICAgICBlZGl0X3R5cGVzX2xpc3QuYXBwZW5kKHQpCi0gICAgICAg ICAgICAgICAgICAgIGNvbHVtblsnY2x0eXBlJ10gPSB0Ci0KLSAgICAgICAgICAgICAgICBpZiBp bnQoaXNfcmVmZXJlbmNlKSA9PSAwOgotICAgICAgICAgICAgICAgICAgICBTUUwgPSByZW5kZXJf dGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuY29sdW1uX3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2VkaXRfbW9kZV90eXBl cy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl X2lkPXR5cGVfaWQpCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29u bi5leGVjdXRlXzJkYXJyYXkoU1FMKQotCi0gICAgICAgICAgICAgICAgICAgIGZvciByb3cgaW4g cnNldFsncm93cyddOgotICAgICAgICAgICAgICAgICAgICAgICAgZWRpdF90eXBlc19saXN0LmFw cGVuZChyb3dbJ3R5cG5hbWUnXSkKLSAgICAgICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAg ICAgICAgICBlZGl0X3R5cGVzX2xpc3QuYXBwZW5kKHByZXNlbnRfdHlwZSkKLQotICAgICAgICAg ICAgICAgIGNvbHVtblsnZWRpdF90eXBlcyddID0gZWRpdF90eXBlc19saXN0Ci0gICAgICAgICAg ICAgICAgY29sdW1uWydjbHR5cGUnXSA9IERhdGFUeXBlUmVhZGVyLnBhcnNlX3R5cGVfbmFtZShj b2x1bW5bJ2NsdHlwZSddKQotCi0gICAgICAgICAgICAgICAgaWYgJ2luZGtleScgaW4gY29sdW1u OgotICAgICAgICAgICAgICAgICAgICAjIEN1cnJlbnQgY29sdW1uCi0gICAgICAgICAgICAgICAg ICAgIGF0dG51bSA9IHN0cihjb2x1bW5bJ2F0dG51bSddKQotCi0gICAgICAgICAgICAgICAgICAg ICMgU2luZ2xlL0xpc3Qgb2YgcHJpbWFyeSBrZXkgY29sdW1uKHMpCi0gICAgICAgICAgICAgICAg ICAgIGluZGtleSA9IHN0cihjb2x1bW5bJ2luZGtleSddKQotCi0gICAgICAgICAgICAgICAgICAg ICMgV2Ugd2lsbCBjaGVjayBpZiBjb2x1bW4gaXMgaW4gcHJpbWFyeSBjb2x1bW4ocykKLSAgICAg ICAgICAgICAgICAgICAgaWYgYXR0bnVtIGluIGluZGtleS5zcGxpdCgiICIpOgotICAgICAgICAg ICAgICAgICAgICAgICAgY29sdW1uWydpc19wcmltYXJ5X2tleSddID0gVHJ1ZQotICAgICAgICAg ICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uWydpc19wcmlt YXJ5X2tleSddID0gRmFsc2UKLQotICAgICAgICByZXR1cm4gZGF0YQotCi0gICAgZGVmIF9pbmRl eF9jb25zdHJhaW50c19mb3JtYXR0ZXIoc2VsZiwgZGlkLCB0aWQsIGRhdGEpOgotICAgICAgICAi IiIKLSAgICAgICAgQXJnczoKLSAgICAgICAgICAgIHRpZDogVGFibGUgT0lECi0gICAgICAgICAg ICBkYXRhOiBkaWN0IG9mIHF1ZXJ5IHJlc3VsdAotCi0gICAgICAgIFJldHVybnM6Ci0gICAgICAg ICAgICBJdCB3aWxsIHJldHVybiBmb3JtYXR0ZWQgb3V0cHV0IG9mIHF1ZXJ5IHJlc3VsdAotICAg ICAgICAgICAgYXMgcGVyIGNsaWVudCBtb2RlbCBmb3JtYXQgZm9yIGluZGV4IGNvbnN0cmFpbnQg bm9kZQotICAgICAgICAiIiIKLQotICAgICAgICAjIFdlIHdpbGwgZmV0Y2ggYWxsIHRoZSBpbmRl eCBjb25zdHJhaW50cyBmb3IgdGhlIHRhYmxlCi0gICAgICAgIGluZGV4X2NvbnN0cmFpbnRzID0g ewotICAgICAgICAgICAgJ3AnOiAncHJpbWFyeV9rZXknLCAndSc6ICd1bmlxdWVfY29uc3RyYWlu dCcKLSAgICAgICAgfQotCi0gICAgICAgIGZvciBjdHlwZSBpbiBpbmRleF9jb25zdHJhaW50cy5r ZXlzKCk6Ci0gICAgICAgICAgICBkYXRhW2luZGV4X2NvbnN0cmFpbnRzW2N0eXBlXV0gPSBbXQot Ci0gICAgICAgICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuaW5kZXhf Y29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZGlkPWRpZCwgdGlkPXRpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdHJhaW50X3R5cGU9Y3R5cGUpCi0gICAgICAgICAgICBzdGF0dXMsIHJlcyA9 IHNlbGYuY29ubi5leGVjdXRlX2RpY3Qoc3FsKQotCi0gICAgICAgICAgICBpZiBub3Qgc3RhdHVz OgotICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9 cmVzKQotCi0gICAgICAgICAgICBmb3Igcm93IGluIHJlc1sncm93cyddOgotICAgICAgICAgICAg ICAgIHJlc3VsdCA9IHJvdwotICAgICAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgK LSAgICAgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYuaW5kZXhfY29uc3RyYWludF90ZW1w bGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9jb25zdHJhaW50 X2NvbHMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICBjaWQ9cm93WydvaWQnXSwKLSAgICAg ICAgICAgICAgICAgICAgY29sY250PXJvd1snaW5kbmF0dHMnXSkKLSAgICAgICAgICAgICAgICBz dGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3Qoc3FsKQotCi0gICAgICAgICAgICAg ICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3Nl cnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCi0KLSAgICAgICAgICAgICAgICBjb2x1bW5zID0gW10K LSAgICAgICAgICAgICAgICBmb3IgciBpbiByZXNbJ3Jvd3MnXToKLSAgICAgICAgICAgICAgICAg ICAgY29sdW1ucy5hcHBlbmQoeyJjb2x1bW4iOiByWydjb2x1bW4nXS5zdHJpcCgnIicpfSkKLQot ICAgICAgICAgICAgICAgIHJlc3VsdFsnY29sdW1ucyddID0gY29sdW1ucwotCi0gICAgICAgICAg ICAgICAgIyBJZiBub3QgZXhpc3RzIHRoZW4gY3JlYXRlIGxpc3QgYW5kL29yIGFwcGVuZCBpbnRv Ci0gICAgICAgICAgICAgICAgIyBleGlzdGluZyBsaXN0IFsgQWRkaW5nIGludG8gbWFpbiBkYXRh IGRpY3RdCi0gICAgICAgICAgICAgICAgZGF0YS5zZXRkZWZhdWx0KGluZGV4X2NvbnN0cmFpbnRz W2N0eXBlXSwgW10pLmFwcGVuZChyZXN1bHQpCi0KLSAgICAgICAgcmV0dXJuIGRhdGEKLQotICAg IGRlZiBfZm9yZWlnbl9rZXlfZm9ybWF0dGVyKHNlbGYsIHRpZCwgZGF0YSk6Ci0gICAgICAgICIi IgotICAgICAgICBBcmdzOgotICAgICAgICAgICAgdGlkOiBUYWJsZSBPSUQKLSAgICAgICAgICAg IGRhdGE6IGRpY3Qgb2YgcXVlcnkgcmVzdWx0Ci0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAg ICAgIEl0IHdpbGwgcmV0dXJuIGZvcm1hdHRlZCBvdXRwdXQgb2YgcXVlcnkgcmVzdWx0Ci0gICAg ICAgICAgICBhcyBwZXIgY2xpZW50IG1vZGVsIGZvcm1hdCBmb3IgZm9yZWlnbiBrZXkgY29uc3Ry YWludCBub2RlCi0gICAgICAgICIiIgotCi0gICAgICAgICMgV2Ugd2lsbCBmZXRjaCBhbGwgdGhl IGluZGV4IGNvbnN0cmFpbnRzIGZvciB0aGUgdGFibGUKLSAgICAgICAgc3FsID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFtzZWxmLmZvcmVpZ25fa2V5X3RlbXBsYXRlX3BhdGgsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCkKLQotICAgICAgICBzdGF0dXMsIHJl c3VsdCA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3Qoc3FsKQotCi0gICAgICAgIGlmIG5vdCBzdGF0 dXM6Ci0gICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJl c3VsdCkKLQotICAgICAgICBmb3IgZmsgaW4gcmVzdWx0Wydyb3dzJ106Ci0KLSAgICAgICAgICAg IHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5mb3JlaWduX2tleV90ZW1wbGF0 ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0 X2NvbnN0cmFpbnRfY29scy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGlkPXRpZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXlzPXppcChm a1snY29uZmtleSddLCBma1snY29ua2V5J10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbmZyZWxpZD1ma1snY29uZnJlbGlkJ10pCi0KLSAgICAgICAgICAgIHN0YXR1cywg cmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCi0KLSAgICAgICAgICAgIGlmIG5vdCBz dGF0dXM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJv cm1zZz1yZXMpCi0KLSAgICAgICAgICAgIGNvbHVtbnMgPSBbXQotICAgICAgICAgICAgY29scyA9 IFtdCi0gICAgICAgICAgICBmb3Igcm93IGluIHJlc1sncm93cyddOgotICAgICAgICAgICAgICAg IGNvbHVtbnMuYXBwZW5kKHsibG9jYWxfY29sdW1uIjogcm93Wydjb25hdHRuYW1lJ10sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2VzIjogZmtbJ2NvbmZyZWxpZCdd LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVmZXJlbmNlZCI6IHJvd1snY29u ZmF0dG5hbWUnXX0pCi0gICAgICAgICAgICAgICAgY29scy5hcHBlbmQocm93Wydjb25hdHRuYW1l J10pCi0KLSAgICAgICAgICAgIGZrWydjb2x1bW5zJ10gPSBjb2x1bW5zCi0KLSAgICAgICAgICAg IFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5mb3JlaWduX2tleV90ZW1wbGF0 ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0 X3BhcmVudC5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPWZr Wydjb2x1bW5zJ11bMF1bJ3JlZmVyZW5jZXMnXSkKLQotICAgICAgICAgICAgc3RhdHVzLCByc2V0 ID0gc2VsZi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCi0gICAgICAgICAgICBpZiBub3Qgc3Rh dHVzOgotICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jt c2c9cnNldCkKLQotICAgICAgICAgICAgZmtbJ3JlbW90ZV9zY2hlbWEnXSA9IHJzZXRbJ3Jvd3Mn XVswXVsnc2NoZW1hJ10KLSAgICAgICAgICAgIGZrWydyZW1vdGVfdGFibGUnXSA9IHJzZXRbJ3Jv d3MnXVswXVsndGFibGUnXQotCi0gICAgICAgICAgICBjb3ZlcmluZ2luZGV4ID0gc2VsZi5zZWFy Y2hfY292ZXJpbmdpbmRleCh0aWQsIGNvbHMpCi0KLSAgICAgICAgICAgIGZrWydjb3ZlcmluZ2lu ZGV4J10gPSBjb3ZlcmluZ2luZGV4Ci0gICAgICAgICAgICBpZiBjb3ZlcmluZ2luZGV4OgotICAg ICAgICAgICAgICAgIGZrWydhdXRvaW5kZXgnXSA9IFRydWUKLSAgICAgICAgICAgICAgICBma1sn aGFzaW5kZXgnXSA9IFRydWUKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgZmtb J2F1dG9pbmRleCddID0gRmFsc2UKLSAgICAgICAgICAgICAgICBma1snaGFzaW5kZXgnXSA9IEZh bHNlCi0gICAgICAgICAgICAjIElmIG5vdCBleGlzdHMgdGhlbiBjcmVhdGUgbGlzdCBhbmQvb3Ig YXBwZW5kIGludG8KLSAgICAgICAgICAgICMgZXhpc3RpbmcgbGlzdCBbIEFkZGluZyBpbnRvIG1h aW4gZGF0YSBkaWN0XQotICAgICAgICAgICAgZGF0YS5zZXRkZWZhdWx0KCdmb3JlaWduX2tleScs IFtdKS5hcHBlbmQoZmspCi0KLSAgICAgICAgcmV0dXJuIGRhdGEKLQotICAgIGRlZiBfY2hlY2tf Y29uc3RyYWludF9mb3JtYXR0ZXIoc2VsZiwgdGlkLCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAg ICAgIEFyZ3M6Ci0gICAgICAgICAgICB0aWQ6IFRhYmxlIE9JRAotICAgICAgICAgICAgZGF0YTog ZGljdCBvZiBxdWVyeSByZXN1bHQKLQotICAgICAgICBSZXR1cm5zOgotICAgICAgICAgICAgSXQg d2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1bHQKLSAgICAgICAgICAg IGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0IGZvciBjaGVjayBjb25zdHJhaW50IG5vZGUKLSAg ICAgICAgIiIiCi0KLSAgICAgICAgIyBXZSB3aWxsIGZldGNoIGFsbCB0aGUgaW5kZXggY29uc3Ry YWludHMgZm9yIHRoZSB0YWJsZQotICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpv aW4oW3NlbGYuY2hlY2tfY29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRpZD10aWQpCi0KLSAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxm LmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKLQotICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAg ICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCi0gICAgICAg ICMgSWYgbm90IGV4aXN0cyB0aGVuIGNyZWF0ZSBsaXN0IGFuZC9vciBhcHBlbmQgaW50bwotICAg ICAgICAjIGV4aXN0aW5nIGxpc3QgWyBBZGRpbmcgaW50byBtYWluIGRhdGEgZGljdF0KLQotICAg ICAgICBkYXRhWydjaGVja19jb25zdHJhaW50J10gPSByZXNbJ3Jvd3MnXQotCi0gICAgICAgIHJl dHVybiBkYXRhCi0KLSAgICBkZWYgX2V4Y2x1c2lvbl9jb25zdHJhaW50X2Zvcm1hdHRlcihzZWxm LCBkaWQsIHRpZCwgZGF0YSk6Ci0gICAgICAgICIiIgotICAgICAgICBBcmdzOgotICAgICAgICAg ICAgdGlkOiBUYWJsZSBPSUQKLSAgICAgICAgICAgIGRhdGE6IGRpY3Qgb2YgcXVlcnkgcmVzdWx0 Ci0KLSAgICAgICAgUmV0dXJuczoKLSAgICAgICAgICAgIEl0IHdpbGwgcmV0dXJuIGZvcm1hdHRl ZCBvdXRwdXQgb2YgcXVlcnkgcmVzdWx0Ci0gICAgICAgICAgICBhcyBwZXIgY2xpZW50IG1vZGVs IGZvcm1hdCBmb3IgZXhjbHVzaW9uIGNvbnN0cmFpbnQgbm9kZQotICAgICAgICAiIiIKLQotICAg ICAgICAjIFdlIHdpbGwgZmV0Y2ggYWxsIHRoZSBpbmRleCBjb25zdHJhaW50cyBmb3IgdGhlIHRh YmxlCi0gICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5leGNsdXNp b25fY29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRpZD1kaWQsIHRpZD10aWQpCi0KLSAgICAgICAgc3RhdHVzLCByZXN1bHQgPSBzZWxm LmNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKLQotICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAg ICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXN1bHQpCi0KLSAg ICAgICAgZm9yIGV4IGluIHJlc3VsdFsncm93cyddOgotCi0gICAgICAgICAgICBzcWwgPSByZW5k ZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuZXhjbHVzaW9uX2NvbnN0cmFpbnRfdGVtcGxhdGVf cGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9j b25zdHJhaW50X2NvbHMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNpZD1leFsnb2lkJ10sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sY250 PWV4WydpbmRuYXR0cyddKQotCi0gICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5l eGVjdXRlX2RpY3Qoc3FsKQotCi0gICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQotCi0gICAg ICAgICAgICBjb2x1bW5zID0gW10KLSAgICAgICAgICAgIGZvciByb3cgaW4gcmVzWydyb3dzJ106 Ci0gICAgICAgICAgICAgICAgaWYgcm93WydvcHRpb25zJ10gJiAxOgotICAgICAgICAgICAgICAg ICAgICBvcmRlciA9IEZhbHNlCi0gICAgICAgICAgICAgICAgICAgIG51bGxzX29yZGVyID0gVHJ1 ZSBpZiAocm93WydvcHRpb25zJ10gJiAyKSBlbHNlIEZhbHNlCi0gICAgICAgICAgICAgICAgZWxz ZToKLSAgICAgICAgICAgICAgICAgICAgb3JkZXIgPSBUcnVlCi0gICAgICAgICAgICAgICAgICAg IG51bGxzX29yZGVyID0gVHJ1ZSBpZiAocm93WydvcHRpb25zJ10gJiAyKSBlbHNlIEZhbHNlCi0K LSAgICAgICAgICAgICAgICBjb2x1bW5zLmFwcGVuZCh7ImNvbHVtbiI6IHJvd1snY29sZGVmJ10u c3RyaXAoJyInKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9wZXJfY2xhc3Mi OiByb3dbJ29wY25hbWUnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yZGVy Ijogb3JkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJudWxsc19vcmRlciI6 IG51bGxzX29yZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAib3BlcmF0b3Ii OiByb3dbJ29wcm5hbWUnXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvbF90 eXBlIjogcm93WydkYXRhdHlwZSddCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0p Ci0KLSAgICAgICAgICAgIGV4Wydjb2x1bW5zJ10gPSBjb2x1bW5zCi0gICAgICAgICAgICAjIElm IG5vdCBleGlzdHMgdGhlbiBjcmVhdGUgbGlzdCBhbmQvb3IgYXBwZW5kIGludG8KLSAgICAgICAg ICAgICMgZXhpc3RpbmcgbGlzdCBbIEFkZGluZyBpbnRvIG1haW4gZGF0YSBkaWN0XQotICAgICAg ICAgICAgZGF0YS5zZXRkZWZhdWx0KCdleGNsdWRlX2NvbnN0cmFpbnQnLCBbXSkuYXBwZW5kKGV4 KQotCi0gICAgICAgIHJldHVybiBkYXRhCi0KICAgICBkZWYgc2VhcmNoX2NvdmVyaW5naW5kZXgo c2VsZiwgdGlkLCBjb2xzKToKICAgICAgICAgIiIiCiAKQEAgLTk2NiwxMzMgKzU1Myw3IEBAIGNs YXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0 aW5ncyk6CiAKICAgICAgICAgcmV0dXJuIE5vbmUKIAotICAgIGRlZiBfZm9ybWF0dGVyKHNlbGYs IGRpZCwgc2NpZCwgdGlkLCBkYXRhKToKLSAgICAgICAgIiIiCi0gICAgICAgIEFyZ3M6Ci0gICAg ICAgICAgICBkYXRhOiBkaWN0IG9mIHF1ZXJ5IHJlc3VsdAotICAgICAgICAgICAgc2NpZDogc2No ZW1hIG9pZAotICAgICAgICAgICAgdGlkOiB0YWJsZSBvaWQKLQotICAgICAgICBSZXR1cm5zOgot ICAgICAgICAgICAgSXQgd2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1 bHQKLSAgICAgICAgICAgIGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0Ci0gICAgICAgICIiIgot ICAgICAgICAjIE5lZWQgdG8gZm9ybWF0IHNlY3VyaXR5IGxhYmVscyBhY2NvcmRpbmcgdG8gY2xp ZW50IGpzIGNvbGxlY3Rpb24KLSAgICAgICAgaWYgJ3NlY2xhYmVscycgaW4gZGF0YSBhbmQgZGF0 YVsnc2VjbGFiZWxzJ10gaXMgbm90IE5vbmU6Ci0gICAgICAgICAgICBzZWNsYWJlbHMgPSBbXQot ICAgICAgICAgICAgZm9yIHNlY2xibHMgaW4gZGF0YVsnc2VjbGFiZWxzJ106Ci0gICAgICAgICAg ICAgICAgaywgdiA9IHNlY2xibHMuc3BsaXQoJz0nKQotICAgICAgICAgICAgICAgIHNlY2xhYmVs cy5hcHBlbmQoeydwcm92aWRlcic6IGssICdsYWJlbCc6IHZ9KQotCi0gICAgICAgICAgICBkYXRh WydzZWNsYWJlbHMnXSA9IHNlY2xhYmVscwotCi0gICAgICAgICMgV2UgbmVlZCB0byBwYXJzZSAm IGNvbnZlcnQgQUNMIGNvbWluZyBmcm9tIGRhdGFiYXNlIHRvIGpzb24gZm9ybWF0Ci0gICAgICAg IFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAnYWNs LnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZD10aWQsIHNjaWQ9c2Np ZCkKLSAgICAgICAgc3RhdHVzLCBhY2wgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKLSAg ICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9YWNsKQotCi0gICAgICAgICMgV2Ugd2lsbCBzZXQgZ2V0IHByaXZpbGVn ZXMgZnJvbSBhY2wgc3FsIHNvIHdlIGRvbid0IG5lZWQKLSAgICAgICAgIyBpdCBmcm9tIHByb3Bl cnRpZXMgc3FsCi0gICAgICAgIGZvciByb3cgaW4gYWNsWydyb3dzJ106Ci0gICAgICAgICAgICBw cml2ID0gcGFyc2VfcHJpdl9mcm9tX2RiKHJvdykKLSAgICAgICAgICAgIGlmIHJvd1snZGVmdHlw ZSddIGluIGRhdGE6Ci0gICAgICAgICAgICAgICAgZGF0YVtyb3dbJ2RlZnR5cGUnXV0uYXBwZW5k KHByaXYpCi0gICAgICAgICAgICBlbHNlOgotICAgICAgICAgICAgICAgIGRhdGFbcm93WydkZWZ0 eXBlJ11dID0gW3ByaXZdCi0KLSAgICAgICAgIyBXZSB3aWxsIGFkZCBBdXRvIHZhY3V1bSBkZWZh dWx0cyB3aXRoIG91dCByZXN1bHQgZm9yIGdyaWQKLSAgICAgICAgZGF0YVsndmFjdXVtX3RhYmxl J10gPSBzZWxmLnBhcnNlX3ZhY3V1bV9kYXRhKHNlbGYuY29ubiwgZGF0YSwgJ3RhYmxlJykKLSAg ICAgICAgZGF0YVsndmFjdXVtX3RvYXN0J10gPSBzZWxmLnBhcnNlX3ZhY3V1bV9kYXRhKHNlbGYu Y29ubiwgZGF0YSwgJ3RvYXN0JykKLQotICAgICAgICAjIEZldGNoIGNvbHVtbnMgZm9yIHRoZSB0 YWJsZSBsb2dpYwotICAgICAgICAjCi0gICAgICAgICMgMSkgQ2hlY2sgaWYgb2ZfdHlwZSBhbmQg aW5oZXJpdGVkIHRhYmxlcyBhcmUgcHJlc2VudD8KLSAgICAgICAgIyAyKSBJZiB5ZXMgdGhlbiBG ZXRjaCBhbGwgdGhlIGNvbHVtbnMgZm9yIG9mX3R5cGUgYW5kIGluaGVyaXRlZCB0YWJsZXMKLSAg ICAgICAgIyAzKSBBZGQgY29sdW1ucyBpbiBjb2x1bW5zIGNvbGxlY3Rpb24KLSAgICAgICAgIyA0 KSBGaW5kIGFsbCB0aGUgY29sdW1ucyBmb3IgdGFibGVzIGFuZCBmaWx0ZXIgb3V0IGNvbHVtbnMg d2hpY2ggYXJlCi0gICAgICAgICMgICBub3QgaW5oZXJpdGVkIGZyb20gYW55IHRhYmxlICYgZm9y bWF0IHRoZW0gb25lIGJ5IG9uZQotCi0gICAgICAgICMgR2V0IG9mX3R5cGUgdGFibGUgY29sdW1u cyBhbmQgYWRkIGl0IGludG8gY29sdW1ucyBkaWN0Ci0gICAgICAgIGlmIGRhdGFbJ3R5cG5hbWUn XToKLSAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1w bGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn Z2V0X2NvbHVtbnNfZm9yX3RhYmxlLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0bmFtZT1kYXRhWyd0eXBuYW1lJ10pCi0KLSAgICAgICAgICAgIHN0YXR1cywgcmVz ID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCi0gICAgICAgICAgICBpZiBub3Qgc3RhdHVz OgotICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9 cmVzKQotICAgICAgICAgICAgZGF0YVsnY29sdW1ucyddID0gcmVzWydyb3dzJ10KLQotICAgICAg ICAjIEdldCBpbmhlcml0ZWQgdGFibGUocykgY29sdW1ucyBhbmQgYWRkIGl0IGludG8gY29sdW1u cyBkaWN0Ci0gICAgICAgIGVsaWYgZGF0YVsnY29sbF9pbmhlcml0cyddIGFuZCBsZW4oZGF0YVsn Y29sbF9pbmhlcml0cyddKSA+IDA6Ci0gICAgICAgICAgICBjb2x1bW5zID0gW10KLSAgICAgICAg ICAgICMgUmV0dXJuIGFsbCB0YWJsZXMgd2hpY2ggY2FuIGJlIGluaGVyaXRlZCAmIGRvIG5vdCBz aG93Ci0gICAgICAgICAgICAjIHN5c3RlbSBjb2x1bW5zCi0gICAgICAgICAgICBTUUwgPSByZW5k ZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwgJ2dldF9pbmhlcml0cy5z cWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd19zeXN0ZW1fb2Jq ZWN0cz1GYWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKLSAgICAgICAg ICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQotICAgICAg ICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2Vy dmVyX2Vycm9yKGVycm9ybXNnPXJzZXQpCi0KLSAgICAgICAgICAgIGZvciByb3cgaW4gcnNldFsn cm93cyddOgotICAgICAgICAgICAgICAgIGlmIHJvd1snaW5oZXJpdHMnXSBpbiBkYXRhWydjb2xs X2luaGVyaXRzJ106Ci0gICAgICAgICAgICAgICAgICAgICMgRmV0Y2ggY29sdW1ucyB1c2luZyBp bmhlcml0ZWQgdGFibGUgT0lECi0gICAgICAgICAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1w bGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfY29sdW1uc19mb3JfdGFibGUuc3Fs J10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXJvd1sn b2lkJ10pCi0gICAgICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1 dGVfZGljdChTUUwpCi0gICAgICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJl cykKLSAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5leHRlbmQocmVzWydyb3dzJ11bOl0pCi0g ICAgICAgICAgICBkYXRhWydjb2x1bW5zJ10gPSBjb2x1bW5zCi0KLSAgICAgICAgIyBXZSB3aWxs IGZldGNoIGFsbCB0aGUgY29sdW1ucyBmb3IgdGhlIHRhYmxlIHVzaW5nCi0gICAgICAgICMgY29s dW1ucyBwcm9wZXJ0aWVzLnNxbCwgc28gd2UgbmVlZCB0byBzZXQgdGVtcGxhdGUgcGF0aAotICAg ICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuY29sdW1uX3RlbXBsYXRl X3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRp ZXMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dfc3lzX29iamVjdHM9RmFsc2UKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICkKLQotICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29u bi5leGVjdXRlX2RpY3QoU1FMKQotICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAg cmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCi0gICAgICAgIGFsbF9j b2x1bW5zID0gcmVzWydyb3dzJ10KLQotICAgICAgICAjIEZpbHRlciBpbmhlcml0ZWQgY29sdW1u cyBmcm9tIGFsbCBjb2x1bW5zCi0gICAgICAgIGlmICdjb2x1bW5zJyBpbiBkYXRhIGFuZCBsZW4o ZGF0YVsnY29sdW1ucyddKSA+IDAgXAotICAgICAgICAgICAgICAgIGFuZCBsZW4oYWxsX2NvbHVt bnMpID4gMDoKLSAgICAgICAgICAgIGZvciByb3cgaW4gZGF0YVsnY29sdW1ucyddOgotICAgICAg ICAgICAgICAgIGZvciBpLCBjb2wgaW4gZW51bWVyYXRlKGFsbF9jb2x1bW5zKToKLSAgICAgICAg ICAgICAgICAgICAgIyBJZiBib3RoIG5hbWUgYXJlIHNhbWUgdGhlbiByZW1vdmUgaXQKLSAgICAg ICAgICAgICAgICAgICAgIyBhcyBpdCBpcyBpbmhlcml0ZWQgZnJvbSBvdGhlciB0YWJsZQotICAg ICAgICAgICAgICAgICAgICBpZiBjb2xbJ25hbWUnXSA9PSByb3dbJ25hbWUnXToKLSAgICAgICAg ICAgICAgICAgICAgICAgICMgUmVtb3ZlIHNhbWUgY29sdW1uIGZyb20gYWxsX2NvbHVtbnMgYXMK LSAgICAgICAgICAgICAgICAgICAgICAgICMgYWxyZWFkeSBoYXZlIGl0IGNvbHVtbnMgY29sbGVj dGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgZGVsIGFsbF9jb2x1bW5zW2ldCi0KLSAgICAg ICAgICAgICMgSWYgYW55IGNvbHVtbiBpcyBhZGRlZCB0aGVuIHVwZGF0ZSBjb2x1bW5zIGNvbGxl Y3Rpb24KLSAgICAgICAgICAgIGlmIGxlbihhbGxfY29sdW1ucykgPiAwOgotICAgICAgICAgICAg ICAgIGRhdGFbJ2NvbHVtbnMnXSArPSBhbGxfY29sdW1ucwotICAgICAgICAjIElmIG5vIGluaGVy aXRlZCBjb2x1bW5zIGZvdW5kIHRoZW4gYWRkIGFsbCBjb2x1bW5zCi0gICAgICAgIGVsaWYgbGVu KGFsbF9jb2x1bW5zKSA+IDA6Ci0gICAgICAgICAgICBkYXRhWydjb2x1bW5zJ10gPSBhbGxfY29s dW1ucwotCi0gICAgICAgIGlmICdjb2x1bW5zJyBpbiBkYXRhIGFuZCBsZW4oZGF0YVsnY29sdW1u cyddKSA+IDA6Ci0gICAgICAgICAgICBkYXRhID0gc2VsZi5fY29sdW1uc19mb3JtYXR0ZXIodGlk LCBkYXRhKQotCi0gICAgICAgICMgSGVyZSB3ZSB3aWxsIGFkZCBjb25zdHJhaW50IGluIG91ciBv dXRwdXQKLSAgICAgICAgZGF0YSA9IHNlbGYuX2luZGV4X2NvbnN0cmFpbnRzX2Zvcm1hdHRlcihk aWQsIHRpZCwgZGF0YSkKLSAgICAgICAgZGF0YSA9IHNlbGYuX2ZvcmVpZ25fa2V5X2Zvcm1hdHRl cih0aWQsIGRhdGEpCi0gICAgICAgIGRhdGEgPSBzZWxmLl9jaGVja19jb25zdHJhaW50X2Zvcm1h dHRlcih0aWQsIGRhdGEpCi0gICAgICAgIGRhdGEgPSBzZWxmLl9leGNsdXNpb25fY29uc3RyYWlu dF9mb3JtYXR0ZXIoZGlkLCB0aWQsIGRhdGEpCi0KLSAgICAgICAgcmV0dXJuIGRhdGEKLQotICAg IEBjaGVja19wcmVjb25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRp b24KICAgICBkZWYgcHJvcGVydGllcyhzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQpOgog ICAgICAgICAiIiIKICAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHNob3cgdGhlIHByb3BlcnRp ZXMgb2YgdGhlIHNlbGVjdGVkIHRhYmxlIG5vZGUuCkBAIC0xMTA5LDcgKzU3MCw3IEBAIGNsYXNz IFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5n cyk6CiAgICAgICAgICAgICBKU09OIG9mIHNlbGVjdGVkIHRhYmxlIG5vZGUKICAgICAgICAgIiIi CiAKLSAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRl X3BhdGgsCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJs ZV90ZW1wbGF0ZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdwcm9wZXJ0aWVzLnNxbCddKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZD1k aWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh dGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkKQpAQCAtMTE0MCwxOSArNjAxLDYwIEBAIGNs YXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0 aW5ncyk6CiAKICAgICAgICAgZGF0YSA9IHNlbGYuX2Zvcm1hdHRlcihkaWQsIHNjaWQsIHRpZCwg ZGF0YSkKIAorICAgICAgICAjIEZldGNoIHBhcnRpdGlvbiBvZiB0aGlzIHRhYmxlIGlmIGl0IGlz IHBhcnRpdGlvbmVkIHRhYmxlLgorICAgICAgICBpZiAnaXNfcGFydGl0aW9uZWQnIGluIGRhdGEg YW5kIGRhdGFbJ2lzX3BhcnRpdGlvbmVkJ106CisgICAgICAgICAgICAjIGdldCB0aGUgcGFydGl0 aW9uIHR5cGUKKyAgICAgICAgICAgIGRhdGFbJ3BhcnRpdGlvbl90eXBlJ10gPSBkYXRhWydwYXJ0 aXRpb25fc2NoZW1lJ10uc3BsaXQoKVswXS5sb3dlcigpCisKKyAgICAgICAgICAgIHBhcnRpdGlv bnMgPSBbXQorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxm LnBhcnRpdGlvbl90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnbm9kZXMuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNjaWQ9c2NpZCwgdGlkPXRpZCkKKyAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNl bGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoK KyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJz ZXQpCisKKyAgICAgICAgICAgIGZvciByb3cgaW4gcnNldFsncm93cyddOgorICAgICAgICAgICAg ICAgIHBhcnRpdGlvbl9uYW1lID0gcm93WyduYW1lJ10KKyAgICAgICAgICAgICAgICAjIGlmIHNj aGVtYSBuYW1lIGlzIGRpZmZlcmVudCB0aGVuIGRpc3BsYXkgc2NoZW1hCisgICAgICAgICAgICAg ICAgIyBxdWFsaWZpZWQgbmFtZSBvbiBVSS4KKyAgICAgICAgICAgICAgICBpZiBkYXRhWydzY2hl bWEnXSAhPSByb3dbJ3NjaGVtYV9uYW1lJ106CisgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlv bl9uYW1lID0gcm93WydzY2hlbWFfbmFtZSddICsgJy4nICsgcm93WyduYW1lJ10KKworICAgICAg ICAgICAgICAgIHJhbmdlX3BhcnQgPSByb3dbJ3BhcnRpdGlvbl92YWx1ZSddLnJlcGxhY2UoJywg JywgJywnKS5zcGxpdCgpCisgICAgICAgICAgICAgICAgaWYgZGF0YVsncGFydGl0aW9uX3R5cGUn XSA9PSAncmFuZ2UnOgorICAgICAgICAgICAgICAgICAgICByYW5nZV9mcm9tID0gcmFuZ2VfcGFy dFszXS5yZXBsYWNlKCcoJywgJycpLnJlcGxhY2UoJyknLCAnJykKKyAgICAgICAgICAgICAgICAg ICAgcmFuZ2VfdG8gPSByYW5nZV9wYXJ0WzVdLnJlcGxhY2UoJygnLCAnJykucmVwbGFjZSgnKScs ICcnKQorCisgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbnMuYXBwZW5kKHsKKyAgICAgICAg ICAgICAgICAgICAgICAgICdvaWQnOiByb3dbJ29pZCddLAorICAgICAgICAgICAgICAgICAgICAg ICAgJ3BhcnRpdGlvbl9uYW1lJzogcGFydGl0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAg ICAgICAndmFsdWVzX2Zyb20nOiByYW5nZV9mcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAg J3ZhbHVlc190byc6IHJhbmdlX3RvCisgICAgICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAg ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmFuZ2VfaW4gPSByYW5nZV9wYXJ0WzNd LnJlcGxhY2UoJygnLCAnJykucmVwbGFjZSgnKScsICcnKQorICAgICAgICAgICAgICAgICAgICBw YXJ0aXRpb25zLmFwcGVuZCh7CisgICAgICAgICAgICAgICAgICAgICAgICAnb2lkJzogcm93Wydv aWQnXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdwYXJ0aXRpb25fbmFtZSc6IHBhcnRpdGlv bl9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlc19pbic6IHJhbmdlX2luCisg ICAgICAgICAgICAgICAgICAgIH0pCisKKyAgICAgICAgICAgIGRhdGFbJ3BhcnRpdGlvbnMnXSA9 IHBhcnRpdGlvbnMKKwogICAgICAgICByZXR1cm4gYWpheF9yZXNwb25zZSgKICAgICAgICAgICAg IHJlc3BvbnNlPWRhdGEsCiAgICAgICAgICAgICBzdGF0dXM9MjAwCiAgICAgICAgICkKIAotICAg IEBjaGVja19wcmVjb25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRp b24KICAgICBkZWYgdHlwZXMoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkPU5vbmUsIGNs aWQ9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBSZXR1cm5zOgogICAgICAgICAgICAgVGhp cyBmdW5jdGlvbiB3aWxsIHJldHVybiBsaXN0IG9mIHR5cGVzIGF2YWlsYWJsZSBmb3IgY29sdW1u IG5vZGUKICAgICAgICAgICAgIGZvciBub2RlLWFqYXgtY29udHJvbAogICAgICAgICAiIiIKLSAg ICAgICAgY29uZGl0aW9uID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRl X3BhdGgsCisgICAgICAgIGNvbmRpdGlvbiA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2Vs Zi50YWJsZV90ZW1wbGF0ZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdnZXRfdHlwZXNfd2hlcmVfY29uZGl0aW9uLnNxbCddKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dfc3lzdGVtX29iamVjdHM9c2VsZi5ibHVl cHJpbnQuc2hvd19zeXN0ZW1fb2JqZWN0cykKIApAQCAtMTE2Niw3ICs2NjgsNyBAQCBjbGFzcyBU YWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3Mp OgogICAgICAgICAgICAgc3RhdHVzPTIwMAogICAgICAgICApCiAKLSAgICBAY2hlY2tfcHJlY29u ZGl0aW9uCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIGdl dF9jb2x1bW5zKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZD1Ob25lKToKICAgICAgICAg IiIiCiAgICAgICAgIFJldHVybnMgdGhlIFRhYmxlIENvbHVtbnMuCkBAIC0xMTg5LDExICs2OTEs MTEgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZh Y3V1bVNldHRpbmdzKToKICAgICAgICAgZGF0YSA9IHJlcXVlc3QuYXJncyBpZiByZXF1ZXN0LmFy Z3MgZWxzZSBOb25lCiAgICAgICAgIHRyeToKICAgICAgICAgICAgIGlmIGRhdGEgYW5kICd0aWQn IGluIGRhdGE6Ci0gICAgICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2lu KFtzZWxmLnRlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBs YXRlKCIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2NvbHVtbnNfZm9yX3RhYmxlLnNx bCddKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPWRhdGFbJ3Rp ZCddKQogICAgICAgICAgICAgZWxpZiBkYXRhIGFuZCAndG5hbWUnIGluIGRhdGE6Ci0gICAgICAg ICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3Bh dGgsCisgICAgICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxm LnRhYmxlX3RlbXBsYXRlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnZ2V0X2NvbHVtbnNfZm9yX3RhYmxlLnNxbCddKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdG5hbWU9ZGF0YVsndG5hbWUnXSkKIApAQCAtMTIx MSw3ICs3MTMsNyBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJl YWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CiAg ICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0cihlKSkK IAotICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVj b25kaXRpb24KICAgICBkZWYgZ2V0X29mdHlwZShzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0 aWQ9Tm9uZSk6CiAgICAgICAgICIiIgogICAgICAgICBSZXR1cm5zOgpAQCAtMTIyMCw3ICs3MjIs NyBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFj dXVtU2V0dGluZ3MpOgogICAgICAgICAiIiIKICAgICAgICAgcmVzID0gW3snbGFiZWwnOiAnJywg J3ZhbHVlJzogJyd9XQogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVt cGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgIFNRTCA9IHJl bmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X29mdHlwZS5zcWwnXSks IHNjaWQ9c2NpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJfdHlw ZT1zZWxmLm1hbmFnZXIuc2VydmVyX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2hvd19zeXNfb2JqZWN0cz1zZWxmLmJsdWVwcmludC5zaG93X3N5c3RlbV9vYmplY3Rz KQpAQCAtMTI0MSw3ICs3NDMsNyBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBE YXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICBleGNlcHQgRXhjZXB0aW9u IGFzIGU6CiAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXN0cihlKSkKIAotICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5j aGVja19wcmVjb25kaXRpb24KICAgICBkZWYgZ2V0X2luaGVyaXRzKHNlbGYsIGdpZCwgc2lkLCBk aWQsIHNjaWQsIHRpZD1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIFJldHVybnM6CkBAIC0x MjUwLDcgKzc1Miw3IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBl UmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgICIiIgogICAgICAgICB0cnk6CiAgICAg ICAgICAgICByZXMgPSBbXQotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsICdnZXRfaW5oZXJpdHMuc3FsJ10pLAorICAgICAgICAg ICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3Bh dGgsICdnZXRfaW5oZXJpdHMuc3FsJ10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNob3dfc3lzdGVtX29iamVjdHM9c2VsZi5ibHVlcHJpbnQuc2hvd19zeXN0ZW1fb2JqZWN0 cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl90eXBlPXNlbGYubWFuYWdlci5zZXJ2ZXJf dHlwZSkKQEAgLTEyNzEsNyArNzczLDM4IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZp ZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIGV4Y2VwdCBFeGNl cHRpb24gYXMgZToKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJy b3Jtc2c9c3RyKGUpKQogCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVW aWV3LmNoZWNrX3ByZWNvbmRpdGlvbgorICAgIGRlZiBnZXRfYXR0YWNoX3RhYmxlcyhzZWxmLCBn aWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQ9Tm9uZSk6CisgICAgICAgICIiIgorICAgICAgICBSZXR1 cm5zOgorICAgICAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiBsaXN0IG9mIHRhYmxl cyBhdmFpbGFibGUgdG8gYmUgYXR0YWNoZWQKKyAgICAgICAgICAgIHRvIHRoZSBwYXJ0aXRpb25l ZCB0YWJsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHJlcyA9IFtd CisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCisgICAgICAgICAg ICAgICAgW3NlbGYucGFydGl0aW9uX3RlbXBsYXRlX3BhdGgsICdnZXRfYXR0YWNoX3RhYmxlcy5z cWwnXSksCisgICAgICAgICAgICAgICAgdGlkPXRpZAorICAgICAgICAgICAgKQorCisgICAgICAg ICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKKyAgICAg ICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3Nl cnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgICAgIGZvciByb3cgaW4gcnNldFsn cm93cyddOgorICAgICAgICAgICAgICAgIHJlcy5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAg IHsnbGFiZWwnOiByb3dbJ3RhYmxlX25hbWUnXSwgJ3ZhbHVlJzogcm93WydvaWQnXX0KKyAgICAg ICAgICAgICAgICApCisKKyAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisg ICAgICAgICAgICAgICAgZGF0YT1yZXMsCisgICAgICAgICAgICAgICAgc3RhdHVzPTIwMAorICAg ICAgICAgICAgKQorCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAg IHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUpKQorCisgICAgQEJh c2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIGdldF9yZWxhdGlvbnMoc2Vs ZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkPU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAg UmV0dXJuczoKQEAgLTEyODAsNyArODEzLDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2Rl VmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgIiIiCiAgICAg ICAgIHJlcyA9IFt7J2xhYmVsJzogJycsICd2YWx1ZSc6ICcnfV0KICAgICAgICAgdHJ5OgotICAg ICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3Bh dGgsICdnZXRfcmVsYXRpb25zLnNxbCddKSwKKyAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1w bGF0ZSgiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLCAnZ2V0X3JlbGF0aW9ucy5z cWwnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd19zeXNfb2JqZWN0 cz1zZWxmLmJsdWVwcmludC5zaG93X3N5c3RlbV9vYmplY3RzLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNlcnZlcl90eXBlPXNlbGYubWFuYWdlci5zZXJ2ZXJfdHlwZSkKICAg ICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQpA QCAtMTI5OSwyMyArODMyLDYgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0 YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5h bF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUpKQogCiAgICAgQHN0YXRpY21ldGhvZAotICAg IGRlZiBfY2x0eXBlX2Zvcm1hdHRlcihkYXRhX3R5cGUpOgotICAgICAgICAiIiIKLQotICAgICAg ICBBcmdzOgotICAgICAgICAgICAgZGF0YV90eXBlOiBUeXBlIHN0cmluZwotCi0gICAgICAgIFJl dHVybnM6Ci0gICAgICAgICAgICBXZSBuZWVkIHRvIHJlbW92ZSBbXSBmcm9tIHR5cGUgYW5kIGFw cGVuZCBpdAotICAgICAgICAgICAgYWZ0ZXIgbGVuZ3RoL3ByZWNpc2lvbiBzbyB3ZSB3aWxsIHNl bmQgZmxhZyBmb3IKLSAgICAgICAgICAgIHNxbCB0ZW1wbGF0ZQotICAgICAgICAiIiIKLSAgICAg ICAgaWYgJ1tdJyBpbiBkYXRhX3R5cGU6Ci0gICAgICAgICAgICByZXR1cm4gZGF0YV90eXBlWzot Ml0sIFRydWUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIHJldHVybiBkYXRhX3R5cGUsIEZh bHNlCi0KLSAgICBAc3RhdGljbWV0aG9kCiAgICAgZGVmIGNvbnZlcnRfbGVuZ3RoX3ByZWNpc2lv bl90b19zdHJpbmcoZGF0YSk6CiAgICAgICAgICIiIgogICAgICAgICBUaGlzIGZ1bmN0aW9uIGlz IHVzZWQgdG8gY29udmVydCBsZW5ndGggJiBwcmVjaXNpb24gdG8gc3RyaW5nCkBAIC0xNDA5LDgg KzkyNSw5NSBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRl ciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgICAgIGRhdGFbJ25hbWUnXSA9IHN0cihk YXRhWyduYW1lJ10pCiAgICAgICAgIHJldHVybiBkYXRhCiAKKyAgICBkZWYgZ2V0X3NjaGVtYV9h bmRfdGFibGVfbmFtZShzZWxmLCB0aWQpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5j dGlvbiB3aWxsIGZldGNoIHRoZSBzY2hlbWEgcXVhbGlmaWVkIG5hbWUgb2YgdGhlCisgICAgICAg IGdpdmVuIHRhYmxlIGlkLgorCisgICAgICAgIDpwYXJhbSB0aWQ6IFRhYmxlIElkLgorICAgICAg ICAiIiIKKyAgICAgICAgIyBHZXQgc2NoZW1hIG9pZAorICAgICAgICBzdGF0dXMsIHNjaWQgPSBz ZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoCisgICAgICAgICAgICByZW5kZXJfdGVtcGxhdGUoIi8i LmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJ2dldF9zY2hlbWFfb2lkLnNxbCddKSwgdGlkPXRpZCkpCisgICAgICAg IGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9y KGVycm9ybXNnPXNjaWQpCisKKyAgICAgICAgIyBGZXRjaCBzY2hlbWEgbmFtZQorICAgICAgICBz dGF0dXMsIHNjaGVtYV9uYW1lID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKAorICAgICAgICAg ICAgcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfc2NoZW1hLnNxbCddKSwg Y29ubj1zZWxmLmNvbm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NpZD1zY2lkKQor ICAgICAgICApCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50 ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXNjaGVtYV9uYW1lKQorCisgICAgICAgICMgRmV0 Y2ggVGFibGUgbmFtZQorICAgICAgICBzdGF0dXMsIHRhYmxlX25hbWUgPSBzZWxmLmNvbm4uZXhl Y3V0ZV9zY2FsYXIoCisgICAgICAgICAgICByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAg ICAgIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ2dldF90YWJsZS5zcWwnXSks CisgICAgICAgICAgICAgICAgY29ubj1zZWxmLmNvbm4sIHNjaWQ9c2NpZCwgdGlkPXRpZAorICAg ICAgICAgICAgKQorICAgICAgICApCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAg ICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXRhYmxlX25hbWUpCisKKyAg ICAgICAgcmV0dXJuIHNjaGVtYV9uYW1lLCB0YWJsZV9uYW1lCiAKLSAgICBAY2hlY2tfcHJlY29u ZGl0aW9uCisgICAgZGVmIGdldF9wYXJ0aXRpb25zX3NxbChzZWxmLCBwYXJ0aXRpb25zKToKKyAg ICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBpdGVyYXRlIGFsbCB0aGUgcGFy dGl0aW9ucyBhbmQgY3JlYXRlIFNRTC4KKworICAgICAgICA6cGFyYW0gcGFydGl0aW9uczogTGlz dCBvZiBwYXJ0aXRpb25zCisgICAgICAgICIiIgorICAgICAgICBzcWwgPSAnJworCisgICAgICAg IGZvciByb3cgaW4gcGFydGl0aW9uc1sncGFydGl0aW9ucyddOgorICAgICAgICAgICAgcGFydF9k YXRhID0gZGljdCgpCisgICAgICAgICAgICBwYXJ0X2RhdGFbJ3BhcnRpdGlvbmVkX3RhYmxlX25h bWUnXSA9IHBhcnRpdGlvbnNbJ25hbWUnXQorICAgICAgICAgICAgcGFydF9kYXRhWydwYXJlbnRf c2NoZW1hJ10gPSBwYXJ0aXRpb25zWydzY2hlbWEnXQorCisgICAgICAgICAgICBpZiAnaXNfYXR0 YWNoJyBpbiByb3cgYW5kIHJvd1snaXNfYXR0YWNoJ106CisgICAgICAgICAgICAgICAgc2NoZW1h X25hbWUsIHRhYmxlX25hbWUgPSBcCisgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0X3NjaGVt YV9hbmRfdGFibGVfbmFtZShyb3dbJ3BhcnRpdGlvbl9uYW1lJ10pCisKKyAgICAgICAgICAgICAg ICBwYXJ0X2RhdGFbJ3NjaGVtYSddID0gc2NoZW1hX25hbWUKKyAgICAgICAgICAgICAgICBwYXJ0 X2RhdGFbJ25hbWUnXSA9IHRhYmxlX25hbWUKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg ICAgICAgcGFydF9kYXRhWydzY2hlbWEnXSA9IHBhcnRpdGlvbnNbJ3NjaGVtYSddCisgICAgICAg ICAgICAgICAgcGFydF9kYXRhWydyZWxpc3BhcnRpdGlvbiddID0gVHJ1ZQorICAgICAgICAgICAg ICAgIHBhcnRfZGF0YVsnbmFtZSddID0gcm93WydwYXJ0aXRpb25fbmFtZSddCisKKyAgICAgICAg ICAgIGlmIHBhcnRpdGlvbnNbJ3BhcnRpdGlvbl90eXBlJ10gPT0gJ3JhbmdlJzoKKyAgICAgICAg ICAgICAgICByYW5nZV9mcm9tID0gcm93Wyd2YWx1ZXNfZnJvbSddLnNwbGl0KCcsJykKKyAgICAg ICAgICAgICAgICByYW5nZV90byA9IHJvd1sndmFsdWVzX3RvJ10uc3BsaXQoJywnKQorCisgICAg ICAgICAgICAgICAgZnJvbV9zdHIgPSAnLCAnLmpvaW4oIid7MH0nIi5mb3JtYXQoaXRlbSkgZm9y IGl0ZW0gaW4gcmFuZ2VfZnJvbSkKKyAgICAgICAgICAgICAgICB0b19zdHIgPSAnLCAnLmpvaW4o Iid7MH0nIi5mb3JtYXQoaXRlbSkgZm9yIGl0ZW0gaW4gcmFuZ2VfdG8pCisKKyAgICAgICAgICAg ICAgICBwYXJ0X2RhdGFbJ3BhcnRpdGlvbl92YWx1ZSddID0gJ0ZPUiBWQUxVRVMgRlJPTSAoJyAr IGZyb21fc3RyIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKyAnKSBUTyAoJyArIHRvX3N0ciArICcpJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAg ICAgICAgICByYW5nZV9pbiA9IHJvd1sndmFsdWVzX2luJ10uc3BsaXQoJywnKQorICAgICAgICAg ICAgICAgIGluX3N0ciA9ICcsICcuam9pbigiJ3swfSciLmZvcm1hdChpdGVtKSBmb3IgaXRlbSBp biByYW5nZV9pbikKKyAgICAgICAgICAgICAgICBwYXJ0X2RhdGFbJ3BhcnRpdGlvbl92YWx1ZSdd ID0gJ0ZPUiBWQUxVRVMgSU4gKCcgKyBpbl9zdHIgKyAnKScKKworICAgICAgICAgICAgaWYgJ2lz X2F0dGFjaCcgaW4gcm93IGFuZCByb3dbJ2lzX2F0dGFjaCddOgorICAgICAgICAgICAgICAgIHBh cnRpdGlvbl9zcWwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgICAgICIvIi5q b2luKFtzZWxmLnBhcnRpdGlvbl90ZW1wbGF0ZV9wYXRoLCAnYXR0YWNoLnNxbCddKSwKKyAgICAg ICAgICAgICAgICAgICAgZGF0YT1wYXJ0X2RhdGEsIGNvbm49c2VsZi5jb25uCisgICAgICAgICAg ICAgICAgKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBwYXJ0aXRpb25fc3Fs ID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5w YXJ0aXRpb25fdGVtcGxhdGVfcGF0aCwgJ2NyZWF0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAg ICAgIGRhdGE9cGFydF9kYXRhLCBjb25uPXNlbGYuY29ubgorICAgICAgICAgICAgICAgICkKKwor ICAgICAgICAgICAgc3FsICs9IHBhcnRpdGlvbl9zcWwgKyAnXG4nCisKKyAgICAgICAgcmV0dXJu IHNxbAorCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIGNy ZWF0ZShzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkKToKICAgICAgICAgIiIiCiAgICAgICAgIFRo aXMgZnVuY3Rpb24gd2lsbCBjcmVhdGVzIG5ldyB0aGUgdGFibGUgb2JqZWN0CkBAIC0xNDc0LDkg KzEwNzcsMjIgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFk ZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgICAgICAgICBjWydyZW1vdGVfdGFibGUnXSA9 IHJzZXRbJ3Jvd3MnXVswXVsndGFibGUnXQogCiAgICAgICAgIHRyeToKLSAgICAgICAgICAgIFNR TCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAorICAgICAg ICAgICAgcGFydGl0aW9uc19zcWwgPSAnJworICAgICAgICAgICAgcGFydGl0aW9uZWQgPSBGYWxz ZQorICAgICAgICAgICAgaWYgJ2lzX3BhcnRpdGlvbmVkJyBpbiBkYXRhIGFuZCBkYXRhWydpc19w YXJ0aXRpb25lZCddOgorICAgICAgICAgICAgICAgIGRhdGFbJ3JlbGtpbmQnXSA9ICdwJworICAg ICAgICAgICAgICAgICMgY3JlYXRlIHBhcnRpdGlvbiBzY2hlbWUKKyAgICAgICAgICAgICAgICBk YXRhWydwYXJ0aXRpb25fc2NoZW1lJ10gPSBzZWxmLmdldF9wYXJ0aXRpb25fc2NoZW1lKGRhdGEp CisgICAgICAgICAgICAgICAgcGFydGl0aW9uc19zcWwgPSBzZWxmLmdldF9wYXJ0aXRpb25zX3Nx bChkYXRhKQorICAgICAgICAgICAgICAgIHBhcnRpdGlvbmVkID0gVHJ1ZQorCisgICAgICAgICAg ICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0 aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0ZS5z cWwnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBjb25u PXNlbGYuY29ubikKKworICAgICAgICAgICAgIyBBcHBlbmQgU1FMIGZvciBwYXJ0aXRpb25zCisg ICAgICAgICAgICBTUUwgKz0gJ1xuJyArIHBhcnRpdGlvbnNfc3FsCisKICAgICAgICAgICAgIHN0 YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKFNRTCkKICAgICAgICAgICAgIGlm IG5vdCBzdGF0dXM6CiAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1yZXMpCkBAIC0xNDkwLDcgKzExMDYsNyBAQCBjbGFzcyBUYWJsZVZpZXcoUEdD aGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAg ICAgICAgIGRhdGFbJ25hbWUnXSA9IGRhdGFbJ25hbWUnXVswOkNPTlNUX01BWF9DSEFSX0NPVU5U XQogCiAgICAgICAgICAgICAjIEdldCB1cGRhdGVkIHNjaGVtYSBvaWQKLSAgICAgICAgICAgIFNR TCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAorICAgICAg ICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRl X3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2dldF9zY2hlbWFfb2lk LnNxbCddKSwgdG5hbWU9ZGF0YVsnbmFtZSddKQogCiAgICAgICAgICAgICBzdGF0dXMsIHNjaWQg PSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoU1FMKQpAQCAtMTQ5OCw3ICsxMTE0LDcgQEAgY2xh c3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRp bmdzKToKICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9y bXNnPXNjaWQpCiAKICAgICAgICAgICAgICMgd2UgbmVlZCBvaWQgdG8gdG8gYWRkIG9iamVjdCBp biB0cmVlIGF0IGJyb3dzZXIKLSAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIu am9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBs YXRlKCIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ2dldF9vaWQuc3FsJ10pLCBzY2lkPXNjaWQsIGRhdGE9ZGF0YSkK ICAgICAgICAgICAgIHN0YXR1cywgdGlkID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKFNRTCkK ICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CkBAIC0xNTA5LDEzICsxMTI1LDE0IEBAIGNsYXNz IFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5n cyk6CiAgICAgICAgICAgICAgICAgICAgIHRpZCwKICAgICAgICAgICAgICAgICAgICAgc2NpZCwK ICAgICAgICAgICAgICAgICAgICAgZGF0YVsnbmFtZSddLAotICAgICAgICAgICAgICAgICAgICBp Y29uPSJpY29uLXRhYmxlIgorICAgICAgICAgICAgICAgICAgICBpY29uPSJpY29uLXRhYmxlIiwK KyAgICAgICAgICAgICAgICAgICAgaXNfcGFydGl0aW9uZWQ9cGFydGl0aW9uZWQKICAgICAgICAg ICAgICAgICApCiAgICAgICAgICAgICApCiAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToK ICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUp KQogCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3By ZWNvbmRpdGlvbgogICAgIGRlZiB1cGRhdGUoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlk KToKICAgICAgICAgIiIiCiAgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCB1cGRhdGUgYW4gZXhp c3RpbmcgdGFibGUgb2JqZWN0CkBAIC0xNTQ1LDcgKzExNjIsNyBAQCBjbGFzcyBUYWJsZVZpZXco UEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAg ICAgICAgaWYgbm90IHN0YXR1czoKICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2Vy dmVyX2Vycm9yKGVycm9ybXNnPXJlcykKIAotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBs YXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICBTUUwgPSByZW5k ZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X3NjaGVtYV9vaWQuc3FsJ10pLCB0aWQ9dGlk KQogICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNR TCkKICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CkBAIC0xNTU0LDE4ICsxMTcxLDI5IEBAIGNs YXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0 aW5ncyk6CiAgICAgICAgICAgICAjIG5ldyBzY2hlbWEgaWQKICAgICAgICAgICAgIHNjaWQgPSBy ZXNbJ3Jvd3MnXVswXVsnc2NpZCddCiAKKyAgICAgICAgICAgICMgQ2hlY2sgdGhlIHRhYmxlIGlz IHBhcnRpdGlvbmVkIHRhYmxlIG9yIG5vdAorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBs YXRlKCIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub2Rlcy5zcWwnXSksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2NpZD1zY2lkLCB0aWQ9dGlkKQorICAgICAgICAgICAgc3Rh dHVzLCByc2V0ID0gc2VsZi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCisgICAgICAgICAgICBp ZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJy b3IoZXJyb3Jtc2c9cnNldCkKKyAgICAgICAgICAgIGlmIGxlbihyc2V0Wydyb3dzJ10pID09IDA6 CisgICAgICAgICAgICAgICAgcmV0dXJuIGdvbmUoZ2V0dGV4dCgiQ291bGQgbm90IGZpbmQgdGhl IHRhYmxlLiIpKQorCiAgICAgICAgICAgICByZXR1cm4ganNvbmlmeSgKICAgICAgICAgICAgICAg ICBub2RlPXNlbGYuYmx1ZXByaW50LmdlbmVyYXRlX2Jyb3dzZXJfbm9kZSgKICAgICAgICAgICAg ICAgICAgICAgdGlkLAogICAgICAgICAgICAgICAgICAgICBzY2lkLAogICAgICAgICAgICAgICAg ICAgICBuYW1lLAotICAgICAgICAgICAgICAgICAgICBpY29uPSJpY29uLSVzIiAlIHNlbGYubm9k ZV90eXBlCisgICAgICAgICAgICAgICAgICAgIGljb249Imljb24tJXMiICUgc2VsZi5ub2RlX3R5 cGUsCisgICAgICAgICAgICAgICAgICAgIGlzX3BhcnRpdGlvbmVkPXJzZXRbJ3Jvd3MnXVswXVsn aXNfcGFydGl0aW9uZWQnXSBpZiAnaXNfcGFydGl0aW9uZWQnIGluIHJzZXRbJ3Jvd3MnXVswXSBl bHNlIEZhbHNlCiAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgKQogICAgICAgICBleGNl cHQgRXhjZXB0aW9uIGFzIGU6CiAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXN0cihlKSkKIAotICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBAQmFz ZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KICAgICBkZWYgZGVsZXRlKHNlbGYsIGdpZCwg c2lkLCBkaWQsIHNjaWQsIHRpZCk6CiAgICAgICAgICIiIgogICAgICAgICBUaGlzIGZ1bmN0aW9u IHdpbGwgZGVsZXRlcyB0aGUgdGFibGUgb2JqZWN0CkBAIC0xNTg1LDcgKzEyMTMsNyBAQCBjbGFz cyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGlu Z3MpOgogICAgICAgICAgICAgY2FzY2FkZSA9IEZhbHNlCiAKICAgICAgICAgdHJ5OgotICAgICAg ICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgs CisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGFibGVf dGVtcGxhdGVfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKQEAgLTE2MDYsNyArMTIz NCw3IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBW YWN1dW1TZXR0aW5ncyk6CiAKICAgICAgICAgICAgIGRhdGEgPSByZXNbJ3Jvd3MnXVswXQogCi0g ICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVf cGF0aCwKKyAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50 YWJsZV90ZW1wbGF0ZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAnZGVsZXRlLnNxbCddKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkYXRhPWRhdGEsIGNhc2NhZGU9Y2FzY2FkZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25uPXNlbGYuY29ubikKQEAgLTE2MjYsNyArMTI1NCw3IEBAIGNsYXNzIFRhYmxl VmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAg ICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5h bF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUpKQogCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlv bgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiB0cnVuY2F0 ZShzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQpOgogICAgICAgICAiIiIKICAgICAgICAg VGhpcyBmdW5jdGlvbiB3aWxsIHRydW5jYXRlIHRoZSB0YWJsZSBvYmplY3QKQEAgLTE2NDYsNyAr MTI3NCw3IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVy LCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIGlzX2Nhc2NhZGUgPSBqc29uLmxvYWRzKGRhdGFb J2Nhc2NhZGUnXSkKIAogICAgICAgICB0cnk6Ci0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVt cGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgIFNRTCA9IHJl bmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0 aWQ9dGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9 c2VsZi5kYXRsYXN0c3lzb2lkKQpAQCAtMTY1NSw3ICsxMjgzLDcgQEAgY2xhc3MgVGFibGVWaWV3 KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAg ICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKICAg ICAgICAgICAgIGRhdGEgPSByZXNbJ3Jvd3MnXVswXQogCi0gICAgICAgICAgICBTUUwgPSByZW5k ZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgIFNR TCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJ1bmNhdGUuc3Fs J10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY2FzY2Fk ZT1pc19jYXNjYWRlKQogICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0 ZV9zY2FsYXIoU1FMKQpAQCAtMTY3NCw3ICsxMzAyLDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hp bGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgZXhj ZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9l cnJvcihlcnJvcm1zZz1zdHIoZSkpCiAKLSAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisgICAgQEJh c2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIGVuYWJsZV9kaXNhYmxlX3Ry aWdnZXJzKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCk6CiAgICAgICAgICIiIgogICAg ICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgZW5hYmxlL2Rpc2FibGUgdHJpZ2dlcihzKSBvbiB0aGUg dGFibGUgb2JqZWN0CkBAIC0xNjk0LDcgKzEzMjIsNyBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGls ZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICBpc19l bmFibGUgPSBqc29uLmxvYWRzKGRhdGFbJ2VuYWJsZSddKQogCiAgICAgICAgIHRyeToKLSAgICAg ICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRo LAorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRhYmxl X3RlbXBsYXRlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkaWQ9ZGlkLCBzY2lkPXNjaWQsIHRpZD10aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCkBAIC0xNzAzLDcgKzEz MzEsNyBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwg VmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9cmVzKQogICAgICAgICAgICAgZGF0YSA9IHJlc1sncm93cyddWzBdCiAK LSAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0 ZV9wYXRoLAorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxm LnRhYmxlX3RlbXBsYXRlX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICdlbmFibGVfZGlzYWJsZV90cmlnZ2VyLnNxbCddKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEsIGlzX2VuYWJsZV90cmlnZ2VyPWlzX2VuYWJs ZSkKICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKFNR TCkKQEAgLTE3MjMsNyArMTM1MSw3IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcs IERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIGV4Y2VwdCBFeGNlcHRp b24gYXMgZToKICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jt c2c9c3RyKGUpKQogCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3 LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiByZXNldChzZWxmLCBnaWQsIHNpZCwgZGlkLCBz Y2lkLCB0aWQpOgogICAgICAgICAiIiIKICAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHJlc2V0 IHN0YXRpc3RpY3Mgb2YgdGFibGUKQEAgLTE3MzUsMjcgKzEzNjMsOSBAQCBjbGFzcyBUYWJsZVZp ZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAg ICAgICAgICBzY2lkOiBTY2hlbWEgSUQKICAgICAgICAgICAgdGlkOiBUYWJsZSBJRAogICAgICAg ICAiIiIKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIv Ii5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICdyZXNldF9zdGF0cy5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGlkPXRpZCkKLSAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5j b25uLmV4ZWN1dGVfc2NhbGFyKFNRTCkKLSAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAg ICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCi0K LSAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCi0gICAgICAgICAgICAgICAg c3VjY2Vzcz0xLAotICAgICAgICAgICAgICAgIGluZm89Z2V0dGV4dCgiVGFibGUgc3RhdGlzdGlj cyBoYXZlIGJlZW4gcmVzZXQiKSwKLSAgICAgICAgICAgICAgICBkYXRhPXsKLSAgICAgICAgICAg ICAgICAgICAgJ2lkJzogdGlkLAotICAgICAgICAgICAgICAgICAgICAnc2NpZCc6IHNjaWQKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICApCisgICAgICAgIHJldHVybiBCYXNlVGFibGVW aWV3LnJlc2V0X3N0YXRpc3RpY3Moc2VsZiwgc2NpZCwgdGlkKQogCi0gICAgICAgIGV4Y2VwdCBF eGNlcHRpb24gYXMgZToKLSAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3Io ZXJyb3Jtc2c9c3RyKGUpKQotCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFi bGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBtc3FsKHNlbGYsIGdpZCwgc2lkLCBk aWQsIHNjaWQsIHRpZD1Ob25lKToKICAgICAgICAgIiIiCiAgICAgICAgIFRoaXMgZnVuY3Rpb24g d2lsbCBjcmVhdGUgbW9kaWZpZWQgc3FsIGZvciB0YWJsZSBvYmplY3QKQEAgLTIxODgsNyArMTc5 OCw3IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBW YWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIGNvbWluZyBmcm9tIGNsaWVudAogICAgICAgICAiIiIK ICAgICAgICAgaWYgdGlkIGlzIG5vdCBOb25lOgotICAgICAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICBTUUwgPSBy ZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10p LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwg dGlkPXRpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRsYXN0c3lzb2lk PXNlbGYuZGF0bGFzdHN5c29pZCkKQEAgLTIyNDQsNyArMTg1NCw3IEBAIGNsYXNzIFRhYmxlVmll dyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAg ICAgICAgICAgICAgICAgICAgICBzZXQob2xkX2RhdGFbJ2NvbGxfaW5oZXJpdHMnXSkgLSBzZXQo ZGF0YVsnY29sbF9pbmhlcml0cyddKQogICAgICAgICAgICAgICAgICAgICApCiAKLSAgICAgICAg ICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAn dXBkYXRlLnNxbCddKSwKKyAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9p bihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLCAndXBkYXRlLnNxbCddKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBvX2RhdGE9b2xkX2RhdGEsIGRhdGE9ZGF0YSwgY29ubj1z ZWxmLmNvbm4pCiAgICAgICAgICAgICAjIFJlbW92ZXMgdHJhaW5pbmcgbmV3IGxpbmVzCiAgICAg ICAgICAgICBTUUwgPSBTUUwuc3RyaXAoJ1xuJykgKyAnXG5cbicKQEAgLTIzNDIsNiArMTk1Miw0 NCBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFj dXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgICAgICMgQ29tYmluZSBhbGwgdGhlIFNRTCB0b2dl dGhlcgogICAgICAgICAgICAgICAgIFNRTCArPSBjb2x1bW5fc3FsLnN0cmlwKCdcbicpCiAKKyAg ICAgICAgICAgICMgQ2hlY2sgZm9yIHBhcnRpdGlvbnMKKyAgICAgICAgICAgIGlmICdwYXJ0aXRp b25zJyBpbiBkYXRhOgorICAgICAgICAgICAgICAgIHBhcnRpdGlvbnMgPSBkYXRhWydwYXJ0aXRp b25zJ10KKyAgICAgICAgICAgICAgICBwYXJ0aXRpb25zX3NxbCA9ICdcbicKKworICAgICAgICAg ICAgICAgICMgSWYgcGFydGl0aW9uKHMpIGlzL2FyZSBkZWxldGVkCisgICAgICAgICAgICAgICAg aWYgJ2RlbGV0ZWQnIGluIHBhcnRpdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIGZvciByb3cg aW4gcGFydGl0aW9uc1snZGVsZXRlZCddOgorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9k YXRhID0gZGljdCgpCisgICAgICAgICAgICAgICAgICAgICAgICBzY2hlbWFfbmFtZSwgdGFibGVf bmFtZSA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldF9zY2hlbWFfYW5k X3RhYmxlX25hbWUocm93WydvaWQnXSkKKworICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9k YXRhWydwYXJlbnRfc2NoZW1hJ10gPSBvbGRfZGF0YVsnc2NoZW1hJ10KKyAgICAgICAgICAgICAg ICAgICAgICAgIHRlbXBfZGF0YVsncGFydGl0aW9uZWRfdGFibGVfbmFtZSddID0gb2xkX2RhdGFb J25hbWUnXQorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhWydzY2hlbWEnXSA9IHNj aGVtYV9uYW1lCisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wX2RhdGFbJ25hbWUnXSA9IHRh YmxlX25hbWUKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBTcWwgZm9yIGRldGFjaCBwYXJ0 aXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpdGlvbnNfc3FsICs9IHJlbmRlcl90 ZW1wbGF0ZSgiLyIuam9pbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZi5wYXJ0 aXRpb25fdGVtcGxhdGVfcGF0aCwgJ2RldGFjaC5zcWwnXSksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGF0YT10ZW1wX2RhdGEsIGNvbm49c2VsZi5jb25uKS5zdHJpcCgnXG4nKSArICdc blxuJworCisgICAgICAgICAgICAgICAgIyBJZiBwYXJ0aXRpb24ocykgaXMvYXJlIGFkZGVkCisg ICAgICAgICAgICAgICAgaWYgJ2FkZGVkJyBpbiBwYXJ0aXRpb25zOgorICAgICAgICAgICAgICAg ICAgICB0ZW1wX2RhdGEgPSBkaWN0KCkKKyAgICAgICAgICAgICAgICAgICAgdGVtcF9kYXRhWydz Y2hlbWEnXSA9IG9sZF9kYXRhWydzY2hlbWEnXQorICAgICAgICAgICAgICAgICAgICB0ZW1wX2Rh dGFbJ25hbWUnXSA9IG9sZF9kYXRhWyduYW1lJ10KKyAgICAgICAgICAgICAgICAgICAgIyBnZXQg dGhlIHBhcnRpdGlvbiB0eXBlCisgICAgICAgICAgICAgICAgICAgIHRlbXBfZGF0YVsncGFydGl0 aW9uX3R5cGUnXSA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9kYXRhWydwYXJ0aXRp b25fc2NoZW1lJ10uc3BsaXQoKVswXS5sb3dlcigpCisgICAgICAgICAgICAgICAgICAgIHRlbXBf ZGF0YVsncGFydGl0aW9ucyddID0gcGFydGl0aW9uc1snYWRkZWQnXQorCisgICAgICAgICAgICAg ICAgICAgIHBhcnRpdGlvbnNfc3FsICs9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYu Z2V0X3BhcnRpdGlvbnNfc3FsKHRlbXBfZGF0YSkuc3RyaXAoJ1xuJykgKyAnXG5cbicKKworICAg ICAgICAgICAgICAgICMgQ29tYmluZSBhbGwgdGhlIFNRTCB0b2dldGhlcgorICAgICAgICAgICAg ICAgIFNRTCArPSBwYXJ0aXRpb25zX3NxbC5zdHJpcCgnXG4nKQorCiAgICAgICAgICAgICAjIENo ZWNrIGlmIGluZGV4IGNvbnN0cmFpbnRzIGFyZSBhZGRlZC9jaGFuZ2VkL2RlbGV0ZWQKICAgICAg ICAgICAgIGluZGV4X2NvbnN0cmFpbnRfc3FsID0gc2VsZi5nZXRfaW5kZXhfY29uc3RyYWludF9z cWwoZGlkLCB0aWQsIGRhdGEpCiAgICAgICAgICAgICAjIElmIHdlIGhhdmUgaW5kZXggY29uc3Ry YWludCBzcWwgdGhlbiBhZCBpdCBpbiBtYWluIHNxbApAQCAtMjQwNSwxNSArMjA1Myw0OSBAQCBj bGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0 dGluZ3MpOgogICAgICAgICAgICAgICAgICAgICBjWydyZW1vdGVfc2NoZW1hJ10gPSByc2V0Wydy b3dzJ11bMF1bJ3NjaGVtYSddCiAgICAgICAgICAgICAgICAgICAgIGNbJ3JlbW90ZV90YWJsZSdd ID0gcnNldFsncm93cyddWzBdWyd0YWJsZSddCiAKLSAgICAgICAgICAgICMgSWYgdGhlIHJlcXVl c3QgZm9yIG5ldyBvYmplY3Qgd2hpY2ggZG8gbm90IGhhdmUgZGlkCi0gICAgICAgICAgICBTUUwg PSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwgJ2NyZWF0ZS5z cWwnXSksCisgICAgICAgICAgICBwYXJ0aXRpb25zX3NxbCA9ICcnCisgICAgICAgICAgICBpZiAn aXNfcGFydGl0aW9uZWQnIGluIGRhdGEgYW5kIGRhdGFbJ2lzX3BhcnRpdGlvbmVkJ106CisgICAg ICAgICAgICAgICAgZGF0YVsncmVsa2luZCddID0gJ3AnCisgICAgICAgICAgICAgICAgIyBjcmVh dGUgcGFydGl0aW9uIHNjaGVtZQorICAgICAgICAgICAgICAgIGRhdGFbJ3BhcnRpdGlvbl9zY2hl bWUnXSA9IHNlbGYuZ2V0X3BhcnRpdGlvbl9zY2hlbWUoZGF0YSkKKyAgICAgICAgICAgICAgICBw YXJ0aXRpb25zX3NxbCA9IHNlbGYuZ2V0X3BhcnRpdGlvbnNfc3FsKGRhdGEpCisKKyAgICAgICAg ICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9w YXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3JlYXRl LnNxbCddKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEsIGNv bm49c2VsZi5jb25uKQorCisgICAgICAgICAgICAjIEFwcGVuZCBTUUwgZm9yIHBhcnRpdGlvbnMK KyAgICAgICAgICAgIFNRTCArPSAnXG4nICsgcGFydGl0aW9uc19zcWwKKwogICAgICAgICBTUUwg PSByZS5zdWIoJ1xuezIsfScsICdcblxuJywgU1FMKQogICAgICAgICBTUUwgPSBTUUwuc3RyaXAo J1xuJykKIAogICAgICAgICByZXR1cm4gU1FMLCBkYXRhWyduYW1lJ10gaWYgJ25hbWUnIGluIGRh dGEgZWxzZSBvbGRfZGF0YVsnbmFtZSddCiAKICAgICBAc3RhdGljbWV0aG9kCisgICAgZGVmIGdl dF9wYXJ0aXRpb25fc2NoZW1lKGRhdGEpOgorICAgICAgICBwYXJ0aXRpb25fc2NoZW1lID0gTm9u ZQorICAgICAgICBpZiAncGFydGl0aW9uX3R5cGUnIGluIGRhdGEgXAorICAgICAgICAgICAgICAg IGFuZCBkYXRhWydwYXJ0aXRpb25fdHlwZSddID09ICdyYW5nZSc6CisgICAgICAgICAgICBwYXJ0 aXRpb25fc2NoZW1lID0gJ1JBTkdFICgnCisgICAgICAgIGVsaWYgJ3BhcnRpdGlvbl90eXBlJyBp biBkYXRhIFwKKyAgICAgICAgICAgICAgICBhbmQgZGF0YVsncGFydGl0aW9uX3R5cGUnXSA9PSAn bGlzdCc6CisgICAgICAgICAgICBwYXJ0aXRpb25fc2NoZW1lID0gJ0xJU1QgKCcKKworICAgICAg ICBmb3Igcm93IGluIGRhdGFbJ3BhcnRpdGlvbl9rZXlzJ106CisgICAgICAgICAgICBpZiByb3db J2tleV90eXBlJ10gPT0gJ2NvbHVtbic6CisgICAgICAgICAgICAgICAgcGFydGl0aW9uX3NjaGVt ZSArPSByb3dbJ3B0X2NvbHVtbiddICsgJywgJworICAgICAgICAgICAgZWxpZiByb3dbJ2tleV90 eXBlJ10gPT0gJ2V4cHJlc3Npb24nOgorICAgICAgICAgICAgICAgIHBhcnRpdGlvbl9zY2hlbWUg Kz0gcm93WydleHByZXNzaW9uJ10gKyAnLCAnCisKKyAgICAgICAgIyBSZW1vdmUgZXh0cmEgc3Bh Y2UgYW5kIGNvbW1hCisgICAgICAgIGlmIGxlbihkYXRhWydwYXJ0aXRpb25fa2V5cyddKSA+IDA6 CisgICAgICAgICAgICBwYXJ0aXRpb25fc2NoZW1lID0gcGFydGl0aW9uX3NjaGVtZVs6LTJdCisg ICAgICAgIHBhcnRpdGlvbl9zY2hlbWUgKz0gJyknCisKKyAgICAgICAgcmV0dXJuIHBhcnRpdGlv bl9zY2hlbWUKKworICAgIEBzdGF0aWNtZXRob2QKICAgICBkZWYgdmFsaWRhdGVfY29uc3RyYWlu cyhrZXksIGRhdGEpOgogCiAgICAgICAgIGlmIGtleSA9PSAncHJpbWFyeV9rZXknIG9yIGtleSA9 PSAndW5pcXVlX2NvbnN0cmFpbnQnOgpAQCAtMjQ0Nyw3ICsyMTI5LDcgQEAgY2xhc3MgVGFibGVW aWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKIAog ICAgICAgICByZXR1cm4gVHJ1ZQogCi0gICAgQGNoZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNl VGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAgIGRlZiBkZXBlbmRlbnRzKHNlbGYsIGdp ZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCk6CiAgICAgICAgICIiIgogICAgICAgICBUaGlzIGZ1bmN0 aW9uIGdldCB0aGUgZGVwZW5kZW50cyBhbmQgcmV0dXJuIGFqYXggcmVzcG9uc2UKQEAgLTI0NjAs NDMgKzIxNDIsOSBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJl YWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgc2NpZDogU2NoZW1hIElECiAgICAg ICAgICAgICB0aWQ6IFRhYmxlIElECiAgICAgICAgICIiIgotICAgICAgICAjIFNwZWNpZmljIGNv bmRpdGlvbiBmb3IgY29sdW1uIHdoaWNoIHdlIG5lZWQgdG8gYXBwZW5kCi0gICAgICAgIHdoZXJl ID0gIldIRVJFIGRlcC5yZWZvYmppZD17MH06Ok9JRCIuZm9ybWF0KHRpZCkKLQotICAgICAgICBk ZXBlbmRlbnRzX3Jlc3VsdCA9IHNlbGYuZ2V0X2RlcGVuZGVudHMoCi0gICAgICAgICAgICBzZWxm LmNvbm4sIHRpZAotICAgICAgICApCi0KLSAgICAgICAgIyBTcGVjaWZpYyBzcWwgdG8gcnVuIGFn YWludCBjb2x1bW4gdG8gZmV0Y2ggZGVwZW5kZW50cwotICAgICAgICBTUUwgPSByZW5kZXJfdGVt cGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnZGVwZW5kLnNxbCddKSwgd2hlcmU9d2hlcmUpCi0KLSAgICAg ICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKLSAgICAgICAgaWYg bm90IHN0YXR1czoKLSAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJy b3Jtc2c9cmVzKQotCi0gICAgICAgIGZvciByb3cgaW4gcmVzWydyb3dzJ106Ci0gICAgICAgICAg ICByZWZfbmFtZSA9IHJvd1sncmVmbmFtZSddCi0gICAgICAgICAgICBpZiByZWZfbmFtZSBpcyBO b25lOgotICAgICAgICAgICAgICAgIGNvbnRpbnVlCi0KLSAgICAgICAgICAgIGRlcF90eXBlID0g JycKLSAgICAgICAgICAgIGRlcF9zdHIgPSByb3dbJ2RlcHR5cGUnXQotICAgICAgICAgICAgaWYg ZGVwX3N0ciA9PSAnYSc6Ci0gICAgICAgICAgICAgICAgZGVwX3R5cGUgPSAnYXV0bycKLSAgICAg ICAgICAgIGVsaWYgZGVwX3N0ciA9PSAnbic6Ci0gICAgICAgICAgICAgICAgZGVwX3R5cGUgPSAn bm9ybWFsJwotICAgICAgICAgICAgZWxpZiBkZXBfc3RyID09ICdpJzoKLSAgICAgICAgICAgICAg ICBkZXBfdHlwZSA9ICdpbnRlcm5hbCcKLQotICAgICAgICAgICAgZGVwZW5kZW50c19yZXN1bHQu YXBwZW5kKHsndHlwZSc6ICdzZXF1ZW5jZScsICduYW1lJzogcmVmX25hbWUsICdmaWVsZCc6IGRl cF90eXBlfSkKLQotICAgICAgICByZXR1cm4gYWpheF9yZXNwb25zZSgKLSAgICAgICAgICAgIHJl c3BvbnNlPWRlcGVuZGVudHNfcmVzdWx0LAotICAgICAgICAgICAgc3RhdHVzPTIwMAotICAgICAg ICApCisgICAgICAgIHJldHVybiBCYXNlVGFibGVWaWV3LmdldF90YWJsZV9kZXBlbmRlbnRzKHNl bGYsIHRpZCkKIAotICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5j aGVja19wcmVjb25kaXRpb24KICAgICBkZWYgZGVwZW5kZW5jaWVzKHNlbGYsIGdpZCwgc2lkLCBk aWQsIHNjaWQsIHRpZCk6CiAgICAgICAgICIiIgogICAgICAgICBUaGlzIGZ1bmN0aW9uIGdldCB0 aGUgZGVwZW5kZW5jaWVzIGFuZCByZXR1cm4gYWpheCByZXNwb25zZQpAQCAtMjUwOCwxOCArMjE1 NiwxMCBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwg VmFjdXVtU2V0dGluZ3MpOgogICAgICAgICAgICAgZGlkOiBEYXRhYmFzZSBJRAogICAgICAgICAg ICAgc2NpZDogU2NoZW1hIElECiAgICAgICAgICAgICB0aWQ6IFRhYmxlIElECi0KICAgICAgICAg IiIiCi0gICAgICAgIGRlcGVuZGVuY2llc19yZXN1bHQgPSBzZWxmLmdldF9kZXBlbmRlbmNpZXMo Ci0gICAgICAgICAgICBzZWxmLmNvbm4sIHRpZAotICAgICAgICApCi0KLSAgICAgICAgcmV0dXJu IGFqYXhfcmVzcG9uc2UoCi0gICAgICAgICAgICByZXNwb25zZT1kZXBlbmRlbmNpZXNfcmVzdWx0 LAotICAgICAgICAgICAgc3RhdHVzPTIwMAotICAgICAgICApCisgICAgICAgIHJldHVybiBCYXNl VGFibGVWaWV3LmdldF90YWJsZV9kZXBlbmRlbmNpZXMoc2VsZiwgdGlkKQogCi0gICAgQGNoZWNr X3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgogICAg IGRlZiBzcWwoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkKToKICAgICAgICAgIiIiCiAg ICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGVzIHJldmVyc2UgZW5naW5lZXJlZCBzcWwg Zm9yCkBAIC0yNTM0LDEyICsyMTc0LDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmll dywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgIiIiCiAgICAgICAg IG1haW5fc3FsID0gW10KIAotICAgICAgICAiIiIKLSAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICAjIDEpIFJldmVyc2UgZW5naW5lZXJlZCBzcWwg Zm9yIFRBQkxFCi0gICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK LSAgICAgICAgIiIiCi0gICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2Vs Zi50ZW1wbGF0ZV9wYXRoLAorICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4o W3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkaWQ9ZGlkLCBzY2lkPXNjaWQsIHRpZD10aWQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKQEAgLTI1NTIsMjUwICsy MTg3LDEwIEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVy LCBWYWN1dW1TZXR0aW5ncyk6CiAKICAgICAgICAgZGF0YSA9IHJlc1sncm93cyddWzBdCiAKLSAg ICAgICAgIyBUYWJsZSAmIFNjaGVtYSBkZWNsYXJhdGlvbiBzbyB0aGF0IHdlIGNhbiB1c2UgdGhl bSBpbiBjaGlsZCBub2RlcwotICAgICAgICBzY2hlbWEgPSBkYXRhWydzY2hlbWEnXQotICAgICAg ICB0YWJsZSA9IGRhdGFbJ25hbWUnXQotCi0gICAgICAgIGRhdGEgPSBzZWxmLl9mb3JtYXR0ZXIo ZGlkLCBzY2lkLCB0aWQsIGRhdGEpCi0KLSAgICAgICAgIyBOb3cgd2UgaGF2ZSBhbGwgbGlzIG9m IGNvbHVtbnMgd2hpY2ggd2UgbmVlZAotICAgICAgICAjIHRvIGluY2x1ZGUgaW4gb3VyIGNyZWF0 ZSBkZWZpbml0aW9uLCBMZXQncyBmb3JtYXQgdGhlbQotICAgICAgICBpZiAnY29sdW1ucycgaW4g ZGF0YToKLSAgICAgICAgICAgIGZvciBjIGluIGRhdGFbJ2NvbHVtbnMnXToKLSAgICAgICAgICAg ICAgICBpZiAnYXR0YWNsJyBpbiBjOgotICAgICAgICAgICAgICAgICAgICBjWydhdHRhY2wnXSA9 IHBhcnNlX3ByaXZfdG9fZGIoY1snYXR0YWNsJ10sIHNlbGYuY29sdW1uX2FjbCkKLQotICAgICAg ICAgICAgICAgICMgY2hlY2sgdHlwZSBmb3IgJ1tdJyBpbiBpdAotICAgICAgICAgICAgICAgIGlm ICdjbHR5cGUnIGluIGM6Ci0gICAgICAgICAgICAgICAgICAgIGNbJ2NsdHlwZSddLCBjWydoYXNT cXJCcmFja2V0J10gPSBzZWxmLl9jbHR5cGVfZm9ybWF0dGVyKGNbJ2NsdHlwZSddKQotCi0gICAg ICAgIHNxbF9oZWFkZXIgPSB1Ii0tIFRhYmxlOiB7MH1cblxuLS0gIi5mb3JtYXQoc2VsZi5xdElk ZW50KHNlbGYuY29ubiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkYXRhWydzY2hlbWEnXSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWyduYW1l J10pKQorICAgICAgICByZXR1cm4gQmFzZVRhYmxlVmlldy5nZXRfcmV2ZXJzZV9lbmdpbmVlcmVk X3NxbCgKKyAgICAgICAgICAgIHNlbGYsIGRpZCwgc2NpZCwgdGlkLCBtYWluX3NxbCwgZGF0YSkK IAotICAgICAgICBzcWxfaGVhZGVyICs9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50 ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ2RlbGV0ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCi0KLSAgICAgICAgc3FsX2hlYWRlciA9IHNx bF9oZWFkZXIuc3RyaXAoJ1xuJykKLSAgICAgICAgc3FsX2hlYWRlciArPSAnXG4nCi0KLSAgICAg ICAgIyBBZGQgaW50byBtYWluIHNxbAotICAgICAgICBtYWluX3NxbC5hcHBlbmQoc3FsX2hlYWRl cikKLQotICAgICAgICAjIFBhcnNlIHByaXZpbGVnZSBkYXRhCi0gICAgICAgIGlmICdyZWxhY2wn IGluIGRhdGE6Ci0gICAgICAgICAgICBkYXRhWydyZWxhY2wnXSA9IHBhcnNlX3ByaXZfdG9fZGIo ZGF0YVsncmVsYWNsJ10sIHNlbGYuYWNsKQotCi0gICAgICAgICMgSWYgdGhlIHJlcXVlc3QgZm9y IG5ldyBvYmplY3Qgd2hpY2ggZG8gbm90IGhhdmUgZGlkCi0gICAgICAgIHRhYmxlX3NxbCA9IHJl bmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjcmVhdGUuc3FsJ10pLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBjb25uPXNlbGYuY29ubiwg aXNfc3FsPVRydWUpCi0KLSAgICAgICAgIyBBZGQgaW50byBtYWluIHNxbAotICAgICAgICB0YWJs ZV9zcWwgPSByZS5zdWIoJ1xuezIsfScsICdcblxuJywgdGFibGVfc3FsKQotICAgICAgICBtYWlu X3NxbC5hcHBlbmQodGFibGVfc3FsLnN0cmlwKCdcbicpKQotCi0gICAgICAgICIiIgotICAgICAg ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotICAgICAgICAjIDIpIFJl dmVyc2UgZW5naW5lZXJlZCBzcWwgZm9yIElOREVYCi0gICAgICAgICMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gICAgICAgICIiIgotCi0gICAgICAgIFNRTCA9IHJlbmRl cl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5pbmRleF90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub2Rlcy5zcWwnXSksIHRpZD10aWQpCi0g ICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQotICAg ICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9l cnJvcihlcnJvcm1zZz1yc2V0KQotCi0gICAgICAgIGZvciByb3cgaW4gcnNldFsncm93cyddOgot Ci0gICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuaW5kZXhf dGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRpZD1kaWQsIHRpZD10aWQsIGlkeD1yb3dbJ29pZCddLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkKQotCi0gICAgICAg ICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQotICAgICAgICAg ICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVy X2Vycm9yKGVycm9ybXNnPXJlcykKLQotICAgICAgICAgICAgZGF0YSA9IGRpY3QocmVzWydyb3dz J11bMF0pCi0gICAgICAgICAgICAjIEFkZGluZyBwYXJlbnQgaW50byBkYXRhIGRpY3QsIHdpbGwg YmUgdXNpbmcgaXQgd2hpbGUgY3JlYXRpbmcgc3FsCi0gICAgICAgICAgICBkYXRhWydzY2hlbWEn XSA9IHNjaGVtYQotICAgICAgICAgICAgZGF0YVsndGFibGUnXSA9IHRhYmxlCi0gICAgICAgICAg ICAjIFdlIGFsc28gbmVlZCB0byBmZWN0aCBjb2x1bW5zIG9mIGluZGV4Ci0gICAgICAgICAgICBT UUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuaW5kZXhfdGVtcGxhdGVfcGF0aCwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbHVtbl9kZXRh aWxzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHg9cm93Wydv aWQnXSkKLSAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJy YXkoU1FMKQotICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgICAgICByZXR1 cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJzZXQpCi0KLSAgICAgICAgICAgICMg J2F0dGRlZicgY29tZXMgd2l0aCBxdW90ZXMgZnJvbSBxdWVyeSBzbyB3ZSBuZWVkIHRvIHN0cmlw IHRoZW0KLSAgICAgICAgICAgICMgJ29wdGlvbnMnIHdlIG5lZWQgdHJ1ZS9mYWxzZSB0byByZW5k ZXIgc3dpdGNoIEFTQyhmYWxzZSkvREVTQyh0cnVlKQotICAgICAgICAgICAgY29sdW1ucyA9IFtd Ci0gICAgICAgICAgICBjb2xzID0gW10KLSAgICAgICAgICAgIGZvciBjb2xfcm93IGluIHJzZXRb J3Jvd3MnXToKLSAgICAgICAgICAgICAgICAjIFdlIG5lZWQgYWxsIGRhdGEgYXMgY29sbGVjdGlv biBmb3IgQ29sdW1uc01vZGVsCi0gICAgICAgICAgICAgICAgY29sc19kYXRhID0gewotICAgICAg ICAgICAgICAgICAgICAnY29sbmFtZSc6IGNvbF9yb3dbJ2F0dGRlZiddLnN0cmlwKCciJyksCi0g ICAgICAgICAgICAgICAgICAgICdjb2xsc3BjbmFtZSc6IGNvbF9yb3dbJ2NvbGxuc3BuYW1lJ10s Ci0gICAgICAgICAgICAgICAgICAgICdvcF9jbGFzcyc6IGNvbF9yb3dbJ29wY25hbWUnXSwKLSAg ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgY29sX3Jvd1snb3B0aW9ucyddWzBd ID09ICdERVNDJzoKLSAgICAgICAgICAgICAgICAgICAgY29sc19kYXRhWydzb3J0X29yZGVyJ10g PSBUcnVlCi0gICAgICAgICAgICAgICAgY29sdW1ucy5hcHBlbmQoY29sc19kYXRhKQotCi0gICAg ICAgICAgICAgICAgIyBXZSBuZWVkIHNhbWUgZGF0YSBhcyBzdHJpbmcgdG8gZGlzcGxheSBpbiBw cm9wZXJ0aWVzIHdpbmRvdwotICAgICAgICAgICAgICAgICMgSWYgbXVsdGlwbGUgY29sdW1uIHRo ZW4gc2VwYXJhdGUgaXQgYnkgY29sb24KLSAgICAgICAgICAgICAgICBjb2xzX3N0ciA9IGNvbF9y b3dbJ2F0dGRlZiddCi0gICAgICAgICAgICAgICAgaWYgY29sX3Jvd1snY29sbG5zcG5hbWUnXToK LSAgICAgICAgICAgICAgICAgICAgY29sc19zdHIgKz0gJyBDT0xMQVRFICcgKyBjb2xfcm93Wydj b2xsbnNwbmFtZSddCi0gICAgICAgICAgICAgICAgaWYgY29sX3Jvd1snb3BjbmFtZSddOgotICAg ICAgICAgICAgICAgICAgICBjb2xzX3N0ciArPSAnICcgKyBjb2xfcm93WydvcGNuYW1lJ10KLSAg ICAgICAgICAgICAgICBpZiBjb2xfcm93WydvcHRpb25zJ11bMF0gPT0gJ0RFU0MnOgotICAgICAg ICAgICAgICAgICAgICBjb2xzX3N0ciArPSAnIERFU0MnCi0gICAgICAgICAgICAgICAgY29scy5h cHBlbmQoY29sc19zdHIpCi0KLSAgICAgICAgICAgICMgUHVzaCBhcyBjb2xsZWN0aW9uCi0gICAg ICAgICAgICBkYXRhWydjb2x1bW5zJ10gPSBjb2x1bW5zCi0gICAgICAgICAgICAjIFB1c2ggYXMg c3RyaW5nCi0gICAgICAgICAgICBkYXRhWydjb2xzJ10gPSAnLCAnLmpvaW4oY29scykKLQotICAg ICAgICAgICAgc3FsX2hlYWRlciA9IHUiXG4tLSBJbmRleDogezB9XG5cbi0tICIuZm9ybWF0KGRh dGFbJ25hbWUnXSkKLQotICAgICAgICAgICAgc3FsX2hlYWRlciArPSByZW5kZXJfdGVtcGxhdGUo Ii8iLmpvaW4oW3NlbGYuaW5kZXhfdGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVsZXRlLnNxbCddKSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNv bm4pCi0KLSAgICAgICAgICAgIGluZGV4X3NxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihb c2VsZi5pbmRleF90ZW1wbGF0ZV9wYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAnY3JlYXRlLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25uKQotICAgICAgICAg ICAgaW5kZXhfc3FsICs9ICJcbiIKLSAgICAgICAgICAgIGluZGV4X3NxbCArPSByZW5kZXJfdGVt cGxhdGUoIi8iLmpvaW4oW3NlbGYuaW5kZXhfdGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdhbHRlci5zcWwnXSksCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxm LmNvbm4pCi0KLSAgICAgICAgICAgICMgQWRkIGludG8gbWFpbiBzcWwKLSAgICAgICAgICAgIGlu ZGV4X3NxbCA9IHJlLnN1YignXG57Mix9JywgJ1xuXG4nLCBpbmRleF9zcWwpCi0gICAgICAgICAg ICBtYWluX3NxbC5hcHBlbmQoc3FsX2hlYWRlciArICdcblxuJyArIGluZGV4X3NxbC5zdHJpcCgn XG4nKSkKLQotICAgICAgICAiIiIKLSAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIwotICAgICAgICAjIDMpIFJldmVyc2UgZW5naW5lZXJlZCBzcWwgZm9yIFRS SUdHRVJTCi0gICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK LSAgICAgICAgIiIiCi0gICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2Vs Zi50cmlnZ2VyX3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJ25vZGVzLnNxbCddKSwgdGlkPXRpZCkKLSAgICAgICAgc3RhdHVzLCByc2V0ID0g c2VsZi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCi0gICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0g ICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJzZXQpCi0K LSAgICAgICAgZm9yIHJvdyBpbiByc2V0Wydyb3dzJ106Ci0gICAgICAgICAgICB0cmlnZ2VyX3Nx bCA9ICcnCi0KLSAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2Vs Zi50cmlnZ2VyX3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0aWQ9dGlkLCB0cmlkPXJvd1snb2lkJ10sCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCi0KLSAgICAg ICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCi0gICAgICAg ICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2 ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQotCi0gICAgICAgICAgICBkYXRhID0gZGljdChyZXNbJ3Jv d3MnXVswXSkKLSAgICAgICAgICAgICMgQWRkaW5nIHBhcmVudCBpbnRvIGRhdGEgZGljdCwgd2ls bCBiZSB1c2luZyBpdCB3aGlsZSBjcmVhdGluZyBzcWwKLSAgICAgICAgICAgIGRhdGFbJ3NjaGVt YSddID0gc2NoZW1hCi0gICAgICAgICAgICBkYXRhWyd0YWJsZSddID0gdGFibGUKLQotICAgICAg ICAgICAgZGF0YSA9IHNlbGYuZ2V0X3RyaWdnZXJfZnVuY3Rpb25fc2NoZW1hKGRhdGEpCi0KLSAg ICAgICAgICAgIGlmIGxlbihkYXRhWydjdXN0b21fdGdhcmdzJ10pID4gMToKLSAgICAgICAgICAg ICAgICAjIFdlIGtub3cgdGhhdCB0cmlnZ2VyIGhhcyBtb3JlIHRoYW4gMSBhcmd1bWVudCwgbGV0 J3Mgam9pbiB0aGVtCi0gICAgICAgICAgICAgICAgZGF0YVsndGdhcmdzJ10gPSBzZWxmLl9mb3Jt YXRfYXJncyhkYXRhWydjdXN0b21fdGdhcmdzJ10pCi0KLSAgICAgICAgICAgIGlmIGxlbihkYXRh Wyd0Z2F0dHInXSkgPiAxOgotICAgICAgICAgICAgICAgIGNvbHVtbnMgPSAnLCAnLmpvaW4oZGF0 YVsndGdhdHRyJ10uc3BsaXQoJyAnKSkKLQotICAgICAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90 ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50cmlnZ2VyX3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2NvbHVtbnMuc3FsJ10p LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkLCBjbGlzdD1j b2x1bW5zKQotCi0gICAgICAgICAgICAgICAgc3RhdHVzLCByc2V0ID0gc2VsZi5jb25uLmV4ZWN1 dGVfMmRhcnJheShTUUwpCi0gICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQot ICAgICAgICAgICAgICAgICMgJ3RnYXR0cicgY29udGFpbnMgbGlzdCBvZiBjb2x1bW5zIGZyb20g dGFibGUgdXNlZCBpbiB0cmlnZ2VyCi0gICAgICAgICAgICAgICAgY29sdW1ucyA9IFtdCi0KLSAg ICAgICAgICAgICAgICBmb3IgY29sX3JvdyBpbiByc2V0Wydyb3dzJ106Ci0gICAgICAgICAgICAg ICAgICAgIGNvbHVtbnMuYXBwZW5kKHsnY29sdW1uJzogY29sX3Jvd1snbmFtZSddfSkKLQotICAg ICAgICAgICAgICAgIGRhdGFbJ2NvbHVtbnMnXSA9IGNvbHVtbnMKLQotICAgICAgICAgICAgZGF0 YSA9IHRyaWdnZXJfZGVmaW5pdGlvbihkYXRhKQotCi0gICAgICAgICAgICBzcWxfaGVhZGVyID0g dSJcbi0tIFRyaWdnZXI6IHswfVxuXG4tLSAiLmZvcm1hdChkYXRhWyduYW1lJ10pCi0KLSAgICAg ICAgICAgIHNxbF9oZWFkZXIgKz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRyaWdn ZXJfdGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnZGVsZXRlLnNxbCddKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCi0KLSAgICAgICAgICAg ICMgSWYgdGhlIHJlcXVlc3QgZm9yIG5ldyBvYmplY3Qgd2hpY2ggZG8gbm90IGhhdmUgZGlkCi0g ICAgICAgICAgICB0cmlnZ2VyX3NxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50 cmlnZ2VyX3RlbXBsYXRlX3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJ2NyZWF0ZS5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25uKQotCi0gICAgICAg ICAgICB0cmlnZ2VyX3NxbCA9IHNxbF9oZWFkZXIgKyAnXG5cbicgKyB0cmlnZ2VyX3NxbC5zdHJp cCgnXG4nKQotCi0gICAgICAgICAgICAjIElmIHRyaWdnZXIgaXMgZGlzYWJsZWQgdGhlbiBhZGQg c3FsIGNvZGUgZm9yIHRoZSBzYW1lCi0gICAgICAgICAgICBpZiBub3QgZGF0YVsnaXNfZW5hYmxl X3RyaWdnZXInXToKLSAgICAgICAgICAgICAgICB0cmlnZ2VyX3NxbCArPSAnXG5cbicKLSAgICAg ICAgICAgICAgICB0cmlnZ2VyX3NxbCArPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oWwotICAg ICAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJfdGVtcGxhdGVfcGF0aCwKLSAgICAgICAgICAg ICAgICAgICAgJ2VuYWJsZV9kaXNhYmxlX3RyaWdnZXIuc3FsJ10pLAotICAgICAgICAgICAgICAg ICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25uKQotCi0gICAgICAgICAgICAjIEFkZCBpbnRv IG1haW4gc3FsCi0gICAgICAgICAgICB0cmlnZ2VyX3NxbCA9IHJlLnN1YignXG57Mix9JywgJ1xu XG4nLCB0cmlnZ2VyX3NxbCkKLSAgICAgICAgICAgIG1haW5fc3FsLmFwcGVuZCh0cmlnZ2VyX3Nx bCkKLQotICAgICAgICAiIiIKLSAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwotICAgICAgICAjIDQpIFJldmVyc2UgZW5naW5lZXJlZCBzcWwgZm9yIFJVTEVTCi0g ICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSAgICAgICAgIiIi Ci0KLSAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAotICAgICAgICAgICAg W3NlbGYucnVsZXNfdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLCB0aWQ9dGlkKQot Ci0gICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQot ICAgICAgICBpZiBub3Qgc3RhdHVzOgotICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz1yc2V0KQotCi0gICAgICAgIGZvciByb3cgaW4gcnNldFsncm93cydd OgotICAgICAgICAgICAgcnVsZXNfc3FsID0gJ1xuJwotICAgICAgICAgICAgU1FMID0gcmVuZGVy X3RlbXBsYXRlKCIvIi5qb2luKAotICAgICAgICAgICAgICAgIFtzZWxmLnJ1bGVzX3RlbXBsYXRl X3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddCi0gICAgICAgICAgICApLCByaWQ9cm93WydvaWQnXSwg ZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCi0KLSAgICAgICAgICAgIHN0YXR1cywg cmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCi0gICAgICAgICAgICBpZiBub3Qgc3Rh dHVzOgotICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jt c2c9cmVzKQotCi0gICAgICAgICAgICByZXNfZGF0YSA9IHBhcnNlX3J1bGVfZGVmaW5pdGlvbihy ZXMpCi0gICAgICAgICAgICBydWxlc19zcWwgKz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAot ICAgICAgICAgICAgICAgIFtzZWxmLnJ1bGVzX3RlbXBsYXRlX3BhdGgsICdjcmVhdGUuc3FsJ10p LAotICAgICAgICAgICAgICAgIGRhdGE9cmVzX2RhdGEsIGRpc3BsYXlfY29tbWVudHM9VHJ1ZSkK LQotICAgICAgICAgICAgIyBBZGQgaW50byBtYWluIHNxbAotICAgICAgICAgICAgcnVsZXNfc3Fs ID0gcmUuc3ViKCdcbnsyLH0nLCAnXG5cbicsIHJ1bGVzX3NxbCkKLSAgICAgICAgICAgIG1haW5f c3FsLmFwcGVuZChydWxlc19zcWwpCi0KLSAgICAgICAgc3FsID0gJ1xuJy5qb2luKG1haW5fc3Fs KQotCi0gICAgICAgIHJldHVybiBhamF4X3Jlc3BvbnNlKHJlc3BvbnNlPXNxbC5zdHJpcCgnXG4n KSkKLQotICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19w cmVjb25kaXRpb24KICAgICBkZWYgc2VsZWN0X3NxbChzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lk LCB0aWQpOgogICAgICAgICAiIiIKICAgICAgICAgU0VMRUNUIHNjcmlwdCBzcWwgZm9yIHRoZSBv YmplY3QKQEAgLTI4MTAsNyArMjIwNSw3IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZp ZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIFJldHVybnM6CiAg ICAgICAgICAgICBTRUxFQ1QgU2NyaXB0IHNxbCBmb3IgdGhlIG9iamVjdAogICAgICAgICAiIiIK LSAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3Bh dGgsCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJsZV90 ZW1wbGF0ZV9wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdw cm9wZXJ0aWVzLnNxbCddKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpZD1kaWQs IHNjaWQ9c2NpZCwgdGlkPXRpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGxh c3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lzb2lkKQpAQCAtMjgzOSw3ICsyMjM0LDcgQEAgY2xhc3Mg VGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdz KToKICAgICAgICAgKQogICAgICAgICByZXR1cm4gYWpheF9yZXNwb25zZShyZXNwb25zZT1zcWwp CiAKLSAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJl Y29uZGl0aW9uCiAgICAgZGVmIGluc2VydF9zcWwoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwg dGlkKToKICAgICAgICAgIiIiCiAgICAgICAgIElOU0VSVCBzY3JpcHQgc3FsIGZvciB0aGUgb2Jq ZWN0CkBAIC0yODU0LDcgKzIyNDksNyBAQCBjbGFzcyBUYWJsZVZpZXcoUEdDaGlsZE5vZGVWaWV3 LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogICAgICAgICBSZXR1cm5zOgogICAg ICAgICAgICAgSU5TRVJUIFNjcmlwdCBzcWwgZm9yIHRoZSBvYmplY3QKICAgICAgICAgIiIiCi0g ICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRo LAorICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGFibGVfdGVt cGxhdGVfcGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJv cGVydGllcy5zcWwnXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWQ9ZGlkLCBz Y2lkPXNjaWQsIHRpZD10aWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRsYXN0 c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKQEAgLTI4ODYsNyArMjI4MSw3IEBAIGNsYXNzIFRh YmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6 CiAKICAgICAgICAgcmV0dXJuIGFqYXhfcmVzcG9uc2UocmVzcG9uc2U9c3FsKQogCi0gICAgQGNo ZWNrX3ByZWNvbmRpdGlvbgorICAgIEBCYXNlVGFibGVWaWV3LmNoZWNrX3ByZWNvbmRpdGlvbgog ICAgIGRlZiB1cGRhdGVfc3FsKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCk6CiAgICAg ICAgICIiIgogICAgICAgICBVUERBVEUgc2NyaXB0IHNxbCBmb3IgdGhlIG9iamVjdApAQCAtMjkw MSw3ICsyMjk2LDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmlldywgRGF0YVR5cGVS ZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKICAgICAgICAgUmV0dXJuczoKICAgICAgICAgICAgIFVQ REFURSBTY3JpcHQgc3FsIGZvciB0aGUgb2JqZWN0CiAgICAgICAgICIiIgotICAgICAgICBTUUwg PSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGVtcGxhdGVfcGF0aCwKKyAgICAgICAg U1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3Fs J10pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0 aWQ9dGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0bGFzdHN5c29pZD1zZWxm LmRhdGxhc3RzeXNvaWQpCkBAIC0yOTM1LDcgKzIzMzAsNyBAQCBjbGFzcyBUYWJsZVZpZXcoUEdD aGlsZE5vZGVWaWV3LCBEYXRhVHlwZVJlYWRlciwgVmFjdXVtU2V0dGluZ3MpOgogCiAgICAgICAg IHJldHVybiBhamF4X3Jlc3BvbnNlKHJlc3BvbnNlPXNxbCkKIAotICAgIEBjaGVja19wcmVjb25k aXRpb24KKyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KICAgICBkZWYgZGVs ZXRlX3NxbChzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQpOgogICAgICAgICAiIiIKICAg ICAgICAgREVMRVRFIHNjcmlwdCBzcWwgZm9yIHRoZSBvYmplY3QKQEAgLTI5NTAsNyArMjM0NSw3 IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1 dW1TZXR0aW5ncyk6CiAgICAgICAgIFJldHVybnM6CiAgICAgICAgICAgICBERUxFVEUgU2NyaXB0 IHNxbCBmb3IgdGhlIG9iamVjdAogICAgICAgICAiIiIKLSAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsCisgICAgICAgIFNRTCA9IHJlbmRl cl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lz b2lkKQpAQCAtMjk2Niw3ICsyMzYxLDcgQEAgY2xhc3MgVGFibGVWaWV3KFBHQ2hpbGROb2RlVmll dywgRGF0YVR5cGVSZWFkZXIsIFZhY3V1bVNldHRpbmdzKToKIAogICAgICAgICByZXR1cm4gYWph eF9yZXNwb25zZShyZXNwb25zZT1zcWwpCiAKLSAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisgICAg QEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCiAgICAgZGVmIHN0YXRpc3RpY3Moc2Vs ZiwgZ2lkLCBzaWQsIGRpZCwgc2NpZCwgdGlkPU5vbmUpOgogICAgICAgICAiIiIKICAgICAgICAg U3RhdGlzdGljcwpAQCAtMjk4Miw2MyArMjM3Nyw2IEBAIGNsYXNzIFRhYmxlVmlldyhQR0NoaWxk Tm9kZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncyk6CiAgICAgICAgIG90aGVy d2lzZSBpdCB3aWxsIHJldHVybiBzdGF0aXN0aWNzIGZvciBhbGwgdGhlIHRhYmxlcyBpbiB0aGF0 CiAgICAgICAgIHNjaGVtYS4KICAgICAgICAgIiIiCi0KLSAgICAgICAgIyBGZXRjaCBzY2hlbWEg bmFtZQotICAgICAgICBzdGF0dXMsIHNjaGVtYV9uYW1lID0gc2VsZi5jb25uLmV4ZWN1dGVfc2Nh bGFyKAotICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKAotICAgICAgICAgICAgICAgICIvIi5q b2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsICdnZXRfc2NoZW1hLnNxbCddKSwKLSAgICAgICAgICAg ICAgICBjb25uPXNlbGYuY29ubiwgc2NpZD1zY2lkCi0gICAgICAgICAgICApCi0gICAgICAgICkK LSAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2 ZXJfZXJyb3IoZXJyb3Jtc2c9c2NoZW1hX25hbWUpCi0KLSAgICAgICAgaWYgdGlkIGlzIE5vbmU6 Ci0gICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoCi0gICAg ICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKAotICAgICAgICAgICAgICAgICAgICAiLyIuam9p bihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAnY29sbF90YWJsZV9zdGF0cy5zcWwnXSksCi0gICAgICAg ICAgICAgICAgICAgIGNvbm49c2VsZi5jb25uLCBzY2hlbWFfbmFtZT1zY2hlbWFfbmFtZQotICAg ICAgICAgICAgICAgICkKLSAgICAgICAgICAgICkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAg ICMgRm9yIEluZGl2aWR1YWwgdGFibGUgc3RhdHMKLQotICAgICAgICAgICAgIyBDaGVjayBpZiBw Z3N0YXR0dXBsZSBleHRlbnNpb24gaXMgYWxyZWFkeSBjcmVhdGVkPwotICAgICAgICAgICAgIyBp ZiBjcmVhdGVkIHRoZW4gb25seSBhZGQgZXh0ZW5kZWQgc3RhdHMKLSAgICAgICAgICAgIHN0YXR1 cywgaXNfcGdzdGF0dHVwbGUgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoIiIiCi0gICAgICAg ICAgICBTRUxFQ1QgKGNvdW50KGV4dG5hbWUpID4gMCkgQVMgaXNfcGdzdGF0dHVwbGUKLSAgICAg ICAgICAgIEZST00gcGdfZXh0ZW5zaW9uCi0gICAgICAgICAgICBXSEVSRSBleHRuYW1lPSdwZ3N0 YXR0dXBsZScKLSAgICAgICAgICAgICIiIikKLSAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0g ICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1pc19w Z3N0YXR0dXBsZSkKLQotICAgICAgICAgICAgIyBGZXRjaCBUYWJsZSBuYW1lCi0gICAgICAgICAg ICBzdGF0dXMsIHRhYmxlX25hbWUgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoCi0gICAgICAg ICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKAotICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihb c2VsZi50ZW1wbGF0ZV9wYXRoLCAnZ2V0X3RhYmxlLnNxbCddKSwKLSAgICAgICAgICAgICAgICAg ICAgY29ubj1zZWxmLmNvbm4sIHNjaWQ9c2NpZCwgdGlkPXRpZAotICAgICAgICAgICAgICAgICkK LSAgICAgICAgICAgICkKLSAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Ci0gICAgICAgICAgICAg ICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz10YWJsZV9uYW1lKQotCi0g ICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoCi0gICAgICAg ICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKAotICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihb c2VsZi50ZW1wbGF0ZV9wYXRoLCAnc3RhdHMuc3FsJ10pLAotICAgICAgICAgICAgICAgICAgICBj b25uPXNlbGYuY29ubiwgc2NoZW1hX25hbWU9c2NoZW1hX25hbWUsCi0gICAgICAgICAgICAgICAg ICAgIHRhYmxlX25hbWU9dGFibGVfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgaXNfcGdzdGF0 dHVwbGU9aXNfcGdzdGF0dHVwbGUsIHRpZD10aWQKLSAgICAgICAgICAgICAgICApCi0gICAgICAg ICAgICApCi0KLSAgICAgICAgaWYgbm90IHN0YXR1czoKLSAgICAgICAgICAgIHJldHVybiBpbnRl cm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQotCi0gICAgICAgIHJldHVybiBtYWtlX2pz b25fcmVzcG9uc2UoCi0gICAgICAgICAgICBkYXRhPXJlcywKLSAgICAgICAgICAgIHN0YXR1cz0y MDAKLSAgICAgICAgKQotCisgICAgICAgIHJldHVybiBCYXNlVGFibGVWaWV3LmdldF90YWJsZV9z dGF0aXN0aWNzKHNlbGYsIHNjaWQsIHRpZCkKIAogVGFibGVWaWV3LnJlZ2lzdGVyX25vZGVfdmll dyhibHVlcHJpbnQpCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29sdW1uL3RlbXBsYXRlcy9jb2x1 bW4vanMvY29sdW1uLmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbHVtbi90ZW1wbGF0ZXMvY29sdW1uL2pzL2Nv bHVtbi5qcwppbmRleCAxNzliOTYxLi43MjUyOTQ5IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29s dW1uL3RlbXBsYXRlcy9jb2x1bW4vanMvY29sdW1uLmpzCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb2x1bW4v dGVtcGxhdGVzL2NvbHVtbi9qcy9jb2x1bW4uanMKQEAgLTIyOCw2ICsyMjgsMTcgQEAgZGVmaW5l KCdwZ2FkbWluLm5vZGUuY29sdW1uJywgWwogICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg ICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIC8vIElmIHRhYmxlIGlzIHBhcnRpdGlvbmVkIHRh YmxlIHRoZW4gZGlzYWJsZQorICAgICAgICAgICAgaWYgKG0udG9wICYmICFfLmlzVW5kZWZpbmVk KG0udG9wLmdldCgnaXNfcGFydGl0aW9uZWQnKSkgJiYKKyAgICAgICAgICAgICAgbS50b3AuZ2V0 KCdpc19wYXJ0aXRpb25lZCcpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzZXRUaW1l b3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBtLnNldCgnaXNfcHJpbWFyeV9rZXkn LCBmYWxzZSk7CisgICAgICAgICAgICAgIH0sIDEwKTsKKworICAgICAgICAgICAgICByZXR1cm4g ZmFsc2U7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGlmKCFtLmluU2NoZW1hV2l0aENv bHVtbkNoZWNrLmFwcGx5KHRoaXMsIFttXSkgJiYKICAgICAgICAgICAgICAgIV8uaXNVbmRlZmlu ZWQobmFtZSkgJiYgIV8uaXNOdWxsKG5hbWUpICYmIG5hbWUgIT09ICcnKSB7CiAgICAgICAgICAg ICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2NoZWNr X2NvbnN0cmFpbnQvdGVtcGxhdGVzL2NoZWNrX2NvbnN0cmFpbnQvanMvY2hlY2tfY29uc3RyYWlu dC5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNl cy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9jaGVja19jb25zdHJhaW50L3RlbXBsYXRlcy9j aGVja19jb25zdHJhaW50L2pzL2NoZWNrX2NvbnN0cmFpbnQuanMKaW5kZXggODJiYjgyOS4uN2Vj MWFmOSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZl cnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRzL2NoZWNrX2NvbnN0cmFpbnQv dGVtcGxhdGVzL2NoZWNrX2NvbnN0cmFpbnQvanMvY2hlY2tfY29uc3RyYWludC5qcworKysgYi93 ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvY29uc3RyYWludHMvY2hlY2tfY29uc3RyYWludC90ZW1wbGF0ZXMvY2hlY2tfY29u c3RyYWludC9qcy9jaGVja19jb25zdHJhaW50LmpzCkBAIC0xMzMsNiArMTMzLDE4IEBAIGRlZmlu ZSgncGdhZG1pbi5ub2RlLmNoZWNrX2NvbnN0cmFpbnRzJywgWwogICAgICAgICAgICdzd2l0Y2gn LCBjZWxsOiAnYm9vbGVhbicsIGdyb3VwOiBnZXR0ZXh0KCdEZWZpbml0aW9uJyksIG1vZGU6CiAg ICAgICAgICAgWydwcm9wZXJ0aWVzJywgJ2NyZWF0ZScsICdlZGl0J10sIG1pbl92ZXJzaW9uOiA5 MDIwMCwKICAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgLy8g RGlzYWJsZWQgaWYgdGFibGUgaXMgYSBwYXJ0aXRpb25lZCB0YWJsZS4KKyAgICAgICAgICAgIGlm ICgoXy5oYXMobSAsICd0b3AnKSAmJiAhXy5pc1VuZGVmaW5lZChtLnRvcCkgJiYgbS50b3AuZ2V0 KCdpc19wYXJ0aXRpb25lZCcpKSB8fAorICAgICAgICAgICAgICAgIChfLmhhcyhtLCAnbm9kZV9p bmZvJykgJiYgXy5oYXMobS5ub2RlX2luZm8sICd0YWJsZScpICYmCisgICAgICAgICAgICAgICAg Xy5oYXMobS5ub2RlX2luZm8udGFibGUsICdpc19wYXJ0aXRpb25lZCcpICYmIG0ubm9kZV9pbmZv LnRhYmxlLmlzX3BhcnRpdGlvbmVkKQorICAgICAgICAgICAgKXsKKyAgICAgICAgICAgICAgc2V0 VGltZW91dChmdW5jdGlvbigpeworICAgICAgICAgICAgICAgICAgbS5zZXQoJ2Nvbm5vaW5oZXJp dCcsIGZhbHNlKTsKKyAgICAgICAgICAgICAgfSwxMCk7CisKKyAgICAgICAgICAgICAgcmV0dXJu IHRydWU7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHJldHVybiAoKF8uaGFzKG0sICdo YW5kbGVyJykgJiYKICAgICAgICAgICAgICAgIV8uaXNVbmRlZmluZWQobS5oYW5kbGVyKSAmJgog ICAgICAgICAgICAgICAhXy5pc1VuZGVmaW5lZChtLmdldCgnb2lkJykpKSB8fCAoXy5pc0Z1bmN0 aW9uKG0uaXNOZXcpICYmICFtLmlzTmV3KCkpKTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25z dHJhaW50cy9leGNsdXNpb25fY29uc3RyYWludC90ZW1wbGF0ZXMvZXhjbHVzaW9uX2NvbnN0cmFp bnQvanMvZXhjbHVzaW9uX2NvbnN0cmFpbnQuanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvZXhj bHVzaW9uX2NvbnN0cmFpbnQvdGVtcGxhdGVzL2V4Y2x1c2lvbl9jb25zdHJhaW50L2pzL2V4Y2x1 c2lvbl9jb25zdHJhaW50LmpzCmluZGV4IDgxNGVkY2UuLmMyMWVhYzUgMTAwNjQ0Ci0tLSBhL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L3RhYmxlcy9jb25zdHJhaW50cy9leGNsdXNpb25fY29uc3RyYWludC90ZW1wbGF0ZXMvZXhjbHVz aW9uX2NvbnN0cmFpbnQvanMvZXhjbHVzaW9uX2NvbnN0cmFpbnQuanMKKysrIGIvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVz L2NvbnN0cmFpbnRzL2V4Y2x1c2lvbl9jb25zdHJhaW50L3RlbXBsYXRlcy9leGNsdXNpb25fY29u c3RyYWludC9qcy9leGNsdXNpb25fY29uc3RyYWludC5qcwpAQCAtOTE5LDYgKzkxOSwxMCBAQCBk ZWZpbmUoJ3BnYWRtaW4ubm9kZS5leGNsdXNpb25fY29uc3RyYWludCcsIFsKICAgICAgICAgICB2 YXIgdCA9IHBnQnJvd3Nlci50cmVlLCBpID0gaXRlbSwgZCA9IGl0ZW1EYXRhLCBwYXJlbnRzID0g W107CiAgICAgICAgICAgLy8gVG8gaXRlcmF0ZSBvdmVyIHRyZWUgdG8gY2hlY2sgcGFyZW50IG5v ZGUKICAgICAgICAgICB3aGlsZSAoaSkgeworICAgICAgICAgICAgLy8gSWYgdGFibGUgaXMgcGFy dGl0aW9uZWQgdGFibGUgdGhlbiByZXR1cm4gZmFsc2UKKyAgICAgICAgICAgIGlmICgnaXNfcGFy dGl0aW9uZWQnIGluIGQgJiYgZC5pc19wYXJ0aXRpb25lZCkKKyAgICAgICAgICAgICAgcmV0dXJu IGZhbHNlOworCiAgICAgICAgICAgICAvLyBJZiBpdCBpcyBzY2hlbWEgdGhlbiBhbGxvdyB1c2Vy IHRvIGNyZWF0ZSB0YWJsZQogICAgICAgICAgICAgaWYgKF8uaW5kZXhPZihbJ3NjaGVtYSddLCBk Ll90eXBlKSA+IC0xKQogICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L3RhYmxlcy9jb25zdHJhaW50cy9mb3JlaWduX2tleS90ZW1wbGF0ZXMvZm9yZWlnbl9rZXkvanMv Zm9yZWlnbl9rZXkuanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVy cy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29uc3RyYWludHMvZm9yZWlnbl9rZXkvdGVtcGxh dGVzL2ZvcmVpZ25fa2V5L2pzL2ZvcmVpZ25fa2V5LmpzCmluZGV4IDg0YjdhZGYuLmRiYmQ0OTkg MTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9mb3JlaWduX2tleS90ZW1wbGF0ZXMv Zm9yZWlnbl9rZXkvanMvZm9yZWlnbl9rZXkuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9z ZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRz L2ZvcmVpZ25fa2V5L3RlbXBsYXRlcy9mb3JlaWduX2tleS9qcy9mb3JlaWduX2tleS5qcwpAQCAt MTA2Nyw2ICsxMDY3LDEwIEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLmZvcmVpZ25fa2V5JywgWwog ICAgICAgICAgIHZhciB0ID0gcGdCcm93c2VyLnRyZWUsIGkgPSBpdGVtLCBkID0gaXRlbURhdGEs IHBhcmVudHMgPSBbXTsKICAgICAgICAgICAvLyBUbyBpdGVyYXRlIG92ZXIgdHJlZSB0byBjaGVj ayBwYXJlbnQgbm9kZQogICAgICAgICAgIHdoaWxlIChpKSB7CisgICAgICAgICAgICAvLyBJZiB0 YWJsZSBpcyBwYXJ0aXRpb25lZCB0YWJsZSB0aGVuIHJldHVybiBmYWxzZQorICAgICAgICAgICAg aWYgKCdpc19wYXJ0aXRpb25lZCcgaW4gZCAmJiBkLmlzX3BhcnRpdGlvbmVkKQorICAgICAgICAg ICAgICByZXR1cm4gZmFsc2U7CisKICAgICAgICAgICAgIC8vIElmIGl0IGlzIHNjaGVtYSB0aGVu IGFsbG93IHVzZXIgdG8gYyByZWF0ZSB0YWJsZQogICAgICAgICAgICAgaWYgKF8uaW5kZXhPZihb J3NjaGVtYSddLCBkLl90eXBlKSA+IC0xKQogICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9zY2hlbWFzL3RhYmxlcy9jb25zdHJhaW50cy9pbmRleF9jb25zdHJhaW50L3RlbXBsYXRl cy9pbmRleF9jb25zdHJhaW50L2pzL2luZGV4X2NvbnN0cmFpbnQuanMgYi93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvY29u c3RyYWludHMvaW5kZXhfY29uc3RyYWludC90ZW1wbGF0ZXMvaW5kZXhfY29uc3RyYWludC9qcy9p bmRleF9jb25zdHJhaW50LmpzCmluZGV4IDk3YTQwNGEuLjc3MmI3M2QgMTAwNjQ0Ci0tLSBhL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFz L3RhYmxlcy9jb25zdHJhaW50cy9pbmRleF9jb25zdHJhaW50L3RlbXBsYXRlcy9pbmRleF9jb25z dHJhaW50L2pzL2luZGV4X2NvbnN0cmFpbnQuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9z ZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2NvbnN0cmFpbnRz L2luZGV4X2NvbnN0cmFpbnQvdGVtcGxhdGVzL2luZGV4X2NvbnN0cmFpbnQvanMvaW5kZXhfY29u c3RyYWludC5qcwpAQCAtNDgsNiArNDgsMTAgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUue3tub2Rl X3R5cGV9fScsIFsKICAgICAgICAgdmFyIHQgPSBwZ0Jyb3dzZXIudHJlZSwgaSA9IGl0ZW0sIGQg PSBpdGVtRGF0YSwgcGFyZW50cyA9IFtdOwogICAgICAgICAvLyBUbyBpdGVyYXRlIG92ZXIgdHJl ZSB0byBjaGVjayBwYXJlbnQgbm9kZQogICAgICAgICB3aGlsZSAoaSkgeworICAgICAgICAgIC8v IElmIHRhYmxlIGlzIHBhcnRpdGlvbmVkIHRhYmxlIHRoZW4gcmV0dXJuIGZhbHNlCisgICAgICAg ICAgaWYgKCdpc19wYXJ0aXRpb25lZCcgaW4gZCAmJiBkLmlzX3BhcnRpdGlvbmVkKQorICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgICAgICAgLy8gSWYgaXQgaXMgc2NoZW1hIHRoZW4g YWxsb3cgdXNlciB0byBjIHJlYXRlIHRhYmxlCiAgICAgICAgICAgaWYgKF8uaW5kZXhPZihbJ3Nj aGVtYSddLCBkLl90eXBlKSA+IC0xKSB7CiAgICAgICAgICAgICB7JSBpZiBub2RlX3R5cGUgPT0g J3ByaW1hcnlfa2V5JyAlfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL2luZGV4ZXMvX19pbml0X18u cHkgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv c2NoZW1hcy90YWJsZXMvaW5kZXhlcy9fX2luaXRfXy5weQppbmRleCBlNTJjMTViLi44NWRhNzY2 IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9k YXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvaW5kZXhlcy9fX2luaXRfXy5weQorKysgYi93ZWIvcGdh ZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJs ZXMvaW5kZXhlcy9fX2luaXRfXy5weQpAQCAtNzIsNiArNzIsMTggQEAgY2xhc3MgSW5kZXhlc01v ZHVsZShDb2xsZWN0aW9uTm9kZU1vZHVsZSk6CiAgICAgICAgIGlmIHN1cGVyKEluZGV4ZXNNb2R1 bGUsIHNlbGYpLkJhY2tlbmRTdXBwb3J0ZWQobWFuYWdlciwgKiprd2FyZ3MpOgogICAgICAgICAg ICAgY29ubiA9IG1hbmFnZXIuY29ubmVjdGlvbihkaWQ9a3dhcmdzWydkaWQnXSkKIAorICAgICAg ICAgICAgIyBJbiBjYXNlIG9mIHBhcnRpdGlvbmVkIHRhYmxlIHJldHVybiBmYWxzZS4KKyAgICAg ICAgICAgIGlmICd0aWQnIGluIGt3YXJncyBhbmQgbWFuYWdlci52ZXJzaW9uID49IDEwMDAwMDoK KyAgICAgICAgICAgICAgICBwYXJ0aXRpb25fcGF0aCA9ICdwYXJ0aXRpb24vc3FsLyN7MH0jJy5m b3JtYXQobWFuYWdlci52ZXJzaW9uKQorICAgICAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1w bGF0ZSgiLyIuam9pbigKKyAgICAgICAgICAgICAgICAgICAgW3BhcnRpdGlvbl9wYXRoLCAnYmFj a2VuZF9zdXBwb3J0LnNxbCddKSwgdGlkPWt3YXJnc1sndGlkJ10pCisgICAgICAgICAgICAgICAg c3RhdHVzLCByZXMgPSBjb25uLmV4ZWN1dGVfc2NhbGFyKFNRTCkKKworICAgICAgICAgICAgICAg ICMgY2hlY2sgaWYgYW55IGVycm9ycworICAgICAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6Cisg ICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9 cmVzKQorICAgICAgICAgICAgICAgIHJldHVybiBub3QgcmVzCisKICAgICAgICAgICAgIGlmICd2 aWQnIG5vdCBpbiBrd2FyZ3M6CiAgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKIApkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2Vz L3NjaGVtYXMvdGFibGVzL3BhcnRpdGlvbnMvX19pbml0X18ucHkgYi93ZWIvcGdhZG1pbi9icm93 c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcGFydGl0 aW9ucy9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzE1 NmRlCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3BhcnRpdGlvbnMvX19pbml0X18ucHkK QEAgLTAsMCArMSw0MTEgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBv c3RncmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxNywgVGhlIHBnQWRt aW4gRGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRo ZSBQb3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyIiIiBJbXBsZW1l bnRzIFBhcnRpdGlvbnMgTm9kZSAiIiIKKworaW1wb3J0IHNpbXBsZWpzb24gYXMganNvbgoraW1w b3J0IHBnYWRtaW4uYnJvd3Nlci5zZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMuZGF0YWJhc2VzIGFzIGRh dGFiYXNlCitmcm9tIGZsYXNrIGltcG9ydCByZW5kZXJfdGVtcGxhdGUsIHJlcXVlc3QsIGpzb25p ZnkKK2Zyb20gZmxhc2tfYmFiZWwgaW1wb3J0IGdldHRleHQKK2Zyb20gcGdhZG1pbi5icm93c2Vy LnNlcnZlcl9ncm91cHMuc2VydmVycy5kYXRhYmFzZXMuc2NoZW1hcy51dGlscyBcCisgICAgaW1w b3J0IERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5ncworZnJvbSBwZ2FkbWluLnV0aWxzLmFq YXggaW1wb3J0IG1ha2VfanNvbl9yZXNwb25zZSwgaW50ZXJuYWxfc2VydmVyX2Vycm9yLCBcCisg ICAgbWFrZV9yZXNwb25zZSBhcyBhamF4X3Jlc3BvbnNlLCBnb25lCitmcm9tIHBnYWRtaW4uYnJv d3Nlci5zZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMuZGF0YWJhc2VzLnNjaGVtYXMudGFibGVzLnV0aWxz IFwKKyAgICBpbXBvcnQgQmFzZVRhYmxlVmlldworZnJvbSBwZ2FkbWluLmJyb3dzZXIuY29sbGVj dGlvbiBpbXBvcnQgQ29sbGVjdGlvbk5vZGVNb2R1bGUKKworCitjbGFzcyBQYXJ0aXRpb25zTW9k dWxlKENvbGxlY3Rpb25Ob2RlTW9kdWxlKToKKyAgICAiIiIKKyAgICAgY2xhc3MgUGFydGl0aW9u c01vZHVsZShDb2xsZWN0aW9uTm9kZU1vZHVsZSkKKworICAgICAgICBBIG1vZHVsZSBjbGFzcyBm b3IgUGFydGl0aW9uIG5vZGUgZGVyaXZlZCBmcm9tIENvbGxlY3Rpb25Ob2RlTW9kdWxlLgorCisg ICAgTWV0aG9kczoKKyAgICAtLS0tLS0tCisgICAgKiBfX2luaXRfXygqYXJncywgKiprd2FyZ3Mp CisgICAgICAtIE1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIFBhcnRpdGlvbiBhbmQg aXQncyBiYXNlIG1vZHVsZS4KKworICAgICogZ2V0X25vZGVzKGdpZCwgc2lkLCBkaWQsIHNjaWQs IHRpZCkKKyAgICAgIC0gTWV0aG9kIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIGJyb3dzZXIgY29s bGVjdGlvbiBub2RlLgorCisgICAgKiBub2RlX2lub2RlKCkKKyAgICAgIC0gTWV0aG9kIGlzIG92 ZXJyaWRkZW4gZnJvbSBpdHMgYmFzZSBjbGFzcyB0byBtYWtlIHRoZSBub2RlIGFzIGxlYWYgbm9k ZS4KKworICAgICogc2NyaXB0X2xvYWQoKQorICAgICAgLSBMb2FkIHRoZSBtb2R1bGUgc2NyaXB0 IGZvciBzY2hlbWEsIHdoZW4gYW55IG9mIHRoZSBzZXJ2ZXIgbm9kZSBpcworICAgICAgICBpbml0 aWFsaXplZC4KKyAgICAiIiIKKworICAgIE5PREVfVFlQRSA9ICdwYXJ0aXRpb24nCisgICAgQ09M TEVDVElPTl9MQUJFTCA9IGdldHRleHQoIlBhcnRpdGlvbnMiKQorCisgICAgZGVmIF9faW5pdF9f KHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgICIiIgorICAgICAgICBNZXRob2QgaXMg dXNlZCB0byBpbml0aWFsaXplIHRoZSBQYXJ0aXRpb25zTW9kdWxlIGFuZCBpdCdzIGJhc2UgbW9k dWxlLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICAqYXJnczoKKyAgICAgICAgICAgICoq a3dhcmdzOgorICAgICAgICAiIiIKKyAgICAgICAgc3VwZXIoUGFydGl0aW9uc01vZHVsZSwgc2Vs ZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorICAgICAgICBzZWxmLm1pbl92ZXIgPSAxMDAw MDAKKyAgICAgICAgc2VsZi5tYXhfdmVyID0gTm9uZQorCisgICAgZGVmIGdldF9ub2RlcyhzZWxm LCBnaWQsIHNpZCwgZGlkLCBzY2lkLCAqKmt3YXJncyk6CisgICAgICAgICIiIgorICAgICAgICBH ZW5lcmF0ZSB0aGUgY29sbGVjdGlvbiBub2RlCisgICAgICAgICIiIgorICAgICAgICBhc3NlcnQg KCd0aWQnIGluIGt3YXJncyBvciAndmlkJyBpbiBrd2FyZ3MpCisgICAgICAgIHlpZWxkIHNlbGYu Z2VuZXJhdGVfYnJvd3Nlcl9jb2xsZWN0aW9uX25vZGUoCisgICAgICAgICAgICBrd2FyZ3NbJ3Rp ZCddIGlmICd0aWQnIGluIGt3YXJncyBlbHNlIGt3YXJnc1sndmlkJ10KKyAgICAgICAgKQorCisg ICAgQHByb3BlcnR5CisgICAgZGVmIHNjcmlwdF9sb2FkKHNlbGYpOgorICAgICAgICAiIiIKKyAg ICAgICAgTG9hZCB0aGUgbW9kdWxlIHNjcmlwdCBmb3Igc2VydmVyLCB3aGVuIGFueSBvZiB0aGUg c2VydmVyLWdyb3VwIG5vZGUgaXMKKyAgICAgICAgaW5pdGlhbGl6ZWQuCisgICAgICAgICIiIgor ICAgICAgICByZXR1cm4gZGF0YWJhc2UuRGF0YWJhc2VNb2R1bGUuTk9ERV9UWVBFCisKKyAgICBA cHJvcGVydHkKKyAgICBkZWYgbm9kZV9pbm9kZShzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAg IExvYWQgdGhlIG1vZHVsZSBub2RlIGFzIGEgbGVhZiBub2RlCisgICAgICAgICIiIgorICAgICAg ICByZXR1cm4gRmFsc2UKKworICAgIGRlZiBCYWNrZW5kU3VwcG9ydGVkKHNlbGYsIG1hbmFnZXIs ICoqa3dhcmdzKToKKyAgICAgICAgIiIiCisgICAgICAgIExvYWQgdGhpcyBtb2R1bGUgaWYgaXQg aXMgYSBwYXJ0aXRpb24gdGFibGUKKyAgICAgICAgIiIiCisgICAgICAgIGlmIENvbGxlY3Rpb25O b2RlTW9kdWxlLkJhY2tlbmRTdXBwb3J0ZWQoc2VsZiwgbWFuYWdlciwgKiprd2FyZ3MpOgorICAg ICAgICAgICAgY29ubiA9IG1hbmFnZXIuY29ubmVjdGlvbihkaWQ9a3dhcmdzWydkaWQnXSkKKwor ICAgICAgICAgICAgdGVtcGxhdGVfcGF0aCA9ICdwYXJ0aXRpb24vc3FsLyN7MH0jJy5mb3JtYXQo bWFuYWdlci52ZXJzaW9uKQorICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKAorICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZV9wYXRoLCAnYmFja2VuZF9zdXBwb3J0LnNx bCddKSwgdGlkPWt3YXJnc1sndGlkJ10pCisgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IGNvbm4u ZXhlY3V0ZV9zY2FsYXIoU1FMKQorCisgICAgICAgICAgICAjIGNoZWNrIGlmIGFueSBlcnJvcnMK KyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVy bmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgICAgIHJldHVybiByZXMK KworCitibHVlcHJpbnQgPSBQYXJ0aXRpb25zTW9kdWxlKF9fbmFtZV9fKQorCisKK2NsYXNzIFBh cnRpdGlvbnNWaWV3KEJhc2VUYWJsZVZpZXcsIERhdGFUeXBlUmVhZGVyLCBWYWN1dW1TZXR0aW5n cyk6CisgICAgIiIiCisgICAgVGhpcyBjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgZ2VuZXJhdGlu ZyByb3V0ZXMgZm9yIFBhcnRpdGlvbiBub2RlCisKKyAgICBNZXRob2RzOgorICAgIC0tLS0tLS0K KworICAgICogbGlzdCgpCisgICAgICAtIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBsaXN0IGFs bCB0aGUgUGFydGl0aW9uIG5vZGVzIHdpdGhpbiB0aGF0CisgICAgICBjb2xsZWN0aW9uLgorCisg ICAgKiBub2RlcygpCisgICAgICAtIFRoaXMgZnVuY3Rpb24gd2lsbCB1c2VkIHRvIGNyZWF0ZSBh bGwgdGhlIGNoaWxkIG5vZGUgd2l0aGluIHRoYXQKKyAgICAgICAgY29sbGVjdGlvbiwgSGVyZSBp dCB3aWxsIGNyZWF0ZSBhbGwgdGhlIFBhcnRpdGlvbiBub2RlLgorCisgICAgKiBwcm9wZXJ0aWVz KGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCwgcHRpZCkKKyAgICAgIC0gVGhpcyBmdW5jdGlvbiB3 aWxsIHNob3cgdGhlIHByb3BlcnRpZXMgb2YgdGhlIHNlbGVjdGVkIFBhcnRpdGlvbiBub2RlCisK KyAgICAiIiIKKworICAgIG5vZGVfdHlwZSA9IGJsdWVwcmludC5ub2RlX3R5cGUKKworICAgIHBh cmVudF9pZHMgPSBbCisgICAgICAgIHsndHlwZSc6ICdpbnQnLCAnaWQnOiAnZ2lkJ30sCisgICAg ICAgIHsndHlwZSc6ICdpbnQnLCAnaWQnOiAnc2lkJ30sCisgICAgICAgIHsndHlwZSc6ICdpbnQn LCAnaWQnOiAnZGlkJ30sCisgICAgICAgIHsndHlwZSc6ICdpbnQnLCAnaWQnOiAnc2NpZCd9LAor ICAgICAgICB7J3R5cGUnOiAnaW50JywgJ2lkJzogJ3RpZCd9CisgICAgXQorICAgIGlkcyA9IFsK KyAgICAgICAgeyd0eXBlJzogJ2ludCcsICdpZCc6ICdwdGlkJ30KKyAgICBdCisKKyAgICBvcGVy YXRpb25zID0gZGljdCh7CisgICAgICAgICdvYmonOiBbCisgICAgICAgICAgICB7J2dldCc6ICdw cm9wZXJ0aWVzJywgJ2RlbGV0ZSc6ICdkZWxldGUnLCAncHV0JzogJ3VwZGF0ZSd9LAorICAgICAg ICAgICAgeydnZXQnOiAnbGlzdCcsICdwb3N0JzogJ2NyZWF0ZSd9CisgICAgICAgIF0sCisgICAg ICAgICdub2Rlcyc6IFt7J2dldCc6ICdub2Rlcyd9LCB7J2dldCc6ICdub2Rlcyd9XSwKKyAgICAg ICAgJ3NxbCc6IFt7J2dldCc6ICdzcWwnfV0sCisgICAgICAgICdtc3FsJzogW3snZ2V0JzogJ21z cWwnfSwge31dLAorICAgICAgICAnbW9kdWxlLmpzJzogW3t9LCB7fSwgeydnZXQnOiAnbW9kdWxl X2pzJ31dLAorICAgICAgICAnZGV0YWNoJzogW3sncHV0JzogJ2RldGFjaCd9XQorICAgIH0pCisK KyAgICBAQmFzZVRhYmxlVmlldy5jaGVja19wcmVjb25kaXRpb24KKyAgICBkZWYgbGlzdChzZWxm LCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBm dW5jdGlvbiBpcyB1c2VkIHRvIGxpc3QgYWxsIHRoZSB0YWJsZSBub2RlcyB3aXRoaW4gdGhhdAor ICAgICAgICBjb2xsZWN0aW9uLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICBnaWQ6IFNl cnZlciBncm91cCBJRAorICAgICAgICAgICAgc2lkOiBTZXJ2ZXIgSUQKKyAgICAgICAgICAgIGRp ZDogRGF0YWJhc2UgSUQKKyAgICAgICAgICAgIHNjaWQ6IFNjaGVtYSBJRAorICAgICAgICAgICAg dGlkOiBUYWJsZSBJRAorCisgICAgICAgIFJldHVybnM6CisgICAgICAgICAgICBKU09OIG9mIGF2 YWlsYWJsZSB0YWJsZSBub2RlcworICAgICAgICAiIiIKKyAgICAgICAgU1FMID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFtzZWxmLnBhcnRpdGlvbl90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRpZD1kaWQsIHNjaWQ9c2NpZCwgdGlkPXRpZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2VsZi5kYXRsYXN0c3lz b2lkKQorICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQor CisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2Vy dmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKyAgICAgICAgcmV0dXJuIGFqYXhfcmVzcG9uc2UoCisg ICAgICAgICAgICByZXNwb25zZT1yZXNbJ3Jvd3MnXSwKKyAgICAgICAgICAgIHN0YXR1cz0yMDAK KyAgICAgICAgKQorCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCisgICAg ZGVmIG5vZGVzKHNlbGYsIGdpZCwgc2lkLCBkaWQsIHNjaWQsIHRpZCwgcHRpZD1Ob25lKToKKyAg ICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBsaXN0IGFsbCB0aGUg dGFibGUgbm9kZXMgd2l0aGluIHRoYXQKKyAgICAgICAgY29sbGVjdGlvbi4KKworICAgICAgICBB cmdzOgorICAgICAgICAgICAgZ2lkOiBTZXJ2ZXIgZ3JvdXAgSUQKKyAgICAgICAgICAgIHNpZDog U2VydmVyIElECisgICAgICAgICAgICBkaWQ6IERhdGFiYXNlIElECisgICAgICAgICAgICBzY2lk OiBTY2hlbWEgSUQKKyAgICAgICAgICAgIHRpZDogUGFyZW50IFRhYmxlIElECisgICAgICAgICAg ICBwdGlkOiBQYXJ0aXRpb24gVGFibGUgSUQgCisKKyAgICAgICAgUmV0dXJuczoKKyAgICAgICAg ICAgIEpTT04gb2YgYXZhaWxhYmxlIHRhYmxlIG5vZGVzCisgICAgICAgICIiIgorICAgICAgICBT UUwgPSByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYucGFy dGl0aW9uX3RlbXBsYXRlX3BhdGgsICdub2Rlcy5zcWwnXSksCisgICAgICAgICAgICAgICAgc2Np ZD1zY2lkLCB0aWQ9dGlkCisgICAgICAgICAgICAgICAgKQorICAgICAgICBzdGF0dXMsIHJzZXQg PSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKKyAgICAgICAgaWYgbm90IHN0YXR1czoK KyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cnNldCkK KworICAgICAgICBkZWYgYnJvd3Nlcl9ub2RlKHJvdyk6CisgICAgICAgICAgICByZXR1cm4gc2Vs Zi5ibHVlcHJpbnQuZ2VuZXJhdGVfYnJvd3Nlcl9ub2RlKAorICAgICAgICAgICAgICAgIHJvd1sn b2lkJ10sCisgICAgICAgICAgICAgICAgdGlkLAorICAgICAgICAgICAgICAgIHJvd1snbmFtZSdd LAorICAgICAgICAgICAgICAgIGljb249Imljb24tcGFydGl0aW9uIiwKKyAgICAgICAgICAgICAg ICB0aWdnZXJfY291bnQ9cm93Wyd0cmlnZ2VyY291bnQnXSwKKyAgICAgICAgICAgICAgICBoYXNf ZW5hYmxlX3RyaWdnZXJzPXJvd1snaGFzX2VuYWJsZV90cmlnZ2VycyddLAorICAgICAgICAgICAg ICAgIGlzX3BhcnRpdGlvbmVkPXJvd1snaXNfcGFydGl0aW9uZWQnXSwKKyAgICAgICAgICAgICAg ICBwYXJlbnRfc2NoZW1hX2lkPXNjaWQsCisgICAgICAgICAgICAgICAgc2NoZW1hX2lkPXJvd1sn c2NoZW1hX2lkJ10sCisgICAgICAgICAgICAgICAgc2NoZW1hX25hbWU9cm93WydzY2hlbWFfbmFt ZSddCisgICAgICAgICAgICApCisKKyAgICAgICAgaWYgcHRpZCBpcyBub3QgTm9uZToKKyAgICAg ICAgICAgIGlmIGxlbihyc2V0Wydyb3dzJ10pID09IDA6CisgICAgICAgICAgICAgICAgcmV0dXJu IGdvbmUoZ2V0dGV4dCgKKyAgICAgICAgICAgICAgICAgICAgIlRoZSBzcGVjaWZpZWQgcGFydGl0 aW9uZWQgdGFibGUgY291bGQgbm90IGJlIGZvdW5kLiIKKyAgICAgICAgICAgICAgICApKQorCisg ICAgICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgICAgIGRh dGE9YnJvd3Nlcl9ub2RlKHJzZXRbJ3Jvd3MnXVswXSksIHN0YXR1cz0yMDAKKyAgICAgICAgICAg ICAgICApCisKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgZm9yIHJvdyBpbiByc2V0Wydyb3dz J106CisgICAgICAgICAgICByZXMuYXBwZW5kKGJyb3dzZXJfbm9kZShyb3cpKQorCisgICAgICAg IHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICBkYXRhPXJlcywKKyAgICAg ICAgICAgIHN0YXR1cz0yMDAKKyAgICAgICAgKQorCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tf cHJlY29uZGl0aW9uCisgICAgZGVmIHByb3BlcnRpZXMoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgc2Np ZCwgdGlkLCBwdGlkKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBz aG93IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBzZWxlY3RlZCB0YWJsZSBub2RlLgorCisgICAgICAg IEFyZ3M6CisgICAgICAgICAgICBnaWQ6IFNlcnZlciBHcm91cCBJRAorICAgICAgICAgICAgc2lk OiBTZXJ2ZXIgSUQKKyAgICAgICAgICAgIGRpZDogIERhdGFiYXNlIElECisgICAgICAgICAgICBz Y2lkOiBTY2hlbWEgSUQKKyAgICAgICAgICAgIHNjaWQ6IFNjaGVtYSBJRAorICAgICAgICAgICAg dGlkOiBUYWJsZSBJRAorICAgICAgICAgICAgcHRpZDogUGFydGl0aW9uIFRhYmxlIElECisKKyAg ICAgICAgUmV0dXJuczoKKyAgICAgICAgICAgIEpTT04gb2Ygc2VsZWN0ZWQgdGFibGUgbm9kZQor ICAgICAgICAiIiIKKworICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3Nl bGYucGFydGl0aW9uX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZGlkPWRpZCwgc2NpZD1zY2lkLCB0aWQ9dGlkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHRpZD1wdGlkLCBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkKKyAg ICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKyAgICAgICAg aWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3Io ZXJyb3Jtc2c9cmVzKQorCisgICAgICAgIGlmIGxlbihyZXNbJ3Jvd3MnXSkgPT0gMDoKKyAgICAg ICAgICAgICAgICByZXR1cm4gZ29uZShnZXR0ZXh0KAorICAgICAgICAgICAgICAgICAgICAiVGhl IHNwZWNpZmllZCBwYXJ0aXRpb25lZCB0YWJsZSBjb3VsZCBub3QgYmUgZm91bmQuIikpCisKKyAg ICAgICAgZGF0YSA9IHJlc1sncm93cyddWzBdCisKKyAgICAgICAgZGF0YVsndmFjdXVtX3NldHRp bmdzX3N0ciddID0gIiIKKworICAgICAgICBpZiBkYXRhWyd0YWJsZV92YWN1dW1fc2V0dGluZ3Nf c3RyJ10gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBkYXRhWyd2YWN1dW1fc2V0dGluZ3Nfc3Ry J10gKz0gZGF0YVsKKyAgICAgICAgICAgICAgICAndGFibGVfdmFjdXVtX3NldHRpbmdzX3N0cidd LnJlcGxhY2UoJywnLCAnXG4nKQorCisgICAgICAgIGlmIGRhdGFbJ3RvYXN0X3RhYmxlX3ZhY3V1 bV9zZXR0aW5nc19zdHInXSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGRhdGFbJ3ZhY3V1bV9z ZXR0aW5nc19zdHInXSArPSAnXG4nICsgJ1xuJy5qb2luKAorICAgICAgICAgICAgICAgIFsndG9h c3RfJyArIHNldHRpbmcgZm9yIHNldHRpbmcgaW4gZGF0YVsKKyAgICAgICAgICAgICAgICAgICAg J3RvYXN0X3RhYmxlX3ZhY3V1bV9zZXR0aW5nc19zdHInCisgICAgICAgICAgICAgICAgXS5zcGxp dCgnLCcpXQorICAgICAgICAgICAgKQorICAgICAgICBkYXRhWyd2YWN1dW1fc2V0dGluZ3Nfc3Ry J10gPSBkYXRhWworICAgICAgICAgICAgJ3ZhY3V1bV9zZXR0aW5nc19zdHInCisgICAgICAgIF0u cmVwbGFjZSgiPSIsICIgPSAiKQorCisgICAgICAgIHJldHVybiBhamF4X3Jlc3BvbnNlKAorICAg ICAgICAgICAgcmVzcG9uc2U9ZGF0YSwKKyAgICAgICAgICAgIHN0YXR1cz0yMDAKKyAgICAgICAg KQorCisgICAgQEJhc2VUYWJsZVZpZXcuY2hlY2tfcHJlY29uZGl0aW9uCisgICAgZGVmIHNxbChz ZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lkLCB0aWQsIHB0aWQpOgorICAgICAgICAiIiIKKyAgICAg ICAgVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZXMgcmV2ZXJzZSBlbmdpbmVlcmVkIHNxbCBmb3IK KyAgICAgICAgdGhlIHRhYmxlIG9iamVjdAorCisgICAgICAgICBBcmdzOgorICAgICAgICAgICBn aWQ6IFNlcnZlciBHcm91cCBJRAorICAgICAgICAgICBzaWQ6IFNlcnZlciBJRAorICAgICAgICAg ICBkaWQ6IERhdGFiYXNlIElECisgICAgICAgICAgIHNjaWQ6IFNjaGVtYSBJRAorICAgICAgICAg ICB0aWQ6IFRhYmxlIElECisgICAgICAgICAgIHB0aWQ6IFBhcnRpdGlvbiBUYWJsZSBJRAorICAg ICAgICAiIiIKKyAgICAgICAgbWFpbl9zcWwgPSBbXQorCisgICAgICAgIFNRTCA9IHJlbmRlcl90 ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5wYXJ0aXRpb25fdGVtcGxhdGVfcGF0aCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSksCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBkaWQ9ZGlkLCBzY2lkPXNjaWQsIHRpZD10aWQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGlkPXB0aWQsIGRhdGxhc3RzeXNvaWQ9c2Vs Zi5kYXRsYXN0c3lzb2lkKQorICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRl X2RpY3QoU1FMKQorICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGlu dGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgaWYgbGVuKHJlc1sn cm93cyddKSA9PSAwOgorICAgICAgICAgICAgICAgIHJldHVybiBnb25lKGdldHRleHQoCisgICAg ICAgICAgICAgICAgICAgICJUaGUgc3BlY2lmaWVkIHBhcnRpdGlvbmVkIHRhYmxlIGNvdWxkIG5v dCBiZSBmb3VuZC4iKSkKKworICAgICAgICBkYXRhID0gcmVzWydyb3dzJ11bMF0KKworICAgICAg ICByZXR1cm4gQmFzZVRhYmxlVmlldy5nZXRfcmV2ZXJzZV9lbmdpbmVlcmVkX3NxbChzZWxmLCBk aWQsIHNjaWQsIHB0aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1haW5fc3FsLCBkYXRhKQorCisgICAgQEJhc2VUYWJsZVZpZXcuY2hl Y2tfcHJlY29uZGl0aW9uCisgICAgZGVmIGRldGFjaChzZWxmLCBnaWQsIHNpZCwgZGlkLCBzY2lk LCB0aWQsIHB0aWQpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHJl c2V0IHN0YXRpc3RpY3Mgb2YgdGFibGUKKworICAgICAgICAgQXJnczoKKyAgICAgICAgICAgZ2lk OiBTZXJ2ZXIgR3JvdXAgSUQKKyAgICAgICAgICAgc2lkOiBTZXJ2ZXIgSUQKKyAgICAgICAgICAg ZGlkOiBEYXRhYmFzZSBJRAorICAgICAgICAgICBzY2lkOiBTY2hlbWEgSUQKKyAgICAgICAgICAg dGlkOiBUYWJsZSBJRAorICAgICAgICAgICBwdGlkOiBQYXJ0aXRpb24gVGFibGUgSUQKKyAgICAg ICAgIiIiCisgICAgICAgICMgRmV0Y2ggc2NoZW1hIG5hbWUKKyAgICAgICAgc3RhdHVzLCBwYXJl bnRfc2NoZW1hID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKAorICAgICAgICAgICAgcmVuZGVy X3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRl X3BhdGgsICdnZXRfc2NoZW1hLnNxbCddKSwKKyAgICAgICAgICAgICAgICBjb25uPXNlbGYuY29u biwgc2NpZD1zY2lkCisgICAgICAgICAgICApCisgICAgICAgICkKKyAgICAgICAgaWYgbm90IHN0 YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9 cGFyZW50X3NjaGVtYSkKKworICAgICAgICAjIEZldGNoIFBhcmVudCBUYWJsZSBuYW1lCisgICAg ICAgIHN0YXR1cywgcGFydGl0aW9uZWRfdGFibGVfbmFtZSA9IHNlbGYuY29ubi5leGVjdXRlX3Nj YWxhcigKKyAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAiLyIu am9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLCAnZ2V0X3RhYmxlLnNxbCddKSwKKyAgICAg ICAgICAgICAgICBjb25uPXNlbGYuY29ubiwgc2NpZD1zY2lkLCB0aWQ9dGlkCisgICAgICAgICAg ICApCisgICAgICAgICkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVy biBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cGFydGl0aW9uZWRfdGFibGVfbmFtZSkK KworICAgICAgICAjIEdldCBzY2hlbWEgb2lkIG9mIHBhcnRpdGlvbgorICAgICAgICBzdGF0dXMs IHBzY2lkID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKAorICAgICAgICAgICAgcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICdnZXRfc2NoZW1hX29pZC5zcWwnXSksIHRpZD1wdGlk KSkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9z ZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c2NpZCkKKworICAgICAgICAjIEZldGNoIHNjaGVtYSBuYW1l CisgICAgICAgIHN0YXR1cywgcGFydGl0aW9uX3NjaGVtYSA9IHNlbGYuY29ubi5leGVjdXRlX3Nj YWxhcigKKyAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJsZV90 ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0 X3NjaGVtYS5zcWwnXSksIGNvbm49c2VsZi5jb25uLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNjaWQ9cHNjaWQpCisgICAgICAgICkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cGFydGl0aW9uX3Nj aGVtYSkKKworICAgICAgICAjIEZldGNoIFBhcnRpdGlvbiBUYWJsZSBuYW1lCisgICAgICAgIHN0 YXR1cywgcGFydGl0aW9uX25hbWUgPSBzZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoCisgICAgICAg ICAgICByZW5kZXJfdGVtcGxhdGUoCisgICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGFi bGVfdGVtcGxhdGVfcGF0aCwgJ2dldF90YWJsZS5zcWwnXSksCisgICAgICAgICAgICAgICAgY29u bj1zZWxmLmNvbm4sIHNjaWQ9cHNjaWQsIHRpZD1wdGlkCisgICAgICAgICAgICApCisgICAgICAg ICkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9z ZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cGFydGl0aW9uX25hbWUpCisKKyAgICAgICAgdHJ5OgorICAg ICAgICAgICAgdGVtcF9kYXRhID0gZGljdCgpCisgICAgICAgICAgICB0ZW1wX2RhdGFbJ3BhcmVu dF9zY2hlbWEnXSA9IHBhcmVudF9zY2hlbWEKKyAgICAgICAgICAgIHRlbXBfZGF0YVsncGFydGl0 aW9uZWRfdGFibGVfbmFtZSddID0gcGFydGl0aW9uZWRfdGFibGVfbmFtZQorICAgICAgICAgICAg dGVtcF9kYXRhWydzY2hlbWEnXSA9IHBhcnRpdGlvbl9zY2hlbWEKKyAgICAgICAgICAgIHRlbXBf ZGF0YVsnbmFtZSddID0gcGFydGl0aW9uX25hbWUKKworICAgICAgICAgICAgU1FMID0gcmVuZGVy X3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxmLnBh cnRpdGlvbl90ZW1wbGF0ZV9wYXRoLCAnZGV0YWNoLnNxbCddKSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkYXRhPXRlbXBfZGF0YSwgY29ubj1zZWxmLmNvbm4pCisKKyAgICAgICAgICAg IHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKFNRTCkKKyAgICAgICAgICAg IGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9l cnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9u c2UoCisgICAgICAgICAgICAgICAgc3VjY2Vzcz0xLAorICAgICAgICAgICAgICAgIGluZm89Z2V0 dGV4dCgiUGFydGl0aW9uIGRldGFjaGVkLiIpLAorICAgICAgICAgICAgICAgIGRhdGE9eworICAg ICAgICAgICAgICAgICAgICAnaWQnOiBwdGlkLAorICAgICAgICAgICAgICAgICAgICAnc2NpZCc6 IHNjaWQKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICApCisgICAgICAgIGV4Y2VwdCBF eGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3Io ZXJyb3Jtc2c9c3RyKGUpKQorCitQYXJ0aXRpb25zVmlldy5yZWdpc3Rlcl9ub2RlX3ZpZXcoYmx1 ZXByaW50KQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3BhcnRpdGlvbnMvc3RhdGljL2ltZy9jb2xs LXBhcnRpdGlvbi5wbmcgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVy cy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcGFydGl0aW9ucy9zdGF0aWMvaW1nL2NvbGwtcGFy dGl0aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ODBlODY0NTdlOGM0OGNkMDEzMjlmMDMwM2Q2NjNiMDMw NGFiNDRkCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA1NTUKemNtZUFTQE4/KG9sSHlgdVZCcSFp YTB2cF4wd0IhNjM/d3lsYEdiTWYtVDxFdlMwSnI4Xj9CRjFlXmJ1P1R6bUQ/CnpzWE1Sa0olMFl8 YFNXTWJvKmxqTXRaZTVDZ0U9b2MmaSlKOUBNLWhhd3xEUX1aOWVfND5lJW82MTMhfkBlaGJfNQp6 Kj5tKj0rb2YqfT1lPF4rYFNSWXFkKEVmK2RJM2UyeXcjWmJeOFdxJWp+K2RHe1BeK0hyJSY0dEpi Jj11IVNkekgKeipRe0NkPUZPWFRAN30kOWBTUmh6aHMlfk5UZGB1citPPSFmdVY0U18pdkYxb0sw a2x7e1BwWUNGSjhQQHhwTCtFCnpfd1BTYHtQXzBtK2Z9UHBaUD43MykyMjtObzs+O1I7WF5nWjBZ NVptekY3QkheJmlqIWozcSZTITMrLTFabG5QQAp6b0NPfHsjWCNCdmpOTUxWK1d7RiVKelgzX0Jy ZUNFS1E3aX1Ba2d9LSQ1Y3lkTyRUZW83TUc9K04jRm08cFhTbEEKekYqXk9mcnJWbU8maXohZyt2 Y245TjtLYm9XZT5nM19NZElidGo1NXo0Njd3WXIoOFRmYERNO05nSn0qMlRzOXh0CnphOER2eVJM NyllPUNycDN5TWhuOEk8SV9nUlZUbkRzeG9WRGBHaDw2WmlXKzc5RnVvbVRERyNvXylnbjFsX0tA dAp6YkpMbGFYVzhzODYxQDheQHZFWjg/fU0zUUFgZHJuYnVRYX4/YGE9QDRkZVY9Zmh7TSRpZiNm clNoZDc4cTlpNDsKekItSlhwQz4yT0M3I1NFRT1vJVg3OFdASGM4Q2FQWlRiWTxAODw8KWQ3fGVV OHcrY2w9WmhsSDtTfHZuLWZoQVoyCmNQXz5EYmZmKz1Ac3ArOT5mRXBNKVVIeDN2SVZDZyEwSmxz S2kyd2lxCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcGFy dGl0aW9ucy9zdGF0aWMvaW1nL3BhcnRpdGlvbi5wbmcgYi93ZWIvcGdhZG1pbi9icm93c2VyL3Nl cnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvcGFydGl0aW9ucy9z dGF0aWMvaW1nL3BhcnRpdGlvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzdiMjIyN2Q4ZmUwY2Y3NmJkZTIz ODU1Njc2NDAzYzU3Y2NmYjU2OQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgNTkzCnpjbWVBU0BO PyhvbEh5YHVWQnEhaWEwdnBeMHdCITYzP3d5bGBHYk1malIybnpTMEpyOF4/QzF3fEM3JURVVWQy RQp6dHtaUEotaFgtakAkO3c4bzxEb2A/QUY3bFl0QjdTLXVPYXFfS1dXR3w2OS1ldDJePGheemc1 b2VMb1UrZDwpejMKeio/WXxnaHZvMGc3cmZEKF5HYT5UJWhvZjB2LWthUVQ9dmR2O1R5ZDx1ZU14 IWNsWWt5ZC12fCR6a21QMWc5aV5FCnpLNzkxKChje09EcEZWeHN6V0AxKTdjWEFFZUVJek9eT1kt Q0s2JnpGJjYraUQtbkBESF9VLSVrP19hJW93UzQqVgp6NilSUyhVQXVQdWB0YDQwenk5I3khPjNR NS1vMU9iZGlDbEo4I1pqKnhOKn5fTyY+cGd7UVVYeipSTmw8WnIlRnIKeitxV00tZXIoJmVaTzR1 cy1Aa3Reek99Nnk9cl9pYUFpclAraGk1bV5mRT47T2tIfSZtP0UlSmFDJHNIPGoxOFZICnpqdio0 NEwoZzlxWUJDVUxlVkVXTVRQQEQ1en5+JlB4RkVeIztvdGluY1AqXm0tMk00JWVgSElgNn4mZW9B RzdLRAp6QkhqfHl3WGZie2Y3UUZ9TXBwVCp6NWZ6OFR4K2swOU03Tk9sUD5kWSh3MnlJKkVUSkIj Q3hEVnlNXzZoc3E/KnsKeiViUjJ5al5eYntiYjBad2QoQnU9Sj1iQ3g+anRHRzNuUipOcFJxRyFL bFdKWj1KKHRuaDJpfVQ8RnlVM2VfciFDCnpZP3RJX0Y1QjxnJihVeXZgZnVZdDtmOHA1UmhkaWdf Y0x0Ym0qIyg1d2hIN3MpZV9mO2w5YUBmUklCOG9SM09EKgp6V01GOFpZaU9pdlU+SVUjVX1hKSNX biF2clV9fE14Rno9bi1EaWpVNWA2LSFjbEBKWEVtUzdEKSloMVIzVylLYWgKVHJpWlFwWUdDa21e PmJQMGwrWGtLdyFBOVAKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9w Z2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3Rh Ymxlcy9wYXJ0aXRpb25zL3RlbXBsYXRlcy9wYXJ0aXRpb24vanMvcGFydGl0aW9uLmpzIGIvd2Vi L3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMv dGFibGVzL3BhcnRpdGlvbnMvdGVtcGxhdGVzL3BhcnRpdGlvbi9qcy9wYXJ0aXRpb24uanMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM2OGY3NQotLS0gL2Rldi9udWxsCisr KyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9z Y2hlbWFzL3RhYmxlcy9wYXJ0aXRpb25zL3RlbXBsYXRlcy9wYXJ0aXRpb24vanMvcGFydGl0aW9u LmpzCkBAIC0wLDAgKzEsNzU5IEBACitkZWZpbmUoCisgICAgICAgIFsnc291cmNlcy9nZXR0ZXh0 JywgJ2pxdWVyeScsICd1bmRlcnNjb3JlJywgJ3VuZGVyc2NvcmUuc3RyaW5nJywgJ3BnYWRtaW4n LCAncGdhZG1pbi5icm93c2VyJywKKyAgICAgICAgJ2JhY2tmb3JtJywgJ2FsZXJ0aWZ5JywgJ3Bn YWRtaW4uYnJvd3Nlci5jb2xsZWN0aW9uJ10sCitmdW5jdGlvbihnZXR0ZXh0LCAkLCBfLCBTLCBw Z0FkbWluLCBwZ0Jyb3dzZXIsIEJhY2tmb3JtLCBhbGVydGlmeSkgeworCisgIGlmICghcGdCcm93 c2VyLk5vZGVzWydjb2xsLXBhcnRpdGlvbiddKSB7CisgICAgdmFyIGRhdGFiYXNlcyA9IHBnQWRt aW4uQnJvd3Nlci5Ob2Rlc1snY29sbC1wYXJ0aXRpb24nXSA9CisgICAgICBwZ0FkbWluLkJyb3dz ZXIuQ29sbGVjdGlvbi5leHRlbmQoeworICAgICAgICBub2RlOiAncGFydGl0aW9uJywKKyAgICAg ICAgbGFiZWw6IGdldHRleHQoJ1BhcnRpdGlvbnMnKSwKKyAgICAgICAgdHlwZTogJ2NvbGwtcGFy dGl0aW9uJywKKyAgICAgICAgY29sdW1uczogWyduYW1lJywgJ3NjaGVtYScsICdwYXJ0aXRpb25f dmFsdWUnLCAnZGVzY3JpcHRpb24nXSwKKyAgICAgICAgaGFzU3RhdGlzdGljczogdHJ1ZQorICAg ICAgfSk7CisgIH07CisKKyAgaWYgKCFwZ0Jyb3dzZXIuTm9kZXNbJ3BhcnRpdGlvbiddKSB7Cisg ICAgcGdBZG1pbi5Ccm93c2VyLk5vZGVzWydwYXJ0aXRpb24nXSA9IHBnQWRtaW4uQnJvd3Nlci5O b2RlLmV4dGVuZCh7CisgICAgICBwYXJlbnRfdHlwZTogJ3RhYmxlJywKKyAgICAgIGNvbGxlY3Rp b25fdHlwZTogJ2NvbGwtcGFydGl0aW9uJywKKyAgICAgIHR5cGU6ICdwYXJ0aXRpb24nLAorICAg ICAgbGFiZWw6IGdldHRleHQoJ1BhcnRpdGlvbicpLAorICAgICAgaGFzU1FMOiB0cnVlLAorICAg ICAgaGFzRGVwZW5kczogdHJ1ZSwKKyAgICAgIGhhc1N0YXRpc3RpY3M6IHRydWUsCisgICAgICBz dGF0c1ByZXR0aWZ5RmllbGRzOiBbJ1NpemUnLCAnSW5kZXhlcyBzaXplJywgJ1RhYmxlIHNpemUn LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUb2FzdCB0YWJsZSBzaXplJywgJ1R1cGxl IGxlbmd0aCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0RlYWQgdHVwbGUgbGVuZ3Ro JywgJ0ZyZWUgc3BhY2UnXSwKKyAgICAgIHNxbEFsdGVySGVscDogJ3NxbC1hbHRlcnRhYmxlLmh0 bWwnLAorICAgICAgc3FsQ3JlYXRlSGVscDogJ3NxbC1jcmVhdGV0YWJsZS5odG1sJywKKyAgICAg IGRpYWxvZ0hlbHA6ICd7eyB1cmxfZm9yKCdoZWxwLnN0YXRpYycsIGZpbGVuYW1lPSd0YWJsZV9k aWFsb2cuaHRtbCcpIH19JywKKyAgICAgIGhhc1NjcmlwdFR5cGVzOiBbJ2NyZWF0ZSddLAorICAg ICAgaGVpZ2h0OiAnOTUlJywKKyAgICAgIHdpZHRoOiAnODUlJywKKyAgICAgIEluaXQ6IGZ1bmN0 aW9uKCkgeworICAgICAgICAvKiBBdm9pZCBtdWxpdHBsZSByZWdpc3RyYXRpb24gb2YgbWVudXMg Ki8KKyAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpCisgICAgICAgICAgICByZXR1cm47CisK KyAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7CisKKyAgICAgICAgcGdCcm93c2VyLmFk ZF9tZW51cyhbeworICAgICAgICAgIG5hbWU6ICd0cnVuY2F0ZV90YWJsZScsIG5vZGU6ICdwYXJ0 aXRpb24nLCBtb2R1bGU6IHRoaXMsCisgICAgICAgICAgYXBwbGllczogWydvYmplY3QnLCAnY29u dGV4dCddLCBjYWxsYmFjazogJ3RydW5jYXRlX3RhYmxlJywKKyAgICAgICAgICBjYXRlZ29yeTog J1RydW5jYXRlJywgcHJpb3JpdHk6IDMsIGxhYmVsOiBnZXR0ZXh0KCdUcnVuY2F0ZScpLAorICAg ICAgICAgIGljb246ICdmYSBmYS1lcmFzZXInLCBlbmFibGUgOiAnY2FuQ3JlYXRlJworICAgICAg ICB9LHsKKyAgICAgICAgICBuYW1lOiAndHJ1bmNhdGVfdGFibGVfY2FzY2FkZScsIG5vZGU6ICdw YXJ0aXRpb24nLCBtb2R1bGU6IHRoaXMsCisgICAgICAgICAgYXBwbGllczogWydvYmplY3QnLCAn Y29udGV4dCddLCBjYWxsYmFjazogJ3RydW5jYXRlX3RhYmxlX2Nhc2NhZGUnLAorICAgICAgICAg IGNhdGVnb3J5OiAnVHJ1bmNhdGUnLCBwcmlvcml0eTogMywgbGFiZWw6IGdldHRleHQoJ1RydW5j YXRlIENhc2NhZGUnKSwKKyAgICAgICAgICBpY29uOiAnZmEgZmEtZXJhc2VyJywgZW5hYmxlIDog J2NhbkNyZWF0ZScKKyAgICAgICAgfSx7CisgICAgICAgICAgbmFtZTogJ3Jlc2V0X3RhYmxlX3N0 YXRzJywgbm9kZTogJ3BhcnRpdGlvbicsIG1vZHVsZTogdGhpcywKKyAgICAgICAgICBhcHBsaWVz OiBbJ29iamVjdCcsICdjb250ZXh0J10sIGNhbGxiYWNrOiAncmVzZXRfdGFibGVfc3RhdHMnLAor ICAgICAgICAgIGNhdGVnb3J5OiAnUmVzZXQnLCBwcmlvcml0eTogNCwgbGFiZWw6IGdldHRleHQo J1Jlc2V0IFN0YXRpc3RpY3MnKSwKKyAgICAgICAgICBpY29uOiAnZmEgZmEtYmFyLWNoYXJ0Jywg ZW5hYmxlIDogJ2NhbkNyZWF0ZScKKyAgICAgICAgfSx7CisgICAgICAgICAgbmFtZTogJ2RldGFj aF9wYXJ0aXRpb24nLCBub2RlOiAncGFydGl0aW9uJywgbW9kdWxlOiB0aGlzLAorICAgICAgICAg IGFwcGxpZXM6IFsnb2JqZWN0JywgJ2NvbnRleHQnXSwgY2FsbGJhY2s6ICdkZXRhY2hfcGFydGl0 aW9uJywKKyAgICAgICAgICBwcmlvcml0eTogMiwgbGFiZWw6IGdldHRleHQoJ0RldGFjaCBQYXJ0 aXRpb24nKSwKKyAgICAgICAgICBpY29uOiAnZmEgZmEtcmVtb3ZlJworICAgICAgICB9CisgICAg ICAgIF0pOworICAgICAgfSwKKyAgICAgIGdldFRyZWVOb2RlSGllcmFyY2h5OiBmdW5jdGlvbihp KSB7CisgICAgICAgIHZhciBpZHggPSAwLAorICAgICAgICAgICAgcmVzID0ge30sCisgICAgICAg ICAgICB0ID0gcGdCcm93c2VyLnRyZWU7CisKKyAgICAgICAgZG8geworICAgICAgICAgIGQgPSB0 Lml0ZW1EYXRhKGkpOworICAgICAgICAgIGlmICgKKyAgICAgICAgICAgIGQuX3R5cGUgaW4gcGdC cm93c2VyLk5vZGVzICYmIHBnQnJvd3Nlci5Ob2Rlc1tkLl90eXBlXS5oYXNJZAorICAgICAgICAg ICkgeworICAgICAgICAgICAgaWYgKGQuX3R5cGUgPT0gJ3BhcnRpdGlvbicgJiYgJ3BhcnRpdGlv bicgaW4gcmVzKSB7CisgICAgICAgICAgICAgIGlmICghKCd0YWJsZScgaW4gcmVzKSkgeworICAg ICAgICAgICAgICAgIHJlc1sndGFibGUnXSA9IF8uZXh0ZW5kKHt9LCBkLCB7J3ByaW9yaXR5Jzog aWR4fSk7CisgICAgICAgICAgICAgICAgaWR4IC09IDE7CisgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIH0gZWxzZSBpZiAoZC5fdHlwZSA9PSAndGFibGUnKSB7CisgICAgICAgICAgICAgIGlm ICghKCd0YWJsZScgaW4gcmVzKSkgeworICAgICAgICAgICAgICAgIHJlc1sndGFibGUnXSA9IF8u ZXh0ZW5kKHt9LCBkLCB7J3ByaW9yaXR5JzogaWR4fSk7CisgICAgICAgICAgICAgICAgaWR4IC09 IDE7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg IHJlc1tkLl90eXBlXSA9IF8uZXh0ZW5kKHt9LCBkLCB7J3ByaW9yaXR5JzogaWR4fSk7CisgICAg ICAgICAgICAgIGlkeCAtPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAg ICBpID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBhcmVudChpKSA6IG51bGw7CisgICAgICAgIH0gd2hp bGUgKGkpOworCisgICAgICAgIHJldHVybiByZXM7CisgICAgICB9LAorICAgICAgZ2VuZXJhdGVf dXJsOiBmdW5jdGlvbihpdGVtLCB0eXBlLCBkLCB3aXRoX2lkLCBpbmZvKSB7CisgICAgICAgIGlm IChfLmluZGV4T2YoWworICAgICAgICAgICAgJ3N0YXRzJywgJ3N0YXRpc3RpY3MnLCAnY2hpbGRy ZW4nLCAnZGVwZW5kZW5jeScsICdkZXBlbmRlbnQnLAorICAgICAgICAgICAgJ3RydW5jYXRlJywg J3Jlc2V0JworICAgICAgICAgICAgXSwgdHlwZSkgPT0gLTEpIHsKKyAgICAgICAgICByZXR1cm4g cGdCcm93c2VyLk5vZGUuZ2VuZXJhdGVfdXJsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAg ICAgIH0KKworICAgICAgICBpZiAodHlwZSA9PSAnc3RhdGlzdGljcycpIHsKKyAgICAgICAgICB0 eXBlID0gJ3N0YXRzJzsKKyAgICAgICAgfQorCisgICAgICAgIGluZm8gPSAoXy5pc1VuZGVmaW5l ZChpdGVtKSB8fCBfLmlzTnVsbChpdGVtKSkgPworICAgICAgICAgIGluZm8gfHwge30gOiB0aGlz LmdldFRyZWVOb2RlSGllcmFyY2h5KGl0ZW0pOworCisgICAgICAgIHJldHVybiBTKCd0YWJsZS8l cy8lcy8lcy8lcy8lcy8lcycpLnNwcmludGYoCisgICAgICAgICAgICBlbmNvZGVVUklDb21wb25l bnQodHlwZSksIGVuY29kZVVSSUNvbXBvbmVudChpbmZvWydzZXJ2ZXItZ3JvdXAnXS5faWQpLAor ICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGluZm9bJ3NlcnZlciddLl9pZCksCisgICAg ICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoaW5mb1snZGF0YWJhc2UnXS5faWQpLAorICAgICAg ICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGluZm9bJ3BhcnRpdGlvbiddLnNjaGVtYV9pZCksCisg ICAgICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoaW5mb1sncGFydGl0aW9uJ10uX2lkKQorICAg ICAgICAgICAgKS52YWx1ZSgpOworICAgICAgfSwKKyAgICAgIGNhbkRyb3A6IHBnQnJvd3Nlci5O b2Rlc1snc2NoZW1hJ10uY2FuQ2hpbGREcm9wLAorICAgICAgY2FuRHJvcENhc2NhZGU6IHBnQnJv d3Nlci5Ob2Rlc1snc2NoZW1hJ10uY2FuQ2hpbGREcm9wLAorICAgICAgY2FsbGJhY2tzOiB7Cisg ICAgICAgIC8qIEVuYWJsZSB0cmlnZ2VyKHMpIG9uIHRhYmxlICovCisgICAgICAgIGVuYWJsZV90 cmlnZ2Vyc19vbl90YWJsZTogZnVuY3Rpb24oYXJncykgeworICAgICAgICAgICAgdmFyIHBhcmFt cyA9IHsnZW5hYmxlJzogdHJ1ZSB9OworICAgICAgICAgICAgdGhpcy5jYWxsYmFja3Muc2V0X3Ry aWdnZXJzLmFwcGx5KHRoaXMsIFthcmdzLCBwYXJhbXNdKTsKKyAgICAgICAgfSwKKyAgICAgICAg LyogRGlzYWJsZSB0cmlnZ2VyKHMpIG9uIHRhYmxlICovCisgICAgICAgIGRpc2FibGVfdHJpZ2dl cnNfb25fdGFibGU6IGZ1bmN0aW9uKGFyZ3MpIHsKKyAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7 J2VuYWJsZSc6IGZhbHNlIH07CisgICAgICAgICAgICB0aGlzLmNhbGxiYWNrcy5zZXRfdHJpZ2dl cnMuYXBwbHkodGhpcywgW2FyZ3MsIHBhcmFtc10pOworICAgICAgICB9LAorICAgICAgICBzZXRf dHJpZ2dlcnM6IGZ1bmN0aW9uKGFyZ3MsIHBhcmFtcykgeworICAgICAgICAgIC8vIFRoaXMgZnVu Y3Rpb24gd2lsbCBzZW5kIHJlcXVlc3QgdG8gZW5hYmxlIG9yCisgICAgICAgICAgLy8gZGlzYWJs ZSB0cmlnZ2VycyBvbiB0YWJsZSBsZXZlbAorICAgICAgICAgIHZhciBpbnB1dCA9IGFyZ3MgfHwg e307CisgICAgICAgICAgb2JqID0gdGhpcywKKyAgICAgICAgICB0ID0gcGdCcm93c2VyLnRyZWUs CisgICAgICAgICAgaSA9IGlucHV0Lml0ZW0gfHwgdC5zZWxlY3RlZCgpLAorICAgICAgICAgIGQg PSBpICYmIGkubGVuZ3RoID09IDEgPyB0Lml0ZW1EYXRhKGkpIDogdW5kZWZpbmVkOworICAgICAg ICAgIGlmICghZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICQuYWph eCh7CisgICAgICAgICAgICB1cmw6IG9iai5nZW5lcmF0ZV91cmwoaSwgJ3NldF90cmlnZ2VyJyAs IGQsIHRydWUpLAorICAgICAgICAgICAgdHlwZTonUFVUJywKKyAgICAgICAgICAgIGRhdGE6IHBh cmFtcywKKyAgICAgICAgICAgIGRhdGFUeXBlOiAianNvbiIsCisgICAgICAgICAgICBzdWNjZXNz OiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzID09IDEpIHsK KyAgICAgICAgICAgICAgICBhbGVydGlmeS5zdWNjZXNzKCJ7eyBfKCciICsgcmVzLmluZm8gKyAi JykgfX0iKTsKKyAgICAgICAgICAgICAgICB0LnVubG9hZChpKTsKKyAgICAgICAgICAgICAgICB0 LnNldElub2RlKGkpOworICAgICAgICAgICAgICAgIHQuZGVzZWxlY3QoaSk7CisgICAgICAgICAg ICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgIHQuc2VsZWN0 KGkpOworICAgICAgICAgICAgICAgIH0sIDEwKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfSwKKyAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbih4aHIsIHN0YXR1cywgZXJyb3IpIHsK KyAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICB2YXIgZXJyID0gJC5wYXJzZUpT T04oeGhyLnJlc3BvbnNlVGV4dCk7CisgICAgICAgICAgICAgICAgaWYgKGVyci5zdWNjZXNzID09 IDApIHsKKyAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmVycm9yKGVyci5lcnJvcm1zZyk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fQorICAgICAgICAg ICAgICB0LnVubG9hZChpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAg fSwKKyAgICAgICAgLyogVHJ1bmNhdGUgdGFibGUgKi8KKyAgICAgICAgdHJ1bmNhdGVfdGFibGU6 IGZ1bmN0aW9uKGFyZ3MpIHsKKyAgICAgICAgICAgIHZhciBwYXJhbXMgPSB7J2Nhc2NhZGUnOiBm YWxzZSB9OworICAgICAgICAgICAgdGhpcy5jYWxsYmFja3MudHJ1bmNhdGUuYXBwbHkodGhpcywg W2FyZ3MsIHBhcmFtc10pOworICAgICAgICB9LAorICAgICAgICAvKiBUcnVuY2F0ZSB0YWJsZSB3 aXRoIGNhc2NhZGUgKi8KKyAgICAgICAgdHJ1bmNhdGVfdGFibGVfY2FzY2FkZTogZnVuY3Rpb24o YXJncykgeworICAgICAgICAgICAgdmFyIHBhcmFtcyA9IHsnY2FzY2FkZSc6IHRydWUgfTsKKyAg ICAgICAgICAgIHRoaXMuY2FsbGJhY2tzLnRydW5jYXRlLmFwcGx5KHRoaXMsIFthcmdzLCBwYXJh bXNdKTsKKyAgICAgICAgfSwKKyAgICAgICAgdHJ1bmNhdGU6IGZ1bmN0aW9uKGFyZ3MsIHBhcmFt cykgeworICAgICAgICAgIHZhciBpbnB1dCA9IGFyZ3MgfHwge307CisgICAgICAgICAgb2JqID0g dGhpcywKKyAgICAgICAgICB0ID0gcGdCcm93c2VyLnRyZWUsCisgICAgICAgICAgaSA9IGlucHV0 Lml0ZW0gfHwgdC5zZWxlY3RlZCgpLAorICAgICAgICAgIGQgPSBpICYmIGkubGVuZ3RoID09IDEg PyB0Lml0ZW1EYXRhKGkpIDogdW5kZWZpbmVkOworCisgICAgICAgICAgaWYgKCFkKQorICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgYWxlcnRpZnkuY29uZmlybSgKKyAgICAg ICAgICAgIGdldHRleHQoJ1RydW5jYXRlIFRhYmxlJyksCisgICAgICAgICAgICBTKGdldHRleHQo J0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byB0cnVuY2F0ZSB0YWJsZSAlcz8nKSkuc3ByaW50Zihk LmxhYmVsKS52YWx1ZSgpLAorICAgICAgICAgICAgZnVuY3Rpb24gKGUpIHsKKyAgICAgICAgICAg IGlmIChlKSB7CisgICAgICAgICAgICAgIHZhciBkYXRhID0gZDsKKyAgICAgICAgICAgICAgJC5h amF4KHsKKyAgICAgICAgICAgICAgICB1cmw6IG9iai5nZW5lcmF0ZV91cmwoaSwgJ3RydW5jYXRl JyAsIGQsIHRydWUpLAorICAgICAgICAgICAgICAgIHR5cGU6J1BVVCcsCisgICAgICAgICAgICAg ICAgZGF0YTogcGFyYW1zLAorICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAianNvbiIsCisgICAg ICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgICAgICAgICBp ZiAocmVzLnN1Y2Nlc3MgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICBhbGVydGlmeS5zdWNj ZXNzKCJ7eyBfKCciICsgcmVzLmluZm8gKyAiJykgfX0iKTsKKyAgICAgICAgICAgICAgICAgICAg dC5yZW1vdmVJY29uKGkpOworICAgICAgICAgICAgICAgICAgICBkYXRhLmljb24gPSAnaWNvbi10 YWJsZSc7CisgICAgICAgICAgICAgICAgICAgIHQuYWRkSWNvbihpLCB7aWNvbjogZGF0YS5pY29u fSk7CisgICAgICAgICAgICAgICAgICAgIHQudW5sb2FkKGkpOworICAgICAgICAgICAgICAgICAg ICB0LnNldElub2RlKGkpOworICAgICAgICAgICAgICAgICAgICB0LmRlc2VsZWN0KGkpOworICAg ICAgICAgICAgICAgICAgICAvLyBGZXRjaCB1cGRhdGVkIGRhdGEgZnJvbSBzZXJ2ZXIKKyAgICAg ICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAg ICAgICB0LnNlbGVjdChpKTsKKyAgICAgICAgICAgICAgICAgICAgfSwgMTApOworICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgZXJyb3I6IGZ1 bmN0aW9uKHhociwgc3RhdHVzLCBlcnJvcikgeworICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAg ICAgICAgICAgICAgICAgICAgdmFyIGVyciA9ICQucGFyc2VKU09OKHhoci5yZXNwb25zZVRleHQp OworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLnN1Y2Nlc3MgPT0gMCkgeworICAgICAgICAg ICAgICAgICAgICAgIGFsZXJ0aWZ5LmVycm9yKGVyci5lcnJvcm1zZyk7CisgICAgICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CisgICAgICAgICAgICAg ICAgICB0LnVubG9hZChpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0pOwor ICAgICAgICAgICAgfX0sCisgICAgICAgICAgICBmdW5jdGlvbigpIHt9CisgICAgICAgICAgKTsK KyAgICAgICAgfSwKKyAgICAgICAgcmVzZXRfdGFibGVfc3RhdHM6IGZ1bmN0aW9uKGFyZ3MpIHsK KyAgICAgICAgICB2YXIgaW5wdXQgPSBhcmdzIHx8IHt9LAorICAgICAgICAgICAgb2JqID0gdGhp cywKKyAgICAgICAgICAgIHQgPSBwZ0Jyb3dzZXIudHJlZSwKKyAgICAgICAgICAgIGkgPSBpbnB1 dC5pdGVtIHx8IHQuc2VsZWN0ZWQoKSwKKyAgICAgICAgICAgIGQgPSBpICYmIGkubGVuZ3RoID09 IDEgPyB0Lml0ZW1EYXRhKGkpIDogdW5kZWZpbmVkOworCisgICAgICAgICAgaWYgKCFkKQorICAg ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgYWxlcnRpZnkuY29uZmlybSgKKyAg ICAgICAgICAgIGdldHRleHQoJ1Jlc2V0IHN0YXRpc3RpY3MnKSwKKyAgICAgICAgICAgIFMoZ2V0 dGV4dCgnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlc2V0IHRoZSBzdGF0aXN0aWNzIGZvciB0 YWJsZSAlcz8nKSkuc3ByaW50ZihkLl9sYWJlbCkudmFsdWUoKSwKKyAgICAgICAgICAgIGZ1bmN0 aW9uIChlKSB7CisgICAgICAgICAgICAgIGlmIChlKSB7CisgICAgICAgICAgICAgICAgdmFyIGRh dGEgPSBkOworICAgICAgICAgICAgICAgICQuYWpheCh7CisgICAgICAgICAgICAgICAgICB1cmw6 IG9iai5nZW5lcmF0ZV91cmwoaSwgJ3Jlc2V0JyAsIGQsIHRydWUpLAorICAgICAgICAgICAgICAg ICAgdHlwZTonREVMRVRFJywKKyAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJl cykgeworICAgICAgICAgICAgICAgICAgICBpZiAocmVzLnN1Y2Nlc3MgPT0gMSkgeworICAgICAg ICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LnN1Y2Nlc3MoInt7IF8oJyIgKyByZXMuaW5mbyArICIn KSB9fSIpOworICAgICAgICAgICAgICAgICAgICAgIHQucmVtb3ZlSWNvbihpKTsKKyAgICAgICAg ICAgICAgICAgICAgICBkYXRhLmljb24gPSAnaWNvbi10YWJsZSc7CisgICAgICAgICAgICAgICAg ICAgICAgdC5hZGRJY29uKGksIHtpY29uOiBkYXRhLmljb259KTsKKyAgICAgICAgICAgICAgICAg ICAgICB0LnVubG9hZChpKTsKKyAgICAgICAgICAgICAgICAgICAgICB0LnNldElub2RlKGkpOwor ICAgICAgICAgICAgICAgICAgICAgIHQuZGVzZWxlY3QoaSk7CisgICAgICAgICAgICAgICAgICAg ICAgLy8gRmV0Y2ggdXBkYXRlZCBkYXRhIGZyb20gc2VydmVyCisgICAgICAgICAgICAgICAgICAg ICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQuc2Vs ZWN0KGkpOworICAgICAgICAgICAgICAgICAgICAgIH0sIDEwKTsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5j dGlvbih4aHIsIHN0YXR1cywgZXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAg ICAgICAgICAgICAgICAgICAgICB2YXIgZXJyID0gJC5wYXJzZUpTT04oeGhyLnJlc3BvbnNlVGV4 dCk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5zdWNjZXNzID09IDApIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmVycm9yKGVyci5lcnJvcm1zZyk7CisgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7fQorICAg ICAgICAgICAgICAgICAgICB0LnVubG9hZChpKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAgICAgICAg ICAgIGZ1bmN0aW9uKCkge30KKyAgICAgICAgICApOworICAgICAgICB9LAorICAgICAgICBkZXRh Y2hfcGFydGl0aW9uOiBmdW5jdGlvbihhcmdzKSB7CisgICAgICAgICAgdmFyIGlucHV0ID0gYXJn cyB8fCB7fSwKKyAgICAgICAgICAgIG9iaiA9IHRoaXMsCisgICAgICAgICAgICB0ID0gcGdCcm93 c2VyLnRyZWUsCisgICAgICAgICAgICBpID0gaW5wdXQuaXRlbSB8fCB0LnNlbGVjdGVkKCksCisg ICAgICAgICAgICBkID0gaSAmJiBpLmxlbmd0aCA9PSAxID8gdC5pdGVtRGF0YShpKSA6IHVuZGVm aW5lZDsKKworICAgICAgICAgIGlmICghZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor ICAgICAgICAgIGFsZXJ0aWZ5LmNvbmZpcm0oCisgICAgICAgICAgICBnZXR0ZXh0KCdEZXRhY2gg UGFydGl0aW9uJyksCisgICAgICAgICAgICBTKGdldHRleHQoJ0FyZSB5b3Ugc3VyZSB5b3Ugd2Fu dCB0byBkZXRhY2ggdGhlIHBhcnRpdGlvbiAlcz8nKSkuc3ByaW50ZihkLl9sYWJlbCkudmFsdWUo KSwKKyAgICAgICAgICAgIGZ1bmN0aW9uIChlKSB7CisgICAgICAgICAgICAgIGlmIChlKSB7Cisg ICAgICAgICAgICAgICAgdmFyIGRhdGEgPSBkOworICAgICAgICAgICAgICAgICQuYWpheCh7Cisg ICAgICAgICAgICAgICAgICB1cmw6IG9iai5nZW5lcmF0ZV91cmwoaSwgJ2RldGFjaCcgLCBkLCB0 cnVlKSwKKyAgICAgICAgICAgICAgICAgIHR5cGU6J1BVVCcsCisgICAgICAgICAgICAgICAgICBz dWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdWNj ZXNzID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICBhbGVydGlmeS5zdWNjZXNzKCJ7eyBf KCciICsgcmVzLmluZm8gKyAiJykgfX0iKTsKKyAgICAgICAgICAgICAgICAgICAgICB2YXIgbiA9 IHQubmV4dChpKTsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoIW4gfHwgIW4ubGVuZ3RoKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBuID0gdC5wcmV2KGkpOworICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCFuIHx8ICFuLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAg ICBuID0gdC5wYXJlbnQoaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHQuc2V0SW5vZGUo biwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgIHQucmVtb3ZlKGkpOworICAgICAgICAgICAgICAg ICAgICAgIGlmIChuLmxlbmd0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdC5zZWxlY3Qo bik7CisgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKHhociwg c3RhdHVzLCBlcnJvcikgeworICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg ICAgICAgICAgIHZhciBlcnIgPSAkLnBhcnNlSlNPTih4aHIucmVzcG9uc2VUZXh0KTsKKyAgICAg ICAgICAgICAgICAgICAgICBpZiAoZXJyLnN1Y2Nlc3MgPT0gMCkgeworICAgICAgICAgICAgICAg ICAgICAgICAgYWxlcnRpZnkuZXJyb3IoZXJyLmVycm9ybXNnKTsKKyAgICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9CisgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0sCisgICAgICAgICAgICBmdW5jdGlvbigpIHt9CisgICAgICAgICAgKTsKKyAgICAgICB9Cisg ICAgICB9LAorICAgICAgbW9kZWw6IHBnQnJvd3Nlci5Ob2RlLk1vZGVsLmV4dGVuZCh7CisgICAg ICAgIGRlZmF1bHRzOiB7CisgICAgICAgICAgbmFtZTogdW5kZWZpbmVkLAorICAgICAgICAgIG9p ZDogdW5kZWZpbmVkLAorICAgICAgICAgIHNwY29pZDogdW5kZWZpbmVkLAorICAgICAgICAgIHNw Y25hbWU6IHVuZGVmaW5lZCwKKyAgICAgICAgICByZWxvd25lcjogdW5kZWZpbmVkLAorICAgICAg ICAgIHJlbGFjbDogdW5kZWZpbmVkLAorICAgICAgICAgIHJlbGhhc29pZHM6IHVuZGVmaW5lZCwK KyAgICAgICAgICByZWxoYXNzdWJjbGFzczogdW5kZWZpbmVkLAorICAgICAgICAgIHJlbHR1cGxl czogdW5kZWZpbmVkLAorICAgICAgICAgIGRlc2NyaXB0aW9uOiB1bmRlZmluZWQsCisgICAgICAg ICAgY29ubmFtZTogdW5kZWZpbmVkLAorICAgICAgICAgIGNvbmtleTogdW5kZWZpbmVkLAorICAg ICAgICAgIGlzcmVwbDogdW5kZWZpbmVkLAorICAgICAgICAgIHRyaWdnZXJjb3VudDogdW5kZWZp bmVkLAorICAgICAgICAgIHJlbHBlcnNpc3RlbmNlOiB1bmRlZmluZWQsCisgICAgICAgICAgZmls bGZhY3RvcjogdW5kZWZpbmVkLAorICAgICAgICAgIHJlbG9mdHlwZTogdW5kZWZpbmVkLAorICAg ICAgICAgIHR5cG5hbWU6IHVuZGVmaW5lZCwKKyAgICAgICAgICBsYWJlbHM6IHVuZGVmaW5lZCwK KyAgICAgICAgICBwcm92aWRlcnM6IHVuZGVmaW5lZCwKKyAgICAgICAgICBpc19zeXNfdGFibGU6 IHVuZGVmaW5lZCwKKyAgICAgICAgICBjb2xsX2luaGVyaXRzOiBbXSwKKyAgICAgICAgICBoYXN0 b2FzdHRhYmxlOiB0cnVlLAorICAgICAgICAgIHRvYXN0X2F1dG92YWN1dW1fZW5hYmxlZDogZmFs c2UsCisgICAgICAgICAgYXV0b3ZhY3V1bV9lbmFibGVkOiBmYWxzZSwKKyAgICAgICAgICBwcmlt YXJ5X2tleTogW10KKyAgICAgICAgfSwKKyAgICAgICAgLy8gRGVmYXVsdCB2YWx1ZXMhCisgICAg ICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGF0dHJzLCBhcmdzKSB7CisgICAgICAgICAgdmFyIHNl bGYgPSB0aGlzOworCisgICAgICAgICAgaWYgKF8uc2l6ZShhdHRycykgPT09IDApIHsKKyAgICAg ICAgICAgIHZhciB1c2VySW5mbyA9IHBnQnJvd3Nlci5zZXJ2ZXJJbmZvW2FyZ3Mubm9kZV9pbmZv LnNlcnZlci5faWRdLnVzZXIsCisgICAgICAgICAgICAgICAgc2NoZW1hSW5mbyA9IGFyZ3Mubm9k ZV9pbmZvLnNjaGVtYTsKKworICAgICAgICAgICAgdGhpcy5zZXQoeworICAgICAgICAgICAgICAn cmVsb3duZXInOiB1c2VySW5mby5uYW1lLCAnc2NoZW1hJzogc2NoZW1hSW5mby5fbGFiZWwKKyAg ICAgICAgICAgIH0sIHtzaWxlbnQ6IHRydWV9KTsKKyAgICAgICAgICB9CisgICAgICAgICAgcGdC cm93c2VyLk5vZGUuTW9kZWwucHJvdG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1l bnRzKTsKKworICAgICAgICB9LAorICAgICAgICBzY2hlbWE6IFt7CisgICAgICAgICAgaWQ6ICdu YW1lJywgbGFiZWw6IGdldHRleHQoJ05hbWUnKSwgdHlwZTogJ3RleHQnLAorICAgICAgICAgIG1v ZGU6IFsncHJvcGVydGllcycsICdjcmVhdGUnLCAnZWRpdCddLCBkaXNhYmxlZDogJ2luU2NoZW1h JworICAgICAgICB9LHsKKyAgICAgICAgICBpZDogJ29pZCcsIGxhYmVsOmdldHRleHQoJ09JRCcp LCB0eXBlOiAndGV4dCcsIG1vZGU6IFsncHJvcGVydGllcyddCisgICAgICAgIH0seworICAgICAg ICAgIGlkOiAncmVsb3duZXInLCBsYWJlbDpnZXR0ZXh0KCdPd25lcicpLCB0eXBlOiAndGV4dCcs IG5vZGU6ICdyb2xlJywKKyAgICAgICAgICBtb2RlOiBbJ3Byb3BlcnRpZXMnLCAnY3JlYXRlJywg J2VkaXQnXSwgc2VsZWN0Mjoge2FsbG93Q2xlYXI6IGZhbHNlfSwKKyAgICAgICAgICBkaXNhYmxl ZDogJ2luU2NoZW1hJywgY29udHJvbDogJ25vZGUtbGlzdC1ieS1uYW1lJworICAgICAgICB9LHsK KyAgICAgICAgICBpZDogJ3NjaGVtYScsIGxhYmVsOid7e18oJ1NjaGVtYScpfX0nLCB0eXBlOiAn dGV4dCcsIG5vZGU6ICdzY2hlbWEnLAorICAgICAgICAgIGNvbnRyb2w6ICdub2RlLWxpc3QtYnkt bmFtZScsIG1vZGU6IFsnY3JlYXRlJywgJ2VkaXQnLCAncHJvcGVydGllcyddLAorICAgICAgICAg IGRpc2FibGVkOiAnaW5TY2hlbWEnLCBmaWx0ZXI6IGZ1bmN0aW9uKGQpIHsKKyAgICAgICAgICAg IC8vIElmIHNjaGVtYSBuYW1lIHN0YXJ0IHdpdGggcGdfKiB0aGVuIHdlIG5lZWQgdG8gZXhjbHVk ZSB0aGVtCisgICAgICAgICAgICBpZihkICYmIGQubGFiZWwubWF0Y2goL15wZ18vKSkKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgfSwgY2FjaGVfbm9kZTogJ2RhdGFiYXNl JywgY2FjaGVfbGV2ZWw6ICdkYXRhYmFzZScKKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdz cGNuYW1lJywgbGFiZWw6Z2V0dGV4dCgnVGFibGVzcGFjZScpLCBub2RlOiAndGFibGVzcGFjZScs CisgICAgICAgICAgdHlwZTogJ3RleHQnLCBjb250cm9sOiAnbm9kZS1saXN0LWJ5LW5hbWUnLCBk aXNhYmxlZDogJ2luU2NoZW1hJywKKyAgICAgICAgICBtb2RlOiBbJ3Byb3BlcnRpZXMnLCAnY3Jl YXRlJywgJ2VkaXQnXSwKKyAgICAgICAgICBmaWx0ZXI6IGZ1bmN0aW9uKGQpIHsKKyAgICAgICAg ICAgIC8vIElmIHRhYmxlc3BhY2UgbmFtZSBpcyBub3QgInBnX2dsb2JhbCIgdGhlbiB3ZSBuZWVk IHRvIGV4Y2x1ZGUgdGhlbQorICAgICAgICAgICAgcmV0dXJuICghKGQgJiYgZC5sYWJlbC5tYXRj aCgvcGdfZ2xvYmFsLykpKQorICAgICAgICAgIH0KKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6 ICdkZXNjcmlwdGlvbicsIGxhYmVsOmdldHRleHQoJ0NvbW1lbnQnKSwgdHlwZTogJ211bHRpbGlu ZScsCisgICAgICAgICAgbW9kZTogWydwcm9wZXJ0aWVzJywgJ2NyZWF0ZScsICdlZGl0J10sIGRp c2FibGVkOiAnaW5TY2hlbWEnCisgICAgICAgIH0sIHsKKyAgICAgICAgICBpZDogJ3BhcnRpdGlv bl92YWx1ZScsIGxhYmVsOmdldHRleHQoJ1BhcnRpdGlvbiBTY2hlbWUnKSwKKyAgICAgICAgICB0 eXBlOiAndGV4dCcsIHZpc2libGU6IGZhbHNlCisgICAgICAgIH0seworICAgICAgICAgIGlkOiAn Y29sbF9pbmhlcml0cycsIGxhYmVsOiBnZXR0ZXh0KCdJbmhlcml0ZWQgZnJvbSB0YWJsZShzKScp LAorICAgICAgICAgIHR5cGU6ICd0ZXh0JywgZ3JvdXA6IGdldHRleHQoJ0FkdmFuY2VkJyksIG1v ZGU6IFsncHJvcGVydGllcyddCisgICAgICAgIH0seworICAgICAgICAgIGlkOiAnaW5oZXJpdGVk X3RhYmxlc19jbnQnLCBsYWJlbDpnZXR0ZXh0KCdJbmhlcml0ZWQgdGFibGVzIGNvdW50JyksCisg ICAgICAgICAgdHlwZTogJ3RleHQnLCBtb2RlOiBbJ3Byb3BlcnRpZXMnXSwgZ3JvdXA6IGdldHRl eHQoJ0FkdmFuY2VkJyksCisgICAgICAgICAgZGlzYWJsZWQ6ICdpblNjaGVtYScKKyAgICAgICAg fSwvKnsKKyAgICAgICAgICAvLyBIZXJlIHdlIHdpbGwgY3JlYXRlIHRhYiBjb250cm9sIGZvciBj b25zdHJhaW50cworICAgICAgICAgIHR5cGU6ICduZXN0ZWQnLCBjb250cm9sOiAndGFiJywgZ3Jv dXA6IGdldHRleHQoJ0NvbnN0cmFpbnRzJyksCisgICAgICAgICAgbW9kZTogWydlZGl0JywgJ2Ny ZWF0ZSddLAorICAgICAgICAgIHNjaGVtYTogW3sKKyAgICAgICAgICAgICAgaWQ6ICdwcmltYXJ5 X2tleScsIGxhYmVsOiBnZXR0ZXh0KCdQcmltYXJ5IGtleScpLAorICAgICAgICAgICAgICBtb2Rl bDogcGdCcm93c2VyLk5vZGVzWydwcmltYXJ5X2tleSddLm1vZGVsLAorICAgICAgICAgICAgICBz dWJub2RlOiBwZ0Jyb3dzZXIuTm9kZXNbJ3ByaW1hcnlfa2V5J10ubW9kZWwsCisgICAgICAgICAg ICAgIGVkaXRhYmxlOiBmYWxzZSwgdHlwZTogJ2NvbGxlY3Rpb24nLAorICAgICAgICAgICAgICBn cm91cDogZ2V0dGV4dCgnUHJpbWFyeSBLZXknKSwgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLAor ICAgICAgICAgICAgICBjYW5FZGl0OiB0cnVlLCBjYW5EZWxldGU6IHRydWUsCisgICAgICAgICAg ICAgIGNvbnRyb2w6ICd1bmlxdWUtY29sLWNvbGxlY3Rpb24nLAorICAgICAgICAgICAgICBjb2x1 bW5zIDogWyduYW1lJywgJ2NvbHVtbnMnXSwKKyAgICAgICAgICAgICAgY2FuQWRkOiB0cnVlLAor ICAgICAgICAgICAgICBjYW5BZGRSb3c6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgICAgIC8v IFVzZXIgY2FuIG9ubHkgYWRkIG9uZSBwcmltYXJ5IGtleQorICAgICAgICAgICAgICAgdmFyIGNv bHVtbnMgPSBtLmdldCgnY29sdW1ucycpOworCisgICAgICAgICAgICAgICByZXR1cm4gKG0uZ2V0 KCdwcmltYXJ5X2tleScpICYmCisgICAgICAgICAgICAgICAgICAgICAgICBtLmdldCgncHJpbWFy eV9rZXknKS5sZW5ndGggPCAxICYmCisgICAgICAgICAgICAgICAgICAgICAgICBfLnNvbWUoY29s dW1ucy5wbHVjaygnbmFtZScpKSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sewor ICAgICAgICAgICAgICBpZDogJ2ZvcmVpZ25fa2V5JywgbGFiZWw6IGdldHRleHQoJ0ZvcmVpZ24g a2V5JyksCisgICAgICAgICAgICAgIG1vZGVsOiBwZ0Jyb3dzZXIuTm9kZXNbJ2ZvcmVpZ25fa2V5 J10ubW9kZWwsCisgICAgICAgICAgICAgIHN1Ym5vZGU6IHBnQnJvd3Nlci5Ob2Rlc1snZm9yZWln bl9rZXknXS5tb2RlbCwKKyAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLCB0eXBlOiAnY29s bGVjdGlvbicsCisgICAgICAgICAgICAgIGdyb3VwOiBnZXR0ZXh0KCdGb3JlaWduIEtleScpLCBt b2RlOiBbJ2VkaXQnLCAnY3JlYXRlJ10sCisgICAgICAgICAgICAgIGNhbkVkaXQ6IHRydWUsIGNh bkRlbGV0ZTogdHJ1ZSwKKyAgICAgICAgICAgICAgY29udHJvbDogJ3VuaXF1ZS1jb2wtY29sbGVj dGlvbicsCisgICAgICAgICAgICAgIGNhbkFkZDogdHJ1ZSwKKyAgICAgICAgICAgICAgY29sdW1u cyA6IFsnbmFtZScsICdjb2x1bW5zJ10sCisgICAgICAgICAgICAgIGNhbkFkZFJvdzogZnVuY3Rp b24obSkgeworICAgICAgICAgICAgICAgLy8gVXNlciBjYW4gb25seSBhZGQgaWYgdGhlcmUgaXMg YXQgbGVhc3Qgb25lIGNvbHVtbiB3aXRoIG5hbWUuCisgICAgICAgICAgICAgICB2YXIgY29sdW1u cyA9IG0uZ2V0KCdjb2x1bW5zJyk7CisgICAgICAgICAgICAgICByZXR1cm4gXy5zb21lKGNvbHVt bnMucGx1Y2soJ25hbWUnKSk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0seworICAg ICAgICAgICAgICBpZDogJ2NoZWNrX2NvbnN0cmFpbnQnLCBsYWJlbDogZ2V0dGV4dCgnQ2hlY2sg Y29uc3RyYWludCcpLAorICAgICAgICAgICAgICBtb2RlbDogcGdCcm93c2VyLk5vZGVzWydjaGVj a19jb25zdHJhaW50cyddLm1vZGVsLAorICAgICAgICAgICAgICBzdWJub2RlOiBwZ0Jyb3dzZXIu Tm9kZXNbJ2NoZWNrX2NvbnN0cmFpbnRzJ10ubW9kZWwsCisgICAgICAgICAgICAgIGVkaXRhYmxl OiBmYWxzZSwgdHlwZTogJ2NvbGxlY3Rpb24nLAorICAgICAgICAgICAgICBncm91cDogZ2V0dGV4 dCgnQ2hlY2snKSwgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLAorICAgICAgICAgICAgICBjYW5F ZGl0OiB0cnVlLCBjYW5EZWxldGU6IHRydWUsCisgICAgICAgICAgICAgIGNvbnRyb2w6ICd1bmlx dWUtY29sLWNvbGxlY3Rpb24nLAorICAgICAgICAgICAgICBjYW5BZGQ6IHRydWUsCisgICAgICAg ICAgICAgIGNvbHVtbnMgOiBbJ25hbWUnLCAnY29uc3JjJ10KKyAgICAgICAgICAgIH0seworICAg ICAgICAgICAgICBpZDogJ3VuaXF1ZV9jb25zdHJhaW50JywgbGFiZWw6IGdldHRleHQoJ1VuaXF1 ZSBDb25zdHJhaW50JyksCisgICAgICAgICAgICAgIG1vZGVsOiBwZ0Jyb3dzZXIuTm9kZXNbJ3Vu aXF1ZV9jb25zdHJhaW50J10ubW9kZWwsCisgICAgICAgICAgICAgIHN1Ym5vZGU6IHBnQnJvd3Nl ci5Ob2Rlc1sndW5pcXVlX2NvbnN0cmFpbnQnXS5tb2RlbCwKKyAgICAgICAgICAgICAgZWRpdGFi bGU6IGZhbHNlLCB0eXBlOiAnY29sbGVjdGlvbicsCisgICAgICAgICAgICAgIGdyb3VwOiBnZXR0 ZXh0KCdVbmlxdWUnKSwgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSddLAorICAgICAgICAgICAgICBj YW5FZGl0OiB0cnVlLCBjYW5EZWxldGU6IHRydWUsCisgICAgICAgICAgICAgIGNvbnRyb2w6ICd1 bmlxdWUtY29sLWNvbGxlY3Rpb24nLAorICAgICAgICAgICAgICBjb2x1bW5zIDogWyduYW1lJywg J2NvbHVtbnMnXSwKKyAgICAgICAgICAgICAgY2FuQWRkOiB0cnVlLAorICAgICAgICAgICAgICBj YW5BZGRSb3c6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgICAgIC8vIFVzZXIgY2FuIG9ubHkg YWRkIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjb2x1bW4gd2l0aCBuYW1lLgorICAgICAgICAg ICAgICAgdmFyIGNvbHVtbnMgPSBtLmdldCgnY29sdW1ucycpOworICAgICAgICAgICAgICAgcmV0 dXJuIF8uc29tZShjb2x1bW5zLnBsdWNrKCduYW1lJykpOworICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9LHsKKyAgICAgICAgICAgICAgaWQ6ICdleGNsdWRlX2NvbnN0cmFpbnQnLCBsYWJl bDogZ2V0dGV4dCgnRXhjbHVkZSBjb25zdHJhaW50JyksCisgICAgICAgICAgICAgIG1vZGVsOiBw Z0Jyb3dzZXIuTm9kZXNbJ2V4Y2x1c2lvbl9jb25zdHJhaW50J10ubW9kZWwsCisgICAgICAgICAg ICAgIHN1Ym5vZGU6IHBnQnJvd3Nlci5Ob2Rlc1snZXhjbHVzaW9uX2NvbnN0cmFpbnQnXS5tb2Rl bCwKKyAgICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLCB0eXBlOiAnY29sbGVjdGlvbicsCisg ICAgICAgICAgICAgIGdyb3VwOiBnZXR0ZXh0KCdFeGNsdWRlJyksIG1vZGU6IFsnZWRpdCcsICdj cmVhdGUnXSwKKyAgICAgICAgICAgICAgY2FuRWRpdDogdHJ1ZSwgY2FuRGVsZXRlOiB0cnVlLAor ICAgICAgICAgICAgICBjb250cm9sOiAndW5pcXVlLWNvbC1jb2xsZWN0aW9uJywKKyAgICAgICAg ICAgICAgY29sdW1ucyA6IFsnbmFtZScsICdjb2x1bW5zJywgJ2NvbnN0cmFpbnQnXSwKKyAgICAg ICAgICAgICAgY2FuQWRkOiB0cnVlLAorICAgICAgICAgICAgICBjYW5BZGRSb3c6IGZ1bmN0aW9u KG0pIHsKKyAgICAgICAgICAgICAgIC8vIFVzZXIgY2FuIG9ubHkgYWRkIGlmIHRoZXJlIGlzIGF0 IGxlYXN0IG9uZSBjb2x1bW4gd2l0aCBuYW1lLgorICAgICAgICAgICAgICAgdmFyIGNvbHVtbnMg PSBtLmdldCgnY29sdW1ucycpOworICAgICAgICAgICAgICAgcmV0dXJuIF8uc29tZShjb2x1bW5z LnBsdWNrKCduYW1lJykpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgfV0KKyAgICAgICAg fSwqL3sKKyAgICAgICAgICBpZDogJ3JlbGhhc29pZHMnLCBsYWJlbDpnZXR0ZXh0KCdIYXMgT0lE cz8nKSwgY2VsbDogJ3N3aXRjaCcsCisgICAgICAgICAgdHlwZTogJ3N3aXRjaCcsIG1vZGU6IFsn cHJvcGVydGllcycsICdjcmVhdGUnLCAnZWRpdCddLAorICAgICAgICAgIGRpc2FibGVkOiAnaW5T Y2hlbWEnLCBncm91cDogZ2V0dGV4dCgnQWR2YW5jZWQnKQorICAgICAgICB9LHsKKyAgICAgICAg ICBpZDogJ3JlbHBlcnNpc3RlbmNlJywgbGFiZWw6Z2V0dGV4dCgnVW5sb2dnZWQ/JyksIGNlbGw6 ICdzd2l0Y2gnLAorICAgICAgICAgIHR5cGU6ICdzd2l0Y2gnLCBtb2RlOiBbJ3Byb3BlcnRpZXMn LCAnY3JlYXRlJywgJ2VkaXQnXSwKKyAgICAgICAgICBkaXNhYmxlZDogJ2luU2NoZW1hV2l0aE1v ZGVsQ2hlY2snLAorICAgICAgICAgIGdyb3VwOiBnZXR0ZXh0KCdBZHZhbmNlZCcpCisgICAgICAg IH0seworICAgICAgICAgIGlkOiAnY29ubmFtZScsIGxhYmVsOmdldHRleHQoJ1ByaW1hcnkga2V5 JyksIGNlbGw6ICdzdHJpbmcnLAorICAgICAgICAgIHR5cGU6ICd0ZXh0JywgbW9kZTogWydwcm9w ZXJ0aWVzJ10sIGdyb3VwOiBnZXR0ZXh0KCdBZHZhbmNlZCcpLAorICAgICAgICAgIGRpc2FibGVk OiAnaW5TY2hlbWEnCisgICAgICAgIH0seworICAgICAgICAgIGlkOiAncmVsdHVwbGVzJywgbGFi ZWw6Z2V0dGV4dCgnUm93cyAoZXN0aW1hdGVkKScpLCBjZWxsOiAnc3RyaW5nJywKKyAgICAgICAg ICB0eXBlOiAndGV4dCcsIG1vZGU6IFsncHJvcGVydGllcyddLCBncm91cDogZ2V0dGV4dCgnQWR2 YW5jZWQnKSwKKyAgICAgICAgICBkaXNhYmxlZDogJ2luU2NoZW1hJworICAgICAgICB9LHsKKyAg ICAgICAgICBpZDogJ3Jvd3NfY250JywgbGFiZWw6Z2V0dGV4dCgnUm93cyAoY291bnRlZCknKSwg Y2VsbDogJ3N0cmluZycsCisgICAgICAgICAgdHlwZTogJ3RleHQnLCBtb2RlOiBbJ3Byb3BlcnRp ZXMnXSwgZ3JvdXA6IGdldHRleHQoJ0FkdmFuY2VkJyksCisgICAgICAgICAgZGlzYWJsZWQ6ICdp blNjaGVtYScKKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdyZWxoYXNzdWJjbGFzcycsIGxh YmVsOmdldHRleHQoJ0luaGVyaXRzIHRhYmxlcz8nKSwgY2VsbDogJ3N3aXRjaCcsCisgICAgICAg ICAgdHlwZTogJ3N3aXRjaCcsIG1vZGU6IFsncHJvcGVydGllcyddLCBncm91cDogZ2V0dGV4dCgn QWR2YW5jZWQnKSwKKyAgICAgICAgICBkaXNhYmxlZDogJ2luU2NoZW1hJworICAgICAgICB9LHsK KyAgICAgICAgICBpZDogJ2lzX3N5c190YWJsZScsIGxhYmVsOmdldHRleHQoJ1N5c3RlbSB0YWJs ZT8nKSwgY2VsbDogJ3N3aXRjaCcsCisgICAgICAgICAgdHlwZTogJ3N3aXRjaCcsIG1vZGU6IFsn cHJvcGVydGllcyddLAorICAgICAgICAgIGRpc2FibGVkOiAnaW5TY2hlbWEnCisgICAgICAgIH1d LAorICAgICAgICB2YWxpZGF0ZTogZnVuY3Rpb24oa2V5cykgeworICAgICAgICAgIHZhciBlcnIg PSB7fSwKKyAgICAgICAgICAgICAgY2hhbmdlZEF0dHJzID0gdGhpcy5jaGFuZ2VkLAorICAgICAg ICAgICAgICBtc2cgPSB1bmRlZmluZWQsCisgICAgICAgICAgICAgIG5hbWUgPSB0aGlzLmdldCgn bmFtZScpLAorICAgICAgICAgICAgICBzY2hlbWEgPSB0aGlzLmdldCgnc2NoZW1hJyksCisgICAg ICAgICAgICAgIHJlbG93bmVyID0gdGhpcy5nZXQoJ3JlbG93bmVyJyk7CisKKyAgICAgICAgICAv LyBJZiBub3RoaW5nIHRvIHZhbGlkYXRlIG9yIFZhY3V1bVNldHRpbmcga2V5cyB0aGVuCisgICAg ICAgICAgLy8gcmV0dXJuIGZyb20gaGVyZQorICAgICAgICAgIGlmICgga2V5cyAmJiAoa2V5cy5s ZW5ndGggPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgfHwgXy5pbmRleE9mKGtleXMsICdh dXRvdmFjdXVtX2VuYWJsZWQnKSAhPSAtMQorICAgICAgICAgICAgICAgICAgICAgICAgfHwgXy5p bmRleE9mKGtleXMsICd0b2FzdF9hdXRvdmFjdXVtX2VuYWJsZWQnKSAhPSAtMSkgKSB7CisgICAg ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvLyBIYXZlIHRv IGNsZWFyIGV4aXN0aW5nIHZhbGlkYXRpb24gYmVmb3JlIGluaXRpYXRpbmcgY3VycmVudCBzdGF0 ZSB2YWxpZGF0aW9uIG9ubHkKKyAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuY2xlYXIoKTsKKwor ICAgICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKG5hbWUpIHx8IF8uaXNOdWxsKG5hbWUpIHx8Cisg ICAgICAgICAgICBTdHJpbmcobmFtZSkucmVwbGFjZSgvXlxzK3xccyskL2csICcnKSA9PSAnJykg eworICAgICAgICAgICAgbXNnID0gZ2V0dGV4dCgnVGFibGUgbmFtZSBjYW5ub3QgYmUgZW1wdHku Jyk7CisgICAgICAgICAgICB0aGlzLmVycm9yTW9kZWwuc2V0KCduYW1lJywgbXNnKTsKKyAgICAg ICAgICAgIHJldHVybiBtc2c7CisgICAgICAgICAgfSBlbHNlIGlmIChfLmlzVW5kZWZpbmVkKHNj aGVtYSkgfHwgXy5pc051bGwoc2NoZW1hKSB8fAorICAgICAgICAgICAgU3RyaW5nKHNjaGVtYSku cmVwbGFjZSgvXlxzK3xccyskL2csICcnKSA9PSAnJykgeworICAgICAgICAgICAgbXNnID0gZ2V0 dGV4dCgnVGFibGUgc2NoZW1hIGNhbm5vdCBiZSBlbXB0eS4nKTsKKyAgICAgICAgICAgIHRoaXMu ZXJyb3JNb2RlbC5zZXQoJ3NjaGVtYScsIG1zZyk7CisgICAgICAgICAgICByZXR1cm4gbXNnOwor ICAgICAgICAgIH0gZWxzZSBpZiAoXy5pc1VuZGVmaW5lZChyZWxvd25lcikgfHwgXy5pc051bGwo cmVsb3duZXIpIHx8CisgICAgICAgICAgICBTdHJpbmcocmVsb3duZXIpLnJlcGxhY2UoL15ccyt8 XHMrJC9nLCAnJykgPT0gJycpIHsKKyAgICAgICAgICAgIG1zZyA9IGdldHRleHQoJ1RhYmxlIG93 bmVyIGNhbm5vdCBiZSBlbXB0eS4nKTsKKyAgICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC5zZXQo J3JlbG93bmVyJywgbXNnKTsKKyAgICAgICAgICAgIHJldHVybiBtc2c7CisgICAgICAgICAgfQor ICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9LAorICAgICAgICAvLyBXZSB3aWxsIGRp c2FibGUgZXZlcnl0aGluZyBpZiB3ZSBhcmUgdW5kZXIgY2F0YWxvZyBub2RlCisgICAgICAgIGlu U2NoZW1hOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICBpZih0aGlzLm5vZGVfaW5mbyAmJiAgJ2Nh dGFsb2cnIGluIHRoaXMubm9kZV9pbmZvKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy biB0cnVlOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0s CisgICAgICAgIGlzSW5oZXJpdGVkVGFibGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICBpZigh bS5pblNjaGVtYS5hcHBseSh0aGlzLCBbbV0pKSB7CisgICAgICAgICAgICBpZigKKyAgICAgICAg ICAgICAgKCFfLmlzVW5kZWZpbmVkKG0uZ2V0KCdjb2xsX2luaGVyaXRzJykpICYmIG0uZ2V0KCdj b2xsX2luaGVyaXRzJykubGVuZ3RoICE9IDApCisgICAgICAgICAgICAgICAgfHwKKyAgICAgICAg ICAgICAgICAgICghXy5pc1VuZGVmaW5lZChtLmdldCgndHlwbmFtZScpKSAmJiBTdHJpbmcobS5n ZXQoJ3R5cG5hbWUnKSkucmVwbGFjZSgvXlxzK3xccyskL2csICcnKSAhPT0gJycpCisgICAgICAg ICAgICApIHsKKyAgICAgICAgICAgICAgLy8gRWl0aGVyIG9mX3R5cGVzIG9yIGNvbGxfaW5oZXJp dHMgaGFzIHZhbHVlCisgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAg ICAgIH0KKyAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0sCisgICAgICAgIC8vIE9m dHlwZSBpcyBkZWZpbmVkPworICAgICAgICBjaGVja0luaGVyaXRhbmNlOiBmdW5jdGlvbihtKSB7 CisgICAgICAgICAvLyBjb2xsX2luaGVyaXRzIHx8IHR5cG5hbWUKKyAgICAgICAgICBpZighbS5p blNjaGVtYS5hcHBseSh0aGlzLCBbbV0pICYmCisgICAgICAgICAgICAgICggXy5pc1VuZGVmaW5l ZChtLmdldCgndHlwbmFtZScpKSB8fAorICAgICAgICAgICAgICAgIF8uaXNOdWxsKG0uZ2V0KCd0 eXBuYW1lJykpIHx8CisgICAgICAgICAgICAgICAgU3RyaW5nKG0uZ2V0KCd0eXBuYW1lJykpLnJl cGxhY2UoL15ccyt8XHMrJC9nLCAnJykgPT0gJycpKSB7CisgICAgICAgICAgICByZXR1cm4gZmFs c2U7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9LAorICAg ICAgICAvLyBXZSB3aWxsIGRpc2FibGUgTGlrZSBpZiBvZlR5cGUgaXMgZGVmaW5lZAorICAgICAg ICBpc0xpa2VEaXNhYmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgaWYoIW0uaW5TY2hlbWFX aXRoTW9kZWxDaGVjay5hcHBseSh0aGlzLCBbbV0pICYmCisgICAgICAgICAgICAgICggXy5pc1Vu ZGVmaW5lZChtLmdldCgndHlwbmFtZScpKSB8fAorICAgICAgICAgICAgICAgIF8uaXNOdWxsKG0u Z2V0KCd0eXBuYW1lJykpIHx8CisgICAgICAgICAgICAgICAgU3RyaW5nKG0uZ2V0KCd0eXBuYW1l JykpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAnJykgPT0gJycpKSB7CisgICAgICAgICAgICByZXR1 cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9 LAorICAgICAgICAvLyBDaGVjayBmb3IgY29sdW1uIGdyaWQgd2hlbiB0byBBZGQKKyAgICAgICAg Y2hlY2tfZ3JpZF9hZGRfY29uZGl0aW9uOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgdmFyIGVu YWJsZV9mbGFnID0gdHJ1ZTsKKyAgICAgICAgICBpZighbS5pblNjaGVtYS5hcHBseSh0aGlzLCBb bV0pKSB7CisgICAgICAgICAgICAvLyBpZiBvZl90eXBlIHRoZW4gZGlzYWJsZSBhZGQgaW4gZ3Jp ZAorICAgICAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKG0uZ2V0KCd0eXBuYW1lJykpICYmCisg ICAgICAgICAgICAgICAgIV8uaXNOdWxsKG0uZ2V0KCd0eXBuYW1lJykpICYmCisgICAgICAgICAg ICAgICAgbS5nZXQoJ3R5cG5hbWUnKSAhPT0gJycpIHsKKyAgICAgICAgICAgICAgICAgICAgZW5h YmxlX2ZsYWcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAg ICAgIHJldHVybiBlbmFibGVfZmxhZzsKKyAgICAgICAgfSwKKyAgICAgICAgLy8gQ2hlY2sgZm9y IGNvbHVtbiBncmlkIHdoZW4gdG8gZWRpdC9kZWxldGUgKGZvciBlYWNoIHJvdykKKyAgICAgICAg Y2hlY2tfZ3JpZF9yb3dfZWRpdF9kZWxldGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICB2YXIg ZmxhZyA9IHRydWU7CisgICAgICAgICAgaWYoIV8uaXNVbmRlZmluZWQobS5nZXQoJ2luaGVyaXRl ZGZyb20nKSkgJiYKKyAgICAgICAgICAgICAgICFfLmlzTnVsbChtLmdldCgnaW5oZXJpdGVkZnJv bScpKSAmJgorICAgICAgICAgICAgICAgU3RyaW5nKG0uZ2V0KCdpbmhlcml0ZWRmcm9tJykpLnJl cGxhY2UoL15ccyt8XHMrJC9nLCAnJykgIT09ICcnKSB7CisgICAgICAgICAgICBmbGFnID0gZmFs c2U7CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiBmbGFnOworICAgICAgICB9LAorICAg ICAgICAvLyBXZSB3aWxsIGRpc2FibGUgaXQgaWYgSW5oZXJpdGFuY2UgaXMgZGVmaW5lZAorICAg ICAgICBjaGVja09mVHlwZTogZnVuY3Rpb24obSkgeworICAgICAgICAvL2NvbGxfaW5oZXJpdHMg fHwgdHlwbmFtZQorICAgICAgICAgIGlmKCFtLmluU2NoZW1hV2l0aE1vZGVsQ2hlY2suYXBwbHko dGhpcywgW21dKSAmJgorICAgICAgICAgICAgICAoXy5pc1VuZGVmaW5lZChtLmdldCgnY29sbF9p bmhlcml0cycpKSB8fAorICAgICAgICAgICAgICAgXy5pc051bGwobS5nZXQoJ2NvbGxfaW5oZXJp dHMnKSkgfHwKKyAgICAgICAgICAgICAgIFN0cmluZyhtLmdldCgnY29sbF9pbmhlcml0cycpKS5y ZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpID09ICcnKSkgeworICAgICAgICAgICAgcmV0dXJuIGZh bHNlOworICAgICAgICAgIH0KKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwKKyAg ICAgICAgLy8gV2Ugd2lsbCBjaGVjayBpZiB3ZSBhcmUgdW5kZXIgc2NoZW1hIG5vZGUgJiBpbiAn Y3JlYXRlJyBtb2RlCisgICAgICAgIGluU2NoZW1hV2l0aE1vZGVsQ2hlY2s6IGZ1bmN0aW9uKG0p IHsKKyAgICAgICAgICBpZih0aGlzLm5vZGVfaW5mbyAmJiAgJ3NjaGVtYScgaW4gdGhpcy5ub2Rl X2luZm8pCisgICAgICAgICAgeworICAgICAgICAgICAgLy8gV2Ugd2lsbCBkaXNiYWxlIGNvbnRy b2wgaWYgaXQncyBpbiAnZWRpdCcgbW9kZQorICAgICAgICAgICAgaWYgKG0uaXNOZXcoKSkgewor ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAg ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0sCisgICAgICAgIGlzVGFibGVBdXRvVmFjdXVtRW5h YmxlOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhZGRpdGlv bmFsIGNvbmRpdGlvbiB0byB0b2dnbGUgZW5hYmxlL2Rpc2FibGUKKyAgICAgICAgICAvLyBmb3Ig dGFibGUgYXV0by12YWN1dW0KKyAgICAgICAgICBpZighbS5pblNjaGVtYS5hcHBseSh0aGlzLCBb bV0pICYmCisgICAgICAgICAgICAgIG0uZ2V0KCdhdXRvdmFjdXVtX2VuYWJsZWQnKSA9PT0gdHJ1 ZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAgICBy ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgaXNUb2FzdFRhYmxlQXV0b1ZhY3V1bUVu YWJsZTogZnVuY3Rpb24obSkgeworICAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2hlY2sgYWRkaXRp b25hbCBjb25kaXRpb24gdG8gdG9nZ2xlIGVuYWJsZS9kaXNhYmxlCisgICAgICAgICAgLy8gZm9y IHRvYXN0IHRhYmxlIGF1dG8tdmFjdXVtCisgICAgICAgICAgaWYoIW0uaW5TY2hlbWFXaXRoTW9k ZWxDaGVjay5hcHBseSh0aGlzLCBbbV0pICYmCisgICAgICAgICAgICAgIG0uZ2V0KCd0b2FzdF9h dXRvdmFjdXVtX2VuYWJsZWQnKSA9PSB0cnVlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7 CisgICAgICAgICAgfQorICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9LAorICAgICAg ICBmZXRjaF9jb2x1bW5zX2FqYXg6IGZ1bmN0aW9uKGFyZykgeworICAgICAgICAgIHZhciBzZWxm ID0gdGhpcywKKyAgICAgICAgICAgICAgdXJsID0gJ2dldF9jb2x1bW5zJywKKyAgICAgICAgICAg ICAgbSA9IHNlbGYubW9kZWwudG9wIHx8IHNlbGYubW9kZWwsCisgICAgICAgICAgICAgIG9sZF9j b2x1bW5zID0gXy5jbG9uZShtLmdldCgnY29sdW1ucycpKQorICAgICAgICAgICAgICBkYXRhID0g dW5kZWZpbmVkLAorICAgICAgICAgICAgICBub2RlID0gdGhpcy5maWVsZC5nZXQoJ3NjaGVtYV9u b2RlJyksCisgICAgICAgICAgICAgIG5vZGVfaW5mbyA9IHRoaXMuZmllbGQuZ2V0KCdub2RlX2lu Zm8nKSwKKyAgICAgICAgICAgICAgZnVsbF91cmwgPSBub2RlLmdlbmVyYXRlX3VybC5hcHBseSgK KyAgICAgICAgICAgICAgICBub2RlLCBbCisgICAgICAgICAgICAgICAgICBudWxsLCB1cmwsIHRo aXMuZmllbGQuZ2V0KCdub2RlX2RhdGEnKSwKKyAgICAgICAgICAgICAgICAgIHRoaXMuZmllbGQu Z2V0KCd1cmxfd2l0aF9pZCcpIHx8IGZhbHNlLCBub2RlX2luZm8KKyAgICAgICAgICAgICAgICBd CisgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgIGNhY2hlX2xldmVsID0gdGhpcy5maWVs ZC5nZXQoJ2NhY2hlX2xldmVsJykgfHwgbm9kZS50eXBlLAorICAgICAgICAgICAgICBjYWNoZV9u b2RlID0gdGhpcy5maWVsZC5nZXQoJ2NhY2hlX25vZGUnKTsKKworICAgICAgICAgIGNhY2hlX25v ZGUgPSAoY2FjaGVfbm9kZSAmJiBwZ0Jyb3dzZXIuTm9kZXNbJ2NhY2hlX25vZGUnXSkgfHwgbm9k ZTsKKworICAgICAgICAgIG0udHJpZ2dlcigncGdhZG1pbjp2aWV3OmZldGNoaW5nJywgbSwgc2Vs Zi5maWVsZCk7CisgICAgICAgICAgLy8gRmV0Y2hpbmcgQ29sdW1ucyBkYXRhIGZvciB0aGUgc2Vs ZWN0ZWQgdGFibGUuCisgICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgIGFzeW5jOiBmYWxz ZSwKKyAgICAgICAgICAgIHVybDogZnVsbF91cmwsCisgICAgICAgICAgICBkYXRhOiBhcmcsCisg ICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgICAgZGF0YSA9 IGNhY2hlX25vZGUuY2FjaGUodXJsLCBub2RlX2luZm8sIGNhY2hlX2xldmVsLCByZXMuZGF0YSk7 CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKCkgeworICAgICAg ICAgICAgICBtLnRyaWdnZXIoJ3BnYWRtaW46dmlldzpmZXRjaDplcnJvcicsIG0sIHNlbGYuZmll bGQpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAgICAgIG0udHJpZ2dlcign cGdhZG1pbjp2aWV3OmZldGNoZWQnLCBtLCBzZWxmLmZpZWxkKTsKKyAgICAgICAgICBkYXRhID0g KGRhdGEgJiYgZGF0YS5kYXRhKSB8fCBbXTsKKyAgICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAg ICAgfQorICAgICAgfSksCisgICAgICBjYW5DcmVhdGU6IGZ1bmN0aW9uKGl0ZW1EYXRhLCBpdGVt LCBkYXRhKSB7CisgICAgICAgICAgLy9JZiBjaGVjayBpcyBmYWxzZSB0aGVuICwgd2Ugd2lsbCBh bGxvdyBjcmVhdGUgbWVudQorICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEuY2hlY2sgPT0gZmFs c2UpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgIHZhciB0ID0gcGdCcm93 c2VyLnRyZWUsIGkgPSBpdGVtLCBkID0gaXRlbURhdGE7CisgICAgICAgICAgLy8gVG8gaXRlcmF0 ZSBvdmVyIHRyZWUgdG8gY2hlY2sgcGFyZW50IG5vZGUKKyAgICAgICAgICB3aGlsZSAoaSkgewor ICAgICAgICAgICAgLy8gSWYgaXQgaXMgc2NoZW1hIHRoZW4gYWxsb3cgdXNlciB0byBjcmVhdGUg dGFibGUKKyAgICAgICAgICAgIGlmIChfLmluZGV4T2YoWydzY2hlbWEnXSwgZC5fdHlwZSkgPiAt MSkKKyAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIGlmICgnY29sbC10 YWJsZScgPT0gZC5fdHlwZSkgeworICAgICAgICAgICAgICAvL0NoZWNrIGlmIHdlIGFyZSBub3Qg Y2hpbGQgb2YgY2F0YWxvZworICAgICAgICAgICAgICBwcmV2X2kgPSB0Lmhhc1BhcmVudChpKSA/ IHQucGFyZW50KGkpIDogbnVsbDsKKyAgICAgICAgICAgICAgcHJldl9kID0gcHJldl9pID8gdC5p dGVtRGF0YShwcmV2X2kpIDogbnVsbDsKKyAgICAgICAgICAgICAgaWYoIHByZXZfZC5fdHlwZSA9 PSAnY2F0YWxvZycpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgPSB0Lmhhc1BhcmVudChpKSA/IHQucGFy ZW50KGkpIDogbnVsbDsKKyAgICAgICAgICAgIGQgPSBpID8gdC5pdGVtRGF0YShpKSA6IG51bGw7 CisgICAgICAgICAgfQorICAgICAgICAgIC8vIGJ5IGRlZmF1bHQgd2UgZG8gbm90IHdhbnQgdG8g YWxsb3cgY3JlYXRlIG1lbnUKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgIH0sCisgICAg ICAvLyBDaGVjayB0byB3aGV0aGVyIHRhYmxlIGhhcyBkaXNhYmxlIHRyaWdnZXIocykKKyAgICAg IGNhbkNyZWF0ZV93aXRoX3RyaWdnZXJfZW5hYmxlOiBmdW5jdGlvbihpdGVtRGF0YSwgaXRlbSwg ZGF0YSkgeworICAgICAgICBpZih0aGlzLmNhbkNyZWF0ZS5hcHBseSh0aGlzLCBbaXRlbURhdGEs IGl0ZW0sIGRhdGFdKSkgeworICAgICAgICAgIC8vIFdlIGFyZSBoZXJlIG1lYW5zIHdlIGNhbiBj cmVhdGUgbWVudSwgbm93IGxldCdzIGNoZWNrIGNvbmRpdGlvbgorICAgICAgICAgIGlmKGl0ZW1E YXRhLnRpZ2dlcl9jb3VudCA+IDApIHsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICB9LAorICAgICAgLy8gQ2hlY2sgdG8gd2hldGhlciB0YWJsZSBoYXMgZW5h YmxlIHRyaWdnZXIocykKKyAgICAgIGNhbkNyZWF0ZV93aXRoX3RyaWdnZXJfZGlzYWJsZTogZnVu Y3Rpb24oaXRlbURhdGEsIGl0ZW0sIGRhdGEpIHsKKyAgICAgICAgaWYodGhpcy5jYW5DcmVhdGUu YXBwbHkodGhpcywgW2l0ZW1EYXRhLCBpdGVtLCBkYXRhXSkpIHsKKyAgICAgICAgICAvLyBXZSBh cmUgaGVyZSBtZWFucyB3ZSBjYW4gY3JlYXRlIG1lbnUsIG5vdyBsZXQncyBjaGVjayBjb25kaXRp b24KKyAgICAgICAgICBpZihpdGVtRGF0YS50aWdnZXJfY291bnQgPiAwICYmIGl0ZW1EYXRhLmhh c19lbmFibGVfdHJpZ2dlcnMgPiAwKSB7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgICAgfQorICAgIH0pOworICB9CisKKyAgcmV0dXJuIHBnQnJvd3Nlci5Ob2Rl c1sncGFydGl0aW9uJ107Cit9KTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2Vy dmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvcGFy dGl0aW9uL3NxbC8xMF9wbHVzL2F0dGFjaC5zcWwgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3BhcnRp dGlvbi9zcWwvMTBfcGx1cy9hdHRhY2guc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAuLjA2NjFkOWMKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3Nl cnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3Bh cnRpdGlvbi9zcWwvMTBfcGx1cy9hdHRhY2guc3FsCkBAIC0wLDAgKzEsMiBAQAorQUxURVIgVEFC TEUge3tjb25ufHF0SWRlbnQoZGF0YS5wYXJlbnRfc2NoZW1hLCBkYXRhLnBhcnRpdGlvbmVkX3Rh YmxlX25hbWUpfX0gQVRUQUNIIFBBUlRJVElPTiB7e2Nvbm58cXRJZGVudChkYXRhLnNjaGVtYSwg ZGF0YS5uYW1lKX19CisgICAge3sgZGF0YS5wYXJ0aXRpb25fdmFsdWUgfX07CmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2No ZW1hcy90YWJsZXMvdGVtcGxhdGVzL3BhcnRpdGlvbi9zcWwvMTBfcGx1cy9iYWNrZW5kX3N1cHBv cnQuc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJh c2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMvYmFja2Vu ZF9zdXBwb3J0LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmExZDdl Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0aXRpb24vc3FsLzEw X3BsdXMvYmFja2VuZF9zdXBwb3J0LnNxbApAQCAtMCwwICsxLDkgQEAKK3sjPT09PT09PT09PT09 PUNoZWNrcyBpZiBpdCBpcyBwYXJ0aXRpb25lZCB0YWJsZT09PT09PT09I30KK3slIGlmIHRpZCAl fQorU0VMRUNUCisgICAgQ0FTRSBXSEVOIGMucmVsa2luZCA9ICdwJyBUSEVOIFRydWUgRUxTRSBG YWxzZSBFTkQgQXMgcHRhYmxlCitGUk9NCisgICAgcGdfY2xhc3MgYworV0hFUkUKKyAgICBjLm9p ZCA9IHt7IHRpZCB9fTo6b2lkCit7JSBlbmRpZiAlfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rl bXBsYXRlcy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMvY3JlYXRlLnNxbCBiL3dlYi9wZ2FkbWluL2Jy b3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1w bGF0ZXMvcGFydGl0aW9uL3NxbC8xMF9wbHVzL2NyZWF0ZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uZTFmOTYwNwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90 ZW1wbGF0ZXMvcGFydGl0aW9uL3NxbC8xMF9wbHVzL2NyZWF0ZS5zcWwKQEAgLTAsMCArMSwyNyBA QAoreyUgaW1wb3J0ICd0YWJsZS9zcWwvbWFjcm9zL2NvbnN0cmFpbnRzLm1hY3JvJyBhcyBDT05T VFJBSU5UUyAlfQoreyM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 I30KK3sjPT09PT09IE1BSU4gVEFCTEUgVEVNUExBVEUgU1RBUlRTIEhFUkUgPT09PT09I30KK3sj PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSN9Cit7IyMjIENSRUFU RSBUQUJMRSBTVEFURU1FTlQgRk9SIHBhcnRpdGlvbnMgIyMjfQorQ1JFQVRFIHslIGlmIGRhdGEu cmVscGVyc2lzdGVuY2UgJX1VTkxPR0dFRCB7JSBlbmRpZiAlfVRBQkxFIHt7Y29ubnxxdElkZW50 KGRhdGEuc2NoZW1hLCBkYXRhLm5hbWUpfX17JSBpZiBkYXRhLnJlbGlzcGFydGl0aW9uIGlzIGRl ZmluZWQgYW5kIGRhdGEucmVsaXNwYXJ0aXRpb24gJX0gUEFSVElUSU9OIE9GIHt7Y29ubnxxdElk ZW50KGRhdGEucGFyZW50X3NjaGVtYSwgZGF0YS5wYXJ0aXRpb25lZF90YWJsZV9uYW1lKX19eyUg ZW5kaWYgJX0KKworeyMgTWFjcm8gdG8gcmVuZGVyIGZvciBjb25zdHJhaW50cyAjfQoreyUgaWYg ZGF0YS5wcmltYXJ5X2tleXxsZW5ndGggPiAwIG9yIGRhdGEudW5pcXVlX2NvbnN0cmFpbnR8bGVu Z3RoID4gMCBvciBkYXRhLmZvcmVpZ25fa2V5fGxlbmd0aCA+IDAgb3IgZGF0YS5jaGVja19jb25z dHJhaW50fGxlbmd0aCA+IDAgb3IgZGF0YS5leGNsdWRlX2NvbnN0cmFpbnR8bGVuZ3RoID4gMCAl fQorKCB7JSBlbmRpZiAlfQoreyUgaWYgZGF0YS5wcmltYXJ5X2tleXxsZW5ndGggPiAwICV9e3tD T05TVFJBSU5UUy5QUklNQVJZX0tFWShjb25uLCBkYXRhLnByaW1hcnlfa2V5WzBdKX19eyUgZW5k aWYgJX17JSBpZiBkYXRhLnVuaXF1ZV9jb25zdHJhaW50fGxlbmd0aCA+IDAgJX17JSBpZiBkYXRh LnByaW1hcnlfa2V5fGxlbmd0aCA+IDAgJX0seyUgZW5kaWYgJX0KK3t7Q09OU1RSQUlOVFMuVU5J UVVFKGNvbm4sIGRhdGEudW5pcXVlX2NvbnN0cmFpbnQpfX17JSBlbmRpZiAlfXslIGlmIGRhdGEu Zm9yZWlnbl9rZXl8bGVuZ3RoID4gMCAlfXslIGlmIGRhdGEucHJpbWFyeV9rZXl8bGVuZ3RoID4g MCBvciBkYXRhLnVuaXF1ZV9jb25zdHJhaW50fGxlbmd0aCA+IDAgJX0seyUgZW5kaWYgJX0KK3t7 Q09OU1RSQUlOVFMuRk9SRUlHTl9LRVkoY29ubiwgZGF0YS5mb3JlaWduX2tleSl9fXslIGVuZGlm ICV9eyUgaWYgZGF0YS5jaGVja19jb25zdHJhaW50fGxlbmd0aCA+IDAgJX17JSBpZiBkYXRhLnBy aW1hcnlfa2V5fGxlbmd0aCA+IDAgb3IgZGF0YS51bmlxdWVfY29uc3RyYWludHxsZW5ndGggPiAw IG9yIGRhdGEuZm9yZWlnbl9rZXl8bGVuZ3RoID4gMCAlfSx7JSBlbmRpZiAlfQore3tDT05TVFJB SU5UUy5DSEVDSyhjb25uLCBkYXRhLmNoZWNrX2NvbnN0cmFpbnQpfX17JSBlbmRpZiAlfXslIGlm IGRhdGEuZXhjbHVkZV9jb25zdHJhaW50fGxlbmd0aCA+IDAgJX17JSBpZiBkYXRhLnByaW1hcnlf a2V5fGxlbmd0aCA+IDAgb3IgZGF0YS51bmlxdWVfY29uc3RyYWludHxsZW5ndGggPiAwIG9yIGRh dGEuZm9yZWlnbl9rZXl8bGVuZ3RoID4gMCBvciBkYXRhLmNoZWNrX2NvbnN0cmFpbnR8bGVuZ3Ro ID4gMCAlfSx7JSBlbmRpZiAlfQore3tDT05TVFJBSU5UUy5FWENMVURFKGNvbm4sIGRhdGEuZXhj bHVkZV9jb25zdHJhaW50KX19eyUgZW5kaWYgJX0KK3slIGlmIGRhdGEucHJpbWFyeV9rZXl8bGVu Z3RoID4gMCBvciBkYXRhLnVuaXF1ZV9jb25zdHJhaW50fGxlbmd0aCA+IDAgb3IgZGF0YS5mb3Jl aWduX2tleXxsZW5ndGggPiAwIG9yIGRhdGEuY2hlY2tfY29uc3RyYWludHxsZW5ndGggPiAwIG9y IGRhdGEuZXhjbHVkZV9jb25zdHJhaW50fGxlbmd0aCA+IDAgJX0KKworKQoreyUgZW5kaWYgJX0K KyAgICB7eyBkYXRhLnBhcnRpdGlvbl92YWx1ZSB9fTsKKworeyMjIyBBbHRlciBTUUwgZm9yIE93 bmVyICMjI30KK3slIGlmIGRhdGEucmVsb3duZXIgJX0KKworQUxURVIgVEFCTEUge3tjb25ufHF0 SWRlbnQoZGF0YS5zY2hlbWEsIGRhdGEubmFtZSl9fQorICAgIE9XTkVSIHRvIHt7Y29ubnxxdElk ZW50KGRhdGEucmVsb3duZXIpfX07Cit7JSBlbmRpZiAlfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVz L3RlbXBsYXRlcy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMvZGV0YWNoLnNxbCBiL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90 ZW1wbGF0ZXMvcGFydGl0aW9uL3NxbC8xMF9wbHVzL2RldGFjaC5zcWwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uNGI0MTNkYgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxl cy90ZW1wbGF0ZXMvcGFydGl0aW9uL3NxbC8xMF9wbHVzL2RldGFjaC5zcWwKQEAgLTAsMCArMSBA QAorQUxURVIgVEFCTEUge3tjb25ufHF0SWRlbnQoZGF0YS5wYXJlbnRfc2NoZW1hLCBkYXRhLnBh cnRpdGlvbmVkX3RhYmxlX25hbWUpfX0gREVUQUNIIFBBUlRJVElPTiB7e2Nvbm58cXRJZGVudChk YXRhLnNjaGVtYSwgZGF0YS5uYW1lKX19OwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nl ci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRl cy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMvZ2V0X2F0dGFjaF90YWJsZXMuc3FsIGIvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVz L3RlbXBsYXRlcy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMvZ2V0X2F0dGFjaF90YWJsZXMuc3FsCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NmRjM2YKLS0tIC9kZXYvbnVsbAor KysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv c2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3BhcnRpdGlvbi9zcWwvMTBfcGx1cy9nZXRfYXR0YWNo X3RhYmxlcy5zcWwKQEAgLTAsMCArMSwyMyBAQAorU0VMRUNUIG9pZCwgcXVvdGVfaWRlbnQobnNw bmFtZSl8fCcuJ3x8cXVvdGVfaWRlbnQocmVsbmFtZSkgQVMgdGFibGVfbmFtZSBGUk9NCisoU0VM RUNUCisJci5vaWQsIHIucmVsbmFtZSwgbi5uc3BuYW1lLCBhcnJheV9hZ2coYS5hdHRuYW1lKSBh dHRuYW1lcywgYXJyYXlfYWdnKGEuYXR0dHlwaWQpIGF0dHR5cGVzCitGUk9NCisJKFNFTEVDVCBv aWQsIHJlbG5hbWUsIHJlbG5hbWVzcGFjZSBGUk9NIHBnX2NhdGFsb2cucGdfY2xhc3MKKwkgIFdI RVJFIHJlbGtpbmQgaW4gKCdyJywgJ3AnKSBBTkQgTk9UIHJlbGlzcGFydGl0aW9uKSByCisgICAg Sk9JTiAoU0VMRUNUIG9pZCBBUyBuc3BvaWQsIG5zcG5hbWUgRlJPTQorICAgICAgICAgIHBnX2Nh dGFsb2cucGdfbmFtZXNwYWNlIFdIRVJFIG5zcG5hbWUgTk9UIExJS0UgRSdwZ1xfJScpIG4KKyAg ICAgICAgICBPTiAoci5yZWxuYW1lc3BhY2UgPSBuLm5zcG9pZCkKKyAgICBKT0lOIChTRUxFQ1Qg YXR0cmVsaWQsIGF0dG5hbWUsIGF0dHR5cGlkIEZST00KKyAgICAgICAgICBwZ19jYXRhbG9nLnBn X2F0dHJpYnV0ZSBXSEVSRSBhdHRudW0gPiAwIE9SREVSIEJZIGF0dHJlbGlkLCBhdHRudW0pIGEK KyAgICAgICAgICBPTiAoci5vaWQgPSBhLmF0dHJlbGlkKQorR1JPVVAgQlkgci5vaWQsIHIucmVs bmFtZSwgci5yZWxuYW1lc3BhY2UsIG4ubnNwbmFtZSkgYWxsX3RhYmxlcworSk9JTgorKFNFTEVD VAorCWF0dHJlbGlkLCBhcnJheV9hZ2coYXR0bmFtZSkgYXR0bmFtZXMsIGFycmF5X2FnZyhhdHR0 eXBpZCkgYXR0dHlwZXMKK0ZST00KKwkoU0VMRUNUICogRlJPTSBwZ19jYXRhbG9nLnBnX2F0dHJp YnV0ZQorCSAgV0hFUkUgYXR0cmVsaWQgPSB7eyB0aWQgfX0gQU5EIGF0dG51bSA+IDAKKwkgIE9S REVSIEJZIGF0dHJlbGlkLCBhdHRudW0pIGF0dHJpYnV0ZXMKK0dST1VQIEJZIGF0dHJlbGlkKSBj dXJyZW50X3RhYmxlIE9OIGN1cnJlbnRfdGFibGUuYXR0cmVsaWQgIT0gYWxsX3RhYmxlcy5vaWQK KyAgQU5EIGN1cnJlbnRfdGFibGUuYXR0bmFtZXMgPSBhbGxfdGFibGVzLmF0dG5hbWVzCisgIEFO RCBjdXJyZW50X3RhYmxlLmF0dHR5cGVzID0gYWxsX3RhYmxlcy5hdHR0eXBlcwpcIE5vIG5ld2xp bmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVy X2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvcGFydGl0 aW9uL3NxbC8xMF9wbHVzL25vZGVzLnNxbCBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dy b3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvcGFydGl0aW9u L3NxbC8xMF9wbHVzL25vZGVzLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li44OTY3NDc4Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0aXRp b24vc3FsLzEwX3BsdXMvbm9kZXMuc3FsCkBAIC0wLDAgKzEsMTQgQEAKK1NFTEVDVCByZWwub2lk LCByZWwucmVsbmFtZSBBUyBuYW1lLAorICAgIChTRUxFQ1QgY291bnQoKikgRlJPTSBwZ190cmln Z2VyIFdIRVJFIHRncmVsaWQ9cmVsLm9pZCBBTkQgdGdpc2ludGVybmFsID0gRkFMU0UpIEFTIHRy aWdnZXJjb3VudCwKKyAgICAoU0VMRUNUIGNvdW50KCopIEZST00gcGdfdHJpZ2dlciBXSEVSRSB0 Z3JlbGlkPXJlbC5vaWQgQU5EIHRnaXNpbnRlcm5hbCA9IEZBTFNFIEFORCB0Z2VuYWJsZWQgPSAn TycpIEFTIGhhc19lbmFibGVfdHJpZ2dlcnMsCisgICAgcGdfZ2V0X2V4cHIocmVsLnJlbHBhcnRi b3VuZCwgcmVsLm9pZCkgQVMgcGFydGl0aW9uX3ZhbHVlLAorICAgIHJlbC5yZWxuYW1lc3BhY2Ug QVMgc2NoZW1hX2lkLAorICAgIG5zcC5uc3BuYW1lIEFTIHNjaGVtYV9uYW1lLAorICAgIHJlbC5y ZWxpc3BhcnRpdGlvbiBBUyBpc19wYXJ0aXRpb25lZAorRlJPTQorICAgIChTRUxFQ1QgKiBGUk9N IHBnX2luaGVyaXRzIFdIRVJFIGluaHBhcmVudCA9IHt7IHRpZCB9fTo6b2lkKSBpbmgKKyAgICBM RUZUIEpPSU4gcGdfY2xhc3MgcmVsIE9OIGluaC5pbmhyZWxpZCA9IHJlbC5vaWQKKyAgICBMRUZU IEpPSU4gcGdfbmFtZXNwYWNlIG5zcCBPTiByZWwucmVsbmFtZXNwYWNlID0gbnNwLm9pZAorICAg IFdIRVJFIHJlbC5yZWxpc3BhcnRpdGlvbgorICAgIHslIGlmIHB0aWQgJX0gQU5EIHJlbC5vaWQg PSB7eyBwdGlkIH19OjpPSUQgeyUgZW5kaWYgJX0KKyAgICBPUkRFUiBCWSByZWwucmVsbmFtZTsK ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvcGFydGl0aW9uL3NxbC8xMF9wbHVzL3By b3BlcnRpZXMuc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9wYXJ0aXRpb24vc3FsLzEwX3BsdXMv cHJvcGVydGllcy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU5YWU4 MgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9z ZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvcGFydGl0aW9uL3NxbC8x MF9wbHVzL3Byb3BlcnRpZXMuc3FsCkBAIC0wLDAgKzEsODAgQEAKK1NFTEVDVCByZWwub2lkLCBy ZWwucmVsbmFtZSBBUyBuYW1lLCByZWwucmVsdGFibGVzcGFjZSBBUyBzcGNvaWQscmVsLnJlbGFj bCBBUyByZWxhY2xfc3RyLAorICAoQ0FTRSBXSEVOIGxlbmd0aChzcGMuc3BjbmFtZSkgPiAwIFRI RU4gc3BjLnNwY25hbWUgRUxTRQorICAgIChTRUxFQ1Qgc3Auc3BjbmFtZSBGUk9NIHBnX2RhdGFi YXNlIGR0YgorICAgIEpPSU4gcGdfdGFibGVzcGFjZSBzcCBPTiBkdGIuZGF0dGFibGVzcGFjZT1z cC5vaWQKKyAgICBXSEVSRSBkdGIub2lkID0ge3sgZGlkIH19OjpvaWQpCisgIEVORCkgYXMgc3Bj bmFtZSwKKyAgKHNlbGVjdCBuc3BuYW1lIEZST00gcGdfbmFtZXNwYWNlIFdIRVJFIG9pZCA9IHt7 c2NpZH19OjpvaWQgKSBhcyBwYXJlbnRfc2NoZW1hLAorICBuc3AubnNwbmFtZSBhcyBzY2hlbWEs CisgIHBnX2dldF91c2VyYnlpZChyZWwucmVsb3duZXIpIEFTIHJlbG93bmVyLCByZWwucmVsaGFz b2lkcywgcmVsLnJlbGlzcGFydGl0aW9uLAorICByZWwucmVsaGFzc3ViY2xhc3MsIHJlbC5yZWx0 dXBsZXMsIGRlcy5kZXNjcmlwdGlvbiwgY29uLmNvbm5hbWUsIGNvbi5jb25rZXksCisJRVhJU1RT KHNlbGVjdCAxIEZST00gcGdfdHJpZ2dlcgorCQkJSk9JTiBwZ19wcm9jIHB0IE9OIHB0Lm9pZD10 Z2ZvaWQgQU5EIHB0LnByb25hbWU9J2xvZ3RyaWdnZXInCisJCQlKT0lOIHBnX3Byb2MgcGMgT04g cGMucHJvbmFtZXNwYWNlPXB0LnByb25hbWVzcGFjZSBBTkQgcGMucHJvbmFtZT0nc2xvbnl2ZXJz aW9uJworCQkJV0hFUkUgdGdyZWxpZD1yZWwub2lkKSBBUyBpc3JlcGwsCisJKFNFTEVDVCBjb3Vu dCgqKSBGUk9NIHBnX3RyaWdnZXIgV0hFUkUgdGdyZWxpZD1yZWwub2lkIEFORCB0Z2lzaW50ZXJu YWwgPSBGQUxTRSkgQVMgdHJpZ2dlcmNvdW50LAorCShTRUxFQ1QgQVJSQVkoU0VMRUNUIENBU0Ug V0hFTiAobnNwbmFtZSBOT1QgTElLRSBFJ3BnXF8lJykgVEhFTgorICAgICAgICAgICAgcXVvdGVf aWRlbnQobnNwbmFtZSl8fCcuJ3x8cXVvdGVfaWRlbnQoYy5yZWxuYW1lKQorICAgICAgICAgICAg RUxTRSBxdW90ZV9pZGVudChjLnJlbG5hbWUpIEVORCBBUyBpbmhlcml0ZWRfdGFibGVzCisgICAg RlJPTSBwZ19pbmhlcml0cyBpCisgICAgSk9JTiBwZ19jbGFzcyBjIE9OIGMub2lkID0gaS5pbmhw YXJlbnQKKyAgICBKT0lOIHBnX25hbWVzcGFjZSBuIE9OIG4ub2lkPWMucmVsbmFtZXNwYWNlCisg ICAgV0hFUkUgaS5pbmhyZWxpZCA9IHJlbC5vaWQgT1JERVIgQlkgaW5oc2Vxbm8pKSBBUyBjb2xs X2luaGVyaXRzLAorICAoU0VMRUNUIGNvdW50KCopCisJCUZST00gcGdfaW5oZXJpdHMgaQorICAg ICAgSk9JTiBwZ19jbGFzcyBjIE9OIGMub2lkID0gaS5pbmhwYXJlbnQKKyAgICAgIEpPSU4gcGdf bmFtZXNwYWNlIG4gT04gbi5vaWQ9Yy5yZWxuYW1lc3BhY2UKKwkJV0hFUkUgaS5pbmhyZWxpZCA9 IHJlbC5vaWQpIEFTIGluaGVyaXRlZF90YWJsZXNfY250LAorCShDQVNFIFdIRU4gcmVsLnJlbHBl cnNpc3RlbmNlID0gJ3UnIFRIRU4gdHJ1ZSBFTFNFIGZhbHNlIEVORCkgQVMgcmVscGVyc2lzdGVu Y2UsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhyZWwucmVsb3B0aW9ucywgJywnKSBGUk9N ICdmaWxsZmFjdG9yPShbMC05XSopJykgQVMgZmlsbGZhY3RvciwKKwkoQ0FTRSBXSEVOIChzdWJz dHJpbmcoYXJyYXlfdG9fc3RyaW5nKHJlbC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1 dW1fZW5hYmxlZD0oW2EtenwwLTldKiknKSA9ICd0cnVlJykKKwkgIFRIRU4gdHJ1ZSBFTFNFIGZh bHNlIEVORCkgQVMgYXV0b3ZhY3V1bV9lbmFibGVkLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJp bmcocmVsLnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1fdGhyZXNob2xk PShbMC05XSopJykgQVMgYXV0b3ZhY3V1bV92YWN1dW1fdGhyZXNob2xkLAorCXN1YnN0cmluZyhh cnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1 dW1fc2NhbGVfZmFjdG9yPShbMC05XSpbLl1bMC05XSopJykgQVMgYXV0b3ZhY3V1bV92YWN1dW1f c2NhbGVfZmFjdG9yLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMs ICcsJykgRlJPTSAnYXV0b3ZhY3V1bV9hbmFseXplX3RocmVzaG9sZD0oWzAtOV0qKScpIEFTIGF1 dG92YWN1dW1fYW5hbHl6ZV90aHJlc2hvbGQsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhy ZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2FuYWx5emVfc2NhbGVfZmFjdG9y PShbMC05XSpbLl1bMC05XSopJykgQVMgYXV0b3ZhY3V1bV9hbmFseXplX3NjYWxlX2ZhY3RvciwK KwlzdWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHJlbC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1 dG92YWN1dW1fdmFjdXVtX2Nvc3RfZGVsYXk9KFswLTldKiknKSBBUyBhdXRvdmFjdXVtX3ZhY3V1 bV9jb3N0X2RlbGF5LAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMs ICcsJykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9saW1pdD0oWzAtOV0qKScpIEFTIGF1 dG92YWN1dW1fdmFjdXVtX2Nvc3RfbGltaXQsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhy ZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2ZyZWV6ZV9taW5fYWdlPShbMC05 XSopJykgQVMgYXV0b3ZhY3V1bV9mcmVlemVfbWluX2FnZSwKKwlzdWJzdHJpbmcoYXJyYXlfdG9f c3RyaW5nKHJlbC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fZnJlZXplX21heF9h Z2U9KFswLTldKiknKSBBUyBhdXRvdmFjdXVtX2ZyZWV6ZV9tYXhfYWdlLAorCXN1YnN0cmluZyhh cnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV9mcmVl emVfdGFibGVfYWdlPShbMC05XSopJykgQVMgYXV0b3ZhY3V1bV9mcmVlemVfdGFibGVfYWdlLAor CShDQVNFIFdIRU4gKHN1YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlvbnMsICcs JykgRlJPTSAnYXV0b3ZhY3V1bV9lbmFibGVkPShbYS16fDAtOV0qKScpID0gICd0cnVlJykKKwkg IFRIRU4gdHJ1ZSBFTFNFIGZhbHNlIEVORCkgQVMgdG9hc3RfYXV0b3ZhY3V1bV9lbmFibGVkLAor CXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0 b3ZhY3V1bV92YWN1dW1fdGhyZXNob2xkPShbMC05XSopJykgQVMgdG9hc3RfYXV0b3ZhY3V1bV92 YWN1dW1fdGhyZXNob2xkLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlv bnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1fc2NhbGVfZmFjdG9yPShbMC05XSpbLl1b MC05XSopJykgQVMgdG9hc3RfYXV0b3ZhY3V1bV92YWN1dW1fc2NhbGVfZmFjdG9yLAorCXN1YnN0 cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1 bV9hbmFseXplX3RocmVzaG9sZD0oWzAtOV0qKScpIEFTIHRvYXN0X2F1dG92YWN1dW1fYW5hbHl6 ZV90aHJlc2hvbGQsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3QucmVsb3B0aW9ucywg JywnKSBGUk9NICdhdXRvdmFjdXVtX2FuYWx5emVfc2NhbGVfZmFjdG9yPShbMC05XSpbLl1bMC05 XSopJykgQVMgdG9hc3RfYXV0b3ZhY3V1bV9hbmFseXplX3NjYWxlX2ZhY3RvciwKKwlzdWJzdHJp bmcoYXJyYXlfdG9fc3RyaW5nKHRzdC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1f dmFjdXVtX2Nvc3RfZGVsYXk9KFswLTldKiknKSBBUyB0b2FzdF9hdXRvdmFjdXVtX3ZhY3V1bV9j b3N0X2RlbGF5LAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlvbnMsICcs JykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9saW1pdD0oWzAtOV0qKScpIEFTIHRvYXN0 X2F1dG92YWN1dW1fdmFjdXVtX2Nvc3RfbGltaXQsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmlu Zyh0c3QucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2ZyZWV6ZV9taW5fYWdlPShb MC05XSopJykgQVMgdG9hc3RfYXV0b3ZhY3V1bV9mcmVlemVfbWluX2FnZSwKKwlzdWJzdHJpbmco YXJyYXlfdG9fc3RyaW5nKHRzdC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fZnJl ZXplX21heF9hZ2U9KFswLTldKiknKSBBUyB0b2FzdF9hdXRvdmFjdXVtX2ZyZWV6ZV9tYXhfYWdl LAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlvbnMsICcsJykgRlJPTSAn YXV0b3ZhY3V1bV9mcmVlemVfdGFibGVfYWdlPShbMC05XSopJykgQVMgdG9hc3RfYXV0b3ZhY3V1 bV9mcmVlemVfdGFibGVfYWdlLAorCWFycmF5X3RvX3N0cmluZyhyZWwucmVsb3B0aW9ucywgJywn KSBBUyB0YWJsZV92YWN1dW1fc2V0dGluZ3Nfc3RyLAorCWFycmF5X3RvX3N0cmluZyh0c3QucmVs b3B0aW9ucywgJywnKSBBUyB0b2FzdF90YWJsZV92YWN1dW1fc2V0dGluZ3Nfc3RyLAorCXJlbC5y ZWxvcHRpb25zIEFTIHJlbG9wdGlvbnMsIHRzdC5yZWxvcHRpb25zIEFTIHRvYXN0X3JlbG9wdGlv bnMsIHJlbC5yZWxvZnR5cGUsIHR5cC50eXBuYW1lLAorCShDQVNFIFdIRU4gcmVsLnJlbHRvYXN0 cmVsaWQgPSAwIFRIRU4gZmFsc2UgRUxTRSB0cnVlIEVORCkgQVMgaGFzdG9hc3R0YWJsZSwKKyAg ICAtLSBBZGRlZCBmb3IgcGdBZG1pbjQKKwkoQ0FTRSBXSEVOIChzdWJzdHJpbmcoYXJyYXlfdG9f c3RyaW5nKHJlbC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fZW5hYmxlZD0oW2Et enwwLTldKiknKSk6OmJvb2xlYW4gIFRIRU4gdHJ1ZSBFTFNFIGZhbHNlIEVORCkgQVMgYXV0b3Zh Y3V1bV9jdXN0b20sCisJKENBU0UgV0hFTiAoc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3Qu cmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2VuYWJsZWQ9KFthLXp8MC05XSopJykp Ojpib29sZWFuICBBTkQgcmVsLnJlbHRvYXN0cmVsaWQgIT0gMCBUSEVOIHRydWUgRUxTRSBmYWxz ZSBFTkQpIEFTIHRvYXN0X2F1dG92YWN1dW0sCisKKwkoU0VMRUNUIGFycmF5X2FnZyhwcm92aWRl ciB8fCAnPScgfHwgbGFiZWwpIEZST00gcGdfc2VjbGFiZWxzIHNsMSBXSEVSRSBzbDEub2Jqb2lk PXJlbC5vaWQgQU5EIHNsMS5vYmpzdWJpZD0wKSBBUyBzZWNsYWJlbHMsCisJKENBU0UgV0hFTiBy ZWwub2lkIDw9IHt7IGRhdGxhc3RzeXNvaWR9fTo6b2lkIFRIRU4gdHJ1ZSBFbFNFIGZhbHNlIEVO RCkgQVMgaXNfc3lzX3RhYmxlLAorCS0tIEFkZGVkIGZvciBwYXJ0aXRpb24gdGFibGUKKwl7JSBp ZiBwdGlkICV9CisJICAoQ0FTRSBXSEVOIHJlbC5yZWxpc3BhcnRpdGlvbiBUSEVOIHBnX2dldF9l eHByKHJlbC5yZWxwYXJ0Ym91bmQsIHt7IHB0aWQgfX06Om9pZCkgRUxTRSAnJyBFTkQpIEFTIHBh cnRpdGlvbl92YWx1ZSwKKwkgIChTRUxFQ1QgcmVsbmFtZSBGUk9NIHBnX2NsYXNzIFdIRVJFIG9p ZCA9IHt7IHRpZCB9fTo6b2lkKSBBUyBwYXJ0aXRpb25lZF90YWJsZV9uYW1lCisJeyUgZWxzZSAl fQorCSAgcGdfZ2V0X2V4cHIocmVsLnJlbHBhcnRib3VuZCwgcmVsLm9pZCkgQVMgcGFydGl0aW9u X3ZhbHVlCisJeyUgZW5kaWYgJX0KKworRlJPTSBwZ19jbGFzcyByZWwKKyAgTEVGVCBPVVRFUiBK T0lOIHBnX3RhYmxlc3BhY2Ugc3BjIG9uIHNwYy5vaWQ9cmVsLnJlbHRhYmxlc3BhY2UKKyAgTEVG VCBPVVRFUiBKT0lOIHBnX2Rlc2NyaXB0aW9uIGRlcyBPTiAoZGVzLm9iam9pZD1yZWwub2lkIEFO RCBkZXMub2Jqc3ViaWQ9MCBBTkQgZGVzLmNsYXNzb2lkPSdwZ19jbGFzcyc6OnJlZ2NsYXNzKQor ICBMRUZUIE9VVEVSIEpPSU4gcGdfY29uc3RyYWludCBjb24gT04gY29uLmNvbnJlbGlkPXJlbC5v aWQgQU5EIGNvbi5jb250eXBlPSdwJworICBMRUZUIE9VVEVSIEpPSU4gcGdfY2xhc3MgdHN0IE9O IHRzdC5vaWQgPSByZWwucmVsdG9hc3RyZWxpZAorICBMRUZUIEpPSU4gcGdfdHlwZSB0eXAgT04g cmVsLnJlbG9mdHlwZT10eXAub2lkCisgIExFRlQgSk9JTiBwZ19pbmhlcml0cyBpbmggT04gaW5o LmluaHJlbGlkID0gcmVsLm9pZAorICBMRUZUIEpPSU4gcGdfbmFtZXNwYWNlIG5zcCBPTiByZWwu cmVsbmFtZXNwYWNlID0gbnNwLm9pZAorV0hFUkUgcmVsLnJlbGlzcGFydGl0aW9uIEFORCBpbmgu aW5ocGFyZW50ID0ge3sgdGlkIH19OjpvaWQKK3slIGlmIHB0aWQgJX0gIEFORCByZWwub2lkID0g e3sgcHRpZCB9fTo6b2lkIHslIGVuZGlmICV9CitPUkRFUiBCWSByZWwucmVsbmFtZTsKZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNl cy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvanMvdGFibGUuanMgYi93ZWIvcGdhZG1p bi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMv dGVtcGxhdGVzL3RhYmxlL2pzL3RhYmxlLmpzCmluZGV4IDBiNzAxYTQuLmM3NTE5ODggMTAwNjQ0 Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNl cy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvanMvdGFibGUuanMKKysrIGIvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFi bGVzL3RlbXBsYXRlcy90YWJsZS9qcy90YWJsZS5qcwpAQCAtNSw2ICs1LDMyMyBAQCBkZWZpbmUo J3BnYWRtaW4ubm9kZS50YWJsZScsIFsKICAgJ3BnYWRtaW4ubm9kZS5jb25zdHJhaW50cycKIF0s IGZ1bmN0aW9uKGdldHRleHQsIHVybF9mb3IsICQsIF8sIFMsIHBnQWRtaW4sIHBnQnJvd3Nlciwg YWxlcnRpZnkpIHsKIAorICB2YXIgUGFydGl0aW9uUm93ID0gQmFja2dyaWQuUm93LmV4dGVuZCh7 CisgICAgbW9kZWxEdXBsaWNhdGVDb2xvcjogImxpZ2h0WWVsbG93IiwKKworICAgIG1vZGVsVW5p cXVlQ29sb3I6ICIjZmZmIiwKKworICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uICgpIHsKKyAgICAg IEJhY2tncmlkLlJvdy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMp OworICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgc2VsZi5tb2RlbC5vbigiY2hhbmdlOmlz X2F0dGFjaCIsIGZ1bmN0aW9uKCkgeworICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewor ICAgICAgICAgIHNlbGYuY29sdW1ucy5lYWNoKGZ1bmN0aW9uKGNvbCkgeworICAgICAgICAgICAg aWYgKGNvbC5nZXQoJ25hbWUnKSA9PSAncGFydGl0aW9uX25hbWUnKSB7CisgICAgICAgICAgICAg IHZhciBpZHggPSBzZWxmLmNvbHVtbnMuaW5kZXhPZihjb2wpLAorICAgICAgICAgICAgICAgIGNm ID0gY29sLmdldCgiY2VsbEZ1bmN0aW9uIiksCisgICAgICAgICAgICAgICAgY2VsbCA9IG5ldyAo Y2YuYXBwbHkoY29sLCBbc2VsZi5tb2RlbF0pKSh7CisgICAgICAgICAgICAgICAgICBjb2x1bW46 IGNvbCwKKyAgICAgICAgICAgICAgICAgIG1vZGVsOiBzZWxmLm1vZGVsCisgICAgICAgICAgICAg ICAgfSksCisgICAgICAgICAgICAgICAgICBvbGRDZWxsID0gc2VsZi5jZWxsc1tpZHhdOworICAg ICAgICAgICAgICAgIG9sZENlbGwucmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgc2VsZi5jZWxs c1tpZHhdID0gY2VsbDsKKyAgICAgICAgICAgICAgICBzZWxmLnJlbmRlcigpOworICAgICAgICAg ICAgfQorICAgICAgICAgIH0pOworICAgICAgICB9LCAxMCk7CisgICAgICB9KTsKKyAgICAgIHNl bGYubGlzdGVuVG8oc2VsZi5tb2RlbCwgJ3BnYWRtaW4tc2Vzc2lvbjptb2RlbDpkdXBsaWNhdGUn LCBzZWxmLm1vZGVsRHVwbGljYXRlKTsKKyAgICAgIHNlbGYubGlzdGVuVG8oc2VsZi5tb2RlbCwg J3BnYWRtaW4tc2Vzc2lvbjptb2RlbDp1bmlxdWUnLCBzZWxmLm1vZGVsVW5pcXVlKTsKKyAgICB9 LAorICAgIG1vZGVsRHVwbGljYXRlOiBmdW5jdGlvbigpIHsKKyAgICAgICQodGhpcy5lbCkucmVt b3ZlQ2xhc3MoIm5ldyIpOworICAgICAgdGhpcy5lbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSB0 aGlzLm1vZGVsRHVwbGljYXRlQ29sb3I7CisgICAgfSwKKyAgICBtb2RlbFVuaXF1ZTogZnVuY3Rp b24oKSB7CisgICAgICB0aGlzLmVsLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMubW9kZWxV bmlxdWVDb2xvcjsKKyAgICB9CisgIH0pOworCisgIHZhciBnZXRQYXJ0aXRpb25DZWxsID0gZnVu Y3Rpb24obW9kZWwpIHsKKyAgICB2YXIgaXNfYXR0YWNoID0gbW9kZWwuZ2V0KCJpc19hdHRhY2gi KTsKKyAgICBpZiAoaXNfYXR0YWNoKSB7CisgICAgICB2YXIgb3B0aW9ucyA9IFtdOworICAgICAg bW9kZWwuc2V0KHsncGFydGl0aW9uX25hbWUnOiB1bmRlZmluZWR9LCB7c2lsZW50OnRydWV9KTsK KyAgICAgIF8uZWFjaChtb2RlbC50b3AudGFibGVfb3B0aW9ucywgZnVuY3Rpb24odCkgeworICAg ICAgICBvcHRpb25zLnB1c2goW3QubGFiZWwsIHQudmFsdWVdKTsKKyAgICAgIH0pOworICAgICAg cmV0dXJuIEJhY2tncmlkLkV4dGVuc2lvbi5TZWxlY3QyQ2VsbC5leHRlbmQoe29wdGlvblZhbHVl czogb3B0aW9uc30pOworCisgICAgfSBlbHNlIHsKKyAgICAgIHJldHVybiBCYWNrZ3JpZC5TdHJp bmdDZWxsOworICAgIH0KKyAgfTsKKworICB2YXIgUGFydGl0aW9uS2V5TW9kZWwgPSBwZ0Jyb3dz ZXIuTm9kZS5Nb2RlbC5leHRlbmQoeworICAgICBkZWZhdWx0czogeworICAgICAgIGtleV90eXBl OiAnY29sdW1uJywKKyAgICAgICBwdF9jb2x1bW46IHVuZGVmaW5lZCwKKyAgICAgICBleHByZXNz aW9uOiB1bmRlZmluZWQKKyAgICAgfSwKKyAgICAga2V5czpbJ3B0X2NvbHVtbiddLAorICAgICBz Y2hlbWE6IFt7CisgICAgICAgaWQ6ICdrZXlfdHlwZScsIGxhYmVsOidLZXkgdHlwZScsIHR5cGU6 J3NlbGVjdDInLCBlZGl0YWJsZTogdHJ1ZSwKKyAgICAgICBjZWxsOidzZWxlY3QyJywgY2VsbEhl YWRlckNsYXNzZXM6ICd3aWR0aF9wZXJjZW50XzI1JywKKyAgICAgICBzZWxlY3QyOiB7YWxsb3dD bGVhcjogZmFsc2V9LAorICAgICAgIG9wdGlvbnM6W3sKKyAgICAgICAgIGxhYmVsOiAnQ29sdW1u JywgdmFsdWU6ICdjb2x1bW4nCisgICAgICAgfSx7CisgICAgICAgICBsYWJlbDogJ0V4cHJlc3Np b24nLCB2YWx1ZTogJ2V4cHJlc3Npb24nCisgICAgICAgfV0KKyAgICAgfSx7CisgICAgICAgaWQ6 ICdwdF9jb2x1bW4nLCBsYWJlbDogZ2V0dGV4dCgnQ29sdW1uJyksIHR5cGU6J3RleHQnLAorICAg ICAgIGNlbGw6IEJhY2tncmlkLkV4dGVuc2lvbi5TZWxlY3QyRGVwQ2VsbC5leHRlbmQoeworICAg ICAgICAga2V5UGF0aEFjY2Vzc29yOiBmdW5jdGlvbihvYmosIHBhdGgpIHsKKyAgICAgICAgICAg dmFyIHJlcyA9IG9iajsKKyAgICAgICAgICAgaWYoXy5pc0FycmF5KHJlcykpIHsKKyAgICAgICAg ICAgICByZXR1cm4gXy5tYXAocmVzLCBmdW5jdGlvbihvKSB7IHJldHVybiBvWydwdF9jb2x1bW4n XQorICAgICAgICAgICAgIH0pOworICAgICAgICAgICB9CisgICAgICAgICAgIHBhdGggPSBwYXRo LnNwbGl0KCcuJyk7CisgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7 IGkrKykgeworICAgICAgICAgICAgIGlmIChfLmlzTnVsbChyZXMpKSByZXR1cm4gbnVsbDsKKyAg ICAgICAgICAgICBpZiAoXy5pc0VtcHR5KHBhdGhbaV0pKSBjb250aW51ZTsKKyAgICAgICAgICAg ICBpZiAoIV8uaXNVbmRlZmluZWQocmVzW3BhdGhbaV1dKSkgcmVzID0gcmVzW3BhdGhbaV1dOwor ICAgICAgICAgICB9CisgICAgICAgICAgIHJldHVybiBfLmlzT2JqZWN0KHJlcykgJiYgIV8uaXNB cnJheShyZXMpID8gbnVsbCA6IHJlczsKKyAgICAgICAgIH0sCisgICAgICAgICBpbml0aWFsaXpl OiBmdW5jdGlvbigpIHsKKyAgICAgICAgIC8vIEhlcmUgd2Ugd2lsbCBkZWNpZGUgaWYgd2UgbmVl ZCB0byBjYWxsIFVSTAorICAgICAgICAgLy8gT3IgZmV0Y2ggdGhlIGRhdGEgZnJvbSBwYXJlbnQg Y29sdW1ucyBjb2xsZWN0aW9uCisgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAgICAgICAg ICAgaWYodGhpcy5tb2RlbC5oYW5kbGVyKSB7CisgICAgICAgICAgICAgQmFja2dyaWQuRXh0ZW5z aW9uLlNlbGVjdDJEZXBDZWxsLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3Vt ZW50cyk7CisgICAgICAgICAgICAgLy8gRG8gbm90IGxpc3RlbiBmb3IgYW55IGV2ZW50KHMpIGZv ciBleGlzdGluZyBjb25zdHJhaW50LgorICAgICAgICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKHNl bGYubW9kZWwuZ2V0KCdvaWQnKSkpIHsKKyAgICAgICAgICAgICAgIHZhciB0YWJsZUNvbHMgPSBz ZWxmLm1vZGVsLnRvcC5nZXQoJ2NvbHVtbnMnKTsKKyAgICAgICAgICAgICAgIHNlbGYubGlzdGVu VG8odGFibGVDb2xzLCAncmVtb3ZlJyAsIHNlbGYucmVzZXRDb2xPcHRpb25zKTsKKyAgICAgICAg ICAgICAgIHNlbGYubGlzdGVuVG8odGFibGVDb2xzLCAnY2hhbmdlOm5hbWUnLCBzZWxmLnJlc2V0 Q29sT3B0aW9ucyk7CisgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgc2VsZi5jdXN0b21f b3B0aW9ucygpOworICAgICAgICAgICB9CisgICAgICAgICB9LAorICAgICAgICAgcmVzZXRDb2xP cHRpb25zOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAg ICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICBzZWxmLmN1c3Rv bV9vcHRpb25zKCk7CisgICAgICAgICAgICAgc2VsZi5yZW5kZXIuYXBwbHkoc2VsZik7CisgICAg ICAgICAgIH0sIDUwKTsKKyAgICAgICAgIH0sCisgICAgICAgICBjdXN0b21fb3B0aW9uczogZnVu Y3Rpb24oKSB7CisgICAgICAgICAgIC8vIFdlIHdpbGwgYWRkIGFsbCB0aGUgY29sdW1ucyBlbnRl cmVkIGJ5IHVzZXIgaW4gdGFibGUgbW9kZWwKKyAgICAgICAgICAgdmFyIGNvbHVtbnMgPSB0aGlz Lm1vZGVsLnRvcC5nZXQoJ2NvbHVtbnMnKSwKKyAgICAgICAgICAgICBhZGRlZF9jb2x1bW5zX2Zy b21fdGFibGVzID0gW107CisKKyAgICAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID4gMCkgewor ICAgICAgICAgICAgIF8uZWFjaChjb2x1bW5zLm1vZGVscywgZnVuY3Rpb24obSkgeworICAgICAg ICAgICAgICAgICB2YXIgY29sID0gbS5nZXQoJ25hbWUnKTsKKyAgICAgICAgICAgICAgICAgaWYo IV8uaXNVbmRlZmluZWQoY29sKSAmJiAhXy5pc051bGwoY29sKSkgeworICAgICAgICAgICAgICAg ICAgIGFkZGVkX2NvbHVtbnNfZnJvbV90YWJsZXMucHVzaCgKKyAgICAgICAgICAgICAgICAgICAg IHtsYWJlbDogY29sLCB2YWx1ZTogY29sLCBpbWFnZTonaWNvbi1jb2x1bW4nfQorICAgICAgICAg ICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9KTsKKyAgICAg ICAgICAgfQorICAgICAgICAgICAvLyBTZXQgdGhlIHZhbHVlcyBpbiB0byBvcHRpb25zIHNvIHRo YXQgdXNlciBjYW4gc2VsZWN0CisgICAgICAgICAgIHRoaXMuY29sdW1uLnNldCgnb3B0aW9ucycs IGFkZGVkX2NvbHVtbnNfZnJvbV90YWJsZXMpOworICAgICAgICAgfSwKKyAgICAgICAgIHJlbW92 ZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgIGlmKHRoaXMubW9kZWwuaGFuZGxlcikgeworICAg ICAgICAgICAgIHZhciBzZWxmID0gdGhpcywKKyAgICAgICAgICAgICB0YWJsZUNvbHMgPSBzZWxm Lm1vZGVsLnRvcC5nZXQoJ2NvbHVtbnMnKTsKKyAgICAgICAgICAgICBzZWxmLnN0b3BMaXN0ZW5p bmcodGFibGVDb2xzLCAncmVtb3ZlJyAsIHNlbGYucmVzZXRDb2xPcHRpb25zKTsKKyAgICAgICAg ICAgICBzZWxmLnN0b3BMaXN0ZW5pbmcodGFibGVDb2xzLCAnY2hhbmdlOm5hbWUnICwgc2VsZi5y ZXNldENvbE9wdGlvbnMpOworICAgICAgICAgICAgIEJhY2tncmlkLkV4dGVuc2lvbi5TZWxlY3Qy RGVwQ2VsbC5wcm90b3R5cGUucmVtb3ZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAg ICAgIH0KKyAgICAgICAgIH0KKyAgICAgICB9KSwKKyAgICAgICBkZXBzOiBbJ2tleV90eXBlJ10s CisgICAgICAgY2VsbEhlYWRlckNsYXNzZXM6ICd3aWR0aF9wZXJjZW50XzMwJywKKyAgICAgICB0 cmFuc2Zvcm0gOiBmdW5jdGlvbihkYXRhKXsKKyAgICAgICAgIHZhciByZXMgPSBbXTsKKyAgICAg ICAgIGlmIChkYXRhICYmIF8uaXNBcnJheShkYXRhKSkgeworICAgICAgICAgICBfLmVhY2goZGF0 YSwgZnVuY3Rpb24oZCkgeworICAgICAgICAgICAgIHJlcy5wdXNoKHtsYWJlbDogZC5sYWJlbCwg dmFsdWU6IGQubGFiZWwsIGltYWdlOidpY29uLWNvbHVtbid9KTsKKyAgICAgICAgICAgfSkKKyAg ICAgICAgIH0KKyAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgfSwKKyAgICAgICBzZWxlY3Qy OnthbGxvd0NsZWFyOmZhbHNlfSwKKyAgICAgICBlZGl0YWJsZTogZnVuY3Rpb24obSkgeworICAg ICAgICAgaWYgKG0uZ2V0KCdrZXlfdHlwZScpID09ICdleHByZXNzaW9uJykgeworICAgICAgICAg ICBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgbS5zZXQoJ3B0X2NvbHVt bicsIHVuZGVmaW5lZCk7CisgICAgICAgICAgIH0sIDEwKTsKKyAgICAgICAgICAgcmV0dXJuIGZh bHNlOworICAgICAgICAgfQorICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgfQorICAgICB9 LHsKKyAgICAgICBpZDogJ2V4cHJlc3Npb24nLCBsYWJlbDonRXhwcmVzc2lvbicsIHR5cGU6J3Rl eHQnLAorICAgICAgIGNlbGw6QmFja2dyaWQuRXh0ZW5zaW9uLlN0cmluZ0RlcENlbGwsCisgICAg ICAgY2VsbEhlYWRlckNsYXNzZXM6ICd3aWR0aF9wZXJjZW50XzQ1JywKKyAgICAgICBkZXBzOiBb J2tleV90eXBlJ10sCisgICAgICAgZWRpdGFibGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgIGlm IChtLmdldCgna2V5X3R5cGUnKSA9PSAnY29sdW1uJykgeworICAgICAgICAgICBzZXRUaW1lb3V0 KCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgbS5zZXQoJ2V4cHJlc3Npb24nLCB1bmRlZmlu ZWQpOworICAgICAgICAgICB9LCAxMCk7CisgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg ICAgIH0KKyAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgIH0KKyAgICAgfQorICAgIF0sCisg ICAgdmFsaWRhdGU6IGZ1bmN0aW9uKGtleXMpIHsKKyAgICAgIHZhciBjb2xfdHlwZSA9IHRoaXMu Z2V0KCdrZXlfdHlwZScpLAorICAgICAgICAgcHRfY29sdW1uID0gdGhpcy5nZXQoJ3B0X2NvbHVt bicpLAorICAgICAgICAgZXhwcmVzc2lvbiA9IHRoaXMuZ2V0KCdleHByZXNzaW9uJyk7CisKKyAg ICAgIC8vIEhhdmUgdG8gY2xlYXIgZXhpc3RpbmcgdmFsaWRhdGlvbiBiZWZvcmUgaW5pdGlhdGlu ZyBjdXJyZW50IHN0YXRlCisgICAgICAvLyB2YWxpZGF0aW9uIG9ubHkKKyAgICAgIHRoaXMuZXJy b3JNb2RlbC5jbGVhcigpOworCisgICAgICBpZiAoXy5pc1VuZGVmaW5lZChjb2xfdHlwZSkgfHwg Xy5pc051bGwoY29sX3R5cGUpIHx8CisgICAgICAgIFN0cmluZyhjb2xfdHlwZSkucmVwbGFjZSgv XlxzK3xccyskL2csICcnKSA9PSAnJykgeworICAgICAgICBtc2cgPSBnZXR0ZXh0KCdQYXJ0aXRp b24ga2V5IHR5cGUgY2Fubm90IGJlIGVtcHR5LicpOworICAgICAgICB0aGlzLmVycm9yTW9kZWwu c2V0KCdrZXlfdHlwZScsIG1zZyk7CisgICAgICAgIHJldHVybiBtc2c7CisgICAgICB9CisgICAg ICBlbHNlIGlmIChjb2xfdHlwZSA9PSAnY29sdW1uJyAmJgorICAgICAgICBfLmlzVW5kZWZpbmVk KHB0X2NvbHVtbikgfHwgXy5pc051bGwocHRfY29sdW1uKSB8fAorICAgICAgICBTdHJpbmcocHRf Y29sdW1uKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpID09ICcnKSB7CisgICAgICAgIG1zZyA9 IGdldHRleHQoJ1BhcnRpdGlvbiBrZXkgY29sdW1uIGNhbm5vdCBiZSBlbXB0eS4nKTsKKyAgICAg ICAgdGhpcy5lcnJvck1vZGVsLnNldCgncHRfY29sdW1uJywgbXNnKTsKKyAgICAgICAgcmV0dXJu IG1zZzsKKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGNvbF90eXBlID09ICdleHByZXNzaW9uJyAm JgorICAgICAgICBfLmlzVW5kZWZpbmVkKGV4cHJlc3Npb24pIHx8IF8uaXNOdWxsKGV4cHJlc3Np b24pIHx8CisgICAgICAgIFN0cmluZyhleHByZXNzaW9uKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywg JycpID09ICcnKSB7CisgICAgICAgIG1zZyA9IGdldHRleHQoJ1BhcnRpdGlvbiBrZXkgZXhwcmVz c2lvbiBjYW5ub3QgYmUgZW1wdHkuJyk7CisgICAgICAgIHRoaXMuZXJyb3JNb2RlbC5zZXQoJ2V4 cHJlc3Npb24nLCBtc2cpOworICAgICAgICByZXR1cm4gbXNnOworICAgICAgfQorCisgICAgICBy ZXR1cm4gbnVsbDsKKyAgICB9CisgIH0pOworCisgIHZhciBQYXJ0aXRpb25zTW9kZWwgPSBwZ0Jy b3dzZXIuTm9kZS5Nb2RlbC5leHRlbmQoeworICAgIGRlZmF1bHRzOiB7CisgICAgICBvaWQ6IHVu ZGVmaW5lZCwKKyAgICAgIGlzX2F0dGFjaDogZmFsc2UsCisgICAgICBwYXJ0aXRpb25fbmFtZTog dW5kZWZpbmVkLAorICAgICAgdmFsdWVzX2Zyb206IHVuZGVmaW5lZCwKKyAgICAgIHZhbHVlc190 bzogdW5kZWZpbmVkLAorICAgICAgdmFsdWVzX2luOiB1bmRlZmluZWQKKyAgICB9LAorICAgIGtl eXM6WydwYXJ0aXRpb25fbmFtZSddLAorICAgIHNjaGVtYTogW3sKKyAgICAgIGlkOiAnb2lkJywg bGFiZWw6IGdldHRleHQoJ09JRCcpLCB0eXBlOiAndGV4dCcKKyAgICB9LHsKKyAgICAgIGlkOiAn aXNfYXR0YWNoJywgbGFiZWw6Z2V0dGV4dCgnTW9kZScpLCBjZWxsOiAnc3dpdGNoJywKKyAgICAg IHR5cGU6ICdzd2l0Y2gnLCBvcHRpb25zOiB7ICdvblRleHQnOiAnQXR0YWNoJywgJ29mZlRleHQn OiAnQ3JlYXRlJ30sCisgICAgICBjZWxsSGVhZGVyQ2xhc3NlczogJ3dpZHRoX3BlcmNlbnRfNScs CisgICAgICBlZGl0YWJsZTogZnVuY3Rpb24obSkgeworICAgICAgICBpZiAobSBpbnN0YW5jZW9m IEJhY2tib25lLk1vZGVsICYmIG0uaXNOZXcoKSAmJiAhbS50b3AuaXNOZXcoKSkKKyAgICAgICAg ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0sewor ICAgICAgaWQ6ICdwYXJ0aXRpb25fbmFtZScsIGxhYmVsOiBnZXR0ZXh0KCdOYW1lJyksIHR5cGU6 ICd0ZXh0JywgY2VsbDonc3RyaW5nJywKKyAgICAgIGNlbGxIZWFkZXJDbGFzc2VzOiAnd2lkdGhf cGVyY2VudF8yNScsCisgICAgICBlZGl0YWJsZTogZnVuY3Rpb24obSkgeworICAgICAgICBpZiAo bSBpbnN0YW5jZW9mIEJhY2tib25lLk1vZGVsICYmIG0uaXNOZXcoKSkKKyAgICAgICAgICByZXR1 cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfSwgY2VsbEZ1bmN0aW9uOiBn ZXRQYXJ0aXRpb25DZWxsCisgICAgfSx7CisgICAgICBpZDogJ3ZhbHVlc19mcm9tJywgbGFiZWw6 J0Zyb20nLCB0eXBlOid0ZXh0JywKKyAgICAgIGNlbGw6QmFja2dyaWQuRXh0ZW5zaW9uLlN0cmlu Z0RlcENlbGwsCisgICAgICBjZWxsSGVhZGVyQ2xhc3NlczogJ3dpZHRoX3BlcmNlbnRfMjAnLAor ICAgICAgZWRpdGFibGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICBpZihtLmhhbmRsZXIgJiYgbS5o YW5kbGVyLnRvcCAmJgorICAgICAgICAgIG0uaGFuZGxlci50b3AuYXR0cmlidXRlcyAmJgorICAg ICAgICAgIG0uaGFuZGxlci50b3AuYXR0cmlidXRlcy5wYXJ0aXRpb25fdHlwZSA9PSAncmFuZ2Un ICYmCisgICAgICAgICAgbSBpbnN0YW5jZW9mIEJhY2tib25lLk1vZGVsICYmIG0uaXNOZXcoKSkK KyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICB9Cisg ICAgfSx7CisgICAgICBpZDogJ3ZhbHVlc190bycsIGxhYmVsOidUbycsIHR5cGU6J3RleHQnLAor ICAgICAgY2VsbDpCYWNrZ3JpZC5FeHRlbnNpb24uU3RyaW5nRGVwQ2VsbCwKKyAgICAgIGNlbGxI ZWFkZXJDbGFzc2VzOiAnd2lkdGhfcGVyY2VudF8yMCcsCisgICAgICBlZGl0YWJsZTogZnVuY3Rp b24obSkgeworICAgICAgICBpZihtLmhhbmRsZXIgJiYgbS5oYW5kbGVyLnRvcCAmJgorICAgICAg ICAgIG0uaGFuZGxlci50b3AuYXR0cmlidXRlcyAmJgorICAgICAgICAgIG0uaGFuZGxlci50b3Au YXR0cmlidXRlcy5wYXJ0aXRpb25fdHlwZSA9PSAncmFuZ2UnICYmCisgICAgICAgICAgbSBpbnN0 YW5jZW9mIEJhY2tib25lLk1vZGVsICYmIG0uaXNOZXcoKSkKKyAgICAgICAgICByZXR1cm4gdHJ1 ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgfQorICAgIH0seworICAgICAgaWQ6ICd2 YWx1ZXNfaW4nLCBsYWJlbDonSW4nLCB0eXBlOid0ZXh0JywKKyAgICAgIGNlbGw6QmFja2dyaWQu RXh0ZW5zaW9uLlN0cmluZ0RlcENlbGwsCisgICAgICBjZWxsSGVhZGVyQ2xhc3NlczogJ3dpZHRo X3BlcmNlbnRfMjUnLAorICAgICAgZWRpdGFibGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgaWYo bS5oYW5kbGVyICYmIG0uaGFuZGxlci50b3AgJiYKKyAgICAgICAgICBtLmhhbmRsZXIudG9wLmF0 dHJpYnV0ZXMgJiYKKyAgICAgICAgICBtLmhhbmRsZXIudG9wLmF0dHJpYnV0ZXMucGFydGl0aW9u X3R5cGUgPT0gJ2xpc3QnICYmCisgICAgICAgICAgbSBpbnN0YW5jZW9mIEJhY2tib25lLk1vZGVs ICYmIG0uaXNOZXcoKSkKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZh bHNlOworICAgICAgfQorICAgIH1dLAorICAgIHZhbGlkYXRlOiBmdW5jdGlvbihrZXlzKSB7Cisg ICAgICB2YXIgcGFydGl0aW9uX25hbWUgPSB0aGlzLmdldCgncGFydGl0aW9uX25hbWUnKSwKKyAg ICAgICAgIHZhbHVlc19mcm9tID0gdGhpcy5nZXQoJ3ZhbHVlc19mcm9tJyksCisgICAgICAgICB2 YWx1ZXNfdG8gPSB0aGlzLmdldCgndmFsdWVzX3RvJyksCisgICAgICAgICB2YWx1ZXNfaW4gPSB0 aGlzLmdldCgndmFsdWVzX2luJyk7CisKKyAgICAgIC8vIEhhdmUgdG8gY2xlYXIgZXhpc3Rpbmcg dmFsaWRhdGlvbiBiZWZvcmUgaW5pdGlhdGluZyBjdXJyZW50IHN0YXRlCisgICAgICAvLyB2YWxp ZGF0aW9uIG9ubHkKKyAgICAgIHRoaXMuZXJyb3JNb2RlbC5jbGVhcigpOworCisgICAgICBpZiAo Xy5pc1VuZGVmaW5lZChwYXJ0aXRpb25fbmFtZSkgfHwgXy5pc051bGwocGFydGl0aW9uX25hbWUp IHx8CisgICAgICAgU3RyaW5nKHBhcnRpdGlvbl9uYW1lKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywg JycpID09ICcnKSB7CisgICAgICAgbXNnID0gZ2V0dGV4dCgnUGFydGl0aW9uIG5hbWUgY2Fubm90 IGJlIGVtcHR5LicpOworICAgICAgIHRoaXMuZXJyb3JNb2RlbC5zZXQoJ3BhcnRpdGlvbl9uYW1l JywgbXNnKTsKKyAgICAgICByZXR1cm4gbXNnOworICAgICAgfQorCisgICAgICBpZiAodGhpcy50 b3AuZ2V0KCdwYXJ0aXRpb25fdHlwZScpID09ICdyYW5nZScpIHsKKyAgICAgICAgaWYgKF8uaXNV bmRlZmluZWQodmFsdWVzX2Zyb20pIHx8IF8uaXNOdWxsKHZhbHVlc19mcm9tKSB8fAorICAgICAg ICAgIFN0cmluZyh2YWx1ZXNfZnJvbSkucmVwbGFjZSgvXlxzK3xccyskL2csICcnKSA9PSAnJykg eworICAgICAgICAgIG1zZyA9IGdldHRleHQoJ0ZvciByYW5nZSBwYXJ0aXRpb24gRnJvbSBmaWVs ZCBjYW5ub3QgYmUgZW1wdHkuJyk7CisgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgndmFs dWVzX2Zyb20nLCBtc2cpOworICAgICAgICAgIHJldHVybiBtc2c7CisgICAgICAgIH0gZWxzZSBp ZiAoXy5pc1VuZGVmaW5lZCh2YWx1ZXNfdG8pIHx8IF8uaXNOdWxsKHZhbHVlc190bykgfHwKKyAg ICAgICAgICBTdHJpbmcodmFsdWVzX3RvKS5yZXBsYWNlKC9eXHMrfFxzKyQvZywgJycpID09ICcn KSB7CisgICAgICAgICAgbXNnID0gZ2V0dGV4dCgnRm9yIHJhbmdlIHBhcnRpdGlvbiBUbyBmaWVs ZCBjYW5ub3QgYmUgZW1wdHkuJyk7CisgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNldCgndmFs dWVzX3RvJywgbXNnKTsKKyAgICAgICAgICByZXR1cm4gbXNnOworICAgICAgICB9CisgICAgICB9 IGVsc2UgaWYgKHRoaXMudG9wLmdldCgncGFydGl0aW9uX3R5cGUnKSA9PSAnbGlzdCcpIHsKKyAg ICAgICAgaWYgKF8uaXNVbmRlZmluZWQodmFsdWVzX2luKSB8fCBfLmlzTnVsbCh2YWx1ZXNfaW4p IHx8CisgICAgICAgICAgU3RyaW5nKHZhbHVlc19pbikucmVwbGFjZSgvXlxzK3xccyskL2csICcn KSA9PSAnJykgeworICAgICAgICAgIG1zZyA9IGdldHRleHQoJ0ZvciBsaXN0IHBhcnRpdGlvbiBJ biBmaWVsZCBjYW5ub3QgYmUgZW1wdHkuJyk7CisgICAgICAgICAgdGhpcy5lcnJvck1vZGVsLnNl dCgndmFsdWVzX2luJywgbXNnKTsKKyAgICAgICAgICByZXR1cm4gbXNnOworICAgICAgICB9Cisg ICAgICB9CisKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgfSk7CisKICAgaWYgKCFwZ0Jy b3dzZXIuTm9kZXNbJ2NvbGwtdGFibGUnXSkgewogICAgIHZhciBkYXRhYmFzZXMgPSBwZ0Jyb3dz ZXIuTm9kZXNbJ2NvbGwtdGFibGUnXSA9CiAgICAgICBwZ0Jyb3dzZXIuQ29sbGVjdGlvbi5leHRl bmQoewpAQCAtMjc3LDcgKzU5NCwxMCBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS50YWJsZScsIFsK ICAgICAgICAgICBoYXN0b2FzdHRhYmxlOiB0cnVlLAogICAgICAgICAgIHRvYXN0X2F1dG92YWN1 dW1fZW5hYmxlZDogZmFsc2UsCiAgICAgICAgICAgYXV0b3ZhY3V1bV9lbmFibGVkOiBmYWxzZSwK LSAgICAgICAgICBwcmltYXJ5X2tleTogW10KKyAgICAgICAgICBwcmltYXJ5X2tleTogW10sCisg ICAgICAgICAgcGFydGl0aW9uczogW10sCisgICAgICAgICAgcGFydGl0aW9uX3R5cGU6ICdyYW5n ZScsCisgICAgICAgICAgaXNfcGFydGl0aW9uZWQ6IGZhbHNlCiAgICAgICAgIH0sCiAgICAgICAg IC8vIERlZmF1bHQgdmFsdWVzIQogICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihhdHRycywg YXJncykgewpAQCAtMzIzLDEyICs2NDMsMzcgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFibGUn LCBbCiAgICAgICAgICAgICByZXR1cm4gKCEoZCAmJiBkLmxhYmVsLm1hdGNoKC9wZ19nbG9iYWwv KSkpCiAgICAgICAgICAgfQogICAgICAgICB9LHsKKyAgICAgICAgICBpZDogJ3BhcnRpdGlvbics IHR5cGU6ICdncm91cCcsIGxhYmVsOiBnZXR0ZXh0KCdQYXJ0aXRpb24nKSwKKyAgICAgICAgICBt b2RlOiBbJ2VkaXQnLCAnY3JlYXRlJ10sIG1pbl92ZXJzaW9uOiAxMDAwMDAsCisgICAgICAgICAg dmlzaWJsZTogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgLy8gQWx3YXlzIHNob3cgaW4gY2Fz ZSBvZiBjcmVhdGUgbW9kZQorICAgICAgICAgICAgaWYgKG0uaXNOZXcoKSB8fCBtLmdldCgnaXNf cGFydGl0aW9uZWQnKSkKKyAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7CisgICAgICAgICAgfQorICAgICAgICB9LHsKKyAgICAgICAgICBpZDogJ2lz X3BhcnRpdGlvbmVkJywgbGFiZWw6Z2V0dGV4dCgnUGFydGl0aW9uZWQgVGFibGU/JyksIGNlbGw6 ICdzd2l0Y2gnLAorICAgICAgICAgIHR5cGU6ICdzd2l0Y2gnLCBtb2RlOiBbJ3Byb3BlcnRpZXMn LCAnY3JlYXRlJywgJ2VkaXQnXSwKKyAgICAgICAgICB2aXNpYmxlOiBmdW5jdGlvbihtKSB7Cisg ICAgICAgICAgICBpZighXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mbykgJiYgIV8uaXNVbmRlZmlu ZWQobS5ub2RlX2luZm8uc2VydmVyKQorICAgICAgICAgICAgICAmJiAhXy5pc1VuZGVmaW5lZCht Lm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lvbikgJiYKKyAgICAgICAgICAgICAgbS5ub2RlX2luZm8u c2VydmVyLnZlcnNpb24gPj0gMTAwMDAwKQorICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwor ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0sCisgICAgICAgICAgZGlzYWJs ZWQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmICghbS5pc05ldygpKQorICAgICAgICAg ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9 CisgICAgICAgIH0sewogICAgICAgICAgIGlkOiAnZGVzY3JpcHRpb24nLCBsYWJlbDogZ2V0dGV4 dCgnQ29tbWVudCcpLCB0eXBlOiAnbXVsdGlsaW5lJywKICAgICAgICAgICBtb2RlOiBbJ3Byb3Bl cnRpZXMnLCAnY3JlYXRlJywgJ2VkaXQnXSwgZGlzYWJsZWQ6ICdpblNjaGVtYScKICAgICAgICAg fSx7CiAgICAgICAgICAgaWQ6ICdjb2xsX2luaGVyaXRzJywgbGFiZWw6IGdldHRleHQoJ0luaGVy aXRlZCBmcm9tIHRhYmxlKHMpJyksCiAgICAgICAgICAgdXJsOiAnZ2V0X2luaGVyaXRzJywgdHlw ZTogJ2FycmF5JywgZ3JvdXA6IGdldHRleHQoJ0NvbHVtbnMnKSwKLSAgICAgICAgICBkaXNhYmxl ZDogJ2NoZWNrSW5oZXJpdGFuY2UnLCBkZXBzOiBbJ3R5cG5hbWUnXSwKKyAgICAgICAgICBkaXNh YmxlZDogJ2NoZWNrSW5oZXJpdGFuY2UnLCBkZXBzOiBbJ3R5cG5hbWUnLCAnaXNfcGFydGl0aW9u ZWQnXSwKICAgICAgICAgICBtb2RlOiBbJ2NyZWF0ZScsICdlZGl0J10sCiAgICAgICAgICAgc2Vs ZWN0MjogeyBtdWx0aXBsZTogdHJ1ZSwgYWxsb3dDbGVhcjogdHJ1ZSwKICAgICAgICAgICBwbGFj ZWhvbGRlcjogZ2V0dGV4dCgnU2VsZWN0IHRvIGluaGVyaXQgZnJvbS4uLicpfSwKQEAgLTQyNSw3 ICs3NzAsMjYgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFibGUnLCBbCiAgICAgICAgICAgbW9k ZWw6IHBnQnJvd3Nlci5Ob2Rlc1snY29sdW1uJ10ubW9kZWwsCiAgICAgICAgICAgc3Vibm9kZTog cGdCcm93c2VyLk5vZGVzWydjb2x1bW4nXS5tb2RlbCwKICAgICAgICAgICBtb2RlOiBbJ2NyZWF0 ZScsICdlZGl0J10sCi0gICAgICAgICAgZGlzYWJsZWQ6ICdpblNjaGVtYScsIGRlcHM6IFsndHlw bmFtZSddLAorICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICAv LyBJbiBjYXNlIG9mIHBhcnRpdGlvbmVkIHRhYmxlIHJlbW92ZSBpbmhlcml0ZWQgY29sdW1ucwor ICAgICAgICAgICAgaWYgKG0uaXNOZXcoKSAmJiBtLmdldCgnaXNfcGFydGl0aW9uZWQnKSkgewor ICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHZh ciBjb2xsID0gbS5nZXQoJ2NvbHVtbnMnKTsKKyAgICAgICAgICAgICAgICBjb2xsLnJlbW92ZShj b2xsLmZpbHRlcihmdW5jdGlvbihtb2RlbCkgeworICAgICAgICAgICAgICAgICAgaWYgKF8uaXNV bmRlZmluZWQobW9kZWwuZ2V0KCdpbmhlcml0ZWRmcm9tJykpKQorICAgICAgICAgICAgICAgICAg ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg ICAgICAgICB9KSk7CisgICAgICAgICAgICAgIH0sIDEwKTsKKyAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgaWYodGhpcy5ub2RlX2luZm8gJiYgICdjYXRhbG9nJyBpbiB0aGlzLm5vZGVfaW5m bykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgfSwKKyAgICAgICAgICBk ZXBzOiBbJ3R5cG5hbWUnLCAnaXNfcGFydGl0aW9uZWQnXSwKICAgICAgICAgICBjYW5BZGQ6ICdj aGVja19ncmlkX2FkZF9jb25kaXRpb24nLAogICAgICAgICAgIGNhbkVkaXQ6IHRydWUsIGNhbkRl bGV0ZTogdHJ1ZSwKICAgICAgICAgICAvLyBGb3IgZWFjaCByb3cgZWRpdC9kZWxldGUgYnV0dG9u IGVuYWJsZS9kaXNhYmxlCkBAIC01MjgsMTAgKzg5MiwyMiBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9k ZS50YWJsZScsIFsKICAgICAgICAgICAgICAgc3Vibm9kZTogcGdCcm93c2VyLk5vZGVzWydwcmlt YXJ5X2tleSddLm1vZGVsLAogICAgICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsIHR5cGU6ICdj b2xsZWN0aW9uJywKICAgICAgICAgICAgICAgZ3JvdXA6IGdldHRleHQoJ1ByaW1hcnkgS2V5Jyks IG1vZGU6IFsnZWRpdCcsICdjcmVhdGUnXSwKLSAgICAgICAgICAgICAgY2FuRWRpdDogdHJ1ZSwg Y2FuRGVsZXRlOiB0cnVlLAorICAgICAgICAgICAgICBjYW5FZGl0OiB0cnVlLCBjYW5EZWxldGU6 IHRydWUsIGRlcHM6Wydpc19wYXJ0aXRpb25lZCddLAogICAgICAgICAgICAgICBjb250cm9sOiAn dW5pcXVlLWNvbC1jb2xsZWN0aW9uJywKICAgICAgICAgICAgICAgY29sdW1ucyA6IFsnbmFtZScs ICdjb2x1bW5zJ10sCi0gICAgICAgICAgICAgIGNhbkFkZDogdHJ1ZSwKKyAgICAgICAgICAgICAg Y2FuQWRkOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICAgICAgaWYgKG0uZ2V0KCdpc19wYXJ0 aXRpb25lZCcpKSB7CisgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewor ICAgICAgICAgICAgICAgICAgICB2YXIgY29sbCA9IG0uZ2V0KCdwcmltYXJ5X2tleScpOworICAg ICAgICAgICAgICAgICAgICBjb2xsLnJlbW92ZShjb2xsLmZpbHRlcihmdW5jdGlvbihtb2RlbCkg eworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAg ICB9KSk7CisgICAgICAgICAgICAgICAgICB9LCAxMCk7CisgICAgICAgICAgICAgICAgICByZXR1 cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHRy dWU7CisgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgIGNhbkFkZFJvdzogZnVuY3Rpb24o bSkgewogICAgICAgICAgICAgICAgLy8gVXNlciBjYW4gb25seSBhZGQgb25lIHByaW1hcnkga2V5 CiAgICAgICAgICAgICAgICB2YXIgY29sdW1ucyA9IG0uZ2V0KCdjb2x1bW5zJyk7CkBAIC01NDYs OSArOTIyLDIxIEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnRhYmxlJywgWwogICAgICAgICAgICAg ICBzdWJub2RlOiBwZ0Jyb3dzZXIuTm9kZXNbJ2ZvcmVpZ25fa2V5J10ubW9kZWwsCiAgICAgICAg ICAgICAgIGVkaXRhYmxlOiBmYWxzZSwgdHlwZTogJ2NvbGxlY3Rpb24nLAogICAgICAgICAgICAg ICBncm91cDogZ2V0dGV4dCgnRm9yZWlnbiBLZXknKSwgbW9kZTogWydlZGl0JywgJ2NyZWF0ZSdd LAotICAgICAgICAgICAgICBjYW5FZGl0OiB0cnVlLCBjYW5EZWxldGU6IHRydWUsCisgICAgICAg ICAgICAgIGNhbkVkaXQ6IHRydWUsIGNhbkRlbGV0ZTogdHJ1ZSwgZGVwczpbJ2lzX3BhcnRpdGlv bmVkJ10sCiAgICAgICAgICAgICAgIGNvbnRyb2w6ICd1bmlxdWUtY29sLWNvbGxlY3Rpb24nLAot ICAgICAgICAgICAgICBjYW5BZGQ6IHRydWUsCisgICAgICAgICAgICAgIGNhbkFkZDogZnVuY3Rp b24obSkgeworICAgICAgICAgICAgICAgIGlmIChtLmdldCgnaXNfcGFydGl0aW9uZWQnKSkgewor ICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg ICAgICAgdmFyIGNvbGwgPSBtLmdldCgnZm9yZWlnbl9rZXknKTsKKyAgICAgICAgICAgICAgICAg ICAgY29sbC5yZW1vdmUoY29sbC5maWx0ZXIoZnVuY3Rpb24obW9kZWwpIHsKKyAgICAgICAgICAg ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSkpOworICAgICAg ICAgICAgICAgICAgfSwgMTApOworICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg ICAgICB9LAogICAgICAgICAgICAgICBjb2x1bW5zIDogWyduYW1lJywgJ2NvbHVtbnMnXSwKICAg ICAgICAgICAgICAgY2FuQWRkUm93OiBmdW5jdGlvbihtKSB7CiAgICAgICAgICAgICAgICAvLyBV c2VyIGNhbiBvbmx5IGFkZCBpZiB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgY29sdW1uIHdpdGggbmFt ZS4KQEAgLTU2MSw3ICs5NDksNyBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS50YWJsZScsIFsKICAg ICAgICAgICAgICAgc3Vibm9kZTogcGdCcm93c2VyLk5vZGVzWydjaGVja19jb25zdHJhaW50cydd Lm1vZGVsLAogICAgICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UsIHR5cGU6ICdjb2xsZWN0aW9u JywKICAgICAgICAgICAgICAgZ3JvdXA6IGdldHRleHQoJ0NoZWNrJyksIG1vZGU6IFsnZWRpdCcs ICdjcmVhdGUnXSwKLSAgICAgICAgICAgICAgY2FuRWRpdDogdHJ1ZSwgY2FuRGVsZXRlOiB0cnVl LAorICAgICAgICAgICAgICBjYW5FZGl0OiB0cnVlLCBjYW5EZWxldGU6IHRydWUsIGRlcHM6Wydp c19wYXJ0aXRpb25lZCddLAogICAgICAgICAgICAgICBjb250cm9sOiAndW5pcXVlLWNvbC1jb2xs ZWN0aW9uJywKICAgICAgICAgICAgICAgY2FuQWRkOiB0cnVlLAogICAgICAgICAgICAgICBjb2x1 bW5zIDogWyduYW1lJywgJ2NvbnNyYyddCkBAIC01NzEsMTAgKzk1OSwyMiBAQCBkZWZpbmUoJ3Bn YWRtaW4ubm9kZS50YWJsZScsIFsKICAgICAgICAgICAgICAgc3Vibm9kZTogcGdCcm93c2VyLk5v ZGVzWyd1bmlxdWVfY29uc3RyYWludCddLm1vZGVsLAogICAgICAgICAgICAgICBlZGl0YWJsZTog ZmFsc2UsIHR5cGU6ICdjb2xsZWN0aW9uJywKICAgICAgICAgICAgICAgZ3JvdXA6IGdldHRleHQo J1VuaXF1ZScpLCBtb2RlOiBbJ2VkaXQnLCAnY3JlYXRlJ10sCi0gICAgICAgICAgICAgIGNhbkVk aXQ6IHRydWUsIGNhbkRlbGV0ZTogdHJ1ZSwKKyAgICAgICAgICAgICAgY2FuRWRpdDogdHJ1ZSwg Y2FuRGVsZXRlOiB0cnVlLCBkZXBzOlsnaXNfcGFydGl0aW9uZWQnXSwKICAgICAgICAgICAgICAg Y29udHJvbDogJ3VuaXF1ZS1jb2wtY29sbGVjdGlvbicsCiAgICAgICAgICAgICAgIGNvbHVtbnMg OiBbJ25hbWUnLCAnY29sdW1ucyddLAotICAgICAgICAgICAgICBjYW5BZGQ6IHRydWUsCisgICAg ICAgICAgICAgIGNhbkFkZDogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgICAgIGlmIChtLmdl dCgnaXNfcGFydGl0aW9uZWQnKSkgeworICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5j dGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIGNvbGwgPSBtLmdldCgndW5pcXVlX2Nv bnN0cmFpbnQnKTsKKyAgICAgICAgICAgICAgICAgICAgY29sbC5yZW1vdmUoY29sbC5maWx0ZXIo ZnVuY3Rpb24obW9kZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg ICAgICAgICAgICAgICAgICAgfSkpOworICAgICAgICAgICAgICAgICAgfSwgMTApOworICAgICAg ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICBjYW5B ZGRSb3c6IGZ1bmN0aW9uKG0pIHsKICAgICAgICAgICAgICAgIC8vIFVzZXIgY2FuIG9ubHkgYWRk IGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjb2x1bW4gd2l0aCBuYW1lLgogICAgICAgICAgICAg ICAgdmFyIGNvbHVtbnMgPSBtLmdldCgnY29sdW1ucycpOwpAQCAtNTg2LDEwICs5ODYsMjIgQEAg ZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFibGUnLCBbCiAgICAgICAgICAgICAgIHN1Ym5vZGU6IHBn QnJvd3Nlci5Ob2Rlc1snZXhjbHVzaW9uX2NvbnN0cmFpbnQnXS5tb2RlbCwKICAgICAgICAgICAg ICAgZWRpdGFibGU6IGZhbHNlLCB0eXBlOiAnY29sbGVjdGlvbicsCiAgICAgICAgICAgICAgIGdy b3VwOiBnZXR0ZXh0KCdFeGNsdWRlJyksIG1vZGU6IFsnZWRpdCcsICdjcmVhdGUnXSwKLSAgICAg ICAgICAgICAgY2FuRWRpdDogdHJ1ZSwgY2FuRGVsZXRlOiB0cnVlLAorICAgICAgICAgICAgICBj YW5FZGl0OiB0cnVlLCBjYW5EZWxldGU6IHRydWUsIGRlcHM6Wydpc19wYXJ0aXRpb25lZCddLAog ICAgICAgICAgICAgICBjb250cm9sOiAndW5pcXVlLWNvbC1jb2xsZWN0aW9uJywKICAgICAgICAg ICAgICAgY29sdW1ucyA6IFsnbmFtZScsICdjb2x1bW5zJywgJ2NvbnN0cmFpbnQnXSwKLSAgICAg ICAgICAgICAgY2FuQWRkOiB0cnVlLAorICAgICAgICAgICAgICBjYW5BZGQ6IGZ1bmN0aW9uKG0p IHsKKyAgICAgICAgICAgICAgICBpZiAobS5nZXQoJ2lzX3BhcnRpdGlvbmVkJykpIHsKKyAgICAg ICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAg IHZhciBjb2xsID0gbS5nZXQoJ2V4Y2x1ZGVfY29uc3RyYWludCcpOworICAgICAgICAgICAgICAg ICAgICBjb2xsLnJlbW92ZShjb2xsLmZpbHRlcihmdW5jdGlvbihtb2RlbCkgeworICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgICB9KSk7CisgICAg ICAgICAgICAgICAgICB9LCAxMCk7CisgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg ICAgICAgIH0sCiAgICAgICAgICAgICAgIGNhbkFkZFJvdzogZnVuY3Rpb24obSkgewogICAgICAg ICAgICAgICAgLy8gVXNlciBjYW4gb25seSBhZGQgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNv bHVtbiB3aXRoIG5hbWUuCiAgICAgICAgICAgICAgICB2YXIgY29sdW1ucyA9IG0uZ2V0KCdjb2x1 bW5zJyk7CkBAIC02MDAsNyArMTAxMiw3IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnRhYmxlJywg WwogICAgICAgICAgIGlkOiAndHlwbmFtZScsIGxhYmVsOiBnZXR0ZXh0KCdPZiB0eXBlJyksIHR5 cGU6ICd0ZXh0JywKICAgICAgICAgICBjb250cm9sOiAnbm9kZS1hamF4LW9wdGlvbnMnLCBtb2Rl OiBbJ3Byb3BlcnRpZXMnLCAnY3JlYXRlJywgJ2VkaXQnXSwKICAgICAgICAgICBkaXNhYmxlZDog J2NoZWNrT2ZUeXBlJywgdXJsOiAnZ2V0X29mdHlwZScsIGdyb3VwOiBnZXR0ZXh0KCdBZHZhbmNl ZCcpLAotICAgICAgICAgIGRlcHM6IFsnY29sbF9pbmhlcml0cyddLCB0cmFuc2Zvcm06IGZ1bmN0 aW9uKGRhdGEsIGNlbGwpIHsKKyAgICAgICAgICBkZXBzOiBbJ2NvbGxfaW5oZXJpdHMnLCAnaXNf cGFydGl0aW9uZWQnXSwgdHJhbnNmb3JtOiBmdW5jdGlvbihkYXRhLCBjZWxsKSB7CiAgICAgICAg ICAgICB2YXIgY29udHJvbCA9IGNlbGwgfHwgdGhpcywKICAgICAgICAgICAgICAgbSA9IGNvbnRy b2wubW9kZWw7CiAgICAgICAgICAgICAgIG0ub2ZfdHlwZXNfdGFibGVzID0gZGF0YTsKQEAgLTcw NCwxMCArMTExNiwxODAgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudGFibGUnLCBbCiAgICAgICAg ICAgICBkaXNhYmxlZDogJ2lzTGlrZURpc2FibGUnLCBncm91cDogZ2V0dGV4dCgnTGlrZScpCiAg ICAgICAgICAgfV0KICAgICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdwYXJ0aXRpb25fdHlwZScs IGxhYmVsOmdldHRleHQoJ1BhcnRpdGlvbiBUeXBlJyksCisgICAgICAgICAgZWRpdGFibGU6IGZh bHNlLCB0eXBlOiAnc2VsZWN0MicsIHNlbGVjdDI6IHthbGxvd0NsZWFyOiBmYWxzZX0sCisgICAg ICAgICAgZ3JvdXA6ICdwYXJ0aXRpb24nLCBkZXBzOiBbJ2lzX3BhcnRpdGlvbmVkJ10sCisgICAg ICAgICAgb3B0aW9uczpbeworICAgICAgICAgICAgbGFiZWw6ICdSYW5nZScsIHZhbHVlOiAncmFu Z2UnCisgICAgICAgICAgfSx7CisgICAgICAgICAgICBsYWJlbDogJ0xpc3QnLCB2YWx1ZTogJ2xp c3QnCisgICAgICAgICAgfV0sCisgICAgICAgICAgbW9kZTpbJ2NyZWF0ZSddLAorICAgICAgICAg IHZpc2libGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKG0u bm9kZV9pbmZvKSAmJiAhXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mby5zZXJ2ZXIpCisgICAgICAg ICAgICAgICYmICFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvLnNlcnZlci52ZXJzaW9uKSAmJgor ICAgICAgICAgICAgICBtLm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lvbiA+PSAxMDAwMDApCisgICAg ICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg ICAgICAgfSwKKyAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24obSkgeworICAgICAgICAgICAg aWYgKCFtLmlzTmV3KCkgfHwgIW0uZ2V0KCdpc19wYXJ0aXRpb25lZCcpKQorICAgICAgICAgICAg ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9Cisg ICAgICAgIH0seworICAgICAgICAgIGlkOiAncGFydGl0aW9uX2tleXMnLCBsYWJlbDpnZXR0ZXh0 KCdQYXJ0aXRpb24gS2V5cycpLAorICAgICAgICAgIG1vZGVsOiBQYXJ0aXRpb25LZXlNb2RlbCwK KyAgICAgICAgICBzdWJub2RlOiBQYXJ0aXRpb25LZXlNb2RlbCwKKyAgICAgICAgICBlZGl0YWJs ZTogdHJ1ZSwgdHlwZTogJ2NvbGxlY3Rpb24nLAorICAgICAgICAgIGdyb3VwOiAncGFydGl0aW9u JywgbW9kZTogWydjcmVhdGUnXSwKKyAgICAgICAgICBkZXBzOiBbJ2lzX3BhcnRpdGlvbmVkJywg J3BhcnRpdGlvbl90eXBlJ10sCisgICAgICAgICAgY2FuRWRpdDogZmFsc2UsIGNhbkRlbGV0ZTog dHJ1ZSwKKyAgICAgICAgICBjb250cm9sOiAnc3ViLW5vZGUtY29sbGVjdGlvbicsCisgICAgICAg ICAgY2FuQWRkOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBpZiAobS5pc05ldygpICYmIG0u Z2V0KCdpc19wYXJ0aXRpb25lZCcpKQorICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9LAorICAgICAgICAgIGNhbkFkZFJvdzog ZnVuY3Rpb24obSkgeworICAgICAgICAgICAgdmFyIGNvbHVtbnMgPSBtLmdldCgnY29sdW1ucycp OworICAgICAgICAgICAgdmFyIG1heF9yb3dfY291bnQgPSAxMDAwOworCisgICAgICAgICAgICBp ZiAobS5nZXQoJ3BhcnRpdGlvbl90eXBlJykgJiYgbS5nZXQoJ3BhcnRpdGlvbl90eXBlJykgPT0g J2xpc3QnKQorICAgICAgICAgICAgICBtYXhfcm93X2NvdW50ID0gMTsKKworICAgICAgICAgICAg cmV0dXJuIChtLmdldCgncGFydGl0aW9uX2tleXMnKSAmJgorICAgICAgICAgICAgICAgIG0uZ2V0 KCdwYXJ0aXRpb25fa2V5cycpLmxlbmd0aCA8IG1heF9yb3dfY291bnQgJiYKKyAgICAgICAgICAg ICAgICBfLnNvbWUoY29sdW1ucy5wbHVjaygnbmFtZScpKQorICAgICAgICAgICAgKTsKKyAgICAg ICAgICB9LAorICAgICAgICAgIHZpc2libGU6IGZ1bmN0aW9uKG0pIHsKKyAgICAgICAgICAgIGlm KCFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvKSAmJiAhXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5m by5zZXJ2ZXIpCisgICAgICAgICAgICAgICYmICFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvLnNl cnZlci52ZXJzaW9uKSAmJgorICAgICAgICAgICAgICBtLm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lv biA+PSAxMDAwMDApCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBy ZXR1cm4gZmFsc2U7CisgICAgICAgICAgfSwKKyAgICAgICAgICBkaXNhYmxlZDogZnVuY3Rpb24o bSkgeworICAgICAgICAgICAgaWYgKG0uZ2V0KCdwYXJ0aXRpb25fa2V5cycpICYmIG0uZ2V0KCdw YXJ0aXRpb25fa2V5cycpLm1vZGVscy5sZW5ndGggPiAwKSB7CisgICAgICAgICAgICAgIHNldFRp bWVvdXQoZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAgIHZhciBjb2xsID0gbS5nZXQoJ3Bh cnRpdGlvbl9rZXlzJyk7CisgICAgICAgICAgICAgICAgY29sbC5yZW1vdmUoY29sbC5maWx0ZXIo ZnVuY3Rpb24obW9kZWwpIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg ICAgICAgICAgIH0pKTsKKyAgICAgICAgICAgICAgfSwgMTApOworICAgICAgICAgICAgfQorICAg ICAgICAgIH0KKyAgICAgICAgfSx7CisgICAgICAgICAgaWQ6ICdwYXJ0aXRpb25fc2NoZW1lJywg bGFiZWw6IGdldHRleHQoJ1BhcnRpdGlvbiBTY2hlbWUnKSwKKyAgICAgICAgICB0eXBlOiAnbm90 ZScsIGdyb3VwOiAncGFydGl0aW9uJywgbW9kZTogWydlZGl0J10sCisgICAgICAgICAgdmlzaWJs ZTogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgaWYoIV8uaXNVbmRlZmluZWQobS5ub2RlX2lu Zm8pICYmICFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvLnNlcnZlcikKKyAgICAgICAgICAgICAg JiYgIV8uaXNVbmRlZmluZWQobS5ub2RlX2luZm8uc2VydmVyLnZlcnNpb24pICYmCisgICAgICAg ICAgICAgIG0ubm9kZV9pbmZvLnNlcnZlci52ZXJzaW9uID49IDEwMDAwMCkKKyAgICAgICAgICAg ICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9 LAorICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBpZiAoIW0u aXNOZXcoKSkgeworICAgICAgICAgICAgICB0aGlzLnRleHQgPSBtLmdldCgncGFydGl0aW9uX3Nj aGVtZScpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfSx7CisgICAgICAg ICAgaWQ6ICdwYXJ0aXRpb25zJywgbGFiZWw6Z2V0dGV4dCgnUGFydGl0aW9ucycpLAorICAgICAg ICAgIG1vZGVsOiBQYXJ0aXRpb25zTW9kZWwsCisgICAgICAgICAgc3Vibm9kZTogUGFydGl0aW9u c01vZGVsLAorICAgICAgICAgIGVkaXRhYmxlOiB0cnVlLCB0eXBlOiAnY29sbGVjdGlvbicsCisg ICAgICAgICAgZ3JvdXA6ICdwYXJ0aXRpb24nLCBtb2RlOiBbJ2VkaXQnLCAnY3JlYXRlJ10sCisg ICAgICAgICAgZGVwczogWydpc19wYXJ0aXRpb25lZCcsICdwYXJ0aXRpb25fdHlwZSddLAorICAg ICAgICAgIGNhbkVkaXQ6IGZhbHNlLCBjYW5EZWxldGU6IHRydWUsCisgICAgICAgICAgY3VzdG9t RGVsZXRlVGl0bGU6IGdldHRleHQoJ0RldGFjaCBQYXJ0aXRpb24nKSwKKyAgICAgICAgICBjdXN0 b21EZWxldGVNc2c6IGdldHRleHQoJ0FyZSB5b3Ugc3VyZSB5b3Ugd2lzaCB0byBkZXRhY2ggdGhp cyBwYXJ0aXRpb24/JyksCisgICAgICAgICAgY29sdW1uczpbJ2lzX2F0dGFjaCcsICdwYXJ0aXRp b25fbmFtZScsICd2YWx1ZXNfZnJvbScsICd2YWx1ZXNfdG8nLCAndmFsdWVzX2luJ10sCisgICAg ICAgICAgY29udHJvbDogQmFja2Zvcm0uU3ViTm9kZUNvbGxlY3Rpb25Db250cm9sLmV4dGVuZCh7 CisgICAgICAgICAgICByb3c6UGFydGl0aW9uUm93LAorICAgICAgICAgICAgaW5pdGlhbGl6ZTog ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgIEJhY2tmb3JtLlN1Yk5vZGVDb2xsZWN0aW9uQ29u dHJvbC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAgICAg ICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgICAgICAgIGlmICghdGhpcy5tb2RlbC5p c05ldygpKSB7CisgICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLmZpZWxkLmdldCgnc2No ZW1hX25vZGUnKSwKKyAgICAgICAgICAgICAgICAgICAgbm9kZV9pbmZvID0gdGhpcy5maWVsZC5n ZXQoJ25vZGVfaW5mbycpOworCisgICAgICAgICAgICAgICAgLy8gTWFrZSBhamF4IGNhbGwgdG8g Z2V0IHRoZSB0YWJsZXMgdG8gYmUgYXR0YWNoZWQKKyAgICAgICAgICAgICAgICAkLmFqYXgoewor ICAgICAgICAgICAgICAgICAgdXJsOiBub2RlLmdlbmVyYXRlX3VybC5hcHBseSgKKyAgICAgICAg ICAgICAgICAgICAgICBub2RlLCBbCisgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCAnZ2V0 X2F0dGFjaF90YWJsZXMnLCB0aGlzLmZpZWxkLmdldCgnbm9kZV9kYXRhJyksCisgICAgICAgICAg ICAgICAgICAgICAgICB0cnVlLCBub2RlX2luZm8KKyAgICAgICAgICAgICAgICAgICAgICBdKSwK KworICAgICAgICAgICAgICAgICAgdHlwZTogJ0dFVCcsCisgICAgICAgICAgICAgICAgICBhc3lu YzogZmFsc2UsCisgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdWNjZXNzID09IDEpIHsKKyAgICAgICAgICAgICAg ICAgICAgICBzZWxmLm1vZGVsLnRhYmxlX29wdGlvbnMgPSByZXMuZGF0YTsKKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAg ICAgICBhbGVydGlmeS5hbGVydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICdFcnJvciBmZXRj aGluZyB0YWJsZXMgdG8gYmUgYXR0YWNoZWQnLCByZXMuZGF0YS5yZXN1bHQKKyAgICAgICAgICAg ICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9 LAorICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAg ICAgICAgdmFyIGVycm1zZyA9ICQucGFyc2VKU09OKGUucmVzcG9uc2VUZXh0KTsKKyAgICAgICAg ICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoJ0Vycm9yIGZldGNoaW5nIHRhYmxlcyB0byBiZSBh dHRhY2hlZC4nLCBlcnJtc2cuZXJyb3Jtc2cpOworICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0pOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg fQorICAgICAgICAgICksCisgICAgICAgICAgY2FuQWRkOiBmdW5jdGlvbihtKSB7CisgICAgICAg ICAgICBpZiAobS5nZXQoJ2lzX3BhcnRpdGlvbmVkJykpCisgICAgICAgICAgICAgIHJldHVybiB0 cnVlOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0sCisgICAgICAgICAg dmlzaWJsZTogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgaWYoIV8uaXNVbmRlZmluZWQobS5u b2RlX2luZm8pICYmICFfLmlzVW5kZWZpbmVkKG0ubm9kZV9pbmZvLnNlcnZlcikKKyAgICAgICAg ICAgICAgJiYgIV8uaXNVbmRlZmluZWQobS5ub2RlX2luZm8uc2VydmVyLnZlcnNpb24pICYmCisg ICAgICAgICAgICAgIG0ubm9kZV9pbmZvLnNlcnZlci52ZXJzaW9uID49IDEwMDAwMCkKKyAgICAg ICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg ICAgICB9LAorICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlvbihtKSB7CisgICAgICAgICAgICBp ZiAobS5pc05ldygpICYmIG0uZ2V0KCdwYXJ0aXRpb25zJykgJiYgbS5nZXQoJ3BhcnRpdGlvbnMn KS5tb2RlbHMubGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9u ICgpIHsKKyAgICAgICAgICAgICAgICB2YXIgY29sbCA9IG0uZ2V0KCdwYXJ0aXRpb25zJyk7Cisg ICAgICAgICAgICAgICAgY29sbC5yZW1vdmUoY29sbC5maWx0ZXIoZnVuY3Rpb24obW9kZWwpIHsK KyAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0pKTsKKyAg ICAgICAgICAgICAgfSwgMTApOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAg fSx7CisgICAgICAgICAgaWQ6ICdwYXJ0aXRpb25fbm90ZScsIGxhYmVsOiBnZXR0ZXh0KCdQYXJ0 aXRpb24nKSwKKyAgICAgICAgICB0eXBlOiAnbm90ZScsIGdyb3VwOiAncGFydGl0aW9uJywKKyAg ICAgICAgICB0ZXh0OiBnZXR0ZXh0KCdBYm92ZSBjb250cm9sIHdpbGwgYmUgdXNlZCB0byBDcmVh dGUvQXR0YWNoL0RldGFjaCBwYXJ0aXRpb25zLjxicj4nICsKKyAgICAgICAgICAgICc8dWw+PGxp PkNyZWF0ZSBNb2RlOiBVc2VyIHdpbGwgYmUgYWJsZSB0byBjcmVhdGUgTiBudW1iZXIgb2YgcGFy dGl0aW9ucy4gTW9kZSBzd2l0Y2ggY29udHJvbCBpcyBkaXNhYmxlZCBpbiB0aGlzIHNjZW5hcmlv LjwvbGk+JyArCisgICAgICAgICAgICAnPGxpPkVkaXQgTW9kZTogVXNlciB3aWxsIGJlIGFibGUg dG8gY3JlYXRlL2F0dGFjaC9kZXRhY2ggTiBudW1iZXIgb2YgcGFydGl0aW9ucy4nICsKKyAgICAg ICAgICAgICdJbiBhdHRhY2ggbW9kZSB0aGVyZSB3aWxsIGJlIGxpc3Qgb2Ygc3VpdGFibGUgdGFi bGVzIHRvIGJlIGF0dGFjaGVkLjwvbGk+PC91bD4nKSwKKyAgICAgICAgICB2aXNpYmxlOiBmdW5j dGlvbihtKSB7CisgICAgICAgICAgICBpZighXy5pc1VuZGVmaW5lZChtLm5vZGVfaW5mbykgJiYg IV8uaXNVbmRlZmluZWQobS5ub2RlX2luZm8uc2VydmVyKQorICAgICAgICAgICAgICAmJiAhXy5p c1VuZGVmaW5lZChtLm5vZGVfaW5mby5zZXJ2ZXIudmVyc2lvbikgJiYKKyAgICAgICAgICAgICAg bS5ub2RlX2luZm8uc2VydmVyLnZlcnNpb24gPj0gMTAwMDAwKQorICAgICAgICAgICAgICByZXR1 cm4gdHJ1ZTsKKworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIH0KKyAgICAg ICAgfSx7CiAgICAgICAgICAgLy8gSGVyZSAtIHdlIHdpbGwgY3JlYXRlIHRhYiBjb250cm9sIGZv ciBzdG9yYWdlIHBhcmFtZXRlcnMKICAgICAgICAgICAvLyAoYXV0byB2YWN1dW0pLgogICAgICAg ICAgIHR5cGU6ICduZXN0ZWQnLCBjb250cm9sOiAndGFiJywgZ3JvdXA6IGdldHRleHQoJ1BhcmFt ZXRlcicpLAotICAgICAgICAgIG1vZGU6IFsnZWRpdCcsICdjcmVhdGUnXSwKKyAgICAgICAgICBt b2RlOiBbJ2VkaXQnLCAnY3JlYXRlJ10sIGRlcHM6IFsnaXNfcGFydGl0aW9uZWQnXSwKICAgICAg ICAgICBzY2hlbWE6IEJhY2tmb3JtLlZhY3V1bVNldHRpbmdzU2NoZW1hCiAgICAgICAgIH0sewog ICAgICAgICAgIGlkOiAncmVsYWNsX3N0cicsIGxhYmVsOiBnZXR0ZXh0KCdQcml2aWxlZ2VzJyks IGRpc2FibGVkOiAnaW5TY2hlbWEnLApAQCAtNzM0LDcgKzEzMTYsOSBAQCBkZWZpbmUoJ3BnYWRt aW4ubm9kZS50YWJsZScsIFsKICAgICAgICAgICAgICAgbXNnID0gdW5kZWZpbmVkLAogICAgICAg ICAgICAgICBuYW1lID0gdGhpcy5nZXQoJ25hbWUnKSwKICAgICAgICAgICAgICAgc2NoZW1hID0g dGhpcy5nZXQoJ3NjaGVtYScpLAotICAgICAgICAgICAgICByZWxvd25lciA9IHRoaXMuZ2V0KCdy ZWxvd25lcicpOworICAgICAgICAgICAgICByZWxvd25lciA9IHRoaXMuZ2V0KCdyZWxvd25lcicp LAorICAgICAgICAgICAgICBpc19wYXJ0aXRpb25lZCA9IHRoaXMuZ2V0KCdpc19wYXJ0aXRpb25l ZCcpLAorICAgICAgICAgICAgICBwYXJ0aXRpb25fa2V5cyA9IHRoaXMuZ2V0KCdwYXJ0aXRpb25f a2V5cycpOwogCiAgICAgICAgICAgLy8gSWYgbm90aGluZyB0byB2YWxpZGF0ZSBvciBWYWN1dW1T ZXR0aW5nIGtleXMgdGhlbgogICAgICAgICAgIC8vIHJldHVybiBmcm9tIGhlcmUKQEAgLTc2Miw2 ICsxMzQ2LDEyIEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnRhYmxlJywgWwogICAgICAgICAgICAg bXNnID0gZ2V0dGV4dCgnVGFibGUgb3duZXIgY2Fubm90IGJlIGVtcHR5LicpOwogICAgICAgICAg ICAgdGhpcy5lcnJvck1vZGVsLnNldCgncmVsb3duZXInLCBtc2cpOwogICAgICAgICAgICAgcmV0 dXJuIG1zZzsKKyAgICAgICAgICB9IGVsc2UgaWYgKGlzX3BhcnRpdGlvbmVkICYmIHRoaXMuaXNO ZXcoKSAmJgorICAgICAgICAgICAgIV8uaXNOdWxsKHBhcnRpdGlvbl9rZXlzKSAmJiBwYXJ0aXRp b25fa2V5cy5sZW5ndGggPD0gMCkKKyAgICAgICAgICB7CisgICAgICAgICAgICBtc2cgPSBnZXR0 ZXh0KCdQbGVhc2Ugc3BlY2lmeSBhdCBsZWFzdCBvbmUga2V5IGZvciBwYXJ0aXRpb25lZCB0YWJs ZS4nKTsKKyAgICAgICAgICAgIHRoaXMuZXJyb3JNb2RlbC5zZXQoJ3BhcnRpdGlvbl9rZXlzJywg bXNnKTsKKyAgICAgICAgICAgIHJldHVybiBtc2c7CiAgICAgICAgICAgfQogICAgICAgICAgIHJl dHVybiBudWxsOwogICAgICAgICB9LApAQCAtNzkwLDcgKzEzODAsMTUgQEAgZGVmaW5lKCdwZ2Fk bWluLm5vZGUudGFibGUnLCBbCiAgICAgICAgIH0sCiAgICAgICAgIC8vIE9mdHlwZSBpcyBkZWZp bmVkPwogICAgICAgICBjaGVja0luaGVyaXRhbmNlOiBmdW5jdGlvbihtKSB7Ci0gICAgICAgICAv LyBjb2xsX2luaGVyaXRzIHx8IHR5cG5hbWUKKyAgICAgICAgICAvLyBEaXNhYmxlZCBpZiBpdCBp cyBwYXJ0aXRpb25lZCB0YWJsZQorICAgICAgICAgIGlmIChtLmdldCgnaXNfcGFydGl0aW9uZWQn KSkgeworICAgICAgICAgICAgc2V0VGltZW91dCggZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAg ICBtLnNldCgnY29sbF9pbmhlcml0cycsIFtdKTsKKyAgICAgICAgICAgIH0sIDEwKTsKKyAgICAg ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgIH0KKworICAgICAgICAgIC8vIGNvbGxfaW5o ZXJpdHMgfHwgdHlwbmFtZQogICAgICAgICAgIGlmKCFtLmluU2NoZW1hLmFwcGx5KHRoaXMsIFtt XSkgJiYKICAgICAgICAgICAgICAgKCBfLmlzVW5kZWZpbmVkKG0uZ2V0KCd0eXBuYW1lJykpIHx8 CiAgICAgICAgICAgICAgICAgXy5pc051bGwobS5nZXQoJ3R5cG5hbWUnKSkgfHwKQEAgLTgzNCw3 ICsxNDMyLDE1IEBAIGRlZmluZSgncGdhZG1pbi5ub2RlLnRhYmxlJywgWwogICAgICAgICB9LAog ICAgICAgICAvLyBXZSB3aWxsIGRpc2FibGUgaXQgaWYgSW5oZXJpdGFuY2UgaXMgZGVmaW5lZAog ICAgICAgICBjaGVja09mVHlwZTogZnVuY3Rpb24obSkgewotICAgICAgICAvL2NvbGxfaW5oZXJp dHMgfHwgdHlwbmFtZQorICAgICAgICAgIC8vIERpc2FibGVkIGlmIGl0IGlzIHBhcnRpdGlvbmVk IHRhYmxlCisgICAgICAgICAgaWYgKG0uZ2V0KCdpc19wYXJ0aXRpb25lZCcpKSB7CisgICAgICAg ICAgICBzZXRUaW1lb3V0KCBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgIG0uc2V0KCd0eXBu YW1lJywgdW5kZWZpbmVkKTsKKyAgICAgICAgICAgIH0sIDEwKTsKKyAgICAgICAgICAgIHJldHVy biB0cnVlOworICAgICAgICAgIH0KKworICAgICAgICAgIC8vY29sbF9pbmhlcml0cyB8fCB0eXBu YW1lCiAgICAgICAgICAgaWYoIW0uaW5TY2hlbWFXaXRoTW9kZWxDaGVjay5hcHBseSh0aGlzLCBb bV0pICYmCiAgICAgICAgICAgICAgIChfLmlzVW5kZWZpbmVkKG0uZ2V0KCdjb2xsX2luaGVyaXRz JykpIHx8CiAgICAgICAgICAgICAgICBfLmlzTnVsbChtLmdldCgnY29sbF9pbmhlcml0cycpKSB8 fApkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9hY2wu c3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2Vz L3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9hY2wuc3FsCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZGY5ZDUKLS0tIC9kZXYvbnVsbAorKysg Yi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2No ZW1hcy90YWJsZXMvdGVtcGxhdGVzL3RhYmxlL3NxbC8xMF9wbHVzL2FjbC5zcWwKQEAgLTAsMCAr MSw0NiBAQAoreyMjIyBTUUwgdG8gZmV0Y2ggcHJpdmlsZWdlcyBmb3IgdGFibGVzcGFjZSAjIyN9 CitTRUxFQ1QgJ3JlbGFjbCcgYXMgZGVmdHlwZSwgQ09BTEVTQ0UoZ3Qucm9sbmFtZSwgJ1BVQkxJ QycpIGdyYW50ZWUsIGcucm9sbmFtZSBncmFudG9yLAorICAgIGFycmF5X2FnZyhwcml2aWxlZ2Vf dHlwZSkgYXMgcHJpdmlsZWdlcywgYXJyYXlfYWdnKGlzX2dyYW50YWJsZSkgYXMgZ3JhbnRhYmxl CitGUk9NCisgIChTRUxFQ1QKKyAgICBkLmdyYW50ZWUsIGQuZ3JhbnRvciwgZC5pc19ncmFudGFi bGUsCisgICAgQ0FTRSBkLnByaXZpbGVnZV90eXBlCisJCVdIRU4gJ0NPTk5FQ1QnIFRIRU4gJ2Mn CisJCVdIRU4gJ0NSRUFURScgVEhFTiAnQycKKwkJV0hFTiAnREVMRVRFJyBUSEVOICdkJworCQlX SEVOICdFWEVDVVRFJyBUSEVOICdYJworCQlXSEVOICdJTlNFUlQnIFRIRU4gJ2EnCisJCVdIRU4g J1JFRkVSRU5DRVMnIFRIRU4gJ3gnCisJCVdIRU4gJ1NFTEVDVCcgVEhFTiAncicKKwkJV0hFTiAn VEVNUE9SQVJZJyBUSEVOICdUJworCQlXSEVOICdUUklHR0VSJyBUSEVOICd0JworCQlXSEVOICdU UlVOQ0FURScgVEhFTiAnRCcKKwkJV0hFTiAnVVBEQVRFJyBUSEVOICd3JworCQlXSEVOICdVU0FH RScgVEhFTiAnVScKKwkJRUxTRSAnVU5LTk9XTicKKwlFTkQgQVMgcHJpdmlsZWdlX3R5cGUKKyAg RlJPTQorICAgIChTRUxFQ1QgcmVsLnJlbGFjbAorICAgICAgICBGUk9NIHBnX2NsYXNzIHJlbAor ICAgICAgICAgIExFRlQgT1VURVIgSk9JTiBwZ190YWJsZXNwYWNlIHNwYyBvbiBzcGMub2lkPXJl bC5yZWx0YWJsZXNwYWNlCisgICAgICAgICAgTEVGVCBPVVRFUiBKT0lOIHBnX2NvbnN0cmFpbnQg Y29uIE9OIGNvbi5jb25yZWxpZD1yZWwub2lkIEFORCBjb24uY29udHlwZT0ncCcKKyAgICAgICAg ICBMRUZUIE9VVEVSIEpPSU4gcGdfY2xhc3MgdHN0IE9OIHRzdC5vaWQgPSByZWwucmVsdG9hc3Ry ZWxpZAorICAgICAgICAgIExFRlQgSk9JTiBwZ190eXBlIHR5cCBPTiByZWwucmVsb2Z0eXBlPXR5 cC5vaWQKKyAgICAgICAgV0hFUkUgcmVsLnJlbGtpbmQgSU4gKCdyJywncycsJ3QnLCdwJykgQU5E IHJlbC5yZWxuYW1lc3BhY2UgPSB7eyBzY2lkIH19OjpvaWQKKyAgICAgICAgICAgIEFORCByZWwu b2lkID0ge3sgdGlkIH19OjpvaWQKKyAgICApIGFjbCwKKyAgICAoU0VMRUNUIChkKS5ncmFudGVl IEFTIGdyYW50ZWUsIChkKS5ncmFudG9yIEFTIGdyYW50b3IsIChkKS5pc19ncmFudGFibGUKKyAg ICAgICAgQVMgaXNfZ3JhbnRhYmxlLCAoZCkucHJpdmlsZWdlX3R5cGUgQVMgcHJpdmlsZWdlX3R5 cGUgRlJPTSAoU0VMRUNUCisgICAgICAgIGFjbGV4cGxvZGUocmVsLnJlbGFjbCkgYXMgZAorICAg ICAgICBGUk9NIHBnX2NsYXNzIHJlbAorICAgICAgICAgIExFRlQgT1VURVIgSk9JTiBwZ190YWJs ZXNwYWNlIHNwYyBvbiBzcGMub2lkPXJlbC5yZWx0YWJsZXNwYWNlCisgICAgICAgICAgTEVGVCBP VVRFUiBKT0lOIHBnX2NvbnN0cmFpbnQgY29uIE9OIGNvbi5jb25yZWxpZD1yZWwub2lkIEFORCBj b24uY29udHlwZT0ncCcKKyAgICAgICAgICBMRUZUIE9VVEVSIEpPSU4gcGdfY2xhc3MgdHN0IE9O IHRzdC5vaWQgPSByZWwucmVsdG9hc3RyZWxpZAorICAgICAgICAgIExFRlQgSk9JTiBwZ190eXBl IHR5cCBPTiByZWwucmVsb2Z0eXBlPXR5cC5vaWQKKyAgICAgICAgV0hFUkUgcmVsLnJlbGtpbmQg SU4gKCdyJywncycsJ3QnLCdwJykgQU5EIHJlbC5yZWxuYW1lc3BhY2UgPSB7eyBzY2lkIH19Ojpv aWQKKyAgICAgICAgICAgIEFORCByZWwub2lkID0ge3sgdGlkIH19OjpvaWQKKyAgICAgICAgKSBh KSBkCisgICAgKSBkCisgIExFRlQgSk9JTiBwZ19jYXRhbG9nLnBnX3JvbGVzIGcgT04gKGQuZ3Jh bnRvciA9IGcub2lkKQorICBMRUZUIEpPSU4gcGdfY2F0YWxvZy5wZ19yb2xlcyBndCBPTiAoZC5n cmFudGVlID0gZ3Qub2lkKQorR1JPVVAgQlkgZy5yb2xuYW1lLCBndC5yb2xuYW1lCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv c2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3RhYmxlL3NxbC8xMF9wbHVzL2dldF9pbmhlcml0cy5z cWwgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv c2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3RhYmxlL3NxbC8xMF9wbHVzL2dldF9pbmhlcml0cy5z cWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjI4ZjI5OAotLS0gL2Rldi9u dWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsLzEwX3BsdXMvZ2V0X2luaGVy aXRzLnNxbApAQCAtMCwwICsxLDE3IEBACit7JSBpbXBvcnQgJ3RhYmxlL3NxbC9tYWNyb3MvZGJf Y2F0YWxvZ3MubWFjcm8nIGFzIENBVEFMT0cgJX0KK1NFTEVDVCBjLm9pZCwgYy5yZWxuYW1lICwg bnNwbmFtZSwKK0NBU0UgV0hFTiBuc3BuYW1lIE5PVCBMSUtFIEUncGdcXyUnIFRIRU4KKyBxdW90 ZV9pZGVudChuc3BuYW1lKXx8Jy4nfHxxdW90ZV9pZGVudChjLnJlbG5hbWUpCitFTFNFIHF1b3Rl X2lkZW50KGMucmVsbmFtZSkKK0VORCBBUyBpbmhlcml0cworRlJPTSBwZ19jbGFzcyBjCitKT0lO IHBnX25hbWVzcGFjZSBuCitPTiBuLm9pZD1jLnJlbG5hbWVzcGFjZQorV0hFUkUgcmVsa2luZD0n cicgQU5EIE5PVCByZWxpc3BhcnRpdGlvbgoreyUgaWYgbm90IHNob3dfc3lzdGVtX29iamVjdHMg JX0KK3t7IENBVEFMT0cuVkFMSURfQ0FUQUxPR1Moc2VydmVyX3R5cGUpIH19Cit7JSBlbmRpZiAl fQoreyUgaWYgdGlkICV9CitBTkQgYy5vaWQgIT0gdGlkCit7JSBlbmRpZiAlfQorT1JERVIgQlkg cmVsbmFtZXNwYWNlLCBjLnJlbG5hbWUKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFz ZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3RhYmxlL3NxbC8xMF9wbHVzL2dldF9vaWQuc3Fs IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9nZXRfb2lkLnNxbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjMwNjk4Ci0tLSAvZGV2L251bGwKKysr IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9nZXRfb2lkLnNxbApAQCAt MCwwICsxLDUgQEAKK1NFTEVDVCByZWwub2lkIGFzIHRpZAorRlJPTSBwZ19jbGFzcyByZWwKK1dI RVJFIHJlbC5yZWxraW5kIElOICgncicsJ3MnLCd0JywncCcpCitBTkQgcmVsLnJlbG5hbWVzcGFj ZSA9IHt7IHNjaWQgfX06Om9pZAorQU5EIHJlbC5yZWxuYW1lID0ge3tkYXRhLm5hbWV8cXRMaXRl cmFsfX0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1p bi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMv dGVtcGxhdGVzL3RhYmxlL3NxbC8xMF9wbHVzL2dldF90YWJsZS5zcWwgYi93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVt cGxhdGVzL3RhYmxlL3NxbC8xMF9wbHVzL2dldF90YWJsZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uNjk1MmM4ZAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90 ZW1wbGF0ZXMvdGFibGUvc3FsLzEwX3BsdXMvZ2V0X3RhYmxlLnNxbApAQCAtMCwwICsxLDggQEAK K1NFTEVDVAorICAgIHJlbC5yZWxuYW1lIEFTIG5hbWUKK0ZST00KKyAgICBwZ19jbGFzcyByZWwK K1dIRVJFCisgICAgcmVsLnJlbGtpbmQgSU4gKCdyJywncycsJ3QnLCdwJykKKyAgICBBTkQgcmVs LnJlbG5hbWVzcGFjZSA9IHt7IHNjaWQgfX06Om9pZAorICAgIEFORCByZWwub2lkID0ge3sgdGlk IH19OjpvaWQ7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFi bGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9ub2Rlcy5zcWwgYi93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVt cGxhdGVzL3RhYmxlL3NxbC8xMF9wbHVzL25vZGVzLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5mYmY5YzQyCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJv d3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBs YXRlcy90YWJsZS9zcWwvMTBfcGx1cy9ub2Rlcy5zcWwKQEAgLTAsMCArMSw5IEBACitTRUxFQ1Qg cmVsLm9pZCwgcmVsLnJlbG5hbWUgQVMgbmFtZSwKKyAgICAoU0VMRUNUIGNvdW50KCopIEZST00g cGdfdHJpZ2dlciBXSEVSRSB0Z3JlbGlkPXJlbC5vaWQgQU5EIHRnaXNpbnRlcm5hbCA9IEZBTFNF KSBBUyB0cmlnZ2VyY291bnQsCisgICAgKFNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3RyaWdnZXIg V0hFUkUgdGdyZWxpZD1yZWwub2lkIEFORCB0Z2lzaW50ZXJuYWwgPSBGQUxTRSBBTkQgdGdlbmFi bGVkID0gJ08nKSBBUyBoYXNfZW5hYmxlX3RyaWdnZXJzLAorICAgIChDQVNFIFdIRU4gcmVsLnJl bGtpbmQgPSAncCcgVEhFTiB0cnVlIEVMU0UgZmFsc2UgRU5EKSBBUyBpc19wYXJ0aXRpb25lZAor RlJPTSBwZ19jbGFzcyByZWwKKyAgICBXSEVSRSByZWwucmVsa2luZCBJTiAoJ3InLCdzJywndCcs J3AnKSBBTkQgcmVsLnJlbG5hbWVzcGFjZSA9IHt7IHNjaWQgfX06Om9pZAorICAgIEFORCBOT1Qg cmVsLnJlbGlzcGFydGl0aW9uCisgICAgeyUgaWYgdGlkICV9IEFORCByZWwub2lkID0ge3t0aWR9 fTo6T0lEIHslIGVuZGlmICV9CisgICAgT1JERVIgQlkgcmVsLnJlbG5hbWU7CmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2No ZW1hcy90YWJsZXMvdGVtcGxhdGVzL3RhYmxlL3NxbC8xMF9wbHVzL3Byb3BlcnRpZXMuc3FsIGIv d2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVt YXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9wcm9wZXJ0aWVzLnNxbApuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDU4OWRmCi0tLSAvZGV2L251bGwKKysr IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3Nj aGVtYXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvMTBfcGx1cy9wcm9wZXJ0aWVzLnNxbApA QCAtMCwwICsxLDczIEBACitTRUxFQ1QgcmVsLm9pZCwgcmVsLnJlbG5hbWUgQVMgbmFtZSwgcmVs LnJlbHRhYmxlc3BhY2UgQVMgc3Bjb2lkLHJlbC5yZWxhY2wgQVMgcmVsYWNsX3N0ciwKKyAgKENB U0UgV0hFTiBsZW5ndGgoc3BjLnNwY25hbWUpID4gMCBUSEVOIHNwYy5zcGNuYW1lIEVMU0UKKyAg ICAoU0VMRUNUIHNwLnNwY25hbWUgRlJPTSBwZ19kYXRhYmFzZSBkdGIKKyAgICBKT0lOIHBnX3Rh Ymxlc3BhY2Ugc3AgT04gZHRiLmRhdHRhYmxlc3BhY2U9c3Aub2lkCisgICAgV0hFUkUgZHRiLm9p ZCA9IHt7IGRpZCB9fTo6b2lkKQorICBFTkQpIGFzIHNwY25hbWUsCisgIChzZWxlY3QgbnNwbmFt ZSBGUk9NIHBnX25hbWVzcGFjZSBXSEVSRSBvaWQgPSB7e3NjaWR9fTo6b2lkICkgYXMgc2NoZW1h LAorICBwZ19nZXRfdXNlcmJ5aWQocmVsLnJlbG93bmVyKSBBUyByZWxvd25lciwgcmVsLnJlbGhh c29pZHMsIHJlbC5yZWxraW5kLAorICAoQ0FTRSBXSEVOIHJlbC5yZWxraW5kID0gJ3AnIFRIRU4g dHJ1ZSBFTFNFIGZhbHNlIEVORCkgQVMgaXNfcGFydGl0aW9uZWQsCisgIHJlbC5yZWxoYXNzdWJj bGFzcywgcmVsLnJlbHR1cGxlcywgZGVzLmRlc2NyaXB0aW9uLCBjb24uY29ubmFtZSwgY29uLmNv bmtleSwKKwlFWElTVFMoc2VsZWN0IDEgRlJPTSBwZ190cmlnZ2VyCisJCQlKT0lOIHBnX3Byb2Mg cHQgT04gcHQub2lkPXRnZm9pZCBBTkQgcHQucHJvbmFtZT0nbG9ndHJpZ2dlcicKKwkJCUpPSU4g cGdfcHJvYyBwYyBPTiBwYy5wcm9uYW1lc3BhY2U9cHQucHJvbmFtZXNwYWNlIEFORCBwYy5wcm9u YW1lPSdzbG9ueXZlcnNpb24nCisJCQlXSEVSRSB0Z3JlbGlkPXJlbC5vaWQpIEFTIGlzcmVwbCwK KwkoU0VMRUNUIGNvdW50KCopIEZST00gcGdfdHJpZ2dlciBXSEVSRSB0Z3JlbGlkPXJlbC5vaWQg QU5EIHRnaXNpbnRlcm5hbCA9IEZBTFNFKSBBUyB0cmlnZ2VyY291bnQsCisJKFNFTEVDVCBBUlJB WShTRUxFQ1QgQ0FTRSBXSEVOIChuc3BuYW1lIE5PVCBMSUtFIEUncGdcXyUnKSBUSEVOCisgICAg ICAgICAgICBxdW90ZV9pZGVudChuc3BuYW1lKXx8Jy4nfHxxdW90ZV9pZGVudChjLnJlbG5hbWUp CisgICAgICAgICAgICBFTFNFIHF1b3RlX2lkZW50KGMucmVsbmFtZSkgRU5EIEFTIGluaGVyaXRl ZF90YWJsZXMKKyAgICBGUk9NIHBnX2luaGVyaXRzIGkKKyAgICBKT0lOIHBnX2NsYXNzIGMgT04g Yy5vaWQgPSBpLmluaHBhcmVudAorICAgIEpPSU4gcGdfbmFtZXNwYWNlIG4gT04gbi5vaWQ9Yy5y ZWxuYW1lc3BhY2UKKyAgICBXSEVSRSBpLmluaHJlbGlkID0gcmVsLm9pZCBPUkRFUiBCWSBpbmhz ZXFubykpIEFTIGNvbGxfaW5oZXJpdHMsCisgIChTRUxFQ1QgY291bnQoKikKKwkJRlJPTSBwZ19p bmhlcml0cyBpCisgICAgICBKT0lOIHBnX2NsYXNzIGMgT04gYy5vaWQgPSBpLmluaHBhcmVudAor ICAgICAgSk9JTiBwZ19uYW1lc3BhY2UgbiBPTiBuLm9pZD1jLnJlbG5hbWVzcGFjZQorCQlXSEVS RSBpLmluaHJlbGlkID0gcmVsLm9pZCkgQVMgaW5oZXJpdGVkX3RhYmxlc19jbnQsCisJKENBU0Ug V0hFTiByZWwucmVscGVyc2lzdGVuY2UgPSAndScgVEhFTiB0cnVlIEVMU0UgZmFsc2UgRU5EKSBB UyByZWxwZXJzaXN0ZW5jZSwKKwlzdWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHJlbC5yZWxvcHRp b25zLCAnLCcpIEZST00gJ2ZpbGxmYWN0b3I9KFswLTldKiknKSBBUyBmaWxsZmFjdG9yLAorCShD QVNFIFdIRU4gKHN1YnN0cmluZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcsJykg RlJPTSAnYXV0b3ZhY3V1bV9lbmFibGVkPShbYS16fDAtOV0qKScpID0gJ3RydWUnKQorCSAgVEhF TiB0cnVlIEVMU0UgZmFsc2UgRU5EKSBBUyBhdXRvdmFjdXVtX2VuYWJsZWQsCisJc3Vic3RyaW5n KGFycmF5X3RvX3N0cmluZyhyZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX3Zh Y3V1bV90aHJlc2hvbGQ9KFswLTldKiknKSBBUyBhdXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQs CisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhyZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdh dXRvdmFjdXVtX3ZhY3V1bV9zY2FsZV9mYWN0b3I9KFswLTldKlsuXVswLTldKiknKSBBUyBhdXRv dmFjdXVtX3ZhY3V1bV9zY2FsZV9mYWN0b3IsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhy ZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2FuYWx5emVfdGhyZXNob2xkPShb MC05XSopJykgQVMgYXV0b3ZhY3V1bV9hbmFseXplX3RocmVzaG9sZCwKKwlzdWJzdHJpbmcoYXJy YXlfdG9fc3RyaW5nKHJlbC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fYW5hbHl6 ZV9zY2FsZV9mYWN0b3I9KFswLTldKlsuXVswLTldKiknKSBBUyBhdXRvdmFjdXVtX2FuYWx5emVf c2NhbGVfZmFjdG9yLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMs ICcsJykgRlJPTSAnYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9kZWxheT0oWzAtOV0qKScpIEFTIGF1 dG92YWN1dW1fdmFjdXVtX2Nvc3RfZGVsYXksCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhy ZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX3ZhY3V1bV9jb3N0X2xpbWl0PShb MC05XSopJykgQVMgYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9saW1pdCwKKwlzdWJzdHJpbmcoYXJy YXlfdG9fc3RyaW5nKHJlbC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fZnJlZXpl X21pbl9hZ2U9KFswLTldKiknKSBBUyBhdXRvdmFjdXVtX2ZyZWV6ZV9taW5fYWdlLAorCXN1YnN0 cmluZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1 bV9mcmVlemVfbWF4X2FnZT0oWzAtOV0qKScpIEFTIGF1dG92YWN1dW1fZnJlZXplX21heF9hZ2Us CisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyhyZWwucmVsb3B0aW9ucywgJywnKSBGUk9NICdh dXRvdmFjdXVtX2ZyZWV6ZV90YWJsZV9hZ2U9KFswLTldKiknKSBBUyBhdXRvdmFjdXVtX2ZyZWV6 ZV90YWJsZV9hZ2UsCisJKENBU0UgV0hFTiAoc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3Qu cmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2VuYWJsZWQ9KFthLXp8MC05XSopJykg PSAgJ3RydWUnKQorCSAgVEhFTiB0cnVlIEVMU0UgZmFsc2UgRU5EKSBBUyB0b2FzdF9hdXRvdmFj dXVtX2VuYWJsZWQsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3QucmVsb3B0aW9ucywg JywnKSBGUk9NICdhdXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQ9KFswLTldKiknKSBBUyB0b2Fz dF9hdXRvdmFjdXVtX3ZhY3V1bV90aHJlc2hvbGQsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmlu Zyh0c3QucmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX3ZhY3V1bV9zY2FsZV9mYWN0 b3I9KFswLTldKlsuXVswLTldKiknKSBBUyB0b2FzdF9hdXRvdmFjdXVtX3ZhY3V1bV9zY2FsZV9m YWN0b3IsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3QucmVsb3B0aW9ucywgJywnKSBG Uk9NICdhdXRvdmFjdXVtX2FuYWx5emVfdGhyZXNob2xkPShbMC05XSopJykgQVMgdG9hc3RfYXV0 b3ZhY3V1bV9hbmFseXplX3RocmVzaG9sZCwKKwlzdWJzdHJpbmcoYXJyYXlfdG9fc3RyaW5nKHRz dC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fYW5hbHl6ZV9zY2FsZV9mYWN0b3I9 KFswLTldKlsuXVswLTldKiknKSBBUyB0b2FzdF9hdXRvdmFjdXVtX2FuYWx5emVfc2NhbGVfZmFj dG9yLAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlvbnMsICcsJykgRlJP TSAnYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9kZWxheT0oWzAtOV0qKScpIEFTIHRvYXN0X2F1dG92 YWN1dW1fdmFjdXVtX2Nvc3RfZGVsYXksCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3Qu cmVsb3B0aW9ucywgJywnKSBGUk9NICdhdXRvdmFjdXVtX3ZhY3V1bV9jb3N0X2xpbWl0PShbMC05 XSopJykgQVMgdG9hc3RfYXV0b3ZhY3V1bV92YWN1dW1fY29zdF9saW1pdCwKKwlzdWJzdHJpbmco YXJyYXlfdG9fc3RyaW5nKHRzdC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fZnJl ZXplX21pbl9hZ2U9KFswLTldKiknKSBBUyB0b2FzdF9hdXRvdmFjdXVtX2ZyZWV6ZV9taW5fYWdl LAorCXN1YnN0cmluZyhhcnJheV90b19zdHJpbmcodHN0LnJlbG9wdGlvbnMsICcsJykgRlJPTSAn YXV0b3ZhY3V1bV9mcmVlemVfbWF4X2FnZT0oWzAtOV0qKScpIEFTIHRvYXN0X2F1dG92YWN1dW1f ZnJlZXplX21heF9hZ2UsCisJc3Vic3RyaW5nKGFycmF5X3RvX3N0cmluZyh0c3QucmVsb3B0aW9u cywgJywnKSBGUk9NICdhdXRvdmFjdXVtX2ZyZWV6ZV90YWJsZV9hZ2U9KFswLTldKiknKSBBUyB0 b2FzdF9hdXRvdmFjdXVtX2ZyZWV6ZV90YWJsZV9hZ2UsCisJYXJyYXlfdG9fc3RyaW5nKHJlbC5y ZWxvcHRpb25zLCAnLCcpIEFTIHRhYmxlX3ZhY3V1bV9zZXR0aW5nc19zdHIsCisJYXJyYXlfdG9f c3RyaW5nKHRzdC5yZWxvcHRpb25zLCAnLCcpIEFTIHRvYXN0X3RhYmxlX3ZhY3V1bV9zZXR0aW5n c19zdHIsCisJcmVsLnJlbG9wdGlvbnMgQVMgcmVsb3B0aW9ucywgdHN0LnJlbG9wdGlvbnMgQVMg dG9hc3RfcmVsb3B0aW9ucywgcmVsLnJlbG9mdHlwZSwgdHlwLnR5cG5hbWUsCisJKENBU0UgV0hF TiByZWwucmVsdG9hc3RyZWxpZCA9IDAgVEhFTiBmYWxzZSBFTFNFIHRydWUgRU5EKSBBUyBoYXN0 b2FzdHRhYmxlLAorICAgIC0tIEFkZGVkIGZvciBwZ0FkbWluNAorCShDQVNFIFdIRU4gKHN1YnN0 cmluZyhhcnJheV90b19zdHJpbmcocmVsLnJlbG9wdGlvbnMsICcsJykgRlJPTSAnYXV0b3ZhY3V1 bV9lbmFibGVkPShbYS16fDAtOV0qKScpKTo6Ym9vbGVhbiAgVEhFTiB0cnVlIEVMU0UgZmFsc2Ug RU5EKSBBUyBhdXRvdmFjdXVtX2N1c3RvbSwKKwkoQ0FTRSBXSEVOIChzdWJzdHJpbmcoYXJyYXlf dG9fc3RyaW5nKHRzdC5yZWxvcHRpb25zLCAnLCcpIEZST00gJ2F1dG92YWN1dW1fZW5hYmxlZD0o W2EtenwwLTldKiknKSk6OmJvb2xlYW4gIEFORCByZWwucmVsdG9hc3RyZWxpZCAhPSAwIFRIRU4g dHJ1ZSBFTFNFIGZhbHNlIEVORCkgQVMgdG9hc3RfYXV0b3ZhY3V1bSwKKworCShTRUxFQ1QgYXJy YXlfYWdnKHByb3ZpZGVyIHx8ICc9JyB8fCBsYWJlbCkgRlJPTSBwZ19zZWNsYWJlbHMgc2wxIFdI RVJFIHNsMS5vYmpvaWQ9cmVsLm9pZCBBTkQgc2wxLm9ianN1YmlkPTApIEFTIHNlY2xhYmVscywK KwkoQ0FTRSBXSEVOIHJlbC5vaWQgPD0ge3sgZGF0bGFzdHN5c29pZH19OjpvaWQgVEhFTiB0cnVl IEVsU0UgZmFsc2UgRU5EKSBBUyBpc19zeXNfdGFibGUKKwktLSBBZGRlZCBmb3IgcGFydGl0aW9u IHRhYmxlCisgICAgeyUgaWYgdGlkICV9LCAoQ0FTRSBXSEVOIHJlbC5yZWxraW5kID0gJ3AnIFRI RU4gcGdfZ2V0X3BhcnRrZXlkZWYoe3sgdGlkIH19OjpvaWQpIEVMU0UgJycgRU5EKSBBUyBwYXJ0 aXRpb25fc2NoZW1lIHslIGVuZGlmICV9CitGUk9NIHBnX2NsYXNzIHJlbAorICBMRUZUIE9VVEVS IEpPSU4gcGdfdGFibGVzcGFjZSBzcGMgb24gc3BjLm9pZD1yZWwucmVsdGFibGVzcGFjZQorICBM RUZUIE9VVEVSIEpPSU4gcGdfZGVzY3JpcHRpb24gZGVzIE9OIChkZXMub2Jqb2lkPXJlbC5vaWQg QU5EIGRlcy5vYmpzdWJpZD0wIEFORCBkZXMuY2xhc3NvaWQ9J3BnX2NsYXNzJzo6cmVnY2xhc3Mp CisgIExFRlQgT1VURVIgSk9JTiBwZ19jb25zdHJhaW50IGNvbiBPTiBjb24uY29ucmVsaWQ9cmVs Lm9pZCBBTkQgY29uLmNvbnR5cGU9J3AnCisgIExFRlQgT1VURVIgSk9JTiBwZ19jbGFzcyB0c3Qg T04gdHN0Lm9pZCA9IHJlbC5yZWx0b2FzdHJlbGlkCisgIExFRlQgSk9JTiBwZ190eXBlIHR5cCBP TiByZWwucmVsb2Z0eXBlPXR5cC5vaWQKK1dIRVJFIHJlbC5yZWxraW5kIElOICgncicsJ3MnLCd0 JywncCcpIEFORCByZWwucmVsbmFtZXNwYWNlID0ge3sgc2NpZCB9fTo6b2lkCitBTkQgTk9UIHJl bC5yZWxpc3BhcnRpdGlvbgoreyUgaWYgdGlkICV9ICBBTkQgcmVsLm9pZCA9IHt7IHRpZCB9fTo6 b2lkIHslIGVuZGlmICV9CitPUkRFUiBCWSByZWwucmVsbmFtZTsKZGlmZiAtLWdpdCBhL3dlYi9w Z2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3Rh Ymxlcy90ZW1wbGF0ZXMvdGFibGUvc3FsL2RlZmF1bHQvY3JlYXRlLnNxbCBiL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90 ZW1wbGF0ZXMvdGFibGUvc3FsL2RlZmF1bHQvY3JlYXRlLnNxbAppbmRleCBmOGU4NThmLi41ZWM4 ZmZjIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVy cy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL3RhYmxlL3NxbC9kZWZhdWx0L2Ny ZWF0ZS5zcWwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy90YWJsZS9zcWwvZGVmYXVsdC9jcmVh dGUuc3FsCkBAIC01Nyw3ICs1Nyw4IEBAIENSRUFURSB7JSBpZiBkYXRhLnJlbHBlcnNpc3RlbmNl ICV9VU5MT0dHRUQgeyUgZW5kaWYgJX1UQUJMRSB7e2Nvbm58cXRJZGVudChkYXRhCiB7e0NPTlNU UkFJTlRTLkVYQ0xVREUoY29ubiwgZGF0YS5leGNsdWRlX2NvbnN0cmFpbnQpfX17JSBlbmRpZiAl fQogeyUgaWYgZGF0YS5saWtlX3JlbGF0aW9uIG9yIGRhdGEuY29sbF9pbmhlcml0cyBvciBkYXRh LmNvbHVtbnN8bGVuZ3RoID4gMCBvciBkYXRhLnByaW1hcnlfa2V5fGxlbmd0aCA+IDAgb3IgZGF0 YS51bmlxdWVfY29uc3RyYWludHxsZW5ndGggPiAwIG9yIGRhdGEuZm9yZWlnbl9rZXl8bGVuZ3Ro ID4gMCBvciBkYXRhLmNoZWNrX2NvbnN0cmFpbnR8bGVuZ3RoID4gMCBvciBkYXRhLmV4Y2x1ZGVf Y29uc3RyYWludHxsZW5ndGggPiAwICV9CiAKLSkKKyl7JSBpZiBkYXRhLnJlbGtpbmQgaXMgZGVm aW5lZCBhbmQgZGF0YS5yZWxraW5kID09ICdwJyAlfSBQQVJUSVRJT04gQlkge3sgZGF0YS5wYXJ0 aXRpb25fc2NoZW1lIH19IHslIGVuZGlmICV9CisKIHslIGVuZGlmICV9CiB7IyMjIElmIHdlIGFy ZSBpbmhlcml0aW5nIGl0IGZyb20gYW5vdGhlciB0YWJsZShzKSAjIyN9CiB7JSBpZiBkYXRhLmNv bGxfaW5oZXJpdHMgJX0KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dy b3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90cmlnZ2Vycy90ZW1wbGF0ZXMv dHJpZ2dlci9qcy90cmlnZ2VyLmpzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RyaWdnZXJzL3RlbXBsYXRlcy90cmln Z2VyL2pzL3RyaWdnZXIuanMKaW5kZXggNzcxNmI4Ny4uODA3YTI2NCAxMDA2NDQKLS0tIGEvd2Vi L3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMv dGFibGVzL3RyaWdnZXJzL3RlbXBsYXRlcy90cmlnZ2VyL2pzL3RyaWdnZXIuanMKKysrIGIvd2Vi L3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMv dGFibGVzL3RyaWdnZXJzL3RlbXBsYXRlcy90cmlnZ2VyL2pzL3RyaWdnZXIuanMKQEAgLTIwMSw2 ICsyMDEsMTcgQEAgZGVmaW5lKCdwZ2FkbWluLm5vZGUudHJpZ2dlcicsIFsKICAgICAgICAgICBt b2RlOiBbJ2NyZWF0ZScsJ2VkaXQnLCAncHJvcGVydGllcyddLAogICAgICAgICAgIGRlcHM6IFsn aXNfY29uc3RyYWludF90cmlnZ2VyJ10sCiAgICAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9uKG0p IHsKKyAgICAgICAgICAgIC8vIERpc2FibGVkIGlmIHRhYmxlIGlzIGEgcGFydGl0aW9uZWQgdGFi bGUuCisgICAgICAgICAgICBpZiAoXy5oYXMobSwgJ25vZGVfaW5mbycpICYmIF8uaGFzKG0ubm9k ZV9pbmZvLCAndGFibGUnKSAmJgorICAgICAgICAgICAgICAgIF8uaGFzKG0ubm9kZV9pbmZvLnRh YmxlLCAnaXNfcGFydGl0aW9uZWQnKSAmJiBtLm5vZGVfaW5mby50YWJsZS5pc19wYXJ0aXRpb25l ZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpewor ICAgICAgICAgICAgICAgICAgbS5zZXQoJ2lzX3Jvd190cmlnZ2VyJywgZmFsc2UpOworICAgICAg ICAgICAgICB9LDEwKTsKKworICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg IH0KKwogICAgICAgICAgICAgLy8gSWYgY29uc3RyYWludCB0cmlnZ2VyIGlzIHNldCB0byBUcnVl IHRoZW4gcm93IHRyaWdnZXIgd2lsbAogICAgICAgICAgICAgLy8gYXV0b21hdGljYWxseSBzZXQg dG8gVHJ1ZSBhbmQgYmVjb21lcyBkaXNhYmxlCiAgICAgICAgICAgICB2YXIgaXNfY29uc3RyYWlu dF90cmlnZ2VyID0gbS5nZXQoJ2lzX2NvbnN0cmFpbnRfdHJpZ2dlcicpOwpAQCAtMjI3LDcgKzIz OCwxOSBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS50cmlnZ2VyJywgWwogICAgICAgICAgIGlkOiAn aXNfY29uc3RyYWludF90cmlnZ2VyJywgbGFiZWw6IGdldHRleHQoJ0NvbnN0cmFpbnQgdHJpZ2dl cj8nKSwKICAgICAgICAgICB0eXBlOiAnc3dpdGNoJywgZGlzYWJsZWQ6ICdpblNjaGVtYVdpdGhN b2RlbENoZWNrJywKICAgICAgICAgICBtb2RlOiBbJ2NyZWF0ZScsJ2VkaXQnLCAncHJvcGVydGll cyddLAotICAgICAgICAgIGdyb3VwOiBnZXR0ZXh0KCdEZWZpbml0aW9uJykKKyAgICAgICAgICBn cm91cDogZ2V0dGV4dCgnRGVmaW5pdGlvbicpLAorICAgICAgICAgIGRpc2FibGVkOiBmdW5jdGlv bihtKSB7CisgICAgICAgICAgICAvLyBEaXNhYmxlZCBpZiB0YWJsZSBpcyBhIHBhcnRpdGlvbmVk IHRhYmxlLgorICAgICAgICAgICAgaWYgKF8uaGFzKG0sICdub2RlX2luZm8nKSAmJiBfLmhhcyht Lm5vZGVfaW5mbywgJ3RhYmxlJykgJiYKKyAgICAgICAgICAgICAgICBfLmhhcyhtLm5vZGVfaW5m by50YWJsZSwgJ2lzX3BhcnRpdGlvbmVkJykgJiYgbS5ub2RlX2luZm8udGFibGUuaXNfcGFydGl0 aW9uZWQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24o KXsKKyAgICAgICAgICAgICAgICAgIG0uc2V0KCdpc19jb25zdHJhaW50X3RyaWdnZXInLCBmYWxz ZSk7CisgICAgICAgICAgICAgIH0sMTApOworCisgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor ICAgICAgICAgICAgfQorICAgICAgICAgIH0KICAgICAgICAgfSx7CiAgICAgICAgICAgaWQ6ICd0 Z2RlZmVycmFibGUnLCBsYWJlbDogZ2V0dGV4dCgnRGVmZXJyYWJsZT8nKSwKICAgICAgICAgICB0 eXBlOiAnc3dpdGNoJywgZ3JvdXA6IGdldHRleHQoJ0RlZmluaXRpb24nKSwKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hl bWFzL3RhYmxlcy91dGlscy5weSBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9z ZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5iZTgwZWE2Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRt aW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVz L3V0aWxzLnB5CkBAIC0wLDAgKzEsMTA4MCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdB ZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE3 LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29mdHdhcmUgaXMgcmVsZWFz ZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwor IiIiIEltcGxlbWVudHMgVXRpbGl0eSBjbGFzcyBmb3IgVGFibGUgYW5kIFBhcnRpdGlvbmVkIFRh YmxlLiAiIiIKKworaW1wb3J0IHJlCitmcm9tIGZ1bmN0b29scyBpbXBvcnQgd3JhcHMKK2Zyb20g Zmxhc2sgaW1wb3J0IHJlbmRlcl90ZW1wbGF0ZQorZnJvbSBmbGFza19iYWJlbCBpbXBvcnQgZ2V0 dGV4dAorZnJvbSBwZ2FkbWluLnV0aWxzLmFqYXggaW1wb3J0IG1ha2VfanNvbl9yZXNwb25zZSwg aW50ZXJuYWxfc2VydmVyX2Vycm9yLCBcCisgICAgbWFrZV9yZXNwb25zZSBhcyBhamF4X3Jlc3Bv bnNlLCBnb25lCitmcm9tIHBnYWRtaW4uYnJvd3Nlci5zZXJ2ZXJfZ3JvdXBzLnNlcnZlcnMuZGF0 YWJhc2VzLnNjaGVtYXMudXRpbHMgXAorICAgIGltcG9ydCBEYXRhVHlwZVJlYWRlciwgdHJpZ2dl cl9kZWZpbml0aW9uLCBwYXJzZV9ydWxlX2RlZmluaXRpb24KK2Zyb20gcGdhZG1pbi5icm93c2Vy LnNlcnZlcl9ncm91cHMuc2VydmVycy51dGlscyBpbXBvcnQgcGFyc2VfcHJpdl9mcm9tX2RiLCBc CisgICAgcGFyc2VfcHJpdl90b19kYgorZnJvbSBwZ2FkbWluLmJyb3dzZXIudXRpbHMgaW1wb3J0 IFBHQ2hpbGROb2RlVmlldworZnJvbSBwZ2FkbWluLnV0aWxzLmRyaXZlciBpbXBvcnQgZ2V0X2Ry aXZlcgorZnJvbSBjb25maWcgaW1wb3J0IFBHX0RFRkFVTFRfRFJJVkVSCisKKworY2xhc3MgQmFz ZVRhYmxlVmlldyhQR0NoaWxkTm9kZVZpZXcpOgorICAgICIiIgorICAgIFRoaXMgY2xhc3MgaXMg YmFzZSBjbGFzcyBmb3IgdGFibGVzIGFuZCBwYXJ0aXRpb25lZCB0YWJsZXMuCisKKyAgICBNZXRo b2RzOgorICAgIC0tLS0tLS0KKyAgICAqIGNoZWNrX3ByZWNvbmRpdGlvbigpCisgICAgICAtIFRo aXMgZnVuY3Rpb24gd2lsbCBiZWhhdmUgYXMgYSBkZWNvcmF0b3Igd2hpY2ggd2lsbCBjaGVja3MK KyAgICAgICAgZGF0YWJhc2UgY29ubmVjdGlvbiBiZWZvcmUgcnVubmluZyB2aWV3LCBpdCB3aWxs IGFsc28gYXR0YWNoZXMKKyAgICAgICAgbWFuYWdlcixjb25uICYgdGVtcGxhdGVfcGF0aCBwcm9w ZXJ0aWVzIHRvIHNlbGYKKworICAgICogX2Zvcm1hdHRlcihkYXRhLCB0aWQpCisgICAgICAtIEl0 IHdpbGwgcmV0dXJuIGZvcm1hdHRlZCBvdXRwdXQgb2YgcXVlcnkgcmVzdWx0CisgICAgICAgIGFz IHBlciBjbGllbnQgbW9kZWwgZm9ybWF0CisgICAgICAgIAorICAgICogX2NvbHVtbnNfZm9ybWF0 dGVyKHRpZCwgZGF0YSk6CisgICAgICAtIEl0IHdpbGwgcmV0dXJuIGZvcm1hdHRlZCBvdXRwdXQg b2YgcXVlcnkgcmVzdWx0CisgICAgICAgIGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0IGZvciBj b2x1bW4gbm9kZQorCisgICAgKiBfaW5kZXhfY29uc3RyYWludHNfZm9ybWF0dGVyKHNlbGYsIGRp ZCwgdGlkLCBkYXRhKToKKyAgICAgIC0gSXQgd2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBv ZiBxdWVyeSByZXN1bHQKKyAgICAgICAgYXMgcGVyIGNsaWVudCBtb2RlbCBmb3JtYXQgZm9yIGlu ZGV4IGNvbnN0cmFpbnQgbm9kZQorCisgICAgKiBfY2x0eXBlX2Zvcm1hdHRlcih0eXBlKTogKHN0 YXRpY21ldGhvZCkKKyAgICAgIC0gV2UgbmVlZCB0byByZW1vdmUgW10gZnJvbSB0eXBlIGFuZCBh cHBlbmQgaXQKKyAgICAgICAgYWZ0ZXIgbGVuZ3RoL3ByZWNpc2lvbiBzbyB3ZSB3aWxsIHNlbmQg ZmxhZyBmb3IKKyAgICAgICAgc3FsIHRlbXBsYXRlLgorCisgICAgKiBnZXRfdGFibGVfZGVwZW5k ZW50cyhzZWxmLCB0aWQpOgorICAgICAgLSBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgZGVwZW5kZW50 cyBhbmQgcmV0dXJuIGFqYXggcmVzcG9uc2UKKyAgICAgICAgZm9yIHRoZSB0YWJsZSBub2RlLgor CisgICAgKiBnZXRfdGFibGVfZGVwZW5kZW5jaWVzKHNlbGYsIHRpZCk6CisgICAgICAtIFRoaXMg ZnVuY3Rpb24gZ2V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJldHVybiBhamF4IHJlc3BvbnNlCisg ICAgICAgIGZvciB0aGUgdGFibGUgbm9kZS4KKworICAgICogZ2V0X3RhYmxlX3N0YXRpc3RpY3Mo c2VsZiwgdGlkKToKKyAgICAgIC0gUmV0dXJucyB0aGUgc3RhdGlzdGljcyBmb3IgYSBwYXJ0aWN1 bGFyIHRhYmxlIGlmIHRpZCBpcyBzcGVjaWZpZWQsCisgICAgICAgIG90aGVyd2lzZSBpdCB3aWxs IHJldHVybiBzdGF0aXN0aWNzIGZvciBhbGwgdGhlIHRhYmxlcyBpbiB0aGF0CisgICAgICAgIHNj aGVtYS4KKyAgICAqIGdldF9yZXZlcnNlX2VuZ2luZWVyZWRfc3FsKHNlbGYsIGRpZCwgc2NpZCwg dGlkLCBtYWluX3NxbCwgZGF0YSk6CisgICAgICAtIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGVz IHJldmVyc2UgZW5naW5lZXJlZCBzcWwgZm9yCisgICAgICAgIHRoZSB0YWJsZSBvYmplY3QuCisg ICAgCisgICAgKiByZXNldF9zdGF0aXN0aWNzKHNlbGYsIHNjaWQsIHRpZCk6CisgICAgICAtIFRo aXMgZnVuY3Rpb24gd2lsbCByZXNldCBzdGF0aXN0aWNzIG9mIHRhYmxlLgorICAgICIiIgorICAg IEBzdGF0aWNtZXRob2QKKyAgICBkZWYgY2hlY2tfcHJlY29uZGl0aW9uKGYpOgorICAgICAgICAi IiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGJlaGF2ZSBhcyBhIGRlY29yYXRvciB3aGlj aCB3aWxsIGNoZWNrcworICAgICAgICBkYXRhYmFzZSBjb25uZWN0aW9uIGJlZm9yZSBydW5uaW5n IHZpZXcsIGl0IHdpbGwgYWxzbyBhdHRhY2hlcworICAgICAgICBtYW5hZ2VyLGNvbm4gJiB0ZW1w bGF0ZV9wYXRoIHByb3BlcnRpZXMgdG8gc2VsZgorICAgICAgICAiIiIKKworICAgICAgICBAd3Jh cHMoZikKKyAgICAgICAgZGVmIHdyYXAoKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgICAgICMg SGVyZSBhcmdzWzBdIHdpbGwgaG9sZCBzZWxmICYga3dhcmdzIHdpbGwgaG9sZCBnaWQsc2lkLGRp ZAorICAgICAgICAgICAgc2VsZiA9IGFyZ3NbMF0KKyAgICAgICAgICAgIGRyaXZlciA9IGdldF9k cml2ZXIoUEdfREVGQVVMVF9EUklWRVIpCisgICAgICAgICAgICBkaWQgPSBrd2FyZ3NbJ2RpZCdd CisgICAgICAgICAgICBzZWxmLm1hbmFnZXIgPSBkcml2ZXIuY29ubmVjdGlvbl9tYW5hZ2VyKGt3 YXJnc1snc2lkJ10pCisgICAgICAgICAgICBzZWxmLmNvbm4gPSBzZWxmLm1hbmFnZXIuY29ubmVj dGlvbihkaWQ9a3dhcmdzWydkaWQnXSkKKyAgICAgICAgICAgIHNlbGYucXRJZGVudCA9IGRyaXZl ci5xdElkZW50CisgICAgICAgICAgICBzZWxmLnF0VHlwZUlkZW50ID0gZHJpdmVyLnF0VHlwZUlk ZW50CisgICAgICAgICAgICAjIFdlIG5lZWQgZGF0bGFzdHN5c29pZCB0byBjaGVjayBpZiBjdXJy ZW50IHRhYmxlIGlzIHN5c3RlbSB0YWJsZQorICAgICAgICAgICAgc2VsZi5kYXRsYXN0c3lzb2lk ID0gc2VsZi5tYW5hZ2VyLmRiX2luZm9bCisgICAgICAgICAgICAgICAgZGlkCisgICAgICAgICAg ICBdWydkYXRsYXN0c3lzb2lkJ10gaWYgc2VsZi5tYW5hZ2VyLmRiX2luZm8gaXMgbm90IE5vbmUg YW5kIFwKKyAgICAgICAgICAgICAgICBkaWQgaW4gc2VsZi5tYW5hZ2VyLmRiX2luZm8gZWxzZSAw CisKKyAgICAgICAgICAgIHZlciA9IHNlbGYubWFuYWdlci52ZXJzaW9uCisgICAgICAgICAgICAj IFNldCB0aGUgdGVtcGxhdGUgcGF0aCBmb3IgdGhlIFNRTCBzY3JpcHRzCisgICAgICAgICAgICBz ZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGggPSAndGFibGUvc3FsLyN7MH0jJy5mb3JtYXQodmVyKQor ICAgICAgICAgICAgc2VsZi5wYXJ0aXRpb25fdGVtcGxhdGVfcGF0aCA9ICdwYXJ0aXRpb24vc3Fs LyN7MH0jJy5mb3JtYXQodmVyKQorCisgICAgICAgICAgICAjIFRlbXBsYXRlIGZvciBDb2x1bW4g LGNoZWNrIGNvbnN0cmFpbnQgYW5kIGV4Y2x1c2lvbgorICAgICAgICAgICAgIyBjb25zdHJhaW50 IG5vZGUKKyAgICAgICAgICAgIHNlbGYuY29sdW1uX3RlbXBsYXRlX3BhdGggPSAnY29sdW1uL3Nx bC8jezB9IycuZm9ybWF0KHZlcikKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfY29uc3RyYWludF90 ZW1wbGF0ZV9wYXRoID0gXAorICAgICAgICAgICAgICAgICdjaGVja19jb25zdHJhaW50L3NxbC8j ezB9IycuZm9ybWF0KHZlcikKKyAgICAgICAgICAgIHNlbGYuZXhjbHVzaW9uX2NvbnN0cmFpbnRf dGVtcGxhdGVfcGF0aCA9IFwKKyAgICAgICAgICAgICAgICAnZXhjbHVzaW9uX2NvbnN0cmFpbnQv c3FsLyN7MH0jJy5mb3JtYXQodmVyKQorCisgICAgICAgICAgICAjIFRlbXBsYXRlIGZvciBQSyAm IFVuaXF1ZSBjb25zdHJhaW50IG5vZGUKKyAgICAgICAgICAgIHNlbGYuaW5kZXhfY29uc3RyYWlu dF90ZW1wbGF0ZV9wYXRoID0gJ2luZGV4X2NvbnN0cmFpbnQvc3FsJworCisgICAgICAgICAgICAj IFRlbXBsYXRlIGZvciBmb3JlaWduIGtleSBjb25zdHJhaW50IG5vZGUKKyAgICAgICAgICAgIHNl bGYuZm9yZWlnbl9rZXlfdGVtcGxhdGVfcGF0aCA9ICdmb3JlaWduX2tleS9zcWwvI3swfSMnLmZv cm1hdCh2ZXIpCisKKyAgICAgICAgICAgICMgVGVtcGxhdGUgZm9yIGluZGV4IG5vZGUKKyAgICAg ICAgICAgIHNlbGYuaW5kZXhfdGVtcGxhdGVfcGF0aCA9ICdpbmRleC9zcWwvI3swfSMnLmZvcm1h dCh2ZXIpCisKKyAgICAgICAgICAgICMgVGVtcGxhdGUgZm9yIHRyaWdnZXIgbm9kZQorICAgICAg ICAgICAgc2VsZi50cmlnZ2VyX3RlbXBsYXRlX3BhdGggPSAndHJpZ2dlci9zcWwvI3swfSMnLmZv cm1hdCh2ZXIpCisKKyAgICAgICAgICAgICMgVGVtcGxhdGUgZm9yIHJ1bGVzIG5vZGUKKyAgICAg ICAgICAgIHNlbGYucnVsZXNfdGVtcGxhdGVfcGF0aCA9ICdydWxlcy9zcWwnCisKKyAgICAgICAg ICAgICMgU3VwcG9ydGVkIEFDTCBmb3IgdGFibGUKKyAgICAgICAgICAgIHNlbGYuYWNsID0gWydh JywgJ3InLCAndycsICdkJywgJ0QnLCAneCcsICd0J10KKworICAgICAgICAgICAgIyBTdXBwb3J0 ZWQgQUNMIGZvciBjb2x1bW5zCisgICAgICAgICAgICBzZWxmLmNvbHVtbl9hY2wgPSBbJ2EnLCAn cicsICd3JywgJ3gnXQorCisgICAgICAgICAgICByZXR1cm4gZigqYXJncywgKiprd2FyZ3MpCisK KyAgICAgICAgcmV0dXJuIHdyYXAKKworICAgIGRlZiBfY29sdW1uc19mb3JtYXR0ZXIoc2VsZiwg dGlkLCBkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB0aWQ6 IFRhYmxlIE9JRAorICAgICAgICAgICAgZGF0YTogZGljdCBvZiBxdWVyeSByZXN1bHQKKworICAg ICAgICBSZXR1cm5zOgorICAgICAgICAgICAgSXQgd2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1 dCBvZiBxdWVyeSByZXN1bHQKKyAgICAgICAgICAgIGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0 IGZvciBjb2x1bW4gbm9kZQorICAgICAgICAiIiIKKyAgICAgICAgZm9yIGNvbHVtbiBpbiBkYXRh Wydjb2x1bW5zJ106CisKKyAgICAgICAgICAgICMgV2UgbmVlZCB0byBmb3JtYXQgdmFyaWFibGVz IGFjY29yZGluZyB0byBjbGllbnQganMgY29sbGVjdGlvbgorICAgICAgICAgICAgaWYgJ2F0dG9w dGlvbnMnIGluIGNvbHVtbiBhbmQgY29sdW1uWydhdHRvcHRpb25zJ10gaXMgbm90IE5vbmU6Cisg ICAgICAgICAgICAgICAgc3Bjb3B0aW9ucyA9IFtdCisgICAgICAgICAgICAgICAgZm9yIHNwY29w dGlvbiBpbiBjb2x1bW5bJ2F0dG9wdGlvbnMnXToKKyAgICAgICAgICAgICAgICAgICAgaywgdiA9 IHNwY29wdGlvbi5zcGxpdCgnPScpCisgICAgICAgICAgICAgICAgICAgIHNwY29wdGlvbnMuYXBw ZW5kKHsnbmFtZSc6IGssICd2YWx1ZSc6IHZ9KQorCisgICAgICAgICAgICAgICAgY29sdW1uWydh dHRvcHRpb25zJ10gPSBzcGNvcHRpb25zCisKKyAgICAgICAgICAgICMgTmVlZCB0byBmb3JtYXQg c2VjdXJpdHkgbGFiZWxzIGFjY29yZGluZyB0byBjbGllbnQganMgY29sbGVjdGlvbgorICAgICAg ICAgICAgaWYgJ3NlY2xhYmVscycgaW4gY29sdW1uIGFuZCBjb2x1bW5bJ3NlY2xhYmVscyddIGlz IG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHNlY2xhYmVscyA9IFtdCisgICAgICAgICAgICAg ICAgZm9yIHNlY2xibHMgaW4gY29sdW1uWydzZWNsYWJlbHMnXToKKyAgICAgICAgICAgICAgICAg ICAgaywgdiA9IHNlY2xibHMuc3BsaXQoJz0nKQorICAgICAgICAgICAgICAgICAgICBzZWNsYWJl bHMuYXBwZW5kKHsncHJvdmlkZXInOiBrLCAnbGFiZWwnOiB2fSkKKworICAgICAgICAgICAgICAg IGNvbHVtblsnc2VjbGFiZWxzJ10gPSBzZWNsYWJlbHMKKworICAgICAgICAgICAgaWYgJ2F0dG51 bScgaW4gY29sdW1uIGFuZCBjb2x1bW5bJ2F0dG51bSddIGlzIG5vdCBOb25lIFwKKyAgICAgICAg ICAgICAgICAgICAgYW5kIGNvbHVtblsnYXR0bnVtJ10gPiAwOgorICAgICAgICAgICAgICAgICMg V2UgbmVlZCB0byBwYXJzZSAmIGNvbnZlcnQgQUNMIGNvbWluZyBmcm9tIGRhdGFiYXNlIHRvCisg ICAgICAgICAgICAgICAgIyBqc29uIGZvcm1hdAorICAgICAgICAgICAgICAgIFNRTCA9IHJlbmRl cl90ZW1wbGF0ZSgiLyIuam9pbigKKyAgICAgICAgICAgICAgICAgICAgW3NlbGYuY29sdW1uX3Rl bXBsYXRlX3BhdGgsICdhY2wuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkLCBj bGlkPWNvbHVtblsnYXR0bnVtJ10KKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAg c3RhdHVzLCBhY2wgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKworICAgICAgICAgICAg ICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9z ZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9YWNsKQorCisgICAgICAgICAgICAgICAgIyBXZSB3aWxsIHNl dCBnZXQgcHJpdmlsZWdlcyBmcm9tIGFjbCBzcWwgc28gd2UgZG9uJ3QgbmVlZAorICAgICAgICAg ICAgICAgICMgaXQgZnJvbSBwcm9wZXJ0aWVzIHNxbAorICAgICAgICAgICAgICAgIGNvbHVtblsn YXR0YWNsJ10gPSBbXQorCisgICAgICAgICAgICAgICAgZm9yIHJvdyBpbiBhY2xbJ3Jvd3MnXToK KyAgICAgICAgICAgICAgICAgICAgcHJpdiA9IHBhcnNlX3ByaXZfZnJvbV9kYihyb3cpCisgICAg ICAgICAgICAgICAgICAgIGNvbHVtbi5zZXRkZWZhdWx0KHJvd1snZGVmdHlwZSddLCBbXSkuYXBw ZW5kKHByaXYpCisKKyAgICAgICAgICAgICAgICAjIHdlIGFyZSByZWNlaXZpbmcgcmVxdWVzdCB3 aGVuIGluIGVkaXQgbW9kZQorICAgICAgICAgICAgICAgICMgd2Ugd2lsbCBzZW5kIGZpbHRlcmVk IHR5cGVzIHJlbGF0ZWQgdG8gY3VycmVudCB0eXBlCisgICAgICAgICAgICAgICAgcHJlc2VudF90 eXBlID0gY29sdW1uWydjbHR5cGUnXQorCisgICAgICAgICAgICAgICAgdHlwZV9pZCA9IGNvbHVt blsnYXR0dHlwaWQnXQorCisgICAgICAgICAgICAgICAgZnVsbHR5cGUgPSBzZWxmLmdldF9mdWxs X3R5cGUoCisgICAgICAgICAgICAgICAgICAgIGNvbHVtblsndHlwbnNwbmFtZSddLCBjb2x1bW5b J3R5cG5hbWUnXSwKKyAgICAgICAgICAgICAgICAgICAgY29sdW1uWydpc2R1cCddLCBjb2x1bW5b J2F0dG5kaW1zJ10sIGNvbHVtblsnYXR0dHlwbW9kJ10KKyAgICAgICAgICAgICAgICApCisKKyAg ICAgICAgICAgICAgICBsZW5ndGggPSBGYWxzZQorICAgICAgICAgICAgICAgIHByZWNpc2lvbiA9 IEZhbHNlCisgICAgICAgICAgICAgICAgaWYgJ2VsZW1vaWQnIGluIGNvbHVtbjoKKyAgICAgICAg ICAgICAgICAgICAgbGVuZ3RoLCBwcmVjaXNpb24sIHR5cGV2YWwgPSBcCisgICAgICAgICAgICAg ICAgICAgICAgICBzZWxmLmdldF9sZW5ndGhfcHJlY2lzaW9uKGNvbHVtblsnZWxlbW9pZCddKQor CisgICAgICAgICAgICAgICAgIyBTZXQgbGVuZ3RoIGFuZCBwcmVjaXNpb24gdG8gTm9uZQorICAg ICAgICAgICAgICAgIGNvbHVtblsnYXR0bGVuJ10gPSBOb25lCisgICAgICAgICAgICAgICAgY29s dW1uWydhdHRwcmVjaXNpb24nXSA9IE5vbmUKKworICAgICAgICAgICAgICAgICMgSWYgd2UgaGF2 ZSBsZW5ndGggJiBwcmVjaXNpb24gYm90aAorICAgICAgICAgICAgICAgIGlmIGxlbmd0aCBhbmQg cHJlY2lzaW9uOgorICAgICAgICAgICAgICAgICAgICBtYXRjaE9iaiA9IHJlLnNlYXJjaChyJyhc ZCspLChcZCspJywgZnVsbHR5cGUpCisgICAgICAgICAgICAgICAgICAgIGlmIG1hdGNoT2JqOgor ICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uWydhdHRsZW4nXSA9IG1hdGNoT2JqLmdyb3Vw KDEpCisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5bJ2F0dHByZWNpc2lvbiddID0gbWF0 Y2hPYmouZ3JvdXAoMikKKyAgICAgICAgICAgICAgICBlbGlmIGxlbmd0aDoKKyAgICAgICAgICAg ICAgICAgICAgIyBJZiB3ZSBoYXZlIGxlbmd0aCBvbmx5CisgICAgICAgICAgICAgICAgICAgIG1h dGNoT2JqID0gcmUuc2VhcmNoKHInKFxkKyknLCBmdWxsdHlwZSkKKyAgICAgICAgICAgICAgICAg ICAgaWYgbWF0Y2hPYmo6CisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5bJ2F0dGxlbidd ID0gbWF0Y2hPYmouZ3JvdXAoMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtblsnYXR0 cHJlY2lzaW9uJ10gPSBOb25lCisKKworICAgICAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1w bGF0ZSgiLyIuam9pbihbc2VsZi5jb2x1bW5fdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdpc19yZWZlcmVuY2VkLnNxbCddKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCwgY2xpZD1jb2x1 bW5bJ2F0dG51bSddKQorCisgICAgICAgICAgICAgICAgc3RhdHVzLCBpc19yZWZlcmVuY2UgPSBz ZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoU1FMKQorCisgICAgICAgICAgICAgICAgZWRpdF90eXBl c19saXN0ID0gbGlzdCgpCisgICAgICAgICAgICAgICAgIyBXZSB3aWxsIG5lZWQgcHJlc2VudCB0 eXBlIGluIGVkaXQgbW9kZQorCisgICAgICAgICAgICAgICAgaWYgY29sdW1uWyd0eXBuc3BuYW1l J10gPT0gInBnX2NhdGFsb2ciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9yIGNvbHVtblsn dHlwbnNwbmFtZSddID09ICJwdWJsaWMiOgorICAgICAgICAgICAgICAgICAgICBlZGl0X3R5cGVz X2xpc3QuYXBwZW5kKHByZXNlbnRfdHlwZSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAg ICAgICAgICAgICAgICB0ID0gc2VsZi5xdFR5cGVJZGVudChzZWxmLmNvbm4sIGNvbHVtblsndHlw bnNwbmFtZSddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVz ZW50X3R5cGUpCisgICAgICAgICAgICAgICAgICAgIGVkaXRfdHlwZXNfbGlzdC5hcHBlbmQodCkK KyAgICAgICAgICAgICAgICAgICAgY29sdW1uWydjbHR5cGUnXSA9IHQKKworICAgICAgICAgICAg ICAgIGlmIGludChpc19yZWZlcmVuY2UpID09IDA6CisgICAgICAgICAgICAgICAgICAgIFNRTCA9 IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5jb2x1bW5fdGVtcGxhdGVfcGF0aCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZWRpdF9t b2RlX3R5cGVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHR5cGVfaWQ9dHlwZV9pZCkKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzLCByc2V0ID0g c2VsZi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCisKKyAgICAgICAgICAgICAgICAgICAgZm9y IHJvdyBpbiByc2V0Wydyb3dzJ106CisgICAgICAgICAgICAgICAgICAgICAgICBlZGl0X3R5cGVz X2xpc3QuYXBwZW5kKHJvd1sndHlwbmFtZSddKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAg ICAgICAgICAgICAgICAgIGVkaXRfdHlwZXNfbGlzdC5hcHBlbmQocHJlc2VudF90eXBlKQorCisg ICAgICAgICAgICAgICAgY29sdW1uWydlZGl0X3R5cGVzJ10gPSBlZGl0X3R5cGVzX2xpc3QKKyAg ICAgICAgICAgICAgICBjb2x1bW5bJ2NsdHlwZSddID0gRGF0YVR5cGVSZWFkZXIucGFyc2VfdHlw ZV9uYW1lKGNvbHVtblsnY2x0eXBlJ10pCisKKyAgICAgICAgICAgICAgICBpZiAnaW5ka2V5JyBp biBjb2x1bW46CisgICAgICAgICAgICAgICAgICAgICMgQ3VycmVudCBjb2x1bW4KKyAgICAgICAg ICAgICAgICAgICAgYXR0bnVtID0gc3RyKGNvbHVtblsnYXR0bnVtJ10pCisKKyAgICAgICAgICAg ICAgICAgICAgIyBTaW5nbGUvTGlzdCBvZiBwcmltYXJ5IGtleSBjb2x1bW4ocykKKyAgICAgICAg ICAgICAgICAgICAgaW5ka2V5ID0gc3RyKGNvbHVtblsnaW5ka2V5J10pCisKKyAgICAgICAgICAg ICAgICAgICAgIyBXZSB3aWxsIGNoZWNrIGlmIGNvbHVtbiBpcyBpbiBwcmltYXJ5IGNvbHVtbihz KQorICAgICAgICAgICAgICAgICAgICBpZiBhdHRudW0gaW4gaW5ka2V5LnNwbGl0KCIgIik6Cisg ICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5bJ2lzX3ByaW1hcnlfa2V5J10gPSBUcnVlCisg ICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5b J2lzX3ByaW1hcnlfa2V5J10gPSBGYWxzZQorCisgICAgICAgIHJldHVybiBkYXRhCisKKyAgICBk ZWYgX2luZGV4X2NvbnN0cmFpbnRzX2Zvcm1hdHRlcihzZWxmLCBkaWQsIHRpZCwgZGF0YSk6Cisg ICAgICAgICIiIgorICAgICAgICBBcmdzOgorICAgICAgICAgICAgdGlkOiBUYWJsZSBPSUQKKyAg ICAgICAgICAgIGRhdGE6IGRpY3Qgb2YgcXVlcnkgcmVzdWx0CisKKyAgICAgICAgUmV0dXJuczoK KyAgICAgICAgICAgIEl0IHdpbGwgcmV0dXJuIGZvcm1hdHRlZCBvdXRwdXQgb2YgcXVlcnkgcmVz dWx0CisgICAgICAgICAgICBhcyBwZXIgY2xpZW50IG1vZGVsIGZvcm1hdCBmb3IgaW5kZXggY29u c3RyYWludCBub2RlCisgICAgICAgICIiIgorCisgICAgICAgICMgV2Ugd2lsbCBmZXRjaCBhbGwg dGhlIGluZGV4IGNvbnN0cmFpbnRzIGZvciB0aGUgdGFibGUKKyAgICAgICAgaW5kZXhfY29uc3Ry YWludHMgPSB7CisgICAgICAgICAgICAncCc6ICdwcmltYXJ5X2tleScsICd1JzogJ3VuaXF1ZV9j b25zdHJhaW50JworICAgICAgICB9CisKKyAgICAgICAgZm9yIGN0eXBlIGluIGluZGV4X2NvbnN0 cmFpbnRzLmtleXMoKToKKyAgICAgICAgICAgIGRhdGFbaW5kZXhfY29uc3RyYWludHNbY3R5cGVd XSA9IFtdCisKKyAgICAgICAgICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2Vs Zi5pbmRleF9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkaWQ9ZGlkLCB0aWQ9dGlkLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0cmFpbnRfdHlwZT1jdHlwZSkKKyAgICAgICAgICAgIHN0YXR1 cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCisKKyAgICAgICAgICAgIGlmIG5v dCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihl cnJvcm1zZz1yZXMpCisKKyAgICAgICAgICAgIGZvciByb3cgaW4gcmVzWydyb3dzJ106CisgICAg ICAgICAgICAgICAgcmVzdWx0ID0gcm93CisgICAgICAgICAgICAgICAgc3FsID0gcmVuZGVyX3Rl bXBsYXRlKAorICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi5pbmRleF9jb25zdHJh aW50X3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2Nv bnN0cmFpbnRfY29scy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgIGNpZD1yb3dbJ29pZCdd LAorICAgICAgICAgICAgICAgICAgICBjb2xjbnQ9cm93WydpbmRuYXR0cyddKQorICAgICAgICAg ICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCisKKyAgICAg ICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50 ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKworICAgICAgICAgICAgICAgIGNvbHVt bnMgPSBbXQorICAgICAgICAgICAgICAgIGZvciByIGluIHJlc1sncm93cyddOgorICAgICAgICAg ICAgICAgICAgICBjb2x1bW5zLmFwcGVuZCh7ImNvbHVtbiI6IHJbJ2NvbHVtbiddLnN0cmlwKCci Jyl9KQorCisgICAgICAgICAgICAgICAgcmVzdWx0Wydjb2x1bW5zJ10gPSBjb2x1bW5zCisKKyAg ICAgICAgICAgICAgICAjIElmIG5vdCBleGlzdHMgdGhlbiBjcmVhdGUgbGlzdCBhbmQvb3IgYXBw ZW5kIGludG8KKyAgICAgICAgICAgICAgICAjIGV4aXN0aW5nIGxpc3QgWyBBZGRpbmcgaW50byBt YWluIGRhdGEgZGljdF0KKyAgICAgICAgICAgICAgICBkYXRhLnNldGRlZmF1bHQoaW5kZXhfY29u c3RyYWludHNbY3R5cGVdLCBbXSkuYXBwZW5kKHJlc3VsdCkKKworICAgICAgICByZXR1cm4gZGF0 YQorCisgICAgZGVmIF9mb3JlaWduX2tleV9mb3JtYXR0ZXIoc2VsZiwgdGlkLCBkYXRhKToKKyAg ICAgICAgIiIiCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICB0aWQ6IFRhYmxlIE9JRAorICAg ICAgICAgICAgZGF0YTogZGljdCBvZiBxdWVyeSByZXN1bHQKKworICAgICAgICBSZXR1cm5zOgor ICAgICAgICAgICAgSXQgd2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1 bHQKKyAgICAgICAgICAgIGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0IGZvciBmb3JlaWduIGtl eSBjb25zdHJhaW50IG5vZGUKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBXZSB3aWxsIGZldGNo IGFsbCB0aGUgaW5kZXggY29uc3RyYWludHMgZm9yIHRoZSB0YWJsZQorICAgICAgICBzcWwgPSBy ZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuZm9yZWlnbl9rZXlfdGVtcGxhdGVfcGF0aCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwn XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWQ9dGlkKQorCisgICAgICAgIHN0 YXR1cywgcmVzdWx0ID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCisKKyAgICAgICAgaWYg bm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJy b3Jtc2c9cmVzdWx0KQorCisgICAgICAgIGZvciBmayBpbiByZXN1bHRbJ3Jvd3MnXToKKworICAg ICAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmZvcmVpZ25fa2V5 X3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdnZXRfY29uc3RyYWludF9jb2xzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0aWQ9dGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtl eXM9emlwKGZrWydjb25ma2V5J10sIGZrWydjb25rZXknXSksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uZnJlbGlkPWZrWydjb25mcmVsaWQnXSkKKworICAgICAgICAgICAg c3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KHNxbCkKKworICAgICAgICAgICAg aWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vy cm9yKGVycm9ybXNnPXJlcykKKworICAgICAgICAgICAgY29sdW1ucyA9IFtdCisgICAgICAgICAg ICBjb2xzID0gW10KKyAgICAgICAgICAgIGZvciByb3cgaW4gcmVzWydyb3dzJ106CisgICAgICAg ICAgICAgICAgY29sdW1ucy5hcHBlbmQoeyJsb2NhbF9jb2x1bW4iOiByb3dbJ2NvbmF0dG5hbWUn XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZmVyZW5jZXMiOiBma1snY29u ZnJlbGlkJ10sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWZlcmVuY2VkIjog cm93Wydjb25mYXR0bmFtZSddfSkKKyAgICAgICAgICAgICAgICBjb2xzLmFwcGVuZChyb3dbJ2Nv bmF0dG5hbWUnXSkKKworICAgICAgICAgICAgZmtbJ2NvbHVtbnMnXSA9IGNvbHVtbnMKKworICAg ICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmZvcmVpZ25fa2V5 X3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdnZXRfcGFyZW50LnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0aWQ9ZmtbJ2NvbHVtbnMnXVswXVsncmVmZXJlbmNlcyddKQorCisgICAgICAgICAgICBzdGF0 dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKKyAgICAgICAgICAgIGlm IG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1yc2V0KQorCisgICAgICAgICAgICBma1sncmVtb3RlX3NjaGVtYSddID0gcnNl dFsncm93cyddWzBdWydzY2hlbWEnXQorICAgICAgICAgICAgZmtbJ3JlbW90ZV90YWJsZSddID0g cnNldFsncm93cyddWzBdWyd0YWJsZSddCisKKyAgICAgICAgICAgIGNvdmVyaW5naW5kZXggPSBz ZWxmLnNlYXJjaF9jb3ZlcmluZ2luZGV4KHRpZCwgY29scykKKworICAgICAgICAgICAgZmtbJ2Nv dmVyaW5naW5kZXgnXSA9IGNvdmVyaW5naW5kZXgKKyAgICAgICAgICAgIGlmIGNvdmVyaW5naW5k ZXg6CisgICAgICAgICAgICAgICAgZmtbJ2F1dG9pbmRleCddID0gVHJ1ZQorICAgICAgICAgICAg ICAgIGZrWydoYXNpbmRleCddID0gVHJ1ZQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg ICAgICBma1snYXV0b2luZGV4J10gPSBGYWxzZQorICAgICAgICAgICAgICAgIGZrWydoYXNpbmRl eCddID0gRmFsc2UKKyAgICAgICAgICAgICMgSWYgbm90IGV4aXN0cyB0aGVuIGNyZWF0ZSBsaXN0 IGFuZC9vciBhcHBlbmQgaW50bworICAgICAgICAgICAgIyBleGlzdGluZyBsaXN0IFsgQWRkaW5n IGludG8gbWFpbiBkYXRhIGRpY3RdCisgICAgICAgICAgICBkYXRhLnNldGRlZmF1bHQoJ2ZvcmVp Z25fa2V5JywgW10pLmFwcGVuZChmaykKKworICAgICAgICByZXR1cm4gZGF0YQorCisgICAgZGVm IF9jaGVja19jb25zdHJhaW50X2Zvcm1hdHRlcihzZWxmLCB0aWQsIGRhdGEpOgorICAgICAgICAi IiIKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgIHRpZDogVGFibGUgT0lECisgICAgICAgICAg ICBkYXRhOiBkaWN0IG9mIHF1ZXJ5IHJlc3VsdAorCisgICAgICAgIFJldHVybnM6CisgICAgICAg ICAgICBJdCB3aWxsIHJldHVybiBmb3JtYXR0ZWQgb3V0cHV0IG9mIHF1ZXJ5IHJlc3VsdAorICAg ICAgICAgICAgYXMgcGVyIGNsaWVudCBtb2RlbCBmb3JtYXQgZm9yIGNoZWNrIGNvbnN0cmFpbnQg bm9kZQorICAgICAgICAiIiIKKworICAgICAgICAjIFdlIHdpbGwgZmV0Y2ggYWxsIHRoZSBpbmRl eCBjb25zdHJhaW50cyBmb3IgdGhlIHRhYmxlCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0 ZSgiLyIuam9pbihbc2VsZi5jaGVja19jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCkKKworICAgICAgICBzdGF0dXMsIHJl cyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQorCisgICAgICAgIGlmIG5vdCBzdGF0dXM6 CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykK KyAgICAgICAgIyBJZiBub3QgZXhpc3RzIHRoZW4gY3JlYXRlIGxpc3QgYW5kL29yIGFwcGVuZCBp bnRvCisgICAgICAgICMgZXhpc3RpbmcgbGlzdCBbIEFkZGluZyBpbnRvIG1haW4gZGF0YSBkaWN0 XQorCisgICAgICAgIGRhdGFbJ2NoZWNrX2NvbnN0cmFpbnQnXSA9IHJlc1sncm93cyddCisKKyAg ICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBfZXhjbHVzaW9uX2NvbnN0cmFpbnRfZm9ybWF0 dGVyKHNlbGYsIGRpZCwgdGlkLCBkYXRhKToKKyAgICAgICAgIiIiCisgICAgICAgIEFyZ3M6Cisg ICAgICAgICAgICB0aWQ6IFRhYmxlIE9JRAorICAgICAgICAgICAgZGF0YTogZGljdCBvZiBxdWVy eSByZXN1bHQKKworICAgICAgICBSZXR1cm5zOgorICAgICAgICAgICAgSXQgd2lsbCByZXR1cm4g Zm9ybWF0dGVkIG91dHB1dCBvZiBxdWVyeSByZXN1bHQKKyAgICAgICAgICAgIGFzIHBlciBjbGll bnQgbW9kZWwgZm9ybWF0IGZvciBleGNsdXNpb24gY29uc3RyYWludCBub2RlCisgICAgICAgICIi IgorCisgICAgICAgICMgV2Ugd2lsbCBmZXRjaCBhbGwgdGhlIGluZGV4IGNvbnN0cmFpbnRzIGZv ciB0aGUgdGFibGUKKyAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxm LmV4Y2x1c2lvbl9jb25zdHJhaW50X3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGlkPWRpZCwgdGlkPXRpZCkKKworICAgICAgICBzdGF0dXMsIHJlc3Vs dCA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3Qoc3FsKQorCisgICAgICAgIGlmIG5vdCBzdGF0dXM6 CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlc3Vs dCkKKworICAgICAgICBmb3IgZXggaW4gcmVzdWx0Wydyb3dzJ106CisKKyAgICAgICAgICAgIHNx bCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKKyAgICAgICAgICAgICAgICBbc2VsZi5leGNs dXNpb25fY29uc3RyYWludF90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAnZ2V0X2Nv bnN0cmFpbnRfY29scy5zcWwnXSksCisgICAgICAgICAgICAgICAgY2lkPWV4WydvaWQnXSwKKyAg ICAgICAgICAgICAgICBjb2xjbnQ9ZXhbJ2luZG5hdHRzJ10pCisKKyAgICAgICAgICAgIHN0YXR1 cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChzcWwpCisKKyAgICAgICAgICAgIGlmIG5v dCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihl cnJvcm1zZz1yZXMpCisKKyAgICAgICAgICAgIGNvbHVtbnMgPSBbXQorICAgICAgICAgICAgZm9y IHJvdyBpbiByZXNbJ3Jvd3MnXToKKyAgICAgICAgICAgICAgICBpZiByb3dbJ29wdGlvbnMnXSAm IDE6CisgICAgICAgICAgICAgICAgICAgIG9yZGVyID0gRmFsc2UKKyAgICAgICAgICAgICAgICAg ICAgbnVsbHNfb3JkZXIgPSBUcnVlIGlmIChyb3dbJ29wdGlvbnMnXSAmIDIpIGVsc2UgRmFsc2UK KyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvcmRlciA9IFRydWUK KyAgICAgICAgICAgICAgICAgICAgbnVsbHNfb3JkZXIgPSBUcnVlIGlmIChyb3dbJ29wdGlvbnMn XSAmIDIpIGVsc2UgRmFsc2UKKworICAgICAgICAgICAgICAgIGNvbHVtbnMuYXBwZW5kKHsiY29s dW1uIjogcm93Wydjb2xkZWYnXS5zdHJpcCgnIicpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAib3Blcl9jbGFzcyI6IHJvd1snb3BjbmFtZSddLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAib3JkZXIiOiBvcmRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIm51bGxzX29yZGVyIjogbnVsbHNfb3JkZXIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJvcGVyYXRvciI6IHJvd1snb3BybmFtZSddLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAiY29sX3R5cGUiOiByb3dbJ2RhdGF0eXBlJ10KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfSkKKworICAgICAgICAgICAgZXhbJ2NvbHVtbnMnXSA9IGNvbHVt bnMKKyAgICAgICAgICAgICMgSWYgbm90IGV4aXN0cyB0aGVuIGNyZWF0ZSBsaXN0IGFuZC9vciBh cHBlbmQgaW50bworICAgICAgICAgICAgIyBleGlzdGluZyBsaXN0IFsgQWRkaW5nIGludG8gbWFp biBkYXRhIGRpY3RdCisgICAgICAgICAgICBkYXRhLnNldGRlZmF1bHQoJ2V4Y2x1ZGVfY29uc3Ry YWludCcsIFtdKS5hcHBlbmQoZXgpCisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIGRlZiBf Zm9ybWF0dGVyKHNlbGYsIGRpZCwgc2NpZCwgdGlkLCBkYXRhKToKKyAgICAgICAgIiIiCisgICAg ICAgIEFyZ3M6CisgICAgICAgICAgICBkYXRhOiBkaWN0IG9mIHF1ZXJ5IHJlc3VsdAorICAgICAg ICAgICAgc2NpZDogc2NoZW1hIG9pZAorICAgICAgICAgICAgdGlkOiB0YWJsZSBvaWQKKworICAg ICAgICBSZXR1cm5zOgorICAgICAgICAgICAgSXQgd2lsbCByZXR1cm4gZm9ybWF0dGVkIG91dHB1 dCBvZiBxdWVyeSByZXN1bHQKKyAgICAgICAgICAgIGFzIHBlciBjbGllbnQgbW9kZWwgZm9ybWF0 CisgICAgICAgICIiIgorICAgICAgICAjIE5lZWQgdG8gZm9ybWF0IHNlY3VyaXR5IGxhYmVscyBh Y2NvcmRpbmcgdG8gY2xpZW50IGpzIGNvbGxlY3Rpb24KKyAgICAgICAgaWYgJ3NlY2xhYmVscycg aW4gZGF0YSBhbmQgZGF0YVsnc2VjbGFiZWxzJ10gaXMgbm90IE5vbmU6CisgICAgICAgICAgICBz ZWNsYWJlbHMgPSBbXQorICAgICAgICAgICAgZm9yIHNlY2xibHMgaW4gZGF0YVsnc2VjbGFiZWxz J106CisgICAgICAgICAgICAgICAgaywgdiA9IHNlY2xibHMuc3BsaXQoJz0nKQorICAgICAgICAg ICAgICAgIHNlY2xhYmVscy5hcHBlbmQoeydwcm92aWRlcic6IGssICdsYWJlbCc6IHZ9KQorCisg ICAgICAgICAgICBkYXRhWydzZWNsYWJlbHMnXSA9IHNlY2xhYmVscworCisgICAgICAgICMgV2Ug bmVlZCB0byBwYXJzZSAmIGNvbnZlcnQgQUNMIGNvbWluZyBmcm9tIGRhdGFiYXNlIHRvIGpzb24g Zm9ybWF0CisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJs ZV90ZW1wbGF0ZV9wYXRoLCAnYWNsLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRpZD10aWQsIHNjaWQ9c2NpZCkKKyAgICAgICAgc3RhdHVzLCBhY2wgPSBzZWxmLmNvbm4u ZXhlY3V0ZV9kaWN0KFNRTCkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJl dHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9YWNsKQorCisgICAgICAgICMgV2Ug d2lsbCBzZXQgZ2V0IHByaXZpbGVnZXMgZnJvbSBhY2wgc3FsIHNvIHdlIGRvbid0IG5lZWQKKyAg ICAgICAgIyBpdCBmcm9tIHByb3BlcnRpZXMgc3FsCisgICAgICAgIGZvciByb3cgaW4gYWNsWydy b3dzJ106CisgICAgICAgICAgICBwcml2ID0gcGFyc2VfcHJpdl9mcm9tX2RiKHJvdykKKyAgICAg ICAgICAgIGlmIHJvd1snZGVmdHlwZSddIGluIGRhdGE6CisgICAgICAgICAgICAgICAgZGF0YVty b3dbJ2RlZnR5cGUnXV0uYXBwZW5kKHByaXYpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg ICAgICAgIGRhdGFbcm93WydkZWZ0eXBlJ11dID0gW3ByaXZdCisKKyAgICAgICAgIyBXZSB3aWxs IGFkZCBBdXRvIHZhY3V1bSBkZWZhdWx0cyB3aXRoIG91dCByZXN1bHQgZm9yIGdyaWQKKyAgICAg ICAgZGF0YVsndmFjdXVtX3RhYmxlJ10gPSBzZWxmLnBhcnNlX3ZhY3V1bV9kYXRhKHNlbGYuY29u biwgZGF0YSwgJ3RhYmxlJykKKyAgICAgICAgZGF0YVsndmFjdXVtX3RvYXN0J10gPSBzZWxmLnBh cnNlX3ZhY3V1bV9kYXRhKHNlbGYuY29ubiwgZGF0YSwgJ3RvYXN0JykKKworICAgICAgICAjIEZl dGNoIGNvbHVtbnMgZm9yIHRoZSB0YWJsZSBsb2dpYworICAgICAgICAjCisgICAgICAgICMgMSkg Q2hlY2sgaWYgb2ZfdHlwZSBhbmQgaW5oZXJpdGVkIHRhYmxlcyBhcmUgcHJlc2VudD8KKyAgICAg ICAgIyAyKSBJZiB5ZXMgdGhlbiBGZXRjaCBhbGwgdGhlIGNvbHVtbnMgZm9yIG9mX3R5cGUgYW5k IGluaGVyaXRlZCB0YWJsZXMKKyAgICAgICAgIyAzKSBBZGQgY29sdW1ucyBpbiBjb2x1bW5zIGNv bGxlY3Rpb24KKyAgICAgICAgIyA0KSBGaW5kIGFsbCB0aGUgY29sdW1ucyBmb3IgdGFibGVzIGFu ZCBmaWx0ZXIgb3V0IGNvbHVtbnMgd2hpY2ggYXJlCisgICAgICAgICMgICBub3QgaW5oZXJpdGVk IGZyb20gYW55IHRhYmxlICYgZm9ybWF0IHRoZW0gb25lIGJ5IG9uZQorCisgICAgICAgICMgR2V0 IG9mX3R5cGUgdGFibGUgY29sdW1ucyBhbmQgYWRkIGl0IGludG8gY29sdW1ucyBkaWN0CisgICAg ICAgIGlmIGRhdGFbJ3R5cG5hbWUnXToKKyAgICAgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0 ZSgiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0X2NvbHVtbnNfZm9yX3RhYmxlLnNxbCddKSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bmFtZT1kYXRhWyd0eXBuYW1lJ10p CisKKyAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwp CisgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnRl cm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorICAgICAgICAgICAgZGF0YVsnY29sdW1u cyddID0gcmVzWydyb3dzJ10KKworICAgICAgICAjIEdldCBpbmhlcml0ZWQgdGFibGUocykgY29s dW1ucyBhbmQgYWRkIGl0IGludG8gY29sdW1ucyBkaWN0CisgICAgICAgIGVsaWYgZGF0YVsnY29s bF9pbmhlcml0cyddIGFuZCBsZW4oZGF0YVsnY29sbF9pbmhlcml0cyddKSA+IDA6CisgICAgICAg ICAgICBjb2x1bW5zID0gW10KKyAgICAgICAgICAgICMgUmV0dXJuIGFsbCB0YWJsZXMgd2hpY2gg Y2FuIGJlIGluaGVyaXRlZCAmIGRvIG5vdCBzaG93CisgICAgICAgICAgICAjIHN5c3RlbSBjb2x1 bW5zCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudGFi bGVfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJ2dldF9pbmhlcml0cy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2hvd19zeXN0ZW1fb2JqZWN0cz1GYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICkKKyAgICAgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRl XzJkYXJyYXkoU1FMKQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAg ICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJzZXQpCisKKyAgICAgICAg ICAgIGZvciByb3cgaW4gcnNldFsncm93cyddOgorICAgICAgICAgICAgICAgIGlmIHJvd1snaW5o ZXJpdHMnXSBpbiBkYXRhWydjb2xsX2luaGVyaXRzJ106CisgICAgICAgICAgICAgICAgICAgICMg RmV0Y2ggY29sdW1ucyB1c2luZyBpbmhlcml0ZWQgdGFibGUgT0lECisgICAgICAgICAgICAgICAg ICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKKyAgICAgICAgICAgICAgICAgICAg ICAgIFtzZWxmLnRhYmxlX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg J2dldF9jb2x1bW5zX2Zvcl90YWJsZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICB0 aWQ9cm93WydvaWQnXQorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAg IHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCisgICAgICAgICAgICAg ICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50 ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKyAgICAgICAgICAgICAgICAgICAgY29s dW1ucy5leHRlbmQocmVzWydyb3dzJ11bOl0pCisgICAgICAgICAgICBkYXRhWydjb2x1bW5zJ10g PSBjb2x1bW5zCisKKyAgICAgICAgIyBXZSB3aWxsIGZldGNoIGFsbCB0aGUgY29sdW1ucyBmb3Ig dGhlIHRhYmxlIHVzaW5nCisgICAgICAgICMgY29sdW1ucyBwcm9wZXJ0aWVzLnNxbCwgc28gd2Ug bmVlZCB0byBzZXQgdGVtcGxhdGUgcGF0aAorICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUo Ii8iLmpvaW4oW3NlbGYuY29sdW1uX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGlkPXRpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo b3dfc3lzX29iamVjdHM9RmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKwor ICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoU1FMKQorICAgICAg ICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1yZXMpCisgICAgICAgIGFsbF9jb2x1bW5zID0gcmVzWydyb3dzJ10KKworICAg ICAgICAjIEZpbHRlciBpbmhlcml0ZWQgY29sdW1ucyBmcm9tIGFsbCBjb2x1bW5zCisgICAgICAg IGlmICdjb2x1bW5zJyBpbiBkYXRhIGFuZCBsZW4oZGF0YVsnY29sdW1ucyddKSA+IDAgXAorICAg ICAgICAgICAgICAgIGFuZCBsZW4oYWxsX2NvbHVtbnMpID4gMDoKKyAgICAgICAgICAgIGZvciBy b3cgaW4gZGF0YVsnY29sdW1ucyddOgorICAgICAgICAgICAgICAgIGZvciBpLCBjb2wgaW4gZW51 bWVyYXRlKGFsbF9jb2x1bW5zKToKKyAgICAgICAgICAgICAgICAgICAgIyBJZiBib3RoIG5hbWUg YXJlIHNhbWUgdGhlbiByZW1vdmUgaXQKKyAgICAgICAgICAgICAgICAgICAgIyBhcyBpdCBpcyBp bmhlcml0ZWQgZnJvbSBvdGhlciB0YWJsZQorICAgICAgICAgICAgICAgICAgICBpZiBjb2xbJ25h bWUnXSA9PSByb3dbJ25hbWUnXToKKyAgICAgICAgICAgICAgICAgICAgICAgICMgUmVtb3ZlIHNh bWUgY29sdW1uIGZyb20gYWxsX2NvbHVtbnMgYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICMg YWxyZWFkeSBoYXZlIGl0IGNvbHVtbnMgY29sbGVjdGlvbgorICAgICAgICAgICAgICAgICAgICAg ICAgZGVsIGFsbF9jb2x1bW5zW2ldCisKKyAgICAgICAgICAgICMgSWYgYW55IGNvbHVtbiBpcyBh ZGRlZCB0aGVuIHVwZGF0ZSBjb2x1bW5zIGNvbGxlY3Rpb24KKyAgICAgICAgICAgIGlmIGxlbihh bGxfY29sdW1ucykgPiAwOgorICAgICAgICAgICAgICAgIGRhdGFbJ2NvbHVtbnMnXSArPSBhbGxf Y29sdW1ucworICAgICAgICAjIElmIG5vIGluaGVyaXRlZCBjb2x1bW5zIGZvdW5kIHRoZW4gYWRk IGFsbCBjb2x1bW5zCisgICAgICAgIGVsaWYgbGVuKGFsbF9jb2x1bW5zKSA+IDA6CisgICAgICAg ICAgICBkYXRhWydjb2x1bW5zJ10gPSBhbGxfY29sdW1ucworCisgICAgICAgIGlmICdjb2x1bW5z JyBpbiBkYXRhIGFuZCBsZW4oZGF0YVsnY29sdW1ucyddKSA+IDA6CisgICAgICAgICAgICBkYXRh ID0gc2VsZi5fY29sdW1uc19mb3JtYXR0ZXIodGlkLCBkYXRhKQorCisgICAgICAgICMgSGVyZSB3 ZSB3aWxsIGFkZCBjb25zdHJhaW50IGluIG91ciBvdXRwdXQKKyAgICAgICAgZGF0YSA9IHNlbGYu X2luZGV4X2NvbnN0cmFpbnRzX2Zvcm1hdHRlcihkaWQsIHRpZCwgZGF0YSkKKyAgICAgICAgZGF0 YSA9IHNlbGYuX2ZvcmVpZ25fa2V5X2Zvcm1hdHRlcih0aWQsIGRhdGEpCisgICAgICAgIGRhdGEg PSBzZWxmLl9jaGVja19jb25zdHJhaW50X2Zvcm1hdHRlcih0aWQsIGRhdGEpCisgICAgICAgIGRh dGEgPSBzZWxmLl9leGNsdXNpb25fY29uc3RyYWludF9mb3JtYXR0ZXIoZGlkLCB0aWQsIGRhdGEp CisKKyAgICAgICAgcmV0dXJuIGRhdGEKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgX2Ns dHlwZV9mb3JtYXR0ZXIoZGF0YV90eXBlKToKKyAgICAgICAgIiIiCisKKyAgICAgICAgQXJnczoK KyAgICAgICAgICAgIGRhdGFfdHlwZTogVHlwZSBzdHJpbmcKKworICAgICAgICBSZXR1cm5zOgor ICAgICAgICAgICAgV2UgbmVlZCB0byByZW1vdmUgW10gZnJvbSB0eXBlIGFuZCBhcHBlbmQgaXQK KyAgICAgICAgICAgIGFmdGVyIGxlbmd0aC9wcmVjaXNpb24gc28gd2Ugd2lsbCBzZW5kIGZsYWcg Zm9yCisgICAgICAgICAgICBzcWwgdGVtcGxhdGUKKyAgICAgICAgIiIiCisgICAgICAgIGlmICdb XScgaW4gZGF0YV90eXBlOgorICAgICAgICAgICAgcmV0dXJuIGRhdGFfdHlwZVs6LTJdLCBUcnVl CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICByZXR1cm4gZGF0YV90eXBlLCBGYWxzZQorCisg ICAgZGVmIGdldF90YWJsZV9kZXBlbmRlbnRzKHNlbGYsIHRpZCk6CisgICAgICAgICIiIgorICAg ICAgICBUaGlzIGZ1bmN0aW9uIGdldCB0aGUgZGVwZW5kZW50cyBhbmQgcmV0dXJuIGFqYXggcmVz cG9uc2UKKyAgICAgICAgZm9yIHRoZSB0YWJsZSBub2RlLgorCisgICAgICAgIEFyZ3M6CisgICAg ICAgICAgICB0aWQ6IFRhYmxlIElECisgICAgICAgICIiIgorICAgICAgICAjIFNwZWNpZmljIGNv bmRpdGlvbiBmb3IgY29sdW1uIHdoaWNoIHdlIG5lZWQgdG8gYXBwZW5kCisgICAgICAgIHdoZXJl ID0gIldIRVJFIGRlcC5yZWZvYmppZD17MH06Ok9JRCIuZm9ybWF0KHRpZCkKKworICAgICAgICBk ZXBlbmRlbnRzX3Jlc3VsdCA9IHNlbGYuZ2V0X2RlcGVuZGVudHMoCisgICAgICAgICAgICBzZWxm LmNvbm4sIHRpZAorICAgICAgICApCisKKyAgICAgICAgIyBTcGVjaWZpYyBzcWwgdG8gcnVuIGFn YWludCBjb2x1bW4gdG8gZmV0Y2ggZGVwZW5kZW50cworICAgICAgICBTUUwgPSByZW5kZXJfdGVt cGxhdGUoIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVwZW5kLnNxbCddKSwgd2hlcmU9d2hlcmUpCisK KyAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKyAgICAg ICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJy b3IoZXJyb3Jtc2c9cmVzKQorCisgICAgICAgIGZvciByb3cgaW4gcmVzWydyb3dzJ106CisgICAg ICAgICAgICByZWZfbmFtZSA9IHJvd1sncmVmbmFtZSddCisgICAgICAgICAgICBpZiByZWZfbmFt ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgIGRlcF90 eXBlID0gJycKKyAgICAgICAgICAgIGRlcF9zdHIgPSByb3dbJ2RlcHR5cGUnXQorICAgICAgICAg ICAgaWYgZGVwX3N0ciA9PSAnYSc6CisgICAgICAgICAgICAgICAgZGVwX3R5cGUgPSAnYXV0bycK KyAgICAgICAgICAgIGVsaWYgZGVwX3N0ciA9PSAnbic6CisgICAgICAgICAgICAgICAgZGVwX3R5 cGUgPSAnbm9ybWFsJworICAgICAgICAgICAgZWxpZiBkZXBfc3RyID09ICdpJzoKKyAgICAgICAg ICAgICAgICBkZXBfdHlwZSA9ICdpbnRlcm5hbCcKKworICAgICAgICAgICAgZGVwZW5kZW50c19y ZXN1bHQuYXBwZW5kKHsndHlwZSc6ICdzZXF1ZW5jZScsICduYW1lJzogcmVmX25hbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmaWVsZCc6IGRlcF90eXBlfSkKKwor ICAgICAgICByZXR1cm4gYWpheF9yZXNwb25zZSgKKyAgICAgICAgICAgIHJlc3BvbnNlPWRlcGVu ZGVudHNfcmVzdWx0LAorICAgICAgICAgICAgc3RhdHVzPTIwMAorICAgICAgICApCisKKyAgICBk ZWYgZ2V0X3RhYmxlX2RlcGVuZGVuY2llcyhzZWxmLCB0aWQpOgorICAgICAgICAiIiIKKyAgICAg ICAgVGhpcyBmdW5jdGlvbiBnZXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgcmV0dXJuIGFqYXggcmVz cG9uc2UKKyAgICAgICAgZm9yIHRoZSB0YWJsZSBub2RlLgorCisgICAgICAgIEFyZ3M6CisgICAg ICAgICAgICB0aWQ6IFRhYmxlIElECisKKyAgICAgICAgIiIiCisgICAgICAgIGRlcGVuZGVuY2ll c19yZXN1bHQgPSBzZWxmLmdldF9kZXBlbmRlbmNpZXMoCisgICAgICAgICAgICBzZWxmLmNvbm4s IHRpZAorICAgICAgICApCisKKyAgICAgICAgcmV0dXJuIGFqYXhfcmVzcG9uc2UoCisgICAgICAg ICAgICByZXNwb25zZT1kZXBlbmRlbmNpZXNfcmVzdWx0LAorICAgICAgICAgICAgc3RhdHVzPTIw MAorICAgICAgICApCisKKyAgICBkZWYgZ2V0X3RhYmxlX3N0YXRpc3RpY3Moc2VsZiwgc2NpZCwg dGlkKToKKyAgICAgICAgIiIiCisgICAgICAgIFN0YXRpc3RpY3MKKworICAgICAgICBBcmdzOgor ICAgICAgICAgICAgc2NpZDogU2NoZW1hIElkCisgICAgICAgICAgICB0aWQ6IFRhYmxlIElkCisK KyAgICAgICAgUmV0dXJucyB0aGUgc3RhdGlzdGljcyBmb3IgYSBwYXJ0aWN1bGFyIHRhYmxlIGlm IHRpZCBpcyBzcGVjaWZpZWQsCisgICAgICAgIG90aGVyd2lzZSBpdCB3aWxsIHJldHVybiBzdGF0 aXN0aWNzIGZvciBhbGwgdGhlIHRhYmxlcyBpbiB0aGF0CisgICAgICAgIHNjaGVtYS4KKyAgICAg ICAgIiIiCisKKyAgICAgICAgIyBGZXRjaCBzY2hlbWEgbmFtZQorICAgICAgICBzdGF0dXMsIHNj aGVtYV9uYW1lID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKAorICAgICAgICAgICAgcmVuZGVy X3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRhYmxlX3RlbXBsYXRl X3BhdGgsICdnZXRfc2NoZW1hLnNxbCddKSwKKyAgICAgICAgICAgICAgICBjb25uPXNlbGYuY29u biwgc2NpZD1zY2lkCisgICAgICAgICAgICApCisgICAgICAgICkKKyAgICAgICAgaWYgbm90IHN0 YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9 c2NoZW1hX25hbWUpCisKKyAgICAgICAgaWYgdGlkIGlzIE5vbmU6CisgICAgICAgICAgICBzdGF0 dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX2RpY3QoCisgICAgICAgICAgICAgICAgcmVuZGVy X3RlbXBsYXRlKAorICAgICAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi50YWJsZV90ZW1w bGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbGxfdGFibGVfc3Rh dHMuc3FsJ10pLCBjb25uPXNlbGYuY29ubiwKKyAgICAgICAgICAgICAgICAgICAgc2NoZW1hX25h bWU9c2NoZW1hX25hbWUKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICApCisgICAgICAg IGVsc2U6CisgICAgICAgICAgICAjIEZvciBJbmRpdmlkdWFsIHRhYmxlIHN0YXRzCisKKyAgICAg ICAgICAgICMgQ2hlY2sgaWYgcGdzdGF0dHVwbGUgZXh0ZW5zaW9uIGlzIGFscmVhZHkgY3JlYXRl ZD8KKyAgICAgICAgICAgICMgaWYgY3JlYXRlZCB0aGVuIG9ubHkgYWRkIGV4dGVuZGVkIHN0YXRz CisgICAgICAgICAgICBzdGF0dXMsIGlzX3Bnc3RhdHR1cGxlID0gc2VsZi5jb25uLmV4ZWN1dGVf c2NhbGFyKCIiIgorICAgICAgICAgICAgU0VMRUNUIChjb3VudChleHRuYW1lKSA+IDApIEFTIGlz X3Bnc3RhdHR1cGxlCisgICAgICAgICAgICBGUk9NIHBnX2V4dGVuc2lvbgorICAgICAgICAgICAg V0hFUkUgZXh0bmFtZT0ncGdzdGF0dHVwbGUnCisgICAgICAgICAgICAiIiIpCisgICAgICAgICAg ICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IoZXJyb3Jtc2c9aXNfcGdzdGF0dHVwbGUpCisKKyAgICAgICAgICAgICMgRmV0Y2ggVGFi bGUgbmFtZQorICAgICAgICAgICAgc3RhdHVzLCB0YWJsZV9uYW1lID0gc2VsZi5jb25uLmV4ZWN1 dGVfc2NhbGFyKAorICAgICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAg ICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ2dldF90YWJsZS5z cWwnXSksCisgICAgICAgICAgICAgICAgICAgIGNvbm49c2VsZi5jb25uLCBzY2lkPXNjaWQsIHRp ZD10aWQKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICApCisgICAgICAgICAgICBpZiBu b3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3Io ZXJyb3Jtc2c9dGFibGVfbmFtZSkKKworICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNv bm4uZXhlY3V0ZV9kaWN0KAorICAgICAgICAgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgKKyAgICAg ICAgICAgICAgICAgICAgIi8iLmpvaW4oW3NlbGYudGFibGVfdGVtcGxhdGVfcGF0aCwgJ3N0YXRz LnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgY29ubj1zZWxmLmNvbm4sIHNjaGVtYV9uYW1l PXNjaGVtYV9uYW1lLAorICAgICAgICAgICAgICAgICAgICB0YWJsZV9uYW1lPXRhYmxlX25hbWUs CisgICAgICAgICAgICAgICAgICAgIGlzX3Bnc3RhdHR1cGxlPWlzX3Bnc3RhdHR1cGxlLCB0aWQ9 dGlkCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgKQorCisgICAgICAgIGlmIG5vdCBz dGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXJlcykKKworICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICAgICAg ZGF0YT1yZXMsCisgICAgICAgICAgICBzdGF0dXM9MjAwCisgICAgICAgICkKKworICAgIGRlZiBn ZXRfcmV2ZXJzZV9lbmdpbmVlcmVkX3NxbChzZWxmLCBkaWQsIHNjaWQsIHRpZCwgbWFpbl9zcWws IGRhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIGNyZWF0ZXMg cmV2ZXJzZSBlbmdpbmVlcmVkIHNxbCBmb3IKKyAgICAgICAgdGhlIHRhYmxlIG9iamVjdAorCisg ICAgICAgICBBcmdzOgorICAgICAgICAgICBkaWQ6IERhdGFiYXNlIElECisgICAgICAgICAgIHNj aWQ6IFNjaGVtYSBJRAorICAgICAgICAgICB0aWQ6IFRhYmxlIElECisgICAgICAgICAgIG1haW5f c3FsOiBMaXN0IGNvbnRhaW5zIGFsbCB0aGUgcmV2ZXJzZWQgZW5naW5lZXJlZCBzcWwKKyAgICAg ICAgICAgZGF0YTogVGFibGUncyBEYXRhCisgICAgICAgICIiIgorICAgICAgICAiIiIKKyAgICAg ICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIDEpIFJl dmVyc2UgZW5naW5lZXJlZCBzcWwgZm9yIFRBQkxFCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBUYWJsZSAmIFNj aGVtYSBkZWNsYXJhdGlvbiBzbyB0aGF0IHdlIGNhbiB1c2UgdGhlbSBpbiBjaGlsZCBub2Rlcwor ICAgICAgICBzY2hlbWEgPSBkYXRhWydzY2hlbWEnXQorICAgICAgICB0YWJsZSA9IGRhdGFbJ25h bWUnXQorCisgICAgICAgIGRhdGEgPSBzZWxmLl9mb3JtYXR0ZXIoZGlkLCBzY2lkLCB0aWQsIGRh dGEpCisKKyAgICAgICAgIyBOb3cgd2UgaGF2ZSBhbGwgbGlzIG9mIGNvbHVtbnMgd2hpY2ggd2Ug bmVlZAorICAgICAgICAjIHRvIGluY2x1ZGUgaW4gb3VyIGNyZWF0ZSBkZWZpbml0aW9uLCBMZXQn cyBmb3JtYXQgdGhlbQorICAgICAgICBpZiAnY29sdW1ucycgaW4gZGF0YToKKyAgICAgICAgICAg IGZvciBjIGluIGRhdGFbJ2NvbHVtbnMnXToKKyAgICAgICAgICAgICAgICBpZiAnYXR0YWNsJyBp biBjOgorICAgICAgICAgICAgICAgICAgICBjWydhdHRhY2wnXSA9IHBhcnNlX3ByaXZfdG9fZGIo Y1snYXR0YWNsJ10sIHNlbGYuY29sdW1uX2FjbCkKKworICAgICAgICAgICAgICAgICMgY2hlY2sg dHlwZSBmb3IgJ1tdJyBpbiBpdAorICAgICAgICAgICAgICAgIGlmICdjbHR5cGUnIGluIGM6Cisg ICAgICAgICAgICAgICAgICAgIGNbJ2NsdHlwZSddLCBjWydoYXNTcXJCcmFja2V0J10gPSBcCisg ICAgICAgICAgICAgICAgICAgICAgICBzZWxmLl9jbHR5cGVfZm9ybWF0dGVyKGNbJ2NsdHlwZSdd KQorCisgICAgICAgIHNxbF9oZWFkZXIgPSB1Ii0tIFRhYmxlOiB7MH1cblxuLS0gIi5mb3JtYXQo CisgICAgICAgICAgICBzZWxmLnF0SWRlbnQoc2VsZi5jb25uLCBkYXRhWydzY2hlbWEnXSwgZGF0 YVsnbmFtZSddKSkKKworICAgICAgICBzcWxfaGVhZGVyICs9IHJlbmRlcl90ZW1wbGF0ZSgiLyIu am9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJ2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4pCisKKyAgICAg ICAgc3FsX2hlYWRlciA9IHNxbF9oZWFkZXIuc3RyaXAoJ1xuJykKKyAgICAgICAgc3FsX2hlYWRl ciArPSAnXG4nCisKKyAgICAgICAgIyBBZGQgaW50byBtYWluIHNxbAorICAgICAgICBtYWluX3Nx bC5hcHBlbmQoc3FsX2hlYWRlcikKKworICAgICAgICAjIFBhcnNlIHByaXZpbGVnZSBkYXRhCisg ICAgICAgIGlmICdyZWxhY2wnIGluIGRhdGE6CisgICAgICAgICAgICBkYXRhWydyZWxhY2wnXSA9 IHBhcnNlX3ByaXZfdG9fZGIoZGF0YVsncmVsYWNsJ10sIHNlbGYuYWNsKQorCisgICAgICAgICMg aWYgdGFibGUgaXMgcGFydGl0aW9ucyB0aGVuCisgICAgICAgIGlmICdyZWxpc3BhcnRpdGlvbicg aW4gZGF0YSBhbmQgZGF0YVsncmVsaXNwYXJ0aXRpb24nXToKKyAgICAgICAgICAgIHRhYmxlX3Nx bCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5wYXJ0aXRpb25fdGVtcGxhdGVfcGF0 aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Ny ZWF0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0 YT1kYXRhLCBjb25uPXNlbGYuY29ubikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRhYmxl X3NxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRo LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY3Jl YXRlLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh PWRhdGEsIGNvbm49c2VsZi5jb25uKQorCisgICAgICAgICMgQWRkIGludG8gbWFpbiBzcWwKKyAg ICAgICAgdGFibGVfc3FsID0gcmUuc3ViKCdcbnsyLH0nLCAnXG5cbicsIHRhYmxlX3NxbCkKKyAg ICAgICAgbWFpbl9zcWwuYXBwZW5kKHRhYmxlX3NxbC5zdHJpcCgnXG4nKSkKKworICAgICAgICAi IiIKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAg ICAgIyAyKSBSZXZlcnNlIGVuZ2luZWVyZWQgc3FsIGZvciBJTkRFWAorICAgICAgICAjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAiIiIKKworICAgICAgICBT UUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuaW5kZXhfdGVtcGxhdGVfcGF0aCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9kZXMuc3FsJ10pLCB0 aWQ9dGlkKQorICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV8yZGFycmF5 KFNRTCkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5h bF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cnNldCkKKworICAgICAgICBmb3Igcm93IGluIHJzZXRb J3Jvd3MnXToKKworICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtz ZWxmLmluZGV4X3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkaWQ9ZGlkLCB0aWQ9dGlkLCBpZHg9cm93WydvaWQnXSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkYXRsYXN0c3lzb2lkPXNlbGYuZGF0bGFzdHN5c29pZCkK KworICAgICAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkK KyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIGludGVy bmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgICAgIGRhdGEgPSBkaWN0 KHJlc1sncm93cyddWzBdKQorICAgICAgICAgICAgIyBBZGRpbmcgcGFyZW50IGludG8gZGF0YSBk aWN0LCB3aWxsIGJlIHVzaW5nIGl0IHdoaWxlIGNyZWF0aW5nIHNxbAorICAgICAgICAgICAgZGF0 YVsnc2NoZW1hJ10gPSBzY2hlbWEKKyAgICAgICAgICAgIGRhdGFbJ3RhYmxlJ10gPSB0YWJsZQor ICAgICAgICAgICAgIyBXZSBhbHNvIG5lZWQgdG8gZmVjdGggY29sdW1ucyBvZiBpbmRleAorICAg ICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmluZGV4X3RlbXBs YXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdj b2x1bW5fZGV0YWlscy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWR4PXJvd1snb2lkJ10pCisgICAgICAgICAgICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhl Y3V0ZV8yZGFycmF5KFNRTCkKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAg ICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQorCisgICAg ICAgICAgICAjICdhdHRkZWYnIGNvbWVzIHdpdGggcXVvdGVzIGZyb20gcXVlcnkgc28gd2UgbmVl ZCB0byBzdHJpcCB0aGVtCisgICAgICAgICAgICAjICdvcHRpb25zJyB3ZSBuZWVkIHRydWUvZmFs c2UgdG8gcmVuZGVyIHN3aXRjaAorICAgICAgICAgICAgIyBBU0MoZmFsc2UpL0RFU0ModHJ1ZSkK KyAgICAgICAgICAgIGNvbHVtbnMgPSBbXQorICAgICAgICAgICAgY29scyA9IFtdCisgICAgICAg ICAgICBmb3IgY29sX3JvdyBpbiByc2V0Wydyb3dzJ106CisgICAgICAgICAgICAgICAgIyBXZSBu ZWVkIGFsbCBkYXRhIGFzIGNvbGxlY3Rpb24gZm9yIENvbHVtbnNNb2RlbAorICAgICAgICAgICAg ICAgIGNvbHNfZGF0YSA9IHsKKyAgICAgICAgICAgICAgICAgICAgJ2NvbG5hbWUnOiBjb2xfcm93 WydhdHRkZWYnXS5zdHJpcCgnIicpLAorICAgICAgICAgICAgICAgICAgICAnY29sbHNwY25hbWUn OiBjb2xfcm93Wydjb2xsbnNwbmFtZSddLAorICAgICAgICAgICAgICAgICAgICAnb3BfY2xhc3Mn OiBjb2xfcm93WydvcGNuYW1lJ10sCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGlmIGNvbF9yb3dbJ29wdGlvbnMnXVswXSA9PSAnREVTQyc6CisgICAgICAgICAgICAgICAgICAg IGNvbHNfZGF0YVsnc29ydF9vcmRlciddID0gVHJ1ZQorICAgICAgICAgICAgICAgIGNvbHVtbnMu YXBwZW5kKGNvbHNfZGF0YSkKKworICAgICAgICAgICAgICAgICMgV2UgbmVlZCBzYW1lIGRhdGEg YXMgc3RyaW5nIHRvIGRpc3BsYXkgaW4gcHJvcGVydGllcyB3aW5kb3cKKyAgICAgICAgICAgICAg ICAjIElmIG11bHRpcGxlIGNvbHVtbiB0aGVuIHNlcGFyYXRlIGl0IGJ5IGNvbG9uCisgICAgICAg ICAgICAgICAgY29sc19zdHIgPSBjb2xfcm93WydhdHRkZWYnXQorICAgICAgICAgICAgICAgIGlm IGNvbF9yb3dbJ2NvbGxuc3BuYW1lJ106CisgICAgICAgICAgICAgICAgICAgIGNvbHNfc3RyICs9 ICcgQ09MTEFURSAnICsgY29sX3Jvd1snY29sbG5zcG5hbWUnXQorICAgICAgICAgICAgICAgIGlm IGNvbF9yb3dbJ29wY25hbWUnXToKKyAgICAgICAgICAgICAgICAgICAgY29sc19zdHIgKz0gJyAn ICsgY29sX3Jvd1snb3BjbmFtZSddCisgICAgICAgICAgICAgICAgaWYgY29sX3Jvd1snb3B0aW9u cyddWzBdID09ICdERVNDJzoKKyAgICAgICAgICAgICAgICAgICAgY29sc19zdHIgKz0gJyBERVND JworICAgICAgICAgICAgICAgIGNvbHMuYXBwZW5kKGNvbHNfc3RyKQorCisgICAgICAgICAgICAj IFB1c2ggYXMgY29sbGVjdGlvbgorICAgICAgICAgICAgZGF0YVsnY29sdW1ucyddID0gY29sdW1u cworICAgICAgICAgICAgIyBQdXNoIGFzIHN0cmluZworICAgICAgICAgICAgZGF0YVsnY29scydd ID0gJywgJy5qb2luKGNvbHMpCisKKyAgICAgICAgICAgIHNxbF9oZWFkZXIgPSB1IlxuLS0gSW5k ZXg6IHswfVxuXG4tLSAiLmZvcm1hdChkYXRhWyduYW1lJ10pCisKKyAgICAgICAgICAgIHNxbF9o ZWFkZXIgKz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmluZGV4X3RlbXBsYXRlX3Bh dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg J2RlbGV0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25uKQorCisgICAgICAgICAgICBpbmRleF9zcWwgPSBy ZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuaW5kZXhfdGVtcGxhdGVfcGF0aCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0ZS5zcWwn XSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhLCBj b25uPXNlbGYuY29ubikKKyAgICAgICAgICAgIGluZGV4X3NxbCArPSAiXG4iCisgICAgICAgICAg ICBpbmRleF9zcWwgKz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLmluZGV4X3RlbXBs YXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAnYWx0ZXIuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25uKQorCisgICAgICAgICAgICAjIEFkZCBpbnRv IG1haW4gc3FsCisgICAgICAgICAgICBpbmRleF9zcWwgPSByZS5zdWIoJ1xuezIsfScsICdcblxu JywgaW5kZXhfc3FsKQorICAgICAgICAgICAgbWFpbl9zcWwuYXBwZW5kKHNxbF9oZWFkZXIgKyAn XG5cbicgKyBpbmRleF9zcWwuc3RyaXAoJ1xuJykpCisKKyAgICAgICAgIiIiCisgICAgICAgICMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAgICAgIyAzKSBSZXZl cnNlIGVuZ2luZWVyZWQgc3FsIGZvciBUUklHR0VSUworICAgICAgICAjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICIiIgorICAgICAgICBTUUwgPSByZW5k ZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudHJpZ2dlcl90ZW1wbGF0ZV9wYXRoLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdub2Rlcy5zcWwnXSksIHRpZD10aWQp CisgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRlXzJkYXJyYXkoU1FMKQor ICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz1yc2V0KQorCisgICAgICAgIGZvciByb3cgaW4gcnNldFsncm93cydd OgorICAgICAgICAgICAgdHJpZ2dlcl9zcWwgPSAnJworCisgICAgICAgICAgICBTUUwgPSByZW5k ZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYudHJpZ2dlcl90ZW1wbGF0ZV9wYXRoLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJvcGVydGllcy5zcWwnXSks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlkPXRpZCwgdHJpZD1yb3dbJ29p ZCddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGxhc3RzeXNvaWQ9c2Vs Zi5kYXRsYXN0c3lzb2lkKQorCisgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5l eGVjdXRlX2RpY3QoU1FMKQorICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAg ICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKworICAgICAg ICAgICAgZGF0YSA9IGRpY3QocmVzWydyb3dzJ11bMF0pCisgICAgICAgICAgICAjIEFkZGluZyBw YXJlbnQgaW50byBkYXRhIGRpY3QsIHdpbGwgYmUgdXNpbmcgaXQgd2hpbGUgY3JlYXRpbmcgc3Fs CisgICAgICAgICAgICBkYXRhWydzY2hlbWEnXSA9IHNjaGVtYQorICAgICAgICAgICAgZGF0YVsn dGFibGUnXSA9IHRhYmxlCisKKyAgICAgICAgICAgIGlmIGRhdGFbJ3RnbmFyZ3MnXSA+IDE6Cisg ICAgICAgICAgICAgICAgIyBXZSBrbm93IHRoYXQgdHJpZ2dlciBoYXMgbW9yZSB0aGFuIDEgYXJn dW1lbnRzLAorICAgICAgICAgICAgICAgICMgbGV0J3Mgam9pbiB0aGVtCisgICAgICAgICAgICAg ICAgZGF0YVsndGdhcmdzJ10gPSAnLCAnLmpvaW4oZGF0YVsndGdhcmdzJ10pCisKKyAgICAgICAg ICAgIGlmIGxlbihkYXRhWyd0Z2F0dHInXSkgPiAxOgorICAgICAgICAgICAgICAgIGNvbHVtbnMg PSAnLCAnLmpvaW4oZGF0YVsndGdhdHRyJ10uc3BsaXQoJyAnKSkKKworICAgICAgICAgICAgICAg IFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50cmlnZ2VyX3RlbXBsYXRlX3Bh dGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZ2V0 X2NvbHVtbnMuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 aWQ9dGlkLCBjbGlzdD1jb2x1bW5zKQorCisgICAgICAgICAgICAgICAgc3RhdHVzLCByc2V0ID0g c2VsZi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCisgICAgICAgICAgICAgICAgaWYgbm90IHN0 YXR1czoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihl cnJvcm1zZz1yc2V0KQorICAgICAgICAgICAgICAgICMgJ3RnYXR0cicgY29udGFpbnMgbGlzdCBv ZiBjb2x1bW5zIGZyb20gdGFibGUgdXNlZCBpbiB0cmlnZ2VyCisgICAgICAgICAgICAgICAgY29s dW1ucyA9IFtdCisKKyAgICAgICAgICAgICAgICBmb3IgY29sX3JvdyBpbiByc2V0Wydyb3dzJ106 CisgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMuYXBwZW5kKHsnY29sdW1uJzogY29sX3Jvd1sn bmFtZSddfSkKKworICAgICAgICAgICAgICAgIGRhdGFbJ2NvbHVtbnMnXSA9IGNvbHVtbnMKKwor ICAgICAgICAgICAgZGF0YSA9IHRyaWdnZXJfZGVmaW5pdGlvbihkYXRhKQorCisgICAgICAgICAg ICBzcWxfaGVhZGVyID0gdSJcbi0tIFRyaWdnZXI6IHswfVxuXG4tLSAiLmZvcm1hdChkYXRhWydu YW1lJ10pCisKKyAgICAgICAgICAgIHNxbF9oZWFkZXIgKz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKFtzZWxmLnRyaWdnZXJfdGVtcGxhdGVfcGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVsZXRlLnNxbCddKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE9ZGF0YSwgY29ubj1zZWxmLmNvbm4p CisKKyAgICAgICAgICAgICMgSWYgdGhlIHJlcXVlc3QgZm9yIG5ldyBvYmplY3Qgd2hpY2ggZG8g bm90IGhhdmUgZGlkCisgICAgICAgICAgICB0cmlnZ2VyX3NxbCA9IHJlbmRlcl90ZW1wbGF0ZSgi LyIuam9pbihbc2VsZi50cmlnZ2VyX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NyZWF0ZS5zcWwnXSksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5j b25uKQorCisgICAgICAgICAgICB0cmlnZ2VyX3NxbCA9IHNxbF9oZWFkZXIgKyAnXG5cbicgKyB0 cmlnZ2VyX3NxbC5zdHJpcCgnXG4nKQorCisgICAgICAgICAgICAjIElmIHRyaWdnZXIgaXMgZGlz YWJsZWQgdGhlbiBhZGQgc3FsIGNvZGUgZm9yIHRoZSBzYW1lCisgICAgICAgICAgICBpZiBub3Qg ZGF0YVsnaXNfZW5hYmxlX3RyaWdnZXInXToKKyAgICAgICAgICAgICAgICB0cmlnZ2VyX3NxbCAr PSAnXG5cbicKKyAgICAgICAgICAgICAgICB0cmlnZ2VyX3NxbCArPSByZW5kZXJfdGVtcGxhdGUo Ii8iLmpvaW4oWworICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXJfdGVtcGxhdGVfcGF0 aCwKKyAgICAgICAgICAgICAgICAgICAgJ2VuYWJsZV9kaXNhYmxlX3RyaWdnZXIuc3FsJ10pLAor ICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEsIGNvbm49c2VsZi5jb25uKQorCisgICAgICAg ICAgICAjIEFkZCBpbnRvIG1haW4gc3FsCisgICAgICAgICAgICB0cmlnZ2VyX3NxbCA9IHJlLnN1 YignXG57Mix9JywgJ1xuXG4nLCB0cmlnZ2VyX3NxbCkKKyAgICAgICAgICAgIG1haW5fc3FsLmFw cGVuZCh0cmlnZ2VyX3NxbCkKKworICAgICAgICAiIiIKKyAgICAgICAgIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAjIDQpIFJldmVyc2UgZW5naW5lZXJlZCBz cWwgZm9yIFJVTEVTCisgICAgICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKKyAgICAgICAgIiIiCisKKyAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2lu KAorICAgICAgICAgICAgW3NlbGYucnVsZXNfdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3Fs J10pLCB0aWQ9dGlkKQorCisgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYuY29ubi5leGVjdXRl XzJkYXJyYXkoU1FMKQorICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJu IGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQorCisgICAgICAgIGZvciByb3cg aW4gcnNldFsncm93cyddOgorICAgICAgICAgICAgcnVsZXNfc3FsID0gJ1xuJworICAgICAgICAg ICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgICAgIFtzZWxm LnJ1bGVzX3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddCisgICAgICAgICAgICApLCBy aWQ9cm93WydvaWQnXSwgZGF0bGFzdHN5c29pZD1zZWxmLmRhdGxhc3RzeXNvaWQpCisKKyAgICAg ICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdChTUUwpCisgICAgICAg ICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2 ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorCisgICAgICAgICAgICByZXNfZGF0YSA9IHBhcnNlX3J1 bGVfZGVmaW5pdGlvbihyZXMpCisgICAgICAgICAgICBydWxlc19zcWwgKz0gcmVuZGVyX3RlbXBs YXRlKCIvIi5qb2luKAorICAgICAgICAgICAgICAgIFtzZWxmLnJ1bGVzX3RlbXBsYXRlX3BhdGgs ICdjcmVhdGUuc3FsJ10pLAorICAgICAgICAgICAgICAgIGRhdGE9cmVzX2RhdGEsIGRpc3BsYXlf Y29tbWVudHM9VHJ1ZSkKKworICAgICAgICAgICAgIyBBZGQgaW50byBtYWluIHNxbAorICAgICAg ICAgICAgcnVsZXNfc3FsID0gcmUuc3ViKCdcbnsyLH0nLCAnXG5cbicsIHJ1bGVzX3NxbCkKKyAg ICAgICAgICAgIG1haW5fc3FsLmFwcGVuZChydWxlc19zcWwpCisKKyAgICAgICAgIiIiCisgICAg ICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICAgICAgICAj IDUpIFJldmVyc2UgZW5naW5lZXJlZCBzcWwgZm9yIFBBUlRJVElPTlMKKyAgICAgICAgIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgICAgICIiIgorICAgICAg ICBpZiAnaXNfcGFydGl0aW9uZWQnIGluIGRhdGEgYW5kIGRhdGFbJ2lzX3BhcnRpdGlvbmVkJ106 CisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYucGFydGl0 aW9uX3RlbXBsYXRlX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICdub2Rlcy5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2NpZD1zY2lkLCB0aWQ9dGlkKQorICAgICAgICAgICAgc3RhdHVzLCByc2V0ID0gc2VsZi5jb25u LmV4ZWN1dGVfMmRhcnJheShTUUwpCisgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAg ICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cnNldCkKKwor ICAgICAgICAgICAgc3FsX2hlYWRlciA9IHUiXG4tLSBQYXJ0aXRpb25zIFNRTCIKKyAgICAgICAg ICAgIHBhcnRpdGlvbl9zcWwgPSAnJworICAgICAgICAgICAgZm9yIHJvdyBpbiByc2V0Wydyb3dz J106CisgICAgICAgICAgICAgICAgcGFydF9kYXRhID0gZGljdCgpCisgICAgICAgICAgICAgICAg cGFydF9kYXRhWydwYXJ0aXRpb25lZF90YWJsZV9uYW1lJ10gPSBkYXRhWyduYW1lJ10KKyAgICAg ICAgICAgICAgICBwYXJ0X2RhdGFbJ3BhcmVudF9zY2hlbWEnXSA9IGRhdGFbJ3NjaGVtYSddCisg ICAgICAgICAgICAgICAgcGFydF9kYXRhWydzY2hlbWEnXSA9IHJvd1snc2NoZW1hX25hbWUnXQor ICAgICAgICAgICAgICAgIHBhcnRfZGF0YVsncmVsaXNwYXJ0aXRpb24nXSA9IFRydWUKKyAgICAg ICAgICAgICAgICBwYXJ0X2RhdGFbJ25hbWUnXSA9IHJvd1snbmFtZSddCisgICAgICAgICAgICAg ICAgcGFydF9kYXRhWydwYXJ0aXRpb25fdmFsdWUnXSA9IHJvd1sncGFydGl0aW9uX3ZhbHVlJ10K KworICAgICAgICAgICAgICAgIHBhcnRpdGlvbl9zcWwgKz0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKAorICAgICAgICAgICAgICAgICAgICBbc2VsZi5wYXJ0aXRpb25fdGVtcGxhdGVfcGF0aCwg J2NyZWF0ZS5zcWwnXSksCisgICAgICAgICAgICAgICAgICAgIGRhdGE9cGFydF9kYXRhLCBjb25u PXNlbGYuY29ubikKKworICAgICAgICAgICAgIyBBZGQgaW50byBtYWluIHNxbAorICAgICAgICAg ICAgcGFydGl0aW9uX3NxbCA9IHJlLnN1YignXG57Mix9JywgJ1xuXG4nLCBwYXJ0aXRpb25fc3Fs KQorICAgICAgICAgICAgbWFpbl9zcWwuYXBwZW5kKHNxbF9oZWFkZXIgKyAnXG5cbicgKyBwYXJ0 aXRpb25fc3FsLnN0cmlwKCdcbicpKQorCisgICAgICAgIHNxbCA9ICdcbicuam9pbihtYWluX3Nx bCkKKworICAgICAgICByZXR1cm4gYWpheF9yZXNwb25zZShyZXNwb25zZT1zcWwuc3RyaXAoJ1xu JykpCisKKyAgICBkZWYgcmVzZXRfc3RhdGlzdGljcyhzZWxmLCBzY2lkLCB0aWQpOgorICAgICAg ICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHJlc2V0IHN0YXRpc3RpY3Mgb2YgdGFi bGUKKworICAgICAgICAgQXJnczoKKyAgICAgICAgICAgc2NpZDogU2NoZW1hIElECisgICAgICAg ICAgIHRpZDogVGFibGUgSUQKKyAgICAgICAgIiIiCisgICAgICAgIHRyeToKKyAgICAgICAgICAg IFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50YWJsZV90ZW1wbGF0ZV9wYXRo LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzZXRfc3Rh dHMuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpZD10aWQpCisg ICAgICAgICAgICBzdGF0dXMsIHJlcyA9IHNlbGYuY29ubi5leGVjdXRlX3NjYWxhcihTUUwpCisg ICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJldHVybiBpbnRlcm5h bF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQorCisgICAgICAgICAgICByZXR1cm4gbWFrZV9q c29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgICAgIHN1Y2Nlc3M9MSwKKyAgICAgICAgICAgICAg ICBpbmZvPWdldHRleHQoIlRhYmxlIHN0YXRpc3RpY3MgaGF2ZSBiZWVuIHJlc2V0IiksCisgICAg ICAgICAgICAgICAgZGF0YT17CisgICAgICAgICAgICAgICAgICAgICdpZCc6IHRpZCwKKyAgICAg ICAgICAgICAgICAgICAgJ3NjaWQnOiBzY2lkCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgKQorCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgICAgIHJldHVy biBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKGUpKQpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMv dGVtcGxhdGVzL3NjaGVtYS9qcy9zY2hlbWEuanMgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90ZW1wbGF0ZXMvc2NoZW1hL2pzL3Nj aGVtYS5qcwppbmRleCAwZTkwOTk3Li5lMGEwZmNkIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90ZW1wbGF0ZXMv c2NoZW1hL2pzL3NjaGVtYS5qcworKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91 cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1hcy90ZW1wbGF0ZXMvc2NoZW1hL2pzL3NjaGVtYS5q cwpAQCAtMTQ1LDYgKzE0NSwxNiBAQCBkZWZpbmUoJ3BnYWRtaW4ubm9kZS5zY2hlbWEnLCBbCiAg ICAgZ3JvdXA6IGdldHRleHQoJ1RhYmxlJyksIG1vZGU6IFsnZWRpdCcsICdjcmVhdGUnXSwKICAg ICB0eXBlOiAnc3dpdGNoJywKICAgICBkaXNhYmxlZDogZnVuY3Rpb24obSkgeworICAgICAgLy8g SWYgdGFibGUgaXMgcGFydGl0aW9uZWQgdGFibGUgdGhlbiBkaXNhYmxlZCBpdC4KKyAgICAgIGlm IChtLnRvcCAmJiBtLnRvcC5nZXQoJ2lzX3BhcnRpdGlvbmVkJykpIHsKKyAgICAgICAgLy8gV2Ug YWxzbyBuZWVkIHRvIHVuc2V0IHJlc3Qgb2YgYWxsCisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rp b24oKSB7CisgICAgICAgICAgbS5zZXQoJ2F1dG92YWN1dW1fY3VzdG9tJywgZmFsc2UpOworICAg ICAgICB9LCAxMCk7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CisKICAgICAgIGlm KCFtLnRvcC5pblNjaGVtYS5hcHBseSh0aGlzLCBbbV0pKSB7CiAgICAgICAgIHJldHVybiBmYWxz ZTsKICAgICAgIH0KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9iYWNrZm9ybS5w Z2FkbWluLmpzIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2JhY2tmb3JtLnBnYWRtaW4uanMKaW5k ZXggYTgyMjA1ZS4uY2Q4ZjU4OCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2Jh Y2tmb3JtLnBnYWRtaW4uanMKKysrIGIvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2JhY2tmb3JtLnBn YWRtaW4uanMKQEAgLTEwMjIsMTYgKzEwMjIsMTYgQEAKIAogICAgICAgdmFyIGNvbGxlY3Rpb24g PSB0aGlzLm1vZGVsLmdldChkYXRhLm5hbWUpOwogCi0gICAgICB2YXIgY2VsbEVkaXRpbmcgPSBm dW5jdGlvbihhcmdzKXsKLSAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAorICAgICAgdmFyIGNlbGxF ZGl0aW5nID0gZnVuY3Rpb24oYXJncykgeworICAgICAgICB2YXIgdGhhdCA9IHRoaXMsCiAgICAg ICAgICAgY2VsbCA9IGFyZ3NbMF07CiAgICAgICAgIC8vIFNlYXJjaCBmb3IgYW55IG90aGVyIHJv d3Mgd2hpY2ggYXJlIG9wZW4uCiAgICAgICAgIHRoaXMuZWFjaChmdW5jdGlvbihtKXsKICAgICAg ICAgICAvLyBDaGVjayBpZiByb3cgd2hpY2ggd2UgYXJlIGFib3V0IHRvIGNsb3NlIGlzIG5vdCBj dXJyZW50IHJvdy4KICAgICAgICAgICBpZiAoY2VsbC5tb2RlbCAhPSBtKSB7Ci0gICAgICAgICAg ICB2YXIgaWR4ID0gc2VsZi5pbmRleE9mKG0pOworICAgICAgICAgICAgdmFyIGlkeCA9IHRoYXQu aW5kZXhPZihtKTsKICAgICAgICAgICAgIGlmIChpZHggPiAtMSkgewotICAgICAgICAgICAgICB2 YXIgcm93ID0gZ3JpZC5ib2R5LnJvd3NbaWR4XSwKKyAgICAgICAgICAgICAgdmFyIHJvdyA9IHNl bGYuZ3JpZC5ib2R5LnJvd3NbaWR4XSwKICAgICAgICAgICAgICAgICAgIGVkaXRDZWxsID0gcm93 LiRlbC5maW5kKCIuc3Vibm9kZS1lZGl0LWluLXByb2Nlc3MiKS5wYXJlbnQoKTsKICAgICAgICAg ICAgICAgLy8gT25seSBjbG9zZSByb3cgaWYgaXQncyBvcGVuLgogICAgICAgICAgICAgICBpZiAo ZWRpdENlbGwubGVuZ3RoID4gMCl7CkBAIC0xMDUzLDcgKzEwNTMsNyBAQAogICAgICAgfSk7CiAK ICAgICAgIC8vIFJlbmRlciBzdWJOb2RlIGdyaWQKLSAgICAgIHN1Yk5vZGVHcmlkID0gZ3JpZC5y ZW5kZXIoKS4kZWw7CisgICAgICBzdWJOb2RlR3JpZCA9IHNlbGYuZ3JpZC5yZW5kZXIoKS4kZWw7 CiAKICAgICAgIC8vIENvbWJpbmUgRWRpdCBhbmQgRGVsZXRlIENlbGwKICAgICAgIGlmIChkYXRh LmNhbkRlbGV0ZSAmJiBkYXRhLmNhbkVkaXQpIHsKQEAgLTEwNzEsNyArMTA3MSw3IEBACiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5jYW5BZGRSb3cuYXBwbHkoc2VsZiwgW3NlbGYu bW9kZWxdKSA6IHRydWU7CiAgICAgICAgICAgaWYgKGNhbkFkZFJvdykgewogICAgICAgICAgICAg ICAvLyBDbG9zZSBhbnkgZXhpc3RpbmcgZXhwYW5kZWQgcm93IGJlZm9yZSBhZGRpbmcgbmV3IG9u ZS4KLSAgICAgICAgICAgICAgXy5lYWNoKGdyaWQuYm9keS5yb3dzLCBmdW5jdGlvbihyb3cpewor ICAgICAgICAgICAgICBfLmVhY2goc2VsZi5ncmlkLmJvZHkucm93cywgZnVuY3Rpb24ocm93KXsK ICAgICAgICAgICAgICAgICB2YXIgZWRpdENlbGwgPSByb3cuJGVsLmZpbmQoIi5zdWJub2RlLWVk aXQtaW4tcHJvY2VzcyIpLnBhcmVudCgpOwogICAgICAgICAgICAgICAgIC8vIE9ubHkgY2xvc2Ug cm93IGlmIGl0J3Mgb3Blbi4KICAgICAgICAgICAgICAgICBpZiAoZWRpdENlbGwubGVuZ3RoID4g MCl7CkBAIC0xMTAwLDcgKzExMDAsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgfQogCi0gICAgICAgICAgICAgICQoZ3JpZC5ib2R5LiRlbC5maW5kKCQoInRyLm5ldyIpKSku cmVtb3ZlQ2xhc3MoIm5ldyIpCisgICAgICAgICAgICAgICQoc2VsZi5ncmlkLmJvZHkuJGVsLmZp bmQoJCgidHIubmV3IikpKS5yZW1vdmVDbGFzcygibmV3IikKICAgICAgICAgICAgICAgdmFyIG0g PSBuZXcgKGRhdGEubW9kZWwpIChudWxsLCB7CiAgICAgICAgICAgICAgICAgc2lsZW50OiB0cnVl LAogICAgICAgICAgICAgICAgIGhhbmRsZXI6IGNvbGxlY3Rpb24sCkBAIC0xMTExLDcgKzExMTEs NyBAQAogICAgICAgICAgICAgICBjb2xsZWN0aW9uLmFkZChtKTsKIAogICAgICAgICAgICAgICB2 YXIgaWR4ID0gY29sbGVjdGlvbi5pbmRleE9mKG0pLAotICAgICAgICAgICAgICAgICAgbmV3Um93 ID0gZ3JpZC5ib2R5LnJvd3NbaWR4XS4kZWw7CisgICAgICAgICAgICAgICAgICBuZXdSb3cgPSBz ZWxmLmdyaWQuYm9keS5yb3dzW2lkeF0uJGVsOwogCiAgICAgICAgICAgICAgIG5ld1Jvdy5hZGRD bGFzcygibmV3Iik7CiAgICAgICAgICAgICAgICQobmV3Um93KS5wZ01ha2VWaXNpYmxlKCdiYWNr Zm9ybS10YWInKTsKQEAgLTExNDksNiArMTE0OSw3IEBACiAgIH0pOwogCiAgIHZhciBTdWJOb2Rl Q29sbGVjdGlvbkNvbnRyb2wgPSBCYWNrZm9ybS5TdWJOb2RlQ29sbGVjdGlvbkNvbnRyb2wgPSBC YWNrZm9ybS5Db250cm9sLmV4dGVuZCh7CisgICAgcm93OiBCYWNrZ3JpZC5Sb3csCiAgICAgcmVu ZGVyOiBmdW5jdGlvbigpIHsKICAgICAgIHZhciBmaWVsZCA9IF8uZGVmYXVsdHModGhpcy5maWVs ZC50b0pTT04oKSwgdGhpcy5kZWZhdWx0cyksCiAgICAgICAgICAgYXR0cmlidXRlcyA9IHRoaXMu bW9kZWwudG9KU09OKCksCkBAIC0xMTc5LDYgKzExODAsMTIgQEAKICAgICAgIC8vIFNob3cgQmFj a2dyaWQgQ29udHJvbAogICAgICAgZ3JpZCA9IChkYXRhLnN1Ym5vZGUgPT0gdW5kZWZpbmVkKSA/ ICIiIDogdGhpcy5zaG93R3JpZENvbnRyb2woZGF0YSk7CiAKKyAgICAgIC8vIENsZWFuIHVwIGZp cnN0CisgICAgICB0aGlzLiRlbC5yZW1vdmVDbGFzcyhCYWNrZm9ybS5oaWRkZW5DbGFzc25hbWUp OworCisgICAgICBpZiAoIWRhdGEudmlzaWJsZSkKKyAgICAgICAgdGhpcy4kZWwuYWRkQ2xhc3Mo QmFja2Zvcm0uaGlkZGVuQ2xhc3NuYW1lKTsKKwogICAgICAgdGhpcy4kZWwuaHRtbChncmlkKS5h ZGRDbGFzcyhmaWVsZC5uYW1lKTsKICAgICAgIHRoaXMudXBkYXRlSW52YWxpZCgpOwogCkBAIC0x MjQ2LDcgKzEyNTMsOSBAQAogICAgICAgICAgICAgbmFtZTogInBnLWJhY2tmb3JtLWRlbGV0ZSIs IGxhYmVsOiAiIiwKICAgICAgICAgICAgIGNlbGw6IEJhY2tncmlkLkV4dGVuc2lvbi5EZWxldGVD ZWxsLAogICAgICAgICAgICAgZWRpdGFibGU6IGZhbHNlLCBjZWxsX3ByaW9yaXR5OiAtMSwKLSAg ICAgICAgICAgIGNhbkRlbGV0ZVJvdzogZGF0YS5jYW5EZWxldGVSb3cKKyAgICAgICAgICAgIGNh bkRlbGV0ZVJvdzogZGF0YS5jYW5EZWxldGVSb3csCisgICAgICAgICAgICBjdXN0b21EZWxldGVN c2c6IGRhdGEuY3VzdG9tRGVsZXRlTXNnLAorICAgICAgICAgICAgY3VzdG9tRGVsZXRlVGl0bGU6 IGRhdGEuY3VzdG9tRGVsZXRlVGl0bGUKICAgICAgICAgICB9KTsKICAgICAgIH0KIApAQCAtMTMw Myw2ICsxMzEyLDcgQEAKICAgICAgIHZhciBncmlkID0gc2VsZi5ncmlkID0gbmV3IEJhY2tncmlk LkdyaWQoewogICAgICAgICAgIGNvbHVtbnM6IGdyaWRTY2hlbWEuY29sdW1ucywKICAgICAgICAg ICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uLAorICAgICAgICAgIHJvdzogdGhpcy5yb3csCiAgICAg ICAgICAgY2xhc3NOYW1lOiAiYmFja2dyaWQgdGFibGUtYm9yZGVyZWQiCiAgICAgICB9KTsKIApk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGljL2pzL2JhY2tncmlkLnBnYWRtaW4uanMgYi93 ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja2dyaWQucGdhZG1pbi5qcwppbmRleCA2NGYwY2I2Li5k NDI2YTgyIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja2dyaWQucGdhZG1p bi5qcworKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvYmFja2dyaWQucGdhZG1pbi5qcwpAQCAt MzgwLDcgKzM4MCw4IEBACiAKICAgdmFyIERlbGV0ZUNlbGwgPSBCYWNrZ3JpZC5FeHRlbnNpb24u RGVsZXRlQ2VsbCA9IEJhY2tncmlkLkNlbGwuZXh0ZW5kKHsKICAgICAgIGRlZmF1bHRzOiBfLmRl ZmF1bHRzKHsKLSAgICAgICAgZGVmYXVsdERlbGV0ZU1zZzogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2lz aCB0byBkZWxldGUgdGhpcyByb3c/JworICAgICAgICBkZWZhdWx0RGVsZXRlTXNnOiAnQXJlIHlv dSBzdXJlIHlvdSB3aXNoIHRvIGRlbGV0ZSB0aGlzIHJvdz8nLAorICAgICAgICBkZWZhdWx0RGVs ZXRlVGl0bGU6ICdEZWxldGUgUm93JwogICAgICAgfSwgQmFja2dyaWQuQ2VsbC5wcm90b3R5cGUu ZGVmYXVsdHMpLAogCiAgICAgICAvKiogQHByb3BlcnR5ICovCkBAIC0zOTksOCArNDAwLDEwIEBA CiAgICAgICAgIGlmIChjYW5EZWxldGVSb3cpIHsKICAgICAgICAgICB2YXIgZGVsZXRlX21zZyA9 ICFfLmlzVW5kZWZpbmVkKHRoaXMuY29sdW1uLmdldCgnY3VzdG9tRGVsZXRlTXNnJykpID8KICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uLmdldCgnY3VzdG9tRGVsZXRlTXNn Jyk6IHRoYXQuZGVmYXVsdHMuZGVmYXVsdERlbGV0ZU1zZzsKKyAgICAgICAgICB2YXIgZGVsZXRl X3RpdGxlID0gIV8uaXNVbmRlZmluZWQodGhpcy5jb2x1bW4uZ2V0KCdjdXN0b21EZWxldGVUaXRs ZScpKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbi5nZXQoJ2N1c3Rv bURlbGV0ZVRpdGxlJyk6IHRoYXQuZGVmYXVsdHMuZGVmYXVsdERlbGV0ZVRpdGxlOwogICAgICAg ICAgIEFsZXJ0aWZ5LmNvbmZpcm0oCi0gICAgICAgICAgICAnRGVsZXRlIFJvdycsCisgICAgICAg ICAgICBkZWxldGVfdGl0bGUsCiAgICAgICAgICAgICBkZWxldGVfbXNnLAogICAgICAgICAgICAg ZnVuY3Rpb24oZXZ0KSB7CiAgICAgICAgICAgICAgIHRoYXQubW9kZWwuY29sbGVjdGlvbi5yZW1v dmUodGhhdC5tb2RlbCk7CkBAIC0xMzc4LDYgKzEzODEsNTggQEAKIAogICBfLmV4dGVuZChNb21l bnRDZWxsLnByb3RvdHlwZSwgTW9tZW50Rm9ybWF0dGVyLnByb3RvdHlwZS5kZWZhdWx0cyk7CiAK KworICBCYWNrZ3JpZC5FeHRlbnNpb24uU3RyaW5nRGVwQ2VsbCA9IEJhY2tncmlkLlN0cmluZ0Nl bGwuZXh0ZW5kKHsKKyAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKCkgeworICAgICAgICBCYWNr Z3JpZC5TdHJpbmdDZWxsLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50 cyk7CisgICAgICAgIEJhY2tncmlkLkV4dGVuc2lvbi5EZXBlbmRlbnRDZWxsLnByb3RvdHlwZS5p bml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICB9LAorICAgICAgZGVwZW5k ZW50Q2hhbmdlZDogZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLiRlbC5lbXB0eSgpOworCisg ICAgICAgIHZhciBzZWxmID0gdGhpcywKKyAgICAgICAgICAgIG1vZGVsID0gdGhpcy5tb2RlbCwK KyAgICAgICAgICAgIGNvbHVtbiA9IHRoaXMuY29sdW1uLAorICAgICAgICAgICAgZWRpdGFibGUg PSB0aGlzLmNvbHVtbi5nZXQoImVkaXRhYmxlIik7CisKKyAgICAgICAgdGhpcy5yZW5kZXIoKTsK KworICAgICAgICBpc19lZGl0YWJsZSA9IF8uaXNGdW5jdGlvbihlZGl0YWJsZSkgPyAhIWVkaXRh YmxlLmFwcGx5KGNvbHVtbiwgW21vZGVsXSkgOiAhIWVkaXRhYmxlOworICAgICAgICBzZXRUaW1l b3V0KGZ1bmN0aW9uKCkgeworICAgICAgICAgIHNlbGYuJGVsLnJlbW92ZUNsYXNzKCJlZGl0b3Ii KTsKKyAgICAgICAgICBpZiAoaXNfZWRpdGFibGUpeyBzZWxmLiRlbC5hZGRDbGFzcygiZWRpdGFi bGUiKTsgfQorICAgICAgICAgIGVsc2UgeyBzZWxmLiRlbC5yZW1vdmVDbGFzcygiZWRpdGFibGUi KTsgfQorICAgICAgICB9LCAxMCk7CisKKyAgICAgICAgdGhpcy5kZWxlZ2F0ZUV2ZW50cygpOwor ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgIH0sCisgICAgICByZW1vdmU6IEJhY2tncmlkLkV4 dGVuc2lvbi5EZXBlbmRlbnRDZWxsLnByb3RvdHlwZS5yZW1vdmUKKyAgICB9KTsKKworICBCYWNr Z3JpZC5FeHRlbnNpb24uU2VsZWN0MkRlcENlbGwgPSBCYWNrZ3JpZC5FeHRlbnNpb24uU2VsZWN0 MkNlbGwuZXh0ZW5kKHsKKyAgICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHsKKyAgICAgIEJhY2tn cmlkLkV4dGVuc2lvbi5TZWxlY3QyQ2VsbC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlz LCBhcmd1bWVudHMpOworICAgICAgQmFja2dyaWQuRXh0ZW5zaW9uLkRlcGVuZGVudENlbGwucHJv dG90eXBlLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICB9LAorCisgICAg ZGVwZW5kZW50Q2hhbmdlZDogZnVuY3Rpb24gKCkgeworICAgICAgdmFyIG1vZGVsID0gdGhpcy5t b2RlbDsKKyAgICAgIHZhciBjb2x1bW4gPSB0aGlzLmNvbHVtbjsKKyAgICAgIGVkaXRhYmxlID0g dGhpcy5jb2x1bW4uZ2V0KCJlZGl0YWJsZSIpOworCisgICAgICB0aGlzLnJlbmRlcigpOworCisg ICAgICBpc19lZGl0YWJsZSA9IF8uaXNGdW5jdGlvbihlZGl0YWJsZSkgPyAhIWVkaXRhYmxlLmFw cGx5KGNvbHVtbiwgW21vZGVsXSkgOiAhIWVkaXRhYmxlOworICAgICAgaWYgKGlzX2VkaXRhYmxl KXsgdGhpcy4kZWwuYWRkQ2xhc3MoImVkaXRhYmxlIik7IH0KKyAgICAgIGVsc2UgeyB0aGlzLiRl bC5yZW1vdmVDbGFzcygiZWRpdGFibGUiKTsgfQorCisgICAgICB0aGlzLmRlbGVnYXRlRXZlbnRz KCk7CisgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorICAgIHJlbW92ZTogQmFja2dyaWQuRXh0 ZW5zaW9uLkRlcGVuZGVudENlbGwucHJvdG90eXBlLnJlbW92ZQorICB9KTsKKwogICByZXR1cm4g QmFja2dyaWQ7CiAKIH0pKTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2JhY2t1cC90 ZW1wbGF0ZXMvYmFja3VwL2pzL2JhY2t1cC5qcyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2JhY2t1cC90 ZW1wbGF0ZXMvYmFja3VwL2pzL2JhY2t1cC5qcwppbmRleCA4NzRiYmViLi44ZTk2ZDFiIDEwMDY0 NAotLS0gYS93ZWIvcGdhZG1pbi90b29scy9iYWNrdXAvdGVtcGxhdGVzL2JhY2t1cC9qcy9iYWNr dXAuanMKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvYmFja3VwL3RlbXBsYXRlcy9iYWNrdXAvanMv YmFja3VwLmpzCkBAIC0yNjksNyArMjY5LDcgQEAgVE9ETyBMSVNUIEZPUiBCQUNLVVA6CiAKICAg ICAgICAgLy8gRGVmaW5lIGxpc3Qgb2Ygbm9kZXMgb24gd2hpY2ggYmFja3VwIGNvbnRleHQgbWVu dSBvcHRpb24gYXBwZWFycwogICAgICAgICB2YXIgYmFja3VwX3N1cHBvcnRlZF9ub2RlcyA9IFsK LSAgICAgICAgICAgICAgJ2RhdGFiYXNlJywgJ3NjaGVtYScsICd0YWJsZScKKyAgICAgICAgICAg ICAgJ2RhdGFiYXNlJywgJ3NjaGVtYScsICd0YWJsZScsICdwYXJ0aXRpb24nCiAgICAgICAgICAg ICBdOwogCiAgICAgICAgIC8qKgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvZGF0YWdy aWQvX19pbml0X18ucHkgYi93ZWIvcGdhZG1pbi90b29scy9kYXRhZ3JpZC9fX2luaXRfXy5weQpp bmRleCBmNDYyOWZjLi5mOGE3ZTRjIDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi90b29scy9kYXRh Z3JpZC9fX2luaXRfXy5weQorKysgYi93ZWIvcGdhZG1pbi90b29scy9kYXRhZ3JpZC9fX2luaXRf Xy5weQpAQCAtMTEyLDYgKzExMiwxMCBAQCBkZWYgaW5pdGlhbGl6ZV9kYXRhZ3JpZChjbWRfdHlw ZSwgb2JqX3R5cGUsIHNpZCwgZGlkLCBvYmpfaWQpOgogICAgICAgICByZXR1cm4gaW50ZXJuYWxf c2VydmVyX2Vycm9yKGVycm9ybXNnPXN0cihtc2cpKQogCiAgICAgdHJ5OgorICAgICAgICAjIGlm IG9iamVjdCB0eXBlIGlzIHBhcnRpdGlvbiB0aGVuIGl0IGlzIG5vdGhpbmcgYnV0IGEgdGFibGUu CisgICAgICAgIGlmIG9ial90eXBlID09ICdwYXJ0aXRpb24nOgorICAgICAgICAgICAgb2JqX3R5 cGUgPSAndGFibGUnCisKICAgICAgICAgIyBHZXQgdGhlIG9iamVjdCBhcyBwZXIgdGhlIG9iamVj dCB0eXBlCiAgICAgICAgIGNvbW1hbmRfb2JqID0gT2JqZWN0UmVnaXN0cnkuZ2V0X29iamVjdChv YmpfdHlwZSwgY29ubl9pZD1jb25uX2lkLCBzaWQ9c2lkLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlkPWRpZCwgb2JqX2lkPW9ial9pZCwgY21kX3R5 cGU9Y21kX3R5cGUsCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9kYXRhZ3JpZC90ZW1w bGF0ZXMvZGF0YWdyaWQvanMvZGF0YWdyaWQuanMgYi93ZWIvcGdhZG1pbi90b29scy9kYXRhZ3Jp ZC90ZW1wbGF0ZXMvZGF0YWdyaWQvanMvZGF0YWdyaWQuanMKaW5kZXggN2M0OGVhNS4uNjMwNjdm MCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvZGF0YWdyaWQvdGVtcGxhdGVzL2RhdGFn cmlkL2pzL2RhdGFncmlkLmpzCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlkL3RlbXBs YXRlcy9kYXRhZ3JpZC9qcy9kYXRhZ3JpZC5qcwpAQCAtMjgsNyArMjgsNyBAQCBkZWZpbmUoWwog ICAgICAgICAvLyBEZWZpbmUgbGlzdCBvZiBub2RlcyBvbiB3aGljaCB2aWV3IGRhdGEgb3B0aW9u IGFwcGVhcnMKICAgICAgICAgdmFyIHN1cHBvcnRlZF9ub2RlcyA9IFsKICAgICAgICAgICAgJ3Rh YmxlJywgJ3ZpZXcnLCAnbXZpZXcnLAotICAgICAgICAgICAnZm9yZWlnbi10YWJsZScsICdjYXRh bG9nX29iamVjdCcKKyAgICAgICAgICAgJ2ZvcmVpZ24tdGFibGUnLCAnY2F0YWxvZ19vYmplY3Qn LCAncGFydGl0aW9uJwogICAgICAgICBdLAogCiAgICAgICAgIC8qIEVuYWJsZS9kaXNhYmxlIFZp ZXcgZGF0YSBtZW51IGluIHRvb2xzIGJhc2VkCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29s cy9tYWludGVuYW5jZS90ZW1wbGF0ZXMvbWFpbnRlbmFuY2UvanMvbWFpbnRlbmFuY2UuanMgYi93 ZWIvcGdhZG1pbi90b29scy9tYWludGVuYW5jZS90ZW1wbGF0ZXMvbWFpbnRlbmFuY2UvanMvbWFp bnRlbmFuY2UuanMKaW5kZXggZjM4MjNmOS4uMTNiNzQ0YSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRt aW4vdG9vbHMvbWFpbnRlbmFuY2UvdGVtcGxhdGVzL21haW50ZW5hbmNlL2pzL21haW50ZW5hbmNl LmpzCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL21haW50ZW5hbmNlL3RlbXBsYXRlcy9tYWludGVu YW5jZS9qcy9tYWludGVuYW5jZS5qcwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIGRlZmluZShbCiAKICAg ICAgICAgdmFyIG1haW50ZW5hbmNlX3N1cHBvcnRlZF9ub2RlcyA9IFsKICAgICAgICAgICAgICAg J2RhdGFiYXNlJywgJ3RhYmxlJywgJ3ByaW1hcnlfa2V5JywKLSAgICAgICAgICAgICAgJ3VuaXF1 ZV9jb25zdHJhaW50JywgJ2luZGV4JworICAgICAgICAgICAgICAndW5pcXVlX2NvbnN0cmFpbnQn LCAnaW5kZXgnLCAncGFydGl0aW9uJwogICAgICAgICAgICAgXTsKIAogICAgICAgICAvKioKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3Jlc3RvcmUvdGVtcGxhdGVzL3Jlc3RvcmUvanMv cmVzdG9yZS5qcyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3Jlc3RvcmUvdGVtcGxhdGVzL3Jlc3RvcmUv anMvcmVzdG9yZS5qcwppbmRleCBmODIxMTYyLi4yZjIxMmFjIDEwMDY0NAotLS0gYS93ZWIvcGdh ZG1pbi90b29scy9yZXN0b3JlL3RlbXBsYXRlcy9yZXN0b3JlL2pzL3Jlc3RvcmUuanMKKysrIGIv d2ViL3BnYWRtaW4vdG9vbHMvcmVzdG9yZS90ZW1wbGF0ZXMvcmVzdG9yZS9qcy9yZXN0b3JlLmpz CkBAIC0yMjcsNyArMjI3LDggQEAgZGVmaW5lKFsKICAgICAgICAgdmFyIHJlc3RvcmVfc3VwcG9y dGVkX25vZGVzID0gWwogICAgICAgICAgICAgICAnZGF0YWJhc2UnLCAnc2NoZW1hJywKICAgICAg ICAgICAgICAgJ3RhYmxlJywgJ2Z1bmN0aW9uJywKLSAgICAgICAgICAgICAgJ3RyaWdnZXInLCAn aW5kZXgnCisgICAgICAgICAgICAgICd0cmlnZ2VyJywgJ2luZGV4JywKKyAgICAgICAgICAgICAg J3BhcnRpdGlvbicKICAgICAgICAgICAgIF07CiAKICAgICAgICAgLyoqCmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi90b29scy91c2VyX21hbmFnZW1lbnQvdGVtcGxhdGVzL3VzZXJfbWFuYWdlbWVu dC9qcy91c2VyX21hbmFnZW1lbnQuanMgYi93ZWIvcGdhZG1pbi90b29scy91c2VyX21hbmFnZW1l bnQvdGVtcGxhdGVzL3VzZXJfbWFuYWdlbWVudC9qcy91c2VyX21hbmFnZW1lbnQuanMKaW5kZXgg ZjExYjU1Mi4uNjhlNTFmNSAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvdXNlcl9tYW5h Z2VtZW50L3RlbXBsYXRlcy91c2VyX21hbmFnZW1lbnQvanMvdXNlcl9tYW5hZ2VtZW50LmpzCisr KyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3VzZXJfbWFuYWdlbWVudC90ZW1wbGF0ZXMvdXNlcl9tYW5h Z2VtZW50L2pzL3VzZXJfbWFuYWdlbWVudC5qcwpAQCAtMjUsMzQgKzI1LDcgQEAgZGVmaW5lKFsK ICAgICAgICAgICAgIC8vIEhvdyBsb25nIHRvIHdhaXQgYWZ0ZXIgdHlwaW5nIGhhcyBzdG9wcGVk IGJlZm9yZSBzZWFyY2hpbmcgY2FuIHN0YXJ0CiAgICAgICAgICAgICB3YWl0OiAxNTAKICAgICAg ICAgICB9KSk7Ci0gICAgICAgIH0sCi0gICAgICAgIFN0cmluZ0RlcENlbGwgPSBCYWNrZ3JpZC5T dHJpbmdDZWxsLmV4dGVuZCh7Ci0gICAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7Ci0g ICAgICAgICAgICBCYWNrZ3JpZC5TdHJpbmdDZWxsLnByb3RvdHlwZS5pbml0aWFsaXplLmFwcGx5 KHRoaXMsIGFyZ3VtZW50cyk7Ci0gICAgICAgICAgICBCYWNrZ3JpZC5FeHRlbnNpb24uRGVwZW5k ZW50Q2VsbC5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwotICAg ICAgICAgIH0sCi0gICAgICAgICAgZGVwZW5kZW50Q2hhbmdlZDogZnVuY3Rpb24gKCkgewotICAg ICAgICAgICAgdGhpcy4kZWwuZW1wdHkoKTsKLQotICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlz LAotICAgICAgICAgICAgICBtb2RlbCA9IHRoaXMubW9kZWwsCi0gICAgICAgICAgICAgIGNvbHVt biA9IHRoaXMuY29sdW1uLAotICAgICAgICAgICAgICBlZGl0YWJsZSA9IHRoaXMuY29sdW1uLmdl dCgiZWRpdGFibGUiKTsKLQotICAgICAgICAgICAgdGhpcy5yZW5kZXIoKTsKLQotICAgICAgICAg ICAgaXNfZWRpdGFibGUgPSBfLmlzRnVuY3Rpb24oZWRpdGFibGUpID8gISFlZGl0YWJsZS5hcHBs eShjb2x1bW4sIFttb2RlbF0pIDogISFlZGl0YWJsZTsKLSAgICAgICAgICAgIHNldFRpbWVvdXQo ZnVuY3Rpb24oKSB7Ci0gICAgICAgICAgICAgIHNlbGYuJGVsLnJlbW92ZUNsYXNzKCJlZGl0b3Ii KTsKLSAgICAgICAgICAgICAgaWYgKGlzX2VkaXRhYmxlKXsgc2VsZi4kZWwuYWRkQ2xhc3MoImVk aXRhYmxlIik7IH0KLSAgICAgICAgICAgICAgZWxzZSB7IHNlbGYuJGVsLnJlbW92ZUNsYXNzKCJl ZGl0YWJsZSIpOyB9Ci0gICAgICAgICAgICB9LCAxMCk7Ci0KLSAgICAgICAgICAgIHRoaXMuZGVs ZWdhdGVFdmVudHMoKTsKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAgICAgIH0sCi0g ICAgICAgICAgcmVtb3ZlOiBCYWNrZ3JpZC5FeHRlbnNpb24uRGVwZW5kZW50Q2VsbC5wcm90b3R5 cGUucmVtb3ZlCi0gICAgICAgIH0pOworICAgICAgICB9CiAKICAgICBwZ0Jyb3dzZXIuVXNlck1h bmFnZW1lbnQgID0gewogICAgICAgaW5pdDogZnVuY3Rpb24oKSB7CkBAIC04Myw3ICs1Niw3IEBA IGRlZmluZShbCiAgICAgICAgICAgICBzY2hlbWE6IFsKICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgaWQ6ICdlbWFpbCcsIGxhYmVsOiBnZXR0ZXh0KCdFbWFpbCcpLCB0eXBlOiAndGV4dCcs Ci0gICAgICAgICAgICAgIGNlbGw6U3RyaW5nRGVwQ2VsbCwgY2VsbEhlYWRlckNsYXNzZXM6J3dp ZHRoX3BlcmNlbnRfMzAnLAorICAgICAgICAgICAgICBjZWxsOkJhY2tncmlkLkV4dGVuc2lvbi5T dHJpbmdEZXBDZWxsLCBjZWxsSGVhZGVyQ2xhc3Nlczond2lkdGhfcGVyY2VudF8zMCcsCiAgICAg ICAgICAgICAgIGRlcHM6IFsnaWQnXSwKICAgICAgICAgICAgICAgZWRpdGFibGU6IGZ1bmN0aW9u KG0pIHsKICAgICAgICAgICAgICAgICBpZihtIGluc3RhbmNlb2YgQmFja2JvbmUuQ29sbGVjdGlv bikgewo= --f403045fe28c03da6105524ccd0e--