Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1alEZU-0000vw-Es for pgadmin-hackers@arkaria.postgresql.org; Wed, 30 Mar 2016 11:46:00 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1alEZT-0001Ox-SS for pgadmin-hackers@arkaria.postgresql.org; Wed, 30 Mar 2016 11:45:59 +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 1alEZ9-0001AM-Do for pgadmin-hackers@postgresql.org; Wed, 30 Mar 2016 11:45:40 +0000 Received: from mail-wm0-x231.google.com ([2a00:1450:400c:c09::231]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1alEZ0-0006D0-UG for pgadmin-hackers@postgresql.org; Wed, 30 Mar 2016 11:45:38 +0000 Received: by mail-wm0-x231.google.com with SMTP id r72so95563921wmg.0 for ; Wed, 30 Mar 2016 04:45:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=OafJeJLUgESwiV4BAs1tJqDo0Hafy9pzEvsasjDhIdE=; b=nlKLy3jo7TvVwLYWg0Vfrz7h194pCcSRqKyvDYt2w1eIBD5d9PtGb24UoNw0UuW0ub zuMnUHNjdAU2EDKoEfuJu0vmPDudiBwFQHA+U/LX8jgsJoZKM9RgYP1l3mbZuqZO00Al 8jUmiomJKFw922naZdS5EWkLp3Dc/u7vczJhDVyYUuuSOQwbgRlR3dQCEIAbpG7P5krH SmimQOWNYJ+ahvHb4BveIZWbVpcg28zjK58xAnzCxjpletaYbgaXMbylteFrF4CzsYh3 kSVPmMyVHqyLOPgYch9kneDsF6M1sdUlaVgov3Fiavzn36PwvWZ5S3ZBhh8ALrF4ynjy CDzw== 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:from:date :message-id:subject:to:cc; bh=OafJeJLUgESwiV4BAs1tJqDo0Hafy9pzEvsasjDhIdE=; b=VfTt+inBX75HFQ+f6lLqcpifEieV6LpKZ0NYK01Wuc2FfOhSQydFQkT9TM628WYvWA c5uRAjGOBTi16zpMmgTq2UGztWaKaNbvvWkdIdDEcAwhtUL/klmQZPaHPhQ+4osiUl+H 1GApE3pn+DZrS9pYeoKXpjiNhnOxOPFGSgeTc1eTBje7ggl24IS6rUmv+aGIm+dF6CYC FBoKyWhGTfHF894gGrg++UfaP2zufsxEBl0FSnqO7aOp2sSfNunrHWOwHAsXvC7+Mgbe GfkicJd0CQzGs3unpsNaoqzkdQ2Xshi3/Pml5b4LKrmDdPlv63qsDUSwmXk/RZIUPnNq 7tdw== X-Gm-Message-State: AD7BkJIoyJx4XTwudM2ZRzd+q56OwZkhuXGS3svEIv/RJW+pfrtRwEpmZFZSixvZlzOwLZysTVPaEFSW1URVwWBr X-Received: by 10.194.95.73 with SMTP id di9mr9681430wjb.152.1459338328290; Wed, 30 Mar 2016 04:45:28 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.55.9 with HTTP; Wed, 30 Mar 2016 04:44:58 -0700 (PDT) In-Reply-To: References: From: Surinder Kumar Date: Wed, 30 Mar 2016 17:14:58 +0530 Message-ID: Subject: Re: [pgAdmin4] [Patch]: Grant Wizard To: Dave Page Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary=047d7bdc8f70aabd2e052f42ae41 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 --047d7bdc8f70aabd2e052f42ae41 Content-Type: multipart/alternative; boundary=047d7bdc8f70aabd2a052f42ae3f --047d7bdc8f70aabd2a052f42ae3f Content-Type: text/plain; charset=UTF-8 Hi, Please find updated patch. This patch has following changes: 1. Improved code commenting. 2. Properly handling memory leak issues in js code. On Mon, Mar 28, 2016 at 2:09 PM, Surinder Kumar < surinder.kumar@enterprisedb.com> wrote: > Hi Dave, > > Please find updated patch with suggested changes. > > On Thu, Mar 10, 2016 at 5:26 PM, Dave Page wrote: > >> On Thu, Mar 10, 2016 at 9:50 AM, Surinder Kumar >> wrote: >> > Please apply Khusboo's patch for "Privileges macros under Schema" before >> > using grant wizard patch. >> >> Thanks, that works. Some (hopefully final) feedback: >> >> - Can we add a side-image? Not sure what yet - just a placeholder for >> now until I come up with something. >> > Already a placeholder for left side image. > >> >> - Why is the closed button in an odd position (see File -> Test Alert >> for comparison) >> > Fixed > >> >> - Why are we using a scrolling list AND pagination? I think a >> scrolling list alone should be fine. >> > Pagination is removed. > >> >> - The grid sizing is wrong. See how the scrollbar on the right in the >> screenshot is off the edge of the dialogue, and there's a horizontal >> scrollbar? >> > Fixed. > >> >> - We shouldn't truncate object names as that can be ambiguous. The >> column should extend as necessary, and there should be a horizontal >> scrollbar on the grid itself (not at the bottom of the dialogue >> content). >> > I have fixed it and scrollbar is now on the grid itself. > >> >> - Function names should include the parameters, as they are part of >> the identifier. Without, it can be ambigous - e.g. do_stuff(int) vs. >> do_stuff(text). >> > Fixed. > >> >> - If I select only functions (for example), the Privileges panel >> should only list privileges available for functions. If I select >> multiple object types, it should show the available options for only >> those object types. >> > Implemented this feature. > >> >> - If I select functions and tables, and then choose (for example), >> usage and truncate, it will attempt to set usage on tables and >> truncate on functions. It should only attempt to set privileges on the >> objects for which they are appropriate. >> > Done > >> >> - On the last page, the Next button is disabled. It is turned a >> marginally darker blue, but also highlights on mouse-over. The change >> in shade is so subtle it's hard to see, and the highlight implies the >> button is active when it isn't. >> > Fixed. > >> >> - The buttons appear to have a smaller corner radius than those on the >> main browser, or in other dialogues. >> > Fixed. > >> >> - Button labels should have an   before them to properly space >> the label from the icon (or better yet, this should be done in CSS, >> though that would also need to be done elsewhere). >> > done with css. > >> >> - Why do the URLs have a /wizard prefix? I think that should be removed. >> > Removed prefix. > >> >> - The available privileges for each object type seem to be defined in >> both grant_wizard.js and allowed_acl.json. Can we just use >> allowed_acl.json? >> > Yes, allowed_acl.json is now used in grant_wizard.js. > >> >> Thanks. >> >> -- >> Dave Page >> Blog: http://pgsnake.blogspot.com >> Twitter: @pgsnake >> >> EnterpriseDB UK: http://www.enterprisedb.com >> The Enterprise PostgreSQL Company >> > > --047d7bdc8f70aabd2a052f42ae3f Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

Please find updated patch.=C2=A0

This patch has following changes:=C2=A0
1.= Improved code commenting.
2. Properly handling memory leak issue= s in js code.


On Mon, Mar 28, 2016 at 2:09 PM, Surinder Kumar <surinder.kumar@enterprisedb.com> wrote:
Hi Dave,

Please fin= d updated patch with suggested changes.

On Thu, Mar 10, 2016 at 5:26 PM, Dav= e Page <dpage@pgadmin.org> wrote:
= On Thu, Mar 10, 2016 at 9:50 AM, Surinder Kumar
<su= rinder.kumar@enterprisedb.com> wrote:
> Please apply Khusboo's patch for "Privileges macros under Sch= ema" before
> using grant wizard patch.

Thanks, that works. Some (hopefully final) feedback:

- Can we add a side-image? Not sure what yet - just a placeholder for
now until I come up with something.
Already a p= laceholder for left side image.

- Why is the closed button in an odd position (see File -> Test Alert
for comparison)
Fixed=C2=A0

- Why are we using a scrolling list AND pagination? I think a
scrolling list alone should be fine.
Pagination= is removed.=C2=A0

- The grid sizing is wrong. See how the scrollbar on the right in the
screenshot is off the edge of the dialogue, and there's a horizontal
scrollbar?
Fixed.

- We shouldn't truncate object names as that can be ambiguous. The
column should extend as necessary, and there should be a horizontal
scrollbar on the grid itself (not at the bottom of the dialogue
content).
I have fixed it and scrollbar is now = on the grid itself.

- Function names should include the parameters, as they are part of
the identifier. Without, it can be ambigous - e.g. do_stuff(int) vs.
do_stuff(text).
Fixed.=C2=A0

- If I select only functions (for example), the Privileges panel
should only list privileges available for functions. If I select
multiple object types, it should show the available options for only
those object types.
Implemented this feature.= =C2=A0

- If I select functions and tables, and then choose (for example),
usage and truncate, it will attempt to set usage on tables and
truncate on functions. It should only attempt to set privileges on the
objects for which they are appropriate.
Done=C2= =A0

- On the last page, the Next button is disabled. It is turned a
marginally darker blue, but also highlights on mouse-over. The change
in shade is so subtle it's hard to see, and the highlight implies the button is active when it isn't.
Fixed.=C2= =A0

- The buttons appear to have a smaller corner radius than those on the
main browser, or in other dialogues.
Fixed.=C2= =A0

- Button labels should have an &nbsp; before them to properly space
the label from the icon (or better yet, this should be done in CSS,
though that would also need to be done elsewhere).
<= div>done with css.=C2=A0

- Why do the URLs have a /wizard prefix? I think that should be removed.
Removed prefix.=C2=A0

- The available privileges for each object type seem to be defined in
both grant_wizard.js and allowed_acl.json. Can we just use
allowed_acl.json?
Yes, allowed_acl.json is now = used in grant_wizard.js.

Thanks.

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

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company


--047d7bdc8f70aabd2a052f42ae3f-- --047d7bdc8f70aabd2e052f42ae41 Content-Type: application/octet-stream; name="grant_wizard_v6.patch" Content-Disposition: attachment; filename="grant_wizard_v6.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_imesexxp1 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3RhdGljL2Nzcy93 aXphcmQuY3NzIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvY3NzL3dp emFyZC5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u Y2E2MTdiNgotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc3RhdGljL2Nzcy93aXphcmQuY3NzCkBAIC0wLDAgKzEsMTQ4IEBACisK Ky8qKiBDU1MgZm9yIFdpemFyZCAqKi8KKy5hanMtY29udGVudCB7CisgIHBh ZGRpbmctdG9wOiAwcHggIWltcG9ydGFudDsKK30KKworLyogV2l6YXJkIEhl YWRlciBDU1MgKi8KKy5hbGVydGlmeSAuYWpzLWRpYWxvZyAuYWpzLWNsb3Nl IHsKKyAgbWFyZ2luLXRvcDogMTVweDsKK30KKworLndpemFyZC1oZWFkZXIg eworICBiYWNrZ3JvdW5kOiAjNDI4YmNhOworICBwYWRkaW5nLWxlZnQ6IDE1 cHg7CisgIHBhZGRpbmctYm90dG9tOiA3cHg7CisgIGNvbG9yOiAjZmZmOwor ICBmb250LXNpemU6IDE4cHg7CisgIGhlaWdodDogNzZweDsKKyAgbGluZS1o ZWlnaHQ6IDc2cHg7CisgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwOwor fQorCisud2l6YXJkLWhlYWRlciBoMyB7CisgIGZvbnQtc2l6ZTogMThweDsK KyAgZGlzcGxheTogaW5saW5lLWJsb2NrOworfQorCisud2l6YXJkX2RsZyB7 CisgIGZsb2F0OiBsZWZ0OworICBoZWlnaHQ6IDEwMCU7CisgIHdpZHRoOiAx MDAlOworfQorCisuZ3JhbnRfd2l6YXJkX2NvbnRhaW5lciB7CisJcG9zaXRp b246IHJlbGF0aXZlOworICB3aWR0aDogMTAwJTsKKyAgaGVpZ2h0OiAxMDAl OworfQorCisucGdhZG1pbi13aXphcmQgeworICB3aWR0aDogMTAwJTsKKyAg aGVpZ2h0OiAxMDAlOworfQorCisud2l6YXJkLWNvbnRlbnQgeworICBwb3Np dGlvbjogcmVsYXRpdmU7CisgIHBhZGRpbmc6IDA7CisgIGhlaWdodDogNjQl OworfQorCisud2l6YXJkLXJpZ2h0LXBhbmVsIHsKKyAgb3ZlcmZsb3cteTog YXV0bzsKKyAgaGVpZ2h0OiAxMDAlOworICB0b3A6IDA7CisgIHJpZ2h0OiAw OworICBwb3NpdGlvbjogYWJzb2x1dGU7CisgIGJvdHRvbTogMDsKK30KKwor LndpemFyZC1sZWZ0LXBhbmVsIHsKKyAgcG9zaXRpb246IGFic29sdXRlOwor ICB0b3A6IDA7CisgIGRpc3BsYXk6IGZsZXg7CisgIGJvdHRvbTogMDsKKyAg bGVmdDogMDsKKyAgYWxpZ24taXRlbXM6IGNlbnRlcjsKKyAganVzdGlmeS1j b250ZW50OiBjZW50ZXI7CisgIHJpZ2h0OiAwOworfQorCisud2l6YXJkLWxl ZnQtcGFuZWwgaW1nIHsKKyAgd2lkdGg6IDE0MHB4OworfQorCisud2l6YXJk LXJpZ2h0LXBhbmVsX2NvbnRlbnQgeworCWhlaWdodDogNjAlOworfQorCisu c2VsZWN0X2RiX29iamVjdHNfY29udGFpbmVyIHsKKyAgaGVpZ2h0OiAxMDAl OworfQorCisvKiBXaXphcmQgRm9vdGVyIENTUyAqLworLmZvb3RlciB7Cisg IHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgYmFja2dyb3VuZDogI2ZmZjsKKyAg Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7CisgIGJvdHRvbTogMHB4Owor ICBoZWlnaHQ6IDYycHg7CisgIHJpZ2h0OiAwcHg7CisgIHBhZGRpbmctdG9w OiAyMnB4OworICBib3JkZXItcmFkaXVzOiAwIDAgNnB4IDZweDsKKyAgei1p bmRleDogMTA7Cit9CisKKy8qIFdpemFyZCBCdXR0b24gQ1NTICovCisud2l6 YXJkLWJ1dHRvbnMgeworICBmbG9hdDogcmlnaHQ7Cit9CisKKy53aXphcmQt YnV0dG9ucyBidXR0b24geworICBmbG9hdDogbGVmdDsKKyAgcGFkZGluZzog N3B4IDE1LjJweDsKKyAgZm9udC1zaXplOiAxNHB4OworICBtYXJnaW46IDBw eCA1cHggMCAwICFpbXBvcnRhbnQ7Cit9CisKKy53aXphcmQtYnV0dG9ucyBi dXR0b24ud2l6YXJkLW5leHQgaS5mYSB7CisJcGFkZGluZy1sZWZ0OiA1cHg7 Cit9CisKKy53aXphcmQtYnV0dG9ucyBidXR0b24ud2l6YXJkLWJhY2sgaS5m YSwKKy53aXphcmQtYnV0dG9ucyBidXR0b24ud2l6YXJkLWNhbmNlbCBpLmZh IHsKKwlwYWRkaW5nLXJpZ2h0OiA1cHg7Cit9CisKKy53aXphcmQtYnV0dG9u cyAud2l6YXJkLWZpbmlzaCB7CisgIG1hcmdpbi1yaWdodDogMCAhaW1wb3J0 YW50OworfQorCisvKiBXaXphcmQgU3RhdHVzIGJhciBDU1MgKi8KKy53aXph cmQtZGVzY3JpcHRpb24geworICBwYWRkaW5nOiAxLjdlbSAwLjFlbTsKK30K KworLyogRXJyb3IgbWVzc2FnZSBjc3MgKi8KKy5lcnJvcl9tc2dfZGl2IHsK KyAgZGlzcGxheTogYmxvY2s7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAg Ym90dG9tOiA1NXB4OworICBiYWNrZ3JvdW5kOiAjZmZmOworfQorCisuZXJy b3JfbXNnX2RpdiBwIHsKKyAgYmFja2dyb3VuZDogI2ZmZjsKKyAgY29sb3I6 ICNiOTJjMjg7Cit9CisKKy8qIEluIHdpemFyZCBzZWxlY3QyIGRyb3Bkb3du IGRvZXNuJ3QKKyAqIHBvcHVwIGJlY2F1c2Ugei1pbmRleCBvZiBhbGVydGlm eQorICogd2l6YXJkIGlzIGdyZWF0ZXIgdGhhbiB0aGUgei1pbmRleAorICog b2Ygc2VsZWN0MiBkcm9wZG93bi4gVG8gbWFrZSBzZWxlY3QyCisgKiB2aXNp YmxlLCBzZXQgei1pbmRleCBvZiBzZWxlY3QyCisgKiBoaWdoZXIgdmFsdWUg dGhhbiB3aXphcmQncworICovCisuc2VsZWN0Mi1jb250YWluZXItLW9wZW4g eworICB6LWluZGV4OiAxMDAwMDsKK30KZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc3RhdGljL2pzL25vZGUudWkuanMgYi93ZWIvcGdhZG1p bi9icm93c2VyL3N0YXRpYy9qcy9ub2RlLnVpLmpzCmluZGV4IGYxMjdkNTIu LmE4MDA1OTMgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc3Rh dGljL2pzL25vZGUudWkuanMKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9z dGF0aWMvanMvbm9kZS51aS5qcwpAQCAtMjc5LDcgKzI3OSw3IEBAIGZ1bmN0 aW9uKCQsIF8sIHBnQWRtaW4sIEJhY2tib25lLCBCYWNrZm9ybSwgQWxlcnRp ZnksIE5vZGUpIHsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgfTsK IAotICAgICAgd2hpbGUocCkgeworICAgICAgd2hpbGUocCAmJiBwLmxlbmd0 aCA+IDApIHsKICAgICAgICAgdG9wID0gcC5nZXQoMCkub2Zmc2V0VG9wICsg cC5oZWlnaHQoKTsKICAgICAgICAgcCA9IHAucGFyZW50KCk7CiAgICAgICAg IGlmIChoYXNTY3JvbGxiYXIocCkpIHsKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL2Jyb3dzZXIvc3RhdGljL2pzL3dpemFyZC5qcyBiL3dlYi9wZ2FkbWlu L2Jyb3dzZXIvc3RhdGljL2pzL3dpemFyZC5qcwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5mNDJlYWI3Ci0tLSAvZGV2L251bGwKKysr IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zdGF0aWMvanMvd2l6YXJkLmpzCkBA IC0wLDAgKzEsMjI2IEBACitkZWZpbmUoCisgICAgWyd1bmRlcnNjb3JlJywg J2JhY2tib25lJywgJ3BnYWRtaW4nLCAncGdhZG1pbi5icm93c2VyJ10sCitm dW5jdGlvbihfLCBCYWNrYm9uZSwgcGdBZG1pbiwgcGdCcm93c2VyKSB7CisK KyAgcGdCcm93c2VyID0gcGdCcm93c2VyIHx8IHBnQWRtaW4uQnJvd3NlciB8 fCB7fTsKKworICAvKiBXaXphcmQgaW5kaXZpZHVhbCBQYWdlIE1vZGVsICov CisgIHZhciBXaXphcmRQYWdlID0gcGdCcm93c2VyLldpemFyZFBhZ2UgPSBC YWNrYm9uZS5Nb2RlbC5leHRlbmQoeworICAgIGRlZmF1bHRzOiB7CisgICAg ICBpZDogdW5kZWZpbmVkLCAvKiBJZCAqLworICAgICAgcGFnZV90aXRsZTog dW5kZWZpbmVkLCAvKiBQYWdlIFRpdGxlICovCisgICAgICB2aWV3OiB1bmRl ZmluZWQsIC8qIEEgQmFja2JvbmUgVmlldyAqLworICAgICAgaHRtbDogdW5k ZWZpbmVkLCAvKiBIVE1MIHRhZ3MgdG8gYmUgcmVuZGVyZWQgKi8KKyAgICAg IGltYWdlOiB1bmRlZmluZWQsIC8qIExlZnQgaGFuZCBzaWRlIGltYWdlICov CisgICAgICBkaXNhYmxlX3ByZXY6IGZhbHNlLCAvKiAgUHJldmlvdXMgQnV0 dG9uIEZsYWcgKi8KKyAgICAgIGRpc2FibGVfbmV4dDogZmFsc2UsIC8qICBO ZXh0IEJ1dHRvbiBGbGFnICovCisgICAgICBkaXNhYmxlX2NhbmNlbDogZmFs c2UsIC8qIENhbmNlbCBCdXR0b24gRmxhZyAqLworICAgICAgc2hvd19wcm9n cmVzc19iYXI6ICcnLAorICAgICAgLyogQ2FsbGJhY2sgZm9yIE9uTG9hZCAq LworICAgICAgb25Mb2FkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJu IHRydWU7CisgICAgICB9LAorICAgICAgLyogQ2FsbGJhY2sgZm9yIGJlZm9y ZSBOZXh0ICovCisgICAgICBiZWZvcmVOZXh0OiBmdW5jdGlvbigpIHsKKyAg ICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9LAorICAgICAgb25OZXh0OiBm dW5jdGlvbigpe30sCisgICAgICBvbkJlZm9yZTogZnVuY3Rpb24oKSB7fSwK KyAgICAgIC8qIENhbGxiYWNrIGZvciBiZWZvcmUgUHJldmlvdXMgKi8KKyAg ICAgIGJlZm9yZVByZXY6IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4g dHJ1ZTsKKyAgICAgIH0KKyAgICB9CisgIH0pOworCisgIHZhciBXaXphcmQg PSBwZ0Jyb3dzZXIuV2l6YXJkID0gQmFja2JvbmUuVmlldy5leHRlbmQoewor ICAgIG9wdGlvbnM6IHsKKyAgICAgIHRpdGxlOiAnV2l6YXJkJywgLyogTWFp biBXaXphcmQgVGl0bGUgKi8KKyAgICAgIGltYWdlOiAnbGVmdF9wYW5lbC5w bmcnLCAvKiBUT0RPOjogV2UgY2FuIHVzZSBkZWZhdWx0IGltYWdlIGhlcmUg Ki8KKyAgICAgIGN1cnJfcGFnZTogMCwgLyogQ3VycmVudCBQYWdlIHRvIExv YWQgKi8KKyAgICAgIGRpc2FibGVfbmV4dDogZmFsc2UsCisgICAgICBkaXNh YmxlX3ByZXY6IGZhbHNlLAorICAgICAgZGlzYWJsZV9maW5pc2g6IGZhbHNl LAorICAgICAgZGlzYWJsZV9jYW5jZWw6IGZhbHNlLAorICAgICAgaGVpZ2h0 OiA0MDAsCisgICAgICB3aWR0aDogNjUwLAorICAgICAgc2hvd19sZWZ0X3Bh bmVsOiB0cnVlCisgICAgfSwKKyAgICB0bXBsOiBfLnRlbXBsYXRlKAorICAg ICAgICIgICAgPGRpdiBjbGFzcz0ncGdhZG1pbi13aXphcmQnIHN0eWxlPSdo ZWlnaHQ6IDwlPSB0aGlzLm9wdGlvbnMuaGVpZ2h0ICU+cHg7IHdpZHRoOiA8 JT0gdGhpcy5vcHRpb25zLndpZHRoICU+cHgnPiIKKyAgICAgICArICIgICAg ICA8ZGl2IGNsYXNzPSd3aXphcmQtaGVhZGVyIHdpemFyZC1iYWRnZSc+Igor ICAgICAgICsgIiAgICAgICAgPGRpdiBjbGFzcz0ncm93Jz4iCisgICAgICAg KyAiICAgICAgICAgIDxkaXYgY2xhc3M9J2NvbC1zbS05Jz4iCisgICAgICAg KyAiICAgICAgICAgICAgICA8aDM+PHNwYW4gaWQ9J21haW4tdGl0bGUnPjwl PSB0aGlzLm9wdGlvbnMudGl0bGUgJT48L3NwYW4+IC0gPHNwYW4gaWQ9J3N0 ZXAtdGl0bGUnPjwlPSBwYWdlX3RpdGxlICU+PC9zcGFuPjwvaDM+IgorICAg ICAgICsgIiAgICAgICAgICA8L2Rpdj4iCisgICAgICAgKyAiICAgICAgICA8 L2Rpdj4iCisgICAgICAgKyAiICAgICAgPC9kaXY+IgorICAgICAgICsgIiAg ICAgIDxkaXYgY2xhc3M9J3dpemFyZC1jb250ZW50IGNvbC1zbS0xMic+Igor ICAgICAgICsgIiAgICAgICAgPCUgaWYodGhpcy5vcHRpb25zLnNob3dfbGVm dF9wYW5lbCkgeyAlPiIKKyAgICAgICArICIgICAgICAgICAgPGRpdiBjbGFz cz0nY29sLXNtLTMgd2l6YXJkLWxlZnQtcGFuZWwnPiIKKyAgICAgICArICIg ICAgICAgICAgICAgIDxpbWcgc3JjPSc8JT0gdGhpcy5vcHRpb25zLmltYWdl ICU+Jz48L2Rpdj4iCisgICAgICAgKyAiICAgICAgICA8JSB9ICU+IgorICAg ICAgICsgIiAgICAgICAgPGRpdiBjbGFzcz0nY29sLXNtLTwlIGlmKHRoaXMu b3B0aW9ucy5zaG93X2xlZnRfcGFuZWwpeyAlPjk8JSB9IGVsc2UgeyAlPjEy PCUgfSAlPiB3aXphcmQtcmlnaHQtcGFuZWwnPiIKKyAgICAgICArICIgICAg ICAgICAgPCUgaWYoIHR5cGVvZiBzaG93X2Rlc2NyaXB0aW9uICE9ICAndW5k ZWZpbmVkJyl7ICU+IgorICAgICAgICsgIiAgICAgICAgICAgIDxkaXYgY2xh c3M9J3dpemFyZC1kZXNjcmlwdGlvbic+IgorICAgICAgICsgIiAgICAgICAg ICAgICAgPCU9IHNob3dfZGVzY3JpcHRpb24gJT4iCisgICAgICAgKyAiICAg ICAgICAgICAgPC9kaXY+IgorICAgICAgICsgIiAgICAgICAgICA8JSB9ICU+ IgorICAgICAgICsgIiAgICAgICAgICA8ZGl2IGNsYXNzPSd3aXphcmQtcmln aHQtcGFuZWxfY29udGVudCc+IgorICAgICAgICsgIiAgICAgICAgICA8L2Rp dj4iCisgICAgICAgKyAiICAgICAgICA8L2Rpdj4iCisgICAgICAgKyAiICAg ICAgPC9kaXY+IgorICAgICAgICsgIiAgICAgIDxkaXYgY2xhc3M9J2NvbC1z bS0xMiBlcnJvcl9tc2dfZGl2Jz4iCisgICAgICAgKyAiICAgICAgIDxwPjwv cD4iCisgICAgICAgKyAiICAgICAgPC9kaXY+IgorICAgICAgICsgIiAgICAg IDxkaXYgY2xhc3M9J2Zvb3RlciBjb2wtc20tMTInPiIKKyAgICAgICArICIg ICAgICAgIDxkaXYgY2xhc3M9J3Jvdyc+IgorICAgICAgICsgIiAgICAgICAg ICA8ZGl2IGNsYXNzPSdjb2wtc20tNCB3aXphcmQtcHJvZ3Jlc3MtYmFyJz4i CisgICAgICAgKyAiICAgICAgICAgICAgIDxwPjwlIGlmKHNob3dfcHJvZ3Jl c3NfYmFyKXsgJT48JT0gc2hvd19wcm9ncmVzc19iYXIgJT48JSB9ICU+PC9w PiIKKyAgICAgICArICIgICAgICAgICAgPC9kaXY+IgorICAgICAgICsgIiAg ICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtc20tOCc+IgorICAgICAgICsgIiAg ICAgICAgICAgIDxkaXYgY2xhc3M9J3dpemFyZC1idXR0b25zJz4iCisgICAg ICAgKyAiICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSdidG4gYnRuLXBy aW1hcnkgd2l6YXJkLWJhY2snIDwlPXRoaXMub3B0aW9ucy5kaXNhYmxlX3By ZXYgPyAnZGlzYWJsZWQnIDogJyclPj48aSBjbGFzcz0nZmEgZmEtYmFja3dh cmQnPjwvaT5CYWNrPC9idXR0b24+IgorICAgICAgICsgIiAgICAgICAgICAg ICAgPGJ1dHRvbiBjbGFzcz0nYnRuIGJ0bi1wcmltYXJ5IHdpemFyZC1uZXh0 JyA8JT10aGlzLm9wdGlvbnMuZGlzYWJsZV9uZXh0ID8gJ2Rpc2FibGVkJyA6 ICcnJT4+TmV4dDxpIGNsYXNzPSdmYSBmYS1mb3J3YXJkJz48L2k+PC9idXR0 b24+IgorICAgICAgICsgIiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0n YnRuIGJ0bi1kYW5nZXIgd2l6YXJkLWNhbmNlbCcgPCU9dGhpcy5vcHRpb25z LmRpc2FibGVfY2FuY2VsID8gJ2Rpc2FibGVkJyA6ICcnJT4+PGkgY2xhc3M9 J2ZhIGZhLWxnIGZhLWNsb3NlJz48L2k+Q2FuY2VsPC9idXR0b24+IgorICAg ICAgICsgIiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0nYnRuIGJ0bi1w cmltYXJ5IHdpemFyZC1maW5pc2gnIDwlPXRoaXMub3B0aW9ucy5kaXNhYmxl X2ZpbmlzaCA/ICdkaXNhYmxlZCcgOiAnJyU+PkZpbmlzaDwvYnV0dG9uPiIK KyAgICAgICArICIgICAgICAgICAgICA8L2Rpdj4iCisgICAgICAgKyAiICAg ICAgICAgIDwvZGl2PiIKKyAgICAgICArICIgICAgICAgIDwvZGl2PiIKKyAg ICAgICArICIgICAgICA8L2Rpdj4iCisgICAgICAgKyAiICAgIDwvZGl2PiIp LAorICAgIGV2ZW50czogeworICAgICAgImNsaWNrIGJ1dHRvbi53aXphcmQt bmV4dCIgOiAibmV4dFBhZ2UiLAorICAgICAgImNsaWNrIGJ1dHRvbi53aXph cmQtYmFjayIgOiAicHJldlBhZ2UiLAorICAgICAgImNsaWNrIGJ1dHRvbi53 aXphcmQtY2FuY2VsIiA6ICJvbkNhbmNlbCIsCisgICAgICAiY2xpY2sgYnV0 dG9uLndpemFyZC1maW5pc2giIDogImZpbmlzaFdpemFyZCIsCisgICAgfSwK KyAgICBpbml0aWFsaXplOiBmdW5jdGlvbihvcHRpb25zKSB7CisgICAgICB0 aGlzLm9wdGlvbnMgPSBfLmV4dGVuZCh7fSwgdGhpcy5vcHRpb25zLCBvcHRp b25zLm9wdGlvbnMpOworICAgICAgdGhpcy5jdXJyUGFnZSA9IHRoaXMuY29s bGVjdGlvbi5hdCh0aGlzLm9wdGlvbnMuY3Vycl9wYWdlKS50b0pTT04oKTsK KyAgICB9LAorICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7CisgICAgICB2YXIg ZGF0YSA9IHRoaXMuY3VyclBhZ2U7CisKKyAgICAgIC8qIENoZWNrIFN0YXR1 cyBvZiB0aGUgYnV0dG9ucyAqLworICAgICAgdGhpcy5vcHRpb25zLmRpc2Fi bGVfbmV4dCA9ICh0aGlzLm9wdGlvbnMuZGlzYWJsZV9uZXh0ID8gdHJ1ZSA6 IHRoaXMuZXZhbEFTRnVuYyh0aGlzLmN1cnJQYWdlLmRpc2FibGVfbmV4dCkp OworICAgICAgdGhpcy5vcHRpb25zLmRpc2FibGVfcHJldiA9ICh0aGlzLm9w dGlvbnMuZGlzYWJsZV9wcmV2ID8gdHJ1ZSA6IHRoaXMuZXZhbEFTRnVuYyh0 aGlzLmN1cnJQYWdlLmRpc2FibGVfcHJldikpOworICAgICAgdGhpcy5vcHRp b25zLmRpc2FibGVfY2FuY2VsID0gKHRoaXMuY3VyclBhZ2UuY2FuQ2FuY2Vs ID8gdHJ1ZSA6IHRoaXMuZXZhbEFTRnVuYyh0aGlzLmN1cnJQYWdlLmRpc2Fi bGVfY2FuY2VsKSk7CisKKyAgICAgIHRoYXQgPSB0aGlzOworCisgICAgICAv KiBIVE1MIENvbnRlbnQgKi8KKyAgICAgIGlmIChkYXRhLmh0bWwpIHsgZGF0 YS5jb250ZW50ID0gZGF0YS5odG1sOyB9CisgICAgICAvKiBCYWNrYm9uZSBW aWV3ICovCisgICAgICBlbHNlIGlmIChkYXRhLnZpZXcpIHsgZGF0YS5jb250 ZW50ID0gZGF0YS52aWV3LnJlbmRlcigpLmVsO30KKworICAgICAgJCh0aGlz LmVsKS5odG1sKHRoaXMudG1wbChkYXRhKSk7CisgICAgICAkKHRoaXMuZWwp LmZpbmQoIi53aXphcmQtcmlnaHQtcGFuZWxfY29udGVudCIpLmh0bWwoZGF0 YS5jb250ZW50KTsKKworICAgICAgLyogT25Mb2FkIENhbGxiYWNrICovCisg ICAgICB0aGlzLm9uTG9hZCgpOworCisgICAgICByZXR1cm4gdGhpczsKKyAg ICB9LAorICAgIG5leHRQYWdlOiBmdW5jdGlvbigpIHsKKyAgICAgIHRoaXMu b3B0aW9ucy5jdXJyX3BhZ2UuZWwgPSB0aGlzLiRlbDsKKyAgICAgIGlmICgh dGhpcy5iZWZvcmVOZXh0KCkpIHsgcmV0dXJuIGZhbHNlOyB9CisKKyAgICAg IHBhZ2VfaWQgPSB0aGlzLm9uTmV4dCgpOworCisgICAgICBpZiAocGFnZV9p ZCApIHsKKyAgICAgICAgdGhpcy5jdXJyUGFnZSA9IHRoaXMuY29sbGVjdGlv bi5nZXQocGFnZV9pZCkudG9KU09OKCk7CisgICAgICAgIHRoaXMub3B0aW9u cy5jdXJyX3BhZ2UgPSB0aGlzLmNvbGxlY3Rpb24uaW5kZXhPZih0aGlzLmNv bGxlY3Rpb24uZ2V0KHBhZ2VfaWQpKTsKKyAgICAgIH0KKyAgICAgIGVsc2Ug aWYgKHRoaXMub3B0aW9ucy5jdXJyX3BhZ2UgPCAodGhpcy5jb2xsZWN0aW9u Lmxlbmd0aC0xKSkgeworICAgICAgICB0aGlzLm9wdGlvbnMuY3Vycl9wYWdl ID0gdGhpcy5vcHRpb25zLmN1cnJfcGFnZSArIDE7CisgICAgICAgIHRoaXMu Y3VyclBhZ2UgPSB0aGlzLmNvbGxlY3Rpb24uYXQodGhpcy5vcHRpb25zLmN1 cnJfcGFnZSkudG9KU09OKCk7CisgICAgICB9CisKKyAgICAgIHRoaXMuZW5h YmxlRGlzYWJsZU5leHQoKTsKKyAgICAgIHRoaXMuZW5hYmxlRGlzYWJsZVBy ZXYoKTsKKworICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKCk7CisgICAgfSwK KyAgICBwcmV2UGFnZTogZnVuY3Rpb24oKSB7CisgICAgICBpZiAoIXRoaXMu YmVmb3JlUHJldigpKSB7IHJldHVybiBmYWxzZTsgfQorCisgICAgICBwYWdl X2lkID0gdGhpcy5vblByZXYoKTsKKworICAgICAgaWYgKHBhZ2VfaWQpewor ICAgICAgICB0aGlzLmN1cnJQYWdlID0gdGhpcy5jb2xsZWN0aW9uLmdldChw YWdlX2lkKS50b0pTT04oKTsKKyAgICAgICAgdGhpcy5vcHRpb25zLmN1cnJf cGFnZSA9IHRoaXMuY29sbGVjdGlvbi5pbmRleE9mKHRoaXMuY29sbGVjdGlv bi5nZXQocGFnZV9pZCkpOworICAgICAgfQorICAgICAgZWxzZSBpZiAodGhp cy5vcHRpb25zLmN1cnJfcGFnZSA+IDApIHsKKyAgICAgICAgdGhpcy5vcHRp b25zLmN1cnJfcGFnZSA9IHRoaXMub3B0aW9ucy5jdXJyX3BhZ2UgLSAxOwor ICAgICAgICB0aGlzLmN1cnJQYWdlID0gdGhpcy5jb2xsZWN0aW9uLmF0KHRo aXMub3B0aW9ucy5jdXJyX3BhZ2UpLnRvSlNPTigpOworICAgICAgfQorCisg ICAgICB0aGlzLmVuYWJsZURpc2FibGVOZXh0KCk7CisgICAgICB0aGlzLmVu YWJsZURpc2FibGVQcmV2KCk7CisKKyAgICAgIHJldHVybiB0aGlzLnJlbmRl cigpOworICAgIH0sCisgICAgZmluaXNoV2l6YXJkOiBmdW5jdGlvbigpIHsK KyAgICAgIHRoaXMub25GaW5pc2goKTsKKyAgICAgIHRoaXMucmVtb3ZlKCk7 IC8vIFJlbW92ZSB2aWV3IGZyb20gRE9NCisgICAgICB0aGlzLnVuYmluZCgp OyAvLyBVbmJpbmQgYWxsIGxvY2FsIGV2ZW50IGJpbmRpbmdzCisgICAgICBk ZWxldGUgdGhpcy4kZWw7IC8vIERlbGV0ZSB0aGUgalF1ZXJ5IHdyYXBwZWQg b2JqZWN0IHZhcmlhYmxlCisgICAgICBkZWxldGUgdGhpcy5lbDsgLy8gRGVs ZXRlIHRoZSB2YXJpYWJsZSByZWZlcmVuY2UgdG8gdGhpcyBub2RlCisgICAg ICByZXR1cm4gdHJ1ZTsKKyAgICB9LAorICAgIGVuYWJsZURpc2FibGVOZXh0 OiBmdW5jdGlvbihkaXNhYmxlKSB7CisgICAgICAgIGlmICh0eXBlb2YoZGlz YWJsZSkgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICB0aGlzLm9wdGlv bnMuZGlzYWJsZV9uZXh0ID0gZGlzYWJsZTsKKyAgICAgICAgfQorICAgICAg ICBlbHNlIGlmICh0aGlzLm9wdGlvbnMuY3Vycl9wYWdlID49ICh0aGlzLmNv bGxlY3Rpb24ubGVuZ3RoLTEpKSB7CisgICAgICAgICAgdGhpcy5vcHRpb25z LmRpc2FibGVfbmV4dCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgZWxz ZSB7CisgICAgICAgICAgdGhpcy5vcHRpb25zLmRpc2FibGVfbmV4dCA9IGZh bHNlOworICAgICAgICB9CisgICAgfSwKKyAgICBlbmFibGVEaXNhYmxlUHJl djogZnVuY3Rpb24oZGlzYWJsZSkgeworICAgICAgICBpZiAodHlwZW9mKGRp c2FibGUpICE9ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgdGhpcy5vcHRp b25zLmRpc2FibGVfcHJldiA9IGRpc2FibGU7CisgICAgICAgIH0KKyAgICAg ICAgZWxzZSBpZiAodGhpcy5vcHRpb25zLmN1cnJfcGFnZSA8PSAwKSB7Cisg ICAgICAgICAgdGhpcy5vcHRpb25zLmRpc2FibGVfcHJldiA9IHRydWU7Cisg ICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgdGhpcy5vcHRp b25zLmRpc2FibGVfcHJldiA9IGZhbHNlOworICAgICAgICB9CisgICAgfSwK KyAgICBiZWZvcmVOZXh0OiBmdW5jdGlvbigpeworICAgICAgcmV0dXJuIHRo aXMuZXZhbEFTRnVuYyh0aGlzLmN1cnJQYWdlLmJlZm9yZU5leHQpOworICAg IH0sCisgICAgYmVmb3JlUHJldjogZnVuY3Rpb24oKXsKKyAgICAgIHJldHVy biB0aGlzLmV2YWxBU0Z1bmModGhpcy5jdXJyUGFnZS5iZWZvcmVQcmV2KTsK KyAgICB9LAorICAgIG9uUHJldjogZnVuY3Rpb24oKXsKKyAgICAgIHJldHVy biB0aGlzLmV2YWxBU0Z1bmModGhpcy5jdXJyUGFnZS5vblByZXYpOworICAg IH0sCisgICAgb25OZXh0OiBmdW5jdGlvbigpeworICAgICAgcmV0dXJuIHRo aXMuZXZhbEFTRnVuYyh0aGlzLmN1cnJQYWdlLm9uTmV4dCk7CisgICAgfSwK KyAgICBvbkxvYWQ6IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIHRoaXMu ZXZhbEFTRnVuYyh0aGlzLmN1cnJQYWdlLm9uTG9hZCk7CisgICAgfSwKKyAg ICBvbkZpbmlzaDogZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gdHJ1ZTsK KyAgICB9LAorICAgIG9uQ2FuY2VsOiBmdW5jdGlvbigpIHsKKyAgICAgIHRo aXMuJGVsLnJlbW92ZSgpOworICAgICAgcmV0dXJuIHRydWU7CisgICAgfSwK KyAgICBldmFsQVNGdW5jOiBmdW5jdGlvbihmdW5jLCBjdHgpIHsKKyAgICAg IHZhciBzZWxmID0gdGhpczsKKyAgICAgIGN0eCA9IGN0eCB8fCBzZWxmLmN1 cnJQYWdlOworCisgICAgICByZXR1cm4gKF8uaXNGdW5jdGlvbihmdW5jKSA/ IGZ1bmMuYXBwbHkoY3R4LCBbc2VsZl0pIDogZnVuYyk7CisgICAgfQorICB9 KTsKKworICByZXR1cm4gcGdCcm93c2VyOworCit9KTsKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC9fX2luaXRfXy5weSBi L3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC9fX2luaXRfXy5weQpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzE4MThlCi0t LSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZ3JhbnRfd2l6 YXJkL19faW5pdF9fLnB5CkBAIC0wLDAgKzEsMzg2IEBACisjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBwZ0FkbWluIDQgLSBQb3N0Z3Jl U1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAoQykgMjAxMyAtIDIwMTYsIFRo ZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0KKyMgVGhpcyBzb2Z0d2FyZSBp cyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisjCisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisiIiJJbXBsZW1lbnRz IEdyYW50IFdpemFyZCIiIgorCitpbXBvcnQganNvbgorZnJvbSBmbGFzayBp bXBvcnQgcmVuZGVyX3RlbXBsYXRlLCByZXF1ZXN0LCBjdXJyZW50X2FwcAor ZnJvbSBmbGFzay5leHQuYmFiZWwgaW1wb3J0IGdldHRleHQKK2Zyb20gcGdh ZG1pbi51dGlscy5hamF4IGltcG9ydCBtYWtlX3Jlc3BvbnNlIGFzIGFqYXhf cmVzcG9uc2UsIFwKKyAgICBtYWtlX2pzb25fcmVzcG9uc2UsIGludGVybmFs X3NlcnZlcl9lcnJvcgorZnJvbSBwZ2FkbWluLnV0aWxzLmRyaXZlciBpbXBv cnQgZ2V0X2RyaXZlcgorZnJvbSBjb25maWcgaW1wb3J0IFBHX0RFRkFVTFRf RFJJVkVSCisjIGZyb20gcGdhZG1pbi5icm93c2VyLnNlcnZlcl9ncm91cHMu c2VydmVycy51dGlscyBpbXBvcnQgcGFyc2VfcHJpdl90b19kYgorZnJvbSBw Z2FkbWluLnV0aWxzIGltcG9ydCBQZ0FkbWluTW9kdWxlCitmcm9tIGZsYXNr IGltcG9ydCBSZXNwb25zZSwgdXJsX2ZvcgorZnJvbSBmbGFzay5leHQuc2Vj dXJpdHkgaW1wb3J0IGxvZ2luX3JlcXVpcmVkCitmcm9tIHVybGxpYiBpbXBv cnQgdW5xdW90ZQorCisjIHNldCB0ZW1wbGF0ZSBwYXRoIGZvciBzcWwgc2Ny aXB0cwordGVtcGxhdGVfcGF0aCA9ICdncmFudF93aXphcmQvc3FsJworTU9E VUxFX05BTUUgPSAnZ3JhbnRfd2l6YXJkJworCisKK2NsYXNzIEdyYW50V2l6 YXJkTW9kdWxlKFBnQWRtaW5Nb2R1bGUpOgorICAgICIiIgorICAgIGNsYXNz IEdyYW50V2l6YXJkTW9kdWxlKE9iamVjdCk6CisKKyAgICAgICAgSXQgaXMg YSB3aXphcmQgd2hpY2ggaW5oZXJpdHMgUGdBZG1pbk1vZHVsZQorICAgICAg ICBjbGFzcyBhbmQgZGVmaW5lIG1ldGhvZHMgdG8gbG9hZCBpdHMgb3duCisg ICAgICAgIGphdmFzY3JpcHQgZmlsZS4KKyAgICAiIiIKKyAgICBkZWYgZ2V0 X293bl9zdHlsZXNoZWV0cyhzZWxmKToKKyAgICAgICAgIiIiCisgICAgICAg IFJldHVybnM6CisgICAgICAgICAgICBsaXN0OiB0aGUgc3R5bGVzaGVldHMg dXNlZCBieSB0aGlzIG1vZHVsZS4KKyAgICAgICAgIiIiCisgICAgICAgIHN0 eWxlc2hlZXRzID0gWworICAgICAgICAgICAgdXJsX2ZvcignYnJvd3Nlci5z dGF0aWMnLCBmaWxlbmFtZT0nY3NzL3dpemFyZC5jc3MnKSwKKyAgICAgICAg ICAgIHVybF9mb3IoJ2dyYW50X3dpemFyZC5zdGF0aWMnLCBmaWxlbmFtZT0n Y3NzL2dyYW50X3dpemFyZC5jc3MnKQorICAgICAgICAgICAgXQorICAgICAg ICByZXR1cm4gc3R5bGVzaGVldHMKKworICAgIGRlZiBnZXRfb3duX2phdmFz Y3JpcHRzKHNlbGYpOgorICAgICAgICAiIiIiCisgICAgICAgIFJldHVybnM6 CisgICAgICAgICAgICBsaXN0OiBqcyBmaWxlcyB1c2VkIGJ5IHRoaXMgbW9k dWxlCisgICAgICAgICIiIgorICAgICAgICBzY3JpcHRzID0gW10KKyAgICAg ICAgc2NyaXB0cy5hcHBlbmQoeworICAgICAgICAgICAgJ25hbWUnOiAncGdh ZG1pbi50b29scy5ncmFudF93aXphcmQnLAorICAgICAgICAgICAgJ3BhdGgn OiB1cmxfZm9yKCdncmFudF93aXphcmQuaW5kZXgnKSArICdncmFudF93aXph cmQnLAorICAgICAgICAgICAgJ3doZW4nOiBOb25lCisgICAgICAgIH0pCisg ICAgICAgIHNjcmlwdHMuYXBwZW5kKHsKKyAgICAgICAgICAgICduYW1lJzog J3BnYWRtaW4uYnJvd3Nlci53aXphcmQnLAorICAgICAgICAgICAgJ3BhdGgn OiB1cmxfZm9yKCdicm93c2VyLnN0YXRpYycsIGZpbGVuYW1lPSdqcy93aXph cmQnKSwKKyAgICAgICAgICAgICd3aGVuJzogTm9uZQorICAgICAgICB9KQor ICAgICAgICByZXR1cm4gc2NyaXB0cworCisjIENyZWF0ZSBibHVlcHJpbnQg Zm9yIEdyYW50V2l6YXJkTW9kdWxlIGNsYXNzCitibHVlcHJpbnQgPSBHcmFu dFdpemFyZE1vZHVsZSgKKyAgICBNT0RVTEVfTkFNRSwgX19uYW1lX18sIHN0 YXRpY191cmxfcGF0aD0nJykKKworCitAYmx1ZXByaW50LnJvdXRlKCIvIikK K0Bsb2dpbl9yZXF1aXJlZAorZGVmIGluZGV4KCk6CisgICAgcGFzcworCisK K0BibHVlcHJpbnQucm91dGUoIi9ncmFudF93aXphcmQuanMiKQorQGxvZ2lu X3JlcXVpcmVkCitkZWYgc2NyaXB0KCk6CisgICAgIiIicmVuZGVyIG93biBq YXZhc2NyaXB0IiIiCisgICAgcmV0dXJuIFJlc3BvbnNlKHJlc3BvbnNlPXJl bmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAiZ3JhbnRfd2l6YXJk L2pzL2dyYW50X3dpemFyZC5qcyIsIF89Z2V0dGV4dCksCisgICAgICAgICAg ICAgICAgc3RhdHVzPTIwMCwKKyAgICAgICAgICAgICAgICBtaW1ldHlwZT0i YXBwbGljYXRpb24vamF2YXNjcmlwdCIpCisKKworQGJsdWVwcmludC5yb3V0 ZSgiL2FsbG93ZWRfYWNsLmpzb24iKQorQGxvZ2luX3JlcXVpcmVkCitkZWYg YWNsX2xpc3QoKToKKyAgICAiIiJyZW5kZXIgbGlzdCBvZiBhY2xzIiIiCisg ICAgcmV0dXJuIFJlc3BvbnNlKHJlc3BvbnNlPXJlbmRlcl90ZW1wbGF0ZSgK KyAgICAgICAgICAgICAgICAiZ3JhbnRfd2l6YXJkL3NxbC9hbGxvd2VkX2Fj bC5qc29uIiwgXz1nZXR0ZXh0KSwKKyAgICAgICAgICAgICAgICBzdGF0dXM9 MjAwLAorICAgICAgICAgICAgICAgIG1pbWV0eXBlPSJhcHBsaWNhdGlvbi9q YXZhc2NyaXB0IikKKworCitAYmx1ZXByaW50LnJvdXRlKAorICAgICcvcHJv cGVydGllcy88aW50OmdpZD4vPGludDpzaWQ+LzxpbnQ6ZGlkPicKKyAgICAn LzxpbnQ6bm9kZV9pZD4vPG5vZGVfbmFtZT4vPG5vZGVfdHlwZT4vPG5zcG5h bWU+LycsCisgICAgbWV0aG9kcz0oJ0dFVCcsICdQT1NUJykpCitAbG9naW5f cmVxdWlyZWQKK2RlZiBwcm9wZXJ0aWVzKGdpZCwgc2lkLCBkaWQsIG5vZGVf aWQsIG5vZGVfbmFtZSwgbm9kZV90eXBlLCBuc3BuYW1lKToKKyAgICAiIiJJ dCBmZXRjaGVzIHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCB0eXBlcworICAg ICAgIGFuZCByZW5kZXIgaW50byBzZWxlY3Rpb24gcGFnZSBvZiB3aXphcmQK KyAgICAiIiIKKworICAgICMgdW5xdW90ZSBlbmNvZGVkIHVybCBwYXJhbWV0 ZXIKKyAgICBub2RlX3R5cGUgPSB1bnF1b3RlKG5vZGVfdHlwZSkKKyAgICBu c3BuYW1lID0gdW5xdW90ZShuc3BuYW1lKQorCisgICAgcmVzX2RhdGEgPSBb XQorICAgIG1hbmFnZXIgPSBnZXRfZHJpdmVyKFBHX0RFRkFVTFRfRFJJVkVS KS5jb25uZWN0aW9uX21hbmFnZXIoc2lkKQorICAgIGNvbm4gPSBtYW5hZ2Vy LmNvbm5lY3Rpb24oZGlkPWRpZCkKKworICAgICMgRmV0Y2ggZnVuY3Rpb25z IGFnYWluc3Qgc2NoZW1hCisgICAgaWYgbm9kZV90eXBlIGluIFsnc2NoZW1h J106CisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigK KyAgICAgICAgICAgIFt0ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwn XSksCisgICAgICAgICAgICBub2RlX2lkPW5vZGVfaWQsIG5vZGVfbmFtZT1u b2RlX25hbWUsCisgICAgICAgICAgICB0eXBlPW5vZGVfdHlwZSwgbnNwbmFt ZT1uc3BuYW1lKQorCisgICAgICAgIHN0YXR1cywgcmVzID0gY29ubi5leGVj dXRlX2RpY3QoU1FMKQorCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAg ICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXJlcykKKworICAgICAgICByZXNfZGF0YS5leHRlbmQocmVzWydyb3dzJ10p CisKKyAgICAjIEZldGNoIHRyaWdnZXIgZnVuY3Rpb25zCisgICAgaWYgbm9k ZV90eXBlIGluIFsnc2NoZW1hJywgJ3RyaWdnZXJfZnVuY3Rpb24nXToKKyAg ICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAg ICAgICAgW3RlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAg ICAgICAgICAgIG5vZGVfaWQ9bm9kZV9pZCwgbm9kZV9uYW1lPW5vZGVfbmFt ZSwKKyAgICAgICAgICAgIHR5cGU9J3RyaWdnZXJfZnVuY3Rpb24nLCBuc3Bu YW1lPW5zcG5hbWUpCisgICAgICAgIHN0YXR1cywgcmVzID0gY29ubi5leGVj dXRlX2RpY3QoU1FMKQorCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAg ICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNn PXJlcykKKworICAgICAgICByZXNfZGF0YS5leHRlbmQocmVzWydyb3dzJ10p CisKKyAgICAjIEZldGNoIFNlcXVlbmNlcyBhZ2FpbnN0IHNjaGVtYQorICAg IGlmIG5vZGVfdHlwZSBpbiBbJ3NjaGVtYScsICdzZXF1ZW5jZSddOgorICAg ICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCisgICAgICAg ICAgICBbdGVtcGxhdGVfcGF0aCwgJ3Byb3BlcnRpZXMuc3FsJ10pLAorICAg ICAgICAgICAgbm9kZV9pZD1ub2RlX2lkLCBub2RlX25hbWU9bm9kZV9uYW1l LAorICAgICAgICAgICAgdHlwZT0nc2VxdWVuY2UnLCBuc3BuYW1lPW5zcG5h bWUpCisKKyAgICAgICAgc3RhdHVzLCByZXMgPSBjb25uLmV4ZWN1dGVfZGlj dChTUUwpCisgICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICBy ZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJlcykKKyAg ICAgICAgcmVzX2RhdGEuZXh0ZW5kKHJlc1sncm93cyddKQorCisgICAgIyBG ZXRjaCBUYWJsZXMgYWdhaW5zdCBzY2hlbWEKKyAgICBpZiBub2RlX3R5cGUg aW4gWydzY2hlbWEnLCAndGFibGUnXToKKyAgICAgICAgU1FMID0gcmVuZGVy X3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgW3RlbXBsYXRlX3Bh dGgsICdwcm9wZXJ0aWVzLnNxbCddKSwKKyAgICAgICAgICAgIG5vZGVfaWQ9 bm9kZV9pZCwgbm9kZV9uYW1lPW5vZGVfbmFtZSwKKyAgICAgICAgICAgIHR5 cGU9J3RhYmxlJywgbnNwbmFtZT1uc3BuYW1lKQorCisgICAgICAgIHN0YXR1 cywgcmVzID0gY29ubi5leGVjdXRlX2RpY3QoU1FMKQorICAgICAgICBpZiBu b3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgcmVzX2RhdGEuZXh0 ZW5kKHJlc1sncm93cyddKQorCisgICAgIyBGZXRjaCBWaWV3cyBhZ2FpbnN0 IHNjaGVtYQorICAgIGlmIG5vZGVfdHlwZSBpbiBbJ3NjaGVtYScsICd2aWV3 J106CisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigK KyAgICAgICAgICAgIFt0ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwn XSksCisgICAgICAgICAgICBub2RlX2lkPW5vZGVfaWQsIG5vZGVfbmFtZT1u b2RlX25hbWUsCisgICAgICAgICAgICB0eXBlPSd2aWV3JywgbnNwbmFtZT1u c3BuYW1lKQorCisgICAgICAgIHN0YXR1cywgcmVzID0gY29ubi5leGVjdXRl X2RpY3QoU1FMKQorICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAg ICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMp CisKKyAgICAgICAgcmVzX2RhdGEuZXh0ZW5kKHJlc1sncm93cyddKQorCisg ICAgcmV0dXJuIGFqYXhfcmVzcG9uc2UoCisgICAgICAgICAgICByZXNwb25z ZT1yZXNfZGF0YSwKKyAgICAgICAgICAgIHN0YXR1cz0yMDAKKyAgICAgICAg ICAgICkKKworCitkZWYgcGFyc2VfcHJpdl90b19kYihzdHJfcHJpdmlsZWdl cywgYWNscyk6CisgICAgIiIiCisgICAgQ29tbW9uIHV0aWxpdHkgZnVuY3Rp b24gdG8gcGFyc2UgcHJpdmlsZWdlcyBiZWZvcmUgc2VuZGluZyB0byBkYXRh YmFzZS4KKyAgICAiIiIKKyAgICBkYl9wcml2aWxlZ2VzID0geworICAgICAg ICAnYyc6ICdDT05ORUNUJywKKyAgICAgICAgJ0MnOiAnQ1JFQVRFJywKKyAg ICAgICAgJ1QnOiAnVEVNUE9SQVJZJywKKyAgICAgICAgJ2EnOiAnSU5TRVJU JywKKyAgICAgICAgJ3InOiAnU0VMRUNUJywKKyAgICAgICAgJ3cnOiAnVVBE QVRFJywKKyAgICAgICAgJ2QnOiAnREVMRVRFJywKKyAgICAgICAgJ0QnOiAn VFJVTkNBVEUnLAorICAgICAgICAneCc6ICdSRUZFUkVOQ0VTJywKKyAgICAg ICAgJ3QnOiAnVFJJR0dFUicsCisgICAgICAgICdVJzogJ1VTQUdFJywKKyAg ICAgICAgJ1gnOiAnRVhFQ1VURScKKyAgICAgICAgfQorCisgICAgcHJpdmls ZWdlcyA9IFtdCisKKyAgICBmb3IgcHJpdiBpbiBzdHJfcHJpdmlsZWdlczoK KyAgICAgICAgcHJpdl93aXRoX2dyYW50ID0ge30KKyAgICAgICAgcHJpdl93 aXRob3V0X2dyYW50ID0ge30KKyAgICAgICAgcHJpdl9mdW5jdGlvbl93aXRo X2dyYW50ID0gW10KKyAgICAgICAgcHJpdl9mdW5jdGlvbl93aXRob3V0X2dy YW50ID0gW10KKyAgICAgICAgcHJpdl9zZXF1ZW5jZV93aXRoX2dyYW50ID0g W10KKyAgICAgICAgcHJpdl9zZXF1ZW5jZV93aXRob3V0X2dyYW50ID0gW10K KyAgICAgICAgcHJpdl90YWJsZV93aXRoX2dyYW50ID0gW10KKyAgICAgICAg cHJpdl90YWJsZV93aXRob3V0X2dyYW50ID0gW10KKworICAgICAgICAjIGlt cG9ydCBwZGIKKyAgICAgICAgIyBwZGIuc2V0X3RyYWNlKCkKKyAgICAgICAg Zm9yIHByaXZpbGVnZSBpbiBwcml2Wydwcml2aWxlZ2VzJ106CisKKyAgICAg ICAgICAgIGlmIHByaXZpbGVnZVsncHJpdmlsZWdlX3R5cGUnXSBub3QgaW4g ZGJfcHJpdmlsZWdlczoKKyAgICAgICAgICAgICAgICBjb250aW51ZQorCisg ICAgICAgICAgICAjIEV4dHJhY3QgcHJpdmlsZWdlcyBhcHBsaWNhYmxlIHRv IGZ1bmN0aW9uCisgICAgICAgICAgICBpZiBwcml2aWxlZ2VbJ3ByaXZpbGVn ZV90eXBlJ10gaW4gYWNsc1snZnVuY3Rpb24nXVsnYWNsJ106CisgICAgICAg ICAgICAgICAgaWYgcHJpdmlsZWdlWyd3aXRoX2dyYW50J106CisgICAgICAg ICAgICAgICAgICAgIHByaXZfZnVuY3Rpb25fd2l0aF9ncmFudC5hcHBlbmQo CisgICAgICAgICAgICAgICAgICAgICAgICBkYl9wcml2aWxlZ2VzW3ByaXZp bGVnZVsncHJpdmlsZWdlX3R5cGUnXV0pCisgICAgICAgICAgICAgICAgZWxp ZiBwcml2aWxlZ2VbJ3ByaXZpbGVnZSddOgorICAgICAgICAgICAgICAgICAg ICBwcml2X2Z1bmN0aW9uX3dpdGhvdXRfZ3JhbnQuYXBwZW5kKAorICAgICAg ICAgICAgICAgICAgICAgICAgZGJfcHJpdmlsZWdlc1twcml2aWxlZ2VbJ3By aXZpbGVnZV90eXBlJ11dKQorCisgICAgICAgICAgICAjIEV4dHJhY3QgcHJp dmlsZWdlcyBhcHBsaWNhYmxlIHRvIHNlcXVlbmNlCisgICAgICAgICAgICBp ZiBwcml2aWxlZ2VbJ3ByaXZpbGVnZV90eXBlJ10gaW4gYWNsc1snc2VxdWVu Y2UnXVsnYWNsJ106CisgICAgICAgICAgICAgICAgaWYgcHJpdmlsZWdlWyd3 aXRoX2dyYW50J106CisgICAgICAgICAgICAgICAgICAgIHByaXZfc2VxdWVu Y2Vfd2l0aF9ncmFudC5hcHBlbmQoCisgICAgICAgICAgICAgICAgICAgICAg ICBkYl9wcml2aWxlZ2VzW3ByaXZpbGVnZVsncHJpdmlsZWdlX3R5cGUnXV0p CisgICAgICAgICAgICAgICAgZWxpZiBwcml2aWxlZ2VbJ3ByaXZpbGVnZSdd OgorICAgICAgICAgICAgICAgICAgICBwcml2X3NlcXVlbmNlX3dpdGhvdXRf Z3JhbnQuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICAgICAgZGJfcHJp dmlsZWdlc1twcml2aWxlZ2VbJ3ByaXZpbGVnZV90eXBlJ11dKQorCisgICAg ICAgICAgICAjIEV4dHJhY3QgcHJpdmlsZWdlcyBhcHBsaWNhYmxlIHRvIHZp ZXcvdGFibGUKKyAgICAgICAgICAgIGlmIChwcml2aWxlZ2VbJ3ByaXZpbGVn ZV90eXBlJ10gaW4gYWNsc1sndGFibGUnXVsnYWNsJ10pOgorICAgICAgICAg ICAgICAgIGlmIHByaXZpbGVnZVsnd2l0aF9ncmFudCddOgorICAgICAgICAg ICAgICAgICAgICBwcml2X3RhYmxlX3dpdGhfZ3JhbnQuYXBwZW5kKAorICAg ICAgICAgICAgICAgICAgICAgICAgZGJfcHJpdmlsZWdlc1twcml2aWxlZ2Vb J3ByaXZpbGVnZV90eXBlJ11dKQorICAgICAgICAgICAgICAgIGVsaWYgcHJp dmlsZWdlWydwcml2aWxlZ2UnXToKKyAgICAgICAgICAgICAgICAgICAgcHJp dl90YWJsZV93aXRob3V0X2dyYW50LmFwcGVuZCgKKyAgICAgICAgICAgICAg ICAgICAgICAgIGRiX3ByaXZpbGVnZXNbcHJpdmlsZWdlWydwcml2aWxlZ2Vf dHlwZSddXSkKKworICAgICAgICAjIElmIHdlIGhhdmUgYWxsIGFjbCB0aGVu IGp1c3QgcmV0dXJuIGFsbAorICAgICAgICBpZiBsZW4ocHJpdl90YWJsZV93 aXRoX2dyYW50KSA9PSBsZW4oYWNsc1sndGFibGUnXVsnYWNsJ10pOgorICAg ICAgICAgICAgcHJpdl90YWJsZV93aXRoX2dyYW50ID0gWydBTEwnXQorCisg ICAgICAgIGlmIGxlbihwcml2X3RhYmxlX3dpdGhvdXRfZ3JhbnQpID09IGxl bihhY2xzWyd0YWJsZSddWydhY2wnXSk6CisgICAgICAgICAgICBwcml2X3Rh YmxlX3dpdGhvdXRfZ3JhbnQgPSBbJ0FMTCddCisKKyAgICAgICAgIyBBcHBl bmRpbmcgYW5kIHJldHVybmluZyBhbGwgQUNMCisgICAgICAgIHByaXZfd2l0 aF9ncmFudFsnZnVuY3Rpb24nXSA9IHByaXZfZnVuY3Rpb25fd2l0aF9ncmFu dAorICAgICAgICBwcml2X3dpdGhvdXRfZ3JhbnRbJ2Z1bmN0aW9uJ10gPSBw cml2X2Z1bmN0aW9uX3dpdGhvdXRfZ3JhbnQKKworICAgICAgICBwcml2X3dp dGhfZ3JhbnRbJ3NlcXVlbmNlJ10gPSBwcml2X3NlcXVlbmNlX3dpdGhfZ3Jh bnQKKyAgICAgICAgcHJpdl93aXRob3V0X2dyYW50WydzZXF1ZW5jZSddID0g cHJpdl9zZXF1ZW5jZV93aXRob3V0X2dyYW50CisKKyAgICAgICAgcHJpdl93 aXRoX2dyYW50Wyd0YWJsZSddID0gcHJpdl90YWJsZV93aXRoX2dyYW50Cisg ICAgICAgIHByaXZfd2l0aG91dF9ncmFudFsndGFibGUnXSA9IHByaXZfdGFi bGVfd2l0aG91dF9ncmFudAorCisgICAgICAgIHByaXZpbGVnZXMuYXBwZW5k KHsKKyAgICAgICAgICAgICdncmFudGVlJzogcHJpdlsnZ3JhbnRlZSddLAor ICAgICAgICAgICAgJ3dpdGhfZ3JhbnQnOiBwcml2X3dpdGhfZ3JhbnQsCisg ICAgICAgICAgICAnd2l0aG91dF9ncmFudCc6IHByaXZfd2l0aG91dF9ncmFu dAorICAgICAgICAgICAgfSkKKworICAgIHJldHVybiBwcml2aWxlZ2VzCisK KworQGJsdWVwcmludC5yb3V0ZSgKKyAgICAnL21zcWwvPGludDpnaWQ+Lzxp bnQ6c2lkPi88aW50OmRpZD4vPG5vZGVfdHlwZT4vPG5zcG5hbWU+LycsCisg ICAgbWV0aG9kcz0oJ0dFVCcsICdQT1NUJykpCitkZWYgbXNxbChnaWQsIHNp ZCwgZGlkLCBub2RlX3R5cGUsIG5zcG5hbWUpOgorICAgICIiIgorICAgIFRo aXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gbW9kaWZpZWQgU1FMCisgICAgIiIi CisKKyAgICAjIHVucXVvdGUgZW5jb2RlZCB1cmwgcGFyYW1ldGVyCisgICAg bm9kZV90eXBlID0gdW5xdW90ZShub2RlX3R5cGUpCisgICAgbnNwbmFtZSA9 IHVucXVvdGUobnNwbmFtZSkKKworICAgIGRhdGEgPSB7fQorICAgIGZvciBr LCB2IGluIHJlcXVlc3QuYXJncy5pdGVtcygpOgorICAgICAgICB0cnk6Cisg ICAgICAgICAgICBkYXRhW2tdID0ganNvbi5sb2Fkcyh2KQorICAgICAgICBl eGNlcHQgVmFsdWVFcnJvcjoKKyAgICAgICAgICAgIGRhdGFba10gPSB2CisK KyAgICAjIEZvcm0gZGIgY29ubmVjdGlvbgorICAgIG1hbmFnZXIgPSBnZXRf ZHJpdmVyKFBHX0RFRkFVTFRfRFJJVkVSKS5jb25uZWN0aW9uX21hbmFnZXIo c2lkKQorICAgIGNvbm4gPSBtYW5hZ2VyLmNvbm5lY3Rpb24oZGlkPWRpZCkK KworICAgIGFjbHMgPSBbXQorICAgIHRyeToKKyAgICAgICAgYWNscyA9IHJl bmRlcl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICIvIi5qb2luKFt0ZW1wbGF0 ZV9wYXRoLCAnYWxsb3dlZF9hY2wuanNvbiddKQorICAgICAgICAgICAgKQor ICAgICAgICBhY2xzID0ganNvbi5sb2FkcyhhY2xzKQorICAgIGV4Y2VwdCBF eGNlcHRpb24gYXMgZToKKyAgICAgICAgY3VycmVudF9hcHAubG9nZ2VyLmV4 Y2VwdGlvbihlKQorCisgICAgdHJ5OgorCisgICAgICAgICMgUGFyc2UgcHJp dmlsZWdlcworICAgICAgICBpZiAnYWNsJyBpbiBkYXRhOgorICAgICAgICAg ICAgZGF0YVsnYWNsJ10gPSBwYXJzZV9wcml2X3RvX2RiKGRhdGFbJ2FjbCdd LCBhY2xzKQorCisgICAgICAgICMgUGFzcyBkYXRhYmFzZSBvYmplY3RzIGFu ZCBnZXQgU1FMIGZvciBwcml2aWxlZ2VzCisgICAgICAgIFNRTCA9IHJlbmRl cl90ZW1wbGF0ZSgiLyIuam9pbigKKyAgICAgICAgICAgIFt0ZW1wbGF0ZV9w YXRoLCAnZ3JhbnQuc3FsJ10pLAorICAgICAgICAgICAgZGF0YT1kYXRhLCBu c3BuYW1lPW5zcG5hbWUsIGNvbm49Y29ubikKKworICAgICAgICByZXMgPSB7 J2RhdGEnOiBTUUx9CisKKyAgICAgICAgcmV0dXJuIGFqYXhfcmVzcG9uc2Uo CisgICAgICAgICAgICByZXNwb25zZT1yZXMsCisgICAgICAgICAgICBzdGF0 dXM9MjAwCisgICAgICAgICAgICApCisKKyAgICBleGNlcHQgRXhjZXB0aW9u IGFzIGU6CisgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisg ICAgICAgICAgICBzdGF0dXM9NDEwLAorICAgICAgICAgICAgc3VjY2Vzcz0w LAorICAgICAgICAgICAgZXJyb3Jtc2c9ZS5tZXNzYWdlCisgICAgICAgICkK KworCitAYmx1ZXByaW50LnJvdXRlKAorICAgICcvc2F2ZS88aW50OmdpZD4v PGludDpzaWQ+LzxpbnQ6ZGlkPi8nCisgICAgJzxub2RlX3R5cGU+Lzxuc3Bu YW1lPi8nLAorICAgIG1ldGhvZHM9KCdHRVQnLCAnUE9TVCcpKQorZGVmIHNh dmUoZ2lkLCBzaWQsIGRpZCwgbm9kZV90eXBlLCBuc3BuYW1lKToKKyAgICAi IiIKKyAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgYXBwbHkgdGhlIHByaXZpbGVn ZXMgdG8gdGhlIHNlbGVjdGVkCisgICAgRGF0YWJhc2UgT2JqZWN0cworICAg ICIiIgorCisgICAgIyB1bnF1b3RlIGVuY29kZWQgdXJsIHBhcmFtZXRlcgor ICAgIG5vZGVfdHlwZSA9IHVucXVvdGUobm9kZV90eXBlKQorICAgIG5zcG5h bWUgPSB1bnF1b3RlKG5zcG5hbWUpCisKKyAgICBkYXRhID0gcmVxdWVzdC5m b3JtIGlmIHJlcXVlc3QuZm9ybSBlbHNlIGpzb24ubG9hZHMocmVxdWVzdC5k YXRhLmRlY29kZSgpKQorCisgICAgIyBGb3JtIGRiIGNvbm5lY3Rpb24gYW5k IHdlIHVzZSBjb25uIHRvIGV4ZWN1dGUgc3FsCisgICAgbWFuYWdlciA9IGdl dF9kcml2ZXIoUEdfREVGQVVMVF9EUklWRVIpLmNvbm5lY3Rpb25fbWFuYWdl cihzaWQpCisgICAgY29ubiA9IG1hbmFnZXIuY29ubmVjdGlvbihkaWQ9ZGlk KQorCisgICAgYWNscyA9IFtdCisgICAgdHJ5OgorICAgICAgICBhY2xzID0g cmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgIi8iLmpvaW4oW3RlbXBs YXRlX3BhdGgsICdhbGxvd2VkX2FjbC5qc29uJ10pCisgICAgICAgICAgICAp CisgICAgICAgIGFjbHMgPSBqc29uLmxvYWRzKGFjbHMpCisgICAgZXhjZXB0 IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICBjdXJyZW50X2FwcC5sb2dnZXIu ZXhjZXB0aW9uKGUpCisKKyAgICB0cnk6CisKKyAgICAgICAgIyBQYXJzZSBw cml2aWxlZ2VzCisgICAgICAgIGlmICdhY2wnIGluIGRhdGE6CisgICAgICAg ICAgICBkYXRhWydhY2wnXSA9IHBhcnNlX3ByaXZfdG9fZGIoZGF0YVsnYWNs J10sIGFjbHMpCisKKyAgICAgICAgIyBQYXNzIGRhdGFiYXNlIG9iamVjdHMg YW5kIGdldCBTUUwgZm9yIHByaXZpbGVnZXMKKyAgICAgICAgU1FMID0gcmVu ZGVyX3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAgW3RlbXBsYXRl X3BhdGgsICdncmFudC5zcWwnXSksCisgICAgICAgICAgICBkYXRhPWRhdGEs IG5zcG5hbWU9bnNwbmFtZSwgY29ubj1jb25uKQorCisgICAgICAgIHN0YXR1 cywgcmVzID0gY29ubi5leGVjdXRlX2RpY3QoU1FMKQorICAgICAgICBpZiBu b3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgcmV0dXJuIG1ha2Vf anNvbl9yZXNwb25zZSgKKyAgICAgICAgICAgIHN1Y2Nlc3M9MSwKKyAgICAg ICAgICAgIGluZm89IlByaXZpbGVnZXMgQXBwbGllZCIKKyAgICAgICAgKQor CisgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgorICAgICAgICByZXR1cm4g aW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPWUubWVzc2FnZSkKZGlm ZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC9zdGF0 aWMvY3NzL2dyYW50X3dpemFyZC5jc3MgYi93ZWIvcGdhZG1pbi90b29scy9n cmFudF93aXphcmQvc3RhdGljL2Nzcy9ncmFudF93aXphcmQuY3NzCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YzkyMDMKLS0tIC9k ZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9ncmFudF93aXphcmQv c3RhdGljL2Nzcy9ncmFudF93aXphcmQuY3NzCkBAIC0wLDAgKzEsODYgQEAK Ky8qKiBHcmFudCBXaXphcmQgQ1NTICoqLworCisvKioKKyAgQ1NTIHRvIG1h a2UgZGIgb2JqZWN0IHR5cGUgdGFibGUKKyAgZml4ZWQgc28gdGhhdCB0Ym9k eSBjb250ZW50IG1heQorICBzY3JvbGwKKyAqLworLm9iamVjdF90eXBlX3Rh YmxlIHRoZWFkIHRyIHsKKyAgcG9zaXRpb246IHJlbGF0aXZlOworICBkaXNw bGF5OiBibG9jazsKK30KKworLm9iamVjdF90eXBlX3RhYmxlIHsKKwlkaXNw bGF5OiBpbmxpbmUtYmxvY2s7CisgIGhlaWdodDogMTAwJTsKKyAgYm9yZGVy OiAwICFpbXBvcnRhbnQ7Cit9CisKKy5vYmplY3RfdHlwZV90YWJsZSB0Ym9k eSB7CisgIGRpc3BsYXk6IGJsb2NrOworICBvdmVyZmxvdzogc2Nyb2xsOwor ICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOworICB3aWR0aDogMTAwJTsKKyAg bWluLWhlaWdodDogMTAwJTsKKyAgbWF4LWhlaWdodDogNjYlOworICBoZWln aHQ6IDY2JTsKK30KKworLm9iamVjdF90eXBlX3RhYmxlIHRib2R5IHRyIHRk IHsKKwliYWNrZ3JvdW5kLXBvc2l0aW9uOiA0cHggNHB4OworCWJvcmRlci1y YWRpdXM6IDA7Cit9CisKKy5vYmplY3RfdHlwZV90YWJsZSB0Ym9keSB0ciB0 ZDpudGgtY2hpbGQoMSksCisub2JqZWN0X3R5cGVfdGFibGUgdGhlYWQgdHIg dGg6bnRoLWNoaWxkKDEpIHsKKyAgd2lkdGg6IDI4cHg7CisgIG1pbi13aWR0 aDogMjhweDsKK30KKworLm9iamVjdF90eXBlX3RhYmxlIHRib2R5IHRyIHRk Om50aC1jaGlsZCgyKSwKKy5vYmplY3RfdHlwZV90YWJsZSB0aGVhZCB0ciB0 aDpudGgtY2hpbGQoMikgeworICB3aWR0aDogMTg1cHg7CisgIG1pbi13aWR0 aDogMTg1cHg7Cit9CisKKy5vYmplY3RfdHlwZV90YWJsZSB0Ym9keSB0ciB0 ZDpudGgtY2hpbGQoMyksCisub2JqZWN0X3R5cGVfdGFibGUgdGhlYWQgdHIg dGg6bnRoLWNoaWxkKDMpIHsKKyAgd2lkdGg6IDExMHB4OworICBtaW4td2lk dGg6IDExMHB4OworfQorCisub2JqZWN0X3R5cGVfdGFibGUgdGhlYWQgdHIg dGg6bnRoLWNoaWxkKDQpIHsKKwl3aWR0aDogMjQ0cHg7Cit9CisKKy5vYmpl Y3RfdHlwZV90YWJsZSB0Ym9keSB0ciB0ZDpudGgtY2hpbGQoNCkgeworICB3 aWR0aDogMjQ0cHg7CisgIG1pbi13aWR0aDogMjI4cHg7CisgIG1heC13aWR0 aDogMTAwJTsKK30KKworLyoqIE92ZXJyaWRlIEJhY2tncmlkIGZpbHRlciBD U1MgKiovCisuYmFja2dyaWQtZmlsdGVyLmZvcm0tc2VhcmNoIHsKKyAgZmxv YXQ6IGxlZnQ7CisgIG1hcmdpbjogMHB4IDVweCA1cHggMDsKK30KKworLyoq IEN1c3RvbSBzdHlsaW5nIGZvciBDb2RlbWlycm9yIGZpZWxkICoqLworLndp emFyZC1yaWdodC1wYW5lbF9jb250ZW50IHsKKyAgYm9yZGVyOiAxcHggc29s aWRlICNjY2M7Cit9CisKKy53aXphcmQtcmlnaHQtcGFuZWxfY29udGVudCAu Q29kZU1pcnJvciB7CisgIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CisgIGhl aWdodDogMjg1cHggIWltcG9ydGFudDsKKyAgbWluLWhlaWdodDogMjg1cHgg IWltcG9ydGFudDsKK30KKworLndpemFyZC1yaWdodC1wYW5lbF9jb250ZW50 IC5Db2RlTWlycm9yLWxpbmVudW1iZXIgeworICBiYWNrZ3JvdW5kOiAjRjdG N0Y3OworICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjREREREREOworfQor Cisud2l6YXJkLXJpZ2h0LXBhbmVsX2NvbnRlbnQgLkNvZGVNaXJyb3ItZ3V0 dGVycyB7CisgIG1pbi1oZWlnaHQ6IDI4NXB4ICFpbXBvcnRhbnQ7Cit9CmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9ncmFudF93aXphcmQvdGVt cGxhdGVzL2dyYW50X3dpemFyZC9qcy9ncmFudF93aXphcmQuanMgYi93ZWIv cGdhZG1pbi90b29scy9ncmFudF93aXphcmQvdGVtcGxhdGVzL2dyYW50X3dp emFyZC9qcy9ncmFudF93aXphcmQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uNTQ4MDViMQotLS0gL2Rldi9udWxsCisrKyBiL3dl Yi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRf d2l6YXJkL2pzL2dyYW50X3dpemFyZC5qcwpAQCAtMCwwICsxLDEwOTEgQEAK K2RlZmluZShbCisgICAgICAnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAndW5k ZXJzY29yZS5zdHJpbmcnLCAnYWxlcnRpZnknLAorICAgICAgJ3BnYWRtaW4u YnJvd3NlcicsICdiYWNrYm9uZScsICdiYWNrZ3JpZCcsICdwZ2FkbWluLmJy b3dzZXIubm9kZScsCisgICAgICAnYmFja2dyaWQuc2VsZWN0LmFsbCcsICdi YWNrZ3JpZC5maWx0ZXInLCAncGdhZG1pbi5icm93c2VyLnNlcnZlci5wcml2 aWxlZ2UnLAorICAgICAgJ3BnYWRtaW4uYnJvd3Nlci53aXphcmQnLAorICAg ICAgXSwKKworICAvLyBUaGlzIGRlZmluZXMgR3JhbnQgV2l6YXJkIGRpYWxv ZworICBmdW5jdGlvbigkLCBfLCBTLCBhbGVydGlmeSwgcGdCcm93c2VyLCBC YWNrYm9uZSwgQmFja2dyaWQsIHBnTm9kZSkgeworCisgICAgLy8gaWYgbW9k dWxlIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIHJlZmVyIHRvIHRoYXQuCisg ICAgaWYgKHBnQnJvd3Nlci5HcmFudFdpemFyZCkgeworICAgICAgcmV0dXJu IHBnQnJvd3Nlci5HcmFudFdpemFyZDsKKyAgICB9CisKKyAgICAvKioKKyAg ICAgIEl0IGlzIHN1YiBtb2RlbCBmb3IgZmllbGQgIk9iamVjdHMiLiBJdCBo YXMgZmllbGRzCisgICAgICBmb3IgZGF0YWJhc2Ugb2JqZWN0IHR5cGVzIHN1 Y2ggYXMgU2NoZW1hcywgVmlld3MgYW5kCisgICAgICBTZXF1ZW5jZSBldGMu CisgICAgKi8KKyAgICB2YXIgRGF0YWJhc2VPYmplY3RNb2RlbCA9IHBnTm9k ZS5Nb2RlbC5leHRlbmQoeworICAgICAgZGVmYXVsdHM6IHsKKyAgICAgICAg c2VsZWN0ZWQ6IGZhbHNlLAorICAgICAgICBpY29uOiAnaWNvbi11bmtub3du JywKKyAgICAgICAgbmFtZTogdW5kZWZpbmVkLAorICAgICAgICBuYW1lX3dp dGhfYXJnczogdW5kZWZpbmVkLAorICAgICAgICBuc3BuYW1lOiB1bmRlZmlu ZWQsCisgICAgICAgIHByb2FyZ3M6IHVuZGVmaW5lZCwKKyAgICAgICAgb2Jq ZWN0X3R5cGU6IHVuZGVmaW5lZCwKKyAgICAgICAgb2JqZWN0X2lkOiB1bmRl ZmluZWQKKyAgICAgIH0sCisgICAgICBpZEF0dHJpYnV0ZTogJ29iamVjdF9p ZCcsIC8vIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGEgbW9kZWwgb2JqZWN0Cisg ICAgICB0b0pTT046IGZ1bmN0aW9uKG9iaikgeworICAgICAgICB2YXIgZCA9 IHBnTm9kZS5Nb2RlbC5wcm90b3R5cGUudG9KU09OLmFwcGx5KHRoaXMpOwor ICAgICAgICBkZWxldGUgZC5pY29uOworICAgICAgICByZXR1cm4gZDsKKyAg ICAgIH0sCisgICAgICBwYXJzZTogZnVuY3Rpb24ocmVzKSB7CisKKyAgICAg ICAgLy8gQ3JlYXRlIHVuaXF1ZSBvYmplY3QgaWQKKyAgICAgICAgcmVzLm9i amVjdF9pZCA9IHJlcy5uYW1lX3dpdGhfYXJnczsKKworICAgICAgICAvLyBj cmVhdGUgbmFtZSB3aXRoIGFyZ3MgaWYgaXRzIG9iamVjdCBpcyBmdW5jdGlv bgorICAgICAgICBpZighXy5pc1VuZGVmaW5lZChyZXMub2JqZWN0X3R5cGUp ICYmIChyZXMub2JqZWN0X3R5cGUgPT0gJ0Z1bmN0aW9uJyB8fAorICAgICAg ICAgIHJlcy5vYmplY3RfdHlwZSA9PSAnVHJpZ2dlciBGdW5jdGlvbicpKQor ICAgICAgICAgIHJlcy5uYW1lX3dpdGhfYXJncyA9IHJlcy5uYW1lKycoJyso dHlwZW9mKHJlcy5wcm9hcmdzKSAhPSAndW5kZWZpbmVkJyA/IHJlcy5wcm9h cmdzIDogJycpKycpJzsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJlcy5u YW1lX3dpdGhfYXJncyA9IHJlcy5uYW1lOworCisgICAgICAgIHJldHVybiBy ZXM7CisgICAgICB9LAorCisgICAgICB2YWxpZGF0ZTogZnVuY3Rpb24oKSB7 CisKKyAgICAgICAgLyoKKyAgICAgICAgKiBUcmlnZ2VycyBlcnJvciBtZXNz YWdlcyBmb3Igb2JqZWN0IHR5cGVzICJzZWxlY3RlZCIKKyAgICAgICAgKiBp ZiBpdCBpcyBlbXB0eS91bmRlZmluZWQvbnVsbAorICAgICAgICAqLworICAg ICAgICB2YXIgZXJyID0ge30sCisgICAgICAgICAgZXJybXNnLAorICAgICAg ICAgIG5vZGUgPSB0aGlzLmdldCgnb2JqZWN0cycpLnRvSlNPTigpOworICAg ICAgICBpZiAoXy5pc0VtcHR5KG5vZGUpKSB7CisgICAgICAgICAgZXJyWydz ZWxlY3RlZCddID0gJ3t7IF8oIlBsZWFzZSBzZWxlY3QgYW55IGRhdGFiYXNl IG9iamVjdCB0eXBlIikgfX0nOworICAgICAgICAgIGVycm1zZyA9IGVycm1z ZyB8fCBlcnJbJ3NlbGVjdGVkJ107CisgICAgICAgICAgdGhpcy5lcnJvck1v ZGVsLnNldCgnc2VsZWN0ZWQnLCBlcnJtc2cpOworICAgICAgICAgIHJldHVy biBlcnJtc2c7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGhpcy5l cnJvck1vZGVsLnVuc2V0KCdzZWxlY3RlZCcpOworICAgICAgICB9CisgICAg ICAgIHJldHVybiBudWxsOworICAgICAgfQorICAgIH0pOworCisgICAgLy8g RGVmaW5lIGNvbHVtbnMgZm9yIHRoZSBEYiBPYmplY3QgVHlwZXMgZ3JpZAor ICAgIHZhciBjb2x1bW5zID0gW3sKKyAgICAgIG5hbWU6ICJzZWxlY3RlZCIs CisKKyAgICAgIC8qCisgICAgICBPdmVycmlkZSByZW5kZXIgbWV0aG9kIG9m IEJhY2tncmlkLkV4dGVuc2lvbi5TZWxlY3RSb3dDZWxsCisgICAgICBjbGFz cy4gSXQgaGFzIGFuIGlzc3VlOiBJdCBkb2Vzbid0IG1hcmsgcm93cyBjaGVj a2VkIGlmIHdlIG1vdmUgdG8gbmV4dAorICAgICAgcGFnZSBhbmQgdGhlbiBn byBiYWNrIHRvIHByZXZpb3VzIHBhZ2UuIGJ1dCBpdCBtdXN0IHNob3cuCisg ICAgICBzbyB3ZSBoYW5kbGUgdGhpcyBjYXNlIGJ5IG92ZXJyaWRpbmcgdGhl IHJlbmRlciBtZXRob2QuCisgICAgICAqLworICAgICAgY2VsbDogQmFja2dy aWQuRXh0ZW5zaW9uLlNlbGVjdFJvd0NlbGwuZXh0ZW5kKHsKKyAgICAgICAg cmVuZGVyOiBmdW5jdGlvbigpIHsKKworICAgICAgICAgIC8vIFVzZSB0aGUg QmFja2Zvcm0gQ29udHJvbCdzIHJlbmRlciBmdW5jdGlvbgorICAgICAgICAg IEJhY2tncmlkLkV4dGVuc2lvbi5TZWxlY3RSb3dDZWxsLnByb3RvdHlwZS5y ZW5kZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAgICAgICAgIHZh ciBjb2wgPSB0aGlzLmNvbHVtbi5nZXQoJ25hbWUnKTsKKyAgICAgICAgICBp ZiAodGhpcy5tb2RlbCAmJiB0aGlzLm1vZGVsLmhhcyhjb2wpKSB7CisgICAg ICAgICAgICBpZiAodGhpcy5tb2RlbC5nZXQoY29sKSkgeworICAgICAgICAg ICAgICB0aGlzLmNoZWNrYm94KCkucHJvcCgiY2hlY2tlZCIsIHRydWUpOwor ICAgICAgICAgICAgICB0aGlzLiRlbC5wYXJlbnQoKS50b2dnbGVDbGFzcygi c2VsZWN0ZWQiLCB0cnVlKTsKKyAgICAgICAgICAgICAgdGhpcy5tb2RlbC50 cmlnZ2VyKCJiYWNrZ3JpZDpzZWxlY3RlZCIsIHRoaXMubW9kZWwsIHRydWUp OworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICByZXR1 cm4gdGhpczsKKyAgICAgICAgfQorICAgICAgfSksCisKKyAgICAgIGhlYWRl ckNlbGw6ICJzZWxlY3QtYWxsIiwKKworICAgIH0seworICAgICAgbmFtZTog Im9iamVjdF90eXBlIiwKKyAgICAgIGxhYmVsOiAiT2JqZWN0IFR5cGUiLAor ICAgICAgZWRpdGFibGU6IGZhbHNlLAorICAgICAgY2VsbDogQmFja2dyaWQu Q2VsbC5leHRlbmQoeworICAgICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgewor CisgICAgICAgICAgLy8gT3ZlcnJpZGUgcmVuZGVyIHRvIGFkZCBpY29uIHRv IERiIE9iamVjdCBjb2x1bW4KKyAgICAgICAgICBCYWNrZ3JpZC5DZWxsLnBy b3RvdHlwZS5yZW5kZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKyAgICAg ICAgICB0aGlzLiRlbC5hZGRDbGFzcyh0aGlzLm1vZGVsLmdldCgnaWNvbicp KS5jc3MoeyJwYWRkaW5nLWxlZnQiOiAiMjRweCJ9KTsKKworICAgICAgICAg IHJldHVybiB0aGlzOworICAgICAgICB9CisgICAgICB9KQorICAgIH0sewor ICAgICAgbmFtZTogIm5zcG5hbWUiLAorICAgICAgbGFiZWw6ICJTY2hlbWEi LAorICAgICAgY2VsbDogInN0cmluZyIsCisgICAgICBlZGl0YWJsZTogZmFs c2UKKyAgICB9LHsKKyAgICAgIG5hbWU6ICJuYW1lX3dpdGhfYXJncyIsCisg ICAgICBsYWJlbDogIk5hbWUiLAorICAgICAgY2VsbDogInN0cmluZyIsCisg ICAgICBlZGl0YWJsZTogZmFsc2UKKyAgICB9XTsKKworICAgIC8vIENyZWF0 ZSBhbiBPYmplY3QgR3JhbnRXaXphcmQgb2YgcGdCcm93c2VyIGNsYXNzCisg ICAgcGdCcm93c2VyLkdyYW50V2l6YXJkICA9IHsKKyAgICAgIGluaXQ6IGZ1 bmN0aW9uKCkgeworICAgICAgICBpZiAodGhpcy5pbml0aWFsaXplZCkKKyAg ICAgICAgICByZXR1cm47CisKKyAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9 IHRydWU7CisKKyAgICAgICAgLy8gRGVmaW5lIGxpc3Qgb2Ygbm9kZXMgb24g d2hpY2ggZ3JhbnQgd2l6YXJkIGNvbnRleHQgbWVudSBvcHRpb24gYXBwZWFy cworICAgICAgICB2YXIgc3VwcG9ydGVkX25vZGVzID0gWworICAgICAgICAg ICAgICAnc2NoZW1hJywgJ2NvbGwtZnVuY3Rpb24nLAorICAgICAgICAgICAg ICAnY29sbC1zZXF1ZW5jZScsICdjb2xsLXRhYmxlJywKKyAgICAgICAgICAg ICAgJ2NvbGwtdmlldycsICdjb2xsLW1hdGVyaWFsaXplZF92aWV3JworICAg ICAgICAgICAgXSwKKworICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAg IEVuYWJsZS9kaXNhYmxlIGdyYW50d2l6YXJkIG1lbnUgaW4gdG9vbHMgYmFz ZWQKKyAgICAgICAgICAgICAgb24gbm9kZSBzZWxlY3RlZAorICAgICAgICAg ICAgICBpZiBzZWxlY3RlZCBub2RlIGlzIHByZXNlbnQgaW4gc3VwcG9ydGVk X25vZGVzLAorICAgICAgICAgICAgICBtZW51IHdpbGwgYmUgZW5hYmxlZCBv dGhlcndpc2UgZGlzYWJsZWQuCisgICAgICAgICAgICAgIEFsc28sIGhpZGUg aXQgZm9yIHN5c3RlbSB2aWV3IGluIGNhdGFsb2dzCisgICAgICAgICAgICAq LworICAgICAgICAgICAgbWVudV9lbmFibGVkID0gZnVuY3Rpb24oaXRlbURh dGEsIGl0ZW0sIGRhdGEpIHsKKyAgICAgICAgICAgICAgdmFyIHQgPSBwZ0Jy b3dzZXIudHJlZSwgaSA9IGl0ZW0sIGQgPSBpdGVtRGF0YTsKKyAgICAgICAg ICAgICAgdmFyIHBhcmVudF9pdGVtID0gdC5oYXNQYXJlbnQoaSkgPyB0LnBh cmVudChpKTogbnVsbCwKKyAgICAgICAgICAgICAgICAgIHBhcmVudF9kYXRh ID0gcGFyZW50X2l0ZW0gPyB0Lml0ZW1EYXRhKHBhcmVudF9pdGVtKSA6IG51 bGw7CisgICAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKGQpICYmICFf LmlzTnVsbChkKSAmJiAhXy5pc051bGwocGFyZW50X2RhdGEpKQorICAgICAg ICAgICAgICAgIHJldHVybiAoKF8uaW5kZXhPZihzdXBwb3J0ZWRfbm9kZXMs IGQuX3R5cGUpICE9PSAtMSAmJiBwYXJlbnRfZGF0YS5fdHlwZSAhPSAnY2F0 YWxvZycpID8gdHJ1ZTogZmFsc2UpOworICAgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfTsK KworICAgICAgICAvLyBEZWZpbmUgdGhlIG5vZGVzIG9uIHdoaWNoIHRoZSBt ZW51cyB0byBiZSBhcHBlYXIKKyAgICAgICAgdmFyIG1lbnVzID0gW3sKKyAg ICAgICAgICBuYW1lOiAnZ3JhbnRfd2l6YXJkX3NjaGVtYScsIG1vZHVsZTog dGhpcywKKyAgICAgICAgICBhcHBsaWVzOiBbJ3Rvb2xzJ10sIGNhbGxiYWNr OiAnc3RhcnRfZ3JhbnRfd2l6YXJkJywKKyAgICAgICAgICBwcmlvcml0eTog MTAsIGxhYmVsOiAne3tfKCJHcmFudCBXaXphcmQuLi4iKSB9fScsCisgICAg ICAgICAgaWNvbjogJ3djVGFiSWNvbicsIGVuYWJsZTogbWVudV9lbmFibGVk CisgICAgICAgIH1dOworCisgICAgICAgIC8vIEFkZCBzdXBwb3J0ZWQgbWVu dXMgaW50byB0aGUgbWVudXMgbGlzdAorICAgICAgICBmb3IgKHZhciBpZHgg PSAwOyBpZHggPCBzdXBwb3J0ZWRfbm9kZXMubGVuZ3RoOyBpZHgrKykgewor ICAgICAgICAgIG1lbnVzLnB1c2goeworICAgICAgICAgICAgbmFtZTogJ2dy YW50X3dpemFyZF9zY2hlbWFfY29udGV4dF8nICsgc3VwcG9ydGVkX25vZGVz W2lkeF0sCisgICAgICAgICAgICBub2RlOiBzdXBwb3J0ZWRfbm9kZXNbaWR4 XSwgbW9kdWxlOiB0aGlzLAorICAgICAgICAgICAgYXBwbGllczogWydjb250 ZXh0J10sIGNhbGxiYWNrOiAnc3RhcnRfZ3JhbnRfd2l6YXJkJywKKyAgICAg ICAgICAgIHByaW9yaXR5OiAxMCwgbGFiZWw6ICd7e18oIkdyYW50IFdpemFy ZC4uLiIpIH19JywKKyAgICAgICAgICAgIGljb246ICd3Y1RhYkljb24nLCBl bmFibGU6IG1lbnVfZW5hYmxlZAorICAgICAgICAgICAgfSk7CisgICAgICAg IH0KKyAgICAgICAgcGdBZG1pbi5Ccm93c2VyLmFkZF9tZW51cyhtZW51cyk7 CisKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICB9LAorCisgICAgICAv LyBDYWxsYmFjayB0byBkcmF3IFdpemFyZCBEaWFsb2cKKyAgICAgIHN0YXJ0 X2dyYW50X3dpemFyZDogZnVuY3Rpb24oYWN0aW9uLCBpdGVtKSB7CisKKyAg ICAgICAgLy8gRGVjbGFyZSBXaXphcmQgZGlhbG9nCisgICAgICAgIGlmICgh YWxlcnRpZnkud2l6YXJkRGlhbG9nKSB7CisgICAgICAgICAgYWxlcnRpZnku ZGlhbG9nKCd3aXphcmREaWFsb2cnLCBmdW5jdGlvbiBmYWN0b3J5KCkgewor CisgICAgICAgICAgICAvLyBHZW5lcmF0ZSB3aXphcmQgbWFpbiBjb250YWlu ZXIKKyAgICAgICAgICAgIHZhciAkY29udGFpbmVyID0gJCgiPGRpdiBjbGFz cz0nd2l6YXJkX2RsZyc+PC9kaXY+Iik7CisKKyAgICAgICAgICAgIHJldHVy biB7CisgICAgICAgICAgICAgIG1haW46IGZ1bmN0aW9uKHRpdGxlKSB7Cisg ICAgICAgICAgICAgICAgdGhpcy5zZXQoJ3RpdGxlJywgdGl0bGUpOworICAg ICAgICAgICAgICB9LAorICAgICAgICAgICAgICBzZXR1cDpmdW5jdGlvbigp IHsKKyAgICAgICAgICAgICAgICByZXR1cm4geworCisgICAgICAgICAgICAg ICAgICAvLyBTZXQgb3B0aW9ucyBmb3IgZGlhbG9nCisgICAgICAgICAgICAg ICAgICBvcHRpb25zOiB7CisgICAgICAgICAgICAgICAgICAgIGZyYW1lbGVz czogdHJ1ZSwKKyAgICAgICAgICAgICAgICAgICAgcmVzaXphYmxlOiBmYWxz ZSwKKyAgICAgICAgICAgICAgICAgICAgYXV0b1Jlc2V0OiBmYWxzZSwKKyAg ICAgICAgICAgICAgICAgICAgbWF4aW1pemFibGU6IGZhbHNlLAorICAgICAg ICAgICAgICAgICAgICBjbG9zYWJsZUJ5RGltbWVyOiBmYWxzZQorICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg ICAgIH0sCisgICAgICAgICAgICAgIGhvb2tzOnsKKyAgICAgICAgICAgICAg ICBvbnNob3c6IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAgICAgICAv LyBTZXQgZGltZW5zaW9ucyBmb3Igd2l6YXJkCisgICAgICAgICAgICAgICAg ICB0aGlzLmVsZW1lbnRzLmRpYWxvZy5zdHlsZS53aWR0aCA9ICcxMDAlJzsK KyAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudHMuZGlhbG9nLnN0eWxl LmhlaWdodCA9ICc2OCUnOworCisgICAgICAgICAgICAgICAgICAvLyBBZGQg cGdhZG1pbl9ncmFudF93aXphcmRfYm9keSBjbGFzcyB0byBkaWFsb2cKKyAg ICAgICAgICAgICAgICAgICQodGhpcy5lbGVtZW50cy5ib2R5KS5hZGRDbGFz cygncGdhZG1pbl9ncmFudF93aXphcmRfYm9keScpOworICAgICAgICAgICAg ICAgIH0sCisgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgLyoq CisgICAgICAgICAgICAgICAgUmV0dXJucyBhIFBhZ2luYXRvciBDbGFzcyBP YmplY3Qgd2hpY2ggaXMgYWdhaW4gdG8gYmUgcmVuZGVyZWQKKworICAgICAg ICAgICAgICAgIEBjbGFzcyB7QmFja2dyaWQuRXh0ZW5zaW9uLlBhZ2luYXRv cn0KKyAgICAgICAgICAgICAgICBAcGFyYW0ge0JhY2tib25lLkNvbGxlY3Rp b259IGNvbGwgLSBmcm9tIHdoaWNoIGRhdGEgaXMgZmV0Y2hlZAorICAgICAg ICAgICAgICAgIEByZXR1cm4ge09iamVjdH0gcGFnaW5hdG9yCisgICAgICAg ICAgICAgICovCisgICAgICAgICAgICAgIERiUGFnaW5hdG9yOiBmdW5jdGlv bihjb2xsKXsKKyAgICAgICAgICAgICAgICB2YXIgcGFnaW5hdG9yID0gdGhp cy5wYWdpbmF0b3IgPSBuZXcgQmFja2dyaWQuRXh0ZW5zaW9uLlBhZ2luYXRv cih7CisgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsLAorICAg ICAgICAgICAgICAgICAgd2luZG93U2l6ZTogOAorICAgICAgICAgICAgICAg IH0pOworICAgICAgICAgICAgICAgIHJldHVybiBwYWdpbmF0b3I7CisgICAg ICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgLyoqCisgICAgICAgICAg ICAgICAgQ3JlYXRlIG5ldyBGaWx0ZXIgd2hpY2ggd2lsbCBmaWx0ZXIgdGhl CisgICAgICAgICAgICAgICAgcmVuZGVyZWQgZ3JpZCBmb3IgU2VsZWN0IFR5 cGUgVGFidWxhciBEYXRhCisgICAgICAgICAgICAgICAgQHBhcmFtIHtCYWNr Ym9uZS5QYWdlYWJsZUNvbGxlY3Rpb259IGNvbGwKKyAgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgICAgRGJPYmplY3RGaWx0ZXI6IGZ1bmN0aW9uKGNv bGwpeworICAgICAgICAgICAgICAgIHZhciBjbGllbnRTaWRlRmlsdGVyID0g dGhpcy5jbGllbnRTaWRlRmlsdGVyID0gbmV3IEJhY2tncmlkLkV4dGVuc2lv bi5DbGllbnRTaWRlRmlsdGVyKHsKKyAgICAgICAgICAgICAgICAgIGNvbGxl Y3Rpb246IGNvbGwsCisgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjog XygnU2VhcmNoIGJ5IG9iamVjdCB0eXBlIG9yIG5hbWUnKSwKKworICAgICAg ICAgICAgICAgICAgLy8gVGhlIG1vZGVsIGZpZWxkcyB0byBzZWFyY2ggZm9y IG1hdGNoZXMKKyAgICAgICAgICAgICAgICAgIGZpZWxkczogWydvYmplY3Rf dHlwZScsICduYW1lJ10sCisKKyAgICAgICAgICAgICAgICAgIC8vIEhvdyBs b25nIHRvIHdhaXQgYWZ0ZXIgdHlwaW5nIGhhcyBzdG9wcGVkIGJlZm9yZSBz ZWFyY2hpbmcgY2FuIHN0YXJ0CisgICAgICAgICAgICAgICAgICB3YWl0OiAx NTAKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1 cm4gY2xpZW50U2lkZUZpbHRlcjsKKyAgICAgICAgICAgICAgfSwKKworICAg ICAgICAgICAgICAvL0VuYWJsZSBEaXNhYmxlIE5leHQgYnV0dG9uIG9mIFBy aXZpbGVnZVBhZ2UKKyAgICAgICAgICAgICAgdXBkYXRlQnV0dG9uczogZnVu Y3Rpb24obW9kaWZpZWQpeworICAgICAgICAgICAgICAgIGlmKCFtb2RpZmll ZCkKKyAgICAgICAgICAgICAgICAgICQoJy53aXphcmQtbmV4dCcpLnByb3Ao J2Rpc2FibGVkJywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAg ICAgICAgICAgICAgICAgJCgnLndpemFyZC1uZXh0JykucHJvcCgnZGlzYWJs ZWQnLCBmYWxzZSk7CisgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAg ICAgLyoqCisgICAgICAgICAgICAgICAgQ2FsbGJhY2sgY2FsbGVkIHdoZW4g YW4gZXJyb3JNb2RlbCBpcyBzZXQKKyAgICAgICAgICAgICAgICB3aXRoIGlu dmFsaWQgdmFsdWUgYW5kIGVycm9ybXNnIGlzIHNldCBpbnRvCisgICAgICAg ICAgICAgICAgc3RhdHVzIGJhciBlbGVtZW50IGFuZCBuZXh0IGJ1dHRvbiBp cyBkaXNhYmxlZAorICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICBv blNlc3Npb25JbnZhbGlkOiBmdW5jdGlvbihtc2cpIHsKKyAgICAgICAgICAg ICAgICAkKCcuZXJyb3JfbXNnX2RpdiBwJykuaHRtbChtc2cpLnJlbW92ZUNs YXNzKCJoaWRlIik7CisKKyAgICAgICAgICAgICAgICAvLyBFbmFibGUgZGlz YWJsZSBOZXh0IGJ1dHRvbgorICAgICAgICAgICAgICAgIHRoaXMudXBkYXRl QnV0dG9ucyhmYWxzZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7 CisgICAgICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgLyoqCisgICAg ICAgICAgICAgICAgQ2FsbGJhY2sgY2FsbGVkIHdoZW4gYW55dGhpbmcgaXMg c2V0IGludG8gbW9kZWwKKyAgICAgICAgICAgICAgICB0aHVzIGhpZGUgZXJy b3IgbXNnIGVsZW1lbnQgYW5kIGVuYWJsZSBuZXh0IGJ1dHRvbgorICAgICAg ICAgICAgICAgIHN0YXR1cyBiYXIgZWxlbWVudCBhbmQgbmV4dCBidXR0b24g aXMgZGlzYWJsZWQKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAg b25TZXNzaW9uVmFsaWRhdGVkOiBmdW5jdGlvbihzZXNzSGFzQ2hhbmdlZCkg eworICAgICAgICAgICAgICAgICQoJy5lcnJvcl9tc2dfZGl2IHAnKS5lbXB0 eSgpLmFkZENsYXNzKCJoaWRlIik7CisKKyAgICAgICAgICAgICAgICAvLyBF bmFibGUgZGlzYWJsZSBOZXh0IGJ1dHRvbgorICAgICAgICAgICAgICAgIHRo aXMudXBkYXRlQnV0dG9ucyhzZXNzSGFzQ2hhbmdlZCk7CisgICAgICAgICAg ICAgIH0sCisKKyAgICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgICAg UmVtb3ZlL0RlbGV0ZSBvYmplY3RzLCBhdHRyaWJ1dGVzCisgICAgICAgICAg ICAgICAgaW4gd2l6YXJkIG9uIHdpemFyZCBjbG9zZSBvciBmaW5pc2gKKyAg ICAgICAgICAgICAgICB0byByZWNsYWltIG1lbW9yeQorICAgICAgICAgICAg ICAqLworICAgICAgICAgICAgICByZWxlYXNlT2JqZWN0czogZnVuY3Rpb24o KXsKKyAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAg ICAgICAgICAgICBpZighXy5pc1VuZGVmaW5lZChzZWxmLmRiT2JqZWN0Rmls dGVyKSkgeworICAgICAgICAgICAgICAgICAgc2VsZi5kYk9iamVjdEZpbHRl ci5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICAgIHNlbGYuZGJPYmplY3RG aWx0ZXIgPSB1bmRlZmluZWQ7CisgICAgICAgICAgICAgICAgfQorCisgICAg ICAgICAgICAgICAgaWYoIV8uaXNVbmRlZmluZWQoc2VsZi5jbGllbnRTaWRl RmlsdGVyKSkgeworICAgICAgICAgICAgICAgICAgc2VsZi5jbGllbnRTaWRl RmlsdGVyLnJlbW92ZSgpOworICAgICAgICAgICAgICAgICAgc2VsZi5jbGll bnRTaWRlRmlsdGVyID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgIH0K KworICAgICAgICAgICAgICAgIC8vIGNsZWFyIG9iamVjdCBwcml2IGFycmF5 CisgICAgICAgICAgICAgICAgaWYoIV8uaXNOdWxsKHNlbGYub2JqX3ByaXYp ICYmCisgICAgICAgICAgICAgICAgICAhXy5pc1VuZGVmaW5lZChzZWxmLm9i al9wcml2KSkgeworICAgICAgICAgICAgICAgICAgc2VsZi5vYmpfcHJpdiA9 IFtdOworICAgICAgICAgICAgICAgICAgZGVsZXRlIHNlbGYub2JqX3ByaXY7 CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gRGVs ZXRlIFdpemFyZCBQYWdlcywgY2xlYXIgbW9kZWwgYW5kIGNsZWFudXAgdmll dworICAgICAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKHNlbGYuZGJP YmplY3RUeXBlUGFnZSkgJiYKKyAgICAgICAgICAgICAgICAgICFfLmlzTnVs bChzZWxmLmRiT2JqZWN0VHlwZVBhZ2UpKSB7CisgICAgICAgICAgICAgICAg ICBpZighXy5pc1VuZGVmaW5lZChzZWxmLmRiT2JqZWN0VHlwZVBhZ2UuZ2V0 KCdtb2RlbCcpKSAmJgorICAgICAgICAgICAgICAgICAgICAhXy5pc051bGwo c2VsZi5kYk9iamVjdFR5cGVQYWdlLmdldCgnbW9kZWwnKSkpIHsKKyAgICAg ICAgICAgICAgICAgICAgc2VsZi5kYk9iamVjdFR5cGVQYWdlLmdldCgnbW9k ZWwnKS5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICBzZWxmLmRiT2Jq ZWN0VHlwZVBhZ2UuZ2V0KCd2aWV3JykuY2xlYW51cCgpOworICAgICAgICAg ICAgICAgICAgICBzZWxmLmRiT2JqZWN0VHlwZVBhZ2UgPSB1bmRlZmluZWQ7 CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg ICAgICAgICAgICAgICAgaWYoIV8uaXNVbmRlZmluZWQoc2VsZi5wcml2aWxl Z2VQYWdlKSAmJgorICAgICAgICAgICAgICAgICAgIV8uaXNOdWxsKHNlbGYu cHJpdmlsZWdlUGFnZSkpIHsKKyAgICAgICAgICAgICAgICAgIGlmKCFfLmlz VW5kZWZpbmVkKHNlbGYucHJpdmlsZWdlUGFnZS5nZXQoJ21vZGVsJykpICYm CisgICAgICAgICAgICAgICAgICAgICFfLmlzTnVsbChzZWxmLnByaXZpbGVn ZVBhZ2UuZ2V0KCdtb2RlbCcpKSkgeworICAgICAgICAgICAgICAgICAgICBz ZWxmLnByaXZpbGVnZVBhZ2UuZ2V0KCdtb2RlbCcpLmNsZWFyKCk7CisgICAg ICAgICAgICAgICAgICAgIHNlbGYucHJpdmlsZWdlUGFnZS5nZXQoJ3ZpZXcn KS5jbGVhbnVwKCk7CisgICAgICAgICAgICAgICAgICAgIHNlbGYucHJpdmls ZWdlUGFnZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZighXy5pc1Vu ZGVmaW5lZChzZWxmLnJldmlld1NRTFBhZ2UpICYmCisgICAgICAgICAgICAg ICAgICAhXy5pc051bGwoc2VsZi5yZXZpZXdTUUxQYWdlKSkgeworICAgICAg ICAgICAgICAgICAgaWYoIV8uaXNVbmRlZmluZWQoc2VsZi5yZXZpZXdTUUxQ YWdlLmdldCgnbW9kZWwnKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgIV8u aXNOdWxsKHNlbGYucmV2aWV3U1FMUGFnZS5nZXQoJ21vZGVsJykpKSB7Cisg ICAgICAgICAgICAgICAgICAgIHNlbGYucmV2aWV3U1FMUGFnZS5nZXQoJ21v ZGVsJykuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5yZXZp ZXdTUUxQYWdlID0gdW5kZWZpbmVkOworICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFJlbW92 ZSBTcWwgY29udHJvbAorICAgICAgICAgICAgICAgIGlmICghXy5pc1VuZGVm aW5lZChzZWxmLnNxbENvbnRyb2wpKSB7CisgICAgICAgICAgICAgICAgICBz ZWxmLnNxbENvbnRyb2wucmVtb3ZlKCk7CisgICAgICAgICAgICAgICAgfQor CisgICAgICAgICAgICAgICAgLy8gQ2xlYXIgcHJpdk1vZGVsCisgICAgICAg ICAgICAgICAgaWYoIV8uaXNOdWxsKHNlbGYucHJpdk1vZGVsKSAmJgorICAg ICAgICAgICAgICAgICAgIV8uaXNVbmRlZmluZWQoc2VsZi5wcml2TW9kZWwp KSB7CisgICAgICAgICAgICAgICAgICBzZWxmLnByaXZNb2RlbC5jbGVhcigp OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFJl bW92ZSBjb2xsZWN0aW9uIGNvbnRhaW5pbmcgZGIgb2JqZWN0IGRhdGEKKyAg ICAgICAgICAgICAgICBpZighXy5pc051bGwoc2VsZi5jb2xsKSAmJgorICAg ICAgICAgICAgICAgICAgIV8uaXNVbmRlZmluZWQoc2VsZi5jb2xsKSkgewor ICAgICAgICAgICAgICAgICAgc2VsZi5jb2xsLnJlc2V0KCk7CisgICAgICAg ICAgICAgICAgICBzZWxmLmNvbGwgPSB1bmRlZmluZWQ7CisgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIC8vIERlbGV0ZSBXaXphcmQKKyAg ICAgICAgICAgICAgICBpZighXy5pc051bGwoc2VsZi53aXphcmQpICYmCisg ICAgICAgICAgICAgICAgICAhXy5pc1VuZGVmaW5lZChzZWxmLndpemFyZCkp IHsKKyAgICAgICAgICAgICAgICAgIHNlbGYud2l6YXJkLmNvbGxlY3Rpb24u cmVzZXQoKTsKKyAgICAgICAgICAgICAgICAgIHNlbGYud2l6YXJkLmN1cnJf cGFnZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgICAgfSwKKworICAgICAgICAgICAgICAvKioKKyAgICAgICAgICAg ICAgICBFdmVyeSB0aW1lIGEgd2l6YXJkIGlzIG9wZW5lZCwgdGhpcyBmdW5j dGlvbgorICAgICAgICAgICAgICAgIGlzIGNhbGxlZCBldmVyeXRpbWUuIEl0 IGhhcyBXaXphcmQgUGFnZXMgd2hpY2gKKyAgICAgICAgICAgICAgICBhcmUg cmVuZGVyZWQgYnkgdGhlIFdpemFyZCBDbGFzczoKKworICAgICAgICAgICAg ICAgIEBjbGFzcyB7cGdCcm93c2VyLldpemFyZFBhZ2V9IGRiT2JqZWN0VHlw ZTEgLSBUaGlzIHBhZ2UKKyAgICAgICAgICAgICAgICBAZXh0ZW5kcyB7QmFj a2JvbmUuTW9kZWx9CisgICAgICAgICAgICAgICAgcmVuZGVycyBhIGdyaWQg b2YgRGF0YWJhc2UgT2JqZWN0IFR5cGVzIHN1Y2ggYXMKKyAgICAgICAgICAg ICAgICAgIFNjaGVtYXMsIFZpZXdzIGFuZCBTZXF1ZW5jZXMgZXRjLgorCisg ICAgICAgICAgICAgICAgQGNsYXNzIHtwZ0Jyb3dzZXIuV2l6YXJkUGFnZX0g V2l6YXJkUGFnZTIgLSBUaGlzIHBhZ2UKKyAgICAgICAgICAgICAgICBAZXh0 ZW5kcyB7QmFja2JvbmUuTW9kZWx9CisgICAgICAgICAgICAgICAgYWRkcyBQ cml2aWxlZ2UgQ29udHJvbCB3aGljaCBwcm92aWRlcyBncmFudCBwcml2aWxl Z2VzCisgICAgICAgICAgICAgICAgc3VjaCBhcyAiQ3JlYXRlLCBJbnNlcnQs IERlbGV0ZSwgVXBkYXRlIiBzbyBvbiB0aGUKKyAgICAgICAgICAgICAgICBk YXRhYmFzZSBvYmplY3RzIHNlbGVjdGVkIG9uIFdpemFyZCBQYWdlcy4KKwor ICAgICAgICAgICAgICAgIEBjbGFzcyB7cGdCcm93c2VyLldpemFyZFBhZ2V9 IFdpemFyZFBhZ2UzIC0gVGhpcyBwYWdlCisgICAgICAgICAgICAgICAgZGlz cGxheXMgdGhlIGdlbmVyYXRlZCBHUkFOVCBTUUwgcXVlcnkgZm9yIHRoZSBE YgorICAgICAgICAgICAgICAgIG9iamVjdHMgc2VsZWN0ZWQgd2l0aCB0aGUg c3BlY2lmaWMgcHJpdmlsZWdlcyBhZGRlZCB0byBpdC4KKyAgICAgICAgICAg ICAgICBAZXh0ZW5kcyB7QmFja2JvbmUuTW9kZWx9CisKKyAgICAgICAgICAg ICAgICBAY2xhc3Mge0JhY2tib25lLkNvbGxlY3Rpb259IFdpemFyZENvbGxl Y3Rpb24gLSBJdCBpcyB0aGUKKyAgICAgICAgICAgICAgICBjb2xsZWN0aW9u IG9mIHdpemFyZCBwYWdlcworCisgICAgICAgICAgICAgICAgQGNsYXNzIHtw Z0Jyb3dzZXIuV2l6YXJkfSB3aXphcmQgLSBJdHMgdGFzayBpczoKKyAgICAg ICAgICAgICAgICAtIENyZWF0ZSBhIFdpemFyZAorICAgICAgICAgICAgICAg IC0gQWRkIEJ1dHRvbnMsIENhbGxiYWNrcyB0byBpdC4KKyAgICAgICAgICAg ICAgICAtIFJlbmRlciBXaXphcmRQYWdlcworICAgICAgICAgICAgICAgIEBl eHRlbmRzIHtCYWNrYm9uZS5WaWV3fQorCisgICAgICAgICAgICAgICovCisg ICAgICAgICAgICAgIGJ1aWxkOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICAg ICAgICB0aGlzLmVsZW1lbnRzLmNvbnRlbnQuYXBwZW5kQ2hpbGQoJGNvbnRh aW5lci5nZXQoMCkpOworICAgICAgICAgICAgICB9LAorCisgICAgICAgICAg ICAgIC8vUmV0dXJucyBsaXN0IG9mIEFjbHMgZGVmaW5lZCBmb3Igbm9kZXMK KyAgICAgICAgICAgICAgZ2V0X2pzb25fZGF0YTogZnVuY3Rpb24oKSB7Cisg ICAgICAgICAgICAgICAgdmFyIHVybCA9ICIvZ3JhbnRfd2l6YXJkL2FsbG93 ZWRfYWNsLmpzb24iOworICAgICAgICAgICAgICAgIHJldHVybiAkLmFqYXgo eworICAgICAgICAgICAgICAgICAgYXN5bmM6IGZhbHNlLAorICAgICAgICAg ICAgICAgICAgZGF0YVR5cGU6ICdqc29ucCcsCisgICAgICAgICAgICAgICAg ICB1cmw6IHVybAorICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAg ICAgIH0sCisgICAgICAgICAgICAgIHByZXBhcmU6ZnVuY3Rpb24oKSB7CisK KyAgICAgICAgICAgICAgICAkY29udGFpbmVyLmVtcHR5KCkuYXBwZW5kKCI8 ZGl2IGNsYXNzPSdncmFudF93aXphcmRfY29udGFpbmVyJz48L2Rpdj4iKTsK KworICAgICAgICAgICAgICAgIC8vIERlZmluZSBlbCBmb3Igd2l6YXJkIHZp ZXcKKyAgICAgICAgICAgICAgICB2YXIgZWwgPSAkKCcuZ3JhbnRfd2l6YXJk X2NvbnRhaW5lcicpOworCisgICAgICAgICAgICAgICAgLy8gRmV0Y2ggcHJp dmlsZWdlcyBzcGVjaWZpYyB0byBub2RlcworICAgICAgICAgICAgICAgIHZh ciBqc29uX2RhdGEgPSB0aGlzLmdldF9qc29uX2RhdGEoKSwKKyAgICAgICAg ICAgICAgICAgICAgcHJpdkRpY3QgPSBKU09OLnBhcnNlKGpzb25fZGF0YS5y ZXNwb25zZVRleHQpOworCisgICAgICAgICAgICAgICAgLy8gRXh0cmFjdCB0 aGUgZGF0YSBmcm9tIHRoZSBzZWxlY3RlZCB0cmVlIG5vZGUKKyAgICAgICAg ICAgICAgICB2YXIgdCA9IHBnQnJvd3Nlci50cmVlLAorICAgICAgICAgICAg ICAgICAgICBpID0gdC5zZWxlY3RlZCgpLAorICAgICAgICAgICAgICAgICAg ICBkID0gdGhpcy5kID0gaSAmJiBpLmxlbmd0aCA9PSAxID8gdC5pdGVtRGF0 YShpKSA6IHVuZGVmaW5lZCwKKyAgICAgICAgICAgICAgICAgICAgaW5mbyA9 IHRoaXMuaW5mbyA9IHBnQnJvd3Nlci5Ob2RlLmdldFRyZWVOb2RlSGllcmFy Y2h5KGkpLAorICAgICAgICAgICAgICAgICAgICBpY29uID0gZC5pY29uOwor CisgICAgICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgICAgICBHZW5l cmF0ZSBhIFVSTCB1c2luZzoKKyAgICAgICAgICAgICAgICAgIGdpZCwgZGlk LCBzaWQoc2VydmVyIGlkKSwgbm9kZV9pZChub2RlIGlkKSwKKyAgICAgICAg ICAgICAgICAgIG5vZGVfKG5vZGUgbmFtZSksIG5vZGVfdHlwZShub2RlIHR5 cGUpCisgICAgICAgICAgICAgICAgICBhbmQgcGFzcyBpdCB0byBjb2xsZWN0 aW9uIHdoaWNoIHdpbGwgZmV0Y2ggT2JqZWN0IFR5cGUgcHJvcGVydGllcy4K KyAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHZhciBnaWQg PSBpbmZvWydzZXJ2ZXItZ3JvdXAnXS5faWQsCisgICAgICAgICAgICAgICAg ICAgIHNpZCA9IGluZm8uc2VydmVyLl9pZCwKKyAgICAgICAgICAgICAgICAg ICAgZGlkID0gaW5mby5kYXRhYmFzZS5faWQsCisgICAgICAgICAgICAgICAg ICAgIG5vZGVfaWQgPSBkLl9pZCwKKyAgICAgICAgICAgICAgICAgICAgbnNw bmFtZSA9IGluZm8uc2NoZW1hLmxhYmVsLAorCisgICAgICAgICAgICAgICAg ICAgIC8qKgorICAgICAgICAgICAgICAgICAgICAgIGdldCBub2RlIG5hbWUg b25seS4gdXNlZCBpbiBtYXBwaW5nIHdpdGggb2JqZWN0IHR5cGVzIGRlZmlu ZWQKKyAgICAgICAgICAgICAgICAgICAgICBpbiBhbGxvd2VkX2FjbC5qc29u CisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAg ICBub2RlX3R5cGUgPSBkLl90eXBlLnJlcGxhY2UoJ2NvbGwtJywgJycpLnJl cGxhY2UoJ21hdGVyaWFsaXplZF8nLCAnJyksCisgICAgICAgICAgICAgICAg ICAgIG5vZGVfbGFiZWwgPSBkLmxhYmVsOworCisgICAgICAgICAgICAgICAg ICAgIC8vIENvbGxlY3Rpb24gdXJsIHRvIGZldGNoIGRhdGFiYXNlIG9iamVj dCB0eXBlcyBmb3Igb2JqZWN0cyBmaWVsZAorICAgICAgICAgICAgICAgICAg ICB2YXIgYmFzZVVybCA9ICJ7eyB1cmxfZm9yKCdncmFudF93aXphcmQuaW5k ZXgnKSB9fSIgKyAicHJvcGVydGllcy8iICsKKyAgICAgICAgICAgICAgICAg ICAgICAgIFMoJyVzLyVzLyVzLyVzLyVzLyVzLyVzLycpLnNwcmludGYoCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJKGdpZCksIGVu Y29kZVVSSShzaWQpLCBlbmNvZGVVUkkoZGlkKSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlbmNvZGVVUkkobm9kZV9pZCksIGVuY29kZVVSSShu b2RlX2xhYmVsKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNv ZGVVUkkobm9kZV90eXBlKSwgZW5jb2RlVVJJKG5zcG5hbWUpKS52YWx1ZSgp OworCisgICAgICAgICAgICAgICAgICAgIC8vIE1vZGVsJ3Mgc2F2ZSB1cmwK KyAgICAgICAgICAgICAgICAgICAgc2F2ZVVybCA9ICJ7eyB1cmxfZm9yKCdn cmFudF93aXphcmQuaW5kZXgnKSB9fSIgKyAic2F2ZS8iICsKKyAgICAgICAg ICAgICAgICAgICAgICAgIFMoJyVzLyVzLyVzLyVzLyVzLycpLnNwcmludGYo CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlVVJJKGdpZCks IGVuY29kZVVSSShzaWQpLCBlbmNvZGVVUkkoZGlkKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbmNvZGVVUkkobm9kZV90eXBlKSwgZW5jb2Rl VVJJKG5zcG5hbWUpKS52YWx1ZSgpLAorCisgICAgICAgICAgICAgICAgICAg IC8vIGdlbmVyYXRlIGVuY29kZWQgdXJsIGJhc2VkIG9uIHdpemFyZCB0eXBl CisgICAgICAgICAgICAgICAgICAgIG1zcWxfdXJsID0gdGhpcy5tc3FsX3Vy bCA9ICIvZ3JhbnRfd2l6YXJkL21zcWwvIisKKyAgICAgICAgICAgICAgICAg ICAgICBTKCclcy8lcy8lcy8lcy8lcy8nKS5zcHJpbnRmKAorICAgICAgICAg ICAgICAgICAgICAgICAgICBlbmNvZGVVUkkoZ2lkKSwgZW5jb2RlVVJJKHNp ZCksIGVuY29kZVVSSShkaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICBlbmNvZGVVUkkobm9kZV90eXBlKSwgZW5jb2RlVVJJKG5zcG5hbWUpKS52 YWx1ZSgpLAorCisgICAgICAgICAgICAgICAgICAgIENvbGwgPSBCYWNrYm9u ZS5Db2xsZWN0aW9uLmV4dGVuZCh7CisgICAgICAgICAgICAgICAgICAgICAg bW9kZWw6IERhdGFiYXNlT2JqZWN0TW9kZWwsCisgICAgICAgICAgICAgICAg ICAgICAgdXJsOiBiYXNlVXJsCisgICAgICAgICAgICAgICAgICAgIH0pLAor CisgICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBpbnN0YW5jZXMgb2Yg Y29sbGVjdGlvbiBhbmQgZmlsdGVyCisgICAgICAgICAgICAgICAgICAgIGNv bGwgPSB0aGlzLmNvbGwgPSBuZXcgQ29sbCgpLAorICAgICAgICAgICAgICAg ICAgICBkYk9iamVjdEZpbHRlciA9IHRoaXMuZGJPYmplY3RGaWx0ZXIgPSB0 aGlzLkRiT2JqZWN0RmlsdGVyKGNvbGwpOworCisgICAgICAgICAgICAgICAg LyoqCisgICAgICAgICAgICAgICAgICBwcml2QXJyYXkgaG9sZHMgb2JqZWN0 cyBzZWxlY3RlZCB3aGljaCBmdXJ0aGVyIGhlbHBzCisgICAgICAgICAgICAg ICAgICBpbiBjcmVhdGluZyBwcml2aWxlZ2VzIE1vZGVsCisgICAgICAgICAg ICAgICAgKi8KKyAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7Cisg ICAgICAgICAgICAgICAgc2VsZi5wcml2QXJyYXkgPSBbXTsKKworICAgICAg ICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAgT3ZlcnJpZGUgYmFj a2dyaWQgbGlzdGVuZXIgImJhY2tncmlkOnNlbGVjdGVkIiB0bworICAgICAg ICAgICAgICAgICAgQWRkL1JlbW92ZSBtb2RlbCB0by9mcm9tIG9iamVjdHMg Y29sbGVjdGlvbgorICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAg ICAgY29sbC5vbignYmFja2dyaWQ6c2VsZWN0ZWQnLCBmdW5jdGlvbihtb2Rl bCwgc2VsZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgIG1vZGVsLnNldCgn c2VsZWN0ZWQnLCBzZWxlY3RlZCk7CisKKyAgICAgICAgICAgICAgICAgIHZh ciBvYmplY3RfdHlwZSA9IG1vZGVsLmdldCgnb2JqZWN0X3R5cGUnKTsKKyAg ICAgICAgICAgICAgICAgIHN3aXRjaCAob2JqZWN0X3R5cGUpCisgICAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ0Z1bmN0 aW9uJzoKKyAgICAgICAgICAgICAgICAgICAgICBvYmplY3RfdHlwZSA9ICdm dW5jdGlvbic7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgIGNhc2UgJ1RyaWdnZXIgRnVuY3Rpb24nOgorICAg ICAgICAgICAgICAgICAgICAgIG9iamVjdF90eXBlID0gJ2Z1bmN0aW9uJzsK KyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgY2FzZSAnVGFibGUnOgorICAgICAgICAgICAgICAgICAgICAgIG9i amVjdF90eXBlID0gJ3RhYmxlJzsKKyAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAnU2VxdWVuY2UnOgor ICAgICAgICAgICAgICAgICAgICAgIG9iamVjdF90eXBlID0gJ3NlcXVlbmNl JzsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICAgICAgY2FzZSAnVmlldyc6CisgICAgICAgICAgICAgICAgICAgICAg b2JqZWN0X3R5cGUgPSAndGFibGUnOworICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg ICAgICAvKioKKyAgICAgICAgICAgICAgICAgICAgaWYgYSByb3cgKGNoZWNr Ym94KSBpcyBjaGVja2VkLCBhZGQgdGhhdCBtb2RlbAorICAgICAgICAgICAg ICAgICAgICBpbnRvIGNvbGxlY3Rpb24sIHdoZW4gdW5jaGVja2VkIHJlbW92 ZSBpdCBmcm9tCisgICAgICAgICAgICAgICAgICAgIG1vZGVsLgorCisgICAg ICAgICAgICAgICAgICAgIEFsc28gcHVzaC9wb3Agb2JqZWN0IHR5cGUgaW4v ZnJvbSBwcml2QXJyYXkKKyAgICAgICAgICAgICAgICAgICovCisgICAgICAg ICAgICAgICAgICBpZihzZWxlY3RlZCkgeworICAgICAgICAgICAgICAgICAg ICBpZihfLmluZGV4T2Yoc2VsZi5wcml2QXJyYXksIG9iamVjdF90eXBlKSA9 PSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICBzZWxmLnByaXZBcnJheS5w dXNoKG9iamVjdF90eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3TW9k ZWwuZ2V0KCdvYmplY3RzJykuYWRkKG1vZGVsLCB7IHNpbGVudDogdHJ1ZSB9 KTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIGVs c2UgeworICAgICAgICAgICAgICAgICAgICB2YXIgaWR4ID0gc2VsZi5wcml2 QXJyYXkuaW5kZXhPZihvYmplY3RfdHlwZSk7CisgICAgICAgICAgICAgICAg ICAgIGlmKGlkeCAhPS0xKQorICAgICAgICAgICAgICAgICAgICAgIHNlbGYu cHJpdkFycmF5LnNwbGljZShpZHgsIDEpOworICAgICAgICAgICAgICAgICAg ICBuZXdNb2RlbC5nZXQoJ29iamVjdHMnKS5yZW1vdmUobW9kZWwpOworICAg ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAvLyB2YWxp ZGF0ZSBtb2RlbCBvbiBjaGVja2JveCBjaGVjay91bmNoZWNrCisgICAgICAg ICAgICAgICAgICB2YXIgbXNnID0gIG1vZGVsLnZhbGlkYXRlLmNhbGwobmV3 TW9kZWwpOworCisgICAgICAgICAgICAgICAgICAvKioKKyAgICAgICAgICAg ICAgICAgICAgSWYgbm8gb2JqZWN0IHR5cGUgaXMgc2VsZWN0ZWQsIHNldCBl cnJvciBtc2cKKyAgICAgICAgICAgICAgICAgICAgYW5kIGRpc2FibGUgbmV4 dCBidXR0b24sIGVsc2UgZW5hYmxlIG5leHQgYnV0dG9uCisgICAgICAgICAg ICAgICAgICAqLworICAgICAgICAgICAgICAgICAgaWYobXNnKQorICAgICAg ICAgICAgICAgICAgICBzZWxmLm9uU2Vzc2lvbkludmFsaWQuY2FsbChzZWxm LCBtc2cpOworICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg ICAgICAgICBzZWxmLm9uU2Vzc2lvblZhbGlkYXRlZC5jYWxsKHNlbGYsIHRy dWUpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAg LyoqCisgICAgICAgICAgICAgICAgICBJdCBpcyB0aGUgbWFpbiBtb2RlbCB3 aXRoIHNjaGVtYSBkZWZpbmVkCisgICAgICAgICAgICAgICAgICBFdmVyeSB0 aW1lIGEgbmV3IHdpemFyZCBpcyBvcGVuZWQsCisgICAgICAgICAgICAgICAg ICBhIG5ldyBtb2RlbCBzaG91bGQgY3JlYXRlLgorICAgICAgICAgICAgICAg ICovCisgICAgICAgICAgICAgICAgdmFyIEdyYW50V2l6YXJkTW9kZWwgPSBw Z05vZGUuTW9kZWwuZXh0ZW5kKHsKKyAgICAgICAgICAgICAgICAgIGRlZmF1 bHRzOiB7CisgICAgICAgICAgICAgICAgICAgIG9iamVjdHM6IHVuZGVmaW5l ZCwKKyAgICAgICAgICAgICAgICAgICAgYWNsOiB1bmRlZmluZWQKKyAgICAg ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICBzY2hlbWE6IFsK KyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAg IGlkOiAnb2JqZWN0cycsIGxhYmVsOiAne3sgXygiT2JqZWN0cyIpIH19Jywg bW9kZWw6IERhdGFiYXNlT2JqZWN0TW9kZWwsCisgICAgICAgICAgICAgICAg ICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nLCBncm91cDogJ09iamVjdHMnCisg ICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAgICAgICBpZDogJ2FjbCcsIGxhYmVsOiAne3sg XygiUHJpdmlsZWdlcyIpIH19JywKKyAgICAgICAgICAgICAgICAgICAgICBt b2RlbDogcGdBZG1pbi5Ccm93c2VyLk5vZGUuUHJpdmlsZWdlUm9sZU1vZGVs LAorICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJywg Y2FuQWRkOiB0cnVlLAorICAgICAgICAgICAgICAgICAgICAgIGNhbkRlbGV0 ZTogdHJ1ZSwgY29udHJvbDogJ3VuaXF1ZS1jb2wtY29sbGVjdGlvbicKKyAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgXSwKKyAg ICAgICAgICAgICAgICAgIHVybFJvb3Q6IHNhdmVVcmwKKyAgICAgICAgICAg ICAgICB9KTsKKworICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAg ICAgICAgQ3JlYXRlIGluc3RhbmNlIG9mIEdyYW50V2l6YXJkIE1vZGVsLCBw cm92aWRlIHVybFJvb3QKKyAgICAgICAgICAgICAgICAgIG5vZGVfaW5mbyBv YmplY3QsIEdlbmVyYXRlIGZpZWxkcyBvYmplY3RzCisgICAgICAgICAgICAg ICAgKi8KKyAgICAgICAgICAgICAgICB2YXIgbmV3TW9kZWwgPSBuZXcgR3Jh bnRXaXphcmRNb2RlbCh7fSwgeyBub2RlX2luZm86IGluZm8gfSk7CisKKyAg ICAgICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAgICAgIEZldGNoIGRh dGEgZnJvbSBzZXJ2ZXIgYW5kIHNldCBpbnRvIGdyaWQKKyAgICAgICAgICAg ICAgICAgIGFuZCBzaG93L2hpZGUgcHJvZ3Jlc3MgYmFyCisgICAgICAgICAg ICAgICAgKi8KKyAgICAgICAgICAgICAgICAkKCcud2l6YXJkLXByb2dyZXNz LWJhciBwJykuc2hvdygpOworCisgICAgICAgICAgICAgICAgY29sbC5mZXRj aCh7CisgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbihjb2xs ZWN0aW9uLCBkYXRhKSB7CisgICAgICAgICAgICAgICAgICAgICQoJy53aXph cmQtcHJvZ3Jlc3MtYmFyIHAnKS5odG1sKCcnKTsKKyAgICAgICAgICAgICAg ICAgIH0sCisgICAgICAgICAgICAgICAgICByZXNldDogdHJ1ZQorICAgICAg ICAgICAgICAgIH0sIHRoaXMpOworCisgICAgICAgICAgICAgICAgLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAgICAgICAgIC8vICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyAgICAgICAg ICAgIFdpemFyZCBQYWdlIGZvciBEYiBPYmplY3QgVHlwZSAgICAgICAgICAg ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8KKworICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAg ICAgICAgICAgQ3JlYXRlIHdpemFyZCBwYWdlLiBJdCByZW5kZXJzIGEgZ3Jp ZCBvZgorICAgICAgICAgICAgICAgICAgRGF0YWJhc2UgT2JqZWN0IFR5cGVz IHN1Y2ggYXMKKyAgICAgICAgICAgICAgICAgIFNjaGVtYXMsIFZpZXdzIGFu ZCBTZXF1ZW5jZXMgZXRjLgorICAgICAgICAgICAgICAgICAgU2V0IGRlZmF1 bHQgdmFsdWVzCisgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAg ICB2YXIgZGJPYmplY3RUeXBlUGFnZSA9IHNlbGYuZGJPYmplY3RUeXBlUGFn ZSA9IG5ldyBwZ0Jyb3dzZXIuV2l6YXJkUGFnZSh7CisgICAgICAgICAgICAg ICAgICBpZDogMSwKKyAgICAgICAgICAgICAgICAgIHBhZ2VfdGl0bGU6IF8o J09iamVjdCBTZWxlY3Rpb24gKHN0ZXAgMSBvZiAzKScpLAorICAgICAgICAg ICAgICAgICAgZGlzYWJsZV9wcmV2OiB0cnVlLAorICAgICAgICAgICAgICAg ICAgZGlzYWJsZV9uZXh0OiB0cnVlLAorICAgICAgICAgICAgICAgICAgc2hv d19kZXNjcmlwdGlvbjogXygnUGxlYXNlIHNlbGVjdCBvYmplY3RzIGZyb20g dGhlIGJlbG93IGxpc3QuJyksCisgICAgICAgICAgICAgICAgICBzaG93X3By b2dyZXNzX2JhcjogXygnUGxlYXNlIHdhaXQgd2hpbGUgZmV0Y2hpbmcgcmVj b3Jkcy4uLicpLAorICAgICAgICAgICAgICAgICAgbW9kZWw6IG5ld01vZGVs LAorICAgICAgICAgICAgICAgICAgdmlldzogbmV3IChmdW5jdGlvbigpIHsK KworICAgICAgICAgICAgICAgICAgICAvLyBTZXQgcGFnZSBJbnN0YW5jZQor ICAgICAgICAgICAgICAgICAgICB2YXIgcGFnZVZpZXcgPSB0aGlzOworCisg ICAgICAgICAgICAgICAgICAgIF8uZXh0ZW5kKHBhZ2VWaWV3LCB7CisKKyAg ICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZ3JpZCBpZiBpdCBpcyBi ZWZvcmUgcmVuZGVyCisgICAgICAgICAgICAgICAgICAgICAgY2xlYW51cDog ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhp cy5ncmlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3Jp ZC5yZW1vdmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRl IHRoaXMuZ3JpZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5n cmlkID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgICAgICAgICAgICAgLy8gUmVtb3ZlIGdyaWQgZWxlbWVudCBp ZiBleGlzdHMKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmVs KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcy5lbCkucmVt b3ZlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlz LmVsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxl dGUgZ3JpZCBiZWZvcmUgcmVuZGVyCisgICAgICAgICAgICAgICAgICAgICAg Z3JpZDogbnVsbCwKKworICAgICAgICAgICAgICAgICAgICAgIHJlbmRlcjog ZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENy ZWF0ZSBhIGdyaWQgY29udGFpbmVyCisgICAgICAgICAgICAgICAgICAgICAg ICB2YXIgZ3JpZEJvZHkgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJCgnPGRpdiBjbGFzcz0ic2VsZWN0X2RiX29iamVjdHNfY29udGFpbmVy Ij48L2Rpdj4nKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gUmVt b3ZlIGdyaWQgaWYgZXhpdHMgYmVmb3JlIHJlbmRlcgorICAgICAgICAgICAg ICAgICAgICAgICAgaWYgKHRoaXMuZ3JpZCkgeworICAgICAgICAgICAgICAg ICAgICAgICAgICB0aGlzLmNsZWFudXAoKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5pdGlh bGl6ZSBhIG5ldyBHcmlkIGluc3RhbmNlCisgICAgICAgICAgICAgICAgICAg ICAgICB0aGlzLmdyaWQgPSBuZXcgQmFja2dyaWQuR3JpZCh7CisgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbHVtbnM6IF8uY2xvbmUoY29sdW1ucyks CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGws CisgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogImJhY2tn cmlkIHRhYmxlLWJvcmRlcmVkIG9iamVjdF90eXBlX3RhYmxlIgorICAgICAg ICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAg ICAgICAgLy8gUmVuZGVyIHNlbGVjdGlvbiBUeXBlIGdyaWQgYW5kIHBhZ2lu YXRvcgorICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZEJvZHkuYXBwZW5k KCB0aGlzLmdyaWQucmVuZGVyKCkuJGVsKTsKKworICAgICAgICAgICAgICAg ICAgICAgICAgLy8gUmVuZGVyIFNlYXJjaCBGaWx0ZXIKKyAgICAgICAgICAg ICAgICAgICAgICAgIGdyaWRCb2R5LnByZXBlbmQoCisgICAgICAgICAgICAg ICAgICAgICAgICAgIHNlbGYuY2xpZW50U2lkZUZpbHRlci5yZW5kZXIoKS5l bCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzc2lnbiBncmlk Qm9keSBjb250ZW50IHRvIHBhZ2UgZWxlbWVudAorICAgICAgICAgICAgICAg ICAgICAgICAgdGhpcy5lbCA9IGdyaWRCb2R5OworCisgICAgICAgICAgICAg ICAgICAgICAgICAvKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRmV0 Y2ggc2VsZWN0ZWQgbW9kZWxzIGZyb20gY29sbGVjdGlvbiBhbmQKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgbWFrZSByb3dzIGNoZWNrZWQgaW4gZ3Jp ZAorICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAg ICAgICAgICAgIG5ld01vZGVsLmdldCgnb2JqZWN0cycpLmVhY2goZnVuY3Rp b24obSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kZWwg PSBjb2xsLmdldChtLmdldCgnb2JqZWN0X2lkJykpOworICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiAobW9kZWwpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb2xsLnRyaWdnZXIoJ2JhY2tncmlkOnNlbGVjdGVkJywg bW9kZWwsIHRydWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAg ICAgICAgICAgLy8gUmVmcmVzaCBncmlkIHRvIHJlIHJlbmRlciByb3dzLgor ICAgICAgICAgICAgICAgICAgICAgICAgY29sbC50cmlnZ2VyKCdiYWNrZ3Jp ZDpyZWZyZXNoJyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biB0aGlzOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgICB9KSwKKworICAgICAg ICAgICAgICAgICAgYmVmb3JlTmV4dDogZnVuY3Rpb24ob2JqKXsKKyAgICAg ICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworICAgICAgICAgICAg ICAgICAgICBvYmoub3B0aW9ucy5kaXNhYmxlX25leHQgPSB0cnVlOworCisg ICAgICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAgICAgICAg IEVuYWJsZS9EaXNhYmxlIG5leHQgYnV0dG9uIG9mIHByaXZpbGVnZVBhZ2Ug aWYgb2JqZWN0cworICAgICAgICAgICAgICAgICAgICAgIGFyZSBwcmVzZW50 IGluIG1vZGVsCisgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAg ICAgICAgICAgIGlmKCFfLmlzTnVsbChuZXdNb2RlbC5nZXQoJ2FjbCcpKSAm JgorICAgICAgICAgICAgICAgICAgICAgICFfLmlzVW5kZWZpbmVkKG5ld01v ZGVsLmdldCgnYWNsJykpKSB7CisgICAgICAgICAgICAgICAgICAgICAgaWYo bmV3TW9kZWwuZ2V0KCdhY2wnKS5sZW5ndGggPiAwKQorICAgICAgICAgICAg ICAgICAgICAgICAgb2JqLmNvbGxlY3Rpb24uYXQoMSkuc2V0KCdkaXNhYmxl X25leHQnLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgICAgfQorCisg ICAgICAgICAgICAgICAgICAgIC8vIENsZWFuIHRoZSB2aWV3CisgICAgICAg ICAgICAgICAgICAgIGlmIChzZWxmLnZpZXcpIHsKKyAgICAgICAgICAgICAg ICAgICAgICBzZWxmLnZpZXcuY2xlYW51cCgpOworICAgICAgICAgICAgICAg ICAgICAgIGRlbGV0ZSBzZWxmLnZpZXc7CisgICAgICAgICAgICAgICAgICAg ICAgc2VsZi52aWV3ID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg ICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg ICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgICAg ICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg ICAgLy8gICAgICAgICAgICBXaXphcmQgUGFnZSBmb3IgUHJpdmlsZWdlIENv bnRyb2wgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg IC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAv Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAgICAgICAgICAgICAv LyBXaXphcmQgZm9yIFByaXZlbGVnZSBjb250cm9sCisgICAgICAgICAgICAg ICAgdmFyIHByaXZpbGVnZVBhZ2UgPSBzZWxmLnByaXZpbGVnZVBhZ2UgPSBu ZXcgcGdCcm93c2VyLldpemFyZFBhZ2UoeworICAgICAgICAgICAgICAgICAg aWQ6IDIsCisgICAgICAgICAgICAgICAgICBwYWdlX3RpdGxlOiBfKCdQcml2 aWxlZ2VzIFNlbGVjdGlvbiAoc3RlcCAyIG9mIDMpJyksCisgICAgICAgICAg ICAgICAgICBzaG93X2Rlc2NyaXB0aW9uOiBfKCdQbGVhc2Ugc2VsZWN0IHBy aXZpbGVnZXMgZm9yIHRoZSBzZWxlY3RlZCBvYmplY3RzLicpLAorICAgICAg ICAgICAgICAgICAgZGlzYWJsZV9uZXh0OiB0cnVlLAorICAgICAgICAgICAg ICAgICAgbW9kZWw6IG5ld01vZGVsLAorCisgICAgICAgICAgICAgICAgICAv LyBDcmVhdGUgYSB2aWV3IGZ1bmN0aW9uIG9iamVjdAorICAgICAgICAgICAg ICAgICAgdmlldzogbmV3IChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAg ICAgICAgdmFyIHBhZ2VWaWV3ID0gdGhpczsKKyAgICAgICAgICAgICAgICAg ICAgICBfLmV4dGVuZChwYWdlVmlldywgeworCisgICAgICAgICAgICAgICAg ICAgICAgICAvLyBSZW5kZXIgUHJpdmVsZWdlIGNvbnRyb2wgdG8gZ2VuZXJh dGUgaXRzIGh0bWwgbWFya3VwCisgICAgICAgICAgICAgICAgICAgICAgICBy ZW5kZXI6IGZ1bmN0aW9uKCkgeworCisgICAgICAgICAgICAgICAgICAgICAg ICAgIHZhciBvYmpfcHJpdiA9IFtdOworICAgICAgICAgICAgICAgICAgICAg ICAgICBzZWxmLnByaXZBcnJheSA9IF8udW5pcShzZWxmLnByaXZBcnJheSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIF8uZWFjaChzZWxmLnByaXZB cnJheSwgZnVuY3Rpb24ocHJpdil7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2VsZi5vYmpfcHJpdiA9IG9ial9wcml2ID0gXy51bmlvbihvYmpf cHJpdiAsIHByaXZEaWN0W3ByaXZdLmFjbCk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8q KgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmluZSBQcml2TW9k ZWwgYW5kIGl0cyBpbnN0YW5jZS4KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQcml2aWxlZ2VzIGFycmF5IGlzIGdlbmVyYXRlZCBiYXNlZCBvbgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0eXBlIG9mIG5vZGVz IHNlbGVjdGVkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByaXZNb2RlbCA9IHNlbGYu cHJpdk1vZGVsOworICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgUHJp dk1vZGVsID0gcGdOb2RlLk1vZGVsLmV4dGVuZCh7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGVmYXVsdHM6IHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGFjbDogdW5kZWZpbmVkCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz Y2hlbWE6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICdhY2wnLCBsYWJl bDogJ3t7IF8oIlByaXZpbGVnZXMiKSB9fScsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG1vZGVsOiBwZ0FkbWluLkJyb3dzZXIuTm9kZS5Q cml2aWxlZ2VSb2xlTW9kZWwuZXh0ZW5kKHsKKworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIC8vIHByaXZpbGVnZXMgYXJlIHNlbGVjdGVk IGJhc2VkIG9uIG5vZGUgY2xpY2tlZAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHByaXZpbGVnZXM6IG9ial9wcml2CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0pLCB1bmlxdWVDb2wgOiBbJ2dyYW50 ZWUnLCAnZ3JhbnRvciddLCBlZGl0YWJsZTogdHJ1ZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nLCBjYW5B ZGQ6IHRydWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNh bkRlbGV0ZTogdHJ1ZSwgY29udHJvbDogJ3VuaXF1ZS1jb2wtY29sbGVjdGlv bicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgICAg ICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFdoZW4gcHJpdmVsZWdlIGNvbnRy b2wgaXMgcmUtcmVuZGVyZWQsIGluIG9yZGVyIHRvCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmVuZGVyIHByaXZpbGVnZXMgYmFzZWQgb24gb2Jq ZWN0IHR5cGUgc2VsZWN0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGVsZXRlIHByaXZpbGVnZXMgZnJvbSBwcml2TW9kZWwgd2hpY2ggYXJl IG5vdyBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZW50 IGluIG9iamVjdCBwcml2aWxlZ2VzIGFycmF5KG9iamVjdF9wcml2KQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgdmFyIGRhdGEgPSB7fTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgaWYgKHByaXZNb2RlbCkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRhdGEgPSBwcml2TW9kZWwudG9KU09OKCk7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdmFyIHJvbGVQcml2cyA9IGRhdGFbJ2FjbCdd OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaWR4 IGluIHJvbGVQcml2cykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdmFyIHJvbGVQcml2ID0gKHJvbGVQcml2c1tpZHhdKVsncHJpdmlsZWdl cyddLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92 ZUlkeCA9IFtdLCBqOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBmb3IgKGogaW4gcm9sZVByaXYpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdmFyIHAgPSByb2xlUHJpdltqXTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKF8uaW5kZXhPZihvYmpfcHJpdiwg cFsncHJpdmlsZWdlX3R5cGUnXSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZW1vdmVJZHgucHVzaChqKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmb3IgKGogaW4gcmVtb3ZlSWR4KSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJvbGVQcml2LnNwbGljZShqLCAxKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbnN0YW50aWF0ZSBwcml2 TW9kZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdk1vZGVsID0g c2VsZi5wcml2TW9kZWwgPSBuZXcgUHJpdk1vZGVsKGRhdGEsIHsgbm9kZV9p bmZvOiBzZWxmLmluZm8gfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVG8gdHJhY2sgY2hh bmdlcyBpbnRvIG1vZGVsLCBzdGFydCBuZXcgc2Vzc2lvbgorICAgICAgICAg ICAgICAgICAgICAgICAgICBhbmQgQWRkIGV2ZW50IGxpc3RlbmVyIGZvciBw cml2aWxlZ2VzIGNvbnRyb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5wcml2TW9kZWwu c3RhcnROZXdTZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg IHNlbGYucHJpdk1vZGVsLm9uKCdwZ2FkbWluLXNlc3Npb246dmFsaWQnLCBz ZWxmLm9uU2Vzc2lvblZhbGlkYXRlZC5iaW5kKHNlbGYpKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgc2VsZi5wcml2TW9kZWwub24oJ3BnYWRtaW4t c2Vzc2lvbjppbnZhbGlkJywgc2VsZi5vblNlc3Npb25JbnZhbGlkLmJpbmQo c2VsZikpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvKioKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgQ3JlYXRlIEZpZWxkIE9iamVjdCB3aGlj aCBoYXMgcHJvcGVydGllcyBsaWtlCisgICAgICAgICAgICAgICAgICAgICAg ICAgIG5vZGVfZGF0YSwgbm9kZV9pbmZvIHdoaWNoIGlzIHJlcXVpcmVkIGZv ciByZW5kZXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpdmls ZWdlIGNvbnRyb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkcyA9IEJhY2tmb3Jt LmdlbmVyYXRlVmlld1NjaGVtYSgKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNlbGYuaW5mbywgc2VsZi5wcml2TW9kZWwsICdjcmVhdGUnLCBz ZWxmLmQuX3R5cGUsIHNlbGYuZAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHByaXZp bGVnZXNGaWVsZCA9IG5ldyBCYWNrZm9ybS5GaWVsZChmaWVsZHNbMF0uZmll bGRzWzBdKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBy aXZDb250cm9sID0gbmV3IChwcml2aWxlZ2VzRmllbGQuZ2V0KCdjb250cm9s JykpICh7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHBy aXZpbGVnZXNGaWVsZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt b2RlbDogc2VsZi5wcml2TW9kZWwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtl bDogdGhpcy5wcml2Q29udHJvbC5yZW5kZXIoKS4kZWx9OworICAgICAgICAg ICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICAgICAg Ly8gUmVtb3ZlIHRoZSBwcml2aWxlZ2UgY29udHJvbAorICAgICAgICAgICAg ICAgICAgICAgICAgY2xlYW51cDogZnVuY3Rpb24oKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmICh0aGlzLnByaXZDb250cm9sKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcml2Q29udHJvbC5yZW1v dmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGhp cy5wcml2Q29udHJvbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 aGlzLnByaXZDb250cm9sID0gbnVsbDsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgfSksCisKKyAg ICAgICAgICAgICAgICAgIGJlZm9yZVByZXY6IGZ1bmN0aW9uKHdpemFyZE9i aikgeworCisgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgcHJp dmlsZWdlIGNvbnRyb2wKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMu dmlldykgeworICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlldy5jbGVh bnVwKCk7CisgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudmll dzsKKyAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXcgPSBudWxsOwor ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg LyoqCisgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlL0Rpc2FibGUgbmV4 dCBidXR0b24gb2YgRGJPYmplY3RUeXBlIHBhZ2UgaWYgb2JqZWN0cworICAg ICAgICAgICAgICAgICAgICAgIGFyZSBwcmVzZW50IGluIG1vZGVsCisgICAg ICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICB2YXIg b2JqZWN0c01vZGVsID0gbmV3TW9kZWwuZ2V0KCdvYmplY3RzJyk7CisKKyAg ICAgICAgICAgICAgICAgICAgaWYoIV8uaXNVbmRlZmluZWQob2JqZWN0c01v ZGVsKSAmJiAhXy5pc0VtcHR5KG9iamVjdHNNb2RlbCkgJiYKKyAgICAgICAg ICAgICAgICAgICAgICAgIG9iamVjdHNNb2RlbC5sZW5ndGggPiAwKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgd2l6YXJkT2JqLmNvbGxlY3Rpb24uYXQo MCkuc2V0KCdkaXNhYmxlX25leHQnLCBmYWxzZSk7CisKKyAgICAgICAgICAg ICAgICAgICAgICAvLyBEb24ndCBzaG93IHByb2dyZXNzIGJhcgorICAgICAg ICAgICAgICAgICAgICAgIHdpemFyZE9iai5jb2xsZWN0aW9uLmF0KDApLnNl dCgnc2hvd19wcm9ncmVzc19iYXInLCAnJyk7CisgICAgICAgICAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvKioKKyAgICAgICAgICAg ICAgICAgICAgICBXZSdyZSByZS1yZW5kZXJpbmcgdGhlIGNvbnRyb2xzIGFz IHRoZXkgYXJlIGRlbGV0ZWQKKyAgICAgICAgICAgICAgICAgICAgICBiZWZv cmUgaGVhZGluZyB0byBuZXh0IHBhZ2UKKyAgICAgICAgICAgICAgICAgICAg ICBSZWZyZXNoIEJhY2tncmlkIHRvIHJlLXJlbmRlciB0aGUgZWxlbWVudHMg c2VsZWN0ZWQKKyAgICAgICAgICAgICAgICAgICAgICByZS1yZW5kZXIgRmls dGVyCisgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAg ICAgIG5ld01vZGVsLnRyaWdnZXIoImJhY2tncmlkOnJlZnJlc2giLCBuZXdN b2RlbCwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBzZWxmLmNsaWVu dFNpZGVGaWx0ZXIucmVuZGVyKCk7CisgICAgICAgICAgICAgICAgICAgIHJl dHVybiB0cnVlOworICAgICAgICAgICAgICAgICAgfSwKKworICAgICAgICAg ICAgICAgICAgYmVmb3JlTmV4dDogZnVuY3Rpb24oKSB7IHJldHVybiB0cnVl OyB9LAorCisgICAgICAgICAgICAgICAgICBvbk5leHQ6IGZ1bmN0aW9uKG9i ail7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gQXNzaWduIGFjbHMgb2Yg cHJpdk1vZGVsIHRvIG1haW4gbW9kZWwgbmV3TW9kZWwKKyAgICAgICAgICAg ICAgICAgICAgaWYgKCFfLmlzVW5kZWZpbmVkKHNlbGYucHJpdk1vZGVsKSkg eworICAgICAgICAgICAgICAgICAgICAgIG5ld01vZGVsLnNldCh7J2FjbCc6 IHNlbGYucHJpdk1vZGVsLmdldCgnYWNsJyl9KTsKKyAgICAgICAgICAgICAg ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUg cHJpdmlsZWdlIGNvbnRyb2wKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRo aXMudmlldykgeworICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlldy5j bGVhbnVwKCk7CisgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMu dmlldzsKKyAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXcgPSBudWxs OworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg ICAgLy8gRW5hYmxlIGZpbmlzaCBidXR0b24KKyAgICAgICAgICAgICAgICAg ICAgc2VsZi53aXphcmQub3B0aW9ucy5kaXNhYmxlX2ZpbmlzaCA9IGZhbHNl OworCisgICAgICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAgICAg ICAgICAgIHRyaWdnZXJzIHRvIGdldCBTUUwgcXVlcmllcyBkYXRhIHRvIHJl bmRlcgorICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIHJldmlld1NR TFBhZ2UKKyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAg ICAgICAgbmV3TW9kZWwudHJpZ2dlcigncGdhZG1pbi13aXphcmQ6bmV4dHBh Z2U6c3FsJywgeydub2RlX3R5cGUnOiBub2RlX3R5cGUgfSk7CisgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisKKworICAgICAg ICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAg ICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg ICAgICAgLy8gICAgICAgICAgICBSZXZpZXcgU1FMIFF1ZXJ5IFBhZ2UgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg ICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg ICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKyAgICAgICAgICAgICAg ICAvL0NyZWF0ZSBTcWxGaWVsZCBPYmplY3QKKyAgICAgICAgICAgICAgICB2 YXIgc3FsRmllbGQgPSBuZXcgQmFja2Zvcm0uRmllbGQoCisgICAgICAgICAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZDogJ3NxbHRh YicsCisgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IF8oJ1NxbCBUYWIn KSwKKworICAgICAgICAgICAgICAgICAgICAgIC8qKgorICAgICAgICAgICAg ICAgICAgICAgICAgRXh0ZW5kICdTcWxUYWJDb250cm9sJyB0byBkZWZpbmUg bmV3CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAnb25XaXph cmROZXh0UGFnZUNoYW5nZScKKyAgICAgICAgICAgICAgICAgICAgICAgIHdo aWNoIGdldHMgdHJpZ2dlcmVkIG9uIG5leHQgYnV0dG9uCisgICAgICAgICAg ICAgICAgICAgICAgICBjbGljayB0byBmZXRjaCBnZW5lcmF0ZWQgU1FMIHF1 ZXJ5CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgdGhlIHNlbGVjdGVk IGRiIG9iamVjdHMuCisgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgICAgICAgICAgICBjb250cm9sOiBCYWNrZm9ybS5TcWxUYWJDb250 cm9sLmV4dGVuZCh7CisgICAgICAgICAgICAgICAgICAgICAgICBpbml0aWFs aXplOiBmdW5jdGlvbigpIHsKKworICAgICAgICAgICAgICAgICAgICAgICAg ICAvLyBJbml0aWFsaXplIHBhcmVudCBjbGFzcworICAgICAgICAgICAgICAg ICAgICAgICAgICBCYWNrZm9ybS5TcWxUYWJDb250cm9sLnByb3RvdHlwZS5p bml0aWFsaXplLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhpcy5tc3FsX3VybCA9IHNlbGYubXNxbF91 cmw7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVmaW5lIHRy aWdnZXIgZXZlbnRzIGZvciBwcmV2IGFuZCBuZXh0IHBhZ2UKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5vbigncGdhZG1pbi13aXph cmQ6bmV4dHBhZ2U6c3FsJywgdGhpcy5vbldpemFyZE5leHRQYWdlQ2hhbmdl LCB0aGlzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2Rl bC5vbigncGdhZG1pbi13aXphcmQ6cHJldnBhZ2U6c3FsJywgdGhpcy5vbldp emFyZFByZXZQYWdlQ2hhbmdlLCB0aGlzKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg bWV0aG9kIGZldGNoZXMgdGhlIG1vZGlmaWVkIFNRTCBmb3IgdGhlIHdpemFy ZAorICAgICAgICAgICAgICAgICAgICAgICAgb25XaXphcmROZXh0UGFnZUNo YW5nZTogZnVuY3Rpb24oKXsKKworICAgICAgICAgICAgICAgICAgICAgICAg ICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8gRmV0Y2hlcyBtb2RpZmllZCBTUUwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgJC5hamF4KHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1cmw6IHRoaXMubXNxbF91cmwsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdHlwZTogJ0dFVCcsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2FjaGU6IGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRhdGE6IHNlbGYubW9kZWwudG9KU09OKHRydWUsICdHRVQnKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogImpzb24iLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlOiAiYXBwbGlj YXRpb24vanNvbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfSkuZG9u ZShmdW5jdGlvbihyZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzZWxmLnNxbFRhYi5jbGVhckhpc3RvcnkoKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzZWxmLnNxbFRhYi5zZXRWYWx1ZShyZXMuZGF0YSk7 CisgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLmZhaWwoZnVuY3Rpb24o KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC50 cmlnZ2VyKCdwZ2FkbWluLXZpZXc6bXNxbDplcnJvcicpOworICAgICAgICAg ICAgICAgICAgICAgICAgICB9KS5hbHdheXMoZnVuY3Rpb24oKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tb2RlbC50cmlnZ2VyKCdw Z2FkbWluLXZpZXc6bXNxbDpmZXRjaGVkJyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgfSwKKwor ICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlOiBmdW5jdGlvbigpIHsK KworICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGVhciBodG1sIGRv bSBlbGVtZW50cyBvZiBDb2RlTWlycm9yIHNxbCB0YWIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgc2VsZi5zcWxDb250cm9sLnVuYmluZCgpOyAvLyBV bmJpbmQgYWxsIGxvY2FsIGV2ZW50IGJpbmRpbmdzCisgICAgICAgICAgICAg ICAgICAgICAgICAgIHZhciBjbUVsZW0gPSBzZWxmLnNxbENvbnRyb2wuc3Fs VGFiLmdldFdyYXBwZXJFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgIGNtRWxlbS5yZW1vdmUoKTsgCisgICAgICAgICAgICAgICAgICAg ICAgICAgIHNlbGYuc3FsQ29udHJvbC5zcWxUYWIgPSB1bmRlZmluZWQ7Cisg ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg ICAgICB9KQorICAgICAgICAgICAgICAgICAgICB9KSwKKworICAgICAgICAg ICAgICAgICAgLyoqCisgICAgICAgICAgICAgICAgICAgIENyZWF0ZSBzcWxG aWVsZCB2aWV3IGluc3RhbmNlCisgICAgICAgICAgICAgICAgICAgIHRvIHJl bmRlciBpdCBpbnRvIHdpemFyZCBwYWdlCisgICAgICAgICAgICAgICAgICAq LworICAgICAgICAgICAgICAgICAgc3FsQ29udHJvbCA9IHNlbGYuc3FsQ29u dHJvbCA9IG5ldyAoc3FsRmllbGQuZ2V0KCdjb250cm9sJykpKHsKKyAgICAg ICAgICAgICAgICAgICAgZmllbGQ6IHNxbEZpZWxkLAorICAgICAgICAgICAg ICAgICAgICBtb2RlbDogbmV3TW9kZWwKKyAgICAgICAgICAgICAgICAgIH0p OworCisgICAgICAgICAgICAgICAgLy8gV2l6YXJkIGZvciBTUUwgdGFiIGNv bnRyb2wKKyAgICAgICAgICAgICAgICB2YXIgcmV2aWV3U1FMUGFnZSA9IHNl bGYucmV2aWV3U1FMUGFnZSA9IG5ldyBwZ0Jyb3dzZXIuV2l6YXJkUGFnZSh7 CisgICAgICAgICAgICAgICAgICBpZDogMywKKyAgICAgICAgICAgICAgICAg IHBhZ2VfdGl0bGU6IF8oJ0ZpbmFsIChSZXZpZXcgU2VsZWN0aW9uKSAoc3Rl cCAzIG9mIDMpJyksCisgICAgICAgICAgICAgICAgICBzaG93X2Rlc2NyaXB0 aW9uOiBfKCdGb2xsb3dpbmcgcXVlcnkgd2lsbCBiZSBleGVjdXRlZCBvbiB0 aGUgZGF0YWJhc2UgJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICdzZXJ2ZXIgZm9yIHRoZSBzZWxlY3RlZCBvYmplY3RzLCBhbmQgcHJp dmlsZWdlcy4gJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICdQbGVhc2UgY2xpY2sgb24gRmluaXNoIHRvIGNvbXBsZXRlIHRoZSBwcm9j ZXNzLicpLAorICAgICAgICAgICAgICAgICAgbW9kZWw6IG5ld01vZGVsLAor ICAgICAgICAgICAgICAgICAgdmlldzogbmV3KGZ1bmN0aW9uKCkgeworCisg ICAgICAgICAgICAgICAgICAgIC8vIFJlbmRlciBTcWxUYWIgY29udHJvbCB0 byBnZW5lcmF0ZSBpdHMgaHRtbCBtYXJrdXAKKyAgICAgICAgICAgICAgICAg ICAgdmFyIHNxbFRhYkh0bWwgPSBzcWxDb250cm9sLnJlbmRlcigpLiRlbDsK KyAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXIgPSBmdW5jdGlvbigp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGVsOiBzcWxU YWJIdG1sIH07CisgICAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg ICAgICAgICB9KSwKKworICAgICAgICAgICAgICAgICAgYmVmb3JlUHJldjog ZnVuY3Rpb24od2l6YXJkT2JqKSB7CisKKyAgICAgICAgICAgICAgICAgICAg LyoqCisgICAgICAgICAgICAgICAgICAgICAgRW5hYmxlIG5leHQgYnV0dG9u IGlmIHByaXZpbGVnZQorICAgICAgICAgICAgICAgICAgICAgIG1vZGVsIGlz IG5vdCBlbXB0eSBlbHNlIGRpc2FibGUKKyAgICAgICAgICAgICAgICAgICAg ICBuZXh0IGJ1dHRvbgorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgICAgICAgICAgdmFyIGFjbE1vZGVsID0gbmV3TW9kZWwuZ2V0KCdh Y2wnKTsKKworICAgICAgICAgICAgICAgICAgICBpZighXy5pc1VuZGVmaW5l ZCh3aXphcmRPYmouY29sbGVjdGlvbikgJiYKKyAgICAgICAgICAgICAgICAg ICAgICB3aXphcmRPYmouY29sbGVjdGlvbi5tb2RlbHMubGVuZ3RoID4gMCkg eworICAgICAgICAgICAgICAgICAgICAgIGlmKCFfLmlzVW5kZWZpbmVkKGFj bE1vZGVsKSAmJiAhXy5pc0VtcHR5KGFjbE1vZGVsKSAmJgorICAgICAgICAg ICAgICAgICAgICAgICAgICBhY2xNb2RlbC5sZW5ndGggPiAwKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICB3aXphcmRPYmouY29sbGVjdGlvbi5hdCgx KS5zZXQoJ2Rpc2FibGVfbmV4dCcsIGZhbHNlKTsKKyAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAg ICAgICAgICAgICAgICAgICAgICB3aXphcmRPYmouY29sbGVjdGlvbi5hdCgx KS5zZXQoJ2Rpc2FibGVfbmV4dCcsIHRydWUpOworICAgICAgICAgICAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9 LAorICAgICAgICAgICAgICAgIH0pOworCisKKyAgICAgICAgICAgICAgICAv LyBDcmVhdGUgV2l6YXJkIENvbGxlY3Rpb24gb2YgV2l6YXJkIFBhZ2VzCisg ICAgICAgICAgICAgICAgdmFyIFdpemFyZENvbGxlY3Rpb24gPSBCYWNrYm9u ZS5Db2xsZWN0aW9uLmV4dGVuZCh7CisgICAgICAgICAgICAgICAgICBtb2Rl bDogcGdCcm93c2VyLldpemFyZFBhZ2UKKyAgICAgICAgICAgICAgICB9KTsK KworICAgICAgICAgICAgICAgIC8vIEl0IGhvbGRzIGFsbCB0aGUgd2l6YXJk IHBhZ2VzIHRvIGJlIHJlbmRlcmVkCisgICAgICAgICAgICAgICAgdGhpcy53 aXphcmRDb2xsZWN0aW9uID0gbmV3IFdpemFyZENvbGxlY3Rpb24oCisgICAg ICAgICAgICAgICAgICBbZGJPYmplY3RUeXBlUGFnZSwgcHJpdmlsZWdlUGFn ZSwgcmV2aWV3U1FMUGFnZV0KKyAgICAgICAgICAgICAgICApOworCisgICAg ICAgICAgICAgICAgLyoqCisgICAgICAgICAgICAgICAgICBDcmVhdGUgd2l6 YXJkIHdoaWNoIGhhcyBmb2xsb3dpbmcgb3BlcmF0aW9uczoKKyAgICAgICAg ICAgICAgICAgIC0gcmVuZGVycyB3aXphcmQgcGFnZXMKKyAgICAgICAgICAg ICAgICAgIC0gZGVmaW5lcyB0aGUgZmlyc3QgcGFnZSB0byByZW5kZXIgaW4g d2l6YXJkCisgICAgICAgICAgICAgICAgICAtIFNhdmUgdGhlIG1vZGVsIG9u IGZpbmlzaGJ1dHRvbgorICAgICAgICAgICAgICAgICAgLSBSZW1vdmUgd2l6 YXJkIG9uIGNhbmNlbCBidXR0b24KKyAgICAgICAgICAgICAgICAgICovCisg ICAgICAgICAgICAgICAgc2VsZi53aXphcmQgPSBuZXcgKHBnQnJvd3Nlci5X aXphcmQuZXh0ZW5kKHsKKyAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsK KyAgICAgICAgICAgICAgICAgICAgdGl0bGU6IF8oJ0dyYW50IFdpemFyZCcp LCAvKiBNYWluIFdpemFyZCBUaXRsZSAqLworICAgICAgICAgICAgICAgICAg ICB3aWR0aDogJycsCisgICAgICAgICAgICAgICAgICAgIGhlaWdodDogJycs CisgICAgICAgICAgICAgICAgICAgIGN1cnJfcGFnZTogMCwKKyAgICAgICAg ICAgICAgICAgICAgc2hvd19sZWZ0X3BhbmVsOiBmYWxzZSwKKyAgICAgICAg ICAgICAgICAgICAgZGlzYWJsZV9maW5pc2g6IHRydWUKKyAgICAgICAgICAg ICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgIC8vIENhbGxiYWNrIGZv ciBmaW5pc2ggYnV0dG9uCisgICAgICAgICAgICAgICAgICBvbkZpbmlzaDog ZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBtID0gbmV3 TW9kZWwsCisgICAgICAgICAgICAgICAgICAgICAgICBkID0gbS50b0pTT04o J0dFVCcpOworCisgICAgICAgICAgICAgICAgICAgIC8vIFNhdmUgbW9kZWwK KyAgICAgICAgICAgICAgICAgICAgaWYgKGQgJiYgIV8uaXNFbXB0eShkKSAm JiAhXy5pc1VuZGVmaW5lZChkLm9iamVjdHMpKSB7CisgICAgICAgICAgICAg ICAgICAgICAgbS5zYXZlKHt9LCB7CisgICAgICAgICAgICAgICAgICAgICAg ICBhdHRyczogZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRl OiBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlOiBmYWxz ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9u KHJlcykgeworCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJlbGVh c2Ugd2l6YXJkIG9iamVjdHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAg c2VsZi5yZWxlYXNlT2JqZWN0cygpOworICAgICAgICAgICAgICAgICAgICAg ICAgICBzZWxmLmNsb3NlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9 LAorICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKG0s IGpxeGhyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0aWZ5 LnBnTm90aWZpZXIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVy cm9yIiwganF4aHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUygK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ7eyBfKCdFcnJvciBk dXJpbmcgc2F2aW5nIHByb3BlcnRpZXMgLSAlJXMhJykgfX0iCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApLnNwcmludGYoanF4aHIuc3RhdHVz VGV4dCkudmFsdWUoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7 CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgfSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgIC8vIENhbGxiYWNrIGZv ciBjYW5jZWwgYnV0dG9uCisgICAgICAgICAgICAgICAgICBvbkNhbmNlbDog ZnVuY3Rpb24oKSB7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gUmVsZWFz ZSB3aXphcmQgb2JqZWN0cworICAgICAgICAgICAgICAgICAgICBzZWxmLnJl bGVhc2VPYmplY3RzKCk7CisgICAgICAgICAgICAgICAgICAgIHNlbGYuY2xv c2UoKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9 KSkgKHsKKyAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IHRoaXMud2l6 YXJkQ29sbGVjdGlvbiwKKyAgICAgICAgICAgICAgICAgIGVsOiBlbCwKKyAg ICAgICAgICAgICAgICAgIG1vZGVsOiBuZXdNb2RlbAorICAgICAgICAgICAg ICAgIH0pOworCisgICAgICAgICAgICAgICAgLy8gUmVuZGVyIHdpemFyZAor ICAgICAgICAgICAgICAgIHNlbGYud2l6YXJkLnJlbmRlcigpOworICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICAgIH0pOworICAg ICAgICB9CisKKyAgICAgICAgLy8gQ2FsbCBHcmFudCBXaXphcmQgRGlhbG9n CisgICAgICAgIGFsZXJ0aWZ5LndpemFyZERpYWxvZyh0cnVlKTsKKyAgICAg IH0KKyAgICB9OworCisgICAgcmV0dXJuIHBnQnJvd3Nlci5HcmFudFdpemFy ZDsKKyAgfSk7CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi90b29scy9ncmFu dF93aXphcmQvdGVtcGxhdGVzL2dyYW50X3dpemFyZC9zcWwvYWxsb3dlZF9h Y2wuanNvbiBiL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC90ZW1w bGF0ZXMvZ3JhbnRfd2l6YXJkL3NxbC9hbGxvd2VkX2FjbC5qc29uCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkMjFmMTQKLS0tIC9k ZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9ncmFudF93aXphcmQv dGVtcGxhdGVzL2dyYW50X3dpemFyZC9zcWwvYWxsb3dlZF9hY2wuanNvbgpA QCAtMCwwICsxLDMwIEBACit7IyBMaXN0IG9mIGFsbG93ZWQgcHJpdmlsZWdl cyBvZiBTY2hlbWEsIHRhYmxlIHNlcXVlbmNlLCBmdW5jdGlvbiBhbmQgdmll dyAjfQoreyMKKyAgICBGb3JtYXQgZm9yIGFsbG93ZWQgcHJpdmlsZWdlcyBh cmU6CisgICAgIm5vZGVfbmFtZSI6IHsKKyAgICAgICAgInR5cGUiOiAibmFt ZSIsCisgICAgICAgICJhY2wiOiBbLi4uXQorICAgIH0KKyN9Cit7CisgICAg InNjaGVtYSI6IHsKKyAgICAgICAgInR5cGUiOiAiU0NIRU1BIiwKKyAgICAg ICAgImFjbCI6IFsiYSIsICJyIiwgInciLCAiZCIsICJEIiwgIngiLCAidCIs ICJVIiwgIlgiXQorICAgIH0sCisgICAgInRhYmxlIjogeworICAgICAgICAi dHlwZSI6ICJUQUJMRSIsCisgICAgICAgICJhY2wiOiBbImEiLCAidyIsICJk IiwgIkQiLCAieCIsICJ0Il0KKyAgICB9LAorICAgICJ2aWV3IjogeworICAg ICAgICAidHlwZSI6ICJWSUVXIiwKKyAgICAgICAgImFjbCI6IFsiYSIsICJ3 IiwgImQiLCAiRCIsICJ4IiwgInQiXQorICAgIH0sCisgICAgInNlcXVlbmNl IjogeworICAgICAgICAidHlwZSI6ICJTRVFVRU5DRSIsCisgICAgICAgICJh Y2wiOiBbInciLCAiVSJdCisgICAgfSwKKyAgICAiZnVuY3Rpb24iOiB7Cisg ICAgICAgICJ0eXBlIjogIkZVTkNUSU9OIiwKKyAgICAgICAgImFjbCI6IFsi WCJdCisgICAgfQorfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMv Z3JhbnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFudF93aXphcmQvc3FsL2dyYW50 LnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC90ZW1wbGF0 ZXMvZ3JhbnRfd2l6YXJkL3NxbC9ncmFudC5zcWwKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uYWU1OWI1MwotLS0gL2Rldi9udWxsCisr KyBiL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50X3dpemFyZC90ZW1wbGF0ZXMv Z3JhbnRfd2l6YXJkL3NxbC9ncmFudC5zcWwKQEAgLTAsMCArMSwxOSBAQAor eyM9PT09PUdyYW50IFBlcm1pc3Npb25zIG9uIERhdGFiYXNlIE9iamVjdHMg U2VsZWN0ZWQ9PT09I30KK3slIGltcG9ydCAnbWFjcm9zL3NjaGVtYXMvcHJp dmlsZWdlLm1hY3JvcycgYXMgUFJJVklMRUdFICV9Cit7JSBpbXBvcnQgJ21h Y3Jvcy9mdW5jdGlvbnMvcHJpdmlsZWdlLm1hY3JvcycgYXMgUFJJVklMRUdF X0ZVTkNUSU9OICV9Cit7JSBpZiBkYXRhLmFjbCAtJX0KK3slIGZvciBvYmog aW4gZGF0YS5vYmplY3RzIC0lfQoreyUgZm9yIHByaXYgaW4gZGF0YS5hY2wg LSV9Cit7JS0gc2V0IG9ial90eXBlID0gb2JqLm9iamVjdF90eXBlfHVwcGVy IC0lfQoreyMgPT09PT0gaWYgb2JqZWN0X3R5cGUgaXMgRnVuY3Rpb24gdGhl biBhcHBseSBmdW5jdGlvbiBtYXJjcm9zID09PT09ICN9Cit7JSBpZiAob2Jq X3R5cGUgPT0gJ0ZVTkNUSU9OJyBvciBvYmpfdHlwZSA9PSAnVFJJR0dFUiBG VU5DVElPTicpIGFuZCAocHJpdi53aXRoX2dyYW50WydmdW5jdGlvbiddfGxl bmd0aCA+IDAgb3IgcHJpdi53aXRob3V0X2dyYW50WydmdW5jdGlvbiddfGxl bmd0aCA+IDApIC0lfQore3sgUFJJVklMRUdFX0ZVTkNUSU9OLlNFVChjb25u LCAnRlVOQ1RJT04nLCBwcml2LmdyYW50ZWUsIG9iai5uYW1lLCBwcml2Lndp dGhvdXRfZ3JhbnRbJ2Z1bmN0aW9uJ10sIHByaXYud2l0aF9ncmFudFsnZnVu Y3Rpb24nXSwgbnNwbmFtZSwgb2JqLnByb2FyZ3MpfX0KK3slIGVsaWYgKG9i al90eXBlID09ICdTRVFVRU5DRScpIGFuZCAocHJpdi53aXRoX2dyYW50Wyd0 YWJsZSddfGxlbmd0aCA+IDAgb3IgcHJpdi53aXRob3V0X2dyYW50Wyd0YWJs ZSddfGxlbmd0aCA+IDApIC0lfQore3sgUFJJVklMRUdFLlNFVChjb25uLCBv YmpfdHlwZS51cHBlcigpLCBwcml2LmdyYW50ZWUsIG9iai5uYW1lLCBwcml2 LndpdGhvdXRfZ3JhbnRbJ3NlcXVlbmNlJ10sIHByaXYud2l0aF9ncmFudFsn c2VxdWVuY2UnXSwgbnNwbmFtZSApIH19Cit7JSBlbGlmIChvYmpfdHlwZSA9 PSAnVklFVycgb3Igb2JqX3R5cGUgPT0gJ1RBQkxFJykgYW5kIChwcml2Lndp dGhfZ3JhbnRbJ3RhYmxlJ118bGVuZ3RoID4gMCBvciBwcml2LndpdGhvdXRf Z3JhbnRbJ3RhYmxlJ118bGVuZ3RoID4gMCkgLSV9IHsjID09PT09IFZpZXdz IGFyZSBhbHNvIHRhYmxlID09PT09ICN9Cit7JS0gc2V0IG9ial90eXBlID0g J1RBQkxFJyAtJX0KK3t7IFBSSVZJTEVHRS5TRVQoY29ubiwgb2JqX3R5cGUu dXBwZXIoKSwgcHJpdi5ncmFudGVlLCBvYmoubmFtZSwgcHJpdi53aXRob3V0 X2dyYW50Wyd0YWJsZSddLCBwcml2LndpdGhfZ3JhbnRbJ3RhYmxlJ10sIG5z cG5hbWUgKSB9fQoreyUgZW5kaWYgLSV9Cit7JSBlbmRmb3IgLSV9Cit7JSBl bmRmb3IgLSV9Cit7JSBlbmRpZiAtJX0KZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL3Rvb2xzL2dyYW50X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJk L3NxbC9wcm9wZXJ0aWVzLnNxbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2dyYW50 X3dpemFyZC90ZW1wbGF0ZXMvZ3JhbnRfd2l6YXJkL3NxbC9wcm9wZXJ0aWVz LnNxbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTI4 ODhjCi0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvZ3Jh bnRfd2l6YXJkL3RlbXBsYXRlcy9ncmFudF93aXphcmQvc3FsL3Byb3BlcnRp ZXMuc3FsCkBAIC0wLDAgKzEsNjYgQEAKK3sjPT09PT09PT09PT09PT09PT09 PUZldGNoIGxpc3Qgb2YgRGF0YWJhc2Ugb2JqZWN0IHR5cGVzKEZ1bmN0aW9u cywgU2VxdWVuY2UsIFRhYmxlcyBvciBWaWV3KT09PT09PT09PT09PT09PT09 PT0jfQoreyUgaWYgdHlwZSA9PSAnc2NoZW1hJyBvciB0eXBlID09ICd0cmln Z2VyX2Z1bmN0aW9uJyBhbmQgbm9kZV9pZCBhbmQgbm9kZV9uYW1lICV9Cit7 JSBzZXQgZnVuY190eXBlID0gJ1RyaWdnZXIgRnVuY3Rpb24nIGlmIHR5cGUg PT0gJ3RyaWdnZXJfZnVuY3Rpb24nIGVsc2UgJ0Z1bmN0aW9uJyAlfQorU0VM RUNUCisgICAgcGdfZ2V0X2Z1bmN0aW9uX2lkZW50aXR5X2FyZ3VtZW50cyhw ci5vaWQpIEFTIHByb2FyZ3MsCisgICAgeyMgcHIucHJvbmFtZSB8fCAnKCcg fHwgcGdfZ2V0X2Z1bmN0aW9uX2lkZW50aXR5X2FyZ3VtZW50cyhwci5vaWQp IHx8ICcpJyBBUyBuYW1lLCN9CisgICAgcHIucHJvbmFtZSBBUyBuYW1lLAor ICAgICd7eyBmdW5jX3R5cGUgfX0nIEFTIG9iamVjdF90eXBlLAorICAgICd7 eyBuc3BuYW1lIH19JyBBUyBuc3BuYW1lLAorICAgICd7eyAiaWNvbi1mdW5j dGlvbiIgaWYgdHlwZSAhPSAidHJpZ2dlcl9mdW5jdGlvbiIgZWxzZSAiaWNv bi10cmlnZ2VyX2Z1bmN0aW9uIiB9fScgQVMgaWNvbgorRlJPTSBwZ19wcm9j IHByCisgICAgSk9JTiBwZ190eXBlIHR5cCBPTiB0eXAub2lkPXByb3JldHR5 cGUKKyAgICBKT0lOIHBnX25hbWVzcGFjZSB0eXBucyBPTiB0eXBucy5vaWQ9 dHlwLnR5cG5hbWVzcGFjZQorICAgIEpPSU4gcGdfbGFuZ3VhZ2UgbG5nIE9O IGxuZy5vaWQ9cHJvbGFuZworICAgIExFRlQgT1VURVIgSk9JTiBwZ19kZXNj cmlwdGlvbiBkZXMgT04gKGRlcy5vYmpvaWQ9cHIub2lkIEFORCBkZXMuY2xh c3NvaWQ9J3BnX3Byb2MnOjpyZWdjbGFzcykKK1dIRVJFIHByb2lzYWdnID0g RkFMU0UgQU5EIHByb25hbWVzcGFjZSA9IHt7IG5vZGVfaWQgfX06Om9pZAor ICAgIEFORCB0eXBuYW1lIHt7ICdOT1QnIGlmIHR5cGUgIT0gJ3RyaWdnZXJf ZnVuY3Rpb24nIGVsc2UgJycgfX0gSU4gKCd0cmlnZ2VyJywgJ2V2ZW50X3Ry aWdnZXInKQorT1JERVIgQlkgcHJvbmFtZQoreyUgZW5kaWYgJX0KKworeyUg aWYgdHlwZSA9PSAnc2VxdWVuY2UnIGFuZCBub2RlX2lkIGFuZCBub2RlX25h bWUgJX0KK1NFTEVDVAorICAgIGNsLnJlbG5hbWUgQVMgbmFtZSwKKyAgICAn U2VxdWVuY2UnIEFTIG9iamVjdF90eXBlLAorICAgICd7eyBuc3BuYW1lIH19 JyBBUyBuc3BuYW1lLAorICAgICdpY29uLXNlcXVlbmNlJyBBUyBpY29uCitG Uk9NIHBnX2NsYXNzIGNsCisgICAgTEVGVCBPVVRFUiBKT0lOIHBnX2Rlc2Ny aXB0aW9uIGRlcyBPTiAoZGVzLm9iam9pZD1jbC5vaWQgQU5EIGRlcy5jbGFz c29pZD0ncGdfY2xhc3MnOjpyZWdjbGFzcykKK1dIRVJFIHJlbGtpbmQgPSAn UycgQU5EIHJlbG5hbWVzcGFjZSAgPSB7eyBub2RlX2lkIH19OjpvaWQKK09S REVSIEJZIGNsLnJlbG5hbWUKK3slIGVuZGlmICV9CisKK3slIGlmIHR5cGUg PT0gJ3RhYmxlJyBhbmQgbm9kZV9pZCBhbmQgbm9kZV9uYW1lICV9CitTRUxF Q1QgcmVsLnJlbG5hbWUgQVMgbmFtZSwKKyAgICAnVGFibGUnIEFTIG9iamVj dF90eXBlLAorICAgICd7eyBuc3BuYW1lIH19JyBBUyBuc3BuYW1lLAorICAg ICdpY29uLXRhYmxlJyBBUyBpY29uCitGUk9NIHBnX2NsYXNzIHJlbAorICAg IExFRlQgT1VURVIgSk9JTiBwZ190YWJsZXNwYWNlIHNwYyBPTiBzcGMub2lk PXJlbC5yZWx0YWJsZXNwYWNlCisgICAgTEVGVCBPVVRFUiBKT0lOIHBnX2Rl c2NyaXB0aW9uIGRlcyBPTiAoZGVzLm9iam9pZD1yZWwub2lkIEFORCBkZXMu b2Jqc3ViaWQ9MCBBTkQgZGVzLmNsYXNzb2lkPSdwZ19jbGFzcyc6OnJlZ2Ns YXNzKQorICAgIExFRlQgT1VURVIgSk9JTiBwZ19jb25zdHJhaW50IGNvbiBP TiBjb24uY29ucmVsaWQ9cmVsLm9pZCBBTkQgY29uLmNvbnR5cGU9J3AnCisg ICAgTEVGVCBPVVRFUiBKT0lOIHBnX2NsYXNzIHRzdCBPTiB0c3Qub2lkID0g cmVsLnJlbHRvYXN0cmVsaWQKKyAgICBMRUZUIEpPSU4gcGdfdHlwZSB0eXAg T04gcmVsLnJlbG9mdHlwZT10eXAub2lkCitXSEVSRSByZWwucmVsa2luZCBJ TiAoJ3InLCdzJywndCcpIEFORCByZWwucmVsbmFtZXNwYWNlID0ge3sgbm9k ZV9pZCB9fTo6b2lkCitPUkRFUiBCWSByZWwucmVsbmFtZQoreyUgZW5kaWYg JX0KKworeyUgaWYgdHlwZSA9PSAndmlldycgYW5kIG5vZGVfaWQgYW5kIG5v ZGVfbmFtZSAlfQorU0VMRUNUCisgICAgYy5yZWxuYW1lIEFTIG5hbWUsCisg ICAgJ1ZpZXcnIEFTIG9iamVjdF90eXBlLAorICAgICd7eyBuc3BuYW1lIH19 JyBBUyBuc3BuYW1lLAorICAgICdpY29uLXZpZXcnIEFTIGljb24KK0ZST00g cGdfY2xhc3MgYworICAgIExFRlQgT1VURVIgSk9JTiBwZ190YWJsZXNwYWNl IHNwYyBPTiBzcGMub2lkPWMucmVsdGFibGVzcGFjZQorICAgIExFRlQgT1VU RVIgSk9JTiBwZ19kZXNjcmlwdGlvbiBkZXMgT04gKGRlcy5vYmpvaWQ9Yy5v aWQgYW5kIGRlcy5vYmpzdWJpZD0wIEFORCBkZXMuY2xhc3NvaWQ9J3BnX2Ns YXNzJzo6cmVnY2xhc3MpCisgICAgTEVGVCBPVVRFUiBKT0lOIHBnX2NsYXNz IHRzdCBPTiB0c3Qub2lkID0gYy5yZWx0b2FzdHJlbGlkCitXSEVSRSAoKGMu cmVsaGFzcnVsZXMgQU5EIChFWElTVFMgKAorICAgIFNFTEVDVCByLnJ1bGVu YW1lCisgICAgRlJPTSBwZ19yZXdyaXRlIHIKKyAgICBXSEVSRSAoKHIuZXZf Y2xhc3MgPSBjLm9pZCkKKyAgICAgICAgQU5EIChicGNoYXIoci5ldl90eXBl KSA9ICcxJzo6YnBjaGFyKSkgKSkKKyAgICAgICApIE9SIChjLnJlbGtpbmQg PSAndic6OmNoYXIpKQorQU5EIGMucmVsbmFtZXNwYWNlID0ge3sgbm9kZV9p ZCB9fTo6b2lkCitPUkRFUiBCWSBjLnJlbG5hbWUKK3slIGVuZGlmICV9Cg== --047d7bdc8f70aabd2e052f42ae41 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 --047d7bdc8f70aabd2e052f42ae41--