Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1b02Vr-0007jY-Im for pgadmin-hackers@arkaria.postgresql.org; Tue, 10 May 2016 07:55:28 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1b02Vr-00084s-36 for pgadmin-hackers@arkaria.postgresql.org; Tue, 10 May 2016 07:55:27 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1b01W7-0006XQ-0t for pgadmin-hackers@postgresql.org; Tue, 10 May 2016 06:51:39 +0000 Received: from mail-vk0-x235.google.com ([2607:f8b0:400c:c05::235]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1b01Vo-0001Or-Gs for pgadmin-hackers@postgresql.org; Tue, 10 May 2016 06:51:37 +0000 Received: by mail-vk0-x235.google.com with SMTP id m188so4404316vka.1 for ; Mon, 09 May 2016 23:51:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:date:message-id:subject:from:to; bh=VEl70QX4vRVrrTpCbiJhftPYtJ84bS0jJ1HE7N2FTJk=; b=D/weZvUoJrmgE12UEOZW8fHrLs6X/gZsBOWZLkorbzyo+FyQK0txNCEOqjXccSagpy 0DOd3W5qLO6SsfIxqGz8TugERxfewSOdghZWJCtZbSNj+NSieVgybgEQKDEbZUrpy3CC fZgcmRrnJY/bi5Vp0iiHHiLv4vXtDyId7phiEdjG98ELr+++cOcM0EQBKk0FRl77TOnd StF1CrYbp2bX4XOJn9T4V2jVj8IyXj0xrntcohUVmux2SJZGBfZmCNt7UPBWyPPlfZ/5 29Kbe4WmMv2+vkZdGjxmj7TbgzPzkOPNgS6o1ae+t/tu7pW+DGI2m5iw/9BdHuPC4pPS g0Xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to; bh=VEl70QX4vRVrrTpCbiJhftPYtJ84bS0jJ1HE7N2FTJk=; b=JtIjvRSJFNb0cLG52Jb+Ty9WFUJngoIxvUaSf+Ay8yQOYI6S1vMspdQfCPxndhpQu/ DBNDQNT3bYbt9WqTm8KAf1n8YBbuGAfxaKf9oRQcymqxcqI0dAkWdDS9bzM1YVyWKqc1 cnrxopiG15i5QK5cTwO+RUlmjzEftcfQo+nM+TH0UMIDX2RxqavHe4n2D7WDcs5k5E37 uAHpgZW283UIN+VpxcWFIsOT2OoPsynmiR1+3LDvAesDDWgxorLJvm1X4OZAVs83P5de tQRFo33NRznqmNWq1NEN53yoBIv3x6Nn/XE/T3RWvprf35vvM2Sj8KJXvRyGL0SiCu5O f3zg== X-Gm-Message-State: AOPr4FU63+g4cevX5t9+ywJ0ZC4DCMUoXKBXa8dUo1GiGgC3ZvFoPej9nN9f3IXVOm35H3mgKYo18OcOOiYtJtvy MIME-Version: 1.0 X-Received: by 10.31.16.39 with SMTP id g39mr8619822vki.66.1462863079248; Mon, 09 May 2016 23:51:19 -0700 (PDT) Received: by 10.31.189.70 with HTTP; Mon, 9 May 2016 23:51:19 -0700 (PDT) In-Reply-To: References: Date: Tue, 10 May 2016 12:21:19 +0530 Message-ID: Subject: Re: PATCH: Graphincal explain integrated in sql editor From: Sanket Mehta To: pgadmin-hackers Content-Type: multipart/mixed; boundary=001a1143221e31ed120532775a8c X-Pg-Spam-Score: -1.9 (-) 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 --001a1143221e31ed120532775a8c Content-Type: multipart/alternative; boundary=001a1143221e31ed0b0532775a8a --001a1143221e31ed0b0532775a8a Content-Type: text/plain; charset=UTF-8 Hi, As previous patch was not applicable to latest pgadmin4 source code, here is the new patch accommodating latest code. Please do review it and send comments. Regards, Sanket Mehta Sr Software engineer Enterprisedb On Mon, May 9, 2016 at 11:56 PM, Sanket Mehta wrote: > Hi, > > Please ignore previous patch as there was an error in it. > > Error: > Tooltip was not getting disappear when user moves cursor out of image. > > I have attached a proper patch with this mail. > Please consider it for testing. > > Regards, > Sanket Mehta > Sr Software engineer > Enterprisedb > > On Mon, May 9, 2016 at 8:49 PM, Sanket Mehta < > sanket.mehta@enterprisedb.com> wrote: > >> Hi, >> >> PFA revised patch according to Ashesh's comments. >> Please find my response inline. >> >> I am currently adding minimap feature in graphical explain. >> I will send a new patch for the same. >> >> Regards, >> Sanket Mehta >> Sr Software engineer >> Enterprisedb >> >> On Mon, Apr 25, 2016 at 4:36 PM, Ashesh Vashi < >> ashesh.vashi@enterprisedb.com> wrote: >> >>> Hi Sanket, >>> >>> Please find the review comments. >>> - Please add the missing 'explain.css'. >>> >> Done >> >>> - The application should be smart enough to handle conflict in options. >>> i.e. >>> Buffer is not a valid options without EXPLAIN ANALYZE. >>> >> Done >> >>> - A statement having EXPLAIN keywords with different format should at >>> least render the output in the data-grid. >>> i.e. EXPLAIN (FORMAT xml) SELECT * FROM xyz; >>> >> Done >> >>> - Please use the keywords used in the EXPLAIN statement in capital. >>> >> Done >> >>> - Explain should not work with empty string. >>> >> Done >> >>> - Font size in the tooltip is very small. >>> >> Done >> >>> >>> >> - Smoothing the zoom functionality. >>> >> Minimap will be added and zoom functionality will be removed. So it is >> ignored. >> >> - Arrow marker is hardly visible. >>> >> Done. >> >>> >>> >>> -- >>> >>> Thanks & Regards, >>> >>> Ashesh Vashi >>> EnterpriseDB INDIA: Enterprise PostgreSQL Company >>> >>> >>> >>> *http://www.linkedin.com/in/asheshvashi* >>> >>> >>> On Mon, Apr 25, 2016 at 3:06 PM, Sanket Mehta < >>> sanket.mehta@enterprisedb.com> wrote: >>> >>>> Hi, >>>> >>>> This patch includes the patch sent earlier for stand alone graphical >>>> explain. >>>> >>>> And also "horizontal lines are not proper" bug is fixed in the same >>>> which was reported by Dave in previous patch. >>>> >>>> Regards, >>>> Sanket Mehta >>>> Sr Software engineer >>>> Enterprisedb >>>> >>>> On Thu, Apr 21, 2016 at 8:38 PM, Sanket Mehta < >>>> sanket.mehta@enterprisedb.com> wrote: >>>> >>>>> Hi Team, >>>>> >>>>> PFA the first patch for graphical explain integrated in sql editor. >>>>> >>>>> Below are the few things which are different from previous patch which >>>>> was sent for stand alone graphical explain. >>>>> >>>>> - Now user can select Explain/Explain Analyze with four optional >>>>> properties (Verbose, costs, timing and buffers) >>>>> >>>>> - Initially graph will be scale (according to only its width not >>>>> height) to fit to screen so no blank space will be there in case of very >>>>> large graph. >>>>> >>>>> - Along with zoom in/out button, "zoom to original" button is also >>>>> provided, by clicking on which graph will be scale to its original size >>>>> (not same as initial one which is according to screen size). >>>>> >>>>> Please do review this patch and let me know in case you have any >>>>> comments. >>>>> >>>>> >>>>> Regards, >>>>> Sanket Mehta >>>>> Sr Software engineer >>>>> Enterprisedb >>>>> >>>> >>>> >>> >> > --001a1143221e31ed0b0532775a8a Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

As previous patch was not applicabl= e to latest pgadmin4 source code, here is the new patch accommodating lates= t code.
Please do review it and send comments.

<= div dir=3D"ltr">Regards,
Sanket Mehta
Sr Software engineer
Enterprisedb

On Mon, May 9, 2016 at 11:56 PM, Sanket Meht= a <sanket.mehta@enterprisedb.com> wrote:
Hi,

Please i= gnore previous patch as there was an error in it.

= Error:
Tooltip was not getting disappear when user moves cursor o= ut of image.

I have attached a proper patch with t= his mail.
Please consider it for testing.

Regar= ds,
Sanket Mehta
Sr Software engineer
Enterprisedb<= /div>

On Mon, May 9,= 2016 at 8:49 PM, Sanket Mehta <sanket.mehta@enterprisedb.com<= /a>> wrote:
Hi= ,

PFA revised patch according to Ashesh's comments.<= /div>
Please find my response inline.

I am cur= rently adding minimap feature in graphical explain.
I will send a= new patch for the same.

Regards,
Sanket Mehta
Sr Sof= tware engineer
Enterprisedb

On Mon, Apr 25, 2016 at 4:36 PM= , Ashesh Vashi <ashesh.vashi@enterprisedb.com> w= rote:
Hi Sanket,
Please find the review comments.
- Please add the mis= sing 'explain.css'.
Done=C2=A0<= /div>
- The appli= cation should be smart enough to handle conflict in options.
=C2= =A0 =C2=A0i.e.
=C2=A0 =C2=A0Buffer is not a valid options without= EXPLAIN ANALYZE.
Done=C2=A0
- A statement having = EXPLAIN keywords with different format should at least render the output in= the data-grid.
=C2=A0 i.e. EXPLAIN (FORMAT xml) SELECT * FROM xy= z;
Done=C2=A0
- Please use the keywords used in th= e EXPLAIN statement in capital.
Done=C2= =A0
- Expla= in should not work with empty string.
D= one=C2=A0
-= Font size in the tooltip is very small.
Done=C2=A0
=C2=A0
- Smoothing the zoom functionality.
Minimap will be added and zoom functionality will be removed. So it= is ignored.

- Arrow marker is hardly visible.
=
Done.=C2=A0


--

Thanks & Regards,

Ashesh Vashi
EnterpriseDB INDIA: Enterprise PostgreSQL Company

<= br>

<= a href=3D"http://www.linkedin.com/in/asheshvashi" target=3D"_blank">http= ://www.linkedin.com/in/asheshvashi

<= div>

On Mon, Apr 25, 2016 at 3:06 PM, Sanket Meht= a <sanket.mehta@enterprisedb.com> wrote:
Hi,

This pat= ch includes the patch sent earlier for stand alone graphical explain.
=

And also "horizontal lines are not proper" bu= g is fixed in the same which was reported by Dave in previous patch.
<= /div>

Regards,
Sanket Mehta
Sr Software engineer
Enterprisedb

On Thu, Apr 21, 2016 at 8:3= 8 PM, Sanket Mehta <sanket.mehta@enterprisedb.com> wrote:
Hi Team,
<= br>
PFA the first patch for graphical explain integrated in sql e= ditor.

Below are the few things which are differen= t from previous patch which was sent for stand alone graphical explain.

=C2=A0- =C2=A0Now user can select Explain/Explain Ana= lyze with four optional properties (Verbose, costs, timing and buffers)

=C2=A0- Initially graph will be scale (according to o= nly its width not height) to fit to screen so no blank space will be there = in case of very large graph.

- Along with zoom in/= out button, "zoom to original" button is also provided, by clicki= ng on which graph will be scale to its original size (not same as initial o= ne which is according to screen size).

Please do r= eview this patch and let me know in case you have any comments.
<= br>

Regards,
San= ket Mehta
Sr Software engineer
Enterprisedb
=





--001a1143221e31ed0b0532775a8a-- --001a1143221e31ed120532775a8c Content-Type: text/x-patch; charset=UTF-8; name="integrated_graphical_explainV5.patch" Content-Disposition: attachment; filename="integrated_graphical_explainV5.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_io12vk4h1 ZGlmZiAtLWdpdCBhL2xpYnJhcmllcy50eHQgYi9saWJyYXJpZXMudHh0Cmlu ZGV4IDlmY2Y3NTUuLmFkMWMwMDQgMTAwNjQ0Ci0tLSBhL2xpYnJhcmllcy50 eHQKKysrIGIvbGlicmFyaWVzLnR4dApAQCAtMjcsMyArMjcsNCBAQCBiYWNr Z3JpZC1maWx0ZXIgICAgIDAxYjJiMjEgICAgIE1JVCAgICAgICAgICBodHRw czovL2dpdGh1Yi5jb20vd3l1ZW5oby9iYWNrZ3JpZAogYmFja2JvbmUucGFn aW5hdG9yICAyLjAuMyAgICAgICBNSVQgICAgICAgICAgaHR0cDovL2dpdGh1 Yi5jb20vYmFja2JvbmUtcGFnaW5hdG9yL2JhY2tib25lLnBhZ2luYXRvcgog YmFja2dyaWQtcGFnaW5hdG9yICAwMzYzMmRmICAgICBNSVQgICAgICAgICAg aHR0cHM6Ly9naXRodWIuY29tL3d5dWVuaG8vYmFja2dyaWQtcGFnaW5hdG9y CiBiYWNrZ3JpZC1zZWxlY3QtYWxsIDFhMDAwNTMgICAgIE1JVCAgICAgICAg ICBodHRwczovL2dpdGh1Yi5jb20vd3l1ZW5oby9iYWNrZ3JpZC1zZWxlY3Qt YWxsCitTbmFwLnN2ZyAgICAgICAgICAgIDAuNC4xICAgICAgIEFQQUNIRSAg ICAgICBodHRwOi8vc25hcHN2Zy5pby8KZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL21pc2MvX19pbml0X18ucHkgYi93ZWIvcGdhZG1pbi9taXNjL19faW5p dF9fLnB5CmluZGV4IGY0NjFjYmUuLjMzYzY5M2UgMTAwNjQ0Ci0tLSBhL3dl Yi9wZ2FkbWluL21pc2MvX19pbml0X18ucHkKKysrIGIvd2ViL3BnYWRtaW4v bWlzYy9fX2luaXRfXy5weQpAQCAtNiwyOCArNiw1OSBAQAogIyBUaGlzIHNv ZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQb3N0Z3JlU1FMIExpY2Vu Y2UKICMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KICIiIkEg Ymx1ZXByaW50IG1vZHVsZSBwcm92aWRpbmcgdXRpbGl0eSBmdW5jdGlvbnMg Zm9yIHRoZSBhcHBsaWNhdGlvbi4iIiIKIAotaW1wb3J0IGRhdGV0aW1lCi1m cm9tIGZsYXNrIGltcG9ydCBzZXNzaW9uLCBjdXJyZW50X2FwcAorZnJvbSBm bGFzayBpbXBvcnQgdXJsX2ZvciwgcmVuZGVyX3RlbXBsYXRlCiBmcm9tIHBn YWRtaW4udXRpbHMgaW1wb3J0IFBnQWRtaW5Nb2R1bGUKIGltcG9ydCBwZ2Fk bWluLnV0aWxzLmRyaXZlciBhcyBkcml2ZXIKK2ltcG9ydCBjb25maWcKIAog TU9EVUxFX05BTUUgPSAnbWlzYycKIAotIyBJbml0aWFsaXNlIHRoZSBtb2R1 bGUKLWJsdWVwcmludCA9IFBnQWRtaW5Nb2R1bGUoTU9EVUxFX05BTUUsIF9f bmFtZV9fLAotICAgICAgICAgICAgICAgICAgICAgICAgICB1cmxfcHJlZml4 PScnKQorY2xhc3MgTWlzY01vZHVsZShQZ0FkbWluTW9kdWxlKToKIAotIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQSBzcGVjaWFsIFVSTCB1 c2VkIHRvICJwaW5nIiB0aGUgc2VydmVyCi0jIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIworICAgIGRlZiBnZXRfb3duX2phdmFzY3JpcHRzKHNlbGYp OgorICAgICAgICBzY3JpcHRzID0gW3sKKyAgICAgICAgICAgICAgICAnbmFt ZSc6ICdwZ2FkbWluLm1pc2MuZXhwbGFpbicsCisgICAgICAgICAgICAgICAg J3BhdGgnOiB1cmxfZm9yKCdtaXNjLmluZGV4JykgKyAnZXhwbGFpbi9leHBs YWluJywKKyAgICAgICAgICAgICAgICAncHJlbG9hZGVkJzogRmFsc2UKKyAg ICAgICAgICAgICAgICB9LHsKKyAgICAgICAgICAgICAgICAnbmFtZSc6ICdz bmFwLnN2ZycsCisgICAgICAgICAgICAgICAgJ3BhdGgnOiB1cmxfZm9yKAor ICAgICAgICAgICAgICAgICAgICAnbWlzYy5zdGF0aWMnLCBmaWxlbmFtZT0n ZXhwbGFpbi9qcy8nICsgKAorICAgICAgICAgICAgICAgICAgICAgICAgJ3Nu YXAuc3ZnJyBpZiAgY29uZmlnLkRFQlVHIGVsc2UgJ3NuYXAuc3ZnLW1pbicK KyAgICAgICAgICAgICAgICAgICAgICAgICkpLAorICAgICAgICAgICAgICAg ICdwcmVsb2FkZWQnOiBGYWxzZQorICAgICAgICAgICAgICAgICB9XQorICAg ICAgICByZXR1cm4gc2NyaXB0cworCisgICAgZGVmIGdldF9vd25fc3R5bGVz aGVldHMoc2VsZik6CisgICAgICAgIHN0eWxlc2hlZXRzID0gW10KKyAgICAg ICAgc3R5bGVzaGVldHMuYXBwZW5kKHVybF9mb3IoJ21pc2Muc3RhdGljJywg ZmlsZW5hbWU9J2V4cGxhaW4vY3NzL2V4cGxhaW4uY3NzJykpCisgICAgICAg IHJldHVybiBzdHlsZXNoZWV0cwogCisgIyBJbml0aWFsaXNlIHRoZSBtb2R1 bGUKK2JsdWVwcmludCA9IE1pc2NNb2R1bGUoTU9EVUxFX05BTUUsIF9fbmFt ZV9fLCBzdGF0aWNfdXJsX3BhdGg9Ii9zdGF0aWMiKQorCisgIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAjIEEgc3BlY2lhbCBVUkwgdXNlZCB0 byAicGluZyIgdGhlIHNlcnZlcgorICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCisKK0BibHVlcHJpbnQucm91dGUoIi8iKQorZGVmIGluZGV4KCk6 CisgICAgcmV0dXJuICcnCiAKIEBibHVlcHJpbnQucm91dGUoIi9waW5nIiwg bWV0aG9kcz0oJ2dldCcsICdwb3N0JykpCiBkZWYgcGluZygpOgotICAgICIi IkdlbmVyYXRlIGEgIlBJTkciIHJlc3BvbnNlIHRvIGluZGljYXRlIHRoYXQg dGhlIHNlcnZlciBpcyBhbGl2ZS4iIiIKLSAgICBkcml2ZXIucGluZygpCisg ICAgIGRyaXZlci5waW5nKCkKKworZGVmIGRlbW8oKToKKyAgICByZXR1cm4g cmVuZGVyX3RlbXBsYXRlKCdkZW1vX2V4cGxhaW4uaHRtbCcpCisKK0BibHVl cHJpbnQucm91dGUoIi9leHBsYWluL2V4cGxhaW4uanMiKQorZGVmIGV4cGxh aW5fanMoKToKKyAgICByZXR1cm4gcmVuZGVyX3RlbXBsYXRlKCJleHBsYWlu L2pzL2V4cGxhaW4uanMiKQogCi0gICAgcmV0dXJuICJQSU5HIgorQGJsdWVw cmludC5yb3V0ZSgiL3NhbXBsZSIpCitkZWYgc2FtcGxlKCk6CisgICAgcmV0 dXJuIHJlbmRlcl90ZW1wbGF0ZSgnc2FtcGxlLmh0bWwnKQpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9jc3MvZXhwbGFp bi5jc3MgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2Nzcy9l eHBsYWluLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li40OWE0YmM0Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9jc3MvZXhwbGFpbi5jc3MKQEAgLTAsMCArMSw1 NiBAQAorLnBnLWV4cGxhaW4tem9vbS1hcmVhIHsKKyAgICBwb3NpdGlvbjog YWJzb2x1dGU7CisgICAgdG9wOiA1cHg7CisgICAgbGVmdDogNXB4OworICAg IG9wYWNpdHk6IDAuNTsKKyAgICBjdXJzb3I6IHBvaW50ZXI7Cit9CisKKy5w Zy1leHBsYWluLXpvb20tYnRuIHsKKyAgICB0b3A6IDVweDsKKyAgICBtaW4t d2lkdGg6IDI1cHg7CisgICAgY3Vyc29yOiBwb2ludGVyOworICAgIGJvcmRl cjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OworfQorCisucGctZXhwbGFpbi16 b29tLWFyZWE6aG92ZXIgeworICAgb3BhY2l0eTogMTsKK30KKworLmV4cGxh aW4tdG9vbHRpcCB7CisgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CisgIHRleHQt YWxpZ246IGxlZnQ7CisgIHdoaXRlLXNwYWNlOiBub3dyYXA7CisgIGxpbmUt aGVpZ2h0OiAxMHB4ICFpbXBvcnRhbnQ7CisgIHBhZGRpbmc6IDJweCAhaW1w b3J0YW50OworICBmb250LXNpemU6IHNtYWxsOworfQorCit0ZC5leHBsYWlu LXRvb2x0aXAtdmFsIHsKKyAgZGlzcGxheTogdGFibGUtY2VsbDsKKyAgdGV4 dC1hbGlnbjogbGVmdDsKKyAgd2hpdGUtc3BhY2U6IHByZS13cmFwOworICBm b250LXNpemU6IHNtYWxsZXI7Cit9CisKKy5wZ2FkbWluLWV4cGxhaW4tdG9v bHRpcCB7CisgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKKyAgcGFkZGluZzo1cHg7 CisgIGJvcmRlcjogMXB4IHNvbGlkIHdoaXRlOworICBvcGFjaXR5OjA7Cisg IGNvbG9yOiBjb3Juc2lsazsKKyAgYmFja2dyb3VuZC1jb2xvcjogIzAxMDEy NTsKK30KKworLnBnYWRtaW4tdG9vbHRpcC10YWJsZSB7CisgIGJvcmRlci1j b2xsYXBzZTogY29sbGFwc2U7CisgIGJvcmRlci1zcGFjaW5nOiAxcHg7Cisg IHRvcDogYXV0bzsKKyAgbGVmdDogYXV0bzsKK30KKworLnBnYWRtaW4tZXhw bGFpbi1jb250YWluZXIgeworICBoZWlnaHQ6IDEwMCU7CisgIHdpZHRoOiAx MDAlOworICBvdmVyZmxvdzogYXV0bzsKK30KXCBObyBuZXdsaW5lIGF0IGVu ZCBvZiBmaWxlCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF9hZ2dyZWdhdGUucG5nIGIvd2ViL3BnYWRtaW4v bWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfYWdncmVnYXRlLnBuZwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwLi42YmZlNzVkOTA5ZjUwOTJjNGQzYmE4OTc4 Yzc1ZmJjNTdkN2Y2MDZkCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA1NzQK emNtVi1FMD5TLT5QKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcxXkBz Njl6VGUmMDAwMDRiMyNjfTJuWXhXCnpkPGJOUzAwMDA5YTdiQm0wMDBmdzAw MGZ3MFlXSTdjbU16WjhGV1FoYlc/OTtiYSFFTFdkTF9+Y1A/cGVZamF+Xgp6 YUFodVVhJVk/RkpRQEgxMGxQXj1LfiFqZz9VX3cjISFRcz1wTnJSNzZuY2BK QWlFeWZ5UFV1JEY/NWxnITlgdEUKenJWZG9yakk2TyMqQj1OMVE0fkdUazd1 T0RJbVokN1FoRWNxYmJ7MlQhK15Bc05sbnZxen0wdiFPWkNwVmNnK3UpCnpT bDAzb0gteWxjR3khKUZqMDl1PVVOPiRtTUlYKyZIfGI8YWpQIWd6cHtmPE4y dDM4ZTEofU9ZeihYKV5aOVNEbQp6YUwkUGImO2NYeDg1dHdjM0QrOX1ZWXdX dFgobjYxdGdMQVpWaEEmQTBaRG94YG19Zl9vJjtMcD0zXnxUWkFtND8KekI4 RC11dzJIayY3N3hMfkdEK0g4WWh7TCstRH5vblJVNjROJG1De3o5WmBaPDQk JXV5RG4odFV1QkJxaVRFPkAqCnpuZTY+WURWVklUXnxZfHUmMiUrWUt4UTRI IVpLTjgrVWswa3dKS1BqVyY8KD5AJFBqQWU0UkNPblNuJU5yMCg9UAp6WWl8 ZkowNFZfaG5MJGNIMEszJiU7c3pfVj1CZ1FEKWNtJCkydnZoczZAKl9pc2Ry QmZjOGtEe3lnPTdna3RJVEYKeitQR0Z1MiEwT2VMV2d1PjVMRnAzRDl4b3Vy TCFiUXUlYT93ZHtyUnFGSXZpKyt7PVEhJj5hYVYlS1Rhe2RTOzJjCnokNW8z SWhFT1R5VDM3eDYxcEszMC1KWDRLYkFTN1BrPDU7Ul9TUnVzPmpiR3lDckVB ajAhI1g/UFd1ck95OHIrSApNMDcqcW9NNk48JGY+VlUtJF5aWlcKCmxpdGVy YWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21p c2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2FwcGVuZC5wbmcgYi93ZWIvcGdh ZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9hcHBlbmQucG5nCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAxN2EyMDY4YjczNWYxM2NiODlhM2Jj YjI4MzJlNTg4MGQxN2RmNTYKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEx NjIKemNtVjs1MWE8cH5QKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcw e3tSM0RkQmo3MDAwNGlQKXQtczAwMDFXCnpycEdwaiFFZXAoTGNRcm56VWco Jj98SVBnUmxAMHApYk03PT59dHZFWl80WUkrM3xiTT9TaiRtcnJ6PzcpYjVo agp6QDJ9elcxKmhSbiFSWl5XPDZGaCtWI24oXng4K2QyPVdFQzRhK2FhTmsy ZHUxJG5mbTlAOU1TaD45cTNnI3FIJj4Kej9jfWlSPEZON1MhfD4/Qj4pKTtH LW1MMX50TUJCJD4qaztEPiRkNk9uJnt0fD8maD1TK21gMG9sPGVXSTxJPDFm CnooMmVRWnNwe2pMPS1ycyope14xT2l8Tl4/PGtnWW4ofiNvTWpPZj48QDk0 QWI7az9KSGJAMWxFPWhVUjspMSZPJgp6eCF9ciktbz1JOSEtVTx6ZzY3ZW8t XmhwTSYhT2hncVRJaUw8aiRZKD1EX0NDcXdDcVc8anRQciUlMD1ScDQre0QK eitQWnkpc2JvQCg4S3VpKXNMKkp1KW9pWlhha0FpY3dkSHp9bUM8SHYoYVgm N3l1UiRkendPUz5eM2w9cSFOVHN0CnojUDhHOF5WUVkjJGpJPT8kPz9qfEAh OHQtLXJvMXUqWSlBeV9xQElBcj5XK3NzXmBEST95YXhzdWQoVUgjcVk8Kwp6 QDNwcTt4NDclTHgkTS1gXnZCMldpSSg+ezAwMDAxYlclPUowNl55MFcmaSpI MzI7YlJhe3ZHVU5Ce3I7TkJ+QzMKellkIXp+MHpwWWNLfnpZYD9VM3RKNT5Y aCY/U3pHZXFKJExMRD1mR08lU0IqZWsoKD5ZTylpMlczdk9rI0NTWWk0Cnpu UmZTSVorOW1mdXlaSUpYWmxkamhqLT9rZDRLMFEmb2VVZVUjZX4oTVp9M2km YHBoSV5jSzNVKW9SRGsqcXl0Jgp6YVdwPW0qSDVDIURUQ28yIVhnQEAoS3cy eE8oeFRRXnVUTzM+KEluUXR5WWh3V0BkQi1He3xOOCZzYHA9ZTxuXkcKejA8 I3YyVyVnb1BEYXI7bWB5QjBuZDhkblUwfldEKEpSWFpXeStIWVYzeDJRJWY8 WUZYcC1gOWBqNkA8PDhDaDdnCnoxMDlTO294cF57dkdeZHc4O0x8SEBHa31l R19jVmBrXnljaDdVU3tBan0jUU90ZlpqVDZwV24wOXEwS0o3SV9TYwp6aCFn TVBeOyYxYT1KKHFqOzl5emozYjs4Z29gT181b3lwPXFDYTNUJVUhK0pSTHZv NShFWFBBU3pnajViay1sUCsKek8wbkA9dTlTdyVZTjFkakEoeEJnT1FuMVUp KFZ3TTZfNDJiX0JwdkYqNkNXOFFeZUkyblQ7JUQlaGhWXys4VDR2CnpFSVNW PzQ4eXIwI3EoK1R7azNBYjJEUXopZk9pMnA4Y24kNTZpYUd+ZTB+RnBsfWUp dV49N2p2OzFNPkZ4S3dQcAp6KHI5ZGdLdF9Ib3clVGFPI3stYWNoVTRVeF9f VUl1U1hOVGhsQHY4VzVVI0RVdDd9VyNCNW93Jk56WWFQTWtKbS0KemArMyNC NXYxSH5LTnFuWihNOC1BZHQ3PXF2UU9XdTtfcDF2cVpjQV5CWXRoemw4NGV1 TmZCfTQ1TllTdD9ydXdKCnpjbFAjUE9XcG0wSDsyKzt0S0J9NWo9SjZCdy1P ZTRjWElPblJPKzBhZWZUSlNgdXllVmo/X0JzYmxURmxeWmtTNAp6emxqVz08 cUQxY2xsbChSLXtiMmc7JCg2RjAwMVIpTU9idVhWUlU2V1Z7JkMtYlklY0NG ZmxNS0YpfVNNRjtwQHoKekl5NXNuRyZDelBIOTlhYklHSDZMMDAwMGJiVlhR bldNT249SSZFKWNYPVpyPEdCN2JQRWlnR1BGZm1qekdkZVVoCmNJeHNkWEZm fT9iRnZeIXp0TjtLMjA3KnFvTTZOPCRnMSNBYlVqUDZBCgpsaXRlcmFsIDAK SGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0 YXRpYy9leHBsYWluL2ltZy9leF9ibXBfYW5kLnBuZyBiL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2JtcF9hbmQucG5nCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLjY0ZDU4NjlkY2ZjZjlkOTRkMDMxZmEwNjhj ZmY5M2VhOTI5MTgwYjIKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEwMDYK emNtVjxLMH09ZCpQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tS M0RkQmo3MDAwNClQKXQtc21EMmtGCnowMDNyZChSNmZsYiMtLWljNk43bmNZ MW55SGkqR3tkd1lDKmUxM2pAZlBqRjRmYFdzQ2dNQF5IaGxodVZoPV99ZQp6 aTthenFqKmdDR21DJW9ta0MyZCVrJiUmJmo9eiRVbEVJSFFtNmVyYGxIR2Nx c2hPRlhvU2RBVm99UWJXI0dqdl4KenJseksrcj5EODZhO1RgTlBRSz41cyZs S1d0R2xkcHlSQ011dCp1KFk9ZFB9PHlzJnEjdWRsdGFkOEA0R3pPczZXCnp4 IWJhYHZTaHtSeDN7O213Q1p1bz9BcDcyZGR9P0l5QH1rdWZWe296eXVJeish R2VSKT9aZDt2LU5KKnchUzJTIQp6Iyo1Vk0tXlBhRCRjS3tFQDVhYVA7TDNe MCVGMn0zQFoteSM8SUpBcSY3UmBXanBXWHMlKzJ4NSZocThacTJ8JHwKeik2 PihZLXR5KHZsamhXPCl6I0pLKXVwWjleVkhQeT0rfnlgKlFlXih3Jn5pYT5E c0I8K1M9KmRzX05YVD4pV3s4CnorfXojVy1Sc2AwP0FeS0Utcm5yc3Q/Yn5n P2NjbEotdUNSYHVpQGUwP0JsVEY7Xk9iKnp2Ym9TQGFEa3E9ZlVVYQp6PWpy TGBAJDFDdT5ndz9EQGJVNVNeNzhXWV5ZaXVmXzRmQW1gMXR0d2BUNzAqe3J+ Xn1DOSYlTjAwMDAxYlclPUoKejA2XnkwVyZpKkgzMjtiUmF7dkdmNjk1MVU2 OUU5NG9FUUtBMHE7cGZLfnpZYD9VWSRsNkcwUyhiOH0tRGkza2NQCnorT28p XmgkNGJ3bHRvcXZMP0REe01qZl9uQnFEfk8yP0F+eW1peER6byo5YSpHbX0p TUM/N1p2e2NgSzhHdns+UQp6dkRxJGtvfm85KHM/UUYod0whTjRrKjUyR0px d2F4QFdKRXRpVXV+UnJ9ZVNoRD8mVk9jYUsqcGohVnVnYj1zZyMKemZZeyVA ZSlEZUtlcztpcXJxayZ5Q1BEX0Qhci1DXk5rNDxHV01SbHhfejBFPT1geFZE RV9mbkZqPE9KQz5Qd3VKCnpRIyE9OWxGODRUQkJhKk5SalZPaTlMUDFJQV5u VzItQEBmS3cqMUw8OzhvcGFHYWlwYGhfbD4rTWxCMUc2U0c5Uwp6PSt1JDtC WH00VUJrJlJvPE89PkVgaCsoTzFaRSo+PDxmQER2e0hzRUk8b3UjP25TSGBg fFpOKFNVUlYtJXI+SHQKek5Yb28xcVArJmhZZGdsPjxrSntzdE1IQmtyem9v eUtzSl5OZ19jcWxTPSNZQWpwM3pPM0BiUGludUgwKHZAeFBHCnotdGh+KFQh bjJNUyg8PXgjbmdwZyVQJSM+ZWY5cG90NkE5bWNyTjVIMygteGkkP1J7cEFl UWZRQiY4X0lzJWN8SAp6RzV2e1FEYyhKeHsySFRnTylpSjQ7ci10Vj57UFI/ JUNlbFcqY1VuYF5+MjsqN3okYyRyTGtieiFRPiUkNiliRiMKemdETWhXMV5y PFghOVhCa3Y2VXk0KkgpZigzSGJlQ15FWS1IQCVLWFNqUUxpSTVNTjt+R2RZ bypTOzlWX0ZJPVI/CmNGN3pNaUEwP0BxSWp1PjlXJmkqSDA3KnFvTTZOPCRm PHFmTE84QGA+CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQg YS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9ibXBf aGVhcC5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2lt Zy9leF9ibXBfaGVhcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjY1 N2Q4YzM5MzI4YmZjODA3NTFjNjBkYjlkM2FiNDM0MWMwZGUzNQpHSVQgYmlu YXJ5IHBhdGNoCmxpdGVyYWwgMTEwNgp6Y21WLVkxZy1tdFApPGg7M0t8TGsw MDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0aVApdC1zMDAwMDAK ejAwM3JkKE5je1dIaSpHb2xfRllAV25gOCkzOH5AfHRLd3ZwJn5jKFVXfHE7 N2o9I1o9SGghVVNrQ05TYm9+YlJnCno8ZVF3dEk9SlBHdTVefk5IYlRBV041 QVAjelVFODY9fXk3dlRFWFg7eW0rZ3U9dn5DPmlNaVdrI3BxKGo+WT5ENQp6 WXNjdGwkbjJ1VlY2KEw5WnAtWCglanxFPj94eElUY0ZwWGkhUV5fKj9BeUpH eXVJdnUoZUghTj9TIz9wemBeYz4Keik5fGQ7Wkh2X0lrPTU+ISkkZ3ZfYW1M NSpsLVRmPiszflhBY0NGVXclKzJ3ait3dGV4RTlseFAmQ2NAYitiWm5hCnpE KD40VkA3eVohKyQhP2lEKWloY3ghZGZ3PVkwMHZEeWByMWBRMGh7LTZfPTZe UkQzWWBgIykxLVlOZHhEWmJ3QQp6eCRBJHgtfG9XVD96YEBTP2MtcVk8NnAo JEA5XllieXpxcWI8WGBqVFUmckl7JG04KHk8ek12V1UmYGF+XzJwbXAKejx6 TSphVSg0azItcm5+Mz0zbn5lVShNejZ7TmBXJj0zbWswXjMmK15eNkgxdz5H UmEtXnpgZTgqNkg7Mj54Y08zCnpodTctJGBzfDFPPzF1akFoVC1xYG1FY1FR MDAwMDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdmNjk1MVU2OUU5NAp6b0VR S0EwJjdWYEt+ellgP1VkX04oP0FyKE5mUStAdUJac1VRUipBKDNrN151aUFf eGx3Yjc8WFgkVDJXbDQ2encKejNaPG9tZjFUWmdnZH1ZO0dSYD1EO0MkSDM/ Qj0mOyZiQGNHcntfZmZNMTIlaVUmc0MoWXV+cHpON1JSQnVPX316Cno5U0hT Zz08NDtDKVNIcH1rM0xkZyN3STN6eThscCp1aWQ9K3doSj1VK2s1cn5IR0ZB YzszK2pXSmFUVzZgVXt0Xgp6RUVsYlAtfDhJMktFSG5kXj5eJigtdm11MyY8 RTdZPCNHK3dMe1k0UngrRjw7OzM2OzE2UEpIQDVQRS1+I3o9VzsKemlZV3Q7 Vk53IzFTZUJKTjI9UzJjQS1sVWEhWjNebyM4aiNhNV9IK3dAZ1AhKVdpMkdf TDRzS3YjRzlmbiVXfWctCnpgZVJ0OSR5KSpCSWwlSSpLOT8oR29PRkB4WlFJ NFpVeV4wQ0RsMyh5QyhDVygwdlY1IWpfQSF6OGgtfX5tVCokNgp6YTIlKWw1 SlhALTcjJHNkX2xlJXZwY2oheW1PI1BmYlVMa28zZGQjQzJwNURuRTsyXkdS ZTtLNkc4emNhZilKZD0KelBTSD4qQ2BENyV2fVR9VVhVS0NkdmNDUSY3NCFB UU1zUDJiMkQpRVdrJkM4UFRNXndxTTckfXFZJVpycSUtR3RSCnpnKHp1VVNU JSFAWUElPDk1aVlCJTdHbjI4JjFBRHhwITw9SUVYJklsOyFWK2w1VmomX1kt I0QoR3EkakI9ekBGRQp6KU9GbzxYQF8/STZoX0VeMV9fPXBMVDc5b0JRckM8 PUkwbFdNRGokemg/dWNic2YkYSY+KFlAMEF5eVYkaGZhI04KelZIb1gqOEpu OXNfS2V3eGIzY1J6Yn1gTXB1PG9PV1orYVIoZWdOazRjP2NrMUsqM0V4RDRK bjJNc0xqfmxlMWcyCnpoNDJzPDF3bFlhdkZKa3JFflI5JFdWYFVaMFNyTTkl cGVsVGxFNT5EOSVXeU9KPTJAVHUyX0deR2FnWn42YTlaVwpZME16LXtCNiNg Q3J+bSl9MDcqcW9NNk48JGYpe3tKR3luaHEKCmxpdGVyYWwgMApIY21WP2Qw MDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vaW1nL2V4X2JtcF9pbmRleC5wbmcgYi93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leF9ibXBfaW5kZXgucG5nCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAuLjIzYjk3MzNiNTY3OTI1MzNlNGRiMjVjYTk4OTBh MGEwMTQwYzZmZjkKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDExNzIKemNt VjtGMVooPz1QKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0Rk Qmo3MDAwNEBQKXQtczAwMHtSCnowMDNyZChOY3tXSGkqR29sX0ZZQFduYDgp NDV7TERsYV4kYSZ+YyhVV3xxOzdqPSNaPUhoIVVTa0NOU2JvfmJSZwp6PGVR d3RJPUpQUHV7TW1aYmp6WXhMJWlyb3p2KWlDPTEjJXNURVhYO3ltK2d1PXZ+ Qz5pTWlXayNwcShqPlk+RDUKellzY3RsJG4ydVZWNihMOVpwLVgoJWp8RT4/ eHhJVGNGcFhpIVF8ViNldE9SQStyNWR+ekpSPkY/MGVEZy1OQXhgCnooZH5y TT8lbChLemBeYz4pOXxkO1pRakwmaWA0R2wkQV4qQz8lPkZYbEdYMzcrSHVD bUA4SFVibC1UZyQlIS0lVQp6QCM0O208SUpBMjtDOExuPkNEYVg8PDZrdihU P1paRTZ2WEc9Rnk+fS1TWHRyaz49QiteNHUhdClURnVGPzY+RTkKenQ+NSQx KWJwPDNeWEEhPT0rfnpJLVlNeldyQHIzcHgkQSVEKz9ULUw/JjtkNyFyPD1j LWs5cyF4OVolZz9jLXFZCno8NnAoJEA5TiNHeXpxcWM8WGBGR285eH1YJEsm d0c8TTdKa0BhKjhOJWpFSWktdUMoQ1UoTXo2P0JsVGk9M25tTwp6ejN0Xygo ZFk4Kz1DYWYxXlk3KXFeNkgxdz5HUmEtXncjUDBAYU10cj45cDdDXzNgUCR7 X0tZRz9aKUJuX2c+TW8KemJwUVlXMGQhSk1Rdmc4YiprJTkjMDEwcU5TI3Rt WTNsamhVM2xqa1ZudyVIXzAwTjlqTF90KFkkTCpCc1F4WmBhCnpoaDI2bnZo Ql52TzFvTG8tSm1GdjV8TjVYQkF8X25SeEI4RDdYY01SN0ZAdiMweyskUVZL MV9hP0JxMWxedWhQVAp6Kl9wSFoleHw3XmV6T0F1Qy1ZQmNrVSVyb3Z3eD92 RkkmWXwjRHswRXJvUnpBMj1RY09ibzM/aFg4aXU2a0hwdT4Kej42c3RXSF5r JVhIfUFlWjB2WFkyd0tzXmRPVCl1WWlPSTM/ZG8jcGVyMVd6Kyt1NyZXaX5L NlModExqWHs+dn1UCno7a1NCeylOPkUwcl88Pj12PlN+XjhgPjwod24wSyhv WDBNST8/VDlmMH0+JT11aCpNfk1uMGMhMEdtaWV0NmQyOAp6NVIpUE1gd0R+ d0hYNG5WUlpAMCRXa0AyeUxOeXUrYnM8VUA1Zk5ORTdSXz9HeWVBPDs4WkBX elRNRmJGcHlBaSYKenszPVZpaXRCSSorMVpoJFJJNSNCN0tfRWJFfD1UYjF6 ZX1ZI1VaITBOYzZtZGQ5ayEkUVN8d0lTc0I2K1hkWDtWCnpPdWhSPVpmPXN4 K344aH0pMzFnP3EyZHZVSmNVRVZsbmomdyNOJGFwZS17cW5UezQtdlV7VEFh UVo+YmlveCNzWgp6JGl+Sz5vUzV1aGNtKFJYVCZAbSMjY1p8KXdOeHh0UU1y OHEkcHIjfG9MfmBpSTJeUH0kSlc7K3F5JCtIa0ojPEIKek8zSz1yZ2ZOaXUl K0FJalZ6PTlaRGppIzA/STVqRXNubWo2M3xVbFlubDdreFktUSF4OWF+eHdR VyZOTWx9TG9ICnpLcGAwUDd5OTEqRFRNSTFBSTJFWSFwMnp5RWZ6RD93X3tU WG5WPGk7akVBdT4xR0xSJTRUOWZuUnZffEAjcDdLbQp6d0FFQHNoezs1JGJj e25mRSh+KHZFZWFHeEJ+PzFNeE9uVzJAcmFuPnI+RnVYLUVNY1gtfGNmaHpQ VU57XjgrUnYKej1KYV9CeDZ4cDVfVWpuQXoySV4hWT9DNUZuTUBgKHhEOWVk a3JIPmc7KWZ9ZSQhUDNCNmZTenlGfT51JVRPXiVNCm1yfUQmeGRWYj83Q3c0 T2ItfjB3Jmd5WCRDUntqP04wMDAwPE1OVU1uTFNUWWRlflZCNgoKbGl0ZXJh bCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfYm1wX29yLnBuZyBiL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2JtcF9vci5wbmcKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uYzIyZmMzMWVlZTMyZTUzYWJmNjM0Mjc4 ZjlkNTc3NTExODFmMTVjMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgNjg1 CnpjbVY7ZTAjZn5uUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7 UjNEZEJqNzAwMDMwUCl0LXMwMDAwMAp6MDAzQjZTWX5Ve0hpKkd3bUMlaWp6 cmx8LWtDTlNib35mRmVud3ktJnh1PGVZelVJNUNiR3hpYHlSQ0x3IVJOZk4K emNmR05CdEV9azB2VS1XUitob1ApdiRYMkV5MUhAOD9BcDcyZGR9P0l5QH1r dWZWe296eXVJeishR2VSKT9jS3RJCnp6YF5jfCliOEtMaFRxN0NsR1gzViRN NHxFaUltdno8SUE0byUlMEBVcDVvQXI8aiRZVyZHRjY3XjNsPUo8PE96Iwp6 KFcwaV9eNXhjKD1HM0k7KXVwWjleVkhQeT0rfnlgKlFlXih3Jn5pYT5Ec0Mz K15YdV9zX1dhaD4peCNGLU1RQEcKenQ/Yn5nP2NjbEotdUNSYHVrN1FuQDhy TWE8bUIrPyEwX2s2QCQxQ3c/Q2tJRkBBVU5hfE5zQXF4QUZHPzAwMDRXCnpR Y2hDPEs8M3pIMDAwMDlhN2JCbTAwMFhVMDAwWFUwUldudTd5dGtQTUBkOU1S N2w2fClOTjBLVT0jKm1qJG8rMAp6WEd2O1NSd3h3YDYlPl5TS0B4Pjh6NVZ+ K2xDVzQwXkk+JGhZPD0rbCNDQ1M9P0EhX3JHdFhacCZ4T2ZQND1UfjEKekxM dURnJlZoSyNRM2g5e0IrJio4UzZmfmVCcE1MfnAoYiZedm42QFUkMFQybSNi ezhaNWNkNCZffk1FRTdPfi05CnpmKj1fNEdfdG58YCokJlVFMHU7WjNBVWlA V3Nfa3BjTnZwc3hDU0o3RVctdyFCeUooZSp6K0RuRypWIzA2c0Fkbwp6NTdS KHg4OTl6S3B4PzNwaV99fTNIQ1ZPajFoIz1yOzAkY3NtaXJaMHZUJShKWXxI WHotazVLaVRfMU9nYz4tKyUKeipJMmc9RWQjZ1pyajx0MFohcnZgS2w4QD14 fnt2cF9lRFIxcmlMVTwqaExhO0xSNEkxdUJOSlBjNFAwPT5NTzE+CnpeMyV0 PXMtcEJWZkJuJEpQck9veGRNRVFnTWtYVGk1NEk0YmxTJmV8a2ZiTmVheGIk bkdVPClZXk47Y2dATzRxaQpURjg4dW8wMDAwME5rdlhYdTBtamZMYkd3WQoK bGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfYnJvYWRjYXN0X21vdGlv bi5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9l eF9icm9hZGNhc3RfbW90aW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li5lOTlmNTc0Nzg4NDJmNjFjZjA1ODI0MzNiNjU5ZDM3ZjBjNTMyZDVjCkdJ VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAzMzQKemNtZUFTQE4/KG9sSHlgdVZC cSFpYTB2cF5NaipfQDM/ITJTNk9AMXlYTWooTEUwNntQWElIbiFlNjQkY0VY SS1gCnp6aEROM1hFKU0tOUxAcmQkWUxQdjBtZzE4dithUDQ4YyFGOzVSTE8m Q3RDOXpQfmRTK0phTW59Y0w1OFYmZXduSAp6blMjMW83bmlKPl4+KlRYKmBR emdNZEQ3UE96UGFUbyt3PDl1d3BMTCkxRiVXIyFJcWRob01TeGh3cH4wQGNm MDIKemhrTWptUk9mWmNgRVopd2BTO3xpPCplQFFyOGdRXkA5UjExfDZSYzh8 QVE5SVJMalNtVU9GZVd0TSklJVpvelBoCnpScGwkJiEqZz9oP29jZ3BqVk1W O0VKP0xXRT1tUGIzYFBjcTJEKmt1eCgwP0pNZ34/VSMjU2FLKzZKYXAxX2w7 MApyUnBuNEw8bVJWanJkMntUNys4V2VmSyohPG1fYW4wbmpYM2FzRFopTCl6 NCp9USRpQn1ANDBCIQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhf Y3RlX3NjYW4ucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFp bi9pbWcvZXhfY3RlX3NjYW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LjdlMWQ3NzkzNzJmN2ZkMjEyZDIwOTZlNzcwMWIwZjFhZjA1YTUyOTcKR0lU IGJpbmFyeSBwYXRjaApsaXRlcmFsIDE5NTUKemNtVjtVMlZENHhQKTxoOzNL fExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwOTNQKXQtczAw MDFxCnp4IVgyfiFFZXAoTEF+aWt6VWcoJj98SVBnUU5ycH0hcz1KVT5Wd25w aVBpOUMkbjB2Iz5+Nn5KbC1UaV4rVk9uTwp6P1NSbmpnVkY3ei1TTWQyQHta SyprPTU+Iyo2KiszXjh9fmkyJm0jbnp2KWZFPUArZno5azFoQyNwYDBuPm9j fEcKeklKZjBKeGFEIW4/MEMtWFBgPjk/en5APVA9WjRZa1lzY3RzJG14flc/ XnZwPHJOUUs4bWVEckJKPWdUZiVKOD96CnpAVjNiQnckJF47I196VnBAM3p3 TyRrT3UxIXRTLWY/elBiSSRJa0pgelU7S1U/NmtiPnYmYHx2O3FVamo+en1w aQp6cDJ6UkR2Z3dfJT43QiN4d1hOdSF0TEwxbT1iT0xudzVIfm9yUkpLWDwo aihldilBaE53Q2JMLT5ZY0NZb3YtTWUKenNwcCVjPChpYDluWXJ3PCo2SC1i QDN5WSFvVCVvVHJ7PGZ4PzZhV2NuWVpoKyhlbFRAP1h9R0MjPigpO3hhK2dY CnpANVBEUmpud0olIXx0YGQ/WD1ERCRJMC07dyg3RkE+YXcpenZjPlBqKTlD WlZAM3lEcm53O2E5biZYKDY7K0x9Tgp6dkNgLUJwNSZPQzsrTDE9bSQyIXZ1 aiFuUHNEKThvUEM3YXxSOTtkemF5dmFsSiNLPyt0bHo0WjtnK3hJdStabDYK emUwK1NeKngzTDd8Q1d9UF43OFZkcW9hZUdnc3x6YiFSXkQmPUpHZHxKYTJE ciVGND1OVlBSVClUc0ZFciZnSnJBCnpZaFpxdmQjbCFAZXZmLU5nRkxMdnNh OVRBSUMocTY/IT5MPXUmbjU/ITBwNCM8PyheNmRZO0llUWU5RygjaDgpYwp6 bTV8PytrS2RLNT1kYTc7QHU9c1VVMT9mem0ySCZJamRoSzNveVZHdS07fUI1 dWdjQF9rK0YtVS1sfms9bCNBWSEKenJ7PUg3PE03TXkjKSpsRTw+bHFQPzgz KzZASHRGNklhTkRxb05QRmFKYiVaNiNeVWRAPjlOR18jSUVTRHNeX3IxCno/ OENoNSE9fm8wclJKYHI9Qn5UISFvfWg1dkZXanI7RmdIcGxaTUBzaDFgOyg8 Km1jdT91cCkkaDFgPmIrPilaQAp6dC18MiV3KEdLIztnK1EzdCVCVD1xMiNU PztPPyZKdSk2RVF4YSt+ZC18bnBFdSZkez16VTslTj1CfVhSdClKd3IKenco N3lUK3c2ZWJrJCYyZHA1dnw1PkdRdGM/WEF9N2pvKzF3LTt7bVlrO3Zvaz03 QnlhMDAwMDFiVyU9SjA2XnkwCnpXJmkqSDBiKXg+TTI+PDV2dV4rWjAxMHFO UyN0bVkwN3c3OzA3dzh2JCFrNlUwMFlmUUxfdChZJEwtVy1SOHdhZAp6MlhN VTMrUGJVT3MmKCZ+MkxlUWNMWF5ZXjIxUVhJcTdXQm9zfCs+OXQ9RmhRTld8 ZDRqVShXU0wwZDswaTMyd1UKeiVhRE1lcTU+KzQzX30hKXpWYChAJHZ4cU49 WGlTaCFSTiE5RlpyRSt7P0MxTFpFVXtKZT85ZEdZVShfIzV1JCNCCnpoN0I3 TGpocDw/XmhlXlNYM2JsKUJ3RHBAXkspQ0dVSGV9O3s3UDZRNExXeDApUzM5 TE9WX1U1aTAoYWxfVWNYYQp6PkQjYVcwSFhjQ2ZyQURVLXphNFd7Pl5vczdU K0RwVTxeZWNVfjZZKlhBOERXcm85Nj1JST52N1VedHVZR3krQ0MKenlLcUs8 MSEwVUgmN2c+I3RFKCMkbXxRTkcyZHB1Q3sjYW5VeHNNWm9pXnVwMG8te0lY cThZTDBQViNhRDdKdT4tCnpIYU5NRF5MN1QjMVJxfV5qWkI/ZE9TdHlIbzgm Y3kxJTZZZXhqQktyZCU4YWQwKF5XJEdwckxecnV+LXxHdWNrRgp6UHp4NmhY RXd8VTQ0ZV5VbUNPWmQ+TzN2VXltPmdxZnlaLTFEU3A0UlhUa2A5O0UodypE IUB9WDJObmN9Z29lPmwKejdCMGt1PVM4KHhHXzl0XlZoKHV2aWNwSlNAZTt7 VzhkPGdzNkd5YUlLZVNqa2NMNnkyZHlFZU5wLThrbTcoIVBfCnpSPDUjNlNi WTkhSG1xNG9sSXhALUhTMEd9cip4eDRDSlUjTE9gOStvTXp4U2VNOVNybjNP T35LcW9gQXtXdEIySwp6bm50IzZ7aiN4Yit2UGgqR0Q8PGwkUm8tMVFFfi1J PyVaVyVXNG18YjZ6VzsqKiYkYyMtTTJzWDAzcnR1VkluPU8KelFwTHM3UWpR JEtndHtLPEJJT1pCZVN+bGZrPmlLKDR+c2RXS0ItQmRreUVFSTVxT3tXe31a TUJiPj9qQnhmKCpICnojQSE2PXdLUV8hTE4lR2IqeUNiRWIoZyhuPGtJPWVJ ejVlQ3hxYGBqNGt6SE1eeEFjX3Y2JEt9Y3c8X3ZLOU5SbAp6KyVVVWl1e1RO YilAX2lJeDk7NDxrSF9sOT8lbCZGdnB0MUAzbV87WUckez1KUikhfT5Md3Jo dF9DRVpSbndGa0gKek9MXzFCNkxkWDlfPEJlKEE+M2U0JDNZNWlrKCFuTEZv I0JSYjE/fU5FZjxHQ2w0UFkhM0NVYDtDSXolUS1KP2BVCnpmQmYpQzkqc1BH aXBldnZTZXlpekdUSE5GUEBVQUVYUTYrVG02Wm5oUFlNYk9ZMj9LVk9vQnBf YUVxNiErN15rWgp6I1ZhVnZEPWFMY2s9TClrYGQ/WDFBWiUlLUAtUmZKLVcx MmZUZGxxJTVpO15+QGB8OVN3NnZfO0pPI2JALW8ydzwKemV6PTdTczs+dnRB e315WWkmQ1NwIWVtWXU/PnwmbGV0NkhZMHApWHBLP1RKaHxIWF5WJUZjKHBm JnliSGx2UHd6CnpuSmlPc0Q9VHhVbHdeWmlUP2A0QWItRUhyJVlLWCZUV0I7 SSVmTTdzV2w1MHZeb2U+WUx2Jm5tTjw3QHhtIXhMRQp6dEN8Kk5zNzFOU1dH YzdaU2p9dHZZY30/TXskS01NQEowN0g4bG57NTAwMDBiYlZYUW5XTU9uPUkl OUhXVlJVNXgKekdCN2JQRWlwMUpGZm1qekZnaTNkSXk1dlpGZn0/YkZnVGVk OXNtRlVDM0hudGJZeCs0V2pid2RXTkJ1MzA1VUshCnBGZkF9U0VpZkB1R0JZ fGZHJihSZ0Q9Oy1XRmZodU9SamRGMjAwMm92UERITGtWMWliP0M1WnE0Cgps aXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1p bi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9kZWxldGUucG5nIGIvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfZGVsZXRlLnBu ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTA1MWNkNWQwMWVlMmYzYWMx Nzc3OWIzNjI5OTlkODJhOTI4NWI1CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJh bCAxMTI5CnpjbVYtdjFlV2BXUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAw MSV3MHt7UjNEZEJqNzAwMDNeUCl0LXNLTERePgp6VFUrUXMybGg9OEhpKkk1 YjBeTXlFRDVSTigxOTs8bVo2ZjhsRUlIUSpOO2d1d2RIbEQkTGYkLUxBPmI4 cUZDYWUKelgtZEg5JEV0UFhxaSRXcT5TTTwwWXNjdGwkbjAqKj5+K29UK1Bp Kyt5P0ApaWlRSytgK2BvVygoZUs+QmZgcmxUCnotTlM9fik5fktKZ3g8eDQt b31RRSliOEtNaHVfR0VrPTU/dCQlKjAyaWtJMig8SUE0biZXeipDcDUpRCo7 P1J4Ywp6Jll6JiRAI0U1dTw8T3p6KH4jIVRxMnwkfDxrWFNvKHhUK21sSUdL Kzw8XnR0KVRIT3RyTE4lZj1HbTAhKlFWJiMKenJ7PnowPkRaXn4qe0o4LW0r OUs2PmU7c0crcDZvQHg5SHhQPmZOZ0IrXz5yQm4oTi1JP0FeTlMtPnZONHk2 b1ZzCno+ZkBhNC1ARU1MdUk9RXY+ZzFqNTs7LSVEeXpKdyE/ZDdyVzxpNzNa dmhMPXlAOCFWbz1EX2Rodit3RChAYVYkdQp6PkI4e3J3KDt4NF42a2EqP1op JSkkWXkoYy1+YSNzMGQhSk1Rdmc4YiprJTkjMDEwcU5TI3RtWTNsamhVM2xq a1YKem53JUhfMDBPbTFMX3QoWSRMKjhiZGxedl8jZjhiRy1QTEwlbmhNY35x I2BtUTJxQkQ3KUZvbVBnYzYyTVFNZGc2CnprM0RuRkZlWE50aGtqckNrb35a cHtPMFZuX00qfGUlcy1nN2xzSFJPNFdZfmlnSkZsLStjY1JEc0RuPnReQ0Ar QAp6eDQoWipvZ2NaflVueTBAdSllLS1wZi1gM3NFPk5SLWMwUXZlNGplbi1a czBiengydjB5el4zM0wqUVhKOTZuNjcKei18dnJNRUN8OH5NbSowQ2ZjeXIp SUZBaFA/YHdUWWA/dDVaSnJJaHlUcFJkZ0dGfUJqT253PVMzWiNhUzhiT0t6 CnoyKVNJMmhoe1E5TVpRbGEtMy1WYHpsTUt8d08xQDZxQERZZzxlP3NxI1ZR aCMkciE1PmtpRnBqWEQpdFY3dEh8LQp6cytDZSNAP3RmOXBAJWMoSiYzYn5i JDN5dj9ePGkwV2Q/Tk9ZPmF6P0Zvc2RQJjV2TUV1VTVPejx2Nlowe2poPW8K em9tUSpXWk9BVH5xS25IQ2E2IUw2RllpQ2NOUWg3QGwzPGZ7c0t6Y1lJTjx6 I1orPFEmJXdUZzwxUDlDR1VASTVGCnpBT3s3bm0oR0dsJHJ4RmZkMEJNUCQh RGBJbV9Jc0wjaU40ZSY0eElDTk5tYT0zZlZ6ZFh4MGFrYn1KPXhpJXViKgp6 Pz81WV5QQmxRO01AVk8wdVZ8JEdsYGQlSEI3Smh+ViZQR1QwYWclRmtIPTls aDtxVDh6V3tsZnJxaHIqYn56cy0KejUtM0ptbDlVOVNyQjY7JGtaP01rajU+ biQ9WUMybXhAYUw2c1lDLUJFVz95bDV6P15fYjR9WT9tWURucyN9enRqCnpf JlRmUE12VmxeLWEkRFUzRSF3TWhXQjU/OWF0cXpLclJqJGgmYiVfa1VEfmtw K0gjWXAoNkBteVdPP34hSTNIdQp6PUZzNT9MJiRFazE9TnZGSGspb0t5cCR1 NkBISmVBMClndSU2NUdOfWQkLXMoKW1LYG4xaUF2ekpCRXB0O1UqTGMKenA7 clB2LTxBNGVxIT5nUTJYPGktVUhCeyglYjdab2FFWmtyOHBYbE5oKHtlXihH e1lTTShpUkl1LVBtPUk5cmF+CnZGO1RRWChSbWtGOSpeaGhpTnRvRl5SSWxG fDdtXiRIMCNGdXM/a0ZVMDAwMDBOa3ZYWHUwbWpmaHdXNjMKCmxpdGVyYWwg MApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X2ZvcmVpZ25fc2Nhbi5wbmcgYi93ZWIv cGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9mb3JlaWduX3Nj YW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjYmE0OWM0ZmJmZDli ODcxNDQ0YzllOGQ1MjhkZWRhM2EzN2RkYTQKR0lUIGJpbmFyeSBwYXRjaAps aXRlcmFsIDE2MDcKemNtVi1OMkR0ZiZQKTxoOzNLfExrMDAwZTFOSkxUcTAw MSVvMDAxJXcwe3tSM0RkQmo3MDAwOG5QKXQtc0cqTUo5CnpHY19fakp1NSYm RyhKQnlLUl8tK00/WFZGSXo+ZjBNbipxTU9FRkdTR0VoPU5PLUBLbVBCbF9o TmxpfmdQZnRacQp6UClrb3lNcDA1dFFkQiF3VFQ1MH5QRlkkfFRVJFkyVk5o SUxMU1NOMVUwcWFRVWBKJFVSJCpkU1ZxO2lpV0p6YWcKelMhODhlV29CRHVY SXk3IVZyT1l5WD0rYnhhOT9VYE5ebyprWkU8RjZaRCh0NFZRcD94YWRjdkNa JSVZfVZ7ZFJ8CnphQipkRWEkc3xFV14hfEZhZGNDOGR2MD1kWG1vWE5iOVFO VWIhJkhiYmE7RHJkM0pBbWRufH4tVjFJJmtkd3k3aAp6aWhYfjRiJUI5KmdN KGcqa2EmY0lkV01GM2hsaE5LaDxKO05ldXwyT2lIcmNLPDlDamQwSUI3R2pF I2Joa0JFKHMKejBJdVZTaioqMHJrcFFzZWdeYGtkbCRlSztseD4jSmtDVD4o bTZuUUBteDdze2dQTlhmcHs5aEpwTkVeOGorJmNTCnpzO2lRb3BOeWNORn0z QktvfH14THM1SDBkamlqa0l4YXBScnRlS3shcHJ4cHFyPjlFMT1TO29tb354 YCl6VWlvewp6ciRFQiZURU9OfSF0SH4meTw1VE90KkArSCFzeEVCdCsyQUxw U0hWO3ghR1VFPmFueDBWYU0hWiRuSXB4QDNwdEkKellzbHpxJD8ydU4hRU1V d1pwLVZjenJMdXojYzw4LXFyPTg+JmhEa2I9NSl+VWVhYFRPKENvcCh6bFBF NiFvPE9jCnooKGJeOyRnSXJJaXEhRE0kSGFAKEB5NXUta2sjejImKGc9cSMq eDxUI21kYysqWTI+PClSZnJvdih3Zz0rVlFtMQp6KlJ8RXlzQExueig5RXto KzBXNj14N1hVeCgkQmNxK3JybkByYF88PClYfUtrQHcoZ0kpNzg/dCt2fmdC LUBNKTYKenRLc3kkLXI+YUQ7bDx0SnpUV1FHK1NiM3tANWJOYnp+SiU2O04t I0teMnApbCNeVVlDO14pV1g/I2tvbiRtSCtPCno8bTFXWkBYaDd3LXtJY1M8 PmItazw8YUh3KCZ5JlY9Sk1nPjtNM15tKTkzV3M9allWdV8xb3lfPG1UaG0+ R3NefAp6PmdESTstUmtTcz4tWE80P0JERnw7Typ8PT8oZ2RDPkVIMTdAQTI7 T15ZSFpkXll7N29gdXpGKXxOSCpgYH5xaEgKelBYR1ZfMGQhSk1Rdmc4Yipr JTkjMDEwcU5TI3RtWTNsamhVM2xqa1ZudyVIXzAwUmR9TF90KFkkTCpCYVBa TG9UCnojJk8/SjZyJHA7RERIfjhxRVhabDY8NUgtNFlsSUZpeU1mX2J5cEhg bSU1O1dPSSZLRGcpfikrR2A1M0doWSpIUgp6WElPYFhTU1d9bkllJnEoKVk9 KV4yTkdqXjs1P2pweHhmM31ANjAqSiVjfnsrYnpIPndAUjsycCp6TVQzeE1i e1oKekxjLVpjKndlKHM+dTwyUF93Sns+JDNDUHpmQjZZPmleTjdvTSNmXyYq RzVITSFWPm8jSmFodn5qejR1ZTF4cmd4Cnp5ODBVWE9EZW1DSCsjJkl2cjJf UiQkZH5BJWQmTXN1MF4lWlkpNXZobTlgQFpxTnVNfEBDYStNU1hqaThCPFkk Tgp6V0YtZ19Fa21sU0p0S3FfKEkhKDlxXmp5U0xQYDthQVA4RE9FYmJBUml4 Uz1pUDFoaEJPPl5xKmthV2F7JDFGdUUKekQrUUhXN1pwM2hGcXtmYSg+NyRJ Q2B6djRLLWdYM25eeUUrZTBYKHFjOzZ7Z0ZZRkIqZGg8WndxfnFJPD9Ua15B CnpHTmh0SE0weGBrazMrY0JARmFCVTdDMTMmSUtZX0VtdGxPV0MhYHl8aEMl YTMwbjhvdTRBI3RPRURIJCppMEpqRAp6djh6Z3NsJE1IS2B+ZGNoNEdSRFdV JF99USZ2XndzJm99JXkqQktyVGNfO1QkVHI1X3M0Z2F1PUUmd3l7T29YNF8K ej5tY35zbkplRkMhPWxNZURrZFU9TntJSkplfUUlUEF8UyZ6MnRHcGFKamVw U1RWJU9Scktte3MoZ1BxRyhFfGFOCnpGTChqN01zKWxOKDRqaigrNE5NTSsp SDdoZkdgNjkpKzFWfCpuXjt6Rn1fRDMhQG99IT9CQXgtNWkrRXBLdCQlVwp6 WTgheSk5cW4zb1lDbUQpSFFoM3dldUtCSjhzLXowbndqWVZzcDA7JDEraVJx SFlZKmc0QS0xRSFNSGA1KW5vYmoKelA4QXpzRGF6VVc8PW5pSzJxUGRAJDsl VEVlbDkzUD5HZ1VOayRPRT5CfnIoYEFUKmtFVCF4czw0I2E0bl9gXkorCnoo e1R1cURJbj9UbylDK3tVPzYzUE1uZlJuR3MwNCZUTmhSdyRFYDlYSEBEZHA2 QV9uMVFJMU40YHgpVldQRFEjZAp6eFckKjklYFpPfTdsZ3pHdTIhcHpOSFdH YlQ1UyREJTZ8fkN1b3wzNClIcEohUjhtQiNGbCk3RFFIOEcoREhjfWEKenhM PDhUTW1mU1VUKkR8R1VnUiRMckRyaTNqazQ5fVNtVnY5U1dFbjBAZTQ7aD1u SFZoVEFjc0AwMDJvdlBESExrCkZWMW0qKk9OUmdlCgpsaXRlcmFsIDAKSGNt Vj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF9nYXRoZXJfbW90aW9uLnBuZyBiL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2dhdGhlcl9tb3Rpb24u cG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2YjcyODI2ODYyMDk4OTY2 NDEyYTllZDkzMjBlZDQ1MTRmZTNlNWEKR0lUIGJpbmFyeSBwYXRjaApsaXRl cmFsIDIxOAp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXk1qKkB4QnBBJEd3 I29vMHJqajdQVTxRVj0kITlHPHlkLWFUN1k0Pz0KelVCWEwlSmtBMS0kWUxQ djBtZzE4dithTmtLMkkwTjVRKXBsMkA8VCRvRDIrJTZCcm5lJmM1dmxsdTwy bGpWTVY7CnpFSj9MV0U9bVBiM2BQY3EyRCprdXgoMD9KTWd+P1UjI1NhSys2 SmFwMV9sOzBScG40TDxtUlZqcmQye1Q3KzhXZQpiZksqITxtX2FuMG5qWDNh c0RaKUwpejQqfVEkaUJ9YVY5Y0kKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoK ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4v aW1nL2V4X2dyb3VwLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vaW1nL2V4X2dyb3VwLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li44ZDVkZTMxYmMxMjlhOWFiY2Y0YTczZTE5YTQ4NzM5MTM5ZjY2MjcxCkdJ VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMjI4CnpjbVY7LTFUKmBJUCk8aDsz S3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDRpUCl0LXMw MDAxVwp6cnBHcGohRVZhek03YDtEJmhDNTk/b1l0elJsQDBwKWJNNz0/M1VU X2czO30hLXR2eXI/dm1FO3VpXjZycntOb30Kejw2RmgrViNuKF54OC1aYz0o RUE1ZjJDVmVqVHdmaVdPQTBGZ3QxMVUjOXFPVkh1VWh3QGEodG0+OXo5aCNx SCY+Cno/Y31pUjxGTjdTIXw+P0I/QksySS1tTDF+dE1CQiRiRUchdz1BWUB7 biZ7cWA/Jmg9UipfR3Rla21Bc2U+RHNDNAp6PERCSHhsSHRzWT5EaX5eJld6 flNybFFBU0A5NEFiO2s+NUlXeWgqQEBhRGtoKVRITHFxd0wrZWNCd2ped1RJ eCEKemlRZEo5LW91MzUhR2grfHEySWBkPDxGcTMpQHxJcmZhSn1kaUBzM3I9 RF9ST3d6Y0paPElKQXAlYnZVTWdXOWAmCnpkJGRFOSVVcEchT2xPIWxqKWtq Y1l0aFdqQHd+cTV6UTY2eSYrXmdIXjF7T0khXlE4QClicktWXnZLQlkkO3Q3 YAp6JWtrT1RfMUBuMSpWcHlvO3JHMH4/NUM7YnNIKjNgendXQG8/eWF4c3Vk KFVII3FZPCtAM3BxO3g0NyVMeCRNaSMKekB5XmNqemBeZCspYnoqNEBSRjYk eUdMb1gwMDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JSYXt2R1VOQntyO05CfkMz CnpZZCF6fjApdDZKS356WWA/VVpSKCtDVVZCKCpkYE5RZlhhNl5+eiF9MU95 XnNGXlYtdlE2UG5pQjZnV3B1fm48Swp6KjRsbWo+enhUcE5yWkZFPXtZXzk7 QyM0ejtvOzhuPF8hI1VlZzVeaWYjflR2SjBad293T1ZebloobzFeMDI7VnkK enU/KFdZVVlsKFE0R3I3dndAXnBLSXg7ZTFNU1R2MzwySmY4SXkhMVdKcHtM KjtqdUFgOXNUdXxAZD1pN0dJekIqCnpjYnhgZWElemZZVkF8eiFPKmcwOD9l PjdqSkh6PjRtaUckKiY+QDVma31jcXhvMTFlcnJhS2YwTjVDdEpBYGt4Zwp6 WGpJWjg+e1FUNkszWWdEPHxhcnU+OytEWSROZUJncWx1JnVWVk8yME12K0sz RU9ObGQ8TVJTWTN5RmttS287dnIKeiVWTFJJYU1aI3Q1UXspa21Rd35+U3dy cHRKelp4ejtTNWVYbl9Kd3w7RTY9TUtKZjg4elhBYkNOflIjQ0RDdCR1Cno1 ekNxVGIoZEh5dl92ZEthZlZwVFE7UzMqRH0lRE9wMzgmb1N7WkUjTHhUPEpn SDJ8JDFxSVVVeHR5eG9sNmxiQgp6QCtWbG41dipKJnRmZThKJU4wdkhlUGB4 ai1OaDV9JmRfSmdgIXxTMVFuTkBDaSZhJUVsP3tuKW5vWD5VZlJFJCYKelN5 Jk1TREY3KjFSPjwkP15KKkUmckxCcl8lWFNeJTtgTXFnWGNsWGxNVWh4K1Jq YnZDNSF1bD8pfkg4WXV4aGJiCnpFa1dmbkdWeTQ4aGNAfGd1JSNtWGF0Q0Ni Rnl3QnFBeElLUU5tZXVxbTBFMDNpKmx1NmJReW9sdmd7TSlEVzwzRQp6R2B3 UHElY1BuMys0SjRxSnpVJTBmQUpDQDkzSChvIz5hY0wrNmd7Nkk1PlRjNGRv QmdjT1Nud0o5flNNLSg2aDEKenxBMFMhYHV5Yzl7JnhPLXpsTU1PSlVsdXpC M2ZmaUFrRmUkOWNoKlM+TXBKRnxJKDdfSXk7ciRMfUpiSW5AVmhSCnokN0Vz QEc1Y0ktI2tTMm9lZnF+d3dwPX4yPitgPnotKHVlK0oybyQ7TEkzfiZDM0hu dGJZeCs0V2piU1dXbnB3Pgp6MDVVSyFGZkIxTUVpZkB1R0I3JGNHZGVVaEQ9 Oy1XRmZjZm9CXzAzKDAzfiFxU2FmN3piWShoaVopOW1eYz5wcG4KcUYpJUdL SVZ+X1RSNUNMPEcmRExlSFkrZVNJeHNOR21zUDkpMDAwMDxNTlVNbkxTVFhA YEdvKWcKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2hhc2gucG5n IGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFz aC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWYzNWM3NjUzOGMzYTQx OTIwYTdiOTNiOTRiZGY5NzQ0M2RmN2FhNwpHSVQgYmluYXJ5IHBhdGNoCmxp dGVyYWwgMTE2OQp6Y21WO0MxYUE5QFApPGg7M0t8TGswMDBlMU5KTFRxMDAx JW8wMDEldzB7e1IzRGRCajcwMDA0aVApdC1zMDAwMW4KenNib0AoOEZpK3xI aSpIWSM5blhCP29ZdyNWI2V4cyZoNGgmQDxGfW4zOH5eTnYqYnk8PTg0bnBZ PXE1Yll0aFdqCnpAeGEwRSM+ZWw/JmhwO2dfTV52UHl1SXpLdG13MH0+ZVNU cHJwI3FWenYrSV8/eTFwZmlgRFJ2KllJLTg/MG5BYwp6cHhnMHwpYjVrakAy fXdWT1RYIT8pQF4wVD5xRVFkUGA+QUUkTFgleGFndnFNYSthYTg7QzhgfUh1 VWt5QGEocz0KejxhelYlJE01S34/JmgtYj4le0VpdTxZVGs/QksyTj1mVWdk cDEwX0lAOURNWi1JKFJvbEh9OG4+Zk5sbT9TYmFuCnptRihpTDxJI0BrK15X M3JneVBTUT5Eczk0O0h+ZkYhMHpGX3BHI3peN1o9Qj5iJTJmfmIjXjRSUSRG S2tXOTM2Ygp6LTliVVE+d3U0WklQY2BZPSt+I2ApfWAjO3lNfGpBKD5fMW8k Y1cjQGhVVjB5dS0kWFg1RTBCZ0ptSmlXLW8lOUYKeih4U2MmNCNoaD07S18q SCEtVTx6ZzY3ZW8ldzFqUil+NCo7eCNyUUw8PE96KStxZHhPIXNnU1k8aiRi Iyp8eXVnCnpmNy1mejxJSkFpemslZTxwNXgxJi1pJEBLMDAwMDFiVyU9SjA2 XnkwVyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5DMwp6WWQhen4wIVQ/akt+ellg P1VVPFU1PHdXbkBwVjhFUXQ1XmpOO2ZTa1ohWl50eFplYT4jM2NpWE1HXnVl NWxiKmAKekJMQkwoQm5DQE1fe2x6YUtGbCpTYH4wM1c9Z2gxfmJmPz9aNz5v Jmk4ei1FYDJNRG4rTG5JVEUoa1VgUGg9bXk8CnpsaSE9MztVT0hzR0I8TiE0 PF9nYHRLYy10LXYmVnNrd3xnPiFOVyg3NiQ2Tkoycn5FTj5EO3F4PGY9ZGRE aj9sQwp6emZ2QVRCKG5LPURPbXRESlNRKCtOPypNdVE7VW1CWl4jZnRDWVFf S2tfcGhqSjBme017YjdPM09mRH1rXiYkT1AKelNRbEJ4V2t1TCF3YlImWWNl Jk8lYDVKK0JBbC1ScTZtfihhUE4mbk43VzgwMSEtbW1sTFgtS1UjZnJqTlAt bkIqCnpiZl5QNklNQz5IST9aVHl4IWooQUJNJEp3Mjg7TjduYG0qbntlZS1D RWlqX2w9V3wpbTxNIyhDOUc9QyZyZUZ+Xgp6I2lrYD4jcTl0Xmc/b2A1biR1 MnE4OX5IUHV1SFFEe1RWcSRldmRyfTlnVzVJcVYlPGshUXBeN2R8e0MmWlN7 QnAKejJARXEjYT0rSndqLWBPRnhFRlJJXl9CTWNnS1BAc0FmMytpQk9xMlBs YDU1NXQ8a0p9VGk1SURfUEJRb3ZlX0lSCnoyPEd6KUNldyQ5Zys2NU91UCYr Vl9hbUNoPVppX3E5M0djV2BqQldZY2w2Xj03TChiYFckQTImblYpUW0pQUM4 Pgp6WT1wKSoye3AjUW10VTVVWEIhZ34jZXtKYFEhU2swUyo9Izk1NC0pNCtz ezReRHFsUUVWKWVMR3MkaXxyWHIyIzQKenU4SiprI2c8RjBSdCt5MiYxUVFU KHB6ayQpb1JyNnl2YXYrU3JRYihyS2xGbG9mSD4hdGhkfGt6QVVgSUdTYmA5 CnpYcE1+YFVZN3B8eHBAe3xWfFRpQlQ+Pik0cHpjUWhCY31pVzAzfiFxU2Fm N3piWShoWWElRXczV2RKZlRGKSVHTAp6R0ElR01SNUNDK0cmNEZoRyVHTVFJ eHNMZW5JIz9vMDAxUilNT2J1WFZSVTZXWkVzfDBXX2JXSUZmbE1LRmdZelMK akY7cEAkSXk1dm9GZzdiTkg5OWFiJTltQkYwMDAwME5rdlhYdTBtamZyKn45 VwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9hbnRpX2pv aW4ucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcv ZXhfaGFzaF9hbnRpX2pvaW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LmEyYTRlOTM2OWZhNzhjNmZhMTliZjVjNzgxNGY4YTU4NmFlZDU1NjUKR0lU IGJpbmFyeSBwYXRjaApsaXRlcmFsIDE1NzEKemNtVis7MkhnM0hQKTxoOzNL fExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwOG5QKXQtczAw MDEpCnp5bShUTDhIdV51SGkqSFkjOW5YQj9vR2h5VmFEcnImRnJTJEA8Nj1s NjA3MVl2KmJ2Oz04NG5wYmNAd3lZdGhXagp6QHhhMEUjPmVsPyZocDtnX01e dlB5dUl3SnRtdzB9PmIkK30pWVM4KCVWYiFiJVJ7fkNONUFQeXp2Kzk/P31Y RnYKenNMKkphKzN9IztAcktnd2pNVk9zKSRYcH5eOH1+aTM4fkBfc15VPD4+ UmlSXnRKUTNFJkZxMkQ/T3d5Xld5Uj1nCnokTE4mU0AyPVckcktzZTNvfmcz bmM0Q1U3IUgraWRAeVlQKXhBZ0dIXllGO0U8JENrJiNgNWdOP2RHeFY8Z28x SAp6dTxgMXs+Kms7OTwofXtCdyhzZSt4YW9mRz1Da2VQdkZGO0I9R20zeipw JSR5dUpHKSg+ZzFqMzxES3Y3d2VSVikKenk2dTdHKk9UU2VsSSEyQz5mQGEw OysqZDF2JUsoeDxrZ1luKH4jPWp0R3xYWnd9Z1BPVU91dSk2U1FHSiNFXnQ9 CnpYMU1lMyRNNUt+XjZrYSg+QkkybiFScDxyPWdfSVFVPm5JejhyTS1HO1oh Rz1SOHNabTtpcHE8c1RVWDl5QGBPMQp6QzRZRDx5PDB9UVkkRD1SREY2VGUr Tk8lYFdAaExfTUMzdzQtJDZwKlZxQDsrdmJwUGtsNl5WdjxpRnxMc19FTFAK ej5EajJpWUJhLWVMKzMrOGkoRDlLY15RUlQ3U2xkSTttd1FUJVpsTDJpTCot KXZgaUc/TFBEYShVIT0pbXJfRS1uCnooclReT1o/TjVTdipMS1I9WHxeR2dV JThYI31FK0FKVXI+eXJ7S3dtLV5obylYRHsxOEshalFyI1Nhal40aTNnVQp6 Skx1UEAtXllnRCNmOG19VGlqdGAmcGtjTEpVcW9hSklxfk9AYVYkcTtIflQ2 dCY0aiU/Y2NsUilUSExxcX5fQTIKejw7dFZBazhxMXhhLW1OLXV0Klo4b1hQ TyEhME96cD8mSDRnO2tAVjhyUlVZOD9CMlRVLU1Rd2BxVUYoezw8RnQoCnor UEM3KmpwRUxYO21uS2EqciheI3JyKmJoLW99UkIjRChWM3ExP2NNK2BvWF56 SlRQO3BYYiExLW91MzUhaF90dAp6ZlpNJSkrcXsweyY3UzdkcXVzLVUtTkoo MHo9R1BsZWRFaVg9aGRhPCg0cG5lcHpHUFQ8SUpBdyp0V0hxZXFiO3AKekl7 Kkx4MGQhSk1Rdmc4YiprJTkjMDBDbDRNP2AtfXpqNVVOMDAwU2FOTGgwTDAw Mms7MDAyaztNIypiRjAwMDdYCnpOa2w8Wk5YS0pmN3pHMGc3P35KeCR9ektt MDVnVVRSQHsxNip3e0haeG1ZbEN1O1NMayFwKzBXJEIoODNxeXdtagp6RytU ZlUhKWMzdkFQNU1jM3AzJWdnTW1SJU5MV052T2J8bmhJMzZ0JGwyWHojYTRw YVBXTVB0SlZ1NyZiRm9HMEsKejNrI2RQZn0jP09HTHM2RUR2TyVCaE5jIyNY VkpCQVl3UElodkZJfXlGZDRFSzhKbjF6VkZvRmhVKk5XdzxGPl5ECno5QVh3 UXR8aSN6bU1sekdPZV8kI0hBYXg0Kjx4ZEJYSj08YDxHfCN8PFllUlE7X0J2 WmdBdEA/ZXpDRmhAYnZWdQp6QG4tVTJeMG8ydjQrc3BoS347YzdPUiM1MVhx WmhuUXZ7UXJqYXkpM1I1VzJOVUxpNUQ7V2x3aEBsMCt1S35We2IKek55I2F4 WTNVaTZjPkkjKDlpRStJO3wkYzJZbSpuOWx3VkwtUjlzU0FSOWM0NlFlRlc5 PHVHb2dqZzN0ZVEqe01VCnpPR09Ra1pCdHVSUzY1JE9TSlomZVFxa0RkK3xw VkJ4NVgqMGpqNWZmMUV7NjdxTyteSnI/PEVjcV5HektObFg2KAp6Q1VucHEh OERPKygmVVFuRE8wQ1NGUjJJVkRWYyQhV2hOOHJFYi1hMGI1IU9VJXJsPkZ3 WkwocVBrWTI3cm9+SF4KelJ4RiNnZTh0TSpkWE9GelRVTT5jWDNPZHxZdThu KlUkSjUxclhyQTZRMm54YiVocWslNXF7YVJhfklHcnlUTzhjCnpfVV93JWZh bmtkMGRSPWY5NldVUiRsKmdyQHg7cnFxfmwjRFkpLUJ9Yl40NlcqPm1TRlRx Szt2aiRnV2I8KkxvSwp6Pm87IWh4NEN1dSZmUjsyNkFVT3wqVzI5Ul9+Nzkh bit1Tn5LWTI9NjNuKmFrK2RPO3o7XmhVS2R5aypJZFd9VTMKem5xTip7ZCRT a2xpKDdCc1U5QEBzO2x0flhuMGBVYW02aE83TE1BXzxEcXo0X2peUDc+Nyl+ ODVUMWZZYzF4QTMzCnpmJm01cVAyJWdtRkluT0gwMDAwYmJWWFFuV01Pbj1J JTlIV1ZSVTV4R0I3YlBFaXAxSkZmbWp6RmdpM2RJeTV2Wgp6RmZ9P2JGZ1Rl ZDlzbUZVQzNIbnRiWXgrNFdqYndkV05CdTMwNVVLIUZmQX1TRWlmQHVHQll8 ZkcmKFJnRD07LVcKVkZmaHVPUmpkRjIwMDJvdlBESExrVjFrZ3hRKHBpOAoK bGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9zZW1pX2pvaW4u cG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhf aGFzaF9zZW1pX2pvaW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAw NTFmOTk2NzgzODczYTRhMjdkYjRiOTcxMTM1ZTk1Y2FjOGQ3NDQKR0lUIGJp bmFyeSBwYXRjaApsaXRlcmFsIDE0NTIKemNtWStDU3h9UCk2b24mPGlsQzl3 RFdZfWoxRVc9PVZHJnNeTXlNYz5WRV9kSVdzZjIlT09RPlZQXjNhPiNlemJp CnpRJFdmcE4tO29XMl5iJj1rXmwqV0I/SmlCX3dgVHlLVlk/T3ZgP0ttPWJu M0s/KVBAZWYmd3E+dmZPNzBnVFokQgp6YH1xVyQoKCQ3JCV1VnhhVVVvNElX PnlufjQpcnlpd1M/XjhwWkFzeHRoa2hwSnxrVUVuTzB2UyUzPipzJXhQc1MK ejJrPDd5WSYhV1RkVzMhaWFUIXljUU5EbWxvfUhUMzVsN1hPM0M7OGp6fk1s RE92RG1+bTdPbzdKLXU/bXV4ZnJACnpwVzRaKzh8U3ZyNT1nNzYqSjd4aGFk VEt8OUYtWm4xej9XPSNFVT9oYSlZa2c3P1ZPfDg4amg+N0IhbTxZbGhCKwp6 K2loSUtPRm1lPXRnQi1LXntjPzM3JGkhZEV9a0M4KllecVpsWDdEaEpGVFQl bXxOZUd7PE5NdVFIU0daJk5CIV4Kejt2JWszSSFLbX1SPTV+K2xVbjhMJT8p OW5EMGtCKypufFd8e1c0P3t6fWYoTEJKc3ZMN3ZjK3lWKTJHcntaMWluCnpG b051VVMlSn44dFhFSXopaWt8fDJJLWQ4SU4tdjlldEZyaiMoYHdBT3wyNGRH X1ZJJU1TMncjUCpPcWRsMHNCMwp6N3lobzFeJUFyWDBPY2cwbTteUDg4VTxi PkA2JCtvMDN+QDc7JV52dU1tQEpKPGFXb05KdUFheWdeJXA+R21uc3kKenVH MSpYYjQ7QllnT1UzOTJ2TyhQJiFLcDZAcD1fU0V5ayZZLTI7bGslNnZDYXk8 amomSEUtMGRPVjBiME43KklpCno+QEE2fld1RTs7QyM3ZzU2cz8kU1AlP1Fh UjErbi1jYH5rVDh1TlZhKjJ8QG8/bG8pPUtOfk59OGAyY2Qqd3s+MQp6VFRn ajxZREZaeWcxT0BEe1VFfVl5eFYjTjR5U2x7Nz9rcmA1bV9UNVhAdWk/YFBe ITNFWnhoQz5naEBMQFIrKUcKek8oUGhRdmYzbnpFIz4jbUt3MXV7U3lPVGIj antOISN4dm5lZ0pLeUVZMWJnbDhYJWhtcXpxOEt4O2okMExNVUpsCno8cUsl XzhYLXZ8NyszUX4pbSlRXmZQfSN3RHFzKWhZeHJaVGJzYHw5dDQjfiVqWlJG THYrJHNMNFVvPSlzdWk3aAp6Iy1MO355SGl5aCgkVGw1UWQyZHpXQ1JDPnpg VnNRak9vfnM+VVJ9dU8yMUczYn41Pl9zbDtmMXBMM3lwNlkoKjIKelRnfFFQ WVZGZGY0bjJpMXJ5dC1+UiYmRXlFSH5HSWFBWmF8ZXtwPGxkWW0+PChZbSRT eSMxa2JXRmRTIXNsNCM4CnpnKy0mNDZSKT9wPXY8SXJ4S0FrQmBoMjxUTDQt fFpAU0l+Ujt4WCpXKUEtNjhsXzhKS3c7VX50dzM8KTs1cSVMJgp6TytXVmht Vjk0JlQ/RV5HRmc/NTErYnBRVXpoVG1RaFZobX4zWjBvKzloPFpDd1IjQFMj Zko7PDxaYilvVCMjSnwKeil+UVNnNE0jKGRwdT0zQFBQM0UhY2hjQCp2JEM/ VlU8e0F8O0VhJEMpTXZwaGMzUSZJRDVeYlNNZ303JllZRXchCnorRz1yc3tj WEZ7UFF2UW5jO0pKSXNFbiRyNGdOSnhgSnBMPElhZkFZYEFoQkFgTzBiR2pZ Q3p7UmxoeS13SGt+RAp6dFNybDslOE1mMnN7LWNxeih0MS0hQl5tQmlPOVBw b3Q/P3tBKCEyUDAmLTVmbDVQPmR4PkRaVUxnKlRLX05ydDUKei0yaU9CQHNL WT1KYzBzM2EqezZHMnNfaD81UDEhd3JIelBeaio1PSZQJnBFa2VecHp8eU96 OVRwRFVib0dRakJ4CnpNbyExb3RCQDFleVY7UmMmKD0qVit2PT1LXkBOKWF3 dXBmMHhTbThBUElSMGEpKWdefkxEKFZgaXolJUI5bFY8OQp6Tlc5cXgrXiFT LWA4c3g9TT05TEZuKXBTV1JFTlZac2xEIUI4d3Z9Jk59dzB+USlJcTxfaCo2 ZUwlUj5UPHhidEIKekhWS1hfdkpiaUQkUEloUGMzfGtzU2puUy1saD84UV9n bnJkWmFXcCM/LXgjY2cqfVcmcmJvTnlGI2V0QHExRjZwCno5VCo+MGFsaipV MGJ+fmB3eF9WeGBfbn5ZMW99Oyo9d2VYbXojd1BhIS1XSFUpSzdNVzsra3tL Ql5oclRPSVN6awp6UWVtKn03dXY/bCozRWdRZzR0KkloRyEoaVcrYn1Ecnpl Xk09N0BBYUF7LW5NTlFZMklxYFJ8fHlSLTlnPFl7KiMKdCh6Vnc5O1F4Ui1E RzVvS29je28lK2I3YFR3PiM0MUtZJl91YEdwQzlgVEdYP2JmSUZ0e30pRShM XiVLZQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9zZXRv cF9leGNlcHQucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFp bi9pbWcvZXhfaGFzaF9zZXRvcF9leGNlcHQucG5nCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLjc2YzU0NmE0ZGFkZDdmZGFlMzEwZGFmY2VjMmVjZGVmOTY0 OWQ0YzUKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEzNzcKemNtVi1uMSls bmVQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAw Nj5QKXQtczAwMDFxCnp4IVgyfiFFZXAoT35DMTQjX00qPz81NXVHSyltU150 S3V4UDxWZHtjaVBQPzZtQyRCdShhZz45emBeZHUkTTRPfgp6XjR7THx5dUl3 SnRtdzB9PmIkK30pWVM4KHNOX1l5PX1mQHNRXk0rbiliTnpwQE9zWWRnVkY3 YSliNmR7Xk8/TU8KelFqSG1xd3J0cXQlTGwwOTVVYilFdUgjK0I+djdCTVBR SzxeIVJLVmY9I3RnJXB+UE48dXRqcENIRn08QFlMQk1ECnprMmR1MiQ/KXZB QGEocWw+JGRhbiREK3F6PmcxajM8REJXPm4ocFNhcXs/SU8+YkJ8T285TiR9 PWlRZz08RktkQQp6WDdBezs9LSF5OyttYDBvbDxlVEdtJURYX3duPXVYSk1y dHA/Qks1Si1tTEhCenEtKyp1Ryg+VXUwR3FuaU01JTIKendCdmQzPURfTFBz X0VMTz0rfiQxLUBBSVRMRndBNTtMRDJOJGNOcz1oMzMoc2psb21zKlFWZGJo VGctMy1OQXo4CnomIUQjRmVDRWBvLU5KKzF6PTdNbmY4QD1jeCRBJUgrcW1W PHB5U00qPmUjbHI/dCotQEwlaV5XbWRzdTI9QVl+Mwp6cDZ9X2peNjF2ISRD fVdxWHZMUkEkRiF4YXNubT4rKztNZih2YkVebztyOCQ5d2VzeDY9Rithd3Ra SnlkRlBQYVkKempxV0c2dkM0Jmt6bXx1aiFuTF5hXlpWNCpAfk4hbGoqO0VM IXxjK25ZP3tfOWkxc0ZXekg1KD8tTyRuVD9BKmNnCno/WilvcnZoQyFzP0Jj S1I9ZlEjNk4kdXNhPUdtM3kpfDJHWmttfXMzY2QmZml6PmUoVnVIQEJgPEk8 MWYmVyEyVQp6cnxzWHk7P1J4WiY1UGo1aVJhYSZgdTZWYzxHJCRGcnt+dEM/ QV5LUy1uIStgcTIkaD0+KUUjNHpKU31qZSVpWnoKejxJQTRmeU1FZmJlUVJL ejl7Pk9WMGQhSk1Rdmc4YiprJTkjMDEwcU5TI3RtWTA3dzc7MDd3OHYkIWs2 VTAwS2AqCnpMX3QoWSQ3NWgxOCEkM34wMyNfe24zITJ1KzFReSMoISM7WCNt eiZTN1NlNnUxXmIxVTZmSiFHMClqJXFkP2FaUgp6NWZ1fWM3PnJzLV9scVBT MnVLYjxoKFhnR3VHRUszM2xwPUh3MlVtMW9WPGRmNSkoY3gkfEA/Vlk3aXxQ PktkOV8Kek94aWxTZGl2UDMhMlAwUFV8PE4qTCU8ZTloJCpXVzByaH55aktS SnohSWs9dUxybUdvS218bWJud2VXelRBQVZzCnpPQkM7YFNWT2QhK3R9TEtv OG4zcnM5R0UjU3skOTZVMGpMTztzKCo7PyYwYT5qYXYoe2krejBrbHRFaGpU Pn1EeAp6YVFYISRqUnBJS2dhWS0xblN3dyNhajghXkd5Pj19KTV4Z2ttez9Q eVFlU1hyTD4kbC0pQSlxTXEtMzBhS31tYyoKekRSRSVHcV42fjNXYTg5PFFZ ZmlwS3woQSRDcFJ4MnctKTUwUG8pNSZyTFpXIXhDRXpQUDtEcyVZYXRMfmtS KWdmCnozOXF0cDYrJlVrMDhXREQ9NFBmSzRKdXtqNnteSCZGfFZ3d0cmY3Bp M2FDU2tTUz1QMVRVM2JCMG4kPXNRKkRZUQp6UWQzKTNVdGliSSp3b3pJKVk2 TDhGUDNmWT9NUFpXST1pfWlkVjJmJUNycTM7WTRWaCptfDdxSzhpdnBAWlRn SEUKekdpSmAzSiFlYDZrVU0pOHJYSkl8Xlg0eUQyKUN1QzZRcEMmbC1VZG5i MkA4NGRadTh3JjI7Z1NyT1RHWHdiWFYyCnpiPDl7WDhOXjskM25DfUNVfSN5 amRkPUUoYTRtSitBVDNSa0s8eEUoQWFZVUBoTCpxJDgjaXIrWXBMJTZYPSRE YQp6VnNFSmprclNJU3Z+MW5CSiRuYTlURl5wX0QyTUcjLW5EeFZZMk0kcGNp O1g0cXlfVHNnTkZfd3Y9OX1RMk0oY1YKekF0SiQ7bUstPjZwb0ZBa2lKciEm M2ptfn0tQFgwSTkodz0pMDN+IXFTYWY3emJZKGhZYSVFdzNXZEpmVEYpJUdM CnpHQSVHTVI1Q0MrRyY0RmhHJUdNUUl4c0xlbkkjP28wMDFSKU1PYnVYVlJV NldaRXN8MFdfYldJRmZsTUtGZ1l6UwpqRjtwQCRJeTV2b0ZnN2JOSDk5YWIl OW1CRjAwMDAwTmt2WFh1MG1qZmgjQlhRCgpsaXRlcmFsIDAKSGNtVj9kMDAw MDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBs YWluL2ltZy9leF9oYXNoX3NldG9wX2V4Y2VwdF9hbGwucG5nIGIvd2ViL3Bn YWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9zZXRvcF9l eGNlcHRfYWxsLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYTI0ZWQx NmFlYjBkOTNiZDEzMzkwMmIwYjIyMThlNjc0Zjg0NTI4CkdJVCBiaW5hcnkg cGF0Y2gKbGl0ZXJhbCAxNDAyCnpjbVYtPTElPipGUCk8aDszS3xMazAwMGUx TkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDZeUCl0LXMwMDAxcQp6eCFY Mn4hRWVwKE9+QzE0I19NKj8/NTV1R0spbVNedEt1eFA8VmR7Y2lQUD82bUMk QnUoYWc+OXpgXmR1JE00T34Kel40e0x8eXVJd0p0bXcwfT5iJCt9KVlTNjsw MDU8XjxWQyplT3UqPz0hcz48OEBSWm9fZGR9PkYoZH49Vz95Y1lSCnpuWT8m WGpUdy0oWX1uPD8yZExyQHRLdTUyPDZYdDthbSh5WnpVRXJOPVZabWBsR1gy XyM5b0IzTVJLRHhkWS05agp6a0VYJG9IdVVreUBhKHRuPzYmWGd3KTV9RHFR X3dCPGVsb3tvYXh9Mj8maDxrJTQ2Xjl3Jn4lVT0tLSo9LUl3ZysKenUmMiN0 QDk0QVctazlneG1nZC0kP0JLMUp5TEU9UE5wYDlgQCQxQ3c7SThaNXRuY0sl eTN3UHErSHJXVUtISSZDCnp3Vjhnajw5WURyITBGdG8+RHM5MSpRZjJAeUx6 IWY+RHNCXyVabEh+aHUrMTc9RnleISFCZ25ocnIqWWYtb3UzNQp6IUdoKF9w dGszSD1HM0khIWhfdHZmIW49KjxqdFBCPndvTHB4YUgyRTxJSkF3KnRXWHZm XyRfP3l6cXBVJXc2bHwKenBYPXFHQDlESmk9K0B4Sm4kVzlnI2d8MEt3NTY9 NilRcGhhYWRwKFB3ZG1tQ19WNFBvXjZiVXQoeXIwMFlOKSZ+CnpuQXQwaD9r QmdnJTd1WnltV1FPbXdZYyowYF8kRilzalRJV2s9Pzw9PzkjMWxuJHwwYl85 bEExWW1idU0oOSFZaQp6K2A7cWgjX3J+Xz9jfWlSOzstPU0hR1lSST9kN3JO Kl9Hd2lsalBIbz5mRVkjdXpjTFdqX2wmRDxrZ1ltKHZSWksKempPb34/P2Nj YFkoMmUyRWl7USRNPWhkYjlfVWBaRnpVYkplPWhtZ3stTVFARXk1LVFKPGok WSMqfHl4aWZaTSEmCnorUGkoQCVid2MxZSVpV3lIa2N+bjAwMDAxYlclPUow Nl55MFcmaSpIMzI7YlJhe3ZHVU5Ce3I7TkJ+QzNZZCF6fgp6MCViYD1LfnpZ YFZfK1p+RmZ4R3ZCUG0qI218MGxhKnFLUHUhb2tWSyV8bl9OKHJ3YGRgLVBW akVxd2R9ZjxuVDQKekJ4dzs1NiUmXmpqOU9yUmsoODhWa1lvVE1MT19aUzFm KVB9aVBiYGVFcFdlcFoyPT0jeTJGK0Z1ejg8fVN6MU9gCnpqITlsWVFBd0V6 cEI1RVdSVylecDc3aChmRW9+K3BUfElwUlkrQiY0dVdEIyQxa3BwbDdJPXNP Wjd+TXcwZzBKXwp6ZVBOMCNeJnpKKjY9T3FINU4mMnxWUUZQO2hBWmA8Y3dm fjlxUSUxMiZmZFdjU0dxdmU7dDB7PTxtfT89TXgrKloKemghemh8RksteypU OTk0cj4qdWNtKGh9ZW43IS1gdEZOaEVXZilNfUVGcmMxckdaMlZDbWNiMkYh WGtsQUdtRENqCnppSCRRT0QhK3o9TWFCYmRGLXU1SE4+MEopN25IPjNuO0gt SE9JbXRIVylAQkBEMjAtMEhZQ0p5YWBXO0ZhQkQjPgp6YGN3LWNUOGZHYk49 a0ExMT1XQF51b2VPIzIxJFlAa25rJDZQJGQrbTRCI1lhVlBTM3QoeDYmaVFL PzNaN0teSD8KekRobzVQdEFJTXhpUGQ1V3V8PF9BOVV2eyR3bCF1KkJESG4o NEdyfjtQMGNNVyY4PS0le2JKU2IoU2Y5O3YjWXpPCnp4M3tsPCFvKjNGQ1Fx Mzw0TzBzd0sqSkZfcnE3cjtiTE9uc2JMTEwoMWFqeGgjPylnclp+bFVYaXtR NEBjN2IjKAp6bztydHRWUXlDfk5ZN0xaeDB4K2p4QGBGaHhSJHpacHBLYTxy LTBiMj5Pa2FfUnR6bngqUXtOKTk8SFVuMmMpSFcKekdLanNROXo7JVYjP1RW OWFudDU0YTRpa0pBVDJHRUs8dXB6QWFZVSpoTCZ5SGNqVzlPTmVmenQ1I19M NURaQlVWCnpDQyZUMF93N0cka2hEUEZiTGpBNGdjaFFyXjU5XzxFa3E8M3Yo a2VINTA7WFlFWVpeI2JwWmV0OHtAb30zMnIzLQp6MDAxUilNT2J1WFZSVTZX VnsmQy1iWSVjQ0ZmbE1LRil9U01GO3BAekl5NXNuRyZDelBIOTlhYklHSDZM MDAwMGIKemJWWFFuV01Pbj1JJkUpY1g9WnI8R0I3YlBFaWdHUEZmbWp6R2Rl VWhJeHNkWEZmfT9iRnZeIXp0TjtLMjA3KnFvCklNNk48JGY8RCpsV0I+cEYK CmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2hhc2hfc2V0b3BfaW50 ZXJzZWN0LnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4v aW1nL2V4X2hhc2hfc2V0b3BfaW50ZXJzZWN0LnBuZwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwLi5mYjUzNmIxMWI2OGZjYTZjMmZlZGExNGE4MDExMDAzNjc4 MjA0ZDYyCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMzg5CnpjbVYtejEo TiFTUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAw MDZ+UCl0LXMwMDAxcQp6eCFYMn4hRWVwKE9+QzE0I19NKj8/NTV1R0spbVNe dEt1eFA8VmR7Y2lQUD82bUMkQnUoYWc+OXpgXmR1JE00T34Kel40e0x8eXVJ d0p0bXcwfT5iJCt9KVlTOChzTl9ZeT19ZkBzUV5NK24pYk56cEBPc1lkZ1ZG N2EpYjZke15PP01PCnpRakhtcXdydHF0JUxsMDk1VWIpRXVIIytCPnY3Qk1Q UUs8XiFSS1ZmPSN0ZyVwflBOPHV0anBDSEZ9PEBZTEJNRAp6azJkdTIkPyl2 QUBhKHFsPiRkYW4kRCtxej5nMWozPERCVz5uKHBTYXF7P0lPPmJCfE9vOU4k fT1pUWc9PEZLZEEKelg3QXs7PS0heTsrbWAwb2w8ZVRHbSVEWF93bj11WEpN cnRwP0JLNUotbUxIQnpxLSsqdUcoPlV1MEdxbmlNNSUyCnp3QnZkMz1EX0xQ c19FTE89K34kMS1AQUlUTEZ3QTU7TEQyTiRjTnM9aDMzKHNqbG9tcypRVmRi aFRnLTMtTkF6OAp6JiFEI0ZlQ0Vgby1OSisxej03TW5mOEA9Y3gkQSVIK3Ft VjxweVNNKj5lI2xyP3QqLUBMJWleV21kc3UyPUFZfjMKenA2fV9qXjYxdiEk Q31XcVh2TFJBJEYheGFzbm0+Kys7TWYodmJFXm87cjgkOXdlc3g2PUYrYXd0 WkxsQWpfdSNaCnpgdTZVKHZDNE9Wci16NCYhbkxeYV5aVjQqQH5OIWxqKjtF TCF8YytuWjB5e0BrQ05TZSVVaGIoRTZ+eUxeWDxtJgp6PUNiWU51PFlXbUBh TXNaXzlwRyt2RjYjODw8XnRyKH4jPWlzJiVNX3NKdClpOzshVj9rPms+ajs/ OWllKnIkSGEKelIrIWw8Oz9SeFomNVBqNWlSYWEmaDNobnA/a0RmI3pVYkpl PWhtZ3stTVFARXk1LVFKPGokWSMqfHl4aWZaTSEmCnorUGkoQCVid2MxZSVp V3lnQE0xOGhvc1RxNGdMVEMwMERHVFBFIUN0PUdiTmMwMDBTYU5MaDBMMDAy azswMDJrOwp6TSMqYkYwMDA2fk5rbDxaTlhLSmZBUjkwO2ZkQ15aVDl9d3dT bFFUX05ZY1c9JDtIaD5uaWtTKztSWEFKbWxRMzAKemB+cmVQIWg5clk1Zksj PW1sJXYlTmNXMio5fCVZZUshYCFwOWo/QGVPJCFzVmwoZFgybGJwUFFxN29C NkV5Xms/CnpzJWo3fDlPQGRIVDE/dEh4X2JLOXc3fnRNVnFqbmgoTD14JU0y SVA/N3k8UXcjRWlrZEZ1fDRqa1Y4el8kVXBAfAp6bzBeJGhTWCFDbDNRSDk0 dDVgI3tuQV9PZSpfK31AN3BQaHNBWColcW9MeVhyKVp6eHc7X2woOzwmOWVs dld0Q3UKentnZ3BrezlPWUFnSyt1PEM1Ozk5Z0BnazJncWVhc0lCfV5ASVd6 KzNHfUZrYT0kS2VqcUVjVVFYaGE7KTdTczVJCnojSDNgTGVuQ2xtSn1HZnZ6 b2UkNlhKcTJrZj5KMXtXSTtrS0owfnxVQUdhM2RxRURwJnFOVDdYenFrYWFV cj1vKwp6MSMyTT9WdnI8ZzM8PEJZYXVxXmgkXmNHKz1IX09tQVBwKkk8clMq TFhmZHk+dFRaPFR5OSVnN2phViVmNUw7QTsKeihnRCZeV205ZDZCdk1tYlM2 XlMoKEFkPTYrfDwmRilpMEs5PyhJbGdJeSQ/JGR3UDJOYFhAfUJJQkR7ZnNo QzxJCnowVUN6VEY+Tn1Lb0h9Rlh0WjV4VSNfU29HZFE5aWNvaX4zMCs/Slk3 a2REP1ZHWiF3TCltYTE1R1g9d0tyaSZJWQp6Uy1LM2FyTTMlMXdrJSU9MVNA Sm0/OHore1QyYClGeT1FPDNPSTxnSlkrNDc+dmMzKylwNDViKUMyKyZXT2BH OWIKej5VJShCXkE/Ym50QFItRyNBWGFGK3FVbj4tYnM9Y3Y9QWY4VllgeGRA N1lWNV9qbTh4ZjhaYyNmeFBGPztsbF9tCnpMYENKbiF6Znh7M0ZnUkFvQyhJ WDxsdz1CQl90KEZeZlgzWTAwN04qKztsZnFYKkI9PDAzfiFxU2FmN3piWSho WQp6YSVFdzNXZEpmVEYpJUdMR0ElR01SNUNDK0cmNEZoRyVHTVFJeHNMZW5J Iz9vMDAxUilNT2J1WFZSVTZXWkVzfDAKdldfYldJRmZsTUtGZ1l6U0Y7cEAk SXk1dm9GZzdiTkg5OWFiJTltQkYwMDAwME5rdlhYdTBtamZ1STJKTgoKbGl0 ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v bWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFzaF9zZXRvcF9pbnRlcnNl Y3RfYWxsLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4v aW1nL2V4X2hhc2hfc2V0b3BfaW50ZXJzZWN0X2FsbC5wbmcKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMC4uMDAxODE1N2Y2NGE1YWU2MDFhMmRiMDhmYjFlNGE1 NTMzODVjMzNiOQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTQxNwp6Y21W OzQxJE8kMFApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRC ajcwMDA3MlApdC1zMDAwMXEKenghWDJ+IUVlcChPfkMxNCNfTSo/PzU1dUdL KW1TXnRLdXhQPFZke2NpUFA/Nm1DJEJ1KGFnPjl6YF5kdSRNNE9+CnpeNHtM fHl1SXdKdG13MH0+YiQrfSlZUzY7MDA1PF48VkMqZU91Kj89IXM+PDhAUlpv X2RkfT5GKGR+PVc/eWNZUgp6blk/JlhqVHctKFl9bjw/MmRMckB0S3U1Mjw2 WHQ7YW0oeVp6VUVyTj1WWm1gbEdYMl8jOW9CM01SS0R4ZFktOWoKemtFWCRv SHVVa3lAYSh0bj82Jlhndyk1fURxUV93QjxlbG97b2F4fTI/Jmg8ayU0Nl45 dyZ+JVU9LS0qPS1Jd2crCnp1JjIjdEA5NEFXLWs5Z3htZ2QtJD9CSzFKeUxF PVBOcGA5YEAkMUN3O0k4WjV0bmNLJXkzd1BxK0hyV1VLSEkmQwp6d1Y4Z2o8 OVlEciEwRnRvPkRzOTEqUWYyQHlMeiFmPkRzQl8lWmxIfmh1KzE3PUZ5XiEh QmduaHJyKllmLW91MzUKeiFHaChfcHRrM0g9RzNJISFoX3R2ZiFuPSo8anRQ Qj53b0xweGFIMkU8SUpBdyp0V1h2Zl8kXz95enFwVSV3Nmx8CnpwWD1xR0A5 REppPStAeEpuJFc5ZyNnfDBLdzU2PTYpUXBoYWFkcChQd2RtbUNfVjRQb142 YlV0KHlyMDBZVFVxJQp6P2NjYHdfVV5aXyU2RVhMaGxoKjh3WWMqMGBfJEYp c2pUSVdrPT88PT85IzFsP0EqYlJsSEdtRlRia0FAKDkhWXAKej9aKW9ydmhD IXM/QmNLUj1mUX5mQ2hnXzE9R20zeSl8Mkdaa219czNiKlA0QHlmNXRIdUhA QmA8STwxZiZXITJVCnpyKyZ7P25BdDFoKDJlMkVpe1EkTT1oZFohPm9rcS1D LTM5Rj0tOCp7KX1gIy14JE5HJDw8T3p6JlkkYnF3JW9wZQp6K3F7MC15TTUh IXA0eio5K1BaeShmeG5pQXF5dUUwYDJZWF8wZCFKTVF2ZzhiKmslOSMwMTBx TlMjdG1ZMDd3NzsKejA3dzh2JCFrNlUwMExgQ0xfdChZJDc1aDE4ISQzfjAz I197bjMhMnUrMVF5IyghIztYI216JlM3U2U2dTFeYjFVCno2ZkohRzApaiVx ZD9hWlI1ZnV9Yzc+cnRBZXZ5PXZXUlBTNEF3b2NrNCtOd0BZS2hmQ2hBbld2 Zk5jUklTaH5aTgp6YG1sTVFpQ0oxa1IqcCR0S35ZSlczNy19ZlJhR14waCF6 ZUZPKVlJRTliRytyMThpRjB2OURAcVhhdnppeiFyRmoKejBjfGtgPkgmJEZm UEc8I0VBPTYjRiVARyZSUzwxdlplZUw8Wkg2b0xwP0ZgXzJCTzhuKjNSQysz fEcyOSkjMz16Cno7XmdlJj5QRG0lY1plMWJQY0xzRCsqKiliP0NhO1IwQDQh VDc4biRhKD1VaCsxQS05JCZAaUIkYTVFNXlLJGdKYAp6UktnO0dQQlYqJmop eyNrQlB6ZCFnaGo+IVo4MXdvT2lFNns9QCpwNT1iSVcyX0Rmb05NcklhSEVo dlNPWUJuVXEKemEmcShYM3ZnPmVGOFdqcEF6RiV4M3JiM0hgVVRhTkdPIWlg QXFHaTtDWG56ZHVUVWl2clZRWERYa2xTKTJHWEVmCnpVUXd3PWoyNFRrc3d4 WEp1JmFQTilRUXolMzkmXyRDPjxheil3VlRlTkZ1ZCReJGlYNmpaTXVoRXpQ Wk1TcDh6dgp6PyRMcHlyTChLTXI/PERTZjVPQmBsT3w3QEl0XjBgQnRYTHZJ O1BKNmxHQTMrbm14U30kZTEkfFE7KnIpZEdpLTYKemd4Z1p2MT03KHJiPUlP cXYlNnxSZFp1RXkmMX5fS3JPVEdYd2JYVGska3I4JGZNOGBFaCZgbmhMKDho d1l1MnVWCnpZcEwlNms8SUh0U35rPiEqcHIodnY7PU0zdzBSMyRPRzdWK1l9 cEZadmFKRWNwNDVWJlcmNGh1SWxEO0dmKS0qIwp6SWMjXnpwMXUzOWRjUFom X3hKMlNhUFNhbWZ4UCRka3N9QiNMYENKSEJQZCM2M0ZoY0FvQyhJUF53NlAw cjZlVXcKel5mWDNZMDAwVXs7NyF+M0x0Nmo8MDN+IXFTYWY3emJZKGhZYSVF dzNXZEpmVEYpJUdMR0ElR01SNUNDK0cmNEZoCnpHJUdNUUl4c0xlbkkjP28w MDFSKU1PYnVYVlJVNldaRXN8MFdfYldJRmZsTUtGZ1l6U0Y7cEAkSXk1dm9G ZzdiTgpYSDk5YWIlOW1CRjAwMDAwTmt2WFh1MG1qZkNaelVsCgpsaXRlcmFs IDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leF9oYXNoX3NldG9wX3Vua25vd24ucG5n IGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFz aF9zZXRvcF91bmtub3duLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z YTc4ZmE2YTFkMzVkOGIyNjY2ZWUzZmZhNTU4M2RiOTY2MmE2N2U0CkdJVCBi aW5hcnkgcGF0Y2gKbGl0ZXJhbCAxNDkwCnpjbVY7QDF1Z29DUCk8aDszS3xM azAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDdmUCl0LXMwMDAx cQp6eCFYMn4hRWVwKE9+QzE0I19NKj8/NTV1R0spbVNedEt1eFA8VmR7Y2lQ UD82bUMkQnUoYWc+OXpgXmR1JE00T34Kel40e0x8eXVJd0p0bXcwfT5iJCt9 KVlTOChzTl9ZeT19ZkBzUV5NK24pYk56cEBPc1lkZ1ZGN2EpYjZke15PP01P CnpRakhtcXdydHF0JUxsMDk1VWIpRXVIIytCPnY3Qk1QUUs8XiFSS1ZmPSN0 ZyVwflBOPHV0anBDSEZ9PEBZTEJNRAp6azJkdTIkPyl2QUBhKHFsPiRkYW4k RCtxej5nMWozPERCVz5uKHBTYXF7P0lPPmJCfE9vOU4kfT1pUWc9PEZLZEEK elg3QXs7PS0heTsrbWAwb2w8ZVRHbSVEWF93bj11WEpNcnRwP0JLNUotbUxI QnpxLSsqdUcoPlV1MEdxbmlNNSUyCnp3QnZkMz1EX0xQc19FTE89K34kMS1A QUlUTEZ3QTU7TEQyTiRjTnM9aDMzKHNqbG9tcypRVmRiaFRnLTMtTkF6OAp6 JiFEI0ZlQ0Vgby1OSisxej03TW5mOEA9Y3gkQSVIK3FtVjxweVNNKj5lI2xy P3QqLUBMJWleV21kc3UyPUFZfjMKenA2fV9qX1VfPjUpd0E1ZGpudUpvKXlL VFN6dSYyPTwmPkQ7I21EYUc9PWtzSXdlc3g2P0FebEwhSD96OHRNY2Q2Cnpg fXAkOXYlUnJ+b1Z0cFEoelVWbV9XYS1BXn1vVUZzOyVZRygoJkVHa0A0bHdf dD8oWFAlNzZ2NEJjaXR7UE9TSQp6LVNuJWo9SlZ+dz8maC1YPGdvMUd1a2gh PTxHUSltUVkrJGNQMTtFdS0pbHdmPCswfTNtRjNveDxrT0pxK15XZDYKeig4 aXZ5KypUfj87OyFWP2s+az5qOz85aWUqcihyUEo9YTdQOz9SeFomNVBqNWlS YWEmQDNFZk1kUERFeXpVYkplCno9aG1ney1NUkczelVyV2Q/NCp3Ujw9XmJ5 eTUtUUo8aiRZIyp8eXhpZlpNISYrUGkoQCVid2MxZSVpV3klVWVkPAp6b144 fSZMZXJ2YHZaRURNMDAwMDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdVTkJ7 cjtOQn5DM1lkIXp+MCp5JlQKekt+ellgVl8rWn5GZnhHdkJQbSojbXwwbGEq cUtQdSFva1ZLJXxuX04ocndgZGAtUFZqRXF3ZH1mPG5UNEJ4dzs1Cno2JSZe amo5TihkaXpGV2lORGVAVkxETDxzKVEzJEE2U0lgR2o0WUYheW4+PDw2Rngx PERrYGRLNUdAPyk4ayQ7Ngp6K0ImKj1gcTtGPHtpMCVFVTxsRGV6IXBTXkRY U08oXj88flQhTS1yVG1ITG9GT3hlZ2wxd0A7Z25PaiZ8bmNAbWQKejZ6ezg4 TCRzTE4qeEsyZjt6fTImU3t4dSs5RyNxOVQjM307MkdRY347cHlkI1RNTSNf ZVNIMHRMMGJHPjB8SjleCnpgVU5HODFeYjFCMGAtS01mPFFRTnNaVGpIMF9a ZjskZilSO1NXfWA+VXZPd2Q5TUJmaV89TG95V1NvOU1OcWp5agp6YWJVbHNy bG5fTzs/I210RDUrI1lMTSVIY0ghbU56N1VaSCZyMndMKHVxZU57MWdCcTZa N0J0N0FyTkFhQnhubz8KenVkO0YjTFNmMVBQSi1zPFd+THd3RHJNeXJzPkVu OXVkSip6SHdDKjJzNiZsZEVmeEA0UkVXfDYobyR0cFpIZ3BQCnpRKElTR1Up UnZzKVpFPEUodSZuRG1UbTZzTkxvNU55U2pVTmRpKGsoT3FAN3JAfDNCVlN8 OS0kaFJgdT5Jcz9PdQp6blhgYWtfOGJPPXgkYGpmbjlnNllhTTVEOEVqNjck OVNsb21FblQqSil+cHBrPUctWTVaWmxvRVlXMTQ2YTRvZjYKekFhZFAkMjhL QnNYM1lZekMlMGZ8Knw9JSptYVQ5dGI9QEdjWCVkandIZnVZR0oqZiNwT1c9 OzN5TFE5MSljMWhNCno9N3xncGR1R2tyM3R+QGYjP1oyRnxBRmotNytNWihu PkZpakokNVo8QXFJMlVreSoyamNHdXg+KnM8aX1DcitZeQp6emh5RXwzcXd+ ZTQofWc3Yl42UiV2X05qMUdNOW0yZFM/eGVLdDZIcXtDUntITktgVVJ5KWJM bSNTUjc+UUYtPH0KemlXWD5zeGlvOW1XbjJseXdCK3BCdm4zPVlPWX01R1Q+ dDxsZSVpajNDQWczUDAwMVIpTU9idVhWUlU2V1Z7JkMtCnpiWSVjQ0ZmbE1L Ril9U01GO3BAekl5NXNuRyZDelBIOTlhYklHSDZMMDAwMGJiVlhRbldNT249 SSZFKWNYPVpyPApzR0I3YlBFaWdHUEZmbWp6R2RlVWhJeHNkWEZmfT9iRnZe IXp0TjtLMjA3KnFvTTZOPCRmXi1gei0yZWFwCgpsaXRlcmFsIDAKSGNtVj9k MDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2ltZy9leF9pbmRleF9vbmx5X3NjYW4ucG5nIGIvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaW5kZXhfb25seV9zY2Fu LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NzY0Yjc0ZjVlNWU1YWYx YTIwNWIyZWNlZTllZDE4NDcyN2UxZmUwCkdJVCBiaW5hcnkgcGF0Y2gKbGl0 ZXJhbCA0OTgKemNtVjxPMFMqMyVQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVv MDAxJXcwe3tSM0RkQmo3MDAwMU5QKXQtc3xOc0FWCnpiYVhhfCFEZzF4IUgr aDJvfmNkMT40fn05VmFEcmsmRiomMT83aDljck5RTGV5QHs+WD44OVREXlZ9 LUQtUj1NMAp6RFp0PEUhcjw9MztxUy1lQFd8dXYlSCMwTTxuajZEVShNejZ8 Sz94Tz1rbjkmXlZJM3wqNkg+Mz54Y2dBaFQtcWAKeiFOQGQ7MDAwMDFiVyU9 SjA2XnkwVyZpKkgzMjtiUmF7dkdmNjk1MVU2OUU5NG9FUUtBMFV0PzNLfnpZ YD9iTz4yCnpmLW5wUTs3TztWMD9OYl8mSig9PEozNUxeVURxanpDZFN5U1d5 dSM8YClALTA+KnM0MlZHVFF3WGYlbDlAaWNsTAp6TmRPWGV1aXlTeXBDTTQh O09AeSZYe3dTT0lVWHF+WFFzLX02UXZZUzRoS3JBQEw0PTBsfl5mOV9JcEFe Wno5QmAKeiRCaGtrSk1mOHNAc0wqVmhMV3BiNFEjaS0yK3JJUSs5LWVQP25v UTBsWUJOSCpsZDghaTdaVkRseT1FXy1JPVViCnowaXdOUnhkaXNsV3U7QSN2 biY+IUo5WjxAT3gjSihva3YyYD0qPWUtMStaIUs9a3JFcjhrdX47ZD1CPVlY PmoyWAp6M2BeNVo+fnk9aF53JSF6ITxYbUg8QS1CeHJpY1RfZ316TURGME1C fSYkOFV5ZXRjOWMoRSpZYGshMXliTVpITGoKb0YmUnNPTXt2JCFwWWJqb2Bg NVNDOFMhNXBpNForOyZqMGBiMDcqcW9NNk48JGc1I0k9XzVjNj8KCmxpdGVy YWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21p c2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2luZGV4X3NjYW4ucG5nIGIvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaW5kZXhfc2Nh bi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDQ0ZWZmNDI5ZmE5YTM0 MDk3NzZlYTg4YTExNDIxNTgyZjZmNDU5OApHSVQgYmluYXJ5IHBhdGNoCmxp dGVyYWwgMTI5OAp6Y21WK3QxP35FWVApPGg7M0t8TGswMDBlMU5KTFRxMDAx JW8wMDEldzB7e1IzRGRCajcwMDA0aVApdC1zMDAwMXEKenghWDJ+IUVlcChN N2A7QyZoTDU5P15WTC1oU2N6OCRuMHYjPn5HNUptZjcpcCZoM0tIP1dXJUhq QDBndyo2KiszCnpeOTg1ak9+TDZLdUgjJDk+dGVfMklKZjBjelVPUGw9eWEy b2RZLUFKIVFeSV4oWlA+NEAjPUB8PDYhZ2YkbmZtOAp6QDlETWo/WnhpcXYr P1cxP0JsVFQ+QjhhZl92aEx4PmcxajM8REJXPm4oeWVkPS0hIzwrP1ZhO3ZG NiM3PDxedHoKejtIfW9fXzNZeFc9R3ZDKjtqWk0+bEkhMkM/ZEchVS1tTEtF enxgc1YlYzVBQHlAfjRHc18qMiEpOUNaJClSRSlUCnprSylqYz5Ec0IkPWtu eSFrbUFtYUA4ZShUK3A2S3Jpc3sqP19VbmkzO2s/YnxeN0dfaD0rfiN7KlFW e0B5WUFhNgp6XlZ9LW4kJSlee2h+TE1EPUczSWk8bmo2RFUqNSlzJUgjMG8p dXJhc3FzWmcle19LWUQ8LXFMU3kycz0yI29fUCYKej0zbmdJeTVgY049Rnlf JihWXl96eGN9Wk0tbyU5NiEtTCR4ZzV9Vm0rYGZScTtPXndrcFg9SlV6fkFv ViY3U0puCnp3IUdjIytQaSteJSR9eyo+RXB8dTVCZGFBMDAwMDFiVyU9SjA2 XnkwVyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5DMwp6WWQhen4wP0EyNEt+ellg P1VkUEQ1PlhoM1pLQU47UV9DIypLd3ViTFN0VFR9MV9mTElrd3M3aDhBKE16 V21OPj4KelUtIShDIWcxbj5vMVFOR0UpRi1tJnlWLV85WnB+MCVsendrTVg+ WTdRdyQrcU9DKnZ2IzlPSVUrRTRWcWRwfEhwCnozPVJ6c2p9UmxIVmBDbyhR QTlGNkswWk5BT2lvVUlCdEFffE8kYHUzcFFYfWFWc3ZfWFYydFJOR1YlOCpV JTIxUQp6cElASiE5cDlhaSQhNT84JFEyNU85QT1lRDx0KXNxUjRPJjdOc2Bv bmhOMzdmYlJlPzFJVD8jNj1JN0BYcGo9cDMKelJEbyh+WD14Y3FvbkNKTSU0 anMxRj1TPD4xNmt3fDlTTmpmdWN5RmJHPDhRKmkhOEZOKDs+djV8N043WFlG Yl5qCnppNmVyYFo7UzdvZysmV212KDRfbmtoTGB5YDJwPGs9ZztTLTckVCZv bXF9NiQ4aVJxLWZZeGRASkhTRUh2PWQ4Tgp6VXZHMUh2YXFsZzgrTT53Wm5w PFJIYUZXNFFtNW1LSENuO0V5MEp3QT9SSVo+TDNWXjxEWHYpQ21kaXpoY1lF OUMKejdmMGxab3Q8M34zI1o1TDRgOWdOVWVBczMyKmB1TUFXRVN1UnhMUGVj Qy10cCpXKzxRQVFURW1Me2xLUnphSUBeCno3Q3ZNVmlYOXhyRzM0ay1LJSZ0 RUQlT09xMmttbVh6Mk5jcmQ/NSVROTQydyhfP1NuY0VXI0ZSN21EQCFWekRy IQp6bEYxfjRBdHhzc3ZZU1hHKHlSc2ppP2F3SWkqUENla3ZQTWdWI3dLOSZ5 QWcqYjFDVVdDWDs0JjtZR1hmYCRHWVUKenF+aEBsSUwrcXJtbXJFe3VDQV4h eFd6UkN4azltNj5XMSp3Qk5VNHJxIyZOV0VAVUJKRVM3UGtRZldnVGkkJUwm Cnp0X3lgY2wjMW5ZUlVBb1lTZUZpcVRyUGhESD5HT3oyMTlPZGR2MShKZ3BA IXlnPzRlbEZ4Z1lNRVJ7K3FyQ09gcQp6d1dwd211VT07I0tmIzUrOSEhQz1E Njx4fE14JH14aj55KlAmMU4wX2B2b0wqJFg8XnVTTF9xZz5QKUZMbzBYQE8K eklOQylQYXp6JVltZGxNQSt+V3ZoJj5mcTNiaCUpJW44alZJKXc9NiFPbkFu N1kzeWJHdVh6QnI2YjMzeD13Nn0jCnowMDFSKU1PYnVYVlJVNldWeyZDLWJZ JWNDRmZsTUtGKX1TTUY7cEB6SXk1c25HJkN6UEg5OWFiSUdINkwwMDAwYgp6 YlZYUW5XTU9uPUkmRSljWD1acjxHQjdiUEVpZ0dQRmZtanpHZGVVaEl4c2RY RmZ9P2JGdl4henROO0syMDcqcW8KSU02TjwkZkBqPktTcFdiNAoKbGl0ZXJh bCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaW5zZXJ0LnBuZyBiL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2luc2VydC5wbmcKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uODYyZDgzNzI3N2M5OWUxN2QyYjY2MjMy ZGU3OWZjZTAxMDc1MmU3YwpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTA2 NQp6Y21WK14xbEllQlApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7 e1IzRGRCajcwMDAzeVApdC1zQm1nS3wKelRVJDFXITNuQTJhK2Faemw5SXVY SG1hRjhvdTRAfXdkSGxEJDNlWDQlYzU4azt9UXp0TW9QZngkRXROKiNPaDxs Cno+VEFkN1h2cGxUI2QmVmE+X19ZJXZjIUE5IUdMd20/QXlKNityNWUwekpU MW5mUDJ5SitgKW9gKGVCO0RnTWAhWQp6LW8lOTcjZjlGK2hLJHRpLV5ZakYk Y1R+RT8lPklaO21uR2MrNDE3ZWpOO0laPGokWDwrd3RTbGtMQSN6PGtPSm0K eihWXnppcVU2Kyg9RiswJSlzcDdacXZoNjw9RzNJOyl1cGNCXlhBITw9K355 YCpRZSYlbWcoNTE+RGoyfis/Vk92CnpzcDtGUT4pTjtJLWtJdiVzX2Zqaj5F TjJ7LW1MODF5NmZNcT9CMlRVO0h+UThvYkJKYz9CVEJNO0pmUE5vJFRWVAp6 P2N1IWE8Rk1gSnZHMyUqP2RHIVg9Q2trUiEwX2g0QDk0QWQ+OXozYSF0bStC QGEocW4+JXtXeSNxO2dQXllGK00KeiFMbnJsMDAwNFdRY2hDPEs8M3pIMDAw MDlhN2JCbTAwMFhVMDAwWFUwUldudTd5dGtRaGU8PzFSN2w2fG0wTlN0CnpQ IXZYSyZgbEJCMkNKYU9UQSlhfHEoR3JpMnRrTzFUald2QDNJUVZeeEJtWk07 N1FLbTUpMzJHSUhNMlU1OUApKwp6Tzd7MWlHbFJrS0gyK3s7UHxFRDJvPGk5 eTdSd29SYWJtU3pRa1NvN3dybEc4IXNXVzVabXQ0PlBuNTE9RiZkMikKej5J QmhCeSl2ODRIdEchTkY2ISNeKUUxIXIocFIzVEpNV35QMCp9K19ebHsxWWNz eiU+RVh5O1BOcz1ASHswc29TCnpzWjFYcFQ0VGEtd09TcDRUcXpYI0FaNEBa Q1NZVW5nUWhofk9JMkR9c21MR34zSXokZSs0TkhSeD55WUp1dlckYAp6Xjxr QnhOKEN3WCFzbzA2P1F8O0RBV0ErQEh5NXpacVZCJitAbDgkOW94cjVvczB+ UkwybU8obXVBRztrJT09dj0Kej97JjAzdFIwdy1XTytfRj4tVkpAT3huJW41 UWReQzR3ZigwSUFzNUlpbXNDNHRfRVQ+OTRAWistKjhaKzY7dnJFCnpEbUw0 T1g2byklMVRoPkE2KnA+OTlXQC1PNmpNQCpaUU1xcUI5dVpRTWdXNz5wKmkj bSs1Z3VSZ1E2aHhWRHIkeQp6cCZUbWcqVnhpUTdLKCNUcTEmRGk0alZPZTdL Mmk7SURqNns9UV5PaGtIRmBqOX5qOH4rN3R7KiEzWF81NHp9KHYKenp5VlUp PWBefCttfGA+PEU8dXJENyM/emRwTGJnIXFFY3klNUVtO2ohQygkRFVheXpj U0ozfEFjUzBwYTUyZVV1CnpJPyYtKnd5dnhFTDFYSyRoKz02I0kxbUtCMmJ+ UFotOXRUQGg9MCp2NERZe3shb3h6cz9SM1dVNj9gITtgQyFuVwp6MG5ZMWpD bjReMXA2XmdfcktAN21TK0V8ckl9UzFEYEZUV04hVFcxY0JvZ3M1bHcqLWRg TH5VfEdieTg/P3BKIWIKejNfMW1zclh5dHprQ2g/UlJxKH03WCojbW8/TU9q OUNlJjNqS0lMTWwrKmpleURJX3VYUnFva2p2V35mRG1kKGNBCmo5NGhtNmxU VXkxfExnbiZ4Z0BgRW1eQTkxMDAwMDBOa3ZYWHUwbWpmUyQ7ZUIKCmxpdGVy YWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21p c2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2pvaW4ucG5nIGIvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfam9pbi5wbmcKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMC4uYzM5MTIzM2M0NDliZGM1YTBkNTJkNTBmNTIy YmQzZTM1YzY0OWMzNgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTA5MAp6 Y21WLUkxaWt4LVApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1Iz RGRCajcwMDA0aVApdC1zMDAwMVcKenJwR3BqIUVlcChNWlcxdyEwQSlNPlY/ JHNsLVRmayZnX0hIP1RnZ3p0PjUhTnl5KncxO3Q7Rmk4bXtBQSNwYGopCno+ YHVQc1RFWFhKI3BzZ04/Xzc8QFdeMipSJkdFZ3o/WjNoOCFvdSM7KWJyVGNe dj0pbihiNGtNKWIheHNfaX5uQAp6VFpnIzN6M2l1ez1jPXNkdUNNOUUjXyE5 X0B4SCg5I200Wn4qN1UpVEh1VWt5QGEodDEhUzJTI0A2RkVnLXJufT4Kej1B V3lxPShEdXl5dUl6eilibzsrKFQxc0hRakhtWnJDWVBYcmxHYE1nfGJHK3Mm JFRxdDgkfD9xUV93SD82IylOCnpXJFdkaD5nMWo4PjlwX2J3KHNiKF42YlRn c0E2YGlKRCM8TnVHKD5VdTBIZWIjX3J+Xz9kN3JUOzstPU0hTHtVaQp6PUd2 QyEqT1RQYWttfXMzZCRVNjEpc2ZAVWtLKWdiPkRaQEAhQmd3cnRtNHApO213 UVMlOEJSSHIwKExxPSt+eX4Kei1NUDh6ZjRjNjE8PFgoISZZJFlvdyhSNHV5 enFxRnpKU31qZSVpV3k8SUE0djxEQlc/bzBpTzc9LS0qXztIfk19CnpzcXBF LUA4LWJYI2Y5QyRnNT1HZndMfFhhMDAwMDFiVyU9SjA2XnkwVyZpKkgzMjti UmF7dkdVTkJ7cjtOQn5DMwp6WWQhen4wcl5RcEt+ellgP1VVSkMoP0FyKFZe QmJwUm1ETTJsLTJiJUU+JCQ2MStncTtESj9BcHg+Xyk4SEVGMzAKejFxdjx5 SSFRWTY1aTxoPUpuK0pPbjNzSU5kdmVacXR7X35gTWRwVFI0dGU8eXZFaztl I3dNfShjRlVjK0JIdUV4Cnp3WE1DUVF8IThUfDNTQ053flZkQVQ9dmlzQ05H fX4+VXFATF9aVTZ0ZkJJfHkqXm9oTiY1Jn4kOFhnJmF7c08meAp6KSVXXzE5 UlpnbE5pTmokX1RCcHJoIWNfQVpudVBuS1lra2ZkfSlOfmdeN0dZPTgjdHFX UUBPbEpJamsqMSQjVz4KemdxWit5elctYXNeZGpSKWdFP25uQH12aSFIIT1M PDFtZmpOM3tNPisoPSlTWUN3M0JYYEZ3TnA2ZmUkTTcrO2k2CnpQMFRzfCNp ZkFCS3lXen1VZzEmXjxVcXZ5SDMrUyl0dyQrZG9hZ0VmTH1IZG9JRyN3UkQy VmZyN0pnY1UwT15nKgp6VWtWTHpvR1hyeSM0QFJAbEIwTldzXkgpRl5wNGZm bUFyTjI0XmhkZnMrT215ODBHVyZmLW9Oe2dqY31JRTREPXQKendmTUtCUUBu dDhYMWhGUjF7ek87KzJxKlA0ciNKaEQkeDwmYzZvT2gzVHlGMTZ3SlJlaTJB Kk4mTyZDKHlRPkEqCnpUVGRoX1Y4Njx8dUlwNFVNbEF+YWExZ0RlR0dIcUtH cUwmeV40YnUjJTZAbitlRV54UHFVN3U8WSVmTldIWSQqKwp6UiU8RlJsMT9O eXYhR09LSEh7YUVDWE1vZVN9UFYwfDNqRXd0bnh1bCgrPX5PUFY5UUZXe3Y+ PFdWZ0JzbzBXazgKejAwMVIpTU9idVhWUlU2V1Z7JkMtYlklY0NGZmxNS0Yp fVNNRjtwQHpJeTVzbkcmQ3pQSDk5YWJJR0g2TDAwMDBiCnpiVlhRbldNT249 SSZFKWNYPVpyPEdCN2JQRWlnR1BGZm1qekdkZVVoSXhzZFhGZn0/YkZ2XiF6 dE47SzIwNypxbwpJTTZOPCRmP2V4REd5bmhxCgpsaXRlcmFsIDAKSGNtVj9k MDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2ltZy9leF9saW1pdC5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0 YXRpYy9leHBsYWluL2ltZy9leF9saW1pdC5wbmcKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uY2MzZWZkNTlkNzA0MzYzNDllNTQxM2Y4YzVkMjY3MzIwMGNk NzRmMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTIzNwp6Y21WO2AxUzxR OVApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0 aVApdC1zMDAwMVcKenJwR3BqIUVlcChNN2A7QyZoTDU5P15NRi1oU2N6OCRu MHYjPn5HNUptZjcpcCZoM0tIP1dXJUhqQDBndyo2KiszCnpeOTg1ak9+TDZL dUgjJDk+dGVfMklKZjBjelVOaUk9VUt0JFlzY3VoVmBIZm83d35kJj9Rd0RH YUIkfnVhT0gxcgp6O2NqbC1aRWV8WFl9MEZOaE4peXlqVHltQEh1VWt4QGEo dG0+JGRhbiRNNU8xXlg8bSs/OFdacHYrZEB4P2Q3clkKej4le0VodWs3S2o/ QksyTj0pJDdMVkMmX2M+ZkBhNj5iMj9NbiY7ZT89aThSLTxGTXR8bGpZVHQ+ KSktVyV3XzFfCnpuZGFHKjxrWFNtKH4jPWpzXypFdD0tcnMrKnAlYmFrRSt2 YUA4LWJvPGlEPWphTDF+M3ZFRnM8PGdufUJ0bSlnVAp6PkRzOTc7a35ydWRB OD8jeGF4bzYmV3ojQWl8Tj4+eCRBKUEoMm41QmlSam0rPWhtakApdXJ2PHlV bDU3P0FeTk4Keih4Y3xscVVfd2ItXmhwRyMpanQ5cX17QFUtTkF6OCg0cFNN aDF8ZV8tTlNfMnpKVFA7cFlQP3M+KU47RykxJjZtCnpxMiRlOzxJSkF3Knx5 cmRlZEVpWDM3d0pYMDAwMDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdVTkJ7 cjtOQn5DMwp6WWQhen4wKnB5U0t+ellgP1VVX081PlhWIVhgYEBFKVIzfU5m fE8qQiRtKXVgQnlTNEB4UUl6OUZQYWRiQ1d5I18KejVReElSLWQodDA7OV5l cHA9TndPK31XS3V6ZDgzZyYkJU1lZ1peempCNnRsdmclSU1nU1MpQCpKZTVj IUwmVlV0Cno9aDkoZmN0aj19Qn1UYF8kNnBZRmgqJk97aS1gJF5MaCtKI0g5 MHZjQn1RSnFuVVdEPik2PiMlOzxoZG1sQnFqJQp6bk5pK05HdU1kblpKJCZz bTBHMSV6bmgoJW90dkF9WGYqR1U9STUzNz5ZXnBKQWB2WDtiaC11cFQtMVl9 cU5wV1UKenJkSkhCdXhkMSFFcjY+IUIwckRfKFhGa20+Q2tEbCtKTGcjP0tJ RjFyO2BEciVrQjA2dUllSG11YVFObylrLTE2Cno+IXJjcV4hYmNuY0tnPl56 KlJ6c3QlVUA8LVZGbVZLM351VFg4LSE7UDI+flZfUkA5ezs5VkhIRjFBPmY0 RlJzfAp6QkE/T0U3dk1HVSM4c1Zuaz1yRHgxXnVGcCghKX1Lcms3IUxoaFoj V0Y/KyZXNVE7PmpGfkMpdzleMVFuVXJGQUQKem9kTyFXMilmTUpNUHhyN1BY TW0hYmxLaGVoUHFIenlGQ0UoaFFxbDdPd2k+dkx3R1pwajZnSVZQbyk3QGIj S09oCnpeSTQkNXR+aWBOMjIzdXVLTVpWZ2U/Sk98UjRSMTx4VC1nTz8xSmZj NWxiSCY5YCZkSEMhMmg4WF8zQykoRVQ+Swp6Q0VrVG0kaTtDY2xSV3tVaG01 b0V0WnliK2V6NVUwOU9PPDxeTj18ITZnWGtUPXlJVllYS0B4T2wqUXBgdjZ6 OHUKenA7UWB4bkF8O0M8UElUVUVTX2g5RTB4TD5WWmBESXZwKm1ke25iU2x4 dXxsTE4+dmN+P0lzSSFMR0wwR2Y+PEoqCnpLN3lsc3pJRl5KN2FVaUdZTmRY OEM0OH03N3cyNlVeK3UhNzZoXylocDNkZGFVfkFgUmckdi15V3JTUH5NJXFo YAp6dk1BUjBFWU0mcDwjTUJiOGA5JX5ZcV9aTkYwUHUqPUdFVnQqbnxGYXtS R2E4MTdIUmoqUGozWTAzfiFxU2FmN3oKemJZKGhZYSVFdzNXZEpmVEYpJUdM R0ElR01SNUNDK0cmNEZoRyVHTVFJeHNMZW5JIz9vMDAxUilNT2J1WFZSVTZX CnpaRXN8MFdfYldJRmZsTUtGZ1l6U0Y7cEAkSXk1dm9GZzdiTkg5OWFiJTlt QkYwMDAwME5rdlhYdTBtamYtK0dIQwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAx CgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFp bi9pbWcvZXhfbG9ja19yb3dzLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3Rh dGljL2V4cGxhaW4vaW1nL2V4X2xvY2tfcm93cy5wbmcKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMC4uNDFjMTE0OGJiMTg1Yzg3ODk4YjNmZGRhYTc2YmUzNmEx NTcwMzMzNgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTUyMAp6Y21WPE0x clBkKFApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcw MDA3OFApdC1zMXByS0wKellpbjw5WkU8ZEhiI2lqSVdLbzIzVCkxVVh4TXh3 Z1g7Rks0YylEcyl4QCVFM2h7M3ZVUUdSQFV4XllvfWV0eGBqCnpRRzxZaHlt ZTg5ZmBZd3hRSFh8eXpJOylOaD17KntRSCtYOzM4fmAwZj5EaShqRTs8cXo9 VG5iaipmRGNwXiVTewp6ej0lPThoKjZTfmw5UThAIUgraFltMytkRVFJKGFJ bTZuIzRtelM1QW44Y0QlI0YkWXN3ZEk8Z298flNZYio5SWgKenBgcFRfUU8y SDhvfTs2bHFAPjVBUTktPXUlYzVBeHIlfW5NUUEpdCslQnhZPXM3fWhRUU9C PVMlJiQ/V3Y5Wmp1CnpRbUNgRFVCdjRCdHBUZEZ3V193Wlc1KCp1d3BEQSM9 eEU2NyZibkJ3eTFMR35TK0JnalpwLVlqelBAJE0/QXA3Mgp6dzhGeU15QH0o IWJLSmd3fEdoQUsoZUpqeiNONUd4Z3dnS1ohLUlzPUBaUTlQLW99UUUpYjhL TWh1X0dFaz01P3QKeiQlKjAyaWtJMig8SUE0biZXeipDcDUpRCo7P1J4YyZZ eiYkQCNFNXU8PE96eih+IyFUcTJ8JHw8a1hTbyh4VCttCnpsSUdLKzw8XnR0 KVRIT3RyTE4lZj1HbTAhKlFWJiNyez56MD5EajJ+Kz9WT3ZzcHtGYj5EI0w3 K1BDUTVuZDtyRAp6P0EqQk47Rnt+K3RuJUhhP0FeTlMtPnZmQXJ8ak9rXnht b0w7SH5ROG9iPXpSP0JUQk07SmZQTm8kVFZUP2N1IWkKejtpfk44dT1MfXQ/ ZDdyYjxnZjRLelV9Nis/Jmg9YTwtcXBrdmhlMT5gUUA/aT0oRzBjdi1hbi1A OURNcT1kPHdYCnohdWFVNkBhKHFzPmJtJnF4YmZANntwejsoPzdIJnAjcmZe TmBSPjJAPyMxKSkkcDchWmBTSE57QHhsQT8hfmdOVgp6fE1BbE9edihiQylj XkYrfE10aUtfUjBWRCtXKz8zfE08PFN5VXs4RDAwMDRXUWNoQzxLPDN6SDAw MDA5YTdiQm0KejAwMFhVMDAwWFUwUldudTd5dGtSRT1mY3xSN2w2fGxqJkN5 UTVlUnhlSCtfTiVXU3VzKjwhbT0qYEJ1OEI4aUhJCnpDfm1sY3BvandtMWdN Tl9oTjA0QUdeSGt5TXA7X2Z6V2lDO3hweCNpai1Ka2BiTHhaZGhpN0thbmNz UWU9ZWgzPAp6M1l3e1pQek1PTXJjXiRKNURFbD5SM2EtT0YpQGU4eGdyITY2 VUFCQyolZEBaVVNaKWFmKV4xKUxfYFJQMWdNRmAKenJQJGI1QSgwQzRZJDdp P1N5KUs/TDZfWS1xcWFuYjxNKypJPHwmbVVjQVpiVm5SZX5TTzdzQ24xX2xP MyM/PDVTCno0MXBuclZTSzx4KTNnXzBBfH5aUiUpMFEleFZTfEs4UitiNl9p KlpJWTs1Y1VqTk5NTzJESChyYjh5Sm5peVBSLQp6KHRYPUdxI1lzYzdfbD5l djBBTSg9clpjWWtmQFh4ajR0MGxuPyplQj14M3lUYn57QTZ0KyRPZGFPIUdt U34wVGUKejI0e1RFIUM+U0MlfEd0cTVwdlB4MXp0eU1ReDhJfT9edl8/XnFD WEs7dCRPVm8pO1l5YlB9K1lmaSEpeHZkR288CnpxbzJOZntQRiRzQEwrJWNS QGZ6ekVpbHhfRmhqdUMtQSgmfCpYZU5kZkY2cFgrXkVhdGNjYTU+NEcjQTlL M1VIcQp6Tmw4aFcwV1B7Jjd1OExHUVlqUVJncShZV2tXbShTNyZlWURifl9I JT1tZF9NPlBpWXczUG1ZS1BRQ1VjND9fSjIKejNZSkV9d3BPWkM2c1JqTG0w SipVe0ZOV016aGQwV1dFWENtI298SXB7MGwjRkh7YGJ4Sk4lcVFNaUZ2bkcz P0BfCnp5UFJINWRzPl58Uy05KExIYUJwWSY4ODAyVyQpOHhGRiQ8IWBSIzQq ejJAY3g1Vyh8TGJSbVo+JXRaekhkVzd0Vwp6LW5NYVZTbT4le0F4anB7cDk+ TUVQNnJuUUUyVUI/PlZRb3lteiNtOUFZWX5qZHsrIWIrUWNhaSkqPiR8RzY5 MjMKekNMe1J+STZ3ODZRYFV0R3gtYzAhSyE9X3JUWD5QOTBmfVd5UExJQ31N Yil7dik0fCRkKENnYmtpJmooQnome3dDCnpBTVhIRz1wdlR7OG1VQzA9MTFe aTFSe0RfdTJjKUVCb2dyeTIjeiFtQSM8aEREeGo4IyNZJXB9Wkx5ZUw2VEd4 Jgp6RyokSldVYWVIdHxGeShpQ0lkVkx0WmdLeloyPTh4d0hrSSZtWTNKXjR+ Nz41RD05QFQjSEA+UWt3e2Q9an5NZFYKeiNsV2dYIVRPT0JlbmJ5WExDZEt8 IVhpcXNTWDIobXJiZ09HRXUwQH5wb2BqKWw5SmtLNT0pPSVSP2dKX1NpYjt9 Cld1aWN5eW1YJVFlMDAwMDxNTlVNbkxTVFlHckFiMm8KCmxpdGVyYWwgMApI Y21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3Rh dGljL2V4cGxhaW4vaW1nL2V4X21hdGVyaWFsaXplLnBuZyBiL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X21hdGVyaWFsaXplLnBu ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jM2JkMGJiOTBkZDJlZjFjYzFi YWY3ZjkzMjgxN2QxYjZiZGY0NjNiCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJh bCAxMjIxCnpjbVY7JDFVbWJQUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAw MSV3MHt7UjNEZEJqNzAwMDRpUCl0LXMwMDAxXgp6eVVjXkUkYVNYMkhpKkhW JkVBYTEtSUt9UHM/eS1IKVpuR2gtbVRLI3pTIWIkJTxWKEg9fW9gclFeTStu KWJOenAKekBPc1lkaHR1d0AtfTdzeyo+az95NVViKjMjcHFuYT41fHAmcFJL SGFvMSRgLXB+JGE7O141MlItb3dGPEh1VWh3CnpAYSh0VitxZDE/dyYyfnU+ Kms7ODxldTs4d2QmKVktUHlKMjtoWFIxdio2c3BeNmthVXlgI3NmYj5Hezs7 b1p2YQp6PUNia1gjTjV9ayt8eyQqK1E4QEJtKiZ9Jj9CbFRBKnRPZiN2RllI Tj0tLSpfO0h9PSt6VTAtQjtNPlRDc2JvQCgKejhTdik3dEpHfVcqMWgxYCRG SkxSdipDQn09KSZzVnRMZmFUPyY3YEwoWFpMaHVHIUE1cVF6Z08lVmU8SmJH UFN3Cnp4YSl1OChVMFFKak9wMl4rUzBKeClWc1J1ZiNKLUc9K34jJSUmZ3Fn eTVQISo9aG1qKip2MEpLeTQldmErdElrQAp6KVRITHFxdTByKS1eaHBGI2Y5 QyRnNjdlbyp2elpnJWQ2Sk1zTV5vQjxqJGJuekpUNzwhfFUwJCtSbkd5Jjl+ JnUKenA1eDQoPElBNGEjaXJXMmVjUWMlJj1nYyUwMDAwMWJXJT1KMDZeeTBX JmkqSDMyO2JSYXt2R1VOQntyO05CfkMzCnpZZCF6fjAoP25DS356WWA/YjZw KjhiSzVYVV93dyNqR0FJMXJWWHQwQXw/eVVOPlBnNzhiZ3M3TGtxcFBDfHlB UQp6Xn59aGM7fHlAfXomU2EyQElLc14qPkNSdD9rPG5fUTIoZU5AbGtPZEo5 I1dYI3I2OUt7RHM5dTtTJkdKKTF+RVMKemUyZlRJUkBhYHQ1V0lZfnpXIVEo aztPTH44JHQrJDMoRXZxNl5UVGZmfGEkbW85X2czUEk+PFU3MXVISEBpcW41 Cno/O2lsTUw/UkokOVY2NzFSNFUhI0l6fVdpbk17SlpUdE5gMlFtS0BwdTJO NFdhYGBOeFFmWCFvdCMkXntYbXJ+Kwp6O2okPGNgV2FjJj5nXnFqZDsrTXJq Ki10NER5fGIjNmJkKitQdCU1cERRZmk9d1BRM0ljWm49OGcmeHAqQ0tFJHUK eihkYnxiPE5tKGNmKWo8LVlOWXtmR1RCST8pKlQhZ0F1KmZuMWhIRThYdXow a0hVfikjNGs1OWElfSM9ZFhfVWdpCnpJMl43IWFeeVpqV1NuQnhabnR+Pngt c2BMR1A1XmtVPkw+KVRyQTY7MENAanhlTDAxTytPPTNMVW4hNSo+K3xDOwp6 I0BKOF9IZ0ZiWDBuaCNJe1FVVSVge342R0g7K3I8NFRaeElsMD41e1Y5JGNW KnE8cEVLaFlHcyk5TGg1ekhtSUEKeno9PE9vMnRYMXtDUjJDdS1BRXUzM2kr cj1KZXwocVdTay0hT1Fve0ojeW5taE95TiZ0R1AkfGB1QGpiIVdrRUtkCnpG SnleTj40YClWZWt4WmltR0NLQ2loUXxURSlXRSFzQVE7T3dOfFUrQiRvVmpu Rm9iKGBLbSNYTTdtTmZRdVNKYAp6KjJHRWJAKUYpKHhWb0Frbk0kPTxmfjNf VjJ1amZnP005PX5DSjBQWCZyekxidilQJEBXNyRGaC1ydyRhZGxPVVkKemIk RWEweDxBMERhNEVYTztqbC1MZEpDb0stYHZ+YGFNRk9KM3dsI1h2byN1QlEt aTRsSzBLOS1NKTJWJldTcFlpCno+ckdfb15paGg9VUAofF9WLU5NZSlvK2p0 KGVQdTVBSz9IMTAzfiFxU2FmN3piWShoWWElRXczV2RKZlRGKSVHTAp6R0El R01SNUNDK0cmNEZoRyVHTVFJeHNMZW5JIz9vMDAxUilNT2J1WFZSVTZXWkVz fDBXX2JXSUZmbE1LRmdZelMKakY7cEAkSXk1dm9GZzdiTkg5OWFiJTltQkYw MDAwME5rdlhYdTBtamZWSjN0KgoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9p bWcvZXhfbWVyZ2UucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhw bGFpbi9pbWcvZXhfbWVyZ2UucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LjNmZDgyOTlmZGNiNzI2MDRkMGM5NzgxNmQzOGVlMjVlYzUxNjk5ZmYKR0lU IGJpbmFyeSBwYXRjaApsaXRlcmFsIDExMjcKemNtVi10MWVwN1lQKTxoOzNL fExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwNGlQKXQtczAw MDF6CnptQzxIdihhcH5DeXVJd2QhMHBrfF4zJkF3JEg/ITskbmVVX0AhUSs9 KjRPcG47ckZKZj1CY2FhIU5Uc3YjcVlKWQp6PiQkcUAhXkgyISNfKSF6V0t4 WThwflBOd3JwR3BqIUVlcChMQT5abiEwQ0lAP31YRnZXNSgpZSRuMCoqPzNk WmAKenB4ZzA7KGU4fVk/dmQ1KnVIZj90c3A0SjQ+TjIoRWI8T04rJExPUVNW UkR3QyFIK2ljQFd9QSZ3KHNlKl5YPG0mCno9Q2JZT3ZHTUR+PmcxajI7Rns7 JG0qP0EtP0JsU2Uld184MW9hbyt9PUdtMyg7Oy1vNG5DOTcoPD0yeiE7SHs/ Ngp6WFlBbXZAYVYkRnMmJVc/WjBwfng+ZkVhRDwtcF84a0tAcGU+RHNBYmxg bWVIQ0Jld0w8a2dhSm9rZzA7VTNqaU8KenAwJFUlP1NiVWVrbTFkWWk+cXZp eWlKfFpWfHVWYXl6cXFZPGlGfElyfCNtdHpzSSskLWZfNj1mQUhxTz0rfiNg CnopfWAmPXlXen09O0srI0kkQXsrQnF+NjdhPUZfOSMkJSk+P2gyNnUwPUZ5 XzstTVokfHFVX3diPUZ5PyQmIU93dQp6eDdAI2crcjU5fSZZPDFGZzUlN2RJ PztvXzAwMDAxYlclPUowNl55MFcmaSpIMzI7YlJhe3ZHVU5Ce3I7TkJ+QzMK ellkIXp+MHY8XzNLfnpZYD9iR1g1KHJfM0RhR0RufkV6UWMrZi09aHQ/ZWY0 Rl9aVDF1d0YlUihMYl49V1dmS04wCnpGcUAkSz47MS1vYjY5N2AtXyRwfkBP a21QYDwmPFp7cURAK3hFI2s3IVdoJVc1bl5uN1ZxJWhUVVkpdSZPLXd0VAp6 R3VIXyQ4TlY/Kko0Zjd7cFQ5TG1PeTBnVEhTQG9hdnU4TytWOzdoT2FeYjlt eWh+bikrQHAqIVo1Kk5ReVdIKnYKeilXZ0xgT09MNTElVEhJSFFDUTtnY3N5 PXViIzJZe29MWEw4ZTZmTmpfTzg0ZkErUCVISCpGak51Z35aNmZ8c1VnCnpL bG05WTVDa21vZytkYDM9eHtqOTAyN0h1VzB2SWdLT31BdG1TckZpTyhjPndO SVpAUiE/TExXIzFpWjJqM3dESAp6V2ZgT2hwY0tKbUhqfjRXSCgtb3VUYW1Z O1NOdEA/XyNxZ0pDM0JHRElEUWtiZ2tlKD1sd3YpTlFnSGN2TDlpbFEKejh7 NiszISshdm5SMEl7OU9zOSgrQFAmZGsqP0lyckJRaiprRnNScmxEbUdnej8o JkZ+JWEtS1I9UHpIa05zPXN5CnokYyZgZWdGUWowTkxKKDxHVChvY059PyF8 SFhCMWBYQTR+c2AmVis9NEVHWkBjfG5qc2w0V0p6PmRMUzx2N2FUPQp6UGEl fWMpZTZXcFJqcj53Mjkwc01gR1BeSlJUJmh1KFAqQVIySCVDeDhec0QkTztl IVdffDxDVCR1TmIyUVhEalkKenctMiR6V0BEeCtsMkROKSpzc0B7MlhPZEQq Tl5aSXQ3dXdubV9xTSN5MnA0VFljKjdDdigtQSQ1JFNlJmMlckIoCnpEekBE Xj5GOTlXd003T2diUiklNHVoK3c4SVkob2NWPnkyVFduclpBQ21hREIwMDAw YmJWWFFuV01Pbj1JJTlIVwp6VlJVNXhHQjdiUEVpcDFKRmZtanpGZ2kzZEl5 NXZaRmZ9P2JGZ1RlZDlzbUZVQzNIbnRiWXgrNFdqYndkV05CdTMKdDA1VUsh RmZBfVNFaWZAdUdCWXxmRyYoUmdEPTstV0ZmaHVPUmpkRjIwMDJvdlBESExr VjFuJk9QeVlZXwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfbWVy Z2VfYW50aV9qb2luLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vaW1nL2V4X21lcmdlX2FudGlfam9pbi5wbmcKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMC4uN2E5YWE1MWZjZTlkNzc1ZjE2OWY3MGQxMTU3NjFlOTgx NzU0MWM0OApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTU5OQp6Y21WLUYy RWg0PVApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcw MDA5M1ApdC1zMDAwMWAKenNOYG1BKGFnPjl5dVIkZHp3TilsP2E8TmspNzEw RiRuVkk+QFhPMmIrMW1Cby0xWEFhXlZIUHopejxYaztyRzB+Cno/NTMjWnNI KjN4dG1uYlA/IzBGTHc2KkhDeDlocE8/OUk7ZChiNGs1I1A3dyVAVztzVCpW cHgjeW0oVEw4S0p+cAp6aU1pVzBoezBIIyVXdXVATVpXMXchMEEpTT5WPyRz bC1UZmsmZ19ISD9UZ2d6dD41IWEhMEJQZT52cWxUcnJ6PkUKenl5KncxO3Q7 Rmk4bXtBQSNwYGopPmB1UHNURVhYSiNwc2dOPy1IeHhFVkpaRHl5bDcxP3hN ekRkWS05YmlsY09rCnopdVlFQCFIK2lkQHlZUCl4QWdHSF5ZRjs7PmJDRmN3 ZVJWKV5YfHNMIVMyUyNAN35fX3F7KDlJPUFZfjNwNn4wbgp6QDlNU2I7K3lI PW85Vz0xPyZxX3N0bXcwfT5iJCt9KVlTOCglVmdeMG8jQH0wPS0hI2A9Q1k+ RVg3S0VgPmZAZDIKejsrKmczdipfS0o9aUhhPTxnbHBFWCFHc0heNmJVIT1D YllPdkYrb3FAI0AyPShyVmtpaU01JTJ0SlE0dD8jSj0jCnojTyZqKj9CY0hN O0h+aUkhTX16dnpsPyptVm40Sj82UyFxUyQoNHExWDFKfV9afEw1Yj9CY0tH Kk9UU2RsSH1CcAp6PGphYDFVPm5JejhyTS1HO1ohRz1SOHNabTtiKXNRcXRS d3dtP2k0KjxMQkYhPUd2OXkofiNyUmtJJDd9OyM0VUEKenxOcSppaWhIT35u I3heeHUwRmNhcXEqI1c9R3ZDIypfR3drbDxWS0U8STw0aChUP0tLamxPNnch KkR+T3o9NE9sCnpPcXxZUGRheXZjP3Q7N1RnWTRuMUA4LWJqK15YckBzX0VM UHZgaUd8QDg1e01QTSo8WnRLTTxBPndtaUpmeFBnOQp6d08xREUtS15AfXRN QkIkPyZIMWIqe0E1JnJ8OCRGKFV4Y0gtbUshIWpwXjhAO0xDfk4kY1cjXmh2 MzRJPmZOZzEKeiZXeiNCak5pekktXlBhQyNmOWU2cXFsXkJ1d0ZqME4peUQ4 Z3lHREs9aGRhJiNmSUwqaDI2dTE9RnlfKSl+NDs+Cnp5WEBZJj1GeT8rK3Ft dUV5eW4hVD1GX0M/LU1afUR4YUg4SDw8RnR6Jlk8aHN4OThOUC1vJTk1ekpT fWtmOEA9ZAp6LU5KKzIhR2gkQHB4ZUJEK1BpK14lJTByOWYheDE9K1Baej8l YncpVXBYJUFSc0dPYyQwMDAwMWJXJT1KMDZeeTAKelcmaSpIMGIpeD5NNGJr Xl4wNUVfMDEwcU5TI3RtWTA3dzc7MDd3OHYkIWs2VTAwTD1BTF90KFkkNzVn XjEmbUF9CnpmSTw/fCFvPHdOJUVyI2IhTzZ3ViFeRiRTRkNmVDdQPlliVGhe UUVveFArdlhHP1I/MW9WPnpkKEwlYWskT3RoQwp6ZlRFSGpzYWxramxfPTdw cTZ6e0tRVnFmO3EoeE8tTHNMc3pSWXpBKC0jfUh9KDgkPENtN28/PUdqal98 UlYhOzcKelRSVC0jZGswNCshZGkmNCNUaU05Myl1WS0oaUkkOFpySFRBQldk eVFeeiFvWl9WRHJiXkFHU340aCloRyMrRD9NCnpMWGZxMWdAJVRPZHFoTT1N YU9zdSNtMj1hVkFZYXtxOXJVV0RaO30pSXlvZzNrQ3JyS0UkSy1hbmZATUck PU54JQp6YyhtanBZdz9Oal5Vd0R2Q0BkOzIhUSs9d0JyUm5nQU9Jb0RhVkJy MjNTP1U8dnRtLUtKVzhyLVlVfUQ3OGs/RzEKelRDcihxTClIQDBvfUUrZChi M3R9LVA3Q0dLY1Q7Rzt2YEhobGMhOWIjc0pGJDk7ckZnWExOWWZjRm1rTXlL bH4lCnp4cFV8QSZCTjMoZjVFfjxLc2AhfUwzJXVMbW4+YVk+Iz07ciUybGlU PVlhSXx1ZmYhXmNIUjA3UTxhcElIZntweQp6QGhJdW9Ud0NYe1ckVSk+TyV2 dlZeaTBAK3NiJU5kVUF5PH0tTTRZbXt7MmVHQSRGakRFPVVoSFRZITR6UFhe aW8KeilCJmBtWnUhQU9oZHF1UUokQyM9QUlLfE17UT9XUHtiMFlHb1ZEdUlj OH05JSZZbkF1SkgoJj44ZSRodFVBJVBLCno8TWB6KFNGaER5emozcWlSeDFN bTtJWnd9P0s4KGM/JWNoMXt7aWthaE58VnI+MD1LY2N8NS1NO0tAX21YJCVE cgp6bSZRPFNkM05YZGk8Y2crVWNZKCFqITBXUC1lM0syfEIxKCZrRG9xJENl fDw0P3RsNkUrVCtgJj8+fk1MdEw0R2gKelUlJWdhZUUkQzkmdEdELUpibS1f LSNkXjBLbVkjeVByREVzMT1zLXFDZ1QtUiF8PXE/MDAwMGJiVlhRbldNT249 CnpJJTlIV1ZSVTV4R0I3YlBFaXAxSkZmbWp6RmdpM2RJeTV2WkZmfT9iRmdU ZWQ5c21GVUMzSG50Yll4KzRXamJ3ZAp4V05CdTMwNVVLIUZmQX1TRWlmQHVH Qll8ZkcmKFJnRD07LVdGZmh1T1JqZEYyMDAyb3ZQREhMa1YxbjV2ckZ7U1oK CmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X21lcmdlX2FwcGVuZC5w bmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9t ZXJnZV9hcHBlbmQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjEyZmM1 NWQ3NmY1MDQxNDA5MzVkNWZhNDIyZjlhNTA3NTQzMWJiYzMKR0lUIGJpbmFy eSBwYXRjaApsaXRlcmFsIDk4MAp6Y21WO18xMXRRQVApPGg7M0t8TGswMDBl MU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA1SlApdC1zMDAwMDAKejAw M3JkKE5je1dIaSpGb3NOeFctOyQpVDNhLSVnR3VIKFV2SGc+OHpkWS05eHUw Rk15ZXROTSVncz8/P3ZfcG9yCnpOa0Z7bU1aVzJmd3Jvem09MWpvcHJLc2Vt c3BuSXw+UlEzKWpsb2x3eUxGa29jJmU9RGlNaVdkI3BgNm49JnJCbgp6cH5Q T0kkNiVKc1UyKTZvcXs/RyYmRi1ob1dfciUtK3JFRj55QHxaTj9BKlZCK2B4 Z296d04laT9jS3FHZ1ZGOFgKeiFoXnJUP2NUKE0hb3UhXyliUVRMZ35HJHtp YDRHbCRBKiZDQDVSUk55M3dQPiNfK0QlYWdeQmI7bW5IUyZ5Q0I+CnpAI017 KDxqJFlXJkdGXlZweVNidzw8RnF3KHZReTFeMGVjNTxrT0psKFZedGprPj04 KTxrZ2JWKGVtY2hyMDNNNgp6dyYjNTEqT1RZZnJMRXVkKTcxMFMpYiF9cnJz JnRGPUd2OSUqcihSa150dFBRPkRqMn4rP1ZPdnNwe0ZiKnhCXkQKej90PHl1 c19OWFQ9LS0qXitxbWlBbiFOQ1k+KXgjQztoWEg7eTZmTXE/QjJUUzsrKldA dD9jMmg+ZzFpKzw7KDJpCnp1a0dReT9CbFFPPEZNYEh1O0FlTD8mN2BlPGd4 REt6VX0zKT8maC1aPC1oT2QhMCtnQEA5REpnPSl2JmwhdGQmfgp6QDlWYmw+ Y2pCdHcoI3Q/XjZiVSk/WiklKCRNb15aMVZxPTIwMDAwMWJXJT1KMDZeeTBX JmkqSDMyO2JSYXt2R2YKejY5NTFVNjlFOTRvRVFLQTBrS0kkS356WWA/VVBr ZyEkMV47dilLVVVMVUVVMSNvZ1dBb3VWITc/eWtpaHt4Q18lCnowOFA4dXp6 bzkrPWkkRVdkfkAjRXYmJTY1YGpOc3BRUyNKPWFQZEM9TEhTJXxWcGg9cnJ4 RWRYYUNEQn5WKlA/Ngp6T1NvVGlhZ3RLVlEoSCozSzBUKiFrZXpQbjl5KCZS KnxSQnVENXtqTCQ7Y31vV3duSlFCajB4K2hFIShaRzR8YjIKejU2Snx1cVU2 YWkqa0pIQFhOZE47RTtAbXNBU295ZWVMZGxJMkstSGchTz5WZml5YjZSTGZr LTxKU3B3dDFQT3VICnokQXtZJmNzZWBXeSN9PSM2Qk8jQCFpJmhtSGQ/dWF2 KkV0M1d1UUZOR001VXl6YCklR256ejd5VXF8eVM0UGtoRgp6dEZSaGVFdXg3 NypsY1U4OTtkcUtUaXIjTVhVb2FLNFA0QWtqX2QqRD99dnRuZ3Z5UUNLM0xw Sz5CYVYyOzR5NSEKekZjcF4+M2dSbElrZihIQ289WCUmUThKR2BtdHVVP3Zu V2MmR1hrKz18NTx6PikrSy1iTzFSKE1UdDBfbWJBUWpPCnpidVl3e1ZHQXsq TmlZPWBXVmI2MlFwdkR9cyp4RnR4IUd3QSk9MDhjdVJOYGdJYUchRXApKWZ6 c2FEfWFTe1k3OQp6T3ZaSXNYc1dCN1FYcigyaVN7Wmg2R2RLYGoxWDVRaW9F aV97elB4aHpuIUglNHc+JSYwMDAwPE1OVU1uTFNUWVAKQ2dFZ3hGCgpsaXRl cmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9t aXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9tZXJnZV9zZW1pX2pvaW4ucG5n IGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfbWVy Z2Vfc2VtaV9qb2luLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Y2U0 ODM5ZTAyZmQzZjE3YjVmZDhlMzU4ZmYyMDQwNDZjMzhkMjZmCkdJVCBiaW5h cnkgcGF0Y2gKbGl0ZXJhbCAxMzQ0CnpjbVkrQ1N4ezM0Nz09VHFFbjsxWWIp a3pSd3ZPNXM4eFRTMT1wZHBFQlFTX3M2ezspKFI/I0JKU2o0SnEzUkpCWAp6 UURrWVBoIV9AQVIwSXJ4a2RURUM1PWNUNHZXRn59RUh9QVg/b0J8JE9ydCph O3J3VUwlPXc9RlE8YSRUPDZ7NU0Kens4MT4+OyNoMTxsR2o3dSVGb3coSCUl OW9wLXx7TWlFIyhfYztqUWRFPDEtZSM8N3pJITlsV3hPdERQeDlEKyRGCnph fDlZOysxUEJtTTJnN2UydyZpd29QPm9VY3pXN1I4VVMxSTBLUj51eT5vXl93 YkpRT19lKWJ4dWxXQGI8WnZCNAp6b0AxQj4oSFM9OGgpcGE7PlBVcjJ3KnZw NjlqfCZOMyRMVns+ayFscnQ3JnBlRjJAPV9XSzN0NkZMMXpDcksxO2MKekg3 bnVBRCE1R3pRO2x3eCotWml2aW9yIVV4PHRAaTZ2LUlTcTUxQkc0b2Q+NjFs RVROeEorUUg1Wloydj47dyhjCnpyJDspfiZTeDZ1aHtAZnxORy15KDw9P31w bmVgS2x7XnVfWk03cnFfR281bGY5SmFHO1ZESD9sJlcqX1F6XnFFYAp6KHJE Y1BGbCk4R1plZUFaZnJwND1UJWttU0xaP0ltRTBpdnlhcWNsWXZ6MyNMQU9F RnxlX0EkQkNGblhROVY3RHYKel83MzQwOGB1TXhkej11e2pZI0wqK05hYE5s a1JWbXckWjRydypvSTxJflRUZFV9KChja2VxRFRgaVBmKHRvQ2JACnpUPz82 ZGpNRUpVUm8jckQ3U3dqUlZKVTNtSUg1NzhtNXRjTm0rKj04cXNJeWZKQmhx VXVmU3IrQFdQO2NGZUFHVQp6T3gxd3VyKjVhalgmSDV4U3FMTyo4WS16RSN4 LSkmaUBLdFlLVWh6K21pOXdzYn42b0I2VUBwXk5KcE1VclYqPnEKelpDQX1l cz4qPWA5NTFzJm5iJjgmTig0KHR3c0lSVldSJGxYckZldCppQUJ9I2NCbyo+ Qm4lM2lXYFBTKjdeUTckCnpfOCtRfDNNS3Mtei14eFZOa350Rnc4S15uKW5T LTBoKzk+Uj4mb0dCMSpLRiEtc0NqJUFxfnwhT3xoem45NWRzPAp6V1EmNFlD TGIhMTRQNGM2YTFKQlNzLXs+fUxsITAzNHNnd35LMFVXZEpCQmsmXiZsM1Iw fm9qS3h2KktQVyNncDgKeiViPEpeOFpNPUhOOWp8TGx5Q3FRMXgjZ28hQF9n ZXF2eVNqZVckJndvU29oUjVGNH1XQWVNT3xaU3toV1peb0BICnpqdDx+Y1g9 QnQ7MkE0KSooSyo5M0h1TCtuQlFjM0x7XzNqNHVmRSQ/LWNsMkdfaHg0IWlK SGNYQ1o+K35oND5kWQp6U0ZkWUp1Qm99Vms+QXx4azNNWiQrdkYzcEBZSF9j Qnd4ZmtCb3N0byFqZEF3TCQrPT95YTcrQUA8Kms2Zyg5dyEKenZSQEdebWVC OFl0PDs+IStzKVQzYW93b2M7OCVGRHRheGQ3QEV8dFg8TUJuS0pAZT9ZKG8q en12ZmFfYylQWk5HCnpzLWk+eiVLYCVmKXZHPlR2MHtaVEBYT18mdWV5Q2BB S0k4NDVHJF5aQSpOUX0+MjhAVmlUWSs2alh4QjB8SWhlKwp6QUdRYkE5aEYz LTxtY3p4cj5aTTd3VnFQeUkmemJ5bmpiMl52Z3UhWlhHWEUhaGlzfnM1e3Q7 IThMaHhkZDIrSCQKemBhXk0xUDJ7ZDM1MFFBTz0jQSVmIS1seFZAKVdqaSh9 NUBQaG0oQChMemQmMnhqKVQ9K3QxR2ZGWFFVVHNOVTMtCnozQ0Z0JlNeVFVt Kl8lQGRGYDFQPE5jVmw7dnB5ITJebSZIOVU2fHQkNW1Mek1VO1Vicj1GfEhI U1IzRWFkcXg1RAp6VVNAS1NfMjwxPTtOS0x+YX1wWXl8SCFqc1AyfSZvamt8 JjszYiRZSSZ7emtxSlE7Nz9AZis/KUBUJCE/VnUxdTIKejYqfFIpPD94fnBt SVk+UD9EPV54UHNfKzZvNWg0ciZmWlluWUtYe0grV0llO01OZX5SdWRuUykj PH57OzI4SGB+CnpwOzd5MGVWNipfKiU5OD91UEBraHEjIWZCQVM/MWpld05v enBfbVglYTdidHtDZ2ZsIUNOZ1lHV0xWZ0BuNX5mKgp0JShsQXFZeUpuRSZD TldPZWVwZWorNVFmQSttNko5elh3S1o0fFJHMFJQM0lGNygjU2Y+MzxvcERT LWUwCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9uZXN0ZWQucG5n IGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfbmVz dGVkLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNWM0NzMxNmQ1ZDQx NjNkOTdiOTVjZGE5OWIyZTNhMjA0OTM0MWM1CkdJVCBiaW5hcnkgcGF0Y2gK bGl0ZXJhbCAxMTA4CnpjbVYtYTFncmFyUCk8aDszS3xMazAwMGUxTkpMVHEw MDElbzAwMSV3MHt7UjNEZEJqNzAwMDRpUCl0LXMwMDAyTgp6IXFBcVAoU0wp e2I5ZDJaWXRmPm08aDhmenlUMHRoI1A3aHQ/WkNuQSFOVHNzIXx1ZXpANVJS TiM+ZWwrJG5WST4KekBXeyZXJUZGU34lPDtfNF4zQmZqJmQlfTkmK15kRl4z djF1KVlTOVUpJTRmYl57Y010dUNlSCtzXi03ST9ZWDxfCnp2OXN4dG1FVXhF KXxpeyYhTlRwUHNMO2QyKDdlOXYrMWQ1SXp3RjF3eDJ2VVdvcz5uRGkhWTZW OE48U0spIUM4WAp6PUE3cDlye3dYVzxNNSM0QFNmdUNwNXBERDtxMDhAPzM+ YH5vOFJifS1zaE8kPSRfZiFtQ0AzVHpyMWtMKm8pMjYKemViVTs4K1R4U2Mr S1J9XmNGb1UlJkNjPCZ1dzBtcUVVfk92JmQtRiQkYUJ4bmlJU0Rrd1hsY0Mj PTY8eGpOUmd5CnorVFc3ZS1qVWhla0x2VGMkalJAaXFHWnxKa0ZCb2cqeFFm Mnp3T3VCakpMUyF4VmhgcypvQGB3dG1Fc1cqeU1vTAp6Kk5mfSZ6M0swfCl6 XnlNPWFKUmNpUGhETC1zUDZtKVFGZGpFNztxVSUqfW5UczghTD1pTzlyeCFv Rj9HJGJ7MD4KemhTJURUeXRackg7Z3tGZWpASCluTCFLKDYwMDAwMWJXJT1K MDZeeTBXJmkqSDMyO2JSYXt2R1VOQntyO05CfkMzCnpZZCF6fjB0LW4qS356 WWA/YllqMytDVUhoYTBFXlNtMEMtIWZgVVREMmJGe2NBODlSTU1kfWsmIzQ1 XzhYYEA2RAp6TURjQ3d6cG1tcSF6RmhvXjBuUEJuY1UyOF9JQj1XU0VLbks1 N0RJNj1AQiNaSSZCaiFuaGg7UlEpXnBXeVV9Y1oKeilBNj9Sb3lHRkw+cUI+ cylvUWliZFZCbHEtRFVAN3c5V2tre1JTNTRiaD1DcVo0Sj5HMjBqa0RTXklK aTRaRjtgCno4bHJiTzIxaUMmI2cyeyluUkBnITMmYG5sR3NTfihUUngjJDtf KUVPM3hWdGtHV1BXQTwjLTxgIXBDI29EelRHQAp6bS03ZTRDbmwhXkxIUFYt YGZEJjQ0MjVVRCV8OyMjZz5lNDQ9PVhVe2djcVdWT0EkXkBtWTF1KWQ+fWZ2 NjJ0Y3UKemk/NlAmXkQyQCtERG43KDMxTVg7aUk8KCtoO1JNPzY/cVByNms8 dWBWbHVZNSNVd3lqLURaJn5HRCFpd21ZcDNFCnpOdlROIT9lMTFoOFghI344 NmA9ZV9INVNwbCFwfE0kdGVsNGQ5dkFgZWJpZTlJWj5TantyWmc8U3dzPTI3 bHUtYwp6Q3thbG9fVngke0Jxflk2ZW09amlIWHo5fjB0ZGwtSzZJISQ4SVRM fkVPMnkwczBJb31kaWY5dmxUTj1fVnZ6N0wKemlJbUY+R0paX0J7M202WlBK RX04eGNaNW1gT2tlKyFwfDxRI3VYM3c8bX0/fGlsP2BXJGtKTm5kVFRxQyQ9 ISZPCnpCK0c/anNwN3g5eGFBbTREWTcyO2dOZjRMXlEmNyVRK2llRnRFMGkq O2lSNTZldXdxc3hgdUBsOHh7P1dxeWAzRwp6MUxMKVVBXnh3JUojQyRsRy1j UnFFQzJ1aUMzSG50Yll4KzRXamJTV1ducHc+MDVVSyFGZkIxTUVpZkB1R0I3 JGMKekdkZVVoRD07LVdGZmNmb0JfMDMoMDN+IXFTYWY3emJZKGhpWik5bV5j PnBwbkYpJUdLSVZ+X1RSNUNMPEcmRExlCmFIWStlU0l4c05HbXNQOSkwMDAw PE1OVU1uTFNUWSkhYzFAZwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcv ZXhfbmVzdGVkX2xvb3BfYW50aV9qb2luLnBuZyBiL3dlYi9wZ2FkbWluL21p c2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X25lc3RlZF9sb29wX2FudGlfam9p bi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzFjMDc2MzMzNzYxN2Y5 ZmZlOGNmMTNiYTBmNDdmNGNiYzIyOGM1ZQpHSVQgYmluYXJ5IHBhdGNoCmxp dGVyYWwgMTc0MQp6Y21WOzsxflUxSFApPGg7M0t8TGswMDBlMU5KTFRxMDAx JW8wMDEldzB7e1IzRGRCajcwMDA5M1ApdC1zMDAwMiQKej4tbnAkPThLTnBk NDFQcll0Zj5tPGhRdSR5fSNfbSNfeisjQDVJSUwkSD8hPCQ/KGR7QFhPNWMl KzIhNyZocFJECnpeM2w9cSk2P19TKjdWS0lAeCNSS3RGN2oqdmdvTCk9REU0 K3pRNjZieCRNOGQ/VE5ZREhpKkhzeDlZT0E+NWBWOwp6YmE+VHVkRGZWbDts UlB8eFZyMWEjcU12LT9uUz1vT3UqPz0hcz48OEBSWm9fZGR9PkYoZH49Vz95 Y1lSeTFlVkcKenVJSXdVP2Q8TE9LKW1TKHNOeFctO3VAfndVQiZCaCVqezBS PTMycSRXWDAlYCkkaFE7PyFDWTViOW1LdGRlK0l4CnpAWSZoKio0RmdiKlkm Qk9kY2x1MnBea1RTaWBEUCQtQHYrb3NHbUBxa1RzMmc4VDllVkBhKHREJkdF Kl5ANkZFZwp6LXJufVkhZ2tmJGwtfW8+PUpjbExecl9YXms7MWBzPiprLWx6 M2kqMz0oRHV5eXVJenopYnJFWGlfWD02KTcqeVIKekB9MSlGbiN8TEIoYmtF PHo7dztkQHleZmomRERJPStLc2ZaVCUoKm4lRiVoIylzM2E3PG1CXzUoYW9k Zjs+KXdJCnpUaUAhSDtfOUwxXnJNLU5FJUVUPDtPVXYkeUB8RCVlJnpGYDxu Zl4yPSRQZDRxMjErez4tNHdYPENYQzJ3IWVsawp6d31nUE9VT3V4KzZTWlBM I0VedD1YMUtoeWMtIUhWLXM7cXN5TEd6SnF3RDNLPmcxajApdHxSdThfNyk/ KkhJJGoKelI0MTJJUXVYTkohbyUqWnVqJDNiQDdtdnpmdiFTeHI4aytwYzw8 fUJAOTRBQm9OVkckREY2VGUrTk8lVXpVPGxFCnprZithUWNCP3pKUn5FeD9M KWhHcHUtJFowalQhVXAjX3J+Xz9kN3JUOzsrfSpqazRmJmRhKiZ+Kl9Hd2ls SH04bgp6emkyU3o+WiNZKmpFdWxpPEk8MWYmV3o1SVVEZSl2KVpCWEI8ZWIq bWl0RkMyOz9SeFomNVBqNWlRdlBNPkY+SkkKeitJWiZhd2JqKiRAOGlEYypy KF4hclI/Nml6bD8qcFdrQVc1aFM9WVYqVzhISSlRaTs5aHZtP3I8aiRZIyp8 eWwqCnpqbm1TRytgZlJAeW5mb2RlJmZyWSsxLTx2alYjKV9lYUZVaHUmR3dC ciZZem1hTH48JiZDNz93ejs0T0xleFIyLQp6JGk7Zlh6SEgwTGd6REl+eXRp ITcmd3RPKGU4MFBCJEhSRW0pc0QpPmZZc0lYQ2k3OUIwMDAwMWJXJT1KMDZe eTAKelcmaSpIMGIpeD5NNjFhR1hEOSN3MDEwcU5TI3RtWTA3dzc7MDd3OHYk IWs2VTAwUT8oTF90KFkkNzVnXkBxbSR1CnpuU35WdnVyTTwqO0A4MigmY1Zz VyZCPz5kJDFmbCNCckdCLUNONjxqNC09Y0RsJXpEVzc5SlR7SVNENFgwKGtg eAp6ZlJiUGxXPEBDX1dmZiQxc2o4YEtYZm5nS0N9P1R4PTt8cng4eUZmSER9 WTU8T2lZIXslI3JPaUgmY0BuV0k8QEwKenUoWXphUUx3ZU1jV3tKZ1ZSZHFM Ri1MVyl4dlFIeUQ7YEB8b3Q7QDMmO1lCNENxbTUyOHc3bTdadVcoMGtwV0Js CnpgM0QzQjFxSnh+cD08RkQ0aGFiZl82fklsM3kpdyQqNWM8TTg1SkU5OHk2 NEtnUV9KWUF0NTJlSjI1RmFCXjU9Qgp6ZWBII0VNckt4YVBPZCo7RXFWRE1N bkdJYVZOcjJXUER5RDFLYG12aHRZdHRkRDdMKClxT3ppQHgrYUxBVSFXa1UK ekhuWG10cH13eFYwYk5UWUlLLU8zQXkkVD5yTVY+dE03MmZ9WiVaM1FPTFRo PihTR1VaMEJkUlEjSHl2TXlRakNXCnpmNUpxRjRxaThxbz1ISkxsUiNRSkMm UlQmbkt9KXNXJWBWbnZ1NGtrSjdATzFgNSt3JjdBezxiQEsoXnwjYyhaQwp6 bW4+WmRfUkkzK0RefHs0d1FCWTFSa1BPc0J9TFhRVHFxfEJjU2d8U2IjTmB5 bWFnQmgzPnNuXj1kMSRoblg/SigKejZJbChVenpiVHA4UjNeQDhANmwoK09s bz9qLTdwVFNBK0QtP0wkZzFGdSFjeGd8S0RBP21hK1R5bSMhfnhCdE1MCnop Z1YwfVRWUHJ5MXN5eUgoaTYxbjVXKzhxX2tqSmZiS2pBcCQ3WH1QMGA/MTMl Y1AqMTwwbm82XiNtT3tnJU0oPgp6Jnp3RFg5dVo8dEVrUElCUGg0RGxEVHBF SClNYm8jeHBNV3x3ZD50Q2B1bEYpbiNoMTtPVkk1KkFtMFJDekRxY2IKekxB PyhOVTUyMiRfYl9hXmUqZ1oxaGdmb0QoN0ghcEVzcX4jWHUxRjc+OWdscGEl SXFxTG9iMWV8SygjMGhqfkFFCnpfVWFXakVyRiU0LXZHMU4ranM4KyhYfjgo ZzxWVSlobVc3JGV0IUdxPm88Jnl7UWRkIT1pam1UI3M5fmJ1a1V7VAp6YHUq cEpLZH5YXj1sfG98YEA0VnR7bEZ9Z2FNXjtWPSk+WHtFQ3VYO3s5M1JUPE53 fDlYfjl9cSRSSmV+bjBfSHgKekMxSGpiIUhOJFBrV3N5b1FIaFVhMDA4PDJp LSVHYVl8UWB3MDN+IXFTYWY3emJZKGhZYSVFdzNXZEpmVEYpJUdMCnpHQSVH TVI1Q0MrRyY0RmhHJUdNUUl4c0xlbkkjP28wMDFSKU1PYnVYVlJVNldaRXN8 MFdfYldJRmZsTUtGZ1l6UwpqRjtwQCRJeTV2b0ZnN2JOSDk5YWIlOW1CRjAw MDAwTmt2WFh1MG1qZl9gJGBQCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2lt Zy9leF9uZXN0ZWRfbG9vcF9zZW1pX2pvaW4ucG5nIGIvd2ViL3BnYWRtaW4v bWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfbmVzdGVkX2xvb3Bfc2VtaV9q b2luLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMGU4YTE3ZDQwOTM0 M2VhOTM3ZTQzZWJiNzZlOGViY2UzY2JlZTQ5CkdJVCBiaW5hcnkgcGF0Y2gK bGl0ZXJhbCAxNjc5CnpjbVY7QTI1fFhfUCk8aDszS3xMazAwMGUxTkpMVHEw MDElbzAwMSV3MHt7UjNEZEJqNzAwMDkzUCl0LXMwMDAyJAp6Pi1ucCQ9OEtO cGQ0MVByWXRmPm08aFF1JHl9I19tI196KyNANUlJTCRIPyE8JD8oZHtAWE81 YyUrMiE3JmhwUkQKel4zbD1xKTY/X1MqN1ZLSUB4I1JLdEY3aip2Z29MKT1E RTQqelE2NmJ4JEQyYz8xe1BDSGkqRyt0SjlqcDtLYmJSCnp3WVRjQndDUiRU LSprQUBiJFFtOW84aUYwP1lPJEAjS3JEISZGKVJXPjAhcH1jRnBYai10eEVS X05MJFR1O1RUKQp6PUpuRjxfYDFDN3RnaCQ2I08+X3VgTTwjSkspbVNedEt1 eFA8VmR7Y2lQUD8lLVNtam5AUml4fHF1dWh2PkdyX0UKej8hQ1k1YjltS3Rk ZStJeEBZJmgqKjRGZ2IqWSZCT2RjbHUyb3xBVTZ3ZGtuMzxuUWpeemBCOGBw SFEyU0hJMEU4CnpeenE1Pz82PjlTX319MzY7XlgoYD1KQFhKYG9oOT8pIVVU Yj1iaCZDcnN3cGopWXk+MSFGQjhBcFdXV3wpeiRPYQp6KzRTQXNfVVk7USk3 Z3Y4KXF2QzdoVTQ7YDtfI1p4KHxYYT9pTlV+aCZDYz04JisqbVRrPEhiNylZ XkAtdXcwe0AKektnIVgwKTc2Y29zTzA0SG9ZQnByPD5KZTt1VXBeaWw7WjI1 PUpjYlBrMWdAPTxLTzkoO09VdiR5QHwtSGdWTkxTCno8QDJLQ0B1MSk2bkJN MUA8bnAyMjwoQkw4eDgzOEZAYShwe3dScWQlbGl1cG9tJURZayhXQzMtcDZj WUNAOURJewp6IXx0dUc+Qll0RytUVzZhdTBuSUFIPGBTNkA5VmJqPmIzOWF2 LTlvN3l1UiQmLUhAbHhYTGhTUXhWaH11Kz5meGAKemJXKThPPyZoLVg8KzFH SXVraCE9KlY+Sjs7QzZia0xGVTwmPDxedHIofiM9aXNec2diPExSaV4qbz0o OFFzbVc8Cno8STwxZiZXITJVcntVP0spIXV5Nis8TTtSb1l2UWg+KXgjNSgy ZTJFaXtRJE09aG1nXkA0Q3wzYztATX4penlqYgp6PEckdzlyMG18aCp4IW9S Kz0kZkZpUFkxRj1GeV8lKDRwa2NwWD1HUyp4UVpNKHVVbD1mWk0hJitQaShA JWJ3WlkKemxiRFN4bXlJamIpUWo0P2UlaVd5JEhzSzlzYUNKMlJtSCteKDlN WD0lWkowalpwcEBlcHFEJHkjZF5XTFlzPClsCno+ZSNsdXdge197WlAzcXUm KDNfbXlKKk01YylZZjIqNDIqNiMoPnE7XndgKy0rPGUofTAwMDAxYlclPUow Nl55MAp6VyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5DM1lkIXp+MD4oKjFLfnpZ YFZfK0JzajctY2R0U0VxbW5UWmo8NG1OZlUKelBBK2F2OSRyM3YwWU0+UTVt N081M0F9b2sqZChQU3JJRUdwJGpIaGBGdUBoYkR9YUVhNShwQFJNVk04alJN cGd4CnotS0MrYXJMRHNaKlBAYFNyKkJ9V1V9UzchWU5pQWhWS0tLKnYkUjZD KlVEMVVUOTVeeSNtM2dvLWEqMDkkPVNzZgp6cUpgRFgtTk9waXR5WjMxLW1H fFJWUmQoQldrM1YwS0U0UHNLWXRKaTJuMnkzczFfTnBiWnwmJFNhXjc3TkhE cTwKenxBQCVRJE8hK2E9JFAySkt4OGUhQUBLPWBOeSNheEFVJnZCQkdifitC S159ZEdQQU4jdzFtWHg8bVRsVTZjIWJTCno1WXwjczNYJT5qRTNjQG1zd31G bTJfPmtkbVgpO0BOUUVjWVJufEF1SCNSa2c2Wjh1ZGd0ejNrd2xURHx3cylY dwp6PT4mJlo3ZFhWYVFNQn4qaEomY1NlJlRKSjBNWEp2RmBRXz5PcXZBTkdJ MjZpRW1NJVIpVXh0PWYlSHJiNTEkSXMKekdJPChZJWsmdkRwO342bW9gY1gq JVF8PTd5IWx7ekFudSNDMElwQG0hYk9ZMGVwI3x+Kj5aJG1TVmRPTW5gYlF3 CnpjU2lWdm0yZlJIN3ArPm83JkY5eEszU3Y5aWUkXm13RnRpflVjR0tUKDNh JkpIZzRMQ0M1XiVTdlVVcj9tZXBJZwp6MGQ0VyR4UDhhWVU2XlRYWVdWSXdB VSl3Kl85RmJVWnlWU3pvQXdfI2NuQ3d3KWJQVmNqdmZRKjNFejdoQmc5VWUK ekphemdFaEwtVE42T1chLWE2WChOe1ArY29jKTU3ISUlI2cxZWdYUkElMmtr VyFZXkRTb1dgS3VobERPZV9fZ2E4Cnp3cF9rKF5WViVGQXJgKiE0cF9fR3lC SnotLW47K2NBKG1WanslRyVHVkImdnJfYkc7IVRoRT85JEVHRSQ9RVh+Mwp6 N0pLI2pPJkdlQ2h0SUtWMzRRelN7aV9lSks3UlUpayYoWVZlRTlHUzdRY2pp e3JLKG1fYThyaHtTRn5FI0RZVjwKemV0ekB4Jik/c2VnJVUxWEBEelBte0RQ JWB7ZkEhKndxcEY+ZXwlYzdSdShjeWw/QTM+MnYkaiRBeDV5YCF2dGhoCnp1 VmhyPkJOell4YEtPSnAod0J9YTAwMDBiYlZYUW5XTU9uPUklOUhXVlJVNXhH QjdiUEVpcDFKRmZtanpGZ2kzZAp6SXk1dlpGZn0/YkZnVGVkOXNtRlVDM0hu dGJZeCs0V2pid2RXTkJ1MzA1VUshRmZBfVNFaWZAdUdCWXxmRyYoUmcKWkQ9 Oy1XRmZodU9SamRGMjAwMm92UERITGtWMWcrRShHJm14CgpsaXRlcmFsIDAK SGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0 YXRpYy9leHBsYWluL2ltZy9leF9yZWN1cnNpdmVfdW5pb24ucG5nIGIvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfcmVjdXJzaXZl X3VuaW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42Njk1MmVhNDU0 ZTM3MDNkY2IwODI1MWJkMjI3MzE5M2FhY2FlYjI4CkdJVCBiaW5hcnkgcGF0 Y2gKbGl0ZXJhbCAxMjI0CnpjbVY7KDFVTEpNUCk8aDszS3xMazAwMGUxTkpM VHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDU/UCl0LXMwMDAxcQp6eCFYMn4h RWVwKE1aVzF3ITBBKU0+Vj8kc2wtVGZrJmdfSEg/VGdnenQ+NSFOeXkqdzE7 dDtGaThte0FBI3BgaikKej5gdVBzVEVYWEojcHNnTj9fYHpHLXM7cXN5TEd6 SnFoQFEtJSsydz16d04pbD9aVShGKTcxMFcrNFJvT14zbD1xCnopWVNDZztQ LSo5TFVOQHhuWT8oc3ozaXV7PWM9c2R1Q005RSNfITlfQHhIKDkhb3UjdyNf LW5HXm1DOypyX1gxMAp6c3ljUzdKRndrIVFqSG1SdDMweWNjNnpadWpLRVRR dXxjSiU8ZEMqKCp5WVFpIzlvQjNNUktEeHFRX3ZRJTQ0VV4KeldgPyMmY0Io dEIrSHJXVUtENlVgd1Y4Z3drMmEwTFF9cHI0QGEodG4/NiZYZncpNX1EXjZi VSE8KzFKS3U8WVdtCnpAYVZ5fD1Yfm5xbyRCTTk+RVdDMj0oRmI5bUYzcnk8 a2didi1tSk9uZkE4ekk+ZilUfS08al5fdmgzcnA8a1hTbAp6KHZSdWZzKFBO T3k2JUdTPjlwektuJntxez1pSGE8PEZNQER0Pm57PzxJI0BkJnlESFhzQz18 VHl6cXFjP1opbG8KenZHQ31eQDgtYmorXlhyP3NwOzZLP2N1eloldzV+UGlT Zz5nQDghU2w7PVNuQ3J7fnFCPUczSUAtTVp9SXVIQEJgCno7P1IhaCpRVmRj aFRnQDYtTkorQShWXj8jdD5lKjs7bXdRWilUR3xUZ3h0Vl48PDZrdSZXeiNB aXJ+cUs9RiszeAp6IUdoZXNmIW5AKzxqdFAkPEckP1B5NmZBeDw8RnF4Jlkk WXB3cGNjKzFwb2o1MGQhSk1Rdmc4YiprJTkjMDEwcU4KelMjdG1ZMDd3Nzsw N3c4diQhazZVMDBJaDBMX3QoWSQ3NWdeMT5eeG5DSj15PCNBI3QtVz9eTXhY WDQ9RztedHVACnpRVlRDMXprbmM8a2ckbFQ3X25NTnc/IVE2M24pcCppeFFH akt2RyZwUiEmfClUMlY8Xk1PQilSPCZ0WFo4YkI/WQp6VEd+M2codDcjXmhE T0wqdXpGRi0qdSshPXJ4eHM5KUcjeCp6QC1KZDdve3cldFRrfT8xLXIxTWpW O2hHY0c0Z0sKekJeZmo8RWJKWT9UQ2lHPEV5T0d3OWk2fj5hSlpLTig+TShh WFBfUkV2O2YxeiswZz1iYllhIVBWQnJHTmc2YyZ5CnpFJEdIc3hNSkRAQGlx KSM3LSEqVGZuaGwkcTJMNlA/ajlLRjIkRTI2MHgxdHFGTnx+cVBBSXM2aExe Vm1ucU1GWgp6MSF1O1BeNzAwejNManEoZlJmT0pmLX1pVmBobGM8e1IwQW5m XyswbSFAP3RjKEx4TChWXn5DalQ8c2VlNiYofW4Kejh5WGola20hciVhdHZF NmxFN00kUSh7dW5lQURBSUdQQlVOV1BeUEhDQmEmOXoqPShpQChUKW1pOzdF MSVoMHU7CnpJdk47VzxyUUVwbTEkTGwpeEleZ2JAZEdoRWY3RFVJJEZiYHly TDE1bEFGTGAxdGsmRDN7Q344ajwoMUY+SHleegp6LXskYjUjMWBNeXcpVCFy Z2V7TyVmYSsqP3VKckJkJmdgbDQ/ZHxLSUZjSFp3OzhjTCEoRzAkbUNZTWZX XlBNX3YKeiF0QHpQd3QhT3NjMUpWIyozTyhZeVdNeHIrPEVnQ0FoYllJMGRf fC1fJTV2UG93fj8oQHNnenJtU0tiI2MxUG98Cno5Rkw+JTBfPXspdUxZfjRA ZEE4fjl0SEZWMDdGPlk5Yl9OQGM+bithQzNIbnRiWXgrNFdqYlNXV25wdz4w NVVLIQp6RmZCMU1FaWZAdUdCNyRjR2RlVWhEPTstV0ZmY2ZvQl8wMygwM34h cVNhZjd6YlkoaGlaKTltXmM+cHBuRiklR0sKbUlWfl9UUjVDTDxHJkRMZUhZ K2VTSXhzTkdtc1A5KTAwMDA8TU5VTW5MU1RZdHJIeDdlCgpsaXRlcmFsIDAK SGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0 YXRpYy9leHBsYWluL2ltZy9leF9yZWRpc3RyaWJ1dGVfbW90aW9uLnBuZyBi L3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3JlZGlz dHJpYnV0ZV9tb3Rpb24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2 YjcyODI2ODYyMDk4OTY2NDEyYTllZDkzMjBlZDQ1MTRmZTNlNWEKR0lUIGJp bmFyeSBwYXRjaApsaXRlcmFsIDIxOAp6Y21lQVNATj8ob2xIeWB1VkJxIWlh MHZwXk1qKkB4QnBBJEd3I29vMHJqajdQVTxRVj0kITlHPHlkLWFUN1k0Pz0K elVCWEwlSmtBMS0kWUxQdjBtZzE4dithTmtLMkkwTjVRKXBsMkA8VCRvRDIr JTZCcm5lJmM1dmxsdTwybGpWTVY7CnpFSj9MV0U9bVBiM2BQY3EyRCprdXgo MD9KTWd+P1UjI1NhSys2SmFwMV9sOzBScG40TDxtUlZqcmQye1Q3KzhXZQpi ZksqITxtX2FuMG5qWDNhc0RaKUwpejQqfVEkaUJ9YVY5Y0kKCmxpdGVyYWwg MApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X3Jlc3VsdC5wbmcgYi93ZWIvcGdhZG1p bi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9yZXN1bHQucG5nCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLmJmZDdiNTkwNGY5YjMwNDcwOWFjNmFhYjM3 ZTI0ZGNjMDZkMjMzYzcKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEzMjAK emNtVitAMT1zcUNQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tS M0RkQmo3MDAwNGlQKXQtczAwMDJMCnokPFVVIyg2N1NLZVhofjQhX2JBWChP c3EwWm5AeCh3YjgtSyZ9Z3BPam1xZWQlSUlYTyp2UVMkWVA4O2wpYk1lPgp6 PGJ1IWFWWDRAKyM/WVI7Jn1ec0NmNTc5QiZGRW1KKX1HWXVmeGg4JXRJPz55 JnxScTRZUmNfeXoycyVjPn5weF8KelNmU0lBKGQ+bzg8eXhaQ20odUs2cVNK MXs9MjV9d2prVkVyeXlLMTM/cSNqb2o/TCt+Iz9ZVklATEh3U1RjRldgCnoj XiFVaC1JZHR5a2ptJDh5VyU7eT1VdjM8Y0RtcW8mRnlgezxkTjB4V1RlcXYh UlJ1Iz01QDtJWnAtWCN1LWNOLQp6P1AwOWlLKW1SQnp+cCskPlZ3ZWppcEok KnoyemdhPFVHM1BSbCg/ZyZnXyljP3E7JnhWWmk0Y3VqRG5qPVZpQ3gKelRF cHBoI3ByZCM9dj0oekVWYm9EeVhKcSQ9enolUldYOWA9KGR8Q0Q8IXM2OFE9 UVJxJD8yeFEmfTZYT2FKSnJqCnp4IS1sZj1TalpsZCZURVN6Mnw8LT55Knl3 Ui13fk8hMExJLT5TQDJgWXEjS0t6dmUtXj14ZWd2YisrRFYkbT9qagp6PEJa N1dnM2FyQ3lXeXFVQEsza25FbytMdzAwMDAxYlclPUowNl55MFcmaSpIMzI7 YlJhe3ZHVU5Ce3I7TkJ+QzMKellkIXp+MF5kblFLfnpZYD9OI1loK0NVVCFB JXNMTXNhR2gtTE1fT1psITgjYXBkd0tMbUJSeXk3RndrVVJ6PTA1Cnpee0RO Py1mI3FWTHYqSEpJe28wQVZUUU42enhVcW5VQlIkdGBTK3MyYVRUUGgyQFIk WmVAX1VocjY/XmVYIz0hdwp6a2lkdStkWXBNMkBwNmI3OXZLfkxZcG1ndyhJ azQma0RHeno1cm9EMWRWKEImVzVlNEJgPXExd2x5IzF+K15qTUwKemNzTCNa Kjg1Sn5SNVcmPCYrVHU2LUJUezdBfFh8UDt7cXheKnk2JHY/fXprflgqeDdM TG4hZyNYWG9hRmwwdF9nCnpBSVA0NjxBUngxZko3SCM5Pzwjayo5dUVJYiZ1 dDtjZzV1SUNtJkREUU1pPTU8b3MkQkhhRUdwUFJhbCpYLUs2cgp6YWxCbXVt M0FxY2dyQVY+OD1FRS1pcjU8N2peKituRGF6aSZAWDJoITJJbXp3a0JwZGMx T2okO0tOV0smJip2e0sKekhjX0ZwMlQ+Nl9YTCg8Nk1HPVN2MERDNSMwLSNt QXZDK05xKjl2XmtJSzJsOHZkRk0lRXQ4a252eG5KbzFjNnxjCnomNGN9S3ZL SFd9VnkwSEBMfmkzc00qejh3UDZ+MXxtfDs3ODlPIXJrQy13UlgzSVQoez1e MSomb0h1ZmQ1PGhUTQp6PlZ4PCRFe3kxck5Ge3dxezFwVmhEI3A2QzJSbjVv aCU3TDBvbGVCMU58NEZwYGpNUT0jcHcpejk5MEBRdUE1ZG8KeiV6WVB2JGky WlEmekwlJSR6NkJ0Uih9LUFPWnwxWnNpSVYzI2FYX2FLS3BJP1J0d2o8UyQk YndAXns2I1RGOzFLCnpyezNSVlg5a3BBRCVZXzBNd0xBKjZ2QS1pVmtmVzNp ZUc3QHc7Pn5wVUMxV2t7MUVwV25AKGk8JEU9eSs2Pk5rSwp6JnFwQXlTYTQt dUh2SF5YelQwM09IPjxhe297ZWhBeU1qOHckaC1XdHRRJk5acFY5NmtWNE15 P0wwQUJiTUdNRHEKeiokeVNjWVkpPSYpMWZIYHY8V29VLTdWSjJVN305SiZg OEkkejh5WW1gZ0tuWkspTFdGUXBEdyt3UW9gVCQlbT1kCnp6UWolQTRpYThz PFY1MGtEcEZJfWckJTg4LUxOOXtVbTw8fkY/SyVUcCNuPFZ2JF5+cWFJdVBS KiNMX0gwQTdWRAp6M25Pa3E9N3xyfHYtfiZtMlA5MjxKT0FzbjYjeEpMQzNI bnRiWXgrNFdqYlNXV25wdz4wNVVLIUZmQjFNRWlmQHUKekdCNyRjR2RlVWhE PTstV0ZmY2ZvQl8wMygwM34hcVNhZjd6YlkoaGlaKTltXmM+cHBuRiklR0tJ Vn5fVFI1Q0w8CmVHJkRMZUhZK2VTSXhzTkdtc1A5KTAwMDA8TU5VTW5MU1RY dE9ydD5uCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9zY2FuLnBu ZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3Nj YW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM5NmRmYjRmZWFiZGQ4 NWUwODFiZjgzMzYzMDQxMjkwNTg2MzNjNWMKR0lUIGJpbmFyeSBwYXRjaAps aXRlcmFsIDEzMjAKemNtWStDWDs0IUs2b3IjRTQzVSgmT2lYN0cwVG10ZDVE WFltZ1ImRkBhY1daeGl2Jnd3TD4zaGdyQm9xfmxyQGl0CnpMSl5kdUFaV3E1 ZncmWmtDPWhgWDc3PkkzVyZzbmpGSnZkSSh4fF5XYkkmPCpANyhYI3owNHFU cHNrSWE0R2FkZQp6SnchVDR2ODJhR0EtfVhaUio7JHZnVFhVYDR1PXBlRXdo RXxuYTRfY0o+Jk9NUEhkQ15HTj8lIyhnZUx5Z21vJmkKek4zX2c7d0p+aGY+ MFZWKnBRPmErU0kqSTA5OF9sd3Q4NGtYeU9hOFkoVjEmd25ud2JJKXQ+QFZ5 TD5+I15zI1FgCnotZXolN24+NGdUTkBZbkkhfE0xUlNyU2AqZU95RG9kOVJL b2lvRyQrRClpSlRBb1ZuRFd9Mm9+S240WSpuRmNpPwp6KDRkNWpOPVBkTGJ0 MkhEZyFDZUNSdFg2LVcrfSUtX09TcDM3Zl5BNTg3YHBWMHRQV1N0fXd8dGZS WVFTRWZYR34KejxwRC05STNfbjVFVnZqbkUxQHxoI0NeI2VsXmJXcDtFMnFp O3trZGVWQmk1fUYqcSNNOCtwSy03JktYMjA/c1I7Cnoxcjs8WChHUUNDXkFk MVQjVFhGbE9ua3UxMmo9K0wxcXMrTSgjYFVMTUc0cTl0KTFzJSolbnRwT0Rh YXN3RHVwTgp6Vz1SNHJzfkZ0XiZFaDA+WCVmM0UwbkhZUWtOcUc0VSVqN01w MlU3b0YqPkdaVERZbllsaF9wckk0VT1eT3soazEKejxSSDgoejtYazQzV1hk RF5PYTEqVEFFZDdOenxWJE4mMkxLLWdze3E/MkQ7RzJtTH13Sj9hdX1Gdmt9 U0NFbC1aCnpuIVF+PTdJRT0keX1lKHlHaCprRFhkSX5+VXtqVksoRipZeHVx bnh+PjEmX2w9WSZzV1RFYE5xeWkqLStlQTlNZAp6SzN6STZZdXJFRC1WbGd4 RDJWZ1FxNFQpbzx7VWM1MmRCTTRfbnM0cVRAPER2dCMqUyMmNmRmJD96X0pB XjdOZCYKenNjPnwzVD1CSWZBM3BxfG1mQFlndSN7XzhVYihiemI+WHxud2cq IUBVQmJNa2dvVnBacipUZj0kJHlNUVM3Y0h2CnpKbHx5STl1RyVfPzw7dWZo bChuei1iM3M5eVJuZ203IWVCQioqQGMraU9WPioqV1VndHhpcjRxSCFRNThz QlleWAp6K3RebHFDcnFpT3VONmohRkNtXlotUHd9QTRjRWR5diNhY1khKWpG SnhLaDtkI18oZHVxMTwhI3V8X2luVWhSYjcKelp1V3M0P1JtUE0zTGI0OENf NzJWTkN2KC0wWX4rcDN1fk0meSN6LWh2cTxPUE8jfkhQTHxIZVQtSkJuRGF8 LVE/CnolPFd2NG5VSHU3c2N6IUY/bnIkYHQ4KCsxb0JLV3xQZTV8IXo+bWJT Mj09RU44JHVuQ3p1KT18TnBYSlMrOGsoeQp6c2YtbzBIcz12eihqZWRTN2gx XilOazZFZ2ojSX1qI3xmR1JpXkRzelphYTY9MHQ8U35PZ0MkNTtQeFhaZjkx c0UKek9XVSg2TnpURUQ8ZG9WPzlRczN7WCg7UEApOU1rQXVIeFFraEhwVihE OGZvUG4hV3kmQVA8cERzTEp5UCUzb2gmCnpfY0FZcz9gIXZ8SVl5IXc8MnJA LTtALS0yPzAzfDBXPnhpciRPUH18SDVvTmRtKS1NdlEhIXJtKDljKSEjcj1f TQp6QkhlYXwpfXxlPiElITI3YGxZRHVTPilINE8kdkdxP2JrWXxWJU9feURC SUVLRlItUCVvelhWPV51fF44MzNveU8KemFaVUw0NVEzQjZrJj19QjwhJCpX OyprY1ZYeUxpQzN5K0FSZ2FrYXo+an4hVTcrVVUqKCVDZXktREhCKzdGSHFI CnpQanx9Uy0qbmRyUlRvaHxSPFg4STlyLWYtTGNFTnt4Pz9pMk9aNC1iKEpx TmFTcFN4dmMyMnRgNk4qUno+VSl+Twp6M1hpSXopQnswVileXm93XmVeLXti eFZkaGBkN3FOKG5IO3EzJmopdSViO2xrP2NHTUhzUCpsWDw+JEFpNVdgY1YK emtFZ15DUDkoPXowX0s1cCRHTihEeFo+UEhKYTdkM0UmPzkhZzQ8Mk47cjVu cWJAKDVVbT10e35IdGpRait4SDNoCmF4SnwlJGVnXnRWTG15ZkkqZFplTVY4 Z2V4dHA1UTB5UmokJAoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhf c2Vlay5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2lt Zy9leF9zZWVrLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMzBmYmQ4 ZjUzZmY1YzJjNzU3YzgxNzNlYjYyYTFiNjA0NTU1ZjM0CkdJVCBiaW5hcnkg cGF0Y2gKbGl0ZXJhbCAxMzI2CnpjbVYrfTE9MEc2UCk8aDszS3xMazAwMGUx TkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDRpUCl0LXMwMDAxVwp6cnBH cGohRVZhek03YDtEJmhDNTk/b1l0elJsQDBwKWJNNz0/M1VUX2czO30hLXR2 eXI/dm1FO3VpXjZycntOb30Kejw2RmgrViNuKF54OC1aYz15SH4haE4peXlq VHltQEh1VWh3QGEodG0+JGRhbiRNNU8xXjZrYSQ9Q2txWSNPJmorCnpwflBQ NjwofSV9b2JUJGo+RU4zMD0oRmhGbmRqVj4/ZDdyTipwJSR4dD9jNWo8a2di dztqWmk3dD9sTnJAYVYkdAp6PUReM1FiQDFsRT5mRWFEPEckbjRrSylqYz5E ajJ7KH4jb01qTiMwUz0tOCsyO2s7ZyNCKkRuSyNGfGowJXclK0AKeklHKGtL dUd3KyU+V0EmKVZEOTV4XlhQLWA7OTJ3TWZiaWZ9QFpWSlE9NiNSQVE/Y0gz MDAwMnorQThTVERDeVdHCno+ZWVGYilFc0BYTCN4em12KkxIXilnU0VCODFt Z3dhR2diQWxgcis9ZGcjfXQ9aFVSXitffm5fcVR0RGktXllnRAp6I0QoVjVx fXtgVytgeGswJGNXcyhmYUsxZ3NvSEx5KFBYXnZnITBgXl5WPn1LPDk3N2dO UTxqJXB3KHlZJj1sXl4KejVidz9vXlYmLUElP3JRQngxIWYrekJ4dVYwMDAw MWJXJT1KMDZeeTBXJmkqSDMyO2JSYXt2R1VOQntyO05CfkMzCnpZZCF6fjBf OTBXS356WWA/YjZ2KCtFNWUrVT5rNiZUZWExaTFCaWhOJFI8KigkUmNYMU1L RlJHSyRKeFZmKyRLVwp6aHl9RiU+JUYtd2lCOTUtR280TiF5YnQjJi0jeilB YjkjRFMmJVp4ITI8fU1VVnVYOyU8Pz4jbHVZWGAqa1FqVWAKemxNTjk9ZVoj e2UjS2BFXypnSGEkJGo4VVc8d1hDKSNLZTJ6IXtwP29qT2F5dG0+OFghbDhx NjZzbWUkRSZ5c2loCnp0NyZxWUMha08mbD92YHdEUFRzZVI/b3NMTU50fmlY dGkxbXc3KCloa3BpTmVvMTBVRFFtNTFETDJXUD89N0JQcgp6T2xIdHBFRWVs P00xX2MmQlNzMStsZ1hybzEmaFZAM3tpbXxsWDteTjV3cG87KFpadDVYMHdZ RWc7SiVPO1p1Q1oKekRIYV55dS1mZlFxVH55M05BZWMwcVN2Y1ltM2ZMblJt Xjc4Q0MjR00+VlJkWik0M3g0Vjw/NHpQaHNoJWFKdC1YCnprMnEyNVQ4JVpm OEBtV3JvNllNNHJgeD9NTWJJb2RqY3Zgcz9zZDVrU0Byb08kU2g4dyE2X1Zx NmV9TGorQiMxKgp6eklPTks4fTV3Yy02NU0+LTtwOHhvUHE1P0FoNnhOZ1RX b3hwPW8qdGMwLX0/VWJvNi1XTlUqWU4maH1GNU1aS0EKejAwUGx5R3l1VV5F Rkp7PDtOWENVUCRIMkNeVy1xSGRGMSErQ3pCKjFRNmBFPkVDfDdQSldlQiRO YClZdE5UKU1BCnpBJipaYDYoc203dX4+X3NfdnVzJHkmcH5zJHIwYHRuR3xM VEsyNVFnJHopRVNrUWE1I0ZQd3xSWVBCIUpRaE9GXwp6Kj56YVk8I0t0KnZu LW5qUTZnTHFrRlFZM0xoaF9zSk99b29SQVJlaVVyNmo7Rko2eVR2Pnc/KTtX N3VnVikyM24KendwNisqT0F3ZEs/TF9iVWR+MS1zSlVoJDVkR1B8MUQqO0ln aUJ5Vnd4bUBtTUlyO0o4OVh0TWNoPEVINyZ4TT1DCnpGNkBUR3R5eHF+O2p+ KDwtb1E8KlI9ZXBgeHNDaWY8YVg/dUdlOSNiQ2Upc0ZyZTNkQ3B4UzZRQDFT O25lXyFqNgp6LT94IzY8VFhCTSRMSksoVTVgcT0tbClQfHYpUWFZQ2RsOSZZ Z0d2YDJfXzdnYmlJeTlxayMkY0BuaDAlVHF7Y18Kek1XdlBFdTlNPFhtaUJv YCQ2bjk+Y200bmYwcnd2emIxTDJkMDAxUilNT2J1WFZSVTZXVnsmQy1iWSVj Q0ZmbE1LCnpGKX1TTUY7cEB6SXk1c25HJkN6UEg5OWFiSUdINkwwMDAwYmJW WFFuV01Pbj1JJkUpY1g9WnI8R0I3YlBFaWdHUAprRmZtanpHZGVVaEl4c2RY RmZ9P2JGdl4henROO0syMDcqcW9NNk48JGZfa1F7ZkIqbWgKCmxpdGVyYWwg MApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X3NldG9wLnBuZyBiL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3NldG9wLnBuZwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwLi5mM2E5YjE5ODNiNWI0N2M5NmFlOTEwZTczYWI0 MjYwYWU5YzI4YjczCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMTQzCnpj bVYtLTFjPntJUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNE ZEJqNzAwMDRpUCl0LXMwMDAyRQp6eHpMYFYoMT9yQ2M2IWxqWl8mLWN0O3c+ QiMtd00lbk5HcnpKZD41dGV9bWJZbyNDO3c+YjxgMCRqST0pIXRTKVMKej5Z ayRGZnJaKH1zJj5xeVNKfUxNPGs2YnktS2cjNnYqWFFgcU5MRUxzcHFAQT9Z T3o/eDQ3JUJ1PDc4KWpfbD5ECno+KkomODtoVzZNJWFvVmp3enVvQnZneHcz PmJrcV56UU9Lb25iVDtDdyVGNkU9LSF5Oys/VlJ6clJMUDUqU0MxQgp6dWpx UUUqSlEyTldzfD89K0xxfHNueXMkcnM7dWFRc29Ha3EpP2RXd1gyJDd1bjc4 S0htRkMhIzw9Mnp0KXtAcT4KemIpVTIyTnRWaH16Mi1IeT0xUlRoYjsjJmJv ejE0T3J7dlg9PGtYU28pfGpOSDxmeTlXVGVSTE92KmJGczwjbzUqCnpVeWkt eCh+I3JSa0tNd0VBaDZfdCZGYlVPajxkQXQ3X0g7dCZXeiNBaT5qXldWVlRi IXU7aGZwOyE9dmg7bWVCTwp6Iypla08+V3QwbEshKEVMJThCTEFwZ01gZTUz QSNsKTltMk1ofkxQRy1eWWpFI2Y5Ul9uJT1+UC1vbFJFIWhfcXIKemd4dFZf O0shNUd1eTR9RHBXZWxhQ3FUcVEwMDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JS YXt2R1VOQntyO05CfkMzCnpZZCF6fjB4bjVKS356WWA/YkteaStDVVRyVkQ3 aHdUcDl1fjNLJjRlZlExNTVEcGptNGZ+YylrJmBMeyUtbjE+KQp6OFZtJW17 JmhEJWt8bWZLciEoeSomTnBVdz1EZlEoZGxaVUVQM2t8RVFsLXt0d0htY2JJ cnkjOTg7bUJDKFYqQUsKejBjNlROWkx3TnlfRDNpSmtqe1pRVUhIcmxQQjx+ Z3k9V0dsdiQjRTh1ZzdBdVRJYlBPSngyT2BldCNla0BjVkVRCnoofnA0I1dP MnptOWJDM0FjXz1xUHE0M0lNQU5UKTJCb2N7NnAyWHNnMXFuZ1NSNF81bWxU Y19pblM5RUZYZiYwMgp6aEMzYVNSRXlNRmRRQndIKkVjZkJPJTRFJmRhP0VM KWZTIXwkKS1mQGk4TXNFYk5RWFo/JXd7TzF0KHM9SWRFYXsKejlVeU8pNGBD OE0rOXtTWSQwcmQxeWdOTlRDX35ZZFE9VCtUd3NWRXwjWnZ5bS1hWV9CUUs/ ajdQI2N4YDt+WSNACnoqTmJQeFFlcFJhR2JNbSh3ZFJWOHIlYGBPakY4VnFV cFNLYWBmWnFyMUdSSkYhWE9hTV93KSRLPDxJKSQkNHt8RQp6P1l2JVY3ekx0 ckFIc3lYRWQxaWcjX3ZuOU1nNUFWVjx0SmA3RCpwZWA9SHJ1TFBRZGIkYCR4 dmU1TlledTQlXmoKemZhQ0wtMEp2X0VaTm1kRFMhfmZfU3BwZ3ZgQT1DTndy QnktViZJOTkzYH5lMG1eejx7MXgwcT9TKFkyaTx7JVIlCnp5NS0pO1NqcjRQ RXd0ISVTPntJYUZlT2pTMkE8ZG5lezJBe1doTl9tVnEqezQ1Pz1YMyg4RWsh X00mJClfSytwKAp6QkVoWVRQSjx3QyFBOyV2bjllPXhxUThfLWI4dkppI29K N3khTCtrN09HKXQ7dDhZQDFgWF9ZPGRFbmlacCFWN2EKejAwMDBiYlZYUW5X TU9uPUklOUhXVlJVNXhHQjdiUEVpcDFKRmZtanpGZ2kzZEl5NXZaRmZ9P2JG Z1RlZDlzbUZVCnpDM0hudGJZeCs0V2pid2RXTkJ1MzA1VUshRmZBfVNFaWZA dUdCWXxmRyYoUmdEPTstV0ZmaHVPUmpkRjIwMDJvdgpKUERITGtWMWpecU5g TD9XCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9zb3J0LnBuZyBi L3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3NvcnQu cG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFkNDZmZDM0YmVlZTA5OGY5 OTc1MjliZjBiNzcxNGM1MjIzMmEyZGYKR0lUIGJpbmFyeSBwYXRjaApsaXRl cmFsIDExNTcKemNtWStDZT5sPyM5TEtrR0QwSkdiITx8Yk9RK01lYFBJQnNA WDEzMXVibSp4JG12WGFhYjsqeUFDYjVKXjx5VUNVCno9P0c2Zm5meiF1PGl9 KmhrWXk3eFczfG5YamlPUl9Ad3NwSFNBVHB5QDh8dF9LQ2pSN2N8T2w0ZUlM IW9aMXAjKgp6UTdEdWRnLXJCQSljSGRnOHo2Yn1MPncxfExaOTJgOHttIURR e3xubVhgPUFuKiojNUR6TzdVS1pQVU10WFA2SWwKejVmV1d8cE49Y2xYVUp2 KyRfMW1GcyYjXkFqKDYydzRRZzdtQ1F6aGhoJG5POGJDTFBReishPGAzdTl5 Q0xHJWJiCno/MTVVNCQma3EpbUJRI342QklUQXVPOUxxTElzU0IpSWtwUF82 aXtyUkkxMCYycz9MRHdkaDdaOGZKQE5DSm07IQp6RmQ0dDNJVGZEP1Eray10 ZkttKyM2e3gySG8qalZrVXFERiYmOU9sUiRleDA5ODJTYzVCNzxRaWZXaSZi alAzIXIKemFFc3gwJD84Y0JgbksjaUlUVHN0VmlseXtjXlgrZTVlcj5pPHEl ZzRrJWhvNmZSSjFXNSYqWUU5OSQtMFJFPFd9CnpYKnU8fWIwOEsmUXhud0pn SFUpMHtCT1pvNVElc1lZQVN9LTdmP1AwTVV6bWRnP3FEKnFKcVM2OzN5JHg0 RHZNKQp6c2VxQ3gkVz1xZDM+ZFhUTT9iWHBMUiR9ckJ2OGUzKVhCcjk5eTh4 NHFwRiloJjtUUDM0bElzR09CLW17VEZ6JTgKem1xSkpUKGZtPUtuanQxKVIt R2klcVl4IzMze3V5elRgMUhGNCtfeU1mWlZBY21ecHkpdlRVOG0pMTglYHNL bmhqCnoqPHVrc1lVaTFlVk9mSktQcz5ffEFIdVV6dlc+fSY+WHRGbkQjMTI9 NWpTRC1sfU8yWHk2QUVBc3Zfd348LWF+PQp6UjxhOSplOUtDKztGZ0dtTEgq Q01iQmdUKjFGR3FSRkcoYmxrSWs8NV9zPShienJyVjBPTkxUe0p2dk5YaiZ3 UikKej43WFpESSNCb0tsOUdMfF9NV3JvcTtDcVREUVJVM1UmYzdMKntiXk9U I0k3YT00Klp8X19gV0I3ZnQoaDwjbG1MCnp3VlU8anV1SFc9KUVKcW03bjNm ZUMtKyMlSEN4dz11RHxte3lZT3lsYEUofEtMKCk7dlZkSGdjUVl9YGplQSRL egp6ZF5HVXxhVERmWk1+SGM5U3l7VT9nX0gwQ2xZP0MpNHZGeF5CPDhIfCQz PzglUCtmenVQZEVBdGhvUnRlR2pecXYKenAyeS0lQ2I1IzZFRWkoZHs8O3gx QFVsOVhqKF5gSC1Dd2ZlWT5kK2VGdXpOdnkzKChnOCM/Um00KSt1WFJaezBT CnplayZMajImfHZxVFg+aDh6NHArWXU1PSpXYiolWC0lZlg7NlpDZUI5N0Z7 VkpkdkhlWUlMIWdlTyhxelkjZmR+NAp6Z1B8TCV1MWdZek5UbVZZLSNeKml4 Kn1WIyl3N2gwSWZKaH52PGNnLXVBdGdCWlNRZEotK1dTeF5EJFRPT0I0VFYK eiZvdWdIWjwqZ3RFSDRTSzYwTmxzSWxNSXVXQER4TmFqISl1PnRwNzw+MkhO I2QzZ3FAcV4wSnVnQEwhXykzM3UzCnpTRDQwaj08Jj87eWVubERtUnU5S01G aktTeXI8dXhZMHZPQ217RD4oNGU5eTZWUnZ3Q21nS2Z3eDlxd0tAYmpVUgp6 aXM5cTBPQ0hWRi1YSW92RlNjfFIqMigqTHgwaiF0TVhOXiNVJGUmZjJhJCll a009JG8le1VTcj5pJFAkQz9ZNmwKemYpbH5mJD1RK002eVF2N2NpSENkO18/ SUdDd0J0RGpjMzM5R3ZMb35NaX0kLUN4RWN5QmstWnlvIzZUaj1xfWhfClBm ZEQ5cUg7cWBpYCo4Q0FiQDV8RgoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9p bWcvZXhfc3VicGxhbi5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2ltZy9leF9zdWJwbGFuLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwLi5lMTNkNzc5NGU5MWZjMDg0MjcwMmIwYjM0YzFhOWI2MTYwN2RjZjky CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMjgzCnpjbVYrZTFeb0puUCk8 aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDRpUCl0 LXMwMDAyTwp6IV9ielEoU0wpe2JhPk5kWXRmPm08aEhvI3l9I19sI3FZd3o/ IzlVUCRqST0/JUo5cH5AeSpXaSYoUU1HKGVsJk4Kel5WaXEpdGdoJjx2Rk5G Kj1ENH0qelE2NmohUkBsTj41YFY7bjQ5NmN5ejhjQChBbkRjJEhsaityRUh5 KU1WRX4oCnpqZSF9R21DP247Yj1CQ0IrdUBidj95MkpKcHlCR0EoYjA+Knk+ WV84WnEoT2AmQ3p8KipvVzVIam1nVikmQ1BfcQp6eWx9Q3NTbkJlKXdYbGND Iz02K3VqO1ckIyp5RGxNO2VZN3V4WFF8WChiSSp6d3JxeH1XS3hZOGIqOUhR aHszNE8KelhsPXt2TCVyIXV6dnglUD5WPyRzbC1UZmsmZ19UTj95Y1lSNVVi Km4pJGdqKFlJMnNMdGstVkFrMmR1MiQ/KXY5CnpAOURKaj9aKWxvdkZ6Y2xA YWUrcDsrKkgobWdMb3Y+KXghdiRodXZaQihCPFY9LS0qKyhUP2llcy1Dcm5j JiRDUwp6PjMtP2pzaFlgTW96N3lxP3Q8XjshMEZoaD8mN19OeUc/SkxMJnZJ aGk+cXdFJEc3TyNyc21WNT4pZzVDI2Y5QyUKemdXPTRKK2B4aDUmWTtgQWY4 QD1jNFBWMTQwMDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JSYXt2R1VOQntyO05C fkMzCnpZZCF6fjA9aHs9S356WWAmNk1kPStDVWhfSVQ4aGBRWHpgZXFYdzJr THk7bilnNFhKbWRiRzhhdlRCM0twKHY8JAp6KXB9ZTFfM3AtPzVadTdubk5G ViVvMClmPy1ATTF9TXgqKVgoKDNkS3N9IVR4WDtwfXBSKWYpR0c4JGpCd1Jk IXcKeiVgWkRVRW1wSU1xY2dnZXVJP19JMCVffjkqKlA1eihZSlFMPlF6Pzhe eDE3REpxPTt7eCF3VX40Y2RWfCVXSVp+Cnp1JF5YeDVRRHRLMzVjOHllbyYp akVMSk13VnAqMyZ4SU55WDtiQjRXYHJjck13YkJ0O3luaUl7KSstMT9GZmJZ Iwp6PDVkd2tpXkNIYjM2c2o0O2dDRHpQKHhnN1RSVU9FXztgMz81KGckSCFW eGJ9TDBxaGY8QlhWejB1YTNxTyokaEgKekhINVZvSUw9PFgzKUIoWmlPdDU9 V1doKWZzSjcxPGRobEtwMz1MSG41TnJtQ2c1anhZTDF2bW16Xz42cT9SXkxD CnorYUdCejN5NiR7cjdVPkpabEFNPlVOakVoWGg9VEY4TmQyYlJ1RnpIO0dU SU8yP2olTXprOE4lZkVkVyRBVjIydwp6TEA/czxnPVFPRU9WLX09PG1JPjAt d1ctRCswNl9NcCpgZSZCbFJJYTw5RzNscFZCamFlU2ZKckk3aT83NUY/VjsK emhiYTZBPjVrYV4hczYxVyp5a19IJVVAJHBCNldffkxPZFF7aXA/KUImM34m eDU+PCVPTENLTygkP3sjUVFDPVVCCno8UmVuJktyNUBPWWIpcjdENWxvWWxT cktkdCl8b0lINig2aUdGZW1eWiFXKT8mczlkUGJWenxNNXM4XmhWSCooXwp6 bz5nd0FtQE13KEdfWFYlZyMhb0h3emY3emwrNj9oeU5EMTgyPW0zZ3tyekdk IWNyTUN3R00qZDhwVTtWdSlUWUQKemd6JE1KNjNPSnwtdG8hdGV5TE97bSY7 SiQhMXtAWjxQflIwQnE0KytyQHV+NUBWODh8KUgrQyheOzlaKmZSNGAyCnom TSV+MXMlOGJ0UVpLYSo5N3N0dTkkc0V2b2oqKmg9NWlfPjhrOCoqdUZ1Zjw8 PC1zWTxHRUM7JlZqYkN1U3d3UQp6PUp5PjFROTk3a0EqdTE9X1YoX0FmKyF0 el5RY299JE4hLX1uYnIxRTlfVTJvMDAwMGJiVlhRbldNT249SSU5SFcKelZS VTV4R0I3YlBFaXAxSkZmbWp6RmdpM2RJeTV2WkZmfT9iRmdUZWQ5c21GVUMz SG50Yll4KzRXamJ3ZFdOQnUzCnQwNVVLIUZmQX1TRWlmQHVHQll8ZkcmKFJn RD07LVdGZmh1T1JqZEYyMDAyb3ZQREhMa1Yxb0E+b29vT0EKCmxpdGVyYWwg MApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X3RpZF9zY2FuLnBuZyBiL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3RpZF9zY2FuLnBuZwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wYTYwNjNhMWFmMDMxYzYyNjgwMjkx MWZkY2E1OTg5ODNhZmY3ZDUyCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAx MDc0CnpjbVYtMjFrTC0yUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3 MHt7UjNEZEJqNzAwMDRpUCl0LXMwMDAyZAp6O1BJMlQtQE1mOHt7SHtMKjZv P1E7aWJhbD5oYnlUXiFuTjVedkJybCszV1NJI14jSyUtT0FoVjxMdmledD1u fj4Keil+M2JlJWpFSVI8Pys0UD9ReCNlKSNMTjckPilFayswZj9sKjZRQGQ7 cWJ4VkA1JHJ2WW5qcmMhe294Kz90Ny0jCnp3YjFGWCU7PSVQPEhnfGEjb3E0 dGB1KEhEPGF3bW0+RXpxaCRGOWg7a2lNakt4fCgzUGt4UnN0SkIqNW1mcXtY Qwp6aGxoQGlqK1R+fHByRHx2dGdPN2V5dkB6Yyt9enlvQGJLWmA7bGFQVnRE bE89b0l9cDFQdVI2dy1vYT8kJTR6RDsKellWRm9+O0xeSjU+RSEwLT1Hb2NW KCRkbiUkakhGSnpfaGZxczthNyluVkYtYnFuP3xXPil3VSY+MztYO1k0UEch CnpfMkVZSy1aO3NvWHk0ITgqNEViMCg5cGB0JUVpVVM/ZHxSMSl4Z3hiaU9I Wj8pMm1ZWj0zM0NhbjlrMTUjPlUzTwp6IV42Nnx4eztCUT5nd3Y8JmE9PFF4 eFQpPnhWWDV0eDN9S2cqVVlrbiVlJGJ4eX1qaCo8ZVokRz07LUwxbzEzdCgK enUlRGx3dWRsREFyS04/MWdfTSsoO157VCgwMDAwMWJXJT1KMDZeeTBXJmkq SDMyO2JSYXt2R1VOQntyO05CfkMzCnpZZCF6fjBxSUZaS356WWA/VVkkbCtF NXNWbTFxIVowcyZkMDVFWEgkT0p6dyZmPjlKdlYtfjx4dHpwciZtSikzIwp6 dF40fWRKO0N3SDVhM1F7Y3JQPk9uZko7MEB9O016bnxHNjU2ViVyc1YoTiNA MUR5YUM+aiU+eWc0KV9WWnRwaV4KejQkUn5uYT1BVDc+KklaMUFMQHNGWmhV d2M5fDs1cGlCYFk+THx+JjNqXmtyYWJsZWpQNDJgI0Z2NGs5TyRtSSQ7CnpG JU47Kj49V1QyWSZJcnI5QHJoNkxAKXlKVEQwcitWcEQkT1lxcGBHNXFIPVR3 b2JvMWYmN3FoMnxOKilgUk1DdAp6NT5eNT0rZEJiM3JyVnVjbGchU3xGTUx7 RGo2YEZ4U2UmRjFHe1l2QjQ5O2BRRTItN0JebS08PDUhdX0weG90c3wKejxa Tz0yT1BvSHklUjc8UF55ZT9UZDs0R2FHWTNrdFAkKEFKa3w+R3tQMDczdHAt fDwrdClwKz5CUnxyYTxLeH02CnpwOVBeKGBjOyh9UmFLPzNlNEBOWXZoM2xo bWY3RDhZJE5yRDcwWGdoe2FjcjF4aF5yOz1FeTB9Yk59WjRBRG41Iwp6YDdf WjM1ckxRbkBmViEzVEBjdTNzWVhSWk93PyhxKFUrPWwxcllHIUxJcVRTNHdi MSUpdmApYypFamxOI3JpRkkKek9STHBWTUclQ2RDZFNuNz9zSE17SSVePTdX WTYjTnhzJkp2ODBBQWVOPFFXaV9jdlghX2EmeVo1WXplaSFIT0EoCno+OD08 RUMqXmc7bmw1cjlPRyVjWTZCSFM1XkxOcUIrc0c0VW1oRz0lQkolP1AwMDFS KU1PYnVYVlJVNldWeyZDLQp6YlklY0NGZmxNS0YpfVNNRjtwQHpJeTVzbkcm Q3pQSDk5YWJJR0g2TDAwMDBiYlZYUW5XTU9uPUkmRSljWD1acjwKc0dCN2JQ RWlnR1BGZm1qekdkZVVoSXhzZFhGZn0/YkZ2XiF6dE47SzIwNypxb002Tjwk Zzhtc29xeVBXXwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfdW5p cXVlLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1n L2V4X3VuaXF1ZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2I3MDQ4 MGJlOGE0ZjQ5MzY5ZDlhOTc0Y2U5NDYxMjg0ZDFhNDY1NApHSVQgYmluYXJ5 IHBhdGNoCmxpdGVyYWwgMTIzOAp6Y21WO3sxUyRLOFApPGg7M0t8TGswMDBl MU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0aVApdC1zMDAwMloKeiNL Z1VLY2dJM1BzflFAfnUmfW8mRGRjNWwoOVhgc3MmJkRTSG52cUsldGw3ZE49 bWF5QiE7UEVRakhtWnJDWVBYCnpydTZhMkBhKHRtPmIwfnVGNTx0UnB+WVQ+ dlBTRldwNmNTOT5FV0Iod3QlKVNFQThhNWEtJWlxLUkmTEFSUDVsYgp6LURQ Rig8LWV4UFclQkY5dkx6K3B6P0pJVXMmPVk3PkRaXzIrX35vMWwtOHFvKUxk TlImeUFrN2hweVVqYyY8TD0KeilSRXhIaH5MTUM9RnlfUlR0bVY/S2pGLVo9 K355VDxhKnR+ZzUlN2R1T1Q2T3ZxSXoxa0s0VX14R14hZk1MM1BZCnpRfEh2 QTxqJGJJSjNHXjZYMVZLcygzNVMrUmFMdzFnVF91eW1kc3RhSDhydDRBLUd+ SCV3dUdfTUB6YjhXcztUQQp6V14yKWlMMzR+ZVh3QTs/eX0jfGghUl5Bcj8j MElOJGpSYF8lPC0tPEhxXkRxeXVJdEVzcHFQIT1kUTJtdjlzIzcKeng5aHh9 enBOfVcpeiRSMFdfIVM9JUM5Iyk7TmJWZyNPJXFwKjNyQE93VHJFfnlYP05k P1c8OHt2dlpFUXRrfHpWCnpOfEg1TGdHUFg9ZXk2OVQ7RDFZdGxGRVRSMDAw MDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5DMwp6WWQhen4w KnkmVEt+ellgJjZOOUYob2gpM2hzK1UheHNeYURtJnZVWmFleyVNej50NmQ2 TnBOZ1Z3Z29ZRkloKDMKenk3O2Vtd3NULVdQb0Q4WiYqUz9lWFA+P0Fge25G STVRQyl+KC05LXFuNFRQdzhLKF43OWNfO3FYOz55UkdocmtNCnptZ0RaOyF5 eHBlI1ZWSzBLOzVTYWcwdEpGYTEzcGtifnYwKTdpRG5zd0FeSXxGY2AhdDZD U1ZHP0RmJnw1QTJNYwp6IXl5M2hjLSglPDFyYWJDNHc+WXdKbnkzWEhlVWND ND1ATiFZPVk2N1h4aUExYmZjOFpJTjBTTyYrfFVnS1JYdmgKelVEJkM0N0Rq MllmQn01TCY7bVYoQFBaJkx5Mkd8ZUJtX15FPHt3Ml9DQ1hgc01+RnExPEIx YH1DJlhlYSUmSXE7CnpPcmFBdG4mdVM1c1N1KT04QWY4VTI8Y3lRQzZeSmg2 aXNKWUJ9JEwqSTJqa2srJU9VZDF7ZD87TE1vTClCZVBHawp6RUw7Ky1RQjBJ Rm5XMF5iTj92Nz84VnJ9bEJeQyVLJG5+fGtWbGpiVSN5IVJUbTcoTkR6RVRp RHA8dVd3NG9Tc1YKellHdHBDbDs5bzk7dGBRdEN0WUdMbW4kaFpJYV9eKHlV N2IxXi0zWDhEd1VMQXhHRXFwLTswcmNVYVA8ODEqN0d3CnpCeXtBPGt2JWNI eGl1T0FuNX1XOCtiIzIwTHhReiFXX0I5ZDV8ZiZ7dVVkUHJfdW0rKHd+e3VH TiRxIzxLWWFYagp6S3A3NT9CeUFvOyRnJGFjRUYpU3hoTEElKV4lKXt+a0hL OUlERjRhUDdsaHpFMXsyJDFeeEtsdT10c0l5JUdMUDAKeiVVOXNCKHsyfiF2 Mksqalp7MzR8VHtgYVlOb3g9N2Y7QChue0M/SXU3KG1YTSllSDNtZEpLYUFr Nm8lPXB2UGBOCnpuIUJ3fEs3NkgpajZDLTVVRjJZWClYRzJBVjM1YWRPNjty K0phKCRTNENeczRAfj9kNXMmOGJoI3toQyhEX15KeAp6LWVYZXhIfUtlSDd0 IUp8WH1ePU5aMSNmRDs7e3pFdEE1PUo8YCNQRnxJe0JNI0pYTHRFfl52KDAw MVIpTU9idVgKelZSVTZXVnsmQy1iWSVjQ0ZmbE1LRil9U01GO3BAekl5NXNu RyZDelBIOTlhYklHSDZMMDAwMGJiVlhRbldNT249CnpJJkUpY1g9WnI8R0I3 YlBFaWdHUEZmbWp6R2RlVWhJeHNkWEZmfT9iRnZeIXp0TjtLMjA3KnFvTTZO PCRmKEFAbgpBQEJqYisKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4 X3Vua25vd24ucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFp bi9pbWcvZXhfdW5rbm93bi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u ZDVkNTRmNWM3YjI1Mzk3OGI5Njk5M2VhMjYwODI4YTE0NDM5NTA5NQpHSVQg YmluYXJ5IHBhdGNoCmxpdGVyYWwgMTA4OAp6Y21WLUcxaSQtPFApPGg7M0t8 TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0ZlApdC1zMDAw MjUKeiFxQXF1KDJsanliZ1IqWXZDKmMjKDgkZnV4Vz4+Xm96WXtnK0gkJHph Sn1QcSNwcmQhPVhrfkVlYTdjfiFzTDBuCno7QlR8c1MpdFJ4JUZ0UyopbyNB IVRnQl4yelVWQHs9cz4mWUtmMn5heVhRdXw9dVc9cFM7RmFMI180VXo+Vj9x bAp6Z1RteCN1RyppeCZ9XnNDWm4pcjAhMDlpdzx7K0AtQUZ0eWl2RShWVTxT KEAzR2A4aEJ4YUJ+KDx3ZCpaT1RGZSQKenpVT1BsPX48JUZTRTE4ciF7ezJX O314dnFSbHcoMyFSTDkqPnlwbXVUQjZmdnl5R2dnPGBKdm5VJkg4PyhDY0ti CnorNn03V1c1bm95JitMaUE8WWM3TFI+MF45c3AyeFY8VkwqYVhVNkRvJD9C SFo/YEUqdkZ0X0dsI19NcHg9M2QzPgp6UU5aWWZ6VHRoWShQNiNpMSpxWCRw d1Z9fDsocEhTZENCVSgkPFM1OD1eZTEtNjBHQjRzQFNsQCZ9cD5aVVomUEAK eiVqfG97PjVTOXViKytEaiU8NTtXKm1sNj1pcHVEMSF8MTVNJnx0O3NkZH1e Mnk1Sz4oPXhFNjZZUVd9eiRMTX5ACno9d2lwflhVT2JwJUl0ajQ/S1Yze3t7 UjMwMGQhSk1Rdmc4YiprJTkjMDEwcU5TI3RtWTA3dzc7MDd3OHYkIWs2VQp6 MDBIXypMX3QoWSRMLVZvU0pGQHoyaz4jWm0kJiY2Nkh5U3lIZWZKSmd3JHoo ZlJkSTE4Nm1QJU9lak9jKUdVMC0Kej5UaHAmY1RVR25XQV9MQmpxaV47X2pD NSM9WG93Z180NUVSMFcoeUNmVz1DNS1pR1dCZFNHeTlfPSVHbGFVcWktCno3 KTk9fWFnVFN4SF83QHJVSSt3M1h0Y0t3IXgxU3VePmpLbTZIaCN3b3R4KzZL eVgzcVM9OGU1WGZsPWpPVlVleAp6Q1kkU0ooREYoP2Yxa1lJR3BqbE0rUTM+ T3xNRmsqTj96WVV4fTtEe2x7RTYmdz5oaGtIfDRpRXk9SUcqdHI4fSYKemlS JClIeHUjJHUyaV5mNHZhXzRxeUNjKT1mRDZMPEtDZlclVWJuS2tSS2dAYXdx c0xBUjUmUE5sRjdwVmkteD1UCnpBQCNBX0cwKStyP2d1IWA4SXNvV1pjJD5y LWc1byFZRGRSdU94OEVkSSl5YT1mKDg0Y3F0ZmMwMEl0cyp6UGB7dAp6dkdt Ki10STUpeHcpeWFZXkpEVTVIQjFARGlYeVVxNlZGOXhwTmh1OWhVblUpSGhz Q3htYFRLMEdvZFl2OUFKPksKenB3TzhWJDIrenB3QChURnApUVVSI2NQPXMm S0Yxbzc1KkI+bj47VEI7UlQ2TXc7K2JlSHolQEAyK0M0bkBxM3hlCnp4WDEo ckIwZngtUExmXz5RazllQFNMNDRrZlJIcllqeHt4KlEwUztaTkdLNiNBPW5k NXY/NFQzY1JDJkJndygpNgp6Jm40P29aKno0SE55K3NMP3dFNFpDdUhRdT9S ZlJ9PWRhYDZTeUZOVj9PTW5sT0Z4ZzBLUz13MjAjPlorXlopPD0KekMzSG50 Yll4KzRXamJTV1ducHc+MDVVSyFGZkIxTUVpZkB1R0I3JGNHZGVVaEQ9Oy1X RmZjZm9CXzAzKDAzfiFxCnpTYWY3emJZKGhpWik5bV5jPnBwbkYpJUdLSVZ+ X1RSNUNMPEcmRExlSFkrZVNJeHNOR21zUDkpMDAwMDxNTlVNbgpHTFNUWTFu SkBiUQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfdXBkYXRlLnBu ZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3Vw ZGF0ZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTQ1YzUzZjgzYTA1 OTM3MDQ4NTViYjg0ODg4NzFlOGU4YzliZTcwMQpHSVQgYmluYXJ5IHBhdGNo CmxpdGVyYWwgMTA5MAp6Y21WLUkxaWt4LVApPGg7M0t8TGswMDBlMU5KTFRx MDAxJW8wMDEldzB7e1IzRGRCajcwMDAzI1ApdC1zMDAwMTYKelRVJDFXITNu QTJhK2Faemw5SXVYSFpyeTRiKjlIYnl5KGxLU1czWEAqUWlkJXMmIXEmPml3 KyZXNSgpaCRMTUl0Cno+fjcyS2I8T1BCeU1FaWZmN2B1QDxHcGotekpUMW5m ZDlRUGQoclJRIUdlVSo/JWwoS2d3eWNlI0R3MChoMkYtNwp6ak1WUG0kQXtt QGg+X0xxO0tfO00lIS0lVUAjRCokOz85aVklJTBAVXA1b0FyPGokWDwrd3RT bGtMQSN6PGtPSm0KeihWXnppcVU2Kyg9RiswJSlzcDdacXZoNjw9RzNJOyl1 cGNCXlhBITw9K355YCpRZSYlbWcoNTE+RGoyfis/Vk92CnpzcHtGYj5EI0w3 K1BDUTVuZDtyRD9BKkJOO0Z7fit0bkEmbz4pKTtILW4jN0l0P0p7UD9jY2xY O2pab0F5WHhlZgp6P0JjS087a0BrUXU8aGxzQDhySmk9Q2JiUXYrdzE9QGFE a3A9KEYkWHdlYVl8QGFlK3Y/NiZkaSNQYVJNXlg8bS0KekBXfE07cWpkbFAw MERHVFBFIUN0PUdiTmMwMDBTYU5MaDBMMDFGY1UwMUZjVjBHZ1pfMDAwNz1O a2w8Wk5YUEF5CnotQiNMQTVRUTxlTCNhaDs1dFM7VU1id0FfNTx2KXxmSXhz bTBZZ0N1RykybXZAQmFjbElwK1hETHpmcT4pbX1Jawp6YHpsfHVfbndLeEA7 M2lxSn1+KyRSNU9IZSpsZX45V19NK0ViKVZWKTsmN1pZckBNUTU3dEY9c0Ak cS1ZNnRPS1kKekZXWjxFcV5yemx0SlVnWUhXMHFZOUltZkJqK3N+YiR+KXxO cF8oRF5JMmE1YkMpKEB2TWxqTWVaM3NoRVJyXjRtCnowazlqOSFUbykkTjQw bCpkOzAqSWwrVSs4T3tFZUY1TXVuPlpsNlBIN154OU4obT4xU15Dfm5gaTMj IyFKbm0qOwp6aFYqTHFWWFAwNWdwaFhySTtCRUE1c3owWGxGaXpjRzBkYEh8 SS12ZGFmKVVpYGJ4RmpyQ0IhWi1gSyZGYDJfbEcKelc4SGVMXnUzJDR1UUxY QV5udVpYcmoyME9abVVEKypBPUE7VTBJZXBsTlpsMXUoUChkd3FyPXEpS2dy UUtASkNsCno7Pl5FK3BAPTMpcX1XcylsPSMpOTQwMTRkQ0tfdE8zPVRJemFJ cT5id3Q1KjMlVFBRIVZ7PjRjWFkyd0B2cGk0SAp6NXAlZn43PyUjNGBjbU8j alpHTHRwKlV5QCYzZDB8d15+Tks9b0NlPDFGY0xaLUdLUmZnaVFBUmw3OyU4 UHI7JVQKem5VZj0qMDhlZmhVPG8xaEw7QFdLUThecUE3Q35mTEhVc0crcFo2 KDNMQX15NFJaP3RASnZtODMoKENvfDxfUGpICnp8RHZqPVhyVUQ4V0NJIWsm c1IqNWtBfXYhcFNOZko2PElFSj15ciVVbDdlc3Rsfl49I1Z7Vk4yQ3BTUDhy OHdYcgp6PlQkYXtiQSVqKjVmUXV4byl8PmpacjF7WVJCQS17MUNKKkhvWklD Sm5Jb05DRjRMT0pRaSg8KkJgOSZCUTBkaGcKellvKEtEM3E8ZERLMzBKbmpe b2YqTFYtWlIrISMzd3FQeiNFYU9vKW1QTih6Uzk3KzIwIXlwPk4jbSo0RklV PUFmCnojSGRFeUl1ZGZab0I9cHJqTklgdDxlI1c5TVp4ZCk3eWk9Tik9VTEl eEF+dnU0YH1KUUFPdyRMeCZRekcwNypxbwpJTTZOPCRnNHpeQzFPTmE0Cgps aXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1p bi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF92YWx1ZXNfc2Nhbi5wbmcg Yi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF92YWx1 ZXNfc2Nhbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTViNWFiNDA3 OWNiOGUyYzAxNWI0ZjVmMTBhM2RiZjhhYTY0MTBkMwpHSVQgYmluYXJ5IHBh dGNoCmxpdGVyYWwgOTEzCnpjbVY7QzE4KTNAUCk8aDszS3xMazAwMGUxTkpM VHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDRmUCl0LXNpTWlXMAp6aHsxMm8/ bUBsak1aVzJFJmhMNTk/QCs/KFI+U0lwKTl7SmFATVh5Q1lSVCt4JUl1V2JA dE5CM2QoUTJHKGUwJCYKekB1PVNOakAwZ3cqNiorM145ODVqTldiWUR1SCMk OT5vflhOUGA+OT96fkA9UD1aNFlrWXNjdHMkbXh+Vz98UG84CnpyTlFLOG1l SWtGSHUzNio/Yy1xWDw2IWRZaHg2KShAOGUoWjxYYGphaHhGQCpAWj98ZDxY YHBjaHd8aUtfVW5oPwp6QEF2MjBFOWx4UT0tTWprK2JabmFEKD40VkA3cFQj PHpMdDhfMzdGdz4pUl5yK2Jad2VEKThKWV55T2RIPkdicEQKelUtamkqX3Y/ ckY+eGJMRGlQWSl6X1Redkc9PTFVMUQpUVZhXlZ9LTs8ekxhfl43UHkpX35s PnErJCM5eVUtfDJZCnpgc3wwIT1KTCt2XjctYXBgfE82eTw/OzMxRCktJGdf fXdZYD0zbVI/QCVHJitge3JORDxNOD8yRGFobVNgUnNATQp6PzFzblZAVyRm cntOYFclPzFzaFJAQjd7PHtONUAzPTNuPlNEZi08aHtebm84O09fbjJEZ053 K3p+QW48K3dBX3sKekRnV2tRKWFtb1MtdERjez1gPmFwMHNzSTIwZCFKTVF2 ZzhiKmslOSMwMTBxTlMjdG1ZM2xqaFUzbGprVm53JUhfCnowMEZIQExfdChZ JEwtYjBhKUxrKjI0RWs/bkZvbVJXX2dHVUt+WF56N2hGSVFxb1BQeVR1T1FO VX1nezsjWWp+dQp6aG0/SnElaHl3TXwxfjVNJi0kLWJmflA5UUFAQylZRCEj JjRCJGRoSl42LUhSbEs+PFVEWmJAJClIaXxlNmgrYUkKejdsTCNlQWQ9NWp0 QyYjTFQ4KVhrNU07Qk0xZyMtZVZfNk96WEA9dWttbHVMVTBnd31lNndDNk1h Q356aE0zQz8jCnpYcFU9cVZBMzNuQTBYaWloNEZZTzV+TiVQX2VTM3FNNnBN Wk4oSUVzMWdPX1IlKXAhcHEkITRKIUJ+VzBkQXsqVAp6VV9odGk2UHxDUGFs KTEkMjxfOz1iaTBAWTh3Z0dJPUk4aE9tO3xrJUZkVGwkPS04SEpXa3c4bkdg YkZxSUZ1dj4KejVte0FMZyY+cDNienBrdSk9KkpSbE8pc1ctTX1jT1g9KChT JitpNmlyZkF4ZEFkNXhwel5xb1cxTEc2ZTdEYylECnpQKyk4dTZIKVJmYCVf QGZNMygjd2M7Qm9qJWptI3R3PzB1LXluKWtYYnVCdERYQS1wYmheYHl4eEhK cjcxMX0lRwp6LTN+b3w7cihnKWRYMCYoYntzMkF6flNoKyN7O3BNUSlfRjNp OT9WaXV3Qj4yUHdkVVdTazhXYkt8SkdTRU97cHwKbjhfVGpiQGIpd1FZayE/ KntjKEsod1NKaW1TZEo2KDAwMDAwTmt2WFh1MG1qZmloJWt5CgpsaXRlcmFs IDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leF93aW5kb3dfYWdncmVnYXRlLnBuZyBi L3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3dpbmRv d19hZ2dyZWdhdGUucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmODU4 YmUxY2VlM2Y1ZDhmMmI2N2Y1NWQ3MzBlNmQzZjQzZTliNDIKR0lUIGJpbmFy eSBwYXRjaApsaXRlcmFsIDIwMjEKemNtWStFWDtqbF43UkNjODNXfW84SUhO KlVxLVpzNExSQ2JJNHojOU5MQEVXTUFQKFJWdFdfSlI3UFZHTlJSa1FoCnpu bjxaJis0bCY5b2cjdlBnYWlebzJubTQlTGRjJX5tVmQkKT5aSStiSXA/fGVJ cnA2QmNmWSpueTs8UjVwRX1yWQp6dyNRJkY0KjI4MjVmPUNUdnNUKyFgdEly TEtWbVI4bkQ3JilMbzgheWl+S183QFcyZWpvYHJ7SVZYZ3c8c3xfM18KeiFr Ql5qPFkyRUg9I2xBcldJKHF9fDM8RVZHWWotNl50fiM1dU50NmhmUE85NXJ2 di0tQU9pcklBVChlUjFoRjcrCno1UWdZZGtVa0J2PFBjQWQzQEtveTlPX2o3 e2QjfjJmQ0NtbTtPanwhdyo9XnMwPS1pfXA5fmFlUF9gd2VmRWNyMgp6cEF3 YGlmd3ZsZjM0Kk82WlRxO2tVOTlWeiZ+WXVSUjRfe2s0WDdaZDNTXzlEZWxe JVFybEFRbmU2NHx9S3t5KGkKenQkfjxZPW9NZEdGSGtwJkdfTks0RilobH5C MTJrdVB6TWRASyEheWkkYmBVWm9+bXw0TWRobzZJI2klRGpPcTxNCno5V3R6 a0llTkhpU1Y8aktIO2lmS21YX3p1JU0wZFpyVmdzKUQobT1heT1qcmpWbSpI Ul99M1JOM0pNRXYrYE80Zwp6Qm9ZWE8kakhkMz07JXxZQjkwekMlRjtzPlR4 STMzdlgteFVCfmFIbCgoWXRycUB8QCVVKTlxWTQwPURxLWB+SFMKenFwYWQ3 JiEwYVpja2JOOWkoaEh5NzhhSjV4eEE1cGZQamdxREtUT2sxbUpSeHFKcGJ2 OW9JczBPVDV1aEpSVXl8CnpxRkxHNUojWG5zKUJGJHNtdkkjM1R0IXQpTz49 QTg7X0BIazVJUFBTTUchaGBvUyFycCojSn5NcU4qRUo+cCUjYwp6VXp8Y3NC T3Q9RFAoekIhVlp7dEc3YWtyaU1UfGxTNituaFQwMiU8R3g+MSNCJHQ7RzlW I19LUjwkXzR6JWFAKj4Kem8qb19eTEt0Tk1RMGI3T1lmPik7am9ZX3hoWm1P a0FUcCptSmJDKWA/S0NKd09kPVFzNFFON1FxN0RFbmg4MTt1CnpSZTVFbFZi TUhpSHM4S3xkamN8NkBsPjUlVHx4a3JEXis5KVdwUjAjSTt0ODNBPipSaSNs P2pTIVltTX48U0JVJgp6IVVpRDtZI2Y3OEs0Y2h6O2pTc1kjOS1uPUZiOUZU MjszcGo0WFItUWZRbihgRnBMWiUkT3dXbzItUTVqZnNZc2oKejFfUmFkYHMz UXhOditVOzNKbkdraXFnaDQlQGJPUShLdndgZCpsRjk0TXxOVil9Y0pxQCZ+ TF5CZmBHRzFTeTBVCnpFUTgmWjwxcitRQU9FWDlWT342ZiFLflBkND9jU09j ejs2dEtVT0FNZWUlSCRqTjFlMzJOJC0qcEhFOG9rMX5FKgp6RT5sZDsmZGV3 YElYWElUIzl9d1I9UnxxKl5hPVRLKHlgR1U5JHNEP1c9KGZyVH04PURIbDZO Wm9zc2UzSHIkU1gKeiVjQGN8NXUxSUozNFo/bU98LVBzX1lSPVcmcnBaODRp MFRPSVhTdHhBKEB+NUtzWClnJk9oTnBkIUNubkNPUmNXCnorcHRUc24tSEB7 Qm9xcUEkM0B+cF93UXB8PyM1O3A3Wj9BV19melJkPHJfTis4bmNVQEokcUpO b3U4bEkoTlZGPgp6NlgpdmNUSlNKVkF3bGRQcSNxZHludiUpMVRDTVZaNEJ1 KGpJe3JySW5tYzlnSk5eOUZCVFJQMHlgTyhQOTJqVzUKemRXVn1eYVp5byV3 WUJ4dDxTWWp9eVdIJEs+LU4zZGVlQTNASXl1PXF4dGZnNiU1fWdTUXlhS3Bw JlNOI2ZIQX16CnpXTmApdWFsMjBCPzJkNHZiZUVPM21oM0V7djRAWF4/KkE+ WXFwMEQtLWBtVUQrWEpkIVZKa3trY2FZbTx2UEpISgp6TjcleCp5MVJYNEJe TWwlaUkqO2RzPVgxdFJpKUooMlB+b2ZHbkNSNj5nIWlISD1efXcrS0ZITnpP eFV7LWkqYjQKelFKeksjWVB6eUJqOU9kISFpVXNUQk8pbzluPnFRdT1WQmM/ JFZCJXdTbkRRNjxDV0goVS1BVzVQZVJ+RFFfVnBWCnpXcEF1NGVAOWpiMyNs WFNpNj1ObWNAam5pPGI1Um5hTW13UHBfSk0pfDJATzllU31AUEU8fkFJZCNS fUBae1BrKQp6NV5IYCNsVCEpWmA1eUxVMV5Jci1yNiV6O1Q5fH5FPForemtT d3J+dFVybzlAJClmenx3dUV5Ri0jO1NUMWc5SykKej9uampWbVkyVWUjbTxV JmFJSyk+XzZGfEtyI30hTFptZHE0dClFJSZfK3xlRjl4dSZUezxNNWtibSg9 UytUNjctCnp6bmg+YWghd1lteHxFWTZVU2VJNi0wNSNvbDBXX2lyKkt0RC1i N3Apd3JIaFdSMGkhVkNkRXFPdnolJGwkO01OKgp6NWVVdHRDa3cza01HciQq cnlyM0ljKk1JTkF9dEl3bXQrUWV3fmtBczRiQ01ZX0FTXm9BVDhtYSZxblVO R3xOaXgKem83Tmt0REkpdDVsISVDaz1xNWZUai0pI15hb3Y7WmAyMXsmY3Ju VkBHV3p4OXVWVF9+e28lUGdvfHFMR3M7YXpCCnotUXNpeXBDbGQzVW96PjFS ej5TeSNITVEoXzJMJHZITngyLVAjU3wtb0Fod1k3TjtPcntBVmV8Smk4Uypt dXJffQp6VXRhP1lhYHR8VURAX1ZKT3p1MnVgYE1TQ0wjdzwjN3BDNGVjSC04 JWUqT0ZSdjhNSktvbSZtejc/cGtfQ2VUKD4KelU7ajxrZ0I2O1g8JnAmRGMq bmBZQms4RDBMfUgoezwyQWUpc1pfM3Y9N2RUczcqUzRmQUxvdDFRYDN8Q0ZI MVVhCnpFdj5zcFprVVM7SXZoQjAqVlpmYyoya1IkOCRxTVYmR0ZgOT1CYmBr WVE7SW5iUGNJPGdoS1VsSEMhYyQjTyhfcQp6RjN9X1BpRTtmY3B0Tmd3OT0y KVJ4fkMwOG48YmYtM1NTNE0mJHMzM0NkQF9heDg3PXkmJU4oR3BCdlhyZSMt YVMKemdfe2h3OWslOGhxVWZyXkdpK1h5T0ROZkZvQUtgNXlXKjdYI3B5MDln S2FSYXJ9bkwpe1p6S2lheG1PZUwhd2c/CnomITs4QEJ6JSkoRl5zUmJrMmxX ODd3N0dCK1NmYjRaKG8zKS15VSFPMEJgUkRkRzQ8TjJWQTxHTldBZGYtKz1l UQpjemtvbH0wcDFffDRHZDVzWWIqYzs5fSpUXmNQdXtSZjdzeG9feTdPXgoK bGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfd29ya3RhYmxlX3NjYW4u cG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhf d29ya3RhYmxlX3NjYW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1 MWUwYjNmNGM2MWJhMTY2YjY5YmQ3ZjMyY2IyM2RjODQyODQyOWUKR0lUIGJp bmFyeSBwYXRjaApsaXRlcmFsIDE5NjUKemNtVjtlMlU3VG5QKTxoOzNLfExr MDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwOTNQKXQtczAwMDFx Cnp4IVgyfiFFZXAoTEF+aWt6VWcoJj98SVBnUU5ycH0hcz1KVT5Wd25waVBp OUMkbjB2Iz5+Nn5KbC1UaV4rVk9uTwp6P1NSbmpnVkY3ei1TTWQyQHtaSypr PTU+Iyo2KiszXjh9fmkyJm0jbnp2KWZFPUArZno5azFoQyNwYDBuPm9jfEcK eklKZjBKeGFEIW4/MEMtWFBgPjk/en5APVA9WjRZa1lzY3RzJG14flc/fHFC NHJOUUs4bWVKNWVXJVM5fUBWQ3RHCnp3IylPISpZMn4oP3l8QDYjTUpEdCNx NilkPzVATWAhT2AhKShDVndlPjhpaSh6UnV6QV92QGQjPlljamtvVm4/bgp6 eGJMKmQ9JFc8V242JjRZdipuYnA8ZFV4SXQtfDd0c297Kkw9JX5FYz5oPFpJ eGFwZD09OWFTS2sqd3A4dEtmPkkKeio2SC1gdzk0cTJ3KFlVVD05UkpLbCg2 NTRxfkQwNj1CMnJkS1QlVW5QZXd5VGx5cldEWkZWfDNJKEkleSNHPFp0CnpX TkwoS2JjQXR1TF8wbFFRQnxqYmopR2Ajej9gVVRKeEdDT1pmUlUjcGd+dHFN b0ghNjw/ezBLaUhWOC18TnBTQwp6dSlWIyNSOCY7aCp3fHJWVlYwSmJaKk9u UCVGMVVeU0pkaEJxb2Jvb01AUTQ+Xk9ablVlMCtTUWV2M3N3S35ZRmMKeigm ektNTHRuM2psVXoodGI2c1JsTHIyYiVxKXx5c2VgMEZUPUpMK3deNWM9RFZt KEVHS1RnaSZAQFpPTXdVKGdCCnptOEZBamIpJFFTJnk9Umo8Pys7PHVZRngr Vz1+aENMMFZ7NlR5dER3ZHt8QEhlM3NkbXM+fGZAakJhPGhaaUFDPAp6YyhP dVYlSCMwSjxNN0kpdkE+M3VtVUBEV2EoVHomQFFHcTwjXlVjekozeihaQDVQ YSEjZFZDcjtPPWx6VGUqanAKemlEYDEjZVYxYHNVfWpUVD83R1MxcHwkRl4j cDBmXjsrP1NKb1VpRCMhfDFaWC08WWY0bSNYSGx6dml5SS1JYkBeCnpsJjlV M3JzUz09PGcyPmRrKSsjQHFTfXc1PEV5eTktfHArVSRLIyl+PERSbk1vMzd4 UnQ+QnJnPWQhQHdtWnsjQQp6c045bUkrSy17eWotYXtRP0JTZlMpXzlXRGNh WVV+a0pFQ0Qocn01O1pIQ1dtZ3dKYigmMWl3bVhNZnBAcDQ5MnsKenpUV012 KjZHLUxtRGhUZClPMyF+Wi1+eG5nM00tcSZTYD9xWEBTfn5xMmo1d2VCa1Nq MDAwMDFiVyU9SjA2XnkwCnpXJmkqSDBiKXg+TTB1Z3kpWClGYDAxMHFOUyN0 bVkwN3c3OzA3dzh2JCFrNlUwMFktYUxfdChZJEwqQVBSOD5fSgp6I182VV9I Y3g2YypnUlNCSGFyPWBBVGNVSihIdDtzYU8lN2lHJEZlOD9sO2BgdUhHanZI SzlOKVAxSD0ydGs2blIKemdPVW18cXJkP3RMP2wyPkFta3x1WVQtRjJERExn aVRDVX00XkBzYjllYyF3NXtNTlU+e29Rcl57TGFeWlReOShmCnpJXyRtPjts ZlV4SjZ8TVJlOTVKa2JyQ01WOz54Uzg3T3VKV3k2Yk5jWnRVOHZgJVF2UnEq SVJgSHtULU1kUnh6KQp6dytuYU5kRHE/ZDI+MEgxe3tzJlNVMz5MPD13YWE7 c1hXNEc/eSYzNWBrUEd0XlpAflpmcT8tS1VeYmgzTCtfeFYKejsxQ0UyP0d4 NCk5dTFGKGNub3hpc2I0PTZMam9mc0JoNnMkfDlJM0I1Y0szeihWQGBpPjZu LVM1SSEoQWM4fiFYCnpKaChtYk93XkRkMiMkXig4VlhAQyEtamBMTH5MQX41 ZzlSfTRlNCkmWFFQSVU0MkRyZHBMOyRHMWBIY01GYWlkfQp6ejN9Ml9wVTla ODxIbzs0RUg2KFc2WE8jSW5LVV9gKDBYTWBCMXVYanVPfENLVUs2RFI4TGYj bnZ8QS1haG9UQFkKekM7aEx1UEBTcXJyY0dtciNmbysocyQpZV9NdmQ0fVJw PilSSCRAengrbl9SaUl6dilxXnIkR2dDOTR6VipKbnIpCnpONXEqblI4Ynlw QEdAJV9MKkI1WFEmaUR8dldBfTdzU2IkXkNNc3oqK1RWUTNDaiNqZGE3aWl+ dVQ0Y21uSWJtUwp6RzdRTF5JVUk/JU80MngwNjRPMEBkNl9BUyt6WXg9XnZL K340NEZzR3NCYiZiWU8lQyFPbmIrSkRuJTRAcjBTOVIKel5TTWdNTTYlI3Iz clNrSUZxN3I3RDNmRl4mTDlnQ05rI15sV0tkYk1nZkUjVE09Yjl4Q0dYRSht UFVVclB5VD9jCnokb2kxS0grb3NRa3xMNnVDNVBIYThtaH1fZW5fWEpHa3lH dGxmNzI1Xn5rREtmMnReR0JiSWNMWDJULTRxTl4yZwp6eyE/WjNZVlBHemlj RERNViN6VXRlbUp5JF9CbGdsdFQ3O0sqWWJeSlF6WT5WNGVnUlRsQEdARG4+ fmdOQ01DPyUKekJrUmB2dCtITlpDKXw5cSl7YSMrWX5hWTM2aUlXQDEyVzM9 dSFrY2dtM3Z3R0ZObVZxYktJS0QyZVkmOEBWVCt2CnpUI2slaExCOUdyZHQq KnMmYz44KVhjcGZsdiEyUnhGey1wOC17dDQkN2VLLUhufHt+fktOYzRMXmZN RntaYHJ5SAp6d3dMVkt4eXlqOy1wd30jdFVCeno1WkZeJXkwLXV9bStkUng1 Qm4+QURLM0pkJUYyQE11JmIpN1RCa3hVejVAcj8KejxwLXNDZDA3WGM/OWlg PTMhJFE+d3N0RjIqOE50JDZSTTZKWTRFbTNPaD1EM0hYYmBfQGBKcnUkNGBf JmBRZklmCnozTWo1XlpteHVxYHVkWXFQfkZnUSVCeHEmWkVWYkNEd35kPEk4 K1hXTypKKmV1JSlAS3Ree19SSnBGcSRNTmE3dgp6JUZ1N2pwTCVLVVZxMj89 S2RNYHgjcTBJOT1yYDdTamkxZk4mZSM4fCZIeGdRMmF2eGJVaXR0NDAzfiFx U2FmN3oKemJZKGhZYSVFdzNXZEpmVEYpJUdMR0ElR01SNUNDK0cmNEZoRyVH TVFJeHNMZW5JIz9vMDAxUilNT2J1WFZSVTZXCnpaRXN8MFdfYldJRmZsTUtG Z1l6U0Y7cEAkSXk1dm9GZzdiTkg5OWFiJTltQkYwMDAwME5rdlhYdTBtamZv bXZjYwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhjbHVkZS5wbmcg Yi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leGNsdWRl LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZDYyZWVmNjQxMGQ5MzE1 ODU3ZDJlNmQyNDY3NzBlOGI2NWI4ZjQ3CkdJVCBiaW5hcnkgcGF0Y2gKbGl0 ZXJhbCA3MjUKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF4wd0IhNjM/d3ls YEdYbDQ3eXwtKUxSXjh8d2l9PHltVHZWd19RclkxCnpMQzM/ZF4qVURoRldM QTF8OWApd01gS1JFYnZYUTVBLT0oNiU5ZlI5WmhVXzZeNF5wd1MyOGxMV013 Xj1IUzU+PQp6X2lzTFpQMTxAJXdRYFFqaz1LJSpuTmdHMDlKcUFuWSt+Wm0o JGQkZHNaVDJeRX5LUX5lKT9Mc2Q2e0oxTGBrbyMKejhRWUheWHpoQVpTb3JW UHVQKy1tZHx0QlQtYH5IRllpZj42bmtKUHVOdXFwP1lJT0Q1NkliXjhgclY2 K2ReSzwwCnp6a21QVXRYUSFwR0ZxWiFoR2czc3dlKmc0WEshd0lhejVxZV9I ZkZTcndiUXVeQUNgMFN8S0BRazdVay0qfmhQTQp6RWhzcTw4Mkk9MT87Qkk2 VWhWMW1fdmc+U0BiSW0qamdrfDBORz8yT2Y5UiFUXkA3Q3ByJXpuRXdjNX5W bSVzbHkKelVFUTVOS0M1bCpjM3JxRng4UXsybnJuN0A5P0E0PHclPjUmJmNg M2Bae0ZPT29WOzlIZHhmczwhSk00T3g5PzZtCnplbldmQlckQTRYWT9oellV VUhePGBCdjU0UFhoV0RxQEhfY3dlZ3gtYW82RjdBMDVDaldoQEV1M3ViVjVi fFZlTQp6TiVENGc7Yl4tendGPTFMRWJ4ZGQyR1NtMj5+PUVTNCMtJlY+RWFr N2FYQzVSMDdIKlkyR2JkeDQ1bD9YWitMaVEKeldNbVl+KVdzKH1jPXF0PVZ7 cml5QXUmTnc7cHEmVjkkdWNPUG48ZT1RZD5oeXYkJlpoQjtASzlRPEpTKk49 dj9lCnpJbXBEOz01fGJOKnxNfV8mJX54QkZsdUtATV9VSTZTNFhxRXQ4Wng3 K2BXNEM/KUslPXhBKDc/X2MmbSRWNHp7NAp6VnEmNldxaCFSVEF8TlgpRWsx dzNqNDUqXyY2PnQxYm1Cd2BpKi0tNHFQRFdNJTduPz48dDJWez1Dak57VTFW KXcKelYzLWp0VUhVYWl7eHMwKHN3Sil3QmBKdnxzYURCRnNYJlVzJGlVRTAq OHFyMkxrdW1mM0BvalRqa0ZFU3RQQml9CmhjYkspSVh2b2JeJHhOJW50enB+ TUp9YU9HMjJXUSVtdnY0Rk8jcTg5SnYjc1oKCmxpdGVyYWwgMApIY21WP2Qw MDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vaW1nL2V4dGVuc2lvbi1zbS5wbmcgYi93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leHRlbnNpb24tc20ucG5nCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAuLjQzMmQyZjQ0MjMxYzFmODhlNzg3MDkxMDYwZWZj NTEyNWQ4MGVmNjQKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDQyMwp6Y21l QVNATj8ob2xIeWB1VkJxIWlhMHZwXjB3QiE2Mz93eWxgR2JLfVFHaWN+RTBC SkR2K2NwNSRRdjZxenJWazcKelczJjlAdnpCaWtgRzVIb3xLLSl1VGljYzIt MUdrTkd5VTB4JW9vPzNmQmVkUGFrMWduSGxyYF47KHp8aXpPfktiCnolbG18 MXpqSSQrYk5+SDJ8TW17bWNNcFI5ezMqSipTPmYzXmA7U2l9ZXxecFFgPXtq RVREZEUkI1F5eSlkdj48JAp6fEtBR3N3eW9jUXdsYkNrYDJ7bUxKaUN6dzxa dT52TD4yPlM0PXtFK25RYUdUPGFvTGBoRGNvUT9mMndzUCFNMm8Kejdse2VE USt+KGN8OUBCRTg0XjFLeDM2MWJZfEJ1YHFRYi1KNjJEQnhaXzxwNUJFYHB3 bmF9Nnd4cGExJT5lIVZ6CnphaGRVPSpYJkVTRk9wSkUqJjtlKWBxZDMqRHBh VDV1OUpETFMlM1AoKGspQDxaYmFMelYraCFPZjQ9P2BLSzkycQp6PTNmRUBs NF4tLUxgaDB3TnZjKEhRN1Z2UEZmdVNTJl4wdkRIODJiQEdPI2krd2xYbypI WlpqXkZxcnBGWnh4RCQKby0yOVp4dmBVQnUxNTI8NXBsVEI8MTJjJCpRYDFB JjA1dmRweTg1fVNiNHE5ZTAxfWsyITJrZE4KCmxpdGVyYWwgMApIY21WP2Qw MDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vaW1nL2V4dGVuc2lvbi5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0 YXRpYy9leHBsYWluL2ltZy9leHRlbnNpb24ucG5nCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLmUzYzUzMzM0Nzg4M2ZjMWRlYzczYmNiMjFiMzJmYzU0ZTNj MzE3MzIKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDk5Ngp6Y21WPEEwfmBF X1ApPGg7M0t8TGswMDBlMU5KTFRxMDAwbUcwMDBtTzB7e1IzQ0BsfEQwMDAw MWI1Y2hfMEl0cCkKej0+UHglYGNPPCVNUTJ6TGZfNkk2Jjl8emRkOTk+LUBh KjJtIUp1bmg3Til8YlJmfC1ieHx6VmJvU0toYV93KGxHCno7bWMtTDRYVlZj UWpiKVIhSW9OPlVUbTZjZFRsUCspNDhhZVlfRigrIXF2aClmSXEkSSRha0BR TTFEZW1iMnAteQp6Wk5JcGclKlU/Wit8MGVVbVI/USlAI0B5THRBM3U5WEZo djhtZHYwdGJ+QyFPayk0eGNrYzNXc2E0PyphVUQ/cEgKekBhZlgtPDtzfGdQ LTxIZWN4V0xJVE1uK3t5ZSlEcXtRTEwmYDExTW8/RGc+QV5YJUV7O2xrK015 NWB4azxKR0MpCnooVj9KXlBhMHFyOSVVUlVaWVhKfWFIYHxFWHNkNz1WO01r dktIYmNpc0Z6bllZOSplQHFzaV5rcTBwK2M7a34hIwp6IT81TVBxdjVsaS0+ IzY/cD8xTkFhbGUzbikwTnVEa2difG5NUSR2RXd1cjspJlgoUCVrbExlKCpx d3NibjAoWmUKeiYlbHFCZysqM1MxWlk/ZG51dFRJbXJ7R05mcHlaMmV0a005 WENOcVRDdHI5d2loVk9BVjtpTl91NkQoVEsjeGNmCnpUbmB2ITcoYk90dzRg Yj1YQ1E+TGh0PWBpdDx8KCNtdFNGP1c8UVFjbSQ7VD5tMUJaO0cwKlNVeDgl V0d0NyY0Qgp6VjNEK3RiOFJJd2dGM0x1dSNiTl43RzR2PT0qeVZScC1fQGtq bWVvU2RvYUchelN6V3YhS2BVSFVLQyFNVnVaU2oKemFJQUpWZHBBeUY5dnh5 Q2xoJmcralk4R0dlJHU7a2xZdW91VEAqaVZEP3cpPlk7N0VzZWtWQz9EUlIx Z1pfdFFaCnp5S3Y5OVpPeVl+ekB9ODRoQkt7X0pIbighbDZmTFZiVG5oRlpm TVNmViQ2THVsMHFoR0MyKlo/TlA8VHZoQkx+cQp6VUJ8MGMjaXZjY3BnKVJv OThHI1dUKmBQPiRhNn0oVzsyPmFJO2x9V3ordHxmSWVsamxTY0ZTZnJlYVhX WiVmMiMKek1aI3R+emc/a15PT0FVcGhJMSo0Y3IzVn1RbnM4JmlnWTFAWSNE QFk3SD9iJFQ4VUN0c2JuXzJTJWkyIXJrISloCnohPkVhTUNjdmFteVI/KFch S0s4JHFGPDMrOUJDYUFVSik4PDlYNkxtRXNzMURWLT5aVEwzZTI9OEVQOSlo ZmF1bQp6THk+d1hFUnNFZHNERW8oM3ptRSRleGBqc3lJbUcmNz1MT09mb2x+ VGNPKiVJTkVtSiU3aX1CfFlSbjElMDAwNFcKelFjaEM8SzwzekgwMDAwMVZv T0l2MEVoKTBOQntyOzMyO2JSYXt2R2Y2OTUxVTY5RTk0b0VRS0EwMChxUU8r XlJXCnowfi14RzQhJkhCRjh9fWxSIUt4YlIyYjdeVT8zajJ4UztWdkxYYnR3 VHp+PjBXPVFoVkEpeUhfRmtMe30xO2h1awp6cGFLQ1FLekA9N3Nge2k5N2kw QHZsMlRTOHcxQzc/UiZHN3k7KTFObTw8T1prQ3tBLWg8Nn1BPENqYkRhUDhx RGUKU1JfNGU2MDAwMDxNTlVNbkxTVGFYLV5MMzcKCmxpdGVyYWwgMApIY21W P2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGlj L2V4cGxhaW4vaW1nL2V4dGVuc2lvbnMucG5nIGIvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9pbWcvZXh0ZW5zaW9ucy5wbmcKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMC4uZWVkN2NhOTdhMzNlZjU5NWY0NDhiODYyMTE2OGQ1 MzFmODZkNTFkNQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTAxNwp6Y21W PFYwfHh3d1ApPGg7M0t8TGswMDBlMU5KTFRxMDAwbUcwMDBtTzB7e1IzQ0Bs fEQwMDAwMWI1Y2hfMEl0cCkKej0+UHglX2ZTayFNU154WigjXk4zcD9SJk9k K19ZdSRpYmolVF42Um9yQiNibW4hMV81eH0ySmlVSDl8bT1pJHB7CnpSdD43 ZXNaeChya0hNQiZtfGtwfVlrRi1pK1M5cUhvTlRZQ2Z4XnxvSzdjPkg+Qng3 bmVNRWpqZk85dlpuUWd6Zwp6bmFzem8tYHZjLXd3N0tfMHJCZUF3eVM9Z20x alBDSmVKSSRHaj1uJnZ5cSpYVn5+VlNlUSs/R2t6THUpdisoS0MKej8mWnB1 aSVARD81X283SzVMKnRlPEdkfCRFJlRpVWB9cCR0X1UhZlc7UGRSKz4qMiFh LU1aJTR2ZzZnTTtMKUw9CnprNTN3NDc5TTNCRFErbGZzQm8mfHhvRTMhOClG JGpkX0xYR241ZFVtSEVKY0UkKW1+Yih4SzMqdipFcUI9ZmtrJgp6ek42dUBv IV9wSSpQKFg3Zz5rPXRmNzZ4UCRkSWo/U1ZlOXVnU0xwbj4mfStsc0YyI0Rp UClXail8aDxNbGg0NDkKem00IXVDUHl9ZEw0VnM4VXRDdiFIdjRNNWNqZWRQ UEN9JHVqWjZ7eE5KQm9jWEJ4NCg7KXZrOE1oZF9APTVuSy0jCnpXZih0fE8w PVlFRj1ycnp2eG45MyteeUJMVCRmKkFvQFBJZU4wKyNrV1IrdXJjUU1jSipT Ri1zVCZybmZsVkZqdwp6a2FLTSVHPW47QCQqXy1xSVRsX00hc3lHRyY3bnx8 UkVeMSpEfDt9JCk0dGZtaHJ6NkFJYklaQW5xcXt5aSpUJVYKekhoVld0Vjsm dTE4SSN0ZElFX05wemticlljOVZmTUx0UFg8Wll4MSZCNVo5T20zfThWWjdG aVBlczlvLVREeCUxCnp3ezZYe1d4JUZYb3JXezVrfl9rck12ezNWTXN6ZXx0 IWArfWdKUjVtSGorWG5ZOSgtO1piKlZoQ3gkYzF1VSpIaAp6Um1HPUd6QFJe aGF2VioxSlkzM25SPipUb3lrO3wrTUxNWmJLKV8rWG9qSEFINW08eXZSO0ZU NSMmMWkrWURMMGsKekpISzZfazR1aHdHbHB8MWkrQykhcGk7SitNflpZSWZA flJ0WjVENF8zMGpGI1I7Z3EqeTsrMktKKkomPSRpdHxLCnpidGJeMVBySX59 Iz0paDt6TUB9fFRed20wNT8mRCtZOF5KME1KPG0hNmtgPiZuTCY0SEM+ZCVT UD1gKjRkXyQzWAp6Q29HYVpmVCh8S1NfX3RaQjdVWlFLRCU4T1hjJktMN0or TE84K1JtMGY9QyF7OVQjbUo3VURGRTAwMDAxYlclPUoKejA2XnkwVyZpKkgw Yil4Pkw7IzJkOVlfRUcwMTBxTlMjdG1ZM2xqaFUzbGprVm53JUhfMDAwTWNO bGlydStYRVhCCno2Q3AoUmJjcH19MEIlVntLfnh5aVU2OFIyeiN0MytuUyh0 dCEzfmhZXnZHZzQyRkw9YEVFTk5tMHtNITYteTE7KQp6UXhGYXp2TF9jSypi PF9va0ZnMGQ4SGMjVj1FaGApaCt5Wm1wbGVobmxOWkVkdGdRQGhYMENOZUlX RXB4dyFveU4KbmRjfnRzcDlUbGlkT3pPQyYtKSp8S0gpM3BEMm5ncjAwMDAw Tmt2WFh1MG1qZjxLTlV6CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9l eHR0YWJsZS1zbS5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBs YWluL2ltZy9leHR0YWJsZS1zbS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MC4uYWNkNDNjYjhhYmFiNmVmMzhkYWYzNGZmNmQ3NTQ0MTUzYTExZGFjZgpH SVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgNjEyCnpjbWVBU0BOPyhvbEh5YHVW QnEhaWEwdnBeMHdCITYzP3d5bGBHWGw0N2BYI3tMUl43ZCNpYEdgJmkkS217 XiMxTwp6cEhBSSpiP0A9PlhWMEhNZC1tKztqYn4qJFVsYDFKKFEpPSleWFkk OCRBMEdAXz9mKShUaUItMG9+dTlERWA0aF8KekAzczJPbSg4ZERkSTdtaC1m R056OEp4SiQoUnVDbD4kbVVTeUxiUW97WVFAO0olMFJuPjlUOSltS0E5ZSpC di07CnohcTlrKnk3c31jXjYzdkFKT0lrT2Q4fD5AKnFAZihjbFlreVd5X1hE TTBUcmJvXjxuQXNjVWRoUyMzc3BgXjVGQAp6KlN+dThEbHZKTnk3cHhpXntx UjA5KUoxcjw/R2s0JiE0fC1XViVzTlcjIXk/WWFebzhzQT9XN0VMIXlPPEh4 c2UKei19WDx+cy19Nj0oNzFkNHtEbmBTSzVjQVRzOyslVlU5PGJkaUw7JVo2 SSl0VkokZHJ2JjZfdDU5PXZ3PCtFclRDCnpRd3tSaDR+Pn5HYyVKSl8wMHN3 Uk5zd1BLZ1R1Mk1YK1JFVmZrJEw5a29FdiR4MEJnK0sqamA1N3NuOFolZ0c0 fQp6T2FAQWY5U3ArOCt9aElDP0NrMnw8fU1CRylCRUVjMHo0dklMez5HcV5R YjgzREpwU19QTTk9cDs/JjlFMFU8JGMKelRxezxyVEE3YFptSEUyQmZ3a284 N2hheTs5JCVsYzN6IyspNitJSzE3SXJQb0VQJkI2K1BhJEVUfEhlcWRffXxU CnotUjtZI1p7Nk8lVU93YzJ5fjJnPSEpaDg5RGs5Skw/cmtYOFY2N3o0YEI5 NihXMillfWk2MHZSZk5vUFFhZzhXUgp6TmkwZFZOLWp6VFFWZDIwaDZjS1pN IUUpdUF3fnZQQ2RPN0tDZld3M1J0NSRaR2dha0tIMDApfFdUc1VARyNGVGQK Y0hHb3VHOEpJeWRvU0dpRzJCPzktKTc4JnFvbGA7KzBMVlFIP0VuQSgKCmxp dGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4dHRhYmxlLnBuZyBiL3dlYi9w Z2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4dHRhYmxlLnBuZwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZDg0MDM1ZmVlYTYyZDUzZDQ1NzQ4 MTE3OGIxYmNiZTk2MjJmODU2CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA3 OTMKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF4wd0IhNjM/d3lsYEdYbDQ3 OzZLM0xSXjdkI2lgR0dGWmBjJHtgYUVHCnpVdzdTamQtNDl1YDtWVkxlZklw PnZ1QyMrSzMjTH1kR2Z7PWRiM30ycGEwKV89M217M0tjJEMlPD9RPkJ4Wl8q Ywp6cnFBQU1KfiU5WVhUSVEjP3duVUBHaFZpeWBKMjcoaHZUdyRXKChpdyZV X1l+KTFIeUZ7cUVobl93TD1oZkIqaTIKejJNLT1UZUU4X21xc05hUTh5WGlW PmlXJX16ZD4xVFZeR0wkQmpZTF57UyhXVTlvVnQrcHJYbm1TTkZaa20jPSpD Cno8akx+byVrPlRGXm9APlB5Wi12c3Q1Knt6UExmbGNVfF9RVT5hfEIjdVU9 SkY/YkoyY3ppaXBZXzNQS2FlKk9CJgp6bTglLXNFcWFFQilpa0c/bT47PXc9 bFBwQVp7RUlyYHx7PD56UDxeSERqUEprdVN9WT5fNUooekEzbDhlXnkkO1AK emNrZm9OVClCR24+TiNgZkRYUHFJYlVBRWVvM0VqQnM8Jl9KcmNJbGtLWXpZ PT8tNkNTd2NmdF9VJSE2aT8yQGdhCnpiQUgrSyREY29je2AmUm56SWBXRClI ajVMQUtrY2QpN0d0OWxUI1lpd043O1ItdW18Syt3djlMbURNKFRjeTBSbAp6 QCNENV8rdXs9blJXLUpEYzMpQUx7OFVZfEh6VnVkcSlCcm9QZyRyaUAkbXdJ TztkbW96KnJMRzd0Ry1CPl8hQHAKeiEmJUBGU3EhOC16fVczJXdqR2RoKzAo QF9NQjtMQ0xWXm47NC1aZHwmbCNPSElkNWQ8JSEjPlV2cXlvXnU4ekBCCnpG O090a3UjblNwMURCbTlxaHNjUmhNcU10RSlIPnlmdTUxQnB9dyk2JmNacWlt YWJqUUBAVnlvUzErNGNNUjw5Nwp6ZCM/S1VvSVJ0ZmJDQWh2Uz1jcVJaRHJz MWB1eHIlRmZPUFE0PnZGOF94SU0lLV9YJDItQGtQSXtDYkNrZkM3I1AKejJV OE9yOHptenhEPlhBUzR4SXklO2AxbFdjcnNfc3EqPkdXIzV6dSZJQ0Z9Ul5W Rz8rcn1ZYFFNWmBxWWtGIW1FCnpHRypHLUBDRnZHKXZOWThIK2VOKHpRbW9D YnhgWTd6I2V7dkZCWTBUZSZURTdmITxSc2FnOFdSTmkwZFZOLWp6VAp6UVZk MjBoNmNLWk0hRSl1QXd+dlBDZE83S0NmV3czUnQ1JFpHZ2FrS0gwMCl8V1Rz VUBHI0ZUZEhHb3VHOEpJeWQKVW9TR2lHMkI/OS0pNzgmcW9sYDsrMFF7PE8k XlpaVwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXh0dGFibGVzLnBu ZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4dHRh Ymxlcy5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzVkZmJkNDU0ZWQz MzcyN2JkMWRlZWI4N2M2MmY4NjcxZjZhNWEwMwpHSVQgYmluYXJ5IHBhdGNo CmxpdGVyYWwgNjYyCnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeMHdCITYz P3d5bGBHWGw0N15NUHlMUl43ZCNpYEdgJmkkS217XiMxTwp6cEhBSSpiP0A9 PlhWMEhNZC1tKztqYn4qJFVsYDFKKFEpPSkoMXVUJnVmRHh8X2lwcCllXnRr Uj1PNmYpeXpeVncKenJxNzxNS2lEcFBZZEcoPGBwbFIyPyVpdVh7bnJhOXZn RURkakYlY1NVKjVsZS16eypIam9xdihTRlMmTF55dTs5CnokQkNoNTRZVilT WWBwczUhR29obUZQVHx2UH1BSUFVT3dzNkBxMT52WEFIRT9ePndVJmBTUnQl aFl5ITZUTlYqRAp6VH18dD52OzlVTD9XP0FtdDdnb1l3U044alNGY2A4SVE3 fWg9QWVmNUhCSFQoPVB6Nyl7cmRJKC1QZXRFJktxZisKelRDP0o/eDk+X2R0 QERrfEozZkI9YDFiQUYrfm5RYitTZVJTSD5fQig7XzFfO1JuOz84SEZnYEJF V1VRX3pKPWJnCnpyaSRIOW87LVE7PUZPdT1Qd1g5K1l3UFc8MktueFhhPklx amdNRXZEcH5GfWI8UUw0fkBhI3Eha2klS3Y1bV5rUgp6SjsyIVFXVlJpVXZE d3FiRit9Mlc/MEh3UUxrPEcyN3hoZFc4WG1CNHpZfmpUVmtzfWJgUVBrPzha K09AaHR9bUUKenhEVVIrQFpEaXkkViRfd3UxaGFAZ0JKQXVYVW13JElRZExO V0xtKzJ3djc/RlckbC1ydmEjcUckX2VlVXQ3bDs2CnpZZnNRUFEjM0l7WFdq d0RQRzdDTEMpSjk3SSEhI2ooOFh0RyhBdWxnWFR6aT9DPHEraEk1JShvYFIl VG9kU0BJZwp6RnEhOSp7K1g1WWhFRGtGdih4VXM8IyZKU1kleTBxK0gyM2Zj bD8/aENaQjYyJUMwbDdWY194LWR1Z1d9ZWlHPD4KeillX2Y7bDlhQGZSSUI4 b1IzT0QqV01GOFpZaU9pdlU+SVUjVX1hKSNXbiFYalV9fE14VUA9b3c0bjsk NWVvQUlxCmlCfTlYUEMwR01Vd1V2UHhNOG0xK3A9KkV8Nyg4QTVULUdAeUd5 d29aSFpzdXcKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vanMvc25hcC5zdmct bWluLmpzIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9qcy9z bmFwLnN2Zy1taW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNjU2N2QxOQotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vanMvc25hcC5zdmctbWluLmpzCkBAIC0w LDAgKzEsMjEgQEAKKy8vIFNuYXAuc3ZnIDAuNC4xCisvLworLy8gQ29weXJp Z2h0IChjKSAyMDEzIOKAkyAyMDE1IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3Jh dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVu ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj ZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBv YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gaHR0cDov L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8g VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0 byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIg dGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJ UywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRo ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n IHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExp Y2Vuc2UuCisvLworLy8gYnVpbGQ6IDIwMTUtMDQtMTMKKworIWZ1bmN0aW9u KGEpe3ZhciBiLGMsZD0iMC40LjIiLGU9Imhhc093blByb3BlcnR5IixmPS9b XC5cL10vLGc9L1xzKixccyovLGg9IioiLGk9ZnVuY3Rpb24oYSxiKXtyZXR1 cm4gYS1ifSxqPXtuOnt9fSxrPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPTAsYj10 aGlzLmxlbmd0aDtiPmE7YSsrKWlmKCJ1bmRlZmluZWQiIT10eXBlb2YgdGhp c1thXSlyZXR1cm4gdGhpc1thXX0sbD1mdW5jdGlvbigpe2Zvcih2YXIgYT10 aGlzLmxlbmd0aDstLWE7KWlmKCJ1bmRlZmluZWQiIT10eXBlb2YgdGhpc1th XSlyZXR1cm4gdGhpc1thXX0sbT1mdW5jdGlvbihhLGQpe2E9U3RyaW5nKGEp O3ZhciBlLGY9YyxnPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt ZW50cywyKSxoPW0ubGlzdGVuZXJzKGEpLGo9MCxuPVtdLG89e30scD1bXSxx PWI7cC5maXJzdERlZmluZWQ9ayxwLmxhc3REZWZpbmVkPWwsYj1hLGM9MDtm b3IodmFyIHI9MCxzPWgubGVuZ3RoO3M+cjtyKyspInpJbmRleCJpbiBoW3Jd JiYobi5wdXNoKGhbcl0uekluZGV4KSxoW3JdLnpJbmRleDwwJiYob1toW3Jd LnpJbmRleF09aFtyXSkpO2ZvcihuLnNvcnQoaSk7bltqXTwwOylpZihlPW9b bltqKytdXSxwLnB1c2goZS5hcHBseShkLGcpKSxjKXJldHVybiBjPWYscDtm b3Iocj0wO3M+cjtyKyspaWYoZT1oW3JdLCJ6SW5kZXgiaW4gZSlpZihlLnpJ bmRleD09bltqXSl7aWYocC5wdXNoKGUuYXBwbHkoZCxnKSksYylicmVhaztk byBpZihqKyssZT1vW25bal1dLGUmJnAucHVzaChlLmFwcGx5KGQsZykpLGMp YnJlYWs7d2hpbGUoZSl9ZWxzZSBvW2UuekluZGV4XT1lO2Vsc2UgaWYocC5w dXNoKGUuYXBwbHkoZCxnKSksYylicmVhaztyZXR1cm4gYz1mLGI9cSxwfTtt Ll9ldmVudHM9aixtLmxpc3RlbmVycz1mdW5jdGlvbihhKXt2YXIgYixjLGQs ZSxnLGksayxsLG09YS5zcGxpdChmKSxuPWosbz1bbl0scD1bXTtmb3IoZT0w LGc9bS5sZW5ndGg7Zz5lO2UrKyl7Zm9yKGw9W10saT0wLGs9by5sZW5ndGg7 az5pO2krKylmb3Iobj1vW2ldLm4sYz1bblttW2VdXSxuW2hdXSxkPTI7ZC0t OyliPWNbZF0sYiYmKGwucHVzaChiKSxwPXAuY29uY2F0KGIuZnx8W10pKTtv PWx9cmV0dXJuIHB9LG0ub249ZnVuY3Rpb24oYSxiKXtpZihhPVN0cmluZyhh KSwiZnVuY3Rpb24iIT10eXBlb2YgYilyZXR1cm4gZnVuY3Rpb24oKXt9O2Zv cih2YXIgYz1hLnNwbGl0KGcpLGQ9MCxlPWMubGVuZ3RoO2U+ZDtkKyspIWZ1 bmN0aW9uKGEpe2Zvcih2YXIgYyxkPWEuc3BsaXQoZiksZT1qLGc9MCxoPWQu bGVuZ3RoO2g+ZztnKyspZT1lLm4sZT1lLmhhc093blByb3BlcnR5KGRbZ10p JiZlW2RbZ11dfHwoZVtkW2ddXT17bjp7fX0pO2ZvcihlLmY9ZS5mfHxbXSxn PTAsaD1lLmYubGVuZ3RoO2g+ZztnKyspaWYoZS5mW2ddPT1iKXtjPSEwO2Jy ZWFrfSFjJiZlLmYucHVzaChiKX0oY1tkXSk7cmV0dXJuIGZ1bmN0aW9uKGEp eythPT0rYSYmKGIuekluZGV4PSthKX19LG0uZj1mdW5jdGlvbihhKXt2YXIg Yj1bXS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gZnVuY3Rpb24o KXttLmFwcGx5KG51bGwsW2EsbnVsbF0uY29uY2F0KGIpLmNvbmNhdChbXS5z bGljZS5jYWxsKGFyZ3VtZW50cywwKSkpfX0sbS5zdG9wPWZ1bmN0aW9uKCl7 Yz0xfSxtLm50PWZ1bmN0aW9uKGEpe3JldHVybiBhP25ldyBSZWdFeHAoIig/ OlxcLnxcXC98XikiK2ErIig/OlxcLnxcXC98JCkiKS50ZXN0KGIpOmJ9LG0u bnRzPWZ1bmN0aW9uKCl7cmV0dXJuIGIuc3BsaXQoZil9LG0ub2ZmPW0udW5i aW5kPWZ1bmN0aW9uKGEsYil7aWYoIWEpcmV0dXJuIHZvaWQobS5fZXZlbnRz PWo9e246e319KTt2YXIgYz1hLnNwbGl0KGcpO2lmKGMubGVuZ3RoPjEpZm9y KHZhciBkPTAsaT1jLmxlbmd0aDtpPmQ7ZCsrKW0ub2ZmKGNbZF0sYik7ZWxz ZXtjPWEuc3BsaXQoZik7dmFyIGssbCxuLGQsaSxvLHAscT1bal07Zm9yKGQ9 MCxpPWMubGVuZ3RoO2k+ZDtkKyspZm9yKG89MDtvPHEubGVuZ3RoO28rPW4u bGVuZ3RoLTIpe2lmKG49W28sMV0saz1xW29dLm4sY1tkXSE9aClrW2NbZF1d JiZuLnB1c2goa1tjW2RdXSk7ZWxzZSBmb3IobCBpbiBrKWtbZV0obCkmJm4u cHVzaChrW2xdKTtxLnNwbGljZS5hcHBseShxLG4pfWZvcihkPTAsaT1xLmxl bmd0aDtpPmQ7ZCsrKWZvcihrPXFbZF07ay5uOyl7aWYoYil7aWYoay5mKXtm b3Iobz0wLHA9ay5mLmxlbmd0aDtwPm87bysrKWlmKGsuZltvXT09Yil7ay5m LnNwbGljZShvLDEpO2JyZWFrfSFrLmYubGVuZ3RoJiZkZWxldGUgay5mfWZv cihsIGluIGsubilpZihrLm5bZV0obCkmJmsubltsXS5mKXt2YXIgcj1rLm5b bF0uZjtmb3Iobz0wLHA9ci5sZW5ndGg7cD5vO28rKylpZihyW29dPT1iKXty LnNwbGljZShvLDEpO2JyZWFrfSFyLmxlbmd0aCYmZGVsZXRlIGsubltsXS5m fX1lbHNle2RlbGV0ZSBrLmY7Zm9yKGwgaW4gay5uKWsubltlXShsKSYmay5u W2xdLmYmJmRlbGV0ZSBrLm5bbF0uZn1rPWsubn19fSxtLm9uY2U9ZnVuY3Rp b24oYSxiKXt2YXIgYz1mdW5jdGlvbigpe3JldHVybiBtLnVuYmluZChhLGMp LGIuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gbS5vbihhLGMpfSxt LnZlcnNpb249ZCxtLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIllvdSBh cmUgcnVubmluZyBFdmUgIitkfSwidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVs ZSYmbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9bToiZnVuY3Rpb24i PT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZSgiZXZlIixbXSxm dW5jdGlvbigpe3JldHVybiBtfSk6YS5ldmU9bX0odGhpcyksZnVuY3Rpb24o YSxiKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1k KWRlZmluZShbImV2ZSJdLGZ1bmN0aW9uKGMpe3JldHVybiBiKGEsYyl9KTtl bHNlIGlmKCJ1bmRlZmluZWQiIT10eXBlb2YgZXhwb3J0cyl7dmFyIGM9cmVx dWlyZSgiZXZlIik7bW9kdWxlLmV4cG9ydHM9YihhLGMpfWVsc2UgYihhLGEu ZXZlKX0od2luZG93fHx0aGlzLGZ1bmN0aW9uKGEsYil7dmFyIGM9ZnVuY3Rp b24oYil7dmFyIGM9e30sZD1hLnJlcXVlc3RBbmltYXRpb25GcmFtZXx8YS53 ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGEubW96UmVxdWVzdEFuaW1h dGlvbkZyYW1lfHxhLm9SZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGEubXNSZXF1 ZXN0QW5pbWF0aW9uRnJhbWV8fGZ1bmN0aW9uKGEpe3NldFRpbWVvdXQoYSwx Nil9LGU9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oYSl7cmV0dXJuIGEgaW5z dGFuY2VvZiBBcnJheXx8IltvYmplY3QgQXJyYXldIj09T2JqZWN0LnByb3Rv dHlwZS50b1N0cmluZy5jYWxsKGEpfSxmPTAsZz0iTSIrKCtuZXcgRGF0ZSku dG9TdHJpbmcoMzYpLGg9ZnVuY3Rpb24oKXtyZXR1cm4gZysoZisrKS50b1N0 cmluZygzNil9LGk9RGF0ZS5ub3d8fGZ1bmN0aW9uKCl7cmV0dXJuK25ldyBE YXRlfSxqPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXM7aWYobnVsbD09YSlyZXR1 cm4gYi5zO3ZhciBjPWIucy1hO2IuYis9Yi5kdXIqYyxiLkIrPWIuZHVyKmMs Yi5zPWF9LGs9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcztyZXR1cm4gbnVsbD09 YT9iLnNwZDp2b2lkKGIuc3BkPWEpfSxsPWZ1bmN0aW9uKGEpe3ZhciBiPXRo aXM7cmV0dXJuIG51bGw9PWE/Yi5kdXI6KGIucz1iLnMqYS9iLmR1cix2b2lk KGIuZHVyPWEpKX0sbT1mdW5jdGlvbigpe3ZhciBhPXRoaXM7ZGVsZXRlIGNb YS5pZF0sYS51cGRhdGUoKSxiKCJtaW5hLnN0b3AuIithLmlkLGEpfSxuPWZ1 bmN0aW9uKCl7dmFyIGE9dGhpczthLnBkaWZ8fChkZWxldGUgY1thLmlkXSxh LnVwZGF0ZSgpLGEucGRpZj1hLmdldCgpLWEuYil9LG89ZnVuY3Rpb24oKXt2 YXIgYT10aGlzO2EucGRpZiYmKGEuYj1hLmdldCgpLWEucGRpZixkZWxldGUg YS5wZGlmLGNbYS5pZF09YSl9LHA9ZnVuY3Rpb24oKXt2YXIgYSxiPXRoaXM7 aWYoZShiLnN0YXJ0KSl7YT1bXTtmb3IodmFyIGM9MCxkPWIuc3RhcnQubGVu Z3RoO2Q+YztjKyspYVtjXT0rYi5zdGFydFtjXSsoYi5lbmRbY10tYi5zdGFy dFtjXSkqYi5lYXNpbmcoYi5zKX1lbHNlIGE9K2Iuc3RhcnQrKGIuZW5kLWIu c3RhcnQpKmIuZWFzaW5nKGIucyk7Yi5zZXQoYSl9LHE9ZnVuY3Rpb24oKXt2 YXIgYT0wO2Zvcih2YXIgZSBpbiBjKWlmKGMuaGFzT3duUHJvcGVydHkoZSkp e3ZhciBmPWNbZV0sZz1mLmdldCgpO2ErKyxmLnM9KGctZi5iKS8oZi5kdXIv Zi5zcGQpLGYucz49MSYmKGRlbGV0ZSBjW2VdLGYucz0xLGEtLSxmdW5jdGlv bihhKXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7YigibWluYS5maW5pc2guIith LmlkLGEpfSl9KGYpKSxmLnVwZGF0ZSgpfWEmJmQocSl9LHI9ZnVuY3Rpb24o YSxiLGUsZixnLGkscyl7dmFyIHQ9e2lkOmgoKSxzdGFydDphLGVuZDpiLGI6 ZSxzOjAsZHVyOmYtZSxzcGQ6MSxnZXQ6ZyxzZXQ6aSxlYXNpbmc6c3x8ci5s aW5lYXIsc3RhdHVzOmosc3BlZWQ6ayxkdXJhdGlvbjpsLHN0b3A6bSxwYXVz ZTpuLHJlc3VtZTpvLHVwZGF0ZTpwfTtjW3QuaWRdPXQ7dmFyIHUsdj0wO2Zv cih1IGluIGMpaWYoYy5oYXNPd25Qcm9wZXJ0eSh1KSYmKHYrKywyPT12KSli cmVhaztyZXR1cm4gMT09diYmZChxKSx0fTtyZXR1cm4gci50aW1lPWksci5n ZXRCeUlkPWZ1bmN0aW9uKGEpe3JldHVybiBjW2FdfHxudWxsfSxyLmxpbmVh cj1mdW5jdGlvbihhKXtyZXR1cm4gYX0sci5lYXNlb3V0PWZ1bmN0aW9uKGEp e3JldHVybiBNYXRoLnBvdyhhLDEuNyl9LHIuZWFzZWluPWZ1bmN0aW9uKGEp e3JldHVybiBNYXRoLnBvdyhhLC40OCl9LHIuZWFzZWlub3V0PWZ1bmN0aW9u KGEpe2lmKDE9PWEpcmV0dXJuIDE7aWYoMD09YSlyZXR1cm4gMDt2YXIgYj0u NDgtYS8xLjA0LGM9TWF0aC5zcXJ0KC4xNzM0K2IqYiksZD1jLWIsZT1NYXRo LnBvdyhNYXRoLmFicyhkKSwxLzMpKigwPmQ/LTE6MSksZj0tYy1iLGc9TWF0 aC5wb3coTWF0aC5hYnMoZiksMS8zKSooMD5mPy0xOjEpLGg9ZStnKy41O3Jl dHVybiAzKigxLWgpKmgqaCtoKmgqaH0sci5iYWNraW49ZnVuY3Rpb24oYSl7 aWYoMT09YSlyZXR1cm4gMTt2YXIgYj0xLjcwMTU4O3JldHVybiBhKmEqKChi KzEpKmEtYil9LHIuYmFja291dD1mdW5jdGlvbihhKXtpZigwPT1hKXJldHVy biAwO2EtPTE7dmFyIGI9MS43MDE1ODtyZXR1cm4gYSphKigoYisxKSphK2Ip KzF9LHIuZWxhc3RpYz1mdW5jdGlvbihhKXtyZXR1cm4gYT09ISFhP2E6TWF0 aC5wb3coMiwtMTAqYSkqTWF0aC5zaW4oMiooYS0uMDc1KSpNYXRoLlBJLy4z KSsxfSxyLmJvdW5jZT1mdW5jdGlvbihhKXt2YXIgYixjPTcuNTYyNSxkPTIu NzU7cmV0dXJuIDEvZD5hP2I9YyphKmE6Mi9kPmE/KGEtPTEuNS9kLGI9Yyph KmErLjc1KToyLjUvZD5hPyhhLT0yLjI1L2QsYj1jKmEqYSsuOTM3NSk6KGEt PTIuNjI1L2QsYj1jKmEqYSsuOTg0Mzc1KSxifSxhLm1pbmE9cixyfSgidW5k ZWZpbmVkIj09dHlwZW9mIGI/ZnVuY3Rpb24oKXt9OmIpLGQ9ZnVuY3Rpb24o YSl7ZnVuY3Rpb24gYyhhLGIpe2lmKGEpe2lmKGEubm9kZVR5cGUpcmV0dXJu IHcoYSk7aWYoZShhLCJhcnJheSIpJiZjLnNldClyZXR1cm4gYy5zZXQuYXBw bHkoYyxhKTtpZihhIGluc3RhbmNlb2YgcylyZXR1cm4gYTtpZihudWxsPT1i KXJldHVybiBhPXkuZG9jLnF1ZXJ5U2VsZWN0b3IoU3RyaW5nKGEpKSx3KGEp fXJldHVybiBhPW51bGw9PWE/IjEwMCUiOmEsYj1udWxsPT1iPyIxMDAlIjpi LG5ldyB2KGEsYil9ZnVuY3Rpb24gZChhLGIpe2lmKGIpe2lmKCIjdGV4dCI9 PWEmJihhPXkuZG9jLmNyZWF0ZVRleHROb2RlKGIudGV4dHx8YlsiI3RleHQi XXx8IiIpKSwiI2NvbW1lbnQiPT1hJiYoYT15LmRvYy5jcmVhdGVDb21tZW50 KGIudGV4dHx8YlsiI3RleHQiXXx8IiIpKSwic3RyaW5nIj09dHlwZW9mIGEm JihhPWQoYSkpLCJzdHJpbmciPT10eXBlb2YgYilyZXR1cm4gMT09YS5ub2Rl VHlwZT8ieGxpbms6Ij09Yi5zdWJzdHJpbmcoMCw2KT9hLmdldEF0dHJpYnV0 ZU5TKFQsYi5zdWJzdHJpbmcoNikpOiJ4bWw6Ij09Yi5zdWJzdHJpbmcoMCw0 KT9hLmdldEF0dHJpYnV0ZU5TKFUsYi5zdWJzdHJpbmcoNCkpOmEuZ2V0QXR0 cmlidXRlKGIpOiJ0ZXh0Ij09Yj9hLm5vZGVWYWx1ZTpudWxsO2lmKDE9PWEu bm9kZVR5cGUpe2Zvcih2YXIgYyBpbiBiKWlmKGJbel0oYykpe3ZhciBlPUEo YltjXSk7ZT8ieGxpbms6Ij09Yy5zdWJzdHJpbmcoMCw2KT9hLnNldEF0dHJp YnV0ZU5TKFQsYy5zdWJzdHJpbmcoNiksZSk6InhtbDoiPT1jLnN1YnN0cmlu ZygwLDQpP2Euc2V0QXR0cmlidXRlTlMoVSxjLnN1YnN0cmluZyg0KSxlKTph LnNldEF0dHJpYnV0ZShjLGUpOmEucmVtb3ZlQXR0cmlidXRlKGMpfX1lbHNl InRleHQiaW4gYiYmKGEubm9kZVZhbHVlPWIudGV4dCl9ZWxzZSBhPXkuZG9j LmNyZWF0ZUVsZW1lbnROUyhVLGEpO3JldHVybiBhfWZ1bmN0aW9uIGUoYSxi KXtyZXR1cm4gYj1BLnByb3RvdHlwZS50b0xvd2VyQ2FzZS5jYWxsKGIpLCJm aW5pdGUiPT1iP2lzRmluaXRlKGEpOiJhcnJheSI9PWImJihhIGluc3RhbmNl b2YgQXJyYXl8fEFycmF5LmlzQXJyYXkmJkFycmF5LmlzQXJyYXkoYSkpPyEw OiJudWxsIj09YiYmbnVsbD09PWF8fGI9PXR5cGVvZiBhJiZudWxsIT09YXx8 Im9iamVjdCI9PWImJmE9PT1PYmplY3QoYSl8fEouY2FsbChhKS5zbGljZSg4 LC0xKS50b0xvd2VyQ2FzZSgpPT1ifWZ1bmN0aW9uIGYoYSl7aWYoImZ1bmN0 aW9uIj09dHlwZW9mIGF8fE9iamVjdChhKSE9PWEpcmV0dXJuIGE7dmFyIGI9 bmV3IGEuY29uc3RydWN0b3I7Zm9yKHZhciBjIGluIGEpYVt6XShjKSYmKGJb Y109ZihhW2NdKSk7cmV0dXJuIGJ9ZnVuY3Rpb24gaChhLGIpe2Zvcih2YXIg Yz0wLGQ9YS5sZW5ndGg7ZD5jO2MrKylpZihhW2NdPT09YilyZXR1cm4gYS5w dXNoKGEuc3BsaWNlKGMsMSlbMF0pfWZ1bmN0aW9uIGkoYSxiLGMpe2Z1bmN0 aW9uIGQoKXt2YXIgZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1 bWVudHMsMCksZj1lLmpvaW4oIuKQgCIpLGc9ZC5jYWNoZT1kLmNhY2hlfHx7 fSxpPWQuY291bnQ9ZC5jb3VudHx8W107cmV0dXJuIGdbel0oZik/KGgoaSxm KSxjP2MoZ1tmXSk6Z1tmXSk6KGkubGVuZ3RoPj0xZTMmJmRlbGV0ZSBnW2ku c2hpZnQoKV0saS5wdXNoKGYpLGdbZl09YS5hcHBseShiLGUpLGM/YyhnW2Zd KTpnW2ZdKX1yZXR1cm4gZH1mdW5jdGlvbiBqKGEsYixjLGQsZSxmKXtpZihu dWxsPT1lKXt2YXIgZz1hLWMsaD1iLWQ7cmV0dXJuIGd8fGg/KDE4MCsxODAq RC5hdGFuMigtaCwtZykvSCszNjApJTM2MDowfXJldHVybiBqKGEsYixlLGYp LWooYyxkLGUsZil9ZnVuY3Rpb24gayhhKXtyZXR1cm4gYSUzNjAqSC8xODB9 ZnVuY3Rpb24gbChhKXtyZXR1cm4gMTgwKmEvSCUzNjB9ZnVuY3Rpb24gbShh KXt2YXIgYj1bXTtyZXR1cm4gYT1hLnJlcGxhY2UoLyg/Ol58XHMpKFx3Kylc KChbXildKylcKS9nLGZ1bmN0aW9uKGEsYyxkKXtyZXR1cm4gZD1kLnNwbGl0 KC9ccyosXHMqfFxzKy8pLCJyb3RhdGUiPT1jJiYxPT1kLmxlbmd0aCYmZC5w dXNoKDAsMCksInNjYWxlIj09YyYmKGQubGVuZ3RoPjI/ZD1kLnNsaWNlKDAs Mik6Mj09ZC5sZW5ndGgmJmQucHVzaCgwLDApLDE9PWQubGVuZ3RoJiZkLnB1 c2goZFswXSwwLDApKSxiLnB1c2goInNrZXdYIj09Yz9bIm0iLDEsMCxELnRh bihrKGRbMF0pKSwxLDAsMF06InNrZXdZIj09Yz9bIm0iLDEsRC50YW4oayhk WzBdKSksMCwxLDAsMF06W2MuY2hhckF0KDApXS5jb25jYXQoZCkpLGF9KSxi fWZ1bmN0aW9uIG4oYSxiKXt2YXIgZD1hYihhKSxlPW5ldyBjLk1hdHJpeDtp ZihkKWZvcih2YXIgZj0wLGc9ZC5sZW5ndGg7Zz5mO2YrKyl7dmFyIGgsaSxq LGssbCxtPWRbZl0sbj1tLmxlbmd0aCxvPUEobVswXSkudG9Mb3dlckNhc2Uo KSxwPW1bMF0hPW8scT1wP2UuaW52ZXJ0KCk6MDsidCI9PW8mJjI9PW4/ZS50 cmFuc2xhdGUobVsxXSwwKToidCI9PW8mJjM9PW4/cD8oaD1xLngoMCwwKSxp PXEueSgwLDApLGo9cS54KG1bMV0sbVsyXSksaz1xLnkobVsxXSxtWzJdKSxl LnRyYW5zbGF0ZShqLWgsay1pKSk6ZS50cmFuc2xhdGUobVsxXSxtWzJdKToi ciI9PW8/Mj09bj8obD1sfHxiLGUucm90YXRlKG1bMV0sbC54K2wud2lkdGgv MixsLnkrbC5oZWlnaHQvMikpOjQ9PW4mJihwPyhqPXEueChtWzJdLG1bM10p LGs9cS55KG1bMl0sbVszXSksZS5yb3RhdGUobVsxXSxqLGspKTplLnJvdGF0 ZShtWzFdLG1bMl0sbVszXSkpOiJzIj09bz8yPT1ufHwzPT1uPyhsPWx8fGIs ZS5zY2FsZShtWzFdLG1bbi0xXSxsLngrbC53aWR0aC8yLGwueStsLmhlaWdo dC8yKSk6ND09bj9wPyhqPXEueChtWzJdLG1bM10pLGs9cS55KG1bMl0sbVsz XSksZS5zY2FsZShtWzFdLG1bMV0saixrKSk6ZS5zY2FsZShtWzFdLG1bMV0s bVsyXSxtWzNdKTo1PT1uJiYocD8oaj1xLngobVszXSxtWzRdKSxrPXEueSht WzNdLG1bNF0pLGUuc2NhbGUobVsxXSxtWzJdLGosaykpOmUuc2NhbGUobVsx XSxtWzJdLG1bM10sbVs0XSkpOiJtIj09byYmNz09biYmZS5hZGQobVsxXSxt WzJdLG1bM10sbVs0XSxtWzVdLG1bNl0pfXJldHVybiBlfWZ1bmN0aW9uIG8o YSl7dmFyIGI9YS5ub2RlLm93bmVyU1ZHRWxlbWVudCYmdyhhLm5vZGUub3du ZXJTVkdFbGVtZW50KXx8YS5ub2RlLnBhcmVudE5vZGUmJncoYS5ub2RlLnBh cmVudE5vZGUpfHxjLnNlbGVjdCgic3ZnIil8fGMoMCwwKSxkPWIuc2VsZWN0 KCJkZWZzIiksZT1udWxsPT1kPyExOmQubm9kZTtyZXR1cm4gZXx8KGU9dSgi ZGVmcyIsYi5ub2RlKS5ub2RlKSxlfWZ1bmN0aW9uIHAoYSl7cmV0dXJuIGEu bm9kZS5vd25lclNWR0VsZW1lbnQmJncoYS5ub2RlLm93bmVyU1ZHRWxlbWVu dCl8fGMuc2VsZWN0KCJzdmciKX1mdW5jdGlvbiBxKGEsYixjKXtmdW5jdGlv biBlKGEpe2lmKG51bGw9PWEpcmV0dXJuIEk7aWYoYT09K2EpcmV0dXJuIGE7 ZChqLHt3aWR0aDphfSk7dHJ5e3JldHVybiBqLmdldEJCb3goKS53aWR0aH1j YXRjaChiKXtyZXR1cm4gMH19ZnVuY3Rpb24gZihhKXtpZihudWxsPT1hKXJl dHVybiBJO2lmKGE9PSthKXJldHVybiBhO2Qoaix7aGVpZ2h0OmF9KTt0cnl7 cmV0dXJuIGouZ2V0QkJveCgpLmhlaWdodH1jYXRjaChiKXtyZXR1cm4gMH19 ZnVuY3Rpb24gZyhkLGUpe251bGw9PWI/aVtkXT1lKGEuYXR0cihkKXx8MCk6 ZD09YiYmKGk9ZShudWxsPT1jP2EuYXR0cihkKXx8MDpjKSl9dmFyIGg9cChh KS5ub2RlLGk9e30saj1oLnF1ZXJ5U2VsZWN0b3IoIi5zdmctLS1tZ3IiKTtz d2l0Y2goanx8KGo9ZCgicmVjdCIpLGQoaix7eDotOWU5LHk6LTllOSx3aWR0 aDoxMCxoZWlnaHQ6MTAsImNsYXNzIjoic3ZnLS0tbWdyIixmaWxsOiJub25l In0pLGguYXBwZW5kQ2hpbGQoaikpLGEudHlwZSl7Y2FzZSJyZWN0IjpnKCJy eCIsZSksZygicnkiLGYpO2Nhc2UiaW1hZ2UiOmcoIndpZHRoIixlKSxnKCJo ZWlnaHQiLGYpO2Nhc2UidGV4dCI6ZygieCIsZSksZygieSIsZik7YnJlYWs7 Y2FzZSJjaXJjbGUiOmcoImN4IixlKSxnKCJjeSIsZiksZygiciIsZSk7YnJl YWs7Y2FzZSJlbGxpcHNlIjpnKCJjeCIsZSksZygiY3kiLGYpLGcoInJ4Iixl KSxnKCJyeSIsZik7YnJlYWs7Y2FzZSJsaW5lIjpnKCJ4MSIsZSksZygieDIi LGUpLGcoInkxIixmKSxnKCJ5MiIsZik7YnJlYWs7Y2FzZSJtYXJrZXIiOmco InJlZlgiLGUpLGcoIm1hcmtlcldpZHRoIixlKSxnKCJyZWZZIixmKSxnKCJt YXJrZXJIZWlnaHQiLGYpO2JyZWFrO2Nhc2UicmFkaWFsR3JhZGllbnQiOmco ImZ4IixlKSxnKCJmeSIsZik7YnJlYWs7Y2FzZSJ0c3BhbiI6ZygiZHgiLGUp LGcoImR5IixmKTticmVhaztkZWZhdWx0OmcoYixlKX1yZXR1cm4gaC5yZW1v dmVDaGlsZChqKSxpfWZ1bmN0aW9uIHIoYSl7ZShhLCJhcnJheSIpfHwoYT1B cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpO2Zvcih2 YXIgYj0wLGM9MCxkPXRoaXMubm9kZTt0aGlzW2JdOylkZWxldGUgdGhpc1ti KytdO2ZvcihiPTA7YjxhLmxlbmd0aDtiKyspInNldCI9PWFbYl0udHlwZT9h W2JdLmZvckVhY2goZnVuY3Rpb24oYSl7ZC5hcHBlbmRDaGlsZChhLm5vZGUp fSk6ZC5hcHBlbmRDaGlsZChhW2JdLm5vZGUpO3ZhciBmPWQuY2hpbGROb2Rl cztmb3IoYj0wO2I8Zi5sZW5ndGg7YisrKXRoaXNbYysrXT13KGZbYl0pO3Jl dHVybiB0aGlzfWZ1bmN0aW9uIHMoYSl7aWYoYS5zbmFwIGluIFYpcmV0dXJu IFZbYS5zbmFwXTt2YXIgYjt0cnl7Yj1hLm93bmVyU1ZHRWxlbWVudH1jYXRj aChjKXt9dGhpcy5ub2RlPWEsYiYmKHRoaXMucGFwZXI9bmV3IHYoYikpLHRo aXMudHlwZT1hLnRhZ05hbWV8fGEubm9kZU5hbWU7dmFyIGQ9dGhpcy5pZD1T KHRoaXMpO2lmKHRoaXMuYW5pbXM9e30sdGhpcy5fPXt0cmFuc2Zvcm06W119 LGEuc25hcD1kLFZbZF09dGhpcywiZyI9PXRoaXMudHlwZSYmKHRoaXMuYWRk PXIpLHRoaXMudHlwZSBpbntnOjEsbWFzazoxLHBhdHRlcm46MSxzeW1ib2w6 MX0pZm9yKHZhciBlIGluIHYucHJvdG90eXBlKXYucHJvdG90eXBlW3pdKGUp JiYodGhpc1tlXT12LnByb3RvdHlwZVtlXSl9ZnVuY3Rpb24gdChhKXt0aGlz Lm5vZGU9YX1mdW5jdGlvbiB1KGEsYil7dmFyIGM9ZChhKTtiLmFwcGVuZENo aWxkKGMpO3ZhciBlPXcoYyk7cmV0dXJuIGV9ZnVuY3Rpb24gdihhLGIpe3Zh ciBjLGUsZixnPXYucHJvdG90eXBlO2lmKGEmJiJzdmciPT1hLnRhZ05hbWUp e2lmKGEuc25hcCBpbiBWKXJldHVybiBWW2Euc25hcF07dmFyIGg9YS5vd25l ckRvY3VtZW50O2M9bmV3IHMoYSksZT1hLmdldEVsZW1lbnRzQnlUYWdOYW1l KCJkZXNjIilbMF0sZj1hLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkZWZzIilb MF0sZXx8KGU9ZCgiZGVzYyIpLGUuYXBwZW5kQ2hpbGQoaC5jcmVhdGVUZXh0 Tm9kZSgiQ3JlYXRlZCB3aXRoIFNuYXAiKSksYy5ub2RlLmFwcGVuZENoaWxk KGUpKSxmfHwoZj1kKCJkZWZzIiksYy5ub2RlLmFwcGVuZENoaWxkKGYpKSxj LmRlZnM9Zjtmb3IodmFyIGkgaW4gZylnW3pdKGkpJiYoY1tpXT1nW2ldKTtj LnBhcGVyPWMucm9vdD1jfWVsc2UgYz11KCJzdmciLHkuZG9jLmJvZHkpLGQo Yy5ub2RlLHtoZWlnaHQ6Yix2ZXJzaW9uOjEuMSx3aWR0aDphLHhtbG5zOlV9 KTtyZXR1cm4gY31mdW5jdGlvbiB3KGEpe3JldHVybiBhP2EgaW5zdGFuY2Vv ZiBzfHxhIGluc3RhbmNlb2YgdD9hOmEudGFnTmFtZSYmInN2ZyI9PWEudGFn TmFtZS50b0xvd2VyQ2FzZSgpP25ldyB2KGEpOmEudGFnTmFtZSYmIm9iamVj dCI9PWEudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiYiaW1hZ2Uvc3ZnK3htbCI9 PWEudHlwZT9uZXcgdihhLmNvbnRlbnREb2N1bWVudC5nZXRFbGVtZW50c0J5 VGFnTmFtZSgic3ZnIilbMF0pOm5ldyBzKGEpOmF9ZnVuY3Rpb24geChhLGIp e2Zvcih2YXIgYz0wLGQ9YS5sZW5ndGg7ZD5jO2MrKyl7dmFyIGU9e3R5cGU6 YVtjXS50eXBlLGF0dHI6YVtjXS5hdHRyKCl9LGY9YVtjXS5jaGlsZHJlbigp O2IucHVzaChlKSxmLmxlbmd0aCYmeChmLGUuY2hpbGROb2Rlcz1bXSl9fWMu dmVyc2lvbj0iMC40LjAiLGMudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4i U25hcCB2Iit0aGlzLnZlcnNpb259LGMuXz17fTt2YXIgeT17d2luOmEud2lu ZG93LGRvYzphLndpbmRvdy5kb2N1bWVudH07Yy5fLmdsb2I9eTt7dmFyIHo9 Imhhc093blByb3BlcnR5IixBPVN0cmluZyxCPXBhcnNlRmxvYXQsQz1wYXJz ZUludCxEPU1hdGgsRT1ELm1heCxGPUQubWluLEc9RC5hYnMsSD0oRC5wb3cs RC5QSSksST0oRC5yb3VuZCwiIiksSj1PYmplY3QucHJvdG90eXBlLnRvU3Ry aW5nLEs9L15ccyooKCNbYS1mXGRdezZ9KXwoI1thLWZcZF17M30pfHJnYmE/ XChccyooW1xkXC5dKyU/XHMqLFxzKltcZFwuXSslP1xzKixccypbXGRcLl0r JT8oPzpccyosXHMqW1xkXC5dKyU/KT8pXHMqXCl8aHNiYT9cKFxzKihbXGRc Ll0rKD86ZGVnfFx4YjB8JSk/XHMqLFxzKltcZFwuXSslP1xzKixccypbXGRc Ll0rKD86JT9ccyosXHMqW1xkXC5dKyk/JT8pXHMqXCl8aHNsYT9cKFxzKihb XGRcLl0rKD86ZGVnfFx4YjB8JSk/XHMqLFxzKltcZFwuXSslP1xzKixccypb XGRcLl0rKD86JT9ccyosXHMqW1xkXC5dKyk/JT8pXHMqXCkpXHMqJC9pLEw9 KGMuXy5zZXBhcmF0b3I9L1ssXHNdKy8sL1tcc10qLFtcc10qLyksTT17aHM6 MSxyZzoxfSxOPS8oW2Etel0pW1xzLF0qKCgtP1xkKlwuP1xkKig/OmVbXC0r XT9cZCspP1tcc10qLD9bXHNdKikrKS9naSxPPS8oW3JzdG1dKVtccyxdKigo LT9cZCpcLj9cZCooPzplW1wtK10/XGQrKT9bXHNdKiw/W1xzXSopKykvZ2ks UD0vKC0/XGQqXC4/XGQqKD86ZVtcLStdP1xcZCspPylbXHNdKiw/W1xzXSov Z2ksUT0wLFI9IlMiKygrbmV3IERhdGUpLnRvU3RyaW5nKDM2KSxTPWZ1bmN0 aW9uKGEpe3JldHVybihhJiZhLnR5cGU/YS50eXBlOkkpK1IrKFErKykudG9T dHJpbmcoMzYpfSxUPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixV PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsVj17fTtjLnVybD1mdW5j dGlvbihhKXtyZXR1cm4idXJsKCcjIithKyInKSJ9fWMuXy4kPWQsYy5fLmlk PVMsYy5mb3JtYXQ9ZnVuY3Rpb24oKXt2YXIgYT0vXHsoW15cfV0rKVx9L2cs Yj0vKD86KD86XnxcLikoLis/KSg/PVxbfFwufCR8XCgpfFxbKCd8IikoLis/ KVwyXF0pKFwoXCkpPy9nLGM9ZnVuY3Rpb24oYSxjLGQpe3ZhciBlPWQ7cmV0 dXJuIGMucmVwbGFjZShiLGZ1bmN0aW9uKGEsYixjLGQsZil7Yj1ifHxkLGUm JihiIGluIGUmJihlPWVbYl0pLCJmdW5jdGlvbiI9PXR5cGVvZiBlJiZmJiYo ZT1lKCkpKX0pLGU9KG51bGw9PWV8fGU9PWQ/YTplKSsiIn07cmV0dXJuIGZ1 bmN0aW9uKGIsZCl7cmV0dXJuIEEoYikucmVwbGFjZShhLGZ1bmN0aW9uKGEs Yil7cmV0dXJuIGMoYSxiLGQpfSl9fSgpLGMuXy5jbG9uZT1mLGMuXy5jYWNo ZXI9aSxjLnJhZD1rLGMuZGVnPWwsYy5zaW49ZnVuY3Rpb24oYSl7cmV0dXJu IEQuc2luKGMucmFkKGEpKX0sYy50YW49ZnVuY3Rpb24oYSl7cmV0dXJuIEQu dGFuKGMucmFkKGEpKX0sYy5jb3M9ZnVuY3Rpb24oYSl7cmV0dXJuIEQuY29z KGMucmFkKGEpKX0sYy5hc2luPWZ1bmN0aW9uKGEpe3JldHVybiBjLmRlZyhE LmFzaW4oYSkpfSxjLmFjb3M9ZnVuY3Rpb24oYSl7cmV0dXJuIGMuZGVnKEQu YWNvcyhhKSl9LGMuYXRhbj1mdW5jdGlvbihhKXtyZXR1cm4gYy5kZWcoRC5h dGFuKGEpKX0sYy5hdGFuMj1mdW5jdGlvbihhKXtyZXR1cm4gYy5kZWcoRC5h dGFuMihhKSl9LGMuYW5nbGU9aixjLmxlbj1mdW5jdGlvbihhLGIsZCxlKXty ZXR1cm4gTWF0aC5zcXJ0KGMubGVuMihhLGIsZCxlKSl9LGMubGVuMj1mdW5j dGlvbihhLGIsYyxkKXtyZXR1cm4oYS1jKSooYS1jKSsoYi1kKSooYi1kKX0s Yy5jbG9zZXN0UG9pbnQ9ZnVuY3Rpb24oYSxiLGMpe2Z1bmN0aW9uIGQoYSl7 dmFyIGQ9YS54LWIsZT1hLnktYztyZXR1cm4gZCpkK2UqZX1mb3IodmFyIGUs ZixnLGgsaT1hLm5vZGUsaj1pLmdldFRvdGFsTGVuZ3RoKCksaz1qL2kucGF0 aFNlZ0xpc3QubnVtYmVyT2ZJdGVtcyouMTI1LGw9MS8wLG09MDtqPj1tO20r PWspKGg9ZChnPWkuZ2V0UG9pbnRBdExlbmd0aChtKSkpPGwmJihlPWcsZj1t LGw9aCk7Zm9yKGsqPS41O2s+LjU7KXt2YXIgbixvLHAscSxyLHM7KHA9Zi1r KT49MCYmKHI9ZChuPWkuZ2V0UG9pbnRBdExlbmd0aChwKSkpPGw/KGU9bixm PXAsbD1yKToocT1mK2spPD1qJiYocz1kKG89aS5nZXRQb2ludEF0TGVuZ3Ro KHEpKSk8bD8oZT1vLGY9cSxsPXMpOmsqPS41fXJldHVybiBlPXt4OmUueCx5 OmUueSxsZW5ndGg6ZixkaXN0YW5jZTpNYXRoLnNxcnQobCl9fSxjLmlzPWUs Yy5zbmFwVG89ZnVuY3Rpb24oYSxiLGMpe2lmKGM9ZShjLCJmaW5pdGUiKT9j OjEwLGUoYSwiYXJyYXkiKSl7Zm9yKHZhciBkPWEubGVuZ3RoO2QtLTspaWYo RyhhW2RdLWIpPD1jKXJldHVybiBhW2RdfWVsc2V7YT0rYTt2YXIgZj1iJWE7 aWYoYz5mKXJldHVybiBiLWY7aWYoZj5hLWMpcmV0dXJuIGItZithfXJldHVy biBifSxjLmdldFJHQj1pKGZ1bmN0aW9uKGEpe2lmKCFhfHwoYT1BKGEpKS5p bmRleE9mKCItIikrMSlyZXR1cm57cjotMSxnOi0xLGI6LTEsaGV4OiJub25l IixlcnJvcjoxLHRvU3RyaW5nOlp9O2lmKCJub25lIj09YSlyZXR1cm57cjot MSxnOi0xLGI6LTEsaGV4OiJub25lIix0b1N0cmluZzpafTtpZighKE1bel0o YS50b0xvd2VyQ2FzZSgpLnN1YnN0cmluZygwLDIpKXx8IiMiPT1hLmNoYXJB dCgpKSYmKGE9VyhhKSksIWEpcmV0dXJue3I6LTEsZzotMSxiOi0xLGhleDoi bm9uZSIsZXJyb3I6MSx0b1N0cmluZzpafTt2YXIgYixkLGYsZyxoLGksaj1h Lm1hdGNoKEspO3JldHVybiBqPyhqWzJdJiYoZj1DKGpbMl0uc3Vic3RyaW5n KDUpLDE2KSxkPUMoalsyXS5zdWJzdHJpbmcoMyw1KSwxNiksYj1DKGpbMl0u c3Vic3RyaW5nKDEsMyksMTYpKSxqWzNdJiYoZj1DKChoPWpbM10uY2hhckF0 KDMpKStoLDE2KSxkPUMoKGg9alszXS5jaGFyQXQoMikpK2gsMTYpLGI9Qygo aD1qWzNdLmNoYXJBdCgxKSkraCwxNikpLGpbNF0mJihpPWpbNF0uc3BsaXQo TCksYj1CKGlbMF0pLCIlIj09aVswXS5zbGljZSgtMSkmJihiKj0yLjU1KSxk PUIoaVsxXSksIiUiPT1pWzFdLnNsaWNlKC0xKSYmKGQqPTIuNTUpLGY9Qihp WzJdKSwiJSI9PWlbMl0uc2xpY2UoLTEpJiYoZio9Mi41NSksInJnYmEiPT1q WzFdLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCw0KSYmKGc9QihpWzNdKSksaVsz XSYmIiUiPT1pWzNdLnNsaWNlKC0xKSYmKGcvPTEwMCkpLGpbNV0/KGk9als1 XS5zcGxpdChMKSxiPUIoaVswXSksIiUiPT1pWzBdLnNsaWNlKC0xKSYmKGIv PTEwMCksZD1CKGlbMV0pLCIlIj09aVsxXS5zbGljZSgtMSkmJihkLz0xMDAp LGY9QihpWzJdKSwiJSI9PWlbMl0uc2xpY2UoLTEpJiYoZi89MTAwKSwoImRl ZyI9PWlbMF0uc2xpY2UoLTMpfHwiwrAiPT1pWzBdLnNsaWNlKC0xKSkmJihi Lz0zNjApLCJoc2JhIj09alsxXS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNCkm JihnPUIoaVszXSkpLGlbM10mJiIlIj09aVszXS5zbGljZSgtMSkmJihnLz0x MDApLGMuaHNiMnJnYihiLGQsZixnKSk6als2XT8oaT1qWzZdLnNwbGl0KEwp LGI9QihpWzBdKSwiJSI9PWlbMF0uc2xpY2UoLTEpJiYoYi89MTAwKSxkPUIo aVsxXSksIiUiPT1pWzFdLnNsaWNlKC0xKSYmKGQvPTEwMCksZj1CKGlbMl0p LCIlIj09aVsyXS5zbGljZSgtMSkmJihmLz0xMDApLCgiZGVnIj09aVswXS5z bGljZSgtMyl8fCLCsCI9PWlbMF0uc2xpY2UoLTEpKSYmKGIvPTM2MCksImhz bGEiPT1qWzFdLnRvTG93ZXJDYXNlKCkuc2xpY2UoMCw0KSYmKGc9QihpWzNd KSksaVszXSYmIiUiPT1pWzNdLnNsaWNlKC0xKSYmKGcvPTEwMCksYy5oc2wy cmdiKGIsZCxmLGcpKTooYj1GKEQucm91bmQoYiksMjU1KSxkPUYoRC5yb3Vu ZChkKSwyNTUpLGY9RihELnJvdW5kKGYpLDI1NSksZz1GKEUoZywwKSwxKSxq PXtyOmIsZzpkLGI6Zix0b1N0cmluZzpafSxqLmhleD0iIyIrKDE2Nzc3MjE2 fGZ8ZDw8OHxiPDwxNikudG9TdHJpbmcoMTYpLnNsaWNlKDEpLGoub3BhY2l0 eT1lKGcsImZpbml0ZSIpP2c6MSxqKSk6e3I6LTEsZzotMSxiOi0xLGhleDoi bm9uZSIsZXJyb3I6MSx0b1N0cmluZzpafX0sYyksYy5oc2I9aShmdW5jdGlv bihhLGIsZCl7cmV0dXJuIGMuaHNiMnJnYihhLGIsZCkuaGV4fSksYy5oc2w9 aShmdW5jdGlvbihhLGIsZCl7cmV0dXJuIGMuaHNsMnJnYihhLGIsZCkuaGV4 fSksYy5yZ2I9aShmdW5jdGlvbihhLGIsYyxkKXtpZihlKGQsImZpbml0ZSIp KXt2YXIgZj1ELnJvdW5kO3JldHVybiJyZ2JhKCIrW2YoYSksZihiKSxmKGMp LCtkLnRvRml4ZWQoMildKyIpIn1yZXR1cm4iIyIrKDE2Nzc3MjE2fGN8Yjw8 OHxhPDwxNikudG9TdHJpbmcoMTYpLnNsaWNlKDEpfSk7dmFyIFc9ZnVuY3Rp b24oYSl7dmFyIGI9eS5kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQi KVswXXx8eS5kb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInN2ZyIpWzBdLGM9 InJnYigyNTUsIDAsIDApIjtyZXR1cm4oVz1pKGZ1bmN0aW9uKGEpe2lmKCJy ZWQiPT1hLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGM7Yi5zdHlsZS5jb2xvcj1j LGIuc3R5bGUuY29sb3I9YTt2YXIgZD15LmRvYy5kZWZhdWx0Vmlldy5nZXRD b21wdXRlZFN0eWxlKGIsSSkuZ2V0UHJvcGVydHlWYWx1ZSgiY29sb3IiKTty ZXR1cm4gZD09Yz9udWxsOmR9KSkoYSl9LFg9ZnVuY3Rpb24oKXtyZXR1cm4i aHNiKCIrW3RoaXMuaCx0aGlzLnMsdGhpcy5iXSsiKSJ9LFk9ZnVuY3Rpb24o KXtyZXR1cm4iaHNsKCIrW3RoaXMuaCx0aGlzLnMsdGhpcy5sXSsiKSJ9LFo9 ZnVuY3Rpb24oKXtyZXR1cm4gMT09dGhpcy5vcGFjaXR5fHxudWxsPT10aGlz Lm9wYWNpdHk/dGhpcy5oZXg6InJnYmEoIitbdGhpcy5yLHRoaXMuZyx0aGlz LmIsdGhpcy5vcGFjaXR5XSsiKSJ9LCQ9ZnVuY3Rpb24oYSxiLGQpe2lmKG51 bGw9PWImJmUoYSwib2JqZWN0IikmJiJyImluIGEmJiJnImluIGEmJiJiImlu IGEmJihkPWEuYixiPWEuZyxhPWEuciksbnVsbD09YiYmZShhLHN0cmluZykp e3ZhciBmPWMuZ2V0UkdCKGEpO2E9Zi5yLGI9Zi5nLGQ9Zi5ifXJldHVybihh PjF8fGI+MXx8ZD4xKSYmKGEvPTI1NSxiLz0yNTUsZC89MjU1KSxbYSxiLGRd fSxfPWZ1bmN0aW9uKGEsYixkLGYpe2E9RC5yb3VuZCgyNTUqYSksYj1ELnJv dW5kKDI1NSpiKSxkPUQucm91bmQoMjU1KmQpO3ZhciBnPXtyOmEsZzpiLGI6 ZCxvcGFjaXR5OmUoZiwiZmluaXRlIik/ZjoxLGhleDpjLnJnYihhLGIsZCks dG9TdHJpbmc6Wn07cmV0dXJuIGUoZiwiZmluaXRlIikmJihnLm9wYWNpdHk9 ZiksZ307Yy5jb2xvcj1mdW5jdGlvbihhKXt2YXIgYjtyZXR1cm4gZShhLCJv YmplY3QiKSYmImgiaW4gYSYmInMiaW4gYSYmImIiaW4gYT8oYj1jLmhzYjJy Z2IoYSksYS5yPWIucixhLmc9Yi5nLGEuYj1iLmIsYS5vcGFjaXR5PTEsYS5o ZXg9Yi5oZXgpOmUoYSwib2JqZWN0IikmJiJoImluIGEmJiJzImluIGEmJiJs ImluIGE/KGI9Yy5oc2wycmdiKGEpLGEucj1iLnIsYS5nPWIuZyxhLmI9Yi5i LGEub3BhY2l0eT0xLGEuaGV4PWIuaGV4KTooZShhLCJzdHJpbmciKSYmKGE9 Yy5nZXRSR0IoYSkpLGUoYSwib2JqZWN0IikmJiJyImluIGEmJiJnImluIGEm JiJiImluIGEmJiEoImVycm9yImluIGEpPyhiPWMucmdiMmhzbChhKSxhLmg9 Yi5oLGEucz1iLnMsYS5sPWIubCxiPWMucmdiMmhzYihhKSxhLnY9Yi5iKToo YT17aGV4OiJub25lIn0sYS5yPWEuZz1hLmI9YS5oPWEucz1hLnY9YS5sPS0x LGEuZXJyb3I9MSkpLGEudG9TdHJpbmc9WixhfSxjLmhzYjJyZ2I9ZnVuY3Rp b24oYSxiLGMsZCl7ZShhLCJvYmplY3QiKSYmImgiaW4gYSYmInMiaW4gYSYm ImIiaW4gYSYmKGM9YS5iLGI9YS5zLGQ9YS5vLGE9YS5oKSxhKj0zNjA7dmFy IGYsZyxoLGksajtyZXR1cm4gYT1hJTM2MC82MCxqPWMqYixpPWoqKDEtRyhh JTItMSkpLGY9Zz1oPWMtaixhPX5+YSxmKz1baixpLDAsMCxpLGpdW2FdLGcr PVtpLGosaixpLDAsMF1bYV0saCs9WzAsMCxpLGosaixpXVthXSxfKGYsZyxo LGQpfSxjLmhzbDJyZ2I9ZnVuY3Rpb24oYSxiLGMsZCl7ZShhLCJvYmplY3Qi KSYmImgiaW4gYSYmInMiaW4gYSYmImwiaW4gYSYmKGM9YS5sLGI9YS5zLGE9 YS5oKSwoYT4xfHxiPjF8fGM+MSkmJihhLz0zNjAsYi89MTAwLGMvPTEwMCks YSo9MzYwO3ZhciBmLGcsaCxpLGo7cmV0dXJuIGE9YSUzNjAvNjAsaj0yKmIq KC41PmM/YzoxLWMpLGk9aiooMS1HKGElMi0xKSksZj1nPWg9Yy1qLzIsYT1+ fmEsZis9W2osaSwwLDAsaSxqXVthXSxnKz1baSxqLGosaSwwLDBdW2FdLGgr PVswLDAsaSxqLGosaV1bYV0sXyhmLGcsaCxkKX0sYy5yZ2IyaHNiPWZ1bmN0 aW9uKGEsYixjKXtjPSQoYSxiLGMpLGE9Y1swXSxiPWNbMV0sYz1jWzJdO3Zh ciBkLGUsZixnO3JldHVybiBmPUUoYSxiLGMpLGc9Zi1GKGEsYixjKSxkPTA9 PWc/bnVsbDpmPT1hPyhiLWMpL2c6Zj09Yj8oYy1hKS9nKzI6KGEtYikvZys0 LGQ9KGQrMzYwKSU2KjYwLzM2MCxlPTA9PWc/MDpnL2Yse2g6ZCxzOmUsYjpm LHRvU3RyaW5nOlh9fSxjLnJnYjJoc2w9ZnVuY3Rpb24oYSxiLGMpe2M9JChh LGIsYyksYT1jWzBdLGI9Y1sxXSxjPWNbMl07dmFyIGQsZSxmLGcsaCxpO3Jl dHVybiBnPUUoYSxiLGMpLGg9RihhLGIsYyksaT1nLWgsZD0wPT1pP251bGw6 Zz09YT8oYi1jKS9pOmc9PWI/KGMtYSkvaSsyOihhLWIpL2krNCxkPShkKzM2 MCklNio2MC8zNjAsZj0oZytoKS8yLGU9MD09aT8wOi41PmY/aS8oMipmKTpp LygyLTIqZikse2g6ZCxzOmUsbDpmLHRvU3RyaW5nOll9fSxjLnBhcnNlUGF0 aFN0cmluZz1mdW5jdGlvbihhKXtpZighYSlyZXR1cm4gbnVsbDt2YXIgYj1j LnBhdGgoYSk7aWYoYi5hcnIpcmV0dXJuIGMucGF0aC5jbG9uZShiLmFycik7 dmFyIGQ9e2E6NyxjOjYsbzoyLGg6MSxsOjIsbToyLHI6NCxxOjQsczo0LHQ6 Mix2OjEsdTozLHo6MH0sZj1bXTtyZXR1cm4gZShhLCJhcnJheSIpJiZlKGFb MF0sImFycmF5IikmJihmPWMucGF0aC5jbG9uZShhKSksZi5sZW5ndGh8fEEo YSkucmVwbGFjZShOLGZ1bmN0aW9uKGEsYixjKXt2YXIgZT1bXSxnPWIudG9M b3dlckNhc2UoKTtpZihjLnJlcGxhY2UoUCxmdW5jdGlvbihhLGIpe2ImJmUu cHVzaCgrYil9KSwibSI9PWcmJmUubGVuZ3RoPjImJihmLnB1c2goW2JdLmNv bmNhdChlLnNwbGljZSgwLDIpKSksZz0ibCIsYj0ibSI9PWI/ImwiOiJMIiks Im8iPT1nJiYxPT1lLmxlbmd0aCYmZi5wdXNoKFtiLGVbMF1dKSwiciI9PWcp Zi5wdXNoKFtiXS5jb25jYXQoZSkpO2Vsc2UgZm9yKDtlLmxlbmd0aD49ZFtn XSYmKGYucHVzaChbYl0uY29uY2F0KGUuc3BsaWNlKDAsZFtnXSkpKSxkW2dd KTspO30pLGYudG9TdHJpbmc9Yy5wYXRoLnRvU3RyaW5nLGIuYXJyPWMucGF0 aC5jbG9uZShmKSxmfTt2YXIgYWI9Yy5wYXJzZVRyYW5zZm9ybVN0cmluZz1m dW5jdGlvbihhKXtpZighYSlyZXR1cm4gbnVsbDt2YXIgYj1bXTtyZXR1cm4g ZShhLCJhcnJheSIpJiZlKGFbMF0sImFycmF5IikmJihiPWMucGF0aC5jbG9u ZShhKSksYi5sZW5ndGh8fEEoYSkucmVwbGFjZShPLGZ1bmN0aW9uKGEsYyxk KXt7dmFyIGU9W107Yy50b0xvd2VyQ2FzZSgpfWQucmVwbGFjZShQLGZ1bmN0 aW9uKGEsYil7YiYmZS5wdXNoKCtiKX0pLGIucHVzaChbY10uY29uY2F0KGUp KX0pLGIudG9TdHJpbmc9Yy5wYXRoLnRvU3RyaW5nLGJ9O2MuXy5zdmdUcmFu c2Zvcm0yc3RyaW5nPW0sYy5fLnJnVHJhbnNmb3JtPS9eW2Etel1bXHNdKi0/ XC4/XGQvaSxjLl8udHJhbnNmb3JtMm1hdHJpeD1uLGMuX3VuaXQycHg9cTt5 LmRvYy5jb250YWluc3x8eS5kb2MuY29tcGFyZURvY3VtZW50UG9zaXRpb24/ ZnVuY3Rpb24oYSxiKXt2YXIgYz05PT1hLm5vZGVUeXBlP2EuZG9jdW1lbnRF bGVtZW50OmEsZD1iJiZiLnBhcmVudE5vZGU7cmV0dXJuIGE9PWR8fCEoIWR8 fDEhPWQubm9kZVR5cGV8fCEoYy5jb250YWlucz9jLmNvbnRhaW5zKGQpOmEu Y29tcGFyZURvY3VtZW50UG9zaXRpb24mJjE2JmEuY29tcGFyZURvY3VtZW50 UG9zaXRpb24oZCkpKX06ZnVuY3Rpb24oYSxiKXtpZihiKWZvcig7YjspaWYo Yj1iLnBhcmVudE5vZGUsYj09YSlyZXR1cm4hMDtyZXR1cm4hMX07Yy5fLmdl dFNvbWVEZWZzPW8sYy5fLmdldFNvbWVTVkc9cCxjLnNlbGVjdD1mdW5jdGlv bihhKXtyZXR1cm4gYT1BKGEpLnJlcGxhY2UoLyhbXlxcXSk6L2csIiQxXFw6 Iiksdyh5LmRvYy5xdWVyeVNlbGVjdG9yKGEpKX0sYy5zZWxlY3RBbGw9ZnVu Y3Rpb24oYSl7Zm9yKHZhciBiPXkuZG9jLnF1ZXJ5U2VsZWN0b3JBbGwoYSks ZD0oYy5zZXR8fEFycmF5KSgpLGU9MDtlPGIubGVuZ3RoO2UrKylkLnB1c2go dyhiW2VdKSk7cmV0dXJuIGR9LHNldEludGVydmFsKGZ1bmN0aW9uKCl7Zm9y KHZhciBhIGluIFYpaWYoVlt6XShhKSl7dmFyIGI9VlthXSxjPWIubm9kZTso InN2ZyIhPWIudHlwZSYmIWMub3duZXJTVkdFbGVtZW50fHwic3ZnIj09Yi50 eXBlJiYoIWMucGFyZW50Tm9kZXx8Im93bmVyU1ZHRWxlbWVudCJpbiBjLnBh cmVudE5vZGUmJiFjLm93bmVyU1ZHRWxlbWVudCkpJiZkZWxldGUgVlthXX19 LDFlNCkscy5wcm90b3R5cGUuYXR0cj1mdW5jdGlvbihhLGMpe3ZhciBkPXRo aXMsZj1kLm5vZGU7aWYoIWEpe2lmKDEhPWYubm9kZVR5cGUpcmV0dXJue3Rl eHQ6Zi5ub2RlVmFsdWV9O2Zvcih2YXIgZz1mLmF0dHJpYnV0ZXMsaD17fSxp PTAsaj1nLmxlbmd0aDtqPmk7aSsrKWhbZ1tpXS5ub2RlTmFtZV09Z1tpXS5u b2RlVmFsdWU7cmV0dXJuIGh9aWYoZShhLCJzdHJpbmciKSl7aWYoIShhcmd1 bWVudHMubGVuZ3RoPjEpKXJldHVybiBiKCJzbmFwLnV0aWwuZ2V0YXR0ci4i K2EsZCkuZmlyc3REZWZpbmVkKCk7dmFyIGs9e307a1thXT1jLGE9a31mb3Io dmFyIGwgaW4gYSlhW3pdKGwpJiZiKCJzbmFwLnV0aWwuYXR0ci4iK2wsZCxh W2xdKTtyZXR1cm4gZH0sYy5wYXJzZT1mdW5jdGlvbihhKXt2YXIgYj15LmRv Yy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksYz0hMCxkPXkuZG9jLmNyZWF0 ZUVsZW1lbnQoImRpdiIpO2lmKGE9QShhKSxhLm1hdGNoKC9eXHMqPFxzKnN2 Zyg/OlxzfD4pLyl8fChhPSI8c3ZnPiIrYSsiPC9zdmc+IixjPSExKSxkLmlu bmVySFRNTD1hLGE9ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3ZnIilbMF0p aWYoYyliPWE7ZWxzZSBmb3IoO2EuZmlyc3RDaGlsZDspYi5hcHBlbmRDaGls ZChhLmZpcnN0Q2hpbGQpO3JldHVybiBuZXcgdChiKX0sYy5mcmFnbWVudD1m dW5jdGlvbigpe2Zvcih2YXIgYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2Fs bChhcmd1bWVudHMsMCksYj15LmRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50 KCksZD0wLGU9YS5sZW5ndGg7ZT5kO2QrKyl7dmFyIGY9YVtkXTtmLm5vZGUm JmYubm9kZS5ub2RlVHlwZSYmYi5hcHBlbmRDaGlsZChmLm5vZGUpLGYubm9k ZVR5cGUmJmIuYXBwZW5kQ2hpbGQoZiksInN0cmluZyI9PXR5cGVvZiBmJiZi LmFwcGVuZENoaWxkKGMucGFyc2UoZikubm9kZSl9cmV0dXJuIG5ldyB0KGIp fSxjLl8ubWFrZT11LGMuXy53cmFwPXcsdi5wcm90b3R5cGUuZWw9ZnVuY3Rp b24oYSxiKXt2YXIgYz11KGEsdGhpcy5ub2RlKTtyZXR1cm4gYiYmYy5hdHRy KGIpLGN9LHMucHJvdG90eXBlLmNoaWxkcmVuPWZ1bmN0aW9uKCl7Zm9yKHZh ciBhPVtdLGI9dGhpcy5ub2RlLmNoaWxkTm9kZXMsZD0wLGU9Yi5sZW5ndGg7 ZT5kO2QrKylhW2RdPWMoYltkXSk7cmV0dXJuIGF9LHMucHJvdG90eXBlLnRv SlNPTj1mdW5jdGlvbigpe3ZhciBhPVtdO3JldHVybiB4KFt0aGlzXSxhKSxh WzBdfSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ciIsZnVuY3Rpb24oKXt2YXIg YT1iLm50KCk7YT1hLnN1YnN0cmluZyhhLmxhc3RJbmRleE9mKCIuIikrMSk7 dmFyIGM9YS5yZXBsYWNlKC9bQS1aXS9nLGZ1bmN0aW9uKGEpe3JldHVybiIt IithLnRvTG93ZXJDYXNlKCl9KTtyZXR1cm4gYmJbel0oYyk/dGhpcy5ub2Rl Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0 aGlzLm5vZGUsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShjKTpkKHRoaXMubm9k ZSxhKX0pO3ZhciBiYj17ImFsaWdubWVudC1iYXNlbGluZSI6MCwiYmFzZWxp bmUtc2hpZnQiOjAsY2xpcDowLCJjbGlwLXBhdGgiOjAsImNsaXAtcnVsZSI6 MCxjb2xvcjowLCJjb2xvci1pbnRlcnBvbGF0aW9uIjowLCJjb2xvci1pbnRl cnBvbGF0aW9uLWZpbHRlcnMiOjAsImNvbG9yLXByb2ZpbGUiOjAsImNvbG9y LXJlbmRlcmluZyI6MCxjdXJzb3I6MCxkaXJlY3Rpb246MCxkaXNwbGF5OjAs ImRvbWluYW50LWJhc2VsaW5lIjowLCJlbmFibGUtYmFja2dyb3VuZCI6MCxm aWxsOjAsImZpbGwtb3BhY2l0eSI6MCwiZmlsbC1ydWxlIjowLGZpbHRlcjow LCJmbG9vZC1jb2xvciI6MCwiZmxvb2Qtb3BhY2l0eSI6MCxmb250OjAsImZv bnQtZmFtaWx5IjowLCJmb250LXNpemUiOjAsImZvbnQtc2l6ZS1hZGp1c3Qi OjAsImZvbnQtc3RyZXRjaCI6MCwiZm9udC1zdHlsZSI6MCwiZm9udC12YXJp YW50IjowLCJmb250LXdlaWdodCI6MCwiZ2x5cGgtb3JpZW50YXRpb24taG9y aXpvbnRhbCI6MCwiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwiOjAsImlt YWdlLXJlbmRlcmluZyI6MCxrZXJuaW5nOjAsImxldHRlci1zcGFjaW5nIjow LCJsaWdodGluZy1jb2xvciI6MCxtYXJrZXI6MCwibWFya2VyLWVuZCI6MCwi bWFya2VyLW1pZCI6MCwibWFya2VyLXN0YXJ0IjowLG1hc2s6MCxvcGFjaXR5 OjAsb3ZlcmZsb3c6MCwicG9pbnRlci1ldmVudHMiOjAsInNoYXBlLXJlbmRl cmluZyI6MCwic3RvcC1jb2xvciI6MCwic3RvcC1vcGFjaXR5IjowLHN0cm9r ZTowLCJzdHJva2UtZGFzaGFycmF5IjowLCJzdHJva2UtZGFzaG9mZnNldCI6 MCwic3Ryb2tlLWxpbmVjYXAiOjAsInN0cm9rZS1saW5lam9pbiI6MCwic3Ry b2tlLW1pdGVybGltaXQiOjAsInN0cm9rZS1vcGFjaXR5IjowLCJzdHJva2Ut d2lkdGgiOjAsInRleHQtYW5jaG9yIjowLCJ0ZXh0LWRlY29yYXRpb24iOjAs InRleHQtcmVuZGVyaW5nIjowLCJ1bmljb2RlLWJpZGkiOjAsdmlzaWJpbGl0 eTowLCJ3b3JkLXNwYWNpbmciOjAsIndyaXRpbmctbW9kZSI6MH07Yi5vbigi c25hcC51dGlsLmF0dHIiLGZ1bmN0aW9uKGEpe3ZhciBjPWIubnQoKSxlPXt9 O2M9Yy5zdWJzdHJpbmcoYy5sYXN0SW5kZXhPZigiLiIpKzEpLGVbY109YTt2 YXIgZj1jLnJlcGxhY2UoLy0oXHcpL2dpLGZ1bmN0aW9uKGEsYil7cmV0dXJu IGIudG9VcHBlckNhc2UoKX0pLGc9Yy5yZXBsYWNlKC9bQS1aXS9nLGZ1bmN0 aW9uKGEpe3JldHVybiItIithLnRvTG93ZXJDYXNlKCl9KTtiYlt6XShnKT90 aGlzLm5vZGUuc3R5bGVbZl09bnVsbD09YT9JOmE6ZCh0aGlzLm5vZGUsZSl9 KSxmdW5jdGlvbigpe30odi5wcm90b3R5cGUpLGMuYWpheD1mdW5jdGlvbihh LGMsZCxmKXt2YXIgZz1uZXcgWE1MSHR0cFJlcXVlc3QsaD1TKCk7aWYoZyl7 aWYoZShjLCJmdW5jdGlvbiIpKWY9ZCxkPWMsYz1udWxsO2Vsc2UgaWYoZShj LCJvYmplY3QiKSl7dmFyIGk9W107Zm9yKHZhciBqIGluIGMpYy5oYXNPd25Q cm9wZXJ0eShqKSYmaS5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChqKSsiPSIr ZW5jb2RlVVJJQ29tcG9uZW50KGNbal0pKTtjPWkuam9pbigiJiIpfXJldHVy biBnLm9wZW4oYz8iUE9TVCI6IkdFVCIsYSwhMCksYyYmKGcuc2V0UmVxdWVz dEhlYWRlcigiWC1SZXF1ZXN0ZWQtV2l0aCIsIlhNTEh0dHBSZXF1ZXN0Iiks Zy5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCJhcHBsaWNhdGlv bi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSksZCYmKGIub25jZSgic25hcC5h amF4LiIraCsiLjAiLGQpLGIub25jZSgic25hcC5hamF4LiIraCsiLjIwMCIs ZCksYi5vbmNlKCJzbmFwLmFqYXguIitoKyIuMzA0IixkKSksZy5vbnJlYWR5 c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXs0PT1nLnJlYWR5U3RhdGUmJmIoInNu YXAuYWpheC4iK2grIi4iK2cuc3RhdHVzLGYsZyl9LDQ9PWcucmVhZHlTdGF0 ZT9nOihnLnNlbmQoYyksZyl9fSxjLmxvYWQ9ZnVuY3Rpb24oYSxiLGQpe2Mu YWpheChhLGZ1bmN0aW9uKGEpe3ZhciBlPWMucGFyc2UoYS5yZXNwb25zZVRl eHQpO2Q/Yi5jYWxsKGQsZSk6YihlKX0pfTt2YXIgY2I9ZnVuY3Rpb24oYSl7 dmFyIGI9YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxjPWEub3duZXJEb2N1 bWVudCxkPWMuYm9keSxlPWMuZG9jdW1lbnRFbGVtZW50LGY9ZS5jbGllbnRU b3B8fGQuY2xpZW50VG9wfHwwLGg9ZS5jbGllbnRMZWZ0fHxkLmNsaWVudExl ZnR8fDAsaT1iLnRvcCsoZy53aW4ucGFnZVlPZmZzZXR8fGUuc2Nyb2xsVG9w fHxkLnNjcm9sbFRvcCktZixqPWIubGVmdCsoZy53aW4ucGFnZVhPZmZzZXR8 fGUuc2Nyb2xsTGVmdHx8ZC5zY3JvbGxMZWZ0KS1oO3JldHVybnt5OmkseDpq fX07cmV0dXJuIGMuZ2V0RWxlbWVudEJ5UG9pbnQ9ZnVuY3Rpb24oYSxiKXt2 YXIgYz10aGlzLGQ9KGMuY2FudmFzLHkuZG9jLmVsZW1lbnRGcm9tUG9pbnQo YSxiKSk7aWYoeS53aW4ub3BlcmEmJiJzdmciPT1kLnRhZ05hbWUpe3ZhciBl PWNiKGQpLGY9ZC5jcmVhdGVTVkdSZWN0KCk7Zi54PWEtZS54LGYueT1iLWUu eSxmLndpZHRoPWYuaGVpZ2h0PTE7dmFyIGc9ZC5nZXRJbnRlcnNlY3Rpb25M aXN0KGYsbnVsbCk7Zy5sZW5ndGgmJihkPWdbZy5sZW5ndGgtMV0pfXJldHVy biBkP3coZCk6bnVsbH0sYy5wbHVnaW49ZnVuY3Rpb24oYSl7YShjLHMsdix5 LHQpfSx5Lndpbi5TbmFwPWMsY30oYXx8dGhpcyk7cmV0dXJuIGQucGx1Z2lu KGZ1bmN0aW9uKGQsZSxmLGcsaCl7ZnVuY3Rpb24gaShhLGIpe2lmKG51bGw9 PWIpe3ZhciBjPSEwO2lmKGI9YS5ub2RlLmdldEF0dHJpYnV0ZSgibGluZWFy R3JhZGllbnQiPT1hLnR5cGV8fCJyYWRpYWxHcmFkaWVudCI9PWEudHlwZT8i Z3JhZGllbnRUcmFuc2Zvcm0iOiJwYXR0ZXJuIj09YS50eXBlPyJwYXR0ZXJu VHJhbnNmb3JtIjoidHJhbnNmb3JtIiksIWIpcmV0dXJuIG5ldyBkLk1hdHJp eDtiPWQuXy5zdmdUcmFuc2Zvcm0yc3RyaW5nKGIpfWVsc2UgYj1kLl8ucmdU cmFuc2Zvcm0udGVzdChiKT9vKGIpLnJlcGxhY2UoL1wuezN9fFx1MjAyNi9n LGEuXy50cmFuc2Zvcm18fCIiKTpkLl8uc3ZnVHJhbnNmb3JtMnN0cmluZyhi KSxuKGIsImFycmF5IikmJihiPWQucGF0aD9kLnBhdGgudG9TdHJpbmcuY2Fs bChiKTpvKGIpKSxhLl8udHJhbnNmb3JtPWI7dmFyIGU9ZC5fLnRyYW5zZm9y bTJtYXRyaXgoYixhLmdldEJCb3goMSkpO3JldHVybiBjP2U6dm9pZChhLm1h dHJpeD1lKX1mdW5jdGlvbiBqKGEpe2Z1bmN0aW9uIGIoYSxiKXt2YXIgYz1x KGEubm9kZSxiKTtjPWMmJmMubWF0Y2goZiksYz1jJiZjWzJdLGMmJiIjIj09 Yy5jaGFyQXQoKSYmKGM9Yy5zdWJzdHJpbmcoMSksYyYmKGhbY109KGhbY118 fFtdKS5jb25jYXQoZnVuY3Rpb24oYyl7dmFyIGQ9e307ZFtiXT1VUkwoYyks cShhLm5vZGUsZCl9KSkpfWZ1bmN0aW9uIGMoYSl7dmFyIGI9cShhLm5vZGUs InhsaW5rOmhyZWYiKTtiJiYiIyI9PWIuY2hhckF0KCkmJihiPWIuc3Vic3Ry aW5nKDEpLGImJihoW2JdPShoW2JdfHxbXSkuY29uY2F0KGZ1bmN0aW9uKGIp e2EuYXR0cigieGxpbms6aHJlZiIsIiMiK2IpfSkpKX1mb3IodmFyIGQsZT1h LnNlbGVjdEFsbCgiKiIpLGY9L15ccyp1cmxcKCgifCd8KSguKilcMVwpXHMq JC8sZz1bXSxoPXt9LGk9MCxqPWUubGVuZ3RoO2o+aTtpKyspe2Q9ZVtpXSxi KGQsImZpbGwiKSxiKGQsInN0cm9rZSIpLGIoZCwiZmlsdGVyIiksYihkLCJt YXNrIiksYihkLCJjbGlwLXBhdGgiKSxjKGQpO3ZhciBrPXEoZC5ub2RlLCJp ZCIpO2smJihxKGQubm9kZSx7aWQ6ZC5pZH0pLGcucHVzaCh7b2xkOmssaWQ6 ZC5pZH0pKX1mb3IoaT0wLGo9Zy5sZW5ndGg7aj5pO2krKyl7dmFyIGw9aFtn W2ldLm9sZF07aWYobClmb3IodmFyIG09MCxuPWwubGVuZ3RoO24+bTttKysp bFttXShnW2ldLmlkKX19ZnVuY3Rpb24gayhhLGIsYyl7cmV0dXJuIGZ1bmN0 aW9uKGQpe3ZhciBlPWQuc2xpY2UoYSxiKTtyZXR1cm4gMT09ZS5sZW5ndGgm JihlPWVbMF0pLGM/YyhlKTplfX1mdW5jdGlvbiBsKGEpe3JldHVybiBmdW5j dGlvbigpe3ZhciBiPWE/IjwiK3RoaXMudHlwZToiIixjPXRoaXMubm9kZS5h dHRyaWJ1dGVzLGQ9dGhpcy5ub2RlLmNoaWxkTm9kZXM7aWYoYSlmb3IodmFy IGU9MCxmPWMubGVuZ3RoO2Y+ZTtlKyspYis9IiAiK2NbZV0ubmFtZSsnPSIn K2NbZV0udmFsdWUucmVwbGFjZSgvIi9nLCdcXCInKSsnIic7aWYoZC5sZW5n dGgpe2ZvcihhJiYoYis9Ij4iKSxlPTAsZj1kLmxlbmd0aDtmPmU7ZSsrKTM9 PWRbZV0ubm9kZVR5cGU/Yis9ZFtlXS5ub2RlVmFsdWU6MT09ZFtlXS5ub2Rl VHlwZSYmKGIrPXUoZFtlXSkudG9TdHJpbmcoKSk7YSYmKGIrPSI8LyIrdGhp cy50eXBlKyI+Iil9ZWxzZSBhJiYoYis9Ii8+Iik7cmV0dXJuIGJ9fXZhciBt PWUucHJvdG90eXBlLG49ZC5pcyxvPVN0cmluZyxwPWQuX3VuaXQycHgscT1k Ll8uJCxyPWQuXy5tYWtlLHM9ZC5fLmdldFNvbWVEZWZzLHQ9Imhhc093blBy b3BlcnR5Iix1PWQuXy53cmFwO20uZ2V0QkJveD1mdW5jdGlvbihhKXtpZigh ZC5NYXRyaXh8fCFkLnBhdGgpcmV0dXJuIHRoaXMubm9kZS5nZXRCQm94KCk7 dmFyIGI9dGhpcyxjPW5ldyBkLk1hdHJpeDtpZihiLnJlbW92ZWQpcmV0dXJu IGQuXy5ib3goKTtmb3IoOyJ1c2UiPT1iLnR5cGU7KWlmKGF8fChjPWMuYWRk KGIudHJhbnNmb3JtKCkubG9jYWxNYXRyaXgudHJhbnNsYXRlKGIuYXR0cigi eCIpfHwwLGIuYXR0cigieSIpfHwwKSkpLGIub3JpZ2luYWwpYj1iLm9yaWdp bmFsO2Vsc2V7dmFyIGU9Yi5hdHRyKCJ4bGluazpocmVmIik7Yj1iLm9yaWdp bmFsPWIubm9kZS5vd25lckRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUuc3Vi c3RyaW5nKGUuaW5kZXhPZigiIyIpKzEpKX12YXIgZj1iLl8sZz1kLnBhdGgu Z2V0W2IudHlwZV18fGQucGF0aC5nZXQuZGVmbHQ7dHJ5e3JldHVybiBhPyhm LmJib3h3dD1nP2QucGF0aC5nZXRCQm94KGIucmVhbFBhdGg9ZyhiKSk6ZC5f LmJveChiLm5vZGUuZ2V0QkJveCgpKSxkLl8uYm94KGYuYmJveHd0KSk6KGIu cmVhbFBhdGg9ZyhiKSxiLm1hdHJpeD1iLnRyYW5zZm9ybSgpLmxvY2FsTWF0 cml4LGYuYmJveD1kLnBhdGguZ2V0QkJveChkLnBhdGgubWFwKGIucmVhbFBh dGgsYy5hZGQoYi5tYXRyaXgpKSksZC5fLmJveChmLmJib3gpKX1jYXRjaCho KXtyZXR1cm4gZC5fLmJveCgpfX07dmFyIHY9ZnVuY3Rpb24oKXtyZXR1cm4g dGhpcy5zdHJpbmd9O20udHJhbnNmb3JtPWZ1bmN0aW9uKGEpe3ZhciBiPXRo aXMuXztpZihudWxsPT1hKXtmb3IodmFyIGMsZT10aGlzLGY9bmV3IGQuTWF0 cml4KHRoaXMubm9kZS5nZXRDVE0oKSksZz1pKHRoaXMpLGg9W2ddLGo9bmV3 IGQuTWF0cml4LGs9Zy50b1RyYW5zZm9ybVN0cmluZygpLGw9byhnKT09byh0 aGlzLm1hdHJpeCk/byhiLnRyYW5zZm9ybSk6azsic3ZnIiE9ZS50eXBlJiYo ZT1lLnBhcmVudCgpKTspaC5wdXNoKGkoZSkpO2ZvcihjPWgubGVuZ3RoO2Mt LTspai5hZGQoaFtjXSk7cmV0dXJue3N0cmluZzpsLGdsb2JhbE1hdHJpeDpm LHRvdGFsTWF0cml4OmosbG9jYWxNYXRyaXg6ZyxkaWZmTWF0cml4OmYuY2xv bmUoKS5hZGQoZy5pbnZlcnQoKSksZ2xvYmFsOmYudG9UcmFuc2Zvcm1TdHJp bmcoKSx0b3RhbDpqLnRvVHJhbnNmb3JtU3RyaW5nKCksbG9jYWw6ayx0b1N0 cmluZzp2fX1yZXR1cm4gYSBpbnN0YW5jZW9mIGQuTWF0cml4Pyh0aGlzLm1h dHJpeD1hLHRoaXMuXy50cmFuc2Zvcm09YS50b1RyYW5zZm9ybVN0cmluZygp KTppKHRoaXMsYSksdGhpcy5ub2RlJiYoImxpbmVhckdyYWRpZW50Ij09dGhp cy50eXBlfHwicmFkaWFsR3JhZGllbnQiPT10aGlzLnR5cGU/cSh0aGlzLm5v ZGUse2dyYWRpZW50VHJhbnNmb3JtOnRoaXMubWF0cml4fSk6InBhdHRlcm4i PT10aGlzLnR5cGU/cSh0aGlzLm5vZGUse3BhdHRlcm5UcmFuc2Zvcm06dGhp cy5tYXRyaXh9KTpxKHRoaXMubm9kZSx7dHJhbnNmb3JtOnRoaXMubWF0cml4 fSkpLHRoaXN9LG0ucGFyZW50PWZ1bmN0aW9uKCl7cmV0dXJuIHUodGhpcy5u b2RlLnBhcmVudE5vZGUpfSxtLmFwcGVuZD1tLmFkZD1mdW5jdGlvbihhKXtp ZihhKXtpZigic2V0Ij09YS50eXBlKXt2YXIgYj10aGlzO3JldHVybiBhLmZv ckVhY2goZnVuY3Rpb24oYSl7Yi5hZGQoYSl9KSx0aGlzfWE9dShhKSx0aGlz Lm5vZGUuYXBwZW5kQ2hpbGQoYS5ub2RlKSxhLnBhcGVyPXRoaXMucGFwZXJ9 cmV0dXJuIHRoaXN9LG0uYXBwZW5kVG89ZnVuY3Rpb24oYSl7cmV0dXJuIGEm JihhPXUoYSksYS5hcHBlbmQodGhpcykpLHRoaXN9LG0ucHJlcGVuZD1mdW5j dGlvbihhKXtpZihhKXtpZigic2V0Ij09YS50eXBlKXt2YXIgYixjPXRoaXM7 cmV0dXJuIGEuZm9yRWFjaChmdW5jdGlvbihhKXtiP2IuYWZ0ZXIoYSk6Yy5w cmVwZW5kKGEpLGI9YX0pLHRoaXN9YT11KGEpO3ZhciBkPWEucGFyZW50KCk7 dGhpcy5ub2RlLmluc2VydEJlZm9yZShhLm5vZGUsdGhpcy5ub2RlLmZpcnN0 Q2hpbGQpLHRoaXMuYWRkJiZ0aGlzLmFkZCgpLGEucGFwZXI9dGhpcy5wYXBl cix0aGlzLnBhcmVudCgpJiZ0aGlzLnBhcmVudCgpLmFkZCgpLGQmJmQuYWRk KCl9cmV0dXJuIHRoaXN9LG0ucHJlcGVuZFRvPWZ1bmN0aW9uKGEpe3JldHVy biBhPXUoYSksYS5wcmVwZW5kKHRoaXMpLHRoaXN9LG0uYmVmb3JlPWZ1bmN0 aW9uKGEpe2lmKCJzZXQiPT1hLnR5cGUpe3ZhciBiPXRoaXM7cmV0dXJuIGEu Zm9yRWFjaChmdW5jdGlvbihhKXt2YXIgYz1hLnBhcmVudCgpO2Iubm9kZS5w YXJlbnROb2RlLmluc2VydEJlZm9yZShhLm5vZGUsYi5ub2RlKSxjJiZjLmFk ZCgpfSksdGhpcy5wYXJlbnQoKS5hZGQoKSx0aGlzfWE9dShhKTt2YXIgYz1h LnBhcmVudCgpO3JldHVybiB0aGlzLm5vZGUucGFyZW50Tm9kZS5pbnNlcnRC ZWZvcmUoYS5ub2RlLHRoaXMubm9kZSksdGhpcy5wYXJlbnQoKSYmdGhpcy5w YXJlbnQoKS5hZGQoKSxjJiZjLmFkZCgpLGEucGFwZXI9dGhpcy5wYXBlcix0 aGlzfSxtLmFmdGVyPWZ1bmN0aW9uKGEpe2E9dShhKTt2YXIgYj1hLnBhcmVu dCgpO3JldHVybiB0aGlzLm5vZGUubmV4dFNpYmxpbmc/dGhpcy5ub2RlLnBh cmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEubm9kZSx0aGlzLm5vZGUubmV4dFNp YmxpbmcpOnRoaXMubm9kZS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGEubm9k ZSksdGhpcy5wYXJlbnQoKSYmdGhpcy5wYXJlbnQoKS5hZGQoKSxiJiZiLmFk ZCgpLGEucGFwZXI9dGhpcy5wYXBlcix0aGlzfSxtLmluc2VydEJlZm9yZT1m dW5jdGlvbihhKXthPXUoYSk7dmFyIGI9dGhpcy5wYXJlbnQoKTtyZXR1cm4g YS5ub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMubm9kZSxhLm5v ZGUpLHRoaXMucGFwZXI9YS5wYXBlcixiJiZiLmFkZCgpLGEucGFyZW50KCkm JmEucGFyZW50KCkuYWRkKCksdGhpc30sbS5pbnNlcnRBZnRlcj1mdW5jdGlv bihhKXthPXUoYSk7dmFyIGI9dGhpcy5wYXJlbnQoKTtyZXR1cm4gYS5ub2Rl LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMubm9kZSxhLm5vZGUubmV4 dFNpYmxpbmcpLHRoaXMucGFwZXI9YS5wYXBlcixiJiZiLmFkZCgpLGEucGFy ZW50KCkmJmEucGFyZW50KCkuYWRkKCksdGhpc30sbS5yZW1vdmU9ZnVuY3Rp b24oKXt2YXIgYT10aGlzLnBhcmVudCgpO3JldHVybiB0aGlzLm5vZGUucGFy ZW50Tm9kZSYmdGhpcy5ub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhp cy5ub2RlKSxkZWxldGUgdGhpcy5wYXBlcix0aGlzLnJlbW92ZWQ9ITAsYSYm YS5hZGQoKSx0aGlzfSxtLnNlbGVjdD1mdW5jdGlvbihhKXtyZXR1cm4gdSh0 aGlzLm5vZGUucXVlcnlTZWxlY3RvcihhKSl9LG0uc2VsZWN0QWxsPWZ1bmN0 aW9uKGEpe2Zvcih2YXIgYj10aGlzLm5vZGUucXVlcnlTZWxlY3RvckFsbChh KSxjPShkLnNldHx8QXJyYXkpKCksZT0wO2U8Yi5sZW5ndGg7ZSsrKWMucHVz aCh1KGJbZV0pKTtyZXR1cm4gY30sbS5hc1BYPWZ1bmN0aW9uKGEsYil7cmV0 dXJuIG51bGw9PWImJihiPXRoaXMuYXR0cihhKSksK3AodGhpcyxhLGIpfSxt LnVzZT1mdW5jdGlvbigpe3ZhciBhLGI9dGhpcy5ub2RlLmlkO3JldHVybiBi fHwoYj10aGlzLmlkLHEodGhpcy5ub2RlLHtpZDpifSkpLGE9ImxpbmVhckdy YWRpZW50Ij09dGhpcy50eXBlfHwicmFkaWFsR3JhZGllbnQiPT10aGlzLnR5 cGV8fCJwYXR0ZXJuIj09dGhpcy50eXBlP3IodGhpcy50eXBlLHRoaXMubm9k ZS5wYXJlbnROb2RlKTpyKCJ1c2UiLHRoaXMubm9kZS5wYXJlbnROb2RlKSxx KGEubm9kZSx7InhsaW5rOmhyZWYiOiIjIitifSksYS5vcmlnaW5hbD10aGlz LGF9LG0uY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYT11KHRoaXMubm9kZS5jbG9u ZU5vZGUoITApKTtyZXR1cm4gcShhLm5vZGUsImlkIikmJnEoYS5ub2RlLHtp ZDphLmlkfSksaihhKSxhLmluc2VydEFmdGVyKHRoaXMpLGF9LG0udG9EZWZz PWZ1bmN0aW9uKCl7dmFyIGE9cyh0aGlzKTtyZXR1cm4gYS5hcHBlbmRDaGls ZCh0aGlzLm5vZGUpLHRoaXN9LG0ucGF0dGVybj1tLnRvUGF0dGVybj1mdW5j dGlvbihhLGIsYyxkKXt2YXIgZT1yKCJwYXR0ZXJuIixzKHRoaXMpKTtyZXR1 cm4gbnVsbD09YSYmKGE9dGhpcy5nZXRCQm94KCkpLG4oYSwib2JqZWN0Iikm JiJ4ImluIGEmJihiPWEueSxjPWEud2lkdGgsZD1hLmhlaWdodCxhPWEueCks cShlLm5vZGUse3g6YSx5OmIsd2lkdGg6YyxoZWlnaHQ6ZCxwYXR0ZXJuVW5p dHM6InVzZXJTcGFjZU9uVXNlIixpZDplLmlkLHZpZXdCb3g6W2EsYixjLGRd LmpvaW4oIiAiKX0pLGUubm9kZS5hcHBlbmRDaGlsZCh0aGlzLm5vZGUpLGV9 LG0ubWFya2VyPWZ1bmN0aW9uKGEsYixjLGQsZSxmKXt2YXIgZz1yKCJtYXJr ZXIiLHModGhpcykpO3JldHVybiBudWxsPT1hJiYoYT10aGlzLmdldEJCb3go KSksbihhLCJvYmplY3QiKSYmIngiaW4gYSYmKGI9YS55LGM9YS53aWR0aCxk PWEuaGVpZ2h0LGU9YS5yZWZYfHxhLmN4LGY9YS5yZWZZfHxhLmN5LGE9YS54 KSxxKGcubm9kZSx7dmlld0JveDpbYSxiLGMsZF0uam9pbigiICIpLG1hcmtl cldpZHRoOmMsbWFya2VySGVpZ2h0OmQsb3JpZW50OiJhdXRvIixyZWZYOmV8 fDAscmVmWTpmfHwwLGlkOmcuaWR9KSxnLm5vZGUuYXBwZW5kQ2hpbGQodGhp cy5ub2RlKSxnfTt2YXIgdz1mdW5jdGlvbihhLGIsZCxlKXsiZnVuY3Rpb24i IT10eXBlb2YgZHx8ZC5sZW5ndGh8fChlPWQsZD1jLmxpbmVhciksdGhpcy5h dHRyPWEsdGhpcy5kdXI9YixkJiYodGhpcy5lYXNpbmc9ZCksZSYmKHRoaXMu Y2FsbGJhY2s9ZSl9O2QuXy5BbmltYXRpb249dyxkLmFuaW1hdGlvbj1mdW5j dGlvbihhLGIsYyxkKXtyZXR1cm4gbmV3IHcoYSxiLGMsZCl9LG0uaW5Bbmlt PWZ1bmN0aW9uKCl7dmFyIGE9dGhpcyxiPVtdO2Zvcih2YXIgYyBpbiBhLmFu aW1zKWEuYW5pbXNbdF0oYykmJiFmdW5jdGlvbihhKXtiLnB1c2goe2FuaW06 bmV3IHcoYS5fYXR0cnMsYS5kdXIsYS5lYXNpbmcsYS5fY2FsbGJhY2spLG1p bmE6YSxjdXJTdGF0dXM6YS5zdGF0dXMoKSxzdGF0dXM6ZnVuY3Rpb24oYil7 cmV0dXJuIGEuc3RhdHVzKGIpfSxzdG9wOmZ1bmN0aW9uKCl7YS5zdG9wKCl9 fSl9KGEuYW5pbXNbY10pO3JldHVybiBifSxkLmFuaW1hdGU9ZnVuY3Rpb24o YSxkLGUsZixnLGgpeyJmdW5jdGlvbiIhPXR5cGVvZiBnfHxnLmxlbmd0aHx8 KGg9ZyxnPWMubGluZWFyKTt2YXIgaT1jLnRpbWUoKSxqPWMoYSxkLGksaStm LGMudGltZSxlLGcpO3JldHVybiBoJiZiLm9uY2UoIm1pbmEuZmluaXNoLiIr ai5pZCxoKSxqfSxtLnN0b3A9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5p bkFuaW0oKSxiPTAsYz1hLmxlbmd0aDtjPmI7YisrKWFbYl0uc3RvcCgpO3Jl dHVybiB0aGlzfSxtLmFuaW1hdGU9ZnVuY3Rpb24oYSxkLGUsZil7ImZ1bmN0 aW9uIiE9dHlwZW9mIGV8fGUubGVuZ3RofHwoZj1lLGU9Yy5saW5lYXIpLGEg aW5zdGFuY2VvZiB3JiYoZj1hLmNhbGxiYWNrLGU9YS5lYXNpbmcsZD1hLmR1 cixhPWEuYXR0cik7dmFyIGcsaCxpLGosbD1bXSxtPVtdLHA9e30scT10aGlz O2Zvcih2YXIgciBpbiBhKWlmKGFbdF0ocikpe3EuZXF1YWw/KGo9cS5lcXVh bChyLG8oYVtyXSkpLGc9ai5mcm9tLGg9ai50byxpPWouZik6KGc9K3EuYXR0 cihyKSxoPSthW3JdKTt2YXIgcz1uKGcsImFycmF5Iik/Zy5sZW5ndGg6MTtw W3JdPWsobC5sZW5ndGgsbC5sZW5ndGgrcyxpKSxsPWwuY29uY2F0KGcpLG09 bS5jb25jYXQoaCl9dmFyIHU9Yy50aW1lKCksdj1jKGwsbSx1LHUrZCxjLnRp bWUsZnVuY3Rpb24oYSl7dmFyIGI9e307Zm9yKHZhciBjIGluIHApcFt0XShj KSYmKGJbY109cFtjXShhKSk7cS5hdHRyKGIpfSxlKTtyZXR1cm4gcS5hbmlt c1t2LmlkXT12LHYuX2F0dHJzPWEsdi5fY2FsbGJhY2s9ZixiKCJzbmFwLmFu aW1jcmVhdGVkLiIrcS5pZCx2KSxiLm9uY2UoIm1pbmEuZmluaXNoLiIrdi5p ZCxmdW5jdGlvbigpe2RlbGV0ZSBxLmFuaW1zW3YuaWRdLGYmJmYuY2FsbChx KX0pLGIub25jZSgibWluYS5zdG9wLiIrdi5pZCxmdW5jdGlvbigpe2RlbGV0 ZSBxLmFuaW1zW3YuaWRdfSkscX07dmFyIHg9e307bS5kYXRhPWZ1bmN0aW9u KGEsYyl7dmFyIGU9eFt0aGlzLmlkXT14W3RoaXMuaWRdfHx7fTtpZigwPT1h cmd1bWVudHMubGVuZ3RoKXJldHVybiBiKCJzbmFwLmRhdGEuZ2V0LiIrdGhp cy5pZCx0aGlzLGUsbnVsbCksZTsKK2lmKDE9PWFyZ3VtZW50cy5sZW5ndGgp e2lmKGQuaXMoYSwib2JqZWN0Iikpe2Zvcih2YXIgZiBpbiBhKWFbdF0oZikm JnRoaXMuZGF0YShmLGFbZl0pO3JldHVybiB0aGlzfXJldHVybiBiKCJzbmFw LmRhdGEuZ2V0LiIrdGhpcy5pZCx0aGlzLGVbYV0sYSksZVthXX1yZXR1cm4g ZVthXT1jLGIoInNuYXAuZGF0YS5zZXQuIit0aGlzLmlkLHRoaXMsYyxhKSx0 aGlzfSxtLnJlbW92ZURhdGE9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGw9PWE/ eFt0aGlzLmlkXT17fTp4W3RoaXMuaWRdJiZkZWxldGUgeFt0aGlzLmlkXVth XSx0aGlzfSxtLm91dGVyU1ZHPW0udG9TdHJpbmc9bCgxKSxtLmlubmVyU1ZH PWwoKSxtLnRvRGF0YVVSTD1mdW5jdGlvbigpe2lmKGEmJmEuYnRvYSl7dmFy IGI9dGhpcy5nZXRCQm94KCksYz1kLmZvcm1hdCgnPHN2ZyB2ZXJzaW9uPSIx LjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6 eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSJ7 d2lkdGh9IiBoZWlnaHQ9IntoZWlnaHR9IiB2aWV3Qm94PSJ7eH0ge3l9IHt3 aWR0aH0ge2hlaWdodH0iPntjb250ZW50c308L3N2Zz4nLHt4OitiLngudG9G aXhlZCgzKSx5OitiLnkudG9GaXhlZCgzKSx3aWR0aDorYi53aWR0aC50b0Zp eGVkKDMpLGhlaWdodDorYi5oZWlnaHQudG9GaXhlZCgzKSxjb250ZW50czp0 aGlzLm91dGVyU1ZHKCl9KTtyZXR1cm4iZGF0YTppbWFnZS9zdmcreG1sO2Jh c2U2NCwiK2J0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGMpKSl9 fSxoLnByb3RvdHlwZS5zZWxlY3Q9bS5zZWxlY3QsaC5wcm90b3R5cGUuc2Vs ZWN0QWxsPW0uc2VsZWN0QWxsfSksZC5wbHVnaW4oZnVuY3Rpb24oYSl7ZnVu Y3Rpb24gYihhLGIsZCxlLGYsZyl7cmV0dXJuIG51bGw9PWImJiJbb2JqZWN0 IFNWR01hdHJpeF0iPT1jLmNhbGwoYSk/KHRoaXMuYT1hLmEsdGhpcy5iPWEu Yix0aGlzLmM9YS5jLHRoaXMuZD1hLmQsdGhpcy5lPWEuZSx2b2lkKHRoaXMu Zj1hLmYpKTp2b2lkKG51bGwhPWE/KHRoaXMuYT0rYSx0aGlzLmI9K2IsdGhp cy5jPStkLHRoaXMuZD0rZSx0aGlzLmU9K2YsdGhpcy5mPStnKToodGhpcy5h PTEsdGhpcy5iPTAsdGhpcy5jPTAsdGhpcy5kPTEsdGhpcy5lPTAsdGhpcy5m PTApKX12YXIgYz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGQ9U3RyaW5n LGU9TWF0aCxmPSIiOyFmdW5jdGlvbihjKXtmdW5jdGlvbiBnKGEpe3JldHVy biBhWzBdKmFbMF0rYVsxXSphWzFdfWZ1bmN0aW9uIGgoYSl7dmFyIGI9ZS5z cXJ0KGcoYSkpO2FbMF0mJihhWzBdLz1iKSxhWzFdJiYoYVsxXS89Yil9Yy5h ZGQ9ZnVuY3Rpb24oYSxjLGQsZSxmLGcpe3ZhciBoLGksaixrLGw9W1tdLFtd LFtdXSxtPVtbdGhpcy5hLHRoaXMuYyx0aGlzLmVdLFt0aGlzLmIsdGhpcy5k LHRoaXMuZl0sWzAsMCwxXV0sbj1bW2EsZCxmXSxbYyxlLGddLFswLDAsMV1d O2ZvcihhJiZhIGluc3RhbmNlb2YgYiYmKG49W1thLmEsYS5jLGEuZV0sW2Eu YixhLmQsYS5mXSxbMCwwLDFdXSksaD0wOzM+aDtoKyspZm9yKGk9MDszPmk7 aSsrKXtmb3Ioaz0wLGo9MDszPmo7aisrKWsrPW1baF1bal0qbltqXVtpXTts W2hdW2ldPWt9cmV0dXJuIHRoaXMuYT1sWzBdWzBdLHRoaXMuYj1sWzFdWzBd LHRoaXMuYz1sWzBdWzFdLHRoaXMuZD1sWzFdWzFdLHRoaXMuZT1sWzBdWzJd LHRoaXMuZj1sWzFdWzJdLHRoaXN9LGMuaW52ZXJ0PWZ1bmN0aW9uKCl7dmFy IGE9dGhpcyxjPWEuYSphLmQtYS5iKmEuYztyZXR1cm4gbmV3IGIoYS5kL2Ms LWEuYi9jLC1hLmMvYyxhLmEvYywoYS5jKmEuZi1hLmQqYS5lKS9jLChhLmIq YS5lLWEuYSphLmYpL2MpfSxjLmNsb25lPWZ1bmN0aW9uKCl7cmV0dXJuIG5l dyBiKHRoaXMuYSx0aGlzLmIsdGhpcy5jLHRoaXMuZCx0aGlzLmUsdGhpcy5m KX0sYy50cmFuc2xhdGU9ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5hZGQo MSwwLDAsMSxhLGIpfSxjLnNjYWxlPWZ1bmN0aW9uKGEsYixjLGQpe3JldHVy biBudWxsPT1iJiYoYj1hKSwoY3x8ZCkmJnRoaXMuYWRkKDEsMCwwLDEsYyxk KSx0aGlzLmFkZChhLDAsMCxiLDAsMCksKGN8fGQpJiZ0aGlzLmFkZCgxLDAs MCwxLC1jLC1kKSx0aGlzfSxjLnJvdGF0ZT1mdW5jdGlvbihiLGMsZCl7Yj1h LnJhZChiKSxjPWN8fDAsZD1kfHwwO3ZhciBmPStlLmNvcyhiKS50b0ZpeGVk KDkpLGc9K2Uuc2luKGIpLnRvRml4ZWQoOSk7cmV0dXJuIHRoaXMuYWRkKGYs ZywtZyxmLGMsZCksdGhpcy5hZGQoMSwwLDAsMSwtYywtZCl9LGMueD1mdW5j dGlvbihhLGIpe3JldHVybiBhKnRoaXMuYStiKnRoaXMuYyt0aGlzLmV9LGMu eT1mdW5jdGlvbihhLGIpe3JldHVybiBhKnRoaXMuYitiKnRoaXMuZCt0aGlz LmZ9LGMuZ2V0PWZ1bmN0aW9uKGEpe3JldHVybit0aGlzW2QuZnJvbUNoYXJD b2RlKDk3K2EpXS50b0ZpeGVkKDQpfSxjLnRvU3RyaW5nPWZ1bmN0aW9uKCl7 cmV0dXJuIm1hdHJpeCgiK1t0aGlzLmdldCgwKSx0aGlzLmdldCgxKSx0aGlz LmdldCgyKSx0aGlzLmdldCgzKSx0aGlzLmdldCg0KSx0aGlzLmdldCg1KV0u am9pbigpKyIpIn0sYy5vZmZzZXQ9ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5l LnRvRml4ZWQoNCksdGhpcy5mLnRvRml4ZWQoNCldfSxjLmRldGVybWluYW50 PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYSp0aGlzLmQtdGhpcy5iKnRoaXMu Y30sYy5zcGxpdD1mdW5jdGlvbigpe3ZhciBiPXt9O2IuZHg9dGhpcy5lLGIu ZHk9dGhpcy5mO3ZhciBjPVtbdGhpcy5hLHRoaXMuY10sW3RoaXMuYix0aGlz LmRdXTtiLnNjYWxleD1lLnNxcnQoZyhjWzBdKSksaChjWzBdKSxiLnNoZWFy PWNbMF1bMF0qY1sxXVswXStjWzBdWzFdKmNbMV1bMV0sY1sxXT1bY1sxXVsw XS1jWzBdWzBdKmIuc2hlYXIsY1sxXVsxXS1jWzBdWzFdKmIuc2hlYXJdLGIu c2NhbGV5PWUuc3FydChnKGNbMV0pKSxoKGNbMV0pLGIuc2hlYXIvPWIuc2Nh bGV5LHRoaXMuZGV0ZXJtaW5hbnQoKTwwJiYoYi5zY2FsZXg9LWIuc2NhbGV4 KTt2YXIgZD0tY1swXVsxXSxmPWNbMV1bMV07cmV0dXJuIDA+Zj8oYi5yb3Rh dGU9YS5kZWcoZS5hY29zKGYpKSwwPmQmJihiLnJvdGF0ZT0zNjAtYi5yb3Rh dGUpKTpiLnJvdGF0ZT1hLmRlZyhlLmFzaW4oZCkpLGIuaXNTaW1wbGU9ISgr Yi5zaGVhci50b0ZpeGVkKDkpfHxiLnNjYWxleC50b0ZpeGVkKDkpIT1iLnNj YWxleS50b0ZpeGVkKDkpJiZiLnJvdGF0ZSksYi5pc1N1cGVyU2ltcGxlPSEr Yi5zaGVhci50b0ZpeGVkKDkpJiZiLnNjYWxleC50b0ZpeGVkKDkpPT1iLnNj YWxleS50b0ZpeGVkKDkpJiYhYi5yb3RhdGUsYi5ub1JvdGF0aW9uPSErYi5z aGVhci50b0ZpeGVkKDkpJiYhYi5yb3RhdGUsYn0sYy50b1RyYW5zZm9ybVN0 cmluZz1mdW5jdGlvbihhKXt2YXIgYj1hfHx0aGlzLnNwbGl0KCk7cmV0dXJu K2Iuc2hlYXIudG9GaXhlZCg5KT8ibSIrW3RoaXMuZ2V0KDApLHRoaXMuZ2V0 KDEpLHRoaXMuZ2V0KDIpLHRoaXMuZ2V0KDMpLHRoaXMuZ2V0KDQpLHRoaXMu Z2V0KDUpXTooYi5zY2FsZXg9K2Iuc2NhbGV4LnRvRml4ZWQoNCksYi5zY2Fs ZXk9K2Iuc2NhbGV5LnRvRml4ZWQoNCksYi5yb3RhdGU9K2Iucm90YXRlLnRv Rml4ZWQoNCksKGIuZHh8fGIuZHk/InQiK1srYi5keC50b0ZpeGVkKDQpLCti LmR5LnRvRml4ZWQoNCldOmYpKygxIT1iLnNjYWxleHx8MSE9Yi5zY2FsZXk/ InMiK1tiLnNjYWxleCxiLnNjYWxleSwwLDBdOmYpKyhiLnJvdGF0ZT8iciIr WytiLnJvdGF0ZS50b0ZpeGVkKDQpLDAsMF06ZikpfX0oYi5wcm90b3R5cGUp LGEuTWF0cml4PWIsYS5tYXRyaXg9ZnVuY3Rpb24oYSxjLGQsZSxmLGcpe3Jl dHVybiBuZXcgYihhLGMsZCxlLGYsZyl9fSksZC5wbHVnaW4oZnVuY3Rpb24o YSxjLGQsZSxmKXtmdW5jdGlvbiBnKGQpe3JldHVybiBmdW5jdGlvbihlKXtp ZihiLnN0b3AoKSxlIGluc3RhbmNlb2YgZiYmMT09ZS5ub2RlLmNoaWxkTm9k ZXMubGVuZ3RoJiYoInJhZGlhbEdyYWRpZW50Ij09ZS5ub2RlLmZpcnN0Q2hp bGQudGFnTmFtZXx8ImxpbmVhckdyYWRpZW50Ij09ZS5ub2RlLmZpcnN0Q2hp bGQudGFnTmFtZXx8InBhdHRlcm4iPT1lLm5vZGUuZmlyc3RDaGlsZC50YWdO YW1lKSYmKGU9ZS5ub2RlLmZpcnN0Q2hpbGQsbih0aGlzKS5hcHBlbmRDaGls ZChlKSxlPWwoZSkpLGUgaW5zdGFuY2VvZiBjKWlmKCJyYWRpYWxHcmFkaWVu dCI9PWUudHlwZXx8ImxpbmVhckdyYWRpZW50Ij09ZS50eXBlfHwicGF0dGVy biI9PWUudHlwZSl7ZS5ub2RlLmlkfHxwKGUubm9kZSx7aWQ6ZS5pZH0pO3Zh ciBnPXEoZS5ub2RlLmlkKX1lbHNlIGc9ZS5hdHRyKGQpO2Vsc2UgaWYoZz1h LmNvbG9yKGUpLGcuZXJyb3Ipe3ZhciBoPWEobih0aGlzKS5vd25lclNWR0Vs ZW1lbnQpLmdyYWRpZW50KGUpO2g/KGgubm9kZS5pZHx8cChoLm5vZGUse2lk OmguaWR9KSxnPXEoaC5ub2RlLmlkKSk6Zz1lfWVsc2UgZz1yKGcpO3ZhciBp PXt9O2lbZF09ZyxwKHRoaXMubm9kZSxpKSx0aGlzLm5vZGUuc3R5bGVbZF09 dH19ZnVuY3Rpb24gaChhKXtiLnN0b3AoKSxhPT0rYSYmKGErPSJweCIpLHRo aXMubm9kZS5zdHlsZS5mb250U2l6ZT1hfWZ1bmN0aW9uIGkoYSl7Zm9yKHZh ciBiPVtdLGM9YS5jaGlsZE5vZGVzLGQ9MCxlPWMubGVuZ3RoO2U+ZDtkKysp e3ZhciBmPWNbZF07Mz09Zi5ub2RlVHlwZSYmYi5wdXNoKGYubm9kZVZhbHVl KSwidHNwYW4iPT1mLnRhZ05hbWUmJmIucHVzaCgxPT1mLmNoaWxkTm9kZXMu bGVuZ3RoJiYzPT1mLmZpcnN0Q2hpbGQubm9kZVR5cGU/Zi5maXJzdENoaWxk Lm5vZGVWYWx1ZTppKGYpKX1yZXR1cm4gYn1mdW5jdGlvbiBqKCl7cmV0dXJu IGIuc3RvcCgpLHRoaXMubm9kZS5zdHlsZS5mb250U2l6ZX12YXIgaz1hLl8u bWFrZSxsPWEuXy53cmFwLG09YS5pcyxuPWEuXy5nZXRTb21lRGVmcyxvPS9e dXJsXCgjPyhbXildKylcKSQvLHA9YS5fLiQscT1hLnVybCxyPVN0cmluZyxz PWEuXy5zZXBhcmF0b3IsdD0iIjtiLm9uKCJzbmFwLnV0aWwuYXR0ci5tYXNr IixmdW5jdGlvbihhKXtpZihhIGluc3RhbmNlb2YgY3x8YSBpbnN0YW5jZW9m IGYpe2lmKGIuc3RvcCgpLGEgaW5zdGFuY2VvZiBmJiYxPT1hLm5vZGUuY2hp bGROb2Rlcy5sZW5ndGgmJihhPWEubm9kZS5maXJzdENoaWxkLG4odGhpcyku YXBwZW5kQ2hpbGQoYSksYT1sKGEpKSwibWFzayI9PWEudHlwZSl2YXIgZD1h O2Vsc2UgZD1rKCJtYXNrIixuKHRoaXMpKSxkLm5vZGUuYXBwZW5kQ2hpbGQo YS5ub2RlKTshZC5ub2RlLmlkJiZwKGQubm9kZSx7aWQ6ZC5pZH0pLHAodGhp cy5ub2RlLHttYXNrOnEoZC5pZCl9KX19KSxmdW5jdGlvbihhKXtiLm9uKCJz bmFwLnV0aWwuYXR0ci5jbGlwIixhKSxiLm9uKCJzbmFwLnV0aWwuYXR0ci5j bGlwLXBhdGgiLGEpLGIub24oInNuYXAudXRpbC5hdHRyLmNsaXBQYXRoIixh KX0oZnVuY3Rpb24oYSl7aWYoYSBpbnN0YW5jZW9mIGN8fGEgaW5zdGFuY2Vv ZiBmKXtpZihiLnN0b3AoKSwiY2xpcFBhdGgiPT1hLnR5cGUpdmFyIGQ9YTtl bHNlIGQ9aygiY2xpcFBhdGgiLG4odGhpcykpLGQubm9kZS5hcHBlbmRDaGls ZChhLm5vZGUpLCFkLm5vZGUuaWQmJnAoZC5ub2RlLHtpZDpkLmlkfSk7cCh0 aGlzLm5vZGUseyJjbGlwLXBhdGgiOnEoZC5ub2RlLmlkfHxkLmlkKX0pfX0p LGIub24oInNuYXAudXRpbC5hdHRyLmZpbGwiLGcoImZpbGwiKSksYi5vbigi c25hcC51dGlsLmF0dHIuc3Ryb2tlIixnKCJzdHJva2UiKSk7dmFyIHU9L14o W2xyXSkoPzpcKChbXildKilcKSk/KC4qKSQvaTtiLm9uKCJzbmFwLnV0aWwu Z3JhZC5wYXJzZSIsZnVuY3Rpb24oYSl7YT1yKGEpO3ZhciBiPWEubWF0Y2go dSk7aWYoIWIpcmV0dXJuIG51bGw7dmFyIGM9YlsxXSxkPWJbMl0sZT1iWzNd O3JldHVybiBkPWQuc3BsaXQoL1xzKixccyovKS5tYXAoZnVuY3Rpb24oYSl7 cmV0dXJuK2E9PWE/K2E6YX0pLDE9PWQubGVuZ3RoJiYwPT1kWzBdJiYoZD1b XSksZT1lLnNwbGl0KCItIiksZT1lLm1hcChmdW5jdGlvbihhKXthPWEuc3Bs aXQoIjoiKTt2YXIgYj17Y29sb3I6YVswXX07cmV0dXJuIGFbMV0mJihiLm9m ZnNldD1wYXJzZUZsb2F0KGFbMV0pKSxifSkse3R5cGU6YyxwYXJhbXM6ZCxz dG9wczplfX0pLGIub24oInNuYXAudXRpbC5hdHRyLmQiLGZ1bmN0aW9uKGMp e2Iuc3RvcCgpLG0oYywiYXJyYXkiKSYmbShjWzBdLCJhcnJheSIpJiYoYz1h LnBhdGgudG9TdHJpbmcuY2FsbChjKSksYz1yKGMpLGMubWF0Y2goL1tydW9d L2kpJiYoYz1hLnBhdGgudG9BYnNvbHV0ZShjKSkscCh0aGlzLm5vZGUse2Q6 Y30pfSkoLTEpLGIub24oInNuYXAudXRpbC5hdHRyLiN0ZXh0IixmdW5jdGlv bihhKXtiLnN0b3AoKSxhPXIoYSk7Zm9yKHZhciBjPWUuZG9jLmNyZWF0ZVRl eHROb2RlKGEpO3RoaXMubm9kZS5maXJzdENoaWxkOyl0aGlzLm5vZGUucmVt b3ZlQ2hpbGQodGhpcy5ub2RlLmZpcnN0Q2hpbGQpO3RoaXMubm9kZS5hcHBl bmRDaGlsZChjKX0pKC0xKSxiLm9uKCJzbmFwLnV0aWwuYXR0ci5wYXRoIixm dW5jdGlvbihhKXtiLnN0b3AoKSx0aGlzLmF0dHIoe2Q6YX0pfSkoLTEpLGIu b24oInNuYXAudXRpbC5hdHRyLmNsYXNzIixmdW5jdGlvbihhKXtiLnN0b3Ao KSx0aGlzLm5vZGUuY2xhc3NOYW1lLmJhc2VWYWw9YX0pKC0xKSxiLm9uKCJz bmFwLnV0aWwuYXR0ci52aWV3Qm94IixmdW5jdGlvbihhKXt2YXIgYztjPW0o YSwib2JqZWN0IikmJiJ4ImluIGE/W2EueCxhLnksYS53aWR0aCxhLmhlaWdo dF0uam9pbigiICIpOm0oYSwiYXJyYXkiKT9hLmpvaW4oIiAiKTphLHAodGhp cy5ub2RlLHt2aWV3Qm94OmN9KSxiLnN0b3AoKX0pKC0xKSxiLm9uKCJzbmFw LnV0aWwuYXR0ci50cmFuc2Zvcm0iLGZ1bmN0aW9uKGEpe3RoaXMudHJhbnNm b3JtKGEpLGIuc3RvcCgpfSkoLTEpLGIub24oInNuYXAudXRpbC5hdHRyLnIi LGZ1bmN0aW9uKGEpeyJyZWN0Ij09dGhpcy50eXBlJiYoYi5zdG9wKCkscCh0 aGlzLm5vZGUse3J4OmEscnk6YX0pKX0pKC0xKSxiLm9uKCJzbmFwLnV0aWwu YXR0ci50ZXh0cGF0aCIsZnVuY3Rpb24oYSl7aWYoYi5zdG9wKCksInRleHQi PT10aGlzLnR5cGUpe3ZhciBkLGUsZjtpZighYSYmdGhpcy50ZXh0UGF0aCl7 Zm9yKGU9dGhpcy50ZXh0UGF0aDtlLm5vZGUuZmlyc3RDaGlsZDspdGhpcy5u b2RlLmFwcGVuZENoaWxkKGUubm9kZS5maXJzdENoaWxkKTtyZXR1cm4gZS5y ZW1vdmUoKSx2b2lkIGRlbGV0ZSB0aGlzLnRleHRQYXRofWlmKG0oYSwic3Ry aW5nIikpe3ZhciBnPW4odGhpcyksaD1sKGcucGFyZW50Tm9kZSkucGF0aChh KTtnLmFwcGVuZENoaWxkKGgubm9kZSksZD1oLmlkLGguYXR0cih7aWQ6ZH0p fWVsc2UgYT1sKGEpLGEgaW5zdGFuY2VvZiBjJiYoZD1hLmF0dHIoImlkIiks ZHx8KGQ9YS5pZCxhLmF0dHIoe2lkOmR9KSkpO2lmKGQpaWYoZT10aGlzLnRl eHRQYXRoLGY9dGhpcy5ub2RlLGUpZS5hdHRyKHsieGxpbms6aHJlZiI6IiMi K2R9KTtlbHNle2ZvcihlPXAoInRleHRQYXRoIix7InhsaW5rOmhyZWYiOiIj IitkfSk7Zi5maXJzdENoaWxkOyllLmFwcGVuZENoaWxkKGYuZmlyc3RDaGls ZCk7Zi5hcHBlbmRDaGlsZChlKSx0aGlzLnRleHRQYXRoPWwoZSl9fX0pKC0x KSxiLm9uKCJzbmFwLnV0aWwuYXR0ci50ZXh0IixmdW5jdGlvbihhKXtpZigi dGV4dCI9PXRoaXMudHlwZSl7Zm9yKHZhciBjPXRoaXMubm9kZSxkPWZ1bmN0 aW9uKGEpe3ZhciBiPXAoInRzcGFuIik7aWYobShhLCJhcnJheSIpKWZvcih2 YXIgYz0wO2M8YS5sZW5ndGg7YysrKWIuYXBwZW5kQ2hpbGQoZChhW2NdKSk7 ZWxzZSBiLmFwcGVuZENoaWxkKGUuZG9jLmNyZWF0ZVRleHROb2RlKGEpKTty ZXR1cm4gYi5ub3JtYWxpemUmJmIubm9ybWFsaXplKCksYn07Yy5maXJzdENo aWxkOyljLnJlbW92ZUNoaWxkKGMuZmlyc3RDaGlsZCk7Zm9yKHZhciBmPWQo YSk7Zi5maXJzdENoaWxkOyljLmFwcGVuZENoaWxkKGYuZmlyc3RDaGlsZCl9 Yi5zdG9wKCl9KSgtMSksYi5vbigic25hcC51dGlsLmF0dHIuZm9udFNpemUi LGgpKC0xKSxiLm9uKCJzbmFwLnV0aWwuYXR0ci5mb250LXNpemUiLGgpKC0x KSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci50cmFuc2Zvcm0iLGZ1bmN0aW9u KCl7cmV0dXJuIGIuc3RvcCgpLHRoaXMudHJhbnNmb3JtKCl9KSgtMSksYi5v bigic25hcC51dGlsLmdldGF0dHIudGV4dHBhdGgiLGZ1bmN0aW9uKCl7cmV0 dXJuIGIuc3RvcCgpLHRoaXMudGV4dFBhdGh9KSgtMSksZnVuY3Rpb24oKXtm dW5jdGlvbiBjKGMpe3JldHVybiBmdW5jdGlvbigpe2Iuc3RvcCgpO3ZhciBk PWUuZG9jLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcy5ub2Rl LG51bGwpLmdldFByb3BlcnR5VmFsdWUoIm1hcmtlci0iK2MpO3JldHVybiJu b25lIj09ZD9kOmEoZS5kb2MuZ2V0RWxlbWVudEJ5SWQoZC5tYXRjaChvKVsx XSkpfX1mdW5jdGlvbiBkKGEpe3JldHVybiBmdW5jdGlvbihjKXtiLnN0b3Ao KTt2YXIgZD0ibWFya2VyIithLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Eu c3Vic3RyaW5nKDEpO2lmKCIiPT1jfHwhYylyZXR1cm4gdm9pZCh0aGlzLm5v ZGUuc3R5bGVbZF09Im5vbmUiKTtpZigibWFya2VyIj09Yy50eXBlKXt2YXIg ZT1jLm5vZGUuaWQ7cmV0dXJuIGV8fHAoYy5ub2RlLHtpZDpjLmlkfSksdm9p ZCh0aGlzLm5vZGUuc3R5bGVbZF09cShlKSl9fX1iLm9uKCJzbmFwLnV0aWwu Z2V0YXR0ci5tYXJrZXItZW5kIixjKCJlbmQiKSkoLTEpLGIub24oInNuYXAu dXRpbC5nZXRhdHRyLm1hcmtlckVuZCIsYygiZW5kIikpKC0xKSxiLm9uKCJz bmFwLnV0aWwuZ2V0YXR0ci5tYXJrZXItc3RhcnQiLGMoInN0YXJ0IikpKC0x KSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5tYXJrZXJTdGFydCIsYygic3Rh cnQiKSkoLTEpLGIub24oInNuYXAudXRpbC5nZXRhdHRyLm1hcmtlci1taWQi LGMoIm1pZCIpKSgtMSksYi5vbigic25hcC51dGlsLmdldGF0dHIubWFya2Vy TWlkIixjKCJtaWQiKSkoLTEpLGIub24oInNuYXAudXRpbC5hdHRyLm1hcmtl ci1lbmQiLGQoImVuZCIpKSgtMSksYi5vbigic25hcC51dGlsLmF0dHIubWFy a2VyRW5kIixkKCJlbmQiKSkoLTEpLGIub24oInNuYXAudXRpbC5hdHRyLm1h cmtlci1zdGFydCIsZCgic3RhcnQiKSkoLTEpLGIub24oInNuYXAudXRpbC5h dHRyLm1hcmtlclN0YXJ0IixkKCJzdGFydCIpKSgtMSksYi5vbigic25hcC51 dGlsLmF0dHIubWFya2VyLW1pZCIsZCgibWlkIikpKC0xKSxiLm9uKCJzbmFw LnV0aWwuYXR0ci5tYXJrZXJNaWQiLGQoIm1pZCIpKSgtMSl9KCksYi5vbigi c25hcC51dGlsLmdldGF0dHIuciIsZnVuY3Rpb24oKXtyZXR1cm4icmVjdCI9 PXRoaXMudHlwZSYmcCh0aGlzLm5vZGUsInJ4Iik9PXAodGhpcy5ub2RlLCJy eSIpPyhiLnN0b3AoKSxwKHRoaXMubm9kZSwicngiKSk6dm9pZCAwfSkoLTEp LGIub24oInNuYXAudXRpbC5nZXRhdHRyLnRleHQiLGZ1bmN0aW9uKCl7aWYo InRleHQiPT10aGlzLnR5cGV8fCJ0c3BhbiI9PXRoaXMudHlwZSl7Yi5zdG9w KCk7dmFyIGE9aSh0aGlzLm5vZGUpO3JldHVybiAxPT1hLmxlbmd0aD9hWzBd OmF9fSkoLTEpLGIub24oInNuYXAudXRpbC5nZXRhdHRyLiN0ZXh0IixmdW5j dGlvbigpe3JldHVybiB0aGlzLm5vZGUudGV4dENvbnRlbnR9KSgtMSksYi5v bigic25hcC51dGlsLmdldGF0dHIudmlld0JveCIsZnVuY3Rpb24oKXtiLnN0 b3AoKTt2YXIgYz1wKHRoaXMubm9kZSwidmlld0JveCIpO3JldHVybiBjPyhj PWMuc3BsaXQocyksYS5fLmJveCgrY1swXSwrY1sxXSwrY1syXSwrY1szXSkp OnZvaWQgMH0pKC0xKSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5wb2ludHMi LGZ1bmN0aW9uKCl7dmFyIGE9cCh0aGlzLm5vZGUsInBvaW50cyIpO3JldHVy biBiLnN0b3AoKSxhP2Euc3BsaXQocyk6dm9pZCAwfSkoLTEpLGIub24oInNu YXAudXRpbC5nZXRhdHRyLnBhdGgiLGZ1bmN0aW9uKCl7dmFyIGE9cCh0aGlz Lm5vZGUsImQiKTtyZXR1cm4gYi5zdG9wKCksYX0pKC0xKSxiLm9uKCJzbmFw LnV0aWwuZ2V0YXR0ci5jbGFzcyIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5u b2RlLmNsYXNzTmFtZS5iYXNlVmFsfSkoLTEpLGIub24oInNuYXAudXRpbC5n ZXRhdHRyLmZvbnRTaXplIixqKSgtMSksYi5vbigic25hcC51dGlsLmdldGF0 dHIuZm9udC1zaXplIixqKSgtMSl9KSxkLnBsdWdpbihmdW5jdGlvbihhLGIp e3ZhciBjPS9cUysvZyxkPVN0cmluZyxlPWIucHJvdG90eXBlO2UuYWRkQ2xh c3M9ZnVuY3Rpb24oYSl7dmFyIGIsZSxmLGcsaD1kKGF8fCIiKS5tYXRjaChj KXx8W10saT10aGlzLm5vZGUsaj1pLmNsYXNzTmFtZS5iYXNlVmFsLGs9ai5t YXRjaChjKXx8W107aWYoaC5sZW5ndGgpe2ZvcihiPTA7Zj1oW2IrK107KWU9 ay5pbmRleE9mKGYpLH5lfHxrLnB1c2goZik7Zz1rLmpvaW4oIiAiKSxqIT1n JiYoaS5jbGFzc05hbWUuYmFzZVZhbD1nKX1yZXR1cm4gdGhpc30sZS5yZW1v dmVDbGFzcz1mdW5jdGlvbihhKXt2YXIgYixlLGYsZyxoPWQoYXx8IiIpLm1h dGNoKGMpfHxbXSxpPXRoaXMubm9kZSxqPWkuY2xhc3NOYW1lLmJhc2VWYWws az1qLm1hdGNoKGMpfHxbXTtpZihrLmxlbmd0aCl7Zm9yKGI9MDtmPWhbYisr XTspZT1rLmluZGV4T2YoZiksfmUmJmsuc3BsaWNlKGUsMSk7Zz1rLmpvaW4o IiAiKSxqIT1nJiYoaS5jbGFzc05hbWUuYmFzZVZhbD1nKX1yZXR1cm4gdGhp c30sZS5oYXNDbGFzcz1mdW5jdGlvbihhKXt2YXIgYj10aGlzLm5vZGUsZD1i LmNsYXNzTmFtZS5iYXNlVmFsLGU9ZC5tYXRjaChjKXx8W107cmV0dXJuISF+ ZS5pbmRleE9mKGEpfSxlLnRvZ2dsZUNsYXNzPWZ1bmN0aW9uKGEsYil7aWYo bnVsbCE9YilyZXR1cm4gYj90aGlzLmFkZENsYXNzKGEpOnRoaXMucmVtb3Zl Q2xhc3MoYSk7dmFyIGQsZSxmLGcsaD0oYXx8IiIpLm1hdGNoKGMpfHxbXSxp PXRoaXMubm9kZSxqPWkuY2xhc3NOYW1lLmJhc2VWYWwsaz1qLm1hdGNoKGMp fHxbXTtmb3IoZD0wO2Y9aFtkKytdOyllPWsuaW5kZXhPZihmKSx+ZT9rLnNw bGljZShlLDEpOmsucHVzaChmKTtyZXR1cm4gZz1rLmpvaW4oIiAiKSxqIT1n JiYoaS5jbGFzc05hbWUuYmFzZVZhbD1nKSx0aGlzfX0pLGQucGx1Z2luKGZ1 bmN0aW9uKCl7ZnVuY3Rpb24gYShhKXtyZXR1cm4gYX1mdW5jdGlvbiBjKGEp e3JldHVybiBmdW5jdGlvbihiKXtyZXR1cm4rYi50b0ZpeGVkKDMpK2F9fXZh ciBkPXsiKyI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYStifSwiLSI6ZnVuY3Rp b24oYSxiKXtyZXR1cm4gYS1ifSwiLyI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4g YS9ifSwiKiI6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYSpifX0sZT1TdHJpbmcs Zj0vW2Etel0rJC9pLGc9L15ccyooWytcLVwvKl0pXHMqPVxzKihbXGQuZUUr XC1dKylccyooW15cZFxzXSspP1xzKiQvO2Iub24oInNuYXAudXRpbC5hdHRy IixmdW5jdGlvbihhKXt2YXIgYz1lKGEpLm1hdGNoKGcpO2lmKGMpe3ZhciBo PWIubnQoKSxpPWguc3Vic3RyaW5nKGgubGFzdEluZGV4T2YoIi4iKSsxKSxq PXRoaXMuYXR0cihpKSxrPXt9O2Iuc3RvcCgpO3ZhciBsPWNbM118fCIiLG09 ai5tYXRjaChmKSxuPWRbY1sxXV07aWYobSYmbT09bD9hPW4ocGFyc2VGbG9h dChqKSwrY1syXSk6KGo9dGhpcy5hc1BYKGkpLGE9bih0aGlzLmFzUFgoaSks dGhpcy5hc1BYKGksY1syXStsKSkpLGlzTmFOKGopfHxpc05hTihhKSlyZXR1 cm47a1tpXT1hLHRoaXMuYXR0cihrKX19KSgtMTApLGIub24oInNuYXAudXRp bC5lcXVhbCIsZnVuY3Rpb24oaCxpKXt2YXIgaj1lKHRoaXMuYXR0cihoKXx8 IiIpLGs9ZShpKS5tYXRjaChnKTtpZihrKXtiLnN0b3AoKTt2YXIgbD1rWzNd fHwiIixtPWoubWF0Y2goZiksbj1kW2tbMV1dO3JldHVybiBtJiZtPT1sP3tm cm9tOnBhcnNlRmxvYXQoaiksdG86bihwYXJzZUZsb2F0KGopLCtrWzJdKSxm OmMobSl9OihqPXRoaXMuYXNQWChoKSx7ZnJvbTpqLHRvOm4oaix0aGlzLmFz UFgoaCxrWzJdK2wpKSxmOmF9KX19KSgtMTApfSksZC5wbHVnaW4oZnVuY3Rp b24oYyxkLGUsZil7dmFyIGc9ZS5wcm90b3R5cGUsaD1jLmlzO2cucmVjdD1m dW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIGc7cmV0dXJuIG51bGw9PWYmJihm PWUpLGgoYSwib2JqZWN0IikmJiJbb2JqZWN0IE9iamVjdF0iPT1hP2c9YTpu dWxsIT1hJiYoZz17eDphLHk6Yix3aWR0aDpjLGhlaWdodDpkfSxudWxsIT1l JiYoZy5yeD1lLGcucnk9ZikpLHRoaXMuZWwoInJlY3QiLGcpfSxnLmNpcmNs ZT1mdW5jdGlvbihhLGIsYyl7dmFyIGQ7cmV0dXJuIGgoYSwib2JqZWN0Iikm JiJbb2JqZWN0IE9iamVjdF0iPT1hP2Q9YTpudWxsIT1hJiYoZD17Y3g6YSxj eTpiLHI6Y30pLHRoaXMuZWwoImNpcmNsZSIsZCl9O3ZhciBpPWZ1bmN0aW9u KCl7ZnVuY3Rpb24gYSgpe3RoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0 aGlzKX1yZXR1cm4gZnVuY3Rpb24oYixjKXt2YXIgZD1mLmRvYy5jcmVhdGVF bGVtZW50KCJpbWciKSxlPWYuZG9jLmJvZHk7ZC5zdHlsZS5jc3NUZXh0PSJw b3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi05OTk5ZW07dG9wOi05OTk5ZW0iLGQu b25sb2FkPWZ1bmN0aW9uKCl7Yy5jYWxsKGQpLGQub25sb2FkPWQub25lcnJv cj1udWxsLGUucmVtb3ZlQ2hpbGQoZCl9LGQub25lcnJvcj1hLGUuYXBwZW5k Q2hpbGQoZCksZC5zcmM9Yn19KCk7Zy5pbWFnZT1mdW5jdGlvbihhLGIsZCxl LGYpe3ZhciBnPXRoaXMuZWwoImltYWdlIik7aWYoaChhLCJvYmplY3QiKSYm InNyYyJpbiBhKWcuYXR0cihhKTtlbHNlIGlmKG51bGwhPWEpe3ZhciBqPXsi eGxpbms6aHJlZiI6YSxwcmVzZXJ2ZUFzcGVjdFJhdGlvOiJub25lIn07bnVs bCE9YiYmbnVsbCE9ZCYmKGoueD1iLGoueT1kKSxudWxsIT1lJiZudWxsIT1m PyhqLndpZHRoPWUsai5oZWlnaHQ9Zik6aShhLGZ1bmN0aW9uKCl7Yy5fLiQo Zy5ub2RlLHt3aWR0aDp0aGlzLm9mZnNldFdpZHRoLGhlaWdodDp0aGlzLm9m ZnNldEhlaWdodH0pfSksYy5fLiQoZy5ub2RlLGopfXJldHVybiBnfSxnLmVs bGlwc2U9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU7cmV0dXJuIGgoYSwib2Jq ZWN0IikmJiJbb2JqZWN0IE9iamVjdF0iPT1hP2U9YTpudWxsIT1hJiYoZT17 Y3g6YSxjeTpiLHJ4OmMscnk6ZH0pLHRoaXMuZWwoImVsbGlwc2UiLGUpfSxn LnBhdGg9ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIGgoYSwib2JqZWN0Iikm JiFoKGEsImFycmF5Iik/Yj1hOmEmJihiPXtkOmF9KSx0aGlzLmVsKCJwYXRo IixiKX0sZy5ncm91cD1nLmc9ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5lbCgi ZyIpO3JldHVybiAxPT1hcmd1bWVudHMubGVuZ3RoJiZhJiYhYS50eXBlP2Iu YXR0cihhKTphcmd1bWVudHMubGVuZ3RoJiZiLmFkZChBcnJheS5wcm90b3R5 cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpLGJ9LGcuc3ZnPWZ1bmN0aW9u KGEsYixjLGQsZSxmLGcsaSl7dmFyIGo9e307cmV0dXJuIGgoYSwib2JqZWN0 IikmJm51bGw9PWI/aj1hOihudWxsIT1hJiYoai54PWEpLG51bGwhPWImJihq Lnk9YiksbnVsbCE9YyYmKGoud2lkdGg9YyksbnVsbCE9ZCYmKGouaGVpZ2h0 PWQpLG51bGwhPWUmJm51bGwhPWYmJm51bGwhPWcmJm51bGwhPWkmJihqLnZp ZXdCb3g9W2UsZixnLGldKSksdGhpcy5lbCgic3ZnIixqKX0sZy5tYXNrPWZ1 bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWwoIm1hc2siKTtyZXR1cm4gMT09YXJn dW1lbnRzLmxlbmd0aCYmYSYmIWEudHlwZT9iLmF0dHIoYSk6YXJndW1lbnRz Lmxlbmd0aCYmYi5hZGQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJn dW1lbnRzLDApKSxifSxnLnB0cm49ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxp KXtpZihoKGEsIm9iamVjdCIpKXZhciBqPWE7ZWxzZSBqPXtwYXR0ZXJuVW5p dHM6InVzZXJTcGFjZU9uVXNlIn0sYSYmKGoueD1hKSxiJiYoai55PWIpLG51 bGwhPWMmJihqLndpZHRoPWMpLG51bGwhPWQmJihqLmhlaWdodD1kKSxqLnZp ZXdCb3g9bnVsbCE9ZSYmbnVsbCE9ZiYmbnVsbCE9ZyYmbnVsbCE9aT9bZSxm LGcsaV06W2F8fDAsYnx8MCxjfHwwLGR8fDBdO3JldHVybiB0aGlzLmVsKCJw YXR0ZXJuIixqKX0sZy51c2U9ZnVuY3Rpb24oYSl7cmV0dXJuIG51bGwhPWE/ KGEgaW5zdGFuY2VvZiBkJiYoYS5hdHRyKCJpZCIpfHxhLmF0dHIoe2lkOmMu Xy5pZChhKX0pLGE9YS5hdHRyKCJpZCIpKSwiIyI9PVN0cmluZyhhKS5jaGFy QXQoKSYmKGE9YS5zdWJzdHJpbmcoMSkpLHRoaXMuZWwoInVzZSIseyJ4bGlu azpocmVmIjoiIyIrYX0pKTpkLnByb3RvdHlwZS51c2UuY2FsbCh0aGlzKX0s Zy5zeW1ib2w9ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9e307cmV0dXJuIG51 bGwhPWEmJm51bGwhPWImJm51bGwhPWMmJm51bGwhPWQmJihlLnZpZXdCb3g9 W2EsYixjLGRdKSx0aGlzLmVsKCJzeW1ib2wiLGUpfSxnLnRleHQ9ZnVuY3Rp b24oYSxiLGMpe3ZhciBkPXt9O3JldHVybiBoKGEsIm9iamVjdCIpP2Q9YTpu dWxsIT1hJiYoZD17eDphLHk6Yix0ZXh0OmN8fCIifSksdGhpcy5lbCgidGV4 dCIsZCl9LGcubGluZT1mdW5jdGlvbihhLGIsYyxkKXt2YXIgZT17fTtyZXR1 cm4gaChhLCJvYmplY3QiKT9lPWE6bnVsbCE9YSYmKGU9e3gxOmEseDI6Yyx5 MTpiLHkyOmR9KSx0aGlzLmVsKCJsaW5lIixlKX0sZy5wb2x5bGluZT1mdW5j dGlvbihhKXthcmd1bWVudHMubGVuZ3RoPjEmJihhPUFycmF5LnByb3RvdHlw ZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSk7dmFyIGI9e307cmV0dXJuIGgo YSwib2JqZWN0IikmJiFoKGEsImFycmF5Iik/Yj1hOm51bGwhPWEmJihiPXtw b2ludHM6YX0pLHRoaXMuZWwoInBvbHlsaW5lIixiKX0sZy5wb2x5Z29uPWZ1 bmN0aW9uKGEpe2FyZ3VtZW50cy5sZW5ndGg+MSYmKGE9QXJyYXkucHJvdG90 eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKTt2YXIgYj17fTtyZXR1cm4g aChhLCJvYmplY3QiKSYmIWgoYSwiYXJyYXkiKT9iPWE6bnVsbCE9YSYmKGI9 e3BvaW50czphfSksdGhpcy5lbCgicG9seWdvbiIsYil9LGZ1bmN0aW9uKCl7 ZnVuY3Rpb24gZCgpe3JldHVybiB0aGlzLnNlbGVjdEFsbCgic3RvcCIpfWZ1 bmN0aW9uIGUoYSxiKXt2YXIgZD1rKCJzdG9wIiksZT17b2Zmc2V0OitiKyIl In07cmV0dXJuIGE9Yy5jb2xvcihhKSxlWyJzdG9wLWNvbG9yIl09YS5oZXgs YS5vcGFjaXR5PDEmJihlWyJzdG9wLW9wYWNpdHkiXT1hLm9wYWNpdHkpLGso ZCxlKSx0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoZCksdGhpc31mdW5jdGlvbiBm KCl7aWYoImxpbmVhckdyYWRpZW50Ij09dGhpcy50eXBlKXt2YXIgYT1rKHRo aXMubm9kZSwieDEiKXx8MCxiPWsodGhpcy5ub2RlLCJ4MiIpfHwxLGQ9ayh0 aGlzLm5vZGUsInkxIil8fDAsZT1rKHRoaXMubm9kZSwieTIiKXx8MDtyZXR1 cm4gYy5fLmJveChhLGQsbWF0aC5hYnMoYi1hKSxtYXRoLmFicyhlLWQpKX12 YXIgZj10aGlzLm5vZGUuY3h8fC41LGc9dGhpcy5ub2RlLmN5fHwuNSxoPXRo aXMubm9kZS5yfHwwO3JldHVybiBjLl8uYm94KGYtaCxnLWgsMipoLDIqaCl9 ZnVuY3Rpb24gaChhLGMpe2Z1bmN0aW9uIGQoYSxiKXtmb3IodmFyIGM9KGIt bCkvKGEtbSksZD1tO2E+ZDtkKyspZ1tkXS5vZmZzZXQ9KygrbCtjKihkLW0p KS50b0ZpeGVkKDIpO209YSxsPWJ9dmFyIGUsZj1iKCJzbmFwLnV0aWwuZ3Jh ZC5wYXJzZSIsbnVsbCxjKS5maXJzdERlZmluZWQoKTtpZighZilyZXR1cm4g bnVsbDtmLnBhcmFtcy51bnNoaWZ0KGEpLGU9ImwiPT1mLnR5cGUudG9Mb3dl ckNhc2UoKT9pLmFwcGx5KDAsZi5wYXJhbXMpOmouYXBwbHkoMCxmLnBhcmFt cyksZi50eXBlIT1mLnR5cGUudG9Mb3dlckNhc2UoKSYmayhlLm5vZGUse2dy YWRpZW50VW5pdHM6InVzZXJTcGFjZU9uVXNlIn0pO3ZhciBnPWYuc3RvcHMs aD1nLmxlbmd0aCxsPTAsbT0wO2gtLTtmb3IodmFyIG49MDtoPm47bisrKSJv ZmZzZXQiaW4gZ1tuXSYmZChuLGdbbl0ub2Zmc2V0KTtmb3IoZ1toXS5vZmZz ZXQ9Z1toXS5vZmZzZXR8fDEwMCxkKGgsZ1toXS5vZmZzZXQpLG49MDtoPj1u O24rKyl7dmFyIG89Z1tuXTtlLmFkZFN0b3Aoby5jb2xvcixvLm9mZnNldCl9 cmV0dXJuIGV9ZnVuY3Rpb24gaShhLGIsZyxoLGkpe3ZhciBqPWMuXy5tYWtl KCJsaW5lYXJHcmFkaWVudCIsYSk7cmV0dXJuIGouc3RvcHM9ZCxqLmFkZFN0 b3A9ZSxqLmdldEJCb3g9ZixudWxsIT1iJiZrKGoubm9kZSx7eDE6Yix5MTpn LHgyOmgseTI6aX0pLGp9ZnVuY3Rpb24gaihhLGIsZyxoLGksail7dmFyIGw9 Yy5fLm1ha2UoInJhZGlhbEdyYWRpZW50IixhKTtyZXR1cm4gbC5zdG9wcz1k LGwuYWRkU3RvcD1lLGwuZ2V0QkJveD1mLG51bGwhPWImJmsobC5ub2RlLHtj eDpiLGN5OmcscjpofSksbnVsbCE9aSYmbnVsbCE9aiYmayhsLm5vZGUse2Z4 OmksZnk6an0pLGx9dmFyIGs9Yy5fLiQ7Zy5ncmFkaWVudD1mdW5jdGlvbihh KXtyZXR1cm4gaCh0aGlzLmRlZnMsYSl9LGcuZ3JhZGllbnRMaW5lYXI9ZnVu Y3Rpb24oYSxiLGMsZCl7cmV0dXJuIGkodGhpcy5kZWZzLGEsYixjLGQpfSxn LmdyYWRpZW50UmFkaWFsPWZ1bmN0aW9uKGEsYixjLGQsZSl7cmV0dXJuIGoo dGhpcy5kZWZzLGEsYixjLGQsZSl9LGcudG9TdHJpbmc9ZnVuY3Rpb24oKXt2 YXIgYSxiPXRoaXMubm9kZS5vd25lckRvY3VtZW50LGQ9Yi5jcmVhdGVEb2N1 bWVudEZyYWdtZW50KCksZT1iLmNyZWF0ZUVsZW1lbnQoImRpdiIpLGY9dGhp cy5ub2RlLmNsb25lTm9kZSghMCk7cmV0dXJuIGQuYXBwZW5kQ2hpbGQoZSks ZS5hcHBlbmRDaGlsZChmKSxjLl8uJChmLHt4bWxuczoiaHR0cDovL3d3dy53 My5vcmcvMjAwMC9zdmcifSksYT1lLmlubmVySFRNTCxkLnJlbW92ZUNoaWxk KGQuZmlyc3RDaGlsZCksYX0sZy50b0RhdGFVUkw9ZnVuY3Rpb24oKXtyZXR1 cm4gYSYmYS5idG9hPyJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCIrYnRv YSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQodGhpcykpKTp2b2lkIDB9 LGcuY2xlYXI9ZnVuY3Rpb24oKXtmb3IodmFyIGEsYj10aGlzLm5vZGUuZmly c3RDaGlsZDtiOylhPWIubmV4dFNpYmxpbmcsImRlZnMiIT1iLnRhZ05hbWU/ Yi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGIpOmcuY2xlYXIuY2FsbCh7bm9k ZTpifSksYj1hfX0oKX0pLGQucGx1Z2luKGZ1bmN0aW9uKGEsYil7ZnVuY3Rp b24gYyhhKXt2YXIgYj1jLnBzPWMucHN8fHt9O3JldHVybiBiW2FdP2JbYV0u c2xlZXA9MTAwOmJbYV09e3NsZWVwOjEwMH0sc2V0VGltZW91dChmdW5jdGlv bigpe2Zvcih2YXIgYyBpbiBiKWJbS10oYykmJmMhPWEmJihiW2NdLnNsZWVw LS0sIWJbY10uc2xlZXAmJmRlbGV0ZSBiW2NdKX0pLGJbYV19ZnVuY3Rpb24g ZChhLGIsYyxkKXtyZXR1cm4gbnVsbD09YSYmKGE9Yj1jPWQ9MCksbnVsbD09 YiYmKGI9YS55LGM9YS53aWR0aCxkPWEuaGVpZ2h0LGE9YS54KSx7eDphLHk6 Yix3aWR0aDpjLHc6YyxoZWlnaHQ6ZCxoOmQseDI6YStjLHkyOmIrZCxjeDph K2MvMixjeTpiK2QvMixyMTpOLm1pbihjLGQpLzIscjI6Ti5tYXgoYyxkKS8y LHIwOk4uc3FydChjKmMrZCpkKS8yLHBhdGg6dyhhLGIsYyxkKSx2YjpbYSxi LGMsZF0uam9pbigiICIpfX1mdW5jdGlvbiBlKCl7cmV0dXJuIHRoaXMuam9p bigiLCIpLnJlcGxhY2UoTCwiJDEiKX1mdW5jdGlvbiBmKGEpe3ZhciBiPUoo YSk7cmV0dXJuIGIudG9TdHJpbmc9ZSxifWZ1bmN0aW9uIGcoYSxiLGMsZCxl LGYsZyxoLGope3JldHVybiBudWxsPT1qP24oYSxiLGMsZCxlLGYsZyxoKTpp KGEsYixjLGQsZSxmLGcsaCxvKGEsYixjLGQsZSxmLGcsaCxqKSl9ZnVuY3Rp b24gaChjLGQpe2Z1bmN0aW9uIGUoYSl7cmV0dXJuKygrYSkudG9GaXhlZCgz KX1yZXR1cm4gYS5fLmNhY2hlcihmdW5jdGlvbihhLGYsaCl7YSBpbnN0YW5j ZW9mIGImJihhPWEuYXR0cigiZCIpKSxhPUUoYSk7Zm9yKHZhciBqLGssbCxt LG4sbz0iIixwPXt9LHE9MCxyPTAscz1hLmxlbmd0aDtzPnI7cisrKXtpZihs PWFbcl0sIk0iPT1sWzBdKWo9K2xbMV0saz0rbFsyXTtlbHNle2lmKG09Zyhq LGssbFsxXSxsWzJdLGxbM10sbFs0XSxsWzVdLGxbNl0pLHErbT5mKXtpZihk JiYhcC5zdGFydCl7aWYobj1nKGosayxsWzFdLGxbMl0sbFszXSxsWzRdLGxb NV0sbFs2XSxmLXEpLG8rPVsiQyIrZShuLnN0YXJ0LngpLGUobi5zdGFydC55 KSxlKG4ubS54KSxlKG4ubS55KSxlKG4ueCksZShuLnkpXSxoKXJldHVybiBv O3Auc3RhcnQ9byxvPVsiTSIrZShuLngpLGUobi55KSsiQyIrZShuLm4ueCks ZShuLm4ueSksZShuLmVuZC54KSxlKG4uZW5kLnkpLGUobFs1XSksZShsWzZd KV0uam9pbigpLHErPW0saj0rbFs1XSxrPStsWzZdO2NvbnRpbnVlfWlmKCFj JiYhZClyZXR1cm4gbj1nKGosayxsWzFdLGxbMl0sbFszXSxsWzRdLGxbNV0s bFs2XSxmLXEpfXErPW0saj0rbFs1XSxrPStsWzZdfW8rPWwuc2hpZnQoKSts fXJldHVybiBwLmVuZD1vLG49Yz9xOmQ/cDppKGosayxsWzBdLGxbMV0sbFsy XSxsWzNdLGxbNF0sbFs1XSwxKX0sbnVsbCxhLl8uY2xvbmUpfWZ1bmN0aW9u IGkoYSxiLGMsZCxlLGYsZyxoLGkpe3ZhciBqPTEtaSxrPVIoaiwzKSxsPVIo aiwyKSxtPWkqaSxuPW0qaSxvPWsqYSszKmwqaSpjKzMqaippKmkqZStuKmcs cD1rKmIrMypsKmkqZCszKmoqaSppKmYrbipoLHE9YSsyKmkqKGMtYSkrbSoo ZS0yKmMrYSkscj1iKzIqaSooZC1iKSttKihmLTIqZCtiKSxzPWMrMippKihl LWMpK20qKGctMiplK2MpLHQ9ZCsyKmkqKGYtZCkrbSooaC0yKmYrZCksdT1q KmEraSpjLHY9aipiK2kqZCx3PWoqZStpKmcseD1qKmYraSpoLHk9OTAtMTgw Kk4uYXRhbjIocS1zLHItdCkvTztyZXR1cm57eDpvLHk6cCxtOnt4OnEseTpy fSxuOnt4OnMseTp0fSxzdGFydDp7eDp1LHk6dn0sZW5kOnt4OncseTp4fSxh bHBoYTp5fX1mdW5jdGlvbiBqKGIsYyxlLGYsZyxoLGksail7YS5pcyhiLCJh cnJheSIpfHwoYj1bYixjLGUsZixnLGgsaSxqXSk7dmFyIGs9RC5hcHBseShu dWxsLGIpO3JldHVybiBkKGsubWluLngsay5taW4ueSxrLm1heC54LWsubWlu Lngsay5tYXgueS1rLm1pbi55KX1mdW5jdGlvbiBrKGEsYixjKXtyZXR1cm4g Yj49YS54JiZiPD1hLngrYS53aWR0aCYmYz49YS55JiZjPD1hLnkrYS5oZWln aHR9ZnVuY3Rpb24gbChhLGIpe3JldHVybiBhPWQoYSksYj1kKGIpLGsoYixh LngsYS55KXx8ayhiLGEueDIsYS55KXx8ayhiLGEueCxhLnkyKXx8ayhiLGEu eDIsYS55Mil8fGsoYSxiLngsYi55KXx8ayhhLGIueDIsYi55KXx8ayhhLGIu eCxiLnkyKXx8ayhhLGIueDIsYi55Mil8fChhLng8Yi54MiYmYS54PmIueHx8 Yi54PGEueDImJmIueD5hLngpJiYoYS55PGIueTImJmEueT5iLnl8fGIueTxh LnkyJiZiLnk+YS55KX1mdW5jdGlvbiBtKGEsYixjLGQsZSl7dmFyIGY9LTMq Yis5KmMtOSpkKzMqZSxnPWEqZis2KmItMTIqYys2KmQ7cmV0dXJuIGEqZy0z KmIrMypjfWZ1bmN0aW9uIG4oYSxiLGMsZCxlLGYsZyxoLGkpe251bGw9PWkm JihpPTEpLGk9aT4xPzE6MD5pPzA6aTtmb3IodmFyIGo9aS8yLGs9MTIsbD1b LS4xMjUyLC4xMjUyLC0uMzY3OCwuMzY3OCwtLjU4NzMsLjU4NzMsLS43Njk5 LC43Njk5LC0uOTA0MSwuOTA0MSwtLjk4MTYsLjk4MTZdLG49Wy4yNDkxLC4y NDkxLC4yMzM1LC4yMzM1LC4yMDMyLC4yMDMyLC4xNjAxLC4xNjAxLC4xMDY5 LC4xMDY5LC4wNDcyLC4wNDcyXSxvPTAscD0wO2s+cDtwKyspe3ZhciBxPWoq bFtwXStqLHI9bShxLGEsYyxlLGcpLHM9bShxLGIsZCxmLGgpLHQ9cipyK3Mq cztvKz1uW3BdKk4uc3FydCh0KX1yZXR1cm4gaipvfWZ1bmN0aW9uIG8oYSxi LGMsZCxlLGYsZyxoLGkpe2lmKCEoMD5pfHxuKGEsYixjLGQsZSxmLGcsaCk8 aSkpe3ZhciBqLGs9MSxsPWsvMixtPWstbCxvPS4wMTtmb3Ioaj1uKGEsYixj LGQsZSxmLGcsaCxtKTtTKGotaSk+bzspbC89MixtKz0oaT5qPzE6LTEpKmws aj1uKGEsYixjLGQsZSxmLGcsaCxtKTtyZXR1cm4gbX19ZnVuY3Rpb24gcChh LGIsYyxkLGUsZixnLGgpe2lmKCEoUShhLGMpPFAoZSxnKXx8UChhLGMpPlEo ZSxnKXx8UShiLGQpPFAoZixoKXx8UChiLGQpPlEoZixoKSkpe3ZhciBpPShh KmQtYipjKSooZS1nKS0oYS1jKSooZSpoLWYqZyksaj0oYSpkLWIqYykqKGYt aCktKGItZCkqKGUqaC1mKmcpLGs9KGEtYykqKGYtaCktKGItZCkqKGUtZyk7 aWYoayl7dmFyIGw9aS9rLG09ai9rLG49K2wudG9GaXhlZCgyKSxvPSttLnRv Rml4ZWQoMik7aWYoIShuPCtQKGEsYykudG9GaXhlZCgyKXx8bj4rUShhLGMp LnRvRml4ZWQoMil8fG48K1AoZSxnKS50b0ZpeGVkKDIpfHxuPitRKGUsZyku dG9GaXhlZCgyKXx8bzwrUChiLGQpLnRvRml4ZWQoMil8fG8+K1EoYixkKS50 b0ZpeGVkKDIpfHxvPCtQKGYsaCkudG9GaXhlZCgyKXx8bz4rUShmLGgpLnRv Rml4ZWQoMikpKXJldHVybnt4OmwseTptfX19fWZ1bmN0aW9uIHEoYSxiLGMp e3ZhciBkPWooYSksZT1qKGIpO2lmKCFsKGQsZSkpcmV0dXJuIGM/MDpbXTtm b3IodmFyIGY9bi5hcHBseSgwLGEpLGc9bi5hcHBseSgwLGIpLGg9fn4oZi84 KSxrPX5+KGcvOCksbT1bXSxvPVtdLHE9e30scj1jPzA6W10scz0wO2grMT5z O3MrKyl7dmFyIHQ9aS5hcHBseSgwLGEuY29uY2F0KHMvaCkpO20ucHVzaCh7 eDp0LngseTp0LnksdDpzL2h9KX1mb3Iocz0wO2srMT5zO3MrKyl0PWkuYXBw bHkoMCxiLmNvbmNhdChzL2spKSxvLnB1c2goe3g6dC54LHk6dC55LHQ6cy9r fSk7Zm9yKHM9MDtoPnM7cysrKWZvcih2YXIgdT0wO2s+dTt1Kyspe3ZhciB2 PW1bc10sdz1tW3MrMV0seD1vW3VdLHk9b1t1KzFdLHo9Uyh3Lngtdi54KTwu MDAxPyJ5IjoieCIsQT1TKHkueC14LngpPC4wMDE/InkiOiJ4IixCPXAodi54 LHYueSx3Lngsdy55LHgueCx4LnkseS54LHkueSk7aWYoQil7aWYocVtCLngu dG9GaXhlZCg0KV09PUIueS50b0ZpeGVkKDQpKWNvbnRpbnVlO3FbQi54LnRv Rml4ZWQoNCldPUIueS50b0ZpeGVkKDQpO3ZhciBDPXYudCtTKChCW3pdLXZb el0pLyh3W3pdLXZbel0pKSoody50LXYudCksRD14LnQrUygoQltBXS14W0Fd KS8oeVtBXS14W0FdKSkqKHkudC14LnQpO0M+PTAmJjE+PUMmJkQ+PTAmJjE+ PUQmJihjP3IrKzpyLnB1c2goe3g6Qi54LHk6Qi55LHQxOkMsdDI6RH0pKX19 cmV0dXJuIHJ9ZnVuY3Rpb24gcihhLGIpe3JldHVybiB0KGEsYil9ZnVuY3Rp b24gcyhhLGIpe3JldHVybiB0KGEsYiwxKX1mdW5jdGlvbiB0KGEsYixjKXth PUUoYSksYj1FKGIpO2Zvcih2YXIgZCxlLGYsZyxoLGksaixrLGwsbSxuPWM/ MDpbXSxvPTAscD1hLmxlbmd0aDtwPm87bysrKXt2YXIgcj1hW29dO2lmKCJN Ij09clswXSlkPWg9clsxXSxlPWk9clsyXTtlbHNleyJDIj09clswXT8obD1b ZCxlXS5jb25jYXQoci5zbGljZSgxKSksZD1sWzZdLGU9bFs3XSk6KGw9W2Qs ZSxkLGUsaCxpLGgsaV0sZD1oLGU9aSk7Zm9yKHZhciBzPTAsdD1iLmxlbmd0 aDt0PnM7cysrKXt2YXIgdT1iW3NdO2lmKCJNIj09dVswXSlmPWo9dVsxXSxn PWs9dVsyXTtlbHNleyJDIj09dVswXT8obT1bZixnXS5jb25jYXQodS5zbGlj ZSgxKSksZj1tWzZdLGc9bVs3XSk6KG09W2YsZyxmLGcsaixrLGosa10sZj1q LGc9ayk7dmFyIHY9cShsLG0sYyk7aWYoYyluKz12O2Vsc2V7Zm9yKHZhciB3 PTAseD12Lmxlbmd0aDt4Pnc7dysrKXZbd10uc2VnbWVudDE9byx2W3ddLnNl Z21lbnQyPXMsdlt3XS5iZXoxPWwsdlt3XS5iZXoyPW07bj1uLmNvbmNhdCh2 KX19fX19cmV0dXJuIG59ZnVuY3Rpb24gdShhLGIsYyl7dmFyIGQ9dihhKTty ZXR1cm4gayhkLGIsYykmJnQoYSxbWyJNIixiLGNdLFsiSCIsZC54MisxMF1d LDEpJTI9PTF9ZnVuY3Rpb24gdihhKXt2YXIgYj1jKGEpO2lmKGIuYmJveCly ZXR1cm4gSihiLmJib3gpO2lmKCFhKXJldHVybiBkKCk7YT1FKGEpO2Zvcih2 YXIgZSxmPTAsZz0wLGg9W10saT1bXSxqPTAsaz1hLmxlbmd0aDtrPmo7aisr KWlmKGU9YVtqXSwiTSI9PWVbMF0pZj1lWzFdLGc9ZVsyXSxoLnB1c2goZiks aS5wdXNoKGcpO2Vsc2V7dmFyIGw9RChmLGcsZVsxXSxlWzJdLGVbM10sZVs0 XSxlWzVdLGVbNl0pO2g9aC5jb25jYXQobC5taW4ueCxsLm1heC54KSxpPWku Y29uY2F0KGwubWluLnksbC5tYXgueSksZj1lWzVdLGc9ZVs2XX12YXIgbT1Q LmFwcGx5KDAsaCksbj1QLmFwcGx5KDAsaSksbz1RLmFwcGx5KDAsaCkscD1R LmFwcGx5KDAsaSkscT1kKG0sbixvLW0scC1uKTtyZXR1cm4gYi5iYm94PUoo cSkscX1mdW5jdGlvbiB3KGEsYixjLGQsZil7aWYoZilyZXR1cm5bWyJNIiwr YSsgK2YsYl0sWyJsIixjLTIqZiwwXSxbImEiLGYsZiwwLDAsMSxmLGZdLFsi bCIsMCxkLTIqZl0sWyJhIixmLGYsMCwwLDEsLWYsZl0sWyJsIiwyKmYtYyww XSxbImEiLGYsZiwwLDAsMSwtZiwtZl0sWyJsIiwwLDIqZi1kXSxbImEiLGYs ZiwwLDAsMSxmLC1mXSxbInoiXV07dmFyIGc9W1siTSIsYSxiXSxbImwiLGMs MF0sWyJsIiwwLGRdLFsibCIsLWMsMF0sWyJ6Il1dO3JldHVybiBnLnRvU3Ry aW5nPWUsZ31mdW5jdGlvbiB4KGEsYixjLGQsZil7aWYobnVsbD09ZiYmbnVs bD09ZCYmKGQ9YyksYT0rYSxiPStiLGM9K2MsZD0rZCxudWxsIT1mKXZhciBn PU1hdGguUEkvMTgwLGg9YStjKk1hdGguY29zKC1kKmcpLGk9YStjKk1hdGgu Y29zKC1mKmcpLGo9YitjKk1hdGguc2luKC1kKmcpLGs9YitjKk1hdGguc2lu KC1mKmcpLGw9W1siTSIsaCxqXSxbIkEiLGMsYywwLCsoZi1kPjE4MCksMCxp LGtdXTtlbHNlIGw9W1siTSIsYSxiXSxbIm0iLDAsLWRdLFsiYSIsYyxkLDAs MSwxLDAsMipkXSxbImEiLGMsZCwwLDEsMSwwLC0yKmRdLFsieiJdXTtyZXR1 cm4gbC50b1N0cmluZz1lLGx9ZnVuY3Rpb24geShiKXt2YXIgZD1jKGIpLGc9 U3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZTtpZihkLnJlbClyZXR1cm4g ZihkLnJlbCk7YS5pcyhiLCJhcnJheSIpJiZhLmlzKGImJmJbMF0sImFycmF5 Iil8fChiPWEucGFyc2VQYXRoU3RyaW5nKGIpKTt2YXIgaD1bXSxpPTAsaj0w LGs9MCxsPTAsbT0wOyJNIj09YlswXVswXSYmKGk9YlswXVsxXSxqPWJbMF1b Ml0saz1pLGw9aixtKyssaC5wdXNoKFsiTSIsaSxqXSkpO2Zvcih2YXIgbj1t LG89Yi5sZW5ndGg7bz5uO24rKyl7dmFyIHA9aFtuXT1bXSxxPWJbbl07aWYo cVswXSE9Zy5jYWxsKHFbMF0pKXN3aXRjaChwWzBdPWcuY2FsbChxWzBdKSxw WzBdKXtjYXNlImEiOnBbMV09cVsxXSxwWzJdPXFbMl0scFszXT1xWzNdLHBb NF09cVs0XSxwWzVdPXFbNV0scFs2XT0rKHFbNl0taSkudG9GaXhlZCgzKSxw WzddPSsocVs3XS1qKS50b0ZpeGVkKDMpO2JyZWFrO2Nhc2UidiI6cFsxXT0r KHFbMV0taikudG9GaXhlZCgzKTticmVhaztjYXNlIm0iOms9cVsxXSxsPXFb Ml07ZGVmYXVsdDpmb3IodmFyIHI9MSxzPXEubGVuZ3RoO3M+cjtyKyspcFty XT0rKHFbcl0tKHIlMj9pOmopKS50b0ZpeGVkKDMpfWVsc2V7cD1oW25dPVtd LCJtIj09cVswXSYmKGs9cVsxXStpLGw9cVsyXStqKTtmb3IodmFyIHQ9MCx1 PXEubGVuZ3RoO3U+dDt0KyspaFtuXVt0XT1xW3RdfXZhciB2PWhbbl0ubGVu Z3RoO3N3aXRjaChoW25dWzBdKXtjYXNlInoiOmk9ayxqPWw7YnJlYWs7Y2Fz ZSJoIjppKz0raFtuXVt2LTFdO2JyZWFrO2Nhc2UidiI6ais9K2hbbl1bdi0x XTticmVhaztkZWZhdWx0OmkrPStoW25dW3YtMl0sais9K2hbbl1bdi0xXX19 cmV0dXJuIGgudG9TdHJpbmc9ZSxkLnJlbD1mKGgpLGh9ZnVuY3Rpb24geihi KXt2YXIgZD1jKGIpO2lmKGQuYWJzKXJldHVybiBmKGQuYWJzKTtpZihJKGIs ImFycmF5IikmJkkoYiYmYlswXSwiYXJyYXkiKXx8KGI9YS5wYXJzZVBhdGhT dHJpbmcoYikpLCFifHwhYi5sZW5ndGgpcmV0dXJuW1siTSIsMCwwXV07dmFy IGcsaD1bXSxpPTAsaj0wLGs9MCxsPTAsbT0wOyJNIj09YlswXVswXSYmKGk9 K2JbMF1bMV0saj0rYlswXVsyXSxrPWksbD1qLG0rKyxoWzBdPVsiTSIsaSxq XSk7Zm9yKHZhciBuLG8scD0zPT1iLmxlbmd0aCYmIk0iPT1iWzBdWzBdJiYi UiI9PWJbMV1bMF0udG9VcHBlckNhc2UoKSYmIloiPT1iWzJdWzBdLnRvVXBw ZXJDYXNlKCkscT1tLHI9Yi5sZW5ndGg7cj5xO3ErKyl7aWYoaC5wdXNoKG49 W10pLG89YltxXSxnPW9bMF0sZyE9Zy50b1VwcGVyQ2FzZSgpKXN3aXRjaChu WzBdPWcudG9VcHBlckNhc2UoKSxuWzBdKXtjYXNlIkEiOm5bMV09b1sxXSxu WzJdPW9bMl0sblszXT1vWzNdLG5bNF09b1s0XSxuWzVdPW9bNV0sbls2XT0r b1s2XStpLG5bN109K29bN10rajticmVhaztjYXNlIlYiOm5bMV09K29bMV0r ajticmVhaztjYXNlIkgiOm5bMV09K29bMV0raTticmVhaztjYXNlIlIiOmZv cih2YXIgcz1baSxqXS5jb25jYXQoby5zbGljZSgxKSksdD0yLHU9cy5sZW5n dGg7dT50O3QrKylzW3RdPStzW3RdK2ksc1srK3RdPStzW3RdK2o7aC5wb3Ao KSxoPWguY29uY2F0KEcocyxwKSk7YnJlYWs7Y2FzZSJPIjpoLnBvcCgpLHM9 eChpLGosb1sxXSxvWzJdKSxzLnB1c2goc1swXSksaD1oLmNvbmNhdChzKTti cmVhaztjYXNlIlUiOmgucG9wKCksaD1oLmNvbmNhdCh4KGksaixvWzFdLG9b Ml0sb1szXSkpLG49WyJVIl0uY29uY2F0KGhbaC5sZW5ndGgtMV0uc2xpY2Uo LTIpKTticmVhaztjYXNlIk0iOms9K29bMV0raSxsPStvWzJdK2o7ZGVmYXVs dDpmb3IodD0xLHU9by5sZW5ndGg7dT50O3QrKyluW3RdPStvW3RdKyh0JTI/ aTpqKX1lbHNlIGlmKCJSIj09ZylzPVtpLGpdLmNvbmNhdChvLnNsaWNlKDEp KSxoLnBvcCgpLGg9aC5jb25jYXQoRyhzLHApKSxuPVsiUiJdLmNvbmNhdChv LnNsaWNlKC0yKSk7ZWxzZSBpZigiTyI9PWcpaC5wb3AoKSxzPXgoaSxqLG9b MV0sb1syXSkscy5wdXNoKHNbMF0pLGg9aC5jb25jYXQocyk7ZWxzZSBpZigi VSI9PWcpaC5wb3AoKSxoPWguY29uY2F0KHgoaSxqLG9bMV0sb1syXSxvWzNd KSksbj1bIlUiXS5jb25jYXQoaFtoLmxlbmd0aC0xXS5zbGljZSgtMikpO2Vs c2UgZm9yKHZhciB2PTAsdz1vLmxlbmd0aDt3PnY7disrKW5bdl09b1t2XTtp ZihnPWcudG9VcHBlckNhc2UoKSwiTyIhPWcpc3dpdGNoKG5bMF0pe2Nhc2Ui WiI6aT0rayxqPStsO2JyZWFrO2Nhc2UiSCI6aT1uWzFdO2JyZWFrO2Nhc2Ui ViI6aj1uWzFdO2JyZWFrO2Nhc2UiTSI6az1uW24ubGVuZ3RoLTJdLGw9bltu Lmxlbmd0aC0xXTtkZWZhdWx0Omk9bltuLmxlbmd0aC0yXSxqPW5bbi5sZW5n dGgtMV19fXJldHVybiBoLnRvU3RyaW5nPWUsZC5hYnM9ZihoKSxofWZ1bmN0 aW9uIEEoYSxiLGMsZCl7cmV0dXJuW2EsYixjLGQsYyxkXX1mdW5jdGlvbiBC KGEsYixjLGQsZSxmKXt2YXIgZz0xLzMsaD0yLzM7cmV0dXJuW2cqYStoKmMs ZypiK2gqZCxnKmUraCpjLGcqZitoKmQsZSxmXX1mdW5jdGlvbiBDKGIsYyxk LGUsZixnLGgsaSxqLGspe3ZhciBsLG09MTIwKk8vMTgwLG49Ty8xODAqKCtm fHwwKSxvPVtdLHA9YS5fLmNhY2hlcihmdW5jdGlvbihhLGIsYyl7dmFyIGQ9 YSpOLmNvcyhjKS1iKk4uc2luKGMpLGU9YSpOLnNpbihjKStiKk4uY29zKGMp O3JldHVybnt4OmQseTplfX0pO2lmKGspeT1rWzBdLHo9a1sxXSx3PWtbMl0s eD1rWzNdO2Vsc2V7bD1wKGIsYywtbiksYj1sLngsYz1sLnksbD1wKGksaiwt biksaT1sLngsaj1sLnk7dmFyIHE9KE4uY29zKE8vMTgwKmYpLE4uc2luKE8v MTgwKmYpLChiLWkpLzIpLHI9KGMtaikvMixzPXEqcS8oZCpkKStyKnIvKGUq ZSk7cz4xJiYocz1OLnNxcnQocyksZD1zKmQsZT1zKmUpO3ZhciB0PWQqZCx1 PWUqZSx2PShnPT1oPy0xOjEpKk4uc3FydChTKCh0KnUtdCpyKnItdSpxKnEp Lyh0KnIqcit1KnEqcSkpKSx3PXYqZCpyL2UrKGIraSkvMix4PXYqLWUqcS9k KyhjK2opLzIseT1OLmFzaW4oKChjLXgpL2UpLnRvRml4ZWQoOSkpLHo9Ti5h c2luKCgoai14KS9lKS50b0ZpeGVkKDkpKTt5PXc+Yj9PLXk6eSx6PXc+aT9P LXo6eiwwPnkmJih5PTIqTyt5KSwwPnomJih6PTIqTyt6KSxoJiZ5PnomJih5 LT0yKk8pLCFoJiZ6PnkmJih6LT0yKk8pfXZhciBBPXoteTtpZihTKEEpPm0p e3ZhciBCPXosRD1pLEU9ajt6PXkrbSooaCYmej55PzE6LTEpLGk9dytkKk4u Y29zKHopLGo9eCtlKk4uc2luKHopLG89QyhpLGosZCxlLGYsMCxoLEQsRSxb eixCLHcseF0pfUE9ei15O3ZhciBGPU4uY29zKHkpLEc9Ti5zaW4oeSksSD1O LmNvcyh6KSxJPU4uc2luKHopLEo9Ti50YW4oQS80KSxLPTQvMypkKkosTD00 LzMqZSpKLE09W2IsY10sUD1bYitLKkcsYy1MKkZdLFE9W2krSypJLGotTCpI XSxSPVtpLGpdO2lmKFBbMF09MipNWzBdLVBbMF0sUFsxXT0yKk1bMV0tUFsx XSxrKXJldHVybltQLFEsUl0uY29uY2F0KG8pO289W1AsUSxSXS5jb25jYXQo bykuam9pbigpLnNwbGl0KCIsIik7Zm9yKHZhciBUPVtdLFU9MCxWPW8ubGVu Z3RoO1Y+VTtVKyspVFtVXT1VJTI/cChvW1UtMV0sb1tVXSxuKS55OnAob1tV XSxvW1UrMV0sbikueDtyZXR1cm4gVH1mdW5jdGlvbiBEKGEsYixjLGQsZSxm LGcsaCl7Zm9yKHZhciBpLGosayxsLG0sbixvLHAscT1bXSxyPVtbXSxbXV0s cz0wOzI+czsrK3MpaWYoMD09cz8oaj02KmEtMTIqYys2KmUsaT0tMyphKzkq Yy05KmUrMypnLGs9MypjLTMqYSk6KGo9NipiLTEyKmQrNipmLGk9LTMqYis5 KmQtOSpmKzMqaCxrPTMqZC0zKmIpLFMoaSk8MWUtMTIpe2lmKFMoaik8MWUt MTIpY29udGludWU7bD0tay9qLGw+MCYmMT5sJiZxLnB1c2gobCl9ZWxzZSBv PWoqai00KmsqaSxwPU4uc3FydChvKSwwPm98fChtPSgtaitwKS8oMippKSxt PjAmJjE+bSYmcS5wdXNoKG0pLG49KC1qLXApLygyKmkpLG4+MCYmMT5uJiZx LnB1c2gobikpO2Zvcih2YXIgdCx1PXEubGVuZ3RoLHY9dTt1LS07KWw9cVt1 XSx0PTEtbCxyWzBdW3VdPXQqdCp0KmErMyp0KnQqbCpjKzMqdCpsKmwqZSts KmwqbCpnLHJbMV1bdV09dCp0KnQqYiszKnQqdCpsKmQrMyp0KmwqbCpmK2wq bCpsKmg7cmV0dXJuIHJbMF1bdl09YSxyWzFdW3ZdPWIsclswXVt2KzFdPWcs clsxXVt2KzFdPWgsclswXS5sZW5ndGg9clsxXS5sZW5ndGg9disyLHttaW46 e3g6UC5hcHBseSgwLHJbMF0pLHk6UC5hcHBseSgwLHJbMV0pfSxtYXg6e3g6 US5hcHBseSgwLHJbMF0pLHk6US5hcHBseSgwLHJbMV0pfX19ZnVuY3Rpb24g RShhLGIpe3ZhciBkPSFiJiZjKGEpO2lmKCFiJiZkLmN1cnZlKXJldHVybiBm KGQuY3VydmUpO2Zvcih2YXIgZT16KGEpLGc9YiYmeihiKSxoPXt4OjAseTow LGJ4OjAsYnk6MCxYOjAsWTowLHF4Om51bGwscXk6bnVsbH0saT17eDowLHk6 MCxieDowLGJ5OjAsWDowLFk6MCxxeDpudWxsLHF5Om51bGx9LGo9KGZ1bmN0 aW9uKGEsYixjKXt2YXIgZCxlO2lmKCFhKXJldHVyblsiQyIsYi54LGIueSxi LngsYi55LGIueCxiLnldO3N3aXRjaCghKGFbMF1pbntUOjEsUToxfSkmJihi LnF4PWIucXk9bnVsbCksYVswXSl7Y2FzZSJNIjpiLlg9YVsxXSxiLlk9YVsy XTticmVhaztjYXNlIkEiOmE9WyJDIl0uY29uY2F0KEMuYXBwbHkoMCxbYi54 LGIueV0uY29uY2F0KGEuc2xpY2UoMSkpKSk7YnJlYWs7Y2FzZSJTIjoiQyI9 PWN8fCJTIj09Yz8oZD0yKmIueC1iLmJ4LGU9MipiLnktYi5ieSk6KGQ9Yi54 LGU9Yi55KSxhPVsiQyIsZCxlXS5jb25jYXQoYS5zbGljZSgxKSk7YnJlYWs7 Y2FzZSJUIjoiUSI9PWN8fCJUIj09Yz8oYi5xeD0yKmIueC1iLnF4LGIucXk9 MipiLnktYi5xeSk6KGIucXg9Yi54LGIucXk9Yi55KSxhPVsiQyJdLmNvbmNh dChCKGIueCxiLnksYi5xeCxiLnF5LGFbMV0sYVsyXSkpO2JyZWFrO2Nhc2Ui USI6Yi5xeD1hWzFdLGIucXk9YVsyXSxhPVsiQyJdLmNvbmNhdChCKGIueCxi LnksYVsxXSxhWzJdLGFbM10sYVs0XSkpO2JyZWFrO2Nhc2UiTCI6YT1bIkMi XS5jb25jYXQoQShiLngsYi55LGFbMV0sYVsyXSkpO2JyZWFrO2Nhc2UiSCI6 YT1bIkMiXS5jb25jYXQoQShiLngsYi55LGFbMV0sYi55KSk7YnJlYWs7Y2Fz ZSJWIjphPVsiQyJdLmNvbmNhdChBKGIueCxiLnksYi54LGFbMV0pKTticmVh aztjYXNlIloiOmE9WyJDIl0uY29uY2F0KEEoYi54LGIueSxiLlgsYi5ZKSl9 cmV0dXJuIGF9KSxrPWZ1bmN0aW9uKGEsYil7aWYoYVtiXS5sZW5ndGg+Nyl7 YVtiXS5zaGlmdCgpO2Zvcih2YXIgYz1hW2JdO2MubGVuZ3RoOyltW2JdPSJB IixnJiYobltiXT0iQSIpLGEuc3BsaWNlKGIrKywwLFsiQyJdLmNvbmNhdChj LnNwbGljZSgwLDYpKSk7YS5zcGxpY2UoYiwxKSxyPVEoZS5sZW5ndGgsZyYm Zy5sZW5ndGh8fDApfX0sbD1mdW5jdGlvbihhLGIsYyxkLGYpe2EmJmImJiJN Ij09YVtmXVswXSYmIk0iIT1iW2ZdWzBdJiYoYi5zcGxpY2UoZiwwLFsiTSIs ZC54LGQueV0pLGMuYng9MCxjLmJ5PTAsYy54PWFbZl1bMV0sYy55PWFbZl1b Ml0scj1RKGUubGVuZ3RoLGcmJmcubGVuZ3RofHwwKSl9LG09W10sbj1bXSxv PSIiLHA9IiIscT0wLHI9UShlLmxlbmd0aCxnJiZnLmxlbmd0aHx8MCk7cj5x O3ErKyl7ZVtxXSYmKG89ZVtxXVswXSksIkMiIT1vJiYobVtxXT1vLHEmJihw PW1bcS0xXSkpLGVbcV09aihlW3FdLGgscCksIkEiIT1tW3FdJiYiQyI9PW8m JihtW3FdPSJDIiksayhlLHEpLGcmJihnW3FdJiYobz1nW3FdWzBdKSwiQyIh PW8mJihuW3FdPW8scSYmKHA9bltxLTFdKSksZ1txXT1qKGdbcV0saSxwKSwi QSIhPW5bcV0mJiJDIj09byYmKG5bcV09IkMiKSxrKGcscSkpLGwoZSxnLGgs aSxxKSxsKGcsZSxpLGgscSk7dmFyIHM9ZVtxXSx0PWcmJmdbcV0sdT1zLmxl bmd0aCx2PWcmJnQubGVuZ3RoO2gueD1zW3UtMl0saC55PXNbdS0xXSxoLmJ4 PU0oc1t1LTRdKXx8aC54LGguYnk9TShzW3UtM10pfHxoLnksaS5ieD1nJiYo TSh0W3YtNF0pfHxpLngpLGkuYnk9ZyYmKE0odFt2LTNdKXx8aS55KSxpLng9 ZyYmdFt2LTJdLGkueT1nJiZ0W3YtMV19cmV0dXJuIGd8fChkLmN1cnZlPWYo ZSkpLGc/W2UsZ106ZX1mdW5jdGlvbiBGKGEsYil7aWYoIWIpcmV0dXJuIGE7 dmFyIGMsZCxlLGYsZyxoLGk7Zm9yKGE9RShhKSxlPTAsZz1hLmxlbmd0aDtn PmU7ZSsrKWZvcihpPWFbZV0sZj0xLGg9aS5sZW5ndGg7aD5mO2YrPTIpYz1i LngoaVtmXSxpW2YrMV0pLGQ9Yi55KGlbZl0saVtmKzFdKSxpW2ZdPWMsaVtm KzFdPWQ7cmV0dXJuIGF9ZnVuY3Rpb24gRyhhLGIpe2Zvcih2YXIgYz1bXSxk PTAsZT1hLmxlbmd0aDtlLTIqIWI+ZDtkKz0yKXt2YXIgZj1be3g6K2FbZC0y XSx5OithW2QtMV19LHt4OithW2RdLHk6K2FbZCsxXX0se3g6K2FbZCsyXSx5 OithW2QrM119LHt4OithW2QrNF0seTorYVtkKzVdfV07Yj9kP2UtND09ZD9m WzNdPXt4OithWzBdLHk6K2FbMV19OmUtMj09ZCYmKGZbMl09e3g6K2FbMF0s eTorYVsxXX0sZlszXT17eDorYVsyXSx5OithWzNdfSk6ZlswXT17eDorYVtl LTJdLHk6K2FbZS0xXX06ZS00PT1kP2ZbM109ZlsyXTpkfHwoZlswXT17eDor YVtkXSx5OithW2QrMV19KSxjLnB1c2goWyJDIiwoLWZbMF0ueCs2KmZbMV0u eCtmWzJdLngpLzYsKC1mWzBdLnkrNipmWzFdLnkrZlsyXS55KS82LChmWzFd LngrNipmWzJdLngtZlszXS54KS82LChmWzFdLnkrNipmWzJdLnktZlszXS55 KS82LGZbMl0ueCxmWzJdLnldKX1yZXR1cm4gY312YXIgSD1iLnByb3RvdHlw ZSxJPWEuaXMsSj1hLl8uY2xvbmUsSz0iaGFzT3duUHJvcGVydHkiLEw9Lyw/ KFthLXpdKSw/L2dpLE09cGFyc2VGbG9hdCxOPU1hdGgsTz1OLlBJLFA9Ti5t aW4sUT1OLm1heCxSPU4ucG93LFM9Ti5hYnMsVD1oKDEpLFU9aCgpLFY9aCgw LDEpLFc9YS5fdW5pdDJweCxYPXtwYXRoOmZ1bmN0aW9uKGEpe3JldHVybiBh LmF0dHIoInBhdGgiKX0sY2lyY2xlOmZ1bmN0aW9uKGEpe3ZhciBiPVcoYSk7 cmV0dXJuIHgoYi5jeCxiLmN5LGIucil9LGVsbGlwc2U6ZnVuY3Rpb24oYSl7 dmFyIGI9VyhhKTtyZXR1cm4geChiLmN4fHwwLGIuY3l8fDAsYi5yeCxiLnJ5 KX0scmVjdDpmdW5jdGlvbihhKXt2YXIgYj1XKGEpO3JldHVybiB3KGIueHx8 MCxiLnl8fDAsYi53aWR0aCxiLmhlaWdodCxiLnJ4LGIucnkpfSxpbWFnZTpm dW5jdGlvbihhKXt2YXIgYj1XKGEpO3JldHVybiB3KGIueHx8MCxiLnl8fDAs Yi53aWR0aCxiLmhlaWdodCl9LGxpbmU6ZnVuY3Rpb24oYSl7cmV0dXJuIk0i K1thLmF0dHIoIngxIil8fDAsYS5hdHRyKCJ5MSIpfHwwLGEuYXR0cigieDIi KSxhLmF0dHIoInkyIildfSxwb2x5bGluZTpmdW5jdGlvbihhKXtyZXR1cm4i TSIrYS5hdHRyKCJwb2ludHMiKX0scG9seWdvbjpmdW5jdGlvbihhKXtyZXR1 cm4iTSIrYS5hdHRyKCJwb2ludHMiKSsieiJ9LGRlZmx0OmZ1bmN0aW9uKGEp e3ZhciBiPWEubm9kZS5nZXRCQm94KCk7cmV0dXJuIHcoYi54LGIueSxiLndp ZHRoLGIuaGVpZ2h0KX19O2EucGF0aD1jLGEucGF0aC5nZXRUb3RhbExlbmd0 aD1ULGEucGF0aC5nZXRQb2ludEF0TGVuZ3RoPVUsYS5wYXRoLmdldFN1YnBh dGg9ZnVuY3Rpb24oYSxiLGMpe2lmKHRoaXMuZ2V0VG90YWxMZW5ndGgoYSkt YzwxZS02KXJldHVybiBWKGEsYikuZW5kO3ZhciBkPVYoYSxjLDEpO3JldHVy biBiP1YoZCxiKS5lbmQ6ZH0sSC5nZXRUb3RhbExlbmd0aD1mdW5jdGlvbigp e3JldHVybiB0aGlzLm5vZGUuZ2V0VG90YWxMZW5ndGg/dGhpcy5ub2RlLmdl dFRvdGFsTGVuZ3RoKCk6dm9pZCAwfSxILmdldFBvaW50QXRMZW5ndGg9ZnVu Y3Rpb24oYSl7cmV0dXJuIFUodGhpcy5hdHRyKCJkIiksYSl9LEguZ2V0U3Vi cGF0aD1mdW5jdGlvbihiLGMpe3JldHVybiBhLnBhdGguZ2V0U3VicGF0aCh0 aGlzLmF0dHIoImQiKSxiLGMpfSxhLl8uYm94PWQsYS5wYXRoLmZpbmREb3Rz QXRTZWdtZW50PWksYS5wYXRoLmJlemllckJCb3g9aixhLnBhdGguaXNQb2lu dEluc2lkZUJCb3g9ayxhLmNsb3Nlc3Q9ZnVuY3Rpb24oYixjLGUsZil7Zm9y KHZhciBnPTEwMCxoPWQoYi1nLzIsYy1nLzIsZyxnKSxpPVtdLGo9ZVswXS5o YXNPd25Qcm9wZXJ0eSgieCIpP2Z1bmN0aW9uKGEpe3JldHVybnt4OmVbYV0u eCx5OmVbYV0ueX19OmZ1bmN0aW9uKGEpe3JldHVybnt4OmVbYV0seTpmW2Fd fX0sbD0wOzFlNj49ZyYmIWw7KXtmb3IodmFyIG09MCxuPWUubGVuZ3RoO24+ bTttKyspe3ZhciBvPWoobSk7aWYoayhoLG8ueCxvLnkpKXtsKyssaS5wdXNo KG8pO2JyZWFrfX1sfHwoZyo9MixoPWQoYi1nLzIsYy1nLzIsZyxnKSl9aWYo MWU2IT1nKXt2YXIgcCxxPTEvMDtmb3IobT0wLG49aS5sZW5ndGg7bj5tO20r Kyl7dmFyIHI9YS5sZW4oYixjLGlbbV0ueCxpW21dLnkpO3E+ciYmKHE9cixp W21dLmxlbj1yLHA9aVttXSl9cmV0dXJuIHB9fSxhLnBhdGguaXNCQm94SW50 ZXJzZWN0PWwsYS5wYXRoLmludGVyc2VjdGlvbj1yLGEucGF0aC5pbnRlcnNl Y3Rpb25OdW1iZXI9cyxhLnBhdGguaXNQb2ludEluc2lkZT11LGEucGF0aC5n ZXRCQm94PXYsYS5wYXRoLmdldD1YLGEucGF0aC50b1JlbGF0aXZlPXksYS5w YXRoLnRvQWJzb2x1dGU9eixhLnBhdGgudG9DdWJpYz1FLGEucGF0aC5tYXA9 RixhLnBhdGgudG9TdHJpbmc9ZSxhLnBhdGguY2xvbmU9Zn0pLGQucGx1Z2lu KGZ1bmN0aW9uKGEpe3ZhciBkPU1hdGgubWF4LGU9TWF0aC5taW4sZj1mdW5j dGlvbihhKXtpZih0aGlzLml0ZW1zPVtdLHRoaXMuYmluZGluZ3M9e30sdGhp cy5sZW5ndGg9MCx0aGlzLnR5cGU9InNldCIsYSlmb3IodmFyIGI9MCxjPWEu bGVuZ3RoO2M+YjtiKyspYVtiXSYmKHRoaXNbdGhpcy5pdGVtcy5sZW5ndGhd PXRoaXMuaXRlbXNbdGhpcy5pdGVtcy5sZW5ndGhdPWFbYl0sdGhpcy5sZW5n dGgrKyl9LGc9Zi5wcm90b3R5cGU7Zy5wdXNoPWZ1bmN0aW9uKCl7Zm9yKHZh ciBhLGIsYz0wLGQ9YXJndW1lbnRzLmxlbmd0aDtkPmM7YysrKWE9YXJndW1l bnRzW2NdLGEmJihiPXRoaXMuaXRlbXMubGVuZ3RoLHRoaXNbYl09dGhpcy5p dGVtc1tiXT1hLHRoaXMubGVuZ3RoKyspO3JldHVybiB0aGlzfSxnLnBvcD1m dW5jdGlvbigpe3JldHVybiB0aGlzLmxlbmd0aCYmZGVsZXRlIHRoaXNbdGhp cy5sZW5ndGgtLV0sdGhpcy5pdGVtcy5wb3AoKX0sZy5mb3JFYWNoPWZ1bmN0 aW9uKGEsYil7Zm9yKHZhciBjPTAsZD10aGlzLml0ZW1zLmxlbmd0aDtkPmM7 YysrKWlmKGEuY2FsbChiLHRoaXMuaXRlbXNbY10sYyk9PT0hMSlyZXR1cm4g dGhpcztyZXR1cm4gdGhpc30sZy5hbmltYXRlPWZ1bmN0aW9uKGQsZSxmLGcp eyJmdW5jdGlvbiIhPXR5cGVvZiBmfHxmLmxlbmd0aHx8KGc9ZixmPWMubGlu ZWFyKSxkIGluc3RhbmNlb2YgYS5fLkFuaW1hdGlvbiYmKGc9ZC5jYWxsYmFj ayxmPWQuZWFzaW5nLGU9Zi5kdXIsZD1kLmF0dHIpO3ZhciBoPWFyZ3VtZW50 cztpZihhLmlzKGQsImFycmF5IikmJmEuaXMoaFtoLmxlbmd0aC0xXSwiYXJy YXkiKSl2YXIgaT0hMDt2YXIgaixrPWZ1bmN0aW9uKCl7aj90aGlzLmI9ajpq PXRoaXMuYn0sbD0wLG09dGhpcyxuPWcmJmZ1bmN0aW9uKCl7KytsPT1tLmxl bmd0aCYmZy5jYWxsKHRoaXMpCit9O3JldHVybiB0aGlzLmZvckVhY2goZnVu Y3Rpb24oYSxjKXtiLm9uY2UoInNuYXAuYW5pbWNyZWF0ZWQuIithLmlkLGsp LGk/aFtjXSYmYS5hbmltYXRlLmFwcGx5KGEsaFtjXSk6YS5hbmltYXRlKGQs ZSxmLG4pfSl9LGcucmVtb3ZlPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0 aDspdGhpcy5wb3AoKS5yZW1vdmUoKTtyZXR1cm4gdGhpc30sZy5iaW5kPWZ1 bmN0aW9uKGEsYixjKXt2YXIgZD17fTtpZigiZnVuY3Rpb24iPT10eXBlb2Yg Yil0aGlzLmJpbmRpbmdzW2FdPWI7ZWxzZXt2YXIgZT1jfHxhO3RoaXMuYmlu ZGluZ3NbYV09ZnVuY3Rpb24oYSl7ZFtlXT1hLGIuYXR0cihkKX19cmV0dXJu IHRoaXN9LGcuYXR0cj1mdW5jdGlvbihhKXt2YXIgYj17fTtmb3IodmFyIGMg aW4gYSl0aGlzLmJpbmRpbmdzW2NdP3RoaXMuYmluZGluZ3NbY10oYVtjXSk6 YltjXT1hW2NdO2Zvcih2YXIgZD0wLGU9dGhpcy5pdGVtcy5sZW5ndGg7ZT5k O2QrKyl0aGlzLml0ZW1zW2RdLmF0dHIoYik7cmV0dXJuIHRoaXN9LGcuY2xl YXI9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoOyl0aGlzLnBvcCgpfSxn LnNwbGljZT1mdW5jdGlvbihhLGIpe2E9MD5hP2QodGhpcy5sZW5ndGgrYSww KTphLGI9ZCgwLGUodGhpcy5sZW5ndGgtYSxiKSk7dmFyIGMsZz1bXSxoPVtd LGk9W107Zm9yKGM9MjtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKWkucHVzaChh cmd1bWVudHNbY10pO2ZvcihjPTA7Yj5jO2MrKyloLnB1c2godGhpc1thK2Nd KTtmb3IoO2M8dGhpcy5sZW5ndGgtYTtjKyspZy5wdXNoKHRoaXNbYStjXSk7 dmFyIGo9aS5sZW5ndGg7Zm9yKGM9MDtjPGorZy5sZW5ndGg7YysrKXRoaXMu aXRlbXNbYStjXT10aGlzW2ErY109aj5jP2lbY106Z1tjLWpdO2ZvcihjPXRo aXMuaXRlbXMubGVuZ3RoPXRoaXMubGVuZ3RoLT1iLWo7dGhpc1tjXTspZGVs ZXRlIHRoaXNbYysrXTtyZXR1cm4gbmV3IGYoaCl9LGcuZXhjbHVkZT1mdW5j dGlvbihhKXtmb3IodmFyIGI9MCxjPXRoaXMubGVuZ3RoO2M+YjtiKyspaWYo dGhpc1tiXT09YSlyZXR1cm4gdGhpcy5zcGxpY2UoYiwxKSwhMDtyZXR1cm4h MX0sZy5pbnNlcnRBZnRlcj1mdW5jdGlvbihhKXtmb3IodmFyIGI9dGhpcy5p dGVtcy5sZW5ndGg7Yi0tOyl0aGlzLml0ZW1zW2JdLmluc2VydEFmdGVyKGEp O3JldHVybiB0aGlzfSxnLmdldEJCb3g9ZnVuY3Rpb24oKXtmb3IodmFyIGE9 W10sYj1bXSxjPVtdLGY9W10sZz10aGlzLml0ZW1zLmxlbmd0aDtnLS07KWlm KCF0aGlzLml0ZW1zW2ddLnJlbW92ZWQpe3ZhciBoPXRoaXMuaXRlbXNbZ10u Z2V0QkJveCgpO2EucHVzaChoLngpLGIucHVzaChoLnkpLGMucHVzaChoLngr aC53aWR0aCksZi5wdXNoKGgueStoLmhlaWdodCl9cmV0dXJuIGE9ZS5hcHBs eSgwLGEpLGI9ZS5hcHBseSgwLGIpLGM9ZC5hcHBseSgwLGMpLGY9ZC5hcHBs eSgwLGYpLHt4OmEseTpiLHgyOmMseTI6Zix3aWR0aDpjLWEsaGVpZ2h0OmYt YixjeDphKyhjLWEpLzIsY3k6YisoZi1iKS8yfX0sZy5jbG9uZT1mdW5jdGlv bihhKXthPW5ldyBmO2Zvcih2YXIgYj0wLGM9dGhpcy5pdGVtcy5sZW5ndGg7 Yz5iO2IrKylhLnB1c2godGhpcy5pdGVtc1tiXS5jbG9uZSgpKTtyZXR1cm4g YX0sZy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJTbmFw4oCYcyBzZXQi fSxnLnR5cGU9InNldCIsYS5TZXQ9ZixhLnNldD1mdW5jdGlvbigpe3ZhciBh PW5ldyBmO3JldHVybiBhcmd1bWVudHMubGVuZ3RoJiZhLnB1c2guYXBwbHko YSxBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCkpLGF9 fSksZC5wbHVnaW4oZnVuY3Rpb24oYSxjKXtmdW5jdGlvbiBkKGEpe3ZhciBi PWFbMF07c3dpdGNoKGIudG9Mb3dlckNhc2UoKSl7Y2FzZSJ0IjpyZXR1cm5b YiwwLDBdO2Nhc2UibSI6cmV0dXJuW2IsMSwwLDAsMSwwLDBdO2Nhc2UiciI6 cmV0dXJuIDQ9PWEubGVuZ3RoP1tiLDAsYVsyXSxhWzNdXTpbYiwwXTtjYXNl InMiOnJldHVybiA1PT1hLmxlbmd0aD9bYiwxLDEsYVszXSxhWzRdXTozPT1h Lmxlbmd0aD9bYiwxLDFdOltiLDFdfX1mdW5jdGlvbiBlKGIsYyxlKXtjPXAo YykucmVwbGFjZSgvXC57M318XHUyMDI2L2csYiksYj1hLnBhcnNlVHJhbnNm b3JtU3RyaW5nKGIpfHxbXSxjPWEucGFyc2VUcmFuc2Zvcm1TdHJpbmcoYyl8 fFtdO2Zvcih2YXIgZixnLGgsaSxsPU1hdGgubWF4KGIubGVuZ3RoLGMubGVu Z3RoKSxtPVtdLG49W10sbz0wO2w+bztvKyspe2lmKGg9YltvXXx8ZChjW29d KSxpPWNbb118fGQoaCksaFswXSE9aVswXXx8InIiPT1oWzBdLnRvTG93ZXJD YXNlKCkmJihoWzJdIT1pWzJdfHxoWzNdIT1pWzNdKXx8InMiPT1oWzBdLnRv TG93ZXJDYXNlKCkmJihoWzNdIT1pWzNdfHxoWzRdIT1pWzRdKSl7Yj1hLl8u dHJhbnNmb3JtMm1hdHJpeChiLGUoKSksYz1hLl8udHJhbnNmb3JtMm1hdHJp eChjLGUoKSksbT1bWyJtIixiLmEsYi5iLGIuYyxiLmQsYi5lLGIuZl1dLG49 W1sibSIsYy5hLGMuYixjLmMsYy5kLGMuZSxjLmZdXTticmVha31mb3IobVtv XT1bXSxuW29dPVtdLGY9MCxnPU1hdGgubWF4KGgubGVuZ3RoLGkubGVuZ3Ro KTtnPmY7ZisrKWYgaW4gaCYmKG1bb11bZl09aFtmXSksZiBpbiBpJiYobltv XVtmXT1pW2ZdKX1yZXR1cm57ZnJvbTprKG0pLHRvOmsobiksZjpqKG0pfX1m dW5jdGlvbiBmKGEpe3JldHVybiBhfWZ1bmN0aW9uIGcoYSl7cmV0dXJuIGZ1 bmN0aW9uKGIpe3JldHVybitiLnRvRml4ZWQoMykrYX19ZnVuY3Rpb24gaChh KXtyZXR1cm4gYS5qb2luKCIgIil9ZnVuY3Rpb24gaShiKXtyZXR1cm4gYS5y Z2IoYlswXSxiWzFdLGJbMl0pfWZ1bmN0aW9uIGooYSl7dmFyIGIsYyxkLGUs ZixnLGg9MCxpPVtdO2ZvcihiPTAsYz1hLmxlbmd0aDtjPmI7YisrKXtmb3Io Zj0iWyIsZz1bJyInK2FbYl1bMF0rJyInXSxkPTEsZT1hW2JdLmxlbmd0aDtl PmQ7ZCsrKWdbZF09InZhbFsiK2grKyArIl0iO2YrPWcrIl0iLGlbYl09Zn1y ZXR1cm4gRnVuY3Rpb24oInZhbCIsInJldHVybiBTbmFwLnBhdGgudG9TdHJp bmcuY2FsbChbIitpKyJdKSIpfWZ1bmN0aW9uIGsoYSl7Zm9yKHZhciBiPVtd LGM9MCxkPWEubGVuZ3RoO2Q+YztjKyspZm9yKHZhciBlPTEsZj1hW2NdLmxl bmd0aDtmPmU7ZSsrKWIucHVzaChhW2NdW2VdKTtyZXR1cm4gYn1mdW5jdGlv biBsKGEpe3JldHVybiBpc0Zpbml0ZShwYXJzZUZsb2F0KGEpKX1mdW5jdGlv biBtKGIsYyl7cmV0dXJuIGEuaXMoYiwiYXJyYXkiKSYmYS5pcyhjLCJhcnJh eSIpP2IudG9TdHJpbmcoKT09Yy50b1N0cmluZygpOiExfXZhciBuPXt9LG89 L1thLXpdKyQvaSxwPVN0cmluZztuLnN0cm9rZT1uLmZpbGw9ImNvbG91ciIs Yy5wcm90b3R5cGUuZXF1YWw9ZnVuY3Rpb24oYSxjKXtyZXR1cm4gYigic25h cC51dGlsLmVxdWFsIix0aGlzLGEsYykuZmlyc3REZWZpbmVkKCl9LGIub24o InNuYXAudXRpbC5lcXVhbCIsZnVuY3Rpb24oYixjKXt2YXIgZCxxLHI9cCh0 aGlzLmF0dHIoYil8fCIiKSxzPXRoaXM7aWYobChyKSYmbChjKSlyZXR1cm57 ZnJvbTpwYXJzZUZsb2F0KHIpLHRvOnBhcnNlRmxvYXQoYyksZjpmfTtpZigi Y29sb3VyIj09bltiXSlyZXR1cm4gZD1hLmNvbG9yKHIpLHE9YS5jb2xvcihj KSx7ZnJvbTpbZC5yLGQuZyxkLmIsZC5vcGFjaXR5XSx0bzpbcS5yLHEuZyxx LmIscS5vcGFjaXR5XSxmOml9O2lmKCJ2aWV3Qm94Ij09YilyZXR1cm4gZD10 aGlzLmF0dHIoYikudmIuc3BsaXQoIiAiKS5tYXAoTnVtYmVyKSxxPWMuc3Bs aXQoIiAiKS5tYXAoTnVtYmVyKSx7ZnJvbTpkLHRvOnEsZjpofTtpZigidHJh bnNmb3JtIj09Ynx8ImdyYWRpZW50VHJhbnNmb3JtIj09Ynx8InBhdHRlcm5U cmFuc2Zvcm0iPT1iKXJldHVybiBjIGluc3RhbmNlb2YgYS5NYXRyaXgmJihj PWMudG9UcmFuc2Zvcm1TdHJpbmcoKSksYS5fLnJnVHJhbnNmb3JtLnRlc3Qo Yyl8fChjPWEuXy5zdmdUcmFuc2Zvcm0yc3RyaW5nKGMpKSxlKHIsYyxmdW5j dGlvbigpe3JldHVybiBzLmdldEJCb3goMSl9KTtpZigiZCI9PWJ8fCJwYXRo Ij09YilyZXR1cm4gZD1hLnBhdGgudG9DdWJpYyhyLGMpLHtmcm9tOmsoZFsw XSksdG86ayhkWzFdKSxmOmooZFswXSl9O2lmKCJwb2ludHMiPT1iKXJldHVy biBkPXAocikuc3BsaXQoYS5fLnNlcGFyYXRvcikscT1wKGMpLnNwbGl0KGEu Xy5zZXBhcmF0b3IpLHtmcm9tOmQsdG86cSxmOmZ1bmN0aW9uKGEpe3JldHVy biBhfX07dmFyIHQ9ci5tYXRjaChvKSx1PXAoYykubWF0Y2gobyk7cmV0dXJu IHQmJm0odCx1KT97ZnJvbTpwYXJzZUZsb2F0KHIpLHRvOnBhcnNlRmxvYXQo YyksZjpnKHQpfTp7ZnJvbTp0aGlzLmFzUFgoYiksdG86dGhpcy5hc1BYKGIs YyksZjpmfX0pfSksZC5wbHVnaW4oZnVuY3Rpb24oYSxjLGQsZSl7Zm9yKHZh ciBmPWMucHJvdG90eXBlLGc9Imhhc093blByb3BlcnR5IixoPSgiY3JlYXRl VG91Y2giaW4gZS5kb2MpLGk9WyJjbGljayIsImRibGNsaWNrIiwibW91c2Vk b3duIiwibW91c2Vtb3ZlIiwibW91c2VvdXQiLCJtb3VzZW92ZXIiLCJtb3Vz ZXVwIiwidG91Y2hzdGFydCIsInRvdWNobW92ZSIsInRvdWNoZW5kIiwidG91 Y2hjYW5jZWwiXSxqPXttb3VzZWRvd246InRvdWNoc3RhcnQiLG1vdXNlbW92 ZToidG91Y2htb3ZlIixtb3VzZXVwOiJ0b3VjaGVuZCJ9LGs9KGZ1bmN0aW9u KGEsYil7dmFyIGM9InkiPT1hPyJzY3JvbGxUb3AiOiJzY3JvbGxMZWZ0Iixk PWImJmIubm9kZT9iLm5vZGUub3duZXJEb2N1bWVudDplLmRvYztyZXR1cm4g ZFtjIGluIGQuZG9jdW1lbnRFbGVtZW50PyJkb2N1bWVudEVsZW1lbnQiOiJi b2R5Il1bY119KSxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub3JpZ2luYWxF dmVudC5wcmV2ZW50RGVmYXVsdCgpfSxtPWZ1bmN0aW9uKCl7cmV0dXJuIHRo aXMub3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKX0sbj1mdW5jdGlv bihhLGIsYyxkKXt2YXIgZT1oJiZqW2JdP2pbYl06YixmPWZ1bmN0aW9uKGUp e3ZhciBmPWsoInkiLGQpLGk9aygieCIsZCk7aWYoaCYmaltnXShiKSlmb3Io dmFyIG49MCxvPWUudGFyZ2V0VG91Y2hlcyYmZS50YXJnZXRUb3VjaGVzLmxl bmd0aDtvPm47bisrKWlmKGUudGFyZ2V0VG91Y2hlc1tuXS50YXJnZXQ9PWF8 fGEuY29udGFpbnMoZS50YXJnZXRUb3VjaGVzW25dLnRhcmdldCkpe3ZhciBw PWU7ZT1lLnRhcmdldFRvdWNoZXNbbl0sZS5vcmlnaW5hbEV2ZW50PXAsZS5w cmV2ZW50RGVmYXVsdD1sLGUuc3RvcFByb3BhZ2F0aW9uPW07YnJlYWt9dmFy IHE9ZS5jbGllbnRYK2kscj1lLmNsaWVudFkrZjtyZXR1cm4gYy5jYWxsKGQs ZSxxLHIpfTtyZXR1cm4gYiE9PWUmJmEuYWRkRXZlbnRMaXN0ZW5lcihiLGYs ITEpLGEuYWRkRXZlbnRMaXN0ZW5lcihlLGYsITEpLGZ1bmN0aW9uKCl7cmV0 dXJuIGIhPT1lJiZhLnJlbW92ZUV2ZW50TGlzdGVuZXIoYixmLCExKSxhLnJl bW92ZUV2ZW50TGlzdGVuZXIoZSxmLCExKSwhMH19LG89W10scD1mdW5jdGlv bihhKXtmb3IodmFyIGMsZD1hLmNsaWVudFgsZT1hLmNsaWVudFksZj1rKCJ5 IiksZz1rKCJ4IiksaT1vLmxlbmd0aDtpLS07KXtpZihjPW9baV0saCl7Zm9y KHZhciBqLGw9YS50b3VjaGVzJiZhLnRvdWNoZXMubGVuZ3RoO2wtLTspaWYo aj1hLnRvdWNoZXNbbF0sai5pZGVudGlmaWVyPT1jLmVsLl9kcmFnLmlkfHxj LmVsLm5vZGUuY29udGFpbnMoai50YXJnZXQpKXtkPWouY2xpZW50WCxlPWou Y2xpZW50WSwoYS5vcmlnaW5hbEV2ZW50P2Eub3JpZ2luYWxFdmVudDphKS5w cmV2ZW50RGVmYXVsdCgpO2JyZWFrfX1lbHNlIGEucHJldmVudERlZmF1bHQo KTt7dmFyIG09Yy5lbC5ub2RlO20ubmV4dFNpYmxpbmcsbS5wYXJlbnROb2Rl LG0uc3R5bGUuZGlzcGxheX1kKz1nLGUrPWYsYigic25hcC5kcmFnLm1vdmUu IitjLmVsLmlkLGMubW92ZV9zY29wZXx8Yy5lbCxkLWMuZWwuX2RyYWcueCxl LWMuZWwuX2RyYWcueSxkLGUsYSl9fSxxPWZ1bmN0aW9uKGMpe2EudW5tb3Vz ZW1vdmUocCkudW5tb3VzZXVwKHEpO2Zvcih2YXIgZCxlPW8ubGVuZ3RoO2Ut LTspZD1vW2VdLGQuZWwuX2RyYWc9e30sYigic25hcC5kcmFnLmVuZC4iK2Qu ZWwuaWQsZC5lbmRfc2NvcGV8fGQuc3RhcnRfc2NvcGV8fGQubW92ZV9zY29w ZXx8ZC5lbCxjKSxiLm9mZigic25hcC5kcmFnLiouIitkLmVsLmlkKTtvPVtd fSxyPWkubGVuZ3RoO3ItLTspIWZ1bmN0aW9uKGIpe2FbYl09ZltiXT1mdW5j dGlvbihjLGQpe2lmKGEuaXMoYywiZnVuY3Rpb24iKSl0aGlzLmV2ZW50cz10 aGlzLmV2ZW50c3x8W10sdGhpcy5ldmVudHMucHVzaCh7bmFtZTpiLGY6Yyx1 bmJpbmQ6bih0aGlzLm5vZGV8fGRvY3VtZW50LGIsYyxkfHx0aGlzKX0pO2Vs c2UgZm9yKHZhciBlPTAsZj10aGlzLmV2ZW50cy5sZW5ndGg7Zj5lO2UrKylp Zih0aGlzLmV2ZW50c1tlXS5uYW1lPT1iKXRyeXt0aGlzLmV2ZW50c1tlXS5m LmNhbGwodGhpcyl9Y2F0Y2goZyl7fXJldHVybiB0aGlzfSxhWyJ1biIrYl09 ZlsidW4iK2JdPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYz10aGlzLmV2ZW50c3x8 W10sZD1jLmxlbmd0aDtkLS07KWlmKGNbZF0ubmFtZT09YiYmKGNbZF0uZj09 YXx8IWEpKXJldHVybiBjW2RdLnVuYmluZCgpLGMuc3BsaWNlKGQsMSksIWMu bGVuZ3RoJiZkZWxldGUgdGhpcy5ldmVudHMsdGhpcztyZXR1cm4gdGhpc319 KGlbcl0pO2YuaG92ZXI9ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMu bW91c2VvdmVyKGEsYykubW91c2VvdXQoYixkfHxjKX0sZi51bmhvdmVyPWZ1 bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMudW5tb3VzZW92ZXIoYSkudW5tb3Vz ZW91dChiKX07dmFyIHM9W107Zi5kcmFnPWZ1bmN0aW9uKGMsZCxlLGYsZyxo KXtmdW5jdGlvbiBpKGksaixsKXsoaS5vcmlnaW5hbEV2ZW50fHxpKS5wcmV2 ZW50RGVmYXVsdCgpLGsuX2RyYWcueD1qLGsuX2RyYWcueT1sLGsuX2RyYWcu aWQ9aS5pZGVudGlmaWVyLCFvLmxlbmd0aCYmYS5tb3VzZW1vdmUocCkubW91 c2V1cChxKSxvLnB1c2goe2VsOmssbW92ZV9zY29wZTpmLHN0YXJ0X3Njb3Bl OmcsZW5kX3Njb3BlOmh9KSxkJiZiLm9uKCJzbmFwLmRyYWcuc3RhcnQuIitr LmlkLGQpLGMmJmIub24oInNuYXAuZHJhZy5tb3ZlLiIray5pZCxjKSxlJiZi Lm9uKCJzbmFwLmRyYWcuZW5kLiIray5pZCxlKSxiKCJzbmFwLmRyYWcuc3Rh cnQuIitrLmlkLGd8fGZ8fGssaixsLGkpfWZ1bmN0aW9uIGooYSxjLGQpe2Io InNuYXAuZHJhZ2luaXQuIitrLmlkLGssYSxjLGQpfXZhciBrPXRoaXM7aWYo IWFyZ3VtZW50cy5sZW5ndGgpe3ZhciBsO3JldHVybiBrLmRyYWcoZnVuY3Rp b24oYSxiKXt0aGlzLmF0dHIoe3RyYW5zZm9ybTpsKyhsPyJUIjoidCIpK1th LGJdfSl9LGZ1bmN0aW9uKCl7bD10aGlzLnRyYW5zZm9ybSgpLmxvY2FsfSl9 cmV0dXJuIGIub24oInNuYXAuZHJhZ2luaXQuIitrLmlkLGkpLGsuX2RyYWc9 e30scy5wdXNoKHtlbDprLHN0YXJ0OmksaW5pdDpqfSksay5tb3VzZWRvd24o aiksa30sZi51bmRyYWc9ZnVuY3Rpb24oKXtmb3IodmFyIGM9cy5sZW5ndGg7 Yy0tOylzW2NdLmVsPT10aGlzJiYodGhpcy51bm1vdXNlZG93bihzW2NdLmlu aXQpLHMuc3BsaWNlKGMsMSksYi51bmJpbmQoInNuYXAuZHJhZy4qLiIrdGhp cy5pZCksYi51bmJpbmQoInNuYXAuZHJhZ2luaXQuIit0aGlzLmlkKSk7cmV0 dXJuIXMubGVuZ3RoJiZhLnVubW91c2Vtb3ZlKHApLnVubW91c2V1cChxKSx0 aGlzfX0pLGQucGx1Z2luKGZ1bmN0aW9uKGEsYyxkKXt2YXIgZT0oYy5wcm90 b3R5cGUsZC5wcm90b3R5cGUpLGY9L15ccyp1cmxcKCguKylcKS8sZz1TdHJp bmcsaD1hLl8uJDthLmZpbHRlcj17fSxlLmZpbHRlcj1mdW5jdGlvbihiKXt2 YXIgZD10aGlzOyJzdmciIT1kLnR5cGUmJihkPWQucGFwZXIpO3ZhciBlPWEu cGFyc2UoZyhiKSksZj1hLl8uaWQoKSxpPShkLm5vZGUub2Zmc2V0V2lkdGgs ZC5ub2RlLm9mZnNldEhlaWdodCxoKCJmaWx0ZXIiKSk7cmV0dXJuIGgoaSx7 aWQ6ZixmaWx0ZXJVbml0czoidXNlclNwYWNlT25Vc2UifSksaS5hcHBlbmRD aGlsZChlLm5vZGUpLGQuZGVmcy5hcHBlbmRDaGlsZChpKSxuZXcgYyhpKX0s Yi5vbigic25hcC51dGlsLmdldGF0dHIuZmlsdGVyIixmdW5jdGlvbigpe2Iu c3RvcCgpO3ZhciBjPWgodGhpcy5ub2RlLCJmaWx0ZXIiKTtpZihjKXt2YXIg ZD1nKGMpLm1hdGNoKGYpO3JldHVybiBkJiZhLnNlbGVjdChkWzFdKX19KSxi Lm9uKCJzbmFwLnV0aWwuYXR0ci5maWx0ZXIiLGZ1bmN0aW9uKGQpe2lmKGQg aW5zdGFuY2VvZiBjJiYiZmlsdGVyIj09ZC50eXBlKXtiLnN0b3AoKTt2YXIg ZT1kLm5vZGUuaWQ7ZXx8KGgoZC5ub2RlLHtpZDpkLmlkfSksZT1kLmlkKSxo KHRoaXMubm9kZSx7ZmlsdGVyOmEudXJsKGUpfSl9ZCYmIm5vbmUiIT1kfHwo Yi5zdG9wKCksdGhpcy5ub2RlLnJlbW92ZUF0dHJpYnV0ZSgiZmlsdGVyIikp fSksYS5maWx0ZXIuYmx1cj1mdW5jdGlvbihiLGMpe251bGw9PWImJihiPTIp O3ZhciBkPW51bGw9PWM/YjpbYixjXTtyZXR1cm4gYS5mb3JtYXQoJzxmZUdh dXNzaWFuQmx1ciBzdGREZXZpYXRpb249IntkZWZ9Ii8+Jyx7ZGVmOmR9KX0s YS5maWx0ZXIuYmx1ci50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlz KCl9LGEuZmlsdGVyLnNoYWRvdz1mdW5jdGlvbihiLGMsZCxlLGYpe3JldHVy biJzdHJpbmciPT10eXBlb2YgZCYmKGU9ZCxmPWUsZD00KSwic3RyaW5nIiE9 dHlwZW9mIGUmJihmPWUsZT0iIzAwMCIpLGU9ZXx8IiMwMDAiLG51bGw9PWQm JihkPTQpLG51bGw9PWYmJihmPTEpLG51bGw9PWImJihiPTAsYz0yKSxudWxs PT1jJiYoYz1iKSxlPWEuY29sb3IoZSksYS5mb3JtYXQoJzxmZUdhdXNzaWFu Qmx1ciBpbj0iU291cmNlQWxwaGEiIHN0ZERldmlhdGlvbj0ie2JsdXJ9Ii8+ PGZlT2Zmc2V0IGR4PSJ7ZHh9IiBkeT0ie2R5fSIgcmVzdWx0PSJvZmZzZXRi bHVyIi8+PGZlRmxvb2QgZmxvb2QtY29sb3I9Intjb2xvcn0iLz48ZmVDb21w b3NpdGUgaW4yPSJvZmZzZXRibHVyIiBvcGVyYXRvcj0iaW4iLz48ZmVDb21w b25lbnRUcmFuc2Zlcj48ZmVGdW5jQSB0eXBlPSJsaW5lYXIiIHNsb3BlPSJ7 b3BhY2l0eX0iLz48L2ZlQ29tcG9uZW50VHJhbnNmZXI+PGZlTWVyZ2U+PGZl TWVyZ2VOb2RlLz48ZmVNZXJnZU5vZGUgaW49IlNvdXJjZUdyYXBoaWMiLz48 L2ZlTWVyZ2U+Jyx7Y29sb3I6ZSxkeDpiLGR5OmMsYmx1cjpkLG9wYWNpdHk6 Zn0pfSxhLmZpbHRlci5zaGFkb3cudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1 cm4gdGhpcygpfSxhLmZpbHRlci5ncmF5c2NhbGU9ZnVuY3Rpb24oYil7cmV0 dXJuIG51bGw9PWImJihiPTEpLGEuZm9ybWF0KCc8ZmVDb2xvck1hdHJpeCB0 eXBlPSJtYXRyaXgiIHZhbHVlcz0ie2F9IHtifSB7Y30gMCAwIHtkfSB7ZX0g e2Z9IDAgMCB7Z30ge2J9IHtofSAwIDAgMCAwIDAgMSAwIi8+Jyx7YTouMjEy NisuNzg3NCooMS1iKSxiOi43MTUyLS43MTUyKigxLWIpLGM6LjA3MjItLjA3 MjIqKDEtYiksZDouMjEyNi0uMjEyNiooMS1iKSxlOi43MTUyKy4yODQ4Kigx LWIpLGY6LjA3MjItLjA3MjIqKDEtYiksZzouMjEyNi0uMjEyNiooMS1iKSxo Oi4wNzIyKy45Mjc4KigxLWIpfSl9LGEuZmlsdGVyLmdyYXlzY2FsZS50b1N0 cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzKCl9LGEuZmlsdGVyLnNlcGlh PWZ1bmN0aW9uKGIpe3JldHVybiBudWxsPT1iJiYoYj0xKSxhLmZvcm1hdCgn PGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0cml4IiB2YWx1ZXM9InthfSB7Yn0g e2N9IDAgMCB7ZH0ge2V9IHtmfSAwIDAge2d9IHtofSB7aX0gMCAwIDAgMCAw IDEgMCIvPicse2E6LjM5MysuNjA3KigxLWIpLGI6Ljc2OS0uNzY5KigxLWIp LGM6LjE4OS0uMTg5KigxLWIpLGQ6LjM0OS0uMzQ5KigxLWIpLGU6LjY4Nisu MzE0KigxLWIpLGY6LjE2OC0uMTY4KigxLWIpLGc6LjI3Mi0uMjcyKigxLWIp LGg6LjUzNC0uNTM0KigxLWIpLGk6LjEzMSsuODY5KigxLWIpfSl9LGEuZmls dGVyLnNlcGlhLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMoKX0s YS5maWx0ZXIuc2F0dXJhdGU9ZnVuY3Rpb24oYil7cmV0dXJuIG51bGw9PWIm JihiPTEpLGEuZm9ybWF0KCc8ZmVDb2xvck1hdHJpeCB0eXBlPSJzYXR1cmF0 ZSIgdmFsdWVzPSJ7YW1vdW50fSIvPicse2Ftb3VudDoxLWJ9KX0sYS5maWx0 ZXIuc2F0dXJhdGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcygp fSxhLmZpbHRlci5odWVSb3RhdGU9ZnVuY3Rpb24oYil7cmV0dXJuIGI9Ynx8 MCxhLmZvcm1hdCgnPGZlQ29sb3JNYXRyaXggdHlwZT0iaHVlUm90YXRlIiB2 YWx1ZXM9InthbmdsZX0iLz4nLHthbmdsZTpifSl9LGEuZmlsdGVyLmh1ZVJv dGF0ZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzKCl9LGEuZmls dGVyLmludmVydD1mdW5jdGlvbihiKXtyZXR1cm4gbnVsbD09YiYmKGI9MSks YS5mb3JtYXQoJzxmZUNvbXBvbmVudFRyYW5zZmVyPjxmZUZ1bmNSIHR5cGU9 InRhYmxlIiB0YWJsZVZhbHVlcz0ie2Ftb3VudH0ge2Ftb3VudDJ9Ii8+PGZl RnVuY0cgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSJ7YW1vdW50fSB7YW1v dW50Mn0iLz48ZmVGdW5jQiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9Inth bW91bnR9IHthbW91bnQyfSIvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj4nLHth bW91bnQ6YixhbW91bnQyOjEtYn0pfSxhLmZpbHRlci5pbnZlcnQudG9TdHJp bmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcygpfSxhLmZpbHRlci5icmlnaHRu ZXNzPWZ1bmN0aW9uKGIpe3JldHVybiBudWxsPT1iJiYoYj0xKSxhLmZvcm1h dCgnPGZlQ29tcG9uZW50VHJhbnNmZXI+PGZlRnVuY1IgdHlwZT0ibGluZWFy IiBzbG9wZT0ie2Ftb3VudH0iLz48ZmVGdW5jRyB0eXBlPSJsaW5lYXIiIHNs b3BlPSJ7YW1vdW50fSIvPjxmZUZ1bmNCIHR5cGU9ImxpbmVhciIgc2xvcGU9 InthbW91bnR9Ii8+PC9mZUNvbXBvbmVudFRyYW5zZmVyPicse2Ftb3VudDpi fSl9LGEuZmlsdGVyLmJyaWdodG5lc3MudG9TdHJpbmc9ZnVuY3Rpb24oKXty ZXR1cm4gdGhpcygpfSxhLmZpbHRlci5jb250cmFzdD1mdW5jdGlvbihiKXty ZXR1cm4gbnVsbD09YiYmKGI9MSksYS5mb3JtYXQoJzxmZUNvbXBvbmVudFRy YW5zZmVyPjxmZUZ1bmNSIHR5cGU9ImxpbmVhciIgc2xvcGU9InthbW91bnR9 IiBpbnRlcmNlcHQ9InthbW91bnQyfSIvPjxmZUZ1bmNHIHR5cGU9ImxpbmVh ciIgc2xvcGU9InthbW91bnR9IiBpbnRlcmNlcHQ9InthbW91bnQyfSIvPjxm ZUZ1bmNCIHR5cGU9ImxpbmVhciIgc2xvcGU9InthbW91bnR9IiBpbnRlcmNl cHQ9InthbW91bnQyfSIvPjwvZmVDb21wb25lbnRUcmFuc2Zlcj4nLHthbW91 bnQ6YixhbW91bnQyOi41LWIvMn0pfSxhLmZpbHRlci5jb250cmFzdC50b1N0 cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzKCl9fSksZC5wbHVnaW4oZnVu Y3Rpb24oYSxiKXt2YXIgYz1hLl8uYm94LGQ9YS5pcyxlPS9eW15hLXpdKihb dGJtbHJjXSkvaSxmPWZ1bmN0aW9uKCl7cmV0dXJuIlQiK3RoaXMuZHgrIiwi K3RoaXMuZHl9O2IucHJvdG90eXBlLmdldEFsaWduPWZ1bmN0aW9uKGEsYil7 bnVsbD09YiYmZChhLCJzdHJpbmciKSYmKGI9YSxhPW51bGwpLGE9YXx8dGhp cy5wYXBlcjt2YXIgZz1hLmdldEJCb3g/YS5nZXRCQm94KCk6YyhhKSxoPXRo aXMuZ2V0QkJveCgpLGk9e307c3dpdGNoKGI9YiYmYi5tYXRjaChlKSxiPWI/ YlsxXS50b0xvd2VyQ2FzZSgpOiJjIil7Y2FzZSJ0IjppLmR4PTAsaS5keT1n LnktaC55O2JyZWFrO2Nhc2UiYiI6aS5keD0wLGkuZHk9Zy55Mi1oLnkyO2Jy ZWFrO2Nhc2UibSI6aS5keD0wLGkuZHk9Zy5jeS1oLmN5O2JyZWFrO2Nhc2Ui bCI6aS5keD1nLngtaC54LGkuZHk9MDticmVhaztjYXNlInIiOmkuZHg9Zy54 Mi1oLngyLGkuZHk9MDticmVhaztkZWZhdWx0OmkuZHg9Zy5jeC1oLmN4LGku ZHk9MH1yZXR1cm4gaS50b1N0cmluZz1mLGl9LGIucHJvdG90eXBlLmFsaWdu PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMudHJhbnNmb3JtKCIuLi4iK3Ro aXMuZ2V0QWxpZ24oYSxiKSl9fSksZH0pOwpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9qcy9zbmFwLnN2Zy5qcyBiL3dl Yi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vanMvc25hcC5zdmcuanMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYwZmI2ZAot LS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vanMvc25hcC5zdmcuanMKQEAgLTAsMCArMSw4MTQ5IEBACisvLyBT bmFwLnN2ZyAwLjQuMQorLy8gQ29weXJpZ2h0IChjKSAyMDEzIOKAkyAyMDE1 IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBW ZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1 c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExp Y2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu c2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNF TlNFLTIuMAorLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3 IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJp YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4g IkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk LgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh Z2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMg dW5kZXIgdGhlIExpY2Vuc2UuCisvLyBidWlsZDogMjAxNS0wNC0xMworLy8g Q29weXJpZ2h0IChjKSAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVk LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8gTGljZW5zZWQgdW5kZXIgdGhl IEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7 CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21w bGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBh IGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8vd3d3LmFw YWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3Mg cmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdy aXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGlj ZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8g V0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQs IGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vu c2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlz c2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4K Ky8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUkCBcXAorLy8g4pSCIEV2ZSAwLjQuMiAtIEphdmFTY3JpcHQg RXZlbnRzIExpYnJhcnkgICAgICAgICAgICAgICAgICAgICAg4pSCIFxcCisv LyDilJzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilKQgXFwKKy8vIOKUgiBBdXRob3IgRG1pdHJ5IEJhcmFub3Zza2l5 IChodHRwOi8vZG1pdHJ5LmJhcmFub3Zza2l5LmNvbS8pIOKUgiBcXAorLy8g 4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSYIFxcCisoZnVuY3Rpb24gKGdsb2IpIHsKKyAgICB2YXIgdmVyc2lv biA9ICIwLjQuMiIsCisgICAgICAgIGhhcyA9ICJoYXNPd25Qcm9wZXJ0eSIs CisgICAgICAgIHNlcGFyYXRvciA9IC9bXC5cL10vLAorICAgICAgICBjb21h c2VwYXJhdG9yID0gL1xzKixccyovLAorICAgICAgICB3aWxkY2FyZCA9ICIq IiwKKyAgICAgICAgZnVuID0gZnVuY3Rpb24gKCkge30sCisgICAgICAgIG51 bXNvcnQgPSBmdW5jdGlvbiAoYSwgYikgeworICAgICAgICAgICAgcmV0dXJu IGEgLSBiOworICAgICAgICB9LAorICAgICAgICBjdXJyZW50X2V2ZW50LAor ICAgICAgICBzdG9wLAorICAgICAgICBldmVudHMgPSB7bjoge319LAorICAg ICAgICBmaXJzdERlZmluZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAg ICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLmxlbmd0aDsgaSA8IGlpOyBp KyspIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRoaXNbaV0gIT0g InVuZGVmaW5lZCIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRo aXNbaV07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICB9LAorICAgICAgICBsYXN0RGVmaW5lZCA9IGZ1bmN0aW9uICgpIHsK KyAgICAgICAgICAgIHZhciBpID0gdGhpcy5sZW5ndGg7CisgICAgICAgICAg ICB3aGlsZSAoLS1pKSB7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0 aGlzW2ldICE9ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgICAg IHJldHVybiB0aGlzW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgfSwKKyAgICAvKlwKKyAgICAgKiBldmUKKyAgICAg WyBtZXRob2QgXQorICAgICAqIEZpcmVzIGV2ZW50IHdpdGggZ2l2ZW4gYG5h bWVgLCBnaXZlbiBzY29wZSBhbmQgb3RoZXIgcGFyYW1ldGVycy4KKyAgICAg PiBBcmd1bWVudHMKKyAgICAgLSBuYW1lIChzdHJpbmcpIG5hbWUgb2YgdGhl ICpldmVudCosIGRvdCAoYC5gKSBvciBzbGFzaCAoYC9gKSBzZXBhcmF0ZWQK KyAgICAgLSBzY29wZSAob2JqZWN0KSBjb250ZXh0IGZvciB0aGUgZXZlbnQg aGFuZGxlcnMKKyAgICAgLSB2YXJhcmdzICguLi4pIHRoZSByZXN0IG9mIGFy Z3VtZW50cyB3aWxsIGJlIHNlbnQgdG8gZXZlbnQgaGFuZGxlcnMKKyAgICAg PSAob2JqZWN0KSBhcnJheSBvZiByZXR1cm5lZCB2YWx1ZXMgZnJvbSB0aGUg bGlzdGVuZXJzLiBBcnJheSBoYXMgdHdvIG1ldGhvZHMgYC5maXJzdERlZmlu ZWQoKWAgYW5kIGAubGFzdERlZmluZWQoKWAgdG8gZ2V0IGZpcnN0IG9yIGxh c3Qgbm90IGB1bmRlZmluZWRgIHZhbHVlLgorICAgIFwqLworICAgICAgICBl dmUgPSBmdW5jdGlvbiAobmFtZSwgc2NvcGUpIHsKKyAgICAgICAgICAgIG5h bWUgPSBTdHJpbmcobmFtZSk7CisgICAgICAgICAgICB2YXIgZSA9IGV2ZW50 cywKKyAgICAgICAgICAgICAgICBvbGRzdG9wID0gc3RvcCwKKyAgICAgICAg ICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJn dW1lbnRzLCAyKSwKKyAgICAgICAgICAgICAgICBsaXN0ZW5lcnMgPSBldmUu bGlzdGVuZXJzKG5hbWUpLAorICAgICAgICAgICAgICAgIHogPSAwLAorICAg ICAgICAgICAgICAgIGYgPSBmYWxzZSwKKyAgICAgICAgICAgICAgICBsLAor ICAgICAgICAgICAgICAgIGluZGV4ZWQgPSBbXSwKKyAgICAgICAgICAgICAg ICBxdWV1ZSA9IHt9LAorICAgICAgICAgICAgICAgIG91dCA9IFtdLAorICAg ICAgICAgICAgICAgIGNlID0gY3VycmVudF9ldmVudCwKKyAgICAgICAgICAg ICAgICBlcnJvcnMgPSBbXTsKKyAgICAgICAgICAgIG91dC5maXJzdERlZmlu ZWQgPSBmaXJzdERlZmluZWQ7CisgICAgICAgICAgICBvdXQubGFzdERlZmlu ZWQgPSBsYXN0RGVmaW5lZDsKKyAgICAgICAgICAgIGN1cnJlbnRfZXZlbnQg PSBuYW1lOworICAgICAgICAgICAgc3RvcCA9IDA7CisgICAgICAgICAgICBm b3IgKHZhciBpID0gMCwgaWkgPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgaWk7 IGkrKykgaWYgKCJ6SW5kZXgiIGluIGxpc3RlbmVyc1tpXSkgeworICAgICAg ICAgICAgICAgIGluZGV4ZWQucHVzaChsaXN0ZW5lcnNbaV0uekluZGV4KTsK KyAgICAgICAgICAgICAgICBpZiAobGlzdGVuZXJzW2ldLnpJbmRleCA8IDAp IHsKKyAgICAgICAgICAgICAgICAgICAgcXVldWVbbGlzdGVuZXJzW2ldLnpJ bmRleF0gPSBsaXN0ZW5lcnNbaV07CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICAgICAgaW5kZXhlZC5zb3J0KG51bXNvcnQp OworICAgICAgICAgICAgd2hpbGUgKGluZGV4ZWRbel0gPCAwKSB7CisgICAg ICAgICAgICAgICAgbCA9IHF1ZXVlW2luZGV4ZWRbeisrXV07CisgICAgICAg ICAgICAgICAgb3V0LnB1c2gobC5hcHBseShzY29wZSwgYXJncykpOworICAg ICAgICAgICAgICAgIGlmIChzdG9wKSB7CisgICAgICAgICAgICAgICAgICAg IHN0b3AgPSBvbGRzdG9wOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g b3V0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAg ICAgICAgbCA9IGxpc3RlbmVyc1tpXTsKKyAgICAgICAgICAgICAgICBpZiAo InpJbmRleCIgaW4gbCkgeworICAgICAgICAgICAgICAgICAgICBpZiAobC56 SW5kZXggPT0gaW5kZXhlZFt6XSkgeworICAgICAgICAgICAgICAgICAgICAg ICAgb3V0LnB1c2gobC5hcHBseShzY29wZSwgYXJncykpOworICAgICAgICAg ICAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB6Kys7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbCA9IHF1ZXVlW2luZGV4ZWRbel1dOworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGwgJiYgb3V0LnB1c2gobC5hcHBseShzY29wZSwgYXJncykp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdG9wKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg ICAgIH0gd2hpbGUgKGwpCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZVtsLnpJbmRleF0gPSBs OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnB1c2gobC5hcHBseShz Y29wZSwgYXJncykpOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RvcCkg eworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBzdG9wID0gb2xkc3RvcDsKKyAgICAgICAgICAgIGN1 cnJlbnRfZXZlbnQgPSBjZTsKKyAgICAgICAgICAgIHJldHVybiBvdXQ7Cisg ICAgICAgIH07CisgICAgICAgIC8vIFVuZG9jdW1lbnRlZC4gRGVidWcgb25s eS4KKyAgICAgICAgZXZlLl9ldmVudHMgPSBldmVudHM7CisgICAgLypcCisg ICAgICogZXZlLmxpc3RlbmVycworICAgICBbIG1ldGhvZCBdCisgICAgICog SW50ZXJuYWwgbWV0aG9kIHdoaWNoIGdpdmVzIHlvdSBhcnJheSBvZiBhbGwg ZXZlbnQgaGFuZGxlcnMgdGhhdCB3aWxsIGJlIHRyaWdnZXJlZCBieSB0aGUg Z2l2ZW4gYG5hbWVgLgorICAgICA+IEFyZ3VtZW50cworICAgICAtIG5hbWUg KHN0cmluZykgbmFtZSBvZiB0aGUgZXZlbnQsIGRvdCAoYC5gKSBvciBzbGFz aCAoYC9gKSBzZXBhcmF0ZWQKKyAgICAgPSAoYXJyYXkpIGFycmF5IG9mIGV2 ZW50IGhhbmRsZXJzCisgICAgXCovCisgICAgZXZlLmxpc3RlbmVycyA9IGZ1 bmN0aW9uIChuYW1lKSB7CisgICAgICAgIHZhciBuYW1lcyA9IG5hbWUuc3Bs aXQoc2VwYXJhdG9yKSwKKyAgICAgICAgICAgIGUgPSBldmVudHMsCisgICAg ICAgICAgICBpdGVtLAorICAgICAgICAgICAgaXRlbXMsCisgICAgICAgICAg ICBrLAorICAgICAgICAgICAgaSwKKyAgICAgICAgICAgIGlpLAorICAgICAg ICAgICAgaiwKKyAgICAgICAgICAgIGpqLAorICAgICAgICAgICAgbmVzLAor ICAgICAgICAgICAgZXMgPSBbZV0sCisgICAgICAgICAgICBvdXQgPSBbXTsK KyAgICAgICAgZm9yIChpID0gMCwgaWkgPSBuYW1lcy5sZW5ndGg7IGkgPCBp aTsgaSsrKSB7CisgICAgICAgICAgICBuZXMgPSBbXTsKKyAgICAgICAgICAg IGZvciAoaiA9IDAsIGpqID0gZXMubGVuZ3RoOyBqIDwgamo7IGorKykgewor ICAgICAgICAgICAgICAgIGUgPSBlc1tqXS5uOworICAgICAgICAgICAgICAg IGl0ZW1zID0gW2VbbmFtZXNbaV1dLCBlW3dpbGRjYXJkXV07CisgICAgICAg ICAgICAgICAgayA9IDI7CisgICAgICAgICAgICAgICAgd2hpbGUgKGstLSkg eworICAgICAgICAgICAgICAgICAgICBpdGVtID0gaXRlbXNba107CisgICAg ICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBuZXMucHVzaChpdGVtKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIG91dCA9IG91dC5jb25jYXQoaXRlbS5mIHx8IFtdKTsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGVzID0gbmVzOworICAgICAgICB9CisgICAgICAg IHJldHVybiBvdXQ7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBldmUub24K KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEJpbmRzIGdpdmVu IGV2ZW50IGhhbmRsZXIgd2l0aCBhIGdpdmVuIG5hbWUuIFlvdSBjYW4gdXNl IHdpbGRjYXJkcyDigJxgKmDigJ0gZm9yIHRoZSBuYW1lczoKKyAgICAgfCBl dmUub24oIioudW5kZXIuKiIsIGYpOworICAgICB8IGV2ZSgibW91c2UudW5k ZXIuZmxvb3IiKTsgLy8gdHJpZ2dlcnMgZgorICAgICAqIFVzZSBAZXZlIHRv IHRyaWdnZXIgdGhlIGxpc3RlbmVyLgorICAgICAqKgorICAgICA+IEFyZ3Vt ZW50cworICAgICAqKgorICAgICAtIG5hbWUgKHN0cmluZykgbmFtZSBvZiB0 aGUgZXZlbnQsIGRvdCAoYC5gKSBvciBzbGFzaCAoYC9gKSBzZXBhcmF0ZWQs IHdpdGggb3B0aW9uYWwgd2lsZGNhcmRzCisgICAgIC0gZiAoZnVuY3Rpb24p IGV2ZW50IGhhbmRsZXIgZnVuY3Rpb24KKyAgICAgKioKKyAgICAgPSAoZnVu Y3Rpb24pIHJldHVybmVkIGZ1bmN0aW9uIGFjY2VwdHMgYSBzaW5nbGUgbnVt ZXJpYyBwYXJhbWV0ZXIgdGhhdCByZXByZXNlbnRzIHotaW5kZXggb2YgdGhl IGhhbmRsZXIuIEl0IGlzIGFuIG9wdGlvbmFsIGZlYXR1cmUgYW5kIG9ubHkg dXNlZCB3aGVuIHlvdSBuZWVkIHRvIGVuc3VyZSB0aGF0IHNvbWUgc3Vic2V0 IG9mIGhhbmRsZXJzIHdpbGwgYmUgaW52b2tlZCBpbiBhIGdpdmVuIG9yZGVy LCBkZXNwaXRlIG9mIHRoZSBvcmRlciBvZiBhc3NpZ25tZW50LgorICAgICA+ IEV4YW1wbGU6CisgICAgIHwgZXZlLm9uKCJtb3VzZSIsIGVhdEl0KSgyKTsK KyAgICAgfCBldmUub24oIm1vdXNlIiwgc2NyZWFtKTsKKyAgICAgfCBldmUu b24oIm1vdXNlIiwgY2F0Y2hJdCkoMSk7CisgICAgICogVGhpcyB3aWxsIGVu c3VyZSB0aGF0IGBjYXRjaEl0YCBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBi ZWZvcmUgYGVhdEl0YC4KKyAgICAgKgorICAgICAqIElmIHlvdSB3YW50IHRv IHB1dCB5b3VyIGhhbmRsZXIgYmVmb3JlIG5vbi1pbmRleGVkIGhhbmRsZXJz LCBzcGVjaWZ5IGEgbmVnYXRpdmUgdmFsdWUuCisgICAgICogTm90ZTogSSBh c3N1bWUgbW9zdCBvZiB0aGUgdGltZSB5b3UgZG9u4oCZdCBuZWVkIHRvIHdv cnJ5IGFib3V0IHotaW5kZXgsIGJ1dCBpdOKAmXMgbmljZSB0byBoYXZlIHRo aXMgZmVhdHVyZSDigJxqdXN0IGluIGNhc2XigJ0uCisgICAgXCovCisgICAg ZXZlLm9uID0gZnVuY3Rpb24gKG5hbWUsIGYpIHsKKyAgICAgICAgbmFtZSA9 IFN0cmluZyhuYW1lKTsKKyAgICAgICAgaWYgKHR5cGVvZiBmICE9ICJmdW5j dGlvbiIpIHsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7fTsK KyAgICAgICAgfQorICAgICAgICB2YXIgbmFtZXMgPSBuYW1lLnNwbGl0KGNv bWFzZXBhcmF0b3IpOworICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBu YW1lcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICAoZnVu Y3Rpb24gKG5hbWUpIHsKKyAgICAgICAgICAgICAgICB2YXIgbmFtZXMgPSBu YW1lLnNwbGl0KHNlcGFyYXRvciksCisgICAgICAgICAgICAgICAgICAgIGUg PSBldmVudHMsCisgICAgICAgICAgICAgICAgICAgIGV4aXN0OworICAgICAg ICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG5hbWVzLmxlbmd0aDsg aSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgZSA9IGUubjsK KyAgICAgICAgICAgICAgICAgICAgZSA9IGUuaGFzT3duUHJvcGVydHkobmFt ZXNbaV0pICYmIGVbbmFtZXNbaV1dIHx8IChlW25hbWVzW2ldXSA9IHtuOiB7 fX0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlLmYg PSBlLmYgfHwgW107CisgICAgICAgICAgICAgICAgZm9yIChpID0gMCwgaWkg PSBlLmYubGVuZ3RoOyBpIDwgaWk7IGkrKykgaWYgKGUuZltpXSA9PSBmKSB7 CisgICAgICAgICAgICAgICAgICAgIGV4aXN0ID0gdHJ1ZTsKKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICFleGlzdCAmJiBlLmYucHVzaChmKTsKKyAgICAgICAgICAg IH0obmFtZXNbaV0pKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZnVu Y3Rpb24gKHpJbmRleCkgeworICAgICAgICAgICAgaWYgKCt6SW5kZXggPT0g K3pJbmRleCkgeworICAgICAgICAgICAgICAgIGYuekluZGV4ID0gK3pJbmRl eDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICB9OworICAgIC8q XAorICAgICAqIGV2ZS5mCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBSZXR1cm5zIGZ1bmN0aW9uIHRoYXQgd2lsbCBmaXJlIGdpdmVuIGV2 ZW50IHdpdGggb3B0aW9uYWwgYXJndW1lbnRzLgorICAgICAqIEFyZ3VtZW50 cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSByZXN1bHQgZnVuY3Rpb24g d2lsbCBiZSBhbHNvCisgICAgICogY29uY2F0ZWQgdG8gdGhlIGxpc3Qgb2Yg ZmluYWwgYXJndW1lbnRzLgorICAgICB8IGVsLm9uY2xpY2sgPSBldmUuZigi Y2xpY2siLCAxLCAyKTsKKyAgICAgfCBldmUub24oImNsaWNrIiwgZnVuY3Rp b24gKGEsIGIsIGMpIHsKKyAgICAgfCAgICAgY29uc29sZS5sb2coYSwgYiwg Yyk7IC8vIDEsIDIsIFtldmVudCBvYmplY3RdCisgICAgIHwgfSk7CisgICAg ID4gQXJndW1lbnRzCisgICAgIC0gZXZlbnQgKHN0cmluZykgZXZlbnQgbmFt ZQorICAgICAtIHZhcmFyZ3MgKOKApikgYW5kIGFueSBvdGhlciBhcmd1bWVu dHMKKyAgICAgPSAoZnVuY3Rpb24pIHBvc3NpYmxlIGV2ZW50IGhhbmRsZXIg ZnVuY3Rpb24KKyAgICBcKi8KKyAgICBldmUuZiA9IGZ1bmN0aW9uIChldmVu dCkgeworICAgICAgICB2YXIgYXR0cnMgPSBbXS5zbGljZS5jYWxsKGFyZ3Vt ZW50cywgMSk7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7CisgICAg ICAgICAgICBldmUuYXBwbHkobnVsbCwgW2V2ZW50LCBudWxsXS5jb25jYXQo YXR0cnMpLmNvbmNhdChbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCkpKTsK KyAgICAgICAgfTsKKyAgICB9OworICAgIC8qXAorICAgICAqIGV2ZS5zdG9w CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBJcyB1c2VkIGlu c2lkZSBhbiBldmVudCBoYW5kbGVyIHRvIHN0b3AgdGhlIGV2ZW50LCBwcmV2 ZW50aW5nIGFueSBzdWJzZXF1ZW50IGxpc3RlbmVycyBmcm9tIGZpcmluZy4K KyAgICBcKi8KKyAgICBldmUuc3RvcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAg ICAgc3RvcCA9IDE7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBldmUubnQK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIENvdWxkIGJlIHVz ZWQgaW5zaWRlIGV2ZW50IGhhbmRsZXIgdG8gZmlndXJlIG91dCBhY3R1YWwg bmFtZSBvZiB0aGUgZXZlbnQuCisgICAgICoqCisgICAgID4gQXJndW1lbnRz CisgICAgICoqCisgICAgIC0gc3VibmFtZSAoc3RyaW5nKSAjb3B0aW9uYWwg c3VibmFtZSBvZiB0aGUgZXZlbnQKKyAgICAgKioKKyAgICAgPSAoc3RyaW5n KSBuYW1lIG9mIHRoZSBldmVudCwgaWYgYHN1Ym5hbWVgIGlzIG5vdCBzcGVj aWZpZWQKKyAgICAgKiBvcgorICAgICA9IChib29sZWFuKSBgdHJ1ZWAsIGlm IGN1cnJlbnQgZXZlbnTigJlzIG5hbWUgY29udGFpbnMgYHN1Ym5hbWVgCisg ICAgXCovCisgICAgZXZlLm50ID0gZnVuY3Rpb24gKHN1Ym5hbWUpIHsKKyAg ICAgICAgaWYgKHN1Ym5hbWUpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXcg UmVnRXhwKCIoPzpcXC58XFwvfF4pIiArIHN1Ym5hbWUgKyAiKD86XFwufFxc L3wkKSIpLnRlc3QoY3VycmVudF9ldmVudCk7CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuIGN1cnJlbnRfZXZlbnQ7CisgICAgfTsKKyAgICAvKlwKKyAg ICAgKiBldmUubnRzCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBDb3VsZCBiZSB1c2VkIGluc2lkZSBldmVudCBoYW5kbGVyIHRvIGZpZ3Vy ZSBvdXQgYWN0dWFsIG5hbWUgb2YgdGhlIGV2ZW50LgorICAgICAqKgorICAg ICAqKgorICAgICA9IChhcnJheSkgbmFtZXMgb2YgdGhlIGV2ZW50CisgICAg XCovCisgICAgZXZlLm50cyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0 dXJuIGN1cnJlbnRfZXZlbnQuc3BsaXQoc2VwYXJhdG9yKTsKKyAgICB9Owor ICAgIC8qXAorICAgICAqIGV2ZS5vZmYKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIFJlbW92ZXMgZ2l2ZW4gZnVuY3Rpb24gZnJvbSB0aGUg bGlzdCBvZiBldmVudCBsaXN0ZW5lcnMgYXNzaWduZWQgdG8gZ2l2ZW4gbmFt ZS4KKyAgICAgKiBJZiBubyBhcmd1bWVudHMgc3BlY2lmaWVkIGFsbCB0aGUg ZXZlbnRzIHdpbGwgYmUgY2xlYXJlZC4KKyAgICAgKioKKyAgICAgPiBBcmd1 bWVudHMKKyAgICAgKioKKyAgICAgLSBuYW1lIChzdHJpbmcpIG5hbWUgb2Yg dGhlIGV2ZW50LCBkb3QgKGAuYCkgb3Igc2xhc2ggKGAvYCkgc2VwYXJhdGVk LCB3aXRoIG9wdGlvbmFsIHdpbGRjYXJkcworICAgICAtIGYgKGZ1bmN0aW9u KSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uCisgICAgXCovCisgICAgLypcCisg ICAgICogZXZlLnVuYmluZAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogU2VlIEBldmUub2ZmCisgICAgXCovCisgICAgZXZlLm9mZiA9IGV2 ZS51bmJpbmQgPSBmdW5jdGlvbiAobmFtZSwgZikgeworICAgICAgICBpZiAo IW5hbWUpIHsKKyAgICAgICAgICAgIGV2ZS5fZXZlbnRzID0gZXZlbnRzID0g e246IHt9fTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg ICAgICB2YXIgbmFtZXMgPSBuYW1lLnNwbGl0KGNvbWFzZXBhcmF0b3IpOwor ICAgICAgICBpZiAobmFtZXMubGVuZ3RoID4gMSkgeworICAgICAgICAgICAg Zm9yICh2YXIgaSA9IDAsIGlpID0gbmFtZXMubGVuZ3RoOyBpIDwgaWk7IGkr KykgeworICAgICAgICAgICAgICAgIGV2ZS5vZmYobmFtZXNbaV0sIGYpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9 CisgICAgICAgIG5hbWVzID0gbmFtZS5zcGxpdChzZXBhcmF0b3IpOworICAg ICAgICB2YXIgZSwKKyAgICAgICAgICAgIGtleSwKKyAgICAgICAgICAgIHNw bGljZSwKKyAgICAgICAgICAgIGksIGlpLCBqLCBqaiwKKyAgICAgICAgICAg IGN1ciA9IFtldmVudHNdOworICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IG5h bWVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIGZvciAo aiA9IDA7IGogPCBjdXIubGVuZ3RoOyBqICs9IHNwbGljZS5sZW5ndGggLSAy KSB7CisgICAgICAgICAgICAgICAgc3BsaWNlID0gW2osIDFdOworICAgICAg ICAgICAgICAgIGUgPSBjdXJbal0ubjsKKyAgICAgICAgICAgICAgICBpZiAo bmFtZXNbaV0gIT0gd2lsZGNhcmQpIHsKKyAgICAgICAgICAgICAgICAgICAg aWYgKGVbbmFtZXNbaV1dKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBz cGxpY2UucHVzaChlW25hbWVzW2ldXSk7CisgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg ICAgICBmb3IgKGtleSBpbiBlKSBpZiAoZVtoYXNdKGtleSkpIHsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHNwbGljZS5wdXNoKGVba2V5XSk7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgY3VyLnNwbGljZS5hcHBseShjdXIsIHNwbGljZSk7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMCwgaWkg PSBjdXIubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgZSA9 IGN1cltpXTsKKyAgICAgICAgICAgIHdoaWxlIChlLm4pIHsKKyAgICAgICAg ICAgICAgICBpZiAoZikgeworICAgICAgICAgICAgICAgICAgICBpZiAoZS5m KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9 IGUuZi5sZW5ndGg7IGogPCBqajsgaisrKSBpZiAoZS5mW2pdID09IGYpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmYuc3BsaWNlKGosIDEp OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg IWUuZi5sZW5ndGggJiYgZGVsZXRlIGUuZjsKKyAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBlLm4pIGlm IChlLm5baGFzXShrZXkpICYmIGUubltrZXldLmYpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHZhciBmdW5jcyA9IGUubltrZXldLmY7CisgICAgICAg ICAgICAgICAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9IGZ1bmNzLmxlbmd0 aDsgaiA8IGpqOyBqKyspIGlmIChmdW5jc1tqXSA9PSBmKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZnVuY3Muc3BsaWNlKGosIDEpOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgIWZ1bmNz Lmxlbmd0aCAmJiBkZWxldGUgZS5uW2tleV0uZjsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgIGRlbGV0ZSBlLmY7CisgICAgICAgICAgICAgICAgICAgIGZv ciAoa2V5IGluIGUubikgaWYgKGUubltoYXNdKGtleSkgJiYgZS5uW2tleV0u ZikgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGUubltrZXld LmY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgZSA9IGUubjsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH07CisgICAgLypcCisgICAgICogZXZlLm9uY2UKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEJpbmRzIGdpdmVuIGV2 ZW50IGhhbmRsZXIgd2l0aCBhIGdpdmVuIG5hbWUgdG8gb25seSBydW4gb25j ZSB0aGVuIHVuYmluZCBpdHNlbGYuCisgICAgIHwgZXZlLm9uY2UoImxvZ2lu IiwgZik7CisgICAgIHwgZXZlKCJsb2dpbiIpOyAvLyB0cmlnZ2VycyBmCisg ICAgIHwgZXZlKCJsb2dpbiIpOyAvLyBubyBsaXN0ZW5lcnMKKyAgICAgKiBV c2UgQGV2ZSB0byB0cmlnZ2VyIHRoZSBsaXN0ZW5lci4KKyAgICAgKioKKyAg ICAgPiBBcmd1bWVudHMKKyAgICAgKioKKyAgICAgLSBuYW1lIChzdHJpbmcp IG5hbWUgb2YgdGhlIGV2ZW50LCBkb3QgKGAuYCkgb3Igc2xhc2ggKGAvYCkg c2VwYXJhdGVkLCB3aXRoIG9wdGlvbmFsIHdpbGRjYXJkcworICAgICAtIGYg KGZ1bmN0aW9uKSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uCisgICAgICoqCisg ICAgID0gKGZ1bmN0aW9uKSBzYW1lIHJldHVybiBmdW5jdGlvbiBhcyBAZXZl Lm9uCisgICAgXCovCisgICAgZXZlLm9uY2UgPSBmdW5jdGlvbiAobmFtZSwg ZikgeworICAgICAgICB2YXIgZjIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg ICAgICBldmUudW5iaW5kKG5hbWUsIGYyKTsKKyAgICAgICAgICAgIHJldHVy biBmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisgICAgICAgIH07CisgICAg ICAgIHJldHVybiBldmUub24obmFtZSwgZjIpOworICAgIH07CisgICAgLypc CisgICAgICogZXZlLnZlcnNpb24KKyAgICAgWyBwcm9wZXJ0eSAoc3RyaW5n KSBdCisgICAgICoqCisgICAgICogQ3VycmVudCB2ZXJzaW9uIG9mIHRoZSBs aWJyYXJ5LgorICAgIFwqLworICAgIGV2ZS52ZXJzaW9uID0gdmVyc2lvbjsK KyAgICBldmUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl dHVybiAiWW91IGFyZSBydW5uaW5nIEV2ZSAiICsgdmVyc2lvbjsKKyAgICB9 OworICAgICh0eXBlb2YgbW9kdWxlICE9ICJ1bmRlZmluZWQiICYmIG1vZHVs ZS5leHBvcnRzKSA/IChtb2R1bGUuZXhwb3J0cyA9IGV2ZSkgOiAodHlwZW9m IGRlZmluZSA9PT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kID8gKGRlZmlu ZSgiZXZlIiwgW10sIGZ1bmN0aW9uKCkgeyByZXR1cm4gZXZlOyB9KSkgOiAo Z2xvYi5ldmUgPSBldmUpKTsKK30pKHRoaXMpOworCisoZnVuY3Rpb24gKGds b2IsIGZhY3RvcnkpIHsKKyAgICAvLyBBTUQgc3VwcG9ydAorICAgIGlmICh0 eXBlb2YgZGVmaW5lID09ICJmdW5jdGlvbiIgJiYgZGVmaW5lLmFtZCkgewor ICAgICAgICAvLyBEZWZpbmUgYXMgYW4gYW5vbnltb3VzIG1vZHVsZQorICAg ICAgICBkZWZpbmUoWyJldmUiXSwgZnVuY3Rpb24gKGV2ZSkgeworICAgICAg ICAgICAgcmV0dXJuIGZhY3RvcnkoZ2xvYiwgZXZlKTsKKyAgICAgICAgfSk7 CisgICAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyAhPSAndW5kZWZpbmVk JykgeworICAgICAgICAvLyBOZXh0IGZvciBOb2RlLmpzIG9yIENvbW1vbkpT CisgICAgICAgIHZhciBldmUgPSByZXF1aXJlKCdldmUnKTsKKyAgICAgICAg bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KGdsb2IsIGV2ZSk7CisgICAgfSBl bHNlIHsKKyAgICAgICAgLy8gQnJvd3NlciBnbG9iYWxzIChnbG9iIGlzIHdp bmRvdykKKyAgICAgICAgLy8gU25hcCBhZGRzIGl0c2VsZiB0byB3aW5kb3cK KyAgICAgICAgZmFjdG9yeShnbG9iLCBnbG9iLmV2ZSk7CisgICAgfQorfSh3 aW5kb3cgfHwgdGhpcywgZnVuY3Rpb24gKHdpbmRvdywgZXZlKSB7CisvLyBD b3B5cmlnaHQgKGMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQu IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLyBMaWNlbnNlZCB1bmRlciB0aGUg QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsK Ky8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBs aWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEg Y29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8gaHR0cDovL3d3dy5hcGFjaGUu b3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLyBVbmxlc3MgcmVxdWlyZWQg YnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNv ZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBk aXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBX QVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBl eHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRo ZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5k CisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK3ZhciBtaW5h ID0gKGZ1bmN0aW9uIChldmUpIHsKKyAgICB2YXIgYW5pbWF0aW9ucyA9IHt9 LAorICAgIHJlcXVlc3RBbmltRnJhbWUgPSB3aW5kb3cucmVxdWVzdEFuaW1h dGlvbkZyYW1lICAgICAgIHx8CisgICAgICAgICAgICAgICAgICAgICAgIHdp bmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwKKyAgICAgICAg ICAgICAgICAgICAgICAgd2luZG93Lm1velJlcXVlc3RBbmltYXRpb25GcmFt ZSAgICB8fAorICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cub1JlcXVl c3RBbmltYXRpb25GcmFtZSAgICAgIHx8CisgICAgICAgICAgICAgICAgICAg ICAgIHdpbmRvdy5tc1JlcXVlc3RBbmltYXRpb25GcmFtZSAgICAgfHwKKyAg ICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKGNhbGxiYWNrKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNhbGxiYWNr LCAxNik7CisgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAgaXNBcnJh eSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGEpIHsKKyAgICAgICAg cmV0dXJuIGEgaW5zdGFuY2VvZiBBcnJheSB8fAorICAgICAgICAgICAgT2Jq ZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpID09ICJbb2JqZWN0IEFy cmF5XSI7CisgICAgfSwKKyAgICBpZGdlbiA9IDAsCisgICAgaWRwcmVmaXgg PSAiTSIgKyAoK25ldyBEYXRlKS50b1N0cmluZygzNiksCisgICAgSUQgPSBm dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBpZHByZWZpeCArIChpZGdl bisrKS50b1N0cmluZygzNik7CisgICAgfSwKKyAgICBkaWZmID0gZnVuY3Rp b24gKGEsIGIsIEEsIEIpIHsKKyAgICAgICAgaWYgKGlzQXJyYXkoYSkpIHsK KyAgICAgICAgICAgIHJlcyA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIg aSA9IDAsIGlpID0gYS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAg ICAgICAgICAgcmVzW2ldID0gZGlmZihhW2ldLCBiLCBBW2ldLCBCKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAg IH0KKyAgICAgICAgdmFyIGRpZiA9IChBIC0gYSkgLyAoQiAtIGIpOworICAg ICAgICByZXR1cm4gZnVuY3Rpb24gKGJiKSB7CisgICAgICAgICAgICByZXR1 cm4gYSArIGRpZiAqIChiYiAtIGIpOworICAgICAgICB9OworICAgIH0sCisg ICAgdGltZXIgPSBEYXRlLm5vdyB8fCBmdW5jdGlvbiAoKSB7CisgICAgICAg IHJldHVybiArbmV3IERhdGU7CisgICAgfSwKKyAgICBzdGEgPSBmdW5jdGlv biAodmFsKSB7CisgICAgICAgIHZhciBhID0gdGhpczsKKyAgICAgICAgaWYg KHZhbCA9PSBudWxsKSB7CisgICAgICAgICAgICByZXR1cm4gYS5zOworICAg ICAgICB9CisgICAgICAgIHZhciBkcyA9IGEucyAtIHZhbDsKKyAgICAgICAg YS5iICs9IGEuZHVyICogZHM7CisgICAgICAgIGEuQiArPSBhLmR1ciAqIGRz OworICAgICAgICBhLnMgPSB2YWw7CisgICAgfSwKKyAgICBzcGVlZCA9IGZ1 bmN0aW9uICh2YWwpIHsKKyAgICAgICAgdmFyIGEgPSB0aGlzOworICAgICAg ICBpZiAodmFsID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBhLnNw ZDsKKyAgICAgICAgfQorICAgICAgICBhLnNwZCA9IHZhbDsKKyAgICB9LAor ICAgIGR1cmF0aW9uID0gZnVuY3Rpb24gKHZhbCkgeworICAgICAgICB2YXIg YSA9IHRoaXM7CisgICAgICAgIGlmICh2YWwgPT0gbnVsbCkgeworICAgICAg ICAgICAgcmV0dXJuIGEuZHVyOworICAgICAgICB9CisgICAgICAgIGEucyA9 IGEucyAqIHZhbCAvIGEuZHVyOworICAgICAgICBhLmR1ciA9IHZhbDsKKyAg ICB9LAorICAgIHN0b3BpdCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy IGEgPSB0aGlzOworICAgICAgICBkZWxldGUgYW5pbWF0aW9uc1thLmlkXTsK KyAgICAgICAgYS51cGRhdGUoKTsKKyAgICAgICAgZXZlKCJtaW5hLnN0b3Au IiArIGEuaWQsIGEpOworICAgIH0sCisgICAgcGF1c2UgPSBmdW5jdGlvbiAo KSB7CisgICAgICAgIHZhciBhID0gdGhpczsKKyAgICAgICAgaWYgKGEucGRp ZikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg IGRlbGV0ZSBhbmltYXRpb25zW2EuaWRdOworICAgICAgICBhLnVwZGF0ZSgp OworICAgICAgICBhLnBkaWYgPSBhLmdldCgpIC0gYS5iOworICAgIH0sCisg ICAgcmVzdW1lID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgYSA9IHRo aXM7CisgICAgICAgIGlmICghYS5wZGlmKSB7CisgICAgICAgICAgICByZXR1 cm47CisgICAgICAgIH0KKyAgICAgICAgYS5iID0gYS5nZXQoKSAtIGEucGRp ZjsKKyAgICAgICAgZGVsZXRlIGEucGRpZjsKKyAgICAgICAgYW5pbWF0aW9u c1thLmlkXSA9IGE7CisgICAgfSwKKyAgICB1cGRhdGUgPSBmdW5jdGlvbiAo KSB7CisgICAgICAgIHZhciBhID0gdGhpcywKKyAgICAgICAgICAgIHJlczsK KyAgICAgICAgaWYgKGlzQXJyYXkoYS5zdGFydCkpIHsKKyAgICAgICAgICAg IHJlcyA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGpqID0g YS5zdGFydC5sZW5ndGg7IGogPCBqajsgaisrKSB7CisgICAgICAgICAgICAg ICAgcmVzW2pdID0gK2Euc3RhcnRbal0gKworICAgICAgICAgICAgICAgICAg ICAoYS5lbmRbal0gLSBhLnN0YXJ0W2pdKSAqIGEuZWFzaW5nKGEucyk7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBy ZXMgPSArYS5zdGFydCArIChhLmVuZCAtIGEuc3RhcnQpICogYS5lYXNpbmco YS5zKTsKKyAgICAgICAgfQorICAgICAgICBhLnNldChyZXMpOworICAgIH0s CisgICAgZnJhbWUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBsZW4g PSAwOworICAgICAgICBmb3IgKHZhciBpIGluIGFuaW1hdGlvbnMpIGlmIChh bmltYXRpb25zLmhhc093blByb3BlcnR5KGkpKSB7CisgICAgICAgICAgICB2 YXIgYSA9IGFuaW1hdGlvbnNbaV0sCisgICAgICAgICAgICAgICAgYiA9IGEu Z2V0KCksCisgICAgICAgICAgICAgICAgcmVzOworICAgICAgICAgICAgbGVu Kys7CisgICAgICAgICAgICBhLnMgPSAoYiAtIGEuYikgLyAoYS5kdXIgLyBh LnNwZCk7CisgICAgICAgICAgICBpZiAoYS5zID49IDEpIHsKKyAgICAgICAg ICAgICAgICBkZWxldGUgYW5pbWF0aW9uc1tpXTsKKyAgICAgICAgICAgICAg ICBhLnMgPSAxOworICAgICAgICAgICAgICAgIGxlbi0tOworICAgICAgICAg ICAgICAgIChmdW5jdGlvbiAoYSkgeworICAgICAgICAgICAgICAgICAgICBz ZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGV2ZSgibWluYS5maW5pc2guIiArIGEuaWQsIGEpOworICAgICAgICAg ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KGEpKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGEudXBkYXRlKCk7CisgICAgICAgIH0K KyAgICAgICAgbGVuICYmIHJlcXVlc3RBbmltRnJhbWUoZnJhbWUpOworICAg IH0sCisgICAgLypcCisgICAgICogbWluYQorICAgICBbIG1ldGhvZCBdCisg ICAgICoqCisgICAgICogR2VuZXJpYyBhbmltYXRpb24gb2YgbnVtYmVycwor ICAgICAqKgorICAgICAtIGEgKG51bWJlcikgc3RhcnQgX3NsYXZlXyBudW1i ZXIKKyAgICAgLSBBIChudW1iZXIpIGVuZCBfc2xhdmVfIG51bWJlcgorICAg ICAtIGIgKG51bWJlcikgc3RhcnQgX21hc3Rlcl8gbnVtYmVyIChzdGFydCB0 aW1lIGluIGdlbmVyYWwgY2FzZSkKKyAgICAgLSBCIChudW1iZXIpIGVuZCBf bWFzdGVyXyBudW1iZXIgKGVuZCB0aW1lIGluIGdlcmVhbCBjYXNlKQorICAg ICAtIGdldCAoZnVuY3Rpb24pIGdldHRlciBvZiBfbWFzdGVyXyBudW1iZXIg KHNlZSBAbWluYS50aW1lKQorICAgICAtIHNldCAoZnVuY3Rpb24pIHNldHRl ciBvZiBfc2xhdmVfIG51bWJlcgorICAgICAtIGVhc2luZyAoZnVuY3Rpb24p ICNvcHRpb25hbCBlYXNpbmcgZnVuY3Rpb24sIGRlZmF1bHQgaXMgQG1pbmEu bGluZWFyCisgICAgID0gKG9iamVjdCkgYW5pbWF0aW9uIGRlc2NyaXB0b3IK KyAgICAgbyB7CisgICAgIG8gICAgICAgICBpZCAoc3RyaW5nKSBhbmltYXRp b24gaWQsCisgICAgIG8gICAgICAgICBzdGFydCAobnVtYmVyKSBzdGFydCBf c2xhdmVfIG51bWJlciwKKyAgICAgbyAgICAgICAgIGVuZCAobnVtYmVyKSBl bmQgX3NsYXZlXyBudW1iZXIsCisgICAgIG8gICAgICAgICBiIChudW1iZXIp IHN0YXJ0IF9tYXN0ZXJfIG51bWJlciwKKyAgICAgbyAgICAgICAgIHMgKG51 bWJlcikgYW5pbWF0aW9uIHN0YXR1cyAoMC4uMSksCisgICAgIG8gICAgICAg ICBkdXIgKG51bWJlcikgYW5pbWF0aW9uIGR1cmF0aW9uLAorICAgICBvICAg ICAgICAgc3BkIChudW1iZXIpIGFuaW1hdGlvbiBzcGVlZCwKKyAgICAgbyAg ICAgICAgIGdldCAoZnVuY3Rpb24pIGdldHRlciBvZiBfbWFzdGVyXyBudW1i ZXIgKHNlZSBAbWluYS50aW1lKSwKKyAgICAgbyAgICAgICAgIHNldCAoZnVu Y3Rpb24pIHNldHRlciBvZiBfc2xhdmVfIG51bWJlciwKKyAgICAgbyAgICAg ICAgIGVhc2luZyAoZnVuY3Rpb24pIGVhc2luZyBmdW5jdGlvbiwgZGVmYXVs dCBpcyBAbWluYS5saW5lYXIsCisgICAgIG8gICAgICAgICBzdGF0dXMgKGZ1 bmN0aW9uKSBzdGF0dXMgZ2V0dGVyL3NldHRlciwKKyAgICAgbyAgICAgICAg IHNwZWVkIChmdW5jdGlvbikgc3BlZWQgZ2V0dGVyL3NldHRlciwKKyAgICAg byAgICAgICAgIGR1cmF0aW9uIChmdW5jdGlvbikgZHVyYXRpb24gZ2V0dGVy L3NldHRlciwKKyAgICAgbyAgICAgICAgIHN0b3AgKGZ1bmN0aW9uKSBhbmlt YXRpb24gc3RvcHBlcgorICAgICBvICAgICAgICAgcGF1c2UgKGZ1bmN0aW9u KSBwYXVzZXMgdGhlIGFuaW1hdGlvbgorICAgICBvICAgICAgICAgcmVzdW1l IChmdW5jdGlvbikgcmVzdW1lcyB0aGUgYW5pbWF0aW9uCisgICAgIG8gICAg ICAgICB1cGRhdGUgKGZ1bmN0aW9uKSBjYWxsZXMgc2V0dGVyIHdpdGggdGhl IHJpZ2h0IHZhbHVlIG9mIHRoZSBhbmltYXRpb24KKyAgICAgbyB9CisgICAg XCovCisgICAgbWluYSA9IGZ1bmN0aW9uIChhLCBBLCBiLCBCLCBnZXQsIHNl dCwgZWFzaW5nKSB7CisgICAgICAgIHZhciBhbmltID0geworICAgICAgICAg ICAgaWQ6IElEKCksCisgICAgICAgICAgICBzdGFydDogYSwKKyAgICAgICAg ICAgIGVuZDogQSwKKyAgICAgICAgICAgIGI6IGIsCisgICAgICAgICAgICBz OiAwLAorICAgICAgICAgICAgZHVyOiBCIC0gYiwKKyAgICAgICAgICAgIHNw ZDogMSwKKyAgICAgICAgICAgIGdldDogZ2V0LAorICAgICAgICAgICAgc2V0 OiBzZXQsCisgICAgICAgICAgICBlYXNpbmc6IGVhc2luZyB8fCBtaW5hLmxp bmVhciwKKyAgICAgICAgICAgIHN0YXR1czogc3RhLAorICAgICAgICAgICAg c3BlZWQ6IHNwZWVkLAorICAgICAgICAgICAgZHVyYXRpb246IGR1cmF0aW9u LAorICAgICAgICAgICAgc3RvcDogc3RvcGl0LAorICAgICAgICAgICAgcGF1 c2U6IHBhdXNlLAorICAgICAgICAgICAgcmVzdW1lOiByZXN1bWUsCisgICAg ICAgICAgICB1cGRhdGU6IHVwZGF0ZQorICAgICAgICB9OworICAgICAgICBh bmltYXRpb25zW2FuaW0uaWRdID0gYW5pbTsKKyAgICAgICAgdmFyIGxlbiA9 IDAsIGk7CisgICAgICAgIGZvciAoaSBpbiBhbmltYXRpb25zKSBpZiAoYW5p bWF0aW9ucy5oYXNPd25Qcm9wZXJ0eShpKSkgeworICAgICAgICAgICAgbGVu Kys7CisgICAgICAgICAgICBpZiAobGVuID09IDIpIHsKKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBsZW4gPT0gMSAmJiByZXF1ZXN0QW5pbUZyYW1lKGZyYW1lKTsKKyAgICAg ICAgcmV0dXJuIGFuaW07CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBtaW5h LnRpbWUKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVy bnMgdGhlIGN1cnJlbnQgdGltZS4gRXF1aXZhbGVudCB0bzoKKyAgICAgfCBm dW5jdGlvbiAoKSB7CisgICAgIHwgICAgIHJldHVybiAobmV3IERhdGUpLmdl dFRpbWUoKTsKKyAgICAgfCB9CisgICAgXCovCisgICAgbWluYS50aW1lID0g dGltZXI7CisgICAgLypcCisgICAgICogbWluYS5nZXRCeUlkCisgICAgIFsg bWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIGFuIGFuaW1hdGlv biBieSBpdHMgaWQKKyAgICAgLSBpZCAoc3RyaW5nKSBhbmltYXRpb24ncyBp ZAorICAgICA9IChvYmplY3QpIFNlZSBAbWluYQorICAgIFwqLworICAgIG1p bmEuZ2V0QnlJZCA9IGZ1bmN0aW9uIChpZCkgeworICAgICAgICByZXR1cm4g YW5pbWF0aW9uc1tpZF0gfHwgbnVsbDsKKyAgICB9OworCisgICAgLypcCisg ICAgICogbWluYS5saW5lYXIKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgor ICAgICAqIERlZmF1bHQgbGluZWFyIGVhc2luZworICAgICAtIG4gKG51bWJl cikgaW5wdXQgMC4uMQorICAgICA9IChudW1iZXIpIG91dHB1dCAwLi4xCisg ICAgXCovCisgICAgbWluYS5saW5lYXIgPSBmdW5jdGlvbiAobikgeworICAg ICAgICByZXR1cm4gbjsKKyAgICB9OworICAgIC8qXAorICAgICAqIG1pbmEu ZWFzZW91dAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogRWFz ZW91dCBlYXNpbmcKKyAgICAgLSBuIChudW1iZXIpIGlucHV0IDAuLjEKKyAg ICAgPSAobnVtYmVyKSBvdXRwdXQgMC4uMQorICAgIFwqLworICAgIG1pbmEu ZWFzZW91dCA9IGZ1bmN0aW9uIChuKSB7CisgICAgICAgIHJldHVybiBNYXRo LnBvdyhuLCAxLjcpOworICAgIH07CisgICAgLypcCisgICAgICogbWluYS5l YXNlaW4KKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEVhc2Vp biBlYXNpbmcKKyAgICAgLSBuIChudW1iZXIpIGlucHV0IDAuLjEKKyAgICAg PSAobnVtYmVyKSBvdXRwdXQgMC4uMQorICAgIFwqLworICAgIG1pbmEuZWFz ZWluID0gZnVuY3Rpb24gKG4pIHsKKyAgICAgICAgcmV0dXJuIE1hdGgucG93 KG4sIC40OCk7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBtaW5hLmVhc2Vp bm91dAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogRWFzZWlu b3V0IGVhc2luZworICAgICAtIG4gKG51bWJlcikgaW5wdXQgMC4uMQorICAg ICA9IChudW1iZXIpIG91dHB1dCAwLi4xCisgICAgXCovCisgICAgbWluYS5l YXNlaW5vdXQgPSBmdW5jdGlvbiAobikgeworICAgICAgICBpZiAobiA9PSAx KSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgICAg ICBpZiAobiA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg ICAgfQorICAgICAgICB2YXIgcSA9IC40OCAtIG4gLyAxLjA0LAorICAgICAg ICAgICAgUSA9IE1hdGguc3FydCguMTczNCArIHEgKiBxKSwKKyAgICAgICAg ICAgIHggPSBRIC0gcSwKKyAgICAgICAgICAgIFggPSBNYXRoLnBvdyhNYXRo LmFicyh4KSwgMSAvIDMpICogKHggPCAwID8gLTEgOiAxKSwKKyAgICAgICAg ICAgIHkgPSAtUSAtIHEsCisgICAgICAgICAgICBZID0gTWF0aC5wb3coTWF0 aC5hYnMoeSksIDEgLyAzKSAqICh5IDwgMCA/IC0xIDogMSksCisgICAgICAg ICAgICB0ID0gWCArIFkgKyAuNTsKKyAgICAgICAgcmV0dXJuICgxIC0gdCkg KiAzICogdCAqIHQgKyB0ICogdCAqIHQ7CisgICAgfTsKKyAgICAvKlwKKyAg ICAgKiBtaW5hLmJhY2tpbgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogQmFja2luIGVhc2luZworICAgICAtIG4gKG51bWJlcikgaW5wdXQg MC4uMQorICAgICA9IChudW1iZXIpIG91dHB1dCAwLi4xCisgICAgXCovCisg ICAgbWluYS5iYWNraW4gPSBmdW5jdGlvbiAobikgeworICAgICAgICBpZiAo biA9PSAxKSB7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQor ICAgICAgICB2YXIgcyA9IDEuNzAxNTg7CisgICAgICAgIHJldHVybiBuICog biAqICgocyArIDEpICogbiAtIHMpOworICAgIH07CisgICAgLypcCisgICAg ICogbWluYS5iYWNrb3V0CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBCYWNrb3V0IGVhc2luZworICAgICAtIG4gKG51bWJlcikgaW5wdXQg MC4uMQorICAgICA9IChudW1iZXIpIG91dHB1dCAwLi4xCisgICAgXCovCisg ICAgbWluYS5iYWNrb3V0ID0gZnVuY3Rpb24gKG4pIHsKKyAgICAgICAgaWYg KG4gPT0gMCkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K KyAgICAgICAgbiA9IG4gLSAxOworICAgICAgICB2YXIgcyA9IDEuNzAxNTg7 CisgICAgICAgIHJldHVybiBuICogbiAqICgocyArIDEpICogbiArIHMpICsg MTsKKyAgICB9OworICAgIC8qXAorICAgICAqIG1pbmEuZWxhc3RpYworICAg ICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogRWxhc3RpYyBlYXNpbmcK KyAgICAgLSBuIChudW1iZXIpIGlucHV0IDAuLjEKKyAgICAgPSAobnVtYmVy KSBvdXRwdXQgMC4uMQorICAgIFwqLworICAgIG1pbmEuZWxhc3RpYyA9IGZ1 bmN0aW9uIChuKSB7CisgICAgICAgIGlmIChuID09ICEhbikgeworICAgICAg ICAgICAgcmV0dXJuIG47CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE1h dGgucG93KDIsIC0xMCAqIG4pICogTWF0aC5zaW4oKG4gLSAuMDc1KSAqCisg ICAgICAgICAgICAoMiAqIE1hdGguUEkpIC8gLjMpICsgMTsKKyAgICB9Owor ICAgIC8qXAorICAgICAqIG1pbmEuYm91bmNlCisgICAgIFsgbWV0aG9kIF0K KyAgICAgKioKKyAgICAgKiBCb3VuY2UgZWFzaW5nCisgICAgIC0gbiAobnVt YmVyKSBpbnB1dCAwLi4xCisgICAgID0gKG51bWJlcikgb3V0cHV0IDAuLjEK KyAgICBcKi8KKyAgICBtaW5hLmJvdW5jZSA9IGZ1bmN0aW9uIChuKSB7Cisg ICAgICAgIHZhciBzID0gNy41NjI1LAorICAgICAgICAgICAgcCA9IDIuNzUs CisgICAgICAgICAgICBsOworICAgICAgICBpZiAobiA8ICgxIC8gcCkpIHsK KyAgICAgICAgICAgIGwgPSBzICogbiAqIG47CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICBpZiAobiA8ICgyIC8gcCkpIHsKKyAgICAgICAgICAg ICAgICBuIC09ICgxLjUgLyBwKTsKKyAgICAgICAgICAgICAgICBsID0gcyAq IG4gKiBuICsgLjc1OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICBpZiAobiA8ICgyLjUgLyBwKSkgeworICAgICAgICAgICAgICAg ICAgICBuIC09ICgyLjI1IC8gcCk7CisgICAgICAgICAgICAgICAgICAgIGwg PSBzICogbiAqIG4gKyAuOTM3NTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgICAgICBuIC09ICgyLjYyNSAvIHApOworICAg ICAgICAgICAgICAgICAgICBsID0gcyAqIG4gKiBuICsgLjk4NDM3NTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgcmV0dXJuIGw7CisgICAgfTsKKyAgICB3aW5kb3cubWluYSA9IG1p bmE7CisgICAgcmV0dXJuIG1pbmE7Cit9KSh0eXBlb2YgZXZlID09ICJ1bmRl ZmluZWQiID8gZnVuY3Rpb24gKCkge30gOiBldmUpOworLy8gQ29weXJpZ2h0 IChjKSAyMDEzIC0gMjAxNSBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g QWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0 aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2Ui KTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNv bXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWlu IGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vIGh0dHA6Ly93d3cu YXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVz cyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4g d3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBM aWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisv LyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lO RCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGlj ZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJt aXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNl LgorCit2YXIgU25hcCA9IChmdW5jdGlvbihyb290KSB7CitTbmFwLnZlcnNp b24gPSAiMC40LjAiOworLypcCisgKiBTbmFwCisgWyBtZXRob2QgXQorICoq CisgKiBDcmVhdGVzIGEgZHJhd2luZyBzdXJmYWNlIG9yIHdyYXBzIGV4aXN0 aW5nIFNWRyBlbGVtZW50LgorICoqCisgLSB3aWR0aCAobnVtYmVyfHN0cmlu Zykgd2lkdGggb2Ygc3VyZmFjZQorIC0gaGVpZ2h0IChudW1iZXJ8c3RyaW5n KSBoZWlnaHQgb2Ygc3VyZmFjZQorICogb3IKKyAtIERPTSAoU1ZHRWxlbWVu dCkgZWxlbWVudCB0byBiZSB3cmFwcGVkIGludG8gU25hcCBzdHJ1Y3R1cmUK KyAqIG9yCisgLSBhcnJheSAoYXJyYXkpIGFycmF5IG9mIGVsZW1lbnRzICh3 aWxsIHJldHVybiBzZXQgb2YgZWxlbWVudHMpCisgKiBvcgorIC0gcXVlcnkg KHN0cmluZykgQ1NTIHF1ZXJ5IHNlbGVjdG9yCisgPSAob2JqZWN0KSBARWxl bWVudAorXCovCitmdW5jdGlvbiBTbmFwKHcsIGgpIHsKKyAgICBpZiAodykg eworICAgICAgICBpZiAody5ub2RlVHlwZSkgeworICAgICAgICAgICAgcmV0 dXJuIHdyYXAodyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzKHcsICJh cnJheSIpICYmIFNuYXAuc2V0KSB7CisgICAgICAgICAgICByZXR1cm4gU25h cC5zZXQuYXBwbHkoU25hcCwgdyk7CisgICAgICAgIH0KKyAgICAgICAgaWYg KHcgaW5zdGFuY2VvZiBFbGVtZW50KSB7CisgICAgICAgICAgICByZXR1cm4g dzsKKyAgICAgICAgfQorICAgICAgICBpZiAoaCA9PSBudWxsKSB7CisgICAg ICAgICAgICB3ID0gZ2xvYi5kb2MucXVlcnlTZWxlY3RvcihTdHJpbmcodykp OworICAgICAgICAgICAgcmV0dXJuIHdyYXAodyk7CisgICAgICAgIH0KKyAg ICB9CisgICAgdyA9IHcgPT0gbnVsbCA/ICIxMDAlIiA6IHc7CisgICAgaCA9 IGggPT0gbnVsbCA/ICIxMDAlIiA6IGg7CisgICAgcmV0dXJuIG5ldyBQYXBl cih3LCBoKTsKK30KK1NuYXAudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7Cisg ICAgcmV0dXJuICJTbmFwIHYiICsgdGhpcy52ZXJzaW9uOworfTsKK1NuYXAu XyA9IHt9OwordmFyIGdsb2IgPSB7CisgICAgd2luOiByb290LndpbmRvdywK KyAgICBkb2M6IHJvb3Qud2luZG93LmRvY3VtZW50Cit9OworU25hcC5fLmds b2IgPSBnbG9iOwordmFyIGhhcyA9ICJoYXNPd25Qcm9wZXJ0eSIsCisgICAg U3RyID0gU3RyaW5nLAorICAgIHRvRmxvYXQgPSBwYXJzZUZsb2F0LAorICAg IHRvSW50ID0gcGFyc2VJbnQsCisgICAgbWF0aCA9IE1hdGgsCisgICAgbW1h eCA9IG1hdGgubWF4LAorICAgIG1taW4gPSBtYXRoLm1pbiwKKyAgICBhYnMg PSBtYXRoLmFicywKKyAgICBwb3cgPSBtYXRoLnBvdywKKyAgICBQSSA9IG1h dGguUEksCisgICAgcm91bmQgPSBtYXRoLnJvdW5kLAorICAgIEUgPSAiIiwK KyAgICBTID0gIiAiLAorICAgIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnBy b3RvdHlwZS50b1N0cmluZywKKyAgICBJU1VSTCA9IC9edXJsXChbJyJdPyhb XlwpXSs/KVsnIl0/XCkkL2ksCisgICAgY29sb3VyUmVnRXhwID0gL15ccyoo KCNbYS1mXGRdezZ9KXwoI1thLWZcZF17M30pfHJnYmE/XChccyooW1xkXC5d KyU/XHMqLFxzKltcZFwuXSslP1xzKixccypbXGRcLl0rJT8oPzpccyosXHMq W1xkXC5dKyU/KT8pXHMqXCl8aHNiYT9cKFxzKihbXGRcLl0rKD86ZGVnfFx4 YjB8JSk/XHMqLFxzKltcZFwuXSslP1xzKixccypbXGRcLl0rKD86JT9ccyos XHMqW1xkXC5dKyk/JT8pXHMqXCl8aHNsYT9cKFxzKihbXGRcLl0rKD86ZGVn fFx4YjB8JSk/XHMqLFxzKltcZFwuXSslP1xzKixccypbXGRcLl0rKD86JT9c cyosXHMqW1xkXC5dKyk/JT8pXHMqXCkpXHMqJC9pLAorICAgIGJlemllcnJn ID0gL14oPzpjdWJpYy0pP2JlemllclwoKFteLF0rKSwoW14sXSspLChbXixd KyksKFteXCldKylcKS8sCisgICAgcmVVUkxWYWx1ZSA9IC9edXJsXCgjPyhb XildKylcKSQvLAorICAgIHNlcGFyYXRvciA9IFNuYXAuXy5zZXBhcmF0b3Ig PSAvWyxcc10rLywKKyAgICB3aGl0ZXNwYWNlID0gL1tcc10vZywKKyAgICBj b21tYVNwYWNlcyA9IC9bXHNdKixbXHNdKi8sCisgICAgaHNyZyA9IHtoczog MSwgcmc6IDF9LAorICAgIHBhdGhDb21tYW5kID0gLyhbYS16XSlbXHMsXSoo KC0/XGQqXC4/XGQqKD86ZVtcLStdP1xkKyk/W1xzXSosP1tcc10qKSspL2ln LAorICAgIHRDb21tYW5kID0gLyhbcnN0bV0pW1xzLF0qKCgtP1xkKlwuP1xk Kig/OmVbXC0rXT9cZCspP1tcc10qLD9bXHNdKikrKS9pZywKKyAgICBwYXRo VmFsdWVzID0gLygtP1xkKlwuP1xkKig/OmVbXC0rXT9cXGQrKT8pW1xzXSos P1tcc10qL2lnLAorICAgIGlkZ2VuID0gMCwKKyAgICBpZHByZWZpeCA9ICJT IiArICgrbmV3IERhdGUpLnRvU3RyaW5nKDM2KSwKKyAgICBJRCA9IGZ1bmN0 aW9uIChlbCkgeworICAgICAgICByZXR1cm4gKGVsICYmIGVsLnR5cGUgPyBl bC50eXBlIDogRSkgKyBpZHByZWZpeCArIChpZGdlbisrKS50b1N0cmluZygz Nik7CisgICAgfSwKKyAgICB4bGluayA9ICJodHRwOi8vd3d3LnczLm9yZy8x OTk5L3hsaW5rIiwKKyAgICB4bWxucyA9ICJodHRwOi8vd3d3LnczLm9yZy8y MDAwL3N2ZyIsCisgICAgaHViID0ge30sCisgICAgVVJMID0gU25hcC51cmwg PSBmdW5jdGlvbiAodXJsKSB7CisgICAgICAgIHJldHVybiAidXJsKCcjIiAr IHVybCArICInKSI7CisgICAgfTsKKworZnVuY3Rpb24gJChlbCwgYXR0cikg eworICAgIGlmIChhdHRyKSB7CisgICAgICAgIGlmIChlbCA9PSAiI3RleHQi KSB7CisgICAgICAgICAgICBlbCA9IGdsb2IuZG9jLmNyZWF0ZVRleHROb2Rl KGF0dHIudGV4dCB8fCBhdHRyWyIjdGV4dCJdIHx8ICIiKTsKKyAgICAgICAg fQorICAgICAgICBpZiAoZWwgPT0gIiNjb21tZW50IikgeworICAgICAgICAg ICAgZWwgPSBnbG9iLmRvYy5jcmVhdGVDb21tZW50KGF0dHIudGV4dCB8fCBh dHRyWyIjdGV4dCJdIHx8ICIiKTsKKyAgICAgICAgfQorICAgICAgICBpZiAo dHlwZW9mIGVsID09ICJzdHJpbmciKSB7CisgICAgICAgICAgICBlbCA9ICQo ZWwpOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2YgYXR0ciA9PSAi c3RyaW5nIikgeworICAgICAgICAgICAgaWYgKGVsLm5vZGVUeXBlID09IDEp IHsKKyAgICAgICAgICAgICAgICBpZiAoYXR0ci5zdWJzdHJpbmcoMCwgNikg PT0gInhsaW5rOiIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVs LmdldEF0dHJpYnV0ZU5TKHhsaW5rLCBhdHRyLnN1YnN0cmluZyg2KSk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChhdHRyLnN1 YnN0cmluZygwLCA0KSA9PSAieG1sOiIpIHsKKyAgICAgICAgICAgICAgICAg ICAgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZU5TKHhtbG5zLCBhdHRyLnN1YnN0 cmluZyg0KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgICAgICB9 IGVsc2UgaWYgKGF0dHIgPT0gInRleHQiKSB7CisgICAgICAgICAgICAgICAg cmV0dXJuIGVsLm5vZGVWYWx1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKGVsLm5vZGVUeXBlID09IDEpIHsKKyAg ICAgICAgICAgIGZvciAodmFyIGtleSBpbiBhdHRyKSBpZiAoYXR0cltoYXNd KGtleSkpIHsKKyAgICAgICAgICAgICAgICB2YXIgdmFsID0gU3RyKGF0dHJb a2V5XSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbCkgeworICAgICAgICAg ICAgICAgICAgICBpZiAoa2V5LnN1YnN0cmluZygwLCA2KSA9PSAieGxpbms6 IikgeworICAgICAgICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRl TlMoeGxpbmssIGtleS5zdWJzdHJpbmcoNiksIHZhbCk7CisgICAgICAgICAg ICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LnN1YnN0cmluZygwLCA0KSA9PSAi eG1sOiIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsLnNldEF0dHJp YnV0ZU5TKHhtbG5zLCBrZXkuc3Vic3RyaW5nKDQpLCB2YWwpOworICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg ICAgZWwuc2V0QXR0cmlidXRlKGtleSwgdmFsKTsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShrZXkpOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgi dGV4dCIgaW4gYXR0cikgeworICAgICAgICAgICAgZWwubm9kZVZhbHVlID0g YXR0ci50ZXh0OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg ZWwgPSBnbG9iLmRvYy5jcmVhdGVFbGVtZW50TlMoeG1sbnMsIGVsKTsKKyAg ICB9CisgICAgcmV0dXJuIGVsOworfQorU25hcC5fLiQgPSAkOworU25hcC5f LmlkID0gSUQ7CitmdW5jdGlvbiBnZXRBdHRycyhlbCkgeworICAgIHZhciBh dHRycyA9IGVsLmF0dHJpYnV0ZXMsCisgICAgICAgIG5hbWUsCisgICAgICAg IG91dCA9IHt9OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXR0cnMubGVu Z3RoOyBpKyspIHsKKyAgICAgICAgaWYgKGF0dHJzW2ldLm5hbWVzcGFjZVVS SSA9PSB4bGluaykgeworICAgICAgICAgICAgbmFtZSA9ICJ4bGluazoiOwor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmFtZSA9ICIiOworICAg ICAgICB9CisgICAgICAgIG5hbWUgKz0gYXR0cnNbaV0ubmFtZTsKKyAgICAg ICAgb3V0W25hbWVdID0gYXR0cnNbaV0udGV4dENvbnRlbnQ7CisgICAgfQor ICAgIHJldHVybiBvdXQ7Cit9CitmdW5jdGlvbiBpcyhvLCB0eXBlKSB7Cisg ICAgdHlwZSA9IFN0ci5wcm90b3R5cGUudG9Mb3dlckNhc2UuY2FsbCh0eXBl KTsKKyAgICBpZiAodHlwZSA9PSAiZmluaXRlIikgeworICAgICAgICByZXR1 cm4gaXNGaW5pdGUobyk7CisgICAgfQorICAgIGlmICh0eXBlID09ICJhcnJh eSIgJiYKKyAgICAgICAgKG8gaW5zdGFuY2VvZiBBcnJheSB8fCBBcnJheS5p c0FycmF5ICYmIEFycmF5LmlzQXJyYXkobykpKSB7CisgICAgICAgIHJldHVy biB0cnVlOworICAgIH0KKyAgICByZXR1cm4gICh0eXBlID09ICJudWxsIiAm JiBvID09PSBudWxsKSB8fAorICAgICAgICAgICAgKHR5cGUgPT0gdHlwZW9m IG8gJiYgbyAhPT0gbnVsbCkgfHwKKyAgICAgICAgICAgICh0eXBlID09ICJv YmplY3QiICYmIG8gPT09IE9iamVjdChvKSkgfHwKKyAgICAgICAgICAgIG9i amVjdFRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNl KCkgPT0gdHlwZTsKK30KKy8qXAorICogU25hcC5mb3JtYXQKKyBbIG1ldGhv ZCBdCisgKioKKyAqIFJlcGxhY2VzIGNvbnN0cnVjdGlvbiBvZiB0eXBlIGB7 PG5hbWU+fWAgdG8gdGhlIGNvcnJlc3BvbmRpbmcgYXJndW1lbnQKKyAqKgor IC0gdG9rZW4gKHN0cmluZykgc3RyaW5nIHRvIGZvcm1hdAorIC0ganNvbiAo b2JqZWN0KSBvYmplY3Qgd2hpY2ggcHJvcGVydGllcyBhcmUgdXNlZCBhcyBh IHJlcGxhY2VtZW50CisgPSAoc3RyaW5nKSBmb3JtYXR0ZWQgc3RyaW5nCisg PiBVc2FnZQorIHwgLy8gdGhpcyBkcmF3cyBhIHJlY3Rhbmd1bGFyIHNoYXBl IGVxdWl2YWxlbnQgdG8gIk0xMCwyMGg0MHY1MGgtNDB6IgorIHwgcGFwZXIu cGF0aChTbmFwLmZvcm1hdCgiTXt4fSx7eX1oe2RpbS53aWR0aH12e2RpbS5o ZWlnaHR9aHtkaW1bJ25lZ2F0aXZlIHdpZHRoJ119eiIsIHsKKyB8ICAgICB4 OiAxMCwKKyB8ICAgICB5OiAyMCwKKyB8ICAgICBkaW06IHsKKyB8ICAgICAg ICAgd2lkdGg6IDQwLAorIHwgICAgICAgICBoZWlnaHQ6IDUwLAorIHwgICAg ICAgICAibmVnYXRpdmUgd2lkdGgiOiAtNDAKKyB8ICAgICB9CisgfCB9KSk7 CitcKi8KK1NuYXAuZm9ybWF0ID0gKGZ1bmN0aW9uICgpIHsKKyAgICB2YXIg dG9rZW5SZWdleCA9IC9ceyhbXlx9XSspXH0vZywKKyAgICAgICAgb2JqTm90 YXRpb25SZWdleCA9IC8oPzooPzpefFwuKSguKz8pKD89XFt8XC58JHxcKCl8 XFsoJ3wiKSguKz8pXDJcXSkoXChcKSk/L2csIC8vIG1hdGNoZXMgLnh4eHh4 IG9yIFsieHh4eHgiXSB0byBydW4gb3ZlciBvYmplY3QgcHJvcGVydGllcwor ICAgICAgICByZXBsYWNlciA9IGZ1bmN0aW9uIChhbGwsIGtleSwgb2JqKSB7 CisgICAgICAgICAgICB2YXIgcmVzID0gb2JqOworICAgICAgICAgICAga2V5 LnJlcGxhY2Uob2JqTm90YXRpb25SZWdleCwgZnVuY3Rpb24gKGFsbCwgbmFt ZSwgcXVvdGUsIHF1b3RlZE5hbWUsIGlzRnVuYykgeworICAgICAgICAgICAg ICAgIG5hbWUgPSBuYW1lIHx8IHF1b3RlZE5hbWU7CisgICAgICAgICAgICAg ICAgaWYgKHJlcykgeworICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSBp biByZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlc1tu YW1lXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICB0eXBlb2YgcmVzID09ICJmdW5jdGlvbiIgJiYgaXNGdW5jICYmIChy ZXMgPSByZXMoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fSk7CisgICAgICAgICAgICByZXMgPSAocmVzID09IG51bGwgfHwgcmVzID09 IG9iaiA/IGFsbCA6IHJlcykgKyAiIjsKKyAgICAgICAgICAgIHJldHVybiBy ZXM7CisgICAgICAgIH07CisgICAgcmV0dXJuIGZ1bmN0aW9uIChzdHIsIG9i aikgeworICAgICAgICByZXR1cm4gU3RyKHN0cikucmVwbGFjZSh0b2tlblJl Z2V4LCBmdW5jdGlvbiAoYWxsLCBrZXkpIHsKKyAgICAgICAgICAgIHJldHVy biByZXBsYWNlcihhbGwsIGtleSwgb2JqKTsKKyAgICAgICAgfSk7CisgICAg fTsKK30pKCk7CitmdW5jdGlvbiBjbG9uZShvYmopIHsKKyAgICBpZiAodHlw ZW9mIG9iaiA9PSAiZnVuY3Rpb24iIHx8IE9iamVjdChvYmopICE9PSBvYmop IHsKKyAgICAgICAgcmV0dXJuIG9iajsKKyAgICB9CisgICAgdmFyIHJlcyA9 IG5ldyBvYmouY29uc3RydWN0b3I7CisgICAgZm9yICh2YXIga2V5IGluIG9i aikgaWYgKG9ialtoYXNdKGtleSkpIHsKKyAgICAgICAgcmVzW2tleV0gPSBj bG9uZShvYmpba2V5XSk7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CitT bmFwLl8uY2xvbmUgPSBjbG9uZTsKK2Z1bmN0aW9uIHJlcHVzaChhcnJheSwg aXRlbSkgeworICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGFycmF5Lmxlbmd0 aDsgaSA8IGlpOyBpKyspIGlmIChhcnJheVtpXSA9PT0gaXRlbSkgeworICAg ICAgICByZXR1cm4gYXJyYXkucHVzaChhcnJheS5zcGxpY2UoaSwgMSlbMF0p OworICAgIH0KK30KK2Z1bmN0aW9uIGNhY2hlcihmLCBzY29wZSwgcG9zdHBy b2Nlc3NvcikgeworICAgIGZ1bmN0aW9uIG5ld2YoKSB7CisgICAgICAgIHZh ciBhcmcgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMs IDApLAorICAgICAgICAgICAgYXJncyA9IGFyZy5qb2luKCJcdTI0MDAiKSwK KyAgICAgICAgICAgIGNhY2hlID0gbmV3Zi5jYWNoZSA9IG5ld2YuY2FjaGUg fHwge30sCisgICAgICAgICAgICBjb3VudCA9IG5ld2YuY291bnQgPSBuZXdm LmNvdW50IHx8IFtdOworICAgICAgICBpZiAoY2FjaGVbaGFzXShhcmdzKSkg eworICAgICAgICAgICAgcmVwdXNoKGNvdW50LCBhcmdzKTsKKyAgICAgICAg ICAgIHJldHVybiBwb3N0cHJvY2Vzc29yID8gcG9zdHByb2Nlc3NvcihjYWNo ZVthcmdzXSkgOiBjYWNoZVthcmdzXTsKKyAgICAgICAgfQorICAgICAgICBj b3VudC5sZW5ndGggPj0gMWUzICYmIGRlbGV0ZSBjYWNoZVtjb3VudC5zaGlm dCgpXTsKKyAgICAgICAgY291bnQucHVzaChhcmdzKTsKKyAgICAgICAgY2Fj aGVbYXJnc10gPSBmLmFwcGx5KHNjb3BlLCBhcmcpOworICAgICAgICByZXR1 cm4gcG9zdHByb2Nlc3NvciA/IHBvc3Rwcm9jZXNzb3IoY2FjaGVbYXJnc10p IDogY2FjaGVbYXJnc107CisgICAgfQorICAgIHJldHVybiBuZXdmOworfQor U25hcC5fLmNhY2hlciA9IGNhY2hlcjsKK2Z1bmN0aW9uIGFuZ2xlKHgxLCB5 MSwgeDIsIHkyLCB4MywgeTMpIHsKKyAgICBpZiAoeDMgPT0gbnVsbCkgewor ICAgICAgICB2YXIgeCA9IHgxIC0geDIsCisgICAgICAgICAgICB5ID0geTEg LSB5MjsKKyAgICAgICAgaWYgKCF4ICYmICF5KSB7CisgICAgICAgICAgICBy ZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKDE4MCArIG1h dGguYXRhbjIoLXksIC14KSAqIDE4MCAvIFBJICsgMzYwKSAlIDM2MDsKKyAg ICB9IGVsc2UgeworICAgICAgICByZXR1cm4gYW5nbGUoeDEsIHkxLCB4Mywg eTMpIC0gYW5nbGUoeDIsIHkyLCB4MywgeTMpOworICAgIH0KK30KK2Z1bmN0 aW9uIHJhZChkZWcpIHsKKyAgICByZXR1cm4gZGVnICUgMzYwICogUEkgLyAx ODA7Cit9CitmdW5jdGlvbiBkZWcocmFkKSB7CisgICAgcmV0dXJuIHJhZCAq IDE4MCAvIFBJICUgMzYwOworfQorZnVuY3Rpb24geF95KCkgeworICAgIHJl dHVybiB0aGlzLnggKyBTICsgdGhpcy55OworfQorZnVuY3Rpb24geF95X3df aCgpIHsKKyAgICByZXR1cm4gdGhpcy54ICsgUyArIHRoaXMueSArIFMgKyB0 aGlzLndpZHRoICsgIiBceGQ3ICIgKyB0aGlzLmhlaWdodDsKK30KKworLypc CisgKiBTbmFwLnJhZAorIFsgbWV0aG9kIF0KKyAqKgorICogVHJhbnNmb3Jt IGFuZ2xlIHRvIHJhZGlhbnMKKyAtIGRlZyAobnVtYmVyKSBhbmdsZSBpbiBk ZWdyZWVzCisgPSAobnVtYmVyKSBhbmdsZSBpbiByYWRpYW5zCitcKi8KK1Nu YXAucmFkID0gcmFkOworLypcCisgKiBTbmFwLmRlZworIFsgbWV0aG9kIF0K KyAqKgorICogVHJhbnNmb3JtIGFuZ2xlIHRvIGRlZ3JlZXMKKyAtIHJhZCAo bnVtYmVyKSBhbmdsZSBpbiByYWRpYW5zCisgPSAobnVtYmVyKSBhbmdsZSBp biBkZWdyZWVzCitcKi8KK1NuYXAuZGVnID0gZGVnOworLypcCisgKiBTbmFw LnNpbgorIFsgbWV0aG9kIF0KKyAqKgorICogRXF1aXZhbGVudCB0byBgTWF0 aC5zaW4oKWAgb25seSB3b3JrcyB3aXRoIGRlZ3JlZXMsIG5vdCByYWRpYW5z LgorIC0gYW5nbGUgKG51bWJlcikgYW5nbGUgaW4gZGVncmVlcworID0gKG51 bWJlcikgc2luCitcKi8KK1NuYXAuc2luID0gZnVuY3Rpb24gKGFuZ2xlKSB7 CisgICAgcmV0dXJuIG1hdGguc2luKFNuYXAucmFkKGFuZ2xlKSk7Cit9Owor LypcCisgKiBTbmFwLnRhbgorIFsgbWV0aG9kIF0KKyAqKgorICogRXF1aXZh bGVudCB0byBgTWF0aC50YW4oKWAgb25seSB3b3JrcyB3aXRoIGRlZ3JlZXMs IG5vdCByYWRpYW5zLgorIC0gYW5nbGUgKG51bWJlcikgYW5nbGUgaW4gZGVn cmVlcworID0gKG51bWJlcikgdGFuCitcKi8KK1NuYXAudGFuID0gZnVuY3Rp b24gKGFuZ2xlKSB7CisgICAgcmV0dXJuIG1hdGgudGFuKFNuYXAucmFkKGFu Z2xlKSk7Cit9OworLypcCisgKiBTbmFwLmNvcworIFsgbWV0aG9kIF0KKyAq KgorICogRXF1aXZhbGVudCB0byBgTWF0aC5jb3MoKWAgb25seSB3b3JrcyB3 aXRoIGRlZ3JlZXMsIG5vdCByYWRpYW5zLgorIC0gYW5nbGUgKG51bWJlcikg YW5nbGUgaW4gZGVncmVlcworID0gKG51bWJlcikgY29zCitcKi8KK1NuYXAu Y29zID0gZnVuY3Rpb24gKGFuZ2xlKSB7CisgICAgcmV0dXJuIG1hdGguY29z KFNuYXAucmFkKGFuZ2xlKSk7Cit9OworLypcCisgKiBTbmFwLmFzaW4KKyBb IG1ldGhvZCBdCisgKioKKyAqIEVxdWl2YWxlbnQgdG8gYE1hdGguYXNpbigp YCBvbmx5IHdvcmtzIHdpdGggZGVncmVlcywgbm90IHJhZGlhbnMuCisgLSBu dW0gKG51bWJlcikgdmFsdWUKKyA9IChudW1iZXIpIGFzaW4gaW4gZGVncmVl cworXCovCitTbmFwLmFzaW4gPSBmdW5jdGlvbiAobnVtKSB7CisgICAgcmV0 dXJuIFNuYXAuZGVnKG1hdGguYXNpbihudW0pKTsKK307CisvKlwKKyAqIFNu YXAuYWNvcworIFsgbWV0aG9kIF0KKyAqKgorICogRXF1aXZhbGVudCB0byBg TWF0aC5hY29zKClgIG9ubHkgd29ya3Mgd2l0aCBkZWdyZWVzLCBub3QgcmFk aWFucy4KKyAtIG51bSAobnVtYmVyKSB2YWx1ZQorID0gKG51bWJlcikgYWNv cyBpbiBkZWdyZWVzCitcKi8KK1NuYXAuYWNvcyA9IGZ1bmN0aW9uIChudW0p IHsKKyAgICByZXR1cm4gU25hcC5kZWcobWF0aC5hY29zKG51bSkpOworfTsK Ky8qXAorICogU25hcC5hdGFuCisgWyBtZXRob2QgXQorICoqCisgKiBFcXVp dmFsZW50IHRvIGBNYXRoLmF0YW4oKWAgb25seSB3b3JrcyB3aXRoIGRlZ3Jl ZXMsIG5vdCByYWRpYW5zLgorIC0gbnVtIChudW1iZXIpIHZhbHVlCisgPSAo bnVtYmVyKSBhdGFuIGluIGRlZ3JlZXMKK1wqLworU25hcC5hdGFuID0gZnVu Y3Rpb24gKG51bSkgeworICAgIHJldHVybiBTbmFwLmRlZyhtYXRoLmF0YW4o bnVtKSk7Cit9OworLypcCisgKiBTbmFwLmF0YW4yCisgWyBtZXRob2QgXQor ICoqCisgKiBFcXVpdmFsZW50IHRvIGBNYXRoLmF0YW4yKClgIG9ubHkgd29y a3Mgd2l0aCBkZWdyZWVzLCBub3QgcmFkaWFucy4KKyAtIG51bSAobnVtYmVy KSB2YWx1ZQorID0gKG51bWJlcikgYXRhbjIgaW4gZGVncmVlcworXCovCitT bmFwLmF0YW4yID0gZnVuY3Rpb24gKG51bSkgeworICAgIHJldHVybiBTbmFw LmRlZyhtYXRoLmF0YW4yKG51bSkpOworfTsKKy8qXAorICogU25hcC5hbmds ZQorIFsgbWV0aG9kIF0KKyAqKgorICogUmV0dXJucyBhbiBhbmdsZSBiZXR3 ZWVuIHR3byBvciB0aHJlZSBwb2ludHMKKyA+IFBhcmFtZXRlcnMKKyAtIHgx IChudW1iZXIpIHggY29vcmQgb2YgZmlyc3QgcG9pbnQKKyAtIHkxIChudW1i ZXIpIHkgY29vcmQgb2YgZmlyc3QgcG9pbnQKKyAtIHgyIChudW1iZXIpIHgg Y29vcmQgb2Ygc2Vjb25kIHBvaW50CisgLSB5MiAobnVtYmVyKSB5IGNvb3Jk IG9mIHNlY29uZCBwb2ludAorIC0geDMgKG51bWJlcikgI29wdGlvbmFsIHgg Y29vcmQgb2YgdGhpcmQgcG9pbnQKKyAtIHkzIChudW1iZXIpICNvcHRpb25h bCB5IGNvb3JkIG9mIHRoaXJkIHBvaW50CisgPSAobnVtYmVyKSBhbmdsZSBp biBkZWdyZWVzCitcKi8KK1NuYXAuYW5nbGUgPSBhbmdsZTsKKy8qXAorICog U25hcC5sZW4KKyBbIG1ldGhvZCBdCisgKioKKyAqIFJldHVybnMgZGlzdGFu Y2UgYmV0d2VlbiB0d28gcG9pbnRzCisgPiBQYXJhbWV0ZXJzCisgLSB4MSAo bnVtYmVyKSB4IGNvb3JkIG9mIGZpcnN0IHBvaW50CisgLSB5MSAobnVtYmVy KSB5IGNvb3JkIG9mIGZpcnN0IHBvaW50CisgLSB4MiAobnVtYmVyKSB4IGNv b3JkIG9mIHNlY29uZCBwb2ludAorIC0geTIgKG51bWJlcikgeSBjb29yZCBv ZiBzZWNvbmQgcG9pbnQKKyA9IChudW1iZXIpIGRpc3RhbmNlCitcKi8KK1Nu YXAubGVuID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyKSB7CisgICAgcmV0 dXJuIE1hdGguc3FydChTbmFwLmxlbjIoeDEsIHkxLCB4MiwgeTIpKTsKK307 CisvKlwKKyAqIFNuYXAubGVuMgorIFsgbWV0aG9kIF0KKyAqKgorICogUmV0 dXJucyBzcXVhcmVkIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50cworID4g UGFyYW1ldGVycworIC0geDEgKG51bWJlcikgeCBjb29yZCBvZiBmaXJzdCBw b2ludAorIC0geTEgKG51bWJlcikgeSBjb29yZCBvZiBmaXJzdCBwb2ludAor IC0geDIgKG51bWJlcikgeCBjb29yZCBvZiBzZWNvbmQgcG9pbnQKKyAtIHky IChudW1iZXIpIHkgY29vcmQgb2Ygc2Vjb25kIHBvaW50CisgPSAobnVtYmVy KSBkaXN0YW5jZQorXCovCitTbmFwLmxlbjIgPSBmdW5jdGlvbiAoeDEsIHkx LCB4MiwgeTIpIHsKKyAgICByZXR1cm4gKHgxIC0geDIpICogKHgxIC0geDIp ICsgKHkxIC0geTIpICogKHkxIC0geTIpOworfTsKKy8qXAorICogU25hcC5j bG9zZXN0UG9pbnQKKyBbIG1ldGhvZCBdCisgKioKKyAqIFJldHVybnMgY2xv c2VzdCBwb2ludCB0byBhIGdpdmVuIG9uZSBvbiBhIGdpdmVuIHBhdGguCisg PiBQYXJhbWV0ZXJzCisgLSBwYXRoIChFbGVtZW50KSBwYXRoIGVsZW1lbnQK KyAtIHggKG51bWJlcikgeCBjb29yZCBvZiBhIHBvaW50CisgLSB5IChudW1i ZXIpIHkgY29vcmQgb2YgYSBwb2ludAorID0gKG9iamVjdCkgaW4gZm9ybWF0 CisgeworICAgIHggKG51bWJlcikgeCBjb29yZCBvZiB0aGUgcG9pbnQgb24g dGhlIHBhdGgKKyAgICB5IChudW1iZXIpIHkgY29vcmQgb2YgdGhlIHBvaW50 IG9uIHRoZSBwYXRoCisgICAgbGVuZ3RoIChudW1iZXIpIGxlbmd0aCBvZiB0 aGUgcGF0aCB0byB0aGUgcG9pbnQKKyAgICBkaXN0YW5jZSAobnVtYmVyKSBk aXN0YW5jZSBmcm9tIHRoZSBnaXZlbiBwb2ludCB0byB0aGUgcGF0aAorIH0K K1wqLworLy8gQ29waWVkIGZyb20gaHR0cDovL2JsLm9ja3Mub3JnL21ib3N0 b2NrLzgwMjc2MzcKK1NuYXAuY2xvc2VzdFBvaW50ID0gZnVuY3Rpb24gKHBh dGgsIHgsIHkpIHsKKyAgICBmdW5jdGlvbiBkaXN0YW5jZTIocCkgeworICAg ICAgICB2YXIgZHggPSBwLnggLSB4LAorICAgICAgICAgICAgZHkgPSBwLnkg LSB5OworICAgICAgICByZXR1cm4gZHggKiBkeCArIGR5ICogZHk7CisgICAg fQorICAgIHZhciBwYXRoTm9kZSA9IHBhdGgubm9kZSwKKyAgICAgICAgcGF0 aExlbmd0aCA9IHBhdGhOb2RlLmdldFRvdGFsTGVuZ3RoKCksCisgICAgICAg IHByZWNpc2lvbiA9IHBhdGhMZW5ndGggLyBwYXRoTm9kZS5wYXRoU2VnTGlz dC5udW1iZXJPZkl0ZW1zICogLjEyNSwKKyAgICAgICAgYmVzdCwKKyAgICAg ICAgYmVzdExlbmd0aCwKKyAgICAgICAgYmVzdERpc3RhbmNlID0gSW5maW5p dHk7CisKKyAgICAvLyBsaW5lYXIgc2NhbiBmb3IgY29hcnNlIGFwcHJveGlt YXRpb24KKyAgICBmb3IgKHZhciBzY2FuLCBzY2FuTGVuZ3RoID0gMCwgc2Nh bkRpc3RhbmNlOyBzY2FuTGVuZ3RoIDw9IHBhdGhMZW5ndGg7IHNjYW5MZW5n dGggKz0gcHJlY2lzaW9uKSB7CisgICAgICAgIGlmICgoc2NhbkRpc3RhbmNl ID0gZGlzdGFuY2UyKHNjYW4gPSBwYXRoTm9kZS5nZXRQb2ludEF0TGVuZ3Ro KHNjYW5MZW5ndGgpKSkgPCBiZXN0RGlzdGFuY2UpIHsKKyAgICAgICAgICAg IGJlc3QgPSBzY2FuLCBiZXN0TGVuZ3RoID0gc2Nhbkxlbmd0aCwgYmVzdERp c3RhbmNlID0gc2NhbkRpc3RhbmNlOworICAgICAgICB9CisgICAgfQorCisg ICAgLy8gYmluYXJ5IHNlYXJjaCBmb3IgcHJlY2lzZSBlc3RpbWF0ZQorICAg IHByZWNpc2lvbiAqPSAuNTsKKyAgICB3aGlsZSAocHJlY2lzaW9uID4gLjUp IHsKKyAgICAgICAgdmFyIGJlZm9yZSwKKyAgICAgICAgICAgIGFmdGVyLAor ICAgICAgICAgICAgYmVmb3JlTGVuZ3RoLAorICAgICAgICAgICAgYWZ0ZXJM ZW5ndGgsCisgICAgICAgICAgICBiZWZvcmVEaXN0YW5jZSwKKyAgICAgICAg ICAgIGFmdGVyRGlzdGFuY2U7CisgICAgICAgIGlmICgoYmVmb3JlTGVuZ3Ro ID0gYmVzdExlbmd0aCAtIHByZWNpc2lvbikgPj0gMCAmJiAoYmVmb3JlRGlz dGFuY2UgPSBkaXN0YW5jZTIoYmVmb3JlID0gcGF0aE5vZGUuZ2V0UG9pbnRB dExlbmd0aChiZWZvcmVMZW5ndGgpKSkgPCBiZXN0RGlzdGFuY2UpIHsKKyAg ICAgICAgICAgIGJlc3QgPSBiZWZvcmUsIGJlc3RMZW5ndGggPSBiZWZvcmVM ZW5ndGgsIGJlc3REaXN0YW5jZSA9IGJlZm9yZURpc3RhbmNlOworICAgICAg ICB9IGVsc2UgaWYgKChhZnRlckxlbmd0aCA9IGJlc3RMZW5ndGggKyBwcmVj aXNpb24pIDw9IHBhdGhMZW5ndGggJiYgKGFmdGVyRGlzdGFuY2UgPSBkaXN0 YW5jZTIoYWZ0ZXIgPSBwYXRoTm9kZS5nZXRQb2ludEF0TGVuZ3RoKGFmdGVy TGVuZ3RoKSkpIDwgYmVzdERpc3RhbmNlKSB7CisgICAgICAgICAgICBiZXN0 ID0gYWZ0ZXIsIGJlc3RMZW5ndGggPSBhZnRlckxlbmd0aCwgYmVzdERpc3Rh bmNlID0gYWZ0ZXJEaXN0YW5jZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIHByZWNpc2lvbiAqPSAuNTsKKyAgICAgICAgfQorICAgIH0KKwor ICAgIGJlc3QgPSB7CisgICAgICAgIHg6IGJlc3QueCwKKyAgICAgICAgeTog YmVzdC55LAorICAgICAgICBsZW5ndGg6IGJlc3RMZW5ndGgsCisgICAgICAg IGRpc3RhbmNlOiBNYXRoLnNxcnQoYmVzdERpc3RhbmNlKQorICAgIH07Cisg ICAgcmV0dXJuIGJlc3Q7Cit9CisvKlwKKyAqIFNuYXAuaXMKKyBbIG1ldGhv ZCBdCisgKioKKyAqIEhhbmR5IHJlcGxhY2VtZW50IGZvciB0aGUgYHR5cGVv ZmAgb3BlcmF0b3IKKyAtIG8gKOKApikgYW55IG9iamVjdCBvciBwcmltaXRp dmUKKyAtIHR5cGUgKHN0cmluZykgbmFtZSBvZiB0aGUgdHlwZSwgZS5nLiwg YHN0cmluZ2AsIGBmdW5jdGlvbmAsIGBudW1iZXJgLCBldGMuCisgPSAoYm9v bGVhbikgYHRydWVgIGlmIGdpdmVuIHZhbHVlIGlzIG9mIGdpdmVuIHR5cGUK K1wqLworU25hcC5pcyA9IGlzOworLypcCisgKiBTbmFwLnNuYXBUbworIFsg bWV0aG9kIF0KKyAqKgorICogU25hcHMgZ2l2ZW4gdmFsdWUgdG8gZ2l2ZW4g Z3JpZAorIC0gdmFsdWVzIChhcnJheXxudW1iZXIpIGdpdmVuIGFycmF5IG9m IHZhbHVlcyBvciBzdGVwIG9mIHRoZSBncmlkCisgLSB2YWx1ZSAobnVtYmVy KSB2YWx1ZSB0byBhZGp1c3QKKyAtIHRvbGVyYW5jZSAobnVtYmVyKSAjb3B0 aW9uYWwgbWF4aW11bSBkaXN0YW5jZSB0byB0aGUgdGFyZ2V0IHZhbHVlIHRo YXQgd291bGQgdHJpZ2dlciB0aGUgc25hcC4gRGVmYXVsdCBpcyBgMTBgLgor ID0gKG51bWJlcikgYWRqdXN0ZWQgdmFsdWUKK1wqLworU25hcC5zbmFwVG8g PSBmdW5jdGlvbiAodmFsdWVzLCB2YWx1ZSwgdG9sZXJhbmNlKSB7CisgICAg dG9sZXJhbmNlID0gaXModG9sZXJhbmNlLCAiZmluaXRlIikgPyB0b2xlcmFu Y2UgOiAxMDsKKyAgICBpZiAoaXModmFsdWVzLCAiYXJyYXkiKSkgeworICAg ICAgICB2YXIgaSA9IHZhbHVlcy5sZW5ndGg7CisgICAgICAgIHdoaWxlIChp LS0pIGlmIChhYnModmFsdWVzW2ldIC0gdmFsdWUpIDw9IHRvbGVyYW5jZSkg eworICAgICAgICAgICAgcmV0dXJuIHZhbHVlc1tpXTsKKyAgICAgICAgfQor ICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlcyA9ICt2YWx1ZXM7CisgICAg ICAgIHZhciByZW0gPSB2YWx1ZSAlIHZhbHVlczsKKyAgICAgICAgaWYgKHJl bSA8IHRvbGVyYW5jZSkgeworICAgICAgICAgICAgcmV0dXJuIHZhbHVlIC0g cmVtOworICAgICAgICB9CisgICAgICAgIGlmIChyZW0gPiB2YWx1ZXMgLSB0 b2xlcmFuY2UpIHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSAtIHJlbSAr IHZhbHVlczsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gdmFsdWU7 Cit9OworLy8gQ29sb3VyCisvKlwKKyAqIFNuYXAuZ2V0UkdCCisgWyBtZXRo b2QgXQorICoqCisgKiBQYXJzZXMgY29sb3Igc3RyaW5nIGFzIFJHQiBvYmpl Y3QKKyAtIGNvbG9yIChzdHJpbmcpIGNvbG9yIHN0cmluZyBpbiBvbmUgb2Yg dGhlIGZvbGxvd2luZyBmb3JtYXRzOgorICMgPHVsPgorICMgICAgIDxsaT5D b2xvciBuYW1lICg8Y29kZT5yZWQ8L2NvZGU+LCA8Y29kZT5ncmVlbjwvY29k ZT4sIDxjb2RlPmNvcm5mbG93ZXJibHVlPC9jb2RlPiwgZXRjKTwvbGk+Cisg IyAgICAgPGxpPiPigKLigKLigKIg4oCUIHNob3J0ZW5lZCBIVE1MIGNvbG9y OiAoPGNvZGU+IzAwMDwvY29kZT4sIDxjb2RlPiNmYzA8L2NvZGU+LCBldGMu KTwvbGk+CisgIyAgICAgPGxpPiPigKLigKLigKLigKLigKLigKIg4oCUIGZ1 bGwgbGVuZ3RoIEhUTUwgY29sb3I6ICg8Y29kZT4jMDAwMDAwPC9jb2RlPiwg PGNvZGU+I2JkMjMwMDwvY29kZT4pPC9saT4KKyAjICAgICA8bGk+cmdiKOKA ouKAouKAoiwg4oCi4oCi4oCiLCDigKLigKLigKIpIOKAlCByZWQsIGdyZWVu IGFuZCBibHVlIGNoYW5uZWxzIHZhbHVlczogKDxjb2RlPnJnYigyMDAsJm5i c3A7MTAwLCZuYnNwOzApPC9jb2RlPik8L2xpPgorICMgICAgIDxsaT5yZ2Jh KOKAouKAouKAoiwg4oCi4oCi4oCiLCDigKLigKLigKIsIOKAouKAouKAoikg 4oCUIGFsc28gd2l0aCBvcGFjaXR5PC9saT4KKyAjICAgICA8bGk+cmdiKOKA ouKAouKAoiUsIOKAouKAouKAoiUsIOKAouKAouKAoiUpIOKAlCBzYW1lIGFz IGFib3ZlLCBidXQgaW4gJTogKDxjb2RlPnJnYigxMDAlLCZuYnNwOzE3NSUs Jm5ic3A7MCUpPC9jb2RlPik8L2xpPgorICMgICAgIDxsaT5yZ2JhKOKAouKA ouKAoiUsIOKAouKAouKAoiUsIOKAouKAouKAoiUsIOKAouKAouKAoiUpIOKA lCBhbHNvIHdpdGggb3BhY2l0eTwvbGk+CisgIyAgICAgPGxpPmhzYijigKLi gKLigKIsIOKAouKAouKAoiwg4oCi4oCi4oCiKSDigJQgaHVlLCBzYXR1cmF0 aW9uIGFuZCBicmlnaHRuZXNzIHZhbHVlczogKDxjb2RlPmhzYigwLjUsJm5i c3A7MC4yNSwmbmJzcDsxKTwvY29kZT4pPC9saT4KKyAjICAgICA8bGk+aHNi YSjigKLigKLigKIsIOKAouKAouKAoiwg4oCi4oCi4oCiLCDigKLigKLigKIp IOKAlCBhbHNvIHdpdGggb3BhY2l0eTwvbGk+CisgIyAgICAgPGxpPmhzYiji gKLigKLigKIlLCDigKLigKLigKIlLCDigKLigKLigKIlKSDigJQgc2FtZSBh cyBhYm92ZSwgYnV0IGluICU8L2xpPgorICMgICAgIDxsaT5oc2JhKOKAouKA ouKAoiUsIOKAouKAouKAoiUsIOKAouKAouKAoiUsIOKAouKAouKAoiUpIOKA lCBhbHNvIHdpdGggb3BhY2l0eTwvbGk+CisgIyAgICAgPGxpPmhzbCjigKLi gKLigKIsIOKAouKAouKAoiwg4oCi4oCi4oCiKSDigJQgaHVlLCBzYXR1cmF0 aW9uIGFuZCBsdW1pbm9zaXR5IHZhbHVlczogKDxjb2RlPmhzYigwLjUsJm5i c3A7MC4yNSwmbmJzcDswLjUpPC9jb2RlPik8L2xpPgorICMgICAgIDxsaT5o c2xhKOKAouKAouKAoiwg4oCi4oCi4oCiLCDigKLigKLigKIsIOKAouKAouKA oikg4oCUIGFsc28gd2l0aCBvcGFjaXR5PC9saT4KKyAjICAgICA8bGk+aHNs KOKAouKAouKAoiUsIOKAouKAouKAoiUsIOKAouKAouKAoiUpIOKAlCBzYW1l IGFzIGFib3ZlLCBidXQgaW4gJTwvbGk+CisgIyAgICAgPGxpPmhzbGEo4oCi 4oCi4oCiJSwg4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSwg4oCi4oCi4oCiJSkg 4oCUIGFsc28gd2l0aCBvcGFjaXR5PC9saT4KKyAjIDwvdWw+CisgKiBOb3Rl IHRoYXQgYCVgIGNhbiBiZSB1c2VkIGFueSB0aW1lOiBgcmdiKDIwJSwgMjU1 LCA1MCUpYC4KKyA9IChvYmplY3QpIFJHQiBvYmplY3QgaW4gdGhlIGZvbGxv d2luZyBmb3JtYXQ6CisgbyB7CisgbyAgICAgciAobnVtYmVyKSByZWQsCisg byAgICAgZyAobnVtYmVyKSBncmVlbiwKKyBvICAgICBiIChudW1iZXIpIGJs dWUsCisgbyAgICAgaGV4IChzdHJpbmcpIGNvbG9yIGluIEhUTUwvQ1NTIGZv cm1hdDogI+KAouKAouKAouKAouKAouKAoiwKKyBvICAgICBlcnJvciAoYm9v bGVhbikgdHJ1ZSBpZiBzdHJpbmcgY2FuJ3QgYmUgcGFyc2VkCisgbyB9Citc Ki8KK1NuYXAuZ2V0UkdCID0gY2FjaGVyKGZ1bmN0aW9uIChjb2xvdXIpIHsK KyAgICBpZiAoIWNvbG91ciB8fCAhISgoY29sb3VyID0gU3RyKGNvbG91cikp LmluZGV4T2YoIi0iKSArIDEpKSB7CisgICAgICAgIHJldHVybiB7cjogLTEs IGc6IC0xLCBiOiAtMSwgaGV4OiAibm9uZSIsIGVycm9yOiAxLCB0b1N0cmlu ZzogcmdidG9TdHJpbmd9OworICAgIH0KKyAgICBpZiAoY29sb3VyID09ICJu b25lIikgeworICAgICAgICByZXR1cm4ge3I6IC0xLCBnOiAtMSwgYjogLTEs IGhleDogIm5vbmUiLCB0b1N0cmluZzogcmdidG9TdHJpbmd9OworICAgIH0K KyAgICAhKGhzcmdbaGFzXShjb2xvdXIudG9Mb3dlckNhc2UoKS5zdWJzdHJp bmcoMCwgMikpIHx8IGNvbG91ci5jaGFyQXQoKSA9PSAiIyIpICYmIChjb2xv dXIgPSB0b0hleChjb2xvdXIpKTsKKyAgICBpZiAoIWNvbG91cikgeworICAg ICAgICByZXR1cm4ge3I6IC0xLCBnOiAtMSwgYjogLTEsIGhleDogIm5vbmUi LCBlcnJvcjogMSwgdG9TdHJpbmc6IHJnYnRvU3RyaW5nfTsKKyAgICB9Cisg ICAgdmFyIHJlcywKKyAgICAgICAgcmVkLAorICAgICAgICBncmVlbiwKKyAg ICAgICAgYmx1ZSwKKyAgICAgICAgb3BhY2l0eSwKKyAgICAgICAgdCwKKyAg ICAgICAgdmFsdWVzLAorICAgICAgICByZ2IgPSBjb2xvdXIubWF0Y2goY29s b3VyUmVnRXhwKTsKKyAgICBpZiAocmdiKSB7CisgICAgICAgIGlmIChyZ2Jb Ml0pIHsKKyAgICAgICAgICAgIGJsdWUgPSB0b0ludChyZ2JbMl0uc3Vic3Ry aW5nKDUpLCAxNik7CisgICAgICAgICAgICBncmVlbiA9IHRvSW50KHJnYlsy XS5zdWJzdHJpbmcoMywgNSksIDE2KTsKKyAgICAgICAgICAgIHJlZCA9IHRv SW50KHJnYlsyXS5zdWJzdHJpbmcoMSwgMyksIDE2KTsKKyAgICAgICAgfQor ICAgICAgICBpZiAocmdiWzNdKSB7CisgICAgICAgICAgICBibHVlID0gdG9J bnQoKHQgPSByZ2JbM10uY2hhckF0KDMpKSArIHQsIDE2KTsKKyAgICAgICAg ICAgIGdyZWVuID0gdG9JbnQoKHQgPSByZ2JbM10uY2hhckF0KDIpKSArIHQs IDE2KTsKKyAgICAgICAgICAgIHJlZCA9IHRvSW50KCh0ID0gcmdiWzNdLmNo YXJBdCgxKSkgKyB0LCAxNik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJn Yls0XSkgeworICAgICAgICAgICAgdmFsdWVzID0gcmdiWzRdLnNwbGl0KGNv bW1hU3BhY2VzKTsKKyAgICAgICAgICAgIHJlZCA9IHRvRmxvYXQodmFsdWVz WzBdKTsKKyAgICAgICAgICAgIHZhbHVlc1swXS5zbGljZSgtMSkgPT0gIiUi ICYmIChyZWQgKj0gMi41NSk7CisgICAgICAgICAgICBncmVlbiA9IHRvRmxv YXQodmFsdWVzWzFdKTsKKyAgICAgICAgICAgIHZhbHVlc1sxXS5zbGljZSgt MSkgPT0gIiUiICYmIChncmVlbiAqPSAyLjU1KTsKKyAgICAgICAgICAgIGJs dWUgPSB0b0Zsb2F0KHZhbHVlc1syXSk7CisgICAgICAgICAgICB2YWx1ZXNb Ml0uc2xpY2UoLTEpID09ICIlIiAmJiAoYmx1ZSAqPSAyLjU1KTsKKyAgICAg ICAgICAgIHJnYlsxXS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIDQpID09ICJy Z2JhIiAmJiAob3BhY2l0eSA9IHRvRmxvYXQodmFsdWVzWzNdKSk7CisgICAg ICAgICAgICB2YWx1ZXNbM10gJiYgdmFsdWVzWzNdLnNsaWNlKC0xKSA9PSAi JSIgJiYgKG9wYWNpdHkgLz0gMTAwKTsKKyAgICAgICAgfQorICAgICAgICBp ZiAocmdiWzVdKSB7CisgICAgICAgICAgICB2YWx1ZXMgPSByZ2JbNV0uc3Bs aXQoY29tbWFTcGFjZXMpOworICAgICAgICAgICAgcmVkID0gdG9GbG9hdCh2 YWx1ZXNbMF0pOworICAgICAgICAgICAgdmFsdWVzWzBdLnNsaWNlKC0xKSA9 PSAiJSIgJiYgKHJlZCAvPSAxMDApOworICAgICAgICAgICAgZ3JlZW4gPSB0 b0Zsb2F0KHZhbHVlc1sxXSk7CisgICAgICAgICAgICB2YWx1ZXNbMV0uc2xp Y2UoLTEpID09ICIlIiAmJiAoZ3JlZW4gLz0gMTAwKTsKKyAgICAgICAgICAg IGJsdWUgPSB0b0Zsb2F0KHZhbHVlc1syXSk7CisgICAgICAgICAgICB2YWx1 ZXNbMl0uc2xpY2UoLTEpID09ICIlIiAmJiAoYmx1ZSAvPSAxMDApOworICAg ICAgICAgICAgKHZhbHVlc1swXS5zbGljZSgtMykgPT0gImRlZyIgfHwgdmFs dWVzWzBdLnNsaWNlKC0xKSA9PSAiXHhiMCIpICYmIChyZWQgLz0gMzYwKTsK KyAgICAgICAgICAgIHJnYlsxXS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIDQp ID09ICJoc2JhIiAmJiAob3BhY2l0eSA9IHRvRmxvYXQodmFsdWVzWzNdKSk7 CisgICAgICAgICAgICB2YWx1ZXNbM10gJiYgdmFsdWVzWzNdLnNsaWNlKC0x KSA9PSAiJSIgJiYgKG9wYWNpdHkgLz0gMTAwKTsKKyAgICAgICAgICAgIHJl dHVybiBTbmFwLmhzYjJyZ2IocmVkLCBncmVlbiwgYmx1ZSwgb3BhY2l0eSk7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJnYls2XSkgeworICAgICAgICAg ICAgdmFsdWVzID0gcmdiWzZdLnNwbGl0KGNvbW1hU3BhY2VzKTsKKyAgICAg ICAgICAgIHJlZCA9IHRvRmxvYXQodmFsdWVzWzBdKTsKKyAgICAgICAgICAg IHZhbHVlc1swXS5zbGljZSgtMSkgPT0gIiUiICYmIChyZWQgLz0gMTAwKTsK KyAgICAgICAgICAgIGdyZWVuID0gdG9GbG9hdCh2YWx1ZXNbMV0pOworICAg ICAgICAgICAgdmFsdWVzWzFdLnNsaWNlKC0xKSA9PSAiJSIgJiYgKGdyZWVu IC89IDEwMCk7CisgICAgICAgICAgICBibHVlID0gdG9GbG9hdCh2YWx1ZXNb Ml0pOworICAgICAgICAgICAgdmFsdWVzWzJdLnNsaWNlKC0xKSA9PSAiJSIg JiYgKGJsdWUgLz0gMTAwKTsKKyAgICAgICAgICAgICh2YWx1ZXNbMF0uc2xp Y2UoLTMpID09ICJkZWciIHx8IHZhbHVlc1swXS5zbGljZSgtMSkgPT0gIlx4 YjAiKSAmJiAocmVkIC89IDM2MCk7CisgICAgICAgICAgICByZ2JbMV0udG9M b3dlckNhc2UoKS5zbGljZSgwLCA0KSA9PSAiaHNsYSIgJiYgKG9wYWNpdHkg PSB0b0Zsb2F0KHZhbHVlc1szXSkpOworICAgICAgICAgICAgdmFsdWVzWzNd ICYmIHZhbHVlc1szXS5zbGljZSgtMSkgPT0gIiUiICYmIChvcGFjaXR5IC89 IDEwMCk7CisgICAgICAgICAgICByZXR1cm4gU25hcC5oc2wycmdiKHJlZCwg Z3JlZW4sIGJsdWUsIG9wYWNpdHkpOworICAgICAgICB9CisgICAgICAgIHJl ZCA9IG1taW4obWF0aC5yb3VuZChyZWQpLCAyNTUpOworICAgICAgICBncmVl biA9IG1taW4obWF0aC5yb3VuZChncmVlbiksIDI1NSk7CisgICAgICAgIGJs dWUgPSBtbWluKG1hdGgucm91bmQoYmx1ZSksIDI1NSk7CisgICAgICAgIG9w YWNpdHkgPSBtbWluKG1tYXgob3BhY2l0eSwgMCksIDEpOworICAgICAgICBy Z2IgPSB7cjogcmVkLCBnOiBncmVlbiwgYjogYmx1ZSwgdG9TdHJpbmc6IHJn YnRvU3RyaW5nfTsKKyAgICAgICAgcmdiLmhleCA9ICIjIiArICgxNjc3NzIx NiB8IGJsdWUgfCAoZ3JlZW4gPDwgOCkgfCAocmVkIDw8IDE2KSkudG9TdHJp bmcoMTYpLnNsaWNlKDEpOworICAgICAgICByZ2Iub3BhY2l0eSA9IGlzKG9w YWNpdHksICJmaW5pdGUiKSA/IG9wYWNpdHkgOiAxOworICAgICAgICByZXR1 cm4gcmdiOworICAgIH0KKyAgICByZXR1cm4ge3I6IC0xLCBnOiAtMSwgYjog LTEsIGhleDogIm5vbmUiLCBlcnJvcjogMSwgdG9TdHJpbmc6IHJnYnRvU3Ry aW5nfTsKK30sIFNuYXApOworLypcCisgKiBTbmFwLmhzYgorIFsgbWV0aG9k IF0KKyAqKgorICogQ29udmVydHMgSFNCIHZhbHVlcyB0byBhIGhleCByZXBy ZXNlbnRhdGlvbiBvZiB0aGUgY29sb3IKKyAtIGggKG51bWJlcikgaHVlCisg LSBzIChudW1iZXIpIHNhdHVyYXRpb24KKyAtIGIgKG51bWJlcikgdmFsdWUg b3IgYnJpZ2h0bmVzcworID0gKHN0cmluZykgaGV4IHJlcHJlc2VudGF0aW9u IG9mIHRoZSBjb2xvcgorXCovCitTbmFwLmhzYiA9IGNhY2hlcihmdW5jdGlv biAoaCwgcywgYikgeworICAgIHJldHVybiBTbmFwLmhzYjJyZ2IoaCwgcywg YikuaGV4OworfSk7CisvKlwKKyAqIFNuYXAuaHNsCisgWyBtZXRob2QgXQor ICoqCisgKiBDb252ZXJ0cyBIU0wgdmFsdWVzIHRvIGEgaGV4IHJlcHJlc2Vu dGF0aW9uIG9mIHRoZSBjb2xvcgorIC0gaCAobnVtYmVyKSBodWUKKyAtIHMg KG51bWJlcikgc2F0dXJhdGlvbgorIC0gbCAobnVtYmVyKSBsdW1pbm9zaXR5 CisgPSAoc3RyaW5nKSBoZXggcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbG9y CitcKi8KK1NuYXAuaHNsID0gY2FjaGVyKGZ1bmN0aW9uIChoLCBzLCBsKSB7 CisgICAgcmV0dXJuIFNuYXAuaHNsMnJnYihoLCBzLCBsKS5oZXg7Cit9KTsK Ky8qXAorICogU25hcC5yZ2IKKyBbIG1ldGhvZCBdCisgKioKKyAqIENvbnZl cnRzIFJHQiB2YWx1ZXMgdG8gYSBoZXggcmVwcmVzZW50YXRpb24gb2YgdGhl IGNvbG9yCisgLSByIChudW1iZXIpIHJlZAorIC0gZyAobnVtYmVyKSBncmVl bgorIC0gYiAobnVtYmVyKSBibHVlCisgPSAoc3RyaW5nKSBoZXggcmVwcmVz ZW50YXRpb24gb2YgdGhlIGNvbG9yCitcKi8KK1NuYXAucmdiID0gY2FjaGVy KGZ1bmN0aW9uIChyLCBnLCBiLCBvKSB7CisgICAgaWYgKGlzKG8sICJmaW5p dGUiKSkgeworICAgICAgICB2YXIgcm91bmQgPSBtYXRoLnJvdW5kOworICAg ICAgICByZXR1cm4gInJnYmEoIiArIFtyb3VuZChyKSwgcm91bmQoZyksIHJv dW5kKGIpLCArby50b0ZpeGVkKDIpXSArICIpIjsKKyAgICB9CisgICAgcmV0 dXJuICIjIiArICgxNjc3NzIxNiB8IGIgfCAoZyA8PCA4KSB8IChyIDw8IDE2 KSkudG9TdHJpbmcoMTYpLnNsaWNlKDEpOworfSk7Cit2YXIgdG9IZXggPSBm dW5jdGlvbiAoY29sb3IpIHsKKyAgICB2YXIgaSA9IGdsb2IuZG9jLmdldEVs ZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF0gfHwgZ2xvYi5kb2MuZ2V0RWxl bWVudHNCeVRhZ05hbWUoInN2ZyIpWzBdLAorICAgICAgICByZWQgPSAicmdi KDI1NSwgMCwgMCkiOworICAgIHRvSGV4ID0gY2FjaGVyKGZ1bmN0aW9uIChj b2xvcikgeworICAgICAgICBpZiAoY29sb3IudG9Mb3dlckNhc2UoKSA9PSAi cmVkIikgeworICAgICAgICAgICAgcmV0dXJuIHJlZDsKKyAgICAgICAgfQor ICAgICAgICBpLnN0eWxlLmNvbG9yID0gcmVkOworICAgICAgICBpLnN0eWxl LmNvbG9yID0gY29sb3I7CisgICAgICAgIHZhciBvdXQgPSBnbG9iLmRvYy5k ZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGksIEUpLmdldFByb3BlcnR5 VmFsdWUoImNvbG9yIik7CisgICAgICAgIHJldHVybiBvdXQgPT0gcmVkID8g bnVsbCA6IG91dDsKKyAgICB9KTsKKyAgICByZXR1cm4gdG9IZXgoY29sb3Ip OworfSwKK2hzYnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVy biAiaHNiKCIgKyBbdGhpcy5oLCB0aGlzLnMsIHRoaXMuYl0gKyAiKSI7Cit9 LAoraHNsdG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgcmV0dXJuICJo c2woIiArIFt0aGlzLmgsIHRoaXMucywgdGhpcy5sXSArICIpIjsKK30sCity Z2J0b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gdGhpcy5v cGFjaXR5ID09IDEgfHwgdGhpcy5vcGFjaXR5ID09IG51bGwgPworICAgICAg ICAgICAgdGhpcy5oZXggOgorICAgICAgICAgICAgInJnYmEoIiArIFt0aGlz LnIsIHRoaXMuZywgdGhpcy5iLCB0aGlzLm9wYWNpdHldICsgIikiOworfSwK K3ByZXBhcmVSR0IgPSBmdW5jdGlvbiAociwgZywgYikgeworICAgIGlmIChn ID09IG51bGwgJiYgaXMociwgIm9iamVjdCIpICYmICJyIiBpbiByICYmICJn IiBpbiByICYmICJiIiBpbiByKSB7CisgICAgICAgIGIgPSByLmI7CisgICAg ICAgIGcgPSByLmc7CisgICAgICAgIHIgPSByLnI7CisgICAgfQorICAgIGlm IChnID09IG51bGwgJiYgaXMociwgc3RyaW5nKSkgeworICAgICAgICB2YXIg Y2xyID0gU25hcC5nZXRSR0Iocik7CisgICAgICAgIHIgPSBjbHIucjsKKyAg ICAgICAgZyA9IGNsci5nOworICAgICAgICBiID0gY2xyLmI7CisgICAgfQor ICAgIGlmIChyID4gMSB8fCBnID4gMSB8fCBiID4gMSkgeworICAgICAgICBy IC89IDI1NTsKKyAgICAgICAgZyAvPSAyNTU7CisgICAgICAgIGIgLz0gMjU1 OworICAgIH0KKworICAgIHJldHVybiBbciwgZywgYl07Cit9LAorcGFja2Fn ZVJHQiA9IGZ1bmN0aW9uIChyLCBnLCBiLCBvKSB7CisgICAgciA9IG1hdGgu cm91bmQociAqIDI1NSk7CisgICAgZyA9IG1hdGgucm91bmQoZyAqIDI1NSk7 CisgICAgYiA9IG1hdGgucm91bmQoYiAqIDI1NSk7CisgICAgdmFyIHJnYiA9 IHsKKyAgICAgICAgcjogciwKKyAgICAgICAgZzogZywKKyAgICAgICAgYjog YiwKKyAgICAgICAgb3BhY2l0eTogaXMobywgImZpbml0ZSIpID8gbyA6IDEs CisgICAgICAgIGhleDogU25hcC5yZ2IociwgZywgYiksCisgICAgICAgIHRv U3RyaW5nOiByZ2J0b1N0cmluZworICAgIH07CisgICAgaXMobywgImZpbml0 ZSIpICYmIChyZ2Iub3BhY2l0eSA9IG8pOworICAgIHJldHVybiByZ2I7Cit9 OworLypcCisgKiBTbmFwLmNvbG9yCisgWyBtZXRob2QgXQorICoqCisgKiBQ YXJzZXMgdGhlIGNvbG9yIHN0cmluZyBhbmQgcmV0dXJucyBhbiBvYmplY3Qg ZmVhdHVyaW5nIHRoZSBjb2xvcidzIGNvbXBvbmVudCB2YWx1ZXMKKyAtIGNs ciAoc3RyaW5nKSBjb2xvciBzdHJpbmcgaW4gb25lIG9mIHRoZSBzdXBwb3J0 ZWQgZm9ybWF0cyAoc2VlIEBTbmFwLmdldFJHQikKKyA9IChvYmplY3QpIENv bWJpbmVkIFJHQi9IU0Igb2JqZWN0IGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0 OgorIG8geworIG8gICAgIHIgKG51bWJlcikgcmVkLAorIG8gICAgIGcgKG51 bWJlcikgZ3JlZW4sCisgbyAgICAgYiAobnVtYmVyKSBibHVlLAorIG8gICAg IGhleCAoc3RyaW5nKSBjb2xvciBpbiBIVE1ML0NTUyBmb3JtYXQ6ICPigKLi gKLigKLigKLigKLigKIsCisgbyAgICAgZXJyb3IgKGJvb2xlYW4pIGB0cnVl YCBpZiBzdHJpbmcgY2FuJ3QgYmUgcGFyc2VkLAorIG8gICAgIGggKG51bWJl cikgaHVlLAorIG8gICAgIHMgKG51bWJlcikgc2F0dXJhdGlvbiwKKyBvICAg ICB2IChudW1iZXIpIHZhbHVlIChicmlnaHRuZXNzKSwKKyBvICAgICBsIChu dW1iZXIpIGxpZ2h0bmVzcworIG8gfQorXCovCitTbmFwLmNvbG9yID0gZnVu Y3Rpb24gKGNscikgeworICAgIHZhciByZ2I7CisgICAgaWYgKGlzKGNsciwg Im9iamVjdCIpICYmICJoIiBpbiBjbHIgJiYgInMiIGluIGNsciAmJiAiYiIg aW4gY2xyKSB7CisgICAgICAgIHJnYiA9IFNuYXAuaHNiMnJnYihjbHIpOwor ICAgICAgICBjbHIuciA9IHJnYi5yOworICAgICAgICBjbHIuZyA9IHJnYi5n OworICAgICAgICBjbHIuYiA9IHJnYi5iOworICAgICAgICBjbHIub3BhY2l0 eSA9IDE7CisgICAgICAgIGNsci5oZXggPSByZ2IuaGV4OworICAgIH0gZWxz ZSBpZiAoaXMoY2xyLCAib2JqZWN0IikgJiYgImgiIGluIGNsciAmJiAicyIg aW4gY2xyICYmICJsIiBpbiBjbHIpIHsKKyAgICAgICAgcmdiID0gU25hcC5o c2wycmdiKGNscik7CisgICAgICAgIGNsci5yID0gcmdiLnI7CisgICAgICAg IGNsci5nID0gcmdiLmc7CisgICAgICAgIGNsci5iID0gcmdiLmI7CisgICAg ICAgIGNsci5vcGFjaXR5ID0gMTsKKyAgICAgICAgY2xyLmhleCA9IHJnYi5o ZXg7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGlzKGNsciwgInN0cmlu ZyIpKSB7CisgICAgICAgICAgICBjbHIgPSBTbmFwLmdldFJHQihjbHIpOwor ICAgICAgICB9CisgICAgICAgIGlmIChpcyhjbHIsICJvYmplY3QiKSAmJiAi ciIgaW4gY2xyICYmICJnIiBpbiBjbHIgJiYgImIiIGluIGNsciAmJiAhKCJl cnJvciIgaW4gY2xyKSkgeworICAgICAgICAgICAgcmdiID0gU25hcC5yZ2Iy aHNsKGNscik7CisgICAgICAgICAgICBjbHIuaCA9IHJnYi5oOworICAgICAg ICAgICAgY2xyLnMgPSByZ2IuczsKKyAgICAgICAgICAgIGNsci5sID0gcmdi Lmw7CisgICAgICAgICAgICByZ2IgPSBTbmFwLnJnYjJoc2IoY2xyKTsKKyAg ICAgICAgICAgIGNsci52ID0gcmdiLmI7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBjbHIgPSB7aGV4OiAibm9uZSJ9OworICAgICAgICAgICAg Y2xyLnIgPSBjbHIuZyA9IGNsci5iID0gY2xyLmggPSBjbHIucyA9IGNsci52 ID0gY2xyLmwgPSAtMTsKKyAgICAgICAgICAgIGNsci5lcnJvciA9IDE7Cisg ICAgICAgIH0KKyAgICB9CisgICAgY2xyLnRvU3RyaW5nID0gcmdidG9TdHJp bmc7CisgICAgcmV0dXJuIGNscjsKK307CisvKlwKKyAqIFNuYXAuaHNiMnJn YgorIFsgbWV0aG9kIF0KKyAqKgorICogQ29udmVydHMgSFNCIHZhbHVlcyB0 byBhbiBSR0Igb2JqZWN0CisgLSBoIChudW1iZXIpIGh1ZQorIC0gcyAobnVt YmVyKSBzYXR1cmF0aW9uCisgLSB2IChudW1iZXIpIHZhbHVlIG9yIGJyaWdo dG5lc3MKKyA9IChvYmplY3QpIFJHQiBvYmplY3QgaW4gdGhlIGZvbGxvd2lu ZyBmb3JtYXQ6CisgbyB7CisgbyAgICAgciAobnVtYmVyKSByZWQsCisgbyAg ICAgZyAobnVtYmVyKSBncmVlbiwKKyBvICAgICBiIChudW1iZXIpIGJsdWUs CisgbyAgICAgaGV4IChzdHJpbmcpIGNvbG9yIGluIEhUTUwvQ1NTIGZvcm1h dDogI+KAouKAouKAouKAouKAouKAogorIG8gfQorXCovCitTbmFwLmhzYjJy Z2IgPSBmdW5jdGlvbiAoaCwgcywgdiwgbykgeworICAgIGlmIChpcyhoLCAi b2JqZWN0IikgJiYgImgiIGluIGggJiYgInMiIGluIGggJiYgImIiIGluIGgp IHsKKyAgICAgICAgdiA9IGguYjsKKyAgICAgICAgcyA9IGguczsKKyAgICAg ICAgbyA9IGgubzsKKyAgICAgICAgaCA9IGguaDsKKyAgICB9CisgICAgaCAq PSAzNjA7CisgICAgdmFyIFIsIEcsIEIsIFgsIEM7CisgICAgaCA9IChoICUg MzYwKSAvIDYwOworICAgIEMgPSB2ICogczsKKyAgICBYID0gQyAqICgxIC0g YWJzKGggJSAyIC0gMSkpOworICAgIFIgPSBHID0gQiA9IHYgLSBDOworCisg ICAgaCA9IH5+aDsKKyAgICBSICs9IFtDLCBYLCAwLCAwLCBYLCBDXVtoXTsK KyAgICBHICs9IFtYLCBDLCBDLCBYLCAwLCAwXVtoXTsKKyAgICBCICs9IFsw LCAwLCBYLCBDLCBDLCBYXVtoXTsKKyAgICByZXR1cm4gcGFja2FnZVJHQihS LCBHLCBCLCBvKTsKK307CisvKlwKKyAqIFNuYXAuaHNsMnJnYgorIFsgbWV0 aG9kIF0KKyAqKgorICogQ29udmVydHMgSFNMIHZhbHVlcyB0byBhbiBSR0Ig b2JqZWN0CisgLSBoIChudW1iZXIpIGh1ZQorIC0gcyAobnVtYmVyKSBzYXR1 cmF0aW9uCisgLSBsIChudW1iZXIpIGx1bWlub3NpdHkKKyA9IChvYmplY3Qp IFJHQiBvYmplY3QgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisgbyB7Cisg byAgICAgciAobnVtYmVyKSByZWQsCisgbyAgICAgZyAobnVtYmVyKSBncmVl biwKKyBvICAgICBiIChudW1iZXIpIGJsdWUsCisgbyAgICAgaGV4IChzdHJp bmcpIGNvbG9yIGluIEhUTUwvQ1NTIGZvcm1hdDogI+KAouKAouKAouKAouKA ouKAogorIG8gfQorXCovCitTbmFwLmhzbDJyZ2IgPSBmdW5jdGlvbiAoaCwg cywgbCwgbykgeworICAgIGlmIChpcyhoLCAib2JqZWN0IikgJiYgImgiIGlu IGggJiYgInMiIGluIGggJiYgImwiIGluIGgpIHsKKyAgICAgICAgbCA9IGgu bDsKKyAgICAgICAgcyA9IGguczsKKyAgICAgICAgaCA9IGguaDsKKyAgICB9 CisgICAgaWYgKGggPiAxIHx8IHMgPiAxIHx8IGwgPiAxKSB7CisgICAgICAg IGggLz0gMzYwOworICAgICAgICBzIC89IDEwMDsKKyAgICAgICAgbCAvPSAx MDA7CisgICAgfQorICAgIGggKj0gMzYwOworICAgIHZhciBSLCBHLCBCLCBY LCBDOworICAgIGggPSAoaCAlIDM2MCkgLyA2MDsKKyAgICBDID0gMiAqIHMg KiAobCA8IC41ID8gbCA6IDEgLSBsKTsKKyAgICBYID0gQyAqICgxIC0gYWJz KGggJSAyIC0gMSkpOworICAgIFIgPSBHID0gQiA9IGwgLSBDIC8gMjsKKwor ICAgIGggPSB+fmg7CisgICAgUiArPSBbQywgWCwgMCwgMCwgWCwgQ11baF07 CisgICAgRyArPSBbWCwgQywgQywgWCwgMCwgMF1baF07CisgICAgQiArPSBb MCwgMCwgWCwgQywgQywgWF1baF07CisgICAgcmV0dXJuIHBhY2thZ2VSR0Io UiwgRywgQiwgbyk7Cit9OworLypcCisgKiBTbmFwLnJnYjJoc2IKKyBbIG1l dGhvZCBdCisgKioKKyAqIENvbnZlcnRzIFJHQiB2YWx1ZXMgdG8gYW4gSFNC IG9iamVjdAorIC0gciAobnVtYmVyKSByZWQKKyAtIGcgKG51bWJlcikgZ3Jl ZW4KKyAtIGIgKG51bWJlcikgYmx1ZQorID0gKG9iamVjdCkgSFNCIG9iamVj dCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyBvIHsKKyBvICAgICBoIChu dW1iZXIpIGh1ZSwKKyBvICAgICBzIChudW1iZXIpIHNhdHVyYXRpb24sCisg byAgICAgYiAobnVtYmVyKSBicmlnaHRuZXNzCisgbyB9CitcKi8KK1NuYXAu cmdiMmhzYiA9IGZ1bmN0aW9uIChyLCBnLCBiKSB7CisgICAgYiA9IHByZXBh cmVSR0IociwgZywgYik7CisgICAgciA9IGJbMF07CisgICAgZyA9IGJbMV07 CisgICAgYiA9IGJbMl07CisKKyAgICB2YXIgSCwgUywgViwgQzsKKyAgICBW ID0gbW1heChyLCBnLCBiKTsKKyAgICBDID0gViAtIG1taW4ociwgZywgYik7 CisgICAgSCA9IChDID09IDAgPyBudWxsIDoKKyAgICAgICAgIFYgPT0gciA/ IChnIC0gYikgLyBDIDoKKyAgICAgICAgIFYgPT0gZyA/IChiIC0gcikgLyBD ICsgMiA6CisgICAgICAgICAgICAgICAgICAociAtIGcpIC8gQyArIDQKKyAg ICAgICAgKTsKKyAgICBIID0gKChIICsgMzYwKSAlIDYpICogNjAgLyAzNjA7 CisgICAgUyA9IEMgPT0gMCA/IDAgOiBDIC8gVjsKKyAgICByZXR1cm4ge2g6 IEgsIHM6IFMsIGI6IFYsIHRvU3RyaW5nOiBoc2J0b1N0cmluZ307Cit9Owor LypcCisgKiBTbmFwLnJnYjJoc2wKKyBbIG1ldGhvZCBdCisgKioKKyAqIENv bnZlcnRzIFJHQiB2YWx1ZXMgdG8gYW4gSFNMIG9iamVjdAorIC0gciAobnVt YmVyKSByZWQKKyAtIGcgKG51bWJlcikgZ3JlZW4KKyAtIGIgKG51bWJlcikg Ymx1ZQorID0gKG9iamVjdCkgSFNMIG9iamVjdCBpbiB0aGUgZm9sbG93aW5n IGZvcm1hdDoKKyBvIHsKKyBvICAgICBoIChudW1iZXIpIGh1ZSwKKyBvICAg ICBzIChudW1iZXIpIHNhdHVyYXRpb24sCisgbyAgICAgbCAobnVtYmVyKSBs dW1pbm9zaXR5CisgbyB9CitcKi8KK1NuYXAucmdiMmhzbCA9IGZ1bmN0aW9u IChyLCBnLCBiKSB7CisgICAgYiA9IHByZXBhcmVSR0IociwgZywgYik7Cisg ICAgciA9IGJbMF07CisgICAgZyA9IGJbMV07CisgICAgYiA9IGJbMl07CisK KyAgICB2YXIgSCwgUywgTCwgTSwgbSwgQzsKKyAgICBNID0gbW1heChyLCBn LCBiKTsKKyAgICBtID0gbW1pbihyLCBnLCBiKTsKKyAgICBDID0gTSAtIG07 CisgICAgSCA9IChDID09IDAgPyBudWxsIDoKKyAgICAgICAgIE0gPT0gciA/ IChnIC0gYikgLyBDIDoKKyAgICAgICAgIE0gPT0gZyA/IChiIC0gcikgLyBD ICsgMiA6CisgICAgICAgICAgICAgICAgICAociAtIGcpIC8gQyArIDQpOwor ICAgIEggPSAoKEggKyAzNjApICUgNikgKiA2MCAvIDM2MDsKKyAgICBMID0g KE0gKyBtKSAvIDI7CisgICAgUyA9IChDID09IDAgPyAwIDoKKyAgICAgICAg IEwgPCAuNSA/IEMgLyAoMiAqIEwpIDoKKyAgICAgICAgICAgICAgICAgIEMg LyAoMiAtIDIgKiBMKSk7CisgICAgcmV0dXJuIHtoOiBILCBzOiBTLCBsOiBM LCB0b1N0cmluZzogaHNsdG9TdHJpbmd9OworfTsKKworLy8gVHJhbnNmb3Jt YXRpb25zCisvKlwKKyAqIFNuYXAucGFyc2VQYXRoU3RyaW5nCisgWyBtZXRo b2QgXQorICoqCisgKiBVdGlsaXR5IG1ldGhvZAorICoqCisgKiBQYXJzZXMg Z2l2ZW4gcGF0aCBzdHJpbmcgaW50byBhbiBhcnJheSBvZiBhcnJheXMgb2Yg cGF0aCBzZWdtZW50cworIC0gcGF0aFN0cmluZyAoc3RyaW5nfGFycmF5KSBw YXRoIHN0cmluZyBvciBhcnJheSBvZiBzZWdtZW50cyAoaW4gdGhlIGxhc3Qg Y2FzZSBpdCBpcyByZXR1cm5lZCBzdHJhaWdodCBhd2F5KQorID0gKGFycmF5 KSBhcnJheSBvZiBzZWdtZW50cworXCovCitTbmFwLnBhcnNlUGF0aFN0cmlu ZyA9IGZ1bmN0aW9uIChwYXRoU3RyaW5nKSB7CisgICAgaWYgKCFwYXRoU3Ry aW5nKSB7CisgICAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgICB2YXIg cHRoID0gU25hcC5wYXRoKHBhdGhTdHJpbmcpOworICAgIGlmIChwdGguYXJy KSB7CisgICAgICAgIHJldHVybiBTbmFwLnBhdGguY2xvbmUocHRoLmFycik7 CisgICAgfQorCisgICAgdmFyIHBhcmFtQ291bnRzID0ge2E6IDcsIGM6IDYs IG86IDIsIGg6IDEsIGw6IDIsIG06IDIsIHI6IDQsIHE6IDQsIHM6IDQsIHQ6 IDIsIHY6IDEsIHU6IDMsIHo6IDB9LAorICAgICAgICBkYXRhID0gW107Cisg ICAgaWYgKGlzKHBhdGhTdHJpbmcsICJhcnJheSIpICYmIGlzKHBhdGhTdHJp bmdbMF0sICJhcnJheSIpKSB7IC8vIHJvdWdoIGFzc3VtcHRpb24KKyAgICAg ICAgZGF0YSA9IFNuYXAucGF0aC5jbG9uZShwYXRoU3RyaW5nKTsKKyAgICB9 CisgICAgaWYgKCFkYXRhLmxlbmd0aCkgeworICAgICAgICBTdHIocGF0aFN0 cmluZykucmVwbGFjZShwYXRoQ29tbWFuZCwgZnVuY3Rpb24gKGEsIGIsIGMp IHsKKyAgICAgICAgICAgIHZhciBwYXJhbXMgPSBbXSwKKyAgICAgICAgICAg ICAgICBuYW1lID0gYi50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgYy5y ZXBsYWNlKHBhdGhWYWx1ZXMsIGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAg ICAgICAgICAgYiAmJiBwYXJhbXMucHVzaCgrYik7CisgICAgICAgICAgICB9 KTsKKyAgICAgICAgICAgIGlmIChuYW1lID09ICJtIiAmJiBwYXJhbXMubGVu Z3RoID4gMikgeworICAgICAgICAgICAgICAgIGRhdGEucHVzaChbYl0uY29u Y2F0KHBhcmFtcy5zcGxpY2UoMCwgMikpKTsKKyAgICAgICAgICAgICAgICBu YW1lID0gImwiOworICAgICAgICAgICAgICAgIGIgPSBiID09ICJtIiA/ICJs IiA6ICJMIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChuYW1l ID09ICJvIiAmJiBwYXJhbXMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAg ICAgICBkYXRhLnB1c2goW2IsIHBhcmFtc1swXV0pOworICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKG5hbWUgPT0gInIiKSB7CisgICAgICAgICAg ICAgICAgZGF0YS5wdXNoKFtiXS5jb25jYXQocGFyYW1zKSk7CisgICAgICAg ICAgICB9IGVsc2Ugd2hpbGUgKHBhcmFtcy5sZW5ndGggPj0gcGFyYW1Db3Vu dHNbbmFtZV0pIHsKKyAgICAgICAgICAgICAgICBkYXRhLnB1c2goW2JdLmNv bmNhdChwYXJhbXMuc3BsaWNlKDAsIHBhcmFtQ291bnRzW25hbWVdKSkpOwor ICAgICAgICAgICAgICAgIGlmICghcGFyYW1Db3VudHNbbmFtZV0pIHsKKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICB9CisgICAgZGF0YS50 b1N0cmluZyA9IFNuYXAucGF0aC50b1N0cmluZzsKKyAgICBwdGguYXJyID0g U25hcC5wYXRoLmNsb25lKGRhdGEpOworICAgIHJldHVybiBkYXRhOworfTsK Ky8qXAorICogU25hcC5wYXJzZVRyYW5zZm9ybVN0cmluZworIFsgbWV0aG9k IF0KKyAqKgorICogVXRpbGl0eSBtZXRob2QKKyAqKgorICogUGFyc2VzIGdp dmVuIHRyYW5zZm9ybSBzdHJpbmcgaW50byBhbiBhcnJheSBvZiB0cmFuc2Zv cm1hdGlvbnMKKyAtIFRTdHJpbmcgKHN0cmluZ3xhcnJheSkgdHJhbnNmb3Jt IHN0cmluZyBvciBhcnJheSBvZiB0cmFuc2Zvcm1hdGlvbnMgKGluIHRoZSBs YXN0IGNhc2UgaXQgaXMgcmV0dXJuZWQgc3RyYWlnaHQgYXdheSkKKyA9IChh cnJheSkgYXJyYXkgb2YgdHJhbnNmb3JtYXRpb25zCitcKi8KK3ZhciBwYXJz ZVRyYW5zZm9ybVN0cmluZyA9IFNuYXAucGFyc2VUcmFuc2Zvcm1TdHJpbmcg PSBmdW5jdGlvbiAoVFN0cmluZykgeworICAgIGlmICghVFN0cmluZykgewor ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgdmFyIHBhcmFtQ291 bnRzID0ge3I6IDMsIHM6IDQsIHQ6IDIsIG06IDZ9LAorICAgICAgICBkYXRh ID0gW107CisgICAgaWYgKGlzKFRTdHJpbmcsICJhcnJheSIpICYmIGlzKFRT dHJpbmdbMF0sICJhcnJheSIpKSB7IC8vIHJvdWdoIGFzc3VtcHRpb24KKyAg ICAgICAgZGF0YSA9IFNuYXAucGF0aC5jbG9uZShUU3RyaW5nKTsKKyAgICB9 CisgICAgaWYgKCFkYXRhLmxlbmd0aCkgeworICAgICAgICBTdHIoVFN0cmlu ZykucmVwbGFjZSh0Q29tbWFuZCwgZnVuY3Rpb24gKGEsIGIsIGMpIHsKKyAg ICAgICAgICAgIHZhciBwYXJhbXMgPSBbXSwKKyAgICAgICAgICAgICAgICBu YW1lID0gYi50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgYy5yZXBsYWNl KHBhdGhWYWx1ZXMsIGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgICAgICAg ICAgYiAmJiBwYXJhbXMucHVzaCgrYik7CisgICAgICAgICAgICB9KTsKKyAg ICAgICAgICAgIGRhdGEucHVzaChbYl0uY29uY2F0KHBhcmFtcykpOworICAg ICAgICB9KTsKKyAgICB9CisgICAgZGF0YS50b1N0cmluZyA9IFNuYXAucGF0 aC50b1N0cmluZzsKKyAgICByZXR1cm4gZGF0YTsKK307CitmdW5jdGlvbiBz dmdUcmFuc2Zvcm0yc3RyaW5nKHRzdHIpIHsKKyAgICB2YXIgcmVzID0gW107 CisgICAgdHN0ciA9IHRzdHIucmVwbGFjZSgvKD86XnxccykoXHcrKVwoKFte KV0rKVwpL2csIGZ1bmN0aW9uIChhbGwsIG5hbWUsIHBhcmFtcykgeworICAg ICAgICBwYXJhbXMgPSBwYXJhbXMuc3BsaXQoL1xzKixccyp8XHMrLyk7Cisg ICAgICAgIGlmIChuYW1lID09ICJyb3RhdGUiICYmIHBhcmFtcy5sZW5ndGgg PT0gMSkgeworICAgICAgICAgICAgcGFyYW1zLnB1c2goMCwgMCk7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKG5hbWUgPT0gInNjYWxlIikgeworICAgICAg ICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPiAyKSB7CisgICAgICAgICAgICAg ICAgcGFyYW1zID0gcGFyYW1zLnNsaWNlKDAsIDIpOworICAgICAgICAgICAg fSBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09IDIpIHsKKyAgICAgICAgICAg ICAgICBwYXJhbXMucHVzaCgwLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGlmIChwYXJhbXMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAg ICAgICBwYXJhbXMucHVzaChwYXJhbXNbMF0sIDAsIDApOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChuYW1lID09ICJza2V3WCIp IHsKKyAgICAgICAgICAgIHJlcy5wdXNoKFsibSIsIDEsIDAsIG1hdGgudGFu KHJhZChwYXJhbXNbMF0pKSwgMSwgMCwgMF0pOworICAgICAgICB9IGVsc2Ug aWYgKG5hbWUgPT0gInNrZXdZIikgeworICAgICAgICAgICAgcmVzLnB1c2go WyJtIiwgMSwgbWF0aC50YW4ocmFkKHBhcmFtc1swXSkpLCAwLCAxLCAwLCAw XSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXMucHVzaChb bmFtZS5jaGFyQXQoMCldLmNvbmNhdChwYXJhbXMpKTsKKyAgICAgICAgfQor ICAgICAgICByZXR1cm4gYWxsOworICAgIH0pOworICAgIHJldHVybiByZXM7 Cit9CitTbmFwLl8uc3ZnVHJhbnNmb3JtMnN0cmluZyA9IHN2Z1RyYW5zZm9y bTJzdHJpbmc7CitTbmFwLl8ucmdUcmFuc2Zvcm0gPSAvXlthLXpdW1xzXSot P1wuP1xkL2k7CitmdW5jdGlvbiB0cmFuc2Zvcm0ybWF0cml4KHRzdHIsIGJi b3gpIHsKKyAgICB2YXIgdGRhdGEgPSBwYXJzZVRyYW5zZm9ybVN0cmluZyh0 c3RyKSwKKyAgICAgICAgbSA9IG5ldyBTbmFwLk1hdHJpeDsKKyAgICBpZiAo dGRhdGEpIHsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGRhdGEu bGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgdmFyIHQgPSB0 ZGF0YVtpXSwKKyAgICAgICAgICAgICAgICB0bGVuID0gdC5sZW5ndGgsCisg ICAgICAgICAgICAgICAgY29tbWFuZCA9IFN0cih0WzBdKS50b0xvd2VyQ2Fz ZSgpLAorICAgICAgICAgICAgICAgIGFic29sdXRlID0gdFswXSAhPSBjb21t YW5kLAorICAgICAgICAgICAgICAgIGludmVyID0gYWJzb2x1dGUgPyBtLmlu dmVydCgpIDogMCwKKyAgICAgICAgICAgICAgICB4MSwKKyAgICAgICAgICAg ICAgICB5MSwKKyAgICAgICAgICAgICAgICB4MiwKKyAgICAgICAgICAgICAg ICB5MiwKKyAgICAgICAgICAgICAgICBiYjsKKyAgICAgICAgICAgIGlmIChj b21tYW5kID09ICJ0IiAmJiB0bGVuID09IDIpeworICAgICAgICAgICAgICAg IG0udHJhbnNsYXRlKHRbMV0sIDApOworICAgICAgICAgICAgfSBlbHNlIGlm IChjb21tYW5kID09ICJ0IiAmJiB0bGVuID09IDMpIHsKKyAgICAgICAgICAg ICAgICBpZiAoYWJzb2x1dGUpIHsKKyAgICAgICAgICAgICAgICAgICAgeDEg PSBpbnZlci54KDAsIDApOworICAgICAgICAgICAgICAgICAgICB5MSA9IGlu dmVyLnkoMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIHgyID0gaW52ZXIu eCh0WzFdLCB0WzJdKTsKKyAgICAgICAgICAgICAgICAgICAgeTIgPSBpbnZl ci55KHRbMV0sIHRbMl0pOworICAgICAgICAgICAgICAgICAgICBtLnRyYW5z bGF0ZSh4MiAtIHgxLCB5MiAtIHkxKTsKKyAgICAgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgICAgICBtLnRyYW5zbGF0ZSh0WzFdLCB0 WzJdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug aWYgKGNvbW1hbmQgPT0gInIiKSB7CisgICAgICAgICAgICAgICAgaWYgKHRs ZW4gPT0gMikgeworICAgICAgICAgICAgICAgICAgICBiYiA9IGJiIHx8IGJi b3g7CisgICAgICAgICAgICAgICAgICAgIG0ucm90YXRlKHRbMV0sIGJiLngg KyBiYi53aWR0aCAvIDIsIGJiLnkgKyBiYi5oZWlnaHQgLyAyKTsKKyAgICAg ICAgICAgICAgICB9IGVsc2UgaWYgKHRsZW4gPT0gNCkgeworICAgICAgICAg ICAgICAgICAgICBpZiAoYWJzb2x1dGUpIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHgyID0gaW52ZXIueCh0WzJdLCB0WzNdKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHkyID0gaW52ZXIueSh0WzJdLCB0WzNdKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIG0ucm90YXRlKHRbMV0sIHgyLCB5Mik7Cisg ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBtLnJvdGF0ZSh0WzFdLCB0WzJdLCB0WzNdKTsKKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0gZWxzZSBpZiAoY29tbWFuZCA9PSAicyIpIHsKKyAgICAgICAgICAgICAg ICBpZiAodGxlbiA9PSAyIHx8IHRsZW4gPT0gMykgeworICAgICAgICAgICAg ICAgICAgICBiYiA9IGJiIHx8IGJib3g7CisgICAgICAgICAgICAgICAgICAg IG0uc2NhbGUodFsxXSwgdFt0bGVuIC0gMV0sIGJiLnggKyBiYi53aWR0aCAv IDIsIGJiLnkgKyBiYi5oZWlnaHQgLyAyKTsKKyAgICAgICAgICAgICAgICB9 IGVsc2UgaWYgKHRsZW4gPT0gNCkgeworICAgICAgICAgICAgICAgICAgICBp ZiAoYWJzb2x1dGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHgyID0g aW52ZXIueCh0WzJdLCB0WzNdKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IHkyID0gaW52ZXIueSh0WzJdLCB0WzNdKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIG0uc2NhbGUodFsxXSwgdFsxXSwgeDIsIHkyKTsKKyAgICAgICAg ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IG0uc2NhbGUodFsxXSwgdFsxXSwgdFsyXSwgdFszXSk7CisgICAgICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRsZW4g PT0gNSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYWJzb2x1dGUpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIHgyID0gaW52ZXIueCh0WzNdLCB0 WzRdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHkyID0gaW52ZXIueSh0 WzNdLCB0WzRdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG0uc2NhbGUo dFsxXSwgdFsyXSwgeDIsIHkyKTsKKyAgICAgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG0uc2NhbGUodFsxXSwg dFsyXSwgdFszXSwgdFs0XSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbW1h bmQgPT0gIm0iICYmIHRsZW4gPT0gNykgeworICAgICAgICAgICAgICAgIG0u YWRkKHRbMV0sIHRbMl0sIHRbM10sIHRbNF0sIHRbNV0sIHRbNl0pOworICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBtOwor fQorU25hcC5fLnRyYW5zZm9ybTJtYXRyaXggPSB0cmFuc2Zvcm0ybWF0cml4 OworU25hcC5fdW5pdDJweCA9IHVuaXQycHg7Cit2YXIgY29udGFpbnMgPSBn bG9iLmRvYy5jb250YWlucyB8fCBnbG9iLmRvYy5jb21wYXJlRG9jdW1lbnRQ b3NpdGlvbiA/CisgICAgZnVuY3Rpb24gKGEsIGIpIHsKKyAgICAgICAgdmFy IGFkb3duID0gYS5ub2RlVHlwZSA9PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQg OiBhLAorICAgICAgICAgICAgYnVwID0gYiAmJiBiLnBhcmVudE5vZGU7Cisg ICAgICAgICAgICByZXR1cm4gYSA9PSBidXAgfHwgISEoYnVwICYmIGJ1cC5u b2RlVHlwZSA9PSAxICYmICgKKyAgICAgICAgICAgICAgICBhZG93bi5jb250 YWlucyA/CisgICAgICAgICAgICAgICAgICAgIGFkb3duLmNvbnRhaW5zKGJ1 cCkgOgorICAgICAgICAgICAgICAgICAgICBhLmNvbXBhcmVEb2N1bWVudFBv c2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oYnVwKSAmIDE2 CisgICAgICAgICAgICApKTsKKyAgICB9IDoKKyAgICBmdW5jdGlvbiAoYSwg YikgeworICAgICAgICBpZiAoYikgeworICAgICAgICAgICAgd2hpbGUgKGIp IHsKKyAgICAgICAgICAgICAgICBiID0gYi5wYXJlbnROb2RlOworICAgICAg ICAgICAgICAgIGlmIChiID09IGEpIHsKKyAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Owor ZnVuY3Rpb24gZ2V0U29tZURlZnMoZWwpIHsKKyAgICB2YXIgcCA9IChlbC5u b2RlLm93bmVyU1ZHRWxlbWVudCAmJiB3cmFwKGVsLm5vZGUub3duZXJTVkdF bGVtZW50KSkgfHwKKyAgICAgICAgICAgIChlbC5ub2RlLnBhcmVudE5vZGUg JiYgd3JhcChlbC5ub2RlLnBhcmVudE5vZGUpKSB8fAorICAgICAgICAgICAg U25hcC5zZWxlY3QoInN2ZyIpIHx8CisgICAgICAgICAgICBTbmFwKDAsIDAp LAorICAgICAgICBwZGVmcyA9IHAuc2VsZWN0KCJkZWZzIiksCisgICAgICAg IGRlZnMgID0gcGRlZnMgPT0gbnVsbCA/IGZhbHNlIDogcGRlZnMubm9kZTsK KyAgICBpZiAoIWRlZnMpIHsKKyAgICAgICAgZGVmcyA9IG1ha2UoImRlZnMi LCBwLm5vZGUpLm5vZGU7CisgICAgfQorICAgIHJldHVybiBkZWZzOworfQor ZnVuY3Rpb24gZ2V0U29tZVNWRyhlbCkgeworICAgIHJldHVybiBlbC5ub2Rl Lm93bmVyU1ZHRWxlbWVudCAmJiB3cmFwKGVsLm5vZGUub3duZXJTVkdFbGVt ZW50KSB8fCBTbmFwLnNlbGVjdCgic3ZnIik7Cit9CitTbmFwLl8uZ2V0U29t ZURlZnMgPSBnZXRTb21lRGVmczsKK1NuYXAuXy5nZXRTb21lU1ZHID0gZ2V0 U29tZVNWRzsKK2Z1bmN0aW9uIHVuaXQycHgoZWwsIG5hbWUsIHZhbHVlKSB7 CisgICAgdmFyIHN2ZyA9IGdldFNvbWVTVkcoZWwpLm5vZGUsCisgICAgICAg IG91dCA9IHt9LAorICAgICAgICBtZ3IgPSBzdmcucXVlcnlTZWxlY3Rvcigi LnN2Zy0tLW1nciIpOworICAgIGlmICghbWdyKSB7CisgICAgICAgIG1nciA9 ICQoInJlY3QiKTsKKyAgICAgICAgJChtZ3IsIHt4OiAtOWU5LCB5OiAtOWU5 LCB3aWR0aDogMTAsIGhlaWdodDogMTAsICJjbGFzcyI6ICJzdmctLS1tZ3Ii LCBmaWxsOiAibm9uZSJ9KTsKKyAgICAgICAgc3ZnLmFwcGVuZENoaWxkKG1n cik7CisgICAgfQorICAgIGZ1bmN0aW9uIGdldFcodmFsKSB7CisgICAgICAg IGlmICh2YWwgPT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIEU7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKHZhbCA9PSArdmFsKSB7CisgICAgICAg ICAgICByZXR1cm4gdmFsOworICAgICAgICB9CisgICAgICAgICQobWdyLCB7 d2lkdGg6IHZhbH0pOworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0 dXJuIG1nci5nZXRCQm94KCkud2lkdGg7CisgICAgICAgIH0gY2F0Y2ggKGUp IHsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQor ICAgIGZ1bmN0aW9uIGdldEgodmFsKSB7CisgICAgICAgIGlmICh2YWwgPT0g bnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIEU7CisgICAgICAgIH0KKyAg ICAgICAgaWYgKHZhbCA9PSArdmFsKSB7CisgICAgICAgICAgICByZXR1cm4g dmFsOworICAgICAgICB9CisgICAgICAgICQobWdyLCB7aGVpZ2h0OiB2YWx9 KTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBtZ3IuZ2V0 QkJveCgpLmhlaWdodDsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAg ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rp b24gc2V0KG5hbSwgZikgeworICAgICAgICBpZiAobmFtZSA9PSBudWxsKSB7 CisgICAgICAgICAgICBvdXRbbmFtXSA9IGYoZWwuYXR0cihuYW0pIHx8IDAp OworICAgICAgICB9IGVsc2UgaWYgKG5hbSA9PSBuYW1lKSB7CisgICAgICAg ICAgICBvdXQgPSBmKHZhbHVlID09IG51bGwgPyBlbC5hdHRyKG5hbSkgfHwg MCA6IHZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBzd2l0Y2ggKGVs LnR5cGUpIHsKKyAgICAgICAgY2FzZSAicmVjdCI6CisgICAgICAgICAgICBz ZXQoInJ4IiwgZ2V0Vyk7CisgICAgICAgICAgICBzZXQoInJ5IiwgZ2V0SCk7 CisgICAgICAgIGNhc2UgImltYWdlIjoKKyAgICAgICAgICAgIHNldCgid2lk dGgiLCBnZXRXKTsKKyAgICAgICAgICAgIHNldCgiaGVpZ2h0IiwgZ2V0SCk7 CisgICAgICAgIGNhc2UgInRleHQiOgorICAgICAgICAgICAgc2V0KCJ4Iiwg Z2V0Vyk7CisgICAgICAgICAgICBzZXQoInkiLCBnZXRIKTsKKyAgICAgICAg YnJlYWs7CisgICAgICAgIGNhc2UgImNpcmNsZSI6CisgICAgICAgICAgICBz ZXQoImN4IiwgZ2V0Vyk7CisgICAgICAgICAgICBzZXQoImN5IiwgZ2V0SCk7 CisgICAgICAgICAgICBzZXQoInIiLCBnZXRXKTsKKyAgICAgICAgYnJlYWs7 CisgICAgICAgIGNhc2UgImVsbGlwc2UiOgorICAgICAgICAgICAgc2V0KCJj eCIsIGdldFcpOworICAgICAgICAgICAgc2V0KCJjeSIsIGdldEgpOworICAg ICAgICAgICAgc2V0KCJyeCIsIGdldFcpOworICAgICAgICAgICAgc2V0KCJy eSIsIGdldEgpOworICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAibGlu ZSI6CisgICAgICAgICAgICBzZXQoIngxIiwgZ2V0Vyk7CisgICAgICAgICAg ICBzZXQoIngyIiwgZ2V0Vyk7CisgICAgICAgICAgICBzZXQoInkxIiwgZ2V0 SCk7CisgICAgICAgICAgICBzZXQoInkyIiwgZ2V0SCk7CisgICAgICAgIGJy ZWFrOworICAgICAgICBjYXNlICJtYXJrZXIiOgorICAgICAgICAgICAgc2V0 KCJyZWZYIiwgZ2V0Vyk7CisgICAgICAgICAgICBzZXQoIm1hcmtlcldpZHRo IiwgZ2V0Vyk7CisgICAgICAgICAgICBzZXQoInJlZlkiLCBnZXRIKTsKKyAg ICAgICAgICAgIHNldCgibWFya2VySGVpZ2h0IiwgZ2V0SCk7CisgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlICJyYWRpYWxHcmFkaWVudCI6CisgICAg ICAgICAgICBzZXQoImZ4IiwgZ2V0Vyk7CisgICAgICAgICAgICBzZXQoImZ5 IiwgZ2V0SCk7CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJ0c3Bh biI6CisgICAgICAgICAgICBzZXQoImR4IiwgZ2V0Vyk7CisgICAgICAgICAg ICBzZXQoImR5IiwgZ2V0SCk7CisgICAgICAgIGJyZWFrOworICAgICAgICBk ZWZhdWx0OgorICAgICAgICAgICAgc2V0KG5hbWUsIGdldFcpOworICAgIH0K KyAgICBzdmcucmVtb3ZlQ2hpbGQobWdyKTsKKyAgICByZXR1cm4gb3V0Owor fQorLypcCisgKiBTbmFwLnNlbGVjdAorIFsgbWV0aG9kIF0KKyAqKgorICog V3JhcHMgYSBET00gZWxlbWVudCBzcGVjaWZpZWQgYnkgQ1NTIHNlbGVjdG9y IGFzIEBFbGVtZW50CisgLSBxdWVyeSAoc3RyaW5nKSBDU1Mgc2VsZWN0b3Ig b2YgdGhlIGVsZW1lbnQKKyA9IChFbGVtZW50KSB0aGUgY3VycmVudCBlbGVt ZW50CitcKi8KK1NuYXAuc2VsZWN0ID0gZnVuY3Rpb24gKHF1ZXJ5KSB7Cisg ICAgcXVlcnkgPSBTdHIocXVlcnkpLnJlcGxhY2UoLyhbXlxcXSk6L2csICIk MVxcOiIpOworICAgIHJldHVybiB3cmFwKGdsb2IuZG9jLnF1ZXJ5U2VsZWN0 b3IocXVlcnkpKTsKK307CisvKlwKKyAqIFNuYXAuc2VsZWN0QWxsCisgWyBt ZXRob2QgXQorICoqCisgKiBXcmFwcyBET00gZWxlbWVudHMgc3BlY2lmaWVk IGJ5IENTUyBzZWxlY3RvciBhcyBzZXQgb3IgYXJyYXkgb2YgQEVsZW1lbnQK KyAtIHF1ZXJ5IChzdHJpbmcpIENTUyBzZWxlY3RvciBvZiB0aGUgZWxlbWVu dAorID0gKEVsZW1lbnQpIHRoZSBjdXJyZW50IGVsZW1lbnQKK1wqLworU25h cC5zZWxlY3RBbGwgPSBmdW5jdGlvbiAocXVlcnkpIHsKKyAgICB2YXIgbm9k ZWxpc3QgPSBnbG9iLmRvYy5xdWVyeVNlbGVjdG9yQWxsKHF1ZXJ5KSwKKyAg ICAgICAgc2V0ID0gKFNuYXAuc2V0IHx8IEFycmF5KSgpOworICAgIGZvciAo dmFyIGkgPSAwOyBpIDwgbm9kZWxpc3QubGVuZ3RoOyBpKyspIHsKKyAgICAg ICAgc2V0LnB1c2god3JhcChub2RlbGlzdFtpXSkpOworICAgIH0KKyAgICBy ZXR1cm4gc2V0OworfTsKKworZnVuY3Rpb24gYWRkMmdyb3VwKGxpc3QpIHsK KyAgICBpZiAoIWlzKGxpc3QsICJhcnJheSIpKSB7CisgICAgICAgIGxpc3Qg PSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwor ICAgIH0KKyAgICB2YXIgaSA9IDAsCisgICAgICAgIGogPSAwLAorICAgICAg ICBub2RlID0gdGhpcy5ub2RlOworICAgIHdoaWxlICh0aGlzW2ldKSBkZWxl dGUgdGhpc1tpKytdOworICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0 aDsgaSsrKSB7CisgICAgICAgIGlmIChsaXN0W2ldLnR5cGUgPT0gInNldCIp IHsKKyAgICAgICAgICAgIGxpc3RbaV0uZm9yRWFjaChmdW5jdGlvbiAoZWwp IHsKKyAgICAgICAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKGVsLm5vZGUp OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICBub2RlLmFwcGVuZENoaWxkKGxpc3RbaV0ubm9kZSk7CisgICAgICAg IH0KKyAgICB9CisgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5jaGlsZE5vZGVz OworICAgIGZvciAoaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykg eworICAgICAgICB0aGlzW2orK10gPSB3cmFwKGNoaWxkcmVuW2ldKTsKKyAg ICB9CisgICAgcmV0dXJuIHRoaXM7Cit9CisvLyBIdWIgZ2FyYmFnZSBjb2xs ZWN0b3IgZXZlcnkgMTBzCitzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7Cisg ICAgZm9yICh2YXIga2V5IGluIGh1YikgaWYgKGh1YltoYXNdKGtleSkpIHsK KyAgICAgICAgdmFyIGVsID0gaHViW2tleV0sCisgICAgICAgICAgICBub2Rl ID0gZWwubm9kZTsKKyAgICAgICAgaWYgKGVsLnR5cGUgIT0gInN2ZyIgJiYg IW5vZGUub3duZXJTVkdFbGVtZW50IHx8IGVsLnR5cGUgPT0gInN2ZyIgJiYg KCFub2RlLnBhcmVudE5vZGUgfHwgIm93bmVyU1ZHRWxlbWVudCIgaW4gbm9k ZS5wYXJlbnROb2RlICYmICFub2RlLm93bmVyU1ZHRWxlbWVudCkpIHsKKyAg ICAgICAgICAgIGRlbGV0ZSBodWJba2V5XTsKKyAgICAgICAgfQorICAgIH0K K30sIDFlNCk7CitmdW5jdGlvbiBFbGVtZW50KGVsKSB7CisgICAgaWYgKGVs LnNuYXAgaW4gaHViKSB7CisgICAgICAgIHJldHVybiBodWJbZWwuc25hcF07 CisgICAgfQorICAgIHZhciBzdmc7CisgICAgdHJ5IHsKKyAgICAgICAgc3Zn ID0gZWwub3duZXJTVkdFbGVtZW50OworICAgIH0gY2F0Y2goZSkge30KKyAg ICAvKlwKKyAgICAgKiBFbGVtZW50Lm5vZGUKKyAgICAgWyBwcm9wZXJ0eSAo b2JqZWN0KSBdCisgICAgICoqCisgICAgICogR2l2ZXMgeW91IGEgcmVmZXJl bmNlIHRvIHRoZSBET00gb2JqZWN0LCBzbyB5b3UgY2FuIGFzc2lnbiBldmVu dCBoYW5kbGVycyBvciBqdXN0IG1lc3MgYXJvdW5kLgorICAgICA+IFVzYWdl CisgICAgIHwgLy8gZHJhdyBhIGNpcmNsZSBhdCBjb29yZGluYXRlIDEwLDEw IHdpdGggcmFkaXVzIG9mIDEwCisgICAgIHwgdmFyIGMgPSBwYXBlci5jaXJj bGUoMTAsIDEwLCAxMCk7CisgICAgIHwgYy5ub2RlLm9uY2xpY2sgPSBmdW5j dGlvbiAoKSB7CisgICAgIHwgICAgIGMuYXR0cigiZmlsbCIsICJyZWQiKTsK KyAgICAgfCB9OworICAgIFwqLworICAgIHRoaXMubm9kZSA9IGVsOworICAg IGlmIChzdmcpIHsKKyAgICAgICAgdGhpcy5wYXBlciA9IG5ldyBQYXBlcihz dmcpOworICAgIH0KKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnR5cGUKKyAg ICAgWyBwcm9wZXJ0eSAoc3RyaW5nKSBdCisgICAgICoqCisgICAgICogU1ZH IHRhZyBuYW1lIG9mIHRoZSBnaXZlbiBlbGVtZW50LgorICAgIFwqLworICAg IHRoaXMudHlwZSA9IGVsLnRhZ05hbWUgfHwgZWwubm9kZU5hbWU7CisgICAg dmFyIGlkID0gdGhpcy5pZCA9IElEKHRoaXMpOworICAgIHRoaXMuYW5pbXMg PSB7fTsKKyAgICB0aGlzLl8gPSB7CisgICAgICAgIHRyYW5zZm9ybTogW10K KyAgICB9OworICAgIGVsLnNuYXAgPSBpZDsKKyAgICBodWJbaWRdID0gdGhp czsKKyAgICBpZiAodGhpcy50eXBlID09ICJnIikgeworICAgICAgICB0aGlz LmFkZCA9IGFkZDJncm91cDsKKyAgICB9CisgICAgaWYgKHRoaXMudHlwZSBp biB7ZzogMSwgbWFzazogMSwgcGF0dGVybjogMSwgc3ltYm9sOiAxfSkgewor ICAgICAgICBmb3IgKHZhciBtZXRob2QgaW4gUGFwZXIucHJvdG90eXBlKSBp ZiAoUGFwZXIucHJvdG90eXBlW2hhc10obWV0aG9kKSkgeworICAgICAgICAg ICAgdGhpc1ttZXRob2RdID0gUGFwZXIucHJvdG90eXBlW21ldGhvZF07Cisg ICAgICAgIH0KKyAgICB9Cit9CisgICAvKlwKKyAgICAgKiBFbGVtZW50LmF0 dHIKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEdldHMgb3Ig c2V0cyBnaXZlbiBhdHRyaWJ1dGVzIG9mIHRoZSBlbGVtZW50LgorICAgICAq KgorICAgICAtIHBhcmFtcyAob2JqZWN0KSBjb250YWlucyBrZXktdmFsdWUg cGFpcnMgb2YgYXR0cmlidXRlcyB5b3Ugd2FudCB0byBzZXQKKyAgICAgKiBv cgorICAgICAtIHBhcmFtIChzdHJpbmcpIG5hbWUgb2YgdGhlIGF0dHJpYnV0 ZQorICAgICA9IChFbGVtZW50KSB0aGUgY3VycmVudCBlbGVtZW50CisgICAg ICogb3IKKyAgICAgPSAoc3RyaW5nKSB2YWx1ZSBvZiBhdHRyaWJ1dGUKKyAg ICAgPiBVc2FnZQorICAgICB8IGVsLmF0dHIoeworICAgICB8ICAgICBmaWxs OiAiI2ZjMCIsCisgICAgIHwgICAgIHN0cm9rZTogIiMwMDAiLAorICAgICB8 ICAgICBzdHJva2VXaWR0aDogMiwgLy8gQ2FtZWxDYXNlLi4uCisgICAgIHwg ICAgICJmaWxsLW9wYWNpdHkiOiAwLjUsIC8vIG9yIGRhc2gtc2VwYXJhdGVk IG5hbWVzCisgICAgIHwgICAgIHdpZHRoOiAiKj0yIiAvLyBwcmVmaXhlZCB2 YWx1ZXMKKyAgICAgfCB9KTsKKyAgICAgfCBjb25zb2xlLmxvZyhlbC5hdHRy KCJmaWxsIikpOyAvLyAjZmMwCisgICAgICogUHJlZml4ZWQgdmFsdWVzIGlu IGZvcm1hdCBgIis9MTAiYCBzdXBwb3J0ZWQuIEFsbCBmb3VyIG9wZXJhdGlv bnMKKyAgICAgKiAoYCtgLCBgLWAsIGAqYCBhbmQgYC9gKSBjb3VsZCBiZSB1 c2VkLiBPcHRpb25hbGx5IHlvdSBjYW4gdXNlIHVuaXRzIGZvciBgK2AKKyAg ICAgKiBhbmQgYC1gOiBgIis9MmVtImAuCisgICAgXCovCisgICAgRWxlbWVu dC5wcm90b3R5cGUuYXR0ciA9IGZ1bmN0aW9uIChwYXJhbXMsIHZhbHVlKSB7 CisgICAgICAgIHZhciBlbCA9IHRoaXMsCisgICAgICAgICAgICBub2RlID0g ZWwubm9kZTsKKyAgICAgICAgaWYgKCFwYXJhbXMpIHsKKyAgICAgICAgICAg IGlmIChub2RlLm5vZGVUeXBlICE9IDEpIHsKKyAgICAgICAgICAgICAgICBy ZXR1cm4geworICAgICAgICAgICAgICAgICAgICB0ZXh0OiBub2RlLm5vZGVW YWx1ZQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAg ICAgICAgICB2YXIgYXR0ciA9IG5vZGUuYXR0cmlidXRlcywKKyAgICAgICAg ICAgICAgICBvdXQgPSB7fTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw LCBpaSA9IGF0dHIubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAg ICAgICAgIG91dFthdHRyW2ldLm5vZGVOYW1lXSA9IGF0dHJbaV0ubm9kZVZh bHVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG91dDsK KyAgICAgICAgfQorICAgICAgICBpZiAoaXMocGFyYW1zLCAic3RyaW5nIikp IHsKKyAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewor ICAgICAgICAgICAgICAgIHZhciBqc29uID0ge307CisgICAgICAgICAgICAg ICAganNvbltwYXJhbXNdID0gdmFsdWU7CisgICAgICAgICAgICAgICAgcGFy YW1zID0ganNvbjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgcmV0dXJuIGV2ZSgic25hcC51dGlsLmdldGF0dHIuIiArIHBhcmFt cywgZWwpLmZpcnN0RGVmaW5lZCgpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIGZvciAodmFyIGF0dCBpbiBwYXJhbXMpIHsKKyAgICAg ICAgICAgIGlmIChwYXJhbXNbaGFzXShhdHQpKSB7CisgICAgICAgICAgICAg ICAgZXZlKCJzbmFwLnV0aWwuYXR0ci4iICsgYXR0LCBlbCwgcGFyYW1zW2F0 dF0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVy biBlbDsKKyAgICB9OworLypcCisgKiBTbmFwLnBhcnNlCisgWyBtZXRob2Qg XQorICoqCisgKiBQYXJzZXMgU1ZHIGZyYWdtZW50IGFuZCBjb252ZXJ0cyBp dCBpbnRvIGEgQEZyYWdtZW50CisgKioKKyAtIHN2ZyAoc3RyaW5nKSBTVkcg c3RyaW5nCisgPSAoRnJhZ21lbnQpIHRoZSBARnJhZ21lbnQKK1wqLworU25h cC5wYXJzZSA9IGZ1bmN0aW9uIChzdmcpIHsKKyAgICB2YXIgZiA9IGdsb2Iu ZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSwKKyAgICAgICAgZnVsbCA9 IHRydWUsCisgICAgICAgIGRpdiA9IGdsb2IuZG9jLmNyZWF0ZUVsZW1lbnQo ImRpdiIpOworICAgIHN2ZyA9IFN0cihzdmcpOworICAgIGlmICghc3ZnLm1h dGNoKC9eXHMqPFxzKnN2Zyg/OlxzfD4pLykpIHsKKyAgICAgICAgc3ZnID0g Ijxzdmc+IiArIHN2ZyArICI8L3N2Zz4iOworICAgICAgICBmdWxsID0gZmFs c2U7CisgICAgfQorICAgIGRpdi5pbm5lckhUTUwgPSBzdmc7CisgICAgc3Zn ID0gZGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzdmciKVswXTsKKyAgICBp ZiAoc3ZnKSB7CisgICAgICAgIGlmIChmdWxsKSB7CisgICAgICAgICAgICBm ID0gc3ZnOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgd2hpbGUg KHN2Zy5maXJzdENoaWxkKSB7CisgICAgICAgICAgICAgICAgZi5hcHBlbmRD aGlsZChzdmcuZmlyc3RDaGlsZCk7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9CisgICAgcmV0dXJuIG5ldyBGcmFnbWVudChmKTsKK307Citm dW5jdGlvbiBGcmFnbWVudChmcmFnKSB7CisgICAgdGhpcy5ub2RlID0gZnJh ZzsKK30KKy8qXAorICogU25hcC5mcmFnbWVudAorIFsgbWV0aG9kIF0KKyAq KgorICogQ3JlYXRlcyBhIERPTSBmcmFnbWVudCBmcm9tIGEgZ2l2ZW4gbGlz dCBvZiBlbGVtZW50cyBvciBzdHJpbmdzCisgKioKKyAtIHZhcmFyZ3MgKOKA pikgU1ZHIHN0cmluZworID0gKEZyYWdtZW50KSB0aGUgQEZyYWdtZW50Citc Ki8KK1NuYXAuZnJhZ21lbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIGFy Z3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDAp LAorICAgICAgICBmID0gZ2xvYi5kb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVu dCgpOworICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGFyZ3MubGVuZ3RoOyBp IDwgaWk7IGkrKykgeworICAgICAgICB2YXIgaXRlbSA9IGFyZ3NbaV07Cisg ICAgICAgIGlmIChpdGVtLm5vZGUgJiYgaXRlbS5ub2RlLm5vZGVUeXBlKSB7 CisgICAgICAgICAgICBmLmFwcGVuZENoaWxkKGl0ZW0ubm9kZSk7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKGl0ZW0ubm9kZVR5cGUpIHsKKyAgICAgICAg ICAgIGYuYXBwZW5kQ2hpbGQoaXRlbSk7CisgICAgICAgIH0KKyAgICAgICAg aWYgKHR5cGVvZiBpdGVtID09ICJzdHJpbmciKSB7CisgICAgICAgICAgICBm LmFwcGVuZENoaWxkKFNuYXAucGFyc2UoaXRlbSkubm9kZSk7CisgICAgICAg IH0KKyAgICB9CisgICAgcmV0dXJuIG5ldyBGcmFnbWVudChmKTsKK307CisK K2Z1bmN0aW9uIG1ha2UobmFtZSwgcGFyZW50KSB7CisgICAgdmFyIHJlcyA9 ICQobmFtZSk7CisgICAgcGFyZW50LmFwcGVuZENoaWxkKHJlcyk7CisgICAg dmFyIGVsID0gd3JhcChyZXMpOworICAgIHJldHVybiBlbDsKK30KK2Z1bmN0 aW9uIFBhcGVyKHcsIGgpIHsKKyAgICB2YXIgcmVzLAorICAgICAgICBkZXNj LAorICAgICAgICBkZWZzLAorICAgICAgICBwcm90byA9IFBhcGVyLnByb3Rv dHlwZTsKKyAgICBpZiAodyAmJiB3LnRhZ05hbWUgPT0gInN2ZyIpIHsKKyAg ICAgICAgaWYgKHcuc25hcCBpbiBodWIpIHsKKyAgICAgICAgICAgIHJldHVy biBodWJbdy5zbmFwXTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZG9jID0g dy5vd25lckRvY3VtZW50OworICAgICAgICByZXMgPSBuZXcgRWxlbWVudCh3 KTsKKyAgICAgICAgZGVzYyA9IHcuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImRl c2MiKVswXTsKKyAgICAgICAgZGVmcyA9IHcuZ2V0RWxlbWVudHNCeVRhZ05h bWUoImRlZnMiKVswXTsKKyAgICAgICAgaWYgKCFkZXNjKSB7CisgICAgICAg ICAgICBkZXNjID0gJCgiZGVzYyIpOworICAgICAgICAgICAgZGVzYy5hcHBl bmRDaGlsZChkb2MuY3JlYXRlVGV4dE5vZGUoIkNyZWF0ZWQgd2l0aCBTbmFw IikpOworICAgICAgICAgICAgcmVzLm5vZGUuYXBwZW5kQ2hpbGQoZGVzYyk7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFkZWZzKSB7CisgICAgICAgICAg ICBkZWZzID0gJCgiZGVmcyIpOworICAgICAgICAgICAgcmVzLm5vZGUuYXBw ZW5kQ2hpbGQoZGVmcyk7CisgICAgICAgIH0KKyAgICAgICAgcmVzLmRlZnMg PSBkZWZzOworICAgICAgICBmb3IgKHZhciBrZXkgaW4gcHJvdG8pIGlmIChw cm90b1toYXNdKGtleSkpIHsKKyAgICAgICAgICAgIHJlc1trZXldID0gcHJv dG9ba2V5XTsKKyAgICAgICAgfQorICAgICAgICByZXMucGFwZXIgPSByZXMu cm9vdCA9IHJlczsKKyAgICB9IGVsc2UgeworICAgICAgICByZXMgPSBtYWtl KCJzdmciLCBnbG9iLmRvYy5ib2R5KTsKKyAgICAgICAgJChyZXMubm9kZSwg eworICAgICAgICAgICAgaGVpZ2h0OiBoLAorICAgICAgICAgICAgdmVyc2lv bjogMS4xLAorICAgICAgICAgICAgd2lkdGg6IHcsCisgICAgICAgICAgICB4 bWxuczogeG1sbnMKKyAgICAgICAgfSk7CisgICAgfQorICAgIHJldHVybiBy ZXM7Cit9CitmdW5jdGlvbiB3cmFwKGRvbSkgeworICAgIGlmICghZG9tKSB7 CisgICAgICAgIHJldHVybiBkb207CisgICAgfQorICAgIGlmIChkb20gaW5z dGFuY2VvZiBFbGVtZW50IHx8IGRvbSBpbnN0YW5jZW9mIEZyYWdtZW50KSB7 CisgICAgICAgIHJldHVybiBkb207CisgICAgfQorICAgIGlmIChkb20udGFn TmFtZSAmJiBkb20udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJzdmciKSB7 CisgICAgICAgIHJldHVybiBuZXcgUGFwZXIoZG9tKTsKKyAgICB9CisgICAg aWYgKGRvbS50YWdOYW1lICYmIGRvbS50YWdOYW1lLnRvTG93ZXJDYXNlKCkg PT0gIm9iamVjdCIgJiYgZG9tLnR5cGUgPT0gImltYWdlL3N2Zyt4bWwiKSB7 CisgICAgICAgIHJldHVybiBuZXcgUGFwZXIoZG9tLmNvbnRlbnREb2N1bWVu dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic3ZnIilbMF0pOworICAgIH0KKyAg ICByZXR1cm4gbmV3IEVsZW1lbnQoZG9tKTsKK30KKworU25hcC5fLm1ha2Ug PSBtYWtlOworU25hcC5fLndyYXAgPSB3cmFwOworLypcCisgKiBQYXBlci5l bAorIFsgbWV0aG9kIF0KKyAqKgorICogQ3JlYXRlcyBhbiBlbGVtZW50IG9u IHBhcGVyIHdpdGggYSBnaXZlbiBuYW1lIGFuZCBubyBhdHRyaWJ1dGVzCisg KioKKyAtIG5hbWUgKHN0cmluZykgdGFnIG5hbWUKKyAtIGF0dHIgKG9iamVj dCkgYXR0cmlidXRlcworID0gKEVsZW1lbnQpIHRoZSBjdXJyZW50IGVsZW1l bnQKKyA+IFVzYWdlCisgfCB2YXIgYyA9IHBhcGVyLmNpcmNsZSgxMCwgMTAs IDEwKTsgLy8gaXMgdGhlIHNhbWUgYXMuLi4KKyB8IHZhciBjID0gcGFwZXIu ZWwoImNpcmNsZSIpLmF0dHIoeworIHwgICAgIGN4OiAxMCwKKyB8ICAgICBj eTogMTAsCisgfCAgICAgcjogMTAKKyB8IH0pOworIHwgLy8gYW5kIHRoZSBz YW1lIGFzCisgfCB2YXIgYyA9IHBhcGVyLmVsKCJjaXJjbGUiLCB7CisgfCAg ICAgY3g6IDEwLAorIHwgICAgIGN5OiAxMCwKKyB8ICAgICByOiAxMAorIHwg fSk7CitcKi8KK1BhcGVyLnByb3RvdHlwZS5lbCA9IGZ1bmN0aW9uIChuYW1l LCBhdHRyKSB7CisgICAgdmFyIGVsID0gbWFrZShuYW1lLCB0aGlzLm5vZGUp OworICAgIGF0dHIgJiYgZWwuYXR0cihhdHRyKTsKKyAgICByZXR1cm4gZWw7 Cit9OworLypcCisgKiBFbGVtZW50LmNoaWxkcmVuCisgWyBtZXRob2QgXQor ICoqCisgKiBSZXR1cm5zIGFycmF5IG9mIGFsbCB0aGUgY2hpbGRyZW4gb2Yg dGhlIGVsZW1lbnQuCisgPSAoYXJyYXkpIGFycmF5IG9mIEVsZW1lbnRzCitc Ki8KK0VsZW1lbnQucHJvdG90eXBlLmNoaWxkcmVuID0gZnVuY3Rpb24gKCkg eworICAgIHZhciBvdXQgPSBbXSwKKyAgICAgICAgY2ggPSB0aGlzLm5vZGUu Y2hpbGROb2RlczsKKyAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjaC5sZW5n dGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgIG91dFtpXSA9IFNuYXAoY2hb aV0pOworICAgIH0KKyAgICByZXR1cm4gb3V0OworfTsKK2Z1bmN0aW9uIGpz b25GaWxsZXIocm9vdCwgbykgeworICAgIGZvciAodmFyIGkgPSAwLCBpaSA9 IHJvb3QubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICB2YXIgaXRl bSA9IHsKKyAgICAgICAgICAgICAgICB0eXBlOiByb290W2ldLnR5cGUsCisg ICAgICAgICAgICAgICAgYXR0cjogcm9vdFtpXS5hdHRyKCkKKyAgICAgICAg ICAgIH0sCisgICAgICAgICAgICBjaGlsZHJlbiA9IHJvb3RbaV0uY2hpbGRy ZW4oKTsKKyAgICAgICAgby5wdXNoKGl0ZW0pOworICAgICAgICBpZiAoY2hp bGRyZW4ubGVuZ3RoKSB7CisgICAgICAgICAgICBqc29uRmlsbGVyKGNoaWxk cmVuLCBpdGVtLmNoaWxkTm9kZXMgPSBbXSk7CisgICAgICAgIH0KKyAgICB9 Cit9CisvKlwKKyAqIEVsZW1lbnQudG9KU09OCisgWyBtZXRob2QgXQorICoq CisgKiBSZXR1cm5zIG9iamVjdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgZ2l2 ZW4gZWxlbWVudCBhbmQgYWxsIGl0cyBjaGlsZHJlbi4KKyA9IChvYmplY3Qp IGluIGZvcm1hdAorIG8geworIG8gICAgIHR5cGUgKHN0cmluZykgdGhpcy50 eXBlLAorIG8gICAgIGF0dHIgKG9iamVjdCkgYXR0cmlidXRlcyBtYXAsCisg byAgICAgY2hpbGROb2RlcyAoYXJyYXkpIG9wdGlvbmFsIGFycmF5IG9mIGNo aWxkcmVuIGluIHRoZSBzYW1lIGZvcm1hdAorIG8gfQorXCovCitFbGVtZW50 LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7CisgICAgdmFyIG91 dCA9IFtdOworICAgIGpzb25GaWxsZXIoW3RoaXNdLCBvdXQpOworICAgIHJl dHVybiBvdXRbMF07Cit9OworLy8gZGVmYXVsdAorZXZlLm9uKCJzbmFwLnV0 aWwuZ2V0YXR0ciIsIGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgYXR0ID0gZXZl Lm50KCk7CisgICAgYXR0ID0gYXR0LnN1YnN0cmluZyhhdHQubGFzdEluZGV4 T2YoIi4iKSArIDEpOworICAgIHZhciBjc3MgPSBhdHQucmVwbGFjZSgvW0Et Wl0vZywgZnVuY3Rpb24gKGxldHRlcikgeworICAgICAgICByZXR1cm4gIi0i ICsgbGV0dGVyLnRvTG93ZXJDYXNlKCk7CisgICAgfSk7CisgICAgaWYgKGNz c0F0dHJbaGFzXShjc3MpKSB7CisgICAgICAgIHJldHVybiB0aGlzLm5vZGUu b3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRo aXMubm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShjc3MpOworICAgIH0g ZWxzZSB7CisgICAgICAgIHJldHVybiAkKHRoaXMubm9kZSwgYXR0KTsKKyAg ICB9Cit9KTsKK3ZhciBjc3NBdHRyID0geworICAgICJhbGlnbm1lbnQtYmFz ZWxpbmUiOiAwLAorICAgICJiYXNlbGluZS1zaGlmdCI6IDAsCisgICAgImNs aXAiOiAwLAorICAgICJjbGlwLXBhdGgiOiAwLAorICAgICJjbGlwLXJ1bGUi OiAwLAorICAgICJjb2xvciI6IDAsCisgICAgImNvbG9yLWludGVycG9sYXRp b24iOiAwLAorICAgICJjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMiOiAw LAorICAgICJjb2xvci1wcm9maWxlIjogMCwKKyAgICAiY29sb3ItcmVuZGVy aW5nIjogMCwKKyAgICAiY3Vyc29yIjogMCwKKyAgICAiZGlyZWN0aW9uIjog MCwKKyAgICAiZGlzcGxheSI6IDAsCisgICAgImRvbWluYW50LWJhc2VsaW5l IjogMCwKKyAgICAiZW5hYmxlLWJhY2tncm91bmQiOiAwLAorICAgICJmaWxs IjogMCwKKyAgICAiZmlsbC1vcGFjaXR5IjogMCwKKyAgICAiZmlsbC1ydWxl IjogMCwKKyAgICAiZmlsdGVyIjogMCwKKyAgICAiZmxvb2QtY29sb3IiOiAw LAorICAgICJmbG9vZC1vcGFjaXR5IjogMCwKKyAgICAiZm9udCI6IDAsCisg ICAgImZvbnQtZmFtaWx5IjogMCwKKyAgICAiZm9udC1zaXplIjogMCwKKyAg ICAiZm9udC1zaXplLWFkanVzdCI6IDAsCisgICAgImZvbnQtc3RyZXRjaCI6 IDAsCisgICAgImZvbnQtc3R5bGUiOiAwLAorICAgICJmb250LXZhcmlhbnQi OiAwLAorICAgICJmb250LXdlaWdodCI6IDAsCisgICAgImdseXBoLW9yaWVu dGF0aW9uLWhvcml6b250YWwiOiAwLAorICAgICJnbHlwaC1vcmllbnRhdGlv bi12ZXJ0aWNhbCI6IDAsCisgICAgImltYWdlLXJlbmRlcmluZyI6IDAsCisg ICAgImtlcm5pbmciOiAwLAorICAgICJsZXR0ZXItc3BhY2luZyI6IDAsCisg ICAgImxpZ2h0aW5nLWNvbG9yIjogMCwKKyAgICAibWFya2VyIjogMCwKKyAg ICAibWFya2VyLWVuZCI6IDAsCisgICAgIm1hcmtlci1taWQiOiAwLAorICAg ICJtYXJrZXItc3RhcnQiOiAwLAorICAgICJtYXNrIjogMCwKKyAgICAib3Bh Y2l0eSI6IDAsCisgICAgIm92ZXJmbG93IjogMCwKKyAgICAicG9pbnRlci1l dmVudHMiOiAwLAorICAgICJzaGFwZS1yZW5kZXJpbmciOiAwLAorICAgICJz dG9wLWNvbG9yIjogMCwKKyAgICAic3RvcC1vcGFjaXR5IjogMCwKKyAgICAi c3Ryb2tlIjogMCwKKyAgICAic3Ryb2tlLWRhc2hhcnJheSI6IDAsCisgICAg InN0cm9rZS1kYXNob2Zmc2V0IjogMCwKKyAgICAic3Ryb2tlLWxpbmVjYXAi OiAwLAorICAgICJzdHJva2UtbGluZWpvaW4iOiAwLAorICAgICJzdHJva2Ut bWl0ZXJsaW1pdCI6IDAsCisgICAgInN0cm9rZS1vcGFjaXR5IjogMCwKKyAg ICAic3Ryb2tlLXdpZHRoIjogMCwKKyAgICAidGV4dC1hbmNob3IiOiAwLAor ICAgICJ0ZXh0LWRlY29yYXRpb24iOiAwLAorICAgICJ0ZXh0LXJlbmRlcmlu ZyI6IDAsCisgICAgInVuaWNvZGUtYmlkaSI6IDAsCisgICAgInZpc2liaWxp dHkiOiAwLAorICAgICJ3b3JkLXNwYWNpbmciOiAwLAorICAgICJ3cml0aW5n LW1vZGUiOiAwCit9OworCitldmUub24oInNuYXAudXRpbC5hdHRyIiwgZnVu Y3Rpb24gKHZhbHVlKSB7CisgICAgdmFyIGF0dCA9IGV2ZS5udCgpLAorICAg ICAgICBhdHRyID0ge307CisgICAgYXR0ID0gYXR0LnN1YnN0cmluZyhhdHQu bGFzdEluZGV4T2YoIi4iKSArIDEpOworICAgIGF0dHJbYXR0XSA9IHZhbHVl OworICAgIHZhciBzdHlsZSA9IGF0dC5yZXBsYWNlKC8tKFx3KS9naSwgZnVu Y3Rpb24gKGFsbCwgbGV0dGVyKSB7CisgICAgICAgICAgICByZXR1cm4gbGV0 dGVyLnRvVXBwZXJDYXNlKCk7CisgICAgICAgIH0pLAorICAgICAgICBjc3Mg PSBhdHQucmVwbGFjZSgvW0EtWl0vZywgZnVuY3Rpb24gKGxldHRlcikgewor ICAgICAgICAgICAgcmV0dXJuICItIiArIGxldHRlci50b0xvd2VyQ2FzZSgp OworICAgICAgICB9KTsKKyAgICBpZiAoY3NzQXR0cltoYXNdKGNzcykpIHsK KyAgICAgICAgdGhpcy5ub2RlLnN0eWxlW3N0eWxlXSA9IHZhbHVlID09IG51 bGwgPyBFIDogdmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgJCh0aGlz Lm5vZGUsIGF0dHIpOworICAgIH0KK30pOworKGZ1bmN0aW9uIChwcm90bykg e30oUGFwZXIucHJvdG90eXBlKSk7CisKKy8vIHNpbXBsZSBhamF4CisvKlwK KyAqIFNuYXAuYWpheAorIFsgbWV0aG9kIF0KKyAqKgorICogU2ltcGxlIGlt cGxlbWVudGF0aW9uIG9mIEFqYXgKKyAqKgorIC0gdXJsIChzdHJpbmcpIFVS TAorIC0gcG9zdERhdGEgKG9iamVjdHxzdHJpbmcpIGRhdGEgZm9yIHBvc3Qg cmVxdWVzdAorIC0gY2FsbGJhY2sgKGZ1bmN0aW9uKSBjYWxsYmFjaworIC0g c2NvcGUgKG9iamVjdCkgI29wdGlvbmFsIHNjb3BlIG9mIGNhbGxiYWNrCisg KiBvcgorIC0gdXJsIChzdHJpbmcpIFVSTAorIC0gY2FsbGJhY2sgKGZ1bmN0 aW9uKSBjYWxsYmFjaworIC0gc2NvcGUgKG9iamVjdCkgI29wdGlvbmFsIHNj b3BlIG9mIGNhbGxiYWNrCisgPSAoWE1MSHR0cFJlcXVlc3QpIHRoZSBYTUxI dHRwUmVxdWVzdCBvYmplY3QsIGp1c3QgaW4gY2FzZQorXCovCitTbmFwLmFq YXggPSBmdW5jdGlvbiAodXJsLCBwb3N0RGF0YSwgY2FsbGJhY2ssIHNjb3Bl KXsKKyAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0LAorICAgICAg ICBpZCA9IElEKCk7CisgICAgaWYgKHJlcSkgeworICAgICAgICBpZiAoaXMo cG9zdERhdGEsICJmdW5jdGlvbiIpKSB7CisgICAgICAgICAgICBzY29wZSA9 IGNhbGxiYWNrOworICAgICAgICAgICAgY2FsbGJhY2sgPSBwb3N0RGF0YTsK KyAgICAgICAgICAgIHBvc3REYXRhID0gbnVsbDsKKyAgICAgICAgfSBlbHNl IGlmIChpcyhwb3N0RGF0YSwgIm9iamVjdCIpKSB7CisgICAgICAgICAgICB2 YXIgcGQgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBwb3N0 RGF0YSkgaWYgKHBvc3REYXRhLmhhc093blByb3BlcnR5KGtleSkpIHsKKyAg ICAgICAgICAgICAgICBwZC5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChrZXkp ICsgIj0iICsgZW5jb2RlVVJJQ29tcG9uZW50KHBvc3REYXRhW2tleV0pKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBvc3REYXRhID0gcGQuam9p bigiJiIpOworICAgICAgICB9CisgICAgICAgIHJlcS5vcGVuKChwb3N0RGF0 YSA/ICJQT1NUIiA6ICJHRVQiKSwgdXJsLCB0cnVlKTsKKyAgICAgICAgaWYg KHBvc3REYXRhKSB7CisgICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRl cigiWC1SZXF1ZXN0ZWQtV2l0aCIsICJYTUxIdHRwUmVxdWVzdCIpOworICAg ICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtdHlwZSIs ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKTsKKyAgICAg ICAgfQorICAgICAgICBpZiAoY2FsbGJhY2spIHsKKyAgICAgICAgICAgIGV2 ZS5vbmNlKCJzbmFwLmFqYXguIiArIGlkICsgIi4wIiwgY2FsbGJhY2spOwor ICAgICAgICAgICAgZXZlLm9uY2UoInNuYXAuYWpheC4iICsgaWQgKyAiLjIw MCIsIGNhbGxiYWNrKTsKKyAgICAgICAgICAgIGV2ZS5vbmNlKCJzbmFwLmFq YXguIiArIGlkICsgIi4zMDQiLCBjYWxsYmFjayk7CisgICAgICAgIH0KKyAg ICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkgewor ICAgICAgICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlICE9IDQpIHJldHVybjsK KyAgICAgICAgICAgIGV2ZSgic25hcC5hamF4LiIgKyBpZCArICIuIiArIHJl cS5zdGF0dXMsIHNjb3BlLCByZXEpOworICAgICAgICB9OworICAgICAgICBp ZiAocmVxLnJlYWR5U3RhdGUgPT0gNCkgeworICAgICAgICAgICAgcmV0dXJu IHJlcTsKKyAgICAgICAgfQorICAgICAgICByZXEuc2VuZChwb3N0RGF0YSk7 CisgICAgICAgIHJldHVybiByZXE7CisgICAgfQorfTsKKy8qXAorICogU25h cC5sb2FkCisgWyBtZXRob2QgXQorICoqCisgKiBMb2FkcyBleHRlcm5hbCBT VkcgZmlsZSBhcyBhIEBGcmFnbWVudCAoc2VlIEBTbmFwLmFqYXggZm9yIG1v cmUgYWR2YW5jZWQgQUpBWCkKKyAqKgorIC0gdXJsIChzdHJpbmcpIFVSTAor IC0gY2FsbGJhY2sgKGZ1bmN0aW9uKSBjYWxsYmFjaworIC0gc2NvcGUgKG9i amVjdCkgI29wdGlvbmFsIHNjb3BlIG9mIGNhbGxiYWNrCitcKi8KK1NuYXAu bG9hZCA9IGZ1bmN0aW9uICh1cmwsIGNhbGxiYWNrLCBzY29wZSkgeworICAg IFNuYXAuYWpheCh1cmwsIGZ1bmN0aW9uIChyZXEpIHsKKyAgICAgICAgdmFy IGYgPSBTbmFwLnBhcnNlKHJlcS5yZXNwb25zZVRleHQpOworICAgICAgICBz Y29wZSA/IGNhbGxiYWNrLmNhbGwoc2NvcGUsIGYpIDogY2FsbGJhY2soZik7 CisgICAgfSk7Cit9OwordmFyIGdldE9mZnNldCA9IGZ1bmN0aW9uIChlbGVt KSB7CisgICAgdmFyIGJveCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0 KCksCisgICAgICAgIGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCwKKyAgICAg ICAgYm9keSA9IGRvYy5ib2R5LAorICAgICAgICBkb2NFbGVtID0gZG9jLmRv Y3VtZW50RWxlbWVudCwKKyAgICAgICAgY2xpZW50VG9wID0gZG9jRWxlbS5j bGllbnRUb3AgfHwgYm9keS5jbGllbnRUb3AgfHwgMCwgY2xpZW50TGVmdCA9 IGRvY0VsZW0uY2xpZW50TGVmdCB8fCBib2R5LmNsaWVudExlZnQgfHwgMCwK KyAgICAgICAgdG9wICA9IGJveC50b3AgICsgKGcud2luLnBhZ2VZT2Zmc2V0 IHx8IGRvY0VsZW0uc2Nyb2xsVG9wIHx8IGJvZHkuc2Nyb2xsVG9wICkgLSBj bGllbnRUb3AsCisgICAgICAgIGxlZnQgPSBib3gubGVmdCArIChnLndpbi5w YWdlWE9mZnNldCB8fCBkb2NFbGVtLnNjcm9sbExlZnQgfHwgYm9keS5zY3Jv bGxMZWZ0KSAtIGNsaWVudExlZnQ7CisgICAgcmV0dXJuIHsKKyAgICAgICAg eTogdG9wLAorICAgICAgICB4OiBsZWZ0CisgICAgfTsKK307CisvKlwKKyAq IFNuYXAuZ2V0RWxlbWVudEJ5UG9pbnQKKyBbIG1ldGhvZCBdCisgKioKKyAq IFJldHVybnMgeW91IHRvcG1vc3QgZWxlbWVudCB1bmRlciBnaXZlbiBwb2lu dC4KKyAqKgorID0gKG9iamVjdCkgU25hcCBlbGVtZW50IG9iamVjdAorIC0g eCAobnVtYmVyKSB4IGNvb3JkaW5hdGUgZnJvbSB0aGUgdG9wIGxlZnQgY29y bmVyIG9mIHRoZSB3aW5kb3cKKyAtIHkgKG51bWJlcikgeSBjb29yZGluYXRl IGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgd2luZG93CisgPiBV c2FnZQorIHwgU25hcC5nZXRFbGVtZW50QnlQb2ludChtb3VzZVgsIG1vdXNl WSkuYXR0cih7c3Ryb2tlOiAiI2YwMCJ9KTsKK1wqLworU25hcC5nZXRFbGVt ZW50QnlQb2ludCA9IGZ1bmN0aW9uICh4LCB5KSB7CisgICAgdmFyIHBhcGVy ID0gdGhpcywKKyAgICAgICAgc3ZnID0gcGFwZXIuY2FudmFzLAorICAgICAg ICB0YXJnZXQgPSBnbG9iLmRvYy5lbGVtZW50RnJvbVBvaW50KHgsIHkpOwor ICAgIGlmIChnbG9iLndpbi5vcGVyYSAmJiB0YXJnZXQudGFnTmFtZSA9PSAi c3ZnIikgeworICAgICAgICB2YXIgc28gPSBnZXRPZmZzZXQodGFyZ2V0KSwK KyAgICAgICAgICAgIHNyID0gdGFyZ2V0LmNyZWF0ZVNWR1JlY3QoKTsKKyAg ICAgICAgc3IueCA9IHggLSBzby54OworICAgICAgICBzci55ID0geSAtIHNv Lnk7CisgICAgICAgIHNyLndpZHRoID0gc3IuaGVpZ2h0ID0gMTsKKyAgICAg ICAgdmFyIGhpdHMgPSB0YXJnZXQuZ2V0SW50ZXJzZWN0aW9uTGlzdChzciwg bnVsbCk7CisgICAgICAgIGlmIChoaXRzLmxlbmd0aCkgeworICAgICAgICAg ICAgdGFyZ2V0ID0gaGl0c1toaXRzLmxlbmd0aCAtIDFdOworICAgICAgICB9 CisgICAgfQorICAgIGlmICghdGFyZ2V0KSB7CisgICAgICAgIHJldHVybiBu dWxsOworICAgIH0KKyAgICByZXR1cm4gd3JhcCh0YXJnZXQpOworfTsKKy8q XAorICogU25hcC5wbHVnaW4KKyBbIG1ldGhvZCBdCisgKioKKyAqIExldCB5 b3Ugd3JpdGUgcGx1Z2lucy4gWW91IHBhc3MgaW4gYSBmdW5jdGlvbiB3aXRo IGZpdmUgYXJndW1lbnRzLCBsaWtlIHRoaXM6CisgfCBTbmFwLnBsdWdpbihm dW5jdGlvbiAoU25hcCwgRWxlbWVudCwgUGFwZXIsIGdsb2JhbCwgRnJhZ21l bnQpIHsKKyB8ICAgICBTbmFwLm5ld21ldGhvZCA9IGZ1bmN0aW9uICgpIHt9 OworIHwgICAgIEVsZW1lbnQucHJvdG90eXBlLm5ld21ldGhvZCA9IGZ1bmN0 aW9uICgpIHt9OworIHwgICAgIFBhcGVyLnByb3RvdHlwZS5uZXdtZXRob2Qg PSBmdW5jdGlvbiAoKSB7fTsKKyB8IH0pOworICogSW5zaWRlIHRoZSBmdW5j dGlvbiB5b3UgaGF2ZSBhY2Nlc3MgdG8gYWxsIG1haW4gb2JqZWN0cyAoYW5k IHRoZWlyCisgKiBwcm90b3R5cGVzKS4gVGhpcyBhbGxvdyB5b3UgdG8gZXh0 ZW5kIGFueXRoaW5nIHlvdSB3YW50LgorICoqCisgLSBmIChmdW5jdGlvbikg eW91ciBwbHVnaW4gYm9keQorXCovCitTbmFwLnBsdWdpbiA9IGZ1bmN0aW9u IChmKSB7CisgICAgZihTbmFwLCBFbGVtZW50LCBQYXBlciwgZ2xvYiwgRnJh Z21lbnQpOworfTsKK2dsb2Iud2luLlNuYXAgPSBTbmFwOworcmV0dXJuIFNu YXA7Cit9KHdpbmRvdyB8fCB0aGlzKSk7CisKKy8vIENvcHlyaWdodCAoYykg MjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExp Y2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBt YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0 aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0 aGUgTGljZW5zZSBhdAorLy8KKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9s aWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBi eSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29m dHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRp c3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdB UlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4 cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhl IHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQK Ky8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorU25hcC5wbHVn aW4oZnVuY3Rpb24gKFNuYXAsIEVsZW1lbnQsIFBhcGVyLCBnbG9iLCBGcmFn bWVudCkgeworICAgIHZhciBlbHByb3RvID0gRWxlbWVudC5wcm90b3R5cGUs CisgICAgICAgIGlzID0gU25hcC5pcywKKyAgICAgICAgU3RyID0gU3RyaW5n LAorICAgICAgICB1bml0MnB4ID0gU25hcC5fdW5pdDJweCwKKyAgICAgICAg JCA9IFNuYXAuXy4kLAorICAgICAgICBtYWtlID0gU25hcC5fLm1ha2UsCisg ICAgICAgIGdldFNvbWVEZWZzID0gU25hcC5fLmdldFNvbWVEZWZzLAorICAg ICAgICBoYXMgPSAiaGFzT3duUHJvcGVydHkiLAorICAgICAgICB3cmFwID0g U25hcC5fLndyYXA7CisgICAgLypcCisgICAgICogRWxlbWVudC5nZXRCQm94 CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIHRo ZSBib3VuZGluZyBib3ggZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIGVsZW1l bnQKKyAgICAgKioKKyAgICAgPSAob2JqZWN0KSBib3VuZGluZyBib3ggZGVz Y3JpcHRvcjoKKyAgICAgbyB7CisgICAgIG8gICAgIGN4OiAobnVtYmVyKSB4 IG9mIHRoZSBjZW50ZXIsCisgICAgIG8gICAgIGN5OiAobnVtYmVyKSB4IG9m IHRoZSBjZW50ZXIsCisgICAgIG8gICAgIGg6IChudW1iZXIpIGhlaWdodCwK KyAgICAgbyAgICAgaGVpZ2h0OiAobnVtYmVyKSBoZWlnaHQsCisgICAgIG8g ICAgIHBhdGg6IChzdHJpbmcpIHBhdGggY29tbWFuZCBmb3IgdGhlIGJveCwK KyAgICAgbyAgICAgcjA6IChudW1iZXIpIHJhZGl1cyBvZiBhIGNpcmNsZSB0 aGF0IGZ1bGx5IGVuY2xvc2VzIHRoZSBib3gsCisgICAgIG8gICAgIHIxOiAo bnVtYmVyKSByYWRpdXMgb2YgdGhlIHNtYWxsZXN0IGNpcmNsZSB0aGF0IGNh biBiZSBlbmNsb3NlZCwKKyAgICAgbyAgICAgcjI6IChudW1iZXIpIHJhZGl1 cyBvZiB0aGUgbGFyZ2VzdCBjaXJjbGUgdGhhdCBjYW4gYmUgZW5jbG9zZWQs CisgICAgIG8gICAgIHZiOiAoc3RyaW5nKSBib3ggYXMgYSB2aWV3Ym94IGNv bW1hbmQsCisgICAgIG8gICAgIHc6IChudW1iZXIpIHdpZHRoLAorICAgICBv ICAgICB3aWR0aDogKG51bWJlcikgd2lkdGgsCisgICAgIG8gICAgIHgyOiAo bnVtYmVyKSB4IG9mIHRoZSByaWdodCBzaWRlLAorICAgICBvICAgICB4OiAo bnVtYmVyKSB4IG9mIHRoZSBsZWZ0IHNpZGUsCisgICAgIG8gICAgIHkyOiAo bnVtYmVyKSB5IG9mIHRoZSBib3R0b20gZWRnZSwKKyAgICAgbyAgICAgeTog KG51bWJlcikgeSBvZiB0aGUgdG9wIGVkZ2UKKyAgICAgbyB9CisgICAgXCov CisgICAgZWxwcm90by5nZXRCQm94ID0gZnVuY3Rpb24gKGlzV2l0aG91dFRy YW5zZm9ybSkgeworICAgICAgICBpZiAoIVNuYXAuTWF0cml4IHx8ICFTbmFw LnBhdGgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGUuZ2V0QkJv eCgpOworICAgICAgICB9CisgICAgICAgIHZhciBlbCA9IHRoaXMsCisgICAg ICAgICAgICBtID0gbmV3IFNuYXAuTWF0cml4OworICAgICAgICBpZiAoZWwu cmVtb3ZlZCkgeworICAgICAgICAgICAgcmV0dXJuIFNuYXAuXy5ib3goKTsK KyAgICAgICAgfQorICAgICAgICB3aGlsZSAoZWwudHlwZSA9PSAidXNlIikg eworICAgICAgICAgICAgaWYgKCFpc1dpdGhvdXRUcmFuc2Zvcm0pIHsKKyAg ICAgICAgICAgICAgICBtID0gbS5hZGQoZWwudHJhbnNmb3JtKCkubG9jYWxN YXRyaXgudHJhbnNsYXRlKGVsLmF0dHIoIngiKSB8fCAwLCBlbC5hdHRyKCJ5 IikgfHwgMCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGVs Lm9yaWdpbmFsKSB7CisgICAgICAgICAgICAgICAgZWwgPSBlbC5vcmlnaW5h bDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFy IGhyZWYgPSBlbC5hdHRyKCJ4bGluazpocmVmIik7CisgICAgICAgICAgICAg ICAgZWwgPSBlbC5vcmlnaW5hbCA9IGVsLm5vZGUub3duZXJEb2N1bWVudC5n ZXRFbGVtZW50QnlJZChocmVmLnN1YnN0cmluZyhocmVmLmluZGV4T2YoIiMi KSArIDEpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2 YXIgXyA9IGVsLl8sCisgICAgICAgICAgICBwYXRoZmluZGVyID0gU25hcC5w YXRoLmdldFtlbC50eXBlXSB8fCBTbmFwLnBhdGguZ2V0LmRlZmx0OworICAg ICAgICB0cnkgeworICAgICAgICAgICAgaWYgKGlzV2l0aG91dFRyYW5zZm9y bSkgeworICAgICAgICAgICAgICAgIF8uYmJveHd0ID0gcGF0aGZpbmRlciA/ IFNuYXAucGF0aC5nZXRCQm94KGVsLnJlYWxQYXRoID0gcGF0aGZpbmRlcihl bCkpIDogU25hcC5fLmJveChlbC5ub2RlLmdldEJCb3goKSk7CisgICAgICAg ICAgICAgICAgcmV0dXJuIFNuYXAuXy5ib3goXy5iYm94d3QpOworICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbC5yZWFsUGF0aCA9 IHBhdGhmaW5kZXIoZWwpOworICAgICAgICAgICAgICAgIGVsLm1hdHJpeCA9 IGVsLnRyYW5zZm9ybSgpLmxvY2FsTWF0cml4OworICAgICAgICAgICAgICAg IF8uYmJveCA9IFNuYXAucGF0aC5nZXRCQm94KFNuYXAucGF0aC5tYXAoZWwu cmVhbFBhdGgsIG0uYWRkKGVsLm1hdHJpeCkpKTsKKyAgICAgICAgICAgICAg ICByZXR1cm4gU25hcC5fLmJveChfLmJib3gpOworICAgICAgICAgICAgfQor ICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAvLyBGaXJlZm94 IGRvZXNu4oCZdCBnaXZlIHlvdSBiYm94IG9mIGhpZGRlbiBlbGVtZW50Cisg ICAgICAgICAgICByZXR1cm4gU25hcC5fLmJveCgpOworICAgICAgICB9Cisg ICAgfTsKKyAgICB2YXIgcHJvcFN0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAg ICAgICAgcmV0dXJuIHRoaXMuc3RyaW5nOworICAgIH07CisgICAgZnVuY3Rp b24gZXh0cmFjdFRyYW5zZm9ybShlbCwgdHN0cikgeworICAgICAgICBpZiAo dHN0ciA9PSBudWxsKSB7CisgICAgICAgICAgICB2YXIgZG9SZXR1cm4gPSB0 cnVlOworICAgICAgICAgICAgaWYgKGVsLnR5cGUgPT0gImxpbmVhckdyYWRp ZW50IiB8fCBlbC50eXBlID09ICJyYWRpYWxHcmFkaWVudCIpIHsKKyAgICAg ICAgICAgICAgICB0c3RyID0gZWwubm9kZS5nZXRBdHRyaWJ1dGUoImdyYWRp ZW50VHJhbnNmb3JtIik7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGVsLnR5 cGUgPT0gInBhdHRlcm4iKSB7CisgICAgICAgICAgICAgICAgdHN0ciA9IGVs Lm5vZGUuZ2V0QXR0cmlidXRlKCJwYXR0ZXJuVHJhbnNmb3JtIik7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHRzdHIgPSBlbC5u b2RlLmdldEF0dHJpYnV0ZSgidHJhbnNmb3JtIik7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBpZiAoIXRzdHIpIHsKKyAgICAgICAgICAgICAgICBy ZXR1cm4gbmV3IFNuYXAuTWF0cml4OworICAgICAgICAgICAgfQorICAgICAg ICAgICAgdHN0ciA9IFNuYXAuXy5zdmdUcmFuc2Zvcm0yc3RyaW5nKHRzdHIp OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCFTbmFwLl8u cmdUcmFuc2Zvcm0udGVzdCh0c3RyKSkgeworICAgICAgICAgICAgICAgIHRz dHIgPSBTbmFwLl8uc3ZnVHJhbnNmb3JtMnN0cmluZyh0c3RyKTsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdHN0ciA9IFN0cih0 c3RyKS5yZXBsYWNlKC9cLnszfXxcdTIwMjYvZywgZWwuXy50cmFuc2Zvcm0g fHwgIiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzKHRz dHIsICJhcnJheSIpKSB7CisgICAgICAgICAgICAgICAgdHN0ciA9IFNuYXAu cGF0aCA/IFNuYXAucGF0aC50b1N0cmluZy5jYWxsKHRzdHIpIDogU3RyKHRz dHIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWwuXy50cmFuc2Zv cm0gPSB0c3RyOworICAgICAgICB9CisgICAgICAgIHZhciBtID0gU25hcC5f LnRyYW5zZm9ybTJtYXRyaXgodHN0ciwgZWwuZ2V0QkJveCgxKSk7CisgICAg ICAgIGlmIChkb1JldHVybikgeworICAgICAgICAgICAgcmV0dXJuIG07Cisg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbC5tYXRyaXggPSBtOwor ICAgICAgICB9CisgICAgfQorICAgIC8qXAorICAgICAqIEVsZW1lbnQudHJh bnNmb3JtCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBHZXRz IG9yIHNldHMgdHJhbnNmb3JtYXRpb24gb2YgdGhlIGVsZW1lbnQKKyAgICAg KioKKyAgICAgLSB0c3RyIChzdHJpbmcpIHRyYW5zZm9ybSBzdHJpbmcgaW4g U25hcCBvciBTVkcgZm9ybWF0CisgICAgID0gKEVsZW1lbnQpIHRoZSBjdXJy ZW50IGVsZW1lbnQKKyAgICAgKiBvcgorICAgICA9IChvYmplY3QpIHRyYW5z Zm9ybWF0aW9uIGRlc2NyaXB0b3I6CisgICAgIG8geworICAgICBvICAgICBz dHJpbmcgKHN0cmluZykgdHJhbnNmb3JtIHN0cmluZywKKyAgICAgbyAgICAg Z2xvYmFsTWF0cml4IChNYXRyaXgpIG1hdHJpeCBvZiBhbGwgdHJhbnNmb3Jt YXRpb25zIGFwcGxpZWQgdG8gZWxlbWVudCBvciBpdHMgcGFyZW50cywKKyAg ICAgbyAgICAgbG9jYWxNYXRyaXggKE1hdHJpeCkgbWF0cml4IG9mIHRyYW5z Zm9ybWF0aW9ucyBhcHBsaWVkIG9ubHkgdG8gdGhlIGVsZW1lbnQsCisgICAg IG8gICAgIGRpZmZNYXRyaXggKE1hdHJpeCkgbWF0cml4IG9mIGRpZmZlcmVu Y2UgYmV0d2VlbiBnbG9iYWwgYW5kIGxvY2FsIHRyYW5zZm9ybWF0aW9ucywK KyAgICAgbyAgICAgZ2xvYmFsIChzdHJpbmcpIGdsb2JhbCB0cmFuc2Zvcm1h dGlvbiBhcyBzdHJpbmcsCisgICAgIG8gICAgIGxvY2FsIChzdHJpbmcpIGxv Y2FsIHRyYW5zZm9ybWF0aW9uIGFzIHN0cmluZywKKyAgICAgbyAgICAgdG9T dHJpbmcgKGZ1bmN0aW9uKSByZXR1cm5zIGBzdHJpbmdgIHByb3BlcnR5Cisg ICAgIG8gfQorICAgIFwqLworICAgIGVscHJvdG8udHJhbnNmb3JtID0gZnVu Y3Rpb24gKHRzdHIpIHsKKyAgICAgICAgdmFyIF8gPSB0aGlzLl87CisgICAg ICAgIGlmICh0c3RyID09IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBwYXBh ID0gdGhpcywKKyAgICAgICAgICAgICAgICBnbG9iYWwgPSBuZXcgU25hcC5N YXRyaXgodGhpcy5ub2RlLmdldENUTSgpKSwKKyAgICAgICAgICAgICAgICBs b2NhbCA9IGV4dHJhY3RUcmFuc2Zvcm0odGhpcyksCisgICAgICAgICAgICAg ICAgbXMgPSBbbG9jYWxdLAorICAgICAgICAgICAgICAgIG0gPSBuZXcgU25h cC5NYXRyaXgsCisgICAgICAgICAgICAgICAgaSwKKyAgICAgICAgICAgICAg ICBsb2NhbFN0cmluZyA9IGxvY2FsLnRvVHJhbnNmb3JtU3RyaW5nKCksCisg ICAgICAgICAgICAgICAgc3RyaW5nID0gU3RyKGxvY2FsKSA9PSBTdHIodGhp cy5tYXRyaXgpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHIo Xy50cmFuc2Zvcm0pIDogbG9jYWxTdHJpbmc7CisgICAgICAgICAgICB3aGls ZSAocGFwYS50eXBlICE9ICJzdmciICYmIChwYXBhID0gcGFwYS5wYXJlbnQo KSkpIHsKKyAgICAgICAgICAgICAgICBtcy5wdXNoKGV4dHJhY3RUcmFuc2Zv cm0ocGFwYSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaSA9IG1z Lmxlbmd0aDsKKyAgICAgICAgICAgIHdoaWxlIChpLS0pIHsKKyAgICAgICAg ICAgICAgICBtLmFkZChtc1tpXSk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIHN0cmluZzogc3RyaW5n LAorICAgICAgICAgICAgICAgIGdsb2JhbE1hdHJpeDogZ2xvYmFsLAorICAg ICAgICAgICAgICAgIHRvdGFsTWF0cml4OiBtLAorICAgICAgICAgICAgICAg IGxvY2FsTWF0cml4OiBsb2NhbCwKKyAgICAgICAgICAgICAgICBkaWZmTWF0 cml4OiBnbG9iYWwuY2xvbmUoKS5hZGQobG9jYWwuaW52ZXJ0KCkpLAorICAg ICAgICAgICAgICAgIGdsb2JhbDogZ2xvYmFsLnRvVHJhbnNmb3JtU3RyaW5n KCksCisgICAgICAgICAgICAgICAgdG90YWw6IG0udG9UcmFuc2Zvcm1TdHJp bmcoKSwKKyAgICAgICAgICAgICAgICBsb2NhbDogbG9jYWxTdHJpbmcsCisg ICAgICAgICAgICAgICAgdG9TdHJpbmc6IHByb3BTdHJpbmcKKyAgICAgICAg ICAgIH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRzdHIgaW5zdGFuY2Vv ZiBTbmFwLk1hdHJpeCkgeworICAgICAgICAgICAgdGhpcy5tYXRyaXggPSB0 c3RyOworICAgICAgICAgICAgdGhpcy5fLnRyYW5zZm9ybSA9IHRzdHIudG9U cmFuc2Zvcm1TdHJpbmcoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIGV4dHJhY3RUcmFuc2Zvcm0odGhpcywgdHN0cik7CisgICAgICAgIH0K KworICAgICAgICBpZiAodGhpcy5ub2RlKSB7CisgICAgICAgICAgICBpZiAo dGhpcy50eXBlID09ICJsaW5lYXJHcmFkaWVudCIgfHwgdGhpcy50eXBlID09 ICJyYWRpYWxHcmFkaWVudCIpIHsKKyAgICAgICAgICAgICAgICAkKHRoaXMu bm9kZSwge2dyYWRpZW50VHJhbnNmb3JtOiB0aGlzLm1hdHJpeH0pOworICAg ICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnR5cGUgPT0gInBhdHRlcm4iKSB7 CisgICAgICAgICAgICAgICAgJCh0aGlzLm5vZGUsIHtwYXR0ZXJuVHJhbnNm b3JtOiB0aGlzLm1hdHJpeH0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICAkKHRoaXMubm9kZSwge3RyYW5zZm9ybTogdGhpcy5t YXRyaXh9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg IHJldHVybiB0aGlzOworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVu dC5wYXJlbnQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJl dHVybnMgdGhlIGVsZW1lbnQncyBwYXJlbnQKKyAgICAgKioKKyAgICAgPSAo RWxlbWVudCkgdGhlIHBhcmVudCBlbGVtZW50CisgICAgXCovCisgICAgZWxw cm90by5wYXJlbnQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB3 cmFwKHRoaXMubm9kZS5wYXJlbnROb2RlKTsKKyAgICB9OworICAgIC8qXAor ICAgICAqIEVsZW1lbnQuYXBwZW5kCisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBBcHBlbmRzIHRoZSBnaXZlbiBlbGVtZW50IHRvIGN1cnJl bnQgb25lCisgICAgICoqCisgICAgIC0gZWwgKEVsZW1lbnR8U2V0KSBlbGVt ZW50IHRvIGFwcGVuZAorICAgICA9IChFbGVtZW50KSB0aGUgcGFyZW50IGVs ZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmFkZAor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogU2VlIEBFbGVtZW50 LmFwcGVuZAorICAgIFwqLworICAgIGVscHJvdG8uYXBwZW5kID0gZWxwcm90 by5hZGQgPSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgaWYgKGVsKSB7Cisg ICAgICAgICAgICBpZiAoZWwudHlwZSA9PSAic2V0IikgeworICAgICAgICAg ICAgICAgIHZhciBpdCA9IHRoaXM7CisgICAgICAgICAgICAgICAgZWwuZm9y RWFjaChmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAgICAgICAgICAgaXQu YWRkKGVsKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAg ICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVs ID0gd3JhcChlbCk7CisgICAgICAgICAgICB0aGlzLm5vZGUuYXBwZW5kQ2hp bGQoZWwubm9kZSk7CisgICAgICAgICAgICBlbC5wYXBlciA9IHRoaXMucGFw ZXI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK KyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmFwcGVuZFRvCisgICAgIFsgbWV0 aG9kIF0KKyAgICAgKioKKyAgICAgKiBBcHBlbmRzIHRoZSBjdXJyZW50IGVs ZW1lbnQgdG8gdGhlIGdpdmVuIG9uZQorICAgICAqKgorICAgICAtIGVsIChF bGVtZW50KSBwYXJlbnQgZWxlbWVudCB0byBhcHBlbmQgdG8KKyAgICAgPSAo RWxlbWVudCkgdGhlIGNoaWxkIGVsZW1lbnQKKyAgICBcKi8KKyAgICBlbHBy b3RvLmFwcGVuZFRvID0gZnVuY3Rpb24gKGVsKSB7CisgICAgICAgIGlmIChl bCkgeworICAgICAgICAgICAgZWwgPSB3cmFwKGVsKTsKKyAgICAgICAgICAg IGVsLmFwcGVuZCh0aGlzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g dGhpczsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQucHJlcGVu ZAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUHJlcGVuZHMg dGhlIGdpdmVuIGVsZW1lbnQgdG8gdGhlIGN1cnJlbnQgb25lCisgICAgICoq CisgICAgIC0gZWwgKEVsZW1lbnQpIGVsZW1lbnQgdG8gcHJlcGVuZAorICAg ICA9IChFbGVtZW50KSB0aGUgcGFyZW50IGVsZW1lbnQKKyAgICBcKi8KKyAg ICBlbHByb3RvLnByZXBlbmQgPSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAg aWYgKGVsKSB7CisgICAgICAgICAgICBpZiAoZWwudHlwZSA9PSAic2V0Iikg eworICAgICAgICAgICAgICAgIHZhciBpdCA9IHRoaXMsCisgICAgICAgICAg ICAgICAgICAgIGZpcnN0OworICAgICAgICAgICAgICAgIGVsLmZvckVhY2go ZnVuY3Rpb24gKGVsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmaXJz dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QuYWZ0ZXIoZWwp OworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICAgICAgaXQucHJlcGVuZChlbCk7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBlbDsKKyAgICAg ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsID0gd3JhcChlbCk7Cisg ICAgICAgICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50KCk7CisgICAgICAg ICAgICB0aGlzLm5vZGUuaW5zZXJ0QmVmb3JlKGVsLm5vZGUsIHRoaXMubm9k ZS5maXJzdENoaWxkKTsKKyAgICAgICAgICAgIHRoaXMuYWRkICYmIHRoaXMu YWRkKCk7CisgICAgICAgICAgICBlbC5wYXBlciA9IHRoaXMucGFwZXI7Cisg ICAgICAgICAgICB0aGlzLnBhcmVudCgpICYmIHRoaXMucGFyZW50KCkuYWRk KCk7CisgICAgICAgICAgICBwYXJlbnQgJiYgcGFyZW50LmFkZCgpOworICAg ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLypc CisgICAgICogRWxlbWVudC5wcmVwZW5kVG8KKyAgICAgWyBtZXRob2QgXQor ICAgICAqKgorICAgICAqIFByZXBlbmRzIHRoZSBjdXJyZW50IGVsZW1lbnQg dG8gdGhlIGdpdmVuIG9uZQorICAgICAqKgorICAgICAtIGVsIChFbGVtZW50 KSBwYXJlbnQgZWxlbWVudCB0byBwcmVwZW5kIHRvCisgICAgID0gKEVsZW1l bnQpIHRoZSBjaGlsZCBlbGVtZW50CisgICAgXCovCisgICAgZWxwcm90by5w cmVwZW5kVG8gPSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgZWwgPSB3cmFw KGVsKTsKKyAgICAgICAgZWwucHJlcGVuZCh0aGlzKTsKKyAgICAgICAgcmV0 dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmJl Zm9yZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogSW5zZXJ0 cyBnaXZlbiBlbGVtZW50IGJlZm9yZSB0aGUgY3VycmVudCBvbmUKKyAgICAg KioKKyAgICAgLSBlbCAoRWxlbWVudCkgZWxlbWVudCB0byBpbnNlcnQKKyAg ICAgPSAoRWxlbWVudCkgdGhlIHBhcmVudCBlbGVtZW50CisgICAgXCovCisg ICAgZWxwcm90by5iZWZvcmUgPSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAg aWYgKGVsLnR5cGUgPT0gInNldCIpIHsKKyAgICAgICAgICAgIHZhciBpdCA9 IHRoaXM7CisgICAgICAgICAgICBlbC5mb3JFYWNoKGZ1bmN0aW9uIChlbCkg eworICAgICAgICAgICAgICAgIHZhciBwYXJlbnQgPSBlbC5wYXJlbnQoKTsK KyAgICAgICAgICAgICAgICBpdC5ub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVm b3JlKGVsLm5vZGUsIGl0Lm5vZGUpOworICAgICAgICAgICAgICAgIHBhcmVu dCAmJiBwYXJlbnQuYWRkKCk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg ICAgIHRoaXMucGFyZW50KCkuYWRkKCk7CisgICAgICAgICAgICByZXR1cm4g dGhpczsKKyAgICAgICAgfQorICAgICAgICBlbCA9IHdyYXAoZWwpOworICAg ICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50KCk7CisgICAgICAgIHRoaXMu bm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbC5ub2RlLCB0aGlzLm5v ZGUpOworICAgICAgICB0aGlzLnBhcmVudCgpICYmIHRoaXMucGFyZW50KCku YWRkKCk7CisgICAgICAgIHBhcmVudCAmJiBwYXJlbnQuYWRkKCk7CisgICAg ICAgIGVsLnBhcGVyID0gdGhpcy5wYXBlcjsKKyAgICAgICAgcmV0dXJuIHRo aXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmFmdGVyCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBJbnNlcnRzIGdpdmVu IGVsZW1lbnQgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lCisgICAgICoqCisgICAg IC0gZWwgKEVsZW1lbnQpIGVsZW1lbnQgdG8gaW5zZXJ0CisgICAgID0gKEVs ZW1lbnQpIHRoZSBwYXJlbnQgZWxlbWVudAorICAgIFwqLworICAgIGVscHJv dG8uYWZ0ZXIgPSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgZWwgPSB3cmFw KGVsKTsKKyAgICAgICAgdmFyIHBhcmVudCA9IGVsLnBhcmVudCgpOworICAg ICAgICBpZiAodGhpcy5ub2RlLm5leHRTaWJsaW5nKSB7CisgICAgICAgICAg ICB0aGlzLm5vZGUucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZWwubm9kZSwg dGhpcy5ub2RlLm5leHRTaWJsaW5nKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIHRoaXMubm9kZS5wYXJlbnROb2RlLmFwcGVuZENoaWxkKGVs Lm5vZGUpOworICAgICAgICB9CisgICAgICAgIHRoaXMucGFyZW50KCkgJiYg dGhpcy5wYXJlbnQoKS5hZGQoKTsKKyAgICAgICAgcGFyZW50ICYmIHBhcmVu dC5hZGQoKTsKKyAgICAgICAgZWwucGFwZXIgPSB0aGlzLnBhcGVyOworICAg ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVs ZW1lbnQuaW5zZXJ0QmVmb3JlCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioK KyAgICAgKiBJbnNlcnRzIHRoZSBlbGVtZW50IGFmdGVyIHRoZSBnaXZlbiBv bmUKKyAgICAgKioKKyAgICAgLSBlbCAoRWxlbWVudCkgZWxlbWVudCBuZXh0 IHRvIHdob20gaW5zZXJ0IHRvCisgICAgID0gKEVsZW1lbnQpIHRoZSBwYXJl bnQgZWxlbWVudAorICAgIFwqLworICAgIGVscHJvdG8uaW5zZXJ0QmVmb3Jl ID0gZnVuY3Rpb24gKGVsKSB7CisgICAgICAgIGVsID0gd3JhcChlbCk7Cisg ICAgICAgIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudCgpOworICAgICAgICBl bC5ub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHRoaXMubm9kZSwgZWwu bm9kZSk7CisgICAgICAgIHRoaXMucGFwZXIgPSBlbC5wYXBlcjsKKyAgICAg ICAgcGFyZW50ICYmIHBhcmVudC5hZGQoKTsKKyAgICAgICAgZWwucGFyZW50 KCkgJiYgZWwucGFyZW50KCkuYWRkKCk7CisgICAgICAgIHJldHVybiB0aGlz OworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC5pbnNlcnRBZnRl cgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogSW5zZXJ0cyB0 aGUgZWxlbWVudCBhZnRlciB0aGUgZ2l2ZW4gb25lCisgICAgICoqCisgICAg IC0gZWwgKEVsZW1lbnQpIGVsZW1lbnQgbmV4dCB0byB3aG9tIGluc2VydCB0 bworICAgICA9IChFbGVtZW50KSB0aGUgcGFyZW50IGVsZW1lbnQKKyAgICBc Ki8KKyAgICBlbHByb3RvLmluc2VydEFmdGVyID0gZnVuY3Rpb24gKGVsKSB7 CisgICAgICAgIGVsID0gd3JhcChlbCk7CisgICAgICAgIHZhciBwYXJlbnQg PSB0aGlzLnBhcmVudCgpOworICAgICAgICBlbC5ub2RlLnBhcmVudE5vZGUu aW5zZXJ0QmVmb3JlKHRoaXMubm9kZSwgZWwubm9kZS5uZXh0U2libGluZyk7 CisgICAgICAgIHRoaXMucGFwZXIgPSBlbC5wYXBlcjsKKyAgICAgICAgcGFy ZW50ICYmIHBhcmVudC5hZGQoKTsKKyAgICAgICAgZWwucGFyZW50KCkgJiYg ZWwucGFyZW50KCkuYWRkKCk7CisgICAgICAgIHJldHVybiB0aGlzOworICAg IH07CisgICAgLypcCisgICAgICogRWxlbWVudC5yZW1vdmUKKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIFJlbW92ZXMgZWxlbWVudCBmcm9t IHRoZSBET00KKyAgICAgPSAoRWxlbWVudCkgdGhlIGRldGFjaGVkIGVsZW1l bnQKKyAgICBcKi8KKyAgICBlbHByb3RvLnJlbW92ZSA9IGZ1bmN0aW9uICgp IHsKKyAgICAgICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50KCk7CisgICAg ICAgIHRoaXMubm9kZS5wYXJlbnROb2RlICYmIHRoaXMubm9kZS5wYXJlbnRO b2RlLnJlbW92ZUNoaWxkKHRoaXMubm9kZSk7CisgICAgICAgIGRlbGV0ZSB0 aGlzLnBhcGVyOworICAgICAgICB0aGlzLnJlbW92ZWQgPSB0cnVlOworICAg ICAgICBwYXJlbnQgJiYgcGFyZW50LmFkZCgpOworICAgICAgICByZXR1cm4g dGhpczsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQuc2VsZWN0 CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBHYXRoZXJzIHRo ZSBuZXN0ZWQgQEVsZW1lbnQgbWF0Y2hpbmcgdGhlIGdpdmVuIHNldCBvZiBD U1Mgc2VsZWN0b3JzCisgICAgICoqCisgICAgIC0gcXVlcnkgKHN0cmluZykg Q1NTIHNlbGVjdG9yCisgICAgID0gKEVsZW1lbnQpIHJlc3VsdCBvZiBxdWVy eSBzZWxlY3Rpb24KKyAgICBcKi8KKyAgICBlbHByb3RvLnNlbGVjdCA9IGZ1 bmN0aW9uIChxdWVyeSkgeworICAgICAgICByZXR1cm4gd3JhcCh0aGlzLm5v ZGUucXVlcnlTZWxlY3RvcihxdWVyeSkpOworICAgIH07CisgICAgLypcCisg ICAgICogRWxlbWVudC5zZWxlY3RBbGwKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIEdhdGhlcnMgbmVzdGVkIEBFbGVtZW50IG9iamVjdHMg bWF0Y2hpbmcgdGhlIGdpdmVuIHNldCBvZiBDU1Mgc2VsZWN0b3JzCisgICAg ICoqCisgICAgIC0gcXVlcnkgKHN0cmluZykgQ1NTIHNlbGVjdG9yCisgICAg ID0gKFNldHxhcnJheSkgcmVzdWx0IG9mIHF1ZXJ5IHNlbGVjdGlvbgorICAg IFwqLworICAgIGVscHJvdG8uc2VsZWN0QWxsID0gZnVuY3Rpb24gKHF1ZXJ5 KSB7CisgICAgICAgIHZhciBub2RlbGlzdCA9IHRoaXMubm9kZS5xdWVyeVNl bGVjdG9yQWxsKHF1ZXJ5KSwKKyAgICAgICAgICAgIHNldCA9IChTbmFwLnNl dCB8fCBBcnJheSkoKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBu b2RlbGlzdC5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgc2V0LnB1c2go d3JhcChub2RlbGlzdFtpXSkpOworICAgICAgICB9CisgICAgICAgIHJldHVy biBzZXQ7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmFzUFgK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgZ2l2 ZW4gYXR0cmlidXRlIG9mIHRoZSBlbGVtZW50IGFzIGEgYHB4YCB2YWx1ZSAo bm90ICUsIGVtLCBldGMuKQorICAgICAqKgorICAgICAtIGF0dHIgKHN0cmlu ZykgYXR0cmlidXRlIG5hbWUKKyAgICAgLSB2YWx1ZSAoc3RyaW5nKSAjb3B0 aW9uYWwgYXR0cmlidXRlIHZhbHVlCisgICAgID0gKEVsZW1lbnQpIHJlc3Vs dCBvZiBxdWVyeSBzZWxlY3Rpb24KKyAgICBcKi8KKyAgICBlbHByb3RvLmFz UFggPSBmdW5jdGlvbiAoYXR0ciwgdmFsdWUpIHsKKyAgICAgICAgaWYgKHZh bHVlID09IG51bGwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gdGhpcy5hdHRy KGF0dHIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiArdW5pdDJweCh0 aGlzLCBhdHRyLCB2YWx1ZSk7CisgICAgfTsKKyAgICAvLyBTSUVSUkEgRWxl bWVudC51c2UoKTogSSBzdWdnZXN0IGFkZGluZyBhIG5vdGUgYWJvdXQgaG93 IHRvIGFjY2VzcyB0aGUgb3JpZ2luYWwgZWxlbWVudCB0aGUgcmV0dXJuZWQg PHVzZT4gaW5zdGFudGlhdGVzLiBJdCdzIGEgcGFydCBvZiBTVkcgd2l0aCB3 aGljaCBvcmRpbmFyeSB3ZWIgZGV2ZWxvcGVycyBtYXkgYmUgbGVhc3QgZmFt aWxpYXIuCisgICAgLypcCisgICAgICogRWxlbWVudC51c2UKKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIENyZWF0ZXMgYSBgPHVzZT5gIGVs ZW1lbnQgbGlua2VkIHRvIHRoZSBjdXJyZW50IGVsZW1lbnQKKyAgICAgKioK KyAgICAgPSAoRWxlbWVudCkgdGhlIGA8dXNlPmAgZWxlbWVudAorICAgIFwq LworICAgIGVscHJvdG8udXNlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2 YXIgdXNlLAorICAgICAgICAgICAgaWQgPSB0aGlzLm5vZGUuaWQ7CisgICAg ICAgIGlmICghaWQpIHsKKyAgICAgICAgICAgIGlkID0gdGhpcy5pZDsKKyAg ICAgICAgICAgICQodGhpcy5ub2RlLCB7CisgICAgICAgICAgICAgICAgaWQ6 IGlkCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBpZiAo dGhpcy50eXBlID09ICJsaW5lYXJHcmFkaWVudCIgfHwgdGhpcy50eXBlID09 ICJyYWRpYWxHcmFkaWVudCIgfHwKKyAgICAgICAgICAgIHRoaXMudHlwZSA9 PSAicGF0dGVybiIpIHsKKyAgICAgICAgICAgIHVzZSA9IG1ha2UodGhpcy50 eXBlLCB0aGlzLm5vZGUucGFyZW50Tm9kZSk7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICB1c2UgPSBtYWtlKCJ1c2UiLCB0aGlzLm5vZGUucGFy ZW50Tm9kZSk7CisgICAgICAgIH0KKyAgICAgICAgJCh1c2Uubm9kZSwgewor ICAgICAgICAgICAgInhsaW5rOmhyZWYiOiAiIyIgKyBpZAorICAgICAgICB9 KTsKKyAgICAgICAgdXNlLm9yaWdpbmFsID0gdGhpczsKKyAgICAgICAgcmV0 dXJuIHVzZTsKKyAgICB9OworICAgIGZ1bmN0aW9uIGZpeGlkcyhlbCkgewor ICAgICAgICB2YXIgZWxzID0gZWwuc2VsZWN0QWxsKCIqIiksCisgICAgICAg ICAgICBpdCwKKyAgICAgICAgICAgIHVybCA9IC9eXHMqdXJsXCgoInwnfCko LiopXDFcKVxzKiQvLAorICAgICAgICAgICAgaWRzID0gW10sCisgICAgICAg ICAgICB1c2VzID0ge307CisgICAgICAgIGZ1bmN0aW9uIHVybHRlc3QoaXQs IG5hbWUpIHsKKyAgICAgICAgICAgIHZhciB2YWwgPSAkKGl0Lm5vZGUsIG5h bWUpOworICAgICAgICAgICAgdmFsID0gdmFsICYmIHZhbC5tYXRjaCh1cmwp OworICAgICAgICAgICAgdmFsID0gdmFsICYmIHZhbFsyXTsKKyAgICAgICAg ICAgIGlmICh2YWwgJiYgdmFsLmNoYXJBdCgpID09ICIjIikgeworICAgICAg ICAgICAgICAgIHZhbCA9IHZhbC5zdWJzdHJpbmcoMSk7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmICh2YWwpIHsKKyAgICAgICAgICAgICAg ICB1c2VzW3ZhbF0gPSAodXNlc1t2YWxdIHx8IFtdKS5jb25jYXQoZnVuY3Rp b24gKGlkKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBhdHRyID0ge307 CisgICAgICAgICAgICAgICAgICAgIGF0dHJbbmFtZV0gPSBVUkwoaWQpOwor ICAgICAgICAgICAgICAgICAgICAkKGl0Lm5vZGUsIGF0dHIpOworICAgICAg ICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIGZ1bmN0aW9uIGxpbmt0ZXN0KGl0KSB7CisgICAgICAgICAgICB2YXIg dmFsID0gJChpdC5ub2RlLCAieGxpbms6aHJlZiIpOworICAgICAgICAgICAg aWYgKHZhbCAmJiB2YWwuY2hhckF0KCkgPT0gIiMiKSB7CisgICAgICAgICAg ICAgICAgdmFsID0gdmFsLnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKHZhbCkgeworICAgICAgICAgICAgICAgIHVz ZXNbdmFsXSA9ICh1c2VzW3ZhbF0gfHwgW10pLmNvbmNhdChmdW5jdGlvbiAo aWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaXQuYXR0cigieGxpbms6aHJl ZiIsICIjIiArIGlkKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkg PSBlbHMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgaXQg PSBlbHNbaV07CisgICAgICAgICAgICB1cmx0ZXN0KGl0LCAiZmlsbCIpOwor ICAgICAgICAgICAgdXJsdGVzdChpdCwgInN0cm9rZSIpOworICAgICAgICAg ICAgdXJsdGVzdChpdCwgImZpbHRlciIpOworICAgICAgICAgICAgdXJsdGVz dChpdCwgIm1hc2siKTsKKyAgICAgICAgICAgIHVybHRlc3QoaXQsICJjbGlw LXBhdGgiKTsKKyAgICAgICAgICAgIGxpbmt0ZXN0KGl0KTsKKyAgICAgICAg ICAgIHZhciBvbGRpZCA9ICQoaXQubm9kZSwgImlkIik7CisgICAgICAgICAg ICBpZiAob2xkaWQpIHsKKyAgICAgICAgICAgICAgICAkKGl0Lm5vZGUsIHtp ZDogaXQuaWR9KTsKKyAgICAgICAgICAgICAgICBpZHMucHVzaCh7CisgICAg ICAgICAgICAgICAgICAgIG9sZDogb2xkaWQsCisgICAgICAgICAgICAgICAg ICAgIGlkOiBpdC5pZAorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAoaSA9IDAsIGlpID0gaWRz Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBmcyA9 IHVzZXNbaWRzW2ldLm9sZF07CisgICAgICAgICAgICBpZiAoZnMpIHsKKyAg ICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMCwgamogPSBmcy5sZW5ndGg7 IGogPCBqajsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgIGZzW2pdKGlk c1tpXS5pZCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorICAgIC8qXAorICAgICAqIEVsZW1lbnQuY2xv bmUKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIENyZWF0ZXMg YSBjbG9uZSBvZiB0aGUgZWxlbWVudCBhbmQgaW5zZXJ0cyBpdCBhZnRlciB0 aGUgZWxlbWVudAorICAgICAqKgorICAgICA9IChFbGVtZW50KSB0aGUgY2xv bmUKKyAgICBcKi8KKyAgICBlbHByb3RvLmNsb25lID0gZnVuY3Rpb24gKCkg eworICAgICAgICB2YXIgY2xvbmUgPSB3cmFwKHRoaXMubm9kZS5jbG9uZU5v ZGUodHJ1ZSkpOworICAgICAgICBpZiAoJChjbG9uZS5ub2RlLCAiaWQiKSkg eworICAgICAgICAgICAgJChjbG9uZS5ub2RlLCB7aWQ6IGNsb25lLmlkfSk7 CisgICAgICAgIH0KKyAgICAgICAgZml4aWRzKGNsb25lKTsKKyAgICAgICAg Y2xvbmUuaW5zZXJ0QWZ0ZXIodGhpcyk7CisgICAgICAgIHJldHVybiBjbG9u ZTsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQudG9EZWZzCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBNb3ZlcyBlbGVtZW50 IHRvIHRoZSBzaGFyZWQgYDxkZWZzPmAgYXJlYQorICAgICAqKgorICAgICA9 IChFbGVtZW50KSB0aGUgZWxlbWVudAorICAgIFwqLworICAgIGVscHJvdG8u dG9EZWZzID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgZGVmcyA9IGdl dFNvbWVEZWZzKHRoaXMpOworICAgICAgICBkZWZzLmFwcGVuZENoaWxkKHRo aXMubm9kZSk7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAg LypcCisgICAgICogRWxlbWVudC50b1BhdHRlcm4KKyAgICAgWyBtZXRob2Qg XQorICAgICAqKgorICAgICAqIENyZWF0ZXMgYSBgPHBhdHRlcm4+YCBlbGVt ZW50IGZyb20gdGhlIGN1cnJlbnQgZWxlbWVudAorICAgICAqKgorICAgICAq IFRvIGNyZWF0ZSBhIHBhdHRlcm4geW91IGhhdmUgdG8gc3BlY2lmeSB0aGUg cGF0dGVybiByZWN0OgorICAgICAtIHggKHN0cmluZ3xudW1iZXIpCisgICAg IC0geSAoc3RyaW5nfG51bWJlcikKKyAgICAgLSB3aWR0aCAoc3RyaW5nfG51 bWJlcikKKyAgICAgLSBoZWlnaHQgKHN0cmluZ3xudW1iZXIpCisgICAgID0g KEVsZW1lbnQpIHRoZSBgPHBhdHRlcm4+YCBlbGVtZW50CisgICAgICogWW91 IGNhbiB1c2UgcGF0dGVybiBsYXRlciBvbiBhcyBhbiBhcmd1bWVudCBmb3Ig YGZpbGxgIGF0dHJpYnV0ZToKKyAgICAgfCB2YXIgcCA9IHBhcGVyLnBhdGgo Ik0xMC01LTEwLDE1TTE1LDAsMCwxNU0wLTUtMjAsMTUiKS5hdHRyKHsKKyAg ICAgfCAgICAgICAgIGZpbGw6ICJub25lIiwKKyAgICAgfCAgICAgICAgIHN0 cm9rZTogIiNiYWRhNTUiLAorICAgICB8ICAgICAgICAgc3Ryb2tlV2lkdGg6 IDUKKyAgICAgfCAgICAgfSkucGF0dGVybigwLCAwLCAxMCwgMTApLAorICAg ICB8ICAgICBjID0gcGFwZXIuY2lyY2xlKDIwMCwgMjAwLCAxMDApOworICAg ICB8IGMuYXR0cih7CisgICAgIHwgICAgIGZpbGw6IHAKKyAgICAgfCB9KTsK KyAgICBcKi8KKyAgICBlbHByb3RvLnBhdHRlcm4gPSBlbHByb3RvLnRvUGF0 dGVybiA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7CisgICAg ICAgIHZhciBwID0gbWFrZSgicGF0dGVybiIsIGdldFNvbWVEZWZzKHRoaXMp KTsKKyAgICAgICAgaWYgKHggPT0gbnVsbCkgeworICAgICAgICAgICAgeCA9 IHRoaXMuZ2V0QkJveCgpOworICAgICAgICB9CisgICAgICAgIGlmIChpcyh4 LCAib2JqZWN0IikgJiYgIngiIGluIHgpIHsKKyAgICAgICAgICAgIHkgPSB4 Lnk7CisgICAgICAgICAgICB3aWR0aCA9IHgud2lkdGg7CisgICAgICAgICAg ICBoZWlnaHQgPSB4LmhlaWdodDsKKyAgICAgICAgICAgIHggPSB4Lng7Cisg ICAgICAgIH0KKyAgICAgICAgJChwLm5vZGUsIHsKKyAgICAgICAgICAgIHg6 IHgsCisgICAgICAgICAgICB5OiB5LAorICAgICAgICAgICAgd2lkdGg6IHdp ZHRoLAorICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsCisgICAgICAgICAg ICBwYXR0ZXJuVW5pdHM6ICJ1c2VyU3BhY2VPblVzZSIsCisgICAgICAgICAg ICBpZDogcC5pZCwKKyAgICAgICAgICAgIHZpZXdCb3g6IFt4LCB5LCB3aWR0 aCwgaGVpZ2h0XS5qb2luKCIgIikKKyAgICAgICAgfSk7CisgICAgICAgIHAu bm9kZS5hcHBlbmRDaGlsZCh0aGlzLm5vZGUpOworICAgICAgICByZXR1cm4g cDsKKyAgICB9OworLy8gU0lFUlJBIEVsZW1lbnQubWFya2VyKCk6IGNsYXJp Znkgd2hhdCBhIHJlZmVyZW5jZSBwb2ludCBpcy4gRS5nLiwgaGVscHMgeW91 IG9mZnNldCB0aGUgb2JqZWN0IGZyb20gaXRzIGVkZ2Ugc3VjaCBhcyB3aGVu IGNlbnRlcmluZyBpdCBvdmVyIGEgcGF0aC4KKy8vIFNJRVJSQSBFbGVtZW50 Lm1hcmtlcigpOiBJIHN1Z2dlc3QgdGhlIG1ldGhvZCBzaG91bGQgYWNjZXB0 IGRlZmF1bHQgcmVmZXJlbmNlIHBvaW50IHZhbHVlcy4gIFBlcmhhcHMgY2Vu dGVyZWQgd2l0aCAocmVmWCA9IHdpZHRoLzIpIGFuZCAocmVmWSA9IGhlaWdo dC8yKT8gQWxzbywgY291bGRuJ3QgaXQgYXNzdW1lIHRoZSBlbGVtZW50J3Mg Y3VycmVudCBfd2lkdGhfIGFuZCBfaGVpZ2h0Xz8gQW5kIHBsZWFzZSBzcGVj aWZ5IHdoYXQgX3hfIGFuZCBfeV8gbWVhbjogb2Zmc2V0cz8gSWYgc28sIGZy b20gd2hlcmU/ICBDb3VsZG4ndCB0aGV5IGFsc28gYmUgYXNzaWduZWQgZGVm YXVsdCB2YWx1ZXM/CisgICAgLypcCisgICAgICogRWxlbWVudC5tYXJrZXIK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIENyZWF0ZXMgYSBg PG1hcmtlcj5gIGVsZW1lbnQgZnJvbSB0aGUgY3VycmVudCBlbGVtZW50Cisg ICAgICoqCisgICAgICogVG8gY3JlYXRlIGEgbWFya2VyIHlvdSBoYXZlIHRv IHNwZWNpZnkgdGhlIGJvdW5kaW5nIHJlY3QgYW5kIHJlZmVyZW5jZSBwb2lu dDoKKyAgICAgLSB4IChudW1iZXIpCisgICAgIC0geSAobnVtYmVyKQorICAg ICAtIHdpZHRoIChudW1iZXIpCisgICAgIC0gaGVpZ2h0IChudW1iZXIpCisg ICAgIC0gcmVmWCAobnVtYmVyKQorICAgICAtIHJlZlkgKG51bWJlcikKKyAg ICAgPSAoRWxlbWVudCkgdGhlIGA8bWFya2VyPmAgZWxlbWVudAorICAgICAq IFlvdSBjYW4gc3BlY2lmeSB0aGUgbWFya2VyIGxhdGVyIGFzIGFuIGFyZ3Vt ZW50IGZvciBgbWFya2VyLXN0YXJ0YCwgYG1hcmtlci1lbmRgLCBgbWFya2Vy LW1pZGAsIGFuZCBgbWFya2VyYCBhdHRyaWJ1dGVzLiBUaGUgYG1hcmtlcmAg YXR0cmlidXRlIHBsYWNlcyB0aGUgbWFya2VyIGF0IGV2ZXJ5IHBvaW50IGFs b25nIHRoZSBwYXRoLCBhbmQgYG1hcmtlci1taWRgIHBsYWNlcyB0aGVtIGF0 IGV2ZXJ5IHBvaW50IGV4Y2VwdCB0aGUgc3RhcnQgYW5kIGVuZC4KKyAgICBc Ki8KKyAgICAvLyBUT0RPIGFkZCB1c2FnZSBmb3IgbWFya2VycworICAgIGVs cHJvdG8ubWFya2VyID0gZnVuY3Rpb24gKHgsIHksIHdpZHRoLCBoZWlnaHQs IHJlZlgsIHJlZlkpIHsKKyAgICAgICAgdmFyIHAgPSBtYWtlKCJtYXJrZXIi LCBnZXRTb21lRGVmcyh0aGlzKSk7CisgICAgICAgIGlmICh4ID09IG51bGwp IHsKKyAgICAgICAgICAgIHggPSB0aGlzLmdldEJCb3goKTsKKyAgICAgICAg fQorICAgICAgICBpZiAoaXMoeCwgIm9iamVjdCIpICYmICJ4IiBpbiB4KSB7 CisgICAgICAgICAgICB5ID0geC55OworICAgICAgICAgICAgd2lkdGggPSB4 LndpZHRoOworICAgICAgICAgICAgaGVpZ2h0ID0geC5oZWlnaHQ7CisgICAg ICAgICAgICByZWZYID0geC5yZWZYIHx8IHguY3g7CisgICAgICAgICAgICBy ZWZZID0geC5yZWZZIHx8IHguY3k7CisgICAgICAgICAgICB4ID0geC54Owor ICAgICAgICB9CisgICAgICAgICQocC5ub2RlLCB7CisgICAgICAgICAgICB2 aWV3Qm94OiBbeCwgeSwgd2lkdGgsIGhlaWdodF0uam9pbigiICIpLAorICAg ICAgICAgICAgbWFya2VyV2lkdGg6IHdpZHRoLAorICAgICAgICAgICAgbWFy a2VySGVpZ2h0OiBoZWlnaHQsCisgICAgICAgICAgICBvcmllbnQ6ICJhdXRv IiwKKyAgICAgICAgICAgIHJlZlg6IHJlZlggfHwgMCwKKyAgICAgICAgICAg IHJlZlk6IHJlZlkgfHwgMCwKKyAgICAgICAgICAgIGlkOiBwLmlkCisgICAg ICAgIH0pOworICAgICAgICBwLm5vZGUuYXBwZW5kQ2hpbGQodGhpcy5ub2Rl KTsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfTsKKyAgICAvLyBhbmltYXRp b24KKyAgICBmdW5jdGlvbiBzbGljZShmcm9tLCB0bywgZikgeworICAgICAg ICByZXR1cm4gZnVuY3Rpb24gKGFycikgeworICAgICAgICAgICAgdmFyIHJl cyA9IGFyci5zbGljZShmcm9tLCB0byk7CisgICAgICAgICAgICBpZiAocmVz Lmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgcmVzID0gcmVzWzBd OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGYgPyBmKHJl cykgOiByZXM7CisgICAgICAgIH07CisgICAgfQorICAgIHZhciBBbmltYXRp b24gPSBmdW5jdGlvbiAoYXR0ciwgbXMsIGVhc2luZywgY2FsbGJhY2spIHsK KyAgICAgICAgaWYgKHR5cGVvZiBlYXNpbmcgPT0gImZ1bmN0aW9uIiAmJiAh ZWFzaW5nLmxlbmd0aCkgeworICAgICAgICAgICAgY2FsbGJhY2sgPSBlYXNp bmc7CisgICAgICAgICAgICBlYXNpbmcgPSBtaW5hLmxpbmVhcjsKKyAgICAg ICAgfQorICAgICAgICB0aGlzLmF0dHIgPSBhdHRyOworICAgICAgICB0aGlz LmR1ciA9IG1zOworICAgICAgICBlYXNpbmcgJiYgKHRoaXMuZWFzaW5nID0g ZWFzaW5nKTsKKyAgICAgICAgY2FsbGJhY2sgJiYgKHRoaXMuY2FsbGJhY2sg PSBjYWxsYmFjayk7CisgICAgfTsKKyAgICBTbmFwLl8uQW5pbWF0aW9uID0g QW5pbWF0aW9uOworICAgIC8qXAorICAgICAqIFNuYXAuYW5pbWF0aW9uCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBDcmVhdGVzIGFuIGFu aW1hdGlvbiBvYmplY3QKKyAgICAgKioKKyAgICAgLSBhdHRyIChvYmplY3Qp IGF0dHJpYnV0ZXMgb2YgZmluYWwgZGVzdGluYXRpb24KKyAgICAgLSBkdXJh dGlvbiAobnVtYmVyKSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uLCBpbiBt aWxsaXNlY29uZHMKKyAgICAgLSBlYXNpbmcgKGZ1bmN0aW9uKSAjb3B0aW9u YWwgb25lIG9mIGVhc2luZyBmdW5jdGlvbnMgb2YgQG1pbmEgb3IgY3VzdG9t IG9uZQorICAgICAtIGNhbGxiYWNrIChmdW5jdGlvbikgI29wdGlvbmFsIGNh bGxiYWNrIGZ1bmN0aW9uIHRoYXQgZmlyZXMgd2hlbiBhbmltYXRpb24gZW5k cworICAgICA9IChvYmplY3QpIGFuaW1hdGlvbiBvYmplY3QKKyAgICBcKi8K KyAgICBTbmFwLmFuaW1hdGlvbiA9IGZ1bmN0aW9uIChhdHRyLCBtcywgZWFz aW5nLCBjYWxsYmFjaykgeworICAgICAgICByZXR1cm4gbmV3IEFuaW1hdGlv bihhdHRyLCBtcywgZWFzaW5nLCBjYWxsYmFjayk7CisgICAgfTsKKyAgICAv KlwKKyAgICAgKiBFbGVtZW50LmluQW5pbQorICAgICBbIG1ldGhvZCBdCisg ICAgICoqCisgICAgICogUmV0dXJucyBhIHNldCBvZiBhbmltYXRpb25zIHRo YXQgbWF5IGJlIGFibGUgdG8gbWFuaXB1bGF0ZSB0aGUgY3VycmVudCBlbGVt ZW50CisgICAgICoqCisgICAgID0gKG9iamVjdCkgaW4gZm9ybWF0OgorICAg ICBvIHsKKyAgICAgbyAgICAgYW5pbSAob2JqZWN0KSBhbmltYXRpb24gb2Jq ZWN0LAorICAgICBvICAgICBtaW5hIChvYmplY3QpIEBtaW5hIG9iamVjdCwK KyAgICAgbyAgICAgY3VyU3RhdHVzIChudW1iZXIpIDAuLjEg4oCUIHN0YXR1 cyBvZiB0aGUgYW5pbWF0aW9uOiAwIOKAlCBqdXN0IHN0YXJ0ZWQsIDEg4oCU IGp1c3QgZmluaXNoZWQsCisgICAgIG8gICAgIHN0YXR1cyAoZnVuY3Rpb24p IGdldHMgb3Igc2V0cyB0aGUgc3RhdHVzIG9mIHRoZSBhbmltYXRpb24sCisg ICAgIG8gICAgIHN0b3AgKGZ1bmN0aW9uKSBzdG9wcyB0aGUgYW5pbWF0aW9u CisgICAgIG8gfQorICAgIFwqLworICAgIGVscHJvdG8uaW5BbmltID0gZnVu Y3Rpb24gKCkgeworICAgICAgICB2YXIgZWwgPSB0aGlzLAorICAgICAgICAg ICAgcmVzID0gW107CisgICAgICAgIGZvciAodmFyIGlkIGluIGVsLmFuaW1z KSBpZiAoZWwuYW5pbXNbaGFzXShpZCkpIHsKKyAgICAgICAgICAgIChmdW5j dGlvbiAoYSkgeworICAgICAgICAgICAgICAgIHJlcy5wdXNoKHsKKyAgICAg ICAgICAgICAgICAgICAgYW5pbTogbmV3IEFuaW1hdGlvbihhLl9hdHRycywg YS5kdXIsIGEuZWFzaW5nLCBhLl9jYWxsYmFjayksCisgICAgICAgICAgICAg ICAgICAgIG1pbmE6IGEsCisgICAgICAgICAgICAgICAgICAgIGN1clN0YXR1 czogYS5zdGF0dXMoKSwKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBm dW5jdGlvbiAodmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gYS5zdGF0dXModmFsKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAg ICAgICAgICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24gKCkgeworICAgICAg ICAgICAgICAgICAgICAgICAgYS5zdG9wKCk7CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0oZWwu YW5pbXNbaWRdKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlczsK KyAgICB9OworICAgIC8qXAorICAgICAqIFNuYXAuYW5pbWF0ZQorICAgICBb IG1ldGhvZCBdCisgICAgICoqCisgICAgICogUnVucyBnZW5lcmljIGFuaW1h dGlvbiBvZiBvbmUgbnVtYmVyIGludG8gYW5vdGhlciB3aXRoIGEgY2FyaW5n IGZ1bmN0aW9uCisgICAgICoqCisgICAgIC0gZnJvbSAobnVtYmVyfGFycmF5 KSBudW1iZXIgb3IgYXJyYXkgb2YgbnVtYmVycworICAgICAtIHRvIChudW1i ZXJ8YXJyYXkpIG51bWJlciBvciBhcnJheSBvZiBudW1iZXJzCisgICAgIC0g c2V0dGVyIChmdW5jdGlvbikgY2FyaW5nIGZ1bmN0aW9uIHRoYXQgYWNjZXB0 cyBvbmUgbnVtYmVyIGFyZ3VtZW50CisgICAgIC0gZHVyYXRpb24gKG51bWJl cikgZHVyYXRpb24sIGluIG1pbGxpc2Vjb25kcworICAgICAtIGVhc2luZyAo ZnVuY3Rpb24pICNvcHRpb25hbCBlYXNpbmcgZnVuY3Rpb24gZnJvbSBAbWlu YSBvciBjdXN0b20KKyAgICAgLSBjYWxsYmFjayAoZnVuY3Rpb24pICNvcHRp b25hbCBjYWxsYmFjayBmdW5jdGlvbiB0byBleGVjdXRlIHdoZW4gYW5pbWF0 aW9uIGVuZHMKKyAgICAgPSAob2JqZWN0KSBhbmltYXRpb24gb2JqZWN0IGlu IEBtaW5hIGZvcm1hdAorICAgICBvIHsKKyAgICAgbyAgICAgaWQgKHN0cmlu ZykgYW5pbWF0aW9uIGlkLCBjb25zaWRlciBpdCByZWFkLW9ubHksCisgICAg IG8gICAgIGR1cmF0aW9uIChmdW5jdGlvbikgZ2V0cyBvciBzZXRzIHRoZSBk dXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uLAorICAgICBvICAgICBlYXNpbmcg KGZ1bmN0aW9uKSBlYXNpbmcsCisgICAgIG8gICAgIHNwZWVkIChmdW5jdGlv bikgZ2V0cyBvciBzZXRzIHRoZSBzcGVlZCBvZiB0aGUgYW5pbWF0aW9uLAor ICAgICBvICAgICBzdGF0dXMgKGZ1bmN0aW9uKSBnZXRzIG9yIHNldHMgdGhl IHN0YXR1cyBvZiB0aGUgYW5pbWF0aW9uLAorICAgICBvICAgICBzdG9wIChm dW5jdGlvbikgc3RvcHMgdGhlIGFuaW1hdGlvbgorICAgICBvIH0KKyAgICAg fCB2YXIgcmVjdCA9IFNuYXAoKS5yZWN0KDAsIDAsIDEwLCAxMCk7CisgICAg IHwgU25hcC5hbmltYXRlKDAsIDEwLCBmdW5jdGlvbiAodmFsKSB7CisgICAg IHwgICAgIHJlY3QuYXR0cih7CisgICAgIHwgICAgICAgICB4OiB2YWwKKyAg ICAgfCAgICAgfSk7CisgICAgIHwgfSwgMTAwMCk7CisgICAgIHwgLy8gaW4g Z2l2ZW4gY29udGV4dCBpcyBlcXVpdmFsZW50IHRvCisgICAgIHwgcmVjdC5h bmltYXRlKHt4OiAxMH0sIDEwMDApOworICAgIFwqLworICAgIFNuYXAuYW5p bWF0ZSA9IGZ1bmN0aW9uIChmcm9tLCB0bywgc2V0dGVyLCBtcywgZWFzaW5n LCBjYWxsYmFjaykgeworICAgICAgICBpZiAodHlwZW9mIGVhc2luZyA9PSAi ZnVuY3Rpb24iICYmICFlYXNpbmcubGVuZ3RoKSB7CisgICAgICAgICAgICBj YWxsYmFjayA9IGVhc2luZzsKKyAgICAgICAgICAgIGVhc2luZyA9IG1pbmEu bGluZWFyOworICAgICAgICB9CisgICAgICAgIHZhciBub3cgPSBtaW5hLnRp bWUoKSwKKyAgICAgICAgICAgIGFuaW0gPSBtaW5hKGZyb20sIHRvLCBub3cs IG5vdyArIG1zLCBtaW5hLnRpbWUsIHNldHRlciwgZWFzaW5nKTsKKyAgICAg ICAgY2FsbGJhY2sgJiYgZXZlLm9uY2UoIm1pbmEuZmluaXNoLiIgKyBhbmlt LmlkLCBjYWxsYmFjayk7CisgICAgICAgIHJldHVybiBhbmltOworICAgIH07 CisgICAgLypcCisgICAgICogRWxlbWVudC5zdG9wCisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBTdG9wcyBhbGwgdGhlIGFuaW1hdGlvbnMg Zm9yIHRoZSBjdXJyZW50IGVsZW1lbnQKKyAgICAgKioKKyAgICAgPSAoRWxl bWVudCkgdGhlIGN1cnJlbnQgZWxlbWVudAorICAgIFwqLworICAgIGVscHJv dG8uc3RvcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGFuaW1zID0g dGhpcy5pbkFuaW0oKTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0g YW5pbXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgYW5p bXNbaV0uc3RvcCgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlz OworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC5hbmltYXRlCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBbmltYXRlcyB0aGUg Z2l2ZW4gYXR0cmlidXRlcyBvZiB0aGUgZWxlbWVudAorICAgICAqKgorICAg ICAtIGF0dHJzIChvYmplY3QpIGtleS12YWx1ZSBwYWlycyBvZiBkZXN0aW5h dGlvbiBhdHRyaWJ1dGVzCisgICAgIC0gZHVyYXRpb24gKG51bWJlcikgZHVy YXRpb24gb2YgdGhlIGFuaW1hdGlvbiBpbiBtaWxsaXNlY29uZHMKKyAgICAg LSBlYXNpbmcgKGZ1bmN0aW9uKSAjb3B0aW9uYWwgZWFzaW5nIGZ1bmN0aW9u IGZyb20gQG1pbmEgb3IgY3VzdG9tCisgICAgIC0gY2FsbGJhY2sgKGZ1bmN0 aW9uKSAjb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBleGVjdXRl cyB3aGVuIHRoZSBhbmltYXRpb24gZW5kcworICAgICA9IChFbGVtZW50KSB0 aGUgY3VycmVudCBlbGVtZW50CisgICAgXCovCisgICAgZWxwcm90by5hbmlt YXRlID0gZnVuY3Rpb24gKGF0dHJzLCBtcywgZWFzaW5nLCBjYWxsYmFjaykg eworICAgICAgICBpZiAodHlwZW9mIGVhc2luZyA9PSAiZnVuY3Rpb24iICYm ICFlYXNpbmcubGVuZ3RoKSB7CisgICAgICAgICAgICBjYWxsYmFjayA9IGVh c2luZzsKKyAgICAgICAgICAgIGVhc2luZyA9IG1pbmEubGluZWFyOworICAg ICAgICB9CisgICAgICAgIGlmIChhdHRycyBpbnN0YW5jZW9mIEFuaW1hdGlv bikgeworICAgICAgICAgICAgY2FsbGJhY2sgPSBhdHRycy5jYWxsYmFjazsK KyAgICAgICAgICAgIGVhc2luZyA9IGF0dHJzLmVhc2luZzsKKyAgICAgICAg ICAgIG1zID0gYXR0cnMuZHVyOworICAgICAgICAgICAgYXR0cnMgPSBhdHRy cy5hdHRyOworICAgICAgICB9CisgICAgICAgIHZhciBma2V5cyA9IFtdLCB0 a2V5cyA9IFtdLCBrZXlzID0ge30sIGZyb20sIHRvLCBmLCBlcSwKKyAgICAg ICAgICAgIGVsID0gdGhpczsKKyAgICAgICAgZm9yICh2YXIga2V5IGluIGF0 dHJzKSBpZiAoYXR0cnNbaGFzXShrZXkpKSB7CisgICAgICAgICAgICBpZiAo ZWwuZXF1YWwpIHsKKyAgICAgICAgICAgICAgICBlcSA9IGVsLmVxdWFsKGtl eSwgU3RyKGF0dHJzW2tleV0pKTsKKyAgICAgICAgICAgICAgICBmcm9tID0g ZXEuZnJvbTsKKyAgICAgICAgICAgICAgICB0byA9IGVxLnRvOworICAgICAg ICAgICAgICAgIGYgPSBlcS5mOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBmcm9tID0gK2VsLmF0dHIoa2V5KTsKKyAgICAgICAg ICAgICAgICB0byA9ICthdHRyc1trZXldOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgdmFyIGxlbiA9IGlzKGZyb20sICJhcnJheSIpID8gZnJvbS5s ZW5ndGggOiAxOworICAgICAgICAgICAga2V5c1trZXldID0gc2xpY2UoZmtl eXMubGVuZ3RoLCBma2V5cy5sZW5ndGggKyBsZW4sIGYpOworICAgICAgICAg ICAgZmtleXMgPSBma2V5cy5jb25jYXQoZnJvbSk7CisgICAgICAgICAgICB0 a2V5cyA9IHRrZXlzLmNvbmNhdCh0byk7CisgICAgICAgIH0KKyAgICAgICAg dmFyIG5vdyA9IG1pbmEudGltZSgpLAorICAgICAgICAgICAgYW5pbSA9IG1p bmEoZmtleXMsIHRrZXlzLCBub3csIG5vdyArIG1zLCBtaW5hLnRpbWUsIGZ1 bmN0aW9uICh2YWwpIHsKKyAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IHt9 OworICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBrZXlzKSBpZiAo a2V5c1toYXNdKGtleSkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXR0cltr ZXldID0ga2V5c1trZXldKHZhbCk7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGVsLmF0dHIoYXR0cik7CisgICAgICAgICAgICB9LCBl YXNpbmcpOworICAgICAgICBlbC5hbmltc1thbmltLmlkXSA9IGFuaW07Cisg ICAgICAgIGFuaW0uX2F0dHJzID0gYXR0cnM7CisgICAgICAgIGFuaW0uX2Nh bGxiYWNrID0gY2FsbGJhY2s7CisgICAgICAgIGV2ZSgic25hcC5hbmltY3Jl YXRlZC4iICsgZWwuaWQsIGFuaW0pOworICAgICAgICBldmUub25jZSgibWlu YS5maW5pc2guIiArIGFuaW0uaWQsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg ICAgIGRlbGV0ZSBlbC5hbmltc1thbmltLmlkXTsKKyAgICAgICAgICAgIGNh bGxiYWNrICYmIGNhbGxiYWNrLmNhbGwoZWwpOworICAgICAgICB9KTsKKyAg ICAgICAgZXZlLm9uY2UoIm1pbmEuc3RvcC4iICsgYW5pbS5pZCwgZnVuY3Rp b24gKCkgeworICAgICAgICAgICAgZGVsZXRlIGVsLmFuaW1zW2FuaW0uaWRd OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIGVsOworICAgIH07Cisg ICAgdmFyIGVsZGF0YSA9IHt9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQu ZGF0YQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQWRkcyBv ciByZXRyaWV2ZXMgZ2l2ZW4gdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGdpdmVu IGtleS4gKERvbuKAmXQgY29uZnVzZQorICAgICAqIHdpdGggYGRhdGEtYCBh dHRyaWJ1dGVzKQorICAgICAqCisgICAgICogU2VlIGFsc28gQEVsZW1lbnQu cmVtb3ZlRGF0YQorICAgICAtIGtleSAoc3RyaW5nKSBrZXkgdG8gc3RvcmUg ZGF0YQorICAgICAtIHZhbHVlIChhbnkpICNvcHRpb25hbCB2YWx1ZSB0byBz dG9yZQorICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgICogb3IsIGlm IHZhbHVlIGlzIG5vdCBzcGVjaWZpZWQ6CisgICAgID0gKGFueSkgdmFsdWUK KyAgICAgPiBVc2FnZQorICAgICB8IGZvciAodmFyIGkgPSAwLCBpIDwgNSwg aSsrKSB7CisgICAgIHwgICAgIHBhcGVyLmNpcmNsZSgxMCArIDE1ICogaSwg MTAsIDEwKQorICAgICB8ICAgICAgICAgIC5hdHRyKHtmaWxsOiAiIzAwMCJ9 KQorICAgICB8ICAgICAgICAgIC5kYXRhKCJpIiwgaSkKKyAgICAgfCAgICAg ICAgICAuY2xpY2soZnVuY3Rpb24gKCkgeworICAgICB8ICAgICAgICAgICAg IGFsZXJ0KHRoaXMuZGF0YSgiaSIpKTsKKyAgICAgfCAgICAgICAgICB9KTsK KyAgICAgfCB9CisgICAgXCovCisgICAgZWxwcm90by5kYXRhID0gZnVuY3Rp b24gKGtleSwgdmFsdWUpIHsKKyAgICAgICAgdmFyIGRhdGEgPSBlbGRhdGFb dGhpcy5pZF0gPSBlbGRhdGFbdGhpcy5pZF0gfHwge307CisgICAgICAgIGlm IChhcmd1bWVudHMubGVuZ3RoID09IDApeworICAgICAgICAgICAgZXZlKCJz bmFwLmRhdGEuZ2V0LiIgKyB0aGlzLmlkLCB0aGlzLCBkYXRhLCBudWxsKTsK KyAgICAgICAgICAgIHJldHVybiBkYXRhOworICAgICAgICB9CisgICAgICAg IGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgIGlm IChTbmFwLmlzKGtleSwgIm9iamVjdCIpKSB7CisgICAgICAgICAgICAgICAg Zm9yICh2YXIgaSBpbiBrZXkpIGlmIChrZXlbaGFzXShpKSkgeworICAgICAg ICAgICAgICAgICAgICB0aGlzLmRhdGEoaSwga2V5W2ldKTsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBldmUoInNuYXAuZGF0YS5nZXQuIiAr IHRoaXMuaWQsIHRoaXMsIGRhdGFba2V5XSwga2V5KTsKKyAgICAgICAgICAg IHJldHVybiBkYXRhW2tleV07CisgICAgICAgIH0KKyAgICAgICAgZGF0YVtr ZXldID0gdmFsdWU7CisgICAgICAgIGV2ZSgic25hcC5kYXRhLnNldC4iICsg dGhpcy5pZCwgdGhpcywgdmFsdWUsIGtleSk7CisgICAgICAgIHJldHVybiB0 aGlzOworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC5yZW1vdmVE YXRhCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZW1vdmVz IHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhbiBlbGVtZW50IGJ5IGdpdmVuIGtl eS4KKyAgICAgKiBJZiBrZXkgaXMgbm90IHByb3ZpZGVkLCByZW1vdmVzIGFs bCB0aGUgZGF0YSBvZiB0aGUgZWxlbWVudC4KKyAgICAgLSBrZXkgKHN0cmlu ZykgI29wdGlvbmFsIGtleQorICAgICA9IChvYmplY3QpIEBFbGVtZW50Cisg ICAgXCovCisgICAgZWxwcm90by5yZW1vdmVEYXRhID0gZnVuY3Rpb24gKGtl eSkgeworICAgICAgICBpZiAoa2V5ID09IG51bGwpIHsKKyAgICAgICAgICAg IGVsZGF0YVt0aGlzLmlkXSA9IHt9OworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgZWxkYXRhW3RoaXMuaWRdICYmIGRlbGV0ZSBlbGRhdGFbdGhp cy5pZF1ba2V5XTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsK KyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQub3V0ZXJTVkcKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgU1ZHIGNv ZGUgZm9yIHRoZSBlbGVtZW50LCBlcXVpdmFsZW50IHRvIEhUTUwncyBgb3V0 ZXJIVE1MYC4KKyAgICAgKgorICAgICAqIFNlZSBhbHNvIEBFbGVtZW50Lmlu bmVyU1ZHCisgICAgID0gKHN0cmluZykgU1ZHIGNvZGUgZm9yIHRoZSBlbGVt ZW50CisgICAgXCovCisgICAgLypcCisgICAgICogRWxlbWVudC50b1N0cmlu ZworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogU2VlIEBFbGVt ZW50Lm91dGVyU1ZHCisgICAgXCovCisgICAgZWxwcm90by5vdXRlclNWRyA9 IGVscHJvdG8udG9TdHJpbmcgPSB0b1N0cmluZygxKTsKKyAgICAvKlwKKyAg ICAgKiBFbGVtZW50LmlubmVyU1ZHCisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBSZXR1cm5zIFNWRyBjb2RlIGZvciB0aGUgZWxlbWVudCdz IGNvbnRlbnRzLCBlcXVpdmFsZW50IHRvIEhUTUwncyBgaW5uZXJIVE1MYAor ICAgICA9IChzdHJpbmcpIFNWRyBjb2RlIGZvciB0aGUgZWxlbWVudAorICAg IFwqLworICAgIGVscHJvdG8uaW5uZXJTVkcgPSB0b1N0cmluZygpOworICAg IGZ1bmN0aW9uIHRvU3RyaW5nKHR5cGUpIHsKKyAgICAgICAgcmV0dXJuIGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciByZXMgPSB0eXBlID8gIjwi ICsgdGhpcy50eXBlIDogIiIsCisgICAgICAgICAgICAgICAgYXR0ciA9IHRo aXMubm9kZS5hdHRyaWJ1dGVzLAorICAgICAgICAgICAgICAgIGNobGQgPSB0 aGlzLm5vZGUuY2hpbGROb2RlczsKKyAgICAgICAgICAgIGlmICh0eXBlKSB7 CisgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gYXR0ci5s ZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHJl cyArPSAiICIgKyBhdHRyW2ldLm5hbWUgKyAnPSInICsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBhdHRyW2ldLnZhbHVlLnJlcGxhY2UoLyIvZywg J1xcIicpICsgJyInOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmIChjaGxkLmxlbmd0aCkgeworICAgICAgICAg ICAgICAgIHR5cGUgJiYgKHJlcyArPSAiPiIpOworICAgICAgICAgICAgICAg IGZvciAoaSA9IDAsIGlpID0gY2hsZC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7 CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGxkW2ldLm5vZGVUeXBlID09 IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcyArPSBjaGxkW2ld Lm5vZGVWYWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChj aGxkW2ldLm5vZGVUeXBlID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHJlcyArPSB3cmFwKGNobGRbaV0pLnRvU3RyaW5nKCk7CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgdHlwZSAmJiAocmVzICs9ICI8LyIgKyB0aGlzLnR5cGUgKyAiPiIp OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0eXBl ICYmIChyZXMgKz0gIi8+Iik7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICByZXR1cm4gcmVzOworICAgICAgICB9OworICAgIH0KKyAgICBlbHByb3Rv LnRvRGF0YVVSTCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgaWYgKHdpbmRv dyAmJiB3aW5kb3cuYnRvYSkgeworICAgICAgICAgICAgdmFyIGJiID0gdGhp cy5nZXRCQm94KCksCisgICAgICAgICAgICAgICAgc3ZnID0gU25hcC5mb3Jt YXQoJzxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5v cmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8x OTk5L3hsaW5rIiB3aWR0aD0ie3dpZHRofSIgaGVpZ2h0PSJ7aGVpZ2h0fSIg dmlld0JveD0ie3h9IHt5fSB7d2lkdGh9IHtoZWlnaHR9Ij57Y29udGVudHN9 PC9zdmc+JywgeworICAgICAgICAgICAgICAgIHg6ICtiYi54LnRvRml4ZWQo MyksCisgICAgICAgICAgICAgICAgeTogK2JiLnkudG9GaXhlZCgzKSwKKyAg ICAgICAgICAgICAgICB3aWR0aDogK2JiLndpZHRoLnRvRml4ZWQoMyksCisg ICAgICAgICAgICAgICAgaGVpZ2h0OiArYmIuaGVpZ2h0LnRvRml4ZWQoMyks CisgICAgICAgICAgICAgICAgY29udGVudHM6IHRoaXMub3V0ZXJTVkcoKQor ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm4gImRhdGE6aW1h Z2Uvc3ZnK3htbDtiYXNlNjQsIiArIGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJ Q29tcG9uZW50KHN2ZykpKTsKKyAgICAgICAgfQorICAgIH07CisgICAgLypc CisgICAgICogRnJhZ21lbnQuc2VsZWN0CisgICAgIFsgbWV0aG9kIF0KKyAg ICAgKioKKyAgICAgKiBTZWUgQEVsZW1lbnQuc2VsZWN0CisgICAgXCovCisg ICAgRnJhZ21lbnQucHJvdG90eXBlLnNlbGVjdCA9IGVscHJvdG8uc2VsZWN0 OworICAgIC8qXAorICAgICAqIEZyYWdtZW50LnNlbGVjdEFsbAorICAgICBb IG1ldGhvZCBdCisgICAgICoqCisgICAgICogU2VlIEBFbGVtZW50LnNlbGVj dEFsbAorICAgIFwqLworICAgIEZyYWdtZW50LnByb3RvdHlwZS5zZWxlY3RB bGwgPSBlbHByb3RvLnNlbGVjdEFsbDsKK30pOworCisvLyBDb3B5cmlnaHQg KGMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5 b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl IHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkg b2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8vd3d3LmFwYWNoZS5v cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWly ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs IHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9V VCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl ciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9y IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg YW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK1NuYXAu cGx1Z2luKGZ1bmN0aW9uIChTbmFwLCBFbGVtZW50LCBQYXBlciwgZ2xvYiwg RnJhZ21lbnQpIHsKKyAgICB2YXIgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3Qu cHJvdG90eXBlLnRvU3RyaW5nLAorICAgICAgICBTdHIgPSBTdHJpbmcsCisg ICAgICAgIG1hdGggPSBNYXRoLAorICAgICAgICBFID0gIiI7CisgICAgZnVu Y3Rpb24gTWF0cml4KGEsIGIsIGMsIGQsIGUsIGYpIHsKKyAgICAgICAgaWYg KGIgPT0gbnVsbCAmJiBvYmplY3RUb1N0cmluZy5jYWxsKGEpID09ICJbb2Jq ZWN0IFNWR01hdHJpeF0iKSB7CisgICAgICAgICAgICB0aGlzLmEgPSBhLmE7 CisgICAgICAgICAgICB0aGlzLmIgPSBhLmI7CisgICAgICAgICAgICB0aGlz LmMgPSBhLmM7CisgICAgICAgICAgICB0aGlzLmQgPSBhLmQ7CisgICAgICAg ICAgICB0aGlzLmUgPSBhLmU7CisgICAgICAgICAgICB0aGlzLmYgPSBhLmY7 CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYg KGEgIT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5hID0gK2E7CisgICAg ICAgICAgICB0aGlzLmIgPSArYjsKKyAgICAgICAgICAgIHRoaXMuYyA9ICtj OworICAgICAgICAgICAgdGhpcy5kID0gK2Q7CisgICAgICAgICAgICB0aGlz LmUgPSArZTsKKyAgICAgICAgICAgIHRoaXMuZiA9ICtmOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgdGhpcy5hID0gMTsKKyAgICAgICAgICAg IHRoaXMuYiA9IDA7CisgICAgICAgICAgICB0aGlzLmMgPSAwOworICAgICAg ICAgICAgdGhpcy5kID0gMTsKKyAgICAgICAgICAgIHRoaXMuZSA9IDA7Cisg ICAgICAgICAgICB0aGlzLmYgPSAwOworICAgICAgICB9CisgICAgfQorICAg IChmdW5jdGlvbiAobWF0cml4cHJvdG8pIHsKKyAgICAgICAgLypcCisgICAg ICAgICAqIE1hdHJpeC5hZGQKKyAgICAgICAgIFsgbWV0aG9kIF0KKyAgICAg ICAgICoqCisgICAgICAgICAqIEFkZHMgdGhlIGdpdmVuIG1hdHJpeCB0byBl eGlzdGluZyBvbmUKKyAgICAgICAgIC0gYSAobnVtYmVyKQorICAgICAgICAg LSBiIChudW1iZXIpCisgICAgICAgICAtIGMgKG51bWJlcikKKyAgICAgICAg IC0gZCAobnVtYmVyKQorICAgICAgICAgLSBlIChudW1iZXIpCisgICAgICAg ICAtIGYgKG51bWJlcikKKyAgICAgICAgICogb3IKKyAgICAgICAgIC0gbWF0 cml4IChvYmplY3QpIEBNYXRyaXgKKyAgICAgICAgXCovCisgICAgICAgIG1h dHJpeHByb3RvLmFkZCA9IGZ1bmN0aW9uIChhLCBiLCBjLCBkLCBlLCBmKSB7 CisgICAgICAgICAgICB2YXIgb3V0ID0gW1tdLCBbXSwgW11dLAorICAgICAg ICAgICAgICAgIG0gPSBbW3RoaXMuYSwgdGhpcy5jLCB0aGlzLmVdLCBbdGhp cy5iLCB0aGlzLmQsIHRoaXMuZl0sIFswLCAwLCAxXV0sCisgICAgICAgICAg ICAgICAgbWF0cml4ID0gW1thLCBjLCBlXSwgW2IsIGQsIGZdLCBbMCwgMCwg MV1dLAorICAgICAgICAgICAgICAgIHgsIHksIHosIHJlczsKKworICAgICAg ICAgICAgaWYgKGEgJiYgYSBpbnN0YW5jZW9mIE1hdHJpeCkgeworICAgICAg ICAgICAgICAgIG1hdHJpeCA9IFtbYS5hLCBhLmMsIGEuZV0sIFthLmIsIGEu ZCwgYS5mXSwgWzAsIDAsIDFdXTsKKyAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgZm9yICh4ID0gMDsgeCA8IDM7IHgrKykgeworICAgICAgICAgICAg ICAgIGZvciAoeSA9IDA7IHkgPCAzOyB5KyspIHsKKyAgICAgICAgICAgICAg ICAgICAgcmVzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh6ID0g MDsgeiA8IDM7IHorKykgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVz ICs9IG1beF1bel0gKiBtYXRyaXhbel1beV07CisgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0W3hdW3ldID0gcmVzOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHRoaXMuYSA9IG91dFswXVswXTsKKyAgICAgICAgICAgIHRoaXMuYiA9IG91 dFsxXVswXTsKKyAgICAgICAgICAgIHRoaXMuYyA9IG91dFswXVsxXTsKKyAg ICAgICAgICAgIHRoaXMuZCA9IG91dFsxXVsxXTsKKyAgICAgICAgICAgIHRo aXMuZSA9IG91dFswXVsyXTsKKyAgICAgICAgICAgIHRoaXMuZiA9IG91dFsx XVsyXTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9Owor ICAgICAgICAvKlwKKyAgICAgICAgICogTWF0cml4LmludmVydAorICAgICAg ICAgWyBtZXRob2QgXQorICAgICAgICAgKioKKyAgICAgICAgICogUmV0dXJu cyBhbiBpbnZlcnRlZCB2ZXJzaW9uIG9mIHRoZSBtYXRyaXgKKyAgICAgICAg ID0gKG9iamVjdCkgQE1hdHJpeAorICAgICAgICBcKi8KKyAgICAgICAgbWF0 cml4cHJvdG8uaW52ZXJ0ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg dmFyIG1lID0gdGhpcywKKyAgICAgICAgICAgICAgICB4ID0gbWUuYSAqIG1l LmQgLSBtZS5iICogbWUuYzsKKyAgICAgICAgICAgIHJldHVybiBuZXcgTWF0 cml4KG1lLmQgLyB4LCAtbWUuYiAvIHgsIC1tZS5jIC8geCwgbWUuYSAvIHgs IChtZS5jICogbWUuZiAtIG1lLmQgKiBtZS5lKSAvIHgsIChtZS5iICogbWUu ZSAtIG1lLmEgKiBtZS5mKSAvIHgpOworICAgICAgICB9OworICAgICAgICAv KlwKKyAgICAgICAgICogTWF0cml4LmNsb25lCisgICAgICAgICBbIG1ldGhv ZCBdCisgICAgICAgICAqKgorICAgICAgICAgKiBSZXR1cm5zIGEgY29weSBv ZiB0aGUgbWF0cml4CisgICAgICAgICA9IChvYmplY3QpIEBNYXRyaXgKKyAg ICAgICAgXCovCisgICAgICAgIG1hdHJpeHByb3RvLmNsb25lID0gZnVuY3Rp b24gKCkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBNYXRyaXgodGhpcy5h LCB0aGlzLmIsIHRoaXMuYywgdGhpcy5kLCB0aGlzLmUsIHRoaXMuZik7Cisg ICAgICAgIH07CisgICAgICAgIC8qXAorICAgICAgICAgKiBNYXRyaXgudHJh bnNsYXRlCisgICAgICAgICBbIG1ldGhvZCBdCisgICAgICAgICAqKgorICAg ICAgICAgKiBUcmFuc2xhdGUgdGhlIG1hdHJpeAorICAgICAgICAgLSB4IChu dW1iZXIpIGhvcml6b250YWwgb2Zmc2V0IGRpc3RhbmNlCisgICAgICAgICAt IHkgKG51bWJlcikgdmVydGljYWwgb2Zmc2V0IGRpc3RhbmNlCisgICAgICAg IFwqLworICAgICAgICBtYXRyaXhwcm90by50cmFuc2xhdGUgPSBmdW5jdGlv biAoeCwgeSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKDEsIDAs IDAsIDEsIHgsIHkpOworICAgICAgICB9OworICAgICAgICAvKlwKKyAgICAg ICAgICogTWF0cml4LnNjYWxlCisgICAgICAgICBbIG1ldGhvZCBdCisgICAg ICAgICAqKgorICAgICAgICAgKiBTY2FsZXMgdGhlIG1hdHJpeAorICAgICAg ICAgLSB4IChudW1iZXIpIGFtb3VudCB0byBiZSBzY2FsZWQsIHdpdGggYDFg IHJlc3VsdGluZyBpbiBubyBjaGFuZ2UKKyAgICAgICAgIC0geSAobnVtYmVy KSAjb3B0aW9uYWwgYW1vdW50IHRvIHNjYWxlIGFsb25nIHRoZSB2ZXJ0aWNh bCBheGlzLiAoT3RoZXJ3aXNlIGB4YCBhcHBsaWVzIHRvIGJvdGggYXhlcy4p CisgICAgICAgICAtIGN4IChudW1iZXIpICNvcHRpb25hbCBob3Jpem9udGFs IG9yaWdpbiBwb2ludCBmcm9tIHdoaWNoIHRvIHNjYWxlCisgICAgICAgICAt IGN5IChudW1iZXIpICNvcHRpb25hbCB2ZXJ0aWNhbCBvcmlnaW4gcG9pbnQg ZnJvbSB3aGljaCB0byBzY2FsZQorICAgICAgICAgKiBEZWZhdWx0IGN4LCBj eSBpcyB0aGUgbWlkZGxlIHBvaW50IG9mIHRoZSBlbGVtZW50LgorICAgICAg ICBcKi8KKyAgICAgICAgbWF0cml4cHJvdG8uc2NhbGUgPSBmdW5jdGlvbiAo eCwgeSwgY3gsIGN5KSB7CisgICAgICAgICAgICB5ID09IG51bGwgJiYgKHkg PSB4KTsKKyAgICAgICAgICAgIChjeCB8fCBjeSkgJiYgdGhpcy5hZGQoMSwg MCwgMCwgMSwgY3gsIGN5KTsKKyAgICAgICAgICAgIHRoaXMuYWRkKHgsIDAs IDAsIHksIDAsIDApOworICAgICAgICAgICAgKGN4IHx8IGN5KSAmJiB0aGlz LmFkZCgxLCAwLCAwLCAxLCAtY3gsIC1jeSk7CisgICAgICAgICAgICByZXR1 cm4gdGhpczsKKyAgICAgICAgfTsKKyAgICAgICAgLypcCisgICAgICAgICAq IE1hdHJpeC5yb3RhdGUKKyAgICAgICAgIFsgbWV0aG9kIF0KKyAgICAgICAg ICoqCisgICAgICAgICAqIFJvdGF0ZXMgdGhlIG1hdHJpeAorICAgICAgICAg LSBhIChudW1iZXIpIGFuZ2xlIG9mIHJvdGF0aW9uLCBpbiBkZWdyZWVzCisg ICAgICAgICAtIHggKG51bWJlcikgaG9yaXpvbnRhbCBvcmlnaW4gcG9pbnQg ZnJvbSB3aGljaCB0byByb3RhdGUKKyAgICAgICAgIC0geSAobnVtYmVyKSB2 ZXJ0aWNhbCBvcmlnaW4gcG9pbnQgZnJvbSB3aGljaCB0byByb3RhdGUKKyAg ICAgICAgXCovCisgICAgICAgIG1hdHJpeHByb3RvLnJvdGF0ZSA9IGZ1bmN0 aW9uIChhLCB4LCB5KSB7CisgICAgICAgICAgICBhID0gU25hcC5yYWQoYSk7 CisgICAgICAgICAgICB4ID0geCB8fCAwOworICAgICAgICAgICAgeSA9IHkg fHwgMDsKKyAgICAgICAgICAgIHZhciBjb3MgPSArbWF0aC5jb3MoYSkudG9G aXhlZCg5KSwKKyAgICAgICAgICAgICAgICBzaW4gPSArbWF0aC5zaW4oYSku dG9GaXhlZCg5KTsKKyAgICAgICAgICAgIHRoaXMuYWRkKGNvcywgc2luLCAt c2luLCBjb3MsIHgsIHkpOworICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRk KDEsIDAsIDAsIDEsIC14LCAteSk7CisgICAgICAgIH07CisgICAgICAgIC8q XAorICAgICAgICAgKiBNYXRyaXgueAorICAgICAgICAgWyBtZXRob2QgXQor ICAgICAgICAgKioKKyAgICAgICAgICogUmV0dXJucyB4IGNvb3JkaW5hdGUg Zm9yIGdpdmVuIHBvaW50IGFmdGVyIHRyYW5zZm9ybWF0aW9uIGRlc2NyaWJl ZCBieSB0aGUgbWF0cml4LiBTZWUgYWxzbyBATWF0cml4LnkKKyAgICAgICAg IC0geCAobnVtYmVyKQorICAgICAgICAgLSB5IChudW1iZXIpCisgICAgICAg ICA9IChudW1iZXIpIHgKKyAgICAgICAgXCovCisgICAgICAgIG1hdHJpeHBy b3RvLnggPSBmdW5jdGlvbiAoeCwgeSkgeworICAgICAgICAgICAgcmV0dXJu IHggKiB0aGlzLmEgKyB5ICogdGhpcy5jICsgdGhpcy5lOworICAgICAgICB9 OworICAgICAgICAvKlwKKyAgICAgICAgICogTWF0cml4LnkKKyAgICAgICAg IFsgbWV0aG9kIF0KKyAgICAgICAgICoqCisgICAgICAgICAqIFJldHVybnMg eSBjb29yZGluYXRlIGZvciBnaXZlbiBwb2ludCBhZnRlciB0cmFuc2Zvcm1h dGlvbiBkZXNjcmliZWQgYnkgdGhlIG1hdHJpeC4gU2VlIGFsc28gQE1hdHJp eC54CisgICAgICAgICAtIHggKG51bWJlcikKKyAgICAgICAgIC0geSAobnVt YmVyKQorICAgICAgICAgPSAobnVtYmVyKSB5CisgICAgICAgIFwqLworICAg ICAgICBtYXRyaXhwcm90by55ID0gZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAg ICAgICAgIHJldHVybiB4ICogdGhpcy5iICsgeSAqIHRoaXMuZCArIHRoaXMu ZjsKKyAgICAgICAgfTsKKyAgICAgICAgbWF0cml4cHJvdG8uZ2V0ID0gZnVu Y3Rpb24gKGkpIHsKKyAgICAgICAgICAgIHJldHVybiArdGhpc1tTdHIuZnJv bUNoYXJDb2RlKDk3ICsgaSldLnRvRml4ZWQoNCk7CisgICAgICAgIH07Cisg ICAgICAgIG1hdHJpeHByb3RvLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgewor ICAgICAgICAgICAgcmV0dXJuICJtYXRyaXgoIiArIFt0aGlzLmdldCgwKSwg dGhpcy5nZXQoMSksIHRoaXMuZ2V0KDIpLCB0aGlzLmdldCgzKSwgdGhpcy5n ZXQoNCksIHRoaXMuZ2V0KDUpXS5qb2luKCkgKyAiKSI7CisgICAgICAgIH07 CisgICAgICAgIG1hdHJpeHByb3RvLm9mZnNldCA9IGZ1bmN0aW9uICgpIHsK KyAgICAgICAgICAgIHJldHVybiBbdGhpcy5lLnRvRml4ZWQoNCksIHRoaXMu Zi50b0ZpeGVkKDQpXTsKKyAgICAgICAgfTsKKyAgICAgICAgZnVuY3Rpb24g bm9ybShhKSB7CisgICAgICAgICAgICByZXR1cm4gYVswXSAqIGFbMF0gKyBh WzFdICogYVsxXTsKKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBub3Jt YWxpemUoYSkgeworICAgICAgICAgICAgdmFyIG1hZyA9IG1hdGguc3FydChu b3JtKGEpKTsKKyAgICAgICAgICAgIGFbMF0gJiYgKGFbMF0gLz0gbWFnKTsK KyAgICAgICAgICAgIGFbMV0gJiYgKGFbMV0gLz0gbWFnKTsKKyAgICAgICAg fQorICAgICAgICAvKlwKKyAgICAgICAgICogTWF0cml4LmRldGVybWluYW50 CisgICAgICAgICBbIG1ldGhvZCBdCisgICAgICAgICAqKgorICAgICAgICAg KiBGaW5kcyBkZXRlcm1pbmFudCBvZiB0aGUgZ2l2ZW4gbWF0cml4LgorICAg ICAgICAgPSAobnVtYmVyKSBkZXRlcm1pbmFudAorICAgICAgICBcKi8KKyAg ICAgICAgbWF0cml4cHJvdG8uZGV0ZXJtaW5hbnQgPSBmdW5jdGlvbiAoKSB7 CisgICAgICAgICAgICByZXR1cm4gdGhpcy5hICogdGhpcy5kIC0gdGhpcy5i ICogdGhpcy5jOworICAgICAgICB9OworICAgICAgICAvKlwKKyAgICAgICAg ICogTWF0cml4LnNwbGl0CisgICAgICAgICBbIG1ldGhvZCBdCisgICAgICAg ICAqKgorICAgICAgICAgKiBTcGxpdHMgbWF0cml4IGludG8gcHJpbWl0aXZl IHRyYW5zZm9ybWF0aW9ucworICAgICAgICAgPSAob2JqZWN0KSBpbiBmb3Jt YXQ6CisgICAgICAgICBvIGR4IChudW1iZXIpIHRyYW5zbGF0aW9uIGJ5IHgK KyAgICAgICAgIG8gZHkgKG51bWJlcikgdHJhbnNsYXRpb24gYnkgeQorICAg ICAgICAgbyBzY2FsZXggKG51bWJlcikgc2NhbGUgYnkgeAorICAgICAgICAg byBzY2FsZXkgKG51bWJlcikgc2NhbGUgYnkgeQorICAgICAgICAgbyBzaGVh ciAobnVtYmVyKSBzaGVhcgorICAgICAgICAgbyByb3RhdGUgKG51bWJlcikg cm90YXRpb24gaW4gZGVnCisgICAgICAgICBvIGlzU2ltcGxlIChib29sZWFu KSBjb3VsZCBpdCBiZSByZXByZXNlbnRlZCB2aWEgc2ltcGxlIHRyYW5zZm9y bWF0aW9ucworICAgICAgICBcKi8KKyAgICAgICAgbWF0cml4cHJvdG8uc3Bs aXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2YXIgb3V0ID0ge307 CisgICAgICAgICAgICAvLyB0cmFuc2xhdGlvbgorICAgICAgICAgICAgb3V0 LmR4ID0gdGhpcy5lOworICAgICAgICAgICAgb3V0LmR5ID0gdGhpcy5mOwor CisgICAgICAgICAgICAvLyBzY2FsZSBhbmQgc2hlYXIKKyAgICAgICAgICAg IHZhciByb3cgPSBbW3RoaXMuYSwgdGhpcy5jXSwgW3RoaXMuYiwgdGhpcy5k XV07CisgICAgICAgICAgICBvdXQuc2NhbGV4ID0gbWF0aC5zcXJ0KG5vcm0o cm93WzBdKSk7CisgICAgICAgICAgICBub3JtYWxpemUocm93WzBdKTsKKwor ICAgICAgICAgICAgb3V0LnNoZWFyID0gcm93WzBdWzBdICogcm93WzFdWzBd ICsgcm93WzBdWzFdICogcm93WzFdWzFdOworICAgICAgICAgICAgcm93WzFd ID0gW3Jvd1sxXVswXSAtIHJvd1swXVswXSAqIG91dC5zaGVhciwgcm93WzFd WzFdIC0gcm93WzBdWzFdICogb3V0LnNoZWFyXTsKKworICAgICAgICAgICAg b3V0LnNjYWxleSA9IG1hdGguc3FydChub3JtKHJvd1sxXSkpOworICAgICAg ICAgICAgbm9ybWFsaXplKHJvd1sxXSk7CisgICAgICAgICAgICBvdXQuc2hl YXIgLz0gb3V0LnNjYWxleTsKKworICAgICAgICAgICAgaWYgKHRoaXMuZGV0 ZXJtaW5hbnQoKSA8IDApIHsKKyAgICAgICAgICAgICAgICBvdXQuc2NhbGV4 ID0gLW91dC5zY2FsZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg IC8vIHJvdGF0aW9uCisgICAgICAgICAgICB2YXIgc2luID0gLXJvd1swXVsx XSwKKyAgICAgICAgICAgICAgICBjb3MgPSByb3dbMV1bMV07CisgICAgICAg ICAgICBpZiAoY29zIDwgMCkgeworICAgICAgICAgICAgICAgIG91dC5yb3Rh dGUgPSBTbmFwLmRlZyhtYXRoLmFjb3MoY29zKSk7CisgICAgICAgICAgICAg ICAgaWYgKHNpbiA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnJv dGF0ZSA9IDM2MCAtIG91dC5yb3RhdGU7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvdXQucm90 YXRlID0gU25hcC5kZWcobWF0aC5hc2luKHNpbikpOworICAgICAgICAgICAg fQorCisgICAgICAgICAgICBvdXQuaXNTaW1wbGUgPSAhK291dC5zaGVhci50 b0ZpeGVkKDkpICYmIChvdXQuc2NhbGV4LnRvRml4ZWQoOSkgPT0gb3V0LnNj YWxleS50b0ZpeGVkKDkpIHx8ICFvdXQucm90YXRlKTsKKyAgICAgICAgICAg IG91dC5pc1N1cGVyU2ltcGxlID0gIStvdXQuc2hlYXIudG9GaXhlZCg5KSAm JiBvdXQuc2NhbGV4LnRvRml4ZWQoOSkgPT0gb3V0LnNjYWxleS50b0ZpeGVk KDkpICYmICFvdXQucm90YXRlOworICAgICAgICAgICAgb3V0Lm5vUm90YXRp b24gPSAhK291dC5zaGVhci50b0ZpeGVkKDkpICYmICFvdXQucm90YXRlOwor ICAgICAgICAgICAgcmV0dXJuIG91dDsKKyAgICAgICAgfTsKKyAgICAgICAg LypcCisgICAgICAgICAqIE1hdHJpeC50b1RyYW5zZm9ybVN0cmluZworICAg ICAgICAgWyBtZXRob2QgXQorICAgICAgICAgKioKKyAgICAgICAgICogUmV0 dXJucyB0cmFuc2Zvcm0gc3RyaW5nIHRoYXQgcmVwcmVzZW50cyBnaXZlbiBt YXRyaXgKKyAgICAgICAgID0gKHN0cmluZykgdHJhbnNmb3JtIHN0cmluZwor ICAgICAgICBcKi8KKyAgICAgICAgbWF0cml4cHJvdG8udG9UcmFuc2Zvcm1T dHJpbmcgPSBmdW5jdGlvbiAoc2hvcnRlcikgeworICAgICAgICAgICAgdmFy IHMgPSBzaG9ydGVyIHx8IHRoaXMuc3BsaXQoKTsKKyAgICAgICAgICAgIGlm ICghK3Muc2hlYXIudG9GaXhlZCg5KSkgeworICAgICAgICAgICAgICAgIHMu c2NhbGV4ID0gK3Muc2NhbGV4LnRvRml4ZWQoNCk7CisgICAgICAgICAgICAg ICAgcy5zY2FsZXkgPSArcy5zY2FsZXkudG9GaXhlZCg0KTsKKyAgICAgICAg ICAgICAgICBzLnJvdGF0ZSA9ICtzLnJvdGF0ZS50b0ZpeGVkKDQpOworICAg ICAgICAgICAgICAgIHJldHVybiAgKHMuZHggfHwgcy5keSA/ICJ0IiArIFsr cy5keC50b0ZpeGVkKDQpLCArcy5keS50b0ZpeGVkKDQpXSA6IEUpICsKKyAg ICAgICAgICAgICAgICAgICAgICAgIChzLnNjYWxleCAhPSAxIHx8IHMuc2Nh bGV5ICE9IDEgPyAicyIgKyBbcy5zY2FsZXgsIHMuc2NhbGV5LCAwLCAwXSA6 IEUpICsKKyAgICAgICAgICAgICAgICAgICAgICAgIChzLnJvdGF0ZSA/ICJy IiArIFsrcy5yb3RhdGUudG9GaXhlZCg0KSwgMCwgMF0gOiBFKTsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJtIiAr IFt0aGlzLmdldCgwKSwgdGhpcy5nZXQoMSksIHRoaXMuZ2V0KDIpLCB0aGlz LmdldCgzKSwgdGhpcy5nZXQoNCksIHRoaXMuZ2V0KDUpXTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfTsKKyAgICB9KShNYXRyaXgucHJvdG90eXBlKTsK KyAgICAvKlwKKyAgICAgKiBTbmFwLk1hdHJpeAorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogTWF0cml4IGNvbnN0cnVjdG9yLCBleHRlbmQg b24geW91ciBvd24gcmlzay4KKyAgICAgKiBUbyBjcmVhdGUgbWF0cmljZXMg dXNlIEBTbmFwLm1hdHJpeC4KKyAgICBcKi8KKyAgICBTbmFwLk1hdHJpeCA9 IE1hdHJpeDsKKyAgICAvKlwKKyAgICAgKiBTbmFwLm1hdHJpeAorICAgICBb IG1ldGhvZCBdCisgICAgICoqCisgICAgICogVXRpbGl0eSBtZXRob2QKKyAg ICAgKioKKyAgICAgKiBSZXR1cm5zIGEgbWF0cml4IGJhc2VkIG9uIHRoZSBn aXZlbiBwYXJhbWV0ZXJzCisgICAgIC0gYSAobnVtYmVyKQorICAgICAtIGIg KG51bWJlcikKKyAgICAgLSBjIChudW1iZXIpCisgICAgIC0gZCAobnVtYmVy KQorICAgICAtIGUgKG51bWJlcikKKyAgICAgLSBmIChudW1iZXIpCisgICAg ICogb3IKKyAgICAgLSBzdmdNYXRyaXggKFNWR01hdHJpeCkKKyAgICAgPSAo b2JqZWN0KSBATWF0cml4CisgICAgXCovCisgICAgU25hcC5tYXRyaXggPSBm dW5jdGlvbiAoYSwgYiwgYywgZCwgZSwgZikgeworICAgICAgICByZXR1cm4g bmV3IE1hdHJpeChhLCBiLCBjLCBkLCBlLCBmKTsKKyAgICB9OworfSk7Cisv LyBDb3B5cmlnaHQgKGMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0 ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5k ZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl bnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9i dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8v d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBV bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv IGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0 aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT LAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhl IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcg cGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGlj ZW5zZS4KK1NuYXAucGx1Z2luKGZ1bmN0aW9uIChTbmFwLCBFbGVtZW50LCBQ YXBlciwgZ2xvYiwgRnJhZ21lbnQpIHsKKyAgICB2YXIgaGFzID0gImhhc093 blByb3BlcnR5IiwKKyAgICAgICAgbWFrZSA9IFNuYXAuXy5tYWtlLAorICAg ICAgICB3cmFwID0gU25hcC5fLndyYXAsCisgICAgICAgIGlzID0gU25hcC5p cywKKyAgICAgICAgZ2V0U29tZURlZnMgPSBTbmFwLl8uZ2V0U29tZURlZnMs CisgICAgICAgIHJlVVJMVmFsdWUgPSAvXnVybFwoIz8oW14pXSspXCkkLywK KyAgICAgICAgJCA9IFNuYXAuXy4kLAorICAgICAgICBVUkwgPSBTbmFwLnVy bCwKKyAgICAgICAgU3RyID0gU3RyaW5nLAorICAgICAgICBzZXBhcmF0b3Ig PSBTbmFwLl8uc2VwYXJhdG9yLAorICAgICAgICBFID0gIiI7CisgICAgLy8g QXR0cmlidXRlcyBldmVudCBoYW5kbGVycworICAgIGV2ZS5vbigic25hcC51 dGlsLmF0dHIubWFzayIsIGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBp ZiAodmFsdWUgaW5zdGFuY2VvZiBFbGVtZW50IHx8IHZhbHVlIGluc3RhbmNl b2YgRnJhZ21lbnQpIHsKKyAgICAgICAgICAgIGV2ZS5zdG9wKCk7CisgICAg ICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGcmFnbWVudCAmJiB2YWx1 ZS5ub2RlLmNoaWxkTm9kZXMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAg ICAgICB2YWx1ZSA9IHZhbHVlLm5vZGUuZmlyc3RDaGlsZDsKKyAgICAgICAg ICAgICAgICBnZXRTb21lRGVmcyh0aGlzKS5hcHBlbmRDaGlsZCh2YWx1ZSk7 CisgICAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwKHZhbHVlKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2YWx1ZS50eXBlID09ICJtYXNr IikgeworICAgICAgICAgICAgICAgIHZhciBtYXNrID0gdmFsdWU7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1hc2sgPSBtYWtl KCJtYXNrIiwgZ2V0U29tZURlZnModGhpcykpOworICAgICAgICAgICAgICAg IG1hc2subm9kZS5hcHBlbmRDaGlsZCh2YWx1ZS5ub2RlKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICFtYXNrLm5vZGUuaWQgJiYgJChtYXNrLm5v ZGUsIHsKKyAgICAgICAgICAgICAgICBpZDogbWFzay5pZAorICAgICAgICAg ICAgfSk7CisgICAgICAgICAgICAkKHRoaXMubm9kZSwgeworICAgICAgICAg ICAgICAgIG1hc2s6IFVSTChtYXNrLmlkKQorICAgICAgICAgICAgfSk7Cisg ICAgICAgIH0KKyAgICB9KTsKKyAgICAoZnVuY3Rpb24gKGNsaXBJdCkgewor ICAgICAgICBldmUub24oInNuYXAudXRpbC5hdHRyLmNsaXAiLCBjbGlwSXQp OworICAgICAgICBldmUub24oInNuYXAudXRpbC5hdHRyLmNsaXAtcGF0aCIs IGNsaXBJdCk7CisgICAgICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIuY2xp cFBhdGgiLCBjbGlwSXQpOworICAgIH0oZnVuY3Rpb24gKHZhbHVlKSB7Cisg ICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUg aW5zdGFuY2VvZiBGcmFnbWVudCkgeworICAgICAgICAgICAgZXZlLnN0b3Ao KTsKKyAgICAgICAgICAgIGlmICh2YWx1ZS50eXBlID09ICJjbGlwUGF0aCIp IHsKKyAgICAgICAgICAgICAgICB2YXIgY2xpcCA9IHZhbHVlOworICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjbGlwID0gbWFrZSgi Y2xpcFBhdGgiLCBnZXRTb21lRGVmcyh0aGlzKSk7CisgICAgICAgICAgICAg ICAgY2xpcC5ub2RlLmFwcGVuZENoaWxkKHZhbHVlLm5vZGUpOworICAgICAg ICAgICAgICAgICFjbGlwLm5vZGUuaWQgJiYgJChjbGlwLm5vZGUsIHsKKyAg ICAgICAgICAgICAgICAgICAgaWQ6IGNsaXAuaWQKKyAgICAgICAgICAgICAg ICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQodGhpcy5ub2Rl LCB7CisgICAgICAgICAgICAgICAgImNsaXAtcGF0aCI6IFVSTChjbGlwLm5v ZGUuaWQgfHwgY2xpcC5pZCkKKyAgICAgICAgICAgIH0pOworICAgICAgICB9 CisgICAgfSkpOworICAgIGZ1bmN0aW9uIGZpbGxTdHJva2UobmFtZSkgewor ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgICAg ICBldmUuc3RvcCgpOworICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNl b2YgRnJhZ21lbnQgJiYgdmFsdWUubm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA9 PSAxICYmCisgICAgICAgICAgICAgICAgKHZhbHVlLm5vZGUuZmlyc3RDaGls ZC50YWdOYW1lID09ICJyYWRpYWxHcmFkaWVudCIgfHwKKyAgICAgICAgICAg ICAgICB2YWx1ZS5ub2RlLmZpcnN0Q2hpbGQudGFnTmFtZSA9PSAibGluZWFy R3JhZGllbnQiIHx8CisgICAgICAgICAgICAgICAgdmFsdWUubm9kZS5maXJz dENoaWxkLnRhZ05hbWUgPT0gInBhdHRlcm4iKSkgeworICAgICAgICAgICAg ICAgIHZhbHVlID0gdmFsdWUubm9kZS5maXJzdENoaWxkOworICAgICAgICAg ICAgICAgIGdldFNvbWVEZWZzKHRoaXMpLmFwcGVuZENoaWxkKHZhbHVlKTsK KyAgICAgICAgICAgICAgICB2YWx1ZSA9IHdyYXAodmFsdWUpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRWxl bWVudCkgeworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50eXBlID09ICJy YWRpYWxHcmFkaWVudCIgfHwgdmFsdWUudHlwZSA9PSAibGluZWFyR3JhZGll bnQiCisgICAgICAgICAgICAgICAgICAgfHwgdmFsdWUudHlwZSA9PSAicGF0 dGVybiIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5ub2Rl LmlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAkKHZhbHVlLm5vZGUs IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogdmFsdWUuaWQK KyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHZhciBmaWxsID0gVVJMKHZh bHVlLm5vZGUuaWQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICAgICAgICAgIGZpbGwgPSB2YWx1ZS5hdHRyKG5hbWUpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgZmlsbCA9IFNuYXAuY29sb3IodmFsdWUpOworICAgICAgICAg ICAgICAgIGlmIChmaWxsLmVycm9yKSB7CisgICAgICAgICAgICAgICAgICAg IHZhciBncmFkID0gU25hcChnZXRTb21lRGVmcyh0aGlzKS5vd25lclNWR0Vs ZW1lbnQpLmdyYWRpZW50KHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg aWYgKGdyYWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZ3Jh ZC5ub2RlLmlkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChn cmFkLm5vZGUsIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aWQ6IGdyYWQuaWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsK KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgICAgIGZpbGwgPSBVUkwoZ3JhZC5ub2RlLmlkKTsKKyAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZp bGwgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZpbGwgPSBT dHIoZmlsbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICAgICAgdmFyIGF0dHJzID0ge307CisgICAgICAgICAgICBhdHRy c1tuYW1lXSA9IGZpbGw7CisgICAgICAgICAgICAkKHRoaXMubm9kZSwgYXR0 cnMpOworICAgICAgICAgICAgdGhpcy5ub2RlLnN0eWxlW25hbWVdID0gRTsK KyAgICAgICAgfTsKKyAgICB9CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0 ci5maWxsIiwgZmlsbFN0cm9rZSgiZmlsbCIpKTsKKyAgICBldmUub24oInNu YXAudXRpbC5hdHRyLnN0cm9rZSIsIGZpbGxTdHJva2UoInN0cm9rZSIpKTsK KyAgICB2YXIgZ3JhZHJnID0gL14oW2xyXSkoPzpcKChbXildKilcKSk/KC4q KSQvaTsKKyAgICBldmUub24oInNuYXAudXRpbC5ncmFkLnBhcnNlIiwgZnVu Y3Rpb24gcGFyc2VHcmFkKHN0cmluZykgeworICAgICAgICBzdHJpbmcgPSBT dHIoc3RyaW5nKTsKKyAgICAgICAgdmFyIHRva2VucyA9IHN0cmluZy5tYXRj aChncmFkcmcpOworICAgICAgICBpZiAoIXRva2VucykgeworICAgICAgICAg ICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHR5cGUg PSB0b2tlbnNbMV0sCisgICAgICAgICAgICBwYXJhbXMgPSB0b2tlbnNbMl0s CisgICAgICAgICAgICBzdG9wcyA9IHRva2Vuc1szXTsKKyAgICAgICAgcGFy YW1zID0gcGFyYW1zLnNwbGl0KC9ccyosXHMqLykubWFwKGZ1bmN0aW9uIChl bCkgeworICAgICAgICAgICAgcmV0dXJuICtlbCA9PSBlbCA/ICtlbCA6IGVs OworICAgICAgICB9KTsKKyAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPT0g MSAmJiBwYXJhbXNbMF0gPT0gMCkgeworICAgICAgICAgICAgcGFyYW1zID0g W107CisgICAgICAgIH0KKyAgICAgICAgc3RvcHMgPSBzdG9wcy5zcGxpdCgi LSIpOworICAgICAgICBzdG9wcyA9IHN0b3BzLm1hcChmdW5jdGlvbiAoZWwp IHsKKyAgICAgICAgICAgIGVsID0gZWwuc3BsaXQoIjoiKTsKKyAgICAgICAg ICAgIHZhciBvdXQgPSB7CisgICAgICAgICAgICAgICAgY29sb3I6IGVsWzBd CisgICAgICAgICAgICB9OworICAgICAgICAgICAgaWYgKGVsWzFdKSB7Cisg ICAgICAgICAgICAgICAgb3V0Lm9mZnNldCA9IHBhcnNlRmxvYXQoZWxbMV0p OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG91dDsKKyAg ICAgICAgfSk7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB0eXBl OiB0eXBlLAorICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsCisgICAgICAg ICAgICBzdG9wczogc3RvcHMKKyAgICAgICAgfTsKKyAgICB9KTsKKworICAg IGV2ZS5vbigic25hcC51dGlsLmF0dHIuZCIsIGZ1bmN0aW9uICh2YWx1ZSkg eworICAgICAgICBldmUuc3RvcCgpOworICAgICAgICBpZiAoaXModmFsdWUs ICJhcnJheSIpICYmIGlzKHZhbHVlWzBdLCAiYXJyYXkiKSkgeworICAgICAg ICAgICAgdmFsdWUgPSBTbmFwLnBhdGgudG9TdHJpbmcuY2FsbCh2YWx1ZSk7 CisgICAgICAgIH0KKyAgICAgICAgdmFsdWUgPSBTdHIodmFsdWUpOworICAg ICAgICBpZiAodmFsdWUubWF0Y2goL1tydW9dL2kpKSB7CisgICAgICAgICAg ICB2YWx1ZSA9IFNuYXAucGF0aC50b0Fic29sdXRlKHZhbHVlKTsKKyAgICAg ICAgfQorICAgICAgICAkKHRoaXMubm9kZSwge2Q6IHZhbHVlfSk7CisgICAg fSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIuI3RleHQiLCBm dW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgZXZlLnN0b3AoKTsKKyAgICAg ICAgdmFsdWUgPSBTdHIodmFsdWUpOworICAgICAgICB2YXIgdHh0ID0gZ2xv Yi5kb2MuY3JlYXRlVGV4dE5vZGUodmFsdWUpOworICAgICAgICB3aGlsZSAo dGhpcy5ub2RlLmZpcnN0Q2hpbGQpIHsKKyAgICAgICAgICAgIHRoaXMubm9k ZS5yZW1vdmVDaGlsZCh0aGlzLm5vZGUuZmlyc3RDaGlsZCk7CisgICAgICAg IH0KKyAgICAgICAgdGhpcy5ub2RlLmFwcGVuZENoaWxkKHR4dCk7CisgICAg fSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIucGF0aCIsIGZ1 bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBldmUuc3RvcCgpOworICAgICAg ICB0aGlzLmF0dHIoe2Q6IHZhbHVlfSk7CisgICAgfSkoLTEpOworICAgIGV2 ZS5vbigic25hcC51dGlsLmF0dHIuY2xhc3MiLCBmdW5jdGlvbiAodmFsdWUp IHsKKyAgICAgICAgZXZlLnN0b3AoKTsKKyAgICAgICAgdGhpcy5ub2RlLmNs YXNzTmFtZS5iYXNlVmFsID0gdmFsdWU7CisgICAgfSkoLTEpOworICAgIGV2 ZS5vbigic25hcC51dGlsLmF0dHIudmlld0JveCIsIGZ1bmN0aW9uICh2YWx1 ZSkgeworICAgICAgICB2YXIgdmI7CisgICAgICAgIGlmIChpcyh2YWx1ZSwg Im9iamVjdCIpICYmICJ4IiBpbiB2YWx1ZSkgeworICAgICAgICAgICAgdmIg PSBbdmFsdWUueCwgdmFsdWUueSwgdmFsdWUud2lkdGgsIHZhbHVlLmhlaWdo dF0uam9pbigiICIpOworICAgICAgICB9IGVsc2UgaWYgKGlzKHZhbHVlLCAi YXJyYXkiKSkgeworICAgICAgICAgICAgdmIgPSB2YWx1ZS5qb2luKCIgIik7 CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB2YiA9IHZhbHVlOwor ICAgICAgICB9CisgICAgICAgICQodGhpcy5ub2RlLCB7CisgICAgICAgICAg ICB2aWV3Qm94OiB2YgorICAgICAgICB9KTsKKyAgICAgICAgZXZlLnN0b3Ao KTsKKyAgICB9KSgtMSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci50 cmFuc2Zvcm0iLCBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgdGhpcy50 cmFuc2Zvcm0odmFsdWUpOworICAgICAgICBldmUuc3RvcCgpOworICAgIH0p KC0xKTsKKyAgICBldmUub24oInNuYXAudXRpbC5hdHRyLnIiLCBmdW5jdGlv biAodmFsdWUpIHsKKyAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAicmVjdCIp IHsKKyAgICAgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgICAgICAkKHRo aXMubm9kZSwgeworICAgICAgICAgICAgICAgIHJ4OiB2YWx1ZSwKKyAgICAg ICAgICAgICAgICByeTogdmFsdWUKKyAgICAgICAgICAgIH0pOworICAgICAg ICB9CisgICAgfSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIu dGV4dHBhdGgiLCBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgZXZlLnN0 b3AoKTsKKyAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAidGV4dCIpIHsKKyAg ICAgICAgICAgIHZhciBpZCwgdHAsIG5vZGU7CisgICAgICAgICAgICBpZiAo IXZhbHVlICYmIHRoaXMudGV4dFBhdGgpIHsKKyAgICAgICAgICAgICAgICB0 cCA9IHRoaXMudGV4dFBhdGg7CisgICAgICAgICAgICAgICAgd2hpbGUgKHRw Lm5vZGUuZmlyc3RDaGlsZCkgeworICAgICAgICAgICAgICAgICAgICB0aGlz Lm5vZGUuYXBwZW5kQ2hpbGQodHAubm9kZS5maXJzdENoaWxkKTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdHAucmVtb3ZlKCk7Cisg ICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudGV4dFBhdGg7CisgICAgICAg ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKGlzKHZhbHVlLCAic3RyaW5nIikpIHsKKyAgICAgICAgICAgICAgICB2 YXIgZGVmcyA9IGdldFNvbWVEZWZzKHRoaXMpLAorICAgICAgICAgICAgICAg ICAgICBwYXRoID0gd3JhcChkZWZzLnBhcmVudE5vZGUpLnBhdGgodmFsdWUp OworICAgICAgICAgICAgICAgIGRlZnMuYXBwZW5kQ2hpbGQocGF0aC5ub2Rl KTsKKyAgICAgICAgICAgICAgICBpZCA9IHBhdGguaWQ7CisgICAgICAgICAg ICAgICAgcGF0aC5hdHRyKHtpZDogaWR9KTsKKyAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB3cmFwKHZhbHVlKTsKKyAg ICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBFbGVtZW50KSB7 CisgICAgICAgICAgICAgICAgICAgIGlkID0gdmFsdWUuYXR0cigiaWQiKTsK KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpZCkgeworICAgICAgICAgICAg ICAgICAgICAgICAgaWQgPSB2YWx1ZS5pZDsKKyAgICAgICAgICAgICAgICAg ICAgICAgIHZhbHVlLmF0dHIoe2lkOiBpZH0pOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKGlkKSB7CisgICAgICAgICAgICAgICAgdHAgPSB0aGlz LnRleHRQYXRoOworICAgICAgICAgICAgICAgIG5vZGUgPSB0aGlzLm5vZGU7 CisgICAgICAgICAgICAgICAgaWYgKHRwKSB7CisgICAgICAgICAgICAgICAg ICAgIHRwLmF0dHIoeyJ4bGluazpocmVmIjogIiMiICsgaWR9KTsKKyAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cCA9 ICQoInRleHRQYXRoIiwgeworICAgICAgICAgICAgICAgICAgICAgICAgInhs aW5rOmhyZWYiOiAiIyIgKyBpZAorICAgICAgICAgICAgICAgICAgICB9KTsK KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG5vZGUuZmlyc3RDaGlsZCkg eworICAgICAgICAgICAgICAgICAgICAgICAgdHAuYXBwZW5kQ2hpbGQobm9k ZS5maXJzdENoaWxkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICBub2RlLmFwcGVuZENoaWxkKHRwKTsKKyAgICAgICAg ICAgICAgICAgICAgdGhpcy50ZXh0UGF0aCA9IHdyYXAodHApOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0p KC0xKTsKKyAgICBldmUub24oInNuYXAudXRpbC5hdHRyLnRleHQiLCBmdW5j dGlvbiAodmFsdWUpIHsKKyAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAidGV4 dCIpIHsKKyAgICAgICAgICAgIHZhciBpID0gMCwKKyAgICAgICAgICAgICAg ICBub2RlID0gdGhpcy5ub2RlLAorICAgICAgICAgICAgICAgIHR1bmVyID0g ZnVuY3Rpb24gKGNodW5rKSB7CisgICAgICAgICAgICAgICAgICAgIHZhciBv dXQgPSAkKCJ0c3BhbiIpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXMo Y2h1bmssICJhcnJheSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBm b3IgKHZhciBpID0gMDsgaSA8IGNodW5rLmxlbmd0aDsgaSsrKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgb3V0LmFwcGVuZENoaWxkKHR1bmVy KGNodW5rW2ldKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBvdXQuYXBwZW5kQ2hpbGQoZ2xvYi5kb2MuY3JlYXRlVGV4dE5vZGUo Y2h1bmspKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgICAgICBvdXQubm9ybWFsaXplICYmIG91dC5ub3JtYWxpemUoKTsKKyAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dDsKKyAgICAgICAgICAgICAg ICB9OworICAgICAgICAgICAgd2hpbGUgKG5vZGUuZmlyc3RDaGlsZCkgewor ICAgICAgICAgICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5maXJzdENo aWxkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciB0dW5lZCA9 IHR1bmVyKHZhbHVlKTsKKyAgICAgICAgICAgIHdoaWxlICh0dW5lZC5maXJz dENoaWxkKSB7CisgICAgICAgICAgICAgICAgbm9kZS5hcHBlbmRDaGlsZCh0 dW5lZC5maXJzdENoaWxkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgICBldmUuc3RvcCgpOworICAgIH0pKC0xKTsKKyAgICBmdW5jdGlv biBzZXRGb250U2l6ZSh2YWx1ZSkgeworICAgICAgICBldmUuc3RvcCgpOwor ICAgICAgICBpZiAodmFsdWUgPT0gK3ZhbHVlKSB7CisgICAgICAgICAgICB2 YWx1ZSArPSAicHgiOworICAgICAgICB9CisgICAgICAgIHRoaXMubm9kZS5z dHlsZS5mb250U2l6ZSA9IHZhbHVlOworICAgIH0KKyAgICBldmUub24oInNu YXAudXRpbC5hdHRyLmZvbnRTaXplIiwgc2V0Rm9udFNpemUpKC0xKTsKKyAg ICBldmUub24oInNuYXAudXRpbC5hdHRyLmZvbnQtc2l6ZSIsIHNldEZvbnRT aXplKSgtMSk7CisKKworICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIu dHJhbnNmb3JtIiwgZnVuY3Rpb24gKCkgeworICAgICAgICBldmUuc3RvcCgp OworICAgICAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0oKTsKKyAgICB9KSgt MSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci50ZXh0cGF0aCIs IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXZlLnN0b3AoKTsKKyAgICAgICAg cmV0dXJuIHRoaXMudGV4dFBhdGg7CisgICAgfSkoLTEpOworICAgIC8vIE1h cmtlcnMKKyAgICAoZnVuY3Rpb24gKCkgeworICAgICAgICBmdW5jdGlvbiBn ZXR0ZXIoZW5kKSB7CisgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkg eworICAgICAgICAgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgICAgICAg ICAgdmFyIHN0eWxlID0gZ2xvYi5kb2MuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0 ZWRTdHlsZSh0aGlzLm5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoIm1h cmtlci0iICsgZW5kKTsKKyAgICAgICAgICAgICAgICBpZiAoc3R5bGUgPT0g Im5vbmUiKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHlsZTsK KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg ICByZXR1cm4gU25hcChnbG9iLmRvYy5nZXRFbGVtZW50QnlJZChzdHlsZS5t YXRjaChyZVVSTFZhbHVlKVsxXSkpOworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gc2V0 dGVyKGVuZCkgeworICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1 ZSkgeworICAgICAgICAgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgICAg ICAgICAgdmFyIG5hbWUgPSAibWFya2VyIiArIGVuZC5jaGFyQXQoMCkudG9V cHBlckNhc2UoKSArIGVuZC5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICAg ICAgaWYgKHZhbHVlID09ICIiIHx8ICF2YWx1ZSkgeworICAgICAgICAgICAg ICAgICAgICB0aGlzLm5vZGUuc3R5bGVbbmFtZV0gPSAibm9uZSI7CisgICAg ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGUgPT0gIm1hcmtlciIpIHsK KyAgICAgICAgICAgICAgICAgICAgdmFyIGlkID0gdmFsdWUubm9kZS5pZDsK KyAgICAgICAgICAgICAgICAgICAgaWYgKCFpZCkgeworICAgICAgICAgICAg ICAgICAgICAgICAgJCh2YWx1ZS5ub2RlLCB7aWQ6IHZhbHVlLmlkfSk7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdGhp cy5ub2RlLnN0eWxlW25hbWVdID0gVVJMKGlkKTsKKyAgICAgICAgICAgICAg ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg IH07CisgICAgICAgIH0KKyAgICAgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0 YXR0ci5tYXJrZXItZW5kIiwgZ2V0dGVyKCJlbmQiKSkoLTEpOworICAgICAg ICBldmUub24oInNuYXAudXRpbC5nZXRhdHRyLm1hcmtlckVuZCIsIGdldHRl cigiZW5kIikpKC0xKTsKKyAgICAgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0 YXR0ci5tYXJrZXItc3RhcnQiLCBnZXR0ZXIoInN0YXJ0IikpKC0xKTsKKyAg ICAgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5tYXJrZXJTdGFydCIs IGdldHRlcigic3RhcnQiKSkoLTEpOworICAgICAgICBldmUub24oInNuYXAu dXRpbC5nZXRhdHRyLm1hcmtlci1taWQiLCBnZXR0ZXIoIm1pZCIpKSgtMSk7 CisgICAgICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIubWFya2VyTWlk IiwgZ2V0dGVyKCJtaWQiKSkoLTEpOworICAgICAgICBldmUub24oInNuYXAu dXRpbC5hdHRyLm1hcmtlci1lbmQiLCBzZXR0ZXIoImVuZCIpKSgtMSk7Cisg ICAgICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIubWFya2VyRW5kIiwgc2V0 dGVyKCJlbmQiKSkoLTEpOworICAgICAgICBldmUub24oInNuYXAudXRpbC5h dHRyLm1hcmtlci1zdGFydCIsIHNldHRlcigic3RhcnQiKSkoLTEpOworICAg ICAgICBldmUub24oInNuYXAudXRpbC5hdHRyLm1hcmtlclN0YXJ0Iiwgc2V0 dGVyKCJzdGFydCIpKSgtMSk7CisgICAgICAgIGV2ZS5vbigic25hcC51dGls LmF0dHIubWFya2VyLW1pZCIsIHNldHRlcigibWlkIikpKC0xKTsKKyAgICAg ICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci5tYXJrZXJNaWQiLCBzZXR0ZXIo Im1pZCIpKSgtMSk7CisgICAgfSgpKTsKKyAgICBldmUub24oInNuYXAudXRp bC5nZXRhdHRyLnIiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlz LnR5cGUgPT0gInJlY3QiICYmICQodGhpcy5ub2RlLCAicngiKSA9PSAkKHRo aXMubm9kZSwgInJ5IikpIHsKKyAgICAgICAgICAgIGV2ZS5zdG9wKCk7Cisg ICAgICAgICAgICByZXR1cm4gJCh0aGlzLm5vZGUsICJyeCIpOworICAgICAg ICB9CisgICAgfSkoLTEpOworICAgIGZ1bmN0aW9uIHRleHRFeHRyYWN0KG5v ZGUpIHsKKyAgICAgICAgdmFyIG91dCA9IFtdOworICAgICAgICB2YXIgY2hp bGRyZW4gPSBub2RlLmNoaWxkTm9kZXM7CisgICAgICAgIGZvciAodmFyIGkg PSAwLCBpaSA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAg ICAgICAgICAgIHZhciBjaGkgPSBjaGlsZHJlbltpXTsKKyAgICAgICAgICAg IGlmIChjaGkubm9kZVR5cGUgPT0gMykgeworICAgICAgICAgICAgICAgIG91 dC5wdXNoKGNoaS5ub2RlVmFsdWUpOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKGNoaS50YWdOYW1lID09ICJ0c3BhbiIpIHsKKyAgICAgICAg ICAgICAgICBpZiAoY2hpLmNoaWxkTm9kZXMubGVuZ3RoID09IDEgJiYgY2hp LmZpcnN0Q2hpbGQubm9kZVR5cGUgPT0gMykgeworICAgICAgICAgICAgICAg ICAgICBvdXQucHVzaChjaGkuZmlyc3RDaGlsZC5ub2RlVmFsdWUpOworICAg ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG91 dC5wdXNoKHRleHRFeHRyYWN0KGNoaSkpOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb3V0 OworICAgIH0KKyAgICBldmUub24oInNuYXAudXRpbC5nZXRhdHRyLnRleHQi LCBmdW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gInRl eHQiIHx8IHRoaXMudHlwZSA9PSAidHNwYW4iKSB7CisgICAgICAgICAgICBl dmUuc3RvcCgpOworICAgICAgICAgICAgdmFyIG91dCA9IHRleHRFeHRyYWN0 KHRoaXMubm9kZSk7CisgICAgICAgICAgICByZXR1cm4gb3V0Lmxlbmd0aCA9 PSAxID8gb3V0WzBdIDogb3V0OworICAgICAgICB9CisgICAgfSkoLTEpOwor ICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIuI3RleHQiLCBmdW5jdGlv biAoKSB7CisgICAgICAgIHJldHVybiB0aGlzLm5vZGUudGV4dENvbnRlbnQ7 CisgICAgfSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIu dmlld0JveCIsIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgZXZlLnN0b3AoKTsK KyAgICAgICAgdmFyIHZiID0gJCh0aGlzLm5vZGUsICJ2aWV3Qm94Iik7Cisg ICAgICAgIGlmICh2YikgeworICAgICAgICAgICAgdmIgPSB2Yi5zcGxpdChz ZXBhcmF0b3IpOworICAgICAgICAgICAgcmV0dXJuIFNuYXAuXy5ib3goK3Zi WzBdLCArdmJbMV0sICt2YlsyXSwgK3ZiWzNdKTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0pKC0x KTsKKyAgICBldmUub24oInNuYXAudXRpbC5nZXRhdHRyLnBvaW50cyIsIGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHAgPSAkKHRoaXMubm9kZSwgInBv aW50cyIpOworICAgICAgICBldmUuc3RvcCgpOworICAgICAgICBpZiAocCkg eworICAgICAgICAgICAgcmV0dXJuIHAuc3BsaXQoc2VwYXJhdG9yKTsKKyAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg fQorICAgIH0pKC0xKTsKKyAgICBldmUub24oInNuYXAudXRpbC5nZXRhdHRy LnBhdGgiLCBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBwID0gJCh0aGlz Lm5vZGUsICJkIik7CisgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgIHJl dHVybiBwOworICAgIH0pKC0xKTsKKyAgICBldmUub24oInNuYXAudXRpbC5n ZXRhdHRyLmNsYXNzIiwgZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g dGhpcy5ub2RlLmNsYXNzTmFtZS5iYXNlVmFsOworICAgIH0pKC0xKTsKKyAg ICBmdW5jdGlvbiBnZXRGb250U2l6ZSgpIHsKKyAgICAgICAgZXZlLnN0b3Ao KTsKKyAgICAgICAgcmV0dXJuIHRoaXMubm9kZS5zdHlsZS5mb250U2l6ZTsK KyAgICB9CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5mb250U2l6 ZSIsIGdldEZvbnRTaXplKSgtMSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwu Z2V0YXR0ci5mb250LXNpemUiLCBnZXRGb250U2l6ZSkoLTEpOworfSk7CisK Ky8vIENvcHlyaWdodCAoYykgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9y YXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1 bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxp Y2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0 IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkg b2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vIGh0dHA6 Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8v IFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQg dG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVy IHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFT SVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBB TlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0 aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmlu ZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBM aWNlbnNlLgorU25hcC5wbHVnaW4oZnVuY3Rpb24gKFNuYXAsIEVsZW1lbnQs IFBhcGVyLCBnbG9iLCBGcmFnbWVudCkgeworICAgIHZhciByZ05vdFNwYWNl ID0gL1xTKy9nLAorICAgICAgICByZ0JhZFNwYWNlID0gL1tcdFxyXG5cZl0v ZywKKyAgICAgICAgcmdUcmltID0gLyheXHMrfFxzKyQpL2csCisgICAgICAg IFN0ciA9IFN0cmluZywKKyAgICAgICAgZWxwcm90byA9IEVsZW1lbnQucHJv dG90eXBlOworICAgIC8qXAorICAgICAqIEVsZW1lbnQuYWRkQ2xhc3MKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZHMgZ2l2ZW4gY2xh c3MgbmFtZSBvciBsaXN0IG9mIGNsYXNzIG5hbWVzIHRvIHRoZSBlbGVtZW50 LgorICAgICAtIHZhbHVlIChzdHJpbmcpIGNsYXNzIG5hbWUgb3Igc3BhY2Ug c2VwYXJhdGVkIGxpc3Qgb2YgY2xhc3MgbmFtZXMKKyAgICAgKioKKyAgICAg PSAoRWxlbWVudCkgb3JpZ2luYWwgZWxlbWVudC4KKyAgICBcKi8KKyAgICBl bHByb3RvLmFkZENsYXNzID0gZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAg IHZhciBjbGFzc2VzID0gU3RyKHZhbHVlIHx8ICIiKS5tYXRjaChyZ05vdFNw YWNlKSB8fCBbXSwKKyAgICAgICAgICAgIGVsZW0gPSB0aGlzLm5vZGUsCisg ICAgICAgICAgICBjbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFtZS5iYXNlVmFs LAorICAgICAgICAgICAgY3VyQ2xhc3NlcyA9IGNsYXNzTmFtZS5tYXRjaChy Z05vdFNwYWNlKSB8fCBbXSwKKyAgICAgICAgICAgIGosCisgICAgICAgICAg ICBwb3MsCisgICAgICAgICAgICBjbGF6eiwKKyAgICAgICAgICAgIGZpbmFs VmFsdWU7CisKKyAgICAgICAgaWYgKGNsYXNzZXMubGVuZ3RoKSB7CisgICAg ICAgICAgICBqID0gMDsKKyAgICAgICAgICAgIHdoaWxlICgoY2xhenogPSBj bGFzc2VzW2orK10pKSB7CisgICAgICAgICAgICAgICAgcG9zID0gY3VyQ2xh c3Nlcy5pbmRleE9mKGNsYXp6KTsKKyAgICAgICAgICAgICAgICBpZiAoIX5w b3MpIHsKKyAgICAgICAgICAgICAgICAgICAgY3VyQ2xhc3Nlcy5wdXNoKGNs YXp6KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgIGZpbmFsVmFsdWUgPSBjdXJDbGFzc2VzLmpvaW4oIiAiKTsK KyAgICAgICAgICAgIGlmIChjbGFzc05hbWUgIT0gZmluYWxWYWx1ZSkgewor ICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lLmJhc2VWYWwgPSBmaW5h bFZhbHVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl dHVybiB0aGlzOworICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC5y ZW1vdmVDbGFzcworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICog UmVtb3ZlcyBnaXZlbiBjbGFzcyBuYW1lIG9yIGxpc3Qgb2YgY2xhc3MgbmFt ZXMgZnJvbSB0aGUgZWxlbWVudC4KKyAgICAgLSB2YWx1ZSAoc3RyaW5nKSBj bGFzcyBuYW1lIG9yIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNsYXNzIG5h bWVzCisgICAgICoqCisgICAgID0gKEVsZW1lbnQpIG9yaWdpbmFsIGVsZW1l bnQuCisgICAgXCovCisgICAgZWxwcm90by5yZW1vdmVDbGFzcyA9IGZ1bmN0 aW9uICh2YWx1ZSkgeworICAgICAgICB2YXIgY2xhc3NlcyA9IFN0cih2YWx1 ZSB8fCAiIikubWF0Y2gocmdOb3RTcGFjZSkgfHwgW10sCisgICAgICAgICAg ICBlbGVtID0gdGhpcy5ub2RlLAorICAgICAgICAgICAgY2xhc3NOYW1lID0g ZWxlbS5jbGFzc05hbWUuYmFzZVZhbCwKKyAgICAgICAgICAgIGN1ckNsYXNz ZXMgPSBjbGFzc05hbWUubWF0Y2gocmdOb3RTcGFjZSkgfHwgW10sCisgICAg ICAgICAgICBqLAorICAgICAgICAgICAgcG9zLAorICAgICAgICAgICAgY2xh enosCisgICAgICAgICAgICBmaW5hbFZhbHVlOworICAgICAgICBpZiAoY3Vy Q2xhc3Nlcy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGogPSAwOworICAgICAg ICAgICAgd2hpbGUgKChjbGF6eiA9IGNsYXNzZXNbaisrXSkpIHsKKyAgICAg ICAgICAgICAgICBwb3MgPSBjdXJDbGFzc2VzLmluZGV4T2YoY2xhenopOwor ICAgICAgICAgICAgICAgIGlmICh+cG9zKSB7CisgICAgICAgICAgICAgICAg ICAgIGN1ckNsYXNzZXMuc3BsaWNlKHBvcywgMSk7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaW5hbFZhbHVl ID0gY3VyQ2xhc3Nlcy5qb2luKCIgIik7CisgICAgICAgICAgICBpZiAoY2xh c3NOYW1lICE9IGZpbmFsVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBlbGVt LmNsYXNzTmFtZS5iYXNlVmFsID0gZmluYWxWYWx1ZTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Owor ICAgIC8qXAorICAgICAqIEVsZW1lbnQuaGFzQ2xhc3MKKyAgICAgWyBtZXRo b2QgXQorICAgICAqKgorICAgICAqIENoZWNrcyBpZiB0aGUgZWxlbWVudCBo YXMgYSBnaXZlbiBjbGFzcyBuYW1lIGluIHRoZSBsaXN0IG9mIGNsYXNzIG5h bWVzIGFwcGxpZWQgdG8gaXQuCisgICAgIC0gdmFsdWUgKHN0cmluZykgY2xh c3MgbmFtZQorICAgICAqKgorICAgICA9IChib29sZWFuKSBgdHJ1ZWAgaWYg dGhlIGVsZW1lbnQgaGFzIGdpdmVuIGNsYXNzCisgICAgXCovCisgICAgZWxw cm90by5oYXNDbGFzcyA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICB2 YXIgZWxlbSA9IHRoaXMubm9kZSwKKyAgICAgICAgICAgIGNsYXNzTmFtZSA9 IGVsZW0uY2xhc3NOYW1lLmJhc2VWYWwsCisgICAgICAgICAgICBjdXJDbGFz c2VzID0gY2xhc3NOYW1lLm1hdGNoKHJnTm90U3BhY2UpIHx8IFtdOworICAg ICAgICByZXR1cm4gISF+Y3VyQ2xhc3Nlcy5pbmRleE9mKHZhbHVlKTsKKyAg ICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQudG9nZ2xlQ2xhc3MKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZCBvciByZW1vdmUg b25lIG9yIG1vcmUgY2xhc3NlcyBmcm9tIHRoZSBlbGVtZW50LCBkZXBlbmRp bmcgb24gZWl0aGVyCisgICAgICogdGhlIGNsYXNz4oCZcyBwcmVzZW5jZSBv ciB0aGUgdmFsdWUgb2YgdGhlIGBmbGFnYCBhcmd1bWVudC4KKyAgICAgLSB2 YWx1ZSAoc3RyaW5nKSBjbGFzcyBuYW1lIG9yIHNwYWNlIHNlcGFyYXRlZCBs aXN0IG9mIGNsYXNzIG5hbWVzCisgICAgIC0gZmxhZyAoYm9vbGVhbikgdmFs dWUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGNsYXNzIHNob3VsZCBiZSBh ZGRlZCBvciByZW1vdmVkCisgICAgICoqCisgICAgID0gKEVsZW1lbnQpIG9y aWdpbmFsIGVsZW1lbnQuCisgICAgXCovCisgICAgZWxwcm90by50b2dnbGVD bGFzcyA9IGZ1bmN0aW9uICh2YWx1ZSwgZmxhZykgeworICAgICAgICBpZiAo ZmxhZyAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoZmxhZykgeworICAg ICAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZENsYXNzKHZhbHVlKTsKKyAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRo aXMucmVtb3ZlQ2xhc3ModmFsdWUpOworICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIHZhciBjbGFzc2VzID0gKHZhbHVlIHx8ICIiKS5tYXRj aChyZ05vdFNwYWNlKSB8fCBbXSwKKyAgICAgICAgICAgIGVsZW0gPSB0aGlz Lm5vZGUsCisgICAgICAgICAgICBjbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFt ZS5iYXNlVmFsLAorICAgICAgICAgICAgY3VyQ2xhc3NlcyA9IGNsYXNzTmFt ZS5tYXRjaChyZ05vdFNwYWNlKSB8fCBbXSwKKyAgICAgICAgICAgIGosCisg ICAgICAgICAgICBwb3MsCisgICAgICAgICAgICBjbGF6eiwKKyAgICAgICAg ICAgIGZpbmFsVmFsdWU7CisgICAgICAgIGogPSAwOworICAgICAgICB3aGls ZSAoKGNsYXp6ID0gY2xhc3Nlc1tqKytdKSkgeworICAgICAgICAgICAgcG9z ID0gY3VyQ2xhc3Nlcy5pbmRleE9mKGNsYXp6KTsKKyAgICAgICAgICAgIGlm ICh+cG9zKSB7CisgICAgICAgICAgICAgICAgY3VyQ2xhc3Nlcy5zcGxpY2Uo cG9zLCAxKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgY3VyQ2xhc3Nlcy5wdXNoKGNsYXp6KTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorCisgICAgICAgIGZpbmFsVmFsdWUgPSBjdXJDbGFzc2VzLmpv aW4oIiAiKTsKKyAgICAgICAgaWYgKGNsYXNzTmFtZSAhPSBmaW5hbFZhbHVl KSB7CisgICAgICAgICAgICBlbGVtLmNsYXNzTmFtZS5iYXNlVmFsID0gZmlu YWxWYWx1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAg ICB9OworfSk7CisKKy8vIENvcHlyaWdodCAoYykgMjAxMyBBZG9iZSBTeXN0 ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisv LyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24g Mi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlz IGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4K Ky8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAor Ly8KKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNF LTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxh dyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3Ry aWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFu ICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09O RElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGll ZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1 YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25z IHVuZGVyIHRoZSBMaWNlbnNlLgorU25hcC5wbHVnaW4oZnVuY3Rpb24gKFNu YXAsIEVsZW1lbnQsIFBhcGVyLCBnbG9iLCBGcmFnbWVudCkgeworICAgIHZh ciBvcGVyYXRvcnMgPSB7CisgICAgICAgICAgICAiKyI6IGZ1bmN0aW9uICh4 LCB5KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB4ICsgeTsKKyAg ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgIi0iOiBmdW5jdGlvbiAo eCwgeSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4geCAtIHk7Cisg ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICIvIjogZnVuY3Rpb24g KHgsIHkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggLyB5Owor ICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAiKiI6IGZ1bmN0aW9u ICh4LCB5KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB4ICogeTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0sCisgICAgICAgIFN0ciA9 IFN0cmluZywKKyAgICAgICAgcmVVbml0ID0gL1thLXpdKyQvaSwKKyAgICAg ICAgcmVBZGRvbiA9IC9eXHMqKFsrXC1cLypdKVxzKj1ccyooW1xkLmVFK1wt XSspXHMqKFteXGRcc10rKT9ccyokLzsKKyAgICBmdW5jdGlvbiBnZXROdW1i ZXIodmFsKSB7CisgICAgICAgIHJldHVybiB2YWw7CisgICAgfQorICAgIGZ1 bmN0aW9uIGdldFVuaXQodW5pdCkgeworICAgICAgICByZXR1cm4gZnVuY3Rp b24gKHZhbCkgeworICAgICAgICAgICAgcmV0dXJuICt2YWwudG9GaXhlZCgz KSArIHVuaXQ7CisgICAgICAgIH07CisgICAgfQorICAgIGV2ZS5vbigic25h cC51dGlsLmF0dHIiLCBmdW5jdGlvbiAodmFsKSB7CisgICAgICAgIHZhciBw bHVzID0gU3RyKHZhbCkubWF0Y2gocmVBZGRvbik7CisgICAgICAgIGlmIChw bHVzKSB7CisgICAgICAgICAgICB2YXIgZXZudCA9IGV2ZS5udCgpLAorICAg ICAgICAgICAgICAgIG5hbWUgPSBldm50LnN1YnN0cmluZyhldm50Lmxhc3RJ bmRleE9mKCIuIikgKyAxKSwKKyAgICAgICAgICAgICAgICBhID0gdGhpcy5h dHRyKG5hbWUpLAorICAgICAgICAgICAgICAgIGF0ciA9IHt9OworICAgICAg ICAgICAgZXZlLnN0b3AoKTsKKyAgICAgICAgICAgIHZhciB1bml0ID0gcGx1 c1szXSB8fCAiIiwKKyAgICAgICAgICAgICAgICBhVW5pdCA9IGEubWF0Y2go cmVVbml0KSwKKyAgICAgICAgICAgICAgICBvcCA9IG9wZXJhdG9yc1twbHVz WzFdXTsKKyAgICAgICAgICAgIGlmIChhVW5pdCAmJiBhVW5pdCA9PSB1bml0 KSB7CisgICAgICAgICAgICAgICAgdmFsID0gb3AocGFyc2VGbG9hdChhKSwg K3BsdXNbMl0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICBhID0gdGhpcy5hc1BYKG5hbWUpOworICAgICAgICAgICAgICAgIHZh bCA9IG9wKHRoaXMuYXNQWChuYW1lKSwgdGhpcy5hc1BYKG5hbWUsIHBsdXNb Ml0gKyB1bml0KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo aXNOYU4oYSkgfHwgaXNOYU4odmFsKSkgeworICAgICAgICAgICAgICAgIHJl dHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF0cltuYW1lXSA9 IHZhbDsKKyAgICAgICAgICAgIHRoaXMuYXR0cihhdHIpOworICAgICAgICB9 CisgICAgfSkoLTEwKTsKKyAgICBldmUub24oInNuYXAudXRpbC5lcXVhbCIs IGZ1bmN0aW9uIChuYW1lLCBiKSB7CisgICAgICAgIHZhciBBLCBCLCBhID0g U3RyKHRoaXMuYXR0cihuYW1lKSB8fCAiIiksCisgICAgICAgICAgICBlbCA9 IHRoaXMsCisgICAgICAgICAgICBicGx1cyA9IFN0cihiKS5tYXRjaChyZUFk ZG9uKTsKKyAgICAgICAgaWYgKGJwbHVzKSB7CisgICAgICAgICAgICBldmUu c3RvcCgpOworICAgICAgICAgICAgdmFyIHVuaXQgPSBicGx1c1szXSB8fCAi IiwKKyAgICAgICAgICAgICAgICBhVW5pdCA9IGEubWF0Y2gocmVVbml0KSwK KyAgICAgICAgICAgICAgICBvcCA9IG9wZXJhdG9yc1ticGx1c1sxXV07Cisg ICAgICAgICAgICBpZiAoYVVuaXQgJiYgYVVuaXQgPT0gdW5pdCkgeworICAg ICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAgIGZy b206IHBhcnNlRmxvYXQoYSksCisgICAgICAgICAgICAgICAgICAgIHRvOiBv cChwYXJzZUZsb2F0KGEpLCArYnBsdXNbMl0pLAorICAgICAgICAgICAgICAg ICAgICBmOiBnZXRVbml0KGFVbml0KQorICAgICAgICAgICAgICAgIH07Cisg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGEgPSB0aGlz LmFzUFgobmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg ICAgICAgICAgICAgICAgZnJvbTogYSwKKyAgICAgICAgICAgICAgICAgICAg dG86IG9wKGEsIHRoaXMuYXNQWChuYW1lLCBicGx1c1syXSArIHVuaXQpKSwK KyAgICAgICAgICAgICAgICAgICAgZjogZ2V0TnVtYmVyCisgICAgICAgICAg ICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0pKC0x MCk7Cit9KTsKKy8vIENvcHlyaWdodCAoYykgMjAxMyBBZG9iZSBTeXN0ZW1z IEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBM aWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w ICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8v IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8K Ky8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu MAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1 dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB UyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K Ky8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdl IGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVu ZGVyIHRoZSBMaWNlbnNlLgorU25hcC5wbHVnaW4oZnVuY3Rpb24gKFNuYXAs IEVsZW1lbnQsIFBhcGVyLCBnbG9iLCBGcmFnbWVudCkgeworICAgIHZhciBw cm90byA9IFBhcGVyLnByb3RvdHlwZSwKKyAgICAgICAgaXMgPSBTbmFwLmlz OworICAgIC8qXAorICAgICAqIFBhcGVyLnJlY3QKKyAgICAgWyBtZXRob2Qg XQorICAgICAqCisgICAgICogRHJhd3MgYSByZWN0YW5nbGUKKyAgICAgKioK KyAgICAgLSB4IChudW1iZXIpIHggY29vcmRpbmF0ZSBvZiB0aGUgdG9wIGxl ZnQgY29ybmVyCisgICAgIC0geSAobnVtYmVyKSB5IGNvb3JkaW5hdGUgb2Yg dGhlIHRvcCBsZWZ0IGNvcm5lcgorICAgICAtIHdpZHRoIChudW1iZXIpIHdp ZHRoCisgICAgIC0gaGVpZ2h0IChudW1iZXIpIGhlaWdodAorICAgICAtIHJ4 IChudW1iZXIpICNvcHRpb25hbCBob3Jpem9udGFsIHJhZGl1cyBmb3Igcm91 bmRlZCBjb3JuZXJzLCBkZWZhdWx0IGlzIDAKKyAgICAgLSByeSAobnVtYmVy KSAjb3B0aW9uYWwgdmVydGljYWwgcmFkaXVzIGZvciByb3VuZGVkIGNvcm5l cnMsIGRlZmF1bHQgaXMgcnggb3IgMAorICAgICA9IChvYmplY3QpIHRoZSBg cmVjdGAgZWxlbWVudAorICAgICAqKgorICAgICA+IFVzYWdlCisgICAgIHwg Ly8gcmVndWxhciByZWN0YW5nbGUKKyAgICAgfCB2YXIgYyA9IHBhcGVyLnJl Y3QoMTAsIDEwLCA1MCwgNTApOworICAgICB8IC8vIHJlY3RhbmdsZSB3aXRo IHJvdW5kZWQgY29ybmVycworICAgICB8IHZhciBjID0gcGFwZXIucmVjdCg0 MCwgNDAsIDUwLCA1MCwgMTApOworICAgIFwqLworICAgIHByb3RvLnJlY3Qg PSBmdW5jdGlvbiAoeCwgeSwgdywgaCwgcngsIHJ5KSB7CisgICAgICAgIHZh ciBhdHRyOworICAgICAgICBpZiAocnkgPT0gbnVsbCkgeworICAgICAgICAg ICAgcnkgPSByeDsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXMoeCwgIm9i amVjdCIpICYmIHggPT0gIltvYmplY3QgT2JqZWN0XSIpIHsKKyAgICAgICAg ICAgIGF0dHIgPSB4OworICAgICAgICB9IGVsc2UgaWYgKHggIT0gbnVsbCkg eworICAgICAgICAgICAgYXR0ciA9IHsKKyAgICAgICAgICAgICAgICB4OiB4 LAorICAgICAgICAgICAgICAgIHk6IHksCisgICAgICAgICAgICAgICAgd2lk dGg6IHcsCisgICAgICAgICAgICAgICAgaGVpZ2h0OiBoCisgICAgICAgICAg ICB9OworICAgICAgICAgICAgaWYgKHJ4ICE9IG51bGwpIHsKKyAgICAgICAg ICAgICAgICBhdHRyLnJ4ID0gcng7CisgICAgICAgICAgICAgICAgYXR0ci5y eSA9IHJ5OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJl dHVybiB0aGlzLmVsKCJyZWN0IiwgYXR0cik7CisgICAgfTsKKyAgICAvKlwK KyAgICAgKiBQYXBlci5jaXJjbGUKKyAgICAgWyBtZXRob2QgXQorICAgICAq KgorICAgICAqIERyYXdzIGEgY2lyY2xlCisgICAgICoqCisgICAgIC0geCAo bnVtYmVyKSB4IGNvb3JkaW5hdGUgb2YgdGhlIGNlbnRyZQorICAgICAtIHkg KG51bWJlcikgeSBjb29yZGluYXRlIG9mIHRoZSBjZW50cmUKKyAgICAgLSBy IChudW1iZXIpIHJhZGl1cworICAgICA9IChvYmplY3QpIHRoZSBgY2lyY2xl YCBlbGVtZW50CisgICAgICoqCisgICAgID4gVXNhZ2UKKyAgICAgfCB2YXIg YyA9IHBhcGVyLmNpcmNsZSg1MCwgNTAsIDQwKTsKKyAgICBcKi8KKyAgICBw cm90by5jaXJjbGUgPSBmdW5jdGlvbiAoY3gsIGN5LCByKSB7CisgICAgICAg IHZhciBhdHRyOworICAgICAgICBpZiAoaXMoY3gsICJvYmplY3QiKSAmJiBj eCA9PSAiW29iamVjdCBPYmplY3RdIikgeworICAgICAgICAgICAgYXR0ciA9 IGN4OworICAgICAgICB9IGVsc2UgaWYgKGN4ICE9IG51bGwpIHsKKyAgICAg ICAgICAgIGF0dHIgPSB7CisgICAgICAgICAgICAgICAgY3g6IGN4LAorICAg ICAgICAgICAgICAgIGN5OiBjeSwKKyAgICAgICAgICAgICAgICByOiByCisg ICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlz LmVsKCJjaXJjbGUiLCBhdHRyKTsKKyAgICB9OworCisgICAgdmFyIHByZWxv YWQgPSAoZnVuY3Rpb24gKCkgeworICAgICAgICBmdW5jdGlvbiBvbmVycm9y KCkgeworICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxk KHRoaXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAo c3JjLCBmKSB7CisgICAgICAgICAgICB2YXIgaW1nID0gZ2xvYi5kb2MuY3Jl YXRlRWxlbWVudCgiaW1nIiksCisgICAgICAgICAgICAgICAgYm9keSA9IGds b2IuZG9jLmJvZHk7CisgICAgICAgICAgICBpbWcuc3R5bGUuY3NzVGV4dCA9 ICJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi05OTk5ZW07dG9wOi05OTk5ZW0i OworICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHsKKyAg ICAgICAgICAgICAgICBmLmNhbGwoaW1nKTsKKyAgICAgICAgICAgICAgICBp bWcub25sb2FkID0gaW1nLm9uZXJyb3IgPSBudWxsOworICAgICAgICAgICAg ICAgIGJvZHkucmVtb3ZlQ2hpbGQoaW1nKTsKKyAgICAgICAgICAgIH07Cisg ICAgICAgICAgICBpbWcub25lcnJvciA9IG9uZXJyb3I7CisgICAgICAgICAg ICBib2R5LmFwcGVuZENoaWxkKGltZyk7CisgICAgICAgICAgICBpbWcuc3Jj ID0gc3JjOworICAgICAgICB9OworICAgIH0oKSk7CisKKyAgICAvKlwKKyAg ICAgKiBQYXBlci5pbWFnZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogUGxhY2VzIGFuIGltYWdlIG9uIHRoZSBzdXJmYWNlCisgICAgICoq CisgICAgIC0gc3JjIChzdHJpbmcpIFVSSSBvZiB0aGUgc291cmNlIGltYWdl CisgICAgIC0geCAobnVtYmVyKSB4IG9mZnNldCBwb3NpdGlvbgorICAgICAt IHkgKG51bWJlcikgeSBvZmZzZXQgcG9zaXRpb24KKyAgICAgLSB3aWR0aCAo bnVtYmVyKSB3aWR0aCBvZiB0aGUgaW1hZ2UKKyAgICAgLSBoZWlnaHQgKG51 bWJlcikgaGVpZ2h0IG9mIHRoZSBpbWFnZQorICAgICA9IChvYmplY3QpIHRo ZSBgaW1hZ2VgIGVsZW1lbnQKKyAgICAgKiBvcgorICAgICA9IChvYmplY3Qp IFNuYXAgZWxlbWVudCBvYmplY3Qgd2l0aCB0eXBlIGBpbWFnZWAKKyAgICAg KioKKyAgICAgPiBVc2FnZQorICAgICB8IHZhciBjID0gcGFwZXIuaW1hZ2Uo ImFwcGxlLnBuZyIsIDEwLCAxMCwgODAsIDgwKTsKKyAgICBcKi8KKyAgICBw cm90by5pbWFnZSA9IGZ1bmN0aW9uIChzcmMsIHgsIHksIHdpZHRoLCBoZWln aHQpIHsKKyAgICAgICAgdmFyIGVsID0gdGhpcy5lbCgiaW1hZ2UiKTsKKyAg ICAgICAgaWYgKGlzKHNyYywgIm9iamVjdCIpICYmICJzcmMiIGluIHNyYykg eworICAgICAgICAgICAgZWwuYXR0cihzcmMpOworICAgICAgICB9IGVsc2Ug aWYgKHNyYyAhPSBudWxsKSB7CisgICAgICAgICAgICB2YXIgc2V0ID0gewor ICAgICAgICAgICAgICAgICJ4bGluazpocmVmIjogc3JjLAorICAgICAgICAg ICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW86ICJub25lIgorICAgICAgICAg ICAgfTsKKyAgICAgICAgICAgIGlmICh4ICE9IG51bGwgJiYgeSAhPSBudWxs KSB7CisgICAgICAgICAgICAgICAgc2V0LnggPSB4OworICAgICAgICAgICAg ICAgIHNldC55ID0geTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm ICh3aWR0aCAhPSBudWxsICYmIGhlaWdodCAhPSBudWxsKSB7CisgICAgICAg ICAgICAgICAgc2V0LndpZHRoID0gd2lkdGg7CisgICAgICAgICAgICAgICAg c2V0LmhlaWdodCA9IGhlaWdodDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgcHJlbG9hZChzcmMsIGZ1bmN0aW9uICgpIHsKKyAg ICAgICAgICAgICAgICAgICAgU25hcC5fLiQoZWwubm9kZSwgeworICAgICAg ICAgICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMub2Zmc2V0V2lkdGgsCisg ICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMub2Zmc2V0SGVp Z2h0CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg IH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU25hcC5fLiQoZWwu bm9kZSwgc2V0KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZWw7Cisg ICAgfTsKKyAgICAvKlwKKyAgICAgKiBQYXBlci5lbGxpcHNlCisgICAgIFsg bWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBEcmF3cyBhbiBlbGxpcHNlCisg ICAgICoqCisgICAgIC0geCAobnVtYmVyKSB4IGNvb3JkaW5hdGUgb2YgdGhl IGNlbnRyZQorICAgICAtIHkgKG51bWJlcikgeSBjb29yZGluYXRlIG9mIHRo ZSBjZW50cmUKKyAgICAgLSByeCAobnVtYmVyKSBob3Jpem9udGFsIHJhZGl1 cworICAgICAtIHJ5IChudW1iZXIpIHZlcnRpY2FsIHJhZGl1cworICAgICA9 IChvYmplY3QpIHRoZSBgZWxsaXBzZWAgZWxlbWVudAorICAgICAqKgorICAg ICA+IFVzYWdlCisgICAgIHwgdmFyIGMgPSBwYXBlci5lbGxpcHNlKDUwLCA1 MCwgNDAsIDIwKTsKKyAgICBcKi8KKyAgICBwcm90by5lbGxpcHNlID0gZnVu Y3Rpb24gKGN4LCBjeSwgcngsIHJ5KSB7CisgICAgICAgIHZhciBhdHRyOwor ICAgICAgICBpZiAoaXMoY3gsICJvYmplY3QiKSAmJiBjeCA9PSAiW29iamVj dCBPYmplY3RdIikgeworICAgICAgICAgICAgYXR0ciA9IGN4OworICAgICAg ICB9IGVsc2UgaWYgKGN4ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGF0dHIg PXsKKyAgICAgICAgICAgICAgICBjeDogY3gsCisgICAgICAgICAgICAgICAg Y3k6IGN5LAorICAgICAgICAgICAgICAgIHJ4OiByeCwKKyAgICAgICAgICAg ICAgICByeTogcnkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuIHRoaXMuZWwoImVsbGlwc2UiLCBhdHRyKTsKKyAgICB9Owor ICAgIC8vIFNJRVJSQSBQYXBlci5wYXRoKCk6IFVuY2xlYXIgZnJvbSB0aGUg bGluayB3aGF0IGEgQ2F0bXVsbC1Sb20gY3VydmV0byBpcywgYW5kIHdoeSBp dCB3b3VsZCBtYWtlIGxpZmUgYW55IGVhc2llci4KKyAgICAvKlwKKyAgICAg KiBQYXBlci5wYXRoCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBDcmVhdGVzIGEgYDxwYXRoPmAgZWxlbWVudCB1c2luZyB0aGUgZ2l2ZW4g c3RyaW5nIGFzIHRoZSBwYXRoJ3MgZGVmaW5pdGlvbgorICAgICAtIHBhdGhT dHJpbmcgKHN0cmluZykgI29wdGlvbmFsIHBhdGggc3RyaW5nIGluIFNWRyBm b3JtYXQKKyAgICAgKiBQYXRoIHN0cmluZyBjb25zaXN0cyBvZiBvbmUtbGV0 dGVyIGNvbW1hbmRzLCBmb2xsb3dlZCBieSBjb21tYSBzZXByYXJhdGVkIGFy Z3VtZW50cyBpbiBudW1lcmljYWwgZm9ybS4gRXhhbXBsZToKKyAgICAgfCAi TTEwLDIwTDMwLDQwIgorICAgICAqIFRoaXMgZXhhbXBsZSBmZWF0dXJlcyB0 d28gY29tbWFuZHM6IGBNYCwgd2l0aCBhcmd1bWVudHMgYCgxMCwgMjApYCBh bmQgYExgIHdpdGggYXJndW1lbnRzIGAoMzAsIDQwKWAuIFVwcGVyY2FzZSBs ZXR0ZXIgY29tbWFuZHMgZXhwcmVzcyBjb29yZGluYXRlcyBpbiBhYnNvbHV0 ZSB0ZXJtcywgd2hpbGUgbG93ZXJjYXNlIGNvbW1hbmRzIGV4cHJlc3MgdGhl bSBpbiByZWxhdGl2ZSB0ZXJtcyBmcm9tIHRoZSBtb3N0IHJlY2VudGx5IGRl Y2xhcmVkIGNvb3JkaW5hdGVzLgorICAgICAqCisgICAgICMgPHA+SGVyZSBp cyBzaG9ydCBsaXN0IG9mIGNvbW1hbmRzIGF2YWlsYWJsZSwgZm9yIG1vcmUg ZGV0YWlscyBzZWUgPGEgaHJlZj0iaHR0cDovL3d3dy53My5vcmcvVFIvU1ZH L3BhdGhzLmh0bWwjUGF0aERhdGEiIHRpdGxlPSJEZXRhaWxzIG9mIGEgcGF0 aCdzIGRhdGEgYXR0cmlidXRlJ3MgZm9ybWF0IGFyZSBkZXNjcmliZWQgaW4g dGhlIFNWRyBzcGVjaWZpY2F0aW9uLiI+U1ZHIHBhdGggc3RyaW5nIGZvcm1h dDwvYT4gb3IgPGEgaHJlZj0iaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5v cmcvZW4vU1ZHL1R1dG9yaWFsL1BhdGhzIj5hcnRpY2xlIGFib3V0IHBhdGgg c3RyaW5ncyBhdCBNRE48L2E+LjwvcD4KKyAgICAgIyA8dGFibGU+PHRoZWFk Pjx0cj48dGg+Q29tbWFuZDwvdGg+PHRoPk5hbWU8L3RoPjx0aD5QYXJhbWV0 ZXJzPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5PgorICAgICAjIDx0cj48dGQ+ TTwvdGQ+PHRkPm1vdmV0bzwvdGQ+PHRkPih4IHkpKzwvdGQ+PC90cj4KKyAg ICAgIyA8dHI+PHRkPlo8L3RkPjx0ZD5jbG9zZXBhdGg8L3RkPjx0ZD4obm9u ZSk8L3RkPjwvdHI+CisgICAgICMgPHRyPjx0ZD5MPC90ZD48dGQ+bGluZXRv PC90ZD48dGQ+KHggeSkrPC90ZD48L3RyPgorICAgICAjIDx0cj48dGQ+SDwv dGQ+PHRkPmhvcml6b250YWwgbGluZXRvPC90ZD48dGQ+eCs8L3RkPjwvdHI+ CisgICAgICMgPHRyPjx0ZD5WPC90ZD48dGQ+dmVydGljYWwgbGluZXRvPC90 ZD48dGQ+eSs8L3RkPjwvdHI+CisgICAgICMgPHRyPjx0ZD5DPC90ZD48dGQ+ Y3VydmV0bzwvdGQ+PHRkPih4MSB5MSB4MiB5MiB4IHkpKzwvdGQ+PC90cj4K KyAgICAgIyA8dHI+PHRkPlM8L3RkPjx0ZD5zbW9vdGggY3VydmV0bzwvdGQ+ PHRkPih4MiB5MiB4IHkpKzwvdGQ+PC90cj4KKyAgICAgIyA8dHI+PHRkPlE8 L3RkPjx0ZD5xdWFkcmF0aWMgQsOpemllciBjdXJ2ZXRvPC90ZD48dGQ+KHgx IHkxIHggeSkrPC90ZD48L3RyPgorICAgICAjIDx0cj48dGQ+VDwvdGQ+PHRk PnNtb290aCBxdWFkcmF0aWMgQsOpemllciBjdXJ2ZXRvPC90ZD48dGQ+KHgg eSkrPC90ZD48L3RyPgorICAgICAjIDx0cj48dGQ+QTwvdGQ+PHRkPmVsbGlw dGljYWwgYXJjPC90ZD48dGQ+KHJ4IHJ5IHgtYXhpcy1yb3RhdGlvbiBsYXJn ZS1hcmMtZmxhZyBzd2VlcC1mbGFnIHggeSkrPC90ZD48L3RyPgorICAgICAj IDx0cj48dGQ+UjwvdGQ+PHRkPjxhIGhyZWY9Imh0dHA6Ly9lbi53aWtpcGVk aWEub3JnL3dpa2kvQ2F0bXVsbOKAk1JvbV9zcGxpbmUjQ2F0bXVsbC5FMi44 MC45M1JvbV9zcGxpbmUiPkNhdG11bGwtUm9tIGN1cnZldG88L2E+KjwvdGQ+ PHRkPngxIHkxICh4IHkpKzwvdGQ+PC90cj48L3Rib2R5PjwvdGFibGU+Cisg ICAgICogKiBfQ2F0bXVsbC1Sb20gY3VydmV0b18gaXMgYSBub3Qgc3RhbmRh cmQgU1ZHIGNvbW1hbmQgYW5kIGFkZGVkIHRvIG1ha2UgbGlmZSBlYXNpZXIu CisgICAgICogTm90ZTogdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2Ugd2hlbiBh IHBhdGggY29uc2lzdHMgb2Ygb25seSB0aHJlZSBjb21tYW5kczogYE0xMCwx MFLigKZ6YC4gSW4gdGhpcyBjYXNlIHRoZSBwYXRoIGNvbm5lY3RzIGJhY2sg dG8gaXRzIHN0YXJ0aW5nIHBvaW50LgorICAgICA+IFVzYWdlCisgICAgIHwg dmFyIGMgPSBwYXBlci5wYXRoKCJNMTAgMTBMOTAgOTAiKTsKKyAgICAgfCAv LyBkcmF3IGEgZGlhZ29uYWwgbGluZToKKyAgICAgfCAvLyBtb3ZlIHRvIDEw LDEwLCBsaW5lIHRvIDkwLDkwCisgICAgXCovCisgICAgcHJvdG8ucGF0aCA9 IGZ1bmN0aW9uIChkKSB7CisgICAgICAgIHZhciBhdHRyOworICAgICAgICBp ZiAoaXMoZCwgIm9iamVjdCIpICYmICFpcyhkLCAiYXJyYXkiKSkgeworICAg ICAgICAgICAgYXR0ciA9IGQ7CisgICAgICAgIH0gZWxzZSBpZiAoZCkgewor ICAgICAgICAgICAgYXR0ciA9IHtkOiBkfTsKKyAgICAgICAgfQorICAgICAg ICByZXR1cm4gdGhpcy5lbCgicGF0aCIsIGF0dHIpOworICAgIH07CisgICAg LypcCisgICAgICogUGFwZXIuZworICAgICBbIG1ldGhvZCBdCisgICAgICoq CisgICAgICogQ3JlYXRlcyBhIGdyb3VwIGVsZW1lbnQKKyAgICAgKioKKyAg ICAgLSB2YXJhcmdzICjigKYpICNvcHRpb25hbCBlbGVtZW50cyB0byBuZXN0 IHdpdGhpbiB0aGUgZ3JvdXAKKyAgICAgPSAob2JqZWN0KSB0aGUgYGdgIGVs ZW1lbnQKKyAgICAgKioKKyAgICAgPiBVc2FnZQorICAgICB8IHZhciBjMSA9 IHBhcGVyLmNpcmNsZSgpLAorICAgICB8ICAgICBjMiA9IHBhcGVyLnJlY3Qo KSwKKyAgICAgfCAgICAgZyA9IHBhcGVyLmcoYzIsIGMxKTsgLy8gbm90ZSB0 aGF0IHRoZSBvcmRlciBvZiBlbGVtZW50cyBpcyBkaWZmZXJlbnQKKyAgICAg KiBvcgorICAgICB8IHZhciBjMSA9IHBhcGVyLmNpcmNsZSgpLAorICAgICB8 ICAgICBjMiA9IHBhcGVyLnJlY3QoKSwKKyAgICAgfCAgICAgZyA9IHBhcGVy LmcoKTsKKyAgICAgfCBnLmFkZChjMiwgYzEpOworICAgIFwqLworICAgIC8q XAorICAgICAqIFBhcGVyLmdyb3VwCisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBTZWUgQFBhcGVyLmcKKyAgICBcKi8KKyAgICBwcm90by5n cm91cCA9IHByb3RvLmcgPSBmdW5jdGlvbiAoZmlyc3QpIHsKKyAgICAgICAg dmFyIGF0dHIsCisgICAgICAgICAgICBlbCA9IHRoaXMuZWwoImciKTsKKyAg ICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSAmJiBmaXJzdCAmJiAh Zmlyc3QudHlwZSkgeworICAgICAgICAgICAgZWwuYXR0cihmaXJzdCk7Cisg ICAgICAgIH0gZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCkgeworICAgICAg ICAgICAgZWwuYWRkKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt ZW50cywgMCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBlbDsKKyAg ICB9OworICAgIC8qXAorICAgICAqIFBhcGVyLnN2ZworICAgICBbIG1ldGhv ZCBdCisgICAgICoqCisgICAgICogQ3JlYXRlcyBhIG5lc3RlZCBTVkcgZWxl bWVudC4KKyAgICAgLSB4IChudW1iZXIpIEBvcHRpb25hbCBYIG9mIHRoZSBl bGVtZW50CisgICAgIC0geSAobnVtYmVyKSBAb3B0aW9uYWwgWSBvZiB0aGUg ZWxlbWVudAorICAgICAtIHdpZHRoIChudW1iZXIpIEBvcHRpb25hbCB3aWR0 aCBvZiB0aGUgZWxlbWVudAorICAgICAtIGhlaWdodCAobnVtYmVyKSBAb3B0 aW9uYWwgaGVpZ2h0IG9mIHRoZSBlbGVtZW50CisgICAgIC0gdmJ4IChudW1i ZXIpIEBvcHRpb25hbCB2aWV3Ym94IFgKKyAgICAgLSB2YnkgKG51bWJlcikg QG9wdGlvbmFsIHZpZXdib3ggWQorICAgICAtIHZidyAobnVtYmVyKSBAb3B0 aW9uYWwgdmlld2JveCB3aWR0aAorICAgICAtIHZiaCAobnVtYmVyKSBAb3B0 aW9uYWwgdmlld2JveCBoZWlnaHQKKyAgICAgKioKKyAgICAgPSAob2JqZWN0 KSB0aGUgYHN2Z2AgZWxlbWVudAorICAgICAqKgorICAgIFwqLworICAgIHBy b3RvLnN2ZyA9IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB2Yngs IHZieSwgdmJ3LCB2YmgpIHsKKyAgICAgICAgdmFyIGF0dHJzID0ge307Cisg ICAgICAgIGlmIChpcyh4LCAib2JqZWN0IikgJiYgeSA9PSBudWxsKSB7Cisg ICAgICAgICAgICBhdHRycyA9IHg7CisgICAgICAgIH0gZWxzZSB7CisgICAg ICAgICAgICBpZiAoeCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgYXR0 cnMueCA9IHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoeSAh PSBudWxsKSB7CisgICAgICAgICAgICAgICAgYXR0cnMueSA9IHk7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAod2lkdGggIT0gbnVsbCkgewor ICAgICAgICAgICAgICAgIGF0dHJzLndpZHRoID0gd2lkdGg7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBpZiAoaGVpZ2h0ICE9IG51bGwpIHsKKyAg ICAgICAgICAgICAgICBhdHRycy5oZWlnaHQgPSBoZWlnaHQ7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBpZiAodmJ4ICE9IG51bGwgJiYgdmJ5ICE9 IG51bGwgJiYgdmJ3ICE9IG51bGwgJiYgdmJoICE9IG51bGwpIHsKKyAgICAg ICAgICAgICAgICBhdHRycy52aWV3Qm94ID0gW3ZieCwgdmJ5LCB2YncsIHZi aF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu IHRoaXMuZWwoInN2ZyIsIGF0dHJzKTsKKyAgICB9OworICAgIC8qXAorICAg ICAqIFBhcGVyLm1hc2sKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAg ICAqIEVxdWl2YWxlbnQgaW4gYmVoYXZpb3VyIHRvIEBQYXBlci5nLCBleGNl cHQgaXTigJlzIGEgbWFzay4KKyAgICAgKioKKyAgICAgPSAob2JqZWN0KSB0 aGUgYG1hc2tgIGVsZW1lbnQKKyAgICAgKioKKyAgICBcKi8KKyAgICBwcm90 by5tYXNrID0gZnVuY3Rpb24gKGZpcnN0KSB7CisgICAgICAgIHZhciBhdHRy LAorICAgICAgICAgICAgZWwgPSB0aGlzLmVsKCJtYXNrIik7CisgICAgICAg IGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEgJiYgZmlyc3QgJiYgIWZpcnN0 LnR5cGUpIHsKKyAgICAgICAgICAgIGVsLmF0dHIoZmlyc3QpOworICAgICAg ICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAg IGVsLmFkZChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMs IDApKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZWw7CisgICAgfTsK KyAgICAvKlwKKyAgICAgKiBQYXBlci5wdHJuCisgICAgIFsgbWV0aG9kIF0K KyAgICAgKioKKyAgICAgKiBFcXVpdmFsZW50IGluIGJlaGF2aW91ciB0byBA UGFwZXIuZywgZXhjZXB0IGl04oCZcyBhIHBhdHRlcm4uCisgICAgIC0geCAo bnVtYmVyKSBAb3B0aW9uYWwgWCBvZiB0aGUgZWxlbWVudAorICAgICAtIHkg KG51bWJlcikgQG9wdGlvbmFsIFkgb2YgdGhlIGVsZW1lbnQKKyAgICAgLSB3 aWR0aCAobnVtYmVyKSBAb3B0aW9uYWwgd2lkdGggb2YgdGhlIGVsZW1lbnQK KyAgICAgLSBoZWlnaHQgKG51bWJlcikgQG9wdGlvbmFsIGhlaWdodCBvZiB0 aGUgZWxlbWVudAorICAgICAtIHZieCAobnVtYmVyKSBAb3B0aW9uYWwgdmll d2JveCBYCisgICAgIC0gdmJ5IChudW1iZXIpIEBvcHRpb25hbCB2aWV3Ym94 IFkKKyAgICAgLSB2YncgKG51bWJlcikgQG9wdGlvbmFsIHZpZXdib3ggd2lk dGgKKyAgICAgLSB2YmggKG51bWJlcikgQG9wdGlvbmFsIHZpZXdib3ggaGVp Z2h0CisgICAgICoqCisgICAgID0gKG9iamVjdCkgdGhlIGBwYXR0ZXJuYCBl bGVtZW50CisgICAgICoqCisgICAgXCovCisgICAgcHJvdG8ucHRybiA9IGZ1 bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCB2eCwgdnksIHZ3LCB2aCkg eworICAgICAgICBpZiAoaXMoeCwgIm9iamVjdCIpKSB7CisgICAgICAgICAg ICB2YXIgYXR0ciA9IHg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICBhdHRyID0ge3BhdHRlcm5Vbml0czogInVzZXJTcGFjZU9uVXNlIn07Cisg ICAgICAgICAgICBpZiAoeCkgeworICAgICAgICAgICAgICAgIGF0dHIueCA9 IHg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoeSkgeworICAg ICAgICAgICAgICAgIGF0dHIueSA9IHk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAod2lkdGggIT0gbnVsbCkgeworICAgICAgICAgICAgICAg IGF0dHIud2lkdGggPSB3aWR0aDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmIChoZWlnaHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGF0 dHIuaGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKHZ4ICE9IG51bGwgJiYgdnkgIT0gbnVsbCAmJiB2dyAhPSBudWxs ICYmIHZoICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBhdHRyLnZpZXdC b3ggPSBbdngsIHZ5LCB2dywgdmhdOworICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICBhdHRyLnZpZXdCb3ggPSBbeCB8fCAwLCB5IHx8 IDAsIHdpZHRoIHx8IDAsIGhlaWdodCB8fCAwXTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5lbCgicGF0dGVybiIs IGF0dHIpOworICAgIH07CisgICAgLypcCisgICAgICogUGFwZXIudXNlCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBDcmVhdGVzIGEgPHVz ZT4gZWxlbWVudC4KKyAgICAgLSBpZCAoc3RyaW5nKSBAb3B0aW9uYWwgaWQg b2YgZWxlbWVudCB0byBsaW5rCisgICAgICogb3IKKyAgICAgLSBpZCAoRWxl bWVudCkgQG9wdGlvbmFsIGVsZW1lbnQgdG8gbGluaworICAgICAqKgorICAg ICA9IChvYmplY3QpIHRoZSBgdXNlYCBlbGVtZW50CisgICAgICoqCisgICAg XCovCisgICAgcHJvdG8udXNlID0gZnVuY3Rpb24gKGlkKSB7CisgICAgICAg IGlmIChpZCAhPSBudWxsKSB7CisgICAgICAgICAgICBpZiAoaWQgaW5zdGFu Y2VvZiBFbGVtZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKCFpZC5hdHRy KCJpZCIpKSB7CisgICAgICAgICAgICAgICAgICAgIGlkLmF0dHIoe2lkOiBT bmFwLl8uaWQoaWQpfSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIGlkID0gaWQuYXR0cigiaWQiKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGlmIChTdHJpbmcoaWQpLmNoYXJBdCgpID09ICIjIikgewor ICAgICAgICAgICAgICAgIGlkID0gaWQuc3Vic3RyaW5nKDEpOworICAgICAg ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuZWwoInVzZSIsIHsi eGxpbms6aHJlZiI6ICIjIiArIGlkfSk7CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICByZXR1cm4gRWxlbWVudC5wcm90b3R5cGUudXNlLmNhbGwo dGhpcyk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qXAorICAgICAqIFBh cGVyLnN5bWJvbAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICog Q3JlYXRlcyBhIDxzeW1ib2w+IGVsZW1lbnQuCisgICAgIC0gdmJ4IChudW1i ZXIpIEBvcHRpb25hbCB2aWV3Ym94IFgKKyAgICAgLSB2YnkgKG51bWJlcikg QG9wdGlvbmFsIHZpZXdib3ggWQorICAgICAtIHZidyAobnVtYmVyKSBAb3B0 aW9uYWwgdmlld2JveCB3aWR0aAorICAgICAtIHZiaCAobnVtYmVyKSBAb3B0 aW9uYWwgdmlld2JveCBoZWlnaHQKKyAgICAgPSAob2JqZWN0KSB0aGUgYHN5 bWJvbGAgZWxlbWVudAorICAgICAqKgorICAgIFwqLworICAgIHByb3RvLnN5 bWJvbCA9IGZ1bmN0aW9uICh2eCwgdnksIHZ3LCB2aCkgeworICAgICAgICB2 YXIgYXR0ciA9IHt9OworICAgICAgICBpZiAodnggIT0gbnVsbCAmJiB2eSAh PSBudWxsICYmIHZ3ICE9IG51bGwgJiYgdmggIT0gbnVsbCkgeworICAgICAg ICAgICAgYXR0ci52aWV3Qm94ID0gW3Z4LCB2eSwgdncsIHZoXTsKKyAgICAg ICAgfQorCisgICAgICAgIHJldHVybiB0aGlzLmVsKCJzeW1ib2wiLCBhdHRy KTsKKyAgICB9OworICAgIC8qXAorICAgICAqIFBhcGVyLnRleHQKKyAgICAg WyBtZXRob2QgXQorICAgICAqKgorICAgICAqIERyYXdzIGEgdGV4dCBzdHJp bmcKKyAgICAgKioKKyAgICAgLSB4IChudW1iZXIpIHggY29vcmRpbmF0ZSBw b3NpdGlvbgorICAgICAtIHkgKG51bWJlcikgeSBjb29yZGluYXRlIHBvc2l0 aW9uCisgICAgIC0gdGV4dCAoc3RyaW5nfGFycmF5KSBUaGUgdGV4dCBzdHJp bmcgdG8gZHJhdyBvciBhcnJheSBvZiBzdHJpbmdzIHRvIG5lc3Qgd2l0aGlu IHNlcGFyYXRlIGA8dHNwYW4+YCBlbGVtZW50cworICAgICA9IChvYmplY3Qp IHRoZSBgdGV4dGAgZWxlbWVudAorICAgICAqKgorICAgICA+IFVzYWdlCisg ICAgIHwgdmFyIHQxID0gcGFwZXIudGV4dCg1MCwgNTAsICJTbmFwIik7Cisg ICAgIHwgdmFyIHQyID0gcGFwZXIudGV4dCg1MCwgNTAsIFsiUyIsIm4iLCJh IiwicCJdKTsKKyAgICAgfCAvLyBUZXh0IHBhdGggdXNhZ2UKKyAgICAgfCB0 MS5hdHRyKHt0ZXh0cGF0aDogIk0xMCwxMEwxMDAsMTAwIn0pOworICAgICB8 IC8vIG9yCisgICAgIHwgdmFyIHB0aCA9IHBhcGVyLnBhdGgoIk0xMCwxMEwx MDAsMTAwIik7CisgICAgIHwgdDEuYXR0cih7dGV4dHBhdGg6IHB0aH0pOwor ICAgIFwqLworICAgIHByb3RvLnRleHQgPSBmdW5jdGlvbiAoeCwgeSwgdGV4 dCkgeworICAgICAgICB2YXIgYXR0ciA9IHt9OworICAgICAgICBpZiAoaXMo eCwgIm9iamVjdCIpKSB7CisgICAgICAgICAgICBhdHRyID0geDsKKyAgICAg ICAgfSBlbHNlIGlmICh4ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGF0dHIg PSB7CisgICAgICAgICAgICAgICAgeDogeCwKKyAgICAgICAgICAgICAgICB5 OiB5LAorICAgICAgICAgICAgICAgIHRleHQ6IHRleHQgfHwgIiIKKyAgICAg ICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuZWwo InRleHQiLCBhdHRyKTsKKyAgICB9OworICAgIC8qXAorICAgICAqIFBhcGVy LmxpbmUKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIERyYXdz IGEgbGluZQorICAgICAqKgorICAgICAtIHgxIChudW1iZXIpIHggY29vcmRp bmF0ZSBwb3NpdGlvbiBvZiB0aGUgc3RhcnQKKyAgICAgLSB5MSAobnVtYmVy KSB5IGNvb3JkaW5hdGUgcG9zaXRpb24gb2YgdGhlIHN0YXJ0CisgICAgIC0g eDIgKG51bWJlcikgeCBjb29yZGluYXRlIHBvc2l0aW9uIG9mIHRoZSBlbmQK KyAgICAgLSB5MiAobnVtYmVyKSB5IGNvb3JkaW5hdGUgcG9zaXRpb24gb2Yg dGhlIGVuZAorICAgICA9IChvYmplY3QpIHRoZSBgbGluZWAgZWxlbWVudAor ICAgICAqKgorICAgICA+IFVzYWdlCisgICAgIHwgdmFyIHQxID0gcGFwZXIu bGluZSg1MCwgNTAsIDEwMCwgMTAwKTsKKyAgICBcKi8KKyAgICBwcm90by5s aW5lID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyKSB7CisgICAgICAgIHZh ciBhdHRyID0ge307CisgICAgICAgIGlmIChpcyh4MSwgIm9iamVjdCIpKSB7 CisgICAgICAgICAgICBhdHRyID0geDE7CisgICAgICAgIH0gZWxzZSBpZiAo eDEgIT0gbnVsbCkgeworICAgICAgICAgICAgYXR0ciA9IHsKKyAgICAgICAg ICAgICAgICB4MTogeDEsCisgICAgICAgICAgICAgICAgeDI6IHgyLAorICAg ICAgICAgICAgICAgIHkxOiB5MSwKKyAgICAgICAgICAgICAgICB5MjogeTIK KyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRo aXMuZWwoImxpbmUiLCBhdHRyKTsKKyAgICB9OworICAgIC8qXAorICAgICAq IFBhcGVyLnBvbHlsaW5lCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBEcmF3cyBhIHBvbHlsaW5lCisgICAgICoqCisgICAgIC0gcG9pbnRz IChhcnJheSkgYXJyYXkgb2YgcG9pbnRzCisgICAgICogb3IKKyAgICAgLSB2 YXJhcmdzICjigKYpIHBvaW50cworICAgICA9IChvYmplY3QpIHRoZSBgcG9s eWxpbmVgIGVsZW1lbnQKKyAgICAgKioKKyAgICAgPiBVc2FnZQorICAgICB8 IHZhciBwMSA9IHBhcGVyLnBvbHlsaW5lKFsxMCwgMTAsIDEwMCwgMTAwXSk7 CisgICAgIHwgdmFyIHAyID0gcGFwZXIucG9seWxpbmUoMTAsIDEwLCAxMDAs IDEwMCk7CisgICAgXCovCisgICAgcHJvdG8ucG9seWxpbmUgPSBmdW5jdGlv biAocG9pbnRzKSB7CisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4g MSkgeworICAgICAgICAgICAgcG9pbnRzID0gQXJyYXkucHJvdG90eXBlLnNs aWNlLmNhbGwoYXJndW1lbnRzLCAwKTsKKyAgICAgICAgfQorICAgICAgICB2 YXIgYXR0ciA9IHt9OworICAgICAgICBpZiAoaXMocG9pbnRzLCAib2JqZWN0 IikgJiYgIWlzKHBvaW50cywgImFycmF5IikpIHsKKyAgICAgICAgICAgIGF0 dHIgPSBwb2ludHM7CisgICAgICAgIH0gZWxzZSBpZiAocG9pbnRzICE9IG51 bGwpIHsKKyAgICAgICAgICAgIGF0dHIgPSB7cG9pbnRzOiBwb2ludHN9Owor ICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLmVsKCJwb2x5bGluZSIs IGF0dHIpOworICAgIH07CisgICAgLypcCisgICAgICogUGFwZXIucG9seWdv bgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogRHJhd3MgYSBw b2x5Z29uLiBTZWUgQFBhcGVyLnBvbHlsaW5lCisgICAgXCovCisgICAgcHJv dG8ucG9seWdvbiA9IGZ1bmN0aW9uIChwb2ludHMpIHsKKyAgICAgICAgaWYg KGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7CisgICAgICAgICAgICBwb2ludHMg PSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApOwor ICAgICAgICB9CisgICAgICAgIHZhciBhdHRyID0ge307CisgICAgICAgIGlm IChpcyhwb2ludHMsICJvYmplY3QiKSAmJiAhaXMocG9pbnRzLCAiYXJyYXki KSkgeworICAgICAgICAgICAgYXR0ciA9IHBvaW50czsKKyAgICAgICAgfSBl bHNlIGlmIChwb2ludHMgIT0gbnVsbCkgeworICAgICAgICAgICAgYXR0ciA9 IHtwb2ludHM6IHBvaW50c307CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu IHRoaXMuZWwoInBvbHlnb24iLCBhdHRyKTsKKyAgICB9OworICAgIC8vIGdy YWRpZW50cworICAgIChmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciAkID0g U25hcC5fLiQ7CisgICAgICAgIC8vIGdyYWRpZW50cycgaGVscGVycworICAg ICAgICBmdW5jdGlvbiBHc3RvcHMoKSB7CisgICAgICAgICAgICByZXR1cm4g dGhpcy5zZWxlY3RBbGwoInN0b3AiKTsKKyAgICAgICAgfQorICAgICAgICBm dW5jdGlvbiBHYWRkU3RvcChjb2xvciwgb2Zmc2V0KSB7CisgICAgICAgICAg ICB2YXIgc3RvcCA9ICQoInN0b3AiKSwKKyAgICAgICAgICAgICAgICBhdHRy ID0geworICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6ICtvZmZzZXQgKyAi JSIKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgY29sb3IgPSBT bmFwLmNvbG9yKGNvbG9yKTsKKyAgICAgICAgICAgIGF0dHJbInN0b3AtY29s b3IiXSA9IGNvbG9yLmhleDsKKyAgICAgICAgICAgIGlmIChjb2xvci5vcGFj aXR5IDwgMSkgeworICAgICAgICAgICAgICAgIGF0dHJbInN0b3Atb3BhY2l0 eSJdID0gY29sb3Iub3BhY2l0eTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICQoc3RvcCwgYXR0cik7CisgICAgICAgICAgICB0aGlzLm5vZGUuYXBw ZW5kQ2hpbGQoc3RvcCk7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg ICAgICAgfQorICAgICAgICBmdW5jdGlvbiBHZ2V0QkJveCgpIHsKKyAgICAg ICAgICAgIGlmICh0aGlzLnR5cGUgPT0gImxpbmVhckdyYWRpZW50Iikgewor ICAgICAgICAgICAgICAgIHZhciB4MSA9ICQodGhpcy5ub2RlLCAieDEiKSB8 fCAwLAorICAgICAgICAgICAgICAgICAgICB4MiA9ICQodGhpcy5ub2RlLCAi eDIiKSB8fCAxLAorICAgICAgICAgICAgICAgICAgICB5MSA9ICQodGhpcy5u b2RlLCAieTEiKSB8fCAwLAorICAgICAgICAgICAgICAgICAgICB5MiA9ICQo dGhpcy5ub2RlLCAieTIiKSB8fCAwOworICAgICAgICAgICAgICAgIHJldHVy biBTbmFwLl8uYm94KHgxLCB5MSwgbWF0aC5hYnMoeDIgLSB4MSksIG1hdGgu YWJzKHkyIC0geTEpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgdmFyIGN4ID0gdGhpcy5ub2RlLmN4IHx8IC41LAorICAgICAg ICAgICAgICAgICAgICBjeSA9IHRoaXMubm9kZS5jeSB8fCAuNSwKKyAgICAg ICAgICAgICAgICAgICAgciA9IHRoaXMubm9kZS5yIHx8IDA7CisgICAgICAg ICAgICAgICAgcmV0dXJuIFNuYXAuXy5ib3goY3ggLSByLCBjeSAtIHIsIHIg KiAyLCByICogMik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg ICAgZnVuY3Rpb24gZ3JhZGllbnQoZGVmcywgc3RyKSB7CisgICAgICAgICAg ICB2YXIgZ3JhZCA9IGV2ZSgic25hcC51dGlsLmdyYWQucGFyc2UiLCBudWxs LCBzdHIpLmZpcnN0RGVmaW5lZCgpLAorICAgICAgICAgICAgICAgIGVsOwor ICAgICAgICAgICAgaWYgKCFncmFkKSB7CisgICAgICAgICAgICAgICAgcmV0 dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBncmFkLnBh cmFtcy51bnNoaWZ0KGRlZnMpOworICAgICAgICAgICAgaWYgKGdyYWQudHlw ZS50b0xvd2VyQ2FzZSgpID09ICJsIikgeworICAgICAgICAgICAgICAgIGVs ID0gZ3JhZGllbnRMaW5lYXIuYXBwbHkoMCwgZ3JhZC5wYXJhbXMpOworICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbCA9IGdyYWRp ZW50UmFkaWFsLmFwcGx5KDAsIGdyYWQucGFyYW1zKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGlmIChncmFkLnR5cGUgIT0gZ3JhZC50eXBlLnRv TG93ZXJDYXNlKCkpIHsKKyAgICAgICAgICAgICAgICAkKGVsLm5vZGUsIHsK KyAgICAgICAgICAgICAgICAgICAgZ3JhZGllbnRVbml0czogInVzZXJTcGFj ZU9uVXNlIgorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQor ICAgICAgICAgICAgdmFyIHN0b3BzID0gZ3JhZC5zdG9wcywKKyAgICAgICAg ICAgICAgICBsZW4gPSBzdG9wcy5sZW5ndGgsCisgICAgICAgICAgICAgICAg c3RhcnQgPSAwLAorICAgICAgICAgICAgICAgIGogPSAwOworICAgICAgICAg ICAgZnVuY3Rpb24gc2VlZChpLCBlbmQpIHsKKyAgICAgICAgICAgICAgICB2 YXIgc3RlcCA9IChlbmQgLSBzdGFydCkgLyAoaSAtIGopOworICAgICAgICAg ICAgICAgIGZvciAodmFyIGsgPSBqOyBrIDwgaTsgaysrKSB7CisgICAgICAg ICAgICAgICAgICAgIHN0b3BzW2tdLm9mZnNldCA9ICsoK3N0YXJ0ICsgc3Rl cCAqIChrIC0gaikpLnRvRml4ZWQoMik7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIGogPSBpOworICAgICAgICAgICAgICAgIHN0YXJ0 ID0gZW5kOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGVuLS07Cisg ICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSBpZiAo Im9mZnNldCIgaW4gc3RvcHNbaV0pIHsKKyAgICAgICAgICAgICAgICBzZWVk KGksIHN0b3BzW2ldLm9mZnNldCk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBzdG9wc1tsZW5dLm9mZnNldCA9IHN0b3BzW2xlbl0ub2Zmc2V0IHx8 IDEwMDsKKyAgICAgICAgICAgIHNlZWQobGVuLCBzdG9wc1tsZW5dLm9mZnNl dCk7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IGxlbjsgaSsrKSB7 CisgICAgICAgICAgICAgICAgdmFyIHN0b3AgPSBzdG9wc1tpXTsKKyAgICAg ICAgICAgICAgICBlbC5hZGRTdG9wKHN0b3AuY29sb3IsIHN0b3Aub2Zmc2V0 KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBlbDsKKyAg ICAgICAgfQorICAgICAgICBmdW5jdGlvbiBncmFkaWVudExpbmVhcihkZWZz LCB4MSwgeTEsIHgyLCB5MikgeworICAgICAgICAgICAgdmFyIGVsID0gU25h cC5fLm1ha2UoImxpbmVhckdyYWRpZW50IiwgZGVmcyk7CisgICAgICAgICAg ICBlbC5zdG9wcyA9IEdzdG9wczsKKyAgICAgICAgICAgIGVsLmFkZFN0b3Ag PSBHYWRkU3RvcDsKKyAgICAgICAgICAgIGVsLmdldEJCb3ggPSBHZ2V0QkJv eDsKKyAgICAgICAgICAgIGlmICh4MSAhPSBudWxsKSB7CisgICAgICAgICAg ICAgICAgJChlbC5ub2RlLCB7CisgICAgICAgICAgICAgICAgICAgIHgxOiB4 MSwKKyAgICAgICAgICAgICAgICAgICAgeTE6IHkxLAorICAgICAgICAgICAg ICAgICAgICB4MjogeDIsCisgICAgICAgICAgICAgICAgICAgIHkyOiB5Mgor ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgcmV0dXJuIGVsOworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIGdy YWRpZW50UmFkaWFsKGRlZnMsIGN4LCBjeSwgciwgZngsIGZ5KSB7CisgICAg ICAgICAgICB2YXIgZWwgPSBTbmFwLl8ubWFrZSgicmFkaWFsR3JhZGllbnQi LCBkZWZzKTsKKyAgICAgICAgICAgIGVsLnN0b3BzID0gR3N0b3BzOworICAg ICAgICAgICAgZWwuYWRkU3RvcCA9IEdhZGRTdG9wOworICAgICAgICAgICAg ZWwuZ2V0QkJveCA9IEdnZXRCQm94OworICAgICAgICAgICAgaWYgKGN4ICE9 IG51bGwpIHsKKyAgICAgICAgICAgICAgICAkKGVsLm5vZGUsIHsKKyAgICAg ICAgICAgICAgICAgICAgY3g6IGN4LAorICAgICAgICAgICAgICAgICAgICBj eTogY3ksCisgICAgICAgICAgICAgICAgICAgIHI6IHIKKyAgICAgICAgICAg ICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChmeCAh PSBudWxsICYmIGZ5ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICAkKGVs Lm5vZGUsIHsKKyAgICAgICAgICAgICAgICAgICAgZng6IGZ4LAorICAgICAg ICAgICAgICAgICAgICBmeTogZnkKKyAgICAgICAgICAgICAgICB9KTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBlbDsKKyAgICAgICAg fQorICAgICAgICAvKlwKKyAgICAgICAgICogUGFwZXIuZ3JhZGllbnQKKyAg ICAgICAgIFsgbWV0aG9kIF0KKyAgICAgICAgICoqCisgICAgICAgICAqIENy ZWF0ZXMgYSBncmFkaWVudCBlbGVtZW50CisgICAgICAgICAqKgorICAgICAg ICAgLSBncmFkaWVudCAoc3RyaW5nKSBncmFkaWVudCBkZXNjcmlwdG9yCisg ICAgICAgICA+IEdyYWRpZW50IERlc2NyaXB0b3IKKyAgICAgICAgICogVGhl IGdyYWRpZW50IGRlc2NyaXB0b3IgaXMgYW4gZXhwcmVzc2lvbiBmb3JtYXR0 ZWQgYXMKKyAgICAgICAgICogZm9sbG93czogYDx0eXBlPig8Y29vcmRzPik8 Y29sb3JzPmAuICBUaGUgYDx0eXBlPmAgY2FuIGJlCisgICAgICAgICAqIGVp dGhlciBsaW5lYXIgb3IgcmFkaWFsLiAgVGhlIHVwcGVyY2FzZSBgTGAgb3Ig YFJgIGxldHRlcnMKKyAgICAgICAgICogaW5kaWNhdGUgYWJzb2x1dGUgY29v cmRpbmF0ZXMgb2Zmc2V0IGZyb20gdGhlIFNWRyBzdXJmYWNlLgorICAgICAg ICAgKiBMb3dlcmNhc2UgYGxgIG9yIGByYCBsZXR0ZXJzIGluZGljYXRlIGNv b3JkaW5hdGVzCisgICAgICAgICAqIGNhbGN1bGF0ZWQgcmVsYXRpdmUgdG8g dGhlIGVsZW1lbnQgdG8gd2hpY2ggdGhlIGdyYWRpZW50IGlzCisgICAgICAg ICAqIGFwcGxpZWQuICBDb29yZGluYXRlcyBzcGVjaWZ5IGEgbGluZWFyIGdy YWRpZW50IHZlY3RvciBhcworICAgICAgICAgKiBgeDFgLCBgeTFgLCBgeDJg LCBgeTJgLCBvciBhIHJhZGlhbCBncmFkaWVudCBhcyBgY3hgLCBgY3lgLAor ICAgICAgICAgKiBgcmAgYW5kIG9wdGlvbmFsIGBmeGAsIGBmeWAgc3BlY2lm eWluZyBhIGZvY2FsIHBvaW50IGF3YXkKKyAgICAgICAgICogZnJvbSB0aGUg Y2VudGVyIG9mIHRoZSBjaXJjbGUuIFNwZWNpZnkgYDxjb2xvcnM+YCBhcyBh IGxpc3QKKyAgICAgICAgICogb2YgZGFzaC1zZXBhcmF0ZWQgQ1NTIGNvbG9y IHZhbHVlcy4gIEVhY2ggY29sb3IgbWF5IGJlCisgICAgICAgICAqIGZvbGxv d2VkIGJ5IGEgY3VzdG9tIG9mZnNldCB2YWx1ZSwgc2VwYXJhdGVkIHdpdGgg YSBjb2xvbgorICAgICAgICAgKiBjaGFyYWN0ZXIuCisgICAgICAgICA+IEV4 YW1wbGVzCisgICAgICAgICAqIExpbmVhciBncmFkaWVudCwgcmVsYXRpdmUg ZnJvbSB0b3AtbGVmdCBjb3JuZXIgdG8gYm90dG9tLXJpZ2h0CisgICAgICAg ICAqIGNvcm5lciwgZnJvbSBibGFjayB0aHJvdWdoIHJlZCB0byB3aGl0ZToK KyAgICAgICAgIHwgdmFyIGcgPSBwYXBlci5ncmFkaWVudCgibCgwLCAwLCAx LCAxKSMwMDAtI2YwMC0jZmZmIik7CisgICAgICAgICAqIExpbmVhciBncmFk aWVudCwgYWJzb2x1dGUgZnJvbSAoMCwgMCkgdG8gKDEwMCwgMTAwKSwgZnJv bSBibGFjaworICAgICAgICAgKiB0aHJvdWdoIHJlZCBhdCAyNSUgdG8gd2hp dGU6CisgICAgICAgICB8IHZhciBnID0gcGFwZXIuZ3JhZGllbnQoIkwoMCwg MCwgMTAwLCAxMDApIzAwMC0jZjAwOjI1LSNmZmYiKTsKKyAgICAgICAgICog UmFkaWFsIGdyYWRpZW50LCByZWxhdGl2ZSBmcm9tIHRoZSBjZW50ZXIgb2Yg dGhlIGVsZW1lbnQgd2l0aCByYWRpdXMKKyAgICAgICAgICogaGFsZiB0aGUg d2lkdGgsIGZyb20gYmxhY2sgdG8gd2hpdGU6CisgICAgICAgICB8IHZhciBn ID0gcGFwZXIuZ3JhZGllbnQoInIoMC41LCAwLjUsIDAuNSkjMDAwLSNmZmYi KTsKKyAgICAgICAgICogVG8gYXBwbHkgdGhlIGdyYWRpZW50OgorICAgICAg ICAgfCBwYXBlci5jaXJjbGUoNTAsIDUwLCA0MCkuYXR0cih7CisgICAgICAg ICB8ICAgICBmaWxsOiBnCisgICAgICAgICB8IH0pOworICAgICAgICAgPSAo b2JqZWN0KSB0aGUgYGdyYWRpZW50YCBlbGVtZW50CisgICAgICAgIFwqLwor ICAgICAgICBwcm90by5ncmFkaWVudCA9IGZ1bmN0aW9uIChzdHIpIHsKKyAg ICAgICAgICAgIHJldHVybiBncmFkaWVudCh0aGlzLmRlZnMsIHN0cik7Cisg ICAgICAgIH07CisgICAgICAgIHByb3RvLmdyYWRpZW50TGluZWFyID0gZnVu Y3Rpb24gKHgxLCB5MSwgeDIsIHkyKSB7CisgICAgICAgICAgICByZXR1cm4g Z3JhZGllbnRMaW5lYXIodGhpcy5kZWZzLCB4MSwgeTEsIHgyLCB5Mik7Cisg ICAgICAgIH07CisgICAgICAgIHByb3RvLmdyYWRpZW50UmFkaWFsID0gZnVu Y3Rpb24gKGN4LCBjeSwgciwgZngsIGZ5KSB7CisgICAgICAgICAgICByZXR1 cm4gZ3JhZGllbnRSYWRpYWwodGhpcy5kZWZzLCBjeCwgY3ksIHIsIGZ4LCBm eSk7CisgICAgICAgIH07CisgICAgICAgIC8qXAorICAgICAgICAgKiBQYXBl ci50b1N0cmluZworICAgICAgICAgWyBtZXRob2QgXQorICAgICAgICAgKioK KyAgICAgICAgICogUmV0dXJucyBTVkcgY29kZSBmb3IgdGhlIEBQYXBlcgor ICAgICAgICAgPSAoc3RyaW5nKSBTVkcgY29kZSBmb3IgdGhlIEBQYXBlcgor ICAgICAgICBcKi8KKyAgICAgICAgcHJvdG8udG9TdHJpbmcgPSBmdW5jdGlv biAoKSB7CisgICAgICAgICAgICB2YXIgZG9jID0gdGhpcy5ub2RlLm93bmVy RG9jdW1lbnQsCisgICAgICAgICAgICAgICAgZiA9IGRvYy5jcmVhdGVEb2N1 bWVudEZyYWdtZW50KCksCisgICAgICAgICAgICAgICAgZCA9IGRvYy5jcmVh dGVFbGVtZW50KCJkaXYiKSwKKyAgICAgICAgICAgICAgICBzdmcgPSB0aGlz Lm5vZGUuY2xvbmVOb2RlKHRydWUpLAorICAgICAgICAgICAgICAgIHJlczsK KyAgICAgICAgICAgIGYuYXBwZW5kQ2hpbGQoZCk7CisgICAgICAgICAgICBk LmFwcGVuZENoaWxkKHN2Zyk7CisgICAgICAgICAgICBTbmFwLl8uJChzdmcs IHt4bWxuczogImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIn0pOworICAg ICAgICAgICAgcmVzID0gZC5pbm5lckhUTUw7CisgICAgICAgICAgICBmLnJl bW92ZUNoaWxkKGYuZmlyc3RDaGlsZCk7CisgICAgICAgICAgICByZXR1cm4g cmVzOworICAgICAgICB9OworICAgICAgICAvKlwKKyAgICAgICAgICogUGFw ZXIudG9EYXRhVVJMCisgICAgICAgICBbIG1ldGhvZCBdCisgICAgICAgICAq KgorICAgICAgICAgKiBSZXR1cm5zIFNWRyBjb2RlIGZvciB0aGUgQFBhcGVy IGFzIERhdGEgVVJJIHN0cmluZy4KKyAgICAgICAgID0gKHN0cmluZykgRGF0 YSBVUkkgc3RyaW5nCisgICAgICAgIFwqLworICAgICAgICBwcm90by50b0Rh dGFVUkwgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBpZiAod2luZG93 ICYmIHdpbmRvdy5idG9hKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJk YXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LCIgKyBidG9hKHVuZXNjYXBlKGVu Y29kZVVSSUNvbXBvbmVudCh0aGlzKSkpOworICAgICAgICAgICAgfQorICAg ICAgICB9OworICAgICAgICAvKlwKKyAgICAgICAgICogUGFwZXIuY2xlYXIK KyAgICAgICAgIFsgbWV0aG9kIF0KKyAgICAgICAgICoqCisgICAgICAgICAq IFJlbW92ZXMgYWxsIGNoaWxkIG5vZGVzIG9mIHRoZSBwYXBlciwgZXhjZXB0 IDxkZWZzPi4KKyAgICAgICAgXCovCisgICAgICAgIHByb3RvLmNsZWFyID0g ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLm5v ZGUuZmlyc3RDaGlsZCwKKyAgICAgICAgICAgICAgICBuZXh0OworICAgICAg ICAgICAgd2hpbGUgKG5vZGUpIHsKKyAgICAgICAgICAgICAgICBuZXh0ID0g bm9kZS5uZXh0U2libGluZzsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS50 YWdOYW1lICE9ICJkZWZzIikgeworICAgICAgICAgICAgICAgICAgICBub2Rl LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobm9kZSk7CisgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHJvdG8uY2xlYXIu Y2FsbCh7bm9kZTogbm9kZX0pOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICBub2RlID0gbmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfTsKKyAgICB9KCkpOworfSk7CisKKy8vIENvcHlyaWdodCAoYykgMjAx MyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNl cnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vu c2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkg bm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0 aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUg TGljZW5zZSBhdAorLy8KKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNl bnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBh cHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdh cmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3Ry aWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJB TlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJl c3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNw ZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8v IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorU25hcC5wbHVnaW4o ZnVuY3Rpb24gKFNuYXAsIEVsZW1lbnQsIFBhcGVyLCBnbG9iKSB7CisgICAg dmFyIGVscHJvdG8gPSBFbGVtZW50LnByb3RvdHlwZSwKKyAgICAgICAgaXMg PSBTbmFwLmlzLAorICAgICAgICBjbG9uZSA9IFNuYXAuXy5jbG9uZSwKKyAg ICAgICAgaGFzID0gImhhc093blByb3BlcnR5IiwKKyAgICAgICAgcDJzID0g Lyw/KFthLXpdKSw/L2dpLAorICAgICAgICB0b0Zsb2F0ID0gcGFyc2VGbG9h dCwKKyAgICAgICAgbWF0aCA9IE1hdGgsCisgICAgICAgIFBJID0gbWF0aC5Q SSwKKyAgICAgICAgbW1pbiA9IG1hdGgubWluLAorICAgICAgICBtbWF4ID0g bWF0aC5tYXgsCisgICAgICAgIHBvdyA9IG1hdGgucG93LAorICAgICAgICBh YnMgPSBtYXRoLmFiczsKKyAgICBmdW5jdGlvbiBwYXRocyhwcykgeworICAg ICAgICB2YXIgcCA9IHBhdGhzLnBzID0gcGF0aHMucHMgfHwge307CisgICAg ICAgIGlmIChwW3BzXSkgeworICAgICAgICAgICAgcFtwc10uc2xlZXAgPSAx MDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwW3BzXSA9IHsK KyAgICAgICAgICAgICAgICBzbGVlcDogMTAwCisgICAgICAgICAgICB9Owor ICAgICAgICB9CisgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewor ICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIHApIGlmIChwW2hhc10oa2V5 KSAmJiBrZXkgIT0gcHMpIHsKKyAgICAgICAgICAgICAgICBwW2tleV0uc2xl ZXAtLTsKKyAgICAgICAgICAgICAgICAhcFtrZXldLnNsZWVwICYmIGRlbGV0 ZSBwW2tleV07CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAg ICByZXR1cm4gcFtwc107CisgICAgfQorICAgIGZ1bmN0aW9uIGJveCh4LCB5 LCB3aWR0aCwgaGVpZ2h0KSB7CisgICAgICAgIGlmICh4ID09IG51bGwpIHsK KyAgICAgICAgICAgIHggPSB5ID0gd2lkdGggPSBoZWlnaHQgPSAwOworICAg ICAgICB9CisgICAgICAgIGlmICh5ID09IG51bGwpIHsKKyAgICAgICAgICAg IHkgPSB4Lnk7CisgICAgICAgICAgICB3aWR0aCA9IHgud2lkdGg7CisgICAg ICAgICAgICBoZWlnaHQgPSB4LmhlaWdodDsKKyAgICAgICAgICAgIHggPSB4 Lng7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg IHg6IHgsCisgICAgICAgICAgICB5OiB5LAorICAgICAgICAgICAgd2lkdGg6 IHdpZHRoLAorICAgICAgICAgICAgdzogd2lkdGgsCisgICAgICAgICAgICBo ZWlnaHQ6IGhlaWdodCwKKyAgICAgICAgICAgIGg6IGhlaWdodCwKKyAgICAg ICAgICAgIHgyOiB4ICsgd2lkdGgsCisgICAgICAgICAgICB5MjogeSArIGhl aWdodCwKKyAgICAgICAgICAgIGN4OiB4ICsgd2lkdGggLyAyLAorICAgICAg ICAgICAgY3k6IHkgKyBoZWlnaHQgLyAyLAorICAgICAgICAgICAgcjE6IG1h dGgubWluKHdpZHRoLCBoZWlnaHQpIC8gMiwKKyAgICAgICAgICAgIHIyOiBt YXRoLm1heCh3aWR0aCwgaGVpZ2h0KSAvIDIsCisgICAgICAgICAgICByMDog bWF0aC5zcXJ0KHdpZHRoICogd2lkdGggKyBoZWlnaHQgKiBoZWlnaHQpIC8g MiwKKyAgICAgICAgICAgIHBhdGg6IHJlY3RQYXRoKHgsIHksIHdpZHRoLCBo ZWlnaHQpLAorICAgICAgICAgICAgdmI6IFt4LCB5LCB3aWR0aCwgaGVpZ2h0 XS5qb2luKCIgIikKKyAgICAgICAgfTsKKyAgICB9CisgICAgZnVuY3Rpb24g dG9TdHJpbmcoKSB7CisgICAgICAgIHJldHVybiB0aGlzLmpvaW4oIiwiKS5y ZXBsYWNlKHAycywgIiQxIik7CisgICAgfQorICAgIGZ1bmN0aW9uIHBhdGhD bG9uZShwYXRoQXJyYXkpIHsKKyAgICAgICAgdmFyIHJlcyA9IGNsb25lKHBh dGhBcnJheSk7CisgICAgICAgIHJlcy50b1N0cmluZyA9IHRvU3RyaW5nOwor ICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBmdW5jdGlvbiBnZXRQ b2ludEF0U2VnbWVudExlbmd0aChwMXgsIHAxeSwgYzF4LCBjMXksIGMyeCwg YzJ5LCBwMngsIHAyeSwgbGVuZ3RoKSB7CisgICAgICAgIGlmIChsZW5ndGgg PT0gbnVsbCkgeworICAgICAgICAgICAgcmV0dXJuIGJlemxlbihwMXgsIHAx eSwgYzF4LCBjMXksIGMyeCwgYzJ5LCBwMngsIHAyeSk7CisgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gZmluZERvdHNBdFNlZ21lbnQo cDF4LCBwMXksIGMxeCwgYzF5LCBjMngsIGMyeSwgcDJ4LCBwMnksCisgICAg ICAgICAgICAgICAgZ2V0VG90TGVuKHAxeCwgcDF5LCBjMXgsIGMxeSwgYzJ4 LCBjMnksIHAyeCwgcDJ5LCBsZW5ndGgpKTsKKyAgICAgICAgfQorICAgIH0K KyAgICBmdW5jdGlvbiBnZXRMZW5ndGhGYWN0b3J5KGlzdG90YWwsIHN1YnBh dGgpIHsKKyAgICAgICAgZnVuY3Rpb24gTyh2YWwpIHsKKyAgICAgICAgICAg IHJldHVybiArKCt2YWwpLnRvRml4ZWQoMyk7CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuIFNuYXAuXy5jYWNoZXIoZnVuY3Rpb24gKHBhdGgsIGxlbmd0 aCwgb25seXN0YXJ0KSB7CisgICAgICAgICAgICBpZiAocGF0aCBpbnN0YW5j ZW9mIEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICBwYXRoID0gcGF0aC5h dHRyKCJkIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXRoID0g cGF0aDJjdXJ2ZShwYXRoKTsKKyAgICAgICAgICAgIHZhciB4LCB5LCBwLCBs LCBzcCA9ICIiLCBzdWJwYXRocyA9IHt9LCBwb2ludCwKKyAgICAgICAgICAg ICAgICBsZW4gPSAwOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlp ID0gcGF0aC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICAg ICAgcCA9IHBhdGhbaV07CisgICAgICAgICAgICAgICAgaWYgKHBbMF0gPT0g Ik0iKSB7CisgICAgICAgICAgICAgICAgICAgIHggPSArcFsxXTsKKyAgICAg ICAgICAgICAgICAgICAgeSA9ICtwWzJdOworICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGwgPSBnZXRQb2ludEF0U2Vn bWVudExlbmd0aCh4LCB5LCBwWzFdLCBwWzJdLCBwWzNdLCBwWzRdLCBwWzVd LCBwWzZdKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlbiArIGwgPiBs ZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJwYXRo ICYmICFzdWJwYXRocy5zdGFydCkgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBvaW50ID0gZ2V0UG9pbnRBdFNlZ21lbnRMZW5ndGgoeCwgeSwg cFsxXSwgcFsyXSwgcFszXSwgcFs0XSwgcFs1XSwgcFs2XSwgbGVuZ3RoIC0g bGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcCArPSBbCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDIiArIE8ocG9pbnQu c3RhcnQueCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8o cG9pbnQuc3RhcnQueSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE8ocG9pbnQubS54KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTyhwb2ludC5tLnkpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPKHBvaW50LngpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPKHBvaW50LnkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob25seXN0 YXJ0KSB7cmV0dXJuIHNwO30KKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdWJwYXRocy5zdGFydCA9IHNwOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNwID0gWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiTSIgKyBPKHBvaW50LngpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPKHBvaW50LnkpICsgIkMiICsgTyhwb2ludC5uLngpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPKHBvaW50Lm4ueSksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8ocG9pbnQuZW5kLngp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPKHBvaW50LmVu ZC55KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyhwWzVd KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyhwWzZdKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0uam9pbigpOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxlbiArPSBsOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHggPSArcFs1XTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB5ID0gK3BbNl07CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzdG90YWwgJiYgIXN1YnBh dGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludCA9IGdl dFBvaW50QXRTZWdtZW50TGVuZ3RoKHgsIHksIHBbMV0sIHBbMl0sIHBbM10s IHBbNF0sIHBbNV0sIHBbNl0sIGxlbmd0aCAtIGxlbik7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvaW50OworICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgIGxlbiArPSBsOworICAgICAgICAgICAgICAgICAgICB4 ID0gK3BbNV07CisgICAgICAgICAgICAgICAgICAgIHkgPSArcFs2XTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc3AgKz0gcC5zaGlm dCgpICsgcDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN1YnBhdGhz LmVuZCA9IHNwOworICAgICAgICAgICAgcG9pbnQgPSBpc3RvdGFsID8gbGVu IDogc3VicGF0aCA/IHN1YnBhdGhzIDogZmluZERvdHNBdFNlZ21lbnQoeCwg eSwgcFswXSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSwgcFs1XSwgMSk7Cisg ICAgICAgICAgICByZXR1cm4gcG9pbnQ7CisgICAgICAgIH0sIG51bGwsIFNu YXAuXy5jbG9uZSk7CisgICAgfQorICAgIHZhciBnZXRUb3RhbExlbmd0aCA9 IGdldExlbmd0aEZhY3RvcnkoMSksCisgICAgICAgIGdldFBvaW50QXRMZW5n dGggPSBnZXRMZW5ndGhGYWN0b3J5KCksCisgICAgICAgIGdldFN1YnBhdGhz QXRMZW5ndGggPSBnZXRMZW5ndGhGYWN0b3J5KDAsIDEpOworICAgIGZ1bmN0 aW9uIGZpbmREb3RzQXRTZWdtZW50KHAxeCwgcDF5LCBjMXgsIGMxeSwgYzJ4 LCBjMnksIHAyeCwgcDJ5LCB0KSB7CisgICAgICAgIHZhciB0MSA9IDEgLSB0 LAorICAgICAgICAgICAgdDEzID0gcG93KHQxLCAzKSwKKyAgICAgICAgICAg IHQxMiA9IHBvdyh0MSwgMiksCisgICAgICAgICAgICB0MiA9IHQgKiB0LAor ICAgICAgICAgICAgdDMgPSB0MiAqIHQsCisgICAgICAgICAgICB4ID0gdDEz ICogcDF4ICsgdDEyICogMyAqIHQgKiBjMXggKyB0MSAqIDMgKiB0ICogdCAq IGMyeCArIHQzICogcDJ4LAorICAgICAgICAgICAgeSA9IHQxMyAqIHAxeSAr IHQxMiAqIDMgKiB0ICogYzF5ICsgdDEgKiAzICogdCAqIHQgKiBjMnkgKyB0 MyAqIHAyeSwKKyAgICAgICAgICAgIG14ID0gcDF4ICsgMiAqIHQgKiAoYzF4 IC0gcDF4KSArIHQyICogKGMyeCAtIDIgKiBjMXggKyBwMXgpLAorICAgICAg ICAgICAgbXkgPSBwMXkgKyAyICogdCAqIChjMXkgLSBwMXkpICsgdDIgKiAo YzJ5IC0gMiAqIGMxeSArIHAxeSksCisgICAgICAgICAgICBueCA9IGMxeCAr IDIgKiB0ICogKGMyeCAtIGMxeCkgKyB0MiAqIChwMnggLSAyICogYzJ4ICsg YzF4KSwKKyAgICAgICAgICAgIG55ID0gYzF5ICsgMiAqIHQgKiAoYzJ5IC0g YzF5KSArIHQyICogKHAyeSAtIDIgKiBjMnkgKyBjMXkpLAorICAgICAgICAg ICAgYXggPSB0MSAqIHAxeCArIHQgKiBjMXgsCisgICAgICAgICAgICBheSA9 IHQxICogcDF5ICsgdCAqIGMxeSwKKyAgICAgICAgICAgIGN4ID0gdDEgKiBj MnggKyB0ICogcDJ4LAorICAgICAgICAgICAgY3kgPSB0MSAqIGMyeSArIHQg KiBwMnksCisgICAgICAgICAgICBhbHBoYSA9ICg5MCAtIG1hdGguYXRhbjIo bXggLSBueCwgbXkgLSBueSkgKiAxODAgLyBQSSk7CisgICAgICAgIC8vICht eCA+IG54IHx8IG15IDwgbnkpICYmIChhbHBoYSArPSAxODApOworICAgICAg ICByZXR1cm4geworICAgICAgICAgICAgeDogeCwKKyAgICAgICAgICAgIHk6 IHksCisgICAgICAgICAgICBtOiB7eDogbXgsIHk6IG15fSwKKyAgICAgICAg ICAgIG46IHt4OiBueCwgeTogbnl9LAorICAgICAgICAgICAgc3RhcnQ6IHt4 OiBheCwgeTogYXl9LAorICAgICAgICAgICAgZW5kOiB7eDogY3gsIHk6IGN5 fSwKKyAgICAgICAgICAgIGFscGhhOiBhbHBoYQorICAgICAgICB9OworICAg IH0KKyAgICBmdW5jdGlvbiBiZXppZXJCQm94KHAxeCwgcDF5LCBjMXgsIGMx eSwgYzJ4LCBjMnksIHAyeCwgcDJ5KSB7CisgICAgICAgIGlmICghU25hcC5p cyhwMXgsICJhcnJheSIpKSB7CisgICAgICAgICAgICBwMXggPSBbcDF4LCBw MXksIGMxeCwgYzF5LCBjMngsIGMyeSwgcDJ4LCBwMnldOworICAgICAgICB9 CisgICAgICAgIHZhciBiYm94ID0gY3VydmVEaW0uYXBwbHkobnVsbCwgcDF4 KTsKKyAgICAgICAgcmV0dXJuIGJveCgKKyAgICAgICAgICAgIGJib3gubWlu LngsCisgICAgICAgICAgICBiYm94Lm1pbi55LAorICAgICAgICAgICAgYmJv eC5tYXgueCAtIGJib3gubWluLngsCisgICAgICAgICAgICBiYm94Lm1heC55 IC0gYmJveC5taW4ueQorICAgICAgICApOworICAgIH0KKyAgICBmdW5jdGlv biBpc1BvaW50SW5zaWRlQkJveChiYm94LCB4LCB5KSB7CisgICAgICAgIHJl dHVybiAgeCA+PSBiYm94LnggJiYKKyAgICAgICAgICAgICAgICB4IDw9IGJi b3gueCArIGJib3gud2lkdGggJiYKKyAgICAgICAgICAgICAgICB5ID49IGJi b3gueSAmJgorICAgICAgICAgICAgICAgIHkgPD0gYmJveC55ICsgYmJveC5o ZWlnaHQ7CisgICAgfQorICAgIGZ1bmN0aW9uIGlzQkJveEludGVyc2VjdChi Ym94MSwgYmJveDIpIHsKKyAgICAgICAgYmJveDEgPSBib3goYmJveDEpOwor ICAgICAgICBiYm94MiA9IGJveChiYm94Mik7CisgICAgICAgIHJldHVybiBp c1BvaW50SW5zaWRlQkJveChiYm94MiwgYmJveDEueCwgYmJveDEueSkKKyAg ICAgICAgICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94KGJib3gyLCBiYm94MS54 MiwgYmJveDEueSkKKyAgICAgICAgICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94 KGJib3gyLCBiYm94MS54LCBiYm94MS55MikKKyAgICAgICAgICAgIHx8IGlz UG9pbnRJbnNpZGVCQm94KGJib3gyLCBiYm94MS54MiwgYmJveDEueTIpCisg ICAgICAgICAgICB8fCBpc1BvaW50SW5zaWRlQkJveChiYm94MSwgYmJveDIu eCwgYmJveDIueSkKKyAgICAgICAgICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94 KGJib3gxLCBiYm94Mi54MiwgYmJveDIueSkKKyAgICAgICAgICAgIHx8IGlz UG9pbnRJbnNpZGVCQm94KGJib3gxLCBiYm94Mi54LCBiYm94Mi55MikKKyAg ICAgICAgICAgIHx8IGlzUG9pbnRJbnNpZGVCQm94KGJib3gxLCBiYm94Mi54 MiwgYmJveDIueTIpCisgICAgICAgICAgICB8fCAoYmJveDEueCA8IGJib3gy LngyICYmIGJib3gxLnggPiBiYm94Mi54CisgICAgICAgICAgICAgICAgfHwg YmJveDIueCA8IGJib3gxLngyICYmIGJib3gyLnggPiBiYm94MS54KQorICAg ICAgICAgICAgJiYgKGJib3gxLnkgPCBiYm94Mi55MiAmJiBiYm94MS55ID4g YmJveDIueQorICAgICAgICAgICAgICAgIHx8IGJib3gyLnkgPCBiYm94MS55 MiAmJiBiYm94Mi55ID4gYmJveDEueSk7CisgICAgfQorICAgIGZ1bmN0aW9u IGJhc2UzKHQsIHAxLCBwMiwgcDMsIHA0KSB7CisgICAgICAgIHZhciB0MSA9 IC0zICogcDEgKyA5ICogcDIgLSA5ICogcDMgKyAzICogcDQsCisgICAgICAg ICAgICB0MiA9IHQgKiB0MSArIDYgKiBwMSAtIDEyICogcDIgKyA2ICogcDM7 CisgICAgICAgIHJldHVybiB0ICogdDIgLSAzICogcDEgKyAzICogcDI7Cisg ICAgfQorICAgIGZ1bmN0aW9uIGJlemxlbih4MSwgeTEsIHgyLCB5MiwgeDMs IHkzLCB4NCwgeTQsIHopIHsKKyAgICAgICAgaWYgKHogPT0gbnVsbCkgewor ICAgICAgICAgICAgeiA9IDE7CisgICAgICAgIH0KKyAgICAgICAgeiA9IHog PiAxID8gMSA6IHogPCAwID8gMCA6IHo7CisgICAgICAgIHZhciB6MiA9IHog LyAyLAorICAgICAgICAgICAgbiA9IDEyLAorICAgICAgICAgICAgVHZhbHVl cyA9IFstLjEyNTIsLjEyNTIsLS4zNjc4LC4zNjc4LC0uNTg3MywuNTg3Mywt Ljc2OTksLjc2OTksLS45MDQxLC45MDQxLC0uOTgxNiwuOTgxNl0sCisgICAg ICAgICAgICBDdmFsdWVzID0gWzAuMjQ5MSwwLjI0OTEsMC4yMzM1LDAuMjMz NSwwLjIwMzIsMC4yMDMyLDAuMTYwMSwwLjE2MDEsMC4xMDY5LDAuMTA2OSww LjA0NzIsMC4wNDcyXSwKKyAgICAgICAgICAgIHN1bSA9IDA7CisgICAgICAg IGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgICAgICB2 YXIgY3QgPSB6MiAqIFR2YWx1ZXNbaV0gKyB6MiwKKyAgICAgICAgICAgICAg ICB4YmFzZSA9IGJhc2UzKGN0LCB4MSwgeDIsIHgzLCB4NCksCisgICAgICAg ICAgICAgICAgeWJhc2UgPSBiYXNlMyhjdCwgeTEsIHkyLCB5MywgeTQpLAor ICAgICAgICAgICAgICAgIGNvbWIgPSB4YmFzZSAqIHhiYXNlICsgeWJhc2Ug KiB5YmFzZTsKKyAgICAgICAgICAgIHN1bSArPSBDdmFsdWVzW2ldICogbWF0 aC5zcXJ0KGNvbWIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB6MiAq IHN1bTsKKyAgICB9CisgICAgZnVuY3Rpb24gZ2V0VG90TGVuKHgxLCB5MSwg eDIsIHkyLCB4MywgeTMsIHg0LCB5NCwgbGwpIHsKKyAgICAgICAgaWYgKGxs IDwgMCB8fCBiZXpsZW4oeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0 KSA8IGxsKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg ICAgICAgdmFyIHQgPSAxLAorICAgICAgICAgICAgc3RlcCA9IHQgLyAyLAor ICAgICAgICAgICAgdDIgPSB0IC0gc3RlcCwKKyAgICAgICAgICAgIGwsCisg ICAgICAgICAgICBlID0gLjAxOworICAgICAgICBsID0gYmV6bGVuKHgxLCB5 MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NCwgdDIpOworICAgICAgICB3aGls ZSAoYWJzKGwgLSBsbCkgPiBlKSB7CisgICAgICAgICAgICBzdGVwIC89IDI7 CisgICAgICAgICAgICB0MiArPSAobCA8IGxsID8gMSA6IC0xKSAqIHN0ZXA7 CisgICAgICAgICAgICBsID0gYmV6bGVuKHgxLCB5MSwgeDIsIHkyLCB4Mywg eTMsIHg0LCB5NCwgdDIpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0 MjsKKyAgICB9CisgICAgZnVuY3Rpb24gaW50ZXJzZWN0KHgxLCB5MSwgeDIs IHkyLCB4MywgeTMsIHg0LCB5NCkgeworICAgICAgICBpZiAoCisgICAgICAg ICAgICBtbWF4KHgxLCB4MikgPCBtbWluKHgzLCB4NCkgfHwKKyAgICAgICAg ICAgIG1taW4oeDEsIHgyKSA+IG1tYXgoeDMsIHg0KSB8fAorICAgICAgICAg ICAgbW1heCh5MSwgeTIpIDwgbW1pbih5MywgeTQpIHx8CisgICAgICAgICAg ICBtbWluKHkxLCB5MikgPiBtbWF4KHkzLCB5NCkKKyAgICAgICAgKSB7Cisg ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIG54 ID0gKHgxICogeTIgLSB5MSAqIHgyKSAqICh4MyAtIHg0KSAtICh4MSAtIHgy KSAqICh4MyAqIHk0IC0geTMgKiB4NCksCisgICAgICAgICAgICBueSA9ICh4 MSAqIHkyIC0geTEgKiB4MikgKiAoeTMgLSB5NCkgLSAoeTEgLSB5MikgKiAo eDMgKiB5NCAtIHkzICogeDQpLAorICAgICAgICAgICAgZGVub21pbmF0b3Ig PSAoeDEgLSB4MikgKiAoeTMgLSB5NCkgLSAoeTEgLSB5MikgKiAoeDMgLSB4 NCk7CisKKyAgICAgICAgaWYgKCFkZW5vbWluYXRvcikgeworICAgICAgICAg ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBweCA9IG54IC8g ZGVub21pbmF0b3IsCisgICAgICAgICAgICBweSA9IG55IC8gZGVub21pbmF0 b3IsCisgICAgICAgICAgICBweDIgPSArcHgudG9GaXhlZCgyKSwKKyAgICAg ICAgICAgIHB5MiA9ICtweS50b0ZpeGVkKDIpOworICAgICAgICBpZiAoCisg ICAgICAgICAgICBweDIgPCArbW1pbih4MSwgeDIpLnRvRml4ZWQoMikgfHwK KyAgICAgICAgICAgIHB4MiA+ICttbWF4KHgxLCB4MikudG9GaXhlZCgyKSB8 fAorICAgICAgICAgICAgcHgyIDwgK21taW4oeDMsIHg0KS50b0ZpeGVkKDIp IHx8CisgICAgICAgICAgICBweDIgPiArbW1heCh4MywgeDQpLnRvRml4ZWQo MikgfHwKKyAgICAgICAgICAgIHB5MiA8ICttbWluKHkxLCB5MikudG9GaXhl ZCgyKSB8fAorICAgICAgICAgICAgcHkyID4gK21tYXgoeTEsIHkyKS50b0Zp eGVkKDIpIHx8CisgICAgICAgICAgICBweTIgPCArbW1pbih5MywgeTQpLnRv Rml4ZWQoMikgfHwKKyAgICAgICAgICAgIHB5MiA+ICttbWF4KHkzLCB5NCku dG9GaXhlZCgyKQorICAgICAgICApIHsKKyAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgfQorICAgICAgICByZXR1cm4ge3g6IHB4LCB5OiBweX07Cisg ICAgfQorICAgIGZ1bmN0aW9uIGludGVyKGJlejEsIGJlejIpIHsKKyAgICAg ICAgcmV0dXJuIGludGVySGVscGVyKGJlejEsIGJlejIpOworICAgIH0KKyAg ICBmdW5jdGlvbiBpbnRlckNvdW50KGJlejEsIGJlejIpIHsKKyAgICAgICAg cmV0dXJuIGludGVySGVscGVyKGJlejEsIGJlejIsIDEpOworICAgIH0KKyAg ICBmdW5jdGlvbiBpbnRlckhlbHBlcihiZXoxLCBiZXoyLCBqdXN0Q291bnQp IHsKKyAgICAgICAgdmFyIGJib3gxID0gYmV6aWVyQkJveChiZXoxKSwKKyAg ICAgICAgICAgIGJib3gyID0gYmV6aWVyQkJveChiZXoyKTsKKyAgICAgICAg aWYgKCFpc0JCb3hJbnRlcnNlY3QoYmJveDEsIGJib3gyKSkgeworICAgICAg ICAgICAgcmV0dXJuIGp1c3RDb3VudCA/IDAgOiBbXTsKKyAgICAgICAgfQor ICAgICAgICB2YXIgbDEgPSBiZXpsZW4uYXBwbHkoMCwgYmV6MSksCisgICAg ICAgICAgICBsMiA9IGJlemxlbi5hcHBseSgwLCBiZXoyKSwKKyAgICAgICAg ICAgIG4xID0gfn4obDEgLyA4KSwKKyAgICAgICAgICAgIG4yID0gfn4obDIg LyA4KSwKKyAgICAgICAgICAgIGRvdHMxID0gW10sCisgICAgICAgICAgICBk b3RzMiA9IFtdLAorICAgICAgICAgICAgeHkgPSB7fSwKKyAgICAgICAgICAg IHJlcyA9IGp1c3RDb3VudCA/IDAgOiBbXTsKKyAgICAgICAgZm9yICh2YXIg aSA9IDA7IGkgPCBuMSArIDE7IGkrKykgeworICAgICAgICAgICAgdmFyIHAg PSBmaW5kRG90c0F0U2VnbWVudC5hcHBseSgwLCBiZXoxLmNvbmNhdChpIC8g bjEpKTsKKyAgICAgICAgICAgIGRvdHMxLnB1c2goe3g6IHAueCwgeTogcC55 LCB0OiBpIC8gbjF9KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAw OyBpIDwgbjIgKyAxOyBpKyspIHsKKyAgICAgICAgICAgIHAgPSBmaW5kRG90 c0F0U2VnbWVudC5hcHBseSgwLCBiZXoyLmNvbmNhdChpIC8gbjIpKTsKKyAg ICAgICAgICAgIGRvdHMyLnB1c2goe3g6IHAueCwgeTogcC55LCB0OiBpIC8g bjJ9KTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjE7 IGkrKykgeworICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuMjsg aisrKSB7CisgICAgICAgICAgICAgICAgdmFyIGRpID0gZG90czFbaV0sCisg ICAgICAgICAgICAgICAgICAgIGRpMSA9IGRvdHMxW2kgKyAxXSwKKyAgICAg ICAgICAgICAgICAgICAgZGogPSBkb3RzMltqXSwKKyAgICAgICAgICAgICAg ICAgICAgZGoxID0gZG90czJbaiArIDFdLAorICAgICAgICAgICAgICAgICAg ICBjaSA9IGFicyhkaTEueCAtIGRpLngpIDwgLjAwMSA/ICJ5IiA6ICJ4IiwK KyAgICAgICAgICAgICAgICAgICAgY2ogPSBhYnMoZGoxLnggLSBkai54KSA8 IC4wMDEgPyAieSIgOiAieCIsCisgICAgICAgICAgICAgICAgICAgIGlzID0g aW50ZXJzZWN0KGRpLngsIGRpLnksIGRpMS54LCBkaTEueSwgZGoueCwgZGou eSwgZGoxLngsIGRqMS55KTsKKyAgICAgICAgICAgICAgICBpZiAoaXMpIHsK KyAgICAgICAgICAgICAgICAgICAgaWYgKHh5W2lzLngudG9GaXhlZCg0KV0g PT0gaXMueS50b0ZpeGVkKDQpKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICB4eVtpcy54LnRvRml4ZWQoNCldID0gaXMueS50b0ZpeGVk KDQpOworICAgICAgICAgICAgICAgICAgICB2YXIgdDEgPSBkaS50ICsgYWJz KChpc1tjaV0gLSBkaVtjaV0pIC8gKGRpMVtjaV0gLSBkaVtjaV0pKSAqIChk aTEudCAtIGRpLnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgdDIgPSBk ai50ICsgYWJzKChpc1tjal0gLSBkaltjal0pIC8gKGRqMVtjal0gLSBkaltj al0pKSAqIChkajEudCAtIGRqLnQpOworICAgICAgICAgICAgICAgICAgICBp ZiAodDEgPj0gMCAmJiB0MSA8PSAxICYmIHQyID49IDAgJiYgdDIgPD0gMSkg eworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGp1c3RDb3VudCkgewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcysrOworICAgICAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICByZXMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHg6IGlzLngsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHk6IGlzLnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHQxOiB0MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDI6 IHQyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgZnVuY3Rpb24gcGF0aElu dGVyc2VjdGlvbihwYXRoMSwgcGF0aDIpIHsKKyAgICAgICAgcmV0dXJuIGlu dGVyUGF0aEhlbHBlcihwYXRoMSwgcGF0aDIpOworICAgIH0KKyAgICBmdW5j dGlvbiBwYXRoSW50ZXJzZWN0aW9uTnVtYmVyKHBhdGgxLCBwYXRoMikgewor ICAgICAgICByZXR1cm4gaW50ZXJQYXRoSGVscGVyKHBhdGgxLCBwYXRoMiwg MSk7CisgICAgfQorICAgIGZ1bmN0aW9uIGludGVyUGF0aEhlbHBlcihwYXRo MSwgcGF0aDIsIGp1c3RDb3VudCkgeworICAgICAgICBwYXRoMSA9IHBhdGgy Y3VydmUocGF0aDEpOworICAgICAgICBwYXRoMiA9IHBhdGgyY3VydmUocGF0 aDIpOworICAgICAgICB2YXIgeDEsIHkxLCB4MiwgeTIsIHgxbSwgeTFtLCB4 Mm0sIHkybSwgYmV6MSwgYmV6MiwKKyAgICAgICAgICAgIHJlcyA9IGp1c3RD b3VudCA/IDAgOiBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0g cGF0aDEubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgdmFy IHBpID0gcGF0aDFbaV07CisgICAgICAgICAgICBpZiAocGlbMF0gPT0gIk0i KSB7CisgICAgICAgICAgICAgICAgeDEgPSB4MW0gPSBwaVsxXTsKKyAgICAg ICAgICAgICAgICB5MSA9IHkxbSA9IHBpWzJdOworICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICBpZiAocGlbMF0gPT0gIkMiKSB7Cisg ICAgICAgICAgICAgICAgICAgIGJlejEgPSBbeDEsIHkxXS5jb25jYXQocGku c2xpY2UoMSkpOworICAgICAgICAgICAgICAgICAgICB4MSA9IGJlejFbNl07 CisgICAgICAgICAgICAgICAgICAgIHkxID0gYmV6MVs3XTsKKyAgICAgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBiZXoxID0g W3gxLCB5MSwgeDEsIHkxLCB4MW0sIHkxbSwgeDFtLCB5MW1dOworICAgICAg ICAgICAgICAgICAgICB4MSA9IHgxbTsKKyAgICAgICAgICAgICAgICAgICAg eTEgPSB5MW07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGZvciAodmFyIGogPSAwLCBqaiA9IHBhdGgyLmxlbmd0aDsgaiA8IGpqOyBq KyspIHsKKyAgICAgICAgICAgICAgICAgICAgdmFyIHBqID0gcGF0aDJbal07 CisgICAgICAgICAgICAgICAgICAgIGlmIChwalswXSA9PSAiTSIpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHgyID0geDJtID0gcGpbMV07CisgICAg ICAgICAgICAgICAgICAgICAgICB5MiA9IHkybSA9IHBqWzJdOworICAgICAg ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHBqWzBdID09ICJDIikgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGJlejIgPSBbeDIsIHkyXS5jb25jYXQocGouc2xpY2UoMSkpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyID0gYmV6Mls2XTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB5MiA9IGJlejJbN107CisgICAg ICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJlejIgPSBbeDIsIHkyLCB4MiwgeTIsIHgybSwgeTJt LCB4Mm0sIHkybV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeDIg PSB4Mm07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeTIgPSB5Mm07 CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgICAgICB2YXIgaW50ciA9IGludGVySGVscGVyKGJlejEsIGJlejIsIGp1 c3RDb3VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanVzdENv dW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzICs9IGlu dHI7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwLCBrayA9IGlu dHIubGVuZ3RoOyBrIDwga2s7IGsrKykgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnRyW2tdLnNlZ21lbnQxID0gaTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50cltrXS5zZWdtZW50MiA9IGo7 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludHJba10uYmV6 MSA9IGJlejE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dHJba10uYmV6MiA9IGJlejI7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHJlcy5j b25jYXQoaW50cik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJlczsKKyAgICB9 CisgICAgZnVuY3Rpb24gaXNQb2ludEluc2lkZVBhdGgocGF0aCwgeCwgeSkg eworICAgICAgICB2YXIgYmJveCA9IHBhdGhCQm94KHBhdGgpOworICAgICAg ICByZXR1cm4gaXNQb2ludEluc2lkZUJCb3goYmJveCwgeCwgeSkgJiYKKyAg ICAgICAgICAgICAgIGludGVyUGF0aEhlbHBlcihwYXRoLCBbWyJNIiwgeCwg eV0sIFsiSCIsIGJib3gueDIgKyAxMF1dLCAxKSAlIDIgPT0gMTsKKyAgICB9 CisgICAgZnVuY3Rpb24gcGF0aEJCb3gocGF0aCkgeworICAgICAgICB2YXIg cHRoID0gcGF0aHMocGF0aCk7CisgICAgICAgIGlmIChwdGguYmJveCkgewor ICAgICAgICAgICAgcmV0dXJuIGNsb25lKHB0aC5iYm94KTsKKyAgICAgICAg fQorICAgICAgICBpZiAoIXBhdGgpIHsKKyAgICAgICAgICAgIHJldHVybiBi b3goKTsKKyAgICAgICAgfQorICAgICAgICBwYXRoID0gcGF0aDJjdXJ2ZShw YXRoKTsKKyAgICAgICAgdmFyIHggPSAwLAorICAgICAgICAgICAgeSA9IDAs CisgICAgICAgICAgICBYID0gW10sCisgICAgICAgICAgICBZID0gW10sCisg ICAgICAgICAgICBwOworICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBw YXRoLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIHAgPSBw YXRoW2ldOworICAgICAgICAgICAgaWYgKHBbMF0gPT0gIk0iKSB7CisgICAg ICAgICAgICAgICAgeCA9IHBbMV07CisgICAgICAgICAgICAgICAgeSA9IHBb Ml07CisgICAgICAgICAgICAgICAgWC5wdXNoKHgpOworICAgICAgICAgICAg ICAgIFkucHVzaCh5KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgdmFyIGRpbSA9IGN1cnZlRGltKHgsIHksIHBbMV0sIHBbMl0s IHBbM10sIHBbNF0sIHBbNV0sIHBbNl0pOworICAgICAgICAgICAgICAgIFgg PSBYLmNvbmNhdChkaW0ubWluLngsIGRpbS5tYXgueCk7CisgICAgICAgICAg ICAgICAgWSA9IFkuY29uY2F0KGRpbS5taW4ueSwgZGltLm1heC55KTsKKyAg ICAgICAgICAgICAgICB4ID0gcFs1XTsKKyAgICAgICAgICAgICAgICB5ID0g cFs2XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIg eG1pbiA9IG1taW4uYXBwbHkoMCwgWCksCisgICAgICAgICAgICB5bWluID0g bW1pbi5hcHBseSgwLCBZKSwKKyAgICAgICAgICAgIHhtYXggPSBtbWF4LmFw cGx5KDAsIFgpLAorICAgICAgICAgICAgeW1heCA9IG1tYXguYXBwbHkoMCwg WSksCisgICAgICAgICAgICBiYiA9IGJveCh4bWluLCB5bWluLCB4bWF4IC0g eG1pbiwgeW1heCAtIHltaW4pOworICAgICAgICBwdGguYmJveCA9IGNsb25l KGJiKTsKKyAgICAgICAgcmV0dXJuIGJiOworICAgIH0KKyAgICBmdW5jdGlv biByZWN0UGF0aCh4LCB5LCB3LCBoLCByKSB7CisgICAgICAgIGlmIChyKSB7 CisgICAgICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgICAgIFsiTSIs ICt4ICsgKCtyKSwgeV0sCisgICAgICAgICAgICAgICAgWyJsIiwgdyAtIHIg KiAyLCAwXSwKKyAgICAgICAgICAgICAgICBbImEiLCByLCByLCAwLCAwLCAx LCByLCByXSwKKyAgICAgICAgICAgICAgICBbImwiLCAwLCBoIC0gciAqIDJd LAorICAgICAgICAgICAgICAgIFsiYSIsIHIsIHIsIDAsIDAsIDEsIC1yLCBy XSwKKyAgICAgICAgICAgICAgICBbImwiLCByICogMiAtIHcsIDBdLAorICAg ICAgICAgICAgICAgIFsiYSIsIHIsIHIsIDAsIDAsIDEsIC1yLCAtcl0sCisg ICAgICAgICAgICAgICAgWyJsIiwgMCwgciAqIDIgLSBoXSwKKyAgICAgICAg ICAgICAgICBbImEiLCByLCByLCAwLCAwLCAxLCByLCAtcl0sCisgICAgICAg ICAgICAgICAgWyJ6Il0KKyAgICAgICAgICAgIF07CisgICAgICAgIH0KKyAg ICAgICAgdmFyIHJlcyA9IFtbIk0iLCB4LCB5XSwgWyJsIiwgdywgMF0sIFsi bCIsIDAsIGhdLCBbImwiLCAtdywgMF0sIFsieiJdXTsKKyAgICAgICAgcmVz LnRvU3RyaW5nID0gdG9TdHJpbmc7CisgICAgICAgIHJldHVybiByZXM7Cisg ICAgfQorICAgIGZ1bmN0aW9uIGVsbGlwc2VQYXRoKHgsIHksIHJ4LCByeSwg YSkgeworICAgICAgICBpZiAoYSA9PSBudWxsICYmIHJ5ID09IG51bGwpIHsK KyAgICAgICAgICAgIHJ5ID0gcng7CisgICAgICAgIH0KKyAgICAgICAgeCA9 ICt4OworICAgICAgICB5ID0gK3k7CisgICAgICAgIHJ4ID0gK3J4OworICAg ICAgICByeSA9ICtyeTsKKyAgICAgICAgaWYgKGEgIT0gbnVsbCkgeworICAg ICAgICAgICAgdmFyIHJhZCA9IE1hdGguUEkgLyAxODAsCisgICAgICAgICAg ICAgICAgeDEgPSB4ICsgcnggKiBNYXRoLmNvcygtcnkgKiByYWQpLAorICAg ICAgICAgICAgICAgIHgyID0geCArIHJ4ICogTWF0aC5jb3MoLWEgKiByYWQp LAorICAgICAgICAgICAgICAgIHkxID0geSArIHJ4ICogTWF0aC5zaW4oLXJ5 ICogcmFkKSwKKyAgICAgICAgICAgICAgICB5MiA9IHkgKyByeCAqIE1hdGgu c2luKC1hICogcmFkKSwKKyAgICAgICAgICAgICAgICByZXMgPSBbWyJNIiwg eDEsIHkxXSwgWyJBIiwgcngsIHJ4LCAwLCArKGEgLSByeSA+IDE4MCksIDAs IHgyLCB5Ml1dOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVz ID0gWworICAgICAgICAgICAgICAgIFsiTSIsIHgsIHldLAorICAgICAgICAg ICAgICAgIFsibSIsIDAsIC1yeV0sCisgICAgICAgICAgICAgICAgWyJhIiwg cngsIHJ5LCAwLCAxLCAxLCAwLCAyICogcnldLAorICAgICAgICAgICAgICAg IFsiYSIsIHJ4LCByeSwgMCwgMSwgMSwgMCwgLTIgKiByeV0sCisgICAgICAg ICAgICAgICAgWyJ6Il0KKyAgICAgICAgICAgIF07CisgICAgICAgIH0KKyAg ICAgICAgcmVzLnRvU3RyaW5nID0gdG9TdHJpbmc7CisgICAgICAgIHJldHVy biByZXM7CisgICAgfQorICAgIHZhciB1bml0MnB4ID0gU25hcC5fdW5pdDJw eCwKKyAgICAgICAgZ2V0UGF0aCA9IHsKKyAgICAgICAgcGF0aDogZnVuY3Rp b24gKGVsKSB7CisgICAgICAgICAgICByZXR1cm4gZWwuYXR0cigicGF0aCIp OworICAgICAgICB9LAorICAgICAgICBjaXJjbGU6IGZ1bmN0aW9uIChlbCkg eworICAgICAgICAgICAgdmFyIGF0dHIgPSB1bml0MnB4KGVsKTsKKyAgICAg ICAgICAgIHJldHVybiBlbGxpcHNlUGF0aChhdHRyLmN4LCBhdHRyLmN5LCBh dHRyLnIpOworICAgICAgICB9LAorICAgICAgICBlbGxpcHNlOiBmdW5jdGlv biAoZWwpIHsKKyAgICAgICAgICAgIHZhciBhdHRyID0gdW5pdDJweChlbCk7 CisgICAgICAgICAgICByZXR1cm4gZWxsaXBzZVBhdGgoYXR0ci5jeCB8fCAw LCBhdHRyLmN5IHx8IDAsIGF0dHIucngsIGF0dHIucnkpOworICAgICAgICB9 LAorICAgICAgICByZWN0OiBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAg IHZhciBhdHRyID0gdW5pdDJweChlbCk7CisgICAgICAgICAgICByZXR1cm4g cmVjdFBhdGgoYXR0ci54IHx8IDAsIGF0dHIueSB8fCAwLCBhdHRyLndpZHRo LCBhdHRyLmhlaWdodCwgYXR0ci5yeCwgYXR0ci5yeSk7CisgICAgICAgIH0s CisgICAgICAgIGltYWdlOiBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAg IHZhciBhdHRyID0gdW5pdDJweChlbCk7CisgICAgICAgICAgICByZXR1cm4g cmVjdFBhdGgoYXR0ci54IHx8IDAsIGF0dHIueSB8fCAwLCBhdHRyLndpZHRo LCBhdHRyLmhlaWdodCk7CisgICAgICAgIH0sCisgICAgICAgIGxpbmU6IGZ1 bmN0aW9uIChlbCkgeworICAgICAgICAgICAgcmV0dXJuICJNIiArIFtlbC5h dHRyKCJ4MSIpIHx8IDAsIGVsLmF0dHIoInkxIikgfHwgMCwgZWwuYXR0cigi eDIiKSwgZWwuYXR0cigieTIiKV07CisgICAgICAgIH0sCisgICAgICAgIHBv bHlsaW5lOiBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAgIHJldHVybiAi TSIgKyBlbC5hdHRyKCJwb2ludHMiKTsKKyAgICAgICAgfSwKKyAgICAgICAg cG9seWdvbjogZnVuY3Rpb24gKGVsKSB7CisgICAgICAgICAgICByZXR1cm4g Ik0iICsgZWwuYXR0cigicG9pbnRzIikgKyAieiI7CisgICAgICAgIH0sCisg ICAgICAgIGRlZmx0OiBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAgIHZh ciBiYm94ID0gZWwubm9kZS5nZXRCQm94KCk7CisgICAgICAgICAgICByZXR1 cm4gcmVjdFBhdGgoYmJveC54LCBiYm94LnksIGJib3gud2lkdGgsIGJib3gu aGVpZ2h0KTsKKyAgICAgICAgfQorICAgIH07CisgICAgZnVuY3Rpb24gcGF0 aFRvUmVsYXRpdmUocGF0aEFycmF5KSB7CisgICAgICAgIHZhciBwdGggPSBw YXRocyhwYXRoQXJyYXkpLAorICAgICAgICAgICAgbG93ZXJDYXNlID0gU3Ry aW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZTsKKyAgICAgICAgaWYgKHB0aC5y ZWwpIHsKKyAgICAgICAgICAgIHJldHVybiBwYXRoQ2xvbmUocHRoLnJlbCk7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFTbmFwLmlzKHBhdGhBcnJheSwg ImFycmF5IikgfHwgIVNuYXAuaXMocGF0aEFycmF5ICYmIHBhdGhBcnJheVsw XSwgImFycmF5IikpIHsKKyAgICAgICAgICAgIHBhdGhBcnJheSA9IFNuYXAu cGFyc2VQYXRoU3RyaW5nKHBhdGhBcnJheSk7CisgICAgICAgIH0KKyAgICAg ICAgdmFyIHJlcyA9IFtdLAorICAgICAgICAgICAgeCA9IDAsCisgICAgICAg ICAgICB5ID0gMCwKKyAgICAgICAgICAgIG14ID0gMCwKKyAgICAgICAgICAg IG15ID0gMCwKKyAgICAgICAgICAgIHN0YXJ0ID0gMDsKKyAgICAgICAgaWYg KHBhdGhBcnJheVswXVswXSA9PSAiTSIpIHsKKyAgICAgICAgICAgIHggPSBw YXRoQXJyYXlbMF1bMV07CisgICAgICAgICAgICB5ID0gcGF0aEFycmF5WzBd WzJdOworICAgICAgICAgICAgbXggPSB4OworICAgICAgICAgICAgbXkgPSB5 OworICAgICAgICAgICAgc3RhcnQrKzsKKyAgICAgICAgICAgIHJlcy5wdXNo KFsiTSIsIHgsIHldKTsKKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBp ID0gc3RhcnQsIGlpID0gcGF0aEFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKysp IHsKKyAgICAgICAgICAgIHZhciByID0gcmVzW2ldID0gW10sCisgICAgICAg ICAgICAgICAgcGEgPSBwYXRoQXJyYXlbaV07CisgICAgICAgICAgICBpZiAo cGFbMF0gIT0gbG93ZXJDYXNlLmNhbGwocGFbMF0pKSB7CisgICAgICAgICAg ICAgICAgclswXSA9IGxvd2VyQ2FzZS5jYWxsKHBhWzBdKTsKKyAgICAgICAg ICAgICAgICBzd2l0Y2ggKHJbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAg Y2FzZSAiYSI6CisgICAgICAgICAgICAgICAgICAgICAgICByWzFdID0gcGFb MV07CisgICAgICAgICAgICAgICAgICAgICAgICByWzJdID0gcGFbMl07Cisg ICAgICAgICAgICAgICAgICAgICAgICByWzNdID0gcGFbM107CisgICAgICAg ICAgICAgICAgICAgICAgICByWzRdID0gcGFbNF07CisgICAgICAgICAgICAg ICAgICAgICAgICByWzVdID0gcGFbNV07CisgICAgICAgICAgICAgICAgICAg ICAgICByWzZdID0gKyhwYVs2XSAtIHgpLnRvRml4ZWQoMyk7CisgICAgICAg ICAgICAgICAgICAgICAgICByWzddID0gKyhwYVs3XSAtIHkpLnRvRml4ZWQo Myk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgY2FzZSAidiI6CisgICAgICAgICAgICAgICAgICAgICAg ICByWzFdID0gKyhwYVsxXSAtIHkpLnRvRml4ZWQoMyk7CisgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz ZSAibSI6CisgICAgICAgICAgICAgICAgICAgICAgICBteCA9IHBhWzFdOwor ICAgICAgICAgICAgICAgICAgICAgICAgbXkgPSBwYVsyXTsKKyAgICAgICAg ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAg IGZvciAodmFyIGogPSAxLCBqaiA9IHBhLmxlbmd0aDsgaiA8IGpqOyBqKysp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2pdID0gKyhwYVtq XSAtICgoaiAlIDIpID8geCA6IHkpKS50b0ZpeGVkKDMpOworICAgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgciA9IHJlc1tpXSA9IFtd OworICAgICAgICAgICAgICAgIGlmIChwYVswXSA9PSAibSIpIHsKKyAgICAg ICAgICAgICAgICAgICAgbXggPSBwYVsxXSArIHg7CisgICAgICAgICAgICAg ICAgICAgIG15ID0gcGFbMl0gKyB5OworICAgICAgICAgICAgICAgIH0KKyAg ICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMCwga2sgPSBwYS5sZW5ndGg7 IGsgPCBrazsgaysrKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc1tpXVtr XSA9IHBhW2tdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIHZhciBsZW4gPSByZXNbaV0ubGVuZ3RoOworICAgICAg ICAgICAgc3dpdGNoIChyZXNbaV1bMF0pIHsKKyAgICAgICAgICAgICAgICBj YXNlICJ6IjoKKyAgICAgICAgICAgICAgICAgICAgeCA9IG14OworICAgICAg ICAgICAgICAgICAgICB5ID0gbXk7CisgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgImgiOgorICAgICAgICAgICAg ICAgICAgICB4ICs9ICtyZXNbaV1bbGVuIC0gMV07CisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgInYiOgorICAg ICAgICAgICAgICAgICAgICB5ICs9ICtyZXNbaV1bbGVuIC0gMV07CisgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgICAgICAgICAgIHggKz0gK3Jlc1tpXVtsZW4gLSAy XTsKKyAgICAgICAgICAgICAgICAgICAgeSArPSArcmVzW2ldW2xlbiAtIDFd OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJlcy50b1N0 cmluZyA9IHRvU3RyaW5nOworICAgICAgICBwdGgucmVsID0gcGF0aENsb25l KHJlcyk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIGZ1bmN0 aW9uIHBhdGhUb0Fic29sdXRlKHBhdGhBcnJheSkgeworICAgICAgICB2YXIg cHRoID0gcGF0aHMocGF0aEFycmF5KTsKKyAgICAgICAgaWYgKHB0aC5hYnMp IHsKKyAgICAgICAgICAgIHJldHVybiBwYXRoQ2xvbmUocHRoLmFicyk7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKCFpcyhwYXRoQXJyYXksICJhcnJheSIp IHx8ICFpcyhwYXRoQXJyYXkgJiYgcGF0aEFycmF5WzBdLCAiYXJyYXkiKSkg eyAvLyByb3VnaCBhc3N1bXB0aW9uCisgICAgICAgICAgICBwYXRoQXJyYXkg PSBTbmFwLnBhcnNlUGF0aFN0cmluZyhwYXRoQXJyYXkpOworICAgICAgICB9 CisgICAgICAgIGlmICghcGF0aEFycmF5IHx8ICFwYXRoQXJyYXkubGVuZ3Ro KSB7CisgICAgICAgICAgICByZXR1cm4gW1siTSIsIDAsIDBdXTsKKyAgICAg ICAgfQorICAgICAgICB2YXIgcmVzID0gW10sCisgICAgICAgICAgICB4ID0g MCwKKyAgICAgICAgICAgIHkgPSAwLAorICAgICAgICAgICAgbXggPSAwLAor ICAgICAgICAgICAgbXkgPSAwLAorICAgICAgICAgICAgc3RhcnQgPSAwLAor ICAgICAgICAgICAgcGEwOworICAgICAgICBpZiAocGF0aEFycmF5WzBdWzBd ID09ICJNIikgeworICAgICAgICAgICAgeCA9ICtwYXRoQXJyYXlbMF1bMV07 CisgICAgICAgICAgICB5ID0gK3BhdGhBcnJheVswXVsyXTsKKyAgICAgICAg ICAgIG14ID0geDsKKyAgICAgICAgICAgIG15ID0geTsKKyAgICAgICAgICAg IHN0YXJ0Kys7CisgICAgICAgICAgICByZXNbMF0gPSBbIk0iLCB4LCB5XTsK KyAgICAgICAgfQorICAgICAgICB2YXIgY3J6ID0gcGF0aEFycmF5Lmxlbmd0 aCA9PSAzICYmCisgICAgICAgICAgICBwYXRoQXJyYXlbMF1bMF0gPT0gIk0i ICYmCisgICAgICAgICAgICBwYXRoQXJyYXlbMV1bMF0udG9VcHBlckNhc2Uo KSA9PSAiUiIgJiYKKyAgICAgICAgICAgIHBhdGhBcnJheVsyXVswXS50b1Vw cGVyQ2FzZSgpID09ICJaIjsKKyAgICAgICAgZm9yICh2YXIgciwgcGEsIGkg PSBzdGFydCwgaWkgPSBwYXRoQXJyYXkubGVuZ3RoOyBpIDwgaWk7IGkrKykg eworICAgICAgICAgICAgcmVzLnB1c2gociA9IFtdKTsKKyAgICAgICAgICAg IHBhID0gcGF0aEFycmF5W2ldOworICAgICAgICAgICAgcGEwID0gcGFbMF07 CisgICAgICAgICAgICBpZiAocGEwICE9IHBhMC50b1VwcGVyQ2FzZSgpKSB7 CisgICAgICAgICAgICAgICAgclswXSA9IHBhMC50b1VwcGVyQ2FzZSgpOwor ICAgICAgICAgICAgICAgIHN3aXRjaCAoclswXSkgeworICAgICAgICAgICAg ICAgICAgICBjYXNlICJBIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJb MV0gPSBwYVsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJbMl0gPSBw YVsyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJbM10gPSBwYVszXTsK KyAgICAgICAgICAgICAgICAgICAgICAgIHJbNF0gPSBwYVs0XTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIHJbNV0gPSBwYVs1XTsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHJbNl0gPSArcGFbNl0gKyB4OworICAgICAgICAgICAg ICAgICAgICAgICAgcls3XSA9ICtwYVs3XSArIHk7CisgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAi ViI6CisgICAgICAgICAgICAgICAgICAgICAgICByWzFdID0gK3BhWzFdICsg eTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgICBjYXNlICJIIjoKKyAgICAgICAgICAgICAgICAgICAgICAg IHJbMV0gPSArcGFbMV0gKyB4OworICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIlIiOgorICAgICAg ICAgICAgICAgICAgICAgICAgdmFyIGRvdHMgPSBbeCwgeV0uY29uY2F0KHBh LnNsaWNlKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFy IGogPSAyLCBqaiA9IGRvdHMubGVuZ3RoOyBqIDwgamo7IGorKykgeworICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdHNbal0gPSArZG90c1tqXSAr IHg7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90c1srK2pdID0g K2RvdHNbal0gKyB5OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgICAgICAgICAgcmVzLnBvcCgpOworICAgICAgICAgICAg ICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdChjYXRtdWxsUm9tMmJlemll cihkb3RzLCBjcnopKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgICBjYXNlICJPIjoKKyAgICAgICAgICAg ICAgICAgICAgICAgIHJlcy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGRvdHMgPSBlbGxpcHNlUGF0aCh4LCB5LCBwYVsxXSwgcGFbMl0pOwor ICAgICAgICAgICAgICAgICAgICAgICAgZG90cy5wdXNoKGRvdHNbMF0pOwor ICAgICAgICAgICAgICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdChkb3Rz KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgICAgICAgICBjYXNlICJVIjoKKyAgICAgICAgICAgICAgICAgICAgICAg IHJlcy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcyA9IHJl cy5jb25jYXQoZWxsaXBzZVBhdGgoeCwgeSwgcGFbMV0sIHBhWzJdLCBwYVsz XSkpOworICAgICAgICAgICAgICAgICAgICAgICAgciA9IFsiVSJdLmNvbmNh dChyZXNbcmVzLmxlbmd0aCAtIDFdLnNsaWNlKC0yKSk7CisgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz ZSAiTSI6CisgICAgICAgICAgICAgICAgICAgICAgICBteCA9ICtwYVsxXSAr IHg7CisgICAgICAgICAgICAgICAgICAgICAgICBteSA9ICtwYVsyXSArIHk7 CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg ICAgICAgICAgICBmb3IgKGogPSAxLCBqaiA9IHBhLmxlbmd0aDsgaiA8IGpq OyBqKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByW2pdID0g K3BhW2pdICsgKChqICUgMikgPyB4IDogeSk7CisgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBl bHNlIGlmIChwYTAgPT0gIlIiKSB7CisgICAgICAgICAgICAgICAgZG90cyA9 IFt4LCB5XS5jb25jYXQocGEuc2xpY2UoMSkpOworICAgICAgICAgICAgICAg IHJlcy5wb3AoKTsKKyAgICAgICAgICAgICAgICByZXMgPSByZXMuY29uY2F0 KGNhdG11bGxSb20yYmV6aWVyKGRvdHMsIGNyeikpOworICAgICAgICAgICAg ICAgIHIgPSBbIlIiXS5jb25jYXQocGEuc2xpY2UoLTIpKTsKKyAgICAgICAg ICAgIH0gZWxzZSBpZiAocGEwID09ICJPIikgeworICAgICAgICAgICAgICAg IHJlcy5wb3AoKTsKKyAgICAgICAgICAgICAgICBkb3RzID0gZWxsaXBzZVBh dGgoeCwgeSwgcGFbMV0sIHBhWzJdKTsKKyAgICAgICAgICAgICAgICBkb3Rz LnB1c2goZG90c1swXSk7CisgICAgICAgICAgICAgICAgcmVzID0gcmVzLmNv bmNhdChkb3RzKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocGEwID09ICJV IikgeworICAgICAgICAgICAgICAgIHJlcy5wb3AoKTsKKyAgICAgICAgICAg ICAgICByZXMgPSByZXMuY29uY2F0KGVsbGlwc2VQYXRoKHgsIHksIHBhWzFd LCBwYVsyXSwgcGFbM10pKTsKKyAgICAgICAgICAgICAgICByID0gWyJVIl0u Y29uY2F0KHJlc1tyZXMubGVuZ3RoIC0gMV0uc2xpY2UoLTIpKTsKKyAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgayA9 IDAsIGtrID0gcGEubGVuZ3RoOyBrIDwga2s7IGsrKykgeworICAgICAgICAg ICAgICAgICAgICByW2tdID0gcGFba107CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgfQorICAgICAgICAgICAgcGEwID0gcGEwLnRvVXBwZXJD YXNlKCk7CisgICAgICAgICAgICBpZiAocGEwICE9ICJPIikgeworICAgICAg ICAgICAgICAgIHN3aXRjaCAoclswXSkgeworICAgICAgICAgICAgICAgICAg ICBjYXNlICJaIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSArbXg7 CisgICAgICAgICAgICAgICAgICAgICAgICB5ID0gK215OworICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh c2UgIkgiOgorICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHJbMV07Cisg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgY2FzZSAiViI6CisgICAgICAgICAgICAgICAgICAgICAgICB5ID0g clsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICBjYXNlICJNIjoKKyAgICAgICAgICAgICAgICAgICAg ICAgIG14ID0gcltyLmxlbmd0aCAtIDJdOworICAgICAgICAgICAgICAgICAg ICAgICAgbXkgPSByW3IubGVuZ3RoIC0gMV07CisgICAgICAgICAgICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICB4ID0gclty Lmxlbmd0aCAtIDJdOworICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHJb ci5sZW5ndGggLSAxXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9CisgICAgICAgIH0KKyAgICAgICAgcmVzLnRvU3RyaW5nID0gdG9TdHJp bmc7CisgICAgICAgIHB0aC5hYnMgPSBwYXRoQ2xvbmUocmVzKTsKKyAgICAg ICAgcmV0dXJuIHJlczsKKyAgICB9CisgICAgZnVuY3Rpb24gbDJjKHgxLCB5 MSwgeDIsIHkyKSB7CisgICAgICAgIHJldHVybiBbeDEsIHkxLCB4MiwgeTIs IHgyLCB5Ml07CisgICAgfQorICAgIGZ1bmN0aW9uIHEyYyh4MSwgeTEsIGF4 LCBheSwgeDIsIHkyKSB7CisgICAgICAgIHZhciBfMTMgPSAxIC8gMywKKyAg ICAgICAgICAgIF8yMyA9IDIgLyAzOworICAgICAgICByZXR1cm4gWworICAg ICAgICAgICAgICAgIF8xMyAqIHgxICsgXzIzICogYXgsCisgICAgICAgICAg ICAgICAgXzEzICogeTEgKyBfMjMgKiBheSwKKyAgICAgICAgICAgICAgICBf MTMgKiB4MiArIF8yMyAqIGF4LAorICAgICAgICAgICAgICAgIF8xMyAqIHky ICsgXzIzICogYXksCisgICAgICAgICAgICAgICAgeDIsCisgICAgICAgICAg ICAgICAgeTIKKyAgICAgICAgICAgIF07CisgICAgfQorICAgIGZ1bmN0aW9u IGEyYyh4MSwgeTEsIHJ4LCByeSwgYW5nbGUsIGxhcmdlX2FyY19mbGFnLCBz d2VlcF9mbGFnLCB4MiwgeTIsIHJlY3Vyc2l2ZSkgeworICAgICAgICAvLyBm b3IgbW9yZSBpbmZvcm1hdGlvbiBvZiB3aGVyZSB0aGlzIG1hdGggY2FtZSBm cm9tIHZpc2l0OgorICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9T VkcxMS9pbXBsbm90ZS5odG1sI0FyY0ltcGxlbWVudGF0aW9uTm90ZXMKKyAg ICAgICAgdmFyIF8xMjAgPSBQSSAqIDEyMCAvIDE4MCwKKyAgICAgICAgICAg IHJhZCA9IFBJIC8gMTgwICogKCthbmdsZSB8fCAwKSwKKyAgICAgICAgICAg IHJlcyA9IFtdLAorICAgICAgICAgICAgeHksCisgICAgICAgICAgICByb3Rh dGUgPSBTbmFwLl8uY2FjaGVyKGZ1bmN0aW9uICh4LCB5LCByYWQpIHsKKyAg ICAgICAgICAgICAgICB2YXIgWCA9IHggKiBtYXRoLmNvcyhyYWQpIC0geSAq IG1hdGguc2luKHJhZCksCisgICAgICAgICAgICAgICAgICAgIFkgPSB4ICog bWF0aC5zaW4ocmFkKSArIHkgKiBtYXRoLmNvcyhyYWQpOworICAgICAgICAg ICAgICAgIHJldHVybiB7eDogWCwgeTogWX07CisgICAgICAgICAgICB9KTsK KyAgICAgICAgaWYgKCFyZWN1cnNpdmUpIHsKKyAgICAgICAgICAgIHh5ID0g cm90YXRlKHgxLCB5MSwgLXJhZCk7CisgICAgICAgICAgICB4MSA9IHh5Lng7 CisgICAgICAgICAgICB5MSA9IHh5Lnk7CisgICAgICAgICAgICB4eSA9IHJv dGF0ZSh4MiwgeTIsIC1yYWQpOworICAgICAgICAgICAgeDIgPSB4eS54Owor ICAgICAgICAgICAgeTIgPSB4eS55OworICAgICAgICAgICAgdmFyIGNvcyA9 IG1hdGguY29zKFBJIC8gMTgwICogYW5nbGUpLAorICAgICAgICAgICAgICAg IHNpbiA9IG1hdGguc2luKFBJIC8gMTgwICogYW5nbGUpLAorICAgICAgICAg ICAgICAgIHggPSAoeDEgLSB4MikgLyAyLAorICAgICAgICAgICAgICAgIHkg PSAoeTEgLSB5MikgLyAyOworICAgICAgICAgICAgdmFyIGggPSAoeCAqIHgp IC8gKHJ4ICogcngpICsgKHkgKiB5KSAvIChyeSAqIHJ5KTsKKyAgICAgICAg ICAgIGlmIChoID4gMSkgeworICAgICAgICAgICAgICAgIGggPSBtYXRoLnNx cnQoaCk7CisgICAgICAgICAgICAgICAgcnggPSBoICogcng7CisgICAgICAg ICAgICAgICAgcnkgPSBoICogcnk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICB2YXIgcngyID0gcnggKiByeCwKKyAgICAgICAgICAgICAgICByeTIg PSByeSAqIHJ5LAorICAgICAgICAgICAgICAgIGsgPSAobGFyZ2VfYXJjX2Zs YWcgPT0gc3dlZXBfZmxhZyA/IC0xIDogMSkgKgorICAgICAgICAgICAgICAg ICAgICBtYXRoLnNxcnQoYWJzKChyeDIgKiByeTIgLSByeDIgKiB5ICogeSAt IHJ5MiAqIHggKiB4KSAvIChyeDIgKiB5ICogeSArIHJ5MiAqIHggKiB4KSkp LAorICAgICAgICAgICAgICAgIGN4ID0gayAqIHJ4ICogeSAvIHJ5ICsgKHgx ICsgeDIpIC8gMiwKKyAgICAgICAgICAgICAgICBjeSA9IGsgKiAtcnkgKiB4 IC8gcnggKyAoeTEgKyB5MikgLyAyLAorICAgICAgICAgICAgICAgIGYxID0g bWF0aC5hc2luKCgoeTEgLSBjeSkgLyByeSkudG9GaXhlZCg5KSksCisgICAg ICAgICAgICAgICAgZjIgPSBtYXRoLmFzaW4oKCh5MiAtIGN5KSAvIHJ5KS50 b0ZpeGVkKDkpKTsKKworICAgICAgICAgICAgZjEgPSB4MSA8IGN4ID8gUEkg LSBmMSA6IGYxOworICAgICAgICAgICAgZjIgPSB4MiA8IGN4ID8gUEkgLSBm MiA6IGYyOworICAgICAgICAgICAgZjEgPCAwICYmIChmMSA9IFBJICogMiAr IGYxKTsKKyAgICAgICAgICAgIGYyIDwgMCAmJiAoZjIgPSBQSSAqIDIgKyBm Mik7CisgICAgICAgICAgICBpZiAoc3dlZXBfZmxhZyAmJiBmMSA+IGYyKSB7 CisgICAgICAgICAgICAgICAgZjEgPSBmMSAtIFBJICogMjsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmICghc3dlZXBfZmxhZyAmJiBmMiA+IGYx KSB7CisgICAgICAgICAgICAgICAgZjIgPSBmMiAtIFBJICogMjsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGYxID0g cmVjdXJzaXZlWzBdOworICAgICAgICAgICAgZjIgPSByZWN1cnNpdmVbMV07 CisgICAgICAgICAgICBjeCA9IHJlY3Vyc2l2ZVsyXTsKKyAgICAgICAgICAg IGN5ID0gcmVjdXJzaXZlWzNdOworICAgICAgICB9CisgICAgICAgIHZhciBk ZiA9IGYyIC0gZjE7CisgICAgICAgIGlmIChhYnMoZGYpID4gXzEyMCkgewor ICAgICAgICAgICAgdmFyIGYyb2xkID0gZjIsCisgICAgICAgICAgICAgICAg eDJvbGQgPSB4MiwKKyAgICAgICAgICAgICAgICB5Mm9sZCA9IHkyOworICAg ICAgICAgICAgZjIgPSBmMSArIF8xMjAgKiAoc3dlZXBfZmxhZyAmJiBmMiA+ IGYxID8gMSA6IC0xKTsKKyAgICAgICAgICAgIHgyID0gY3ggKyByeCAqIG1h dGguY29zKGYyKTsKKyAgICAgICAgICAgIHkyID0gY3kgKyByeSAqIG1hdGgu c2luKGYyKTsKKyAgICAgICAgICAgIHJlcyA9IGEyYyh4MiwgeTIsIHJ4LCBy eSwgYW5nbGUsIDAsIHN3ZWVwX2ZsYWcsIHgyb2xkLCB5Mm9sZCwgW2YyLCBm Mm9sZCwgY3gsIGN5XSk7CisgICAgICAgIH0KKyAgICAgICAgZGYgPSBmMiAt IGYxOworICAgICAgICB2YXIgYzEgPSBtYXRoLmNvcyhmMSksCisgICAgICAg ICAgICBzMSA9IG1hdGguc2luKGYxKSwKKyAgICAgICAgICAgIGMyID0gbWF0 aC5jb3MoZjIpLAorICAgICAgICAgICAgczIgPSBtYXRoLnNpbihmMiksCisg ICAgICAgICAgICB0ID0gbWF0aC50YW4oZGYgLyA0KSwKKyAgICAgICAgICAg IGh4ID0gNCAvIDMgKiByeCAqIHQsCisgICAgICAgICAgICBoeSA9IDQgLyAz ICogcnkgKiB0LAorICAgICAgICAgICAgbTEgPSBbeDEsIHkxXSwKKyAgICAg ICAgICAgIG0yID0gW3gxICsgaHggKiBzMSwgeTEgLSBoeSAqIGMxXSwKKyAg ICAgICAgICAgIG0zID0gW3gyICsgaHggKiBzMiwgeTIgLSBoeSAqIGMyXSwK KyAgICAgICAgICAgIG00ID0gW3gyLCB5Ml07CisgICAgICAgIG0yWzBdID0g MiAqIG0xWzBdIC0gbTJbMF07CisgICAgICAgIG0yWzFdID0gMiAqIG0xWzFd IC0gbTJbMV07CisgICAgICAgIGlmIChyZWN1cnNpdmUpIHsKKyAgICAgICAg ICAgIHJldHVybiBbbTIsIG0zLCBtNF0uY29uY2F0KHJlcyk7CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICByZXMgPSBbbTIsIG0zLCBtNF0uY29u Y2F0KHJlcykuam9pbigpLnNwbGl0KCIsIik7CisgICAgICAgICAgICB2YXIg bmV3cmVzID0gW107CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkg PSByZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgICAg IG5ld3Jlc1tpXSA9IGkgJSAyID8gcm90YXRlKHJlc1tpIC0gMV0sIHJlc1tp XSwgcmFkKS55IDogcm90YXRlKHJlc1tpXSwgcmVzW2kgKyAxXSwgcmFkKS54 OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5ld3JlczsK KyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBmaW5kRG90QXRTZWdt ZW50KHAxeCwgcDF5LCBjMXgsIGMxeSwgYzJ4LCBjMnksIHAyeCwgcDJ5LCB0 KSB7CisgICAgICAgIHZhciB0MSA9IDEgLSB0OworICAgICAgICByZXR1cm4g eworICAgICAgICAgICAgeDogcG93KHQxLCAzKSAqIHAxeCArIHBvdyh0MSwg MikgKiAzICogdCAqIGMxeCArIHQxICogMyAqIHQgKiB0ICogYzJ4ICsgcG93 KHQsIDMpICogcDJ4LAorICAgICAgICAgICAgeTogcG93KHQxLCAzKSAqIHAx eSArIHBvdyh0MSwgMikgKiAzICogdCAqIGMxeSArIHQxICogMyAqIHQgKiB0 ICogYzJ5ICsgcG93KHQsIDMpICogcDJ5CisgICAgICAgIH07CisgICAgfQor CisgICAgLy8gUmV0dXJucyBib3VuZGluZyBib3ggb2YgY3ViaWMgYmV6aWVy IGN1cnZlLgorICAgIC8vIFNvdXJjZTogaHR0cDovL2Jsb2cuaGFja2Vycy1j YWZlLm5ldC8yMDA5LzA2L2hvdy10by1jYWxjdWxhdGUtYmV6aWVyLWN1cnZl cy1ib3VuZGluZy5odG1sCisgICAgLy8gT3JpZ2luYWwgdmVyc2lvbjogTklT SElPIEhpcm9rYXp1CisgICAgLy8gTW9kaWZpY2F0aW9uczogaHR0cHM6Ly9n aXRodWIuY29tL3RpbW8yMjM0NQorICAgIGZ1bmN0aW9uIGN1cnZlRGltKHgw LCB5MCwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5MykgeworICAgICAgICB2YXIg dHZhbHVlcyA9IFtdLAorICAgICAgICAgICAgYm91bmRzID0gW1tdLCBbXV0s CisgICAgICAgICAgICBhLCBiLCBjLCB0LCB0MSwgdDIsIGIyYWMsIHNxcnRi MmFjOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI7ICsraSkgewor ICAgICAgICAgICAgaWYgKGkgPT0gMCkgeworICAgICAgICAgICAgICAgIGIg PSA2ICogeDAgLSAxMiAqIHgxICsgNiAqIHgyOworICAgICAgICAgICAgICAg IGEgPSAtMyAqIHgwICsgOSAqIHgxIC0gOSAqIHgyICsgMyAqIHgzOworICAg ICAgICAgICAgICAgIGMgPSAzICogeDEgLSAzICogeDA7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGIgPSA2ICogeTAgLSAxMiAq IHkxICsgNiAqIHkyOworICAgICAgICAgICAgICAgIGEgPSAtMyAqIHkwICsg OSAqIHkxIC0gOSAqIHkyICsgMyAqIHkzOworICAgICAgICAgICAgICAgIGMg PSAzICogeTEgLSAzICogeTA7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoYWJzKGEpIDwgMWUtMTIpIHsKKyAgICAgICAgICAgICAgICBpZiAo YWJzKGIpIDwgMWUtMTIpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udGlu dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHQgPSAt YyAvIGI7CisgICAgICAgICAgICAgICAgaWYgKDAgPCB0ICYmIHQgPCAxKSB7 CisgICAgICAgICAgICAgICAgICAgIHR2YWx1ZXMucHVzaCh0KTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBiMmFjID0gYiAqIGIgLSA0ICogYyAq IGE7CisgICAgICAgICAgICBzcXJ0YjJhYyA9IG1hdGguc3FydChiMmFjKTsK KyAgICAgICAgICAgIGlmIChiMmFjIDwgMCkgeworICAgICAgICAgICAgICAg IGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdDEgPSAo LWIgKyBzcXJ0YjJhYykgLyAoMiAqIGEpOworICAgICAgICAgICAgaWYgKDAg PCB0MSAmJiB0MSA8IDEpIHsKKyAgICAgICAgICAgICAgICB0dmFsdWVzLnB1 c2godDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdDIgPSAoLWIg LSBzcXJ0YjJhYykgLyAoMiAqIGEpOworICAgICAgICAgICAgaWYgKDAgPCB0 MiAmJiB0MiA8IDEpIHsKKyAgICAgICAgICAgICAgICB0dmFsdWVzLnB1c2go dDIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmFy IHgsIHksIGogPSB0dmFsdWVzLmxlbmd0aCwKKyAgICAgICAgICAgIGpsZW4g PSBqLAorICAgICAgICAgICAgbXQ7CisgICAgICAgIHdoaWxlIChqLS0pIHsK KyAgICAgICAgICAgIHQgPSB0dmFsdWVzW2pdOworICAgICAgICAgICAgbXQg PSAxIC0gdDsKKyAgICAgICAgICAgIGJvdW5kc1swXVtqXSA9IChtdCAqIG10 ICogbXQgKiB4MCkgKyAoMyAqIG10ICogbXQgKiB0ICogeDEpICsgKDMgKiBt dCAqIHQgKiB0ICogeDIpICsgKHQgKiB0ICogdCAqIHgzKTsKKyAgICAgICAg ICAgIGJvdW5kc1sxXVtqXSA9IChtdCAqIG10ICogbXQgKiB5MCkgKyAoMyAq IG10ICogbXQgKiB0ICogeTEpICsgKDMgKiBtdCAqIHQgKiB0ICogeTIpICsg KHQgKiB0ICogdCAqIHkzKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvdW5k c1swXVtqbGVuXSA9IHgwOworICAgICAgICBib3VuZHNbMV1bamxlbl0gPSB5 MDsKKyAgICAgICAgYm91bmRzWzBdW2psZW4gKyAxXSA9IHgzOworICAgICAg ICBib3VuZHNbMV1bamxlbiArIDFdID0geTM7CisgICAgICAgIGJvdW5kc1sw XS5sZW5ndGggPSBib3VuZHNbMV0ubGVuZ3RoID0gamxlbiArIDI7CisKKwor ICAgICAgICByZXR1cm4geworICAgICAgICAgIG1pbjoge3g6IG1taW4uYXBw bHkoMCwgYm91bmRzWzBdKSwgeTogbW1pbi5hcHBseSgwLCBib3VuZHNbMV0p fSwKKyAgICAgICAgICBtYXg6IHt4OiBtbWF4LmFwcGx5KDAsIGJvdW5kc1sw XSksIHk6IG1tYXguYXBwbHkoMCwgYm91bmRzWzFdKX0KKyAgICAgICAgfTsK KyAgICB9CisKKyAgICBmdW5jdGlvbiBwYXRoMmN1cnZlKHBhdGgsIHBhdGgy KSB7CisgICAgICAgIHZhciBwdGggPSAhcGF0aDIgJiYgcGF0aHMocGF0aCk7 CisgICAgICAgIGlmICghcGF0aDIgJiYgcHRoLmN1cnZlKSB7CisgICAgICAg ICAgICByZXR1cm4gcGF0aENsb25lKHB0aC5jdXJ2ZSk7CisgICAgICAgIH0K KyAgICAgICAgdmFyIHAgPSBwYXRoVG9BYnNvbHV0ZShwYXRoKSwKKyAgICAg ICAgICAgIHAyID0gcGF0aDIgJiYgcGF0aFRvQWJzb2x1dGUocGF0aDIpLAor ICAgICAgICAgICAgYXR0cnMgPSB7eDogMCwgeTogMCwgYng6IDAsIGJ5OiAw LCBYOiAwLCBZOiAwLCBxeDogbnVsbCwgcXk6IG51bGx9LAorICAgICAgICAg ICAgYXR0cnMyID0ge3g6IDAsIHk6IDAsIGJ4OiAwLCBieTogMCwgWDogMCwg WTogMCwgcXg6IG51bGwsIHF5OiBudWxsfSwKKyAgICAgICAgICAgIHByb2Nl c3NQYXRoID0gZnVuY3Rpb24gKHBhdGgsIGQsIHBjb20pIHsKKyAgICAgICAg ICAgICAgICB2YXIgbngsIG55OworICAgICAgICAgICAgICAgIGlmICghcGF0 aCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gWyJDIiwgZC54LCBk LnksIGQueCwgZC55LCBkLngsIGQueV07CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICEocGF0aFswXSBpbiB7VDogMSwgUTogMX0pICYm IChkLnF4ID0gZC5xeSA9IG51bGwpOworICAgICAgICAgICAgICAgIHN3aXRj aCAocGF0aFswXSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlICJNIjoK KyAgICAgICAgICAgICAgICAgICAgICAgIGQuWCA9IHBhdGhbMV07CisgICAg ICAgICAgICAgICAgICAgICAgICBkLlkgPSBwYXRoWzJdOworICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh c2UgIkEiOgorICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IFsiQyJd LmNvbmNhdChhMmMuYXBwbHkoMCwgW2QueCwgZC55XS5jb25jYXQocGF0aC5z bGljZSgxKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICAgICAgICBjYXNlICJTIjoKKyAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChwY29tID09ICJDIiB8fCBwY29tID09ICJTIikgeyAv LyBJbiAiUyIgY2FzZSB3ZSBoYXZlIHRvIHRha2UgaW50byBhY2NvdW50LCBp ZiB0aGUgcHJldmlvdXMgY29tbWFuZCBpcyBDL1MuCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbnggPSBkLnggKiAyIC0gZC5ieDsgICAgICAgICAg Ly8gQW5kIHJlZmxlY3QgdGhlIHByZXZpb3VzCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbnkgPSBkLnkgKiAyIC0gZC5ieTsgICAgICAgICAgLy8g Y29tbWFuZCdzIGNvbnRyb2wgcG9pbnQgcmVsYXRpdmUgdG8gdGhlIGN1cnJl bnQgcG9pbnQuCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgLy8gb3Igc29tZSBlbHNlIG9yIG5vdGhpbmcKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBueCA9IGQueDsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBueSA9IGQueTsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBbIkMiLCBueCwg bnldLmNvbmNhdChwYXRoLnNsaWNlKDEpKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICJUIjoK KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwY29tID09ICJRIiB8fCBw Y29tID09ICJUIikgeyAvLyBJbiAiVCIgY2FzZSB3ZSBoYXZlIHRvIHRha2Ug aW50byBhY2NvdW50LCBpZiB0aGUgcHJldmlvdXMgY29tbWFuZCBpcyBRL1Qu CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5xeCA9IGQueCAqIDIg LSBkLnF4OyAgICAgICAgLy8gQW5kIG1ha2UgYSByZWZsZWN0aW9uIHNpbWls YXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnF5ID0gZC55ICog MiAtIGQucXk7ICAgICAgICAvLyB0byBjYXNlICJTIi4KKyAgICAgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Ug eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciBzb21ldGhpbmcg ZWxzZSBvciBub3RoaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZC5xeCA9IGQueDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnF5 ID0gZC55OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICAgICAgcGF0aCA9IFsiQyJdLmNvbmNhdChxMmMoZC54LCBk LnksIGQucXgsIGQucXksIHBhdGhbMV0sIHBhdGhbMl0pKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj YXNlICJRIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGQucXggPSBwYXRo WzFdOworICAgICAgICAgICAgICAgICAgICAgICAgZC5xeSA9IHBhdGhbMl07 CisgICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gWyJDIl0uY29uY2F0 KHEyYyhkLngsIGQueSwgcGF0aFsxXSwgcGF0aFsyXSwgcGF0aFszXSwgcGF0 aFs0XSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgICAgIGNhc2UgIkwiOgorICAgICAgICAgICAgICAgICAg ICAgICAgcGF0aCA9IFsiQyJdLmNvbmNhdChsMmMoZC54LCBkLnksIHBhdGhb MV0sIHBhdGhbMl0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr OworICAgICAgICAgICAgICAgICAgICBjYXNlICJIIjoKKyAgICAgICAgICAg ICAgICAgICAgICAgIHBhdGggPSBbIkMiXS5jb25jYXQobDJjKGQueCwgZC55 LCBwYXRoWzFdLCBkLnkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICJWIjoKKyAgICAgICAg ICAgICAgICAgICAgICAgIHBhdGggPSBbIkMiXS5jb25jYXQobDJjKGQueCwg ZC55LCBkLngsIHBhdGhbMV0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICJaIjoKKyAgICAg ICAgICAgICAgICAgICAgICAgIHBhdGggPSBbIkMiXS5jb25jYXQobDJjKGQu eCwgZC55LCBkLlgsIGQuWSkpOworICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJl dHVybiBwYXRoOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGZpeEFy YyA9IGZ1bmN0aW9uIChwcCwgaSkgeworICAgICAgICAgICAgICAgIGlmIChw cFtpXS5sZW5ndGggPiA3KSB7CisgICAgICAgICAgICAgICAgICAgIHBwW2ld LnNoaWZ0KCk7CisgICAgICAgICAgICAgICAgICAgIHZhciBwaSA9IHBwW2ld OworICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGkubGVuZ3RoKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBwY29tczFbaV0gPSAiQSI7IC8vIGlm IGNyZWF0ZWQgbXVsdGlwbGUgQzpzLCB0aGVpciBvcmlnaW5hbCBzZWcgaXMg c2F2ZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIHAyICYmIChwY29tczJb aV0gPSAiQSIpOyAvLyB0aGUgc2FtZSBhcyBhYm92ZQorICAgICAgICAgICAg ICAgICAgICAgICAgcHAuc3BsaWNlKGkrKywgMCwgWyJDIl0uY29uY2F0KHBp LnNwbGljZSgwLCA2KSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgICAgIHBwLnNwbGljZShpLCAxKTsKKyAgICAgICAgICAg ICAgICAgICAgaWkgPSBtbWF4KHAubGVuZ3RoLCBwMiAmJiBwMi5sZW5ndGgg fHwgMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAg ICAgICAgICAgIGZpeE0gPSBmdW5jdGlvbiAocGF0aDEsIHBhdGgyLCBhMSwg YTIsIGkpIHsKKyAgICAgICAgICAgICAgICBpZiAocGF0aDEgJiYgcGF0aDIg JiYgcGF0aDFbaV1bMF0gPT0gIk0iICYmIHBhdGgyW2ldWzBdICE9ICJNIikg eworICAgICAgICAgICAgICAgICAgICBwYXRoMi5zcGxpY2UoaSwgMCwgWyJN IiwgYTIueCwgYTIueV0pOworICAgICAgICAgICAgICAgICAgICBhMS5ieCA9 IDA7CisgICAgICAgICAgICAgICAgICAgIGExLmJ5ID0gMDsKKyAgICAgICAg ICAgICAgICAgICAgYTEueCA9IHBhdGgxW2ldWzFdOworICAgICAgICAgICAg ICAgICAgICBhMS55ID0gcGF0aDFbaV1bMl07CisgICAgICAgICAgICAgICAg ICAgIGlpID0gbW1heChwLmxlbmd0aCwgcDIgJiYgcDIubGVuZ3RoIHx8IDAp OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAg ICAgICBwY29tczEgPSBbXSwgLy8gcGF0aCBjb21tYW5kcyBvZiBvcmlnaW5h bCBwYXRoIHAKKyAgICAgICAgICAgIHBjb21zMiA9IFtdLCAvLyBwYXRoIGNv bW1hbmRzIG9mIG9yaWdpbmFsIHBhdGggcDIKKyAgICAgICAgICAgIHBmaXJz dCA9ICIiLCAvLyB0ZW1wb3JhcnkgaG9sZGVyIGZvciBvcmlnaW5hbCBwYXRo IGNvbW1hbmQKKyAgICAgICAgICAgIHBjb20gPSAiIjsgLy8gaG9sZGVyIGZv ciBwcmV2aW91cyBwYXRoIGNvbW1hbmQgb2Ygb3JpZ2luYWwgcGF0aAorICAg ICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBtbWF4KHAubGVuZ3RoLCBwMiAm JiBwMi5sZW5ndGggfHwgMCk7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAg ICBwW2ldICYmIChwZmlyc3QgPSBwW2ldWzBdKTsgLy8gc2F2ZSBjdXJyZW50 IHBhdGggY29tbWFuZAorCisgICAgICAgICAgICBpZiAocGZpcnN0ICE9ICJD IikgLy8gQyBpcyBub3Qgc2F2ZWQgeWV0LCBiZWNhdXNlIGl0IG1heSBiZSBy ZXN1bHQgb2YgY29udmVyc2lvbgorICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgIHBjb21zMVtpXSA9IHBmaXJzdDsgLy8gU2F2ZSBjdXJyZW50IHBh dGggY29tbWFuZAorICAgICAgICAgICAgICAgIGkgJiYgKCBwY29tID0gcGNv bXMxW2kgLSAxXSk7IC8vIEdldCBwcmV2aW91cyBwYXRoIGNvbW1hbmQgcGNv bQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcFtpXSA9IHByb2Nlc3NQ YXRoKHBbaV0sIGF0dHJzLCBwY29tKTsgLy8gUHJldmlvdXMgcGF0aCBjb21t YW5kIGlzIGlucHV0dGVkIHRvIHByb2Nlc3NQYXRoCisKKyAgICAgICAgICAg IGlmIChwY29tczFbaV0gIT0gIkEiICYmIHBmaXJzdCA9PSAiQyIpIHBjb21z MVtpXSA9ICJDIjsgLy8gQSBpcyB0aGUgb25seSBjb21tYW5kCisgICAgICAg ICAgICAvLyB3aGljaCBtYXkgcHJvZHVjZSBtdWx0aXBsZSBDOnMKKyAgICAg ICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgQyBpcyBh bHNvIEMgaW4gb3JpZ2luYWwgcGF0aAorCisgICAgICAgICAgICBmaXhBcmMo cCwgaSk7IC8vIGZpeEFyYyBhZGRzIGFsc28gdGhlIHJpZ2h0IGFtb3VudCBv ZiBBOnMgdG8gcGNvbXMxCisKKyAgICAgICAgICAgIGlmIChwMikgeyAvLyB0 aGUgc2FtZSBwcm9jZWR1cmVzIGlzIGRvbmUgdG8gcDIKKyAgICAgICAgICAg ICAgICBwMltpXSAmJiAocGZpcnN0ID0gcDJbaV1bMF0pOworICAgICAgICAg ICAgICAgIGlmIChwZmlyc3QgIT0gIkMiKSB7CisgICAgICAgICAgICAgICAg ICAgIHBjb21zMltpXSA9IHBmaXJzdDsKKyAgICAgICAgICAgICAgICAgICAg aSAmJiAocGNvbSA9IHBjb21zMltpIC0gMV0pOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBwMltpXSA9IHByb2Nlc3NQYXRoKHAyW2ld LCBhdHRyczIsIHBjb20pOworCisgICAgICAgICAgICAgICAgaWYgKHBjb21z MltpXSAhPSAiQSIgJiYgcGZpcnN0ID09ICJDIikgeworICAgICAgICAgICAg ICAgICAgICBwY29tczJbaV0gPSAiQyI7CisgICAgICAgICAgICAgICAgfQor CisgICAgICAgICAgICAgICAgZml4QXJjKHAyLCBpKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGZpeE0ocCwgcDIsIGF0dHJzLCBhdHRyczIsIGkp OworICAgICAgICAgICAgZml4TShwMiwgcCwgYXR0cnMyLCBhdHRycywgaSk7 CisgICAgICAgICAgICB2YXIgc2VnID0gcFtpXSwKKyAgICAgICAgICAgICAg ICBzZWcyID0gcDIgJiYgcDJbaV0sCisgICAgICAgICAgICAgICAgc2VnbGVu ID0gc2VnLmxlbmd0aCwKKyAgICAgICAgICAgICAgICBzZWcybGVuID0gcDIg JiYgc2VnMi5sZW5ndGg7CisgICAgICAgICAgICBhdHRycy54ID0gc2VnW3Nl Z2xlbiAtIDJdOworICAgICAgICAgICAgYXR0cnMueSA9IHNlZ1tzZWdsZW4g LSAxXTsKKyAgICAgICAgICAgIGF0dHJzLmJ4ID0gdG9GbG9hdChzZWdbc2Vn bGVuIC0gNF0pIHx8IGF0dHJzLng7CisgICAgICAgICAgICBhdHRycy5ieSA9 IHRvRmxvYXQoc2VnW3NlZ2xlbiAtIDNdKSB8fCBhdHRycy55OworICAgICAg ICAgICAgYXR0cnMyLmJ4ID0gcDIgJiYgKHRvRmxvYXQoc2VnMltzZWcybGVu IC0gNF0pIHx8IGF0dHJzMi54KTsKKyAgICAgICAgICAgIGF0dHJzMi5ieSA9 IHAyICYmICh0b0Zsb2F0KHNlZzJbc2VnMmxlbiAtIDNdKSB8fCBhdHRyczIu eSk7CisgICAgICAgICAgICBhdHRyczIueCA9IHAyICYmIHNlZzJbc2VnMmxl biAtIDJdOworICAgICAgICAgICAgYXR0cnMyLnkgPSBwMiAmJiBzZWcyW3Nl ZzJsZW4gLSAxXTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXAyKSB7Cisg ICAgICAgICAgICBwdGguY3VydmUgPSBwYXRoQ2xvbmUocCk7CisgICAgICAg IH0KKyAgICAgICAgcmV0dXJuIHAyID8gW3AsIHAyXSA6IHA7CisgICAgfQor ICAgIGZ1bmN0aW9uIG1hcFBhdGgocGF0aCwgbWF0cml4KSB7CisgICAgICAg IGlmICghbWF0cml4KSB7CisgICAgICAgICAgICByZXR1cm4gcGF0aDsKKyAg ICAgICAgfQorICAgICAgICB2YXIgeCwgeSwgaSwgaiwgaWksIGpqLCBwYXRo aTsKKyAgICAgICAgcGF0aCA9IHBhdGgyY3VydmUocGF0aCk7CisgICAgICAg IGZvciAoaSA9IDAsIGlpID0gcGF0aC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7 CisgICAgICAgICAgICBwYXRoaSA9IHBhdGhbaV07CisgICAgICAgICAgICBm b3IgKGogPSAxLCBqaiA9IHBhdGhpLmxlbmd0aDsgaiA8IGpqOyBqICs9IDIp IHsKKyAgICAgICAgICAgICAgICB4ID0gbWF0cml4LngocGF0aGlbal0sIHBh dGhpW2ogKyAxXSk7CisgICAgICAgICAgICAgICAgeSA9IG1hdHJpeC55KHBh dGhpW2pdLCBwYXRoaVtqICsgMV0pOworICAgICAgICAgICAgICAgIHBhdGhp W2pdID0geDsKKyAgICAgICAgICAgICAgICBwYXRoaVtqICsgMV0gPSB5Owor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBwYXRo OworICAgIH0KKworICAgIC8vIGh0dHA6Ly9zY2hlcGVycy5jYy9nZXR0aW5n LXRvLXRoZS1wb2ludAorICAgIGZ1bmN0aW9uIGNhdG11bGxSb20yYmV6aWVy KGNycCwgeikgeworICAgICAgICB2YXIgZCA9IFtdOworICAgICAgICBmb3Ig KHZhciBpID0gMCwgaUxlbiA9IGNycC5sZW5ndGg7IGlMZW4gLSAyICogIXog PiBpOyBpICs9IDIpIHsKKyAgICAgICAgICAgIHZhciBwID0gWworICAgICAg ICAgICAgICAgICAgICAgICAge3g6ICtjcnBbaSAtIDJdLCB5OiArY3JwW2kg LSAxXX0sCisgICAgICAgICAgICAgICAgICAgICAgICB7eDogK2NycFtpXSwg ICAgIHk6ICtjcnBbaSArIDFdfSwKKyAgICAgICAgICAgICAgICAgICAgICAg IHt4OiArY3JwW2kgKyAyXSwgeTogK2NycFtpICsgM119LAorICAgICAgICAg ICAgICAgICAgICAgICAge3g6ICtjcnBbaSArIDRdLCB5OiArY3JwW2kgKyA1 XX0KKyAgICAgICAgICAgICAgICAgICAgXTsKKyAgICAgICAgICAgIGlmICh6 KSB7CisgICAgICAgICAgICAgICAgaWYgKCFpKSB7CisgICAgICAgICAgICAg ICAgICAgIHBbMF0gPSB7eDogK2NycFtpTGVuIC0gMl0sIHk6ICtjcnBbaUxl biAtIDFdfTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlMZW4gLSA0 ID09IGkpIHsKKyAgICAgICAgICAgICAgICAgICAgcFszXSA9IHt4OiArY3Jw WzBdLCB5OiArY3JwWzFdfTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg KGlMZW4gLSAyID09IGkpIHsKKyAgICAgICAgICAgICAgICAgICAgcFsyXSA9 IHt4OiArY3JwWzBdLCB5OiArY3JwWzFdfTsKKyAgICAgICAgICAgICAgICAg ICAgcFszXSA9IHt4OiArY3JwWzJdLCB5OiArY3JwWzNdfTsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgIGlmIChpTGVuIC0gNCA9PSBpKSB7CisgICAgICAgICAgICAgICAgICAg IHBbM10gPSBwWzJdOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIWkp IHsKKyAgICAgICAgICAgICAgICAgICAgcFswXSA9IHt4OiArY3JwW2ldLCB5 OiArY3JwW2kgKyAxXX07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgfQorICAgICAgICAgICAgZC5wdXNoKFsiQyIsCisgICAgICAgICAgICAg ICAgICAoLXBbMF0ueCArIDYgKiBwWzFdLnggKyBwWzJdLngpIC8gNiwKKyAg ICAgICAgICAgICAgICAgICgtcFswXS55ICsgNiAqIHBbMV0ueSArIHBbMl0u eSkgLyA2LAorICAgICAgICAgICAgICAgICAgKHBbMV0ueCArIDYgKiBwWzJd LnggLSBwWzNdLngpIC8gNiwKKyAgICAgICAgICAgICAgICAgIChwWzFdLnkg KyA2KnBbMl0ueSAtIHBbM10ueSkgLyA2LAorICAgICAgICAgICAgICAgICAg cFsyXS54LAorICAgICAgICAgICAgICAgICAgcFsyXS55CisgICAgICAgICAg ICBdKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBkOworICAgIH0K KworICAgIC8vIGV4cG9ydAorICAgIFNuYXAucGF0aCA9IHBhdGhzOworCisg ICAgLypcCisgICAgICogU25hcC5wYXRoLmdldFRvdGFsTGVuZ3RoCisgICAg IFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIHRoZSBsZW5n dGggb2YgdGhlIGdpdmVuIHBhdGggaW4gcGl4ZWxzCisgICAgICoqCisgICAg IC0gcGF0aCAoc3RyaW5nKSBTVkcgcGF0aCBzdHJpbmcKKyAgICAgKioKKyAg ICAgPSAobnVtYmVyKSBsZW5ndGgKKyAgICBcKi8KKyAgICBTbmFwLnBhdGgu Z2V0VG90YWxMZW5ndGggPSBnZXRUb3RhbExlbmd0aDsKKyAgICAvKlwKKyAg ICAgKiBTbmFwLnBhdGguZ2V0UG9pbnRBdExlbmd0aAorICAgICBbIG1ldGhv ZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyB0aGUgY29vcmRpbmF0ZXMg b2YgdGhlIHBvaW50IGxvY2F0ZWQgYXQgdGhlIGdpdmVuIGxlbmd0aCBhbG9u ZyB0aGUgZ2l2ZW4gcGF0aAorICAgICAqKgorICAgICAtIHBhdGggKHN0cmlu ZykgU1ZHIHBhdGggc3RyaW5nCisgICAgIC0gbGVuZ3RoIChudW1iZXIpIGxl bmd0aCwgaW4gcGl4ZWxzLCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGF0aCwg ZXhjbHVkaW5nIG5vbi1yZW5kZXJpbmcganVtcHMKKyAgICAgKioKKyAgICAg PSAob2JqZWN0KSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcG9pbnQ6CisgICAg IG8geworICAgICBvICAgICB4OiAobnVtYmVyKSB4IGNvb3JkaW5hdGUsCisg ICAgIG8gICAgIHk6IChudW1iZXIpIHkgY29vcmRpbmF0ZSwKKyAgICAgbyAg ICAgYWxwaGE6IChudW1iZXIpIGFuZ2xlIG9mIGRlcml2YXRpdmUKKyAgICAg byB9CisgICAgXCovCisgICAgU25hcC5wYXRoLmdldFBvaW50QXRMZW5ndGgg PSBnZXRQb2ludEF0TGVuZ3RoOworICAgIC8qXAorICAgICAqIFNuYXAucGF0 aC5nZXRTdWJwYXRoCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBSZXR1cm5zIHRoZSBzdWJwYXRoIG9mIGEgZ2l2ZW4gcGF0aCBiZXR3ZWVu IGdpdmVuIHN0YXJ0IGFuZCBlbmQgbGVuZ3RocworICAgICAqKgorICAgICAt IHBhdGggKHN0cmluZykgU1ZHIHBhdGggc3RyaW5nCisgICAgIC0gZnJvbSAo bnVtYmVyKSBsZW5ndGgsIGluIHBpeGVscywgZnJvbSB0aGUgc3RhcnQgb2Yg dGhlIHBhdGggdG8gdGhlIHN0YXJ0IG9mIHRoZSBzZWdtZW50CisgICAgIC0g dG8gKG51bWJlcikgbGVuZ3RoLCBpbiBwaXhlbHMsIGZyb20gdGhlIHN0YXJ0 IG9mIHRoZSBwYXRoIHRvIHRoZSBlbmQgb2YgdGhlIHNlZ21lbnQKKyAgICAg KioKKyAgICAgPSAoc3RyaW5nKSBwYXRoIHN0cmluZyBkZWZpbml0aW9uIGZv ciB0aGUgc2VnbWVudAorICAgIFwqLworICAgIFNuYXAucGF0aC5nZXRTdWJw YXRoID0gZnVuY3Rpb24gKHBhdGgsIGZyb20sIHRvKSB7CisgICAgICAgIGlm ICh0aGlzLmdldFRvdGFsTGVuZ3RoKHBhdGgpIC0gdG8gPCAxZS02KSB7Cisg ICAgICAgICAgICByZXR1cm4gZ2V0U3VicGF0aHNBdExlbmd0aChwYXRoLCBm cm9tKS5lbmQ7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGEgPSBnZXRTdWJw YXRoc0F0TGVuZ3RoKHBhdGgsIHRvLCAxKTsKKyAgICAgICAgcmV0dXJuIGZy b20gPyBnZXRTdWJwYXRoc0F0TGVuZ3RoKGEsIGZyb20pLmVuZCA6IGE7Cisg ICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmdldFRvdGFsTGVuZ3Ro CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIHRo ZSBsZW5ndGggb2YgdGhlIHBhdGggaW4gcGl4ZWxzIChvbmx5IHdvcmtzIGZv ciBgcGF0aGAgZWxlbWVudHMpCisgICAgID0gKG51bWJlcikgbGVuZ3RoCisg ICAgXCovCisgICAgZWxwcm90by5nZXRUb3RhbExlbmd0aCA9IGZ1bmN0aW9u ICgpIHsKKyAgICAgICAgaWYgKHRoaXMubm9kZS5nZXRUb3RhbExlbmd0aCkg eworICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZS5nZXRUb3RhbExlbmd0 aCgpOworICAgICAgICB9CisgICAgfTsKKyAgICAvLyBTSUVSUkEgRWxlbWVu dC5nZXRQb2ludEF0TGVuZ3RoKCkvRWxlbWVudC5nZXRUb3RhbExlbmd0aCgp OiBJZiBhIDxwYXRoPiBpcyBicm9rZW4gaW50byBkaWZmZXJlbnQgc2VnbWVu dHMsIGlzIHRoZSBqdW1wIGRpc3RhbmNlIHRvIHRoZSBuZXcgY29vcmRpbmF0 ZXMgc2V0IGJ5IHRoZSBfTV8gb3IgX21fIGNvbW1hbmRzIGNhbGN1bGF0ZWQg YXMgcGFydCBvZiB0aGUgcGF0aCdzIHRvdGFsIGxlbmd0aD8KKyAgICAvKlwK KyAgICAgKiBFbGVtZW50LmdldFBvaW50QXRMZW5ndGgKKyAgICAgWyBtZXRo b2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgY29vcmRpbmF0ZXMgb2Yg dGhlIHBvaW50IGxvY2F0ZWQgYXQgdGhlIGdpdmVuIGxlbmd0aCBvbiB0aGUg Z2l2ZW4gcGF0aCAob25seSB3b3JrcyBmb3IgYHBhdGhgIGVsZW1lbnRzKQor ICAgICAqKgorICAgICAtIGxlbmd0aCAobnVtYmVyKSBsZW5ndGgsIGluIHBp eGVscywgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhdGgsIGV4Y2x1ZGluZyBu b24tcmVuZGVyaW5nIGp1bXBzCisgICAgICoqCisgICAgID0gKG9iamVjdCkg cmVwcmVzZW50YXRpb24gb2YgdGhlIHBvaW50OgorICAgICBvIHsKKyAgICAg byAgICAgeDogKG51bWJlcikgeCBjb29yZGluYXRlLAorICAgICBvICAgICB5 OiAobnVtYmVyKSB5IGNvb3JkaW5hdGUsCisgICAgIG8gICAgIGFscGhhOiAo bnVtYmVyKSBhbmdsZSBvZiBkZXJpdmF0aXZlCisgICAgIG8gfQorICAgIFwq LworICAgIGVscHJvdG8uZ2V0UG9pbnRBdExlbmd0aCA9IGZ1bmN0aW9uIChs ZW5ndGgpIHsKKyAgICAgICAgcmV0dXJuIGdldFBvaW50QXRMZW5ndGgodGhp cy5hdHRyKCJkIiksIGxlbmd0aCk7CisgICAgfTsKKyAgICAvLyBTSUVSUkEg RWxlbWVudC5nZXRTdWJwYXRoKCk6IFNpbWlsYXIgdG8gdGhlIHByb2JsZW0g Zm9yIEVsZW1lbnQuZ2V0UG9pbnRBdExlbmd0aCgpLiBVbmNsZWFyIGhvdyB0 aGlzIHdvdWxkIHdvcmsgZm9yIGEgc2VnbWVudGVkIHBhdGguIE92ZXJhbGws IHRoZSBjb25jZXB0IG9mIF9zdWJwYXRoXyBhbmQgd2hhdCBJJ20gY2FsbGlu ZyBhIF9zZWdtZW50XyAoc2VyaWVzIG9mIG5vbi1fTV8gb3IgX1pfIGNvbW1h bmRzKSBpcyB1bmNsZWFyLgorICAgIC8qXAorICAgICAqIEVsZW1lbnQuZ2V0 U3VicGF0aAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmV0 dXJucyBzdWJwYXRoIG9mIGEgZ2l2ZW4gZWxlbWVudCBmcm9tIGdpdmVuIHN0 YXJ0IGFuZCBlbmQgbGVuZ3RocyAob25seSB3b3JrcyBmb3IgYHBhdGhgIGVs ZW1lbnRzKQorICAgICAqKgorICAgICAtIGZyb20gKG51bWJlcikgbGVuZ3Ro LCBpbiBwaXhlbHMsIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXRoIHRvIHRo ZSBzdGFydCBvZiB0aGUgc2VnbWVudAorICAgICAtIHRvIChudW1iZXIpIGxl bmd0aCwgaW4gcGl4ZWxzLCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGF0aCB0 byB0aGUgZW5kIG9mIHRoZSBzZWdtZW50CisgICAgICoqCisgICAgID0gKHN0 cmluZykgcGF0aCBzdHJpbmcgZGVmaW5pdGlvbiBmb3IgdGhlIHNlZ21lbnQK KyAgICBcKi8KKyAgICBlbHByb3RvLmdldFN1YnBhdGggPSBmdW5jdGlvbiAo ZnJvbSwgdG8pIHsKKyAgICAgICAgcmV0dXJuIFNuYXAucGF0aC5nZXRTdWJw YXRoKHRoaXMuYXR0cigiZCIpLCBmcm9tLCB0byk7CisgICAgfTsKKyAgICBT bmFwLl8uYm94ID0gYm94OworICAgIC8qXAorICAgICAqIFNuYXAucGF0aC5m aW5kRG90c0F0U2VnbWVudAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogVXRpbGl0eSBtZXRob2QKKyAgICAgKioKKyAgICAgKiBGaW5kcyBk b3QgY29vcmRpbmF0ZXMgb24gdGhlIGdpdmVuIGN1YmljIGJlemnDqXIgY3Vy dmUgYXQgdGhlIGdpdmVuIHQKKyAgICAgLSBwMXggKG51bWJlcikgeCBvZiB0 aGUgZmlyc3QgcG9pbnQgb2YgdGhlIGN1cnZlCisgICAgIC0gcDF5IChudW1i ZXIpIHkgb2YgdGhlIGZpcnN0IHBvaW50IG9mIHRoZSBjdXJ2ZQorICAgICAt IGMxeCAobnVtYmVyKSB4IG9mIHRoZSBmaXJzdCBhbmNob3Igb2YgdGhlIGN1 cnZlCisgICAgIC0gYzF5IChudW1iZXIpIHkgb2YgdGhlIGZpcnN0IGFuY2hv ciBvZiB0aGUgY3VydmUKKyAgICAgLSBjMnggKG51bWJlcikgeCBvZiB0aGUg c2Vjb25kIGFuY2hvciBvZiB0aGUgY3VydmUKKyAgICAgLSBjMnkgKG51bWJl cikgeSBvZiB0aGUgc2Vjb25kIGFuY2hvciBvZiB0aGUgY3VydmUKKyAgICAg LSBwMnggKG51bWJlcikgeCBvZiB0aGUgc2Vjb25kIHBvaW50IG9mIHRoZSBj dXJ2ZQorICAgICAtIHAyeSAobnVtYmVyKSB5IG9mIHRoZSBzZWNvbmQgcG9p bnQgb2YgdGhlIGN1cnZlCisgICAgIC0gdCAobnVtYmVyKSBwb3NpdGlvbiBv biB0aGUgY3VydmUgKDAuLjEpCisgICAgID0gKG9iamVjdCkgcG9pbnQgaW5m b3JtYXRpb24gaW4gZm9ybWF0OgorICAgICBvIHsKKyAgICAgbyAgICAgeDog KG51bWJlcikgeCBjb29yZGluYXRlIG9mIHRoZSBwb2ludCwKKyAgICAgbyAg ICAgeTogKG51bWJlcikgeSBjb29yZGluYXRlIG9mIHRoZSBwb2ludCwKKyAg ICAgbyAgICAgbTogeworICAgICBvICAgICAgICAgeDogKG51bWJlcikgeCBj b29yZGluYXRlIG9mIHRoZSBsZWZ0IGFuY2hvciwKKyAgICAgbyAgICAgICAg IHk6IChudW1iZXIpIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGVmdCBhbmNob3IK KyAgICAgbyAgICAgfSwKKyAgICAgbyAgICAgbjogeworICAgICBvICAgICAg ICAgeDogKG51bWJlcikgeCBjb29yZGluYXRlIG9mIHRoZSByaWdodCBhbmNo b3IsCisgICAgIG8gICAgICAgICB5OiAobnVtYmVyKSB5IGNvb3JkaW5hdGUg b2YgdGhlIHJpZ2h0IGFuY2hvcgorICAgICBvICAgICB9LAorICAgICBvICAg ICBzdGFydDogeworICAgICBvICAgICAgICAgeDogKG51bWJlcikgeCBjb29y ZGluYXRlIG9mIHRoZSBzdGFydCBvZiB0aGUgY3VydmUsCisgICAgIG8gICAg ICAgICB5OiAobnVtYmVyKSB5IGNvb3JkaW5hdGUgb2YgdGhlIHN0YXJ0IG9m IHRoZSBjdXJ2ZQorICAgICBvICAgICB9LAorICAgICBvICAgICBlbmQ6IHsK KyAgICAgbyAgICAgICAgIHg6IChudW1iZXIpIHggY29vcmRpbmF0ZSBvZiB0 aGUgZW5kIG9mIHRoZSBjdXJ2ZSwKKyAgICAgbyAgICAgICAgIHk6IChudW1i ZXIpIHkgY29vcmRpbmF0ZSBvZiB0aGUgZW5kIG9mIHRoZSBjdXJ2ZQorICAg ICBvICAgICB9LAorICAgICBvICAgICBhbHBoYTogKG51bWJlcikgYW5nbGUg b2YgdGhlIGN1cnZlIGRlcml2YXRpdmUgYXQgdGhlIHBvaW50CisgICAgIG8g fQorICAgIFwqLworICAgIFNuYXAucGF0aC5maW5kRG90c0F0U2VnbWVudCA9 IGZpbmREb3RzQXRTZWdtZW50OworICAgIC8qXAorICAgICAqIFNuYXAucGF0 aC5iZXppZXJCQm94CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBVdGlsaXR5IG1ldGhvZAorICAgICAqKgorICAgICAqIFJldHVybnMgdGhl IGJvdW5kaW5nIGJveCBvZiBhIGdpdmVuIGN1YmljIGJlemnDqXIgY3VydmUK KyAgICAgLSBwMXggKG51bWJlcikgeCBvZiB0aGUgZmlyc3QgcG9pbnQgb2Yg dGhlIGN1cnZlCisgICAgIC0gcDF5IChudW1iZXIpIHkgb2YgdGhlIGZpcnN0 IHBvaW50IG9mIHRoZSBjdXJ2ZQorICAgICAtIGMxeCAobnVtYmVyKSB4IG9m IHRoZSBmaXJzdCBhbmNob3Igb2YgdGhlIGN1cnZlCisgICAgIC0gYzF5IChu dW1iZXIpIHkgb2YgdGhlIGZpcnN0IGFuY2hvciBvZiB0aGUgY3VydmUKKyAg ICAgLSBjMnggKG51bWJlcikgeCBvZiB0aGUgc2Vjb25kIGFuY2hvciBvZiB0 aGUgY3VydmUKKyAgICAgLSBjMnkgKG51bWJlcikgeSBvZiB0aGUgc2Vjb25k IGFuY2hvciBvZiB0aGUgY3VydmUKKyAgICAgLSBwMnggKG51bWJlcikgeCBv ZiB0aGUgc2Vjb25kIHBvaW50IG9mIHRoZSBjdXJ2ZQorICAgICAtIHAyeSAo bnVtYmVyKSB5IG9mIHRoZSBzZWNvbmQgcG9pbnQgb2YgdGhlIGN1cnZlCisg ICAgICogb3IKKyAgICAgLSBiZXogKGFycmF5KSBhcnJheSBvZiBzaXggcG9p bnRzIGZvciBiZXppw6lyIGN1cnZlCisgICAgID0gKG9iamVjdCkgYm91bmRp bmcgYm94CisgICAgIG8geworICAgICBvICAgICB4OiAobnVtYmVyKSB4IGNv b3JkaW5hdGUgb2YgdGhlIGxlZnQgdG9wIHBvaW50IG9mIHRoZSBib3gsCisg ICAgIG8gICAgIHk6IChudW1iZXIpIHkgY29vcmRpbmF0ZSBvZiB0aGUgbGVm dCB0b3AgcG9pbnQgb2YgdGhlIGJveCwKKyAgICAgbyAgICAgeDI6IChudW1i ZXIpIHggY29vcmRpbmF0ZSBvZiB0aGUgcmlnaHQgYm90dG9tIHBvaW50IG9m IHRoZSBib3gsCisgICAgIG8gICAgIHkyOiAobnVtYmVyKSB5IGNvb3JkaW5h dGUgb2YgdGhlIHJpZ2h0IGJvdHRvbSBwb2ludCBvZiB0aGUgYm94LAorICAg ICBvICAgICB3aWR0aDogKG51bWJlcikgd2lkdGggb2YgdGhlIGJveCwKKyAg ICAgbyAgICAgaGVpZ2h0OiAobnVtYmVyKSBoZWlnaHQgb2YgdGhlIGJveAor ICAgICBvIH0KKyAgICBcKi8KKyAgICBTbmFwLnBhdGguYmV6aWVyQkJveCA9 IGJlemllckJCb3g7CisgICAgLypcCisgICAgICogU25hcC5wYXRoLmlzUG9p bnRJbnNpZGVCQm94CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBVdGlsaXR5IG1ldGhvZAorICAgICAqKgorICAgICAqIFJldHVybnMgYHRy dWVgIGlmIGdpdmVuIHBvaW50IGlzIGluc2lkZSBib3VuZGluZyBib3gKKyAg ICAgLSBiYm94IChzdHJpbmcpIGJvdW5kaW5nIGJveAorICAgICAtIHggKHN0 cmluZykgeCBjb29yZGluYXRlIG9mIHRoZSBwb2ludAorICAgICAtIHkgKHN0 cmluZykgeSBjb29yZGluYXRlIG9mIHRoZSBwb2ludAorICAgICA9IChib29s ZWFuKSBgdHJ1ZWAgaWYgcG9pbnQgaXMgaW5zaWRlCisgICAgXCovCisgICAg U25hcC5wYXRoLmlzUG9pbnRJbnNpZGVCQm94ID0gaXNQb2ludEluc2lkZUJC b3g7CisgICAgU25hcC5jbG9zZXN0ID0gZnVuY3Rpb24gKHgsIHksIFgsIFkp IHsKKyAgICAgICAgdmFyIHIgPSAxMDAsCisgICAgICAgICAgICBiID0gYm94 KHggLSByIC8gMiwgeSAtIHIgLyAyLCByLCByKSwKKyAgICAgICAgICAgIGlu c2lkZSA9IFtdLAorICAgICAgICAgICAgZ2V0dGVyID0gWFswXS5oYXNPd25Q cm9wZXJ0eSgieCIpID8gZnVuY3Rpb24gKGkpIHsKKyAgICAgICAgICAgICAg ICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB4OiBYW2ldLngsCisg ICAgICAgICAgICAgICAgICAgIHk6IFhbaV0ueQorICAgICAgICAgICAgICAg IH07CisgICAgICAgICAgICB9IDogZnVuY3Rpb24gKGkpIHsKKyAgICAgICAg ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgICAgICB4OiBYW2ld LAorICAgICAgICAgICAgICAgICAgICB5OiBZW2ldCisgICAgICAgICAgICAg ICAgfTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBmb3VuZCA9IDA7 CisgICAgICAgIHdoaWxlIChyIDw9IDFlNiAmJiAhZm91bmQpIHsKKyAgICAg ICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IFgubGVuZ3RoOyBpIDwgaWk7 IGkrKykgeworICAgICAgICAgICAgICAgIHZhciB4eSA9IGdldHRlcihpKTsK KyAgICAgICAgICAgICAgICBpZiAoaXNQb2ludEluc2lkZUJCb3goYiwgeHku eCwgeHkueSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm91bmQrKzsKKyAg ICAgICAgICAgICAgICAgICAgaW5zaWRlLnB1c2goeHkpOworICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAg ICAgICAgciAqPSAyOworICAgICAgICAgICAgICAgIGIgPSBib3goeCAtIHIg LyAyLCB5IC0gciAvIDIsIHIsIHIpCisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgICAgaWYgKHIgPT0gMWU2KSB7CisgICAgICAgICAgICByZXR1 cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIGxlbiA9IEluZmluaXR5LAor ICAgICAgICAgICAgcmVzOworICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGlu c2lkZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICB2YXIg bCA9IFNuYXAubGVuKHgsIHksIGluc2lkZVtpXS54LCBpbnNpZGVbaV0ueSk7 CisgICAgICAgICAgICBpZiAobGVuID4gbCkgeworICAgICAgICAgICAgICAg IGxlbiA9IGw7CisgICAgICAgICAgICAgICAgaW5zaWRlW2ldLmxlbiA9IGw7 CisgICAgICAgICAgICAgICAgcmVzID0gaW5zaWRlW2ldOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiByZXM7CisgICAgfTsK KyAgICAvKlwKKyAgICAgKiBTbmFwLnBhdGguaXNCQm94SW50ZXJzZWN0Cisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBVdGlsaXR5IG1ldGhv ZAorICAgICAqKgorICAgICAqIFJldHVybnMgYHRydWVgIGlmIHR3byBib3Vu ZGluZyBib3hlcyBpbnRlcnNlY3QKKyAgICAgLSBiYm94MSAoc3RyaW5nKSBm aXJzdCBib3VuZGluZyBib3gKKyAgICAgLSBiYm94MiAoc3RyaW5nKSBzZWNv bmQgYm91bmRpbmcgYm94CisgICAgID0gKGJvb2xlYW4pIGB0cnVlYCBpZiBi b3VuZGluZyBib3hlcyBpbnRlcnNlY3QKKyAgICBcKi8KKyAgICBTbmFwLnBh dGguaXNCQm94SW50ZXJzZWN0ID0gaXNCQm94SW50ZXJzZWN0OworICAgIC8q XAorICAgICAqIFNuYXAucGF0aC5pbnRlcnNlY3Rpb24KKyAgICAgWyBtZXRo b2QgXQorICAgICAqKgorICAgICAqIFV0aWxpdHkgbWV0aG9kCisgICAgICoq CisgICAgICogRmluZHMgaW50ZXJzZWN0aW9ucyBvZiB0d28gcGF0aHMKKyAg ICAgLSBwYXRoMSAoc3RyaW5nKSBwYXRoIHN0cmluZworICAgICAtIHBhdGgy IChzdHJpbmcpIHBhdGggc3RyaW5nCisgICAgID0gKGFycmF5KSBkb3RzIG9m IGludGVyc2VjdGlvbgorICAgICBvIFsKKyAgICAgbyAgICAgeworICAgICBv ICAgICAgICAgeDogKG51bWJlcikgeCBjb29yZGluYXRlIG9mIHRoZSBwb2lu dCwKKyAgICAgbyAgICAgICAgIHk6IChudW1iZXIpIHkgY29vcmRpbmF0ZSBv ZiB0aGUgcG9pbnQsCisgICAgIG8gICAgICAgICB0MTogKG51bWJlcikgdCB2 YWx1ZSBmb3Igc2VnbWVudCBvZiBwYXRoMSwKKyAgICAgbyAgICAgICAgIHQy OiAobnVtYmVyKSB0IHZhbHVlIGZvciBzZWdtZW50IG9mIHBhdGgyLAorICAg ICBvICAgICAgICAgc2VnbWVudDE6IChudW1iZXIpIG9yZGVyIG51bWJlciBm b3Igc2VnbWVudCBvZiBwYXRoMSwKKyAgICAgbyAgICAgICAgIHNlZ21lbnQy OiAobnVtYmVyKSBvcmRlciBudW1iZXIgZm9yIHNlZ21lbnQgb2YgcGF0aDIs CisgICAgIG8gICAgICAgICBiZXoxOiAoYXJyYXkpIGVpZ2h0IGNvb3JkaW5h dGVzIHJlcHJlc2VudGluZyBiZXppw6lyIGN1cnZlIGZvciB0aGUgc2VnbWVu dCBvZiBwYXRoMSwKKyAgICAgbyAgICAgICAgIGJlejI6IChhcnJheSkgZWln aHQgY29vcmRpbmF0ZXMgcmVwcmVzZW50aW5nIGJlemnDqXIgY3VydmUgZm9y IHRoZSBzZWdtZW50IG9mIHBhdGgyCisgICAgIG8gICAgIH0KKyAgICAgbyBd CisgICAgXCovCisgICAgU25hcC5wYXRoLmludGVyc2VjdGlvbiA9IHBhdGhJ bnRlcnNlY3Rpb247CisgICAgU25hcC5wYXRoLmludGVyc2VjdGlvbk51bWJl ciA9IHBhdGhJbnRlcnNlY3Rpb25OdW1iZXI7CisgICAgLypcCisgICAgICog U25hcC5wYXRoLmlzUG9pbnRJbnNpZGUKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIFV0aWxpdHkgbWV0aG9kCisgICAgICoqCisgICAgICog UmV0dXJucyBgdHJ1ZWAgaWYgZ2l2ZW4gcG9pbnQgaXMgaW5zaWRlIGEgZ2l2 ZW4gY2xvc2VkIHBhdGguCisgICAgICoKKyAgICAgKiBOb3RlOiBmaWxsIG1v ZGUgZG9lc27igJl0IGFmZmVjdCB0aGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9k LgorICAgICAtIHBhdGggKHN0cmluZykgcGF0aCBzdHJpbmcKKyAgICAgLSB4 IChudW1iZXIpIHggb2YgdGhlIHBvaW50CisgICAgIC0geSAobnVtYmVyKSB5 IG9mIHRoZSBwb2ludAorICAgICA9IChib29sZWFuKSBgdHJ1ZWAgaWYgcG9p bnQgaXMgaW5zaWRlIHRoZSBwYXRoCisgICAgXCovCisgICAgU25hcC5wYXRo LmlzUG9pbnRJbnNpZGUgPSBpc1BvaW50SW5zaWRlUGF0aDsKKyAgICAvKlwK KyAgICAgKiBTbmFwLnBhdGguZ2V0QkJveAorICAgICBbIG1ldGhvZCBdCisg ICAgICoqCisgICAgICogVXRpbGl0eSBtZXRob2QKKyAgICAgKioKKyAgICAg KiBSZXR1cm5zIHRoZSBib3VuZGluZyBib3ggb2YgYSBnaXZlbiBwYXRoCisg ICAgIC0gcGF0aCAoc3RyaW5nKSBwYXRoIHN0cmluZworICAgICA9IChvYmpl Y3QpIGJvdW5kaW5nIGJveAorICAgICBvIHsKKyAgICAgbyAgICAgeDogKG51 bWJlcikgeCBjb29yZGluYXRlIG9mIHRoZSBsZWZ0IHRvcCBwb2ludCBvZiB0 aGUgYm94LAorICAgICBvICAgICB5OiAobnVtYmVyKSB5IGNvb3JkaW5hdGUg b2YgdGhlIGxlZnQgdG9wIHBvaW50IG9mIHRoZSBib3gsCisgICAgIG8gICAg IHgyOiAobnVtYmVyKSB4IGNvb3JkaW5hdGUgb2YgdGhlIHJpZ2h0IGJvdHRv bSBwb2ludCBvZiB0aGUgYm94LAorICAgICBvICAgICB5MjogKG51bWJlcikg eSBjb29yZGluYXRlIG9mIHRoZSByaWdodCBib3R0b20gcG9pbnQgb2YgdGhl IGJveCwKKyAgICAgbyAgICAgd2lkdGg6IChudW1iZXIpIHdpZHRoIG9mIHRo ZSBib3gsCisgICAgIG8gICAgIGhlaWdodDogKG51bWJlcikgaGVpZ2h0IG9m IHRoZSBib3gKKyAgICAgbyB9CisgICAgXCovCisgICAgU25hcC5wYXRoLmdl dEJCb3ggPSBwYXRoQkJveDsKKyAgICBTbmFwLnBhdGguZ2V0ID0gZ2V0UGF0 aDsKKyAgICAvKlwKKyAgICAgKiBTbmFwLnBhdGgudG9SZWxhdGl2ZQorICAg ICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogVXRpbGl0eSBtZXRob2QK KyAgICAgKioKKyAgICAgKiBDb252ZXJ0cyBwYXRoIGNvb3JkaW5hdGVzIGlu dG8gcmVsYXRpdmUgdmFsdWVzCisgICAgIC0gcGF0aCAoc3RyaW5nKSBwYXRo IHN0cmluZworICAgICA9IChhcnJheSkgcGF0aCBzdHJpbmcKKyAgICBcKi8K KyAgICBTbmFwLnBhdGgudG9SZWxhdGl2ZSA9IHBhdGhUb1JlbGF0aXZlOwor ICAgIC8qXAorICAgICAqIFNuYXAucGF0aC50b0Fic29sdXRlCisgICAgIFsg bWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBVdGlsaXR5IG1ldGhvZAorICAg ICAqKgorICAgICAqIENvbnZlcnRzIHBhdGggY29vcmRpbmF0ZXMgaW50byBh YnNvbHV0ZSB2YWx1ZXMKKyAgICAgLSBwYXRoIChzdHJpbmcpIHBhdGggc3Ry aW5nCisgICAgID0gKGFycmF5KSBwYXRoIHN0cmluZworICAgIFwqLworICAg IFNuYXAucGF0aC50b0Fic29sdXRlID0gcGF0aFRvQWJzb2x1dGU7CisgICAg LypcCisgICAgICogU25hcC5wYXRoLnRvQ3ViaWMKKyAgICAgWyBtZXRob2Qg XQorICAgICAqKgorICAgICAqIFV0aWxpdHkgbWV0aG9kCisgICAgICoqCisg ICAgICogQ29udmVydHMgcGF0aCB0byBhIG5ldyBwYXRoIHdoZXJlIGFsbCBz ZWdtZW50cyBhcmUgY3ViaWMgYmV6acOpciBjdXJ2ZXMKKyAgICAgLSBwYXRo U3RyaW5nIChzdHJpbmd8YXJyYXkpIHBhdGggc3RyaW5nIG9yIGFycmF5IG9m IHNlZ21lbnRzCisgICAgID0gKGFycmF5KSBhcnJheSBvZiBzZWdtZW50cwor ICAgIFwqLworICAgIFNuYXAucGF0aC50b0N1YmljID0gcGF0aDJjdXJ2ZTsK KyAgICAvKlwKKyAgICAgKiBTbmFwLnBhdGgubWFwCisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBUcmFuc2Zvcm0gdGhlIHBhdGggc3RyaW5n IHdpdGggdGhlIGdpdmVuIG1hdHJpeAorICAgICAtIHBhdGggKHN0cmluZykg cGF0aCBzdHJpbmcKKyAgICAgLSBtYXRyaXggKG9iamVjdCkgc2VlIEBNYXRy aXgKKyAgICAgPSAoc3RyaW5nKSB0cmFuc2Zvcm1lZCBwYXRoIHN0cmluZwor ICAgIFwqLworICAgIFNuYXAucGF0aC5tYXAgPSBtYXBQYXRoOworICAgIFNu YXAucGF0aC50b1N0cmluZyA9IHRvU3RyaW5nOworICAgIFNuYXAucGF0aC5j bG9uZSA9IHBhdGhDbG9uZTsKK30pOworCisvLyBDb3B5cmlnaHQgKGMpIDIw MTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5 IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg dGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl IExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj ZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkg YXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3 YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0 cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJS QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHBy ZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisv LyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK1NuYXAucGx1Z2lu KGZ1bmN0aW9uIChTbmFwLCBFbGVtZW50LCBQYXBlciwgZ2xvYikgeworICAg IHZhciBtbWF4ID0gTWF0aC5tYXgsCisgICAgICAgIG1taW4gPSBNYXRoLm1p bjsKKworICAgIC8vIFNldAorICAgIHZhciBTZXQgPSBmdW5jdGlvbiAoaXRl bXMpIHsKKyAgICAgICAgdGhpcy5pdGVtcyA9IFtdOworCXRoaXMuYmluZGlu Z3MgPSB7fTsKKyAgICAgICAgdGhpcy5sZW5ndGggPSAwOworICAgICAgICB0 aGlzLnR5cGUgPSAic2V0IjsKKyAgICAgICAgaWYgKGl0ZW1zKSB7CisgICAg ICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBpdGVtcy5sZW5ndGg7IGkg PCBpaTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGl0ZW1zW2ldKSB7 CisgICAgICAgICAgICAgICAgICAgIHRoaXNbdGhpcy5pdGVtcy5sZW5ndGhd ID0gdGhpcy5pdGVtc1t0aGlzLml0ZW1zLmxlbmd0aF0gPSBpdGVtc1tpXTsK KyAgICAgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGgrKzsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9LAor ICAgIHNldHByb3RvID0gU2V0LnByb3RvdHlwZTsKKyAgICAvKlwKKyAgICAg KiBTZXQucHVzaAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICog QWRkcyBlYWNoIGFyZ3VtZW50IHRvIHRoZSBjdXJyZW50IHNldAorICAgICA9 IChvYmplY3QpIG9yaWdpbmFsIGVsZW1lbnQKKyAgICBcKi8KKyAgICBzZXRw cm90by5wdXNoID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaXRlbSwK KyAgICAgICAgICAgIGxlbjsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlp ID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAg ICAgIGl0ZW0gPSBhcmd1bWVudHNbaV07CisgICAgICAgICAgICBpZiAoaXRl bSkgeworICAgICAgICAgICAgICAgIGxlbiA9IHRoaXMuaXRlbXMubGVuZ3Ro OworICAgICAgICAgICAgICAgIHRoaXNbbGVuXSA9IHRoaXMuaXRlbXNbbGVu XSA9IGl0ZW07CisgICAgICAgICAgICAgICAgdGhpcy5sZW5ndGgrKzsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsK KyAgICB9OworICAgIC8qXAorICAgICAqIFNldC5wb3AKKyAgICAgWyBtZXRo b2QgXQorICAgICAqKgorICAgICAqIFJlbW92ZXMgbGFzdCBlbGVtZW50IGFu ZCByZXR1cm5zIGl0CisgICAgID0gKG9iamVjdCkgZWxlbWVudAorICAgIFwq LworICAgIHNldHByb3RvLnBvcCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg dGhpcy5sZW5ndGggJiYgZGVsZXRlIHRoaXNbdGhpcy5sZW5ndGgtLV07Cisg ICAgICAgIHJldHVybiB0aGlzLml0ZW1zLnBvcCgpOworICAgIH07CisgICAg LypcCisgICAgICogU2V0LmZvckVhY2gKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIEV4ZWN1dGVzIGdpdmVuIGZ1bmN0aW9uIGZvciBlYWNo IGVsZW1lbnQgaW4gdGhlIHNldAorICAgICAqCisgICAgICogSWYgdGhlIGZ1 bmN0aW9uIHJldHVybnMgYGZhbHNlYCwgdGhlIGxvb3Agc3RvcHMgcnVubmlu Zy4KKyAgICAgKioKKyAgICAgLSBjYWxsYmFjayAoZnVuY3Rpb24pIGZ1bmN0 aW9uIHRvIHJ1bgorICAgICAtIHRoaXNBcmcgKG9iamVjdCkgY29udGV4dCBv YmplY3QgZm9yIHRoZSBjYWxsYmFjaworICAgICA9IChvYmplY3QpIFNldCBv YmplY3QKKyAgICBcKi8KKyAgICBzZXRwcm90by5mb3JFYWNoID0gZnVuY3Rp b24gKGNhbGxiYWNrLCB0aGlzQXJnKSB7CisgICAgICAgIGZvciAodmFyIGkg PSAwLCBpaSA9IHRoaXMuaXRlbXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewor ICAgICAgICAgICAgaWYgKGNhbGxiYWNrLmNhbGwodGhpc0FyZywgdGhpcy5p dGVtc1tpXSwgaSkgPT09IGZhbHNlKSB7CisgICAgICAgICAgICAgICAgcmV0 dXJuIHRoaXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBTZXQuYW5p bWF0ZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQW5pbWF0 ZXMgZWFjaCBlbGVtZW50IGluIHNldCBpbiBzeW5jLgorICAgICAqCisgICAg ICoqCisgICAgIC0gYXR0cnMgKG9iamVjdCkga2V5LXZhbHVlIHBhaXJzIG9m IGRlc3RpbmF0aW9uIGF0dHJpYnV0ZXMKKyAgICAgLSBkdXJhdGlvbiAobnVt YmVyKSBkdXJhdGlvbiBvZiB0aGUgYW5pbWF0aW9uIGluIG1pbGxpc2Vjb25k cworICAgICAtIGVhc2luZyAoZnVuY3Rpb24pICNvcHRpb25hbCBlYXNpbmcg ZnVuY3Rpb24gZnJvbSBAbWluYSBvciBjdXN0b20KKyAgICAgLSBjYWxsYmFj ayAoZnVuY3Rpb24pICNvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0 IGV4ZWN1dGVzIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzCisgICAgICogb3IK KyAgICAgLSBhbmltYXRpb24gKGFycmF5KSBhcnJheSBvZiBhbmltYXRpb24g cGFyYW1ldGVyIGZvciBlYWNoIGVsZW1lbnQgaW4gc2V0IGluIGZvcm1hdCBg W2F0dHJzLCBkdXJhdGlvbiwgZWFzaW5nLCBjYWxsYmFja11gCisgICAgID4g VXNhZ2UKKyAgICAgfCAvLyBhbmltYXRlIGFsbCBlbGVtZW50cyBpbiBzZXQg dG8gcmFkaXVzIDEwCisgICAgIHwgc2V0LmFuaW1hdGUoe3I6IDEwfSwgNTAw LCBtaW5hLmVhc2Vpbik7CisgICAgIHwgLy8gb3IKKyAgICAgfCAvLyBhbmlt YXRlIGZpcnN0IGVsZW1lbnQgdG8gcmFkaXVzIDEwLCBidXQgc2Vjb25kIHRv IHJhZGl1cyAyMCBhbmQgaW4gZGlmZmVyZW50IHRpbWUKKyAgICAgfCBzZXQu YW5pbWF0ZShbe3I6IDEwfSwgNTAwLCBtaW5hLmVhc2Vpbl0sIFt7cjogMjB9 LCAxNTAwLCBtaW5hLmVhc2Vpbl0pOworICAgICA9IChFbGVtZW50KSB0aGUg Y3VycmVudCBlbGVtZW50CisgICAgXCovCisgICAgc2V0cHJvdG8uYW5pbWF0 ZSA9IGZ1bmN0aW9uIChhdHRycywgbXMsIGVhc2luZywgY2FsbGJhY2spIHsK KyAgICAgICAgaWYgKHR5cGVvZiBlYXNpbmcgPT0gImZ1bmN0aW9uIiAmJiAh ZWFzaW5nLmxlbmd0aCkgeworICAgICAgICAgICAgY2FsbGJhY2sgPSBlYXNp bmc7CisgICAgICAgICAgICBlYXNpbmcgPSBtaW5hLmxpbmVhcjsKKyAgICAg ICAgfQorICAgICAgICBpZiAoYXR0cnMgaW5zdGFuY2VvZiBTbmFwLl8uQW5p bWF0aW9uKSB7CisgICAgICAgICAgICBjYWxsYmFjayA9IGF0dHJzLmNhbGxi YWNrOworICAgICAgICAgICAgZWFzaW5nID0gYXR0cnMuZWFzaW5nOworICAg ICAgICAgICAgbXMgPSBlYXNpbmcuZHVyOworICAgICAgICAgICAgYXR0cnMg PSBhdHRycy5hdHRyOworICAgICAgICB9CisgICAgICAgIHZhciBhcmdzID0g YXJndW1lbnRzOworICAgICAgICBpZiAoU25hcC5pcyhhdHRycywgImFycmF5 IikgJiYgU25hcC5pcyhhcmdzW2FyZ3MubGVuZ3RoIC0gMV0sICJhcnJheSIp KSB7CisgICAgICAgICAgICB2YXIgZWFjaCA9IHRydWU7CisgICAgICAgIH0K KyAgICAgICAgdmFyIGJlZ2luLAorICAgICAgICAgICAgaGFuZGxlciA9IGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICBpZiAoYmVnaW4pIHsKKyAg ICAgICAgICAgICAgICAgICAgdGhpcy5iID0gYmVnaW47CisgICAgICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYmVnaW4gPSB0 aGlzLmI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSwKKyAg ICAgICAgICAgIGNiID0gMCwKKyAgICAgICAgICAgIHNldCA9IHRoaXMsCisg ICAgICAgICAgICBjYWxsYmFja2VyID0gY2FsbGJhY2sgJiYgZnVuY3Rpb24g KCkgeworICAgICAgICAgICAgICAgIGlmICgrK2NiID09IHNldC5sZW5ndGgp IHsKKyAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzKTsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICBy ZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uIChlbCwgaSkgeworICAgICAg ICAgICAgZXZlLm9uY2UoInNuYXAuYW5pbWNyZWF0ZWQuIiArIGVsLmlkLCBo YW5kbGVyKTsKKyAgICAgICAgICAgIGlmIChlYWNoKSB7CisgICAgICAgICAg ICAgICAgYXJnc1tpXSAmJiBlbC5hbmltYXRlLmFwcGx5KGVsLCBhcmdzW2ld KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZWwu YW5pbWF0ZShhdHRycywgbXMsIGVhc2luZywgY2FsbGJhY2tlcik7CisgICAg ICAgICAgICB9CisgICAgICAgIH0pOworICAgIH07CisgICAgc2V0cHJvdG8u cmVtb3ZlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB3aGlsZSAodGhpcy5s ZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMucG9wKCkucmVtb3ZlKCk7Cisg ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAv KlwKKyAgICAgKiBTZXQuYmluZAorICAgICBbIG1ldGhvZCBdCisgICAgICoq CisgICAgICogU3BlY2lmaWVzIGhvdyB0byBoYW5kbGUgYSBzcGVjaWZpYyBh dHRyaWJ1dGUgd2hlbiBhcHBsaWVkCisgICAgICogdG8gYSBzZXQuCisgICAg ICoKKyAgICAgKioKKyAgICAgLSBhdHRyIChzdHJpbmcpIGF0dHJpYnV0ZSBu YW1lCisgICAgIC0gY2FsbGJhY2sgKGZ1bmN0aW9uKSBmdW5jdGlvbiB0byBy dW4KKyAgICAgKiBvcgorICAgICAtIGF0dHIgKHN0cmluZykgYXR0cmlidXRl IG5hbWUKKyAgICAgLSBlbGVtZW50IChFbGVtZW50KSBzcGVjaWZpYyBlbGVt ZW50IGluIHRoZSBzZXQgdG8gYXBwbHkgdGhlIGF0dHJpYnV0ZSB0bworICAg ICAqIG9yCisgICAgIC0gYXR0ciAoc3RyaW5nKSBhdHRyaWJ1dGUgbmFtZQor ICAgICAtIGVsZW1lbnQgKEVsZW1lbnQpIHNwZWNpZmljIGVsZW1lbnQgaW4g dGhlIHNldCB0byBhcHBseSB0aGUgYXR0cmlidXRlIHRvCisgICAgIC0gZWF0 dHIgKHN0cmluZykgYXR0cmlidXRlIG9uIHRoZSBlbGVtZW50IHRvIGJpbmQg dGhlIGF0dHJpYnV0ZSB0bworICAgICA9IChvYmplY3QpIFNldCBvYmplY3QK KyAgICBcKi8KKyAgICBzZXRwcm90by5iaW5kID0gZnVuY3Rpb24gKGF0dHIs IGEsIGIpIHsKKyAgICAgICAgdmFyIGRhdGEgPSB7fTsKKyAgICAgICAgaWYg KHR5cGVvZiBhID09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgIHRoaXMu YmluZGluZ3NbYXR0cl0gPSBhOworICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgdmFyIGFuYW1lID0gYiB8fCBhdHRyOworICAgICAgICAgICAgdGhp cy5iaW5kaW5nc1thdHRyXSA9IGZ1bmN0aW9uICh2KSB7CisgICAgICAgICAg ICAgICAgZGF0YVthbmFtZV0gPSB2OworICAgICAgICAgICAgICAgIGEuYXR0 cihkYXRhKTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgICAg cmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBzZXRwcm90by5hdHRyID0gZnVu Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHZhciB1bmJvdW5kID0ge307Cisg ICAgICAgIGZvciAodmFyIGsgaW4gdmFsdWUpIHsKKyAgICAgICAgICAgIGlm ICh0aGlzLmJpbmRpbmdzW2tdKSB7CisgICAgICAgICAgICAgICAgdGhpcy5i aW5kaW5nc1trXSh2YWx1ZVtrXSk7CisgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgIHVuYm91bmRba10gPSB2YWx1ZVtrXTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3IgKHZhciBpID0gMCwg aWkgPSB0aGlzLml0ZW1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAg ICAgICAgIHRoaXMuaXRlbXNbaV0uYXR0cih1bmJvdW5kKTsKKyAgICAgICAg fQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qXAorICAg ICAqIFNldC5jbGVhcgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAg ICogUmVtb3ZlcyBhbGwgZWxlbWVudHMgZnJvbSB0aGUgc2V0CisgICAgXCov CisgICAgc2V0cHJvdG8uY2xlYXIgPSBmdW5jdGlvbiAoKSB7CisgICAgICAg IHdoaWxlICh0aGlzLmxlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5wb3Ao KTsKKyAgICAgICAgfQorICAgIH07CisgICAgLypcCisgICAgICogU2V0LnNw bGljZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmVtb3Zl cyByYW5nZSBvZiBlbGVtZW50cyBmcm9tIHRoZSBzZXQKKyAgICAgKioKKyAg ICAgLSBpbmRleCAobnVtYmVyKSBwb3NpdGlvbiBvZiB0aGUgZGVsZXRpb24K KyAgICAgLSBjb3VudCAobnVtYmVyKSBudW1iZXIgb2YgZWxlbWVudCB0byBy ZW1vdmUKKyAgICAgLSBpbnNlcnRpb27igKYgKG9iamVjdCkgI29wdGlvbmFs IGVsZW1lbnRzIHRvIGluc2VydAorICAgICA9IChvYmplY3QpIHNldCBlbGVt ZW50cyB0aGF0IHdlcmUgZGVsZXRlZAorICAgIFwqLworICAgIHNldHByb3Rv LnNwbGljZSA9IGZ1bmN0aW9uIChpbmRleCwgY291bnQsIGluc2VydGlvbikg eworICAgICAgICBpbmRleCA9IGluZGV4IDwgMCA/IG1tYXgodGhpcy5sZW5n dGggKyBpbmRleCwgMCkgOiBpbmRleDsKKyAgICAgICAgY291bnQgPSBtbWF4 KDAsIG1taW4odGhpcy5sZW5ndGggLSBpbmRleCwgY291bnQpKTsKKyAgICAg ICAgdmFyIHRhaWwgPSBbXSwKKyAgICAgICAgICAgIHRvZGVsID0gW10sCisg ICAgICAgICAgICBhcmdzID0gW10sCisgICAgICAgICAgICBpOworICAgICAg ICBmb3IgKGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7Cisg ICAgICAgICAgICBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTsKKyAgICAgICAg fQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAg ICAgICAgICAgdG9kZWwucHVzaCh0aGlzW2luZGV4ICsgaV0pOworICAgICAg ICB9CisgICAgICAgIGZvciAoOyBpIDwgdGhpcy5sZW5ndGggLSBpbmRleDsg aSsrKSB7CisgICAgICAgICAgICB0YWlsLnB1c2godGhpc1tpbmRleCArIGld KTsKKyAgICAgICAgfQorICAgICAgICB2YXIgYXJnbGVuID0gYXJncy5sZW5n dGg7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdsZW4gKyB0YWlsLmxl bmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLml0ZW1zW2luZGV4ICsg aV0gPSB0aGlzW2luZGV4ICsgaV0gPSBpIDwgYXJnbGVuID8gYXJnc1tpXSA6 IHRhaWxbaSAtIGFyZ2xlbl07CisgICAgICAgIH0KKyAgICAgICAgaSA9IHRo aXMuaXRlbXMubGVuZ3RoID0gdGhpcy5sZW5ndGggLT0gY291bnQgLSBhcmds ZW47CisgICAgICAgIHdoaWxlICh0aGlzW2ldKSB7CisgICAgICAgICAgICBk ZWxldGUgdGhpc1tpKytdOworICAgICAgICB9CisgICAgICAgIHJldHVybiBu ZXcgU2V0KHRvZGVsKTsKKyAgICB9OworICAgIC8qXAorICAgICAqIFNldC5l eGNsdWRlCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZW1v dmVzIGdpdmVuIGVsZW1lbnQgZnJvbSB0aGUgc2V0CisgICAgICoqCisgICAg IC0gZWxlbWVudCAob2JqZWN0KSBlbGVtZW50IHRvIHJlbW92ZQorICAgICA9 IChib29sZWFuKSBgdHJ1ZWAgaWYgb2JqZWN0IHdhcyBmb3VuZCBhbmQgcmVt b3ZlZCBmcm9tIHRoZSBzZXQKKyAgICBcKi8KKyAgICBzZXRwcm90by5leGNs dWRlID0gZnVuY3Rpb24gKGVsKSB7CisgICAgICAgIGZvciAodmFyIGkgPSAw LCBpaSA9IHRoaXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgaWYgKHRoaXNbaV0g PT0gZWwpIHsKKyAgICAgICAgICAgIHRoaXMuc3BsaWNlKGksIDEpOworICAg ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0 dXJuIGZhbHNlOworICAgIH07CisgICAgc2V0cHJvdG8uaW5zZXJ0QWZ0ZXIg PSBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgdmFyIGkgPSB0aGlzLml0ZW1z Lmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGktLSkgeworICAgICAgICAgICAg dGhpcy5pdGVtc1tpXS5pbnNlcnRBZnRlcihlbCk7CisgICAgICAgIH0KKyAg ICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICBzZXRwcm90by5nZXRC Qm94ID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgeCA9IFtdLAorICAg ICAgICAgICAgeSA9IFtdLAorICAgICAgICAgICAgeDIgPSBbXSwKKyAgICAg ICAgICAgIHkyID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSB0aGlzLml0 ZW1zLmxlbmd0aDsgaS0tOykgaWYgKCF0aGlzLml0ZW1zW2ldLnJlbW92ZWQp IHsKKyAgICAgICAgICAgIHZhciBib3ggPSB0aGlzLml0ZW1zW2ldLmdldEJC b3goKTsKKyAgICAgICAgICAgIHgucHVzaChib3gueCk7CisgICAgICAgICAg ICB5LnB1c2goYm94LnkpOworICAgICAgICAgICAgeDIucHVzaChib3gueCAr IGJveC53aWR0aCk7CisgICAgICAgICAgICB5Mi5wdXNoKGJveC55ICsgYm94 LmhlaWdodCk7CisgICAgICAgIH0KKyAgICAgICAgeCA9IG1taW4uYXBwbHko MCwgeCk7CisgICAgICAgIHkgPSBtbWluLmFwcGx5KDAsIHkpOworICAgICAg ICB4MiA9IG1tYXguYXBwbHkoMCwgeDIpOworICAgICAgICB5MiA9IG1tYXgu YXBwbHkoMCwgeTIpOworICAgICAgICByZXR1cm4geworICAgICAgICAgICAg eDogeCwKKyAgICAgICAgICAgIHk6IHksCisgICAgICAgICAgICB4MjogeDIs CisgICAgICAgICAgICB5MjogeTIsCisgICAgICAgICAgICB3aWR0aDogeDIg LSB4LAorICAgICAgICAgICAgaGVpZ2h0OiB5MiAtIHksCisgICAgICAgICAg ICBjeDogeCArICh4MiAtIHgpIC8gMiwKKyAgICAgICAgICAgIGN5OiB5ICsg KHkyIC0geSkgLyAyCisgICAgICAgIH07CisgICAgfTsKKyAgICBzZXRwcm90 by5jbG9uZSA9IGZ1bmN0aW9uIChzKSB7CisgICAgICAgIHMgPSBuZXcgU2V0 OworICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLml0ZW1zLmxl bmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIHMucHVzaCh0aGlz Lml0ZW1zW2ldLmNsb25lKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVy biBzOworICAgIH07CisgICAgc2V0cHJvdG8udG9TdHJpbmcgPSBmdW5jdGlv biAoKSB7CisgICAgICAgIHJldHVybiAiU25hcFx1MjAxOHMgc2V0IjsKKyAg ICB9OworICAgIHNldHByb3RvLnR5cGUgPSAic2V0IjsKKyAgICAvLyBleHBv cnQKKyAgICBTbmFwLlNldCA9IFNldDsKKyAgICBTbmFwLnNldCA9IGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgdmFyIHNldCA9IG5ldyBTZXQ7CisgICAgICAg IGlmIChhcmd1bWVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICBzZXQucHVz aC5hcHBseShzZXQsIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt ZW50cywgMCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXQ7Cisg ICAgfTsKK30pOworCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgQWRvYmUgU3lz dGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLwor Ly8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u IDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhp cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu CisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK Ky8vCisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5T RS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0 cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh biAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp ZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5n dWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9u cyB1bmRlciB0aGUgTGljZW5zZS4KK1NuYXAucGx1Z2luKGZ1bmN0aW9uIChT bmFwLCBFbGVtZW50LCBQYXBlciwgZ2xvYikgeworICAgIHZhciBuYW1lcyA9 IHt9LAorICAgICAgICByZVVuaXQgPSAvW2Etel0rJC9pLAorICAgICAgICBT dHIgPSBTdHJpbmc7CisgICAgbmFtZXMuc3Ryb2tlID0gbmFtZXMuZmlsbCA9 ICJjb2xvdXIiOworICAgIGZ1bmN0aW9uIGdldEVtcHR5KGl0ZW0pIHsKKyAg ICAgICAgdmFyIGwgPSBpdGVtWzBdOworICAgICAgICBzd2l0Y2ggKGwudG9M b3dlckNhc2UoKSkgeworICAgICAgICAgICAgY2FzZSAidCI6IHJldHVybiBb bCwgMCwgMF07CisgICAgICAgICAgICBjYXNlICJtIjogcmV0dXJuIFtsLCAx LCAwLCAwLCAxLCAwLCAwXTsKKyAgICAgICAgICAgIGNhc2UgInIiOiBpZiAo aXRlbS5sZW5ndGggPT0gNCkgeworICAgICAgICAgICAgICAgIHJldHVybiBb bCwgMCwgaXRlbVsyXSwgaXRlbVszXV07CisgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgIHJldHVybiBbbCwgMF07CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBjYXNlICJzIjogaWYgKGl0ZW0ubGVuZ3RoID09 IDUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gW2wsIDEsIDEsIGl0ZW1b M10sIGl0ZW1bNF1dOworICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmxl bmd0aCA9PSAzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIFtsLCAxLCAx XTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0 dXJuIFtsLCAxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KyAgICBmdW5jdGlvbiBlcXVhbGlzZVRyYW5zZm9ybSh0MSwgdDIsIGdldEJC b3gpIHsKKyAgICAgICAgdDIgPSBTdHIodDIpLnJlcGxhY2UoL1wuezN9fFx1 MjAyNi9nLCB0MSk7CisgICAgICAgIHQxID0gU25hcC5wYXJzZVRyYW5zZm9y bVN0cmluZyh0MSkgfHwgW107CisgICAgICAgIHQyID0gU25hcC5wYXJzZVRy YW5zZm9ybVN0cmluZyh0MikgfHwgW107CisgICAgICAgIHZhciBtYXhsZW5n dGggPSBNYXRoLm1heCh0MS5sZW5ndGgsIHQyLmxlbmd0aCksCisgICAgICAg ICAgICBmcm9tID0gW10sCisgICAgICAgICAgICB0byA9IFtdLAorICAgICAg ICAgICAgaSA9IDAsIGosIGpqLAorICAgICAgICAgICAgdHQxLCB0dDI7Cisg ICAgICAgIGZvciAoOyBpIDwgbWF4bGVuZ3RoOyBpKyspIHsKKyAgICAgICAg ICAgIHR0MSA9IHQxW2ldIHx8IGdldEVtcHR5KHQyW2ldKTsKKyAgICAgICAg ICAgIHR0MiA9IHQyW2ldIHx8IGdldEVtcHR5KHR0MSk7CisgICAgICAgICAg ICBpZiAoKHR0MVswXSAhPSB0dDJbMF0pIHx8CisgICAgICAgICAgICAgICAg KHR0MVswXS50b0xvd2VyQ2FzZSgpID09ICJyIiAmJiAodHQxWzJdICE9IHR0 MlsyXSB8fCB0dDFbM10gIT0gdHQyWzNdKSkgfHwKKyAgICAgICAgICAgICAg ICAodHQxWzBdLnRvTG93ZXJDYXNlKCkgPT0gInMiICYmICh0dDFbM10gIT0g dHQyWzNdIHx8IHR0MVs0XSAhPSB0dDJbNF0pKQorICAgICAgICAgICAgICAg ICkgeworICAgICAgICAgICAgICAgICAgICB0MSA9IFNuYXAuXy50cmFuc2Zv cm0ybWF0cml4KHQxLCBnZXRCQm94KCkpOworICAgICAgICAgICAgICAgICAg ICB0MiA9IFNuYXAuXy50cmFuc2Zvcm0ybWF0cml4KHQyLCBnZXRCQm94KCkp OworICAgICAgICAgICAgICAgICAgICBmcm9tID0gW1sibSIsIHQxLmEsIHQx LmIsIHQxLmMsIHQxLmQsIHQxLmUsIHQxLmZdXTsKKyAgICAgICAgICAgICAg ICAgICAgdG8gPSBbWyJtIiwgdDIuYSwgdDIuYiwgdDIuYywgdDIuZCwgdDIu ZSwgdDIuZl1dOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGZyb21baV0gPSBbXTsKKyAgICAgICAg ICAgIHRvW2ldID0gW107CisgICAgICAgICAgICBmb3IgKGogPSAwLCBqaiA9 IE1hdGgubWF4KHR0MS5sZW5ndGgsIHR0Mi5sZW5ndGgpOyBqIDwgamo7IGor KykgeworICAgICAgICAgICAgICAgIGogaW4gdHQxICYmIChmcm9tW2ldW2pd ID0gdHQxW2pdKTsKKyAgICAgICAgICAgICAgICBqIGluIHR0MiAmJiAodG9b aV1bal0gPSB0dDJbal0pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBmcm9tOiBwYXRoMmFycmF5 KGZyb20pLAorICAgICAgICAgICAgdG86IHBhdGgyYXJyYXkodG8pLAorICAg ICAgICAgICAgZjogZ2V0UGF0aChmcm9tKQorICAgICAgICB9OworICAgIH0K KyAgICBmdW5jdGlvbiBnZXROdW1iZXIodmFsKSB7CisgICAgICAgIHJldHVy biB2YWw7CisgICAgfQorICAgIGZ1bmN0aW9uIGdldFVuaXQodW5pdCkgewor ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCkgeworICAgICAgICAgICAg cmV0dXJuICt2YWwudG9GaXhlZCgzKSArIHVuaXQ7CisgICAgICAgIH07Cisg ICAgfQorICAgIGZ1bmN0aW9uIGdldFZpZXdCb3godmFsKSB7CisgICAgICAg IHJldHVybiB2YWwuam9pbigiICIpOworICAgIH0KKyAgICBmdW5jdGlvbiBn ZXRDb2xvdXIoY2xyKSB7CisgICAgICAgIHJldHVybiBTbmFwLnJnYihjbHJb MF0sIGNsclsxXSwgY2xyWzJdKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZ2V0 UGF0aChwYXRoKSB7CisgICAgICAgIHZhciBrID0gMCwgaSwgaWksIGosIGpq LCBvdXQsIGEsIGIgPSBbXTsKKyAgICAgICAgZm9yIChpID0gMCwgaWkgPSBw YXRoLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIG91dCA9 ICJbIjsKKyAgICAgICAgICAgIGEgPSBbJyInICsgcGF0aFtpXVswXSArICci J107CisgICAgICAgICAgICBmb3IgKGogPSAxLCBqaiA9IHBhdGhbaV0ubGVu Z3RoOyBqIDwgamo7IGorKykgeworICAgICAgICAgICAgICAgIGFbal0gPSAi dmFsWyIgKyAoaysrKSArICJdIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIG91dCArPSBhICsgIl0iOworICAgICAgICAgICAgYltpXSA9IG91dDsK KyAgICAgICAgfQorICAgICAgICByZXR1cm4gRnVuY3Rpb24oInZhbCIsICJy ZXR1cm4gU25hcC5wYXRoLnRvU3RyaW5nLmNhbGwoWyIgKyBiICsgIl0pIik7 CisgICAgfQorICAgIGZ1bmN0aW9uIHBhdGgyYXJyYXkocGF0aCkgeworICAg ICAgICB2YXIgb3V0ID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBp aSA9IHBhdGgubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAg Zm9yICh2YXIgaiA9IDEsIGpqID0gcGF0aFtpXS5sZW5ndGg7IGogPCBqajsg aisrKSB7CisgICAgICAgICAgICAgICAgb3V0LnB1c2gocGF0aFtpXVtqXSk7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG91 dDsKKyAgICB9CisgICAgZnVuY3Rpb24gaXNOdW1lcmljKG9iaikgeworICAg ICAgICByZXR1cm4gaXNGaW5pdGUocGFyc2VGbG9hdChvYmopKTsKKyAgICB9 CisgICAgZnVuY3Rpb24gYXJyYXlFcXVhbChhcnIxLCBhcnIyKSB7CisgICAg ICAgIGlmICghU25hcC5pcyhhcnIxLCAiYXJyYXkiKSB8fCAhU25hcC5pcyhh cnIyLCAiYXJyYXkiKSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor ICAgICAgICB9CisgICAgICAgIHJldHVybiBhcnIxLnRvU3RyaW5nKCkgPT0g YXJyMi50b1N0cmluZygpOworICAgIH0KKyAgICBFbGVtZW50LnByb3RvdHlw ZS5lcXVhbCA9IGZ1bmN0aW9uIChuYW1lLCBiKSB7CisgICAgICAgIHJldHVy biBldmUoInNuYXAudXRpbC5lcXVhbCIsIHRoaXMsIG5hbWUsIGIpLmZpcnN0 RGVmaW5lZCgpOworICAgIH07CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuZXF1 YWwiLCBmdW5jdGlvbiAobmFtZSwgYikgeworICAgICAgICB2YXIgQSwgQiwg YSA9IFN0cih0aGlzLmF0dHIobmFtZSkgfHwgIiIpLAorICAgICAgICAgICAg ZWwgPSB0aGlzOworICAgICAgICBpZiAoaXNOdW1lcmljKGEpICYmIGlzTnVt ZXJpYyhiKSkgeworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg ICAgICBmcm9tOiBwYXJzZUZsb2F0KGEpLAorICAgICAgICAgICAgICAgIHRv OiBwYXJzZUZsb2F0KGIpLAorICAgICAgICAgICAgICAgIGY6IGdldE51bWJl cgorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICBpZiAobmFt ZXNbbmFtZV0gPT0gImNvbG91ciIpIHsKKyAgICAgICAgICAgIEEgPSBTbmFw LmNvbG9yKGEpOworICAgICAgICAgICAgQiA9IFNuYXAuY29sb3IoYik7Cisg ICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIGZyb206IFtB LnIsIEEuZywgQS5iLCBBLm9wYWNpdHldLAorICAgICAgICAgICAgICAgIHRv OiBbQi5yLCBCLmcsIEIuYiwgQi5vcGFjaXR5XSwKKyAgICAgICAgICAgICAg ICBmOiBnZXRDb2xvdXIKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAg ICAgICAgaWYgKG5hbWUgPT0gInZpZXdCb3giKSB7CisgICAgICAgICAgICBB ID0gdGhpcy5hdHRyKG5hbWUpLnZiLnNwbGl0KCIgIikubWFwKE51bWJlcik7 CisgICAgICAgICAgICBCID0gYi5zcGxpdCgiICIpLm1hcChOdW1iZXIpOwor ICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBmcm9tOiBB LAorICAgICAgICAgICAgICAgIHRvOiBCLAorICAgICAgICAgICAgICAgIGY6 IGdldFZpZXdCb3gKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAg ICAgaWYgKG5hbWUgPT0gInRyYW5zZm9ybSIgfHwgbmFtZSA9PSAiZ3JhZGll bnRUcmFuc2Zvcm0iIHx8IG5hbWUgPT0gInBhdHRlcm5UcmFuc2Zvcm0iKSB7 CisgICAgICAgICAgICBpZiAoYiBpbnN0YW5jZW9mIFNuYXAuTWF0cml4KSB7 CisgICAgICAgICAgICAgICAgYiA9IGIudG9UcmFuc2Zvcm1TdHJpbmcoKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghU25hcC5fLnJnVHJh bnNmb3JtLnRlc3QoYikpIHsKKyAgICAgICAgICAgICAgICBiID0gU25hcC5f LnN2Z1RyYW5zZm9ybTJzdHJpbmcoYik7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICByZXR1cm4gZXF1YWxpc2VUcmFuc2Zvcm0oYSwgYiwgZnVuY3Rp b24gKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBlbC5nZXRCQm94KDEp OworICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5h bWUgPT0gImQiIHx8IG5hbWUgPT0gInBhdGgiKSB7CisgICAgICAgICAgICBB ID0gU25hcC5wYXRoLnRvQ3ViaWMoYSwgYik7CisgICAgICAgICAgICByZXR1 cm4geworICAgICAgICAgICAgICAgIGZyb206IHBhdGgyYXJyYXkoQVswXSks CisgICAgICAgICAgICAgICAgdG86IHBhdGgyYXJyYXkoQVsxXSksCisgICAg ICAgICAgICAgICAgZjogZ2V0UGF0aChBWzBdKQorICAgICAgICAgICAgfTsK KyAgICAgICAgfQorICAgICAgICBpZiAobmFtZSA9PSAicG9pbnRzIikgewor ICAgICAgICAgICAgQSA9IFN0cihhKS5zcGxpdChTbmFwLl8uc2VwYXJhdG9y KTsKKyAgICAgICAgICAgIEIgPSBTdHIoYikuc3BsaXQoU25hcC5fLnNlcGFy YXRvcik7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAg IGZyb206IEEsCisgICAgICAgICAgICAgICAgdG86IEIsCisgICAgICAgICAg ICAgICAgZjogZnVuY3Rpb24gKHZhbCkgeyByZXR1cm4gdmFsOyB9CisgICAg ICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHZhciBhVW5pdCA9IGEu bWF0Y2gocmVVbml0KSwKKyAgICAgICAgICAgIGJVbml0ID0gU3RyKGIpLm1h dGNoKHJlVW5pdCk7CisgICAgICAgIGlmIChhVW5pdCAmJiBhcnJheUVxdWFs KGFVbml0LCBiVW5pdCkpIHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAg ICAgICAgICAgICAgZnJvbTogcGFyc2VGbG9hdChhKSwKKyAgICAgICAgICAg ICAgICB0bzogcGFyc2VGbG9hdChiKSwKKyAgICAgICAgICAgICAgICBmOiBn ZXRVbml0KGFVbml0KQorICAgICAgICAgICAgfTsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgZnJv bTogdGhpcy5hc1BYKG5hbWUpLAorICAgICAgICAgICAgICAgIHRvOiB0aGlz LmFzUFgobmFtZSwgYiksCisgICAgICAgICAgICAgICAgZjogZ2V0TnVtYmVy CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgfSk7Cit9KTsKKwor Ly8gQ29weXJpZ2h0IChjKSAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3Jh dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVu ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj ZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBv YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gaHR0cDov L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8g VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0 byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIg dGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJ UywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRo ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n IHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExp Y2Vuc2UuCitTbmFwLnBsdWdpbihmdW5jdGlvbiAoU25hcCwgRWxlbWVudCwg UGFwZXIsIGdsb2IpIHsKKyAgICB2YXIgZWxwcm90byA9IEVsZW1lbnQucHJv dG90eXBlLAorICAgIGhhcyA9ICJoYXNPd25Qcm9wZXJ0eSIsCisgICAgc3Vw cG9ydHNUb3VjaCA9ICJjcmVhdGVUb3VjaCIgaW4gZ2xvYi5kb2MsCisgICAg ZXZlbnRzID0gWworICAgICAgICAiY2xpY2siLCAiZGJsY2xpY2siLCAibW91 c2Vkb3duIiwgIm1vdXNlbW92ZSIsICJtb3VzZW91dCIsCisgICAgICAgICJt b3VzZW92ZXIiLCAibW91c2V1cCIsICJ0b3VjaHN0YXJ0IiwgInRvdWNobW92 ZSIsICJ0b3VjaGVuZCIsCisgICAgICAgICJ0b3VjaGNhbmNlbCIKKyAgICBd LAorICAgIHRvdWNoTWFwID0geworICAgICAgICBtb3VzZWRvd246ICJ0b3Vj aHN0YXJ0IiwKKyAgICAgICAgbW91c2Vtb3ZlOiAidG91Y2htb3ZlIiwKKyAg ICAgICAgbW91c2V1cDogInRvdWNoZW5kIgorICAgIH0sCisgICAgZ2V0U2Ny b2xsID0gZnVuY3Rpb24gKHh5LCBlbCkgeworICAgICAgICB2YXIgbmFtZSA9 IHh5ID09ICJ5IiA/ICJzY3JvbGxUb3AiIDogInNjcm9sbExlZnQiLAorICAg ICAgICAgICAgZG9jID0gZWwgJiYgZWwubm9kZSA/IGVsLm5vZGUub3duZXJE b2N1bWVudCA6IGdsb2IuZG9jOworICAgICAgICByZXR1cm4gZG9jW25hbWUg aW4gZG9jLmRvY3VtZW50RWxlbWVudCA/ICJkb2N1bWVudEVsZW1lbnQiIDog ImJvZHkiXVtuYW1lXTsKKyAgICB9LAorICAgIHByZXZlbnREZWZhdWx0ID0g ZnVuY3Rpb24gKCkgeworICAgICAgICB0aGlzLnJldHVyblZhbHVlID0gZmFs c2U7CisgICAgfSwKKyAgICBwcmV2ZW50VG91Y2ggPSBmdW5jdGlvbiAoKSB7 CisgICAgICAgIHJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnQucHJldmVudERl ZmF1bHQoKTsKKyAgICB9LAorICAgIHN0b3BQcm9wYWdhdGlvbiA9IGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgdGhpcy5jYW5jZWxCdWJibGUgPSB0cnVlOwor ICAgIH0sCisgICAgc3RvcFRvdWNoID0gZnVuY3Rpb24gKCkgeworICAgICAg ICByZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50LnN0b3BQcm9wYWdhdGlvbigp OworICAgIH0sCisgICAgYWRkRXZlbnQgPSBmdW5jdGlvbiAob2JqLCB0eXBl LCBmbiwgZWxlbWVudCkgeworICAgICAgICB2YXIgcmVhbE5hbWUgPSBzdXBw b3J0c1RvdWNoICYmIHRvdWNoTWFwW3R5cGVdID8gdG91Y2hNYXBbdHlwZV0g OiB0eXBlLAorICAgICAgICAgICAgZiA9IGZ1bmN0aW9uIChlKSB7CisgICAg ICAgICAgICAgICAgdmFyIHNjcm9sbFkgPSBnZXRTY3JvbGwoInkiLCBlbGVt ZW50KSwKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsWCA9IGdldFNjcm9s bCgieCIsIGVsZW1lbnQpOworICAgICAgICAgICAgICAgIGlmIChzdXBwb3J0 c1RvdWNoICYmIHRvdWNoTWFwW2hhc10odHlwZSkpIHsKKyAgICAgICAgICAg ICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZS50YXJnZXRUb3VjaGVz ICYmIGUudGFyZ2V0VG91Y2hlcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoZS50YXJnZXRUb3VjaGVzW2ld LnRhcmdldCA9PSBvYmogfHwgb2JqLmNvbnRhaW5zKGUudGFyZ2V0VG91Y2hl c1tpXS50YXJnZXQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg dmFyIG9sZGUgPSBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUg PSBlLnRhcmdldFRvdWNoZXNbaV07CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZS5vcmlnaW5hbEV2ZW50ID0gb2xkZTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0ID0gcHJldmVudFRvdWNo OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0 aW9uID0gc3RvcFRvdWNoOworICAgICAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIHZhciB4ID0gZS5jbGllbnRYICsgc2Nyb2xsWCwKKyAgICAgICAgICAg ICAgICAgICAgeSA9IGUuY2xpZW50WSArIHNjcm9sbFk7CisgICAgICAgICAg ICAgICAgcmV0dXJuIGZuLmNhbGwoZWxlbWVudCwgZSwgeCwgeSk7CisgICAg ICAgICAgICB9OworCisgICAgICAgIGlmICh0eXBlICE9PSByZWFsTmFtZSkg eworICAgICAgICAgICAgb2JqLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgZiwg ZmFsc2UpOworICAgICAgICB9CisKKyAgICAgICAgb2JqLmFkZEV2ZW50TGlz dGVuZXIocmVhbE5hbWUsIGYsIGZhbHNlKTsKKworICAgICAgICByZXR1cm4g ZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgaWYgKHR5cGUgIT09IHJlYWxO YW1lKSB7CisgICAgICAgICAgICAgICAgb2JqLnJlbW92ZUV2ZW50TGlzdGVu ZXIodHlwZSwgZiwgZmFsc2UpOworICAgICAgICAgICAgfQorCisgICAgICAg ICAgICBvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcihyZWFsTmFtZSwgZiwgZmFs c2UpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH07Cisg ICAgfSwKKyAgICBkcmFnID0gW10sCisgICAgZHJhZ01vdmUgPSBmdW5jdGlv biAoZSkgeworICAgICAgICB2YXIgeCA9IGUuY2xpZW50WCwKKyAgICAgICAg ICAgIHkgPSBlLmNsaWVudFksCisgICAgICAgICAgICBzY3JvbGxZID0gZ2V0 U2Nyb2xsKCJ5IiksCisgICAgICAgICAgICBzY3JvbGxYID0gZ2V0U2Nyb2xs KCJ4IiksCisgICAgICAgICAgICBkcmFnaSwKKyAgICAgICAgICAgIGogPSBk cmFnLmxlbmd0aDsKKyAgICAgICAgd2hpbGUgKGotLSkgeworICAgICAgICAg ICAgZHJhZ2kgPSBkcmFnW2pdOworICAgICAgICAgICAgaWYgKHN1cHBvcnRz VG91Y2gpIHsKKyAgICAgICAgICAgICAgICB2YXIgaSA9IGUudG91Y2hlcyAm JiBlLnRvdWNoZXMubGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICB0b3Vj aDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaS0tKSB7CisgICAgICAgICAg ICAgICAgICAgIHRvdWNoID0gZS50b3VjaGVzW2ldOworICAgICAgICAgICAg ICAgICAgICBpZiAodG91Y2guaWRlbnRpZmllciA9PSBkcmFnaS5lbC5fZHJh Zy5pZCB8fCBkcmFnaS5lbC5ub2RlLmNvbnRhaW5zKHRvdWNoLnRhcmdldCkp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHggPSB0b3VjaC5jbGllbnRY OworICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHRvdWNoLmNsaWVudFk7 CisgICAgICAgICAgICAgICAgICAgICAgICAoZS5vcmlnaW5hbEV2ZW50ID8g ZS5vcmlnaW5hbEV2ZW50IDogZSkucHJldmVudERlZmF1bHQoKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICB2YXIgbm9kZSA9IGRyYWdpLmVsLm5vZGUs CisgICAgICAgICAgICAgICAgbywKKyAgICAgICAgICAgICAgICBuZXh0ID0g bm9kZS5uZXh0U2libGluZywKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSBu b2RlLnBhcmVudE5vZGUsCisgICAgICAgICAgICAgICAgZGlzcGxheSA9IG5v ZGUuc3R5bGUuZGlzcGxheTsKKyAgICAgICAgICAgIC8vIGdsb2Iud2luLm9w ZXJhICYmIHBhcmVudC5yZW1vdmVDaGlsZChub2RlKTsKKyAgICAgICAgICAg IC8vIG5vZGUuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgICAgICAgICAg IC8vIG8gPSBkcmFnaS5lbC5wYXBlci5nZXRFbGVtZW50QnlQb2ludCh4LCB5 KTsKKyAgICAgICAgICAgIC8vIG5vZGUuc3R5bGUuZGlzcGxheSA9IGRpc3Bs YXk7CisgICAgICAgICAgICAvLyBnbG9iLndpbi5vcGVyYSAmJiAobmV4dCA/ IHBhcmVudC5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCkgOiBwYXJlbnQuYXBw ZW5kQ2hpbGQobm9kZSkpOworICAgICAgICAgICAgLy8gbyAmJiBldmUoInNu YXAuZHJhZy5vdmVyLiIgKyBkcmFnaS5lbC5pZCwgZHJhZ2kuZWwsIG8pOwor ICAgICAgICAgICAgeCArPSBzY3JvbGxYOworICAgICAgICAgICAgeSArPSBz Y3JvbGxZOworICAgICAgICAgICAgZXZlKCJzbmFwLmRyYWcubW92ZS4iICsg ZHJhZ2kuZWwuaWQsIGRyYWdpLm1vdmVfc2NvcGUgfHwgZHJhZ2kuZWwsIHgg LSBkcmFnaS5lbC5fZHJhZy54LCB5IC0gZHJhZ2kuZWwuX2RyYWcueSwgeCwg eSwgZSk7CisgICAgICAgIH0KKyAgICB9LAorICAgIGRyYWdVcCA9IGZ1bmN0 aW9uIChlKSB7CisgICAgICAgIFNuYXAudW5tb3VzZW1vdmUoZHJhZ01vdmUp LnVubW91c2V1cChkcmFnVXApOworICAgICAgICB2YXIgaSA9IGRyYWcubGVu Z3RoLAorICAgICAgICAgICAgZHJhZ2k7CisgICAgICAgIHdoaWxlIChpLS0p IHsKKyAgICAgICAgICAgIGRyYWdpID0gZHJhZ1tpXTsKKyAgICAgICAgICAg IGRyYWdpLmVsLl9kcmFnID0ge307CisgICAgICAgICAgICBldmUoInNuYXAu ZHJhZy5lbmQuIiArIGRyYWdpLmVsLmlkLCBkcmFnaS5lbmRfc2NvcGUgfHwg ZHJhZ2kuc3RhcnRfc2NvcGUgfHwgZHJhZ2kubW92ZV9zY29wZSB8fCBkcmFn aS5lbCwgZSk7CisgICAgICAgICAgICBldmUub2ZmKCJzbmFwLmRyYWcuKi4i ICsgZHJhZ2kuZWwuaWQpOworICAgICAgICB9CisgICAgICAgIGRyYWcgPSBb XTsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQuY2xpY2sKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZHMgYSBjbGljayBl dmVudCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAo ZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmpl Y3QpIEBFbGVtZW50CisgICAgXCovCisgICAgLypcCisgICAgICogRWxlbWVu dC51bmNsaWNrCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBS ZW1vdmVzIGEgY2xpY2sgZXZlbnQgaGFuZGxlciBmcm9tIHRoZSBlbGVtZW50 CisgICAgIC0gaGFuZGxlciAoZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBl dmVudAorICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgXCovCisKKyAg ICAvKlwKKyAgICAgKiBFbGVtZW50LmRibGNsaWNrCisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEgZG91YmxlIGNsaWNrIGV2ZW50 IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5j dGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkg QEVsZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnVu ZGJsY2xpY2sKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJl bW92ZXMgYSBkb3VibGUgY2xpY2sgZXZlbnQgaGFuZGxlciBmcm9tIHRoZSBl bGVtZW50CisgICAgIC0gaGFuZGxlciAoZnVuY3Rpb24pIGhhbmRsZXIgZm9y IHRoZSBldmVudAorICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgXCov CisKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50Lm1vdXNlZG93bgorICAgICBb IG1ldGhvZCBdCisgICAgICoqCisgICAgICogQWRkcyBhIG1vdXNlZG93biBl dmVudCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAo ZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmpl Y3QpIEBFbGVtZW50CisgICAgXCovCisgICAgLypcCisgICAgICogRWxlbWVu dC51bm1vdXNlZG93bgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAg ICogUmVtb3ZlcyBhIG1vdXNlZG93biBldmVudCBoYW5kbGVyIGZyb20gdGhl IGVsZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5jdGlvbikgaGFuZGxlciBm b3IgdGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBc Ki8KKworICAgIC8qXAorICAgICAqIEVsZW1lbnQubW91c2Vtb3ZlCisgICAg IFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEgbW91c2Vtb3Zl IGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVy IChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9i amVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBFbGVt ZW50LnVubW91c2Vtb3ZlCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBSZW1vdmVzIGEgbW91c2Vtb3ZlIGV2ZW50IGhhbmRsZXIgZnJvbSB0 aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVy IGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAg IFwqLworCisgICAgLypcCisgICAgICogRWxlbWVudC5tb3VzZW91dAorICAg ICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQWRkcyBhIG1vdXNlb3V0 IGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVy IChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9i amVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBFbGVt ZW50LnVubW91c2VvdXQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAg ICAqIFJlbW92ZXMgYSBtb3VzZW91dCBldmVudCBoYW5kbGVyIGZyb20gdGhl IGVsZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5jdGlvbikgaGFuZGxlciBm b3IgdGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBc Ki8KKworICAgIC8qXAorICAgICAqIEVsZW1lbnQubW91c2VvdmVyCisgICAg IFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEgbW91c2VvdmVy IGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVy IChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9i amVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBFbGVt ZW50LnVubW91c2VvdmVyCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBSZW1vdmVzIGEgbW91c2VvdmVyIGV2ZW50IGhhbmRsZXIgZnJvbSB0 aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVy IGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAg IFwqLworCisgICAgLypcCisgICAgICogRWxlbWVudC5tb3VzZXVwCisgICAg IFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEgbW91c2V1cCBl dmVudCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAo ZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmpl Y3QpIEBFbGVtZW50CisgICAgXCovCisgICAgLypcCisgICAgICogRWxlbWVu dC51bm1vdXNldXAKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAq IFJlbW92ZXMgYSBtb3VzZXVwIGV2ZW50IGhhbmRsZXIgZnJvbSB0aGUgZWxl bWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0 aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAgIFwqLwor CisgICAgLypcCisgICAgICogRWxlbWVudC50b3VjaHN0YXJ0CisgICAgIFsg bWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEgdG91Y2hzdGFydCBl dmVudCBoYW5kbGVyIHRvIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAo ZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmpl Y3QpIEBFbGVtZW50CisgICAgXCovCisgICAgLypcCisgICAgICogRWxlbWVu dC51bnRvdWNoc3RhcnQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAg ICAqIFJlbW92ZXMgYSB0b3VjaHN0YXJ0IGV2ZW50IGhhbmRsZXIgZnJvbSB0 aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVy IGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAg IFwqLworCisgICAgLypcCisgICAgICogRWxlbWVudC50b3VjaG1vdmUKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZHMgYSB0b3VjaG1v dmUgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAorICAgICAtIGhhbmRs ZXIgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAo b2JqZWN0KSBARWxlbWVudAorICAgIFwqLworICAgIC8qXAorICAgICAqIEVs ZW1lbnQudW50b3VjaG1vdmUKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgor ICAgICAqIFJlbW92ZXMgYSB0b3VjaG1vdmUgZXZlbnQgaGFuZGxlciBmcm9t IHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAoZnVuY3Rpb24pIGhhbmRs ZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmplY3QpIEBFbGVtZW50Cisg ICAgXCovCisKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnRvdWNoZW5kCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGEgdG91Y2hl bmQgZXZlbnQgaGFuZGxlciB0byB0aGUgZWxlbWVudAorICAgICAtIGhhbmRs ZXIgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAo b2JqZWN0KSBARWxlbWVudAorICAgIFwqLworICAgIC8qXAorICAgICAqIEVs ZW1lbnQudW50b3VjaGVuZAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogUmVtb3ZlcyBhIHRvdWNoZW5kIGV2ZW50IGhhbmRsZXIgZnJvbSB0 aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVy IGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAg IFwqLworCisgICAgLypcCisgICAgICogRWxlbWVudC50b3VjaGNhbmNlbAor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQWRkcyBhIHRvdWNo Y2FuY2VsIGV2ZW50IGhhbmRsZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBo YW5kbGVyIChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAg ID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAg KiBFbGVtZW50LnVudG91Y2hjYW5jZWwKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIFJlbW92ZXMgYSB0b3VjaGNhbmNlbCBldmVudCBoYW5k bGVyIGZyb20gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5jdGlv bikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkgQEVs ZW1lbnQKKyAgICBcKi8KKyAgICBmb3IgKHZhciBpID0gZXZlbnRzLmxlbmd0 aDsgaS0tOykgeworICAgICAgICAoZnVuY3Rpb24gKGV2ZW50TmFtZSkgewor ICAgICAgICAgICAgU25hcFtldmVudE5hbWVdID0gZWxwcm90b1tldmVudE5h bWVdID0gZnVuY3Rpb24gKGZuLCBzY29wZSkgeworICAgICAgICAgICAgICAg IGlmIChTbmFwLmlzKGZuLCAiZnVuY3Rpb24iKSkgeworICAgICAgICAgICAg ICAgICAgICB0aGlzLmV2ZW50cyA9IHRoaXMuZXZlbnRzIHx8IFtdOworICAg ICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50cy5wdXNoKHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIG5hbWU6IGV2ZW50TmFtZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgIGY6IGZuLAorICAgICAgICAgICAgICAgICAgICAgICAg dW5iaW5kOiBhZGRFdmVudCh0aGlzLm5vZGUgfHwgZG9jdW1lbnQsIGV2ZW50 TmFtZSwgZm4sIHNjb3BlIHx8IHRoaXMpCisgICAgICAgICAgICAgICAgICAg IH0pOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuZXZlbnRzLmxlbmd0 aDsgaSA8IGlpOyBpKyspIGlmICh0aGlzLmV2ZW50c1tpXS5uYW1lID09IGV2 ZW50TmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmV2ZW50c1tpXS5mLmNh bGwodGhpcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChl KSB7fQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAg fTsKKyAgICAgICAgICAgIFNuYXBbInVuIiArIGV2ZW50TmFtZV0gPQorICAg ICAgICAgICAgZWxwcm90b1sidW4iICsgZXZlbnROYW1lXSA9IGZ1bmN0aW9u IChmbikgeworICAgICAgICAgICAgICAgIHZhciBldmVudHMgPSB0aGlzLmV2 ZW50cyB8fCBbXSwKKyAgICAgICAgICAgICAgICAgICAgbCA9IGV2ZW50cy5s ZW5ndGg7CisgICAgICAgICAgICAgICAgd2hpbGUgKGwtLSkgaWYgKGV2ZW50 c1tsXS5uYW1lID09IGV2ZW50TmFtZSAmJgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChldmVudHNbbF0uZiA9PSBmbiB8fCAhZm4pKSB7Cisg ICAgICAgICAgICAgICAgICAgIGV2ZW50c1tsXS51bmJpbmQoKTsKKyAgICAg ICAgICAgICAgICAgICAgZXZlbnRzLnNwbGljZShsLCAxKTsKKyAgICAgICAg ICAgICAgICAgICAgIWV2ZW50cy5sZW5ndGggJiYgZGVsZXRlIHRoaXMuZXZl bnRzOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg ICAgICAgICAgICB9OworICAgICAgICB9KShldmVudHNbaV0pOworICAgIH0K KyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmhvdmVyCisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGhvdmVyIGV2ZW50IGhhbmRsZXJz IHRvIHRoZSBlbGVtZW50CisgICAgIC0gZl9pbiAoZnVuY3Rpb24pIGhhbmRs ZXIgZm9yIGhvdmVyIGluCisgICAgIC0gZl9vdXQgKGZ1bmN0aW9uKSBoYW5k bGVyIGZvciBob3ZlciBvdXQKKyAgICAgLSBpY29udGV4dCAob2JqZWN0KSAj b3B0aW9uYWwgY29udGV4dCBmb3IgaG92ZXIgaW4gaGFuZGxlcgorICAgICAt IG9jb250ZXh0IChvYmplY3QpICNvcHRpb25hbCBjb250ZXh0IGZvciBob3Zl ciBvdXQgaGFuZGxlcgorICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAg XCovCisgICAgZWxwcm90by5ob3ZlciA9IGZ1bmN0aW9uIChmX2luLCBmX291 dCwgc2NvcGVfaW4sIHNjb3BlX291dCkgeworICAgICAgICByZXR1cm4gdGhp cy5tb3VzZW92ZXIoZl9pbiwgc2NvcGVfaW4pLm1vdXNlb3V0KGZfb3V0LCBz Y29wZV9vdXQgfHwgc2NvcGVfaW4pOworICAgIH07CisgICAgLypcCisgICAg ICogRWxlbWVudC51bmhvdmVyCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioK KyAgICAgKiBSZW1vdmVzIGhvdmVyIGV2ZW50IGhhbmRsZXJzIGZyb20gdGhl IGVsZW1lbnQKKyAgICAgLSBmX2luIChmdW5jdGlvbikgaGFuZGxlciBmb3Ig aG92ZXIgaW4KKyAgICAgLSBmX291dCAoZnVuY3Rpb24pIGhhbmRsZXIgZm9y IGhvdmVyIG91dAorICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgXCov CisgICAgZWxwcm90by51bmhvdmVyID0gZnVuY3Rpb24gKGZfaW4sIGZfb3V0 KSB7CisgICAgICAgIHJldHVybiB0aGlzLnVubW91c2VvdmVyKGZfaW4pLnVu bW91c2VvdXQoZl9vdXQpOworICAgIH07CisgICAgdmFyIGRyYWdnYWJsZSA9 IFtdOworICAgIC8vIFNJRVJSQSB1bmNsZWFyIHdoYXQgX2NvbnRleHRfIHJl ZmVycyB0byBmb3Igc3RhcnRpbmcsIGVuZGluZywgbW92aW5nIHRoZSBkcmFn IGdlc3R1cmUuCisgICAgLy8gU0lFUlJBIEVsZW1lbnQuZHJhZygpOiBfeCBw b3NpdGlvbiBvZiB0aGUgbW91c2VfOiBXaGVyZSBhcmUgdGhlIHgveSB2YWx1 ZXMgb2Zmc2V0IGZyb20/CisgICAgLy8gU0lFUlJBIEVsZW1lbnQuZHJhZygp OiBtdWNoIG9mIHRoaXMgbWVtYmVyJ3MgZG9jIGFwcGVhcnMgdG8gYmUgZHVw bGljYXRlZCBmb3Igc29tZSByZWFzb24uCisgICAgLy8gU0lFUlJBIFVuY2xl YXIgYWJvdXQgdGhpcyBzZW50ZW5jZTogX0FkZGl0aW9uYWxseSBmb2xsb3dp bmcgZHJhZyBldmVudHMgd2lsbCBiZSB0cmlnZ2VyZWQ6IGRyYWcuc3RhcnQu PGlkPiBvbiBzdGFydCwgZHJhZy5lbmQuPGlkPiBvbiBlbmQgYW5kIGRyYWcu bW92ZS48aWQ+IG9uIGV2ZXJ5IG1vdmUuXyBJcyB0aGVyZSBhIGdsb2JhbCBf ZHJhZ18gb2JqZWN0IHRvIHdoaWNoIHlvdSBjYW4gYXNzaWduIGhhbmRsZXJz IGtleWVkIGJ5IGFuIGVsZW1lbnQncyBJRD8KKyAgICAvKlwKKyAgICAgKiBF bGVtZW50LmRyYWcKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAq IEFkZHMgZXZlbnQgaGFuZGxlcnMgZm9yIGFuIGVsZW1lbnQncyBkcmFnIGdl c3R1cmUKKyAgICAgKioKKyAgICAgLSBvbm1vdmUgKGZ1bmN0aW9uKSBoYW5k bGVyIGZvciBtb3ZpbmcKKyAgICAgLSBvbnN0YXJ0IChmdW5jdGlvbikgaGFu ZGxlciBmb3IgZHJhZyBzdGFydAorICAgICAtIG9uZW5kIChmdW5jdGlvbikg aGFuZGxlciBmb3IgZHJhZyBlbmQKKyAgICAgLSBtY29udGV4dCAob2JqZWN0 KSAjb3B0aW9uYWwgY29udGV4dCBmb3IgbW92aW5nIGhhbmRsZXIKKyAgICAg LSBzY29udGV4dCAob2JqZWN0KSAjb3B0aW9uYWwgY29udGV4dCBmb3IgZHJh ZyBzdGFydCBoYW5kbGVyCisgICAgIC0gZWNvbnRleHQgKG9iamVjdCkgI29w dGlvbmFsIGNvbnRleHQgZm9yIGRyYWcgZW5kIGhhbmRsZXIKKyAgICAgKiBB ZGRpdGlvbmFseSBmb2xsb3dpbmcgYGRyYWdgIGV2ZW50cyBhcmUgdHJpZ2dl cmVkOiBgZHJhZy5zdGFydC48aWQ+YCBvbiBzdGFydCwKKyAgICAgKiBgZHJh Zy5lbmQuPGlkPmAgb24gZW5kIGFuZCBgZHJhZy5tb3ZlLjxpZD5gIG9uIGV2 ZXJ5IG1vdmUuIFdoZW4gZWxlbWVudCBpcyBkcmFnZ2VkIG92ZXIgYW5vdGhl ciBlbGVtZW50CisgICAgICogYGRyYWcub3Zlci48aWQ+YCBmaXJlcyBhcyB3 ZWxsLgorICAgICAqCisgICAgICogU3RhcnQgZXZlbnQgYW5kIHN0YXJ0IGhh bmRsZXIgYXJlIGNhbGxlZCBpbiBzcGVjaWZpZWQgY29udGV4dCBvciBpbiBj b250ZXh0IG9mIHRoZSBlbGVtZW50IHdpdGggZm9sbG93aW5nIHBhcmFtZXRl cnM6CisgICAgIG8geCAobnVtYmVyKSB4IHBvc2l0aW9uIG9mIHRoZSBtb3Vz ZQorICAgICBvIHkgKG51bWJlcikgeSBwb3NpdGlvbiBvZiB0aGUgbW91c2UK KyAgICAgbyBldmVudCAob2JqZWN0KSBET00gZXZlbnQgb2JqZWN0CisgICAg ICogTW92ZSBldmVudCBhbmQgbW92ZSBoYW5kbGVyIGFyZSBjYWxsZWQgaW4g c3BlY2lmaWVkIGNvbnRleHQgb3IgaW4gY29udGV4dCBvZiB0aGUgZWxlbWVu dCB3aXRoIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorICAgICBvIGR4IChudW1i ZXIpIHNoaWZ0IGJ5IHggZnJvbSB0aGUgc3RhcnQgcG9pbnQKKyAgICAgbyBk eSAobnVtYmVyKSBzaGlmdCBieSB5IGZyb20gdGhlIHN0YXJ0IHBvaW50Cisg ICAgIG8geCAobnVtYmVyKSB4IHBvc2l0aW9uIG9mIHRoZSBtb3VzZQorICAg ICBvIHkgKG51bWJlcikgeSBwb3NpdGlvbiBvZiB0aGUgbW91c2UKKyAgICAg byBldmVudCAob2JqZWN0KSBET00gZXZlbnQgb2JqZWN0CisgICAgICogRW5k IGV2ZW50IGFuZCBlbmQgaGFuZGxlciBhcmUgY2FsbGVkIGluIHNwZWNpZmll ZCBjb250ZXh0IG9yIGluIGNvbnRleHQgb2YgdGhlIGVsZW1lbnQgd2l0aCBm b2xsb3dpbmcgcGFyYW1ldGVyczoKKyAgICAgbyBldmVudCAob2JqZWN0KSBE T00gZXZlbnQgb2JqZWN0CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAg ICBcKi8KKyAgICBlbHByb3RvLmRyYWcgPSBmdW5jdGlvbiAob25tb3ZlLCBv bnN0YXJ0LCBvbmVuZCwgbW92ZV9zY29wZSwgc3RhcnRfc2NvcGUsIGVuZF9z Y29wZSkgeworICAgICAgICB2YXIgZWwgPSB0aGlzOworICAgICAgICBpZiAo IWFyZ3VtZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHZhciBvcmlnVHJh bnNmb3JtOworICAgICAgICAgICAgcmV0dXJuIGVsLmRyYWcoZnVuY3Rpb24g KGR4LCBkeSkgeworICAgICAgICAgICAgICAgIHRoaXMuYXR0cih7CisgICAg ICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogb3JpZ1RyYW5zZm9ybSArIChv cmlnVHJhbnNmb3JtID8gIlQiIDogInQiKSArIFtkeCwgZHldCisgICAgICAg ICAgICAgICAgfSk7CisgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7Cisg ICAgICAgICAgICAgICAgb3JpZ1RyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3Jt KCkubG9jYWw7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAg ICBmdW5jdGlvbiBzdGFydChlLCB4LCB5KSB7CisgICAgICAgICAgICAoZS5v cmlnaW5hbEV2ZW50IHx8IGUpLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAg ICAgICBlbC5fZHJhZy54ID0geDsKKyAgICAgICAgICAgIGVsLl9kcmFnLnkg PSB5OworICAgICAgICAgICAgZWwuX2RyYWcuaWQgPSBlLmlkZW50aWZpZXI7 CisgICAgICAgICAgICAhZHJhZy5sZW5ndGggJiYgU25hcC5tb3VzZW1vdmUo ZHJhZ01vdmUpLm1vdXNldXAoZHJhZ1VwKTsKKyAgICAgICAgICAgIGRyYWcu cHVzaCh7ZWw6IGVsLCBtb3ZlX3Njb3BlOiBtb3ZlX3Njb3BlLCBzdGFydF9z Y29wZTogc3RhcnRfc2NvcGUsIGVuZF9zY29wZTogZW5kX3Njb3BlfSk7Cisg ICAgICAgICAgICBvbnN0YXJ0ICYmIGV2ZS5vbigic25hcC5kcmFnLnN0YXJ0 LiIgKyBlbC5pZCwgb25zdGFydCk7CisgICAgICAgICAgICBvbm1vdmUgJiYg ZXZlLm9uKCJzbmFwLmRyYWcubW92ZS4iICsgZWwuaWQsIG9ubW92ZSk7Cisg ICAgICAgICAgICBvbmVuZCAmJiBldmUub24oInNuYXAuZHJhZy5lbmQuIiAr IGVsLmlkLCBvbmVuZCk7CisgICAgICAgICAgICBldmUoInNuYXAuZHJhZy5z dGFydC4iICsgZWwuaWQsIHN0YXJ0X3Njb3BlIHx8IG1vdmVfc2NvcGUgfHwg ZWwsIHgsIHksIGUpOworICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIGlu aXQoZSwgeCwgeSkgeworICAgICAgICAgICAgZXZlKCJzbmFwLmRyYWdpbml0 LiIgKyBlbC5pZCwgZWwsIGUsIHgsIHkpOworICAgICAgICB9CisgICAgICAg IGV2ZS5vbigic25hcC5kcmFnaW5pdC4iICsgZWwuaWQsIHN0YXJ0KTsKKyAg ICAgICAgZWwuX2RyYWcgPSB7fTsKKyAgICAgICAgZHJhZ2dhYmxlLnB1c2go e2VsOiBlbCwgc3RhcnQ6IHN0YXJ0LCBpbml0OiBpbml0fSk7CisgICAgICAg IGVsLm1vdXNlZG93bihpbml0KTsKKyAgICAgICAgcmV0dXJuIGVsOworICAg IH07CisgICAgLyoKKyAgICAgKiBFbGVtZW50Lm9uRHJhZ092ZXIKKyAgICAg WyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFNob3J0Y3V0IHRvIGFzc2ln biBldmVudCBoYW5kbGVyIGZvciBgZHJhZy5vdmVyLjxpZD5gIGV2ZW50LCB3 aGVyZSBgaWRgIGlzIHRoZSBlbGVtZW50J3MgYGlkYCAoc2VlIEBFbGVtZW50 LmlkKQorICAgICAtIGYgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciBldmVudCwg Zmlyc3QgYXJndW1lbnQgd291bGQgYmUgdGhlIGVsZW1lbnQgeW91IGFyZSBk cmFnZ2luZyBvdmVyCisgICAgXCovCisgICAgLy8gZWxwcm90by5vbkRyYWdP dmVyID0gZnVuY3Rpb24gKGYpIHsKKyAgICAvLyAgICAgZiA/IGV2ZS5vbigi c25hcC5kcmFnLm92ZXIuIiArIHRoaXMuaWQsIGYpIDogZXZlLnVuYmluZCgi c25hcC5kcmFnLm92ZXIuIiArIHRoaXMuaWQpOworICAgIC8vIH07CisgICAg LypcCisgICAgICogRWxlbWVudC51bmRyYWcKKyAgICAgWyBtZXRob2QgXQor ICAgICAqKgorICAgICAqIFJlbW92ZXMgYWxsIGRyYWcgZXZlbnQgaGFuZGxl cnMgZnJvbSB0aGUgZ2l2ZW4gZWxlbWVudAorICAgIFwqLworICAgIGVscHJv dG8udW5kcmFnID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgaSA9IGRy YWdnYWJsZS5sZW5ndGg7CisgICAgICAgIHdoaWxlIChpLS0pIGlmIChkcmFn Z2FibGVbaV0uZWwgPT0gdGhpcykgeworICAgICAgICAgICAgdGhpcy51bm1v dXNlZG93bihkcmFnZ2FibGVbaV0uaW5pdCk7CisgICAgICAgICAgICBkcmFn Z2FibGUuc3BsaWNlKGksIDEpOworICAgICAgICAgICAgZXZlLnVuYmluZCgi c25hcC5kcmFnLiouIiArIHRoaXMuaWQpOworICAgICAgICAgICAgZXZlLnVu YmluZCgic25hcC5kcmFnaW5pdC4iICsgdGhpcy5pZCk7CisgICAgICAgIH0K KyAgICAgICAgIWRyYWdnYWJsZS5sZW5ndGggJiYgU25hcC51bm1vdXNlbW92 ZShkcmFnTW92ZSkudW5tb3VzZXVwKGRyYWdVcCk7CisgICAgICAgIHJldHVy biB0aGlzOworICAgIH07Cit9KTsKKworLy8gQ29weXJpZ2h0IChjKSAyMDEz IEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5z ZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBu b3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo ZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM aWNlbnNlIGF0CisvLworLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vu c2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFw cGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2Fy ZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp YnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFO VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz cyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8g bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitTbmFwLnBsdWdpbihm dW5jdGlvbiAoU25hcCwgRWxlbWVudCwgUGFwZXIsIGdsb2IpIHsKKyAgICB2 YXIgZWxwcm90byA9IEVsZW1lbnQucHJvdG90eXBlLAorICAgICAgICBwcHJv dG8gPSBQYXBlci5wcm90b3R5cGUsCisgICAgICAgIHJndXJsID0gL15ccyp1 cmxcKCguKylcKS8sCisgICAgICAgIFN0ciA9IFN0cmluZywKKyAgICAgICAg JCA9IFNuYXAuXy4kOworICAgIFNuYXAuZmlsdGVyID0ge307CisgICAgLypc CisgICAgICogUGFwZXIuZmlsdGVyCisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBDcmVhdGVzIGEgYDxmaWx0ZXI+YCBlbGVtZW50CisgICAg ICoqCisgICAgIC0gZmlsc3RyIChzdHJpbmcpIFNWRyBmcmFnbWVudCBvZiBm aWx0ZXIgcHJvdmlkZWQgYXMgYSBzdHJpbmcKKyAgICAgPSAob2JqZWN0KSBA RWxlbWVudAorICAgICAqIE5vdGU6IEl0IGlzIHJlY29tbWVuZGVkIHRvIHVz ZSBmaWx0ZXJzIGVtYmVkZGVkIGludG8gdGhlIHBhZ2UgaW5zaWRlIGFuIGVt cHR5IFNWRyBlbGVtZW50LgorICAgICA+IFVzYWdlCisgICAgIHwgdmFyIGYg PSBwYXBlci5maWx0ZXIoJzxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249 IjIiLz4nKSwKKyAgICAgfCAgICAgYyA9IHBhcGVyLmNpcmNsZSgxMCwgMTAs IDEwKS5hdHRyKHsKKyAgICAgfCAgICAgICAgIGZpbHRlcjogZgorICAgICB8 ICAgICB9KTsKKyAgICBcKi8KKyAgICBwcHJvdG8uZmlsdGVyID0gZnVuY3Rp b24gKGZpbHN0cikgeworICAgICAgICB2YXIgcGFwZXIgPSB0aGlzOworICAg ICAgICBpZiAocGFwZXIudHlwZSAhPSAic3ZnIikgeworICAgICAgICAgICAg cGFwZXIgPSBwYXBlci5wYXBlcjsKKyAgICAgICAgfQorICAgICAgICB2YXIg ZiA9IFNuYXAucGFyc2UoU3RyKGZpbHN0cikpLAorICAgICAgICAgICAgaWQg PSBTbmFwLl8uaWQoKSwKKyAgICAgICAgICAgIHdpZHRoID0gcGFwZXIubm9k ZS5vZmZzZXRXaWR0aCwKKyAgICAgICAgICAgIGhlaWdodCA9IHBhcGVyLm5v ZGUub2Zmc2V0SGVpZ2h0LAorICAgICAgICAgICAgZmlsdGVyID0gJCgiZmls dGVyIik7CisgICAgICAgICQoZmlsdGVyLCB7CisgICAgICAgICAgICBpZDog aWQsCisgICAgICAgICAgICBmaWx0ZXJVbml0czogInVzZXJTcGFjZU9uVXNl IgorICAgICAgICB9KTsKKyAgICAgICAgZmlsdGVyLmFwcGVuZENoaWxkKGYu bm9kZSk7CisgICAgICAgIHBhcGVyLmRlZnMuYXBwZW5kQ2hpbGQoZmlsdGVy KTsKKyAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50KGZpbHRlcik7CisgICAg fTsKKworICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIuZmlsdGVyIiwg ZnVuY3Rpb24gKCkgeworICAgICAgICBldmUuc3RvcCgpOworICAgICAgICB2 YXIgcCA9ICQodGhpcy5ub2RlLCAiZmlsdGVyIik7CisgICAgICAgIGlmIChw KSB7CisgICAgICAgICAgICB2YXIgbWF0Y2ggPSBTdHIocCkubWF0Y2gocmd1 cmwpOworICAgICAgICAgICAgcmV0dXJuIG1hdGNoICYmIFNuYXAuc2VsZWN0 KG1hdGNoWzFdKTsKKyAgICAgICAgfQorICAgIH0pOworICAgIGV2ZS5vbigi c25hcC51dGlsLmF0dHIuZmlsdGVyIiwgZnVuY3Rpb24gKHZhbHVlKSB7Cisg ICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgdmFsdWUu dHlwZSA9PSAiZmlsdGVyIikgeworICAgICAgICAgICAgZXZlLnN0b3AoKTsK KyAgICAgICAgICAgIHZhciBpZCA9IHZhbHVlLm5vZGUuaWQ7CisgICAgICAg ICAgICBpZiAoIWlkKSB7CisgICAgICAgICAgICAgICAgJCh2YWx1ZS5ub2Rl LCB7aWQ6IHZhbHVlLmlkfSk7CisgICAgICAgICAgICAgICAgaWQgPSB2YWx1 ZS5pZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICQodGhpcy5ub2Rl LCB7CisgICAgICAgICAgICAgICAgZmlsdGVyOiBTbmFwLnVybChpZCkKKyAg ICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGlmICghdmFsdWUg fHwgdmFsdWUgPT0gIm5vbmUiKSB7CisgICAgICAgICAgICBldmUuc3RvcCgp OworICAgICAgICAgICAgdGhpcy5ub2RlLnJlbW92ZUF0dHJpYnV0ZSgiZmls dGVyIik7CisgICAgICAgIH0KKyAgICB9KTsKKyAgICAvKlwKKyAgICAgKiBT bmFwLmZpbHRlci5ibHVyCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBSZXR1cm5zIGFuIFNWRyBtYXJrdXAgc3RyaW5nIGZvciB0aGUgYmx1 ciBmaWx0ZXIKKyAgICAgKioKKyAgICAgLSB4IChudW1iZXIpIGFtb3VudCBv ZiBob3Jpem9udGFsIGJsdXIsIGluIHBpeGVscworICAgICAtIHkgKG51bWJl cikgI29wdGlvbmFsIGFtb3VudCBvZiB2ZXJ0aWNhbCBibHVyLCBpbiBwaXhl bHMKKyAgICAgPSAoc3RyaW5nKSBmaWx0ZXIgcmVwcmVzZW50YXRpb24KKyAg ICAgPiBVc2FnZQorICAgICB8IHZhciBmID0gcGFwZXIuZmlsdGVyKFNuYXAu ZmlsdGVyLmJsdXIoNSwgMTApKSwKKyAgICAgfCAgICAgYyA9IHBhcGVyLmNp cmNsZSgxMCwgMTAsIDEwKS5hdHRyKHsKKyAgICAgfCAgICAgICAgIGZpbHRl cjogZgorICAgICB8ICAgICB9KTsKKyAgICBcKi8KKyAgICBTbmFwLmZpbHRl ci5ibHVyID0gZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAgICAgaWYgKHggPT0g bnVsbCkgeworICAgICAgICAgICAgeCA9IDI7CisgICAgICAgIH0KKyAgICAg ICAgdmFyIGRlZiA9IHkgPT0gbnVsbCA/IHggOiBbeCwgeV07CisgICAgICAg IHJldHVybiBTbmFwLmZvcm1hdCgnXDxmZUdhdXNzaWFuQmx1ciBzdGREZXZp YXRpb249IntkZWZ9Ii8+JywgeworICAgICAgICAgICAgZGVmOiBkZWYKKyAg ICAgICAgfSk7CisgICAgfTsKKyAgICBTbmFwLmZpbHRlci5ibHVyLnRvU3Ry aW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcygpOwor ICAgIH07CisgICAgLypcCisgICAgICogU25hcC5maWx0ZXIuc2hhZG93Cisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIGFuIFNW RyBtYXJrdXAgc3RyaW5nIGZvciB0aGUgc2hhZG93IGZpbHRlcgorICAgICAq KgorICAgICAtIGR4IChudW1iZXIpICNvcHRpb25hbCBob3Jpem9udGFsIHNo aWZ0IG9mIHRoZSBzaGFkb3csIGluIHBpeGVscworICAgICAtIGR5IChudW1i ZXIpICNvcHRpb25hbCB2ZXJ0aWNhbCBzaGlmdCBvZiB0aGUgc2hhZG93LCBp biBwaXhlbHMKKyAgICAgLSBibHVyIChudW1iZXIpICNvcHRpb25hbCBhbW91 bnQgb2YgYmx1cgorICAgICAtIGNvbG9yIChzdHJpbmcpICNvcHRpb25hbCBj b2xvciBvZiB0aGUgc2hhZG93CisgICAgIC0gb3BhY2l0eSAobnVtYmVyKSAj b3B0aW9uYWwgYDAuLjFgIG9wYWNpdHkgb2YgdGhlIHNoYWRvdworICAgICAq IG9yCisgICAgIC0gZHggKG51bWJlcikgI29wdGlvbmFsIGhvcml6b250YWwg c2hpZnQgb2YgdGhlIHNoYWRvdywgaW4gcGl4ZWxzCisgICAgIC0gZHkgKG51 bWJlcikgI29wdGlvbmFsIHZlcnRpY2FsIHNoaWZ0IG9mIHRoZSBzaGFkb3cs IGluIHBpeGVscworICAgICAtIGNvbG9yIChzdHJpbmcpICNvcHRpb25hbCBj b2xvciBvZiB0aGUgc2hhZG93CisgICAgIC0gb3BhY2l0eSAobnVtYmVyKSAj b3B0aW9uYWwgYDAuLjFgIG9wYWNpdHkgb2YgdGhlIHNoYWRvdworICAgICAq IHdoaWNoIG1ha2VzIGJsdXIgZGVmYXVsdCB0byBgNGAuIE9yCisgICAgIC0g ZHggKG51bWJlcikgI29wdGlvbmFsIGhvcml6b250YWwgc2hpZnQgb2YgdGhl IHNoYWRvdywgaW4gcGl4ZWxzCisgICAgIC0gZHkgKG51bWJlcikgI29wdGlv bmFsIHZlcnRpY2FsIHNoaWZ0IG9mIHRoZSBzaGFkb3csIGluIHBpeGVscwor ICAgICAtIG9wYWNpdHkgKG51bWJlcikgI29wdGlvbmFsIGAwLi4xYCBvcGFj aXR5IG9mIHRoZSBzaGFkb3cKKyAgICAgPSAoc3RyaW5nKSBmaWx0ZXIgcmVw cmVzZW50YXRpb24KKyAgICAgPiBVc2FnZQorICAgICB8IHZhciBmID0gcGFw ZXIuZmlsdGVyKFNuYXAuZmlsdGVyLnNoYWRvdygwLCAyLCAzKSksCisgICAg IHwgICAgIGMgPSBwYXBlci5jaXJjbGUoMTAsIDEwLCAxMCkuYXR0cih7Cisg ICAgIHwgICAgICAgICBmaWx0ZXI6IGYKKyAgICAgfCAgICAgfSk7CisgICAg XCovCisgICAgU25hcC5maWx0ZXIuc2hhZG93ID0gZnVuY3Rpb24gKGR4LCBk eSwgYmx1ciwgY29sb3IsIG9wYWNpdHkpIHsKKyAgICAgICAgaWYgKHR5cGVv ZiBibHVyID09ICJzdHJpbmciKSB7CisgICAgICAgICAgICBjb2xvciA9IGJs dXI7CisgICAgICAgICAgICBvcGFjaXR5ID0gY29sb3I7CisgICAgICAgICAg ICBibHVyID0gNDsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZW9mIGNv bG9yICE9ICJzdHJpbmciKSB7CisgICAgICAgICAgICBvcGFjaXR5ID0gY29s b3I7CisgICAgICAgICAgICBjb2xvciA9ICIjMDAwIjsKKyAgICAgICAgfQor ICAgICAgICBjb2xvciA9IGNvbG9yIHx8ICIjMDAwIjsKKyAgICAgICAgaWYg KGJsdXIgPT0gbnVsbCkgeworICAgICAgICAgICAgYmx1ciA9IDQ7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKG9wYWNpdHkgPT0gbnVsbCkgeworICAgICAg ICAgICAgb3BhY2l0eSA9IDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGR4 ID09IG51bGwpIHsKKyAgICAgICAgICAgIGR4ID0gMDsKKyAgICAgICAgICAg IGR5ID0gMjsKKyAgICAgICAgfQorICAgICAgICBpZiAoZHkgPT0gbnVsbCkg eworICAgICAgICAgICAgZHkgPSBkeDsKKyAgICAgICAgfQorICAgICAgICBj b2xvciA9IFNuYXAuY29sb3IoY29sb3IpOworICAgICAgICByZXR1cm4gU25h cC5mb3JtYXQoJzxmZUdhdXNzaWFuQmx1ciBpbj0iU291cmNlQWxwaGEiIHN0 ZERldmlhdGlvbj0ie2JsdXJ9Ii8+PGZlT2Zmc2V0IGR4PSJ7ZHh9IiBkeT0i e2R5fSIgcmVzdWx0PSJvZmZzZXRibHVyIi8+PGZlRmxvb2QgZmxvb2QtY29s b3I9Intjb2xvcn0iLz48ZmVDb21wb3NpdGUgaW4yPSJvZmZzZXRibHVyIiBv cGVyYXRvcj0iaW4iLz48ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5jQSB0 eXBlPSJsaW5lYXIiIHNsb3BlPSJ7b3BhY2l0eX0iLz48L2ZlQ29tcG9uZW50 VHJhbnNmZXI+PGZlTWVyZ2U+PGZlTWVyZ2VOb2RlLz48ZmVNZXJnZU5vZGUg aW49IlNvdXJjZUdyYXBoaWMiLz48L2ZlTWVyZ2U+JywgeworICAgICAgICAg ICAgY29sb3I6IGNvbG9yLAorICAgICAgICAgICAgZHg6IGR4LAorICAgICAg ICAgICAgZHk6IGR5LAorICAgICAgICAgICAgYmx1cjogYmx1ciwKKyAgICAg ICAgICAgIG9wYWNpdHk6IG9wYWNpdHkKKyAgICAgICAgfSk7CisgICAgfTsK KyAgICBTbmFwLmZpbHRlci5zaGFkb3cudG9TdHJpbmcgPSBmdW5jdGlvbiAo KSB7CisgICAgICAgIHJldHVybiB0aGlzKCk7CisgICAgfTsKKyAgICAvKlwK KyAgICAgKiBTbmFwLmZpbHRlci5ncmF5c2NhbGUKKyAgICAgWyBtZXRob2Qg XQorICAgICAqKgorICAgICAqIFJldHVybnMgYW4gU1ZHIG1hcmt1cCBzdHJp bmcgZm9yIHRoZSBncmF5c2NhbGUgZmlsdGVyCisgICAgICoqCisgICAgIC0g YW1vdW50IChudW1iZXIpIGFtb3VudCBvZiBmaWx0ZXIgKGAwLi4xYCkKKyAg ICAgPSAoc3RyaW5nKSBmaWx0ZXIgcmVwcmVzZW50YXRpb24KKyAgICBcKi8K KyAgICBTbmFwLmZpbHRlci5ncmF5c2NhbGUgPSBmdW5jdGlvbiAoYW1vdW50 KSB7CisgICAgICAgIGlmIChhbW91bnQgPT0gbnVsbCkgeworICAgICAgICAg ICAgYW1vdW50ID0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU25h cC5mb3JtYXQoJzxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVz PSJ7YX0ge2J9IHtjfSAwIDAge2R9IHtlfSB7Zn0gMCAwIHtnfSB7Yn0ge2h9 IDAgMCAwIDAgMCAxIDAiLz4nLCB7CisgICAgICAgICAgICBhOiAwLjIxMjYg KyAwLjc4NzQgKiAoMSAtIGFtb3VudCksCisgICAgICAgICAgICBiOiAwLjcx NTIgLSAwLjcxNTIgKiAoMSAtIGFtb3VudCksCisgICAgICAgICAgICBjOiAw LjA3MjIgLSAwLjA3MjIgKiAoMSAtIGFtb3VudCksCisgICAgICAgICAgICBk OiAwLjIxMjYgLSAwLjIxMjYgKiAoMSAtIGFtb3VudCksCisgICAgICAgICAg ICBlOiAwLjcxNTIgKyAwLjI4NDggKiAoMSAtIGFtb3VudCksCisgICAgICAg ICAgICBmOiAwLjA3MjIgLSAwLjA3MjIgKiAoMSAtIGFtb3VudCksCisgICAg ICAgICAgICBnOiAwLjIxMjYgLSAwLjIxMjYgKiAoMSAtIGFtb3VudCksCisg ICAgICAgICAgICBoOiAwLjA3MjIgKyAwLjkyNzggKiAoMSAtIGFtb3VudCkK KyAgICAgICAgfSk7CisgICAgfTsKKyAgICBTbmFwLmZpbHRlci5ncmF5c2Nh bGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0 aGlzKCk7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBTbmFwLmZpbHRlci5z ZXBpYQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJu cyBhbiBTVkcgbWFya3VwIHN0cmluZyBmb3IgdGhlIHNlcGlhIGZpbHRlcgor ICAgICAqKgorICAgICAtIGFtb3VudCAobnVtYmVyKSBhbW91bnQgb2YgZmls dGVyIChgMC4uMWApCisgICAgID0gKHN0cmluZykgZmlsdGVyIHJlcHJlc2Vu dGF0aW9uCisgICAgXCovCisgICAgU25hcC5maWx0ZXIuc2VwaWEgPSBmdW5j dGlvbiAoYW1vdW50KSB7CisgICAgICAgIGlmIChhbW91bnQgPT0gbnVsbCkg eworICAgICAgICAgICAgYW1vdW50ID0gMTsKKyAgICAgICAgfQorICAgICAg ICByZXR1cm4gU25hcC5mb3JtYXQoJzxmZUNvbG9yTWF0cml4IHR5cGU9Im1h dHJpeCIgdmFsdWVzPSJ7YX0ge2J9IHtjfSAwIDAge2R9IHtlfSB7Zn0gMCAw IHtnfSB7aH0ge2l9IDAgMCAwIDAgMCAxIDAiLz4nLCB7CisgICAgICAgICAg ICBhOiAwLjM5MyArIDAuNjA3ICogKDEgLSBhbW91bnQpLAorICAgICAgICAg ICAgYjogMC43NjkgLSAwLjc2OSAqICgxIC0gYW1vdW50KSwKKyAgICAgICAg ICAgIGM6IDAuMTg5IC0gMC4xODkgKiAoMSAtIGFtb3VudCksCisgICAgICAg ICAgICBkOiAwLjM0OSAtIDAuMzQ5ICogKDEgLSBhbW91bnQpLAorICAgICAg ICAgICAgZTogMC42ODYgKyAwLjMxNCAqICgxIC0gYW1vdW50KSwKKyAgICAg ICAgICAgIGY6IDAuMTY4IC0gMC4xNjggKiAoMSAtIGFtb3VudCksCisgICAg ICAgICAgICBnOiAwLjI3MiAtIDAuMjcyICogKDEgLSBhbW91bnQpLAorICAg ICAgICAgICAgaDogMC41MzQgLSAwLjUzNCAqICgxIC0gYW1vdW50KSwKKyAg ICAgICAgICAgIGk6IDAuMTMxICsgMC44NjkgKiAoMSAtIGFtb3VudCkKKyAg ICAgICAgfSk7CisgICAgfTsKKyAgICBTbmFwLmZpbHRlci5zZXBpYS50b1N0 cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMoKTsK KyAgICB9OworICAgIC8qXAorICAgICAqIFNuYXAuZmlsdGVyLnNhdHVyYXRl CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIGFu IFNWRyBtYXJrdXAgc3RyaW5nIGZvciB0aGUgc2F0dXJhdGUgZmlsdGVyCisg ICAgICoqCisgICAgIC0gYW1vdW50IChudW1iZXIpIGFtb3VudCBvZiBmaWx0 ZXIgKGAwLi4xYCkKKyAgICAgPSAoc3RyaW5nKSBmaWx0ZXIgcmVwcmVzZW50 YXRpb24KKyAgICBcKi8KKyAgICBTbmFwLmZpbHRlci5zYXR1cmF0ZSA9IGZ1 bmN0aW9uIChhbW91bnQpIHsKKyAgICAgICAgaWYgKGFtb3VudCA9PSBudWxs KSB7CisgICAgICAgICAgICBhbW91bnQgPSAxOworICAgICAgICB9CisgICAg ICAgIHJldHVybiBTbmFwLmZvcm1hdCgnPGZlQ29sb3JNYXRyaXggdHlwZT0i c2F0dXJhdGUiIHZhbHVlcz0ie2Ftb3VudH0iLz4nLCB7CisgICAgICAgICAg ICBhbW91bnQ6IDEgLSBhbW91bnQKKyAgICAgICAgfSk7CisgICAgfTsKKyAg ICBTbmFwLmZpbHRlci5zYXR1cmF0ZS50b1N0cmluZyA9IGZ1bmN0aW9uICgp IHsKKyAgICAgICAgcmV0dXJuIHRoaXMoKTsKKyAgICB9OworICAgIC8qXAor ICAgICAqIFNuYXAuZmlsdGVyLmh1ZVJvdGF0ZQorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogUmV0dXJucyBhbiBTVkcgbWFya3VwIHN0cmlu ZyBmb3IgdGhlIGh1ZS1yb3RhdGUgZmlsdGVyCisgICAgICoqCisgICAgIC0g YW5nbGUgKG51bWJlcikgYW5nbGUgb2Ygcm90YXRpb24KKyAgICAgPSAoc3Ry aW5nKSBmaWx0ZXIgcmVwcmVzZW50YXRpb24KKyAgICBcKi8KKyAgICBTbmFw LmZpbHRlci5odWVSb3RhdGUgPSBmdW5jdGlvbiAoYW5nbGUpIHsKKyAgICAg ICAgYW5nbGUgPSBhbmdsZSB8fCAwOworICAgICAgICByZXR1cm4gU25hcC5m b3JtYXQoJzxmZUNvbG9yTWF0cml4IHR5cGU9Imh1ZVJvdGF0ZSIgdmFsdWVz PSJ7YW5nbGV9Ii8+JywgeworICAgICAgICAgICAgYW5nbGU6IGFuZ2xlCisg ICAgICAgIH0pOworICAgIH07CisgICAgU25hcC5maWx0ZXIuaHVlUm90YXRl LnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhp cygpOworICAgIH07CisgICAgLypcCisgICAgICogU25hcC5maWx0ZXIuaW52 ZXJ0CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5z IGFuIFNWRyBtYXJrdXAgc3RyaW5nIGZvciB0aGUgaW52ZXJ0IGZpbHRlcgor ICAgICAqKgorICAgICAtIGFtb3VudCAobnVtYmVyKSBhbW91bnQgb2YgZmls dGVyIChgMC4uMWApCisgICAgID0gKHN0cmluZykgZmlsdGVyIHJlcHJlc2Vu dGF0aW9uCisgICAgXCovCisgICAgU25hcC5maWx0ZXIuaW52ZXJ0ID0gZnVu Y3Rpb24gKGFtb3VudCkgeworICAgICAgICBpZiAoYW1vdW50ID09IG51bGwp IHsKKyAgICAgICAgICAgIGFtb3VudCA9IDE7CisgICAgICAgIH0KKy8vICAg ICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iLTEg MCAwIDAgMSAgMCAtMSAwIDAgMSAgMCAwIC0xIDAgMSAgMCAwIDAgMSAwIiBj b2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiLz4KKyAgICAgICAg cmV0dXJuIFNuYXAuZm9ybWF0KCc8ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVG dW5jUiB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9InthbW91bnR9IHthbW91 bnQyfSIvPjxmZUZ1bmNHIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0ie2Ft b3VudH0ge2Ftb3VudDJ9Ii8+PGZlRnVuY0IgdHlwZT0idGFibGUiIHRhYmxl VmFsdWVzPSJ7YW1vdW50fSB7YW1vdW50Mn0iLz48L2ZlQ29tcG9uZW50VHJh bnNmZXI+JywgeworICAgICAgICAgICAgYW1vdW50OiBhbW91bnQsCisgICAg ICAgICAgICBhbW91bnQyOiAxIC0gYW1vdW50CisgICAgICAgIH0pOworICAg IH07CisgICAgU25hcC5maWx0ZXIuaW52ZXJ0LnRvU3RyaW5nID0gZnVuY3Rp b24gKCkgeworICAgICAgICByZXR1cm4gdGhpcygpOworICAgIH07CisgICAg LypcCisgICAgICogU25hcC5maWx0ZXIuYnJpZ2h0bmVzcworICAgICBbIG1l dGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyBhbiBTVkcgbWFya3Vw IHN0cmluZyBmb3IgdGhlIGJyaWdodG5lc3MgZmlsdGVyCisgICAgICoqCisg ICAgIC0gYW1vdW50IChudW1iZXIpIGFtb3VudCBvZiBmaWx0ZXIgKGAwLi4x YCkKKyAgICAgPSAoc3RyaW5nKSBmaWx0ZXIgcmVwcmVzZW50YXRpb24KKyAg ICBcKi8KKyAgICBTbmFwLmZpbHRlci5icmlnaHRuZXNzID0gZnVuY3Rpb24g KGFtb3VudCkgeworICAgICAgICBpZiAoYW1vdW50ID09IG51bGwpIHsKKyAg ICAgICAgICAgIGFtb3VudCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0 dXJuIFNuYXAuZm9ybWF0KCc8ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5j UiB0eXBlPSJsaW5lYXIiIHNsb3BlPSJ7YW1vdW50fSIvPjxmZUZ1bmNHIHR5 cGU9ImxpbmVhciIgc2xvcGU9InthbW91bnR9Ii8+PGZlRnVuY0IgdHlwZT0i bGluZWFyIiBzbG9wZT0ie2Ftb3VudH0iLz48L2ZlQ29tcG9uZW50VHJhbnNm ZXI+JywgeworICAgICAgICAgICAgYW1vdW50OiBhbW91bnQKKyAgICAgICAg fSk7CisgICAgfTsKKyAgICBTbmFwLmZpbHRlci5icmlnaHRuZXNzLnRvU3Ry aW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcygpOwor ICAgIH07CisgICAgLypcCisgICAgICogU25hcC5maWx0ZXIuY29udHJhc3QK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgYW4g U1ZHIG1hcmt1cCBzdHJpbmcgZm9yIHRoZSBjb250cmFzdCBmaWx0ZXIKKyAg ICAgKioKKyAgICAgLSBhbW91bnQgKG51bWJlcikgYW1vdW50IG9mIGZpbHRl ciAoYDAuLjFgKQorICAgICA9IChzdHJpbmcpIGZpbHRlciByZXByZXNlbnRh dGlvbgorICAgIFwqLworICAgIFNuYXAuZmlsdGVyLmNvbnRyYXN0ID0gZnVu Y3Rpb24gKGFtb3VudCkgeworICAgICAgICBpZiAoYW1vdW50ID09IG51bGwp IHsKKyAgICAgICAgICAgIGFtb3VudCA9IDE7CisgICAgICAgIH0KKyAgICAg ICAgcmV0dXJuIFNuYXAuZm9ybWF0KCc8ZmVDb21wb25lbnRUcmFuc2Zlcj48 ZmVGdW5jUiB0eXBlPSJsaW5lYXIiIHNsb3BlPSJ7YW1vdW50fSIgaW50ZXJj ZXB0PSJ7YW1vdW50Mn0iLz48ZmVGdW5jRyB0eXBlPSJsaW5lYXIiIHNsb3Bl PSJ7YW1vdW50fSIgaW50ZXJjZXB0PSJ7YW1vdW50Mn0iLz48ZmVGdW5jQiB0 eXBlPSJsaW5lYXIiIHNsb3BlPSJ7YW1vdW50fSIgaW50ZXJjZXB0PSJ7YW1v dW50Mn0iLz48L2ZlQ29tcG9uZW50VHJhbnNmZXI+JywgeworICAgICAgICAg ICAgYW1vdW50OiBhbW91bnQsCisgICAgICAgICAgICBhbW91bnQyOiAuNSAt IGFtb3VudCAvIDIKKyAgICAgICAgfSk7CisgICAgfTsKKyAgICBTbmFwLmZp bHRlci5jb250cmFzdC50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg ICAgcmV0dXJuIHRoaXMoKTsKKyAgICB9OworfSk7CisKKy8vIENvcHlyaWdo dCAoYykgMjAxNCBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJp Z2h0cyByZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBh Y2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8v IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFu Y2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29w eSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vIGh0dHA6Ly93d3cuYXBhY2hl Lm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1 aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGlu Zywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNl IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRI T1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0 aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBm b3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9u cyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorU25h cC5wbHVnaW4oZnVuY3Rpb24gKFNuYXAsIEVsZW1lbnQsIFBhcGVyLCBnbG9i LCBGcmFnbWVudCkgeworICAgIHZhciBib3ggPSBTbmFwLl8uYm94LAorICAg ICAgICBpcyA9IFNuYXAuaXMsCisgICAgICAgIGZpcnN0TGV0dGVyID0gL15b XmEtel0qKFt0Ym1scmNdKS9pLAorICAgICAgICB0b1N0cmluZyA9IGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiAiVCIgKyB0aGlzLmR4ICsg IiwiICsgdGhpcy5keTsKKyAgICAgICAgfTsKKyAgICAvKlwKKyAgICAgKiBF bGVtZW50LmdldEFsaWduCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBSZXR1cm5zIHNoaWZ0IG5lZWRlZCB0byBhbGlnbiB0aGUgZWxlbWVu dCByZWxhdGl2ZWx5IHRvIGdpdmVuIGVsZW1lbnQuCisgICAgICogSWYgbm8g ZWxlbWVudHMgc3BlY2lmaWVkLCBwYXJlbnQgYDxzdmc+YCBjb250YWluZXIg d2lsbCBiZSB1c2VkLgorICAgICAtIGVsIChvYmplY3QpIEBvcHRpb25hbCBh bGlnbm1lbnQgZWxlbWVudAorICAgICAtIHdheSAoc3RyaW5nKSBvbmUgb2Yg c2l4IHZhbHVlczogYCJ0b3AiYCwgYCJtaWRkbGUiYCwgYCJib3R0b20iYCwg YCJsZWZ0ImAsIGAiY2VudGVyImAsIGAicmlnaHQiYAorICAgICA9IChvYmpl Y3R8c3RyaW5nKSBPYmplY3QgaW4gZm9ybWF0IGB7ZHg6ICwgZHk6IH1gIGFs c28gaGFzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIGFzIGEgdHJhbnNmb3Jt YXRpb24gc3RyaW5nCisgICAgID4gVXNhZ2UKKyAgICAgfCBlbC50cmFuc2Zv cm0oZWwuZ2V0QWxpZ24oZWwyLCAidG9wIikpOworICAgICAqIG9yCisgICAg IHwgdmFyIGR5ID0gZWwuZ2V0QWxpZ24oZWwyLCAidG9wIikuZHk7CisgICAg XCovCisgICAgRWxlbWVudC5wcm90b3R5cGUuZ2V0QWxpZ24gPSBmdW5jdGlv biAoZWwsIHdheSkgeworICAgICAgICBpZiAod2F5ID09IG51bGwgJiYgaXMo ZWwsICJzdHJpbmciKSkgeworICAgICAgICAgICAgd2F5ID0gZWw7CisgICAg ICAgICAgICBlbCA9IG51bGw7CisgICAgICAgIH0KKyAgICAgICAgZWwgPSBl bCB8fCB0aGlzLnBhcGVyOworICAgICAgICB2YXIgYnggPSBlbC5nZXRCQm94 ID8gZWwuZ2V0QkJveCgpIDogYm94KGVsKSwKKyAgICAgICAgICAgIGJiID0g dGhpcy5nZXRCQm94KCksCisgICAgICAgICAgICBvdXQgPSB7fTsKKyAgICAg ICAgd2F5ID0gd2F5ICYmIHdheS5tYXRjaChmaXJzdExldHRlcik7CisgICAg ICAgIHdheSA9IHdheSA/IHdheVsxXS50b0xvd2VyQ2FzZSgpIDogImMiOwor ICAgICAgICBzd2l0Y2ggKHdheSkgeworICAgICAgICAgICAgY2FzZSAidCI6 CisgICAgICAgICAgICAgICAgb3V0LmR4ID0gMDsKKyAgICAgICAgICAgICAg ICBvdXQuZHkgPSBieC55IC0gYmIueTsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgY2FzZSAiYiI6CisgICAgICAgICAgICAgICAgb3V0LmR4 ID0gMDsKKyAgICAgICAgICAgICAgICBvdXQuZHkgPSBieC55MiAtIGJiLnky OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICJtIjoK KyAgICAgICAgICAgICAgICBvdXQuZHggPSAwOworICAgICAgICAgICAgICAg IG91dC5keSA9IGJ4LmN5IC0gYmIuY3k7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIGNhc2UgImwiOgorICAgICAgICAgICAgICAgIG91dC5k eCA9IGJ4LnggLSBiYi54OworICAgICAgICAgICAgICAgIG91dC5keSA9IDA7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgInIiOgor ICAgICAgICAgICAgICAgIG91dC5keCA9IGJ4LngyIC0gYmIueDI7CisgICAg ICAgICAgICAgICAgb3V0LmR5ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBvdXQuZHgg PSBieC5jeCAtIGJiLmN4OworICAgICAgICAgICAgICAgIG91dC5keSA9IDA7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBvdXQu dG9TdHJpbmcgPSB0b1N0cmluZzsKKyAgICAgICAgcmV0dXJuIG91dDsKKyAg ICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQuYWxpZ24KKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIEFsaWducyB0aGUgZWxlbWVudCBy ZWxhdGl2ZWx5IHRvIGdpdmVuIG9uZSB2aWEgdHJhbnNmb3JtYXRpb24uCisg ICAgICogSWYgbm8gZWxlbWVudHMgc3BlY2lmaWVkLCBwYXJlbnQgYDxzdmc+ YCBjb250YWluZXIgd2lsbCBiZSB1c2VkLgorICAgICAtIGVsIChvYmplY3Qp IEBvcHRpb25hbCBhbGlnbm1lbnQgZWxlbWVudAorICAgICAtIHdheSAoc3Ry aW5nKSBvbmUgb2Ygc2l4IHZhbHVlczogYCJ0b3AiYCwgYCJtaWRkbGUiYCwg YCJib3R0b20iYCwgYCJsZWZ0ImAsIGAiY2VudGVyImAsIGAicmlnaHQiYAor ICAgICA9IChvYmplY3QpIHRoaXMgZWxlbWVudAorICAgICA+IFVzYWdlCisg ICAgIHwgZWwuYWxpZ24oZWwyLCAidG9wIik7CisgICAgICogb3IKKyAgICAg fCBlbC5hbGlnbigibWlkZGxlIik7CisgICAgXCovCisgICAgRWxlbWVudC5w cm90b3R5cGUuYWxpZ24gPSBmdW5jdGlvbiAoZWwsIHdheSkgeworICAgICAg ICByZXR1cm4gdGhpcy50cmFuc2Zvcm0oIi4uLiIgKyB0aGlzLmdldEFsaWdu KGVsLCB3YXkpKTsKKyAgICB9OworfSk7CisKK3JldHVybiBTbmFwOworfSkp OwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy90ZW1wbGF0ZXMvZXhw bGFpbi9qcy9leHBsYWluLmpzIGIvd2ViL3BnYWRtaW4vbWlzYy90ZW1wbGF0 ZXMvZXhwbGFpbi9qcy9leHBsYWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAuLmJlZGM1MWUKLS0tIC9kZXYvbnVsbAorKysgYi93 ZWIvcGdhZG1pbi9taXNjL3RlbXBsYXRlcy9leHBsYWluL2pzL2V4cGxhaW4u anMKQEAgLTAsMCArMSw2ODggQEAKK2RlZmluZSAoCisgICdwZ2FkbWluLm1p c2MuZXhwbGFpbicsCisgIFsnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAndW5k ZXJzY29yZS5zdHJpbmcnLCAncGdhZG1pbicsICdiYWNrYm9uZScsICdzbmFw LnN2ZyddLAorICBmdW5jdGlvbigkLCBfLCBTLCBwZ0FkbWluLCBCYWNrYm9u ZSwgU25hcCkgeworCitwZ0FkbWluID0gcGdBZG1pbiB8fCB3aW5kb3cucGdB ZG1pbiB8fCB7fTsKK3ZhciBwZ0V4cGxhaW4gPSBwZ0FkbWluLkV4cGxhaW47 CisKKy8vIFNuYXAuc3ZnIHBsdWctaW4gdG8gd3JpdGUgbXVsdGl0ZXh0IGFz IGltYWdlIG5hbWUKK1NuYXAucGx1Z2luKGZ1bmN0aW9uIChTbmFwLCBFbGVt ZW50LCBQYXBlciwgZ2xvYikgeworICBQYXBlci5wcm90b3R5cGUubXVsdGl0 ZXh0ID0gZnVuY3Rpb24gKHgsIHksIHR4dCwgbWF4X3dpZHRoLCBhdHRyaWJ1 dGVzKSB7CisgICAgdmFyIHN2ZyA9IFNuYXAoKSwKKyAgICAgICAgYWJjID0g ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFS U1RVVldYWVoiLAorICAgICAgICBpc1dvcmRCcm9rZW4gPSBmYWxzZSwKKyAg ICAgICAgdGVtcCA9IHN2Zy50ZXh0KDAsIDAsIGFiYyk7CisKKyAgICB0ZW1w LmF0dHIoYXR0cmlidXRlcyk7CisKKyAgICAvKgorICAgICAqIEZpbmQgbGV0 dGVyIHdpZHRoIGluIHBpeGVscyBhbmQKKyAgICAgKiBpbmRleCBmcm9tIHdo ZXJlIHRoZSB0ZXh0IHNob3VsZCBiZSBicm9rZW4KKyAgICAgKi8KKyAgICB2 YXIgbGV0dGVyX3dpZHRoID0gdGVtcC5nZXRCQm94KCkud2lkdGggLyBhYmMu bGVuZ3RoLAorICAgICAgICB3b3JkX2JyZWFrX2luZGV4ID0gTWF0aC5yb3Vu ZCgobWF4X3dpZHRoIC8gbGV0dGVyX3dpZHRoKSkgLSAxOworCisgICAgc3Zn LnJlbW92ZSgpOworCisgICAgdmFyIHdvcmRzID0gdHh0LnNwbGl0KCIgIiks CisgICAgICAgIHdpZHRoX3NvX2ZhciA9IDAsCisgICAgICAgIGxpbmVzPVtd LCBjdXJyX2xpbmUgPSAnJywKKyAgICAgICAgLyoKKyAgICAgICAgICogRnVu Y3Rpb24gdG8gZGl2aWRlIHN0cmluZyBpbnRvIG11bHRpcGxlIGxpbmVzCisg ICAgICAgICAqIGFuZCBzdG9yZSB0aGVtIGluIGFuIGFycmF5IGlmIGl0IHNp emUgY3Jvc3NlcworICAgICAgICAgKiB0aGUgbWF4LXdpZHRoIGJvdW5kYXJ5 LgorICAgICAgICAgKi8KKyAgICAgICAgc3BsaXRUZXh0SW5NdWx0aUxpbmUg PSBmdW5jdGlvbihsZWFkaW5nLCBzb19mYXIsIGxpbmUpIHsKKyAgICAgICAg ICB2YXIgbCA9IGxpbmUubGVuZ3RoLAorICAgICAgICAgICAgICByZXMgPSBb XTsKKworICAgICAgICAgIGlmIChsID09IDApCisgICAgICAgICAgICByZXR1 cm4gcmVzOworCisgICAgICAgICAgaWYgKHNvX2ZhciAmJiAoc29fZmFyICsg KGwgKiBsZXR0ZXJfd2lkdGgpID4gbWF4X3dpZHRoKSkgeworICAgICAgICAg ICAgcmVzLnB1c2gobGVhZGluZyk7CisgICAgICAgICAgICByZXMgPSByZXMu Y29uY2F0KHNwbGl0VGV4dEluTXVsdGlMaW5lKCcnLCAwLCBsaW5lKSk7Cisg ICAgICAgICAgfSBlbHNlIGlmIChzb19mYXIpIHsKKyAgICAgICAgICAgIHJl cy5wdXNoKGxlYWRpbmcgKyAnICcgKyBsaW5lKTsKKyAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgaWYgKGxlYWRpbmcpCisgICAgICAgICAgICAg ICAgcmVzLnB1c2gobGVhZGluZyk7CisgICAgICAgICAgICBpZiAobGluZS5s ZW5ndGggPiB3b3JkX2JyZWFrX2luZGV4ICsgMSkKKyAgICAgICAgICAgICAg ICByZXMucHVzaChsaW5lLnNsaWNlKDAsIHdvcmRfYnJlYWtfaW5kZXgpICsg Jy0nKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXMu cHVzaChsaW5lKTsKKyAgICAgICAgICAgIHJlcyA9IHJlcy5jb25jYXQoc3Bs aXRUZXh0SW5NdWx0aUxpbmUoJycsIDAsIGxpbmUuc2xpY2Uod29yZF9icmVh a19pbmRleCkpKTsKKyAgICAgICAgICB9CisKKyAgICAgICAgICByZXR1cm4g cmVzOworICAgICAgICB9OworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB3 b3Jkcy5sZW5ndGg7IGkrKykgeworICAgICAgdmFyIHRtcEFyciA9IHNwbGl0 VGV4dEluTXVsdGlMaW5lKAorICAgICAgICAgICAgY3Vycl9saW5lLCB3aWR0 aF9zb19mYXIsIHdvcmRzW2ldCisgICAgICAgICAgKTsKKworICAgICAgaWYg KGN1cnJfbGluZSkgeworICAgICAgICBsaW5lcyA9IGxpbmVzLnNsaWNlKDAs IGxpbmVzLmxlbmd0aCAtIDIpOworICAgICAgfQorICAgICAgbGluZXMgPSBs aW5lcy5jb25jYXQodG1wQXJyKTsKKyAgICAgIGN1cnJfbGluZSA9IGxpbmVz W2xpbmVzLmxlbmd0aCAtIDFdOworICAgICAgd2lkdGhfc29fZmFyID0gKGN1 cnJfbGluZS5sZW5ndGggKiBsZXR0ZXJfd2lkdGgpOworICAgIH0KKworICAg IC8vIENyZWF0ZSBtdWx0aXBsZSB0c3BhbiBmb3IgZWFjaCBzdHJpbmcgaW4g YXJyYXkKKyAgICB2YXIgdCA9IHRoaXMudGV4dCh4LHksbGluZXMpLmF0dHIo YXR0cmlidXRlcyk7CisgICAgdC5zZWxlY3RBbGwoInRzcGFuOm50aC1jaGls ZChuKzIpIikuYXR0cih7CisgICAgICBkeTogIjEuMmVtIiwKKyAgICAgIHg6 IHgKKyAgICB9KTsKKyAgICByZXR1cm4gdDsKKyAgfTsKK30pOworCitpZiAo cGdBZG1pbi5FeHBsYWluKQorICAgIHJldHVybiBwZ0FkbWluLkV4cGxhaW47 CisKK3ZhciBwZ0V4cGxhaW4gPSBwZ0FkbWluLkV4cGxhaW4gPSB7CisgICAv LyBQcmVmaXggcGF0aCB3aGVyZSBpbWFnZXMgYXJlIHN0b3JlZAorICAgcHJl Zml4OiAne3sgdXJsX2ZvcignbWlzYy5zdGF0aWMnLCBmaWxlbmFtZT0nZXhw bGFpbi9pbWcnKSB9fS8nCit9OworCisvKgorICogQSBtYXAgd2hpY2ggaXMg dXNlZCB0byBmZXRjaCB0aGUgaW1hZ2UgdG8gYmUgZHJhd24gYW5kCisgKiB0 ZXh0IHdoaWNoIHdpbGwgYXBwZWFyIGJlbG93IGl0CisgKi8KK3ZhciBpbWFn ZU1hcHBlciA9IHsKKyAgICAiQWdncmVnYXRlIiA6IHsKKyAgICAgICAgImlt YWdlIjoiZXhfYWdncmVnYXRlLnBuZyIsICJpbWFnZV90ZXh0IjoiQWdncmVn YXRlIgorICAgIH0sCisgICAgJ0FwcGVuZCcgOiB7CisgICAgICAgICJpbWFn ZSI6ImV4X2FwcGVuZC5wbmciLCJpbWFnZV90ZXh0IjoiQXBwZW5kIgorICAg IH0sCisgICAgIkJpdG1hcCBJbmRleCBTY2FuIiA6IGZ1bmN0aW9uKGRhdGEp IHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICJpbWFnZSI6ImV4 X2JtcF9pbmRleC5wbmciLCAiaW1hZ2VfdGV4dCI6ZGF0YVsnSW5kZXggTmFt ZSddCisgICAgICAgIH07CisgICAgfSwKKyAgICAiQml0bWFwIEhlYXAgU2Nh biIgOiBmdW5jdGlvbihkYXRhKSB7CisgIHJldHVybiB7ImltYWdlIjoiZXhf Ym1wX2hlYXAucG5nIiwiaW1hZ2VfdGV4dCI6ZGF0YVsnUmVsYXRpb24gTmFt ZSddfTsKK30sCisiQml0bWFwQW5kIiA6IHsiaW1hZ2UiOiJleF9ibXBfYW5k LnBuZyIsImltYWdlX3RleHQiOiJCaXRtYXAgQU5EIn0sCisiQml0bWFwT3Ii IDogeyJpbWFnZSI6ImV4X2JtcF9vci5wbmciLCJpbWFnZV90ZXh0IjoiQml0 bWFwIE9SIn0sCisiQ1RFIFNjYW4iIDogeyJpbWFnZSI6ImV4X2N0ZV9zY2Fu LnBuZyIsImltYWdlX3RleHQiOiJDVEUgU2NhbiJ9LAorIkZ1bmN0aW9uIFNj YW4iIDogeyJpbWFnZSI6ImV4X3Jlc3VsdC5wbmciLCJpbWFnZV90ZXh0Ijoi RnVuY3Rpb24gU2NhbiJ9LAorIkZvcmVpZ24gU2NhbiIgOiB7ImltYWdlIjoi ZXhfZm9yZWlnbl9zY2FuLnBuZyIsImltYWdlX3RleHQiOiJGb3JlaWduIFNj YW4ifSwKKyJHYXRoZXIiIDogeyJpbWFnZSI6ImV4X2dhdGhlcl9tb3Rpb24u cG5nIiwiaW1hZ2VfdGV4dCI6IkdhdGhlciJ9LAorIkdyb3VwIiA6IHsiaW1h Z2UiOiJleF9ncm91cC5wbmciLCJpbWFnZV90ZXh0IjoiR3JvdXAifSwKKyJH cm91cEFnZ3JlZ2F0ZSI6IHsiaW1hZ2UiOiJleF9hZ2dyZWdhdGUucG5nIiwi aW1hZ2VfdGV4dCI6Ikdyb3VwIEFnZ3JlZ2F0ZSJ9LAorIkhhc2giIDogeyJp bWFnZSI6ImV4X2hhc2gucG5nIiwiaW1hZ2VfdGV4dCI6Ikhhc2gifSwKKyJI YXNoIEpvaW4iOiBmdW5jdGlvbihkYXRhKSB7CisgIGlmICghZGF0YVsnSm9p biBUeXBlJ10pIHJldHVybiB7ImltYWdlIjoiZXhfam9pbi5wbmciLCJpbWFn ZV90ZXh0IjoiSm9pbiJ9OworICBzd2l0Y2goZGF0YVsnSm9pbiBUeXBlJ10p IHsKKyAgICBjYXNlICdBbnRpJzogcmV0dXJuIHsiaW1hZ2UiOiJleF9oYXNo X2FudGlfam9pbi5wbmciLCJpbWFnZV90ZXh0IjoiSGFzaCBBbnRpIEpvaW4i fTsKKyAgICBjYXNlICdTZW1pJzogcmV0dXJuIHsiaW1hZ2UiOiJleF9oYXNo X3NlbWlfam9pbi5wbmciLCJpbWFnZV90ZXh0IjoiSGFzaCBTZW1pIEpvaW4i fTsKKyAgICBkZWZhdWx0OiByZXR1cm4geyJpbWFnZSI6ImV4X2hhc2gucG5n IiwiaW1hZ2VfdGV4dCI6U3RyaW5nKCJIYXNoICIgKyBkYXRhWydKb2luIFR5 cGUnXSArICIgSm9pbiIgKX07CisgIH0KK30sCisiSGFzaEFnZ3JlZ2F0ZSIg OiB7ImltYWdlIjoiZXhfYWdncmVnYXRlLnBuZyIsImltYWdlX3RleHQiOiJI YXNoIEFnZ3JlZ2F0ZSJ9LAorIkluZGV4IE9ubHkgU2NhbiIgOiBmdW5jdGlv bihkYXRhKSB7CisgIHJldHVybiB7ImltYWdlIjoiZXhfaW5kZXhfb25seV9z Y2FuLnBuZyIsImltYWdlX3RleHQiOmRhdGFbJ0luZGV4IE5hbWUnXX07Cit9 LAorIkluZGV4IFNjYW4iIDogZnVuY3Rpb24oZGF0YSkgeworICByZXR1cm4g eyJpbWFnZSI6ImV4X2luZGV4X3NjYW4ucG5nIiwiaW1hZ2VfdGV4dCI6ZGF0 YVsnSW5kZXggTmFtZSddfTsKK30sCisiSW5kZXggU2NhbiBCYWNrd29yZCIg OiB7ImltYWdlIjoiZXhfaW5kZXhfc2Nhbi5wbmciLCJpbWFnZV90ZXh0Ijoi SW5kZXggQmFja3dhcmQgU2NhbiJ9LAorIkxpbWl0IiA6IHsiaW1hZ2UiOiJl eF9saW1pdC5wbmciLCJpbWFnZV90ZXh0IjoiTGltaXQifSwKKyJMb2NrUm93 cyIgOiB7ImltYWdlIjoiZXhfbG9ja19yb3dzLnBuZyIsImltYWdlX3RleHQi OiJMb2NrIFJvd3MifSwKKyJNYXRlcmlhbGl6ZSIgOiB7ImltYWdlIjoiZXhf bWF0ZXJpYWxpemUucG5nIiwiaW1hZ2VfdGV4dCI6Ik1hdGVyaWFsaXplIn0s CisiTWVyZ2UgQXBwZW5kIjogeyJpbWFnZSI6ImV4X21lcmdlX2FwcGVuZC5w bmciLCJpbWFnZV90ZXh0IjoiTWVyZ2UgQXBwZW5kIn0sCisiTWVyZ2UgSm9p biI6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgc3dpdGNoKGRhdGFbJ0pvaW4gVHlw ZSddKSB7CisgICAgY2FzZSAnQW50aSc6IHJldHVybiB7ImltYWdlIjoiZXhf bWVyZ2VfYW50aV9qb2luLnBuZyIsImltYWdlX3RleHQiOiJNZXJnZSBBbnRp IEpvaW4ifTsKKyAgICBjYXNlICdTZW1pJzogcmV0dXJuIHsiaW1hZ2UiOiJl eF9tZXJnZV9zZW1pX2pvaW4ucG5nIiwiaW1hZ2VfdGV4dCI6Ik1lcmdlIFNl bWkgSm9pbiJ9OworICAgIGRlZmF1bHQ6IHJldHVybiB7ImltYWdlIjoiZXhf bWVyZ2UucG5nIiwiaW1hZ2VfdGV4dCI6U3RyaW5nKCJNZXJnZSAiICsgZGF0 YVsnSm9pbiBUeXBlJ10gKyAiIEpvaW4iICl9OworICB9Cit9LAorIk1vZGlm eVRhYmxlIiA6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgc3dpdGNoIChkYXRhWydP cGVyYXRvbiddKSB7CisgICAgY2FzZSAiaW5zZXJ0IjogcmV0dXJuIHsgImlt YWdlIjoiZXhfaW5zZXJ0LnBuZyIsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgImltYWdlX3RleHQiOiJJbnNlcnQiCisgICAgICAgICAgICAgICAg ICAgICAgICAgICB9OworICAgIGNhc2UgInVwZGF0ZSI6IHJldHVybiB7Imlt YWdlIjoiZXhfdXBkYXRlLnBuZyIsImltYWdlX3RleHQiOiJVcGRhdGUifTsK KyAgICBjYXNlICJEZWxldGUiOiByZXR1cm4geyJpbWFnZSI6ImV4X2RlbGV0 ZS5wbmciLCJpbWFnZV90ZXh0IjoiRGVsZXRlIn07CisgIH0KK30sCisnTmVz dGVkIExvb3AnIDogZnVuY3Rpb24oZGF0YSkgeworICBzd2l0Y2goZGF0YVsn Sm9pbiBUeXBlJ10pIHsKKyAgICBjYXNlICdBbnRpJzogcmV0dXJuIHsiaW1h Z2UiOiJleF9uZXN0ZWRfbG9vcF9hbnRpX2pvaW4ucG5nIiwiaW1hZ2VfdGV4 dCI6Ik5lc3RlZCBMb29wIEFudGkgSm9pbiJ9OworICAgIGNhc2UgJ1NlbWkn OiByZXR1cm4geyJpbWFnZSI6ImV4X25lc3RlZF9sb29wX3NlbWlfam9pbi5w bmciLCJpbWFnZV90ZXh0IjoiTmVzdGVkIExvb3AgU2VtaSBKb2luIn07Cisg ICAgZGVmYXVsdDogcmV0dXJuIHsiaW1hZ2UiOiJleF9uZXN0ZWQucG5nIiwi aW1hZ2VfdGV4dCI6Ik5lc3RlZCBMb29wICIgKyBkYXRhWydKb2luIFR5cGUn XSArICIgSm9pbiJ9OworICB9Cit9LAorIlJlY3Vyc2l2ZSBVbmlvbiIgOiB7 ImltYWdlIjoiZXhfcmVjdXJzaXZlX3VuaW9uLnBuZyIsImltYWdlX3RleHQi OiJSZWN1cnNpdmUgVW5pb24ifSwKKyJSZXN1bHQiIDogeyJpbWFnZSI6ImV4 X3Jlc3VsdC5wbmciLCJpbWFnZV90ZXh0IjoiUmVzdWx0In0sCisiU2FtcGxl IFNjYW4iIDogeyJpbWFnZSI6ImV4X3NjYW4ucG5nIiwiaW1hZ2VfdGV4dCI6 IlNhbXBsZSBTY2FuIn0sCisiU2NhbiIgOiB7ImltYWdlIjoiZXhfc2Nhbi5w bmciLCJpbWFnZV90ZXh0IjoiU2NhbiJ9LAorIlNlZWsiIDogeyJpbWFnZSI6 ImV4X3NlZWsucG5nIiwiaW1hZ2VfdGV4dCI6IlNlZWsifSwKKyJTZXRPcCIg OiBmdW5jdGlvbihkYXRhKSB7CisgIHZhciBzdHJhdGVneSA9IGRhdGFbJ1N0 cmF0ZWd5J10sCisgICAgICBjb21tYW5kID0gZGF0YVsnQ29tbWFuZCddOwor CisgIGlmKHN0cmF0ZWd5ID09ICJIYXNoZWQiKSB7CisgICAgaWYoY29tbWFu ZC5zdGFydHNXaXRoKCJJbnRlcnNlY3QiKSkgeworICAgICAgaWYoY29tbWFu ZCA9PSAiSW50ZXJzZWN0IEFsbCIpCisgICAgICAgIHJldHVybiB7ImltYWdl IjoiZXhfaGFzaF9zZXRvcF9pbnRlcnNlY3RfYWxsLnBuZyIsImltYWdlX3Rl eHQiOiJIYXNoZWQgSW50ZXJzZWN0IEFsbCJ9OworICAgICAgcmV0dXJuIHsi aW1hZ2UiOiJleF9oYXNoX3NldG9wX2ludGVyc2VjdC5wbmciLCJpbWFnZV90 ZXh0IjoiSGFzaGVkIEludGVyc2VjdCJ9OworICAgIH0KKyAgICBlbHNlIGlm IChjb21tYW5kLnN0YXJ0c1dpdGgoIkV4Y2VwdCIpKSB7CisgICAgICBpZihj b21tYW5kID09ICJFeGNlcHQgQWxsIikKKyAgICAgICAgcmV0dXJuIHsiaW1h Z2UiOiJleF9oYXNoX3NldG9wX2V4Y2VwdF9hbGwucG5nIiwiaW1hZ2VfdGV4 dCI6Ikhhc2hlZCBFeGNlcHQgQWxsIn07CisgICAgICByZXR1cm4geyJpbWFn ZSI6ImV4X2hhc2hfc2V0b3BfZXhjZXB0LnBuZyIsImltYWdlX3RleHQiOiJI YXNoIEV4Y2VwdCJ9OworICAgIH0KKyAgICByZXR1cm4geyJpbWFnZSI6ImV4 X2hhc2hfc2V0b3BfdW5rbm93bi5wbmciLCJpbWFnZV90ZXh0IjoiSGFzaGVk IFNldE9wIFVua25vd24ifTsKKyAgfQorICByZXR1cm4geyJpbWFnZSI6ImV4 X3NldG9wLnBuZyIsImltYWdlX3RleHQiOiJTZXRPcCJ9OworfSwKKyJTZXEg U2NhbiI6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgcmV0dXJuIHsiaW1hZ2UiOiJl eF9zY2FuLnBuZyIsImltYWdlX3RleHQiOmRhdGFbJ1JlbGF0aW9uIE5hbWUn XX07Cit9LAorIlN1YnF1ZXJ5IFNjYW4iIDogeyJpbWFnZSI6ImV4X3N1YnBs YW4ucG5nIiwiaW1hZ2VfdGV4dCI6IlN1YlF1ZXJ5IFNjYW4ifSwKKyJTb3J0 IiA6IHsiaW1hZ2UiOiJleF9zb3J0LnBuZyIsImltYWdlX3RleHQiOiJTb3J0 In0sCisiVGlkIFNjYW4iIDogeyJpbWFnZSI6ImV4X3RpZF9zY2FuLnBuZyIs ImltYWdlX3RleHQiOiJUaWQgU2NhbiJ9LAorIlVuaXF1ZSIgOiB7ImltYWdl IjoiZXhfdW5pcXVlLnBuZyIsImltYWdlX3RleHQiOiJVbmlxdWUifSwKKyJW YWx1ZXMgU2NhbiIgOiB7ImltYWdlIjoiZXhfdmFsdWVzX3NjYW4ucG5nIiwi aW1hZ2VfdGV4dCI6IlZhbHVlcyBTY2FuIn0sCisiV2luZG93QWdnIiA6IHsi aW1hZ2UiOiJleF93aW5kb3dfYWdncmVnYXRlLnBuZyIsImltYWdlX3RleHQi OiJXaW5kb3cgQWdncmVnYXRlIn0sCisiV29ya1RhYmxlIFNjYW4iIDogeyJp bWFnZSI6ImV4X3dvcmt0YWJsZV9zY2FuLnBuZyIsImltYWdlX3RleHQiOiJX b3JrVGFibGUgU2NhbiJ9LAorIlVuZGVmaW5lZCIgOiB7ImltYWdlIjoiZXhf dW5rbm93bi5wbmciLCJpbWFnZV90ZXh0IjoiVW5kZWZpbmVkIn0sCit9CisK Ky8vIFNvbWUgcHJlZGVmaW5lZCBjb25zdGFudHMgdXNlZCB0byBjYWxjdWxh dGUgaW1hZ2UgbG9jYXRpb24gYW5kIGl0cyBib3JkZXIKK3ZhciBwV0lEVEgg PSBwSEVJR0hUID0gMTAwLgorICAgIElNQUdFX1dJRFRIID0gSU1BR0VfSEVJ R0hUID0gNTA7Cit2YXIgb2Zmc2V0WCA9IDIwMCwKKyAgICBvZmZzZXRZID0g NjA7Cit2YXIgQVJST1dfV0lEVEggPSAxMCwKKyAgICBBUlJPV19IRUlHSFQg PSAxMCwKKyAgICBERUZBVUxUX0FSUk9XX1NJWkUgPSAyOwordmFyIFRYVF9B TExJR04gPSA1LAorICAgIFRYVF9TSVpFID0gIjE1cHgiOwordmFyIFRPVEFM X1dJRFRIID0gdW5kZWZpbmVkLAorICAgIFRPVEFMX0hFSUdIVCA9IHVuZGVm aW5lZDsKK3ZhciB4TWFyZ2luID0gMjUsCisgICAgeU1hcmdpbiA9IDI1Owor dmFyIE1JTl9aT09NX0ZBQ1RPUiA9IDAuMDEsCisgICAgTUFYX1pPT01fRkFD VE9SID0gMiwKKyAgICBJTklUX1pPT01fRkFDVE9SID0gMTsKKyAgICBaT09N X1JBVElPID0gMC4wNTsKKworCisvLyBCYWNrYm9uZSBtb2RlbCBmb3IgZWFj aCBwbGFuIHByb3BlcnR5IG9mIGlucHV0IEpTT04gb2JqZWN0Cit2YXIgUGxh bk1vZGVsID0gQmFja2JvbmUuTW9kZWwuZXh0ZW5kKHsKKyAgICBkZWZhdWx0 czogeworICAgICAgICAiUGxhbnMiOiBbXSwKKyAgICAgICAgbGV2ZWw6IFtd LAorICAgICAgICAiaW1hZ2UiOiB1bmRlZmluZWQsCisgICAgICAgICJpbWFn ZV90ZXh0IjogdW5kZWZpbmVkLAorICAgICAgICB4cG9zOiB1bmRlZmluZWQs CisgICAgICAgIHlwb3M6IHVuZGVmaW5lZCwKKyAgICAgICAgd2lkdGg6IHBX SURUSCwKKyAgICAgICAgaGVpZ2h0OiBwSEVJR0hUCisgICAgfSwKKyAgICBw YXJzZTogZnVuY3Rpb24oZGF0YSkgeworICAgICAgICB2YXIgaWR4ID0gMSwK KyAgICAgICAgICAgIGx2bCA9IGRhdGEubGV2ZWwgPSBkYXRhLmxldmVsIHx8 IFtpZHhdLAorICAgICAgICAgICAgcGxhbnMgPSBbXSwKKyAgICAgICAgICAg IG5vZGVfdHlwZSA9IGRhdGFbJ05vZGUgVHlwZSddLAorICAgICAgICAgICAg Ly8gQ2FsY3VsYXRpbmcgcmVsYXRpdmUgeHBvcyBvZiBjdXJyZW50IG5vZGUg ZnJvbSB0b3Agbm9kZQorICAgICAgICAgICAgeHBvcyA9IGRhdGEueHBvcyA9 IGRhdGEueHBvcyAtIHBXSURUSCwKKyAgICAgICAgICAgIC8vIENhbGN1bGF0 aW5nIHJlbGF0aXZlIHlwb3Mgb2YgY3VycmVudCBub2RlIGZyb20gdG9wIG5v ZGUKKyAgICAgICAgICAgIHlwb3MgPSBkYXRhLnlwb3MsCisgICAgICAgICAg ICBtYXhDaGlsZFdpZHRoID0gMDsKKworICAgICAgICBkYXRhWyd3aWR0aCdd ID0gcFdJRFRIOworICAgICAgICBkYXRhWydoZWlnaHQnXSA9IHBIRUlHSFQ7 CisKKyAgICAgICAgLyoKKyAgICAgICAgICogY2FsY3VsYXRpbmcgeHBvcywg eXBvcywgd2lkdGggYW5kIGhlaWdodCBpZiBjdXJyZW50IG5vZGUgaXMgYSBz dWJwbGFuCisgICAgICAgICAqLworICAgICAgICBpZiAoZGF0YVsnUGFyZW50 IFJlbGF0aW9uc2hpcCddID09PSAiU3ViUGxhbiIpIHsKKyAgICAgICAgICAg IGRhdGFbJ3dpZHRoJ10gKz0gKHhNYXJnaW4gKiAyKSArICh4TWFyZ2luIC8g Mik7CisgICAgICAgICAgICBkYXRhWydoZWlnaHQnXSArPSAoeU1hcmdpbiAq IDIpOworICAgICAgICAgICAgZGF0YVsneXBvcyddICs9IHlNYXJnaW47Cisg ICAgICAgICAgICB4cG9zIC09IHhNYXJnaW47CisgICAgICAgICAgICB5cG9z ICs9IHlNYXJnaW47CisgICAgICAgIH0KKworICAgICAgICBpZihub2RlX3R5 cGUuc3RhcnRzV2l0aCgiKHNsaWNlIikpCisgICAgICAgICAgICBub2RlX3R5 cGUgPSBub2RlX3R5cGUuc3Vic3RyaW5nKDAsNyk7CisKKyAgICAgICAgLy8g R2V0IHRoZSBpbWFnZSBpbmZvcm1hdGlvbiBmb3IgY3VycmVudCBub2RlCisg ICAgICAgIHZhciBtYXBwZXJPYmogPSAoXy5pc0Z1bmN0aW9uKGltYWdlTWFw cGVyW25vZGVfdHlwZV0pICYmCisgICAgICAgICAgICAgICAgaW1hZ2VNYXBw ZXJbbm9kZV90eXBlXS5hcHBseSh1bmRlZmluZWQsIFtkYXRhXSkpIHx8Cisg ICAgICAgICAgICAgICAgaW1hZ2VNYXBwZXJbbm9kZV90eXBlXSB8fCAnVW5k ZWZpbmVkJzsKKworICAgICAgICBkYXRhWyJpbWFnZSJdID0gbWFwcGVyT2Jq WyJpbWFnZSJdOworICAgICAgICBkYXRhWyJpbWFnZV90ZXh0Il0gPSBtYXBw ZXJPYmpbImltYWdlX3RleHQiXTsKKworICAgICAgICAvLyBTdGFydCBjYWxj dWxhdGluZyB4cG9zLCB5cG9zLCB3aWR0aCBhbmQgaGVpZ2h0IGZvciBjaGls ZCBwbGFucyBpZiBhbnkKKyAgICAgICAgaWYgKCdQbGFucycgaW4gZGF0YSkg eworCisgICAgICAgICAgICBkYXRhWyd3aWR0aCddICs9IG9mZnNldFg7CisK KyAgICAgICAgICAgIF8uZWFjaChkYXRhWydQbGFucyddLCBmdW5jdGlvbihw KSB7CisgICAgICAgICAgICAgICAgdmFyIGxldmVsID0gXy5jbG9uZShsdmwp LAorICAgICAgICAgICAgICAgICAgICBwbGFuID0gbmV3IFBsYW5Nb2RlbCgp OworCisgICAgICAgICAgICAgICAgbGV2ZWwucHVzaChpZHgpOworICAgICAg ICAgICAgICAgIHBsYW4uc2V0KHBsYW4ucGFyc2UoXy5leHRlbmQoCisgICAg ICAgICAgICAgICAgICAgIHAsIHsKKyAgICAgICAgICAgICAgICAgICAgICAg ICJsZXZlbCI6IGxldmVsLAorICAgICAgICAgICAgICAgICAgICAgICAgeHBv czogeHBvcyAtIG9mZnNldFgsCisgICAgICAgICAgICAgICAgICAgICAgICB5 cG9zOiB5cG9zCisgICAgICAgICAgICAgICAgICAgIH0pKSk7CisKKyAgICAg ICAgICAgICAgICBpZiAobWF4Q2hpbGRXaWR0aCA8IHBsYW4uZ2V0KCd3aWR0 aCcpKSB7CisgICAgICAgICAgICAgICAgICAgIG1heENoaWxkV2lkdGggPSBw bGFuLmdldCgnd2lkdGgnKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgICAgICB2YXIgY2hpbGRIZWlnaHQgPSBwbGFuLmdldCgnaGVpZ2h0 Jyk7CisKKyAgICAgICAgICAgICAgICBpZiAoaWR4ICE9PSAxKSB7CisgICAg ICAgICAgICAgICAgICAgIGRhdGFbJ2hlaWdodCddID0gZGF0YVsnaGVpZ2h0 J10gKyBjaGlsZEhlaWdodCArIG9mZnNldFk7CisgICAgICAgICAgICAgICAg fSBlbHNlIGlmIChjaGlsZEhlaWdodCA+IGRhdGFbJ2hlaWdodCddKSB7Cisg ICAgICAgICAgICAgICAgICAgIGRhdGFbJ2hlaWdodCddID0gY2hpbGRIZWln aHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHlwb3Mg Kz0gY2hpbGRIZWlnaHQgKyBvZmZzZXRZOworCisgICAgICAgICAgICAgICAg cGxhbnMucHVzaChwbGFuKTsKKyAgICAgICAgICAgICAgICBpZHgrKzsKKyAg ICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gRmluYWwg V2lkdGggYW5kIEhlaWdodCBvZiBjdXJyZW50IG5vZGUKKyAgICAgICAgZGF0 YVsnd2lkdGgnXSArPSBtYXhDaGlsZFdpZHRoOworICAgICAgICBkYXRhWydQ bGFucyddID0gcGxhbnM7CisKKyAgICAgICAgcmV0dXJuIGRhdGE7CisgICAg fSwKKworICAgIC8qCisgICAgICogUmVxdWlyZWQgdG8gcGFyc2UgYW5kIGlu Y2x1ZGUgbm9uLWRlZmF1bHQgcGFyYW1zIG9mCisgICAgICogcGxhbiBpbnRv IGJhY2tib25lIG1vZGVsCisgICAgICovCisgICAgdG9KU09OOiBmdW5jdGlv bihub25fcmVjdXJzaXZlKSB7CisgICAgICB2YXIgcmVzID0gQmFja2JvbmUu TW9kZWwucHJvdG90eXBlLnRvSlNPTi5hcHBseSh0aGlzLCBhcmd1bWVudHMp OworCisgICAgICBpZiAobm9uX3JlY3Vyc2l2ZSkgeworICAgICAgICAgICAg ZGVsZXRlIHJlc1snUGxhbnMnXTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICB2YXIgcGxhbnMgPSBbXTsKKyAgICAgICAgICAgIF8uZWFjaChyZXNb J1BsYW5zJ10sIGZ1bmN0aW9uKHApIHsKKyAgICAgICAgICAgICAgcGxhbnMu cHVzaChwLnRvSlNPTigpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg ICAgcmVzWydQbGFucyddID0gcGxhbnM7CisgICAgICB9CisgICAgICByZXR1 cm4gcmVzOworICAgIH0sCisKKyAgICAvLyBEcmF3IGFuIGFycm93IHRvIHBh cmVudCBub2RlCisgICAgZHJhd1BvbHlMaW5lOiBmdW5jdGlvbihnLCBzdGFy dFgsIHN0YXJ0WSwgZW5kWCwgZW5kWSwgb3B0cywgYXJyb3dPcHRzKSB7Cisg ICAgICAvLyBDYWxjdWxhdGUgZW5kIHBvaW50IG9mIGZpcnN0IHN0YXJ0aW5n IHN0cmFpZ2h0IGxpbmUgKHN0YXJ0eDEsIHN0YXJ0eTEpCisgICAgICAvLyBD YWxjdWxhdGUgc3RhcnQgcG9pbnQgb2YgMm5kIHN0cmFpZ2h0IGxpbmUgKGVu ZHgxLCBlbmR5MSkKKyAgICAgIHZhciBtaWRYMSA9IHN0YXJ0WCArICgoZW5k WCAtIHN0YXJ0WCkgLyAzKSwKKyAgICAgICAgICBtaWRYMiA9IHN0YXJ0WCAr ICgyICogKChlbmRYIC0gc3RhcnRYKSAvIDMpKTsKKworICAgICAgLy9jcmVh dGUgYXJyb3cgaGVhZAorICAgICAgdmFyIGFycm93ID0gZy5wb2x5Z29uKAor ICAgICAgICAgICAgICAgICAgICBbMCwgQVJST1dfSEVJR0hULAorICAgICAg ICAgICAgICAgICAgICAoQVJST1dfV0lEVEggLyAyKSxBUlJPV19IRUlHSFQs CisgICAgICAgICAgICAgICAgICAgIChBUlJPV19IRUlHSFQgLyA0KSwgMCwK KyAgICAgICAgICAgICAgICAgICAgMCwgQVJST1dfV0lEVEhdCisgICAgICAg ICAgICAgICAgICAgICkudHJhbnNmb3JtKCJyOTAiKTsKKyAgICAgIHZhciBt YXJrZXIgPSBhcnJvdy5tYXJrZXIoCisgICAgICAgICAgICAgICAgICAgICAg ICAgMCwgMCwgQVJST1dfV0lEVEgsIEFSUk9XX0hFSUdIVCwgMCwgKEFSUk9X X1dJRFRIIC8gMikKKyAgICAgICAgICAgICAgICAgICAgICAgICApLmF0dHIo YXJyb3dPcHRzKTsKKworICAgICAgLy8gRmlyc3Qgc3RyYWlnaHQgbGluZQor ICAgICAgZy5saW5lKAorICAgICAgICBzdGFydFgsIHN0YXJ0WSwgbWlkWDEs IHN0YXJ0WQorICAgICAgICApLmF0dHIob3B0cyk7CisKKyAgICAgIC8vIERp YWdvbmFsIGxpbmUKKyAgICAgIGcubGluZSgKKyAgICAgICAgbWlkWDEtMSwg c3RhcnRZLCBtaWRYMiwgZW5kWQorICAgICAgICApLmF0dHIob3B0cyk7CisK KyAgICAgIC8vIExhc3Qgc3RyYWlnaHQgbGluZQorICAgICAgdmFyIGxpbmUg PSBnLmxpbmUoCisgICAgICAgICAgICAgICAgICAgbWlkWDIsIGVuZFksIGVu ZFgsIGVuZFkKKyAgICAgICAgICAgICAgICAgICApLmF0dHIob3B0cyk7Cisg ICAgICBsaW5lLmF0dHIoe21hcmtlckVuZDogbWFya2VyfSkKKyAgICB9LAor CisgICAgLy8gRHJhdyBpbWFnZSwgaXRzIG5hbWUgYW5kIGl0cyB0b29sdGlw CisgICAgZHJhdzogZnVuY3Rpb24ocywgeHBvcywgeXBvcywgcFhwb3MsIHBZ cG9zLCBncmFwaENvbnRhaW5lciwgdG9vbFRpcENvbnRhaW5lcikgeworICAg ICAgICB2YXIgZyA9IHMuZygpOworICAgICAgICB2YXIgY3VycmVudFhwb3Mg PSB4cG9zICsgdGhpcy5nZXQoJ3hwb3MnKSAsCisgICAgICAgICAgICBjdXJy ZW50WXBvcyA9IHlwb3MgKyB0aGlzLmdldCgneXBvcycpLAorICAgICAgICAg ICAgaXNTdWJQbGFuID0gKHRoaXMuZ2V0KCdQYXJlbnQgUmVsYXRpb25zaGlw JykgPT09ICJTdWJQbGFuIik7CisKKyAgICAgICAgLy8gRHJhdyB0aGUgc3Vi cGxhbiByZWN0YW5nbGUKKyAgICAgICAgaWYgKGlzU3ViUGxhbikgeworICAg ICAgICAgIGcucmVjdCgKKyAgICAgICAgICAgIGN1cnJlbnRYcG9zIC0gdGhp cy5nZXQoJ3dpZHRoJykgKyBwV0lEVEggKyB4TWFyZ2luLAorICAgICAgICAg ICAgY3VycmVudFlwb3MgLSB5TWFyZ2luLAorICAgICAgICAgICAgdGhpcy5n ZXQoJ3dpZHRoJykgLSB4TWFyZ2luLAorICAgICAgICAgICAgdGhpcy5nZXQo J2hlaWdodCcpLCA1CisgICAgICAgICAgKS5hdHRyKHsKKyAgICAgICAgICAg ICAgc3Ryb2tlOiAnIzQ0NDQ0NCcsCisgICAgICAgICAgICAgICdzdHJva2VX aWR0aCc6IDEuMiwKKyAgICAgICAgICAgICAgZmlsbDogJ2dyYXknLAorICAg ICAgICAgICAgICBmaWxsT3BhY2l0eTogMC4yCisgICAgICAgICAgfSk7CisK KyAgICAgICAgICAvL3Byb3ZpZGUgc3VicGxhbiBuYW1lCisgICAgICAgICAg dmFyIHRleHQgPSBnLnRleHQoCisgICAgICAgICAgICBjdXJyZW50WHBvcyAg KyBwV0lEVEggLSAoIHRoaXMuZ2V0KCd3aWR0aCcpIC8gMikgLSB4TWFyZ2lu LAorICAgICAgICAgICAgY3VycmVudFlwb3MgKyBwSEVJR0hUICAtICh0aGlz LmdldCgnaGVpZ2h0JykgLyAyKSAtIHlNYXJnaW4sCisgICAgICAgICAgICB0 aGlzLmdldCgnU3VicGxhbiBOYW1lJykKKyAgICAgICAgICApLmF0dHIoewor ICAgICAgICAgICAgZm9udFNpemU6IFRYVF9TSVpFLCAidGV4dC1hbmNob3Ii OiJzdGFydCIsCisgICAgICAgICAgICBmaWxsOiAncmVkJworICAgICAgICAg IH0pOworICAgICAgICB9CisKKyAgICAgICAgLy8gRHJhdyB0aGUgYWN0dWFs IGltYWdlIGZvciBjdXJyZW50IG5vZGUKKyAgICAgICAgdmFyIGltYWdlID0g Zy5pbWFnZSgKKyAgICAgICAgICAgIHBnRXhwbGFpbi5wcmVmaXggKyB0aGlz LmdldCgnaW1hZ2UnKSwKKyAgICAgICAgICAgIGN1cnJlbnRYcG9zICsgKHBX SURUSCAtIElNQUdFX1dJRFRIKSAvIDIsCisgICAgICAgICAgICBjdXJyZW50 WXBvcyArIChwSEVJR0hUIC0gSU1BR0VfSEVJR0hUKSAvIDIsCisgICAgICAg ICAgICBJTUFHRV9XSURUSCwKKyAgICAgICAgICAgIElNQUdFX0hFSUdIVAor ICAgICAgICApOworCisgICAgICAgIC8vIERyYXcgdG9vbHRpcAorICAgICAg ICB2YXIgaW1hZ2VfZGF0YSA9IHRoaXMudG9KU09OKCk7CisgICAgICAgIGlt YWdlLm1vdXNlb3ZlcihmdW5jdGlvbihldnQpeworCisgICAgICAgICAgLy8g RW1wdHkgdGhlIHRvb2x0aXAgY29udGVudCBpZiBpdCBoYXMgYW55IGFuZCBh ZGQgbmV3IGRhdGEKKyAgICAgICAgICB0b29sVGlwQ29udGFpbmVyLmVtcHR5 KCk7CisgICAgICAgICAgdmFyIHRvb2x0aXAgPSAkKCc8dGFibGU+PC90YWJs ZT4nLHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzOiAicGdh ZG1pbi10b29sdGlwLXRhYmxlIgorICAgICAgICAgICAgICAgICAgICAgICAg fSkuYXBwZW5kVG8odG9vbFRpcENvbnRhaW5lcik7CisgICAgICAgICAgXy5l YWNoKGltYWdlX2RhdGEsIGZ1bmN0aW9uKHZhbHVlLGtleSkgeworICAgICAg ICAgICAgaWYoa2V5ICE9PSAnaW1hZ2UnICYmIGtleSAhPT0gJ1BsYW5zJyAm JgorICAgICAgICAgICAgICAga2V5ICE9PSAnbGV2ZWwnICYmIGtleSAhPT0g J2ltYWdlJyAmJgorICAgICAgICAgICAgICAga2V5ICE9PSAnaW1hZ2VfdGV4 dCcgJiYga2V5ICE9PSAneHBvcycgJiYKKyAgICAgICAgICAgICAgIGtleSAh PT0gJ3lwb3MnICYmIGtleSAhPT0gJ3dpZHRoJyAmJgorICAgICAgICAgICAg ICAga2V5ICE9PSAnaGVpZ2h0JykgeworICAgICAgICAgICAgICB0b29sdGlw LmFwcGVuZCggJzx0cj48dGQgY2xhc3M9ImxhYmVsIGV4cGxhaW4tdG9vbHRp cCI+JyArIGtleSArICc8L3RkPjx0ZCBjbGFzcz0ibGFiZWwgZXhwbGFpbi10 b29sdGlwLXZhbCI+JyArIHZhbHVlICsgJzwvdGQ+PC90cj4nICk7CisgICAg ICAgICAgICB9OworICAgICAgICAgIH0pOworCisgICAgICAgICAgdmFyIHpv b21GYWN0b3IgPSBncmFwaENvbnRhaW5lci5kYXRhKCd6b29tLWZhY3Rvcicp OworCisgICAgICAgICAgLy8gQ2FsY3VsYXRlIGNvLW9yZGluYXRlcyBmb3Ig dG9vbHRpcAorICAgICAgICAgIHZhciB0b29sVGlwWCA9ICgoY3VycmVudFhw b3MgKyBwV0lEVEgpICogem9vbUZhY3RvciAtIGdyYXBoQ29udGFpbmVyLnNj cm9sbExlZnQoKSk7CisgICAgICAgICAgdmFyIHRvb2xUaXBZID0gKChjdXJy ZW50WXBvcyArIHBIRUlHSFQpICogem9vbUZhY3RvciAtIGdyYXBoQ29udGFp bmVyLnNjcm9sbFRvcCgpKTsKKworICAgICAgICAgIC8vIFJlY2FsY3VsYXRl IHgueSBpZiB0b29sdGlwIGlzIGdvaW5nIG91dCBvZiBzY3JlZW4KKyAgICAg ICAgICBpZihncmFwaENvbnRhaW5lci53aWR0aCgpIDwgKHRvb2xUaXBYICsg dG9vbFRpcENvbnRhaW5lclswXS5jbGllbnRXaWR0aCkpCisgICAgICAgICAg ICB0b29sVGlwWCAtPSAodG9vbFRpcENvbnRhaW5lclswXS5jbGllbnRXaWR0 aCArIChwV0lEVEgqem9vbUZhY3RvcikpOworICAgICAgICAgIC8vaWYoZG9j dW1lbnQuY2hpbGRyZW5bMF0uY2xpZW50SGVpZ2h0IDwgKHRvb2xUaXBZICsg dG9vbFRpcENvbnRhaW5lclswXS5jbGllbnRIZWlnaHQpKQorICAgICAgICAg IGlmKGdyYXBoQ29udGFpbmVyLmhlaWdodCgpIDwgKHRvb2xUaXBZICsgdG9v bFRpcENvbnRhaW5lclswXS5jbGllbnRIZWlnaHQpKQorICAgICAgICAgICAg dG9vbFRpcFkgLT0gKHRvb2xUaXBDb250YWluZXJbMF0uY2xpZW50SGVpZ2h0 ICsgKChwSEVJR0hULzIpKnpvb21GYWN0b3IpKTsKKworICAgICAgICAgIHRv b2xUaXBYID0gdG9vbFRpcFggPCAwID8gMCA6ICh0b29sVGlwWCk7CisgICAg ICAgICAgdG9vbFRpcFkgPSB0b29sVGlwWSA8IDAgPyAwIDogKHRvb2xUaXBZ KTsKKworICAgICAgICAgIC8vIFNob3cgdG9vbFRpcCBhdCByZXNwZWN0aXZl IHgseSBjb29yZGluYXRlcworICAgICAgICAgIHRvb2xUaXBDb250YWluZXIu Y3NzKHsnb3BhY2l0eSc6ICcwLjgnfSk7CisgICAgICAgICAgdG9vbFRpcENv bnRhaW5lci5jc3MoJ2xlZnQnLCB0b29sVGlwWCk7CisgICAgICAgICAgdG9v bFRpcENvbnRhaW5lci5jc3MoICd0b3AnLCB0b29sVGlwWSk7CisgICAgICAg IH0pOworCisgICAgICAgIC8vIFJlbW92ZSB0b29sdGlwIHdoZW4gbW91c2Ug aXMgb3V0IGZyb20gbm9kZSdzIGFyZWEKKyAgICAgICAgaW1hZ2UubW91c2Vv dXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgdG9vbFRpcENvbnRhaW5lci5l bXB0eSgpOworICAgICAgICAgIHRvb2xUaXBDb250YWluZXIuY3NzKHsnb3Bh Y2l0eSc6ICcwJ30pOworICAgICAgICAgIHRvb2xUaXBDb250YWluZXIuY3Nz KCdsZWZ0JywgMCk7CisgICAgICAgICAgdG9vbFRpcENvbnRhaW5lci5jc3Mo ICd0b3AnLCAwKTsKKyAgICAgICAgfSk7CisKKyAgICAgICAgLy8gRHJhdyB0 ZXh0IGJlbG93IHRoZSBub2RlCisgICAgICAgIHZhciBsYWJlbCA9IGcuZygp OworICAgICAgICBnLm11bHRpdGV4dCgKKyAgICAgICAgICBjdXJyZW50WHBv cyArIChwV0lEVEggLyAyKSwKKyAgICAgICAgICBjdXJyZW50WXBvcyArIHBI RUlHSFQgLSBUWFRfQUxMSUdOLAorICAgICAgICAgIHRoaXMuZ2V0KCdpbWFn ZV90ZXh0JyksCisgICAgICAgICAgMTUwLAorICAgICAgICAgIHsiZm9udC1z aXplIjogVFhUX1NJWkUgLCJ0ZXh0LWFuY2hvciI6Im1pZGRsZSJ9CisgICAg ICAgICk7CisKKyAgICAgICAgLy8gRHJhdyBBcnJvdyB0byBwYXJlbnQgb25s eSBpdHMgbm90IHRoZSBmaXJzdCBub2RlCisgICAgICAgIGlmICghXy5pc1Vu ZGVmaW5lZChwWXBvcykpIHsKKyAgICAgICAgICAgIHZhciBzdGFydHggPSBj dXJyZW50WHBvcyArIHBXSURUSDsKKyAgICAgICAgICAgIHZhciBzdGFydHkg PSBjdXJyZW50WXBvcyArIChwSEVJR0hUIC8gMik7CisgICAgICAgICAgICB2 YXIgZW5keCA9IHBYcG9zIC0gQVJST1dfV0lEVEg7CisgICAgICAgICAgICB2 YXIgZW5keSA9IHBZcG9zICsgKHBIRUlHSFQgLyAyKTsKKyAgICAgICAgICAg IHZhciBzdGFydF9jb3N0ID0gdGhpcy5nZXQoIlN0YXJ0dXAgQ29zdCIpLAor ICAgICAgICAgICAgICAgIHRvdGFsX2Nvc3QgPSB0aGlzLmdldCgiVG90YWwg Q29zdCIpOworICAgICAgICAgICAgdmFyIGFycm93X3NpemUgPSBERUZBVUxU X0FSUk9XX1NJWkU7CisgICAgICAgICAgICAvLyBDYWxjdWxhdGUgYXJyb3cg d2lkdGggYWNjb3JkaW5nIHRvIGNvc3Qgb2YgYSBwYXJ0aWN1bGFyIHBsYW4K KyAgICAgICAgICAgIGlmKHN0YXJ0X2Nvc3QgIT0gdW5kZWZpbmVkICYmIHRv dGFsX2Nvc3QgIT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgIHZhciBh cnJvd19zaXplID0gTWF0aC5yb3VuZChNYXRoLmxvZygoc3RhcnRfY29zdCt0 b3RhbF9jb3N0KS8yICsgc3RhcnRfY29zdCkpOworICAgICAgICAgICAgICBh cnJvd19zaXplID0gYXJyb3dfc2l6ZSA8IDEgPyAxIDogYXJyb3dfc2l6ZSA+ IDEwID8gMTAgOiBhcnJvd19zaXplOworICAgICAgICAgICAgfQorCisKKyAg ICAgICAgICAgIHZhciBhcnJvd192aWV3X2JveCA9IFswLCAwLCAyKkFSUk9X X1dJRFRILCAyKkFSUk9XX0hFSUdIVF07CisgICAgICAgICAgICB2YXIgb3B0 cyA9IHtzdHJva2U6ICIjMDAwMDAwIiwgc3Ryb2tlV2lkdGg6IGFycm93X3Np emUgKyAxfSwKKyAgICAgICAgICAgICAgICBzdWJwbGFuT3B0cyA9IHtzdHJv a2U6ICIjODY2NDg2Iiwgc3Ryb2tlV2lkdGg6IGFycm93X3NpemUgKyAxfSwK KyAgICAgICAgICAgICAgICBhcnJvd09wdHMgPSB7dmlld0JveDogYXJyb3df dmlld19ib3guam9pbigiICIpfTsKKworICAgICAgICAgICAgLy8gRHJhdyBh biBhcnJvdyBmcm9tIGN1cnJlbnQgbm9kZSB0byBpdHMgcGFyZW50CisgICAg ICAgICAgICB0aGlzLmRyYXdQb2x5TGluZSgKKyAgICAgICAgICAgICAgZywg c3RhcnR4LCBzdGFydHksIGVuZHgsIGVuZHksCisgICAgICAgICAgICAgIGlz U3ViUGxhbiA/IHN1YnBsYW5PcHRzIDogb3B0cywgYXJyb3dPcHRzCisgICAg ICAgICAgICApOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHBsYW5zID0g dGhpcy5nZXQoJ1BsYW5zJyk7CisKKyAgICAgICAgLy8gRHJhdyBub2RlcyBm b3IgY3VycmVudCBwbGFuJ3MgY2hpbGRyZW4KKyAgICAgICAgXy5lYWNoKHBs YW5zLCBmdW5jdGlvbihwKSB7CisgICAgICAgICAgICBwLmRyYXcocywgeHBv cywgeXBvcywgY3VycmVudFhwb3MsIGN1cnJlbnRZcG9zLCBncmFwaENvbnRh aW5lciwgdG9vbFRpcENvbnRhaW5lcik7CisgICAgICAgIH0pOworICAgIH0K K30pOworCisvLyBNYWluIGJhY2tib25lIG1vZGVsIHRvIHN0b3JlIEpTT04g b2JqZWN0Cit2YXIgTWFpblBsYW5Nb2RlbCA9IEJhY2tib25lLk1vZGVsLmV4 dGVuZCh7CisgICAgZGVmYXVsdHM6IHsKKyAgICAgICAgIlBsYW4iOiB1bmRl ZmluZWQsCisgICAgICAgIHhwb3M6IDAsCisgICAgICAgIHlwb3M6IDAsCisg ICAgfSwKKyAgICBpbml0aWFsaXplOiBmdW5jdGlvbigpIHsKKyAgICAgICAg dGhpcy5zZXQoIlBsYW4iLCBuZXcgUGxhbk1vZGVsKCkpOworICAgIH0sCisK KyAgICAvLyBQYXJzZSB0aGUgSlNPTiBkYXRhIGFuZCBmZXRjaCBpdHMgY2hp bGRyZW4gcGxhbnMKKyAgICBwYXJzZTogZnVuY3Rpb24oZGF0YSkgeworICAg ICAgICBpZiAoZGF0YSAmJiAnUGxhbicgaW4gZGF0YSkgeworICAgICAgICAg ICB2YXIgcGxhbiA9IHRoaXMuZ2V0KCJQbGFuIik7CisgICAgICAgICAgIHBs YW4uc2V0KAorICAgICAgICAgICAgIHBsYW4ucGFyc2UoCisgICAgICAgICAg ICAgICBfLmV4dGVuZCgKKyAgICAgICAgICAgICAgICAgZGF0YVsnUGxhbidd LCB7CisgICAgICAgICAgICAgICAgICAgeHBvczogMCwKKyAgICAgICAgICAg ICAgICAgICB5cG9zOiAwCisgICAgICAgICAgICAgICAgIH0pKSk7CisKKyAg ICAgICAgICAgZGF0YVsneHBvcyddID0gMDsKKyAgICAgICAgICAgZGF0YVsn eXBvcyddID0gMDsKKyAgICAgICAgICAgZGF0YVsnd2lkdGgnXSA9IHBsYW4u Z2V0KCd3aWR0aCcpICsgKHhNYXJnaW4gKiAyKTsKKyAgICAgICAgICAgZGF0 YVsnaGVpZ2h0J10gPSBwbGFuLmdldCgnaGVpZ2h0JykgKyAoeU1hcmdpbiAq IDIpOworCisgICAgICAgICAgIGRlbGV0ZSBkYXRhWydQbGFuJ107CisgICAg ICAgIH0KKworICAgICAgcmV0dXJuIGRhdGE7CisgICAgfSwKKyAgICB0b0pT T046IGZ1bmN0aW9uKCkgeworICAgICAgdmFyIHJlcyA9IEJhY2tib25lLk1v ZGVsLnByb3RvdHlwZS50b0pTT04uYXBwbHkodGhpcywgYXJndW1lbnRzKTsK KworICAgICAgaWYgKHJlcy5QbGFuKSB7CisgICAgICAgIHJlcy5QbGFuID0g cmVzLlBsYW4udG9KU09OKCk7CisgICAgICB9CisKKyAgICAgIHJldHVybiBy ZXM7CisgICAgfSwKKyAgICBkcmF3OiBmdW5jdGlvbihzLCB4cG9zLCB5cG9z LCBncmFwaENvbnRhaW5lciwgdG9vbFRpcENvbnRhaW5lcikgeworICAgICAg ICB2YXIgZyA9IHMuZygpOworCisgICAgICAgIC8vZHJhdyB0aGUgYm9yZGVy CisgICAgICAgIGcucmVjdCgKKwkgICAgICAgIDAsIDAsIHRoaXMuZ2V0KCd3 aWR0aCcpIC0gMTAsIHRoaXMuZ2V0KCdoZWlnaHQnKSAtIDEwLCA1CisJICAg ICkuYXR0cih7CisgICAgICAgICAgICBzdHJva2U6ICcjRkZFQkNEJywgJ3N0 cm9rZVdpZHRoJzogMS4yLAorICAgICAgICAgICAgZmlsbDogJyNGRkY4REMn LCBmaWxsT3BhY2l0eTogMC41CisgICAgICAgIH0pOworCisgICAgICAgIC8v RmV0Y2ggdG90YWwgd2lkdGgsIGhlaWdodAorICAgICAgICBUT1RBTF9XSURU SCA9IHRoaXMuZ2V0KCd3aWR0aCcpOworICAgICAgICBUT1RBTF9IRUlHSFQg PSB0aGlzLmdldCgnaGVpZ2h0Jyk7CisgICAgICAgIHZhciBwbGFuID0gdGhp cy5nZXQoJ1BsYW4nKTsKKworICAgICAgICAvL0RyYXcgZXhwbGFpbiBncmFw aAorICAgICAgICBwbGFuLmRyYXcoZywgeHBvcywgeXBvcywgdW5kZWZpbmVk LCB1bmRlZmluZWQsIGdyYXBoQ29udGFpbmVyLCB0b29sVGlwQ29udGFpbmVy KTsKKyAgICB9Cit9KTsKKworLy8gUGFyc2UgYW5kIGRyYXcgZnVsbCBncmFw aGljYWwgZXhwbGFpbgorXy5leHRlbmQoCisgICAgcGdFeHBsYWluLCB7Cisg ICAgICAgIC8vIEFzc3VtcHRpb24gY29udGFpbmVyIGlzIGEgalF1ZXJ5IG9i amVjdAorICAgICAgICBEcmF3SlNPTlBsYW46IGZ1bmN0aW9uKGNvbnRhaW5l ciwgcGxhbikgeworICAgICAgICAgIHZhciBteV9wbGFucyA9IFtdOworICAg ICAgICAgIGNvbnRhaW5lci5lbXB0eSgpOworICAgICAgICAgIHZhciBjdXJy X3pvb21fZmFjdG9yID0gMS4wOworCisgICAgICAgICAgdmFyIHpvb21BcmVh ID0kKCc8ZGl2PjwvZGl2PicsIHsKKyAgICAgICAgICAgICAgICBjbGFzczog J3BnLWV4cGxhaW4tem9vbS1hcmVhIGJ0bi1ncm91cCcsCisgICAgICAgICAg ICAgICAgcm9sZTogJ2dyb3VwJworICAgICAgICAgICAgICAgIH0pLmFwcGVu ZFRvKGNvbnRhaW5lciksCisgICAgICAgICAgICAgIHpvb21JbkJ0biA9ICQo JzxidXR0b24+PC9idXR0b24+JywgeworICAgICAgICAgICAgICAgIGNsYXNz OiAnYnRuIHBnLWV4cGxhaW4tem9vbS1idG4gYmFkZ2UnLAorICAgICAgICAg ICAgICAgIHRpdGxlOiAnWm9vbSBpbicKKyAgICAgICAgICAgICAgICB9KS5h cHBlbmRUbyh6b29tQXJlYSkuYXBwZW5kKAorICAgICAgICAgICAgICAgICAg JCgnPGk+PC9pPicseworICAgICAgICAgICAgICAgICAgICBjbGFzczogJ2Zh IGZhLXNlYXJjaC1wbHVzJworICAgICAgICAgICAgICAgICAgfSkpLAorICAg ICAgICAgICAgICB6b29tVG9Ob3JtYWwgPSAkKCc8YnV0dG9uPjwvYnV0dG9u PicsIHsKKyAgICAgICAgICAgICAgICBjbGFzczogJ2J0biBwZy1leHBsYWlu LXpvb20tYnRuIGJhZGdlJywKKyAgICAgICAgICAgICAgICB0aXRsZTogJ1pv b20gdG8gb3JpZ2luYWwnCisgICAgICAgICAgICAgICAgfSkuYXBwZW5kVG8o em9vbUFyZWEpLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICQoJzxpPjwv aT4nLHsKKyAgICAgICAgICAgICAgICAgICAgY2xhc3M6ICdmYSBmYS1hcnJv d3MtYWx0JworICAgICAgICAgICAgICAgICAgfSkpCisgICAgICAgICAgICAg IHpvb21PdXRCdG4gPSAkKCc8YnV0dG9uPjwvYnV0dG9uPicsIHsKKyAgICAg ICAgICAgICAgICBjbGFzczogJ2J0biBwZy1leHBsYWluLXpvb20tYnRuIGJh ZGdlJywKKyAgICAgICAgICAgICAgICB0aXRsZTogJ1pvb20gb3V0JworICAg ICAgICAgICAgICAgIH0pLmFwcGVuZFRvKHpvb21BcmVhKS5hcHBlbmQoCisg ICAgICAgICAgICAgICAgICAkKCc8aT48L2k+JywgeworICAgICAgICAgICAg ICAgICAgICBjbGFzczogJ2ZhIGZhLXNlYXJjaC1taW51cycKKyAgICAgICAg ICAgICAgICAgIH0pKTsKKworICAgICAgICAgIC8vIE1haW4gZGl2IHRvIGJl IGRyYXduIGFsbCBpbWFnZXMgb24KKyAgICAgICAgICB2YXIgcGxhbkRpdiA9 ICQoJzxkaXY+PC9kaXY+JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IHtjbGFzczogInBnYWRtaW4tZXhwbGFpbi1jb250YWluZXIifQorICAgICAg ICAgICAgICAgICAgICAgICAgICkuYXBwZW5kVG8oY29udGFpbmVyKSwKKyAg ICAgICAgICAgICAgLy8gRGl2IHRvIGRyYXcgdG9vbC10aXAgb24KKyAgICAg ICAgICAgICAgdG9vbFRpcCA9ICQoJzxkaXY+PC9kaXY+JywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIHtpZDogInRvb2xUaXAiLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2xhc3M6ICJwZ2FkbWluLWV4cGxhaW4tdG9v bHRpcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgICApLmFwcGVuZFRvKGNvbnRhaW5lcik7CisgICAg ICAgICAgdG9vbFRpcC5lbXB0eSgpOworICAgICAgICAgIHBsYW5EaXYuZGF0 YSgnem9vbS1mYWN0b3InLCBjdXJyX3pvb21fZmFjdG9yKTsKKworICAgICAg ICAgIHZhciB3ID0gMCwgaCA9IDAsCisgICAgICAgICAgICAgIHggPSB4TWFy Z2luLCBoID0geU1hcmdpbjsKKworICAgICAgICAgIF8uZWFjaChwbGFuLCBm dW5jdGlvbihwKSB7CisgICAgICAgICAgICB2YXIgbWFpbl9wbGFuID0gbmV3 IE1haW5QbGFuTW9kZWwoKTsKKworICAgICAgICAgICAgLy8gUGFyc2UgSlNP TiBkYXRhIHRvIGJhY2tib25lIG1vZGVsCisgICAgICAgICAgICBtYWluX3Bs YW4uc2V0KG1haW5fcGxhbi5wYXJzZShwKSk7CisgICAgICAgICAgICB3ID0g bWFpbl9wbGFuLmdldCgnd2lkdGgnKTsKKyAgICAgICAgICAgIGggPSBtYWlu X3BsYW4uZ2V0KCdoZWlnaHQnKTsKKworICAgICAgICAgICAgdmFyIHMgPSBT bmFwKHcsIGgpLAorICAgICAgICAgICAgICAgICRzdmcgPSAkKHMubm9kZSku ZGV0YWNoKCk7CisgICAgICAgICAgICBwbGFuRGl2LmFwcGVuZCgkc3ZnKTsK KworICAgICAgICAgICAgbWFpbl9wbGFuLmRyYXcocywgdyAtIHhNYXJnaW4s IHlNYXJnaW4sIHBsYW5EaXYsIHRvb2xUaXApOworCisgICAgICAgICAgICB2 YXIgaW5pdFBhbmVsV2lkdGggPSBwbGFuRGl2LndpZHRoKCksCisgICAgICAg ICAgICAgICAgaW5pdFBhbmVsSGVpZ2h0ID0gcGxhbkRpdi5oZWlnaHQoKTsK KworICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICogU2NhbGUgZ3Jh cGggaW4gY2FzZSBpdHMgd2lkdGggaXMgYmlnZ2VyIHRoYW4gcGFuZWwgd2lk dGgKKyAgICAgICAgICAgICAgKiBpbiB3aGljaCB0aGUgZ3JhcGggaXMgZGlz cGxheWVkCisgICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZihpbml0 UGFuZWxXaWR0aCA8IHcpIHsKKyAgICAgICAgICAgICAgdmFyIHdpZHRoX3Jh dGlvID0gaW5pdFBhbmVsV2lkdGggLyB3OworCisgICAgICAgICAgICAgIGN1 cnJfem9vbV9mYWN0b3IgPSB3aWR0aF9yYXRpbzsKKyAgICAgICAgICAgICAg Y3Vycl96b29tX2ZhY3RvciA9IGN1cnJfem9vbV9mYWN0b3IgPCBNSU5fWk9P TV9GQUNUT1IgPyBNSU5fWk9PTV9GQUNUT1IgOiBjdXJyX3pvb21fZmFjdG9y OworICAgICAgICAgICAgICBjdXJyX3pvb21fZmFjdG9yID0gY3Vycl96b29t X2ZhY3RvciA+IElOSVRfWk9PTV9GQUNUT1IgPyBJTklUX1pPT01fRkFDVE9S IDogY3Vycl96b29tX2ZhY3RvcjsKKworICAgICAgICAgICAgICB2YXIgem9v bUluTWF0cml4ID0gbmV3IFNuYXAubWF0cml4KCk7CisgICAgICAgICAgICAg IHpvb21Jbk1hdHJpeC5zY2FsZShjdXJyX3pvb21fZmFjdG9yLCBjdXJyX3pv b21fZmFjdG9yKTsKKworICAgICAgICAgICAgICAkc3ZnLmZpbmQoJ2cnKS5m aXJzdCgpLmF0dHIoe3RyYW5zZm9ybTogem9vbUluTWF0cml4fSk7CisgICAg ICAgICAgICAgICRzdmcuYXR0cih7J3dpZHRoJzogdyAqIGN1cnJfem9vbV9m YWN0b3IsICdoZWlnaHQnOiBoICogY3Vycl96b29tX2ZhY3Rvcn0pOworICAg ICAgICAgICAgICBwbGFuRGl2LmRhdGEoJ3pvb20tZmFjdG9yJywgY3Vycl96 b29tX2ZhY3Rvcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHpv b21JbkJ0bi5vbignY2xpY2snLCBmdW5jdGlvbihlKXsKKyAgICAgICAgICAg ICAgY3Vycl96b29tX2ZhY3RvciA9ICgoY3Vycl96b29tX2ZhY3RvciArIFpP T01fUkFUSU8pID4gTUFYX1pPT01fRkFDVE9SKSA/IE1BWF9aT09NX0ZBQ1RP UiA6IChjdXJyX3pvb21fZmFjdG9yICsgWk9PTV9SQVRJTyk7CisgICAgICAg ICAgICAgIHZhciB6b29tSW5NYXRyaXggPSBuZXcgU25hcC5tYXRyaXgoKTsK KyAgICAgICAgICAgICAgem9vbUluTWF0cml4LnNjYWxlKGN1cnJfem9vbV9m YWN0b3IsIGN1cnJfem9vbV9mYWN0b3IpOworCisgICAgICAgICAgICAgICRz dmcuZmluZCgnZycpLmZpcnN0KCkuYXR0cih7dHJhbnNmb3JtOiB6b29tSW5N YXRyaXh9KTsKKyAgICAgICAgICAgICAgJHN2Zy5hdHRyKHsnd2lkdGgnOiB3 ICogY3Vycl96b29tX2ZhY3RvciwgJ2hlaWdodCc6IGggKiBjdXJyX3pvb21f ZmFjdG9yfSk7CisgICAgICAgICAgICAgIHBsYW5EaXYuZGF0YSgnem9vbS1m YWN0b3InLCBjdXJyX3pvb21fZmFjdG9yKTsKKyAgICAgICAgICAgICAgem9v bUluQnRuLmJsdXIoKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAg ICB6b29tT3V0QnRuLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUpIHsKKyAgICAg ICAgICAgICAgY3Vycl96b29tX2ZhY3RvciA9ICgoY3Vycl96b29tX2ZhY3Rv ciAtIFpPT01fUkFUSU8pIDwgTUlOX1pPT01fRkFDVE9SKSA/IE1JTl9aT09N X0ZBQ1RPUiA6IChjdXJyX3pvb21fZmFjdG9yIC0gWk9PTV9SQVRJTyk7Cisg ICAgICAgICAgICAgIHZhciB6b29tSW5NYXRyaXggPSBuZXcgU25hcC5tYXRy aXgoKTsKKyAgICAgICAgICAgICAgem9vbUluTWF0cml4LnNjYWxlKGN1cnJf em9vbV9mYWN0b3IsIGN1cnJfem9vbV9mYWN0b3IpOworCisgICAgICAgICAg ICAgICRzdmcuZmluZCgnZycpLmZpcnN0KCkuYXR0cih7dHJhbnNmb3JtOiB6 b29tSW5NYXRyaXh9KTsKKyAgICAgICAgICAgICAgJHN2Zy5hdHRyKHsnd2lk dGgnOiB3ICogY3Vycl96b29tX2ZhY3RvciwgJ2hlaWdodCc6IGggKiBjdXJy X3pvb21fZmFjdG9yfSk7CisgICAgICAgICAgICAgIHBsYW5EaXYuZGF0YSgn em9vbS1mYWN0b3InLCBjdXJyX3pvb21fZmFjdG9yKTsKKyAgICAgICAgICAg ICAgem9vbU91dEJ0bi5ibHVyKCk7CisgICAgICAgICAgICB9KTsKKworICAg ICAgICAgICAgem9vbVRvTm9ybWFsLm9uKCdjbGljaycsIGZ1bmN0aW9uKGUp IHsKKyAgICAgICAgICAgICAgY3Vycl96b29tX2ZhY3RvciA9IElOSVRfWk9P TV9GQUNUT1I7CisgICAgICAgICAgICAgIHZhciB6b29tSW5NYXRyaXggPSBu ZXcgU25hcC5tYXRyaXgoKTsKKyAgICAgICAgICAgICAgem9vbUluTWF0cml4 LnNjYWxlKGN1cnJfem9vbV9mYWN0b3IsIGN1cnJfem9vbV9mYWN0b3IpOwor CisgICAgICAgICAgICAgICRzdmcuZmluZCgnZycpLmZpcnN0KCkuYXR0cih7 dHJhbnNmb3JtOiB6b29tSW5NYXRyaXh9KTsKKyAgICAgICAgICAgICAgJHN2 Zy5hdHRyKHsnd2lkdGgnOiB3ICogY3Vycl96b29tX2ZhY3RvciwgJ2hlaWdo dCc6IGggKiBjdXJyX3pvb21fZmFjdG9yfSk7CisgICAgICAgICAgICAgIHBs YW5EaXYuZGF0YSgnem9vbS1mYWN0b3InLCBjdXJyX3pvb21fZmFjdG9yKTsK KyAgICAgICAgICAgICAgem9vbVRvTm9ybWFsLmJsdXIoKTsKKyAgICAgICAg ICAgIH0pOworICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfSk7CisK KyAgICByZXR1cm4gcGdFeHBsYWluOworfSk7CmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi90b29scy9kYXRhZ3JpZC90ZW1wbGF0ZXMvZGF0YWdyaWQvaW5k ZXguaHRtbCBiL3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlkL3RlbXBsYXRl cy9kYXRhZ3JpZC9pbmRleC5odG1sCmluZGV4IGRkYjlkOGYuLjEzNjYwMTcg MTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL2RhdGFncmlkL3RlbXBs YXRlcy9kYXRhZ3JpZC9pbmRleC5odG1sCisrKyBiL3dlYi9wZ2FkbWluL3Rv b2xzL2RhdGFncmlkL3RlbXBsYXRlcy9kYXRhZ3JpZC9pbmRleC5odG1sCkBA IC02NiwxMCArNjYsNTMgQEAgYm9keSB7CiAgICAgICAgICAgICA8L2J1dHRv bj4KICAgICAgICAgICAgIDx1bCBjbGFzcz0iZHJvcGRvd24tbWVudSBkcm9w ZG93bi1tZW51Ij4KICAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAg ICAgIDxhIGlkPSJidG4tZXhwbGFpbiIgaHJlZj0iIyI+CisgICAgICAgICAg ICAgICAgICA8c3Bhbj57eyBfKCdFeHBsYWluJykgfX08L3NwYW4+CisgICAg ICAgICAgICAgICAgPC9hPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAg ICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgPGEgaWQ9ImJ0bi1leHBs YWluLWFuYWx5emUiIGhyZWY9IiMiPgorICAgICAgICAgICAgICAgICAgICA8 c3Bhbj57eyBfKCdFeHBsYWluIGFuYWx5emUnKSB9fTwvc3Bhbj4KKyAgICAg ICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgIDwvbGk+CisgICAgICAg ICAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciI+PC9saT4KKyAgICAgICAgICAg ICAgPGxpIGNsYXNzPSJkcm9wZG93bi1zdWJtZW51IGRyb3Bkb3duLXN1Ym1l bnUiPgorICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiPnt7IF8oJ0V4cGxh aW4gT3B0aW9ucycpIH19PC9hPgorICAgICAgICAgICAgICAgIDx1bCBjbGFz cz0iZHJvcGRvd24tbWVudSI+CisgICAgICAgICAgICAgICAgICA8bGk+Cisg ICAgICAgICAgICAgICAgICAgIDxhIGlkPSJidG4tZXhwbGFpbi12ZXJib3Nl IiBocmVmPSIjIiBjbGFzcz0ibm9jbG9zZSI+CisgICAgICAgICAgICAgICAg ICAgICAgPGkgY2xhc3M9ImV4cGxhaW4tdmVyYm9zZSBmYSBmYS1jaGVjayB2 aXNpYmlsaXR5LWhpZGRlbiIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4KKyAg ICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgXygnVmVyYm9zZScpIH19 IDwvc3Bhbj4KKyAgICAgICAgICAgICAgICAgICAgPC9hPgorICAgICAgICAg ICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgICAgIDxsaT4KKyAgICAg ICAgICAgICAgICAgICAgPGEgaWQ9ImJ0bi1leHBsYWluLWNvc3RzIiBocmVm PSIjIiBjbGFzcz0ibm9jbG9zZSI+CisgICAgICAgICAgICAgICAgICAgICAg PGkgY2xhc3M9ImV4cGxhaW4tY29zdHMgZmEgZmEtY2hlY2sgdmlzaWJpbGl0 eS1oaWRkZW4iIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+CisgICAgICAgICAg ICAgICAgICAgICAgPHNwYW4+IHt7IF8oJ0Nvc3RzJykgfX0gPC9zcGFuPgor ICAgICAgICAgICAgICAgICAgICA8L2E+CisgICAgICAgICAgICAgICAgICA8 L2xpPgorICAgICAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAg ICAgICA8YSBpZD0iYnRuLWV4cGxhaW4tYnVmZmVycyIgaHJlZj0iIyIgY2xh c3M9Im5vY2xvc2UiPgorICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNz PSJleHBsYWluLWJ1ZmZlcnMgZmEgZmEtY2hlY2sgdmlzaWJpbGl0eS1oaWRk ZW4iIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+CisgICAgICAgICAgICAgICAg ICAgICAgPHNwYW4+IHt7IF8oJ0J1ZmZlcnMnKSB9fSA8L3NwYW4+CisgICAg ICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgIDwvbGk+ CisgICAgICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgICAg IDxhIGlkPSJidG4tZXhwbGFpbi10aW1pbmciIGhyZWY9IiMiIGNsYXNzPSJu b2Nsb3NlIj4KKyAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZXhw bGFpbi10aW1pbmcgZmEgZmEtY2hlY2sgdmlzaWJpbGl0eS1oaWRkZW4iIGFy aWEtaGlkZGVuPSJ0cnVlIj48L2k+CisgICAgICAgICAgICAgICAgICAgICAg PHNwYW4+IHt7IF8oJ1RpbWluZycpIH19IDwvc3Bhbj4KKyAgICAgICAgICAg ICAgICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgPC9saT4KKyAgICAg ICAgICAgICAgICA8L3VsPgorICAgICAgICAgICAgICA8L2xpPgorICAgICAg ICAgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIiPjwvbGk+CisgICAgICAgICAg ICAgIDxsaT4KICAgICAgICAgICAgICAgICA8YSBpZD0iYnRuLWF1dG8tY29t bWl0IiBocmVmPSIjIj4KICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9 ImF1dG8tY29tbWl0IGZhIGZhLWNoZWNrIiBhcmlhLWhpZGRlbj0idHJ1ZSI+ PC9pPgogICAgICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgXygnQXV0by1D b21taXQnKSB9fSA8L3NwYW4+CiAgICAgICAgICAgICAgICAgPC9hPgorICAg ICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICA8bGk+CiAgICAgICAg ICAgICAgICAgPGEgaWQ9ImJ0bi1hdXRvLXJvbGxiYWNrIiBocmVmPSIjIj4K ICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImF1dG8tcm9sbGJhY2sg ZmEgZmEtY2hlY2sgdmlzaWJpbGl0eS1oaWRkZW4iIGFyaWEtaGlkZGVuPSJ0 cnVlIj48L2k+CiAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiB7eyBfKCdB dXRvLVJvbGxiYWNrJykgfX0gPC9zcGFuPgpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9jc3Mvc3FsZWRpdG9yLmNz cyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci9zdGF0aWMvY3NzL3Nx bGVkaXRvci5jc3MKaW5kZXggZGVlM2VhMS4uNmRiMDRjYiAxMDA2NDQKLS0t IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRpYy9jc3Mvc3Fs ZWRpdG9yLmNzcworKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3Iv c3RhdGljL2Nzcy9zcWxlZGl0b3IuY3NzCkBAIC0yMzYsMyArMjM2LDEwIEBA CiAuQ29kZU1pcnJvci1mb2xkZ3V0dGVyLWZvbGRlZDphZnRlciB7CiAgIGNv bnRlbnQ6ICJcMjVCNiI7CiB9CisKKworLnNxbC1lZGl0b3ItZXhwbGFpbiB7 CisgIGhlaWdodDogMTAwJTsKKyAgd2lkdGg6IDEwMCU7CisgIG92ZXJmbG93 OiBhdXRvOworfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3Fs ZWRpdG9yL3RlbXBsYXRlcy9zcWxlZGl0b3IvanMvc3FsZWRpdG9yLmpzIGIv d2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3RlbXBsYXRlcy9zcWxlZGl0 b3IvanMvc3FsZWRpdG9yLmpzCmluZGV4IGVlNTMzYTEuLmFlYjFmZGQgMTAw NjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci90ZW1wbGF0 ZXMvc3FsZWRpdG9yL2pzL3NxbGVkaXRvci5qcworKysgYi93ZWIvcGdhZG1p bi90b29scy9zcWxlZGl0b3IvdGVtcGxhdGVzL3NxbGVkaXRvci9qcy9zcWxl ZGl0b3IuanMKQEAgLTEsOSArMSw4IEBACiBkZWZpbmUoCi0gIFsnanF1ZXJ5 JywgJ3VuZGVyc2NvcmUnLCAnYWxlcnRpZnknLCAncGdhZG1pbicsICdiYWNr Ym9uZScsICdiYWNrZ3JpZCcsICdjb2RlbWlycm9yJywKLSAgICdjb2RlbWly cm9yL21vZGUvc3FsL3NxbCcsICdjb2RlbWlycm9yL2FkZG9uL3NlbGVjdGlv bi9tYXJrLXNlbGVjdGlvbicsICdjb2RlbWlycm9yL2FkZG9uL3NlbGVjdGlv bi9hY3RpdmUtbGluZScsCi0gICAnY29kZW1pcnJvci9hZGRvbi9mb2xkL2Zv bGRndXR0ZXInLCAnY29kZW1pcnJvci9hZGRvbi9mb2xkL2ZvbGRjb2RlJywg J2NvZGVtaXJyb3IvYWRkb24vZm9sZC9wZ2FkbWluLXNxbGZvbGRjb2RlJywK LSAgICdiYWNrZ3JpZC5zZWxlY3QuYWxsJywgJ2JhY2tib25lLnBhZ2luYXRv cicsICdiYWNrZ3JpZC5wYWdpbmF0b3InLCAnYmFja2dyaWQuZmlsdGVyJywK LSAgICdib290c3RyYXAnLCAncGdhZG1pbi5icm93c2VyJywgJ3djZG9ja2Vy J10sCisgIFsnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAndW5kZXJzY29yZS5z dHJpbmcnLCAnYWxlcnRpZnknLCAncGdhZG1pbicsICdwZ2FkbWluLm1pc2Mu ZXhwbGFpbicsCisgICAnYmFja2JvbmUnLCAnYmFja2dyaWQnLCAnY29kZW1p cnJvcicsICdjb2RlbWlycm9yL21vZGUvc3FsL3NxbCcsICdjb2RlbWlycm9y L2FkZG9uL3NlbGVjdGlvbi9tYXJrLXNlbGVjdGlvbicsCisgICAnY29kZW1p cnJvci9hZGRvbi9zZWxlY3Rpb24vYWN0aXZlLWxpbmUnLCAnYmFja2dyaWQu c2VsZWN0LmFsbCcsICdiYWNrYm9uZS5wYWdpbmF0b3InLCAnYmFja2dyaWQu cGFnaW5hdG9yJywKKyAgICdiYWNrZ3JpZC5maWx0ZXInLCAnYm9vdHN0cmFw JywgJ3BnYWRtaW4uYnJvd3NlcicsICd3Y2RvY2tlciddLAogICBmdW5jdGlv bigkLCBfLCBhbGVydGlmeSwgcGdBZG1pbiwgQmFja2JvbmUsIEJhY2tncmlk LCBDb2RlTWlycm9yKSB7CiAKICAgICAvLyBTb21lIHNjcmlwdHMgZG8gZXhw b3J0IHRoZWlyIG9iamVjdCBpbiB0aGUgd2luZG93IG9ubHkuCkBAIC0xNjEs NiArMTYwLDEyIEBAIGRlZmluZSgKICAgICAgICAgImNsaWNrICNidG4tYXV0 by1yb2xsYmFjayI6ICJvbl9hdXRvX3JvbGxiYWNrIiwKICAgICAgICAgImNs aWNrICNidG4tY2xlYXItaGlzdG9yeSI6ICJvbl9jbGVhcl9oaXN0b3J5IiwK ICAgICAgICAgImNsaWNrIC5ub2Nsb3NlIjogJ2RvX25vdF9jbG9zZV9tZW51 JywKKyAgICAgICAgImNsaWNrICNidG4tZXhwbGFpbiI6ICJvbl9leHBsYWlu IiwKKyAgICAgICAgImNsaWNrICNidG4tZXhwbGFpbi1hbmFseXplIjogIm9u X2V4cGxhaW5fYW5hbHl6ZSIsCisgICAgICAgICJjbGljayAjYnRuLWV4cGxh aW4tdmVyYm9zZSI6ICJvbl9leHBsYWluX3ZlcmJvc2UiLAorICAgICAgICAi Y2xpY2sgI2J0bi1leHBsYWluLWNvc3RzIjogIm9uX2V4cGxhaW5fY29zdHMi LAorICAgICAgICAiY2xpY2sgI2J0bi1leHBsYWluLWJ1ZmZlcnMiOiAib25f ZXhwbGFpbl9idWZmZXJzIiwKKyAgICAgICAgImNsaWNrICNidG4tZXhwbGFp bi10aW1pbmciOiAib25fZXhwbGFpbl90aW1pbmciLAogICAgICAgICAiY2hh bmdlIC5saW1pdCI6ICJvbl9saW1pdF9jaGFuZ2UiCiAgICAgICB9LAogCkBA IC0yNDcsNyArMjUyLDcgQEAgZGVmaW5lKAogICAgICAgICAgIGhlaWdodDon MTAwJScsCiAgICAgICAgICAgaXNDbG9zZWFibGU6IGZhbHNlLAogICAgICAg ICAgIGlzUHJpdmF0ZTogdHJ1ZSwKLSAgICAgICAgICBjb250ZW50OiAnPGRp diBjbGFzcz0ic3FsLWVkaXRvci1leHBsaWFuIj48L2Rpdj4nCisgICAgICAg ICAgY29udGVudDogJzxkaXYgY2xhc3M9InNxbC1lZGl0b3ItZXhwbGFpbiI+ PC9kaXY+JwogICAgICAgICB9KQogCiAgICAgICAgIHZhciBtZXNzYWdlcyA9 IG5ldyBwZ0FkbWluLkJyb3dzZXIuUGFuZWwoewpAQCAtNjM5LDYgKzY0NCw3 OSBAQCBkZWZpbmUoCiAgICAgICAgICAgICBzZWxmLmhhbmRsZXIKICAgICAg ICAgKTsKICAgICAgIH0sCisKKyAgICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9u IGZvciBleHBsYWluIGJ1dHRvbiBjbGljay4KKyAgICAgIG9uX2V4cGxhaW46 IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAg ICAgICAgLy8gVHJpZ2dlciB0aGUgZXhwbGFpbiBzaWduYWwgdG8gdGhlIFNx bEVkaXRvckNvbnRyb2xsZXIgY2xhc3MKKyAgICAgICAgc2VsZi5oYW5kbGVy LnRyaWdnZXIoCisgICAgICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6YnV0 dG9uOmV4cGxhaW4nLAorICAgICAgICAgICAgc2VsZiwKKyAgICAgICAgICAg IHNlbGYuaGFuZGxlcgorICAgICAgICApOworICAgICAgfSwKKworICAgICAg Ly8gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGV4cGxhaW4gYW5hbHl6ZSBidXR0 b24gY2xpY2suCisgICAgICBvbl9leHBsYWluX2FuYWx5emU6IGZ1bmN0aW9u KCkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisKKyAgICAgICAgLy8g VHJpZ2dlciB0aGUgZXhwbGFpbiBhbmFseXplIHNpZ25hbCB0byB0aGUgU3Fs RWRpdG9yQ29udHJvbGxlciBjbGFzcworICAgICAgICBzZWxmLmhhbmRsZXIu dHJpZ2dlcigKKyAgICAgICAgICAgICdwZ2FkbWluLXNxbGVkaXRvcjpidXR0 b246ZXhwbGFpbi1hbmFseXplJywKKyAgICAgICAgICAgIHNlbGYsCisgICAg ICAgICAgICBzZWxmLmhhbmRsZXIKKyAgICAgICAgKTsKKyAgICAgIH0sCisK KyAgICAgIC8vIENhbGxiYWNrIGZ1bmN0aW9uIGZvciBleHBsYWluIG9wdGlv biAidmVyYm9zZSIgYnV0dG9uIGNsaWNrCisgICAgICBvbl9leHBsYWluX3Zl cmJvc2U6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7 CisKKyAgICAgICAgLy8gVHJpZ2dlciB0aGUgZXhwbGFpbiAidmVyYm9zZSIg c2lnbmFsIHRvIHRoZSBTcWxFZGl0b3JDb250cm9sbGVyIGNsYXNzCisgICAg ICAgIHNlbGYuaGFuZGxlci50cmlnZ2VyKAorICAgICAgICAgICAgJ3BnYWRt aW4tc3FsZWRpdG9yOmJ1dHRvbjpleHBsYWluLXZlcmJvc2UnLAorICAgICAg ICAgICAgc2VsZiwKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlcgorICAgICAg ICApOworICAgICAgfSwKKworICAgICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb24g Zm9yIGV4cGxhaW4gb3B0aW9uICJjb3N0cyIgYnV0dG9uIGNsaWNrCisgICAg ICBvbl9leHBsYWluX2Nvc3RzOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy IHNlbGYgPSB0aGlzOworCisgICAgICAgIC8vIFRyaWdnZXIgdGhlIGV4cGxh aW4gImNvc3RzIiBzaWduYWwgdG8gdGhlIFNxbEVkaXRvckNvbnRyb2xsZXIg Y2xhc3MKKyAgICAgICAgc2VsZi5oYW5kbGVyLnRyaWdnZXIoCisgICAgICAg ICAgICAncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9uOmV4cGxhaW4tY29zdHMn LAorICAgICAgICAgICAgc2VsZiwKKyAgICAgICAgICAgIHNlbGYuaGFuZGxl cgorICAgICAgICApOworICAgICAgfSwKKworICAgICAgLy8gQ2FsbGJhY2sg ZnVuY3Rpb24gZm9yIGV4cGxhaW4gb3B0aW9uICJidWZmZXJzIiBidXR0b24g Y2xpY2sKKyAgICAgIG9uX2V4cGxhaW5fYnVmZmVyczogZnVuY3Rpb24oKSB7 CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICAvLyBUcmln Z2VyIHRoZSBleHBsYWluICJidWZmZXJzIiBzaWduYWwgdG8gdGhlIFNxbEVk aXRvckNvbnRyb2xsZXIgY2xhc3MKKyAgICAgICAgc2VsZi5oYW5kbGVyLnRy aWdnZXIoCisgICAgICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9u OmV4cGxhaW4tYnVmZmVycycsCisgICAgICAgICAgICBzZWxmLAorICAgICAg ICAgICAgc2VsZi5oYW5kbGVyCisgICAgICAgICk7CisgICAgICB9LAorCisg ICAgICAvLyBDYWxsYmFjayBmdW5jdGlvbiBmb3IgZXhwbGFpbiBvcHRpb24g InRpbWluZyIgYnV0dG9uIGNsaWNrCisgICAgICBvbl9leHBsYWluX3RpbWlu ZzogZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKwor ICAgICAgICAvLyBUcmlnZ2VyIHRoZSBleHBsYWluICJ0aW1pbmciIHNpZ25h bCB0byB0aGUgU3FsRWRpdG9yQ29udHJvbGxlciBjbGFzcworICAgICAgICBz ZWxmLmhhbmRsZXIudHJpZ2dlcigKKyAgICAgICAgICAgICdwZ2FkbWluLXNx bGVkaXRvcjpidXR0b246ZXhwbGFpbi10aW1pbmcnLAorICAgICAgICAgICAg c2VsZiwKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlcgorICAgICAgICApOwor ICAgICAgfSwKKwogICAgICAgZG9fbm90X2Nsb3NlX21lbnU6IGZ1bmN0aW9u KGV2KSB7CiAgICAgICAgIGV2LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAg fQpAQCAtNzAzLDYgKzc4MSwxMiBAQCBkZWZpbmUoCiAgICAgICAgICAgc2Vs Zi5vbigncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9uOmRvd25sb2FkJywgc2Vs Zi5fZG93bmxvYWQsIHNlbGYpOwogICAgICAgICAgIHNlbGYub24oJ3BnYWRt aW4tc3FsZWRpdG9yOmJ1dHRvbjphdXRvX3JvbGxiYWNrJywgc2VsZi5fYXV0 b19yb2xsYmFjaywgc2VsZik7CiAgICAgICAgICAgc2VsZi5vbigncGdhZG1p bi1zcWxlZGl0b3I6YnV0dG9uOmF1dG9fY29tbWl0Jywgc2VsZi5fYXV0b19j b21taXQsIHNlbGYpOworICAgICAgICAgIHNlbGYub24oJ3BnYWRtaW4tc3Fs ZWRpdG9yOmJ1dHRvbjpleHBsYWluJywgc2VsZi5fZXhwbGFpbiwgc2VsZik7 CisgICAgICAgICAgc2VsZi5vbigncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9u OmV4cGxhaW4tYW5hbHl6ZScsIHNlbGYuX2V4cGxhaW5fYW5hbHl6ZSwgc2Vs Zik7CisgICAgICAgICAgc2VsZi5vbigncGdhZG1pbi1zcWxlZGl0b3I6YnV0 dG9uOmV4cGxhaW4tdmVyYm9zZScsIHNlbGYuX2V4cGxhaW5fdmVyYm9zZSwg c2VsZik7CisgICAgICAgICAgc2VsZi5vbigncGdhZG1pbi1zcWxlZGl0b3I6 YnV0dG9uOmV4cGxhaW4tY29zdHMnLCBzZWxmLl9leHBsYWluX2Nvc3RzLCBz ZWxmKTsKKyAgICAgICAgICBzZWxmLm9uKCdwZ2FkbWluLXNxbGVkaXRvcjpi dXR0b246ZXhwbGFpbi1idWZmZXJzJywgc2VsZi5fZXhwbGFpbl9idWZmZXJz LCBzZWxmKTsKKyAgICAgICAgICBzZWxmLm9uKCdwZ2FkbWluLXNxbGVkaXRv cjpidXR0b246ZXhwbGFpbi10aW1pbmcnLCBzZWxmLl9leHBsYWluX3RpbWlu Zywgc2VsZik7CiAKICAgICAgICAgICBpZiAoc2VsZi5pc19xdWVyeV90b29s KSB7CiAgICAgICAgICAgICBzZWxmLmdyaWRWaWV3LnF1ZXJ5X3Rvb2xfb2Jq LnJlZnJlc2goKTsKQEAgLTk0OCwxMCArMTAzMiwyNCBAQCBkZWZpbmUoCiAg ICAgICAgICAgdmFyIG1lc3NhZ2UgPSAnVG90YWwgcXVlcnkgcnVudGltZTog JyArIHNlbGYudG90YWxfdGltZSArICdcbicgKyBzZWxmLnJvd3NfYWZmZWN0 ZWQgKyAnIHJvd3MgcmV0cmlldmVkLic7CiAgICAgICAgICAgJCgnLnNxbC1l ZGl0b3ItbWVzc2FnZScpLnRleHQobWVzc2FnZSk7CiAKLSAgICAgICAgICAv LyBBZGQgdGhlIGRhdGEgdG8gdGhlIGNvbGxlY3Rpb24gYW5kIHJlbmRlciB0 aGUgZ3JpZC4KLSAgICAgICAgICBzZWxmLmNvbGxlY3Rpb24uYWRkKGRhdGEu cmVzdWx0LCB7cGFyc2U6IHRydWV9KTsKLSAgICAgICAgICBzZWxmLmdyaWRW aWV3LnJlbmRlcl9ncmlkKHNlbGYuY29sbGVjdGlvbiwgc2VsZi5jb2x1bW5z KTsKLSAgICAgICAgICBzZWxmLmdyaWRWaWV3LmRhdGFfb3V0cHV0X3BhbmVs LmZvY3VzKCk7CisgICAgICAgICAgLyogQWRkIHRoZSBkYXRhIHRvIHRoZSBj b2xsZWN0aW9uIGFuZCByZW5kZXIgdGhlIGdyaWQuCisgICAgICAgICAgICog SW4gY2FzZSBvZiBFeHBsYWluIGRyYXcgdGhlIGdyYXBoIG9uIGV4cGxhaW4g cGFuZWwKKyAgICAgICAgICAgKiBhbmQgYWRkIGpzb24gZm9ybWF0dGVkIGRh dGEgdG8gY29sbGVjdGlvbiBhbmQgcmVuZGVyLgorICAgICAgICAgICAqLwor ICAgICAgICAgIHZhciBleHBsYWluX2RhdGFfYXJyYXkgPSBbXTsKKyAgICAg ICAgICBpZignUVVFUlkgUExBTicgaW4gZGF0YS5yZXN1bHRbMF0gJiYgXy5p c09iamVjdChkYXRhLnJlc3VsdFswXVsnUVVFUlkgUExBTiddKSkgeworICAg ICAgICAgICAgICB2YXIgZXhwbGFpbl9kYXRhID0geydRVUVSWSBQTEFOJyA6 IEpTT04uc3RyaW5naWZ5KGRhdGEucmVzdWx0WzBdWydRVUVSWSBQTEFOJ10s IG51bGwsIDIpfTsKKyAgICAgICAgICAgICAgZXhwbGFpbl9kYXRhX2FycmF5 LnB1c2goZXhwbGFpbl9kYXRhKTsKKyAgICAgICAgICAgICAgc2VsZi5ncmlk Vmlldy5leHBsYWluX3BhbmVsLmZvY3VzKCk7CisgICAgICAgICAgICAgIHBn RXhwbGFpbi5EcmF3SlNPTlBsYW4oJCgnLnNxbC1lZGl0b3ItZXhwbGFpbicp LCBkYXRhLnJlc3VsdFswXVsnUVVFUlkgUExBTiddKTsKKyAgICAgICAgICAg ICAgc2VsZi5jb2xsZWN0aW9uLmFkZChleHBsYWluX2RhdGFfYXJyYXksIHtw YXJzZTogdHJ1ZX0pOworICAgICAgICAgICAgICBzZWxmLmdyaWRWaWV3LnJl bmRlcl9ncmlkKHNlbGYuY29sbGVjdGlvbiwgc2VsZi5jb2x1bW5zKTsKKyAg ICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZWxm LmNvbGxlY3Rpb24uYWRkKGRhdGEucmVzdWx0LCB7cGFyc2U6IHRydWV9KTsK KyAgICAgICAgICAgIHNlbGYuZ3JpZFZpZXcucmVuZGVyX2dyaWQoc2VsZi5j b2xsZWN0aW9uLCBzZWxmLmNvbHVtbnMpOworICAgICAgICAgICAgc2VsZi5n cmlkVmlldy5kYXRhX291dHB1dF9wYW5lbC5mb2N1cygpOworICAgICAgICAg IH0KIAogICAgICAgICAgIC8vIEhpZGUgdGhlIGxvYWRpbmcgaWNvbgogICAg ICAgICAgIHNlbGYudHJpZ2dlcigncGdhZG1pbi1zcWxlZGl0b3I6bG9hZGlu Zy1pY29uOmhpZGUnKTsKQEAgLTE3MDAsNyArMTc5OCw3IEBAIGRlZmluZSgK IAogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgZmV0Y2ggdGhlIHNx bCBxdWVyeSBmcm9tIHRoZSB0ZXh0IGJveAogICAgICAgICAvLyBhbmQgZXhl Y3V0ZSB0aGUgcXVlcnkuCi0gICAgICAgIF9leGVjdXRlOiBmdW5jdGlvbiAo KSB7CisgICAgICAgIF9leGVjdXRlOiBmdW5jdGlvbiAoZXhwbGFpbl9wcmVm aXgpIHsKICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXMsCiAgICAgICAgICAg ICAgIHNxbCA9ICcnLAogICAgICAgICAgICAgICBoaXN0b3J5X21zZyA9ICcn OwpAQCAtMTcxOSw2ICsxODE3LDE3IEBAIGRlZmluZSgKICAgICAgICAgICBl bHNlCiAgICAgICAgICAgICBzcWwgPSBzZWxmLmdyaWRWaWV3LnF1ZXJ5X3Rv b2xfb2JqLmdldFZhbHVlKCk7CiAKKyAgICAgICAgICAvLyBJZiBpdCBpcyBh biBlbXB0eSBxdWVyeSwgZG8gbm90aGluZy4KKyAgICAgICAgICBpZiAoc3Fs Lmxlbmd0aCA8PSAwKSByZXR1cm47CisKKyAgICAgICAgICBzZWxmLnRyaWdn ZXIoCisgICAgICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6bG9hZGluZy1p Y29uOnNob3cnLAorICAgICAgICAgICAgJ3t7IF8oJ0luaXRpYWxpemluZyB0 aGUgcXVlcnkgZXhlY3V0aW9uIScpIH19JworICAgICAgICAgICk7CisKKyAg ICAgICAgICBpZiAoZXhwbGFpbl9wcmVmaXggIT0gdW5kZWZpbmVkKQorICAg ICAgICAgICAgc3FsID0gZXhwbGFpbl9wcmVmaXggKyAnICcgKyBzcWw7CisK ICAgICAgICAgICBzZWxmLnF1ZXJ5X3N0YXJ0X3RpbWUgPSBuZXcgRGF0ZSgp OwogICAgICAgICAgIHNlbGYucXVlcnkgPSBzcWw7CiAgICAgICAgICAgc2Vs Zi5yb3dzX2FmZmVjdGVkID0gMDsKQEAgLTIwMzcsNiArMjE0Niw2NiBAQCBk ZWZpbmUoCiAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KCdBdXRvIENv bW1pdCBFcnJvcicsIG1zZyk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg fSk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB3 aWxsCisgICAgICAgIF9leHBsYWluOiBmdW5jdGlvbigpIHsKKyAgICAgICAg ICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgICAgdmFyIHZlcmJvc2UgPSAk KCcuZXhwbGFpbi12ZXJib3NlJykuaGFzQ2xhc3MoJ3Zpc2liaWxpdHktaGlk ZGVuJykgPyAnT0ZGJyA6ICdPTic7CisgICAgICAgICAgdmFyIGNvc3RzID0g JCgnLmV4cGxhaW4tY29zdHMnKS5oYXNDbGFzcygndmlzaWJpbGl0eS1oaWRk ZW4nKSA/ICdPRkYnIDogJ09OJzsKKworICAgICAgICAgIC8vIE5vIG5lZWQg dG8gY2hlY2sgZm9yIGJ1ZmZlcnMgYW5kIHRpbWluZyBvcHRpb24gdmFsdWUg aW4gZXhwbGFpbgorICAgICAgICAgIHZhciBleHBsYWluX3F1ZXJ5ID0gJ0VY UExBSU4gKEZPUk1BVCBKU09OLCBBTkFMWVpFIE9GRiwgVkVSQk9TRSAlcywg Q09TVFMgJXMsIEJVRkZFUlMgT0ZGLCBUSU1JTkcgT0ZGKSAnOworICAgICAg ICAgIGV4cGxhaW5fcXVlcnkgPSBTKGV4cGxhaW5fcXVlcnkpLnNwcmludGYo dmVyYm9zZSwgY29zdHMpLnZhbHVlKCk7CisgICAgICAgICAgc2VsZi5fZXhl Y3V0ZShleHBsYWluX3F1ZXJ5KTsKKyAgICAgICAgfSwKKworICAgICAgICAv LyBUaGlzIGZ1bmN0aW9uIHdpbGwKKyAgICAgICAgX2V4cGxhaW5fYW5hbHl6 ZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO3Zh ciB2ZXJib3NlID0gJCgnLmV4cGxhaW4tdmVyYm9zZScpLmhhc0NsYXNzKCd2 aXNpYmlsaXR5LWhpZGRlbicpID8gJ09GRicgOiAnT04nOworICAgICAgICAg IHZhciBjb3N0cyA9ICQoJy5leHBsYWluLWNvc3RzJykuaGFzQ2xhc3MoJ3Zp c2liaWxpdHktaGlkZGVuJykgPyAnT0ZGJyA6ICdPTic7CisgICAgICAgICAg dmFyIGJ1ZmZlcnMgPSAkKCcuZXhwbGFpbi1idWZmZXJzJykuaGFzQ2xhc3Mo J3Zpc2liaWxpdHktaGlkZGVuJykgPyAnT0ZGJyA6ICdPTic7CisgICAgICAg ICAgdmFyIHRpbWluZyA9ICQoJy5leHBsYWluLXRpbWluZycpLmhhc0NsYXNz KCd2aXNpYmlsaXR5LWhpZGRlbicpID8gJ09GRicgOiAnT04nOworCisgICAg ICAgICAgdmFyIGV4cGxhaW5fcXVlcnkgPSAnRXhwbGFpbiAoRk9STUFUIEpT T04sIEFOQUxZWkUgT04sIFZFUkJPU0UgJXMsIENPU1RTICVzLCBCVUZGRVJT ICVzLCBUSU1JTkcgJXMpICc7CisgICAgICAgICAgZXhwbGFpbl9xdWVyeSA9 IFMoZXhwbGFpbl9xdWVyeSkuc3ByaW50Zih2ZXJib3NlLCBjb3N0cywgYnVm ZmVycywgdGltaW5nKS52YWx1ZSgpOworICAgICAgICAgIHNlbGYuX2V4ZWN1 dGUoZXhwbGFpbl9xdWVyeSk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8g VGhpcyBmdW5jdGlvbiB3aWxsIHRvZ2dsZSAidmVyYm9zZSIgb3B0aW9uIGlu IGV4cGxhaW4KKyAgICAgICAgX2V4cGxhaW5fdmVyYm9zZTogZnVuY3Rpb24o KSB7CisgICAgICAgICAgaWYgKCQoJy5leHBsYWluLXZlcmJvc2UnKS5oYXND bGFzcygndmlzaWJpbGl0eS1oaWRkZW4nKSA9PT0gdHJ1ZSkKKyAgICAgICAg ICAgICQoJy5leHBsYWluLXZlcmJvc2UnKS5yZW1vdmVDbGFzcygndmlzaWJp bGl0eS1oaWRkZW4nKTsKKyAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg ICQoJy5leHBsYWluLXZlcmJvc2UnKS5hZGRDbGFzcygndmlzaWJpbGl0eS1o aWRkZW4nKTsKKyAgICAgICAgICB9CisgICAgICAgIH0sCisKKyAgICAgICAg Ly8gVGhpcyBmdW5jdGlvbiB3aWxsIHRvZ2dsZSAiY29zdHMiIG9wdGlvbiBp biBleHBsYWluCisgICAgICAgIF9leHBsYWluX2Nvc3RzOiBmdW5jdGlvbigp IHsKKyAgICAgICAgICBpZiAoJCgnLmV4cGxhaW4tY29zdHMnKS5oYXNDbGFz cygndmlzaWJpbGl0eS1oaWRkZW4nKSA9PT0gdHJ1ZSkKKyAgICAgICAgICAg ICQoJy5leHBsYWluLWNvc3RzJykucmVtb3ZlQ2xhc3MoJ3Zpc2liaWxpdHkt aGlkZGVuJyk7CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAkKCcu ZXhwbGFpbi1jb3N0cycpLmFkZENsYXNzKCd2aXNpYmlsaXR5LWhpZGRlbicp OworICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICAvLyBUaGlz IGZ1bmN0aW9uIHdpbGwgdG9nZ2xlICJidWZmZXJzIiBvcHRpb24gaW4gZXhw bGFpbgorICAgICAgICBfZXhwbGFpbl9idWZmZXJzOiBmdW5jdGlvbigpIHsK KyAgICAgICAgICBpZiAoJCgnLmV4cGxhaW4tYnVmZmVycycpLmhhc0NsYXNz KCd2aXNpYmlsaXR5LWhpZGRlbicpID09PSB0cnVlKQorICAgICAgICAgICAg JCgnLmV4cGxhaW4tYnVmZmVycycpLnJlbW92ZUNsYXNzKCd2aXNpYmlsaXR5 LWhpZGRlbicpOworICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgJCgn LmV4cGxhaW4tYnVmZmVycycpLmFkZENsYXNzKCd2aXNpYmlsaXR5LWhpZGRl bicpOworICAgICAgICAgIH0KKyAgICAgICAgfSwKKworICAgICAgICAvLyBU aGlzIGZ1bmN0aW9uIHdpbGwgdG9nZ2xlICJ0aW1pbmciIG9wdGlvbiBpbiBl eHBsYWluCisgICAgICAgIF9leHBsYWluX3RpbWluZzogZnVuY3Rpb24oKSB7 CisgICAgICAgICAgaWYgKCQoJy5leHBsYWluLXRpbWluZycpLmhhc0NsYXNz KCd2aXNpYmlsaXR5LWhpZGRlbicpID09PSB0cnVlKQorICAgICAgICAgICAg JCgnLmV4cGxhaW4tdGltaW5nJykucmVtb3ZlQ2xhc3MoJ3Zpc2liaWxpdHkt aGlkZGVuJyk7CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAkKCcu ZXhwbGFpbi10aW1pbmcnKS5hZGRDbGFzcygndmlzaWJpbGl0eS1oaWRkZW4n KTsKKyAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgIH0KICAgICApOwo= --001a1143221e31ed120532775a8c 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 --001a1143221e31ed120532775a8c--