Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1aqgrI-0002pQ-DR for pgadmin-hackers@arkaria.postgresql.org; Thu, 14 Apr 2016 12:58:56 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1aqgrH-0001HB-VJ for pgadmin-hackers@arkaria.postgresql.org; Thu, 14 Apr 2016 12:58:56 +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 1aqgrA-0001GE-QK for pgadmin-hackers@postgresql.org; Thu, 14 Apr 2016 12:58:49 +0000 Received: from mail-ob0-x236.google.com ([2607:f8b0:4003:c01::236]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1aqgr1-0000nv-Dm for pgadmin-hackers@postgresql.org; Thu, 14 Apr 2016 12:58:48 +0000 Received: by mail-ob0-x236.google.com with SMTP id k9so48066082obk.2 for ; Thu, 14 Apr 2016 05:58:39 -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:date:message-id:subject:from:to :cc; bh=Cq3onfrqp6/Hb+oVQgSKCA5gCw1Z1Zb/Gv8cLHG4pSo=; b=jd6sgoreR1vQGR/mOTUrPn3sSmidrVEtFYM1h6rMRmCyIzsDqTRQOE8QL4ZAE5NzZN pW4SqKs90blTxCUn2K+JH6sRs1gGcw0fC1FD69HaEeUfRhv0BlJ5vqUTX/iFW+cWgduQ +psABQU9eHfphXMLEugxkerJgqPo6TAgAhs4XJ+V/XKF2duS1Gixf+LW26MWXjNfrpnY ERUKbZmMzt8ueHCSp3Rzo6tUD/g6aiWAECDSwwg/cutOtGQMbBvIIuXGIXWvamQCBkre H7/6c/tOwS6fMVuVVe3QqR6LsUcJal8NXpkVxk7UbemwGqK+2KpTgET/BfeVkAkIW2yQ iESg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc; bh=Cq3onfrqp6/Hb+oVQgSKCA5gCw1Z1Zb/Gv8cLHG4pSo=; b=gSsgT+ilQ9yCAZgO5tn8JG+IMdb1r7SLq9UkwigKNPorFbw392HDcQzJX0IDrrO4DI 2fCyqMky3hvGJRULL/eL05Y9Kd98+Bgl4b5i0hiL5Y8kejOowXJsoiRwtkADW2EiQWUY SovUaV/RdOJYNmZ0kLq3JkdZHrq3ypOsn9HXZrYsoDboWtNZ3AlAPk1X7TUAaPDuSIgd OF2VcUEzjRhseDCAVvqermaLzxe5MNjs3nFFhaiBxCTg2RZXgBGGTWUEex7oI3T6sr92 jT8k8maJe53hW8utHr3mG7+0RmuQZlgEnL/7gYU9BoVN5+suG2+ZQX2MWhdHlyjyGnmx /WZw== X-Gm-Message-State: AOPr4FV1bY5aLKKMXXNwNvP17OGLLqr/9JLAn9zP3Fah/zbxq6ooz/c0/vM5yf1ckRbphHQ2zUDA0PXz9inagGTw MIME-Version: 1.0 X-Received: by 10.60.67.101 with SMTP id m5mr7985186oet.19.1460638717507; Thu, 14 Apr 2016 05:58:37 -0700 (PDT) Received: by 10.202.49.194 with HTTP; Thu, 14 Apr 2016 05:58:37 -0700 (PDT) In-Reply-To: References: Date: Thu, 14 Apr 2016 18:28:37 +0530 Message-ID: Subject: Re: [pgAdmin4] [Patch] Implementation of the Data Grid and Query Tool From: Akshay Joshi To: Dave Page Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary=001a11c308a4e7d07c0530717384 X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --001a11c308a4e7d07c0530717384 Content-Type: multipart/related; boundary=001a11c308a4e7d07a0530717383 --001a11c308a4e7d07a0530717383 Content-Type: multipart/alternative; boundary=001a11c308a4e7d0770530717382 --001a11c308a4e7d0770530717382 Content-Type: text/plain; charset=UTF-8 Hi All I have fixed review comments given by Dave and couple of them are remaining *Fixed Review Comments:* - The View Data menu option should be on the Object menu, which should mirror the Context menu, except options should be disabled when not applicable instead of hidden. - The Query Tool menu icon should be a glyphicon, to match the others. - Please merge the functionality of the Refresh and Execute buttons into one button. We shouldn't have two buttons that do essentially the same thing. - In Edit Grid mode, the History panel should log all queries (SELECTs, UPDATEs, DELETEs etc) as it would in the Query Tool. - In Edit Grid mode, the Messages panel should display any messages from the most recent action as it would in the Query Tool. - In Edit Grid mode, that textbox should be read-only, but should display the SQL used (including any LIMIT/FILTER clauses) - Please remove the border from the SQL box, such that it fills all available space. - The Filter box should be in a modal overlay over the top of the SQL box/Results tabs as required. Those elements should be grayed whilst it is open. - Please adjust the height of the Delete icon in the Edit Grid, such that it doesn't force the row height to be higher than it should be. - I think the names of the tabs are far too long. Can we change them to "Query 1", "Query 2" etc, then rename them to the filename if the user saves/loads a file? - We should add an "Edit" button, which opens a drop-down menu. This would eventually include options as found on the Edit menu in the pgAdmin3 query tool, such as the "Clear SQL" option. - Ashesh and I discussed changing the History tab to be a grid, showing: Date/Time, Query (first line only), Rows affected, Runtime and Status, in a row per query executed. Ashesh suggested using a sub-form that can be expanded for each row, which could show the full query and error details (SQL State etc). New rows should be added to the top of the list. - Errors should be highlighted in the SQL box - a marker in the margin to note the line, and spellcheck-style underlining for the error word. - Query results should have spaces converted to " ", so that proper indenting is maintained (for example, on EXPLAIN queries). - on shutdown pgAdmin server , appropriate message should be displayed. *Remaining review comments*: - Please add an SQL button. This should show/hide the SQL panel in *both* Query Tool and Edit Grid modes. - If a field has been edited, but not saved, can we highlight it somehow? Maybe make the text dark blue? - The "Add Row" button only works if you're on the last page of the resultset. - Can the "Copy Row" button also populate the clipboard with CSV data for the row? - In Edit mode, we need to be able to represent/set values to NULL. - The layout of the result tabs should be maintained if new Query Tool or Edit Grid tabs are opened. *TODO's* (apart from above) - Open/Save SQL file. - Cut, Copy, Paste functionality. Attached is the patch file which contains complete DataGrid and Query Tool code with fixed review comments. Can you please review the patch and let me know the review comments if any else can you please commit the code if it looks good to you. On Tue, Apr 12, 2016 at 6:10 PM, Dave Page wrote: > Very nice! > > > On Tue, Apr 12, 2016 at 1:11 PM, Akshay Joshi < > akshay.joshi@enterprisedb.com> wrote: > >> Hi Dave >> >> As per suggestion, I have changed History tab to be a grid. Attached is >> the two screenshot one for Query Tool and other is for the Data Grid where >> some of the transaction gets rollback while saving the data due to one of >> the error condition. Please review the screenshots and let me know the >> comments if any. >> >> On Fri, Apr 8, 2016 at 9:49 PM, Dave Page wrote: >> >>> >>> >>> On Fri, Apr 8, 2016 at 3:39 PM, Akshay Joshi < >>> akshay.joshi@enterprisedb.com> wrote: >>> >>>> Hi Dave >>>> >>>> On Fri, Apr 8, 2016 at 2:32 PM, Dave Page wrote: >>>> >>>>> >>>>> >>>>> On Fri, Apr 8, 2016 at 7:43 AM, Akshay Joshi < >>>>> akshay.joshi@enterprisedb.com> wrote: >>>>>> >>>>>> >>>>>>>>>>> - The Query Tool menu icon should be a glyphicon, to match the >>>>>>>>>>> others. >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> There is no glyphicon available which match the Query Tool >>>>>>>>>> icon. I have found one like below which is "database-search" or can you >>>>>>>>>> please suggest some other icon. >>>>>>>>>> [image: Inline image 1] >>>>>>>>>> >>>>>>>>> >>>>>>>>> That one looks perfect. >>>>>>>>> >>>>>>>> >>>>>> We can't use this icon because it's not come with >>>>>> Bootstrap , I have picked this from "http://glyphicons.com/" and I >>>>>> am not sure we can use it as per the Licence. >>>>>> >>>>> >>>>> At the risk of annoying everyone immensely, on reflection I'm thinking >>>>> we should use Font Awesome as our default generic icons, and fall back to >>>>> Bootstrap's Glyphicons. I really hadn't realised how much larger the FA set >>>>> is. >>>>> >>>>> For this particular issue, could we use FA's stacking? e.g. something >>>>> like: https://jsfiddle.net/pa8x6nt3/ >>>>> >>>>> If not, how about using the execute icon we discussed, e.g. fa-bolt? >>>>> >>>> >>>> I have used fa-bolt. Apart from that I have completed below review >>>> comments >>>> >>> >>> OK. >>> >>> >>>> >>>> >>>> - The View Data menu option should be on the Object menu, which >>>> should mirror the Context menu, except options should be disabled when not >>>> applicable instead of hidden. *Note*: - With current implementation >>>> "Object" menu is re-created dynamically depending on the node clicked, so >>>> we will have to re-create the "View Data" menu as well and it require >>>> change in the generic code. For the time being "View Data" menu is visible >>>> in "Object" menu when appropriate node is selected. >>>> - Please merge the functionality of the Refresh and Execute buttons >>>> into one button. We shouldn't have two buttons that do essentially the same >>>> thing. >>>> - In Edit Grid mode, that textbox should be read-only, but should >>>> display the SQL used (including any LIMIT/FILTER clauses). Please >>>> refer the attached screenshot (Modified-Data-Grid). >>>> - Please adjust the height of the Delete icon in the Edit Grid, >>>> such that it doesn't force the row height to be higher than it should be. >>>> - I think the names of the tabs are far too long. Can we change >>>> them to "Query 1", "Query 2" etc, then rename them to the filename >>>> if the user saves/loads a file? *Note*: - As discussed I have added >>>> one more container to show the title. Please refer the attached screenshots >>>> (Modified-Query-Tool) >>>> - Query results should have spaces converted to " ", so that >>>> proper indenting is maintained (for example, on EXPLAIN queries) >>>> - To fix this we have added css style "*white-space: pre-wrap;*", >>>> but it changes the backgrid cell size. Please refer the >>>> screenshot (Modified-Data-Grid). >>>> >>>> Hmmm. I'd rather that the heights didn't change (or at least the rows >>> were resizeable like in pga3. Can we set the column to hide vertical >>> overflow, unless it gets focus or something? >>> >>> >>>> Please review the screenshots and please let me know will it looks >>>> good. >>>> >>> >>> Bar the cell size, certainly it's good :-) >>> >>> -- >>> 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 <%2B91%2020-3058-9517>Mobile: +91 976-788-8246* >> > > > > -- > 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-9517Mobile: +91 976-788-8246* --001a11c308a4e7d0770530717382 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi All=C2=A0

I have fixed review commen= ts given by Dave and couple of them are remaining

= Fixed Review Comments:
  • = The View Data menu option should be on the= Object menu, which should mirror the Context menu, except options should b= e disabled when not applicable instead of hidden.
  • The Query Tool menu icon should be a glyphicon, to match the others.=
  • Please merge the funct= ionality of the Refresh and Execute buttons into one button. We shouldn'= ;t have two buttons that do essentially the same thing.
  • = In Edit Grid mode, the History panel shoul= d log all queries (SELECTs<= /span>, UPDATEs, DELETEs etc) as it woul= d in the Query Tool.
  • In= Edit Grid mode, the Messages panel should display any messages from the mo= st recent action =C2=A0as it would in the Query Tool.
  • In Edit Grid mode, that textbox should be read-only, but should= display the SQL use= d (including any LIMIT/FILTER clauses)
  • Please remove the border from the SQL box, such that it fills all available spa= ce.
  • The Filter box shou= ld be in a modal overlay over the top of the SQL box/Results tabs as required. Those elements s= hould be grayed whilst it is open.
  • Please adjust the height of the Delete icon in the Edit Grid, s= uch that it doesn't force the row height to be higher than it should be= .
  • I think the names of = the tabs are far too long. Can we change them to "Query 1", "= ;Query 2" etc, then rename them to the filename if the user saves/loads a file?
    =
  • We should add an "Edit"= button, which opens a drop-down menu. This would eventually include option= s as found on the Edit menu in the pgAdmin3 query tool, such as the "C= lear SQL" optio= n.
  • Ashesh and I discussed changing the His= tory tab to be a grid, showing: Date/Time, Query (first line only), Rows af= fected, Runtime and = Status, in a row per query executed. Ashesh suggested using a sub-form that can be expanded for= each row, which could show the full query and error details (SQL State etc). New rows should= be added to the top of the list.
  • Errors should be highlighted in= the SQL box - a mar= ker in the margin to note the line, and spellcheck-style underlining for th= e error word.
  • Query resul= ts should have spaces converted to "&nbsp;", so that proper indenting is maintain= ed (for example, on EXPLAIN queries).
  • on shutdown pgAdmin server ,=C2=A0appropriate message should be displayed.
Remaining review comments:
=
  • Pl= ease add an SQL butt= on. This should show/hide the SQL panel in *both* Query Tool and Edit Grid modes.=C2=A0<= br>
  • If a field has been edited, bu= t not saved, can we highlight it somehow? Maybe make the text dark blue?
  • The "Add Row" b= utton only works if you're on the last page of the resultset.
  • Can the "Copy Row" button also populate t= he clipboard with CSV data for the row?
  • In = Edit mode, we need to be able to represent/set values to NULL.
  • The layout of the result tabs shoul= d be maintained if new Query Tool or Edit Grid tabs are opened.
    <= /li>
TODO's (apart from above)
  • Open/Save SQL file.
  • Cut, Copy, Paste functionality. =C2=A0

=C2=A0Attached is the patch file which contains comple= te DataGrid and Quer= y Tool code with fixed review comments. Can you please review the patch and= let me know the review comments if any else can you please commit the code= if it looks good to you.=C2=A0

On Tue, Apr 12, 2016 at 6:10 PM, Dave Page <dpage@pgadmin.org> wrote:
Very nice!


On Tue, Apr 12, 2016 at 1:1= 1 PM, Akshay Joshi <akshay.joshi@enterprisedb.com> wrote:
Hi Dave
As per suggestion, I have changed=C2=A0History tab to be a grid. Attached is the two screenshot one for = Query Tool and other is for the Data Grid where some of the transaction get= s rollback while saving the data due to one of the error condition. Please = review the screenshots and let me know the comments if any. =C2=A0= =C2=A0

On Fri, Apr 8, 2016 at 9:49 PM, Dave Page <= dpage@pgadmin.org> wrote:

=

On Fri, Apr= 8, 2016 at 3:39 PM, Akshay Joshi <akshay.joshi@enterprisedb.c= om> wrote:
Hi Dave

On = Fri, Apr 8, 2016 at 2:32 PM, Dave Page <dpage@pgadmin.org> wrote:

<= div class=3D"gmail_extra">
On Fri, Apr = 8, 2016 at 7:43 AM, Akshay Joshi <akshay.joshi@enterprisedb.co= m> wrote:
<= span>

- The Query Tool menu icon should be a glyphicon, to match the others.
=C2=A0
=C2=A0 =C2=A0= There is no glyphicon available which match the Query Tool ico= n. I have found one like below which is "database-search" or can = you please suggest some other icon.=C2=A0
=C2=A0 =C2=A0 =C2=A0 = =C2=A03D"Inline=C2=A0
=

That one looks perfect.
=

=C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0We can't use this icon because it's not come wi= th Bootstrap , I have picked this from "http://glyphicons.com/" and I am not sure w= e can use it as per the Licence.
<= br>
At the risk of annoying everyone immensely, on reflect= ion I'm thinking we should use Font Awesome as our default generic icon= s, and fall back to Bootstrap's Glyphicons. I really hadn't realise= d how much larger the FA set is.

For this part= icular issue, could we use FA's stacking? e.g. something like:=C2=A0https://jsfiddle.= net/pa8x6nt3/=C2=A0

If not, how about using th= e execute icon we discussed, e.g. fa-bolt?

=C2=A0 =C2=A0I have used fa-bolt. Apart from= that I have completed below review comments=C2=A0
<= /blockquote>

OK.
=C2=A0

  • The View Data menu option = should be on the Object menu, which should mirror the Context menu, except = options should be disabled when not applicable instead of hidden. Note: - With current implementation "Object" menu is re-created dyn= amically depending on the node clicked, so we will have to re-create the &q= uot;View Data" menu as well and it require change in the generic code.= For the time being "View Data" menu is visible in "Object&q= uot; menu when appropriate node is selected. =C2=A0 =C2=A0 =C2=A0=C2=A0
  • Please merge the functio= nality of the Refresh and Execute buttons into one button. We shouldn't= have two buttons that do essentially the same thing.
  • In E= dit Grid mode, that textbox should be read-only, but should di= splay the SQL used (including any LIMIT/FILTER clauses). Pleas= e refer the attached screenshot (Modified-Data-Grid).=C2=A0
  • Please adjust the height of the De= lete icon in the Edit Grid, such that it doesn't force the row height t= o be higher than it should be.
  • I think the names of the tabs are far too long= . Can we change them to "Query 1", "Query 2" etc, then = rename them to the filename if the user saves/loads a file? Note: - As discussed I have added one more=C2=A0container=C2=A0to show the tit= le. Please refer the attached screenshots (Modified-Query-Tool)=C2=A0
  • Query results should have spaces converted to "&n= bsp;", so that proper indenting is maintained (for example, on = EXPLAIN queries)
    • To fix this we have added css style "white-space: pre-wrap;&= quot;, but it changes the backgrid cell size. Please refer the= screenshot=C2=A0(Modified-Data-Grid).=C2=A0
=
Hmmm. I'd rather that the heights didn't change (or at least t= he rows were resizeable like in pga3. Can we set the column to hide vertica= l overflow, unless it gets focus or something?
=C2=A0
=
=
=C2=A0 =C2= =A0Please review the screenshots and please let me know will it looks good.=

Bar = the cell size, certainly it's good :-)=C2=A0

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



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

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



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

EnterpriseDB UK: http://www.enterpris= edb.com
The Enterprise PostgreSQL Company



--
Akshay Joshi
Principal Software Enginee= r=C2=A0

=

X-Attachment-Id: ii_153efa7c0422527f iVBORw0KGgoAAAANSUhEUgAAAGYAAABkCAYAAAB0F0VpAAAJMUlEQVR4Ae2c R4gUTRTH3wZzzjnnnHNCPAgiHgwHFVFBUBEDCC6CyKfgQfGkBxEzhosHj6Kg KKKIiGIOmDCnNee0H7+C6q+nd2d3Zqdm5rlfPSi6p6b6dfX/3/XqvVc1k1NY WFgkXtQhkKuuR75DBgFPjNIXwRPjiVGKgNJu+RHjiVGKgNJu+RHjiVGKgNJu +RHjiVGKgNJu+RHjiVGKgNJu+RHjiVGKgNJu+RHjiVGKgNJu+RHjiVGKgNJu +RHjiVGKgNJu+RHjiVGKgNJu+RHjiVGKgNJu+RHjiVGKgNJu+RHjiVGKgNJu +RGjlJh8pf0KuvXlyxd58OCBPHz4UD5+/CifPn0y5fPnz0KhjjZI9erVpWbN mqbUqFFDKLVq1TKldevW0rZtW9MmUK74JEfjzzCePHkiZ8+elfPnz8uzZ89K hA8S6tSpI9WqVTOFRl+/fjXl/fv3AVnRi5s1ayYDBw6UoUOHSosWLaJfq/ms ipi3b9/K/v37DSElIdS4cWOZNm2adO7cWZo0aSI5OTmmhNsWFRUJ5cWLF3L7 9m05ePCgvHz5MtwkOIegmTNnSr169YI6LSeq5pgtW7bEJQXAfv/+Lbm5uWaE QAry58+fmEId3zGSaMs18YQRyT01iqo5hje8NCksLJTNmzebJoDO/MGcgklD MGHMQcw7EJaIlHXPRHSko40qYpJ5QICHCApzUkUTVaasooGbyvN4YlJBL43X emLSCG4qqj0xqaCXxmtVEdOtW7c0PmrJqrNxz5J7Eluriphly5aZiDy2i+n7 RPTPPTWKqsi/atWqkpeXJ48ePZLTp0+btIxrV5g0DISMGDFCWrVqZQLQb9++ qeNGFTGHDx82oLVs2TIAikTl/fv3Tfnw4UOQyCSItElMgkrEJjA5EnySxKxd u7Yp7dq1Ewp1VghYT548KePHj7dVao6qiJkzZ44Bpnfv3uaN7tmzp5Afcylv 3ryRy5cvy7lz5+TSpUvy48cP2b17t8tbONGlMvIHOApCgrFTp04madmoUSNp 0KCB1K9f34wCMsxVqlQx5o+25MW+f/9uMsuMIpKiEEFC8+nTp2b54NWrV06A S7cSlcSEHxpwebv/b6KemFQJYf2FEUZhtFWqVEnevXsnr1+/lps3b5r1m1Tv kY7rKyQxzZs3l1GjRsno0aNLnaN+/fplyEkHsKnqrFDE4IktWLBABg8eHOBC FtountmlANZrWDbANcfBwLvTJqqIwZ3FNS6P9OjRQxYvXmzMFQQwGpjo7927 Z3SybwBh3d+6zjgWEKRRVLnLeFR79+6VM2fOJLzQBah9+/aVlStXmpVLdOCR saR8/PjxUjEfN26cTJ06NdgzUGrjDH+pihi7HMzEfOTIERNnsDumtOVhVi83 btxoAkpIuXbtmuzatcuMlkSwxAWfO3eudO/ePZHmGWujihjIYNIGLCsEgJi3 O3fumHiE6B+viiOrl4sWLZI+ffoIaZXr16/Lhg0b7KXBkSC1Y8eOUrlyZXn+ /LncunXLzDtBAxFZsWKFKnJUEUPkn5+fb7YX9e/f35iosnawMLGzbYm9ZatX r44ZKWQQ5s+fX8wzY9fMnj17YuIjXoa1a9eqMWvqiAm/xXhPvO0kHinEJJgu WwDz58+fxtQxNx07diy4fPr06TJ58mTzGWcg7JHhjWEeN23aZOYzexFzzqxZ s+zHrB5VeWVRJOz+MFIqFy5ciH5tth4xL5EdCJPCSIEUm6JBT1ggHLO2ZMkS 473ZzAI6Jk6cqGKfmU5fMYxinHMieUhBoi425ou5iXknSgrtqcNR4Dh79uyY TYNRXXFun/bqv5aY8NKAjVFAC9NH6gUTV5ZADgR36dIlaBrWFVRm4aTCEYP3 BeCJCiOradOmQXNPTADFfydE5IkK6X4rzBlWmDtKMl/2++iRtuH2WlYzVY2Y goICGTlyZEJpEuIRK+3bt7encX8dEDQo4SSsC89Pg6gihphl6dKlZn/ypEmT pEOHDnFJCoNJOyvsRSZzkKjQNrx/OWzWEtWRjnaq3OVDhw7JsGHDhLS9jSeY L4j68ZZYo2dFkhI2OSQmrWCWDhw4YDICxCulCe40ba0pwySyUUODqAswyfaS lBw+fLh07drVLCmXBBQBIxE/AgH79u0z+TXbltQ/bnM8ciBl69atMdE/pJCh TsSjs/dJ11HViOEhAZxg0gaUmDdMFT9UwhUm2ifyZ/cL6RtiGa7hB0gXL14M fqRE0Ejqf8aMGdKwYcMY/DBfjBR7D/tlmzZtzDX2czaP6kZMMmDgga1bt86Q xTnJyTVr1sSowDzhQkMsQhYB02jNV0xjEZNpHjNmTLQ645//amJAq1evXrJ8 +XIDHKOHDDO/Eov3875EEGYZINvkqPLKEgEt2ubKlStm1yb1OAosFbM+U9Ym PkbSkCFDZMqUKVGVZj3nxIkTxeozWaFujinPw+/cuVPYXjtgwADjEBB8zps3 zyQy7969K7bgyeEOU6z3x/3q1q0rO3bsiLk1mwAxd2PHjo2pz9QHVaZs/fr1 cuPGjXI9O97XwoULzVoOCphz2KpUmuAc4DjQlkW67du3F2tOkjMb5OQVFBT8 U6w3WaoYNGiQCQ4fP36cdA94u/HE8Lj4uTlEATxuMeAjtOGcesyeJYZ6Epl4 e1FPjW206AuvqibduXJcoIoYNoOzCx8zw7ndRJ7Mc7FH4NSpU4YYMseYNUtG lCirl+/jkUO6Z8KECWWOPqvL1VGVKWNCxqwQn1hJdrc/+5nDf13Sr18/sycg kW1K3Bcijx49Ktu2bTNu9qpVq0xayI462690H1URYx8WggCJkgig9jp75O0n nY8Z4zwZseRcvXpVGC0QFU7/JKMrlbYqiYk+EOQwZ0AYwjFcwu0hIlwgh5KM WHK4Lhuk0Nf/bEYyPc9wW8xIJk2JdQoyec8opH99gBl9IFefs0kKz+CJccWk Yz2eGMeAulLniXGFpGM9nhjHgLpS54lxhaRjPZ4Yx4C6UueJcYWkYz2eGMeA ulLniXGFpGM9nhjHgLpS54lxhaRjPZ4Yx4C6UueJcYWkYz2eGMeAulLniXGF pGM9nhjHgLpS54lxhaRjPZ4Yx4C6UueJcYWkYz2eGMeAulLniXGFpGM9nhjH gLpS9y9BjyDxr+DRaQAAAABJRU5ErkJggg== --001a11c308a4e7d07a0530717383-- --001a11c308a4e7d07c0530717384 Content-Type: application/octet-stream; name="SQLEditor_v2.patch" Content-Disposition: attachment; filename="SQLEditor_v2.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_in0aitbu1 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9jc3Mvb3ZlcnJpZGVz LmNzcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9jc3Mvb3ZlcnJpZGVzLmNzcwpp bmRleCAzODQzNzM0Li5hNmYzOTk0IDEwMDc1NQotLS0gYS93ZWIvcGdhZG1p bi9zdGF0aWMvY3NzL292ZXJyaWRlcy5jc3MKKysrIGIvd2ViL3BnYWRtaW4v c3RhdGljL2Nzcy9vdmVycmlkZXMuY3NzCkBAIC01MjgsNiArNTI4LDEwIEBA IGZpZWxkc2V0W2Rpc2FibGVkXSAuZm9ybS1jb250cm9sIHsKICAgICBiYWNr Z3JvdW5kLWNvbG9yOiAjQUFBOwogfQogCisuYmFja2dyaWQgdGgucmVuZGVy YWJsZSwgLmJhY2tncmlkIHRkLnJlbmRlcmFibGUgeworICAgIHdoaXRlLXNw YWNlOiBwcmUtd3JhcDsKK30KKwogLnN1Ym5vZGUtaGVhZGVyIHsKICAgICBi YWNrZ3JvdW5kLWNvbG9yOiAjMkM3NkI0OwogICAgIGhlaWdodDogMzVweDsK QEAgLTk1MiwzICs5NTYsOCBAQCB1bC5uYXYubmF2LXRhYnMgewogLnBnYWRt aW4tY29udHJvbHMuU1FMPi5Db2RlTWlycm9yIHsKICAgaGVpZ2h0OiA1MDBw eCFpbXBvcnRhbnQ7CiB9CisKKy53Y1BhbmVsVGFiID4gZGl2IC53Y1RhYklj b24uZmEgeworICBwYWRkaW5nLWxlZnQ6IDBweCAhaW1wb3J0YW50OworICBj b2xvcjogYmxhY2s7Cit9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29s cy9kYXRhZ3JpZC9fX2luaXRfXy5weSBiL3dlYi9wZ2FkbWluL3Rvb2xzL2Rh dGFncmlkL19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjJmNGQ4MmMKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdh ZG1pbi90b29scy9kYXRhZ3JpZC9fX2luaXRfXy5weQpAQCAtMCwwICsxLDI2 NiBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdB ZG1pbiA0IC0gUG9zdGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQgKEMp IDIwMTMgLSAyMDE2LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisj IFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVT UUwgTGljZW5jZQorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK KworIiIiQSBibHVlcHJpbnQgbW9kdWxlIGltcGxlbWVudGluZyB0aGUgZGF0 YWdyaWQgZnJhbWUuIiIiCitNT0RVTEVfTkFNRSA9ICdkYXRhZ3JpZCcKKwor aW1wb3J0IHBpY2tsZQoraW1wb3J0IHJhbmRvbQoraW1wb3J0IGpzb24KK2Zy b20gZmxhc2sgaW1wb3J0IFJlc3BvbnNlLCB1cmxfZm9yLCBzZXNzaW9uLCBy ZXF1ZXN0LCBtYWtlX3Jlc3BvbnNlCitmcm9tIGZsYXNrLmV4dC5iYWJlbCBp bXBvcnQgZ2V0dGV4dAorZnJvbSBmbGFzay5leHQuc2VjdXJpdHkgaW1wb3J0 IGxvZ2luX3JlcXVpcmVkCitmcm9tIHRvb2xzLnNxbGVkaXRvci5jb21tYW5k IGltcG9ydCAqCitmcm9tIHBnYWRtaW4udXRpbHMgaW1wb3J0IFBnQWRtaW5N b2R1bGUKK2Zyb20gcGdhZG1pbi51dGlscy5hamF4IGltcG9ydCBtYWtlX2pz b25fcmVzcG9uc2UsIGJhZF9yZXF1ZXN0LCBpbnRlcm5hbF9zZXJ2ZXJfZXJy b3IKKworCitjbGFzcyBEYXRhR3JpZE1vZHVsZShQZ0FkbWluTW9kdWxlKToK KyAgICAiIiIKKyAgICBjbGFzcyBEYXRhR3JpZE1vZHVsZShQZ0FkbWluTW9k dWxlKQorCisgICAgICAgIEEgbW9kdWxlIGNsYXNzIGZvciBFZGl0IEdyaWQg ZGVyaXZlZCBmcm9tIFBnQWRtaW5Nb2R1bGUuCisgICAgIiIiCisKKyAgICBM QUJFTCA9ICJEYXRhIEdyaWQiCisKKyAgICBkZWYgZ2V0X293bl9tZW51aXRl bXMoc2VsZik6CisgICAgICAgIHJldHVybiB7fQorCisgICAgZGVmIGdldF9v d25famF2YXNjcmlwdHMoc2VsZik6CisgICAgICAgIHJldHVybiBbeworICAg ICAgICAgICAgJ25hbWUnOiAncGdhZG1pbi5kYXRhZ3JpZCcsCisgICAgICAg ICAgICAncGF0aCc6IHVybF9mb3IoJ2RhdGFncmlkLmluZGV4JykgKyAiZGF0 YWdyaWQiLAorICAgICAgICAgICAgJ3doZW4nOiBOb25lCisgICAgICAgIH1d CisKKyAgICBkZWYgZ2V0X3BhbmVscyhzZWxmKToKKyAgICAgICAgcmV0dXJu IFtdCisKKworYmx1ZXByaW50ID0gRGF0YUdyaWRNb2R1bGUoTU9EVUxFX05B TUUsIF9fbmFtZV9fLCBzdGF0aWNfdXJsX3BhdGg9Jy9zdGF0aWMnKQorCisK K0BibHVlcHJpbnQucm91dGUoIi8iKQorQGxvZ2luX3JlcXVpcmVkCitkZWYg aW5kZXgoKToKKyAgICByZXR1cm4gYmFkX3JlcXVlc3QoZXJyb3Jtc2c9Z2V0 dGV4dCgnVXNlciBjYW4gbm90IGNhbGwgdGhpcyB1cmwgZGlyZWN0bHknKSkK KworCitAYmx1ZXByaW50LnJvdXRlKCIvY3NzL2RhdGFncmlkLmNzcyIpCitk ZWYgZGF0YWdyaWRfY3NzKCk6CisgICAgcmV0dXJuIG1ha2VfcmVzcG9uc2Uo CisgICAgICAgIHJlbmRlcl90ZW1wbGF0ZSgnZGF0YWdyaWQvY3NzL2RhdGFn cmlkLmNzcycpLAorICAgICAgICAyMDAsIHsnQ29udGVudC1UeXBlJzogJ3Rl eHQvY3NzJ30KKyAgICAgICAgKQorCisKK0BibHVlcHJpbnQucm91dGUoIi9m aWx0ZXIiKQorQGxvZ2luX3JlcXVpcmVkCitkZWYgc2hvd19maWx0ZXIoKToK KyAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKE1PRFVMRV9OQU1FICsgJy9m aWx0ZXIuaHRtbCcpCisKKworQGJsdWVwcmludC5yb3V0ZSgKKyAgICAnL2lu aXRpYWxpemUvZGF0YWdyaWQvPGludDpjbWRfdHlwZT4vPG9ial90eXBlPi88 aW50OnNpZD4vPGludDpkaWQ+LzxpbnQ6b2JqX2lkPicsCisgICAgbWV0aG9k cz1bIlBVVCIsICJQT1NUIl0KKyAgICApCitAbG9naW5fcmVxdWlyZWQKK2Rl ZiBpbml0aWFsaXplX2RhdGFncmlkKGNtZF90eXBlLCBvYmpfdHlwZSwgc2lk LCBkaWQsIG9ial9pZCk6CisgICAgIiIiCisgICAgVGhpcyBtZXRob2QgaXMg cmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGFuIGFzeW5jaHJvbm91cyBjb25u ZWN0aW9uLgorICAgIEFmdGVyIGNyZWF0aW5nIHRoZSBjb25uZWN0aW9uIGl0 IHdpbGwgaW5zdGFudGlhdGUgYW5kIGluaXRpYWxpemUKKyAgICB0aGUgb2Jq ZWN0IGFzIHBlciB0aGUgb2JqZWN0IHR5cGUuIEl0IHdpbGwgYWxzbyBjcmVh dGUgYSB1bmlxdWUKKyAgICB0cmFuc2FjdGlvbiBpZCBhbmQgc3RvcmUgdGhl IGluZm9ybWF0aW9uIGludG8gc2Vzc2lvbiB2YXJpYWJsZS4KKworICAgIEFy Z3M6CisgICAgICAgIGNtZF90eXBlOiBDb250YWlucyB2YWx1ZSBmb3Igd2hp Y2ggbWVudSBpdGVtIGlzIGNsaWNrZWQuCisgICAgICAgIG9ial90eXBlOiBD b250YWlucyB0eXBlIG9mIHNlbGVjdGVkIG9iamVjdCBmb3Igd2hpY2ggZGF0 YSBncmlkIHRvIGJlIHJlbmRlcgorICAgICAgICBzaWQ6IFNlcnZlciBJZAor ICAgICAgICBkaWQ6IERhdGFiYXNlIElkCisgICAgICAgIG9ial9pZDogSWQg b2YgY3VycmVudGx5IHNlbGVjdGVkIG9iamVjdAorICAgICIiIgorCisgICAg aWYgcmVxdWVzdC5kYXRhOgorICAgICAgICBmaWx0ZXJfc3FsID0ganNvbi5s b2FkcyhyZXF1ZXN0LmRhdGEuZGVjb2RlKCkpCisgICAgZWxzZToKKyAgICAg ICAgZmlsdGVyX3NxbCA9IHJlcXVlc3QuYXJncyBvciByZXF1ZXN0LmZvcm0K KworICAgICMgQ3JlYXRlIGFzeW5jaHJvbm91cyBjb25uZWN0aW9uIHVzaW5n IHJhbmRvbSBjb25uZWN0aW9uIGlkLgorICAgIGNvbm5faWQgPSBzdHIocmFu ZG9tLnJhbmRpbnQoMSwgOTk5OTk5OSkpCisgICAgdHJ5OgorICAgICAgICBt YW5hZ2VyID0gZ2V0X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikuY29ubmVj dGlvbl9tYW5hZ2VyKHNpZCkKKyAgICAgICAgY29ubiA9IG1hbmFnZXIuY29u bmVjdGlvbihkaWQ9ZGlkLCBjb25uX2lkPWNvbm5faWQpCisgICAgZXhjZXB0 IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2Vy dmVyX2Vycm9yKGVycm9ybXNnPXN0cihlKSkKKworICAgICMgQ29ubmVjdCB0 aGUgU2VydmVyCisgICAgc3RhdHVzLCBtc2cgPSBjb25uLmNvbm5lY3QoKQor ICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgIHJldHVybiBpbnRlcm5hbF9z ZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKG1zZykpCisKKyAgICB0cnk6Cisg ICAgICAgICMgR2V0IHRoZSBvYmplY3QgYXMgcGVyIHRoZSBvYmplY3QgdHlw ZQorICAgICAgICBjb21tYW5kX29iaiA9IE9iamVjdFJlZ2lzdHJ5LmdldF9v YmplY3Qob2JqX3R5cGUsIGNvbm5faWQ9Y29ubl9pZCwgc2lkPXNpZCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRpZD1kaWQsIG9ial9pZD1vYmpfaWQsIGNtZF90eXBlPWNtZF90eXBlLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3FsX2ZpbHRlcj1maWx0ZXJfc3FsKQorICAgIGV4Y2VwdCBFeGNlcHRp b24gYXMgZToKKyAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1zdHIoZSkpCisKKyAgICAjIENyZWF0ZSBhIHVuaXF1ZSBp ZCBmb3IgdGhlIHRyYW5zYWN0aW9uCisgICAgdHJhbnNfaWQgPSBzdHIocmFu ZG9tLnJhbmRpbnQoMSwgOTk5OTk5OSkpCisKKyAgICBpZiAnZ3JpZERhdGEn IG5vdCBpbiBzZXNzaW9uOgorICAgICAgICBzcWxfZ3JpZF9kYXRhID0gZGlj dCgpCisgICAgZWxzZToKKyAgICAgICAgc3FsX2dyaWRfZGF0YSA9IHNlc3Np b25bJ2dyaWREYXRhJ10KKworICAgICMgVXNlIHBpY2tsZSB0byBzdG9yZSB0 aGUgY29tbWFuZCBvYmplY3Qgd2hpY2ggd2lsbCBiZSB1c2VkCisgICAgIyBs YXRlciBieSB0aGUgc3FsIGdyaWQgbW9kdWxlLgorICAgIHNxbF9ncmlkX2Rh dGFbdHJhbnNfaWRdID0geworICAgICAgICAnY29tbWFuZF9vYmonOiBwaWNr bGUuZHVtcHMoY29tbWFuZF9vYmosIC0xKSAgIyAtMSBzcGVjaWZ5IHRoZSBo aWdoZXN0IHByb3RvY29sIHZlcnNpb24gYXZhaWxhYmxlCisgICAgfQorCisg ICAgIyBTdG9yZSB0aGUgZ3JpZCBkaWN0aW9uYXJ5IGludG8gdGhlIHNlc3Np b24gdmFyaWFibGUKKyAgICBzZXNzaW9uWydncmlkRGF0YSddID0gc3FsX2dy aWRfZGF0YQorCisgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZShkYXRh PXsnZ3JpZFRyYW5zSWQnOiB0cmFuc19pZH0pCisKKworQGJsdWVwcmludC5y b3V0ZSgnL3BhbmVsLzxpbnQ6dHJhbnNfaWQ+Lzxpc19xdWVyeV90b29sPi88 ZWRpdG9yX3RpdGxlPicsIG1ldGhvZHM9WyJHRVQiXSkKK2RlZiBwYW5lbCh0 cmFuc19pZCwgaXNfcXVlcnlfdG9vbCwgZWRpdG9yX3RpdGxlKToKKyAgICAi IiIKKyAgICBUaGlzIG1ldGhvZCBjYWxscyBpbmRleC5odG1sIHRvIHJlbmRl ciB0aGUgZGF0YSBncmlkLgorCisgICAgQXJnczoKKyAgICAgICAgdHJhbnNf aWQ6IHVuaXF1ZSB0cmFuc2FjdGlvbiBpZAorICAgICAgICBpc19xdWVyeV90 b29sOiBUcnVlIGlmIHBhbmVsIGNhbGxzIHdoZW4gcXVlcnkgdG9vbCBtZW51 IGlzIGNsaWNrZWQuCisgICAgICAgIGVkaXRvcl90aXRsZTogVGl0bGUgb2Yg dGhlIGVkaXRvcgorICAgICIiIgorCisgICAgcmV0dXJuIHJlbmRlcl90ZW1w bGF0ZSgiZGF0YWdyaWQvaW5kZXguaHRtbCIsIF89Z2V0dGV4dCwgdW5pcXVl SWQ9dHJhbnNfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19x dWVyeV90b29sPWlzX3F1ZXJ5X3Rvb2wsIGVkaXRvcl90aXRsZT1lZGl0b3Jf dGl0bGUpCisKKworQGJsdWVwcmludC5yb3V0ZSgKKyAgICAnL2luaXRpYWxp emUvcXVlcnlfdG9vbC88aW50OnNpZD4vPGludDpkaWQ+JywKKyAgICBtZXRo b2RzPVsiUFVUIiwgIlBPU1QiXQorICAgICkKK0Bsb2dpbl9yZXF1aXJlZAor ZGVmIGluaXRpYWxpemVfcXVlcnlfdG9vbChzaWQsIGRpZCk6CisgICAgIiIi CisgICAgVGhpcyBtZXRob2QgaXMgcmVzcG9uc2libGUgZm9yIGluc3RhbnRp YXRlIGFuZCBpbml0aWFsaXplCisgICAgdGhlIHF1ZXJ5IHRvb2wgb2JqZWN0 LiBJdCB3aWxsIGFsc28gY3JlYXRlIGEgdW5pcXVlCisgICAgdHJhbnNhY3Rp b24gaWQgYW5kIHN0b3JlIHRoZSBpbmZvcm1hdGlvbiBpbnRvIHNlc3Npb24g dmFyaWFibGUuCisKKyAgICBBcmdzOgorICAgICAgICBzaWQ6IFNlcnZlciBJ ZAorICAgICAgICBkaWQ6IERhdGFiYXNlIElkCisgICAgIiIiCisKKyAgICB0 cnk6CisgICAgICAgIGNvbW1hbmRfb2JqID0gT2JqZWN0UmVnaXN0cnkuZ2V0 X29iamVjdCgncXVlcnlfdG9vbCcsIHNpZD1zaWQsIGRpZD1kaWQpCisgICAg ZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICByZXR1cm4gaW50ZXJu YWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0cihlKSkKKworICAgICMgQ3Jl YXRlIGEgdW5pcXVlIGlkIGZvciB0aGUgdHJhbnNhY3Rpb24KKyAgICB0cmFu c19pZCA9IHN0cihyYW5kb20ucmFuZGludCgxLCA5OTk5OTk5KSkKKworICAg IGlmICdncmlkRGF0YScgbm90IGluIHNlc3Npb246CisgICAgICAgIHNxbF9n cmlkX2RhdGEgPSBkaWN0KCkKKyAgICBlbHNlOgorICAgICAgICBzcWxfZ3Jp ZF9kYXRhID0gc2Vzc2lvblsnZ3JpZERhdGEnXQorCisgICAgIyBVc2UgcGlj a2xlIHRvIHN0b3JlIHRoZSBjb21tYW5kIG9iamVjdCB3aGljaCB3aWxsIGJl IHVzZWQKKyAgICAjIGxhdGVyIGJ5IHRoZSBzcWwgZ3JpZCBtb2R1bGUuCisg ICAgc3FsX2dyaWRfZGF0YVt0cmFuc19pZF0gPSB7CisgICAgICAgICdjb21t YW5kX29iaic6IHBpY2tsZS5kdW1wcyhjb21tYW5kX29iaiwgLTEpICAjIC0x IHNwZWNpZnkgdGhlIGhpZ2hlc3QgcHJvdG9jb2wgdmVyc2lvbiBhdmFpbGFi bGUKKyAgICB9CisKKyAgICAjIFN0b3JlIHRoZSBncmlkIGRpY3Rpb25hcnkg aW50byB0aGUgc2Vzc2lvbiB2YXJpYWJsZQorICAgIHNlc3Npb25bJ2dyaWRE YXRhJ10gPSBzcWxfZ3JpZF9kYXRhCisKKyAgICByZXR1cm4gbWFrZV9qc29u X3Jlc3BvbnNlKGRhdGE9eydncmlkVHJhbnNJZCc6IHRyYW5zX2lkfSkKKwor CitAYmx1ZXByaW50LnJvdXRlKCcvY2xvc2UvPGludDp0cmFuc19pZD4nLCBt ZXRob2RzPVsiR0VUIl0pCitkZWYgY2xvc2UodHJhbnNfaWQpOgorICAgICIi IgorICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY2xvc2UgdGhlIGFzeW5j aHJvbm91cyBjb25uZWN0aW9uCisgICAgYW5kIHJlbW92ZSB0aGUgaW5mb3Jt YXRpb24gb2YgdW5pcXVlIHRyYW5zYWN0aW9uIGlkIGZyb20KKyAgICB0aGUg c2Vzc2lvbiB2YXJpYWJsZS4KKworICAgIEFyZ3M6CisgICAgICAgIHRyYW5z X2lkOiB1bmlxdWUgdHJhbnNhY3Rpb24gaWQKKyAgICAiIiIKKworICAgIGdy aWRfZGF0YSA9IHNlc3Npb25bJ2dyaWREYXRhJ10KKyAgICAjIFJldHVybiBm cm9tIHRoZSBmdW5jdGlvbiBpZiB0cmFuc2FjdGlvbiBpZCBub3QgZm91bmQK KyAgICBpZiBzdHIodHJhbnNfaWQpIG5vdCBpbiBncmlkX2RhdGE6CisgICAg ICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6 IFRydWV9KQorCisgICAgY21kX29ial9zdHIgPSBncmlkX2RhdGFbc3RyKHRy YW5zX2lkKV1bJ2NvbW1hbmRfb2JqJ10KKyAgICAjIFVzZSBwaWNrbGUubG9h ZHMgZnVuY3Rpb24gdG8gZ2V0IHRoZSBjb21tYW5kIG9iamVjdAorICAgIGNt ZF9vYmogPSBwaWNrbGUubG9hZHMoY21kX29ial9zdHIpCisKKyAgICAjIGlm IGNvbm5lY3Rpb24gaWQgaXMgTm9uZSB0aGVuIG5vIG5lZWQgdG8gcmVsZWFz ZSB0aGUgY29ubmVjdGlvbgorICAgIGlmIGNtZF9vYmouY29ubl9pZCBpcyBu b3QgTm9uZToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgbWFuYWdlciA9 IGdldF9kcml2ZXIoUEdfREVGQVVMVF9EUklWRVIpLmNvbm5lY3Rpb25fbWFu YWdlcihjbWRfb2JqLnNpZCkKKyAgICAgICAgICAgIGNvbm4gPSBtYW5hZ2Vy LmNvbm5lY3Rpb24oZGlkPWNtZF9vYmouZGlkLCBjb25uX2lkPWNtZF9vYmou Y29ubl9pZCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAg ICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1z Zz1zdHIoZSkpCisKKyAgICAgICAgIyBSZWxlYXNlIHRoZSBjb25uZWN0aW9u CisgICAgICAgIGlmIGNvbm4uY29ubmVjdGVkKCk6CisgICAgICAgICAgICBt YW5hZ2VyLnJlbGVhc2UoZGlkPWNtZF9vYmouZGlkLCBjb25uX2lkPWNtZF9v YmouY29ubl9pZCkKKworICAgICAgICAjIFJlbW92ZSB0aGUgaW5mb3JtYXRp b24gb2YgdW5pcXVlIHRyYW5zYWN0aW9uIGlkIGZyb20gdGhlIHNlc3Npb24g dmFyaWFibGUuCisgICAgICAgIGdyaWRfZGF0YS5wb3Aoc3RyKHRyYW5zX2lk KSwgTm9uZSkKKyAgICAgICAgc2Vzc2lvblsnZ3JpZERhdGEnXSA9IGdyaWRf ZGF0YQorCisgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZShkYXRhPXsn c3RhdHVzJzogVHJ1ZX0pCisKKworQGJsdWVwcmludC5yb3V0ZSgnL2ZpbHRl ci92YWxpZGF0ZS88aW50OnNpZD4vPGludDpkaWQ+LzxpbnQ6b2JqX2lkPics CisgICAgICAgICAgICAgICAgIG1ldGhvZHM9WyJQVVQiLCAiUE9TVCJdKQor QGxvZ2luX3JlcXVpcmVkCitkZWYgdmFsaWRhdGVfZmlsdGVyKHNpZCwgZGlk LCBvYmpfaWQpOgorICAgICIiIgorICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQg dG8gdmFsaWRhdGUgdGhlIHNxbCBmaWx0ZXIuCisKKyAgICBBcmdzOgorICAg ICAgICBzaWQ6IFNlcnZlciBJZAorICAgICAgICBkaWQ6IERhdGFiYXNlIElk CisgICAgICAgIG9ial9pZDogSWQgb2YgY3VycmVudGx5IHNlbGVjdGVkIG9i amVjdAorICAgICIiIgorICAgIGlmIHJlcXVlc3QuZGF0YToKKyAgICAgICAg ZmlsdGVyX3NxbCA9IGpzb24ubG9hZHMocmVxdWVzdC5kYXRhLmRlY29kZSgp KQorICAgIGVsc2U6CisgICAgICAgIGZpbHRlcl9zcWwgPSByZXF1ZXN0LmFy Z3Mgb3IgcmVxdWVzdC5mb3JtCisKKyAgICB0cnk6CisgICAgICAgICMgQ3Jl YXRlIG9iamVjdCBvZiBTUUxGaWx0ZXIgY2xhc3MKKyAgICAgICAgc3FsX2Zp bHRlcl9vYmogPSBTUUxGaWx0ZXIoc2lkPXNpZCwgZGlkPWRpZCwgb2JqX2lk PW9ial9pZCkKKworICAgICAgICAjIENhbGwgdmFsaWRhdGVfZmlsdGVyIG1l dGhvZCB0byB2YWxpZGF0ZSB0aGUgU1FMLgorICAgICAgICBzdGF0dXMsIHJl cyA9IHNxbF9maWx0ZXJfb2JqLnZhbGlkYXRlX2ZpbHRlcihmaWx0ZXJfc3Fs KQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAgICAgcmV0dXJu IGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1zdHIoZSkpCisKKyAg ICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKGRhdGE9eydzdGF0dXMnOiBz dGF0dXMsICdyZXN1bHQnOiByZXN9KQorCisKK0BibHVlcHJpbnQucm91dGUo Ii9kYXRhZ3JpZC5qcyIpCitAbG9naW5fcmVxdWlyZWQKK2RlZiBzY3JpcHQo KToKKyAgICAiIiJyZW5kZXIgdGhlIHJlcXVpcmVkIGphdmFzY3JpcHQiIiIK KyAgICByZXR1cm4gUmVzcG9uc2UocmVzcG9uc2U9cmVuZGVyX3RlbXBsYXRl KCJkYXRhZ3JpZC9qcy9kYXRhZ3JpZC5qcyIsIF89Z2V0dGV4dCksCisgICAg ICAgICAgICAgICAgICAgIHN0YXR1cz0yMDAsCisgICAgICAgICAgICAgICAg ICAgIG1pbWV0eXBlPSJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IikKZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlkL3RlbXBsYXRlcy9k YXRhZ3JpZC9maWx0ZXIuaHRtbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFn cmlkL3RlbXBsYXRlcy9kYXRhZ3JpZC9maWx0ZXIuaHRtbApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDU0OGNhCi0tLSAvZGV2L251 bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZGF0YWdyaWQvdGVtcGxhdGVz L2RhdGFncmlkL2ZpbHRlci5odG1sCkBAIC0wLDAgKzEsOSBAQAorPGRpdiBj bGFzcz0iZmlsdGVyLXRleHRhcmVhIj4KKyAgICA8dGV4dGFyZWEgaWQ9InNx bF9maWx0ZXIiIHJvdz0iNSI+PC90ZXh0YXJlYT4KKyAgICA8c3R5bGU+Cisg ICAgLmZpbHRlci10ZXh0YXJlYSAuQ29kZU1pcnJvci1zY3JvbGwgeworICAg ICAgICBtaW4taGVpZ2h0OiAxMjBweDsKKyAgICAgICAgbWF4LWhlaWdodDog MTIwcHg7CisgICAgICAgIH0KKyAgICA8L3N0eWxlPgorPC9kaXY+ClwgTm8g bmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vdG9vbHMvZGF0YWdyaWQvdGVtcGxhdGVzL2RhdGFncmlkL2luZGV4Lmh0 bWwgYi93ZWIvcGdhZG1pbi90b29scy9kYXRhZ3JpZC90ZW1wbGF0ZXMvZGF0 YWdyaWQvaW5kZXguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4zMWFkZTdkCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRt aW4vdG9vbHMvZGF0YWdyaWQvdGVtcGxhdGVzL2RhdGFncmlkL2luZGV4Lmh0 bWwKQEAgLTAsMCArMSw1MyBAQAoreyUgZXh0ZW5kcyAiYmFzZS5odG1sIiAl fQoreyUgYmxvY2sgdGl0bGUgJX17eyBjb25maWcuQVBQX05BTUUgfX0gLSBE YXRhZ3JpZHslIGVuZGJsb2NrICV9Cit7JSBibG9jayBjc3NfbGluayAlfQor ICAgIDxsaW5rIHR5cGU9InRleHQvY3NzIiByZWw9InN0eWxlc2hlZXQiIGhy ZWY9Int7IHVybF9mb3IoJ3NxbGVkaXRvci5zdGF0aWMnLCBmaWxlbmFtZT0n Y3NzL3NxbGVkaXRvci5jc3MnKSB9fSI+Cit7JSBlbmRibG9jayAlfQoreyUg YmxvY2sgYm9keSAlfQorPHN0eWxlPgorYm9keSB7CisgIHBhZGRpbmc6IDBw eDsKK30KKzwvc3R5bGU+CisgICAgPGRpdiBpZD0ibWFpbi1lZGl0b3JfcGFu ZWwiPgorICAgICAgICA8ZGl2IGlkPSJmZXRjaGluZ19kYXRhIiBjbGFzcz0i c3FsLWVkaXRvci1idXN5LWZldGNoaW5nIGhpZGUiPicsCisgICAgICAgICAg ICA8c3BhbiBjbGFzcz0ic3FsLWVkaXRvci1idXN5LWljb24iPjxpbWcgc3Jj PSJ7eyB1cmxfZm9yKCdicm93c2VyLnN0YXRpYycsIGZpbGVuYW1lPSdjc3Mv YWNpVHJlZS9pbWFnZS9sb2FkLXJvb3QuZ2lmJykgfX0iPjwvc3Bhbj4KKyAg ICAgICAgICAgIDxzcGFuIGNsYXNzPSJzcWwtZWRpdG9yLWJ1c3ktdGV4dCI+ PC9zcGFuPgorICAgICAgICA8L2Rpdj4KKyAgICAgICAgPGRpdiBjbGFzcz0i c3FsLWVkaXRvciIgZGF0YS10cmFucy1pZD0ie3sgdW5pcXVlSWQgfX0iPjwv ZGl2PgorICAgIDwvZGl2PgoreyUgZW5kYmxvY2sgJX0KKworeyUgYmxvY2sg aW5pdF9zY3JpcHQgJX0KK3RyeSB7CisgIHJlcXVpcmUoCisgICAgWydqcXVl cnknLCAncGdhZG1pbicsICdwZ2FkbWluLnNxbGVkaXRvciddLAorICAgIGZ1 bmN0aW9uKCQsIHBnQWRtaW4pIHsKKworICAgICAgICB2YXIgZWRpdG9yUGFu ZWwgPSAkKCcuc3FsLWVkaXRvcicpLAorICAgICAgICAgICAgbG9hZGluZ0Rp diA9ICQoJyNmZXRjaGluZ19kYXRhJyksCisgICAgICAgICAgICBtc2dEaXYg PSBsb2FkaW5nRGl2LmZpbmQoJy5zcWwtZWRpdG9yLWJ1c3ktdGV4dCcpOwor CisgICAgICAgIC8vIEdldCB0aGUgY29udHJvbGxlciBvYmplY3QgZnJvbSBw Z0FkbWluLlNxbEVkaXRvcgorICAgICAgICB2YXIgc3FsRWRpdG9yQ29udHJv bGxlciA9IHBnQWRtaW4uU3FsRWRpdG9yLmNyZWF0ZShlZGl0b3JQYW5lbCk7 CisKKyAgICAgICAgLy8gTGlzdGVuIG9uIGV2ZW50cyB0byBzaG93L2hpZGUg bG9hZGluZy1pY29uIGFuZCBjaGFuZ2UgbWVzc2FnZXMuCisgICAgICAgIHNx bEVkaXRvckNvbnRyb2xsZXIub24oJ3BnYWRtaW4tc3FsZWRpdG9yOmxvYWRp bmctaWNvbjptZXNzYWdlJywgZnVuY3Rpb24obXNnKSB7CisgICAgICAgICAg ICBtc2dEaXYudGV4dChtc2cpOworICAgICAgICB9KS5vbigncGdhZG1pbi1z cWxlZGl0b3I6bG9hZGluZy1pY29uOnNob3cnLCBmdW5jdGlvbihtc2cpIHsK KyAgICAgICAgICAgIGxvYWRpbmdEaXYucmVtb3ZlQ2xhc3MoJ2hpZGUnKTsK KyAgICAgICAgICAgIG1zZ0Rpdi50ZXh0KG1zZyk7CisgICAgICAgIH0pLm9u KCdwZ2FkbWluLXNxbGVkaXRvcjpsb2FkaW5nLWljb246aGlkZScsIGZ1bmN0 aW9uKCkgeworICAgICAgICAgICAgaWYgKCFsb2FkaW5nRGl2Lmhhc0NsYXNz KCdoaWRlJykpIHsKKyAgICAgICAgICAgICAgICBsb2FkaW5nRGl2LmFkZENs YXNzKCdoaWRlJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworCisg ICAgICAgIC8vIFN0YXJ0IHRoZSBxdWVyeSB0b29sLgorICAgICAgICBzcWxF ZGl0b3JDb250cm9sbGVyLnN0YXJ0KHt7IGlzX3F1ZXJ5X3Rvb2wgfX0sICJ7 eyBlZGl0b3JfdGl0bGUgfX0iKTsKKyAgICB9KTsKK30gY2F0Y2ggKGVycikg eworICAvKiBTaG93IHByb3BlciBlcnJvciBkaWFsb2cgKi8KKyAgY29uc29s ZS5sb2coZXJyKTsKK30KK3slIGVuZGJsb2NrICV9CmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi90b29scy9kYXRhZ3JpZC90ZW1wbGF0ZXMvZGF0YWdyaWQv anMvZGF0YWdyaWQuanMgYi93ZWIvcGdhZG1pbi90b29scy9kYXRhZ3JpZC90 ZW1wbGF0ZXMvZGF0YWdyaWQvanMvZGF0YWdyaWQuanMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRhNjA3ZAotLS0gL2Rldi9udWxs CisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlkL3RlbXBsYXRlcy9k YXRhZ3JpZC9qcy9kYXRhZ3JpZC5qcwpAQCAtMCwwICsxLDQyOCBAQAorZGVm aW5lKAorICBbJ2pxdWVyeScsJ2FsZXJ0aWZ5JywgJ3BnYWRtaW4nLCAncGdh ZG1pbi5icm93c2VyJywgJ3djZG9ja2VyJ10sCisgIGZ1bmN0aW9uKCQsIGFs ZXJ0aWZ5LCBwZ0FkbWluKSB7CisgICAgLy8gU29tZSBzY3JpcHRzIGRvIGV4 cG9ydCB0aGVpciBvYmplY3QgaW4gdGhlIHdpbmRvdyBvbmx5LgorICAgIC8v IEdlbmVyYWxseSB0aGUgb25lLCB3aGljaCBkbyBubyBoYXZlIEFNRCBzdXBw b3J0LgorICAgIHZhciB3Y0RvY2tlciA9IHdpbmRvdy53Y0RvY2tlciwKKyAg ICAgIHBnQnJvd3NlciA9IHBnQWRtaW4uQnJvd3NlcjsKKworICAgIC8qIFJl dHVybiBiYWNrLCB0aGlzIGhhcyBiZWVuIGNhbGxlZCBtb3JlIHRoYW4gb25j ZSAqLworICAgIGlmIChwZ0FkbWluLkRhdGFHcmlkKQorICAgICAgcmV0dXJu IHBnQWRtaW4uRGF0YUdyaWQ7CisKKyAgICBwZ0FkbWluLkRhdGFHcmlkID0g eworICAgICAgaW5pdDogZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlz LmluaXRpYWxpemVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB0 aGlzLmluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAgdGhpcy50aXRsZV9p bmRleCA9IDE7CisKKyAgICAgICAgLy8gRGVmaW5lIGxpc3Qgb2Ygbm9kZXMg b24gd2hpY2ggdmlldyBkYXRhIG9wdGlvbiBhcHBlYXJzCisgICAgICAgIHZh ciBzdXBwb3J0ZWRfbm9kZXMgPSBbCisgICAgICAgICAgICd0YWJsZScsICd2 aWV3JywKKyAgICAgICAgICAgJ2ZvcmVpZ24tdGFibGUnLCAnY2F0YWxvZ19v YmplY3QnCisgICAgICAgIF0sCisKKyAgICAgICAgLyogRW5hYmxlL2Rpc2Fi bGUgVmlldyBkYXRhIG1lbnUgaW4gdG9vbHMgYmFzZWQKKyAgICAgICAgICog b24gbm9kZSBzZWxlY3RlZC4gaWYgc2VsZWN0ZWQgbm9kZSBpcyBwcmVzZW50 CisgICAgICAgICAqIGluIHN1cHBvcnRlZF9ub2RlcywgbWVudSB3aWxsIGJl IGVuYWJsZWQKKyAgICAgICAgICogb3RoZXJ3aXNlIGRpc2FibGVkLgorICAg ICAgICAgKi8KKyAgICAgICAgdmlld19tZW51X2VuYWJsZWQgPSBmdW5jdGlv bihvYmopIHsKKyAgICAgICAgICBpZighXy5pc1VuZGVmaW5lZChvYmopICYm ICFfLmlzTnVsbChvYmopKQorICAgICAgICAgICAgcmV0dXJuIChfLmluZGV4 T2Yoc3VwcG9ydGVkX25vZGVzLCBvYmouX3R5cGUpICE9PSAtMSA/IHRydWU6 IGZhbHNlKTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4g ZmFsc2U7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gRGVmaW5lIGxpc3Qg b2Ygbm9kZXMgb24gd2hpY2ggUXVlcnkgdG9vbCBvcHRpb24gZG9lc24ndCBh cHBlYXJzCisgICAgICAgIHZhciB1bnN1cHBvcnRlZF9ub2RlcyA9IFsKKyAg ICAgICAgICAgJ3NlcnZlci1ncm91cCcsICdzZXJ2ZXInLCAnY29sbC10YWJs ZXNwYWNlJywgJ3RhYmxlc3BhY2UnLAorICAgICAgICAgICAnY29sbC1yb2xl JywgJ3JvbGUnLCAnY29sbC1yZXNvdXJjZV9ncm91cCcsICdyZXNvdXJjZV9n cm91cCcsCisgICAgICAgICAgICdjb2xsLWRhdGFiYXNlJworICAgICAgICBd LAorCisgICAgICAgIC8qIEVuYWJsZS9kaXNhYmxlIFF1ZXJ5IHRvb2wgbWVu dSBpbiB0b29scyBiYXNlZAorICAgICAgICAgKiBvbiBub2RlIHNlbGVjdGVk LiBpZiBzZWxlY3RlZCBub2RlIGlzIHByZXNlbnQKKyAgICAgICAgICogaW4g dW5zdXBwb3J0ZWRfbm9kZXMsIG1lbnUgd2lsbCBiZSBkaXNhYmxlZAorICAg ICAgICAgKiBvdGhlcndpc2UgZW5hYmxlZC4KKyAgICAgICAgICovCisgICAg ICAgIHF1ZXJ5X3Rvb2xfbWVudV9lbmFibGVkID0gZnVuY3Rpb24ob2JqKSB7 CisgICAgICAgICAgaWYoIV8uaXNVbmRlZmluZWQob2JqKSAmJiAhXy5pc051 bGwob2JqKSkKKyAgICAgICAgICAgIHJldHVybiAoXy5pbmRleE9mKHVuc3Vw cG9ydGVkX25vZGVzLCBvYmouX3R5cGUpICE9PSAtMSA/IGZhbHNlOiB0cnVl KTsKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7 CisgICAgICAgIH07CisKKyAgICAgICAgLy8gRGVmaW5lIHRoZSBub2RlcyBv biB3aGljaCB0aGUgbWVudXMgdG8gYmUgYXBwZWFyCisgICAgICAgIHZhciBt ZW51cyA9IFt7CisgICAgICAgICAgbmFtZTogJ3F1ZXJ5X3Rvb2wnLCBtb2R1 bGU6IHRoaXMsIGFwcGxpZXM6IFsndG9vbHMnXSwKKyAgICAgICAgICBjYWxs YmFjazogJ3Nob3dfcXVlcnlfdG9vbCcsIGVuYWJsZTogcXVlcnlfdG9vbF9t ZW51X2VuYWJsZWQsCisgICAgICAgICAgcHJpb3JpdHk6IDEsIGxhYmVsOiAn e3sgXygnUXVlcnkgdG9vbCcpIH19JywKKyAgICAgICAgICBpY29uOiAnZmEg ZmEtYm9sdCcKKyAgICAgICAgfV07CisKKyAgICAgICAgLy8gQ3JlYXRlIGNv bnRleHQgbWVudQorICAgICAgICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBz dXBwb3J0ZWRfbm9kZXMubGVuZ3RoOyBpZHgrKykgeworICAgICAgICAgIG1l bnVzLnB1c2goeworICAgICAgICAgICAgbmFtZTogJ3ZpZXdfZmlyc3RfMTAw X3Jvd3NfY29udGV4dF8nICsgc3VwcG9ydGVkX25vZGVzW2lkeF0sCisgICAg ICAgICAgICBub2RlOiBzdXBwb3J0ZWRfbm9kZXNbaWR4XSwgbW9kdWxlOiB0 aGlzLCBkYXRhOiB7bW51aWQ6IDF9LAorICAgICAgICAgICAgYXBwbGllczog Wydjb250ZXh0JywgJ29iamVjdCddLCBjYWxsYmFjazogJ3Nob3dfZGF0YV9n cmlkJywgZW5hYmxlOiB2aWV3X21lbnVfZW5hYmxlZCwKKyAgICAgICAgICAg IGNhdGVnb3J5OiAndmlld19kYXRhJywgcHJpb3JpdHk6IDEwMSwgbGFiZWw6 ICd7eyBfKCdWaWV3IEZpcnN0IDEwMCBSb3dzJykgfX0nCisgICAgICAgICAg fSx7CisgICAgICAgICAgICBuYW1lOiAndmlld19sYXN0XzEwMF9yb3dzX2Nv bnRleHRfJyArIHN1cHBvcnRlZF9ub2Rlc1tpZHhdLAorICAgICAgICAgICAg bm9kZTogc3VwcG9ydGVkX25vZGVzW2lkeF0sIG1vZHVsZTogdGhpcywgZGF0 YToge21udWlkOiAyfSwKKyAgICAgICAgICAgIGFwcGxpZXM6IFsnY29udGV4 dCcsICdvYmplY3QnXSwgY2FsbGJhY2s6ICdzaG93X2RhdGFfZ3JpZCcsIGVu YWJsZTogdmlld19tZW51X2VuYWJsZWQsCisgICAgICAgICAgICBjYXRlZ29y eTogJ3ZpZXdfZGF0YScsIHByaW9yaXR5OiAxMDIsIGxhYmVsOiAne3sgXygn VmlldyBMYXN0IDEwMCBSb3dzJykgfX0nCisgICAgICAgICAgfSx7CisgICAg ICAgICAgICBuYW1lOiAndmlld19hbGxfcm93c19jb250ZXh0XycgKyBzdXBw b3J0ZWRfbm9kZXNbaWR4XSwKKyAgICAgICAgICAgIG5vZGU6IHN1cHBvcnRl ZF9ub2Rlc1tpZHhdLCBtb2R1bGU6IHRoaXMsIGRhdGE6IHttbnVpZDogM30s CisgICAgICAgICAgICBhcHBsaWVzOiBbJ2NvbnRleHQnLCAnb2JqZWN0J10s IGNhbGxiYWNrOiAnc2hvd19kYXRhX2dyaWQnLCBlbmFibGU6IHZpZXdfbWVu dV9lbmFibGVkLAorICAgICAgICAgICAgY2F0ZWdvcnk6ICd2aWV3X2RhdGEn LCBwcmlvcml0eTogMTAzLCBsYWJlbDogJ3t7IF8oJ1ZpZXcgQWxsIFJvd3Mn KSB9fScKKyAgICAgICAgICB9LHsKKyAgICAgICAgICAgIG5hbWU6ICd2aWV3 X2ZpbHRlcmVkX3Jvd3NfY29udGV4dF8nICsgc3VwcG9ydGVkX25vZGVzW2lk eF0sCisgICAgICAgICAgICBub2RlOiBzdXBwb3J0ZWRfbm9kZXNbaWR4XSwg bW9kdWxlOiB0aGlzLCBkYXRhOiB7bW51aWQ6IDR9LAorICAgICAgICAgICAg YXBwbGllczogWydjb250ZXh0JywgJ29iamVjdCddLCBjYWxsYmFjazogJ3No b3dfZmlsdGVyZWRfcm93JywgZW5hYmxlOiB2aWV3X21lbnVfZW5hYmxlZCwK KyAgICAgICAgICAgIGNhdGVnb3J5OiAndmlld19kYXRhJywgcHJpb3JpdHk6 IDEwNCwgbGFiZWw6ICd7eyBfKCdWaWV3IEZpbHRlcmVkIFJvd3MuLi4nKSB9 fScKKyAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgcGdBZG1p bi5Ccm93c2VyLmFkZF9tZW51X2NhdGVnb3J5KCd2aWV3X2RhdGEnLCAne3sg XygnVmlldyBEYXRhJykgfX0nLCAxMDAsICdmYSBmYS10aCcpOworICAgICAg ICBwZ0FkbWluLkJyb3dzZXIuYWRkX21lbnVzKG1lbnVzKTsKKworICAgICAg ICAvLyBDcmVhdGluZyBhIG5ldyBwZ0FkbWluLkJyb3dzZXIgZnJhbWUgdG8g c2hvdyB0aGUgZGF0YS4KKyAgICAgICAgdmFyIGRhdGFHcmlkRnJhbWVUeXBl ID0gbmV3IHBnQWRtaW4uQnJvd3Nlci5GcmFtZSh7CisgICAgICAgICAgbmFt ZTogJ2ZybV9kYXRhZ3JpZCcsCisgICAgICAgICAgdGl0bGU6ICdFZGl0IERh dGEnLAorICAgICAgICAgIHNob3dUaXRsZTogdHJ1ZSwKKyAgICAgICAgICBp c0Nsb3NlYWJsZTogdHJ1ZSwKKyAgICAgICAgICBpc1ByaXZhdGU6IHRydWUs CisgICAgICAgICAgdXJsOiAnYWJvdXQ6YmxhbmsnCisgICAgICAgIH0pOwor CisgICAgICAgIC8vIExvYWQgdGhlIG5ld2x5IGNyZWF0ZWQgZnJhbWUKKyAg ICAgICAgZGF0YUdyaWRGcmFtZVR5cGUubG9hZChwZ0Jyb3dzZXIuZG9ja2Vy KTsKKyAgICAgIH0sCisKKyAgICAgIC8vIFRoaXMgaXMgYSBjYWxsYmFjayBm dW5jdGlvbiB0byBzaG93IGRhdGEgd2hlbiB1c2VyIGNsaWNrIG9uIG1lbnUg aXRlbS4KKyAgICAgIHNob3dfZGF0YV9ncmlkOiBmdW5jdGlvbihkYXRhLCBp KSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpcywKKyAgICAgICAgICAgIGQg PSBwZ0FkbWluLkJyb3dzZXIudHJlZS5pdGVtRGF0YShpKTsKKyAgICAgICAg aWYgKGQgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgIGFsZXJ0aWZ5LmFs ZXJ0KAorICAgICAgICAgICAgJ0RhdGEgR3JpZCBFcnJvcicsCisgICAgICAg ICAgICAnTm8gb2JqZWN0IHNlbGVjdGVkLicKKyAgICAgICAgICApOworICAg ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEdldCB0 aGUgcGFyZW50IGRhdGEgZnJvbSB0aGUgdHJlZSBub2RlIGhpZXJhcmNoeS4K KyAgICAgICAgdmFyIG5vZGUgPSBwZ0Jyb3dzZXIuTm9kZXNbZC5fdHlwZV0s CisgICAgICAgICAgcGFyZW50RGF0YSA9IG5vZGUuZ2V0VHJlZU5vZGVIaWVy YXJjaHkoaSk7CisKKyAgICAgICAgLy8gSWYgc2VydmVyLCBkYXRhYmFzZSBv ciBzY2hlbWEgaXMgdW5kZWZpbmVkIHRoZW4gcmV0dXJuIGZyb20gdGhlIGZ1 bmN0aW9uLgorICAgICAgICBpZiAocGFyZW50RGF0YS5zZXJ2ZXIgPT09IHVu ZGVmaW5lZCB8fCBwYXJlbnREYXRhLmRhdGFiYXNlID09PSB1bmRlZmluZWQp IHsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8g SWYgc2NoZW1hLCB2aWV3LCBjYXRhbG9nIG9iamVjdCBhbGwgYXJlIHVuZGVm aW5lZCB0aGVuIHJldHVybiBmcm9tIHRoZSBmdW5jdGlvbi4KKyAgICAgICAg aWYgKHBhcmVudERhdGEuc2NoZW1hID09PSB1bmRlZmluZWQgJiYgcGFyZW50 RGF0YS52aWV3ID09PSB1bmRlZmluZWQgJiYKKyAgICAgICAgICAgICBwYXJl bnREYXRhLmNhdGFsb2cgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAgIHJl dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBuc3BfbmFtZSA9ICcn OworCisgICAgICAgIGlmIChwYXJlbnREYXRhLnNjaGVtYSAhPSB1bmRlZmlu ZWQpIHsKKyAgICAgICAgICAgIG5zcF9uYW1lID0gcGFyZW50RGF0YS5zY2hl bWEubGFiZWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocGFyZW50 RGF0YS52aWV3ICE9IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgbnNwX25h bWUgPSBwYXJlbnREYXRhLnZpZXcubGFiZWw7CisgICAgICAgIH0KKyAgICAg ICAgZWxzZSBpZiAocGFyZW50RGF0YS5jYXRhbG9nICE9IHVuZGVmaW5lZCkg eworICAgICAgICAgICAgbnNwX25hbWUgPSBwYXJlbnREYXRhLmNhdGFsb2cu bGFiZWw7CisgICAgICAgIH0KKworICAgICAgICB2YXIgYmFzZVVybCA9ICJ7 eyB1cmxfZm9yKCdkYXRhZ3JpZC5pbmRleCcpIH19IiArICJpbml0aWFsaXpl L2RhdGFncmlkLyIgKyBkYXRhLm1udWlkICsgIi8iICsgZC5fdHlwZSArICIv IiArCisgICAgICAgICAgcGFyZW50RGF0YS5zZXJ2ZXIuX2lkICsgIi8iICsg cGFyZW50RGF0YS5kYXRhYmFzZS5faWQgKyAiLyIgKyBkLl9pZDsKKworICAg ICAgICB2YXIgZ3JpZF90aXRsZSA9IHBhcmVudERhdGEuc2VydmVyLmxhYmVs ICsgJy0nICsgcGFyZW50RGF0YS5kYXRhYmFzZS5sYWJlbCArICctJworICAg ICAgICAgICAgICAgICAgICAgICAgKyBuc3BfbmFtZSArICcuJyArIGQubGFi ZWw7CisKKyAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZGF0YSBncmlkLgor ICAgICAgICBzZWxmLmluaXRpYWxpemVfZGF0YV9ncmlkKGJhc2VVcmwsIGdy aWRfdGl0bGUsICcnKTsKKyAgICAgIH0sCisKKyAgICAgIC8vIFRoaXMgaXMg YSBjYWxsYmFjayBmdW5jdGlvbiB0byBzaG93IGZpbHRlcmVkIGRhdGEgd2hl biB1c2VyIGNsaWNrIG9uIG1lbnUgaXRlbS4KKyAgICAgIHNob3dfZmlsdGVy ZWRfcm93OiBmdW5jdGlvbihkYXRhLCBpKSB7CisgICAgICAgIHZhciBzZWxm ID0gdGhpcywKKyAgICAgICAgICAgIGQgPSBwZ0FkbWluLkJyb3dzZXIudHJl ZS5pdGVtRGF0YShpKTsKKyAgICAgICAgaWYgKGQgPT09IHVuZGVmaW5lZCkg eworICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgJ0Rh dGEgR3JpZCBFcnJvcicsCisgICAgICAgICAgICAnTm8gb2JqZWN0IHNlbGVj dGVkLicKKyAgICAgICAgICApOworICAgICAgICAgIHJldHVybjsKKyAgICAg ICAgfQorCisgICAgICAgIC8vIEdldCB0aGUgcGFyZW50IGRhdGEgZnJvbSB0 aGUgdHJlZSBub2RlIGhpZXJhcmNoeS4KKyAgICAgICAgdmFyIG5vZGUgPSBw Z0Jyb3dzZXIuTm9kZXNbZC5fdHlwZV0sCisgICAgICAgICAgcGFyZW50RGF0 YSA9IG5vZGUuZ2V0VHJlZU5vZGVIaWVyYXJjaHkoaSk7CisKKyAgICAgICAg Ly8gSWYgc2VydmVyIG9yIGRhdGFiYXNlIGlzIHVuZGVmaW5lZCB0aGVuIHJl dHVybiBmcm9tIHRoZSBmdW5jdGlvbi4KKyAgICAgICAgaWYgKHBhcmVudERh dGEuc2VydmVyID09PSB1bmRlZmluZWQgfHwgcGFyZW50RGF0YS5kYXRhYmFz ZSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgcmV0dXJuOworICAgICAg ICB9CisKKyAgICAgICAgLy8gSWYgc2NoZW1hLCB2aWV3LCBjYXRhbG9nIG9i amVjdCBhbGwgYXJlIHVuZGVmaW5lZCB0aGVuIHJldHVybiBmcm9tIHRoZSBm dW5jdGlvbi4KKyAgICAgICAgaWYgKHBhcmVudERhdGEuc2NoZW1hID09PSB1 bmRlZmluZWQgJiYgcGFyZW50RGF0YS52aWV3ID09PSB1bmRlZmluZWQgJiYK KyAgICAgICAgICAgICBwYXJlbnREYXRhLmNhdGFsb2cgPT09IHVuZGVmaW5l ZCkgeworICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg IHZhciBuc3BfbmFtZSA9ICcnOworCisgICAgICAgIGlmIChwYXJlbnREYXRh LnNjaGVtYSAhPSB1bmRlZmluZWQpIHsKKyAgICAgICAgICAgIG5zcF9uYW1l ID0gcGFyZW50RGF0YS5zY2hlbWEubGFiZWw7CisgICAgICAgIH0KKyAgICAg ICAgZWxzZSBpZiAocGFyZW50RGF0YS52aWV3ICE9IHVuZGVmaW5lZCkgewor ICAgICAgICAgICAgbnNwX25hbWUgPSBwYXJlbnREYXRhLnZpZXcubGFiZWw7 CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAocGFyZW50RGF0YS5jYXRh bG9nICE9IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgbnNwX25hbWUgPSBw YXJlbnREYXRhLmNhdGFsb2cubGFiZWw7CisgICAgICAgIH0KKworICAgICAg ICAvLyBDcmVhdGUgYmFzZSB1cmwgdG8gaW5pdGlhbGl6ZSB0aGUgZWRpdCBn cmlkCisgICAgICAgIHZhciBiYXNlVXJsID0gInt7IHVybF9mb3IoJ2RhdGFn cmlkLmluZGV4JykgfX0iICsgImluaXRpYWxpemUvZGF0YWdyaWQvIiArIGRh dGEubW51aWQgKyAiLyIgKyBkLl90eXBlICsgIi8iICsKKyAgICAgICAgICBw YXJlbnREYXRhLnNlcnZlci5faWQgKyAiLyIgKyBwYXJlbnREYXRhLmRhdGFi YXNlLl9pZCArICIvIiArIGQuX2lkOworCisgICAgICAgIC8vIENyZWF0ZSB1 cmwgdG8gdmFsaWRhdGUgdGhlIFNRTCBmaWx0ZXIKKyAgICAgICAgdmFyIHZh bGlkYXRlVXJsID0gInt7IHVybF9mb3IoJ2RhdGFncmlkLmluZGV4JykgfX0i ICsgImZpbHRlci92YWxpZGF0ZS8iICsKKyAgICAgICAgICBwYXJlbnREYXRh LnNlcnZlci5faWQgKyAiLyIgKyBwYXJlbnREYXRhLmRhdGFiYXNlLl9pZCAr ICIvIiArIGQuX2lkOworCisgICAgICAgIHZhciBncmlkX3RpdGxlID0gcGFy ZW50RGF0YS5zZXJ2ZXIubGFiZWwgKyAnLScgKyBwYXJlbnREYXRhLmRhdGFi YXNlLmxhYmVsICsgJy0nCisgICAgICAgICAgICAgICAgICAgICAgICArIG5z cF9uYW1lICsgJy4nICsgZC5sYWJlbDsKKworICAgICAgICAvLyBDcmVhdGUg ZmlsdGVyIGRpYWxvZyB1c2luZyBhbGVydGlmeQorICAgICAgICBpZiAoIWFs ZXJ0aWZ5LmZpbHRlckRpYWxvZykgeworICAgICAgICAgIGFsZXJ0aWZ5LmRp YWxvZygnZmlsdGVyRGlhbG9nJywgZnVuY3Rpb24gZmFjdG9yeSgpIHsKKyAg ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgIG1haW46IGZ1bmN0 aW9uKHRpdGxlLCBtZXNzYWdlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5z ZXQoJ3RpdGxlJywgdGl0bGUpOworICAgICAgICAgICAgICAgIHRoaXMubWVz c2FnZSA9IG1lc3NhZ2U7CisgICAgICAgICAgICAgIH0sCisKKyAgICAgICAg ICAgICAgc2V0dXA6ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgcmV0 dXJuIHsKKyAgICAgICAgICAgICAgICAgIGJ1dHRvbnM6WworICAgICAgICAg ICAgICAgICAgICB7IHRleHQ6ICJPSyIsIGNsYXNzTmFtZTogImJ0biBidG4t cHJpbWFyeSIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyB0ZXh0OiAiQ2Fu Y2VsIiwgY2xhc3NOYW1lOiAiYnRuIGJ0bi1kYW5nZXIiIH0KKyAgICAgICAg ICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICBvcHRpb25zOiB7IG1v ZGFsOiAwLCByZXNpemFibGU6IGZhbHNlLCBtYXhpbWl6YWJsZTogZmFsc2Us IHBpbm5hYmxlOiBmYWxzZX0KKyAgICAgICAgICAgICAgICB9OworICAgICAg ICAgICAgICB9LAorCisgICAgICAgICAgICAgIGJ1aWxkOmZ1bmN0aW9uKCkg e30sCisgICAgICAgICAgICAgIHByZXBhcmU6ZnVuY3Rpb24oKSB7CisJCSAg ICAgICAgdmFyICRjb250ZW50ID0gJCh0aGlzLm1lc3NhZ2UpLAorICAgICAg ICAgICAgICAgICAgICAkc3FsX2ZpbHRlciA9ICRjb250ZW50LmZpbmQoJyNz cWxfZmlsdGVyJyk7CisKKyAgICAgICAgICAgICAgICB0aGlzLnNldENvbnRl bnQoJGNvbnRlbnQuZ2V0KDApKTsKKworICAgICAgICAgICAgICAgIC8vIEFw cGx5IENvZGVNaXJyb3IgdG8gZmlsdGVyIHRleHQgYXJlYS4KKyAgICAgICAg ICAgICAgICB0aGlzLmZpbHRlcl9vYmogPSBDb2RlTWlycm9yLmZyb21UZXh0 QXJlYSgkc3FsX2ZpbHRlci5nZXQoMCksIHsKKyAgICAgICAgICAgICAgICAg IGxpbmVOdW1iZXJzOiB0cnVlLAorICAgICAgICAgICAgICAgICAgbGluZVdy YXBwaW5nOiB0cnVlLAorICAgICAgICAgICAgICAgICAgbWF0Y2hCcmFja2V0 czogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgIGluZGVudFVuaXQ6IDQsCisg ICAgICAgICAgICAgICAgICBtb2RlOiAidGV4dC94LXNxbCIKKyAgICAgICAg ICAgICAgICB9KTsKKyAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAg ICBjYWxsYmFjazogZnVuY3Rpb24oY2xvc2VFdmVudCkgeworCisgICAgICAg ICAgICAgICAgaWYgKGNsb3NlRXZlbnQuYnV0dG9uLnRleHQgPT0gInt7IF8o J09LJykgfX0iKSB7CisgICAgICAgICAgICAgICAgICB2YXIgc3FsID0gdGhp cy5maWx0ZXJfb2JqLmdldFZhbHVlKCk7CisKKyAgICAgICAgICAgICAgICAg IC8vIE1ha2UgYWpheCBjYWxsIHRvIGluY2x1ZGUgdGhlIGZpbHRlciBieSBz ZWxlY3Rpb24KKyAgICAgICAgICAgICAgICAgICQuYWpheCh7CisgICAgICAg ICAgICAgICAgICAgIHVybDogdmFsaWRhdGVVcmwsCisgICAgICAgICAgICAg ICAgICAgIG1ldGhvZDogJ1BPU1QnLAorICAgICAgICAgICAgICAgICAgICBh c3luYzogZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBl OiAiYXBwbGljYXRpb24vanNvbiIsCisgICAgICAgICAgICAgICAgICAgIGRh dGE6IEpTT04uc3RyaW5naWZ5KHNxbCksCisgICAgICAgICAgICAgICAgICAg IHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgeworICAgICAgICAgICAgICAgICAg ICAgIGlmIChyZXMuZGF0YS5zdGF0dXMpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIC8vIEluaXRpYWxpemUgdGhlIGRhdGEgZ3JpZC4KKyAgICAgICAg ICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZV9kYXRhX2dyaWQoYmFz ZVVybCwgZ3JpZF90aXRsZSwgc3FsKTsKKyAgICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgICAgICBhbGVydGlmeS5hbGVydCgKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgJ1ZhbGlkYXRpb24gRXJyb3InLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJlcy5kYXRhLnJlc3VsdAorICAgICAgICAgICAg ICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIGVycm9y OiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAgICAgICAgICAgYWxlcnRp ZnkuYWxlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAnVmFsaWRhdGlv biBFcnJvcicsCisgICAgICAgICAgICAgICAgICAgICAgICBlCisgICAgICAg ICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgIH0pOworICAg ICAgICB9CisKKyAgICAgICAgdmFyIGNvbnRlbnQgPSAnJzsKKyAgICAgICAg JC5nZXQoInt7IHVybF9mb3IoJ2RhdGFncmlkLmluZGV4JykgfX0iICsgImZp bHRlciIsCisgICAgICAgICAgZnVuY3Rpb24oZGF0YSkgeworICAgICAgICAg ICAgYWxlcnRpZnkuZmlsdGVyRGlhbG9nKCdEYXRhIEZpbHRlcicsIGRhdGEp LnJlc2l6ZVRvKDYwMCwgNDAwKTsKKyAgICAgICAgICB9CisgICAgICAgICk7 CisgICAgICB9LAorCisgICAgICBpbml0aWFsaXplX2RhdGFfZ3JpZDogZnVu Y3Rpb24oYmFzZVVybCwgZ3JpZF90aXRsZSwgc3FsX2ZpbHRlcikgeworICAg ICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgLyogQWpheCBjYWxs IHRvIGluaXRpYWxpemUgdGhlIGVkaXQgZ3JpZCwgd2hpY2ggY3JlYXRlcwor ICAgICAgICAgKiBhbiBhc3luY2hyb25vdXMgY29ubmVjdGlvbiBhbmQgY3Jl YXRlIGFwcHJvcHJpYXRlIHF1ZXJ5CisgICAgICAgICAqIGZvciB0aGUgc2Vs ZWN0ZWQgbm9kZS4KKyAgICAgICAgICovCisgICAgICAgICQuYWpheCh7Cisg ICAgICAgICAgdXJsOiBiYXNlVXJsLAorICAgICAgICAgIG1ldGhvZDogJ1BP U1QnLAorICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsCisgICAgICAgICAg Y29udGVudFR5cGU6ICJhcHBsaWNhdGlvbi9qc29uIiwKKyAgICAgICAgICBk YXRhOiBKU09OLnN0cmluZ2lmeShzcWxfZmlsdGVyKSwKKyAgICAgICAgICBz dWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKworICAgICAgICAgICAgLyogT24g c3VjY2Vzc2Z1bGx5IGluaXRpYWxpemF0aW9uIGZpbmQgdGhlIGRhc2hib2Fy ZCBwYW5lbCwKKyAgICAgICAgICAgICAqIGNyZWF0ZSBuZXcgcGFuZWwgYW5k IGFkZCBpdCB0byB0aGUgZGFzaGJvYXJkIHBhbmVsLgorICAgICAgICAgICAg ICovCisgICAgICAgICAgICB2YXIgcGFuZWxfdGl0bGUgPSAnIFF1ZXJ5LScg KyBzZWxmLnRpdGxlX2luZGV4OworICAgICAgICAgICAgc2VsZi50aXRsZV9p bmRleCArPSAxOworCisgICAgICAgICAgICB2YXIgZGFzaGJvYXJkUGFuZWwg PSBwZ0Jyb3dzZXIuZG9ja2VyLmZpbmRQYW5lbHMoJ2Rhc2hib2FyZCcpOwor ICAgICAgICAgICAgZGF0YUdyaWRQYW5lbCA9IHBnQnJvd3Nlci5kb2NrZXIu YWRkUGFuZWwoJ2ZybV9kYXRhZ3JpZCcsIHdjRG9ja2VyLkRPQ0suU1RBQ0tF RCwgZGFzaGJvYXJkUGFuZWxbMF0pOworICAgICAgICAgICAgZGF0YUdyaWRQ YW5lbC50aXRsZShwYW5lbF90aXRsZSk7CisgICAgICAgICAgICBkYXRhR3Jp ZFBhbmVsLmljb24oJ2ZhIGZhLWJvbHQnKTsKKyAgICAgICAgICAgIGRhdGFH cmlkUGFuZWwuZm9jdXMoKTsKKworICAgICAgICAgICAgLy8gTGlzdGVuIG9u IHRoZSBwYW5lbCBjbG9zZWQgZXZlbnQuCisgICAgICAgICAgICBkYXRhR3Jp ZFBhbmVsLm9uKHdjRG9ja2VyLkVWRU5ULkNMT1NFRCwgZnVuY3Rpb24oKSB7 CisgICAgICAgICAgICAgICQuYWpheCh7CisgICAgICAgICAgICAgICAgdXJs OiAie3sgdXJsX2ZvcignZGF0YWdyaWQuaW5kZXgnKSB9fSIgKyAiY2xvc2Uv IiArIHJlcy5kYXRhLmdyaWRUcmFuc0lkLAorICAgICAgICAgICAgICAgIG1l dGhvZDogJ0dFVCcKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9 KTsKKworICAgICAgICAgICAgLy8gT3BlbiB0aGUgcGFuZWwgaWYgZnJhbWUg aXMgaW5pdGlhbGl6ZWQKKyAgICAgICAgICAgIGJhc2VVcmwgPSAie3sgdXJs X2ZvcignZGF0YWdyaWQuaW5kZXgnKSB9fSIgICsgInBhbmVsLyIgKyByZXMu ZGF0YS5ncmlkVHJhbnNJZCArICIvZmFsc2UvIiArIGdyaWRfdGl0bGU7Cisg ICAgICAgICAgICB2YXIgb3BlbkRhdGFHcmlkVVJMID0gZnVuY3Rpb24oaikg eworICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7Cisg ICAgICAgICAgICAgICAgICAgIHZhciBmcmFtZUluaXRpYWxpemVkID0gai5k YXRhKCdmcmFtZUluaXRpYWxpemVkJyk7CisgICAgICAgICAgICAgICAgICAg IGlmIChmcmFtZUluaXRpYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICB2YXIgZnJhbWUgPSBqLmRhdGEoJ2VtYmVkZGVkRnJhbWUnKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZSkgeworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZyYW1lLm9wZW5VUkwoYmFzZVVybCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVuRGF0YUdy aWRVUkwoaik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICB9LCAxMDApOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIG9w ZW5EYXRhR3JpZFVSTCgkKGRhdGFHcmlkUGFuZWwpKTsKKyAgICAgICAgICB9 LAorICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihlKSB7CisgICAgICAgICAg ICBhbGVydGlmeS5hbGVydCgKKyAgICAgICAgICAgICAgJ1NRTCBUb29sIElu aXRpYWxpemUgRXJyb3InLAorICAgICAgICAgICAgICBlLnJlc3BvbnNlSlNP Ti5lcnJvcm1zZworICAgICAgICAgICAgKTsKKyAgICAgICAgICB9CisgICAg ICAgIH0pOworICAgICAgfSwKKworICAgICAgLy8gVGhpcyBpcyBhIGNhbGxi YWNrIGZ1bmN0aW9uIHRvIHNob3cgcXVlcnkgdG9vbCB3aGVuIHVzZXIgY2xp Y2sgb24gbWVudSBpdGVtLgorICAgICAgc2hvd19xdWVyeV90b29sOiBmdW5j dGlvbihkYXRhLCBpKSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpcywKKyAg ICAgICAgICAgIGQgPSBwZ0FkbWluLkJyb3dzZXIudHJlZS5pdGVtRGF0YShp KTsKKyAgICAgICAgaWYgKGQgPT09IHVuZGVmaW5lZCkgeworICAgICAgICAg IGFsZXJ0aWZ5LmFsZXJ0KAorICAgICAgICAgICAgJ1F1ZXJ5IHRvb2wgRXJy b3InLAorICAgICAgICAgICAgJ05vIG9iamVjdCBzZWxlY3RlZC4nCisgICAg ICAgICAgKTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg ICAgICAvLyBHZXQgdGhlIHBhcmVudCBkYXRhIGZyb20gdGhlIHRyZWUgbm9k ZSBoaWVyYXJjaHkuCisgICAgICAgIHZhciBub2RlID0gcGdCcm93c2VyLk5v ZGVzW2QuX3R5cGVdLAorICAgICAgICAgIHBhcmVudERhdGEgPSBub2RlLmdl dFRyZWVOb2RlSGllcmFyY2h5KGkpOworCisgICAgICAgIC8vIElmIHNlcnZl ciwgZGF0YWJhc2UgaXMgdW5kZWZpbmVkIHRoZW4gcmV0dXJuIGZyb20gdGhl IGZ1bmN0aW9uLgorICAgICAgICBpZiAocGFyZW50RGF0YS5zZXJ2ZXIgPT09 IHVuZGVmaW5lZCB8fCBwYXJlbnREYXRhLmRhdGFiYXNlID09PSB1bmRlZmlu ZWQpIHsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg ICB2YXIgYmFzZVVybCA9ICJ7eyB1cmxfZm9yKCdkYXRhZ3JpZC5pbmRleCcp IH19IiArICJpbml0aWFsaXplL3F1ZXJ5X3Rvb2wvIiArIHBhcmVudERhdGEu c2VydmVyLl9pZCArCisgICAgICAgICAgICAgICAgIi8iICsgcGFyZW50RGF0 YS5kYXRhYmFzZS5faWQ7CisgICAgICAgIHZhciBncmlkX3RpdGxlID0gcGFy ZW50RGF0YS5kYXRhYmFzZS5sYWJlbCArICcgb24gJyArIHBhcmVudERhdGEu c2VydmVyLnVzZXIubmFtZSArICdAJyArCisgICAgICAgICAgICAgICAgcGFy ZW50RGF0YS5zZXJ2ZXIubGFiZWwgOworCisgICAgICAgIHZhciBwYW5lbF90 aXRsZSA9ICcgUXVlcnktJyArIHNlbGYudGl0bGVfaW5kZXg7CisgICAgICAg IHNlbGYudGl0bGVfaW5kZXggKz0gMTsKKworICAgICAgICAkLmFqYXgoewor ICAgICAgICAgIHVybDogYmFzZVVybCwKKyAgICAgICAgICBtZXRob2Q6ICdQ T1NUJywKKyAgICAgICAgICBkYXRhVHlwZTogJ2pzb24nLAorICAgICAgICAg IGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24vanNvbiIsCisgICAgICAgICAg c3VjY2VzczogZnVuY3Rpb24ocmVzKSB7CisKKyAgICAgICAgICAgIC8qIE9u IHN1Y2Nlc3NmdWxseSBpbml0aWFsaXphdGlvbiBmaW5kIHRoZSBkYXNoYm9h cmQgcGFuZWwsCisgICAgICAgICAgICAgKiBjcmVhdGUgbmV3IHBhbmVsIGFu ZCBhZGQgaXQgdG8gdGhlIGRhc2hib2FyZCBwYW5lbC4KKyAgICAgICAgICAg ICAqLworICAgICAgICAgICAgdmFyIGRhc2hib2FyZFBhbmVsID0gcGdCcm93 c2VyLmRvY2tlci5maW5kUGFuZWxzKCdkYXNoYm9hcmQnKTsKKyAgICAgICAg ICAgIHF1ZXJ5VG9vbFBhbmVsID0gcGdCcm93c2VyLmRvY2tlci5hZGRQYW5l bCgnZnJtX2RhdGFncmlkJywgd2NEb2NrZXIuRE9DSy5TVEFDS0VELCBkYXNo Ym9hcmRQYW5lbFswXSk7CisgICAgICAgICAgICBxdWVyeVRvb2xQYW5lbC50 aXRsZShwYW5lbF90aXRsZSk7CisgICAgICAgICAgICBxdWVyeVRvb2xQYW5l bC5pY29uKCdmYSBmYS1ib2x0Jyk7CisgICAgICAgICAgICBxdWVyeVRvb2xQ YW5lbC5mb2N1cygpOworCisgICAgICAgICAgICAvLyBMaXN0ZW4gb24gdGhl IHBhbmVsIGNsb3NlZCBldmVudC4KKyAgICAgICAgICAgIHF1ZXJ5VG9vbFBh bmVsLm9uKHdjRG9ja2VyLkVWRU5ULkNMT1NFRCwgZnVuY3Rpb24oKSB7Cisg ICAgICAgICAgICAgICQuYWpheCh7CisgICAgICAgICAgICAgICAgdXJsOiAi e3sgdXJsX2ZvcignZGF0YWdyaWQuaW5kZXgnKSB9fSIgKyAiY2xvc2UvIiAr IHJlcy5kYXRhLmdyaWRUcmFuc0lkLAorICAgICAgICAgICAgICAgIG1ldGhv ZDogJ0dFVCcKKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsK KworICAgICAgICAgICAgLy8gT3BlbiB0aGUgcGFuZWwgaWYgZnJhbWUgaXMg aW5pdGlhbGl6ZWQKKyAgICAgICAgICAgIGJhc2VVcmwgPSAie3sgdXJsX2Zv cignZGF0YWdyaWQuaW5kZXgnKSB9fSIgICsgInBhbmVsLyIgKyByZXMuZGF0 YS5ncmlkVHJhbnNJZCArICIvdHJ1ZS8iICsgZ3JpZF90aXRsZTsKKyAgICAg ICAgICAgIHZhciBvcGVuUXVlcnlUb29sVVJMID0gZnVuY3Rpb24oaikgewor ICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAg ICAgICAgICAgICAgICAgIHZhciBmcmFtZUluaXRpYWxpemVkID0gai5kYXRh KCdmcmFtZUluaXRpYWxpemVkJyk7CisgICAgICAgICAgICAgICAgICAgIGlm IChmcmFtZUluaXRpYWxpemVkKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICB2YXIgZnJhbWUgPSBqLmRhdGEoJ2VtYmVkZGVkRnJhbWUnKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChmcmFtZSkgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGZyYW1lLm9wZW5VUkwoYmFzZVVybCk7CisgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvcGVuUXVlcnlUb29s VVJMKGopOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgfSwgMTAwKTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICBvcGVu UXVlcnlUb29sVVJMKCQocXVlcnlUb29sUGFuZWwpKTsKKyAgICAgICAgICB9 LAorICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihlKSB7CisgICAgICAgICAg ICBhbGVydGlmeS5hbGVydCgKKyAgICAgICAgICAgICAgJ1F1ZXJ5IFRvb2wg SW5pdGlhbGl6ZSBFcnJvcicsCisgICAgICAgICAgICAgIGUucmVzcG9uc2VK U09OLmVycm9ybXNnCisgICAgICAgICAgICApOworICAgICAgICAgIH0KKyAg ICAgICAgfSk7CisgICAgICB9CisgICAgfTsKKworICAgIHJldHVybiBwZ0Fk bWluLkRhdGFHcmlkOworICB9KTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWlu L3Rvb2xzL3NxbGVkaXRvci9fX2luaXRfXy5weSBiL3dlYi9wZ2FkbWluL3Rv b2xzL3NxbGVkaXRvci9fX2luaXRfXy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwLi4zMmFjNmU0Ci0tLSAvZGV2L251bGwKKysrIGIv d2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL19faW5pdF9fLnB5CkBAIC0w LDAgKzEsOTUxIEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwor IworIyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHly aWdodCAoQykgMjAxMyAtIDIwMTYsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50 IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUg UG9zdGdyZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIworCisiIiJBIGJsdWVwcmludCBtb2R1bGUgaW1wbGVtZW50aW5n IHRoZSBzcWxlZGl0b3IgZnJhbWUuIiIiCitNT0RVTEVfTkFNRSA9ICdzcWxl ZGl0b3InCisKK2ltcG9ydCBqc29uCitpbXBvcnQgcGlja2xlCitpbXBvcnQg cmFuZG9tCitmcm9tIGZsYXNrIGltcG9ydCBSZXNwb25zZSwgdXJsX2Zvciwg cmVuZGVyX3RlbXBsYXRlLCBzZXNzaW9uLCByZXF1ZXN0Citmcm9tIGZsYXNr LmV4dC5iYWJlbCBpbXBvcnQgZ2V0dGV4dAorZnJvbSBmbGFzay5leHQuc2Vj dXJpdHkgaW1wb3J0IGxvZ2luX3JlcXVpcmVkCitmcm9tIHBnYWRtaW4udXRp bHMgaW1wb3J0IFBnQWRtaW5Nb2R1bGUKK2Zyb20gcGdhZG1pbi51dGlscy5h amF4IGltcG9ydCBtYWtlX2pzb25fcmVzcG9uc2UsIGJhZF9yZXF1ZXN0LCBz dWNjZXNzX3JldHVybiwgaW50ZXJuYWxfc2VydmVyX2Vycm9yCitmcm9tIHBn YWRtaW4udXRpbHMuZHJpdmVyIGltcG9ydCBnZXRfZHJpdmVyCitmcm9tIGNv bmZpZyBpbXBvcnQgUEdfREVGQVVMVF9EUklWRVIKK2Zyb20gdG9vbHMuc3Fs ZWRpdG9yLmNvbW1hbmQgaW1wb3J0IFF1ZXJ5VG9vbENvbW1hbmQKKworCisj IEFzeW5jIENvbnN0YW50cworQVNZTkNfT0sgPSAxCitBU1lOQ19SRUFEX1RJ TUVPVVQgPSAyCitBU1lOQ19XUklURV9USU1FT1VUID0gMworQVNZTkNfTk9U X0NPTk5FQ1RFRCA9IDQKK0FTWU5DX0VYRUNVVElPTl9BQk9SVEVEID0gNQor CisjIFRyYW5zYWN0aW9uIHN0YXR1cyBjb25zdGFudHMKK1RYX1NUQVRVU19J RExFID0gMAorVFhfU1RBVFVTX19BQ1RJVkUgPSAxCitUWF9TVEFUVVNfSU5U UkFOUyA9IDIKK1RYX1NUQVRVU19JTkVSUk9SID0gMworCisKK2NsYXNzIFNx bEVkaXRvck1vZHVsZShQZ0FkbWluTW9kdWxlKToKKyAgICAiIiIKKyAgICBj bGFzcyBTcWxFZGl0b3JNb2R1bGUoUGdBZG1pbk1vZHVsZSkKKworICAgICAg ICBBIG1vZHVsZSBjbGFzcyBmb3IgU1FMIEdyaWQgZGVyaXZlZCBmcm9tIFBn QWRtaW5Nb2R1bGUuCisgICAgIiIiCisKKyAgICBMQUJFTCA9ICJTUUwgRWRp dG9yIgorCisgICAgZGVmIGdldF9vd25fbWVudWl0ZW1zKHNlbGYpOgorICAg ICAgICByZXR1cm4ge30KKworICAgIGRlZiBnZXRfb3duX2phdmFzY3JpcHRz KHNlbGYpOgorICAgICAgICByZXR1cm4gW3sKKyAgICAgICAgICAgICduYW1l JzogJ3BnYWRtaW4uc3FsZWRpdG9yJywKKyAgICAgICAgICAgICdwYXRoJzog dXJsX2Zvcignc3FsZWRpdG9yLmluZGV4JykgKyAic3FsZWRpdG9yIiwKKyAg ICAgICAgICAgICd3aGVuJzogTm9uZQorICAgICAgICB9XQorCisgICAgZGVm IGdldF9wYW5lbHMoc2VsZik6CisgICAgICAgIHJldHVybiBbXQorCisgICAg ZGVmIHJlZ2lzdGVyX3ByZWZlcmVuY2VzKHNlbGYpOgorICAgICAgICBzZWxm Lml0ZW1zX3Blcl9wYWdlID0gc2VsZi5wcmVmZXJlbmNlLnJlZ2lzdGVyKAor ICAgICAgICAgICAgJ2Rpc3BsYXknLCAnaXRlbXNfcGVyX3BhZ2UnLAorICAg ICAgICAgICAgZ2V0dGV4dCgiSXRlbXMgcGVyIHBhZ2UgaW4gZ3JpZCIpLCAn aW50ZWdlcicsIDUwLAorICAgICAgICAgICAgY2F0ZWdvcnlfbGFiZWw9Z2V0 dGV4dCgnRGlzcGxheScpCisgICAgICAgICAgICApCisKK2JsdWVwcmludCA9 IFNxbEVkaXRvck1vZHVsZShNT0RVTEVfTkFNRSwgX19uYW1lX18sIHN0YXRp Y191cmxfcGF0aD0nL3N0YXRpYycpCisKKworQGJsdWVwcmludC5yb3V0ZSgn LycpCitAbG9naW5fcmVxdWlyZWQKK2RlZiBpbmRleCgpOgorICAgIHJldHVy biBiYWRfcmVxdWVzdChlcnJvcm1zZz1nZXR0ZXh0KCdVc2VyIGNhbiBub3Qg Y2FsbCB0aGlzIHVybCBkaXJlY3RseScpKQorCisKK2RlZiB1cGRhdGVfc2Vz c2lvbl9ncmlkX3RyYW5zYWN0aW9uKHRyYW5zX2lkLCBkYXRhKToKKyAgICBn cmlkX2RhdGEgPSBzZXNzaW9uWydncmlkRGF0YSddCisgICAgZ3JpZF9kYXRh W3N0cih0cmFuc19pZCldID0gZGF0YQorCisgICAgc2Vzc2lvblsnZ3JpZERh dGEnXSA9IGdyaWRfZGF0YQorCisKK2RlZiBjaGVja190cmFuc2FjdGlvbl9z dGF0dXModHJhbnNfaWQpOgorICAgICIiIgorICAgIFRoaXMgZnVuY3Rpb24g aXMgdXNlZCB0byBjaGVjayB0aGUgdHJhbnNhY3Rpb24gaWQKKyAgICBpcyBh dmFpbGFibGUgaW4gdGhlIHNlc3Npb24gb2JqZWN0IGFuZCBjb25uZWN0aW9u CisgICAgc3RhdHVzLgorCisgICAgQXJnczoKKyAgICAgICAgdHJhbnNfaWQ6 CisKKyAgICBSZXR1cm5zOiBzdGF0dXMgYW5kIGNvbm5lY3Rpb24gb2JqZWN0 CisKKyAgICAiIiIKKyAgICBncmlkX2RhdGEgPSBzZXNzaW9uWydncmlkRGF0 YSddCisKKyAgICAjIFJldHVybiBmcm9tIHRoZSBmdW5jdGlvbiBpZiB0cmFu c2FjdGlvbiBpZCBub3QgZm91bmQKKyAgICBpZiBzdHIodHJhbnNfaWQpIG5v dCBpbiBncmlkX2RhdGE6CisgICAgICAgIHJldHVybiBGYWxzZSwgZ2V0dGV4 dCgnVHJhbnNhY3Rpb24gaWQgbm90IGZvdW5kIGluIHRoZSBzZXNzaW9uLicp LCBOb25lLCBOb25lLCBOb25lCisKKyAgICAjIEZldGNoIHRoZSBvYmplY3Qg Zm9yIHRoZSBzcGVjaWZpZWQgdHJhbnNhY3Rpb24gaWQuCisgICAgIyBVc2Ug cGlja2xlLmxvYWRzIGZ1bmN0aW9uIHRvIGdldCB0aGUgY29tbWFuZCBvYmpl Y3QKKyAgICBzZXNzaW9uX29iaiA9IGdyaWRfZGF0YVtzdHIodHJhbnNfaWQp XQorICAgIHRyYW5zX29iaiA9IHBpY2tsZS5sb2FkcyhzZXNzaW9uX29ialsn Y29tbWFuZF9vYmonXSkKKworICAgIHRyeToKKyAgICAgICAgbWFuYWdlciA9 IGdldF9kcml2ZXIoUEdfREVGQVVMVF9EUklWRVIpLmNvbm5lY3Rpb25fbWFu YWdlcih0cmFuc19vYmouc2lkKQorICAgICAgICBjb25uID0gbWFuYWdlci5j b25uZWN0aW9uKGRpZD10cmFuc19vYmouZGlkLCBjb25uX2lkPXRyYW5zX29i ai5jb25uX2lkKQorICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToKKyAgICAg ICAgICAgICAgICByZXR1cm4gRmFsc2UsIGludGVybmFsX3NlcnZlcl9lcnJv cihlcnJvcm1zZz1zdHIoZSkpLCBOb25lLCBOb25lLCBOb25lCisKKyAgICBp ZiBjb25uLmNvbm5lY3RlZCgpOgorICAgICAgICByZXR1cm4gVHJ1ZSwgTm9u ZSwgY29ubiwgdHJhbnNfb2JqLCBzZXNzaW9uX29iagorICAgIGVsc2U6Cisg ICAgICAgIHJldHVybiBGYWxzZSwgZ2V0dGV4dCgnTm90IGNvbm5lY3RlZCB0 byBzZXJ2ZXIgT3IgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgaGFzIGJl ZW4gY2xvc2VkLicpLCBcCisgICAgICAgICAgICAgICBOb25lLCB0cmFuc19v YmosIHNlc3Npb25fb2JqCisKKworQGJsdWVwcmludC5yb3V0ZSgnL3ZpZXdf ZGF0YS9zdGFydC88aW50OnRyYW5zX2lkPicsIG1ldGhvZHM9WyJHRVQiXSkK K0Bsb2dpbl9yZXF1aXJlZAorZGVmIHN0YXJ0X3ZpZXdfZGF0YSh0cmFuc19p ZCk6CisgICAgIiIiCisgICAgVGhpcyBtZXRob2QgaXMgdXNlZCB0byBleGVj dXRlIHF1ZXJ5IHVzaW5nIGFzeW5jaHJvbm91cyBjb25uZWN0aW9uLgorCisg ICAgQXJnczoKKyAgICAgICAgdHJhbnNfaWQ6IHVuaXF1ZSB0cmFuc2FjdGlv biBpZAorICAgICIiIgorICAgIGxpbWl0ID0gLTEKKworICAgICMgQ2hlY2sg dGhlIHRyYW5zYWN0aW9uIGFuZCBjb25uZWN0aW9uIHN0YXR1cworICAgIHN0 YXR1cywgZXJyb3JfbXNnLCBjb25uLCB0cmFuc19vYmosIHNlc3Npb25fb2Jq ID0gY2hlY2tfdHJhbnNhY3Rpb25fc3RhdHVzKHRyYW5zX2lkKQorICAgIGlm IHN0YXR1cyBhbmQgY29ubiBpcyBub3QgTm9uZSBcCisgICAgICAgICAgICBh bmQgdHJhbnNfb2JqIGlzIG5vdCBOb25lIGFuZCBzZXNzaW9uX29iaiBpcyBu b3QgTm9uZToKKyAgICAgICAgdHJ5OgorCisgICAgICAgICAgICAjIEZldGNo IHRoZSBzcWwgYW5kIHByaW1hcnlfa2V5cyBmcm9tIHRoZSBvYmplY3QKKyAg ICAgICAgICAgIHNxbCA9IHRyYW5zX29iai5nZXRfc3FsKCkKKyAgICAgICAg ICAgIHBrX25hbWVzLCBwcmltYXJ5X2tleXMgPSB0cmFuc19vYmouZ2V0X3By aW1hcnlfa2V5cygpCisKKyAgICAgICAgICAgICMgRmV0Y2ggdGhlIGFwcGxp ZWQgZmlsdGVyLgorICAgICAgICAgICAgZmlsdGVyX2FwcGxpZWQgPSB0cmFu c19vYmouaXNfZmlsdGVyX2FwcGxpZWQoKQorCisgICAgICAgICAgICAjIEZl dGNoIHRoZSBsaW1pdCBmb3IgdGhlIFNRTCBxdWVyeQorICAgICAgICAgICAg bGltaXQgPSB0cmFuc19vYmouZ2V0X2xpbWl0KCkKKworICAgICAgICAgICAg Y2FuX2VkaXQgPSB0cmFuc19vYmouY2FuX2VkaXQoKQorICAgICAgICAgICAg Y2FuX2ZpbHRlciA9IHRyYW5zX29iai5jYW5fZmlsdGVyKCkKKworICAgICAg ICAgICAgIyBTdG9yZSB0aGUgcHJpbWFyeSBrZXlzIHRvIHRoZSBzZXNzaW9u IG9iamVjdAorICAgICAgICAgICAgc2Vzc2lvbl9vYmpbJ3ByaW1hcnlfa2V5 cyddID0gcHJpbWFyeV9rZXlzCisgICAgICAgICAgICB1cGRhdGVfc2Vzc2lv bl9ncmlkX3RyYW5zYWN0aW9uKHRyYW5zX2lkLCBzZXNzaW9uX29iaikKKwor ICAgICAgICAgICAgIyBFeGVjdXRlIHNxbCBhc3luY2hyb25vdXNseQorICAg ICAgICAgICAgc3RhdHVzLCByZXN1bHQgPSBjb25uLmV4ZWN1dGVfYXN5bmMo c3FsKQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAg ICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0 cihlKSkKKyAgICBlbHNlOgorICAgICAgICBzdGF0dXMgPSBGYWxzZQorICAg ICAgICByZXN1bHQgPSBlcnJvcl9tc2cKKyAgICAgICAgZmlsdGVyX2FwcGxp ZWQgPSBGYWxzZQorICAgICAgICBjYW5fZWRpdCA9IEZhbHNlCisgICAgICAg IGNhbl9maWx0ZXIgPSBGYWxzZQorICAgICAgICBzcWwgPSBOb25lCisKKyAg ICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICBkYXRhPXsK KyAgICAgICAgICAgICdzdGF0dXMnOiBzdGF0dXMsICdyZXN1bHQnOiByZXN1 bHQsCisgICAgICAgICAgICAnZmlsdGVyX2FwcGxpZWQnOiBmaWx0ZXJfYXBw bGllZCwKKyAgICAgICAgICAgICdsaW1pdCc6IGxpbWl0LCAnY2FuX2VkaXQn OiBjYW5fZWRpdCwKKyAgICAgICAgICAgICdjYW5fZmlsdGVyJzogY2FuX2Zp bHRlciwgJ3NxbCc6IHNxbCwKKyAgICAgICAgICAgICdpdGVtc19wZXJfcGFn ZSc6IGJsdWVwcmludC5pdGVtc19wZXJfcGFnZS5nZXQoKQorICAgICAgICAg ICAgfQorICAgICAgICApCisKKworQGJsdWVwcmludC5yb3V0ZSgnL3F1ZXJ5 X3Rvb2wvc3RhcnQvPGludDp0cmFuc19pZD4nLCBtZXRob2RzPVsiUFVUIiwg IlBPU1QiXSkKK0Bsb2dpbl9yZXF1aXJlZAorZGVmIHN0YXJ0X3F1ZXJ5X3Rv b2wodHJhbnNfaWQpOgorICAgICIiIgorICAgIFRoaXMgbWV0aG9kIGlzIHVz ZWQgdG8gZXhlY3V0ZSBxdWVyeSB1c2luZyBhc3luY2hyb25vdXMgY29ubmVj dGlvbi4KKworICAgIEFyZ3M6CisgICAgICAgIHRyYW5zX2lkOiB1bmlxdWUg dHJhbnNhY3Rpb24gaWQKKyAgICAiIiIKKworICAgIGlmIHJlcXVlc3QuZGF0 YToKKyAgICAgICAgc3FsID0ganNvbi5sb2FkcyhyZXF1ZXN0LmRhdGEuZGVj b2RlKCkpCisgICAgZWxzZToKKyAgICAgICAgc3FsID0gcmVxdWVzdC5hcmdz IG9yIHJlcXVlc3QuZm9ybQorCisgICAgZ3JpZF9kYXRhID0gc2Vzc2lvblsn Z3JpZERhdGEnXQorCisgICAgIyBSZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24g aWYgdHJhbnNhY3Rpb24gaWQgbm90IGZvdW5kCisgICAgaWYgc3RyKHRyYW5z X2lkKSBub3QgaW4gZ3JpZF9kYXRhOgorICAgICAgICByZXR1cm4gbWFrZV9q c29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgZGF0YT17CisgICAgICAgICAg ICAgICAgJ3N0YXR1cyc6IEZhbHNlLCAncmVzdWx0JzogZ2V0dGV4dCgnVHJh bnNhY3Rpb24gaWQgbm90IGZvdW5kIGluIHRoZSBzZXNzaW9uLicpLAorICAg ICAgICAgICAgICAgICdjYW5fZWRpdCc6IEZhbHNlLCAnY2FuX2ZpbHRlcic6 IEZhbHNlCisgICAgICAgICAgICB9CisgICAgICAgICkKKworICAgICMgRmV0 Y2ggdGhlIG9iamVjdCBmb3IgdGhlIHNwZWNpZmllZCB0cmFuc2FjdGlvbiBp ZC4KKyAgICAjIFVzZSBwaWNrbGUubG9hZHMgZnVuY3Rpb24gdG8gZ2V0IHRo ZSBjb21tYW5kIG9iamVjdAorICAgIHNlc3Npb25fb2JqID0gZ3JpZF9kYXRh W3N0cih0cmFuc19pZCldCisgICAgdHJhbnNfb2JqID0gcGlja2xlLmxvYWRz KHNlc3Npb25fb2JqWydjb21tYW5kX29iaiddKQorCisgICAgY2FuX2VkaXQg PSBGYWxzZQorICAgIGNhbl9maWx0ZXIgPSBGYWxzZQorCisgICAgaWYgdHJh bnNfb2JqIGlzIG5vdCBOb25lIGFuZCBzZXNzaW9uX29iaiBpcyBub3QgTm9u ZToKKyAgICAgICAgY29ubl9pZCA9IHRyYW5zX29iai5jb25uX2lkCisKKyAg ICAgICAgIyBpZiBjb25uX2lkIGlzIE5vbmUgdGhlbiB3ZSB3aWxsIGhhdmUg dG8gY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24KKyAgICAgICAgaWYgY29ubl9p ZCBpcyBOb25lOgorICAgICAgICAgICAgIyBDcmVhdGUgYXN5bmNocm9ub3Vz IGNvbm5lY3Rpb24gdXNpbmcgcmFuZG9tIGNvbm5lY3Rpb24gaWQuCisgICAg ICAgICAgICBjb25uX2lkID0gc3RyKHJhbmRvbS5yYW5kaW50KDEsIDk5OTk5 OTkpKQorCisgICAgICAgIHRyeToKKyAgICAgICAgICAgIG1hbmFnZXIgPSBn ZXRfZHJpdmVyKFBHX0RFRkFVTFRfRFJJVkVSKS5jb25uZWN0aW9uX21hbmFn ZXIodHJhbnNfb2JqLnNpZCkKKyAgICAgICAgICAgIGNvbm4gPSBtYW5hZ2Vy LmNvbm5lY3Rpb24oZGlkPXRyYW5zX29iai5kaWQsIGNvbm5faWQ9Y29ubl9p ZCkKKyAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAg ICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1zdHIo ZSkpCisKKyAgICAgICAgIyBDb25uZWN0IHRvIHRoZSBTZXJ2ZXIgaWYgbm90 IGNvbm5lY3RlZC4KKyAgICAgICAgaWYgbm90IGNvbm4uY29ubmVjdGVkKCk6 CisgICAgICAgICAgICBzdGF0dXMsIG1zZyA9IGNvbm4uY29ubmVjdCgpCisg ICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAgIHJl dHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9c3RyKG1zZykp CisKKyAgICAgICAgaWYgY29ubi5jb25uZWN0ZWQoKToKKyAgICAgICAgICAg ICMgb24gc3VjY2Vzc2Z1bCBjb25uZWN0aW9uIHNldCB0aGUgY29ubmVjdGlv biBpZCB0byB0aGUKKyAgICAgICAgICAgICMgdHJhbnNhY3Rpb24gb2JqZWN0 CisgICAgICAgICAgICB0cmFuc19vYmouc2V0X2Nvbm5lY3Rpb25faWQoY29u bl9pZCkKKworICAgICAgICAgICAgIyBBcyB3ZSBjaGFuZ2VkIHRoZSB0cmFu c2FjdGlvbiBvYmplY3Qgd2UgbmVlZCB0bworICAgICAgICAgICAgIyByZXN0 b3JlIGl0IGFuZCB1cGRhdGUgdGhlIHNlc3Npb24gdmFyaWFibGUuCisgICAg ICAgICAgICBzZXNzaW9uX29ialsnY29tbWFuZF9vYmonXSA9IHBpY2tsZS5k dW1wcyh0cmFuc19vYmosIC0xKQorICAgICAgICAgICAgdXBkYXRlX3Nlc3Np b25fZ3JpZF90cmFuc2FjdGlvbih0cmFuc19pZCwgc2Vzc2lvbl9vYmopCisK KyAgICAgICAgICAgICMgSWYgYXV0byBjb21taXQgaXMgRmFsc2UgYW5kIHRy YW5zYWN0aW9uIHN0YXR1cyBpcyBJZGxlCisgICAgICAgICAgICAjIHRoZW4g Y2FsbCBpc19iZWdpbl9ub3RfcmVxdWlyZWQoKSBmdW5jdGlvbiB0byBjaGVj ayBCRUdJTgorICAgICAgICAgICAgIyBpcyByZXF1aXJlZCBvciBub3QuCisK KyAgICAgICAgICAgIGlmIG5vdCB0cmFuc19vYmouYXV0b19jb21taXQgXAor ICAgICAgICAgICAgICAgICAgICBhbmQgY29ubi50cmFuc2FjdGlvbl9zdGF0 dXMoKSA9PSBUWF9TVEFUVVNfSURMRSBcCisgICAgICAgICAgICAgICAgICAg IGFuZCBpc19iZWdpbl9yZXF1aXJlZChzcWwpOgorICAgICAgICAgICAgICAg IGNvbm4uZXhlY3V0ZV92b2lkKCJCRUdJTjsiKQorCisgICAgICAgICAgICAj IEV4ZWN1dGUgc3FsIGFzeW5jaHJvbm91c2x5IHdpdGggcGFyYW1zIGlzIE5v bmUKKyAgICAgICAgICAgICMgYW5kIGZvcm1hdHRlZF9lcnJvciBpcyBUcnVl LgorICAgICAgICAgICAgc3RhdHVzLCByZXN1bHQgPSBjb25uLmV4ZWN1dGVf YXN5bmMoc3FsKQorCisgICAgICAgICAgICAjIElmIHRoZSB0cmFuc2FjdGlv biBhYm9ydGVkIGZvciBzb21lIHJlYXNvbiBhbmQKKyAgICAgICAgICAgICMg QXV0byBSb2xsQmFjayBpcyBUcnVlIHRoZW4gaXNzdWUgYSByb2xsYmFjayB0 byBjbGVhbnVwLgorICAgICAgICAgICAgdHJhbnNfc3RhdHVzID0gY29ubi50 cmFuc2FjdGlvbl9zdGF0dXMoKQorICAgICAgICAgICAgaWYgdHJhbnNfc3Rh dHVzID09IFRYX1NUQVRVU19JTkVSUk9SIGFuZCB0cmFuc19vYmouYXV0b19y b2xsYmFjazoKKyAgICAgICAgICAgICAgICBjb25uLmV4ZWN1dGVfdm9pZCgi Uk9MTEJBQ0s7IikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN0YXR1 cyA9IEZhbHNlCisgICAgICAgICAgICByZXN1bHQgPSBnZXR0ZXh0KCdOb3Qg Y29ubmVjdGVkIHRvIHNlcnZlciBPciBjb25uZWN0aW9uIHdpdGggdGhlIHNl cnZlciBoYXMgYmVlbiBjbG9zZWQuJykKKworICAgICAgICBjYW5fZWRpdCA9 IHRyYW5zX29iai5jYW5fZWRpdCgpCisgICAgICAgIGNhbl9maWx0ZXIgPSB0 cmFuc19vYmouY2FuX2ZpbHRlcigpCisKKyAgICBlbHNlOgorICAgICAgICBz dGF0dXMgPSBGYWxzZQorICAgICAgICByZXN1bHQgPSBnZXR0ZXh0KCdFaXRo ZXIgVHJhbnNhY3Rpb24gb2JqZWN0IG9yIFNlc3Npb24gb2JqZWN0IG5vdCBm b3VuZC4nKQorCisgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAg ICAgICAgZGF0YT17CisgICAgICAgICAgICAnc3RhdHVzJzogc3RhdHVzLCAn cmVzdWx0JzogcmVzdWx0LAorICAgICAgICAgICAgJ2Nhbl9lZGl0JzogY2Fu X2VkaXQsICdjYW5fZmlsdGVyJzogY2FuX2ZpbHRlciwKKyAgICAgICAgICAg ICdpdGVtc19wZXJfcGFnZSc6IGJsdWVwcmludC5pdGVtc19wZXJfcGFnZS5n ZXQoKQorICAgICAgICAgICAgfQorICAgICAgICApCisKKworQGJsdWVwcmlu dC5yb3V0ZSgnL3BvbGwvPGludDp0cmFuc19pZD4nLCBtZXRob2RzPVsiR0VU Il0pCitAbG9naW5fcmVxdWlyZWQKK2RlZiBwb2xsKHRyYW5zX2lkKToKKyAg ICAiIiIKKyAgICBUaGlzIG1ldGhvZCBwb2xscyB0aGUgcmVzdWx0IG9mIHRo ZSBhc3luY2hyb25vdXMgcXVlcnkgYW5kIHJldHVybnMgdGhlIHJlc3VsdC4K KworICAgIEFyZ3M6CisgICAgICAgIHRyYW5zX2lkOiB1bmlxdWUgdHJhbnNh Y3Rpb24gaWQKKyAgICAiIiIKKyAgICBjb2xfaW5mbyA9IE5vbmUKKyAgICBw cmltYXJ5X2tleXMgPSBOb25lCisgICAgcm93c19hZmZlY3RlZCA9IDAKKwor ICAgICMgQ2hlY2sgdGhlIHRyYW5zYWN0aW9uIGFuZCBjb25uZWN0aW9uIHN0 YXR1cworICAgIHN0YXR1cywgZXJyb3JfbXNnLCBjb25uLCB0cmFuc19vYmos IHNlc3Npb25fb2JqID0gY2hlY2tfdHJhbnNhY3Rpb25fc3RhdHVzKHRyYW5z X2lkKQorICAgIGlmIHN0YXR1cyBhbmQgY29ubiBpcyBub3QgTm9uZSBhbmQg c2Vzc2lvbl9vYmogaXMgbm90IE5vbmU6CisgICAgICAgIHN0YXR1cywgcmVz dWx0LCBjb2xfaW5mbyA9IGNvbm4ucG9sbCgpCisgICAgICAgIGlmIHN0YXR1 cyA9PSBBU1lOQ19PSzoKKyAgICAgICAgICAgIHN0YXR1cyA9ICdTdWNjZXNz JworICAgICAgICAgICAgaWYgJ3ByaW1hcnlfa2V5cycgaW4gc2Vzc2lvbl9v Ymo6CisgICAgICAgICAgICAgICAgcHJpbWFyeV9rZXlzID0gc2Vzc2lvbl9v YmpbJ3ByaW1hcnlfa2V5cyddCisKKyAgICAgICAgICAgICMgaWYgdHJhbnNh Y3Rpb24gb2JqZWN0IGlzIGluc3RhbmNlIG9mIFF1ZXJ5VG9vbENvbW1hbmQK KyAgICAgICAgICAgICMgYW5kIHRyYW5zYWN0aW9uIGFib3J0ZWQgZm9yIHNv bWUgcmVhc29uIHRoZW4gaXNzdWUgYQorICAgICAgICAgICAgIyByb2xsYmFj ayB0byBjbGVhbnVwCisgICAgICAgICAgICBpZiBpc2luc3RhbmNlKHRyYW5z X29iaiwgUXVlcnlUb29sQ29tbWFuZCk6CisgICAgICAgICAgICAgICAgdHJh bnNfc3RhdHVzID0gY29ubi50cmFuc2FjdGlvbl9zdGF0dXMoKQorICAgICAg ICAgICAgICAgIGlmIHRyYW5zX3N0YXR1cyA9PSBUWF9TVEFUVVNfSU5FUlJP UiBhbmQgdHJhbnNfb2JqLmF1dG9fcm9sbGJhY2s6CisgICAgICAgICAgICAg ICAgICAgIGNvbm4uZXhlY3V0ZV92b2lkKCJST0xMQkFDSzsiKQorICAgICAg ICBlbGlmIHN0YXR1cyA9PSBBU1lOQ19FWEVDVVRJT05fQUJPUlRFRDoKKyAg ICAgICAgICAgIHN0YXR1cyA9ICdDYW5jZWwnCisgICAgICAgIGVsc2U6Cisg ICAgICAgICAgICBzdGF0dXMgPSAnQnVzeScKKyAgICBlbHNlOgorICAgICAg ICBzdGF0dXMgPSAnTm90Q29ubmVjdGVkJworICAgICAgICByZXN1bHQgPSBl cnJvcl9tc2cKKworICAgICMgQ2hlY2sgY29sdW1uIGluZm8gaXMgYXZhaWxh YmxlIG9yIG5vdAorICAgIGlmIGNvbF9pbmZvIGlzIG5vdCBOb25lIGFuZCBs ZW4oY29sX2luZm8pID4gMDoKKyAgICAgICAgY29sdW1ucyA9IGRpY3QoKQor ICAgICAgICByb3dzX2FmZmVjdGVkID0gY29ubi5yb3dzX2FmZmVjdGVkKCkK KworICAgICAgICBmb3IgY29sIGluIGNvbF9pbmZvOgorICAgICAgICAgICAg Y29sX3R5cGUgPSBkaWN0KCkKKyAgICAgICAgICAgIGNvbF90eXBlWyd0eXBl X2NvZGUnXSA9IGNvbFsxXQorICAgICAgICAgICAgY29sX3R5cGVbJ3R5cGVf bmFtZSddID0gTm9uZQorICAgICAgICAgICAgY29sdW1uc1tjb2xbMF1dID0g Y29sX3R5cGUKKworICAgICAgICAjIEFzIHdlIGNoYW5nZWQgdGhlIHRyYW5z YWN0aW9uIG9iamVjdCB3ZSBuZWVkIHRvCisgICAgICAgICMgcmVzdG9yZSBp dCBhbmQgdXBkYXRlIHRoZSBzZXNzaW9uIHZhcmlhYmxlLgorICAgICAgICBz ZXNzaW9uX29ialsnY29sdW1uc19pbmZvJ10gPSBjb2x1bW5zCisgICAgICAg IHVwZGF0ZV9zZXNzaW9uX2dyaWRfdHJhbnNhY3Rpb24odHJhbnNfaWQsIHNl c3Npb25fb2JqKQorICAgIGVsc2U6CisgICAgICAgIGlmIHJlc3VsdCBpcyBO b25lOgorICAgICAgICAgICAgcmVzdWx0ID0gY29ubi5zdGF0dXNfbWVzc2Fn ZSgpCisgICAgICAgICAgICByb3dzX2FmZmVjdGVkID0gY29ubi5yb3dzX2Fm ZmVjdGVkKCkKKworICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoZGF0 YT17J3N0YXR1cyc6IHN0YXR1cywgJ3Jlc3VsdCc6IHJlc3VsdCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xpbmZvJzogY29s X2luZm8sICdwcmltYXJ5X2tleXMnOiBwcmltYXJ5X2tleXMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncm93c19hZmZlY3RlZCc6 IHJvd3NfYWZmZWN0ZWR9KQorCisKK0BibHVlcHJpbnQucm91dGUoJy9mZXRj aC90eXBlcy88aW50OnRyYW5zX2lkPicsIG1ldGhvZHM9WyJHRVQiXSkKK0Bs b2dpbl9yZXF1aXJlZAorZGVmIGZldGNoX3BnX3R5cGVzKHRyYW5zX2lkKToK KyAgICAiIiIKKyAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGZldGNoIHRo ZSBwZyB0eXBlcywgd2hpY2ggaXMgcmVxdWlyZWQKKyAgICB0byBtYXAgdGhl IGRhdGEgdHlwZSBjb21lcyBhcyBhIHJlc3VsdCBvZiB0aGUgcXVlcnkuCisK KyAgICBBcmdzOgorICAgICAgICB0cmFuc19pZDogdW5pcXVlIHRyYW5zYWN0 aW9uIGlkCisgICAgIiIiCisKKyAgICAjIENoZWNrIHRoZSB0cmFuc2FjdGlv biBhbmQgY29ubmVjdGlvbiBzdGF0dXMKKyAgICBzdGF0dXMsIGVycm9yX21z ZywgY29ubiwgdHJhbnNfb2JqLCBzZXNzaW9uX29iaiA9IGNoZWNrX3RyYW5z YWN0aW9uX3N0YXR1cyh0cmFuc19pZCkKKyAgICBpZiBzdGF0dXMgYW5kIGNv bm4gaXMgbm90IE5vbmUgXAorICAgICAgICAgICAgYW5kIHRyYW5zX29iaiBp cyBub3QgTm9uZSBhbmQgc2Vzc2lvbl9vYmogaXMgbm90IE5vbmU6CisKKyAg ICAgICAgIyBMaXN0IG9mIG9pZCBmb3Igd2hpY2ggd2UgbmVlZCB0eXBlIG5h bWUgZnJvbSBwZ190eXBlCisgICAgICAgIG9pZCA9ICcnCisgICAgICAgIGZv ciBjb2wgaW4gc2Vzc2lvbl9vYmpbJ2NvbHVtbnNfaW5mbyddOgorICAgICAg ICAgICAgdHlwZV9vYmogPSBzZXNzaW9uX29ialsnY29sdW1uc19pbmZvJ11b Y29sXQorICAgICAgICAgICAgb2lkICs9IHN0cih0eXBlX29ialsndHlwZV9j b2RlJ10pICsgJywnCisKKyAgICAgICAgIyBSZW1vdmUgZXh0cmEgY29tbWEK KyAgICAgICAgb2lkID0gb2lkWzotMV0KKyAgICAgICAgc3RhdHVzLCByZXMg PSBjb25uLmV4ZWN1dGVfZGljdCgKKyAgICAgICAgICAgICIiIlNFTEVDVCBv aWQsIGZvcm1hdF90eXBlKG9pZCxudWxsKSBhcyB0eXBuYW1lIEZST00gcGdf dHlwZSBXSEVSRSBvaWQgSU4gKHswfSkgT1JERVIgQlkgb2lkOworIiIiLmZv cm1hdChvaWQpKQorCisgICAgICAgIGlmIHN0YXR1czoKKyAgICAgICAgICAg ICMgaXRlcmF0ZSB0aHJvdWdoIHBnX3R5cGVzIGFuZCB1cGRhdGUgdGhlIHR5 cGUgbmFtZSBpbiBzZXNzaW9uIG9iamVjdAorICAgICAgICAgICAgZm9yIHJl Y29yZCBpbiByZXNbJ3Jvd3MnXToKKyAgICAgICAgICAgICAgICBmb3IgY29s IGluIHNlc3Npb25fb2JqWydjb2x1bW5zX2luZm8nXToKKyAgICAgICAgICAg ICAgICAgICAgdHlwZV9vYmogPSBzZXNzaW9uX29ialsnY29sdW1uc19pbmZv J11bY29sXQorICAgICAgICAgICAgICAgICAgICBpZiB0eXBlX29ialsndHlw ZV9jb2RlJ10gPT0gcmVjb3JkWydvaWQnXToKKyAgICAgICAgICAgICAgICAg ICAgICAgIHR5cGVfb2JqWyd0eXBlX25hbWUnXSA9IHJlY29yZFsndHlwbmFt ZSddCisKKyAgICAgICAgICAgIHVwZGF0ZV9zZXNzaW9uX2dyaWRfdHJhbnNh Y3Rpb24odHJhbnNfaWQsIHNlc3Npb25fb2JqKQorICAgIGVsc2U6CisgICAg ICAgIHN0YXR1cyA9IEZhbHNlCisgICAgICAgIHJlcyA9IGVycm9yX21zZwor CisgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZShkYXRhPXsnc3RhdHVz Jzogc3RhdHVzLCAncmVzdWx0JzogcmVzfSkKKworCitAYmx1ZXByaW50LnJv dXRlKCcvc2F2ZS88aW50OnRyYW5zX2lkPicsIG1ldGhvZHM9WyJQVVQiLCAi UE9TVCJdKQorQGxvZ2luX3JlcXVpcmVkCitkZWYgc2F2ZSh0cmFuc19pZCk6 CisgICAgIiIiCisgICAgVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzYXZlIHRo ZSBjaGFuZ2VzIHRvIHRoZSBzZXJ2ZXIKKworICAgIEFyZ3M6CisgICAgICAg IHRyYW5zX2lkOiB1bmlxdWUgdHJhbnNhY3Rpb24gaWQKKyAgICAiIiIKKwor ICAgIGlmIHJlcXVlc3QuZGF0YToKKyAgICAgICAgY2hhbmdlZF9kYXRhID0g anNvbi5sb2FkcyhyZXF1ZXN0LmRhdGEuZGVjb2RlKCkpCisgICAgZWxzZToK KyAgICAgICAgY2hhbmdlZF9kYXRhID0gcmVxdWVzdC5hcmdzIG9yIHJlcXVl c3QuZm9ybQorCisgICAgIyBDaGVjayB0aGUgdHJhbnNhY3Rpb24gYW5kIGNv bm5lY3Rpb24gc3RhdHVzCisgICAgc3RhdHVzLCBlcnJvcl9tc2csIGNvbm4s IHRyYW5zX29iaiwgc2Vzc2lvbl9vYmogPSBjaGVja190cmFuc2FjdGlvbl9z dGF0dXModHJhbnNfaWQpCisgICAgaWYgc3RhdHVzIGFuZCBjb25uIGlzIG5v dCBOb25lIFwKKyAgICAgICAgICAgIGFuZCB0cmFuc19vYmogaXMgbm90IE5v bmUgYW5kIHNlc3Npb25fb2JqIGlzIG5vdCBOb25lOgorCisgICAgICAgICMg SWYgdGhlcmUgaXMgbm8gcHJpbWFyeSBrZXkgZm91bmQgdGhlbiByZXR1cm4g ZnJvbSB0aGUgZnVuY3Rpb24uCisgICAgICAgIGlmIGxlbihzZXNzaW9uX29i alsncHJpbWFyeV9rZXlzJ10pIDw9IDAgb3IgbGVuKGNoYW5nZWRfZGF0YSkg PD0gMDoKKyAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2Uo CisgICAgICAgICAgICAgICAgZGF0YT17J3N0YXR1cyc6IEZhbHNlLAorICAg ICAgICAgICAgICAgICAgICAgICdyZXN1bHQnOiBnZXR0ZXh0KCdObyBwcmlt YXJ5IGtleSBmb3VuZCBmb3IgdGhpcyBvYmplY3QsIHNvIHVuYWJsZSB0byBz YXZlIHJlY29yZHMuJyl9CisgICAgICAgICAgICApCisKKyAgICAgICAgc3Rh dHVzLCByZXMsIHF1ZXJ5X3JlcyA9IHRyYW5zX29iai5zYXZlKGNoYW5nZWRf ZGF0YSkKKyAgICBlbHNlOgorICAgICAgICBzdGF0dXMgPSBGYWxzZQorICAg ICAgICByZXMgPSBlcnJvcl9tc2cKKyAgICAgICAgcXVlcnlfcmVzID0gTm9u ZQorCisgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZShkYXRhPXsnc3Rh dHVzJzogc3RhdHVzLCAncmVzdWx0JzogcmVzLCAncXVlcnlfcmVzdWx0Jzog cXVlcnlfcmVzfSkKKworCitAYmx1ZXByaW50LnJvdXRlKCcvZmlsdGVyL2dl dC88aW50OnRyYW5zX2lkPicsIG1ldGhvZHM9WyJHRVQiXSkKK0Bsb2dpbl9y ZXF1aXJlZAorZGVmIGdldF9maWx0ZXIodHJhbnNfaWQpOgorICAgICIiIgor ICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gZ2V0IHRoZSBleGlzdGluZyBm aWx0ZXIuCisKKyAgICBBcmdzOgorICAgICAgICB0cmFuc19pZDogdW5pcXVl IHRyYW5zYWN0aW9uIGlkCisgICAgIiIiCisKKyAgICAjIENoZWNrIHRoZSB0 cmFuc2FjdGlvbiBhbmQgY29ubmVjdGlvbiBzdGF0dXMKKyAgICBzdGF0dXMs IGVycm9yX21zZywgY29ubiwgdHJhbnNfb2JqLCBzZXNzaW9uX29iaiA9IGNo ZWNrX3RyYW5zYWN0aW9uX3N0YXR1cyh0cmFuc19pZCkKKyAgICBpZiBzdGF0 dXMgYW5kIGNvbm4gaXMgbm90IE5vbmUgXAorICAgICAgICAgICAgYW5kIHRy YW5zX29iaiBpcyBub3QgTm9uZSBhbmQgc2Vzc2lvbl9vYmogaXMgbm90IE5v bmU6CisKKyAgICAgICAgcmVzID0gdHJhbnNfb2JqLmdldF9maWx0ZXIoKQor ICAgIGVsc2U6CisgICAgICAgIHN0YXR1cyA9IEZhbHNlCisgICAgICAgIHJl cyA9IGVycm9yX21zZworCisgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25z ZShkYXRhPXsnc3RhdHVzJzogc3RhdHVzLCAncmVzdWx0JzogcmVzfSkKKwor CitAYmx1ZXByaW50LnJvdXRlKCcvZmlsdGVyL2FwcGx5LzxpbnQ6dHJhbnNf aWQ+JywgbWV0aG9kcz1bIlBVVCIsICJQT1NUIl0pCitAbG9naW5fcmVxdWly ZWQKK2RlZiBhcHBseV9maWx0ZXIodHJhbnNfaWQpOgorICAgICIiIgorICAg IFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYXBwbHkgdGhlIGZpbHRlci4KKwor ICAgIEFyZ3M6CisgICAgICAgIHRyYW5zX2lkOiB1bmlxdWUgdHJhbnNhY3Rp b24gaWQKKyAgICAiIiIKKyAgICBpZiByZXF1ZXN0LmRhdGE6CisgICAgICAg IGZpbHRlcl9zcWwgPSBqc29uLmxvYWRzKHJlcXVlc3QuZGF0YS5kZWNvZGUo KSkKKyAgICBlbHNlOgorICAgICAgICBmaWx0ZXJfc3FsID0gcmVxdWVzdC5h cmdzIG9yIHJlcXVlc3QuZm9ybQorCisgICAgIyBDaGVjayB0aGUgdHJhbnNh Y3Rpb24gYW5kIGNvbm5lY3Rpb24gc3RhdHVzCisgICAgc3RhdHVzLCBlcnJv cl9tc2csIGNvbm4sIHRyYW5zX29iaiwgc2Vzc2lvbl9vYmogPSBjaGVja190 cmFuc2FjdGlvbl9zdGF0dXModHJhbnNfaWQpCisgICAgaWYgc3RhdHVzIGFu ZCBjb25uIGlzIG5vdCBOb25lIFwKKyAgICAgICAgICAgIGFuZCB0cmFuc19v YmogaXMgbm90IE5vbmUgYW5kIHNlc3Npb25fb2JqIGlzIG5vdCBOb25lOgor CisgICAgICAgIHN0YXR1cywgcmVzID0gdHJhbnNfb2JqLnNldF9maWx0ZXIo ZmlsdGVyX3NxbCkKKworICAgICAgICAjIEFzIHdlIGNoYW5nZWQgdGhlIHRy YW5zYWN0aW9uIG9iamVjdCB3ZSBuZWVkIHRvCisgICAgICAgICMgcmVzdG9y ZSBpdCBhbmQgdXBkYXRlIHRoZSBzZXNzaW9uIHZhcmlhYmxlLgorICAgICAg ICBzZXNzaW9uX29ialsnY29tbWFuZF9vYmonXSA9IHBpY2tsZS5kdW1wcyh0 cmFuc19vYmosIC0xKQorICAgICAgICB1cGRhdGVfc2Vzc2lvbl9ncmlkX3Ry YW5zYWN0aW9uKHRyYW5zX2lkLCBzZXNzaW9uX29iaikKKyAgICBlbHNlOgor ICAgICAgICBzdGF0dXMgPSBGYWxzZQorICAgICAgICByZXMgPSBlcnJvcl9t c2cKKworICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0 YXR1cyc6IHN0YXR1cywgJ3Jlc3VsdCc6IHJlc30pCisKKworQGJsdWVwcmlu dC5yb3V0ZSgnL2ZpbHRlci9pbmNsdXNpdmUvPGludDp0cmFuc19pZD4nLCBt ZXRob2RzPVsiUFVUIiwgIlBPU1QiXSkKK0Bsb2dpbl9yZXF1aXJlZAorZGVm IGFwcGVuZF9maWx0ZXJfaW5jbHVzaXZlKHRyYW5zX2lkKToKKyAgICAiIiIK KyAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFwcGVuZCBhbmQgYXBwbHkg dGhlIGZpbHRlci4KKworICAgIEFyZ3M6CisgICAgICAgIHRyYW5zX2lkOiB1 bmlxdWUgdHJhbnNhY3Rpb24gaWQKKyAgICAiIiIKKyAgICBpZiByZXF1ZXN0 LmRhdGE6CisgICAgICAgIGZpbHRlcl9kYXRhID0ganNvbi5sb2FkcyhyZXF1 ZXN0LmRhdGEuZGVjb2RlKCkpCisgICAgZWxzZToKKyAgICAgICAgZmlsdGVy X2RhdGEgPSByZXF1ZXN0LmFyZ3Mgb3IgcmVxdWVzdC5mb3JtCisKKyAgICAj IENoZWNrIHRoZSB0cmFuc2FjdGlvbiBhbmQgY29ubmVjdGlvbiBzdGF0dXMK KyAgICBzdGF0dXMsIGVycm9yX21zZywgY29ubiwgdHJhbnNfb2JqLCBzZXNz aW9uX29iaiA9IGNoZWNrX3RyYW5zYWN0aW9uX3N0YXR1cyh0cmFuc19pZCkK KyAgICBpZiBzdGF0dXMgYW5kIGNvbm4gaXMgbm90IE5vbmUgXAorICAgICAg ICAgICAgYW5kIHRyYW5zX29iaiBpcyBub3QgTm9uZSBhbmQgc2Vzc2lvbl9v YmogaXMgbm90IE5vbmU6CisKKyAgICAgICAgcmVzID0gTm9uZQorICAgICAg ICBmaWx0ZXJfc3FsID0gJycKKyAgICAgICAgZHJpdmVyID0gZ2V0X2RyaXZl cihQR19ERUZBVUxUX0RSSVZFUikKKworICAgICAgICBmb3IgY29sdW1uX25h bWUgaW4gZmlsdGVyX2RhdGE6CisgICAgICAgICAgICBjb2x1bW5fdmFsdWUg PSBmaWx0ZXJfZGF0YVtjb2x1bW5fbmFtZV0KKyAgICAgICAgICAgIGlmIGNv bHVtbl92YWx1ZSBpcyBOb25lOgorICAgICAgICAgICAgICAgIGZpbHRlcl9z cWwgPSBkcml2ZXIucXRJZGVudChjb25uLCBjb2x1bW5fbmFtZSkgKyAnIElT IE5VTEwgJworICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBm aWx0ZXJfc3FsID0gZHJpdmVyLnF0SWRlbnQoY29ubiwgY29sdW1uX25hbWUp ICsgJyA9ICcgKyBkcml2ZXIucXRMaXRlcmFsKGNvbHVtbl92YWx1ZSkKKwor ICAgICAgICB0cmFuc19vYmouYXBwZW5kX2ZpbHRlcihmaWx0ZXJfc3FsKQor CisgICAgICAgICMgQXMgd2UgY2hhbmdlZCB0aGUgdHJhbnNhY3Rpb24gb2Jq ZWN0IHdlIG5lZWQgdG8KKyAgICAgICAgIyByZXN0b3JlIGl0IGFuZCB1cGRh dGUgdGhlIHNlc3Npb24gdmFyaWFibGUuCisgICAgICAgIHNlc3Npb25fb2Jq Wydjb21tYW5kX29iaiddID0gcGlja2xlLmR1bXBzKHRyYW5zX29iaiwgLTEp CisgICAgICAgIHVwZGF0ZV9zZXNzaW9uX2dyaWRfdHJhbnNhY3Rpb24odHJh bnNfaWQsIHNlc3Npb25fb2JqKQorICAgIGVsc2U6CisgICAgICAgIHN0YXR1 cyA9IEZhbHNlCisgICAgICAgIHJlcyA9IGVycm9yX21zZworCisgICAgcmV0 dXJuIG1ha2VfanNvbl9yZXNwb25zZShkYXRhPXsnc3RhdHVzJzogc3RhdHVz LCAncmVzdWx0JzogcmVzfSkKKworCitAYmx1ZXByaW50LnJvdXRlKCcvZmls dGVyL2V4Y2x1c2l2ZS88aW50OnRyYW5zX2lkPicsIG1ldGhvZHM9WyJQVVQi LCAiUE9TVCJdKQorQGxvZ2luX3JlcXVpcmVkCitkZWYgYXBwZW5kX2ZpbHRl cl9leGNsdXNpdmUodHJhbnNfaWQpOgorICAgICIiIgorICAgIFRoaXMgbWV0 aG9kIGlzIHVzZWQgdG8gYXBwZW5kIGFuZCBhcHBseSB0aGUgZmlsdGVyLgor CisgICAgQXJnczoKKyAgICAgICAgdHJhbnNfaWQ6IHVuaXF1ZSB0cmFuc2Fj dGlvbiBpZAorICAgICIiIgorICAgIGlmIHJlcXVlc3QuZGF0YToKKyAgICAg ICAgZmlsdGVyX2RhdGEgPSBqc29uLmxvYWRzKHJlcXVlc3QuZGF0YS5kZWNv ZGUoKSkKKyAgICBlbHNlOgorICAgICAgICBmaWx0ZXJfZGF0YSA9IHJlcXVl c3QuYXJncyBvciByZXF1ZXN0LmZvcm0KKworICAgICMgQ2hlY2sgdGhlIHRy YW5zYWN0aW9uIGFuZCBjb25uZWN0aW9uIHN0YXR1cworICAgIHN0YXR1cywg ZXJyb3JfbXNnLCBjb25uLCB0cmFuc19vYmosIHNlc3Npb25fb2JqID0gY2hl Y2tfdHJhbnNhY3Rpb25fc3RhdHVzKHRyYW5zX2lkKQorICAgIGlmIHN0YXR1 cyBhbmQgY29ubiBpcyBub3QgTm9uZSBcCisgICAgICAgICAgICBhbmQgdHJh bnNfb2JqIGlzIG5vdCBOb25lIGFuZCBzZXNzaW9uX29iaiBpcyBub3QgTm9u ZToKKworICAgICAgICByZXMgPSBOb25lCisgICAgICAgIGZpbHRlcl9zcWwg PSAnJworICAgICAgICBkcml2ZXIgPSBnZXRfZHJpdmVyKFBHX0RFRkFVTFRf RFJJVkVSKQorCisgICAgICAgIGZvciBjb2x1bW5fbmFtZSBpbiBmaWx0ZXJf ZGF0YToKKyAgICAgICAgICAgIGNvbHVtbl92YWx1ZSA9IGZpbHRlcl9kYXRh W2NvbHVtbl9uYW1lXQorICAgICAgICAgICAgaWYgY29sdW1uX3ZhbHVlIGlz IE5vbmU6CisgICAgICAgICAgICAgICAgZmlsdGVyX3NxbCA9IGRyaXZlci5x dElkZW50KGNvbm4sIGNvbHVtbl9uYW1lKSArICcgSVMgTk9UIE5VTEwgJwor ICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBmaWx0ZXJfc3Fs ID0gZHJpdmVyLnF0SWRlbnQoY29ubiwgY29sdW1uX25hbWUpICsgJyBJUyBE SVNUSU5DVCBGUk9NICcgKyBkcml2ZXIucXRMaXRlcmFsKGNvbHVtbl92YWx1 ZSkKKworICAgICAgICAjIENhbGwgdGhlIGFwcGVuZF9maWx0ZXIgbWV0aG9k IG9mIHRyYW5zYWN0aW9uIG9iamVjdAorICAgICAgICB0cmFuc19vYmouYXBw ZW5kX2ZpbHRlcihmaWx0ZXJfc3FsKQorCisgICAgICAgICMgQXMgd2UgY2hh bmdlZCB0aGUgdHJhbnNhY3Rpb24gb2JqZWN0IHdlIG5lZWQgdG8KKyAgICAg ICAgIyByZXN0b3JlIGl0IGFuZCB1cGRhdGUgdGhlIHNlc3Npb24gdmFyaWFi bGUuCisgICAgICAgIHNlc3Npb25fb2JqWydjb21tYW5kX29iaiddID0gcGlj a2xlLmR1bXBzKHRyYW5zX29iaiwgLTEpCisgICAgICAgIHVwZGF0ZV9zZXNz aW9uX2dyaWRfdHJhbnNhY3Rpb24odHJhbnNfaWQsIHNlc3Npb25fb2JqKQor ICAgIGVsc2U6CisgICAgICAgIHN0YXR1cyA9IEZhbHNlCisgICAgICAgIHJl cyA9IGVycm9yX21zZworCisgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25z ZShkYXRhPXsnc3RhdHVzJzogc3RhdHVzLCAncmVzdWx0JzogcmVzfSkKKwor CitAYmx1ZXByaW50LnJvdXRlKCcvZmlsdGVyL3JlbW92ZS88aW50OnRyYW5z X2lkPicsIG1ldGhvZHM9WyJQVVQiLCAiUE9TVCJdKQorQGxvZ2luX3JlcXVp cmVkCitkZWYgcmVtb3ZlX2ZpbHRlcih0cmFuc19pZCk6CisgICAgIiIiCisg ICAgVGhpcyBtZXRob2QgaXMgdXNlZCB0byByZW1vdmUgdGhlIGZpbHRlci4K KworICAgIEFyZ3M6CisgICAgICAgIHRyYW5zX2lkOiB1bmlxdWUgdHJhbnNh Y3Rpb24gaWQKKyAgICAiIiIKKworICAgICMgQ2hlY2sgdGhlIHRyYW5zYWN0 aW9uIGFuZCBjb25uZWN0aW9uIHN0YXR1cworICAgIHN0YXR1cywgZXJyb3Jf bXNnLCBjb25uLCB0cmFuc19vYmosIHNlc3Npb25fb2JqID0gY2hlY2tfdHJh bnNhY3Rpb25fc3RhdHVzKHRyYW5zX2lkKQorICAgIGlmIHN0YXR1cyBhbmQg Y29ubiBpcyBub3QgTm9uZSBcCisgICAgICAgICAgICBhbmQgdHJhbnNfb2Jq IGlzIG5vdCBOb25lIGFuZCBzZXNzaW9uX29iaiBpcyBub3QgTm9uZToKKwor ICAgICAgICByZXMgPSBOb25lCisKKyAgICAgICAgIyBDYWxsIHRoZSByZW1v dmVfZmlsdGVyIG1ldGhvZCBvZiB0cmFuc2FjdGlvbiBvYmplY3QKKyAgICAg ICAgdHJhbnNfb2JqLnJlbW92ZV9maWx0ZXIoKQorCisgICAgICAgICMgQXMg d2UgY2hhbmdlZCB0aGUgdHJhbnNhY3Rpb24gb2JqZWN0IHdlIG5lZWQgdG8K KyAgICAgICAgIyByZXN0b3JlIGl0IGFuZCB1cGRhdGUgdGhlIHNlc3Npb24g dmFyaWFibGUuCisgICAgICAgIHNlc3Npb25fb2JqWydjb21tYW5kX29iaidd ID0gcGlja2xlLmR1bXBzKHRyYW5zX29iaiwgLTEpCisgICAgICAgIHVwZGF0 ZV9zZXNzaW9uX2dyaWRfdHJhbnNhY3Rpb24odHJhbnNfaWQsIHNlc3Npb25f b2JqKQorICAgIGVsc2U6CisgICAgICAgIHN0YXR1cyA9IEZhbHNlCisgICAg ICAgIHJlcyA9IGVycm9yX21zZworCisgICAgcmV0dXJuIG1ha2VfanNvbl9y ZXNwb25zZShkYXRhPXsnc3RhdHVzJzogc3RhdHVzLCAncmVzdWx0JzogcmVz fSkKKworCitAYmx1ZXByaW50LnJvdXRlKCcvbGltaXQvPGludDp0cmFuc19p ZD4nLCBtZXRob2RzPVsiUFVUIiwgIlBPU1QiXSkKK0Bsb2dpbl9yZXF1aXJl ZAorZGVmIHNldF9saW1pdCh0cmFuc19pZCk6CisgICAgIiIiCisgICAgVGhp cyBtZXRob2QgaXMgdXNlZCB0byBzZXQgdGhlIGxpbWl0IGZvciB0aGUgU1FM LgorCisgICAgQXJnczoKKyAgICAgICAgdHJhbnNfaWQ6IHVuaXF1ZSB0cmFu c2FjdGlvbiBpZAorICAgICIiIgorICAgIGlmIHJlcXVlc3QuZGF0YToKKyAg ICAgICAgbGltaXQgPSBqc29uLmxvYWRzKHJlcXVlc3QuZGF0YS5kZWNvZGUo KSkKKyAgICBlbHNlOgorICAgICAgICBsaW1pdCA9IHJlcXVlc3QuYXJncyBv ciByZXF1ZXN0LmZvcm0KKworICAgICMgQ2hlY2sgdGhlIHRyYW5zYWN0aW9u IGFuZCBjb25uZWN0aW9uIHN0YXR1cworICAgIHN0YXR1cywgZXJyb3JfbXNn LCBjb25uLCB0cmFuc19vYmosIHNlc3Npb25fb2JqID0gY2hlY2tfdHJhbnNh Y3Rpb25fc3RhdHVzKHRyYW5zX2lkKQorICAgIGlmIHN0YXR1cyBhbmQgY29u biBpcyBub3QgTm9uZSBcCisgICAgICAgICAgICBhbmQgdHJhbnNfb2JqIGlz IG5vdCBOb25lIGFuZCBzZXNzaW9uX29iaiBpcyBub3QgTm9uZToKKworICAg ICAgICByZXMgPSBOb25lCisKKyAgICAgICAgIyBDYWxsIHRoZSBzZXRfbGlt aXQgbWV0aG9kIG9mIHRyYW5zYWN0aW9uIG9iamVjdAorICAgICAgICB0cmFu c19vYmouc2V0X2xpbWl0KGxpbWl0KQorCisgICAgICAgICMgQXMgd2UgY2hh bmdlZCB0aGUgdHJhbnNhY3Rpb24gb2JqZWN0IHdlIG5lZWQgdG8KKyAgICAg ICAgIyByZXN0b3JlIGl0IGFuZCB1cGRhdGUgdGhlIHNlc3Npb24gdmFyaWFi bGUuCisgICAgICAgIHNlc3Npb25fb2JqWydjb21tYW5kX29iaiddID0gcGlj a2xlLmR1bXBzKHRyYW5zX29iaiwgLTEpCisgICAgICAgIHVwZGF0ZV9zZXNz aW9uX2dyaWRfdHJhbnNhY3Rpb24odHJhbnNfaWQsIHNlc3Npb25fb2JqKQor ICAgIGVsc2U6CisgICAgICAgIHN0YXR1cyA9IEZhbHNlCisgICAgICAgIHJl cyA9IGVycm9yX21zZworCisgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25z ZShkYXRhPXsnc3RhdHVzJzogc3RhdHVzLCAncmVzdWx0JzogcmVzfSkKKwor CitAYmx1ZXByaW50LnJvdXRlKCcvY2FuY2VsLzxpbnQ6dHJhbnNfaWQ+Jywg bWV0aG9kcz1bIlBVVCIsICJQT1NUIl0pCitAbG9naW5fcmVxdWlyZWQKK2Rl ZiBjYW5jZWxfdHJhbnNhY3Rpb24odHJhbnNfaWQpOgorICAgICIiIgorICAg IFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY2FuY2VsIHRoZSBydW5uaW5nIHRy YW5zYWN0aW9uCisKKyAgICBBcmdzOgorICAgICAgICB0cmFuc19pZDogdW5p cXVlIHRyYW5zYWN0aW9uIGlkCisgICAgIiIiCisKKyAgICBncmlkX2RhdGEg PSBzZXNzaW9uWydncmlkRGF0YSddCisKKyAgICAjIFJldHVybiBmcm9tIHRo ZSBmdW5jdGlvbiBpZiB0cmFuc2FjdGlvbiBpZCBub3QgZm91bmQKKyAgICBp ZiBzdHIodHJhbnNfaWQpIG5vdCBpbiBncmlkX2RhdGE6CisgICAgICAgIHJl dHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAgICAgICBkYXRhPXsK KyAgICAgICAgICAgICAgICAnc3RhdHVzJzogRmFsc2UsICdyZXN1bHQnOiBn ZXR0ZXh0KCdUcmFuc2FjdGlvbiBpZCBub3QgZm91bmQgaW4gdGhlIHNlc3Np b24uJykKKyAgICAgICAgICAgIH0KKyAgICAgICAgKQorCisgICAgIyBGZXRj aCB0aGUgb2JqZWN0IGZvciB0aGUgc3BlY2lmaWVkIHRyYW5zYWN0aW9uIGlk LgorICAgICMgVXNlIHBpY2tsZS5sb2FkcyBmdW5jdGlvbiB0byBnZXQgdGhl IGNvbW1hbmQgb2JqZWN0CisgICAgc2Vzc2lvbl9vYmogPSBncmlkX2RhdGFb c3RyKHRyYW5zX2lkKV0KKyAgICB0cmFuc19vYmogPSBwaWNrbGUubG9hZHMo c2Vzc2lvbl9vYmpbJ2NvbW1hbmRfb2JqJ10pCisKKyAgICBpZiB0cmFuc19v YmogaXMgbm90IE5vbmUgYW5kIHNlc3Npb25fb2JqIGlzIG5vdCBOb25lOgor CisgICAgICAgICMgRmV0Y2ggdGhlIG1haW4gY29ubmVjdGlvbiBvYmplY3Qg Zm9yIHRoZSBkYXRhYmFzZS4KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAg bWFuYWdlciA9IGdldF9kcml2ZXIoUEdfREVGQVVMVF9EUklWRVIpLmNvbm5l Y3Rpb25fbWFuYWdlcih0cmFuc19vYmouc2lkKQorICAgICAgICAgICAgY29u biA9IG1hbmFnZXIuY29ubmVjdGlvbihkaWQ9dHJhbnNfb2JqLmRpZCkKKyAg ICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICAgICAgcmV0 dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1zdHIoZSkpCisK KyAgICAgICAgZGVsZXRlX2Nvbm5lY3Rpb24gPSBGYWxzZQorCisgICAgICAg ICMgQ29ubmVjdCB0byB0aGUgU2VydmVyIGlmIG5vdCBjb25uZWN0ZWQuCisg ICAgICAgIGlmIG5vdCBjb25uLmNvbm5lY3RlZCgpOgorICAgICAgICAgICAg c3RhdHVzLCBtc2cgPSBjb25uLmNvbm5lY3QoKQorICAgICAgICAgICAgaWYg bm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxf c2VydmVyX2Vycm9yKGVycm9ybXNnPXN0cihtc2cpKQorICAgICAgICAgICAg ZGVsZXRlX2Nvbm5lY3Rpb24gPSBUcnVlCisKKyAgICAgICAgaWYgY29ubi5j b25uZWN0ZWQoKToKKyAgICAgICAgICAgICMgb24gc3VjY2Vzc2Z1bCBjb25u ZWN0aW9uIGNhbmNlbCB0aGUgcnVubmluZyB0cmFuc2FjdGlvbgorICAgICAg ICAgICAgc3RhdHVzLCByZXN1bHQgPSBjb25uLmNhbmNlbF90cmFuc2FjdGlv bih0cmFuc19vYmouY29ubl9pZCwgdHJhbnNfb2JqLmRpZCkKKworICAgICAg ICAgICAgIyBEZWxldGUgY29ubmVjdGlvbiBpZiB3ZSBoYXZlIGNyZWF0ZWQg aXQgdG8KKyAgICAgICAgICAgICMgY2FuY2VsIHRoZSB0cmFuc2FjdGlvbgor ICAgICAgICAgICAgaWYgZGVsZXRlX2Nvbm5lY3Rpb246CisgICAgICAgICAg ICAgICAgbWFuYWdlci5yZWxlYXNlKGRpZD10cmFuc19vYmouZGlkKQorICAg ICAgICBlbHNlOgorICAgICAgICAgICAgc3RhdHVzID0gRmFsc2UKKyAgICAg ICAgICAgIHJlc3VsdCA9IGdldHRleHQoJ05vdCBjb25uZWN0ZWQgdG8gc2Vy dmVyIE9yIGNvbm5lY3Rpb24gd2l0aCB0aGUgc2VydmVyIGhhcyBiZWVuIGNs b3NlZC4nKQorICAgIGVsc2U6CisgICAgICAgIHN0YXR1cyA9IEZhbHNlCisg ICAgICAgIHJlc3VsdCA9IGdldHRleHQoJ0VpdGhlciBUcmFuc2FjdGlvbiBv YmplY3Qgb3IgU2Vzc2lvbiBvYmplY3Qgbm90IGZvdW5kLicpCisKKyAgICBy ZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICBkYXRhPXsKKyAg ICAgICAgICAgICdzdGF0dXMnOiBzdGF0dXMsICdyZXN1bHQnOiByZXN1bHQK KyAgICAgICAgICAgIH0KKyAgICAgICAgKQorCisKK0BibHVlcHJpbnQucm91 dGUoJy9vYmplY3QvZ2V0LzxpbnQ6dHJhbnNfaWQ+JywgbWV0aG9kcz1bIkdF VCJdKQorQGxvZ2luX3JlcXVpcmVkCitkZWYgZ2V0X29iamVjdF9uYW1lKHRy YW5zX2lkKToKKyAgICAiIiIKKyAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRv IGdldCB0aGUgb2JqZWN0IG5hbWUKKworICAgIEFyZ3M6CisgICAgICAgIHRy YW5zX2lkOiB1bmlxdWUgdHJhbnNhY3Rpb24gaWQKKyAgICAiIiIKKworICAg ICMgQ2hlY2sgdGhlIHRyYW5zYWN0aW9uIGFuZCBjb25uZWN0aW9uIHN0YXR1 cworICAgIHN0YXR1cywgZXJyb3JfbXNnLCBjb25uLCB0cmFuc19vYmosIHNl c3Npb25fb2JqID0gY2hlY2tfdHJhbnNhY3Rpb25fc3RhdHVzKHRyYW5zX2lk KQorICAgIGlmIHN0YXR1cyBhbmQgY29ubiBpcyBub3QgTm9uZSBcCisgICAg ICAgICAgICBhbmQgdHJhbnNfb2JqIGlzIG5vdCBOb25lIGFuZCBzZXNzaW9u X29iaiBpcyBub3QgTm9uZToKKworICAgICAgICByZXMgPSB0cmFuc19vYmou b2JqZWN0X25hbWUKKyAgICBlbHNlOgorICAgICAgICBzdGF0dXMgPSBGYWxz ZQorICAgICAgICByZXMgPSBlcnJvcl9tc2cKKworICAgIHJldHVybiBtYWtl X2pzb25fcmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6IHN0YXR1cywgJ3Jlc3Vs dCc6IHJlc30pCisKKworQGJsdWVwcmludC5yb3V0ZSgnL2F1dG9fY29tbWl0 LzxpbnQ6dHJhbnNfaWQ+JywgbWV0aG9kcz1bIlBVVCIsICJQT1NUIl0pCitA bG9naW5fcmVxdWlyZWQKK2RlZiBzZXRfYXV0b19jb21taXQodHJhbnNfaWQp OgorICAgICIiIgorICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2V0IHRo ZSB2YWx1ZSBmb3IgYXV0byBjb21taXQgLgorCisgICAgQXJnczoKKyAgICAg ICAgdHJhbnNfaWQ6IHVuaXF1ZSB0cmFuc2FjdGlvbiBpZAorICAgICIiIgor ICAgIGlmIHJlcXVlc3QuZGF0YToKKyAgICAgICAgYXV0b19jb21taXQgPSBq c29uLmxvYWRzKHJlcXVlc3QuZGF0YS5kZWNvZGUoKSkKKyAgICBlbHNlOgor ICAgICAgICBhdXRvX2NvbW1pdCA9IHJlcXVlc3QuYXJncyBvciByZXF1ZXN0 LmZvcm0KKworICAgICMgQ2hlY2sgdGhlIHRyYW5zYWN0aW9uIGFuZCBjb25u ZWN0aW9uIHN0YXR1cworICAgIHN0YXR1cywgZXJyb3JfbXNnLCBjb25uLCB0 cmFuc19vYmosIHNlc3Npb25fb2JqID0gY2hlY2tfdHJhbnNhY3Rpb25fc3Rh dHVzKHRyYW5zX2lkKQorICAgIGlmIHN0YXR1cyBhbmQgY29ubiBpcyBub3Qg Tm9uZSBcCisgICAgICAgICAgICBhbmQgdHJhbnNfb2JqIGlzIG5vdCBOb25l IGFuZCBzZXNzaW9uX29iaiBpcyBub3QgTm9uZToKKworICAgICAgICByZXMg PSBOb25lCisKKyAgICAgICAgIyBDYWxsIHRoZSBzZXRfYXV0b19jb21taXQg bWV0aG9kIG9mIHRyYW5zYWN0aW9uIG9iamVjdAorICAgICAgICB0cmFuc19v Ymouc2V0X2F1dG9fY29tbWl0KGF1dG9fY29tbWl0KQorCisgICAgICAgICMg QXMgd2UgY2hhbmdlZCB0aGUgdHJhbnNhY3Rpb24gb2JqZWN0IHdlIG5lZWQg dG8KKyAgICAgICAgIyByZXN0b3JlIGl0IGFuZCB1cGRhdGUgdGhlIHNlc3Np b24gdmFyaWFibGUuCisgICAgICAgIHNlc3Npb25fb2JqWydjb21tYW5kX29i aiddID0gcGlja2xlLmR1bXBzKHRyYW5zX29iaiwgLTEpCisgICAgICAgIHVw ZGF0ZV9zZXNzaW9uX2dyaWRfdHJhbnNhY3Rpb24odHJhbnNfaWQsIHNlc3Np b25fb2JqKQorICAgIGVsc2U6CisgICAgICAgIHN0YXR1cyA9IEZhbHNlCisg ICAgICAgIHJlcyA9IGVycm9yX21zZworCisgICAgcmV0dXJuIG1ha2VfanNv bl9yZXNwb25zZShkYXRhPXsnc3RhdHVzJzogc3RhdHVzLCAncmVzdWx0Jzog cmVzfSkKKworCitAYmx1ZXByaW50LnJvdXRlKCcvYXV0b19yb2xsYmFjay88 aW50OnRyYW5zX2lkPicsIG1ldGhvZHM9WyJQVVQiLCAiUE9TVCJdKQorQGxv Z2luX3JlcXVpcmVkCitkZWYgc2V0X2F1dG9fcm9sbGJhY2sodHJhbnNfaWQp OgorICAgICIiIgorICAgIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2V0IHRo ZSB2YWx1ZSBmb3IgYXV0byBjb21taXQgLgorCisgICAgQXJnczoKKyAgICAg ICAgdHJhbnNfaWQ6IHVuaXF1ZSB0cmFuc2FjdGlvbiBpZAorICAgICIiIgor ICAgIGlmIHJlcXVlc3QuZGF0YToKKyAgICAgICAgYXV0b19yb2xsYmFjayA9 IGpzb24ubG9hZHMocmVxdWVzdC5kYXRhLmRlY29kZSgpKQorICAgIGVsc2U6 CisgICAgICAgIGF1dG9fcm9sbGJhY2sgPSByZXF1ZXN0LmFyZ3Mgb3IgcmVx dWVzdC5mb3JtCisKKyAgICAjIENoZWNrIHRoZSB0cmFuc2FjdGlvbiBhbmQg Y29ubmVjdGlvbiBzdGF0dXMKKyAgICBzdGF0dXMsIGVycm9yX21zZywgY29u biwgdHJhbnNfb2JqLCBzZXNzaW9uX29iaiA9IGNoZWNrX3RyYW5zYWN0aW9u X3N0YXR1cyh0cmFuc19pZCkKKyAgICBpZiBzdGF0dXMgYW5kIGNvbm4gaXMg bm90IE5vbmUgXAorICAgICAgICAgICAgYW5kIHRyYW5zX29iaiBpcyBub3Qg Tm9uZSBhbmQgc2Vzc2lvbl9vYmogaXMgbm90IE5vbmU6CisKKyAgICAgICAg cmVzID0gTm9uZQorCisgICAgICAgICMgQ2FsbCB0aGUgc2V0X2F1dG9fcm9s bGJhY2sgbWV0aG9kIG9mIHRyYW5zYWN0aW9uIG9iamVjdAorICAgICAgICB0 cmFuc19vYmouc2V0X2F1dG9fcm9sbGJhY2soYXV0b19yb2xsYmFjaykKKwor ICAgICAgICAjIEFzIHdlIGNoYW5nZWQgdGhlIHRyYW5zYWN0aW9uIG9iamVj dCB3ZSBuZWVkIHRvCisgICAgICAgICMgcmVzdG9yZSBpdCBhbmQgdXBkYXRl IHRoZSBzZXNzaW9uIHZhcmlhYmxlLgorICAgICAgICBzZXNzaW9uX29ialsn Y29tbWFuZF9vYmonXSA9IHBpY2tsZS5kdW1wcyh0cmFuc19vYmosIC0xKQor ICAgICAgICB1cGRhdGVfc2Vzc2lvbl9ncmlkX3RyYW5zYWN0aW9uKHRyYW5z X2lkLCBzZXNzaW9uX29iaikKKyAgICBlbHNlOgorICAgICAgICBzdGF0dXMg PSBGYWxzZQorICAgICAgICByZXMgPSBlcnJvcl9tc2cKKworICAgIHJldHVy biBtYWtlX2pzb25fcmVzcG9uc2UoZGF0YT17J3N0YXR1cyc6IHN0YXR1cywg J3Jlc3VsdCc6IHJlc30pCisKKworQGJsdWVwcmludC5yb3V0ZSgiL3NxbGVk aXRvci5qcyIpCitAbG9naW5fcmVxdWlyZWQKK2RlZiBzY3JpcHQoKToKKyAg ICAiIiJyZW5kZXIgdGhlIHJlcXVpcmVkIGphdmFzY3JpcHQiIiIKKyAgICBy ZXR1cm4gUmVzcG9uc2UocmVzcG9uc2U9cmVuZGVyX3RlbXBsYXRlKCJzcWxl ZGl0b3IvanMvc3FsZWRpdG9yLmpzIiwgXz1nZXR0ZXh0KSwKKyAgICAgICAg ICAgICAgICAgICAgc3RhdHVzPTIwMCwKKyAgICAgICAgICAgICAgICAgICAg bWltZXR5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiKQorCisKK2RlZiBp c19iZWdpbl9yZXF1aXJlZChxdWVyeSk6CisgICAgd29yZF9sZW4gPSAwCisg ICAgcXVlcnkgPSBxdWVyeS5zdHJpcCgpCisgICAgcXVlcnlfbGVuID0gbGVu KHF1ZXJ5KQorCisgICAgIyBDaGVjayB3b3JkIGxlbmd0aCAoc2luY2UgImJl Z2lueCIgaXMgbm90ICJiZWdpbiIpLgorICAgIHdoaWxlICh3b3JkX2xlbiA8 IHF1ZXJ5X2xlbikgYW5kIHF1ZXJ5W3dvcmRfbGVuXS5pc2FscGhhKCk6Cisg ICAgICAgIHdvcmRfbGVuICs9IDEKKworICAgICMgIFRyYW5zYWN0aW9uIGNv bnRyb2wgY29tbWFuZHMuICBUaGVzZSBzaG91bGQgaW5jbHVkZSBldmVyeSBr ZXl3b3JkIHRoYXQKKyAgICAjICBnaXZlcyByaXNlIHRvIGEgVHJhbnNhY3Rp b25TdG10IGluIHRoZSBiYWNrZW5kIGdyYW1tYXIsIGV4Y2VwdCBmb3IgdGhl CisgICAgIyAgc2F2ZXBvaW50LXJlbGF0ZWQgY29tbWFuZHMuCisgICAgIwor ICAgICMgIChXZSBhc3N1bWUgdGhhdCBTVEFSVCBtdXN0IGJlIFNUQVJUIFRS QU5TQUNUSU9OLCBzaW5jZSB0aGVyZSBpcworICAgICMgIHByZXNlbnRseSBu byBvdGhlciAiU1RBUlQgZm9vIiBjb21tYW5kLikKKworICAgIGtleXdvcmQg PSBxdWVyeVswOndvcmRfbGVuXQorCisgICAgaWYgd29yZF9sZW4gPT0gNSBh bmQga2V5d29yZC5sb3dlcigpID09ICJhYm9ydCI6CisgICAgICAgIHJldHVy biBGYWxzZQorICAgIGlmIHdvcmRfbGVuID09IDUgYW5kIGtleXdvcmQubG93 ZXIoKSA9PSAiYmVnaW4iOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBp ZiB3b3JkX2xlbiA9PSA1IGFuZCBrZXl3b3JkLmxvd2VyKCkgPT0gInN0YXJ0 IjoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgaWYgd29yZF9sZW4gPT0g NiBhbmQga2V5d29yZC5sb3dlcigpID09ICJjb21taXQiOgorICAgICAgICBy ZXR1cm4gRmFsc2UKKyAgICBpZiB3b3JkX2xlbiA9PSAzIGFuZCBrZXl3b3Jk Lmxvd2VyKCkgPT0gImVuZCI6CisgICAgICAgIHJldHVybiBGYWxzZQorICAg IGlmIHdvcmRfbGVuID09IDggYW5kIGtleXdvcmQubG93ZXIoKSA9PSAicm9s bGJhY2siOgorICAgICAgICByZXR1cm4gRmFsc2UKKyAgICBpZiB3b3JkX2xl biA9PSA3IGFuZCBrZXl3b3JkLmxvd2VyKCkgPT0gInByZXBhcmUiOgorICAg ICAgICAjIFBSRVBBUkUgVFJBTlNBQ1RJT04gaXMgYSBUQyBjb21tYW5kLCBQ UkVQQVJFIGZvbyBpcyBub3QKKyAgICAgICAgcXVlcnkgPSBxdWVyeVt3b3Jk X2xlbjpxdWVyeV9sZW5dCisgICAgICAgIHF1ZXJ5ID0gcXVlcnkuc3RyaXAo KQorICAgICAgICBxdWVyeV9sZW4gPSBsZW4ocXVlcnkpCisgICAgICAgIHdv cmRfbGVuID0gMAorCisgICAgICAgIHdoaWxlICh3b3JkX2xlbiA8IHF1ZXJ5 X2xlbikgYW5kIHF1ZXJ5W3dvcmRfbGVuXS5pc2FscGhhKCk6CisgICAgICAg ICAgICB3b3JkX2xlbiArPSAxCisKKyAgICAgICAga2V5d29yZCA9IHF1ZXJ5 WzA6d29yZF9sZW5dCisgICAgICAgIGlmIHdvcmRfbGVuID09IDExIGFuZCBr ZXl3b3JkLmxvd2VyKCkgPT0gInRyYW5zYWN0aW9uIjoKKyAgICAgICAgICAg IHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgIyBD b21tYW5kcyBub3QgYWxsb3dlZCB3aXRoaW4gdHJhbnNhY3Rpb25zLiBUaGUg c3RhdGVtZW50cyBjaGVja2VkIGZvcgorICAgICMgaGVyZSBzaG91bGQgYmUg ZXhhY3RseSB0aG9zZSB0aGF0IGNhbGwgUHJldmVudFRyYW5zYWN0aW9uQ2hh aW4oKSBpbiB0aGUKKyAgICAjIGJhY2tlbmQuCisgICAgaWYgd29yZF9sZW4g PT0gNiBhbmQga2V5d29yZC5sb3dlcigpID09ICJ2YWN1dW0iOgorICAgICAg ICByZXR1cm4gRmFsc2UKKworICAgIGlmIHdvcmRfbGVuID09IDcgYW5kIGtl eXdvcmQubG93ZXIoKSA9PSAiY2x1c3RlciI6CisgICAgICAgICMgQ0xVU1RF UiB3aXRoIGFueSBhcmd1bWVudHMgaXMgYWxsb3dlZCBpbiB0cmFuc2FjdGlv bnMKKyAgICAgICAgcXVlcnkgPSBxdWVyeVt3b3JkX2xlbjpxdWVyeV9sZW5d CisgICAgICAgIHF1ZXJ5ID0gcXVlcnkuc3RyaXAoKQorCisgICAgICAgIGlm IHF1ZXJ5WzBdLmlzYWxwaGEoKToKKyAgICAgICAgICAgIHJldHVybiBUcnVl ICAjIGhhcyBhZGRpdGlvbmFsIHdvcmRzCisgICAgICAgIHJldHVybiBGYWxz ZSAgICAgIyBpdCdzIENMVVNURVIgd2l0aG91dCBhcmd1bWVudHMKKworICAg IGlmIHdvcmRfbGVuID09IDYgYW5kIGtleXdvcmQubG93ZXIoKSA9PSAiY3Jl YXRlIjoKKyAgICAgICAgcXVlcnkgPSBxdWVyeVt3b3JkX2xlbjpxdWVyeV9s ZW5dCisgICAgICAgIHF1ZXJ5ID0gcXVlcnkuc3RyaXAoKQorICAgICAgICBx dWVyeV9sZW4gPSBsZW4ocXVlcnkpCisgICAgICAgIHdvcmRfbGVuID0gMAor CisgICAgICAgIHdoaWxlICh3b3JkX2xlbiA8IHF1ZXJ5X2xlbikgYW5kIHF1 ZXJ5W3dvcmRfbGVuXS5pc2FscGhhKCk6CisgICAgICAgICAgICB3b3JkX2xl biArPSAxCisKKyAgICAgICAga2V5d29yZCA9IHF1ZXJ5WzA6d29yZF9sZW5d CisgICAgICAgIGlmIHdvcmRfbGVuID09IDggYW5kIGtleXdvcmQubG93ZXIo KSA9PSAiZGF0YWJhc2UiOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisg ICAgICAgIGlmIHdvcmRfbGVuID09IDEwIGFuZCBrZXl3b3JkLmxvd2VyKCkg PT0gInRhYmxlc3BhY2UiOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisK KyAgICAgICAgIyBDUkVBVEUgW1VOSVFVRV0gSU5ERVggQ09OQ1VSUkVOVExZ IGlzbid0IGFsbG93ZWQgaW4geGFjdHMKKyAgICAgICAgaWYgd29yZF9sZW4g PT0gNyBhbmQga2V5d29yZC5sb3dlcigpID09ICJjbHVzdGVyIjoKKyAgICAg ICAgICAgIHF1ZXJ5ID0gcXVlcnlbd29yZF9sZW46cXVlcnlfbGVuXQorICAg ICAgICAgICAgcXVlcnkgPSBxdWVyeS5zdHJpcCgpCisgICAgICAgICAgICBx dWVyeV9sZW4gPSBsZW4ocXVlcnkpCisgICAgICAgICAgICB3b3JkX2xlbiA9 IDAKKworICAgICAgICAgICAgd2hpbGUgKHdvcmRfbGVuIDwgcXVlcnlfbGVu KSBhbmQgcXVlcnlbd29yZF9sZW5dLmlzYWxwaGEoKToKKyAgICAgICAgICAg ICAgICB3b3JkX2xlbiArPSAxCisKKyAgICAgICAgICAgIGtleXdvcmQgPSBx dWVyeVswOndvcmRfbGVuXQorCisgICAgICAgIGlmIHdvcmRfbGVuID09IDUg YW5kIGtleXdvcmQubG93ZXIoKSA9PSAiaW5kZXgiOgorICAgICAgICAgICAg cXVlcnkgPSBxdWVyeVt3b3JkX2xlbjpxdWVyeV9sZW5dCisgICAgICAgICAg ICBxdWVyeSA9IHF1ZXJ5LnN0cmlwKCkKKyAgICAgICAgICAgIHF1ZXJ5X2xl biA9IGxlbihxdWVyeSkKKyAgICAgICAgICAgIHdvcmRfbGVuID0gMAorCisg ICAgICAgICAgICB3aGlsZSAod29yZF9sZW4gPCBxdWVyeV9sZW4pIGFuZCBx dWVyeVt3b3JkX2xlbl0uaXNhbHBoYSgpOgorICAgICAgICAgICAgICAgIHdv cmRfbGVuICs9IDEKKworICAgICAgICAgICAga2V5d29yZCA9IHF1ZXJ5WzA6 d29yZF9sZW5dCisgICAgICAgICAgICBpZiB3b3JkX2xlbiA9PSAxMiBhbmQg a2V5d29yZC5sb3dlcigpID09ICJjb25jdXJyZW50bHkiOgorICAgICAgICAg ICAgICAgIHJldHVybiBGYWxzZQorICAgICAgICByZXR1cm4gVHJ1ZQorCisg ICAgaWYgd29yZF9sZW4gPT0gNSBhbmQga2V5d29yZC5sb3dlcigpID09ICJh bHRlciI6CisgICAgICAgIHF1ZXJ5ID0gcXVlcnlbd29yZF9sZW46cXVlcnlf bGVuXQorICAgICAgICBxdWVyeSA9IHF1ZXJ5LnN0cmlwKCkKKyAgICAgICAg cXVlcnlfbGVuID0gbGVuKHF1ZXJ5KQorICAgICAgICB3b3JkX2xlbiA9IDAK KworICAgICAgICB3aGlsZSAod29yZF9sZW4gPCBxdWVyeV9sZW4pIGFuZCBx dWVyeVt3b3JkX2xlbl0uaXNhbHBoYSgpOgorICAgICAgICAgICAgd29yZF9s ZW4gKz0gMQorCisgICAgICAgIGtleXdvcmQgPSBxdWVyeVswOndvcmRfbGVu XQorCisgICAgICAgICMgQUxURVIgU1lTVEVNIGlzbid0IGFsbG93ZWQgaW4g eGFjdHMKKyAgICAgICAgaWYgd29yZF9sZW4gPT0gNiBhbmQga2V5d29yZC5s b3dlcigpID09ICJzeXN0ZW0iOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNl CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICAjIE5vdGU6IHRoZXNlIHRl c3RzIHdpbGwgbWF0Y2ggRFJPUCBTWVNURU0gYW5kIFJFSU5ERVggVEFCTEVT UEFDRSwgd2hpY2gKKyAgICAjIGFyZW4ndCByZWFsbHkgdmFsaWQgY29tbWFu ZHMgc28gd2UgZG9uJ3QgY2FyZSBtdWNoLiBUaGUgb3RoZXIgZm91cgorICAg ICMgcG9zc2libGUgbWF0Y2hlcyBhcmUgY29ycmVjdC4KKyAgICBpZiB3b3Jk X2xlbiA9PSA0IGFuZCBrZXl3b3JkLmxvd2VyKCkgPT0gImRyb3AiIFwKKyAg ICAgICAgICAgIG9yIHdvcmRfbGVuID09IDcgYW5kIGtleXdvcmQubG93ZXIo KSA9PSAicmVpbmRleCI6CisgICAgICAgIHF1ZXJ5ID0gcXVlcnlbd29yZF9s ZW46cXVlcnlfbGVuXQorICAgICAgICBxdWVyeSA9IHF1ZXJ5LnN0cmlwKCkK KyAgICAgICAgcXVlcnlfbGVuID0gbGVuKHF1ZXJ5KQorICAgICAgICB3b3Jk X2xlbiA9IDAKKworICAgICAgICB3aGlsZSAod29yZF9sZW4gPCBxdWVyeV9s ZW4pIGFuZCBxdWVyeVt3b3JkX2xlbl0uaXNhbHBoYSgpOgorICAgICAgICAg ICAgd29yZF9sZW4gKz0gMQorCisgICAgICAgIGtleXdvcmQgPSBxdWVyeVsw OndvcmRfbGVuXQorICAgICAgICBpZiB3b3JkX2xlbiA9PSA4IGFuZCBrZXl3 b3JkLmxvd2VyKCkgPT0gImRhdGFiYXNlIjoKKyAgICAgICAgICAgIHJldHVy biBGYWxzZQorICAgICAgICBpZiB3b3JkX2xlbiA9PSA2IGFuZCBrZXl3b3Jk Lmxvd2VyKCkgPT0gInN5c3RlbSI6CisgICAgICAgICAgICByZXR1cm4gRmFs c2UKKyAgICAgICAgaWYgd29yZF9sZW4gPT0gMTAgYW5kIGtleXdvcmQubG93 ZXIoKSA9PSAidGFibGVzcGFjZSI6CisgICAgICAgICAgICByZXR1cm4gRmFs c2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgICMgRElTQ0FSRCBBTEwg aXNuJ3QgYWxsb3dlZCBpbiB4YWN0cywgYnV0IG90aGVyIHZhcmlhbnRzIGFy ZSBhbGxvd2VkLgorICAgIGlmIHdvcmRfbGVuID09IDcgYW5kIGtleXdvcmQu bG93ZXIoKSA9PSAiZGlzY2FyZCI6CisgICAgICAgIHF1ZXJ5ID0gcXVlcnlb d29yZF9sZW46cXVlcnlfbGVuXQorICAgICAgICBxdWVyeSA9IHF1ZXJ5LnN0 cmlwKCkKKyAgICAgICAgcXVlcnlfbGVuID0gbGVuKHF1ZXJ5KQorICAgICAg ICB3b3JkX2xlbiA9IDAKKworICAgICAgICB3aGlsZSAod29yZF9sZW4gPCBx dWVyeV9sZW4pIGFuZCBxdWVyeVt3b3JkX2xlbl0uaXNhbHBoYSgpOgorICAg ICAgICAgICAgd29yZF9sZW4gKz0gMQorCisgICAgICAgIGtleXdvcmQgPSBx dWVyeVswOndvcmRfbGVuXQorICAgICAgICBpZiB3b3JkX2xlbiA9PSAzIGFu ZCBrZXl3b3JkLmxvd2VyKCkgPT0gImFsbCI6CisgICAgICAgICAgICByZXR1 cm4gRmFsc2UKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIHJldHVybiBU cnVlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Iv Y29tbWFuZC5weSBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9jb21t YW5kLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4 MjU5YmMKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9z cWxlZGl0b3IvY29tbWFuZC5weQpAQCAtMCwwICsxLDYzOCBAQAorIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgcGdBZG1pbiA0IC0gUG9z dGdyZVNRTCBUb29scworIworIyBDb3B5cmlnaHQgKEMpIDIwMTMgLSAyMDE2 LCBUaGUgcGdBZG1pbiBEZXZlbG9wbWVudCBUZWFtCisjIFRoaXMgc29mdHdh cmUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIFBvc3RncmVTUUwgTGljZW5jZQor IworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIiIiIEltcGxl bWVudGVkIGNsYXNzZXMgZm9yIHRoZSBkaWZmZXJlbnQgb2JqZWN0IHR5cGUg dXNlZCBieSBkYXRhIGdyaWQgIiIiCisKK2Zyb20gYWJjIGltcG9ydCBBQkNN ZXRhLCBhYnN0cmFjdG1ldGhvZAorZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVy X3RlbXBsYXRlCitmcm9tIGZsYXNrLmV4dC5iYWJlbCBpbXBvcnQgZ2V0dGV4 dAorZnJvbSBwZ2FkbWluLnV0aWxzLmRyaXZlciBpbXBvcnQgZ2V0X2RyaXZl cgorZnJvbSBwZ2FkbWluLnV0aWxzLmFqYXggaW1wb3J0IGZvcmJpZGRlbgor ZnJvbSBjb25maWcgaW1wb3J0IFBHX0RFRkFVTFRfRFJJVkVSCitpbXBvcnQg c2l4CisKK1ZJRVdfRklSU1RfMTAwX1JPV1MgPSAxCitWSUVXX0xBU1RfMTAw X1JPV1MgPSAyCitWSUVXX0FMTF9ST1dTID0gMworVklFV19GSUxURVJFRF9S T1dTID0gNAorCisKK2NsYXNzIE9iamVjdFJlZ2lzdHJ5KEFCQ01ldGEpOgor ICAgICIiIgorICAgIGNsYXNzIE9iamVjdFJlZ2lzdHJ5KEFCQ01ldGEpCisg ICAgICAgIEV2ZXJ5IG9iamVjdCB3aWxsIGJlIHJlZ2lzdGVyZWQgYXV0b21h dGljYWxseSBieSBpdHMgb2JqZWN0IHR5cGUuCisKKyAgICBDbGFzcy1sZXZl bCBNZXRob2RzOgorICAgIC0tLS0tLS0tLS0tIC0tLS0tLS0KKyAgICAqIGdl dF9vYmplY3QoY2xzLCBuYW1lLCAqKmt3YXJncykKKyAgICAgIC0gVGhpcyBt ZXRob2QgcmV0dXJucyB0aGUgb2JqZWN0IGJhc2VkIG9uIHJlZ2lzdGVyIG9i amVjdCB0eXBlCisgICAgICAgIGVsc2UgcmV0dXJuIG5vdCBpbXBsZW1lbnRl ZCBlcnJvci4KKyAgICAiIiIKKworICAgIHJlZ2lzdHJ5ID0gZGljdCgpCisK KyAgICBkZWYgX19pbml0X18oY2xzLCBuYW1lLCBiYXNlcywgZCk6CisgICAg ICAgICIiIgorICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHJlZ2lz dGVyIHRoZSBvYmplY3RzIGJhc2VkIG9uIG9iamVjdCB0eXBlLgorICAgICAg ICAiIiIKKworICAgICAgICBpZiBkIGFuZCAnb2JqZWN0X3R5cGUnIGluIGQ6 CisgICAgICAgICAgICBPYmplY3RSZWdpc3RyeS5yZWdpc3RyeVtkWydvYmpl Y3RfdHlwZSddXSA9IGNscworCisgICAgICAgIEFCQ01ldGEuX19pbml0X18o Y2xzLCBuYW1lLCBiYXNlcywgZCkKKworICAgIEBjbGFzc21ldGhvZAorICAg IGRlZiBnZXRfb2JqZWN0KGNscywgbmFtZSwgKiprd2FyZ3MpOgorICAgICAg ICAiIiIKKyAgICAgICAgVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgb2JqZWN0 IGJhc2VkIG9uIHJlZ2lzdGVyIG9iamVjdCB0eXBlCisgICAgICAgIGVsc2Ug cmV0dXJuIG5vdCBpbXBsZW1lbnRlZCBlcnJvcgorCisgICAgICAgIEFyZ3M6 CisgICAgICAgICAgICBuYW1lOiBvYmplY3QgdHlwZSBmb3Igd2hpY2ggb2Jq ZWN0IHRvIGJlIHJldHVybmVkLgorICAgICAgICAgICAgKiprd2FyZ3M6IE4g bnVtYmVyIG9mIHBhcmFtZXRlcnMKKyAgICAgICAgIiIiCisKKyAgICAgICAg aWYgbmFtZSBpbiBPYmplY3RSZWdpc3RyeS5yZWdpc3RyeToKKyAgICAgICAg ICAgIHJldHVybiAoT2JqZWN0UmVnaXN0cnkucmVnaXN0cnlbbmFtZV0pKCoq a3dhcmdzKQorCisgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3Io CisgICAgICAgICAgICAgICAgZ2V0dGV4dCgiVGhpcyBmZWF0dXJlIGZvciBv YmplY3QgdHlwZSAtICd7MH0nIGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCEi KS5mb3JtYXQobmFtZSkKKyAgICAgICAgICAgICkKKworCitAc2l4LmFkZF9t ZXRhY2xhc3MoT2JqZWN0UmVnaXN0cnkpCitjbGFzcyBCYXNlQ29tbWFuZChv YmplY3QpOgorICAgICIiIgorICAgIGNsYXNzIEJhc2VDb21tYW5kCisKKyAg ICAgICAgSXQgaXMgYSBiYXNlIGNsYXNzIGZvciBTUUwgVG9vbHMgbGlrZSBk YXRhIGdyaWQgYW5kIHF1ZXJ5IHRvb2wuCisgICAgICAgIEEgZGlmZmVyZW50 IHNxbCB0b29scyBtdXN0IGltcGxlbWVudCB0aGlzIHRvIGV4cG9zZSBhYnN0 cmFjdCBtZXRob2RzLgorCisgICAgQWJzdHJhY3QgTWV0aG9kczoKKyAgICAt LS0tLS0tLSAtLS0tLS0tCisgICAgKiBnZXRfc3FsKCkKKyAgICAgIC0gVGhp cyBtZXRob2QgcmV0dXJucyB0aGUgcHJvcGVyIFNRTCBxdWVyeSBmb3IgdGhl IG9iamVjdCB0eXBlLgorCisgICAgKiBjYW5fZWRpdCgpCisgICAgICAtIFRo aXMgbWV0aG9kIHJldHVybnMgVHJ1ZS9GYWxzZSwgc3BlY2lmeWluZyB3aGV0 aGVyIGRhdGEgaXMKKyAgICAgICAgZWRpdGFibGUgb3Igbm90LgorCisgICAg KiBjYW5fZmlsdGVyKCkKKyAgICAgIC0gVGhpcyBtZXRob2QgcmV0dXJucyBU cnVlL0ZhbHNlLCBzcGVjaWZ5aW5nIHdoZXRoZXIgZmlsdGVyCisgICAgICAg IHdpbGwgYmUgYXBwbGllZCBvbiBkYXRhIG9yIG5vdC4KKyAgICAiIiIKKwor ICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6CisgICAgICAgICIi IgorICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGluaXRpYWxpemUg dGhlIGNsYXNzIGFuZAorICAgICAgICBjcmVhdGUgYSBwcm9wZXIgb2JqZWN0 IG5hbWUgd2hpY2ggd2lsbCBiZSB1c2VkCisgICAgICAgIHRvIGZldGNoIHRo ZSBkYXRhIHVzaW5nIG5hbWVzcGFjZSBuYW1lIGFuZCBvYmplY3QgbmFtZS4K KworICAgICAgICBBcmdzOgorICAgICAgICAgICAgKiprd2FyZ3MgOiBOIG51 bWJlciBvZiBwYXJhbWV0ZXJzCisgICAgICAgICIiIgorCisgICAgICAgICMg U2F2ZSB0aGUgc2VydmVyIGlkIGFuZCBkYXRhYmFzZSBpZCwgbmFtZXNwYWNl IGlkLCBvYmplY3QgaWQKKyAgICAgICAgc2VsZi5zaWQgPSBrd2FyZ3NbJ3Np ZCddIGlmICdzaWQnIGluIGt3YXJncyBlbHNlIE5vbmUKKyAgICAgICAgc2Vs Zi5kaWQgPSBrd2FyZ3NbJ2RpZCddIGlmICdkaWQnIGluIGt3YXJncyBlbHNl IE5vbmUKKworICAgIEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBnZXRfc3Fs KHNlbGYpOgorICAgICAgICBwYXNzCisKKyAgICBAYWJzdHJhY3RtZXRob2QK KyAgICBkZWYgY2FuX2VkaXQoc2VsZik6CisgICAgICAgIHBhc3MKKworICAg IEBhYnN0cmFjdG1ldGhvZAorICAgIGRlZiBjYW5fZmlsdGVyKHNlbGYpOgor ICAgICAgICBwYXNzCisKKworY2xhc3MgU1FMRmlsdGVyKG9iamVjdCk6Cisg ICAgIiIiCisgICAgY2xhc3MgU1FMRmlsdGVyCisKKyAgICAgICAgSW1wbGVt ZW50YXRpb24gb2YgZmlsdGVyIGNsYXNzIGZvciBzcWwgZ3JpZC4KKworICAg IENsYXNzLWxldmVsIE1ldGhvZHM6CisgICAgLS0tLS0tLS0tLS0gLS0tLS0t LQorICAgICogZ2V0X2ZpbHRlcigpCisgICAgICAtIFRoaXMgbWV0aG9kIHJl dHVybnMgdGhlIGZpbHRlciBhcHBsaWVkLgorICAgICogc2V0X2ZpbHRlcihy b3dfZmlsdGVyKQorICAgICAgLSBUaGlzIG1ldGhvZCBzZXRzIHRoZSBmaWx0 ZXIgdG8gYmUgYXBwbGllZC4KKyAgICAqIGFwcGVuZF9maWx0ZXIocm93X2Zp bHRlcikKKyAgICAgIC0gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhcHBlbmQg dGhlIGZpbHRlciB3aXRoaW4gZXhpc3RpbmcgZmlsdGVyCisgICAgKiByZW1v dmVfZmlsdGVyKCkKKyAgICAgIC0gVGhpcyBtZXRob2QgcmVtb3ZlcyB0aGUg ZmlsdGVyIGFwcGxpZWQuCisgICAgKiB2YWxpZGF0ZV9maWx0ZXIocm93X2Zp bHRlcikKKyAgICAgIC0gVGhpcyBtZXRob2QgdmFsaWRhdGVzIHRoZSBnaXZl biBmaWx0ZXIuCisgICAgIiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwg Kiprd2FyZ3MpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBtZXRob2Qg aXMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBjbGFzcyBhbmQKKyAgICAgICAg Y3JlYXRlIGEgcHJvcGVyIG9iamVjdCBuYW1lIHdoaWNoIHdpbGwgYmUgdXNl ZAorICAgICAgICB0byBmZXRjaCB0aGUgZGF0YSB1c2luZyBuYW1lc3BhY2Ug bmFtZSBhbmQgb2JqZWN0IG5hbWUuCisKKyAgICAgICAgQXJnczoKKyAgICAg ICAgICAgICoqa3dhcmdzIDogTiBudW1iZXIgb2YgcGFyYW1ldGVycworICAg ICAgICAiIiIKKyAgICAgICAgIyBTYXZlIHRoZSBzZXJ2ZXIgaWQgYW5kIGRh dGFiYXNlIGlkLCBuYW1lc3BhY2UgaWQsIG9iamVjdCBpZAorICAgICAgICBh c3NlcnQgKCdzaWQnIGluIGt3YXJncykKKyAgICAgICAgYXNzZXJ0ICgnZGlk JyBpbiBrd2FyZ3MpCisgICAgICAgIGFzc2VydCAoJ29ial9pZCcgaW4ga3dh cmdzKQorCisgICAgICAgIHNlbGYuc2lkID0ga3dhcmdzWydzaWQnXQorICAg ICAgICBzZWxmLmRpZCA9IGt3YXJnc1snZGlkJ10KKyAgICAgICAgc2VsZi5v YmpfaWQgPSBrd2FyZ3NbJ29ial9pZCddCisgICAgICAgIHNlbGYuX19yb3df ZmlsdGVyID0ga3dhcmdzWydzcWxfZmlsdGVyJ10gaWYgJ3NxbF9maWx0ZXIn IGluIGt3YXJncyBlbHNlIE5vbmUKKworICAgICAgICBtYW5hZ2VyID0gZ2V0 X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikuY29ubmVjdGlvbl9tYW5hZ2Vy KHNlbGYuc2lkKQorICAgICAgICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9u KGRpZD1zZWxmLmRpZCkKKworICAgICAgICB2ZXIgPSBtYW5hZ2VyLnZlcnNp b24KKyAgICAgICAgIyB3ZSB3aWxsIHNldCB0ZW1wbGF0ZSBwYXRoIGZvciBz cWwgc2NyaXB0cworICAgICAgICBpZiB2ZXIgPj0gOTAxMDA6CisgICAgICAg ICAgICBzZWxmLnNxbF9wYXRoID0gJ3NxbGVkaXRvci9zcWwvOS4xX3BsdXMn CisKKyAgICAgICAgaWYgY29ubi5jb25uZWN0ZWQoKToKKyAgICAgICAgICAg ICMgRmV0Y2ggdGhlIE5hbWVzcGFjZSBOYW1lIGFuZCBvYmplY3QgTmFtZQor ICAgICAgICAgICAgcXVlcnkgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4o W3NlbGYuc3FsX3BhdGgsICdvYmplY3RuYW1lLnNxbCddKSwgb2JqX2lkPXNl bGYub2JqX2lkKQorCisgICAgICAgICAgICBzdGF0dXMsIHJlc3VsdCA9IGNv bm4uZXhlY3V0ZV9kaWN0KHF1ZXJ5KQorICAgICAgICAgICAgaWYgbm90IHN0 YXR1czoKKyAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24ocmVzdWx0 KQorCisgICAgICAgICAgICBzZWxmLm5zcF9uYW1lID0gcmVzdWx0Wydyb3dz J11bMF1bJ25zcG5hbWUnXQorICAgICAgICAgICAgc2VsZi5vYmplY3RfbmFt ZSA9IHJlc3VsdFsncm93cyddWzBdWydyZWxuYW1lJ10KKyAgICAgICAgZWxz ZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihnZXR0ZXh0KCdOb3Qg Y29ubmVjdGVkIHRvIHNlcnZlciBvciBjb25uZWN0aW9uIHdpdGggdGhlIHNl cnZlciBoYXMgYmVlbiBjbG9zZWQuJykpCisKKyAgICBkZWYgZ2V0X2ZpbHRl cihzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24g cmV0dXJucyB0aGUgZmlsdGVyLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0 dXJuIHNlbGYuX19yb3dfZmlsdGVyCisKKyAgICBkZWYgc2V0X2ZpbHRlcihz ZWxmLCByb3dfZmlsdGVyKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMg ZnVuY3Rpb24gdmFsaWRhdGVzIHRoZSBmaWx0ZXIgYW5kIHNldCB0aGUKKyAg ICAgICAgZ2l2ZW4gZmlsdGVyIHRvIG1lbWJlciB2YXJpYWJsZS4KKworICAg ICAgICBBcmdzOgorICAgICAgICAgICAgcm93X2ZpbHRlcjogc3FsIHF1ZXJ5 CisgICAgICAgICIiIgorCisgICAgICAgIHN0YXR1cywgbXNnID0gc2VsZi52 YWxpZGF0ZV9maWx0ZXIocm93X2ZpbHRlcikKKworICAgICAgICBpZiBzdGF0 dXM6CisgICAgICAgICAgICBzZWxmLl9fcm93X2ZpbHRlciA9IHJvd19maWx0 ZXIKKworICAgICAgICByZXR1cm4gc3RhdHVzLCBtc2cKKworICAgIGRlZiBp c19maWx0ZXJfYXBwbGllZChzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAg IFRoaXMgZnVuY3Rpb24gcmV0dXJucyBUcnVlIGlmIGZpbHRlciBpcyBhcHBs aWVkIGVsc2UgRmFsc2UuCisgICAgICAgICIiIgorICAgICAgICBpZiBzZWxm Ll9fcm93X2ZpbHRlciBpcyBOb25lIG9yIHNlbGYuX19yb3dfZmlsdGVyID09 ICcnOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgcmV0 dXJuIFRydWUKKworICAgIGRlZiByZW1vdmVfZmlsdGVyKHNlbGYpOgorICAg ICAgICAiIiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiByZW1vdmUgdGhlIGZp bHRlciBieSBzZXR0aW5nIHZhbHVlIHRvIE5vbmUuCisgICAgICAgICIiIgor ICAgICAgICBzZWxmLl9fcm93X2ZpbHRlciA9IE5vbmUKKworICAgIGRlZiBh cHBlbmRfZmlsdGVyKHNlbGYsIHJvd19maWx0ZXIpOgorICAgICAgICAiIiIK KyAgICAgICAgVGhpcyBmdW5jdGlvbiB3aWxsIHVzZWQgdG8gZ2V0IHRoZSBl eGlzdGluZyBmaWx0ZXIgYW5kIGFwcGVuZAorICAgICAgICB0aGUgZ2l2ZW4g ZmlsdGVyLgorCisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICByb3dfZmls dGVyOiBzcWwgcXVlcnkgdG8gYXBwZW5kCisgICAgICAgICIiIgorCisgICAg ICAgIGV4aXN0aW5nX2ZpbHRlciA9IHNlbGYuZ2V0X2ZpbHRlcigpCisKKyAg ICAgICAgaWYgZXhpc3RpbmdfZmlsdGVyIGlzIE5vbmUgb3IgZXhpc3Rpbmdf ZmlsdGVyID09ICcnOgorICAgICAgICAgICAgc2VsZi5fX3Jvd19maWx0ZXIg PSByb3dfZmlsdGVyCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxm Ll9fcm93X2ZpbHRlciA9IGV4aXN0aW5nX2ZpbHRlciArICcgXG4gICAgQU5E ICcgKyByb3dfZmlsdGVyCisKKyAgICBkZWYgdmFsaWRhdGVfZmlsdGVyKHNl bGYsIHJvd19maWx0ZXIpOgorICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBm dW5jdGlvbiB2YWxpZGF0ZXMgdGhlIGdpdmVuIGZpbHRlci4KKworICAgICAg ICBBcmdzOgorICAgICAgICAgICAgcm93X2ZpbHRlcjogc3FsIHN5bnRheCB0 byB2YWxpZGF0ZQorICAgICAgICAiIiIKKyAgICAgICAgc3RhdHVzID0gVHJ1 ZQorICAgICAgICByZXN1bHQgPSBOb25lCisKKyAgICAgICAgaWYgcm93X2Zp bHRlciBpcyBOb25lIG9yIHJvd19maWx0ZXIgPT0gJyc6CisgICAgICAgICAg ICByZXR1cm4gRmFsc2UsIGdldHRleHQoJ0ZpbHRlciBzdHJpbmcgaXMgZW1w dHkhJykKKworICAgICAgICBtYW5hZ2VyID0gZ2V0X2RyaXZlcihQR19ERUZB VUxUX0RSSVZFUikuY29ubmVjdGlvbl9tYW5hZ2VyKHNlbGYuc2lkKQorICAg ICAgICBjb25uID0gbWFuYWdlci5jb25uZWN0aW9uKGRpZD1zZWxmLmRpZCkK KworICAgICAgICBpZiBjb25uLmNvbm5lY3RlZCgpOgorICAgICAgICAgICAg c3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnNxbF9wYXRo LCAndmFsaWRhdGUuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG5zcF9uYW1lPXNlbGYubnNwX25hbWUsIG9iamVjdF9uYW1l PXNlbGYub2JqZWN0X25hbWUsIHJvd19maWx0ZXI9cm93X2ZpbHRlcikKKwor ICAgICAgICAgICAgc3RhdHVzLCByZXN1bHQgPSBjb25uLmV4ZWN1dGVfc2Nh bGFyKHNxbCkKKyAgICAgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAg ICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnBhcnRpdGlvbigiXG4iKVswXQor CisgICAgICAgIHJldHVybiBzdGF0dXMsIHJlc3VsdAorCisKK2NsYXNzIEdy aWRDb21tYW5kKEJhc2VDb21tYW5kLCBTUUxGaWx0ZXIpOgorICAgICIiIgor ICAgIGNsYXNzIEdyaWRDb21tYW5kKG9iamVjdCkKKworICAgICAgICBJdCBp cyBhIGJhc2UgY2xhc3MgZm9yIGRpZmZlcmVudCBvYmplY3QgdHlwZSB1c2Vk IGJ5IGRhdGEgZ3JpZC4KKyAgICAgICAgQSBkaWZmZXJlbnQgb2JqZWN0IHR5 cGUgbXVzdCBpbXBsZW1lbnQgdGhpcyB0byBleHBvc2UgYWJzdHJhY3QgbWV0 aG9kcy4KKworICAgIENsYXNzLWxldmVsIE1ldGhvZHM6CisgICAgLS0tLS0t LS0tLS0gLS0tLS0tLQorICAgICogZ2V0X3ByaW1hcnlfa2V5cygpCisgICAg ICAtIERlcml2ZWQgY2xhc3MgY2FuIGltcGxlbWVudCB0aGVyZSBvd24gbG9n aWMgdG8gZ2V0IHRoZSBwcmltYXJ5IGtleXMuCisKKyAgICAqIHNhdmUoKQor ICAgICAgLSBEZXJpdmVkIGNsYXNzIGNhbiBpbXBsZW1lbnQgdGhlcmUgb3du IGxvZ2ljIHRvIHNhdmUgdGhlIGRhdGEgaW50byB0aGUgZGF0YWJhc2UuCisK KyAgICAqIHNldF9saW1pdChsaW1pdCkKKyAgICAgIC0gVGhpcyBtZXRob2Qg c2V0cyB0aGUgbGltaXQgZm9yIFNRTCBxdWVyeQorCisgICAgKiBnZXRfbGlt aXQoKQorICAgICAgLSBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBsaW1pdC4K KyAgICAiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCAqKmt3YXJncyk6 CisgICAgICAgICIiIgorICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRv IGNhbGwgYmFzZSBjbGFzcyBpbml0IHRvIGluaXRpYWxpemUKKyAgICAgICAg dGhlIGRhdGEuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgICoqa3dh cmdzIDogTiBudW1iZXIgb2YgcGFyYW1ldGVycworICAgICAgICAiIiIKKyAg ICAgICAgQmFzZUNvbW1hbmQuX19pbml0X18oc2VsZiwgKiprd2FyZ3MpCisg ICAgICAgIFNRTEZpbHRlci5fX2luaXRfXyhzZWxmLCAqKmt3YXJncykKKwor ICAgICAgICAjIFNhdmUgdGhlIGNvbm5lY3Rpb24gaWQsIGNvbW1hbmQgdHlw ZQorICAgICAgICBzZWxmLmNvbm5faWQgPSBrd2FyZ3NbJ2Nvbm5faWQnXSBp ZiAnY29ubl9pZCcgaW4ga3dhcmdzIGVsc2UgTm9uZQorICAgICAgICBzZWxm LmNtZF90eXBlID0ga3dhcmdzWydjbWRfdHlwZSddIGlmICdjbWRfdHlwZScg aW4ga3dhcmdzIGVsc2UgTm9uZQorICAgICAgICBzZWxmLmxpbWl0ID0gLTEK KworICAgICAgICBpZiBzZWxmLmNtZF90eXBlID09IFZJRVdfRklSU1RfMTAw X1JPV1Mgb3Igc2VsZi5jbWRfdHlwZSA9PSBWSUVXX0xBU1RfMTAwX1JPV1M6 CisgICAgICAgICAgICBzZWxmLmxpbWl0ID0gMTAwCisKKyAgICBkZWYgZ2V0 X3ByaW1hcnlfa2V5cyhzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUsIE5v bmUKKworICAgIGRlZiBzYXZlKHNlbGYsIGNoYW5nZWRfZGF0YSk6CisgICAg ICAgIHJldHVybiBmb3JiaWRkZW4oZXJybXNnPWdldHRleHQoIk5vdCBhbGxv d2VkIHRvIHNhdmUgdGhlIGRhdGEgZm9yIHRoZSBzZWxlY3RlZCBvYmplY3Qh IikpCisKKyAgICBkZWYgZ2V0X2xpbWl0KHNlbGYpOgorICAgICAgICAiIiIK KyAgICAgICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBsaW1pdCBmb3Ig dGhlIFNRTCBxdWVyeS4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBz ZWxmLmxpbWl0CisKKyAgICBkZWYgc2V0X2xpbWl0KHNlbGYsIGxpbWl0KToK KyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUg bGltaXQgZm9yIHRoZSBTUUwgcXVlcnkKKyAgICAgICAgQXJnczoKKyAgICAg ICAgICAgIGxpbWl0OiBsaW1pdCB0byBiZSBzZXQgZm9yIFNRTC4KKyAgICAg ICAgIiIiCisgICAgICAgIHNlbGYubGltaXQgPSBsaW1pdAorCisKK2NsYXNz IFRhYmxlQ29tbWFuZChHcmlkQ29tbWFuZCk6CisgICAgIiIiCisgICAgY2xh c3MgVGFibGVDb21tYW5kKEdyaWRDb21tYW5kKQorCisgICAgICAgIEl0IGlz IGEgZGVyaXZlZCBjbGFzcyBmb3IgVGFibGUgdHlwZS4KKyAgICAiIiIKKyAg ICBvYmplY3RfdHlwZSA9ICd0YWJsZScKKworICAgIGRlZiBfX2luaXRfXyhz ZWxmLCAqKmt3YXJncyk6CisgICAgICAgICIiIgorICAgICAgICBUaGlzIG1l dGhvZCBjYWxscyB0aGUgX19pbml0X18gbWV0aG9kIG9mIHRoZSBiYXNlIGNs YXNzCisgICAgICAgIHRvIGdldCB0aGUgcHJvcGVyIG9iamVjdCBuYW1lLgor CisgICAgICAgIEFyZ3M6CisgICAgICAgICAgICAqKmt3YXJncyA6IE4gbnVt YmVyIG9mIHBhcmFtZXRlcnMKKyAgICAgICAgIiIiCisKKyAgICAgICAgIyBj YWxsIGJhc2UgY2xhc3MgaW5pdCB0byBmZXRjaCB0aGUgdGFibGUgbmFtZQor ICAgICAgICBzdXBlcihUYWJsZUNvbW1hbmQsIHNlbGYpLl9faW5pdF9fKCoq a3dhcmdzKQorCisgICAgZGVmIGdldF9zcWwoc2VsZik6CisgICAgICAgICIi IgorICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNyZWF0ZSBhIHBy b3BlciBTUUwgcXVlcnkKKyAgICAgICAgdG8gZmV0Y2ggdGhlIGRhdGEgZm9y IHRoZSBzcGVjaWZpZWQgdGFibGUKKyAgICAgICAgIiIiCisKKyAgICAgICAg IyBGZXRjaCB0aGUgcHJpbWFyeSBrZXlzIGZvciB0aGUgdGFibGUKKyAgICAg ICAgcGtfbmFtZXMsIHByaW1hcnlfa2V5cyA9IHNlbGYuZ2V0X3ByaW1hcnlf a2V5cygpCisKKyAgICAgICAgc3FsX2ZpbHRlciA9IHNlbGYuZ2V0X2ZpbHRl cigpCisKKyAgICAgICAgaWYgc3FsX2ZpbHRlciBpcyBOb25lOgorICAgICAg ICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnNx bF9wYXRoLCAnb2JqZWN0cXVlcnkuc3FsJ10pLCBvYmplY3RfbmFtZT1zZWxm Lm9iamVjdF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG5zcF9uYW1lPXNlbGYubnNwX25hbWUsIHBrX25hbWVzPXBrX25hbWVz LCBjbWRfdHlwZT1zZWxmLmNtZF90eXBlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxpbWl0PXNlbGYubGltaXQpCisgICAgICAgIGVs c2U6CisgICAgICAgICAgICBzcWwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpv aW4oW3NlbGYuc3FsX3BhdGgsICdvYmplY3RxdWVyeS5zcWwnXSksIG9iamVj dF9uYW1lPXNlbGYub2JqZWN0X25hbWUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbnNwX25hbWU9c2VsZi5uc3BfbmFtZSwgcGtfbmFt ZXM9cGtfbmFtZXMsIGNtZF90eXBlPXNlbGYuY21kX3R5cGUsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3FsX2ZpbHRlcj1zcWxfZmls dGVyLCBsaW1pdD1zZWxmLmxpbWl0KQorCisgICAgICAgIHJldHVybiBzcWwK KworICAgIGRlZiBnZXRfcHJpbWFyeV9rZXlzKHNlbGYpOgorICAgICAgICAi IiIKKyAgICAgICAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGZldGNoIHRo ZSBwcmltYXJ5IGtleSBjb2x1bW5zLgorICAgICAgICAiIiIKKworICAgICAg ICBtYW5hZ2VyID0gZ2V0X2RyaXZlcihQR19ERUZBVUxUX0RSSVZFUikuY29u bmVjdGlvbl9tYW5hZ2VyKHNlbGYuc2lkKQorICAgICAgICBjb25uID0gbWFu YWdlci5jb25uZWN0aW9uKGRpZD1zZWxmLmRpZCwgY29ubl9pZD1zZWxmLmNv bm5faWQpCisKKyAgICAgICAgcGtfbmFtZXMgPSAnJworICAgICAgICBwcmlt YXJ5X2tleXMgPSBkaWN0KCkKKworICAgICAgICBpZiBjb25uLmNvbm5lY3Rl ZCgpOgorCisgICAgICAgICAgICAjIEZldGNoIHRoZSBwcmltYXJ5IGtleSBj b2x1bW4gbmFtZXMKKyAgICAgICAgICAgIHF1ZXJ5ID0gcmVuZGVyX3RlbXBs YXRlKCIvIi5qb2luKFtzZWxmLnNxbF9wYXRoLCAncHJpbWFyeV9rZXlzLnNx bCddKSwgb2JqX2lkPXNlbGYub2JqX2lkKQorCisgICAgICAgICAgICBzdGF0 dXMsIHJlc3VsdCA9IGNvbm4uZXhlY3V0ZV9kaWN0KHF1ZXJ5KQorICAgICAg ICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICByYWlzZSBF eGNlcHRpb24ocmVzdWx0KQorCisgICAgICAgICAgICBmb3Igcm93IGluIHJl c3VsdFsncm93cyddOgorICAgICAgICAgICAgICAgIHBrX25hbWVzICs9IHJv d1snYXR0bmFtZSddICsgJywnCisgICAgICAgICAgICAgICAgcHJpbWFyeV9r ZXlzW3Jvd1snYXR0bmFtZSddXSA9IHJvd1sndHlwbmFtZSddCisKKyAgICAg ICAgICAgIGlmIHBrX25hbWVzICE9ICcnOgorICAgICAgICAgICAgICAgICMg UmVtb3ZlIGxhc3QgY2hhcmFjdGVyIGZyb20gdGhlIHN0cmluZworICAgICAg ICAgICAgICAgIHBrX25hbWVzID0gcGtfbmFtZXNbOi0xXQorICAgICAgICBl bHNlOgorICAgICAgICAgICAgcmFpc2UgRXhjZXB0aW9uKGdldHRleHQoJ05v dCBjb25uZWN0ZWQgdG8gc2VydmVyIE9yIGNvbm5lY3Rpb24gd2l0aCB0aGUg c2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKSkKKworICAgICAgICByZXR1cm4g cGtfbmFtZXMsIHByaW1hcnlfa2V5cworCisgICAgZGVmIGNhbl9lZGl0KHNl bGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIGNhbl9maWx0 ZXIoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgc2F2 ZShzZWxmLCBjaGFuZ2VkX2RhdGEpOgorICAgICAgICAiIiIKKyAgICAgICAg VGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNhdmUgdGhlIGRhdGEgaW50byB0 aGUgZGF0YWJhc2UuCisgICAgICAgIERlcGVuZGluZyBvbiBjb25kaXRpb24g aXQgd2lsbCBlaXRoZXIgdXBkYXRlIG9yIGluc2VydCB0aGUKKyAgICAgICAg bmV3IHJvdyBpbnRvIHRoZSBkYXRhYmFzZS4KKworICAgICAgICBBcmdzOgor ICAgICAgICAgICAgY2hhbmdlZF9kYXRhOiBDb250YWlucyBkYXRhIHRvIGJl IHNhdmVkCisgICAgICAgICIiIgorCisgICAgICAgIG1hbmFnZXIgPSBnZXRf ZHJpdmVyKFBHX0RFRkFVTFRfRFJJVkVSKS5jb25uZWN0aW9uX21hbmFnZXIo c2VsZi5zaWQpCisgICAgICAgIGNvbm4gPSBtYW5hZ2VyLmNvbm5lY3Rpb24o ZGlkPXNlbGYuZGlkLCBjb25uX2lkPXNlbGYuY29ubl9pZCkKKworICAgICAg ICBzdGF0dXMgPSBGYWxzZQorICAgICAgICByZXMgPSBOb25lCisgICAgICAg IHF1ZXJ5X3JlcyA9IGRpY3QoKQorICAgICAgICBjb3VudCA9IDAKKworICAg ICAgICBpZiBjb25uLmNvbm5lY3RlZCgpOgorCisgICAgICAgICAgICAjIFN0 YXJ0IHRoZSB0cmFuc2FjdGlvbgorICAgICAgICAgICAgY29ubi5leGVjdXRl X3ZvaWQoJ0JFR0lOOycpCisKKyAgICAgICAgICAgICMgSXRlcmF0ZSB0b3Rh bCBudW1iZXIgb2YgcmVjb3JkcyB0byBiZSB1cGRhdGVkL2luc2VydGVkCisg ICAgICAgICAgICBmb3Igcm93IGluIGNoYW5nZWRfZGF0YToKKworICAgICAg ICAgICAgICAgICMgaWYgbm8gZGF0YSB0byBiZSBzYXZlZCB0aGVuIGNvbnRp bnVlCisgICAgICAgICAgICAgICAgaWYgJ2RhdGEnIG5vdCBpbiByb3c6Cisg ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAg ICAjIGlmICdrZXlzJyBpcyBwcmVzZW50IGluIHJvdyB0aGVuIGl0IGlzIGFu ZCB1cGRhdGUgcXVlcnkKKyAgICAgICAgICAgICAgICAjIGVsc2UgaXQgaXMg YW4gaW5zZXJ0IHF1ZXJ5LgorICAgICAgICAgICAgICAgIGlmICdrZXlzJyBp biByb3c6CisgICAgICAgICAgICAgICAgICAgICMgaWYgJ21hcmtlZF9mb3Jf ZGVsZXRpb24nIGlzIHByZXNlbnQgaW4gcm93IGFuZCBpdCBpcyB0cnVlIHRo ZW4gZGVsZXRlCisgICAgICAgICAgICAgICAgICAgIGlmICdtYXJrZWRfZm9y X2RlbGV0aW9uJyBpbiByb3cgYW5kIHJvd1snbWFya2VkX2Zvcl9kZWxldGlv biddOgorICAgICAgICAgICAgICAgICAgICAgICAgc3FsID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFtzZWxmLnNxbF9wYXRoLCAnZGVsZXRlLnNxbCdd KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwcmltYXJ5X2tleXM9cm93WydrZXlzJ10sIG9iamVjdF9uYW1lPXNl bGYub2JqZWN0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbnNwX25hbWU9c2VsZi5uc3BfbmFtZSkKKyAg ICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg ICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5zcWxf cGF0aCwgJ3VwZGF0ZS5zcWwnXSksIG9iamVjdF9uYW1lPXNlbGYub2JqZWN0 X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGF0YV90b19iZV9zYXZlZD1yb3dbJ2RhdGEnXSwgcHJpbWFy eV9rZXlzPXJvd1sna2V5cyddLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG5zcF9uYW1lPXNlbGYubnNwX25hbWUp CisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAg c3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnNxbF9wYXRo LCAnY3JlYXRlLnNxbCddKSwgb2JqZWN0X25hbWU9c2VsZi5vYmplY3RfbmFt ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRhdGFfdG9fYmVfc2F2ZWQ9cm93WydkYXRhJ10sIG5zcF9uYW1lPXNlbGYu bnNwX25hbWUpCisKKyAgICAgICAgICAgICAgICBzdGF0dXMsIHJlcyA9IGNv bm4uZXhlY3V0ZV92b2lkKHNxbCkKKyAgICAgICAgICAgICAgICByb3dzX2Fm ZmVjdGVkID0gY29ubi5yb3dzX2FmZmVjdGVkKCkKKworICAgICAgICAgICAg ICAgICMgc3RvcmUgdGhlIHJlc3VsdCBvZiBlYWNoIHF1ZXJ5IGluIGRpY3Rp b25hcnkKKyAgICAgICAgICAgICAgICBxdWVyeV9yZXNbY291bnRdID0geydz dGF0dXMnOiBzdGF0dXMsICdyZXN1bHQnOiByZXMsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAnc3FsJzogc3FsLCAncm93c19hZmZl Y3RlZCc6IHJvd3NfYWZmZWN0ZWR9CisgICAgICAgICAgICAgICAgY291bnQg Kz0gMQorCisgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAg ICAgICAgICAgICAgICAgY29ubi5leGVjdXRlX3ZvaWQoJ1JPTExCQUNLOycp CisgICAgICAgICAgICAgICAgICAgICMgSWYgd2Ugcm9sbCBiYWNrZWQgZXZl cnkgdGhpbmcgdGhlbiB1cGRhdGUgdGhlIG1lc3NhZ2UgZm9yCisgICAgICAg ICAgICAgICAgICAgICMgZWFjaCBzcWwgcXVlcnkuCisgICAgICAgICAgICAg ICAgICAgIGZvciB2YWwgaW4gcXVlcnlfcmVzOgorICAgICAgICAgICAgICAg ICAgICAgICAgaWYgcXVlcnlfcmVzW3ZhbF1bJ3N0YXR1cyddOgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3Jlc1t2YWxdWydyZXN1bHQn XSA9ICdUcmFuc2FjdGlvbiBST0xMQkFDSycKKworICAgICAgICAgICAgICAg ICAgICByZXR1cm4gc3RhdHVzLCByZXMsIHF1ZXJ5X3JlcworCisgICAgICAg ICAgICAjIENvbW1pdCB0aGUgdHJhbnNhY3Rpb24gaWYgdGhlcmUgaXMgbm8g ZXJyb3IgZm91bmQKKyAgICAgICAgICAgIGNvbm4uZXhlY3V0ZV92b2lkKCdD T01NSVQ7JykKKworICAgICAgICByZXR1cm4gc3RhdHVzLCByZXMsIHF1ZXJ5 X3JlcworCisKK2NsYXNzIFZpZXdDb21tYW5kKEdyaWRDb21tYW5kKToKKyAg ICAiIiIKKyAgICBjbGFzcyBWaWV3Q29tbWFuZChHcmlkQ29tbWFuZCkKKwor ICAgICAgICBJdCBpcyBhIGRlcml2ZWQgY2xhc3MgZm9yIFZpZXcgdHlwZS4K KyAgICAiIiIKKyAgICBvYmplY3RfdHlwZSA9ICd2aWV3JworCisgICAgZGVm IF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKKyAgICAgICAgIiIiCisgICAg ICAgIFRoaXMgbWV0aG9kIGNhbGxzIHRoZSBfX2luaXRfXyBtZXRob2Qgb2Yg dGhlIGJhc2UgY2xhc3MKKyAgICAgICAgdG8gZ2V0IHRoZSBwcm9wZXIgb2Jq ZWN0IG5hbWUuCisKKyAgICAgICAgQXJnczoKKyAgICAgICAgICAgICoqa3dh cmdzIDogTiBudW1iZXIgb2YgcGFyYW1ldGVycworICAgICAgICAiIiIKKwor ICAgICAgICAjIGNhbGwgYmFzZSBjbGFzcyBpbml0IHRvIGZldGNoIHRoZSB0 YWJsZSBuYW1lCisgICAgICAgIHN1cGVyKFZpZXdDb21tYW5kLCBzZWxmKS5f X2luaXRfXygqKmt3YXJncykKKworICAgIGRlZiBnZXRfc3FsKHNlbGYpOgor ICAgICAgICAiIiIKKyAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCB0byBj cmVhdGUgYSBwcm9wZXIgU1FMIHF1ZXJ5CisgICAgICAgIHRvIGZldGNoIHRo ZSBkYXRhIGZvciB0aGUgc3BlY2lmaWVkIHZpZXcKKyAgICAgICAgIiIiCisg ICAgICAgIHNxbF9maWx0ZXIgPSBzZWxmLmdldF9maWx0ZXIoKQorCisgICAg ICAgIGlmIHNxbF9maWx0ZXIgaXMgTm9uZToKKyAgICAgICAgICAgIHNxbCA9 IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5zcWxfcGF0aCwgJ29i amVjdHF1ZXJ5LnNxbCddKSwgb2JqZWN0X25hbWU9c2VsZi5vYmplY3RfbmFt ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3BfbmFt ZT1zZWxmLm5zcF9uYW1lLCBjbWRfdHlwZT1zZWxmLmNtZF90eXBlLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0PXNlbGYubGlt aXQpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzcWwgPSByZW5kZXJf dGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuc3FsX3BhdGgsICdvYmplY3RxdWVy eS5zcWwnXSksIG9iamVjdF9uYW1lPXNlbGYub2JqZWN0X25hbWUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNwX25hbWU9c2VsZi5u c3BfbmFtZSwgY21kX3R5cGU9c2VsZi5jbWRfdHlwZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzcWxfZmlsdGVyPXNxbF9maWx0ZXIs IGxpbWl0PXNlbGYubGltaXQpCisKKyAgICAgICAgcmV0dXJuIHNxbAorCisg ICAgZGVmIGNhbl9lZGl0KHNlbGYpOgorICAgICAgICByZXR1cm4gRmFsc2UK KworICAgIGRlZiBjYW5fZmlsdGVyKHNlbGYpOgorICAgICAgICByZXR1cm4g VHJ1ZQorCisKK2NsYXNzIEZvcmVpZ25UYWJsZUNvbW1hbmQoR3JpZENvbW1h bmQpOgorICAgICIiIgorICAgIGNsYXNzIEZvcmVpZ25UYWJsZUNvbW1hbmQo R3JpZENvbW1hbmQpCisKKyAgICAgICAgSXQgaXMgYSBkZXJpdmVkIGNsYXNz IGZvciBGb3JlaWduVGFibGUgdHlwZS4KKyAgICAiIiIKKyAgICBvYmplY3Rf dHlwZSA9ICdmb3JlaWduLXRhYmxlJworCisgICAgZGVmIF9faW5pdF9fKHNl bGYsICoqa3dhcmdzKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgbWV0 aG9kIGNhbGxzIHRoZSBfX2luaXRfXyBtZXRob2Qgb2YgdGhlIGJhc2UgY2xh c3MKKyAgICAgICAgdG8gZ2V0IHRoZSBwcm9wZXIgb2JqZWN0IG5hbWUuCisK KyAgICAgICAgQXJnczoKKyAgICAgICAgICAgICoqa3dhcmdzIDogTiBudW1i ZXIgb2YgcGFyYW1ldGVycworICAgICAgICAiIiIKKworICAgICAgICAjIGNh bGwgYmFzZSBjbGFzcyBpbml0IHRvIGZldGNoIHRoZSB0YWJsZSBuYW1lCisg ICAgICAgIHN1cGVyKEZvcmVpZ25UYWJsZUNvbW1hbmQsIHNlbGYpLl9faW5p dF9fKCoqa3dhcmdzKQorCisgICAgZGVmIGdldF9zcWwoc2VsZik6CisgICAg ICAgICIiIgorICAgICAgICBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNyZWF0 ZSBhIHByb3BlciBTUUwgcXVlcnkKKyAgICAgICAgdG8gZmV0Y2ggdGhlIGRh dGEgZm9yIHRoZSBzcGVjaWZpZWQgZm9yZWlnbiB0YWJsZQorICAgICAgICAi IiIKKyAgICAgICAgc3FsX2ZpbHRlciA9IHNlbGYuZ2V0X2ZpbHRlcigpCisK KyAgICAgICAgaWYgc3FsX2ZpbHRlciBpcyBOb25lOgorICAgICAgICAgICAg c3FsID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnNxbF9wYXRo LCAnb2JqZWN0cXVlcnkuc3FsJ10pLCBvYmplY3RfbmFtZT1zZWxmLm9iamVj dF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5z cF9uYW1lPXNlbGYubnNwX25hbWUsIGNtZF90eXBlPXNlbGYuY21kX3R5cGUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGltaXQ9c2Vs Zi5saW1pdCkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNxbCA9IHJl bmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5zcWxfcGF0aCwgJ29iamVj dHF1ZXJ5LnNxbCddKSwgb2JqZWN0X25hbWU9c2VsZi5vYmplY3RfbmFtZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc3BfbmFtZT1z ZWxmLm5zcF9uYW1lLCBjbWRfdHlwZT1zZWxmLmNtZF90eXBlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNxbF9maWx0ZXI9c3FsX2Zp bHRlciwgbGltaXQ9c2VsZi5saW1pdCkKKworICAgICAgICByZXR1cm4gc3Fs CisKKyAgICBkZWYgY2FuX2VkaXQoc2VsZik6CisgICAgICAgIHJldHVybiBG YWxzZQorCisgICAgZGVmIGNhbl9maWx0ZXIoc2VsZik6CisgICAgICAgIHJl dHVybiBUcnVlCisKKworY2xhc3MgQ2F0YWxvZ0NvbW1hbmQoR3JpZENvbW1h bmQpOgorICAgICIiIgorICAgIGNsYXNzIENhdGFsb2dDb21tYW5kKEdyaWRD b21tYW5kKQorCisgICAgICAgIEl0IGlzIGEgZGVyaXZlZCBjbGFzcyBmb3Ig Q2F0YWxvZ09iamVjdCB0eXBlLgorICAgICIiIgorICAgIG9iamVjdF90eXBl ID0gJ2NhdGFsb2dfb2JqZWN0JworCisgICAgZGVmIF9faW5pdF9fKHNlbGYs ICoqa3dhcmdzKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgbWV0aG9k IGNhbGxzIHRoZSBfX2luaXRfXyBtZXRob2Qgb2YgdGhlIGJhc2UgY2xhc3MK KyAgICAgICAgdG8gZ2V0IHRoZSBwcm9wZXIgb2JqZWN0IG5hbWUuCisKKyAg ICAgICAgQXJnczoKKyAgICAgICAgICAgICoqa3dhcmdzIDogTiBudW1iZXIg b2YgcGFyYW1ldGVycworICAgICAgICAiIiIKKworICAgICAgICAjIGNhbGwg YmFzZSBjbGFzcyBpbml0IHRvIGZldGNoIHRoZSB0YWJsZSBuYW1lCisgICAg ICAgIHN1cGVyKENhdGFsb2dDb21tYW5kLCBzZWxmKS5fX2luaXRfXygqKmt3 YXJncykKKworICAgIGRlZiBnZXRfc3FsKHNlbGYpOgorICAgICAgICAiIiIK KyAgICAgICAgVGhpcyBtZXRob2QgaXMgdXNlZCB0byBjcmVhdGUgYSBwcm9w ZXIgU1FMIHF1ZXJ5CisgICAgICAgIHRvIGZldGNoIHRoZSBkYXRhIGZvciB0 aGUgc3BlY2lmaWVkIGNhdGFsb2cgb2JqZWN0CisgICAgICAgICIiIgorICAg ICAgICBzcWxfZmlsdGVyID0gc2VsZi5nZXRfZmlsdGVyKCkKKworICAgICAg ICBpZiBzcWxfZmlsdGVyIGlzIE5vbmU6CisgICAgICAgICAgICBzcWwgPSBy ZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oW3NlbGYuc3FsX3BhdGgsICdvYmpl Y3RxdWVyeS5zcWwnXSksIG9iamVjdF9uYW1lPXNlbGYub2JqZWN0X25hbWUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNwX25hbWU9 c2VsZi5uc3BfbmFtZSwgY21kX3R5cGU9c2VsZi5jbWRfdHlwZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW1pdD1zZWxmLmxpbWl0 KQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3FsID0gcmVuZGVyX3Rl bXBsYXRlKCIvIi5qb2luKFtzZWxmLnNxbF9wYXRoLCAnb2JqZWN0cXVlcnku c3FsJ10pLCBvYmplY3RfbmFtZT1zZWxmLm9iamVjdF9uYW1lLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5zcF9uYW1lPXNlbGYubnNw X25hbWUsIGNtZF90eXBlPXNlbGYuY21kX3R5cGUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3FsX2ZpbHRlcj1zcWxfZmlsdGVyLCBs aW1pdD1zZWxmLmxpbWl0KQorCisgICAgICAgIHJldHVybiBzcWwKKworICAg IGRlZiBjYW5fZWRpdChzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisK KyAgICBkZWYgY2FuX2ZpbHRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIFRy dWUKKworCitjbGFzcyBRdWVyeVRvb2xDb21tYW5kKEJhc2VDb21tYW5kKToK KyAgICAiIiIKKyAgICBjbGFzcyBRdWVyeVRvb2xDb21tYW5kKEJhc2VDb21t YW5kKQorCisgICAgICAgIEl0IGlzIGEgZGVyaXZlZCBjbGFzcyBmb3IgUXVl cnkgVG9vbC4KKyAgICAiIiIKKyAgICBvYmplY3RfdHlwZSA9ICdxdWVyeV90 b29sJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsICoqa3dhcmdzKToKKyAg ICAgICAgIyBjYWxsIGJhc2UgY2xhc3MgaW5pdCB0byBmZXRjaCB0aGUgdGFi bGUgbmFtZQorICAgICAgICBzdXBlcihRdWVyeVRvb2xDb21tYW5kLCBzZWxm KS5fX2luaXRfXygqKmt3YXJncykKKworICAgICAgICBzZWxmLmNvbm5faWQg PSBOb25lCisgICAgICAgIHNlbGYuYXV0b19yb2xsYmFjayA9IEZhbHNlCisg ICAgICAgIHNlbGYuYXV0b19jb21taXQgPSBUcnVlCisKKyAgICBkZWYgZ2V0 X3NxbChzZWxmKToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBj YW5fZWRpdChzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBk ZWYgY2FuX2ZpbHRlcihzZWxmKToKKyAgICAgICAgcmV0dXJuIEZhbHNlCisK KyAgICBkZWYgc2V0X2Nvbm5lY3Rpb25faWQoc2VsZiwgY29ubl9pZCk6Cisg ICAgICAgIHNlbGYuY29ubl9pZCA9IGNvbm5faWQKKworICAgIGRlZiBzZXRf YXV0b19yb2xsYmFjayhzZWxmLCBhdXRvX3JvbGxiYWNrKToKKyAgICAgICAg c2VsZi5hdXRvX3JvbGxiYWNrID0gYXV0b19yb2xsYmFjaworCisgICAgZGVm IHNldF9hdXRvX2NvbW1pdChzZWxmLCBhdXRvX2NvbW1pdCk6CisgICAgICAg IHNlbGYuYXV0b19jb21taXQgPSBhdXRvX2NvbW1pdAorCmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Ivc3RhdGljL2Nzcy9zcWxl ZGl0b3IuY3NzIGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRp Yy9jc3Mvc3FsZWRpdG9yLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi45OThhYTY4Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3Bn YWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9jc3Mvc3FsZWRpdG9yLmNz cwpAQCAtMCwwICsxLDI1MCBAQAorI21haW4tZWRpdG9yX3BhbmVsIHsKKyAg aGVpZ2h0OiAxMDAlOworICB3aWR0aDogMTAwJTsKK30KKworLnNxbC1lZGl0 b3IgeworICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgICBsZWZ0OiAwOwor ICAgIHJpZ2h0OiAwOworICAgIHRvcCA6IDA7CisgICAgYm90dG9tOiAwOwor fQorCisuc3FsLWVkaXRvci1idXN5LWZldGNoaW5nIHsKKyAgcG9zaXRpb246 YWJzb2x1dGU7CisgIGxlZnQ6IDA7CisgIHRvcDogNDFweDsKKyAgYm90dG9t OiAwOworICByaWdodDogMDsKKyAgbWFyZ2luOjA7CisgIHBhZGRpbmc6IDA7 CisgIGJhY2tncm91bmQ6IGJsYWNrOworICBvcGFjaXR5OiAwLjQ7CisgIHot aW5kZXg6IDEwMDsKK30KKworLnNxbC1lZGl0b3ItYnVzeS1pY29uIHsKKyAg cG9zaXRpb246YWJzb2x1dGU7CisgIGxlZnQ6IDQ1JTsKKyAgdG9wOiA0MCU7 Cit9CisKKy5zcWwtZWRpdG9yLWJ1c3ktdGV4dCB7CisgIHBvc2l0aW9uOmFi c29sdXRlOworICBsZWZ0OiA0MiU7CisgIHRvcDogNTAlOworICBmb250LXNp emU6IDIwcHg7Cit9CisKKyNlZGl0b3ItcGFuZWwgeworICBwb3NpdGlvbjog YWJzb2x1dGU7CisgIGxlZnQ6IDA7CisgIHJpZ2h0OiAwOworICB0b3AgOiA2 NXB4OworICBib3R0b206IDA7CisgIHotaW5kZXg6IDA7Cit9CisKKy5lZGl0 b3ItdGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMzMsIDgxLCAx MjgpOworICBwYWRkaW5nOiAycHg7CisgIHRleHQtY29sb3I6IHdoaXRlOwor ICBjb2xvcjogd2hpdGU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisu c3FsLWVkaXRvci1idG4tZ3JvdXAgeworICBiYWNrZ3JvdW5kLWNvbG9yOiAj RDJEMkQyOworICBib3JkZXI6IDJweCBzb2xpZCAjQTlBOUE5OworICBsZWZ0 OiAwcHg7CisgIHJpZ2h0OiAwcHg7CisgIHBhZGRpbmc6IDJweDsKK30KKwor LnNxbC1lZGl0b3ItYnRuLWdyb3VwIGJ1dHRvbiB7CisgIHBhZGRpbmc6IDVw eDsKK30KKworLnNxbC1lZGl0b3ItYnRuLWdyb3VwIGJ1dHRvbi5kcm9wZG93 bi10b2dnbGUgeworICBwYWRkaW5nLWxlZnQ6IDVweCAhaW1wb3J0YW50Owor ICBwYWRkaW5nLXJpZ2h0OiA1cHggIWltcG9ydGFudDsKK30KKworLnNxbC1l ZGl0b3ItYnRuLWdyb3VwIC5kcm9wZG93bi1tZW51IHsKKyAgbWluLXdpZHRo OiBpbml0aWFsOworfQorCisuc3FsLWVkaXRvci1idG4tZ3JvdXAgLmJhY2tn cmlkLWZpbHRlci5mb3JtLXNlYXJjaCB7CisgIHBvc2l0aW9uOiByZWxhdGl2 ZTsKKyAgd2lkdGg6IDI0OHB4OworICBoZWlnaHQ6IDMwcHg7CisgIGZsb2F0 OiByaWdodDsKKyAgbWFyZ2luLXRvcDogMnB4OworICBtYXJnaW4tcmlnaHQ6 IDEwcHg7Cit9CisKKyNvdXRwdXQtcGFuZWwgLndjRG9ja2VyIHsKKyAgdG9w OiAwcHg7CisgIGJvdHRvbTogMHB4OworICBoZWlnaHQ6IGF1dG87Cit9CisK KyNvdXRwdXQtcGFuZWwgLndjRnJhbWVDZW50ZXIgeworICBvdmVyZmxvdzog aGlkZGVuOworfQorCisuc3FsLWVkaXRvci1ncmlkLWNvbnRhaW5lciB7Cisg IGhlaWdodDogY2FsYygxMDAlIC0gNDVweCk7CisgIG92ZXJmbG93OiBhdXRv OworfQorCisjZGF0YWdyaWQtcGFnaW5hdG9yIHsKKyAgYm90dG9tOiAwcHg7 CisgIHdpZHRoOiAxMDAlOworICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsK K30KKworLypNb3ZlIGhlIG9yaWdpbmFsIGNoZWNrYm94IG91dCBvZiB0aGUg d2F5ICovCisjZGF0YWdyaWQgLnNlbGVjdC1yb3ctY2VsbCAuc3FsZWRpdG9y LWNoZWNrYm94IHsKKyAgcG9zaXRpb246IGFic29sdXRlOworICBsZWZ0OiAt OTk5OXB4OworfQorLypBbGlnbiB0aGUgaWNvbiBhbmQgdGhlIGxhYmVsLmRl bGV0YWJsZSB0ZXh0IHRvIHNhbWUgaGVpZ2h0IHVzaW5nIHRhYmwtY2VsbCBk aXNwbGF5Ki8KKy8qSWYgeW91IGNoYW5nZSB0aGUgZm9udC1zaXplIG9mIHRo ZSB0ZXh0LCB5b3UgbWF5IGFsc28gd2FudCB0byBkbyBzb20gcGFkZGluZyBv ciBhbGlnbmhtZW50IGNoYW5nZXMgaGVyZSovCisjZGF0YWdyaWQgLnNxbGVk aXRvci1jaGVja2JveCB+IGxhYmVsLmRlbGV0YWJsZSA+ICBzcGFuIHsKKyAg ZGlzcGxheTogdGFibGUtY2VsbDsKKyAgdmVydGljYWwtYWxpZ246IG1pZGRs ZTsKKyAgcGFkZGluZy1sZWZ0OiA1cHg7Cit9CisvKlRoZSBsYWJlbC5kZWxl dGFibGUgd2lsbCBjb250YWluIHRoZSBpY29uIGFuZCB0aGUgdGV4dCwgd2ls bCBncmFiIHRoZSBmb2N1cyovCisjZGF0YWdyaWQgLnNlbGVjdC1yb3ctY2Vs bCAuc3FsZWRpdG9yLWNoZWNrYm94ICsgbGFiZWwuZGVsZXRhYmxlIHsKKyAg Y3Vyc29yOiBwb2ludGVyOworICBkaXNwbGF5OiB0YWJsZTsKK30KKy8qVGhl IGljb24gY29udGFpbmVyLCBzZXQgaXQgdG8gZml4ZWQgc2l6ZSBhbmQgZm9u dCBzaXplLCB0aGUgcGFkZGluZyBpcyB0byBhbGlnbiB0aGUgYm9yZGVyKi8K Ky8qSWYgeW91IGNoYW5nZSB0aGUgZm9udC1zaXplIG9mIHRoaXMgaWNvbiwg YmUgc3VyZSB0byBhZGp1c3QgdGhlIG1pbi13aWR0aCBhcyB3ZWxsKi8KKyNk YXRhZ3JpZCAuc2VsZWN0LXJvdy1jZWxsIC5zcWxlZGl0b3ItY2hlY2tib3gg KyBsYWJlbC5kZWxldGFibGU6YmVmb3JlIHsKKyAgZm9udC1mYW1pbHk6ICdG b250QXdlc29tZSc7CisgIGZvbnQtc2l6ZTogc21hbGw7CisgIGZvbnQtd2Vp Z2h0OiBub3JtYWw7CisgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgbWlu LXdpZHRoOiAyOHB4OworfQorCisvKiB0b2dnbGUgZm9udCBhd2Vzb21lIGlj b24qLworI2RhdGFncmlkIC5zZWxlY3Qtcm93LWNlbGwgLnNxbGVkaXRvci1j aGVja2JveDpjaGVja2VkICsgbGFiZWw6YmVmb3JlIHsKKyAgY29udGVudDog IlxmMDE0IjsKK30KKworI2RhdGFncmlkIC5zZWxlY3Qtcm93LWNlbGwgLnNx bGVkaXRvci1jaGVja2JveDpub3QoOmNoZWNrZWQpICsgbGFiZWw6YmVmb3Jl IHsKKyAgY29udGVudDogIlxmMDE0IjsKK30KKworLypEbyBzb21ldGhpbmcg b24gZm9jdXMsIGluIHRoaXMgY2FzZSBzaG93IGRhc2hlZCBib3JkZXIqLwor I2RhdGFncmlkIC5zZWxlY3Qtcm93LWNlbGwgLnNxbGVkaXRvci1jaGVja2Jv eDpmb2N1cyArIGxhYmVsOmJlZm9yZSB7CisgIGJvcmRlcjogMXB4IGRhc2hl ZCAjNzc3OworfQorCisvKkRvIHNvbWV0aGluZyBvbiBob3ZlciwgaW4gdGhp cyBjYXNlIGNoYW5nZSB0aGUgaW1hZ2UgY29sb3IqLworI2RhdGFncmlkIC5z ZWxlY3Qtcm93LWNlbGwgLnNxbGVkaXRvci1jaGVja2JveDpob3ZlciArIGxh YmVsOmJlZm9yZSB7CisgIGNvbG9yOiAjNjdhZmU1OworfQorCisucGdhZG1p bi1yb3ctZGVsZXRlZCB0ZCB7CisgIGNvbG9yOiByZWQgIWltcG9ydGFudDsK KyAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7Cit9CisKKy5maWx0 ZXItY29udGFpbmVyIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBiYWNr Z3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgYm9yZGVyOiAxcHggc29saWQgYmxh Y2s7CisgIGJveC1zaGFkb3c6IDAuNXB4IDAuNXB4IDVweCAjMDAwOworICBw YWRkaW5nLWJvdHRvbTogMzBweDsKKyAgei1pbmRleDogMTsKKyAgbWFyZ2lu OiBhdXRvOworICB3aWR0aDogNjAlOworfQorCisuZmlsdGVyLWNvbnRhaW5l ciAuQ29kZU1pcnJvci1zY3JvbGwgeworICBtaW4taGVpZ2h0OiAxMjBweDsK KyAgbWF4LWhlaWdodDogMTIwcHg7Cit9CisKKy5maWx0ZXItY29udGFpbmVy IC5zcWwtdGV4dGFyZWF7CisgIGJveC1zaGFkb3c6IDAuMXB4IDAuMXB4IDNw eCAjMDAwOworICBtYXJnaW4tYm90dG9tOiA1cHg7Cit9CisKKy5maWx0ZXIt dGl0bGUgeworICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMzMsIDgxLCAxMjgp OworICBwYWRkaW5nOiAycHg7CisgIHRleHQtY29sb3I6IHdoaXRlOworICBj b2xvcjogd2hpdGU7CisgIGZvbnQtd2VpZ2h0OiBib2xkOworfQorCisjZmls dGVyIC5idG4tZ3JvdXAgeworICBtYXJnaW4tcmlnaHQ6IDJweDsKKyAgZmxv YXQ6IHJpZ2h0OworfQorCisjZmlsdGVyIC5idG4tZ3JvdXAgPiBidXR0b24g eworICBwYWRkaW5nOiAzcHg7CisgIGZvbnQtd2VpZ2h0OiA3MDA7Cit9CisK KyNmaWx0ZXIgLmJ0bi1ncm91cCAuYnRuLXByaW1hcnkgeworICBtYXJnaW46 IGF1dG8gIWltcG9ydGFudDsKK30KKworLmhhcy1zZWxlY3QtYWxsIHRhYmxl IHRoZWFkIHRyIHRoOm50aC1jaGlsZCgxKSwKKy5oYXMtc2VsZWN0LWFsbCB0 YWJsZSB0Ym9keSB0ciB0ZDpudGgtY2hpbGQoMSkgeworICB3aWR0aDogMzVw eCAhaW1wb3J0YW50OworICBtYXgtd2lkdGg6IDM1cHggIWltcG9ydGFudDsK KyAgbWluLXdpZHRoOiAzNXB4ICFpbXBvcnRhbnQ7Cit9CisKKy5zcWwtZWRp dG9yLW1lc3NhZ2UgeworICB3aGl0ZS1zcGFjZTpwcmUtd3JhcDsKKyAgZm9u dC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgcGFkZGluZy10b3A6IDVweDsKKyAg cGFkZGluZy1sZWZ0OiAxMHB4OworfQorCisubGltaXQtZW5hYmxlZCB7Cisg IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworfQorCisuc3FsLWVkaXRvci1o aXN0b3J5LWNvbnRhaW5lciB7CisgIGhlaWdodDogMTAwJTsKKyAgb3ZlcmZs b3c6IGF1dG87Cit9CisKKy5zcWwtc3RhdHVzLWNlbGwgeworICBtYXgtd2lk dGg6IDMwcHg7Cit9CisKKy5idG4tY2lyY2xlIHsKKyAgd2lkdGg6IDIwcHg7 CisgIGhlaWdodDogMjBweDsKKyAgdGV4dC1hbGlnbjogY2VudGVyOworICBw YWRkaW5nOiAwOworICBmb250LXNpemU6IDEwcHg7CisgIGxpbmUtaGVpZ2h0 OiAxLjQyODU3MTQyOTsKKyAgYm9yZGVyLXJhZGl1czogMTBweDsKK30KKwor LnZpc2liaWxpdHktaGlkZGVuIHsKKyAgdmlzaWJpbGl0eTogaGlkZGVuOwor fQorCisuc3FsLWVkaXRvci1tYXJrIHsKKyAgYm9yZGVyLWJvdHRvbTogMnB4 IGRvdHRlZCByZWQ7Cit9CisKKyNlZGl0b3ItcGFuZWwgLkNvZGVNaXJyb3It YWN0aXZlbGluZS1iYWNrZ3JvdW5kIHsKKyAgYmFja2dyb3VuZDogIzVCOUNF RjsKKyAgY29sb3I6IHdoaXRlOworfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vdG9vbHMvc3FsZWRpdG9yL3RlbXBsYXRlcy9zcWxlZGl0b3IvanMvc3Fs ZWRpdG9yLmpzIGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3RlbXBs YXRlcy9zcWxlZGl0b3IvanMvc3FsZWRpdG9yLmpzCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNjZlZTIKLS0tIC9kZXYvbnVsbAor KysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVtcGxhdGVzL3Nx bGVkaXRvci9qcy9zcWxlZGl0b3IuanMKQEAgLTAsMCArMSwyMTY0IEBACitk ZWZpbmUoCisgIFsnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAnYWxlcnRpZnkn LCAncGdhZG1pbicsICdiYWNrYm9uZScsICdiYWNrZ3JpZCcsICdjb2RlbWly cm9yJywKKyAgICdjb2RlbWlycm9yL21vZGUvc3FsJywgJ2NvZGVtaXJyb3Iv YWRkb24vc2VsZWN0aW9uL21hcmstc2VsZWN0aW9uJywgJ2NvZGVtaXJyb3Iv YWRkb24vc2VsZWN0aW9uL2FjdGl2ZS1saW5lJywKKyAgICdiYWNrZ3JpZC5z ZWxlY3QuYWxsJywgJ2JhY2tib25lLnBhZ2luYXRvcicsICdiYWNrZ3JpZC5w YWdpbmF0b3InLCAnYmFja2dyaWQuZmlsdGVyJywKKyAgICdib290c3RyYXAn LCAncGdhZG1pbi5icm93c2VyJywgJ3djZG9ja2VyJ10sCisgIGZ1bmN0aW9u KCQsIF8sIGFsZXJ0aWZ5LCBwZ0FkbWluLCBCYWNrYm9uZSwgQmFja2dyaWQs IENvZGVNaXJyb3IpIHsKKworICAgIC8vIFNvbWUgc2NyaXB0cyBkbyBleHBv cnQgdGhlaXIgb2JqZWN0IGluIHRoZSB3aW5kb3cgb25seS4KKyAgICAvLyBH ZW5lcmFsbHkgdGhlIG9uZSwgd2hpY2ggZG8gbm8gaGF2ZSBBTUQgc3VwcG9y dC4KKyAgICB2YXIgd2NEb2NrZXIgPSB3aW5kb3cud2NEb2NrZXIsCisgICAg ICBwZ0Jyb3dzZXIgPSBwZ0FkbWluLkJyb3dzZXI7CisKKyAgICAvKiBSZXR1 cm4gYmFjaywgdGhpcyBoYXMgYmVlbiBjYWxsZWQgbW9yZSB0aGFuIG9uY2Ug Ki8KKyAgICBpZiAocGdBZG1pbi5TcWxFZGl0b3IpCisgICAgICByZXR1cm4g cGdBZG1pbi5TcWxFZGl0b3I7CisKKyAgICAvKiBHZXQgdGhlIGZ1bmN0aW9u IGRlZmluaXRpb24gZnJvbQorICAgICAqIGh0dHA6Ly9zdGFja292ZXJmbG93 LmNvbS9xdWVzdGlvbnMvMTM0OTQwNC9nZW5lcmF0ZS1hLXN0cmluZy1vZi01 LXJhbmRvbS1jaGFyYWN0ZXJzLWluLWphdmFzY3JpcHQvMzUzMDI5NzUjMzUz MDI5NzUKKyAgICAgKi8KKyAgICBmdW5jdGlvbiBlcGljUmFuZG9tU3RyaW5n KGIpe2Zvcih2YXIgYT0oTWF0aC5yYW5kb20oKSpldmFsKCIxZSIrfn4oNTAq TWF0aC5yYW5kb20oKSs1MCkpKS50b1N0cmluZygzNikuc3BsaXQoIiIpLGM9 MztjPGEubGVuZ3RoO2MrKyljPT1+fihNYXRoLnJhbmRvbSgpKmMpKzEmJmFb Y10ubWF0Y2goL1thLXpdLykmJihhW2NdPWFbY10udG9VcHBlckNhc2UoKSk7 YT1hLmpvaW4oIiIpO2E9YS5zdWJzdHIofn4oTWF0aC5yYW5kb20oKSp+fihh Lmxlbmd0aC8zKSksfn4oTWF0aC5yYW5kb20oKSooYS5sZW5ndGgtfn4oYS5s ZW5ndGgvMyoyKSsxKSkrfn4oYS5sZW5ndGgvMyoyKSk7aWYoMjQ+YilyZXR1 cm4gYj9hLnN1YnN0cihhLGIpOmE7YT1hLnN1YnN0cihhLGIpO2lmKGEubGVu Z3RoPT1iKXJldHVybiBhO2Zvcig7YS5sZW5ndGg8YjspYSs9ZXBpY1JhbmRv bVN0cmluZygpO3JldHVybiBhLnN1YnN0cigwLGIpfTsKKworICAgIC8vIERl ZmluaW5nIHRoZSBiYWNrYm9uZSBtb2RlbCBmb3IgdGhlIHNxbCBncmlkCisg ICAgdmFyIHNxbEVkaXRvclZpZXdNb2RlbCA9IEJhY2tib25lLk1vZGVsLmV4 dGVuZCh7CisKKyAgICAgIC8qIEtlZXAgdHJhY2sgb2YgdmFsdWVzIGZvciB0 aGUgb3JpZ2luYWwgcHJpbWFyeSBrZXlzIGZvciBsYXRlciByZWZlcmVuY2Us CisgICAgICAgKiB0byBhbGxvdyB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIHBy aW1hcnkga2V5cyBpbiB0aGUgbW9kZWwsIHdoaWNoIHdpbGwgYmUKKyAgICAg ICAqIHJlcXVpcmVkIHRvIGlkZW50aWZ5IHRoZSB2YWx1ZSBvZiBhbnkgcm93 IGluIHRoZSBkYXRhZ3JpZCBmb3IgdGhlIHJlbGF0aW9uLgorICAgICAgICov CisgICAgICBwYXJzZTogZnVuY3Rpb24oZGF0YSkgeworICAgICAgICB2YXIg c2VsZiA9IHRoaXM7CisgICAgICAgIHNlbGYuZ3JpZF9rZXlzID0ge307Cisg ICAgICAgIHNlbGYubWFya2VkX2Zvcl9kZWxldGlvbiA9IGZhbHNlOworICAg ICAgICBzZWxmLmNoYW5nZWRfZGF0YSA9IGZhbHNlOworCisgICAgICAgIGlm IChkYXRhICYmICdwcmltYXJ5X2tleXMnIGluIHNlbGYgJiYgc2VsZi5wcmlt YXJ5X2tleXMgJiYgXy5zaXplKHNlbGYucHJpbWFyeV9rZXlzKSA+IDApIHsK KyAgICAgICAgICBfLmVhY2goc2VsZi5wcmltYXJ5X2tleXMsIGZ1bmN0aW9u ICh2YWx1ZSwga2V5KSB7CisgICAgICAgICAgICAvLyBBc3N1bXB0aW9uIC0g dGhlIGRhdGEsIHdoaWNoIGFyZSBjb21pbmcgd2lsbCBhbHdheXMgaGF2ZSBk YXRhIGZvciBwcmltYXJ5X2tleXMKKyAgICAgICAgICAgIHNlbGYuZ3JpZF9r ZXlzW2tleV0gPSBkYXRhW2tleV07CisgICAgICAgICAgfSk7CisgICAgICAg IH0KKworICAgICAgICByZXR1cm4gZGF0YTsKKyAgICAgIH0sCisgICAgICAv KiBXZSBhbHNvIG5lZWQgcHJpbWFyeSBrZXkgYWxvbmcgd2l0aCB0aGUgb3Jp Z2luYWwgZGF0YSwKKyAgICAgICAqIHdoaWNoIGlzIHJlcXVpcmVkIHRvIGlk ZW50aWZ5IHRoaXMgcm93IGluIHRoZSBkYXRhYmFzZSBmb3IgbW9kaWZpY2F0 aW9uLgorICAgICAgICovCisgICAgICB0b0pTT046IGZ1bmN0aW9uKG92ZXJy aWRkZW4sIGtleXNfb25seSkgeworICAgICAgICB2YXIgcmVzID0gQmFja2Jv bmUuTW9kZWwucHJvdG90eXBlLnRvSlNPTi5hcHBseSh0aGlzLCBhcmd1bWVu dHMpOworICAgICAgICBpZiAoIW92ZXJyaWRkZW4pIHsKKyAgICAgICAgICBy ZXR1cm4gcmVzOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtleXNfb25s eSkKKyAgICAgICAgICByZXR1cm4gdGhpcy5ncmlkX2tleXM7CisKKyAgICAg ICAgcmV0dXJuIHsKKyAgICAgICAgICAna2V5cyc6IHRoaXMuZ3JpZF9rZXlz LAorICAgICAgICAgICdkYXRhJzogcmVzLAorICAgICAgICAgICdtYXJrZWRf Zm9yX2RlbGV0aW9uJzogdGhpcy5tYXJrZWRfZm9yX2RlbGV0aW9uCisgICAg ICAgIH07CisgICAgICB9LAorCisgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHVw ZGF0ZXMgdGhlIHByaW1hcnkga2V5IGlmIGNoYW5nZWQuCisgICAgICB1cGRh dGVfa2V5czogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzZWxmID0gdGhp czsKKworICAgICAgICAvKiBJZiAnZ3JpZF9rZXlzJyBwcmVzZW50IGluIHRo ZSBjaGFuZ2VkIG9iamVjdAorICAgICAgICAgKiB0aGVuIGl0IGlzIGFuIHVw ZGF0ZSBlbHNlIGluc2VydC4KKyAgICAgICAgICovCisgICAgICAgIGlmICgn Z3JpZF9rZXlzJyBpbiBzZWxmKSB7CisgICAgICAgICAgLyogSXRlcmF0ZSB0 aHJvdWdoIHByaW1hcnkga2V5cyBhbmQgY2hlY2sgaWYgdGhlIGtleQorICAg ICAgICAgICAqIGlzIHVwZGF0ZWQgb3Igbm90LiBJZiBpdCBpcyB1cGRhdGVk IHdlIG5lZWQgdG8gdXBkYXRlCisgICAgICAgICAgICogdGhlIGdyaWRfa2V5 cyBvZiB0aGUgbW9kZWwgYXMgd2VsbC4KKyAgICAgICAgICAgKi8KKyAgICAg ICAgICBfLmVhY2goc2VsZi5wcmltYXJ5X2tleXMsIGZ1bmN0aW9uICh2YWx1 ZSwga2V5KSB7CisgICAgICAgICAgICBpZiAoc2VsZi5ncmlkX2tleXNba2V5 XSAhPSBzZWxmLmF0dHJpYnV0ZXNba2V5XSkKKyAgICAgICAgICAgICAgICBz ZWxmLmdyaWRfa2V5c1trZXldID0gc2VsZi5hdHRyaWJ1dGVzW2tleV0KKyAg ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAg ICAgICBzZWxmLmdyaWRfa2V5cyA9IHt9OworICAgICAgICAgIC8qIEl0ZXJh dGUgdGhyb3VnaCBwcmltYXJ5IGtleXMgYW5kIGluc2VydAorICAgICAgICAg ICAqIHRoZSB2YWx1ZXMgaW4gbW9kZWxzIGdyaWRfa2V5cy4KKyAgICAgICAg ICAgKi8KKyAgICAgICAgICBfLmVhY2goc2VsZi5wcmltYXJ5X2tleXMsIGZ1 bmN0aW9uICh2YWx1ZSwga2V5KSB7CisgICAgICAgICAgICBzZWxmLmdyaWRf a2V5c1trZXldID0gc2VsZi5hdHRyaWJ1dGVzW2tleV0KKyAgICAgICAgICB9 KTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0pOworCisgICAgLy8gU3Vw cG9zZSB5b3Ugd2FudCB0byBoaWdobGlnaHQgdGhlIGVudGlyZSByb3cgd2hl biBhbiBlZGl0YWJsZSBmaWVsZCBpcyBmb2N1c2VkCisgICAgdmFyIEZvY3Vz YWJsZVJvdyA9IEJhY2tncmlkLlJvdy5leHRlbmQoeworICAgICAgaGlnaGxp Z2h0Q29sb3I6ICIjRDlFREY3IiwKKyAgICAgIGV2ZW50czogeworICAgICAg ICBmb2N1c2luOiAicm93Rm9jdXNlZCIsCisgICAgICAgIGZvY3Vzb3V0OiAi cm93TG9zdEZvY3VzIgorICAgICAgfSwKKyAgICAgIHJvd0ZvY3VzZWQ6IGZ1 bmN0aW9uKCkgeworICAgICAgICB0aGlzLm1vZGVsLnRyaWdnZXIoJ2JhY2tn cmlkOnJvdzpzZWxlY3RlZCcsIHRoaXMpOworICAgICAgICB0aGlzLmVsLnN0 eWxlLmJhY2tncm91bmRDb2xvciA9IHRoaXMuaGlnaGxpZ2h0Q29sb3I7Cisg ICAgICB9LAorICAgICAgcm93TG9zdEZvY3VzOiBmdW5jdGlvbigpIHsKKyAg ICAgICAgdGhpcy5tb2RlbC50cmlnZ2VyKCdiYWNrZ3JpZDpyb3c6ZGVzZWxl Y3RlZCcsIHRoaXMpOworICAgICAgfQorICAgIH0pOworCisgICAgLyoKKyAg ICAgKiBFeHRlbmQgdGhlIEZvY3VzYWJsZVJvdyByb3cgdXNlZCB3aGVuIHVz ZXIgbWFya2VkCisgICAgICogdGhlIHJvdyBmb3IgZGVsZXRpb24uCisgICAg ICovCisgICAgdmFyIFNxbEVkaXRvckN1c3RvbVJvdyA9IEZvY3VzYWJsZVJv dy5leHRlbmQoeworICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oKSB7Cisg ICAgICAgIEJhY2tncmlkLlJvdy5wcm90b3R5cGUuaW5pdGlhbGl6ZS5hcHBs eSh0aGlzLCBhcmd1bWVudHMpOworICAgICAgICBfLmJpbmRBbGwodGhpcywg J3JlbmRlcicpOworCisgICAgICAgIC8vIExpc3RlbiBmb3IgdGhlIG1hcmsg Zm9yIGRlbGV0aW9uIGV2ZW50IGFuZCBjYWxsIHJlbmRlciBtZXRob2QuCisg ICAgICAgIHRoaXMubW9kZWwub24oJ2JhY2tncmlkOnJvdzptYXJrOmRlbGV0 aW9uJywgdGhpcy5yZW5kZXIpOworICAgICAgfSwKKyAgICAgIHJlbW92ZTog ZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMubW9kZWwub2ZmKCdiYWNrZ3Jp ZDpyb3c6bWFyazpkZWxldGlvbicsIHRoaXMucmVuZGVyKTsKKyAgICAgICAg QmFja2dyaWQuUm93LnByb3RvdHlwZS5yZW1vdmUuYXBwbHkodGhpcywgYXJn dW1lbnRzKTsKKyAgICAgIH0sCisgICAgICByZW5kZXI6IGZ1bmN0aW9uKCkg eworICAgICAgICB2YXIgcmVzID0gQmFja2dyaWQuUm93LnByb3RvdHlwZS5y ZW5kZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAgICAgICBpZiAo dGhpcy5tb2RlbC5tYXJrZWRfZm9yX2RlbGV0aW9uKQorICAgICAgICAgIHRo aXMuJGVsLmFkZENsYXNzKCdwZ2FkbWluLXJvdy1kZWxldGVkJyk7CisgICAg ICAgIGVsc2UKKyAgICAgICAgICB0aGlzLiRlbC5yZW1vdmVDbGFzcygncGdh ZG1pbi1yb3ctZGVsZXRlZCcpOworCisgICAgICAgIHJldHVybiByZXM7Cisg ICAgICB9CisgICAgfSk7CisKKyAgICAvLyBEZWZpbmluZyBCYWNrYm9uZSB2 aWV3IGZvciB0aGUgc3FsIGdyaWQuCisgICAgdmFyIFNRTEVkaXRvclZpZXcg PSBCYWNrYm9uZS5WaWV3LmV4dGVuZCh7CisgICAgICBpbml0aWFsaXplOiBm dW5jdGlvbihvcHRzKSB7CisgICAgICAgIHRoaXMuJGVsID0gb3B0cy5lbDsK KyAgICAgICAgdGhpcy5oYW5kbGVyID0gb3B0cy5oYW5kbGVyOworICAgICAg fSwKKworICAgICAgLy8gQmluZCBhbGwgdGhlIGV2ZW50cworICAgICAgZXZl bnRzOiB7CisgICAgICAgICJjbGljayAjYnRuLXNhdmUiOiAib25fc2F2ZSIs CisgICAgICAgICJjbGljayAjYnRuLWFkZC1yb3ciOiAib25fYWRkIiwKKyAg ICAgICAgImNsaWNrICNidG4tZmlsdGVyIjogIm9uX3Nob3dfZmlsdGVyIiwK KyAgICAgICAgImNsaWNrICNidG4taW5jbHVkZS1maWx0ZXIiOiAib25faW5j bHVkZV9maWx0ZXIiLAorICAgICAgICAiY2xpY2sgI2J0bi1leGNsdWRlLWZp bHRlciI6ICJvbl9leGNsdWRlX2ZpbHRlciIsCisgICAgICAgICJjbGljayAj YnRuLXJlbW92ZS1maWx0ZXIiOiAib25fcmVtb3ZlX2ZpbHRlciIsCisgICAg ICAgICJjbGljayAjYnRuLWFwcGx5IjogIm9uX2FwcGx5IiwKKyAgICAgICAg ImNsaWNrICNidG4tY2FuY2VsIjogIm9uX2NhbmNlbCIsCisgICAgICAgICJj bGljayAjYnRuLWNvcHkiOiAib25fY29weSIsCisgICAgICAgICJjbGljayAj YnRuLXBhc3RlIjogIm9uX3Bhc3RlIiwKKyAgICAgICAgImNsaWNrICNidG4t Zmxhc2giOiAib25fZmxhc2giLAorICAgICAgICAiY2xpY2sgI2J0bi1jYW5j ZWwtcXVlcnkiOiAib25fY2FuY2VsX3F1ZXJ5IiwKKyAgICAgICAgImNsaWNr ICNidG4tZG93bmxvYWQiOiAib25fZG93bmxvYWQiLAorICAgICAgICAiY2xp Y2sgI2J0bi1jbGVhciI6ICJvbl9jbGVhciIsCisgICAgICAgICJjbGljayAj YnRuLWF1dG8tY29tbWl0IjogIm9uX2F1dG9fY29tbWl0IiwKKyAgICAgICAg ImNsaWNrICNidG4tYXV0by1yb2xsYmFjayI6ICJvbl9hdXRvX3JvbGxiYWNr IiwKKyAgICAgICAgImNsaWNrICNidG4tY2xlYXItaGlzdG9yeSI6ICJvbl9j bGVhcl9oaXN0b3J5IiwKKyAgICAgICAgImNoYW5nZSAubGltaXQiOiAib25f bGltaXRfY2hhbmdlIgorICAgICAgfSwKKworICAgICAgLyogRGVmaW5pbmcg dGhlIHRlbXBsYXRlIHRvIGNyZWF0ZSBidXR0b25zIGFuZCBkaXYgdG8gcmVu ZGVyCisgICAgICAgKiB0aGUgYmFja2dyaWQgaW5zaWRlIHRoaXMgZGl2Lgor ICAgICAgICovCisgICAgICB0ZW1wbGF0ZTogXy50ZW1wbGF0ZShbCisgICAg ICAgICc8ZGl2IGlkPSJidG4tdG9vbGJhciIgY2xhc3M9InNxbC1lZGl0b3It YnRuLWdyb3VwIiByb2xlPSJ0b29sYmFyIiBhcmlhLWxhYmVsPSIiPicsCisg ICAgICAgICAgJzxkaXYgY2xhc3M9ImJ0bi1ncm91cCIgcm9sZT0iZ3JvdXAi IGFyaWEtbGFiZWw9IiI+JywKKyAgICAgICAgICAgICc8YnV0dG9uIGlkPSJi dG4tc2F2ZSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0 IiB0aXRsZT0ie3sgXygnU2F2ZScpIH19IiBkaXNhYmxlZD4nLAorICAgICAg ICAgICAgICAnPGkgY2xhc3M9ImZhIGZhLWZsb3BweS1vIiBhcmlhLWhpZGRl bj0idHJ1ZSI+PC9pPicsCisgICAgICAgICAgICAnPC9idXR0b24+JywKKyAg ICAgICAgICAnPC9kaXY+JywKKyAgICAgICAgICAnPGRpdiBjbGFzcz0iYnRu LWdyb3VwIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iIj4nLAorICAgICAg ICAgICAgJzxidXR0b24gaWQ9ImJ0bi1jb3B5IiB0eXBlPSJidXR0b24iIGNs YXNzPSJidG4gYnRuLWRlZmF1bHQiIHRpdGxlPSJ7eyBfKCdDb3B5IFJvdycp IH19IiBkaXNhYmxlZD4nLAorICAgICAgICAgICAgICAnPGkgY2xhc3M9ImZh IGZhLWZpbGVzLW8iIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+JywKKyAgICAg ICAgICAgICc8L2J1dHRvbj4nLAorICAgICAgICAgICAgJzxidXR0b24gaWQ9 ImJ0bi1wYXN0ZSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZh dWx0IiB0aXRsZT0ie3sgXygnUGFzdGUgUm93JykgfX0iIGRpc2FibGVkPics CisgICAgICAgICAgICAgICc8aSBjbGFzcz0iZmEgZmEtY2xpcGJvYXJkIiBh cmlhLWhpZGRlbj0idHJ1ZSI+PC9pPicsCisgICAgICAgICAgICAnPC9idXR0 b24+JywKKyAgICAgICAgICAnPC9kaXY+JywKKyAgICAgICAgICAnPGRpdiBj bGFzcz0iYnRuLWdyb3VwIiByb2xlPSJncm91cCIgYXJpYS1sYWJlbD0iIj4n LAorICAgICAgICAgICAgJzxidXR0b24gaWQ9ImJ0bi1hZGQtcm93IiB0eXBl PSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQiIHRpdGxlPSJ7eyBf KCdBZGQgTmV3IFJvdycpIH19IiBkaXNhYmxlZD4nLAorICAgICAgICAgICAg ICAnPGkgY2xhc3M9ImZhIGZhLXBsdXMiIGFyaWEtaGlkZGVuPSJ0cnVlIj48 L2k+JywKKyAgICAgICAgICAgICc8L2J1dHRvbj4nLAorICAgICAgICAgICc8 L2Rpdj4nLAorICAgICAgICAgICc8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiIHJv bGU9Imdyb3VwIiBhcmlhLWxhYmVsPSIiPicsCisgICAgICAgICAgICAnPGJ1 dHRvbiBpZD0iYnRuLWZpbHRlciIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRu IGJ0bi1kZWZhdWx0IiB0aXRsZT0ie3sgXygnRmlsdGVyJykgfX0iIGRpc2Fi bGVkPicsCisgICAgICAgICAgICAgICc8aSBjbGFzcz0iZmEgZmEtZmlsdGVy IiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPicsCisgICAgICAgICAgICAnPC9i dXR0b24+JywKKyAgICAgICAgICAgICc8YnV0dG9uIGlkPSJidG4tZmlsdGVy LWRyb3Bkb3duIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1 bHQgZHJvcGRvd24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iIGFy aWEtaGFzcG9wdXA9InRydWUiIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIiBkaXNh YmxlZD4nLAorICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9ImNhcmV0Ij48 L3NwYW4+IDxzcGFuIGNsYXNzPSJzci1vbmx5Ij5Ub2dnbGUgRHJvcGRvd248 L3NwYW4+JywKKyAgICAgICAgICAgICc8L2J1dHRvbj4nLAorICAgICAgICAg ICAgJzx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LXJp Z2h0Ij4nLAorICAgICAgICAgICAgICAnPGxpPicsCisgICAgICAgICAgICAg ICAgJzxhIGlkPSJidG4tcmVtb3ZlLWZpbHRlciIgaHJlZj0iIyI+e3sgXygn UmVtb3ZlJykgfX08L2E+JywKKyAgICAgICAgICAgICAgICAnPGEgaWQ9ImJ0 bi1pbmNsdWRlLWZpbHRlciIgaHJlZj0iIyI+e3sgXygnQnkgc2VsZWN0aW9u JykgfX08L2E+JywKKyAgICAgICAgICAgICAgICAnPGEgaWQ9ImJ0bi1leGNs dWRlLWZpbHRlciIgaHJlZj0iIyI+e3sgXygnRXhjbHVkZSBzZWxlY3Rpb24n KSB9fTwvYT4nLAorICAgICAgICAgICAgICAnPC9saT4nLAorICAgICAgICAg ICAgJzwvdWw+JywKKyAgICAgICAgICAnPC9kaXY+JywKKyAgICAgICAgICAn PGRpdiBjbGFzcz0iYnRuLWdyb3VwIiByb2xlPSJncm91cCIgYXJpYS1sYWJl bD0iIj4nLAorICAgICAgICAgICAgJzxzZWxlY3QgY2xhc3M9ImxpbWl0IiBz dHlsZT0iaGVpZ2h0OiAzMHB4OyB3aWR0aDogOTBweDsiIGRpc2FibGVkPics CisgICAgICAgICAgICAgICc8b3B0aW9uIHZhbHVlPSItMSI+Tm8gbGltaXQ8 L29wdGlvbj4nLAorICAgICAgICAgICAgICAnPG9wdGlvbiB2YWx1ZT0iMTAw MCI+MTAwMCByb3dzPC9vcHRpb24+JywKKyAgICAgICAgICAgICAgJzxvcHRp b24gdmFsdWU9IjUwMCI+NTAwIHJvd3M8L29wdGlvbj4nLAorICAgICAgICAg ICAgICAnPG9wdGlvbiB2YWx1ZT0iMTAwIj4xMDAgcm93czwvb3B0aW9uPics CisgICAgICAgICAgICAnPC9zZWxlY3Q+JywKKyAgICAgICAgICAnPC9kaXY+ JywKKyAgICAgICAgICAnPGRpdiBjbGFzcz0iYnRuLWdyb3VwIiByb2xlPSJn cm91cCIgYXJpYS1sYWJlbD0iIj4nLAorICAgICAgICAgICAgJzxidXR0b24g aWQ9ImJ0bi1mbGFzaCIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1k ZWZhdWx0IiB0aXRsZT0ie3sgXygnRXhlY3V0ZS9SZWZyZXNoJykgfX0iPics CisgICAgICAgICAgICAgICc8aSBjbGFzcz0iZmEgZmEtYm9sdCIgYXJpYS1o aWRkZW49InRydWUiPjwvaT4nLAorICAgICAgICAgICAgJzwvYnV0dG9uPics CisgICAgICAgICAgICAnPGJ1dHRvbiBpZD0iYnRuLXF1ZXJ5LWRyb3Bkb3du IiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQgZHJvcGRv d24tdG9nZ2xlIiBkYXRhLXRvZ2dsZT0iZHJvcGRvd24iIGFyaWEtaGFzcG9w dXA9InRydWUiIGFyaWEtZXhwYW5kZWQ9ImZhbHNlIj4nLAorICAgICAgICAg ICAgICAnPHNwYW4gY2xhc3M9ImNhcmV0Ij48L3NwYW4+IDxzcGFuIGNsYXNz PSJzci1vbmx5Ij5Ub2dnbGUgRHJvcGRvd248L3NwYW4+JywKKyAgICAgICAg ICAgICc8L2J1dHRvbj4nLAorICAgICAgICAgICAgJzx1bCBjbGFzcz0iZHJv cGRvd24tbWVudSBkcm9wZG93bi1tZW51Ij4nLAorICAgICAgICAgICAgICAn PGxpPicsCisgICAgICAgICAgICAgICAgJzxhIGlkPSJidG4tYXV0by1jb21t aXQiIGhyZWY9IiMiPicsCisgICAgICAgICAgICAgICAgICAgICc8aSBjbGFz cz0iYXV0by1jb21taXQgZmEgZmEtY2hlY2siIGFyaWEtaGlkZGVuPSJ0cnVl Ij48L2k+JywKKyAgICAgICAgICAgICAgICAgICAgJzxzcGFuPiB7eyBfKCdB dXRvLUNvbW1pdCcpIH19IDwvc3Bhbj4nLAorICAgICAgICAgICAgICAgICc8 L2E+JywKKyAgICAgICAgICAgICAgICAnPGEgaWQ9ImJ0bi1hdXRvLXJvbGxi YWNrIiBocmVmPSIjIj4nLAorICAgICAgICAgICAgICAgICAgICAnPGkgY2xh c3M9ImF1dG8tcm9sbGJhY2sgZmEgZmEtY2hlY2sgdmlzaWJpbGl0eS1oaWRk ZW4iIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+JywKKyAgICAgICAgICAgICAg ICAgICAgJzxzcGFuPiB7eyBfKCdBdXRvLVJvbGxiYWNrJykgfX0gPC9zcGFu PicsCisgICAgICAgICAgICAgICAgJzwvYT4nLAorICAgICAgICAgICAgICAn PC9saT4nLAorICAgICAgICAgICAgJzwvdWw+JywKKyAgICAgICAgICAgICc8 YnV0dG9uIGlkPSJidG4tY2FuY2VsLXF1ZXJ5IiB0eXBlPSJidXR0b24iIGNs YXNzPSJidG4gYnRuLWRlZmF1bHQiIHRpdGxlPSJ7eyBfKCdDYW5jZWwgcXVl cnknKSB9fSIgZGlzYWJsZWQ+JywKKyAgICAgICAgICAgICAgJzxpIGNsYXNz PSJmYSBmYS1zdG9wIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPicsCisgICAg ICAgICAgICAnPC9idXR0b24+JywKKyAgICAgICAgICAnPC9kaXY+JywKKyAg ICAgICAgICAnPGRpdiBjbGFzcz0iYnRuLWdyb3VwIiByb2xlPSJncm91cCIg YXJpYS1sYWJlbD0iIj4nLAorICAgICAgICAgICAgJzxidXR0b24gaWQ9ImJ0 bi1lZGl0IiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRlZmF1bHQi IHRpdGxlPSJ7eyBfKCdFZGl0JykgfX0iPicsCisgICAgICAgICAgICAgICc8 aSBjbGFzcz0iZmEgZmEtcGVuY2lsLXNxdWFyZS1vIiBhcmlhLWhpZGRlbj0i dHJ1ZSI+PC9pPicsCisgICAgICAgICAgICAnPC9idXR0b24+JywKKyAgICAg ICAgICAgICc8YnV0dG9uIGlkPSJidG4tZWRpdC1kcm9wZG93biIgdHlwZT0i YnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1kZWZhdWx0IGRyb3Bkb3duLXRvZ2ds ZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIiBhcmlhLWhhc3BvcHVwPSJ0cnVl IiBhcmlhLWV4cGFuZGVkPSJmYWxzZSI+JywKKyAgICAgICAgICAgICAgJzxz cGFuIGNsYXNzPSJjYXJldCI+PC9zcGFuPiA8c3BhbiBjbGFzcz0ic3Itb25s eSI+VG9nZ2xlIERyb3Bkb3duPC9zcGFuPicsCisgICAgICAgICAgICAnPC9i dXR0b24+JywKKyAgICAgICAgICAgICc8dWwgY2xhc3M9ImRyb3Bkb3duLW1l bnUgZHJvcGRvd24tbWVudSI+JywKKyAgICAgICAgICAgICAgJzxsaT4nLAor ICAgICAgICAgICAgICAgICc8YSBpZD0iYnRuLWNsZWFyIiBocmVmPSIjIj4n LAorICAgICAgICAgICAgICAgICAgICAnPGkgY2xhc3M9ImZhIGZhLWVyYXNl ciIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4nLAorICAgICAgICAgICAgICAg ICAgICAnPHNwYW4+IHt7IF8oJ0NsZWFyIHF1ZXJ5IHdpbmRvdycpIH19IDwv c3Bhbj4nLAorICAgICAgICAgICAgICAgICc8L2E+JywKKyAgICAgICAgICAg ICAgICAnPGEgaWQ9ImJ0bi1jbGVhci1oaXN0b3J5IiBocmVmPSIjIj4nLAor ICAgICAgICAgICAgICAgICAgICAnPGkgY2xhc3M9ImZhIGZhLWVyYXNlciIg YXJpYS1oaWRkZW49InRydWUiPjwvaT4nLAorICAgICAgICAgICAgICAgICAg ICAnPHNwYW4+IHt7IF8oJ0NsZWFyIGhpc3RvcnknKSB9fSA8L3NwYW4+JywK KyAgICAgICAgICAgICAgICAnPC9hPicsCisgICAgICAgICAgICAgICc8L2xp PicsCisgICAgICAgICAgICAnPC91bD4nLAorICAgICAgICAgICc8L2Rpdj4n LAorICAgICAgICAgICc8ZGl2IGNsYXNzPSJidG4tZ3JvdXAiIHJvbGU9Imdy b3VwIiBhcmlhLWxhYmVsPSIiPicsCisgICAgICAgICAgICAnPGJ1dHRvbiBp ZD0iYnRuLWRvd25sb2FkIiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRu LWRlZmF1bHQiIHRpdGxlPSJ7eyBfKCdEb3dubG9hZCBhcyBDU1YnKSB9fSI+ JywKKyAgICAgICAgICAgICAgJzxpIGNsYXNzPSJmYSBmYS1kb3dubG9hZCIg YXJpYS1oaWRkZW49InRydWUiPjwvaT4nLAorICAgICAgICAgICAgJzwvYnV0 dG9uPicsCisgICAgICAgICAgJzwvZGl2PicsCisgICAgICAgICc8L2Rpdj4n LAorICAgICAgICAnPGRpdiBjbGFzcz0iZWRpdG9yLXRpdGxlIj48L2Rpdj4n LAorICAgICAgICAnPGRpdiBpZD0iZmlsdGVyIiBjbGFzcz0iZmlsdGVyLWNv bnRhaW5lciBoaWRkZW4iPicsCisgICAgICAgICAgJzxkaXYgY2xhc3M9ImZp bHRlci10aXRsZSI+RmlsdGVyPC9kaXY+JywKKyAgICAgICAgICAnPGRpdiBj bGFzcz0ic3FsLXRleHRhcmVhIj4nLAorICAgICAgICAgICAgJzx0ZXh0YXJl YSBpZD0ic3FsX2ZpbHRlciIgcm93PSI1Ij48L3RleHRhcmVhPicsCisgICAg ICAgICAgJzwvZGl2PicsCisgICAgICAgICAgJzxkaXYgY2xhc3M9ImJ0bi1n cm91cCI+JywKKyAgICAgICAgICAgICc8YnV0dG9uIGlkPSJidG4tY2FuY2Vs IiB0eXBlPSJidXR0b24iIGNsYXNzPSJidG4gYnRuLWRhbmdlciIgdGl0bGU9 Int7IF8oJ0NhbmNlbCcpIH19Ij4nLAorICAgICAgICAgICAgICAnPGkgY2xh c3M9ImZhIGZhLXRpbWVzIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPiB7eyBf KCdDYW5jZWwnKSB9fScsCisgICAgICAgICAgICAnPC9idXR0b24+JywKKyAg ICAgICAgICAnPC9kaXY+JywKKyAgICAgICAgICAnPGRpdiBjbGFzcz0iYnRu LWdyb3VwIj4nLAorICAgICAgICAgICAgJzxidXR0b24gaWQ9ImJ0bi1hcHBs eSIgdHlwZT0iYnV0dG9uIiBjbGFzcz0iYnRuIGJ0bi1wcmltYXJ5IiB0aXRs ZT0ie3sgXygnQXBwbHknKSB9fSI+JywKKyAgICAgICAgICAgICAgJzxpIGNs YXNzPSJmYSBmYS1jaGVjayIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4ge3sg XygnQXBwbHknKSB9fScsCisgICAgICAgICAgICAnPC9idXR0b24+JywKKyAg ICAgICAgICAnPC9kaXY+JywKKyAgICAgICAgJzwvZGl2PicsCisgICAgICAg ICc8ZGl2IGlkPSJlZGl0b3ItcGFuZWwiPjwvZGl2PicKKyAgICAgICAgXS5q b2luKCJcbiIpKSwKKworICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2Vk IHRvIHJlbmRlciB0aGUgdGVtcGxhdGUuCisgICAgICByZW5kZXI6IGZ1bmN0 aW9uKCkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAg Ly8gUmVuZGVyIGhlYWRlciBvbmx5LgorICAgICAgICBzZWxmLiRlbC5lbXB0 eSgpOworICAgICAgICBzZWxmLiRlbC5odG1sKHNlbGYudGVtcGxhdGUoKSk7 CisKKyAgICAgICAgJCgnLmVkaXRvci10aXRsZScpLnRleHQoc2VsZi5lZGl0 b3JfdGl0bGUpOworCisgICAgICAgIHZhciBmaWx0ZXIgPSBzZWxmLiRlbC5m aW5kKCcjc3FsX2ZpbHRlcicpOworCisgICAgICAgIHNlbGYuZmlsdGVyX29i aiA9IENvZGVNaXJyb3IuZnJvbVRleHRBcmVhKGZpbHRlci5nZXQoMCksIHsK KyAgICAgICAgICAgIGxpbmVOdW1iZXJzOiB0cnVlLAorICAgICAgICAgICAg bGluZVdyYXBwaW5nOiB0cnVlLAorICAgICAgICAgICAgbWF0Y2hCcmFja2V0 czogdHJ1ZSwKKyAgICAgICAgICAgIGluZGVudFVuaXQ6IDQsCisgICAgICAg ICAgICBtb2RlOiAidGV4dC94LXNxbCIKKyAgICAgICAgfSk7CisKKyAgICAg ICAgLy8gQ3JlYXRlIG1haW4gd2NEb2NrZXIgaW5zdGFuY2UKKyAgICAgICAg dmFyIG1haW5fZG9ja2VyID0gbmV3IHdjRG9ja2VyKAorICAgICAgICAgICcj ZWRpdG9yLXBhbmVsJywgeworICAgICAgICAgIGFsbG93Q29udGV4dE1lbnU6 IGZhbHNlLAorICAgICAgICAgIGFsbG93Q29sbGFwc2U6IGZhbHNlLAorICAg ICAgICAgIHRoZW1lUGF0aDogJ3t7IHVybF9mb3IoJ3N0YXRpYycsIGZpbGVu YW1lPSdjc3Mvd2NEb2NrZXIvVGhlbWVzJykgfX0nLAorICAgICAgICAgIHRo ZW1lOiAncGdhZG1pbicKKyAgICAgICAgfSk7CisKKyAgICAgICAgdmFyIHN1 Yl9wYW5lbCA9IG5ldyBwZ0FkbWluLkJyb3dzZXIuUGFuZWwoeworICAgICAg ICAgIG5hbWU6ICdzdWJfcGFuZWwnLAorICAgICAgICAgIHRpdGxlOiBmYWxz ZSwKKyAgICAgICAgICB3aWR0aDogJzEwMCUnLAorICAgICAgICAgIGhlaWdo dDonMTAwJScsCisgICAgICAgICAgaXNDbG9zZWFibGU6IGZhbHNlLAorICAg ICAgICAgIGlzUHJpdmF0ZTogdHJ1ZQorICAgICAgICB9KTsKKworICAgICAg ICBzdWJfcGFuZWwubG9hZChtYWluX2RvY2tlcik7CisgICAgICAgIHBhbmVs ID0gbWFpbl9kb2NrZXIuYWRkUGFuZWwoJ3N1Yl9wYW5lbCcsIHdjRG9ja2Vy LkRPQ0suTEVGVCk7CisKKyAgICAgICAgLy8gQ3JlYXRlIGEgU3BsaXR0ZXIg dG8gZGl2aWRlIHNxbCBjb2RlIGFuZCBkYXRhIG91dHB1dAorICAgICAgICB2 YXIgaFNwbGl0dGVyID0gbmV3IHdjU3BsaXR0ZXIoCisgICAgICAgICAgIiNl ZGl0b3ItcGFuZWwiLCBwYW5lbCwKKyAgICAgICAgICB3Y0RvY2tlci5PUklF TlRBVElPTi5WRVJUSUNBTAorICAgICAgICApOworICAgICAgICBoU3BsaXR0 ZXIuc2Nyb2xsYWJsZSgwLCBmYWxzZSwgZmFsc2UpOworICAgICAgICBoU3Bs aXR0ZXIuc2Nyb2xsYWJsZSgxLCB0cnVlLCB0cnVlKTsKKworICAgICAgICAv LyBJbml0aWFsaXplIHRoaXMgc3BsaXR0ZXIgd2l0aCBhIGxheW91dCBpbiBl YWNoIHBhbmUuCisgICAgICAgIGhTcGxpdHRlci5pbml0TGF5b3V0cyh3Y0Rv Y2tlci5MQVlPVVQuU0lNUExFLCB3Y0RvY2tlci5MQVlPVVQuU0lNUExFKTsK KworICAgICAgICAvLyBCeSBkZWZhdWx0LCB0aGUgc3BsaXR0ZXIgc3BsaXRz IGRvd24gdGhlIG1pZGRsZSwgd2Ugc3BsaXQgdGhlIG1haW4gcGFuZWwgYnkg ODAlLgorICAgICAgICBoU3BsaXR0ZXIucG9zKDAuMjUpOworCisgICAgICAg IHZhciB0ZXh0X2NvbnRhaW5lciA9ICQoJzx0ZXh0YXJlYSBpZD0ic3FsX3F1 ZXJ5X3Rvb2wiIHJvdz0iNSI+PC90ZXh0YXJlYT4nKTsKKworICAgICAgICAv LyBBZGQgdGV4dF9jb250YWluZXIgYXQgdGhlIHRvcCBoYWxmIG9mIHRoZSBz cGxpdHRlcgorICAgICAgICBoU3BsaXR0ZXIubGVmdCgpLmFkZEl0ZW0odGV4 dF9jb250YWluZXIpOworCisgICAgICAgIC8vIEFkZCBkYXRhIG91dHB1dCBw YW5lbCBhdCB0aGUgYm90dG9tIGhhbGYgb2YgdGhlIHNwbGl0dGVyCisgICAg ICAgIHZhciBvdXRwdXRfY29udGFpbmVyID0gJCgnPGRpdiBpZD0ib3V0cHV0 LXBhbmVsIj48L2Rpdj4nKTsKKyAgICAgICAgaFNwbGl0dGVyLnJpZ2h0KCku YWRkSXRlbShvdXRwdXRfY29udGFpbmVyKTsKKworICAgICAgICBzZWxmLnF1 ZXJ5X3Rvb2xfb2JqID0gQ29kZU1pcnJvci5mcm9tVGV4dEFyZWEodGV4dF9j b250YWluZXIuZ2V0KDApLCB7CisgICAgICAgICAgICBsaW5lTnVtYmVyczog dHJ1ZSwKKyAgICAgICAgICAgIGxpbmVXcmFwcGluZzogdHJ1ZSwKKyAgICAg ICAgICAgIG1hdGNoQnJhY2tldHM6IHRydWUsCisgICAgICAgICAgICBpbmRl bnRVbml0OiA0LAorICAgICAgICAgICAgc3R5bGVTZWxlY3RlZFRleHQ6IHRy dWUsCisgICAgICAgICAgICBtb2RlOiAidGV4dC94LXNxbCIKKyAgICAgICAg fSk7CisKKyAgICAgICAgLy8gQ3JlYXRlIHdjRG9ja2VyIGZvciB0YWIgc2V0 LgorICAgICAgICB2YXIgZG9ja2VyID0gbmV3IHdjRG9ja2VyKAorICAgICAg ICAgICcjb3V0cHV0LXBhbmVsJywgeworICAgICAgICAgIGFsbG93Q29udGV4 dE1lbnU6IGZhbHNlLAorICAgICAgICAgIGFsbG93Q29sbGFwc2U6IGZhbHNl LAorICAgICAgICAgIHRoZW1lUGF0aDogJ3t7IHVybF9mb3IoJ3N0YXRpYycs IGZpbGVuYW1lPSdjc3Mvd2NEb2NrZXIvVGhlbWVzJykgfX0nLAorICAgICAg ICAgIHRoZW1lOiAncGdhZG1pbicKKyAgICAgICAgfSk7CisKKyAgICAgICAg Ly8gQ3JlYXRlIHBhbmVscyBmb3IgJ0RhdGEgT3V0cHV0JywgJ0V4cGxhaW4n LCAnTWVzc2FnZXMnIGFuZCAnSGlzdG9yeScKKyAgICAgICAgdmFyIGRhdGFf b3V0cHV0ID0gbmV3IHBnQWRtaW4uQnJvd3Nlci5QYW5lbCh7CisgICAgICAg ICAgbmFtZTogJ2RhdGFfb3V0cHV0JywKKyAgICAgICAgICB0aXRsZTogJ3t7 IF8oJ0RhdGEgT3V0cHV0JykgfX0nLAorICAgICAgICAgIHdpZHRoOiAnMTAw JScsCisgICAgICAgICAgaGVpZ2h0OicxMDAlJywKKyAgICAgICAgICBpc0Ns b3NlYWJsZTogZmFsc2UsCisgICAgICAgICAgaXNQcml2YXRlOiB0cnVlLAor ICAgICAgICAgIGNvbnRlbnQ6ICc8ZGl2IGlkID0iZGF0YWdyaWQiIGNsYXNz PSJzcWwtZWRpdG9yLWdyaWQtY29udGFpbmVyIj48L2Rpdj48ZGl2IGlkID0i ZGF0YWdyaWQtcGFnaW5hdG9yIj48L2Rpdj4nCisgICAgICAgIH0pCisKKyAg ICAgICAgdmFyIGV4cGxhaW4gPSBuZXcgcGdBZG1pbi5Ccm93c2VyLlBhbmVs KHsKKyAgICAgICAgICBuYW1lOiAnZXhwbGFpbicsCisgICAgICAgICAgdGl0 bGU6ICd7eyBfKCdFeHBsYWluJykgfX0nLAorICAgICAgICAgIHdpZHRoOiAn MTAwJScsCisgICAgICAgICAgaGVpZ2h0OicxMDAlJywKKyAgICAgICAgICBp c0Nsb3NlYWJsZTogZmFsc2UsCisgICAgICAgICAgaXNQcml2YXRlOiB0cnVl LAorICAgICAgICAgIGNvbnRlbnQ6ICc8ZGl2IGNsYXNzPSJzcWwtZWRpdG9y LWV4cGxpYW4iPjwvZGl2PicKKyAgICAgICAgfSkKKworICAgICAgICB2YXIg bWVzc2FnZXMgPSBuZXcgcGdBZG1pbi5Ccm93c2VyLlBhbmVsKHsKKyAgICAg ICAgICBuYW1lOiAnbWVzc2FnZXMnLAorICAgICAgICAgIHRpdGxlOiAne3sg XygnTWVzc2FnZXMnKSB9fScsCisgICAgICAgICAgd2lkdGg6ICcxMDAlJywK KyAgICAgICAgICBoZWlnaHQ6JzEwMCUnLAorICAgICAgICAgIGlzQ2xvc2Vh YmxlOiBmYWxzZSwKKyAgICAgICAgICBpc1ByaXZhdGU6IHRydWUsCisgICAg ICAgICAgY29udGVudDogJzxkaXYgY2xhc3M9InNxbC1lZGl0b3ItbWVzc2Fn ZSI+PC9kaXY+JworICAgICAgICB9KQorCisgICAgICAgIHZhciBoaXN0b3J5 ID0gbmV3IHBnQWRtaW4uQnJvd3Nlci5QYW5lbCh7CisgICAgICAgICAgbmFt ZTogJ2hpc3RvcnknLAorICAgICAgICAgIHRpdGxlOiAne3sgXygnSGlzdG9y eScpIH19JywKKyAgICAgICAgICB3aWR0aDogJzEwMCUnLAorICAgICAgICAg IGhlaWdodDonMTAwJScsCisgICAgICAgICAgaXNDbG9zZWFibGU6IGZhbHNl LAorICAgICAgICAgIGlzUHJpdmF0ZTogdHJ1ZSwKKyAgICAgICAgICBjb250 ZW50OiAnPGRpdiBpZCA9Imhpc3RvcnlfZ3JpZCIgY2xhc3M9InNxbC1lZGl0 b3ItaGlzdG9yeS1jb250YWluZXIiPjwvZGl2PicKKyAgICAgICAgfSkKKwor ICAgICAgICAvLyBMb2FkIGFsbCB0aGUgY3JlYXRlZCBwYW5lbHMKKyAgICAg ICAgZGF0YV9vdXRwdXQubG9hZChkb2NrZXIpOworICAgICAgICBleHBsYWlu LmxvYWQoZG9ja2VyKTsKKyAgICAgICAgbWVzc2FnZXMubG9hZChkb2NrZXIp OworICAgICAgICBoaXN0b3J5LmxvYWQoZG9ja2VyKTsKKworICAgICAgICAv LyBBZGQgYWxsIHRoZSBwYW5lbHMgdG8gdGhlIGRvY2tlcgorICAgICAgICBz ZWxmLmRhdGFfb3V0cHV0X3BhbmVsID0gZG9ja2VyLmFkZFBhbmVsKCdkYXRh X291dHB1dCcsIHdjRG9ja2VyLkRPQ0suTEVGVCk7CisgICAgICAgIHNlbGYu ZXhwbGFpbl9wYW5lbCA9IGRvY2tlci5hZGRQYW5lbCgnZXhwbGFpbicsIHdj RG9ja2VyLkRPQ0suU1RBQ0tFRCwgc2VsZi5kYXRhX291dHB1dF9wYW5lbCk7 CisgICAgICAgIHNlbGYubWVzc2FnZXNfcGFuZWwgPSBkb2NrZXIuYWRkUGFu ZWwoJ21lc3NhZ2VzJywgd2NEb2NrZXIuRE9DSy5TVEFDS0VELCBzZWxmLmRh dGFfb3V0cHV0X3BhbmVsKTsKKyAgICAgICAgc2VsZi5oaXN0b3J5X3BhbmVs ID0gZG9ja2VyLmFkZFBhbmVsKCdoaXN0b3J5Jywgd2NEb2NrZXIuRE9DSy5T VEFDS0VELCBzZWxmLmRhdGFfb3V0cHV0X3BhbmVsKTsKKworICAgICAgICBz ZWxmLnJlbmRlcl9oaXN0b3J5X2dyaWQoKTsKKyAgICAgIH0sCisKKyAgICAg IC8qIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgdG8gY3JlYXRlIGFu ZCByZW5kZXIgdGhlCisgICAgICAgKiBuZXcgYmFja2dyaWQgYW5kIHBhZ2lu YXRvci4KKyAgICAgICAqLworICAgICAgcmVuZGVyX2dyaWQ6IGZ1bmN0aW9u KGNvbGxlY3Rpb24sIGNvbHVtbnMpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0 aGlzOworCisgICAgICAgIC8vIFJlbW92ZSBhbnkgZXhpc3RpbmcgZ3JpZCBm aXJzdAorICAgICAgICBpZiAoc2VsZi5ncmlkKSB7CisgICAgICAgICAgICBz ZWxmLmdyaWQucmVtb3ZlKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBS ZW1vdmUgYW55IGV4aXN0aW5nIHBhZ2luYXRvcgorICAgICAgICBpZiAoc2Vs Zi5wYWdpbmF0b3IpIHsKKyAgICAgICAgICAgIHNlbGYucGFnaW5hdG9yLnJl bW92ZSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gUmVtb3ZlIGFueSBl eGlzdGluZyBjbGllbnQgc2lkZSBmaWx0ZXIKKyAgICAgICAgaWYgKHNlbGYu Y2xpZW50U2lkZUZpbHRlcikgeworICAgICAgICAgICAgc2VsZi5jbGllbnRT aWRlRmlsdGVyLnJlbW92ZSgpOworICAgICAgICB9CisKKyAgICAgICAgLy8g Q3JlYXRlIGFuIGFycmF5IGZvciBjbGllbnQgZmlsdGVyCisgICAgICAgIHZh ciBmaWx0ZXJfYXJyYXkgPSBuZXcgQXJyYXkoKQorICAgICAgICBfLmVhY2go Y29sdW1ucywgZnVuY3Rpb24oYykgeworICAgICAgICAgICAgZmlsdGVyX2Fy cmF5LnB1c2goYy5uYW1lKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgdmFy IGdyaWQgPSBzZWxmLmdyaWQgPSBuZXcgQmFja2dyaWQuR3JpZCh7CisgICAg ICAgICAgICBjb2x1bW5zOiBjb2x1bW5zLAorICAgICAgICAgICAgY29sbGVj dGlvbjogY29sbGVjdGlvbiwKKyAgICAgICAgICAgIGNsYXNzTmFtZTogImJh Y2tncmlkIHRhYmxlLWJvcmRlcmVkIiwKKyAgICAgICAgICAgIHJvdzogU3Fs RWRpdG9yQ3VzdG9tUm93CisgICAgICAgICAgfSksCisgICAgICAgICAgcGFn aW5hdG9yID0gc2VsZi5wYWdpbmF0b3IgPSBuZXcgQmFja2dyaWQuRXh0ZW5z aW9uLlBhZ2luYXRvcih7CisgICAgICAgICAgICBnb0JhY2tGaXJzdE9uU29y dDogZmFsc2UsCisgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9u CisgICAgICAgICAgfSksCisgICAgICAgICAgY2xpZW50U2lkZUZpbHRlciA9 IHNlbGYuY2xpZW50U2lkZUZpbHRlciA9IG5ldyBCYWNrZ3JpZC5FeHRlbnNp b24uQ2xpZW50U2lkZUZpbHRlcih7CisgICAgICAgICAgICAgICAgIGNvbGxl Y3Rpb246IGNvbGxlY3Rpb24sCisgICAgICAgICAgICAgICAgIHBsYWNlaG9s ZGVyOiBfKCdTZWFyY2gnKSwKKyAgICAgICAgICAgICAgICAgLy8gVGhlIG1v ZGVsIGZpZWxkcyB0byBzZWFyY2ggZm9yIG1hdGNoZXMKKyAgICAgICAgICAg ICAgICAgZmllbGRzOiBmaWx0ZXJfYXJyYXksCisgICAgICAgICAgICAgICAg IC8vIEhvdyBsb25nIHRvIHdhaXQgYWZ0ZXIgdHlwaW5nIGhhcyBzdG9wcGVk IGJlZm9yZSBzZWFyY2hpbmcgY2FuIHN0YXJ0CisgICAgICAgICAgICAgICAg IHdhaXQ6IDE1MAorICAgICAgICAgIH0pOworCisgICAgICAgIC8vIFJlbmRl ciB0aGUgZ3JpZAorICAgICAgICBzZWxmLiRlbC5maW5kKCcjZGF0YWdyaWQn KS5hcHBlbmQoc2VsZi5ncmlkLnJlbmRlcigpLiRlbCk7CisKKyAgICAgICAg Ly8gUmVuZGVyIHRoZSBwYWdpbmF0b3IKKyAgICAgICAgc2VsZi4kZWwuZmlu ZCgnI2RhdGFncmlkLXBhZ2luYXRvcicpLmFwcGVuZChwYWdpbmF0b3IucmVu ZGVyKCkuZWwpOworCisgICAgICAgIC8vIFJlbmRlciB0aGUgY2xpZW50IHNp ZGUgZmlsdGVyCisgICAgICAgIHNlbGYuJGVsLmZpbmQoJy5zcWwtZWRpdG9y LWJ0bi1ncm91cCcpLmFwcGVuZChjbGllbnRTaWRlRmlsdGVyLnJlbmRlcigp LmVsKTsKKworICAgICAgICAvLyBGb3JjZWZ1bGx5IHNvcnRpbmcgYnkgdGhl IGZpcnN0IGNvbHVtbi4KKyAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID4g MSkgeworICAgICAgICAgICAgY29sbGVjdGlvbi5zZXRTb3J0aW5nKGNvbHVt bnNbMV0ubmFtZSk7CisgICAgICAgICAgICBjb2xsZWN0aW9uLmZ1bGxDb2xs ZWN0aW9uLnNvcnQoKTsKKyAgICAgICAgfQorICAgICAgfSwKKworICAgICAg LyogVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSB0byBjcmVhdGUgYW5k IHJlbmRlciB0aGUKKyAgICAgICAqIG5ldyBiYWNrZ3JpZCBmb3IgdGhlIGhp c3RvcnkgdGFiLgorICAgICAgICovCisgICAgICByZW5kZXJfaGlzdG9yeV9n cmlkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwor CisgICAgICAgIC8vIFJlbW92ZSBhbnkgZXhpc3RpbmcgZ3JpZCBmaXJzdAor ICAgICAgICBpZiAoc2VsZi5oaXN0b3J5X2dyaWQpIHsKKyAgICAgICAgICAg IHNlbGYuaGlzdG9yeV9ncmlkLnJlbW92ZSgpOworICAgICAgICB9CisKKyAg ICAgICAgdmFyIGhpc3RvcnlfbW9kZWwgPSBCYWNrYm9uZS5Nb2RlbC5leHRl bmQoeworICAgICAgICAgIGRlZmF1bHRzOiB7CisgICAgICAgICAgICBzdGF0 dXM6IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIHN0YXJ0X3RpbWU6IHVuZGVm aW5lZCwKKyAgICAgICAgICAgIHF1ZXJ5OiB1bmRlZmluZWQsCisgICAgICAg ICAgICByb3dfYWZmZWN0ZWQ6IDAsCisgICAgICAgICAgICByb3dfcmV0cmll dmVkOiAwLAorICAgICAgICAgICAgdG90YWxfdGltZTogdW5kZWZpbmVkLAor ICAgICAgICAgICAgbWVzc2FnZTogJycKKyAgICAgICAgICB9CisgICAgICAg IH0pOworCisgICAgICAgIHZhciBoaXN0b3J5X2NvbGxlY3Rpb24gPSBzZWxm Lmhpc3RvcnlfY29sbGVjdGlvbiA9IG5ldyAoQmFja2JvbmUuQ29sbGVjdGlv bi5leHRlbmQoeworICAgICAgICAgICAgbW9kZWw6IGhpc3RvcnlfbW9kZWws CisgICAgICAgICAgICAvLyBjb21wYXJhdG9yIHRvIHNvcnQgdGhlIGhpc3Rv cnkgaW4gcmV2ZXJzZSBvcmRlciBvZiB0aGUgc3RhcnRfdGltZQorICAgICAg ICAgICAgY29tcGFyYXRvcjogZnVuY3Rpb24oYSwgYikgeworICAgICAgICAg ICAgICByZXR1cm4gLWEuZ2V0KCdzdGFydF90aW1lJykubG9jYWxlQ29tcGFy ZShiLmdldCgnc3RhcnRfdGltZScpKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfSkpOworICAgICAgICB2YXIgY29sdW1ucyA9IFt7CisgICAgICAgICAg ICBuYW1lOiAic3RhdHVzIiwKKyAgICAgICAgICAgIGxhYmVsOiAiIiwKKyAg ICAgICAgICAgIGNlbGw6IEJhY2tncmlkLkNlbGwuZXh0ZW5kKHsKKyAgICAg ICAgICAgICAgY2xhc3M6ICdzcWwtc3RhdHVzLWNlbGwnLAorICAgICAgICAg ICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIHRo aXMuJGVsLmVtcHR5KCk7CisgICAgICAgICAgICAgICAgdmFyICRidG4gPSAk KCc8YnV0dG9uPjwvYnV0dG9uPicsIHsKKyAgICAgICAgICAgICAgICAgIGNs YXNzOiAnYnRuIGJ0bi1jaXJjbGUnCisgICAgICAgICAgICAgICAgfSkuYXBw ZW5kVG8odGhpcy4kZWwpOworICAgICAgICAgICAgICAgIHZhciAkY2lyY2xl RGl2ID0gJCgnPGk+PC9pPicsIHtjbGFzczogJ2ZhJ30pLmFwcGVuZFRvKCRi dG4pOworICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLmdldCgnc3Rh dHVzJykpIHsKKyAgICAgICAgICAgICAgICAgICRidG4uYWRkQ2xhc3MoJ2J0 bi1zdWNjZXNzJyk7CisgICAgICAgICAgICAgICAgICAkY2lyY2xlRGl2LmFk ZENsYXNzKCdmYS1jaGVjaycpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAkYnRuLmFkZENsYXNzKCdidG4tZGFuZ2Vy Jyk7CisgICAgICAgICAgICAgICAgICAkY2lyY2xlRGl2LmFkZENsYXNzKCdm YS10aW1lcycpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg ICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgICB9LAorICAgICAgICAg ICAgICBlZGl0YWJsZTogZmFsc2UKKyAgICAgICAgICAgIH0pLAorICAgICAg ICAgICAgZWRpdGFibGU6IGZhbHNlCisgICAgICAgICAgfSwgeworICAgICAg ICAgICAgbmFtZTogInN0YXJ0X3RpbWUiLAorICAgICAgICAgICAgbGFiZWw6 ICJEYXRlIiwKKyAgICAgICAgICAgIGNlbGw6ICJzdHJpbmciLAorICAgICAg ICAgICAgZWRpdGFibGU6IGZhbHNlCisgICAgICAgICAgfSwgeworICAgICAg ICAgICAgbmFtZTogInF1ZXJ5IiwKKyAgICAgICAgICAgIGxhYmVsOiAiUXVl cnkiLAorICAgICAgICAgICAgY2VsbDogInN0cmluZyIsCisgICAgICAgICAg ICBlZGl0YWJsZTogZmFsc2UKKyAgICAgICAgICB9LCB7CisgICAgICAgICAg ICBuYW1lOiAicm93X2FmZmVjdGVkIiwKKyAgICAgICAgICAgIGxhYmVsOiAi Um93cyBhZmZlY3RlZCIsCisgICAgICAgICAgICBjZWxsOiAiaW50ZWdlciIs CisgICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UKKyAgICAgICAgICB9LCB7 CisgICAgICAgICAgICBuYW1lOiAidG90YWxfdGltZSIsCisgICAgICAgICAg ICBsYWJlbDogIlRvdGFsIFRpbWUiLAorICAgICAgICAgICAgY2VsbDogInN0 cmluZyIsCisgICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UKKyAgICAgICAg ICB9LCB7CisgICAgICAgICAgICBuYW1lOiAibWVzc2FnZSIsCisgICAgICAg ICAgICBsYWJlbDogIk1lc3NhZ2UiLAorICAgICAgICAgICAgY2VsbDogInN0 cmluZyIsCisgICAgICAgICAgICBlZGl0YWJsZTogZmFsc2UKKyAgICAgICAg fV07CisKKyAgICAgICAgdmFyIGdyaWQgPSBzZWxmLmhpc3RvcnlfZ3JpZCA9 IG5ldyBCYWNrZ3JpZC5HcmlkKHsKKyAgICAgICAgICAgIGNvbHVtbnM6IGNv bHVtbnMsCisgICAgICAgICAgICBjb2xsZWN0aW9uOiBoaXN0b3J5X2NvbGxl Y3Rpb24sCisgICAgICAgICAgICBjbGFzc05hbWU6ICJiYWNrZ3JpZCB0YWJs ZS1ib3JkZXJlZCIKKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gUmVuZGVy IHRoZSBncmlkCisgICAgICAgIHNlbGYuJGVsLmZpbmQoJyNoaXN0b3J5X2dy aWQnKS5hcHBlbmQoc2VsZi5oaXN0b3J5X2dyaWQucmVuZGVyKCkuJGVsKTsK KyAgICAgIH0sCisKKyAgICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBB ZGQgTmV3IFJvdyBidXR0b24gY2xpY2suCisgICAgICBvbl9hZGQ6IGZ1bmN0 aW9uKCkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAg Ly8gVHJpZ2dlciB0aGUgYWRkcm93IHNpZ25hbCB0byB0aGUgU3FsRWRpdG9y Q29udHJvbGxlciBjbGFzcworICAgICAgICBzZWxmLmhhbmRsZXIudHJpZ2dl cigKKyAgICAgICAgICAgICdwZ2FkbWluLXNxbGVkaXRvcjpidXR0b246YWRk cm93JywKKyAgICAgICAgICAgIHNlbGYsCisgICAgICAgICAgICBzZWxmLmhh bmRsZXIKKyAgICAgICAgKTsKKyAgICAgIH0sCisKKyAgICAgIC8vIENhbGxi YWNrIGZ1bmN0aW9uIGZvciBTYXZlIGJ1dHRvbiBjbGljay4KKyAgICAgIG9u X3NhdmU6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7 CisKKyAgICAgICAgLy8gVHJpZ2dlciB0aGUgc2F2ZSBzaWduYWwgdG8gdGhl IFNxbEVkaXRvckNvbnRyb2xsZXIgY2xhc3MKKyAgICAgICAgc2VsZi5oYW5k bGVyLnRyaWdnZXIoCisgICAgICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6 YnV0dG9uOnNhdmUnLAorICAgICAgICAgICAgc2VsZiwKKyAgICAgICAgICAg IHNlbGYuaGFuZGxlcgorICAgICAgICApOworICAgICAgfSwKKworICAgICAg Ly8gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGZpbHRlciBidXR0b24gY2xpY2su CisgICAgICBvbl9zaG93X2ZpbHRlcjogZnVuY3Rpb24oKSB7CisgICAgICAg IHZhciBzZWxmID0gdGhpczsKKworICAgICAgICAvLyBUcmlnZ2VyIHRoZSBz aG93X2ZpbHRlciBzaWduYWwgdG8gdGhlIFNxbEVkaXRvckNvbnRyb2xsZXIg Y2xhc3MKKyAgICAgICAgc2VsZi5oYW5kbGVyLnRyaWdnZXIoCisgICAgICAg ICAgICAncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9uOnNob3dfZmlsdGVyJywK KyAgICAgICAgICAgIHNlbGYsCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIK KyAgICAgICAgKTsKKyAgICAgIH0sCisKKyAgICAgIC8vIENhbGxiYWNrIGZ1 bmN0aW9uIGZvciBpbmNsdWRlIGZpbHRlciBidXR0b24gY2xpY2suCisgICAg ICBvbl9pbmNsdWRlX2ZpbHRlcjogZnVuY3Rpb24oKSB7CisgICAgICAgIHZh ciBzZWxmID0gdGhpczsKKworICAgICAgICAvLyBUcmlnZ2VyIHRoZSBpbmNs dWRlX2ZpbHRlciBzaWduYWwgdG8gdGhlIFNxbEVkaXRvckNvbnRyb2xsZXIg Y2xhc3MKKyAgICAgICAgc2VsZi5oYW5kbGVyLnRyaWdnZXIoCisgICAgICAg ICAgICAncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9uOmluY2x1ZGVfZmlsdGVy JywKKyAgICAgICAgICAgIHNlbGYsCisgICAgICAgICAgICBzZWxmLmhhbmRs ZXIKKyAgICAgICAgKTsKKyAgICAgIH0sCisKKyAgICAgIC8vIENhbGxiYWNr IGZ1bmN0aW9uIGZvciBleGNsdWRlIGZpbHRlciBidXR0b24gY2xpY2suCisg ICAgICBvbl9leGNsdWRlX2ZpbHRlcjogZnVuY3Rpb24oKSB7CisgICAgICAg IHZhciBzZWxmID0gdGhpczsKKworICAgICAgICAvLyBUcmlnZ2VyIHRoZSBl eGNsdWRlX2ZpbHRlciBzaWduYWwgdG8gdGhlIFNxbEVkaXRvckNvbnRyb2xs ZXIgY2xhc3MKKyAgICAgICAgc2VsZi5oYW5kbGVyLnRyaWdnZXIoCisgICAg ICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9uOmV4Y2x1ZGVfZmls dGVyJywKKyAgICAgICAgICAgIHNlbGYsCisgICAgICAgICAgICBzZWxmLmhh bmRsZXIKKyAgICAgICAgKTsKKyAgICAgIH0sCisKKyAgICAgIC8vIENhbGxi YWNrIGZ1bmN0aW9uIGZvciByZW1vdmUgZmlsdGVyIGJ1dHRvbiBjbGljay4K KyAgICAgIG9uX3JlbW92ZV9maWx0ZXI6IGZ1bmN0aW9uKCkgeworICAgICAg ICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgLy8gVHJpZ2dlciB0aGUg cmVtb3ZlX2ZpbHRlciBzaWduYWwgdG8gdGhlIFNxbEVkaXRvckNvbnRyb2xs ZXIgY2xhc3MKKyAgICAgICAgc2VsZi5oYW5kbGVyLnRyaWdnZXIoCisgICAg ICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9uOnJlbW92ZV9maWx0 ZXInLAorICAgICAgICAgICAgc2VsZiwKKyAgICAgICAgICAgIHNlbGYuaGFu ZGxlcgorICAgICAgICApOworICAgICAgfSwKKworICAgICAgLy8gQ2FsbGJh Y2sgZnVuY3Rpb24gZm9yIG9rIGJ1dHRvbiBjbGljay4KKyAgICAgIG9uX2Fw cGx5OiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwor CisgICAgICAgIC8vIFRyaWdnZXIgdGhlIGFwcGx5X2ZpbHRlciBzaWduYWwg dG8gdGhlIFNxbEVkaXRvckNvbnRyb2xsZXIgY2xhc3MKKyAgICAgICAgc2Vs Zi5oYW5kbGVyLnRyaWdnZXIoCisgICAgICAgICAgICAncGdhZG1pbi1zcWxl ZGl0b3I6YnV0dG9uOmFwcGx5X2ZpbHRlcicsCisgICAgICAgICAgICBzZWxm LAorICAgICAgICAgICAgc2VsZi5oYW5kbGVyCisgICAgICAgICk7CisgICAg ICB9LAorCisgICAgICAvLyBDYWxsYmFjayBmdW5jdGlvbiBmb3IgY2FuY2Vs IGJ1dHRvbiBjbGljay4KKyAgICAgIG9uX2NhbmNlbDogZnVuY3Rpb24oKSB7 CisgICAgICAgICQoJyNmaWx0ZXInKS5hZGRDbGFzcygnaGlkZGVuJyk7Cisg ICAgICAgICQoJyNlZGl0b3ItcGFuZWwnKS5yZW1vdmVDbGFzcygnc3FsLWVk aXRvci1idXN5LWZldGNoaW5nJyk7CisgICAgICB9LAorCisgICAgICAvLyBD YWxsYmFjayBmdW5jdGlvbiBmb3IgY29weSBidXR0b24gY2xpY2suCisgICAg ICBvbl9jb3B5OiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0 aGlzOworCisgICAgICAgIC8vIFRyaWdnZXIgdGhlIGNvcHkgc2lnbmFsIHRv IHRoZSBTcWxFZGl0b3JDb250cm9sbGVyIGNsYXNzCisgICAgICAgIHNlbGYu aGFuZGxlci50cmlnZ2VyKAorICAgICAgICAgICAgJ3BnYWRtaW4tc3FsZWRp dG9yOmJ1dHRvbjpjb3B5JywKKyAgICAgICAgICAgIHNlbGYsCisgICAgICAg ICAgICBzZWxmLmhhbmRsZXIKKyAgICAgICAgKTsKKyAgICAgIH0sCisKKyAg ICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBwYXN0ZSBidXR0b24gY2xp Y2suCisgICAgICBvbl9wYXN0ZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHZh ciBzZWxmID0gdGhpczsKKworICAgICAgICAvLyBUcmlnZ2VyIHRoZSBwYXN0 ZSBzaWduYWwgdG8gdGhlIFNxbEVkaXRvckNvbnRyb2xsZXIgY2xhc3MKKyAg ICAgICAgc2VsZi5oYW5kbGVyLnRyaWdnZXIoCisgICAgICAgICAgICAncGdh ZG1pbi1zcWxlZGl0b3I6YnV0dG9uOnBhc3RlJywKKyAgICAgICAgICAgIHNl bGYsCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIKKyAgICAgICAgKTsKKyAg ICAgIH0sCisKKyAgICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUg Y2hhbmdlIGV2ZW50IG9mIGNvbWJvIGJveAorICAgICAgb25fbGltaXRfY2hh bmdlOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOwor CisgICAgICAgIC8vIFRyaWdnZXIgdGhlIGxpbWl0IHNpZ25hbCB0byB0aGUg U3FsRWRpdG9yQ29udHJvbGxlciBjbGFzcworICAgICAgICBzZWxmLmhhbmRs ZXIudHJpZ2dlcigKKyAgICAgICAgICAgICdwZ2FkbWluLXNxbGVkaXRvcjpi dXR0b246bGltaXQnLAorICAgICAgICAgICAgc2VsZiwKKyAgICAgICAgICAg IHNlbGYuaGFuZGxlcgorICAgICAgICApOworICAgICAgfSwKKworICAgICAg Ly8gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBmbGFzaCBidXR0b24gY2xp Y2suCisgICAgICBvbl9mbGFzaDogZnVuY3Rpb24oKSB7CisgICAgICAgIHZh ciBzZWxmID0gdGhpczsKKworICAgICAgICAvLyBUcmlnZ2VyIHRoZSBmbGFz aCBzaWduYWwgdG8gdGhlIFNxbEVkaXRvckNvbnRyb2xsZXIgY2xhc3MKKyAg ICAgICAgc2VsZi5oYW5kbGVyLnRyaWdnZXIoCisgICAgICAgICAgICAncGdh ZG1pbi1zcWxlZGl0b3I6YnV0dG9uOmZsYXNoJywKKyAgICAgICAgICAgIHNl bGYsCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIKKyAgICAgICAgKTsKKyAg ICAgIH0sCisKKyAgICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUg Y2FuY2VsIHF1ZXJ5IGJ1dHRvbiBjbGljay4KKyAgICAgIG9uX2NhbmNlbF9x dWVyeTogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsK KworICAgICAgICAvLyBUcmlnZ2VyIHRoZSBjYW5jZWwtcXVlcnkgc2lnbmFs IHRvIHRoZSBTcWxFZGl0b3JDb250cm9sbGVyIGNsYXNzCisgICAgICAgIHNl bGYuaGFuZGxlci50cmlnZ2VyKAorICAgICAgICAgICAgJ3BnYWRtaW4tc3Fs ZWRpdG9yOmJ1dHRvbjpjYW5jZWwtcXVlcnknLAorICAgICAgICAgICAgc2Vs ZiwKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlcgorICAgICAgICApOworICAg ICAgfSwKKworICAgICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBk b3dubG9hZCBidXR0b24gY2xpY2suCisgICAgICBvbl9kb3dubG9hZDogZnVu Y3Rpb24oKSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAg ICAvLyBUcmlnZ2VyIHRoZSBkb3dubG9hZCBzaWduYWwgdG8gdGhlIFNxbEVk aXRvckNvbnRyb2xsZXIgY2xhc3MKKyAgICAgICAgc2VsZi5oYW5kbGVyLnRy aWdnZXIoCisgICAgICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9u OmRvd25sb2FkJywKKyAgICAgICAgICAgIHNlbGYsCisgICAgICAgICAgICBz ZWxmLmhhbmRsZXIKKyAgICAgICAgKTsKKyAgICAgIH0sCisKKyAgICAgIC8v IENhbGxiYWNrIGZ1bmN0aW9uIGZvciB0aGUgY2xlYXIgYnV0dG9uIGNsaWNr LgorICAgICAgb25fY2xlYXI6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIg c2VsZiA9IHRoaXM7CisgICAgICAgIHNlbGYucXVlcnlfdG9vbF9vYmouc2V0 VmFsdWUoJycpOworICAgICAgfSwKKworICAgICAgLy8gQ2FsbGJhY2sgZnVu Y3Rpb24gZm9yIHRoZSBjbGVhciBoaXN0b3J5IGJ1dHRvbiBjbGljay4KKyAg ICAgIG9uX2NsZWFyX2hpc3Rvcnk6IGZ1bmN0aW9uKCkgeworICAgICAgICB2 YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgLy8gUmVtb3ZlIGFueSBleGlz dGluZyBncmlkIGZpcnN0CisgICAgICAgIGlmIChzZWxmLmhpc3RvcnlfZ3Jp ZCkgeworICAgICAgICAgICAgc2VsZi5oaXN0b3J5X2NvbGxlY3Rpb24ucmVz ZXQoKTsKKyAgICAgICAgfQorICAgICAgfSwKKworICAgICAgLy8gQ2FsbGJh Y2sgZnVuY3Rpb24gZm9yIHRoZSBhdXRvIGNvbW1pdCBidXR0b24gY2xpY2su CisgICAgICBvbl9hdXRvX2NvbW1pdDogZnVuY3Rpb24oKSB7CisgICAgICAg IHZhciBzZWxmID0gdGhpczsKKworICAgICAgICAvLyBUcmlnZ2VyIHRoZSBh dXRvLWNvbW1pdCBzaWduYWwgdG8gdGhlIFNxbEVkaXRvckNvbnRyb2xsZXIg Y2xhc3MKKyAgICAgICAgc2VsZi5oYW5kbGVyLnRyaWdnZXIoCisgICAgICAg ICAgICAncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9uOmF1dG9fY29tbWl0JywK KyAgICAgICAgICAgIHNlbGYsCisgICAgICAgICAgICBzZWxmLmhhbmRsZXIK KyAgICAgICAgKTsKKyAgICAgIH0sCisKKyAgICAgIC8vIENhbGxiYWNrIGZ1 bmN0aW9uIGZvciB0aGUgYXV0byByb2xsYmFjayBidXR0b24gY2xpY2suCisg ICAgICBvbl9hdXRvX3JvbGxiYWNrOiBmdW5jdGlvbigpIHsKKyAgICAgICAg dmFyIHNlbGYgPSB0aGlzOworCisgICAgICAgIC8vIFRyaWdnZXIgdGhlIGRv d25sb2FkIHNpZ25hbCB0byB0aGUgU3FsRWRpdG9yQ29udHJvbGxlciBjbGFz cworICAgICAgICBzZWxmLmhhbmRsZXIudHJpZ2dlcigKKyAgICAgICAgICAg ICdwZ2FkbWluLXNxbGVkaXRvcjpidXR0b246YXV0b19yb2xsYmFjaycsCisg ICAgICAgICAgICBzZWxmLAorICAgICAgICAgICAgc2VsZi5oYW5kbGVyCisg ICAgICAgICk7CisgICAgICB9CisgICAgfSk7CisKKyAgICAvKiBEZWZpbmlu ZyBjb250cm9sbGVyIGNsYXNzIGZvciBkYXRhIGdyaWQsIHdoaWNoIGFjdHVh bGx5CisgICAgICogcGVyZm9ybSB0aGUgb3BlcmF0aW9ucyBsaWtlIGV4ZWN1 dGluZyB0aGUgc3FsIHF1ZXJ5LCBwb2xsIHRoZSByZXN1bHQsCisgICAgICog cmVuZGVyIHRoZSBkYXRhIGluIHRoZSBncmlkLCBTYXZlL1JlZnJlc2ggdGhl IGRhdGEgZXRjLi4uCisgICAgICovCisgICAgdmFyIFNxbEVkaXRvckNvbnRy b2xsZXIgPSBmdW5jdGlvbihjb250YWluZXIsIG9wdGlvbnMpIHsKKyAgICAg IHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOworICAg IH07CisKKyAgICBfLmV4dGVuZCgKKyAgICAgIFNxbEVkaXRvckNvbnRyb2xs ZXIucHJvdG90eXBlLAorICAgICAgQmFja2JvbmUuRXZlbnRzLAorICAgICAg eworICAgICAgICBpbml0aWFsaXplOiBmdW5jdGlvbihjb250YWluZXIsIG9w dHMpIHsKKyAgICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lcjsK KyAgICAgICAgfSwKKworICAgICAgICAvKiBUaGlzIGZ1bmN0aW9uIGlzIHVz ZWQgdG8gY3JlYXRlIGluc3RhbmNlIG9mIFNRTEVkaXRvclZpZXcsCisgICAg ICAgICAqIGNhbGwgdGhlIHJlbmRlciBtZXRob2Qgb2YgdGhlIGdyaWQgdmll dyB0byByZW5kZXIgdGhlIGJhY2tncmlkCisgICAgICAgICAqIGhlYWRlciBh bmQgbG9hZGluZyBpY29uIGFuZCBzdGFydCBleGVjdXRpb24gb2YgdGhlIHNx bCBxdWVyeS4KKyAgICAgICAgICovCisgICAgICAgIHN0YXJ0OiBmdW5jdGlv bihpc19xdWVyeV90b29sLCBlZGl0b3JfdGl0bGUpIHsKKyAgICAgICAgICB2 YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgICBzZWxmLmlzX3F1ZXJ5X3Rv b2wgPSBpc19xdWVyeV90b29sOworICAgICAgICAgIHNlbGYuaXRlbXNfcGVy X3BhZ2UgPSAyNTsKKyAgICAgICAgICBzZWxmLnJvd3NfYWZmZWN0ZWQgPSAw OworICAgICAgICAgIHNlbGYubWFya2VkX2xpbmVfbm8gPSAwOworCisgICAg ICAgICAgLy8gV2UgZG8gbm90IGFsbG93IHRvIGNhbGwgdGhlIHN0YXJ0IG11 bHRpcGxlIHRpbWVzLgorICAgICAgICAgIGlmIChzZWxmLmdyaWRWaWV3KQor ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgc2VsZi5ncmlkVmll dyA9IG5ldyBTUUxFZGl0b3JWaWV3KHsKKyAgICAgICAgICAgIGVsOiBzZWxm LmNvbnRhaW5lciwKKyAgICAgICAgICAgIGhhbmRsZXI6IHNlbGYKKyAgICAg ICAgICB9KTsKKyAgICAgICAgICBzZWxmLnRyYW5zSWQgPSBzZWxmLmNvbnRh aW5lci5kYXRhKCd0cmFuc0lkJyk7CisKKyAgICAgICAgICBzZWxmLmdyaWRW aWV3LmVkaXRvcl90aXRsZSA9IGVkaXRvcl90aXRsZTsKKworICAgICAgICAg IC8vIFJlbmRlciB0aGUgaGVhZGVyCisgICAgICAgICAgc2VsZi5ncmlkVmll dy5yZW5kZXIoKTsKKworICAgICAgICAgIC8vIExpc3RlbiBvbiBldmVudHMg Y29tZSBmcm9tIFNRTEVkaXRvclZpZXcgZm9yIHRoZSBidXR0b24gY2xpY2tl ZC4KKyAgICAgICAgICBzZWxmLm9uKCdwZ2FkbWluLXNxbGVkaXRvcjpidXR0 b246c2F2ZScsIHNlbGYuX3NhdmUsIHNlbGYpOworICAgICAgICAgIHNlbGYu b24oJ3BnYWRtaW4tc3FsZWRpdG9yOmJ1dHRvbjphZGRyb3cnLCBzZWxmLl9h ZGQsIHNlbGYpOworICAgICAgICAgIHNlbGYub24oJ3BnYWRtaW4tc3FsZWRp dG9yOmJ1dHRvbjpzaG93X2ZpbHRlcicsIHNlbGYuX3Nob3dfZmlsdGVyLCBz ZWxmKTsKKyAgICAgICAgICBzZWxmLm9uKCdwZ2FkbWluLXNxbGVkaXRvcjpi dXR0b246aW5jbHVkZV9maWx0ZXInLCBzZWxmLl9pbmNsdWRlX2ZpbHRlciwg c2VsZik7CisgICAgICAgICAgc2VsZi5vbigncGdhZG1pbi1zcWxlZGl0b3I6 YnV0dG9uOmV4Y2x1ZGVfZmlsdGVyJywgc2VsZi5fZXhjbHVkZV9maWx0ZXIs IHNlbGYpOworICAgICAgICAgIHNlbGYub24oJ3BnYWRtaW4tc3FsZWRpdG9y OmJ1dHRvbjpyZW1vdmVfZmlsdGVyJywgc2VsZi5fcmVtb3ZlX2ZpbHRlciwg c2VsZik7CisgICAgICAgICAgc2VsZi5vbigncGdhZG1pbi1zcWxlZGl0b3I6 YnV0dG9uOmFwcGx5X2ZpbHRlcicsIHNlbGYuX2FwcGx5X2ZpbHRlciwgc2Vs Zik7CisgICAgICAgICAgc2VsZi5vbigncGdhZG1pbi1zcWxlZGl0b3I6YnV0 dG9uOmNvcHknLCBzZWxmLl9jb3B5LCBzZWxmKTsKKyAgICAgICAgICBzZWxm Lm9uKCdwZ2FkbWluLXNxbGVkaXRvcjpidXR0b246cGFzdGUnLCBzZWxmLl9w YXN0ZSwgc2VsZik7CisgICAgICAgICAgc2VsZi5vbigncGdhZG1pbi1zcWxl ZGl0b3I6YnV0dG9uOmxpbWl0Jywgc2VsZi5fc2V0X2xpbWl0LCBzZWxmKTsK KyAgICAgICAgICBzZWxmLm9uKCdwZ2FkbWluLXNxbGVkaXRvcjpidXR0b246 Zmxhc2gnLCBzZWxmLl9yZWZyZXNoLCBzZWxmKTsKKyAgICAgICAgICBzZWxm Lm9uKCdwZ2FkbWluLXNxbGVkaXRvcjpidXR0b246Y2FuY2VsLXF1ZXJ5Jywg c2VsZi5fY2FuY2VsX3F1ZXJ5LCBzZWxmKTsKKyAgICAgICAgICBzZWxmLm9u KCdwZ2FkbWluLXNxbGVkaXRvcjpidXR0b246ZG93bmxvYWQnLCBzZWxmLl9k b3dubG9hZCwgc2VsZik7CisgICAgICAgICAgc2VsZi5vbigncGdhZG1pbi1z cWxlZGl0b3I6YnV0dG9uOmF1dG9fcm9sbGJhY2snLCBzZWxmLl9hdXRvX3Jv bGxiYWNrLCBzZWxmKTsKKyAgICAgICAgICBzZWxmLm9uKCdwZ2FkbWluLXNx bGVkaXRvcjpidXR0b246YXV0b19jb21taXQnLCBzZWxmLl9hdXRvX2NvbW1p dCwgc2VsZik7CisKKyAgICAgICAgICBpZiAoc2VsZi5pc19xdWVyeV90b29s KSB7CisgICAgICAgICAgICBzZWxmLmdyaWRWaWV3LnF1ZXJ5X3Rvb2xfb2Jq LnJlZnJlc2goKTsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7Cisg ICAgICAgICAgICBzZWxmLmdyaWRWaWV3LnF1ZXJ5X3Rvb2xfb2JqLnNldE9w dGlvbigicmVhZE9ubHkiLHRydWUpOworICAgICAgICAgICAgc2VsZi5kaXNh YmxlX3Rvb2xfYnV0dG9ucyh0cnVlKTsKKyAgICAgICAgICAgIHNlbGYuX2V4 ZWN1dGVfZGF0YV9xdWVyeSgpOworICAgICAgICAgIH0KKyAgICAgICAgfSwK KworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG1ha2VzIHRoZSBhamF4IGNh bGwgdG8gZXhlY3V0ZSB0aGUgc3FsIHF1ZXJ5LgorICAgICAgICBfZXhlY3V0 ZV9kYXRhX3F1ZXJ5OiBmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIgc2Vs ZiA9IHRoaXM7CisgICAgICAgICAgc2VsZi5xdWVyeV9zdGFydF90aW1lID0g bmV3IERhdGUoKTsKKyAgICAgICAgICBzZWxmLnJvd3NfYWZmZWN0ZWQgPSAw OworCisgICAgICAgICAgc2VsZi50cmlnZ2VyKAorICAgICAgICAgICAgJ3Bn YWRtaW4tc3FsZWRpdG9yOmxvYWRpbmctaWNvbjpzaG93JywKKyAgICAgICAg ICAgICd7eyBfKCdJbml0aWFsaXppbmcgdGhlIHF1ZXJ5IGV4ZWN1dGlvbiEn KSB9fScKKyAgICAgICAgICApOworCisgICAgICAgICAgJC5hamF4KHsKKyAg ICAgICAgICAgIHVybDogInt7IHVybF9mb3IoJ3NxbGVkaXRvci5pbmRleCcp IH19IiArICJ2aWV3X2RhdGEvc3RhcnQvIiArIHNlbGYudHJhbnNJZCwKKyAg ICAgICAgICAgIG1ldGhvZDogJ0dFVCcsCisgICAgICAgICAgICBzdWNjZXNz OiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgICAgaWYgKHJlcy5kYXRh LnN0YXR1cykgeworICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcigKKyAg ICAgICAgICAgICAgICAgICdwZ2FkbWluLXNxbGVkaXRvcjpsb2FkaW5nLWlj b246bWVzc2FnZScsCisgICAgICAgICAgICAgICAgICAgJ3t7IF8oJ1dhaXRp bmcgZm9yIHRoZSBxdWVyeSBleGVjdXRpb24gdG8gY29tcGxldGUuLi4nKSB9 fScKKyAgICAgICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgc2Vs Zi5jYW5fZWRpdCA9IHJlcy5kYXRhLmNhbl9lZGl0OworICAgICAgICAgICAg ICAgIHNlbGYuY2FuX2ZpbHRlciA9IHJlcy5kYXRhLmNhbl9maWx0ZXI7Cisg ICAgICAgICAgICAgICAgc2VsZi5pdGVtc19wZXJfcGFnZSA9IHJlcy5kYXRh Lml0ZW1zX3Blcl9wYWdlOworCisgICAgICAgICAgICAgICAgLy8gU2V0IHRo ZSBzcWwgcXVlcnkgdG8gdGhlIFNRTCBwYW5lbAorICAgICAgICAgICAgICAg IHNlbGYuZ3JpZFZpZXcucXVlcnlfdG9vbF9vYmouc2V0VmFsdWUocmVzLmRh dGEuc3FsKTsKKyAgICAgICAgICAgICAgICBzZWxmLnF1ZXJ5ID0gcmVzLmRh dGEuc3FsOworCisgICAgICAgICAgICAgICAgLyogSWYgZmlsdGVyIGlzIGFw cGxpZWQgdGhlbiByZW1vdmUgY2xhc3MgJ2J0bi1kZWZhdWx0JworICAgICAg ICAgICAgICAgICAqIGFuZCBhZGQgJ2J0bi13YXJuaW5nJyB0byBjaGFuZ2Ug dGhlIGNvbG91ciBvZiB0aGUgYnV0dG9uLgorICAgICAgICAgICAgICAgICAq LworICAgICAgICAgICAgICAgIGlmIChzZWxmLmNhbl9maWx0ZXIgJiYgcmVz LmRhdGEuZmlsdGVyX2FwcGxpZWQpIHsKKyAgICAgICAgICAgICAgICAgICQo JyNidG4tZmlsdGVyJykucmVtb3ZlQ2xhc3MoJ2J0bi1kZWZhdWx0Jyk7Cisg ICAgICAgICAgICAgICAgICAkKCcjYnRuLWZpbHRlci1kcm9wZG93bicpLnJl bW92ZUNsYXNzKCdidG4tZGVmYXVsdCcpOworICAgICAgICAgICAgICAgICAg JCgnI2J0bi1maWx0ZXInKS5hZGRDbGFzcygnYnRuLXdhcm5pbmcnKTsKKyAg ICAgICAgICAgICAgICAgICQoJyNidG4tZmlsdGVyLWRyb3Bkb3duJykuYWRk Q2xhc3MoJ2J0bi13YXJuaW5nJyk7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgJCgnI2J0 bi1maWx0ZXInKS5yZW1vdmVDbGFzcygnYnRuLXdhcm5pbmcnKTsKKyAgICAg ICAgICAgICAgICAgICQoJyNidG4tZmlsdGVyLWRyb3Bkb3duJykucmVtb3Zl Q2xhc3MoJ2J0bi13YXJuaW5nJyk7CisgICAgICAgICAgICAgICAgICAkKCcj YnRuLWZpbHRlcicpLmFkZENsYXNzKCdidG4tZGVmYXVsdCcpOworICAgICAg ICAgICAgICAgICAgJCgnI2J0bi1maWx0ZXItZHJvcGRvd24nKS5hZGRDbGFz cygnYnRuLWRlZmF1bHQnKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgICAgICAvLyBTZXQgdGhlIGNvbWJvIGJveCB2YWx1ZQorICAgICAg ICAgICAgICAgICQoIi5saW1pdCIpLnZhbChyZXMuZGF0YS5saW1pdCk7CisK KyAgICAgICAgICAgICAgICAvLyBJZiBzdGF0dXMgaXMgVHJ1ZSB0aGVuIHBv bGwgdGhlIHJlc3VsdC4KKyAgICAgICAgICAgICAgICBzZWxmLl9wb2xsKCk7 CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSB7CisgICAg ICAgICAgICAgICAgc2VsZi51cGRhdGVfbXNnX2hpc3RvcnkoZmFsc2UsIHJl cy5kYXRhLnJlc3VsdCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0sCisgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAg ICAgICAgICBpZiAoZS5yZWFkeVN0YXRlID09IDApIHsKKyAgICAgICAgICAg ICAgICBzZWxmLnVwZGF0ZV9tc2dfaGlzdG9yeShmYWxzZSwKKyAgICAgICAg ICAgICAgICAgICd7eyBfKCdOb3QgY29ubmVjdGVkIHRvIHNlcnZlciBPciBj b25uZWN0aW9uIHdpdGggdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuJykg fX0nCisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICByZXR1 cm47CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICB2YXIgbXNn ID0gZS5yZXNwb25zZVRleHQ7CisgICAgICAgICAgICAgIGlmIChlLnJlc3Bv bnNlSlNPTiAhPSB1bmRlZmluZWQgJiYKKyAgICAgICAgICAgICAgICBlLnJl c3BvbnNlSlNPTi5lcnJvcm1zZyAhPSB1bmRlZmluZWQpCisgICAgICAgICAg ICAgICAgbXNnID0gZS5yZXNwb25zZUpTT04uZXJyb3Jtc2c7CisKKyAgICAg ICAgICAgICAgc2VsZi51cGRhdGVfbXNnX2hpc3RvcnkoZmFsc2UsIG1zZyk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgIH0sCisK KyAgICAgICAgLyogVGhpcyBmdW5jdGlvbiBtYWtlcyB0aGUgYWpheCBjYWxs IHRvIHBvbGwgdGhlIHJlc3VsdCwKKyAgICAgICAgICogaWYgc3RhdHVzIGlz IEJ1c3kgdGhlbiByZWN1cnNpdmVseSBjYWxsIHRoZSBwb2xsIGZ1bmN0aW9u CisgICAgICAgICAqIHRpbGwgdGhlIHN0YXR1cyBpcyAnU3VjY2Vzcycgb3Ig J05vdENvbm5lY3RlZCcuIElmIHN0YXR1cyBpcworICAgICAgICAgKiAnU3Vj Y2VzcycgdGhlbiBjYWxsIHRoZSByZW5kZXIgbWV0aG9kIHRvIHJlbmRlciB0 aGUgZGF0YS4KKyAgICAgICAgICovCisgICAgICAgIF9wb2xsOiBmdW5jdGlv bigpIHsKKyAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgICAg c2V0VGltZW91dCgKKyAgICAgICAgICAgIGZ1bmN0aW9uKCkgeworICAgICAg ICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAgICAgIHVybDogInt7IHVy bF9mb3IoJ3NxbGVkaXRvci5pbmRleCcpIH19IiArICJwb2xsLyIgKyBzZWxm LnRyYW5zSWQsCisgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJywKKyAg ICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAg ICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMgPT09ICdTdWNjZXNz JykgeworICAgICAgICAgICAgICAgICAgICBzZWxmLnRyaWdnZXIoCisgICAg ICAgICAgICAgICAgICAgICAgJ3BnYWRtaW4tc3FsZWRpdG9yOmxvYWRpbmct aWNvbjptZXNzYWdlJywKKyAgICAgICAgICAgICAgICAgICAgICAne3sgXygn TG9hZGluZyB0aGUgZGF0YSBmcm9tIHRoZSBkYXRhYmFzZSBzZXJ2ZXIsIGFu ZCByZW5kZXJpbmcgaW50byB0aGUgZ3JpZC4uLicpIH19JworICAgICAgICAg ICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgICAgIHNlbGYucXVl cnlfZW5kX3RpbWUgPSBuZXcgRGF0ZSgpOworICAgICAgICAgICAgICAgICAg ICBzZWxmLnJvd3NfYWZmZWN0ZWQgPSByZXMuZGF0YS5yb3dzX2FmZmVjdGVk OworCisgICAgICAgICAgICAgICAgICAgIC8qIElmIG5vIGNvbHVtbiBpbmZv cm1hdGlvbiBpcyBhdmFpbGFibGUgaXQgbWVhbnMgcXVlcnkKKyAgICAgICAg ICAgICAgICAgICAgICAgcnVucyBzdWNjZXNzZnVsbHkgd2l0aCBubyByZXN1 bHQgdG8gZGlzcGxheS4gSW4gdGhpcworICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIG5vIG5lZWQgdG8gY2FsbCByZW5kZXIgZnVuY3Rpb24uCisgICAg ICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBpZiAo cmVzLmRhdGEuY29saW5mbyAhPSBudWxsKQorICAgICAgICAgICAgICAgICAg ICAgIHNlbGYuX3JlbmRlcihyZXMuZGF0YSk7CisgICAgICAgICAgICAgICAg ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgIC8vIFNob3cgbWVz c2FnZSBpbiBtZXNzYWdlIGFuZCBoaXN0b3J5IHRhYiBpbiBjYXNlIG9mIHF1 ZXJ5IHRvb2wKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLnRvdGFsX3Rp bWUgPSBzZWxmLmdldF9xdWVyeV9ydW5fdGltZShzZWxmLnF1ZXJ5X3N0YXJ0 X3RpbWUsIHNlbGYucXVlcnlfZW5kX3RpbWUpOworICAgICAgICAgICAgICAg ICAgICAgIHNlbGYudXBkYXRlX21zZ19oaXN0b3J5KHRydWUsIHJlcy5kYXRh LnJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgICAgICAgICAvLyBFbmFibGUvRGlzYWJsZSBxdWVyeSB0b29sIGJ1dHRv biBvbmx5IGlmIGlzX3F1ZXJ5X3Rvb2wgaXMgdHJ1ZS4KKyAgICAgICAgICAg ICAgICAgICAgaWYgKHNlbGYuaXNfcXVlcnlfdG9vbCkgeworICAgICAgICAg ICAgICAgICAgICAgIHNlbGYuZGlzYWJsZV90b29sX2J1dHRvbnMoZmFsc2Up OworICAgICAgICAgICAgICAgICAgICAgICQoIiNidG4tY2FuY2VsLXF1ZXJ5 IikucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ZWxzZSBpZiAocmVzLmRhdGEuc3RhdHVzID09PSAnQnVzeScpIHsKKyAgICAg ICAgICAgICAgICAgICAgLy8gSWYgc3RhdHVzIGlzIEJ1c3kgdGhlbiBwb2xs IHRoZSByZXN1bHQgYnkgcmVjdXJzaXZlIGNhbGwgdG8gdGhlIHBvbGwgZnVu Y3Rpb24KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5fcG9sbCgpOworICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo cmVzLmRhdGEuc3RhdHVzID09PSAnTm90Q29ubmVjdGVkJykgeworCisgICAg ICAgICAgICAgICAgICAgIC8vIEVuYWJsZS9EaXNhYmxlIHF1ZXJ5IHRvb2wg YnV0dG9uIG9ubHkgaWYgaXNfcXVlcnlfdG9vbCBpcyB0cnVlLgorICAgICAg ICAgICAgICAgICAgICBpZiAoc2VsZi5pc19xdWVyeV90b29sKSB7CisgICAg ICAgICAgICAgICAgICAgICAgc2VsZi5kaXNhYmxlX3Rvb2xfYnV0dG9ucyhm YWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgJCgiI2J0bi1jYW5jZWwt cXVlcnkiKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUpOworICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlX21z Z19oaXN0b3J5KGZhbHNlLCByZXMuZGF0YS5yZXN1bHQpOworICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzLmRh dGEuc3RhdHVzID09PSAnQ2FuY2VsJykgeworICAgICAgICAgICAgICAgICAg ICBzZWxmLnVwZGF0ZV9tc2dfaGlzdG9yeShmYWxzZSwgIkV4ZWN1dGlvbiBD YW5jZWxsZWQhIikKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICB9LAorICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihlKSB7 CisgICAgICAgICAgICAgICAgICAvLyBFbmFibGUvRGlzYWJsZSBxdWVyeSB0 b29sIGJ1dHRvbiBvbmx5IGlmIGlzX3F1ZXJ5X3Rvb2wgaXMgdHJ1ZS4KKyAg ICAgICAgICAgICAgICAgIGlmIChzZWxmLmlzX3F1ZXJ5X3Rvb2wpIHsKKyAg ICAgICAgICAgICAgICAgICAgc2VsZi5kaXNhYmxlX3Rvb2xfYnV0dG9ucyhm YWxzZSk7CisgICAgICAgICAgICAgICAgICAgICQoIiNidG4tY2FuY2VsLXF1 ZXJ5IikucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKKyAgICAgICAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgICAgICAgaWYgKGUucmVhZHlTdGF0ZSA9 PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHNlbGYudXBkYXRlX21zZ19o aXN0b3J5KGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICd7eyBfKCdO b3QgY29ubmVjdGVkIHRvIHNlcnZlciBPciBjb25uZWN0aW9uIHdpdGggdGhl IHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuJykgfX0nCisgICAgICAgICAgICAg ICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgdmFyIG1zZyA9 IGUucmVzcG9uc2VUZXh0OworICAgICAgICAgICAgICAgICAgaWYgKGUucmVz cG9uc2VKU09OICE9IHVuZGVmaW5lZCAmJgorICAgICAgICAgICAgICAgICAg ICBlLnJlc3BvbnNlSlNPTi5lcnJvcm1zZyAhPSB1bmRlZmluZWQpCisgICAg ICAgICAgICAgICAgICAgIG1zZyA9IGUucmVzcG9uc2VKU09OLmVycm9ybXNn OworCisgICAgICAgICAgICAgICAgICBzZWxmLnVwZGF0ZV9tc2dfaGlzdG9y eShmYWxzZSwgbXNnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgIH0pOworICAgICAgICAgIH0sIDEpOworICAgICAgICB9LAorCisgICAg ICAgIC8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjcmVhdGUgdGhlIGJh Y2tncmlkIGNvbHVtbnMsCisgICAgICAgICAqIGNyZWF0ZSB0aGUgQmFja2Jv bmUgUGFnZWFibGVDb2xsZWN0aW9uIGFuZCBmaW5hbGx5IHJlbmRlcgorICAg ICAgICAgKiB0aGUgZGF0YSBpbiB0aGUgYmFja2dyaWQuCisgICAgICAgICAq LworICAgICAgICBfcmVuZGVyOiBmdW5jdGlvbihkYXRhKSB7CisgICAgICAg ICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICAgIHNlbGYuY29saW5mbyA9 IGRhdGEuY29sX2luZm87CisgICAgICAgICAgc2VsZi5wcmltYXJ5X2tleXMg PSBkYXRhLnByaW1hcnlfa2V5czsKKyAgICAgICAgICBzZWxmLmNlbGxfc2Vs ZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgICBzZWxmLnNlbGVjdGVkX21vZGVs ID0gbnVsbDsKKyAgICAgICAgICBzZWxmLmNoYW5nZWRNb2RlbHMgPSBbXTsK KworICAgICAgICAgIC8vIFN0b3AgbGlzdGVuaW5nIHRvIGFsbCB0aGUgZXZl bnRzCisgICAgICAgICAgaWYgKHNlbGYuY29sbGVjdGlvbikgeworICAgICAg ICAgICAgc2VsZi5jb2xsZWN0aW9uLm9mZignY2hhbmdlJywgc2VsZi5vbl9t b2RlbF9jaGFuZ2UsIHNlbGYpOworICAgICAgICAgICAgc2VsZi5jb2xsZWN0 aW9uLm9mZignYmFja2dyaWQ6c2VsZWN0ZWQnLCBzZWxmLm9uX2JhY2tncmlk X3NlbGVjdGVkLCBzZWxmKTsKKyAgICAgICAgICAgIHNlbGYuY29sbGVjdGlv bi5vZmYoJ2JhY2tncmlkOmVkaXRpbmcnLCBzZWxmLm9uX2NlbGxfZWRpdGlu Zywgc2VsZik7CisgICAgICAgICAgfQorCisgICAgICAgICAgLyogSWYgb2Jq ZWN0IGRvbid0IGhhdmUgcHJpbWFyeSBrZXlzIHRoZW4gc2V0IHRoZQorICAg ICAgICAgICAqIGNhbl9lZGl0IGZsYWcgdG8gZmFsc2UuCisgICAgICAgICAg ICovCisgICAgICAgICAgaWYgKHNlbGYucHJpbWFyeV9rZXlzID09PSBudWxs IHx8IHNlbGYucHJpbWFyeV9rZXlzID09PSB1bmRlZmluZWQKKyAgICAgICAg ICAgICAgfHwgXy5zaXplKHNlbGYucHJpbWFyeV9rZXlzKSA9PT0gMCkKKyAg ICAgICAgICAgIHNlbGYuY2FuX2VkaXQgPSBmYWxzZTsKKyAgICAgICAgICBl bHNlCisgICAgICAgICAgICBzZWxmLmNhbl9lZGl0ID0gdHJ1ZTsKKworICAg ICAgICAgIC8qIElmIHVzZXIgY2FuIGVkaXQgdGhlIGRhdGEgdGhlbiB3ZSBz aG91bGQgZW5hYmxlZAorICAgICAgICAgICAqIENvcHkgUm93LCBQYXN0ZSBS b3cgYW5kICdBZGQgTmV3IFJvdycgYnV0dG9ucy4KKyAgICAgICAgICAgKi8K KyAgICAgICAgICBpZiAoc2VsZi5jYW5fZWRpdCkgeworICAgICAgICAgICAg JCgiI2J0bi1hZGQtcm93IikucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7Cisg ICAgICAgICAgICAkKCIjYnRuLWNvcHkiKS5wcm9wKCdkaXNhYmxlZCcsIGZh bHNlKTsKKyAgICAgICAgICAgICQoIiNidG4tcGFzdGUiKS5wcm9wKCdkaXNh YmxlZCcsIGZhbHNlKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvKiBJ ZiB1c2VyIGNhbiBmaWx0ZXIgdGhlIGRhdGEgdGhlbiB3ZSBzaG91bGQgZW5h YmxlZAorICAgICAgICAgICAqIEZpbHRlciBhbmQgTGltaXQgYnV0dG9ucy4K KyAgICAgICAgICAgKi8KKyAgICAgICAgICBpZiAoc2VsZi5jYW5fZmlsdGVy KSB7CisgICAgICAgICAgICAkKCIubGltaXQiKS5wcm9wKCdkaXNhYmxlZCcs IGZhbHNlKTsKKyAgICAgICAgICAgICQoIi5saW1pdCIpLmFkZENsYXNzKCds aW1pdC1lbmFibGVkJyk7CisgICAgICAgICAgICAkKCIjYnRuLWZpbHRlciIp LnByb3AoJ2Rpc2FibGVkJywgZmFsc2UpOworICAgICAgICAgICAgJCgiI2J0 bi1maWx0ZXItZHJvcGRvd24iKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsK KyAgICAgICAgICB9CisKKyAgICAgICAgICAvLyBGZXRjaCB0aGUgY29sdW1u cyBtZXRhZGF0YQorICAgICAgICAgIHNlbGYuY29sdW1ucyA9IHNlbGYuX2Zl dGNoX2NvbHVtbl9tZXRhZGF0YShkYXRhKTsKKworICAgICAgICAgIHNlbGYu dHJpZ2dlcigKKyAgICAgICAgICAgICdwZ2FkbWluLXNxbGVkaXRvcjpsb2Fk aW5nLWljb246bWVzc2FnZScsCisgICAgICAgICAgICAne3sgXygnTG9hZGlu ZyB0aGUgZGF0YSBmcm9tIHRoZSBkYXRhYmFzZSBzZXJ2ZXIsIGFuZCByZW5k ZXJpbmcgaW50byB0aGUgZ3JpZC4uLicpIH19JywKKyAgICAgICAgICAgIHNl bGYKKyAgICAgICAgICApOworCisgICAgICAgICAgLy8gRGVmaW5pbmcgYmFj a2JvbmUncyBwYWdlYWJsZSBjb2xsZWN0aW9uLgorICAgICAgICAgIHNlbGYu Y29sbGVjdGlvbiA9IG5ldyAoQmFja2JvbmUuUGFnZWFibGVDb2xsZWN0aW9u LmV4dGVuZCh7CisgICAgICAgICAgICBtb2RlOiAiY2xpZW50IiwKKyAgICAg ICAgICAgIHN0YXRlOiB7CisgICAgICAgICAgICAgIHBhZ2VTaXplOiBzZWxm Lml0ZW1zX3Blcl9wYWdlLAorICAgICAgICAgICAgICBvcmRlcjogLTEKKyAg ICAgICAgICAgIH0sCisgICAgICAgICAgICBtb2RlbDogc3FsRWRpdG9yVmll d01vZGVsLmV4dGVuZCh7CisgICAgICAgICAgICAgIHByaW1hcnlfa2V5czog c2VsZi5wcmltYXJ5X2tleXMsCisKKyAgICAgICAgICAgICAgLyogQ2hhbmdl IHRoZSBpZEF0dHJpYnV0ZSB0byByYW5kb20gc3RyaW5nCisgICAgICAgICAg ICAgICAqIHNvIHRoYXQgaXQgd29uJ3QgY2xhc2ggd2l0aCBpZCBjb2x1bW4g b2YKKyAgICAgICAgICAgICAgICogdGhlIHRhYmxlLgorICAgICAgICAgICAg ICAgKi8KKyAgICAgICAgICAgICAgaWRBdHRyaWJ1dGU6IGVwaWNSYW5kb21T dHJpbmcoMTApCisgICAgICAgICAgICB9KQorICAgICAgICAgIH0pKTsKKwor ICAgICAgICAgIC8vIExpc3RlbiBvbiBiYWNrZ3JpZCBldmVudHMKKyAgICAg ICAgICBzZWxmLmNvbGxlY3Rpb24ub24oJ2NoYW5nZScsIHNlbGYub25fbW9k ZWxfY2hhbmdlLCBzZWxmKTsKKyAgICAgICAgICBzZWxmLmNvbGxlY3Rpb24u b24oJ2JhY2tncmlkOnNlbGVjdGVkJywgc2VsZi5vbl9iYWNrZ3JpZF9zZWxl Y3RlZCwgc2VsZik7CisgICAgICAgICAgc2VsZi5jb2xsZWN0aW9uLm9uKCdi YWNrZ3JpZDplZGl0aW5nJywgc2VsZi5vbl9jZWxsX2VkaXRpbmcsIHNlbGYp OworICAgICAgICAgIHNlbGYuY29sbGVjdGlvbi5vbignYmFja2dyaWQ6cm93 OnNlbGVjdGVkJywgc2VsZi5vbl9yb3dfc2VsZWN0ZWQsIHNlbGYpOworICAg ICAgICAgIHNlbGYuY29sbGVjdGlvbi5vbignYmFja2dyaWQ6cm93OmRlc2Vs ZWN0ZWQnLCBzZWxmLm9uX3Jvd19kZXNlbGVjdGVkLCBzZWxmKTsKKworICAg ICAgICAgIC8vIFNob3cgbWVzc2FnZSBpbiBtZXNzYWdlIGFuZCBoaXN0b3J5 IHRhYiBpbiBjYXNlIG9mIHF1ZXJ5IHRvb2wKKyAgICAgICAgICBzZWxmLnRv dGFsX3RpbWUgPSBzZWxmLmdldF9xdWVyeV9ydW5fdGltZShzZWxmLnF1ZXJ5 X3N0YXJ0X3RpbWUsIHNlbGYucXVlcnlfZW5kX3RpbWUpOworICAgICAgICAg IHNlbGYudXBkYXRlX21zZ19oaXN0b3J5KHRydWUsICIiLCBmYWxzZSk7Cisg ICAgICAgICAgdmFyIG1lc3NhZ2UgPSAnVG90YWwgcXVlcnkgcnVudGltZTog JyArIHNlbGYudG90YWxfdGltZSArICdcbicgKyBzZWxmLnJvd3NfYWZmZWN0 ZWQgKyAnIHJvd3MgcmV0cmlldmVkLic7CisgICAgICAgICAgJCgnLnNxbC1l ZGl0b3ItbWVzc2FnZScpLnRleHQobWVzc2FnZSk7CisKKyAgICAgICAgICAv LyBBZGQgdGhlIGRhdGEgdG8gdGhlIGNvbGxlY3Rpb24gYW5kIHJlbmRlciB0 aGUgZ3JpZC4KKyAgICAgICAgICBzZWxmLmNvbGxlY3Rpb24uYWRkKGRhdGEu cmVzdWx0LCB7cGFyc2U6IHRydWV9KTsKKyAgICAgICAgICBzZWxmLmdyaWRW aWV3LnJlbmRlcl9ncmlkKHNlbGYuY29sbGVjdGlvbiwgc2VsZi5jb2x1bW5z KTsKKyAgICAgICAgICBzZWxmLmdyaWRWaWV3LmRhdGFfb3V0cHV0X3BhbmVs LmZvY3VzKCk7CisKKyAgICAgICAgICAvLyBIaWRlIHRoZSBsb2FkaW5nIGlj b24KKyAgICAgICAgICBzZWxmLnRyaWdnZXIoJ3BnYWRtaW4tc3FsZWRpdG9y OmxvYWRpbmctaWNvbjpoaWRlJyk7CisgICAgICAgIH0sCisKKyAgICAgICAg Ly8gVGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSBjb2x1bW5zIGFzIHJlcXVp cmVkIGJ5IHRoZSBiYWNrZ3JpZAorICAgICAgICBfZmV0Y2hfY29sdW1uX21l dGFkYXRhOiBmdW5jdGlvbihkYXRhKSB7CisgICAgICAgICAgdmFyIGNvbGlu Zm8gPSBkYXRhLmNvbGluZm8sCisgICAgICAgICAgICAgIHByaW1hcnlfa2V5 cyA9IGRhdGEucHJpbWFyeV9rZXlzLAorICAgICAgICAgICAgICByZXN1bHQg PSBkYXRhLnJlc3VsdCwKKyAgICAgICAgICAgICAgc2VsZiA9IHRoaXMsCisg ICAgICAgICAgICAgIGNvbHVtbnMgPSBbeworICAgICAgICAgICAgICAgIC8v IG5hbWUgaXMgYSByZXF1aXJlZCBwYXJhbWV0ZXIsIGJ1dCB5b3UgZG9uJ3Qg cmVhbGx5IHdhbnQgb25lIG9uIGEgc2VsZWN0IGFsbCBjb2x1bW4KKyAgICAg ICAgICAgICAgICBuYW1lOiAiIiwKKworICAgICAgICAgICAgICAgIC8qIEV4 dGVuZCBCYWNrZ3JpZC5FeHRlbnNpb24uU2VsZWN0Um93Q2VsbCB0byBjcmVh dGUKKyAgICAgICAgICAgICAgICAgKiBhIGN1c3RvbSBjaGVja2JveCB3aGVy ZSB3ZSBjaGFuZ2UgdGhlIGljb24gd2hlbiB1c2VyCisgICAgICAgICAgICAg ICAgICogY2xpY2sgb24gY2hlY2tib3guCisgICAgICAgICAgICAgICAgICov CisgICAgICAgICAgICAgICAgY2VsbDogQmFja2dyaWQuRXh0ZW5zaW9uLlNl bGVjdFJvd0NlbGwuZXh0ZW5kKHsKKyAgICAgICAgICAgICAgICAgIHJlbmRl cjogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBzZWxm ID0gdGhpcywKKyAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gXy51bmlx dWVJZCgnc3FsX2dyaWRfZGVsZXRhYmxlXycpOworICAgICAgICAgICAgICAg ICAgICBCYWNrZ3JpZC5FeHRlbnNpb24uU2VsZWN0Um93Q2VsbC5wcm90b3R5 cGUucmVuZGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisKKyAgICAgICAg ICAgICAgICAgICAgLy8gRmluZCB0aGUgaW5wdXQgY29udHJvbCBhbmQgYWRk IHNxbGVkaXRvci1jaGVja2JveCBjbGFzcworICAgICAgICAgICAgICAgICAg ICB0aGlzLiRlbC5maW5kKCdpbnB1dCcpLmF0dHIoJ2lkJywgaWQpLmFkZENs YXNzKAorICAgICAgICAgICAgICAgICAgICAgICAgJ3NxbGVkaXRvci1jaGVj a2JveCcKKyAgICAgICAgICAgICAgICAgICAgICAgICkucHJvcCgnY2hlY2tl ZCcsIHRoaXMubW9kZWwubWFya2VkX2Zvcl9kZWxldGlvbik7CisKKyAgICAg ICAgICAgICAgICAgICAgLy8gQXBwZW5kIHRoZSBsYWJlbCBhbmQgYWRkIGNs YXNzIHRvIGNoYW5nZSB0aGUgaWNvbiBhbmQgY29sb3IgdXNpbmcgY3NzCisg ICAgICAgICAgICAgICAgICAgIHRoaXMuJGVsLmFwcGVuZCgKKyAgICAgICAg ICAgICAgICAgICAgICAgICQoJzxsYWJlbD4nLCB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZm9yOiBpZCwgY2xhc3M6ICdkZWxldGFibGUnCisg ICAgICAgICAgICAgICAgICAgICAgICB9KS5hcHBlbmQoJCgnPHNwYW4+Jykp KTsKKworICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlRXZlbnRz KCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pLAorCisgICAgICAg ICAgICAgICAgLy8gQmFja2dyaWQuRXh0ZW5zaW9uLlNlbGVjdEFsbEhlYWRl ckNlbGwgbGV0cyB5b3Ugc2VsZWN0IGFsbCB0aGUgcm93IG9uIGEgcGFnZQor ICAgICAgICAgICAgICAgIGhlYWRlckNlbGw6ICJzZWxlY3QtYWxsIgorICAg ICAgICAgICAgICB9XTsKKworICAgICAgICAgIC8qIElmIHVzZXIgd2lsbCBu b3QgYmUgYWJsZSB0byBlZGl0IGRhdGEKKyAgICAgICAgICAgKiB0aGVuIG5v IG5lZWQgdG8gc2hvdyAnc2VsZWN0LWFsbCcgY29sdW1uLgorICAgICAgICAg ICAqLworICAgICAgICAgIGlmICghc2VsZi5jYW5fZWRpdCkgeworICAgICAg ICAgICAgY29sdW1ucyA9IFtdOworICAgICAgICAgICAgJCgnI2RhdGFncmlk JykucmVtb3ZlQ2xhc3MoJ2hhcy1zZWxlY3QtYWxsJyk7CisgICAgICAgICAg fQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKCQoJyNkYXRh Z3JpZCcpLmhhc0NsYXNzKCdoYXMtc2VsZWN0LWFsbCcpID09PSBmYWxzZSkK KyAgICAgICAgICAgICAgICAkKCcjZGF0YWdyaWQnKS5hZGRDbGFzcygnaGFz LXNlbGVjdC1hbGwnKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICBzZWxm LnRyaWdnZXIoCisgICAgICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6bG9h ZGluZy1pY29uOm1lc3NhZ2UnLAorICAgICAgICAgICAgJ3t7IF8oJ0ZldGNo aW5nIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29sdW1ucyByZXR1cm5l ZC4uLicpIH19JworICAgICAgICAgICk7CisKKyAgICAgICAgICAvLyBNYWtl IGFqYXggY2FsbCB0byBmZXRjaCB0aGUgcGcgdHlwZXMgdG8gbWFwIG51bWVy aWMgZGF0YSB0eXBlCisgICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAg IHVybDogInt7IHVybF9mb3IoJ3NxbGVkaXRvci5pbmRleCcpIH19IiArICJm ZXRjaC90eXBlcy8iICsgc2VsZi50cmFuc0lkLAorICAgICAgICAgICAgbWV0 aG9kOiAnR0VUJywKKyAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAgICAg ICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgeworICAgICAgICAgICAg ICBpZiAocmVzLmRhdGEuc3RhdHVzKSB7CisgICAgICAgICAgICAgICAgLy8g U3RvcmUgcGdfdHlwZXMgaW4gYW4gYXJyYXkKKyAgICAgICAgICAgICAgICB2 YXIgcGdfdHlwZXMgPSBuZXcgQXJyYXkoKTsKKyAgICAgICAgICAgICAgICBf LmVhY2gocmVzLmRhdGEucmVzdWx0LnJvd3MsIGZ1bmN0aW9uKHIpIHsKKyAg ICAgICAgICAgICAgICAgIHBnX3R5cGVzW3Iub2lkXSA9IFtyLnR5cG5hbWVd OworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgLy8g Q3JlYXRlIGNvbHVtbnMgcmVxdWlyZWQgYnkgYmFja2dyaWQgdG8gcmVuZGVy CisgICAgICAgICAgICAgICAgXy5lYWNoKGNvbGluZm8sIGZ1bmN0aW9uKGMp IHsKKyAgICAgICAgICAgICAgICAgIHZhciBpc19wcmltYXJ5X2tleSA9IGZh bHNlOworCisgICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRh YmxlIGhhdmUgcHJpbWFyeSBrZXkKKyAgICAgICAgICAgICAgICAgIGlmIChf LnNpemUocHJpbWFyeV9rZXlzKSA+IDApIHsKKyAgICAgICAgICAgICAgICAg ICAgXy5lYWNoKHByaW1hcnlfa2V5cywgZnVuY3Rpb24gKHZhbHVlLCBrZXkp IHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoa2V5ID09PSBjLm5hbWUp CisgICAgICAgICAgICAgICAgICAgICAgICBpc19wcmltYXJ5X2tleSA9IHRy dWU7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg ICAgfQorCisgICAgICAgICAgICAgICAgICAvLyBDcmVhdGUgY29sdW1uIGxh YmVsLgorICAgICAgICAgICAgICAgICAgdmFyIHR5cGUgPSBwZ190eXBlc1tj LnR5cGVfY29kZV1bMF07CisgICAgICAgICAgICAgICAgICB2YXIgY29sX2xh YmVsID0gYy5uYW1lOworICAgICAgICAgICAgICAgICAgaWYgKCFpc19wcmlt YXJ5X2tleSkKKyAgICAgICAgICAgICAgICAgICAgY29sX2xhYmVsICs9ICcg JyArIHR5cGU7CisgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICAgICAgICAgIGNvbF9sYWJlbCArPSAnIFtQS10gJyArIHR5cGU7CisKKyAg ICAgICAgICAgICAgICAgIGlmIChjLnByZWNpc2lvbiA9PSBudWxsKSB7Cisg ICAgICAgICAgICAgICAgICAgIGlmIChjLmludGVybmFsX3NpemUgPiAwKQor ICAgICAgICAgICAgICAgICAgICAgIGNvbF9sYWJlbCArPSAnKCcgKyBjLmlu dGVybmFsX3NpemUgKyAnKSc7CisgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNvbF9s YWJlbCArPSAnKCcgKyBjLnByZWNpc2lvbiArICcsJyArIGMuc2NhbGUgKyAn KSc7CisKKyAgICAgICAgICAgICAgICAgIC8vIElkZW50aWZ5IGNlbGwgdHlw ZSBvZiBjb2x1bW4uCisgICAgICAgICAgICAgICAgICBzd2l0Y2godHlwZSkg eworICAgICAgICAgICAgICAgICAgICBjYXNlICJpbnRlZ2VyIjoKKyAgICAg ICAgICAgICAgICAgICAgICBjb2xfY2VsbCA9ICdpbnRlZ2VyJzsKKyAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg Y2FzZSAiYm9vbGVhbiI6CisgICAgICAgICAgICAgICAgICAgICAgY29sX2Nl bGwgPSAnYm9vbGVhbic7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIm51bWVyaWMiOgorICAgICAg ICAgICAgICAgICAgICAgIGNvbF9jZWxsID0gJ251bWJlcic7CisgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh c2UgInRpbWVzdGFtcCB3aXRob3V0IHRpbWUgem9uZSI6CisgICAgICAgICAg ICAgICAgICAgIGNhc2UgInRpbWVzdGFtcCB3aXRoIHRpbWUgem9uZSI6Cisg ICAgICAgICAgICAgICAgICAgICAgY29sX2NlbGwgPSAnZGF0ZXRpbWUnOwor ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgIGNvbF9jZWxs ID0gJ3N0cmluZyc7CisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgICAgICAgIHZhciBjb2wgPSB7CisgICAgICAgICAgICAgICAgICAgIG5h bWUgOiBjLm5hbWUsCisgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb2xf bGFiZWwsCisgICAgICAgICAgICAgICAgICAgIGNlbGw6IGNvbF9jZWxsLAor ICAgICAgICAgICAgICAgICAgICBjYW5fZWRpdDogc2VsZi5jYW5fZWRpdCwK KyAgICAgICAgICAgICAgICAgICAgZWRpdGFibGU6IHNlbGYuaXNfZWRpdGFi bGUKKyAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAg IGNvbHVtbnMucHVzaChjb2wpOworICAgICAgICAgICAgICAgIH0pOworICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg ICAgICAgYWxlcnRpZnkuYWxlcnQoJ0ZldGNoaW5nIFR5cGUgRXJyb3InLCBy ZXMuZGF0YS5yZXN1bHQpOworICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgICAgfSk7CisKKyAgICAgICAgICByZXR1cm4gY29sdW1u czsKKyAgICAgICAgfSwKKworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlz IHVzZWQgdG8gcmFpc2UgYXBwcm9wcmlhdGUgbWVzc2FnZS4KKyAgICAgICAg dXBkYXRlX21zZ19oaXN0b3J5OiBmdW5jdGlvbihzdGF0dXMsIG1zZywgY2xl YXJfZ3JpZCkgeworICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAg ICAgICAgIGlmIChjbGVhcl9ncmlkID09PSB1bmRlZmluZWQpCisgICAgICAg ICAgICBjbGVhcl9ncmlkID0gdHJ1ZTsKKworICAgICAgICAgIHNlbGYudHJp Z2dlcigncGdhZG1pbi1zcWxlZGl0b3I6bG9hZGluZy1pY29uOmhpZGUnKTsK KyAgICAgICAgICAkKCcuc3FsLWVkaXRvci1tZXNzYWdlJykudGV4dChtc2cp OworICAgICAgICAgIHNlbGYuZ3JpZFZpZXcubWVzc2FnZXNfcGFuZWwuZm9j dXMoKTsKKworICAgICAgICAgIGlmIChzZWxmLmlzX3F1ZXJ5X3Rvb2wgJiYg Y2xlYXJfZ3JpZCkgeworICAgICAgICAgICAgLy8gRGVsZXRlIGdyaWQgYW5k IHBhZ2luYXRvcgorICAgICAgICAgICAgaWYgKHNlbGYuZ3JpZFZpZXcuZ3Jp ZCkgeworICAgICAgICAgICAgICBzZWxmLmdyaWRWaWV3LmdyaWQucmVtb3Zl KCk7CisgICAgICAgICAgICAgIHNlbGYuY29sdW1ucyA9IHVuZGVmaW5lZDsK KyAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0aW9uID0gdW5kZWZpbmVkOwor ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc2VsZi5ncmlkVmll dy5wYWdpbmF0b3IpCisgICAgICAgICAgICAgc2VsZi5ncmlkVmlldy5wYWdp bmF0b3IucmVtb3ZlKCk7CisgICAgICAgICAgfQorCisgICAgICAgICAgc2Vs Zi5ncmlkVmlldy5oaXN0b3J5X2NvbGxlY3Rpb24uYWRkKAorICAgICAgICAg ICAgeydzdGF0dXMnIDogc3RhdHVzLCAnc3RhcnRfdGltZSc6IHNlbGYucXVl cnlfc3RhcnRfdGltZS50b1N0cmluZygpLAorICAgICAgICAgICAgICdxdWVy eSc6IHNlbGYucXVlcnksICdyb3dfYWZmZWN0ZWQnOiBzZWxmLnJvd3NfYWZm ZWN0ZWQsCisgICAgICAgICAgICAgJ3RvdGFsX3RpbWUnOiBzZWxmLnRvdGFs X3RpbWUsICdtZXNzYWdlJzptc2cKKyAgICAgICAgICB9KTsKKworICAgICAg ICAgIHNlbGYuZ3JpZFZpZXcuaGlzdG9yeV9jb2xsZWN0aW9uLnNvcnQoKTsK KyAgICAgICAgfSwKKworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwg cmV0dXJuIHRoZSB0b3RhbCBxdWVyeSBleGVjdXRpb24gVGltZS4KKyAgICAg ICAgZ2V0X3F1ZXJ5X3J1bl90aW1lOiBmdW5jdGlvbiAoc3RhcnRfdGltZSwg ZW5kX3RpbWUpIHsKKyAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAg ICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIGRpZmZlcmVuY2UgaW4gbWlsbGlz ZWNvbmRzCisgICAgICAgICAgdmFyIGRpZmZlcmVuY2VfbXMgPSBtaWxpc2Vj b25kcyA9IGVuZF90aW1lLmdldFRpbWUoKSAtIHN0YXJ0X3RpbWUuZ2V0VGlt ZSgpOworICAgICAgICAgIC8vdGFrZSBvdXQgbWlsbGlzZWNvbmRzCisgICAg ICAgICAgZGlmZmVyZW5jZV9tcyA9IGRpZmZlcmVuY2VfbXMvMTAwMDsKKyAg ICAgICAgICB2YXIgc2Vjb25kcyA9IE1hdGguZmxvb3IoZGlmZmVyZW5jZV9t cyAlIDYwKTsKKyAgICAgICAgICBkaWZmZXJlbmNlX21zID0gZGlmZmVyZW5j ZV9tcy82MDsKKyAgICAgICAgICB2YXIgbWludXRlcyA9IE1hdGguZmxvb3Io ZGlmZmVyZW5jZV9tcyAlIDYwKTsKKworICAgICAgICAgIGlmIChtaW51dGVz ID4gMCkKKyAgICAgICAgICAgIHJldHVybiBtaW51dGVzICsgJyBtaW4nOwor ICAgICAgICAgIGVsc2UgaWYgKHNlY29uZHMgPiAwKSB7CisgICAgICAgICAg ICByZXR1cm4gc2Vjb25kcyArICcgc2Vjcyc7CisgICAgICAgICAgfQorICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBtaWxpc2Vjb25kcyAr ICcgbXNlYyc7CisgICAgICAgIH0sCisKKyAgICAgICAgLyogVGhpcyBmdW5j dGlvbiBpcyB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgY2VsbAorICAgICAgICAg KiBpcyBlZGl0YWJsZSBvciBub3QgZGVwZW5kaW5nIG9uIHByaW1hcnkga2V5 cworICAgICAgICAgKiBhbmQgbWFya2VkX2Zvcl9kZWxldGlvbiBmbGFnCisg ICAgICAgICAqLworICAgICAgICBpc19lZGl0YWJsZTogZnVuY3Rpb24ob2Jq KSB7CisgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICAgIGlm IChvYmogaW5zdGFuY2VvZiBCYWNrYm9uZS5Db2xsZWN0aW9uKQorICAgICAg ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgIHJldHVybiAoc2VsZi5n ZXQoJ2Nhbl9lZGl0JykgJiYgIW9iai5tYXJrZWRfZm9yX2RlbGV0aW9uKTsK KyAgICAgICAgfSwKKworICAgICAgICAvKiBUaGlzIGlzIGEgY2FsbGJhY2sg ZnVuY3Rpb24gd2hlbiB0aGVyZSBpcyBhbnkgY2hhbmdlCisgICAgICAgICAq IGluIHRoZSBtb2RlbCBhbmQgc3RvcmVzIHRoZSB1bmlxdWUgaWQgKGNpZCkg dG8gdGhlIGNoYW5nZWRNb2RlbHMKKyAgICAgICAgICogYXJyYXkgd2hpY2gg d2lsbCBiZSB1c2VkIHdoZW4gU2F2ZSBidXR0b24gaXMgY2xpY2tlZC4KKyAg ICAgICAgICovCisgICAgICAgIG9uX21vZGVsX2NoYW5nZTogZnVuY3Rpb24o bW9kZWwpIHsKKyAgICAgICAgICAkKCIjYnRuLXNhdmUiKS5wcm9wKCdkaXNh YmxlZCcsIGZhbHNlKTsKKyAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Cisg ICAgICAgICAgbW9kZWwuY2hhbmdlZF9kYXRhID0gdHJ1ZTsKKyAgICAgICAg ICBpZiAoXy5pbmRleE9mKHNlbGYuY2hhbmdlZE1vZGVscywgbW9kZWwuY2lk KSA9PSAtMSkgeworICAgICAgICAgICAgc2VsZi5jaGFuZ2VkTW9kZWxzLnB1 c2gobW9kZWwuY2lkKTsKKyAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJu OworICAgICAgICB9LAorCisgICAgICAgIC8vIFRoaXMgaXMgYSBjYWxsYmFj ayBmdW5jdGlvbiB3aGVuIGJhY2tncmlkIGlzIHNlbGVjdGVkCisgICAgICAg IG9uX2JhY2tncmlkX3NlbGVjdGVkOiBmdW5jdGlvbiAobW9kZWwsIHNlbGVj dGVkKSB7CisgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAorICAgICAgICAg ICAgICBpdGVtX2lkeCA9IF8uaW5kZXhPZihzZWxmLmNoYW5nZWRNb2RlbHMs IG1vZGVsLmNpZCk7CisKKyAgICAgICAgICAvLyBJZiBkYXRhIGNhbid0IGJl IGVkaXRlZCB0aGVuIG5vIG5lZWQgdG8gbWFya2VkIGZvciBkZWxldGlvbi4K KyAgICAgICAgICBpZiAoIXNlbGYuY2FuX2VkaXQpCisgICAgICAgICAgIHJl dHVybjsKKworICAgICAgICAgIGlmIChzZWxlY3RlZCkgeworICAgICAgICAg ICAgLyogQ2hlY2sgd2hldGhlciBpdCBpcyBhIG5ldyByb3csIG5vdCBpbnNl cnRlZAorICAgICAgICAgICAgICogeWV0IHRvIHRoZSBkYXRhYmFzZS4gSWYg eWVzIHRoZW4gcmVtb3ZlIHRoZSByb3cKKyAgICAgICAgICAgICAqIGltbWVk aWF0ZWx5LiBJZiBub3QgdGhlbiBtYXJrZWQgdGhlIHJvdyBmb3IgZGVsZXRp b24uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICgnZ3JpZF9r ZXlzJyBpbiBtb2RlbCkgeworICAgICAgICAgICAgICBtb2RlbC5tYXJrZWRf Zm9yX2RlbGV0aW9uID0gdHJ1ZTsKKworICAgICAgICAgICAgICAvLyBQdXNo IHRoZSBtb2RlbCBpZiBub3QgYWxyZWFkeSBleGlzdCBhbmQgaWYgZXhpc3Rz IHRoZW4gdXBkYXRlIHRoZSBmbGFnCisgICAgICAgICAgICAgIGlmIChpdGVt X2lkeCA9PSAtMSkKKyAgICAgICAgICAgICAgICBzZWxmLmNoYW5nZWRNb2Rl bHMucHVzaChtb2RlbC5jaWQpOworCisgICAgICAgICAgICB9CisgICAgICAg ICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgIC8vIFBvcCB0aGUgbW9kZWwg ZnJvbSBjaGFuZ2VkIG1vZGVsIGxpc3QgaWYgYWxyZWFkeSBleGlzdAorICAg ICAgICAgICAgICBpZiAoaXRlbV9pZHggIT0gLTEpCisgICAgICAgICAgICAg ICAgc2VsZi5jaGFuZ2VkTW9kZWxzLnNwbGljZShpdGVtX2lkeCwgMSk7CisK KyAgICAgICAgICAgICAgc2VsZi5jb2xsZWN0aW9uLnJlbW92ZShtb2RlbCk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2Ug eworICAgICAgICAgICAgaWYgKGl0ZW1faWR4ICE9IC0xKSB7CisgICAgICAg ICAgICAgIG1vZGVsLm1hcmtlZF9mb3JfZGVsZXRpb24gPSBmYWxzZTsKKyAg ICAgICAgICAgICAgLyogSW4gY2FzZSBvZiBkZXNlbGVjdGVkIHdlIGNoZWNr IHdoZXRoZXIgZGF0YSBpcyB1cGRhdGVkCisgICAgICAgICAgICAgICAqIGZv ciB0aGlzIG1vZGVsLCBpZiBub3QgdXBkYXRlZCB0aGVuIGRlbGV0ZSBpdCBm cm9tCisgICAgICAgICAgICAgICAqIGNoYW5nZWQgbGlzdC4KKyAgICAgICAg ICAgICAgICovCisgICAgICAgICAgICAgIGlmICghbW9kZWwuY2hhbmdlZF9k YXRhKQorICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlZE1vZGVscy5zcGxp Y2UoaXRlbV9pZHgsIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0K KworICAgICAgICAgIC8vIFRyaWdnZXIgdGhlIG1hcmsgZm9yIGRlbGV0aW9u IGV2ZW50IHdoZXJlIFNxbEVkaXRvckN1c3RvbVJvdyBpcyBsaXN0ZW5pbmcK KyAgICAgICAgICBtb2RlbC50cmlnZ2VyKCdiYWNrZ3JpZDpyb3c6bWFyazpk ZWxldGlvbicsIG1vZGVsKTsKKworICAgICAgICAgIC8vIEVuYWJsZS9EaXNh YmxlIFNhdmUgYnV0dG9uCisgICAgICAgICAgaWYgKHNlbGYuY2hhbmdlZE1v ZGVscy5sZW5ndGggPiAwKQorICAgICAgICAgICAgJCgiI2J0bi1zYXZlIiku cHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CisgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgJCgiI2J0bi1zYXZlIikucHJvcCgnZGlzYWJsZWQnLCB0cnVl KTsKKyAgICAgICAgfSwKKworICAgICAgICAvKiBUaGlzIGlzIGEgY2FsbGJh Y2sgZnVuY3Rpb24gd2hlbiBiYWNrZ3JpZCBjZWxsCisgICAgICAgICAqIGlz IHNlbGVjdGVkIHdlIG5lZWQgdGhpcyBldmVudCBmb3IgZmlsdGVyIGJ5IHNl bGVjdGlvbgorICAgICAgICAgKiBvciBmaWx0ZXIgZXhjbHVkZSBzZWxlY3Rp b24uCisgICAgICAgICAqLworICAgICAgICBvbl9jZWxsX2VkaXRpbmc6IGZ1 bmN0aW9uIChtb2RlbCwgY29sdW1uKSB7CisgICAgICAgICAgdmFyIHNlbGYg PSB0aGlzOworCisgICAgICAgICAgc2VsZi5jZWxsX3NlbGVjdGVkID0gdHJ1 ZTsKKyAgICAgICAgICBzZWxmLmNvbHVtbl9uYW1lID0gY29sdW1uLmF0dHJp YnV0ZXMubmFtZTsKKyAgICAgICAgICBzZWxmLmNvbHVtbl92YWx1ZSA9IG1v ZGVsLmF0dHJpYnV0ZXNbc2VsZi5jb2x1bW5fbmFtZV0KKyAgICAgICAgfSwK KworICAgICAgICAvKiBUaGlzIGlzIGEgY2FsbGJhY2sgZnVuY3Rpb24gd2hl biBiYWNrZ3JpZCByb3cKKyAgICAgICAgICogaXMgc2VsZWN0ZWQuIFRoaXMg ZnVuY3Rpb24gd2lsbCBjaGFuZ2UgdGhlIGNvbG9yCisgICAgICAgICAqIG9m IHRoZSBiYWNrZ3JpZCByb3cgYW5kIHNhdmVkIHRoZSBzZWxlY3RlZCBtb2Rl bC4KKyAgICAgICAgICovCisgICAgICAgIG9uX3Jvd19zZWxlY3RlZDogZnVu Y3Rpb24ocm93KSB7CisgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAg ICAgICAgIGlmIChzZWxmLnNlbGVjdGVkX3JvdyAmJiBzZWxmLnNlbGVjdGVk X3Jvdy5jaWQgIT0gcm93LmNpZCkgeworICAgICAgICAgICAgc2VsZi5zZWxl Y3RlZF9yb3cuZWwuc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyc7CisgICAg ICAgICAgfQorICAgICAgICAgIHNlbGYuc2VsZWN0ZWRfcm93ID0gcm93Owor ICAgICAgICAgIHNlbGYuc2VsZWN0ZWRfbW9kZWwgPSByb3cubW9kZWw7Cisg ICAgICAgIH0sCisKKyAgICAgICAgLyogVGhpcyBpcyBhIGNhbGxiYWNrIGZ1 bmN0aW9uIHdoZW4gYmFja2dyaWQgcm93CisgICAgICAgICAqIGlzIGRlc2Vs ZWN0ZWQuIFRoaXMgZnVuY3Rpb24gd2lsbCBjbGVhciB0aGUgYmFja2dyb3Vu ZAorICAgICAgICAgKiBjb2xvciBhbmQgcmVzZXQgdGhlIHNlbGVjdGVkIG1v ZGVsLgorICAgICAgICAgKi8KKyAgICAgICAgb25fcm93X2Rlc2VsZWN0ZWQ6 IGZ1bmN0aW9uKHJvdykgeworICAgICAgICAgIHZhciBzZWxmID0gdGhpczsK KyAgICAgICAgICBzZXRUaW1lb3V0KAorICAgICAgICAgICAgZnVuY3Rpb24o KSB7CisgICAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkX3Jvdy5jaWQg IT0gcm93LmNpZCkgeworICAgICAgICAgICAgICAgIHJvdy5lbC5zdHlsZS5i YWNrZ3JvdW5kQ29sb3IgPSAnJzsKKyAgICAgICAgICAgICAgICBzZWxmLmNl bGxfc2VsZWN0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBzZWxmLnNl bGVjdGVkX21vZGVsID0gbnVsbDsKKyAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfSwgMjAwCisgICAgICAgICAgKTsKKyAgICAgICAgfSwKKworICAg ICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYWRkIGEgbmV3IHJvdyB0byB0 aGUgYmFja2dyaWQuCisgICAgICAgIF9hZGQ6IGZ1bmN0aW9uKCkgeworICAg ICAgICAgIHZhciBzZWxmID0gdGhpcywKKyAgICAgICAgICAgICAgZW1wdHlf bW9kZWwgPSBuZXcgKHNlbGYuY29sbGVjdGlvbi5tb2RlbCk7CisgICAgICAg ICAgc2VsZi5jb2xsZWN0aW9uLmFkZChlbXB0eV9tb2RlbCk7CisgICAgICAg IH0sCisKKyAgICAgICAgLyogVGhpcyBmdW5jdGlvbiB3aWxsIGZldGNoIHRo ZSBsaXN0IG9mIGNoYW5nZWQgbW9kZWxzIGFuZCBtYWtlCisgICAgICAgICAq IHRoZSBhamF4IGNhbGwgdG8gc2F2ZSB0aGUgZGF0YSBpbnRvIHRoZSBkYXRh YmFzZSBzZXJ2ZXIuCisgICAgICAgICAqLworICAgICAgICBfc2F2ZTogZnVu Y3Rpb24oKSB7CisgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAorICAgICAg ICAgICAgICBkYXRhID0gW10sCisgICAgICAgICAgICAgIHNhdmVfZGF0YSA9 IHRydWU7CisKKyAgICAgICAgICAkKCIjYnRuLXNhdmUiKS5wcm9wKCdkaXNh YmxlZCcsIHRydWUpOworICAgICAgICAgIGlmIChzZWxmLmNoYW5nZWRNb2Rl bHMubGVuZ3RoID09IDApCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuY2hhbmdlZE1vZGVscy5s ZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHNlbGYuY29sbGVjdGlv bikgeworICAgICAgICAgICAgICB2YXIgbW9kZWwgPSBzZWxmLmNvbGxlY3Rp b24uZ2V0KHNlbGYuY2hhbmdlZE1vZGVsc1tpXSk7CisgICAgICAgICAgICAg IC8qIEl0ZXJhdGUgdGhyb3VnaCBwcmltYXJ5IGtleXMgYW5kIGNoZWNrIHRo ZSBrZXkKKyAgICAgICAgICAgICAgICogaXMgbm90IG51bGwuIElmIGl0IGlz IG51bGwgdGhlbiByYWlzZSBhbiBlcnJvcgorICAgICAgICAgICAgICAgKiBh bmQgcmV0dXJuIGZyb20gdGhlIGZ1bmN0aW9uLgorICAgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgICAgXy5lYWNoKHNlbGYucHJpbWFyeV9rZXlzLCBm dW5jdGlvbiAodmFsdWUsIGtleSkgeworICAgICAgICAgICAgICAgIGlmICht b2RlbC5hdHRyaWJ1dGVzW2tleV0gPT09IG51bGwgfHwKKyAgICAgICAgICAg ICAgICAgICAgbW9kZWwuYXR0cmlidXRlc1trZXldID09PSB1bmRlZmluZWQp IHsKKyAgICAgICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoCisgICAgICAg ICAgICAgICAgICAgICdTYXZlIEVycm9yJywKKyAgICAgICAgICAgICAgICAg ICAgJ3t7IF8oJ1ByaW1hcnkga2V5IGNvbHVtbnMgY2FuIG5vdCBiZSBudWxs LicpIH19JworICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAg ICBzYXZlX2RhdGEgPSBmYWxzZTsKKworICAgICAgICAgICAgICAgICByZXR1 cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB9KTsKKwor ICAgICAgICAgICAgICBpZiAoc2F2ZV9kYXRhKQorICAgICAgICAgICAgICAg IGRhdGEucHVzaChtb2RlbC50b0pTT04odHJ1ZSwgZmFsc2UpKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICB9CisKKyAgICAgICAgICBpZiAoc2F2ZV9k YXRhKSB7CisKKyAgICAgICAgICAgIC8vIE1ha2UgYWpheCBjYWxsIHRvIHNh dmUgdGhlIGRhdGEKKyAgICAgICAgICAgICQuYWpheCh7CisgICAgICAgICAg ICAgIHVybDogInt7IHVybF9mb3IoJ3NxbGVkaXRvci5pbmRleCcpIH19IiAr ICJzYXZlLyIgKyBzZWxmLnRyYW5zSWQsCisgICAgICAgICAgICAgIG1ldGhv ZDogJ1BPU1QnLAorICAgICAgICAgICAgICBhc3luYzogZmFsc2UsCisgICAg ICAgICAgICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24vanNvbiIsCisg ICAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLAorICAg ICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAg ICAgICAgICBpZiAocmVzLmRhdGEuc3RhdHVzKSB7CisgICAgICAgICAgICAg ICAgICAvLyBVcGRhdGUgdGhlIHByaW1hcnkga2V5cyBpZiBjaGFuZ2VkIGlu IHRoZSBtb2RlbAorICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7 IGkgPCBzZWxmLmNoYW5nZWRNb2RlbHMubGVuZ3RoOyBpKyspIHsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKHNlbGYuY29sbGVjdGlvbikgeworICAgICAg ICAgICAgICAgICAgICAgIHZhciBtb2RlbCA9IHNlbGYuY29sbGVjdGlvbi5n ZXQoc2VsZi5jaGFuZ2VkTW9kZWxzW2ldKTsKKworICAgICAgICAgICAgICAg ICAgICAgIC8qIGlmIG1vZGVsIGlzIG1hcmtlZCBmb3IgZGVsZXRpb24gdGhl IGRlc3Ryb3kKKyAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgbW9kZWwg ZWxzZSB1cGRhdGUgdGhlIHByaW1hcnkga2V5cyBpZiBjaGFuZ2VkLgorICAg ICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAg IGlmIChtb2RlbC5tYXJrZWRfZm9yX2RlbGV0aW9uKQorICAgICAgICAgICAg ICAgICAgICAgICAgbW9kZWwuZGVzdHJveSgpOworICAgICAgICAgICAgICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsLnVw ZGF0ZV9rZXlzKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2Vk TW9kZWxzLmxlbmd0aCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgc2VsZi50cmln Z2VyKCdwZ2FkbWluLXNxbGVkaXRvcjpsb2FkaW5nLWljb246aGlkZScpOwor ICAgICAgICAgICAgICAgICAgJCgnLnNxbC1lZGl0b3ItbWVzc2FnZScpLnRl eHQocmVzLmRhdGEucmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgIHNlbGYu Z3JpZFZpZXcubWVzc2FnZXNfcGFuZWwuZm9jdXMoKTsKKyAgICAgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHNxbCBy ZXN1bHRzIGluIGhpc3RvcnkgdGFiCisgICAgICAgICAgICAgICAgXy5lYWNo KHJlcy5kYXRhLnF1ZXJ5X3Jlc3VsdCwgZnVuY3Rpb24ocikgeworCisgICAg ICAgICAgICAgICAgICBzZWxmLmdyaWRWaWV3Lmhpc3RvcnlfY29sbGVjdGlv bi5hZGQoCisgICAgICAgICAgICAgICAgICAgIHsnc3RhdHVzJyA6IHIuc3Rh dHVzLCAnc3RhcnRfdGltZSc6IHNlbGYucXVlcnlfc3RhcnRfdGltZS50b1N0 cmluZygpLAorICAgICAgICAgICAgICAgICAgICAncXVlcnknOiByLnNxbCwg J3Jvd19hZmZlY3RlZCc6IHIucm93c19hZmZlY3RlZCwKKyAgICAgICAgICAg ICAgICAgICAgJ3RvdGFsX3RpbWUnOiBzZWxmLnRvdGFsX3RpbWUsICdtZXNz YWdlJzogci5yZXN1bHQKKyAgICAgICAgICAgICAgICAgIH0pOworICAgICAg ICAgICAgICAgIH0pOworICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg ICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgICAgIGlmIChl LnJlYWR5U3RhdGUgPT0gMCkgeworICAgICAgICAgICAgICAgICAgc2VsZi51 cGRhdGVfbXNnX2hpc3RvcnkoZmFsc2UsCisgICAgICAgICAgICAgICAgICAg ICd7eyBfKCdOb3QgY29ubmVjdGVkIHRvIHNlcnZlciBPciBjb25uZWN0aW9u IHdpdGggdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuJykgfX0nCisgICAg ICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgcmV0dXJuOwor ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHZhciBtc2cg PSBlLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgICAgICAgICBpZiAoZS5yZXNw b25zZUpTT04gIT0gdW5kZWZpbmVkICYmCisgICAgICAgICAgICAgICAgICAg IGUucmVzcG9uc2VKU09OLmVycm9ybXNnICE9IHVuZGVmaW5lZCkKKyAgICAg ICAgICAgICAgICAgIG1zZyA9IGUucmVzcG9uc2VKU09OLmVycm9ybXNnOwor CisgICAgICAgICAgICAgICAgc2VsZi51cGRhdGVfbXNnX2hpc3RvcnkoZmFs c2UsIG1zZyk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOwor ICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICAvLyBUaGlzIGZ1 bmN0aW9uIHdpbGwgcnVuIHRoZSBTUUwgcXVlcnkgYW5kIHJlZnJlc2ggdGhl IGRhdGEgaW4gdGhlIGJhY2tncmlkLgorICAgICAgICBfcmVmcmVzaDogZnVu Y3Rpb24oKSB7CisgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAg ICAgICAgLy8gU3RhcnQgZXhlY3V0aW9uIG9mIHRoZSBxdWVyeS4KKyAgICAg ICAgICBpZiAoc2VsZi5pc19xdWVyeV90b29sKQorICAgICAgICAgICAgc2Vs Zi5fZXhlY3V0ZSgpOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNl bGYuX2V4ZWN1dGVfZGF0YV9xdWVyeSgpOworICAgICAgICB9LAorCisgICAg ICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBzaG93IHRoZSBmaWx0ZXIgaW4g dGhlIHRleHQgYXJlYS4KKyAgICAgICAgX3Nob3dfZmlsdGVyOiBmdW5jdGlv bigpIHsKKyAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAg ICAkLmFqYXgoeworICAgICAgICAgICAgdXJsOiAie3sgdXJsX2Zvcignc3Fs ZWRpdG9yLmluZGV4JykgfX0iICsgImZpbHRlci9nZXQvIiArIHNlbGYudHJh bnNJZCwKKyAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsCisgICAgICAgICAg ICBzdWNjZXNzOiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgICAgaWYg KHJlcy5kYXRhLnN0YXR1cykgeworICAgICAgICAgICAgICAgICQoJyNmaWx0 ZXInKS5yZW1vdmVDbGFzcygnaGlkZGVuJyk7CisgICAgICAgICAgICAgICAg JCgnI2VkaXRvci1wYW5lbCcpLmFkZENsYXNzKCdzcWwtZWRpdG9yLWJ1c3kt ZmV0Y2hpbmcnKTsKKyAgICAgICAgICAgICAgICBzZWxmLmdyaWRWaWV3LmZp bHRlcl9vYmoucmVmcmVzaCgpOworCisgICAgICAgICAgICAgICAgaWYgKHJl cy5kYXRhLnJlc3VsdCA9PSBudWxsKQorICAgICAgICAgICAgICAgICAgc2Vs Zi5ncmlkVmlldy5maWx0ZXJfb2JqLnNldFZhbHVlKCcnKTsKKyAgICAgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICBzZWxmLmdyaWRWaWV3 LmZpbHRlcl9vYmouc2V0VmFsdWUocmVzLmRhdGEucmVzdWx0KTsKKyAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg ICAgICBhbGVydGlmeS5hbGVydCgnR2V0IEZpbHRlciBFcnJvcicsIHJlcy5k YXRhLnJlc3VsdCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0s CisgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAgICAg ICAgICBpZiAoZS5yZWFkeVN0YXRlID09IDApIHsKKyAgICAgICAgICAgICAg ICBhbGVydGlmeS5hbGVydCgnR2V0IEZpbHRlciBFcnJvcicsCisgICAgICAg ICAgICAgICAgICAne3sgXygnTm90IGNvbm5lY3RlZCB0byBzZXJ2ZXIgT3Ig Y29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicp IH19JworICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgcmV0 dXJuOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgdmFyIG1z ZyA9IGUucmVzcG9uc2VUZXh0OworICAgICAgICAgICAgICBpZiAoZS5yZXNw b25zZUpTT04gIT0gdW5kZWZpbmVkICYmCisgICAgICAgICAgICAgICAgICBl LnJlc3BvbnNlSlNPTi5lcnJvcm1zZyAhPSB1bmRlZmluZWQpCisgICAgICAg ICAgICAgICAgbXNnID0gZS5yZXNwb25zZUpTT04uZXJyb3Jtc2c7CisKKyAg ICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoJ0dldCBGaWx0ZXIgRXJyb3In LCBtc2cpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAg ICB9LAorCisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBpbmNsdWRl IHRoZSBmaWx0ZXIgYnkgc2VsZWN0aW9uLgorICAgICAgICBfaW5jbHVkZV9m aWx0ZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICB2YXIgc2VsZiA9IHRo aXMsCisgICAgICAgICAgICAgIGRhdGEgPSB7fTsKKworICAgICAgICAgIC8v IElmIG5vIGNlbGwgaXMgc2VsZWN0ZWQgdGhlbiByZXR1cm4gZnJvbSB0aGUg ZnVuY3Rpb24KKyAgICAgICAgICBpZiAoc2VsZi5jZWxsX3NlbGVjdGVkID09 PSBmYWxzZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgIC8v IEFkZCBjb2x1bW4gbmFtZSBhbmQgdGhlaXIgdmFsdWUgdG8gZGF0YQorICAg ICAgICAgIGRhdGFbc2VsZi5jb2x1bW5fbmFtZV0gPSBzZWxmLmNvbHVtbl92 YWx1ZTsKKworICAgICAgICAgIC8vIE1ha2UgYWpheCBjYWxsIHRvIGluY2x1 ZGUgdGhlIGZpbHRlciBieSBzZWxlY3Rpb24KKyAgICAgICAgICAkLmFqYXgo eworICAgICAgICAgICAgdXJsOiAie3sgdXJsX2Zvcignc3FsZWRpdG9yLmlu ZGV4JykgfX0iICsgImZpbHRlci9pbmNsdXNpdmUvIiArIHNlbGYudHJhbnNJ ZCwKKyAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAorICAgICAgICAgICAg YXN5bmM6IGZhbHNlLAorICAgICAgICAgICAgY29udGVudFR5cGU6ICJhcHBs aWNhdGlvbi9qc29uIiwKKyAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5n aWZ5KGRhdGEpLAorICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVz KSB7CisgICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdGF0dXMpIHsKKyAg ICAgICAgICAgICAgICAvLyBSZWZyZXNoIHRoZSBzcWwgZ3JpZAorICAgICAg ICAgICAgICAgIHNlbGYuX3JlZnJlc2goKTsKKyAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBhbGVydGlm eS5hbGVydCgnRmlsdGVyIEJ5IFNlbGVjdGlvbiBFcnJvcicsIHJlcy5kYXRh LnJlc3VsdCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisg ICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAgICAgICAg ICBpZiAoZS5yZWFkeVN0YXRlID09IDApIHsKKyAgICAgICAgICAgICAgICBh bGVydGlmeS5hbGVydCgnRmlsdGVyIEJ5IFNlbGVjdGlvbiBFcnJvcicsCisg ICAgICAgICAgICAgICAgICAne3sgXygnTm90IGNvbm5lY3RlZCB0byBzZXJ2 ZXIgT3IgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xv c2VkLicpIH19JworICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg ICAgcmV0dXJuOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg dmFyIG1zZyA9IGUucmVzcG9uc2VUZXh0OworICAgICAgICAgICAgICBpZiAo ZS5yZXNwb25zZUpTT04gIT0gdW5kZWZpbmVkICYmCisgICAgICAgICAgICAg ICAgICBlLnJlc3BvbnNlSlNPTi5lcnJvcm1zZyAhPSB1bmRlZmluZWQpCisg ICAgICAgICAgICAgICAgbXNnID0gZS5yZXNwb25zZUpTT04uZXJyb3Jtc2c7 CisKKyAgICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoJ0ZpbHRlciBCeSBT ZWxlY3Rpb24gRXJyb3InLCBtc2cpOworICAgICAgICAgICAgfQorICAgICAg ICAgIH0pOworICAgICAgICB9LAorCisgICAgICAgIC8vIFRoaXMgZnVuY3Rp b24gd2lsbCBleGNsdWRlIHRoZSBmaWx0ZXIgYnkgc2VsZWN0aW9uLgorICAg ICAgICBfZXhjbHVkZV9maWx0ZXI6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg ICB2YXIgc2VsZiA9IHRoaXMsCisgICAgICAgICAgICAgIGRhdGEgPSB7fTsK KworICAgICAgICAgIC8vIElmIG5vIGNlbGwgaXMgc2VsZWN0ZWQgdGhlbiBy ZXR1cm4gZnJvbSB0aGUgZnVuY3Rpb24KKyAgICAgICAgICBpZiAoc2VsZi5j ZWxsX3NlbGVjdGVkID09PSBmYWxzZSkKKyAgICAgICAgICAgIHJldHVybjsK KworICAgICAgICAgIC8vIEFkZCBjb2x1bW4gbmFtZSBhbmQgdGhlaXIgdmFs dWUgdG8gZGF0YQorICAgICAgICAgIGRhdGFbc2VsZi5jb2x1bW5fbmFtZV0g PSBzZWxmLmNvbHVtbl92YWx1ZTsKKworICAgICAgICAgIC8vIE1ha2UgYWph eCBjYWxsIHRvIGV4Y2x1ZGUgdGhlIGZpbHRlciBieSBzZWxlY3Rpb24uCisg ICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgIHVybDogInt7IHVybF9m b3IoJ3NxbGVkaXRvci5pbmRleCcpIH19IiArICJmaWx0ZXIvZXhjbHVzaXZl LyIgKyBzZWxmLnRyYW5zSWQsCisgICAgICAgICAgICBtZXRob2Q6ICdQT1NU JywKKyAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAgICAgICAgICAgIGNv bnRlbnRUeXBlOiAiYXBwbGljYXRpb24vanNvbiIsCisgICAgICAgICAgICBk YXRhOiBKU09OLnN0cmluZ2lmeShkYXRhKSwKKyAgICAgICAgICAgIHN1Y2Nl c3M6IGZ1bmN0aW9uKHJlcykgeworICAgICAgICAgICAgICBpZiAocmVzLmRh dGEuc3RhdHVzKSB7CisgICAgICAgICAgICAgICAgLy8gUmVmcmVzaCB0aGUg c3FsIGdyaWQKKyAgICAgICAgICAgICAgICBzZWxmLl9yZWZyZXNoKCk7Cisg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAg ICAgICAgICAgYWxlcnRpZnkuYWxlcnQoJ0ZpbHRlciBFeGNsdWRlIFNlbGVj dGlvbiBFcnJvcicsIHJlcy5kYXRhLnJlc3VsdCk7CisgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBlcnJvcjogZnVuY3Rp b24oZSkgeworICAgICAgICAgICAgICBpZiAoZS5yZWFkeVN0YXRlID09IDAp IHsKKyAgICAgICAgICAgICAgICBhbGVydGlmeS5hbGVydCgnRmlsdGVyIEV4 Y2x1ZGUgU2VsZWN0aW9uIEVycm9yJywKKyAgICAgICAgICAgICAgICAgICd7 eyBfKCdOb3QgY29ubmVjdGVkIHRvIHNlcnZlciBPciBjb25uZWN0aW9uIHdp dGggdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuJykgfX0nCisgICAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgICB2YXIgbXNnID0gZS5yZXNwb25z ZVRleHQ7CisgICAgICAgICAgICAgIGlmIChlLnJlc3BvbnNlSlNPTiAhPSB1 bmRlZmluZWQgJiYKKyAgICAgICAgICAgICAgICAgIGUucmVzcG9uc2VKU09O LmVycm9ybXNnICE9IHVuZGVmaW5lZCkKKyAgICAgICAgICAgICAgICBtc2cg PSBlLnJlc3BvbnNlSlNPTi5lcnJvcm1zZzsKKworICAgICAgICAgICAgICBh bGVydGlmeS5hbGVydCgnRmlsdGVyIEV4Y2x1ZGUgU2VsZWN0aW9uIEVycm9y JywgbXNnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAg ICAgfSwKKworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVtb3Zl IHRoZSBmaWx0ZXIuCisgICAgICAgIF9yZW1vdmVfZmlsdGVyOiBmdW5jdGlv biAoKSB7CisgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAg ICAgLy8gTWFrZSBhamF4IGNhbGwgdG8gZXhjbHVkZSB0aGUgZmlsdGVyIGJ5 IHNlbGVjdGlvbi4KKyAgICAgICAgICAkLmFqYXgoeworICAgICAgICAgICAg dXJsOiAie3sgdXJsX2Zvcignc3FsZWRpdG9yLmluZGV4JykgfX0iICsgImZp bHRlci9yZW1vdmUvIiArIHNlbGYudHJhbnNJZCwKKyAgICAgICAgICAgIG1l dGhvZDogJ1BPU1QnLAorICAgICAgICAgICAgYXN5bmM6IGZhbHNlLAorICAg ICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAg ICAgIGlmIChyZXMuZGF0YS5zdGF0dXMpIHsKKyAgICAgICAgICAgICAgICAv LyBSZWZyZXNoIHRoZSBzcWwgZ3JpZAorICAgICAgICAgICAgICAgIHNlbGYu X3JlZnJlc2goKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBl bHNlIHsKKyAgICAgICAgICAgICAgICBhbGVydGlmeS5hbGVydCgnUmVtb3Zl IEZpbHRlciBFcnJvcicsIHJlcy5kYXRhLnJlc3VsdCk7CisgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBlcnJvcjogZnVu Y3Rpb24oZSkgeworICAgICAgICAgICAgICBpZiAoZS5yZWFkeVN0YXRlID09 IDApIHsKKyAgICAgICAgICAgICAgICBhbGVydGlmeS5hbGVydCgnUmVtb3Zl IEZpbHRlciBFcnJvcicsCisgICAgICAgICAgICAgICAgICAne3sgXygnTm90 IGNvbm5lY3RlZCB0byBzZXJ2ZXIgT3IgY29ubmVjdGlvbiB3aXRoIHRoZSBz ZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicpIH19JworICAgICAgICAgICAgICAg ICk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgICAgdmFyIG1zZyA9IGUucmVzcG9uc2VUZXh0Owor ICAgICAgICAgICAgICBpZiAoZS5yZXNwb25zZUpTT04gIT0gdW5kZWZpbmVk ICYmCisgICAgICAgICAgICAgICAgICBlLnJlc3BvbnNlSlNPTi5lcnJvcm1z ZyAhPSB1bmRlZmluZWQpCisgICAgICAgICAgICAgICAgbXNnID0gZS5yZXNw b25zZUpTT04uZXJyb3Jtc2c7CisKKyAgICAgICAgICAgICAgYWxlcnRpZnku YWxlcnQoJ1JlbW92ZSBGaWx0ZXIgRXJyb3InLCBtc2cpOworICAgICAgICAg ICAgfQorICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAgICAgIC8v IFRoaXMgZnVuY3Rpb24gd2lsbCBhcHBseSB0aGUgZmlsdGVyLgorICAgICAg ICBfYXBwbHlfZmlsdGVyOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICB2YXIg c2VsZiA9IHRoaXM7CisgICAgICAgICAgICAgIHNxbCA9IHNlbGYuZ3JpZFZp ZXcuZmlsdGVyX29iai5nZXRWYWx1ZSgpOworCisgICAgICAgICAgLy8gTWFr ZSBhamF4IGNhbGwgdG8gaW5jbHVkZSB0aGUgZmlsdGVyIGJ5IHNlbGVjdGlv bgorICAgICAgICAgICQuYWpheCh7CisgICAgICAgICAgICB1cmw6ICJ7eyB1 cmxfZm9yKCdzcWxlZGl0b3IuaW5kZXgnKSB9fSIgKyAiZmlsdGVyL2FwcGx5 LyIgKyBzZWxmLnRyYW5zSWQsCisgICAgICAgICAgICBtZXRob2Q6ICdQT1NU JywKKyAgICAgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAgICAgICAgICAgIGNv bnRlbnRUeXBlOiAiYXBwbGljYXRpb24vanNvbiIsCisgICAgICAgICAgICBk YXRhOiBKU09OLnN0cmluZ2lmeShzcWwpLAorICAgICAgICAgICAgc3VjY2Vz czogZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgICAgIGlmIChyZXMuZGF0 YS5zdGF0dXMpIHsKKyAgICAgICAgICAgICAgICAkKCcjZmlsdGVyJykuYWRk Q2xhc3MoJ2hpZGRlbicpOworICAgICAgICAgICAgICAgICQoJyNlZGl0b3It cGFuZWwnKS5yZW1vdmVDbGFzcygnc3FsLWVkaXRvci1idXN5LWZldGNoaW5n Jyk7CisgICAgICAgICAgICAgICAgLy8gUmVmcmVzaCB0aGUgc3FsIGdyaWQK KyAgICAgICAgICAgICAgICBzZWxmLl9yZWZyZXNoKCk7CisgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAg YWxlcnRpZnkuYWxlcnQoJ0FwcGx5IEZpbHRlciBFcnJvcicscmVzLmRhdGEu cmVzdWx0KTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAg ICAgICAgICAgIGVycm9yOiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICAg IGlmIChlLnJlYWR5U3RhdGUgPT0gMCkgeworICAgICAgICAgICAgICAgIGFs ZXJ0aWZ5LmFsZXJ0KCdBcHBseSBGaWx0ZXIgRXJyb3InLAorICAgICAgICAg ICAgICAgICAgJ3t7IF8oJ05vdCBjb25uZWN0ZWQgdG8gc2VydmVyIE9yIGNv bm5lY3Rpb24gd2l0aCB0aGUgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKSB9 fScKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIHJldHVy bjsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIHZhciBtc2cg PSBlLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgICAgICAgaWYgKGUucmVzcG9u c2VKU09OICE9IHVuZGVmaW5lZCAmJgorICAgICAgICAgICAgICAgICAgZS5y ZXNwb25zZUpTT04uZXJyb3Jtc2cgIT0gdW5kZWZpbmVkKQorICAgICAgICAg ICAgICAgIG1zZyA9IGUucmVzcG9uc2VKU09OLmVycm9ybXNnOworCisgICAg ICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KCdBcHBseSBGaWx0ZXIgRXJyb3In LCBtc2cpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0pOworICAgICAg ICB9LAorCisgICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBjb3B5IHRo ZSBzZWxlY3RlZCByb3cuCisgICAgICAgIF9jb3B5OiBmdW5jdGlvbigpIHsK KyAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgICAvLyBT YXZlIHRoZSBzZWxlY3RlZCBtb2RlbCBhcyBjb3BpZWQgbW9kZWwgZm9yIGZ1 dHVyZSB1c2UKKyAgICAgICAgICBpZiAoJ3NlbGVjdGVkX21vZGVsJyBpbiBz ZWxmKQorICAgICAgICAgICAgc2VsZi5jb3BpZWRfbW9kZWwgPSBzZWxmLnNl bGVjdGVkX21vZGVsOworICAgICAgICB9LAorCisgICAgICAgIC8vIFRoaXMg ZnVuY3Rpb24gd2lsbCBwYXN0ZSB0aGUgc2VsZWN0ZWQgcm93LgorICAgICAg ICBfcGFzdGU6IGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZhciBzZWxmID0g dGhpczsKKyAgICAgICAgICAgICAgbmV3X21vZGVsID0gbnVsbDsKKyAgICAg ICAgICBpZiAoJ2NvcGllZF9tb2RlbCcgaW4gc2VsZiAmJiBzZWxmLmNvcGll ZF9tb2RlbCAhPSBudWxsKSB7CisgICAgICAgICAgICAkKCIjYnRuLXNhdmUi KS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKKworICAgICAgICAgICAgLyog RmluZCB0aGUgbW9kZWwgdG8gYmUgY29waWVkIGluIHRoZSBjb2xsZWN0aW9u CisgICAgICAgICAgICAgKiBpZiBmb3VuZCB0aGVuIHdlIG5lZWQgdG8gY2xv bmUgdGhlIG9iamVjdCwgc28KKyAgICAgICAgICAgICAqIHRoYXQgaXQncyBj aWQvaWQgZ2V0cyBjaGFuZ2VkLgorICAgICAgICAgICAgICovCisgICAgICAg ICAgICBpZiAoc2VsZi5jb2xsZWN0aW9uLmdldChzZWxmLmNvcGllZF9tb2Rl bC5jaWQpID09PSB1bmRlZmluZWQpCisgICAgICAgICAgICAgIG5ld19tb2Rl bCA9IHNlbGYuY29waWVkX21vZGVsOworICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICBuZXdfbW9kZWwgPSBzZWxmLmNvcGllZF9tb2RlbC5jbG9u ZSgpOworCisgICAgICAgICAgICAvKiBBZGQgdGhlIG1vZGVsIHRvIHRoZSBh cnJheSBvZiBjaGFuZ2VkTW9kZWxzIHdoaWNoCisgICAgICAgICAgICAgKiB3 aWxsIGJlIHVzZWQgd2hlbiBzYXZlIGJ1dHRvbiBpcyBjbGlja2VkLgorICAg ICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoXy5pbmRleE9mKHNlbGYu Y2hhbmdlZE1vZGVscywgbmV3X21vZGVsLmNpZCkgPT0gLTEpIHsKKyAgICAg ICAgICAgICAgICBzZWxmLmNoYW5nZWRNb2RlbHMucHVzaChuZXdfbW9kZWwu Y2lkKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gQWRkIHRo ZSBjb3BpZWQgbW9kZWwgdG8gY29sbGVjdGlvbgorICAgICAgICAgICAgc2Vs Zi5jb2xsZWN0aW9uLmFkZChuZXdfbW9kZWwpOworICAgICAgICAgIH0KKyAg ICAgICAgfSwKKworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgc2V0 IHRoZSBsaW1pdCBmb3IgU1FMIHF1ZXJ5CisgICAgICAgIF9zZXRfbGltaXQ6 IGZ1bmN0aW9uKCkgeworICAgICAgICAgIHZhciBzZWxmID0gdGhpczsKKyAg ICAgICAgICAgICAgbGltaXQgPSBwYXJzZUludCgkKCIubGltaXQiKS52YWwo KSk7CisKKyAgICAgICAgICAvLyBNYWtlIGFqYXggY2FsbCB0byBjaGFuZ2Ug dGhlIGxpbWl0CisgICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgIHVy bDogInt7IHVybF9mb3IoJ3NxbGVkaXRvci5pbmRleCcpIH19IiArICJsaW1p dC8iICsgc2VsZi50cmFuc0lkLAorICAgICAgICAgICAgbWV0aG9kOiAnUE9T VCcsCisgICAgICAgICAgICBhc3luYzogZmFsc2UsCisgICAgICAgICAgICBj b250ZW50VHlwZTogImFwcGxpY2F0aW9uL2pzb24iLAorICAgICAgICAgICAg ZGF0YTogSlNPTi5zdHJpbmdpZnkobGltaXQpLAorICAgICAgICAgICAgc3Vj Y2VzczogZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgICAgIGlmIChyZXMu ZGF0YS5zdGF0dXMpIHsKKyAgICAgICAgICAgICAgICAvLyBSZWZyZXNoIHRo ZSBzcWwgZ3JpZAorICAgICAgICAgICAgICAgIHNlbGYuX3JlZnJlc2goKTsK KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgICAgYWxlcnRpZnkuYWxlcnQoJ0NoYW5nZSBsaW1pdCBFcnJvcics IHJlcy5kYXRhLnJlc3VsdCk7CisgICAgICAgICAgICB9LAorICAgICAgICAg ICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAgaWYgKGUu cmVhZHlTdGF0ZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgYWxlcnRpZnku YWxlcnQoJ0NoYW5nZSBsaW1pdCBFcnJvcicsCisgICAgICAgICAgICAgICAg ICAne3sgXygnTm90IGNvbm5lY3RlZCB0byBzZXJ2ZXIgT3IgY29ubmVjdGlv biB3aXRoIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicpIH19JworICAg ICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgdmFyIG1zZyA9IGUucmVz cG9uc2VUZXh0OworICAgICAgICAgICAgICBpZiAoZS5yZXNwb25zZUpTT04g IT0gdW5kZWZpbmVkICYmCisgICAgICAgICAgICAgICAgICBlLnJlc3BvbnNl SlNPTi5lcnJvcm1zZyAhPSB1bmRlZmluZWQpCisgICAgICAgICAgICAgICAg bXNnID0gZS5yZXNwb25zZUpTT04uZXJyb3Jtc2c7CisKKyAgICAgICAgICAg ICAgYWxlcnRpZnkuYWxlcnQoJ0NoYW5nZSBsaW1pdCBFcnJvcicsIG1zZyk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgIH0sCisK KyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGVuYWJsZS9k aXNhYmxlIGJ1dHRvbnMKKyAgICAgICAgZGlzYWJsZV90b29sX2J1dHRvbnM6 IGZ1bmN0aW9uKGRpc2FibGVkKSB7CisgICAgICAgICAgJCgiI2J0bi1jbGVh ciIpLnByb3AoJ2Rpc2FibGVkJywgZGlzYWJsZWQpOworICAgICAgICAgICQo IiNidG4tcXVlcnktZHJvcGRvd24iKS5wcm9wKCdkaXNhYmxlZCcsIGRpc2Fi bGVkKTsKKyAgICAgICAgICAkKCIjYnRuLWVkaXQtZHJvcGRvd24iKS5wcm9w KCdkaXNhYmxlZCcsIGRpc2FibGVkKTsKKyAgICAgICAgICAkKCIjYnRuLWVk aXQiKS5wcm9wKCdkaXNhYmxlZCcsIGRpc2FibGVkKTsKKyAgICAgICAgfSwK KworICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgZmV0Y2ggdGhlIHNx bCBxdWVyeSBmcm9tIHRoZSB0ZXh0IGJveAorICAgICAgICAvLyBhbmQgZXhl Y3V0ZSB0aGUgcXVlcnkuCisgICAgICAgIF9leGVjdXRlOiBmdW5jdGlvbiAo KSB7CisgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAorICAgICAgICAgICAg ICBzcWwgPSAnJywKKyAgICAgICAgICAgICAgaGlzdG9yeV9tc2cgPSAnJzsK KworICAgICAgICAgIHNlbGYudHJpZ2dlcigKKyAgICAgICAgICAgICdwZ2Fk bWluLXNxbGVkaXRvcjpsb2FkaW5nLWljb246c2hvdycsCisgICAgICAgICAg ICAne3sgXygnSW5pdGlhbGl6aW5nIHRoZSBxdWVyeSBleGVjdXRpb24hJykg fX0nCisgICAgICAgICAgKTsKKworICAgICAgICAgIC8qIElmIGNvZGUgaXMg c2VsZWN0ZWQgaW4gdGhlIGNvZGUgbWlycm9yIHRoZW4gZXhlY3V0ZQorICAg ICAgICAgICAqIHRoZSBzZWxlY3RlZCBwYXJ0IGVsc2UgZXhlY3V0ZSB0aGUg Y29tcGxldGUgY29kZS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICB2YXIg c2VsZWN0ZWRfY29kZSA9IHNlbGYuZ3JpZFZpZXcucXVlcnlfdG9vbF9vYmou Z2V0U2VsZWN0aW9uKCk7CisgICAgICAgICAgaWYgKHNlbGVjdGVkX2NvZGUu bGVuZ3RoID4gMCkKKyAgICAgICAgICAgIHNxbCA9IHNlbGVjdGVkX2NvZGU7 CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgc3FsID0gc2VsZi5ncmlk Vmlldy5xdWVyeV90b29sX29iai5nZXRWYWx1ZSgpOworCisgICAgICAgICAg c2VsZi5xdWVyeV9zdGFydF90aW1lID0gbmV3IERhdGUoKTsKKyAgICAgICAg ICBzZWxmLnF1ZXJ5ID0gc3FsOworICAgICAgICAgIHNlbGYucm93c19hZmZl Y3RlZCA9IDA7CisKKyAgICAgICAgICBzZWxmLmRpc2FibGVfdG9vbF9idXR0 b25zKHRydWUpOworICAgICAgICAgICQoIiNidG4tY2FuY2VsLXF1ZXJ5Iiku cHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7CisKKyAgICAgICAgICAkLmFqYXgo eworICAgICAgICAgICAgdXJsOiAie3sgdXJsX2Zvcignc3FsZWRpdG9yLmlu ZGV4JykgfX0iICsgInF1ZXJ5X3Rvb2wvc3RhcnQvIiArIHNlbGYudHJhbnNJ ZCwKKyAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLAorICAgICAgICAgICAg YXN5bmM6IGZhbHNlLAorICAgICAgICAgICAgY29udGVudFR5cGU6ICJhcHBs aWNhdGlvbi9qc29uIiwKKyAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5n aWZ5KHNxbCksCisgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihyZXMp IHsKKyAgICAgICAgICAgICAgLy8gUmVtb3ZlIG1hcmtlcgorICAgICAgICAg ICAgICBpZiAoc2VsZi5ncmlkVmlldy5tYXJrZXIpIHsKKyAgICAgICAgICAg ICAgICBzZWxmLmdyaWRWaWV3Lm1hcmtlci5jbGVhcigpOworICAgICAgICAg ICAgICAgIGRlbGV0ZSBzZWxmLmdyaWRWaWV3Lm1hcmtlcjsKKyAgICAgICAg ICAgICAgICBzZWxmLmdyaWRWaWV3Lm1hcmtlciA9IG51bGw7CisKKyAgICAg ICAgICAgICAgICAvLyBSZW1vdmUgYWxyZWFkeSBleGlzdGluZyBtYXJrZXIK KyAgICAgICAgICAgICAgICBzZWxmLmdyaWRWaWV3LnF1ZXJ5X3Rvb2xfb2Jq LnJlbW92ZUxpbmVDbGFzcyhzZWxmLm1hcmtlZF9saW5lX25vLCAnd3JhcCcs ICdDb2RlTWlycm9yLWFjdGl2ZWxpbmUtYmFja2dyb3VuZCcpOworICAgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnN0YXR1 cykgeworICAgICAgICAgICAgICAgIHNlbGYudHJpZ2dlcigKKyAgICAgICAg ICAgICAgICAgICdwZ2FkbWluLXNxbGVkaXRvcjpsb2FkaW5nLWljb246bWVz c2FnZScsCisgICAgICAgICAgICAgICAgICAgJ3t7IF8oJ1dhaXRpbmcgZm9y IHRoZSBxdWVyeSBleGVjdXRpb24gdG8gY29tcGxldGUuLi4nKSB9fScKKyAg ICAgICAgICAgICAgICApOworCisgICAgICAgICAgICAgICAgc2VsZi5jYW5f ZWRpdCA9IHJlcy5kYXRhLmNhbl9lZGl0OworICAgICAgICAgICAgICAgIHNl bGYuY2FuX2ZpbHRlciA9IHJlcy5kYXRhLmNhbl9maWx0ZXI7CisgICAgICAg ICAgICAgICAgc2VsZi5pdGVtc19wZXJfcGFnZSA9IHJlcy5kYXRhLml0ZW1z X3Blcl9wYWdlOworCisgICAgICAgICAgICAgICAgLy8gSWYgc3RhdHVzIGlz IFRydWUgdGhlbiBwb2xsIHRoZSByZXN1bHQuCisgICAgICAgICAgICAgICAg c2VsZi5fcG9sbCgpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg IGVsc2UgeworICAgICAgICAgICAgICAgIHNlbGYuZGlzYWJsZV90b29sX2J1 dHRvbnMoZmFsc2UpOworICAgICAgICAgICAgICAgICQoIiNidG4tY2FuY2Vs LXF1ZXJ5IikucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKKyAgICAgICAgICAg ICAgICBzZWxmLnVwZGF0ZV9tc2dfaGlzdG9yeShmYWxzZSwgcmVzLmRhdGEu cmVzdWx0KTsKKworICAgICAgICAgICAgICAgIC8vIEhpZ2hsaWdodCB0aGUg ZXJyb3IgaW4gdGhlIHNxbCBwYW5lbAorICAgICAgICAgICAgICAgIHNlbGYu X2hpZ2hsaWdodF9lcnJvcihyZXMuZGF0YS5yZXN1bHQpOworICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgZXJyb3I6IGZ1 bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAgc2VsZi5kaXNhYmxlX3Rvb2xf YnV0dG9ucyhmYWxzZSk7CisgICAgICAgICAgICAgICQoIiNidG4tY2FuY2Vs LXF1ZXJ5IikucHJvcCgnZGlzYWJsZWQnLCB0cnVlKTsKKworICAgICAgICAg ICAgICBpZiAoZS5yZWFkeVN0YXRlID09IDApIHsKKyAgICAgICAgICAgICAg ICBzZWxmLnVwZGF0ZV9tc2dfaGlzdG9yeShmYWxzZSwKKyAgICAgICAgICAg ICAgICAgICd7eyBfKCdOb3QgY29ubmVjdGVkIHRvIHNlcnZlciBPciBjb25u ZWN0aW9uIHdpdGggdGhlIHNlcnZlciBoYXMgYmVlbiBjbG9zZWQuJykgfX0n CisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICByZXR1cm47 CisgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICB2YXIgbXNnID0g ZS5yZXNwb25zZVRleHQ7CisgICAgICAgICAgICAgIGlmIChlLnJlc3BvbnNl SlNPTiAhPSB1bmRlZmluZWQgJiYKKyAgICAgICAgICAgICAgICAgIGUucmVz cG9uc2VKU09OLmVycm9ybXNnICE9IHVuZGVmaW5lZCkKKyAgICAgICAgICAg ICAgICBtc2cgPSBlLnJlc3BvbnNlSlNPTi5lcnJvcm1zZzsKKworICAgICAg ICAgICAgICBzZWxmLnVwZGF0ZV9tc2dfaGlzdG9yeShmYWxzZSwgbXNnKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKwor ICAgICAgICAvKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaGlnaGxpZ2h0 IHRoZSBlcnJvciBsaW5lIGFuZAorICAgICAgICAgKiB1bmRlcmxpbmluZyBm b3IgdGhlIGVycm9yIHdvcmQuCisgICAgICAgICAqLworICAgICAgICBfaGln aGxpZ2h0X2Vycm9yOiBmdW5jdGlvbihyZXN1bHQpIHsKKyAgICAgICAgICB2 YXIgc2VsZiA9IHRoaXMsCisgICAgICAgICAgICBlcnJvcl9saW5lX25vID0g MCwKKyAgICAgICAgICAgIHN0YXJ0X21hcmtlciA9IDAsCisgICAgICAgICAg ICBlbmRfbWFya2VyID0gMCwKKyAgICAgICAgICAgIHNlbGVjdGVkX2xpbmVf bm8gPSAwOworCisgICAgICAgICAgLy8gUmVtb3ZlIGFscmVhZHkgZXhpc3Rp bmcgbWFya2VyCisgICAgICAgICAgc2VsZi5ncmlkVmlldy5xdWVyeV90b29s X29iai5yZW1vdmVMaW5lQ2xhc3Moc2VsZi5tYXJrZWRfbGluZV9ubywgJ3dy YXAnLCAnQ29kZU1pcnJvci1hY3RpdmVsaW5lLWJhY2tncm91bmQnKTsKKwor ICAgICAgICAgIC8vIEluIGNhc2Ugb2Ygc2VsZWN0aW9uIHdlIG5lZWQgdG8g ZmluZCB0aGUgYWN0dWFsIGxpbmUgbm8KKyAgICAgICAgICBpZiAoc2VsZi5n cmlkVmlldy5xdWVyeV90b29sX29iai5nZXRTZWxlY3Rpb24oKS5sZW5ndGgg PiAwKQorICAgICAgICAgICAgc2VsZWN0ZWRfbGluZV9ubyA9IHNlbGYuZ3Jp ZFZpZXcucXVlcnlfdG9vbF9vYmouZ2V0Q3Vyc29yKHRydWUpLmxpbmU7CisK KyAgICAgICAgICAvLyBGZXRjaCB0aGUgTElORSBzdHJpbmcgdXNpbmcgcmVn ZXggZnJvbSB0aGUgcmVzdWx0CisgICAgICAgICAgdmFyIGxpbmUgPSAvTElO RSAoXGQrKS8uZXhlYyhyZXN1bHQpLAorICAgICAgICAgICAgLy8gRmV0Y2gg dGhlIENoYXJhY3RlciBzdHJpbmcgdXNpbmcgcmVnZXggZnJvbSB0aGUgcmVz dWx0CisgICAgICAgICAgICBjaGFyID0gL0NoYXJhY3RlcjogKFxkKykvLmV4 ZWMocmVzdWx0KTsKKworICAgICAgICAgIC8vIElmIGxpbmUgYW5kIGNoYXJh Y3RlciBpcyBudWxsIHRoZW4gbm8gbmVlZCB0byBtYXJrCisgICAgICAgICAg aWYgKGxpbmUgIT0gbnVsbCAmJiBjaGFyICE9IG51bGwpIHsKKyAgICAgICAg ICAgIGVycm9yX2xpbmVfbm8gPSBzZWxmLm1hcmtlZF9saW5lX25vID0gKHBh cnNlSW50KGxpbmVbMV0pIC0gMSkgKyBzZWxlY3RlZF9saW5lX25vOworICAg ICAgICAgICAgdmFyIGVycm9yX2NoYXJfbm8gPSAocGFyc2VJbnQoY2hhclsx XSkgLSAxKTsKKworICAgICAgICAgICAgLyogV2UgbmVlZCB0byBsb29wIHRo cm91Z2ggZWFjaCBsaW5lIHRpbGwgdGhlIGVycm9yIGxpbmUgYW5kCisgICAg ICAgICAgICAgKiBjb3VudCB0aGUgdG90YWwgbm8gb2YgY2hhcmFjdGVyIHRv IGZpZ3VyZSBvdXQgdGhlIGFjdHVhbAorICAgICAgICAgICAgICogc3RhcnRp bmcvZW5kaW5nIG1hcmtlciBwb2ludCBmb3IgdGhlIGluZGl2aWR1YWwgbGlu ZS4gV2UKKyAgICAgICAgICAgICAqIGhhdmUgYWxzbyBhZGRlZCAxIHBlciBs aW5lIGZvciB0aGUgIlxuIiBjaGFyYWN0ZXIuCisgICAgICAgICAgICAgKi8K KyAgICAgICAgICAgIHZhciBwcmV2X2xpbmVfY2hhcnMgPSAwOworICAgICAg ICAgICAgdmFyIGxvb3BfaW5kZXggPSBzZWxlY3RlZF9saW5lX25vID4gMCA/ IHNlbGVjdGVkX2xpbmVfbm8gOiAwOworICAgICAgICAgICAgZm9yICh2YXIg aSA9IGxvb3BfaW5kZXg7IGkgPCBlcnJvcl9saW5lX25vOyBpKyspCisgICAg ICAgICAgICAgIHByZXZfbGluZV9jaGFycyArPSBzZWxmLmdyaWRWaWV3LnF1 ZXJ5X3Rvb2xfb2JqLmdldExpbmUoaSkubGVuZ3RoICsgMTsKKworICAgICAg ICAgICAgLyogTWFya2VyIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgaW5kaXZp ZHVhbCBsaW5lIGlzCisgICAgICAgICAgICAgKiBlcXVhbCB0byBlcnJvciBj aGFyYWN0ZXIgaW5kZXggbWludXMgdG90YWwgbm8gb2YKKyAgICAgICAgICAg ICAqIGNoYXJhY3RlciB0aWxsIHRoZSBlcnJvciBsaW5lIHN0YXJ0cy4KKyAg ICAgICAgICAgICAqLworICAgICAgICAgICAgc3RhcnRfbWFya2VyID0gZXJy b3JfY2hhcl9ubyAtIHByZXZfbGluZV9jaGFyczsKKworICAgICAgICAgICAg Ly8gRmluZCB0aGUgbmV4dCBzcGFjZSBmcm9tIHRoZSBjaGFyYWN0ZXIgb3Ig ZW5kIG9mIGxpbmUKKyAgICAgICAgICAgIHZhciBlcnJvcl9saW5lID0gc2Vs Zi5ncmlkVmlldy5xdWVyeV90b29sX29iai5nZXRMaW5lKGVycm9yX2xpbmVf bm8pOworICAgICAgICAgICAgZW5kX21hcmtlciA9IGVycm9yX2xpbmUuaW5k ZXhPZignICcsIHN0YXJ0X21hcmtlcik7CisgICAgICAgICAgICBpZiAoZW5k X21hcmtlciA8IDApCisgICAgICAgICAgICAgIGVuZF9tYXJrZXIgPSBlcnJv cl9saW5lLmxlbmd0aDsKKworICAgICAgICAgICAgLy8gTWFyayB0aGUgZXJy b3IgdGV4dAorICAgICAgICAgICAgc2VsZi5ncmlkVmlldy5tYXJrZXIgPSBz ZWxmLmdyaWRWaWV3LnF1ZXJ5X3Rvb2xfb2JqLm1hcmtUZXh0KAorICAgICAg ICAgICAgICB7bGluZTogZXJyb3JfbGluZV9ubywgY2g6IHN0YXJ0X21hcmtl cn0sCisgICAgICAgICAgICAgIHtsaW5lOiBlcnJvcl9saW5lX25vLCBjaDog ZW5kX21hcmtlcn0sCisgICAgICAgICAgICAgIHtjbGFzc05hbWU6ICJzcWwt ZWRpdG9yLW1hcmsifQorICAgICAgICAgICAgKTsKKworICAgICAgICAgICAg c2VsZi5ncmlkVmlldy5xdWVyeV90b29sX29iai5hZGRMaW5lQ2xhc3Moc2Vs Zi5tYXJrZWRfbGluZV9ubywgJ3dyYXAnLCAnQ29kZU1pcnJvci1hY3RpdmVs aW5lLWJhY2tncm91bmQnKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sCisK KyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGNhbmNlbCB0aGUgcnVu bmluZyBxdWVyeS4KKyAgICAgICAgX2NhbmNlbF9xdWVyeTogZnVuY3Rpb24o KSB7CisgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAgICAg JCgiI2J0bi1jYW5jZWwtcXVlcnkiKS5wcm9wKCdkaXNhYmxlZCcsIHRydWUp OworICAgICAgICAgICQuYWpheCh7CisgICAgICAgICAgICB1cmw6ICJ7eyB1 cmxfZm9yKCdzcWxlZGl0b3IuaW5kZXgnKSB9fSIgKyAiY2FuY2VsLyIgKyBz ZWxmLnRyYW5zSWQsCisgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywKKyAg ICAgICAgICAgIGFzeW5jOiBmYWxzZSwKKyAgICAgICAgICAgIGNvbnRlbnRU eXBlOiAiYXBwbGljYXRpb24vanNvbiIsCisgICAgICAgICAgICBzdWNjZXNz OiBmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgICAgaWYgKHJlcy5kYXRh LnN0YXR1cykgeworICAgICAgICAgICAgICAgIHNlbGYuZGlzYWJsZV90b29s X2J1dHRvbnMoZmFsc2UpOworICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNlbGYuZGlzYWJsZV90b29s X2J1dHRvbnMoZmFsc2UpOworICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmFs ZXJ0KCdDYW5jZWwgUXVlcnkgRXJyb3InLCByZXMuZGF0YS5yZXN1bHQpOwor ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAg ZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAgc2VsZi5kaXNh YmxlX3Rvb2xfYnV0dG9ucyhmYWxzZSk7CisKKyAgICAgICAgICAgICAgaWYg KGUucmVhZHlTdGF0ZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgYWxlcnRp ZnkuYWxlcnQoJ0NhbmNlbCBRdWVyeSBFcnJvcicsCisgICAgICAgICAgICAg ICAgICAne3sgXygnTm90IGNvbm5lY3RlZCB0byBzZXJ2ZXIgT3IgY29ubmVj dGlvbiB3aXRoIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicpIH19Jwor ICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgdmFyIG1zZyA9IGUu cmVzcG9uc2VUZXh0OworICAgICAgICAgICAgICBpZiAoZS5yZXNwb25zZUpT T04gIT0gdW5kZWZpbmVkICYmCisgICAgICAgICAgICAgICAgICBlLnJlc3Bv bnNlSlNPTi5lcnJvcm1zZyAhPSB1bmRlZmluZWQpCisgICAgICAgICAgICAg ICAgbXNnID0gZS5yZXNwb25zZUpTT04uZXJyb3Jtc2c7CisKKyAgICAgICAg ICAgICAgYWxlcnRpZnkuYWxlcnQoJ0NhbmNlbCBRdWVyeSBFcnJvcicsIG1z Zyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgIH0s CisKKyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGRvd25sb2FkIHRo ZSBncmlkIGRhdGEgYXMgQ1NWIGZpbGUuCisgICAgICAgIF9kb3dubG9hZDog ZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisg ICAgICAgICAgaWYgKHNlbGYuY29sdW1ucyAhPSB1bmRlZmluZWQgJiYKKyAg ICAgICAgICAgICAgc2VsZi5jb2xsZWN0aW9uICE9IHVuZGVmaW5lZCAmJgor ICAgICAgICAgICAgICBzZWxmLmNvbGxlY3Rpb24uZnVsbENvbGxlY3Rpb24g IT0gdW5kZWZpbmVkICYmCisgICAgICAgICAgICAgIHNlbGYuY29sbGVjdGlv bi5mdWxsQ29sbGVjdGlvbi5sZW5ndGggPiAwKQorICAgICAgICAgIHsKKyAg ICAgICAgICAgIHZhciBjc3ZfY29sID0gXy5pbmRleEJ5KHNlbGYuY29sdW1u cywgJ25hbWUnKSwKKyAgICAgICAgICAgICAgICBsYWJlbHMgPSBfLnBsdWNr KHNlbGYuY29sdW1ucywgJ2xhYmVsJyksCisgICAgICAgICAgICAgICAga2V5 cyA9IF8ucGx1Y2soc2VsZi5jb2x1bW5zLCAnbmFtZScpOworCisgICAgICAg ICAgICAvLyBGZXRjaCB0aGUgaXRlbXMgZnJvbSBmdWxsQ29sbGVjdGlvbiBh bmQgY29udmVydCBpdCBhcyBjc3YgZm9ybWF0CisgICAgICAgICAgICB2YXIg Y3N2ID0gbGFiZWxzLmpvaW4oJywnKSArICdcbic7CisgICAgICAgICAgICBj c3YgKz0gc2VsZi5jb2xsZWN0aW9uLmZ1bGxDb2xsZWN0aW9uLm1hcChmdW5j dGlvbihpdGVtKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIF8ubWFwKGtl eXMsIGZ1bmN0aW9uKGtleSkgeworICAgICAgICAgICAgICAgICAgdmFyIGNl bGwgPSBjc3ZfY29sIFtrZXldLmNlbGwsCisgICAgICAgICAgICAgICAgICAg ICAgLy8gc3VwcG9zZSB5b3Ugd2FudCB0byBwcmVzZXJ2ZSBjdXN0b20gZm9y bWF0dGVycworICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlciA9IGNl bGwucHJvdG90eXBlICYmIGNlbGwucHJvdG90eXBlLmZvcm1hdHRlcjsKKwor ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlciAmJiBmb3JtYXR0 ZXIuZnJvbVJhdyA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y bWF0dGVyLmZyb21SYXcoaXRlbS5nZXQoa2V5KSwgaXRlbSkgOiBpdGVtLmdl dChrZXkpOworICAgICAgICAgICAgICAgIH0pLmpvaW4oJywnKTsKKyAgICAg ICAgICAgIH0pLmpvaW4oJ1xuJyk7CisKKyAgICAgICAgICAgIC8vIERvd25s b2FkIHRoZSBmaWxlLgorICAgICAgICAgICAgdmFyIGVuY29kZWRVcmkgPSBl bmNvZGVVUkkoJ2RhdGE6dGV4dC9jc3Y7Y2hhcnNldD11dGYtOCwnICsgY3N2 KSwKKyAgICAgICAgICAgICAgICAgICAgbGluayA9IGRvY3VtZW50LmNyZWF0 ZUVsZW1lbnQoJ2EnKTsKKyAgICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRl KCdocmVmJywgZW5jb2RlZFVyaSk7CisKKyAgICAgICAgICAgIC8qIElmIGRv d25sb2FkIGlzIGZyb20gdmlldyBkYXRhIHRoZW4gZmlsZSBuYW1lIHNob3Vs ZCBiZQorICAgICAgICAgICAgICogdGhlIG9iamVjdCBuYW1lIGZvciB3aGlj aCBkYXRhIGlzIHRvIGJlIGRpc3BsYXllZC4KKyAgICAgICAgICAgICAqLwor ICAgICAgICAgICAgaWYgKCFzZWxmLmlzX3F1ZXJ5X3Rvb2wpIHsKKyAgICAg ICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgICAgICB1cmw6ICJ7eyB1 cmxfZm9yKCdzcWxlZGl0b3IuaW5kZXgnKSB9fSIgKyAib2JqZWN0L2dldC8i ICsgc2VsZi50cmFuc0lkLAorICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dF VCcsCisgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24ocmVzKSB7 CisgICAgICAgICAgICAgICAgICBpZiAocmVzLmRhdGEuc3RhdHVzKSB7Cisg ICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lID0gcmVzLmRhdGEucmVzdWx0 ICsgJy5jc3YnOworICAgICAgICAgICAgICAgICAgICBsaW5rLnNldEF0dHJp YnV0ZSgnZG93bmxvYWQnLCBmaWxlbmFtZSk7CisgICAgICAgICAgICAgICAg ICAgIGxpbmsuY2xpY2soKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlv bihlKSB7CisgICAgICAgICAgICAgICAgICBpZiAoZS5yZWFkeVN0YXRlID09 IDApIHsKKyAgICAgICAgICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoJ0dl dCBPYmplY3QgTmFtZSBFcnJvcicsCisgICAgICAgICAgICAgICAgICAgICAn e3sgXygnTm90IGNvbm5lY3RlZCB0byBzZXJ2ZXIgT3IgY29ubmVjdGlvbiB3 aXRoIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xvc2VkLicpIH19JworICAgICAg ICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICByZXR1cm47 CisgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgIHZh ciBtc2cgPSBlLnJlc3BvbnNlVGV4dDsKKyAgICAgICAgICAgICAgICAgIGlm IChlLnJlc3BvbnNlSlNPTiAhPSB1bmRlZmluZWQgJiYKKyAgICAgICAgICAg ICAgICAgICAgICBlLnJlc3BvbnNlSlNPTi5lcnJvcm1zZyAhPSB1bmRlZmlu ZWQpCisgICAgICAgICAgICAgICAgICAgIG1zZyA9IGUucmVzcG9uc2VKU09O LmVycm9ybXNnOworCisgICAgICAgICAgICAgICAgICBhbGVydGlmeS5hbGVy dCgnR2V0IE9iamVjdCBOYW1lIEVycm9yJywgbXNnKTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIHZhciBjdXJfdGltZSA9 IG5ldyBEYXRlKCk7CisgICAgICAgICAgICAgIHZhciBmaWxlbmFtZSA9ICdk YXRhLScgKyBjdXJfdGltZS5nZXRUaW1lKCkgKyAnLmNzdic7CisgICAgICAg ICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIGZpbGVuYW1l KTsKKyAgICAgICAgICAgICAgbGluay5jbGljaygpOworICAgICAgICAgICAg fQorICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg IGFsZXJ0aWZ5LmFsZXJ0KCdEb3dubG9hZCBEYXRhJywgJ05vIGRhdGEgaXMg YXZhaWxhYmxlIHRvIGRvd25sb2FkJyk7CisgICAgICAgICAgfQorICAgICAg ICB9LAorCisgICAgICAgIF9hdXRvX3JvbGxiYWNrOiBmdW5jdGlvbigpIHsK KyAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgICAgICAgIGF1 dG9fcm9sbGJhY2sgPSB0cnVlOworCisgICAgICAgICAgaWYgKCQoJy5hdXRv LXJvbGxiYWNrJykuaGFzQ2xhc3MoJ3Zpc2liaWxpdHktaGlkZGVuJykgPT09 IHRydWUpCisgICAgICAgICAgICAkKCcuYXV0by1yb2xsYmFjaycpLnJlbW92 ZUNsYXNzKCd2aXNpYmlsaXR5LWhpZGRlbicpOworICAgICAgICAgIGVsc2Ug eworICAgICAgICAgICAgJCgnLmF1dG8tcm9sbGJhY2snKS5hZGRDbGFzcygn dmlzaWJpbGl0eS1oaWRkZW4nKTsKKyAgICAgICAgICAgIGF1dG9fcm9sbGJh Y2sgPSBmYWxzZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvLyBNYWtl IGFqYXggY2FsbCB0byBjaGFuZ2UgdGhlIGxpbWl0CisgICAgICAgICAgJC5h amF4KHsKKyAgICAgICAgICAgIHVybDogInt7IHVybF9mb3IoJ3NxbGVkaXRv ci5pbmRleCcpIH19IiArICJhdXRvX3JvbGxiYWNrLyIgKyBzZWxmLnRyYW5z SWQsCisgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJywKKyAgICAgICAgICAg IGFzeW5jOiBmYWxzZSwKKyAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAiYXBw bGljYXRpb24vanNvbiIsCisgICAgICAgICAgICBkYXRhOiBKU09OLnN0cmlu Z2lmeShhdXRvX3JvbGxiYWNrKSwKKyAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1 bmN0aW9uKHJlcykgeworICAgICAgICAgICAgICBpZiAoIXJlcy5kYXRhLnN0 YXR1cykKKyAgICAgICAgICAgICAgICBhbGVydGlmeS5hbGVydCgnQXV0byBS b2xsYmFjayBFcnJvcicsIHJlcy5kYXRhLnJlc3VsdCk7CisgICAgICAgICAg ICB9LAorICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAg ICAgICAgICAgaWYgKGUucmVhZHlTdGF0ZSA9PSAwKSB7CisgICAgICAgICAg ICAgICAgYWxlcnRpZnkuYWxlcnQoJ0F1dG8gUm9sbGJhY2sgRXJyb3InLAor ICAgICAgICAgICAgICAgICAne3sgXygnTm90IGNvbm5lY3RlZCB0byBzZXJ2 ZXIgT3IgY29ubmVjdGlvbiB3aXRoIHRoZSBzZXJ2ZXIgaGFzIGJlZW4gY2xv c2VkLicpIH19JworICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAg ICAgcmV0dXJuOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg dmFyIG1zZyA9IGUucmVzcG9uc2VUZXh0OworICAgICAgICAgICAgICBpZiAo ZS5yZXNwb25zZUpTT04gIT0gdW5kZWZpbmVkICYmCisgICAgICAgICAgICAg ICAgICBlLnJlc3BvbnNlSlNPTi5lcnJvcm1zZyAhPSB1bmRlZmluZWQpCisg ICAgICAgICAgICAgICAgbXNnID0gZS5yZXNwb25zZUpTT04uZXJyb3Jtc2c7 CisKKyAgICAgICAgICAgICAgYWxlcnRpZnkuYWxlcnQoJ0F1dG8gUm9sbGJh Y2sgRXJyb3InLCBtc2cpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0p OworICAgICAgICB9LAorCisgICAgICAgIF9hdXRvX2NvbW1pdDogZnVuY3Rp b24oKSB7CisgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzLAorICAgICAgICAg ICAgICBhdXRvX2NvbW1pdCA9IHRydWU7CisKKyAgICAgICAgICBpZiAoJCgn LmF1dG8tY29tbWl0JykuaGFzQ2xhc3MoJ3Zpc2liaWxpdHktaGlkZGVuJykg PT09IHRydWUpCisgICAgICAgICAgICAkKCcuYXV0by1jb21taXQnKS5yZW1v dmVDbGFzcygndmlzaWJpbGl0eS1oaWRkZW4nKTsKKyAgICAgICAgICBlbHNl IHsKKyAgICAgICAgICAgICQoJy5hdXRvLWNvbW1pdCcpLmFkZENsYXNzKCd2 aXNpYmlsaXR5LWhpZGRlbicpOworICAgICAgICAgICAgYXV0b19jb21taXQg PSBmYWxzZTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICAvLyBNYWtlIGFq YXggY2FsbCB0byBjaGFuZ2UgdGhlIGxpbWl0CisgICAgICAgICAgJC5hamF4 KHsKKyAgICAgICAgICAgIHVybDogInt7IHVybF9mb3IoJ3NxbGVkaXRvci5p bmRleCcpIH19IiArICJhdXRvX2NvbW1pdC8iICsgc2VsZi50cmFuc0lkLAor ICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsCisgICAgICAgICAgICBhc3lu YzogZmFsc2UsCisgICAgICAgICAgICBjb250ZW50VHlwZTogImFwcGxpY2F0 aW9uL2pzb24iLAorICAgICAgICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnko YXV0b19jb21taXQpLAorICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24o cmVzKSB7CisgICAgICAgICAgICAgIGlmICghcmVzLmRhdGEuc3RhdHVzKQor ICAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KCdBdXRvIENvbW1pdCBF cnJvcicsIHJlcy5kYXRhLnJlc3VsdCk7CisgICAgICAgICAgICB9LAorICAg ICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgICAg aWYgKGUucmVhZHlTdGF0ZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgYWxl cnRpZnkuYWxlcnQoJ0F1dG8gQ29tbWl0IEVycm9yJywKKyAgICAgICAgICAg ICAgICAgJ3t7IF8oJ05vdCBjb25uZWN0ZWQgdG8gc2VydmVyIE9yIGNvbm5l Y3Rpb24gd2l0aCB0aGUgc2VydmVyIGhhcyBiZWVuIGNsb3NlZC4nKSB9fScK KyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIHZhciBtc2cgPSBl LnJlc3BvbnNlVGV4dDsKKyAgICAgICAgICAgICAgaWYgKGUucmVzcG9uc2VK U09OICE9IHVuZGVmaW5lZCAmJgorICAgICAgICAgICAgICAgICAgZS5yZXNw b25zZUpTT04uZXJyb3Jtc2cgIT0gdW5kZWZpbmVkKQorICAgICAgICAgICAg ICAgIG1zZyA9IGUucmVzcG9uc2VKU09OLmVycm9ybXNnOworCisgICAgICAg ICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KCdBdXRvIENvbW1pdCBFcnJvcicsIG1z Zyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSk7CisgICAgICAgIH0K KyAgICAgIH0KKyAgICApOworCisgICAgcGdBZG1pbi5TcWxFZGl0b3IgPSB7 CisgICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY3JlYXRlIGFu ZCByZXR1cm4gdGhlIG9iamVjdCBvZiBncmlkIGNvbnRyb2xsZXIuCisgICAg ICBjcmVhdGU6IGZ1bmN0aW9uKGNvbnRhaW5lcikgeworICAgICAgICByZXR1 cm4gbmV3IFNxbEVkaXRvckNvbnRyb2xsZXIoY29udGFpbmVyKTsKKyAgICAg IH0KKyAgICB9OworCisgICAgcmV0dXJuIHBnQWRtaW4uU3FsRWRpdG9yOwor ICB9KTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRv ci90ZW1wbGF0ZXMvc3FsZWRpdG9yL3NxbC85LjFfcGx1cy9jcmVhdGUuc3Fs IGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3RlbXBsYXRlcy9zcWxl ZGl0b3Ivc3FsLzkuMV9wbHVzL2NyZWF0ZS5zcWwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uN2MxNzYxNgotLS0gL2Rldi9udWxsCisr KyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci90ZW1wbGF0ZXMvc3Fs ZWRpdG9yL3NxbC85LjFfcGx1cy9jcmVhdGUuc3FsCkBAIC0wLDAgKzEsOCBA QAoreyMgSW5zZXJ0IHRoZSBuZXcgcm93IHdpdGggcHJpbWFyeSBrZXlzIChz cGVjaWZpZWQgaW4gcHJpbWFyeV9rZXlzKSAjfQorSU5TRVJUIElOVE8ge3sg Y29ubnxxdElkZW50KG5zcF9uYW1lLCBvYmplY3RfbmFtZSkgfX0gKAoreyUg Zm9yIGNvbCBpbiBkYXRhX3RvX2JlX3NhdmVkICV9Cit7JSBpZiBub3QgbG9v cC5maXJzdCAlfSwgeyUgZW5kaWYgJX17eyBjb25ufHF0SWRlbnQoY29sKSB9 fXslIGVuZGZvciAlfQorKSBWQUxVRVMgKAoreyUgZm9yIGNvbCBpbiBkYXRh X3RvX2JlX3NhdmVkICV9Cit7JSBpZiBub3QgbG9vcC5maXJzdCAlfSwgeyUg ZW5kaWYgJX17eyBkYXRhX3RvX2JlX3NhdmVkW2NvbF18cXRMaXRlcmFsIH19 eyUgZW5kZm9yICV9CispOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci90ZW1w bGF0ZXMvc3FsZWRpdG9yL3NxbC85LjFfcGx1cy9kZWxldGUuc3FsIGIvd2Vi L3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3RlbXBsYXRlcy9zcWxlZGl0b3Iv c3FsLzkuMV9wbHVzL2RlbGV0ZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uMTZhZDViOAotLS0gL2Rldi9udWxsCisrKyBiL3dl Yi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci90ZW1wbGF0ZXMvc3FsZWRpdG9y L3NxbC85LjFfcGx1cy9kZWxldGUuc3FsCkBAIC0wLDAgKzEsNCBAQAoreyMg RGVsZXRlIHRoZSByb3cgd2l0aCBwcmltYXJ5IGtleXMgKHNwZWNpZmllZCBp biBwcmltYXJ5X2tleXMpICN9CitERUxFVEUgRlJPTSB7eyBjb25ufHF0SWRl bnQobnNwX25hbWUsIG9iamVjdF9uYW1lKSB9fSBXSEVSRQoreyUgZm9yIHBr IGluIHByaW1hcnlfa2V5cyAlfQoreyUgaWYgbm90IGxvb3AuZmlyc3QgJX0g QU5EIHslIGVuZGlmICV9e3sgY29ubnxxdElkZW50KHBrKSB9fSA9IHt7IHBy aW1hcnlfa2V5c1twa118cXRMaXRlcmFsIH19eyUgZW5kZm9yICV9OwpcIE5v IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL3Rvb2xzL3NxbGVkaXRvci90ZW1wbGF0ZXMvc3FsZWRpdG9yL3NxbC85 LjFfcGx1cy9vYmplY3RuYW1lLnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL3Nx bGVkaXRvci90ZW1wbGF0ZXMvc3FsZWRpdG9yL3NxbC85LjFfcGx1cy9vYmpl Y3RuYW1lLnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li4xODhlNjlkCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9v bHMvc3FsZWRpdG9yL3RlbXBsYXRlcy9zcWxlZGl0b3Ivc3FsLzkuMV9wbHVz L29iamVjdG5hbWUuc3FsCkBAIC0wLDAgKzEsNyBAQAoreyMgPT09PT09PT09 PT09PSBGZXRjaCB0aGUgc2NoZW1hIGFuZCBvYmplY3QgbmFtZSBmb3IgZ2l2 ZW4gb2JqZWN0IGlkID09PT09PT09PT09PT0gI30KK3slIGlmIG9ial9pZCAl fQorU0VMRUNUIG4ubnNwbmFtZSwgci5yZWxuYW1lCitGUk9NIHBnX2NsYXNz IHIKKyAgICBMRUZUIEpPSU4gcGdfbmFtZXNwYWNlIG4gT04gKHIucmVsbmFt ZXNwYWNlID0gbi5vaWQpCitXSEVSRSByLm9pZCA9IHt7b2JqX2lkfX07Cit7 JSBlbmRpZiAlfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3Fs ZWRpdG9yL3RlbXBsYXRlcy9zcWxlZGl0b3Ivc3FsLzkuMV9wbHVzL29iamVj dHF1ZXJ5LnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci90ZW1w bGF0ZXMvc3FsZWRpdG9yL3NxbC85LjFfcGx1cy9vYmplY3RxdWVyeS5zcWwK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI5NjU3Ngot LS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRv ci90ZW1wbGF0ZXMvc3FsZWRpdG9yL3NxbC85LjFfcGx1cy9vYmplY3RxdWVy eS5zcWwKQEAgLTAsMCArMSwxMiBAQAoreyMgU1FMIHF1ZXJ5IGZvciBvYmpl Y3RzICN9CitTRUxFQ1QgKiBGUk9NIHt7IGNvbm58cXRJZGVudChuc3BfbmFt ZSwgb2JqZWN0X25hbWUpIH19Cit7JSBpZiBzcWxfZmlsdGVyICV9CitXSEVS RSB7eyBzcWxfZmlsdGVyIH19Cit7JSBlbmRpZiAlfQoreyUgaWYgcGtfbmFt ZXMgJX0KK09SREVSIEJZIHt7IHBrX25hbWVzIH19Cit7JSBpZiBjbWRfdHlw ZSA9PSAxIG9yIGNtZF90eXBlID09IDMgJX1BU0MgeyUgZWxpZiBjbWRfdHlw ZSA9PSAyICV9REVTQyB7JSBlbmRpZiAlfQoreyUgZW5kaWYgJX0KK3slIGlm IGxpbWl0ID4gMCAlfQorTElNSVQge3sgbGltaXQgfX0KK3slIGVuZGlmICV9 CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVt cGxhdGVzL3NxbGVkaXRvci9zcWwvOS4xX3BsdXMvcHJpbWFyeV9rZXlzLnNx bCBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci90ZW1wbGF0ZXMvc3Fs ZWRpdG9yL3NxbC85LjFfcGx1cy9wcmltYXJ5X2tleXMuc3FsCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNWE2OTcKLS0tIC9kZXYv bnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVtcGxh dGVzL3NxbGVkaXRvci9zcWwvOS4xX3BsdXMvcHJpbWFyeV9rZXlzLnNxbApA QCAtMCwwICsxLDggQEAKK3sjID09PT09PT09PT09PT0gRmV0Y2ggdGhlIHBy aW1hcnkga2V5cyBmb3IgZ2l2ZW4gb2JqZWN0IGlkID09PT09PT09PT09PT0g I30KK3slIGlmIG9ial9pZCAlfQorU0VMRUNUIGF0LmF0dG5hbWUsIHR5LnR5 cG5hbWUKK0ZST00gcGdfYXR0cmlidXRlIGF0IExFRlQgSk9JTiBwZ190eXBl IHR5IE9OICh0eS5vaWQgPSBhdC5hdHR0eXBpZCkKK1dIRVJFIGF0dHJlbGlk PXt7b2JqX2lkfX06Om9pZCBBTkQgYXR0bnVtID0gQU5ZICgKKyAgICAoU0VM RUNUIGNvbi5jb25rZXkgRlJPTSBwZ19jbGFzcyByZWwgTEVGVCBPVVRFUiBK T0lOIHBnX2NvbnN0cmFpbnQgY29uIE9OIGNvbi5jb25yZWxpZD1yZWwub2lk CisgICAgQU5EIGNvbi5jb250eXBlPSdwJyBXSEVSRSByZWwucmVsa2luZCBJ TiAoJ3InLCdzJywndCcpIEFORCByZWwub2lkID0ge3tvYmpfaWR9fTo6b2lk KTo6aW50ZWdlcltdKQoreyUgZW5kaWYgJX0KXCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9zcWxl ZGl0b3IvdGVtcGxhdGVzL3NxbGVkaXRvci9zcWwvOS4xX3BsdXMvdXBkYXRl LnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci90ZW1wbGF0ZXMv c3FsZWRpdG9yL3NxbC85LjFfcGx1cy91cGRhdGUuc3FsCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZTM4OTUKLS0tIC9kZXYvbnVs bAorKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVtcGxhdGVz L3NxbGVkaXRvci9zcWwvOS4xX3BsdXMvdXBkYXRlLnNxbApAQCAtMCwwICsx LDcgQEAKK3sjIFVwZGF0ZSB0aGUgcm93IHdpdGggcHJpbWFyeSBrZXlzIChz cGVjaWZpZWQgaW4gcHJpbWFyeV9rZXlzKSAjfQorVVBEQVRFIHt7IGNvbm58 cXRJZGVudChuc3BfbmFtZSwgb2JqZWN0X25hbWUpIH19IFNFVAoreyUgZm9y IGNvbCBpbiBkYXRhX3RvX2JlX3NhdmVkICV9Cit7JSBpZiBub3QgbG9vcC5m aXJzdCAlfSwgeyUgZW5kaWYgJX17eyBjb25ufHF0SWRlbnQoY29sKSB9fSA9 IHt7IGRhdGFfdG9fYmVfc2F2ZWRbY29sXXxxdExpdGVyYWwgfX17JSBlbmRm b3IgJX0KKyBXSEVSRQoreyUgZm9yIHBrIGluIHByaW1hcnlfa2V5cyAlfQor eyUgaWYgbm90IGxvb3AuZmlyc3QgJX0gQU5EIHslIGVuZGlmICV9e3sgY29u bnxxdElkZW50KHBrKSB9fSA9IHt7IHByaW1hcnlfa2V5c1twa118cXRMaXRl cmFsIH19eyUgZW5kZm9yICV9OwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp bGUKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci90 ZW1wbGF0ZXMvc3FsZWRpdG9yL3NxbC85LjFfcGx1cy92YWxpZGF0ZS5zcWwg Yi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVtcGxhdGVzL3NxbGVk aXRvci9zcWwvOS4xX3BsdXMvdmFsaWRhdGUuc3FsCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MGM1ZTkKLS0tIC9kZXYvbnVsbAor KysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVtcGxhdGVzL3Nx bGVkaXRvci9zcWwvOS4xX3BsdXMvdmFsaWRhdGUuc3FsCkBAIC0wLDAgKzEs NCBAQAoreyMgVmFsaWRhdGlvbiBxdWVyeSAjfQoreyUgaWYgcm93X2ZpbHRl ciAlfQorICAgIEVYUExBSU4gU0VMRUNUICogRlJPTSB7eyBjb25ufHF0SWRl bnQobnNwX25hbWUsIG9iamVjdF9uYW1lKSB9fSBXSEVSRSB7eyByb3dfZmls dGVyIH19Cit7JSBlbmRpZiAlfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp bGUK --001a11c308a4e7d07c0530717384 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers --001a11c308a4e7d07c0530717384--