Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1b1BNB-0008Fi-0d for pgadmin-hackers@arkaria.postgresql.org; Fri, 13 May 2016 11:35:13 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1b1BNA-0004A0-Da for pgadmin-hackers@arkaria.postgresql.org; Fri, 13 May 2016 11:35:12 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1b1AIT-00023p-As for pgadmin-hackers@postgresql.org; Fri, 13 May 2016 10:26:17 +0000 Received: from mail-vk0-x22a.google.com ([2607:f8b0:400c:c05::22a]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1b1AI1-00013q-AG for pgadmin-hackers@postgresql.org; Fri, 13 May 2016 10:26:16 +0000 Received: by mail-vk0-x22a.google.com with SMTP id f66so131670658vkh.2 for ; Fri, 13 May 2016 03:25:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc; bh=yyU0q9aHTUAlUievoBaD6y+yuVTn5awA+Soc0Hx4jCE=; b=cVTujNn9Dzn3vs5ENspRk/1rYvqmCeP+xHVNV0aNCNMNeor5fWuYlAX+xd+gwn50cU ggLHKJsUCEPUmF7DO2cac+k9N7lnzpQmUQSnAZNfZvWLyAR9jSJiLbQHcHSkLWr7Mqpa 6CY/meqClXqi3bnyKZPON+8esXw9XDcGarEqCf1Hj8m09iXr6M4hS/UstVJHXQaNk8bk YeYM2RimJN/6AlstG0XNR7Qo/bgu6mv0IYrv9aYS93yBidh/Rtw7vCgLOP2QepjadKfZ +WMomiUs0kVti/am/Khy9ySXA1O+q8OdnSX17ghlx5pBuxvzhHlEf1eCZ1MYeFhGhlxi HHfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc; bh=yyU0q9aHTUAlUievoBaD6y+yuVTn5awA+Soc0Hx4jCE=; b=IAtxTvUzB+ei7nMT4xL08chAwTxTji3/d3WtKEWDCQuxh5wgWDk7qJa6HymlmRUBKY 4k+8BMBDReoOlBdPx5ZnyYsChMPPBjpgSP0RwRAH8rti0e2IqlBlDuh/67Ci54gkbrXI s2qgluRCFAueDEW4BOE1sMLYHssE2B4XWuBB4c4j3sYZGBj6WfbyAVbp8lFPR0pTY30u 0Rn1qNm8vBGI7eLcrGfKVWJ+k/LEFX+YEii879kkJ0xpgq4ya7Fzf3Jrbn8MAPL5ZBAT BEBLx2ytGNY48G04UmOCzNZ5aKDWo+V+hfMv+OYAD/5T6sWoktB+Qd0vNGBYLpeoAtUG t3JA== X-Gm-Message-State: AOPr4FWFMa0xnqkHvESDKaEpCu6n2+DmeqMdTT0JHLQ8SzQn87OSL52MbKBUlH3tkBeRpwPdu2ZoAx1ZtF6qgbVn MIME-Version: 1.0 X-Received: by 10.31.236.65 with SMTP id k62mr189487vkh.130.1463135147270; Fri, 13 May 2016 03:25:47 -0700 (PDT) Received: by 10.31.189.70 with HTTP; Fri, 13 May 2016 03:25:47 -0700 (PDT) In-Reply-To: References: Date: Fri, 13 May 2016 15:55:47 +0530 Message-ID: Subject: Re: PATCH: Graphincal explain integrated in sql editor From: Sanket Mehta To: Akshay Joshi Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary=94eb2c094aa2b6769f0532b6b2a6 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 --94eb2c094aa2b6769f0532b6b2a6 Content-Type: multipart/alternative; boundary=94eb2c094aa2b6769a0532b6b2a4 --94eb2c094aa2b6769a0532b6b2a4 Content-Type: text/plain; charset=UTF-8 Hi, Revised patch is attached Response in inline. Regards, Sanket Mehta Sr Software engineer Enterprisedb On Tue, May 10, 2016 at 2:54 PM, Akshay Joshi wrote: > Hi Sanket > > On Tue, May 10, 2016 at 12:21 PM, Sanket Mehta .com> wrote: > >> 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. >> > > Following is my review comments > > - Remove Demo and sample code which you have used for testing before > integration. > > Fixes > > - Facing issue to open QueryTool as there is some problem in require > module. > > Fixed > > - Please add 'codemirror/addon/fold/foldgutter', 'codemirror/addon/fold/foldcode', > 'codemirror/addon/fold/pgadmin-sqlfoldcode' files which has been > removed from your patch. > > Fixed > > - Remove below code from sqleditor.js which is duplicated in _execute > function > - > - self.trigger( > - 'pgadmin-sqleditor:loading-icon:show', > - '{{ _('Initializing the query execution!') }}' > - ) > > Fixed > > - Clear the existing contents of the Explain tab when execute the > query without explain. > > Fixed > > - If schema name is exists then please prefix the schema name to the > node. > > Fixed > > - Please check the data is available before working on it in sqleditor. > js at line no 1043 inside _render(). In case of "View Data" it throws > an error. > > Fixed > > >> >> Regards, >> Sanket Mehta >> Sr Software engineer >> Enterprisedb >> >> On Mon, May 9, 2016 at 11:56 PM, Sanket Mehta < >> sanket.mehta@enterprisedb.com> 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 >>>>>>> >>>>>> >>>>>> >>>>> >>>> >>> >> >> >> -- >> Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) >> To make changes to your subscription: >> http://www.postgresql.org/mailpref/pgadmin-hackers >> >> > > > -- > *Akshay Joshi* > *Principal Software Engineer * > > > > *Phone: +91 20-3058-9517Mobile: +91 976-788-8246* > --94eb2c094aa2b6769a0532b6b2a4 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

Revised patch is attached
Response in inline.


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

On Tue, May 10, 2016 at 2:54 PM, Akshay Josh= i <akshay.joshi@enterprisedb.com> wrote:
Hi Sanket

=
  • Clear the existing contents of the Explain tab when execute the qu= ery without explain.
=C2= =A0

Regards,
Sanket Meh= ta
Sr Software engineer
Enterprisedb
<= /div>
On Mon, May 9, 2016 at 11:5= 6 PM, Sanket Mehta <sanket.mehta@enterprisedb.com> wrote:
Hi,

Pleas= e ignore previous patch as there was an error in it.

Error:
Tooltip was not getting disappear when user moves curso= r out of image.

I have attached a proper patch wit= h 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 re= vised patch according to Ashesh's comments.
Please find my re= sponse inline.

I am currently adding minimap featu= re in graphical explain.
I will send a new patch for the same.

Regards,
Sanket Mehta
Sr Software engineer
En= terprisedb

On Mon, Apr 25, 2016 at 4:36 PM= , Ashesh Vashi <ashesh.vashi@enterprisedb.com> w= rote:
Hi Sanket,

Pl= ease find the review comments.
- Please add the missing 'expl= ain.css'.
Done=C2=A0
- The application should be smart enoug= h 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 s= hould at least render the output in the data-grid.
=C2=A0 i.e. EX= PLAIN (FORMAT xml) SELECT * FROM xyz;
D= one=C2=A0
- Please use th= e keywords used in the EXPLAIN statement in capital.
Done=C2=A0
= - Explain should not work with empty string.
Done=C2=A0
- Font s= ize in the tooltip is very small.
Done= =C2=A0
=C2=A0
=
- Smoothing the zoom fu= nctionality.
Minimap will be added and = zoom functionality will be removed. So it is ignored.

<= /div>
- Arrow marker is hardly visibl= e.
Done.=C2=A0

--<= /p>

Thanks & Regards,

Ashesh Vashi
EnterpriseDB INDIA: Enterprise PostgreSQ= L Company


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


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

This patch includes th= e 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.

Regard= s,
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,

= PFA the first patch for graphical explain integrated in sql editor.

Below are the few things which are different from previou= s patch which was sent for stand alone graphical explain.

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

=C2=A0- 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 ver= y large graph.

- Along with zoom in/out button, &q= uot;zoom to original" button is also provided, by clicking on which gr= aph will be scale to its original size (not same as initial one which is ac= cording to screen size).

Please do review this pat= ch and let me know in case you have any comments.

=
Regards,
Sanket Mehta
Sr Software engineer
Enterprisedb







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




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

=

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

--94eb2c094aa2b6769a0532b6b2a4-- --94eb2c094aa2b6769f0532b6b2a6 Content-Type: text/x-patch; charset=UTF-8; name="integrated_graphical_explainV6.patch" Content-Disposition: attachment; filename="integrated_graphical_explainV6.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_io5kvxrr0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2MvX19pbml0X18ucHkgYi93 ZWIvcGdhZG1pbi9taXNjL19faW5pdF9fLnB5CmluZGV4IGY0NjFjYmUuLjEy NWM0NGMgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL21pc2MvX19pbml0X18u cHkKKysrIGIvd2ViL3BnYWRtaW4vbWlzYy9fX2luaXRfXy5weQpAQCAtNiwy OCArNiw1MiBAQAogIyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVy IHRoZSBQb3N0Z3JlU1FMIExpY2VuY2UKICMKICMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCi0KICIiIkEgYmx1ZXByaW50IG1vZHVsZSBwcm92aWRp bmcgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRoZSBhcHBsaWNhdGlvbi4iIiIK IAotaW1wb3J0IGRhdGV0aW1lCi1mcm9tIGZsYXNrIGltcG9ydCBzZXNzaW9u LCBjdXJyZW50X2FwcAorZnJvbSBmbGFzayBpbXBvcnQgdXJsX2ZvciwgcmVu ZGVyX3RlbXBsYXRlCiBmcm9tIHBnYWRtaW4udXRpbHMgaW1wb3J0IFBnQWRt aW5Nb2R1bGUKIGltcG9ydCBwZ2FkbWluLnV0aWxzLmRyaXZlciBhcyBkcml2 ZXIKK2ltcG9ydCBjb25maWcKIAogTU9EVUxFX05BTUUgPSAnbWlzYycKIAot IyBJbml0aWFsaXNlIHRoZSBtb2R1bGUKLWJsdWVwcmludCA9IFBnQWRtaW5N b2R1bGUoTU9EVUxFX05BTUUsIF9fbmFtZV9fLAotICAgICAgICAgICAgICAg ICAgICAgICAgICB1cmxfcHJlZml4PScnKQotCi0jIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIwotIyBBIHNwZWNpYWwgVVJMIHVzZWQgdG8gInBpbmci IHRoZSBzZXJ2ZXIKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0K K2NsYXNzIE1pc2NNb2R1bGUoUGdBZG1pbk1vZHVsZSk6CisKKyAgICBkZWYg Z2V0X293bl9qYXZhc2NyaXB0cyhzZWxmKToKKyAgICAgICAgc2NyaXB0cyA9 IFt7CisgICAgICAgICAgICAgICAgJ25hbWUnOiAncGdhZG1pbi5taXNjLmV4 cGxhaW4nLAorICAgICAgICAgICAgICAgICdwYXRoJzogdXJsX2ZvcignbWlz Yy5pbmRleCcpICsgJ2V4cGxhaW4vZXhwbGFpbicsCisgICAgICAgICAgICAg ICAgJ3ByZWxvYWRlZCc6IEZhbHNlCisgICAgICAgICAgICAgICAgfSx7Cisg ICAgICAgICAgICAgICAgJ25hbWUnOiAnc25hcC5zdmcnLAorICAgICAgICAg ICAgICAgICdwYXRoJzogdXJsX2ZvcigKKyAgICAgICAgICAgICAgICAgICAg J21pc2Muc3RhdGljJywgZmlsZW5hbWU9J2V4cGxhaW4vanMvJyArICgKKyAg ICAgICAgICAgICAgICAgICAgICAgICdzbmFwLnN2ZycgaWYgY29uZmlnLkRF QlVHIGVsc2UgJ3NuYXAuc3ZnLW1pbicKKyAgICAgICAgICAgICAgICAgICAg ICAgICkpLAorICAgICAgICAgICAgICAgICdwcmVsb2FkZWQnOiBGYWxzZQor ICAgICAgICAgICAgICAgICB9XQorICAgICAgICByZXR1cm4gc2NyaXB0cwor CisgICAgZGVmIGdldF9vd25fc3R5bGVzaGVldHMoc2VsZik6CisgICAgICAg IHN0eWxlc2hlZXRzID0gW10KKyAgICAgICAgc3R5bGVzaGVldHMuYXBwZW5k KHVybF9mb3IoJ21pc2Muc3RhdGljJywgZmlsZW5hbWU9J2V4cGxhaW4vY3Nz L2V4cGxhaW4uY3NzJykpCisgICAgICAgIHJldHVybiBzdHlsZXNoZWV0cwor CisgIyBJbml0aWFsaXNlIHRoZSBtb2R1bGUKK2JsdWVwcmludCA9IE1pc2NN b2R1bGUoTU9EVUxFX05BTUUsIF9fbmFtZV9fLCBzdGF0aWNfdXJsX3BhdGg9 Ii9zdGF0aWMiKQorCisgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK KyAjIEEgc3BlY2lhbCBVUkwgdXNlZCB0byAicGluZyIgdGhlIHNlcnZlcgor ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK0BibHVlcHJpbnQu cm91dGUoIi8iKQorZGVmIGluZGV4KCk6CisgICAgcmV0dXJuICcnCiAKIEBi bHVlcHJpbnQucm91dGUoIi9waW5nIiwgbWV0aG9kcz0oJ2dldCcsICdwb3N0 JykpCiBkZWYgcGluZygpOgotICAgICIiIkdlbmVyYXRlIGEgIlBJTkciIHJl c3BvbnNlIHRvIGluZGljYXRlIHRoYXQgdGhlIHNlcnZlciBpcyBhbGl2ZS4i IiIKICAgICBkcml2ZXIucGluZygpCiAKLSAgICByZXR1cm4gIlBJTkciCitA Ymx1ZXByaW50LnJvdXRlKCIvZXhwbGFpbi9leHBsYWluLmpzIikKK2RlZiBl eHBsYWluX2pzKCk6CisgICAgcmV0dXJuIHJlbmRlcl90ZW1wbGF0ZSgiZXhw bGFpbi9qcy9leHBsYWluLmpzIikKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vY3NzL2V4cGxhaW4uY3NzIGIvd2ViL3Bn YWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9jc3MvZXhwbGFpbi5jc3MKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlhNGJjNAotLS0g L2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxh aW4vY3NzL2V4cGxhaW4uY3NzCkBAIC0wLDAgKzEsNTYgQEAKKy5wZy1leHBs YWluLXpvb20tYXJlYSB7CisgICAgcG9zaXRpb246IGFic29sdXRlOworICAg IHRvcDogNXB4OworICAgIGxlZnQ6IDVweDsKKyAgICBvcGFjaXR5OiAwLjU7 CisgICAgY3Vyc29yOiBwb2ludGVyOworfQorCisucGctZXhwbGFpbi16b29t LWJ0biB7CisgICAgdG9wOiA1cHg7CisgICAgbWluLXdpZHRoOiAyNXB4Owor ICAgIGN1cnNvcjogcG9pbnRlcjsKKyAgICBib3JkZXI6IDFweCBzb2xpZCB0 cmFuc3BhcmVudDsKK30KKworLnBnLWV4cGxhaW4tem9vbS1hcmVhOmhvdmVy IHsKKyAgIG9wYWNpdHk6IDE7Cit9CisKKy5leHBsYWluLXRvb2x0aXAgewor ICBkaXNwbGF5OiB0YWJsZS1jZWxsOworICB0ZXh0LWFsaWduOiBsZWZ0Owor ICB3aGl0ZS1zcGFjZTogbm93cmFwOworICBsaW5lLWhlaWdodDogMTBweCAh aW1wb3J0YW50OworICBwYWRkaW5nOiAycHggIWltcG9ydGFudDsKKyAgZm9u dC1zaXplOiBzbWFsbDsKK30KKwordGQuZXhwbGFpbi10b29sdGlwLXZhbCB7 CisgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CisgIHRleHQtYWxpZ246IGxlZnQ7 CisgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKKyAgZm9udC1zaXplOiBzbWFs bGVyOworfQorCisucGdhZG1pbi1leHBsYWluLXRvb2x0aXAgeworICBwb3Np dGlvbjogYWJzb2x1dGU7CisgIHBhZGRpbmc6NXB4OworICBib3JkZXI6IDFw eCBzb2xpZCB3aGl0ZTsKKyAgb3BhY2l0eTowOworICBjb2xvcjogY29ybnNp bGs7CisgIGJhY2tncm91bmQtY29sb3I6ICMwMTAxMjU7Cit9CisKKy5wZ2Fk bWluLXRvb2x0aXAtdGFibGUgeworICBib3JkZXItY29sbGFwc2U6IGNvbGxh cHNlOworICBib3JkZXItc3BhY2luZzogMXB4OworICB0b3A6IGF1dG87Cisg IGxlZnQ6IGF1dG87Cit9CisKKy5wZ2FkbWluLWV4cGxhaW4tY29udGFpbmVy IHsKKyAgaGVpZ2h0OiAxMDAlOworICB3aWR0aDogMTAwJTsKKyAgb3ZlcmZs b3c6IGF1dG87Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcv ZXhfYWdncmVnYXRlLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vaW1nL2V4X2FnZ3JlZ2F0ZS5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMC4uNmJmZTc1ZDkwOWY1MDkyYzRkM2JhODk3OGM3NWZiYzU3ZDdmNjA2 ZApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgNTc0CnpjbVYtRTA+Uy0+UCk8 aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MV5AczY5elRlJjAwMDA0YjMj Y30ybll4Vwp6ZDxiTlMwMDAwOWE3YkJtMDAwZncwMDBmdzBZV0k3Y21Nelo4 RldRaGJXPzk7YmEhRUxXZExffmNQP3BlWWphfl4KemFBaHVVYSVZP0ZKUUBI MTBsUF49S34hamc/VV93IyEhUXM9cE5yUjc2bmNgSkFpRXlmeVBVdSRGPzVs ZyE5YHRFCnpyVmRvcmpJNk8jKkI9TjFRNH5HVGs3dU9ESW1aJDdRaEVjcWJi ezJUISteQXNObG52cXp9MHYhT1pDcFZjZyt1KQp6U2wwM29ILXlsY0d5ISlG ajA5dT1VTj4kbU1JWCsmSHxiPGFqUCFnenB7ZjxOMnQzOGUxKH1PWXooWCle WjlTRG0KemFMJFBiJjtjWHg4NXR3YzNEKzl9WVl3V3RYKG42MXRnTEFaVmhB JkEwWkRveGBtfWZfbyY7THA9M158VFpBbTQ/CnpCOEQtdXcySGsmNzd4TH5H RCtIOFloe0wrLUR+b25SVTY0TiRtQ3t6OVpgWjw0JCV1eURuKHRVdUJCcWlU RT5AKgp6bmU2PllEVlZJVF58WXx1JjIlK1lLeFE0SCFaS044K1VrMGt3SktQ alcmPCg+QCRQakFlNFJDT25TbiVOcjAoPVAKellpfGZKMDRWX2huTCRjSDBL MyYlO3N6X1Y9QmdRRCljbSQpMnZ2aHM2QCpfaXNkckJmYzhrRHt5Zz03Z2t0 SVRGCnorUEdGdTIhME9lTFdndT41TEZwM0Q5eG91ckwhYlF1JWE/d2R7clJx Rkl2aSsrez1RISY+YWFWJUtUYXtkUzsyYwp6JDVvM0loRU9UeVQzN3g2MXBL MzAtSlg0S2JBUzdQazw1O1JfU1J1cz5qYkd5Q3JFQWowISNYP1BXdXJPeThy K0gKTTA3KnFvTTZOPCRmPlZVLSReWlpXCgpsaXRlcmFsIDAKSGNtVj9kMDAw MDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBs YWluL2ltZy9leF9hcHBlbmQucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0 aWMvZXhwbGFpbi9pbWcvZXhfYXBwZW5kLnBuZwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwLi4wMTdhMjA2OGI3MzVmMTNjYjg5YTNiY2IyODMyZTU4ODBkMTdk ZjU2CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMTYyCnpjbVY7NTFhPHB+ UCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDRp UCl0LXMwMDAxVwp6cnBHcGohRWVwKExjUXJuelVnKCY/fElQZ1JsQDBwKWJN Nz0+fXR2RVpfNFlJKzN8Yk0/U2okbXJyej83KWI1aGoKekAyfXpXMSpoUm4h UlpeVzw2RmgrViNuKF54OCtkMj1XRUM0YSthYU5rMmR1MSRuZm05QDlNU2g+ OXEzZyNxSCY+Cno/Y31pUjxGTjdTIXw+P0I+KSk7Ry1tTDF+dE1CQiQ+Kms7 RD4kZDZPbiZ7dHw/Jmg9UyttYDBvbDxlV0k8STwxZgp6KDJlUVpzcHtqTD0t cnMqKXteMU9pfE5ePzxrZ1luKH4jb01qT2Y+PEA5NEFiO2s/SkhiQDFsRT1o VVI7KTEmTyYKenghfXIpLW89STkhLVU8emc2N2VvLV5ocE0mIU9oZ3FUSWlM PGokWSg9RF9DQ3F3Q3FXPGp0UHIlJTA9UnA0K3tECnorUFp5KXNib0AoOEt1 aSlzTCpKdSlvaVpYYWtBaWN3ZEh6fW1DPEh2KGFYJjd5dVIkZHp3T1M+XjNs PXEhTlRzdAp6I1A4RzheVlFZIyRqST0/JD8/anxAITh0LS1ybzF1KlkpQXlf cUBJQXI+Vytzc15gREk/eWF4c3VkKFVII3FZPCsKekAzcHE7eDQ3JUx4JE0t YF52QjJXaUkoPnswMDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JSYXt2R1VOQnty O05CfkMzCnpZZCF6fjB6cFljS356WWA/VTN0SjU+WGgmP1N6R2VxSiRMTEQ9 ZkdPJVNCKmVrKCg+WU8paTJXM3ZPayNDU1lpNAp6blJmU0laKzltZnV5WklK WFpsZGpoai0/a2Q0SzBRJm9lVWVVI2V+KE1afTNpJmBwaEleY0szVSlvUkRr KnF5dCYKemFXcD1tKkg1QyFEVENvMiFYZ0BAKEt3MnhPKHhUUV51VE8zPihJ blF0eVlod1dAZEItR3t8Tjgmc2BwPWU8bl5HCnowPCN2MlclZ29QRGFyO21g eUIwbmQ4ZG5VMH5XRChKUlhaV3krSFlWM3gyUSVmPFlGWHAtYDlgajZAPDw4 Q2g3Zwp6MTA5UztveHBee3ZHXmR3ODtMfEhAR2t9ZUdfY1Zga155Y2g3VVN7 QWp9I1FPdGZaalQ2cFduMDlxMEtKN0lfU2MKemghZ01QXjsmMWE9Sihxajs5 eXpqM2I7OGdvYE9fNW95cD1xQ2EzVCVVIStKUkx2bzUoRVhQQVN6Z2o1Ymst bFArCnpPMG5APXU5U3clWU4xZGpBKHhCZ09RbjFVKShWd002XzQyYl9CcHZG KjZDVzhRXmVJMm5UOyVEJWhoVl8rOFQ0dgp6RUlTVj80OHlyMCNxKCtUe2sz QWIyRFF6KWZPaTJwOGNuJDU2aWFHfmUwfkZwbH1lKXVePTdqdjsxTT5GeEt3 UHAKeihyOWRnS3RfSG93JVRhTyN7LWFjaFU0VXhfX1VJdVNYTlRobEB2OFc1 VSNEVXQ3fVcjQjVvdyZOellhUE1rSm0tCnpgKzMjQjV2MUh+S05xblooTTgt QWR0Nz1xdlFPV3U7X3AxdnFaY0FeQll0aHpsODRldU5mQn00NU5ZU3Q/cnV3 Sgp6Y2xQI1BPV3BtMEg7Mis7dEtCfTVqPUo2QnctT2U0Y1hJT25STyswYWVm VEpTYHV5ZVZqP19Cc2JsVEZsXlprUzQKenpsalc9PHFEMWNsbGwoUi17YjJn OyQoNkYwMDFSKU1PYnVYVlJVNldWeyZDLWJZJWNDRmZsTUtGKX1TTUY7cEB6 CnpJeTVzbkcmQ3pQSDk5YWJJR0g2TDAwMDBiYlZYUW5XTU9uPUkmRSljWD1a cjxHQjdiUEVpZ0dQRmZtanpHZGVVaApjSXhzZFhGZn0/YkZ2XiF6dE47SzIw Nypxb002TjwkZzEjQWJValA2QQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9p bWcvZXhfYm1wX2FuZC5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2ltZy9leF9ibXBfYW5kLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwLi42NGQ1ODY5ZGNmY2Y5ZDk0ZDAzMWZhMDY4Y2ZmOTNlYTkyOTE4MGIy CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMDA2CnpjbVY8SzB9PWQqUCk8 aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDQpUCl0 LXNtRDJrRgp6MDAzcmQoUjZmbGIjLS1pYzZON25jWTFueUhpKkd7ZHdZQypl MTNqQGZQakY0ZmBXc0NnTUBeSGhsaHVWaD1ffWUKemk7YXpxaipnQ0dtQyVv bWtDMmQlayYlJiZqPXokVWxFSUhRbTZlcmBsSEdjcXNoT0ZYb1NkQVZvfVFi VyNHanZeCnpybHpLK3I+RDg2YTtUYE5QUUs+NXMmbEtXdEdsZHB5UkNNdXQq dShZPWRQfTx5cyZxI3VkbHRhZDhANEd6T3M2Vwp6eCFiYWB2U2h7Ungzeztt d0NadW8/QXA3MmRkfT9JeUB9a3VmVntvenl1SXorIUdlUik/WmQ7di1OSip3 IVMyUyEKeiMqNVZNLV5QYUQkY0t7RUA1YWFQO0wzXjAlRjJ9M0BaLXkjPElK QXEmN1JgV2pwV1hzJSsyeDUmaHE4WnEyfCR8CnopNj4oWS10eSh2bGpoVzwp eiNKSyl1cFo5XlZIUHk9K355YCpRZV4odyZ+aWE+RHNCPCtTPSpkc19OWFQ+ KVd7OAp6K316I1ctUnNgMD9BXktFLXJucnN0P2J+Zz9jY2xKLXVDUmB1aUBl MD9CbFRGO15PYip6dmJvU0BhRGtxPWZVVWEKej1qckxgQCQxQ3U+Z3c/REBi VTVTXjc4V1leWWl1Zl80ZkFtYDF0dHdgVDcwKntyfl59QzkmJU4wMDAwMWJX JT1KCnowNl55MFcmaSpIMzI7YlJhe3ZHZjY5NTFVNjlFOTRvRVFLQTBxO3Bm S356WWA/VVkkbDZHMFMoYjh9LURpM2tjUAp6K09vKV5oJDRid2x0b3F2TD9E RHtNamZfbkJxRH5PMj9BfnltaXhEem8qOWEqR219KU1DPzdadntjYEs4R3Z7 PlEKenZEcSRrb35vOShzP1FGKHdMIU40ayo1MkdKcXdheEBXSkV0aVV1flJy fWVTaEQ/JlZPY2FLKnBqIVZ1Z2I9c2cjCnpmWXslQGUpRGVLZXM7aXFycWsm eUNQRF9EIXItQ15OazQ8R1dNUmx4X3owRT09YHhWREVfZm5GajxPSkM+UHd1 Sgp6USMhPTlsRjg0VEJCYSpOUmpWT2k5TFAxSUFeblcyLUBAZkt3KjFMPDs4 b3BhR2FpcGBoX2w+K01sQjFHNlNHOVMKej0rdSQ7Qlh9NFVCayZSbzxPPT5F YGgrKE8xWkUqPjw8ZkBEdntIc0VJPG91Iz9uU0hgYHxaTihTVVJWLSVyPkh0 CnpOWG9vMXFQKyZoWWRnbD48a0p7c3RNSEJrcnpvb3lLc0peTmdfY3FsUz0j WUFqcDN6TzNAYlBpbnVIMCh2QHhQRwp6LXRofihUIW4yTVMoPD14I25ncGcl UCUjPmVmOXBvdDZBOW1jck41SDMoLXhpJD9Se3BBZVFmUUImOF9JcyVjfEgK ekc1dntRRGMoSnh7MkhUZ08paUo0O3ItdFY+e1BSPyVDZWxXKmNVbmBefjI7 Kjd6JGMkckxrYnohUT4lJDYpYkYjCnpnRE1oVzFecjxYITlYQmt2NlV5NCpI KWYoM0hiZUNeRVktSEAlS1hTalFMaUk1TU47fkdkWW8qUzs5Vl9GST1SPwpj Rjd6TWlBMD9AcUlqdT45VyZpKkgwNypxb002TjwkZjxxZkxPOEBgPgoKbGl0 ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4v bWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfYm1wX2hlYXAucG5nIGIvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfYm1wX2hlYXAu cG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2NTdkOGMzOTMyOGJmYzgw NzUxYzYwZGI5ZDNhYjQzNDFjMGRlMzUKR0lUIGJpbmFyeSBwYXRjaApsaXRl cmFsIDExMDYKemNtVi1ZMWctbXRQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVv MDAxJXcwe3tSM0RkQmo3MDAwNGlQKXQtczAwMDAwCnowMDNyZChOY3tXSGkq R29sX0ZZQFduYDgpMzh+QHx0S3d2cCZ+YyhVV3xxOzdqPSNaPUhoIVVTa0NO U2JvfmJSZwp6PGVRd3RJPUpQR3U1Xn5OSGJUQVdONUFQI3pVRTg2PX15N3ZU RVhYO3ltK2d1PXZ+Qz5pTWlXayNwcShqPlk+RDUKellzY3RsJG4ydVZWNihM OVpwLVgoJWp8RT4/eHhJVGNGcFhpIVFeXyo/QXlKR3l1SXZ1KGVIIU4/UyM/ cHpgXmM+CnopOXxkO1pIdl9Jaz01PiEpJGd2X2FtTDUqbC1UZj4rM35YQWND RlV3JSsyd2ord3RleEU5bHhQJkNjQGIrYlpuYQp6RCg+NFZAN3laISskIT9p RClpaGN4IWRmdz1ZMDB2RHlgcjFgUTBoey02Xz02XlJEM1lgYCMpMS1ZTmR4 RFpid0EKengkQSR4LXxvV1Q/emBAUz9jLXFZPDZwKCRAOV5ZYnl6cXFiPFhg alRVJnJJeyRtOCh5PHpNdldVJmBhfl8ycG1wCno8ek0qYVUoNGsyLXJufjM9 M25+ZVUoTXo2e05gVyY9M21rMF4zJiteXjZIMXc+R1JhLV56YGU4KjZIOzI+ eGNPMwp6aHU3LSRgc3wxTz8xdWpBaFQtcWBtRWNRUTAwMDAxYlclPUowNl55 MFcmaSpIMzI7YlJhe3ZHZjY5NTFVNjlFOTQKem9FUUtBMCY3VmBLfnpZYD9V ZF9OKD9BcihOZlErQHVCWnNVUVIqQSgzazdedWlBX3hsd2I3PFhYJFQyV2w0 Nnp3CnozWjxvbWYxVFpnZ2R9WTtHUmA9RDtDJEgzP0I9JjsmYkBjR3J7X2Zm TTEyJWlVJnNDKFl1fnB6TjdSUkJ1T199egp6OVNIU2c9PDQ7QylTSHB9azNM ZGcjd0kzenk4bHAqdWlkPSt3aEo9VStrNXJ+SEdGQWM7MytqV0phVFc2YFV7 dF4KekVFbGJQLXw4STJLRUhuZF4+XiYoLXZtdTMmPEU3WTwjRyt3THtZNFJ4 K0Y8OzszNjsxNlBKSEA1UEUtfiN6PVc7CnppWVd0O1ZOdyMxU2VCSk4yPVMy Y0EtbFVhIVozXm8jOGojYTVfSCt3QGdQISlXaTJHX0w0c0t2I0c5Zm4lV31n LQp6YGVSdDkkeSkqQklsJUkqSzk/KEdvT0ZAeFpRSTRaVXleMENEbDMoeUMo Q1coMHZWNSFqX0EhejhoLX1+bVQqJDYKemEyJSlsNUpYQC03IyRzZF9sZSV2 cGNqIXltTyNQZmJVTGtvM2RkI0MycDVEbkU7Ml5HUmU7SzZHOHpjYWYpSmQ9 CnpQU0g+KkNgRDcldn1UfVVYVUtDZHZjQ1EmNzQhQVFNc1AyYjJEKUVXayZD OFBUTV53cU03JH1xWSVacnElLUd0Ugp6Zyh6dVVTVCUhQFlBJTw5NWlZQiU3 R24yOCYxQUR4cCE8PUlFWCZJbDshVitsNVZqJl9ZLSNEKEdxJGpCPXpARkUK eilPRm88WEBfP0k2aF9FXjFfXz1wTFQ3OW9CUXJDPD1JMGxXTURqJHpoP3Vj YnNmJGEmPihZQDBBeXlWJGhmYSNOCnpWSG9YKjhKbjlzX0tld3hiM2NSemJ9 YE1wdTxvT1daK2FSKGVnTms0Yz9jazFLKjNFeEQ0Sm4yTXNMan5sZTFnMgp6 aDQyczwxd2xZYXZGSmtyRX5SOSRXVmBVWjBTck05JXBlbFRsRTU+RDklV3lP Sj0yQFR1Ml9HXkdhZ1p+NmE5WlcKWTBNei17QjYjYENyfm0pfTA3KnFvTTZO PCRmKXt7Skd5bmhxCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9i bXBfaW5kZXgucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFp bi9pbWcvZXhfYm1wX2luZGV4LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li4yM2I5NzMzYjU2NzkyNTMzZTRkYjI1Y2E5ODkwYTBhMDE0MGM2ZmY5CkdJ VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMTcyCnpjbVY7RjFaKD89UCk8aDsz S3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDRAUCl0LXMw MDB7Ugp6MDAzcmQoTmN7V0hpKkdvbF9GWUBXbmA4KTQ1e0xEbGFeJGEmfmMo VVd8cTs3aj0jWj1IaCFVU2tDTlNib35iUmcKejxlUXd0ST1KUFB1e01tWmJq ell4TCVpcm96dilpQz0xIyVzVEVYWDt5bStndT12fkM+aU1pV2sjcHEoaj5Z PkQ1CnpZc2N0bCRuMnVWVjYoTDlacC1YKCVqfEU+P3h4SVRjRnBYaSFRfFYj ZXRPUkErcjVkfnpKUj5GPzBlRGctTkF4YAp6KGR+ck0/JWwoS3pgXmM+KTl8 ZDtaUWpMJmlgNEdsJEFeKkM/JT5GWGxHWDM3K0h1Q21AOEhVYmwtVGckJSEt JVUKekAjNDttPElKQTI7QzhMbj5DRGFYPDw2a3YoVD9aWkU2dlhHPUZ5Pn0t U1h0cms+PUIrXjR1IXQpVEZ1Rj82PkU5Cnp0PjUkMSlicDwzXlhBIT09K356 SS1ZTXpXckByM3B4JEElRCs/VC1MPyY7ZDchcjw9Yy1rOXMheDlaJWc/Yy1x WQp6PDZwKCRAOU4jR3l6cXFjPFhgRkdvOXh9WCRLJndHPE03SmtAYSo4TiVq RUlpLXVDKENVKE16Nj9CbFRpPTNubU8KenozdF8oKGRZOCs9Q2FmMV5ZNylx XjZIMXc+R1JhLV53I1AwQGFNdHI+OXA3Q18zYFAke19LWUc/WilCbl9nPk1v CnpicFFZVzBkIUpNUXZnOGIqayU5IzAxMHFOUyN0bVkzbGpoVTNsamtWbncl SF8wME45akxfdChZJEwqQnNReFpgYQp6aGgyNm52aEJedk8xb0xvLUptRnY1 fE41WEJBfF9uUnhCOEQ3WGNNUjdGQHYjMHsrJFFWSzFfYT9CcTFsXnVoUFQK eipfcEhaJXh8N15lek9BdUMtWUJja1Ulcm92d3g/dkZJJll8I0R7MEVyb1J6 QTI9UWNPYm8zP2hYOGl1NmtIcHU+Cno+NnN0V0heayVYSH1BZVowdlhZMndL c15kT1QpdVlpT0kzP2RvI3BlcjFXeisrdTcmV2l+SzZTKHRMalh7PnZ9VAp6 O2tTQnspTj5FMHJfPD49dj5Tfl44YD48KHduMEsob1gwTUk/P1Q5ZjB9PiU9 dWgqTX5NbjBjITBHbWlldDZkMjgKejVSKVBNYHdEfndIWDRuVlJaQDAkV2tA MnlMTnl1K2JzPFVANWZOTkU3Ul8/R3llQTw7OFpAV3pUTUZiRnB5QWkmCnp7 Mz1WaWl0QkkqKzFaaCRSSTUjQjdLX0ViRXw9VGIxemV9WSNVWiEwTmM2bWRk OWshJFFTfHdJU3NCNitYZFg7Vgp6T3VoUj1aZj1zeCt+OGh9KTMxZz9xMmR2 VUpjVUVWbG5qJncjTiRhcGUte3FuVHs0LXZVe1RBYVFaPmJpb3gjc1oKeiRp fks+b1M1dWhjbShSWFQmQG0jI2NafCl3Tnh4dFFNcjhxJHByI3xvTH5gaUky XlB9JEpXOytxeSQrSGtKIzxCCnpPM0s9cmdmTml1JStBSWpWej05WkRqaSMw P0k1akVzbm1qNjN8VWxZbmw3a3hZLVEheDlhfnh3UVcmTk1sfUxvSAp6S3Bg MFA3eTkxKkRUTUkxQUkyRVkhcDJ6eUVmekQ/d197VFhuVjxpO2pFQXU+MUdM UiU0VDlmblJ2X3xAI3A3S20KendBRUBzaHs7NSRiY3tuZkUofih2RWVhR3hC fj8xTXhPblcyQHJhbj5yPkZ1WC1FTWNYLXxjZmh6UFVOe144K1J2Cno9SmFf Qng2eHA1X1VqbkF6MkleIVk/QzVGbk1AYCh4RDllZGtySD5nOylmfWUkIVAz QjZmU3p5Rn0+dSVUT14lTQptcn1EJnhkVmI/N0N3NE9iLX4wdyZneVgkQ1J7 aj9OMDAwMDxNTlVNbkxTVFlkZX5WQjYKCmxpdGVyYWwgMApIY21WP2QwMDAw MQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxh aW4vaW1nL2V4X2JtcF9vci5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF9ibXBfb3IucG5nCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAuLmMyMmZjMzFlZWUzMmU1M2FiZjYzNDI3OGY5ZDU3NzUxMTgxZjE1 YzAKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDY4NQp6Y21WO2UwI2Z+blAp PGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDAzMFAp dC1zMDAwMDAKejAwM0I2U1l+VXtIaSpHd21DJWlqenJsfC1rQ05TYm9+ZkZl bnd5LSZ4dTxlWXpVSTVDYkd4aWB5UkNMdyFSTmZOCnpjZkdOQnRFfWswdlUt V1IraG9QKXYkWDJFeTFIQDg/QXA3MmRkfT9JeUB9a3VmVntvenl1SXorIUdl Uik/Y0t0SQp6emBeY3wpYjhLTGhUcTdDbEdYM1YkTTR8RWlJbXZ6PElBNG8l JTBAVXA1b0FyPGokWVcmR0Y2N14zbD1KPDxPeiMKeihXMGlfXjV4Yyg9RzNJ Oyl1cFo5XlZIUHk9K355YCpRZV4odyZ+aWE+RHNDMyteWHVfc19XYWg+KXgj Ri1NUUBHCnp0P2J+Zz9jY2xKLXVDUmB1azdRbkA4ck1hPG1CKz8hMF9rNkAk MUN3P0NrSUZAQVVOYXxOc0FxeEFGRz8wMDA0Vwp6UWNoQzxLPDN6SDAwMDA5 YTdiQm0wMDBYVTAwMFhVMFJXbnU3eXRrUE1AZDlNUjdsNnwpTk4wS1U9Iypt aiRvKzAKelhHdjtTUnd4d2A2JT5eU0tAeD44ejVWfitsQ1c0MF5JPiRoWTw9 K2wjQ0NTPT9BIV9yR3RYWnAmeE9mUDQ9VH4xCnpMTHVEZyZWaEsjUTNoOXtC KyYqOFM2Zn5lQnBNTH5wKGImXnZuNkBVJDBUMm0jYns4WjVjZDQmX35NRUU3 T34tOQp6Zio9XzRHX3RufGAqJCZVRTB1O1ozQVVpQFdzX2twY052cHN4Q1NK N0VXLXchQnlKKGUqeitEbkcqViMwNnNBZG8KejU3Uih4ODk5ektweD8zcGlf fX0zSENWT2oxaCM9cjswJGNzbWlyWjB2VCUoSll8SFh6LWs1S2lUXzFPZ2M+ LSslCnoqSTJnPUVkI2dacmo8dDBaIXJ2YEtsOEA9eH57dnBfZURSMXJpTFU8 KmhMYTtMUjRJMXVCTkpQYzRQMD0+TU8xPgp6XjMldD1zLXBCVmZCbiRKUHJP b3hkTUVRZ01rWFRpNTRJNGJsUyZlfGtmYk5lYXhiJG5HVTwpWV5OO2NnQE80 cWkKVEY4OHVvMDAwMDBOa3ZYWHUwbWpmTGJHd1kKCmxpdGVyYWwgMApIY21W P2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGlj L2V4cGxhaW4vaW1nL2V4X2Jyb2FkY2FzdF9tb3Rpb24ucG5nIGIvd2ViL3Bn YWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfYnJvYWRjYXN0X21v dGlvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTk5ZjU3NDc4ODQy ZjYxY2YwNTgyNDMzYjY1OWQzN2YwYzUzMmQ1YwpHSVQgYmluYXJ5IHBhdGNo CmxpdGVyYWwgMzM0CnpjbWVBU0BOPyhvbEh5YHVWQnEhaWEwdnBeTWoqX0Az PyEyUzZPQDF5WE1qKExFMDZ7UFhJSG4hZTY0JGNFWEktYAp6emhETjNYRSlN LTlMQHJkJFlMUHYwbWcxOHYrYVA0OGMhRjs1UkxPJkN0Qzl6UH5kUytKYU1u fWNMNThWJmV3bkgKem5TIzFvN25pSj5ePipUWCpgUXpnTWREN1BPelBhVG8r dzw5dXdwTEwpMUYlVyMhSXFkaG9NU3hod3B+MEBjZjAyCnpoa01qbVJPZlpj YEVaKXdgUzt8aTwqZUBRcjhnUV5AOVIxMXw2UmM4fEFROUlSTGpTbVVPRmVX dE0pJSVab3pQaAp6UnBsJCYhKmc/aD9vY2dwalZNVjtFSj9MV0U9bVBiM2BQ Y3EyRCprdXgoMD9KTWd+P1UjI1NhSys2SmFwMV9sOzAKclJwbjRMPG1SVmpy ZDJ7VDcrOFdlZksqITxtX2FuMG5qWDNhc0RaKUwpejQqfVEkaUJ9QDQwQiEK CmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2N0ZV9zY2FuLnBuZyBi L3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2N0ZV9z Y2FuLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ZTFkNzc5MzcyZjdm ZDIxMmQyMDk2ZTc3MDFiMGYxYWYwNWE1Mjk3CkdJVCBiaW5hcnkgcGF0Y2gK bGl0ZXJhbCAxOTU1CnpjbVY7VTJWRDR4UCk8aDszS3xMazAwMGUxTkpMVHEw MDElbzAwMSV3MHt7UjNEZEJqNzAwMDkzUCl0LXMwMDAxcQp6eCFYMn4hRWVw KExBfmlrelVnKCY/fElQZ1FOcnB9IXM9SlU+VnducGlQaTlDJG4wdiM+fjZ+ SmwtVGleK1ZPbk8Kej9TUm5qZ1ZGN3otU01kMkB7Wksqaz01PiMqNiorM144 fX5pMiZtI256dilmRT1AK2Z6OWsxaEMjcGAwbj5vY3xHCnpJSmYwSnhhRCFu PzBDLVhQYD45P3p+QD1QPVo0WWtZc2N0cyRteH5XP152cDxyTlFLOG1lRHJC Sj1nVGYlSjg/egp6QFYzYkJ3JCReOyNfelZwQDN6d08ka091MSF0Uy1mP3pQ YkkkSWtKYHpVO0tVPzZrYj52JmB8djtxVWpqPnp9cGkKenAyelJEdmd3XyU+ N0IjeHdYTnUhdExMMW09Yk9Mbnc1SH5vclJKS1g8KGooZXYpQWhOd0NiTC0+ WWNDWW92LU1lCnpzcHAlYzwoaWA5bllydzwqNkgtYkAzeVkhb1Qlb1Ryezxm eD82YVdjbllaaCsoZWxUQD9YfUdDIz4oKTt4YStnWAp6QDVQRFJqbndKJSF8 dGBkP1g9REQkSTAtO3coN0ZBPmF3KXp2Yz5Qaik5Q1pWQDN5RHJudzthOW4m WCg2OytMfU4KenZDYC1CcDUmT0M7K0wxPW0kMiF2dWohblBzRCk4b1BDN2F8 Ujk7ZHpheXZhbEojSz8rdGx6NFo7Zyt4SXUrWmw2CnplMCtTXip4M0w3fENX fVBeNzhWZHFvYWVHZ3N8emIhUl5EJj1KR2R8SmEyRHIlRjQ9TlZQUlQpVHNG RXImZ0pyQQp6WWhacXZkI2whQGV2Zi1OZ0ZMTHZzYTlUQUlDKHE2PyE+TD11 Jm41PyEwcDQjPD8oXjZkWTtJZVFlOUcoI2g4KWMKem01fD8ra0tkSzU9ZGE3 O0B1PXNVVTE/ZnptMkgmSWpkaEszb3lWR3UtO31CNXVnY0BfaytGLVUtbH5r PWwjQVkhCnpyez1INzxNN015IykqbEU8PmxxUD84Mys2QEh0RjZJYU5EcW9O UEZhSmIlWjYjXlVkQD45TkdfI0lFU0RzXl9yMQp6PzhDaDUhPX5vMHJSSmBy PUJ+VCEhb31oNXZGV2pyO0ZnSHBsWk1Ac2gxYDsoPCptY3U/dXApJGgxYD5i Kz4pWkAKenQtfDIldyhHSyM7ZytRM3QlQlQ9cTIjVD87Tz8mSnUpNkVReGEr fmQtfG5wRXUmZHs9elU7JU49Qn1YUnQpSndyCnp3KDd5VCt3NmViayQmMmRw NXZ8NT5HUXRjP1hBfTdqbysxdy07e21Zazt2b2s9N0J5YTAwMDAxYlclPUow Nl55MAp6VyZpKkgwYil4Pk0yPjw1dnVeK1owMTBxTlMjdG1ZMDd3NzswN3c4 diQhazZVMDBZZlFMX3QoWSRMLVctUjh3YWQKejJYTVUzK1BiVU9zJigmfjJM ZVFjTFheWV4yMVFYSXE3V0Jvc3wrPjl0PUZoUU5XfGQ0alUoV1NMMGQ7MGkz MndVCnolYURNZXE1Pis0M199ISl6VmAoQCR2eHFOPVhpU2ghUk4hOUZackUr ez9DMUxaRVV7SmU/OWRHWVUoXyM1dSQjQgp6aDdCN0xqaHA8P15oZV5TWDNi bClCd0RwQF5LKUNHVUhlfTt7N1A2UTRMV3gwKVMzOUxPVl9VNWkwKGFsX1Vj WGEKej5EI2FXMEhYY0NmckFEVS16YTRXez5eb3M3VCtEcFU8XmVjVX42WSpY QThEV3JvOTY9SUk+djdVXnR1WUd5K0NDCnp5S3FLPDEhMFVIJjdnPiN0RSgj JG18UU5HMmRwdUN7I2FuVXhzTVpvaV51cDBvLXtJWHE4WUwwUFYjYUQ3SnU+ LQp6SGFOTUReTDdUIzFScX1ealpCP2RPU3R5SG84JmN5MSU2WWV4akJLcmQl OGFkMCheVyRHcHJMXnJ1fi18R3Vja0YKelB6eDZoWEV3fFU0NGVeVW1DT1pk Pk8zdlV5bT5ncWZ5Wi0xRFNwNFJYVGtgOTtFKHcqRCFAfVgyTm5jfWdvZT5s Cno3QjBrdT1TOCh4R185dF5WaCh1dmljcEpTQGU7e1c4ZDxnczZHeWFJS2VT amtjTDZ5MmR5RWVOcC04a203KCFQXwp6Ujw1IzZTYlk5IUhtcTRvbEl4QC1I UzBHfXIqeHg0Q0pVI0xPYDkrb016eFNlTTlTcm4zT09+S3FvYEF7V3RCMksK em5udCM2e2ojeGIrdlBoKkdEPDxsJFJvLTFRRX4tST8lWlclVzRtfGI2elc7 KiomJGMjLU0yc1gwM3J0dVZJbj1PCnpRcExzN1FqUSRLZ3R7SzxCSU9aQmVT fmxmaz5pSyg0fnNkV0tCLUJka3lFRUk1cU97V3t9Wk1CYj4/akJ4ZigqSAp6 I0EhNj13S1FfIUxOJUdiKnlDYkViKGcobjxrST1lSXo1ZUN4cWBgajRrekhN XnhBY192NiRLfWN3PF92SzlOUmwKeislVVVpdXtUTmIpQF9pSXg5OzQ8a0hf bDk/JWwmRnZwdDFAM21fO1lHJHs9SlIpIX0+THdyaHRfQ0VaUm53RmtICnpP TF8xQjZMZFg5XzxCZShBPjNlNCQzWTVpayghbkxGbyNCUmIxP31ORWY8R0Ns NFBZITNDVWA7Q0l6JVEtSj9gVQp6ZkJmKUM5KnNQR2lwZXZ2U2V5aXpHVEhO RlBAVUFFWFE2K1RtNlpuaFBZTWJPWTI/S1ZPb0JwX2FFcTYhKzdea1oKeiNW YVZ2RD1hTGNrPUwpa2BkP1gxQVolJS1ALVJmSi1XMTJmVGRscSU1aTtefkBg fDlTdzZ2XztKTyNiQC1vMnc8Cnplej03U3M7PnZ0QXt9eVlpJkNTcCFlbVl1 Pz58JmxldDZIWTBwKVhwSz9USmh8SFheViVGYyhwZiZ5YkhsdlB3egp6bkpp T3NEPVR4VWx3XlppVD9gNEFiLUVIciVZS1gmVFdCO0klZk03c1dsNTB2Xm9l PllMdiZubU48N0B4bSF4TEUKenRDfCpOczcxTlNXR2M3WlNqfXR2WWN9P017 JEtNTUBKMDdIOGxuezUwMDAwYmJWWFFuV01Pbj1JJTlIV1ZSVTV4CnpHQjdi UEVpcDFKRmZtanpGZ2kzZEl5NXZaRmZ9P2JGZ1RlZDlzbUZVQzNIbnRiWXgr NFdqYndkV05CdTMwNVVLIQpwRmZBfVNFaWZAdUdCWXxmRyYoUmdEPTstV0Zm aHVPUmpkRjIwMDJvdlBESExrVjFpYj9DNVpxNAoKbGl0ZXJhbCAwCkhjbVY/ ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMv ZXhwbGFpbi9pbWcvZXhfZGVsZXRlLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X2RlbGV0ZS5wbmcKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMC4uY2EwNTFjZDVkMDFlZTJmM2FjMTc3NzliMzYyOTk5ZDgy YTkyODViNQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTEyOQp6Y21WLXYx ZVdgV1ApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcw MDAzXlApdC1zS0xEXj4KelRVK1FzMmxoPThIaSpJNWIwXk15RUQ1Uk4oMTk7 PG1aNmY4bEVJSFEqTjtndXdkSGxEJExmJC1MQT5iOHFGQ2FlCnpYLWRIOSRF dFBYcWkkV3E+U008MFlzY3RsJG4wKio+fitvVCtQaSsreT9AKWlpUUsrYCtg b1coKGVLPkJmYHJsVAp6LU5TPX4pOX5LSmd4PHg0LW99UUUpYjhLTWh1X0dF az01P3QkJSowMmlrSTIoPElBNG4mV3oqQ3A1KUQqOz9SeGMKeiZZeiYkQCNF NXU8PE96eih+IyFUcTJ8JHw8a1hTbyh4VCttbElHSys8PF50dClUSE90ckxO JWY9R20wISpRViYjCnpyez56MD5EWl5+KntKOC1tKzlLNj5lO3NHK3A2b0B4 OUh4UD5mTmdCK18+ckJuKE4tST9BXk5TLT52TjR5Nm9Wcwp6PmZAYTQtQEVN THVJPUV2PmcxajU7Oy0lRHl6SnchP2Q3clc8aTczWnZoTD15QDghVm89RF9k aHYrd0QoQGFWJHUKej5COHtydyg7eDReNmthKj9aKSUpJFl5KGMtfmEjczBk IUpNUXZnOGIqayU5IzAxMHFOUyN0bVkzbGpoVTNsamtWCnpudyVIXzAwT20x TF90KFkkTCo4YmRsXnZfI2Y4YkctUExMJW5oTWN+cSNgbVEycUJENylGb21Q Z2M2Mk1RTWRnNgp6azNEbkZGZVhOdGhranJDa29+WnB7TzBWbl9NKnxlJXMt Zzdsc0hSTzRXWX5pZ0pGbC0rY2NSRHNEbj50XkNAK0AKeng0KFoqb2djWn5V bnkwQHUpZS0tcGYtYDNzRT5OUi1jMFF2ZTRqZW4tWnMwYnp4MnYweXpeMzNM KlFYSjk2bjY3CnotfHZyTUVDfDh+TW0qMENmY3lyKUlGQWhQP2B3VFlgP3Q1 WkpySWh5VHBSZGdHRn1Cak9udz1TM1ojYVM4Yk9Legp6MilTSTJoaHtROU1a UWxhLTMtVmB6bE1LfHdPMUA2cUBEWWc8ZT9zcSNWUWgjJHIhNT5raUZwalhE KXRWN3RIfC0KenMrQ2UjQD90ZjlwQCVjKEomM2J+YiQzeXY/XjxpMFdkP05P WT5hej9Gb3NkUCY1dk1FdVU1T3o8djZaMHtqaD1vCnpvbVEqV1pPQVR+cUtu SENhNiFMNkZZaUNjTlFoN0BsMzxme3NLemNZSU48eiNaKzxRJiV3VGc8MVA5 Q0dVQEk1Rgp6QU97N25tKEdHbCRyeEZmZDBCTVAkIURgSW1fSXNMI2lONGUm NHhJQ05ObWE9M2ZWemRYeDBha2J9Sj14aSV1YioKej8/NVleUEJsUTtNQFZP MHVWfCRHbGBkJUhCN0poflYmUEdUMGFnJUZrSD05bGg7cVQ4eld7bGZycWhy KmJ+enMtCno1LTNKbWw5VTlTckI2OyRrWj9Na2o1Pm4kPVlDMm14QGFMNnNZ Qy1CRVc/eWw1ej9eX2I0fVk/bVlEbnMjfXp0agp6XyZUZlBNdlZsXi1hJERV M0Uhd01oV0I1PzlhdHF6S3JSaiRoJmIlX2tVRH5rcCtII1lwKDZAbXlXTz9+ IUkzSHUKej1GczU/TCYkRWsxPU52RkhrKW9LeXAkdTZASEplQTApZ3UlNjVH Tn1kJC1zKCltS2BuMWlBdnpKQkVwdDtVKkxjCnpwO3JQdi08QTRlcSE+Z1Ey WDxpLVVIQnsoJWI3Wm9hRVprcjhwWGxOaCh7ZV4oR3tZU00oaVJJdS1QbT1J OXJhfgp2RjtUUVgoUm1rRjkqXmhoaU50b0ZeUklsRnw3bV4kSDAjRnVzP2tG VTAwMDAwTmt2WFh1MG1qZmh3VzYzCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEK CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWlu L2ltZy9leF9mb3JlaWduX3NjYW4ucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9z dGF0aWMvZXhwbGFpbi9pbWcvZXhfZm9yZWlnbl9zY2FuLnBuZwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwLi5hY2JhNDljNGZiZmQ5Yjg3MTQ0NGM5ZThkNTI4 ZGVkYTNhMzdkZGE0CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxNjA3Cnpj bVYtTjJEdGYmUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNE ZEJqNzAwMDhuUCl0LXNHKk1KOQp6R2NfX2pKdTUmJkcoSkJ5S1JfLStNP1hW Rkl6PmYwTW4qcU1PRUZHU0dFaD1OTy1AS21QQmxfaE5saX5nUGZ0WnEKelAp a295TXAwNXRRZEIhd1RUNTB+UEZZJHxUVSRZMlZOaElMTFNTTjFVMHFhUVVg SiRVUiQqZFNWcTtpaVdKemFnCnpTITg4ZVdvQkR1WEl5NyFWck9ZeVg9K2J4 YTk/VWBOXm8qa1pFPEY2WkQodDRWUXA/eGFkY3ZDWiUlWX1We2RSfAp6YUIq ZEVhJHN8RVdeIXxGYWRjQzhkdjA9ZFhtb1hOYjlRTlViISZIYmJhO0RyZDNK QW1kbnx+LVYxSSZrZHd5N2gKemloWH40YiVCOSpnTShnKmthJmNJZFdNRjNo bGhOS2g8SjtOZXV8Mk9pSHJjSzw5Q2pkMElCN0dqRSNiaGtCRShzCnowSXVW U2oqKjBya3BRc2VnXmBrZGwkZUs7bHg+I0prQ1Q+KG02blFAbXg3c3tnUE5Y ZnB7OWhKcE5FXjhqKyZjUwp6cztpUW9wTnljTkZ9M0JLb3x9eExzNUgwZGpp amtJeGFwUnJ0ZUt7IXByeHBxcj45RTE9UztvbW9+eGApelVpb3sKenIkRUIm VEVPTn0hdEh+Jnk8NVRPdCpAK0ghc3hFQnQrMkFMcFNIVjt4IUdVRT5hbngw VmFNIVokbklweEAzcHRJCnpZc2x6cSQ/MnVOIUVNVXdacC1WY3pyTHV6I2M8 OC1xcj04PiZoRGtiPTUpflVlYWBUTyhDb3AoemxQRTYhbzxPYwp6KChiXjsk Z0lySWlxIURNJEhhQChAeTV1LWtrI3oyJihnPXEjKng8VCNtZGMrKlkyPjwp UmZyb3Yod2c9K1ZRbTEKeipSfEV5c0BMbnooOUV7aCswVzY9eDdYVXgoJEJj cStycm5AcmBfPDwpWH1La0B3KGdJKTc4P3Qrdn5nQi1ATSk2Cnp0S3N5JC1y PmFEO2w8dEp6VFdRRytTYjN7QDViTmJ6fkolNjtOLSNLXjJwKWwjXlVZQzte KVdYPyNrb24kbUgrTwp6PG0xV1pAWGg3dy17SWNTPD5iLWs8PGFIdygmeSZW PUpNZz47TTNebSk5M1dzPWpZVnVfMW95XzxtVGhtPkdzXnwKej5nREk7LVJr U3M+LVhPND9CREZ8O08qfD0/KGdkQz5FSDE3QEEyO09eWUhaZF5ZezdvYHV6 Ril8TkgqYGB+cWhICnpQWEdWXzBkIUpNUXZnOGIqayU5IzAxMHFOUyN0bVkz bGpoVTNsamtWbnclSF8wMFJkfUxfdChZJEwqQmFQWkxvVAp6IyZPP0o2ciRw O0RESH44cUVYWmw2PDVILTRZbElGaXlNZl9ieXBIYG0lNTtXT0kmS0RnKX4p K0dgNTNHaFkqSFIKelhJT2BYU1NXfW5JZSZxKClZPSleMk5Hal47NT9qcHh4 ZjN9QDYwKkolY357K2J6SD53QFI7MnAqek1UM3hNYntaCnpMYy1aYyp3ZShz PnU8MlBfd0p7PiQzQ1B6ZkI2WT5pXk43b00jZl8mKkc1SE0hVj5vI0phaHZ+ ano0dWUxeHJneAp6eTgwVVhPRGVtQ0grIyZJdnIyX1IkJGR+QSVkJk1zdTBe JVpZKTV2aG05YEBacU51TXxAQ2ErTVNYamk4QjxZJE4KeldGLWdfRWttbFNK dEtxXyhJISg5cV5qeVNMUGA7YUFQOERPRWJiQVJpeFM9aVAxaGhCTz5ecSpr YVdheyQxRnVFCnpEK1FIVzdacDNoRnF7ZmEoPjckSUNgenY0Sy1nWDNuXnlF K2UwWChxYzs2e2dGWUZCKmRoPFp3cX5xSTw/VGteQQp6R05odEhNMHhga2sz K2NCQEZhQlU3QzEzJklLWV9FbXRsT1dDIWB5fGhDJWEzMG44b3U0QSN0T0VE SCQqaTBKakQKenY4emdzbCRNSEtgfmRjaDRHUkRXVSRffVEmdl53cyZvfSV5 KkJLclRjXztUJFRyNV9zNGdhdT1FJnd5e09vWDRfCno+bWN+c25KZUZDIT1s TWVEa2RVPU57SUpKZX1FJVBBfFMmejJ0R3BhSmplcFNUViVPUnJLbXtzKGdQ cUcoRXxhTgp6RkwoajdNcylsTig0amooKzROTU0rKUg3aGZHYDY5KSsxVnwq bl47ekZ9X0QzIUBvfSE/QkF4LTVpK0VwS3QkJVcKelk4IXkpOXFuM29ZQ21E KUhRaDN3ZXVLQko4cy16MG53allWc3AwOyQxK2lScUhZWSpnNEEtMUUhTUhg NSlub2JqCnpQOEF6c0RhelVXPD1uaUsycVBkQCQ7JVRFZWw5M1A+R2dVTmsk T0U+Qn5yKGBBVCprRVQheHM8NCNhNG5fYF5KKwp6KHtUdXFESW4/VG8pQyt7 VT82M1BNbmZSbkdzMDQmVE5oUnckRWA5WEhARGRwNkFfbjFRSTFONGB4KVZX UERRI2QKenhXJCo5JWBaT303bGd6R3UyIXB6TkhXR2JUNVMkRCU2fH5DdW98 MzQpSHBKIVI4bUIjRmwpN0RRSDhHKERIY31hCnp4TDw4VE1tZlNVVCpEfEdV Z1IkTHJEcmkzams0OX1TbVZ2OVNXRW4wQGU0O2g9bkhWaFRBY3NAMDAyb3ZQ REhMawpGVjFtKipPTlJnZQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZm IC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcv ZXhfZ2F0aGVyX21vdGlvbi5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF9nYXRoZXJfbW90aW9uLnBuZwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi4wNmI3MjgyNjg2MjA5ODk2NjQxMmE5ZWQ5MzIwZWQ0 NTE0ZmUzZTVhCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAyMTgKemNtZUFT QE4/KG9sSHlgdVZCcSFpYTB2cF5NaipAeEJwQSRHdyNvbzByamo3UFU8UVY9 JCE5Rzx5ZC1hVDdZND89CnpVQlhMJUprQTEtJFlMUHYwbWcxOHYrYU5rSzJJ ME41USlwbDJAPFQkb0QyKyU2QnJuZSZjNXZsbHU8MmxqVk1WOwp6RUo/TFdF PW1QYjNgUGNxMkQqa3V4KDA/Sk1nfj9VIyNTYUsrNkphcDFfbDswUnBuNEw8 bVJWanJkMntUNys4V2UKYmZLKiE8bV9hbjBualgzYXNEWilMKXo0Kn1RJGlC fWFWOWNJCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93 ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9ncm91cC5w bmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9n cm91cC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGQ1ZGUzMWJjMTI5 YTlhYmNmNGE3M2UxOWE0ODczOTEzOWY2NjI3MQpHSVQgYmluYXJ5IHBhdGNo CmxpdGVyYWwgMTIyOAp6Y21WOy0xVCpgSVApPGg7M0t8TGswMDBlMU5KTFRx MDAxJW8wMDEldzB7e1IzRGRCajcwMDA0aVApdC1zMDAwMVcKenJwR3BqIUVW YXpNN2A7RCZoQzU5P29ZdHpSbEAwcCliTTc9PzNVVF9nMzt9IS10dnlyP3Zt RTt1aV42cnJ7Tm99Cno8NkZoK1YjbiheeDgtWmM9KEVBNWYyQ1ZlalR3ZmlX T0EwRmd0MTFVIzlxT1ZIdVVod0BhKHRtPjl6OWgjcUgmPgp6P2N9aVI8Rk43 UyF8Pj9CP0JLMkktbUwxfnRNQkIkYkVHIXc9QVlAe24me3FgPyZoPVIqX0d0 ZWttQXNlPkRzQzQKejxEQkh4bEh0c1k+RGl+XiZXen5TcmxRQVNAOTRBYjtr PjVJV3loKkBAYURraClUSExxcXdMK2VjQndqXndUSXghCnppUWRKOS1vdTM1 IUdoK3xxMklgZDw8RnEzKUB8SXJmYUp9ZGlAczNyPURfUk93emNKWjxJSkFw JWJ2VU1nVzlgJgp6ZCRkRTklVXBHIU9sTyFsailramNZdGhXakB3fnE1elE2 NnkmK15nSF4xe09JIV5ROEApYnJLVl52S0JZJDt0N2AKeiVra09UXzFAbjEq VnB5bztyRzB+PzVDO2JzSCozYHp3V0BvP3lheHN1ZChVSCNxWTwrQDNwcTt4 NDclTHgkTWkjCnpAeV5janpgXmQrKWJ6KjRAUkY2JHlHTG9YMDAwMDFiVyU9 SjA2XnkwVyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5DMwp6WWQhen4wKXQ2Skt+ ellgP1VaUigrQ1VWQigqZGBOUWZYYTZefnohfTFPeV5zRl5WLXZRNlBuaUI2 Z1dwdX5uPEsKeio0bG1qPnp4VHBOclpGRT17WV85O0MjNHo7bzs4bjxfISNV ZWc1XmlmI35UdkowWndvd09WXm5aKG8xXjAyO1Z5Cnp1PyhXWVVZbChRNEdy N3Z3QF5wS0l4O2UxTVNUdjM8MkpmOEl5ITFXSnB7TCo7anVBYDlzVHV8QGQ9 aTdHSXpCKgp6Y2J4YGVhJXpmWVZBfHohTypnMDg/ZT43akpIej40bWlHJCom PkA1Zmt9Y3F4bzExZXJyYUtmME41Q3RKQWBreGcKelhqSVo4PntRVDZLM1ln RDx8YXJ1PjsrRFkkTmVCZ3FsdSZ1VlZPMjBNditLM0VPTmxkPE1SU1kzeUZr bUtvO3ZyCnolVkxSSWFNWiN0NVF7KWttUXd+flN3cnB0SnpaeHo7UzVlWG5f Snd8O0U2PU1LSmY4OHpYQWJDTn5SI0NEQ3QkdQp6NXpDcVRiKGRIeXZfdmRL YWZWcFRRO1MzKkR9JURPcDM4Jm9Te1pFI0x4VDxKZ0gyfCQxcUlVVXh0eXhv bDZsYkIKekArVmxuNXYqSiZ0ZmU4SiVOMHZIZVBgeGotTmg1fSZkX0pnYCF8 UzFRbk5AQ2kmYSVFbD97bilub1g+VWZSRSQmCnpTeSZNU0RGNyoxUj48JD9e SipFJnJMQnJfJVhTXiU7YE1xZ1hjbFhsTVVoeCtSamJ2QzUhdWw/KX5IOFl1 eGhiYgp6RWtXZm5HVnk0OGhjQHxndSUjbVhhdENDYkZ5d0JxQXhJS1FObWV1 cW0wRTAzaSpsdTZiUXlvbHZne00pRFc8M0UKekdgd1BxJWNQbjMrNEo0cUp6 VSUwZkFKQ0A5M0gobyM+YWNMKzZnezZJNT5UYzRkb0JnY09TbndKOX5TTS0o NmgxCnp8QTBTIWB1eWM5eyZ4Ty16bE1NT0pVbHV6QjNmZmlBa0ZlJDljaCpT Pk1wSkZ8SSg3X0l5O3IkTH1KYkluQFZoUgp6JDdFc0BHNWNJLSNrUzJvZWZx fnd3cD1+Mj4rYD56LSh1ZStKMm8kO0xJM34mQzNIbnRiWXgrNFdqYlNXV25w dz4KejA1VUshRmZCMU1FaWZAdUdCNyRjR2RlVWhEPTstV0ZmY2ZvQl8wMygw M34hcVNhZjd6YlkoaGlaKTltXmM+cHBuCnFGKSVHS0lWfl9UUjVDTDxHJkRM ZUhZK2VTSXhzTkdtc1A5KTAwMDA8TU5VTW5MU1RYQGBHbylnCgpsaXRlcmFs IDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2ltZy9leF9oYXNoLnBuZyBiL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2hhc2gucG5nCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAuLjlmMzVjNzY1MzhjM2E0MTkyMGE3YjkzYjk0YmRm OTc0NDNkZjdhYTcKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDExNjkKemNt VjtDMWFBOUBQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0Rk Qmo3MDAwNGlQKXQtczAwMDFuCnpzYm9AKDhGaSt8SGkqSFkjOW5YQj9vWXcj ViNleHMmaDRoJkA8Rn1uMzh+Xk52KmJ5PD04NG5wWT1xNWJZdGhXagp6QHhh MEUjPmVsPyZocDtnX01edlB5dUl6S3RtdzB9PmVTVHBycCNxVnp2K0lfP3kx cGZpYERSdipZSS04PzBuQWMKenB4ZzB8KWI1a2pAMn13Vk9UWCE/KUBeMFQ+ cUVRZFBgPkFFJExYJXhhZ3ZxTWErYWE4O0M4YH1IdVVreUBhKHM9Cno8YXpW JSRNNUt+PyZoLWI+JXtFaXU8WVRrP0JLMk49ZlVnZHAxMF9JQDlETVotSShS b2xIfThuPmZObG0/U2Jhbgp6bUYoaUw8SSNAayteVzNyZ3lQU1E+RHM5NDtI fmZGITB6Rl9wRyN6XjdaPUI+YiUyZn5iI140UlEkRktrVzkzNmIKei05YlVR Pnd1NFpJUGNgWT0rfiNgKX1gIzt5TXxqQSg+XzFvJGNXI0BoVVYweXUtJFhY NUUwQmdKbUppVy1vJTlGCnooeFNjJjQjaGg9O0tfKkghLVU8emc2N2VvJXcx alIpfjQqO3gjclFMPDxPeikrcWR4TyFzZ1NZPGokYiMqfHl1Zwp6ZjctZno8 SUpBaXprJWU8cDV4MSYtaSRASzAwMDAxYlclPUowNl55MFcmaSpIMzI7YlJh e3ZHVU5Ce3I7TkJ+QzMKellkIXp+MCFUP2pLfnpZYD9VVTxVNTx3V25AcFY4 RVF0NV5qTjtmU2taIVpedHhaZWE+IzNjaVhNR151ZTVsYipgCnpCTEJMKEJu Q0BNX3tsemFLRmwqU2B+MDNXPWdoMX5iZj8/Wjc+byZpOHotRWAyTURuK0xu SVRFKGtVYFBoPW15PAp6bGkhPTM7VU9Ic0dCPE4hNDxfZ2B0S2MtdC12JlZz a3d8Zz4hTlcoNzYkNk5KMnJ+RU4+RDtxeDxmPWRkRGo/bEMKenpmdkFUQihu Sz1ET210REpTUSgrTj8qTXVRO1VtQlpeI2Z0Q1lRX0trX3BoakowZntNe2I3 TzNPZkR9a14mJE9QCnpTUWxCeFdrdUwhd2JSJlljZSZPJWA1SitCQWwtUnE2 bX4oYVBOJm5ON1c4MDEhLW1tbExYLUtVI2Zyak5QLW5CKgp6YmZeUDZJTUM+ SEk/WlR5eCFqKEFCTSRKdzI4O043bmBtKm57ZWUtQ0Vpal9sPVd8KW08TSMo QzlHPUMmcmVGfl4KeiNpa2A+I3E5dF5nP29gNW4kdTJxODl+SFB1dUhRRHtU VnEkZXZkcn05Z1c1SXFWJTxrIVFwXjdkfHtDJlpTe0JwCnoyQEVxI2E9K0p3 ai1gT0Z4RUZSSV5fQk1jZ0tQQHNBZjMraUJPcTJQbGA1NTV0PGtKfVRpNUlE X1BCUW92ZV9JUgp6MjxHeilDZXckOWcrNjVPdVAmK1ZfYW1DaD1aaV9xOTNH Y1dgakJXWWNsNl49N0woYmBXJEEyJm5WKVFtKUFDOD4Kelk9cCkqMntwI1Ft dFU1VVhCIWd+I2V7SmBRIVNrMFMqPSM5NTQtKTQrc3s0XkRxbFFFVillTEdz JGl8clhyMiM0Cnp1OEoqayNnPEYwUnQreTImMVFRVChwemskKW9ScjZ5dmF2 K1NyUWIocktsRmxvZkg+IXRoZHxrekFVYElHU2JgOQp6WHBNfmBVWTdwfHhw QHt8VnxUaUJUPj4pNHB6Y1FoQmN9aVcwM34hcVNhZjd6YlkoaFlhJUV3M1dk SmZURiklR0wKekdBJUdNUjVDQytHJjRGaEclR01RSXhzTGVuSSM/bzAwMVIp TU9idVhWUlU2V1pFc3wwV19iV0lGZmxNS0ZnWXpTCmpGO3BAJEl5NXZvRmc3 Yk5IOTlhYiU5bUJGMDAwMDBOa3ZYWHUwbWpmcip+OVcKCmxpdGVyYWwgMApI Y21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3Rh dGljL2V4cGxhaW4vaW1nL2V4X2hhc2hfYW50aV9qb2luLnBuZyBiL3dlYi9w Z2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2hhc2hfYW50aV9q b2luLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMmE0ZTkzNjlmYTc4 YzZmYTE5YmY1Yzc4MTRmOGE1ODZhZWQ1NTY1CkdJVCBiaW5hcnkgcGF0Y2gK bGl0ZXJhbCAxNTcxCnpjbVYrOzJIZzNIUCk8aDszS3xMazAwMGUxTkpMVHEw MDElbzAwMSV3MHt7UjNEZEJqNzAwMDhuUCl0LXMwMDAxKQp6eW0oVEw4SHVe dUhpKkhZIzluWEI/b0doeVZhRHJyJkZyUyRAPDY9bDYwNzFZdipidjs9ODRu cGJjQHd5WXRoV2oKekB4YTBFIz5lbD8maHA7Z19NXnZQeXVJd0p0bXcwfT5i JCt9KVlTOCglVmIhYiVSe35DTjVBUHl6dis5Pz99WEZ2CnpzTCpKYSszfSM7 QHJLZ3dqTVZPcykkWHB+Xjh9fmkzOH5AX3NeVTw+PlJpUl50SlEzRSZGcTJE P093eV5XeVI9Zwp6JExOJlNAMj1XJHJLc2Uzb35nM25jNENVNyFIK2lkQHlZ UCl4QWdHSF5ZRjtFPCRDayYjYDVnTj9kR3hWPGdvMUgKenU8YDF7PiprOzk8 KH17Qncoc2UreGFvZkc9Q2tlUHZGRjtCPUdtM3oqcCUkeXVKRykoPmcxajM8 REt2N3dlUlYpCnp5NnU3RypPVFNlbEkhMkM+ZkBhMDsrKmQxdiVLKHg8a2dZ bih+Iz1qdEd8WFp3fWdQT1VPdXUpNlNRR0ojRV50PQp6WDFNZTMkTTVLfl42 a2EoPkJJMm4hUnA8cj1nX0lRVT5uSXo4ck0tRztaIUc9UjhzWm07aXBxPHNU VVg5eUBgTzEKekM0WUQ8eTwwfVFZJEQ9UkRGNlRlK05PJWBXQGhMX01DM3c0 LSQ2cCpWcUA7K3ZicFBrbDZeVnY8aUZ8THNfRUxQCno+RGoyaVlCYS1lTCsz KzhpKEQ5S2NeUVJUN1NsZEk7bXdRVCVabEwyaUwqLSl2YGlHP0xQRGEoVSE9 KW1yX0Utbgp6KHJUXk9aP041U3YqTEtSPVh8XkdnVSU4WCN9RStBSlVyPnly e0t3bS1eaG8pWER7MThLIWpRciNTYWpeNGkzZ1UKekpMdVBALV5ZZ0QjZjht fVRpanRgJnBrY0xKVXFvYUpJcX5PQGFWJHE7SH5UNnQmNGolP2NjbFIpVEhM cXF+X0EyCno8O3RWQWs4cTF4YS1tTi11dCpaOG9YUE8hITBPenA/Jkg0Zztr QFY4clJVWTg/QjJUVS1NUXdgcVVGKHs8PEZ0KAp6K1BDNypqcEVMWDttbkth KnIoXiNycipiaC1vfVJCI0QoVjNxMT9jTStgb1heekpUUDtwWGIhMS1vdTM1 IWhfdHQKemZaTSUpK3F7MHsmN1M3ZHF1cy1VLU5KKDB6PUdQbGVkRWlYPWhk YTwoNHBuZXB6R1BUPElKQXcqdFdIcWVxYjtwCnpJeypMeDBkIUpNUXZnOGIq ayU5IzAwQ2w0TT9gLX16ajVVTjAwMFNhTkxoMEwwMDJrOzAwMms7TSMqYkYw MDA3WAp6TmtsPFpOWEtKZjd6RzBnNz9+SngkfXpLbTA1Z1VUUkB7MTYqd3tI WnhtWWxDdTtTTGshcCswVyRCKDgzcXl3bWoKekcrVGZVISljM3ZBUDVNYzNw MyVnZ01tUiVOTFdOdk9ifG5oSTM2dCRsMlh6I2E0cGFQV01QdEpWdTcmYkZv RzBLCnozayNkUGZ9Iz9PR0xzNkVEdk8lQmhOYyMjWFZKQkFZd1BJaHZGSX15 RmQ0RUs4Sm4xelZGb0ZoVSpOV3c8Rj5eRAp6OUFYd1F0fGkjem1NbHpHT2Vf JCNIQWF4NCo8eGRCWEo9PGA8R3wjfDxZZVJRO19CdlpnQXRAP2V6Q0ZoQGJ2 VnUKekBuLVUyXjBvMnY0K3NwaEt+O2M3T1IjNTFYcVpoblF2e1FyamF5KTNS NVcyTlVMaTVEO1dsd2hAbDArdUt+VntiCnpOeSNheFkzVWk2Yz5JIyg5aUUr STt8JGMyWW0qbjlsd1ZMLVI5c1NBUjljNDZRZUZXOTx1R29namczdGVRKntN VQp6T0dPUWtaQnR1UlM2NSRPU0paJmVRcWtEZCt8cFZCeDVYKjBqajVmZjFF ezY3cU8rXkpyPzxFY3FeR3pLTmxYNigKekNVbnBxIThETysoJlVRbkRPMENT RlIySVZEVmMkIVdoTjhyRWItYTBiNSFPVSVybD5Gd1pMKHFQa1kyN3Jvfkhe CnpSeEYjZ2U4dE0qZFhPRnpUVU0+Y1gzT2R8WXU4bipVJEo1MXJYckE2UTJu eGIlaHFrJTVxe2FSYX5JR3J5VE84Ywp6X1VfdyVmYW5rZDBkUj1mOTZXVVIk bCpnckB4O3JxcX5sI0RZKS1CfWJeNDZXKj5tU0ZUcUs7dmokZ1diPCpMb0sK ej5vOyFoeDRDdXUmZlI7MjZBVU98KlcyOVJffjc5IW4rdU5+S1kyPTYzbiph aytkTzt6O15oVUtkeWsqSWRXfVUzCnpucU4qe2QkU2tsaSg3QnNVOUBAczts dH5YbjBgVWFtNmhPN0xNQV88RHF6NF9qXlA3Pjcpfjg1VDFmWWMxeEEzMwp6 ZiZtNXFQMiVnbUZJbk9IMDAwMGJiVlhRbldNT249SSU5SFdWUlU1eEdCN2JQ RWlwMUpGZm1qekZnaTNkSXk1dloKekZmfT9iRmdUZWQ5c21GVUMzSG50Yll4 KzRXamJ3ZFdOQnUzMDVVSyFGZkF9U0VpZkB1R0JZfGZHJihSZ0Q9Oy1XClZG Zmh1T1JqZEYyMDAyb3ZQREhMa1Yxa2d4UShwaTgKCmxpdGVyYWwgMApIY21W P2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGlj L2V4cGxhaW4vaW1nL2V4X2hhc2hfc2VtaV9qb2luLnBuZyBiL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2hhc2hfc2VtaV9qb2lu LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wMDUxZjk5Njc4Mzg3M2E0 YTI3ZGI0Yjk3MTEzNWU5NWNhYzhkNzQ0CkdJVCBiaW5hcnkgcGF0Y2gKbGl0 ZXJhbCAxNDUyCnpjbVkrQ1N4fVApNm9uJjxpbEM5d0RXWX1qMUVXPT1WRyZz Xk15TWM+VkVfZElXc2YyJU9PUT5WUF4zYT4jZXpiaQp6USRXZnBOLTtvVzJe YiY9a15sKldCP0ppQl93YFR5S1ZZP092YD9LbT1ibjNLPylQQGVmJndxPnZm TzcwZ1RaJEIKemB9cVckKCgkNyQldVZ4YVVVbzRJVz55bn40KXJ5aXdTP144 cFpBc3h0aGtocEp8a1VFbk8wdlMlMz4qcyV4UHNTCnoyazw3eVkmIVdUZFcz IWlhVCF5Y1FORG1sb31IVDM1bDdYTzNDOzhqen5NbERPdkRtfm03T283Si11 P211eGZyQAp6cFc0Wis4fFN2cjU9Zzc2Kko3eGhhZFRLfDlGLVpuMXo/Vz0j RVU/aGEpWWtnNz9WT3w4OGpoPjdCIW08WWxoQisKeitpaElLT0ZtZT10Z0It S157Yz8zNyRpIWRFfWtDOCpZXnFabFg3RGhKRlRUJW18TmVHezxOTXVRSFNH WiZOQiFeCno7diVrM0khS219Uj01fitsVW44TCU/KTluRDBrQisqbnxXfHtX ND97en1mKExCSnN2TDd2Yyt5VikyR3J7WjFpbgp6Rm9OdVVTJUp+OHRYRUl6 KWlrfHwySS1kOElOLXY5ZXRGcmojKGB3QU98MjRkR19WSSVNUzJ3I1AqT3Fk bDBzQjMKejd5aG8xXiVBclgwT2NnMG07XlA4OFU8Yj5ANiQrbzAzfkA3OyVe dnVNbUBKSjxhV29OSnVBYXlnXiVwPkdtbnN5Cnp1RzEqWGI0O0JZZ09VMzky dk8oUCYhS3A2QHA9X1NFeWsmWS0yO2xrJTZ2Q2F5PGpqJkhFLTBkT1YwYjBO NypJaQp6PkBBNn5XdUU7O0MjN2c1NnM/JFNQJT9RYVIxK24tY2B+a1Q4dU5W YSoyfEBvP2xvKT1LTn5OfThgMmNkKnd7PjEKelRUZ2o8WURGWnlnMU9ARHtV RX1ZeXhWI040eVNsezc/a3JgNW1fVDVYQHVpP2BQXiEzRVp4aEM+Z2hATEBS KylHCnpPKFBoUXZmM256RSM+I21LdzF1e1N5T1RiI2p7TiEjeHZuZWdKS3lF WTFiZ2w4WCVobXF6cThLeDtqJDBMTVVKbAp6PHFLJV84WC12fDcrM1F+KW0p UV5mUH0jd0RxcyloWXhyWlRic2B8OXQ0I34lalpSRkx2KyRzTDRVbz0pc3Vp N2gKeiMtTDt+eUhpeWgoJFRsNVFkMmR6V0NSQz56YFZzUWpPb35zPlVSfXVP MjFHM2J+NT5fc2w7ZjFwTDN5cDZZKCoyCnpUZ3xRUFlWRmRmNG4yaTFyeXQt flImJkV5RUh+R0lhQVphfGV7cDxsZFltPjwoWW0kU3kjMWtiV0ZkUyFzbDQj OAp6ZystJjQ2Uik/cD12PElyeEtBa0JgaDI8VEw0LXxaQFNJflI7eFgqVylB LTY4bF84Skt3O1V+dHczPCk7NXElTCYKek8rV1ZobVY5NCZUP0VeR0ZnPzUx K2JwUVV6aFRtUWhWaG1+M1owbys5aDxaQ3dSI0BTI2ZKOzw8WmIpb1QjI0p8 CnopflFTZzRNIyhkcHU9M0BQUDNFIWNoY0AqdiRDP1ZVPHtBfDtFYSRDKU12 cGhjM1EmSUQ1XmJTTWd9NyZZWUV3IQp6K0c9cnN7Y1hGe1BRdlFuYztKSklz RW4kcjRnTkp4YEpwTDxJYWZBWWBBaEJBYE8wYkdqWUN6e1JsaHktd0hrfkQK enRTcmw7JThNZjJzey1jcXoodDEtIUJebUJpTzlQcG90Pz97QSghMlAwJi01 Zmw1UD5keD5EWlVMZypUS19OcnQ1CnotMmlPQkBzS1k9SmMwczNhKns2RzJz X2g/NVAxIXdySHpQXmoqNT0mUCZwRWtlXnB6fHlPejlUcERVYm9HUWpCeAp6 TW8hMW90QkAxZXlWO1JjJig9KlYrdj09S15ATilhd3VwZjB4U204QVBJUjBh KSlnXn5MRChWYGl6JSVCOWxWPDkKek5XOXF4K14hUy1gOHN4PU09OUxGbilw U1dSRU5WWnNsRCFCOHd2fSZOfXcwflEpSXE8X2gqNmVMJVI+VDx4YnRCCnpI VktYX3ZKYmlEJFBJaFBjM3xrc1NqblMtbGg/OFFfZ25yZFphV3AjPy14I2Nn Kn1XJnJib055RiNldEBxMUY2cAp6OVQqPjBhbGoqVTBifn5gd3hfVnhgX25+ WTFvfTsqPXdlWG16I3dQYSEtV0hVKUs3TVc7K2t7S0JeaHJUT0lTemsKelFl bSp9N3V2P2wqM0VnUWc0dCpJaEchKGlXK2J9RHJ6ZV5NPTdAQWFBey1uTU5R WTJJcWBSfHx5Ui05ZzxZeyojCnQoelZ3OTtReFItREc1b0tvY3tvJStiN2BU dz4jNDFLWSZfdWBHcEM5YFRHWD9iZklGdHt9KUUoTF4lS2UKCmxpdGVyYWwg MApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X2hhc2hfc2V0b3BfZXhjZXB0LnBuZyBi L3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2hhc2hf c2V0b3BfZXhjZXB0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NmM1 NDZhNGRhZGQ3ZmRhZTMxMGRhZmNlYzJlY2RlZjk2NDlkNGM1CkdJVCBiaW5h cnkgcGF0Y2gKbGl0ZXJhbCAxMzc3CnpjbVYtbjEpbG5lUCk8aDszS3xMazAw MGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDY+UCl0LXMwMDAxcQp6 eCFYMn4hRWVwKE9+QzE0I19NKj8/NTV1R0spbVNedEt1eFA8VmR7Y2lQUD82 bUMkQnUoYWc+OXpgXmR1JE00T34Kel40e0x8eXVJd0p0bXcwfT5iJCt9KVlT OChzTl9ZeT19ZkBzUV5NK24pYk56cEBPc1lkZ1ZGN2EpYjZke15PP01PCnpR akhtcXdydHF0JUxsMDk1VWIpRXVIIytCPnY3Qk1QUUs8XiFSS1ZmPSN0ZyVw flBOPHV0anBDSEZ9PEBZTEJNRAp6azJkdTIkPyl2QUBhKHFsPiRkYW4kRCtx ej5nMWozPERCVz5uKHBTYXF7P0lPPmJCfE9vOU4kfT1pUWc9PEZLZEEKelg3 QXs7PS0heTsrbWAwb2w8ZVRHbSVEWF93bj11WEpNcnRwP0JLNUotbUxIQnpx LSsqdUcoPlV1MEdxbmlNNSUyCnp3QnZkMz1EX0xQc19FTE89K34kMS1AQUlU TEZ3QTU7TEQyTiRjTnM9aDMzKHNqbG9tcypRVmRiaFRnLTMtTkF6OAp6JiFE I0ZlQ0Vgby1OSisxej03TW5mOEA9Y3gkQSVIK3FtVjxweVNNKj5lI2xyP3Qq LUBMJWleV21kc3UyPUFZfjMKenA2fV9qXjYxdiEkQ31XcVh2TFJBJEYheGFz bm0+Kys7TWYodmJFXm87cjgkOXdlc3g2PUYrYXd0Wkp5ZEZQUGFZCnpqcVdH NnZDNCZrem18dWohbkxeYV5aVjQqQH5OIWxqKjtFTCF8YytuWT97XzlpMXNG V3pINSg/LU8kblQ/QSpjZwp6P1opb3J2aEMhcz9CY0tSPWZRIzZOJHVzYT1H bTN5KXwyR1prbX1zM2NkJmZpej5lKFZ1SEBCYDxJPDFmJlchMlUKenJ8c1h5 Oz9SeFomNVBqNWlSYWEmYHU2VmM8RyQkRnJ7fnRDP0FeS1MtbiErYHEyJGg9 PilFIzR6SlN9amUlaVp6Cno8SUE0ZnlNRWZiZVFSS3o5ez5PVjBkIUpNUXZn OGIqayU5IzAxMHFOUyN0bVkwN3c3OzA3dzh2JCFrNlUwMEtgKgp6TF90KFkk NzVoMTghJDN+MDMjX3tuMyEydSsxUXkjKCEjO1gjbXomUzdTZTZ1MV5iMVU2 ZkohRzApaiVxZD9hWlIKejVmdX1jNz5ycy1fbHFQUzJ1S2I8aChYZ0d1R0VL MzNscD1IdzJVbTFvVjxkZjUpKGN4JHxAP1ZZN2l8UD5LZDlfCnpPeGlsU2Rp dlAzITJQMFBVfDxOKkwlPGU5aCQqV1cwcmh+eWpLUkp6IUlrPXVMcm1Hb0tt fG1ibndlV3pUQUFWcwp6T0JDO2BTVk9kISt0fUxLbzhuM3JzOUdFI1N7JDk2 VTBqTE87cygqOz8mMGE+amF2KHtpK3owa2x0RWhqVD59RHgKemFRWCEkalJw SUtnYVktMW5Td3cjYWo4IV5HeT49fSk1eGdrbXs/UHlRZVNYckw+JGwtKUEp cU1xLTMwYUt9bWMqCnpEUkUlR3FeNn4zV2E4OTxRWWZpcEt8KEEkQ3BSeDJ3 LSk1MFBvKTUmckxaVyF4Q0V6UFA7RHMlWWF0TH5rUilnZgp6MzlxdHA2KyZV azA4V0REPTRQZks0SnV7ajZ7XkgmRnxWd3dHJmNwaTNhQ1NrU1M9UDFUVTNi QjBuJD1zUSpEWVEKelFkMykzVXRpYkkqd296SSlZNkw4RlAzZlk/TVBaV0k9 aX1pZFYyZiVDcnEzO1k0VmgqbXw3cUs4aXZwQFpUZ0hFCnpHaUpgM0ohZWA2 a1VNKThyWEpJfF5YNHlEMilDdUM2UXBDJmwtVWRuYjJAODRkWnU4dyYyO2dT ck9UR1h3YlhWMgp6Yjw5e1g4Tl47JDNuQ31DVX0jeWpkZD1FKGE0bUorQVQz UmtLPHhFKEFhWVVAaEwqcSQ4I2lyK1lwTCU2WD0kRGEKelZzRUpqa3JTSVN2 fjFuQkokbmE5VEZecF9EMk1HIy1uRHhWWTJNJHBjaTtYNHF5X1RzZ05GX3d2 PTl9UTJNKGNWCnpBdEokO21LLT42cG9GQWtpSnIhJjNqbX59LUBYMEk5KHc9 KTAzfiFxU2FmN3piWShoWWElRXczV2RKZlRGKSVHTAp6R0ElR01SNUNDK0cm NEZoRyVHTVFJeHNMZW5JIz9vMDAxUilNT2J1WFZSVTZXWkVzfDBXX2JXSUZm bE1LRmdZelMKakY7cEAkSXk1dm9GZzdiTkg5OWFiJTltQkYwMDAwME5rdlhY dTBtamZoI0JYUQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfaGFz aF9zZXRvcF9leGNlcHRfYWxsLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3Rh dGljL2V4cGxhaW4vaW1nL2V4X2hhc2hfc2V0b3BfZXhjZXB0X2FsbC5wbmcK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmEyNGVkMTZhZWIwZDkzYmQxMzM5 MDJiMGIyMjE4ZTY3NGY4NDUyOApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwg MTQwMgp6Y21WLT0xJT4qRlApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEl dzB7e1IzRGRCajcwMDA2XlApdC1zMDAwMXEKenghWDJ+IUVlcChPfkMxNCNf TSo/PzU1dUdLKW1TXnRLdXhQPFZke2NpUFA/Nm1DJEJ1KGFnPjl6YF5kdSRN NE9+CnpeNHtMfHl1SXdKdG13MH0+YiQrfSlZUzY7MDA1PF48VkMqZU91Kj89 IXM+PDhAUlpvX2RkfT5GKGR+PVc/eWNZUgp6blk/JlhqVHctKFl9bjw/MmRM ckB0S3U1Mjw2WHQ7YW0oeVp6VUVyTj1WWm1gbEdYMl8jOW9CM01SS0R4ZFkt OWoKemtFWCRvSHVVa3lAYSh0bj82Jlhndyk1fURxUV93QjxlbG97b2F4fTI/ Jmg8ayU0Nl45dyZ+JVU9LS0qPS1Jd2crCnp1JjIjdEA5NEFXLWs5Z3htZ2Qt JD9CSzFKeUxFPVBOcGA5YEAkMUN3O0k4WjV0bmNLJXkzd1BxK0hyV1VLSEkm Qwp6d1Y4Z2o8OVlEciEwRnRvPkRzOTEqUWYyQHlMeiFmPkRzQl8lWmxIfmh1 KzE3PUZ5XiEhQmduaHJyKllmLW91MzUKeiFHaChfcHRrM0g9RzNJISFoX3R2 ZiFuPSo8anRQQj53b0xweGFIMkU8SUpBdyp0V1h2Zl8kXz95enFwVSV3Nmx8 CnpwWD1xR0A5REppPStAeEpuJFc5ZyNnfDBLdzU2PTYpUXBoYWFkcChQd2Rt bUNfVjRQb142YlV0KHlyMDBZTikmfgp6bkF0MGg/a0JnZyU3dVp5bVdRT213 WWMqMGBfJEYpc2pUSVdrPT88PT85IzFsbiR8MGJfOWxBMVltYnVNKDkhWWkK eitgO3FoI19yfl8/Y31pUjs7LT1NIUdZUkk/ZDdyTipfR3dpbGpQSG8+ZkVZ I3V6Y0xXal9sJkQ8a2dZbSh2UlpLCnpqT29+Pz9jY2BZKDJlMkVpe1EkTT1o ZGI5X1VgWkZ6VWJKZT1obWd7LU1RQEV5NS1RSjxqJFkjKnx5eGlmWk0hJgp6 K1BpKEAlYndjMWUlaVd5SGtjfm4wMDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JS YXt2R1VOQntyO05CfkMzWWQhen4KejAlYmA9S356WWBWXytafkZmeEd2QlBt KiNtfDBsYSpxS1B1IW9rVkslfG5fTihyd2BkYC1QVmpFcXdkfWY8blQ0CnpC eHc7NTYlJl5qajlPclJrKDg4VmtZb1RNTE9fWlMxZilQfWlQYmBlRXBXZXBa Mj09I3kyRitGdXo4PH1TejFPYAp6aiE5bFlRQXdFenBCNUVXUlcpXnA3N2go ZkVvfitwVHxJcFJZK0ImNHVXRCMkMWtwcGw3ST1zT1o3fk13MGcwSl8KemVQ TjAjXiZ6Sio2PU9xSDVOJjJ8VlFGUDtoQVpgPGN3Zn45cVElMTImZmRXY1NH cXZlO3Qwez08bX0/PU14KypaCnpoIXpofEZLLXsqVDk5NHI+KnVjbShofWVu NyEtYHRGTmhFV2YpTX1FRnJjMXJHWjJWQ21jYjJGIVhrbEFHbURDagp6aUgk UU9EISt6PU1hQmJkRi11NUhOPjBKKTduSD4zbjtILUhPSW10SFcpQEJARDIw LTBIWUNKeWFgVztGYUJEIz4KemBjdy1jVDhmR2JOPWtBMTE9V0BedW9lTyMy MSRZQGtuayQ2UCRkK200QiNZYVZQUzN0KHg2JmlRSz8zWjdLXkg/CnpEaG81 UHRBSU14aVBkNVd1fDxfQTlVdnskd2whdSpCREhuKDRHcn47UDBjTVcmOD0t JXtiSlNiKFNmOTt2I1l6Twp6eDN7bDwhbyozRkNRcTM8NE8wc3dLKkpGX3Jx N3I7YkxPbnNiTExMKDFhanhoIz8pZ3JafmxVWGl7UTRAYzdiIygKem87cnR0 VlF5Q35OWTdMWngweCtqeEBgRmh4UiR6WnBwS2E8ci0wYjI+T2thX1J0em54 KlF7Tik5PEhVbjJjKUhXCnpHS2pzUTl6OyVWIz9UVjlhbnQ1NGE0aWtKQVQy R0VLPHVwekFhWVUqaEwmeUhjalc5T05lZnp0NSNfTDVEWkJVVgp6Q0MmVDBf dzdHJGtoRFBGYkxqQTRnY2hRcl41OV88RWtxPDN2KGtlSDUwO1hZRVlaXiNi cFpldDh7QG99MzJyMy0KejAwMVIpTU9idVhWUlU2V1Z7JkMtYlklY0NGZmxN S0YpfVNNRjtwQHpJeTVzbkcmQ3pQSDk5YWJJR0g2TDAwMDBiCnpiVlhRbldN T249SSZFKWNYPVpyPEdCN2JQRWlnR1BGZm1qekdkZVVoSXhzZFhGZn0/YkZ2 XiF6dE47SzIwNypxbwpJTTZOPCRmPEQqbFdCPnBGCgpsaXRlcmFsIDAKSGNt Vj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF9oYXNoX3NldG9wX2ludGVyc2VjdC5wbmcgYi93 ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9oYXNoX3Nl dG9wX2ludGVyc2VjdC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmI1 MzZiMTFiNjhmY2E2YzJmZWRhMTRhODAxMTAwMzY3ODIwNGQ2MgpHSVQgYmlu YXJ5IHBhdGNoCmxpdGVyYWwgMTM4OQp6Y21WLXoxKE4hU1ApPGg7M0t8TGsw MDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA2flApdC1zMDAwMXEK enghWDJ+IUVlcChPfkMxNCNfTSo/PzU1dUdLKW1TXnRLdXhQPFZke2NpUFA/ Nm1DJEJ1KGFnPjl6YF5kdSRNNE9+CnpeNHtMfHl1SXdKdG13MH0+YiQrfSlZ Uzgoc05fWXk9fWZAc1FeTStuKWJOenBAT3NZZGdWRjdhKWI2ZHteTz9NTwp6 UWpIbXF3cnRxdCVMbDA5NVViKUV1SCMrQj52N0JNUFFLPF4hUktWZj0jdGcl cH5QTjx1dGpwQ0hGfTxAWUxCTUQKemsyZHUyJD8pdkFAYShxbD4kZGFuJEQr cXo+ZzFqMzxEQlc+bihwU2Fxez9JTz5iQnxPbzlOJH09aVFnPTxGS2RBCnpY N0F7Oz0tIXk7K21gMG9sPGVUR20lRFhfd249dVhKTXJ0cD9CSzVKLW1MSEJ6 cS0rKnVHKD5VdTBHcW5pTTUlMgp6d0J2ZDM9RF9MUHNfRUxPPSt+JDEtQEFJ VExGd0E1O0xEMk4kY05zPWgzMyhzamxvbXMqUVZkYmhUZy0zLU5BejgKeiYh RCNGZUNFYG8tTkorMXo9N01uZjhAPWN4JEElSCtxbVY8cHlTTSo+ZSNscj90 Ki1ATCVpXldtZHN1Mj1BWX4zCnpwNn1fal42MXYhJEN9V3FYdkxSQSRGIXhh c25tPisrO01mKHZiRV5vO3I4JDl3ZXN4Nj1GK2F3dFpMbEFqX3UjWgp6YHU2 VSh2QzRPVnItejQmIW5MXmFeWlY0KkB+TiFsaio7RUwhfGMrbloweXtAa0NO U2UlVWhiKEU2fnlMXlg8bSYKej1DYllOdTxZV21AYU1zWl85cEcrdkY2Izg8 PF50cih+Iz1pcyYlTV9zSnQpaTs7IVY/az5rPmo7PzlpZSpyJEhhCnpSKyFs PDs/UnhaJjVQajVpUmFhJmgzaG5wP2tEZiN6VWJKZT1obWd7LU1RQEV5NS1R SjxqJFkjKnx5eGlmWk0hJgp6K1BpKEAlYndjMWUlaVd5Z0BNMThob3NUcTRn TFRDMDBER1RQRSFDdD1HYk5jMDAwU2FOTGgwTDAwMms7MDAyazsKek0jKmJG MDAwNn5Oa2w8Wk5YS0pmQVI5MDtmZENeWlQ5fXd3U2xRVF9OWWNXPSQ7SGg+ bmlrUys7UlhBSm1sUTMwCnpgfnJlUCFoOXJZNWZLIz1tbCV2JU5jVzIqOXwl WWVLIWAhcDlqP0BlTyQhc1ZsKGRYMmxicFBRcTdvQjZFeV5rPwp6cyVqN3w5 T0BkSFQxP3RIeF9iSzl3N350TVZxam5oKEw9eCVNMklQPzd5PFF3I0Vpa2RG dXw0amtWOHpfJFVwQHwKem8wXiRoU1ghQ2wzUUg5NHQ1YCN7bkFfT2UqXyt9 QDdwUGhzQVgqJXFvTHlYcilaenh3O19sKDs8JjllbHZXdEN1Cnp7Z2dwa3s5 T1lBZ0srdTxDNTs5OWdAZ2syZ3FlYXNJQn1eQElXeiszR31Ga2E9JEtlanFF Y1VRWGhhOyk3U3M1SQp6I0gzYExlbkNsbUp9R2Z2em9lJDZYSnEya2Y+SjF7 V0k7a0tKMH58VUFHYTNkcUVEcCZxTlQ3WHpxa2FhVXI9bysKejEjMk0/VnZy PGczPDxCWWF1cV5oJF5jRys9SF9PbUFQcCpJPHJTKkxYZmR5PnRUWjxUeTkl ZzdqYVYlZjVMO0E7CnooZ0QmXldtOWQ2QnZNbWJTNl5TKChBZD02K3w8JkYp aTBLOT8oSWxnSXkkPyRkd1AyTmBYQH1CSUJEe2ZzaEM8SQp6MFVDelRGPk59 S29IfUZYdFo1eFUjX1NvR2RROWljb2l+MzArP0pZN2tkRD9WR1ohd0wpbWEx NUdYPXdLcmkmSVkKelMtSzNhck0zJTF3ayUlPTFTQEptPzh6K3tUMmApRnk9 RTwzT0k8Z0pZKzQ3PnZjMyspcDQ1YilDMismV09gRzliCno+VSUoQl5BP2Ju dEBSLUcjQVhhRitxVW4+LWJzPWN2PUFmOFZZYHhkQDdZVjVfam04eGY4WmMj ZnhQRj87bGxfbQp6TGBDSm4hemZ4ezNGZ1JBb0MoSVg8bHc9QkJfdChGXmZY M1kwMDdOKis7bGZxWCpCPTwwM34hcVNhZjd6YlkoaFkKemElRXczV2RKZlRG KSVHTEdBJUdNUjVDQytHJjRGaEclR01RSXhzTGVuSSM/bzAwMVIpTU9idVhW UlU2V1pFc3wwCnZXX2JXSUZmbE1LRmdZelNGO3BAJEl5NXZvRmc3Yk5IOTlh YiU5bUJGMDAwMDBOa3ZYWHUwbWpmdUkySk4KCmxpdGVyYWwgMApIY21WP2Qw MDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vaW1nL2V4X2hhc2hfc2V0b3BfaW50ZXJzZWN0X2FsbC5wbmcgYi93 ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9oYXNoX3Nl dG9wX2ludGVyc2VjdF9hbGwucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LjAwMTgxNTdmNjRhNWFlNjAxYTJkYjA4ZmIxZTRhNTUzMzg1YzMzYjkKR0lU IGJpbmFyeSBwYXRjaApsaXRlcmFsIDE0MTcKemNtVjs0MSRPJDBQKTxoOzNL fExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwNzJQKXQtczAw MDFxCnp4IVgyfiFFZXAoT35DMTQjX00qPz81NXVHSyltU150S3V4UDxWZHtj aVBQPzZtQyRCdShhZz45emBeZHUkTTRPfgp6XjR7THx5dUl3SnRtdzB9PmIk K30pWVM2OzAwNTxePFZDKmVPdSo/PSFzPjw4QFJab19kZH0+Rihkfj1XP3lj WVIKem5ZPyZYalR3LShZfW48PzJkTHJAdEt1NTI8Nlh0O2FtKHlaelVFck49 VlptYGxHWDJfIzlvQjNNUktEeGRZLTlqCnprRVgkb0h1VWt5QGEodG4/NiZY Z3cpNX1EcVFfd0I8ZWxve29heH0yPyZoPGslNDZeOXcmfiVVPS0tKj0tSXdn Kwp6dSYyI3RAOTRBVy1rOWd4bWdkLSQ/QksxSnlMRT1QTnBgOWBAJDFDdztJ OFo1dG5jSyV5M3dQcStIcldVS0hJJkMKendWOGdqPDlZRHIhMEZ0bz5Eczkx KlFmMkB5THohZj5Ec0JfJVpsSH5odSsxNz1GeV4hIUJnbmhycipZZi1vdTM1 CnohR2goX3B0azNIPUczSSEhaF90dmYhbj0qPGp0UEI+d29McHhhSDJFPElK QXcqdFdYdmZfJF8/eXpxcFUldzZsfAp6cFg9cUdAOURKaT0rQHhKbiRXOWcj Z3wwS3c1Nj02KVFwaGFhZHAoUHdkbW1DX1Y0UG9eNmJVdCh5cjAwWVRVcSUK ej9jY2B3X1VeWl8lNkVYTGhsaCo4d1ljKjBgXyRGKXNqVElXaz0/PD0/OSMx bD9BKmJSbEhHbUZUYmtBQCg5IVlwCno/WilvcnZoQyFzP0JjS1I9ZlF+ZkNo Z18xPUdtM3kpfDJHWmttfXMzYipQNEB5ZjV0SHVIQEJgPEk8MWYmVyEyVQp6 cismez9uQXQxaCgyZTJFaXtRJE09aGRaIT5va3EtQy0zOUY9LTgqeyl9YCMt eCRORyQ8PE96eiZZJGJxdyVvcGUKeitxezAteU01ISFwNHoqOStQWnkoZnhu aUFxeXVFMGAyWVhfMGQhSk1Rdmc4YiprJTkjMDEwcU5TI3RtWTA3dzc7Cnow N3c4diQhazZVMDBMYENMX3QoWSQ3NWgxOCEkM34wMyNfe24zITJ1KzFReSMo ISM7WCNteiZTN1NlNnUxXmIxVQp6NmZKIUcwKWolcWQ/YVpSNWZ1fWM3PnJ0 QWV2eT12V1JQUzRBd29jazQrTndAWUtoZkNoQW5XdmZOY1JJU2h+Wk4KemBt bE1RaUNKMWtSKnAkdEt+WUpXMzctfWZSYUdeMGghemVGTylZSUU5YkcrcjE4 aUYwdjlEQHFYYXZ6aXohckZqCnowY3xrYD5IJiRGZlBHPCNFQT02I0YlQEcm UlM8MXZaZWVMPFpINm9McD9GYF8yQk84biozUkMrM3xHMjkpIzM9egp6O15n ZSY+UERtJWNaZTFiUGNMc0QrKiopYj9DYTtSMEA0IVQ3OG4kYSg9VWgrMUEt OSQmQGlCJGE1RTV5SyRnSmAKelJLZztHUEJWKiZqKXsja0JQemQhZ2hqPiFa ODF3b09pRTZ7PUAqcDU9YklXMl9EZm9OTXJJYUhFaHZTT1lCblVxCnphJnEo WDN2Zz5lRjhXanBBekYleDNyYjNIYFVUYU5HTyFpYEFxR2k7Q1huemR1VFVp dnJWUVhEWGtsUykyR1hFZgp6VVF3dz1qMjRUa3N3eFhKdSZhUE4pUVF6JTM5 Jl8kQz48YXopd1ZUZU5GdWQkXiRpWDZqWk11aEV6UFpNU3A4enYKej8kTHB5 ckwoS01yPzxEU2Y1T0JgbE98N0BJdF4wYEJ0WEx2STtQSjZsR0EzK25teFN9 JGUxJHxROypyKWRHaS02CnpneGdadjE9NyhyYj1JT3F2JTZ8UmRadUV5JjF+ X0tyT1RHWHdiWFRrJGtyOCRmTThgRWgmYG5oTCg4aHdZdTJ1Vgp6WXBMJTZr PElIdFN+az4hKnByKHZ2Oz1NM3cwUjMkT0c3VitZfXBGWnZhSkVjcDQ1ViZX JjRodUlsRDtHZiktKiMKekljI156cDF1MzlkY1BaJl94SjJTYVBTYW1meFAk ZGtzfUIjTGBDSkhCUGQjNjNGaGNBb0MoSVBedzZQMHI2ZVV3CnpeZlgzWTAw MFV7OzchfjNMdDZqPDAzfiFxU2FmN3piWShoWWElRXczV2RKZlRGKSVHTEdB JUdNUjVDQytHJjRGaAp6RyVHTVFJeHNMZW5JIz9vMDAxUilNT2J1WFZSVTZX WkVzfDBXX2JXSUZmbE1LRmdZelNGO3BAJEl5NXZvRmc3Yk4KWEg5OWFiJTlt QkYwMDAwME5rdlhYdTBtamZDWnpVbAoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAx CgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFp bi9pbWcvZXhfaGFzaF9zZXRvcF91bmtub3duLnBuZyBiL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2hhc2hfc2V0b3BfdW5rbm93 bi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2E3OGZhNmExZDM1ZDhi MjY2NmVlM2ZmYTU1ODNkYjk2NjJhNjdlNApHSVQgYmluYXJ5IHBhdGNoCmxp dGVyYWwgMTQ5MAp6Y21WO0AxdWdvQ1ApPGg7M0t8TGswMDBlMU5KTFRxMDAx JW8wMDEldzB7e1IzRGRCajcwMDA3ZlApdC1zMDAwMXEKenghWDJ+IUVlcChP fkMxNCNfTSo/PzU1dUdLKW1TXnRLdXhQPFZke2NpUFA/Nm1DJEJ1KGFnPjl6 YF5kdSRNNE9+CnpeNHtMfHl1SXdKdG13MH0+YiQrfSlZUzgoc05fWXk9fWZA c1FeTStuKWJOenBAT3NZZGdWRjdhKWI2ZHteTz9NTwp6UWpIbXF3cnRxdCVM bDA5NVViKUV1SCMrQj52N0JNUFFLPF4hUktWZj0jdGclcH5QTjx1dGpwQ0hG fTxAWUxCTUQKemsyZHUyJD8pdkFAYShxbD4kZGFuJEQrcXo+ZzFqMzxEQlc+ bihwU2Fxez9JTz5iQnxPbzlOJH09aVFnPTxGS2RBCnpYN0F7Oz0tIXk7K21g MG9sPGVUR20lRFhfd249dVhKTXJ0cD9CSzVKLW1MSEJ6cS0rKnVHKD5VdTBH cW5pTTUlMgp6d0J2ZDM9RF9MUHNfRUxPPSt+JDEtQEFJVExGd0E1O0xEMk4k Y05zPWgzMyhzamxvbXMqUVZkYmhUZy0zLU5BejgKeiYhRCNGZUNFYG8tTkor MXo9N01uZjhAPWN4JEElSCtxbVY8cHlTTSo+ZSNscj90Ki1ATCVpXldtZHN1 Mj1BWX4zCnpwNn1fal9VXz41KXdBNWRqbnVKbyl5S1RTenUmMj08Jj5EOyNt RGFHPT1rc0l3ZXN4Nj9BXmxMIUg/ejh0TWNkNgp6YH1wJDl2JVJyfm9WdHBR KHpVVm1fV2EtQV59b1VGczslWUcoKCZFR2tANGx3X3Q/KFhQJTc2djRCY2l0 e1BPU0kKei1TbiVqPUpWfnc/JmgtWDxnbzFHdWtoIT08R1EpbVFZKyRjUDE7 RXUtKWx3ZjwrMH0zbUYzb3g8a09KcSteV2Q2CnooOGl2eSsqVH4/OzshVj9r Pms+ajs/OWllKnIoclBKPWE3UDs/UnhaJjVQajVpUmFhJkAzRWZNZFBERXl6 VWJKZQp6PWhtZ3stTVJHM3pVcldkPzQqd1I8PV5ieXk1LVFKPGokWSMqfHl4 aWZaTSEmK1BpKEAlYndjMWUlaVd5JVVlZDwKem9eOH0mTGVydmB2WkVETTAw MDAxYlclPUowNl55MFcmaSpIMzI7YlJhe3ZHVU5Ce3I7TkJ+QzNZZCF6fjAq eSZUCnpLfnpZYFZfK1p+RmZ4R3ZCUG0qI218MGxhKnFLUHUhb2tWSyV8bl9O KHJ3YGRgLVBWakVxd2R9ZjxuVDRCeHc7NQp6NiUmXmpqOU4oZGl6RldpTkRl QFZMREw8cylRMyRBNlNJYEdqNFlGIXluPjw8NkZ4MTxEa2BkSzVHQD8pOGsk OzYKeitCJio9YHE7Rjx7aTAlRVU8bERleiFwU15EWFNPKF4/PH5UIU0tclRt SExvRk94ZWdsMXdAO2duT2omfG5jQG1kCno2ens4OEwkc0xOKnhLMmY7en0y JlN7eHUrOUcjcTlUIzN9OzJHUWN+O3B5ZCNUTU0jX2VTSDB0TDBiRz4wfEo5 Xgp6YFVORzgxXmIxQjBgLUtNZjxRUU5zWlRqSDBfWmY7JGYpUjtTV31gPlV2 T3dkOU1CZmlfPUxveVdTbzlNTnFqeWoKemFiVWxzcmxuX087PyNtdEQ1KyNZ TE0lSGNIIW1OejdVWkgmcjJ3TCh1cWVOezFnQnE2WjdCdDdBck5BYUJ4bm8/ Cnp1ZDtGI0xTZjFQUEotczxXfkx3d0RyTXlycz5Fbjl1ZEoqekh3QyoyczYm bGRFZnhANFJFV3w2KG8kdHBaSGdwUAp6UShJU0dVKVJ2cylaRTxFKHUmbkRt VG02c05MbzVOeVNqVU5kaShrKE9xQDdyQHwzQlZTfDktJGhSYHU+SXM/T3UK em5YYGFrXzhiTz14JGBqZm45ZzZZYU01RDhFajY3JDlTbG9tRW5UKkopfnBw az1HLVk1Wlpsb0VZVzE0NmE0b2Y2CnpBYWRQJDI4S0JzWDNZWXpDJTBmfCp8 PSUqbWFUOXRiPUBHY1glZGp3SGZ1WUdKKmYjcE9XPTszeUxROTEpYzFoTQp6 PTd8Z3BkdUdrcjN0fkBmIz9aMkZ8QUZqLTcrTVoobj5GaWpKJDVaPEFxSTJV a3kqMmpjR3V4PipzPGl9Q3IrWXkKenpoeUV8M3F3fmU0KH1nN2JeNlIldl9O ajFHTTltMmRTP3hlS3Q2SHF7Q1J7SE5LYFVSeSliTG0jU1I3PlFGLTx9Cnpp V1g+c3hpbzltV24ybHl3QitwQnZuMz1ZT1l9NUdUPnQ8bGUlaWozQ0FnM1Aw MDFSKU1PYnVYVlJVNldWeyZDLQp6YlklY0NGZmxNS0YpfVNNRjtwQHpJeTVz bkcmQ3pQSDk5YWJJR0g2TDAwMDBiYlZYUW5XTU9uPUkmRSljWD1acjwKc0dC N2JQRWlnR1BGZm1qekdkZVVoSXhzZFhGZn0/YkZ2XiF6dE47SzIwNypxb002 TjwkZl4tYHotMmVhcAoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhf aW5kZXhfb25seV9zY2FuLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGlj L2V4cGxhaW4vaW1nL2V4X2luZGV4X29ubHlfc2Nhbi5wbmcKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMC4uNzc2NGI3NGY1ZTVlNWFmMWEyMDViMmVjZWU5ZWQx ODQ3MjdlMWZlMApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgNDk4CnpjbVY8 TzBTKjMlUCk8aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJq NzAwMDFOUCl0LXN8TnNBVgp6YmFYYXwhRGcxeCFIK2gyb35jZDE+NH59OVZh RHJrJkYqJjE/N2g5Y3JOUUxleUB7Plg+ODlURF5WfS1ELVI9TTAKekRadDxF IXI8PTM7cVMtZUBXfHV2JUgjME08bmo2RFUoTXo2fEs/eE89a245Jl5WSTN8 KjZIPjM+eGNnQWhULXFgCnohTkBkOzAwMDAxYlclPUowNl55MFcmaSpIMzI7 YlJhe3ZHZjY5NTFVNjlFOTRvRVFLQTBVdD8zS356WWA/Yk8+Mgp6Zi1ucFE7 N087VjA/TmJfJkooPTxKMzVMXlVEcWp6Q2RTeVNXeXUjPGApQC0wPipzNDJW R1RRd1hmJWw5QGljbEwKek5kT1hldWl5U3lwQ000ITtPQHkmWHt3U09JVVhx flhRcy19NlF2WVM0aEtyQUBMND0wbH5eZjlfSXBBXlp6OUJgCnokQmhra0pN ZjhzQHNMKlZoTFdwYjRRI2ktMitySVErOS1lUD9ub1EwbFlCTkgqbGQ4IWk3 WlZEbHk9RV8tST1VYgp6MGl3TlJ4ZGlzbFd1O0Ejdm4mPiFKOVo8QE94I0oo b2t2MmA9Kj1lLTErWiFLPWtyRXI4a3V+O2Q9Qj1ZWD5qMlgKejNgXjVaPn55 PWhedyUheiE8WG1IPEEtQnhyaWNUX2d9ek1ERjBNQn0mJDhVeWV0YzljKEUq WWBrITF5Yk1aSExqCm9GJlJzT017diQhcFliam9gYDVTQzhTITVwaTRaKzsm ajBgYjA3KnFvTTZOPCRnNSNJPV81YzY/CgpsaXRlcmFsIDAKSGNtVj9kMDAw MDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBs YWluL2ltZy9leF9pbmRleF9zY2FuLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X2luZGV4X3NjYW4ucG5nCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAuLmQ0NGVmZjQyOWZhOWEzNDA5Nzc2ZWE4OGExMTQy MTU4MmY2ZjQ1OTgKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEyOTgKemNt Vit0MT9+RVlQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0Rk Qmo3MDAwNGlQKXQtczAwMDFxCnp4IVgyfiFFZXAoTTdgO0MmaEw1OT9eVkwt aFNjejgkbjB2Iz5+RzVKbWY3KXAmaDNLSD9XVyVIakAwZ3cqNiorMwp6Xjk4 NWpPfkw2S3VIIyQ5PnRlXzJJSmYwY3pVT1BsPXlhMm9kWS1BSiFRXkleKFpQ PjRAIz1AfDw2IWdmJG5mbTgKekA5RE1qP1p4aXF2Kz9XMT9CbFRUPkI4YWZf dmhMeD5nMWozPERCVz5uKHllZD0tISM8Kz9WYTt2RjYjNzw8XnR6Cno7SH1v X18zWXhXPUd2Qyo7alpNPmxJITJDP2RHIVUtbUxLRXp8YHNWJWM1QUB5QH40 R3NfKjIhKTlDWiQpUkUpVAp6a0spamM+RHNCJD1rbnkha21BbWFAOGUoVCtw NktyaXN7Kj9fVW5pMztrP2J8XjdHX2g9K34jeypRVntAeVlBYTYKel5WfS1u JCUpXntofkxNRD1HM0lpPG5qNkRVKjUpcyVIIzBvKXVyYXNxc1pnJXtfS1lE PC1xTFN5MnM9MiNvX1AmCno9M25nSXk1YGNOPUZ5XyYoVl5fenhjfVpNLW8l OTYhLUwkeGc1fVZtK2BmUnE7T153a3BYPUpVen5Bb1YmN1NKbgp6dyFHYyMr UGkrXiUkfXsqPkVwfHU1QmRhQTAwMDAxYlclPUowNl55MFcmaSpIMzI7YlJh e3ZHVU5Ce3I7TkJ+QzMKellkIXp+MD9BMjRLfnpZYD9VZFBENT5YaDNaS0FO O1FfQyMqS3d1YkxTdFRUfTFfZkxJa3dzN2g4QShNeldtTj4+CnpVLSEoQyFn MW4+bzFRTkdFKUYtbSZ5Vi1fOVpwfjAlbHp3a01YPlk3UXckK3FPQyp2diM5 T0lVK0U0VnFkcHxIcAp6Mz1SenNqfVJsSFZgQ28oUUE5RjZLMFpOQU9pb1VJ QnRBX3xPJGB1M3BRWH1hVnN2X1hWMnRSTkdWJTgqVSUyMVEKenBJQEohOXA5 YWkkITU/OCRRMjVPOUE9ZUQ8dClzcVI0TyY3TnNgb25oTjM3ZmJSZT8xSVQ/ IzY9STdAWHBqPXAzCnpSRG8oflg9eGNxb25DSk0lNGpzMUY9Uzw+MTZrd3w5 U05qZnVjeUZiRzw4USppIThGTig7PnY1fDdON1hZRmJeagp6aTZlcmBaO1M3 b2crJldtdig0X25raExgeWAycDxrPWc7Uy03JFQmb21xfTYkOGlScS1mWXhk QEpIU0VIdj1kOE4KelV2RzFIdmFxbGc4K00+d1pucDxSSGFGVzRRbTVtS0hD bjtFeTBKd0E/UklaPkwzVl48RFh2KUNtZGl6aGNZRTlDCno3ZjBsWm90PDN+ MyNaNUw0YDlnTlVlQXMzMipgdU1BV0VTdVJ4TFBlY0MtdHAqVys8UUFRVEVt THtsS1J6YUlAXgp6N0N2TVZpWDl4ckczNGstSyUmdEVEJU9PcTJrbW1YejJO Y3JkPzUlUTk0MncoXz9TbmNFVyNGUjdtREAhVnpEciEKemxGMX40QXR4c3N2 WVNYRyh5UnNqaT9hd0lpKlBDZWt2UE1nViN3SzkmeUFnKmIxQ1VXQ1g7NCY7 WUdYZmAkR1lVCnpxfmhAbElMK3FybW1yRXt1Q0FeIXhXelJDeGs5bTY+VzEq d0JOVTRycSMmTldFQFVCSkVTN1BrUWZXZ1RpJCVMJgp6dF95YGNsIzFuWVJV QW9ZU2VGaXFUclBoREg+R096MjE5T2RkdjEoSmdwQCF5Zz80ZWxGeGdZTUVS eytxckNPYHEKendXcHdtdVU9OyNLZiM1KzkhIUM9RDY8eHxNeCR9eGo+eSpQ JjFOMF9gdm9MKiRYPF51U0xfcWc+UClGTG8wWEBPCnpJTkMpUGF6eiVZbWRs TUErfld2aCY+ZnEzYmglKSVuOGpWSSl3PTYhT25BbjdZM3liR3VYekJyNmIz M3g9dzZ9Iwp6MDAxUilNT2J1WFZSVTZXVnsmQy1iWSVjQ0ZmbE1LRil9U01G O3BAekl5NXNuRyZDelBIOTlhYklHSDZMMDAwMGIKemJWWFFuV01Pbj1JJkUp Y1g9WnI8R0I3YlBFaWdHUEZmbWp6R2RlVWhJeHNkWEZmfT9iRnZeIXp0TjtL MjA3KnFvCklNNk48JGZAaj5LU3BXYjQKCmxpdGVyYWwgMApIY21WP2QwMDAw MQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxh aW4vaW1nL2V4X2luc2VydC5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF9pbnNlcnQucG5nCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAuLjg2MmQ4MzcyNzdjOTllMTdkMmI2NjIzMmRlNzlmY2UwMTA3NTJl N2MKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEwNjUKemNtViteMWxJZUJQ KTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwM3lQ KXQtc0JtZ0t8CnpUVSQxVyEzbkEyYSthWnpsOUl1WEhtYUY4b3U0QH13ZEhs RCQzZVg0JWM1OGs7fVF6dE1vUGZ4JEV0TiojT2g8bAp6PlRBZDdYdnBsVCNk JlZhPl9fWSV2YyFBOSFHTHdtP0F5SjYrcjVlMHpKVDFuZlAyeUorYClvYChl QjtEZ01gIVkKei1vJTk3I2Y5RitoSyR0aS1eWWpGJGNUfkU/JT5JWjttbkdj KzQxN2VqTjtJWjxqJFg8K3d0U2xrTEEjejxrT0ptCnooVl56aXFVNisoPUYr MCUpc3A3WnF2aDY8PUczSTspdXBjQl5YQSE8PSt+eWAqUWUmJW1nKDUxPkRq Mn4rP1ZPdgp6c3A7RlE+KU47SS1rSXYlc19mamo+RU4yey1tTDgxeTZmTXE/ QjJUVTtIflE4b2JCSmM/QlRCTTtKZlBObyRUVlQKej9jdSFhPEZNYEp2RzMl Kj9kRyFYPUNra1IhMF9oNEA5NEFkPjl6M2EhdG0rQkBhKHFuPiV7V3kjcTtn UF5ZRitNCnohTG5ybDAwMDRXUWNoQzxLPDN6SDAwMDA5YTdiQm0wMDBYVTAw MFhVMFJXbnU3eXRrUWhlPD8xUjdsNnxtME5TdAp6UCF2WEsmYGxCQjJDSmFP VEEpYXxxKEdyaTJ0a08xVGpXdkAzSVFWXnhCbVpNOzdRS201KTMyR0lITTJV NTlAKSsKek83ezFpR2xSa0tIMit7O1B8RUQybzxpOXk3UndvUmFibVN6UWtT bzd3cmxHOCFzV1c1Wm10ND5QbjUxPUYmZDIpCno+SUJoQnkpdjg0SHRHIU5G NiEjXilFMSFyKHBSM1RKTVd+UDAqfStfXmx7MVljc3olPkVYeTtQTnM9QEh7 MHNvUwp6c1oxWHBUNFRhLXdPU3A0VHF6WCNBWjRAWkNTWVVuZ1FoaH5PSTJE fXNtTEd+M0l6JGUrNE5IUng+eVlKdXZXJGAKel48a0J4TihDd1ghc28wNj9R fDtEQVdBK0BIeTV6WnFWQiYrQGw4JDlveHI1b3MwflJMMm1PKG11QUc7ayU9 PXY9Cno/eyYwM3RSMHctV08rX0Y+LVZKQE94biVuNVFkXkM0d2YoMElBczVJ aW1zQzR0X0VUPjk0QForLSo4Wis2O3ZyRQp6RG1MNE9YNm8pJTFUaD5BNipw Pjk5V0AtTzZqTUAqWlFNcXFCOXVaUU1nVzc+cCppI20rNWd1UmdRNmh4VkRy JHkKenAmVG1nKlZ4aVE3SygjVHExJkRpNGpWT2U3SzJpO0lEajZ7PVFeT2hr SEZgajl+ajh+Kzd0eyohM1hfNTR6fSh2Cnp6eVZVKT1gXnwrbXxgPjxFPHVy RDcjP3pkcExiZyFxRWN5JTVFbTtqIUMoJERVYXl6Y1NKM3xBY1MwcGE1MmVV dQp6ST8mLSp3eXZ4RUwxWEskaCs9NiNJMW1LQjJiflBaLTl0VEBoPTAqdjRE WXt7IW94enM/UjNXVTY/YCE7YEMhblcKejBuWTFqQ240XjFwNl5nX3JLQDdt UytFfHJJfVMxRGBGVFdOIVRXMWNCb2dzNWx3Ki1kYEx+VXxHYnk4Pz9wSiFi CnozXzFtc3JYeXR6a0NoP1JScSh9N1gqI21vP01PajlDZSYzaktJTE1sKypq ZXlESV91WFJxb2tqdld+ZkRtZChjQQpqOTRobTZsVFV5MXxMZ24meGdAYEVt XkE5MTAwMDAwTmt2WFh1MG1qZlMkO2VCCgpsaXRlcmFsIDAKSGNtVj9kMDAw MDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBs YWluL2ltZy9leF9qb2luLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGlj L2V4cGxhaW4vaW1nL2V4X2pvaW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAuLmMzOTEyMzNjNDQ5YmRjNWEwZDUyZDUwZjUyMmJkM2UzNWM2NDljMzYK R0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEwOTAKemNtVi1JMWlreC1QKTxo OzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwNGlQKXQt czAwMDFXCnpycEdwaiFFZXAoTVpXMXchMEEpTT5WPyRzbC1UZmsmZ19ISD9U Z2d6dD41IU55eSp3MTt0O0ZpOG17QUEjcGBqKQp6PmB1UHNURVhYSiNwc2dO P183PEBXXjIqUiZHRWd6P1ozaDghb3UjOyliclRjXnY9KW4oYjRrTSliIXhz X2l+bkAKelRaZyMzejNpdXs9Yz1zZHVDTTlFI18hOV9AeEgoOSNtNFp+KjdV KVRIdVVreUBhKHQxIVMyUyNANkZFZy1ybn0+Cno9QVd5cT0oRHV5eXVJenop Ym87KyhUMXNIUWpIbVpyQ1lQWHJsR2BNZ3xiRytzJiRUcXQ4JHw/cVFfd0g/ NiMpTgp6VyRXZGg+ZzFqOD45cF9idyhzYiheNmJUZ3NBNmBpSkQjPE51Ryg+ VXUwSGViI19yfl8/ZDdyVDs7LT1NIUx7VWkKej1HdkMhKk9UUGFrbX1zM2Qk VTYxKXNmQFVrSylnYj5EWkBAIUJnd3J0bTRwKTttd1FTJThCUkhyMChMcT0r fnl+CnotTVA4emY0YzYxPDxYKCEmWSRZb3coUjR1eXpxcUZ6SlN9amUlaVd5 PElBNHY8REJXP28waU83PS0tKl87SH5NfQp6c3FwRS1AOC1iWCNmOUMkZzU9 R2Z3THxYYTAwMDAxYlclPUowNl55MFcmaSpIMzI7YlJhe3ZHVU5Ce3I7TkJ+ QzMKellkIXp+MHJeUXBLfnpZYD9VVUpDKD9BcihWXkJicFJtRE0ybC0yYiVF PiQkNjErZ3E7REo/QXB4Pl8pOEhFRjMwCnoxcXY8eUkhUVk2NWk8aD1KbitK T24zc0lOZHZlWnF0e19+YE1kcFRSNHRlPHl2RWs7ZSN3TX0oY0ZVYytCSHVF eAp6d1hNQ1FRfCE4VHwzU0NOd35WZEFUPXZpc0NOR31+PlVxQExfWlU2dGZC SXx5Kl5vaE4mNSZ+JDhYZyZhe3NPJngKeiklV18xOVJaZ2xOaU5qJF9UQnBy aCFjX0FabnVQbktZa2tmZH0pTn5nXjdHWT04I3RxV1FAT2xKSWprKjEkI1c+ CnpncVoreXpXLWFzXmRqUilnRT9ubkB9dmkhSCE9TDwxbWZqTjN7TT4rKD0p U1lDdzNCWGBGd05wNmZlJE03KztpNgp6UDBUc3wjaWZBQkt5V3p9VWcxJl48 VXF2eUgzK1MpdHckK2RvYWdFZkx9SGRvSUcjd1JEMlZmcjdKZ2NVME9eZyoK elVrVkx6b0dYcnkjNEBSQGxCME5Xc15IKUZecDRmZm1Bck4yNF5oZGZzK09t eTgwR1cmZi1vTntnamN9SUU0RD10Cnp3Zk1LQlFAbnQ4WDFoRlIxe3pPOysy cSpQNHIjSmhEJHg8JmM2b09oM1R5RjE2d0pSZWkyQSpOJk8mQyh5UT5BKgp6 VFRkaF9WODY8fHVJcDRVTWxBfmFhMWdEZUdHSHFLR3FMJnleNGJ1IyU2QG4r ZUVeeFBxVTd1PFklZk5XSFkkKisKelIlPEZSbDE/Tnl2IUdPS0hIe2FFQ1hN b2VTfVBWMHwzakV3dG54dWwoKz1+T1BWOVFGV3t2PjxXVmdCc28wV2s4Cnow MDFSKU1PYnVYVlJVNldWeyZDLWJZJWNDRmZsTUtGKX1TTUY7cEB6SXk1c25H JkN6UEg5OWFiSUdINkwwMDAwYgp6YlZYUW5XTU9uPUkmRSljWD1acjxHQjdi UEVpZ0dQRmZtanpHZGVVaEl4c2RYRmZ9P2JGdl4henROO0syMDcqcW8KSU02 TjwkZj9leERHeW5ocQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhf bGltaXQucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9p bWcvZXhfbGltaXQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNjM2Vm ZDU5ZDcwNDM2MzQ5ZTU0MTNmOGM1ZDI2NzMyMDBjZDc0ZjAKR0lUIGJpbmFy eSBwYXRjaApsaXRlcmFsIDEyMzcKemNtVjtgMVM8UTlQKTxoOzNLfExrMDAw ZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwNGlQKXQtczAwMDFXCnpy cEdwaiFFZXAoTTdgO0MmaEw1OT9eTUYtaFNjejgkbjB2Iz5+RzVKbWY3KXAm aDNLSD9XVyVIakAwZ3cqNiorMwp6Xjk4NWpPfkw2S3VIIyQ5PnRlXzJJSmYw Y3pVTmlJPVVLdCRZc2N1aFZgSGZvN3d+ZCY/UXdER2FCJH51YU9IMXIKejtj amwtWkVlfFhZfTBGTmhOKXl5alR5bUBIdVVreEBhKHRtPiRkYW4kTTVPMV5Y PG0rPzhXWnB2K2RAeD9kN3JZCno+JXtFaHVrN0tqP0JLMk49KSQ3TFZDJl9j PmZAYTY+YjI/TW4mO2U/PWk4Ui08Rk10fGxqWVR0PikpLVcld18xXwp6bmRh Ryo8a1hTbSh+Iz1qc18qRXQ9LXJzKypwJWJha0UrdmFAOC1ibzxpRD1qYUwx fjN2RUZzPDxnbn1CdG0pZ1QKej5Eczk3O2t+cnVkQTg/I3hheG82Jld6I0Fp fE4+PngkQSlBKDJuNUJpUmptKz1obWpAKXVydjx5VWw1Nz9BXk5OCnooeGN8 bHFVX3diLV5ocEcjKWp0OXF9e0BVLU5BejgoNHBTTWgxfGVfLU5TXzJ6SlRQ O3BZUD9zPilOO0cpMSY2bQp6cTIkZTs8SUpBdyp8eXJkZWRFaVgzN3dKWDAw MDAxYlclPUowNl55MFcmaSpIMzI7YlJhe3ZHVU5Ce3I7TkJ+QzMKellkIXp+ MCpweVNLfnpZYD9VVV9PNT5YViFYYGBARSlSM31OZnxPKkIkbSl1YEJ5UzRA eFFJejlGUGFkYkNXeSNfCno1UXhJUi1kKHQwOzleZXBwPU53Tyt9V0t1emQ4 M2cmJCVNZWdaXnpqQjZ0bHZnJUlNZ1NTKUAqSmU1YyFMJlZVdAp6PWg5KGZj dGo9fUJ9VGBfJDZwWUZoKiZPe2ktYCReTGgrSiNIOTB2Y0J9UUpxblVXRD4p Nj4jJTs8aGRtbEJxaiUKem5OaStOR3VNZG5aSiQmc20wRzElem5oKCVvdHZB fVhmKkdVPUk1Mzc+WV5wSkFgdlg7YmgtdXBULTFZfXFOcFdVCnpyZEpIQnV4 ZDEhRXI2PiFCMHJEXyhYRmttPkNrRGwrSkxnIz9LSUYxcjtgRHIla0IwNnVJ ZUhtdWFRTm8pay0xNgp6PiFyY3FeIWJjbmNLZz5eeipSenN0JVVAPC1WRm1W SzN+dVRYOC0hO1AyPn5WX1JAOXs7OVZISEYxQT5mNEZSc3wKekJBP09FN3ZN R1UjOHNWbms9ckR4MV51RnAoISl9S3JrNyFMaGhaI1dGPysmVzVROz5qRn5D KXc5XjFRblVyRkFECnpvZE8hVzIpZk1KTVB4cjdQWE1tIWJsS2hlaFBxSHp5 RkNFKGhRcWw3T3dpPnZMd0dacGo2Z0lWUG8pN0BiI0tPaAp6Xkk0JDV0fmlg TjIyM3V1S01aVmdlP0pPfFI0UjE8eFQtZ08/MUpmYzVsYkgmOWAmZEhDITJo OFhfM0MpKEVUPksKekNFa1RtJGk7Q2NsUld7VWhtNW9FdFp5YitlejVVMDlP Tzw8Xk49fCE2Z1hrVD15SVZZWEtAeE9sKlFwYHY2ejh1CnpwO1FgeG5BfDtD PFBJVFVFU19oOUUweEw+VlpgREl2cCptZHtuYlNseHV8bExOPnZjfj9Jc0kh TEdMMEdmPjxKKgp6Szd5bHN6SUZeSjdhVWlHWU5kWDhDNDh9Nzd3MjZVXit1 ITc2aF8paHAzZGRhVX5BYFJnJHYteVdyU1B+TSVxaGAKenZNQVIwRVlNJnA8 I01CYjhgOSV+WXFfWk5GMFB1Kj1HRVZ0Km58RmF7UkdhODE3SFJqKlBqM1kw M34hcVNhZjd6CnpiWShoWWElRXczV2RKZlRGKSVHTEdBJUdNUjVDQytHJjRG aEclR01RSXhzTGVuSSM/bzAwMVIpTU9idVhWUlU2Vwp6WkVzfDBXX2JXSUZm bE1LRmdZelNGO3BAJEl5NXZvRmc3Yk5IOTlhYiU5bUJGMDAwMDBOa3ZYWHUw bWpmLStHSEMKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X2xvY2tf cm93cy5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2lt Zy9leF9sb2NrX3Jvd3MucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQx YzExNDhiYjE4NWM4Nzg5OGIzZmRkYWE3NmJlMzZhMTU3MDMzMzYKR0lUIGJp bmFyeSBwYXRjaApsaXRlcmFsIDE1MjAKemNtVjxNMXJQZChQKTxoOzNLfExr MDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwNzhQKXQtczFwcktM CnpZaW48OVpFPGRIYiNpaklXS28yM1QpMVVYeE14d2dYO0ZLNGMpRHMpeEAl RTNoezN2VVFHUkBVeF5Zb31ldHhgagp6UUc8WWh5bWU4OWZgWXd4UUhYfHl6 STspTmg9eyp7UUgrWDszOH5gMGY+RGkoakU7PHF6PVRuYmoqZkRjcF4lU3sK eno9JT04aCo2U35sOVE4QCFIK2hZbTMrZEVRSShhSW02biM0bXpTNUFuOGNE JSNGJFlzd2RJPGdvfH5TWWIqOUloCnpwYHBUX1FPMkg4b307NmxxQD41QVE5 LT11JWM1QXhyJX1uTVFBKXQrJUJ4WT1zN31oUVFPQj1TJSYkP1d2OVpqdQp6 UW1DYERVQnY0QnRwVGRGd1dfd1pXNSgqdXdwREEjPXhFNjcmYm5Cd3kxTEd+ UytCZ2pacC1ZanpQQCRNP0FwNzIKenc4RnlNeUB9KCFiS0pnd3xHaEFLKGVK anojTjVHeGd3Z0taIS1Jcz1AWlE5UC1vfVFFKWI4S01odV9HRWs9NT90Cnok JSowMmlrSTIoPElBNG4mV3oqQ3A1KUQqOz9SeGMmWXomJEAjRTV1PDxPenoo fiMhVHEyfCR8PGtYU28oeFQrbQp6bElHSys8PF50dClUSE90ckxOJWY9R20w ISpRViYjcns+ejA+RGoyfis/Vk92c3B7RmI+RCNMNytQQ1E1bmQ7ckQKej9B KkJOO0Z7fit0biVIYT9BXk5TLT52ZkFyfGpPa154bW9MO0h+UThvYj16Uj9C VEJNO0pmUE5vJFRWVD9jdSFpCno7aX5OOHU9TH10P2Q3cmI8Z2Y0S3pVfTYr PyZoPWE8LXFwa3ZoZTE+YFFAP2k9KEcwY3YtYW4tQDlETXE9ZDx3WAp6IXVh VTZAYShxcz5ibSZxeGJmQDZ7cHo7KD83SCZwI3JmXk5gUj4yQD8jMSkpJHA3 IVpgU0hOe0B4bEE/IX5nTlYKenxNQWxPXnYoYkMpY15GK3xNdGlLX1IwVkQr Vys/M3xNPDxTeVV7OEQwMDA0V1FjaEM8SzwzekgwMDAwOWE3YkJtCnowMDBY VTAwMFhVMFJXbnU3eXRrUkU9ZmN8UjdsNnxsaiZDeVE1ZVJ4ZUgrX04lV1N1 cyo8IW09KmBCdThCOGlISQp6Q35tbGNwb2p3bTFnTU5faE4wNEFHXkhreU1w O19meldpQzt4cHgjaWotSmtgYkx4WmRoaTdLYW5jc1FlPWVoMzwKejNZd3ta UHpNT01yY14kSjVERWw+UjNhLU9GKUBlOHhnciE2NlVBQkMqJWRAWlVTWilh ZileMSlMX2BSUDFnTUZgCnpyUCRiNUEoMEM0WSQ3aT9TeSlLP0w2X1ktcXFh bmI8TSsqSTx8Jm1VY0FaYlZuUmV+U083c0NuMV9sTzMjPzw1Uwp6NDFwbnJW U0s8eCkzZ18wQXx+WlIlKTBRJXhWU3xLOFIrYjZfaSpaSVk7NWNVak5OTU8y REgocmI4eUpuaXlQUi0Keih0WD1HcSNZc2M3X2w+ZXYwQU0oPXJaY1lrZkBY eGo0dDBsbj8qZUI9eDN5VGJ+e0E2dCskT2RhTyFHbVN+MFRlCnoyNHtURSFD PlNDJXxHdHE1cHZQeDF6dHlNUXg4SX0/XnZfP15xQ1hLO3QkT1ZvKTtZeWJQ fStZZmkhKXh2ZEdvPAp6cW8yTmZ7UEYkc0BMKyVjUkBmenpFaWx4X0ZoanVD LUEoJnwqWGVOZGZGNnBYK15FYXRjY2E1PjRHI0E5SzNVSHEKek5sOGhXMFdQ eyY3dThMR1FZalFSZ3EoWVdrV20oUzcmZVlEYn5fSCU9bWRfTT5QaVl3M1Bt WUtQUUNVYzQ/X0oyCnozWUpFfXdwT1pDNnNSakxtMEoqVXtGTldNemhkMFdX RVhDbSNvfElwezBsI0ZIe2BieEpOJXFRTWlGdm5HMz9AXwp6eVBSSDVkcz5e fFMtOShMSGFCcFkmODgwMlckKTh4RkYkPCFgUiM0KnoyQGN4NVcofExiUm1a PiV0WnpIZFc3dFcKei1uTWFWU20+JXtBeGpwe3A5Pk1FUDZyblFFMlVCPz5W UW95bXojbTlBWVl+amR7KyFiK1FjYWkpKj4kfEc2OTIzCnpDTHtSfkk2dzg2 UWBVdEd4LWMwIUshPV9yVFg+UDkwZn1XeVBMSUN9TWIpe3YpNHwkZChDZ2Jr aSZqKEJ6Jnt3Qwp6QU1YSEc9cHZUezhtVUMwPTExXmkxUntEX3UyYylFQm9n cnkyI3ohbUEjPGhERHhqOCMjWSVwfVpMeWVMNlRHeCYKekcqJEpXVWFlSHR8 RnkoaUNJZFZMdFpnS3paMj04eHdIa0kmbVkzSl40fjc+NUQ9OUBUI0hAPlFr d3tkPWp+TWRWCnojbFdnWCFUT09CZW5ieVhMQ2RLfCFYaXFzU1gyKG1yYmdP R0V1MEB+cG9gailsOUprSzU9KT0lUj9nSl9TaWI7fQpXdWljeXltWCVRZTAw MDA8TU5VTW5MU1RZR3JBYjJvCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2lt Zy9leF9tYXRlcmlhbGl6ZS5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF9tYXRlcmlhbGl6ZS5wbmcKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMC4uYzNiZDBiYjkwZGQyZWYxY2MxYmFmN2Y5MzI4MTdkMWI2 YmRmNDYzYgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTIyMQp6Y21WOyQx VW1iUFApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcw MDA0aVApdC1zMDAwMV4KenlVY15FJGFTWDJIaSpIViZFQWExLUlLfVBzP3kt SClabkdoLW1USyN6UyFiJCU8VihIPX1vYHJRXk0rbiliTnpwCnpAT3NZZGh0 dXdALX03c3sqPms/eTVVYiozI3BxbmE+NXxwJnBSS0hhbzEkYC1wfiRhOzte NTJSLW93RjxIdVVodwp6QGEodFYrcWQxP3cmMn51PiprOzg8ZXU7OHdkJilZ LVB5SjI7aFhSMXYqNnNwXjZrYVV5YCNzZmI+R3s7O29admEKej1DYmtYI041 fWsrfHskKitROEBCbSomfSY/QmxUQSp0T2YjdkZZSE49LS0qXztIfT0relUw LUI7TT5UQ3Nib0AoCno4U3YpN3RKR31XKjFoMWAkRkpMUnYqQ0J9PSkmc1Z0 TGZhVD8mN2BMKFhaTGh1RyFBNXFRemdPJVZlPEpiR1BTdwp6eGEpdTgoVTBR SmpPcDJeK1MwSngpVnNSdWYjSi1HPSt+IyUlJmdxZ3k1UCEqPWhtaioqdjBK S3k0JXZhK3RJa0AKeilUSExxcXUwciktXmhwRiNmOUMkZzY3ZW8qdnpaZyVk NkpNc01eb0I8aiRibnpKVDc8IXxVMCQrUm5HeSY5fiZ1CnpwNXg0KDxJQTRh I2lyVzJlY1FjJSY9Z2MlMDAwMDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdV TkJ7cjtOQn5DMwp6WWQhen4wKD9uQ0t+ellgP2I2cCo4Yks1WFVfd3cjakdB STFyVlh0MEF8P3lVTj5QZzc4YmdzN0xrcXBQQ3x5QVEKel5+fWhjO3x5QH16 JlNhMkBJS3NeKj5DUnQ/azxuX1EyKGVOQGxrT2RKOSNXWCNyNjlLe0RzOXU7 UyZHSikxfkVTCnplMmZUSVJAYWB0NVdJWX56VyFRKGs7T0x+OCR0KyQzKEV2 cTZeVFRmZnxhJG1vOV9nM1BJPjxVNzF1SEhAaXFuNQp6PztpbE1MP1JKJDlW NjcxUjRVISNJen1XaW5Ne0paVHROYDJRbUtAcHUyTjRXYWBgTnhRZlghb3Qj JF57WG1yfisKejtqJDxjYFdhYyY+Z15xamQ7K01yaiotdDREeXxiIzZiZCor UHQlNXBEUWZpPXdQUTNJY1puPThnJnhwKkNLRSR1CnooZGJ8YjxObShjZilq PC1ZTll7ZkdUQkk/KSpUIWdBdSpmbjFoSEU4WHV6MGtIVX4pIzRrNTlhJX0j PWRYX1VnaQp6STJeNyFhXnlaaldTbkJ4Wm50fj54LXNgTEdQNV5rVT5MPilU ckE2OzBDQGp4ZUwwMU8rTz0zTFVuITUqPit8QzsKeiNASjhfSGdGYlgwbmgj SXtRVVUlYHt+NkdIOytyPDRUWnhJbDA+NXtWOSRjVipxPHBFS2hZR3MpOUxo NXpIbUlBCnp6PTxPbzJ0WDF7Q1IyQ3UtQUV1MzNpK3I9SmV8KHFXU2stIU9R b3tKI3lubWhPeU4mdEdQJHxgdUBqYiFXa0VLZAp6Rkp5Xk4+NGApVmVreFpp bUdDS0NpaFF8VEUpV0Uhc0FRO093TnxVK0Ikb1ZqbkZvYihgS20jWE03bU5m UXVTSmAKeioyR0ViQClGKSh4Vm9Ba25NJD08Zn4zX1YydWpmZz9NOT1+Q0ow UFgmcnpMYnYpUCRAVzckRmgtcnckYWRsT1VZCnpiJEVhMHg8QTBEYTRFWE87 amwtTGRKQ29LLWB2fmBhTUZPSjN3bCNYdm8jdUJRLWk0bEswSzktTSkyViZX U3BZaQp6PnJHX29eaWhoPVVAKHxfVi1OTWUpbytqdChlUHU1QUs/SDEwM34h cVNhZjd6YlkoaFlhJUV3M1dkSmZURiklR0wKekdBJUdNUjVDQytHJjRGaEcl R01RSXhzTGVuSSM/bzAwMVIpTU9idVhWUlU2V1pFc3wwV19iV0lGZmxNS0Zn WXpTCmpGO3BAJEl5NXZvRmc3Yk5IOTlhYiU5bUJGMDAwMDBOa3ZYWHUwbWpm VkozdCoKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X21lcmdlLnBu ZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X21l cmdlLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZmQ4Mjk5ZmRjYjcy NjA0ZDBjOTc4MTZkMzhlZTI1ZWM1MTY5OWZmCkdJVCBiaW5hcnkgcGF0Y2gK bGl0ZXJhbCAxMTI3CnpjbVYtdDFlcDdZUCk8aDszS3xMazAwMGUxTkpMVHEw MDElbzAwMSV3MHt7UjNEZEJqNzAwMDRpUCl0LXMwMDAxegp6bUM8SHYoYXB+ Q3l1SXdkITBwa3xeMyZBdyRIPyE7JG5lVV9AIVErPSo0T3BuO3JGSmY9QmNh YSFOVHN2I3FZSlkKej4kJHFAIV5IMiEjXykheldLeFk4cH5QTndycEdwaiFF ZXAoTEE+Wm4hMENJQD99WEZ2VzUoKWUkbjAqKj8zZFpgCnpweGcwOyhlOH1Z P3ZkNSp1SGY/dHNwNEo0Pk4yKEViPE9OKyRMT1FTVlJEd0MhSCtpY0BXfUEm dyhzZSpeWDxtJgp6PUNiWU92R01Efj5nMWoyO0Z7OyRtKj9BLT9CbFNlJXdf ODFvYW8rfT1HbTMoOzstbzRuQzk3KDw9MnohO0h7PzYKelhZQW12QGFWJEZz JiVXP1owcH54PmZFYUQ8LXBfOGtLQHBlPkRzQWJsYG1lSENCZXdMPGtnYUpv a2cwO1UzamlPCnpwMCRVJT9TYlVla20xZFlpPnF2aXlpSnxaVnx1VmF5enFx WTxpRnxJcnwjbXR6c0krJC1mXzY9ZkFIcU89K34jYAp6KX1gJj15V3p9PTtL KyNJJEF7K0JxfjY3YT1GXzkjJCUpPj9oMjZ1MD1GeV87LU1aJHxxVV93Yj1G eT8kJiFPd3UKeng3QCNnK3I1OX0mWTwxRmc1JTdkST87b18wMDAwMWJXJT1K MDZeeTBXJmkqSDMyO2JSYXt2R1VOQntyO05CfkMzCnpZZCF6fjB2PF8zS356 WWA/YkdYNShyXzNEYUdEbn5FelFjK2YtPWh0P2VmNEZfWlQxdXdGJVIoTGJe PVdXZktOMAp6RnFAJEs+OzEtb2I2OTdgLV8kcH5AT2ttUGA8Jjxae3FEQCt4 RSNrNyFXaCVXNW5ebjdWcSVoVFVZKXUmTy13dFQKekd1SF8kOE5WPypKNGY3 e3BUOUxtT3kwZ1RIU0BvYXZ1OE8rVjs3aE9hXmI5bXlofm4pK0BwKiFaNSpO UXlXSCp2CnopV2dMYE9PTDUxJVRISUhRQ1E7Z2NzeT11YiMyWXtvTFhMOGU2 Zk5qX084NGZBK1AlSEgqRmpOdWd+WjZmfHNVZwp6S2xtOVk1Q2ttb2crZGAz PXh7ajkwMjdIdVcwdklnS099QXRtU3JGaU8oYz53TklaQFIhP0xMVyMxaVoy ajN3REgKeldmYE9ocGNLSm1Ian40V0goLW91VGFtWTtTTnRAP18jcWdKQzNC R0RJRFFrYmdrZSg9bHd2KU5RZ0hjdkw5aWxRCno4ezYrMyErIXZuUjBJezlP czkoK0BQJmRrKj9JcnJCUWoqa0ZzUnJsRG1HZ3o/KCZGfiVhLUtSPVB6SGtO cz1zeQp6JGMmYGVnRlFqME5MSig8R1Qob2NOfT8hfEhYQjFgWEE0fnNgJlYr PTRFR1pAY3xuanNsNFdKej5kTFM8djdhVD0KelBhJX1jKWU2V3BSanI+dzI5 MHNNYEdQXkpSVCZodShQKkFSMkglQ3g4XnNEJE87ZSFXX3w8Q1QkdU5iMlFY RGpZCnp3LTIkeldARHgrbDJETikqc3NAezJYT2REKk5eWkl0N3V3bm1fcU0j eTJwNFRZYyo3Q3YoLUEkNSRTZSZjJXJCKAp6RHpARF4+Rjk5V3dNN09nYlIp JTR1aCt3OElZKG9jVj55MlRXbnJaQUNtYURCMDAwMGJiVlhRbldNT249SSU5 SFcKelZSVTV4R0I3YlBFaXAxSkZmbWp6RmdpM2RJeTV2WkZmfT9iRmdUZWQ5 c21GVUMzSG50Yll4KzRXamJ3ZFdOQnUzCnQwNVVLIUZmQX1TRWlmQHVHQll8 ZkcmKFJnRD07LVdGZmh1T1JqZEYyMDAyb3ZQREhMa1YxbiZPUHlZWV8KCmxp dGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X21lcmdlX2FudGlfam9pbi5w bmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9t ZXJnZV9hbnRpX2pvaW4ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdh OWFhNTFmY2U5ZDc3NWYxNjlmNzBkMTE1NzYxZTk4MTc1NDFjNDgKR0lUIGJp bmFyeSBwYXRjaApsaXRlcmFsIDE1OTkKemNtVi1GMkVoND1QKTxoOzNLfExr MDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0RkQmo3MDAwOTNQKXQtczAwMDFg CnpzTmBtQShhZz45eXVSJGR6d04pbD9hPE5rKTcxMEYkblZJPkBYTzJiKzFt Qm8tMVhBYV5WSFB6KXo8WGs7ckcwfgp6PzUzI1pzSCozeHRtbmJQPyMwRkx3 NipIQ3g5aHBPPzlJO2QoYjRrNSNQN3clQFc7c1QqVnB4I3ltKFRMOEtKfnAK emlNaVcwaHswSCMlV3V1QE1aVzF3ITBBKU0+Vj8kc2wtVGZrJmdfSEg/VGdn enQ+NSFhITBCUGU+dnFsVHJyej5FCnp5eSp3MTt0O0ZpOG17QUEjcGBqKT5g dVBzVEVYWEojcHNnTj8tSHh4RVZKWkR5eWw3MT94TXpEZFktOWJpbGNPawp6 KXVZRUAhSCtpZEB5WVApeEFnR0heWUY7Oz5iQ0Zjd2VSVileWHxzTCFTMlMj QDd+X19xeyg5ST1BWX4zcDZ+MG4KekA5TVNiOyt5SD1vOVc9MT8mcV9zdG13 MH0+YiQrfSlZUzgoJVZnXjBvI0B9MD0tISNgPUNZPkVYN0tFYD5mQGQyCno7 KypnM3YqX0tKPWlIYT08Z2xwRVghR3NIXjZiVSE9Q2JZT3ZGK29xQCNAMj0o clZraWlNNSUydEpRNHQ/I0o9Iwp6I08maio/QmNITTtIfmlJIU19enZ6bD8q bVZuNEo/NlMhcVMkKDRxMVgxSn1fWnxMNWI/QmNLRypPVFNkbEh9QnAKejxq YWAxVT5uSXo4ck0tRztaIUc9UjhzWm07YilzUXF0Und3bT9pNCo8TEJGIT1H djl5KH4jclJrSSQ3fTsjNFVBCnp8TnEqaWloSE9+biN4Xnh1MEZjYXFxKiNX PUd2QyMqX0d3a2w8VktFPEk8NGgoVD9LS2psTzZ3ISpEfk96PTRPbAp6T3F8 WVBkYXl2Yz90OzdUZ1k0bjFAOC1iaiteWHJAc19FTFB2YGlHfEA4NXtNUE0q PFp0S008QT53bWlKZnhQZzkKendPMURFLUteQH10TUJCJD8mSDFiKntBNSZy fDgkRihVeGNILW1LISFqcF44QDtMQ35OJGNXI15odjM0ST5mTmcxCnomV3oj QmpOaXpJLV5QYUMjZjllNnFxbF5CdXdGajBOKXlEOGd5R0RLPWhkYSYjZklM KmgyNnUxPUZ5XykpfjQ7Pgp6eVhAWSY9Rnk/KytxbXVFeXluIVQ9Rl9DPy1N Wn1EeGFIOEg8PEZ0eiZZPGhzeDk4TlAtbyU5NXpKU31rZjhAPWQKei1OSisy IUdoJEBweGVCRCtQaSteJSUwcjlmIXgxPStQWno/JWJ3KVVwWCVBUnNHT2Mk MDAwMDFiVyU9SjA2XnkwCnpXJmkqSDBiKXg+TTRia15eMDVFXzAxMHFOUyN0 bVkwN3c3OzA3dzh2JCFrNlUwMEw9QUxfdChZJDc1Z14xJm1BfQp6Zkk8P3wh bzx3TiVFciNiIU82d1YhXkYkU0ZDZlQ3UD5ZYlRoXlFFb3hQK3ZYRz9SPzFv Vj56ZChMJWFrJE90aEMKemZURUhqc2Fsa2psXz03cHE2entLUVZxZjtxKHhP LUxzTHN6Ull6QSgtI31IfSg4JDxDbTdvPz1HampffFJWITs3CnpUUlQtI2Rr MDQrIWRpJjQjVGlNOTMpdVktKGlJJDhackhUQUJXZHlRXnohb1pfVkRyYl5B R1N+NGgpaEcjK0Q/TQp6TFhmcTFnQCVUT2RxaE09TWFPc3UjbTI9YVZBWWF7 cTlyVVdEWjt9KUl5b2cza0NycktFJEstYW5mQE1HJD1OeCUKemMobWpwWXc/ TmpeVXdEdkNAZDsyIVErPXdCclJuZ0FPSW9EYVZCcjIzUz9VPHZ0bS1LSlc4 ci1ZVX1ENzhrP0cxCnpUQ3IocUwpSEAwb31FK2QoYjN0fS1QN0NHS2NUO0c7 dmBIaGxjITliI3NKRiQ5O3JGZ1hMTllmY0Zta015S2x+JQp6eHBVfEEmQk4z KGY1RX48S3NgIX1MMyV1TG1uPmFZPiM9O3IlMmxpVD1ZYUl8dWZmIV5jSFIw N1E8YXBJSGZ7cHkKekBoSXVvVHdDWHtXJFUpPk8ldnZWXmkwQCtzYiVOZFVB eTx9LU00WW17ezJlR0EkRmpERT1VaEhUWSE0elBYXmlvCnopQiZgbVp1IUFP aGRxdVFKJEMjPUFJS3xNe1E/V1B7YjBZR29WRHVJYzh9OSUmWW5BdUpIKCY+ OGUkaHRVQSVQSwp6PE1geihTRmhEeXpqM3FpUngxTW07SVp3fT9LOChjPyVj aDF7e2lrYWhOfFZyPjA9S2NjfDUtTTtLQF9tWCQlRHIKem0mUTxTZDNOWGRp PGNnK1VjWSghaiEwV1AtZTNLMnxCMSgma0RvcSRDZXw8ND90bDZFK1QrYCY/ Pn5NTHRMNEdoCnpVJSVnYWVFJEM5JnRHRC1KYm0tXy0jZF4wS21ZI3lQckRF czE9cy1xQ2dULVIhfD1xPzAwMDBiYlZYUW5XTU9uPQp6SSU5SFdWUlU1eEdC N2JQRWlwMUpGZm1qekZnaTNkSXk1dlpGZn0/YkZnVGVkOXNtRlVDM0hudGJZ eCs0V2pid2QKeFdOQnUzMDVVSyFGZkF9U0VpZkB1R0JZfGZHJihSZ0Q9Oy1X RmZodU9SamRGMjAwMm92UERITGtWMW41dnJGe1NaCgpsaXRlcmFsIDAKSGNt Vj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF9tZXJnZV9hcHBlbmQucG5nIGIvd2ViL3BnYWRt aW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfbWVyZ2VfYXBwZW5kLnBu ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xMmZjNTVkNzZmNTA0MTQwOTM1 ZDVmYTQyMmY5YTUwNzU0MzFiYmMzCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJh bCA5ODAKemNtVjtfMTF0UUFQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAx JXcwe3tSM0RkQmo3MDAwNUpQKXQtczAwMDAwCnowMDNyZChOY3tXSGkqRm9z TnhXLTskKVQzYS0lZ0d1SChVdkhnPjh6ZFktOXh1MEZNeWV0Tk0lZ3M/Pz92 X3Bvcgp6TmtGe21NWlcyZndyb3ptPTFqb3ByS3NlbXNwbkl8PlJRMylqbG9s d3lMRmtvYyZlPURpTWlXZCNwYDZuPSZyQm4KenB+UE9JJDYlSnNVMik2b3F7 P0cmJkYtaG9XX3IlLStyRUY+eUB8Wk4/QSpWQitgeGdvendOJWk/Y0txR2dW RjhYCnohaF5yVD9jVChNIW91IV8pYlFUTGd+RyR7aWA0R2wkQSomQ0A1UlJO eTN3UD4jXytEJWFnXkJiO21uSFMmeUNCPgp6QCNNeyg8aiRZVyZHRl5WcHlT Ync8PEZxdyh2UXkxXjBlYzU8a09KbChWXnRqaz49OCk8a2diVihlbWNocjAz TTYKencmIzUxKk9UWWZyTEV1ZCk3MTBTKWIhfXJycyZ0Rj1HdjklKnIoUmte dHRQUT5EajJ+Kz9WT3ZzcHtGYip4Ql5ECno/dDx5dXNfTlhUPS0tKl4rcW1p QW4hTkNZPil4I0M7aFhIO3k2Zk1xP0IyVFM7KypXQHQ/YzJoPmcxaSs8Oygy aQp6dWtHUXk/QmxRTzxGTWBIdTtBZUw/JjdgZTxneERLelV9Myk/JmgtWjwt aE9kITArZ0BAOURKZz0pdiZsIXRkJn4KekA5VmJsPmNqQnR3KCN0P142YlUp P1opJSgkTW9eWjFWcT0yMDAwMDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdm Cno2OTUxVTY5RTk0b0VRS0Ewa0tJJEt+ellgP1VQa2chJDFeO3YpS1VVTFVF VTEjb2dXQW91ViE3P3lraWh7eENfJQp6MDhQOHV6em85Kz1pJEVXZH5AI0V2 JiU2NWBqTnNwUVMjSj1hUGRDPUxIUyV8VnBoPXJyeEVkWGFDREJ+VipQPzYK ek9Tb1RpYWd0S1ZRKEgqM0swVCoha2V6UG45eSgmUip8UkJ1RDV7akwkO2N9 b1d3bkpRQmoweCtoRSEoWkc0fGIyCno1Nkp8dXFVNmFpKmtKSEBYTmROO0U7 QG1zQVNveWVlTGRsSTJLLUhnIU8+VmZpeWI2Ukxmay08SlNwd3QxUE91SAp6 JEF7WSZjc2VgV3kjfT0jNkJPI0AhaSZobUhkP3VhdipFdDNXdVFGTkdNNVV5 emApJUdueno3eVVxfHlTNFBraEYKenRGUmhlRXV4NzcqbGNVODk7ZHFLVGly I01YVW9hSzRQNEFral9kKkQ/fXZ0bmd2eVFDSzNMcEs+QmFWMjs0eTUhCnpG Y3BePjNnUmxJa2YoSENvPVglJlE4SkdgbXR1VT92bldjJkdYays9fDU8ej4p K0stYk8xUihNVHQwX21iQVFqTwp6YnVZd3tWR0F7Kk5pWT1gV1ZiNjJRcHZE fXMqeEZ0eCFHd0EpPTA4Y3VSTmBnSWFHIUVwKSlmenNhRH1hU3tZNzkKek92 WklzWHNXQjdRWHIoMmlTe1poNkdkS2BqMVg1UWlvRWlfe3pQeGh6biFIJTR3 PiUmMDAwMDxNTlVNbkxTVFlQCkNnRWd4RgoKbGl0ZXJhbCAwCkhjbVY/ZDAw MDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhw bGFpbi9pbWcvZXhfbWVyZ2Vfc2VtaV9qb2luLnBuZyBiL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X21lcmdlX3NlbWlfam9pbi5w bmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmNlNDgzOWUwMmZkM2YxN2I1 ZmQ4ZTM1OGZmMjA0MDQ2YzM4ZDI2ZgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVy YWwgMTM0NAp6Y21ZK0NTeHszNDc9PVRxRW47MVliKWt6Und2TzVzOHhUUzE9 cGRwRUJRU19zNns7KShSPyNCSlNqNEpxM1JKQlgKelFEa1lQaCFfQEFSMEly eGtkVEVDNT1jVDR2V0Z+fUVIfUFYP29CfCRPcnQqYTtyd1VMJT13PUZRPGEk VDw2ezVNCnp7ODE+PjsjaDE8bEdqN3UlRm93KEglJTlvcC18e01pRSMoX2M7 alFkRTwxLWUjPDd6SSE5bFd4T3REUHg5RCskRgp6YXw5WTsrMVBCbU0yZzdl MncmaXdvUD5vVWN6VzdSOFVTMUkwS1I+dXk+b15fd2JKUU9fZSlieHVsV0Bi PFp2QjQKem9AMUI+KEhTPThoKXBhOz5QVXIydyp2cDY5anwmTjMkTFZ7Pmsh bHJ0NyZwZUYyQD1fV0szdDZGTDF6Q3JLMTtjCnpIN251QUQhNUd6UTtsd3gq LVppdmlvciFVeDx0QGk2di1JU3E1MUJHNG9kPjYxbEVUTnhKK1FINVpaMnY+ O3coYwp6ciQ7KX4mU3g2dWh7QGZ8TkcteSg8PT99cG5lYEtse151X1pNN3Jx X0dvNWxmOUphRztWREg/bCZXKl9Rel5xRWAKeihyRGNQRmwpOEdaZWVBWmZy cDQ9VCVrbVNMWj9JbUUwaXZ5YXFjbFl2ejMjTEFPRUZ8ZV9BJEJDRm5YUTlW N0R2CnpfNzM0MDhgdU14ZHo9dXtqWSNMKitOYWBObGtSVm13JFo0cncqb0k8 SX5UVGRVfSgoY2tlcURUYGlQZih0b0NiQAp6VD8/NmRqTUVKVVJvI3JEN1N3 alJWSlUzbUlINTc4bTV0Y05tKyo9OHFzSXlmSkJocVV1ZlNyK0BXUDtjRmVB R1UKek94MXd1cio1YWpYJkg1eFNxTE8qOFktekUjeC0pJmlAS3RZS1Voeitt aTl3c2J+Nm9CNlVAcF5OSnBNVXJWKj5xCnpaQ0F9ZXM+Kj1gOTUxcyZuYiY4 Jk4oNCh0d3NJUlZXUiRsWHJGZXQqaUFCfSNjQm8qPkJuJTNpV2BQUyo3XlE3 JAp6XzgrUXwzTUtzLXoteHhWTmt+dEZ3OEtebiluUy0waCs5PlI+Jm9HQjEq S0YhLXNDaiVBcX58IU98aHpuOTVkczwKeldRJjRZQ0xiITE0UDRjNmExSkJT cy17Pn1MbCEwMzRzZ3d+SzBVV2RKQkJrJl4mbDNSMH5vakt4dipLUFcjZ3A4 CnolYjxKXjhaTT1ITjlqfExseUNxUTF4I2dvIUBfZ2VxdnlTamVXJCZ3b1Nv aFI1RjR9V0FlTU98WlN7aFdaXm9ASAp6anQ8fmNYPUJ0OzJBNCkqKEsqOTNI dUwrbkJRYzNMe18zajR1ZkUkPy1jbDJHX2h4NCFpSkhjWENaPit+aDQ+ZFkK elNGZFlKdUJvfVZrPkF8eGszTVokK3ZGM3BAWUhfY0J3eGZrQm9zdG8hamRB d0wkKz0/eWE3K0FAPCprNmcoOXchCnp2UkBHXm1lQjhZdDw7PiErcylUM2Fv d29jOzglRkR0YXhkN0BFfHRYPE1CbktKQGU/WShvKnp9dmZhX2MpUFpORwp6 cy1pPnolS2AlZil2Rz5UdjB7WlRAWE9fJnVleUNgQUtJODQ1RyReWkEqTlF9 PjI4QFZpVFkrNmpYeEIwfEloZSsKekFHUWJBOWhGMy08bWN6eHI+Wk03d1Zx UHlJJnpieW5qYjJedmd1IVpYR1hFIWhpc35zNXt0OyE4TGh4ZGQyK0gkCnpg YV5NMVAye2QzNTBRQU89I0ElZiEtbHhWQClXamkofTVAUGhtKEAoTHpkJjJ4 ailUPSt0MUdmRlhRVVRzTlUzLQp6M0NGdCZTXlRVbSpfJUBkRmAxUDxOY1Zs O3ZweSEyXm0mSDlVNnx0JDVtTHpNVTtVYnI9RnxISFNSM0VhZHF4NUQKelVT QEtTXzI8MT07TktMfmF9cFl5fEghanNQMn0mb2prfCY7M2IkWUkme3prcUpR Ozc/QGYrPylAVCQhP1Z1MXUyCno2KnxSKTw/eH5wbUlZPlA/RD1eeFBzXys2 bzVoNHImZlpZbllLWHtIK1dJZTtNTmV+UnVkblMpIzx+ezsyOEhgfgp6cDs3 eTBlVjYqXyolOTg/dVBAa2hxIyFmQkFTPzFqZXdOb3pwX21YJWE3YnR7Q2dm bCFDTmdZR1dMVmdAbjV+ZioKdCUobEFxWXlKbkUmQ05XT2VlcGVqKzVRZkEr bTZKOXpYd0taNHxSRzBSUDNJRjcoI1NmPjM8b3BEUy1lMAoKbGl0ZXJhbCAw CkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9z dGF0aWMvZXhwbGFpbi9pbWcvZXhfbmVzdGVkLnBuZyBiL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X25lc3RlZC5wbmcKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMC4uMTVjNDczMTZkNWQ0MTYzZDk3Yjk1Y2RhOTli MmUzYTIwNDkzNDFjNQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTEwOAp6 Y21WLWExZ3JhclApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1Iz RGRCajcwMDA0aVApdC1zMDAwMk4KeiFxQXFQKFNMKXtiOWQyWll0Zj5tPGg4 Znp5VDB0aCNQN2h0P1pDbkEhTlRzcyF8dWV6QDVSUk4jPmVsKyRuVkk+CnpA V3smVyVGRlN+JTw7XzReM0JmaiZkJX05JiteZEZeM3YxdSlZUzlVKSU0ZmJe e2NNdHVDZUgrc14tN0k/WVg8Xwp6djlzeHRtRVV4RSl8aXsmIU5UcFBzTDtk Mig3ZTl2KzFkNUl6d0Yxd3gydlVXb3M+bkRpIVk2VjhOPFNLKSFDOFgKej1B N3A5cnt3WFc8TTUjNEBTZnVDcDVwREQ7cTA4QD8zPmB+bzhSYn0tc2hPJD0k X2YhbUNAM1R6cjFrTCpvKTI2CnplYlU7OCtUeFNjK0tSfV5jRm9VJSZDYzwm dXcwbXFFVX5PdiZkLUYkJGFCeG5pSVNEa3dYbGNDIz02PHhqTlJneQp6K1RX N2UtalVoZWtMdlRjJGpSQGlxR1p8SmtGQm9nKnhRZjJ6d091QmpKTFMheFZo YHMqb0Bgd3RtRXNXKnlNb0wKeipOZn0mejNLMHwpel55TT1hSlJjaVBoREwt c1A2bSlRRmRqRTc7cVUlKn1uVHM4IUw9aU85cnghb0Y/RyRiezA+CnpoUyVE VHl0WnJIO2d7RmVqQEgpbkwhSyg2MDAwMDFiVyU9SjA2XnkwVyZpKkgzMjti UmF7dkdVTkJ7cjtOQn5DMwp6WWQhen4wdC1uKkt+ellgP2JZajMrQ1VIaGEw RV5TbTBDLSFmYFVURDJiRntjQTg5Uk1NZH1rJiM0NV84WGBANkQKek1EY0N3 enBtbXEhekZob14wblBCbmNVMjhfSUI9V1NFS25LNTdESTY9QEIjWkkmQmoh bmhoO1JRKV5wV3lVfWNaCnopQTY/Um95R0ZMPnFCPnMpb1FpYmRWQmxxLURV QDd3OVdra3tSUzU0Ymg9Q3FaNEo+RzIwamtEU15JSmk0WkY7YAp6OGxyYk8y MWlDJiNnMnspblJAZyEzJmBubEdzU34oVFJ4IyQ7XylFTzN4VnRrR1dQV0E8 Iy08YCFwQyNvRHpUR0AKem0tN2U0Q25sIV5MSFBWLWBmRCY0NDI1VUQlfDsj I2c+ZTQ0PT1YVXtnY3FXVk9BJF5AbVkxdSlkPn1mdjYydGN1CnppPzZQJl5E MkArRERuNygzMU1YO2lJPCgraDtSTT82P3FQcjZrPHVgVmx1WTUjVXd5ai1E WiZ+R0QhaXdtWXAzRQp6TnZUTiE/ZTExaDhYISN+ODZgPWVfSDVTcGwhcHxN JHRlbDRkOXZBYGViaWU5SVo+U2p7clpnPFN3cz0yN2x1LWMKekN7YWxvX1Z4 JHtCcX5ZNmVtPWppSFh6OX4wdGRsLUs2SSEkOElUTH5FTzJ5MHMwSW99ZGlm OXZsVE49X1Z2ejdMCnppSW1GPkdKWl9CezNtNlpQSkV9OHhjWjVtYE9rZSsh cHw8USN1WDN3PG19P3xpbD9gVyRrSk5uZFRUcUMkPSEmTwp6QitHP2pzcDd4 OXhhQW00RFk3MjtnTmY0TF5RJjclUStpZUZ0RTBpKjtpUjU2ZXV3cXN4YHVA bDh4ez9XcXlgM0cKejFMTClVQV54dyVKI0MkbEctY1JxRUMydWlDM0hudGJZ eCs0V2piU1dXbnB3PjA1VUshRmZCMU1FaWZAdUdCNyRjCnpHZGVVaEQ9Oy1X RmZjZm9CXzAzKDAzfiFxU2FmN3piWShoaVopOW1eYz5wcG5GKSVHS0lWfl9U UjVDTDxHJkRMZQphSFkrZVNJeHNOR21zUDkpMDAwMDxNTlVNbkxTVFkpIWMx QGcKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9w Z2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X25lc3RlZF9sb29w X2FudGlfam9pbi5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBs YWluL2ltZy9leF9uZXN0ZWRfbG9vcF9hbnRpX2pvaW4ucG5nCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAuLmMxYzA3NjMzMzc2MTdmOWZmZThjZjEzYmEwZjQ3 ZjRjYmMyMjhjNWUKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDE3NDEKemNt Vjs7MX5VMUhQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tSM0Rk Qmo3MDAwOTNQKXQtczAwMDIkCno+LW5wJD04S05wZDQxUHJZdGY+bTxoUXUk eX0jX20jX3orI0A1SUlMJEg/ITwkPyhke0BYTzVjJSsyITcmaHBSRAp6XjNs PXEpNj9fUyo3VktJQHgjUkt0RjdqKnZnb0wpPURFNCt6UTY2YngkTThkP1RO WURIaSpIc3g5WU9BPjVgVjsKemJhPlR1ZERmVmw7bFJQfHhWcjFhI3FNdi0/ blM9b091Kj89IXM+PDhAUlpvX2RkfT5GKGR+PVc/eWNZUnkxZVZHCnp1SUl3 VT9kPExPSyltUyhzTnhXLTt1QH53VUImQmglanswUj0zMnEkV1gwJWApJGhR Oz8hQ1k1YjltS3RkZStJeAp6QFkmaCoqNEZnYipZJkJPZGNsdTJwXmtUU2lg RFAkLUB2K29zR21AcWtUczJnOFQ5ZVZAYSh0RCZHRSpeQDZGRWcKei1ybn1Z IWdrZiRsLX1vPj1KY2xMXnJfWF5rOzFgcz4qay1sejNpKjM9KER1eXl1SXp6 KWJyRVhpX1g9Nik3KnlSCnpAfTEpRm4jfExCKGJrRTx6O3c7ZEB5XmZqJkRE ST0rS3NmWlQlKCpuJUYlaCMpczNhNzxtQl81KGFvZGY7Pil3SQp6VGlAIUg7 XzlMMV5yTS1ORSVFVDw7T1V2JHlAfEQlZSZ6RmA8bmZeMj0kUGQ0cTIxK3s+ LTR3WDxDWEMydyFlbGsKend9Z1BPVU91eCs2U1pQTCNFXnQ9WDFLaHljLSFI Vi1zO3FzeUxHekpxd0QzSz5nMWowKXR8UnU4XzcpPypISSRqCnpSNDEySVF1 WE5KIW8lKlp1aiQzYkA3bXZ6ZnYhU3hyOGsrcGM8PH1CQDk0QUJvTlZHJERG NlRlK05PJVV6VTxsRQp6a2YrYVFjQj96SlJ+RXg/TCloR3B1LSRaMGpUIVVw I19yfl8/ZDdyVDs7K30qams0ZiZkYSomfipfR3dpbEh9OG4KenppMlN6Ploj WSpqRXVsaTxJPDFmJld6NUlVRGUpdilaQlhCPGViKm1pdEZDMjs/UnhaJjVQ ajVpUXZQTT5GPkpJCnorSVomYXdiaiokQDhpRGMqciheIXJSPzZpemw/KnBX a0FXNWhTPVlWKlc4SEkpUWk7OWh2bT9yPGokWSMqfHlsKgp6am5tU0crYGZS QHluZm9kZSZmclkrMS08dmpWIylfZWFGVWh1Jkd3QnImWXptYUx+PCYmQzc/ d3o7NE9MZXhSMi0KeiRpO2ZYekhIMExnekRJfnl0aSE3Jnd0TyhlODBQQiRI UkVtKXNEKT5mWXNJWENpNzlCMDAwMDFiVyU9SjA2XnkwCnpXJmkqSDBiKXg+ TTYxYUdYRDkjdzAxMHFOUyN0bVkwN3c3OzA3dzh2JCFrNlUwMFE/KExfdChZ JDc1Z15AcW0kdQp6blN+VnZ1ck08KjtAODIoJmNWc1cmQj8+ZCQxZmwjQnJH Qi1DTjY8ajQtPWNEbCV6RFc3OUpUe0lTRDRYMChrYHgKemZSYlBsVzxAQ19X ZmYkMXNqOGBLWGZuZ0tDfT9UeD07fHJ4OHlGZkhEfVk1PE9pWSF7JSNyT2lI JmNAbldJPEBMCnp1KFl6YVFMd2VNY1d7SmdWUmRxTEYtTFcpeHZRSHlEO2BA fG90O0AzJjtZQjRDcW01Mjh3N203WnVXKDBrcFdCbAp6YDNEM0IxcUp4fnA9 PEZENGhhYmZfNn5JbDN5KXckKjVjPE04NUpFOTh5NjRLZ1FfSllBdDUyZUoy NUZhQl41PUIKemVgSCNFTXJLeGFQT2QqO0VxVkRNTW5HSWFWTnIyV1BEeUQx S2Btdmh0WXR0ZEQ3TCgpcU96aUB4K2FMQVUhV2tVCnpIblhtdHB9d3hWMGJO VFlJSy1PM0F5JFQ+ck1WPnRNNzJmfVolWjNRT0xUaD4oU0dVWjBCZFJRI0h5 dk15UWpDVwp6ZjVKcUY0cWk4cW89SEpMbFIjUUpDJlJUJm5LfSlzVyVgVm52 dTRra0o3QE8xYDUrdyY3QXs8YkBLKF58I2MoWkMKem1uPlpkX1JJMytEXnx7 NHdRQlkxUmtQT3NCfUxYUVRxcXxCY1NnfFNiI05geW1hZ0JoMz5zbl49ZDEk aG5YP0ooCno2SWwoVXp6YlRwOFIzXkA4QDZsKCtPbG8/ai03cFRTQStELT9M JGcxRnUhY3hnfEtEQT9tYStUeW0jIX54QnRNTAp6KWdWMH1UVlByeTFzeXlI KGk2MW41Vys4cV9rakpmYktqQXAkN1h9UDBgPzEzJWNQKjE8MG5vNl4jbU97 ZyVNKD4KeiZ6d0RYOXVaPHRFa1BJQlBoNERsRFRwRUgpTWJvI3hwTVd8d2Q+ dENgdWxGKW4jaDE7T1ZJNSpBbTBSQ3pEcWNiCnpMQT8oTlU1MjIkX2JfYV5l KmdaMWhnZm9EKDdIIXBFc3F+I1h1MUY3PjlnbHBhJUlxcUxvYjFlfEsoIzBo an5BRQp6X1VhV2pFckYlNC12RzFOK2pzOCsoWH44KGc8VlUpaG1XNyRldCFH cT5vPCZ5e1FkZCE9aWptVCNzOX5idWtVe1QKemB1KnBKS2R+WF49bHxvfGBA NFZ0e2xGfWdhTV47Vj0pPlh7RUN1WDt7OTNSVDxOd3w5WH45fXEkUkplfm4w X0h4CnpDMUhqYiFITiRQa1dzeW9RSGhVYTAwODwyaS0lR2FZfFFgdzAzfiFx U2FmN3piWShoWWElRXczV2RKZlRGKSVHTAp6R0ElR01SNUNDK0cmNEZoRyVH TVFJeHNMZW5JIz9vMDAxUilNT2J1WFZSVTZXWkVzfDBXX2JXSUZmbE1LRmdZ elMKakY7cEAkSXk1dm9GZzdiTkg5OWFiJTltQkYwMDAwME5rdlhYdTBtamZf YCRgUAoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfbmVzdGVkX2xv b3Bfc2VtaV9qb2luLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4 cGxhaW4vaW1nL2V4X25lc3RlZF9sb29wX3NlbWlfam9pbi5wbmcKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMC4uZDBlOGExN2Q0MDkzNDNlYTkzN2U0M2ViYjc2 ZThlYmNlM2NiZWU0OQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTY3OQp6 Y21WO0EyNXxYX1ApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1Iz RGRCajcwMDA5M1ApdC1zMDAwMiQKej4tbnAkPThLTnBkNDFQcll0Zj5tPGhR dSR5fSNfbSNfeisjQDVJSUwkSD8hPCQ/KGR7QFhPNWMlKzIhNyZocFJECnpe M2w9cSk2P19TKjdWS0lAeCNSS3RGN2oqdmdvTCk9REU0KnpRNjZieCREMmM/ MXtQQ0hpKkcrdEo5anA7S2JiUgp6d1lUY0J3Q1IkVC0qa0FAYiRRbTlvOGlG MD9ZTyRAI0tyRCEmRilSVz4wIXB9Y0ZwWGotdHhFUl9OTCRUdTtUVCkKej1K bkY8X2AxQzd0Z2gkNiNPPl91YE08I0pLKW1TXnRLdXhQPFZke2NpUFA/JS1T bWpuQFJpeHxxdXVodj5Hcl9FCno/IUNZNWI5bUt0ZGUrSXhAWSZoKio0Rmdi KlkmQk9kY2x1Mm98QVU2d2RrbjM8blFqXnpgQjhgcEhRMlNISTBFOAp6Xnpx NT8/Nj45U199fTM2O15YKGA9SkBYSmBvaDk/KSFVVGI9YmgmQ3Jzd3BqKVl5 PjEhRkI4QXBXV1d8KXokT2EKeis0U0FzX1VZO1EpN2d2OClxdkM3aFU0O2A7 XyNaeCh8WGE/aU5VfmgmQ2M9OCYrKm1UazxIYjcpWV5ALXV3MHtACnpLZyFY MCk3NmNvc08wNEhvWUJwcjw+SmU7dVVwXmlsO1oyNT1KY2JQazFnQD08S085 KDtPVXYkeUB8LUhnVk5MUwp6PEAyS0NAdTEpNm5CTTFAPG5wMjI8KEJMOHg4 MzhGQGEocHt3UnFkJWxpdXBvbSVEWWsoV0MzLXA2Y1lDQDlESXsKeiF8dHVH PkJZdEcrVFc2YXUwbklBSDxgUzZAOVZiaj5iMzlhdi05bzd5dVIkJi1IQGx4 WExoU1F4Vmh9dSs+ZnhgCnpiVyk4Tz8maC1YPCsxR0l1a2ghPSpWPko7O0M2 YmtMRlU8Jjw8XnRyKH4jPWlzXnNnYjxMUmleKm89KDhRc21XPAp6PEk8MWYm VyEyVXJ7VT9LKSF1eTYrPE07Um9ZdlFoPil4IzUoMmUyRWl7USRNPWhtZ15A NEN8M2M7QE1+KXp5amIKejxHJHc5cjBtfGgqeCFvUis9JGZGaVBZMUY9Rnlf JSg0cGtjcFg9R1MqeFFaTSh1VWw9ZlpNISYrUGkoQCVid1pZCnpsYkRTeG15 SWpiKVFqND9lJWlXeSRIc0s5c2FDSjJSbUgrXig5TVg9JVpKMGpacHBAZXBx RCR5I2ReV0xZczwpbAp6PmUjbHV3YHtfe1pQM3F1JigzX215SipNNWMpWWYy KjQyKjYjKD5xO153YCstKzxlKH0wMDAwMWJXJT1KMDZeeTAKelcmaSpIMzI7 YlJhe3ZHVU5Ce3I7TkJ+QzNZZCF6fjA+KCoxS356WWBWXytCc2o3LWNkdFNF cW1uVFpqPDRtTmZVCnpQQSthdjkkcjN2MFlNPlE1bTdPNTNBfW9rKmQoUFNy SUVHcCRqSGhgRnVAaGJEfWFFYTUocEBSTVZNOGpSTXBneAp6LUtDK2FyTERz WipQQGBTcipCfVdVfVM3IVlOaUFoVktLSyp2JFI2QypVRDFVVDk1XnkjbTNn by1hKjA5JD1Tc2YKenFKYERYLU5PcGl0eVozMS1tR3xSVlJkKEJXazNWMEtF NFBzS1l0SmkybjJ5M3MxX05wYlp8JiRTYV43N05IRHE8Cnp8QUAlUSRPISth PSRQMkpLeDhlIUFASz1gTnkjYXhBVSZ2QkJHYn4rQktefWRHUEFOI3cxbVh4 PG1UbFU2YyFiUwp6NVl8I3MzWCU+akUzY0Btc3d9Rm0yXz5rZG1YKTtATlFF Y1lSbnxBdUgjUmtnNlo4dWRndHoza3dsVER8d3MpWHcKej0+JiZaN2RYVmFR TUJ+KmhKJmNTZSZUSkowTVhKdkZgUV8+T3F2QU5HSTI2aUVtTSVSKVV4dD1m JUhyYjUxJElzCnpHSTwoWSVrJnZEcDt+Nm1vYGNYKiVRfD03eSFse3pBbnUj QzBJcEBtIWJPWTBlcCN8fio+WiRtU1ZkT01uYGJRdwp6Y1NpVnZtMmZSSDdw Kz5vNyZGOXhLM1N2OWllJF5td0Z0aX5VY0dLVCgzYSZKSGc0TENDNV4lU3ZV VXI/bWVwSWcKejBkNFckeFA4YVlVNl5UWFlXVkl3QVUpdypfOUZiVVp5VlN6 b0F3XyNjbkN3dyliUFZjanZmUSozRXo3aEJnOVVlCnpKYXpnRWhMLVRONk9X IS1hNlgoTntQK2NvYyk1NyElJSNnMWVnWFJBJTJra1chWV5EU29XYEt1aGxE T2VfX2dhOAp6d3BfayheVlYlRkFyYCohNHBfX0d5Qkp6LS1uOytjQShtVmp7 JUclR1ZCJnZyX2JHOyFUaEU/OSRFR0UkPUVYfjMKejdKSyNqTyZHZUNodElL VjM0UXpTe2lfZUpLN1JVKWsmKFlWZUU5R1M3UWNqaXtySyhtX2E4cmh7U0Z+ RSNEWVY8CnpldHpAeCYpP3NlZyVVMVhARHpQbXtEUCVge2ZBISp3cXBGPmV8 JWM3UnUoY3lsP0EzPjJ2JGokQXg1eWAhdnRoaAp6dVZocj5CTnpZeGBLT0pw KHdCfWEwMDAwYmJWWFFuV01Pbj1JJTlIV1ZSVTV4R0I3YlBFaXAxSkZmbWp6 RmdpM2QKekl5NXZaRmZ9P2JGZ1RlZDlzbUZVQzNIbnRiWXgrNFdqYndkV05C dTMwNVVLIUZmQX1TRWlmQHVHQll8ZkcmKFJnClpEPTstV0ZmaHVPUmpkRjIw MDJvdlBESExrVjFnK0UoRyZteAoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9p bWcvZXhfcmVjdXJzaXZlX3VuaW9uLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X3JlY3Vyc2l2ZV91bmlvbi5wbmcKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uNjY5NTJlYTQ1NGUzNzAzZGNiMDgyNTFi ZDIyNzMxOTNhYWNhZWIyOApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTIy NAp6Y21WOygxVUxKTVApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7 e1IzRGRCajcwMDA1P1ApdC1zMDAwMXEKenghWDJ+IUVlcChNWlcxdyEwQSlN PlY/JHNsLVRmayZnX0hIP1RnZ3p0PjUhTnl5KncxO3Q7Rmk4bXtBQSNwYGop Cno+YHVQc1RFWFhKI3BzZ04/X2B6Ry1zO3FzeUxHekpxaEBRLSUrMnc9endO KWw/WlUoRik3MTBXKzRSb09eM2w9cQp6KVlTQ2c7UC0qOUxVTkB4blk/KHN6 M2l1ez1jPXNkdUNNOUUjXyE5X0B4SCg5IW91I3cjXy1uR15tQzsqcl9YMTAK enN5Y1M3SkZ3ayFRakhtUnQzMHljYzZ6WnVqS0VUUXV8Y0olPGRDKigqeVlR aSM5b0IzTVJLRHhxUV92USU0NFVeCnpXYD8jJmNCKHRCK0hyV1VLRDZVYHdW OGd3azJhMExRfXByNEBhKHRuPzYmWGZ3KTV9RF42YlUhPCsxSkt1PFlXbQp6 QGFWeXw9WH5ucW8kQk05PkVXQzI9KEZiOW1GM3J5PGtnYnYtbUpPbmZBOHpJ PmYpVH0tPGpeX3ZoM3JwPGtYU2wKeih2UnVmcyhQTk95NiVHUz45cHpLbiZ7 cXs9aUhhPDxGTUBEdD5uez88SSNAZCZ5REhYc0M9fFR5enFxYz9aKWxvCnp2 R0N9XkA4LWJqK15Ycj9zcDs2Sz9jdXpaJXc1flBpU2c+Z0A4IVNsOz1TbkNy e35xQj1HM0lALU1afUl1SEBCYAp6Oz9SIWgqUVZkY2hUZ0A2LU5KK0EoVl4/ I3Q+ZSo7O213UVopVEd8VGd4dFZePDw2a3UmV3ojQWlyfnFLPUYrM3gKeiFH aGVzZiFuQCs8anRQJDxHJD9QeTZmQXg8PEZxeCZZJFlwd3BjYysxcG9qNTBk IUpNUXZnOGIqayU5IzAxMHFOCnpTI3RtWTA3dzc7MDd3OHYkIWs2VTAwSWgw TF90KFkkNzVnXjE+XnhuQ0o9eTwjQSN0LVc/Xk14WFg0PUc7XnR1QAp6UVZU QzF6a25jPGtnJGxUN19uTU53PyFRNjNuKXAqaXhRR2pLdkcmcFIhJnwpVDJW PF5NT0IpUjwmdFhaOGJCP1kKelRHfjNnKHQ3I15oRE9MKnV6RkYtKnUrIT1y eHhzOSlHI3gqekAtSmQ3b3t3JXRUa30/MS1yMU1qVjtoR2NHNGdLCnpCXmZq PEViSlk/VENpRzxFeU9HdzlpNn4+YUpaS04oPk0oYVhQX1JFdjtmMXorMGc9 YmJZYSFQVkJyR05nNmMmeQp6RSRHSHN4TUpEQEBpcSkjNy0hKlRmbmhsJHEy TDZQP2o5S0YyJEUyNjB4MXRxRk58fnFQQUlzNmhMXlZtbnFNRloKejEhdTtQ XjcwMHozTGpxKGZSZk9KZi19aVZgaGxjPHtSMEFuZl8rMG0hQD90YyhMeEwo Vl5+Q2pUPHNlZTYmKH1uCno4eVhqJWttIXIlYXR2RTZsRTdNJFEoe3VuZUFE QUlHUEJVTldQXlBIQ0JhJjl6Kj0oaUAoVCltaTs3RTElaDB1Owp6SXZOO1c8 clFFcG0xJExsKXhJXmdiQGRHaEVmN0RVSSRGYmB5ckwxNWxBRkxgMXRrJkQz e0N+OGo8KDFGPkh5XnoKei17JGI1IzFgTXl3KVQhcmdle08lZmErKj91SnJC ZCZnYGw0P2R8S0lGY0hadzs4Y0whKEcwJG1DWU1mV15QTV92CnohdEB6UHd0 IU9zYzFKViMqM08oWXlXTXhyKzxFZ0NBaGJZSTBkX3wtXyU1dlBvd34/KEBz Z3pybVNLYiNjMVBvfAp6OUZMPiUwXz17KXVMWX40QGRBOH45dEhGVjA3Rj5Z OWJfTkBjPm4rYUMzSG50Yll4KzRXamJTV1ducHc+MDVVSyEKekZmQjFNRWlm QHVHQjckY0dkZVVoRD07LVdGZmNmb0JfMDMoMDN+IXFTYWY3emJZKGhpWik5 bV5jPnBwbkYpJUdLCm1JVn5fVFI1Q0w8RyZETGVIWStlU0l4c05HbXNQOSkw MDAwPE1OVU1uTFNUWXRySHg3ZQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9p bWcvZXhfcmVkaXN0cmlidXRlX21vdGlvbi5wbmcgYi93ZWIvcGdhZG1pbi9t aXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9yZWRpc3RyaWJ1dGVfbW90aW9u LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNmI3MjgyNjg2MjA5ODk2 NjQxMmE5ZWQ5MzIwZWQ0NTE0ZmUzZTVhCkdJVCBiaW5hcnkgcGF0Y2gKbGl0 ZXJhbCAyMTgKemNtZUFTQE4/KG9sSHlgdVZCcSFpYTB2cF5NaipAeEJwQSRH dyNvbzByamo3UFU8UVY9JCE5Rzx5ZC1hVDdZND89CnpVQlhMJUprQTEtJFlM UHYwbWcxOHYrYU5rSzJJME41USlwbDJAPFQkb0QyKyU2QnJuZSZjNXZsbHU8 MmxqVk1WOwp6RUo/TFdFPW1QYjNgUGNxMkQqa3V4KDA/Sk1nfj9VIyNTYUsr NkphcDFfbDswUnBuNEw8bVJWanJkMntUNys4V2UKYmZLKiE8bV9hbjBualgz YXNEWilMKXo0Kn1RJGlCfWFWOWNJCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEK CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWlu L2ltZy9leF9yZXN1bHQucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMv ZXhwbGFpbi9pbWcvZXhfcmVzdWx0LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwLi5iZmQ3YjU5MDRmOWIzMDQ3MDlhYzZhYWIzN2UyNGRjYzA2ZDIzM2M3 CkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMzIwCnpjbVYrQDE9c3FDUCk8 aDszS3xMazAwMGUxTkpMVHEwMDElbzAwMSV3MHt7UjNEZEJqNzAwMDRpUCl0 LXMwMDAyTAp6JDxVVSMoNjdTS2VYaH40IV9iQVgoT3NxMFpuQHgod2I4LUsm fWdwT2ptcWVkJUlJWE8qdlFTJFlQODtsKWJNZT4KejxidSFhVlg0QCsjP1lS OyZ9XnNDZjU3OUImRkVtSil9R1l1ZnhoOCV0ST8+eSZ8UnE0WVJjX3l6MnMl Yz5+cHhfCnpTZlNJQShkPm84PHl4WkNtKHVLNnFTSjF7PTI1fXdqa1ZFcnl5 SzEzP3Ejam9qP0wrfiM/WVZJQExId1NUY0ZXYAp6I14hVWgtSWR0eWtqbSQ4 eVclO3k9VXYzPGNEbXFvJkZ5YHs8ZE4weFdUZXF2IVJSdSM9NUA7SVpwLVgj dS1jTi0Kej9QMDlpSyltUkJ6fnArJD5Wd2VqaXBKJCp6MnpnYTxVRzNQUmwo P2cmZ18pYz9xOyZ4VlppNGN1akRuaj1WaUN4CnpURXBwaCNwcmQjPXY9KHpF VmJvRHlYSnEkPXp6JVJXWDlgPShkfENEPCFzNjhRPVFScSQ/MnhRJn02WE9h Skpyagp6eCEtbGY9U2pabGQmVEVTejJ8PC0+eSp5d1Itd35PITBMSS0+U0Ay YFlxI0tLenZlLV49eGVndmIrK0RWJG0/amoKejxCWjdXZzNhckN5V3lxVUBL M2tuRW8rTHcwMDAwMWJXJT1KMDZeeTBXJmkqSDMyO2JSYXt2R1VOQntyO05C fkMzCnpZZCF6fjBeZG5RS356WWA/TiNZaCtDVVQhQSVzTE1zYUdoLUxNX09a bCE4I2FwZHdLTG1CUnl5N0Z3a1VSej0wNQp6XntETj8tZiNxVkx2KkhKSXtv MEFWVFFONnp4VXFuVUJSJHRgUytzMmFUVFBoMkBSJFplQF9VaHI2P15lWCM9 IXcKemtpZHUrZFlwTTJAcDZiNzl2S35MWXBtZ3coSWs0JmtER3p6NXJvRDFk VihCJlc1ZTRCYD1xMXdseSMxfiteak1MCnpjc0wjWio4NUp+UjVXJjwmK1R1 Ni1CVHs3QXxYfFA7e3F4Xip5NiR2P316a35YKng3TExuIWcjWFhvYUZsMHRf Zwp6QUlQNDY8QVJ4MWZKN0gjOT88I2sqOXVFSWImdXQ7Y2c1dUlDbSZERFFN aT01PG9zJEJIYUVHcFBSYWwqWC1LNnIKemFsQm11bTNBcWNnckFWPjg9RUUt aXI1PDdqXiorbkRhemkmQFgyaCEySW16d2tCcGRjMU9qJDtLTldLJiYqdntL CnpIY19GcDJUPjZfWEwoPDZNRz1TdjBEQzUjMC0jbUF2QytOcSo5dl5rSUsy bDh2ZEZNJUV0OGtudnhuSm8xYzZ8Ywp6JjRjfUt2S0hXfVZ5MEhATH5pM3NN Kno4d1A2fjF8bXw7Nzg5TyFya0Mtd1JYM0lUKHs9XjEqJm9IdWZkNTxoVE0K ej5WeDwkRXt5MXJORnt3cXsxcFZoRCNwNkMyUm41b2glN0wwb2xlQjFOfDRG cGBqTVE9I3B3KXo5OTBAUXVBNWRvCnolellQdiRpMlpRJnpMJSUkejZCdFIo fS1BT1p8MVpzaUlWMyNhWF9hS0twST9SdHdqPFMkJGJ3QF57NiNURjsxSwp6 cnszUlZYOWtwQUQlWV8wTXdMQSo2dkEtaVZrZlczaWVHN0B3Oz5+cFVDMVdr ezFFcFduQChpPCRFPXkrNj5Oa0sKeiZxcEF5U2E0LXVIdkheWHpUMDNPSD48 YXtve2VoQXlNajh3JGgtV3R0USZOWnBWOTZrVjRNeT9MMEFCYk1HTURxCnoq JHlTY1lZKT0mKTFmSGB2PFdvVS03VkoyVTd9OUomYDhJJHo4eVltYGdLblpL KUxXRlFwRHcrd1FvYFQkJW09ZAp6elFqJUE0aWE4czxWNTBrRHBGSX1nJCU4 OC1MTjl7VW08PH5GP0slVHAjbjxWdiRefnFhSXVQUiojTF9IMEE3VkQKejNu T2txPTd8cnx2LX4mbTJQOTI8Sk9Bc242I3hKTEMzSG50Yll4KzRXamJTV1du cHc+MDVVSyFGZkIxTUVpZkB1CnpHQjckY0dkZVVoRD07LVdGZmNmb0JfMDMo MDN+IXFTYWY3emJZKGhpWik5bV5jPnBwbkYpJUdLSVZ+X1RSNUNMPAplRyZE TGVIWStlU0l4c05HbXNQOSkwMDAwPE1OVU1uTFNUWHRPcnQ+bgoKbGl0ZXJh bCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlz Yy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfc2Nhbi5wbmcgYi93ZWIvcGdhZG1p bi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9zY2FuLnBuZwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwLi4zOTZkZmI0ZmVhYmRkODVlMDgxYmY4MzM2MzA0 MTI5MDU4NjMzYzVjCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMzIwCnpj bVkrQ1g7NCFLNm9yI0U0M1UoJk9pWDdHMFRtdGQ1RFhZbWdSJkZAYWNXWnhp diZ3d0w+M2hnckJvcX5sckBpdAp6TEpeZHVBWldxNWZ3JlprQz1oYFg3Nz5J M1cmc25qRkp2ZEkoeHxeV2JJJjwqQDcoWCN6MDRxVHBza0lhNEdhZGUKekp3 IVQ0djgyYUdBLX1YWlIqOyR2Z1RYVWA0dT1wZUV3aEV8bmE0X2NKPiZPTVBI ZENeR04/JSMoZ2VMeWdtbyZpCnpOM19nO3dKfmhmPjBWVipwUT5hK1NJKkkw OThfbHd0ODRrWHlPYThZKFYxJndubndiSSl0PkBWeUw+fiNecyNRYAp6LWV6 JTduPjRnVE5AWW5JIXxNMVJTclNgKmVPeURvZDlSS29pb0ckK0QpaUpUQW9W bkRXfTJvfktuNFkqbkZjaT8Keig0ZDVqTj1QZExidDJIRGchQ2VDUnRYNi1X K30lLV9PU3AzN2ZeQTU4N2BwVjB0UFdTdH13fHRmUllRU0VmWEd+Cno8cEQt OUkzX241RVZ2am5FMUB8aCNDXiNlbF5iV3A7RTJxaTt7a2RlVkJpNX1GKnEj TTgrcEstNyZLWDIwP3NSOwp6MXI7PFgoR1FDQ15BZDFUI1RYRmxPbmt1MTJq PStMMXFzK00oI2BVTE1HNHE5dCkxcyUqJW50cE9EYWFzd0R1cE4Kelc9UjRy c35GdF4mRWgwPlglZjNFMG5IWVFrTnFHNFUlajdNcDJVN29GKj5HWlREWW5Z bGhfcHJJNFU9Xk97KGsxCno8Ukg4KHo7WGs0M1dYZEReT2ExKlRBRWQ3Tnp8 ViROJjJMSy1nc3txPzJEO0cybUx9d0o/YXV9RnZrfVNDRWwtWgp6biFRfj03 SUU9JHl9ZSh5R2gqa0RYZEl+flV7alZLKEYqWXh1cW54fj4xJl9sPVkmc1dU RWBOcXlpKi0rZUE5TWQKekszekk2WXVyRUQtVmxneEQyVmdRcTRUKW88e1Vj NTJkQk00X25zNHFUQDxEdnQjKlMjJjZkZiQ/el9KQV43TmQmCnpzYz58M1Q9 QklmQTNwcXxtZkBZZ3Uje184VWIoYnpiPlh8bndnKiFAVUJiTWtnb1ZwWnIq VGY9JCR5TVFTN2NIdgp6Smx8eUk5dUclXz88O3VmaGwobnotYjNzOXlSbmdt NyFlQkIqKkBjK2lPVj4qKldVZ3R4aXI0cUghUTU4c0JZXlgKeit0XmxxQ3Jx aU91TjZqIUZDbV5aLVB3fUE0Y0VkeXYjYWNZISlqRkp4S2g7ZCNfKGR1cTE8 ISN1fF9pblVoUmI3CnpadVdzND9SbVBNM0xiNDhDXzcyVk5DdigtMFl+K3Az dX5NJnkjei1odnE8T1BPI35IUEx8SGVULUpCbkRhfC1RPwp6JTxXdjRuVUh1 N3NjeiFGP25yJGB0OCgrMW9CS1d8UGU1fCF6Pm1iUzI9PUVOOCR1bkN6dSk9 fE5wWEpTKzhrKHkKenNmLW8wSHM9dnooamVkUzdoMV4pTms2RWdqI0l9aiN8 ZkdSaV5Ec3paYWE2PTB0PFN+T2dDJDU7UHhYWmY5MXNFCnpPV1UoNk56VEVE PGRvVj85UXMze1goO1BAKTlNa0F1SHhRa2hIcFYoRDhmb1BuIVd5JkFQPHBE c0xKeVAlM29oJgp6X2NBWXM/YCF2fElZeSF3PDJyQC07QC0tMj8wM3wwVz54 aXIkT1B9fEg1b05kbSktTXZRISFybSg5YykhI3I9X00KekJIZWF8KX18ZT4h JSEyN2BsWUR1Uz4pSDRPJHZHcT9ia1l8ViVPX3lEQklFS0ZSLVAlb3pYVj1e dXxeODMzb3lPCnphWlVMNDVRM0I2ayY9fUI8ISQqVzsqa2NWWHlMaUMzeStB Umdha2F6Pmp+IVU3K1VVKiglQ2V5LURIQis3RkhxSAp6UGp8fVMtKm5kclJU b2h8UjxYOEk5ci1mLUxjRU57eD8/aTJPWjQtYihKcU5hU3BTeHZjMjJ0YDZO KlJ6PlUpfk8KejNYaUl6KUJ7MFYpXl5vd15lXi17YnhWZGhgZDdxTihuSDtx MyZqKXUlYjtsaz9jR01Ic1AqbFg8PiRBaTVXYGNWCnprRWdeQ1A5KD16MF9L NXAkR04oRHhaPlBISmE3ZDNFJj85IWc0PDJOO3I1bnFiQCg1VW09dHt+SHRq UWoreEgzaApheEp8JSRlZ150VkxteWZJKmRaZU1WOGdleHRwNVEweVJqJCQK CmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3NlZWsucG5nIGIvd2Vi L3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfc2Vlay5wbmcK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTMwZmJkOGY1M2ZmNWMyYzc1N2M4 MTczZWI2MmExYjYwNDU1NWYzNApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwg MTMyNgp6Y21WK30xPTBHNlApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEl dzB7e1IzRGRCajcwMDA0aVApdC1zMDAwMVcKenJwR3BqIUVWYXpNN2A7RCZo QzU5P29ZdHpSbEAwcCliTTc9PzNVVF9nMzt9IS10dnlyP3ZtRTt1aV42cnJ7 Tm99Cno8NkZoK1YjbiheeDgtWmM9eUh+IWhOKXl5alR5bUBIdVVod0BhKHRt PiRkYW4kTTVPMV42a2EkPUNrcVkjTyZqKwp6cH5QUDY8KH0lfW9iVCRqPkVO MzA9KEZoRm5kalY+P2Q3ck4qcCUkeHQ/YzVqPGtnYnc7alppN3Q/bE5yQGFW JHQKej1EXjNRYkAxbEU+ZkVhRDxHJG40a0spamM+RGoyeyh+I29Nak4jMFM9 LTgrMjtrO2cjQipEbksjRnxqMCV3JStACnpJRyhrS3VHdyslPldBJilWRDk1 eF5YUC1gOzkyd01mYmlmfUBaVkpRPTYjUkFRP2NIMzAwMDJ6K0E4U1REQ3lX Rwp6PmVlRmIpRXNAWEwjeHptdipMSF4pZ1NFQjgxbWd3YUdnYkFsYHIrPWRn I310PWhVUl4rX35uX3FUdERpLV5ZZ0QKeiNEKFY1cX17YFcrYHhrMCRjV3Mo ZmFLMWdzb0hMeShQWF52ZyEwYF5eVj59Szw5NzdnTlE8aiVwdyh5WSY9bF5e Cno1Ync/b15WJi1BJT9yUUJ4MSFmK3pCeHVWMDAwMDFiVyU9SjA2XnkwVyZp KkgzMjtiUmF7dkdVTkJ7cjtOQn5DMwp6WWQhen4wXzkwV0t+ellgP2I2digr RTVlK1U+azYmVGVhMWkxQmloTiRSPCooJFJjWDFNS0ZSR0skSnhWZiskS1cK emh5fUYlPiVGLXdpQjk1LUdvNE4heWJ0IyYtI3opQWI5I0RTJiVaeCEyPH1N VVZ1WDslPD8+I2x1WVhgKmtRalVgCnpsTU45PWVaI3tlI0tgRV8qZ0hhJCRq OFVXPHdYQykjS2UyeiF7cD9vak9heXRtPjhYIWw4cTY2c21lJEUmeXNpaAp6 dDcmcVlDIWtPJmw/dmB3RFBUc2VSP29zTE1OdH5pWHRpMW13NygpaGtwaU5l bzEwVURRbTUxREwyV1A/PTdCUHIKek9sSHRwRUVlbD9NMV9jJkJTczErbGdY cm8xJmhWQDN7aW18bFg7Xk41d3BvOyhaWnQ1WDB3WUVnO0olTztadUNaCnpE SGFeeXUtZmZRcVR+eTNOQWVjMHFTdmNZbTNmTG5SbV43OENDI0dNPlZSZFop NDN4NFY8PzR6UGhzaCVhSnQtWAp6azJxMjVUOCVaZjhAbVdybzZZTTRyYHg/ TU1iSW9kamN2YHM/c2Q1a1NAcm9PJFNoOHchNl9WcTZlfUxqK0IjMSoKenpJ T05LOH01d2MtNjVNPi07cDh4b1BxNT9BaDZ4TmdUV294cD1vKnRjMC19P1Vi bzYtV05VKllOJmh9RjVNWktBCnowMFBseUd5dVVeRUZKezw7TlhDVVAkSDJD XlctcUhkRjEhK0N6QioxUTZgRT5FQ3w3UEpXZUIkTmApWXROVClNQQp6QSYq WmA2KHNtN3V+Pl9zX3Z1cyR5JnB+cyRyMGB0bkd8TFRLMjVRZyR6KUVTa1Fh NSNGUHd8UllQQiFKUWhPRl8Keio+emFZPCNLdCp2bi1ualE2Z0xxa0ZRWTNM aGhfc0pPfW9vUkFSZWlVcjZqO0ZKNnlUdj53Pyk7Vzd1Z1YpMjNuCnp3cDYr Kk9Bd2RLP0xfYlVkfjEtc0pVaCQ1ZEdQfDFEKjtJZ2lCeVZ3eG1AbU1JcjtK ODlYdE1jaDxFSDcmeE09Qwp6RjZAVEd0eXhxfjtqfig8LW9RPCpSPWVwYHhz Q2lmPGFYP3VHZTkjYkNlKXNGcmUzZENweFM2UUAxUztuZV8hajYKei0/eCM2 PFRYQk0kTEpLKFU1YHE9LWwpUHx2KVFhWUNkbDkmWWdHdmAyX183Z2JpSXk5 cWsjJGNAbmgwJVRxe2NfCnpNV3ZQRXU5TTxYbWlCb2AkNm45PmNtNG5mMHJ3 dnpiMUwyZDAwMVIpTU9idVhWUlU2V1Z7JkMtYlklY0NGZmxNSwp6Ril9U01G O3BAekl5NXNuRyZDelBIOTlhYklHSDZMMDAwMGJiVlhRbldNT249SSZFKWNY PVpyPEdCN2JQRWlnR1AKa0ZmbWp6R2RlVWhJeHNkWEZmfT9iRnZeIXp0TjtL MjA3KnFvTTZOPCRmX2tRe2ZCKm1oCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEK CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWlu L2ltZy9leF9zZXRvcC5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2ltZy9leF9zZXRvcC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MC4uZjNhOWIxOTgzYjViNDdjOTZhZTkxMGU3M2FiNDI2MGFlOWMyOGI3MwpH SVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTE0Mwp6Y21WLS0xYz57SVApPGg7 M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0aVApdC1z MDAwMkUKenh6TGBWKDE/ckNjNiFsalpfJi1jdDt3PkIjLXdNJW5OR3J6SmQ+ NXRlfW1iWW8jQzt3PmI8YDAkakk9KSF0UylTCno+WWskRmZyWih9cyY+cXlT Sn1MTTxrNmJ5LUtnIzZ2KlhRYHFOTEVMc3BxQEE/WU96P3g0NyVCdTw3OClq X2w+RAp6PipKJjg7aFc2TSVhb1Zqd3p1b0J2Z3h3Mz5ia3FeelFPS29uYlQ7 Q3clRjZFPS0heTsrP1ZSenJSTFA1KlNDMUIKenVqcVFFKkpRMk5Xc3w/PStM cXxzbnlzJHJzO3VhUXNvR2txKT9kV3dYMiQ3dW43OEtIbUZDISM8PTJ6dCl7 QHE+CnpiKVUyMk50Vmh9ejItSHk9MVJUaGI7IyZib3oxNE9ye3ZYPTxrWFNv KXxqTkg8Znk5V1RlUkxPdipiRnM8I281Kgp6VXlpLXgofiNyUmtLTXdFQWg2 X3QmRmJVT2o8ZEF0N19IO3QmV3ojQWk+al5XVlZUYiF1O2hmcDshPXZoO21l Qk8KeiMqZWtPPld0MGxLIShFTCU4QkxBcGdNYGU1M0EjbCk5bTJNaH5MUEct XllqRSNmOVJfbiU9flAtb2xSRSFoX3FyCnpneHRWXztLITVHdXk0fURwV2Vs YUNxVHFRMDAwMDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5D Mwp6WWQhen4weG41Skt+ellgP2JLXmkrQ1VUclZEN2h3VHA5dX4zSyY0ZWZR MTU1RHBqbTRmfmMpayZgTHslLW4xPikKejhWbSVteyZoRCVrfG1mS3IhKHkq Jk5wVXc9RGZRKGRsWlVFUDNrfEVRbC17dHdIbWNiSXJ5Izk4O21CQyhWKkFL CnowYzZUTlpMd055X0QzaUprantaUVVISHJsUEI8fmd5PVdHbHYkI0U4dWc3 QXVUSWJQT0p4Mk9gZXQjZWtAY1ZFUQp6KH5wNCNXTzJ6bTliQzNBY189cVBx NDNJTUFOVCkyQm9jezZwMlhzZzFxbmdTUjRfNW1sVGNfaW5TOUVGWGYmMDIK emhDM2FTUkV5TUZkUUJ3SCpFY2ZCTyU0RSZkYT9FTClmUyF8JCktZkBpOE1z RWJOUVhaPyV3e08xdChzPUlkRWF7Cno5VXlPKTRgQzhNKzl7U1kkMHJkMXln Tk5UQ19+WWRRPVQrVHdzVkV8I1p2eW0tYVlfQlFLP2o3UCNjeGA7flkjQAp6 Kk5iUHhRZXBSYUdiTW0od2RSVjhyJWBgT2pGOFZxVXBTS2FgZlpxcjFHUkpG IVhPYU1fdykkSzw8SSkkJDR7fEUKej9ZdiVWN3pMdHJBSHN5WEVkMWlnI192 bjlNZzVBVlY8dEpgN0QqcGVgPUhydUxQUWRiJGAkeHZlNU5ZXnU0JV5qCnpm YUNMLTBKdl9FWk5tZERTIX5mX1NwcGd2YEE9Q053ckJ5LVYmSTk5M2B+ZTBt Xno8ezF4MHE/UyhZMmk8eyVSJQp6eTUtKTtTanI0UEV3dCElUz57SWFGZU9q UzJBPGRuZXsyQXtXaE5fbVZxKns0NT89WDMoOEVrIV9NJiQpX0srcCgKekJF aFlUUEo8d0MhQTsldm45ZT14cVE4Xy1iOHZKaSNvSjd5IUwrazdPRyl0O3Q4 WUAxYFhfWTxkRW5pWnAhVjdhCnowMDAwYmJWWFFuV01Pbj1JJTlIV1ZSVTV4 R0I3YlBFaXAxSkZmbWp6RmdpM2RJeTV2WkZmfT9iRmdUZWQ5c21GVQp6QzNI bnRiWXgrNFdqYndkV05CdTMwNVVLIUZmQX1TRWlmQHVHQll8ZkcmKFJnRD07 LVdGZmh1T1JqZEYyMDAyb3YKSlBESExrVjFqXnFOYEw/VwoKbGl0ZXJhbCAw CkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9z dGF0aWMvZXhwbGFpbi9pbWcvZXhfc29ydC5wbmcgYi93ZWIvcGdhZG1pbi9t aXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF9zb3J0LnBuZwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi4xZDQ2ZmQzNGJlZWUwOThmOTk3NTI5YmYwYjc3MTRj NTIyMzJhMmRmCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAxMTU3CnpjbVkr Q2U+bD8jOUxLa0dEMEpHYiE8fGJPUStNZWBQSUJzQFgxMzF1Ym0qeCRtdlhh YWI7KnlBQ2I1Sl48eVVDVQp6PT9HNmZuZnohdTxpfSpoa1l5N3hXM3xuWGpp T1JfQHdzcEhTQVRweUA4fHRfS0NqUjdjfE9sNGVJTCFvWjFwIyoKelE3RHVk Zy1yQkEpY0hkZzh6NmJ9TD53MXxMWjkyYDh7bSFEUXt8bm1YYD1BbioqIzVE ek83VUtaUFVNdFhQNklsCno1ZldXfHBOPWNsWFVKdiskXzFtRnMmI15Baig2 Mnc0UWc3bUNRemhoaCRuTzhiQ0xQUXorITxgM3U5eUNMRyViYgp6PzE1VTQk JmtxKW1CUSN+NkJJVEF1TzlMcUxJc1NCKUlrcFBfNml7clJJMTAmMnM/TER3 ZGg3WjhmSkBOQ0ptOyEKekZkNHQzSVRmRD9RK2stdGZLbSsjNnt4MkhvKmpW a1VxREYmJjlPbFIkZXgwOTgyU2M1Qjc8UWlmV2kmYmpQMyFyCnphRXN4MCQ/ OGNCYG5LI2lJVFRzdFZpbHl7Y15YK2U1ZXI+aTxxJWc0ayVobzZmUkoxVzUm KllFOTkkLTBSRTxXfQp6WCp1PH1iMDhLJlF4bndKZ0hVKTB7Qk9abzVRJXNZ WUFTfS03Zj9QME1Vem1kZz9xRCpxSnFTNjszeSR4NER2TSkKenNlcUN4JFc9 cWQzPmRYVE0/YlhwTFIkfXJCdjhlMylYQnI5OXk4eDRxcEYpaCY7VFAzNGxJ c0dPQi1te1RGeiU4CnptcUpKVChmbT1Lbmp0MSlSLUdpJXFZeCMzM3t1eXpU YDFIRjQrX3lNZlpWQWNtXnB5KXZUVThtKTE4JWBzS25oagp6Kjx1a3NZVWkx ZVZPZkpLUHM+X3xBSHVVenZXPn0mPlh0Rm5EIzEyPTVqU0QtbH1PMlh5NkFF QXN2X3d+PC1hfj0KelI8YTkqZTlLQys7RmdHbUxIKkNNYkJnVCoxRkdxUkZH KGJsa0lrPDVfcz0oYnpyclYwT05MVHtKdnZOWGomd1IpCno+N1haREkjQm9L bDlHTHxfTVdyb3E7Q3FURFFSVTNVJmM3TCp7Yl5PVCNJN2E9NCpafF9fYFdC N2Z0KGg8I2xtTAp6d1ZVPGp1dUhXPSlFSnFtN24zZmVDLSsjJUhDeHc9dUR8 bXt5WU95bGBFKHxLTCgpO3ZWZEhnY1FZfWBqZUEkS3oKemReR1V8YVREZlpN fkhjOVN5e1U/Z19IMENsWT9DKTR2RnheQjw4SHwkMz84JVArZnp1UGRFQXRo b1J0ZUdqXnF2CnpwMnktJUNiNSM2RUVpKGR7PDt4MUBVbDlYaiheYEgtQ3dm ZVk+ZCtlRnV6TnZ5MygoZzgjP1JtNCkrdVhSWnswUwp6ZWsmTGoyJnx2cVRY Pmg4ejRwK1l1NT0qV2IqJVgtJWZYOzZaQ2VCOTdGe1ZKZHZIZVlJTCFnZU8o cXpZI2ZkfjQKemdQfEwldTFnWXpOVG1WWS0jXippeCp9ViMpdzdoMElmSmh+ djxjZy11QXRnQlpTUWRKLStXU3heRCRUT09CNFRWCnomb3VnSFo8Kmd0RUg0 U0s2ME5sc0lsTUl1V0BEeE5haiEpdT50cDc8PjJITiNkM2dxQHFeMEp1Z0BM IV8pMzN1Mwp6U0Q0MGo9PCY/O3llbmxEbVJ1OUtNRmpLU3lyPHV4WTB2T0Nt e0Q+KDRlOXk2VlJ2d0NtZ0tmd3g5cXdLQGJqVVIKemlzOXEwT0NIVkYtWElv dkZTY3xSKjIoKkx4MGohdE1YTl4jVSRlJmYyYSQpZWtNPSRvJXtVU3I+aSRQ JEM/WTZsCnpmKWx+ZiQ9UStNNnlRdjdjaUhDZDtfP0lHQ3dCdERqYzMzOUd2 TG9+TWl9JC1DeEVjeUJrLVp5byM2VGo9cX1oXwpQZmREOXFIO3FgaWAqOENB YkA1fEYKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3N1YnBsYW4u cG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhf c3VicGxhbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTEzZDc3OTRl OTFmYzA4NDI3MDJiMGIzNGMxYTliNjE2MDdkY2Y5MgpHSVQgYmluYXJ5IHBh dGNoCmxpdGVyYWwgMTI4Mwp6Y21WK2UxXm9KblApPGg7M0t8TGswMDBlMU5K TFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0aVApdC1zMDAwMk8KeiFfYnpR KFNMKXtiYT5OZFl0Zj5tPGhIbyN5fSNfbCNxWXd6PyM5VVAkakk9PyVKOXB+ QHkqV2kmKFFNRyhlbCZOCnpeVmlxKXRnaCY8dkZORio9RDR9KnpRNjZqIVJA bE4+NWBWO240OTZjeXo4Y0AoQW5EYyRIbGorckVIeSlNVkV+KAp6amUhfUdt Qz9uO2I9QkNCK3VAYnY/eTJKSnB5QkdBKGIwPip5PllfOFpxKE9gJkN6fCoq b1c1SGptZ1YpJkNQX3EKenlsfUNzU25CZSl3WGxjQyM9Nit1ajtXJCMqeURs TTtlWTd1eFhRfFgoYkkqendycXh9V0t4WThiKjlIUWh7MzRPCnpYbD17dkwl ciF1enZ4JVA+Vj8kc2wtVGZrJmdfVE4/eWNZUjVVYipuKSRnaihZSTJzTHRr LVZBazJkdTIkPyl2OQp6QDlESmo/Wilsb3ZGemNsQGFlK3A7KypIKG1nTG92 Pil4IXYkaHV2WkIoQjxWPS0tKisoVD9pZXMtQ3JuYyYkQ1MKej4zLT9qc2hZ YE1vejd5cT90PF47ITBGaGg/JjdfTnlHP0pMTCZ2SWhpPnF3RSRHN08jcnNt VjU+KWc1QyNmOUMlCnpnVz00SitgeGg1Jlk7YEFmOEA9YzRQVjE0MDAwMDFi VyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdVTkJ7cjtOQn5DMwp6WWQhen4wPWh7 PUt+ellgJjZNZD0rQ1VoX0lUOGhgUVh6YGVxWHcya0x5O24pZzRYSm1kYkc4 YXZUQjNLcCh2PCQKeilwfWUxXzNwLT81WnU3bm5ORlYlbzApZj8tQE0xfU14 KilYKCgzZEtzfSFUeFg7cH1wUilmKUdHOCRqQndSZCF3CnolYFpEVUVtcElN cWNnZ2V1ST9fSTAlX345KipQNXooWUpRTD5Rej84XngxN0RKcT07e3ghd1V+ NGNkVnwlV0lafgp6dSReWHg1UUR0SzM1Yzh5ZW8mKWpFTEpNd1ZwKjMmeElO eVg7YkI0V2ByY3JNd2JCdDt5bmlJeykrLTE/RmZiWSMKejw1ZHdraV5DSGIz NnNqNDtnQ0R6UCh4ZzdUUlVPRV87YDM/NShnJEghVnhifUwwcWhmPEJYVnow dWEzcU8qJGhICnpISDVWb0lMPTxYMylCKFppT3Q1PVdXaClmc0o3MTxkaGxL cDM9TEhuNU5ybUNnNWp4WUwxdm1tel8+NnE/Ul5MQwp6K2FHQnozeTYke3I3 VT5KWmxBTT5VTmpFaFhoPVRGOE5kMmJSdUZ6SDtHVElPMj9qJU16azhOJWZF ZFckQVYyMncKekxAP3M8Zz1RT0VPVi19PTxtST4wLXdXLUQrMDZfTXAqYGUm QmxSSWE8OUczbHBWQmphZVNmSnJJN2k/NzVGP1Y7CnpoYmE2QT41a2FeIXM2 MVcqeWtfSCVVQCRwQjZXX35MT2RRe2lwPylCJjN+Jng1PjwlT0xDS08oJD97 I1FRQz1VQgp6PFJlbiZLcjVAT1liKXI3RDVsb1lsU3JLZHQpfG9JSDYoNmlH RmVtXlohVyk/JnM5ZFBiVnp8TTVzOF5oVkgqKF8Kem8+Z3dBbUBNdyhHX1hW JWcjIW9Id3pmN3psKzY/aHlORDE4Mj1tM2d7cnpHZCFjck1Dd0dNKmQ4cFU7 VnUpVFlECnpneiRNSjYzT0p8LXRvIXRleUxPe20mO0okITF7QFo8UH5SMEJx NCsrckB1fjVAVjg4fClIK0MoXjs5WipmUjRgMgp6Jk0lfjFzJThidFFaS2Eq OTdzdHU5JHNFdm9qKipoPTVpXz44azgqKnVGdWY8PDwtc1k8R0VDOyZWamJD dVN3d1EKej1KeT4xUTk5N2tBKnUxPV9WKF9BZishdHpeUWNvfSROIS19bmJy MUU5X1UybzAwMDBiYlZYUW5XTU9uPUklOUhXCnpWUlU1eEdCN2JQRWlwMUpG Zm1qekZnaTNkSXk1dlpGZn0/YkZnVGVkOXNtRlVDM0hudGJZeCs0V2pid2RX TkJ1Mwp0MDVVSyFGZkF9U0VpZkB1R0JZfGZHJihSZ0Q9Oy1XRmZodU9SamRG MjAwMm92UERITGtWMW9BPm9vb09BCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEK CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWlu L2ltZy9leF90aWRfc2Nhbi5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRp Yy9leHBsYWluL2ltZy9leF90aWRfc2Nhbi5wbmcKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uMGE2MDYzYTFhZjAzMWM2MjY4MDI5MTFmZGNhNTk4OTgzYWZm N2Q1MgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTA3NAp6Y21WLTIxa0wt MlApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7e1IzRGRCajcwMDA0 aVApdC1zMDAwMmQKejtQSTJULUBNZjh7e0h7TCo2bz9RO2liYWw+aGJ5VF4h bk41XnZCcmwrM1dTSSNeI0slLU9BaFY8THZpXnQ9bn4+CnopfjNiZSVqRUlS PD8rNFA/UXgjZSkjTE43JD4pRWsrMGY/bCo2UUBkO3FieFZANSRydlluanJj IXtveCs/dDctIwp6d2IxRlglOz0lUDxIZ3xhI29xNHRgdShIRDxhd21tPkV6 cWgkRjloO2tpTWpLeHwoM1BreFJzdEpCKjVtZnF7WEMKemhsaEBpaitUfnxw ckR8dnRnTzdleXZAemMrfXp5b0BiS1pgO2xhUFZ0RGxPPW9JfXAxUHVSNnct b2E/JCU0ekQ7CnpZVkZvfjtMXko1PkUhMC09R29jVigkZG4lJGpIRkp6X2hm cXM7YTcpblZGLWJxbj98Vz4pd1UmPjM7WDtZNFBHIQp6XzJFWUstWjtzb1h5 NCE4KjRFYjAoOXBgdCVFaVVTP2R8UjEpeGd4YmlPSFo/KTJtWVo9MzNDYW45 azE1Iz5VM08KeiFeNjZ8eHs7QlE+Z3d2PCZhPTxReHhUKT54Vlg1dHgzfUtn KlVZa24lZSRieHl9amgqPGVaJEc9Oy1MMW8xM3QoCnp1JURsd3VkbERBcktO PzFnX00rKDtee1QoMDAwMDFiVyU9SjA2XnkwVyZpKkgzMjtiUmF7dkdVTkJ7 cjtOQn5DMwp6WWQhen4wcUlGWkt+ellgP1VZJGwrRTVzVm0xcSFaMHMmZDA1 RVhIJE9KencmZj45SnZWLX48eHR6cHImbUopMyMKenReNH1kSjtDd0g1YTNR e2NyUD5PbmZKOzBAfTtNem58RzY1NlYlcnNWKE4jQDFEeWFDPmolPnlnNClf Vlp0cGleCno0JFJ+bmE9QVQ3PipJWjFBTEBzRlpoVXdjOXw7NXBpQmBZPkx8 fiYzal5rcmFibGVqUDQyYCNGdjRrOU8kbUkkOwp6RiVOOyo+PVdUMlkmSXJy OUByaDZMQCl5SlREMHIrVnBEJE9ZcXBgRzVxSD1Ud29ibzFmJjdxaDJ8Tiop YFJNQ3QKejU+XjU9K2RCYjNyclZ1Y2xnIVN8Rk1Me0RqNmBGeFNlJkYxR3tZ dkI0OTtgUUUyLTdCXm0tPDw1IXV9MHhvdHN8Cno8Wk89Mk9Qb0h5JVI3PFBe eWU/VGQ7NEdhR1kza3RQJChBSmt8Pkd7UDA3M3RwLXw8K3QpcCs+QlJ8cmE8 S3h9Ngp6cDlQXihgYzsofVJhSz8zZTRATll2aDNsaG1mN0Q4WSROckQ3MFhn aHthY3IxeGhecjs9RXkwfWJOfVo0QURuNSMKemA3X1ozNXJMUW5AZlYhM1RA Y3Uzc1lYUlpPdz8ocShVKz1sMXJZRyFMSXFUUzR3YjElKXZgKWMqRWpsTiNy aUZJCnpPUkxwVk1HJUNkQ2RTbjc/c0hNe0klXj03V1k2I054cyZKdjgwQUFl TjxRV2lfY3ZYIV9hJnlaNVl6ZWkhSE9BKAp6Pjg9PEVDKl5nO25sNXI5T0cl Y1k2QkhTNV5MTnFCK3NHNFVtaEc9JUJKJT9QMDAxUilNT2J1WFZSVTZXVnsm Qy0KemJZJWNDRmZsTUtGKX1TTUY7cEB6SXk1c25HJkN6UEg5OWFiSUdINkww MDAwYmJWWFFuV01Pbj1JJkUpY1g9WnI8CnNHQjdiUEVpZ0dQRmZtanpHZGVV aEl4c2RYRmZ9P2JGdl4henROO0syMDcqcW9NNk48JGc4bXNvcXlQV18KCmxp dGVyYWwgMApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWlu L21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3VuaXF1ZS5wbmcgYi93ZWIv cGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF91bmlxdWUucG5n Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNiNzA0ODBiZThhNGY0OTM2OWQ5 YTk3NGNlOTQ2MTI4NGQxYTQ2NTQKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFs IDEyMzgKemNtVjt7MVMkSzhQKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAx JXcwe3tSM0RkQmo3MDAwNGlQKXQtczAwMDJaCnojS2dVS2NnSTNQc35RQH51 Jn1vJkRkYzVsKDlYYHNzJiZEU0hudnFLJXRsN2ROPW1heUIhO1BFUWpIbVpy Q1lQWAp6cnU2YTJAYSh0bT5iMH51RjU8dFJwfllUPnZQU0ZXcDZjUzk+RVdC KHd0JSlTRUE4YTVhLSVpcS1JJkxBUlA1bGIKei1EUEYoPC1leFBXJUJGOXZM eitwej9KSVVzJj1ZNz5EWl8yK19+bzFsLThxbylMZE5SJnlBazdocHlVamMm PEw9CnopUkV4SGh+TE1DPUZ5X1JUdG1WP0tqRi1aPSt+eVQ8YSp0fmc1JTdk dU9UNk92cUl6MWtLNFV9eEdeIWZNTDNQWQp6UXxIdkE8aiRiSUozR142WDFW S3MoMzVTK1JhTHcxZ1RfdXltZHN0YUg4cnQ0QS1Hfkgld3VHX01AemI4V3M7 VEEKeldeMilpTDM0fmVYd0E7P3l9I3xoIVJeQXI/IzBJTiRqUmBfJTwtLTxI cV5EcXl1SXRFc3BxUCE9ZFEybXY5cyM3Cnp4OWh4fXpwTn1XKXokUjBXXyFT PSVDOSMpO05iVmcjTyVxcCozckBPd1RyRX55WD9OZD9XPDh7dnZaRVF0a3x6 Vgp6TnxINUxnR1BYPWV5NjlUO0QxWXRsRkVUUjAwMDAxYlclPUowNl55MFcm aSpIMzI7YlJhe3ZHVU5Ce3I7TkJ+QzMKellkIXp+MCp5JlRLfnpZYCY2TjlG KG9oKTNocytVIXhzXmFEbSZ2VVphZXslTXo+dDZkNk5wTmdWd2dvWUZJaCgz Cnp5NztlbXdzVC1XUG9EOFomKlM/ZVhQPj9BYHtuRkk1UUMpfigtOS1xbjRU UHc4SyheNzljXztxWDs+eVJHaHJrTQp6bWdEWjsheXhwZSNWVkswSzs1U2Fn MHRKRmExM3BrYn52MCk3aURuc3dBXkl8RmNgIXQ2Q1NWRz9EZiZ8NUEyTWMK eiF5eTNoYy0oJTwxcmFiQzR3Pll3Sm55M1hIZVVjQzQ9QE4hWT1ZNjdYeGlB MWJmYzhaSU4wU08mK3xVZ0tSWHZoCnpVRCZDNDdEajJZZkJ9NUwmO21WKEBQ WiZMeTJHfGVCbV9eRTx7dzJfQ0NYYHNNfkZxMTxCMWB9QyZYZWElJklxOwp6 T3JhQXRuJnVTNXNTdSk9OEFmOFUyPGN5UUM2XkpoNmlzSllCfSRMKkkyamtr KyVPVWQxe2Q/O0xNb0wpQmVQR2sKekVMOystUUIwSUZuVzBeYk4/djc/OFZy fWxCXkMlSyRufnxrVmxqYlUjeSFSVG03KE5EekVUaURwPHVXdzRvU3NWCnpZ R3RwQ2w7OW85O3RgUXRDdFlHTG1uJGhaSWFfXih5VTdiMV4tM1g4RHdVTEF4 R0VxcC07MHJjVWFQPDgxKjdHdwp6Qnl7QTxrdiVjSHhpdU9BbjV9VzgrYiMy MEx4UXohV19COWQ1fGYme3VVZFByX3VtKyh3fnt1R04kcSM8S1lhWGoKektw NzU/QnlBbzskZyRhY0VGKVN4aExBJSleJSl7fmtISzlJREY0YVA3bGh6RTF7 MiQxXnhLbHU9dHNJeSVHTFAwCnolVTlzQih7Mn4hdjJLKmpaezM0fFR7YGFZ Tm94PTdmO0AobntDP0l1NyhtWE0pZUgzbWRKS2FBazZvJT1wdlBgTgp6biFC d3xLNzZIKWo2Qy01VUYyWVgpWEcyQVYzNWFkTzY7citKYSgkUzRDXnM0QH4/ ZDVzJjhiaCN7aEMoRF9eSngKei1lWGV4SH1LZUg3dCFKfFh9Xj1OWjEjZkQ7 O3t6RXRBNT1KPGAjUEZ8SXtCTSNKWEx0RX5edigwMDFSKU1PYnVYCnpWUlU2 V1Z7JkMtYlklY0NGZmxNS0YpfVNNRjtwQHpJeTVzbkcmQ3pQSDk5YWJJR0g2 TDAwMDBiYlZYUW5XTU9uPQp6SSZFKWNYPVpyPEdCN2JQRWlnR1BGZm1qekdk ZVVoSXhzZFhGZn0/YkZ2XiF6dE47SzIwNypxb002TjwkZihBQG4KQUBCamIr CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF91bmtub3duLnBuZyBi L3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3Vua25v d24ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ1ZDU0ZjVjN2IyNTM5 NzhiOTY5OTNlYTI2MDgyOGExNDQzOTUwOTUKR0lUIGJpbmFyeSBwYXRjaAps aXRlcmFsIDEwODgKemNtVi1HMWkkLTxQKTxoOzNLfExrMDAwZTFOSkxUcTAw MSVvMDAxJXcwe3tSM0RkQmo3MDAwNGZQKXQtczAwMDI1CnohcUFxdSgybGp5 YmdSKll2QypjIyg4JGZ1eFc+Pl5vell7ZytIJCR6YUp9UHEjcHJkIT1Ya35F ZWE3Y34hc0wwbgp6O0JUfHNTKXRSeCVGdFMqKW8jQSFUZ0JeMnpVVkB7PXM+ JllLZjJ+YXlYUXV8PXVXPXBTO0ZhTCNfNFV6PlY/cWwKemdUbXgjdUcqaXgm fV5zQ1puKXIwITA5aXc8eytALUFGdHlpdkUoVlU8UyhAM0dgOGhCeGFCfig8 d2QqWk9URmUkCnp6VU9QbD1+PCVGU0UxOHIhe3syVzt9eHZxUmx3KDMhUkw5 Kj55cG11VEI2ZnZ5eUdnZzxgSnZuVSZIOD8oQ2NLYgp6KzZ9N1dXNW5veSYr TGlBPFljN0xSPjBeOXNwMnhWPFZMKmFYVTZEbyQ/QkhaP2BFKnZGdF9HbCNf TXB4PTNkMz4KelFOWllmelR0aFkoUDYjaTEqcVgkcHdWfXw7KHBIU2RDQlUo JDxTNTg9XmUxLTYwR0I0c0BTbEAmfXA+WlVaJlBACnolanxvez41Uzl1Yisr RGolPDU7VyptbDY9aXB1RDEhfDE1TSZ8dDtzZGR9XjJ5NUs+KD14RTY2WVFX fXokTE1+QAp6PXdpcH5YVU9icCVJdGo0P0tWM3t7e1IzMDBkIUpNUXZnOGIq ayU5IzAxMHFOUyN0bVkwN3c3OzA3dzh2JCFrNlUKejAwSF8qTF90KFkkTC1W b1NKRkB6Mms+I1ptJCYmNjZIeVN5SGVmSkpndyR6KGZSZEkxODZtUCVPZWpP YylHVTAtCno+VGhwJmNUVUduV0FfTEJqcWleO19qQzUjPVhvd2dfNDVFUjBX KHlDZlc9QzUtaUdXQmRTR3k5Xz0lR2xhVXFpLQp6Nyk5PX1hZ1RTeEhfN0By VUkrdzNYdGNLdyF4MVN1Xj5qS202SGgjd290eCs2S3lYM3FTPThlNVhmbD1q T1ZVZXgKekNZJFNKKERGKD9mMWtZSUdwamxNK1EzPk98TUZrKk4/ellVeH07 RHtse0U2Jnc+aGhrSHw0aUV5PUlHKnRyOH0mCnppUiQpSHh1IyR1MmleZjR2 YV80cXlDYyk9ZkQ2TDxLQ2ZXJVVibktrUktnQGF3cXNMQVI1JlBObEY3cFZp LXg9VAp6QUAjQV9HMCkrcj9ndSFgOElzb1daYyQ+ci1nNW8hWURkUnVPeDhF ZEkpeWE9Zig4NGNxdGZjMDBJdHMqelBge3QKenZHbSotdEk1KXh3KXlhWV5K RFU1SEIxQERpWHlVcTZWRjl4cE5odTloVW5VKUhoc0N4bWBUSzBHb2RZdjlB Sj5LCnpwd084ViQyK3pwd0AoVEZwKVFVUiNjUD1zJktGMW83NSpCPm4+O1RC O1JUNk13OytiZUh6JUBAMitDNG5AcTN4ZQp6eFgxKHJCMGZ4LVBMZl8+UWs5 ZUBTTDQ0a2ZSSHJZanh7eCpRMFM7Wk5HSzYjQT1uZDV2PzRUM2NSQyZCZ3co KTYKeiZuND9vWip6NEhOeStzTD93RTRaQ3VIUXU/UmZSfT1kYWA2U3lGTlY/ T01ubE9GeGcwS1M9dzIwIz5aK15aKTw9CnpDM0hudGJZeCs0V2piU1dXbnB3 PjA1VUshRmZCMU1FaWZAdUdCNyRjR2RlVWhEPTstV0ZmY2ZvQl8wMygwM34h cQp6U2FmN3piWShoaVopOW1eYz5wcG5GKSVHS0lWfl9UUjVDTDxHJkRMZUhZ K2VTSXhzTkdtc1A5KTAwMDA8TU5VTW4KR0xTVFkxbkpAYlEKCmxpdGVyYWwg MApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4X3VwZGF0ZS5wbmcgYi93ZWIvcGdhZG1p bi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF91cGRhdGUucG5nCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLmE0NWM1M2Y4M2EwNTkzNzA0ODU1YmI4NDg4 ODcxZThlOGM5YmU3MDEKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDEwOTAK emNtVi1JMWlreC1QKTxoOzNLfExrMDAwZTFOSkxUcTAwMSVvMDAxJXcwe3tS M0RkQmo3MDAwMyNQKXQtczAwMDE2CnpUVSQxVyEzbkEyYSthWnpsOUl1WEha cnk0Yio5SGJ5eShsS1NXM1hAKlFpZCVzJiFxJj5pdysmVzUoKWgkTE1JdAp6 Pn43MktiPE9QQnlNRWlmZjdgdUA8R3BqLXpKVDFuZmQ5UVBkKHJSUSFHZVUq PyVsKEtnd3ljZSNEdzAoaDJGLTcKempNVlBtJEF7bUBoPl9McTtLXztNJSEt JVVAI0QqJDs/OWlZJSUwQFVwNW9BcjxqJFg8K3d0U2xrTEEjejxrT0ptCnoo Vl56aXFVNisoPUYrMCUpc3A3WnF2aDY8PUczSTspdXBjQl5YQSE8PSt+eWAq UWUmJW1nKDUxPkRqMn4rP1ZPdgp6c3B7RmI+RCNMNytQQ1E1bmQ7ckQ/QSpC TjtGe34rdG5BJm8+KSk7SC1uIzdJdD9Ke1A/Y2NsWDtqWm9BeVh4ZWYKej9C Y0tPO2tAa1F1PGhsc0A4ckppPUNiYlF2K3cxPUBhRGtwPShGJFh3ZWFZfEBh ZSt2PzYmZGkjUGFSTV5YPG0tCnpAV3xNO3FqZGxQMDBER1RQRSFDdD1HYk5j MDAwU2FOTGgwTDAxRmNVMDFGY1YwR2daXzAwMDc9TmtsPFpOWFBBeQp6LUIj TEE1UVE8ZUwjYWg7NXRTO1VNYndBXzU8dil8Zkl4c20wWWdDdUcpMm12QEJh Y2xJcCtYREx6ZnE+KW19SWsKemB6bHx1X253S3hAOzNpcUp9fiskUjVPSGUq bGV+OVdfTStFYilWVik7JjdaWXJATVE1N3RGPXNAJHEtWTZ0T0tZCnpGV1o8 RXFecnpsdEpVZ1lIVzBxWTlJbWZCaitzfmIkfil8TnBfKEReSTJhNWJDKShA dk1sak1lWjNzaEVScl40bQp6MGs5ajkhVG8pJE40MGwqZDswKklsK1UrOE97 RWVGNU11bj5abDZQSDdeeDlOKG0+MVNeQ35uYGkzIyMhSm5tKjsKemhWKkxx VlhQMDVncGhYckk7QkVBNXN6MFhsRml6Y0cwZGBIfEktdmRhZilVaWBieEZq ckNCIVotYEsmRmAyX2xHCnpXOEhlTF51MyQ0dVFMWEFebnVaWHJqMjBPWm1V RCsqQT1BO1UwSWVwbE5abDF1KFAoZHdxcj1xKUtnclFLQEpDbAp6Oz5eRStw QD0zKXF9V3MpbD0jKTk0MDE0ZENLX3RPMz1USXphSXE+Ynd0NSozJVRQUSFW ez40Y1hZMndAdnBpNEgKejVwJWZ+Nz8lIzRgY21PI2paR0x0cCpVeUAmM2Qw fHdefk5LPW9DZTwxRmNMWi1HS1JmZ2lRQVJsNzslOFByOyVUCnpuVWY9KjA4 ZWZoVTxvMWhMO0BXS1E4XnFBN0N+ZkxIVXNHK3BaNigzTEF9eTRSWj90QEp2 bTgzKChDb3w8X1BqSAp6fER2aj1YclVEOFdDSSFrJnNSKjVrQX12IXBTTmZK NjxJRUo9eXIlVWw3ZXN0bH5ePSNWe1ZOMkNwU1A4cjh3WHIKej5UJGF7YkEl aio1ZlF1eG8pfD5qWnIxe1lSQkEtezFDSipIb1pJQ0puSW9OQ0Y0TE9KUWko PCpCYDkmQlEwZGhnCnpZbyhLRDNxPGRESzMwSm5qXm9mKkxWLVpSKyEjM3dx UHojRWFPbyltUE4oelM5NysyMCF5cD5OI20qNEZJVT1BZgp6I0hkRXlJdWRm Wm9CPXByak5JYHQ8ZSNXOU1aeGQpN3lpPU4pPVUxJXhBfnZ1NGB9SlFBT3ck THgmUXpHMDcqcW8KSU02TjwkZzR6XkMxT05hNAoKbGl0ZXJhbCAwCkhjbVY/ ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMv ZXhwbGFpbi9pbWcvZXhfdmFsdWVzX3NjYW4ucG5nIGIvd2ViL3BnYWRtaW4v bWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhfdmFsdWVzX3NjYW4ucG5nCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1YjVhYjQwNzljYjhlMmMwMTViNGY1 ZjEwYTNkYmY4YWE2NDEwZDMKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDkx Mwp6Y21WO0MxOCkzQFApPGg7M0t8TGswMDBlMU5KTFRxMDAxJW8wMDEldzB7 e1IzRGRCajcwMDA0ZlApdC1zaU1pVzAKemh7MTJvP21AbGpNWlcyRSZoTDU5 P0ArPyhSPlNJcCk5e0phQE1YeUNZUlQreCVJdVdiQHROQjNkKFEyRyhlMCQm CnpAdT1TTmpAMGd3KjYqKzNeOTg1ak5XYllEdUgjJDk+b35YTlBgPjk/en5A PVA9WjRZa1lzY3RzJG14flc/fFBvOAp6ck5RSzhtZUlrRkh1MzYqP2MtcVg8 NiFkWWh4NikoQDhlKFo8WGBqYWh4RkAqQFo/fGQ8WGBwY2h3fGlLX1VuaD8K ekBBdjIwRTlseFE9LU1qaytiWm5hRCg+NFZAN3BUIzx6THQ4XzM3Rnc+KVJe citiWndlRCk4SlleeU9kSD5HYnBECnpVLWppKl92P3JGPnhiTERpUFkpel9U XnZHPT0xVTFEKVFWYV5WfS07PHpMYX5eN1B5KV9+bD5xKyQjOXlVLXwyWQp6 YHN8MCE9Skwrdl43LWFwYHxPNnk8PzszMUQpLSRnX313WWA9M21SP0AlRyYr YHtyTkQ8TTg/MkRhaG1TYFJzQE0Kej8xc25WQFckZnJ7TmBXJT8xc2hSQEI3 ezx7TjVAMz0zbj5TRGYtPGh7Xm5vODtPX24yRGdOdyt6fkFuPCt3QV97CnpE Z1drUSlhbW9TLXREY3s9YD5hcDBzc0kyMGQhSk1Rdmc4YiprJTkjMDEwcU5T I3RtWTNsamhVM2xqa1ZudyVIXwp6MDBGSEBMX3QoWSRMLWIwYSlMayoyNEVr P25Gb21SV19nR1VLflheejdoRklRcW9QUHlUdU9RTlV9Z3s7I1lqfnUKemht P0pxJWh5d018MX41TSYtJC1iZn5QOVFBQEMpWUQhIyY0QiRkaEpeNi1IUmxL PjxVRFpiQCQpSGl8ZTZoK2FJCno3bEwjZUFkPTVqdEMmI0xUOClYazVNO0JN MWcjLWVWXzZPelhAPXVrbWx1TFUwZ3d9ZTZ3QzZNYUN+emhNM0M/Iwp6WHBV PXFWQTMzbkEwWGlpaDRGWU81fk4lUF9lUzNxTTZwTVpOKElFczFnT19SJSlw IXBxJCE0SiFCflcwZEF7KlQKelVfaHRpNlB8Q1BhbCkxJDI8Xzs9YmkwQFk4 d2dHST1JOGhPbTt8ayVGZFRsJD0tOEhKV2t3OG5HYGJGcUlGdXY+Cno1bXtB TGcmPnAzYnpwa3UpPSpKUmxPKXNXLU19Y09YPSgoUyYraTZpcmZBeGRBZDV4 cHpecW9XMUxHNmU3RGMpRAp6UCspOHU2SClSZmAlX0BmTTMoI3djO0JvaiVq bSN0dz8wdS15bilrWGJ1QnREWEEtcGJoXmB5eHhISnI3MTF9JUcKei0zfm98 O3IoZylkWDAmKGJ7czJBen5TaCsjeztwTVEpX0YzaTk/Vml1d0I+MlB3ZFVX U2s4V2JLfEpHU0VPe3B8Cm44X1RqYkBiKXdRWWshPyp7YyhLKHdTSmltU2RK NigwMDAwME5rdlhYdTBtamZpaCVreQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAx CgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFp bi9pbWcvZXhfd2luZG93X2FnZ3JlZ2F0ZS5wbmcgYi93ZWIvcGdhZG1pbi9t aXNjL3N0YXRpYy9leHBsYWluL2ltZy9leF93aW5kb3dfYWdncmVnYXRlLnBu ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xZjg1OGJlMWNlZTNmNWQ4ZjJi NjdmNTVkNzMwZTZkM2Y0M2U5YjQyCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJh bCAyMDIxCnpjbVkrRVg7amxeN1JDYzgzV31vOElITipVcS1aczRMUkNiSTR6 IzlOTEBFV01BUChSVnRXX0pSN1BWR05SUmtRaAp6bm48WiYrNGwmOW9nI3ZQ Z2FpXm8ybm00JUxkYyV+bVZkJCk+WkkrYklwP3xlSXJwNkJjZlkqbnk7PFI1 cEV9clkKencjUSZGNCoyODI1Zj1DVHZzVCshYHRJckxLVm1SOG5ENyYpTG84 IXlpfktfN0BXMmVqb2Bye0lWWGd3PHN8XzNfCnoha0JeajxZMkVIPSNsQXJX SShxfXwzPEVWR1lqLTZedH4jNXVOdDZoZlBPOTVydnYtLUFPaXJJQVQoZVIx aEY3Kwp6NVFnWWRrVWtCdjxQY0FkM0BLb3k5T19qN3tkI34yZkNDbW07T2p8 IXcqPV5zMD0taX1wOX5hZVBfYHdlZkVjcjIKenBBd2BpZnd2bGYzNCpPNlpU cTtrVTk5Vnomfll1UlI0X3trNFg3WmQzU185RGVsXiVRcmxBUW5lNjR8fUt7 eShpCnp0JH48WT1vTWRHRkhrcCZHX05LNEYpaGx+QjEya3VQek1kQEshIXlp JGJgVVpvfm18NE1kaG82SSNpJURqT3E8TQp6OVd0emtJZU5IaVNWPGpLSDtp ZkttWF96dSVNMGRaclZncylEKG09YXk9anJqVm0qSFJffTNSTjNKTUV2K2BP NGcKekJvWVhPJGpIZDM9OyV8WUI5MHpDJUY7cz5UeEkzM3ZYLXhVQn5hSGwo KFl0cnFAfEAlVSk5cVk0MD1EcS1gfkhTCnpxcGFkNyYhMGFaY2tiTjlpKGhI eTc4YUo1eHhBNXBmUGpncURLVE9rMW1KUnhxSnBidjlvSXMwT1Q1dWhKUlV5 fAp6cUZMRzVKI1hucylCRiRzbXZJIzNUdCF0KU8+PUE4O19ASGs1SVBQU01H IWhgb1MhcnAqI0p+TXFOKkVKPnAlI2MKelV6fGNzQk90PURQKHpCIVZae3RH N2FrcmlNVHxsUzYrbmhUMDIlPEd4PjEjQiR0O0c5ViNfS1I8JF80eiVhQCo+ CnpvKm9fXkxLdE5NUTBiN09ZZj4pO2pvWV94aFptT2tBVHAqbUpiQylgP0tD SndPZD1RczRRTjdRcTdERW5oODE7dQp6UmU1RWxWYk1IaUhzOEt8ZGpjfDZA bD41JVR8eGtyRF4rOSlXcFIwI0k7dDgzQT4qUmkjbD9qUyFZbU1+PFNCVSYK eiFVaUQ7WSNmNzhLNGNoejtqU3NZIzktbj1GYjlGVDI7M3BqNFhSLVFmUW4o YEZwTFolJE93V28yLVE1amZzWXNqCnoxX1JhZGBzM1F4TnYrVTszSm5Ha2lx Z2g0JUBiT1EoS3Z3YGQqbEY5NE18TlYpfWNKcUAmfkxeQmZgR0cxU3kwVQp6 RVE4Jlo8MXIrUUFPRVg5Vk9+NmYhS35QZDQ/Y1NPY3o7NnRLVU9BTWVlJUgk ak4xZTMyTiQtKnBIRThvazF+RSoKekU+bGQ7JmRld2BJWFhJVCM5fXdSPVJ8 cSpeYT1USyh5YEdVOSRzRD9XPShmclR9OD1ESGw2Tlpvc3NlM0hyJFNYCnol Y0BjfDV1MUlKMzRaP21PfC1Qc19ZUj1XJnJwWjg0aTBUT0lYU3R4QShAfjVL c1gpZyZPaE5wZCFDbm5DT1JjVwp6K3B0VHNuLUhAe0JvcXFBJDNAfnBfd1Fw fD8jNTtwN1o/QVdfZnpSZDxyX04rOG5jVUBKJHFKTm91OGxJKE5WRj4KejZY KXZjVEpTSlZBd2xkUHEjcWR5bnYlKTFUQ01WWjRCdShqSXtycklubWM5Z0pO XjlGQlRSUDB5YE8oUDkyalc1CnpkV1Z9XmFaeW8ld1lCeHQ8U1lqfXlXSCRL Pi1OM2RlZUEzQEl5dT1xeHRmZzYlNX1nU1F5YUtwcCZTTiNmSEF9egp6V05g KXVhbDIwQj8yZDR2YmVFTzNtaDNFe3Y0QFhePypBPllxcDBELS1gbVVEK1hK ZCFWSmt7a2NhWW08dlBKSEoKek43JXgqeTFSWDRCXk1sJWlJKjtkcz1YMXRS aSlKKDJQfm9mR25DUjY+ZyFpSEg9Xn13K0tGSE56T3hVey1pKmI0CnpRSnpL I1lQenlCajlPZCEhaVVzVEJPKW85bj5xUXU9VkJjPyRWQiV3U25EUTY8Q1dI KFUtQVc1UGVSfkRRX1ZwVgp6V3BBdTRlQDlqYjMjbFhTaTY9Tm1jQGpuaTxi NVJuYU1td1BwX0pNKXwyQE85ZVN9QFBFPH5BSWQjUn1AWntQaykKejVeSGAj bFQhKVpgNXlMVTFeSXItcjYlejtUOXx+RTxaK3prU3dyfnRVcm85QCQpZnp8 d3VFeUYtIztTVDFnOUspCno/bmpqVm1ZMlVlI208VSZhSUspPl82RnxLciN9 IUxabWRxNHQpRSUmXyt8ZUY5eHUmVHs8TTVrYm0oPVMrVDY3LQp6em5oPmFo IXdZbXh8RVk2VVNlSTYtMDUjb2wwV19pcipLdEQtYjdwKXdySGhXUjBpIVZD ZEVxT3Z6JSRsJDtNTioKejVlVXR0Q2t3M2tNR3IkKnJ5cjNJYypNSU5BfXRJ d210K1Fld35rQXM0YkNNWV9BU15vQVQ4bWEmcW5VTkd8Tml4CnpvN05rdERJ KXQ1bCElQ2s9cTVmVGotKSNeYW92O1pgMjF7JmNyblZAR1d6eDl1VlRffntv JVBnb3xxTEdzO2F6Qgp6LVFzaXlwQ2xkM1Vvej4xUno+U3kjSE1RKF8yTCR2 SE54Mi1QI1N8LW9BaHdZN047T3J7QVZlfEppOFMqbXVyX30KelV0YT9ZYWB0 fFVEQF9WSk96dTJ1YGBNU0NMI3c8IzdwQzRlY0gtOCVlKk9GUnY4TUpLb20m bXo3P3BrX0NlVCg+CnpVO2o8a2dCNjtYPCZwJkRjKm5gWUJrOEQwTH1IKHs8 MkFlKXNaXzN2PTdkVHM3KlM0ZkFMb3QxUWAzfENGSDFVYQp6RXY+c3Baa1VT O0l2aEIwKlZaZmMqMmtSJDgkcU1WJkdGYDk9QmJga1lRO0luYlBjSTxnaEtV bEhDIWMkI08oX3EKekYzfV9QaUU7ZmNwdE5ndzk9MilSeH5DMDhuPGJmLTNT UzRNJiRzMzNDZEBfYXg4Nz15JiVOKEdwQnZYcmUjLWFTCnpnX3todzlrJTho cVVmcl5HaStYeU9ETmZGb0FLYDV5Vyo3WCNweTA5Z0thUmFyfW5MKXtaektp YXhtT2VMIXdnPwp6JiE7OEBCeiUpKEZec1JiazJsVzg3dzdHQitTZmI0Wihv MykteVUhTzBCYFJEZEc0PE4yVkE8R05XQWRmLSs9ZVEKY3prb2x9MHAxX3w0 R2Q1c1liKmM7OX0qVF5jUHV7UmY3c3hvX3k3T14KCmxpdGVyYWwgMApIY21W P2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGlj L2V4cGxhaW4vaW1nL2V4X3dvcmt0YWJsZV9zY2FuLnBuZyBiL3dlYi9wZ2Fk bWluL21pc2Mvc3RhdGljL2V4cGxhaW4vaW1nL2V4X3dvcmt0YWJsZV9zY2Fu LnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTFlMGIzZjRjNjFiYTE2 NmI2OWJkN2YzMmNiMjNkYzg0Mjg0MjllCkdJVCBiaW5hcnkgcGF0Y2gKbGl0 ZXJhbCAxOTY1CnpjbVY7ZTJVN1RuUCk8aDszS3xMazAwMGUxTkpMVHEwMDEl bzAwMSV3MHt7UjNEZEJqNzAwMDkzUCl0LXMwMDAxcQp6eCFYMn4hRWVwKExB fmlrelVnKCY/fElQZ1FOcnB9IXM9SlU+VnducGlQaTlDJG4wdiM+fjZ+Smwt VGleK1ZPbk8Kej9TUm5qZ1ZGN3otU01kMkB7Wksqaz01PiMqNiorM144fX5p MiZtI256dilmRT1AK2Z6OWsxaEMjcGAwbj5vY3xHCnpJSmYwSnhhRCFuPzBD LVhQYD45P3p+QD1QPVo0WWtZc2N0cyRteH5XP3xxQjRyTlFLOG1lSjVlVyVT OX1AVkN0Rwp6dyMpTyEqWTJ+KD95fEA2I01KRHQjcTYpZD81QE1gIU9gISko Q1Z3ZT44aWkoelJ1ekFfdkBkIz5ZY2prb1ZuP24KenhiTCpkPSRXPFduNiY0 WXYqbmJwPGRVeEl0LXw3dHNveypMPSV+RWM+aDxaSXhhcGQ9PTlhU0trKndw OHRLZj5JCnoqNkgtYHc5NHEydyhZVVQ9OVJKS2woNjU0cX5EMDY9QjJyZEtU JVVuUGV3eVRseXJXRFpGVnwzSShJJXkjRzxadAp6V05MKEtiY0F0dUxfMGxR UUJ8amJqKUdgI3o/YFVUSnhHQ09aZlJVI3BnfnRxTW9IITY8P3swS2lIVjgt fE5wU0MKenUpViMjUjgmO2gqd3xyVlZWMEpiWipPblAlRjFVXlNKZGhCcW9i b29NQFE0Pl5PWm5VZTArU1FldjNzd0t+WUZjCnooJnpLTUx0bjNqbFV6KHRi NnNSbExyMmIlcSl8eXNlYDBGVD1KTCt3XjVjPURWbShFR0tUZ2kmQEBaT013 VShnQgp6bThGQWpiKSRRUyZ5PVJqPD8rOzx1WUZ4K1c9fmhDTDBWezZUeXRE d2R7fEBIZTNzZG1zPnxmQGpCYTxoWmlBQzwKemMoT3VWJUgjMEo8TTdJKXZB PjN1bVVARFdhKFR6JkBRR3E8I15VY3pKM3ooWkA1UGEhI2RWQ3I7Tz1selRl KmpwCnppRGAxI2VWMWBzVX1qVFQ/N0dTMXB8JEZeI3AwZl47Kz9TSm9VaUQj IXwxWlgtPFlmNG0jWEhsenZpeUktSWJAXgp6bCY5VTNyc1M9PTxnMj5kaykr I0BxU313NTxFeXk5LXxwK1UkSyMpfjxEUm5NbzM3eFJ0PkJyZz1kIUB3bVp7 I0EKenNOOW1JK0ste3lqLWF7UT9CU2ZTKV85V0RjYVlVfmtKRUNEKHJ9NTta SENXbWd3SmIoJjFpd21YTWZwQHA0OTJ7Cnp6VFdNdio2Ry1MbURoVGQpTzMh flotfnhuZzNNLXEmU2A/cVhAU35+cTJqNXdlQmtTajAwMDAxYlclPUowNl55 MAp6VyZpKkgwYil4Pk0wdWd5KVgpRmAwMTBxTlMjdG1ZMDd3NzswN3c4diQh azZVMDBZLWFMX3QoWSRMKkFQUjg+X0oKeiNfNlVfSGN4NmMqZ1JTQkhhcj1g QVRjVUooSHQ7c2FPJTdpRyRGZTg/bDtgYHVIR2p2SEs5TilQMUg9MnRrNm5S CnpnT1VtfHFyZD90TD9sMj5BbWt8dVlULUYyRERMZ2lUQ1V9NF5Ac2I5ZWMh dzV7TU5VPntvUXJee0xhXlpUXjkoZgp6SV8kbT47bGZVeEo2fE1SZTk1Smti ckNNVjs+eFM4N091Sld5NmJOY1p0VTh2YCVRdlJxKklSYEh7VC1NZFJ4eikK encrbmFOZERxP2QyPjBIMXt7cyZTVTM+TDw9d2FhO3NYVzRHP3kmMzVga1BH dF5aQH5aZnE/LUtVXmJoM0wrX3hWCno7MUNFMj9HeDQpOXUxRihjbm94aXNi ND02TGpvZnNCaDZzJHw5STNCNWNLM3ooVkBgaT42bi1TNUkhKEFjOH4hWAp6 SmgobWJPd15EZDIjJF4oOFZYQEMhLWpgTEx+TEF+NWc5Un00ZTQpJlhRUElV NDJEcmRwTDskRzFgSGNNRmFpZH0KenozfTJfcFU5Wjg8SG87NEVINihXNlhP I0luS1VfYCgwWE1gQjF1WGp1T3xDS1VLNkRSOExmI252fEEtYWhvVEBZCnpD O2hMdVBAU3FycmNHbXIjZm8rKHMkKWVfTXZkNH1ScD4pUkgkQHp4K25fUmlJ enYpcV5yJEdnQzk0elYqSm5yKQp6TjVxKm5SOGJ5cEBHQCVfTCpCNVhRJmlE fHZXQX03c1NiJF5DTXN6KitUVlEzQ2ojamRhN2lpfnVUNGNtbklibVMKekc3 UUxeSVVJPyVPNDJ4MDY0TzBAZDZfQVMrell4PV52Syt+NDRGc0dzQmImYllP JUMhT25iK0pEbiU0QHIwUzlSCnpeU01nTU02JSNyM3JTa0lGcTdyN0QzZkZe Jkw5Z0NOayNebFdLZGJNZ2ZFI1RNPWI5eENHWEUobVBVVXJQeVQ/Ywp6JG9p MUtIK29zUWt8TDZ1QzVQSGE4bWh9X2VuX1hKR2t5R3RsZjcyNV5+a0RLZjJ0 XkdCYkljTFgyVC00cU5eMmcKenshP1ozWVZQR3ppY0RETVYjelV0ZW1KeSRf QmxnbHRUNztLKlliXkpRelk+VjRlZ1JUbEBHQERuPn5nTkNNQz8lCnpCa1Jg dnQrSE5aQyl8OXEpe2EjK1l+YVkzNmlJV0AxMlczPXUha2NnbTN2d0dGTm1W cWJLSUtEMmVZJjhAVlQrdgp6VCNrJWhMQjlHcmR0KipzJmM+OClYY3BmbHYh MlJ4RnstcDgte3Q0JDdlSy1Ibnx7fn5LTmM0TF5mTUZ7WmByeUgKend3TFZL eHl5ajstcHd9I3RVQnp6NVpGXiV5MC11fW0rZFJ4NUJuPkFESzNKZCVGMkBN dSZiKTdUQmt4VXo1QHI/Cno8cC1zQ2QwN1hjPzlpYD0zISRRPndzdEYyKjhO dCQ2Uk02Slk0RW0zT2g9RDNIWGJgX0BgSnJ1JDRgXyZgUWZJZgp6M01qNV5a bXh1cWB1ZFlxUH5GZ1ElQnhxJlpFVmJDRHd+ZDxJOCtYV08qSipldSUpQEt0 XntfUkpwRnEkTU5hN3YKeiVGdTdqcEwlS1VWcTI/PUtkTWB4I3EwSTk9cmA3 U2ppMWZOJmUjOHwmSHhnUTJhdnhiVWl0dDQwM34hcVNhZjd6CnpiWShoWWEl RXczV2RKZlRGKSVHTEdBJUdNUjVDQytHJjRGaEclR01RSXhzTGVuSSM/bzAw MVIpTU9idVhWUlU2Vwp6WkVzfDBXX2JXSUZmbE1LRmdZelNGO3BAJEl5NXZv Rmc3Yk5IOTlhYiU5bUJGMDAwMDBOa3ZYWHUwbWpmb212Y2MKCmxpdGVyYWwg MApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4Y2x1ZGUucG5nIGIvd2ViL3BnYWRtaW4v bWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXhjbHVkZS5wbmcKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMC4uYmQ2MmVlZjY0MTBkOTMxNTg1N2QyZTZkMjQ2Nzcw ZThiNjViOGY0NwpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgNzI1CnpjbWVB U0BOPyhvbEh5YHVWQnEhaWEwdnBeMHdCITYzP3d5bGBHWGw0N3l8LSlMUl44 fHdpfTx5bVR2VndfUXJZMQp6TEMzP2ReKlVEaEZXTEExfDlgKXdNYEtSRWJ2 WFE1QS09KDYlOWZSOVpoVV82XjRecHdTMjhsTFdNd149SFM1Pj0Kel9pc0xa UDE8QCV3UWBRams9SyUqbk5nRzA5SnFBblkrflptKCRkJGRzWlQyXkV+S1F+ ZSk/THNkNntKMUxga28jCno4UVlIXlh6aEFaU29yVlB1UCstbWR8dEJULWB+ SEZZaWY+Nm5rSlB1TnVxcD9ZSU9ENTZJYl44YHJWNitkXks8MAp6emttUFV0 WFEhcEdGcVohaEdnM3N3ZSpnNFhLIXdJYXo1cWVfSGZGU3J3YlF1XkFDYDBT fEtAUWs3VWstKn5oUE0KekVoc3E8ODJJPTE/O0JJNlVoVjFtX3ZnPlNAYklt Kmpna3wwTkc/Mk9mOVIhVF5AN0NwciV6bkV3YzV+Vm0lc2x5CnpVRVE1TktD NWwqYzNycUZ4OFF7Mm5ybjdAOT9BNDx3JT41JiZjYDNgWntGT09vVjs5SGR4 ZnM8IUpNNE94OT82bQp6ZW5XZkJXJEE0WFk/aHpZVVVIXjxgQnY1NFBYaFdE cUBIX2N3ZWd4LWFvNkY3QTA1Q2pXaEBFdTN1YlY1YnxWZU0Kek4lRDRnO2Je LXp3Rj0xTEVieGRkMkdTbTI+fj1FUzQjLSZWPkVhazdhWEM1UjA3SCpZMkdi ZHg0NWw/WForTGlRCnpXTW1ZfilXcyh9Yz1xdD1We3JpeUF1Jk53O3BxJlY5 JHVjT1BuPGU9UWQ+aHl2JCZaaEI7QEs5UTxKUypOPXY/ZQp6SW1wRDs9NXxi Tip8TX1fJiV+eEJGbHVLQE1fVUk2UzRYcUV0OFp4NytgVzRDPylLJT14QSg3 P19jJm0kVjR6ezQKelZxJjZXcWghUlRBfE5YKUVrMXczajQ1Kl8mNj50MWJt QndgaSotLTRxUERXTSU3bj8+PHQyVns9Q2pOe1UxVil3CnpWMy1qdFVIVWFp e3hzMChzd0opd0JgSnZ8c2FEQkZzWCZVcyRpVUUwKjhxcjJMa3VtZjNAb2pU amtGRVN0UEJpfQpoY2JLKUlYdm9iXiR4TiVudHpwfk1KfWFPRzIyV1ElbXZ2 NEZPI3E4OUp2I3NaCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leHRl bnNpb24tc20ucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFp bi9pbWcvZXh0ZW5zaW9uLXNtLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li40MzJkMmY0NDIzMWMxZjg4ZTc4NzA5MTA2MGVmYzUxMjVkODBlZjY0CkdJ VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA0MjMKemNtZUFTQE4/KG9sSHlgdVZC cSFpYTB2cF4wd0IhNjM/d3lsYEdiS31RR2ljfkUwQkpEditjcDUkUXY2cXpy Vms3CnpXMyY5QHZ6QmlrYEc1SG98Sy0pdVRpY2MyLTFHa05HeVUweCVvbz8z ZkJlZFBhazFnbkhscmBeOyh6fGl6T35LYgp6JWxtfDF6akkkK2JOfkgyfE1t e21jTXBSOXszKkoqUz5mM15gO1NpfWV8XnBRYD17akVURGRFJCNReXkpZHY+ PCQKenxLQUdzd3lvY1F3bGJDa2Aye21MSmlDenc8WnU+dkw+Mj5TND17RStu UWFHVDxhb0xgaERjb1E/ZjJ3c1AhTTJvCno3bHtlRFErfihjfDlAQkU4NF4x S3gzNjFiWXxCdWBxUWItSjYyREJ4Wl88cDVCRWBwd25hfTZ3eHBhMSU+ZSFW egp6YWhkVT0qWCZFU0ZPcEpFKiY7ZSlgcWQzKkRwYVQ1dTlKRExTJTNQKChr KUA8WmJhTHpWK2ghT2Y0PT9gS0s5MnEKej0zZkVAbDReLS1MYGgwd052YyhI UTdWdlBGZnVTUyZeMHZESDgyYkBHTyNpK3dsWG8qSFpaal5GcXJwRlp4eEQk Cm8tMjlaeHZgVUJ1MTUyPDVwbFRCPDEyYyQqUWAxQSYwNXZkcHk4NX1TYjRx OWUwMX1rMiEya2ROCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1n aXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leHRl bnNpb24ucG5nIGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9p bWcvZXh0ZW5zaW9uLnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lM2M1 MzMzNDc4ODNmYzFkZWM3M2JjYjIxYjMyZmM1NGUzYzMxNzMyCkdJVCBiaW5h cnkgcGF0Y2gKbGl0ZXJhbCA5OTYKemNtVjxBMH5gRV9QKTxoOzNLfExrMDAw ZTFOSkxUcTAwMG1HMDAwbU8we3tSM0NAbHxEMDAwMDFiNWNoXzBJdHApCno9 PlB4JWBjTzwlTVEyekxmXzZJNiY5fHpkZDk5Pi1AYSoybSFKdW5oN04pfGJS ZnwtYnh8elZib1NLaGFfdyhsRwp6O21jLUw0WFZWY1FqYilSIUlvTj5VVG02 Y2RUbFArKTQ4YWVZX0YoKyFxdmgpZklxJEkkYWtAUU0xRGVtYjJwLXkKelpO SXBnJSpVP1orfDBlVW1SP1EpQCNAeUx0QTN1OVhGaHY4bWR2MHRifkMhT2sp NHhja2MzV3NhND8qYVVEP3BICnpAYWZYLTw7c3xnUC08SGVjeFdMSVRNbit7 eWUpRHF7UUxMJmAxMU1vP0RnPkFeWCVFeztsaytNeTVgeGs8SkdDKQp6KFY/ Sl5QYTBxcjklVVJVWllYSn1hSGB8RVhzZDc9VjtNa3ZLSGJjaXNGem5ZWTkq ZUBxc2lea3EwcCtjO2t+ISMKeiE/NU1QcXY1bGktPiM2P3A/MU5BYWxlM24p ME51RGtnYnxuTVEkdkV3dXI7KSZYKFAla2xMZSgqcXdzYm4wKFplCnomJWxx QmcrKjNTMVpZP2RudXRUSW1ye0dOZnB5WjJldGtNOVhDTnFUQ3RyOXdpaFZP QVY7aU5fdTZEKFRLI3hjZgp6VG5gdiE3KGJPdHc0YGI9WENRPkxodD1gaXQ8 fCgjbXRTRj9XPFFRY20kO1Q+bTFCWjtHMCpTVXg4JVdHdDcmNEIKelYzRCt0 YjhSSXdnRjNMdXUjYk5eN0c0dj09KnlWUnAtX0Bram1lb1Nkb2FHIXpTeld2 IUtgVUhVS0MhTVZ1WlNqCnphSUFKVmRwQXlGOXZ4eUNsaCZnK2pZOEdHZSR1 O2tsWXVvdVRAKmlWRD93KT5ZOzdFc2VrVkM/RFJSMWdaX3RRWgp6eUt2OTla T3lZfnpAfTg0aEJLe19KSG4oIWw2ZkxWYlRuaEZaZk1TZlYkNkx1bDBxaEdD MipaP05QPFR2aEJMfnEKelVCfDBjI2l2Y2NwZylSbzk4RyNXVCpgUD4kYTZ9 KFc7Mj5hSTtsfVd6K3R8ZkllbGpsU2NGU2ZyZWFYV1olZjIjCnpNWiN0fnpn P2teT09BVXBoSTEqNGNyM1Z9UW5zOCZpZ1kxQFkjREBZN0g/YiRUOFVDdHNi bl8yUyVpMiFyayEpaAp6IT5FYU1DY3ZhbXlSPyhXIUtLOCRxRjwzKzlCQ2FB VUopODw5WDZMbUVzczFEVi0+WlRMM2UyPThFUDkpaGZhdW0Kekx5PndYRVJz RWRzREVvKDN6bUUkZXhganN5SW1HJjc9TE9PZm9sflRjTyolSU5FbUolN2l9 QnxZUm4xJTAwMDRXCnpRY2hDPEs8M3pIMDAwMDFWb09JdjBFaCkwTkJ7cjsz MjtiUmF7dkdmNjk1MVU2OUU5NG9FUUtBMDAocVFPK15SVwp6MH4teEc0ISZI QkY4fX1sUiFLeGJSMmI3XlU/M2oyeFM7VnZMWGJ0d1R6fj4wVz1RaFZBKXlI X0ZrTHt9MTtodWsKenBhS0NRS3pAPTdzYHtpOTdpMEB2bDJUUzh3MUM3P1Im Rzd5OykxTm08PE9aa0N7QS1oPDZ9QTxDamJEYVA4cURlClNSXzRlNjAwMDA8 TU5VTW5MU1RhWC1eTDM3CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYg LS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9l eHRlbnNpb25zLnBuZyBiL3dlYi9wZ2FkbWluL21pc2Mvc3RhdGljL2V4cGxh aW4vaW1nL2V4dGVuc2lvbnMucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu LmVlZDdjYTk3YTMzZWY1OTVmNDQ4Yjg2MjExNjhkNTMxZjg2ZDUxZDUKR0lU IGJpbmFyeSBwYXRjaApsaXRlcmFsIDEwMTcKemNtVjxWMHx4d3dQKTxoOzNL fExrMDAwZTFOSkxUcTAwMG1HMDAwbU8we3tSM0NAbHxEMDAwMDFiNWNoXzBJ dHApCno9PlB4JV9mU2shTVNeeFooI15OM3A/UiZPZCtfWXUkaWJqJVReNlJv ckIjYm1uITFfNXh9MkppVUg5fG09aSRwewp6UnQ+N2VzWngocmtITUImbXxr cH1Za0YtaStTOXFIb05UWUNmeF58b0s3Yz5IPkJ4N25lTUVqamZPOXZablFn emcKem5hc3pvLWB2Yy13dzdLXzByQmVBd3lTPWdtMWpQQ0plSkkkR2o9biZ2 eXEqWFZ+flZTZVErP0drekx1KXYrKEtDCno/JlpwdWklQEQ/NV9vN0s1TCp0 ZTxHZHwkRSZUaVVgfXAkdF9VIWZXO1BkUis+KjIhYS1NWiU0dmc2Z007TClM PQp6azUzdzQ3OU0zQkRRK2xmc0JvJnx4b0UzITgpRiRqZF9MWEduNWRVbUhF SmNFJCltfmIoeEszKnYqRXFCPWZrayYKenpONnVAbyFfcEkqUChYN2c+az10 Zjc2eFAkZElqP1NWZTl1Z1NMcG4+Jn0rbHNGMiNEaVApV2opfGg8TWxoNDQ5 CnptNCF1Q1B5fWRMNFZzOFV0Q3YhSHY0TTVjamVkUFBDfSR1alo2e3hOSkJv Y1hCeDQoOyl2azhNaGRfQD01bkstIwp6V2YodHxPMD1ZRUY9cnJ6dnhuOTMr XnlCTFQkZipBb0BQSWVOMCsja1dSK3VyY1FNY0oqU0Ytc1Qmcm5mbFZGancK emthS00lRz1uO0AkKl8tcUlUbF9NIXN5R0cmN258fFJFXjEqRHw7fSQpNHRm bWhyejZBSWJJWkFucXF7eWkqVCVWCnpIaFZXdFY7JnUxOEkjdGRJRV9OcHpr YnJZYzlWZk1MdFBYPFpZeDEmQjVaOU9tM304Vlo3RmlQZXM5by1URHglMQp6 d3s2WHtXeCVGWG9yV3s1a35fa3JNdnszVk1zemV8dCFgK31nSlI1bUhqK1hu WTkoLTtaYipWaEN4JGMxdVUqSGgKelJtRz1HekBSXmhhdlYqMUpZMzNuUj4q VG95azt8K01MTVpiSylfK1hvakhBSDVtPHl2UjtGVDUjJjFpK1lETDBrCnpK SEs2X2s0dWh3R2xwfDFpK0MpIXBpO0orTX5aWUlmQH5SdFo1RDRfMzBqRiNS O2dxKnk7KzJLSipKJj0kaXR8Swp6YnRiXjFQckl+fSM9KWg7ek1AfXxUXndt MDU/JkQrWTheSjBNSjxtITZrYD4mbkwmNEhDPmQlU1A9YCo0ZF8kM1gKekNv R2FaZlQofEtTX190WkI3VVpRS0QlOE9YYyZLTDdKK0xPOCtSbTBmPUMhezlU I21KN1VERkUwMDAwMWJXJT1KCnowNl55MFcmaSpIMGIpeD5MOyMyZDlZX0VH MDEwcU5TI3RtWTNsamhVM2xqa1ZudyVIXzAwME1jTmxpcnUrWEVYQgp6NkNw KFJiY3B9fTBCJVZ7S354eWlVNjhSMnojdDMrblModHQhM35oWV52R2c0MkZM PWBFRU5ObTB7TSE2LXkxOykKelF4RmF6dkxfY0sqYjxfb2tGZzBkOEhjI1Y9 RWhgKWgreVptcGxlaG5sTlpFZHRnUUBoWDBDTmVJV0VweHchb3lOCm5kY350 c3A5VGxpZE96T0MmLSkqfEtIKTNwRDJuZ3IwMDAwME5rdlhYdTBtamY8S05V egoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvd2ViL3Bn YWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXh0dGFibGUtc20ucG5n IGIvd2ViL3BnYWRtaW4vbWlzYy9zdGF0aWMvZXhwbGFpbi9pbWcvZXh0dGFi bGUtc20ucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFjZDQzY2I4YWJh YjZlZjM4ZGFmMzRmZjZkNzU0NDE1M2ExMWRhY2YKR0lUIGJpbmFyeSBwYXRj aApsaXRlcmFsIDYxMgp6Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXjB3QiE2 Mz93eWxgR1hsNDdgWCN7TFJeN2QjaWBHYCZpJEtte14jMU8KenBIQUkqYj9A PT5YVjBITWQtbSs7amJ+KiRVbGAxSihRKT0pXlhZJDgkQTBHQF8/ZikoVGlC LTBvfnU5REVgNGhfCnpAM3MyT20oOGREZEk3bWgtZkdOejhKeEokKFJ1Q2w+ JG1VU3lMYlFve1lRQDtKJTBSbj45VDkpbUtBOWUqQnYtOwp6IXE5ayp5N3N9 Y142M3ZBSk9Ja09kOHw+QCpxQGYoY2xZa3lXeV9YRE0wVHJib148bkFzY1Vk aFMjM3NwYF41RkAKeipTfnU4RGx2Sk55N3B4aV57cVIwOSlKMXI8P0drNCYh NHwtV1Ylc05XIyF5P1lhXm84c0E/VzdFTCF5TzxIeHNlCnotfVg8fnMtfTY9 KDcxZDR7RG5gU0s1Y0FUczsrJVZVOTxiZGlMOyVaNkkpdFZKJGRydiY2X3Q1 OT12dzwrRXJUQwp6UXd7Umg0fj5+R2MlSkpfMDBzd1JOc3dQS2dUdTJNWCtS RVZmayRMOWtvRXYkeDBCZytLKmpgNTdzbjhaJWdHNH0Kek9hQEFmOVNwKzgr fWhJQz9DazJ8PH1NQkcpQkVFYzB6NHZJTHs+R3FeUWI4M0RKcFNfUE05PXA7 PyY5RTBVPCRjCnpUcXs8clRBN2BabUhFMkJmd2tvODdoYXk7OSQlbGMzeiMr KTYrSUsxN0lyUG9FUCZCNitQYSRFVHxIZXFkX318VAp6LVI7WSNaezZPJVVP d2MyeX4yZz0hKWg4OURrOUpMP3JrWDhWNjd6NGBCOTYoVzIpZX1pNjB2UmZO b1BRYWc4V1IKek5pMGRWTi1qelRRVmQyMGg2Y0taTSFFKXVBd352UENkTzdL Q2ZXdzNSdDUkWkdnYWtLSDAwKXxXVHNVQEcjRlRkCmNIR291RzhKSXlkb1NH aUcyQj85LSk3OCZxb2xgOyswTFZRSD9FbkEoCgpsaXRlcmFsIDAKSGNtVj9k MDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2ltZy9leHR0YWJsZS5wbmcgYi93ZWIvcGdhZG1pbi9taXNjL3N0 YXRpYy9leHBsYWluL2ltZy9leHR0YWJsZS5wbmcKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMC4uNWQ4NDAzNWZlZWE2MmQ1M2Q0NTc0ODExNzhiMWJjYmU5NjIy Zjg1NgpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgNzkzCnpjbWVBU0BOPyhv bEh5YHVWQnEhaWEwdnBeMHdCITYzP3d5bGBHWGw0Nzs2SzNMUl43ZCNpYEdH RlpgYyR7YGFFRwp6VXc3U2pkLTQ5dWA7VlZMZWZJcD52dUMjK0szI0x9ZEdm ez1kYjN9MnBhMClfPTNtezNLYyRDJTw/UT5CeFpfKmMKenJxQUFNSn4lOVlY VElRIz93blVAR2hWaXlgSjI3KGh2VHckVygoaXcmVV9ZfikxSHlGe3FFaG5f d0w9aGZCKmkyCnoyTS09VGVFOF9tcXNOYVE4eVhpVj5pVyV9emQ+MVRWXkdM JEJqWUxee1MoV1U5b1Z0K3ByWG5tU05GWmttIz0qQwp6PGpMfm8laz5URl5v QD5QeVotdnN0NSp7elBMZmxjVXxfUVU+YXxCI3VVPUpGP2JKMmN6aWlwWV8z UEthZSpPQiYKem04JS1zRXFhRUIpaWtHP20+Oz13PWxQcEFae0VJcmB8ezw+ elA8XkhEalBKa3VTfVk+XzVKKHpBM2w4ZV55JDtQCnpja2ZvTlQpQkduPk4j YGZEWFBxSWJVQUVlbzNFakJzPCZfSnJjSWxrS1l6WT0/LTZDU3djZnRfVSUh Nmk/MkBnYQp6YkFIK0skRGNvY3tgJlJueklgV0QpSGo1TEFLa2NkKTdHdDls VCNZaXdONztSLXVtfEsrd3Y5TG1ETShUY3kwUmwKekAjRDVfK3V7PW5SVy1K RGMzKUFMezhVWXxIelZ1ZHEpQnJvUGckcmlAJG13SU87ZG1veipyTEc3dEct Qj5fIUBwCnohJiVARlNxITgten1XMyV3akdkaCswKEBfTUI7TENMVl5uOzQt WmR8JmwjT0hJZDVkPCUhIz5VdnF5b151OHpAQgp6RjtPdGt1I25TcDFEQm05 cWhzY1JoTXFNdEUpSD55ZnU1MUJwfXcpNiZjWnFpbWFialFAQFZ5b1MxKzRj TVI8OTcKemQjP0tVb0lSdGZiQ0FodlM9Y3FSWkRyczFgdXhyJUZmT1BRND52 RjhfeElNJS1fWCQyLUBrUEl7Q2JDa2ZDNyNQCnoyVThPcjh6bXp4RD5YQVM0 eEl5JTtgMWxXY3JzX3NxKj5HVyM1enUmSUNGfVJeVkc/K3J9WWBRTVpgcVlr RiFtRQp6R0cqRy1AQ0Z2Ryl2Tlk4SCtlTih6UW1vQ2J4YFk3eiNle3ZGQlkw VGUmVEU3ZiE8UnNhZzhXUk5pMGRWTi1qelQKelFWZDIwaDZjS1pNIUUpdUF3 fnZQQ2RPN0tDZld3M1J0NSRaR2dha0tIMDApfFdUc1VARyNGVGRIR291RzhK SXlkClVvU0dpRzJCPzktKTc4JnFvbGA7KzBRezxPJF5aWlcKCmxpdGVyYWwg MApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mv c3RhdGljL2V4cGxhaW4vaW1nL2V4dHRhYmxlcy5wbmcgYi93ZWIvcGdhZG1p bi9taXNjL3N0YXRpYy9leHBsYWluL2ltZy9leHR0YWJsZXMucG5nCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAuLmM1ZGZiZDQ1NGVkMzM3MjdiZDFkZWViODdj NjJmODY3MWY2YTVhMDMKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDY2Mgp6 Y21lQVNATj8ob2xIeWB1VkJxIWlhMHZwXjB3QiE2Mz93eWxgR1hsNDdeTVB5 TFJeN2QjaWBHYCZpJEtte14jMU8KenBIQUkqYj9APT5YVjBITWQtbSs7amJ+ KiRVbGAxSihRKT0pKDF1VCZ1ZkR4fF9pcHApZV50a1I9TzZmKXl6XlZ3Cnpy cTc8TUtpRHBQWWRHKDxgcGxSMj8laXVYe25yYTl2Z0VEZGpGJWNTVSo1bGUt ensqSGpvcXYoU0ZTJkxeeXU7OQp6JEJDaDU0WVYpU1lgcHM1IUdvaG1GUFR8 dlB9QUlBVU93czZAcTE+dlhBSEU/Xj53VSZgU1J0JWhZeSE2VE5WKkQKelR9 fHQ+djs5VUw/Vz9BbXQ3Z29Zd1NOOGpTRmNgOElRN31oPUFlZjVIQkhUKD1Q ejcpe3JkSSgtUGV0RSZLcWYrCnpUQz9KP3g5Pl9kdEBEa3xKM2ZCPWAxYkFG K35uUWIrU2VSU0g+X0IoO18xXztSbjs/OEhGZ2BCRVdVUV96Sj1iZwp6cmkk SDlvOy1ROz1GT3U9UHdYOStZd1BXPDJLbnhYYT5JcWpnTUV2RHB+Rn1iPFFM NH5AYSNxIWtpJUt2NW1ea1IKeko7MiFRV1ZSaVV2RHdxYkYrfTJXPzBId1FM azxHMjd4aGRXOFhtQjR6WX5qVFZrc31iYFFQaz84WitPQGh0fW1FCnp4RFVS K0BaRGl5JFYkX3d1MWhhQGdCSkF1WFVtdyRJUWRMTldMbSsyd3Y3P0ZXJGwt cnZhI3FHJF9lZVV0N2w7Ngp6WWZzUVBRIzNJe1hXandEUEc3Q0xDKUo5N0kh ISNqKDhYdEcoQXVsZ1hUemk/QzxxK2hJNSUob2BSJVRvZFNASWcKekZxITkq eytYNVloRURrRnYoeFVzPCMmSlNZJXkwcStIMjNmY2w/P2hDWkI2MiVDMGw3 VmNfeC1kdWdXfWVpRzw+CnopZV9mO2w5YUBmUklCOG9SM09EKldNRjhaWWlP aXZVPklVI1V9YSkjV24hWGpVfXxNeFVAPW93NG47JDVlb0FJcQppQn05WFBD MEdNVXdVdlB4TThtMStwPSpFfDcoOEE1VC1HQHlHeXdvWkhac3V3CgpsaXRl cmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9t aXNjL3N0YXRpYy9leHBsYWluL2pzL3NuYXAuc3ZnLW1pbi5qcyBiL3dlYi9w Z2FkbWluL21pc2Mvc3RhdGljL2V4cGxhaW4vanMvc25hcC5zdmctbWluLmpz Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NjdkMTkK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9l eHBsYWluL2pzL3NuYXAuc3ZnLW1pbi5qcwpAQCAtMCwwICsxLDIxIEBACisv LyBTbmFwLnN2ZyAwLjQuMQorLy8KKy8vIENvcHlyaWdodCAoYykgMjAxMyDi gJMgMjAxNSBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlv dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug d2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBv ZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9y Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJl ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywg c29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VU IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy IGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3Ig dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh bmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorLy8KKy8v IGJ1aWxkOiAyMDE1LTA0LTEzCisKKyFmdW5jdGlvbihhKXt2YXIgYixjLGQ9 IjAuNC4yIixlPSJoYXNPd25Qcm9wZXJ0eSIsZj0vW1wuXC9dLyxnPS9ccyos XHMqLyxoPSIqIixpPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEtYn0saj17bjp7 fX0saz1mdW5jdGlvbigpe2Zvcih2YXIgYT0wLGI9dGhpcy5sZW5ndGg7Yj5h O2ErKylpZigidW5kZWZpbmVkIiE9dHlwZW9mIHRoaXNbYV0pcmV0dXJuIHRo aXNbYV19LGw9ZnVuY3Rpb24oKXtmb3IodmFyIGE9dGhpcy5sZW5ndGg7LS1h OylpZigidW5kZWZpbmVkIiE9dHlwZW9mIHRoaXNbYV0pcmV0dXJuIHRoaXNb YV19LG09ZnVuY3Rpb24oYSxkKXthPVN0cmluZyhhKTt2YXIgZSxmPWMsZz1B cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMiksaD1tLmxp c3RlbmVycyhhKSxqPTAsbj1bXSxvPXt9LHA9W10scT1iO3AuZmlyc3REZWZp bmVkPWsscC5sYXN0RGVmaW5lZD1sLGI9YSxjPTA7Zm9yKHZhciByPTAscz1o Lmxlbmd0aDtzPnI7cisrKSJ6SW5kZXgiaW4gaFtyXSYmKG4ucHVzaChoW3Jd LnpJbmRleCksaFtyXS56SW5kZXg8MCYmKG9baFtyXS56SW5kZXhdPWhbcl0p KTtmb3Iobi5zb3J0KGkpO25bal08MDspaWYoZT1vW25baisrXV0scC5wdXNo KGUuYXBwbHkoZCxnKSksYylyZXR1cm4gYz1mLHA7Zm9yKHI9MDtzPnI7cisr KWlmKGU9aFtyXSwiekluZGV4ImluIGUpaWYoZS56SW5kZXg9PW5bal0pe2lm KHAucHVzaChlLmFwcGx5KGQsZykpLGMpYnJlYWs7ZG8gaWYoaisrLGU9b1tu W2pdXSxlJiZwLnB1c2goZS5hcHBseShkLGcpKSxjKWJyZWFrO3doaWxlKGUp fWVsc2Ugb1tlLnpJbmRleF09ZTtlbHNlIGlmKHAucHVzaChlLmFwcGx5KGQs ZykpLGMpYnJlYWs7cmV0dXJuIGM9ZixiPXEscH07bS5fZXZlbnRzPWosbS5s aXN0ZW5lcnM9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZyxpLGssbCxtPWEu c3BsaXQoZiksbj1qLG89W25dLHA9W107Zm9yKGU9MCxnPW0ubGVuZ3RoO2c+ ZTtlKyspe2ZvcihsPVtdLGk9MCxrPW8ubGVuZ3RoO2s+aTtpKyspZm9yKG49 b1tpXS5uLGM9W25bbVtlXV0sbltoXV0sZD0yO2QtLTspYj1jW2RdLGImJihs LnB1c2goYikscD1wLmNvbmNhdChiLmZ8fFtdKSk7bz1sfXJldHVybiBwfSxt Lm9uPWZ1bmN0aW9uKGEsYil7aWYoYT1TdHJpbmcoYSksImZ1bmN0aW9uIiE9 dHlwZW9mIGIpcmV0dXJuIGZ1bmN0aW9uKCl7fTtmb3IodmFyIGM9YS5zcGxp dChnKSxkPTAsZT1jLmxlbmd0aDtlPmQ7ZCsrKSFmdW5jdGlvbihhKXtmb3Io dmFyIGMsZD1hLnNwbGl0KGYpLGU9aixnPTAsaD1kLmxlbmd0aDtoPmc7Zysr KWU9ZS5uLGU9ZS5oYXNPd25Qcm9wZXJ0eShkW2ddKSYmZVtkW2ddXXx8KGVb ZFtnXV09e246e319KTtmb3IoZS5mPWUuZnx8W10sZz0wLGg9ZS5mLmxlbmd0 aDtoPmc7ZysrKWlmKGUuZltnXT09Yil7Yz0hMDticmVha30hYyYmZS5mLnB1 c2goYil9KGNbZF0pO3JldHVybiBmdW5jdGlvbihhKXsrYT09K2EmJihiLnpJ bmRleD0rYSl9fSxtLmY9ZnVuY3Rpb24oYSl7dmFyIGI9W10uc2xpY2UuY2Fs bChhcmd1bWVudHMsMSk7cmV0dXJuIGZ1bmN0aW9uKCl7bS5hcHBseShudWxs LFthLG51bGxdLmNvbmNhdChiKS5jb25jYXQoW10uc2xpY2UuY2FsbChhcmd1 bWVudHMsMCkpKX19LG0uc3RvcD1mdW5jdGlvbigpe2M9MX0sbS5udD1mdW5j dGlvbihhKXtyZXR1cm4gYT9uZXcgUmVnRXhwKCIoPzpcXC58XFwvfF4pIith KyIoPzpcXC58XFwvfCQpIikudGVzdChiKTpifSxtLm50cz1mdW5jdGlvbigp e3JldHVybiBiLnNwbGl0KGYpfSxtLm9mZj1tLnVuYmluZD1mdW5jdGlvbihh LGIpe2lmKCFhKXJldHVybiB2b2lkKG0uX2V2ZW50cz1qPXtuOnt9fSk7dmFy IGM9YS5zcGxpdChnKTtpZihjLmxlbmd0aD4xKWZvcih2YXIgZD0wLGk9Yy5s ZW5ndGg7aT5kO2QrKyltLm9mZihjW2RdLGIpO2Vsc2V7Yz1hLnNwbGl0KGYp O3ZhciBrLGwsbixkLGksbyxwLHE9W2pdO2ZvcihkPTAsaT1jLmxlbmd0aDtp PmQ7ZCsrKWZvcihvPTA7bzxxLmxlbmd0aDtvKz1uLmxlbmd0aC0yKXtpZihu PVtvLDFdLGs9cVtvXS5uLGNbZF0hPWgpa1tjW2RdXSYmbi5wdXNoKGtbY1tk XV0pO2Vsc2UgZm9yKGwgaW4gaylrW2VdKGwpJiZuLnB1c2goa1tsXSk7cS5z cGxpY2UuYXBwbHkocSxuKX1mb3IoZD0wLGk9cS5sZW5ndGg7aT5kO2QrKylm b3Ioaz1xW2RdO2subjspe2lmKGIpe2lmKGsuZil7Zm9yKG89MCxwPWsuZi5s ZW5ndGg7cD5vO28rKylpZihrLmZbb109PWIpe2suZi5zcGxpY2UobywxKTti cmVha30hay5mLmxlbmd0aCYmZGVsZXRlIGsuZn1mb3IobCBpbiBrLm4paWYo ay5uW2VdKGwpJiZrLm5bbF0uZil7dmFyIHI9ay5uW2xdLmY7Zm9yKG89MCxw PXIubGVuZ3RoO3A+bztvKyspaWYocltvXT09Yil7ci5zcGxpY2UobywxKTti cmVha30hci5sZW5ndGgmJmRlbGV0ZSBrLm5bbF0uZn19ZWxzZXtkZWxldGUg ay5mO2ZvcihsIGluIGsubilrLm5bZV0obCkmJmsubltsXS5mJiZkZWxldGUg ay5uW2xdLmZ9az1rLm59fX0sbS5vbmNlPWZ1bmN0aW9uKGEsYil7dmFyIGM9 ZnVuY3Rpb24oKXtyZXR1cm4gbS51bmJpbmQoYSxjKSxiLmFwcGx5KHRoaXMs YXJndW1lbnRzKX07cmV0dXJuIG0ub24oYSxjKX0sbS52ZXJzaW9uPWQsbS50 b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJZb3UgYXJlIHJ1bm5pbmcgRXZl ICIrZH0sInVuZGVmaW5lZCIhPXR5cGVvZiBtb2R1bGUmJm1vZHVsZS5leHBv cnRzP21vZHVsZS5leHBvcnRzPW06ImZ1bmN0aW9uIj09dHlwZW9mIGRlZmlu ZSYmZGVmaW5lLmFtZD9kZWZpbmUoImV2ZSIsW10sZnVuY3Rpb24oKXtyZXR1 cm4gbX0pOmEuZXZlPW19KHRoaXMpLGZ1bmN0aW9uKGEsYil7aWYoImZ1bmN0 aW9uIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoWyJldmUi XSxmdW5jdGlvbihjKXtyZXR1cm4gYihhLGMpfSk7ZWxzZSBpZigidW5kZWZp bmVkIiE9dHlwZW9mIGV4cG9ydHMpe3ZhciBjPXJlcXVpcmUoImV2ZSIpO21v ZHVsZS5leHBvcnRzPWIoYSxjKX1lbHNlIGIoYSxhLmV2ZSl9KHdpbmRvd3x8 dGhpcyxmdW5jdGlvbihhLGIpe3ZhciBjPWZ1bmN0aW9uKGIpe3ZhciBjPXt9 LGQ9YS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWV8fGEud2Via2l0UmVxdWVzdEFu aW1hdGlvbkZyYW1lfHxhLm1velJlcXVlc3RBbmltYXRpb25GcmFtZXx8YS5v UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxhLm1zUmVxdWVzdEFuaW1hdGlvbkZy YW1lfHxmdW5jdGlvbihhKXtzZXRUaW1lb3V0KGEsMTYpfSxlPUFycmF5Lmlz QXJyYXl8fGZ1bmN0aW9uKGEpe3JldHVybiBhIGluc3RhbmNlb2YgQXJyYXl8 fCJbb2JqZWN0IEFycmF5XSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcu Y2FsbChhKX0sZj0wLGc9Ik0iKygrbmV3IERhdGUpLnRvU3RyaW5nKDM2KSxo PWZ1bmN0aW9uKCl7cmV0dXJuIGcrKGYrKykudG9TdHJpbmcoMzYpfSxpPURh dGUubm93fHxmdW5jdGlvbigpe3JldHVybituZXcgRGF0ZX0saj1mdW5jdGlv bihhKXt2YXIgYj10aGlzO2lmKG51bGw9PWEpcmV0dXJuIGIuczt2YXIgYz1i LnMtYTtiLmIrPWIuZHVyKmMsYi5CKz1iLmR1cipjLGIucz1hfSxrPWZ1bmN0 aW9uKGEpe3ZhciBiPXRoaXM7cmV0dXJuIG51bGw9PWE/Yi5zcGQ6dm9pZChi LnNwZD1hKX0sbD1mdW5jdGlvbihhKXt2YXIgYj10aGlzO3JldHVybiBudWxs PT1hP2IuZHVyOihiLnM9Yi5zKmEvYi5kdXIsdm9pZChiLmR1cj1hKSl9LG09 ZnVuY3Rpb24oKXt2YXIgYT10aGlzO2RlbGV0ZSBjW2EuaWRdLGEudXBkYXRl KCksYigibWluYS5zdG9wLiIrYS5pZCxhKX0sbj1mdW5jdGlvbigpe3ZhciBh PXRoaXM7YS5wZGlmfHwoZGVsZXRlIGNbYS5pZF0sYS51cGRhdGUoKSxhLnBk aWY9YS5nZXQoKS1hLmIpfSxvPWZ1bmN0aW9uKCl7dmFyIGE9dGhpczthLnBk aWYmJihhLmI9YS5nZXQoKS1hLnBkaWYsZGVsZXRlIGEucGRpZixjW2EuaWRd PWEpfSxwPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzO2lmKGUoYi5zdGFydCkp e2E9W107Zm9yKHZhciBjPTAsZD1iLnN0YXJ0Lmxlbmd0aDtkPmM7YysrKWFb Y109K2Iuc3RhcnRbY10rKGIuZW5kW2NdLWIuc3RhcnRbY10pKmIuZWFzaW5n KGIucyl9ZWxzZSBhPStiLnN0YXJ0KyhiLmVuZC1iLnN0YXJ0KSpiLmVhc2lu ZyhiLnMpO2Iuc2V0KGEpfSxxPWZ1bmN0aW9uKCl7dmFyIGE9MDtmb3IodmFy IGUgaW4gYylpZihjLmhhc093blByb3BlcnR5KGUpKXt2YXIgZj1jW2VdLGc9 Zi5nZXQoKTthKyssZi5zPShnLWYuYikvKGYuZHVyL2Yuc3BkKSxmLnM+PTEm JihkZWxldGUgY1tlXSxmLnM9MSxhLS0sZnVuY3Rpb24oYSl7c2V0VGltZW91 dChmdW5jdGlvbigpe2IoIm1pbmEuZmluaXNoLiIrYS5pZCxhKX0pfShmKSks Zi51cGRhdGUoKX1hJiZkKHEpfSxyPWZ1bmN0aW9uKGEsYixlLGYsZyxpLHMp e3ZhciB0PXtpZDpoKCksc3RhcnQ6YSxlbmQ6YixiOmUsczowLGR1cjpmLWUs c3BkOjEsZ2V0Omcsc2V0OmksZWFzaW5nOnN8fHIubGluZWFyLHN0YXR1czpq LHNwZWVkOmssZHVyYXRpb246bCxzdG9wOm0scGF1c2U6bixyZXN1bWU6byx1 cGRhdGU6cH07Y1t0LmlkXT10O3ZhciB1LHY9MDtmb3IodSBpbiBjKWlmKGMu aGFzT3duUHJvcGVydHkodSkmJih2KyssMj09dikpYnJlYWs7cmV0dXJuIDE9 PXYmJmQocSksdH07cmV0dXJuIHIudGltZT1pLHIuZ2V0QnlJZD1mdW5jdGlv bihhKXtyZXR1cm4gY1thXXx8bnVsbH0sci5saW5lYXI9ZnVuY3Rpb24oYSl7 cmV0dXJuIGF9LHIuZWFzZW91dD1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5w b3coYSwxLjcpfSxyLmVhc2Vpbj1mdW5jdGlvbihhKXtyZXR1cm4gTWF0aC5w b3coYSwuNDgpfSxyLmVhc2Vpbm91dD1mdW5jdGlvbihhKXtpZigxPT1hKXJl dHVybiAxO2lmKDA9PWEpcmV0dXJuIDA7dmFyIGI9LjQ4LWEvMS4wNCxjPU1h dGguc3FydCguMTczNCtiKmIpLGQ9Yy1iLGU9TWF0aC5wb3coTWF0aC5hYnMo ZCksMS8zKSooMD5kPy0xOjEpLGY9LWMtYixnPU1hdGgucG93KE1hdGguYWJz KGYpLDEvMykqKDA+Zj8tMToxKSxoPWUrZysuNTtyZXR1cm4gMyooMS1oKSpo KmgraCpoKmh9LHIuYmFja2luPWZ1bmN0aW9uKGEpe2lmKDE9PWEpcmV0dXJu IDE7dmFyIGI9MS43MDE1ODtyZXR1cm4gYSphKigoYisxKSphLWIpfSxyLmJh Y2tvdXQ9ZnVuY3Rpb24oYSl7aWYoMD09YSlyZXR1cm4gMDthLT0xO3ZhciBi PTEuNzAxNTg7cmV0dXJuIGEqYSooKGIrMSkqYStiKSsxfSxyLmVsYXN0aWM9 ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PSEhYT9hOk1hdGgucG93KDIsLTEwKmEp Kk1hdGguc2luKDIqKGEtLjA3NSkqTWF0aC5QSS8uMykrMX0sci5ib3VuY2U9 ZnVuY3Rpb24oYSl7dmFyIGIsYz03LjU2MjUsZD0yLjc1O3JldHVybiAxL2Q+ YT9iPWMqYSphOjIvZD5hPyhhLT0xLjUvZCxiPWMqYSphKy43NSk6Mi41L2Q+ YT8oYS09Mi4yNS9kLGI9YyphKmErLjkzNzUpOihhLT0yLjYyNS9kLGI9Yyph KmErLjk4NDM3NSksYn0sYS5taW5hPXIscn0oInVuZGVmaW5lZCI9PXR5cGVv ZiBiP2Z1bmN0aW9uKCl7fTpiKSxkPWZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGMo YSxiKXtpZihhKXtpZihhLm5vZGVUeXBlKXJldHVybiB3KGEpO2lmKGUoYSwi YXJyYXkiKSYmYy5zZXQpcmV0dXJuIGMuc2V0LmFwcGx5KGMsYSk7aWYoYSBp bnN0YW5jZW9mIHMpcmV0dXJuIGE7aWYobnVsbD09YilyZXR1cm4gYT15LmRv Yy5xdWVyeVNlbGVjdG9yKFN0cmluZyhhKSksdyhhKX1yZXR1cm4gYT1udWxs PT1hPyIxMDAlIjphLGI9bnVsbD09Yj8iMTAwJSI6YixuZXcgdihhLGIpfWZ1 bmN0aW9uIGQoYSxiKXtpZihiKXtpZigiI3RleHQiPT1hJiYoYT15LmRvYy5j cmVhdGVUZXh0Tm9kZShiLnRleHR8fGJbIiN0ZXh0Il18fCIiKSksIiNjb21t ZW50Ij09YSYmKGE9eS5kb2MuY3JlYXRlQ29tbWVudChiLnRleHR8fGJbIiN0 ZXh0Il18fCIiKSksInN0cmluZyI9PXR5cGVvZiBhJiYoYT1kKGEpKSwic3Ry aW5nIj09dHlwZW9mIGIpcmV0dXJuIDE9PWEubm9kZVR5cGU/InhsaW5rOiI9 PWIuc3Vic3RyaW5nKDAsNik/YS5nZXRBdHRyaWJ1dGVOUyhULGIuc3Vic3Ry aW5nKDYpKToieG1sOiI9PWIuc3Vic3RyaW5nKDAsNCk/YS5nZXRBdHRyaWJ1 dGVOUyhVLGIuc3Vic3RyaW5nKDQpKTphLmdldEF0dHJpYnV0ZShiKToidGV4 dCI9PWI/YS5ub2RlVmFsdWU6bnVsbDtpZigxPT1hLm5vZGVUeXBlKXtmb3Io dmFyIGMgaW4gYilpZihiW3pdKGMpKXt2YXIgZT1BKGJbY10pO2U/InhsaW5r OiI9PWMuc3Vic3RyaW5nKDAsNik/YS5zZXRBdHRyaWJ1dGVOUyhULGMuc3Vi c3RyaW5nKDYpLGUpOiJ4bWw6Ij09Yy5zdWJzdHJpbmcoMCw0KT9hLnNldEF0 dHJpYnV0ZU5TKFUsYy5zdWJzdHJpbmcoNCksZSk6YS5zZXRBdHRyaWJ1dGUo YyxlKTphLnJlbW92ZUF0dHJpYnV0ZShjKX19ZWxzZSJ0ZXh0ImluIGImJihh Lm5vZGVWYWx1ZT1iLnRleHQpfWVsc2UgYT15LmRvYy5jcmVhdGVFbGVtZW50 TlMoVSxhKTtyZXR1cm4gYX1mdW5jdGlvbiBlKGEsYil7cmV0dXJuIGI9QS5w cm90b3R5cGUudG9Mb3dlckNhc2UuY2FsbChiKSwiZmluaXRlIj09Yj9pc0Zp bml0ZShhKToiYXJyYXkiPT1iJiYoYSBpbnN0YW5jZW9mIEFycmF5fHxBcnJh eS5pc0FycmF5JiZBcnJheS5pc0FycmF5KGEpKT8hMDoibnVsbCI9PWImJm51 bGw9PT1hfHxiPT10eXBlb2YgYSYmbnVsbCE9PWF8fCJvYmplY3QiPT1iJiZh PT09T2JqZWN0KGEpfHxKLmNhbGwoYSkuc2xpY2UoOCwtMSkudG9Mb3dlckNh c2UoKT09Yn1mdW5jdGlvbiBmKGEpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBh fHxPYmplY3QoYSkhPT1hKXJldHVybiBhO3ZhciBiPW5ldyBhLmNvbnN0cnVj dG9yO2Zvcih2YXIgYyBpbiBhKWFbel0oYykmJihiW2NdPWYoYVtjXSkpO3Jl dHVybiBifWZ1bmN0aW9uIGgoYSxiKXtmb3IodmFyIGM9MCxkPWEubGVuZ3Ro O2Q+YztjKyspaWYoYVtjXT09PWIpcmV0dXJuIGEucHVzaChhLnNwbGljZShj LDEpWzBdKX1mdW5jdGlvbiBpKGEsYixjKXtmdW5jdGlvbiBkKCl7dmFyIGU9 QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApLGY9ZS5q b2luKCLikIAiKSxnPWQuY2FjaGU9ZC5jYWNoZXx8e30saT1kLmNvdW50PWQu Y291bnR8fFtdO3JldHVybiBnW3pdKGYpPyhoKGksZiksYz9jKGdbZl0pOmdb Zl0pOihpLmxlbmd0aD49MWUzJiZkZWxldGUgZ1tpLnNoaWZ0KCldLGkucHVz aChmKSxnW2ZdPWEuYXBwbHkoYixlKSxjP2MoZ1tmXSk6Z1tmXSl9cmV0dXJu IGR9ZnVuY3Rpb24gaihhLGIsYyxkLGUsZil7aWYobnVsbD09ZSl7dmFyIGc9 YS1jLGg9Yi1kO3JldHVybiBnfHxoPygxODArMTgwKkQuYXRhbjIoLWgsLWcp L0grMzYwKSUzNjA6MH1yZXR1cm4gaihhLGIsZSxmKS1qKGMsZCxlLGYpfWZ1 bmN0aW9uIGsoYSl7cmV0dXJuIGElMzYwKkgvMTgwfWZ1bmN0aW9uIGwoYSl7 cmV0dXJuIDE4MCphL0glMzYwfWZ1bmN0aW9uIG0oYSl7dmFyIGI9W107cmV0 dXJuIGE9YS5yZXBsYWNlKC8oPzpefFxzKShcdyspXCgoW14pXSspXCkvZyxm dW5jdGlvbihhLGMsZCl7cmV0dXJuIGQ9ZC5zcGxpdCgvXHMqLFxzKnxccysv KSwicm90YXRlIj09YyYmMT09ZC5sZW5ndGgmJmQucHVzaCgwLDApLCJzY2Fs ZSI9PWMmJihkLmxlbmd0aD4yP2Q9ZC5zbGljZSgwLDIpOjI9PWQubGVuZ3Ro JiZkLnB1c2goMCwwKSwxPT1kLmxlbmd0aCYmZC5wdXNoKGRbMF0sMCwwKSks Yi5wdXNoKCJza2V3WCI9PWM/WyJtIiwxLDAsRC50YW4oayhkWzBdKSksMSww LDBdOiJza2V3WSI9PWM/WyJtIiwxLEQudGFuKGsoZFswXSkpLDAsMSwwLDBd OltjLmNoYXJBdCgwKV0uY29uY2F0KGQpKSxhfSksYn1mdW5jdGlvbiBuKGEs Yil7dmFyIGQ9YWIoYSksZT1uZXcgYy5NYXRyaXg7aWYoZClmb3IodmFyIGY9 MCxnPWQubGVuZ3RoO2c+ZjtmKyspe3ZhciBoLGksaixrLGwsbT1kW2ZdLG49 bS5sZW5ndGgsbz1BKG1bMF0pLnRvTG93ZXJDYXNlKCkscD1tWzBdIT1vLHE9 cD9lLmludmVydCgpOjA7InQiPT1vJiYyPT1uP2UudHJhbnNsYXRlKG1bMV0s MCk6InQiPT1vJiYzPT1uP3A/KGg9cS54KDAsMCksaT1xLnkoMCwwKSxqPXEu eChtWzFdLG1bMl0pLGs9cS55KG1bMV0sbVsyXSksZS50cmFuc2xhdGUoai1o LGstaSkpOmUudHJhbnNsYXRlKG1bMV0sbVsyXSk6InIiPT1vPzI9PW4/KGw9 bHx8YixlLnJvdGF0ZShtWzFdLGwueCtsLndpZHRoLzIsbC55K2wuaGVpZ2h0 LzIpKTo0PT1uJiYocD8oaj1xLngobVsyXSxtWzNdKSxrPXEueShtWzJdLG1b M10pLGUucm90YXRlKG1bMV0saixrKSk6ZS5yb3RhdGUobVsxXSxtWzJdLG1b M10pKToicyI9PW8/Mj09bnx8Mz09bj8obD1sfHxiLGUuc2NhbGUobVsxXSxt W24tMV0sbC54K2wud2lkdGgvMixsLnkrbC5oZWlnaHQvMikpOjQ9PW4/cD8o aj1xLngobVsyXSxtWzNdKSxrPXEueShtWzJdLG1bM10pLGUuc2NhbGUobVsx XSxtWzFdLGosaykpOmUuc2NhbGUobVsxXSxtWzFdLG1bMl0sbVszXSk6NT09 biYmKHA/KGo9cS54KG1bM10sbVs0XSksaz1xLnkobVszXSxtWzRdKSxlLnNj YWxlKG1bMV0sbVsyXSxqLGspKTplLnNjYWxlKG1bMV0sbVsyXSxtWzNdLG1b NF0pKToibSI9PW8mJjc9PW4mJmUuYWRkKG1bMV0sbVsyXSxtWzNdLG1bNF0s bVs1XSxtWzZdKX1yZXR1cm4gZX1mdW5jdGlvbiBvKGEpe3ZhciBiPWEubm9k ZS5vd25lclNWR0VsZW1lbnQmJncoYS5ub2RlLm93bmVyU1ZHRWxlbWVudCl8 fGEubm9kZS5wYXJlbnROb2RlJiZ3KGEubm9kZS5wYXJlbnROb2RlKXx8Yy5z ZWxlY3QoInN2ZyIpfHxjKDAsMCksZD1iLnNlbGVjdCgiZGVmcyIpLGU9bnVs bD09ZD8hMTpkLm5vZGU7cmV0dXJuIGV8fChlPXUoImRlZnMiLGIubm9kZSku bm9kZSksZX1mdW5jdGlvbiBwKGEpe3JldHVybiBhLm5vZGUub3duZXJTVkdF bGVtZW50JiZ3KGEubm9kZS5vd25lclNWR0VsZW1lbnQpfHxjLnNlbGVjdCgi c3ZnIil9ZnVuY3Rpb24gcShhLGIsYyl7ZnVuY3Rpb24gZShhKXtpZihudWxs PT1hKXJldHVybiBJO2lmKGE9PSthKXJldHVybiBhO2Qoaix7d2lkdGg6YX0p O3RyeXtyZXR1cm4gai5nZXRCQm94KCkud2lkdGh9Y2F0Y2goYil7cmV0dXJu IDB9fWZ1bmN0aW9uIGYoYSl7aWYobnVsbD09YSlyZXR1cm4gSTtpZihhPT0r YSlyZXR1cm4gYTtkKGose2hlaWdodDphfSk7dHJ5e3JldHVybiBqLmdldEJC b3goKS5oZWlnaHR9Y2F0Y2goYil7cmV0dXJuIDB9fWZ1bmN0aW9uIGcoZCxl KXtudWxsPT1iP2lbZF09ZShhLmF0dHIoZCl8fDApOmQ9PWImJihpPWUobnVs bD09Yz9hLmF0dHIoZCl8fDA6YykpfXZhciBoPXAoYSkubm9kZSxpPXt9LGo9 aC5xdWVyeVNlbGVjdG9yKCIuc3ZnLS0tbWdyIik7c3dpdGNoKGp8fChqPWQo InJlY3QiKSxkKGose3g6LTllOSx5Oi05ZTksd2lkdGg6MTAsaGVpZ2h0OjEw LCJjbGFzcyI6InN2Zy0tLW1nciIsZmlsbDoibm9uZSJ9KSxoLmFwcGVuZENo aWxkKGopKSxhLnR5cGUpe2Nhc2UicmVjdCI6ZygicngiLGUpLGcoInJ5Iixm KTtjYXNlImltYWdlIjpnKCJ3aWR0aCIsZSksZygiaGVpZ2h0IixmKTtjYXNl InRleHQiOmcoIngiLGUpLGcoInkiLGYpO2JyZWFrO2Nhc2UiY2lyY2xlIjpn KCJjeCIsZSksZygiY3kiLGYpLGcoInIiLGUpO2JyZWFrO2Nhc2UiZWxsaXBz ZSI6ZygiY3giLGUpLGcoImN5IixmKSxnKCJyeCIsZSksZygicnkiLGYpO2Jy ZWFrO2Nhc2UibGluZSI6ZygieDEiLGUpLGcoIngyIixlKSxnKCJ5MSIsZiks ZygieTIiLGYpO2JyZWFrO2Nhc2UibWFya2VyIjpnKCJyZWZYIixlKSxnKCJt YXJrZXJXaWR0aCIsZSksZygicmVmWSIsZiksZygibWFya2VySGVpZ2h0Iixm KTticmVhaztjYXNlInJhZGlhbEdyYWRpZW50IjpnKCJmeCIsZSksZygiZnki LGYpO2JyZWFrO2Nhc2UidHNwYW4iOmcoImR4IixlKSxnKCJkeSIsZik7YnJl YWs7ZGVmYXVsdDpnKGIsZSl9cmV0dXJuIGgucmVtb3ZlQ2hpbGQoaiksaX1m dW5jdGlvbiByKGEpe2UoYSwiYXJyYXkiKXx8KGE9QXJyYXkucHJvdG90eXBl LnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKTtmb3IodmFyIGI9MCxjPTAsZD10 aGlzLm5vZGU7dGhpc1tiXTspZGVsZXRlIHRoaXNbYisrXTtmb3IoYj0wO2I8 YS5sZW5ndGg7YisrKSJzZXQiPT1hW2JdLnR5cGU/YVtiXS5mb3JFYWNoKGZ1 bmN0aW9uKGEpe2QuYXBwZW5kQ2hpbGQoYS5ub2RlKX0pOmQuYXBwZW5kQ2hp bGQoYVtiXS5ub2RlKTt2YXIgZj1kLmNoaWxkTm9kZXM7Zm9yKGI9MDtiPGYu bGVuZ3RoO2IrKyl0aGlzW2MrK109dyhmW2JdKTtyZXR1cm4gdGhpc31mdW5j dGlvbiBzKGEpe2lmKGEuc25hcCBpbiBWKXJldHVybiBWW2Euc25hcF07dmFy IGI7dHJ5e2I9YS5vd25lclNWR0VsZW1lbnR9Y2F0Y2goYyl7fXRoaXMubm9k ZT1hLGImJih0aGlzLnBhcGVyPW5ldyB2KGIpKSx0aGlzLnR5cGU9YS50YWdO YW1lfHxhLm5vZGVOYW1lO3ZhciBkPXRoaXMuaWQ9Uyh0aGlzKTtpZih0aGlz LmFuaW1zPXt9LHRoaXMuXz17dHJhbnNmb3JtOltdfSxhLnNuYXA9ZCxWW2Rd PXRoaXMsImciPT10aGlzLnR5cGUmJih0aGlzLmFkZD1yKSx0aGlzLnR5cGUg aW57ZzoxLG1hc2s6MSxwYXR0ZXJuOjEsc3ltYm9sOjF9KWZvcih2YXIgZSBp biB2LnByb3RvdHlwZSl2LnByb3RvdHlwZVt6XShlKSYmKHRoaXNbZV09di5w cm90b3R5cGVbZV0pfWZ1bmN0aW9uIHQoYSl7dGhpcy5ub2RlPWF9ZnVuY3Rp b24gdShhLGIpe3ZhciBjPWQoYSk7Yi5hcHBlbmRDaGlsZChjKTt2YXIgZT13 KGMpO3JldHVybiBlfWZ1bmN0aW9uIHYoYSxiKXt2YXIgYyxlLGYsZz12LnBy b3RvdHlwZTtpZihhJiYic3ZnIj09YS50YWdOYW1lKXtpZihhLnNuYXAgaW4g VilyZXR1cm4gVlthLnNuYXBdO3ZhciBoPWEub3duZXJEb2N1bWVudDtjPW5l dyBzKGEpLGU9YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGVzYyIpWzBdLGY9 YS5nZXRFbGVtZW50c0J5VGFnTmFtZSgiZGVmcyIpWzBdLGV8fChlPWQoImRl c2MiKSxlLmFwcGVuZENoaWxkKGguY3JlYXRlVGV4dE5vZGUoIkNyZWF0ZWQg d2l0aCBTbmFwIikpLGMubm9kZS5hcHBlbmRDaGlsZChlKSksZnx8KGY9ZCgi ZGVmcyIpLGMubm9kZS5hcHBlbmRDaGlsZChmKSksYy5kZWZzPWY7Zm9yKHZh ciBpIGluIGcpZ1t6XShpKSYmKGNbaV09Z1tpXSk7Yy5wYXBlcj1jLnJvb3Q9 Y31lbHNlIGM9dSgic3ZnIix5LmRvYy5ib2R5KSxkKGMubm9kZSx7aGVpZ2h0 OmIsdmVyc2lvbjoxLjEsd2lkdGg6YSx4bWxuczpVfSk7cmV0dXJuIGN9ZnVu Y3Rpb24gdyhhKXtyZXR1cm4gYT9hIGluc3RhbmNlb2Ygc3x8YSBpbnN0YW5j ZW9mIHQ/YTphLnRhZ05hbWUmJiJzdmciPT1hLnRhZ05hbWUudG9Mb3dlckNh c2UoKT9uZXcgdihhKTphLnRhZ05hbWUmJiJvYmplY3QiPT1hLnRhZ05hbWUu dG9Mb3dlckNhc2UoKSYmImltYWdlL3N2Zyt4bWwiPT1hLnR5cGU/bmV3IHYo YS5jb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInN2ZyIp WzBdKTpuZXcgcyhhKTphfWZ1bmN0aW9uIHgoYSxiKXtmb3IodmFyIGM9MCxk PWEubGVuZ3RoO2Q+YztjKyspe3ZhciBlPXt0eXBlOmFbY10udHlwZSxhdHRy OmFbY10uYXR0cigpfSxmPWFbY10uY2hpbGRyZW4oKTtiLnB1c2goZSksZi5s ZW5ndGgmJngoZixlLmNoaWxkTm9kZXM9W10pfX1jLnZlcnNpb249IjAuNC4w IixjLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlNuYXAgdiIrdGhpcy52 ZXJzaW9ufSxjLl89e307dmFyIHk9e3dpbjphLndpbmRvdyxkb2M6YS53aW5k b3cuZG9jdW1lbnR9O2MuXy5nbG9iPXk7e3ZhciB6PSJoYXNPd25Qcm9wZXJ0 eSIsQT1TdHJpbmcsQj1wYXJzZUZsb2F0LEM9cGFyc2VJbnQsRD1NYXRoLEU9 RC5tYXgsRj1ELm1pbixHPUQuYWJzLEg9KEQucG93LEQuUEkpLEk9KEQucm91 bmQsIiIpLEo9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxLPS9eXHMqKCgj W2EtZlxkXXs2fSl8KCNbYS1mXGRdezN9KXxyZ2JhP1woXHMqKFtcZFwuXSsl P1xzKixccypbXGRcLl0rJT9ccyosXHMqW1xkXC5dKyU/KD86XHMqLFxzKltc ZFwuXSslPyk/KVxzKlwpfGhzYmE/XChccyooW1xkXC5dKyg/OmRlZ3xceGIw fCUpP1xzKixccypbXGRcLl0rJT9ccyosXHMqW1xkXC5dKyg/OiU/XHMqLFxz KltcZFwuXSspPyU/KVxzKlwpfGhzbGE/XChccyooW1xkXC5dKyg/OmRlZ3xc eGIwfCUpP1xzKixccypbXGRcLl0rJT9ccyosXHMqW1xkXC5dKyg/OiU/XHMq LFxzKltcZFwuXSspPyU/KVxzKlwpKVxzKiQvaSxMPShjLl8uc2VwYXJhdG9y PS9bLFxzXSsvLC9bXHNdKixbXHNdKi8pLE09e2hzOjEscmc6MX0sTj0vKFth LXpdKVtccyxdKigoLT9cZCpcLj9cZCooPzplW1wtK10/XGQrKT9bXHNdKiw/ W1xzXSopKykvZ2ksTz0vKFtyc3RtXSlbXHMsXSooKC0/XGQqXC4/XGQqKD86 ZVtcLStdP1xkKyk/W1xzXSosP1tcc10qKSspL2dpLFA9LygtP1xkKlwuP1xk Kig/OmVbXC0rXT9cXGQrKT8pW1xzXSosP1tcc10qL2dpLFE9MCxSPSJTIiso K25ldyBEYXRlKS50b1N0cmluZygzNiksUz1mdW5jdGlvbihhKXtyZXR1cm4o YSYmYS50eXBlP2EudHlwZTpJKStSKyhRKyspLnRvU3RyaW5nKDM2KX0sVD0i aHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsVT0iaHR0cDovL3d3dy53 My5vcmcvMjAwMC9zdmciLFY9e307Yy51cmw9ZnVuY3Rpb24oYSl7cmV0dXJu InVybCgnIyIrYSsiJykifX1jLl8uJD1kLGMuXy5pZD1TLGMuZm9ybWF0PWZ1 bmN0aW9uKCl7dmFyIGE9L1x7KFteXH1dKylcfS9nLGI9Lyg/Oig/Ol58XC4p KC4rPykoPz1cW3xcLnwkfFwoKXxcWygnfCIpKC4rPylcMlxdKShcKFwpKT8v ZyxjPWZ1bmN0aW9uKGEsYyxkKXt2YXIgZT1kO3JldHVybiBjLnJlcGxhY2Uo YixmdW5jdGlvbihhLGIsYyxkLGYpe2I9Ynx8ZCxlJiYoYiBpbiBlJiYoZT1l W2JdKSwiZnVuY3Rpb24iPT10eXBlb2YgZSYmZiYmKGU9ZSgpKSl9KSxlPShu dWxsPT1lfHxlPT1kP2E6ZSkrIiJ9O3JldHVybiBmdW5jdGlvbihiLGQpe3Jl dHVybiBBKGIpLnJlcGxhY2UoYSxmdW5jdGlvbihhLGIpe3JldHVybiBjKGEs YixkKX0pfX0oKSxjLl8uY2xvbmU9ZixjLl8uY2FjaGVyPWksYy5yYWQ9ayxj LmRlZz1sLGMuc2luPWZ1bmN0aW9uKGEpe3JldHVybiBELnNpbihjLnJhZChh KSl9LGMudGFuPWZ1bmN0aW9uKGEpe3JldHVybiBELnRhbihjLnJhZChhKSl9 LGMuY29zPWZ1bmN0aW9uKGEpe3JldHVybiBELmNvcyhjLnJhZChhKSl9LGMu YXNpbj1mdW5jdGlvbihhKXtyZXR1cm4gYy5kZWcoRC5hc2luKGEpKX0sYy5h Y29zPWZ1bmN0aW9uKGEpe3JldHVybiBjLmRlZyhELmFjb3MoYSkpfSxjLmF0 YW49ZnVuY3Rpb24oYSl7cmV0dXJuIGMuZGVnKEQuYXRhbihhKSl9LGMuYXRh bjI9ZnVuY3Rpb24oYSl7cmV0dXJuIGMuZGVnKEQuYXRhbjIoYSkpfSxjLmFu Z2xlPWosYy5sZW49ZnVuY3Rpb24oYSxiLGQsZSl7cmV0dXJuIE1hdGguc3Fy dChjLmxlbjIoYSxiLGQsZSkpfSxjLmxlbjI9ZnVuY3Rpb24oYSxiLGMsZCl7 cmV0dXJuKGEtYykqKGEtYykrKGItZCkqKGItZCl9LGMuY2xvc2VzdFBvaW50 PWZ1bmN0aW9uKGEsYixjKXtmdW5jdGlvbiBkKGEpe3ZhciBkPWEueC1iLGU9 YS55LWM7cmV0dXJuIGQqZCtlKmV9Zm9yKHZhciBlLGYsZyxoLGk9YS5ub2Rl LGo9aS5nZXRUb3RhbExlbmd0aCgpLGs9ai9pLnBhdGhTZWdMaXN0Lm51bWJl ck9mSXRlbXMqLjEyNSxsPTEvMCxtPTA7aj49bTttKz1rKShoPWQoZz1pLmdl dFBvaW50QXRMZW5ndGgobSkpKTxsJiYoZT1nLGY9bSxsPWgpO2ZvcihrKj0u NTtrPi41Oyl7dmFyIG4sbyxwLHEscixzOyhwPWYtayk+PTAmJihyPWQobj1p LmdldFBvaW50QXRMZW5ndGgocCkpKTxsPyhlPW4sZj1wLGw9cik6KHE9Zitr KTw9aiYmKHM9ZChvPWkuZ2V0UG9pbnRBdExlbmd0aChxKSkpPGw/KGU9byxm PXEsbD1zKTprKj0uNX1yZXR1cm4gZT17eDplLngseTplLnksbGVuZ3RoOmYs ZGlzdGFuY2U6TWF0aC5zcXJ0KGwpfX0sYy5pcz1lLGMuc25hcFRvPWZ1bmN0 aW9uKGEsYixjKXtpZihjPWUoYywiZmluaXRlIik/YzoxMCxlKGEsImFycmF5 Iikpe2Zvcih2YXIgZD1hLmxlbmd0aDtkLS07KWlmKEcoYVtkXS1iKTw9Yyly ZXR1cm4gYVtkXX1lbHNle2E9K2E7dmFyIGY9YiVhO2lmKGM+ZilyZXR1cm4g Yi1mO2lmKGY+YS1jKXJldHVybiBiLWYrYX1yZXR1cm4gYn0sYy5nZXRSR0I9 aShmdW5jdGlvbihhKXtpZighYXx8KGE9QShhKSkuaW5kZXhPZigiLSIpKzEp cmV0dXJue3I6LTEsZzotMSxiOi0xLGhleDoibm9uZSIsZXJyb3I6MSx0b1N0 cmluZzpafTtpZigibm9uZSI9PWEpcmV0dXJue3I6LTEsZzotMSxiOi0xLGhl eDoibm9uZSIsdG9TdHJpbmc6Wn07aWYoIShNW3pdKGEudG9Mb3dlckNhc2Uo KS5zdWJzdHJpbmcoMCwyKSl8fCIjIj09YS5jaGFyQXQoKSkmJihhPVcoYSkp LCFhKXJldHVybntyOi0xLGc6LTEsYjotMSxoZXg6Im5vbmUiLGVycm9yOjEs dG9TdHJpbmc6Wn07dmFyIGIsZCxmLGcsaCxpLGo9YS5tYXRjaChLKTtyZXR1 cm4gaj8oalsyXSYmKGY9QyhqWzJdLnN1YnN0cmluZyg1KSwxNiksZD1DKGpb Ml0uc3Vic3RyaW5nKDMsNSksMTYpLGI9QyhqWzJdLnN1YnN0cmluZygxLDMp LDE2KSksalszXSYmKGY9QygoaD1qWzNdLmNoYXJBdCgzKSkraCwxNiksZD1D KChoPWpbM10uY2hhckF0KDIpKStoLDE2KSxiPUMoKGg9alszXS5jaGFyQXQo MSkpK2gsMTYpKSxqWzRdJiYoaT1qWzRdLnNwbGl0KEwpLGI9QihpWzBdKSwi JSI9PWlbMF0uc2xpY2UoLTEpJiYoYio9Mi41NSksZD1CKGlbMV0pLCIlIj09 aVsxXS5zbGljZSgtMSkmJihkKj0yLjU1KSxmPUIoaVsyXSksIiUiPT1pWzJd LnNsaWNlKC0xKSYmKGYqPTIuNTUpLCJyZ2JhIj09alsxXS50b0xvd2VyQ2Fz ZSgpLnNsaWNlKDAsNCkmJihnPUIoaVszXSkpLGlbM10mJiIlIj09aVszXS5z bGljZSgtMSkmJihnLz0xMDApKSxqWzVdPyhpPWpbNV0uc3BsaXQoTCksYj1C KGlbMF0pLCIlIj09aVswXS5zbGljZSgtMSkmJihiLz0xMDApLGQ9QihpWzFd KSwiJSI9PWlbMV0uc2xpY2UoLTEpJiYoZC89MTAwKSxmPUIoaVsyXSksIiUi PT1pWzJdLnNsaWNlKC0xKSYmKGYvPTEwMCksKCJkZWciPT1pWzBdLnNsaWNl KC0zKXx8IsKwIj09aVswXS5zbGljZSgtMSkpJiYoYi89MzYwKSwiaHNiYSI9 PWpbMV0udG9Mb3dlckNhc2UoKS5zbGljZSgwLDQpJiYoZz1CKGlbM10pKSxp WzNdJiYiJSI9PWlbM10uc2xpY2UoLTEpJiYoZy89MTAwKSxjLmhzYjJyZ2Io YixkLGYsZykpOmpbNl0/KGk9als2XS5zcGxpdChMKSxiPUIoaVswXSksIiUi PT1pWzBdLnNsaWNlKC0xKSYmKGIvPTEwMCksZD1CKGlbMV0pLCIlIj09aVsx XS5zbGljZSgtMSkmJihkLz0xMDApLGY9QihpWzJdKSwiJSI9PWlbMl0uc2xp Y2UoLTEpJiYoZi89MTAwKSwoImRlZyI9PWlbMF0uc2xpY2UoLTMpfHwiwrAi PT1pWzBdLnNsaWNlKC0xKSkmJihiLz0zNjApLCJoc2xhIj09alsxXS50b0xv d2VyQ2FzZSgpLnNsaWNlKDAsNCkmJihnPUIoaVszXSkpLGlbM10mJiIlIj09 aVszXS5zbGljZSgtMSkmJihnLz0xMDApLGMuaHNsMnJnYihiLGQsZixnKSk6 KGI9RihELnJvdW5kKGIpLDI1NSksZD1GKEQucm91bmQoZCksMjU1KSxmPUYo RC5yb3VuZChmKSwyNTUpLGc9RihFKGcsMCksMSksaj17cjpiLGc6ZCxiOmYs dG9TdHJpbmc6Wn0sai5oZXg9IiMiKygxNjc3NzIxNnxmfGQ8PDh8Yjw8MTYp LnRvU3RyaW5nKDE2KS5zbGljZSgxKSxqLm9wYWNpdHk9ZShnLCJmaW5pdGUi KT9nOjEsaikpOntyOi0xLGc6LTEsYjotMSxoZXg6Im5vbmUiLGVycm9yOjEs dG9TdHJpbmc6Wn19LGMpLGMuaHNiPWkoZnVuY3Rpb24oYSxiLGQpe3JldHVy biBjLmhzYjJyZ2IoYSxiLGQpLmhleH0pLGMuaHNsPWkoZnVuY3Rpb24oYSxi LGQpe3JldHVybiBjLmhzbDJyZ2IoYSxiLGQpLmhleH0pLGMucmdiPWkoZnVu Y3Rpb24oYSxiLGMsZCl7aWYoZShkLCJmaW5pdGUiKSl7dmFyIGY9RC5yb3Vu ZDtyZXR1cm4icmdiYSgiK1tmKGEpLGYoYiksZihjKSwrZC50b0ZpeGVkKDIp XSsiKSJ9cmV0dXJuIiMiKygxNjc3NzIxNnxjfGI8PDh8YTw8MTYpLnRvU3Ry aW5nKDE2KS5zbGljZSgxKX0pO3ZhciBXPWZ1bmN0aW9uKGEpe3ZhciBiPXku ZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIilbMF18fHkuZG9jLmdl dEVsZW1lbnRzQnlUYWdOYW1lKCJzdmciKVswXSxjPSJyZ2IoMjU1LCAwLCAw KSI7cmV0dXJuKFc9aShmdW5jdGlvbihhKXtpZigicmVkIj09YS50b0xvd2Vy Q2FzZSgpKXJldHVybiBjO2Iuc3R5bGUuY29sb3I9YyxiLnN0eWxlLmNvbG9y PWE7dmFyIGQ9eS5kb2MuZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZShi LEkpLmdldFByb3BlcnR5VmFsdWUoImNvbG9yIik7cmV0dXJuIGQ9PWM/bnVs bDpkfSkpKGEpfSxYPWZ1bmN0aW9uKCl7cmV0dXJuImhzYigiK1t0aGlzLmgs dGhpcy5zLHRoaXMuYl0rIikifSxZPWZ1bmN0aW9uKCl7cmV0dXJuImhzbCgi K1t0aGlzLmgsdGhpcy5zLHRoaXMubF0rIikifSxaPWZ1bmN0aW9uKCl7cmV0 dXJuIDE9PXRoaXMub3BhY2l0eXx8bnVsbD09dGhpcy5vcGFjaXR5P3RoaXMu aGV4OiJyZ2JhKCIrW3RoaXMucix0aGlzLmcsdGhpcy5iLHRoaXMub3BhY2l0 eV0rIikifSwkPWZ1bmN0aW9uKGEsYixkKXtpZihudWxsPT1iJiZlKGEsIm9i amVjdCIpJiYiciJpbiBhJiYiZyJpbiBhJiYiYiJpbiBhJiYoZD1hLmIsYj1h LmcsYT1hLnIpLG51bGw9PWImJmUoYSxzdHJpbmcpKXt2YXIgZj1jLmdldFJH QihhKTthPWYucixiPWYuZyxkPWYuYn1yZXR1cm4oYT4xfHxiPjF8fGQ+MSkm JihhLz0yNTUsYi89MjU1LGQvPTI1NSksW2EsYixkXX0sXz1mdW5jdGlvbihh LGIsZCxmKXthPUQucm91bmQoMjU1KmEpLGI9RC5yb3VuZCgyNTUqYiksZD1E LnJvdW5kKDI1NSpkKTt2YXIgZz17cjphLGc6YixiOmQsb3BhY2l0eTplKGYs ImZpbml0ZSIpP2Y6MSxoZXg6Yy5yZ2IoYSxiLGQpLHRvU3RyaW5nOlp9O3Jl dHVybiBlKGYsImZpbml0ZSIpJiYoZy5vcGFjaXR5PWYpLGd9O2MuY29sb3I9 ZnVuY3Rpb24oYSl7dmFyIGI7cmV0dXJuIGUoYSwib2JqZWN0IikmJiJoImlu IGEmJiJzImluIGEmJiJiImluIGE/KGI9Yy5oc2IycmdiKGEpLGEucj1iLnIs YS5nPWIuZyxhLmI9Yi5iLGEub3BhY2l0eT0xLGEuaGV4PWIuaGV4KTplKGEs Im9iamVjdCIpJiYiaCJpbiBhJiYicyJpbiBhJiYibCJpbiBhPyhiPWMuaHNs MnJnYihhKSxhLnI9Yi5yLGEuZz1iLmcsYS5iPWIuYixhLm9wYWNpdHk9MSxh LmhleD1iLmhleCk6KGUoYSwic3RyaW5nIikmJihhPWMuZ2V0UkdCKGEpKSxl KGEsIm9iamVjdCIpJiYiciJpbiBhJiYiZyJpbiBhJiYiYiJpbiBhJiYhKCJl cnJvciJpbiBhKT8oYj1jLnJnYjJoc2woYSksYS5oPWIuaCxhLnM9Yi5zLGEu bD1iLmwsYj1jLnJnYjJoc2IoYSksYS52PWIuYik6KGE9e2hleDoibm9uZSJ9 LGEucj1hLmc9YS5iPWEuaD1hLnM9YS52PWEubD0tMSxhLmVycm9yPTEpKSxh LnRvU3RyaW5nPVosYX0sYy5oc2IycmdiPWZ1bmN0aW9uKGEsYixjLGQpe2Uo YSwib2JqZWN0IikmJiJoImluIGEmJiJzImluIGEmJiJiImluIGEmJihjPWEu YixiPWEucyxkPWEubyxhPWEuaCksYSo9MzYwO3ZhciBmLGcsaCxpLGo7cmV0 dXJuIGE9YSUzNjAvNjAsaj1jKmIsaT1qKigxLUcoYSUyLTEpKSxmPWc9aD1j LWosYT1+fmEsZis9W2osaSwwLDAsaSxqXVthXSxnKz1baSxqLGosaSwwLDBd W2FdLGgrPVswLDAsaSxqLGosaV1bYV0sXyhmLGcsaCxkKX0sYy5oc2wycmdi PWZ1bmN0aW9uKGEsYixjLGQpe2UoYSwib2JqZWN0IikmJiJoImluIGEmJiJz ImluIGEmJiJsImluIGEmJihjPWEubCxiPWEucyxhPWEuaCksKGE+MXx8Yj4x fHxjPjEpJiYoYS89MzYwLGIvPTEwMCxjLz0xMDApLGEqPTM2MDt2YXIgZixn LGgsaSxqO3JldHVybiBhPWElMzYwLzYwLGo9MipiKiguNT5jP2M6MS1jKSxp PWoqKDEtRyhhJTItMSkpLGY9Zz1oPWMtai8yLGE9fn5hLGYrPVtqLGksMCww LGksal1bYV0sZys9W2ksaixqLGksMCwwXVthXSxoKz1bMCwwLGksaixqLGld W2FdLF8oZixnLGgsZCl9LGMucmdiMmhzYj1mdW5jdGlvbihhLGIsYyl7Yz0k KGEsYixjKSxhPWNbMF0sYj1jWzFdLGM9Y1syXTt2YXIgZCxlLGYsZztyZXR1 cm4gZj1FKGEsYixjKSxnPWYtRihhLGIsYyksZD0wPT1nP251bGw6Zj09YT8o Yi1jKS9nOmY9PWI/KGMtYSkvZysyOihhLWIpL2crNCxkPShkKzM2MCklNio2 MC8zNjAsZT0wPT1nPzA6Zy9mLHtoOmQsczplLGI6Zix0b1N0cmluZzpYfX0s Yy5yZ2IyaHNsPWZ1bmN0aW9uKGEsYixjKXtjPSQoYSxiLGMpLGE9Y1swXSxi PWNbMV0sYz1jWzJdO3ZhciBkLGUsZixnLGgsaTtyZXR1cm4gZz1FKGEsYixj KSxoPUYoYSxiLGMpLGk9Zy1oLGQ9MD09aT9udWxsOmc9PWE/KGItYykvaTpn PT1iPyhjLWEpL2krMjooYS1iKS9pKzQsZD0oZCszNjApJTYqNjAvMzYwLGY9 KGcraCkvMixlPTA9PWk/MDouNT5mP2kvKDIqZik6aS8oMi0yKmYpLHtoOmQs czplLGw6Zix0b1N0cmluZzpZfX0sYy5wYXJzZVBhdGhTdHJpbmc9ZnVuY3Rp b24oYSl7aWYoIWEpcmV0dXJuIG51bGw7dmFyIGI9Yy5wYXRoKGEpO2lmKGIu YXJyKXJldHVybiBjLnBhdGguY2xvbmUoYi5hcnIpO3ZhciBkPXthOjcsYzo2 LG86MixoOjEsbDoyLG06MixyOjQscTo0LHM6NCx0OjIsdjoxLHU6Myx6OjB9 LGY9W107cmV0dXJuIGUoYSwiYXJyYXkiKSYmZShhWzBdLCJhcnJheSIpJiYo Zj1jLnBhdGguY2xvbmUoYSkpLGYubGVuZ3RofHxBKGEpLnJlcGxhY2UoTixm dW5jdGlvbihhLGIsYyl7dmFyIGU9W10sZz1iLnRvTG93ZXJDYXNlKCk7aWYo Yy5yZXBsYWNlKFAsZnVuY3Rpb24oYSxiKXtiJiZlLnB1c2goK2IpfSksIm0i PT1nJiZlLmxlbmd0aD4yJiYoZi5wdXNoKFtiXS5jb25jYXQoZS5zcGxpY2Uo MCwyKSkpLGc9ImwiLGI9Im0iPT1iPyJsIjoiTCIpLCJvIj09ZyYmMT09ZS5s ZW5ndGgmJmYucHVzaChbYixlWzBdXSksInIiPT1nKWYucHVzaChbYl0uY29u Y2F0KGUpKTtlbHNlIGZvcig7ZS5sZW5ndGg+PWRbZ10mJihmLnB1c2goW2Jd LmNvbmNhdChlLnNwbGljZSgwLGRbZ10pKSksZFtnXSk7KTt9KSxmLnRvU3Ry aW5nPWMucGF0aC50b1N0cmluZyxiLmFycj1jLnBhdGguY2xvbmUoZiksZn07 dmFyIGFiPWMucGFyc2VUcmFuc2Zvcm1TdHJpbmc9ZnVuY3Rpb24oYSl7aWYo IWEpcmV0dXJuIG51bGw7dmFyIGI9W107cmV0dXJuIGUoYSwiYXJyYXkiKSYm ZShhWzBdLCJhcnJheSIpJiYoYj1jLnBhdGguY2xvbmUoYSkpLGIubGVuZ3Ro fHxBKGEpLnJlcGxhY2UoTyxmdW5jdGlvbihhLGMsZCl7e3ZhciBlPVtdO2Mu dG9Mb3dlckNhc2UoKX1kLnJlcGxhY2UoUCxmdW5jdGlvbihhLGIpe2ImJmUu cHVzaCgrYil9KSxiLnB1c2goW2NdLmNvbmNhdChlKSl9KSxiLnRvU3RyaW5n PWMucGF0aC50b1N0cmluZyxifTtjLl8uc3ZnVHJhbnNmb3JtMnN0cmluZz1t LGMuXy5yZ1RyYW5zZm9ybT0vXlthLXpdW1xzXSotP1wuP1xkL2ksYy5fLnRy YW5zZm9ybTJtYXRyaXg9bixjLl91bml0MnB4PXE7eS5kb2MuY29udGFpbnN8 fHkuZG9jLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uP2Z1bmN0aW9uKGEsYil7 dmFyIGM9OT09YS5ub2RlVHlwZT9hLmRvY3VtZW50RWxlbWVudDphLGQ9YiYm Yi5wYXJlbnROb2RlO3JldHVybiBhPT1kfHwhKCFkfHwxIT1kLm5vZGVUeXBl fHwhKGMuY29udGFpbnM/Yy5jb250YWlucyhkKTphLmNvbXBhcmVEb2N1bWVu dFBvc2l0aW9uJiYxNiZhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGQpKSl9 OmZ1bmN0aW9uKGEsYil7aWYoYilmb3IoO2I7KWlmKGI9Yi5wYXJlbnROb2Rl LGI9PWEpcmV0dXJuITA7cmV0dXJuITF9O2MuXy5nZXRTb21lRGVmcz1vLGMu Xy5nZXRTb21lU1ZHPXAsYy5zZWxlY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9 QShhKS5yZXBsYWNlKC8oW15cXF0pOi9nLCIkMVxcOiIpLHcoeS5kb2MucXVl cnlTZWxlY3RvcihhKSl9LGMuc2VsZWN0QWxsPWZ1bmN0aW9uKGEpe2Zvcih2 YXIgYj15LmRvYy5xdWVyeVNlbGVjdG9yQWxsKGEpLGQ9KGMuc2V0fHxBcnJh eSkoKSxlPTA7ZTxiLmxlbmd0aDtlKyspZC5wdXNoKHcoYltlXSkpO3JldHVy biBkfSxzZXRJbnRlcnZhbChmdW5jdGlvbigpe2Zvcih2YXIgYSBpbiBWKWlm KFZbel0oYSkpe3ZhciBiPVZbYV0sYz1iLm5vZGU7KCJzdmciIT1iLnR5cGUm JiFjLm93bmVyU1ZHRWxlbWVudHx8InN2ZyI9PWIudHlwZSYmKCFjLnBhcmVu dE5vZGV8fCJvd25lclNWR0VsZW1lbnQiaW4gYy5wYXJlbnROb2RlJiYhYy5v d25lclNWR0VsZW1lbnQpKSYmZGVsZXRlIFZbYV19fSwxZTQpLHMucHJvdG90 eXBlLmF0dHI9ZnVuY3Rpb24oYSxjKXt2YXIgZD10aGlzLGY9ZC5ub2RlO2lm KCFhKXtpZigxIT1mLm5vZGVUeXBlKXJldHVybnt0ZXh0OmYubm9kZVZhbHVl fTtmb3IodmFyIGc9Zi5hdHRyaWJ1dGVzLGg9e30saT0wLGo9Zy5sZW5ndGg7 aj5pO2krKyloW2dbaV0ubm9kZU5hbWVdPWdbaV0ubm9kZVZhbHVlO3JldHVy biBofWlmKGUoYSwic3RyaW5nIikpe2lmKCEoYXJndW1lbnRzLmxlbmd0aD4x KSlyZXR1cm4gYigic25hcC51dGlsLmdldGF0dHIuIithLGQpLmZpcnN0RGVm aW5lZCgpO3ZhciBrPXt9O2tbYV09YyxhPWt9Zm9yKHZhciBsIGluIGEpYVt6 XShsKSYmYigic25hcC51dGlsLmF0dHIuIitsLGQsYVtsXSk7cmV0dXJuIGR9 LGMucGFyc2U9ZnVuY3Rpb24oYSl7dmFyIGI9eS5kb2MuY3JlYXRlRG9jdW1l bnRGcmFnbWVudCgpLGM9ITAsZD15LmRvYy5jcmVhdGVFbGVtZW50KCJkaXYi KTtpZihhPUEoYSksYS5tYXRjaCgvXlxzKjxccypzdmcoPzpcc3w+KS8pfHwo YT0iPHN2Zz4iK2ErIjwvc3ZnPiIsYz0hMSksZC5pbm5lckhUTUw9YSxhPWQu Z2V0RWxlbWVudHNCeVRhZ05hbWUoInN2ZyIpWzBdKWlmKGMpYj1hO2Vsc2Ug Zm9yKDthLmZpcnN0Q2hpbGQ7KWIuYXBwZW5kQ2hpbGQoYS5maXJzdENoaWxk KTtyZXR1cm4gbmV3IHQoYil9LGMuZnJhZ21lbnQ9ZnVuY3Rpb24oKXtmb3Io dmFyIGE9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDAp LGI9eS5kb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLGQ9MCxlPWEubGVu Z3RoO2U+ZDtkKyspe3ZhciBmPWFbZF07Zi5ub2RlJiZmLm5vZGUubm9kZVR5 cGUmJmIuYXBwZW5kQ2hpbGQoZi5ub2RlKSxmLm5vZGVUeXBlJiZiLmFwcGVu ZENoaWxkKGYpLCJzdHJpbmciPT10eXBlb2YgZiYmYi5hcHBlbmRDaGlsZChj LnBhcnNlKGYpLm5vZGUpfXJldHVybiBuZXcgdChiKX0sYy5fLm1ha2U9dSxj Ll8ud3JhcD13LHYucHJvdG90eXBlLmVsPWZ1bmN0aW9uKGEsYil7dmFyIGM9 dShhLHRoaXMubm9kZSk7cmV0dXJuIGImJmMuYXR0cihiKSxjfSxzLnByb3Rv dHlwZS5jaGlsZHJlbj1mdW5jdGlvbigpe2Zvcih2YXIgYT1bXSxiPXRoaXMu bm9kZS5jaGlsZE5vZGVzLGQ9MCxlPWIubGVuZ3RoO2U+ZDtkKyspYVtkXT1j KGJbZF0pO3JldHVybiBhfSxzLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24o KXt2YXIgYT1bXTtyZXR1cm4geChbdGhpc10sYSksYVswXX0sYi5vbigic25h cC51dGlsLmdldGF0dHIiLGZ1bmN0aW9uKCl7dmFyIGE9Yi5udCgpO2E9YS5z dWJzdHJpbmcoYS5sYXN0SW5kZXhPZigiLiIpKzEpO3ZhciBjPWEucmVwbGFj ZSgvW0EtWl0vZyxmdW5jdGlvbihhKXtyZXR1cm4iLSIrYS50b0xvd2VyQ2Fz ZSgpfSk7cmV0dXJuIGJiW3pdKGMpP3RoaXMubm9kZS5vd25lckRvY3VtZW50 LmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcy5ub2RlLG51bGwp LmdldFByb3BlcnR5VmFsdWUoYyk6ZCh0aGlzLm5vZGUsYSl9KTt2YXIgYmI9 eyJhbGlnbm1lbnQtYmFzZWxpbmUiOjAsImJhc2VsaW5lLXNoaWZ0IjowLGNs aXA6MCwiY2xpcC1wYXRoIjowLCJjbGlwLXJ1bGUiOjAsY29sb3I6MCwiY29s b3ItaW50ZXJwb2xhdGlvbiI6MCwiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0 ZXJzIjowLCJjb2xvci1wcm9maWxlIjowLCJjb2xvci1yZW5kZXJpbmciOjAs Y3Vyc29yOjAsZGlyZWN0aW9uOjAsZGlzcGxheTowLCJkb21pbmFudC1iYXNl bGluZSI6MCwiZW5hYmxlLWJhY2tncm91bmQiOjAsZmlsbDowLCJmaWxsLW9w YWNpdHkiOjAsImZpbGwtcnVsZSI6MCxmaWx0ZXI6MCwiZmxvb2QtY29sb3Ii OjAsImZsb29kLW9wYWNpdHkiOjAsZm9udDowLCJmb250LWZhbWlseSI6MCwi Zm9udC1zaXplIjowLCJmb250LXNpemUtYWRqdXN0IjowLCJmb250LXN0cmV0 Y2giOjAsImZvbnQtc3R5bGUiOjAsImZvbnQtdmFyaWFudCI6MCwiZm9udC13 ZWlnaHQiOjAsImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwiOjAsImds eXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIjowLCJpbWFnZS1yZW5kZXJpbmci OjAsa2VybmluZzowLCJsZXR0ZXItc3BhY2luZyI6MCwibGlnaHRpbmctY29s b3IiOjAsbWFya2VyOjAsIm1hcmtlci1lbmQiOjAsIm1hcmtlci1taWQiOjAs Im1hcmtlci1zdGFydCI6MCxtYXNrOjAsb3BhY2l0eTowLG92ZXJmbG93OjAs InBvaW50ZXItZXZlbnRzIjowLCJzaGFwZS1yZW5kZXJpbmciOjAsInN0b3At Y29sb3IiOjAsInN0b3Atb3BhY2l0eSI6MCxzdHJva2U6MCwic3Ryb2tlLWRh c2hhcnJheSI6MCwic3Ryb2tlLWRhc2hvZmZzZXQiOjAsInN0cm9rZS1saW5l Y2FwIjowLCJzdHJva2UtbGluZWpvaW4iOjAsInN0cm9rZS1taXRlcmxpbWl0 IjowLCJzdHJva2Utb3BhY2l0eSI6MCwic3Ryb2tlLXdpZHRoIjowLCJ0ZXh0 LWFuY2hvciI6MCwidGV4dC1kZWNvcmF0aW9uIjowLCJ0ZXh0LXJlbmRlcmlu ZyI6MCwidW5pY29kZS1iaWRpIjowLHZpc2liaWxpdHk6MCwid29yZC1zcGFj aW5nIjowLCJ3cml0aW5nLW1vZGUiOjB9O2Iub24oInNuYXAudXRpbC5hdHRy IixmdW5jdGlvbihhKXt2YXIgYz1iLm50KCksZT17fTtjPWMuc3Vic3RyaW5n KGMubGFzdEluZGV4T2YoIi4iKSsxKSxlW2NdPWE7dmFyIGY9Yy5yZXBsYWNl KC8tKFx3KS9naSxmdW5jdGlvbihhLGIpe3JldHVybiBiLnRvVXBwZXJDYXNl KCl9KSxnPWMucmVwbGFjZSgvW0EtWl0vZyxmdW5jdGlvbihhKXtyZXR1cm4i LSIrYS50b0xvd2VyQ2FzZSgpfSk7YmJbel0oZyk/dGhpcy5ub2RlLnN0eWxl W2ZdPW51bGw9PWE/STphOmQodGhpcy5ub2RlLGUpfSksZnVuY3Rpb24oKXt9 KHYucHJvdG90eXBlKSxjLmFqYXg9ZnVuY3Rpb24oYSxjLGQsZil7dmFyIGc9 bmV3IFhNTEh0dHBSZXF1ZXN0LGg9UygpO2lmKGcpe2lmKGUoYywiZnVuY3Rp b24iKSlmPWQsZD1jLGM9bnVsbDtlbHNlIGlmKGUoYywib2JqZWN0Iikpe3Zh ciBpPVtdO2Zvcih2YXIgaiBpbiBjKWMuaGFzT3duUHJvcGVydHkoaikmJmku cHVzaChlbmNvZGVVUklDb21wb25lbnQoaikrIj0iK2VuY29kZVVSSUNvbXBv bmVudChjW2pdKSk7Yz1pLmpvaW4oIiYiKX1yZXR1cm4gZy5vcGVuKGM/IlBP U1QiOiJHRVQiLGEsITApLGMmJihnLnNldFJlcXVlc3RIZWFkZXIoIlgtUmVx dWVzdGVkLVdpdGgiLCJYTUxIdHRwUmVxdWVzdCIpLGcuc2V0UmVxdWVzdEhl YWRlcigiQ29udGVudC10eXBlIiwiYXBwbGljYXRpb24veC13d3ctZm9ybS11 cmxlbmNvZGVkIikpLGQmJihiLm9uY2UoInNuYXAuYWpheC4iK2grIi4wIixk KSxiLm9uY2UoInNuYXAuYWpheC4iK2grIi4yMDAiLGQpLGIub25jZSgic25h cC5hamF4LiIraCsiLjMwNCIsZCkpLGcub25yZWFkeXN0YXRlY2hhbmdlPWZ1 bmN0aW9uKCl7ND09Zy5yZWFkeVN0YXRlJiZiKCJzbmFwLmFqYXguIitoKyIu IitnLnN0YXR1cyxmLGcpfSw0PT1nLnJlYWR5U3RhdGU/ZzooZy5zZW5kKGMp LGcpfX0sYy5sb2FkPWZ1bmN0aW9uKGEsYixkKXtjLmFqYXgoYSxmdW5jdGlv bihhKXt2YXIgZT1jLnBhcnNlKGEucmVzcG9uc2VUZXh0KTtkP2IuY2FsbChk LGUpOmIoZSl9KX07dmFyIGNiPWZ1bmN0aW9uKGEpe3ZhciBiPWEuZ2V0Qm91 bmRpbmdDbGllbnRSZWN0KCksYz1hLm93bmVyRG9jdW1lbnQsZD1jLmJvZHks ZT1jLmRvY3VtZW50RWxlbWVudCxmPWUuY2xpZW50VG9wfHxkLmNsaWVudFRv cHx8MCxoPWUuY2xpZW50TGVmdHx8ZC5jbGllbnRMZWZ0fHwwLGk9Yi50b3Ar KGcud2luLnBhZ2VZT2Zmc2V0fHxlLnNjcm9sbFRvcHx8ZC5zY3JvbGxUb3Ap LWYsaj1iLmxlZnQrKGcud2luLnBhZ2VYT2Zmc2V0fHxlLnNjcm9sbExlZnR8 fGQuc2Nyb2xsTGVmdCktaDtyZXR1cm57eTppLHg6an19O3JldHVybiBjLmdl dEVsZW1lbnRCeVBvaW50PWZ1bmN0aW9uKGEsYil7dmFyIGM9dGhpcyxkPShj LmNhbnZhcyx5LmRvYy5lbGVtZW50RnJvbVBvaW50KGEsYikpO2lmKHkud2lu Lm9wZXJhJiYic3ZnIj09ZC50YWdOYW1lKXt2YXIgZT1jYihkKSxmPWQuY3Jl YXRlU1ZHUmVjdCgpO2YueD1hLWUueCxmLnk9Yi1lLnksZi53aWR0aD1mLmhl aWdodD0xO3ZhciBnPWQuZ2V0SW50ZXJzZWN0aW9uTGlzdChmLG51bGwpO2cu bGVuZ3RoJiYoZD1nW2cubGVuZ3RoLTFdKX1yZXR1cm4gZD93KGQpOm51bGx9 LGMucGx1Z2luPWZ1bmN0aW9uKGEpe2EoYyxzLHYseSx0KX0seS53aW4uU25h cD1jLGN9KGF8fHRoaXMpO3JldHVybiBkLnBsdWdpbihmdW5jdGlvbihkLGUs ZixnLGgpe2Z1bmN0aW9uIGkoYSxiKXtpZihudWxsPT1iKXt2YXIgYz0hMDtp ZihiPWEubm9kZS5nZXRBdHRyaWJ1dGUoImxpbmVhckdyYWRpZW50Ij09YS50 eXBlfHwicmFkaWFsR3JhZGllbnQiPT1hLnR5cGU/ImdyYWRpZW50VHJhbnNm b3JtIjoicGF0dGVybiI9PWEudHlwZT8icGF0dGVyblRyYW5zZm9ybSI6InRy YW5zZm9ybSIpLCFiKXJldHVybiBuZXcgZC5NYXRyaXg7Yj1kLl8uc3ZnVHJh bnNmb3JtMnN0cmluZyhiKX1lbHNlIGI9ZC5fLnJnVHJhbnNmb3JtLnRlc3Qo Yik/byhiKS5yZXBsYWNlKC9cLnszfXxcdTIwMjYvZyxhLl8udHJhbnNmb3Jt fHwiIik6ZC5fLnN2Z1RyYW5zZm9ybTJzdHJpbmcoYiksbihiLCJhcnJheSIp JiYoYj1kLnBhdGg/ZC5wYXRoLnRvU3RyaW5nLmNhbGwoYik6byhiKSksYS5f LnRyYW5zZm9ybT1iO3ZhciBlPWQuXy50cmFuc2Zvcm0ybWF0cml4KGIsYS5n ZXRCQm94KDEpKTtyZXR1cm4gYz9lOnZvaWQoYS5tYXRyaXg9ZSl9ZnVuY3Rp b24gaihhKXtmdW5jdGlvbiBiKGEsYil7dmFyIGM9cShhLm5vZGUsYik7Yz1j JiZjLm1hdGNoKGYpLGM9YyYmY1syXSxjJiYiIyI9PWMuY2hhckF0KCkmJihj PWMuc3Vic3RyaW5nKDEpLGMmJihoW2NdPShoW2NdfHxbXSkuY29uY2F0KGZ1 bmN0aW9uKGMpe3ZhciBkPXt9O2RbYl09VVJMKGMpLHEoYS5ub2RlLGQpfSkp KX1mdW5jdGlvbiBjKGEpe3ZhciBiPXEoYS5ub2RlLCJ4bGluazpocmVmIik7 YiYmIiMiPT1iLmNoYXJBdCgpJiYoYj1iLnN1YnN0cmluZygxKSxiJiYoaFti XT0oaFtiXXx8W10pLmNvbmNhdChmdW5jdGlvbihiKXthLmF0dHIoInhsaW5r OmhyZWYiLCIjIitiKX0pKSl9Zm9yKHZhciBkLGU9YS5zZWxlY3RBbGwoIioi KSxmPS9eXHMqdXJsXCgoInwnfCkoLiopXDFcKVxzKiQvLGc9W10saD17fSxp PTAsaj1lLmxlbmd0aDtqPmk7aSsrKXtkPWVbaV0sYihkLCJmaWxsIiksYihk LCJzdHJva2UiKSxiKGQsImZpbHRlciIpLGIoZCwibWFzayIpLGIoZCwiY2xp cC1wYXRoIiksYyhkKTt2YXIgaz1xKGQubm9kZSwiaWQiKTtrJiYocShkLm5v ZGUse2lkOmQuaWR9KSxnLnB1c2goe29sZDprLGlkOmQuaWR9KSl9Zm9yKGk9 MCxqPWcubGVuZ3RoO2o+aTtpKyspe3ZhciBsPWhbZ1tpXS5vbGRdO2lmKGwp Zm9yKHZhciBtPTAsbj1sLmxlbmd0aDtuPm07bSsrKWxbbV0oZ1tpXS5pZCl9 fWZ1bmN0aW9uIGsoYSxiLGMpe3JldHVybiBmdW5jdGlvbihkKXt2YXIgZT1k LnNsaWNlKGEsYik7cmV0dXJuIDE9PWUubGVuZ3RoJiYoZT1lWzBdKSxjP2Mo ZSk6ZX19ZnVuY3Rpb24gbChhKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgYj1h PyI8Iit0aGlzLnR5cGU6IiIsYz10aGlzLm5vZGUuYXR0cmlidXRlcyxkPXRo aXMubm9kZS5jaGlsZE5vZGVzO2lmKGEpZm9yKHZhciBlPTAsZj1jLmxlbmd0 aDtmPmU7ZSsrKWIrPSIgIitjW2VdLm5hbWUrJz0iJytjW2VdLnZhbHVlLnJl cGxhY2UoLyIvZywnXFwiJykrJyInO2lmKGQubGVuZ3RoKXtmb3IoYSYmKGIr PSI+IiksZT0wLGY9ZC5sZW5ndGg7Zj5lO2UrKykzPT1kW2VdLm5vZGVUeXBl P2IrPWRbZV0ubm9kZVZhbHVlOjE9PWRbZV0ubm9kZVR5cGUmJihiKz11KGRb ZV0pLnRvU3RyaW5nKCkpO2EmJihiKz0iPC8iK3RoaXMudHlwZSsiPiIpfWVs c2UgYSYmKGIrPSIvPiIpO3JldHVybiBifX12YXIgbT1lLnByb3RvdHlwZSxu PWQuaXMsbz1TdHJpbmcscD1kLl91bml0MnB4LHE9ZC5fLiQscj1kLl8ubWFr ZSxzPWQuXy5nZXRTb21lRGVmcyx0PSJoYXNPd25Qcm9wZXJ0eSIsdT1kLl8u d3JhcDttLmdldEJCb3g9ZnVuY3Rpb24oYSl7aWYoIWQuTWF0cml4fHwhZC5w YXRoKXJldHVybiB0aGlzLm5vZGUuZ2V0QkJveCgpO3ZhciBiPXRoaXMsYz1u ZXcgZC5NYXRyaXg7aWYoYi5yZW1vdmVkKXJldHVybiBkLl8uYm94KCk7Zm9y KDsidXNlIj09Yi50eXBlOylpZihhfHwoYz1jLmFkZChiLnRyYW5zZm9ybSgp LmxvY2FsTWF0cml4LnRyYW5zbGF0ZShiLmF0dHIoIngiKXx8MCxiLmF0dHIo InkiKXx8MCkpKSxiLm9yaWdpbmFsKWI9Yi5vcmlnaW5hbDtlbHNle3ZhciBl PWIuYXR0cigieGxpbms6aHJlZiIpO2I9Yi5vcmlnaW5hbD1iLm5vZGUub3du ZXJEb2N1bWVudC5nZXRFbGVtZW50QnlJZChlLnN1YnN0cmluZyhlLmluZGV4 T2YoIiMiKSsxKSl9dmFyIGY9Yi5fLGc9ZC5wYXRoLmdldFtiLnR5cGVdfHxk LnBhdGguZ2V0LmRlZmx0O3RyeXtyZXR1cm4gYT8oZi5iYm94d3Q9Zz9kLnBh dGguZ2V0QkJveChiLnJlYWxQYXRoPWcoYikpOmQuXy5ib3goYi5ub2RlLmdl dEJCb3goKSksZC5fLmJveChmLmJib3h3dCkpOihiLnJlYWxQYXRoPWcoYiks Yi5tYXRyaXg9Yi50cmFuc2Zvcm0oKS5sb2NhbE1hdHJpeCxmLmJib3g9ZC5w YXRoLmdldEJCb3goZC5wYXRoLm1hcChiLnJlYWxQYXRoLGMuYWRkKGIubWF0 cml4KSkpLGQuXy5ib3goZi5iYm94KSl9Y2F0Y2goaCl7cmV0dXJuIGQuXy5i b3goKX19O3ZhciB2PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc3RyaW5nfTtt LnRyYW5zZm9ybT1mdW5jdGlvbihhKXt2YXIgYj10aGlzLl87aWYobnVsbD09 YSl7Zm9yKHZhciBjLGU9dGhpcyxmPW5ldyBkLk1hdHJpeCh0aGlzLm5vZGUu Z2V0Q1RNKCkpLGc9aSh0aGlzKSxoPVtnXSxqPW5ldyBkLk1hdHJpeCxrPWcu dG9UcmFuc2Zvcm1TdHJpbmcoKSxsPW8oZyk9PW8odGhpcy5tYXRyaXgpP28o Yi50cmFuc2Zvcm0pOms7InN2ZyIhPWUudHlwZSYmKGU9ZS5wYXJlbnQoKSk7 KWgucHVzaChpKGUpKTtmb3IoYz1oLmxlbmd0aDtjLS07KWouYWRkKGhbY10p O3JldHVybntzdHJpbmc6bCxnbG9iYWxNYXRyaXg6Zix0b3RhbE1hdHJpeDpq LGxvY2FsTWF0cml4OmcsZGlmZk1hdHJpeDpmLmNsb25lKCkuYWRkKGcuaW52 ZXJ0KCkpLGdsb2JhbDpmLnRvVHJhbnNmb3JtU3RyaW5nKCksdG90YWw6ai50 b1RyYW5zZm9ybVN0cmluZygpLGxvY2FsOmssdG9TdHJpbmc6dn19cmV0dXJu IGEgaW5zdGFuY2VvZiBkLk1hdHJpeD8odGhpcy5tYXRyaXg9YSx0aGlzLl8u dHJhbnNmb3JtPWEudG9UcmFuc2Zvcm1TdHJpbmcoKSk6aSh0aGlzLGEpLHRo aXMubm9kZSYmKCJsaW5lYXJHcmFkaWVudCI9PXRoaXMudHlwZXx8InJhZGlh bEdyYWRpZW50Ij09dGhpcy50eXBlP3EodGhpcy5ub2RlLHtncmFkaWVudFRy YW5zZm9ybTp0aGlzLm1hdHJpeH0pOiJwYXR0ZXJuIj09dGhpcy50eXBlP3Eo dGhpcy5ub2RlLHtwYXR0ZXJuVHJhbnNmb3JtOnRoaXMubWF0cml4fSk6cSh0 aGlzLm5vZGUse3RyYW5zZm9ybTp0aGlzLm1hdHJpeH0pKSx0aGlzfSxtLnBh cmVudD1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMubm9kZS5wYXJlbnROb2Rl KX0sbS5hcHBlbmQ9bS5hZGQ9ZnVuY3Rpb24oYSl7aWYoYSl7aWYoInNldCI9 PWEudHlwZSl7dmFyIGI9dGhpcztyZXR1cm4gYS5mb3JFYWNoKGZ1bmN0aW9u KGEpe2IuYWRkKGEpfSksdGhpc31hPXUoYSksdGhpcy5ub2RlLmFwcGVuZENo aWxkKGEubm9kZSksYS5wYXBlcj10aGlzLnBhcGVyfXJldHVybiB0aGlzfSxt LmFwcGVuZFRvPWZ1bmN0aW9uKGEpe3JldHVybiBhJiYoYT11KGEpLGEuYXBw ZW5kKHRoaXMpKSx0aGlzfSxtLnByZXBlbmQ9ZnVuY3Rpb24oYSl7aWYoYSl7 aWYoInNldCI9PWEudHlwZSl7dmFyIGIsYz10aGlzO3JldHVybiBhLmZvckVh Y2goZnVuY3Rpb24oYSl7Yj9iLmFmdGVyKGEpOmMucHJlcGVuZChhKSxiPWF9 KSx0aGlzfWE9dShhKTt2YXIgZD1hLnBhcmVudCgpO3RoaXMubm9kZS5pbnNl cnRCZWZvcmUoYS5ub2RlLHRoaXMubm9kZS5maXJzdENoaWxkKSx0aGlzLmFk ZCYmdGhpcy5hZGQoKSxhLnBhcGVyPXRoaXMucGFwZXIsdGhpcy5wYXJlbnQo KSYmdGhpcy5wYXJlbnQoKS5hZGQoKSxkJiZkLmFkZCgpfXJldHVybiB0aGlz fSxtLnByZXBlbmRUbz1mdW5jdGlvbihhKXtyZXR1cm4gYT11KGEpLGEucHJl cGVuZCh0aGlzKSx0aGlzfSxtLmJlZm9yZT1mdW5jdGlvbihhKXtpZigic2V0 Ij09YS50eXBlKXt2YXIgYj10aGlzO3JldHVybiBhLmZvckVhY2goZnVuY3Rp b24oYSl7dmFyIGM9YS5wYXJlbnQoKTtiLm5vZGUucGFyZW50Tm9kZS5pbnNl cnRCZWZvcmUoYS5ub2RlLGIubm9kZSksYyYmYy5hZGQoKX0pLHRoaXMucGFy ZW50KCkuYWRkKCksdGhpc31hPXUoYSk7dmFyIGM9YS5wYXJlbnQoKTtyZXR1 cm4gdGhpcy5ub2RlLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEubm9kZSx0 aGlzLm5vZGUpLHRoaXMucGFyZW50KCkmJnRoaXMucGFyZW50KCkuYWRkKCks YyYmYy5hZGQoKSxhLnBhcGVyPXRoaXMucGFwZXIsdGhpc30sbS5hZnRlcj1m dW5jdGlvbihhKXthPXUoYSk7dmFyIGI9YS5wYXJlbnQoKTtyZXR1cm4gdGhp cy5ub2RlLm5leHRTaWJsaW5nP3RoaXMubm9kZS5wYXJlbnROb2RlLmluc2Vy dEJlZm9yZShhLm5vZGUsdGhpcy5ub2RlLm5leHRTaWJsaW5nKTp0aGlzLm5v ZGUucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChhLm5vZGUpLHRoaXMucGFyZW50 KCkmJnRoaXMucGFyZW50KCkuYWRkKCksYiYmYi5hZGQoKSxhLnBhcGVyPXRo aXMucGFwZXIsdGhpc30sbS5pbnNlcnRCZWZvcmU9ZnVuY3Rpb24oYSl7YT11 KGEpO3ZhciBiPXRoaXMucGFyZW50KCk7cmV0dXJuIGEubm9kZS5wYXJlbnRO b2RlLmluc2VydEJlZm9yZSh0aGlzLm5vZGUsYS5ub2RlKSx0aGlzLnBhcGVy PWEucGFwZXIsYiYmYi5hZGQoKSxhLnBhcmVudCgpJiZhLnBhcmVudCgpLmFk ZCgpLHRoaXN9LG0uaW5zZXJ0QWZ0ZXI9ZnVuY3Rpb24oYSl7YT11KGEpO3Zh ciBiPXRoaXMucGFyZW50KCk7cmV0dXJuIGEubm9kZS5wYXJlbnROb2RlLmlu c2VydEJlZm9yZSh0aGlzLm5vZGUsYS5ub2RlLm5leHRTaWJsaW5nKSx0aGlz LnBhcGVyPWEucGFwZXIsYiYmYi5hZGQoKSxhLnBhcmVudCgpJiZhLnBhcmVu dCgpLmFkZCgpLHRoaXN9LG0ucmVtb3ZlPWZ1bmN0aW9uKCl7dmFyIGE9dGhp cy5wYXJlbnQoKTtyZXR1cm4gdGhpcy5ub2RlLnBhcmVudE5vZGUmJnRoaXMu bm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMubm9kZSksZGVsZXRl IHRoaXMucGFwZXIsdGhpcy5yZW1vdmVkPSEwLGEmJmEuYWRkKCksdGhpc30s bS5zZWxlY3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIHUodGhpcy5ub2RlLnF1ZXJ5 U2VsZWN0b3IoYSkpfSxtLnNlbGVjdEFsbD1mdW5jdGlvbihhKXtmb3IodmFy IGI9dGhpcy5ub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoYSksYz0oZC5zZXR8fEFy cmF5KSgpLGU9MDtlPGIubGVuZ3RoO2UrKyljLnB1c2godShiW2VdKSk7cmV0 dXJuIGN9LG0uYXNQWD1mdW5jdGlvbihhLGIpe3JldHVybiBudWxsPT1iJiYo Yj10aGlzLmF0dHIoYSkpLCtwKHRoaXMsYSxiKX0sbS51c2U9ZnVuY3Rpb24o KXt2YXIgYSxiPXRoaXMubm9kZS5pZDtyZXR1cm4gYnx8KGI9dGhpcy5pZCxx KHRoaXMubm9kZSx7aWQ6Yn0pKSxhPSJsaW5lYXJHcmFkaWVudCI9PXRoaXMu dHlwZXx8InJhZGlhbEdyYWRpZW50Ij09dGhpcy50eXBlfHwicGF0dGVybiI9 PXRoaXMudHlwZT9yKHRoaXMudHlwZSx0aGlzLm5vZGUucGFyZW50Tm9kZSk6 cigidXNlIix0aGlzLm5vZGUucGFyZW50Tm9kZSkscShhLm5vZGUseyJ4bGlu azpocmVmIjoiIyIrYn0pLGEub3JpZ2luYWw9dGhpcyxhfSxtLmNsb25lPWZ1 bmN0aW9uKCl7dmFyIGE9dSh0aGlzLm5vZGUuY2xvbmVOb2RlKCEwKSk7cmV0 dXJuIHEoYS5ub2RlLCJpZCIpJiZxKGEubm9kZSx7aWQ6YS5pZH0pLGooYSks YS5pbnNlcnRBZnRlcih0aGlzKSxhfSxtLnRvRGVmcz1mdW5jdGlvbigpe3Zh ciBhPXModGhpcyk7cmV0dXJuIGEuYXBwZW5kQ2hpbGQodGhpcy5ub2RlKSx0 aGlzfSxtLnBhdHRlcm49bS50b1BhdHRlcm49ZnVuY3Rpb24oYSxiLGMsZCl7 dmFyIGU9cigicGF0dGVybiIscyh0aGlzKSk7cmV0dXJuIG51bGw9PWEmJihh PXRoaXMuZ2V0QkJveCgpKSxuKGEsIm9iamVjdCIpJiYieCJpbiBhJiYoYj1h LnksYz1hLndpZHRoLGQ9YS5oZWlnaHQsYT1hLngpLHEoZS5ub2RlLHt4OmEs eTpiLHdpZHRoOmMsaGVpZ2h0OmQscGF0dGVyblVuaXRzOiJ1c2VyU3BhY2VP blVzZSIsaWQ6ZS5pZCx2aWV3Qm94OlthLGIsYyxkXS5qb2luKCIgIil9KSxl Lm5vZGUuYXBwZW5kQ2hpbGQodGhpcy5ub2RlKSxlfSxtLm1hcmtlcj1mdW5j dGlvbihhLGIsYyxkLGUsZil7dmFyIGc9cigibWFya2VyIixzKHRoaXMpKTty ZXR1cm4gbnVsbD09YSYmKGE9dGhpcy5nZXRCQm94KCkpLG4oYSwib2JqZWN0 IikmJiJ4ImluIGEmJihiPWEueSxjPWEud2lkdGgsZD1hLmhlaWdodCxlPWEu cmVmWHx8YS5jeCxmPWEucmVmWXx8YS5jeSxhPWEueCkscShnLm5vZGUse3Zp ZXdCb3g6W2EsYixjLGRdLmpvaW4oIiAiKSxtYXJrZXJXaWR0aDpjLG1hcmtl ckhlaWdodDpkLG9yaWVudDoiYXV0byIscmVmWDplfHwwLHJlZlk6Znx8MCxp ZDpnLmlkfSksZy5ub2RlLmFwcGVuZENoaWxkKHRoaXMubm9kZSksZ307dmFy IHc9ZnVuY3Rpb24oYSxiLGQsZSl7ImZ1bmN0aW9uIiE9dHlwZW9mIGR8fGQu bGVuZ3RofHwoZT1kLGQ9Yy5saW5lYXIpLHRoaXMuYXR0cj1hLHRoaXMuZHVy PWIsZCYmKHRoaXMuZWFzaW5nPWQpLGUmJih0aGlzLmNhbGxiYWNrPWUpfTtk Ll8uQW5pbWF0aW9uPXcsZC5hbmltYXRpb249ZnVuY3Rpb24oYSxiLGMsZCl7 cmV0dXJuIG5ldyB3KGEsYixjLGQpfSxtLmluQW5pbT1mdW5jdGlvbigpe3Zh ciBhPXRoaXMsYj1bXTtmb3IodmFyIGMgaW4gYS5hbmltcylhLmFuaW1zW3Rd KGMpJiYhZnVuY3Rpb24oYSl7Yi5wdXNoKHthbmltOm5ldyB3KGEuX2F0dHJz LGEuZHVyLGEuZWFzaW5nLGEuX2NhbGxiYWNrKSxtaW5hOmEsY3VyU3RhdHVz OmEuc3RhdHVzKCksc3RhdHVzOmZ1bmN0aW9uKGIpe3JldHVybiBhLnN0YXR1 cyhiKX0sc3RvcDpmdW5jdGlvbigpe2Euc3RvcCgpfX0pfShhLmFuaW1zW2Nd KTtyZXR1cm4gYn0sZC5hbmltYXRlPWZ1bmN0aW9uKGEsZCxlLGYsZyxoKXsi ZnVuY3Rpb24iIT10eXBlb2YgZ3x8Zy5sZW5ndGh8fChoPWcsZz1jLmxpbmVh cik7dmFyIGk9Yy50aW1lKCksaj1jKGEsZCxpLGkrZixjLnRpbWUsZSxnKTty ZXR1cm4gaCYmYi5vbmNlKCJtaW5hLmZpbmlzaC4iK2ouaWQsaCksan0sbS5z dG9wPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPXRoaXMuaW5BbmltKCksYj0wLGM9 YS5sZW5ndGg7Yz5iO2IrKylhW2JdLnN0b3AoKTtyZXR1cm4gdGhpc30sbS5h bmltYXRlPWZ1bmN0aW9uKGEsZCxlLGYpeyJmdW5jdGlvbiIhPXR5cGVvZiBl fHxlLmxlbmd0aHx8KGY9ZSxlPWMubGluZWFyKSxhIGluc3RhbmNlb2YgdyYm KGY9YS5jYWxsYmFjayxlPWEuZWFzaW5nLGQ9YS5kdXIsYT1hLmF0dHIpO3Zh ciBnLGgsaSxqLGw9W10sbT1bXSxwPXt9LHE9dGhpcztmb3IodmFyIHIgaW4g YSlpZihhW3RdKHIpKXtxLmVxdWFsPyhqPXEuZXF1YWwocixvKGFbcl0pKSxn PWouZnJvbSxoPWoudG8saT1qLmYpOihnPStxLmF0dHIociksaD0rYVtyXSk7 dmFyIHM9bihnLCJhcnJheSIpP2cubGVuZ3RoOjE7cFtyXT1rKGwubGVuZ3Ro LGwubGVuZ3RoK3MsaSksbD1sLmNvbmNhdChnKSxtPW0uY29uY2F0KGgpfXZh ciB1PWMudGltZSgpLHY9YyhsLG0sdSx1K2QsYy50aW1lLGZ1bmN0aW9uKGEp e3ZhciBiPXt9O2Zvcih2YXIgYyBpbiBwKXBbdF0oYykmJihiW2NdPXBbY10o YSkpO3EuYXR0cihiKX0sZSk7cmV0dXJuIHEuYW5pbXNbdi5pZF09dix2Ll9h dHRycz1hLHYuX2NhbGxiYWNrPWYsYigic25hcC5hbmltY3JlYXRlZC4iK3Eu aWQsdiksYi5vbmNlKCJtaW5hLmZpbmlzaC4iK3YuaWQsZnVuY3Rpb24oKXtk ZWxldGUgcS5hbmltc1t2LmlkXSxmJiZmLmNhbGwocSl9KSxiLm9uY2UoIm1p bmEuc3RvcC4iK3YuaWQsZnVuY3Rpb24oKXtkZWxldGUgcS5hbmltc1t2Lmlk XX0pLHF9O3ZhciB4PXt9O20uZGF0YT1mdW5jdGlvbihhLGMpe3ZhciBlPXhb dGhpcy5pZF09eFt0aGlzLmlkXXx8e307aWYoMD09YXJndW1lbnRzLmxlbmd0 aClyZXR1cm4gYigic25hcC5kYXRhLmdldC4iK3RoaXMuaWQsdGhpcyxlLG51 bGwpLGU7CitpZigxPT1hcmd1bWVudHMubGVuZ3RoKXtpZihkLmlzKGEsIm9i amVjdCIpKXtmb3IodmFyIGYgaW4gYSlhW3RdKGYpJiZ0aGlzLmRhdGEoZixh W2ZdKTtyZXR1cm4gdGhpc31yZXR1cm4gYigic25hcC5kYXRhLmdldC4iK3Ro aXMuaWQsdGhpcyxlW2FdLGEpLGVbYV19cmV0dXJuIGVbYV09YyxiKCJzbmFw LmRhdGEuc2V0LiIrdGhpcy5pZCx0aGlzLGMsYSksdGhpc30sbS5yZW1vdmVE YXRhPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsPT1hP3hbdGhpcy5pZF09e306 eFt0aGlzLmlkXSYmZGVsZXRlIHhbdGhpcy5pZF1bYV0sdGhpc30sbS5vdXRl clNWRz1tLnRvU3RyaW5nPWwoMSksbS5pbm5lclNWRz1sKCksbS50b0RhdGFV Ukw9ZnVuY3Rpb24oKXtpZihhJiZhLmJ0b2Epe3ZhciBiPXRoaXMuZ2V0QkJv eCgpLGM9ZC5mb3JtYXQoJzxzdmcgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0 cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8v d3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0ie3dpZHRofSIgaGVpZ2h0 PSJ7aGVpZ2h0fSIgdmlld0JveD0ie3h9IHt5fSB7d2lkdGh9IHtoZWlnaHR9 Ij57Y29udGVudHN9PC9zdmc+Jyx7eDorYi54LnRvRml4ZWQoMykseTorYi55 LnRvRml4ZWQoMyksd2lkdGg6K2Iud2lkdGgudG9GaXhlZCgzKSxoZWlnaHQ6 K2IuaGVpZ2h0LnRvRml4ZWQoMyksY29udGVudHM6dGhpcy5vdXRlclNWRygp fSk7cmV0dXJuImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsIitidG9hKHVu ZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChjKSkpfX0saC5wcm90b3R5cGUu c2VsZWN0PW0uc2VsZWN0LGgucHJvdG90eXBlLnNlbGVjdEFsbD1tLnNlbGVj dEFsbH0pLGQucGx1Z2luKGZ1bmN0aW9uKGEpe2Z1bmN0aW9uIGIoYSxiLGQs ZSxmLGcpe3JldHVybiBudWxsPT1iJiYiW29iamVjdCBTVkdNYXRyaXhdIj09 Yy5jYWxsKGEpPyh0aGlzLmE9YS5hLHRoaXMuYj1hLmIsdGhpcy5jPWEuYyx0 aGlzLmQ9YS5kLHRoaXMuZT1hLmUsdm9pZCh0aGlzLmY9YS5mKSk6dm9pZChu dWxsIT1hPyh0aGlzLmE9K2EsdGhpcy5iPStiLHRoaXMuYz0rZCx0aGlzLmQ9 K2UsdGhpcy5lPStmLHRoaXMuZj0rZyk6KHRoaXMuYT0xLHRoaXMuYj0wLHRo aXMuYz0wLHRoaXMuZD0xLHRoaXMuZT0wLHRoaXMuZj0wKSl9dmFyIGM9T2Jq ZWN0LnByb3RvdHlwZS50b1N0cmluZyxkPVN0cmluZyxlPU1hdGgsZj0iIjsh ZnVuY3Rpb24oYyl7ZnVuY3Rpb24gZyhhKXtyZXR1cm4gYVswXSphWzBdK2Fb MV0qYVsxXX1mdW5jdGlvbiBoKGEpe3ZhciBiPWUuc3FydChnKGEpKTthWzBd JiYoYVswXS89YiksYVsxXSYmKGFbMV0vPWIpfWMuYWRkPWZ1bmN0aW9uKGEs YyxkLGUsZixnKXt2YXIgaCxpLGosayxsPVtbXSxbXSxbXV0sbT1bW3RoaXMu YSx0aGlzLmMsdGhpcy5lXSxbdGhpcy5iLHRoaXMuZCx0aGlzLmZdLFswLDAs MV1dLG49W1thLGQsZl0sW2MsZSxnXSxbMCwwLDFdXTtmb3IoYSYmYSBpbnN0 YW5jZW9mIGImJihuPVtbYS5hLGEuYyxhLmVdLFthLmIsYS5kLGEuZl0sWzAs MCwxXV0pLGg9MDszPmg7aCsrKWZvcihpPTA7Mz5pO2krKyl7Zm9yKGs9MCxq PTA7Mz5qO2orKylrKz1tW2hdW2pdKm5bal1baV07bFtoXVtpXT1rfXJldHVy biB0aGlzLmE9bFswXVswXSx0aGlzLmI9bFsxXVswXSx0aGlzLmM9bFswXVsx XSx0aGlzLmQ9bFsxXVsxXSx0aGlzLmU9bFswXVsyXSx0aGlzLmY9bFsxXVsy XSx0aGlzfSxjLmludmVydD1mdW5jdGlvbigpe3ZhciBhPXRoaXMsYz1hLmEq YS5kLWEuYiphLmM7cmV0dXJuIG5ldyBiKGEuZC9jLC1hLmIvYywtYS5jL2Ms YS5hL2MsKGEuYyphLmYtYS5kKmEuZSkvYywoYS5iKmEuZS1hLmEqYS5mKS9j KX0sYy5jbG9uZT1mdW5jdGlvbigpe3JldHVybiBuZXcgYih0aGlzLmEsdGhp cy5iLHRoaXMuYyx0aGlzLmQsdGhpcy5lLHRoaXMuZil9LGMudHJhbnNsYXRl PWZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuYWRkKDEsMCwwLDEsYSxiKX0s Yy5zY2FsZT1mdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gbnVsbD09YiYmKGI9 YSksKGN8fGQpJiZ0aGlzLmFkZCgxLDAsMCwxLGMsZCksdGhpcy5hZGQoYSww LDAsYiwwLDApLChjfHxkKSYmdGhpcy5hZGQoMSwwLDAsMSwtYywtZCksdGhp c30sYy5yb3RhdGU9ZnVuY3Rpb24oYixjLGQpe2I9YS5yYWQoYiksYz1jfHww LGQ9ZHx8MDt2YXIgZj0rZS5jb3MoYikudG9GaXhlZCg5KSxnPStlLnNpbihi KS50b0ZpeGVkKDkpO3JldHVybiB0aGlzLmFkZChmLGcsLWcsZixjLGQpLHRo aXMuYWRkKDEsMCwwLDEsLWMsLWQpfSxjLng9ZnVuY3Rpb24oYSxiKXtyZXR1 cm4gYSp0aGlzLmErYip0aGlzLmMrdGhpcy5lfSxjLnk9ZnVuY3Rpb24oYSxi KXtyZXR1cm4gYSp0aGlzLmIrYip0aGlzLmQrdGhpcy5mfSxjLmdldD1mdW5j dGlvbihhKXtyZXR1cm4rdGhpc1tkLmZyb21DaGFyQ29kZSg5NythKV0udG9G aXhlZCg0KX0sYy50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJtYXRyaXgo IitbdGhpcy5nZXQoMCksdGhpcy5nZXQoMSksdGhpcy5nZXQoMiksdGhpcy5n ZXQoMyksdGhpcy5nZXQoNCksdGhpcy5nZXQoNSldLmpvaW4oKSsiKSJ9LGMu b2Zmc2V0PWZ1bmN0aW9uKCl7cmV0dXJuW3RoaXMuZS50b0ZpeGVkKDQpLHRo aXMuZi50b0ZpeGVkKDQpXX0sYy5kZXRlcm1pbmFudD1mdW5jdGlvbigpe3Jl dHVybiB0aGlzLmEqdGhpcy5kLXRoaXMuYip0aGlzLmN9LGMuc3BsaXQ9ZnVu Y3Rpb24oKXt2YXIgYj17fTtiLmR4PXRoaXMuZSxiLmR5PXRoaXMuZjt2YXIg Yz1bW3RoaXMuYSx0aGlzLmNdLFt0aGlzLmIsdGhpcy5kXV07Yi5zY2FsZXg9 ZS5zcXJ0KGcoY1swXSkpLGgoY1swXSksYi5zaGVhcj1jWzBdWzBdKmNbMV1b MF0rY1swXVsxXSpjWzFdWzFdLGNbMV09W2NbMV1bMF0tY1swXVswXSpiLnNo ZWFyLGNbMV1bMV0tY1swXVsxXSpiLnNoZWFyXSxiLnNjYWxleT1lLnNxcnQo ZyhjWzFdKSksaChjWzFdKSxiLnNoZWFyLz1iLnNjYWxleSx0aGlzLmRldGVy bWluYW50KCk8MCYmKGIuc2NhbGV4PS1iLnNjYWxleCk7dmFyIGQ9LWNbMF1b MV0sZj1jWzFdWzFdO3JldHVybiAwPmY/KGIucm90YXRlPWEuZGVnKGUuYWNv cyhmKSksMD5kJiYoYi5yb3RhdGU9MzYwLWIucm90YXRlKSk6Yi5yb3RhdGU9 YS5kZWcoZS5hc2luKGQpKSxiLmlzU2ltcGxlPSEoK2Iuc2hlYXIudG9GaXhl ZCg5KXx8Yi5zY2FsZXgudG9GaXhlZCg5KSE9Yi5zY2FsZXkudG9GaXhlZCg5 KSYmYi5yb3RhdGUpLGIuaXNTdXBlclNpbXBsZT0hK2Iuc2hlYXIudG9GaXhl ZCg5KSYmYi5zY2FsZXgudG9GaXhlZCg5KT09Yi5zY2FsZXkudG9GaXhlZCg5 KSYmIWIucm90YXRlLGIubm9Sb3RhdGlvbj0hK2Iuc2hlYXIudG9GaXhlZCg5 KSYmIWIucm90YXRlLGJ9LGMudG9UcmFuc2Zvcm1TdHJpbmc9ZnVuY3Rpb24o YSl7dmFyIGI9YXx8dGhpcy5zcGxpdCgpO3JldHVybitiLnNoZWFyLnRvRml4 ZWQoOSk/Im0iK1t0aGlzLmdldCgwKSx0aGlzLmdldCgxKSx0aGlzLmdldCgy KSx0aGlzLmdldCgzKSx0aGlzLmdldCg0KSx0aGlzLmdldCg1KV06KGIuc2Nh bGV4PStiLnNjYWxleC50b0ZpeGVkKDQpLGIuc2NhbGV5PStiLnNjYWxleS50 b0ZpeGVkKDQpLGIucm90YXRlPStiLnJvdGF0ZS50b0ZpeGVkKDQpLChiLmR4 fHxiLmR5PyJ0IitbK2IuZHgudG9GaXhlZCg0KSwrYi5keS50b0ZpeGVkKDQp XTpmKSsoMSE9Yi5zY2FsZXh8fDEhPWIuc2NhbGV5PyJzIitbYi5zY2FsZXgs Yi5zY2FsZXksMCwwXTpmKSsoYi5yb3RhdGU/InIiK1srYi5yb3RhdGUudG9G aXhlZCg0KSwwLDBdOmYpKX19KGIucHJvdG90eXBlKSxhLk1hdHJpeD1iLGEu bWF0cml4PWZ1bmN0aW9uKGEsYyxkLGUsZixnKXtyZXR1cm4gbmV3IGIoYSxj LGQsZSxmLGcpfX0pLGQucGx1Z2luKGZ1bmN0aW9uKGEsYyxkLGUsZil7ZnVu Y3Rpb24gZyhkKXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoYi5zdG9wKCksZSBp bnN0YW5jZW9mIGYmJjE9PWUubm9kZS5jaGlsZE5vZGVzLmxlbmd0aCYmKCJy YWRpYWxHcmFkaWVudCI9PWUubm9kZS5maXJzdENoaWxkLnRhZ05hbWV8fCJs aW5lYXJHcmFkaWVudCI9PWUubm9kZS5maXJzdENoaWxkLnRhZ05hbWV8fCJw YXR0ZXJuIj09ZS5ub2RlLmZpcnN0Q2hpbGQudGFnTmFtZSkmJihlPWUubm9k ZS5maXJzdENoaWxkLG4odGhpcykuYXBwZW5kQ2hpbGQoZSksZT1sKGUpKSxl IGluc3RhbmNlb2YgYylpZigicmFkaWFsR3JhZGllbnQiPT1lLnR5cGV8fCJs aW5lYXJHcmFkaWVudCI9PWUudHlwZXx8InBhdHRlcm4iPT1lLnR5cGUpe2Uu bm9kZS5pZHx8cChlLm5vZGUse2lkOmUuaWR9KTt2YXIgZz1xKGUubm9kZS5p ZCl9ZWxzZSBnPWUuYXR0cihkKTtlbHNlIGlmKGc9YS5jb2xvcihlKSxnLmVy cm9yKXt2YXIgaD1hKG4odGhpcykub3duZXJTVkdFbGVtZW50KS5ncmFkaWVu dChlKTtoPyhoLm5vZGUuaWR8fHAoaC5ub2RlLHtpZDpoLmlkfSksZz1xKGgu bm9kZS5pZCkpOmc9ZX1lbHNlIGc9cihnKTt2YXIgaT17fTtpW2RdPWcscCh0 aGlzLm5vZGUsaSksdGhpcy5ub2RlLnN0eWxlW2RdPXR9fWZ1bmN0aW9uIGgo YSl7Yi5zdG9wKCksYT09K2EmJihhKz0icHgiKSx0aGlzLm5vZGUuc3R5bGUu Zm9udFNpemU9YX1mdW5jdGlvbiBpKGEpe2Zvcih2YXIgYj1bXSxjPWEuY2hp bGROb2RlcyxkPTAsZT1jLmxlbmd0aDtlPmQ7ZCsrKXt2YXIgZj1jW2RdOzM9 PWYubm9kZVR5cGUmJmIucHVzaChmLm5vZGVWYWx1ZSksInRzcGFuIj09Zi50 YWdOYW1lJiZiLnB1c2goMT09Zi5jaGlsZE5vZGVzLmxlbmd0aCYmMz09Zi5m aXJzdENoaWxkLm5vZGVUeXBlP2YuZmlyc3RDaGlsZC5ub2RlVmFsdWU6aShm KSl9cmV0dXJuIGJ9ZnVuY3Rpb24gaigpe3JldHVybiBiLnN0b3AoKSx0aGlz Lm5vZGUuc3R5bGUuZm9udFNpemV9dmFyIGs9YS5fLm1ha2UsbD1hLl8ud3Jh cCxtPWEuaXMsbj1hLl8uZ2V0U29tZURlZnMsbz0vXnVybFwoIz8oW14pXSsp XCkkLyxwPWEuXy4kLHE9YS51cmwscj1TdHJpbmcscz1hLl8uc2VwYXJhdG9y LHQ9IiI7Yi5vbigic25hcC51dGlsLmF0dHIubWFzayIsZnVuY3Rpb24oYSl7 aWYoYSBpbnN0YW5jZW9mIGN8fGEgaW5zdGFuY2VvZiBmKXtpZihiLnN0b3Ao KSxhIGluc3RhbmNlb2YgZiYmMT09YS5ub2RlLmNoaWxkTm9kZXMubGVuZ3Ro JiYoYT1hLm5vZGUuZmlyc3RDaGlsZCxuKHRoaXMpLmFwcGVuZENoaWxkKGEp LGE9bChhKSksIm1hc2siPT1hLnR5cGUpdmFyIGQ9YTtlbHNlIGQ9aygibWFz ayIsbih0aGlzKSksZC5ub2RlLmFwcGVuZENoaWxkKGEubm9kZSk7IWQubm9k ZS5pZCYmcChkLm5vZGUse2lkOmQuaWR9KSxwKHRoaXMubm9kZSx7bWFzazpx KGQuaWQpfSl9fSksZnVuY3Rpb24oYSl7Yi5vbigic25hcC51dGlsLmF0dHIu Y2xpcCIsYSksYi5vbigic25hcC51dGlsLmF0dHIuY2xpcC1wYXRoIixhKSxi Lm9uKCJzbmFwLnV0aWwuYXR0ci5jbGlwUGF0aCIsYSl9KGZ1bmN0aW9uKGEp e2lmKGEgaW5zdGFuY2VvZiBjfHxhIGluc3RhbmNlb2YgZil7aWYoYi5zdG9w KCksImNsaXBQYXRoIj09YS50eXBlKXZhciBkPWE7ZWxzZSBkPWsoImNsaXBQ YXRoIixuKHRoaXMpKSxkLm5vZGUuYXBwZW5kQ2hpbGQoYS5ub2RlKSwhZC5u b2RlLmlkJiZwKGQubm9kZSx7aWQ6ZC5pZH0pO3AodGhpcy5ub2RlLHsiY2xp cC1wYXRoIjpxKGQubm9kZS5pZHx8ZC5pZCl9KX19KSxiLm9uKCJzbmFwLnV0 aWwuYXR0ci5maWxsIixnKCJmaWxsIikpLGIub24oInNuYXAudXRpbC5hdHRy LnN0cm9rZSIsZygic3Ryb2tlIikpO3ZhciB1PS9eKFtscl0pKD86XCgoW14p XSopXCkpPyguKikkL2k7Yi5vbigic25hcC51dGlsLmdyYWQucGFyc2UiLGZ1 bmN0aW9uKGEpe2E9cihhKTt2YXIgYj1hLm1hdGNoKHUpO2lmKCFiKXJldHVy biBudWxsO3ZhciBjPWJbMV0sZD1iWzJdLGU9YlszXTtyZXR1cm4gZD1kLnNw bGl0KC9ccyosXHMqLykubWFwKGZ1bmN0aW9uKGEpe3JldHVybithPT1hPyth OmF9KSwxPT1kLmxlbmd0aCYmMD09ZFswXSYmKGQ9W10pLGU9ZS5zcGxpdCgi LSIpLGU9ZS5tYXAoZnVuY3Rpb24oYSl7YT1hLnNwbGl0KCI6Iik7dmFyIGI9 e2NvbG9yOmFbMF19O3JldHVybiBhWzFdJiYoYi5vZmZzZXQ9cGFyc2VGbG9h dChhWzFdKSksYn0pLHt0eXBlOmMscGFyYW1zOmQsc3RvcHM6ZX19KSxiLm9u KCJzbmFwLnV0aWwuYXR0ci5kIixmdW5jdGlvbihjKXtiLnN0b3AoKSxtKGMs ImFycmF5IikmJm0oY1swXSwiYXJyYXkiKSYmKGM9YS5wYXRoLnRvU3RyaW5n LmNhbGwoYykpLGM9cihjKSxjLm1hdGNoKC9bcnVvXS9pKSYmKGM9YS5wYXRo LnRvQWJzb2x1dGUoYykpLHAodGhpcy5ub2RlLHtkOmN9KX0pKC0xKSxiLm9u KCJzbmFwLnV0aWwuYXR0ci4jdGV4dCIsZnVuY3Rpb24oYSl7Yi5zdG9wKCks YT1yKGEpO2Zvcih2YXIgYz1lLmRvYy5jcmVhdGVUZXh0Tm9kZShhKTt0aGlz Lm5vZGUuZmlyc3RDaGlsZDspdGhpcy5ub2RlLnJlbW92ZUNoaWxkKHRoaXMu bm9kZS5maXJzdENoaWxkKTt0aGlzLm5vZGUuYXBwZW5kQ2hpbGQoYyl9KSgt MSksYi5vbigic25hcC51dGlsLmF0dHIucGF0aCIsZnVuY3Rpb24oYSl7Yi5z dG9wKCksdGhpcy5hdHRyKHtkOmF9KX0pKC0xKSxiLm9uKCJzbmFwLnV0aWwu YXR0ci5jbGFzcyIsZnVuY3Rpb24oYSl7Yi5zdG9wKCksdGhpcy5ub2RlLmNs YXNzTmFtZS5iYXNlVmFsPWF9KSgtMSksYi5vbigic25hcC51dGlsLmF0dHIu dmlld0JveCIsZnVuY3Rpb24oYSl7dmFyIGM7Yz1tKGEsIm9iamVjdCIpJiYi eCJpbiBhP1thLngsYS55LGEud2lkdGgsYS5oZWlnaHRdLmpvaW4oIiAiKTpt KGEsImFycmF5Iik/YS5qb2luKCIgIik6YSxwKHRoaXMubm9kZSx7dmlld0Jv eDpjfSksYi5zdG9wKCl9KSgtMSksYi5vbigic25hcC51dGlsLmF0dHIudHJh bnNmb3JtIixmdW5jdGlvbihhKXt0aGlzLnRyYW5zZm9ybShhKSxiLnN0b3Ao KX0pKC0xKSxiLm9uKCJzbmFwLnV0aWwuYXR0ci5yIixmdW5jdGlvbihhKXsi cmVjdCI9PXRoaXMudHlwZSYmKGIuc3RvcCgpLHAodGhpcy5ub2RlLHtyeDph LHJ5OmF9KSl9KSgtMSksYi5vbigic25hcC51dGlsLmF0dHIudGV4dHBhdGgi LGZ1bmN0aW9uKGEpe2lmKGIuc3RvcCgpLCJ0ZXh0Ij09dGhpcy50eXBlKXt2 YXIgZCxlLGY7aWYoIWEmJnRoaXMudGV4dFBhdGgpe2ZvcihlPXRoaXMudGV4 dFBhdGg7ZS5ub2RlLmZpcnN0Q2hpbGQ7KXRoaXMubm9kZS5hcHBlbmRDaGls ZChlLm5vZGUuZmlyc3RDaGlsZCk7cmV0dXJuIGUucmVtb3ZlKCksdm9pZCBk ZWxldGUgdGhpcy50ZXh0UGF0aH1pZihtKGEsInN0cmluZyIpKXt2YXIgZz1u KHRoaXMpLGg9bChnLnBhcmVudE5vZGUpLnBhdGgoYSk7Zy5hcHBlbmRDaGls ZChoLm5vZGUpLGQ9aC5pZCxoLmF0dHIoe2lkOmR9KX1lbHNlIGE9bChhKSxh IGluc3RhbmNlb2YgYyYmKGQ9YS5hdHRyKCJpZCIpLGR8fChkPWEuaWQsYS5h dHRyKHtpZDpkfSkpKTtpZihkKWlmKGU9dGhpcy50ZXh0UGF0aCxmPXRoaXMu bm9kZSxlKWUuYXR0cih7InhsaW5rOmhyZWYiOiIjIitkfSk7ZWxzZXtmb3Io ZT1wKCJ0ZXh0UGF0aCIseyJ4bGluazpocmVmIjoiIyIrZH0pO2YuZmlyc3RD aGlsZDspZS5hcHBlbmRDaGlsZChmLmZpcnN0Q2hpbGQpO2YuYXBwZW5kQ2hp bGQoZSksdGhpcy50ZXh0UGF0aD1sKGUpfX19KSgtMSksYi5vbigic25hcC51 dGlsLmF0dHIudGV4dCIsZnVuY3Rpb24oYSl7aWYoInRleHQiPT10aGlzLnR5 cGUpe2Zvcih2YXIgYz10aGlzLm5vZGUsZD1mdW5jdGlvbihhKXt2YXIgYj1w KCJ0c3BhbiIpO2lmKG0oYSwiYXJyYXkiKSlmb3IodmFyIGM9MDtjPGEubGVu Z3RoO2MrKyliLmFwcGVuZENoaWxkKGQoYVtjXSkpO2Vsc2UgYi5hcHBlbmRD aGlsZChlLmRvYy5jcmVhdGVUZXh0Tm9kZShhKSk7cmV0dXJuIGIubm9ybWFs aXplJiZiLm5vcm1hbGl6ZSgpLGJ9O2MuZmlyc3RDaGlsZDspYy5yZW1vdmVD aGlsZChjLmZpcnN0Q2hpbGQpO2Zvcih2YXIgZj1kKGEpO2YuZmlyc3RDaGls ZDspYy5hcHBlbmRDaGlsZChmLmZpcnN0Q2hpbGQpfWIuc3RvcCgpfSkoLTEp LGIub24oInNuYXAudXRpbC5hdHRyLmZvbnRTaXplIixoKSgtMSksYi5vbigi c25hcC51dGlsLmF0dHIuZm9udC1zaXplIixoKSgtMSksYi5vbigic25hcC51 dGlsLmdldGF0dHIudHJhbnNmb3JtIixmdW5jdGlvbigpe3JldHVybiBiLnN0 b3AoKSx0aGlzLnRyYW5zZm9ybSgpfSkoLTEpLGIub24oInNuYXAudXRpbC5n ZXRhdHRyLnRleHRwYXRoIixmdW5jdGlvbigpe3JldHVybiBiLnN0b3AoKSx0 aGlzLnRleHRQYXRofSkoLTEpLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYyhjKXty ZXR1cm4gZnVuY3Rpb24oKXtiLnN0b3AoKTt2YXIgZD1lLmRvYy5kZWZhdWx0 Vmlldy5nZXRDb21wdXRlZFN0eWxlKHRoaXMubm9kZSxudWxsKS5nZXRQcm9w ZXJ0eVZhbHVlKCJtYXJrZXItIitjKTtyZXR1cm4ibm9uZSI9PWQ/ZDphKGUu ZG9jLmdldEVsZW1lbnRCeUlkKGQubWF0Y2gobylbMV0pKX19ZnVuY3Rpb24g ZChhKXtyZXR1cm4gZnVuY3Rpb24oYyl7Yi5zdG9wKCk7dmFyIGQ9Im1hcmtl ciIrYS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSthLnN1YnN0cmluZygxKTtp ZigiIj09Y3x8IWMpcmV0dXJuIHZvaWQodGhpcy5ub2RlLnN0eWxlW2RdPSJu b25lIik7aWYoIm1hcmtlciI9PWMudHlwZSl7dmFyIGU9Yy5ub2RlLmlkO3Jl dHVybiBlfHxwKGMubm9kZSx7aWQ6Yy5pZH0pLHZvaWQodGhpcy5ub2RlLnN0 eWxlW2RdPXEoZSkpfX19Yi5vbigic25hcC51dGlsLmdldGF0dHIubWFya2Vy LWVuZCIsYygiZW5kIikpKC0xKSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5t YXJrZXJFbmQiLGMoImVuZCIpKSgtMSksYi5vbigic25hcC51dGlsLmdldGF0 dHIubWFya2VyLXN0YXJ0IixjKCJzdGFydCIpKSgtMSksYi5vbigic25hcC51 dGlsLmdldGF0dHIubWFya2VyU3RhcnQiLGMoInN0YXJ0IikpKC0xKSxiLm9u KCJzbmFwLnV0aWwuZ2V0YXR0ci5tYXJrZXItbWlkIixjKCJtaWQiKSkoLTEp LGIub24oInNuYXAudXRpbC5nZXRhdHRyLm1hcmtlck1pZCIsYygibWlkIikp KC0xKSxiLm9uKCJzbmFwLnV0aWwuYXR0ci5tYXJrZXItZW5kIixkKCJlbmQi KSkoLTEpLGIub24oInNuYXAudXRpbC5hdHRyLm1hcmtlckVuZCIsZCgiZW5k IikpKC0xKSxiLm9uKCJzbmFwLnV0aWwuYXR0ci5tYXJrZXItc3RhcnQiLGQo InN0YXJ0IikpKC0xKSxiLm9uKCJzbmFwLnV0aWwuYXR0ci5tYXJrZXJTdGFy dCIsZCgic3RhcnQiKSkoLTEpLGIub24oInNuYXAudXRpbC5hdHRyLm1hcmtl ci1taWQiLGQoIm1pZCIpKSgtMSksYi5vbigic25hcC51dGlsLmF0dHIubWFy a2VyTWlkIixkKCJtaWQiKSkoLTEpfSgpLGIub24oInNuYXAudXRpbC5nZXRh dHRyLnIiLGZ1bmN0aW9uKCl7cmV0dXJuInJlY3QiPT10aGlzLnR5cGUmJnAo dGhpcy5ub2RlLCJyeCIpPT1wKHRoaXMubm9kZSwicnkiKT8oYi5zdG9wKCks cCh0aGlzLm5vZGUsInJ4IikpOnZvaWQgMH0pKC0xKSxiLm9uKCJzbmFwLnV0 aWwuZ2V0YXR0ci50ZXh0IixmdW5jdGlvbigpe2lmKCJ0ZXh0Ij09dGhpcy50 eXBlfHwidHNwYW4iPT10aGlzLnR5cGUpe2Iuc3RvcCgpO3ZhciBhPWkodGhp cy5ub2RlKTtyZXR1cm4gMT09YS5sZW5ndGg/YVswXTphfX0pKC0xKSxiLm9u KCJzbmFwLnV0aWwuZ2V0YXR0ci4jdGV4dCIsZnVuY3Rpb24oKXtyZXR1cm4g dGhpcy5ub2RlLnRleHRDb250ZW50fSkoLTEpLGIub24oInNuYXAudXRpbC5n ZXRhdHRyLnZpZXdCb3giLGZ1bmN0aW9uKCl7Yi5zdG9wKCk7dmFyIGM9cCh0 aGlzLm5vZGUsInZpZXdCb3giKTtyZXR1cm4gYz8oYz1jLnNwbGl0KHMpLGEu Xy5ib3goK2NbMF0sK2NbMV0sK2NbMl0sK2NbM10pKTp2b2lkIDB9KSgtMSks Yi5vbigic25hcC51dGlsLmdldGF0dHIucG9pbnRzIixmdW5jdGlvbigpe3Zh ciBhPXAodGhpcy5ub2RlLCJwb2ludHMiKTtyZXR1cm4gYi5zdG9wKCksYT9h LnNwbGl0KHMpOnZvaWQgMH0pKC0xKSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0 ci5wYXRoIixmdW5jdGlvbigpe3ZhciBhPXAodGhpcy5ub2RlLCJkIik7cmV0 dXJuIGIuc3RvcCgpLGF9KSgtMSksYi5vbigic25hcC51dGlsLmdldGF0dHIu Y2xhc3MiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5jbGFzc05hbWUu YmFzZVZhbH0pKC0xKSxiLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5mb250U2l6 ZSIsaikoLTEpLGIub24oInNuYXAudXRpbC5nZXRhdHRyLmZvbnQtc2l6ZSIs aikoLTEpfSksZC5wbHVnaW4oZnVuY3Rpb24oYSxiKXt2YXIgYz0vXFMrL2cs ZD1TdHJpbmcsZT1iLnByb3RvdHlwZTtlLmFkZENsYXNzPWZ1bmN0aW9uKGEp e3ZhciBiLGUsZixnLGg9ZChhfHwiIikubWF0Y2goYyl8fFtdLGk9dGhpcy5u b2RlLGo9aS5jbGFzc05hbWUuYmFzZVZhbCxrPWoubWF0Y2goYyl8fFtdO2lm KGgubGVuZ3RoKXtmb3IoYj0wO2Y9aFtiKytdOyllPWsuaW5kZXhPZihmKSx+ ZXx8ay5wdXNoKGYpO2c9ay5qb2luKCIgIiksaiE9ZyYmKGkuY2xhc3NOYW1l LmJhc2VWYWw9Zyl9cmV0dXJuIHRoaXN9LGUucmVtb3ZlQ2xhc3M9ZnVuY3Rp b24oYSl7dmFyIGIsZSxmLGcsaD1kKGF8fCIiKS5tYXRjaChjKXx8W10saT10 aGlzLm5vZGUsaj1pLmNsYXNzTmFtZS5iYXNlVmFsLGs9ai5tYXRjaChjKXx8 W107aWYoay5sZW5ndGgpe2ZvcihiPTA7Zj1oW2IrK107KWU9ay5pbmRleE9m KGYpLH5lJiZrLnNwbGljZShlLDEpO2c9ay5qb2luKCIgIiksaiE9ZyYmKGku Y2xhc3NOYW1lLmJhc2VWYWw9Zyl9cmV0dXJuIHRoaXN9LGUuaGFzQ2xhc3M9 ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5ub2RlLGQ9Yi5jbGFzc05hbWUuYmFz ZVZhbCxlPWQubWF0Y2goYyl8fFtdO3JldHVybiEhfmUuaW5kZXhPZihhKX0s ZS50b2dnbGVDbGFzcz1mdW5jdGlvbihhLGIpe2lmKG51bGwhPWIpcmV0dXJu IGI/dGhpcy5hZGRDbGFzcyhhKTp0aGlzLnJlbW92ZUNsYXNzKGEpO3ZhciBk LGUsZixnLGg9KGF8fCIiKS5tYXRjaChjKXx8W10saT10aGlzLm5vZGUsaj1p LmNsYXNzTmFtZS5iYXNlVmFsLGs9ai5tYXRjaChjKXx8W107Zm9yKGQ9MDtm PWhbZCsrXTspZT1rLmluZGV4T2YoZiksfmU/ay5zcGxpY2UoZSwxKTprLnB1 c2goZik7cmV0dXJuIGc9ay5qb2luKCIgIiksaiE9ZyYmKGkuY2xhc3NOYW1l LmJhc2VWYWw9ZyksdGhpc319KSxkLnBsdWdpbihmdW5jdGlvbigpe2Z1bmN0 aW9uIGEoYSl7cmV0dXJuIGF9ZnVuY3Rpb24gYyhhKXtyZXR1cm4gZnVuY3Rp b24oYil7cmV0dXJuK2IudG9GaXhlZCgzKSthfX12YXIgZD17IisiOmZ1bmN0 aW9uKGEsYil7cmV0dXJuIGErYn0sIi0iOmZ1bmN0aW9uKGEsYil7cmV0dXJu IGEtYn0sIi8iOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGEvYn0sIioiOmZ1bmN0 aW9uKGEsYil7cmV0dXJuIGEqYn19LGU9U3RyaW5nLGY9L1thLXpdKyQvaSxn PS9eXHMqKFsrXC1cLypdKVxzKj1ccyooW1xkLmVFK1wtXSspXHMqKFteXGRc c10rKT9ccyokLztiLm9uKCJzbmFwLnV0aWwuYXR0ciIsZnVuY3Rpb24oYSl7 dmFyIGM9ZShhKS5tYXRjaChnKTtpZihjKXt2YXIgaD1iLm50KCksaT1oLnN1 YnN0cmluZyhoLmxhc3RJbmRleE9mKCIuIikrMSksaj10aGlzLmF0dHIoaSks az17fTtiLnN0b3AoKTt2YXIgbD1jWzNdfHwiIixtPWoubWF0Y2goZiksbj1k W2NbMV1dO2lmKG0mJm09PWw/YT1uKHBhcnNlRmxvYXQoaiksK2NbMl0pOihq PXRoaXMuYXNQWChpKSxhPW4odGhpcy5hc1BYKGkpLHRoaXMuYXNQWChpLGNb Ml0rbCkpKSxpc05hTihqKXx8aXNOYU4oYSkpcmV0dXJuO2tbaV09YSx0aGlz LmF0dHIoayl9fSkoLTEwKSxiLm9uKCJzbmFwLnV0aWwuZXF1YWwiLGZ1bmN0 aW9uKGgsaSl7dmFyIGo9ZSh0aGlzLmF0dHIoaCl8fCIiKSxrPWUoaSkubWF0 Y2goZyk7aWYoayl7Yi5zdG9wKCk7dmFyIGw9a1szXXx8IiIsbT1qLm1hdGNo KGYpLG49ZFtrWzFdXTtyZXR1cm4gbSYmbT09bD97ZnJvbTpwYXJzZUZsb2F0 KGopLHRvOm4ocGFyc2VGbG9hdChqKSwra1syXSksZjpjKG0pfTooaj10aGlz LmFzUFgoaCkse2Zyb206aix0bzpuKGosdGhpcy5hc1BYKGgsa1syXStsKSks ZjphfSl9fSkoLTEwKX0pLGQucGx1Z2luKGZ1bmN0aW9uKGMsZCxlLGYpe3Zh ciBnPWUucHJvdG90eXBlLGg9Yy5pcztnLnJlY3Q9ZnVuY3Rpb24oYSxiLGMs ZCxlLGYpe3ZhciBnO3JldHVybiBudWxsPT1mJiYoZj1lKSxoKGEsIm9iamVj dCIpJiYiW29iamVjdCBPYmplY3RdIj09YT9nPWE6bnVsbCE9YSYmKGc9e3g6 YSx5OmIsd2lkdGg6YyxoZWlnaHQ6ZH0sbnVsbCE9ZSYmKGcucng9ZSxnLnJ5 PWYpKSx0aGlzLmVsKCJyZWN0IixnKX0sZy5jaXJjbGU9ZnVuY3Rpb24oYSxi LGMpe3ZhciBkO3JldHVybiBoKGEsIm9iamVjdCIpJiYiW29iamVjdCBPYmpl Y3RdIj09YT9kPWE6bnVsbCE9YSYmKGQ9e2N4OmEsY3k6YixyOmN9KSx0aGlz LmVsKCJjaXJjbGUiLGQpfTt2YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGEo KXt0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyl9cmV0dXJuIGZ1 bmN0aW9uKGIsYyl7dmFyIGQ9Zi5kb2MuY3JlYXRlRWxlbWVudCgiaW1nIiks ZT1mLmRvYy5ib2R5O2Quc3R5bGUuY3NzVGV4dD0icG9zaXRpb246YWJzb2x1 dGU7bGVmdDotOTk5OWVtO3RvcDotOTk5OWVtIixkLm9ubG9hZD1mdW5jdGlv bigpe2MuY2FsbChkKSxkLm9ubG9hZD1kLm9uZXJyb3I9bnVsbCxlLnJlbW92 ZUNoaWxkKGQpfSxkLm9uZXJyb3I9YSxlLmFwcGVuZENoaWxkKGQpLGQuc3Jj PWJ9fSgpO2cuaW1hZ2U9ZnVuY3Rpb24oYSxiLGQsZSxmKXt2YXIgZz10aGlz LmVsKCJpbWFnZSIpO2lmKGgoYSwib2JqZWN0IikmJiJzcmMiaW4gYSlnLmF0 dHIoYSk7ZWxzZSBpZihudWxsIT1hKXt2YXIgaj17InhsaW5rOmhyZWYiOmEs cHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9O251bGwhPWImJm51bGwhPWQm JihqLng9YixqLnk9ZCksbnVsbCE9ZSYmbnVsbCE9Zj8oai53aWR0aD1lLGou aGVpZ2h0PWYpOmkoYSxmdW5jdGlvbigpe2MuXy4kKGcubm9kZSx7d2lkdGg6 dGhpcy5vZmZzZXRXaWR0aCxoZWlnaHQ6dGhpcy5vZmZzZXRIZWlnaHR9KX0p LGMuXy4kKGcubm9kZSxqKX1yZXR1cm4gZ30sZy5lbGxpcHNlPWZ1bmN0aW9u KGEsYixjLGQpe3ZhciBlO3JldHVybiBoKGEsIm9iamVjdCIpJiYiW29iamVj dCBPYmplY3RdIj09YT9lPWE6bnVsbCE9YSYmKGU9e2N4OmEsY3k6YixyeDpj LHJ5OmR9KSx0aGlzLmVsKCJlbGxpcHNlIixlKX0sZy5wYXRoPWZ1bmN0aW9u KGEpe3ZhciBiO3JldHVybiBoKGEsIm9iamVjdCIpJiYhaChhLCJhcnJheSIp P2I9YTphJiYoYj17ZDphfSksdGhpcy5lbCgicGF0aCIsYil9LGcuZ3JvdXA9 Zy5nPWZ1bmN0aW9uKGEpe3ZhciBiPXRoaXMuZWwoImciKTtyZXR1cm4gMT09 YXJndW1lbnRzLmxlbmd0aCYmYSYmIWEudHlwZT9iLmF0dHIoYSk6YXJndW1l bnRzLmxlbmd0aCYmYi5hZGQoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwo YXJndW1lbnRzLDApKSxifSxnLnN2Zz1mdW5jdGlvbihhLGIsYyxkLGUsZixn LGkpe3ZhciBqPXt9O3JldHVybiBoKGEsIm9iamVjdCIpJiZudWxsPT1iP2o9 YToobnVsbCE9YSYmKGoueD1hKSxudWxsIT1iJiYoai55PWIpLG51bGwhPWMm JihqLndpZHRoPWMpLG51bGwhPWQmJihqLmhlaWdodD1kKSxudWxsIT1lJiZu dWxsIT1mJiZudWxsIT1nJiZudWxsIT1pJiYoai52aWV3Qm94PVtlLGYsZyxp XSkpLHRoaXMuZWwoInN2ZyIsail9LGcubWFzaz1mdW5jdGlvbihhKXt2YXIg Yj10aGlzLmVsKCJtYXNrIik7cmV0dXJuIDE9PWFyZ3VtZW50cy5sZW5ndGgm JmEmJiFhLnR5cGU/Yi5hdHRyKGEpOmFyZ3VtZW50cy5sZW5ndGgmJmIuYWRk KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSksYn0s Zy5wdHJuPWZ1bmN0aW9uKGEsYixjLGQsZSxmLGcsaSl7aWYoaChhLCJvYmpl Y3QiKSl2YXIgaj1hO2Vsc2Ugaj17cGF0dGVyblVuaXRzOiJ1c2VyU3BhY2VP blVzZSJ9LGEmJihqLng9YSksYiYmKGoueT1iKSxudWxsIT1jJiYoai53aWR0 aD1jKSxudWxsIT1kJiYoai5oZWlnaHQ9ZCksai52aWV3Qm94PW51bGwhPWUm Jm51bGwhPWYmJm51bGwhPWcmJm51bGwhPWk/W2UsZixnLGldOlthfHwwLGJ8 fDAsY3x8MCxkfHwwXTtyZXR1cm4gdGhpcy5lbCgicGF0dGVybiIsail9LGcu dXNlPWZ1bmN0aW9uKGEpe3JldHVybiBudWxsIT1hPyhhIGluc3RhbmNlb2Yg ZCYmKGEuYXR0cigiaWQiKXx8YS5hdHRyKHtpZDpjLl8uaWQoYSl9KSxhPWEu YXR0cigiaWQiKSksIiMiPT1TdHJpbmcoYSkuY2hhckF0KCkmJihhPWEuc3Vi c3RyaW5nKDEpKSx0aGlzLmVsKCJ1c2UiLHsieGxpbms6aHJlZiI6IiMiK2F9 KSk6ZC5wcm90b3R5cGUudXNlLmNhbGwodGhpcyl9LGcuc3ltYm9sPWZ1bmN0 aW9uKGEsYixjLGQpe3ZhciBlPXt9O3JldHVybiBudWxsIT1hJiZudWxsIT1i JiZudWxsIT1jJiZudWxsIT1kJiYoZS52aWV3Qm94PVthLGIsYyxkXSksdGhp cy5lbCgic3ltYm9sIixlKX0sZy50ZXh0PWZ1bmN0aW9uKGEsYixjKXt2YXIg ZD17fTtyZXR1cm4gaChhLCJvYmplY3QiKT9kPWE6bnVsbCE9YSYmKGQ9e3g6 YSx5OmIsdGV4dDpjfHwiIn0pLHRoaXMuZWwoInRleHQiLGQpfSxnLmxpbmU9 ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIGU9e307cmV0dXJuIGgoYSwib2JqZWN0 Iik/ZT1hOm51bGwhPWEmJihlPXt4MTphLHgyOmMseTE6Yix5MjpkfSksdGhp cy5lbCgibGluZSIsZSl9LGcucG9seWxpbmU9ZnVuY3Rpb24oYSl7YXJndW1l bnRzLmxlbmd0aD4xJiYoYT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChh cmd1bWVudHMsMCkpO3ZhciBiPXt9O3JldHVybiBoKGEsIm9iamVjdCIpJiYh aChhLCJhcnJheSIpP2I9YTpudWxsIT1hJiYoYj17cG9pbnRzOmF9KSx0aGlz LmVsKCJwb2x5bGluZSIsYil9LGcucG9seWdvbj1mdW5jdGlvbihhKXthcmd1 bWVudHMubGVuZ3RoPjEmJihhPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxs KGFyZ3VtZW50cywwKSk7dmFyIGI9e307cmV0dXJuIGgoYSwib2JqZWN0Iikm JiFoKGEsImFycmF5Iik/Yj1hOm51bGwhPWEmJihiPXtwb2ludHM6YX0pLHRo aXMuZWwoInBvbHlnb24iLGIpfSxmdW5jdGlvbigpe2Z1bmN0aW9uIGQoKXty ZXR1cm4gdGhpcy5zZWxlY3RBbGwoInN0b3AiKX1mdW5jdGlvbiBlKGEsYil7 dmFyIGQ9aygic3RvcCIpLGU9e29mZnNldDorYisiJSJ9O3JldHVybiBhPWMu Y29sb3IoYSksZVsic3RvcC1jb2xvciJdPWEuaGV4LGEub3BhY2l0eTwxJiYo ZVsic3RvcC1vcGFjaXR5Il09YS5vcGFjaXR5KSxrKGQsZSksdGhpcy5ub2Rl LmFwcGVuZENoaWxkKGQpLHRoaXN9ZnVuY3Rpb24gZigpe2lmKCJsaW5lYXJH cmFkaWVudCI9PXRoaXMudHlwZSl7dmFyIGE9ayh0aGlzLm5vZGUsIngxIil8 fDAsYj1rKHRoaXMubm9kZSwieDIiKXx8MSxkPWsodGhpcy5ub2RlLCJ5MSIp fHwwLGU9ayh0aGlzLm5vZGUsInkyIil8fDA7cmV0dXJuIGMuXy5ib3goYSxk LG1hdGguYWJzKGItYSksbWF0aC5hYnMoZS1kKSl9dmFyIGY9dGhpcy5ub2Rl LmN4fHwuNSxnPXRoaXMubm9kZS5jeXx8LjUsaD10aGlzLm5vZGUucnx8MDty ZXR1cm4gYy5fLmJveChmLWgsZy1oLDIqaCwyKmgpfWZ1bmN0aW9uIGgoYSxj KXtmdW5jdGlvbiBkKGEsYil7Zm9yKHZhciBjPShiLWwpLyhhLW0pLGQ9bTth PmQ7ZCsrKWdbZF0ub2Zmc2V0PSsoK2wrYyooZC1tKSkudG9GaXhlZCgyKTtt PWEsbD1ifXZhciBlLGY9Yigic25hcC51dGlsLmdyYWQucGFyc2UiLG51bGws YykuZmlyc3REZWZpbmVkKCk7aWYoIWYpcmV0dXJuIG51bGw7Zi5wYXJhbXMu dW5zaGlmdChhKSxlPSJsIj09Zi50eXBlLnRvTG93ZXJDYXNlKCk/aS5hcHBs eSgwLGYucGFyYW1zKTpqLmFwcGx5KDAsZi5wYXJhbXMpLGYudHlwZSE9Zi50 eXBlLnRvTG93ZXJDYXNlKCkmJmsoZS5ub2RlLHtncmFkaWVudFVuaXRzOiJ1 c2VyU3BhY2VPblVzZSJ9KTt2YXIgZz1mLnN0b3BzLGg9Zy5sZW5ndGgsbD0w LG09MDtoLS07Zm9yKHZhciBuPTA7aD5uO24rKykib2Zmc2V0ImluIGdbbl0m JmQobixnW25dLm9mZnNldCk7Zm9yKGdbaF0ub2Zmc2V0PWdbaF0ub2Zmc2V0 fHwxMDAsZChoLGdbaF0ub2Zmc2V0KSxuPTA7aD49bjtuKyspe3ZhciBvPWdb bl07ZS5hZGRTdG9wKG8uY29sb3Isby5vZmZzZXQpfXJldHVybiBlfWZ1bmN0 aW9uIGkoYSxiLGcsaCxpKXt2YXIgaj1jLl8ubWFrZSgibGluZWFyR3JhZGll bnQiLGEpO3JldHVybiBqLnN0b3BzPWQsai5hZGRTdG9wPWUsai5nZXRCQm94 PWYsbnVsbCE9YiYmayhqLm5vZGUse3gxOmIseTE6Zyx4MjpoLHkyOml9KSxq fWZ1bmN0aW9uIGooYSxiLGcsaCxpLGope3ZhciBsPWMuXy5tYWtlKCJyYWRp YWxHcmFkaWVudCIsYSk7cmV0dXJuIGwuc3RvcHM9ZCxsLmFkZFN0b3A9ZSxs LmdldEJCb3g9ZixudWxsIT1iJiZrKGwubm9kZSx7Y3g6YixjeTpnLHI6aH0p LG51bGwhPWkmJm51bGwhPWomJmsobC5ub2RlLHtmeDppLGZ5Omp9KSxsfXZh ciBrPWMuXy4kO2cuZ3JhZGllbnQ9ZnVuY3Rpb24oYSl7cmV0dXJuIGgodGhp cy5kZWZzLGEpfSxnLmdyYWRpZW50TGluZWFyPWZ1bmN0aW9uKGEsYixjLGQp e3JldHVybiBpKHRoaXMuZGVmcyxhLGIsYyxkKX0sZy5ncmFkaWVudFJhZGlh bD1mdW5jdGlvbihhLGIsYyxkLGUpe3JldHVybiBqKHRoaXMuZGVmcyxhLGIs YyxkLGUpfSxnLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGEsYj10aGlzLm5v ZGUub3duZXJEb2N1bWVudCxkPWIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp LGU9Yi5jcmVhdGVFbGVtZW50KCJkaXYiKSxmPXRoaXMubm9kZS5jbG9uZU5v ZGUoITApO3JldHVybiBkLmFwcGVuZENoaWxkKGUpLGUuYXBwZW5kQ2hpbGQo ZiksYy5fLiQoZix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3Zn In0pLGE9ZS5pbm5lckhUTUwsZC5yZW1vdmVDaGlsZChkLmZpcnN0Q2hpbGQp LGF9LGcudG9EYXRhVVJMPWZ1bmN0aW9uKCl7cmV0dXJuIGEmJmEuYnRvYT8i ZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCwiK2J0b2EodW5lc2NhcGUoZW5j b2RlVVJJQ29tcG9uZW50KHRoaXMpKSk6dm9pZCAwfSxnLmNsZWFyPWZ1bmN0 aW9uKCl7Zm9yKHZhciBhLGI9dGhpcy5ub2RlLmZpcnN0Q2hpbGQ7YjspYT1i Lm5leHRTaWJsaW5nLCJkZWZzIiE9Yi50YWdOYW1lP2IucGFyZW50Tm9kZS5y ZW1vdmVDaGlsZChiKTpnLmNsZWFyLmNhbGwoe25vZGU6Yn0pLGI9YX19KCl9 KSxkLnBsdWdpbihmdW5jdGlvbihhLGIpe2Z1bmN0aW9uIGMoYSl7dmFyIGI9 Yy5wcz1jLnBzfHx7fTtyZXR1cm4gYlthXT9iW2FdLnNsZWVwPTEwMDpiW2Fd PXtzbGVlcDoxMDB9LHNldFRpbWVvdXQoZnVuY3Rpb24oKXtmb3IodmFyIGMg aW4gYiliW0tdKGMpJiZjIT1hJiYoYltjXS5zbGVlcC0tLCFiW2NdLnNsZWVw JiZkZWxldGUgYltjXSl9KSxiW2FdfWZ1bmN0aW9uIGQoYSxiLGMsZCl7cmV0 dXJuIG51bGw9PWEmJihhPWI9Yz1kPTApLG51bGw9PWImJihiPWEueSxjPWEu d2lkdGgsZD1hLmhlaWdodCxhPWEueCkse3g6YSx5OmIsd2lkdGg6Yyx3OmMs aGVpZ2h0OmQsaDpkLHgyOmErYyx5MjpiK2QsY3g6YStjLzIsY3k6YitkLzIs cjE6Ti5taW4oYyxkKS8yLHIyOk4ubWF4KGMsZCkvMixyMDpOLnNxcnQoYypj K2QqZCkvMixwYXRoOncoYSxiLGMsZCksdmI6W2EsYixjLGRdLmpvaW4oIiAi KX19ZnVuY3Rpb24gZSgpe3JldHVybiB0aGlzLmpvaW4oIiwiKS5yZXBsYWNl KEwsIiQxIil9ZnVuY3Rpb24gZihhKXt2YXIgYj1KKGEpO3JldHVybiBiLnRv U3RyaW5nPWUsYn1mdW5jdGlvbiBnKGEsYixjLGQsZSxmLGcsaCxqKXtyZXR1 cm4gbnVsbD09aj9uKGEsYixjLGQsZSxmLGcsaCk6aShhLGIsYyxkLGUsZixn LGgsbyhhLGIsYyxkLGUsZixnLGgsaikpfWZ1bmN0aW9uIGgoYyxkKXtmdW5j dGlvbiBlKGEpe3JldHVybisoK2EpLnRvRml4ZWQoMyl9cmV0dXJuIGEuXy5j YWNoZXIoZnVuY3Rpb24oYSxmLGgpe2EgaW5zdGFuY2VvZiBiJiYoYT1hLmF0 dHIoImQiKSksYT1FKGEpO2Zvcih2YXIgaixrLGwsbSxuLG89IiIscD17fSxx PTAscj0wLHM9YS5sZW5ndGg7cz5yO3IrKyl7aWYobD1hW3JdLCJNIj09bFsw XSlqPStsWzFdLGs9K2xbMl07ZWxzZXtpZihtPWcoaixrLGxbMV0sbFsyXSxs WzNdLGxbNF0sbFs1XSxsWzZdKSxxK20+Zil7aWYoZCYmIXAuc3RhcnQpe2lm KG49ZyhqLGssbFsxXSxsWzJdLGxbM10sbFs0XSxsWzVdLGxbNl0sZi1xKSxv Kz1bIkMiK2Uobi5zdGFydC54KSxlKG4uc3RhcnQueSksZShuLm0ueCksZShu Lm0ueSksZShuLngpLGUobi55KV0saClyZXR1cm4gbztwLnN0YXJ0PW8sbz1b Ik0iK2Uobi54KSxlKG4ueSkrIkMiK2Uobi5uLngpLGUobi5uLnkpLGUobi5l bmQueCksZShuLmVuZC55KSxlKGxbNV0pLGUobFs2XSldLmpvaW4oKSxxKz1t LGo9K2xbNV0saz0rbFs2XTtjb250aW51ZX1pZighYyYmIWQpcmV0dXJuIG49 ZyhqLGssbFsxXSxsWzJdLGxbM10sbFs0XSxsWzVdLGxbNl0sZi1xKX1xKz1t LGo9K2xbNV0saz0rbFs2XX1vKz1sLnNoaWZ0KCkrbH1yZXR1cm4gcC5lbmQ9 byxuPWM/cTpkP3A6aShqLGssbFswXSxsWzFdLGxbMl0sbFszXSxsWzRdLGxb NV0sMSl9LG51bGwsYS5fLmNsb25lKX1mdW5jdGlvbiBpKGEsYixjLGQsZSxm LGcsaCxpKXt2YXIgaj0xLWksaz1SKGosMyksbD1SKGosMiksbT1pKmksbj1t Kmksbz1rKmErMypsKmkqYyszKmoqaSppKmUrbipnLHA9aypiKzMqbCppKmQr MypqKmkqaSpmK24qaCxxPWErMippKihjLWEpK20qKGUtMipjK2EpLHI9Yisy KmkqKGQtYikrbSooZi0yKmQrYikscz1jKzIqaSooZS1jKSttKihnLTIqZStj KSx0PWQrMippKihmLWQpK20qKGgtMipmK2QpLHU9aiphK2kqYyx2PWoqYitp KmQsdz1qKmUraSpnLHg9aipmK2kqaCx5PTkwLTE4MCpOLmF0YW4yKHEtcyxy LXQpL087cmV0dXJue3g6byx5OnAsbTp7eDpxLHk6cn0sbjp7eDpzLHk6dH0s c3RhcnQ6e3g6dSx5OnZ9LGVuZDp7eDp3LHk6eH0sYWxwaGE6eX19ZnVuY3Rp b24gaihiLGMsZSxmLGcsaCxpLGope2EuaXMoYiwiYXJyYXkiKXx8KGI9W2Is YyxlLGYsZyxoLGksal0pO3ZhciBrPUQuYXBwbHkobnVsbCxiKTtyZXR1cm4g ZChrLm1pbi54LGsubWluLnksay5tYXgueC1rLm1pbi54LGsubWF4Lnktay5t aW4ueSl9ZnVuY3Rpb24gayhhLGIsYyl7cmV0dXJuIGI+PWEueCYmYjw9YS54 K2Eud2lkdGgmJmM+PWEueSYmYzw9YS55K2EuaGVpZ2h0fWZ1bmN0aW9uIGwo YSxiKXtyZXR1cm4gYT1kKGEpLGI9ZChiKSxrKGIsYS54LGEueSl8fGsoYixh LngyLGEueSl8fGsoYixhLngsYS55Mil8fGsoYixhLngyLGEueTIpfHxrKGEs Yi54LGIueSl8fGsoYSxiLngyLGIueSl8fGsoYSxiLngsYi55Mil8fGsoYSxi LngyLGIueTIpfHwoYS54PGIueDImJmEueD5iLnh8fGIueDxhLngyJiZiLng+ YS54KSYmKGEueTxiLnkyJiZhLnk+Yi55fHxiLnk8YS55MiYmYi55PmEueSl9 ZnVuY3Rpb24gbShhLGIsYyxkLGUpe3ZhciBmPS0zKmIrOSpjLTkqZCszKmUs Zz1hKmYrNipiLTEyKmMrNipkO3JldHVybiBhKmctMypiKzMqY31mdW5jdGlv biBuKGEsYixjLGQsZSxmLGcsaCxpKXtudWxsPT1pJiYoaT0xKSxpPWk+MT8x OjA+aT8wOmk7Zm9yKHZhciBqPWkvMixrPTEyLGw9Wy0uMTI1MiwuMTI1Miwt LjM2NzgsLjM2NzgsLS41ODczLC41ODczLC0uNzY5OSwuNzY5OSwtLjkwNDEs LjkwNDEsLS45ODE2LC45ODE2XSxuPVsuMjQ5MSwuMjQ5MSwuMjMzNSwuMjMz NSwuMjAzMiwuMjAzMiwuMTYwMSwuMTYwMSwuMTA2OSwuMTA2OSwuMDQ3Miwu MDQ3Ml0sbz0wLHA9MDtrPnA7cCsrKXt2YXIgcT1qKmxbcF0raixyPW0ocSxh LGMsZSxnKSxzPW0ocSxiLGQsZixoKSx0PXIqcitzKnM7bys9bltwXSpOLnNx cnQodCl9cmV0dXJuIGoqb31mdW5jdGlvbiBvKGEsYixjLGQsZSxmLGcsaCxp KXtpZighKDA+aXx8bihhLGIsYyxkLGUsZixnLGgpPGkpKXt2YXIgaixrPTEs bD1rLzIsbT1rLWwsbz0uMDE7Zm9yKGo9bihhLGIsYyxkLGUsZixnLGgsbSk7 UyhqLWkpPm87KWwvPTIsbSs9KGk+aj8xOi0xKSpsLGo9bihhLGIsYyxkLGUs ZixnLGgsbSk7cmV0dXJuIG19fWZ1bmN0aW9uIHAoYSxiLGMsZCxlLGYsZyxo KXtpZighKFEoYSxjKTxQKGUsZyl8fFAoYSxjKT5RKGUsZyl8fFEoYixkKTxQ KGYsaCl8fFAoYixkKT5RKGYsaCkpKXt2YXIgaT0oYSpkLWIqYykqKGUtZykt KGEtYykqKGUqaC1mKmcpLGo9KGEqZC1iKmMpKihmLWgpLShiLWQpKihlKmgt ZipnKSxrPShhLWMpKihmLWgpLShiLWQpKihlLWcpO2lmKGspe3ZhciBsPWkv ayxtPWovayxuPStsLnRvRml4ZWQoMiksbz0rbS50b0ZpeGVkKDIpO2lmKCEo bjwrUChhLGMpLnRvRml4ZWQoMil8fG4+K1EoYSxjKS50b0ZpeGVkKDIpfHxu PCtQKGUsZykudG9GaXhlZCgyKXx8bj4rUShlLGcpLnRvRml4ZWQoMil8fG88 K1AoYixkKS50b0ZpeGVkKDIpfHxvPitRKGIsZCkudG9GaXhlZCgyKXx8bzwr UChmLGgpLnRvRml4ZWQoMil8fG8+K1EoZixoKS50b0ZpeGVkKDIpKSlyZXR1 cm57eDpsLHk6bX19fX1mdW5jdGlvbiBxKGEsYixjKXt2YXIgZD1qKGEpLGU9 aihiKTtpZighbChkLGUpKXJldHVybiBjPzA6W107Zm9yKHZhciBmPW4uYXBw bHkoMCxhKSxnPW4uYXBwbHkoMCxiKSxoPX5+KGYvOCksaz1+fihnLzgpLG09 W10sbz1bXSxxPXt9LHI9Yz8wOltdLHM9MDtoKzE+cztzKyspe3ZhciB0PWku YXBwbHkoMCxhLmNvbmNhdChzL2gpKTttLnB1c2goe3g6dC54LHk6dC55LHQ6 cy9ofSl9Zm9yKHM9MDtrKzE+cztzKyspdD1pLmFwcGx5KDAsYi5jb25jYXQo cy9rKSksby5wdXNoKHt4OnQueCx5OnQueSx0OnMva30pO2ZvcihzPTA7aD5z O3MrKylmb3IodmFyIHU9MDtrPnU7dSsrKXt2YXIgdj1tW3NdLHc9bVtzKzFd LHg9b1t1XSx5PW9bdSsxXSx6PVMody54LXYueCk8LjAwMT8ieSI6IngiLEE9 Uyh5LngteC54KTwuMDAxPyJ5IjoieCIsQj1wKHYueCx2Lnksdy54LHcueSx4 LngseC55LHkueCx5LnkpO2lmKEIpe2lmKHFbQi54LnRvRml4ZWQoNCldPT1C LnkudG9GaXhlZCg0KSljb250aW51ZTtxW0IueC50b0ZpeGVkKDQpXT1CLnku dG9GaXhlZCg0KTt2YXIgQz12LnQrUygoQlt6XS12W3pdKS8od1t6XS12W3pd KSkqKHcudC12LnQpLEQ9eC50K1MoKEJbQV0teFtBXSkvKHlbQV0teFtBXSkp Kih5LnQteC50KTtDPj0wJiYxPj1DJiZEPj0wJiYxPj1EJiYoYz9yKys6ci5w dXNoKHt4OkIueCx5OkIueSx0MTpDLHQyOkR9KSl9fXJldHVybiByfWZ1bmN0 aW9uIHIoYSxiKXtyZXR1cm4gdChhLGIpfWZ1bmN0aW9uIHMoYSxiKXtyZXR1 cm4gdChhLGIsMSl9ZnVuY3Rpb24gdChhLGIsYyl7YT1FKGEpLGI9RShiKTtm b3IodmFyIGQsZSxmLGcsaCxpLGosayxsLG0sbj1jPzA6W10sbz0wLHA9YS5s ZW5ndGg7cD5vO28rKyl7dmFyIHI9YVtvXTtpZigiTSI9PXJbMF0pZD1oPXJb MV0sZT1pPXJbMl07ZWxzZXsiQyI9PXJbMF0/KGw9W2QsZV0uY29uY2F0KHIu c2xpY2UoMSkpLGQ9bFs2XSxlPWxbN10pOihsPVtkLGUsZCxlLGgsaSxoLGld LGQ9aCxlPWkpO2Zvcih2YXIgcz0wLHQ9Yi5sZW5ndGg7dD5zO3MrKyl7dmFy IHU9YltzXTtpZigiTSI9PXVbMF0pZj1qPXVbMV0sZz1rPXVbMl07ZWxzZXsi QyI9PXVbMF0/KG09W2YsZ10uY29uY2F0KHUuc2xpY2UoMSkpLGY9bVs2XSxn PW1bN10pOihtPVtmLGcsZixnLGosayxqLGtdLGY9aixnPWspO3ZhciB2PXEo bCxtLGMpO2lmKGMpbis9djtlbHNle2Zvcih2YXIgdz0wLHg9di5sZW5ndGg7 eD53O3crKyl2W3ddLnNlZ21lbnQxPW8sdlt3XS5zZWdtZW50Mj1zLHZbd10u YmV6MT1sLHZbd10uYmV6Mj1tO249bi5jb25jYXQodil9fX19fXJldHVybiBu fWZ1bmN0aW9uIHUoYSxiLGMpe3ZhciBkPXYoYSk7cmV0dXJuIGsoZCxiLGMp JiZ0KGEsW1siTSIsYixjXSxbIkgiLGQueDIrMTBdXSwxKSUyPT0xfWZ1bmN0 aW9uIHYoYSl7dmFyIGI9YyhhKTtpZihiLmJib3gpcmV0dXJuIEooYi5iYm94 KTtpZighYSlyZXR1cm4gZCgpO2E9RShhKTtmb3IodmFyIGUsZj0wLGc9MCxo PVtdLGk9W10saj0wLGs9YS5sZW5ndGg7az5qO2orKylpZihlPWFbal0sIk0i PT1lWzBdKWY9ZVsxXSxnPWVbMl0saC5wdXNoKGYpLGkucHVzaChnKTtlbHNl e3ZhciBsPUQoZixnLGVbMV0sZVsyXSxlWzNdLGVbNF0sZVs1XSxlWzZdKTto PWguY29uY2F0KGwubWluLngsbC5tYXgueCksaT1pLmNvbmNhdChsLm1pbi55 LGwubWF4LnkpLGY9ZVs1XSxnPWVbNl19dmFyIG09UC5hcHBseSgwLGgpLG49 UC5hcHBseSgwLGkpLG89US5hcHBseSgwLGgpLHA9US5hcHBseSgwLGkpLHE9 ZChtLG4sby1tLHAtbik7cmV0dXJuIGIuYmJveD1KKHEpLHF9ZnVuY3Rpb24g dyhhLGIsYyxkLGYpe2lmKGYpcmV0dXJuW1siTSIsK2ErICtmLGJdLFsibCIs Yy0yKmYsMF0sWyJhIixmLGYsMCwwLDEsZixmXSxbImwiLDAsZC0yKmZdLFsi YSIsZixmLDAsMCwxLC1mLGZdLFsibCIsMipmLWMsMF0sWyJhIixmLGYsMCww LDEsLWYsLWZdLFsibCIsMCwyKmYtZF0sWyJhIixmLGYsMCwwLDEsZiwtZl0s WyJ6Il1dO3ZhciBnPVtbIk0iLGEsYl0sWyJsIixjLDBdLFsibCIsMCxkXSxb ImwiLC1jLDBdLFsieiJdXTtyZXR1cm4gZy50b1N0cmluZz1lLGd9ZnVuY3Rp b24geChhLGIsYyxkLGYpe2lmKG51bGw9PWYmJm51bGw9PWQmJihkPWMpLGE9 K2EsYj0rYixjPStjLGQ9K2QsbnVsbCE9Zil2YXIgZz1NYXRoLlBJLzE4MCxo PWErYypNYXRoLmNvcygtZCpnKSxpPWErYypNYXRoLmNvcygtZipnKSxqPWIr YypNYXRoLnNpbigtZCpnKSxrPWIrYypNYXRoLnNpbigtZipnKSxsPVtbIk0i LGgsal0sWyJBIixjLGMsMCwrKGYtZD4xODApLDAsaSxrXV07ZWxzZSBsPVtb Ik0iLGEsYl0sWyJtIiwwLC1kXSxbImEiLGMsZCwwLDEsMSwwLDIqZF0sWyJh IixjLGQsMCwxLDEsMCwtMipkXSxbInoiXV07cmV0dXJuIGwudG9TdHJpbmc9 ZSxsfWZ1bmN0aW9uIHkoYil7dmFyIGQ9YyhiKSxnPVN0cmluZy5wcm90b3R5 cGUudG9Mb3dlckNhc2U7aWYoZC5yZWwpcmV0dXJuIGYoZC5yZWwpO2EuaXMo YiwiYXJyYXkiKSYmYS5pcyhiJiZiWzBdLCJhcnJheSIpfHwoYj1hLnBhcnNl UGF0aFN0cmluZyhiKSk7dmFyIGg9W10saT0wLGo9MCxrPTAsbD0wLG09MDsi TSI9PWJbMF1bMF0mJihpPWJbMF1bMV0saj1iWzBdWzJdLGs9aSxsPWosbSsr LGgucHVzaChbIk0iLGksal0pKTtmb3IodmFyIG49bSxvPWIubGVuZ3RoO28+ bjtuKyspe3ZhciBwPWhbbl09W10scT1iW25dO2lmKHFbMF0hPWcuY2FsbChx WzBdKSlzd2l0Y2gocFswXT1nLmNhbGwocVswXSkscFswXSl7Y2FzZSJhIjpw WzFdPXFbMV0scFsyXT1xWzJdLHBbM109cVszXSxwWzRdPXFbNF0scFs1XT1x WzVdLHBbNl09KyhxWzZdLWkpLnRvRml4ZWQoMykscFs3XT0rKHFbN10taiku dG9GaXhlZCgzKTticmVhaztjYXNlInYiOnBbMV09KyhxWzFdLWopLnRvRml4 ZWQoMyk7YnJlYWs7Y2FzZSJtIjprPXFbMV0sbD1xWzJdO2RlZmF1bHQ6Zm9y KHZhciByPTEscz1xLmxlbmd0aDtzPnI7cisrKXBbcl09KyhxW3JdLShyJTI/ aTpqKSkudG9GaXhlZCgzKX1lbHNle3A9aFtuXT1bXSwibSI9PXFbMF0mJihr PXFbMV0raSxsPXFbMl0raik7Zm9yKHZhciB0PTAsdT1xLmxlbmd0aDt1PnQ7 dCsrKWhbbl1bdF09cVt0XX12YXIgdj1oW25dLmxlbmd0aDtzd2l0Y2goaFtu XVswXSl7Y2FzZSJ6IjppPWssaj1sO2JyZWFrO2Nhc2UiaCI6aSs9K2hbbl1b di0xXTticmVhaztjYXNlInYiOmorPStoW25dW3YtMV07YnJlYWs7ZGVmYXVs dDppKz0raFtuXVt2LTJdLGorPStoW25dW3YtMV19fXJldHVybiBoLnRvU3Ry aW5nPWUsZC5yZWw9ZihoKSxofWZ1bmN0aW9uIHooYil7dmFyIGQ9YyhiKTtp ZihkLmFicylyZXR1cm4gZihkLmFicyk7aWYoSShiLCJhcnJheSIpJiZJKGIm JmJbMF0sImFycmF5Iil8fChiPWEucGFyc2VQYXRoU3RyaW5nKGIpKSwhYnx8 IWIubGVuZ3RoKXJldHVybltbIk0iLDAsMF1dO3ZhciBnLGg9W10saT0wLGo9 MCxrPTAsbD0wLG09MDsiTSI9PWJbMF1bMF0mJihpPStiWzBdWzFdLGo9K2Jb MF1bMl0saz1pLGw9aixtKyssaFswXT1bIk0iLGksal0pO2Zvcih2YXIgbixv LHA9Mz09Yi5sZW5ndGgmJiJNIj09YlswXVswXSYmIlIiPT1iWzFdWzBdLnRv VXBwZXJDYXNlKCkmJiJaIj09YlsyXVswXS50b1VwcGVyQ2FzZSgpLHE9bSxy PWIubGVuZ3RoO3I+cTtxKyspe2lmKGgucHVzaChuPVtdKSxvPWJbcV0sZz1v WzBdLGchPWcudG9VcHBlckNhc2UoKSlzd2l0Y2goblswXT1nLnRvVXBwZXJD YXNlKCksblswXSl7Y2FzZSJBIjpuWzFdPW9bMV0sblsyXT1vWzJdLG5bM109 b1szXSxuWzRdPW9bNF0sbls1XT1vWzVdLG5bNl09K29bNl0raSxuWzddPStv WzddK2o7YnJlYWs7Y2FzZSJWIjpuWzFdPStvWzFdK2o7YnJlYWs7Y2FzZSJI IjpuWzFdPStvWzFdK2k7YnJlYWs7Y2FzZSJSIjpmb3IodmFyIHM9W2ksal0u Y29uY2F0KG8uc2xpY2UoMSkpLHQ9Mix1PXMubGVuZ3RoO3U+dDt0Kyspc1t0 XT0rc1t0XStpLHNbKyt0XT0rc1t0XStqO2gucG9wKCksaD1oLmNvbmNhdChH KHMscCkpO2JyZWFrO2Nhc2UiTyI6aC5wb3AoKSxzPXgoaSxqLG9bMV0sb1sy XSkscy5wdXNoKHNbMF0pLGg9aC5jb25jYXQocyk7YnJlYWs7Y2FzZSJVIjpo LnBvcCgpLGg9aC5jb25jYXQoeChpLGosb1sxXSxvWzJdLG9bM10pKSxuPVsi VSJdLmNvbmNhdChoW2gubGVuZ3RoLTFdLnNsaWNlKC0yKSk7YnJlYWs7Y2Fz ZSJNIjprPStvWzFdK2ksbD0rb1syXStqO2RlZmF1bHQ6Zm9yKHQ9MSx1PW8u bGVuZ3RoO3U+dDt0Kyspblt0XT0rb1t0XSsodCUyP2k6ail9ZWxzZSBpZigi UiI9PWcpcz1baSxqXS5jb25jYXQoby5zbGljZSgxKSksaC5wb3AoKSxoPWgu Y29uY2F0KEcocyxwKSksbj1bIlIiXS5jb25jYXQoby5zbGljZSgtMikpO2Vs c2UgaWYoIk8iPT1nKWgucG9wKCkscz14KGksaixvWzFdLG9bMl0pLHMucHVz aChzWzBdKSxoPWguY29uY2F0KHMpO2Vsc2UgaWYoIlUiPT1nKWgucG9wKCks aD1oLmNvbmNhdCh4KGksaixvWzFdLG9bMl0sb1szXSkpLG49WyJVIl0uY29u Y2F0KGhbaC5sZW5ndGgtMV0uc2xpY2UoLTIpKTtlbHNlIGZvcih2YXIgdj0w LHc9by5sZW5ndGg7dz52O3YrKyluW3ZdPW9bdl07aWYoZz1nLnRvVXBwZXJD YXNlKCksIk8iIT1nKXN3aXRjaChuWzBdKXtjYXNlIloiOmk9K2ssaj0rbDti cmVhaztjYXNlIkgiOmk9blsxXTticmVhaztjYXNlIlYiOmo9blsxXTticmVh aztjYXNlIk0iOms9bltuLmxlbmd0aC0yXSxsPW5bbi5sZW5ndGgtMV07ZGVm YXVsdDppPW5bbi5sZW5ndGgtMl0saj1uW24ubGVuZ3RoLTFdfX1yZXR1cm4g aC50b1N0cmluZz1lLGQuYWJzPWYoaCksaH1mdW5jdGlvbiBBKGEsYixjLGQp e3JldHVyblthLGIsYyxkLGMsZF19ZnVuY3Rpb24gQihhLGIsYyxkLGUsZil7 dmFyIGc9MS8zLGg9Mi8zO3JldHVybltnKmEraCpjLGcqYitoKmQsZyplK2gq YyxnKmYraCpkLGUsZl19ZnVuY3Rpb24gQyhiLGMsZCxlLGYsZyxoLGksaixr KXt2YXIgbCxtPTEyMCpPLzE4MCxuPU8vMTgwKigrZnx8MCksbz1bXSxwPWEu Xy5jYWNoZXIoZnVuY3Rpb24oYSxiLGMpe3ZhciBkPWEqTi5jb3MoYyktYipO LnNpbihjKSxlPWEqTi5zaW4oYykrYipOLmNvcyhjKTtyZXR1cm57eDpkLHk6 ZX19KTtpZihrKXk9a1swXSx6PWtbMV0sdz1rWzJdLHg9a1szXTtlbHNle2w9 cChiLGMsLW4pLGI9bC54LGM9bC55LGw9cChpLGosLW4pLGk9bC54LGo9bC55 O3ZhciBxPShOLmNvcyhPLzE4MCpmKSxOLnNpbihPLzE4MCpmKSwoYi1pKS8y KSxyPShjLWopLzIscz1xKnEvKGQqZCkrcipyLyhlKmUpO3M+MSYmKHM9Ti5z cXJ0KHMpLGQ9cypkLGU9cyplKTt2YXIgdD1kKmQsdT1lKmUsdj0oZz09aD8t MToxKSpOLnNxcnQoUygodCp1LXQqcipyLXUqcSpxKS8odCpyKnIrdSpxKnEp KSksdz12KmQqci9lKyhiK2kpLzIseD12Ki1lKnEvZCsoYytqKS8yLHk9Ti5h c2luKCgoYy14KS9lKS50b0ZpeGVkKDkpKSx6PU4uYXNpbigoKGoteCkvZSku dG9GaXhlZCg5KSk7eT13PmI/Ty15Onksej13Pmk/Ty16OnosMD55JiYoeT0y Kk8reSksMD56JiYoej0yKk8reiksaCYmeT56JiYoeS09MipPKSwhaCYmej55 JiYoei09MipPKX12YXIgQT16LXk7aWYoUyhBKT5tKXt2YXIgQj16LEQ9aSxF PWo7ej15K20qKGgmJno+eT8xOi0xKSxpPXcrZCpOLmNvcyh6KSxqPXgrZSpO LnNpbih6KSxvPUMoaSxqLGQsZSxmLDAsaCxELEUsW3osQix3LHhdKX1BPXot eTt2YXIgRj1OLmNvcyh5KSxHPU4uc2luKHkpLEg9Ti5jb3MoeiksST1OLnNp bih6KSxKPU4udGFuKEEvNCksSz00LzMqZCpKLEw9NC8zKmUqSixNPVtiLGNd LFA9W2IrSypHLGMtTCpGXSxRPVtpK0sqSSxqLUwqSF0sUj1baSxqXTtpZihQ WzBdPTIqTVswXS1QWzBdLFBbMV09MipNWzFdLVBbMV0saylyZXR1cm5bUCxR LFJdLmNvbmNhdChvKTtvPVtQLFEsUl0uY29uY2F0KG8pLmpvaW4oKS5zcGxp dCgiLCIpO2Zvcih2YXIgVD1bXSxVPTAsVj1vLmxlbmd0aDtWPlU7VSsrKVRb VV09VSUyP3Aob1tVLTFdLG9bVV0sbikueTpwKG9bVV0sb1tVKzFdLG4pLng7 cmV0dXJuIFR9ZnVuY3Rpb24gRChhLGIsYyxkLGUsZixnLGgpe2Zvcih2YXIg aSxqLGssbCxtLG4sbyxwLHE9W10scj1bW10sW11dLHM9MDsyPnM7KytzKWlm KDA9PXM/KGo9NiphLTEyKmMrNiplLGk9LTMqYSs5KmMtOSplKzMqZyxrPTMq Yy0zKmEpOihqPTYqYi0xMipkKzYqZixpPS0zKmIrOSpkLTkqZiszKmgsaz0z KmQtMypiKSxTKGkpPDFlLTEyKXtpZihTKGopPDFlLTEyKWNvbnRpbnVlO2w9 LWsvaixsPjAmJjE+bCYmcS5wdXNoKGwpfWVsc2Ugbz1qKmotNCprKmkscD1O LnNxcnQobyksMD5vfHwobT0oLWorcCkvKDIqaSksbT4wJiYxPm0mJnEucHVz aChtKSxuPSgtai1wKS8oMippKSxuPjAmJjE+biYmcS5wdXNoKG4pKTtmb3Io dmFyIHQsdT1xLmxlbmd0aCx2PXU7dS0tOylsPXFbdV0sdD0xLWwsclswXVt1 XT10KnQqdCphKzMqdCp0KmwqYyszKnQqbCpsKmUrbCpsKmwqZyxyWzFdW3Vd PXQqdCp0KmIrMyp0KnQqbCpkKzMqdCpsKmwqZitsKmwqbCpoO3JldHVybiBy WzBdW3ZdPWEsclsxXVt2XT1iLHJbMF1bdisxXT1nLHJbMV1bdisxXT1oLHJb MF0ubGVuZ3RoPXJbMV0ubGVuZ3RoPXYrMix7bWluOnt4OlAuYXBwbHkoMCxy WzBdKSx5OlAuYXBwbHkoMCxyWzFdKX0sbWF4Ont4OlEuYXBwbHkoMCxyWzBd KSx5OlEuYXBwbHkoMCxyWzFdKX19fWZ1bmN0aW9uIEUoYSxiKXt2YXIgZD0h YiYmYyhhKTtpZighYiYmZC5jdXJ2ZSlyZXR1cm4gZihkLmN1cnZlKTtmb3Io dmFyIGU9eihhKSxnPWImJnooYiksaD17eDowLHk6MCxieDowLGJ5OjAsWDow LFk6MCxxeDpudWxsLHF5Om51bGx9LGk9e3g6MCx5OjAsYng6MCxieTowLFg6 MCxZOjAscXg6bnVsbCxxeTpudWxsfSxqPShmdW5jdGlvbihhLGIsYyl7dmFy IGQsZTtpZighYSlyZXR1cm5bIkMiLGIueCxiLnksYi54LGIueSxiLngsYi55 XTtzd2l0Y2goIShhWzBdaW57VDoxLFE6MX0pJiYoYi5xeD1iLnF5PW51bGwp LGFbMF0pe2Nhc2UiTSI6Yi5YPWFbMV0sYi5ZPWFbMl07YnJlYWs7Y2FzZSJB IjphPVsiQyJdLmNvbmNhdChDLmFwcGx5KDAsW2IueCxiLnldLmNvbmNhdChh LnNsaWNlKDEpKSkpO2JyZWFrO2Nhc2UiUyI6IkMiPT1jfHwiUyI9PWM/KGQ9 MipiLngtYi5ieCxlPTIqYi55LWIuYnkpOihkPWIueCxlPWIueSksYT1bIkMi LGQsZV0uY29uY2F0KGEuc2xpY2UoMSkpO2JyZWFrO2Nhc2UiVCI6IlEiPT1j fHwiVCI9PWM/KGIucXg9MipiLngtYi5xeCxiLnF5PTIqYi55LWIucXkpOihi LnF4PWIueCxiLnF5PWIueSksYT1bIkMiXS5jb25jYXQoQihiLngsYi55LGIu cXgsYi5xeSxhWzFdLGFbMl0pKTticmVhaztjYXNlIlEiOmIucXg9YVsxXSxi LnF5PWFbMl0sYT1bIkMiXS5jb25jYXQoQihiLngsYi55LGFbMV0sYVsyXSxh WzNdLGFbNF0pKTticmVhaztjYXNlIkwiOmE9WyJDIl0uY29uY2F0KEEoYi54 LGIueSxhWzFdLGFbMl0pKTticmVhaztjYXNlIkgiOmE9WyJDIl0uY29uY2F0 KEEoYi54LGIueSxhWzFdLGIueSkpO2JyZWFrO2Nhc2UiViI6YT1bIkMiXS5j b25jYXQoQShiLngsYi55LGIueCxhWzFdKSk7YnJlYWs7Y2FzZSJaIjphPVsi QyJdLmNvbmNhdChBKGIueCxiLnksYi5YLGIuWSkpfXJldHVybiBhfSksaz1m dW5jdGlvbihhLGIpe2lmKGFbYl0ubGVuZ3RoPjcpe2FbYl0uc2hpZnQoKTtm b3IodmFyIGM9YVtiXTtjLmxlbmd0aDspbVtiXT0iQSIsZyYmKG5bYl09IkEi KSxhLnNwbGljZShiKyssMCxbIkMiXS5jb25jYXQoYy5zcGxpY2UoMCw2KSkp O2Euc3BsaWNlKGIsMSkscj1RKGUubGVuZ3RoLGcmJmcubGVuZ3RofHwwKX19 LGw9ZnVuY3Rpb24oYSxiLGMsZCxmKXthJiZiJiYiTSI9PWFbZl1bMF0mJiJN IiE9YltmXVswXSYmKGIuc3BsaWNlKGYsMCxbIk0iLGQueCxkLnldKSxjLmJ4 PTAsYy5ieT0wLGMueD1hW2ZdWzFdLGMueT1hW2ZdWzJdLHI9UShlLmxlbmd0 aCxnJiZnLmxlbmd0aHx8MCkpfSxtPVtdLG49W10sbz0iIixwPSIiLHE9MCxy PVEoZS5sZW5ndGgsZyYmZy5sZW5ndGh8fDApO3I+cTtxKyspe2VbcV0mJihv PWVbcV1bMF0pLCJDIiE9byYmKG1bcV09byxxJiYocD1tW3EtMV0pKSxlW3Fd PWooZVtxXSxoLHApLCJBIiE9bVtxXSYmIkMiPT1vJiYobVtxXT0iQyIpLGso ZSxxKSxnJiYoZ1txXSYmKG89Z1txXVswXSksIkMiIT1vJiYobltxXT1vLHEm JihwPW5bcS0xXSkpLGdbcV09aihnW3FdLGkscCksIkEiIT1uW3FdJiYiQyI9 PW8mJihuW3FdPSJDIiksayhnLHEpKSxsKGUsZyxoLGkscSksbChnLGUsaSxo LHEpO3ZhciBzPWVbcV0sdD1nJiZnW3FdLHU9cy5sZW5ndGgsdj1nJiZ0Lmxl bmd0aDtoLng9c1t1LTJdLGgueT1zW3UtMV0saC5ieD1NKHNbdS00XSl8fGgu eCxoLmJ5PU0oc1t1LTNdKXx8aC55LGkuYng9ZyYmKE0odFt2LTRdKXx8aS54 KSxpLmJ5PWcmJihNKHRbdi0zXSl8fGkueSksaS54PWcmJnRbdi0yXSxpLnk9 ZyYmdFt2LTFdfXJldHVybiBnfHwoZC5jdXJ2ZT1mKGUpKSxnP1tlLGddOmV9 ZnVuY3Rpb24gRihhLGIpe2lmKCFiKXJldHVybiBhO3ZhciBjLGQsZSxmLGcs aCxpO2ZvcihhPUUoYSksZT0wLGc9YS5sZW5ndGg7Zz5lO2UrKylmb3IoaT1h W2VdLGY9MSxoPWkubGVuZ3RoO2g+ZjtmKz0yKWM9Yi54KGlbZl0saVtmKzFd KSxkPWIueShpW2ZdLGlbZisxXSksaVtmXT1jLGlbZisxXT1kO3JldHVybiBh fWZ1bmN0aW9uIEcoYSxiKXtmb3IodmFyIGM9W10sZD0wLGU9YS5sZW5ndGg7 ZS0yKiFiPmQ7ZCs9Mil7dmFyIGY9W3t4OithW2QtMl0seTorYVtkLTFdfSx7 eDorYVtkXSx5OithW2QrMV19LHt4OithW2QrMl0seTorYVtkKzNdfSx7eDor YVtkKzRdLHk6K2FbZCs1XX1dO2I/ZD9lLTQ9PWQ/ZlszXT17eDorYVswXSx5 OithWzFdfTplLTI9PWQmJihmWzJdPXt4OithWzBdLHk6K2FbMV19LGZbM109 e3g6K2FbMl0seTorYVszXX0pOmZbMF09e3g6K2FbZS0yXSx5OithW2UtMV19 OmUtND09ZD9mWzNdPWZbMl06ZHx8KGZbMF09e3g6K2FbZF0seTorYVtkKzFd fSksYy5wdXNoKFsiQyIsKC1mWzBdLngrNipmWzFdLngrZlsyXS54KS82LCgt ZlswXS55KzYqZlsxXS55K2ZbMl0ueSkvNiwoZlsxXS54KzYqZlsyXS54LWZb M10ueCkvNiwoZlsxXS55KzYqZlsyXS55LWZbM10ueSkvNixmWzJdLngsZlsy XS55XSl9cmV0dXJuIGN9dmFyIEg9Yi5wcm90b3R5cGUsST1hLmlzLEo9YS5f LmNsb25lLEs9Imhhc093blByb3BlcnR5IixMPS8sPyhbYS16XSksPy9naSxN PXBhcnNlRmxvYXQsTj1NYXRoLE89Ti5QSSxQPU4ubWluLFE9Ti5tYXgsUj1O LnBvdyxTPU4uYWJzLFQ9aCgxKSxVPWgoKSxWPWgoMCwxKSxXPWEuX3VuaXQy cHgsWD17cGF0aDpmdW5jdGlvbihhKXtyZXR1cm4gYS5hdHRyKCJwYXRoIil9 LGNpcmNsZTpmdW5jdGlvbihhKXt2YXIgYj1XKGEpO3JldHVybiB4KGIuY3gs Yi5jeSxiLnIpfSxlbGxpcHNlOmZ1bmN0aW9uKGEpe3ZhciBiPVcoYSk7cmV0 dXJuIHgoYi5jeHx8MCxiLmN5fHwwLGIucngsYi5yeSl9LHJlY3Q6ZnVuY3Rp b24oYSl7dmFyIGI9VyhhKTtyZXR1cm4gdyhiLnh8fDAsYi55fHwwLGIud2lk dGgsYi5oZWlnaHQsYi5yeCxiLnJ5KX0saW1hZ2U6ZnVuY3Rpb24oYSl7dmFy IGI9VyhhKTtyZXR1cm4gdyhiLnh8fDAsYi55fHwwLGIud2lkdGgsYi5oZWln aHQpfSxsaW5lOmZ1bmN0aW9uKGEpe3JldHVybiJNIitbYS5hdHRyKCJ4MSIp fHwwLGEuYXR0cigieTEiKXx8MCxhLmF0dHIoIngyIiksYS5hdHRyKCJ5MiIp XX0scG9seWxpbmU6ZnVuY3Rpb24oYSl7cmV0dXJuIk0iK2EuYXR0cigicG9p bnRzIil9LHBvbHlnb246ZnVuY3Rpb24oYSl7cmV0dXJuIk0iK2EuYXR0cigi cG9pbnRzIikrInoifSxkZWZsdDpmdW5jdGlvbihhKXt2YXIgYj1hLm5vZGUu Z2V0QkJveCgpO3JldHVybiB3KGIueCxiLnksYi53aWR0aCxiLmhlaWdodCl9 fTthLnBhdGg9YyxhLnBhdGguZ2V0VG90YWxMZW5ndGg9VCxhLnBhdGguZ2V0 UG9pbnRBdExlbmd0aD1VLGEucGF0aC5nZXRTdWJwYXRoPWZ1bmN0aW9uKGEs YixjKXtpZih0aGlzLmdldFRvdGFsTGVuZ3RoKGEpLWM8MWUtNilyZXR1cm4g VihhLGIpLmVuZDt2YXIgZD1WKGEsYywxKTtyZXR1cm4gYj9WKGQsYikuZW5k OmR9LEguZ2V0VG90YWxMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5u b2RlLmdldFRvdGFsTGVuZ3RoP3RoaXMubm9kZS5nZXRUb3RhbExlbmd0aCgp OnZvaWQgMH0sSC5nZXRQb2ludEF0TGVuZ3RoPWZ1bmN0aW9uKGEpe3JldHVy biBVKHRoaXMuYXR0cigiZCIpLGEpfSxILmdldFN1YnBhdGg9ZnVuY3Rpb24o YixjKXtyZXR1cm4gYS5wYXRoLmdldFN1YnBhdGgodGhpcy5hdHRyKCJkIiks YixjKX0sYS5fLmJveD1kLGEucGF0aC5maW5kRG90c0F0U2VnbWVudD1pLGEu cGF0aC5iZXppZXJCQm94PWosYS5wYXRoLmlzUG9pbnRJbnNpZGVCQm94PWss YS5jbG9zZXN0PWZ1bmN0aW9uKGIsYyxlLGYpe2Zvcih2YXIgZz0xMDAsaD1k KGItZy8yLGMtZy8yLGcsZyksaT1bXSxqPWVbMF0uaGFzT3duUHJvcGVydHko IngiKT9mdW5jdGlvbihhKXtyZXR1cm57eDplW2FdLngseTplW2FdLnl9fTpm dW5jdGlvbihhKXtyZXR1cm57eDplW2FdLHk6ZlthXX19LGw9MDsxZTY+PWcm JiFsOyl7Zm9yKHZhciBtPTAsbj1lLmxlbmd0aDtuPm07bSsrKXt2YXIgbz1q KG0pO2lmKGsoaCxvLngsby55KSl7bCsrLGkucHVzaChvKTticmVha319bHx8 KGcqPTIsaD1kKGItZy8yLGMtZy8yLGcsZykpfWlmKDFlNiE9Zyl7dmFyIHAs cT0xLzA7Zm9yKG09MCxuPWkubGVuZ3RoO24+bTttKyspe3ZhciByPWEubGVu KGIsYyxpW21dLngsaVttXS55KTtxPnImJihxPXIsaVttXS5sZW49cixwPWlb bV0pfXJldHVybiBwfX0sYS5wYXRoLmlzQkJveEludGVyc2VjdD1sLGEucGF0 aC5pbnRlcnNlY3Rpb249cixhLnBhdGguaW50ZXJzZWN0aW9uTnVtYmVyPXMs YS5wYXRoLmlzUG9pbnRJbnNpZGU9dSxhLnBhdGguZ2V0QkJveD12LGEucGF0 aC5nZXQ9WCxhLnBhdGgudG9SZWxhdGl2ZT15LGEucGF0aC50b0Fic29sdXRl PXosYS5wYXRoLnRvQ3ViaWM9RSxhLnBhdGgubWFwPUYsYS5wYXRoLnRvU3Ry aW5nPWUsYS5wYXRoLmNsb25lPWZ9KSxkLnBsdWdpbihmdW5jdGlvbihhKXt2 YXIgZD1NYXRoLm1heCxlPU1hdGgubWluLGY9ZnVuY3Rpb24oYSl7aWYodGhp cy5pdGVtcz1bXSx0aGlzLmJpbmRpbmdzPXt9LHRoaXMubGVuZ3RoPTAsdGhp cy50eXBlPSJzZXQiLGEpZm9yKHZhciBiPTAsYz1hLmxlbmd0aDtjPmI7Yisr KWFbYl0mJih0aGlzW3RoaXMuaXRlbXMubGVuZ3RoXT10aGlzLml0ZW1zW3Ro aXMuaXRlbXMubGVuZ3RoXT1hW2JdLHRoaXMubGVuZ3RoKyspfSxnPWYucHJv dG90eXBlO2cucHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgYSxiLGM9MCxkPWFy Z3VtZW50cy5sZW5ndGg7ZD5jO2MrKylhPWFyZ3VtZW50c1tjXSxhJiYoYj10 aGlzLml0ZW1zLmxlbmd0aCx0aGlzW2JdPXRoaXMuaXRlbXNbYl09YSx0aGlz Lmxlbmd0aCsrKTtyZXR1cm4gdGhpc30sZy5wb3A9ZnVuY3Rpb24oKXtyZXR1 cm4gdGhpcy5sZW5ndGgmJmRlbGV0ZSB0aGlzW3RoaXMubGVuZ3RoLS1dLHRo aXMuaXRlbXMucG9wKCl9LGcuZm9yRWFjaD1mdW5jdGlvbihhLGIpe2Zvcih2 YXIgYz0wLGQ9dGhpcy5pdGVtcy5sZW5ndGg7ZD5jO2MrKylpZihhLmNhbGwo Yix0aGlzLml0ZW1zW2NdLGMpPT09ITEpcmV0dXJuIHRoaXM7cmV0dXJuIHRo aXN9LGcuYW5pbWF0ZT1mdW5jdGlvbihkLGUsZixnKXsiZnVuY3Rpb24iIT10 eXBlb2YgZnx8Zi5sZW5ndGh8fChnPWYsZj1jLmxpbmVhciksZCBpbnN0YW5j ZW9mIGEuXy5BbmltYXRpb24mJihnPWQuY2FsbGJhY2ssZj1kLmVhc2luZyxl PWYuZHVyLGQ9ZC5hdHRyKTt2YXIgaD1hcmd1bWVudHM7aWYoYS5pcyhkLCJh cnJheSIpJiZhLmlzKGhbaC5sZW5ndGgtMV0sImFycmF5IikpdmFyIGk9ITA7 dmFyIGosaz1mdW5jdGlvbigpe2o/dGhpcy5iPWo6aj10aGlzLmJ9LGw9MCxt PXRoaXMsbj1nJiZmdW5jdGlvbigpeysrbD09bS5sZW5ndGgmJmcuY2FsbCh0 aGlzKQorfTtyZXR1cm4gdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKGEsYyl7Yi5v bmNlKCJzbmFwLmFuaW1jcmVhdGVkLiIrYS5pZCxrKSxpP2hbY10mJmEuYW5p bWF0ZS5hcHBseShhLGhbY10pOmEuYW5pbWF0ZShkLGUsZixuKX0pfSxnLnJl bW92ZT1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg7KXRoaXMucG9wKCku cmVtb3ZlKCk7cmV0dXJuIHRoaXN9LGcuYmluZD1mdW5jdGlvbihhLGIsYyl7 dmFyIGQ9e307aWYoImZ1bmN0aW9uIj09dHlwZW9mIGIpdGhpcy5iaW5kaW5n c1thXT1iO2Vsc2V7dmFyIGU9Y3x8YTt0aGlzLmJpbmRpbmdzW2FdPWZ1bmN0 aW9uKGEpe2RbZV09YSxiLmF0dHIoZCl9fXJldHVybiB0aGlzfSxnLmF0dHI9 ZnVuY3Rpb24oYSl7dmFyIGI9e307Zm9yKHZhciBjIGluIGEpdGhpcy5iaW5k aW5nc1tjXT90aGlzLmJpbmRpbmdzW2NdKGFbY10pOmJbY109YVtjXTtmb3Io dmFyIGQ9MCxlPXRoaXMuaXRlbXMubGVuZ3RoO2U+ZDtkKyspdGhpcy5pdGVt c1tkXS5hdHRyKGIpO3JldHVybiB0aGlzfSxnLmNsZWFyPWZ1bmN0aW9uKCl7 Zm9yKDt0aGlzLmxlbmd0aDspdGhpcy5wb3AoKX0sZy5zcGxpY2U9ZnVuY3Rp b24oYSxiKXthPTA+YT9kKHRoaXMubGVuZ3RoK2EsMCk6YSxiPWQoMCxlKHRo aXMubGVuZ3RoLWEsYikpO3ZhciBjLGc9W10saD1bXSxpPVtdO2ZvcihjPTI7 Yzxhcmd1bWVudHMubGVuZ3RoO2MrKylpLnB1c2goYXJndW1lbnRzW2NdKTtm b3IoYz0wO2I+YztjKyspaC5wdXNoKHRoaXNbYStjXSk7Zm9yKDtjPHRoaXMu bGVuZ3RoLWE7YysrKWcucHVzaCh0aGlzW2ErY10pO3ZhciBqPWkubGVuZ3Ro O2ZvcihjPTA7YzxqK2cubGVuZ3RoO2MrKyl0aGlzLml0ZW1zW2ErY109dGhp c1thK2NdPWo+Yz9pW2NdOmdbYy1qXTtmb3IoYz10aGlzLml0ZW1zLmxlbmd0 aD10aGlzLmxlbmd0aC09Yi1qO3RoaXNbY107KWRlbGV0ZSB0aGlzW2MrK107 cmV0dXJuIG5ldyBmKGgpfSxnLmV4Y2x1ZGU9ZnVuY3Rpb24oYSl7Zm9yKHZh ciBiPTAsYz10aGlzLmxlbmd0aDtjPmI7YisrKWlmKHRoaXNbYl09PWEpcmV0 dXJuIHRoaXMuc3BsaWNlKGIsMSksITA7cmV0dXJuITF9LGcuaW5zZXJ0QWZ0 ZXI9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPXRoaXMuaXRlbXMubGVuZ3RoO2It LTspdGhpcy5pdGVtc1tiXS5pbnNlcnRBZnRlcihhKTtyZXR1cm4gdGhpc30s Zy5nZXRCQm94PWZ1bmN0aW9uKCl7Zm9yKHZhciBhPVtdLGI9W10sYz1bXSxm PVtdLGc9dGhpcy5pdGVtcy5sZW5ndGg7Zy0tOylpZighdGhpcy5pdGVtc1tn XS5yZW1vdmVkKXt2YXIgaD10aGlzLml0ZW1zW2ddLmdldEJCb3goKTthLnB1 c2goaC54KSxiLnB1c2goaC55KSxjLnB1c2goaC54K2gud2lkdGgpLGYucHVz aChoLnkraC5oZWlnaHQpfXJldHVybiBhPWUuYXBwbHkoMCxhKSxiPWUuYXBw bHkoMCxiKSxjPWQuYXBwbHkoMCxjKSxmPWQuYXBwbHkoMCxmKSx7eDphLHk6 Yix4MjpjLHkyOmYsd2lkdGg6Yy1hLGhlaWdodDpmLWIsY3g6YSsoYy1hKS8y LGN5OmIrKGYtYikvMn19LGcuY2xvbmU9ZnVuY3Rpb24oYSl7YT1uZXcgZjtm b3IodmFyIGI9MCxjPXRoaXMuaXRlbXMubGVuZ3RoO2M+YjtiKyspYS5wdXNo KHRoaXMuaXRlbXNbYl0uY2xvbmUoKSk7cmV0dXJuIGF9LGcudG9TdHJpbmc9 ZnVuY3Rpb24oKXtyZXR1cm4iU25hcOKAmHMgc2V0In0sZy50eXBlPSJzZXQi LGEuU2V0PWYsYS5zZXQ9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgZjtyZXR1cm4g YXJndW1lbnRzLmxlbmd0aCYmYS5wdXNoLmFwcGx5KGEsQXJyYXkucHJvdG90 eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApKSxhfX0pLGQucGx1Z2luKGZ1 bmN0aW9uKGEsYyl7ZnVuY3Rpb24gZChhKXt2YXIgYj1hWzBdO3N3aXRjaChi LnRvTG93ZXJDYXNlKCkpe2Nhc2UidCI6cmV0dXJuW2IsMCwwXTtjYXNlIm0i OnJldHVybltiLDEsMCwwLDEsMCwwXTtjYXNlInIiOnJldHVybiA0PT1hLmxl bmd0aD9bYiwwLGFbMl0sYVszXV06W2IsMF07Y2FzZSJzIjpyZXR1cm4gNT09 YS5sZW5ndGg/W2IsMSwxLGFbM10sYVs0XV06Mz09YS5sZW5ndGg/W2IsMSwx XTpbYiwxXX19ZnVuY3Rpb24gZShiLGMsZSl7Yz1wKGMpLnJlcGxhY2UoL1wu ezN9fFx1MjAyNi9nLGIpLGI9YS5wYXJzZVRyYW5zZm9ybVN0cmluZyhiKXx8 W10sYz1hLnBhcnNlVHJhbnNmb3JtU3RyaW5nKGMpfHxbXTtmb3IodmFyIGYs ZyxoLGksbD1NYXRoLm1heChiLmxlbmd0aCxjLmxlbmd0aCksbT1bXSxuPVtd LG89MDtsPm87bysrKXtpZihoPWJbb118fGQoY1tvXSksaT1jW29dfHxkKGgp LGhbMF0hPWlbMF18fCJyIj09aFswXS50b0xvd2VyQ2FzZSgpJiYoaFsyXSE9 aVsyXXx8aFszXSE9aVszXSl8fCJzIj09aFswXS50b0xvd2VyQ2FzZSgpJiYo aFszXSE9aVszXXx8aFs0XSE9aVs0XSkpe2I9YS5fLnRyYW5zZm9ybTJtYXRy aXgoYixlKCkpLGM9YS5fLnRyYW5zZm9ybTJtYXRyaXgoYyxlKCkpLG09W1si bSIsYi5hLGIuYixiLmMsYi5kLGIuZSxiLmZdXSxuPVtbIm0iLGMuYSxjLmIs Yy5jLGMuZCxjLmUsYy5mXV07YnJlYWt9Zm9yKG1bb109W10sbltvXT1bXSxm PTAsZz1NYXRoLm1heChoLmxlbmd0aCxpLmxlbmd0aCk7Zz5mO2YrKylmIGlu IGgmJihtW29dW2ZdPWhbZl0pLGYgaW4gaSYmKG5bb11bZl09aVtmXSl9cmV0 dXJue2Zyb206ayhtKSx0bzprKG4pLGY6aihtKX19ZnVuY3Rpb24gZihhKXty ZXR1cm4gYX1mdW5jdGlvbiBnKGEpe3JldHVybiBmdW5jdGlvbihiKXtyZXR1 cm4rYi50b0ZpeGVkKDMpK2F9fWZ1bmN0aW9uIGgoYSl7cmV0dXJuIGEuam9p bigiICIpfWZ1bmN0aW9uIGkoYil7cmV0dXJuIGEucmdiKGJbMF0sYlsxXSxi WzJdKX1mdW5jdGlvbiBqKGEpe3ZhciBiLGMsZCxlLGYsZyxoPTAsaT1bXTtm b3IoYj0wLGM9YS5sZW5ndGg7Yz5iO2IrKyl7Zm9yKGY9IlsiLGc9WyciJyth W2JdWzBdKyciJ10sZD0xLGU9YVtiXS5sZW5ndGg7ZT5kO2QrKylnW2RdPSJ2 YWxbIitoKysgKyJdIjtmKz1nKyJdIixpW2JdPWZ9cmV0dXJuIEZ1bmN0aW9u KCJ2YWwiLCJyZXR1cm4gU25hcC5wYXRoLnRvU3RyaW5nLmNhbGwoWyIraSsi XSkiKX1mdW5jdGlvbiBrKGEpe2Zvcih2YXIgYj1bXSxjPTAsZD1hLmxlbmd0 aDtkPmM7YysrKWZvcih2YXIgZT0xLGY9YVtjXS5sZW5ndGg7Zj5lO2UrKyli LnB1c2goYVtjXVtlXSk7cmV0dXJuIGJ9ZnVuY3Rpb24gbChhKXtyZXR1cm4g aXNGaW5pdGUocGFyc2VGbG9hdChhKSl9ZnVuY3Rpb24gbShiLGMpe3JldHVy biBhLmlzKGIsImFycmF5IikmJmEuaXMoYywiYXJyYXkiKT9iLnRvU3RyaW5n KCk9PWMudG9TdHJpbmcoKTohMX12YXIgbj17fSxvPS9bYS16XSskL2kscD1T dHJpbmc7bi5zdHJva2U9bi5maWxsPSJjb2xvdXIiLGMucHJvdG90eXBlLmVx dWFsPWZ1bmN0aW9uKGEsYyl7cmV0dXJuIGIoInNuYXAudXRpbC5lcXVhbCIs dGhpcyxhLGMpLmZpcnN0RGVmaW5lZCgpfSxiLm9uKCJzbmFwLnV0aWwuZXF1 YWwiLGZ1bmN0aW9uKGIsYyl7dmFyIGQscSxyPXAodGhpcy5hdHRyKGIpfHwi Iikscz10aGlzO2lmKGwocikmJmwoYykpcmV0dXJue2Zyb206cGFyc2VGbG9h dChyKSx0bzpwYXJzZUZsb2F0KGMpLGY6Zn07aWYoImNvbG91ciI9PW5bYl0p cmV0dXJuIGQ9YS5jb2xvcihyKSxxPWEuY29sb3IoYykse2Zyb206W2Qucixk LmcsZC5iLGQub3BhY2l0eV0sdG86W3EucixxLmcscS5iLHEub3BhY2l0eV0s ZjppfTtpZigidmlld0JveCI9PWIpcmV0dXJuIGQ9dGhpcy5hdHRyKGIpLnZi LnNwbGl0KCIgIikubWFwKE51bWJlcikscT1jLnNwbGl0KCIgIikubWFwKE51 bWJlcikse2Zyb206ZCx0bzpxLGY6aH07aWYoInRyYW5zZm9ybSI9PWJ8fCJn cmFkaWVudFRyYW5zZm9ybSI9PWJ8fCJwYXR0ZXJuVHJhbnNmb3JtIj09Yily ZXR1cm4gYyBpbnN0YW5jZW9mIGEuTWF0cml4JiYoYz1jLnRvVHJhbnNmb3Jt U3RyaW5nKCkpLGEuXy5yZ1RyYW5zZm9ybS50ZXN0KGMpfHwoYz1hLl8uc3Zn VHJhbnNmb3JtMnN0cmluZyhjKSksZShyLGMsZnVuY3Rpb24oKXtyZXR1cm4g cy5nZXRCQm94KDEpfSk7aWYoImQiPT1ifHwicGF0aCI9PWIpcmV0dXJuIGQ9 YS5wYXRoLnRvQ3ViaWMocixjKSx7ZnJvbTprKGRbMF0pLHRvOmsoZFsxXSks ZjpqKGRbMF0pfTtpZigicG9pbnRzIj09YilyZXR1cm4gZD1wKHIpLnNwbGl0 KGEuXy5zZXBhcmF0b3IpLHE9cChjKS5zcGxpdChhLl8uc2VwYXJhdG9yKSx7 ZnJvbTpkLHRvOnEsZjpmdW5jdGlvbihhKXtyZXR1cm4gYX19O3ZhciB0PXIu bWF0Y2gobyksdT1wKGMpLm1hdGNoKG8pO3JldHVybiB0JiZtKHQsdSk/e2Zy b206cGFyc2VGbG9hdChyKSx0bzpwYXJzZUZsb2F0KGMpLGY6Zyh0KX06e2Zy b206dGhpcy5hc1BYKGIpLHRvOnRoaXMuYXNQWChiLGMpLGY6Zn19KX0pLGQu cGx1Z2luKGZ1bmN0aW9uKGEsYyxkLGUpe2Zvcih2YXIgZj1jLnByb3RvdHlw ZSxnPSJoYXNPd25Qcm9wZXJ0eSIsaD0oImNyZWF0ZVRvdWNoImluIGUuZG9j KSxpPVsiY2xpY2siLCJkYmxjbGljayIsIm1vdXNlZG93biIsIm1vdXNlbW92 ZSIsIm1vdXNlb3V0IiwibW91c2VvdmVyIiwibW91c2V1cCIsInRvdWNoc3Rh cnQiLCJ0b3VjaG1vdmUiLCJ0b3VjaGVuZCIsInRvdWNoY2FuY2VsIl0saj17 bW91c2Vkb3duOiJ0b3VjaHN0YXJ0Iixtb3VzZW1vdmU6InRvdWNobW92ZSIs bW91c2V1cDoidG91Y2hlbmQifSxrPShmdW5jdGlvbihhLGIpe3ZhciBjPSJ5 Ij09YT8ic2Nyb2xsVG9wIjoic2Nyb2xsTGVmdCIsZD1iJiZiLm5vZGU/Yi5u b2RlLm93bmVyRG9jdW1lbnQ6ZS5kb2M7cmV0dXJuIGRbYyBpbiBkLmRvY3Vt ZW50RWxlbWVudD8iZG9jdW1lbnRFbGVtZW50IjoiYm9keSJdW2NdfSksbD1m dW5jdGlvbigpe3JldHVybiB0aGlzLm9yaWdpbmFsRXZlbnQucHJldmVudERl ZmF1bHQoKX0sbT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9yaWdpbmFsRXZl bnQuc3RvcFByb3BhZ2F0aW9uKCl9LG49ZnVuY3Rpb24oYSxiLGMsZCl7dmFy IGU9aCYmaltiXT9qW2JdOmIsZj1mdW5jdGlvbihlKXt2YXIgZj1rKCJ5Iixk KSxpPWsoIngiLGQpO2lmKGgmJmpbZ10oYikpZm9yKHZhciBuPTAsbz1lLnRh cmdldFRvdWNoZXMmJmUudGFyZ2V0VG91Y2hlcy5sZW5ndGg7bz5uO24rKylp ZihlLnRhcmdldFRvdWNoZXNbbl0udGFyZ2V0PT1hfHxhLmNvbnRhaW5zKGUu dGFyZ2V0VG91Y2hlc1tuXS50YXJnZXQpKXt2YXIgcD1lO2U9ZS50YXJnZXRU b3VjaGVzW25dLGUub3JpZ2luYWxFdmVudD1wLGUucHJldmVudERlZmF1bHQ9 bCxlLnN0b3BQcm9wYWdhdGlvbj1tO2JyZWFrfXZhciBxPWUuY2xpZW50WCtp LHI9ZS5jbGllbnRZK2Y7cmV0dXJuIGMuY2FsbChkLGUscSxyKX07cmV0dXJu IGIhPT1lJiZhLmFkZEV2ZW50TGlzdGVuZXIoYixmLCExKSxhLmFkZEV2ZW50 TGlzdGVuZXIoZSxmLCExKSxmdW5jdGlvbigpe3JldHVybiBiIT09ZSYmYS5y ZW1vdmVFdmVudExpc3RlbmVyKGIsZiwhMSksYS5yZW1vdmVFdmVudExpc3Rl bmVyKGUsZiwhMSksITB9fSxvPVtdLHA9ZnVuY3Rpb24oYSl7Zm9yKHZhciBj LGQ9YS5jbGllbnRYLGU9YS5jbGllbnRZLGY9aygieSIpLGc9aygieCIpLGk9 by5sZW5ndGg7aS0tOyl7aWYoYz1vW2ldLGgpe2Zvcih2YXIgaixsPWEudG91 Y2hlcyYmYS50b3VjaGVzLmxlbmd0aDtsLS07KWlmKGo9YS50b3VjaGVzW2xd LGouaWRlbnRpZmllcj09Yy5lbC5fZHJhZy5pZHx8Yy5lbC5ub2RlLmNvbnRh aW5zKGoudGFyZ2V0KSl7ZD1qLmNsaWVudFgsZT1qLmNsaWVudFksKGEub3Jp Z2luYWxFdmVudD9hLm9yaWdpbmFsRXZlbnQ6YSkucHJldmVudERlZmF1bHQo KTticmVha319ZWxzZSBhLnByZXZlbnREZWZhdWx0KCk7e3ZhciBtPWMuZWwu bm9kZTttLm5leHRTaWJsaW5nLG0ucGFyZW50Tm9kZSxtLnN0eWxlLmRpc3Bs YXl9ZCs9ZyxlKz1mLGIoInNuYXAuZHJhZy5tb3ZlLiIrYy5lbC5pZCxjLm1v dmVfc2NvcGV8fGMuZWwsZC1jLmVsLl9kcmFnLngsZS1jLmVsLl9kcmFnLnks ZCxlLGEpfX0scT1mdW5jdGlvbihjKXthLnVubW91c2Vtb3ZlKHApLnVubW91 c2V1cChxKTtmb3IodmFyIGQsZT1vLmxlbmd0aDtlLS07KWQ9b1tlXSxkLmVs Ll9kcmFnPXt9LGIoInNuYXAuZHJhZy5lbmQuIitkLmVsLmlkLGQuZW5kX3Nj b3BlfHxkLnN0YXJ0X3Njb3BlfHxkLm1vdmVfc2NvcGV8fGQuZWwsYyksYi5v ZmYoInNuYXAuZHJhZy4qLiIrZC5lbC5pZCk7bz1bXX0scj1pLmxlbmd0aDty LS07KSFmdW5jdGlvbihiKXthW2JdPWZbYl09ZnVuY3Rpb24oYyxkKXtpZihh LmlzKGMsImZ1bmN0aW9uIikpdGhpcy5ldmVudHM9dGhpcy5ldmVudHN8fFtd LHRoaXMuZXZlbnRzLnB1c2goe25hbWU6YixmOmMsdW5iaW5kOm4odGhpcy5u b2RlfHxkb2N1bWVudCxiLGMsZHx8dGhpcyl9KTtlbHNlIGZvcih2YXIgZT0w LGY9dGhpcy5ldmVudHMubGVuZ3RoO2Y+ZTtlKyspaWYodGhpcy5ldmVudHNb ZV0ubmFtZT09Yil0cnl7dGhpcy5ldmVudHNbZV0uZi5jYWxsKHRoaXMpfWNh dGNoKGcpe31yZXR1cm4gdGhpc30sYVsidW4iK2JdPWZbInVuIitiXT1mdW5j dGlvbihhKXtmb3IodmFyIGM9dGhpcy5ldmVudHN8fFtdLGQ9Yy5sZW5ndGg7 ZC0tOylpZihjW2RdLm5hbWU9PWImJihjW2RdLmY9PWF8fCFhKSlyZXR1cm4g Y1tkXS51bmJpbmQoKSxjLnNwbGljZShkLDEpLCFjLmxlbmd0aCYmZGVsZXRl IHRoaXMuZXZlbnRzLHRoaXM7cmV0dXJuIHRoaXN9fShpW3JdKTtmLmhvdmVy PWZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiB0aGlzLm1vdXNlb3ZlcihhLGMp Lm1vdXNlb3V0KGIsZHx8Yyl9LGYudW5ob3Zlcj1mdW5jdGlvbihhLGIpe3Jl dHVybiB0aGlzLnVubW91c2VvdmVyKGEpLnVubW91c2VvdXQoYil9O3ZhciBz PVtdO2YuZHJhZz1mdW5jdGlvbihjLGQsZSxmLGcsaCl7ZnVuY3Rpb24gaShp LGosbCl7KGkub3JpZ2luYWxFdmVudHx8aSkucHJldmVudERlZmF1bHQoKSxr Ll9kcmFnLng9aixrLl9kcmFnLnk9bCxrLl9kcmFnLmlkPWkuaWRlbnRpZmll ciwhby5sZW5ndGgmJmEubW91c2Vtb3ZlKHApLm1vdXNldXAocSksby5wdXNo KHtlbDprLG1vdmVfc2NvcGU6ZixzdGFydF9zY29wZTpnLGVuZF9zY29wZTpo fSksZCYmYi5vbigic25hcC5kcmFnLnN0YXJ0LiIray5pZCxkKSxjJiZiLm9u KCJzbmFwLmRyYWcubW92ZS4iK2suaWQsYyksZSYmYi5vbigic25hcC5kcmFn LmVuZC4iK2suaWQsZSksYigic25hcC5kcmFnLnN0YXJ0LiIray5pZCxnfHxm fHxrLGosbCxpKX1mdW5jdGlvbiBqKGEsYyxkKXtiKCJzbmFwLmRyYWdpbml0 LiIray5pZCxrLGEsYyxkKX12YXIgaz10aGlzO2lmKCFhcmd1bWVudHMubGVu Z3RoKXt2YXIgbDtyZXR1cm4gay5kcmFnKGZ1bmN0aW9uKGEsYil7dGhpcy5h dHRyKHt0cmFuc2Zvcm06bCsobD8iVCI6InQiKStbYSxiXX0pfSxmdW5jdGlv bigpe2w9dGhpcy50cmFuc2Zvcm0oKS5sb2NhbH0pfXJldHVybiBiLm9uKCJz bmFwLmRyYWdpbml0LiIray5pZCxpKSxrLl9kcmFnPXt9LHMucHVzaCh7ZWw6 ayxzdGFydDppLGluaXQ6an0pLGsubW91c2Vkb3duKGopLGt9LGYudW5kcmFn PWZ1bmN0aW9uKCl7Zm9yKHZhciBjPXMubGVuZ3RoO2MtLTspc1tjXS5lbD09 dGhpcyYmKHRoaXMudW5tb3VzZWRvd24oc1tjXS5pbml0KSxzLnNwbGljZShj LDEpLGIudW5iaW5kKCJzbmFwLmRyYWcuKi4iK3RoaXMuaWQpLGIudW5iaW5k KCJzbmFwLmRyYWdpbml0LiIrdGhpcy5pZCkpO3JldHVybiFzLmxlbmd0aCYm YS51bm1vdXNlbW92ZShwKS51bm1vdXNldXAocSksdGhpc319KSxkLnBsdWdp bihmdW5jdGlvbihhLGMsZCl7dmFyIGU9KGMucHJvdG90eXBlLGQucHJvdG90 eXBlKSxmPS9eXHMqdXJsXCgoLispXCkvLGc9U3RyaW5nLGg9YS5fLiQ7YS5m aWx0ZXI9e30sZS5maWx0ZXI9ZnVuY3Rpb24oYil7dmFyIGQ9dGhpczsic3Zn IiE9ZC50eXBlJiYoZD1kLnBhcGVyKTt2YXIgZT1hLnBhcnNlKGcoYikpLGY9 YS5fLmlkKCksaT0oZC5ub2RlLm9mZnNldFdpZHRoLGQubm9kZS5vZmZzZXRI ZWlnaHQsaCgiZmlsdGVyIikpO3JldHVybiBoKGkse2lkOmYsZmlsdGVyVW5p dHM6InVzZXJTcGFjZU9uVXNlIn0pLGkuYXBwZW5kQ2hpbGQoZS5ub2RlKSxk LmRlZnMuYXBwZW5kQ2hpbGQoaSksbmV3IGMoaSl9LGIub24oInNuYXAudXRp bC5nZXRhdHRyLmZpbHRlciIsZnVuY3Rpb24oKXtiLnN0b3AoKTt2YXIgYz1o KHRoaXMubm9kZSwiZmlsdGVyIik7aWYoYyl7dmFyIGQ9ZyhjKS5tYXRjaChm KTtyZXR1cm4gZCYmYS5zZWxlY3QoZFsxXSl9fSksYi5vbigic25hcC51dGls LmF0dHIuZmlsdGVyIixmdW5jdGlvbihkKXtpZihkIGluc3RhbmNlb2YgYyYm ImZpbHRlciI9PWQudHlwZSl7Yi5zdG9wKCk7dmFyIGU9ZC5ub2RlLmlkO2V8 fChoKGQubm9kZSx7aWQ6ZC5pZH0pLGU9ZC5pZCksaCh0aGlzLm5vZGUse2Zp bHRlcjphLnVybChlKX0pfWQmJiJub25lIiE9ZHx8KGIuc3RvcCgpLHRoaXMu bm9kZS5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpKX0pLGEuZmlsdGVyLmJs dXI9ZnVuY3Rpb24oYixjKXtudWxsPT1iJiYoYj0yKTt2YXIgZD1udWxsPT1j P2I6W2IsY107cmV0dXJuIGEuZm9ybWF0KCc8ZmVHYXVzc2lhbkJsdXIgc3Rk RGV2aWF0aW9uPSJ7ZGVmfSIvPicse2RlZjpkfSl9LGEuZmlsdGVyLmJsdXIu dG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcygpfSxhLmZpbHRlci5z aGFkb3c9ZnVuY3Rpb24oYixjLGQsZSxmKXtyZXR1cm4ic3RyaW5nIj09dHlw ZW9mIGQmJihlPWQsZj1lLGQ9NCksInN0cmluZyIhPXR5cGVvZiBlJiYoZj1l LGU9IiMwMDAiKSxlPWV8fCIjMDAwIixudWxsPT1kJiYoZD00KSxudWxsPT1m JiYoZj0xKSxudWxsPT1iJiYoYj0wLGM9MiksbnVsbD09YyYmKGM9YiksZT1h LmNvbG9yKGUpLGEuZm9ybWF0KCc8ZmVHYXVzc2lhbkJsdXIgaW49IlNvdXJj ZUFscGhhIiBzdGREZXZpYXRpb249IntibHVyfSIvPjxmZU9mZnNldCBkeD0i e2R4fSIgZHk9IntkeX0iIHJlc3VsdD0ib2Zmc2V0Ymx1ciIvPjxmZUZsb29k IGZsb29kLWNvbG9yPSJ7Y29sb3J9Ii8+PGZlQ29tcG9zaXRlIGluMj0ib2Zm c2V0Ymx1ciIgb3BlcmF0b3I9ImluIi8+PGZlQ29tcG9uZW50VHJhbnNmZXI+ PGZlRnVuY0EgdHlwZT0ibGluZWFyIiBzbG9wZT0ie29wYWNpdHl9Ii8+PC9m ZUNvbXBvbmVudFRyYW5zZmVyPjxmZU1lcmdlPjxmZU1lcmdlTm9kZS8+PGZl TWVyZ2VOb2RlIGluPSJTb3VyY2VHcmFwaGljIi8+PC9mZU1lcmdlPicse2Nv bG9yOmUsZHg6YixkeTpjLGJsdXI6ZCxvcGFjaXR5OmZ9KX0sYS5maWx0ZXIu c2hhZG93LnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMoKX0sYS5m aWx0ZXIuZ3JheXNjYWxlPWZ1bmN0aW9uKGIpe3JldHVybiBudWxsPT1iJiYo Yj0xKSxhLmZvcm1hdCgnPGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0cml4IiB2 YWx1ZXM9InthfSB7Yn0ge2N9IDAgMCB7ZH0ge2V9IHtmfSAwIDAge2d9IHti fSB7aH0gMCAwIDAgMCAwIDEgMCIvPicse2E6LjIxMjYrLjc4NzQqKDEtYiks YjouNzE1Mi0uNzE1MiooMS1iKSxjOi4wNzIyLS4wNzIyKigxLWIpLGQ6LjIx MjYtLjIxMjYqKDEtYiksZTouNzE1MisuMjg0OCooMS1iKSxmOi4wNzIyLS4w NzIyKigxLWIpLGc6LjIxMjYtLjIxMjYqKDEtYiksaDouMDcyMisuOTI3OCoo MS1iKX0pfSxhLmZpbHRlci5ncmF5c2NhbGUudG9TdHJpbmc9ZnVuY3Rpb24o KXtyZXR1cm4gdGhpcygpfSxhLmZpbHRlci5zZXBpYT1mdW5jdGlvbihiKXty ZXR1cm4gbnVsbD09YiYmKGI9MSksYS5mb3JtYXQoJzxmZUNvbG9yTWF0cml4 IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSJ7YX0ge2J9IHtjfSAwIDAge2R9IHtl fSB7Zn0gMCAwIHtnfSB7aH0ge2l9IDAgMCAwIDAgMCAxIDAiLz4nLHthOi4z OTMrLjYwNyooMS1iKSxiOi43NjktLjc2OSooMS1iKSxjOi4xODktLjE4OSoo MS1iKSxkOi4zNDktLjM0OSooMS1iKSxlOi42ODYrLjMxNCooMS1iKSxmOi4x NjgtLjE2OCooMS1iKSxnOi4yNzItLjI3MiooMS1iKSxoOi41MzQtLjUzNCoo MS1iKSxpOi4xMzErLjg2OSooMS1iKX0pfSxhLmZpbHRlci5zZXBpYS50b1N0 cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzKCl9LGEuZmlsdGVyLnNhdHVy YXRlPWZ1bmN0aW9uKGIpe3JldHVybiBudWxsPT1iJiYoYj0xKSxhLmZvcm1h dCgnPGZlQ29sb3JNYXRyaXggdHlwZT0ic2F0dXJhdGUiIHZhbHVlcz0ie2Ft b3VudH0iLz4nLHthbW91bnQ6MS1ifSl9LGEuZmlsdGVyLnNhdHVyYXRlLnRv U3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMoKX0sYS5maWx0ZXIuaHVl Um90YXRlPWZ1bmN0aW9uKGIpe3JldHVybiBiPWJ8fDAsYS5mb3JtYXQoJzxm ZUNvbG9yTWF0cml4IHR5cGU9Imh1ZVJvdGF0ZSIgdmFsdWVzPSJ7YW5nbGV9 Ii8+Jyx7YW5nbGU6Yn0pfSxhLmZpbHRlci5odWVSb3RhdGUudG9TdHJpbmc9 ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcygpfSxhLmZpbHRlci5pbnZlcnQ9ZnVu Y3Rpb24oYil7cmV0dXJuIG51bGw9PWImJihiPTEpLGEuZm9ybWF0KCc8ZmVD b21wb25lbnRUcmFuc2Zlcj48ZmVGdW5jUiB0eXBlPSJ0YWJsZSIgdGFibGVW YWx1ZXM9InthbW91bnR9IHthbW91bnQyfSIvPjxmZUZ1bmNHIHR5cGU9InRh YmxlIiB0YWJsZVZhbHVlcz0ie2Ftb3VudH0ge2Ftb3VudDJ9Ii8+PGZlRnVu Y0IgdHlwZT0idGFibGUiIHRhYmxlVmFsdWVzPSJ7YW1vdW50fSB7YW1vdW50 Mn0iLz48L2ZlQ29tcG9uZW50VHJhbnNmZXI+Jyx7YW1vdW50OmIsYW1vdW50 MjoxLWJ9KX0sYS5maWx0ZXIuaW52ZXJ0LnRvU3RyaW5nPWZ1bmN0aW9uKCl7 cmV0dXJuIHRoaXMoKX0sYS5maWx0ZXIuYnJpZ2h0bmVzcz1mdW5jdGlvbihi KXtyZXR1cm4gbnVsbD09YiYmKGI9MSksYS5mb3JtYXQoJzxmZUNvbXBvbmVu dFRyYW5zZmVyPjxmZUZ1bmNSIHR5cGU9ImxpbmVhciIgc2xvcGU9InthbW91 bnR9Ii8+PGZlRnVuY0cgdHlwZT0ibGluZWFyIiBzbG9wZT0ie2Ftb3VudH0i Lz48ZmVGdW5jQiB0eXBlPSJsaW5lYXIiIHNsb3BlPSJ7YW1vdW50fSIvPjwv ZmVDb21wb25lbnRUcmFuc2Zlcj4nLHthbW91bnQ6Yn0pfSxhLmZpbHRlci5i cmlnaHRuZXNzLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMoKX0s YS5maWx0ZXIuY29udHJhc3Q9ZnVuY3Rpb24oYil7cmV0dXJuIG51bGw9PWIm JihiPTEpLGEuZm9ybWF0KCc8ZmVDb21wb25lbnRUcmFuc2Zlcj48ZmVGdW5j UiB0eXBlPSJsaW5lYXIiIHNsb3BlPSJ7YW1vdW50fSIgaW50ZXJjZXB0PSJ7 YW1vdW50Mn0iLz48ZmVGdW5jRyB0eXBlPSJsaW5lYXIiIHNsb3BlPSJ7YW1v dW50fSIgaW50ZXJjZXB0PSJ7YW1vdW50Mn0iLz48ZmVGdW5jQiB0eXBlPSJs aW5lYXIiIHNsb3BlPSJ7YW1vdW50fSIgaW50ZXJjZXB0PSJ7YW1vdW50Mn0i Lz48L2ZlQ29tcG9uZW50VHJhbnNmZXI+Jyx7YW1vdW50OmIsYW1vdW50Mjou NS1iLzJ9KX0sYS5maWx0ZXIuY29udHJhc3QudG9TdHJpbmc9ZnVuY3Rpb24o KXtyZXR1cm4gdGhpcygpfX0pLGQucGx1Z2luKGZ1bmN0aW9uKGEsYil7dmFy IGM9YS5fLmJveCxkPWEuaXMsZT0vXlteYS16XSooW3RibWxyY10pL2ksZj1m dW5jdGlvbigpe3JldHVybiJUIit0aGlzLmR4KyIsIit0aGlzLmR5fTtiLnBy b3RvdHlwZS5nZXRBbGlnbj1mdW5jdGlvbihhLGIpe251bGw9PWImJmQoYSwi c3RyaW5nIikmJihiPWEsYT1udWxsKSxhPWF8fHRoaXMucGFwZXI7dmFyIGc9 YS5nZXRCQm94P2EuZ2V0QkJveCgpOmMoYSksaD10aGlzLmdldEJCb3goKSxp PXt9O3N3aXRjaChiPWImJmIubWF0Y2goZSksYj1iP2JbMV0udG9Mb3dlckNh c2UoKToiYyIpe2Nhc2UidCI6aS5keD0wLGkuZHk9Zy55LWgueTticmVhaztj YXNlImIiOmkuZHg9MCxpLmR5PWcueTItaC55MjticmVhaztjYXNlIm0iOmku ZHg9MCxpLmR5PWcuY3ktaC5jeTticmVhaztjYXNlImwiOmkuZHg9Zy54LWgu eCxpLmR5PTA7YnJlYWs7Y2FzZSJyIjppLmR4PWcueDItaC54MixpLmR5PTA7 YnJlYWs7ZGVmYXVsdDppLmR4PWcuY3gtaC5jeCxpLmR5PTB9cmV0dXJuIGku dG9TdHJpbmc9ZixpfSxiLnByb3RvdHlwZS5hbGlnbj1mdW5jdGlvbihhLGIp e3JldHVybiB0aGlzLnRyYW5zZm9ybSgiLi4uIit0aGlzLmdldEFsaWduKGEs YikpfX0pLGR9KTsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL21pc2Mvc3Rh dGljL2V4cGxhaW4vanMvc25hcC5zdmcuanMgYi93ZWIvcGdhZG1pbi9taXNj L3N0YXRpYy9leHBsYWluL2pzL3NuYXAuc3ZnLmpzCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMGZiNmQKLS0tIC9kZXYvbnVsbAor KysgYi93ZWIvcGdhZG1pbi9taXNjL3N0YXRpYy9leHBsYWluL2pzL3NuYXAu c3ZnLmpzCkBAIC0wLDAgKzEsODE0OSBAQAorLy8gU25hcC5zdmcgMC40LjEK Ky8vIENvcHlyaWdodCAoYykgMjAxMyDigJMgMjAxNSBBZG9iZSBTeXN0ZW1z IEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vIExpY2Vu c2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRo ZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBl eGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91 IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLyBodHRw Oi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vIFVu bGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8g aW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRo ZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMs CisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkg S0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUg TGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBw ZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNl bnNlLgorLy8gYnVpbGQ6IDIwMTUtMDQtMTMKKy8vIENvcHlyaWdodCAoYykg MjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5z ZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBu b3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRo ZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBM aWNlbnNlIGF0CisvLworLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vu c2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFw cGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2Fy ZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJp YnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFO VElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVz cyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3Bl Y2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8g bGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisvLyDilIzilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgXFwK Ky8vIOKUgiBFdmUgMC40LjIgLSBKYXZhU2NyaXB0IEV2ZW50cyBMaWJyYXJ5 ICAgICAgICAgICAgICAgICAgICAgIOKUgiBcXAorLy8g4pSc4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSkIFxcCisv LyDilIIgQXV0aG9yIERtaXRyeSBCYXJhbm92c2tpeSAoaHR0cDovL2RtaXRy eS5iYXJhbm92c2tpeS5jb20vKSDilIIgXFwKKy8vIOKUlOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCBcXAorKGZ1 bmN0aW9uIChnbG9iKSB7CisgICAgdmFyIHZlcnNpb24gPSAiMC40LjIiLAor ICAgICAgICBoYXMgPSAiaGFzT3duUHJvcGVydHkiLAorICAgICAgICBzZXBh cmF0b3IgPSAvW1wuXC9dLywKKyAgICAgICAgY29tYXNlcGFyYXRvciA9IC9c cyosXHMqLywKKyAgICAgICAgd2lsZGNhcmQgPSAiKiIsCisgICAgICAgIGZ1 biA9IGZ1bmN0aW9uICgpIHt9LAorICAgICAgICBudW1zb3J0ID0gZnVuY3Rp b24gKGEsIGIpIHsKKyAgICAgICAgICAgIHJldHVybiBhIC0gYjsKKyAgICAg ICAgfSwKKyAgICAgICAgY3VycmVudF9ldmVudCwKKyAgICAgICAgc3RvcCwK KyAgICAgICAgZXZlbnRzID0ge246IHt9fSwKKyAgICAgICAgZmlyc3REZWZp bmVkID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9 IDAsIGlpID0gdGhpcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAg ICAgICAgICAgaWYgKHR5cGVvZiB0aGlzW2ldICE9ICJ1bmRlZmluZWQiKSB7 CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2ldOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSwKKyAgICAg ICAgbGFzdERlZmluZWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICB2 YXIgaSA9IHRoaXMubGVuZ3RoOworICAgICAgICAgICAgd2hpbGUgKC0taSkg eworICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGhpc1tpXSAhPSAidW5k ZWZpbmVkIikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tp XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0sCisgICAgLypcCisgICAgICogZXZlCisgICAgIFsgbWV0aG9kIF0KKyAg ICAgKiBGaXJlcyBldmVudCB3aXRoIGdpdmVuIGBuYW1lYCwgZ2l2ZW4gc2Nv cGUgYW5kIG90aGVyIHBhcmFtZXRlcnMuCisgICAgID4gQXJndW1lbnRzCisg ICAgIC0gbmFtZSAoc3RyaW5nKSBuYW1lIG9mIHRoZSAqZXZlbnQqLCBkb3Qg KGAuYCkgb3Igc2xhc2ggKGAvYCkgc2VwYXJhdGVkCisgICAgIC0gc2NvcGUg KG9iamVjdCkgY29udGV4dCBmb3IgdGhlIGV2ZW50IGhhbmRsZXJzCisgICAg IC0gdmFyYXJncyAoLi4uKSB0aGUgcmVzdCBvZiBhcmd1bWVudHMgd2lsbCBi ZSBzZW50IHRvIGV2ZW50IGhhbmRsZXJzCisgICAgID0gKG9iamVjdCkgYXJy YXkgb2YgcmV0dXJuZWQgdmFsdWVzIGZyb20gdGhlIGxpc3RlbmVycy4gQXJy YXkgaGFzIHR3byBtZXRob2RzIGAuZmlyc3REZWZpbmVkKClgIGFuZCBgLmxh c3REZWZpbmVkKClgIHRvIGdldCBmaXJzdCBvciBsYXN0IG5vdCBgdW5kZWZp bmVkYCB2YWx1ZS4KKyAgICBcKi8KKyAgICAgICAgZXZlID0gZnVuY3Rpb24g KG5hbWUsIHNjb3BlKSB7CisgICAgICAgICAgICBuYW1lID0gU3RyaW5nKG5h bWUpOworICAgICAgICAgICAgdmFyIGUgPSBldmVudHMsCisgICAgICAgICAg ICAgICAgb2xkc3RvcCA9IHN0b3AsCisgICAgICAgICAgICAgICAgYXJncyA9 IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMiksCisg ICAgICAgICAgICAgICAgbGlzdGVuZXJzID0gZXZlLmxpc3RlbmVycyhuYW1l KSwKKyAgICAgICAgICAgICAgICB6ID0gMCwKKyAgICAgICAgICAgICAgICBm ID0gZmFsc2UsCisgICAgICAgICAgICAgICAgbCwKKyAgICAgICAgICAgICAg ICBpbmRleGVkID0gW10sCisgICAgICAgICAgICAgICAgcXVldWUgPSB7fSwK KyAgICAgICAgICAgICAgICBvdXQgPSBbXSwKKyAgICAgICAgICAgICAgICBj ZSA9IGN1cnJlbnRfZXZlbnQsCisgICAgICAgICAgICAgICAgZXJyb3JzID0g W107CisgICAgICAgICAgICBvdXQuZmlyc3REZWZpbmVkID0gZmlyc3REZWZp bmVkOworICAgICAgICAgICAgb3V0Lmxhc3REZWZpbmVkID0gbGFzdERlZmlu ZWQ7CisgICAgICAgICAgICBjdXJyZW50X2V2ZW50ID0gbmFtZTsKKyAgICAg ICAgICAgIHN0b3AgPSAwOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAs IGlpID0gbGlzdGVuZXJzLmxlbmd0aDsgaSA8IGlpOyBpKyspIGlmICgieklu ZGV4IiBpbiBsaXN0ZW5lcnNbaV0pIHsKKyAgICAgICAgICAgICAgICBpbmRl eGVkLnB1c2gobGlzdGVuZXJzW2ldLnpJbmRleCk7CisgICAgICAgICAgICAg ICAgaWYgKGxpc3RlbmVyc1tpXS56SW5kZXggPCAwKSB7CisgICAgICAgICAg ICAgICAgICAgIHF1ZXVlW2xpc3RlbmVyc1tpXS56SW5kZXhdID0gbGlzdGVu ZXJzW2ldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIGluZGV4ZWQuc29ydChudW1zb3J0KTsKKyAgICAgICAgICAg IHdoaWxlIChpbmRleGVkW3pdIDwgMCkgeworICAgICAgICAgICAgICAgIGwg PSBxdWV1ZVtpbmRleGVkW3orK11dOworICAgICAgICAgICAgICAgIG91dC5w dXNoKGwuYXBwbHkoc2NvcGUsIGFyZ3MpKTsKKyAgICAgICAgICAgICAgICBp ZiAoc3RvcCkgeworICAgICAgICAgICAgICAgICAgICBzdG9wID0gb2xkc3Rv cDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dDsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKGkg PSAwOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgICAgIGwgPSBsaXN0 ZW5lcnNbaV07CisgICAgICAgICAgICAgICAgaWYgKCJ6SW5kZXgiIGluIGwp IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGwuekluZGV4ID09IGluZGV4 ZWRbel0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dC5wdXNoKGwu YXBwbHkoc2NvcGUsIGFyZ3MpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGlmIChzdG9wKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg eisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgPSBxdWV1ZVtp bmRleGVkW3pdXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsICYm IG91dC5wdXNoKGwuYXBwbHkoc2NvcGUsIGFyZ3MpKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpZiAoc3RvcCkgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChs KQorICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg ICAgICAgICAgICAgcXVldWVbbC56SW5kZXhdID0gbDsKKyAgICAgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgIG91dC5wdXNoKGwuYXBwbHkoc2NvcGUsIGFyZ3MpKTsK KyAgICAgICAgICAgICAgICAgICAgaWYgKHN0b3ApIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAg c3RvcCA9IG9sZHN0b3A7CisgICAgICAgICAgICBjdXJyZW50X2V2ZW50ID0g Y2U7CisgICAgICAgICAgICByZXR1cm4gb3V0OworICAgICAgICB9OworICAg ICAgICAvLyBVbmRvY3VtZW50ZWQuIERlYnVnIG9ubHkuCisgICAgICAgIGV2 ZS5fZXZlbnRzID0gZXZlbnRzOworICAgIC8qXAorICAgICAqIGV2ZS5saXN0 ZW5lcnMKKyAgICAgWyBtZXRob2QgXQorICAgICAqIEludGVybmFsIG1ldGhv ZCB3aGljaCBnaXZlcyB5b3UgYXJyYXkgb2YgYWxsIGV2ZW50IGhhbmRsZXJz IHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgYnkgdGhlIGdpdmVuIGBuYW1lYC4K KyAgICAgPiBBcmd1bWVudHMKKyAgICAgLSBuYW1lIChzdHJpbmcpIG5hbWUg b2YgdGhlIGV2ZW50LCBkb3QgKGAuYCkgb3Igc2xhc2ggKGAvYCkgc2VwYXJh dGVkCisgICAgID0gKGFycmF5KSBhcnJheSBvZiBldmVudCBoYW5kbGVycwor ICAgIFwqLworICAgIGV2ZS5saXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkg eworICAgICAgICB2YXIgbmFtZXMgPSBuYW1lLnNwbGl0KHNlcGFyYXRvciks CisgICAgICAgICAgICBlID0gZXZlbnRzLAorICAgICAgICAgICAgaXRlbSwK KyAgICAgICAgICAgIGl0ZW1zLAorICAgICAgICAgICAgaywKKyAgICAgICAg ICAgIGksCisgICAgICAgICAgICBpaSwKKyAgICAgICAgICAgIGosCisgICAg ICAgICAgICBqaiwKKyAgICAgICAgICAgIG5lcywKKyAgICAgICAgICAgIGVz ID0gW2VdLAorICAgICAgICAgICAgb3V0ID0gW107CisgICAgICAgIGZvciAo aSA9IDAsIGlpID0gbmFtZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAg ICAgICAgICAgbmVzID0gW107CisgICAgICAgICAgICBmb3IgKGogPSAwLCBq aiA9IGVzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHsKKyAgICAgICAgICAgICAg ICBlID0gZXNbal0ubjsKKyAgICAgICAgICAgICAgICBpdGVtcyA9IFtlW25h bWVzW2ldXSwgZVt3aWxkY2FyZF1dOworICAgICAgICAgICAgICAgIGsgPSAy OworICAgICAgICAgICAgICAgIHdoaWxlIChrLS0pIHsKKyAgICAgICAgICAg ICAgICAgICAgaXRlbSA9IGl0ZW1zW2tdOworICAgICAgICAgICAgICAgICAg ICBpZiAoaXRlbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmVzLnB1 c2goaXRlbSk7CisgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPSBvdXQu Y29uY2F0KGl0ZW0uZiB8fCBbXSk7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBlcyA9IG5lczsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gb3V0Owor ICAgIH07CisgICAgLypcCisgICAgICogZXZlLm9uCisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBCaW5kcyBnaXZlbiBldmVudCBoYW5kbGVy IHdpdGggYSBnaXZlbiBuYW1lLiBZb3UgY2FuIHVzZSB3aWxkY2FyZHMg4oCc YCpg4oCdIGZvciB0aGUgbmFtZXM6CisgICAgIHwgZXZlLm9uKCIqLnVuZGVy LioiLCBmKTsKKyAgICAgfCBldmUoIm1vdXNlLnVuZGVyLmZsb29yIik7IC8v IHRyaWdnZXJzIGYKKyAgICAgKiBVc2UgQGV2ZSB0byB0cmlnZ2VyIHRoZSBs aXN0ZW5lci4KKyAgICAgKioKKyAgICAgPiBBcmd1bWVudHMKKyAgICAgKioK KyAgICAgLSBuYW1lIChzdHJpbmcpIG5hbWUgb2YgdGhlIGV2ZW50LCBkb3Qg KGAuYCkgb3Igc2xhc2ggKGAvYCkgc2VwYXJhdGVkLCB3aXRoIG9wdGlvbmFs IHdpbGRjYXJkcworICAgICAtIGYgKGZ1bmN0aW9uKSBldmVudCBoYW5kbGVy IGZ1bmN0aW9uCisgICAgICoqCisgICAgID0gKGZ1bmN0aW9uKSByZXR1cm5l ZCBmdW5jdGlvbiBhY2NlcHRzIGEgc2luZ2xlIG51bWVyaWMgcGFyYW1ldGVy IHRoYXQgcmVwcmVzZW50cyB6LWluZGV4IG9mIHRoZSBoYW5kbGVyLiBJdCBp cyBhbiBvcHRpb25hbCBmZWF0dXJlIGFuZCBvbmx5IHVzZWQgd2hlbiB5b3Ug bmVlZCB0byBlbnN1cmUgdGhhdCBzb21lIHN1YnNldCBvZiBoYW5kbGVycyB3 aWxsIGJlIGludm9rZWQgaW4gYSBnaXZlbiBvcmRlciwgZGVzcGl0ZSBvZiB0 aGUgb3JkZXIgb2YgYXNzaWdubWVudC4KKyAgICAgPiBFeGFtcGxlOgorICAg ICB8IGV2ZS5vbigibW91c2UiLCBlYXRJdCkoMik7CisgICAgIHwgZXZlLm9u KCJtb3VzZSIsIHNjcmVhbSk7CisgICAgIHwgZXZlLm9uKCJtb3VzZSIsIGNh dGNoSXQpKDEpOworICAgICAqIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCBgY2F0 Y2hJdGAgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYmVmb3JlIGBlYXRJdGAu CisgICAgICoKKyAgICAgKiBJZiB5b3Ugd2FudCB0byBwdXQgeW91ciBoYW5k bGVyIGJlZm9yZSBub24taW5kZXhlZCBoYW5kbGVycywgc3BlY2lmeSBhIG5l Z2F0aXZlIHZhbHVlLgorICAgICAqIE5vdGU6IEkgYXNzdW1lIG1vc3Qgb2Yg dGhlIHRpbWUgeW91IGRvbuKAmXQgbmVlZCB0byB3b3JyeSBhYm91dCB6LWlu ZGV4LCBidXQgaXTigJlzIG5pY2UgdG8gaGF2ZSB0aGlzIGZlYXR1cmUg4oCc anVzdCBpbiBjYXNl4oCdLgorICAgIFwqLworICAgIGV2ZS5vbiA9IGZ1bmN0 aW9uIChuYW1lLCBmKSB7CisgICAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSk7 CisgICAgICAgIGlmICh0eXBlb2YgZiAhPSAiZnVuY3Rpb24iKSB7CisgICAg ICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge307CisgICAgICAgIH0KKyAg ICAgICAgdmFyIG5hbWVzID0gbmFtZS5zcGxpdChjb21hc2VwYXJhdG9yKTsK KyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbmFtZXMubGVuZ3RoOyBp IDwgaWk7IGkrKykgeworICAgICAgICAgICAgKGZ1bmN0aW9uIChuYW1lKSB7 CisgICAgICAgICAgICAgICAgdmFyIG5hbWVzID0gbmFtZS5zcGxpdChzZXBh cmF0b3IpLAorICAgICAgICAgICAgICAgICAgICBlID0gZXZlbnRzLAorICAg ICAgICAgICAgICAgICAgICBleGlzdDsKKyAgICAgICAgICAgICAgICBmb3Ig KHZhciBpID0gMCwgaWkgPSBuYW1lcy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7 CisgICAgICAgICAgICAgICAgICAgIGUgPSBlLm47CisgICAgICAgICAgICAg ICAgICAgIGUgPSBlLmhhc093blByb3BlcnR5KG5hbWVzW2ldKSAmJiBlW25h bWVzW2ldXSB8fCAoZVtuYW1lc1tpXV0gPSB7bjoge319KTsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgZS5mID0gZS5mIHx8IFtdOwor ICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGlpID0gZS5mLmxlbmd0aDsg aSA8IGlpOyBpKyspIGlmIChlLmZbaV0gPT0gZikgeworICAgICAgICAgICAg ICAgICAgICBleGlzdCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAhZXhp c3QgJiYgZS5mLnB1c2goZik7CisgICAgICAgICAgICB9KG5hbWVzW2ldKSk7 CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh6SW5kZXgp IHsKKyAgICAgICAgICAgIGlmICgrekluZGV4ID09ICt6SW5kZXgpIHsKKyAg ICAgICAgICAgICAgICBmLnpJbmRleCA9ICt6SW5kZXg7CisgICAgICAgICAg ICB9CisgICAgICAgIH07CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBldmUu ZgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyBm dW5jdGlvbiB0aGF0IHdpbGwgZmlyZSBnaXZlbiBldmVudCB3aXRoIG9wdGlv bmFsIGFyZ3VtZW50cy4KKyAgICAgKiBBcmd1bWVudHMgdGhhdCB3aWxsIGJl IHBhc3NlZCB0byB0aGUgcmVzdWx0IGZ1bmN0aW9uIHdpbGwgYmUgYWxzbwor ICAgICAqIGNvbmNhdGVkIHRvIHRoZSBsaXN0IG9mIGZpbmFsIGFyZ3VtZW50 cy4KKyAgICAgfCBlbC5vbmNsaWNrID0gZXZlLmYoImNsaWNrIiwgMSwgMik7 CisgICAgIHwgZXZlLm9uKCJjbGljayIsIGZ1bmN0aW9uIChhLCBiLCBjKSB7 CisgICAgIHwgICAgIGNvbnNvbGUubG9nKGEsIGIsIGMpOyAvLyAxLCAyLCBb ZXZlbnQgb2JqZWN0XQorICAgICB8IH0pOworICAgICA+IEFyZ3VtZW50cwor ICAgICAtIGV2ZW50IChzdHJpbmcpIGV2ZW50IG5hbWUKKyAgICAgLSB2YXJh cmdzICjigKYpIGFuZCBhbnkgb3RoZXIgYXJndW1lbnRzCisgICAgID0gKGZ1 bmN0aW9uKSBwb3NzaWJsZSBldmVudCBoYW5kbGVyIGZ1bmN0aW9uCisgICAg XCovCisgICAgZXZlLmYgPSBmdW5jdGlvbiAoZXZlbnQpIHsKKyAgICAgICAg dmFyIGF0dHJzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOworICAg ICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgZXZlLmFw cGx5KG51bGwsIFtldmVudCwgbnVsbF0uY29uY2F0KGF0dHJzKS5jb25jYXQo W10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKSk7CisgICAgICAgIH07Cisg ICAgfTsKKyAgICAvKlwKKyAgICAgKiBldmUuc3RvcAorICAgICBbIG1ldGhv ZCBdCisgICAgICoqCisgICAgICogSXMgdXNlZCBpbnNpZGUgYW4gZXZlbnQg aGFuZGxlciB0byBzdG9wIHRoZSBldmVudCwgcHJldmVudGluZyBhbnkgc3Vi c2VxdWVudCBsaXN0ZW5lcnMgZnJvbSBmaXJpbmcuCisgICAgXCovCisgICAg ZXZlLnN0b3AgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHN0b3AgPSAxOwor ICAgIH07CisgICAgLypcCisgICAgICogZXZlLm50CisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBDb3VsZCBiZSB1c2VkIGluc2lkZSBldmVu dCBoYW5kbGVyIHRvIGZpZ3VyZSBvdXQgYWN0dWFsIG5hbWUgb2YgdGhlIGV2 ZW50LgorICAgICAqKgorICAgICA+IEFyZ3VtZW50cworICAgICAqKgorICAg ICAtIHN1Ym5hbWUgKHN0cmluZykgI29wdGlvbmFsIHN1Ym5hbWUgb2YgdGhl IGV2ZW50CisgICAgICoqCisgICAgID0gKHN0cmluZykgbmFtZSBvZiB0aGUg ZXZlbnQsIGlmIGBzdWJuYW1lYCBpcyBub3Qgc3BlY2lmaWVkCisgICAgICog b3IKKyAgICAgPSAoYm9vbGVhbikgYHRydWVgLCBpZiBjdXJyZW50IGV2ZW50 4oCZcyBuYW1lIGNvbnRhaW5zIGBzdWJuYW1lYAorICAgIFwqLworICAgIGV2 ZS5udCA9IGZ1bmN0aW9uIChzdWJuYW1lKSB7CisgICAgICAgIGlmIChzdWJu YW1lKSB7CisgICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCgiKD86XFwu fFxcL3xeKSIgKyBzdWJuYW1lICsgIig/OlxcLnxcXC98JCkiKS50ZXN0KGN1 cnJlbnRfZXZlbnQpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBjdXJy ZW50X2V2ZW50OworICAgIH07CisgICAgLypcCisgICAgICogZXZlLm50cwor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQ291bGQgYmUgdXNl ZCBpbnNpZGUgZXZlbnQgaGFuZGxlciB0byBmaWd1cmUgb3V0IGFjdHVhbCBu YW1lIG9mIHRoZSBldmVudC4KKyAgICAgKioKKyAgICAgKioKKyAgICAgPSAo YXJyYXkpIG5hbWVzIG9mIHRoZSBldmVudAorICAgIFwqLworICAgIGV2ZS5u dHMgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiBjdXJyZW50X2V2 ZW50LnNwbGl0KHNlcGFyYXRvcik7CisgICAgfTsKKyAgICAvKlwKKyAgICAg KiBldmUub2ZmCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBS ZW1vdmVzIGdpdmVuIGZ1bmN0aW9uIGZyb20gdGhlIGxpc3Qgb2YgZXZlbnQg bGlzdGVuZXJzIGFzc2lnbmVkIHRvIGdpdmVuIG5hbWUuCisgICAgICogSWYg bm8gYXJndW1lbnRzIHNwZWNpZmllZCBhbGwgdGhlIGV2ZW50cyB3aWxsIGJl IGNsZWFyZWQuCisgICAgICoqCisgICAgID4gQXJndW1lbnRzCisgICAgICoq CisgICAgIC0gbmFtZSAoc3RyaW5nKSBuYW1lIG9mIHRoZSBldmVudCwgZG90 IChgLmApIG9yIHNsYXNoIChgL2ApIHNlcGFyYXRlZCwgd2l0aCBvcHRpb25h bCB3aWxkY2FyZHMKKyAgICAgLSBmIChmdW5jdGlvbikgZXZlbnQgaGFuZGxl ciBmdW5jdGlvbgorICAgIFwqLworICAgIC8qXAorICAgICAqIGV2ZS51bmJp bmQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFNlZSBAZXZl Lm9mZgorICAgIFwqLworICAgIGV2ZS5vZmYgPSBldmUudW5iaW5kID0gZnVu Y3Rpb24gKG5hbWUsIGYpIHsKKyAgICAgICAgaWYgKCFuYW1lKSB7CisgICAg ICAgICAgICBldmUuX2V2ZW50cyA9IGV2ZW50cyA9IHtuOiB7fX07CisgICAg ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFyIG5hbWVz ID0gbmFtZS5zcGxpdChjb21hc2VwYXJhdG9yKTsKKyAgICAgICAgaWYgKG5h bWVzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAw LCBpaSA9IG5hbWVzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAg ICAgICAgICBldmUub2ZmKG5hbWVzW2ldLCBmKTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBuYW1l cyA9IG5hbWUuc3BsaXQoc2VwYXJhdG9yKTsKKyAgICAgICAgdmFyIGUsCisg ICAgICAgICAgICBrZXksCisgICAgICAgICAgICBzcGxpY2UsCisgICAgICAg ICAgICBpLCBpaSwgaiwgamosCisgICAgICAgICAgICBjdXIgPSBbZXZlbnRz XTsKKyAgICAgICAgZm9yIChpID0gMCwgaWkgPSBuYW1lcy5sZW5ndGg7IGkg PCBpaTsgaSsrKSB7CisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgY3Vy Lmxlbmd0aDsgaiArPSBzcGxpY2UubGVuZ3RoIC0gMikgeworICAgICAgICAg ICAgICAgIHNwbGljZSA9IFtqLCAxXTsKKyAgICAgICAgICAgICAgICBlID0g Y3VyW2pdLm47CisgICAgICAgICAgICAgICAgaWYgKG5hbWVzW2ldICE9IHdp bGRjYXJkKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChlW25hbWVzW2ld XSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3BsaWNlLnB1c2goZVtu YW1lc1tpXV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChrZXkg aW4gZSkgaWYgKGVbaGFzXShrZXkpKSB7CisgICAgICAgICAgICAgICAgICAg ICAgICBzcGxpY2UucHVzaChlW2tleV0pOworICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN1ci5z cGxpY2UuYXBwbHkoY3VyLCBzcGxpY2UpOworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgICAgIGZvciAoaSA9IDAsIGlpID0gY3VyLmxlbmd0aDsg aSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIGUgPSBjdXJbaV07CisgICAg ICAgICAgICB3aGlsZSAoZS5uKSB7CisgICAgICAgICAgICAgICAgaWYgKGYp IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGUuZikgeworICAgICAgICAg ICAgICAgICAgICAgICAgZm9yIChqID0gMCwgamogPSBlLmYubGVuZ3RoOyBq IDwgamo7IGorKykgaWYgKGUuZltqXSA9PSBmKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZS5mLnNwbGljZShqLCAxKTsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICFlLmYubGVuZ3RoICYm IGRlbGV0ZSBlLmY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgZm9yIChrZXkgaW4gZS5uKSBpZiAoZS5uW2hhc10oa2V5 KSAmJiBlLm5ba2V5XS5mKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB2 YXIgZnVuY3MgPSBlLm5ba2V5XS5mOworICAgICAgICAgICAgICAgICAgICAg ICAgZm9yIChqID0gMCwgamogPSBmdW5jcy5sZW5ndGg7IGogPCBqajsgaisr KSBpZiAoZnVuY3Nbal0gPT0gZikgeworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGZ1bmNzLnNwbGljZShqLCAxKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgICAgICFmdW5jcy5sZW5ndGggJiYgZGVs ZXRlIGUubltrZXldLmY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBkZWxl dGUgZS5mOworICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBlLm4p IGlmIChlLm5baGFzXShrZXkpICYmIGUubltrZXldLmYpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGRlbGV0ZSBlLm5ba2V5XS5mOworICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg ICAgIGUgPSBlLm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 OworICAgIC8qXAorICAgICAqIGV2ZS5vbmNlCisgICAgIFsgbWV0aG9kIF0K KyAgICAgKioKKyAgICAgKiBCaW5kcyBnaXZlbiBldmVudCBoYW5kbGVyIHdp dGggYSBnaXZlbiBuYW1lIHRvIG9ubHkgcnVuIG9uY2UgdGhlbiB1bmJpbmQg aXRzZWxmLgorICAgICB8IGV2ZS5vbmNlKCJsb2dpbiIsIGYpOworICAgICB8 IGV2ZSgibG9naW4iKTsgLy8gdHJpZ2dlcnMgZgorICAgICB8IGV2ZSgibG9n aW4iKTsgLy8gbm8gbGlzdGVuZXJzCisgICAgICogVXNlIEBldmUgdG8gdHJp Z2dlciB0aGUgbGlzdGVuZXIuCisgICAgICoqCisgICAgID4gQXJndW1lbnRz CisgICAgICoqCisgICAgIC0gbmFtZSAoc3RyaW5nKSBuYW1lIG9mIHRoZSBl dmVudCwgZG90IChgLmApIG9yIHNsYXNoIChgL2ApIHNlcGFyYXRlZCwgd2l0 aCBvcHRpb25hbCB3aWxkY2FyZHMKKyAgICAgLSBmIChmdW5jdGlvbikgZXZl bnQgaGFuZGxlciBmdW5jdGlvbgorICAgICAqKgorICAgICA9IChmdW5jdGlv bikgc2FtZSByZXR1cm4gZnVuY3Rpb24gYXMgQGV2ZS5vbgorICAgIFwqLwor ICAgIGV2ZS5vbmNlID0gZnVuY3Rpb24gKG5hbWUsIGYpIHsKKyAgICAgICAg dmFyIGYyID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgZXZlLnVuYmlu ZChuYW1lLCBmMik7CisgICAgICAgICAgICByZXR1cm4gZi5hcHBseSh0aGlz LCBhcmd1bWVudHMpOworICAgICAgICB9OworICAgICAgICByZXR1cm4gZXZl Lm9uKG5hbWUsIGYyKTsKKyAgICB9OworICAgIC8qXAorICAgICAqIGV2ZS52 ZXJzaW9uCisgICAgIFsgcHJvcGVydHkgKHN0cmluZykgXQorICAgICAqKgor ICAgICAqIEN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeS4KKyAgICBc Ki8KKyAgICBldmUudmVyc2lvbiA9IHZlcnNpb247CisgICAgZXZlLnRvU3Ry aW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gIllvdSBhcmUg cnVubmluZyBFdmUgIiArIHZlcnNpb247CisgICAgfTsKKyAgICAodHlwZW9m IG1vZHVsZSAhPSAidW5kZWZpbmVkIiAmJiBtb2R1bGUuZXhwb3J0cykgPyAo bW9kdWxlLmV4cG9ydHMgPSBldmUpIDogKHR5cGVvZiBkZWZpbmUgPT09ICJm dW5jdGlvbiIgJiYgZGVmaW5lLmFtZCA/IChkZWZpbmUoImV2ZSIsIFtdLCBm dW5jdGlvbigpIHsgcmV0dXJuIGV2ZTsgfSkpIDogKGdsb2IuZXZlID0gZXZl KSk7Cit9KSh0aGlzKTsKKworKGZ1bmN0aW9uIChnbG9iLCBmYWN0b3J5KSB7 CisgICAgLy8gQU1EIHN1cHBvcnQKKyAgICBpZiAodHlwZW9mIGRlZmluZSA9 PSAiZnVuY3Rpb24iICYmIGRlZmluZS5hbWQpIHsKKyAgICAgICAgLy8gRGVm aW5lIGFzIGFuIGFub255bW91cyBtb2R1bGUKKyAgICAgICAgZGVmaW5lKFsi ZXZlIl0sIGZ1bmN0aW9uIChldmUpIHsKKyAgICAgICAgICAgIHJldHVybiBm YWN0b3J5KGdsb2IsIGV2ZSk7CisgICAgICAgIH0pOworICAgIH0gZWxzZSBp ZiAodHlwZW9mIGV4cG9ydHMgIT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAg Ly8gTmV4dCBmb3IgTm9kZS5qcyBvciBDb21tb25KUworICAgICAgICB2YXIg ZXZlID0gcmVxdWlyZSgnZXZlJyk7CisgICAgICAgIG1vZHVsZS5leHBvcnRz ID0gZmFjdG9yeShnbG9iLCBldmUpOworICAgIH0gZWxzZSB7CisgICAgICAg IC8vIEJyb3dzZXIgZ2xvYmFscyAoZ2xvYiBpcyB3aW5kb3cpCisgICAgICAg IC8vIFNuYXAgYWRkcyBpdHNlbGYgdG8gd2luZG93CisgICAgICAgIGZhY3Rv cnkoZ2xvYiwgZ2xvYi5ldmUpOworICAgIH0KK30od2luZG93IHx8IHRoaXMs IGZ1bmN0aW9uICh3aW5kb3csIGV2ZSkgeworLy8gQ29weXJpZ2h0IChjKSAy MDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJl c2VydmVkLgorLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNl LCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5v dCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhl IExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExp Y2Vuc2UgYXQKKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9M SUNFTlNFLTIuMAorLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUg bGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlz dHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24g YW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBD T05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBs aWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFu Z3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlv bnMgdW5kZXIgdGhlIExpY2Vuc2UuCit2YXIgbWluYSA9IChmdW5jdGlvbiAo ZXZlKSB7CisgICAgdmFyIGFuaW1hdGlvbnMgPSB7fSwKKyAgICByZXF1ZXN0 QW5pbUZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSAgICAg ICB8fAorICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cud2Via2l0UmVx dWVzdEFuaW1hdGlvbkZyYW1lIHx8CisgICAgICAgICAgICAgICAgICAgICAg IHdpbmRvdy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgICAgfHwKKyAgICAg ICAgICAgICAgICAgICAgICAgd2luZG93Lm9SZXF1ZXN0QW5pbWF0aW9uRnJh bWUgICAgICB8fAorICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubXNS ZXF1ZXN0QW5pbWF0aW9uRnJhbWUgICAgIHx8CisgICAgICAgICAgICAgICAg ICAgICAgIGZ1bmN0aW9uIChjYWxsYmFjaykgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2V0VGltZW91dChjYWxsYmFjaywgMTYpOworICAgICAg ICAgICAgICAgICAgICAgICB9LAorICAgIGlzQXJyYXkgPSBBcnJheS5pc0Fy cmF5IHx8IGZ1bmN0aW9uIChhKSB7CisgICAgICAgIHJldHVybiBhIGluc3Rh bmNlb2YgQXJyYXkgfHwKKyAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUu dG9TdHJpbmcuY2FsbChhKSA9PSAiW29iamVjdCBBcnJheV0iOworICAgIH0s CisgICAgaWRnZW4gPSAwLAorICAgIGlkcHJlZml4ID0gIk0iICsgKCtuZXcg RGF0ZSkudG9TdHJpbmcoMzYpLAorICAgIElEID0gZnVuY3Rpb24gKCkgewor ICAgICAgICByZXR1cm4gaWRwcmVmaXggKyAoaWRnZW4rKykudG9TdHJpbmco MzYpOworICAgIH0sCisgICAgZGlmZiA9IGZ1bmN0aW9uIChhLCBiLCBBLCBC KSB7CisgICAgICAgIGlmIChpc0FycmF5KGEpKSB7CisgICAgICAgICAgICBy ZXMgPSBbXTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGEu bGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgICAgIHJlc1tp XSA9IGRpZmYoYVtpXSwgYiwgQVtpXSwgQik7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9CisgICAgICAgIHZh ciBkaWYgPSAoQSAtIGEpIC8gKEIgLSBiKTsKKyAgICAgICAgcmV0dXJuIGZ1 bmN0aW9uIChiYikgeworICAgICAgICAgICAgcmV0dXJuIGEgKyBkaWYgKiAo YmIgLSBiKTsKKyAgICAgICAgfTsKKyAgICB9LAorICAgIHRpbWVyID0gRGF0 ZS5ub3cgfHwgZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gK25ldyBE YXRlOworICAgIH0sCisgICAgc3RhID0gZnVuY3Rpb24gKHZhbCkgeworICAg ICAgICB2YXIgYSA9IHRoaXM7CisgICAgICAgIGlmICh2YWwgPT0gbnVsbCkg eworICAgICAgICAgICAgcmV0dXJuIGEuczsKKyAgICAgICAgfQorICAgICAg ICB2YXIgZHMgPSBhLnMgLSB2YWw7CisgICAgICAgIGEuYiArPSBhLmR1ciAq IGRzOworICAgICAgICBhLkIgKz0gYS5kdXIgKiBkczsKKyAgICAgICAgYS5z ID0gdmFsOworICAgIH0sCisgICAgc3BlZWQgPSBmdW5jdGlvbiAodmFsKSB7 CisgICAgICAgIHZhciBhID0gdGhpczsKKyAgICAgICAgaWYgKHZhbCA9PSBu dWxsKSB7CisgICAgICAgICAgICByZXR1cm4gYS5zcGQ7CisgICAgICAgIH0K KyAgICAgICAgYS5zcGQgPSB2YWw7CisgICAgfSwKKyAgICBkdXJhdGlvbiA9 IGZ1bmN0aW9uICh2YWwpIHsKKyAgICAgICAgdmFyIGEgPSB0aGlzOworICAg ICAgICBpZiAodmFsID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBh LmR1cjsKKyAgICAgICAgfQorICAgICAgICBhLnMgPSBhLnMgKiB2YWwgLyBh LmR1cjsKKyAgICAgICAgYS5kdXIgPSB2YWw7CisgICAgfSwKKyAgICBzdG9w aXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZhciBhID0gdGhpczsKKyAg ICAgICAgZGVsZXRlIGFuaW1hdGlvbnNbYS5pZF07CisgICAgICAgIGEudXBk YXRlKCk7CisgICAgICAgIGV2ZSgibWluYS5zdG9wLiIgKyBhLmlkLCBhKTsK KyAgICB9LAorICAgIHBhdXNlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2 YXIgYSA9IHRoaXM7CisgICAgICAgIGlmIChhLnBkaWYpIHsKKyAgICAgICAg ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBkZWxldGUgYW5pbWF0 aW9uc1thLmlkXTsKKyAgICAgICAgYS51cGRhdGUoKTsKKyAgICAgICAgYS5w ZGlmID0gYS5nZXQoKSAtIGEuYjsKKyAgICB9LAorICAgIHJlc3VtZSA9IGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGEgPSB0aGlzOworICAgICAgICBp ZiAoIWEucGRpZikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9 CisgICAgICAgIGEuYiA9IGEuZ2V0KCkgLSBhLnBkaWY7CisgICAgICAgIGRl bGV0ZSBhLnBkaWY7CisgICAgICAgIGFuaW1hdGlvbnNbYS5pZF0gPSBhOwor ICAgIH0sCisgICAgdXBkYXRlID0gZnVuY3Rpb24gKCkgeworICAgICAgICB2 YXIgYSA9IHRoaXMsCisgICAgICAgICAgICByZXM7CisgICAgICAgIGlmIChp c0FycmF5KGEuc3RhcnQpKSB7CisgICAgICAgICAgICByZXMgPSBbXTsKKyAg ICAgICAgICAgIGZvciAodmFyIGogPSAwLCBqaiA9IGEuc3RhcnQubGVuZ3Ro OyBqIDwgamo7IGorKykgeworICAgICAgICAgICAgICAgIHJlc1tqXSA9ICth LnN0YXJ0W2pdICsKKyAgICAgICAgICAgICAgICAgICAgKGEuZW5kW2pdIC0g YS5zdGFydFtqXSkgKiBhLmVhc2luZyhhLnMpOworICAgICAgICAgICAgfQor ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzID0gK2Euc3RhcnQg KyAoYS5lbmQgLSBhLnN0YXJ0KSAqIGEuZWFzaW5nKGEucyk7CisgICAgICAg IH0KKyAgICAgICAgYS5zZXQocmVzKTsKKyAgICB9LAorICAgIGZyYW1lID0g ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgbGVuID0gMDsKKyAgICAgICAg Zm9yICh2YXIgaSBpbiBhbmltYXRpb25zKSBpZiAoYW5pbWF0aW9ucy5oYXNP d25Qcm9wZXJ0eShpKSkgeworICAgICAgICAgICAgdmFyIGEgPSBhbmltYXRp b25zW2ldLAorICAgICAgICAgICAgICAgIGIgPSBhLmdldCgpLAorICAgICAg ICAgICAgICAgIHJlczsKKyAgICAgICAgICAgIGxlbisrOworICAgICAgICAg ICAgYS5zID0gKGIgLSBhLmIpIC8gKGEuZHVyIC8gYS5zcGQpOworICAgICAg ICAgICAgaWYgKGEucyA+PSAxKSB7CisgICAgICAgICAgICAgICAgZGVsZXRl IGFuaW1hdGlvbnNbaV07CisgICAgICAgICAgICAgICAgYS5zID0gMTsKKyAg ICAgICAgICAgICAgICBsZW4tLTsKKyAgICAgICAgICAgICAgICAoZnVuY3Rp b24gKGEpIHsKKyAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5j dGlvbiAoKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBldmUoIm1pbmEu ZmluaXNoLiIgKyBhLmlkLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7 CisgICAgICAgICAgICAgICAgfShhKSk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBhLnVwZGF0ZSgpOworICAgICAgICB9CisgICAgICAgIGxlbiAm JiByZXF1ZXN0QW5pbUZyYW1lKGZyYW1lKTsKKyAgICB9LAorICAgIC8qXAor ICAgICAqIG1pbmEKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAq IEdlbmVyaWMgYW5pbWF0aW9uIG9mIG51bWJlcnMKKyAgICAgKioKKyAgICAg LSBhIChudW1iZXIpIHN0YXJ0IF9zbGF2ZV8gbnVtYmVyCisgICAgIC0gQSAo bnVtYmVyKSBlbmQgX3NsYXZlXyBudW1iZXIKKyAgICAgLSBiIChudW1iZXIp IHN0YXJ0IF9tYXN0ZXJfIG51bWJlciAoc3RhcnQgdGltZSBpbiBnZW5lcmFs IGNhc2UpCisgICAgIC0gQiAobnVtYmVyKSBlbmQgX21hc3Rlcl8gbnVtYmVy IChlbmQgdGltZSBpbiBnZXJlYWwgY2FzZSkKKyAgICAgLSBnZXQgKGZ1bmN0 aW9uKSBnZXR0ZXIgb2YgX21hc3Rlcl8gbnVtYmVyIChzZWUgQG1pbmEudGlt ZSkKKyAgICAgLSBzZXQgKGZ1bmN0aW9uKSBzZXR0ZXIgb2YgX3NsYXZlXyBu dW1iZXIKKyAgICAgLSBlYXNpbmcgKGZ1bmN0aW9uKSAjb3B0aW9uYWwgZWFz aW5nIGZ1bmN0aW9uLCBkZWZhdWx0IGlzIEBtaW5hLmxpbmVhcgorICAgICA9 IChvYmplY3QpIGFuaW1hdGlvbiBkZXNjcmlwdG9yCisgICAgIG8geworICAg ICBvICAgICAgICAgaWQgKHN0cmluZykgYW5pbWF0aW9uIGlkLAorICAgICBv ICAgICAgICAgc3RhcnQgKG51bWJlcikgc3RhcnQgX3NsYXZlXyBudW1iZXIs CisgICAgIG8gICAgICAgICBlbmQgKG51bWJlcikgZW5kIF9zbGF2ZV8gbnVt YmVyLAorICAgICBvICAgICAgICAgYiAobnVtYmVyKSBzdGFydCBfbWFzdGVy XyBudW1iZXIsCisgICAgIG8gICAgICAgICBzIChudW1iZXIpIGFuaW1hdGlv biBzdGF0dXMgKDAuLjEpLAorICAgICBvICAgICAgICAgZHVyIChudW1iZXIp IGFuaW1hdGlvbiBkdXJhdGlvbiwKKyAgICAgbyAgICAgICAgIHNwZCAobnVt YmVyKSBhbmltYXRpb24gc3BlZWQsCisgICAgIG8gICAgICAgICBnZXQgKGZ1 bmN0aW9uKSBnZXR0ZXIgb2YgX21hc3Rlcl8gbnVtYmVyIChzZWUgQG1pbmEu dGltZSksCisgICAgIG8gICAgICAgICBzZXQgKGZ1bmN0aW9uKSBzZXR0ZXIg b2YgX3NsYXZlXyBudW1iZXIsCisgICAgIG8gICAgICAgICBlYXNpbmcgKGZ1 bmN0aW9uKSBlYXNpbmcgZnVuY3Rpb24sIGRlZmF1bHQgaXMgQG1pbmEubGlu ZWFyLAorICAgICBvICAgICAgICAgc3RhdHVzIChmdW5jdGlvbikgc3RhdHVz IGdldHRlci9zZXR0ZXIsCisgICAgIG8gICAgICAgICBzcGVlZCAoZnVuY3Rp b24pIHNwZWVkIGdldHRlci9zZXR0ZXIsCisgICAgIG8gICAgICAgICBkdXJh dGlvbiAoZnVuY3Rpb24pIGR1cmF0aW9uIGdldHRlci9zZXR0ZXIsCisgICAg IG8gICAgICAgICBzdG9wIChmdW5jdGlvbikgYW5pbWF0aW9uIHN0b3BwZXIK KyAgICAgbyAgICAgICAgIHBhdXNlIChmdW5jdGlvbikgcGF1c2VzIHRoZSBh bmltYXRpb24KKyAgICAgbyAgICAgICAgIHJlc3VtZSAoZnVuY3Rpb24pIHJl c3VtZXMgdGhlIGFuaW1hdGlvbgorICAgICBvICAgICAgICAgdXBkYXRlIChm dW5jdGlvbikgY2FsbGVzIHNldHRlciB3aXRoIHRoZSByaWdodCB2YWx1ZSBv ZiB0aGUgYW5pbWF0aW9uCisgICAgIG8gfQorICAgIFwqLworICAgIG1pbmEg PSBmdW5jdGlvbiAoYSwgQSwgYiwgQiwgZ2V0LCBzZXQsIGVhc2luZykgewor ICAgICAgICB2YXIgYW5pbSA9IHsKKyAgICAgICAgICAgIGlkOiBJRCgpLAor ICAgICAgICAgICAgc3RhcnQ6IGEsCisgICAgICAgICAgICBlbmQ6IEEsCisg ICAgICAgICAgICBiOiBiLAorICAgICAgICAgICAgczogMCwKKyAgICAgICAg ICAgIGR1cjogQiAtIGIsCisgICAgICAgICAgICBzcGQ6IDEsCisgICAgICAg ICAgICBnZXQ6IGdldCwKKyAgICAgICAgICAgIHNldDogc2V0LAorICAgICAg ICAgICAgZWFzaW5nOiBlYXNpbmcgfHwgbWluYS5saW5lYXIsCisgICAgICAg ICAgICBzdGF0dXM6IHN0YSwKKyAgICAgICAgICAgIHNwZWVkOiBzcGVlZCwK KyAgICAgICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvbiwKKyAgICAgICAgICAg IHN0b3A6IHN0b3BpdCwKKyAgICAgICAgICAgIHBhdXNlOiBwYXVzZSwKKyAg ICAgICAgICAgIHJlc3VtZTogcmVzdW1lLAorICAgICAgICAgICAgdXBkYXRl OiB1cGRhdGUKKyAgICAgICAgfTsKKyAgICAgICAgYW5pbWF0aW9uc1thbmlt LmlkXSA9IGFuaW07CisgICAgICAgIHZhciBsZW4gPSAwLCBpOworICAgICAg ICBmb3IgKGkgaW4gYW5pbWF0aW9ucykgaWYgKGFuaW1hdGlvbnMuaGFzT3du UHJvcGVydHkoaSkpIHsKKyAgICAgICAgICAgIGxlbisrOworICAgICAgICAg ICAgaWYgKGxlbiA9PSAyKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgbGVuID09IDEgJiYg cmVxdWVzdEFuaW1GcmFtZShmcmFtZSk7CisgICAgICAgIHJldHVybiBhbmlt OworICAgIH07CisgICAgLypcCisgICAgICogbWluYS50aW1lCisgICAgIFsg bWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50 IHRpbWUuIEVxdWl2YWxlbnQgdG86CisgICAgIHwgZnVuY3Rpb24gKCkgewor ICAgICB8ICAgICByZXR1cm4gKG5ldyBEYXRlKS5nZXRUaW1lKCk7CisgICAg IHwgfQorICAgIFwqLworICAgIG1pbmEudGltZSA9IHRpbWVyOworICAgIC8q XAorICAgICAqIG1pbmEuZ2V0QnlJZAorICAgICBbIG1ldGhvZCBdCisgICAg ICoqCisgICAgICogUmV0dXJucyBhbiBhbmltYXRpb24gYnkgaXRzIGlkCisg ICAgIC0gaWQgKHN0cmluZykgYW5pbWF0aW9uJ3MgaWQKKyAgICAgPSAob2Jq ZWN0KSBTZWUgQG1pbmEKKyAgICBcKi8KKyAgICBtaW5hLmdldEJ5SWQgPSBm dW5jdGlvbiAoaWQpIHsKKyAgICAgICAgcmV0dXJuIGFuaW1hdGlvbnNbaWRd IHx8IG51bGw7CisgICAgfTsKKworICAgIC8qXAorICAgICAqIG1pbmEubGlu ZWFyCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBEZWZhdWx0 IGxpbmVhciBlYXNpbmcKKyAgICAgLSBuIChudW1iZXIpIGlucHV0IDAuLjEK KyAgICAgPSAobnVtYmVyKSBvdXRwdXQgMC4uMQorICAgIFwqLworICAgIG1p bmEubGluZWFyID0gZnVuY3Rpb24gKG4pIHsKKyAgICAgICAgcmV0dXJuIG47 CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBtaW5hLmVhc2VvdXQKKyAgICAg WyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEVhc2VvdXQgZWFzaW5nCisg ICAgIC0gbiAobnVtYmVyKSBpbnB1dCAwLi4xCisgICAgID0gKG51bWJlcikg b3V0cHV0IDAuLjEKKyAgICBcKi8KKyAgICBtaW5hLmVhc2VvdXQgPSBmdW5j dGlvbiAobikgeworICAgICAgICByZXR1cm4gTWF0aC5wb3cobiwgMS43KTsK KyAgICB9OworICAgIC8qXAorICAgICAqIG1pbmEuZWFzZWluCisgICAgIFsg bWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBFYXNlaW4gZWFzaW5nCisgICAg IC0gbiAobnVtYmVyKSBpbnB1dCAwLi4xCisgICAgID0gKG51bWJlcikgb3V0 cHV0IDAuLjEKKyAgICBcKi8KKyAgICBtaW5hLmVhc2VpbiA9IGZ1bmN0aW9u IChuKSB7CisgICAgICAgIHJldHVybiBNYXRoLnBvdyhuLCAuNDgpOworICAg IH07CisgICAgLypcCisgICAgICogbWluYS5lYXNlaW5vdXQKKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIEVhc2Vpbm91dCBlYXNpbmcKKyAg ICAgLSBuIChudW1iZXIpIGlucHV0IDAuLjEKKyAgICAgPSAobnVtYmVyKSBv dXRwdXQgMC4uMQorICAgIFwqLworICAgIG1pbmEuZWFzZWlub3V0ID0gZnVu Y3Rpb24gKG4pIHsKKyAgICAgICAgaWYgKG4gPT0gMSkgeworICAgICAgICAg ICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG4gPT0gMCkg eworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAg dmFyIHEgPSAuNDggLSBuIC8gMS4wNCwKKyAgICAgICAgICAgIFEgPSBNYXRo LnNxcnQoLjE3MzQgKyBxICogcSksCisgICAgICAgICAgICB4ID0gUSAtIHEs CisgICAgICAgICAgICBYID0gTWF0aC5wb3coTWF0aC5hYnMoeCksIDEgLyAz KSAqICh4IDwgMCA/IC0xIDogMSksCisgICAgICAgICAgICB5ID0gLVEgLSBx LAorICAgICAgICAgICAgWSA9IE1hdGgucG93KE1hdGguYWJzKHkpLCAxIC8g MykgKiAoeSA8IDAgPyAtMSA6IDEpLAorICAgICAgICAgICAgdCA9IFggKyBZ ICsgLjU7CisgICAgICAgIHJldHVybiAoMSAtIHQpICogMyAqIHQgKiB0ICsg dCAqIHQgKiB0OworICAgIH07CisgICAgLypcCisgICAgICogbWluYS5iYWNr aW4KKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEJhY2tpbiBl YXNpbmcKKyAgICAgLSBuIChudW1iZXIpIGlucHV0IDAuLjEKKyAgICAgPSAo bnVtYmVyKSBvdXRwdXQgMC4uMQorICAgIFwqLworICAgIG1pbmEuYmFja2lu ID0gZnVuY3Rpb24gKG4pIHsKKyAgICAgICAgaWYgKG4gPT0gMSkgeworICAg ICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKyAgICAgICAgdmFyIHMg PSAxLjcwMTU4OworICAgICAgICByZXR1cm4gbiAqIG4gKiAoKHMgKyAxKSAq IG4gLSBzKTsKKyAgICB9OworICAgIC8qXAorICAgICAqIG1pbmEuYmFja291 dAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQmFja291dCBl YXNpbmcKKyAgICAgLSBuIChudW1iZXIpIGlucHV0IDAuLjEKKyAgICAgPSAo bnVtYmVyKSBvdXRwdXQgMC4uMQorICAgIFwqLworICAgIG1pbmEuYmFja291 dCA9IGZ1bmN0aW9uIChuKSB7CisgICAgICAgIGlmIChuID09IDApIHsKKyAg ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIG4gPSBu IC0gMTsKKyAgICAgICAgdmFyIHMgPSAxLjcwMTU4OworICAgICAgICByZXR1 cm4gbiAqIG4gKiAoKHMgKyAxKSAqIG4gKyBzKSArIDE7CisgICAgfTsKKyAg ICAvKlwKKyAgICAgKiBtaW5hLmVsYXN0aWMKKyAgICAgWyBtZXRob2QgXQor ICAgICAqKgorICAgICAqIEVsYXN0aWMgZWFzaW5nCisgICAgIC0gbiAobnVt YmVyKSBpbnB1dCAwLi4xCisgICAgID0gKG51bWJlcikgb3V0cHV0IDAuLjEK KyAgICBcKi8KKyAgICBtaW5hLmVsYXN0aWMgPSBmdW5jdGlvbiAobikgewor ICAgICAgICBpZiAobiA9PSAhIW4pIHsKKyAgICAgICAgICAgIHJldHVybiBu OworICAgICAgICB9CisgICAgICAgIHJldHVybiBNYXRoLnBvdygyLCAtMTAg KiBuKSAqIE1hdGguc2luKChuIC0gLjA3NSkgKgorICAgICAgICAgICAgKDIg KiBNYXRoLlBJKSAvIC4zKSArIDE7CisgICAgfTsKKyAgICAvKlwKKyAgICAg KiBtaW5hLmJvdW5jZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAg ICogQm91bmNlIGVhc2luZworICAgICAtIG4gKG51bWJlcikgaW5wdXQgMC4u MQorICAgICA9IChudW1iZXIpIG91dHB1dCAwLi4xCisgICAgXCovCisgICAg bWluYS5ib3VuY2UgPSBmdW5jdGlvbiAobikgeworICAgICAgICB2YXIgcyA9 IDcuNTYyNSwKKyAgICAgICAgICAgIHAgPSAyLjc1LAorICAgICAgICAgICAg bDsKKyAgICAgICAgaWYgKG4gPCAoMSAvIHApKSB7CisgICAgICAgICAgICBs ID0gcyAqIG4gKiBuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg aWYgKG4gPCAoMiAvIHApKSB7CisgICAgICAgICAgICAgICAgbiAtPSAoMS41 IC8gcCk7CisgICAgICAgICAgICAgICAgbCA9IHMgKiBuICogbiArIC43NTsK KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKG4g PCAoMi41IC8gcCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbiAtPSAoMi4y NSAvIHApOworICAgICAgICAgICAgICAgICAgICBsID0gcyAqIG4gKiBuICsg LjkzNzU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICAgICAgbiAtPSAoMi42MjUgLyBwKTsKKyAgICAgICAgICAgICAgICAg ICAgbCA9IHMgKiBuICogbiArIC45ODQzNzU7CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBs OworICAgIH07CisgICAgd2luZG93Lm1pbmEgPSBtaW5hOworICAgIHJldHVy biBtaW5hOworfSkodHlwZW9mIGV2ZSA9PSAidW5kZWZpbmVkIiA/IGZ1bmN0 aW9uICgpIHt9IDogZXZlKTsKKy8vIENvcHlyaWdodCAoYykgMjAxMyAtIDIw MTUgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNl bnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5 IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgg dGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhl IExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGlj ZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkg YXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3 YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0 cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJS QU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHBy ZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBz cGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisv LyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKwordmFyIFNuYXAg PSAoZnVuY3Rpb24ocm9vdCkgeworU25hcC52ZXJzaW9uID0gIjAuNC4wIjsK Ky8qXAorICogU25hcAorIFsgbWV0aG9kIF0KKyAqKgorICogQ3JlYXRlcyBh IGRyYXdpbmcgc3VyZmFjZSBvciB3cmFwcyBleGlzdGluZyBTVkcgZWxlbWVu dC4KKyAqKgorIC0gd2lkdGggKG51bWJlcnxzdHJpbmcpIHdpZHRoIG9mIHN1 cmZhY2UKKyAtIGhlaWdodCAobnVtYmVyfHN0cmluZykgaGVpZ2h0IG9mIHN1 cmZhY2UKKyAqIG9yCisgLSBET00gKFNWR0VsZW1lbnQpIGVsZW1lbnQgdG8g YmUgd3JhcHBlZCBpbnRvIFNuYXAgc3RydWN0dXJlCisgKiBvcgorIC0gYXJy YXkgKGFycmF5KSBhcnJheSBvZiBlbGVtZW50cyAod2lsbCByZXR1cm4gc2V0 IG9mIGVsZW1lbnRzKQorICogb3IKKyAtIHF1ZXJ5IChzdHJpbmcpIENTUyBx dWVyeSBzZWxlY3RvcgorID0gKG9iamVjdCkgQEVsZW1lbnQKK1wqLworZnVu Y3Rpb24gU25hcCh3LCBoKSB7CisgICAgaWYgKHcpIHsKKyAgICAgICAgaWYg KHcubm9kZVR5cGUpIHsKKyAgICAgICAgICAgIHJldHVybiB3cmFwKHcpOwor ICAgICAgICB9CisgICAgICAgIGlmIChpcyh3LCAiYXJyYXkiKSAmJiBTbmFw LnNldCkgeworICAgICAgICAgICAgcmV0dXJuIFNuYXAuc2V0LmFwcGx5KFNu YXAsIHcpOworICAgICAgICB9CisgICAgICAgIGlmICh3IGluc3RhbmNlb2Yg RWxlbWVudCkgeworICAgICAgICAgICAgcmV0dXJuIHc7CisgICAgICAgIH0K KyAgICAgICAgaWYgKGggPT0gbnVsbCkgeworICAgICAgICAgICAgdyA9IGds b2IuZG9jLnF1ZXJ5U2VsZWN0b3IoU3RyaW5nKHcpKTsKKyAgICAgICAgICAg IHJldHVybiB3cmFwKHcpOworICAgICAgICB9CisgICAgfQorICAgIHcgPSB3 ID09IG51bGwgPyAiMTAwJSIgOiB3OworICAgIGggPSBoID09IG51bGwgPyAi MTAwJSIgOiBoOworICAgIHJldHVybiBuZXcgUGFwZXIodywgaCk7Cit9CitT bmFwLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiAiU25h cCB2IiArIHRoaXMudmVyc2lvbjsKK307CitTbmFwLl8gPSB7fTsKK3ZhciBn bG9iID0geworICAgIHdpbjogcm9vdC53aW5kb3csCisgICAgZG9jOiByb290 LndpbmRvdy5kb2N1bWVudAorfTsKK1NuYXAuXy5nbG9iID0gZ2xvYjsKK3Zh ciBoYXMgPSAiaGFzT3duUHJvcGVydHkiLAorICAgIFN0ciA9IFN0cmluZywK KyAgICB0b0Zsb2F0ID0gcGFyc2VGbG9hdCwKKyAgICB0b0ludCA9IHBhcnNl SW50LAorICAgIG1hdGggPSBNYXRoLAorICAgIG1tYXggPSBtYXRoLm1heCwK KyAgICBtbWluID0gbWF0aC5taW4sCisgICAgYWJzID0gbWF0aC5hYnMsCisg ICAgcG93ID0gbWF0aC5wb3csCisgICAgUEkgPSBtYXRoLlBJLAorICAgIHJv dW5kID0gbWF0aC5yb3VuZCwKKyAgICBFID0gIiIsCisgICAgUyA9ICIgIiwK KyAgICBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJp bmcsCisgICAgSVNVUkwgPSAvXnVybFwoWyciXT8oW15cKV0rPylbJyJdP1wp JC9pLAorICAgIGNvbG91clJlZ0V4cCA9IC9eXHMqKCgjW2EtZlxkXXs2fSl8 KCNbYS1mXGRdezN9KXxyZ2JhP1woXHMqKFtcZFwuXSslP1xzKixccypbXGRc Ll0rJT9ccyosXHMqW1xkXC5dKyU/KD86XHMqLFxzKltcZFwuXSslPyk/KVxz KlwpfGhzYmE/XChccyooW1xkXC5dKyg/OmRlZ3xceGIwfCUpP1xzKixccypb XGRcLl0rJT9ccyosXHMqW1xkXC5dKyg/OiU/XHMqLFxzKltcZFwuXSspPyU/ KVxzKlwpfGhzbGE/XChccyooW1xkXC5dKyg/OmRlZ3xceGIwfCUpP1xzKixc cypbXGRcLl0rJT9ccyosXHMqW1xkXC5dKyg/OiU/XHMqLFxzKltcZFwuXSsp PyU/KVxzKlwpKVxzKiQvaSwKKyAgICBiZXppZXJyZyA9IC9eKD86Y3ViaWMt KT9iZXppZXJcKChbXixdKyksKFteLF0rKSwoW14sXSspLChbXlwpXSspXCkv LAorICAgIHJlVVJMVmFsdWUgPSAvXnVybFwoIz8oW14pXSspXCkkLywKKyAg ICBzZXBhcmF0b3IgPSBTbmFwLl8uc2VwYXJhdG9yID0gL1ssXHNdKy8sCisg ICAgd2hpdGVzcGFjZSA9IC9bXHNdL2csCisgICAgY29tbWFTcGFjZXMgPSAv W1xzXSosW1xzXSovLAorICAgIGhzcmcgPSB7aHM6IDEsIHJnOiAxfSwKKyAg ICBwYXRoQ29tbWFuZCA9IC8oW2Etel0pW1xzLF0qKCgtP1xkKlwuP1xkKig/ OmVbXC0rXT9cZCspP1tcc10qLD9bXHNdKikrKS9pZywKKyAgICB0Q29tbWFu ZCA9IC8oW3JzdG1dKVtccyxdKigoLT9cZCpcLj9cZCooPzplW1wtK10/XGQr KT9bXHNdKiw/W1xzXSopKykvaWcsCisgICAgcGF0aFZhbHVlcyA9IC8oLT9c ZCpcLj9cZCooPzplW1wtK10/XFxkKyk/KVtcc10qLD9bXHNdKi9pZywKKyAg ICBpZGdlbiA9IDAsCisgICAgaWRwcmVmaXggPSAiUyIgKyAoK25ldyBEYXRl KS50b1N0cmluZygzNiksCisgICAgSUQgPSBmdW5jdGlvbiAoZWwpIHsKKyAg ICAgICAgcmV0dXJuIChlbCAmJiBlbC50eXBlID8gZWwudHlwZSA6IEUpICsg aWRwcmVmaXggKyAoaWRnZW4rKykudG9TdHJpbmcoMzYpOworICAgIH0sCisg ICAgeGxpbmsgPSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsCisg ICAgeG1sbnMgPSAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLAorICAg IGh1YiA9IHt9LAorICAgIFVSTCA9IFNuYXAudXJsID0gZnVuY3Rpb24gKHVy bCkgeworICAgICAgICByZXR1cm4gInVybCgnIyIgKyB1cmwgKyAiJykiOwor ICAgIH07CisKK2Z1bmN0aW9uICQoZWwsIGF0dHIpIHsKKyAgICBpZiAoYXR0 cikgeworICAgICAgICBpZiAoZWwgPT0gIiN0ZXh0IikgeworICAgICAgICAg ICAgZWwgPSBnbG9iLmRvYy5jcmVhdGVUZXh0Tm9kZShhdHRyLnRleHQgfHwg YXR0clsiI3RleHQiXSB8fCAiIik7CisgICAgICAgIH0KKyAgICAgICAgaWYg KGVsID09ICIjY29tbWVudCIpIHsKKyAgICAgICAgICAgIGVsID0gZ2xvYi5k b2MuY3JlYXRlQ29tbWVudChhdHRyLnRleHQgfHwgYXR0clsiI3RleHQiXSB8 fCAiIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGVvZiBlbCA9PSAi c3RyaW5nIikgeworICAgICAgICAgICAgZWwgPSAkKGVsKTsKKyAgICAgICAg fQorICAgICAgICBpZiAodHlwZW9mIGF0dHIgPT0gInN0cmluZyIpIHsKKyAg ICAgICAgICAgIGlmIChlbC5ub2RlVHlwZSA9PSAxKSB7CisgICAgICAgICAg ICAgICAgaWYgKGF0dHIuc3Vic3RyaW5nKDAsIDYpID09ICJ4bGluazoiKSB7 CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbC5nZXRBdHRyaWJ1dGVO Uyh4bGluaywgYXR0ci5zdWJzdHJpbmcoNikpOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBpZiAoYXR0ci5zdWJzdHJpbmcoMCwgNCkg PT0gInhtbDoiKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlbC5n ZXRBdHRyaWJ1dGVOUyh4bWxucywgYXR0ci5zdWJzdHJpbmcoNCkpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gZWwuZ2V0 QXR0cmlidXRlKGF0dHIpOworICAgICAgICAgICAgfSBlbHNlIGlmIChhdHRy ID09ICJ0ZXh0IikgeworICAgICAgICAgICAgICAgIHJldHVybiBlbC5ub2Rl VmFsdWU7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg IHJldHVybiBudWxsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg ICAgIGlmIChlbC5ub2RlVHlwZSA9PSAxKSB7CisgICAgICAgICAgICBmb3Ig KHZhciBrZXkgaW4gYXR0cikgaWYgKGF0dHJbaGFzXShrZXkpKSB7CisgICAg ICAgICAgICAgICAgdmFyIHZhbCA9IFN0cihhdHRyW2tleV0pOworICAgICAg ICAgICAgICAgIGlmICh2YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg KGtleS5zdWJzdHJpbmcoMCwgNikgPT0gInhsaW5rOiIpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGVsLnNldEF0dHJpYnV0ZU5TKHhsaW5rLCBrZXku c3Vic3RyaW5nKDYpLCB2YWwpOworICAgICAgICAgICAgICAgICAgICB9IGVs c2UgaWYgKGtleS5zdWJzdHJpbmcoMCwgNCkgPT0gInhtbDoiKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGVOUyh4bWxucywg a2V5LnN1YnN0cmluZyg0KSwgdmFsKTsKKyAgICAgICAgICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsLnNldEF0dHJp YnV0ZShrZXksIHZhbCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBlbC5y ZW1vdmVBdHRyaWJ1dGUoa2V5KTsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoInRleHQiIGluIGF0dHIp IHsKKyAgICAgICAgICAgIGVsLm5vZGVWYWx1ZSA9IGF0dHIudGV4dDsKKyAg ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGVsID0gZ2xvYi5kb2Mu Y3JlYXRlRWxlbWVudE5TKHhtbG5zLCBlbCk7CisgICAgfQorICAgIHJldHVy biBlbDsKK30KK1NuYXAuXy4kID0gJDsKK1NuYXAuXy5pZCA9IElEOworZnVu Y3Rpb24gZ2V0QXR0cnMoZWwpIHsKKyAgICB2YXIgYXR0cnMgPSBlbC5hdHRy aWJ1dGVzLAorICAgICAgICBuYW1lLAorICAgICAgICBvdXQgPSB7fTsKKyAg ICBmb3IgKHZhciBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7Cisg ICAgICAgIGlmIChhdHRyc1tpXS5uYW1lc3BhY2VVUkkgPT0geGxpbmspIHsK KyAgICAgICAgICAgIG5hbWUgPSAieGxpbms6IjsKKyAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIG5hbWUgPSAiIjsKKyAgICAgICAgfQorICAgICAg ICBuYW1lICs9IGF0dHJzW2ldLm5hbWU7CisgICAgICAgIG91dFtuYW1lXSA9 IGF0dHJzW2ldLnRleHRDb250ZW50OworICAgIH0KKyAgICByZXR1cm4gb3V0 OworfQorZnVuY3Rpb24gaXMobywgdHlwZSkgeworICAgIHR5cGUgPSBTdHIu cHJvdG90eXBlLnRvTG93ZXJDYXNlLmNhbGwodHlwZSk7CisgICAgaWYgKHR5 cGUgPT0gImZpbml0ZSIpIHsKKyAgICAgICAgcmV0dXJuIGlzRmluaXRlKG8p OworICAgIH0KKyAgICBpZiAodHlwZSA9PSAiYXJyYXkiICYmCisgICAgICAg IChvIGluc3RhbmNlb2YgQXJyYXkgfHwgQXJyYXkuaXNBcnJheSAmJiBBcnJh eS5pc0FycmF5KG8pKSkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9 CisgICAgcmV0dXJuICAodHlwZSA9PSAibnVsbCIgJiYgbyA9PT0gbnVsbCkg fHwKKyAgICAgICAgICAgICh0eXBlID09IHR5cGVvZiBvICYmIG8gIT09IG51 bGwpIHx8CisgICAgICAgICAgICAodHlwZSA9PSAib2JqZWN0IiAmJiBvID09 PSBPYmplY3QobykpIHx8CisgICAgICAgICAgICBvYmplY3RUb1N0cmluZy5j YWxsKG8pLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpID09IHR5cGU7Cit9 CisvKlwKKyAqIFNuYXAuZm9ybWF0CisgWyBtZXRob2QgXQorICoqCisgKiBS ZXBsYWNlcyBjb25zdHJ1Y3Rpb24gb2YgdHlwZSBgezxuYW1lPn1gIHRvIHRo ZSBjb3JyZXNwb25kaW5nIGFyZ3VtZW50CisgKioKKyAtIHRva2VuIChzdHJp bmcpIHN0cmluZyB0byBmb3JtYXQKKyAtIGpzb24gKG9iamVjdCkgb2JqZWN0 IHdoaWNoIHByb3BlcnRpZXMgYXJlIHVzZWQgYXMgYSByZXBsYWNlbWVudAor ID0gKHN0cmluZykgZm9ybWF0dGVkIHN0cmluZworID4gVXNhZ2UKKyB8IC8v IHRoaXMgZHJhd3MgYSByZWN0YW5ndWxhciBzaGFwZSBlcXVpdmFsZW50IHRv ICJNMTAsMjBoNDB2NTBoLTQweiIKKyB8IHBhcGVyLnBhdGgoU25hcC5mb3Jt YXQoIk17eH0se3l9aHtkaW0ud2lkdGh9dntkaW0uaGVpZ2h0fWh7ZGltWydu ZWdhdGl2ZSB3aWR0aCddfXoiLCB7CisgfCAgICAgeDogMTAsCisgfCAgICAg eTogMjAsCisgfCAgICAgZGltOiB7CisgfCAgICAgICAgIHdpZHRoOiA0MCwK KyB8ICAgICAgICAgaGVpZ2h0OiA1MCwKKyB8ICAgICAgICAgIm5lZ2F0aXZl IHdpZHRoIjogLTQwCisgfCAgICAgfQorIHwgfSkpOworXCovCitTbmFwLmZv cm1hdCA9IChmdW5jdGlvbiAoKSB7CisgICAgdmFyIHRva2VuUmVnZXggPSAv XHsoW15cfV0rKVx9L2csCisgICAgICAgIG9iak5vdGF0aW9uUmVnZXggPSAv KD86KD86XnxcLikoLis/KSg/PVxbfFwufCR8XCgpfFxbKCd8IikoLis/KVwy XF0pKFwoXCkpPy9nLCAvLyBtYXRjaGVzIC54eHh4eCBvciBbInh4eHh4Il0g dG8gcnVuIG92ZXIgb2JqZWN0IHByb3BlcnRpZXMKKyAgICAgICAgcmVwbGFj ZXIgPSBmdW5jdGlvbiAoYWxsLCBrZXksIG9iaikgeworICAgICAgICAgICAg dmFyIHJlcyA9IG9iajsKKyAgICAgICAgICAgIGtleS5yZXBsYWNlKG9iak5v dGF0aW9uUmVnZXgsIGZ1bmN0aW9uIChhbGwsIG5hbWUsIHF1b3RlLCBxdW90 ZWROYW1lLCBpc0Z1bmMpIHsKKyAgICAgICAgICAgICAgICBuYW1lID0gbmFt ZSB8fCBxdW90ZWROYW1lOworICAgICAgICAgICAgICAgIGlmIChyZXMpIHsK KyAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgaW4gcmVzKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICByZXMgPSByZXNbbmFtZV07CisgICAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJl cyA9PSAiZnVuY3Rpb24iICYmIGlzRnVuYyAmJiAocmVzID0gcmVzKCkpOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0pOworICAgICAgICAg ICAgcmVzID0gKHJlcyA9PSBudWxsIHx8IHJlcyA9PSBvYmogPyBhbGwgOiBy ZXMpICsgIiI7CisgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICB9 OworICAgIHJldHVybiBmdW5jdGlvbiAoc3RyLCBvYmopIHsKKyAgICAgICAg cmV0dXJuIFN0cihzdHIpLnJlcGxhY2UodG9rZW5SZWdleCwgZnVuY3Rpb24g KGFsbCwga2V5KSB7CisgICAgICAgICAgICByZXR1cm4gcmVwbGFjZXIoYWxs LCBrZXksIG9iaik7CisgICAgICAgIH0pOworICAgIH07Cit9KSgpOworZnVu Y3Rpb24gY2xvbmUob2JqKSB7CisgICAgaWYgKHR5cGVvZiBvYmogPT0gImZ1 bmN0aW9uIiB8fCBPYmplY3Qob2JqKSAhPT0gb2JqKSB7CisgICAgICAgIHJl dHVybiBvYmo7CisgICAgfQorICAgIHZhciByZXMgPSBuZXcgb2JqLmNvbnN0 cnVjdG9yOworICAgIGZvciAodmFyIGtleSBpbiBvYmopIGlmIChvYmpbaGFz XShrZXkpKSB7CisgICAgICAgIHJlc1trZXldID0gY2xvbmUob2JqW2tleV0p OworICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorU25hcC5fLmNsb25lID0g Y2xvbmU7CitmdW5jdGlvbiByZXB1c2goYXJyYXksIGl0ZW0pIHsKKyAgICBm b3IgKHZhciBpID0gMCwgaWkgPSBhcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsr KSBpZiAoYXJyYXlbaV0gPT09IGl0ZW0pIHsKKyAgICAgICAgcmV0dXJuIGFy cmF5LnB1c2goYXJyYXkuc3BsaWNlKGksIDEpWzBdKTsKKyAgICB9Cit9Citm dW5jdGlvbiBjYWNoZXIoZiwgc2NvcGUsIHBvc3Rwcm9jZXNzb3IpIHsKKyAg ICBmdW5jdGlvbiBuZXdmKCkgeworICAgICAgICB2YXIgYXJnID0gQXJyYXku cHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSwKKyAgICAgICAg ICAgIGFyZ3MgPSBhcmcuam9pbigiXHUyNDAwIiksCisgICAgICAgICAgICBj YWNoZSA9IG5ld2YuY2FjaGUgPSBuZXdmLmNhY2hlIHx8IHt9LAorICAgICAg ICAgICAgY291bnQgPSBuZXdmLmNvdW50ID0gbmV3Zi5jb3VudCB8fCBbXTsK KyAgICAgICAgaWYgKGNhY2hlW2hhc10oYXJncykpIHsKKyAgICAgICAgICAg IHJlcHVzaChjb3VudCwgYXJncyk7CisgICAgICAgICAgICByZXR1cm4gcG9z dHByb2Nlc3NvciA/IHBvc3Rwcm9jZXNzb3IoY2FjaGVbYXJnc10pIDogY2Fj aGVbYXJnc107CisgICAgICAgIH0KKyAgICAgICAgY291bnQubGVuZ3RoID49 IDFlMyAmJiBkZWxldGUgY2FjaGVbY291bnQuc2hpZnQoKV07CisgICAgICAg IGNvdW50LnB1c2goYXJncyk7CisgICAgICAgIGNhY2hlW2FyZ3NdID0gZi5h cHBseShzY29wZSwgYXJnKTsKKyAgICAgICAgcmV0dXJuIHBvc3Rwcm9jZXNz b3IgPyBwb3N0cHJvY2Vzc29yKGNhY2hlW2FyZ3NdKSA6IGNhY2hlW2FyZ3Nd OworICAgIH0KKyAgICByZXR1cm4gbmV3ZjsKK30KK1NuYXAuXy5jYWNoZXIg PSBjYWNoZXI7CitmdW5jdGlvbiBhbmdsZSh4MSwgeTEsIHgyLCB5MiwgeDMs IHkzKSB7CisgICAgaWYgKHgzID09IG51bGwpIHsKKyAgICAgICAgdmFyIHgg PSB4MSAtIHgyLAorICAgICAgICAgICAgeSA9IHkxIC0geTI7CisgICAgICAg IGlmICgheCAmJiAheSkgeworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg ICAgIH0KKyAgICAgICAgcmV0dXJuICgxODAgKyBtYXRoLmF0YW4yKC15LCAt eCkgKiAxODAgLyBQSSArIDM2MCkgJSAzNjA7CisgICAgfSBlbHNlIHsKKyAg ICAgICAgcmV0dXJuIGFuZ2xlKHgxLCB5MSwgeDMsIHkzKSAtIGFuZ2xlKHgy LCB5MiwgeDMsIHkzKTsKKyAgICB9Cit9CitmdW5jdGlvbiByYWQoZGVnKSB7 CisgICAgcmV0dXJuIGRlZyAlIDM2MCAqIFBJIC8gMTgwOworfQorZnVuY3Rp b24gZGVnKHJhZCkgeworICAgIHJldHVybiByYWQgKiAxODAgLyBQSSAlIDM2 MDsKK30KK2Z1bmN0aW9uIHhfeSgpIHsKKyAgICByZXR1cm4gdGhpcy54ICsg UyArIHRoaXMueTsKK30KK2Z1bmN0aW9uIHhfeV93X2goKSB7CisgICAgcmV0 dXJuIHRoaXMueCArIFMgKyB0aGlzLnkgKyBTICsgdGhpcy53aWR0aCArICIg XHhkNyAiICsgdGhpcy5oZWlnaHQ7Cit9CisKKy8qXAorICogU25hcC5yYWQK KyBbIG1ldGhvZCBdCisgKioKKyAqIFRyYW5zZm9ybSBhbmdsZSB0byByYWRp YW5zCisgLSBkZWcgKG51bWJlcikgYW5nbGUgaW4gZGVncmVlcworID0gKG51 bWJlcikgYW5nbGUgaW4gcmFkaWFucworXCovCitTbmFwLnJhZCA9IHJhZDsK Ky8qXAorICogU25hcC5kZWcKKyBbIG1ldGhvZCBdCisgKioKKyAqIFRyYW5z Zm9ybSBhbmdsZSB0byBkZWdyZWVzCisgLSByYWQgKG51bWJlcikgYW5nbGUg aW4gcmFkaWFucworID0gKG51bWJlcikgYW5nbGUgaW4gZGVncmVlcworXCov CitTbmFwLmRlZyA9IGRlZzsKKy8qXAorICogU25hcC5zaW4KKyBbIG1ldGhv ZCBdCisgKioKKyAqIEVxdWl2YWxlbnQgdG8gYE1hdGguc2luKClgIG9ubHkg d29ya3Mgd2l0aCBkZWdyZWVzLCBub3QgcmFkaWFucy4KKyAtIGFuZ2xlIChu dW1iZXIpIGFuZ2xlIGluIGRlZ3JlZXMKKyA9IChudW1iZXIpIHNpbgorXCov CitTbmFwLnNpbiA9IGZ1bmN0aW9uIChhbmdsZSkgeworICAgIHJldHVybiBt YXRoLnNpbihTbmFwLnJhZChhbmdsZSkpOworfTsKKy8qXAorICogU25hcC50 YW4KKyBbIG1ldGhvZCBdCisgKioKKyAqIEVxdWl2YWxlbnQgdG8gYE1hdGgu dGFuKClgIG9ubHkgd29ya3Mgd2l0aCBkZWdyZWVzLCBub3QgcmFkaWFucy4K KyAtIGFuZ2xlIChudW1iZXIpIGFuZ2xlIGluIGRlZ3JlZXMKKyA9IChudW1i ZXIpIHRhbgorXCovCitTbmFwLnRhbiA9IGZ1bmN0aW9uIChhbmdsZSkgewor ICAgIHJldHVybiBtYXRoLnRhbihTbmFwLnJhZChhbmdsZSkpOworfTsKKy8q XAorICogU25hcC5jb3MKKyBbIG1ldGhvZCBdCisgKioKKyAqIEVxdWl2YWxl bnQgdG8gYE1hdGguY29zKClgIG9ubHkgd29ya3Mgd2l0aCBkZWdyZWVzLCBu b3QgcmFkaWFucy4KKyAtIGFuZ2xlIChudW1iZXIpIGFuZ2xlIGluIGRlZ3Jl ZXMKKyA9IChudW1iZXIpIGNvcworXCovCitTbmFwLmNvcyA9IGZ1bmN0aW9u IChhbmdsZSkgeworICAgIHJldHVybiBtYXRoLmNvcyhTbmFwLnJhZChhbmds ZSkpOworfTsKKy8qXAorICogU25hcC5hc2luCisgWyBtZXRob2QgXQorICoq CisgKiBFcXVpdmFsZW50IHRvIGBNYXRoLmFzaW4oKWAgb25seSB3b3JrcyB3 aXRoIGRlZ3JlZXMsIG5vdCByYWRpYW5zLgorIC0gbnVtIChudW1iZXIpIHZh bHVlCisgPSAobnVtYmVyKSBhc2luIGluIGRlZ3JlZXMKK1wqLworU25hcC5h c2luID0gZnVuY3Rpb24gKG51bSkgeworICAgIHJldHVybiBTbmFwLmRlZyht YXRoLmFzaW4obnVtKSk7Cit9OworLypcCisgKiBTbmFwLmFjb3MKKyBbIG1l dGhvZCBdCisgKioKKyAqIEVxdWl2YWxlbnQgdG8gYE1hdGguYWNvcygpYCBv bmx5IHdvcmtzIHdpdGggZGVncmVlcywgbm90IHJhZGlhbnMuCisgLSBudW0g KG51bWJlcikgdmFsdWUKKyA9IChudW1iZXIpIGFjb3MgaW4gZGVncmVlcwor XCovCitTbmFwLmFjb3MgPSBmdW5jdGlvbiAobnVtKSB7CisgICAgcmV0dXJu IFNuYXAuZGVnKG1hdGguYWNvcyhudW0pKTsKK307CisvKlwKKyAqIFNuYXAu YXRhbgorIFsgbWV0aG9kIF0KKyAqKgorICogRXF1aXZhbGVudCB0byBgTWF0 aC5hdGFuKClgIG9ubHkgd29ya3Mgd2l0aCBkZWdyZWVzLCBub3QgcmFkaWFu cy4KKyAtIG51bSAobnVtYmVyKSB2YWx1ZQorID0gKG51bWJlcikgYXRhbiBp biBkZWdyZWVzCitcKi8KK1NuYXAuYXRhbiA9IGZ1bmN0aW9uIChudW0pIHsK KyAgICByZXR1cm4gU25hcC5kZWcobWF0aC5hdGFuKG51bSkpOworfTsKKy8q XAorICogU25hcC5hdGFuMgorIFsgbWV0aG9kIF0KKyAqKgorICogRXF1aXZh bGVudCB0byBgTWF0aC5hdGFuMigpYCBvbmx5IHdvcmtzIHdpdGggZGVncmVl cywgbm90IHJhZGlhbnMuCisgLSBudW0gKG51bWJlcikgdmFsdWUKKyA9IChu dW1iZXIpIGF0YW4yIGluIGRlZ3JlZXMKK1wqLworU25hcC5hdGFuMiA9IGZ1 bmN0aW9uIChudW0pIHsKKyAgICByZXR1cm4gU25hcC5kZWcobWF0aC5hdGFu MihudW0pKTsKK307CisvKlwKKyAqIFNuYXAuYW5nbGUKKyBbIG1ldGhvZCBd CisgKioKKyAqIFJldHVybnMgYW4gYW5nbGUgYmV0d2VlbiB0d28gb3IgdGhy ZWUgcG9pbnRzCisgPiBQYXJhbWV0ZXJzCisgLSB4MSAobnVtYmVyKSB4IGNv b3JkIG9mIGZpcnN0IHBvaW50CisgLSB5MSAobnVtYmVyKSB5IGNvb3JkIG9m IGZpcnN0IHBvaW50CisgLSB4MiAobnVtYmVyKSB4IGNvb3JkIG9mIHNlY29u ZCBwb2ludAorIC0geTIgKG51bWJlcikgeSBjb29yZCBvZiBzZWNvbmQgcG9p bnQKKyAtIHgzIChudW1iZXIpICNvcHRpb25hbCB4IGNvb3JkIG9mIHRoaXJk IHBvaW50CisgLSB5MyAobnVtYmVyKSAjb3B0aW9uYWwgeSBjb29yZCBvZiB0 aGlyZCBwb2ludAorID0gKG51bWJlcikgYW5nbGUgaW4gZGVncmVlcworXCov CitTbmFwLmFuZ2xlID0gYW5nbGU7CisvKlwKKyAqIFNuYXAubGVuCisgWyBt ZXRob2QgXQorICoqCisgKiBSZXR1cm5zIGRpc3RhbmNlIGJldHdlZW4gdHdv IHBvaW50cworID4gUGFyYW1ldGVycworIC0geDEgKG51bWJlcikgeCBjb29y ZCBvZiBmaXJzdCBwb2ludAorIC0geTEgKG51bWJlcikgeSBjb29yZCBvZiBm aXJzdCBwb2ludAorIC0geDIgKG51bWJlcikgeCBjb29yZCBvZiBzZWNvbmQg cG9pbnQKKyAtIHkyIChudW1iZXIpIHkgY29vcmQgb2Ygc2Vjb25kIHBvaW50 CisgPSAobnVtYmVyKSBkaXN0YW5jZQorXCovCitTbmFwLmxlbiA9IGZ1bmN0 aW9uICh4MSwgeTEsIHgyLCB5MikgeworICAgIHJldHVybiBNYXRoLnNxcnQo U25hcC5sZW4yKHgxLCB5MSwgeDIsIHkyKSk7Cit9OworLypcCisgKiBTbmFw LmxlbjIKKyBbIG1ldGhvZCBdCisgKioKKyAqIFJldHVybnMgc3F1YXJlZCBk aXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHMKKyA+IFBhcmFtZXRlcnMKKyAt IHgxIChudW1iZXIpIHggY29vcmQgb2YgZmlyc3QgcG9pbnQKKyAtIHkxIChu dW1iZXIpIHkgY29vcmQgb2YgZmlyc3QgcG9pbnQKKyAtIHgyIChudW1iZXIp IHggY29vcmQgb2Ygc2Vjb25kIHBvaW50CisgLSB5MiAobnVtYmVyKSB5IGNv b3JkIG9mIHNlY29uZCBwb2ludAorID0gKG51bWJlcikgZGlzdGFuY2UKK1wq LworU25hcC5sZW4yID0gZnVuY3Rpb24gKHgxLCB5MSwgeDIsIHkyKSB7Cisg ICAgcmV0dXJuICh4MSAtIHgyKSAqICh4MSAtIHgyKSArICh5MSAtIHkyKSAq ICh5MSAtIHkyKTsKK307CisvKlwKKyAqIFNuYXAuY2xvc2VzdFBvaW50Cisg WyBtZXRob2QgXQorICoqCisgKiBSZXR1cm5zIGNsb3Nlc3QgcG9pbnQgdG8g YSBnaXZlbiBvbmUgb24gYSBnaXZlbiBwYXRoLgorID4gUGFyYW1ldGVycwor IC0gcGF0aCAoRWxlbWVudCkgcGF0aCBlbGVtZW50CisgLSB4IChudW1iZXIp IHggY29vcmQgb2YgYSBwb2ludAorIC0geSAobnVtYmVyKSB5IGNvb3JkIG9m IGEgcG9pbnQKKyA9IChvYmplY3QpIGluIGZvcm1hdAorIHsKKyAgICB4IChu dW1iZXIpIHggY29vcmQgb2YgdGhlIHBvaW50IG9uIHRoZSBwYXRoCisgICAg eSAobnVtYmVyKSB5IGNvb3JkIG9mIHRoZSBwb2ludCBvbiB0aGUgcGF0aAor ICAgIGxlbmd0aCAobnVtYmVyKSBsZW5ndGggb2YgdGhlIHBhdGggdG8gdGhl IHBvaW50CisgICAgZGlzdGFuY2UgKG51bWJlcikgZGlzdGFuY2UgZnJvbSB0 aGUgZ2l2ZW4gcG9pbnQgdG8gdGhlIHBhdGgKKyB9CitcKi8KKy8vIENvcGll ZCBmcm9tIGh0dHA6Ly9ibC5vY2tzLm9yZy9tYm9zdG9jay84MDI3NjM3CitT bmFwLmNsb3Nlc3RQb2ludCA9IGZ1bmN0aW9uIChwYXRoLCB4LCB5KSB7Cisg ICAgZnVuY3Rpb24gZGlzdGFuY2UyKHApIHsKKyAgICAgICAgdmFyIGR4ID0g cC54IC0geCwKKyAgICAgICAgICAgIGR5ID0gcC55IC0geTsKKyAgICAgICAg cmV0dXJuIGR4ICogZHggKyBkeSAqIGR5OworICAgIH0KKyAgICB2YXIgcGF0 aE5vZGUgPSBwYXRoLm5vZGUsCisgICAgICAgIHBhdGhMZW5ndGggPSBwYXRo Tm9kZS5nZXRUb3RhbExlbmd0aCgpLAorICAgICAgICBwcmVjaXNpb24gPSBw YXRoTGVuZ3RoIC8gcGF0aE5vZGUucGF0aFNlZ0xpc3QubnVtYmVyT2ZJdGVt cyAqIC4xMjUsCisgICAgICAgIGJlc3QsCisgICAgICAgIGJlc3RMZW5ndGgs CisgICAgICAgIGJlc3REaXN0YW5jZSA9IEluZmluaXR5OworCisgICAgLy8g bGluZWFyIHNjYW4gZm9yIGNvYXJzZSBhcHByb3hpbWF0aW9uCisgICAgZm9y ICh2YXIgc2Nhbiwgc2Nhbkxlbmd0aCA9IDAsIHNjYW5EaXN0YW5jZTsgc2Nh bkxlbmd0aCA8PSBwYXRoTGVuZ3RoOyBzY2FuTGVuZ3RoICs9IHByZWNpc2lv bikgeworICAgICAgICBpZiAoKHNjYW5EaXN0YW5jZSA9IGRpc3RhbmNlMihz Y2FuID0gcGF0aE5vZGUuZ2V0UG9pbnRBdExlbmd0aChzY2FuTGVuZ3RoKSkp IDwgYmVzdERpc3RhbmNlKSB7CisgICAgICAgICAgICBiZXN0ID0gc2Nhbiwg YmVzdExlbmd0aCA9IHNjYW5MZW5ndGgsIGJlc3REaXN0YW5jZSA9IHNjYW5E aXN0YW5jZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGJpbmFyeSBz ZWFyY2ggZm9yIHByZWNpc2UgZXN0aW1hdGUKKyAgICBwcmVjaXNpb24gKj0g LjU7CisgICAgd2hpbGUgKHByZWNpc2lvbiA+IC41KSB7CisgICAgICAgIHZh ciBiZWZvcmUsCisgICAgICAgICAgICBhZnRlciwKKyAgICAgICAgICAgIGJl Zm9yZUxlbmd0aCwKKyAgICAgICAgICAgIGFmdGVyTGVuZ3RoLAorICAgICAg ICAgICAgYmVmb3JlRGlzdGFuY2UsCisgICAgICAgICAgICBhZnRlckRpc3Rh bmNlOworICAgICAgICBpZiAoKGJlZm9yZUxlbmd0aCA9IGJlc3RMZW5ndGgg LSBwcmVjaXNpb24pID49IDAgJiYgKGJlZm9yZURpc3RhbmNlID0gZGlzdGFu Y2UyKGJlZm9yZSA9IHBhdGhOb2RlLmdldFBvaW50QXRMZW5ndGgoYmVmb3Jl TGVuZ3RoKSkpIDwgYmVzdERpc3RhbmNlKSB7CisgICAgICAgICAgICBiZXN0 ID0gYmVmb3JlLCBiZXN0TGVuZ3RoID0gYmVmb3JlTGVuZ3RoLCBiZXN0RGlz dGFuY2UgPSBiZWZvcmVEaXN0YW5jZTsKKyAgICAgICAgfSBlbHNlIGlmICgo YWZ0ZXJMZW5ndGggPSBiZXN0TGVuZ3RoICsgcHJlY2lzaW9uKSA8PSBwYXRo TGVuZ3RoICYmIChhZnRlckRpc3RhbmNlID0gZGlzdGFuY2UyKGFmdGVyID0g cGF0aE5vZGUuZ2V0UG9pbnRBdExlbmd0aChhZnRlckxlbmd0aCkpKSA8IGJl c3REaXN0YW5jZSkgeworICAgICAgICAgICAgYmVzdCA9IGFmdGVyLCBiZXN0 TGVuZ3RoID0gYWZ0ZXJMZW5ndGgsIGJlc3REaXN0YW5jZSA9IGFmdGVyRGlz dGFuY2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwcmVjaXNp b24gKj0gLjU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBiZXN0ID0gewor ICAgICAgICB4OiBiZXN0LngsCisgICAgICAgIHk6IGJlc3QueSwKKyAgICAg ICAgbGVuZ3RoOiBiZXN0TGVuZ3RoLAorICAgICAgICBkaXN0YW5jZTogTWF0 aC5zcXJ0KGJlc3REaXN0YW5jZSkKKyAgICB9OworICAgIHJldHVybiBiZXN0 OworfQorLypcCisgKiBTbmFwLmlzCisgWyBtZXRob2QgXQorICoqCisgKiBI YW5keSByZXBsYWNlbWVudCBmb3IgdGhlIGB0eXBlb2ZgIG9wZXJhdG9yCisg LSBvICjigKYpIGFueSBvYmplY3Qgb3IgcHJpbWl0aXZlCisgLSB0eXBlIChz dHJpbmcpIG5hbWUgb2YgdGhlIHR5cGUsIGUuZy4sIGBzdHJpbmdgLCBgZnVu Y3Rpb25gLCBgbnVtYmVyYCwgZXRjLgorID0gKGJvb2xlYW4pIGB0cnVlYCBp ZiBnaXZlbiB2YWx1ZSBpcyBvZiBnaXZlbiB0eXBlCitcKi8KK1NuYXAuaXMg PSBpczsKKy8qXAorICogU25hcC5zbmFwVG8KKyBbIG1ldGhvZCBdCisgKioK KyAqIFNuYXBzIGdpdmVuIHZhbHVlIHRvIGdpdmVuIGdyaWQKKyAtIHZhbHVl cyAoYXJyYXl8bnVtYmVyKSBnaXZlbiBhcnJheSBvZiB2YWx1ZXMgb3Igc3Rl cCBvZiB0aGUgZ3JpZAorIC0gdmFsdWUgKG51bWJlcikgdmFsdWUgdG8gYWRq dXN0CisgLSB0b2xlcmFuY2UgKG51bWJlcikgI29wdGlvbmFsIG1heGltdW0g ZGlzdGFuY2UgdG8gdGhlIHRhcmdldCB2YWx1ZSB0aGF0IHdvdWxkIHRyaWdn ZXIgdGhlIHNuYXAuIERlZmF1bHQgaXMgYDEwYC4KKyA9IChudW1iZXIpIGFk anVzdGVkIHZhbHVlCitcKi8KK1NuYXAuc25hcFRvID0gZnVuY3Rpb24gKHZh bHVlcywgdmFsdWUsIHRvbGVyYW5jZSkgeworICAgIHRvbGVyYW5jZSA9IGlz KHRvbGVyYW5jZSwgImZpbml0ZSIpID8gdG9sZXJhbmNlIDogMTA7CisgICAg aWYgKGlzKHZhbHVlcywgImFycmF5IikpIHsKKyAgICAgICAgdmFyIGkgPSB2 YWx1ZXMubGVuZ3RoOworICAgICAgICB3aGlsZSAoaS0tKSBpZiAoYWJzKHZh bHVlc1tpXSAtIHZhbHVlKSA8PSB0b2xlcmFuY2UpIHsKKyAgICAgICAgICAg IHJldHVybiB2YWx1ZXNbaV07CisgICAgICAgIH0KKyAgICB9IGVsc2Ugewor ICAgICAgICB2YWx1ZXMgPSArdmFsdWVzOworICAgICAgICB2YXIgcmVtID0g dmFsdWUgJSB2YWx1ZXM7CisgICAgICAgIGlmIChyZW0gPCB0b2xlcmFuY2Up IHsKKyAgICAgICAgICAgIHJldHVybiB2YWx1ZSAtIHJlbTsKKyAgICAgICAg fQorICAgICAgICBpZiAocmVtID4gdmFsdWVzIC0gdG9sZXJhbmNlKSB7Cisg ICAgICAgICAgICByZXR1cm4gdmFsdWUgLSByZW0gKyB2YWx1ZXM7CisgICAg ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHZhbHVlOworfTsKKy8vIENvbG91 cgorLypcCisgKiBTbmFwLmdldFJHQgorIFsgbWV0aG9kIF0KKyAqKgorICog UGFyc2VzIGNvbG9yIHN0cmluZyBhcyBSR0Igb2JqZWN0CisgLSBjb2xvciAo c3RyaW5nKSBjb2xvciBzdHJpbmcgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcg Zm9ybWF0czoKKyAjIDx1bD4KKyAjICAgICA8bGk+Q29sb3IgbmFtZSAoPGNv ZGU+cmVkPC9jb2RlPiwgPGNvZGU+Z3JlZW48L2NvZGU+LCA8Y29kZT5jb3Ju Zmxvd2VyYmx1ZTwvY29kZT4sIGV0Yyk8L2xpPgorICMgICAgIDxsaT4j4oCi 4oCi4oCiIOKAlCBzaG9ydGVuZWQgSFRNTCBjb2xvcjogKDxjb2RlPiMwMDA8 L2NvZGU+LCA8Y29kZT4jZmMwPC9jb2RlPiwgZXRjLik8L2xpPgorICMgICAg IDxsaT4j4oCi4oCi4oCi4oCi4oCi4oCiIOKAlCBmdWxsIGxlbmd0aCBIVE1M IGNvbG9yOiAoPGNvZGU+IzAwMDAwMDwvY29kZT4sIDxjb2RlPiNiZDIzMDA8 L2NvZGU+KTwvbGk+CisgIyAgICAgPGxpPnJnYijigKLigKLigKIsIOKAouKA ouKAoiwg4oCi4oCi4oCiKSDigJQgcmVkLCBncmVlbiBhbmQgYmx1ZSBjaGFu bmVscyB2YWx1ZXM6ICg8Y29kZT5yZ2IoMjAwLCZuYnNwOzEwMCwmbmJzcDsw KTwvY29kZT4pPC9saT4KKyAjICAgICA8bGk+cmdiYSjigKLigKLigKIsIOKA ouKAouKAoiwg4oCi4oCi4oCiLCDigKLigKLigKIpIOKAlCBhbHNvIHdpdGgg b3BhY2l0eTwvbGk+CisgIyAgICAgPGxpPnJnYijigKLigKLigKIlLCDigKLi gKLigKIlLCDigKLigKLigKIlKSDigJQgc2FtZSBhcyBhYm92ZSwgYnV0IGlu ICU6ICg8Y29kZT5yZ2IoMTAwJSwmbmJzcDsxNzUlLCZuYnNwOzAlKTwvY29k ZT4pPC9saT4KKyAjICAgICA8bGk+cmdiYSjigKLigKLigKIlLCDigKLigKLi gKIlLCDigKLigKLigKIlLCDigKLigKLigKIlKSDigJQgYWxzbyB3aXRoIG9w YWNpdHk8L2xpPgorICMgICAgIDxsaT5oc2Io4oCi4oCi4oCiLCDigKLigKLi gKIsIOKAouKAouKAoikg4oCUIGh1ZSwgc2F0dXJhdGlvbiBhbmQgYnJpZ2h0 bmVzcyB2YWx1ZXM6ICg8Y29kZT5oc2IoMC41LCZuYnNwOzAuMjUsJm5ic3A7 MSk8L2NvZGU+KTwvbGk+CisgIyAgICAgPGxpPmhzYmEo4oCi4oCi4oCiLCDi gKLigKLigKIsIOKAouKAouKAoiwg4oCi4oCi4oCiKSDigJQgYWxzbyB3aXRo IG9wYWNpdHk8L2xpPgorICMgICAgIDxsaT5oc2Io4oCi4oCi4oCiJSwg4oCi 4oCi4oCiJSwg4oCi4oCi4oCiJSkg4oCUIHNhbWUgYXMgYWJvdmUsIGJ1dCBp biAlPC9saT4KKyAjICAgICA8bGk+aHNiYSjigKLigKLigKIlLCDigKLigKLi gKIlLCDigKLigKLigKIlLCDigKLigKLigKIlKSDigJQgYWxzbyB3aXRoIG9w YWNpdHk8L2xpPgorICMgICAgIDxsaT5oc2wo4oCi4oCi4oCiLCDigKLigKLi gKIsIOKAouKAouKAoikg4oCUIGh1ZSwgc2F0dXJhdGlvbiBhbmQgbHVtaW5v c2l0eSB2YWx1ZXM6ICg8Y29kZT5oc2IoMC41LCZuYnNwOzAuMjUsJm5ic3A7 MC41KTwvY29kZT4pPC9saT4KKyAjICAgICA8bGk+aHNsYSjigKLigKLigKIs IOKAouKAouKAoiwg4oCi4oCi4oCiLCDigKLigKLigKIpIOKAlCBhbHNvIHdp dGggb3BhY2l0eTwvbGk+CisgIyAgICAgPGxpPmhzbCjigKLigKLigKIlLCDi gKLigKLigKIlLCDigKLigKLigKIlKSDigJQgc2FtZSBhcyBhYm92ZSwgYnV0 IGluICU8L2xpPgorICMgICAgIDxsaT5oc2xhKOKAouKAouKAoiUsIOKAouKA ouKAoiUsIOKAouKAouKAoiUsIOKAouKAouKAoiUpIOKAlCBhbHNvIHdpdGgg b3BhY2l0eTwvbGk+CisgIyA8L3VsPgorICogTm90ZSB0aGF0IGAlYCBjYW4g YmUgdXNlZCBhbnkgdGltZTogYHJnYigyMCUsIDI1NSwgNTAlKWAuCisgPSAo b2JqZWN0KSBSR0Igb2JqZWN0IGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0Ogor IG8geworIG8gICAgIHIgKG51bWJlcikgcmVkLAorIG8gICAgIGcgKG51bWJl cikgZ3JlZW4sCisgbyAgICAgYiAobnVtYmVyKSBibHVlLAorIG8gICAgIGhl eCAoc3RyaW5nKSBjb2xvciBpbiBIVE1ML0NTUyBmb3JtYXQ6ICPigKLigKLi gKLigKLigKLigKIsCisgbyAgICAgZXJyb3IgKGJvb2xlYW4pIHRydWUgaWYg c3RyaW5nIGNhbid0IGJlIHBhcnNlZAorIG8gfQorXCovCitTbmFwLmdldFJH QiA9IGNhY2hlcihmdW5jdGlvbiAoY29sb3VyKSB7CisgICAgaWYgKCFjb2xv dXIgfHwgISEoKGNvbG91ciA9IFN0cihjb2xvdXIpKS5pbmRleE9mKCItIikg KyAxKSkgeworICAgICAgICByZXR1cm4ge3I6IC0xLCBnOiAtMSwgYjogLTEs IGhleDogIm5vbmUiLCBlcnJvcjogMSwgdG9TdHJpbmc6IHJnYnRvU3RyaW5n fTsKKyAgICB9CisgICAgaWYgKGNvbG91ciA9PSAibm9uZSIpIHsKKyAgICAg ICAgcmV0dXJuIHtyOiAtMSwgZzogLTEsIGI6IC0xLCBoZXg6ICJub25lIiwg dG9TdHJpbmc6IHJnYnRvU3RyaW5nfTsKKyAgICB9CisgICAgIShoc3JnW2hh c10oY29sb3VyLnRvTG93ZXJDYXNlKCkuc3Vic3RyaW5nKDAsIDIpKSB8fCBj b2xvdXIuY2hhckF0KCkgPT0gIiMiKSAmJiAoY29sb3VyID0gdG9IZXgoY29s b3VyKSk7CisgICAgaWYgKCFjb2xvdXIpIHsKKyAgICAgICAgcmV0dXJuIHty OiAtMSwgZzogLTEsIGI6IC0xLCBoZXg6ICJub25lIiwgZXJyb3I6IDEsIHRv U3RyaW5nOiByZ2J0b1N0cmluZ307CisgICAgfQorICAgIHZhciByZXMsCisg ICAgICAgIHJlZCwKKyAgICAgICAgZ3JlZW4sCisgICAgICAgIGJsdWUsCisg ICAgICAgIG9wYWNpdHksCisgICAgICAgIHQsCisgICAgICAgIHZhbHVlcywK KyAgICAgICAgcmdiID0gY29sb3VyLm1hdGNoKGNvbG91clJlZ0V4cCk7Cisg ICAgaWYgKHJnYikgeworICAgICAgICBpZiAocmdiWzJdKSB7CisgICAgICAg ICAgICBibHVlID0gdG9JbnQocmdiWzJdLnN1YnN0cmluZyg1KSwgMTYpOwor ICAgICAgICAgICAgZ3JlZW4gPSB0b0ludChyZ2JbMl0uc3Vic3RyaW5nKDMs IDUpLCAxNik7CisgICAgICAgICAgICByZWQgPSB0b0ludChyZ2JbMl0uc3Vi c3RyaW5nKDEsIDMpLCAxNik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJn YlszXSkgeworICAgICAgICAgICAgYmx1ZSA9IHRvSW50KCh0ID0gcmdiWzNd LmNoYXJBdCgzKSkgKyB0LCAxNik7CisgICAgICAgICAgICBncmVlbiA9IHRv SW50KCh0ID0gcmdiWzNdLmNoYXJBdCgyKSkgKyB0LCAxNik7CisgICAgICAg ICAgICByZWQgPSB0b0ludCgodCA9IHJnYlszXS5jaGFyQXQoMSkpICsgdCwg MTYpOworICAgICAgICB9CisgICAgICAgIGlmIChyZ2JbNF0pIHsKKyAgICAg ICAgICAgIHZhbHVlcyA9IHJnYls0XS5zcGxpdChjb21tYVNwYWNlcyk7Cisg ICAgICAgICAgICByZWQgPSB0b0Zsb2F0KHZhbHVlc1swXSk7CisgICAgICAg ICAgICB2YWx1ZXNbMF0uc2xpY2UoLTEpID09ICIlIiAmJiAocmVkICo9IDIu NTUpOworICAgICAgICAgICAgZ3JlZW4gPSB0b0Zsb2F0KHZhbHVlc1sxXSk7 CisgICAgICAgICAgICB2YWx1ZXNbMV0uc2xpY2UoLTEpID09ICIlIiAmJiAo Z3JlZW4gKj0gMi41NSk7CisgICAgICAgICAgICBibHVlID0gdG9GbG9hdCh2 YWx1ZXNbMl0pOworICAgICAgICAgICAgdmFsdWVzWzJdLnNsaWNlKC0xKSA9 PSAiJSIgJiYgKGJsdWUgKj0gMi41NSk7CisgICAgICAgICAgICByZ2JbMV0u dG9Mb3dlckNhc2UoKS5zbGljZSgwLCA0KSA9PSAicmdiYSIgJiYgKG9wYWNp dHkgPSB0b0Zsb2F0KHZhbHVlc1szXSkpOworICAgICAgICAgICAgdmFsdWVz WzNdICYmIHZhbHVlc1szXS5zbGljZSgtMSkgPT0gIiUiICYmIChvcGFjaXR5 IC89IDEwMCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJnYls1XSkgewor ICAgICAgICAgICAgdmFsdWVzID0gcmdiWzVdLnNwbGl0KGNvbW1hU3BhY2Vz KTsKKyAgICAgICAgICAgIHJlZCA9IHRvRmxvYXQodmFsdWVzWzBdKTsKKyAg ICAgICAgICAgIHZhbHVlc1swXS5zbGljZSgtMSkgPT0gIiUiICYmIChyZWQg Lz0gMTAwKTsKKyAgICAgICAgICAgIGdyZWVuID0gdG9GbG9hdCh2YWx1ZXNb MV0pOworICAgICAgICAgICAgdmFsdWVzWzFdLnNsaWNlKC0xKSA9PSAiJSIg JiYgKGdyZWVuIC89IDEwMCk7CisgICAgICAgICAgICBibHVlID0gdG9GbG9h dCh2YWx1ZXNbMl0pOworICAgICAgICAgICAgdmFsdWVzWzJdLnNsaWNlKC0x KSA9PSAiJSIgJiYgKGJsdWUgLz0gMTAwKTsKKyAgICAgICAgICAgICh2YWx1 ZXNbMF0uc2xpY2UoLTMpID09ICJkZWciIHx8IHZhbHVlc1swXS5zbGljZSgt MSkgPT0gIlx4YjAiKSAmJiAocmVkIC89IDM2MCk7CisgICAgICAgICAgICBy Z2JbMV0udG9Mb3dlckNhc2UoKS5zbGljZSgwLCA0KSA9PSAiaHNiYSIgJiYg KG9wYWNpdHkgPSB0b0Zsb2F0KHZhbHVlc1szXSkpOworICAgICAgICAgICAg dmFsdWVzWzNdICYmIHZhbHVlc1szXS5zbGljZSgtMSkgPT0gIiUiICYmIChv cGFjaXR5IC89IDEwMCk7CisgICAgICAgICAgICByZXR1cm4gU25hcC5oc2Iy cmdiKHJlZCwgZ3JlZW4sIGJsdWUsIG9wYWNpdHkpOworICAgICAgICB9Cisg ICAgICAgIGlmIChyZ2JbNl0pIHsKKyAgICAgICAgICAgIHZhbHVlcyA9IHJn Yls2XS5zcGxpdChjb21tYVNwYWNlcyk7CisgICAgICAgICAgICByZWQgPSB0 b0Zsb2F0KHZhbHVlc1swXSk7CisgICAgICAgICAgICB2YWx1ZXNbMF0uc2xp Y2UoLTEpID09ICIlIiAmJiAocmVkIC89IDEwMCk7CisgICAgICAgICAgICBn cmVlbiA9IHRvRmxvYXQodmFsdWVzWzFdKTsKKyAgICAgICAgICAgIHZhbHVl c1sxXS5zbGljZSgtMSkgPT0gIiUiICYmIChncmVlbiAvPSAxMDApOworICAg ICAgICAgICAgYmx1ZSA9IHRvRmxvYXQodmFsdWVzWzJdKTsKKyAgICAgICAg ICAgIHZhbHVlc1syXS5zbGljZSgtMSkgPT0gIiUiICYmIChibHVlIC89IDEw MCk7CisgICAgICAgICAgICAodmFsdWVzWzBdLnNsaWNlKC0zKSA9PSAiZGVn IiB8fCB2YWx1ZXNbMF0uc2xpY2UoLTEpID09ICJceGIwIikgJiYgKHJlZCAv PSAzNjApOworICAgICAgICAgICAgcmdiWzFdLnRvTG93ZXJDYXNlKCkuc2xp Y2UoMCwgNCkgPT0gImhzbGEiICYmIChvcGFjaXR5ID0gdG9GbG9hdCh2YWx1 ZXNbM10pKTsKKyAgICAgICAgICAgIHZhbHVlc1szXSAmJiB2YWx1ZXNbM10u c2xpY2UoLTEpID09ICIlIiAmJiAob3BhY2l0eSAvPSAxMDApOworICAgICAg ICAgICAgcmV0dXJuIFNuYXAuaHNsMnJnYihyZWQsIGdyZWVuLCBibHVlLCBv cGFjaXR5KTsKKyAgICAgICAgfQorICAgICAgICByZWQgPSBtbWluKG1hdGgu cm91bmQocmVkKSwgMjU1KTsKKyAgICAgICAgZ3JlZW4gPSBtbWluKG1hdGgu cm91bmQoZ3JlZW4pLCAyNTUpOworICAgICAgICBibHVlID0gbW1pbihtYXRo LnJvdW5kKGJsdWUpLCAyNTUpOworICAgICAgICBvcGFjaXR5ID0gbW1pbiht bWF4KG9wYWNpdHksIDApLCAxKTsKKyAgICAgICAgcmdiID0ge3I6IHJlZCwg ZzogZ3JlZW4sIGI6IGJsdWUsIHRvU3RyaW5nOiByZ2J0b1N0cmluZ307Cisg ICAgICAgIHJnYi5oZXggPSAiIyIgKyAoMTY3NzcyMTYgfCBibHVlIHwgKGdy ZWVuIDw8IDgpIHwgKHJlZCA8PCAxNikpLnRvU3RyaW5nKDE2KS5zbGljZSgx KTsKKyAgICAgICAgcmdiLm9wYWNpdHkgPSBpcyhvcGFjaXR5LCAiZmluaXRl IikgPyBvcGFjaXR5IDogMTsKKyAgICAgICAgcmV0dXJuIHJnYjsKKyAgICB9 CisgICAgcmV0dXJuIHtyOiAtMSwgZzogLTEsIGI6IC0xLCBoZXg6ICJub25l IiwgZXJyb3I6IDEsIHRvU3RyaW5nOiByZ2J0b1N0cmluZ307Cit9LCBTbmFw KTsKKy8qXAorICogU25hcC5oc2IKKyBbIG1ldGhvZCBdCisgKioKKyAqIENv bnZlcnRzIEhTQiB2YWx1ZXMgdG8gYSBoZXggcmVwcmVzZW50YXRpb24gb2Yg dGhlIGNvbG9yCisgLSBoIChudW1iZXIpIGh1ZQorIC0gcyAobnVtYmVyKSBz YXR1cmF0aW9uCisgLSBiIChudW1iZXIpIHZhbHVlIG9yIGJyaWdodG5lc3MK KyA9IChzdHJpbmcpIGhleCByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29sb3IK K1wqLworU25hcC5oc2IgPSBjYWNoZXIoZnVuY3Rpb24gKGgsIHMsIGIpIHsK KyAgICByZXR1cm4gU25hcC5oc2IycmdiKGgsIHMsIGIpLmhleDsKK30pOwor LypcCisgKiBTbmFwLmhzbAorIFsgbWV0aG9kIF0KKyAqKgorICogQ29udmVy dHMgSFNMIHZhbHVlcyB0byBhIGhleCByZXByZXNlbnRhdGlvbiBvZiB0aGUg Y29sb3IKKyAtIGggKG51bWJlcikgaHVlCisgLSBzIChudW1iZXIpIHNhdHVy YXRpb24KKyAtIGwgKG51bWJlcikgbHVtaW5vc2l0eQorID0gKHN0cmluZykg aGV4IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb2xvcgorXCovCitTbmFwLmhz bCA9IGNhY2hlcihmdW5jdGlvbiAoaCwgcywgbCkgeworICAgIHJldHVybiBT bmFwLmhzbDJyZ2IoaCwgcywgbCkuaGV4OworfSk7CisvKlwKKyAqIFNuYXAu cmdiCisgWyBtZXRob2QgXQorICoqCisgKiBDb252ZXJ0cyBSR0IgdmFsdWVz IHRvIGEgaGV4IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb2xvcgorIC0gciAo bnVtYmVyKSByZWQKKyAtIGcgKG51bWJlcikgZ3JlZW4KKyAtIGIgKG51bWJl cikgYmx1ZQorID0gKHN0cmluZykgaGV4IHJlcHJlc2VudGF0aW9uIG9mIHRo ZSBjb2xvcgorXCovCitTbmFwLnJnYiA9IGNhY2hlcihmdW5jdGlvbiAociwg ZywgYiwgbykgeworICAgIGlmIChpcyhvLCAiZmluaXRlIikpIHsKKyAgICAg ICAgdmFyIHJvdW5kID0gbWF0aC5yb3VuZDsKKyAgICAgICAgcmV0dXJuICJy Z2JhKCIgKyBbcm91bmQociksIHJvdW5kKGcpLCByb3VuZChiKSwgK28udG9G aXhlZCgyKV0gKyAiKSI7CisgICAgfQorICAgIHJldHVybiAiIyIgKyAoMTY3 NzcyMTYgfCBiIHwgKGcgPDwgOCkgfCAociA8PCAxNikpLnRvU3RyaW5nKDE2 KS5zbGljZSgxKTsKK30pOwordmFyIHRvSGV4ID0gZnVuY3Rpb24gKGNvbG9y KSB7CisgICAgdmFyIGkgPSBnbG9iLmRvYy5nZXRFbGVtZW50c0J5VGFnTmFt ZSgiaGVhZCIpWzBdIHx8IGdsb2IuZG9jLmdldEVsZW1lbnRzQnlUYWdOYW1l KCJzdmciKVswXSwKKyAgICAgICAgcmVkID0gInJnYigyNTUsIDAsIDApIjsK KyAgICB0b0hleCA9IGNhY2hlcihmdW5jdGlvbiAoY29sb3IpIHsKKyAgICAg ICAgaWYgKGNvbG9yLnRvTG93ZXJDYXNlKCkgPT0gInJlZCIpIHsKKyAgICAg ICAgICAgIHJldHVybiByZWQ7CisgICAgICAgIH0KKyAgICAgICAgaS5zdHls ZS5jb2xvciA9IHJlZDsKKyAgICAgICAgaS5zdHlsZS5jb2xvciA9IGNvbG9y OworICAgICAgICB2YXIgb3V0ID0gZ2xvYi5kb2MuZGVmYXVsdFZpZXcuZ2V0 Q29tcHV0ZWRTdHlsZShpLCBFKS5nZXRQcm9wZXJ0eVZhbHVlKCJjb2xvciIp OworICAgICAgICByZXR1cm4gb3V0ID09IHJlZCA/IG51bGwgOiBvdXQ7Cisg ICAgfSk7CisgICAgcmV0dXJuIHRvSGV4KGNvbG9yKTsKK30sCitoc2J0b1N0 cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICByZXR1cm4gImhzYigiICsgW3Ro aXMuaCwgdGhpcy5zLCB0aGlzLmJdICsgIikiOworfSwKK2hzbHRvU3RyaW5n ID0gZnVuY3Rpb24gKCkgeworICAgIHJldHVybiAiaHNsKCIgKyBbdGhpcy5o LCB0aGlzLnMsIHRoaXMubF0gKyAiKSI7Cit9LAorcmdidG9TdHJpbmcgPSBm dW5jdGlvbiAoKSB7CisgICAgcmV0dXJuIHRoaXMub3BhY2l0eSA9PSAxIHx8 IHRoaXMub3BhY2l0eSA9PSBudWxsID8KKyAgICAgICAgICAgIHRoaXMuaGV4 IDoKKyAgICAgICAgICAgICJyZ2JhKCIgKyBbdGhpcy5yLCB0aGlzLmcsIHRo aXMuYiwgdGhpcy5vcGFjaXR5XSArICIpIjsKK30sCitwcmVwYXJlUkdCID0g ZnVuY3Rpb24gKHIsIGcsIGIpIHsKKyAgICBpZiAoZyA9PSBudWxsICYmIGlz KHIsICJvYmplY3QiKSAmJiAiciIgaW4gciAmJiAiZyIgaW4gciAmJiAiYiIg aW4gcikgeworICAgICAgICBiID0gci5iOworICAgICAgICBnID0gci5nOwor ICAgICAgICByID0gci5yOworICAgIH0KKyAgICBpZiAoZyA9PSBudWxsICYm IGlzKHIsIHN0cmluZykpIHsKKyAgICAgICAgdmFyIGNsciA9IFNuYXAuZ2V0 UkdCKHIpOworICAgICAgICByID0gY2xyLnI7CisgICAgICAgIGcgPSBjbHIu ZzsKKyAgICAgICAgYiA9IGNsci5iOworICAgIH0KKyAgICBpZiAociA+IDEg fHwgZyA+IDEgfHwgYiA+IDEpIHsKKyAgICAgICAgciAvPSAyNTU7CisgICAg ICAgIGcgLz0gMjU1OworICAgICAgICBiIC89IDI1NTsKKyAgICB9CisKKyAg ICByZXR1cm4gW3IsIGcsIGJdOworfSwKK3BhY2thZ2VSR0IgPSBmdW5jdGlv biAociwgZywgYiwgbykgeworICAgIHIgPSBtYXRoLnJvdW5kKHIgKiAyNTUp OworICAgIGcgPSBtYXRoLnJvdW5kKGcgKiAyNTUpOworICAgIGIgPSBtYXRo LnJvdW5kKGIgKiAyNTUpOworICAgIHZhciByZ2IgPSB7CisgICAgICAgIHI6 IHIsCisgICAgICAgIGc6IGcsCisgICAgICAgIGI6IGIsCisgICAgICAgIG9w YWNpdHk6IGlzKG8sICJmaW5pdGUiKSA/IG8gOiAxLAorICAgICAgICBoZXg6 IFNuYXAucmdiKHIsIGcsIGIpLAorICAgICAgICB0b1N0cmluZzogcmdidG9T dHJpbmcKKyAgICB9OworICAgIGlzKG8sICJmaW5pdGUiKSAmJiAocmdiLm9w YWNpdHkgPSBvKTsKKyAgICByZXR1cm4gcmdiOworfTsKKy8qXAorICogU25h cC5jb2xvcgorIFsgbWV0aG9kIF0KKyAqKgorICogUGFyc2VzIHRoZSBjb2xv ciBzdHJpbmcgYW5kIHJldHVybnMgYW4gb2JqZWN0IGZlYXR1cmluZyB0aGUg Y29sb3IncyBjb21wb25lbnQgdmFsdWVzCisgLSBjbHIgKHN0cmluZykgY29s b3Igc3RyaW5nIGluIG9uZSBvZiB0aGUgc3VwcG9ydGVkIGZvcm1hdHMgKHNl ZSBAU25hcC5nZXRSR0IpCisgPSAob2JqZWN0KSBDb21iaW5lZCBSR0IvSFNC IG9iamVjdCBpbiB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyBvIHsKKyBvICAg ICByIChudW1iZXIpIHJlZCwKKyBvICAgICBnIChudW1iZXIpIGdyZWVuLAor IG8gICAgIGIgKG51bWJlcikgYmx1ZSwKKyBvICAgICBoZXggKHN0cmluZykg Y29sb3IgaW4gSFRNTC9DU1MgZm9ybWF0OiAj4oCi4oCi4oCi4oCi4oCi4oCi LAorIG8gICAgIGVycm9yIChib29sZWFuKSBgdHJ1ZWAgaWYgc3RyaW5nIGNh bid0IGJlIHBhcnNlZCwKKyBvICAgICBoIChudW1iZXIpIGh1ZSwKKyBvICAg ICBzIChudW1iZXIpIHNhdHVyYXRpb24sCisgbyAgICAgdiAobnVtYmVyKSB2 YWx1ZSAoYnJpZ2h0bmVzcyksCisgbyAgICAgbCAobnVtYmVyKSBsaWdodG5l c3MKKyBvIH0KK1wqLworU25hcC5jb2xvciA9IGZ1bmN0aW9uIChjbHIpIHsK KyAgICB2YXIgcmdiOworICAgIGlmIChpcyhjbHIsICJvYmplY3QiKSAmJiAi aCIgaW4gY2xyICYmICJzIiBpbiBjbHIgJiYgImIiIGluIGNscikgeworICAg ICAgICByZ2IgPSBTbmFwLmhzYjJyZ2IoY2xyKTsKKyAgICAgICAgY2xyLnIg PSByZ2IucjsKKyAgICAgICAgY2xyLmcgPSByZ2IuZzsKKyAgICAgICAgY2xy LmIgPSByZ2IuYjsKKyAgICAgICAgY2xyLm9wYWNpdHkgPSAxOworICAgICAg ICBjbHIuaGV4ID0gcmdiLmhleDsKKyAgICB9IGVsc2UgaWYgKGlzKGNsciwg Im9iamVjdCIpICYmICJoIiBpbiBjbHIgJiYgInMiIGluIGNsciAmJiAibCIg aW4gY2xyKSB7CisgICAgICAgIHJnYiA9IFNuYXAuaHNsMnJnYihjbHIpOwor ICAgICAgICBjbHIuciA9IHJnYi5yOworICAgICAgICBjbHIuZyA9IHJnYi5n OworICAgICAgICBjbHIuYiA9IHJnYi5iOworICAgICAgICBjbHIub3BhY2l0 eSA9IDE7CisgICAgICAgIGNsci5oZXggPSByZ2IuaGV4OworICAgIH0gZWxz ZSB7CisgICAgICAgIGlmIChpcyhjbHIsICJzdHJpbmciKSkgeworICAgICAg ICAgICAgY2xyID0gU25hcC5nZXRSR0IoY2xyKTsKKyAgICAgICAgfQorICAg ICAgICBpZiAoaXMoY2xyLCAib2JqZWN0IikgJiYgInIiIGluIGNsciAmJiAi ZyIgaW4gY2xyICYmICJiIiBpbiBjbHIgJiYgISgiZXJyb3IiIGluIGNscikp IHsKKyAgICAgICAgICAgIHJnYiA9IFNuYXAucmdiMmhzbChjbHIpOworICAg ICAgICAgICAgY2xyLmggPSByZ2IuaDsKKyAgICAgICAgICAgIGNsci5zID0g cmdiLnM7CisgICAgICAgICAgICBjbHIubCA9IHJnYi5sOworICAgICAgICAg ICAgcmdiID0gU25hcC5yZ2IyaHNiKGNscik7CisgICAgICAgICAgICBjbHIu diA9IHJnYi5iOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY2xy ID0ge2hleDogIm5vbmUifTsKKyAgICAgICAgICAgIGNsci5yID0gY2xyLmcg PSBjbHIuYiA9IGNsci5oID0gY2xyLnMgPSBjbHIudiA9IGNsci5sID0gLTE7 CisgICAgICAgICAgICBjbHIuZXJyb3IgPSAxOworICAgICAgICB9CisgICAg fQorICAgIGNsci50b1N0cmluZyA9IHJnYnRvU3RyaW5nOworICAgIHJldHVy biBjbHI7Cit9OworLypcCisgKiBTbmFwLmhzYjJyZ2IKKyBbIG1ldGhvZCBd CisgKioKKyAqIENvbnZlcnRzIEhTQiB2YWx1ZXMgdG8gYW4gUkdCIG9iamVj dAorIC0gaCAobnVtYmVyKSBodWUKKyAtIHMgKG51bWJlcikgc2F0dXJhdGlv bgorIC0gdiAobnVtYmVyKSB2YWx1ZSBvciBicmlnaHRuZXNzCisgPSAob2Jq ZWN0KSBSR0Igb2JqZWN0IGluIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorIG8g eworIG8gICAgIHIgKG51bWJlcikgcmVkLAorIG8gICAgIGcgKG51bWJlcikg Z3JlZW4sCisgbyAgICAgYiAobnVtYmVyKSBibHVlLAorIG8gICAgIGhleCAo c3RyaW5nKSBjb2xvciBpbiBIVE1ML0NTUyBmb3JtYXQ6ICPigKLigKLigKLi gKLigKLigKIKKyBvIH0KK1wqLworU25hcC5oc2IycmdiID0gZnVuY3Rpb24g KGgsIHMsIHYsIG8pIHsKKyAgICBpZiAoaXMoaCwgIm9iamVjdCIpICYmICJo IiBpbiBoICYmICJzIiBpbiBoICYmICJiIiBpbiBoKSB7CisgICAgICAgIHYg PSBoLmI7CisgICAgICAgIHMgPSBoLnM7CisgICAgICAgIG8gPSBoLm87Cisg ICAgICAgIGggPSBoLmg7CisgICAgfQorICAgIGggKj0gMzYwOworICAgIHZh ciBSLCBHLCBCLCBYLCBDOworICAgIGggPSAoaCAlIDM2MCkgLyA2MDsKKyAg ICBDID0gdiAqIHM7CisgICAgWCA9IEMgKiAoMSAtIGFicyhoICUgMiAtIDEp KTsKKyAgICBSID0gRyA9IEIgPSB2IC0gQzsKKworICAgIGggPSB+fmg7Cisg ICAgUiArPSBbQywgWCwgMCwgMCwgWCwgQ11baF07CisgICAgRyArPSBbWCwg QywgQywgWCwgMCwgMF1baF07CisgICAgQiArPSBbMCwgMCwgWCwgQywgQywg WF1baF07CisgICAgcmV0dXJuIHBhY2thZ2VSR0IoUiwgRywgQiwgbyk7Cit9 OworLypcCisgKiBTbmFwLmhzbDJyZ2IKKyBbIG1ldGhvZCBdCisgKioKKyAq IENvbnZlcnRzIEhTTCB2YWx1ZXMgdG8gYW4gUkdCIG9iamVjdAorIC0gaCAo bnVtYmVyKSBodWUKKyAtIHMgKG51bWJlcikgc2F0dXJhdGlvbgorIC0gbCAo bnVtYmVyKSBsdW1pbm9zaXR5CisgPSAob2JqZWN0KSBSR0Igb2JqZWN0IGlu IHRoZSBmb2xsb3dpbmcgZm9ybWF0OgorIG8geworIG8gICAgIHIgKG51bWJl cikgcmVkLAorIG8gICAgIGcgKG51bWJlcikgZ3JlZW4sCisgbyAgICAgYiAo bnVtYmVyKSBibHVlLAorIG8gICAgIGhleCAoc3RyaW5nKSBjb2xvciBpbiBI VE1ML0NTUyBmb3JtYXQ6ICPigKLigKLigKLigKLigKLigKIKKyBvIH0KK1wq LworU25hcC5oc2wycmdiID0gZnVuY3Rpb24gKGgsIHMsIGwsIG8pIHsKKyAg ICBpZiAoaXMoaCwgIm9iamVjdCIpICYmICJoIiBpbiBoICYmICJzIiBpbiBo ICYmICJsIiBpbiBoKSB7CisgICAgICAgIGwgPSBoLmw7CisgICAgICAgIHMg PSBoLnM7CisgICAgICAgIGggPSBoLmg7CisgICAgfQorICAgIGlmIChoID4g MSB8fCBzID4gMSB8fCBsID4gMSkgeworICAgICAgICBoIC89IDM2MDsKKyAg ICAgICAgcyAvPSAxMDA7CisgICAgICAgIGwgLz0gMTAwOworICAgIH0KKyAg ICBoICo9IDM2MDsKKyAgICB2YXIgUiwgRywgQiwgWCwgQzsKKyAgICBoID0g KGggJSAzNjApIC8gNjA7CisgICAgQyA9IDIgKiBzICogKGwgPCAuNSA/IGwg OiAxIC0gbCk7CisgICAgWCA9IEMgKiAoMSAtIGFicyhoICUgMiAtIDEpKTsK KyAgICBSID0gRyA9IEIgPSBsIC0gQyAvIDI7CisKKyAgICBoID0gfn5oOwor ICAgIFIgKz0gW0MsIFgsIDAsIDAsIFgsIENdW2hdOworICAgIEcgKz0gW1gs IEMsIEMsIFgsIDAsIDBdW2hdOworICAgIEIgKz0gWzAsIDAsIFgsIEMsIEMs IFhdW2hdOworICAgIHJldHVybiBwYWNrYWdlUkdCKFIsIEcsIEIsIG8pOwor fTsKKy8qXAorICogU25hcC5yZ2IyaHNiCisgWyBtZXRob2QgXQorICoqCisg KiBDb252ZXJ0cyBSR0IgdmFsdWVzIHRvIGFuIEhTQiBvYmplY3QKKyAtIHIg KG51bWJlcikgcmVkCisgLSBnIChudW1iZXIpIGdyZWVuCisgLSBiIChudW1i ZXIpIGJsdWUKKyA9IChvYmplY3QpIEhTQiBvYmplY3QgaW4gdGhlIGZvbGxv d2luZyBmb3JtYXQ6CisgbyB7CisgbyAgICAgaCAobnVtYmVyKSBodWUsCisg byAgICAgcyAobnVtYmVyKSBzYXR1cmF0aW9uLAorIG8gICAgIGIgKG51bWJl cikgYnJpZ2h0bmVzcworIG8gfQorXCovCitTbmFwLnJnYjJoc2IgPSBmdW5j dGlvbiAociwgZywgYikgeworICAgIGIgPSBwcmVwYXJlUkdCKHIsIGcsIGIp OworICAgIHIgPSBiWzBdOworICAgIGcgPSBiWzFdOworICAgIGIgPSBiWzJd OworCisgICAgdmFyIEgsIFMsIFYsIEM7CisgICAgViA9IG1tYXgociwgZywg Yik7CisgICAgQyA9IFYgLSBtbWluKHIsIGcsIGIpOworICAgIEggPSAoQyA9 PSAwID8gbnVsbCA6CisgICAgICAgICBWID09IHIgPyAoZyAtIGIpIC8gQyA6 CisgICAgICAgICBWID09IGcgPyAoYiAtIHIpIC8gQyArIDIgOgorICAgICAg ICAgICAgICAgICAgKHIgLSBnKSAvIEMgKyA0CisgICAgICAgICk7CisgICAg SCA9ICgoSCArIDM2MCkgJSA2KSAqIDYwIC8gMzYwOworICAgIFMgPSBDID09 IDAgPyAwIDogQyAvIFY7CisgICAgcmV0dXJuIHtoOiBILCBzOiBTLCBiOiBW LCB0b1N0cmluZzogaHNidG9TdHJpbmd9OworfTsKKy8qXAorICogU25hcC5y Z2IyaHNsCisgWyBtZXRob2QgXQorICoqCisgKiBDb252ZXJ0cyBSR0IgdmFs dWVzIHRvIGFuIEhTTCBvYmplY3QKKyAtIHIgKG51bWJlcikgcmVkCisgLSBn IChudW1iZXIpIGdyZWVuCisgLSBiIChudW1iZXIpIGJsdWUKKyA9IChvYmpl Y3QpIEhTTCBvYmplY3QgaW4gdGhlIGZvbGxvd2luZyBmb3JtYXQ6CisgbyB7 CisgbyAgICAgaCAobnVtYmVyKSBodWUsCisgbyAgICAgcyAobnVtYmVyKSBz YXR1cmF0aW9uLAorIG8gICAgIGwgKG51bWJlcikgbHVtaW5vc2l0eQorIG8g fQorXCovCitTbmFwLnJnYjJoc2wgPSBmdW5jdGlvbiAociwgZywgYikgewor ICAgIGIgPSBwcmVwYXJlUkdCKHIsIGcsIGIpOworICAgIHIgPSBiWzBdOwor ICAgIGcgPSBiWzFdOworICAgIGIgPSBiWzJdOworCisgICAgdmFyIEgsIFMs IEwsIE0sIG0sIEM7CisgICAgTSA9IG1tYXgociwgZywgYik7CisgICAgbSA9 IG1taW4ociwgZywgYik7CisgICAgQyA9IE0gLSBtOworICAgIEggPSAoQyA9 PSAwID8gbnVsbCA6CisgICAgICAgICBNID09IHIgPyAoZyAtIGIpIC8gQyA6 CisgICAgICAgICBNID09IGcgPyAoYiAtIHIpIC8gQyArIDIgOgorICAgICAg ICAgICAgICAgICAgKHIgLSBnKSAvIEMgKyA0KTsKKyAgICBIID0gKChIICsg MzYwKSAlIDYpICogNjAgLyAzNjA7CisgICAgTCA9IChNICsgbSkgLyAyOwor ICAgIFMgPSAoQyA9PSAwID8gMCA6CisgICAgICAgICBMIDwgLjUgPyBDIC8g KDIgKiBMKSA6CisgICAgICAgICAgICAgICAgICBDIC8gKDIgLSAyICogTCkp OworICAgIHJldHVybiB7aDogSCwgczogUywgbDogTCwgdG9TdHJpbmc6IGhz bHRvU3RyaW5nfTsKK307CisKKy8vIFRyYW5zZm9ybWF0aW9ucworLypcCisg KiBTbmFwLnBhcnNlUGF0aFN0cmluZworIFsgbWV0aG9kIF0KKyAqKgorICog VXRpbGl0eSBtZXRob2QKKyAqKgorICogUGFyc2VzIGdpdmVuIHBhdGggc3Ry aW5nIGludG8gYW4gYXJyYXkgb2YgYXJyYXlzIG9mIHBhdGggc2VnbWVudHMK KyAtIHBhdGhTdHJpbmcgKHN0cmluZ3xhcnJheSkgcGF0aCBzdHJpbmcgb3Ig YXJyYXkgb2Ygc2VnbWVudHMgKGluIHRoZSBsYXN0IGNhc2UgaXQgaXMgcmV0 dXJuZWQgc3RyYWlnaHQgYXdheSkKKyA9IChhcnJheSkgYXJyYXkgb2Ygc2Vn bWVudHMKK1wqLworU25hcC5wYXJzZVBhdGhTdHJpbmcgPSBmdW5jdGlvbiAo cGF0aFN0cmluZykgeworICAgIGlmICghcGF0aFN0cmluZykgeworICAgICAg ICByZXR1cm4gbnVsbDsKKyAgICB9CisgICAgdmFyIHB0aCA9IFNuYXAucGF0 aChwYXRoU3RyaW5nKTsKKyAgICBpZiAocHRoLmFycikgeworICAgICAgICBy ZXR1cm4gU25hcC5wYXRoLmNsb25lKHB0aC5hcnIpOworICAgIH0KKworICAg IHZhciBwYXJhbUNvdW50cyA9IHthOiA3LCBjOiA2LCBvOiAyLCBoOiAxLCBs OiAyLCBtOiAyLCByOiA0LCBxOiA0LCBzOiA0LCB0OiAyLCB2OiAxLCB1OiAz LCB6OiAwfSwKKyAgICAgICAgZGF0YSA9IFtdOworICAgIGlmIChpcyhwYXRo U3RyaW5nLCAiYXJyYXkiKSAmJiBpcyhwYXRoU3RyaW5nWzBdLCAiYXJyYXki KSkgeyAvLyByb3VnaCBhc3N1bXB0aW9uCisgICAgICAgIGRhdGEgPSBTbmFw LnBhdGguY2xvbmUocGF0aFN0cmluZyk7CisgICAgfQorICAgIGlmICghZGF0 YS5sZW5ndGgpIHsKKyAgICAgICAgU3RyKHBhdGhTdHJpbmcpLnJlcGxhY2Uo cGF0aENvbW1hbmQsIGZ1bmN0aW9uIChhLCBiLCBjKSB7CisgICAgICAgICAg ICB2YXIgcGFyYW1zID0gW10sCisgICAgICAgICAgICAgICAgbmFtZSA9IGIu dG9Mb3dlckNhc2UoKTsKKyAgICAgICAgICAgIGMucmVwbGFjZShwYXRoVmFs dWVzLCBmdW5jdGlvbiAoYSwgYikgeworICAgICAgICAgICAgICAgIGIgJiYg cGFyYW1zLnB1c2goK2IpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAg ICBpZiAobmFtZSA9PSAibSIgJiYgcGFyYW1zLmxlbmd0aCA+IDIpIHsKKyAg ICAgICAgICAgICAgICBkYXRhLnB1c2goW2JdLmNvbmNhdChwYXJhbXMuc3Bs aWNlKDAsIDIpKSk7CisgICAgICAgICAgICAgICAgbmFtZSA9ICJsIjsKKyAg ICAgICAgICAgICAgICBiID0gYiA9PSAibSIgPyAibCIgOiAiTCI7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAobmFtZSA9PSAibyIgJiYgcGFy YW1zLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgZGF0YS5wdXNo KFtiLCBwYXJhbXNbMF1dKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGlmIChuYW1lID09ICJyIikgeworICAgICAgICAgICAgICAgIGRhdGEucHVz aChbYl0uY29uY2F0KHBhcmFtcykpOworICAgICAgICAgICAgfSBlbHNlIHdo aWxlIChwYXJhbXMubGVuZ3RoID49IHBhcmFtQ291bnRzW25hbWVdKSB7Cisg ICAgICAgICAgICAgICAgZGF0YS5wdXNoKFtiXS5jb25jYXQocGFyYW1zLnNw bGljZSgwLCBwYXJhbUNvdW50c1tuYW1lXSkpKTsKKyAgICAgICAgICAgICAg ICBpZiAoIXBhcmFtQ291bnRzW25hbWVdKSB7CisgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgfSk7CisgICAgfQorICAgIGRhdGEudG9TdHJpbmcgPSBTbmFw LnBhdGgudG9TdHJpbmc7CisgICAgcHRoLmFyciA9IFNuYXAucGF0aC5jbG9u ZShkYXRhKTsKKyAgICByZXR1cm4gZGF0YTsKK307CisvKlwKKyAqIFNuYXAu cGFyc2VUcmFuc2Zvcm1TdHJpbmcKKyBbIG1ldGhvZCBdCisgKioKKyAqIFV0 aWxpdHkgbWV0aG9kCisgKioKKyAqIFBhcnNlcyBnaXZlbiB0cmFuc2Zvcm0g c3RyaW5nIGludG8gYW4gYXJyYXkgb2YgdHJhbnNmb3JtYXRpb25zCisgLSBU U3RyaW5nIChzdHJpbmd8YXJyYXkpIHRyYW5zZm9ybSBzdHJpbmcgb3IgYXJy YXkgb2YgdHJhbnNmb3JtYXRpb25zIChpbiB0aGUgbGFzdCBjYXNlIGl0IGlz IHJldHVybmVkIHN0cmFpZ2h0IGF3YXkpCisgPSAoYXJyYXkpIGFycmF5IG9m IHRyYW5zZm9ybWF0aW9ucworXCovCit2YXIgcGFyc2VUcmFuc2Zvcm1TdHJp bmcgPSBTbmFwLnBhcnNlVHJhbnNmb3JtU3RyaW5nID0gZnVuY3Rpb24gKFRT dHJpbmcpIHsKKyAgICBpZiAoIVRTdHJpbmcpIHsKKyAgICAgICAgcmV0dXJu IG51bGw7CisgICAgfQorICAgIHZhciBwYXJhbUNvdW50cyA9IHtyOiAzLCBz OiA0LCB0OiAyLCBtOiA2fSwKKyAgICAgICAgZGF0YSA9IFtdOworICAgIGlm IChpcyhUU3RyaW5nLCAiYXJyYXkiKSAmJiBpcyhUU3RyaW5nWzBdLCAiYXJy YXkiKSkgeyAvLyByb3VnaCBhc3N1bXB0aW9uCisgICAgICAgIGRhdGEgPSBT bmFwLnBhdGguY2xvbmUoVFN0cmluZyk7CisgICAgfQorICAgIGlmICghZGF0 YS5sZW5ndGgpIHsKKyAgICAgICAgU3RyKFRTdHJpbmcpLnJlcGxhY2UodENv bW1hbmQsIGZ1bmN0aW9uIChhLCBiLCBjKSB7CisgICAgICAgICAgICB2YXIg cGFyYW1zID0gW10sCisgICAgICAgICAgICAgICAgbmFtZSA9IGIudG9Mb3dl ckNhc2UoKTsKKyAgICAgICAgICAgIGMucmVwbGFjZShwYXRoVmFsdWVzLCBm dW5jdGlvbiAoYSwgYikgeworICAgICAgICAgICAgICAgIGIgJiYgcGFyYW1z LnB1c2goK2IpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBkYXRh LnB1c2goW2JdLmNvbmNhdChwYXJhbXMpKTsKKyAgICAgICAgfSk7CisgICAg fQorICAgIGRhdGEudG9TdHJpbmcgPSBTbmFwLnBhdGgudG9TdHJpbmc7Cisg ICAgcmV0dXJuIGRhdGE7Cit9OworZnVuY3Rpb24gc3ZnVHJhbnNmb3JtMnN0 cmluZyh0c3RyKSB7CisgICAgdmFyIHJlcyA9IFtdOworICAgIHRzdHIgPSB0 c3RyLnJlcGxhY2UoLyg/Ol58XHMpKFx3KylcKChbXildKylcKS9nLCBmdW5j dGlvbiAoYWxsLCBuYW1lLCBwYXJhbXMpIHsKKyAgICAgICAgcGFyYW1zID0g cGFyYW1zLnNwbGl0KC9ccyosXHMqfFxzKy8pOworICAgICAgICBpZiAobmFt ZSA9PSAicm90YXRlIiAmJiBwYXJhbXMubGVuZ3RoID09IDEpIHsKKyAgICAg ICAgICAgIHBhcmFtcy5wdXNoKDAsIDApOworICAgICAgICB9CisgICAgICAg IGlmIChuYW1lID09ICJzY2FsZSIpIHsKKyAgICAgICAgICAgIGlmIChwYXJh bXMubGVuZ3RoID4gMikgeworICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBh cmFtcy5zbGljZSgwLCAyKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocGFy YW1zLmxlbmd0aCA9PSAyKSB7CisgICAgICAgICAgICAgICAgcGFyYW1zLnB1 c2goMCwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocGFy YW1zLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgcGFyYW1zLnB1 c2gocGFyYW1zWzBdLCAwLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICBpZiAobmFtZSA9PSAic2tld1giKSB7CisgICAgICAgICAg ICByZXMucHVzaChbIm0iLCAxLCAwLCBtYXRoLnRhbihyYWQocGFyYW1zWzBd KSksIDEsIDAsIDBdKTsKKyAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJz a2V3WSIpIHsKKyAgICAgICAgICAgIHJlcy5wdXNoKFsibSIsIDEsIG1hdGgu dGFuKHJhZChwYXJhbXNbMF0pKSwgMCwgMSwgMCwgMF0pOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgcmVzLnB1c2goW25hbWUuY2hhckF0KDAp XS5jb25jYXQocGFyYW1zKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu IGFsbDsKKyAgICB9KTsKKyAgICByZXR1cm4gcmVzOworfQorU25hcC5fLnN2 Z1RyYW5zZm9ybTJzdHJpbmcgPSBzdmdUcmFuc2Zvcm0yc3RyaW5nOworU25h cC5fLnJnVHJhbnNmb3JtID0gL15bYS16XVtcc10qLT9cLj9cZC9pOworZnVu Y3Rpb24gdHJhbnNmb3JtMm1hdHJpeCh0c3RyLCBiYm94KSB7CisgICAgdmFy IHRkYXRhID0gcGFyc2VUcmFuc2Zvcm1TdHJpbmcodHN0ciksCisgICAgICAg IG0gPSBuZXcgU25hcC5NYXRyaXg7CisgICAgaWYgKHRkYXRhKSB7CisgICAg ICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRkYXRhLmxlbmd0aDsgaSA8IGlp OyBpKyspIHsKKyAgICAgICAgICAgIHZhciB0ID0gdGRhdGFbaV0sCisgICAg ICAgICAgICAgICAgdGxlbiA9IHQubGVuZ3RoLAorICAgICAgICAgICAgICAg IGNvbW1hbmQgPSBTdHIodFswXSkudG9Mb3dlckNhc2UoKSwKKyAgICAgICAg ICAgICAgICBhYnNvbHV0ZSA9IHRbMF0gIT0gY29tbWFuZCwKKyAgICAgICAg ICAgICAgICBpbnZlciA9IGFic29sdXRlID8gbS5pbnZlcnQoKSA6IDAsCisg ICAgICAgICAgICAgICAgeDEsCisgICAgICAgICAgICAgICAgeTEsCisgICAg ICAgICAgICAgICAgeDIsCisgICAgICAgICAgICAgICAgeTIsCisgICAgICAg ICAgICAgICAgYmI7CisgICAgICAgICAgICBpZiAoY29tbWFuZCA9PSAidCIg JiYgdGxlbiA9PSAyKXsKKyAgICAgICAgICAgICAgICBtLnRyYW5zbGF0ZSh0 WzFdLCAwKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZCA9PSAi dCIgJiYgdGxlbiA9PSAzKSB7CisgICAgICAgICAgICAgICAgaWYgKGFic29s dXRlKSB7CisgICAgICAgICAgICAgICAgICAgIHgxID0gaW52ZXIueCgwLCAw KTsKKyAgICAgICAgICAgICAgICAgICAgeTEgPSBpbnZlci55KDAsIDApOwor ICAgICAgICAgICAgICAgICAgICB4MiA9IGludmVyLngodFsxXSwgdFsyXSk7 CisgICAgICAgICAgICAgICAgICAgIHkyID0gaW52ZXIueSh0WzFdLCB0WzJd KTsKKyAgICAgICAgICAgICAgICAgICAgbS50cmFuc2xhdGUoeDIgLSB4MSwg eTIgLSB5MSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgICAgICAgICAgbS50cmFuc2xhdGUodFsxXSwgdFsyXSk7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChjb21tYW5kID09 ICJyIikgeworICAgICAgICAgICAgICAgIGlmICh0bGVuID09IDIpIHsKKyAg ICAgICAgICAgICAgICAgICAgYmIgPSBiYiB8fCBiYm94OworICAgICAgICAg ICAgICAgICAgICBtLnJvdGF0ZSh0WzFdLCBiYi54ICsgYmIud2lkdGggLyAy LCBiYi55ICsgYmIuaGVpZ2h0IC8gMik7CisgICAgICAgICAgICAgICAgfSBl bHNlIGlmICh0bGVuID09IDQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg KGFic29sdXRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB4MiA9IGlu dmVyLngodFsyXSwgdFszXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB5 MiA9IGludmVyLnkodFsyXSwgdFszXSk7CisgICAgICAgICAgICAgICAgICAg ICAgICBtLnJvdGF0ZSh0WzFdLCB4MiwgeTIpOworICAgICAgICAgICAgICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbS5yb3Rh dGUodFsxXSwgdFsyXSwgdFszXSk7CisgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGNv bW1hbmQgPT0gInMiKSB7CisgICAgICAgICAgICAgICAgaWYgKHRsZW4gPT0g MiB8fCB0bGVuID09IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgYmIgPSBi YiB8fCBiYm94OworICAgICAgICAgICAgICAgICAgICBtLnNjYWxlKHRbMV0s IHRbdGxlbiAtIDFdLCBiYi54ICsgYmIud2lkdGggLyAyLCBiYi55ICsgYmIu aGVpZ2h0IC8gMik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0bGVu ID09IDQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGFic29sdXRlKSB7 CisgICAgICAgICAgICAgICAgICAgICAgICB4MiA9IGludmVyLngodFsyXSwg dFszXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB5MiA9IGludmVyLnko dFsyXSwgdFszXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtLnNjYWxl KHRbMV0sIHRbMV0sIHgyLCB5Mik7CisgICAgICAgICAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtLnNjYWxlKHRbMV0s IHRbMV0sIHRbMl0sIHRbM10pOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0bGVuID09IDUpIHsKKyAgICAg ICAgICAgICAgICAgICAgaWYgKGFic29sdXRlKSB7CisgICAgICAgICAgICAg ICAgICAgICAgICB4MiA9IGludmVyLngodFszXSwgdFs0XSk7CisgICAgICAg ICAgICAgICAgICAgICAgICB5MiA9IGludmVyLnkodFszXSwgdFs0XSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICBtLnNjYWxlKHRbMV0sIHRbMl0sIHgy LCB5Mik7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgICAgICAgICBtLnNjYWxlKHRbMV0sIHRbMl0sIHRbM10sIHRb NF0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfSBlbHNlIGlmIChjb21tYW5kID09ICJtIiAmJiB0 bGVuID09IDcpIHsKKyAgICAgICAgICAgICAgICBtLmFkZCh0WzFdLCB0WzJd LCB0WzNdLCB0WzRdLCB0WzVdLCB0WzZdKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbTsKK30KK1NuYXAuXy50cmFu c2Zvcm0ybWF0cml4ID0gdHJhbnNmb3JtMm1hdHJpeDsKK1NuYXAuX3VuaXQy cHggPSB1bml0MnB4OwordmFyIGNvbnRhaW5zID0gZ2xvYi5kb2MuY29udGFp bnMgfHwgZ2xvYi5kb2MuY29tcGFyZURvY3VtZW50UG9zaXRpb24gPworICAg IGZ1bmN0aW9uIChhLCBiKSB7CisgICAgICAgIHZhciBhZG93biA9IGEubm9k ZVR5cGUgPT0gOSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSwKKyAgICAgICAg ICAgIGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlOworICAgICAgICAgICAgcmV0 dXJuIGEgPT0gYnVwIHx8ICEhKGJ1cCAmJiBidXAubm9kZVR5cGUgPT0gMSAm JiAoCisgICAgICAgICAgICAgICAgYWRvd24uY29udGFpbnMgPworICAgICAg ICAgICAgICAgICAgICBhZG93bi5jb250YWlucyhidXApIDoKKyAgICAgICAg ICAgICAgICAgICAgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNv bXBhcmVEb2N1bWVudFBvc2l0aW9uKGJ1cCkgJiAxNgorICAgICAgICAgICAg KSk7CisgICAgfSA6CisgICAgZnVuY3Rpb24gKGEsIGIpIHsKKyAgICAgICAg aWYgKGIpIHsKKyAgICAgICAgICAgIHdoaWxlIChiKSB7CisgICAgICAgICAg ICAgICAgYiA9IGIucGFyZW50Tm9kZTsKKyAgICAgICAgICAgICAgICBpZiAo YiA9PSBhKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfTsKK2Z1bmN0aW9uIGdldFNv bWVEZWZzKGVsKSB7CisgICAgdmFyIHAgPSAoZWwubm9kZS5vd25lclNWR0Vs ZW1lbnQgJiYgd3JhcChlbC5ub2RlLm93bmVyU1ZHRWxlbWVudCkpIHx8Cisg ICAgICAgICAgICAoZWwubm9kZS5wYXJlbnROb2RlICYmIHdyYXAoZWwubm9k ZS5wYXJlbnROb2RlKSkgfHwKKyAgICAgICAgICAgIFNuYXAuc2VsZWN0KCJz dmciKSB8fAorICAgICAgICAgICAgU25hcCgwLCAwKSwKKyAgICAgICAgcGRl ZnMgPSBwLnNlbGVjdCgiZGVmcyIpLAorICAgICAgICBkZWZzICA9IHBkZWZz ID09IG51bGwgPyBmYWxzZSA6IHBkZWZzLm5vZGU7CisgICAgaWYgKCFkZWZz KSB7CisgICAgICAgIGRlZnMgPSBtYWtlKCJkZWZzIiwgcC5ub2RlKS5ub2Rl OworICAgIH0KKyAgICByZXR1cm4gZGVmczsKK30KK2Z1bmN0aW9uIGdldFNv bWVTVkcoZWwpIHsKKyAgICByZXR1cm4gZWwubm9kZS5vd25lclNWR0VsZW1l bnQgJiYgd3JhcChlbC5ub2RlLm93bmVyU1ZHRWxlbWVudCkgfHwgU25hcC5z ZWxlY3QoInN2ZyIpOworfQorU25hcC5fLmdldFNvbWVEZWZzID0gZ2V0U29t ZURlZnM7CitTbmFwLl8uZ2V0U29tZVNWRyA9IGdldFNvbWVTVkc7CitmdW5j dGlvbiB1bml0MnB4KGVsLCBuYW1lLCB2YWx1ZSkgeworICAgIHZhciBzdmcg PSBnZXRTb21lU1ZHKGVsKS5ub2RlLAorICAgICAgICBvdXQgPSB7fSwKKyAg ICAgICAgbWdyID0gc3ZnLnF1ZXJ5U2VsZWN0b3IoIi5zdmctLS1tZ3IiKTsK KyAgICBpZiAoIW1ncikgeworICAgICAgICBtZ3IgPSAkKCJyZWN0Iik7Cisg ICAgICAgICQobWdyLCB7eDogLTllOSwgeTogLTllOSwgd2lkdGg6IDEwLCBo ZWlnaHQ6IDEwLCAiY2xhc3MiOiAic3ZnLS0tbWdyIiwgZmlsbDogIm5vbmUi fSk7CisgICAgICAgIHN2Zy5hcHBlbmRDaGlsZChtZ3IpOworICAgIH0KKyAg ICBmdW5jdGlvbiBnZXRXKHZhbCkgeworICAgICAgICBpZiAodmFsID09IG51 bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBFOworICAgICAgICB9CisgICAg ICAgIGlmICh2YWwgPT0gK3ZhbCkgeworICAgICAgICAgICAgcmV0dXJuIHZh bDsKKyAgICAgICAgfQorICAgICAgICAkKG1nciwge3dpZHRoOiB2YWx9KTsK KyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJldHVybiBtZ3IuZ2V0QkJv eCgpLndpZHRoOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAg ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICBmdW5jdGlvbiBn ZXRIKHZhbCkgeworICAgICAgICBpZiAodmFsID09IG51bGwpIHsKKyAgICAg ICAgICAgIHJldHVybiBFOworICAgICAgICB9CisgICAgICAgIGlmICh2YWwg PT0gK3ZhbCkgeworICAgICAgICAgICAgcmV0dXJuIHZhbDsKKyAgICAgICAg fQorICAgICAgICAkKG1nciwge2hlaWdodDogdmFsfSk7CisgICAgICAgIHRy eSB7CisgICAgICAgICAgICByZXR1cm4gbWdyLmdldEJCb3goKS5oZWlnaHQ7 CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHJldHVybiAw OworICAgICAgICB9CisgICAgfQorICAgIGZ1bmN0aW9uIHNldChuYW0sIGYp IHsKKyAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgeworICAgICAgICAgICAg b3V0W25hbV0gPSBmKGVsLmF0dHIobmFtKSB8fCAwKTsKKyAgICAgICAgfSBl bHNlIGlmIChuYW0gPT0gbmFtZSkgeworICAgICAgICAgICAgb3V0ID0gZih2 YWx1ZSA9PSBudWxsID8gZWwuYXR0cihuYW0pIHx8IDAgOiB2YWx1ZSk7Cisg ICAgICAgIH0KKyAgICB9CisgICAgc3dpdGNoIChlbC50eXBlKSB7CisgICAg ICAgIGNhc2UgInJlY3QiOgorICAgICAgICAgICAgc2V0KCJyeCIsIGdldFcp OworICAgICAgICAgICAgc2V0KCJyeSIsIGdldEgpOworICAgICAgICBjYXNl ICJpbWFnZSI6CisgICAgICAgICAgICBzZXQoIndpZHRoIiwgZ2V0Vyk7Cisg ICAgICAgICAgICBzZXQoImhlaWdodCIsIGdldEgpOworICAgICAgICBjYXNl ICJ0ZXh0IjoKKyAgICAgICAgICAgIHNldCgieCIsIGdldFcpOworICAgICAg ICAgICAgc2V0KCJ5IiwgZ2V0SCk7CisgICAgICAgIGJyZWFrOworICAgICAg ICBjYXNlICJjaXJjbGUiOgorICAgICAgICAgICAgc2V0KCJjeCIsIGdldFcp OworICAgICAgICAgICAgc2V0KCJjeSIsIGdldEgpOworICAgICAgICAgICAg c2V0KCJyIiwgZ2V0Vyk7CisgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl ICJlbGxpcHNlIjoKKyAgICAgICAgICAgIHNldCgiY3giLCBnZXRXKTsKKyAg ICAgICAgICAgIHNldCgiY3kiLCBnZXRIKTsKKyAgICAgICAgICAgIHNldCgi cngiLCBnZXRXKTsKKyAgICAgICAgICAgIHNldCgicnkiLCBnZXRIKTsKKyAg ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgImxpbmUiOgorICAgICAgICAg ICAgc2V0KCJ4MSIsIGdldFcpOworICAgICAgICAgICAgc2V0KCJ4MiIsIGdl dFcpOworICAgICAgICAgICAgc2V0KCJ5MSIsIGdldEgpOworICAgICAgICAg ICAgc2V0KCJ5MiIsIGdldEgpOworICAgICAgICBicmVhazsKKyAgICAgICAg Y2FzZSAibWFya2VyIjoKKyAgICAgICAgICAgIHNldCgicmVmWCIsIGdldFcp OworICAgICAgICAgICAgc2V0KCJtYXJrZXJXaWR0aCIsIGdldFcpOworICAg ICAgICAgICAgc2V0KCJyZWZZIiwgZ2V0SCk7CisgICAgICAgICAgICBzZXQo Im1hcmtlckhlaWdodCIsIGdldEgpOworICAgICAgICBicmVhazsKKyAgICAg ICAgY2FzZSAicmFkaWFsR3JhZGllbnQiOgorICAgICAgICAgICAgc2V0KCJm eCIsIGdldFcpOworICAgICAgICAgICAgc2V0KCJmeSIsIGdldEgpOworICAg ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAidHNwYW4iOgorICAgICAgICAg ICAgc2V0KCJkeCIsIGdldFcpOworICAgICAgICAgICAgc2V0KCJkeSIsIGdl dEgpOworICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgIHNldChuYW1lLCBnZXRXKTsKKyAgICB9CisgICAgc3ZnLnJlbW92 ZUNoaWxkKG1ncik7CisgICAgcmV0dXJuIG91dDsKK30KKy8qXAorICogU25h cC5zZWxlY3QKKyBbIG1ldGhvZCBdCisgKioKKyAqIFdyYXBzIGEgRE9NIGVs ZW1lbnQgc3BlY2lmaWVkIGJ5IENTUyBzZWxlY3RvciBhcyBARWxlbWVudAor IC0gcXVlcnkgKHN0cmluZykgQ1NTIHNlbGVjdG9yIG9mIHRoZSBlbGVtZW50 CisgPSAoRWxlbWVudCkgdGhlIGN1cnJlbnQgZWxlbWVudAorXCovCitTbmFw LnNlbGVjdCA9IGZ1bmN0aW9uIChxdWVyeSkgeworICAgIHF1ZXJ5ID0gU3Ry KHF1ZXJ5KS5yZXBsYWNlKC8oW15cXF0pOi9nLCAiJDFcXDoiKTsKKyAgICBy ZXR1cm4gd3JhcChnbG9iLmRvYy5xdWVyeVNlbGVjdG9yKHF1ZXJ5KSk7Cit9 OworLypcCisgKiBTbmFwLnNlbGVjdEFsbAorIFsgbWV0aG9kIF0KKyAqKgor ICogV3JhcHMgRE9NIGVsZW1lbnRzIHNwZWNpZmllZCBieSBDU1Mgc2VsZWN0 b3IgYXMgc2V0IG9yIGFycmF5IG9mIEBFbGVtZW50CisgLSBxdWVyeSAoc3Ry aW5nKSBDU1Mgc2VsZWN0b3Igb2YgdGhlIGVsZW1lbnQKKyA9IChFbGVtZW50 KSB0aGUgY3VycmVudCBlbGVtZW50CitcKi8KK1NuYXAuc2VsZWN0QWxsID0g ZnVuY3Rpb24gKHF1ZXJ5KSB7CisgICAgdmFyIG5vZGVsaXN0ID0gZ2xvYi5k b2MucXVlcnlTZWxlY3RvckFsbChxdWVyeSksCisgICAgICAgIHNldCA9IChT bmFwLnNldCB8fCBBcnJheSkoKTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8 IG5vZGVsaXN0Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgIHNldC5wdXNoKHdy YXAobm9kZWxpc3RbaV0pKTsKKyAgICB9CisgICAgcmV0dXJuIHNldDsKK307 CisKK2Z1bmN0aW9uIGFkZDJncm91cChsaXN0KSB7CisgICAgaWYgKCFpcyhs aXN0LCAiYXJyYXkiKSkgeworICAgICAgICBsaXN0ID0gQXJyYXkucHJvdG90 eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTsKKyAgICB9CisgICAgdmFy IGkgPSAwLAorICAgICAgICBqID0gMCwKKyAgICAgICAgbm9kZSA9IHRoaXMu bm9kZTsKKyAgICB3aGlsZSAodGhpc1tpXSkgZGVsZXRlIHRoaXNbaSsrXTsK KyAgICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgeworICAg ICAgICBpZiAobGlzdFtpXS50eXBlID09ICJzZXQiKSB7CisgICAgICAgICAg ICBsaXN0W2ldLmZvckVhY2goZnVuY3Rpb24gKGVsKSB7CisgICAgICAgICAg ICAgICAgbm9kZS5hcHBlbmRDaGlsZChlbC5ub2RlKTsKKyAgICAgICAgICAg IH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbm9kZS5hcHBl bmRDaGlsZChsaXN0W2ldLm5vZGUpOworICAgICAgICB9CisgICAgfQorICAg IHZhciBjaGlsZHJlbiA9IG5vZGUuY2hpbGROb2RlczsKKyAgICBmb3IgKGkg PSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdGhp c1tqKytdID0gd3JhcChjaGlsZHJlbltpXSk7CisgICAgfQorICAgIHJldHVy biB0aGlzOworfQorLy8gSHViIGdhcmJhZ2UgY29sbGVjdG9yIGV2ZXJ5IDEw cworc2V0SW50ZXJ2YWwoZnVuY3Rpb24gKCkgeworICAgIGZvciAodmFyIGtl eSBpbiBodWIpIGlmIChodWJbaGFzXShrZXkpKSB7CisgICAgICAgIHZhciBl bCA9IGh1YltrZXldLAorICAgICAgICAgICAgbm9kZSA9IGVsLm5vZGU7Cisg ICAgICAgIGlmIChlbC50eXBlICE9ICJzdmciICYmICFub2RlLm93bmVyU1ZH RWxlbWVudCB8fCBlbC50eXBlID09ICJzdmciICYmICghbm9kZS5wYXJlbnRO b2RlIHx8ICJvd25lclNWR0VsZW1lbnQiIGluIG5vZGUucGFyZW50Tm9kZSAm JiAhbm9kZS5vd25lclNWR0VsZW1lbnQpKSB7CisgICAgICAgICAgICBkZWxl dGUgaHViW2tleV07CisgICAgICAgIH0KKyAgICB9Cit9LCAxZTQpOworZnVu Y3Rpb24gRWxlbWVudChlbCkgeworICAgIGlmIChlbC5zbmFwIGluIGh1Yikg eworICAgICAgICByZXR1cm4gaHViW2VsLnNuYXBdOworICAgIH0KKyAgICB2 YXIgc3ZnOworICAgIHRyeSB7CisgICAgICAgIHN2ZyA9IGVsLm93bmVyU1ZH RWxlbWVudDsKKyAgICB9IGNhdGNoKGUpIHt9CisgICAgLypcCisgICAgICog RWxlbWVudC5ub2RlCisgICAgIFsgcHJvcGVydHkgKG9iamVjdCkgXQorICAg ICAqKgorICAgICAqIEdpdmVzIHlvdSBhIHJlZmVyZW5jZSB0byB0aGUgRE9N IG9iamVjdCwgc28geW91IGNhbiBhc3NpZ24gZXZlbnQgaGFuZGxlcnMgb3Ig anVzdCBtZXNzIGFyb3VuZC4KKyAgICAgPiBVc2FnZQorICAgICB8IC8vIGRy YXcgYSBjaXJjbGUgYXQgY29vcmRpbmF0ZSAxMCwxMCB3aXRoIHJhZGl1cyBv ZiAxMAorICAgICB8IHZhciBjID0gcGFwZXIuY2lyY2xlKDEwLCAxMCwgMTAp OworICAgICB8IGMubm9kZS5vbmNsaWNrID0gZnVuY3Rpb24gKCkgeworICAg ICB8ICAgICBjLmF0dHIoImZpbGwiLCAicmVkIik7CisgICAgIHwgfTsKKyAg ICBcKi8KKyAgICB0aGlzLm5vZGUgPSBlbDsKKyAgICBpZiAoc3ZnKSB7Cisg ICAgICAgIHRoaXMucGFwZXIgPSBuZXcgUGFwZXIoc3ZnKTsKKyAgICB9Cisg ICAgLypcCisgICAgICogRWxlbWVudC50eXBlCisgICAgIFsgcHJvcGVydHkg KHN0cmluZykgXQorICAgICAqKgorICAgICAqIFNWRyB0YWcgbmFtZSBvZiB0 aGUgZ2l2ZW4gZWxlbWVudC4KKyAgICBcKi8KKyAgICB0aGlzLnR5cGUgPSBl bC50YWdOYW1lIHx8IGVsLm5vZGVOYW1lOworICAgIHZhciBpZCA9IHRoaXMu aWQgPSBJRCh0aGlzKTsKKyAgICB0aGlzLmFuaW1zID0ge307CisgICAgdGhp cy5fID0geworICAgICAgICB0cmFuc2Zvcm06IFtdCisgICAgfTsKKyAgICBl bC5zbmFwID0gaWQ7CisgICAgaHViW2lkXSA9IHRoaXM7CisgICAgaWYgKHRo aXMudHlwZSA9PSAiZyIpIHsKKyAgICAgICAgdGhpcy5hZGQgPSBhZGQyZ3Jv dXA7CisgICAgfQorICAgIGlmICh0aGlzLnR5cGUgaW4ge2c6IDEsIG1hc2s6 IDEsIHBhdHRlcm46IDEsIHN5bWJvbDogMX0pIHsKKyAgICAgICAgZm9yICh2 YXIgbWV0aG9kIGluIFBhcGVyLnByb3RvdHlwZSkgaWYgKFBhcGVyLnByb3Rv dHlwZVtoYXNdKG1ldGhvZCkpIHsKKyAgICAgICAgICAgIHRoaXNbbWV0aG9k XSA9IFBhcGVyLnByb3RvdHlwZVttZXRob2RdOworICAgICAgICB9CisgICAg fQorfQorICAgLypcCisgICAgICogRWxlbWVudC5hdHRyCisgICAgIFsgbWV0 aG9kIF0KKyAgICAgKioKKyAgICAgKiBHZXRzIG9yIHNldHMgZ2l2ZW4gYXR0 cmlidXRlcyBvZiB0aGUgZWxlbWVudC4KKyAgICAgKioKKyAgICAgLSBwYXJh bXMgKG9iamVjdCkgY29udGFpbnMga2V5LXZhbHVlIHBhaXJzIG9mIGF0dHJp YnV0ZXMgeW91IHdhbnQgdG8gc2V0CisgICAgICogb3IKKyAgICAgLSBwYXJh bSAoc3RyaW5nKSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUKKyAgICAgPSAoRWxl bWVudCkgdGhlIGN1cnJlbnQgZWxlbWVudAorICAgICAqIG9yCisgICAgID0g KHN0cmluZykgdmFsdWUgb2YgYXR0cmlidXRlCisgICAgID4gVXNhZ2UKKyAg ICAgfCBlbC5hdHRyKHsKKyAgICAgfCAgICAgZmlsbDogIiNmYzAiLAorICAg ICB8ICAgICBzdHJva2U6ICIjMDAwIiwKKyAgICAgfCAgICAgc3Ryb2tlV2lk dGg6IDIsIC8vIENhbWVsQ2FzZS4uLgorICAgICB8ICAgICAiZmlsbC1vcGFj aXR5IjogMC41LCAvLyBvciBkYXNoLXNlcGFyYXRlZCBuYW1lcworICAgICB8 ICAgICB3aWR0aDogIio9MiIgLy8gcHJlZml4ZWQgdmFsdWVzCisgICAgIHwg fSk7CisgICAgIHwgY29uc29sZS5sb2coZWwuYXR0cigiZmlsbCIpKTsgLy8g I2ZjMAorICAgICAqIFByZWZpeGVkIHZhbHVlcyBpbiBmb3JtYXQgYCIrPTEw ImAgc3VwcG9ydGVkLiBBbGwgZm91ciBvcGVyYXRpb25zCisgICAgICogKGAr YCwgYC1gLCBgKmAgYW5kIGAvYCkgY291bGQgYmUgdXNlZC4gT3B0aW9uYWxs eSB5b3UgY2FuIHVzZSB1bml0cyBmb3IgYCtgCisgICAgICogYW5kIGAtYDog YCIrPTJlbSJgLgorICAgIFwqLworICAgIEVsZW1lbnQucHJvdG90eXBlLmF0 dHIgPSBmdW5jdGlvbiAocGFyYW1zLCB2YWx1ZSkgeworICAgICAgICB2YXIg ZWwgPSB0aGlzLAorICAgICAgICAgICAgbm9kZSA9IGVsLm5vZGU7CisgICAg ICAgIGlmICghcGFyYW1zKSB7CisgICAgICAgICAgICBpZiAobm9kZS5ub2Rl VHlwZSAhPSAxKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAg ICAgICAgICAgICAgICAgdGV4dDogbm9kZS5ub2RlVmFsdWUKKyAgICAgICAg ICAgICAgICB9OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIGF0 dHIgPSBub2RlLmF0dHJpYnV0ZXMsCisgICAgICAgICAgICAgICAgb3V0ID0g e307CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBhdHRyLmxl bmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBvdXRbYXR0 cltpXS5ub2RlTmFtZV0gPSBhdHRyW2ldLm5vZGVWYWx1ZTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIHJldHVybiBvdXQ7CisgICAgICAgIH0KKyAg ICAgICAgaWYgKGlzKHBhcmFtcywgInN0cmluZyIpKSB7CisgICAgICAgICAg ICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAgICAgICAg ICB2YXIganNvbiA9IHt9OworICAgICAgICAgICAgICAgIGpzb25bcGFyYW1z XSA9IHZhbHVlOworICAgICAgICAgICAgICAgIHBhcmFtcyA9IGpzb247Cisg ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBl dmUoInNuYXAudXRpbC5nZXRhdHRyLiIgKyBwYXJhbXMsIGVsKS5maXJzdERl ZmluZWQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBm b3IgKHZhciBhdHQgaW4gcGFyYW1zKSB7CisgICAgICAgICAgICBpZiAocGFy YW1zW2hhc10oYXR0KSkgeworICAgICAgICAgICAgICAgIGV2ZSgic25hcC51 dGlsLmF0dHIuIiArIGF0dCwgZWwsIHBhcmFtc1thdHRdKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZWw7CisgICAgfTsK Ky8qXAorICogU25hcC5wYXJzZQorIFsgbWV0aG9kIF0KKyAqKgorICogUGFy c2VzIFNWRyBmcmFnbWVudCBhbmQgY29udmVydHMgaXQgaW50byBhIEBGcmFn bWVudAorICoqCisgLSBzdmcgKHN0cmluZykgU1ZHIHN0cmluZworID0gKEZy YWdtZW50KSB0aGUgQEZyYWdtZW50CitcKi8KK1NuYXAucGFyc2UgPSBmdW5j dGlvbiAoc3ZnKSB7CisgICAgdmFyIGYgPSBnbG9iLmRvYy5jcmVhdGVEb2N1 bWVudEZyYWdtZW50KCksCisgICAgICAgIGZ1bGwgPSB0cnVlLAorICAgICAg ICBkaXYgPSBnbG9iLmRvYy5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgICBz dmcgPSBTdHIoc3ZnKTsKKyAgICBpZiAoIXN2Zy5tYXRjaCgvXlxzKjxccypz dmcoPzpcc3w+KS8pKSB7CisgICAgICAgIHN2ZyA9ICI8c3ZnPiIgKyBzdmcg KyAiPC9zdmc+IjsKKyAgICAgICAgZnVsbCA9IGZhbHNlOworICAgIH0KKyAg ICBkaXYuaW5uZXJIVE1MID0gc3ZnOworICAgIHN2ZyA9IGRpdi5nZXRFbGVt ZW50c0J5VGFnTmFtZSgic3ZnIilbMF07CisgICAgaWYgKHN2ZykgeworICAg ICAgICBpZiAoZnVsbCkgeworICAgICAgICAgICAgZiA9IHN2ZzsKKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHdoaWxlIChzdmcuZmlyc3RDaGls ZCkgeworICAgICAgICAgICAgICAgIGYuYXBwZW5kQ2hpbGQoc3ZnLmZpcnN0 Q2hpbGQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAg IHJldHVybiBuZXcgRnJhZ21lbnQoZik7Cit9OworZnVuY3Rpb24gRnJhZ21l bnQoZnJhZykgeworICAgIHRoaXMubm9kZSA9IGZyYWc7Cit9CisvKlwKKyAq IFNuYXAuZnJhZ21lbnQKKyBbIG1ldGhvZCBdCisgKioKKyAqIENyZWF0ZXMg YSBET00gZnJhZ21lbnQgZnJvbSBhIGdpdmVuIGxpc3Qgb2YgZWxlbWVudHMg b3Igc3RyaW5ncworICoqCisgLSB2YXJhcmdzICjigKYpIFNWRyBzdHJpbmcK KyA9IChGcmFnbWVudCkgdGhlIEBGcmFnbWVudAorXCovCitTbmFwLmZyYWdt ZW50ID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBhcmdzID0gQXJyYXkucHJv dG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSwKKyAgICAgICAgZiA9 IGdsb2IuZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKKyAgICBmb3Ig KHZhciBpID0gMCwgaWkgPSBhcmdzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsK KyAgICAgICAgdmFyIGl0ZW0gPSBhcmdzW2ldOworICAgICAgICBpZiAoaXRl bS5ub2RlICYmIGl0ZW0ubm9kZS5ub2RlVHlwZSkgeworICAgICAgICAgICAg Zi5hcHBlbmRDaGlsZChpdGVtLm5vZGUpOworICAgICAgICB9CisgICAgICAg IGlmIChpdGVtLm5vZGVUeXBlKSB7CisgICAgICAgICAgICBmLmFwcGVuZENo aWxkKGl0ZW0pOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2YgaXRl bSA9PSAic3RyaW5nIikgeworICAgICAgICAgICAgZi5hcHBlbmRDaGlsZChT bmFwLnBhcnNlKGl0ZW0pLm5vZGUpOworICAgICAgICB9CisgICAgfQorICAg IHJldHVybiBuZXcgRnJhZ21lbnQoZik7Cit9OworCitmdW5jdGlvbiBtYWtl KG5hbWUsIHBhcmVudCkgeworICAgIHZhciByZXMgPSAkKG5hbWUpOworICAg IHBhcmVudC5hcHBlbmRDaGlsZChyZXMpOworICAgIHZhciBlbCA9IHdyYXAo cmVzKTsKKyAgICByZXR1cm4gZWw7Cit9CitmdW5jdGlvbiBQYXBlcih3LCBo KSB7CisgICAgdmFyIHJlcywKKyAgICAgICAgZGVzYywKKyAgICAgICAgZGVm cywKKyAgICAgICAgcHJvdG8gPSBQYXBlci5wcm90b3R5cGU7CisgICAgaWYg KHcgJiYgdy50YWdOYW1lID09ICJzdmciKSB7CisgICAgICAgIGlmICh3LnNu YXAgaW4gaHViKSB7CisgICAgICAgICAgICByZXR1cm4gaHViW3cuc25hcF07 CisgICAgICAgIH0KKyAgICAgICAgdmFyIGRvYyA9IHcub3duZXJEb2N1bWVu dDsKKyAgICAgICAgcmVzID0gbmV3IEVsZW1lbnQodyk7CisgICAgICAgIGRl c2MgPSB3LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkZXNjIilbMF07CisgICAg ICAgIGRlZnMgPSB3LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJkZWZzIilbMF07 CisgICAgICAgIGlmICghZGVzYykgeworICAgICAgICAgICAgZGVzYyA9ICQo ImRlc2MiKTsKKyAgICAgICAgICAgIGRlc2MuYXBwZW5kQ2hpbGQoZG9jLmNy ZWF0ZVRleHROb2RlKCJDcmVhdGVkIHdpdGggU25hcCIpKTsKKyAgICAgICAg ICAgIHJlcy5ub2RlLmFwcGVuZENoaWxkKGRlc2MpOworICAgICAgICB9Cisg ICAgICAgIGlmICghZGVmcykgeworICAgICAgICAgICAgZGVmcyA9ICQoImRl ZnMiKTsKKyAgICAgICAgICAgIHJlcy5ub2RlLmFwcGVuZENoaWxkKGRlZnMp OworICAgICAgICB9CisgICAgICAgIHJlcy5kZWZzID0gZGVmczsKKyAgICAg ICAgZm9yICh2YXIga2V5IGluIHByb3RvKSBpZiAocHJvdG9baGFzXShrZXkp KSB7CisgICAgICAgICAgICByZXNba2V5XSA9IHByb3RvW2tleV07CisgICAg ICAgIH0KKyAgICAgICAgcmVzLnBhcGVyID0gcmVzLnJvb3QgPSByZXM7Cisg ICAgfSBlbHNlIHsKKyAgICAgICAgcmVzID0gbWFrZSgic3ZnIiwgZ2xvYi5k b2MuYm9keSk7CisgICAgICAgICQocmVzLm5vZGUsIHsKKyAgICAgICAgICAg IGhlaWdodDogaCwKKyAgICAgICAgICAgIHZlcnNpb246IDEuMSwKKyAgICAg ICAgICAgIHdpZHRoOiB3LAorICAgICAgICAgICAgeG1sbnM6IHhtbG5zCisg ICAgICAgIH0pOworICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorZnVuY3Rp b24gd3JhcChkb20pIHsKKyAgICBpZiAoIWRvbSkgeworICAgICAgICByZXR1 cm4gZG9tOworICAgIH0KKyAgICBpZiAoZG9tIGluc3RhbmNlb2YgRWxlbWVu dCB8fCBkb20gaW5zdGFuY2VvZiBGcmFnbWVudCkgeworICAgICAgICByZXR1 cm4gZG9tOworICAgIH0KKyAgICBpZiAoZG9tLnRhZ05hbWUgJiYgZG9tLnRh Z05hbWUudG9Mb3dlckNhc2UoKSA9PSAic3ZnIikgeworICAgICAgICByZXR1 cm4gbmV3IFBhcGVyKGRvbSk7CisgICAgfQorICAgIGlmIChkb20udGFnTmFt ZSAmJiBkb20udGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICJvYmplY3QiICYm IGRvbS50eXBlID09ICJpbWFnZS9zdmcreG1sIikgeworICAgICAgICByZXR1 cm4gbmV3IFBhcGVyKGRvbS5jb250ZW50RG9jdW1lbnQuZ2V0RWxlbWVudHNC eVRhZ05hbWUoInN2ZyIpWzBdKTsKKyAgICB9CisgICAgcmV0dXJuIG5ldyBF bGVtZW50KGRvbSk7Cit9CisKK1NuYXAuXy5tYWtlID0gbWFrZTsKK1NuYXAu Xy53cmFwID0gd3JhcDsKKy8qXAorICogUGFwZXIuZWwKKyBbIG1ldGhvZCBd CisgKioKKyAqIENyZWF0ZXMgYW4gZWxlbWVudCBvbiBwYXBlciB3aXRoIGEg Z2l2ZW4gbmFtZSBhbmQgbm8gYXR0cmlidXRlcworICoqCisgLSBuYW1lIChz dHJpbmcpIHRhZyBuYW1lCisgLSBhdHRyIChvYmplY3QpIGF0dHJpYnV0ZXMK KyA9IChFbGVtZW50KSB0aGUgY3VycmVudCBlbGVtZW50CisgPiBVc2FnZQor IHwgdmFyIGMgPSBwYXBlci5jaXJjbGUoMTAsIDEwLCAxMCk7IC8vIGlzIHRo ZSBzYW1lIGFzLi4uCisgfCB2YXIgYyA9IHBhcGVyLmVsKCJjaXJjbGUiKS5h dHRyKHsKKyB8ICAgICBjeDogMTAsCisgfCAgICAgY3k6IDEwLAorIHwgICAg IHI6IDEwCisgfCB9KTsKKyB8IC8vIGFuZCB0aGUgc2FtZSBhcworIHwgdmFy IGMgPSBwYXBlci5lbCgiY2lyY2xlIiwgeworIHwgICAgIGN4OiAxMCwKKyB8 ICAgICBjeTogMTAsCisgfCAgICAgcjogMTAKKyB8IH0pOworXCovCitQYXBl ci5wcm90b3R5cGUuZWwgPSBmdW5jdGlvbiAobmFtZSwgYXR0cikgeworICAg IHZhciBlbCA9IG1ha2UobmFtZSwgdGhpcy5ub2RlKTsKKyAgICBhdHRyICYm IGVsLmF0dHIoYXR0cik7CisgICAgcmV0dXJuIGVsOworfTsKKy8qXAorICog RWxlbWVudC5jaGlsZHJlbgorIFsgbWV0aG9kIF0KKyAqKgorICogUmV0dXJu cyBhcnJheSBvZiBhbGwgdGhlIGNoaWxkcmVuIG9mIHRoZSBlbGVtZW50Lgor ID0gKGFycmF5KSBhcnJheSBvZiBFbGVtZW50cworXCovCitFbGVtZW50LnBy b3RvdHlwZS5jaGlsZHJlbiA9IGZ1bmN0aW9uICgpIHsKKyAgICB2YXIgb3V0 ID0gW10sCisgICAgICAgIGNoID0gdGhpcy5ub2RlLmNoaWxkTm9kZXM7Cisg ICAgZm9yICh2YXIgaSA9IDAsIGlpID0gY2gubGVuZ3RoOyBpIDwgaWk7IGkr KykgeworICAgICAgICBvdXRbaV0gPSBTbmFwKGNoW2ldKTsKKyAgICB9Cisg ICAgcmV0dXJuIG91dDsKK307CitmdW5jdGlvbiBqc29uRmlsbGVyKHJvb3Qs IG8pIHsKKyAgICBmb3IgKHZhciBpID0gMCwgaWkgPSByb290Lmxlbmd0aDsg aSA8IGlpOyBpKyspIHsKKyAgICAgICAgdmFyIGl0ZW0gPSB7CisgICAgICAg ICAgICAgICAgdHlwZTogcm9vdFtpXS50eXBlLAorICAgICAgICAgICAgICAg IGF0dHI6IHJvb3RbaV0uYXR0cigpCisgICAgICAgICAgICB9LAorICAgICAg ICAgICAgY2hpbGRyZW4gPSByb290W2ldLmNoaWxkcmVuKCk7CisgICAgICAg IG8ucHVzaChpdGVtKTsKKyAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCkg eworICAgICAgICAgICAganNvbkZpbGxlcihjaGlsZHJlbiwgaXRlbS5jaGls ZE5vZGVzID0gW10pOworICAgICAgICB9CisgICAgfQorfQorLypcCisgKiBF bGVtZW50LnRvSlNPTgorIFsgbWV0aG9kIF0KKyAqKgorICogUmV0dXJucyBv YmplY3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGVsZW1lbnQgYW5k IGFsbCBpdHMgY2hpbGRyZW4uCisgPSAob2JqZWN0KSBpbiBmb3JtYXQKKyBv IHsKKyBvICAgICB0eXBlIChzdHJpbmcpIHRoaXMudHlwZSwKKyBvICAgICBh dHRyIChvYmplY3QpIGF0dHJpYnV0ZXMgbWFwLAorIG8gICAgIGNoaWxkTm9k ZXMgKGFycmF5KSBvcHRpb25hbCBhcnJheSBvZiBjaGlsZHJlbiBpbiB0aGUg c2FtZSBmb3JtYXQKKyBvIH0KK1wqLworRWxlbWVudC5wcm90b3R5cGUudG9K U09OID0gZnVuY3Rpb24gKCkgeworICAgIHZhciBvdXQgPSBbXTsKKyAgICBq c29uRmlsbGVyKFt0aGlzXSwgb3V0KTsKKyAgICByZXR1cm4gb3V0WzBdOwor fTsKKy8vIGRlZmF1bHQKK2V2ZS5vbigic25hcC51dGlsLmdldGF0dHIiLCBm dW5jdGlvbiAoKSB7CisgICAgdmFyIGF0dCA9IGV2ZS5udCgpOworICAgIGF0 dCA9IGF0dC5zdWJzdHJpbmcoYXR0Lmxhc3RJbmRleE9mKCIuIikgKyAxKTsK KyAgICB2YXIgY3NzID0gYXR0LnJlcGxhY2UoL1tBLVpdL2csIGZ1bmN0aW9u IChsZXR0ZXIpIHsKKyAgICAgICAgcmV0dXJuICItIiArIGxldHRlci50b0xv d2VyQ2FzZSgpOworICAgIH0pOworICAgIGlmIChjc3NBdHRyW2hhc10oY3Nz KSkgeworICAgICAgICByZXR1cm4gdGhpcy5ub2RlLm93bmVyRG9jdW1lbnQu ZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLm5vZGUsIG51bGwp LmdldFByb3BlcnR5VmFsdWUoY3NzKTsKKyAgICB9IGVsc2UgeworICAgICAg ICByZXR1cm4gJCh0aGlzLm5vZGUsIGF0dCk7CisgICAgfQorfSk7Cit2YXIg Y3NzQXR0ciA9IHsKKyAgICAiYWxpZ25tZW50LWJhc2VsaW5lIjogMCwKKyAg ICAiYmFzZWxpbmUtc2hpZnQiOiAwLAorICAgICJjbGlwIjogMCwKKyAgICAi Y2xpcC1wYXRoIjogMCwKKyAgICAiY2xpcC1ydWxlIjogMCwKKyAgICAiY29s b3IiOiAwLAorICAgICJjb2xvci1pbnRlcnBvbGF0aW9uIjogMCwKKyAgICAi Y29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIjogMCwKKyAgICAiY29sb3It cHJvZmlsZSI6IDAsCisgICAgImNvbG9yLXJlbmRlcmluZyI6IDAsCisgICAg ImN1cnNvciI6IDAsCisgICAgImRpcmVjdGlvbiI6IDAsCisgICAgImRpc3Bs YXkiOiAwLAorICAgICJkb21pbmFudC1iYXNlbGluZSI6IDAsCisgICAgImVu YWJsZS1iYWNrZ3JvdW5kIjogMCwKKyAgICAiZmlsbCI6IDAsCisgICAgImZp bGwtb3BhY2l0eSI6IDAsCisgICAgImZpbGwtcnVsZSI6IDAsCisgICAgImZp bHRlciI6IDAsCisgICAgImZsb29kLWNvbG9yIjogMCwKKyAgICAiZmxvb2Qt b3BhY2l0eSI6IDAsCisgICAgImZvbnQiOiAwLAorICAgICJmb250LWZhbWls eSI6IDAsCisgICAgImZvbnQtc2l6ZSI6IDAsCisgICAgImZvbnQtc2l6ZS1h ZGp1c3QiOiAwLAorICAgICJmb250LXN0cmV0Y2giOiAwLAorICAgICJmb250 LXN0eWxlIjogMCwKKyAgICAiZm9udC12YXJpYW50IjogMCwKKyAgICAiZm9u dC13ZWlnaHQiOiAwLAorICAgICJnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9u dGFsIjogMCwKKyAgICAiZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwiOiAw LAorICAgICJpbWFnZS1yZW5kZXJpbmciOiAwLAorICAgICJrZXJuaW5nIjog MCwKKyAgICAibGV0dGVyLXNwYWNpbmciOiAwLAorICAgICJsaWdodGluZy1j b2xvciI6IDAsCisgICAgIm1hcmtlciI6IDAsCisgICAgIm1hcmtlci1lbmQi OiAwLAorICAgICJtYXJrZXItbWlkIjogMCwKKyAgICAibWFya2VyLXN0YXJ0 IjogMCwKKyAgICAibWFzayI6IDAsCisgICAgIm9wYWNpdHkiOiAwLAorICAg ICJvdmVyZmxvdyI6IDAsCisgICAgInBvaW50ZXItZXZlbnRzIjogMCwKKyAg ICAic2hhcGUtcmVuZGVyaW5nIjogMCwKKyAgICAic3RvcC1jb2xvciI6IDAs CisgICAgInN0b3Atb3BhY2l0eSI6IDAsCisgICAgInN0cm9rZSI6IDAsCisg ICAgInN0cm9rZS1kYXNoYXJyYXkiOiAwLAorICAgICJzdHJva2UtZGFzaG9m ZnNldCI6IDAsCisgICAgInN0cm9rZS1saW5lY2FwIjogMCwKKyAgICAic3Ry b2tlLWxpbmVqb2luIjogMCwKKyAgICAic3Ryb2tlLW1pdGVybGltaXQiOiAw LAorICAgICJzdHJva2Utb3BhY2l0eSI6IDAsCisgICAgInN0cm9rZS13aWR0 aCI6IDAsCisgICAgInRleHQtYW5jaG9yIjogMCwKKyAgICAidGV4dC1kZWNv cmF0aW9uIjogMCwKKyAgICAidGV4dC1yZW5kZXJpbmciOiAwLAorICAgICJ1 bmljb2RlLWJpZGkiOiAwLAorICAgICJ2aXNpYmlsaXR5IjogMCwKKyAgICAi d29yZC1zcGFjaW5nIjogMCwKKyAgICAid3JpdGluZy1tb2RlIjogMAorfTsK KworZXZlLm9uKCJzbmFwLnV0aWwuYXR0ciIsIGZ1bmN0aW9uICh2YWx1ZSkg eworICAgIHZhciBhdHQgPSBldmUubnQoKSwKKyAgICAgICAgYXR0ciA9IHt9 OworICAgIGF0dCA9IGF0dC5zdWJzdHJpbmcoYXR0Lmxhc3RJbmRleE9mKCIu IikgKyAxKTsKKyAgICBhdHRyW2F0dF0gPSB2YWx1ZTsKKyAgICB2YXIgc3R5 bGUgPSBhdHQucmVwbGFjZSgvLShcdykvZ2ksIGZ1bmN0aW9uIChhbGwsIGxl dHRlcikgeworICAgICAgICAgICAgcmV0dXJuIGxldHRlci50b1VwcGVyQ2Fz ZSgpOworICAgICAgICB9KSwKKyAgICAgICAgY3NzID0gYXR0LnJlcGxhY2Uo L1tBLVpdL2csIGZ1bmN0aW9uIChsZXR0ZXIpIHsKKyAgICAgICAgICAgIHJl dHVybiAiLSIgKyBsZXR0ZXIudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgfSk7 CisgICAgaWYgKGNzc0F0dHJbaGFzXShjc3MpKSB7CisgICAgICAgIHRoaXMu bm9kZS5zdHlsZVtzdHlsZV0gPSB2YWx1ZSA9PSBudWxsID8gRSA6IHZhbHVl OworICAgIH0gZWxzZSB7CisgICAgICAgICQodGhpcy5ub2RlLCBhdHRyKTsK KyAgICB9Cit9KTsKKyhmdW5jdGlvbiAocHJvdG8pIHt9KFBhcGVyLnByb3Rv dHlwZSkpOworCisvLyBzaW1wbGUgYWpheAorLypcCisgKiBTbmFwLmFqYXgK KyBbIG1ldGhvZCBdCisgKioKKyAqIFNpbXBsZSBpbXBsZW1lbnRhdGlvbiBv ZiBBamF4CisgKioKKyAtIHVybCAoc3RyaW5nKSBVUkwKKyAtIHBvc3REYXRh IChvYmplY3R8c3RyaW5nKSBkYXRhIGZvciBwb3N0IHJlcXVlc3QKKyAtIGNh bGxiYWNrIChmdW5jdGlvbikgY2FsbGJhY2sKKyAtIHNjb3BlIChvYmplY3Qp ICNvcHRpb25hbCBzY29wZSBvZiBjYWxsYmFjaworICogb3IKKyAtIHVybCAo c3RyaW5nKSBVUkwKKyAtIGNhbGxiYWNrIChmdW5jdGlvbikgY2FsbGJhY2sK KyAtIHNjb3BlIChvYmplY3QpICNvcHRpb25hbCBzY29wZSBvZiBjYWxsYmFj aworID0gKFhNTEh0dHBSZXF1ZXN0KSB0aGUgWE1MSHR0cFJlcXVlc3Qgb2Jq ZWN0LCBqdXN0IGluIGNhc2UKK1wqLworU25hcC5hamF4ID0gZnVuY3Rpb24g KHVybCwgcG9zdERhdGEsIGNhbGxiYWNrLCBzY29wZSl7CisgICAgdmFyIHJl cSA9IG5ldyBYTUxIdHRwUmVxdWVzdCwKKyAgICAgICAgaWQgPSBJRCgpOwor ICAgIGlmIChyZXEpIHsKKyAgICAgICAgaWYgKGlzKHBvc3REYXRhLCAiZnVu Y3Rpb24iKSkgeworICAgICAgICAgICAgc2NvcGUgPSBjYWxsYmFjazsKKyAg ICAgICAgICAgIGNhbGxiYWNrID0gcG9zdERhdGE7CisgICAgICAgICAgICBw b3N0RGF0YSA9IG51bGw7CisgICAgICAgIH0gZWxzZSBpZiAoaXMocG9zdERh dGEsICJvYmplY3QiKSkgeworICAgICAgICAgICAgdmFyIHBkID0gW107Cisg ICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcG9zdERhdGEpIGlmIChwb3N0 RGF0YS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7CisgICAgICAgICAgICAgICAg cGQucHVzaChlbmNvZGVVUklDb21wb25lbnQoa2V5KSArICI9IiArIGVuY29k ZVVSSUNvbXBvbmVudChwb3N0RGF0YVtrZXldKSk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBwb3N0RGF0YSA9IHBkLmpvaW4oIiYiKTsKKyAgICAg ICAgfQorICAgICAgICByZXEub3BlbigocG9zdERhdGEgPyAiUE9TVCIgOiAi R0VUIiksIHVybCwgdHJ1ZSk7CisgICAgICAgIGlmIChwb3N0RGF0YSkgewor ICAgICAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoIlgtUmVxdWVzdGVk LVdpdGgiLCAiWE1MSHR0cFJlcXVlc3QiKTsKKyAgICAgICAgICAgIHJlcS5z ZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LXR5cGUiLCAiYXBwbGljYXRpb24v eC13d3ctZm9ybS11cmxlbmNvZGVkIik7CisgICAgICAgIH0KKyAgICAgICAg aWYgKGNhbGxiYWNrKSB7CisgICAgICAgICAgICBldmUub25jZSgic25hcC5h amF4LiIgKyBpZCArICIuMCIsIGNhbGxiYWNrKTsKKyAgICAgICAgICAgIGV2 ZS5vbmNlKCJzbmFwLmFqYXguIiArIGlkICsgIi4yMDAiLCBjYWxsYmFjayk7 CisgICAgICAgICAgICBldmUub25jZSgic25hcC5hamF4LiIgKyBpZCArICIu MzA0IiwgY2FsbGJhY2spOworICAgICAgICB9CisgICAgICAgIHJlcS5vbnJl YWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgICAgIGlm IChyZXEucmVhZHlTdGF0ZSAhPSA0KSByZXR1cm47CisgICAgICAgICAgICBl dmUoInNuYXAuYWpheC4iICsgaWQgKyAiLiIgKyByZXEuc3RhdHVzLCBzY29w ZSwgcmVxKTsKKyAgICAgICAgfTsKKyAgICAgICAgaWYgKHJlcS5yZWFkeVN0 YXRlID09IDQpIHsKKyAgICAgICAgICAgIHJldHVybiByZXE7CisgICAgICAg IH0KKyAgICAgICAgcmVxLnNlbmQocG9zdERhdGEpOworICAgICAgICByZXR1 cm4gcmVxOworICAgIH0KK307CisvKlwKKyAqIFNuYXAubG9hZAorIFsgbWV0 aG9kIF0KKyAqKgorICogTG9hZHMgZXh0ZXJuYWwgU1ZHIGZpbGUgYXMgYSBA RnJhZ21lbnQgKHNlZSBAU25hcC5hamF4IGZvciBtb3JlIGFkdmFuY2VkIEFK QVgpCisgKioKKyAtIHVybCAoc3RyaW5nKSBVUkwKKyAtIGNhbGxiYWNrIChm dW5jdGlvbikgY2FsbGJhY2sKKyAtIHNjb3BlIChvYmplY3QpICNvcHRpb25h bCBzY29wZSBvZiBjYWxsYmFjaworXCovCitTbmFwLmxvYWQgPSBmdW5jdGlv biAodXJsLCBjYWxsYmFjaywgc2NvcGUpIHsKKyAgICBTbmFwLmFqYXgodXJs LCBmdW5jdGlvbiAocmVxKSB7CisgICAgICAgIHZhciBmID0gU25hcC5wYXJz ZShyZXEucmVzcG9uc2VUZXh0KTsKKyAgICAgICAgc2NvcGUgPyBjYWxsYmFj ay5jYWxsKHNjb3BlLCBmKSA6IGNhbGxiYWNrKGYpOworICAgIH0pOworfTsK K3ZhciBnZXRPZmZzZXQgPSBmdW5jdGlvbiAoZWxlbSkgeworICAgIHZhciBi b3ggPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLAorICAgICAgICBk b2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsCisgICAgICAgIGJvZHkgPSBkb2Mu Ym9keSwKKyAgICAgICAgZG9jRWxlbSA9IGRvYy5kb2N1bWVudEVsZW1lbnQs CisgICAgICAgIGNsaWVudFRvcCA9IGRvY0VsZW0uY2xpZW50VG9wIHx8IGJv ZHkuY2xpZW50VG9wIHx8IDAsIGNsaWVudExlZnQgPSBkb2NFbGVtLmNsaWVu dExlZnQgfHwgYm9keS5jbGllbnRMZWZ0IHx8IDAsCisgICAgICAgIHRvcCAg PSBib3gudG9wICArIChnLndpbi5wYWdlWU9mZnNldCB8fCBkb2NFbGVtLnNj cm9sbFRvcCB8fCBib2R5LnNjcm9sbFRvcCApIC0gY2xpZW50VG9wLAorICAg ICAgICBsZWZ0ID0gYm94LmxlZnQgKyAoZy53aW4ucGFnZVhPZmZzZXQgfHwg ZG9jRWxlbS5zY3JvbGxMZWZ0IHx8IGJvZHkuc2Nyb2xsTGVmdCkgLSBjbGll bnRMZWZ0OworICAgIHJldHVybiB7CisgICAgICAgIHk6IHRvcCwKKyAgICAg ICAgeDogbGVmdAorICAgIH07Cit9OworLypcCisgKiBTbmFwLmdldEVsZW1l bnRCeVBvaW50CisgWyBtZXRob2QgXQorICoqCisgKiBSZXR1cm5zIHlvdSB0 b3Btb3N0IGVsZW1lbnQgdW5kZXIgZ2l2ZW4gcG9pbnQuCisgKioKKyA9IChv YmplY3QpIFNuYXAgZWxlbWVudCBvYmplY3QKKyAtIHggKG51bWJlcikgeCBj b29yZGluYXRlIGZyb20gdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgd2lu ZG93CisgLSB5IChudW1iZXIpIHkgY29vcmRpbmF0ZSBmcm9tIHRoZSB0b3Ag bGVmdCBjb3JuZXIgb2YgdGhlIHdpbmRvdworID4gVXNhZ2UKKyB8IFNuYXAu Z2V0RWxlbWVudEJ5UG9pbnQobW91c2VYLCBtb3VzZVkpLmF0dHIoe3N0cm9r ZTogIiNmMDAifSk7CitcKi8KK1NuYXAuZ2V0RWxlbWVudEJ5UG9pbnQgPSBm dW5jdGlvbiAoeCwgeSkgeworICAgIHZhciBwYXBlciA9IHRoaXMsCisgICAg ICAgIHN2ZyA9IHBhcGVyLmNhbnZhcywKKyAgICAgICAgdGFyZ2V0ID0gZ2xv Yi5kb2MuZWxlbWVudEZyb21Qb2ludCh4LCB5KTsKKyAgICBpZiAoZ2xvYi53 aW4ub3BlcmEgJiYgdGFyZ2V0LnRhZ05hbWUgPT0gInN2ZyIpIHsKKyAgICAg ICAgdmFyIHNvID0gZ2V0T2Zmc2V0KHRhcmdldCksCisgICAgICAgICAgICBz ciA9IHRhcmdldC5jcmVhdGVTVkdSZWN0KCk7CisgICAgICAgIHNyLnggPSB4 IC0gc28ueDsKKyAgICAgICAgc3IueSA9IHkgLSBzby55OworICAgICAgICBz ci53aWR0aCA9IHNyLmhlaWdodCA9IDE7CisgICAgICAgIHZhciBoaXRzID0g dGFyZ2V0LmdldEludGVyc2VjdGlvbkxpc3Qoc3IsIG51bGwpOworICAgICAg ICBpZiAoaGl0cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHRhcmdldCA9IGhp dHNbaGl0cy5sZW5ndGggLSAxXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBp ZiAoIXRhcmdldCkgeworICAgICAgICByZXR1cm4gbnVsbDsKKyAgICB9Cisg ICAgcmV0dXJuIHdyYXAodGFyZ2V0KTsKK307CisvKlwKKyAqIFNuYXAucGx1 Z2luCisgWyBtZXRob2QgXQorICoqCisgKiBMZXQgeW91IHdyaXRlIHBsdWdp bnMuIFlvdSBwYXNzIGluIGEgZnVuY3Rpb24gd2l0aCBmaXZlIGFyZ3VtZW50 cywgbGlrZSB0aGlzOgorIHwgU25hcC5wbHVnaW4oZnVuY3Rpb24gKFNuYXAs IEVsZW1lbnQsIFBhcGVyLCBnbG9iYWwsIEZyYWdtZW50KSB7CisgfCAgICAg U25hcC5uZXdtZXRob2QgPSBmdW5jdGlvbiAoKSB7fTsKKyB8ICAgICBFbGVt ZW50LnByb3RvdHlwZS5uZXdtZXRob2QgPSBmdW5jdGlvbiAoKSB7fTsKKyB8 ICAgICBQYXBlci5wcm90b3R5cGUubmV3bWV0aG9kID0gZnVuY3Rpb24gKCkg e307CisgfCB9KTsKKyAqIEluc2lkZSB0aGUgZnVuY3Rpb24geW91IGhhdmUg YWNjZXNzIHRvIGFsbCBtYWluIG9iamVjdHMgKGFuZCB0aGVpcgorICogcHJv dG90eXBlcykuIFRoaXMgYWxsb3cgeW91IHRvIGV4dGVuZCBhbnl0aGluZyB5 b3Ugd2FudC4KKyAqKgorIC0gZiAoZnVuY3Rpb24pIHlvdXIgcGx1Z2luIGJv ZHkKK1wqLworU25hcC5wbHVnaW4gPSBmdW5jdGlvbiAoZikgeworICAgIGYo U25hcCwgRWxlbWVudCwgUGFwZXIsIGdsb2IsIEZyYWdtZW50KTsKK307Citn bG9iLndpbi5TbmFwID0gU25hcDsKK3JldHVybiBTbmFwOworfSh3aW5kb3cg fHwgdGhpcykpOworCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgQWRvYmUgU3lz dGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLwor Ly8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9u IDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhp cyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2Uu CisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQK Ky8vCisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5T RS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBs YXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0 cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBh biAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENP TkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxp ZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5n dWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9u cyB1bmRlciB0aGUgTGljZW5zZS4KK1NuYXAucGx1Z2luKGZ1bmN0aW9uIChT bmFwLCBFbGVtZW50LCBQYXBlciwgZ2xvYiwgRnJhZ21lbnQpIHsKKyAgICB2 YXIgZWxwcm90byA9IEVsZW1lbnQucHJvdG90eXBlLAorICAgICAgICBpcyA9 IFNuYXAuaXMsCisgICAgICAgIFN0ciA9IFN0cmluZywKKyAgICAgICAgdW5p dDJweCA9IFNuYXAuX3VuaXQycHgsCisgICAgICAgICQgPSBTbmFwLl8uJCwK KyAgICAgICAgbWFrZSA9IFNuYXAuXy5tYWtlLAorICAgICAgICBnZXRTb21l RGVmcyA9IFNuYXAuXy5nZXRTb21lRGVmcywKKyAgICAgICAgaGFzID0gImhh c093blByb3BlcnR5IiwKKyAgICAgICAgd3JhcCA9IFNuYXAuXy53cmFwOwor ICAgIC8qXAorICAgICAqIEVsZW1lbnQuZ2V0QkJveAorICAgICBbIG1ldGhv ZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyB0aGUgYm91bmRpbmcgYm94 IGRlc2NyaXB0b3IgZm9yIHRoZSBnaXZlbiBlbGVtZW50CisgICAgICoqCisg ICAgID0gKG9iamVjdCkgYm91bmRpbmcgYm94IGRlc2NyaXB0b3I6CisgICAg IG8geworICAgICBvICAgICBjeDogKG51bWJlcikgeCBvZiB0aGUgY2VudGVy LAorICAgICBvICAgICBjeTogKG51bWJlcikgeCBvZiB0aGUgY2VudGVyLAor ICAgICBvICAgICBoOiAobnVtYmVyKSBoZWlnaHQsCisgICAgIG8gICAgIGhl aWdodDogKG51bWJlcikgaGVpZ2h0LAorICAgICBvICAgICBwYXRoOiAoc3Ry aW5nKSBwYXRoIGNvbW1hbmQgZm9yIHRoZSBib3gsCisgICAgIG8gICAgIHIw OiAobnVtYmVyKSByYWRpdXMgb2YgYSBjaXJjbGUgdGhhdCBmdWxseSBlbmNs b3NlcyB0aGUgYm94LAorICAgICBvICAgICByMTogKG51bWJlcikgcmFkaXVz IG9mIHRoZSBzbWFsbGVzdCBjaXJjbGUgdGhhdCBjYW4gYmUgZW5jbG9zZWQs CisgICAgIG8gICAgIHIyOiAobnVtYmVyKSByYWRpdXMgb2YgdGhlIGxhcmdl c3QgY2lyY2xlIHRoYXQgY2FuIGJlIGVuY2xvc2VkLAorICAgICBvICAgICB2 YjogKHN0cmluZykgYm94IGFzIGEgdmlld2JveCBjb21tYW5kLAorICAgICBv ICAgICB3OiAobnVtYmVyKSB3aWR0aCwKKyAgICAgbyAgICAgd2lkdGg6IChu dW1iZXIpIHdpZHRoLAorICAgICBvICAgICB4MjogKG51bWJlcikgeCBvZiB0 aGUgcmlnaHQgc2lkZSwKKyAgICAgbyAgICAgeDogKG51bWJlcikgeCBvZiB0 aGUgbGVmdCBzaWRlLAorICAgICBvICAgICB5MjogKG51bWJlcikgeSBvZiB0 aGUgYm90dG9tIGVkZ2UsCisgICAgIG8gICAgIHk6IChudW1iZXIpIHkgb2Yg dGhlIHRvcCBlZGdlCisgICAgIG8gfQorICAgIFwqLworICAgIGVscHJvdG8u Z2V0QkJveCA9IGZ1bmN0aW9uIChpc1dpdGhvdXRUcmFuc2Zvcm0pIHsKKyAg ICAgICAgaWYgKCFTbmFwLk1hdHJpeCB8fCAhU25hcC5wYXRoKSB7CisgICAg ICAgICAgICByZXR1cm4gdGhpcy5ub2RlLmdldEJCb3goKTsKKyAgICAgICAg fQorICAgICAgICB2YXIgZWwgPSB0aGlzLAorICAgICAgICAgICAgbSA9IG5l dyBTbmFwLk1hdHJpeDsKKyAgICAgICAgaWYgKGVsLnJlbW92ZWQpIHsKKyAg ICAgICAgICAgIHJldHVybiBTbmFwLl8uYm94KCk7CisgICAgICAgIH0KKyAg ICAgICAgd2hpbGUgKGVsLnR5cGUgPT0gInVzZSIpIHsKKyAgICAgICAgICAg IGlmICghaXNXaXRob3V0VHJhbnNmb3JtKSB7CisgICAgICAgICAgICAgICAg bSA9IG0uYWRkKGVsLnRyYW5zZm9ybSgpLmxvY2FsTWF0cml4LnRyYW5zbGF0 ZShlbC5hdHRyKCJ4IikgfHwgMCwgZWwuYXR0cigieSIpIHx8IDApKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChlbC5vcmlnaW5hbCkgewor ICAgICAgICAgICAgICAgIGVsID0gZWwub3JpZ2luYWw7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBocmVmID0gZWwuYXR0 cigieGxpbms6aHJlZiIpOworICAgICAgICAgICAgICAgIGVsID0gZWwub3Jp Z2luYWwgPSBlbC5ub2RlLm93bmVyRG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo aHJlZi5zdWJzdHJpbmcoaHJlZi5pbmRleE9mKCIjIikgKyAxKSk7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIF8gPSBlbC5fLAor ICAgICAgICAgICAgcGF0aGZpbmRlciA9IFNuYXAucGF0aC5nZXRbZWwudHlw ZV0gfHwgU25hcC5wYXRoLmdldC5kZWZsdDsKKyAgICAgICAgdHJ5IHsKKyAg ICAgICAgICAgIGlmIChpc1dpdGhvdXRUcmFuc2Zvcm0pIHsKKyAgICAgICAg ICAgICAgICBfLmJib3h3dCA9IHBhdGhmaW5kZXIgPyBTbmFwLnBhdGguZ2V0 QkJveChlbC5yZWFsUGF0aCA9IHBhdGhmaW5kZXIoZWwpKSA6IFNuYXAuXy5i b3goZWwubm9kZS5nZXRCQm94KCkpOworICAgICAgICAgICAgICAgIHJldHVy biBTbmFwLl8uYm94KF8uYmJveHd0KTsKKyAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgZWwucmVhbFBhdGggPSBwYXRoZmluZGVyKGVs KTsKKyAgICAgICAgICAgICAgICBlbC5tYXRyaXggPSBlbC50cmFuc2Zvcm0o KS5sb2NhbE1hdHJpeDsKKyAgICAgICAgICAgICAgICBfLmJib3ggPSBTbmFw LnBhdGguZ2V0QkJveChTbmFwLnBhdGgubWFwKGVsLnJlYWxQYXRoLCBtLmFk ZChlbC5tYXRyaXgpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNuYXAu Xy5ib3goXy5iYm94KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRj aCAoZSkgeworICAgICAgICAgICAgLy8gRmlyZWZveCBkb2VzbuKAmXQgZ2l2 ZSB5b3UgYmJveCBvZiBoaWRkZW4gZWxlbWVudAorICAgICAgICAgICAgcmV0 dXJuIFNuYXAuXy5ib3goKTsKKyAgICAgICAgfQorICAgIH07CisgICAgdmFy IHByb3BTdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0 aGlzLnN0cmluZzsKKyAgICB9OworICAgIGZ1bmN0aW9uIGV4dHJhY3RUcmFu c2Zvcm0oZWwsIHRzdHIpIHsKKyAgICAgICAgaWYgKHRzdHIgPT0gbnVsbCkg eworICAgICAgICAgICAgdmFyIGRvUmV0dXJuID0gdHJ1ZTsKKyAgICAgICAg ICAgIGlmIChlbC50eXBlID09ICJsaW5lYXJHcmFkaWVudCIgfHwgZWwudHlw ZSA9PSAicmFkaWFsR3JhZGllbnQiKSB7CisgICAgICAgICAgICAgICAgdHN0 ciA9IGVsLm5vZGUuZ2V0QXR0cmlidXRlKCJncmFkaWVudFRyYW5zZm9ybSIp OworICAgICAgICAgICAgfSBlbHNlIGlmIChlbC50eXBlID09ICJwYXR0ZXJu IikgeworICAgICAgICAgICAgICAgIHRzdHIgPSBlbC5ub2RlLmdldEF0dHJp YnV0ZSgicGF0dGVyblRyYW5zZm9ybSIpOworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICB0c3RyID0gZWwubm9kZS5nZXRBdHRyaWJ1 dGUoInRyYW5zZm9ybSIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKCF0c3RyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTbmFw Lk1hdHJpeDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRzdHIgPSBT bmFwLl8uc3ZnVHJhbnNmb3JtMnN0cmluZyh0c3RyKTsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIGlmICghU25hcC5fLnJnVHJhbnNmb3JtLnRl c3QodHN0cikpIHsKKyAgICAgICAgICAgICAgICB0c3RyID0gU25hcC5fLnN2 Z1RyYW5zZm9ybTJzdHJpbmcodHN0cik7CisgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgIHRzdHIgPSBTdHIodHN0cikucmVwbGFjZSgv XC57M318XHUyMDI2L2csIGVsLl8udHJhbnNmb3JtIHx8ICIiKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpcyh0c3RyLCAiYXJyYXkiKSkg eworICAgICAgICAgICAgICAgIHRzdHIgPSBTbmFwLnBhdGggPyBTbmFwLnBh dGgudG9TdHJpbmcuY2FsbCh0c3RyKSA6IFN0cih0c3RyKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGVsLl8udHJhbnNmb3JtID0gdHN0cjsKKyAg ICAgICAgfQorICAgICAgICB2YXIgbSA9IFNuYXAuXy50cmFuc2Zvcm0ybWF0 cml4KHRzdHIsIGVsLmdldEJCb3goMSkpOworICAgICAgICBpZiAoZG9SZXR1 cm4pIHsKKyAgICAgICAgICAgIHJldHVybiBtOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgZWwubWF0cml4ID0gbTsKKyAgICAgICAgfQorICAg IH0KKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnRyYW5zZm9ybQorICAgICBb IG1ldGhvZCBdCisgICAgICoqCisgICAgICogR2V0cyBvciBzZXRzIHRyYW5z Zm9ybWF0aW9uIG9mIHRoZSBlbGVtZW50CisgICAgICoqCisgICAgIC0gdHN0 ciAoc3RyaW5nKSB0cmFuc2Zvcm0gc3RyaW5nIGluIFNuYXAgb3IgU1ZHIGZv cm1hdAorICAgICA9IChFbGVtZW50KSB0aGUgY3VycmVudCBlbGVtZW50Cisg ICAgICogb3IKKyAgICAgPSAob2JqZWN0KSB0cmFuc2Zvcm1hdGlvbiBkZXNj cmlwdG9yOgorICAgICBvIHsKKyAgICAgbyAgICAgc3RyaW5nIChzdHJpbmcp IHRyYW5zZm9ybSBzdHJpbmcsCisgICAgIG8gICAgIGdsb2JhbE1hdHJpeCAo TWF0cml4KSBtYXRyaXggb2YgYWxsIHRyYW5zZm9ybWF0aW9ucyBhcHBsaWVk IHRvIGVsZW1lbnQgb3IgaXRzIHBhcmVudHMsCisgICAgIG8gICAgIGxvY2Fs TWF0cml4IChNYXRyaXgpIG1hdHJpeCBvZiB0cmFuc2Zvcm1hdGlvbnMgYXBw bGllZCBvbmx5IHRvIHRoZSBlbGVtZW50LAorICAgICBvICAgICBkaWZmTWF0 cml4IChNYXRyaXgpIG1hdHJpeCBvZiBkaWZmZXJlbmNlIGJldHdlZW4gZ2xv YmFsIGFuZCBsb2NhbCB0cmFuc2Zvcm1hdGlvbnMsCisgICAgIG8gICAgIGds b2JhbCAoc3RyaW5nKSBnbG9iYWwgdHJhbnNmb3JtYXRpb24gYXMgc3RyaW5n LAorICAgICBvICAgICBsb2NhbCAoc3RyaW5nKSBsb2NhbCB0cmFuc2Zvcm1h dGlvbiBhcyBzdHJpbmcsCisgICAgIG8gICAgIHRvU3RyaW5nIChmdW5jdGlv bikgcmV0dXJucyBgc3RyaW5nYCBwcm9wZXJ0eQorICAgICBvIH0KKyAgICBc Ki8KKyAgICBlbHByb3RvLnRyYW5zZm9ybSA9IGZ1bmN0aW9uICh0c3RyKSB7 CisgICAgICAgIHZhciBfID0gdGhpcy5fOworICAgICAgICBpZiAodHN0ciA9 PSBudWxsKSB7CisgICAgICAgICAgICB2YXIgcGFwYSA9IHRoaXMsCisgICAg ICAgICAgICAgICAgZ2xvYmFsID0gbmV3IFNuYXAuTWF0cml4KHRoaXMubm9k ZS5nZXRDVE0oKSksCisgICAgICAgICAgICAgICAgbG9jYWwgPSBleHRyYWN0 VHJhbnNmb3JtKHRoaXMpLAorICAgICAgICAgICAgICAgIG1zID0gW2xvY2Fs XSwKKyAgICAgICAgICAgICAgICBtID0gbmV3IFNuYXAuTWF0cml4LAorICAg ICAgICAgICAgICAgIGksCisgICAgICAgICAgICAgICAgbG9jYWxTdHJpbmcg PSBsb2NhbC50b1RyYW5zZm9ybVN0cmluZygpLAorICAgICAgICAgICAgICAg IHN0cmluZyA9IFN0cihsb2NhbCkgPT0gU3RyKHRoaXMubWF0cml4KSA/Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyKF8udHJhbnNmb3JtKSA6 IGxvY2FsU3RyaW5nOworICAgICAgICAgICAgd2hpbGUgKHBhcGEudHlwZSAh PSAic3ZnIiAmJiAocGFwYSA9IHBhcGEucGFyZW50KCkpKSB7CisgICAgICAg ICAgICAgICAgbXMucHVzaChleHRyYWN0VHJhbnNmb3JtKHBhcGEpKTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGkgPSBtcy5sZW5ndGg7CisgICAg ICAgICAgICB3aGlsZSAoaS0tKSB7CisgICAgICAgICAgICAgICAgbS5hZGQo bXNbaV0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHsK KyAgICAgICAgICAgICAgICBzdHJpbmc6IHN0cmluZywKKyAgICAgICAgICAg ICAgICBnbG9iYWxNYXRyaXg6IGdsb2JhbCwKKyAgICAgICAgICAgICAgICB0 b3RhbE1hdHJpeDogbSwKKyAgICAgICAgICAgICAgICBsb2NhbE1hdHJpeDog bG9jYWwsCisgICAgICAgICAgICAgICAgZGlmZk1hdHJpeDogZ2xvYmFsLmNs b25lKCkuYWRkKGxvY2FsLmludmVydCgpKSwKKyAgICAgICAgICAgICAgICBn bG9iYWw6IGdsb2JhbC50b1RyYW5zZm9ybVN0cmluZygpLAorICAgICAgICAg ICAgICAgIHRvdGFsOiBtLnRvVHJhbnNmb3JtU3RyaW5nKCksCisgICAgICAg ICAgICAgICAgbG9jYWw6IGxvY2FsU3RyaW5nLAorICAgICAgICAgICAgICAg IHRvU3RyaW5nOiBwcm9wU3RyaW5nCisgICAgICAgICAgICB9OworICAgICAg ICB9CisgICAgICAgIGlmICh0c3RyIGluc3RhbmNlb2YgU25hcC5NYXRyaXgp IHsKKyAgICAgICAgICAgIHRoaXMubWF0cml4ID0gdHN0cjsKKyAgICAgICAg ICAgIHRoaXMuXy50cmFuc2Zvcm0gPSB0c3RyLnRvVHJhbnNmb3JtU3RyaW5n KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBleHRyYWN0VHJh bnNmb3JtKHRoaXMsIHRzdHIpOworICAgICAgICB9CisKKyAgICAgICAgaWYg KHRoaXMubm9kZSkgeworICAgICAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAi bGluZWFyR3JhZGllbnQiIHx8IHRoaXMudHlwZSA9PSAicmFkaWFsR3JhZGll bnQiKSB7CisgICAgICAgICAgICAgICAgJCh0aGlzLm5vZGUsIHtncmFkaWVu dFRyYW5zZm9ybTogdGhpcy5tYXRyaXh9KTsKKyAgICAgICAgICAgIH0gZWxz ZSBpZiAodGhpcy50eXBlID09ICJwYXR0ZXJuIikgeworICAgICAgICAgICAg ICAgICQodGhpcy5ub2RlLCB7cGF0dGVyblRyYW5zZm9ybTogdGhpcy5tYXRy aXh9KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg JCh0aGlzLm5vZGUsIHt0cmFuc2Zvcm06IHRoaXMubWF0cml4fSk7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gdGhpczsK KyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQucGFyZW50CisgICAg IFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIHRoZSBlbGVt ZW50J3MgcGFyZW50CisgICAgICoqCisgICAgID0gKEVsZW1lbnQpIHRoZSBw YXJlbnQgZWxlbWVudAorICAgIFwqLworICAgIGVscHJvdG8ucGFyZW50ID0g ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gd3JhcCh0aGlzLm5vZGUu cGFyZW50Tm9kZSk7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50 LmFwcGVuZAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQXBw ZW5kcyB0aGUgZ2l2ZW4gZWxlbWVudCB0byBjdXJyZW50IG9uZQorICAgICAq KgorICAgICAtIGVsIChFbGVtZW50fFNldCkgZWxlbWVudCB0byBhcHBlbmQK KyAgICAgPSAoRWxlbWVudCkgdGhlIHBhcmVudCBlbGVtZW50CisgICAgXCov CisgICAgLypcCisgICAgICogRWxlbWVudC5hZGQKKyAgICAgWyBtZXRob2Qg XQorICAgICAqKgorICAgICAqIFNlZSBARWxlbWVudC5hcHBlbmQKKyAgICBc Ki8KKyAgICBlbHByb3RvLmFwcGVuZCA9IGVscHJvdG8uYWRkID0gZnVuY3Rp b24gKGVsKSB7CisgICAgICAgIGlmIChlbCkgeworICAgICAgICAgICAgaWYg KGVsLnR5cGUgPT0gInNldCIpIHsKKyAgICAgICAgICAgICAgICB2YXIgaXQg PSB0aGlzOworICAgICAgICAgICAgICAgIGVsLmZvckVhY2goZnVuY3Rpb24g KGVsKSB7CisgICAgICAgICAgICAgICAgICAgIGl0LmFkZChlbCk7CisgICAg ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbCA9IHdyYXAoZWwpOwor ICAgICAgICAgICAgdGhpcy5ub2RlLmFwcGVuZENoaWxkKGVsLm5vZGUpOwor ICAgICAgICAgICAgZWwucGFwZXIgPSB0aGlzLnBhcGVyOworICAgICAgICB9 CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLypcCisgICAg ICogRWxlbWVudC5hcHBlbmRUbworICAgICBbIG1ldGhvZCBdCisgICAgICoq CisgICAgICogQXBwZW5kcyB0aGUgY3VycmVudCBlbGVtZW50IHRvIHRoZSBn aXZlbiBvbmUKKyAgICAgKioKKyAgICAgLSBlbCAoRWxlbWVudCkgcGFyZW50 IGVsZW1lbnQgdG8gYXBwZW5kIHRvCisgICAgID0gKEVsZW1lbnQpIHRoZSBj aGlsZCBlbGVtZW50CisgICAgXCovCisgICAgZWxwcm90by5hcHBlbmRUbyA9 IGZ1bmN0aW9uIChlbCkgeworICAgICAgICBpZiAoZWwpIHsKKyAgICAgICAg ICAgIGVsID0gd3JhcChlbCk7CisgICAgICAgICAgICBlbC5hcHBlbmQodGhp cyk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK KyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnByZXBlbmQKKyAgICAgWyBtZXRo b2QgXQorICAgICAqKgorICAgICAqIFByZXBlbmRzIHRoZSBnaXZlbiBlbGVt ZW50IHRvIHRoZSBjdXJyZW50IG9uZQorICAgICAqKgorICAgICAtIGVsIChF bGVtZW50KSBlbGVtZW50IHRvIHByZXBlbmQKKyAgICAgPSAoRWxlbWVudCkg dGhlIHBhcmVudCBlbGVtZW50CisgICAgXCovCisgICAgZWxwcm90by5wcmVw ZW5kID0gZnVuY3Rpb24gKGVsKSB7CisgICAgICAgIGlmIChlbCkgeworICAg ICAgICAgICAgaWYgKGVsLnR5cGUgPT0gInNldCIpIHsKKyAgICAgICAgICAg ICAgICB2YXIgaXQgPSB0aGlzLAorICAgICAgICAgICAgICAgICAgICBmaXJz dDsKKyAgICAgICAgICAgICAgICBlbC5mb3JFYWNoKGZ1bmN0aW9uIChlbCkg eworICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3QpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGZpcnN0LmFmdGVyKGVsKTsKKyAgICAgICAgICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGl0 LnByZXBlbmQoZWwpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgIGZpcnN0ID0gZWw7CisgICAgICAgICAgICAgICAgfSk7 CisgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBlbCA9IHdyYXAoZWwpOworICAgICAgICAgICAgdmFy IHBhcmVudCA9IGVsLnBhcmVudCgpOworICAgICAgICAgICAgdGhpcy5ub2Rl Lmluc2VydEJlZm9yZShlbC5ub2RlLCB0aGlzLm5vZGUuZmlyc3RDaGlsZCk7 CisgICAgICAgICAgICB0aGlzLmFkZCAmJiB0aGlzLmFkZCgpOworICAgICAg ICAgICAgZWwucGFwZXIgPSB0aGlzLnBhcGVyOworICAgICAgICAgICAgdGhp cy5wYXJlbnQoKSAmJiB0aGlzLnBhcmVudCgpLmFkZCgpOworICAgICAgICAg ICAgcGFyZW50ICYmIHBhcmVudC5hZGQoKTsKKyAgICAgICAgfQorICAgICAg ICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1l bnQucHJlcGVuZFRvCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBQcmVwZW5kcyB0aGUgY3VycmVudCBlbGVtZW50IHRvIHRoZSBnaXZlbiBv bmUKKyAgICAgKioKKyAgICAgLSBlbCAoRWxlbWVudCkgcGFyZW50IGVsZW1l bnQgdG8gcHJlcGVuZCB0bworICAgICA9IChFbGVtZW50KSB0aGUgY2hpbGQg ZWxlbWVudAorICAgIFwqLworICAgIGVscHJvdG8ucHJlcGVuZFRvID0gZnVu Y3Rpb24gKGVsKSB7CisgICAgICAgIGVsID0gd3JhcChlbCk7CisgICAgICAg IGVsLnByZXBlbmQodGhpcyk7CisgICAgICAgIHJldHVybiB0aGlzOworICAg IH07CisgICAgLypcCisgICAgICogRWxlbWVudC5iZWZvcmUKKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIEluc2VydHMgZ2l2ZW4gZWxlbWVu dCBiZWZvcmUgdGhlIGN1cnJlbnQgb25lCisgICAgICoqCisgICAgIC0gZWwg KEVsZW1lbnQpIGVsZW1lbnQgdG8gaW5zZXJ0CisgICAgID0gKEVsZW1lbnQp IHRoZSBwYXJlbnQgZWxlbWVudAorICAgIFwqLworICAgIGVscHJvdG8uYmVm b3JlID0gZnVuY3Rpb24gKGVsKSB7CisgICAgICAgIGlmIChlbC50eXBlID09 ICJzZXQiKSB7CisgICAgICAgICAgICB2YXIgaXQgPSB0aGlzOworICAgICAg ICAgICAgZWwuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAg ICAgICB2YXIgcGFyZW50ID0gZWwucGFyZW50KCk7CisgICAgICAgICAgICAg ICAgaXQubm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlbC5ub2RlLCBp dC5ub2RlKTsKKyAgICAgICAgICAgICAgICBwYXJlbnQgJiYgcGFyZW50LmFk ZCgpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB0aGlzLnBhcmVu dCgpLmFkZCgpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAg IH0KKyAgICAgICAgZWwgPSB3cmFwKGVsKTsKKyAgICAgICAgdmFyIHBhcmVu dCA9IGVsLnBhcmVudCgpOworICAgICAgICB0aGlzLm5vZGUucGFyZW50Tm9k ZS5pbnNlcnRCZWZvcmUoZWwubm9kZSwgdGhpcy5ub2RlKTsKKyAgICAgICAg dGhpcy5wYXJlbnQoKSAmJiB0aGlzLnBhcmVudCgpLmFkZCgpOworICAgICAg ICBwYXJlbnQgJiYgcGFyZW50LmFkZCgpOworICAgICAgICBlbC5wYXBlciA9 IHRoaXMucGFwZXI7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH07Cisg ICAgLypcCisgICAgICogRWxlbWVudC5hZnRlcgorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogSW5zZXJ0cyBnaXZlbiBlbGVtZW50IGFmdGVy IHRoZSBjdXJyZW50IG9uZQorICAgICAqKgorICAgICAtIGVsIChFbGVtZW50 KSBlbGVtZW50IHRvIGluc2VydAorICAgICA9IChFbGVtZW50KSB0aGUgcGFy ZW50IGVsZW1lbnQKKyAgICBcKi8KKyAgICBlbHByb3RvLmFmdGVyID0gZnVu Y3Rpb24gKGVsKSB7CisgICAgICAgIGVsID0gd3JhcChlbCk7CisgICAgICAg IHZhciBwYXJlbnQgPSBlbC5wYXJlbnQoKTsKKyAgICAgICAgaWYgKHRoaXMu bm9kZS5uZXh0U2libGluZykgeworICAgICAgICAgICAgdGhpcy5ub2RlLnBh cmVudE5vZGUuaW5zZXJ0QmVmb3JlKGVsLm5vZGUsIHRoaXMubm9kZS5uZXh0 U2libGluZyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlz Lm5vZGUucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChlbC5ub2RlKTsKKyAgICAg ICAgfQorICAgICAgICB0aGlzLnBhcmVudCgpICYmIHRoaXMucGFyZW50KCku YWRkKCk7CisgICAgICAgIHBhcmVudCAmJiBwYXJlbnQuYWRkKCk7CisgICAg ICAgIGVsLnBhcGVyID0gdGhpcy5wYXBlcjsKKyAgICAgICAgcmV0dXJuIHRo aXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50Lmluc2VydEJl Zm9yZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogSW5zZXJ0 cyB0aGUgZWxlbWVudCBhZnRlciB0aGUgZ2l2ZW4gb25lCisgICAgICoqCisg ICAgIC0gZWwgKEVsZW1lbnQpIGVsZW1lbnQgbmV4dCB0byB3aG9tIGluc2Vy dCB0bworICAgICA9IChFbGVtZW50KSB0aGUgcGFyZW50IGVsZW1lbnQKKyAg ICBcKi8KKyAgICBlbHByb3RvLmluc2VydEJlZm9yZSA9IGZ1bmN0aW9uIChl bCkgeworICAgICAgICBlbCA9IHdyYXAoZWwpOworICAgICAgICB2YXIgcGFy ZW50ID0gdGhpcy5wYXJlbnQoKTsKKyAgICAgICAgZWwubm9kZS5wYXJlbnRO b2RlLmluc2VydEJlZm9yZSh0aGlzLm5vZGUsIGVsLm5vZGUpOworICAgICAg ICB0aGlzLnBhcGVyID0gZWwucGFwZXI7CisgICAgICAgIHBhcmVudCAmJiBw YXJlbnQuYWRkKCk7CisgICAgICAgIGVsLnBhcmVudCgpICYmIGVsLnBhcmVu dCgpLmFkZCgpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAg IC8qXAorICAgICAqIEVsZW1lbnQuaW5zZXJ0QWZ0ZXIKKyAgICAgWyBtZXRo b2QgXQorICAgICAqKgorICAgICAqIEluc2VydHMgdGhlIGVsZW1lbnQgYWZ0 ZXIgdGhlIGdpdmVuIG9uZQorICAgICAqKgorICAgICAtIGVsIChFbGVtZW50 KSBlbGVtZW50IG5leHQgdG8gd2hvbSBpbnNlcnQgdG8KKyAgICAgPSAoRWxl bWVudCkgdGhlIHBhcmVudCBlbGVtZW50CisgICAgXCovCisgICAgZWxwcm90 by5pbnNlcnRBZnRlciA9IGZ1bmN0aW9uIChlbCkgeworICAgICAgICBlbCA9 IHdyYXAoZWwpOworICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQo KTsKKyAgICAgICAgZWwubm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0 aGlzLm5vZGUsIGVsLm5vZGUubmV4dFNpYmxpbmcpOworICAgICAgICB0aGlz LnBhcGVyID0gZWwucGFwZXI7CisgICAgICAgIHBhcmVudCAmJiBwYXJlbnQu YWRkKCk7CisgICAgICAgIGVsLnBhcmVudCgpICYmIGVsLnBhcmVudCgpLmFk ZCgpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qXAor ICAgICAqIEVsZW1lbnQucmVtb3ZlCisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBSZW1vdmVzIGVsZW1lbnQgZnJvbSB0aGUgRE9NCisgICAg ID0gKEVsZW1lbnQpIHRoZSBkZXRhY2hlZCBlbGVtZW50CisgICAgXCovCisg ICAgZWxwcm90by5yZW1vdmUgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHZh ciBwYXJlbnQgPSB0aGlzLnBhcmVudCgpOworICAgICAgICB0aGlzLm5vZGUu cGFyZW50Tm9kZSAmJiB0aGlzLm5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGls ZCh0aGlzLm5vZGUpOworICAgICAgICBkZWxldGUgdGhpcy5wYXBlcjsKKyAg ICAgICAgdGhpcy5yZW1vdmVkID0gdHJ1ZTsKKyAgICAgICAgcGFyZW50ICYm IHBhcmVudC5hZGQoKTsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsK KyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnNlbGVjdAorICAgICBbIG1ldGhv ZCBdCisgICAgICoqCisgICAgICogR2F0aGVycyB0aGUgbmVzdGVkIEBFbGVt ZW50IG1hdGNoaW5nIHRoZSBnaXZlbiBzZXQgb2YgQ1NTIHNlbGVjdG9ycwor ICAgICAqKgorICAgICAtIHF1ZXJ5IChzdHJpbmcpIENTUyBzZWxlY3Rvcgor ICAgICA9IChFbGVtZW50KSByZXN1bHQgb2YgcXVlcnkgc2VsZWN0aW9uCisg ICAgXCovCisgICAgZWxwcm90by5zZWxlY3QgPSBmdW5jdGlvbiAocXVlcnkp IHsKKyAgICAgICAgcmV0dXJuIHdyYXAodGhpcy5ub2RlLnF1ZXJ5U2VsZWN0 b3IocXVlcnkpKTsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQu c2VsZWN0QWxsCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBH YXRoZXJzIG5lc3RlZCBARWxlbWVudCBvYmplY3RzIG1hdGNoaW5nIHRoZSBn aXZlbiBzZXQgb2YgQ1NTIHNlbGVjdG9ycworICAgICAqKgorICAgICAtIHF1 ZXJ5IChzdHJpbmcpIENTUyBzZWxlY3RvcgorICAgICA9IChTZXR8YXJyYXkp IHJlc3VsdCBvZiBxdWVyeSBzZWxlY3Rpb24KKyAgICBcKi8KKyAgICBlbHBy b3RvLnNlbGVjdEFsbCA9IGZ1bmN0aW9uIChxdWVyeSkgeworICAgICAgICB2 YXIgbm9kZWxpc3QgPSB0aGlzLm5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVy eSksCisgICAgICAgICAgICBzZXQgPSAoU25hcC5zZXQgfHwgQXJyYXkpKCk7 CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZWxpc3QubGVuZ3Ro OyBpKyspIHsKKyAgICAgICAgICAgIHNldC5wdXNoKHdyYXAobm9kZWxpc3Rb aV0pKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2V0OworICAgIH07 CisgICAgLypcCisgICAgICogRWxlbWVudC5hc1BYCisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIGdpdmVuIGF0dHJpYnV0ZSBv ZiB0aGUgZWxlbWVudCBhcyBhIGBweGAgdmFsdWUgKG5vdCAlLCBlbSwgZXRj LikKKyAgICAgKioKKyAgICAgLSBhdHRyIChzdHJpbmcpIGF0dHJpYnV0ZSBu YW1lCisgICAgIC0gdmFsdWUgKHN0cmluZykgI29wdGlvbmFsIGF0dHJpYnV0 ZSB2YWx1ZQorICAgICA9IChFbGVtZW50KSByZXN1bHQgb2YgcXVlcnkgc2Vs ZWN0aW9uCisgICAgXCovCisgICAgZWxwcm90by5hc1BYID0gZnVuY3Rpb24g KGF0dHIsIHZhbHVlKSB7CisgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7 CisgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuYXR0cihhdHRyKTsKKyAgICAg ICAgfQorICAgICAgICByZXR1cm4gK3VuaXQycHgodGhpcywgYXR0ciwgdmFs dWUpOworICAgIH07CisgICAgLy8gU0lFUlJBIEVsZW1lbnQudXNlKCk6IEkg c3VnZ2VzdCBhZGRpbmcgYSBub3RlIGFib3V0IGhvdyB0byBhY2Nlc3MgdGhl IG9yaWdpbmFsIGVsZW1lbnQgdGhlIHJldHVybmVkIDx1c2U+IGluc3RhbnRp YXRlcy4gSXQncyBhIHBhcnQgb2YgU1ZHIHdpdGggd2hpY2ggb3JkaW5hcnkg d2ViIGRldmVsb3BlcnMgbWF5IGJlIGxlYXN0IGZhbWlsaWFyLgorICAgIC8q XAorICAgICAqIEVsZW1lbnQudXNlCisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBDcmVhdGVzIGEgYDx1c2U+YCBlbGVtZW50IGxpbmtlZCB0 byB0aGUgY3VycmVudCBlbGVtZW50CisgICAgICoqCisgICAgID0gKEVsZW1l bnQpIHRoZSBgPHVzZT5gIGVsZW1lbnQKKyAgICBcKi8KKyAgICBlbHByb3Rv LnVzZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIHVzZSwKKyAgICAg ICAgICAgIGlkID0gdGhpcy5ub2RlLmlkOworICAgICAgICBpZiAoIWlkKSB7 CisgICAgICAgICAgICBpZCA9IHRoaXMuaWQ7CisgICAgICAgICAgICAkKHRo aXMubm9kZSwgeworICAgICAgICAgICAgICAgIGlkOiBpZAorICAgICAgICAg ICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRoaXMudHlwZSA9PSAi bGluZWFyR3JhZGllbnQiIHx8IHRoaXMudHlwZSA9PSAicmFkaWFsR3JhZGll bnQiIHx8CisgICAgICAgICAgICB0aGlzLnR5cGUgPT0gInBhdHRlcm4iKSB7 CisgICAgICAgICAgICB1c2UgPSBtYWtlKHRoaXMudHlwZSwgdGhpcy5ub2Rl LnBhcmVudE5vZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg dXNlID0gbWFrZSgidXNlIiwgdGhpcy5ub2RlLnBhcmVudE5vZGUpOworICAg ICAgICB9CisgICAgICAgICQodXNlLm5vZGUsIHsKKyAgICAgICAgICAgICJ4 bGluazpocmVmIjogIiMiICsgaWQKKyAgICAgICAgfSk7CisgICAgICAgIHVz ZS5vcmlnaW5hbCA9IHRoaXM7CisgICAgICAgIHJldHVybiB1c2U7CisgICAg fTsKKyAgICBmdW5jdGlvbiBmaXhpZHMoZWwpIHsKKyAgICAgICAgdmFyIGVs cyA9IGVsLnNlbGVjdEFsbCgiKiIpLAorICAgICAgICAgICAgaXQsCisgICAg ICAgICAgICB1cmwgPSAvXlxzKnVybFwoKCJ8J3wpKC4qKVwxXClccyokLywK KyAgICAgICAgICAgIGlkcyA9IFtdLAorICAgICAgICAgICAgdXNlcyA9IHt9 OworICAgICAgICBmdW5jdGlvbiB1cmx0ZXN0KGl0LCBuYW1lKSB7CisgICAg ICAgICAgICB2YXIgdmFsID0gJChpdC5ub2RlLCBuYW1lKTsKKyAgICAgICAg ICAgIHZhbCA9IHZhbCAmJiB2YWwubWF0Y2godXJsKTsKKyAgICAgICAgICAg IHZhbCA9IHZhbCAmJiB2YWxbMl07CisgICAgICAgICAgICBpZiAodmFsICYm IHZhbC5jaGFyQXQoKSA9PSAiIyIpIHsKKyAgICAgICAgICAgICAgICB2YWwg PSB2YWwuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBpZiAodmFsKSB7CisgICAgICAgICAgICAgICAgdXNlc1t2YWxdID0g KHVzZXNbdmFsXSB8fCBbXSkuY29uY2F0KGZ1bmN0aW9uIChpZCkgeworICAg ICAgICAgICAgICAgICAgICB2YXIgYXR0ciA9IHt9OworICAgICAgICAgICAg ICAgICAgICBhdHRyW25hbWVdID0gVVJMKGlkKTsKKyAgICAgICAgICAgICAg ICAgICAgJChpdC5ub2RlLCBhdHRyKTsKKyAgICAgICAgICAgICAgICB9KTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBs aW5rdGVzdChpdCkgeworICAgICAgICAgICAgdmFyIHZhbCA9ICQoaXQubm9k ZSwgInhsaW5rOmhyZWYiKTsKKyAgICAgICAgICAgIGlmICh2YWwgJiYgdmFs LmNoYXJBdCgpID09ICIjIikgeworICAgICAgICAgICAgICAgIHZhbCA9IHZh bC5zdWJzdHJpbmcoMSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IGlmICh2YWwpIHsKKyAgICAgICAgICAgICAgICB1c2VzW3ZhbF0gPSAodXNl c1t2YWxdIHx8IFtdKS5jb25jYXQoZnVuY3Rpb24gKGlkKSB7CisgICAgICAg ICAgICAgICAgICAgIGl0LmF0dHIoInhsaW5rOmhyZWYiLCAiIyIgKyBpZCk7 CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZWxzLmxlbmd0aDsg aSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIGl0ID0gZWxzW2ldOworICAg ICAgICAgICAgdXJsdGVzdChpdCwgImZpbGwiKTsKKyAgICAgICAgICAgIHVy bHRlc3QoaXQsICJzdHJva2UiKTsKKyAgICAgICAgICAgIHVybHRlc3QoaXQs ICJmaWx0ZXIiKTsKKyAgICAgICAgICAgIHVybHRlc3QoaXQsICJtYXNrIik7 CisgICAgICAgICAgICB1cmx0ZXN0KGl0LCAiY2xpcC1wYXRoIik7CisgICAg ICAgICAgICBsaW5rdGVzdChpdCk7CisgICAgICAgICAgICB2YXIgb2xkaWQg PSAkKGl0Lm5vZGUsICJpZCIpOworICAgICAgICAgICAgaWYgKG9sZGlkKSB7 CisgICAgICAgICAgICAgICAgJChpdC5ub2RlLCB7aWQ6IGl0LmlkfSk7Cisg ICAgICAgICAgICAgICAgaWRzLnB1c2goeworICAgICAgICAgICAgICAgICAg ICBvbGQ6IG9sZGlkLAorICAgICAgICAgICAgICAgICAgICBpZDogaXQuaWQK KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICBmb3IgKGkgPSAwLCBpaSA9IGlkcy5sZW5ndGg7IGkgPCBp aTsgaSsrKSB7CisgICAgICAgICAgICB2YXIgZnMgPSB1c2VzW2lkc1tpXS5v bGRdOworICAgICAgICAgICAgaWYgKGZzKSB7CisgICAgICAgICAgICAgICAg Zm9yICh2YXIgaiA9IDAsIGpqID0gZnMubGVuZ3RoOyBqIDwgamo7IGorKykg eworICAgICAgICAgICAgICAgICAgICBmc1tqXShpZHNbaV0uaWQpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg IH0KKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmNsb25lCisgICAgIFsgbWV0 aG9kIF0KKyAgICAgKioKKyAgICAgKiBDcmVhdGVzIGEgY2xvbmUgb2YgdGhl IGVsZW1lbnQgYW5kIGluc2VydHMgaXQgYWZ0ZXIgdGhlIGVsZW1lbnQKKyAg ICAgKioKKyAgICAgPSAoRWxlbWVudCkgdGhlIGNsb25lCisgICAgXCovCisg ICAgZWxwcm90by5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdmFy IGNsb25lID0gd3JhcCh0aGlzLm5vZGUuY2xvbmVOb2RlKHRydWUpKTsKKyAg ICAgICAgaWYgKCQoY2xvbmUubm9kZSwgImlkIikpIHsKKyAgICAgICAgICAg ICQoY2xvbmUubm9kZSwge2lkOiBjbG9uZS5pZH0pOworICAgICAgICB9Cisg ICAgICAgIGZpeGlkcyhjbG9uZSk7CisgICAgICAgIGNsb25lLmluc2VydEFm dGVyKHRoaXMpOworICAgICAgICByZXR1cm4gY2xvbmU7CisgICAgfTsKKyAg ICAvKlwKKyAgICAgKiBFbGVtZW50LnRvRGVmcworICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogTW92ZXMgZWxlbWVudCB0byB0aGUgc2hhcmVk IGA8ZGVmcz5gIGFyZWEKKyAgICAgKioKKyAgICAgPSAoRWxlbWVudCkgdGhl IGVsZW1lbnQKKyAgICBcKi8KKyAgICBlbHByb3RvLnRvRGVmcyA9IGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgdmFyIGRlZnMgPSBnZXRTb21lRGVmcyh0aGlz KTsKKyAgICAgICAgZGVmcy5hcHBlbmRDaGlsZCh0aGlzLm5vZGUpOworICAg ICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVs ZW1lbnQudG9QYXR0ZXJuCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBDcmVhdGVzIGEgYDxwYXR0ZXJuPmAgZWxlbWVudCBmcm9tIHRoZSBj dXJyZW50IGVsZW1lbnQKKyAgICAgKioKKyAgICAgKiBUbyBjcmVhdGUgYSBw YXR0ZXJuIHlvdSBoYXZlIHRvIHNwZWNpZnkgdGhlIHBhdHRlcm4gcmVjdDoK KyAgICAgLSB4IChzdHJpbmd8bnVtYmVyKQorICAgICAtIHkgKHN0cmluZ3xu dW1iZXIpCisgICAgIC0gd2lkdGggKHN0cmluZ3xudW1iZXIpCisgICAgIC0g aGVpZ2h0IChzdHJpbmd8bnVtYmVyKQorICAgICA9IChFbGVtZW50KSB0aGUg YDxwYXR0ZXJuPmAgZWxlbWVudAorICAgICAqIFlvdSBjYW4gdXNlIHBhdHRl cm4gbGF0ZXIgb24gYXMgYW4gYXJndW1lbnQgZm9yIGBmaWxsYCBhdHRyaWJ1 dGU6CisgICAgIHwgdmFyIHAgPSBwYXBlci5wYXRoKCJNMTAtNS0xMCwxNU0x NSwwLDAsMTVNMC01LTIwLDE1IikuYXR0cih7CisgICAgIHwgICAgICAgICBm aWxsOiAibm9uZSIsCisgICAgIHwgICAgICAgICBzdHJva2U6ICIjYmFkYTU1 IiwKKyAgICAgfCAgICAgICAgIHN0cm9rZVdpZHRoOiA1CisgICAgIHwgICAg IH0pLnBhdHRlcm4oMCwgMCwgMTAsIDEwKSwKKyAgICAgfCAgICAgYyA9IHBh cGVyLmNpcmNsZSgyMDAsIDIwMCwgMTAwKTsKKyAgICAgfCBjLmF0dHIoewor ICAgICB8ICAgICBmaWxsOiBwCisgICAgIHwgfSk7CisgICAgXCovCisgICAg ZWxwcm90by5wYXR0ZXJuID0gZWxwcm90by50b1BhdHRlcm4gPSBmdW5jdGlv biAoeCwgeSwgd2lkdGgsIGhlaWdodCkgeworICAgICAgICB2YXIgcCA9IG1h a2UoInBhdHRlcm4iLCBnZXRTb21lRGVmcyh0aGlzKSk7CisgICAgICAgIGlm ICh4ID09IG51bGwpIHsKKyAgICAgICAgICAgIHggPSB0aGlzLmdldEJCb3go KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoaXMoeCwgIm9iamVjdCIpICYm ICJ4IiBpbiB4KSB7CisgICAgICAgICAgICB5ID0geC55OworICAgICAgICAg ICAgd2lkdGggPSB4LndpZHRoOworICAgICAgICAgICAgaGVpZ2h0ID0geC5o ZWlnaHQ7CisgICAgICAgICAgICB4ID0geC54OworICAgICAgICB9CisgICAg ICAgICQocC5ub2RlLCB7CisgICAgICAgICAgICB4OiB4LAorICAgICAgICAg ICAgeTogeSwKKyAgICAgICAgICAgIHdpZHRoOiB3aWR0aCwKKyAgICAgICAg ICAgIGhlaWdodDogaGVpZ2h0LAorICAgICAgICAgICAgcGF0dGVyblVuaXRz OiAidXNlclNwYWNlT25Vc2UiLAorICAgICAgICAgICAgaWQ6IHAuaWQsCisg ICAgICAgICAgICB2aWV3Qm94OiBbeCwgeSwgd2lkdGgsIGhlaWdodF0uam9p bigiICIpCisgICAgICAgIH0pOworICAgICAgICBwLm5vZGUuYXBwZW5kQ2hp bGQodGhpcy5ub2RlKTsKKyAgICAgICAgcmV0dXJuIHA7CisgICAgfTsKKy8v IFNJRVJSQSBFbGVtZW50Lm1hcmtlcigpOiBjbGFyaWZ5IHdoYXQgYSByZWZl cmVuY2UgcG9pbnQgaXMuIEUuZy4sIGhlbHBzIHlvdSBvZmZzZXQgdGhlIG9i amVjdCBmcm9tIGl0cyBlZGdlIHN1Y2ggYXMgd2hlbiBjZW50ZXJpbmcgaXQg b3ZlciBhIHBhdGguCisvLyBTSUVSUkEgRWxlbWVudC5tYXJrZXIoKTogSSBz dWdnZXN0IHRoZSBtZXRob2Qgc2hvdWxkIGFjY2VwdCBkZWZhdWx0IHJlZmVy ZW5jZSBwb2ludCB2YWx1ZXMuICBQZXJoYXBzIGNlbnRlcmVkIHdpdGggKHJl ZlggPSB3aWR0aC8yKSBhbmQgKHJlZlkgPSBoZWlnaHQvMik/IEFsc28sIGNv dWxkbid0IGl0IGFzc3VtZSB0aGUgZWxlbWVudCdzIGN1cnJlbnQgX3dpZHRo XyBhbmQgX2hlaWdodF8/IEFuZCBwbGVhc2Ugc3BlY2lmeSB3aGF0IF94XyBh bmQgX3lfIG1lYW46IG9mZnNldHM/IElmIHNvLCBmcm9tIHdoZXJlPyAgQ291 bGRuJ3QgdGhleSBhbHNvIGJlIGFzc2lnbmVkIGRlZmF1bHQgdmFsdWVzPwor ICAgIC8qXAorICAgICAqIEVsZW1lbnQubWFya2VyCisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBDcmVhdGVzIGEgYDxtYXJrZXI+YCBlbGVt ZW50IGZyb20gdGhlIGN1cnJlbnQgZWxlbWVudAorICAgICAqKgorICAgICAq IFRvIGNyZWF0ZSBhIG1hcmtlciB5b3UgaGF2ZSB0byBzcGVjaWZ5IHRoZSBi b3VuZGluZyByZWN0IGFuZCByZWZlcmVuY2UgcG9pbnQ6CisgICAgIC0geCAo bnVtYmVyKQorICAgICAtIHkgKG51bWJlcikKKyAgICAgLSB3aWR0aCAobnVt YmVyKQorICAgICAtIGhlaWdodCAobnVtYmVyKQorICAgICAtIHJlZlggKG51 bWJlcikKKyAgICAgLSByZWZZIChudW1iZXIpCisgICAgID0gKEVsZW1lbnQp IHRoZSBgPG1hcmtlcj5gIGVsZW1lbnQKKyAgICAgKiBZb3UgY2FuIHNwZWNp ZnkgdGhlIG1hcmtlciBsYXRlciBhcyBhbiBhcmd1bWVudCBmb3IgYG1hcmtl ci1zdGFydGAsIGBtYXJrZXItZW5kYCwgYG1hcmtlci1taWRgLCBhbmQgYG1h cmtlcmAgYXR0cmlidXRlcy4gVGhlIGBtYXJrZXJgIGF0dHJpYnV0ZSBwbGFj ZXMgdGhlIG1hcmtlciBhdCBldmVyeSBwb2ludCBhbG9uZyB0aGUgcGF0aCwg YW5kIGBtYXJrZXItbWlkYCBwbGFjZXMgdGhlbSBhdCBldmVyeSBwb2ludCBl eGNlcHQgdGhlIHN0YXJ0IGFuZCBlbmQuCisgICAgXCovCisgICAgLy8gVE9E TyBhZGQgdXNhZ2UgZm9yIG1hcmtlcnMKKyAgICBlbHByb3RvLm1hcmtlciA9 IGZ1bmN0aW9uICh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZWZYLCByZWZZKSB7 CisgICAgICAgIHZhciBwID0gbWFrZSgibWFya2VyIiwgZ2V0U29tZURlZnMo dGhpcykpOworICAgICAgICBpZiAoeCA9PSBudWxsKSB7CisgICAgICAgICAg ICB4ID0gdGhpcy5nZXRCQm94KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg KGlzKHgsICJvYmplY3QiKSAmJiAieCIgaW4geCkgeworICAgICAgICAgICAg eSA9IHgueTsKKyAgICAgICAgICAgIHdpZHRoID0geC53aWR0aDsKKyAgICAg ICAgICAgIGhlaWdodCA9IHguaGVpZ2h0OworICAgICAgICAgICAgcmVmWCA9 IHgucmVmWCB8fCB4LmN4OworICAgICAgICAgICAgcmVmWSA9IHgucmVmWSB8 fCB4LmN5OworICAgICAgICAgICAgeCA9IHgueDsKKyAgICAgICAgfQorICAg ICAgICAkKHAubm9kZSwgeworICAgICAgICAgICAgdmlld0JveDogW3gsIHks IHdpZHRoLCBoZWlnaHRdLmpvaW4oIiAiKSwKKyAgICAgICAgICAgIG1hcmtl cldpZHRoOiB3aWR0aCwKKyAgICAgICAgICAgIG1hcmtlckhlaWdodDogaGVp Z2h0LAorICAgICAgICAgICAgb3JpZW50OiAiYXV0byIsCisgICAgICAgICAg ICByZWZYOiByZWZYIHx8IDAsCisgICAgICAgICAgICByZWZZOiByZWZZIHx8 IDAsCisgICAgICAgICAgICBpZDogcC5pZAorICAgICAgICB9KTsKKyAgICAg ICAgcC5ub2RlLmFwcGVuZENoaWxkKHRoaXMubm9kZSk7CisgICAgICAgIHJl dHVybiBwOworICAgIH07CisgICAgLy8gYW5pbWF0aW9uCisgICAgZnVuY3Rp b24gc2xpY2UoZnJvbSwgdG8sIGYpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0 aW9uIChhcnIpIHsKKyAgICAgICAgICAgIHZhciByZXMgPSBhcnIuc2xpY2Uo ZnJvbSwgdG8pOworICAgICAgICAgICAgaWYgKHJlcy5sZW5ndGggPT0gMSkg eworICAgICAgICAgICAgICAgIHJlcyA9IHJlc1swXTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHJldHVybiBmID8gZihyZXMpIDogcmVzOworICAg ICAgICB9OworICAgIH0KKyAgICB2YXIgQW5pbWF0aW9uID0gZnVuY3Rpb24g KGF0dHIsIG1zLCBlYXNpbmcsIGNhbGxiYWNrKSB7CisgICAgICAgIGlmICh0 eXBlb2YgZWFzaW5nID09ICJmdW5jdGlvbiIgJiYgIWVhc2luZy5sZW5ndGgp IHsKKyAgICAgICAgICAgIGNhbGxiYWNrID0gZWFzaW5nOworICAgICAgICAg ICAgZWFzaW5nID0gbWluYS5saW5lYXI7CisgICAgICAgIH0KKyAgICAgICAg dGhpcy5hdHRyID0gYXR0cjsKKyAgICAgICAgdGhpcy5kdXIgPSBtczsKKyAg ICAgICAgZWFzaW5nICYmICh0aGlzLmVhc2luZyA9IGVhc2luZyk7CisgICAg ICAgIGNhbGxiYWNrICYmICh0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2spOwor ICAgIH07CisgICAgU25hcC5fLkFuaW1hdGlvbiA9IEFuaW1hdGlvbjsKKyAg ICAvKlwKKyAgICAgKiBTbmFwLmFuaW1hdGlvbgorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogQ3JlYXRlcyBhbiBhbmltYXRpb24gb2JqZWN0 CisgICAgICoqCisgICAgIC0gYXR0ciAob2JqZWN0KSBhdHRyaWJ1dGVzIG9m IGZpbmFsIGRlc3RpbmF0aW9uCisgICAgIC0gZHVyYXRpb24gKG51bWJlcikg ZHVyYXRpb24gb2YgdGhlIGFuaW1hdGlvbiwgaW4gbWlsbGlzZWNvbmRzCisg ICAgIC0gZWFzaW5nIChmdW5jdGlvbikgI29wdGlvbmFsIG9uZSBvZiBlYXNp bmcgZnVuY3Rpb25zIG9mIEBtaW5hIG9yIGN1c3RvbSBvbmUKKyAgICAgLSBj YWxsYmFjayAoZnVuY3Rpb24pICNvcHRpb25hbCBjYWxsYmFjayBmdW5jdGlv biB0aGF0IGZpcmVzIHdoZW4gYW5pbWF0aW9uIGVuZHMKKyAgICAgPSAob2Jq ZWN0KSBhbmltYXRpb24gb2JqZWN0CisgICAgXCovCisgICAgU25hcC5hbmlt YXRpb24gPSBmdW5jdGlvbiAoYXR0ciwgbXMsIGVhc2luZywgY2FsbGJhY2sp IHsKKyAgICAgICAgcmV0dXJuIG5ldyBBbmltYXRpb24oYXR0ciwgbXMsIGVh c2luZywgY2FsbGJhY2spOworICAgIH07CisgICAgLypcCisgICAgICogRWxl bWVudC5pbkFuaW0KKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAq IFJldHVybnMgYSBzZXQgb2YgYW5pbWF0aW9ucyB0aGF0IG1heSBiZSBhYmxl IHRvIG1hbmlwdWxhdGUgdGhlIGN1cnJlbnQgZWxlbWVudAorICAgICAqKgor ICAgICA9IChvYmplY3QpIGluIGZvcm1hdDoKKyAgICAgbyB7CisgICAgIG8g ICAgIGFuaW0gKG9iamVjdCkgYW5pbWF0aW9uIG9iamVjdCwKKyAgICAgbyAg ICAgbWluYSAob2JqZWN0KSBAbWluYSBvYmplY3QsCisgICAgIG8gICAgIGN1 clN0YXR1cyAobnVtYmVyKSAwLi4xIOKAlCBzdGF0dXMgb2YgdGhlIGFuaW1h dGlvbjogMCDigJQganVzdCBzdGFydGVkLCAxIOKAlCBqdXN0IGZpbmlzaGVk LAorICAgICBvICAgICBzdGF0dXMgKGZ1bmN0aW9uKSBnZXRzIG9yIHNldHMg dGhlIHN0YXR1cyBvZiB0aGUgYW5pbWF0aW9uLAorICAgICBvICAgICBzdG9w IChmdW5jdGlvbikgc3RvcHMgdGhlIGFuaW1hdGlvbgorICAgICBvIH0KKyAg ICBcKi8KKyAgICBlbHByb3RvLmluQW5pbSA9IGZ1bmN0aW9uICgpIHsKKyAg ICAgICAgdmFyIGVsID0gdGhpcywKKyAgICAgICAgICAgIHJlcyA9IFtdOwor ICAgICAgICBmb3IgKHZhciBpZCBpbiBlbC5hbmltcykgaWYgKGVsLmFuaW1z W2hhc10oaWQpKSB7CisgICAgICAgICAgICAoZnVuY3Rpb24gKGEpIHsKKyAg ICAgICAgICAgICAgICByZXMucHVzaCh7CisgICAgICAgICAgICAgICAgICAg IGFuaW06IG5ldyBBbmltYXRpb24oYS5fYXR0cnMsIGEuZHVyLCBhLmVhc2lu ZywgYS5fY2FsbGJhY2spLAorICAgICAgICAgICAgICAgICAgICBtaW5hOiBh LAorICAgICAgICAgICAgICAgICAgICBjdXJTdGF0dXM6IGEuc3RhdHVzKCks CisgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZnVuY3Rpb24gKHZhbCkg eworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEuc3RhdHVzKHZh bCk7CisgICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAg ICAgIHN0b3A6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGEuc3RvcCgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgfSk7CisgICAgICAgICAgICB9KGVsLmFuaW1zW2lkXSkpOwor ICAgICAgICB9CisgICAgICAgIHJldHVybiByZXM7CisgICAgfTsKKyAgICAv KlwKKyAgICAgKiBTbmFwLmFuaW1hdGUKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIFJ1bnMgZ2VuZXJpYyBhbmltYXRpb24gb2Ygb25lIG51 bWJlciBpbnRvIGFub3RoZXIgd2l0aCBhIGNhcmluZyBmdW5jdGlvbgorICAg ICAqKgorICAgICAtIGZyb20gKG51bWJlcnxhcnJheSkgbnVtYmVyIG9yIGFy cmF5IG9mIG51bWJlcnMKKyAgICAgLSB0byAobnVtYmVyfGFycmF5KSBudW1i ZXIgb3IgYXJyYXkgb2YgbnVtYmVycworICAgICAtIHNldHRlciAoZnVuY3Rp b24pIGNhcmluZyBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgb25lIG51bWJlciBh cmd1bWVudAorICAgICAtIGR1cmF0aW9uIChudW1iZXIpIGR1cmF0aW9uLCBp biBtaWxsaXNlY29uZHMKKyAgICAgLSBlYXNpbmcgKGZ1bmN0aW9uKSAjb3B0 aW9uYWwgZWFzaW5nIGZ1bmN0aW9uIGZyb20gQG1pbmEgb3IgY3VzdG9tCisg ICAgIC0gY2FsbGJhY2sgKGZ1bmN0aW9uKSAjb3B0aW9uYWwgY2FsbGJhY2sg ZnVuY3Rpb24gdG8gZXhlY3V0ZSB3aGVuIGFuaW1hdGlvbiBlbmRzCisgICAg ID0gKG9iamVjdCkgYW5pbWF0aW9uIG9iamVjdCBpbiBAbWluYSBmb3JtYXQK KyAgICAgbyB7CisgICAgIG8gICAgIGlkIChzdHJpbmcpIGFuaW1hdGlvbiBp ZCwgY29uc2lkZXIgaXQgcmVhZC1vbmx5LAorICAgICBvICAgICBkdXJhdGlv biAoZnVuY3Rpb24pIGdldHMgb3Igc2V0cyB0aGUgZHVyYXRpb24gb2YgdGhl IGFuaW1hdGlvbiwKKyAgICAgbyAgICAgZWFzaW5nIChmdW5jdGlvbikgZWFz aW5nLAorICAgICBvICAgICBzcGVlZCAoZnVuY3Rpb24pIGdldHMgb3Igc2V0 cyB0aGUgc3BlZWQgb2YgdGhlIGFuaW1hdGlvbiwKKyAgICAgbyAgICAgc3Rh dHVzIChmdW5jdGlvbikgZ2V0cyBvciBzZXRzIHRoZSBzdGF0dXMgb2YgdGhl IGFuaW1hdGlvbiwKKyAgICAgbyAgICAgc3RvcCAoZnVuY3Rpb24pIHN0b3Bz IHRoZSBhbmltYXRpb24KKyAgICAgbyB9CisgICAgIHwgdmFyIHJlY3QgPSBT bmFwKCkucmVjdCgwLCAwLCAxMCwgMTApOworICAgICB8IFNuYXAuYW5pbWF0 ZSgwLCAxMCwgZnVuY3Rpb24gKHZhbCkgeworICAgICB8ICAgICByZWN0LmF0 dHIoeworICAgICB8ICAgICAgICAgeDogdmFsCisgICAgIHwgICAgIH0pOwor ICAgICB8IH0sIDEwMDApOworICAgICB8IC8vIGluIGdpdmVuIGNvbnRleHQg aXMgZXF1aXZhbGVudCB0bworICAgICB8IHJlY3QuYW5pbWF0ZSh7eDogMTB9 LCAxMDAwKTsKKyAgICBcKi8KKyAgICBTbmFwLmFuaW1hdGUgPSBmdW5jdGlv biAoZnJvbSwgdG8sIHNldHRlciwgbXMsIGVhc2luZywgY2FsbGJhY2spIHsK KyAgICAgICAgaWYgKHR5cGVvZiBlYXNpbmcgPT0gImZ1bmN0aW9uIiAmJiAh ZWFzaW5nLmxlbmd0aCkgeworICAgICAgICAgICAgY2FsbGJhY2sgPSBlYXNp bmc7CisgICAgICAgICAgICBlYXNpbmcgPSBtaW5hLmxpbmVhcjsKKyAgICAg ICAgfQorICAgICAgICB2YXIgbm93ID0gbWluYS50aW1lKCksCisgICAgICAg ICAgICBhbmltID0gbWluYShmcm9tLCB0bywgbm93LCBub3cgKyBtcywgbWlu YS50aW1lLCBzZXR0ZXIsIGVhc2luZyk7CisgICAgICAgIGNhbGxiYWNrICYm IGV2ZS5vbmNlKCJtaW5hLmZpbmlzaC4iICsgYW5pbS5pZCwgY2FsbGJhY2sp OworICAgICAgICByZXR1cm4gYW5pbTsKKyAgICB9OworICAgIC8qXAorICAg ICAqIEVsZW1lbnQuc3RvcAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogU3RvcHMgYWxsIHRoZSBhbmltYXRpb25zIGZvciB0aGUgY3VycmVu dCBlbGVtZW50CisgICAgICoqCisgICAgID0gKEVsZW1lbnQpIHRoZSBjdXJy ZW50IGVsZW1lbnQKKyAgICBcKi8KKyAgICBlbHByb3RvLnN0b3AgPSBmdW5j dGlvbiAoKSB7CisgICAgICAgIHZhciBhbmltcyA9IHRoaXMuaW5BbmltKCk7 CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGFuaW1zLmxlbmd0aDsg aSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIGFuaW1zW2ldLnN0b3AoKTsK KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9OworICAg IC8qXAorICAgICAqIEVsZW1lbnQuYW5pbWF0ZQorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogQW5pbWF0ZXMgdGhlIGdpdmVuIGF0dHJpYnV0 ZXMgb2YgdGhlIGVsZW1lbnQKKyAgICAgKioKKyAgICAgLSBhdHRycyAob2Jq ZWN0KSBrZXktdmFsdWUgcGFpcnMgb2YgZGVzdGluYXRpb24gYXR0cmlidXRl cworICAgICAtIGR1cmF0aW9uIChudW1iZXIpIGR1cmF0aW9uIG9mIHRoZSBh bmltYXRpb24gaW4gbWlsbGlzZWNvbmRzCisgICAgIC0gZWFzaW5nIChmdW5j dGlvbikgI29wdGlvbmFsIGVhc2luZyBmdW5jdGlvbiBmcm9tIEBtaW5hIG9y IGN1c3RvbQorICAgICAtIGNhbGxiYWNrIChmdW5jdGlvbikgI29wdGlvbmFs IGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgZXhlY3V0ZXMgd2hlbiB0aGUgYW5p bWF0aW9uIGVuZHMKKyAgICAgPSAoRWxlbWVudCkgdGhlIGN1cnJlbnQgZWxl bWVudAorICAgIFwqLworICAgIGVscHJvdG8uYW5pbWF0ZSA9IGZ1bmN0aW9u IChhdHRycywgbXMsIGVhc2luZywgY2FsbGJhY2spIHsKKyAgICAgICAgaWYg KHR5cGVvZiBlYXNpbmcgPT0gImZ1bmN0aW9uIiAmJiAhZWFzaW5nLmxlbmd0 aCkgeworICAgICAgICAgICAgY2FsbGJhY2sgPSBlYXNpbmc7CisgICAgICAg ICAgICBlYXNpbmcgPSBtaW5hLmxpbmVhcjsKKyAgICAgICAgfQorICAgICAg ICBpZiAoYXR0cnMgaW5zdGFuY2VvZiBBbmltYXRpb24pIHsKKyAgICAgICAg ICAgIGNhbGxiYWNrID0gYXR0cnMuY2FsbGJhY2s7CisgICAgICAgICAgICBl YXNpbmcgPSBhdHRycy5lYXNpbmc7CisgICAgICAgICAgICBtcyA9IGF0dHJz LmR1cjsKKyAgICAgICAgICAgIGF0dHJzID0gYXR0cnMuYXR0cjsKKyAgICAg ICAgfQorICAgICAgICB2YXIgZmtleXMgPSBbXSwgdGtleXMgPSBbXSwga2V5 cyA9IHt9LCBmcm9tLCB0bywgZiwgZXEsCisgICAgICAgICAgICBlbCA9IHRo aXM7CisgICAgICAgIGZvciAodmFyIGtleSBpbiBhdHRycykgaWYgKGF0dHJz W2hhc10oa2V5KSkgeworICAgICAgICAgICAgaWYgKGVsLmVxdWFsKSB7Cisg ICAgICAgICAgICAgICAgZXEgPSBlbC5lcXVhbChrZXksIFN0cihhdHRyc1tr ZXldKSk7CisgICAgICAgICAgICAgICAgZnJvbSA9IGVxLmZyb207CisgICAg ICAgICAgICAgICAgdG8gPSBlcS50bzsKKyAgICAgICAgICAgICAgICBmID0g ZXEuZjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg ZnJvbSA9ICtlbC5hdHRyKGtleSk7CisgICAgICAgICAgICAgICAgdG8gPSAr YXR0cnNba2V5XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBs ZW4gPSBpcyhmcm9tLCAiYXJyYXkiKSA/IGZyb20ubGVuZ3RoIDogMTsKKyAg ICAgICAgICAgIGtleXNba2V5XSA9IHNsaWNlKGZrZXlzLmxlbmd0aCwgZmtl eXMubGVuZ3RoICsgbGVuLCBmKTsKKyAgICAgICAgICAgIGZrZXlzID0gZmtl eXMuY29uY2F0KGZyb20pOworICAgICAgICAgICAgdGtleXMgPSB0a2V5cy5j b25jYXQodG8pOworICAgICAgICB9CisgICAgICAgIHZhciBub3cgPSBtaW5h LnRpbWUoKSwKKyAgICAgICAgICAgIGFuaW0gPSBtaW5hKGZrZXlzLCB0a2V5 cywgbm93LCBub3cgKyBtcywgbWluYS50aW1lLCBmdW5jdGlvbiAodmFsKSB7 CisgICAgICAgICAgICAgICAgdmFyIGF0dHIgPSB7fTsKKyAgICAgICAgICAg ICAgICBmb3IgKHZhciBrZXkgaW4ga2V5cykgaWYgKGtleXNbaGFzXShrZXkp KSB7CisgICAgICAgICAgICAgICAgICAgIGF0dHJba2V5XSA9IGtleXNba2V5 XSh2YWwpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl bC5hdHRyKGF0dHIpOworICAgICAgICAgICAgfSwgZWFzaW5nKTsKKyAgICAg ICAgZWwuYW5pbXNbYW5pbS5pZF0gPSBhbmltOworICAgICAgICBhbmltLl9h dHRycyA9IGF0dHJzOworICAgICAgICBhbmltLl9jYWxsYmFjayA9IGNhbGxi YWNrOworICAgICAgICBldmUoInNuYXAuYW5pbWNyZWF0ZWQuIiArIGVsLmlk LCBhbmltKTsKKyAgICAgICAgZXZlLm9uY2UoIm1pbmEuZmluaXNoLiIgKyBh bmltLmlkLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBkZWxldGUgZWwu YW5pbXNbYW5pbS5pZF07CisgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxs YmFjay5jYWxsKGVsKTsKKyAgICAgICAgfSk7CisgICAgICAgIGV2ZS5vbmNl KCJtaW5hLnN0b3AuIiArIGFuaW0uaWQsIGZ1bmN0aW9uICgpIHsKKyAgICAg ICAgICAgIGRlbGV0ZSBlbC5hbmltc1thbmltLmlkXTsKKyAgICAgICAgfSk7 CisgICAgICAgIHJldHVybiBlbDsKKyAgICB9OworICAgIHZhciBlbGRhdGEg PSB7fTsKKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmRhdGEKKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZHMgb3IgcmV0cmlldmVzIGdp dmVuIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBnaXZlbiBrZXkuIChEb27igJl0 IGNvbmZ1c2UKKyAgICAgKiB3aXRoIGBkYXRhLWAgYXR0cmlidXRlcykKKyAg ICAgKgorICAgICAqIFNlZSBhbHNvIEBFbGVtZW50LnJlbW92ZURhdGEKKyAg ICAgLSBrZXkgKHN0cmluZykga2V5IHRvIHN0b3JlIGRhdGEKKyAgICAgLSB2 YWx1ZSAoYW55KSAjb3B0aW9uYWwgdmFsdWUgdG8gc3RvcmUKKyAgICAgPSAo b2JqZWN0KSBARWxlbWVudAorICAgICAqIG9yLCBpZiB2YWx1ZSBpcyBub3Qg c3BlY2lmaWVkOgorICAgICA9IChhbnkpIHZhbHVlCisgICAgID4gVXNhZ2UK KyAgICAgfCBmb3IgKHZhciBpID0gMCwgaSA8IDUsIGkrKykgeworICAgICB8 ICAgICBwYXBlci5jaXJjbGUoMTAgKyAxNSAqIGksIDEwLCAxMCkKKyAgICAg fCAgICAgICAgICAuYXR0cih7ZmlsbDogIiMwMDAifSkKKyAgICAgfCAgICAg ICAgICAuZGF0YSgiaSIsIGkpCisgICAgIHwgICAgICAgICAgLmNsaWNrKGZ1 bmN0aW9uICgpIHsKKyAgICAgfCAgICAgICAgICAgICBhbGVydCh0aGlzLmRh dGEoImkiKSk7CisgICAgIHwgICAgICAgICAgfSk7CisgICAgIHwgfQorICAg IFwqLworICAgIGVscHJvdG8uZGF0YSA9IGZ1bmN0aW9uIChrZXksIHZhbHVl KSB7CisgICAgICAgIHZhciBkYXRhID0gZWxkYXRhW3RoaXMuaWRdID0gZWxk YXRhW3RoaXMuaWRdIHx8IHt9OworICAgICAgICBpZiAoYXJndW1lbnRzLmxl bmd0aCA9PSAwKXsKKyAgICAgICAgICAgIGV2ZSgic25hcC5kYXRhLmdldC4i ICsgdGhpcy5pZCwgdGhpcywgZGF0YSwgbnVsbCk7CisgICAgICAgICAgICBy ZXR1cm4gZGF0YTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXJndW1lbnRz Lmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICBpZiAoU25hcC5pcyhrZXks ICJvYmplY3QiKSkgeworICAgICAgICAgICAgICAgIGZvciAodmFyIGkgaW4g a2V5KSBpZiAoa2V5W2hhc10oaSkpIHsKKyAgICAgICAgICAgICAgICAgICAg dGhpcy5kYXRhKGksIGtleVtpXSk7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgZXZlKCJzbmFwLmRhdGEuZ2V0LiIgKyB0aGlzLmlkLCB0aGlz LCBkYXRhW2tleV0sIGtleSk7CisgICAgICAgICAgICByZXR1cm4gZGF0YVtr ZXldOworICAgICAgICB9CisgICAgICAgIGRhdGFba2V5XSA9IHZhbHVlOwor ICAgICAgICBldmUoInNuYXAuZGF0YS5zZXQuIiArIHRoaXMuaWQsIHRoaXMs IHZhbHVlLCBrZXkpOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Owor ICAgIC8qXAorICAgICAqIEVsZW1lbnQucmVtb3ZlRGF0YQorICAgICBbIG1l dGhvZCBdCisgICAgICoqCisgICAgICogUmVtb3ZlcyB2YWx1ZSBhc3NvY2lh dGVkIHdpdGggYW4gZWxlbWVudCBieSBnaXZlbiBrZXkuCisgICAgICogSWYg a2V5IGlzIG5vdCBwcm92aWRlZCwgcmVtb3ZlcyBhbGwgdGhlIGRhdGEgb2Yg dGhlIGVsZW1lbnQuCisgICAgIC0ga2V5IChzdHJpbmcpICNvcHRpb25hbCBr ZXkKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAgIFwqLworICAgIGVs cHJvdG8ucmVtb3ZlRGF0YSA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAg aWYgKGtleSA9PSBudWxsKSB7CisgICAgICAgICAgICBlbGRhdGFbdGhpcy5p ZF0gPSB7fTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVsZGF0 YVt0aGlzLmlkXSAmJiBkZWxldGUgZWxkYXRhW3RoaXMuaWRdW2tleV07Cisg ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAv KlwKKyAgICAgKiBFbGVtZW50Lm91dGVyU1ZHCisgICAgIFsgbWV0aG9kIF0K KyAgICAgKioKKyAgICAgKiBSZXR1cm5zIFNWRyBjb2RlIGZvciB0aGUgZWxl bWVudCwgZXF1aXZhbGVudCB0byBIVE1MJ3MgYG91dGVySFRNTGAuCisgICAg ICoKKyAgICAgKiBTZWUgYWxzbyBARWxlbWVudC5pbm5lclNWRworICAgICA9 IChzdHJpbmcpIFNWRyBjb2RlIGZvciB0aGUgZWxlbWVudAorICAgIFwqLwor ICAgIC8qXAorICAgICAqIEVsZW1lbnQudG9TdHJpbmcKKyAgICAgWyBtZXRo b2QgXQorICAgICAqKgorICAgICAqIFNlZSBARWxlbWVudC5vdXRlclNWRwor ICAgIFwqLworICAgIGVscHJvdG8ub3V0ZXJTVkcgPSBlbHByb3RvLnRvU3Ry aW5nID0gdG9TdHJpbmcoMSk7CisgICAgLypcCisgICAgICogRWxlbWVudC5p bm5lclNWRworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmV0 dXJucyBTVkcgY29kZSBmb3IgdGhlIGVsZW1lbnQncyBjb250ZW50cywgZXF1 aXZhbGVudCB0byBIVE1MJ3MgYGlubmVySFRNTGAKKyAgICAgPSAoc3RyaW5n KSBTVkcgY29kZSBmb3IgdGhlIGVsZW1lbnQKKyAgICBcKi8KKyAgICBlbHBy b3RvLmlubmVyU1ZHID0gdG9TdHJpbmcoKTsKKyAgICBmdW5jdGlvbiB0b1N0 cmluZyh0eXBlKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7Cisg ICAgICAgICAgICB2YXIgcmVzID0gdHlwZSA/ICI8IiArIHRoaXMudHlwZSA6 ICIiLAorICAgICAgICAgICAgICAgIGF0dHIgPSB0aGlzLm5vZGUuYXR0cmli dXRlcywKKyAgICAgICAgICAgICAgICBjaGxkID0gdGhpcy5ub2RlLmNoaWxk Tm9kZXM7CisgICAgICAgICAgICBpZiAodHlwZSkgeworICAgICAgICAgICAg ICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGF0dHIubGVuZ3RoOyBpIDwgaWk7 IGkrKykgeworICAgICAgICAgICAgICAgICAgICByZXMgKz0gIiAiICsgYXR0 cltpXS5uYW1lICsgJz0iJyArCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYXR0cltpXS52YWx1ZS5yZXBsYWNlKC8iL2csICdcXCInKSArICciJzsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoY2hsZC5sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICB0eXBlICYm IChyZXMgKz0gIj4iKTsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBp aSA9IGNobGQubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAg ICAgICAgICBpZiAoY2hsZFtpXS5ub2RlVHlwZSA9PSAzKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICByZXMgKz0gY2hsZFtpXS5ub2RlVmFsdWU7Cisg ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hsZFtpXS5ub2RlVHlw ZSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gd3Jh cChjaGxkW2ldKS50b1N0cmluZygpOworICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHR5cGUgJiYg KHJlcyArPSAiPC8iICsgdGhpcy50eXBlICsgIj4iKTsKKyAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdHlwZSAmJiAocmVzICs9ICIv PiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlczsK KyAgICAgICAgfTsKKyAgICB9CisgICAgZWxwcm90by50b0RhdGFVUkwgPSBm dW5jdGlvbiAoKSB7CisgICAgICAgIGlmICh3aW5kb3cgJiYgd2luZG93LmJ0 b2EpIHsKKyAgICAgICAgICAgIHZhciBiYiA9IHRoaXMuZ2V0QkJveCgpLAor ICAgICAgICAgICAgICAgIHN2ZyA9IFNuYXAuZm9ybWF0KCc8c3ZnIHZlcnNp b249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4 bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgd2lk dGg9Int3aWR0aH0iIGhlaWdodD0ie2hlaWdodH0iIHZpZXdCb3g9Int4fSB7 eX0ge3dpZHRofSB7aGVpZ2h0fSI+e2NvbnRlbnRzfTwvc3ZnPicsIHsKKyAg ICAgICAgICAgICAgICB4OiArYmIueC50b0ZpeGVkKDMpLAorICAgICAgICAg ICAgICAgIHk6ICtiYi55LnRvRml4ZWQoMyksCisgICAgICAgICAgICAgICAg d2lkdGg6ICtiYi53aWR0aC50b0ZpeGVkKDMpLAorICAgICAgICAgICAgICAg IGhlaWdodDogK2JiLmhlaWdodC50b0ZpeGVkKDMpLAorICAgICAgICAgICAg ICAgIGNvbnRlbnRzOiB0aGlzLm91dGVyU1ZHKCkKKyAgICAgICAgICAgIH0p OworICAgICAgICAgICAgcmV0dXJuICJkYXRhOmltYWdlL3N2Zyt4bWw7YmFz ZTY0LCIgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChzdmcp KSk7CisgICAgICAgIH0KKyAgICB9OworICAgIC8qXAorICAgICAqIEZyYWdt ZW50LnNlbGVjdAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICog U2VlIEBFbGVtZW50LnNlbGVjdAorICAgIFwqLworICAgIEZyYWdtZW50LnBy b3RvdHlwZS5zZWxlY3QgPSBlbHByb3RvLnNlbGVjdDsKKyAgICAvKlwKKyAg ICAgKiBGcmFnbWVudC5zZWxlY3RBbGwKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIFNlZSBARWxlbWVudC5zZWxlY3RBbGwKKyAgICBcKi8K KyAgICBGcmFnbWVudC5wcm90b3R5cGUuc2VsZWN0QWxsID0gZWxwcm90by5z ZWxlY3RBbGw7Cit9KTsKKworLy8gQ29weXJpZ2h0IChjKSAyMDEzIEFkb2Jl IFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor Ly8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVy c2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNl IHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNl bnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNl IGF0CisvLworLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJ Q0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2Fi bGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8g ZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQg b24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBP UiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBp bXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMg bGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRh dGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitTbmFwLnBsdWdpbihmdW5jdGlv biAoU25hcCwgRWxlbWVudCwgUGFwZXIsIGdsb2IsIEZyYWdtZW50KSB7Cisg ICAgdmFyIG9iamVjdFRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0 cmluZywKKyAgICAgICAgU3RyID0gU3RyaW5nLAorICAgICAgICBtYXRoID0g TWF0aCwKKyAgICAgICAgRSA9ICIiOworICAgIGZ1bmN0aW9uIE1hdHJpeChh LCBiLCBjLCBkLCBlLCBmKSB7CisgICAgICAgIGlmIChiID09IG51bGwgJiYg b2JqZWN0VG9TdHJpbmcuY2FsbChhKSA9PSAiW29iamVjdCBTVkdNYXRyaXhd IikgeworICAgICAgICAgICAgdGhpcy5hID0gYS5hOworICAgICAgICAgICAg dGhpcy5iID0gYS5iOworICAgICAgICAgICAgdGhpcy5jID0gYS5jOworICAg ICAgICAgICAgdGhpcy5kID0gYS5kOworICAgICAgICAgICAgdGhpcy5lID0g YS5lOworICAgICAgICAgICAgdGhpcy5mID0gYS5mOworICAgICAgICAgICAg cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChhICE9IG51bGwpIHsK KyAgICAgICAgICAgIHRoaXMuYSA9ICthOworICAgICAgICAgICAgdGhpcy5i ID0gK2I7CisgICAgICAgICAgICB0aGlzLmMgPSArYzsKKyAgICAgICAgICAg IHRoaXMuZCA9ICtkOworICAgICAgICAgICAgdGhpcy5lID0gK2U7CisgICAg ICAgICAgICB0aGlzLmYgPSArZjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIHRoaXMuYSA9IDE7CisgICAgICAgICAgICB0aGlzLmIgPSAwOwor ICAgICAgICAgICAgdGhpcy5jID0gMDsKKyAgICAgICAgICAgIHRoaXMuZCA9 IDE7CisgICAgICAgICAgICB0aGlzLmUgPSAwOworICAgICAgICAgICAgdGhp cy5mID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAoZnVuY3Rpb24gKG1h dHJpeHByb3RvKSB7CisgICAgICAgIC8qXAorICAgICAgICAgKiBNYXRyaXgu YWRkCisgICAgICAgICBbIG1ldGhvZCBdCisgICAgICAgICAqKgorICAgICAg ICAgKiBBZGRzIHRoZSBnaXZlbiBtYXRyaXggdG8gZXhpc3Rpbmcgb25lCisg ICAgICAgICAtIGEgKG51bWJlcikKKyAgICAgICAgIC0gYiAobnVtYmVyKQor ICAgICAgICAgLSBjIChudW1iZXIpCisgICAgICAgICAtIGQgKG51bWJlcikK KyAgICAgICAgIC0gZSAobnVtYmVyKQorICAgICAgICAgLSBmIChudW1iZXIp CisgICAgICAgICAqIG9yCisgICAgICAgICAtIG1hdHJpeCAob2JqZWN0KSBA TWF0cml4CisgICAgICAgIFwqLworICAgICAgICBtYXRyaXhwcm90by5hZGQg PSBmdW5jdGlvbiAoYSwgYiwgYywgZCwgZSwgZikgeworICAgICAgICAgICAg dmFyIG91dCA9IFtbXSwgW10sIFtdXSwKKyAgICAgICAgICAgICAgICBtID0g W1t0aGlzLmEsIHRoaXMuYywgdGhpcy5lXSwgW3RoaXMuYiwgdGhpcy5kLCB0 aGlzLmZdLCBbMCwgMCwgMV1dLAorICAgICAgICAgICAgICAgIG1hdHJpeCA9 IFtbYSwgYywgZV0sIFtiLCBkLCBmXSwgWzAsIDAsIDFdXSwKKyAgICAgICAg ICAgICAgICB4LCB5LCB6LCByZXM7CisKKyAgICAgICAgICAgIGlmIChhICYm IGEgaW5zdGFuY2VvZiBNYXRyaXgpIHsKKyAgICAgICAgICAgICAgICBtYXRy aXggPSBbW2EuYSwgYS5jLCBhLmVdLCBbYS5iLCBhLmQsIGEuZl0sIFswLCAw LCAxXV07CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoeCA9 IDA7IHggPCAzOyB4KyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKHkgPSAw OyB5IDwgMzsgeSsrKSB7CisgICAgICAgICAgICAgICAgICAgIHJlcyA9IDA7 CisgICAgICAgICAgICAgICAgICAgIGZvciAoeiA9IDA7IHogPCAzOyB6Kysp IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcyArPSBtW3hdW3pdICog bWF0cml4W3pdW3ldOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgICAgIG91dFt4XVt5XSA9IHJlczsKKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0aGlzLmEgPSBvdXRb MF1bMF07CisgICAgICAgICAgICB0aGlzLmIgPSBvdXRbMV1bMF07CisgICAg ICAgICAgICB0aGlzLmMgPSBvdXRbMF1bMV07CisgICAgICAgICAgICB0aGlz LmQgPSBvdXRbMV1bMV07CisgICAgICAgICAgICB0aGlzLmUgPSBvdXRbMF1b Ml07CisgICAgICAgICAgICB0aGlzLmYgPSBvdXRbMV1bMl07CisgICAgICAg ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfTsKKyAgICAgICAgLypcCisg ICAgICAgICAqIE1hdHJpeC5pbnZlcnQKKyAgICAgICAgIFsgbWV0aG9kIF0K KyAgICAgICAgICoqCisgICAgICAgICAqIFJldHVybnMgYW4gaW52ZXJ0ZWQg dmVyc2lvbiBvZiB0aGUgbWF0cml4CisgICAgICAgICA9IChvYmplY3QpIEBN YXRyaXgKKyAgICAgICAgXCovCisgICAgICAgIG1hdHJpeHByb3RvLmludmVy dCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHZhciBtZSA9IHRoaXMs CisgICAgICAgICAgICAgICAgeCA9IG1lLmEgKiBtZS5kIC0gbWUuYiAqIG1l LmM7CisgICAgICAgICAgICByZXR1cm4gbmV3IE1hdHJpeChtZS5kIC8geCwg LW1lLmIgLyB4LCAtbWUuYyAvIHgsIG1lLmEgLyB4LCAobWUuYyAqIG1lLmYg LSBtZS5kICogbWUuZSkgLyB4LCAobWUuYiAqIG1lLmUgLSBtZS5hICogbWUu ZikgLyB4KTsKKyAgICAgICAgfTsKKyAgICAgICAgLypcCisgICAgICAgICAq IE1hdHJpeC5jbG9uZQorICAgICAgICAgWyBtZXRob2QgXQorICAgICAgICAg KioKKyAgICAgICAgICogUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeAor ICAgICAgICAgPSAob2JqZWN0KSBATWF0cml4CisgICAgICAgIFwqLworICAg ICAgICBtYXRyaXhwcm90by5jbG9uZSA9IGZ1bmN0aW9uICgpIHsKKyAgICAg ICAgICAgIHJldHVybiBuZXcgTWF0cml4KHRoaXMuYSwgdGhpcy5iLCB0aGlz LmMsIHRoaXMuZCwgdGhpcy5lLCB0aGlzLmYpOworICAgICAgICB9OworICAg ICAgICAvKlwKKyAgICAgICAgICogTWF0cml4LnRyYW5zbGF0ZQorICAgICAg ICAgWyBtZXRob2QgXQorICAgICAgICAgKioKKyAgICAgICAgICogVHJhbnNs YXRlIHRoZSBtYXRyaXgKKyAgICAgICAgIC0geCAobnVtYmVyKSBob3Jpem9u dGFsIG9mZnNldCBkaXN0YW5jZQorICAgICAgICAgLSB5IChudW1iZXIpIHZl cnRpY2FsIG9mZnNldCBkaXN0YW5jZQorICAgICAgICBcKi8KKyAgICAgICAg bWF0cml4cHJvdG8udHJhbnNsYXRlID0gZnVuY3Rpb24gKHgsIHkpIHsKKyAg ICAgICAgICAgIHJldHVybiB0aGlzLmFkZCgxLCAwLCAwLCAxLCB4LCB5KTsK KyAgICAgICAgfTsKKyAgICAgICAgLypcCisgICAgICAgICAqIE1hdHJpeC5z Y2FsZQorICAgICAgICAgWyBtZXRob2QgXQorICAgICAgICAgKioKKyAgICAg ICAgICogU2NhbGVzIHRoZSBtYXRyaXgKKyAgICAgICAgIC0geCAobnVtYmVy KSBhbW91bnQgdG8gYmUgc2NhbGVkLCB3aXRoIGAxYCByZXN1bHRpbmcgaW4g bm8gY2hhbmdlCisgICAgICAgICAtIHkgKG51bWJlcikgI29wdGlvbmFsIGFt b3VudCB0byBzY2FsZSBhbG9uZyB0aGUgdmVydGljYWwgYXhpcy4gKE90aGVy d2lzZSBgeGAgYXBwbGllcyB0byBib3RoIGF4ZXMuKQorICAgICAgICAgLSBj eCAobnVtYmVyKSAjb3B0aW9uYWwgaG9yaXpvbnRhbCBvcmlnaW4gcG9pbnQg ZnJvbSB3aGljaCB0byBzY2FsZQorICAgICAgICAgLSBjeSAobnVtYmVyKSAj b3B0aW9uYWwgdmVydGljYWwgb3JpZ2luIHBvaW50IGZyb20gd2hpY2ggdG8g c2NhbGUKKyAgICAgICAgICogRGVmYXVsdCBjeCwgY3kgaXMgdGhlIG1pZGRs ZSBwb2ludCBvZiB0aGUgZWxlbWVudC4KKyAgICAgICAgXCovCisgICAgICAg IG1hdHJpeHByb3RvLnNjYWxlID0gZnVuY3Rpb24gKHgsIHksIGN4LCBjeSkg eworICAgICAgICAgICAgeSA9PSBudWxsICYmICh5ID0geCk7CisgICAgICAg ICAgICAoY3ggfHwgY3kpICYmIHRoaXMuYWRkKDEsIDAsIDAsIDEsIGN4LCBj eSk7CisgICAgICAgICAgICB0aGlzLmFkZCh4LCAwLCAwLCB5LCAwLCAwKTsK KyAgICAgICAgICAgIChjeCB8fCBjeSkgJiYgdGhpcy5hZGQoMSwgMCwgMCwg MSwgLWN4LCAtY3kpOworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg ICAgIH07CisgICAgICAgIC8qXAorICAgICAgICAgKiBNYXRyaXgucm90YXRl CisgICAgICAgICBbIG1ldGhvZCBdCisgICAgICAgICAqKgorICAgICAgICAg KiBSb3RhdGVzIHRoZSBtYXRyaXgKKyAgICAgICAgIC0gYSAobnVtYmVyKSBh bmdsZSBvZiByb3RhdGlvbiwgaW4gZGVncmVlcworICAgICAgICAgLSB4IChu dW1iZXIpIGhvcml6b250YWwgb3JpZ2luIHBvaW50IGZyb20gd2hpY2ggdG8g cm90YXRlCisgICAgICAgICAtIHkgKG51bWJlcikgdmVydGljYWwgb3JpZ2lu IHBvaW50IGZyb20gd2hpY2ggdG8gcm90YXRlCisgICAgICAgIFwqLworICAg ICAgICBtYXRyaXhwcm90by5yb3RhdGUgPSBmdW5jdGlvbiAoYSwgeCwgeSkg eworICAgICAgICAgICAgYSA9IFNuYXAucmFkKGEpOworICAgICAgICAgICAg eCA9IHggfHwgMDsKKyAgICAgICAgICAgIHkgPSB5IHx8IDA7CisgICAgICAg ICAgICB2YXIgY29zID0gK21hdGguY29zKGEpLnRvRml4ZWQoOSksCisgICAg ICAgICAgICAgICAgc2luID0gK21hdGguc2luKGEpLnRvRml4ZWQoOSk7Cisg ICAgICAgICAgICB0aGlzLmFkZChjb3MsIHNpbiwgLXNpbiwgY29zLCB4LCB5 KTsKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZCgxLCAwLCAwLCAxLCAt eCwgLXkpOworICAgICAgICB9OworICAgICAgICAvKlwKKyAgICAgICAgICog TWF0cml4LngKKyAgICAgICAgIFsgbWV0aG9kIF0KKyAgICAgICAgICoqCisg ICAgICAgICAqIFJldHVybnMgeCBjb29yZGluYXRlIGZvciBnaXZlbiBwb2lu dCBhZnRlciB0cmFuc2Zvcm1hdGlvbiBkZXNjcmliZWQgYnkgdGhlIG1hdHJp eC4gU2VlIGFsc28gQE1hdHJpeC55CisgICAgICAgICAtIHggKG51bWJlcikK KyAgICAgICAgIC0geSAobnVtYmVyKQorICAgICAgICAgPSAobnVtYmVyKSB4 CisgICAgICAgIFwqLworICAgICAgICBtYXRyaXhwcm90by54ID0gZnVuY3Rp b24gKHgsIHkpIHsKKyAgICAgICAgICAgIHJldHVybiB4ICogdGhpcy5hICsg eSAqIHRoaXMuYyArIHRoaXMuZTsKKyAgICAgICAgfTsKKyAgICAgICAgLypc CisgICAgICAgICAqIE1hdHJpeC55CisgICAgICAgICBbIG1ldGhvZCBdCisg ICAgICAgICAqKgorICAgICAgICAgKiBSZXR1cm5zIHkgY29vcmRpbmF0ZSBm b3IgZ2l2ZW4gcG9pbnQgYWZ0ZXIgdHJhbnNmb3JtYXRpb24gZGVzY3JpYmVk IGJ5IHRoZSBtYXRyaXguIFNlZSBhbHNvIEBNYXRyaXgueAorICAgICAgICAg LSB4IChudW1iZXIpCisgICAgICAgICAtIHkgKG51bWJlcikKKyAgICAgICAg ID0gKG51bWJlcikgeQorICAgICAgICBcKi8KKyAgICAgICAgbWF0cml4cHJv dG8ueSA9IGZ1bmN0aW9uICh4LCB5KSB7CisgICAgICAgICAgICByZXR1cm4g eCAqIHRoaXMuYiArIHkgKiB0aGlzLmQgKyB0aGlzLmY7CisgICAgICAgIH07 CisgICAgICAgIG1hdHJpeHByb3RvLmdldCA9IGZ1bmN0aW9uIChpKSB7Cisg ICAgICAgICAgICByZXR1cm4gK3RoaXNbU3RyLmZyb21DaGFyQ29kZSg5NyAr IGkpXS50b0ZpeGVkKDQpOworICAgICAgICB9OworICAgICAgICBtYXRyaXhw cm90by50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJl dHVybiAibWF0cml4KCIgKyBbdGhpcy5nZXQoMCksIHRoaXMuZ2V0KDEpLCB0 aGlzLmdldCgyKSwgdGhpcy5nZXQoMyksIHRoaXMuZ2V0KDQpLCB0aGlzLmdl dCg1KV0uam9pbigpICsgIikiOworICAgICAgICB9OworICAgICAgICBtYXRy aXhwcm90by5vZmZzZXQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICBy ZXR1cm4gW3RoaXMuZS50b0ZpeGVkKDQpLCB0aGlzLmYudG9GaXhlZCg0KV07 CisgICAgICAgIH07CisgICAgICAgIGZ1bmN0aW9uIG5vcm0oYSkgeworICAg ICAgICAgICAgcmV0dXJuIGFbMF0gKiBhWzBdICsgYVsxXSAqIGFbMV07Cisg ICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplKGEpIHsKKyAg ICAgICAgICAgIHZhciBtYWcgPSBtYXRoLnNxcnQobm9ybShhKSk7CisgICAg ICAgICAgICBhWzBdICYmIChhWzBdIC89IG1hZyk7CisgICAgICAgICAgICBh WzFdICYmIChhWzFdIC89IG1hZyk7CisgICAgICAgIH0KKyAgICAgICAgLypc CisgICAgICAgICAqIE1hdHJpeC5kZXRlcm1pbmFudAorICAgICAgICAgWyBt ZXRob2QgXQorICAgICAgICAgKioKKyAgICAgICAgICogRmluZHMgZGV0ZXJt aW5hbnQgb2YgdGhlIGdpdmVuIG1hdHJpeC4KKyAgICAgICAgID0gKG51bWJl cikgZGV0ZXJtaW5hbnQKKyAgICAgICAgXCovCisgICAgICAgIG1hdHJpeHBy b3RvLmRldGVybWluYW50ID0gZnVuY3Rpb24gKCkgeworICAgICAgICAgICAg cmV0dXJuIHRoaXMuYSAqIHRoaXMuZCAtIHRoaXMuYiAqIHRoaXMuYzsKKyAg ICAgICAgfTsKKyAgICAgICAgLypcCisgICAgICAgICAqIE1hdHJpeC5zcGxp dAorICAgICAgICAgWyBtZXRob2QgXQorICAgICAgICAgKioKKyAgICAgICAg ICogU3BsaXRzIG1hdHJpeCBpbnRvIHByaW1pdGl2ZSB0cmFuc2Zvcm1hdGlv bnMKKyAgICAgICAgID0gKG9iamVjdCkgaW4gZm9ybWF0OgorICAgICAgICAg byBkeCAobnVtYmVyKSB0cmFuc2xhdGlvbiBieSB4CisgICAgICAgICBvIGR5 IChudW1iZXIpIHRyYW5zbGF0aW9uIGJ5IHkKKyAgICAgICAgIG8gc2NhbGV4 IChudW1iZXIpIHNjYWxlIGJ5IHgKKyAgICAgICAgIG8gc2NhbGV5IChudW1i ZXIpIHNjYWxlIGJ5IHkKKyAgICAgICAgIG8gc2hlYXIgKG51bWJlcikgc2hl YXIKKyAgICAgICAgIG8gcm90YXRlIChudW1iZXIpIHJvdGF0aW9uIGluIGRl ZworICAgICAgICAgbyBpc1NpbXBsZSAoYm9vbGVhbikgY291bGQgaXQgYmUg cmVwcmVzZW50ZWQgdmlhIHNpbXBsZSB0cmFuc2Zvcm1hdGlvbnMKKyAgICAg ICAgXCovCisgICAgICAgIG1hdHJpeHByb3RvLnNwbGl0ID0gZnVuY3Rpb24g KCkgeworICAgICAgICAgICAgdmFyIG91dCA9IHt9OworICAgICAgICAgICAg Ly8gdHJhbnNsYXRpb24KKyAgICAgICAgICAgIG91dC5keCA9IHRoaXMuZTsK KyAgICAgICAgICAgIG91dC5keSA9IHRoaXMuZjsKKworICAgICAgICAgICAg Ly8gc2NhbGUgYW5kIHNoZWFyCisgICAgICAgICAgICB2YXIgcm93ID0gW1t0 aGlzLmEsIHRoaXMuY10sIFt0aGlzLmIsIHRoaXMuZF1dOworICAgICAgICAg ICAgb3V0LnNjYWxleCA9IG1hdGguc3FydChub3JtKHJvd1swXSkpOworICAg ICAgICAgICAgbm9ybWFsaXplKHJvd1swXSk7CisKKyAgICAgICAgICAgIG91 dC5zaGVhciA9IHJvd1swXVswXSAqIHJvd1sxXVswXSArIHJvd1swXVsxXSAq IHJvd1sxXVsxXTsKKyAgICAgICAgICAgIHJvd1sxXSA9IFtyb3dbMV1bMF0g LSByb3dbMF1bMF0gKiBvdXQuc2hlYXIsIHJvd1sxXVsxXSAtIHJvd1swXVsx XSAqIG91dC5zaGVhcl07CisKKyAgICAgICAgICAgIG91dC5zY2FsZXkgPSBt YXRoLnNxcnQobm9ybShyb3dbMV0pKTsKKyAgICAgICAgICAgIG5vcm1hbGl6 ZShyb3dbMV0pOworICAgICAgICAgICAgb3V0LnNoZWFyIC89IG91dC5zY2Fs ZXk7CisKKyAgICAgICAgICAgIGlmICh0aGlzLmRldGVybWluYW50KCkgPCAw KSB7CisgICAgICAgICAgICAgICAgb3V0LnNjYWxleCA9IC1vdXQuc2NhbGV4 OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyByb3RhdGlvbgor ICAgICAgICAgICAgdmFyIHNpbiA9IC1yb3dbMF1bMV0sCisgICAgICAgICAg ICAgICAgY29zID0gcm93WzFdWzFdOworICAgICAgICAgICAgaWYgKGNvcyA8 IDApIHsKKyAgICAgICAgICAgICAgICBvdXQucm90YXRlID0gU25hcC5kZWco bWF0aC5hY29zKGNvcykpOworICAgICAgICAgICAgICAgIGlmIChzaW4gPCAw KSB7CisgICAgICAgICAgICAgICAgICAgIG91dC5yb3RhdGUgPSAzNjAgLSBv dXQucm90YXRlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgb3V0LnJvdGF0ZSA9IFNuYXAuZGVn KG1hdGguYXNpbihzaW4pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgb3V0LmlzU2ltcGxlID0gIStvdXQuc2hlYXIudG9GaXhlZCg5KSAmJiAo b3V0LnNjYWxleC50b0ZpeGVkKDkpID09IG91dC5zY2FsZXkudG9GaXhlZCg5 KSB8fCAhb3V0LnJvdGF0ZSk7CisgICAgICAgICAgICBvdXQuaXNTdXBlclNp bXBsZSA9ICErb3V0LnNoZWFyLnRvRml4ZWQoOSkgJiYgb3V0LnNjYWxleC50 b0ZpeGVkKDkpID09IG91dC5zY2FsZXkudG9GaXhlZCg5KSAmJiAhb3V0LnJv dGF0ZTsKKyAgICAgICAgICAgIG91dC5ub1JvdGF0aW9uID0gIStvdXQuc2hl YXIudG9GaXhlZCg5KSAmJiAhb3V0LnJvdGF0ZTsKKyAgICAgICAgICAgIHJl dHVybiBvdXQ7CisgICAgICAgIH07CisgICAgICAgIC8qXAorICAgICAgICAg KiBNYXRyaXgudG9UcmFuc2Zvcm1TdHJpbmcKKyAgICAgICAgIFsgbWV0aG9k IF0KKyAgICAgICAgICoqCisgICAgICAgICAqIFJldHVybnMgdHJhbnNmb3Jt IHN0cmluZyB0aGF0IHJlcHJlc2VudHMgZ2l2ZW4gbWF0cml4CisgICAgICAg ICA9IChzdHJpbmcpIHRyYW5zZm9ybSBzdHJpbmcKKyAgICAgICAgXCovCisg ICAgICAgIG1hdHJpeHByb3RvLnRvVHJhbnNmb3JtU3RyaW5nID0gZnVuY3Rp b24gKHNob3J0ZXIpIHsKKyAgICAgICAgICAgIHZhciBzID0gc2hvcnRlciB8 fCB0aGlzLnNwbGl0KCk7CisgICAgICAgICAgICBpZiAoIStzLnNoZWFyLnRv Rml4ZWQoOSkpIHsKKyAgICAgICAgICAgICAgICBzLnNjYWxleCA9ICtzLnNj YWxleC50b0ZpeGVkKDQpOworICAgICAgICAgICAgICAgIHMuc2NhbGV5ID0g K3Muc2NhbGV5LnRvRml4ZWQoNCk7CisgICAgICAgICAgICAgICAgcy5yb3Rh dGUgPSArcy5yb3RhdGUudG9GaXhlZCg0KTsKKyAgICAgICAgICAgICAgICBy ZXR1cm4gIChzLmR4IHx8IHMuZHkgPyAidCIgKyBbK3MuZHgudG9GaXhlZCg0 KSwgK3MuZHkudG9GaXhlZCg0KV0gOiBFKSArCisgICAgICAgICAgICAgICAg ICAgICAgICAocy5zY2FsZXggIT0gMSB8fCBzLnNjYWxleSAhPSAxID8gInMi ICsgW3Muc2NhbGV4LCBzLnNjYWxleSwgMCwgMF0gOiBFKSArCisgICAgICAg ICAgICAgICAgICAgICAgICAocy5yb3RhdGUgPyAiciIgKyBbK3Mucm90YXRl LnRvRml4ZWQoNCksIDAsIDBdIDogRSk7CisgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgIHJldHVybiAibSIgKyBbdGhpcy5nZXQoMCks IHRoaXMuZ2V0KDEpLCB0aGlzLmdldCgyKSwgdGhpcy5nZXQoMyksIHRoaXMu Z2V0KDQpLCB0aGlzLmdldCg1KV07CisgICAgICAgICAgICB9CisgICAgICAg IH07CisgICAgfSkoTWF0cml4LnByb3RvdHlwZSk7CisgICAgLypcCisgICAg ICogU25hcC5NYXRyaXgKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAg ICAqIE1hdHJpeCBjb25zdHJ1Y3RvciwgZXh0ZW5kIG9uIHlvdXIgb3duIHJp c2suCisgICAgICogVG8gY3JlYXRlIG1hdHJpY2VzIHVzZSBAU25hcC5tYXRy aXguCisgICAgXCovCisgICAgU25hcC5NYXRyaXggPSBNYXRyaXg7CisgICAg LypcCisgICAgICogU25hcC5tYXRyaXgKKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIFV0aWxpdHkgbWV0aG9kCisgICAgICoqCisgICAgICog UmV0dXJucyBhIG1hdHJpeCBiYXNlZCBvbiB0aGUgZ2l2ZW4gcGFyYW1ldGVy cworICAgICAtIGEgKG51bWJlcikKKyAgICAgLSBiIChudW1iZXIpCisgICAg IC0gYyAobnVtYmVyKQorICAgICAtIGQgKG51bWJlcikKKyAgICAgLSBlIChu dW1iZXIpCisgICAgIC0gZiAobnVtYmVyKQorICAgICAqIG9yCisgICAgIC0g c3ZnTWF0cml4IChTVkdNYXRyaXgpCisgICAgID0gKG9iamVjdCkgQE1hdHJp eAorICAgIFwqLworICAgIFNuYXAubWF0cml4ID0gZnVuY3Rpb24gKGEsIGIs IGMsIGQsIGUsIGYpIHsKKyAgICAgICAgcmV0dXJuIG5ldyBNYXRyaXgoYSwg YiwgYywgZCwgZSwgZik7CisgICAgfTsKK30pOworLy8gQ29weXJpZ2h0IChj KSAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRz IHJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUg TGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91 IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3 aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9m IHRoZSBMaWNlbnNlIGF0CisvLworLy8gaHR0cDovL3d3dy5hcGFjaGUub3Jn L2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVk IGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBz b2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMg ZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQg V0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIg ZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0 aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFu ZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCitTbmFwLnBs dWdpbihmdW5jdGlvbiAoU25hcCwgRWxlbWVudCwgUGFwZXIsIGdsb2IsIEZy YWdtZW50KSB7CisgICAgdmFyIGhhcyA9ICJoYXNPd25Qcm9wZXJ0eSIsCisg ICAgICAgIG1ha2UgPSBTbmFwLl8ubWFrZSwKKyAgICAgICAgd3JhcCA9IFNu YXAuXy53cmFwLAorICAgICAgICBpcyA9IFNuYXAuaXMsCisgICAgICAgIGdl dFNvbWVEZWZzID0gU25hcC5fLmdldFNvbWVEZWZzLAorICAgICAgICByZVVS TFZhbHVlID0gL151cmxcKCM/KFteKV0rKVwpJC8sCisgICAgICAgICQgPSBT bmFwLl8uJCwKKyAgICAgICAgVVJMID0gU25hcC51cmwsCisgICAgICAgIFN0 ciA9IFN0cmluZywKKyAgICAgICAgc2VwYXJhdG9yID0gU25hcC5fLnNlcGFy YXRvciwKKyAgICAgICAgRSA9ICIiOworICAgIC8vIEF0dHJpYnV0ZXMgZXZl bnQgaGFuZGxlcnMKKyAgICBldmUub24oInNuYXAudXRpbC5hdHRyLm1hc2si LCBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgaWYgKHZhbHVlIGluc3Rh bmNlb2YgRWxlbWVudCB8fCB2YWx1ZSBpbnN0YW5jZW9mIEZyYWdtZW50KSB7 CisgICAgICAgICAgICBldmUuc3RvcCgpOworICAgICAgICAgICAgaWYgKHZh bHVlIGluc3RhbmNlb2YgRnJhZ21lbnQgJiYgdmFsdWUubm9kZS5jaGlsZE5v ZGVzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2 YWx1ZS5ub2RlLmZpcnN0Q2hpbGQ7CisgICAgICAgICAgICAgICAgZ2V0U29t ZURlZnModGhpcykuYXBwZW5kQ2hpbGQodmFsdWUpOworICAgICAgICAgICAg ICAgIHZhbHVlID0gd3JhcCh2YWx1ZSk7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBpZiAodmFsdWUudHlwZSA9PSAibWFzayIpIHsKKyAgICAgICAg ICAgICAgICB2YXIgbWFzayA9IHZhbHVlOworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICBtYXNrID0gbWFrZSgibWFzayIsIGdldFNv bWVEZWZzKHRoaXMpKTsKKyAgICAgICAgICAgICAgICBtYXNrLm5vZGUuYXBw ZW5kQ2hpbGQodmFsdWUubm9kZSk7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICAhbWFzay5ub2RlLmlkICYmICQobWFzay5ub2RlLCB7CisgICAgICAg ICAgICAgICAgaWQ6IG1hc2suaWQKKyAgICAgICAgICAgIH0pOworICAgICAg ICAgICAgJCh0aGlzLm5vZGUsIHsKKyAgICAgICAgICAgICAgICBtYXNrOiBV UkwobWFzay5pZCkKKyAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAg fSk7CisgICAgKGZ1bmN0aW9uIChjbGlwSXQpIHsKKyAgICAgICAgZXZlLm9u KCJzbmFwLnV0aWwuYXR0ci5jbGlwIiwgY2xpcEl0KTsKKyAgICAgICAgZXZl Lm9uKCJzbmFwLnV0aWwuYXR0ci5jbGlwLXBhdGgiLCBjbGlwSXQpOworICAg ICAgICBldmUub24oInNuYXAudXRpbC5hdHRyLmNsaXBQYXRoIiwgY2xpcEl0 KTsKKyAgICB9KGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBpZiAodmFs dWUgaW5zdGFuY2VvZiBFbGVtZW50IHx8IHZhbHVlIGluc3RhbmNlb2YgRnJh Z21lbnQpIHsKKyAgICAgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgICAg ICBpZiAodmFsdWUudHlwZSA9PSAiY2xpcFBhdGgiKSB7CisgICAgICAgICAg ICAgICAgdmFyIGNsaXAgPSB2YWx1ZTsKKyAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgY2xpcCA9IG1ha2UoImNsaXBQYXRoIiwgZ2V0 U29tZURlZnModGhpcykpOworICAgICAgICAgICAgICAgIGNsaXAubm9kZS5h cHBlbmRDaGlsZCh2YWx1ZS5ub2RlKTsKKyAgICAgICAgICAgICAgICAhY2xp cC5ub2RlLmlkICYmICQoY2xpcC5ub2RlLCB7CisgICAgICAgICAgICAgICAg ICAgIGlkOiBjbGlwLmlkCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICAkKHRoaXMubm9kZSwgeworICAgICAgICAg ICAgICAgICJjbGlwLXBhdGgiOiBVUkwoY2xpcC5ub2RlLmlkIHx8IGNsaXAu aWQpCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0pKTsKKyAg ICBmdW5jdGlvbiBmaWxsU3Ryb2tlKG5hbWUpIHsKKyAgICAgICAgcmV0dXJu IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgICAgZXZlLnN0b3AoKTsK KyAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZyYWdtZW50ICYm IHZhbHVlLm5vZGUuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSAmJgorICAgICAg ICAgICAgICAgICh2YWx1ZS5ub2RlLmZpcnN0Q2hpbGQudGFnTmFtZSA9PSAi cmFkaWFsR3JhZGllbnQiIHx8CisgICAgICAgICAgICAgICAgdmFsdWUubm9k ZS5maXJzdENoaWxkLnRhZ05hbWUgPT0gImxpbmVhckdyYWRpZW50IiB8fAor ICAgICAgICAgICAgICAgIHZhbHVlLm5vZGUuZmlyc3RDaGlsZC50YWdOYW1l ID09ICJwYXR0ZXJuIikpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZh bHVlLm5vZGUuZmlyc3RDaGlsZDsKKyAgICAgICAgICAgICAgICBnZXRTb21l RGVmcyh0aGlzKS5hcHBlbmRDaGlsZCh2YWx1ZSk7CisgICAgICAgICAgICAg ICAgdmFsdWUgPSB3cmFwKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQpIHsKKyAgICAg ICAgICAgICAgICBpZiAodmFsdWUudHlwZSA9PSAicmFkaWFsR3JhZGllbnQi IHx8IHZhbHVlLnR5cGUgPT0gImxpbmVhckdyYWRpZW50IgorICAgICAgICAg ICAgICAgICAgIHx8IHZhbHVlLnR5cGUgPT0gInBhdHRlcm4iKSB7CisgICAg ICAgICAgICAgICAgICAgIGlmICghdmFsdWUubm9kZS5pZCkgeworICAgICAg ICAgICAgICAgICAgICAgICAgJCh2YWx1ZS5ub2RlLCB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaWQ6IHZhbHVlLmlkCisgICAgICAgICAgICAg ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgICAgICB2YXIgZmlsbCA9IFVSTCh2YWx1ZS5ub2RlLmlkKTsK KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg ICBmaWxsID0gdmFsdWUuYXR0cihuYW1lKTsKKyAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZpbGwg PSBTbmFwLmNvbG9yKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoZmls bC5lcnJvcikgeworICAgICAgICAgICAgICAgICAgICB2YXIgZ3JhZCA9IFNu YXAoZ2V0U29tZURlZnModGhpcykub3duZXJTVkdFbGVtZW50KS5ncmFkaWVu dCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChncmFkKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWdyYWQubm9kZS5pZCkgewor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZ3JhZC5ub2RlLCB7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBncmFkLmlkCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxsID0g VVJMKGdyYWQubm9kZS5pZCk7CisgICAgICAgICAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmaWxsID0gdmFsdWU7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgICAgICBmaWxsID0gU3RyKGZpbGwpOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZh ciBhdHRycyA9IHt9OworICAgICAgICAgICAgYXR0cnNbbmFtZV0gPSBmaWxs OworICAgICAgICAgICAgJCh0aGlzLm5vZGUsIGF0dHJzKTsKKyAgICAgICAg ICAgIHRoaXMubm9kZS5zdHlsZVtuYW1lXSA9IEU7CisgICAgICAgIH07Cisg ICAgfQorICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIuZmlsbCIsIGZpbGxT dHJva2UoImZpbGwiKSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci5z dHJva2UiLCBmaWxsU3Ryb2tlKCJzdHJva2UiKSk7CisgICAgdmFyIGdyYWRy ZyA9IC9eKFtscl0pKD86XCgoW14pXSopXCkpPyguKikkL2k7CisgICAgZXZl Lm9uKCJzbmFwLnV0aWwuZ3JhZC5wYXJzZSIsIGZ1bmN0aW9uIHBhcnNlR3Jh ZChzdHJpbmcpIHsKKyAgICAgICAgc3RyaW5nID0gU3RyKHN0cmluZyk7Cisg ICAgICAgIHZhciB0b2tlbnMgPSBzdHJpbmcubWF0Y2goZ3JhZHJnKTsKKyAg ICAgICAgaWYgKCF0b2tlbnMpIHsKKyAgICAgICAgICAgIHJldHVybiBudWxs OworICAgICAgICB9CisgICAgICAgIHZhciB0eXBlID0gdG9rZW5zWzFdLAor ICAgICAgICAgICAgcGFyYW1zID0gdG9rZW5zWzJdLAorICAgICAgICAgICAg c3RvcHMgPSB0b2tlbnNbM107CisgICAgICAgIHBhcmFtcyA9IHBhcmFtcy5z cGxpdCgvXHMqLFxzKi8pLm1hcChmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAg ICAgIHJldHVybiArZWwgPT0gZWwgPyArZWwgOiBlbDsKKyAgICAgICAgfSk7 CisgICAgICAgIGlmIChwYXJhbXMubGVuZ3RoID09IDEgJiYgcGFyYW1zWzBd ID09IDApIHsKKyAgICAgICAgICAgIHBhcmFtcyA9IFtdOworICAgICAgICB9 CisgICAgICAgIHN0b3BzID0gc3RvcHMuc3BsaXQoIi0iKTsKKyAgICAgICAg c3RvcHMgPSBzdG9wcy5tYXAoZnVuY3Rpb24gKGVsKSB7CisgICAgICAgICAg ICBlbCA9IGVsLnNwbGl0KCI6Iik7CisgICAgICAgICAgICB2YXIgb3V0ID0g eworICAgICAgICAgICAgICAgIGNvbG9yOiBlbFswXQorICAgICAgICAgICAg fTsKKyAgICAgICAgICAgIGlmIChlbFsxXSkgeworICAgICAgICAgICAgICAg IG91dC5vZmZzZXQgPSBwYXJzZUZsb2F0KGVsWzFdKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHJldHVybiBvdXQ7CisgICAgICAgIH0pOworICAg ICAgICByZXR1cm4geworICAgICAgICAgICAgdHlwZTogdHlwZSwKKyAgICAg ICAgICAgIHBhcmFtczogcGFyYW1zLAorICAgICAgICAgICAgc3RvcHM6IHN0 b3BzCisgICAgICAgIH07CisgICAgfSk7CisKKyAgICBldmUub24oInNuYXAu dXRpbC5hdHRyLmQiLCBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgZXZl LnN0b3AoKTsKKyAgICAgICAgaWYgKGlzKHZhbHVlLCAiYXJyYXkiKSAmJiBp cyh2YWx1ZVswXSwgImFycmF5IikpIHsKKyAgICAgICAgICAgIHZhbHVlID0g U25hcC5wYXRoLnRvU3RyaW5nLmNhbGwodmFsdWUpOworICAgICAgICB9Cisg ICAgICAgIHZhbHVlID0gU3RyKHZhbHVlKTsKKyAgICAgICAgaWYgKHZhbHVl Lm1hdGNoKC9bcnVvXS9pKSkgeworICAgICAgICAgICAgdmFsdWUgPSBTbmFw LnBhdGgudG9BYnNvbHV0ZSh2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAg JCh0aGlzLm5vZGUsIHtkOiB2YWx1ZX0pOworICAgIH0pKC0xKTsKKyAgICBl dmUub24oInNuYXAudXRpbC5hdHRyLiN0ZXh0IiwgZnVuY3Rpb24gKHZhbHVl KSB7CisgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgIHZhbHVlID0gU3Ry KHZhbHVlKTsKKyAgICAgICAgdmFyIHR4dCA9IGdsb2IuZG9jLmNyZWF0ZVRl eHROb2RlKHZhbHVlKTsKKyAgICAgICAgd2hpbGUgKHRoaXMubm9kZS5maXJz dENoaWxkKSB7CisgICAgICAgICAgICB0aGlzLm5vZGUucmVtb3ZlQ2hpbGQo dGhpcy5ub2RlLmZpcnN0Q2hpbGQpOworICAgICAgICB9CisgICAgICAgIHRo aXMubm9kZS5hcHBlbmRDaGlsZCh0eHQpOworICAgIH0pKC0xKTsKKyAgICBl dmUub24oInNuYXAudXRpbC5hdHRyLnBhdGgiLCBmdW5jdGlvbiAodmFsdWUp IHsKKyAgICAgICAgZXZlLnN0b3AoKTsKKyAgICAgICAgdGhpcy5hdHRyKHtk OiB2YWx1ZX0pOworICAgIH0pKC0xKTsKKyAgICBldmUub24oInNuYXAudXRp bC5hdHRyLmNsYXNzIiwgZnVuY3Rpb24gKHZhbHVlKSB7CisgICAgICAgIGV2 ZS5zdG9wKCk7CisgICAgICAgIHRoaXMubm9kZS5jbGFzc05hbWUuYmFzZVZh bCA9IHZhbHVlOworICAgIH0pKC0xKTsKKyAgICBldmUub24oInNuYXAudXRp bC5hdHRyLnZpZXdCb3giLCBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg dmFyIHZiOworICAgICAgICBpZiAoaXModmFsdWUsICJvYmplY3QiKSAmJiAi eCIgaW4gdmFsdWUpIHsKKyAgICAgICAgICAgIHZiID0gW3ZhbHVlLngsIHZh bHVlLnksIHZhbHVlLndpZHRoLCB2YWx1ZS5oZWlnaHRdLmpvaW4oIiAiKTsK KyAgICAgICAgfSBlbHNlIGlmIChpcyh2YWx1ZSwgImFycmF5IikpIHsKKyAg ICAgICAgICAgIHZiID0gdmFsdWUuam9pbigiICIpOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgdmIgPSB2YWx1ZTsKKyAgICAgICAgfQorICAg ICAgICAkKHRoaXMubm9kZSwgeworICAgICAgICAgICAgdmlld0JveDogdmIK KyAgICAgICAgfSk7CisgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgfSkoLTEp OworICAgIGV2ZS5vbigic25hcC51dGlsLmF0dHIudHJhbnNmb3JtIiwgZnVu Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgIHRoaXMudHJhbnNmb3JtKHZhbHVl KTsKKyAgICAgICAgZXZlLnN0b3AoKTsKKyAgICB9KSgtMSk7CisgICAgZXZl Lm9uKCJzbmFwLnV0aWwuYXR0ci5yIiwgZnVuY3Rpb24gKHZhbHVlKSB7Cisg ICAgICAgIGlmICh0aGlzLnR5cGUgPT0gInJlY3QiKSB7CisgICAgICAgICAg ICBldmUuc3RvcCgpOworICAgICAgICAgICAgJCh0aGlzLm5vZGUsIHsKKyAg ICAgICAgICAgICAgICByeDogdmFsdWUsCisgICAgICAgICAgICAgICAgcnk6 IHZhbHVlCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0pKC0x KTsKKyAgICBldmUub24oInNuYXAudXRpbC5hdHRyLnRleHRwYXRoIiwgZnVu Y3Rpb24gKHZhbHVlKSB7CisgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAg IGlmICh0aGlzLnR5cGUgPT0gInRleHQiKSB7CisgICAgICAgICAgICB2YXIg aWQsIHRwLCBub2RlOworICAgICAgICAgICAgaWYgKCF2YWx1ZSAmJiB0aGlz LnRleHRQYXRoKSB7CisgICAgICAgICAgICAgICAgdHAgPSB0aGlzLnRleHRQ YXRoOworICAgICAgICAgICAgICAgIHdoaWxlICh0cC5ub2RlLmZpcnN0Q2hp bGQpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5ub2RlLmFwcGVuZENo aWxkKHRwLm5vZGUuZmlyc3RDaGlsZCk7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIHRwLnJlbW92ZSgpOworICAgICAgICAgICAgICAg IGRlbGV0ZSB0aGlzLnRleHRQYXRoOworICAgICAgICAgICAgICAgIHJldHVy bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpcyh2YWx1ZSwg InN0cmluZyIpKSB7CisgICAgICAgICAgICAgICAgdmFyIGRlZnMgPSBnZXRT b21lRGVmcyh0aGlzKSwKKyAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHdy YXAoZGVmcy5wYXJlbnROb2RlKS5wYXRoKHZhbHVlKTsKKyAgICAgICAgICAg ICAgICBkZWZzLmFwcGVuZENoaWxkKHBhdGgubm9kZSk7CisgICAgICAgICAg ICAgICAgaWQgPSBwYXRoLmlkOworICAgICAgICAgICAgICAgIHBhdGguYXR0 cih7aWQ6IGlkfSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg ICAgICAgIHZhbHVlID0gd3JhcCh2YWx1ZSk7CisgICAgICAgICAgICAgICAg aWYgKHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudCkgeworICAgICAgICAgICAg ICAgICAgICBpZCA9IHZhbHVlLmF0dHIoImlkIik7CisgICAgICAgICAgICAg ICAgICAgIGlmICghaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlk ID0gdmFsdWUuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5h dHRyKHtpZDogaWR9KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChp ZCkgeworICAgICAgICAgICAgICAgIHRwID0gdGhpcy50ZXh0UGF0aDsKKyAg ICAgICAgICAgICAgICBub2RlID0gdGhpcy5ub2RlOworICAgICAgICAgICAg ICAgIGlmICh0cCkgeworICAgICAgICAgICAgICAgICAgICB0cC5hdHRyKHsi eGxpbms6aHJlZiI6ICIjIiArIGlkfSk7CisgICAgICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHAgPSAkKCJ0ZXh0UGF0aCIs IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICJ4bGluazpocmVmIjogIiMi ICsgaWQKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAg ICAgICAgIHdoaWxlIChub2RlLmZpcnN0Q2hpbGQpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHRwLmFwcGVuZENoaWxkKG5vZGUuZmlyc3RDaGlsZCk7 CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg bm9kZS5hcHBlbmRDaGlsZCh0cCk7CisgICAgICAgICAgICAgICAgICAgIHRo aXMudGV4dFBhdGggPSB3cmFwKHRwKTsKKyAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KSgtMSk7CisgICAgZXZl Lm9uKCJzbmFwLnV0aWwuYXR0ci50ZXh0IiwgZnVuY3Rpb24gKHZhbHVlKSB7 CisgICAgICAgIGlmICh0aGlzLnR5cGUgPT0gInRleHQiKSB7CisgICAgICAg ICAgICB2YXIgaSA9IDAsCisgICAgICAgICAgICAgICAgbm9kZSA9IHRoaXMu bm9kZSwKKyAgICAgICAgICAgICAgICB0dW5lciA9IGZ1bmN0aW9uIChjaHVu aykgeworICAgICAgICAgICAgICAgICAgICB2YXIgb3V0ID0gJCgidHNwYW4i KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzKGNodW5rLCAiYXJyYXki KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7 IGkgPCBjaHVuay5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG91dC5hcHBlbmRDaGlsZCh0dW5lcihjaHVua1tpXSkpOwor ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgb3V0LmFwcGVu ZENoaWxkKGdsb2IuZG9jLmNyZWF0ZVRleHROb2RlKGNodW5rKSk7CisgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0Lm5v cm1hbGl6ZSAmJiBvdXQubm9ybWFsaXplKCk7CisgICAgICAgICAgICAgICAg ICAgIHJldHVybiBvdXQ7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg ICAgIHdoaWxlIChub2RlLmZpcnN0Q2hpbGQpIHsKKyAgICAgICAgICAgICAg ICBub2RlLnJlbW92ZUNoaWxkKG5vZGUuZmlyc3RDaGlsZCk7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICB2YXIgdHVuZWQgPSB0dW5lcih2YWx1ZSk7 CisgICAgICAgICAgICB3aGlsZSAodHVuZWQuZmlyc3RDaGlsZCkgeworICAg ICAgICAgICAgICAgIG5vZGUuYXBwZW5kQ2hpbGQodHVuZWQuZmlyc3RDaGls ZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZXZlLnN0 b3AoKTsKKyAgICB9KSgtMSk7CisgICAgZnVuY3Rpb24gc2V0Rm9udFNpemUo dmFsdWUpIHsKKyAgICAgICAgZXZlLnN0b3AoKTsKKyAgICAgICAgaWYgKHZh bHVlID09ICt2YWx1ZSkgeworICAgICAgICAgICAgdmFsdWUgKz0gInB4IjsK KyAgICAgICAgfQorICAgICAgICB0aGlzLm5vZGUuc3R5bGUuZm9udFNpemUg PSB2YWx1ZTsKKyAgICB9CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci5m b250U2l6ZSIsIHNldEZvbnRTaXplKSgtMSk7CisgICAgZXZlLm9uKCJzbmFw LnV0aWwuYXR0ci5mb250LXNpemUiLCBzZXRGb250U2l6ZSkoLTEpOworCisK KyAgICBldmUub24oInNuYXAudXRpbC5nZXRhdHRyLnRyYW5zZm9ybSIsIGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgZXZlLnN0b3AoKTsKKyAgICAgICAgcmV0 dXJuIHRoaXMudHJhbnNmb3JtKCk7CisgICAgfSkoLTEpOworICAgIGV2ZS5v bigic25hcC51dGlsLmdldGF0dHIudGV4dHBhdGgiLCBmdW5jdGlvbiAoKSB7 CisgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgIHJldHVybiB0aGlzLnRl eHRQYXRoOworICAgIH0pKC0xKTsKKyAgICAvLyBNYXJrZXJzCisgICAgKGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgZnVuY3Rpb24gZ2V0dGVyKGVuZCkgewor ICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg ICAgICBldmUuc3RvcCgpOworICAgICAgICAgICAgICAgIHZhciBzdHlsZSA9 IGdsb2IuZG9jLmRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGUodGhpcy5u b2RlLCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCJtYXJrZXItIiArIGVuZCk7 CisgICAgICAgICAgICAgICAgaWYgKHN0eWxlID09ICJub25lIikgeworICAg ICAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGU7CisgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNuYXAo Z2xvYi5kb2MuZ2V0RWxlbWVudEJ5SWQoc3R5bGUubWF0Y2gocmVVUkxWYWx1 ZSlbMV0pKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Owor ICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIHNldHRlcihlbmQpIHsKKyAg ICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAg ICAgICAgICBldmUuc3RvcCgpOworICAgICAgICAgICAgICAgIHZhciBuYW1l ID0gIm1hcmtlciIgKyBlbmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBl bmQuc3Vic3RyaW5nKDEpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9 PSAiIiB8fCAhdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5u b2RlLnN0eWxlW25hbWVdID0gIm5vbmUiOworICAgICAgICAgICAgICAgICAg ICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGlmICh2YWx1ZS50eXBlID09ICJtYXJrZXIiKSB7CisgICAgICAgICAgICAg ICAgICAgIHZhciBpZCA9IHZhbHVlLm5vZGUuaWQ7CisgICAgICAgICAgICAg ICAgICAgIGlmICghaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICQo dmFsdWUubm9kZSwge2lkOiB2YWx1ZS5pZH0pOworICAgICAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICAgICAgICAgIHRoaXMubm9kZS5zdHlsZVtu YW1lXSA9IFVSTChpZCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9OworICAgICAgICB9 CisgICAgICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIubWFya2VyLWVu ZCIsIGdldHRlcigiZW5kIikpKC0xKTsKKyAgICAgICAgZXZlLm9uKCJzbmFw LnV0aWwuZ2V0YXR0ci5tYXJrZXJFbmQiLCBnZXR0ZXIoImVuZCIpKSgtMSk7 CisgICAgICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIubWFya2VyLXN0 YXJ0IiwgZ2V0dGVyKCJzdGFydCIpKSgtMSk7CisgICAgICAgIGV2ZS5vbigi c25hcC51dGlsLmdldGF0dHIubWFya2VyU3RhcnQiLCBnZXR0ZXIoInN0YXJ0 IikpKC0xKTsKKyAgICAgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5t YXJrZXItbWlkIiwgZ2V0dGVyKCJtaWQiKSkoLTEpOworICAgICAgICBldmUu b24oInNuYXAudXRpbC5nZXRhdHRyLm1hcmtlck1pZCIsIGdldHRlcigibWlk IikpKC0xKTsKKyAgICAgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci5tYXJr ZXItZW5kIiwgc2V0dGVyKCJlbmQiKSkoLTEpOworICAgICAgICBldmUub24o InNuYXAudXRpbC5hdHRyLm1hcmtlckVuZCIsIHNldHRlcigiZW5kIikpKC0x KTsKKyAgICAgICAgZXZlLm9uKCJzbmFwLnV0aWwuYXR0ci5tYXJrZXItc3Rh cnQiLCBzZXR0ZXIoInN0YXJ0IikpKC0xKTsKKyAgICAgICAgZXZlLm9uKCJz bmFwLnV0aWwuYXR0ci5tYXJrZXJTdGFydCIsIHNldHRlcigic3RhcnQiKSko LTEpOworICAgICAgICBldmUub24oInNuYXAudXRpbC5hdHRyLm1hcmtlci1t aWQiLCBzZXR0ZXIoIm1pZCIpKSgtMSk7CisgICAgICAgIGV2ZS5vbigic25h cC51dGlsLmF0dHIubWFya2VyTWlkIiwgc2V0dGVyKCJtaWQiKSkoLTEpOwor ICAgIH0oKSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5yIiwg ZnVuY3Rpb24gKCkgeworICAgICAgICBpZiAodGhpcy50eXBlID09ICJyZWN0 IiAmJiAkKHRoaXMubm9kZSwgInJ4IikgPT0gJCh0aGlzLm5vZGUsICJyeSIp KSB7CisgICAgICAgICAgICBldmUuc3RvcCgpOworICAgICAgICAgICAgcmV0 dXJuICQodGhpcy5ub2RlLCAicngiKTsKKyAgICAgICAgfQorICAgIH0pKC0x KTsKKyAgICBmdW5jdGlvbiB0ZXh0RXh0cmFjdChub2RlKSB7CisgICAgICAg IHZhciBvdXQgPSBbXTsKKyAgICAgICAgdmFyIGNoaWxkcmVuID0gbm9kZS5j aGlsZE5vZGVzOworICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBjaGls ZHJlbi5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICB2YXIg Y2hpID0gY2hpbGRyZW5baV07CisgICAgICAgICAgICBpZiAoY2hpLm5vZGVU eXBlID09IDMpIHsKKyAgICAgICAgICAgICAgICBvdXQucHVzaChjaGkubm9k ZVZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjaGku dGFnTmFtZSA9PSAidHNwYW4iKSB7CisgICAgICAgICAgICAgICAgaWYgKGNo aS5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxICYmIGNoaS5maXJzdENoaWxkLm5v ZGVUeXBlID09IDMpIHsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnB1c2go Y2hpLmZpcnN0Q2hpbGQubm9kZVZhbHVlKTsKKyAgICAgICAgICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBvdXQucHVzaCh0ZXh0RXh0 cmFjdChjaGkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG91dDsKKyAgICB9CisgICAg ZXZlLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci50ZXh0IiwgZnVuY3Rpb24gKCkg eworICAgICAgICBpZiAodGhpcy50eXBlID09ICJ0ZXh0IiB8fCB0aGlzLnR5 cGUgPT0gInRzcGFuIikgeworICAgICAgICAgICAgZXZlLnN0b3AoKTsKKyAg ICAgICAgICAgIHZhciBvdXQgPSB0ZXh0RXh0cmFjdCh0aGlzLm5vZGUpOwor ICAgICAgICAgICAgcmV0dXJuIG91dC5sZW5ndGggPT0gMSA/IG91dFswXSA6 IG91dDsKKyAgICAgICAgfQorICAgIH0pKC0xKTsKKyAgICBldmUub24oInNu YXAudXRpbC5nZXRhdHRyLiN0ZXh0IiwgZnVuY3Rpb24gKCkgeworICAgICAg ICByZXR1cm4gdGhpcy5ub2RlLnRleHRDb250ZW50OworICAgIH0pKC0xKTsK KyAgICBldmUub24oInNuYXAudXRpbC5nZXRhdHRyLnZpZXdCb3giLCBmdW5j dGlvbiAoKSB7CisgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgIHZhciB2 YiA9ICQodGhpcy5ub2RlLCAidmlld0JveCIpOworICAgICAgICBpZiAodmIp IHsKKyAgICAgICAgICAgIHZiID0gdmIuc3BsaXQoc2VwYXJhdG9yKTsKKyAg ICAgICAgICAgIHJldHVybiBTbmFwLl8uYm94KCt2YlswXSwgK3ZiWzFdLCAr dmJbMl0sICt2YlszXSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KSgtMSk7CisgICAgZXZlLm9u KCJzbmFwLnV0aWwuZ2V0YXR0ci5wb2ludHMiLCBmdW5jdGlvbiAoKSB7Cisg ICAgICAgIHZhciBwID0gJCh0aGlzLm5vZGUsICJwb2ludHMiKTsKKyAgICAg ICAgZXZlLnN0b3AoKTsKKyAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAg IHJldHVybiBwLnNwbGl0KHNlcGFyYXRvcik7CisgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9KSgtMSk7 CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5wYXRoIiwgZnVuY3Rp b24gKCkgeworICAgICAgICB2YXIgcCA9ICQodGhpcy5ub2RlLCAiZCIpOwor ICAgICAgICBldmUuc3RvcCgpOworICAgICAgICByZXR1cm4gcDsKKyAgICB9 KSgtMSk7CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuZ2V0YXR0ci5jbGFzcyIs IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubm9kZS5jbGFz c05hbWUuYmFzZVZhbDsKKyAgICB9KSgtMSk7CisgICAgZnVuY3Rpb24gZ2V0 Rm9udFNpemUoKSB7CisgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgIHJl dHVybiB0aGlzLm5vZGUuc3R5bGUuZm9udFNpemU7CisgICAgfQorICAgIGV2 ZS5vbigic25hcC51dGlsLmdldGF0dHIuZm9udFNpemUiLCBnZXRGb250U2l6 ZSkoLTEpOworICAgIGV2ZS5vbigic25hcC51dGlsLmdldGF0dHIuZm9udC1z aXplIiwgZ2V0Rm9udFNpemUpKC0xKTsKK30pOworCisvLyBDb3B5cmlnaHQg KGMpIDIwMTQgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdo dHMgcmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo ZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5 b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNl IHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkg b2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8vd3d3LmFwYWNoZS5v cmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWly ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs IHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9V VCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl ciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9y IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg YW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK1NuYXAu cGx1Z2luKGZ1bmN0aW9uIChTbmFwLCBFbGVtZW50LCBQYXBlciwgZ2xvYiwg RnJhZ21lbnQpIHsKKyAgICB2YXIgcmdOb3RTcGFjZSA9IC9cUysvZywKKyAg ICAgICAgcmdCYWRTcGFjZSA9IC9bXHRcclxuXGZdL2csCisgICAgICAgIHJn VHJpbSA9IC8oXlxzK3xccyskKS9nLAorICAgICAgICBTdHIgPSBTdHJpbmcs CisgICAgICAgIGVscHJvdG8gPSBFbGVtZW50LnByb3RvdHlwZTsKKyAgICAv KlwKKyAgICAgKiBFbGVtZW50LmFkZENsYXNzCisgICAgIFsgbWV0aG9kIF0K KyAgICAgKioKKyAgICAgKiBBZGRzIGdpdmVuIGNsYXNzIG5hbWUgb3IgbGlz dCBvZiBjbGFzcyBuYW1lcyB0byB0aGUgZWxlbWVudC4KKyAgICAgLSB2YWx1 ZSAoc3RyaW5nKSBjbGFzcyBuYW1lIG9yIHNwYWNlIHNlcGFyYXRlZCBsaXN0 IG9mIGNsYXNzIG5hbWVzCisgICAgICoqCisgICAgID0gKEVsZW1lbnQpIG9y aWdpbmFsIGVsZW1lbnQuCisgICAgXCovCisgICAgZWxwcm90by5hZGRDbGFz cyA9IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICB2YXIgY2xhc3NlcyA9 IFN0cih2YWx1ZSB8fCAiIikubWF0Y2gocmdOb3RTcGFjZSkgfHwgW10sCisg ICAgICAgICAgICBlbGVtID0gdGhpcy5ub2RlLAorICAgICAgICAgICAgY2xh c3NOYW1lID0gZWxlbS5jbGFzc05hbWUuYmFzZVZhbCwKKyAgICAgICAgICAg IGN1ckNsYXNzZXMgPSBjbGFzc05hbWUubWF0Y2gocmdOb3RTcGFjZSkgfHwg W10sCisgICAgICAgICAgICBqLAorICAgICAgICAgICAgcG9zLAorICAgICAg ICAgICAgY2xhenosCisgICAgICAgICAgICBmaW5hbFZhbHVlOworCisgICAg ICAgIGlmIChjbGFzc2VzLmxlbmd0aCkgeworICAgICAgICAgICAgaiA9IDA7 CisgICAgICAgICAgICB3aGlsZSAoKGNsYXp6ID0gY2xhc3Nlc1tqKytdKSkg eworICAgICAgICAgICAgICAgIHBvcyA9IGN1ckNsYXNzZXMuaW5kZXhPZihj bGF6eik7CisgICAgICAgICAgICAgICAgaWYgKCF+cG9zKSB7CisgICAgICAg ICAgICAgICAgICAgIGN1ckNsYXNzZXMucHVzaChjbGF6eik7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmaW5h bFZhbHVlID0gY3VyQ2xhc3Nlcy5qb2luKCIgIik7CisgICAgICAgICAgICBp ZiAoY2xhc3NOYW1lICE9IGZpbmFsVmFsdWUpIHsKKyAgICAgICAgICAgICAg ICBlbGVtLmNsYXNzTmFtZS5iYXNlVmFsID0gZmluYWxWYWx1ZTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpczsKKyAg ICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQucmVtb3ZlQ2xhc3MKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJlbW92ZXMgZ2l2ZW4g Y2xhc3MgbmFtZSBvciBsaXN0IG9mIGNsYXNzIG5hbWVzIGZyb20gdGhlIGVs ZW1lbnQuCisgICAgIC0gdmFsdWUgKHN0cmluZykgY2xhc3MgbmFtZSBvciBz cGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzcyBuYW1lcworICAgICAqKgor ICAgICA9IChFbGVtZW50KSBvcmlnaW5hbCBlbGVtZW50LgorICAgIFwqLwor ICAgIGVscHJvdG8ucmVtb3ZlQ2xhc3MgPSBmdW5jdGlvbiAodmFsdWUpIHsK KyAgICAgICAgdmFyIGNsYXNzZXMgPSBTdHIodmFsdWUgfHwgIiIpLm1hdGNo KHJnTm90U3BhY2UpIHx8IFtdLAorICAgICAgICAgICAgZWxlbSA9IHRoaXMu bm9kZSwKKyAgICAgICAgICAgIGNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1l LmJhc2VWYWwsCisgICAgICAgICAgICBjdXJDbGFzc2VzID0gY2xhc3NOYW1l Lm1hdGNoKHJnTm90U3BhY2UpIHx8IFtdLAorICAgICAgICAgICAgaiwKKyAg ICAgICAgICAgIHBvcywKKyAgICAgICAgICAgIGNsYXp6LAorICAgICAgICAg ICAgZmluYWxWYWx1ZTsKKyAgICAgICAgaWYgKGN1ckNsYXNzZXMubGVuZ3Ro KSB7CisgICAgICAgICAgICBqID0gMDsKKyAgICAgICAgICAgIHdoaWxlICgo Y2xhenogPSBjbGFzc2VzW2orK10pKSB7CisgICAgICAgICAgICAgICAgcG9z ID0gY3VyQ2xhc3Nlcy5pbmRleE9mKGNsYXp6KTsKKyAgICAgICAgICAgICAg ICBpZiAofnBvcykgeworICAgICAgICAgICAgICAgICAgICBjdXJDbGFzc2Vz LnNwbGljZShwb3MsIDEpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgZmluYWxWYWx1ZSA9IGN1ckNsYXNzZXMu am9pbigiICIpOworICAgICAgICAgICAgaWYgKGNsYXNzTmFtZSAhPSBmaW5h bFZhbHVlKSB7CisgICAgICAgICAgICAgICAgZWxlbS5jbGFzc05hbWUuYmFz ZVZhbCA9IGZpbmFsVmFsdWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0K KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAg KiBFbGVtZW50Lmhhc0NsYXNzCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioK KyAgICAgKiBDaGVja3MgaWYgdGhlIGVsZW1lbnQgaGFzIGEgZ2l2ZW4gY2xh c3MgbmFtZSBpbiB0aGUgbGlzdCBvZiBjbGFzcyBuYW1lcyBhcHBsaWVkIHRv IGl0LgorICAgICAtIHZhbHVlIChzdHJpbmcpIGNsYXNzIG5hbWUKKyAgICAg KioKKyAgICAgPSAoYm9vbGVhbikgYHRydWVgIGlmIHRoZSBlbGVtZW50IGhh cyBnaXZlbiBjbGFzcworICAgIFwqLworICAgIGVscHJvdG8uaGFzQ2xhc3Mg PSBmdW5jdGlvbiAodmFsdWUpIHsKKyAgICAgICAgdmFyIGVsZW0gPSB0aGlz Lm5vZGUsCisgICAgICAgICAgICBjbGFzc05hbWUgPSBlbGVtLmNsYXNzTmFt ZS5iYXNlVmFsLAorICAgICAgICAgICAgY3VyQ2xhc3NlcyA9IGNsYXNzTmFt ZS5tYXRjaChyZ05vdFNwYWNlKSB8fCBbXTsKKyAgICAgICAgcmV0dXJuICEh fmN1ckNsYXNzZXMuaW5kZXhPZih2YWx1ZSk7CisgICAgfTsKKyAgICAvKlwK KyAgICAgKiBFbGVtZW50LnRvZ2dsZUNsYXNzCisgICAgIFsgbWV0aG9kIF0K KyAgICAgKioKKyAgICAgKiBBZGQgb3IgcmVtb3ZlIG9uZSBvciBtb3JlIGNs YXNzZXMgZnJvbSB0aGUgZWxlbWVudCwgZGVwZW5kaW5nIG9uIGVpdGhlcgor ICAgICAqIHRoZSBjbGFzc+KAmXMgcHJlc2VuY2Ugb3IgdGhlIHZhbHVlIG9m IHRoZSBgZmxhZ2AgYXJndW1lbnQuCisgICAgIC0gdmFsdWUgKHN0cmluZykg Y2xhc3MgbmFtZSBvciBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjbGFzcyBu YW1lcworICAgICAtIGZsYWcgKGJvb2xlYW4pIHZhbHVlIHRvIGRldGVybWlu ZSB3aGV0aGVyIHRoZSBjbGFzcyBzaG91bGQgYmUgYWRkZWQgb3IgcmVtb3Zl ZAorICAgICAqKgorICAgICA9IChFbGVtZW50KSBvcmlnaW5hbCBlbGVtZW50 LgorICAgIFwqLworICAgIGVscHJvdG8udG9nZ2xlQ2xhc3MgPSBmdW5jdGlv biAodmFsdWUsIGZsYWcpIHsKKyAgICAgICAgaWYgKGZsYWcgIT0gbnVsbCkg eworICAgICAgICAgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgICAgICAgICBy ZXR1cm4gdGhpcy5hZGRDbGFzcyh2YWx1ZSk7CisgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbW92ZUNsYXNz KHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2 YXIgY2xhc3NlcyA9ICh2YWx1ZSB8fCAiIikubWF0Y2gocmdOb3RTcGFjZSkg fHwgW10sCisgICAgICAgICAgICBlbGVtID0gdGhpcy5ub2RlLAorICAgICAg ICAgICAgY2xhc3NOYW1lID0gZWxlbS5jbGFzc05hbWUuYmFzZVZhbCwKKyAg ICAgICAgICAgIGN1ckNsYXNzZXMgPSBjbGFzc05hbWUubWF0Y2gocmdOb3RT cGFjZSkgfHwgW10sCisgICAgICAgICAgICBqLAorICAgICAgICAgICAgcG9z LAorICAgICAgICAgICAgY2xhenosCisgICAgICAgICAgICBmaW5hbFZhbHVl OworICAgICAgICBqID0gMDsKKyAgICAgICAgd2hpbGUgKChjbGF6eiA9IGNs YXNzZXNbaisrXSkpIHsKKyAgICAgICAgICAgIHBvcyA9IGN1ckNsYXNzZXMu aW5kZXhPZihjbGF6eik7CisgICAgICAgICAgICBpZiAofnBvcykgeworICAg ICAgICAgICAgICAgIGN1ckNsYXNzZXMuc3BsaWNlKHBvcywgMSk7CisgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGN1ckNsYXNzZXMu cHVzaChjbGF6eik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg ICAgICBmaW5hbFZhbHVlID0gY3VyQ2xhc3Nlcy5qb2luKCIgIik7CisgICAg ICAgIGlmIChjbGFzc05hbWUgIT0gZmluYWxWYWx1ZSkgeworICAgICAgICAg ICAgZWxlbS5jbGFzc05hbWUuYmFzZVZhbCA9IGZpbmFsVmFsdWU7CisgICAg ICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKK30pOworCisv LyBDb3B5cmlnaHQgKGMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0 ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5k ZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNl bnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBp biBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9i dGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8v d3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBV bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRv IGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0 aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lT LAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5Z IEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhl IExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcg cGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGlj ZW5zZS4KK1NuYXAucGx1Z2luKGZ1bmN0aW9uIChTbmFwLCBFbGVtZW50LCBQ YXBlciwgZ2xvYiwgRnJhZ21lbnQpIHsKKyAgICB2YXIgb3BlcmF0b3JzID0g eworICAgICAgICAgICAgIisiOiBmdW5jdGlvbiAoeCwgeSkgeworICAgICAg ICAgICAgICAgICAgICByZXR1cm4geCArIHk7CisgICAgICAgICAgICAgICAg fSwKKyAgICAgICAgICAgICItIjogZnVuY3Rpb24gKHgsIHkpIHsKKyAgICAg ICAgICAgICAgICAgICAgcmV0dXJuIHggLSB5OworICAgICAgICAgICAgICAg IH0sCisgICAgICAgICAgICAiLyI6IGZ1bmN0aW9uICh4LCB5KSB7CisgICAg ICAgICAgICAgICAgICAgIHJldHVybiB4IC8geTsKKyAgICAgICAgICAgICAg ICB9LAorICAgICAgICAgICAgIioiOiBmdW5jdGlvbiAoeCwgeSkgeworICAg ICAgICAgICAgICAgICAgICByZXR1cm4geCAqIHk7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICB9LAorICAgICAgICBTdHIgPSBTdHJpbmcsCisgICAg ICAgIHJlVW5pdCA9IC9bYS16XSskL2ksCisgICAgICAgIHJlQWRkb24gPSAv XlxzKihbK1wtXC8qXSlccyo9XHMqKFtcZC5lRStcLV0rKVxzKihbXlxkXHNd Kyk/XHMqJC87CisgICAgZnVuY3Rpb24gZ2V0TnVtYmVyKHZhbCkgeworICAg ICAgICByZXR1cm4gdmFsOworICAgIH0KKyAgICBmdW5jdGlvbiBnZXRVbml0 KHVuaXQpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwpIHsKKyAg ICAgICAgICAgIHJldHVybiArdmFsLnRvRml4ZWQoMykgKyB1bml0OworICAg ICAgICB9OworICAgIH0KKyAgICBldmUub24oInNuYXAudXRpbC5hdHRyIiwg ZnVuY3Rpb24gKHZhbCkgeworICAgICAgICB2YXIgcGx1cyA9IFN0cih2YWwp Lm1hdGNoKHJlQWRkb24pOworICAgICAgICBpZiAocGx1cykgeworICAgICAg ICAgICAgdmFyIGV2bnQgPSBldmUubnQoKSwKKyAgICAgICAgICAgICAgICBu YW1lID0gZXZudC5zdWJzdHJpbmcoZXZudC5sYXN0SW5kZXhPZigiLiIpICsg MSksCisgICAgICAgICAgICAgICAgYSA9IHRoaXMuYXR0cihuYW1lKSwKKyAg ICAgICAgICAgICAgICBhdHIgPSB7fTsKKyAgICAgICAgICAgIGV2ZS5zdG9w KCk7CisgICAgICAgICAgICB2YXIgdW5pdCA9IHBsdXNbM10gfHwgIiIsCisg ICAgICAgICAgICAgICAgYVVuaXQgPSBhLm1hdGNoKHJlVW5pdCksCisgICAg ICAgICAgICAgICAgb3AgPSBvcGVyYXRvcnNbcGx1c1sxXV07CisgICAgICAg ICAgICBpZiAoYVVuaXQgJiYgYVVuaXQgPT0gdW5pdCkgeworICAgICAgICAg ICAgICAgIHZhbCA9IG9wKHBhcnNlRmxvYXQoYSksICtwbHVzWzJdKTsKKyAg ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgYSA9IHRoaXMu YXNQWChuYW1lKTsKKyAgICAgICAgICAgICAgICB2YWwgPSBvcCh0aGlzLmFz UFgobmFtZSksIHRoaXMuYXNQWChuYW1lLCBwbHVzWzJdICsgdW5pdCkpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGlzTmFOKGEpIHx8IGlz TmFOKHZhbCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBhdHJbbmFtZV0gPSB2YWw7CisgICAgICAg ICAgICB0aGlzLmF0dHIoYXRyKTsKKyAgICAgICAgfQorICAgIH0pKC0xMCk7 CisgICAgZXZlLm9uKCJzbmFwLnV0aWwuZXF1YWwiLCBmdW5jdGlvbiAobmFt ZSwgYikgeworICAgICAgICB2YXIgQSwgQiwgYSA9IFN0cih0aGlzLmF0dHIo bmFtZSkgfHwgIiIpLAorICAgICAgICAgICAgZWwgPSB0aGlzLAorICAgICAg ICAgICAgYnBsdXMgPSBTdHIoYikubWF0Y2gocmVBZGRvbik7CisgICAgICAg IGlmIChicGx1cykgeworICAgICAgICAgICAgZXZlLnN0b3AoKTsKKyAgICAg ICAgICAgIHZhciB1bml0ID0gYnBsdXNbM10gfHwgIiIsCisgICAgICAgICAg ICAgICAgYVVuaXQgPSBhLm1hdGNoKHJlVW5pdCksCisgICAgICAgICAgICAg ICAgb3AgPSBvcGVyYXRvcnNbYnBsdXNbMV1dOworICAgICAgICAgICAgaWYg KGFVbml0ICYmIGFVbml0ID09IHVuaXQpIHsKKyAgICAgICAgICAgICAgICBy ZXR1cm4geworICAgICAgICAgICAgICAgICAgICBmcm9tOiBwYXJzZUZsb2F0 KGEpLAorICAgICAgICAgICAgICAgICAgICB0bzogb3AocGFyc2VGbG9hdChh KSwgK2JwbHVzWzJdKSwKKyAgICAgICAgICAgICAgICAgICAgZjogZ2V0VW5p dChhVW5pdCkKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgICAgICBhID0gdGhpcy5hc1BYKG5hbWUpOwor ICAgICAgICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgICAg IGZyb206IGEsCisgICAgICAgICAgICAgICAgICAgIHRvOiBvcChhLCB0aGlz LmFzUFgobmFtZSwgYnBsdXNbMl0gKyB1bml0KSksCisgICAgICAgICAgICAg ICAgICAgIGY6IGdldE51bWJlcgorICAgICAgICAgICAgICAgIH07CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KSgtMTApOworfSk7CisvLyBD b3B5cmlnaHQgKGMpIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQu IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8gTGljZW5zZWQgdW5kZXIg dGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNl Iik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBj b21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisvLyBZb3UgbWF5IG9idGFp biBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8vCisvLyBodHRwOi8vd3d3 LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxl c3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGlu IHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUg TGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAor Ly8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJ TkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExp Y2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVy bWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5z ZS4KK1NuYXAucGx1Z2luKGZ1bmN0aW9uIChTbmFwLCBFbGVtZW50LCBQYXBl ciwgZ2xvYiwgRnJhZ21lbnQpIHsKKyAgICB2YXIgcHJvdG8gPSBQYXBlci5w cm90b3R5cGUsCisgICAgICAgIGlzID0gU25hcC5pczsKKyAgICAvKlwKKyAg ICAgKiBQYXBlci5yZWN0CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKgorICAg ICAqIERyYXdzIGEgcmVjdGFuZ2xlCisgICAgICoqCisgICAgIC0geCAobnVt YmVyKSB4IGNvb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lcgorICAg ICAtIHkgKG51bWJlcikgeSBjb29yZGluYXRlIG9mIHRoZSB0b3AgbGVmdCBj b3JuZXIKKyAgICAgLSB3aWR0aCAobnVtYmVyKSB3aWR0aAorICAgICAtIGhl aWdodCAobnVtYmVyKSBoZWlnaHQKKyAgICAgLSByeCAobnVtYmVyKSAjb3B0 aW9uYWwgaG9yaXpvbnRhbCByYWRpdXMgZm9yIHJvdW5kZWQgY29ybmVycywg ZGVmYXVsdCBpcyAwCisgICAgIC0gcnkgKG51bWJlcikgI29wdGlvbmFsIHZl cnRpY2FsIHJhZGl1cyBmb3Igcm91bmRlZCBjb3JuZXJzLCBkZWZhdWx0IGlz IHJ4IG9yIDAKKyAgICAgPSAob2JqZWN0KSB0aGUgYHJlY3RgIGVsZW1lbnQK KyAgICAgKioKKyAgICAgPiBVc2FnZQorICAgICB8IC8vIHJlZ3VsYXIgcmVj dGFuZ2xlCisgICAgIHwgdmFyIGMgPSBwYXBlci5yZWN0KDEwLCAxMCwgNTAs IDUwKTsKKyAgICAgfCAvLyByZWN0YW5nbGUgd2l0aCByb3VuZGVkIGNvcm5l cnMKKyAgICAgfCB2YXIgYyA9IHBhcGVyLnJlY3QoNDAsIDQwLCA1MCwgNTAs IDEwKTsKKyAgICBcKi8KKyAgICBwcm90by5yZWN0ID0gZnVuY3Rpb24gKHgs IHksIHcsIGgsIHJ4LCByeSkgeworICAgICAgICB2YXIgYXR0cjsKKyAgICAg ICAgaWYgKHJ5ID09IG51bGwpIHsKKyAgICAgICAgICAgIHJ5ID0gcng7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKGlzKHgsICJvYmplY3QiKSAmJiB4ID09 ICJbb2JqZWN0IE9iamVjdF0iKSB7CisgICAgICAgICAgICBhdHRyID0geDsK KyAgICAgICAgfSBlbHNlIGlmICh4ICE9IG51bGwpIHsKKyAgICAgICAgICAg IGF0dHIgPSB7CisgICAgICAgICAgICAgICAgeDogeCwKKyAgICAgICAgICAg ICAgICB5OiB5LAorICAgICAgICAgICAgICAgIHdpZHRoOiB3LAorICAgICAg ICAgICAgICAgIGhlaWdodDogaAorICAgICAgICAgICAgfTsKKyAgICAgICAg ICAgIGlmIChyeCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgYXR0ci5y eCA9IHJ4OworICAgICAgICAgICAgICAgIGF0dHIucnkgPSByeTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5lbCgi cmVjdCIsIGF0dHIpOworICAgIH07CisgICAgLypcCisgICAgICogUGFwZXIu Y2lyY2xlCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBEcmF3 cyBhIGNpcmNsZQorICAgICAqKgorICAgICAtIHggKG51bWJlcikgeCBjb29y ZGluYXRlIG9mIHRoZSBjZW50cmUKKyAgICAgLSB5IChudW1iZXIpIHkgY29v cmRpbmF0ZSBvZiB0aGUgY2VudHJlCisgICAgIC0gciAobnVtYmVyKSByYWRp dXMKKyAgICAgPSAob2JqZWN0KSB0aGUgYGNpcmNsZWAgZWxlbWVudAorICAg ICAqKgorICAgICA+IFVzYWdlCisgICAgIHwgdmFyIGMgPSBwYXBlci5jaXJj bGUoNTAsIDUwLCA0MCk7CisgICAgXCovCisgICAgcHJvdG8uY2lyY2xlID0g ZnVuY3Rpb24gKGN4LCBjeSwgcikgeworICAgICAgICB2YXIgYXR0cjsKKyAg ICAgICAgaWYgKGlzKGN4LCAib2JqZWN0IikgJiYgY3ggPT0gIltvYmplY3Qg T2JqZWN0XSIpIHsKKyAgICAgICAgICAgIGF0dHIgPSBjeDsKKyAgICAgICAg fSBlbHNlIGlmIChjeCAhPSBudWxsKSB7CisgICAgICAgICAgICBhdHRyID0g eworICAgICAgICAgICAgICAgIGN4OiBjeCwKKyAgICAgICAgICAgICAgICBj eTogY3ksCisgICAgICAgICAgICAgICAgcjogcgorICAgICAgICAgICAgfTsK KyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5lbCgiY2lyY2xlIiwg YXR0cik7CisgICAgfTsKKworICAgIHZhciBwcmVsb2FkID0gKGZ1bmN0aW9u ICgpIHsKKyAgICAgICAgZnVuY3Rpb24gb25lcnJvcigpIHsKKyAgICAgICAg ICAgIHRoaXMucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzKTsKKyAgICAg ICAgfQorICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHNyYywgZikgeworICAg ICAgICAgICAgdmFyIGltZyA9IGdsb2IuZG9jLmNyZWF0ZUVsZW1lbnQoImlt ZyIpLAorICAgICAgICAgICAgICAgIGJvZHkgPSBnbG9iLmRvYy5ib2R5Owor ICAgICAgICAgICAgaW1nLnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246YWJz b2x1dGU7bGVmdDotOTk5OWVtO3RvcDotOTk5OWVtIjsKKyAgICAgICAgICAg IGltZy5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAg Zi5jYWxsKGltZyk7CisgICAgICAgICAgICAgICAgaW1nLm9ubG9hZCA9IGlt Zy5vbmVycm9yID0gbnVsbDsKKyAgICAgICAgICAgICAgICBib2R5LnJlbW92 ZUNoaWxkKGltZyk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgaW1n Lm9uZXJyb3IgPSBvbmVycm9yOworICAgICAgICAgICAgYm9keS5hcHBlbmRD aGlsZChpbWcpOworICAgICAgICAgICAgaW1nLnNyYyA9IHNyYzsKKyAgICAg ICAgfTsKKyAgICB9KCkpOworCisgICAgLypcCisgICAgICogUGFwZXIuaW1h Z2UKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFBsYWNlcyBh biBpbWFnZSBvbiB0aGUgc3VyZmFjZQorICAgICAqKgorICAgICAtIHNyYyAo c3RyaW5nKSBVUkkgb2YgdGhlIHNvdXJjZSBpbWFnZQorICAgICAtIHggKG51 bWJlcikgeCBvZmZzZXQgcG9zaXRpb24KKyAgICAgLSB5IChudW1iZXIpIHkg b2Zmc2V0IHBvc2l0aW9uCisgICAgIC0gd2lkdGggKG51bWJlcikgd2lkdGgg b2YgdGhlIGltYWdlCisgICAgIC0gaGVpZ2h0IChudW1iZXIpIGhlaWdodCBv ZiB0aGUgaW1hZ2UKKyAgICAgPSAob2JqZWN0KSB0aGUgYGltYWdlYCBlbGVt ZW50CisgICAgICogb3IKKyAgICAgPSAob2JqZWN0KSBTbmFwIGVsZW1lbnQg b2JqZWN0IHdpdGggdHlwZSBgaW1hZ2VgCisgICAgICoqCisgICAgID4gVXNh Z2UKKyAgICAgfCB2YXIgYyA9IHBhcGVyLmltYWdlKCJhcHBsZS5wbmciLCAx MCwgMTAsIDgwLCA4MCk7CisgICAgXCovCisgICAgcHJvdG8uaW1hZ2UgPSBm dW5jdGlvbiAoc3JjLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KSB7CisgICAgICAg IHZhciBlbCA9IHRoaXMuZWwoImltYWdlIik7CisgICAgICAgIGlmIChpcyhz cmMsICJvYmplY3QiKSAmJiAic3JjIiBpbiBzcmMpIHsKKyAgICAgICAgICAg IGVsLmF0dHIoc3JjKTsKKyAgICAgICAgfSBlbHNlIGlmIChzcmMgIT0gbnVs bCkgeworICAgICAgICAgICAgdmFyIHNldCA9IHsKKyAgICAgICAgICAgICAg ICAieGxpbms6aHJlZiI6IHNyYywKKyAgICAgICAgICAgICAgICBwcmVzZXJ2 ZUFzcGVjdFJhdGlvOiAibm9uZSIKKyAgICAgICAgICAgIH07CisgICAgICAg ICAgICBpZiAoeCAhPSBudWxsICYmIHkgIT0gbnVsbCkgeworICAgICAgICAg ICAgICAgIHNldC54ID0geDsKKyAgICAgICAgICAgICAgICBzZXQueSA9IHk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAod2lkdGggIT0gbnVs bCAmJiBoZWlnaHQgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHNldC53 aWR0aCA9IHdpZHRoOworICAgICAgICAgICAgICAgIHNldC5oZWlnaHQgPSBo ZWlnaHQ7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg IHByZWxvYWQoc3JjLCBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICAgICAg ICAgIFNuYXAuXy4kKGVsLm5vZGUsIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHdpZHRoOiB0aGlzLm9mZnNldFdpZHRoLAorICAgICAgICAgICAgICAg ICAgICAgICAgaGVpZ2h0OiB0aGlzLm9mZnNldEhlaWdodAorICAgICAgICAg ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIFNuYXAuXy4kKGVsLm5vZGUsIHNldCk7Cisg ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGVsOworICAgIH07CisgICAgLypc CisgICAgICogUGFwZXIuZWxsaXBzZQorICAgICBbIG1ldGhvZCBdCisgICAg ICoqCisgICAgICogRHJhd3MgYW4gZWxsaXBzZQorICAgICAqKgorICAgICAt IHggKG51bWJlcikgeCBjb29yZGluYXRlIG9mIHRoZSBjZW50cmUKKyAgICAg LSB5IChudW1iZXIpIHkgY29vcmRpbmF0ZSBvZiB0aGUgY2VudHJlCisgICAg IC0gcnggKG51bWJlcikgaG9yaXpvbnRhbCByYWRpdXMKKyAgICAgLSByeSAo bnVtYmVyKSB2ZXJ0aWNhbCByYWRpdXMKKyAgICAgPSAob2JqZWN0KSB0aGUg YGVsbGlwc2VgIGVsZW1lbnQKKyAgICAgKioKKyAgICAgPiBVc2FnZQorICAg ICB8IHZhciBjID0gcGFwZXIuZWxsaXBzZSg1MCwgNTAsIDQwLCAyMCk7Cisg ICAgXCovCisgICAgcHJvdG8uZWxsaXBzZSA9IGZ1bmN0aW9uIChjeCwgY3ks IHJ4LCByeSkgeworICAgICAgICB2YXIgYXR0cjsKKyAgICAgICAgaWYgKGlz KGN4LCAib2JqZWN0IikgJiYgY3ggPT0gIltvYmplY3QgT2JqZWN0XSIpIHsK KyAgICAgICAgICAgIGF0dHIgPSBjeDsKKyAgICAgICAgfSBlbHNlIGlmIChj eCAhPSBudWxsKSB7CisgICAgICAgICAgICBhdHRyID17CisgICAgICAgICAg ICAgICAgY3g6IGN4LAorICAgICAgICAgICAgICAgIGN5OiBjeSwKKyAgICAg ICAgICAgICAgICByeDogcngsCisgICAgICAgICAgICAgICAgcnk6IHJ5Cisg ICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlz LmVsKCJlbGxpcHNlIiwgYXR0cik7CisgICAgfTsKKyAgICAvLyBTSUVSUkEg UGFwZXIucGF0aCgpOiBVbmNsZWFyIGZyb20gdGhlIGxpbmsgd2hhdCBhIENh dG11bGwtUm9tIGN1cnZldG8gaXMsIGFuZCB3aHkgaXQgd291bGQgbWFrZSBs aWZlIGFueSBlYXNpZXIuCisgICAgLypcCisgICAgICogUGFwZXIucGF0aAor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQ3JlYXRlcyBhIGA8 cGF0aD5gIGVsZW1lbnQgdXNpbmcgdGhlIGdpdmVuIHN0cmluZyBhcyB0aGUg cGF0aCdzIGRlZmluaXRpb24KKyAgICAgLSBwYXRoU3RyaW5nIChzdHJpbmcp ICNvcHRpb25hbCBwYXRoIHN0cmluZyBpbiBTVkcgZm9ybWF0CisgICAgICog UGF0aCBzdHJpbmcgY29uc2lzdHMgb2Ygb25lLWxldHRlciBjb21tYW5kcywg Zm9sbG93ZWQgYnkgY29tbWEgc2VwcmFyYXRlZCBhcmd1bWVudHMgaW4gbnVt ZXJpY2FsIGZvcm0uIEV4YW1wbGU6CisgICAgIHwgIk0xMCwyMEwzMCw0MCIK KyAgICAgKiBUaGlzIGV4YW1wbGUgZmVhdHVyZXMgdHdvIGNvbW1hbmRzOiBg TWAsIHdpdGggYXJndW1lbnRzIGAoMTAsIDIwKWAgYW5kIGBMYCB3aXRoIGFy Z3VtZW50cyBgKDMwLCA0MClgLiBVcHBlcmNhc2UgbGV0dGVyIGNvbW1hbmRz IGV4cHJlc3MgY29vcmRpbmF0ZXMgaW4gYWJzb2x1dGUgdGVybXMsIHdoaWxl IGxvd2VyY2FzZSBjb21tYW5kcyBleHByZXNzIHRoZW0gaW4gcmVsYXRpdmUg dGVybXMgZnJvbSB0aGUgbW9zdCByZWNlbnRseSBkZWNsYXJlZCBjb29yZGlu YXRlcy4KKyAgICAgKgorICAgICAjIDxwPkhlcmUgaXMgc2hvcnQgbGlzdCBv ZiBjb21tYW5kcyBhdmFpbGFibGUsIGZvciBtb3JlIGRldGFpbHMgc2VlIDxh IGhyZWY9Imh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9wYXRocy5odG1sI1Bh dGhEYXRhIiB0aXRsZT0iRGV0YWlscyBvZiBhIHBhdGgncyBkYXRhIGF0dHJp YnV0ZSdzIGZvcm1hdCBhcmUgZGVzY3JpYmVkIGluIHRoZSBTVkcgc3BlY2lm aWNhdGlvbi4iPlNWRyBwYXRoIHN0cmluZyBmb3JtYXQ8L2E+IG9yIDxhIGhy ZWY9Imh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL1NWRy9UdXRv cmlhbC9QYXRocyI+YXJ0aWNsZSBhYm91dCBwYXRoIHN0cmluZ3MgYXQgTURO PC9hPi48L3A+CisgICAgICMgPHRhYmxlPjx0aGVhZD48dHI+PHRoPkNvbW1h bmQ8L3RoPjx0aD5OYW1lPC90aD48dGg+UGFyYW1ldGVyczwvdGg+PC90cj48 L3RoZWFkPjx0Ym9keT4KKyAgICAgIyA8dHI+PHRkPk08L3RkPjx0ZD5tb3Zl dG88L3RkPjx0ZD4oeCB5KSs8L3RkPjwvdHI+CisgICAgICMgPHRyPjx0ZD5a PC90ZD48dGQ+Y2xvc2VwYXRoPC90ZD48dGQ+KG5vbmUpPC90ZD48L3RyPgor ICAgICAjIDx0cj48dGQ+TDwvdGQ+PHRkPmxpbmV0bzwvdGQ+PHRkPih4IHkp KzwvdGQ+PC90cj4KKyAgICAgIyA8dHI+PHRkPkg8L3RkPjx0ZD5ob3Jpem9u dGFsIGxpbmV0bzwvdGQ+PHRkPngrPC90ZD48L3RyPgorICAgICAjIDx0cj48 dGQ+VjwvdGQ+PHRkPnZlcnRpY2FsIGxpbmV0bzwvdGQ+PHRkPnkrPC90ZD48 L3RyPgorICAgICAjIDx0cj48dGQ+QzwvdGQ+PHRkPmN1cnZldG88L3RkPjx0 ZD4oeDEgeTEgeDIgeTIgeCB5KSs8L3RkPjwvdHI+CisgICAgICMgPHRyPjx0 ZD5TPC90ZD48dGQ+c21vb3RoIGN1cnZldG88L3RkPjx0ZD4oeDIgeTIgeCB5 KSs8L3RkPjwvdHI+CisgICAgICMgPHRyPjx0ZD5RPC90ZD48dGQ+cXVhZHJh dGljIELDqXppZXIgY3VydmV0bzwvdGQ+PHRkPih4MSB5MSB4IHkpKzwvdGQ+ PC90cj4KKyAgICAgIyA8dHI+PHRkPlQ8L3RkPjx0ZD5zbW9vdGggcXVhZHJh dGljIELDqXppZXIgY3VydmV0bzwvdGQ+PHRkPih4IHkpKzwvdGQ+PC90cj4K KyAgICAgIyA8dHI+PHRkPkE8L3RkPjx0ZD5lbGxpcHRpY2FsIGFyYzwvdGQ+ PHRkPihyeCByeSB4LWF4aXMtcm90YXRpb24gbGFyZ2UtYXJjLWZsYWcgc3dl ZXAtZmxhZyB4IHkpKzwvdGQ+PC90cj4KKyAgICAgIyA8dHI+PHRkPlI8L3Rk Pjx0ZD48YSBocmVmPSJodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Nh dG11bGzigJNSb21fc3BsaW5lI0NhdG11bGwuRTIuODAuOTNSb21fc3BsaW5l Ij5DYXRtdWxsLVJvbSBjdXJ2ZXRvPC9hPio8L3RkPjx0ZD54MSB5MSAoeCB5 KSs8L3RkPjwvdHI+PC90Ym9keT48L3RhYmxlPgorICAgICAqICogX0NhdG11 bGwtUm9tIGN1cnZldG9fIGlzIGEgbm90IHN0YW5kYXJkIFNWRyBjb21tYW5k IGFuZCBhZGRlZCB0byBtYWtlIGxpZmUgZWFzaWVyLgorICAgICAqIE5vdGU6 IHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlIHdoZW4gYSBwYXRoIGNvbnNpc3Rz IG9mIG9ubHkgdGhyZWUgY29tbWFuZHM6IGBNMTAsMTBS4oCmemAuIEluIHRo aXMgY2FzZSB0aGUgcGF0aCBjb25uZWN0cyBiYWNrIHRvIGl0cyBzdGFydGlu ZyBwb2ludC4KKyAgICAgPiBVc2FnZQorICAgICB8IHZhciBjID0gcGFwZXIu cGF0aCgiTTEwIDEwTDkwIDkwIik7CisgICAgIHwgLy8gZHJhdyBhIGRpYWdv bmFsIGxpbmU6CisgICAgIHwgLy8gbW92ZSB0byAxMCwxMCwgbGluZSB0byA5 MCw5MAorICAgIFwqLworICAgIHByb3RvLnBhdGggPSBmdW5jdGlvbiAoZCkg eworICAgICAgICB2YXIgYXR0cjsKKyAgICAgICAgaWYgKGlzKGQsICJvYmpl Y3QiKSAmJiAhaXMoZCwgImFycmF5IikpIHsKKyAgICAgICAgICAgIGF0dHIg PSBkOworICAgICAgICB9IGVsc2UgaWYgKGQpIHsKKyAgICAgICAgICAgIGF0 dHIgPSB7ZDogZH07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMu ZWwoInBhdGgiLCBhdHRyKTsKKyAgICB9OworICAgIC8qXAorICAgICAqIFBh cGVyLmcKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIENyZWF0 ZXMgYSBncm91cCBlbGVtZW50CisgICAgICoqCisgICAgIC0gdmFyYXJncyAo 4oCmKSAjb3B0aW9uYWwgZWxlbWVudHMgdG8gbmVzdCB3aXRoaW4gdGhlIGdy b3VwCisgICAgID0gKG9iamVjdCkgdGhlIGBnYCBlbGVtZW50CisgICAgICoq CisgICAgID4gVXNhZ2UKKyAgICAgfCB2YXIgYzEgPSBwYXBlci5jaXJjbGUo KSwKKyAgICAgfCAgICAgYzIgPSBwYXBlci5yZWN0KCksCisgICAgIHwgICAg IGcgPSBwYXBlci5nKGMyLCBjMSk7IC8vIG5vdGUgdGhhdCB0aGUgb3JkZXIg b2YgZWxlbWVudHMgaXMgZGlmZmVyZW50CisgICAgICogb3IKKyAgICAgfCB2 YXIgYzEgPSBwYXBlci5jaXJjbGUoKSwKKyAgICAgfCAgICAgYzIgPSBwYXBl ci5yZWN0KCksCisgICAgIHwgICAgIGcgPSBwYXBlci5nKCk7CisgICAgIHwg Zy5hZGQoYzIsIGMxKTsKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBQYXBl ci5ncm91cAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogU2Vl IEBQYXBlci5nCisgICAgXCovCisgICAgcHJvdG8uZ3JvdXAgPSBwcm90by5n ID0gZnVuY3Rpb24gKGZpcnN0KSB7CisgICAgICAgIHZhciBhdHRyLAorICAg ICAgICAgICAgZWwgPSB0aGlzLmVsKCJnIik7CisgICAgICAgIGlmIChhcmd1 bWVudHMubGVuZ3RoID09IDEgJiYgZmlyc3QgJiYgIWZpcnN0LnR5cGUpIHsK KyAgICAgICAgICAgIGVsLmF0dHIoZmlyc3QpOworICAgICAgICB9IGVsc2Ug aWYgKGFyZ3VtZW50cy5sZW5ndGgpIHsKKyAgICAgICAgICAgIGVsLmFkZChB cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTsKKyAg ICAgICAgfQorICAgICAgICByZXR1cm4gZWw7CisgICAgfTsKKyAgICAvKlwK KyAgICAgKiBQYXBlci5zdmcKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgor ICAgICAqIENyZWF0ZXMgYSBuZXN0ZWQgU1ZHIGVsZW1lbnQuCisgICAgIC0g eCAobnVtYmVyKSBAb3B0aW9uYWwgWCBvZiB0aGUgZWxlbWVudAorICAgICAt IHkgKG51bWJlcikgQG9wdGlvbmFsIFkgb2YgdGhlIGVsZW1lbnQKKyAgICAg LSB3aWR0aCAobnVtYmVyKSBAb3B0aW9uYWwgd2lkdGggb2YgdGhlIGVsZW1l bnQKKyAgICAgLSBoZWlnaHQgKG51bWJlcikgQG9wdGlvbmFsIGhlaWdodCBv ZiB0aGUgZWxlbWVudAorICAgICAtIHZieCAobnVtYmVyKSBAb3B0aW9uYWwg dmlld2JveCBYCisgICAgIC0gdmJ5IChudW1iZXIpIEBvcHRpb25hbCB2aWV3 Ym94IFkKKyAgICAgLSB2YncgKG51bWJlcikgQG9wdGlvbmFsIHZpZXdib3gg d2lkdGgKKyAgICAgLSB2YmggKG51bWJlcikgQG9wdGlvbmFsIHZpZXdib3gg aGVpZ2h0CisgICAgICoqCisgICAgID0gKG9iamVjdCkgdGhlIGBzdmdgIGVs ZW1lbnQKKyAgICAgKioKKyAgICBcKi8KKyAgICBwcm90by5zdmcgPSBmdW5j dGlvbiAoeCwgeSwgd2lkdGgsIGhlaWdodCwgdmJ4LCB2YnksIHZidywgdmJo KSB7CisgICAgICAgIHZhciBhdHRycyA9IHt9OworICAgICAgICBpZiAoaXMo eCwgIm9iamVjdCIpICYmIHkgPT0gbnVsbCkgeworICAgICAgICAgICAgYXR0 cnMgPSB4OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKHgg IT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGF0dHJzLnggPSB4OworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHkgIT0gbnVsbCkgeworICAg ICAgICAgICAgICAgIGF0dHJzLnkgPSB5OworICAgICAgICAgICAgfQorICAg ICAgICAgICAgaWYgKHdpZHRoICE9IG51bGwpIHsKKyAgICAgICAgICAgICAg ICBhdHRycy53aWR0aCA9IHdpZHRoOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKGhlaWdodCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAg YXR0cnMuaGVpZ2h0ID0gaGVpZ2h0OworICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKHZieCAhPSBudWxsICYmIHZieSAhPSBudWxsICYmIHZidyAh PSBudWxsICYmIHZiaCAhPSBudWxsKSB7CisgICAgICAgICAgICAgICAgYXR0 cnMudmlld0JveCA9IFt2YngsIHZieSwgdmJ3LCB2YmhdOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLmVsKCJzdmci LCBhdHRycyk7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBQYXBlci5tYXNr CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBFcXVpdmFsZW50 IGluIGJlaGF2aW91ciB0byBAUGFwZXIuZywgZXhjZXB0IGl04oCZcyBhIG1h c2suCisgICAgICoqCisgICAgID0gKG9iamVjdCkgdGhlIGBtYXNrYCBlbGVt ZW50CisgICAgICoqCisgICAgXCovCisgICAgcHJvdG8ubWFzayA9IGZ1bmN0 aW9uIChmaXJzdCkgeworICAgICAgICB2YXIgYXR0ciwKKyAgICAgICAgICAg IGVsID0gdGhpcy5lbCgibWFzayIpOworICAgICAgICBpZiAoYXJndW1lbnRz Lmxlbmd0aCA9PSAxICYmIGZpcnN0ICYmICFmaXJzdC50eXBlKSB7CisgICAg ICAgICAgICBlbC5hdHRyKGZpcnN0KTsKKyAgICAgICAgfSBlbHNlIGlmIChh cmd1bWVudHMubGVuZ3RoKSB7CisgICAgICAgICAgICBlbC5hZGQoQXJyYXku cHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKSk7CisgICAgICAg IH0KKyAgICAgICAgcmV0dXJuIGVsOworICAgIH07CisgICAgLypcCisgICAg ICogUGFwZXIucHRybgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAg ICogRXF1aXZhbGVudCBpbiBiZWhhdmlvdXIgdG8gQFBhcGVyLmcsIGV4Y2Vw dCBpdOKAmXMgYSBwYXR0ZXJuLgorICAgICAtIHggKG51bWJlcikgQG9wdGlv bmFsIFggb2YgdGhlIGVsZW1lbnQKKyAgICAgLSB5IChudW1iZXIpIEBvcHRp b25hbCBZIG9mIHRoZSBlbGVtZW50CisgICAgIC0gd2lkdGggKG51bWJlcikg QG9wdGlvbmFsIHdpZHRoIG9mIHRoZSBlbGVtZW50CisgICAgIC0gaGVpZ2h0 IChudW1iZXIpIEBvcHRpb25hbCBoZWlnaHQgb2YgdGhlIGVsZW1lbnQKKyAg ICAgLSB2YnggKG51bWJlcikgQG9wdGlvbmFsIHZpZXdib3ggWAorICAgICAt IHZieSAobnVtYmVyKSBAb3B0aW9uYWwgdmlld2JveCBZCisgICAgIC0gdmJ3 IChudW1iZXIpIEBvcHRpb25hbCB2aWV3Ym94IHdpZHRoCisgICAgIC0gdmJo IChudW1iZXIpIEBvcHRpb25hbCB2aWV3Ym94IGhlaWdodAorICAgICAqKgor ICAgICA9IChvYmplY3QpIHRoZSBgcGF0dGVybmAgZWxlbWVudAorICAgICAq KgorICAgIFwqLworICAgIHByb3RvLnB0cm4gPSBmdW5jdGlvbiAoeCwgeSwg d2lkdGgsIGhlaWdodCwgdngsIHZ5LCB2dywgdmgpIHsKKyAgICAgICAgaWYg KGlzKHgsICJvYmplY3QiKSkgeworICAgICAgICAgICAgdmFyIGF0dHIgPSB4 OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXR0ciA9IHtwYXR0 ZXJuVW5pdHM6ICJ1c2VyU3BhY2VPblVzZSJ9OworICAgICAgICAgICAgaWYg KHgpIHsKKyAgICAgICAgICAgICAgICBhdHRyLnggPSB4OworICAgICAgICAg ICAgfQorICAgICAgICAgICAgaWYgKHkpIHsKKyAgICAgICAgICAgICAgICBh dHRyLnkgPSB5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHdp ZHRoICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBhdHRyLndpZHRoID0g d2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaGVpZ2h0 ICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBhdHRyLmhlaWdodCA9IGhl aWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2eCAhPSBu dWxsICYmIHZ5ICE9IG51bGwgJiYgdncgIT0gbnVsbCAmJiB2aCAhPSBudWxs KSB7CisgICAgICAgICAgICAgICAgYXR0ci52aWV3Qm94ID0gW3Z4LCB2eSwg dncsIHZoXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgYXR0ci52aWV3Qm94ID0gW3ggfHwgMCwgeSB8fCAwLCB3aWR0aCB8fCAw LCBoZWlnaHQgfHwgMF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgICAgcmV0dXJuIHRoaXMuZWwoInBhdHRlcm4iLCBhdHRyKTsKKyAgICB9 OworICAgIC8qXAorICAgICAqIFBhcGVyLnVzZQorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogQ3JlYXRlcyBhIDx1c2U+IGVsZW1lbnQuCisg ICAgIC0gaWQgKHN0cmluZykgQG9wdGlvbmFsIGlkIG9mIGVsZW1lbnQgdG8g bGluaworICAgICAqIG9yCisgICAgIC0gaWQgKEVsZW1lbnQpIEBvcHRpb25h bCBlbGVtZW50IHRvIGxpbmsKKyAgICAgKioKKyAgICAgPSAob2JqZWN0KSB0 aGUgYHVzZWAgZWxlbWVudAorICAgICAqKgorICAgIFwqLworICAgIHByb3Rv LnVzZSA9IGZ1bmN0aW9uIChpZCkgeworICAgICAgICBpZiAoaWQgIT0gbnVs bCkgeworICAgICAgICAgICAgaWYgKGlkIGluc3RhbmNlb2YgRWxlbWVudCkg eworICAgICAgICAgICAgICAgIGlmICghaWQuYXR0cigiaWQiKSkgeworICAg ICAgICAgICAgICAgICAgICBpZC5hdHRyKHtpZDogU25hcC5fLmlkKGlkKX0p OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZCA9IGlk LmF0dHIoImlkIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo U3RyaW5nKGlkKS5jaGFyQXQoKSA9PSAiIyIpIHsKKyAgICAgICAgICAgICAg ICBpZCA9IGlkLnN1YnN0cmluZygxKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIHJldHVybiB0aGlzLmVsKCJ1c2UiLCB7InhsaW5rOmhyZWYiOiAi IyIgKyBpZH0pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0 dXJuIEVsZW1lbnQucHJvdG90eXBlLnVzZS5jYWxsKHRoaXMpOworICAgICAg ICB9CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBQYXBlci5zeW1ib2wKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIENyZWF0ZXMgYSA8c3lt Ym9sPiBlbGVtZW50LgorICAgICAtIHZieCAobnVtYmVyKSBAb3B0aW9uYWwg dmlld2JveCBYCisgICAgIC0gdmJ5IChudW1iZXIpIEBvcHRpb25hbCB2aWV3 Ym94IFkKKyAgICAgLSB2YncgKG51bWJlcikgQG9wdGlvbmFsIHZpZXdib3gg d2lkdGgKKyAgICAgLSB2YmggKG51bWJlcikgQG9wdGlvbmFsIHZpZXdib3gg aGVpZ2h0CisgICAgID0gKG9iamVjdCkgdGhlIGBzeW1ib2xgIGVsZW1lbnQK KyAgICAgKioKKyAgICBcKi8KKyAgICBwcm90by5zeW1ib2wgPSBmdW5jdGlv biAodngsIHZ5LCB2dywgdmgpIHsKKyAgICAgICAgdmFyIGF0dHIgPSB7fTsK KyAgICAgICAgaWYgKHZ4ICE9IG51bGwgJiYgdnkgIT0gbnVsbCAmJiB2dyAh PSBudWxsICYmIHZoICE9IG51bGwpIHsKKyAgICAgICAgICAgIGF0dHIudmll d0JveCA9IFt2eCwgdnksIHZ3LCB2aF07CisgICAgICAgIH0KKworICAgICAg ICByZXR1cm4gdGhpcy5lbCgic3ltYm9sIiwgYXR0cik7CisgICAgfTsKKyAg ICAvKlwKKyAgICAgKiBQYXBlci50ZXh0CisgICAgIFsgbWV0aG9kIF0KKyAg ICAgKioKKyAgICAgKiBEcmF3cyBhIHRleHQgc3RyaW5nCisgICAgICoqCisg ICAgIC0geCAobnVtYmVyKSB4IGNvb3JkaW5hdGUgcG9zaXRpb24KKyAgICAg LSB5IChudW1iZXIpIHkgY29vcmRpbmF0ZSBwb3NpdGlvbgorICAgICAtIHRl eHQgKHN0cmluZ3xhcnJheSkgVGhlIHRleHQgc3RyaW5nIHRvIGRyYXcgb3Ig YXJyYXkgb2Ygc3RyaW5ncyB0byBuZXN0IHdpdGhpbiBzZXBhcmF0ZSBgPHRz cGFuPmAgZWxlbWVudHMKKyAgICAgPSAob2JqZWN0KSB0aGUgYHRleHRgIGVs ZW1lbnQKKyAgICAgKioKKyAgICAgPiBVc2FnZQorICAgICB8IHZhciB0MSA9 IHBhcGVyLnRleHQoNTAsIDUwLCAiU25hcCIpOworICAgICB8IHZhciB0MiA9 IHBhcGVyLnRleHQoNTAsIDUwLCBbIlMiLCJuIiwiYSIsInAiXSk7CisgICAg IHwgLy8gVGV4dCBwYXRoIHVzYWdlCisgICAgIHwgdDEuYXR0cih7dGV4dHBh dGg6ICJNMTAsMTBMMTAwLDEwMCJ9KTsKKyAgICAgfCAvLyBvcgorICAgICB8 IHZhciBwdGggPSBwYXBlci5wYXRoKCJNMTAsMTBMMTAwLDEwMCIpOworICAg ICB8IHQxLmF0dHIoe3RleHRwYXRoOiBwdGh9KTsKKyAgICBcKi8KKyAgICBw cm90by50ZXh0ID0gZnVuY3Rpb24gKHgsIHksIHRleHQpIHsKKyAgICAgICAg dmFyIGF0dHIgPSB7fTsKKyAgICAgICAgaWYgKGlzKHgsICJvYmplY3QiKSkg eworICAgICAgICAgICAgYXR0ciA9IHg7CisgICAgICAgIH0gZWxzZSBpZiAo eCAhPSBudWxsKSB7CisgICAgICAgICAgICBhdHRyID0geworICAgICAgICAg ICAgICAgIHg6IHgsCisgICAgICAgICAgICAgICAgeTogeSwKKyAgICAgICAg ICAgICAgICB0ZXh0OiB0ZXh0IHx8ICIiCisgICAgICAgICAgICB9OworICAg ICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLmVsKCJ0ZXh0IiwgYXR0cik7 CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBQYXBlci5saW5lCisgICAgIFsg bWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBEcmF3cyBhIGxpbmUKKyAgICAg KioKKyAgICAgLSB4MSAobnVtYmVyKSB4IGNvb3JkaW5hdGUgcG9zaXRpb24g b2YgdGhlIHN0YXJ0CisgICAgIC0geTEgKG51bWJlcikgeSBjb29yZGluYXRl IHBvc2l0aW9uIG9mIHRoZSBzdGFydAorICAgICAtIHgyIChudW1iZXIpIHgg Y29vcmRpbmF0ZSBwb3NpdGlvbiBvZiB0aGUgZW5kCisgICAgIC0geTIgKG51 bWJlcikgeSBjb29yZGluYXRlIHBvc2l0aW9uIG9mIHRoZSBlbmQKKyAgICAg PSAob2JqZWN0KSB0aGUgYGxpbmVgIGVsZW1lbnQKKyAgICAgKioKKyAgICAg PiBVc2FnZQorICAgICB8IHZhciB0MSA9IHBhcGVyLmxpbmUoNTAsIDUwLCAx MDAsIDEwMCk7CisgICAgXCovCisgICAgcHJvdG8ubGluZSA9IGZ1bmN0aW9u ICh4MSwgeTEsIHgyLCB5MikgeworICAgICAgICB2YXIgYXR0ciA9IHt9Owor ICAgICAgICBpZiAoaXMoeDEsICJvYmplY3QiKSkgeworICAgICAgICAgICAg YXR0ciA9IHgxOworICAgICAgICB9IGVsc2UgaWYgKHgxICE9IG51bGwpIHsK KyAgICAgICAgICAgIGF0dHIgPSB7CisgICAgICAgICAgICAgICAgeDE6IHgx LAorICAgICAgICAgICAgICAgIHgyOiB4MiwKKyAgICAgICAgICAgICAgICB5 MTogeTEsCisgICAgICAgICAgICAgICAgeTI6IHkyCisgICAgICAgICAgICB9 OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLmVsKCJsaW5lIiwg YXR0cik7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBQYXBlci5wb2x5bGlu ZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogRHJhd3MgYSBw b2x5bGluZQorICAgICAqKgorICAgICAtIHBvaW50cyAoYXJyYXkpIGFycmF5 IG9mIHBvaW50cworICAgICAqIG9yCisgICAgIC0gdmFyYXJncyAo4oCmKSBw b2ludHMKKyAgICAgPSAob2JqZWN0KSB0aGUgYHBvbHlsaW5lYCBlbGVtZW50 CisgICAgICoqCisgICAgID4gVXNhZ2UKKyAgICAgfCB2YXIgcDEgPSBwYXBl ci5wb2x5bGluZShbMTAsIDEwLCAxMDAsIDEwMF0pOworICAgICB8IHZhciBw MiA9IHBhcGVyLnBvbHlsaW5lKDEwLCAxMCwgMTAwLCAxMDApOworICAgIFwq LworICAgIHByb3RvLnBvbHlsaW5lID0gZnVuY3Rpb24gKHBvaW50cykgewor ICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKKyAgICAgICAg ICAgIHBvaW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt ZW50cywgMCk7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGF0dHIgPSB7fTsK KyAgICAgICAgaWYgKGlzKHBvaW50cywgIm9iamVjdCIpICYmICFpcyhwb2lu dHMsICJhcnJheSIpKSB7CisgICAgICAgICAgICBhdHRyID0gcG9pbnRzOwor ICAgICAgICB9IGVsc2UgaWYgKHBvaW50cyAhPSBudWxsKSB7CisgICAgICAg ICAgICBhdHRyID0ge3BvaW50czogcG9pbnRzfTsKKyAgICAgICAgfQorICAg ICAgICByZXR1cm4gdGhpcy5lbCgicG9seWxpbmUiLCBhdHRyKTsKKyAgICB9 OworICAgIC8qXAorICAgICAqIFBhcGVyLnBvbHlnb24KKyAgICAgWyBtZXRo b2QgXQorICAgICAqKgorICAgICAqIERyYXdzIGEgcG9seWdvbi4gU2VlIEBQ YXBlci5wb2x5bGluZQorICAgIFwqLworICAgIHByb3RvLnBvbHlnb24gPSBm dW5jdGlvbiAocG9pbnRzKSB7CisgICAgICAgIGlmIChhcmd1bWVudHMubGVu Z3RoID4gMSkgeworICAgICAgICAgICAgcG9pbnRzID0gQXJyYXkucHJvdG90 eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTsKKyAgICAgICAgfQorICAg ICAgICB2YXIgYXR0ciA9IHt9OworICAgICAgICBpZiAoaXMocG9pbnRzLCAi b2JqZWN0IikgJiYgIWlzKHBvaW50cywgImFycmF5IikpIHsKKyAgICAgICAg ICAgIGF0dHIgPSBwb2ludHM7CisgICAgICAgIH0gZWxzZSBpZiAocG9pbnRz ICE9IG51bGwpIHsKKyAgICAgICAgICAgIGF0dHIgPSB7cG9pbnRzOiBwb2lu dHN9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzLmVsKCJwb2x5 Z29uIiwgYXR0cik7CisgICAgfTsKKyAgICAvLyBncmFkaWVudHMKKyAgICAo ZnVuY3Rpb24gKCkgeworICAgICAgICB2YXIgJCA9IFNuYXAuXy4kOworICAg ICAgICAvLyBncmFkaWVudHMnIGhlbHBlcnMKKyAgICAgICAgZnVuY3Rpb24g R3N0b3BzKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0QWxs KCJzdG9wIik7CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gR2FkZFN0 b3AoY29sb3IsIG9mZnNldCkgeworICAgICAgICAgICAgdmFyIHN0b3AgPSAk KCJzdG9wIiksCisgICAgICAgICAgICAgICAgYXR0ciA9IHsKKyAgICAgICAg ICAgICAgICAgICAgb2Zmc2V0OiArb2Zmc2V0ICsgIiUiCisgICAgICAgICAg ICAgICAgfTsKKyAgICAgICAgICAgIGNvbG9yID0gU25hcC5jb2xvcihjb2xv cik7CisgICAgICAgICAgICBhdHRyWyJzdG9wLWNvbG9yIl0gPSBjb2xvci5o ZXg7CisgICAgICAgICAgICBpZiAoY29sb3Iub3BhY2l0eSA8IDEpIHsKKyAg ICAgICAgICAgICAgICBhdHRyWyJzdG9wLW9wYWNpdHkiXSA9IGNvbG9yLm9w YWNpdHk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAkKHN0b3AsIGF0 dHIpOworICAgICAgICAgICAgdGhpcy5ub2RlLmFwcGVuZENoaWxkKHN0b3Ap OworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0KKyAgICAg ICAgZnVuY3Rpb24gR2dldEJCb3goKSB7CisgICAgICAgICAgICBpZiAodGhp cy50eXBlID09ICJsaW5lYXJHcmFkaWVudCIpIHsKKyAgICAgICAgICAgICAg ICB2YXIgeDEgPSAkKHRoaXMubm9kZSwgIngxIikgfHwgMCwKKyAgICAgICAg ICAgICAgICAgICAgeDIgPSAkKHRoaXMubm9kZSwgIngyIikgfHwgMSwKKyAg ICAgICAgICAgICAgICAgICAgeTEgPSAkKHRoaXMubm9kZSwgInkxIikgfHwg MCwKKyAgICAgICAgICAgICAgICAgICAgeTIgPSAkKHRoaXMubm9kZSwgInky IikgfHwgMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gU25hcC5fLmJveCh4 MSwgeTEsIG1hdGguYWJzKHgyIC0geDEpLCBtYXRoLmFicyh5MiAtIHkxKSk7 CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBj eCA9IHRoaXMubm9kZS5jeCB8fCAuNSwKKyAgICAgICAgICAgICAgICAgICAg Y3kgPSB0aGlzLm5vZGUuY3kgfHwgLjUsCisgICAgICAgICAgICAgICAgICAg IHIgPSB0aGlzLm5vZGUuciB8fCAwOworICAgICAgICAgICAgICAgIHJldHVy biBTbmFwLl8uYm94KGN4IC0gciwgY3kgLSByLCByICogMiwgciAqIDIpOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZ1bmN0aW9uIGdy YWRpZW50KGRlZnMsIHN0cikgeworICAgICAgICAgICAgdmFyIGdyYWQgPSBl dmUoInNuYXAudXRpbC5ncmFkLnBhcnNlIiwgbnVsbCwgc3RyKS5maXJzdERl ZmluZWQoKSwKKyAgICAgICAgICAgICAgICBlbDsKKyAgICAgICAgICAgIGlm ICghZ3JhZCkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgZ3JhZC5wYXJhbXMudW5zaGlmdChk ZWZzKTsKKyAgICAgICAgICAgIGlmIChncmFkLnR5cGUudG9Mb3dlckNhc2Uo KSA9PSAibCIpIHsKKyAgICAgICAgICAgICAgICBlbCA9IGdyYWRpZW50TGlu ZWFyLmFwcGx5KDAsIGdyYWQucGFyYW1zKTsKKyAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgZWwgPSBncmFkaWVudFJhZGlhbC5hcHBs eSgwLCBncmFkLnBhcmFtcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBpZiAoZ3JhZC50eXBlICE9IGdyYWQudHlwZS50b0xvd2VyQ2FzZSgpKSB7 CisgICAgICAgICAgICAgICAgJChlbC5ub2RlLCB7CisgICAgICAgICAgICAg ICAgICAgIGdyYWRpZW50VW5pdHM6ICJ1c2VyU3BhY2VPblVzZSIKKyAgICAg ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZh ciBzdG9wcyA9IGdyYWQuc3RvcHMsCisgICAgICAgICAgICAgICAgbGVuID0g c3RvcHMubGVuZ3RoLAorICAgICAgICAgICAgICAgIHN0YXJ0ID0gMCwKKyAg ICAgICAgICAgICAgICBqID0gMDsKKyAgICAgICAgICAgIGZ1bmN0aW9uIHNl ZWQoaSwgZW5kKSB7CisgICAgICAgICAgICAgICAgdmFyIHN0ZXAgPSAoZW5k IC0gc3RhcnQpIC8gKGkgLSBqKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZh ciBrID0gajsgayA8IGk7IGsrKykgeworICAgICAgICAgICAgICAgICAgICBz dG9wc1trXS5vZmZzZXQgPSArKCtzdGFydCArIHN0ZXAgKiAoayAtIGopKS50 b0ZpeGVkKDIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBqID0gaTsKKyAgICAgICAgICAgICAgICBzdGFydCA9IGVuZDsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGxlbi0tOworICAgICAgICAgICAgZm9y ICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykgaWYgKCJvZmZzZXQiIGluIHN0 b3BzW2ldKSB7CisgICAgICAgICAgICAgICAgc2VlZChpLCBzdG9wc1tpXS5v ZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RvcHNbbGVu XS5vZmZzZXQgPSBzdG9wc1tsZW5dLm9mZnNldCB8fCAxMDA7CisgICAgICAg ICAgICBzZWVkKGxlbiwgc3RvcHNbbGVuXS5vZmZzZXQpOworICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8PSBsZW47IGkrKykgeworICAgICAgICAgICAg ICAgIHZhciBzdG9wID0gc3RvcHNbaV07CisgICAgICAgICAgICAgICAgZWwu YWRkU3RvcChzdG9wLmNvbG9yLCBzdG9wLm9mZnNldCk7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICByZXR1cm4gZWw7CisgICAgICAgIH0KKyAgICAg ICAgZnVuY3Rpb24gZ3JhZGllbnRMaW5lYXIoZGVmcywgeDEsIHkxLCB4Miwg eTIpIHsKKyAgICAgICAgICAgIHZhciBlbCA9IFNuYXAuXy5tYWtlKCJsaW5l YXJHcmFkaWVudCIsIGRlZnMpOworICAgICAgICAgICAgZWwuc3RvcHMgPSBH c3RvcHM7CisgICAgICAgICAgICBlbC5hZGRTdG9wID0gR2FkZFN0b3A7Cisg ICAgICAgICAgICBlbC5nZXRCQm94ID0gR2dldEJCb3g7CisgICAgICAgICAg ICBpZiAoeDEgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgICQoZWwubm9k ZSwgeworICAgICAgICAgICAgICAgICAgICB4MTogeDEsCisgICAgICAgICAg ICAgICAgICAgIHkxOiB5MSwKKyAgICAgICAgICAgICAgICAgICAgeDI6IHgy LAorICAgICAgICAgICAgICAgICAgICB5MjogeTIKKyAgICAgICAgICAgICAg ICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBlbDsK KyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBncmFkaWVudFJhZGlhbChk ZWZzLCBjeCwgY3ksIHIsIGZ4LCBmeSkgeworICAgICAgICAgICAgdmFyIGVs ID0gU25hcC5fLm1ha2UoInJhZGlhbEdyYWRpZW50IiwgZGVmcyk7CisgICAg ICAgICAgICBlbC5zdG9wcyA9IEdzdG9wczsKKyAgICAgICAgICAgIGVsLmFk ZFN0b3AgPSBHYWRkU3RvcDsKKyAgICAgICAgICAgIGVsLmdldEJCb3ggPSBH Z2V0QkJveDsKKyAgICAgICAgICAgIGlmIChjeCAhPSBudWxsKSB7CisgICAg ICAgICAgICAgICAgJChlbC5ub2RlLCB7CisgICAgICAgICAgICAgICAgICAg IGN4OiBjeCwKKyAgICAgICAgICAgICAgICAgICAgY3k6IGN5LAorICAgICAg ICAgICAgICAgICAgICByOiByCisgICAgICAgICAgICAgICAgfSk7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAoZnggIT0gbnVsbCAmJiBmeSAh PSBudWxsKSB7CisgICAgICAgICAgICAgICAgJChlbC5ub2RlLCB7CisgICAg ICAgICAgICAgICAgICAgIGZ4OiBmeCwKKyAgICAgICAgICAgICAgICAgICAg Znk6IGZ5CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9Cisg ICAgICAgICAgICByZXR1cm4gZWw7CisgICAgICAgIH0KKyAgICAgICAgLypc CisgICAgICAgICAqIFBhcGVyLmdyYWRpZW50CisgICAgICAgICBbIG1ldGhv ZCBdCisgICAgICAgICAqKgorICAgICAgICAgKiBDcmVhdGVzIGEgZ3JhZGll bnQgZWxlbWVudAorICAgICAgICAgKioKKyAgICAgICAgIC0gZ3JhZGllbnQg KHN0cmluZykgZ3JhZGllbnQgZGVzY3JpcHRvcgorICAgICAgICAgPiBHcmFk aWVudCBEZXNjcmlwdG9yCisgICAgICAgICAqIFRoZSBncmFkaWVudCBkZXNj cmlwdG9yIGlzIGFuIGV4cHJlc3Npb24gZm9ybWF0dGVkIGFzCisgICAgICAg ICAqIGZvbGxvd3M6IGA8dHlwZT4oPGNvb3Jkcz4pPGNvbG9ycz5gLiAgVGhl IGA8dHlwZT5gIGNhbiBiZQorICAgICAgICAgKiBlaXRoZXIgbGluZWFyIG9y IHJhZGlhbC4gIFRoZSB1cHBlcmNhc2UgYExgIG9yIGBSYCBsZXR0ZXJzCisg ICAgICAgICAqIGluZGljYXRlIGFic29sdXRlIGNvb3JkaW5hdGVzIG9mZnNl dCBmcm9tIHRoZSBTVkcgc3VyZmFjZS4KKyAgICAgICAgICogTG93ZXJjYXNl IGBsYCBvciBgcmAgbGV0dGVycyBpbmRpY2F0ZSBjb29yZGluYXRlcworICAg ICAgICAgKiBjYWxjdWxhdGVkIHJlbGF0aXZlIHRvIHRoZSBlbGVtZW50IHRv IHdoaWNoIHRoZSBncmFkaWVudCBpcworICAgICAgICAgKiBhcHBsaWVkLiAg Q29vcmRpbmF0ZXMgc3BlY2lmeSBhIGxpbmVhciBncmFkaWVudCB2ZWN0b3Ig YXMKKyAgICAgICAgICogYHgxYCwgYHkxYCwgYHgyYCwgYHkyYCwgb3IgYSBy YWRpYWwgZ3JhZGllbnQgYXMgYGN4YCwgYGN5YCwKKyAgICAgICAgICogYHJg IGFuZCBvcHRpb25hbCBgZnhgLCBgZnlgIHNwZWNpZnlpbmcgYSBmb2NhbCBw b2ludCBhd2F5CisgICAgICAgICAqIGZyb20gdGhlIGNlbnRlciBvZiB0aGUg Y2lyY2xlLiBTcGVjaWZ5IGA8Y29sb3JzPmAgYXMgYSBsaXN0CisgICAgICAg ICAqIG9mIGRhc2gtc2VwYXJhdGVkIENTUyBjb2xvciB2YWx1ZXMuICBFYWNo IGNvbG9yIG1heSBiZQorICAgICAgICAgKiBmb2xsb3dlZCBieSBhIGN1c3Rv bSBvZmZzZXQgdmFsdWUsIHNlcGFyYXRlZCB3aXRoIGEgY29sb24KKyAgICAg ICAgICogY2hhcmFjdGVyLgorICAgICAgICAgPiBFeGFtcGxlcworICAgICAg ICAgKiBMaW5lYXIgZ3JhZGllbnQsIHJlbGF0aXZlIGZyb20gdG9wLWxlZnQg Y29ybmVyIHRvIGJvdHRvbS1yaWdodAorICAgICAgICAgKiBjb3JuZXIsIGZy b20gYmxhY2sgdGhyb3VnaCByZWQgdG8gd2hpdGU6CisgICAgICAgICB8IHZh ciBnID0gcGFwZXIuZ3JhZGllbnQoImwoMCwgMCwgMSwgMSkjMDAwLSNmMDAt I2ZmZiIpOworICAgICAgICAgKiBMaW5lYXIgZ3JhZGllbnQsIGFic29sdXRl IGZyb20gKDAsIDApIHRvICgxMDAsIDEwMCksIGZyb20gYmxhY2sKKyAgICAg ICAgICogdGhyb3VnaCByZWQgYXQgMjUlIHRvIHdoaXRlOgorICAgICAgICAg fCB2YXIgZyA9IHBhcGVyLmdyYWRpZW50KCJMKDAsIDAsIDEwMCwgMTAwKSMw MDAtI2YwMDoyNS0jZmZmIik7CisgICAgICAgICAqIFJhZGlhbCBncmFkaWVu dCwgcmVsYXRpdmUgZnJvbSB0aGUgY2VudGVyIG9mIHRoZSBlbGVtZW50IHdp dGggcmFkaXVzCisgICAgICAgICAqIGhhbGYgdGhlIHdpZHRoLCBmcm9tIGJs YWNrIHRvIHdoaXRlOgorICAgICAgICAgfCB2YXIgZyA9IHBhcGVyLmdyYWRp ZW50KCJyKDAuNSwgMC41LCAwLjUpIzAwMC0jZmZmIik7CisgICAgICAgICAq IFRvIGFwcGx5IHRoZSBncmFkaWVudDoKKyAgICAgICAgIHwgcGFwZXIuY2ly Y2xlKDUwLCA1MCwgNDApLmF0dHIoeworICAgICAgICAgfCAgICAgZmlsbDog ZworICAgICAgICAgfCB9KTsKKyAgICAgICAgID0gKG9iamVjdCkgdGhlIGBn cmFkaWVudGAgZWxlbWVudAorICAgICAgICBcKi8KKyAgICAgICAgcHJvdG8u Z3JhZGllbnQgPSBmdW5jdGlvbiAoc3RyKSB7CisgICAgICAgICAgICByZXR1 cm4gZ3JhZGllbnQodGhpcy5kZWZzLCBzdHIpOworICAgICAgICB9OworICAg ICAgICBwcm90by5ncmFkaWVudExpbmVhciA9IGZ1bmN0aW9uICh4MSwgeTEs IHgyLCB5MikgeworICAgICAgICAgICAgcmV0dXJuIGdyYWRpZW50TGluZWFy KHRoaXMuZGVmcywgeDEsIHkxLCB4MiwgeTIpOworICAgICAgICB9OworICAg ICAgICBwcm90by5ncmFkaWVudFJhZGlhbCA9IGZ1bmN0aW9uIChjeCwgY3ks IHIsIGZ4LCBmeSkgeworICAgICAgICAgICAgcmV0dXJuIGdyYWRpZW50UmFk aWFsKHRoaXMuZGVmcywgY3gsIGN5LCByLCBmeCwgZnkpOworICAgICAgICB9 OworICAgICAgICAvKlwKKyAgICAgICAgICogUGFwZXIudG9TdHJpbmcKKyAg ICAgICAgIFsgbWV0aG9kIF0KKyAgICAgICAgICoqCisgICAgICAgICAqIFJl dHVybnMgU1ZHIGNvZGUgZm9yIHRoZSBAUGFwZXIKKyAgICAgICAgID0gKHN0 cmluZykgU1ZHIGNvZGUgZm9yIHRoZSBAUGFwZXIKKyAgICAgICAgXCovCisg ICAgICAgIHByb3RvLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgICAg ICAgICAgdmFyIGRvYyA9IHRoaXMubm9kZS5vd25lckRvY3VtZW50LAorICAg ICAgICAgICAgICAgIGYgPSBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgp LAorICAgICAgICAgICAgICAgIGQgPSBkb2MuY3JlYXRlRWxlbWVudCgiZGl2 IiksCisgICAgICAgICAgICAgICAgc3ZnID0gdGhpcy5ub2RlLmNsb25lTm9k ZSh0cnVlKSwKKyAgICAgICAgICAgICAgICByZXM7CisgICAgICAgICAgICBm LmFwcGVuZENoaWxkKGQpOworICAgICAgICAgICAgZC5hcHBlbmRDaGlsZChz dmcpOworICAgICAgICAgICAgU25hcC5fLiQoc3ZnLCB7eG1sbnM6ICJodHRw Oi8vd3d3LnczLm9yZy8yMDAwL3N2ZyJ9KTsKKyAgICAgICAgICAgIHJlcyA9 IGQuaW5uZXJIVE1MOworICAgICAgICAgICAgZi5yZW1vdmVDaGlsZChmLmZp cnN0Q2hpbGQpOworICAgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAg fTsKKyAgICAgICAgLypcCisgICAgICAgICAqIFBhcGVyLnRvRGF0YVVSTAor ICAgICAgICAgWyBtZXRob2QgXQorICAgICAgICAgKioKKyAgICAgICAgICog UmV0dXJucyBTVkcgY29kZSBmb3IgdGhlIEBQYXBlciBhcyBEYXRhIFVSSSBz dHJpbmcuCisgICAgICAgICA9IChzdHJpbmcpIERhdGEgVVJJIHN0cmluZwor ICAgICAgICBcKi8KKyAgICAgICAgcHJvdG8udG9EYXRhVVJMID0gZnVuY3Rp b24gKCkgeworICAgICAgICAgICAgaWYgKHdpbmRvdyAmJiB3aW5kb3cuYnRv YSkgeworICAgICAgICAgICAgICAgIHJldHVybiAiZGF0YTppbWFnZS9zdmcr eG1sO2Jhc2U2NCwiICsgYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25l bnQodGhpcykpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKyAgICAg ICAgLypcCisgICAgICAgICAqIFBhcGVyLmNsZWFyCisgICAgICAgICBbIG1l dGhvZCBdCisgICAgICAgICAqKgorICAgICAgICAgKiBSZW1vdmVzIGFsbCBj aGlsZCBub2RlcyBvZiB0aGUgcGFwZXIsIGV4Y2VwdCA8ZGVmcz4uCisgICAg ICAgIFwqLworICAgICAgICBwcm90by5jbGVhciA9IGZ1bmN0aW9uICgpIHsK KyAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5ub2RlLmZpcnN0Q2hpbGQs CisgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgIHdoaWxlIChu b2RlKSB7CisgICAgICAgICAgICAgICAgbmV4dCA9IG5vZGUubmV4dFNpYmxp bmc7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUudGFnTmFtZSAhPSAiZGVm cyIpIHsKKyAgICAgICAgICAgICAgICAgICAgbm9kZS5wYXJlbnROb2RlLnJl bW92ZUNoaWxkKG5vZGUpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgICAgIHByb3RvLmNsZWFyLmNhbGwoe25vZGU6IG5v ZGV9KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbm9k ZSA9IG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfSgp KTsKK30pOworCisvLyBDb3B5cmlnaHQgKGMpIDIwMTMgQWRvYmUgU3lzdGVt cyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisvLworLy8g TGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIu MCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBm aWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisv LyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKy8v CisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0y LjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcg b3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmli dXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAi QVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJ VElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQu CisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFn ZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1 bmRlciB0aGUgTGljZW5zZS4KK1NuYXAucGx1Z2luKGZ1bmN0aW9uIChTbmFw LCBFbGVtZW50LCBQYXBlciwgZ2xvYikgeworICAgIHZhciBlbHByb3RvID0g RWxlbWVudC5wcm90b3R5cGUsCisgICAgICAgIGlzID0gU25hcC5pcywKKyAg ICAgICAgY2xvbmUgPSBTbmFwLl8uY2xvbmUsCisgICAgICAgIGhhcyA9ICJo YXNPd25Qcm9wZXJ0eSIsCisgICAgICAgIHAycyA9IC8sPyhbYS16XSksPy9n aSwKKyAgICAgICAgdG9GbG9hdCA9IHBhcnNlRmxvYXQsCisgICAgICAgIG1h dGggPSBNYXRoLAorICAgICAgICBQSSA9IG1hdGguUEksCisgICAgICAgIG1t aW4gPSBtYXRoLm1pbiwKKyAgICAgICAgbW1heCA9IG1hdGgubWF4LAorICAg ICAgICBwb3cgPSBtYXRoLnBvdywKKyAgICAgICAgYWJzID0gbWF0aC5hYnM7 CisgICAgZnVuY3Rpb24gcGF0aHMocHMpIHsKKyAgICAgICAgdmFyIHAgPSBw YXRocy5wcyA9IHBhdGhzLnBzIHx8IHt9OworICAgICAgICBpZiAocFtwc10p IHsKKyAgICAgICAgICAgIHBbcHNdLnNsZWVwID0gMTAwOworICAgICAgICB9 IGVsc2UgeworICAgICAgICAgICAgcFtwc10gPSB7CisgICAgICAgICAgICAg ICAgc2xlZXA6IDEwMAorICAgICAgICAgICAgfTsKKyAgICAgICAgfQorICAg ICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIGZv ciAodmFyIGtleSBpbiBwKSBpZiAocFtoYXNdKGtleSkgJiYga2V5ICE9IHBz KSB7CisgICAgICAgICAgICAgICAgcFtrZXldLnNsZWVwLS07CisgICAgICAg ICAgICAgICAgIXBba2V5XS5zbGVlcCAmJiBkZWxldGUgcFtrZXldOworICAg ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuIHBbcHNd OworICAgIH0KKyAgICBmdW5jdGlvbiBib3goeCwgeSwgd2lkdGgsIGhlaWdo dCkgeworICAgICAgICBpZiAoeCA9PSBudWxsKSB7CisgICAgICAgICAgICB4 ID0geSA9IHdpZHRoID0gaGVpZ2h0ID0gMDsKKyAgICAgICAgfQorICAgICAg ICBpZiAoeSA9PSBudWxsKSB7CisgICAgICAgICAgICB5ID0geC55OworICAg ICAgICAgICAgd2lkdGggPSB4LndpZHRoOworICAgICAgICAgICAgaGVpZ2h0 ID0geC5oZWlnaHQ7CisgICAgICAgICAgICB4ID0geC54OworICAgICAgICB9 CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICB4OiB4LAorICAgICAg ICAgICAgeTogeSwKKyAgICAgICAgICAgIHdpZHRoOiB3aWR0aCwKKyAgICAg ICAgICAgIHc6IHdpZHRoLAorICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQs CisgICAgICAgICAgICBoOiBoZWlnaHQsCisgICAgICAgICAgICB4MjogeCAr IHdpZHRoLAorICAgICAgICAgICAgeTI6IHkgKyBoZWlnaHQsCisgICAgICAg ICAgICBjeDogeCArIHdpZHRoIC8gMiwKKyAgICAgICAgICAgIGN5OiB5ICsg aGVpZ2h0IC8gMiwKKyAgICAgICAgICAgIHIxOiBtYXRoLm1pbih3aWR0aCwg aGVpZ2h0KSAvIDIsCisgICAgICAgICAgICByMjogbWF0aC5tYXgod2lkdGgs IGhlaWdodCkgLyAyLAorICAgICAgICAgICAgcjA6IG1hdGguc3FydCh3aWR0 aCAqIHdpZHRoICsgaGVpZ2h0ICogaGVpZ2h0KSAvIDIsCisgICAgICAgICAg ICBwYXRoOiByZWN0UGF0aCh4LCB5LCB3aWR0aCwgaGVpZ2h0KSwKKyAgICAg ICAgICAgIHZiOiBbeCwgeSwgd2lkdGgsIGhlaWdodF0uam9pbigiICIpCisg ICAgICAgIH07CisgICAgfQorICAgIGZ1bmN0aW9uIHRvU3RyaW5nKCkgewor ICAgICAgICByZXR1cm4gdGhpcy5qb2luKCIsIikucmVwbGFjZShwMnMsICIk MSIpOworICAgIH0KKyAgICBmdW5jdGlvbiBwYXRoQ2xvbmUocGF0aEFycmF5 KSB7CisgICAgICAgIHZhciByZXMgPSBjbG9uZShwYXRoQXJyYXkpOworICAg ICAgICByZXMudG9TdHJpbmcgPSB0b1N0cmluZzsKKyAgICAgICAgcmV0dXJu IHJlczsKKyAgICB9CisgICAgZnVuY3Rpb24gZ2V0UG9pbnRBdFNlZ21lbnRM ZW5ndGgocDF4LCBwMXksIGMxeCwgYzF5LCBjMngsIGMyeSwgcDJ4LCBwMnks IGxlbmd0aCkgeworICAgICAgICBpZiAobGVuZ3RoID09IG51bGwpIHsKKyAg ICAgICAgICAgIHJldHVybiBiZXpsZW4ocDF4LCBwMXksIGMxeCwgYzF5LCBj MngsIGMyeSwgcDJ4LCBwMnkpOworICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgcmV0dXJuIGZpbmREb3RzQXRTZWdtZW50KHAxeCwgcDF5LCBjMXgs IGMxeSwgYzJ4LCBjMnksIHAyeCwgcDJ5LAorICAgICAgICAgICAgICAgIGdl dFRvdExlbihwMXgsIHAxeSwgYzF4LCBjMXksIGMyeCwgYzJ5LCBwMngsIHAy eSwgbGVuZ3RoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24g Z2V0TGVuZ3RoRmFjdG9yeShpc3RvdGFsLCBzdWJwYXRoKSB7CisgICAgICAg IGZ1bmN0aW9uIE8odmFsKSB7CisgICAgICAgICAgICByZXR1cm4gKygrdmFs KS50b0ZpeGVkKDMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTbmFw Ll8uY2FjaGVyKGZ1bmN0aW9uIChwYXRoLCBsZW5ndGgsIG9ubHlzdGFydCkg eworICAgICAgICAgICAgaWYgKHBhdGggaW5zdGFuY2VvZiBFbGVtZW50KSB7 CisgICAgICAgICAgICAgICAgcGF0aCA9IHBhdGguYXR0cigiZCIpOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgcGF0aCA9IHBhdGgyY3VydmUocGF0 aCk7CisgICAgICAgICAgICB2YXIgeCwgeSwgcCwgbCwgc3AgPSAiIiwgc3Vi cGF0aHMgPSB7fSwgcG9pbnQsCisgICAgICAgICAgICAgICAgbGVuID0gMDsK KyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHBhdGgubGVuZ3Ro OyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgICAgIHAgPSBwYXRoW2ld OworICAgICAgICAgICAgICAgIGlmIChwWzBdID09ICJNIikgeworICAgICAg ICAgICAgICAgICAgICB4ID0gK3BbMV07CisgICAgICAgICAgICAgICAgICAg IHkgPSArcFsyXTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgICAgICBsID0gZ2V0UG9pbnRBdFNlZ21lbnRMZW5ndGgoeCwg eSwgcFsxXSwgcFsyXSwgcFszXSwgcFs0XSwgcFs1XSwgcFs2XSk7CisgICAg ICAgICAgICAgICAgICAgIGlmIChsZW4gKyBsID4gbGVuZ3RoKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICBpZiAoc3VicGF0aCAmJiAhc3VicGF0aHMu c3RhcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludCA9 IGdldFBvaW50QXRTZWdtZW50TGVuZ3RoKHgsIHksIHBbMV0sIHBbMl0sIHBb M10sIHBbNF0sIHBbNV0sIHBbNl0sIGxlbmd0aCAtIGxlbik7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3AgKz0gWworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiQyIgKyBPKHBvaW50LnN0YXJ0LngpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPKHBvaW50LnN0YXJ0Lnkp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPKHBvaW50Lm0u eCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8ocG9pbnQu bS55KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyhwb2lu dC54KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyhwb2lu dC55KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKG9ubHlzdGFydCkge3JldHVybiBz cDt9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VicGF0aHMuc3Rh cnQgPSBzcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcCA9IFsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk0iICsgTyhwb2lu dC54KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTyhwb2lu dC55KSArICJDIiArIE8ocG9pbnQubi54KSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTyhwb2ludC5uLnkpLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBPKHBvaW50LmVuZC54KSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTyhwb2ludC5lbmQueSksCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE8ocFs1XSksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE8ocFs2XSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBdLmpvaW4oKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsZW4gKz0gbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB4ID0gK3BbNV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9 ICtwWzZdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKCFpc3RvdGFsICYmICFzdWJwYXRoKSB7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcG9pbnQgPSBnZXRQb2ludEF0U2VnbWVu dExlbmd0aCh4LCB5LCBwWzFdLCBwWzJdLCBwWzNdLCBwWzRdLCBwWzVdLCBw WzZdLCBsZW5ndGggLSBsZW4pOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJldHVybiBwb2ludDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBs ZW4gKz0gbDsKKyAgICAgICAgICAgICAgICAgICAgeCA9ICtwWzVdOworICAg ICAgICAgICAgICAgICAgICB5ID0gK3BbNl07CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgIHNwICs9IHAuc2hpZnQoKSArIHA7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBzdWJwYXRocy5lbmQgPSBzcDsKKyAg ICAgICAgICAgIHBvaW50ID0gaXN0b3RhbCA/IGxlbiA6IHN1YnBhdGggPyBz dWJwYXRocyA6IGZpbmREb3RzQXRTZWdtZW50KHgsIHksIHBbMF0sIHBbMV0s IHBbMl0sIHBbM10sIHBbNF0sIHBbNV0sIDEpOworICAgICAgICAgICAgcmV0 dXJuIHBvaW50OworICAgICAgICB9LCBudWxsLCBTbmFwLl8uY2xvbmUpOwor ICAgIH0KKyAgICB2YXIgZ2V0VG90YWxMZW5ndGggPSBnZXRMZW5ndGhGYWN0 b3J5KDEpLAorICAgICAgICBnZXRQb2ludEF0TGVuZ3RoID0gZ2V0TGVuZ3Ro RmFjdG9yeSgpLAorICAgICAgICBnZXRTdWJwYXRoc0F0TGVuZ3RoID0gZ2V0 TGVuZ3RoRmFjdG9yeSgwLCAxKTsKKyAgICBmdW5jdGlvbiBmaW5kRG90c0F0 U2VnbWVudChwMXgsIHAxeSwgYzF4LCBjMXksIGMyeCwgYzJ5LCBwMngsIHAy eSwgdCkgeworICAgICAgICB2YXIgdDEgPSAxIC0gdCwKKyAgICAgICAgICAg IHQxMyA9IHBvdyh0MSwgMyksCisgICAgICAgICAgICB0MTIgPSBwb3codDEs IDIpLAorICAgICAgICAgICAgdDIgPSB0ICogdCwKKyAgICAgICAgICAgIHQz ID0gdDIgKiB0LAorICAgICAgICAgICAgeCA9IHQxMyAqIHAxeCArIHQxMiAq IDMgKiB0ICogYzF4ICsgdDEgKiAzICogdCAqIHQgKiBjMnggKyB0MyAqIHAy eCwKKyAgICAgICAgICAgIHkgPSB0MTMgKiBwMXkgKyB0MTIgKiAzICogdCAq IGMxeSArIHQxICogMyAqIHQgKiB0ICogYzJ5ICsgdDMgKiBwMnksCisgICAg ICAgICAgICBteCA9IHAxeCArIDIgKiB0ICogKGMxeCAtIHAxeCkgKyB0MiAq IChjMnggLSAyICogYzF4ICsgcDF4KSwKKyAgICAgICAgICAgIG15ID0gcDF5 ICsgMiAqIHQgKiAoYzF5IC0gcDF5KSArIHQyICogKGMyeSAtIDIgKiBjMXkg KyBwMXkpLAorICAgICAgICAgICAgbnggPSBjMXggKyAyICogdCAqIChjMngg LSBjMXgpICsgdDIgKiAocDJ4IC0gMiAqIGMyeCArIGMxeCksCisgICAgICAg ICAgICBueSA9IGMxeSArIDIgKiB0ICogKGMyeSAtIGMxeSkgKyB0MiAqIChw MnkgLSAyICogYzJ5ICsgYzF5KSwKKyAgICAgICAgICAgIGF4ID0gdDEgKiBw MXggKyB0ICogYzF4LAorICAgICAgICAgICAgYXkgPSB0MSAqIHAxeSArIHQg KiBjMXksCisgICAgICAgICAgICBjeCA9IHQxICogYzJ4ICsgdCAqIHAyeCwK KyAgICAgICAgICAgIGN5ID0gdDEgKiBjMnkgKyB0ICogcDJ5LAorICAgICAg ICAgICAgYWxwaGEgPSAoOTAgLSBtYXRoLmF0YW4yKG14IC0gbngsIG15IC0g bnkpICogMTgwIC8gUEkpOworICAgICAgICAvLyAobXggPiBueCB8fCBteSA8 IG55KSAmJiAoYWxwaGEgKz0gMTgwKTsKKyAgICAgICAgcmV0dXJuIHsKKyAg ICAgICAgICAgIHg6IHgsCisgICAgICAgICAgICB5OiB5LAorICAgICAgICAg ICAgbToge3g6IG14LCB5OiBteX0sCisgICAgICAgICAgICBuOiB7eDogbngs IHk6IG55fSwKKyAgICAgICAgICAgIHN0YXJ0OiB7eDogYXgsIHk6IGF5fSwK KyAgICAgICAgICAgIGVuZDoge3g6IGN4LCB5OiBjeX0sCisgICAgICAgICAg ICBhbHBoYTogYWxwaGEKKyAgICAgICAgfTsKKyAgICB9CisgICAgZnVuY3Rp b24gYmV6aWVyQkJveChwMXgsIHAxeSwgYzF4LCBjMXksIGMyeCwgYzJ5LCBw MngsIHAyeSkgeworICAgICAgICBpZiAoIVNuYXAuaXMocDF4LCAiYXJyYXki KSkgeworICAgICAgICAgICAgcDF4ID0gW3AxeCwgcDF5LCBjMXgsIGMxeSwg YzJ4LCBjMnksIHAyeCwgcDJ5XTsKKyAgICAgICAgfQorICAgICAgICB2YXIg YmJveCA9IGN1cnZlRGltLmFwcGx5KG51bGwsIHAxeCk7CisgICAgICAgIHJl dHVybiBib3goCisgICAgICAgICAgICBiYm94Lm1pbi54LAorICAgICAgICAg ICAgYmJveC5taW4ueSwKKyAgICAgICAgICAgIGJib3gubWF4LnggLSBiYm94 Lm1pbi54LAorICAgICAgICAgICAgYmJveC5tYXgueSAtIGJib3gubWluLnkK KyAgICAgICAgKTsKKyAgICB9CisgICAgZnVuY3Rpb24gaXNQb2ludEluc2lk ZUJCb3goYmJveCwgeCwgeSkgeworICAgICAgICByZXR1cm4gIHggPj0gYmJv eC54ICYmCisgICAgICAgICAgICAgICAgeCA8PSBiYm94LnggKyBiYm94Lndp ZHRoICYmCisgICAgICAgICAgICAgICAgeSA+PSBiYm94LnkgJiYKKyAgICAg ICAgICAgICAgICB5IDw9IGJib3gueSArIGJib3guaGVpZ2h0OworICAgIH0K KyAgICBmdW5jdGlvbiBpc0JCb3hJbnRlcnNlY3QoYmJveDEsIGJib3gyKSB7 CisgICAgICAgIGJib3gxID0gYm94KGJib3gxKTsKKyAgICAgICAgYmJveDIg PSBib3goYmJveDIpOworICAgICAgICByZXR1cm4gaXNQb2ludEluc2lkZUJC b3goYmJveDIsIGJib3gxLngsIGJib3gxLnkpCisgICAgICAgICAgICB8fCBp c1BvaW50SW5zaWRlQkJveChiYm94MiwgYmJveDEueDIsIGJib3gxLnkpCisg ICAgICAgICAgICB8fCBpc1BvaW50SW5zaWRlQkJveChiYm94MiwgYmJveDEu eCwgYmJveDEueTIpCisgICAgICAgICAgICB8fCBpc1BvaW50SW5zaWRlQkJv eChiYm94MiwgYmJveDEueDIsIGJib3gxLnkyKQorICAgICAgICAgICAgfHwg aXNQb2ludEluc2lkZUJCb3goYmJveDEsIGJib3gyLngsIGJib3gyLnkpCisg ICAgICAgICAgICB8fCBpc1BvaW50SW5zaWRlQkJveChiYm94MSwgYmJveDIu eDIsIGJib3gyLnkpCisgICAgICAgICAgICB8fCBpc1BvaW50SW5zaWRlQkJv eChiYm94MSwgYmJveDIueCwgYmJveDIueTIpCisgICAgICAgICAgICB8fCBp c1BvaW50SW5zaWRlQkJveChiYm94MSwgYmJveDIueDIsIGJib3gyLnkyKQor ICAgICAgICAgICAgfHwgKGJib3gxLnggPCBiYm94Mi54MiAmJiBiYm94MS54 ID4gYmJveDIueAorICAgICAgICAgICAgICAgIHx8IGJib3gyLnggPCBiYm94 MS54MiAmJiBiYm94Mi54ID4gYmJveDEueCkKKyAgICAgICAgICAgICYmIChi Ym94MS55IDwgYmJveDIueTIgJiYgYmJveDEueSA+IGJib3gyLnkKKyAgICAg ICAgICAgICAgICB8fCBiYm94Mi55IDwgYmJveDEueTIgJiYgYmJveDIueSA+ IGJib3gxLnkpOworICAgIH0KKyAgICBmdW5jdGlvbiBiYXNlMyh0LCBwMSwg cDIsIHAzLCBwNCkgeworICAgICAgICB2YXIgdDEgPSAtMyAqIHAxICsgOSAq IHAyIC0gOSAqIHAzICsgMyAqIHA0LAorICAgICAgICAgICAgdDIgPSB0ICog dDEgKyA2ICogcDEgLSAxMiAqIHAyICsgNiAqIHAzOworICAgICAgICByZXR1 cm4gdCAqIHQyIC0gMyAqIHAxICsgMyAqIHAyOworICAgIH0KKyAgICBmdW5j dGlvbiBiZXpsZW4oeDEsIHkxLCB4MiwgeTIsIHgzLCB5MywgeDQsIHk0LCB6 KSB7CisgICAgICAgIGlmICh6ID09IG51bGwpIHsKKyAgICAgICAgICAgIHog PSAxOworICAgICAgICB9CisgICAgICAgIHogPSB6ID4gMSA/IDEgOiB6IDwg MCA/IDAgOiB6OworICAgICAgICB2YXIgejIgPSB6IC8gMiwKKyAgICAgICAg ICAgIG4gPSAxMiwKKyAgICAgICAgICAgIFR2YWx1ZXMgPSBbLS4xMjUyLC4x MjUyLC0uMzY3OCwuMzY3OCwtLjU4NzMsLjU4NzMsLS43Njk5LC43Njk5LC0u OTA0MSwuOTA0MSwtLjk4MTYsLjk4MTZdLAorICAgICAgICAgICAgQ3ZhbHVl cyA9IFswLjI0OTEsMC4yNDkxLDAuMjMzNSwwLjIzMzUsMC4yMDMyLDAuMjAz MiwwLjE2MDEsMC4xNjAxLDAuMTA2OSwwLjEwNjksMC4wNDcyLDAuMDQ3Ml0s CisgICAgICAgICAgICBzdW0gPSAwOworICAgICAgICBmb3IgKHZhciBpID0g MDsgaSA8IG47IGkrKykgeworICAgICAgICAgICAgdmFyIGN0ID0gejIgKiBU dmFsdWVzW2ldICsgejIsCisgICAgICAgICAgICAgICAgeGJhc2UgPSBiYXNl MyhjdCwgeDEsIHgyLCB4MywgeDQpLAorICAgICAgICAgICAgICAgIHliYXNl ID0gYmFzZTMoY3QsIHkxLCB5MiwgeTMsIHk0KSwKKyAgICAgICAgICAgICAg ICBjb21iID0geGJhc2UgKiB4YmFzZSArIHliYXNlICogeWJhc2U7CisgICAg ICAgICAgICBzdW0gKz0gQ3ZhbHVlc1tpXSAqIG1hdGguc3FydChjb21iKTsK KyAgICAgICAgfQorICAgICAgICByZXR1cm4gejIgKiBzdW07CisgICAgfQor ICAgIGZ1bmN0aW9uIGdldFRvdExlbih4MSwgeTEsIHgyLCB5MiwgeDMsIHkz LCB4NCwgeTQsIGxsKSB7CisgICAgICAgIGlmIChsbCA8IDAgfHwgYmV6bGVu KHgxLCB5MSwgeDIsIHkyLCB4MywgeTMsIHg0LCB5NCkgPCBsbCkgeworICAg ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciB0ID0g MSwKKyAgICAgICAgICAgIHN0ZXAgPSB0IC8gMiwKKyAgICAgICAgICAgIHQy ID0gdCAtIHN0ZXAsCisgICAgICAgICAgICBsLAorICAgICAgICAgICAgZSA9 IC4wMTsKKyAgICAgICAgbCA9IGJlemxlbih4MSwgeTEsIHgyLCB5MiwgeDMs IHkzLCB4NCwgeTQsIHQyKTsKKyAgICAgICAgd2hpbGUgKGFicyhsIC0gbGwp ID4gZSkgeworICAgICAgICAgICAgc3RlcCAvPSAyOworICAgICAgICAgICAg dDIgKz0gKGwgPCBsbCA/IDEgOiAtMSkgKiBzdGVwOworICAgICAgICAgICAg bCA9IGJlemxlbih4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB4NCwgeTQsIHQy KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdDI7CisgICAgfQorICAg IGZ1bmN0aW9uIGludGVyc2VjdCh4MSwgeTEsIHgyLCB5MiwgeDMsIHkzLCB4 NCwgeTQpIHsKKyAgICAgICAgaWYgKAorICAgICAgICAgICAgbW1heCh4MSwg eDIpIDwgbW1pbih4MywgeDQpIHx8CisgICAgICAgICAgICBtbWluKHgxLCB4 MikgPiBtbWF4KHgzLCB4NCkgfHwKKyAgICAgICAgICAgIG1tYXgoeTEsIHky KSA8IG1taW4oeTMsIHk0KSB8fAorICAgICAgICAgICAgbW1pbih5MSwgeTIp ID4gbW1heCh5MywgeTQpCisgICAgICAgICkgeworICAgICAgICAgICAgcmV0 dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBueCA9ICh4MSAqIHkyIC0g eTEgKiB4MikgKiAoeDMgLSB4NCkgLSAoeDEgLSB4MikgKiAoeDMgKiB5NCAt IHkzICogeDQpLAorICAgICAgICAgICAgbnkgPSAoeDEgKiB5MiAtIHkxICog eDIpICogKHkzIC0geTQpIC0gKHkxIC0geTIpICogKHgzICogeTQgLSB5MyAq IHg0KSwKKyAgICAgICAgICAgIGRlbm9taW5hdG9yID0gKHgxIC0geDIpICog KHkzIC0geTQpIC0gKHkxIC0geTIpICogKHgzIC0geDQpOworCisgICAgICAg IGlmICghZGVub21pbmF0b3IpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg ICAgICAgfQorICAgICAgICB2YXIgcHggPSBueCAvIGRlbm9taW5hdG9yLAor ICAgICAgICAgICAgcHkgPSBueSAvIGRlbm9taW5hdG9yLAorICAgICAgICAg ICAgcHgyID0gK3B4LnRvRml4ZWQoMiksCisgICAgICAgICAgICBweTIgPSAr cHkudG9GaXhlZCgyKTsKKyAgICAgICAgaWYgKAorICAgICAgICAgICAgcHgy IDwgK21taW4oeDEsIHgyKS50b0ZpeGVkKDIpIHx8CisgICAgICAgICAgICBw eDIgPiArbW1heCh4MSwgeDIpLnRvRml4ZWQoMikgfHwKKyAgICAgICAgICAg IHB4MiA8ICttbWluKHgzLCB4NCkudG9GaXhlZCgyKSB8fAorICAgICAgICAg ICAgcHgyID4gK21tYXgoeDMsIHg0KS50b0ZpeGVkKDIpIHx8CisgICAgICAg ICAgICBweTIgPCArbW1pbih5MSwgeTIpLnRvRml4ZWQoMikgfHwKKyAgICAg ICAgICAgIHB5MiA+ICttbWF4KHkxLCB5MikudG9GaXhlZCgyKSB8fAorICAg ICAgICAgICAgcHkyIDwgK21taW4oeTMsIHk0KS50b0ZpeGVkKDIpIHx8Cisg ICAgICAgICAgICBweTIgPiArbW1heCh5MywgeTQpLnRvRml4ZWQoMikKKyAg ICAgICAgKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg ICAgICAgcmV0dXJuIHt4OiBweCwgeTogcHl9OworICAgIH0KKyAgICBmdW5j dGlvbiBpbnRlcihiZXoxLCBiZXoyKSB7CisgICAgICAgIHJldHVybiBpbnRl ckhlbHBlcihiZXoxLCBiZXoyKTsKKyAgICB9CisgICAgZnVuY3Rpb24gaW50 ZXJDb3VudChiZXoxLCBiZXoyKSB7CisgICAgICAgIHJldHVybiBpbnRlckhl bHBlcihiZXoxLCBiZXoyLCAxKTsKKyAgICB9CisgICAgZnVuY3Rpb24gaW50 ZXJIZWxwZXIoYmV6MSwgYmV6MiwganVzdENvdW50KSB7CisgICAgICAgIHZh ciBiYm94MSA9IGJlemllckJCb3goYmV6MSksCisgICAgICAgICAgICBiYm94 MiA9IGJlemllckJCb3goYmV6Mik7CisgICAgICAgIGlmICghaXNCQm94SW50 ZXJzZWN0KGJib3gxLCBiYm94MikpIHsKKyAgICAgICAgICAgIHJldHVybiBq dXN0Q291bnQgPyAwIDogW107CisgICAgICAgIH0KKyAgICAgICAgdmFyIGwx ID0gYmV6bGVuLmFwcGx5KDAsIGJlejEpLAorICAgICAgICAgICAgbDIgPSBi ZXpsZW4uYXBwbHkoMCwgYmV6MiksCisgICAgICAgICAgICBuMSA9IH5+KGwx IC8gOCksCisgICAgICAgICAgICBuMiA9IH5+KGwyIC8gOCksCisgICAgICAg ICAgICBkb3RzMSA9IFtdLAorICAgICAgICAgICAgZG90czIgPSBbXSwKKyAg ICAgICAgICAgIHh5ID0ge30sCisgICAgICAgICAgICByZXMgPSBqdXN0Q291 bnQgPyAwIDogW107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjEg KyAxOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBwID0gZmluZERvdHNBdFNl Z21lbnQuYXBwbHkoMCwgYmV6MS5jb25jYXQoaSAvIG4xKSk7CisgICAgICAg ICAgICBkb3RzMS5wdXNoKHt4OiBwLngsIHk6IHAueSwgdDogaSAvIG4xfSk7 CisgICAgICAgIH0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG4yICsgMTsg aSsrKSB7CisgICAgICAgICAgICBwID0gZmluZERvdHNBdFNlZ21lbnQuYXBw bHkoMCwgYmV6Mi5jb25jYXQoaSAvIG4yKSk7CisgICAgICAgICAgICBkb3Rz Mi5wdXNoKHt4OiBwLngsIHk6IHAueSwgdDogaSAvIG4yfSk7CisgICAgICAg IH0KKyAgICAgICAgZm9yIChpID0gMDsgaSA8IG4xOyBpKyspIHsKKyAgICAg ICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjI7IGorKykgeworICAgICAg ICAgICAgICAgIHZhciBkaSA9IGRvdHMxW2ldLAorICAgICAgICAgICAgICAg ICAgICBkaTEgPSBkb3RzMVtpICsgMV0sCisgICAgICAgICAgICAgICAgICAg IGRqID0gZG90czJbal0sCisgICAgICAgICAgICAgICAgICAgIGRqMSA9IGRv dHMyW2ogKyAxXSwKKyAgICAgICAgICAgICAgICAgICAgY2kgPSBhYnMoZGkx LnggLSBkaS54KSA8IC4wMDEgPyAieSIgOiAieCIsCisgICAgICAgICAgICAg ICAgICAgIGNqID0gYWJzKGRqMS54IC0gZGoueCkgPCAuMDAxID8gInkiIDog IngiLAorICAgICAgICAgICAgICAgICAgICBpcyA9IGludGVyc2VjdChkaS54 LCBkaS55LCBkaTEueCwgZGkxLnksIGRqLngsIGRqLnksIGRqMS54LCBkajEu eSk7CisgICAgICAgICAgICAgICAgaWYgKGlzKSB7CisgICAgICAgICAgICAg ICAgICAgIGlmICh4eVtpcy54LnRvRml4ZWQoNCldID09IGlzLnkudG9GaXhl ZCg0KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgeHlb aXMueC50b0ZpeGVkKDQpXSA9IGlzLnkudG9GaXhlZCg0KTsKKyAgICAgICAg ICAgICAgICAgICAgdmFyIHQxID0gZGkudCArIGFicygoaXNbY2ldIC0gZGlb Y2ldKSAvIChkaTFbY2ldIC0gZGlbY2ldKSkgKiAoZGkxLnQgLSBkaS50KSwK KyAgICAgICAgICAgICAgICAgICAgICAgIHQyID0gZGoudCArIGFicygoaXNb Y2pdIC0gZGpbY2pdKSAvIChkajFbY2pdIC0gZGpbY2pdKSkgKiAoZGoxLnQg LSBkai50KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHQxID49IDAgJiYg dDEgPD0gMSAmJiB0MiA+PSAwICYmIHQyIDw9IDEpIHsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGlmIChqdXN0Q291bnQpIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXMrKzsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzLnB1 c2goeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4OiBpcy54 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5OiBpcy55LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MTogdDEsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQyOiB0MgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBy ZXM7CisgICAgfQorICAgIGZ1bmN0aW9uIHBhdGhJbnRlcnNlY3Rpb24ocGF0 aDEsIHBhdGgyKSB7CisgICAgICAgIHJldHVybiBpbnRlclBhdGhIZWxwZXIo cGF0aDEsIHBhdGgyKTsKKyAgICB9CisgICAgZnVuY3Rpb24gcGF0aEludGVy c2VjdGlvbk51bWJlcihwYXRoMSwgcGF0aDIpIHsKKyAgICAgICAgcmV0dXJu IGludGVyUGF0aEhlbHBlcihwYXRoMSwgcGF0aDIsIDEpOworICAgIH0KKyAg ICBmdW5jdGlvbiBpbnRlclBhdGhIZWxwZXIocGF0aDEsIHBhdGgyLCBqdXN0 Q291bnQpIHsKKyAgICAgICAgcGF0aDEgPSBwYXRoMmN1cnZlKHBhdGgxKTsK KyAgICAgICAgcGF0aDIgPSBwYXRoMmN1cnZlKHBhdGgyKTsKKyAgICAgICAg dmFyIHgxLCB5MSwgeDIsIHkyLCB4MW0sIHkxbSwgeDJtLCB5Mm0sIGJlejEs IGJlejIsCisgICAgICAgICAgICByZXMgPSBqdXN0Q291bnQgPyAwIDogW107 CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHBhdGgxLmxlbmd0aDsg aSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBwaSA9IHBhdGgxW2ld OworICAgICAgICAgICAgaWYgKHBpWzBdID09ICJNIikgeworICAgICAgICAg ICAgICAgIHgxID0geDFtID0gcGlbMV07CisgICAgICAgICAgICAgICAgeTEg PSB5MW0gPSBwaVsyXTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICAgICAgaWYgKHBpWzBdID09ICJDIikgeworICAgICAgICAgICAgICAg ICAgICBiZXoxID0gW3gxLCB5MV0uY29uY2F0KHBpLnNsaWNlKDEpKTsKKyAg ICAgICAgICAgICAgICAgICAgeDEgPSBiZXoxWzZdOworICAgICAgICAgICAg ICAgICAgICB5MSA9IGJlejFbN107CisgICAgICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICAgICAgYmV6MSA9IFt4MSwgeTEsIHgxLCB5 MSwgeDFtLCB5MW0sIHgxbSwgeTFtXTsKKyAgICAgICAgICAgICAgICAgICAg eDEgPSB4MW07CisgICAgICAgICAgICAgICAgICAgIHkxID0geTFtOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0g MCwgamogPSBwYXRoMi5sZW5ndGg7IGogPCBqajsgaisrKSB7CisgICAgICAg ICAgICAgICAgICAgIHZhciBwaiA9IHBhdGgyW2pdOworICAgICAgICAgICAg ICAgICAgICBpZiAocGpbMF0gPT0gIk0iKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICB4MiA9IHgybSA9IHBqWzFdOworICAgICAgICAgICAgICAgICAg ICAgICAgeTIgPSB5Mm0gPSBwalsyXTsKKyAgICAgICAgICAgICAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwalswXSA9 PSAiQyIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXoyID0g W3gyLCB5Ml0uY29uY2F0KHBqLnNsaWNlKDEpKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB4MiA9IGJlejJbNl07CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgeTIgPSBiZXoyWzddOworICAgICAgICAgICAgICAgICAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi ZXoyID0gW3gyLCB5MiwgeDIsIHkyLCB4Mm0sIHkybSwgeDJtLCB5Mm1dOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgyID0geDJtOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHkyID0geTJtOworICAgICAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlu dHIgPSBpbnRlckhlbHBlcihiZXoxLCBiZXoyLCBqdXN0Q291bnQpOworICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKGp1c3RDb3VudCkgeworICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJlcyArPSBpbnRyOworICAgICAgICAg ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBmb3IgKHZhciBrID0gMCwga2sgPSBpbnRyLmxlbmd0aDsgayA8 IGtrOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50cltrXS5zZWdtZW50MSA9IGk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludHJba10uc2VnbWVudDIgPSBqOworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnRyW2tdLmJlejEgPSBiZXoxOworICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRyW2tdLmJlejIgPSBi ZXoyOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICByZXMgPSByZXMuY29uY2F0KGludHIpOwor ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICB9CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorICAgIGZ1bmN0aW9u IGlzUG9pbnRJbnNpZGVQYXRoKHBhdGgsIHgsIHkpIHsKKyAgICAgICAgdmFy IGJib3ggPSBwYXRoQkJveChwYXRoKTsKKyAgICAgICAgcmV0dXJuIGlzUG9p bnRJbnNpZGVCQm94KGJib3gsIHgsIHkpICYmCisgICAgICAgICAgICAgICBp bnRlclBhdGhIZWxwZXIocGF0aCwgW1siTSIsIHgsIHldLCBbIkgiLCBiYm94 LngyICsgMTBdXSwgMSkgJSAyID09IDE7CisgICAgfQorICAgIGZ1bmN0aW9u IHBhdGhCQm94KHBhdGgpIHsKKyAgICAgICAgdmFyIHB0aCA9IHBhdGhzKHBh dGgpOworICAgICAgICBpZiAocHRoLmJib3gpIHsKKyAgICAgICAgICAgIHJl dHVybiBjbG9uZShwdGguYmJveCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg KCFwYXRoKSB7CisgICAgICAgICAgICByZXR1cm4gYm94KCk7CisgICAgICAg IH0KKyAgICAgICAgcGF0aCA9IHBhdGgyY3VydmUocGF0aCk7CisgICAgICAg IHZhciB4ID0gMCwKKyAgICAgICAgICAgIHkgPSAwLAorICAgICAgICAgICAg WCA9IFtdLAorICAgICAgICAgICAgWSA9IFtdLAorICAgICAgICAgICAgcDsK KyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcGF0aC5sZW5ndGg7IGkg PCBpaTsgaSsrKSB7CisgICAgICAgICAgICBwID0gcGF0aFtpXTsKKyAgICAg ICAgICAgIGlmIChwWzBdID09ICJNIikgeworICAgICAgICAgICAgICAgIHgg PSBwWzFdOworICAgICAgICAgICAgICAgIHkgPSBwWzJdOworICAgICAgICAg ICAgICAgIFgucHVzaCh4KTsKKyAgICAgICAgICAgICAgICBZLnB1c2goeSk7 CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHZhciBk aW0gPSBjdXJ2ZURpbSh4LCB5LCBwWzFdLCBwWzJdLCBwWzNdLCBwWzRdLCBw WzVdLCBwWzZdKTsKKyAgICAgICAgICAgICAgICBYID0gWC5jb25jYXQoZGlt Lm1pbi54LCBkaW0ubWF4LngpOworICAgICAgICAgICAgICAgIFkgPSBZLmNv bmNhdChkaW0ubWluLnksIGRpbS5tYXgueSk7CisgICAgICAgICAgICAgICAg eCA9IHBbNV07CisgICAgICAgICAgICAgICAgeSA9IHBbNl07CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgdmFyIHhtaW4gPSBtbWluLmFw cGx5KDAsIFgpLAorICAgICAgICAgICAgeW1pbiA9IG1taW4uYXBwbHkoMCwg WSksCisgICAgICAgICAgICB4bWF4ID0gbW1heC5hcHBseSgwLCBYKSwKKyAg ICAgICAgICAgIHltYXggPSBtbWF4LmFwcGx5KDAsIFkpLAorICAgICAgICAg ICAgYmIgPSBib3goeG1pbiwgeW1pbiwgeG1heCAtIHhtaW4sIHltYXggLSB5 bWluKTsKKyAgICAgICAgcHRoLmJib3ggPSBjbG9uZShiYik7CisgICAgICAg IHJldHVybiBiYjsKKyAgICB9CisgICAgZnVuY3Rpb24gcmVjdFBhdGgoeCwg eSwgdywgaCwgcikgeworICAgICAgICBpZiAocikgeworICAgICAgICAgICAg cmV0dXJuIFsKKyAgICAgICAgICAgICAgICBbIk0iLCAreCArICgrciksIHld LAorICAgICAgICAgICAgICAgIFsibCIsIHcgLSByICogMiwgMF0sCisgICAg ICAgICAgICAgICAgWyJhIiwgciwgciwgMCwgMCwgMSwgciwgcl0sCisgICAg ICAgICAgICAgICAgWyJsIiwgMCwgaCAtIHIgKiAyXSwKKyAgICAgICAgICAg ICAgICBbImEiLCByLCByLCAwLCAwLCAxLCAtciwgcl0sCisgICAgICAgICAg ICAgICAgWyJsIiwgciAqIDIgLSB3LCAwXSwKKyAgICAgICAgICAgICAgICBb ImEiLCByLCByLCAwLCAwLCAxLCAtciwgLXJdLAorICAgICAgICAgICAgICAg IFsibCIsIDAsIHIgKiAyIC0gaF0sCisgICAgICAgICAgICAgICAgWyJhIiwg ciwgciwgMCwgMCwgMSwgciwgLXJdLAorICAgICAgICAgICAgICAgIFsieiJd CisgICAgICAgICAgICBdOworICAgICAgICB9CisgICAgICAgIHZhciByZXMg PSBbWyJNIiwgeCwgeV0sIFsibCIsIHcsIDBdLCBbImwiLCAwLCBoXSwgWyJs IiwgLXcsIDBdLCBbInoiXV07CisgICAgICAgIHJlcy50b1N0cmluZyA9IHRv U3RyaW5nOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0KKyAgICBmdW5j dGlvbiBlbGxpcHNlUGF0aCh4LCB5LCByeCwgcnksIGEpIHsKKyAgICAgICAg aWYgKGEgPT0gbnVsbCAmJiByeSA9PSBudWxsKSB7CisgICAgICAgICAgICBy eSA9IHJ4OworICAgICAgICB9CisgICAgICAgIHggPSAreDsKKyAgICAgICAg eSA9ICt5OworICAgICAgICByeCA9ICtyeDsKKyAgICAgICAgcnkgPSArcnk7 CisgICAgICAgIGlmIChhICE9IG51bGwpIHsKKyAgICAgICAgICAgIHZhciBy YWQgPSBNYXRoLlBJIC8gMTgwLAorICAgICAgICAgICAgICAgIHgxID0geCAr IHJ4ICogTWF0aC5jb3MoLXJ5ICogcmFkKSwKKyAgICAgICAgICAgICAgICB4 MiA9IHggKyByeCAqIE1hdGguY29zKC1hICogcmFkKSwKKyAgICAgICAgICAg ICAgICB5MSA9IHkgKyByeCAqIE1hdGguc2luKC1yeSAqIHJhZCksCisgICAg ICAgICAgICAgICAgeTIgPSB5ICsgcnggKiBNYXRoLnNpbigtYSAqIHJhZCks CisgICAgICAgICAgICAgICAgcmVzID0gW1siTSIsIHgxLCB5MV0sIFsiQSIs IHJ4LCByeCwgMCwgKyhhIC0gcnkgPiAxODApLCAwLCB4MiwgeTJdXTsKKyAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJlcyA9IFsKKyAgICAgICAg ICAgICAgICBbIk0iLCB4LCB5XSwKKyAgICAgICAgICAgICAgICBbIm0iLCAw LCAtcnldLAorICAgICAgICAgICAgICAgIFsiYSIsIHJ4LCByeSwgMCwgMSwg MSwgMCwgMiAqIHJ5XSwKKyAgICAgICAgICAgICAgICBbImEiLCByeCwgcnks IDAsIDEsIDEsIDAsIC0yICogcnldLAorICAgICAgICAgICAgICAgIFsieiJd CisgICAgICAgICAgICBdOworICAgICAgICB9CisgICAgICAgIHJlcy50b1N0 cmluZyA9IHRvU3RyaW5nOworICAgICAgICByZXR1cm4gcmVzOworICAgIH0K KyAgICB2YXIgdW5pdDJweCA9IFNuYXAuX3VuaXQycHgsCisgICAgICAgIGdl dFBhdGggPSB7CisgICAgICAgIHBhdGg6IGZ1bmN0aW9uIChlbCkgeworICAg ICAgICAgICAgcmV0dXJuIGVsLmF0dHIoInBhdGgiKTsKKyAgICAgICAgfSwK KyAgICAgICAgY2lyY2xlOiBmdW5jdGlvbiAoZWwpIHsKKyAgICAgICAgICAg IHZhciBhdHRyID0gdW5pdDJweChlbCk7CisgICAgICAgICAgICByZXR1cm4g ZWxsaXBzZVBhdGgoYXR0ci5jeCwgYXR0ci5jeSwgYXR0ci5yKTsKKyAgICAg ICAgfSwKKyAgICAgICAgZWxsaXBzZTogZnVuY3Rpb24gKGVsKSB7CisgICAg ICAgICAgICB2YXIgYXR0ciA9IHVuaXQycHgoZWwpOworICAgICAgICAgICAg cmV0dXJuIGVsbGlwc2VQYXRoKGF0dHIuY3ggfHwgMCwgYXR0ci5jeSB8fCAw LCBhdHRyLnJ4LCBhdHRyLnJ5KTsKKyAgICAgICAgfSwKKyAgICAgICAgcmVj dDogZnVuY3Rpb24gKGVsKSB7CisgICAgICAgICAgICB2YXIgYXR0ciA9IHVu aXQycHgoZWwpOworICAgICAgICAgICAgcmV0dXJuIHJlY3RQYXRoKGF0dHIu eCB8fCAwLCBhdHRyLnkgfHwgMCwgYXR0ci53aWR0aCwgYXR0ci5oZWlnaHQs IGF0dHIucngsIGF0dHIucnkpOworICAgICAgICB9LAorICAgICAgICBpbWFn ZTogZnVuY3Rpb24gKGVsKSB7CisgICAgICAgICAgICB2YXIgYXR0ciA9IHVu aXQycHgoZWwpOworICAgICAgICAgICAgcmV0dXJuIHJlY3RQYXRoKGF0dHIu eCB8fCAwLCBhdHRyLnkgfHwgMCwgYXR0ci53aWR0aCwgYXR0ci5oZWlnaHQp OworICAgICAgICB9LAorICAgICAgICBsaW5lOiBmdW5jdGlvbiAoZWwpIHsK KyAgICAgICAgICAgIHJldHVybiAiTSIgKyBbZWwuYXR0cigieDEiKSB8fCAw LCBlbC5hdHRyKCJ5MSIpIHx8IDAsIGVsLmF0dHIoIngyIiksIGVsLmF0dHIo InkyIildOworICAgICAgICB9LAorICAgICAgICBwb2x5bGluZTogZnVuY3Rp b24gKGVsKSB7CisgICAgICAgICAgICByZXR1cm4gIk0iICsgZWwuYXR0cigi cG9pbnRzIik7CisgICAgICAgIH0sCisgICAgICAgIHBvbHlnb246IGZ1bmN0 aW9uIChlbCkgeworICAgICAgICAgICAgcmV0dXJuICJNIiArIGVsLmF0dHIo InBvaW50cyIpICsgInoiOworICAgICAgICB9LAorICAgICAgICBkZWZsdDog ZnVuY3Rpb24gKGVsKSB7CisgICAgICAgICAgICB2YXIgYmJveCA9IGVsLm5v ZGUuZ2V0QkJveCgpOworICAgICAgICAgICAgcmV0dXJuIHJlY3RQYXRoKGJi b3gueCwgYmJveC55LCBiYm94LndpZHRoLCBiYm94LmhlaWdodCk7CisgICAg ICAgIH0KKyAgICB9OworICAgIGZ1bmN0aW9uIHBhdGhUb1JlbGF0aXZlKHBh dGhBcnJheSkgeworICAgICAgICB2YXIgcHRoID0gcGF0aHMocGF0aEFycmF5 KSwKKyAgICAgICAgICAgIGxvd2VyQ2FzZSA9IFN0cmluZy5wcm90b3R5cGUu dG9Mb3dlckNhc2U7CisgICAgICAgIGlmIChwdGgucmVsKSB7CisgICAgICAg ICAgICByZXR1cm4gcGF0aENsb25lKHB0aC5yZWwpOworICAgICAgICB9Cisg ICAgICAgIGlmICghU25hcC5pcyhwYXRoQXJyYXksICJhcnJheSIpIHx8ICFT bmFwLmlzKHBhdGhBcnJheSAmJiBwYXRoQXJyYXlbMF0sICJhcnJheSIpKSB7 CisgICAgICAgICAgICBwYXRoQXJyYXkgPSBTbmFwLnBhcnNlUGF0aFN0cmlu ZyhwYXRoQXJyYXkpOworICAgICAgICB9CisgICAgICAgIHZhciByZXMgPSBb XSwKKyAgICAgICAgICAgIHggPSAwLAorICAgICAgICAgICAgeSA9IDAsCisg ICAgICAgICAgICBteCA9IDAsCisgICAgICAgICAgICBteSA9IDAsCisgICAg ICAgICAgICBzdGFydCA9IDA7CisgICAgICAgIGlmIChwYXRoQXJyYXlbMF1b MF0gPT0gIk0iKSB7CisgICAgICAgICAgICB4ID0gcGF0aEFycmF5WzBdWzFd OworICAgICAgICAgICAgeSA9IHBhdGhBcnJheVswXVsyXTsKKyAgICAgICAg ICAgIG14ID0geDsKKyAgICAgICAgICAgIG15ID0geTsKKyAgICAgICAgICAg IHN0YXJ0Kys7CisgICAgICAgICAgICByZXMucHVzaChbIk0iLCB4LCB5XSk7 CisgICAgICAgIH0KKyAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0LCBpaSA9 IHBhdGhBcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAg ICB2YXIgciA9IHJlc1tpXSA9IFtdLAorICAgICAgICAgICAgICAgIHBhID0g cGF0aEFycmF5W2ldOworICAgICAgICAgICAgaWYgKHBhWzBdICE9IGxvd2Vy Q2FzZS5jYWxsKHBhWzBdKSkgeworICAgICAgICAgICAgICAgIHJbMF0gPSBs b3dlckNhc2UuY2FsbChwYVswXSk7CisgICAgICAgICAgICAgICAgc3dpdGNo IChyWzBdKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgImEiOgorICAg ICAgICAgICAgICAgICAgICAgICAgclsxXSA9IHBhWzFdOworICAgICAgICAg ICAgICAgICAgICAgICAgclsyXSA9IHBhWzJdOworICAgICAgICAgICAgICAg ICAgICAgICAgclszXSA9IHBhWzNdOworICAgICAgICAgICAgICAgICAgICAg ICAgcls0XSA9IHBhWzRdOworICAgICAgICAgICAgICAgICAgICAgICAgcls1 XSA9IHBhWzVdOworICAgICAgICAgICAgICAgICAgICAgICAgcls2XSA9ICso cGFbNl0gLSB4KS50b0ZpeGVkKDMpOworICAgICAgICAgICAgICAgICAgICAg ICAgcls3XSA9ICsocGFbN10gLSB5KS50b0ZpeGVkKDMpOworICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh c2UgInYiOgorICAgICAgICAgICAgICAgICAgICAgICAgclsxXSA9ICsocGFb MV0gLSB5KS50b0ZpeGVkKDMpOworICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIm0iOgorICAgICAg ICAgICAgICAgICAgICAgICAgbXggPSBwYVsxXTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIG15ID0gcGFbMl07CisgICAgICAgICAgICAgICAgICAgIGRl ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0g MSwgamogPSBwYS5sZW5ndGg7IGogPCBqajsgaisrKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcltqXSA9ICsocGFbal0gLSAoKGogJSAyKSA/ IHggOiB5KSkudG9GaXhlZCgzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgIHIgPSByZXNbaV0gPSBbXTsKKyAgICAgICAgICAg ICAgICBpZiAocGFbMF0gPT0gIm0iKSB7CisgICAgICAgICAgICAgICAgICAg IG14ID0gcGFbMV0gKyB4OworICAgICAgICAgICAgICAgICAgICBteSA9IHBh WzJdICsgeTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg Zm9yICh2YXIgayA9IDAsIGtrID0gcGEubGVuZ3RoOyBrIDwga2s7IGsrKykg eworICAgICAgICAgICAgICAgICAgICByZXNbaV1ba10gPSBwYVtrXTsKKyAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2 YXIgbGVuID0gcmVzW2ldLmxlbmd0aDsKKyAgICAgICAgICAgIHN3aXRjaCAo cmVzW2ldWzBdKSB7CisgICAgICAgICAgICAgICAgY2FzZSAieiI6CisgICAg ICAgICAgICAgICAgICAgIHggPSBteDsKKyAgICAgICAgICAgICAgICAgICAg eSA9IG15OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICBjYXNlICJoIjoKKyAgICAgICAgICAgICAgICAgICAgeCArPSAr cmVzW2ldW2xlbiAtIDFdOworICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICBjYXNlICJ2IjoKKyAgICAgICAgICAgICAgICAg ICAgeSArPSArcmVzW2ldW2xlbiAtIDFdOworICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgICAgICAgICB4ICs9ICtyZXNbaV1bbGVuIC0gMl07CisgICAgICAgICAg ICAgICAgICAgIHkgKz0gK3Jlc1tpXVtsZW4gLSAxXTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgICAgICByZXMudG9TdHJpbmcgPSB0b1N0cmlu ZzsKKyAgICAgICAgcHRoLnJlbCA9IHBhdGhDbG9uZShyZXMpOworICAgICAg ICByZXR1cm4gcmVzOworICAgIH0KKyAgICBmdW5jdGlvbiBwYXRoVG9BYnNv bHV0ZShwYXRoQXJyYXkpIHsKKyAgICAgICAgdmFyIHB0aCA9IHBhdGhzKHBh dGhBcnJheSk7CisgICAgICAgIGlmIChwdGguYWJzKSB7CisgICAgICAgICAg ICByZXR1cm4gcGF0aENsb25lKHB0aC5hYnMpOworICAgICAgICB9CisgICAg ICAgIGlmICghaXMocGF0aEFycmF5LCAiYXJyYXkiKSB8fCAhaXMocGF0aEFy cmF5ICYmIHBhdGhBcnJheVswXSwgImFycmF5IikpIHsgLy8gcm91Z2ggYXNz dW1wdGlvbgorICAgICAgICAgICAgcGF0aEFycmF5ID0gU25hcC5wYXJzZVBh dGhTdHJpbmcocGF0aEFycmF5KTsKKyAgICAgICAgfQorICAgICAgICBpZiAo IXBhdGhBcnJheSB8fCAhcGF0aEFycmF5Lmxlbmd0aCkgeworICAgICAgICAg ICAgcmV0dXJuIFtbIk0iLCAwLCAwXV07CisgICAgICAgIH0KKyAgICAgICAg dmFyIHJlcyA9IFtdLAorICAgICAgICAgICAgeCA9IDAsCisgICAgICAgICAg ICB5ID0gMCwKKyAgICAgICAgICAgIG14ID0gMCwKKyAgICAgICAgICAgIG15 ID0gMCwKKyAgICAgICAgICAgIHN0YXJ0ID0gMCwKKyAgICAgICAgICAgIHBh MDsKKyAgICAgICAgaWYgKHBhdGhBcnJheVswXVswXSA9PSAiTSIpIHsKKyAg ICAgICAgICAgIHggPSArcGF0aEFycmF5WzBdWzFdOworICAgICAgICAgICAg eSA9ICtwYXRoQXJyYXlbMF1bMl07CisgICAgICAgICAgICBteCA9IHg7Cisg ICAgICAgICAgICBteSA9IHk7CisgICAgICAgICAgICBzdGFydCsrOworICAg ICAgICAgICAgcmVzWzBdID0gWyJNIiwgeCwgeV07CisgICAgICAgIH0KKyAg ICAgICAgdmFyIGNyeiA9IHBhdGhBcnJheS5sZW5ndGggPT0gMyAmJgorICAg ICAgICAgICAgcGF0aEFycmF5WzBdWzBdID09ICJNIiAmJgorICAgICAgICAg ICAgcGF0aEFycmF5WzFdWzBdLnRvVXBwZXJDYXNlKCkgPT0gIlIiICYmCisg ICAgICAgICAgICBwYXRoQXJyYXlbMl1bMF0udG9VcHBlckNhc2UoKSA9PSAi WiI7CisgICAgICAgIGZvciAodmFyIHIsIHBhLCBpID0gc3RhcnQsIGlpID0g cGF0aEFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAg IHJlcy5wdXNoKHIgPSBbXSk7CisgICAgICAgICAgICBwYSA9IHBhdGhBcnJh eVtpXTsKKyAgICAgICAgICAgIHBhMCA9IHBhWzBdOworICAgICAgICAgICAg aWYgKHBhMCAhPSBwYTAudG9VcHBlckNhc2UoKSkgeworICAgICAgICAgICAg ICAgIHJbMF0gPSBwYTAudG9VcHBlckNhc2UoKTsKKyAgICAgICAgICAgICAg ICBzd2l0Y2ggKHJbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAi QSI6CisgICAgICAgICAgICAgICAgICAgICAgICByWzFdID0gcGFbMV07Cisg ICAgICAgICAgICAgICAgICAgICAgICByWzJdID0gcGFbMl07CisgICAgICAg ICAgICAgICAgICAgICAgICByWzNdID0gcGFbM107CisgICAgICAgICAgICAg ICAgICAgICAgICByWzRdID0gcGFbNF07CisgICAgICAgICAgICAgICAgICAg ICAgICByWzVdID0gcGFbNV07CisgICAgICAgICAgICAgICAgICAgICAgICBy WzZdID0gK3BhWzZdICsgeDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJb N10gPSArcGFbN10gKyB5OworICAgICAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIlYiOgorICAgICAgICAg ICAgICAgICAgICAgICAgclsxXSA9ICtwYVsxXSArIHk7CisgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz ZSAiSCI6CisgICAgICAgICAgICAgICAgICAgICAgICByWzFdID0gK3BhWzFd ICsgeDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgICAgICBjYXNlICJSIjoKKyAgICAgICAgICAgICAgICAgICAg ICAgIHZhciBkb3RzID0gW3gsIHldLmNvbmNhdChwYS5zbGljZSgxKSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMiwgamogPSBk b3RzLmxlbmd0aDsgaiA8IGpqOyBqKyspIHsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBkb3RzW2pdID0gK2RvdHNbal0gKyB4OworICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRvdHNbKytqXSA9ICtkb3RzW2pdICsgeTsK KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg ICAgICAgIHJlcy5wb3AoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJl cyA9IHJlcy5jb25jYXQoY2F0bXVsbFJvbTJiZXppZXIoZG90cywgY3J6KSk7 CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICAgICAgY2FzZSAiTyI6CisgICAgICAgICAgICAgICAgICAgICAgICBy ZXMucG9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3RzID0gZWxs aXBzZVBhdGgoeCwgeSwgcGFbMV0sIHBhWzJdKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGRvdHMucHVzaChkb3RzWzBdKTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIHJlcyA9IHJlcy5jb25jYXQoZG90cyk7CisgICAgICAgICAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz ZSAiVSI6CisgICAgICAgICAgICAgICAgICAgICAgICByZXMucG9wKCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICByZXMgPSByZXMuY29uY2F0KGVsbGlw c2VQYXRoKHgsIHksIHBhWzFdLCBwYVsyXSwgcGFbM10pKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIHIgPSBbIlUiXS5jb25jYXQocmVzW3Jlcy5sZW5n dGggLSAxXS5zbGljZSgtMikpOworICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIk0iOgorICAgICAg ICAgICAgICAgICAgICAgICAgbXggPSArcGFbMV0gKyB4OworICAgICAgICAg ICAgICAgICAgICAgICAgbXkgPSArcGFbMl0gKyB5OworICAgICAgICAgICAg ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgZm9y IChqID0gMSwgamogPSBwYS5sZW5ndGg7IGogPCBqajsgaisrKSB7CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcltqXSA9ICtwYVtqXSArICgoaiAl IDIpID8geCA6IHkpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAocGEwID09 ICJSIikgeworICAgICAgICAgICAgICAgIGRvdHMgPSBbeCwgeV0uY29uY2F0 KHBhLnNsaWNlKDEpKTsKKyAgICAgICAgICAgICAgICByZXMucG9wKCk7Cisg ICAgICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdChjYXRtdWxsUm9tMmJl emllcihkb3RzLCBjcnopKTsKKyAgICAgICAgICAgICAgICByID0gWyJSIl0u Y29uY2F0KHBhLnNsaWNlKC0yKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYg KHBhMCA9PSAiTyIpIHsKKyAgICAgICAgICAgICAgICByZXMucG9wKCk7Cisg ICAgICAgICAgICAgICAgZG90cyA9IGVsbGlwc2VQYXRoKHgsIHksIHBhWzFd LCBwYVsyXSk7CisgICAgICAgICAgICAgICAgZG90cy5wdXNoKGRvdHNbMF0p OworICAgICAgICAgICAgICAgIHJlcyA9IHJlcy5jb25jYXQoZG90cyk7Cisg ICAgICAgICAgICB9IGVsc2UgaWYgKHBhMCA9PSAiVSIpIHsKKyAgICAgICAg ICAgICAgICByZXMucG9wKCk7CisgICAgICAgICAgICAgICAgcmVzID0gcmVz LmNvbmNhdChlbGxpcHNlUGF0aCh4LCB5LCBwYVsxXSwgcGFbMl0sIHBhWzNd KSk7CisgICAgICAgICAgICAgICAgciA9IFsiVSJdLmNvbmNhdChyZXNbcmVz Lmxlbmd0aCAtIDFdLnNsaWNlKC0yKSk7CisgICAgICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwLCBrayA9IHBhLmxl bmd0aDsgayA8IGtrOyBrKyspIHsKKyAgICAgICAgICAgICAgICAgICAgcltr XSA9IHBhW2tdOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K KyAgICAgICAgICAgIHBhMCA9IHBhMC50b1VwcGVyQ2FzZSgpOworICAgICAg ICAgICAgaWYgKHBhMCAhPSAiTyIpIHsKKyAgICAgICAgICAgICAgICBzd2l0 Y2ggKHJbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiWiI6Cisg ICAgICAgICAgICAgICAgICAgICAgICB4ID0gK214OworICAgICAgICAgICAg ICAgICAgICAgICAgeSA9ICtteTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICJIIjoKKyAgICAg ICAgICAgICAgICAgICAgICAgIHggPSByWzFdOworICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgIlYi OgorICAgICAgICAgICAgICAgICAgICAgICAgeSA9IHJbMV07CisgICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg Y2FzZSAiTSI6CisgICAgICAgICAgICAgICAgICAgICAgICBteCA9IHJbci5s ZW5ndGggLSAyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG15ID0gclty Lmxlbmd0aCAtIDFdOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor ICAgICAgICAgICAgICAgICAgICAgICAgeCA9IHJbci5sZW5ndGggLSAyXTsK KyAgICAgICAgICAgICAgICAgICAgICAgIHkgPSByW3IubGVuZ3RoIC0gMV07 CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9 CisgICAgICAgIHJlcy50b1N0cmluZyA9IHRvU3RyaW5nOworICAgICAgICBw dGguYWJzID0gcGF0aENsb25lKHJlcyk7CisgICAgICAgIHJldHVybiByZXM7 CisgICAgfQorICAgIGZ1bmN0aW9uIGwyYyh4MSwgeTEsIHgyLCB5Mikgewor ICAgICAgICByZXR1cm4gW3gxLCB5MSwgeDIsIHkyLCB4MiwgeTJdOworICAg IH0KKyAgICBmdW5jdGlvbiBxMmMoeDEsIHkxLCBheCwgYXksIHgyLCB5Mikg eworICAgICAgICB2YXIgXzEzID0gMSAvIDMsCisgICAgICAgICAgICBfMjMg PSAyIC8gMzsKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgICAgICBf MTMgKiB4MSArIF8yMyAqIGF4LAorICAgICAgICAgICAgICAgIF8xMyAqIHkx ICsgXzIzICogYXksCisgICAgICAgICAgICAgICAgXzEzICogeDIgKyBfMjMg KiBheCwKKyAgICAgICAgICAgICAgICBfMTMgKiB5MiArIF8yMyAqIGF5LAor ICAgICAgICAgICAgICAgIHgyLAorICAgICAgICAgICAgICAgIHkyCisgICAg ICAgICAgICBdOworICAgIH0KKyAgICBmdW5jdGlvbiBhMmMoeDEsIHkxLCBy eCwgcnksIGFuZ2xlLCBsYXJnZV9hcmNfZmxhZywgc3dlZXBfZmxhZywgeDIs IHkyLCByZWN1cnNpdmUpIHsKKyAgICAgICAgLy8gZm9yIG1vcmUgaW5mb3Jt YXRpb24gb2Ygd2hlcmUgdGhpcyBtYXRoIGNhbWUgZnJvbSB2aXNpdDoKKyAg ICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvaW1wbG5vdGUu aHRtbCNBcmNJbXBsZW1lbnRhdGlvbk5vdGVzCisgICAgICAgIHZhciBfMTIw ID0gUEkgKiAxMjAgLyAxODAsCisgICAgICAgICAgICByYWQgPSBQSSAvIDE4 MCAqICgrYW5nbGUgfHwgMCksCisgICAgICAgICAgICByZXMgPSBbXSwKKyAg ICAgICAgICAgIHh5LAorICAgICAgICAgICAgcm90YXRlID0gU25hcC5fLmNh Y2hlcihmdW5jdGlvbiAoeCwgeSwgcmFkKSB7CisgICAgICAgICAgICAgICAg dmFyIFggPSB4ICogbWF0aC5jb3MocmFkKSAtIHkgKiBtYXRoLnNpbihyYWQp LAorICAgICAgICAgICAgICAgICAgICBZID0geCAqIG1hdGguc2luKHJhZCkg KyB5ICogbWF0aC5jb3MocmFkKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g e3g6IFgsIHk6IFl9OworICAgICAgICAgICAgfSk7CisgICAgICAgIGlmICgh cmVjdXJzaXZlKSB7CisgICAgICAgICAgICB4eSA9IHJvdGF0ZSh4MSwgeTEs IC1yYWQpOworICAgICAgICAgICAgeDEgPSB4eS54OworICAgICAgICAgICAg eTEgPSB4eS55OworICAgICAgICAgICAgeHkgPSByb3RhdGUoeDIsIHkyLCAt cmFkKTsKKyAgICAgICAgICAgIHgyID0geHkueDsKKyAgICAgICAgICAgIHky ID0geHkueTsKKyAgICAgICAgICAgIHZhciBjb3MgPSBtYXRoLmNvcyhQSSAv IDE4MCAqIGFuZ2xlKSwKKyAgICAgICAgICAgICAgICBzaW4gPSBtYXRoLnNp bihQSSAvIDE4MCAqIGFuZ2xlKSwKKyAgICAgICAgICAgICAgICB4ID0gKHgx IC0geDIpIC8gMiwKKyAgICAgICAgICAgICAgICB5ID0gKHkxIC0geTIpIC8g MjsKKyAgICAgICAgICAgIHZhciBoID0gKHggKiB4KSAvIChyeCAqIHJ4KSAr ICh5ICogeSkgLyAocnkgKiByeSk7CisgICAgICAgICAgICBpZiAoaCA+IDEp IHsKKyAgICAgICAgICAgICAgICBoID0gbWF0aC5zcXJ0KGgpOworICAgICAg ICAgICAgICAgIHJ4ID0gaCAqIHJ4OworICAgICAgICAgICAgICAgIHJ5ID0g aCAqIHJ5OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHJ4MiA9 IHJ4ICogcngsCisgICAgICAgICAgICAgICAgcnkyID0gcnkgKiByeSwKKyAg ICAgICAgICAgICAgICBrID0gKGxhcmdlX2FyY19mbGFnID09IHN3ZWVwX2Zs YWcgPyAtMSA6IDEpICoKKyAgICAgICAgICAgICAgICAgICAgbWF0aC5zcXJ0 KGFicygocngyICogcnkyIC0gcngyICogeSAqIHkgLSByeTIgKiB4ICogeCkg LyAocngyICogeSAqIHkgKyByeTIgKiB4ICogeCkpKSwKKyAgICAgICAgICAg ICAgICBjeCA9IGsgKiByeCAqIHkgLyByeSArICh4MSArIHgyKSAvIDIsCisg ICAgICAgICAgICAgICAgY3kgPSBrICogLXJ5ICogeCAvIHJ4ICsgKHkxICsg eTIpIC8gMiwKKyAgICAgICAgICAgICAgICBmMSA9IG1hdGguYXNpbigoKHkx IC0gY3kpIC8gcnkpLnRvRml4ZWQoOSkpLAorICAgICAgICAgICAgICAgIGYy ID0gbWF0aC5hc2luKCgoeTIgLSBjeSkgLyByeSkudG9GaXhlZCg5KSk7CisK KyAgICAgICAgICAgIGYxID0geDEgPCBjeCA/IFBJIC0gZjEgOiBmMTsKKyAg ICAgICAgICAgIGYyID0geDIgPCBjeCA/IFBJIC0gZjIgOiBmMjsKKyAgICAg ICAgICAgIGYxIDwgMCAmJiAoZjEgPSBQSSAqIDIgKyBmMSk7CisgICAgICAg ICAgICBmMiA8IDAgJiYgKGYyID0gUEkgKiAyICsgZjIpOworICAgICAgICAg ICAgaWYgKHN3ZWVwX2ZsYWcgJiYgZjEgPiBmMikgeworICAgICAgICAgICAg ICAgIGYxID0gZjEgLSBQSSAqIDI7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBpZiAoIXN3ZWVwX2ZsYWcgJiYgZjIgPiBmMSkgeworICAgICAgICAg ICAgICAgIGYyID0gZjIgLSBQSSAqIDI7CisgICAgICAgICAgICB9CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmMSA9IHJlY3Vyc2l2ZVswXTsK KyAgICAgICAgICAgIGYyID0gcmVjdXJzaXZlWzFdOworICAgICAgICAgICAg Y3ggPSByZWN1cnNpdmVbMl07CisgICAgICAgICAgICBjeSA9IHJlY3Vyc2l2 ZVszXTsKKyAgICAgICAgfQorICAgICAgICB2YXIgZGYgPSBmMiAtIGYxOwor ICAgICAgICBpZiAoYWJzKGRmKSA+IF8xMjApIHsKKyAgICAgICAgICAgIHZh ciBmMm9sZCA9IGYyLAorICAgICAgICAgICAgICAgIHgyb2xkID0geDIsCisg ICAgICAgICAgICAgICAgeTJvbGQgPSB5MjsKKyAgICAgICAgICAgIGYyID0g ZjEgKyBfMTIwICogKHN3ZWVwX2ZsYWcgJiYgZjIgPiBmMSA/IDEgOiAtMSk7 CisgICAgICAgICAgICB4MiA9IGN4ICsgcnggKiBtYXRoLmNvcyhmMik7Cisg ICAgICAgICAgICB5MiA9IGN5ICsgcnkgKiBtYXRoLnNpbihmMik7CisgICAg ICAgICAgICByZXMgPSBhMmMoeDIsIHkyLCByeCwgcnksIGFuZ2xlLCAwLCBz d2VlcF9mbGFnLCB4Mm9sZCwgeTJvbGQsIFtmMiwgZjJvbGQsIGN4LCBjeV0p OworICAgICAgICB9CisgICAgICAgIGRmID0gZjIgLSBmMTsKKyAgICAgICAg dmFyIGMxID0gbWF0aC5jb3MoZjEpLAorICAgICAgICAgICAgczEgPSBtYXRo LnNpbihmMSksCisgICAgICAgICAgICBjMiA9IG1hdGguY29zKGYyKSwKKyAg ICAgICAgICAgIHMyID0gbWF0aC5zaW4oZjIpLAorICAgICAgICAgICAgdCA9 IG1hdGgudGFuKGRmIC8gNCksCisgICAgICAgICAgICBoeCA9IDQgLyAzICog cnggKiB0LAorICAgICAgICAgICAgaHkgPSA0IC8gMyAqIHJ5ICogdCwKKyAg ICAgICAgICAgIG0xID0gW3gxLCB5MV0sCisgICAgICAgICAgICBtMiA9IFt4 MSArIGh4ICogczEsIHkxIC0gaHkgKiBjMV0sCisgICAgICAgICAgICBtMyA9 IFt4MiArIGh4ICogczIsIHkyIC0gaHkgKiBjMl0sCisgICAgICAgICAgICBt NCA9IFt4MiwgeTJdOworICAgICAgICBtMlswXSA9IDIgKiBtMVswXSAtIG0y WzBdOworICAgICAgICBtMlsxXSA9IDIgKiBtMVsxXSAtIG0yWzFdOworICAg ICAgICBpZiAocmVjdXJzaXZlKSB7CisgICAgICAgICAgICByZXR1cm4gW20y LCBtMywgbTRdLmNvbmNhdChyZXMpOworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgcmVzID0gW20yLCBtMywgbTRdLmNvbmNhdChyZXMpLmpvaW4o KS5zcGxpdCgiLCIpOworICAgICAgICAgICAgdmFyIG5ld3JlcyA9IFtdOwor ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gcmVzLmxlbmd0aDsg aSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgICAgICBuZXdyZXNbaV0gPSBp ICUgMiA/IHJvdGF0ZShyZXNbaSAtIDFdLCByZXNbaV0sIHJhZCkueSA6IHJv dGF0ZShyZXNbaV0sIHJlc1tpICsgMV0sIHJhZCkueDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHJldHVybiBuZXdyZXM7CisgICAgICAgIH0KKyAg ICB9CisgICAgZnVuY3Rpb24gZmluZERvdEF0U2VnbWVudChwMXgsIHAxeSwg YzF4LCBjMXksIGMyeCwgYzJ5LCBwMngsIHAyeSwgdCkgeworICAgICAgICB2 YXIgdDEgPSAxIC0gdDsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg IHg6IHBvdyh0MSwgMykgKiBwMXggKyBwb3codDEsIDIpICogMyAqIHQgKiBj MXggKyB0MSAqIDMgKiB0ICogdCAqIGMyeCArIHBvdyh0LCAzKSAqIHAyeCwK KyAgICAgICAgICAgIHk6IHBvdyh0MSwgMykgKiBwMXkgKyBwb3codDEsIDIp ICogMyAqIHQgKiBjMXkgKyB0MSAqIDMgKiB0ICogdCAqIGMyeSArIHBvdyh0 LCAzKSAqIHAyeQorICAgICAgICB9OworICAgIH0KKworICAgIC8vIFJldHVy bnMgYm91bmRpbmcgYm94IG9mIGN1YmljIGJlemllciBjdXJ2ZS4KKyAgICAv LyBTb3VyY2U6IGh0dHA6Ly9ibG9nLmhhY2tlcnMtY2FmZS5uZXQvMjAwOS8w Ni9ob3ctdG8tY2FsY3VsYXRlLWJlemllci1jdXJ2ZXMtYm91bmRpbmcuaHRt bAorICAgIC8vIE9yaWdpbmFsIHZlcnNpb246IE5JU0hJTyBIaXJva2F6dQor ICAgIC8vIE1vZGlmaWNhdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS90aW1v MjIzNDUKKyAgICBmdW5jdGlvbiBjdXJ2ZURpbSh4MCwgeTAsIHgxLCB5MSwg eDIsIHkyLCB4MywgeTMpIHsKKyAgICAgICAgdmFyIHR2YWx1ZXMgPSBbXSwK KyAgICAgICAgICAgIGJvdW5kcyA9IFtbXSwgW11dLAorICAgICAgICAgICAg YSwgYiwgYywgdCwgdDEsIHQyLCBiMmFjLCBzcXJ0YjJhYzsKKyAgICAgICAg Zm9yICh2YXIgaSA9IDA7IGkgPCAyOyArK2kpIHsKKyAgICAgICAgICAgIGlm IChpID09IDApIHsKKyAgICAgICAgICAgICAgICBiID0gNiAqIHgwIC0gMTIg KiB4MSArIDYgKiB4MjsKKyAgICAgICAgICAgICAgICBhID0gLTMgKiB4MCAr IDkgKiB4MSAtIDkgKiB4MiArIDMgKiB4MzsKKyAgICAgICAgICAgICAgICBj ID0gMyAqIHgxIC0gMyAqIHgwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBiID0gNiAqIHkwIC0gMTIgKiB5MSArIDYgKiB5MjsK KyAgICAgICAgICAgICAgICBhID0gLTMgKiB5MCArIDkgKiB5MSAtIDkgKiB5 MiArIDMgKiB5MzsKKyAgICAgICAgICAgICAgICBjID0gMyAqIHkxIC0gMyAq IHkwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGFicyhhKSA8 IDFlLTEyKSB7CisgICAgICAgICAgICAgICAgaWYgKGFicyhiKSA8IDFlLTEy KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ID0gLWMgLyBiOworICAgICAg ICAgICAgICAgIGlmICgwIDwgdCAmJiB0IDwgMSkgeworICAgICAgICAgICAg ICAgICAgICB0dmFsdWVzLnB1c2godCk7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg ICAgICAgICAgYjJhYyA9IGIgKiBiIC0gNCAqIGMgKiBhOworICAgICAgICAg ICAgc3FydGIyYWMgPSBtYXRoLnNxcnQoYjJhYyk7CisgICAgICAgICAgICBp ZiAoYjJhYyA8IDApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIHQxID0gKC1iICsgc3FydGIyYWMp IC8gKDIgKiBhKTsKKyAgICAgICAgICAgIGlmICgwIDwgdDEgJiYgdDEgPCAx KSB7CisgICAgICAgICAgICAgICAgdHZhbHVlcy5wdXNoKHQxKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIHQyID0gKC1iIC0gc3FydGIyYWMpIC8g KDIgKiBhKTsKKyAgICAgICAgICAgIGlmICgwIDwgdDIgJiYgdDIgPCAxKSB7 CisgICAgICAgICAgICAgICAgdHZhbHVlcy5wdXNoKHQyKTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZhciB4LCB5LCBqID0gdHZh bHVlcy5sZW5ndGgsCisgICAgICAgICAgICBqbGVuID0gaiwKKyAgICAgICAg ICAgIG10OworICAgICAgICB3aGlsZSAoai0tKSB7CisgICAgICAgICAgICB0 ID0gdHZhbHVlc1tqXTsKKyAgICAgICAgICAgIG10ID0gMSAtIHQ7CisgICAg ICAgICAgICBib3VuZHNbMF1bal0gPSAobXQgKiBtdCAqIG10ICogeDApICsg KDMgKiBtdCAqIG10ICogdCAqIHgxKSArICgzICogbXQgKiB0ICogdCAqIHgy KSArICh0ICogdCAqIHQgKiB4Myk7CisgICAgICAgICAgICBib3VuZHNbMV1b al0gPSAobXQgKiBtdCAqIG10ICogeTApICsgKDMgKiBtdCAqIG10ICogdCAq IHkxKSArICgzICogbXQgKiB0ICogdCAqIHkyKSArICh0ICogdCAqIHQgKiB5 Myk7CisgICAgICAgIH0KKworICAgICAgICBib3VuZHNbMF1bamxlbl0gPSB4 MDsKKyAgICAgICAgYm91bmRzWzFdW2psZW5dID0geTA7CisgICAgICAgIGJv dW5kc1swXVtqbGVuICsgMV0gPSB4MzsKKyAgICAgICAgYm91bmRzWzFdW2ps ZW4gKyAxXSA9IHkzOworICAgICAgICBib3VuZHNbMF0ubGVuZ3RoID0gYm91 bmRzWzFdLmxlbmd0aCA9IGpsZW4gKyAyOworCisKKyAgICAgICAgcmV0dXJu IHsKKyAgICAgICAgICBtaW46IHt4OiBtbWluLmFwcGx5KDAsIGJvdW5kc1sw XSksIHk6IG1taW4uYXBwbHkoMCwgYm91bmRzWzFdKX0sCisgICAgICAgICAg bWF4OiB7eDogbW1heC5hcHBseSgwLCBib3VuZHNbMF0pLCB5OiBtbWF4LmFw cGx5KDAsIGJvdW5kc1sxXSl9CisgICAgICAgIH07CisgICAgfQorCisgICAg ZnVuY3Rpb24gcGF0aDJjdXJ2ZShwYXRoLCBwYXRoMikgeworICAgICAgICB2 YXIgcHRoID0gIXBhdGgyICYmIHBhdGhzKHBhdGgpOworICAgICAgICBpZiAo IXBhdGgyICYmIHB0aC5jdXJ2ZSkgeworICAgICAgICAgICAgcmV0dXJuIHBh dGhDbG9uZShwdGguY3VydmUpOworICAgICAgICB9CisgICAgICAgIHZhciBw ID0gcGF0aFRvQWJzb2x1dGUocGF0aCksCisgICAgICAgICAgICBwMiA9IHBh dGgyICYmIHBhdGhUb0Fic29sdXRlKHBhdGgyKSwKKyAgICAgICAgICAgIGF0 dHJzID0ge3g6IDAsIHk6IDAsIGJ4OiAwLCBieTogMCwgWDogMCwgWTogMCwg cXg6IG51bGwsIHF5OiBudWxsfSwKKyAgICAgICAgICAgIGF0dHJzMiA9IHt4 OiAwLCB5OiAwLCBieDogMCwgYnk6IDAsIFg6IDAsIFk6IDAsIHF4OiBudWxs LCBxeTogbnVsbH0sCisgICAgICAgICAgICBwcm9jZXNzUGF0aCA9IGZ1bmN0 aW9uIChwYXRoLCBkLCBwY29tKSB7CisgICAgICAgICAgICAgICAgdmFyIG54 LCBueTsKKyAgICAgICAgICAgICAgICBpZiAoIXBhdGgpIHsKKyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIFsiQyIsIGQueCwgZC55LCBkLngsIGQueSwg ZC54LCBkLnldOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAhKHBhdGhbMF0gaW4ge1Q6IDEsIFE6IDF9KSAmJiAoZC5xeCA9IGQucXkg PSBudWxsKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHBhdGhbMF0pIHsK KyAgICAgICAgICAgICAgICAgICAgY2FzZSAiTSI6CisgICAgICAgICAgICAg ICAgICAgICAgICBkLlggPSBwYXRoWzFdOworICAgICAgICAgICAgICAgICAg ICAgICAgZC5ZID0gcGF0aFsyXTsKKyAgICAgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlICJBIjoKKyAgICAg ICAgICAgICAgICAgICAgICAgIHBhdGggPSBbIkMiXS5jb25jYXQoYTJjLmFw cGx5KDAsIFtkLngsIGQueV0uY29uY2F0KHBhdGguc2xpY2UoMSkpKSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgY2FzZSAiUyI6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo cGNvbSA9PSAiQyIgfHwgcGNvbSA9PSAiUyIpIHsgLy8gSW4gIlMiIGNhc2Ug d2UgaGF2ZSB0byB0YWtlIGludG8gYWNjb3VudCwgaWYgdGhlIHByZXZpb3Vz IGNvbW1hbmQgaXMgQy9TLgorICAgICAgICAgICAgICAgICAgICAgICAgICAg IG54ID0gZC54ICogMiAtIGQuYng7ICAgICAgICAgIC8vIEFuZCByZWZsZWN0 IHRoZSBwcmV2aW91cworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG55 ID0gZC55ICogMiAtIGQuYnk7ICAgICAgICAgIC8vIGNvbW1hbmQncyBjb250 cm9sIHBvaW50IHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IHBvaW50LgorICAg ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg ICAgZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIHNv bWUgZWxzZSBvciBub3RoaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbnggPSBkLng7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnkg PSBkLnk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgICAgICAgICBwYXRoID0gWyJDIiwgbngsIG55XS5jb25jYXQocGF0 aC5zbGljZSgxKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgICAgICAgICAgY2FzZSAiVCI6CisgICAgICAgICAgICAg ICAgICAgICAgICBpZiAocGNvbSA9PSAiUSIgfHwgcGNvbSA9PSAiVCIpIHsg Ly8gSW4gIlQiIGNhc2Ugd2UgaGF2ZSB0byB0YWtlIGludG8gYWNjb3VudCwg aWYgdGhlIHByZXZpb3VzIGNvbW1hbmQgaXMgUS9ULgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGQucXggPSBkLnggKiAyIC0gZC5xeDsgICAgICAg IC8vIEFuZCBtYWtlIGEgcmVmbGVjdGlvbiBzaW1pbGFyCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZC5xeSA9IGQueSAqIDIgLSBkLnF5OyAgICAg ICAgLy8gdG8gY2FzZSAiUyIuCisgICAgICAgICAgICAgICAgICAgICAgICB9 CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8gb3Igc29tZXRoaW5nIGVsc2Ugb3Igbm90aGlu ZworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucXggPSBkLng7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5xeSA9IGQueTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg IHBhdGggPSBbIkMiXS5jb25jYXQocTJjKGQueCwgZC55LCBkLnF4LCBkLnF5 LCBwYXRoWzFdLCBwYXRoWzJdKSk7CisgICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiUSI6CisgICAg ICAgICAgICAgICAgICAgICAgICBkLnF4ID0gcGF0aFsxXTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGQucXkgPSBwYXRoWzJdOworICAgICAgICAgICAg ICAgICAgICAgICAgcGF0aCA9IFsiQyJdLmNvbmNhdChxMmMoZC54LCBkLnks IHBhdGhbMV0sIHBhdGhbMl0sIHBhdGhbM10sIHBhdGhbNF0pKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg ICBjYXNlICJMIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSBb IkMiXS5jb25jYXQobDJjKGQueCwgZC55LCBwYXRoWzFdLCBwYXRoWzJdKSk7 CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg ICAgICAgICAgY2FzZSAiSCI6CisgICAgICAgICAgICAgICAgICAgICAgICBw YXRoID0gWyJDIl0uY29uY2F0KGwyYyhkLngsIGQueSwgcGF0aFsxXSwgZC55 KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgICAgICAgICAgY2FzZSAiViI6CisgICAgICAgICAgICAgICAgICAgICAg ICBwYXRoID0gWyJDIl0uY29uY2F0KGwyYyhkLngsIGQueSwgZC54LCBwYXRo WzFdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgY2FzZSAiWiI6CisgICAgICAgICAgICAgICAgICAg ICAgICBwYXRoID0gWyJDIl0uY29uY2F0KGwyYyhkLngsIGQueSwgZC5YLCBk LlkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcGF0aDsKKyAg ICAgICAgICAgIH0sCisgICAgICAgICAgICBmaXhBcmMgPSBmdW5jdGlvbiAo cHAsIGkpIHsKKyAgICAgICAgICAgICAgICBpZiAocHBbaV0ubGVuZ3RoID4g NykgeworICAgICAgICAgICAgICAgICAgICBwcFtpXS5zaGlmdCgpOworICAg ICAgICAgICAgICAgICAgICB2YXIgcGkgPSBwcFtpXTsKKyAgICAgICAgICAg ICAgICAgICAgd2hpbGUgKHBpLmxlbmd0aCkgeworICAgICAgICAgICAgICAg ICAgICAgICAgcGNvbXMxW2ldID0gIkEiOyAvLyBpZiBjcmVhdGVkIG11bHRp cGxlIEM6cywgdGhlaXIgb3JpZ2luYWwgc2VnIGlzIHNhdmVkCisgICAgICAg ICAgICAgICAgICAgICAgICBwMiAmJiAocGNvbXMyW2ldID0gIkEiKTsgLy8g dGhlIHNhbWUgYXMgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgICAgIHBw LnNwbGljZShpKyssIDAsIFsiQyJdLmNvbmNhdChwaS5zcGxpY2UoMCwgNikp KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg ICBwcC5zcGxpY2UoaSwgMSk7CisgICAgICAgICAgICAgICAgICAgIGlpID0g bW1heChwLmxlbmd0aCwgcDIgJiYgcDIubGVuZ3RoIHx8IDApOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBmaXhN ID0gZnVuY3Rpb24gKHBhdGgxLCBwYXRoMiwgYTEsIGEyLCBpKSB7CisgICAg ICAgICAgICAgICAgaWYgKHBhdGgxICYmIHBhdGgyICYmIHBhdGgxW2ldWzBd ID09ICJNIiAmJiBwYXRoMltpXVswXSAhPSAiTSIpIHsKKyAgICAgICAgICAg ICAgICAgICAgcGF0aDIuc3BsaWNlKGksIDAsIFsiTSIsIGEyLngsIGEyLnld KTsKKyAgICAgICAgICAgICAgICAgICAgYTEuYnggPSAwOworICAgICAgICAg ICAgICAgICAgICBhMS5ieSA9IDA7CisgICAgICAgICAgICAgICAgICAgIGEx LnggPSBwYXRoMVtpXVsxXTsKKyAgICAgICAgICAgICAgICAgICAgYTEueSA9 IHBhdGgxW2ldWzJdOworICAgICAgICAgICAgICAgICAgICBpaSA9IG1tYXgo cC5sZW5ndGgsIHAyICYmIHAyLmxlbmd0aCB8fCAwKTsKKyAgICAgICAgICAg ICAgICB9CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgcGNvbXMxID0g W10sIC8vIHBhdGggY29tbWFuZHMgb2Ygb3JpZ2luYWwgcGF0aCBwCisgICAg ICAgICAgICBwY29tczIgPSBbXSwgLy8gcGF0aCBjb21tYW5kcyBvZiBvcmln aW5hbCBwYXRoIHAyCisgICAgICAgICAgICBwZmlyc3QgPSAiIiwgLy8gdGVt cG9yYXJ5IGhvbGRlciBmb3Igb3JpZ2luYWwgcGF0aCBjb21tYW5kCisgICAg ICAgICAgICBwY29tID0gIiI7IC8vIGhvbGRlciBmb3IgcHJldmlvdXMgcGF0 aCBjb21tYW5kIG9mIG9yaWdpbmFsIHBhdGgKKyAgICAgICAgZm9yICh2YXIg aSA9IDAsIGlpID0gbW1heChwLmxlbmd0aCwgcDIgJiYgcDIubGVuZ3RoIHx8 IDApOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgcFtpXSAmJiAocGZp cnN0ID0gcFtpXVswXSk7IC8vIHNhdmUgY3VycmVudCBwYXRoIGNvbW1hbmQK KworICAgICAgICAgICAgaWYgKHBmaXJzdCAhPSAiQyIpIC8vIEMgaXMgbm90 IHNhdmVkIHlldCwgYmVjYXVzZSBpdCBtYXkgYmUgcmVzdWx0IG9mIGNvbnZl cnNpb24KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwY29tczFb aV0gPSBwZmlyc3Q7IC8vIFNhdmUgY3VycmVudCBwYXRoIGNvbW1hbmQKKyAg ICAgICAgICAgICAgICBpICYmICggcGNvbSA9IHBjb21zMVtpIC0gMV0pOyAv LyBHZXQgcHJldmlvdXMgcGF0aCBjb21tYW5kIHBjb20KKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIHBbaV0gPSBwcm9jZXNzUGF0aChwW2ldLCBhdHRy cywgcGNvbSk7IC8vIFByZXZpb3VzIHBhdGggY29tbWFuZCBpcyBpbnB1dHRl ZCB0byBwcm9jZXNzUGF0aAorCisgICAgICAgICAgICBpZiAocGNvbXMxW2ld ICE9ICJBIiAmJiBwZmlyc3QgPT0gIkMiKSBwY29tczFbaV0gPSAiQyI7IC8v IEEgaXMgdGhlIG9ubHkgY29tbWFuZAorICAgICAgICAgICAgLy8gd2hpY2gg bWF5IHByb2R1Y2UgbXVsdGlwbGUgQzpzCisgICAgICAgICAgICAvLyBzbyB3 ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0IEMgaXMgYWxzbyBDIGluIG9yaWdp bmFsIHBhdGgKKworICAgICAgICAgICAgZml4QXJjKHAsIGkpOyAvLyBmaXhB cmMgYWRkcyBhbHNvIHRoZSByaWdodCBhbW91bnQgb2YgQTpzIHRvIHBjb21z MQorCisgICAgICAgICAgICBpZiAocDIpIHsgLy8gdGhlIHNhbWUgcHJvY2Vk dXJlcyBpcyBkb25lIHRvIHAyCisgICAgICAgICAgICAgICAgcDJbaV0gJiYg KHBmaXJzdCA9IHAyW2ldWzBdKTsKKyAgICAgICAgICAgICAgICBpZiAocGZp cnN0ICE9ICJDIikgeworICAgICAgICAgICAgICAgICAgICBwY29tczJbaV0g PSBwZmlyc3Q7CisgICAgICAgICAgICAgICAgICAgIGkgJiYgKHBjb20gPSBw Y29tczJbaSAtIDFdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgcDJbaV0gPSBwcm9jZXNzUGF0aChwMltpXSwgYXR0cnMyLCBwY29t KTsKKworICAgICAgICAgICAgICAgIGlmIChwY29tczJbaV0gIT0gIkEiICYm IHBmaXJzdCA9PSAiQyIpIHsKKyAgICAgICAgICAgICAgICAgICAgcGNvbXMy W2ldID0gIkMiOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg ICAgIGZpeEFyYyhwMiwgaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBmaXhNKHAsIHAyLCBhdHRycywgYXR0cnMyLCBpKTsKKyAgICAgICAgICAg IGZpeE0ocDIsIHAsIGF0dHJzMiwgYXR0cnMsIGkpOworICAgICAgICAgICAg dmFyIHNlZyA9IHBbaV0sCisgICAgICAgICAgICAgICAgc2VnMiA9IHAyICYm IHAyW2ldLAorICAgICAgICAgICAgICAgIHNlZ2xlbiA9IHNlZy5sZW5ndGgs CisgICAgICAgICAgICAgICAgc2VnMmxlbiA9IHAyICYmIHNlZzIubGVuZ3Ro OworICAgICAgICAgICAgYXR0cnMueCA9IHNlZ1tzZWdsZW4gLSAyXTsKKyAg ICAgICAgICAgIGF0dHJzLnkgPSBzZWdbc2VnbGVuIC0gMV07CisgICAgICAg ICAgICBhdHRycy5ieCA9IHRvRmxvYXQoc2VnW3NlZ2xlbiAtIDRdKSB8fCBh dHRycy54OworICAgICAgICAgICAgYXR0cnMuYnkgPSB0b0Zsb2F0KHNlZ1tz ZWdsZW4gLSAzXSkgfHwgYXR0cnMueTsKKyAgICAgICAgICAgIGF0dHJzMi5i eCA9IHAyICYmICh0b0Zsb2F0KHNlZzJbc2VnMmxlbiAtIDRdKSB8fCBhdHRy czIueCk7CisgICAgICAgICAgICBhdHRyczIuYnkgPSBwMiAmJiAodG9GbG9h dChzZWcyW3NlZzJsZW4gLSAzXSkgfHwgYXR0cnMyLnkpOworICAgICAgICAg ICAgYXR0cnMyLnggPSBwMiAmJiBzZWcyW3NlZzJsZW4gLSAyXTsKKyAgICAg ICAgICAgIGF0dHJzMi55ID0gcDIgJiYgc2VnMltzZWcybGVuIC0gMV07Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKCFwMikgeworICAgICAgICAgICAgcHRo LmN1cnZlID0gcGF0aENsb25lKHApOworICAgICAgICB9CisgICAgICAgIHJl dHVybiBwMiA/IFtwLCBwMl0gOiBwOworICAgIH0KKyAgICBmdW5jdGlvbiBt YXBQYXRoKHBhdGgsIG1hdHJpeCkgeworICAgICAgICBpZiAoIW1hdHJpeCkg eworICAgICAgICAgICAgcmV0dXJuIHBhdGg7CisgICAgICAgIH0KKyAgICAg ICAgdmFyIHgsIHksIGksIGosIGlpLCBqaiwgcGF0aGk7CisgICAgICAgIHBh dGggPSBwYXRoMmN1cnZlKHBhdGgpOworICAgICAgICBmb3IgKGkgPSAwLCBp aSA9IHBhdGgubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAg cGF0aGkgPSBwYXRoW2ldOworICAgICAgICAgICAgZm9yIChqID0gMSwgamog PSBwYXRoaS5sZW5ndGg7IGogPCBqajsgaiArPSAyKSB7CisgICAgICAgICAg ICAgICAgeCA9IG1hdHJpeC54KHBhdGhpW2pdLCBwYXRoaVtqICsgMV0pOwor ICAgICAgICAgICAgICAgIHkgPSBtYXRyaXgueShwYXRoaVtqXSwgcGF0aGlb aiArIDFdKTsKKyAgICAgICAgICAgICAgICBwYXRoaVtqXSA9IHg7CisgICAg ICAgICAgICAgICAgcGF0aGlbaiArIDFdID0geTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgICByZXR1cm4gcGF0aDsKKyAgICB9CisKKyAg ICAvLyBodHRwOi8vc2NoZXBlcnMuY2MvZ2V0dGluZy10by10aGUtcG9pbnQK KyAgICBmdW5jdGlvbiBjYXRtdWxsUm9tMmJlemllcihjcnAsIHopIHsKKyAg ICAgICAgdmFyIGQgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlM ZW4gPSBjcnAubGVuZ3RoOyBpTGVuIC0gMiAqICF6ID4gaTsgaSArPSAyKSB7 CisgICAgICAgICAgICB2YXIgcCA9IFsKKyAgICAgICAgICAgICAgICAgICAg ICAgIHt4OiArY3JwW2kgLSAyXSwgeTogK2NycFtpIC0gMV19LAorICAgICAg ICAgICAgICAgICAgICAgICAge3g6ICtjcnBbaV0sICAgICB5OiArY3JwW2kg KyAxXX0sCisgICAgICAgICAgICAgICAgICAgICAgICB7eDogK2NycFtpICsg Ml0sIHk6ICtjcnBbaSArIDNdfSwKKyAgICAgICAgICAgICAgICAgICAgICAg IHt4OiArY3JwW2kgKyA0XSwgeTogK2NycFtpICsgNV19CisgICAgICAgICAg ICAgICAgICAgIF07CisgICAgICAgICAgICBpZiAoeikgeworICAgICAgICAg ICAgICAgIGlmICghaSkgeworICAgICAgICAgICAgICAgICAgICBwWzBdID0g e3g6ICtjcnBbaUxlbiAtIDJdLCB5OiArY3JwW2lMZW4gLSAxXX07CisgICAg ICAgICAgICAgICAgfSBlbHNlIGlmIChpTGVuIC0gNCA9PSBpKSB7CisgICAg ICAgICAgICAgICAgICAgIHBbM10gPSB7eDogK2NycFswXSwgeTogK2NycFsx XX07CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpTGVuIC0gMiA9PSBp KSB7CisgICAgICAgICAgICAgICAgICAgIHBbMl0gPSB7eDogK2NycFswXSwg eTogK2NycFsxXX07CisgICAgICAgICAgICAgICAgICAgIHBbM10gPSB7eDog K2NycFsyXSwgeTogK2NycFszXX07CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaUxlbiAt IDQgPT0gaSkgeworICAgICAgICAgICAgICAgICAgICBwWzNdID0gcFsyXTsK KyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCFpKSB7CisgICAgICAgICAg ICAgICAgICAgIHBbMF0gPSB7eDogK2NycFtpXSwgeTogK2NycFtpICsgMV19 OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGQucHVzaChbIkMiLAorICAgICAgICAgICAgICAgICAgKC1wWzBdLngg KyA2ICogcFsxXS54ICsgcFsyXS54KSAvIDYsCisgICAgICAgICAgICAgICAg ICAoLXBbMF0ueSArIDYgKiBwWzFdLnkgKyBwWzJdLnkpIC8gNiwKKyAgICAg ICAgICAgICAgICAgIChwWzFdLnggKyA2ICogcFsyXS54IC0gcFszXS54KSAv IDYsCisgICAgICAgICAgICAgICAgICAocFsxXS55ICsgNipwWzJdLnkgLSBw WzNdLnkpIC8gNiwKKyAgICAgICAgICAgICAgICAgIHBbMl0ueCwKKyAgICAg ICAgICAgICAgICAgIHBbMl0ueQorICAgICAgICAgICAgXSk7CisgICAgICAg IH0KKworICAgICAgICByZXR1cm4gZDsKKyAgICB9CisKKyAgICAvLyBleHBv cnQKKyAgICBTbmFwLnBhdGggPSBwYXRoczsKKworICAgIC8qXAorICAgICAq IFNuYXAucGF0aC5nZXRUb3RhbExlbmd0aAorICAgICBbIG1ldGhvZCBdCisg ICAgICoqCisgICAgICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBnaXZl biBwYXRoIGluIHBpeGVscworICAgICAqKgorICAgICAtIHBhdGggKHN0cmlu ZykgU1ZHIHBhdGggc3RyaW5nCisgICAgICoqCisgICAgID0gKG51bWJlcikg bGVuZ3RoCisgICAgXCovCisgICAgU25hcC5wYXRoLmdldFRvdGFsTGVuZ3Ro ID0gZ2V0VG90YWxMZW5ndGg7CisgICAgLypcCisgICAgICogU25hcC5wYXRo LmdldFBvaW50QXRMZW5ndGgKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgor ICAgICAqIFJldHVybnMgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBs b2NhdGVkIGF0IHRoZSBnaXZlbiBsZW5ndGggYWxvbmcgdGhlIGdpdmVuIHBh dGgKKyAgICAgKioKKyAgICAgLSBwYXRoIChzdHJpbmcpIFNWRyBwYXRoIHN0 cmluZworICAgICAtIGxlbmd0aCAobnVtYmVyKSBsZW5ndGgsIGluIHBpeGVs cywgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhdGgsIGV4Y2x1ZGluZyBub24t cmVuZGVyaW5nIGp1bXBzCisgICAgICoqCisgICAgID0gKG9iamVjdCkgcmVw cmVzZW50YXRpb24gb2YgdGhlIHBvaW50OgorICAgICBvIHsKKyAgICAgbyAg ICAgeDogKG51bWJlcikgeCBjb29yZGluYXRlLAorICAgICBvICAgICB5OiAo bnVtYmVyKSB5IGNvb3JkaW5hdGUsCisgICAgIG8gICAgIGFscGhhOiAobnVt YmVyKSBhbmdsZSBvZiBkZXJpdmF0aXZlCisgICAgIG8gfQorICAgIFwqLwor ICAgIFNuYXAucGF0aC5nZXRQb2ludEF0TGVuZ3RoID0gZ2V0UG9pbnRBdExl bmd0aDsKKyAgICAvKlwKKyAgICAgKiBTbmFwLnBhdGguZ2V0U3VicGF0aAor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyB0aGUg c3VicGF0aCBvZiBhIGdpdmVuIHBhdGggYmV0d2VlbiBnaXZlbiBzdGFydCBh bmQgZW5kIGxlbmd0aHMKKyAgICAgKioKKyAgICAgLSBwYXRoIChzdHJpbmcp IFNWRyBwYXRoIHN0cmluZworICAgICAtIGZyb20gKG51bWJlcikgbGVuZ3Ro LCBpbiBwaXhlbHMsIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXRoIHRvIHRo ZSBzdGFydCBvZiB0aGUgc2VnbWVudAorICAgICAtIHRvIChudW1iZXIpIGxl bmd0aCwgaW4gcGl4ZWxzLCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGF0aCB0 byB0aGUgZW5kIG9mIHRoZSBzZWdtZW50CisgICAgICoqCisgICAgID0gKHN0 cmluZykgcGF0aCBzdHJpbmcgZGVmaW5pdGlvbiBmb3IgdGhlIHNlZ21lbnQK KyAgICBcKi8KKyAgICBTbmFwLnBhdGguZ2V0U3VicGF0aCA9IGZ1bmN0aW9u IChwYXRoLCBmcm9tLCB0bykgeworICAgICAgICBpZiAodGhpcy5nZXRUb3Rh bExlbmd0aChwYXRoKSAtIHRvIDwgMWUtNikgeworICAgICAgICAgICAgcmV0 dXJuIGdldFN1YnBhdGhzQXRMZW5ndGgocGF0aCwgZnJvbSkuZW5kOworICAg ICAgICB9CisgICAgICAgIHZhciBhID0gZ2V0U3VicGF0aHNBdExlbmd0aChw YXRoLCB0bywgMSk7CisgICAgICAgIHJldHVybiBmcm9tID8gZ2V0U3VicGF0 aHNBdExlbmd0aChhLCBmcm9tKS5lbmQgOiBhOworICAgIH07CisgICAgLypc CisgICAgICogRWxlbWVudC5nZXRUb3RhbExlbmd0aAorICAgICBbIG1ldGhv ZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRo ZSBwYXRoIGluIHBpeGVscyAob25seSB3b3JrcyBmb3IgYHBhdGhgIGVsZW1l bnRzKQorICAgICA9IChudW1iZXIpIGxlbmd0aAorICAgIFwqLworICAgIGVs cHJvdG8uZ2V0VG90YWxMZW5ndGggPSBmdW5jdGlvbiAoKSB7CisgICAgICAg IGlmICh0aGlzLm5vZGUuZ2V0VG90YWxMZW5ndGgpIHsKKyAgICAgICAgICAg IHJldHVybiB0aGlzLm5vZGUuZ2V0VG90YWxMZW5ndGgoKTsKKyAgICAgICAg fQorICAgIH07CisgICAgLy8gU0lFUlJBIEVsZW1lbnQuZ2V0UG9pbnRBdExl bmd0aCgpL0VsZW1lbnQuZ2V0VG90YWxMZW5ndGgoKTogSWYgYSA8cGF0aD4g aXMgYnJva2VuIGludG8gZGlmZmVyZW50IHNlZ21lbnRzLCBpcyB0aGUganVt cCBkaXN0YW5jZSB0byB0aGUgbmV3IGNvb3JkaW5hdGVzIHNldCBieSB0aGUg X01fIG9yIF9tXyBjb21tYW5kcyBjYWxjdWxhdGVkIGFzIHBhcnQgb2YgdGhl IHBhdGgncyB0b3RhbCBsZW5ndGg/CisgICAgLypcCisgICAgICogRWxlbWVu dC5nZXRQb2ludEF0TGVuZ3RoCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioK KyAgICAgKiBSZXR1cm5zIGNvb3JkaW5hdGVzIG9mIHRoZSBwb2ludCBsb2Nh dGVkIGF0IHRoZSBnaXZlbiBsZW5ndGggb24gdGhlIGdpdmVuIHBhdGggKG9u bHkgd29ya3MgZm9yIGBwYXRoYCBlbGVtZW50cykKKyAgICAgKioKKyAgICAg LSBsZW5ndGggKG51bWJlcikgbGVuZ3RoLCBpbiBwaXhlbHMsIGZyb20gdGhl IHN0YXJ0IG9mIHRoZSBwYXRoLCBleGNsdWRpbmcgbm9uLXJlbmRlcmluZyBq dW1wcworICAgICAqKgorICAgICA9IChvYmplY3QpIHJlcHJlc2VudGF0aW9u IG9mIHRoZSBwb2ludDoKKyAgICAgbyB7CisgICAgIG8gICAgIHg6IChudW1i ZXIpIHggY29vcmRpbmF0ZSwKKyAgICAgbyAgICAgeTogKG51bWJlcikgeSBj b29yZGluYXRlLAorICAgICBvICAgICBhbHBoYTogKG51bWJlcikgYW5nbGUg b2YgZGVyaXZhdGl2ZQorICAgICBvIH0KKyAgICBcKi8KKyAgICBlbHByb3Rv LmdldFBvaW50QXRMZW5ndGggPSBmdW5jdGlvbiAobGVuZ3RoKSB7CisgICAg ICAgIHJldHVybiBnZXRQb2ludEF0TGVuZ3RoKHRoaXMuYXR0cigiZCIpLCBs ZW5ndGgpOworICAgIH07CisgICAgLy8gU0lFUlJBIEVsZW1lbnQuZ2V0U3Vi cGF0aCgpOiBTaW1pbGFyIHRvIHRoZSBwcm9ibGVtIGZvciBFbGVtZW50Lmdl dFBvaW50QXRMZW5ndGgoKS4gVW5jbGVhciBob3cgdGhpcyB3b3VsZCB3b3Jr IGZvciBhIHNlZ21lbnRlZCBwYXRoLiBPdmVyYWxsLCB0aGUgY29uY2VwdCBv ZiBfc3VicGF0aF8gYW5kIHdoYXQgSSdtIGNhbGxpbmcgYSBfc2VnbWVudF8g KHNlcmllcyBvZiBub24tX01fIG9yIF9aXyBjb21tYW5kcykgaXMgdW5jbGVh ci4KKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LmdldFN1YnBhdGgKKyAgICAg WyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgc3VicGF0aCBv ZiBhIGdpdmVuIGVsZW1lbnQgZnJvbSBnaXZlbiBzdGFydCBhbmQgZW5kIGxl bmd0aHMgKG9ubHkgd29ya3MgZm9yIGBwYXRoYCBlbGVtZW50cykKKyAgICAg KioKKyAgICAgLSBmcm9tIChudW1iZXIpIGxlbmd0aCwgaW4gcGl4ZWxzLCBm cm9tIHRoZSBzdGFydCBvZiB0aGUgcGF0aCB0byB0aGUgc3RhcnQgb2YgdGhl IHNlZ21lbnQKKyAgICAgLSB0byAobnVtYmVyKSBsZW5ndGgsIGluIHBpeGVs cywgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhdGggdG8gdGhlIGVuZCBvZiB0 aGUgc2VnbWVudAorICAgICAqKgorICAgICA9IChzdHJpbmcpIHBhdGggc3Ry aW5nIGRlZmluaXRpb24gZm9yIHRoZSBzZWdtZW50CisgICAgXCovCisgICAg ZWxwcm90by5nZXRTdWJwYXRoID0gZnVuY3Rpb24gKGZyb20sIHRvKSB7Cisg ICAgICAgIHJldHVybiBTbmFwLnBhdGguZ2V0U3VicGF0aCh0aGlzLmF0dHIo ImQiKSwgZnJvbSwgdG8pOworICAgIH07CisgICAgU25hcC5fLmJveCA9IGJv eDsKKyAgICAvKlwKKyAgICAgKiBTbmFwLnBhdGguZmluZERvdHNBdFNlZ21l bnQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFV0aWxpdHkg bWV0aG9kCisgICAgICoqCisgICAgICogRmluZHMgZG90IGNvb3JkaW5hdGVz IG9uIHRoZSBnaXZlbiBjdWJpYyBiZXppw6lyIGN1cnZlIGF0IHRoZSBnaXZl biB0CisgICAgIC0gcDF4IChudW1iZXIpIHggb2YgdGhlIGZpcnN0IHBvaW50 IG9mIHRoZSBjdXJ2ZQorICAgICAtIHAxeSAobnVtYmVyKSB5IG9mIHRoZSBm aXJzdCBwb2ludCBvZiB0aGUgY3VydmUKKyAgICAgLSBjMXggKG51bWJlcikg eCBvZiB0aGUgZmlyc3QgYW5jaG9yIG9mIHRoZSBjdXJ2ZQorICAgICAtIGMx eSAobnVtYmVyKSB5IG9mIHRoZSBmaXJzdCBhbmNob3Igb2YgdGhlIGN1cnZl CisgICAgIC0gYzJ4IChudW1iZXIpIHggb2YgdGhlIHNlY29uZCBhbmNob3Ig b2YgdGhlIGN1cnZlCisgICAgIC0gYzJ5IChudW1iZXIpIHkgb2YgdGhlIHNl Y29uZCBhbmNob3Igb2YgdGhlIGN1cnZlCisgICAgIC0gcDJ4IChudW1iZXIp IHggb2YgdGhlIHNlY29uZCBwb2ludCBvZiB0aGUgY3VydmUKKyAgICAgLSBw MnkgKG51bWJlcikgeSBvZiB0aGUgc2Vjb25kIHBvaW50IG9mIHRoZSBjdXJ2 ZQorICAgICAtIHQgKG51bWJlcikgcG9zaXRpb24gb24gdGhlIGN1cnZlICgw Li4xKQorICAgICA9IChvYmplY3QpIHBvaW50IGluZm9ybWF0aW9uIGluIGZv cm1hdDoKKyAgICAgbyB7CisgICAgIG8gICAgIHg6IChudW1iZXIpIHggY29v cmRpbmF0ZSBvZiB0aGUgcG9pbnQsCisgICAgIG8gICAgIHk6IChudW1iZXIp IHkgY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQsCisgICAgIG8gICAgIG06IHsK KyAgICAgbyAgICAgICAgIHg6IChudW1iZXIpIHggY29vcmRpbmF0ZSBvZiB0 aGUgbGVmdCBhbmNob3IsCisgICAgIG8gICAgICAgICB5OiAobnVtYmVyKSB5 IGNvb3JkaW5hdGUgb2YgdGhlIGxlZnQgYW5jaG9yCisgICAgIG8gICAgIH0s CisgICAgIG8gICAgIG46IHsKKyAgICAgbyAgICAgICAgIHg6IChudW1iZXIp IHggY29vcmRpbmF0ZSBvZiB0aGUgcmlnaHQgYW5jaG9yLAorICAgICBvICAg ICAgICAgeTogKG51bWJlcikgeSBjb29yZGluYXRlIG9mIHRoZSByaWdodCBh bmNob3IKKyAgICAgbyAgICAgfSwKKyAgICAgbyAgICAgc3RhcnQ6IHsKKyAg ICAgbyAgICAgICAgIHg6IChudW1iZXIpIHggY29vcmRpbmF0ZSBvZiB0aGUg c3RhcnQgb2YgdGhlIGN1cnZlLAorICAgICBvICAgICAgICAgeTogKG51bWJl cikgeSBjb29yZGluYXRlIG9mIHRoZSBzdGFydCBvZiB0aGUgY3VydmUKKyAg ICAgbyAgICAgfSwKKyAgICAgbyAgICAgZW5kOiB7CisgICAgIG8gICAgICAg ICB4OiAobnVtYmVyKSB4IGNvb3JkaW5hdGUgb2YgdGhlIGVuZCBvZiB0aGUg Y3VydmUsCisgICAgIG8gICAgICAgICB5OiAobnVtYmVyKSB5IGNvb3JkaW5h dGUgb2YgdGhlIGVuZCBvZiB0aGUgY3VydmUKKyAgICAgbyAgICAgfSwKKyAg ICAgbyAgICAgYWxwaGE6IChudW1iZXIpIGFuZ2xlIG9mIHRoZSBjdXJ2ZSBk ZXJpdmF0aXZlIGF0IHRoZSBwb2ludAorICAgICBvIH0KKyAgICBcKi8KKyAg ICBTbmFwLnBhdGguZmluZERvdHNBdFNlZ21lbnQgPSBmaW5kRG90c0F0U2Vn bWVudDsKKyAgICAvKlwKKyAgICAgKiBTbmFwLnBhdGguYmV6aWVyQkJveAor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogVXRpbGl0eSBtZXRo b2QKKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIHRoZSBib3VuZGluZyBib3gg b2YgYSBnaXZlbiBjdWJpYyBiZXppw6lyIGN1cnZlCisgICAgIC0gcDF4IChu dW1iZXIpIHggb2YgdGhlIGZpcnN0IHBvaW50IG9mIHRoZSBjdXJ2ZQorICAg ICAtIHAxeSAobnVtYmVyKSB5IG9mIHRoZSBmaXJzdCBwb2ludCBvZiB0aGUg Y3VydmUKKyAgICAgLSBjMXggKG51bWJlcikgeCBvZiB0aGUgZmlyc3QgYW5j aG9yIG9mIHRoZSBjdXJ2ZQorICAgICAtIGMxeSAobnVtYmVyKSB5IG9mIHRo ZSBmaXJzdCBhbmNob3Igb2YgdGhlIGN1cnZlCisgICAgIC0gYzJ4IChudW1i ZXIpIHggb2YgdGhlIHNlY29uZCBhbmNob3Igb2YgdGhlIGN1cnZlCisgICAg IC0gYzJ5IChudW1iZXIpIHkgb2YgdGhlIHNlY29uZCBhbmNob3Igb2YgdGhl IGN1cnZlCisgICAgIC0gcDJ4IChudW1iZXIpIHggb2YgdGhlIHNlY29uZCBw b2ludCBvZiB0aGUgY3VydmUKKyAgICAgLSBwMnkgKG51bWJlcikgeSBvZiB0 aGUgc2Vjb25kIHBvaW50IG9mIHRoZSBjdXJ2ZQorICAgICAqIG9yCisgICAg IC0gYmV6IChhcnJheSkgYXJyYXkgb2Ygc2l4IHBvaW50cyBmb3IgYmV6acOp ciBjdXJ2ZQorICAgICA9IChvYmplY3QpIGJvdW5kaW5nIGJveAorICAgICBv IHsKKyAgICAgbyAgICAgeDogKG51bWJlcikgeCBjb29yZGluYXRlIG9mIHRo ZSBsZWZ0IHRvcCBwb2ludCBvZiB0aGUgYm94LAorICAgICBvICAgICB5OiAo bnVtYmVyKSB5IGNvb3JkaW5hdGUgb2YgdGhlIGxlZnQgdG9wIHBvaW50IG9m IHRoZSBib3gsCisgICAgIG8gICAgIHgyOiAobnVtYmVyKSB4IGNvb3JkaW5h dGUgb2YgdGhlIHJpZ2h0IGJvdHRvbSBwb2ludCBvZiB0aGUgYm94LAorICAg ICBvICAgICB5MjogKG51bWJlcikgeSBjb29yZGluYXRlIG9mIHRoZSByaWdo dCBib3R0b20gcG9pbnQgb2YgdGhlIGJveCwKKyAgICAgbyAgICAgd2lkdGg6 IChudW1iZXIpIHdpZHRoIG9mIHRoZSBib3gsCisgICAgIG8gICAgIGhlaWdo dDogKG51bWJlcikgaGVpZ2h0IG9mIHRoZSBib3gKKyAgICAgbyB9CisgICAg XCovCisgICAgU25hcC5wYXRoLmJlemllckJCb3ggPSBiZXppZXJCQm94Owor ICAgIC8qXAorICAgICAqIFNuYXAucGF0aC5pc1BvaW50SW5zaWRlQkJveAor ICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogVXRpbGl0eSBtZXRo b2QKKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiBnaXZlbiBw b2ludCBpcyBpbnNpZGUgYm91bmRpbmcgYm94CisgICAgIC0gYmJveCAoc3Ry aW5nKSBib3VuZGluZyBib3gKKyAgICAgLSB4IChzdHJpbmcpIHggY29vcmRp bmF0ZSBvZiB0aGUgcG9pbnQKKyAgICAgLSB5IChzdHJpbmcpIHkgY29vcmRp bmF0ZSBvZiB0aGUgcG9pbnQKKyAgICAgPSAoYm9vbGVhbikgYHRydWVgIGlm IHBvaW50IGlzIGluc2lkZQorICAgIFwqLworICAgIFNuYXAucGF0aC5pc1Bv aW50SW5zaWRlQkJveCA9IGlzUG9pbnRJbnNpZGVCQm94OworICAgIFNuYXAu Y2xvc2VzdCA9IGZ1bmN0aW9uICh4LCB5LCBYLCBZKSB7CisgICAgICAgIHZh ciByID0gMTAwLAorICAgICAgICAgICAgYiA9IGJveCh4IC0gciAvIDIsIHkg LSByIC8gMiwgciwgciksCisgICAgICAgICAgICBpbnNpZGUgPSBbXSwKKyAg ICAgICAgICAgIGdldHRlciA9IFhbMF0uaGFzT3duUHJvcGVydHkoIngiKSA/ IGZ1bmN0aW9uIChpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHsKKyAg ICAgICAgICAgICAgICAgICAgeDogWFtpXS54LAorICAgICAgICAgICAgICAg ICAgICB5OiBYW2ldLnkKKyAgICAgICAgICAgICAgICB9OworICAgICAgICAg ICAgfSA6IGZ1bmN0aW9uIChpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu IHsKKyAgICAgICAgICAgICAgICAgICAgeDogWFtpXSwKKyAgICAgICAgICAg ICAgICAgICAgeTogWVtpXQorICAgICAgICAgICAgICAgIH07CisgICAgICAg ICAgICB9LAorICAgICAgICAgICAgZm91bmQgPSAwOworICAgICAgICB3aGls ZSAociA8PSAxZTYgJiYgIWZvdW5kKSB7CisgICAgICAgICAgICBmb3IgKHZh ciBpID0gMCwgaWkgPSBYLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAg ICAgICAgICAgICB2YXIgeHkgPSBnZXR0ZXIoaSk7CisgICAgICAgICAgICAg ICAgaWYgKGlzUG9pbnRJbnNpZGVCQm94KGIsIHh5LngsIHh5LnkpKSB7Cisg ICAgICAgICAgICAgICAgICAgIGZvdW5kKys7CisgICAgICAgICAgICAgICAg ICAgIGluc2lkZS5wdXNoKHh5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg ICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgIHIgKj0gMjsK KyAgICAgICAgICAgICAgICBiID0gYm94KHggLSByIC8gMiwgeSAtIHIgLyAy LCByLCByKQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlm IChyID09IDFlNikgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9 CisgICAgICAgIHZhciBsZW4gPSBJbmZpbml0eSwKKyAgICAgICAgICAgIHJl czsKKyAgICAgICAgZm9yIChpID0gMCwgaWkgPSBpbnNpZGUubGVuZ3RoOyBp IDwgaWk7IGkrKykgeworICAgICAgICAgICAgdmFyIGwgPSBTbmFwLmxlbih4 LCB5LCBpbnNpZGVbaV0ueCwgaW5zaWRlW2ldLnkpOworICAgICAgICAgICAg aWYgKGxlbiA+IGwpIHsKKyAgICAgICAgICAgICAgICBsZW4gPSBsOworICAg ICAgICAgICAgICAgIGluc2lkZVtpXS5sZW4gPSBsOworICAgICAgICAgICAg ICAgIHJlcyA9IGluc2lkZVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICByZXR1cm4gcmVzOworICAgIH07CisgICAgLypcCisgICAg ICogU25hcC5wYXRoLmlzQkJveEludGVyc2VjdAorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogVXRpbGl0eSBtZXRob2QKKyAgICAgKioKKyAg ICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0d28gYm91bmRpbmcgYm94ZXMgaW50 ZXJzZWN0CisgICAgIC0gYmJveDEgKHN0cmluZykgZmlyc3QgYm91bmRpbmcg Ym94CisgICAgIC0gYmJveDIgKHN0cmluZykgc2Vjb25kIGJvdW5kaW5nIGJv eAorICAgICA9IChib29sZWFuKSBgdHJ1ZWAgaWYgYm91bmRpbmcgYm94ZXMg aW50ZXJzZWN0CisgICAgXCovCisgICAgU25hcC5wYXRoLmlzQkJveEludGVy c2VjdCA9IGlzQkJveEludGVyc2VjdDsKKyAgICAvKlwKKyAgICAgKiBTbmFw LnBhdGguaW50ZXJzZWN0aW9uCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioK KyAgICAgKiBVdGlsaXR5IG1ldGhvZAorICAgICAqKgorICAgICAqIEZpbmRz IGludGVyc2VjdGlvbnMgb2YgdHdvIHBhdGhzCisgICAgIC0gcGF0aDEgKHN0 cmluZykgcGF0aCBzdHJpbmcKKyAgICAgLSBwYXRoMiAoc3RyaW5nKSBwYXRo IHN0cmluZworICAgICA9IChhcnJheSkgZG90cyBvZiBpbnRlcnNlY3Rpb24K KyAgICAgbyBbCisgICAgIG8gICAgIHsKKyAgICAgbyAgICAgICAgIHg6IChu dW1iZXIpIHggY29vcmRpbmF0ZSBvZiB0aGUgcG9pbnQsCisgICAgIG8gICAg ICAgICB5OiAobnVtYmVyKSB5IGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50LAor ICAgICBvICAgICAgICAgdDE6IChudW1iZXIpIHQgdmFsdWUgZm9yIHNlZ21l bnQgb2YgcGF0aDEsCisgICAgIG8gICAgICAgICB0MjogKG51bWJlcikgdCB2 YWx1ZSBmb3Igc2VnbWVudCBvZiBwYXRoMiwKKyAgICAgbyAgICAgICAgIHNl Z21lbnQxOiAobnVtYmVyKSBvcmRlciBudW1iZXIgZm9yIHNlZ21lbnQgb2Yg cGF0aDEsCisgICAgIG8gICAgICAgICBzZWdtZW50MjogKG51bWJlcikgb3Jk ZXIgbnVtYmVyIGZvciBzZWdtZW50IG9mIHBhdGgyLAorICAgICBvICAgICAg ICAgYmV6MTogKGFycmF5KSBlaWdodCBjb29yZGluYXRlcyByZXByZXNlbnRp bmcgYmV6acOpciBjdXJ2ZSBmb3IgdGhlIHNlZ21lbnQgb2YgcGF0aDEsCisg ICAgIG8gICAgICAgICBiZXoyOiAoYXJyYXkpIGVpZ2h0IGNvb3JkaW5hdGVz IHJlcHJlc2VudGluZyBiZXppw6lyIGN1cnZlIGZvciB0aGUgc2VnbWVudCBv ZiBwYXRoMgorICAgICBvICAgICB9CisgICAgIG8gXQorICAgIFwqLworICAg IFNuYXAucGF0aC5pbnRlcnNlY3Rpb24gPSBwYXRoSW50ZXJzZWN0aW9uOwor ICAgIFNuYXAucGF0aC5pbnRlcnNlY3Rpb25OdW1iZXIgPSBwYXRoSW50ZXJz ZWN0aW9uTnVtYmVyOworICAgIC8qXAorICAgICAqIFNuYXAucGF0aC5pc1Bv aW50SW5zaWRlCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBV dGlsaXR5IG1ldGhvZAorICAgICAqKgorICAgICAqIFJldHVybnMgYHRydWVg IGlmIGdpdmVuIHBvaW50IGlzIGluc2lkZSBhIGdpdmVuIGNsb3NlZCBwYXRo LgorICAgICAqCisgICAgICogTm90ZTogZmlsbCBtb2RlIGRvZXNu4oCZdCBh ZmZlY3QgdGhlIHJlc3VsdCBvZiB0aGlzIG1ldGhvZC4KKyAgICAgLSBwYXRo IChzdHJpbmcpIHBhdGggc3RyaW5nCisgICAgIC0geCAobnVtYmVyKSB4IG9m IHRoZSBwb2ludAorICAgICAtIHkgKG51bWJlcikgeSBvZiB0aGUgcG9pbnQK KyAgICAgPSAoYm9vbGVhbikgYHRydWVgIGlmIHBvaW50IGlzIGluc2lkZSB0 aGUgcGF0aAorICAgIFwqLworICAgIFNuYXAucGF0aC5pc1BvaW50SW5zaWRl ID0gaXNQb2ludEluc2lkZVBhdGg7CisgICAgLypcCisgICAgICogU25hcC5w YXRoLmdldEJCb3gKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAq IFV0aWxpdHkgbWV0aG9kCisgICAgICoqCisgICAgICogUmV0dXJucyB0aGUg Ym91bmRpbmcgYm94IG9mIGEgZ2l2ZW4gcGF0aAorICAgICAtIHBhdGggKHN0 cmluZykgcGF0aCBzdHJpbmcKKyAgICAgPSAob2JqZWN0KSBib3VuZGluZyBi b3gKKyAgICAgbyB7CisgICAgIG8gICAgIHg6IChudW1iZXIpIHggY29vcmRp bmF0ZSBvZiB0aGUgbGVmdCB0b3AgcG9pbnQgb2YgdGhlIGJveCwKKyAgICAg byAgICAgeTogKG51bWJlcikgeSBjb29yZGluYXRlIG9mIHRoZSBsZWZ0IHRv cCBwb2ludCBvZiB0aGUgYm94LAorICAgICBvICAgICB4MjogKG51bWJlcikg eCBjb29yZGluYXRlIG9mIHRoZSByaWdodCBib3R0b20gcG9pbnQgb2YgdGhl IGJveCwKKyAgICAgbyAgICAgeTI6IChudW1iZXIpIHkgY29vcmRpbmF0ZSBv ZiB0aGUgcmlnaHQgYm90dG9tIHBvaW50IG9mIHRoZSBib3gsCisgICAgIG8g ICAgIHdpZHRoOiAobnVtYmVyKSB3aWR0aCBvZiB0aGUgYm94LAorICAgICBv ICAgICBoZWlnaHQ6IChudW1iZXIpIGhlaWdodCBvZiB0aGUgYm94CisgICAg IG8gfQorICAgIFwqLworICAgIFNuYXAucGF0aC5nZXRCQm94ID0gcGF0aEJC b3g7CisgICAgU25hcC5wYXRoLmdldCA9IGdldFBhdGg7CisgICAgLypcCisg ICAgICogU25hcC5wYXRoLnRvUmVsYXRpdmUKKyAgICAgWyBtZXRob2QgXQor ICAgICAqKgorICAgICAqIFV0aWxpdHkgbWV0aG9kCisgICAgICoqCisgICAg ICogQ29udmVydHMgcGF0aCBjb29yZGluYXRlcyBpbnRvIHJlbGF0aXZlIHZh bHVlcworICAgICAtIHBhdGggKHN0cmluZykgcGF0aCBzdHJpbmcKKyAgICAg PSAoYXJyYXkpIHBhdGggc3RyaW5nCisgICAgXCovCisgICAgU25hcC5wYXRo LnRvUmVsYXRpdmUgPSBwYXRoVG9SZWxhdGl2ZTsKKyAgICAvKlwKKyAgICAg KiBTbmFwLnBhdGgudG9BYnNvbHV0ZQorICAgICBbIG1ldGhvZCBdCisgICAg ICoqCisgICAgICogVXRpbGl0eSBtZXRob2QKKyAgICAgKioKKyAgICAgKiBD b252ZXJ0cyBwYXRoIGNvb3JkaW5hdGVzIGludG8gYWJzb2x1dGUgdmFsdWVz CisgICAgIC0gcGF0aCAoc3RyaW5nKSBwYXRoIHN0cmluZworICAgICA9IChh cnJheSkgcGF0aCBzdHJpbmcKKyAgICBcKi8KKyAgICBTbmFwLnBhdGgudG9B YnNvbHV0ZSA9IHBhdGhUb0Fic29sdXRlOworICAgIC8qXAorICAgICAqIFNu YXAucGF0aC50b0N1YmljCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBVdGlsaXR5IG1ldGhvZAorICAgICAqKgorICAgICAqIENvbnZlcnRz IHBhdGggdG8gYSBuZXcgcGF0aCB3aGVyZSBhbGwgc2VnbWVudHMgYXJlIGN1 YmljIGJlemnDqXIgY3VydmVzCisgICAgIC0gcGF0aFN0cmluZyAoc3RyaW5n fGFycmF5KSBwYXRoIHN0cmluZyBvciBhcnJheSBvZiBzZWdtZW50cworICAg ICA9IChhcnJheSkgYXJyYXkgb2Ygc2VnbWVudHMKKyAgICBcKi8KKyAgICBT bmFwLnBhdGgudG9DdWJpYyA9IHBhdGgyY3VydmU7CisgICAgLypcCisgICAg ICogU25hcC5wYXRoLm1hcAorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogVHJhbnNmb3JtIHRoZSBwYXRoIHN0cmluZyB3aXRoIHRoZSBnaXZl biBtYXRyaXgKKyAgICAgLSBwYXRoIChzdHJpbmcpIHBhdGggc3RyaW5nCisg ICAgIC0gbWF0cml4IChvYmplY3QpIHNlZSBATWF0cml4CisgICAgID0gKHN0 cmluZykgdHJhbnNmb3JtZWQgcGF0aCBzdHJpbmcKKyAgICBcKi8KKyAgICBT bmFwLnBhdGgubWFwID0gbWFwUGF0aDsKKyAgICBTbmFwLnBhdGgudG9TdHJp bmcgPSB0b1N0cmluZzsKKyAgICBTbmFwLnBhdGguY2xvbmUgPSBwYXRoQ2xv bmU7Cit9KTsKKworLy8gQ29weXJpZ2h0IChjKSAyMDEzIEFkb2JlIFN5c3Rl bXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8v IExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAy LjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMg ZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgor Ly8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Cisv LworLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0Ut Mi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3 IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJp YnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4g IkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05E SVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVk LgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3Vh Z2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMg dW5kZXIgdGhlIExpY2Vuc2UuCitTbmFwLnBsdWdpbihmdW5jdGlvbiAoU25h cCwgRWxlbWVudCwgUGFwZXIsIGdsb2IpIHsKKyAgICB2YXIgbW1heCA9IE1h dGgubWF4LAorICAgICAgICBtbWluID0gTWF0aC5taW47CisKKyAgICAvLyBT ZXQKKyAgICB2YXIgU2V0ID0gZnVuY3Rpb24gKGl0ZW1zKSB7CisgICAgICAg IHRoaXMuaXRlbXMgPSBbXTsKKwl0aGlzLmJpbmRpbmdzID0ge307CisgICAg ICAgIHRoaXMubGVuZ3RoID0gMDsKKyAgICAgICAgdGhpcy50eXBlID0gInNl dCI7CisgICAgICAgIGlmIChpdGVtcykgeworICAgICAgICAgICAgZm9yICh2 YXIgaSA9IDAsIGlpID0gaXRlbXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgewor ICAgICAgICAgICAgICAgIGlmIChpdGVtc1tpXSkgeworICAgICAgICAgICAg ICAgICAgICB0aGlzW3RoaXMuaXRlbXMubGVuZ3RoXSA9IHRoaXMuaXRlbXNb dGhpcy5pdGVtcy5sZW5ndGhdID0gaXRlbXNbaV07CisgICAgICAgICAgICAg ICAgICAgIHRoaXMubGVuZ3RoKys7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSwKKyAgICBzZXRwcm90byA9 IFNldC5wcm90b3R5cGU7CisgICAgLypcCisgICAgICogU2V0LnB1c2gKKyAg ICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIEFkZHMgZWFjaCBhcmd1 bWVudCB0byB0aGUgY3VycmVudCBzZXQKKyAgICAgPSAob2JqZWN0KSBvcmln aW5hbCBlbGVtZW50CisgICAgXCovCisgICAgc2V0cHJvdG8ucHVzaCA9IGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGl0ZW0sCisgICAgICAgICAgICBs ZW47CisgICAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGFyZ3VtZW50cy5s ZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICBpdGVtID0gYXJn dW1lbnRzW2ldOworICAgICAgICAgICAgaWYgKGl0ZW0pIHsKKyAgICAgICAg ICAgICAgICBsZW4gPSB0aGlzLml0ZW1zLmxlbmd0aDsKKyAgICAgICAgICAg ICAgICB0aGlzW2xlbl0gPSB0aGlzLml0ZW1zW2xlbl0gPSBpdGVtOworICAg ICAgICAgICAgICAgIHRoaXMubGVuZ3RoKys7CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfTsKKyAgICAv KlwKKyAgICAgKiBTZXQucG9wCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioK KyAgICAgKiBSZW1vdmVzIGxhc3QgZWxlbWVudCBhbmQgcmV0dXJucyBpdAor ICAgICA9IChvYmplY3QpIGVsZW1lbnQKKyAgICBcKi8KKyAgICBzZXRwcm90 by5wb3AgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRoaXMubGVuZ3RoICYm IGRlbGV0ZSB0aGlzW3RoaXMubGVuZ3RoLS1dOworICAgICAgICByZXR1cm4g dGhpcy5pdGVtcy5wb3AoKTsKKyAgICB9OworICAgIC8qXAorICAgICAqIFNl dC5mb3JFYWNoCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBF eGVjdXRlcyBnaXZlbiBmdW5jdGlvbiBmb3IgZWFjaCBlbGVtZW50IGluIHRo ZSBzZXQKKyAgICAgKgorICAgICAqIElmIHRoZSBmdW5jdGlvbiByZXR1cm5z IGBmYWxzZWAsIHRoZSBsb29wIHN0b3BzIHJ1bm5pbmcuCisgICAgICoqCisg ICAgIC0gY2FsbGJhY2sgKGZ1bmN0aW9uKSBmdW5jdGlvbiB0byBydW4KKyAg ICAgLSB0aGlzQXJnIChvYmplY3QpIGNvbnRleHQgb2JqZWN0IGZvciB0aGUg Y2FsbGJhY2sKKyAgICAgPSAob2JqZWN0KSBTZXQgb2JqZWN0CisgICAgXCov CisgICAgc2V0cHJvdG8uZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaywg dGhpc0FyZykgeworICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlz Lml0ZW1zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIGlm IChjYWxsYmFjay5jYWxsKHRoaXNBcmcsIHRoaXMuaXRlbXNbaV0sIGkpID09 PSBmYWxzZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAg ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOwor ICAgIH07CisgICAgLypcCisgICAgICogU2V0LmFuaW1hdGUKKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIEFuaW1hdGVzIGVhY2ggZWxlbWVu dCBpbiBzZXQgaW4gc3luYy4KKyAgICAgKgorICAgICAqKgorICAgICAtIGF0 dHJzIChvYmplY3QpIGtleS12YWx1ZSBwYWlycyBvZiBkZXN0aW5hdGlvbiBh dHRyaWJ1dGVzCisgICAgIC0gZHVyYXRpb24gKG51bWJlcikgZHVyYXRpb24g b2YgdGhlIGFuaW1hdGlvbiBpbiBtaWxsaXNlY29uZHMKKyAgICAgLSBlYXNp bmcgKGZ1bmN0aW9uKSAjb3B0aW9uYWwgZWFzaW5nIGZ1bmN0aW9uIGZyb20g QG1pbmEgb3IgY3VzdG9tCisgICAgIC0gY2FsbGJhY2sgKGZ1bmN0aW9uKSAj b3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCBleGVjdXRlcyB3aGVu IHRoZSBhbmltYXRpb24gZW5kcworICAgICAqIG9yCisgICAgIC0gYW5pbWF0 aW9uIChhcnJheSkgYXJyYXkgb2YgYW5pbWF0aW9uIHBhcmFtZXRlciBmb3Ig ZWFjaCBlbGVtZW50IGluIHNldCBpbiBmb3JtYXQgYFthdHRycywgZHVyYXRp b24sIGVhc2luZywgY2FsbGJhY2tdYAorICAgICA+IFVzYWdlCisgICAgIHwg Ly8gYW5pbWF0ZSBhbGwgZWxlbWVudHMgaW4gc2V0IHRvIHJhZGl1cyAxMAor ICAgICB8IHNldC5hbmltYXRlKHtyOiAxMH0sIDUwMCwgbWluYS5lYXNlaW4p OworICAgICB8IC8vIG9yCisgICAgIHwgLy8gYW5pbWF0ZSBmaXJzdCBlbGVt ZW50IHRvIHJhZGl1cyAxMCwgYnV0IHNlY29uZCB0byByYWRpdXMgMjAgYW5k IGluIGRpZmZlcmVudCB0aW1lCisgICAgIHwgc2V0LmFuaW1hdGUoW3tyOiAx MH0sIDUwMCwgbWluYS5lYXNlaW5dLCBbe3I6IDIwfSwgMTUwMCwgbWluYS5l YXNlaW5dKTsKKyAgICAgPSAoRWxlbWVudCkgdGhlIGN1cnJlbnQgZWxlbWVu dAorICAgIFwqLworICAgIHNldHByb3RvLmFuaW1hdGUgPSBmdW5jdGlvbiAo YXR0cnMsIG1zLCBlYXNpbmcsIGNhbGxiYWNrKSB7CisgICAgICAgIGlmICh0 eXBlb2YgZWFzaW5nID09ICJmdW5jdGlvbiIgJiYgIWVhc2luZy5sZW5ndGgp IHsKKyAgICAgICAgICAgIGNhbGxiYWNrID0gZWFzaW5nOworICAgICAgICAg ICAgZWFzaW5nID0gbWluYS5saW5lYXI7CisgICAgICAgIH0KKyAgICAgICAg aWYgKGF0dHJzIGluc3RhbmNlb2YgU25hcC5fLkFuaW1hdGlvbikgeworICAg ICAgICAgICAgY2FsbGJhY2sgPSBhdHRycy5jYWxsYmFjazsKKyAgICAgICAg ICAgIGVhc2luZyA9IGF0dHJzLmVhc2luZzsKKyAgICAgICAgICAgIG1zID0g ZWFzaW5nLmR1cjsKKyAgICAgICAgICAgIGF0dHJzID0gYXR0cnMuYXR0cjsK KyAgICAgICAgfQorICAgICAgICB2YXIgYXJncyA9IGFyZ3VtZW50czsKKyAg ICAgICAgaWYgKFNuYXAuaXMoYXR0cnMsICJhcnJheSIpICYmIFNuYXAuaXMo YXJnc1thcmdzLmxlbmd0aCAtIDFdLCAiYXJyYXkiKSkgeworICAgICAgICAg ICAgdmFyIGVhY2ggPSB0cnVlOworICAgICAgICB9CisgICAgICAgIHZhciBi ZWdpbiwKKyAgICAgICAgICAgIGhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7Cisg ICAgICAgICAgICAgICAgaWYgKGJlZ2luKSB7CisgICAgICAgICAgICAgICAg ICAgIHRoaXMuYiA9IGJlZ2luOworICAgICAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgICAgIGJlZ2luID0gdGhpcy5iOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBjYiA9 IDAsCisgICAgICAgICAgICBzZXQgPSB0aGlzLAorICAgICAgICAgICAgY2Fs bGJhY2tlciA9IGNhbGxiYWNrICYmIGZ1bmN0aW9uICgpIHsKKyAgICAgICAg ICAgICAgICBpZiAoKytjYiA9PSBzZXQubGVuZ3RoKSB7CisgICAgICAgICAg ICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpcyk7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfTsKKyAgICAgICAgcmV0dXJuIHRoaXMuZm9y RWFjaChmdW5jdGlvbiAoZWwsIGkpIHsKKyAgICAgICAgICAgIGV2ZS5vbmNl KCJzbmFwLmFuaW1jcmVhdGVkLiIgKyBlbC5pZCwgaGFuZGxlcik7CisgICAg ICAgICAgICBpZiAoZWFjaCkgeworICAgICAgICAgICAgICAgIGFyZ3NbaV0g JiYgZWwuYW5pbWF0ZS5hcHBseShlbCwgYXJnc1tpXSk7CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGVsLmFuaW1hdGUoYXR0cnMs IG1zLCBlYXNpbmcsIGNhbGxiYWNrZXIpOworICAgICAgICAgICAgfQorICAg ICAgICB9KTsKKyAgICB9OworICAgIHNldHByb3RvLnJlbW92ZSA9IGZ1bmN0 aW9uICgpIHsKKyAgICAgICAgd2hpbGUgKHRoaXMubGVuZ3RoKSB7CisgICAg ICAgICAgICB0aGlzLnBvcCgpLnJlbW92ZSgpOworICAgICAgICB9CisgICAg ICAgIHJldHVybiB0aGlzOworICAgIH07CisgICAgLypcCisgICAgICogU2V0 LmJpbmQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFNwZWNp ZmllcyBob3cgdG8gaGFuZGxlIGEgc3BlY2lmaWMgYXR0cmlidXRlIHdoZW4g YXBwbGllZAorICAgICAqIHRvIGEgc2V0LgorICAgICAqCisgICAgICoqCisg ICAgIC0gYXR0ciAoc3RyaW5nKSBhdHRyaWJ1dGUgbmFtZQorICAgICAtIGNh bGxiYWNrIChmdW5jdGlvbikgZnVuY3Rpb24gdG8gcnVuCisgICAgICogb3IK KyAgICAgLSBhdHRyIChzdHJpbmcpIGF0dHJpYnV0ZSBuYW1lCisgICAgIC0g ZWxlbWVudCAoRWxlbWVudCkgc3BlY2lmaWMgZWxlbWVudCBpbiB0aGUgc2V0 IHRvIGFwcGx5IHRoZSBhdHRyaWJ1dGUgdG8KKyAgICAgKiBvcgorICAgICAt IGF0dHIgKHN0cmluZykgYXR0cmlidXRlIG5hbWUKKyAgICAgLSBlbGVtZW50 IChFbGVtZW50KSBzcGVjaWZpYyBlbGVtZW50IGluIHRoZSBzZXQgdG8gYXBw bHkgdGhlIGF0dHJpYnV0ZSB0bworICAgICAtIGVhdHRyIChzdHJpbmcpIGF0 dHJpYnV0ZSBvbiB0aGUgZWxlbWVudCB0byBiaW5kIHRoZSBhdHRyaWJ1dGUg dG8KKyAgICAgPSAob2JqZWN0KSBTZXQgb2JqZWN0CisgICAgXCovCisgICAg c2V0cHJvdG8uYmluZCA9IGZ1bmN0aW9uIChhdHRyLCBhLCBiKSB7CisgICAg ICAgIHZhciBkYXRhID0ge307CisgICAgICAgIGlmICh0eXBlb2YgYSA9PSAi ZnVuY3Rpb24iKSB7CisgICAgICAgICAgICB0aGlzLmJpbmRpbmdzW2F0dHJd ID0gYTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBhbmFt ZSA9IGIgfHwgYXR0cjsKKyAgICAgICAgICAgIHRoaXMuYmluZGluZ3NbYXR0 cl0gPSBmdW5jdGlvbiAodikgeworICAgICAgICAgICAgICAgIGRhdGFbYW5h bWVdID0gdjsKKyAgICAgICAgICAgICAgICBhLmF0dHIoZGF0YSk7CisgICAg ICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiB0aGlzOwor ICAgIH07CisgICAgc2V0cHJvdG8uYXR0ciA9IGZ1bmN0aW9uICh2YWx1ZSkg eworICAgICAgICB2YXIgdW5ib3VuZCA9IHt9OworICAgICAgICBmb3IgKHZh ciBrIGluIHZhbHVlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5iaW5kaW5n c1trXSkgeworICAgICAgICAgICAgICAgIHRoaXMuYmluZGluZ3Nba10odmFs dWVba10pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg ICB1bmJvdW5kW2tdID0gdmFsdWVba107CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5pdGVt cy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7CisgICAgICAgICAgICB0aGlzLml0 ZW1zW2ldLmF0dHIodW5ib3VuZCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0 dXJuIHRoaXM7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBTZXQuY2xlYXIK KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJlbW92ZXMgYWxs IGVsZW1lbnRzIGZyb20gdGhlIHNldAorICAgIFwqLworICAgIHNldHByb3Rv LmNsZWFyID0gZnVuY3Rpb24gKCkgeworICAgICAgICB3aGlsZSAodGhpcy5s ZW5ndGgpIHsKKyAgICAgICAgICAgIHRoaXMucG9wKCk7CisgICAgICAgIH0K KyAgICB9OworICAgIC8qXAorICAgICAqIFNldC5zcGxpY2UKKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIFJlbW92ZXMgcmFuZ2Ugb2YgZWxl bWVudHMgZnJvbSB0aGUgc2V0CisgICAgICoqCisgICAgIC0gaW5kZXggKG51 bWJlcikgcG9zaXRpb24gb2YgdGhlIGRlbGV0aW9uCisgICAgIC0gY291bnQg KG51bWJlcikgbnVtYmVyIG9mIGVsZW1lbnQgdG8gcmVtb3ZlCisgICAgIC0g aW5zZXJ0aW9u4oCmIChvYmplY3QpICNvcHRpb25hbCBlbGVtZW50cyB0byBp bnNlcnQKKyAgICAgPSAob2JqZWN0KSBzZXQgZWxlbWVudHMgdGhhdCB3ZXJl IGRlbGV0ZWQKKyAgICBcKi8KKyAgICBzZXRwcm90by5zcGxpY2UgPSBmdW5j dGlvbiAoaW5kZXgsIGNvdW50LCBpbnNlcnRpb24pIHsKKyAgICAgICAgaW5k ZXggPSBpbmRleCA8IDAgPyBtbWF4KHRoaXMubGVuZ3RoICsgaW5kZXgsIDAp IDogaW5kZXg7CisgICAgICAgIGNvdW50ID0gbW1heCgwLCBtbWluKHRoaXMu bGVuZ3RoIC0gaW5kZXgsIGNvdW50KSk7CisgICAgICAgIHZhciB0YWlsID0g W10sCisgICAgICAgICAgICB0b2RlbCA9IFtdLAorICAgICAgICAgICAgYXJn cyA9IFtdLAorICAgICAgICAgICAgaTsKKyAgICAgICAgZm9yIChpID0gMjsg aSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgYXJn cy5wdXNoKGFyZ3VtZW50c1tpXSk7CisgICAgICAgIH0KKyAgICAgICAgZm9y IChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIHRvZGVs LnB1c2godGhpc1tpbmRleCArIGldKTsKKyAgICAgICAgfQorICAgICAgICBm b3IgKDsgaSA8IHRoaXMubGVuZ3RoIC0gaW5kZXg7IGkrKykgeworICAgICAg ICAgICAgdGFpbC5wdXNoKHRoaXNbaW5kZXggKyBpXSk7CisgICAgICAgIH0K KyAgICAgICAgdmFyIGFyZ2xlbiA9IGFyZ3MubGVuZ3RoOworICAgICAgICBm b3IgKGkgPSAwOyBpIDwgYXJnbGVuICsgdGFpbC5sZW5ndGg7IGkrKykgewor ICAgICAgICAgICAgdGhpcy5pdGVtc1tpbmRleCArIGldID0gdGhpc1tpbmRl eCArIGldID0gaSA8IGFyZ2xlbiA/IGFyZ3NbaV0gOiB0YWlsW2kgLSBhcmds ZW5dOworICAgICAgICB9CisgICAgICAgIGkgPSB0aGlzLml0ZW1zLmxlbmd0 aCA9IHRoaXMubGVuZ3RoIC09IGNvdW50IC0gYXJnbGVuOworICAgICAgICB3 aGlsZSAodGhpc1tpXSkgeworICAgICAgICAgICAgZGVsZXRlIHRoaXNbaSsr XTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbmV3IFNldCh0b2RlbCk7 CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBTZXQuZXhjbHVkZQorICAgICBb IG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmVtb3ZlcyBnaXZlbiBlbGVt ZW50IGZyb20gdGhlIHNldAorICAgICAqKgorICAgICAtIGVsZW1lbnQgKG9i amVjdCkgZWxlbWVudCB0byByZW1vdmUKKyAgICAgPSAoYm9vbGVhbikgYHRy dWVgIGlmIG9iamVjdCB3YXMgZm91bmQgYW5kIHJlbW92ZWQgZnJvbSB0aGUg c2V0CisgICAgXCovCisgICAgc2V0cHJvdG8uZXhjbHVkZSA9IGZ1bmN0aW9u IChlbCkgeworICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLmxl bmd0aDsgaSA8IGlpOyBpKyspIGlmICh0aGlzW2ldID09IGVsKSB7CisgICAg ICAgICAgICB0aGlzLnNwbGljZShpLCAxKTsKKyAgICAgICAgICAgIHJldHVy biB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg ICB9OworICAgIHNldHByb3RvLmluc2VydEFmdGVyID0gZnVuY3Rpb24gKGVs KSB7CisgICAgICAgIHZhciBpID0gdGhpcy5pdGVtcy5sZW5ndGg7CisgICAg ICAgIHdoaWxlIChpLS0pIHsKKyAgICAgICAgICAgIHRoaXMuaXRlbXNbaV0u aW5zZXJ0QWZ0ZXIoZWwpOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0 aGlzOworICAgIH07CisgICAgc2V0cHJvdG8uZ2V0QkJveCA9IGZ1bmN0aW9u ICgpIHsKKyAgICAgICAgdmFyIHggPSBbXSwKKyAgICAgICAgICAgIHkgPSBb XSwKKyAgICAgICAgICAgIHgyID0gW10sCisgICAgICAgICAgICB5MiA9IFtd OworICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5pdGVtcy5sZW5ndGg7IGkt LTspIGlmICghdGhpcy5pdGVtc1tpXS5yZW1vdmVkKSB7CisgICAgICAgICAg ICB2YXIgYm94ID0gdGhpcy5pdGVtc1tpXS5nZXRCQm94KCk7CisgICAgICAg ICAgICB4LnB1c2goYm94LngpOworICAgICAgICAgICAgeS5wdXNoKGJveC55 KTsKKyAgICAgICAgICAgIHgyLnB1c2goYm94LnggKyBib3gud2lkdGgpOwor ICAgICAgICAgICAgeTIucHVzaChib3gueSArIGJveC5oZWlnaHQpOworICAg ICAgICB9CisgICAgICAgIHggPSBtbWluLmFwcGx5KDAsIHgpOworICAgICAg ICB5ID0gbW1pbi5hcHBseSgwLCB5KTsKKyAgICAgICAgeDIgPSBtbWF4LmFw cGx5KDAsIHgyKTsKKyAgICAgICAgeTIgPSBtbWF4LmFwcGx5KDAsIHkyKTsK KyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHg6IHgsCisgICAgICAg ICAgICB5OiB5LAorICAgICAgICAgICAgeDI6IHgyLAorICAgICAgICAgICAg eTI6IHkyLAorICAgICAgICAgICAgd2lkdGg6IHgyIC0geCwKKyAgICAgICAg ICAgIGhlaWdodDogeTIgLSB5LAorICAgICAgICAgICAgY3g6IHggKyAoeDIg LSB4KSAvIDIsCisgICAgICAgICAgICBjeTogeSArICh5MiAtIHkpIC8gMgor ICAgICAgICB9OworICAgIH07CisgICAgc2V0cHJvdG8uY2xvbmUgPSBmdW5j dGlvbiAocykgeworICAgICAgICBzID0gbmV3IFNldDsKKyAgICAgICAgZm9y ICh2YXIgaSA9IDAsIGlpID0gdGhpcy5pdGVtcy5sZW5ndGg7IGkgPCBpaTsg aSsrKSB7CisgICAgICAgICAgICBzLnB1c2godGhpcy5pdGVtc1tpXS5jbG9u ZSgpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gczsKKyAgICB9Owor ICAgIHNldHByb3RvLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgICAg ICByZXR1cm4gIlNuYXBcdTIwMThzIHNldCI7CisgICAgfTsKKyAgICBzZXRw cm90by50eXBlID0gInNldCI7CisgICAgLy8gZXhwb3J0CisgICAgU25hcC5T ZXQgPSBTZXQ7CisgICAgU25hcC5zZXQgPSBmdW5jdGlvbiAoKSB7CisgICAg ICAgIHZhciBzZXQgPSBuZXcgU2V0OworICAgICAgICBpZiAoYXJndW1lbnRz Lmxlbmd0aCkgeworICAgICAgICAgICAgc2V0LnB1c2guYXBwbHkoc2V0LCBB cnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDApKTsKKyAg ICAgICAgfQorICAgICAgICByZXR1cm4gc2V0OworICAgIH07Cit9KTsKKwor Ly8gQ29weXJpZ2h0IChjKSAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3Jh dGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVu ZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGlj ZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQg aW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBv YnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gaHR0cDov L3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8g VW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0 byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIg dGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJ UywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFO WSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRo ZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5n IHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExp Y2Vuc2UuCitTbmFwLnBsdWdpbihmdW5jdGlvbiAoU25hcCwgRWxlbWVudCwg UGFwZXIsIGdsb2IpIHsKKyAgICB2YXIgbmFtZXMgPSB7fSwKKyAgICAgICAg cmVVbml0ID0gL1thLXpdKyQvaSwKKyAgICAgICAgU3RyID0gU3RyaW5nOwor ICAgIG5hbWVzLnN0cm9rZSA9IG5hbWVzLmZpbGwgPSAiY29sb3VyIjsKKyAg ICBmdW5jdGlvbiBnZXRFbXB0eShpdGVtKSB7CisgICAgICAgIHZhciBsID0g aXRlbVswXTsKKyAgICAgICAgc3dpdGNoIChsLnRvTG93ZXJDYXNlKCkpIHsK KyAgICAgICAgICAgIGNhc2UgInQiOiByZXR1cm4gW2wsIDAsIDBdOworICAg ICAgICAgICAgY2FzZSAibSI6IHJldHVybiBbbCwgMSwgMCwgMCwgMSwgMCwg MF07CisgICAgICAgICAgICBjYXNlICJyIjogaWYgKGl0ZW0ubGVuZ3RoID09 IDQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gW2wsIDAsIGl0ZW1bMl0s IGl0ZW1bM11dOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg ICAgICByZXR1cm4gW2wsIDBdOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgY2FzZSAicyI6IGlmIChpdGVtLmxlbmd0aCA9PSA1KSB7CisgICAgICAg ICAgICAgICAgcmV0dXJuIFtsLCAxLCAxLCBpdGVtWzNdLCBpdGVtWzRdXTsK KyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5sZW5ndGggPT0gMykgewor ICAgICAgICAgICAgICAgIHJldHVybiBbbCwgMSwgMV07CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBbbCwgMV07Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZnVuY3Rpb24g ZXF1YWxpc2VUcmFuc2Zvcm0odDEsIHQyLCBnZXRCQm94KSB7CisgICAgICAg IHQyID0gU3RyKHQyKS5yZXBsYWNlKC9cLnszfXxcdTIwMjYvZywgdDEpOwor ICAgICAgICB0MSA9IFNuYXAucGFyc2VUcmFuc2Zvcm1TdHJpbmcodDEpIHx8 IFtdOworICAgICAgICB0MiA9IFNuYXAucGFyc2VUcmFuc2Zvcm1TdHJpbmco dDIpIHx8IFtdOworICAgICAgICB2YXIgbWF4bGVuZ3RoID0gTWF0aC5tYXgo dDEubGVuZ3RoLCB0Mi5sZW5ndGgpLAorICAgICAgICAgICAgZnJvbSA9IFtd LAorICAgICAgICAgICAgdG8gPSBbXSwKKyAgICAgICAgICAgIGkgPSAwLCBq LCBqaiwKKyAgICAgICAgICAgIHR0MSwgdHQyOworICAgICAgICBmb3IgKDsg aSA8IG1heGxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICB0dDEgPSB0MVtp XSB8fCBnZXRFbXB0eSh0MltpXSk7CisgICAgICAgICAgICB0dDIgPSB0Mltp XSB8fCBnZXRFbXB0eSh0dDEpOworICAgICAgICAgICAgaWYgKCh0dDFbMF0g IT0gdHQyWzBdKSB8fAorICAgICAgICAgICAgICAgICh0dDFbMF0udG9Mb3dl ckNhc2UoKSA9PSAiciIgJiYgKHR0MVsyXSAhPSB0dDJbMl0gfHwgdHQxWzNd ICE9IHR0MlszXSkpIHx8CisgICAgICAgICAgICAgICAgKHR0MVswXS50b0xv d2VyQ2FzZSgpID09ICJzIiAmJiAodHQxWzNdICE9IHR0MlszXSB8fCB0dDFb NF0gIT0gdHQyWzRdKSkKKyAgICAgICAgICAgICAgICApIHsKKyAgICAgICAg ICAgICAgICAgICAgdDEgPSBTbmFwLl8udHJhbnNmb3JtMm1hdHJpeCh0MSwg Z2V0QkJveCgpKTsKKyAgICAgICAgICAgICAgICAgICAgdDIgPSBTbmFwLl8u dHJhbnNmb3JtMm1hdHJpeCh0MiwgZ2V0QkJveCgpKTsKKyAgICAgICAgICAg ICAgICAgICAgZnJvbSA9IFtbIm0iLCB0MS5hLCB0MS5iLCB0MS5jLCB0MS5k LCB0MS5lLCB0MS5mXV07CisgICAgICAgICAgICAgICAgICAgIHRvID0gW1si bSIsIHQyLmEsIHQyLmIsIHQyLmMsIHQyLmQsIHQyLmUsIHQyLmZdXTsKKyAg ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICBmcm9tW2ldID0gW107CisgICAgICAgICAgICB0b1tpXSA9IFtd OworICAgICAgICAgICAgZm9yIChqID0gMCwgamogPSBNYXRoLm1heCh0dDEu bGVuZ3RoLCB0dDIubGVuZ3RoKTsgaiA8IGpqOyBqKyspIHsKKyAgICAgICAg ICAgICAgICBqIGluIHR0MSAmJiAoZnJvbVtpXVtqXSA9IHR0MVtqXSk7Cisg ICAgICAgICAgICAgICAgaiBpbiB0dDIgJiYgKHRvW2ldW2pdID0gdHQyW2pd KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g eworICAgICAgICAgICAgZnJvbTogcGF0aDJhcnJheShmcm9tKSwKKyAgICAg ICAgICAgIHRvOiBwYXRoMmFycmF5KHRvKSwKKyAgICAgICAgICAgIGY6IGdl dFBhdGgoZnJvbSkKKyAgICAgICAgfTsKKyAgICB9CisgICAgZnVuY3Rpb24g Z2V0TnVtYmVyKHZhbCkgeworICAgICAgICByZXR1cm4gdmFsOworICAgIH0K KyAgICBmdW5jdGlvbiBnZXRVbml0KHVuaXQpIHsKKyAgICAgICAgcmV0dXJu IGZ1bmN0aW9uICh2YWwpIHsKKyAgICAgICAgICAgIHJldHVybiArdmFsLnRv Rml4ZWQoMykgKyB1bml0OworICAgICAgICB9OworICAgIH0KKyAgICBmdW5j dGlvbiBnZXRWaWV3Qm94KHZhbCkgeworICAgICAgICByZXR1cm4gdmFsLmpv aW4oIiAiKTsKKyAgICB9CisgICAgZnVuY3Rpb24gZ2V0Q29sb3VyKGNscikg eworICAgICAgICByZXR1cm4gU25hcC5yZ2IoY2xyWzBdLCBjbHJbMV0sIGNs clsyXSk7CisgICAgfQorICAgIGZ1bmN0aW9uIGdldFBhdGgocGF0aCkgewor ICAgICAgICB2YXIgayA9IDAsIGksIGlpLCBqLCBqaiwgb3V0LCBhLCBiID0g W107CisgICAgICAgIGZvciAoaSA9IDAsIGlpID0gcGF0aC5sZW5ndGg7IGkg PCBpaTsgaSsrKSB7CisgICAgICAgICAgICBvdXQgPSAiWyI7CisgICAgICAg ICAgICBhID0gWyciJyArIHBhdGhbaV1bMF0gKyAnIiddOworICAgICAgICAg ICAgZm9yIChqID0gMSwgamogPSBwYXRoW2ldLmxlbmd0aDsgaiA8IGpqOyBq KyspIHsKKyAgICAgICAgICAgICAgICBhW2pdID0gInZhbFsiICsgKGsrKykg KyAiXSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXQgKz0gYSAr ICJdIjsKKyAgICAgICAgICAgIGJbaV0gPSBvdXQ7CisgICAgICAgIH0KKyAg ICAgICAgcmV0dXJuIEZ1bmN0aW9uKCJ2YWwiLCAicmV0dXJuIFNuYXAucGF0 aC50b1N0cmluZy5jYWxsKFsiICsgYiArICJdKSIpOworICAgIH0KKyAgICBm dW5jdGlvbiBwYXRoMmFycmF5KHBhdGgpIHsKKyAgICAgICAgdmFyIG91dCA9 IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBwYXRoLmxlbmd0 aDsgaSA8IGlpOyBpKyspIHsKKyAgICAgICAgICAgIGZvciAodmFyIGogPSAx LCBqaiA9IHBhdGhbaV0ubGVuZ3RoOyBqIDwgamo7IGorKykgeworICAgICAg ICAgICAgICAgIG91dC5wdXNoKHBhdGhbaV1bal0pOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgICAgIHJldHVybiBvdXQ7CisgICAgfQorICAg IGZ1bmN0aW9uIGlzTnVtZXJpYyhvYmopIHsKKyAgICAgICAgcmV0dXJuIGlz RmluaXRlKHBhcnNlRmxvYXQob2JqKSk7CisgICAgfQorICAgIGZ1bmN0aW9u IGFycmF5RXF1YWwoYXJyMSwgYXJyMikgeworICAgICAgICBpZiAoIVNuYXAu aXMoYXJyMSwgImFycmF5IikgfHwgIVNuYXAuaXMoYXJyMiwgImFycmF5Iikp IHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg ICAgICByZXR1cm4gYXJyMS50b1N0cmluZygpID09IGFycjIudG9TdHJpbmco KTsKKyAgICB9CisgICAgRWxlbWVudC5wcm90b3R5cGUuZXF1YWwgPSBmdW5j dGlvbiAobmFtZSwgYikgeworICAgICAgICByZXR1cm4gZXZlKCJzbmFwLnV0 aWwuZXF1YWwiLCB0aGlzLCBuYW1lLCBiKS5maXJzdERlZmluZWQoKTsKKyAg ICB9OworICAgIGV2ZS5vbigic25hcC51dGlsLmVxdWFsIiwgZnVuY3Rpb24g KG5hbWUsIGIpIHsKKyAgICAgICAgdmFyIEEsIEIsIGEgPSBTdHIodGhpcy5h dHRyKG5hbWUpIHx8ICIiKSwKKyAgICAgICAgICAgIGVsID0gdGhpczsKKyAg ICAgICAgaWYgKGlzTnVtZXJpYyhhKSAmJiBpc051bWVyaWMoYikpIHsKKyAg ICAgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICAgICAgZnJvbTogcGFy c2VGbG9hdChhKSwKKyAgICAgICAgICAgICAgICB0bzogcGFyc2VGbG9hdChi KSwKKyAgICAgICAgICAgICAgICBmOiBnZXROdW1iZXIKKyAgICAgICAgICAg IH07CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5hbWVzW25hbWVdID09ICJj b2xvdXIiKSB7CisgICAgICAgICAgICBBID0gU25hcC5jb2xvcihhKTsKKyAg ICAgICAgICAgIEIgPSBTbmFwLmNvbG9yKGIpOworICAgICAgICAgICAgcmV0 dXJuIHsKKyAgICAgICAgICAgICAgICBmcm9tOiBbQS5yLCBBLmcsIEEuYiwg QS5vcGFjaXR5XSwKKyAgICAgICAgICAgICAgICB0bzogW0IuciwgQi5nLCBC LmIsIEIub3BhY2l0eV0sCisgICAgICAgICAgICAgICAgZjogZ2V0Q29sb3Vy CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGlmIChuYW1l ID09ICJ2aWV3Qm94IikgeworICAgICAgICAgICAgQSA9IHRoaXMuYXR0cihu YW1lKS52Yi5zcGxpdCgiICIpLm1hcChOdW1iZXIpOworICAgICAgICAgICAg QiA9IGIuc3BsaXQoIiAiKS5tYXAoTnVtYmVyKTsKKyAgICAgICAgICAgIHJl dHVybiB7CisgICAgICAgICAgICAgICAgZnJvbTogQSwKKyAgICAgICAgICAg ICAgICB0bzogQiwKKyAgICAgICAgICAgICAgICBmOiBnZXRWaWV3Qm94Cisg ICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIGlmIChuYW1lID09 ICJ0cmFuc2Zvcm0iIHx8IG5hbWUgPT0gImdyYWRpZW50VHJhbnNmb3JtIiB8 fCBuYW1lID09ICJwYXR0ZXJuVHJhbnNmb3JtIikgeworICAgICAgICAgICAg aWYgKGIgaW5zdGFuY2VvZiBTbmFwLk1hdHJpeCkgeworICAgICAgICAgICAg ICAgIGIgPSBiLnRvVHJhbnNmb3JtU3RyaW5nKCk7CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBpZiAoIVNuYXAuXy5yZ1RyYW5zZm9ybS50ZXN0KGIp KSB7CisgICAgICAgICAgICAgICAgYiA9IFNuYXAuXy5zdmdUcmFuc2Zvcm0y c3RyaW5nKGIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu IGVxdWFsaXNlVHJhbnNmb3JtKGEsIGIsIGZ1bmN0aW9uICgpIHsKKyAgICAg ICAgICAgICAgICByZXR1cm4gZWwuZ2V0QkJveCgxKTsKKyAgICAgICAgICAg IH0pOworICAgICAgICB9CisgICAgICAgIGlmIChuYW1lID09ICJkIiB8fCBu YW1lID09ICJwYXRoIikgeworICAgICAgICAgICAgQSA9IFNuYXAucGF0aC50 b0N1YmljKGEsIGIpOworICAgICAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg ICAgICAgICBmcm9tOiBwYXRoMmFycmF5KEFbMF0pLAorICAgICAgICAgICAg ICAgIHRvOiBwYXRoMmFycmF5KEFbMV0pLAorICAgICAgICAgICAgICAgIGY6 IGdldFBhdGgoQVswXSkKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAg ICAgICAgaWYgKG5hbWUgPT0gInBvaW50cyIpIHsKKyAgICAgICAgICAgIEEg PSBTdHIoYSkuc3BsaXQoU25hcC5fLnNlcGFyYXRvcik7CisgICAgICAgICAg ICBCID0gU3RyKGIpLnNwbGl0KFNuYXAuXy5zZXBhcmF0b3IpOworICAgICAg ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgICAgICBmcm9tOiBBLAorICAg ICAgICAgICAgICAgIHRvOiBCLAorICAgICAgICAgICAgICAgIGY6IGZ1bmN0 aW9uICh2YWwpIHsgcmV0dXJuIHZhbDsgfQorICAgICAgICAgICAgfTsKKyAg ICAgICAgfQorICAgICAgICB2YXIgYVVuaXQgPSBhLm1hdGNoKHJlVW5pdCks CisgICAgICAgICAgICBiVW5pdCA9IFN0cihiKS5tYXRjaChyZVVuaXQpOwor ICAgICAgICBpZiAoYVVuaXQgJiYgYXJyYXlFcXVhbChhVW5pdCwgYlVuaXQp KSB7CisgICAgICAgICAgICByZXR1cm4geworICAgICAgICAgICAgICAgIGZy b206IHBhcnNlRmxvYXQoYSksCisgICAgICAgICAgICAgICAgdG86IHBhcnNl RmxvYXQoYiksCisgICAgICAgICAgICAgICAgZjogZ2V0VW5pdChhVW5pdCkK KyAgICAgICAgICAgIH07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICByZXR1cm4geworICAgICAgICAgICAgICAgIGZyb206IHRoaXMuYXNQWChu YW1lKSwKKyAgICAgICAgICAgICAgICB0bzogdGhpcy5hc1BYKG5hbWUsIGIp LAorICAgICAgICAgICAgICAgIGY6IGdldE51bWJlcgorICAgICAgICAgICAg fTsKKyAgICAgICAgfQorICAgIH0pOworfSk7CisKKy8vIENvcHlyaWdodCAo YykgMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hl IExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlv dSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ug d2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBv ZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vIGh0dHA6Ly93d3cuYXBhY2hlLm9y Zy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJl ZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywg c29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlz IGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VU IFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVy IGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3Ig dGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBh bmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorU25hcC5w bHVnaW4oZnVuY3Rpb24gKFNuYXAsIEVsZW1lbnQsIFBhcGVyLCBnbG9iKSB7 CisgICAgdmFyIGVscHJvdG8gPSBFbGVtZW50LnByb3RvdHlwZSwKKyAgICBo YXMgPSAiaGFzT3duUHJvcGVydHkiLAorICAgIHN1cHBvcnRzVG91Y2ggPSAi Y3JlYXRlVG91Y2giIGluIGdsb2IuZG9jLAorICAgIGV2ZW50cyA9IFsKKyAg ICAgICAgImNsaWNrIiwgImRibGNsaWNrIiwgIm1vdXNlZG93biIsICJtb3Vz ZW1vdmUiLCAibW91c2VvdXQiLAorICAgICAgICAibW91c2VvdmVyIiwgIm1v dXNldXAiLCAidG91Y2hzdGFydCIsICJ0b3VjaG1vdmUiLCAidG91Y2hlbmQi LAorICAgICAgICAidG91Y2hjYW5jZWwiCisgICAgXSwKKyAgICB0b3VjaE1h cCA9IHsKKyAgICAgICAgbW91c2Vkb3duOiAidG91Y2hzdGFydCIsCisgICAg ICAgIG1vdXNlbW92ZTogInRvdWNobW92ZSIsCisgICAgICAgIG1vdXNldXA6 ICJ0b3VjaGVuZCIKKyAgICB9LAorICAgIGdldFNjcm9sbCA9IGZ1bmN0aW9u ICh4eSwgZWwpIHsKKyAgICAgICAgdmFyIG5hbWUgPSB4eSA9PSAieSIgPyAi c2Nyb2xsVG9wIiA6ICJzY3JvbGxMZWZ0IiwKKyAgICAgICAgICAgIGRvYyA9 IGVsICYmIGVsLm5vZGUgPyBlbC5ub2RlLm93bmVyRG9jdW1lbnQgOiBnbG9i LmRvYzsKKyAgICAgICAgcmV0dXJuIGRvY1tuYW1lIGluIGRvYy5kb2N1bWVu dEVsZW1lbnQgPyAiZG9jdW1lbnRFbGVtZW50IiA6ICJib2R5Il1bbmFtZV07 CisgICAgfSwKKyAgICBwcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uICgpIHsK KyAgICAgICAgdGhpcy5yZXR1cm5WYWx1ZSA9IGZhbHNlOworICAgIH0sCisg ICAgcHJldmVudFRvdWNoID0gZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1 cm4gdGhpcy5vcmlnaW5hbEV2ZW50LnByZXZlbnREZWZhdWx0KCk7CisgICAg fSwKKyAgICBzdG9wUHJvcGFnYXRpb24gPSBmdW5jdGlvbiAoKSB7CisgICAg ICAgIHRoaXMuY2FuY2VsQnViYmxlID0gdHJ1ZTsKKyAgICB9LAorICAgIHN0 b3BUb3VjaCA9IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu b3JpZ2luYWxFdmVudC5zdG9wUHJvcGFnYXRpb24oKTsKKyAgICB9LAorICAg IGFkZEV2ZW50ID0gZnVuY3Rpb24gKG9iaiwgdHlwZSwgZm4sIGVsZW1lbnQp IHsKKyAgICAgICAgdmFyIHJlYWxOYW1lID0gc3VwcG9ydHNUb3VjaCAmJiB0 b3VjaE1hcFt0eXBlXSA/IHRvdWNoTWFwW3R5cGVdIDogdHlwZSwKKyAgICAg ICAgICAgIGYgPSBmdW5jdGlvbiAoZSkgeworICAgICAgICAgICAgICAgIHZh ciBzY3JvbGxZID0gZ2V0U2Nyb2xsKCJ5IiwgZWxlbWVudCksCisgICAgICAg ICAgICAgICAgICAgIHNjcm9sbFggPSBnZXRTY3JvbGwoIngiLCBlbGVtZW50 KTsKKyAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydHNUb3VjaCAmJiB0b3Vj aE1hcFtoYXNdKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAo dmFyIGkgPSAwLCBpaSA9IGUudGFyZ2V0VG91Y2hlcyAmJiBlLnRhcmdldFRv dWNoZXMubGVuZ3RoOyBpIDwgaWk7IGkrKykgeworICAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGUudGFyZ2V0VG91Y2hlc1tpXS50YXJnZXQgPT0gb2Jq IHx8IG9iai5jb250YWlucyhlLnRhcmdldFRvdWNoZXNbaV0udGFyZ2V0KSkg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvbGRlID0gZTsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlID0gZS50YXJnZXRUb3Vj aGVzW2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUub3JpZ2lu YWxFdmVudCA9IG9sZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZS5wcmV2ZW50RGVmYXVsdCA9IHByZXZlbnRUb3VjaDsKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbiA9IHN0b3BUb3Vj aDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YXIgeCA9IGUu Y2xpZW50WCArIHNjcm9sbFgsCisgICAgICAgICAgICAgICAgICAgIHkgPSBl LmNsaWVudFkgKyBzY3JvbGxZOworICAgICAgICAgICAgICAgIHJldHVybiBm bi5jYWxsKGVsZW1lbnQsIGUsIHgsIHkpOworICAgICAgICAgICAgfTsKKwor ICAgICAgICBpZiAodHlwZSAhPT0gcmVhbE5hbWUpIHsKKyAgICAgICAgICAg IG9iai5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGYsIGZhbHNlKTsKKyAgICAg ICAgfQorCisgICAgICAgIG9iai5hZGRFdmVudExpc3RlbmVyKHJlYWxOYW1l LCBmLCBmYWxzZSk7CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsK KyAgICAgICAgICAgIGlmICh0eXBlICE9PSByZWFsTmFtZSkgeworICAgICAg ICAgICAgICAgIG9iai5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGYsIGZh bHNlKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb2JqLnJlbW92 ZUV2ZW50TGlzdGVuZXIocmVhbE5hbWUsIGYsIGZhbHNlKTsKKyAgICAgICAg ICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworICAgIH0sCisgICAgZHJh ZyA9IFtdLAorICAgIGRyYWdNb3ZlID0gZnVuY3Rpb24gKGUpIHsKKyAgICAg ICAgdmFyIHggPSBlLmNsaWVudFgsCisgICAgICAgICAgICB5ID0gZS5jbGll bnRZLAorICAgICAgICAgICAgc2Nyb2xsWSA9IGdldFNjcm9sbCgieSIpLAor ICAgICAgICAgICAgc2Nyb2xsWCA9IGdldFNjcm9sbCgieCIpLAorICAgICAg ICAgICAgZHJhZ2ksCisgICAgICAgICAgICBqID0gZHJhZy5sZW5ndGg7Cisg ICAgICAgIHdoaWxlIChqLS0pIHsKKyAgICAgICAgICAgIGRyYWdpID0gZHJh Z1tqXTsKKyAgICAgICAgICAgIGlmIChzdXBwb3J0c1RvdWNoKSB7CisgICAg ICAgICAgICAgICAgdmFyIGkgPSBlLnRvdWNoZXMgJiYgZS50b3VjaGVzLmxl bmd0aCwKKyAgICAgICAgICAgICAgICAgICAgdG91Y2g7CisgICAgICAgICAg ICAgICAgd2hpbGUgKGktLSkgeworICAgICAgICAgICAgICAgICAgICB0b3Vj aCA9IGUudG91Y2hlc1tpXTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRv dWNoLmlkZW50aWZpZXIgPT0gZHJhZ2kuZWwuX2RyYWcuaWQgfHwgZHJhZ2ku ZWwubm9kZS5jb250YWlucyh0b3VjaC50YXJnZXQpKSB7CisgICAgICAgICAg ICAgICAgICAgICAgICB4ID0gdG91Y2guY2xpZW50WDsKKyAgICAgICAgICAg ICAgICAgICAgICAgIHkgPSB0b3VjaC5jbGllbnRZOworICAgICAgICAgICAg ICAgICAgICAgICAgKGUub3JpZ2luYWxFdmVudCA/IGUub3JpZ2luYWxFdmVu dCA6IGUpLnByZXZlbnREZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg ICAgZS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgdmFyIG5vZGUgPSBkcmFnaS5lbC5ub2RlLAorICAgICAgICAgICAg ICAgIG8sCisgICAgICAgICAgICAgICAgbmV4dCA9IG5vZGUubmV4dFNpYmxp bmcsCisgICAgICAgICAgICAgICAgcGFyZW50ID0gbm9kZS5wYXJlbnROb2Rl LAorICAgICAgICAgICAgICAgIGRpc3BsYXkgPSBub2RlLnN0eWxlLmRpc3Bs YXk7CisgICAgICAgICAgICAvLyBnbG9iLndpbi5vcGVyYSAmJiBwYXJlbnQu cmVtb3ZlQ2hpbGQobm9kZSk7CisgICAgICAgICAgICAvLyBub2RlLnN0eWxl LmRpc3BsYXkgPSAibm9uZSI7CisgICAgICAgICAgICAvLyBvID0gZHJhZ2ku ZWwucGFwZXIuZ2V0RWxlbWVudEJ5UG9pbnQoeCwgeSk7CisgICAgICAgICAg ICAvLyBub2RlLnN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5OworICAgICAgICAg ICAgLy8gZ2xvYi53aW4ub3BlcmEgJiYgKG5leHQgPyBwYXJlbnQuaW5zZXJ0 QmVmb3JlKG5vZGUsIG5leHQpIDogcGFyZW50LmFwcGVuZENoaWxkKG5vZGUp KTsKKyAgICAgICAgICAgIC8vIG8gJiYgZXZlKCJzbmFwLmRyYWcub3Zlci4i ICsgZHJhZ2kuZWwuaWQsIGRyYWdpLmVsLCBvKTsKKyAgICAgICAgICAgIHgg Kz0gc2Nyb2xsWDsKKyAgICAgICAgICAgIHkgKz0gc2Nyb2xsWTsKKyAgICAg ICAgICAgIGV2ZSgic25hcC5kcmFnLm1vdmUuIiArIGRyYWdpLmVsLmlkLCBk cmFnaS5tb3ZlX3Njb3BlIHx8IGRyYWdpLmVsLCB4IC0gZHJhZ2kuZWwuX2Ry YWcueCwgeSAtIGRyYWdpLmVsLl9kcmFnLnksIHgsIHksIGUpOworICAgICAg ICB9CisgICAgfSwKKyAgICBkcmFnVXAgPSBmdW5jdGlvbiAoZSkgeworICAg ICAgICBTbmFwLnVubW91c2Vtb3ZlKGRyYWdNb3ZlKS51bm1vdXNldXAoZHJh Z1VwKTsKKyAgICAgICAgdmFyIGkgPSBkcmFnLmxlbmd0aCwKKyAgICAgICAg ICAgIGRyYWdpOworICAgICAgICB3aGlsZSAoaS0tKSB7CisgICAgICAgICAg ICBkcmFnaSA9IGRyYWdbaV07CisgICAgICAgICAgICBkcmFnaS5lbC5fZHJh ZyA9IHt9OworICAgICAgICAgICAgZXZlKCJzbmFwLmRyYWcuZW5kLiIgKyBk cmFnaS5lbC5pZCwgZHJhZ2kuZW5kX3Njb3BlIHx8IGRyYWdpLnN0YXJ0X3Nj b3BlIHx8IGRyYWdpLm1vdmVfc2NvcGUgfHwgZHJhZ2kuZWwsIGUpOworICAg ICAgICAgICAgZXZlLm9mZigic25hcC5kcmFnLiouIiArIGRyYWdpLmVsLmlk KTsKKyAgICAgICAgfQorICAgICAgICBkcmFnID0gW107CisgICAgfTsKKyAg ICAvKlwKKyAgICAgKiBFbGVtZW50LmNsaWNrCisgICAgIFsgbWV0aG9kIF0K KyAgICAgKioKKyAgICAgKiBBZGRzIGEgY2xpY2sgZXZlbnQgaGFuZGxlciB0 byB0aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5k bGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAor ICAgIFwqLworICAgIC8qXAorICAgICAqIEVsZW1lbnQudW5jbGljaworICAg ICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmVtb3ZlcyBhIGNsaWNr IGV2ZW50IGhhbmRsZXIgZnJvbSB0aGUgZWxlbWVudAorICAgICAtIGhhbmRs ZXIgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAo b2JqZWN0KSBARWxlbWVudAorICAgIFwqLworCisgICAgLypcCisgICAgICog RWxlbWVudC5kYmxjbGljaworICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogQWRkcyBhIGRvdWJsZSBjbGljayBldmVudCBoYW5kbGVyIHRvIHRo ZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAoZnVuY3Rpb24pIGhhbmRsZXIg Zm9yIHRoZSBldmVudAorICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAg XCovCisgICAgLypcCisgICAgICogRWxlbWVudC51bmRibGNsaWNrCisgICAg IFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZW1vdmVzIGEgZG91Ymxl IGNsaWNrIGV2ZW50IGhhbmRsZXIgZnJvbSB0aGUgZWxlbWVudAorICAgICAt IGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZlbnQKKyAg ICAgPSAob2JqZWN0KSBARWxlbWVudAorICAgIFwqLworCisgICAgLypcCisg ICAgICogRWxlbWVudC5tb3VzZWRvd24KKyAgICAgWyBtZXRob2QgXQorICAg ICAqKgorICAgICAqIEFkZHMgYSBtb3VzZWRvd24gZXZlbnQgaGFuZGxlciB0 byB0aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5k bGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAor ICAgIFwqLworICAgIC8qXAorICAgICAqIEVsZW1lbnQudW5tb3VzZWRvd24K KyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJlbW92ZXMgYSBt b3VzZWRvd24gZXZlbnQgaGFuZGxlciBmcm9tIHRoZSBlbGVtZW50CisgICAg IC0gaGFuZGxlciAoZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAor ICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgXCovCisKKyAgICAvKlwK KyAgICAgKiBFbGVtZW50Lm1vdXNlbW92ZQorICAgICBbIG1ldGhvZCBdCisg ICAgICoqCisgICAgICogQWRkcyBhIG1vdXNlbW92ZSBldmVudCBoYW5kbGVy IHRvIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAoZnVuY3Rpb24pIGhh bmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmplY3QpIEBFbGVtZW50 CisgICAgXCovCisgICAgLypcCisgICAgICogRWxlbWVudC51bm1vdXNlbW92 ZQorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmVtb3ZlcyBh IG1vdXNlbW92ZSBldmVudCBoYW5kbGVyIGZyb20gdGhlIGVsZW1lbnQKKyAg ICAgLSBoYW5kbGVyIChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50 CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKworICAgIC8q XAorICAgICAqIEVsZW1lbnQubW91c2VvdXQKKyAgICAgWyBtZXRob2QgXQor ICAgICAqKgorICAgICAqIEFkZHMgYSBtb3VzZW91dCBldmVudCBoYW5kbGVy IHRvIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAoZnVuY3Rpb24pIGhh bmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmplY3QpIEBFbGVtZW50 CisgICAgXCovCisgICAgLypcCisgICAgICogRWxlbWVudC51bm1vdXNlb3V0 CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZW1vdmVzIGEg bW91c2VvdXQgZXZlbnQgaGFuZGxlciBmcm9tIHRoZSBlbGVtZW50CisgICAg IC0gaGFuZGxlciAoZnVuY3Rpb24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAor ICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgXCovCisKKyAgICAvKlwK KyAgICAgKiBFbGVtZW50Lm1vdXNlb3ZlcgorICAgICBbIG1ldGhvZCBdCisg ICAgICoqCisgICAgICogQWRkcyBhIG1vdXNlb3ZlciBldmVudCBoYW5kbGVy IHRvIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAoZnVuY3Rpb24pIGhh bmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmplY3QpIEBFbGVtZW50 CisgICAgXCovCisgICAgLypcCisgICAgICogRWxlbWVudC51bm1vdXNlb3Zl cgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmVtb3ZlcyBh IG1vdXNlb3ZlciBldmVudCBoYW5kbGVyIGZyb20gdGhlIGVsZW1lbnQKKyAg ICAgLSBoYW5kbGVyIChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50 CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKworICAgIC8q XAorICAgICAqIEVsZW1lbnQubW91c2V1cAorICAgICBbIG1ldGhvZCBdCisg ICAgICoqCisgICAgICogQWRkcyBhIG1vdXNldXAgZXZlbnQgaGFuZGxlciB0 byB0aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5k bGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAor ICAgIFwqLworICAgIC8qXAorICAgICAqIEVsZW1lbnQudW5tb3VzZXVwCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZW1vdmVzIGEgbW91 c2V1cCBldmVudCBoYW5kbGVyIGZyb20gdGhlIGVsZW1lbnQKKyAgICAgLSBo YW5kbGVyIChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAg ID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKworICAgIC8qXAorICAg ICAqIEVsZW1lbnQudG91Y2hzdGFydAorICAgICBbIG1ldGhvZCBdCisgICAg ICoqCisgICAgICogQWRkcyBhIHRvdWNoc3RhcnQgZXZlbnQgaGFuZGxlciB0 byB0aGUgZWxlbWVudAorICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5k bGVyIGZvciB0aGUgZXZlbnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAor ICAgIFwqLworICAgIC8qXAorICAgICAqIEVsZW1lbnQudW50b3VjaHN0YXJ0 CisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZW1vdmVzIGEg dG91Y2hzdGFydCBldmVudCBoYW5kbGVyIGZyb20gdGhlIGVsZW1lbnQKKyAg ICAgLSBoYW5kbGVyIChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50 CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKworICAgIC8q XAorICAgICAqIEVsZW1lbnQudG91Y2htb3ZlCisgICAgIFsgbWV0aG9kIF0K KyAgICAgKioKKyAgICAgKiBBZGRzIGEgdG91Y2htb3ZlIGV2ZW50IGhhbmRs ZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5jdGlvbikg aGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkgQEVsZW1l bnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnVudG91Y2ht b3ZlCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBSZW1vdmVz IGEgdG91Y2htb3ZlIGV2ZW50IGhhbmRsZXIgZnJvbSB0aGUgZWxlbWVudAor ICAgICAtIGhhbmRsZXIgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciB0aGUgZXZl bnQKKyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAgIFwqLworCisgICAg LypcCisgICAgICogRWxlbWVudC50b3VjaGVuZAorICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogQWRkcyBhIHRvdWNoZW5kIGV2ZW50IGhhbmRs ZXIgdG8gdGhlIGVsZW1lbnQKKyAgICAgLSBoYW5kbGVyIChmdW5jdGlvbikg aGFuZGxlciBmb3IgdGhlIGV2ZW50CisgICAgID0gKG9iamVjdCkgQEVsZW1l bnQKKyAgICBcKi8KKyAgICAvKlwKKyAgICAgKiBFbGVtZW50LnVudG91Y2hl bmQKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAgICAqIFJlbW92ZXMg YSB0b3VjaGVuZCBldmVudCBoYW5kbGVyIGZyb20gdGhlIGVsZW1lbnQKKyAg ICAgLSBoYW5kbGVyIChmdW5jdGlvbikgaGFuZGxlciBmb3IgdGhlIGV2ZW50 CisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICBcKi8KKworICAgIC8q XAorICAgICAqIEVsZW1lbnQudG91Y2hjYW5jZWwKKyAgICAgWyBtZXRob2Qg XQorICAgICAqKgorICAgICAqIEFkZHMgYSB0b3VjaGNhbmNlbCBldmVudCBo YW5kbGVyIHRvIHRoZSBlbGVtZW50CisgICAgIC0gaGFuZGxlciAoZnVuY3Rp b24pIGhhbmRsZXIgZm9yIHRoZSBldmVudAorICAgICA9IChvYmplY3QpIEBF bGVtZW50CisgICAgXCovCisgICAgLypcCisgICAgICogRWxlbWVudC51bnRv dWNoY2FuY2VsCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBS ZW1vdmVzIGEgdG91Y2hjYW5jZWwgZXZlbnQgaGFuZGxlciBmcm9tIHRoZSBl bGVtZW50CisgICAgIC0gaGFuZGxlciAoZnVuY3Rpb24pIGhhbmRsZXIgZm9y IHRoZSBldmVudAorICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgXCov CisgICAgZm9yICh2YXIgaSA9IGV2ZW50cy5sZW5ndGg7IGktLTspIHsKKyAg ICAgICAgKGZ1bmN0aW9uIChldmVudE5hbWUpIHsKKyAgICAgICAgICAgIFNu YXBbZXZlbnROYW1lXSA9IGVscHJvdG9bZXZlbnROYW1lXSA9IGZ1bmN0aW9u IChmbiwgc2NvcGUpIHsKKyAgICAgICAgICAgICAgICBpZiAoU25hcC5pcyhm biwgImZ1bmN0aW9uIikpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5l dmVudHMgPSB0aGlzLmV2ZW50cyB8fCBbXTsKKyAgICAgICAgICAgICAgICAg ICAgdGhpcy5ldmVudHMucHVzaCh7CisgICAgICAgICAgICAgICAgICAgICAg ICBuYW1lOiBldmVudE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICBm OiBmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuYmluZDogYWRkRXZl bnQodGhpcy5ub2RlIHx8IGRvY3VtZW50LCBldmVudE5hbWUsIGZuLCBzY29w ZSB8fCB0aGlzKQorICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmb3IgKHZh ciBpID0gMCwgaWkgPSB0aGlzLmV2ZW50cy5sZW5ndGg7IGkgPCBpaTsgaSsr KSBpZiAodGhpcy5ldmVudHNbaV0ubmFtZSA9PSBldmVudE5hbWUpIHsKKyAg ICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGhpcy5ldmVudHNbaV0uZi5jYWxsKHRoaXMpOworICAg ICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge30KKyAgICAgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgICAgIH07CisgICAgICAgICAg ICBTbmFwWyJ1biIgKyBldmVudE5hbWVdID0KKyAgICAgICAgICAgIGVscHJv dG9bInVuIiArIGV2ZW50TmFtZV0gPSBmdW5jdGlvbiAoZm4pIHsKKyAgICAg ICAgICAgICAgICB2YXIgZXZlbnRzID0gdGhpcy5ldmVudHMgfHwgW10sCisg ICAgICAgICAgICAgICAgICAgIGwgPSBldmVudHMubGVuZ3RoOworICAgICAg ICAgICAgICAgIHdoaWxlIChsLS0pIGlmIChldmVudHNbbF0ubmFtZSA9PSBl dmVudE5hbWUgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo ZXZlbnRzW2xdLmYgPT0gZm4gfHwgIWZuKSkgeworICAgICAgICAgICAgICAg ICAgICBldmVudHNbbF0udW5iaW5kKCk7CisgICAgICAgICAgICAgICAgICAg IGV2ZW50cy5zcGxpY2UobCwgMSk7CisgICAgICAgICAgICAgICAgICAgICFl dmVudHMubGVuZ3RoICYmIGRlbGV0ZSB0aGlzLmV2ZW50czsKKyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICAgICAgfTsK KyAgICAgICAgfSkoZXZlbnRzW2ldKTsKKyAgICB9CisgICAgLypcCisgICAg ICogRWxlbWVudC5ob3ZlcgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisg ICAgICogQWRkcyBob3ZlciBldmVudCBoYW5kbGVycyB0byB0aGUgZWxlbWVu dAorICAgICAtIGZfaW4gKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciBob3ZlciBp bgorICAgICAtIGZfb3V0IChmdW5jdGlvbikgaGFuZGxlciBmb3IgaG92ZXIg b3V0CisgICAgIC0gaWNvbnRleHQgKG9iamVjdCkgI29wdGlvbmFsIGNvbnRl eHQgZm9yIGhvdmVyIGluIGhhbmRsZXIKKyAgICAgLSBvY29udGV4dCAob2Jq ZWN0KSAjb3B0aW9uYWwgY29udGV4dCBmb3IgaG92ZXIgb3V0IGhhbmRsZXIK KyAgICAgPSAob2JqZWN0KSBARWxlbWVudAorICAgIFwqLworICAgIGVscHJv dG8uaG92ZXIgPSBmdW5jdGlvbiAoZl9pbiwgZl9vdXQsIHNjb3BlX2luLCBz Y29wZV9vdXQpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMubW91c2VvdmVyKGZf aW4sIHNjb3BlX2luKS5tb3VzZW91dChmX291dCwgc2NvcGVfb3V0IHx8IHNj b3BlX2luKTsKKyAgICB9OworICAgIC8qXAorICAgICAqIEVsZW1lbnQudW5o b3ZlcgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmVtb3Zl cyBob3ZlciBldmVudCBoYW5kbGVycyBmcm9tIHRoZSBlbGVtZW50CisgICAg IC0gZl9pbiAoZnVuY3Rpb24pIGhhbmRsZXIgZm9yIGhvdmVyIGluCisgICAg IC0gZl9vdXQgKGZ1bmN0aW9uKSBoYW5kbGVyIGZvciBob3ZlciBvdXQKKyAg ICAgPSAob2JqZWN0KSBARWxlbWVudAorICAgIFwqLworICAgIGVscHJvdG8u dW5ob3ZlciA9IGZ1bmN0aW9uIChmX2luLCBmX291dCkgeworICAgICAgICBy ZXR1cm4gdGhpcy51bm1vdXNlb3ZlcihmX2luKS51bm1vdXNlb3V0KGZfb3V0 KTsKKyAgICB9OworICAgIHZhciBkcmFnZ2FibGUgPSBbXTsKKyAgICAvLyBT SUVSUkEgdW5jbGVhciB3aGF0IF9jb250ZXh0XyByZWZlcnMgdG8gZm9yIHN0 YXJ0aW5nLCBlbmRpbmcsIG1vdmluZyB0aGUgZHJhZyBnZXN0dXJlLgorICAg IC8vIFNJRVJSQSBFbGVtZW50LmRyYWcoKTogX3ggcG9zaXRpb24gb2YgdGhl IG1vdXNlXzogV2hlcmUgYXJlIHRoZSB4L3kgdmFsdWVzIG9mZnNldCBmcm9t PworICAgIC8vIFNJRVJSQSBFbGVtZW50LmRyYWcoKTogbXVjaCBvZiB0aGlz IG1lbWJlcidzIGRvYyBhcHBlYXJzIHRvIGJlIGR1cGxpY2F0ZWQgZm9yIHNv bWUgcmVhc29uLgorICAgIC8vIFNJRVJSQSBVbmNsZWFyIGFib3V0IHRoaXMg c2VudGVuY2U6IF9BZGRpdGlvbmFsbHkgZm9sbG93aW5nIGRyYWcgZXZlbnRz IHdpbGwgYmUgdHJpZ2dlcmVkOiBkcmFnLnN0YXJ0LjxpZD4gb24gc3RhcnQs IGRyYWcuZW5kLjxpZD4gb24gZW5kIGFuZCBkcmFnLm1vdmUuPGlkPiBvbiBl dmVyeSBtb3ZlLl8gSXMgdGhlcmUgYSBnbG9iYWwgX2RyYWdfIG9iamVjdCB0 byB3aGljaCB5b3UgY2FuIGFzc2lnbiBoYW5kbGVycyBrZXllZCBieSBhbiBl bGVtZW50J3MgSUQ/CisgICAgLypcCisgICAgICogRWxlbWVudC5kcmFnCisg ICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAgKiBBZGRzIGV2ZW50IGhh bmRsZXJzIGZvciBhbiBlbGVtZW50J3MgZHJhZyBnZXN0dXJlCisgICAgICoq CisgICAgIC0gb25tb3ZlIChmdW5jdGlvbikgaGFuZGxlciBmb3IgbW92aW5n CisgICAgIC0gb25zdGFydCAoZnVuY3Rpb24pIGhhbmRsZXIgZm9yIGRyYWcg c3RhcnQKKyAgICAgLSBvbmVuZCAoZnVuY3Rpb24pIGhhbmRsZXIgZm9yIGRy YWcgZW5kCisgICAgIC0gbWNvbnRleHQgKG9iamVjdCkgI29wdGlvbmFsIGNv bnRleHQgZm9yIG1vdmluZyBoYW5kbGVyCisgICAgIC0gc2NvbnRleHQgKG9i amVjdCkgI29wdGlvbmFsIGNvbnRleHQgZm9yIGRyYWcgc3RhcnQgaGFuZGxl cgorICAgICAtIGVjb250ZXh0IChvYmplY3QpICNvcHRpb25hbCBjb250ZXh0 IGZvciBkcmFnIGVuZCBoYW5kbGVyCisgICAgICogQWRkaXRpb25hbHkgZm9s bG93aW5nIGBkcmFnYCBldmVudHMgYXJlIHRyaWdnZXJlZDogYGRyYWcuc3Rh cnQuPGlkPmAgb24gc3RhcnQsCisgICAgICogYGRyYWcuZW5kLjxpZD5gIG9u IGVuZCBhbmQgYGRyYWcubW92ZS48aWQ+YCBvbiBldmVyeSBtb3ZlLiBXaGVu IGVsZW1lbnQgaXMgZHJhZ2dlZCBvdmVyIGFub3RoZXIgZWxlbWVudAorICAg ICAqIGBkcmFnLm92ZXIuPGlkPmAgZmlyZXMgYXMgd2VsbC4KKyAgICAgKgor ICAgICAqIFN0YXJ0IGV2ZW50IGFuZCBzdGFydCBoYW5kbGVyIGFyZSBjYWxs ZWQgaW4gc3BlY2lmaWVkIGNvbnRleHQgb3IgaW4gY29udGV4dCBvZiB0aGUg ZWxlbWVudCB3aXRoIGZvbGxvd2luZyBwYXJhbWV0ZXJzOgorICAgICBvIHgg KG51bWJlcikgeCBwb3NpdGlvbiBvZiB0aGUgbW91c2UKKyAgICAgbyB5IChu dW1iZXIpIHkgcG9zaXRpb24gb2YgdGhlIG1vdXNlCisgICAgIG8gZXZlbnQg KG9iamVjdCkgRE9NIGV2ZW50IG9iamVjdAorICAgICAqIE1vdmUgZXZlbnQg YW5kIG1vdmUgaGFuZGxlciBhcmUgY2FsbGVkIGluIHNwZWNpZmllZCBjb250 ZXh0IG9yIGluIGNvbnRleHQgb2YgdGhlIGVsZW1lbnQgd2l0aCBmb2xsb3dp bmcgcGFyYW1ldGVyczoKKyAgICAgbyBkeCAobnVtYmVyKSBzaGlmdCBieSB4 IGZyb20gdGhlIHN0YXJ0IHBvaW50CisgICAgIG8gZHkgKG51bWJlcikgc2hp ZnQgYnkgeSBmcm9tIHRoZSBzdGFydCBwb2ludAorICAgICBvIHggKG51bWJl cikgeCBwb3NpdGlvbiBvZiB0aGUgbW91c2UKKyAgICAgbyB5IChudW1iZXIp IHkgcG9zaXRpb24gb2YgdGhlIG1vdXNlCisgICAgIG8gZXZlbnQgKG9iamVj dCkgRE9NIGV2ZW50IG9iamVjdAorICAgICAqIEVuZCBldmVudCBhbmQgZW5k IGhhbmRsZXIgYXJlIGNhbGxlZCBpbiBzcGVjaWZpZWQgY29udGV4dCBvciBp biBjb250ZXh0IG9mIHRoZSBlbGVtZW50IHdpdGggZm9sbG93aW5nIHBhcmFt ZXRlcnM6CisgICAgIG8gZXZlbnQgKG9iamVjdCkgRE9NIGV2ZW50IG9iamVj dAorICAgICA9IChvYmplY3QpIEBFbGVtZW50CisgICAgXCovCisgICAgZWxw cm90by5kcmFnID0gZnVuY3Rpb24gKG9ubW92ZSwgb25zdGFydCwgb25lbmQs IG1vdmVfc2NvcGUsIHN0YXJ0X3Njb3BlLCBlbmRfc2NvcGUpIHsKKyAgICAg ICAgdmFyIGVsID0gdGhpczsKKyAgICAgICAgaWYgKCFhcmd1bWVudHMubGVu Z3RoKSB7CisgICAgICAgICAgICB2YXIgb3JpZ1RyYW5zZm9ybTsKKyAgICAg ICAgICAgIHJldHVybiBlbC5kcmFnKGZ1bmN0aW9uIChkeCwgZHkpIHsKKyAg ICAgICAgICAgICAgICB0aGlzLmF0dHIoeworICAgICAgICAgICAgICAgICAg ICB0cmFuc2Zvcm06IG9yaWdUcmFuc2Zvcm0gKyAob3JpZ1RyYW5zZm9ybSA/ ICJUIiA6ICJ0IikgKyBbZHgsIGR5XQorICAgICAgICAgICAgICAgIH0pOwor ICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgICAg IG9yaWdUcmFuc2Zvcm0gPSB0aGlzLnRyYW5zZm9ybSgpLmxvY2FsOworICAg ICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgZnVuY3Rpb24gc3Rh cnQoZSwgeCwgeSkgeworICAgICAgICAgICAgKGUub3JpZ2luYWxFdmVudCB8 fCBlKS5wcmV2ZW50RGVmYXVsdCgpOworICAgICAgICAgICAgZWwuX2RyYWcu eCA9IHg7CisgICAgICAgICAgICBlbC5fZHJhZy55ID0geTsKKyAgICAgICAg ICAgIGVsLl9kcmFnLmlkID0gZS5pZGVudGlmaWVyOworICAgICAgICAgICAg IWRyYWcubGVuZ3RoICYmIFNuYXAubW91c2Vtb3ZlKGRyYWdNb3ZlKS5tb3Vz ZXVwKGRyYWdVcCk7CisgICAgICAgICAgICBkcmFnLnB1c2goe2VsOiBlbCwg bW92ZV9zY29wZTogbW92ZV9zY29wZSwgc3RhcnRfc2NvcGU6IHN0YXJ0X3Nj b3BlLCBlbmRfc2NvcGU6IGVuZF9zY29wZX0pOworICAgICAgICAgICAgb25z dGFydCAmJiBldmUub24oInNuYXAuZHJhZy5zdGFydC4iICsgZWwuaWQsIG9u c3RhcnQpOworICAgICAgICAgICAgb25tb3ZlICYmIGV2ZS5vbigic25hcC5k cmFnLm1vdmUuIiArIGVsLmlkLCBvbm1vdmUpOworICAgICAgICAgICAgb25l bmQgJiYgZXZlLm9uKCJzbmFwLmRyYWcuZW5kLiIgKyBlbC5pZCwgb25lbmQp OworICAgICAgICAgICAgZXZlKCJzbmFwLmRyYWcuc3RhcnQuIiArIGVsLmlk LCBzdGFydF9zY29wZSB8fCBtb3ZlX3Njb3BlIHx8IGVsLCB4LCB5LCBlKTsK KyAgICAgICAgfQorICAgICAgICBmdW5jdGlvbiBpbml0KGUsIHgsIHkpIHsK KyAgICAgICAgICAgIGV2ZSgic25hcC5kcmFnaW5pdC4iICsgZWwuaWQsIGVs LCBlLCB4LCB5KTsKKyAgICAgICAgfQorICAgICAgICBldmUub24oInNuYXAu ZHJhZ2luaXQuIiArIGVsLmlkLCBzdGFydCk7CisgICAgICAgIGVsLl9kcmFn ID0ge307CisgICAgICAgIGRyYWdnYWJsZS5wdXNoKHtlbDogZWwsIHN0YXJ0 OiBzdGFydCwgaW5pdDogaW5pdH0pOworICAgICAgICBlbC5tb3VzZWRvd24o aW5pdCk7CisgICAgICAgIHJldHVybiBlbDsKKyAgICB9OworICAgIC8qCisg ICAgICogRWxlbWVudC5vbkRyYWdPdmVyCisgICAgIFsgbWV0aG9kIF0KKyAg ICAgKioKKyAgICAgKiBTaG9ydGN1dCB0byBhc3NpZ24gZXZlbnQgaGFuZGxl ciBmb3IgYGRyYWcub3Zlci48aWQ+YCBldmVudCwgd2hlcmUgYGlkYCBpcyB0 aGUgZWxlbWVudCdzIGBpZGAgKHNlZSBARWxlbWVudC5pZCkKKyAgICAgLSBm IChmdW5jdGlvbikgaGFuZGxlciBmb3IgZXZlbnQsIGZpcnN0IGFyZ3VtZW50 IHdvdWxkIGJlIHRoZSBlbGVtZW50IHlvdSBhcmUgZHJhZ2dpbmcgb3Zlcgor ICAgIFwqLworICAgIC8vIGVscHJvdG8ub25EcmFnT3ZlciA9IGZ1bmN0aW9u IChmKSB7CisgICAgLy8gICAgIGYgPyBldmUub24oInNuYXAuZHJhZy5vdmVy LiIgKyB0aGlzLmlkLCBmKSA6IGV2ZS51bmJpbmQoInNuYXAuZHJhZy5vdmVy LiIgKyB0aGlzLmlkKTsKKyAgICAvLyB9OworICAgIC8qXAorICAgICAqIEVs ZW1lbnQudW5kcmFnCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAgICAg KiBSZW1vdmVzIGFsbCBkcmFnIGV2ZW50IGhhbmRsZXJzIGZyb20gdGhlIGdp dmVuIGVsZW1lbnQKKyAgICBcKi8KKyAgICBlbHByb3RvLnVuZHJhZyA9IGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgdmFyIGkgPSBkcmFnZ2FibGUubGVuZ3Ro OworICAgICAgICB3aGlsZSAoaS0tKSBpZiAoZHJhZ2dhYmxlW2ldLmVsID09 IHRoaXMpIHsKKyAgICAgICAgICAgIHRoaXMudW5tb3VzZWRvd24oZHJhZ2dh YmxlW2ldLmluaXQpOworICAgICAgICAgICAgZHJhZ2dhYmxlLnNwbGljZShp LCAxKTsKKyAgICAgICAgICAgIGV2ZS51bmJpbmQoInNuYXAuZHJhZy4qLiIg KyB0aGlzLmlkKTsKKyAgICAgICAgICAgIGV2ZS51bmJpbmQoInNuYXAuZHJh Z2luaXQuIiArIHRoaXMuaWQpOworICAgICAgICB9CisgICAgICAgICFkcmFn Z2FibGUubGVuZ3RoICYmIFNuYXAudW5tb3VzZW1vdmUoZHJhZ01vdmUpLnVu bW91c2V1cChkcmFnVXApOworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9 OworfSk7CisKKy8vIENvcHlyaWdodCAoYykgMjAxMyBBZG9iZSBTeXN0ZW1z IEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy8vCisvLyBM aWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4w ICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZp bGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8v IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8K Ky8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIu MAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBv ciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1 dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJB UyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElU SU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4K Ky8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdl IGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVu ZGVyIHRoZSBMaWNlbnNlLgorU25hcC5wbHVnaW4oZnVuY3Rpb24gKFNuYXAs IEVsZW1lbnQsIFBhcGVyLCBnbG9iKSB7CisgICAgdmFyIGVscHJvdG8gPSBF bGVtZW50LnByb3RvdHlwZSwKKyAgICAgICAgcHByb3RvID0gUGFwZXIucHJv dG90eXBlLAorICAgICAgICByZ3VybCA9IC9eXHMqdXJsXCgoLispXCkvLAor ICAgICAgICBTdHIgPSBTdHJpbmcsCisgICAgICAgICQgPSBTbmFwLl8uJDsK KyAgICBTbmFwLmZpbHRlciA9IHt9OworICAgIC8qXAorICAgICAqIFBhcGVy LmZpbHRlcgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogQ3Jl YXRlcyBhIGA8ZmlsdGVyPmAgZWxlbWVudAorICAgICAqKgorICAgICAtIGZp bHN0ciAoc3RyaW5nKSBTVkcgZnJhZ21lbnQgb2YgZmlsdGVyIHByb3ZpZGVk IGFzIGEgc3RyaW5nCisgICAgID0gKG9iamVjdCkgQEVsZW1lbnQKKyAgICAg KiBOb3RlOiBJdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgZmlsdGVycyBlbWJl ZGRlZCBpbnRvIHRoZSBwYWdlIGluc2lkZSBhbiBlbXB0eSBTVkcgZWxlbWVu dC4KKyAgICAgPiBVc2FnZQorICAgICB8IHZhciBmID0gcGFwZXIuZmlsdGVy KCc8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyIi8+JyksCisgICAg IHwgICAgIGMgPSBwYXBlci5jaXJjbGUoMTAsIDEwLCAxMCkuYXR0cih7Cisg ICAgIHwgICAgICAgICBmaWx0ZXI6IGYKKyAgICAgfCAgICAgfSk7CisgICAg XCovCisgICAgcHByb3RvLmZpbHRlciA9IGZ1bmN0aW9uIChmaWxzdHIpIHsK KyAgICAgICAgdmFyIHBhcGVyID0gdGhpczsKKyAgICAgICAgaWYgKHBhcGVy LnR5cGUgIT0gInN2ZyIpIHsKKyAgICAgICAgICAgIHBhcGVyID0gcGFwZXIu cGFwZXI7CisgICAgICAgIH0KKyAgICAgICAgdmFyIGYgPSBTbmFwLnBhcnNl KFN0cihmaWxzdHIpKSwKKyAgICAgICAgICAgIGlkID0gU25hcC5fLmlkKCks CisgICAgICAgICAgICB3aWR0aCA9IHBhcGVyLm5vZGUub2Zmc2V0V2lkdGgs CisgICAgICAgICAgICBoZWlnaHQgPSBwYXBlci5ub2RlLm9mZnNldEhlaWdo dCwKKyAgICAgICAgICAgIGZpbHRlciA9ICQoImZpbHRlciIpOworICAgICAg ICAkKGZpbHRlciwgeworICAgICAgICAgICAgaWQ6IGlkLAorICAgICAgICAg ICAgZmlsdGVyVW5pdHM6ICJ1c2VyU3BhY2VPblVzZSIKKyAgICAgICAgfSk7 CisgICAgICAgIGZpbHRlci5hcHBlbmRDaGlsZChmLm5vZGUpOworICAgICAg ICBwYXBlci5kZWZzLmFwcGVuZENoaWxkKGZpbHRlcik7CisgICAgICAgIHJl dHVybiBuZXcgRWxlbWVudChmaWx0ZXIpOworICAgIH07CisKKyAgICBldmUu b24oInNuYXAudXRpbC5nZXRhdHRyLmZpbHRlciIsIGZ1bmN0aW9uICgpIHsK KyAgICAgICAgZXZlLnN0b3AoKTsKKyAgICAgICAgdmFyIHAgPSAkKHRoaXMu bm9kZSwgImZpbHRlciIpOworICAgICAgICBpZiAocCkgeworICAgICAgICAg ICAgdmFyIG1hdGNoID0gU3RyKHApLm1hdGNoKHJndXJsKTsKKyAgICAgICAg ICAgIHJldHVybiBtYXRjaCAmJiBTbmFwLnNlbGVjdChtYXRjaFsxXSk7Cisg ICAgICAgIH0KKyAgICB9KTsKKyAgICBldmUub24oInNuYXAudXRpbC5hdHRy LmZpbHRlciIsIGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICBpZiAodmFs dWUgaW5zdGFuY2VvZiBFbGVtZW50ICYmIHZhbHVlLnR5cGUgPT0gImZpbHRl ciIpIHsKKyAgICAgICAgICAgIGV2ZS5zdG9wKCk7CisgICAgICAgICAgICB2 YXIgaWQgPSB2YWx1ZS5ub2RlLmlkOworICAgICAgICAgICAgaWYgKCFpZCkg eworICAgICAgICAgICAgICAgICQodmFsdWUubm9kZSwge2lkOiB2YWx1ZS5p ZH0pOworICAgICAgICAgICAgICAgIGlkID0gdmFsdWUuaWQ7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICAkKHRoaXMubm9kZSwgeworICAgICAgICAg ICAgICAgIGZpbHRlcjogU25hcC51cmwoaWQpCisgICAgICAgICAgICB9KTsK KyAgICAgICAgfQorICAgICAgICBpZiAoIXZhbHVlIHx8IHZhbHVlID09ICJu b25lIikgeworICAgICAgICAgICAgZXZlLnN0b3AoKTsKKyAgICAgICAgICAg IHRoaXMubm9kZS5yZW1vdmVBdHRyaWJ1dGUoImZpbHRlciIpOworICAgICAg ICB9CisgICAgfSk7CisgICAgLypcCisgICAgICogU25hcC5maWx0ZXIuYmx1 cgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyBh biBTVkcgbWFya3VwIHN0cmluZyBmb3IgdGhlIGJsdXIgZmlsdGVyCisgICAg ICoqCisgICAgIC0geCAobnVtYmVyKSBhbW91bnQgb2YgaG9yaXpvbnRhbCBi bHVyLCBpbiBwaXhlbHMKKyAgICAgLSB5IChudW1iZXIpICNvcHRpb25hbCBh bW91bnQgb2YgdmVydGljYWwgYmx1ciwgaW4gcGl4ZWxzCisgICAgID0gKHN0 cmluZykgZmlsdGVyIHJlcHJlc2VudGF0aW9uCisgICAgID4gVXNhZ2UKKyAg ICAgfCB2YXIgZiA9IHBhcGVyLmZpbHRlcihTbmFwLmZpbHRlci5ibHVyKDUs IDEwKSksCisgICAgIHwgICAgIGMgPSBwYXBlci5jaXJjbGUoMTAsIDEwLCAx MCkuYXR0cih7CisgICAgIHwgICAgICAgICBmaWx0ZXI6IGYKKyAgICAgfCAg ICAgfSk7CisgICAgXCovCisgICAgU25hcC5maWx0ZXIuYmx1ciA9IGZ1bmN0 aW9uICh4LCB5KSB7CisgICAgICAgIGlmICh4ID09IG51bGwpIHsKKyAgICAg ICAgICAgIHggPSAyOworICAgICAgICB9CisgICAgICAgIHZhciBkZWYgPSB5 ID09IG51bGwgPyB4IDogW3gsIHldOworICAgICAgICByZXR1cm4gU25hcC5m b3JtYXQoJ1w8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSJ7ZGVmfSIv PicsIHsKKyAgICAgICAgICAgIGRlZjogZGVmCisgICAgICAgIH0pOworICAg IH07CisgICAgU25hcC5maWx0ZXIuYmx1ci50b1N0cmluZyA9IGZ1bmN0aW9u ICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMoKTsKKyAgICB9OworICAgIC8q XAorICAgICAqIFNuYXAuZmlsdGVyLnNoYWRvdworICAgICBbIG1ldGhvZCBd CisgICAgICoqCisgICAgICogUmV0dXJucyBhbiBTVkcgbWFya3VwIHN0cmlu ZyBmb3IgdGhlIHNoYWRvdyBmaWx0ZXIKKyAgICAgKioKKyAgICAgLSBkeCAo bnVtYmVyKSAjb3B0aW9uYWwgaG9yaXpvbnRhbCBzaGlmdCBvZiB0aGUgc2hh ZG93LCBpbiBwaXhlbHMKKyAgICAgLSBkeSAobnVtYmVyKSAjb3B0aW9uYWwg dmVydGljYWwgc2hpZnQgb2YgdGhlIHNoYWRvdywgaW4gcGl4ZWxzCisgICAg IC0gYmx1ciAobnVtYmVyKSAjb3B0aW9uYWwgYW1vdW50IG9mIGJsdXIKKyAg ICAgLSBjb2xvciAoc3RyaW5nKSAjb3B0aW9uYWwgY29sb3Igb2YgdGhlIHNo YWRvdworICAgICAtIG9wYWNpdHkgKG51bWJlcikgI29wdGlvbmFsIGAwLi4x YCBvcGFjaXR5IG9mIHRoZSBzaGFkb3cKKyAgICAgKiBvcgorICAgICAtIGR4 IChudW1iZXIpICNvcHRpb25hbCBob3Jpem9udGFsIHNoaWZ0IG9mIHRoZSBz aGFkb3csIGluIHBpeGVscworICAgICAtIGR5IChudW1iZXIpICNvcHRpb25h bCB2ZXJ0aWNhbCBzaGlmdCBvZiB0aGUgc2hhZG93LCBpbiBwaXhlbHMKKyAg ICAgLSBjb2xvciAoc3RyaW5nKSAjb3B0aW9uYWwgY29sb3Igb2YgdGhlIHNo YWRvdworICAgICAtIG9wYWNpdHkgKG51bWJlcikgI29wdGlvbmFsIGAwLi4x YCBvcGFjaXR5IG9mIHRoZSBzaGFkb3cKKyAgICAgKiB3aGljaCBtYWtlcyBi bHVyIGRlZmF1bHQgdG8gYDRgLiBPcgorICAgICAtIGR4IChudW1iZXIpICNv cHRpb25hbCBob3Jpem9udGFsIHNoaWZ0IG9mIHRoZSBzaGFkb3csIGluIHBp eGVscworICAgICAtIGR5IChudW1iZXIpICNvcHRpb25hbCB2ZXJ0aWNhbCBz aGlmdCBvZiB0aGUgc2hhZG93LCBpbiBwaXhlbHMKKyAgICAgLSBvcGFjaXR5 IChudW1iZXIpICNvcHRpb25hbCBgMC4uMWAgb3BhY2l0eSBvZiB0aGUgc2hh ZG93CisgICAgID0gKHN0cmluZykgZmlsdGVyIHJlcHJlc2VudGF0aW9uCisg ICAgID4gVXNhZ2UKKyAgICAgfCB2YXIgZiA9IHBhcGVyLmZpbHRlcihTbmFw LmZpbHRlci5zaGFkb3coMCwgMiwgMykpLAorICAgICB8ICAgICBjID0gcGFw ZXIuY2lyY2xlKDEwLCAxMCwgMTApLmF0dHIoeworICAgICB8ICAgICAgICAg ZmlsdGVyOiBmCisgICAgIHwgICAgIH0pOworICAgIFwqLworICAgIFNuYXAu ZmlsdGVyLnNoYWRvdyA9IGZ1bmN0aW9uIChkeCwgZHksIGJsdXIsIGNvbG9y LCBvcGFjaXR5KSB7CisgICAgICAgIGlmICh0eXBlb2YgYmx1ciA9PSAic3Ry aW5nIikgeworICAgICAgICAgICAgY29sb3IgPSBibHVyOworICAgICAgICAg ICAgb3BhY2l0eSA9IGNvbG9yOworICAgICAgICAgICAgYmx1ciA9IDQ7Cisg ICAgICAgIH0KKyAgICAgICAgaWYgKHR5cGVvZiBjb2xvciAhPSAic3RyaW5n IikgeworICAgICAgICAgICAgb3BhY2l0eSA9IGNvbG9yOworICAgICAgICAg ICAgY29sb3IgPSAiIzAwMCI7CisgICAgICAgIH0KKyAgICAgICAgY29sb3Ig PSBjb2xvciB8fCAiIzAwMCI7CisgICAgICAgIGlmIChibHVyID09IG51bGwp IHsKKyAgICAgICAgICAgIGJsdXIgPSA0OworICAgICAgICB9CisgICAgICAg IGlmIChvcGFjaXR5ID09IG51bGwpIHsKKyAgICAgICAgICAgIG9wYWNpdHkg PSAxOworICAgICAgICB9CisgICAgICAgIGlmIChkeCA9PSBudWxsKSB7Cisg ICAgICAgICAgICBkeCA9IDA7CisgICAgICAgICAgICBkeSA9IDI7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKGR5ID09IG51bGwpIHsKKyAgICAgICAgICAg IGR5ID0gZHg7CisgICAgICAgIH0KKyAgICAgICAgY29sb3IgPSBTbmFwLmNv bG9yKGNvbG9yKTsKKyAgICAgICAgcmV0dXJuIFNuYXAuZm9ybWF0KCc8ZmVH YXVzc2lhbkJsdXIgaW49IlNvdXJjZUFscGhhIiBzdGREZXZpYXRpb249Inti bHVyfSIvPjxmZU9mZnNldCBkeD0ie2R4fSIgZHk9IntkeX0iIHJlc3VsdD0i b2Zmc2V0Ymx1ciIvPjxmZUZsb29kIGZsb29kLWNvbG9yPSJ7Y29sb3J9Ii8+ PGZlQ29tcG9zaXRlIGluMj0ib2Zmc2V0Ymx1ciIgb3BlcmF0b3I9ImluIi8+ PGZlQ29tcG9uZW50VHJhbnNmZXI+PGZlRnVuY0EgdHlwZT0ibGluZWFyIiBz bG9wZT0ie29wYWNpdHl9Ii8+PC9mZUNvbXBvbmVudFRyYW5zZmVyPjxmZU1l cmdlPjxmZU1lcmdlTm9kZS8+PGZlTWVyZ2VOb2RlIGluPSJTb3VyY2VHcmFw aGljIi8+PC9mZU1lcmdlPicsIHsKKyAgICAgICAgICAgIGNvbG9yOiBjb2xv ciwKKyAgICAgICAgICAgIGR4OiBkeCwKKyAgICAgICAgICAgIGR5OiBkeSwK KyAgICAgICAgICAgIGJsdXI6IGJsdXIsCisgICAgICAgICAgICBvcGFjaXR5 OiBvcGFjaXR5CisgICAgICAgIH0pOworICAgIH07CisgICAgU25hcC5maWx0 ZXIuc2hhZG93LnRvU3RyaW5nID0gZnVuY3Rpb24gKCkgeworICAgICAgICBy ZXR1cm4gdGhpcygpOworICAgIH07CisgICAgLypcCisgICAgICogU25hcC5m aWx0ZXIuZ3JheXNjYWxlCisgICAgIFsgbWV0aG9kIF0KKyAgICAgKioKKyAg ICAgKiBSZXR1cm5zIGFuIFNWRyBtYXJrdXAgc3RyaW5nIGZvciB0aGUgZ3Jh eXNjYWxlIGZpbHRlcgorICAgICAqKgorICAgICAtIGFtb3VudCAobnVtYmVy KSBhbW91bnQgb2YgZmlsdGVyIChgMC4uMWApCisgICAgID0gKHN0cmluZykg ZmlsdGVyIHJlcHJlc2VudGF0aW9uCisgICAgXCovCisgICAgU25hcC5maWx0 ZXIuZ3JheXNjYWxlID0gZnVuY3Rpb24gKGFtb3VudCkgeworICAgICAgICBp ZiAoYW1vdW50ID09IG51bGwpIHsKKyAgICAgICAgICAgIGFtb3VudCA9IDE7 CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFNuYXAuZm9ybWF0KCc8ZmVD b2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0ie2F9IHtifSB7Y30g MCAwIHtkfSB7ZX0ge2Z9IDAgMCB7Z30ge2J9IHtofSAwIDAgMCAwIDAgMSAw Ii8+JywgeworICAgICAgICAgICAgYTogMC4yMTI2ICsgMC43ODc0ICogKDEg LSBhbW91bnQpLAorICAgICAgICAgICAgYjogMC43MTUyIC0gMC43MTUyICog KDEgLSBhbW91bnQpLAorICAgICAgICAgICAgYzogMC4wNzIyIC0gMC4wNzIy ICogKDEgLSBhbW91bnQpLAorICAgICAgICAgICAgZDogMC4yMTI2IC0gMC4y MTI2ICogKDEgLSBhbW91bnQpLAorICAgICAgICAgICAgZTogMC43MTUyICsg MC4yODQ4ICogKDEgLSBhbW91bnQpLAorICAgICAgICAgICAgZjogMC4wNzIy IC0gMC4wNzIyICogKDEgLSBhbW91bnQpLAorICAgICAgICAgICAgZzogMC4y MTI2IC0gMC4yMTI2ICogKDEgLSBhbW91bnQpLAorICAgICAgICAgICAgaDog MC4wNzIyICsgMC45Mjc4ICogKDEgLSBhbW91bnQpCisgICAgICAgIH0pOwor ICAgIH07CisgICAgU25hcC5maWx0ZXIuZ3JheXNjYWxlLnRvU3RyaW5nID0g ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpcygpOworICAgIH07 CisgICAgLypcCisgICAgICogU25hcC5maWx0ZXIuc2VwaWEKKyAgICAgWyBt ZXRob2QgXQorICAgICAqKgorICAgICAqIFJldHVybnMgYW4gU1ZHIG1hcmt1 cCBzdHJpbmcgZm9yIHRoZSBzZXBpYSBmaWx0ZXIKKyAgICAgKioKKyAgICAg LSBhbW91bnQgKG51bWJlcikgYW1vdW50IG9mIGZpbHRlciAoYDAuLjFgKQor ICAgICA9IChzdHJpbmcpIGZpbHRlciByZXByZXNlbnRhdGlvbgorICAgIFwq LworICAgIFNuYXAuZmlsdGVyLnNlcGlhID0gZnVuY3Rpb24gKGFtb3VudCkg eworICAgICAgICBpZiAoYW1vdW50ID09IG51bGwpIHsKKyAgICAgICAgICAg IGFtb3VudCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFNuYXAu Zm9ybWF0KCc8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0i e2F9IHtifSB7Y30gMCAwIHtkfSB7ZX0ge2Z9IDAgMCB7Z30ge2h9IHtpfSAw IDAgMCAwIDAgMSAwIi8+JywgeworICAgICAgICAgICAgYTogMC4zOTMgKyAw LjYwNyAqICgxIC0gYW1vdW50KSwKKyAgICAgICAgICAgIGI6IDAuNzY5IC0g MC43NjkgKiAoMSAtIGFtb3VudCksCisgICAgICAgICAgICBjOiAwLjE4OSAt IDAuMTg5ICogKDEgLSBhbW91bnQpLAorICAgICAgICAgICAgZDogMC4zNDkg LSAwLjM0OSAqICgxIC0gYW1vdW50KSwKKyAgICAgICAgICAgIGU6IDAuNjg2 ICsgMC4zMTQgKiAoMSAtIGFtb3VudCksCisgICAgICAgICAgICBmOiAwLjE2 OCAtIDAuMTY4ICogKDEgLSBhbW91bnQpLAorICAgICAgICAgICAgZzogMC4y NzIgLSAwLjI3MiAqICgxIC0gYW1vdW50KSwKKyAgICAgICAgICAgIGg6IDAu NTM0IC0gMC41MzQgKiAoMSAtIGFtb3VudCksCisgICAgICAgICAgICBpOiAw LjEzMSArIDAuODY5ICogKDEgLSBhbW91bnQpCisgICAgICAgIH0pOworICAg IH07CisgICAgU25hcC5maWx0ZXIuc2VwaWEudG9TdHJpbmcgPSBmdW5jdGlv biAoKSB7CisgICAgICAgIHJldHVybiB0aGlzKCk7CisgICAgfTsKKyAgICAv KlwKKyAgICAgKiBTbmFwLmZpbHRlci5zYXR1cmF0ZQorICAgICBbIG1ldGhv ZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyBhbiBTVkcgbWFya3VwIHN0 cmluZyBmb3IgdGhlIHNhdHVyYXRlIGZpbHRlcgorICAgICAqKgorICAgICAt IGFtb3VudCAobnVtYmVyKSBhbW91bnQgb2YgZmlsdGVyIChgMC4uMWApCisg ICAgID0gKHN0cmluZykgZmlsdGVyIHJlcHJlc2VudGF0aW9uCisgICAgXCov CisgICAgU25hcC5maWx0ZXIuc2F0dXJhdGUgPSBmdW5jdGlvbiAoYW1vdW50 KSB7CisgICAgICAgIGlmIChhbW91bnQgPT0gbnVsbCkgeworICAgICAgICAg ICAgYW1vdW50ID0gMTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU25h cC5mb3JtYXQoJzxmZUNvbG9yTWF0cml4IHR5cGU9InNhdHVyYXRlIiB2YWx1 ZXM9InthbW91bnR9Ii8+JywgeworICAgICAgICAgICAgYW1vdW50OiAxIC0g YW1vdW50CisgICAgICAgIH0pOworICAgIH07CisgICAgU25hcC5maWx0ZXIu c2F0dXJhdGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl dHVybiB0aGlzKCk7CisgICAgfTsKKyAgICAvKlwKKyAgICAgKiBTbmFwLmZp bHRlci5odWVSb3RhdGUKKyAgICAgWyBtZXRob2QgXQorICAgICAqKgorICAg ICAqIFJldHVybnMgYW4gU1ZHIG1hcmt1cCBzdHJpbmcgZm9yIHRoZSBodWUt cm90YXRlIGZpbHRlcgorICAgICAqKgorICAgICAtIGFuZ2xlIChudW1iZXIp IGFuZ2xlIG9mIHJvdGF0aW9uCisgICAgID0gKHN0cmluZykgZmlsdGVyIHJl cHJlc2VudGF0aW9uCisgICAgXCovCisgICAgU25hcC5maWx0ZXIuaHVlUm90 YXRlID0gZnVuY3Rpb24gKGFuZ2xlKSB7CisgICAgICAgIGFuZ2xlID0gYW5n bGUgfHwgMDsKKyAgICAgICAgcmV0dXJuIFNuYXAuZm9ybWF0KCc8ZmVDb2xv ck1hdHJpeCB0eXBlPSJodWVSb3RhdGUiIHZhbHVlcz0ie2FuZ2xlfSIvPics IHsKKyAgICAgICAgICAgIGFuZ2xlOiBhbmdsZQorICAgICAgICB9KTsKKyAg ICB9OworICAgIFNuYXAuZmlsdGVyLmh1ZVJvdGF0ZS50b1N0cmluZyA9IGZ1 bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMoKTsKKyAgICB9Owor ICAgIC8qXAorICAgICAqIFNuYXAuZmlsdGVyLmludmVydAorICAgICBbIG1l dGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyBhbiBTVkcgbWFya3Vw IHN0cmluZyBmb3IgdGhlIGludmVydCBmaWx0ZXIKKyAgICAgKioKKyAgICAg LSBhbW91bnQgKG51bWJlcikgYW1vdW50IG9mIGZpbHRlciAoYDAuLjFgKQor ICAgICA9IChzdHJpbmcpIGZpbHRlciByZXByZXNlbnRhdGlvbgorICAgIFwq LworICAgIFNuYXAuZmlsdGVyLmludmVydCA9IGZ1bmN0aW9uIChhbW91bnQp IHsKKyAgICAgICAgaWYgKGFtb3VudCA9PSBudWxsKSB7CisgICAgICAgICAg ICBhbW91bnQgPSAxOworICAgICAgICB9CisvLyAgICAgICAgPGZlQ29sb3JN YXRyaXggdHlwZT0ibWF0cml4IiB2YWx1ZXM9Ii0xIDAgMCAwIDEgIDAgLTEg MCAwIDEgIDAgMCAtMSAwIDEgIDAgMCAwIDEgMCIgY29sb3ItaW50ZXJwb2xh dGlvbi1maWx0ZXJzPSJzUkdCIi8+CisgICAgICAgIHJldHVybiBTbmFwLmZv cm1hdCgnPGZlQ29tcG9uZW50VHJhbnNmZXI+PGZlRnVuY1IgdHlwZT0idGFi bGUiIHRhYmxlVmFsdWVzPSJ7YW1vdW50fSB7YW1vdW50Mn0iLz48ZmVGdW5j RyB0eXBlPSJ0YWJsZSIgdGFibGVWYWx1ZXM9InthbW91bnR9IHthbW91bnQy fSIvPjxmZUZ1bmNCIHR5cGU9InRhYmxlIiB0YWJsZVZhbHVlcz0ie2Ftb3Vu dH0ge2Ftb3VudDJ9Ii8+PC9mZUNvbXBvbmVudFRyYW5zZmVyPicsIHsKKyAg ICAgICAgICAgIGFtb3VudDogYW1vdW50LAorICAgICAgICAgICAgYW1vdW50 MjogMSAtIGFtb3VudAorICAgICAgICB9KTsKKyAgICB9OworICAgIFNuYXAu ZmlsdGVyLmludmVydC50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKKyAgICAg ICAgcmV0dXJuIHRoaXMoKTsKKyAgICB9OworICAgIC8qXAorICAgICAqIFNu YXAuZmlsdGVyLmJyaWdodG5lc3MKKyAgICAgWyBtZXRob2QgXQorICAgICAq KgorICAgICAqIFJldHVybnMgYW4gU1ZHIG1hcmt1cCBzdHJpbmcgZm9yIHRo ZSBicmlnaHRuZXNzIGZpbHRlcgorICAgICAqKgorICAgICAtIGFtb3VudCAo bnVtYmVyKSBhbW91bnQgb2YgZmlsdGVyIChgMC4uMWApCisgICAgID0gKHN0 cmluZykgZmlsdGVyIHJlcHJlc2VudGF0aW9uCisgICAgXCovCisgICAgU25h cC5maWx0ZXIuYnJpZ2h0bmVzcyA9IGZ1bmN0aW9uIChhbW91bnQpIHsKKyAg ICAgICAgaWYgKGFtb3VudCA9PSBudWxsKSB7CisgICAgICAgICAgICBhbW91 bnQgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTbmFwLmZvcm1h dCgnPGZlQ29tcG9uZW50VHJhbnNmZXI+PGZlRnVuY1IgdHlwZT0ibGluZWFy IiBzbG9wZT0ie2Ftb3VudH0iLz48ZmVGdW5jRyB0eXBlPSJsaW5lYXIiIHNs b3BlPSJ7YW1vdW50fSIvPjxmZUZ1bmNCIHR5cGU9ImxpbmVhciIgc2xvcGU9 InthbW91bnR9Ii8+PC9mZUNvbXBvbmVudFRyYW5zZmVyPicsIHsKKyAgICAg ICAgICAgIGFtb3VudDogYW1vdW50CisgICAgICAgIH0pOworICAgIH07Cisg ICAgU25hcC5maWx0ZXIuYnJpZ2h0bmVzcy50b1N0cmluZyA9IGZ1bmN0aW9u ICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMoKTsKKyAgICB9OworICAgIC8q XAorICAgICAqIFNuYXAuZmlsdGVyLmNvbnRyYXN0CisgICAgIFsgbWV0aG9k IF0KKyAgICAgKioKKyAgICAgKiBSZXR1cm5zIGFuIFNWRyBtYXJrdXAgc3Ry aW5nIGZvciB0aGUgY29udHJhc3QgZmlsdGVyCisgICAgICoqCisgICAgIC0g YW1vdW50IChudW1iZXIpIGFtb3VudCBvZiBmaWx0ZXIgKGAwLi4xYCkKKyAg ICAgPSAoc3RyaW5nKSBmaWx0ZXIgcmVwcmVzZW50YXRpb24KKyAgICBcKi8K KyAgICBTbmFwLmZpbHRlci5jb250cmFzdCA9IGZ1bmN0aW9uIChhbW91bnQp IHsKKyAgICAgICAgaWYgKGFtb3VudCA9PSBudWxsKSB7CisgICAgICAgICAg ICBhbW91bnQgPSAxOworICAgICAgICB9CisgICAgICAgIHJldHVybiBTbmFw LmZvcm1hdCgnPGZlQ29tcG9uZW50VHJhbnNmZXI+PGZlRnVuY1IgdHlwZT0i bGluZWFyIiBzbG9wZT0ie2Ftb3VudH0iIGludGVyY2VwdD0ie2Ftb3VudDJ9 Ii8+PGZlRnVuY0cgdHlwZT0ibGluZWFyIiBzbG9wZT0ie2Ftb3VudH0iIGlu dGVyY2VwdD0ie2Ftb3VudDJ9Ii8+PGZlRnVuY0IgdHlwZT0ibGluZWFyIiBz bG9wZT0ie2Ftb3VudH0iIGludGVyY2VwdD0ie2Ftb3VudDJ9Ii8+PC9mZUNv bXBvbmVudFRyYW5zZmVyPicsIHsKKyAgICAgICAgICAgIGFtb3VudDogYW1v dW50LAorICAgICAgICAgICAgYW1vdW50MjogLjUgLSBhbW91bnQgLyAyCisg ICAgICAgIH0pOworICAgIH07CisgICAgU25hcC5maWx0ZXIuY29udHJhc3Qu dG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlz KCk7CisgICAgfTsKK30pOworCisvLyBDb3B5cmlnaHQgKGMpIDIwMTQgQWRv YmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu CisvLworLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBW ZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisvLyB5b3UgbWF5IG5vdCB1 c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExp Y2Vuc2UuCisvLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vu c2UgYXQKKy8vCisvLyBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMv TElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGlj YWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisv LyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRl ZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVT IE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9y IGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZp YyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1p dGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KK1NuYXAucGx1Z2luKGZ1bmN0 aW9uIChTbmFwLCBFbGVtZW50LCBQYXBlciwgZ2xvYiwgRnJhZ21lbnQpIHsK KyAgICB2YXIgYm94ID0gU25hcC5fLmJveCwKKyAgICAgICAgaXMgPSBTbmFw LmlzLAorICAgICAgICBmaXJzdExldHRlciA9IC9eW15hLXpdKihbdGJtbHJj XSkvaSwKKyAgICAgICAgdG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7CisgICAg ICAgICAgICByZXR1cm4gIlQiICsgdGhpcy5keCArICIsIiArIHRoaXMuZHk7 CisgICAgICAgIH07CisgICAgLypcCisgICAgICogRWxlbWVudC5nZXRBbGln bgorICAgICBbIG1ldGhvZCBdCisgICAgICoqCisgICAgICogUmV0dXJucyBz aGlmdCBuZWVkZWQgdG8gYWxpZ24gdGhlIGVsZW1lbnQgcmVsYXRpdmVseSB0 byBnaXZlbiBlbGVtZW50LgorICAgICAqIElmIG5vIGVsZW1lbnRzIHNwZWNp ZmllZCwgcGFyZW50IGA8c3ZnPmAgY29udGFpbmVyIHdpbGwgYmUgdXNlZC4K KyAgICAgLSBlbCAob2JqZWN0KSBAb3B0aW9uYWwgYWxpZ25tZW50IGVsZW1l bnQKKyAgICAgLSB3YXkgKHN0cmluZykgb25lIG9mIHNpeCB2YWx1ZXM6IGAi dG9wImAsIGAibWlkZGxlImAsIGAiYm90dG9tImAsIGAibGVmdCJgLCBgImNl bnRlciJgLCBgInJpZ2h0ImAKKyAgICAgPSAob2JqZWN0fHN0cmluZykgT2Jq ZWN0IGluIGZvcm1hdCBge2R4OiAsIGR5OiB9YCBhbHNvIGhhcyBhIHN0cmlu ZyByZXByZXNlbnRhdGlvbiBhcyBhIHRyYW5zZm9ybWF0aW9uIHN0cmluZwor ICAgICA+IFVzYWdlCisgICAgIHwgZWwudHJhbnNmb3JtKGVsLmdldEFsaWdu KGVsMiwgInRvcCIpKTsKKyAgICAgKiBvcgorICAgICB8IHZhciBkeSA9IGVs LmdldEFsaWduKGVsMiwgInRvcCIpLmR5OworICAgIFwqLworICAgIEVsZW1l bnQucHJvdG90eXBlLmdldEFsaWduID0gZnVuY3Rpb24gKGVsLCB3YXkpIHsK KyAgICAgICAgaWYgKHdheSA9PSBudWxsICYmIGlzKGVsLCAic3RyaW5nIikp IHsKKyAgICAgICAgICAgIHdheSA9IGVsOworICAgICAgICAgICAgZWwgPSBu dWxsOworICAgICAgICB9CisgICAgICAgIGVsID0gZWwgfHwgdGhpcy5wYXBl cjsKKyAgICAgICAgdmFyIGJ4ID0gZWwuZ2V0QkJveCA/IGVsLmdldEJCb3go KSA6IGJveChlbCksCisgICAgICAgICAgICBiYiA9IHRoaXMuZ2V0QkJveCgp LAorICAgICAgICAgICAgb3V0ID0ge307CisgICAgICAgIHdheSA9IHdheSAm JiB3YXkubWF0Y2goZmlyc3RMZXR0ZXIpOworICAgICAgICB3YXkgPSB3YXkg PyB3YXlbMV0udG9Mb3dlckNhc2UoKSA6ICJjIjsKKyAgICAgICAgc3dpdGNo ICh3YXkpIHsKKyAgICAgICAgICAgIGNhc2UgInQiOgorICAgICAgICAgICAg ICAgIG91dC5keCA9IDA7CisgICAgICAgICAgICAgICAgb3V0LmR5ID0gYngu eSAtIGJiLnk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh c2UgImIiOgorICAgICAgICAgICAgICAgIG91dC5keCA9IDA7CisgICAgICAg ICAgICAgICAgb3V0LmR5ID0gYngueTIgLSBiYi55MjsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgY2FzZSAibSI6CisgICAgICAgICAgICAg ICAgb3V0LmR4ID0gMDsKKyAgICAgICAgICAgICAgICBvdXQuZHkgPSBieC5j eSAtIGJiLmN5OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj YXNlICJsIjoKKyAgICAgICAgICAgICAgICBvdXQuZHggPSBieC54IC0gYmIu eDsKKyAgICAgICAgICAgICAgICBvdXQuZHkgPSAwOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICBjYXNlICJyIjoKKyAgICAgICAgICAgICAg ICBvdXQuZHggPSBieC54MiAtIGJiLngyOworICAgICAgICAgICAgICAgIG91 dC5keSA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRl ZmF1bHQ6CisgICAgICAgICAgICAgICAgb3V0LmR4ID0gYnguY3ggLSBiYi5j eDsKKyAgICAgICAgICAgICAgICBvdXQuZHkgPSAwOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgb3V0LnRvU3RyaW5nID0gdG9T dHJpbmc7CisgICAgICAgIHJldHVybiBvdXQ7CisgICAgfTsKKyAgICAvKlwK KyAgICAgKiBFbGVtZW50LmFsaWduCisgICAgIFsgbWV0aG9kIF0KKyAgICAg KioKKyAgICAgKiBBbGlnbnMgdGhlIGVsZW1lbnQgcmVsYXRpdmVseSB0byBn aXZlbiBvbmUgdmlhIHRyYW5zZm9ybWF0aW9uLgorICAgICAqIElmIG5vIGVs ZW1lbnRzIHNwZWNpZmllZCwgcGFyZW50IGA8c3ZnPmAgY29udGFpbmVyIHdp bGwgYmUgdXNlZC4KKyAgICAgLSBlbCAob2JqZWN0KSBAb3B0aW9uYWwgYWxp Z25tZW50IGVsZW1lbnQKKyAgICAgLSB3YXkgKHN0cmluZykgb25lIG9mIHNp eCB2YWx1ZXM6IGAidG9wImAsIGAibWlkZGxlImAsIGAiYm90dG9tImAsIGAi bGVmdCJgLCBgImNlbnRlciJgLCBgInJpZ2h0ImAKKyAgICAgPSAob2JqZWN0 KSB0aGlzIGVsZW1lbnQKKyAgICAgPiBVc2FnZQorICAgICB8IGVsLmFsaWdu KGVsMiwgInRvcCIpOworICAgICAqIG9yCisgICAgIHwgZWwuYWxpZ24oIm1p ZGRsZSIpOworICAgIFwqLworICAgIEVsZW1lbnQucHJvdG90eXBlLmFsaWdu ID0gZnVuY3Rpb24gKGVsLCB3YXkpIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu dHJhbnNmb3JtKCIuLi4iICsgdGhpcy5nZXRBbGlnbihlbCwgd2F5KSk7Cisg ICAgfTsKK30pOworCityZXR1cm4gU25hcDsKK30pKTsKZGlmZiAtLWdpdCBh L3dlYi9wZ2FkbWluL21pc2MvdGVtcGxhdGVzL2V4cGxhaW4vanMvZXhwbGFp bi5qcyBiL3dlYi9wZ2FkbWluL21pc2MvdGVtcGxhdGVzL2V4cGxhaW4vanMv ZXhwbGFpbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw Li5mZDlhNWU1Ci0tLSAvZGV2L251bGwKKysrIGIvd2ViL3BnYWRtaW4vbWlz Yy90ZW1wbGF0ZXMvZXhwbGFpbi9qcy9leHBsYWluLmpzCkBAIC0wLDAgKzEs NjkxIEBACitkZWZpbmUgKAorICAncGdhZG1pbi5taXNjLmV4cGxhaW4nLAor ICBbJ2pxdWVyeScsICd1bmRlcnNjb3JlJywgJ3VuZGVyc2NvcmUuc3RyaW5n JywgJ3BnYWRtaW4nLCAnYmFja2JvbmUnLCAnc25hcC5zdmcnXSwKKyAgZnVu Y3Rpb24oJCwgXywgUywgcGdBZG1pbiwgQmFja2JvbmUsIFNuYXApIHsKKwor cGdBZG1pbiA9IHBnQWRtaW4gfHwgd2luZG93LnBnQWRtaW4gfHwge307Cit2 YXIgcGdFeHBsYWluID0gcGdBZG1pbi5FeHBsYWluOworCisvLyBTbmFwLnN2 ZyBwbHVnLWluIHRvIHdyaXRlIG11bHRpdGV4dCBhcyBpbWFnZSBuYW1lCitT bmFwLnBsdWdpbihmdW5jdGlvbiAoU25hcCwgRWxlbWVudCwgUGFwZXIsIGds b2IpIHsKKyAgUGFwZXIucHJvdG90eXBlLm11bHRpdGV4dCA9IGZ1bmN0aW9u ICh4LCB5LCB0eHQsIG1heF93aWR0aCwgYXR0cmlidXRlcykgeworICAgIHZh ciBzdmcgPSBTbmFwKCksCisgICAgICAgIGFiYyA9ICJhYmNkZWZnaGlqa2xt bm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIiwKKyAg ICAgICAgaXNXb3JkQnJva2VuID0gZmFsc2UsCisgICAgICAgIHRlbXAgPSBz dmcudGV4dCgwLCAwLCBhYmMpOworCisgICAgdGVtcC5hdHRyKGF0dHJpYnV0 ZXMpOworCisgICAgLyoKKyAgICAgKiBGaW5kIGxldHRlciB3aWR0aCBpbiBw aXhlbHMgYW5kCisgICAgICogaW5kZXggZnJvbSB3aGVyZSB0aGUgdGV4dCBz aG91bGQgYmUgYnJva2VuCisgICAgICovCisgICAgdmFyIGxldHRlcl93aWR0 aCA9IHRlbXAuZ2V0QkJveCgpLndpZHRoIC8gYWJjLmxlbmd0aCwKKyAgICAg ICAgd29yZF9icmVha19pbmRleCA9IE1hdGgucm91bmQoKG1heF93aWR0aCAv IGxldHRlcl93aWR0aCkpIC0gMTsKKworICAgIHN2Zy5yZW1vdmUoKTsKKwor ICAgIHZhciB3b3JkcyA9IHR4dC5zcGxpdCgiICIpLAorICAgICAgICB3aWR0 aF9zb19mYXIgPSAwLAorICAgICAgICBsaW5lcz1bXSwgY3Vycl9saW5lID0g JycsCisgICAgICAgIC8qCisgICAgICAgICAqIEZ1bmN0aW9uIHRvIGRpdmlk ZSBzdHJpbmcgaW50byBtdWx0aXBsZSBsaW5lcworICAgICAgICAgKiBhbmQg c3RvcmUgdGhlbSBpbiBhbiBhcnJheSBpZiBpdCBzaXplIGNyb3NzZXMKKyAg ICAgICAgICogdGhlIG1heC13aWR0aCBib3VuZGFyeS4KKyAgICAgICAgICov CisgICAgICAgIHNwbGl0VGV4dEluTXVsdGlMaW5lID0gZnVuY3Rpb24obGVh ZGluZywgc29fZmFyLCBsaW5lKSB7CisgICAgICAgICAgdmFyIGwgPSBsaW5l Lmxlbmd0aCwKKyAgICAgICAgICAgICAgcmVzID0gW107CisKKyAgICAgICAg ICBpZiAobCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIHJlczsKKworICAg ICAgICAgIGlmIChzb19mYXIgJiYgKHNvX2ZhciArIChsICogbGV0dGVyX3dp ZHRoKSA+IG1heF93aWR0aCkpIHsKKyAgICAgICAgICAgIHJlcy5wdXNoKGxl YWRpbmcpOworICAgICAgICAgICAgcmVzID0gcmVzLmNvbmNhdChzcGxpdFRl eHRJbk11bHRpTGluZSgnJywgMCwgbGluZSkpOworICAgICAgICAgIH0gZWxz ZSBpZiAoc29fZmFyKSB7CisgICAgICAgICAgICByZXMucHVzaChsZWFkaW5n ICsgJyAnICsgbGluZSk7CisgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg ICAgIGlmIChsZWFkaW5nKQorICAgICAgICAgICAgICAgIHJlcy5wdXNoKGxl YWRpbmcpOworICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID4gd29yZF9i cmVha19pbmRleCArIDEpCisgICAgICAgICAgICAgICAgcmVzLnB1c2gobGlu ZS5zbGljZSgwLCB3b3JkX2JyZWFrX2luZGV4KSArICctJyk7CisgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzLnB1c2gobGluZSk7Cisg ICAgICAgICAgICByZXMgPSByZXMuY29uY2F0KHNwbGl0VGV4dEluTXVsdGlM aW5lKCcnLCAwLCBsaW5lLnNsaWNlKHdvcmRfYnJlYWtfaW5kZXgpKSk7Cisg ICAgICAgICAgfQorCisgICAgICAgICAgcmV0dXJuIHJlczsKKyAgICAgICAg fTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yZHMubGVuZ3RoOyBp KyspIHsKKyAgICAgIHZhciB0bXBBcnIgPSBzcGxpdFRleHRJbk11bHRpTGlu ZSgKKyAgICAgICAgICAgIGN1cnJfbGluZSwgd2lkdGhfc29fZmFyLCB3b3Jk c1tpXQorICAgICAgICAgICk7CisKKyAgICAgIGlmIChjdXJyX2xpbmUpIHsK KyAgICAgICAgbGluZXMgPSBsaW5lcy5zbGljZSgwLCBsaW5lcy5sZW5ndGgg LSAyKTsKKyAgICAgIH0KKyAgICAgIGxpbmVzID0gbGluZXMuY29uY2F0KHRt cEFycik7CisgICAgICBjdXJyX2xpbmUgPSBsaW5lc1tsaW5lcy5sZW5ndGgg LSAxXTsKKyAgICAgIHdpZHRoX3NvX2ZhciA9IChjdXJyX2xpbmUubGVuZ3Ro ICogbGV0dGVyX3dpZHRoKTsKKyAgICB9CisKKyAgICAvLyBDcmVhdGUgbXVs dGlwbGUgdHNwYW4gZm9yIGVhY2ggc3RyaW5nIGluIGFycmF5CisgICAgdmFy IHQgPSB0aGlzLnRleHQoeCx5LGxpbmVzKS5hdHRyKGF0dHJpYnV0ZXMpOwor ICAgIHQuc2VsZWN0QWxsKCJ0c3BhbjpudGgtY2hpbGQobisyKSIpLmF0dHIo eworICAgICAgZHk6ICIxLjJlbSIsCisgICAgICB4OiB4CisgICAgfSk7Cisg ICAgcmV0dXJuIHQ7CisgIH07Cit9KTsKKworaWYgKHBnQWRtaW4uRXhwbGFp bikKKyAgICByZXR1cm4gcGdBZG1pbi5FeHBsYWluOworCit2YXIgcGdFeHBs YWluID0gcGdBZG1pbi5FeHBsYWluID0geworICAgLy8gUHJlZml4IHBhdGgg d2hlcmUgaW1hZ2VzIGFyZSBzdG9yZWQKKyAgIHByZWZpeDogJ3t7IHVybF9m b3IoJ21pc2Muc3RhdGljJywgZmlsZW5hbWU9J2V4cGxhaW4vaW1nJykgfX0v JworfTsKKworLyoKKyAqIEEgbWFwIHdoaWNoIGlzIHVzZWQgdG8gZmV0Y2gg dGhlIGltYWdlIHRvIGJlIGRyYXduIGFuZAorICogdGV4dCB3aGljaCB3aWxs IGFwcGVhciBiZWxvdyBpdAorICovCit2YXIgaW1hZ2VNYXBwZXIgPSB7Cisg ICAgIkFnZ3JlZ2F0ZSIgOiB7CisgICAgICAgICJpbWFnZSI6ImV4X2FnZ3Jl Z2F0ZS5wbmciLCAiaW1hZ2VfdGV4dCI6IkFnZ3JlZ2F0ZSIKKyAgICB9LAor ICAgICdBcHBlbmQnIDogeworICAgICAgICAiaW1hZ2UiOiJleF9hcHBlbmQu cG5nIiwiaW1hZ2VfdGV4dCI6IkFwcGVuZCIKKyAgICB9LAorICAgICJCaXRt YXAgSW5kZXggU2NhbiIgOiBmdW5jdGlvbihkYXRhKSB7CisgICAgICAgIHJl dHVybiB7CisgICAgICAgICAgICAiaW1hZ2UiOiJleF9ibXBfaW5kZXgucG5n IiwgImltYWdlX3RleHQiOmRhdGFbJ0luZGV4IE5hbWUnXQorICAgICAgICB9 OworICAgIH0sCisgICAgIkJpdG1hcCBIZWFwIFNjYW4iIDogZnVuY3Rpb24o ZGF0YSkgeworICByZXR1cm4geyJpbWFnZSI6ImV4X2JtcF9oZWFwLnBuZyIs ImltYWdlX3RleHQiOmRhdGFbJ1JlbGF0aW9uIE5hbWUnXX07Cit9LAorIkJp dG1hcEFuZCIgOiB7ImltYWdlIjoiZXhfYm1wX2FuZC5wbmciLCJpbWFnZV90 ZXh0IjoiQml0bWFwIEFORCJ9LAorIkJpdG1hcE9yIiA6IHsiaW1hZ2UiOiJl eF9ibXBfb3IucG5nIiwiaW1hZ2VfdGV4dCI6IkJpdG1hcCBPUiJ9LAorIkNU RSBTY2FuIiA6IHsiaW1hZ2UiOiJleF9jdGVfc2Nhbi5wbmciLCJpbWFnZV90 ZXh0IjoiQ1RFIFNjYW4ifSwKKyJGdW5jdGlvbiBTY2FuIiA6IHsiaW1hZ2Ui OiJleF9yZXN1bHQucG5nIiwiaW1hZ2VfdGV4dCI6IkZ1bmN0aW9uIFNjYW4i fSwKKyJGb3JlaWduIFNjYW4iIDogeyJpbWFnZSI6ImV4X2ZvcmVpZ25fc2Nh bi5wbmciLCJpbWFnZV90ZXh0IjoiRm9yZWlnbiBTY2FuIn0sCisiR2F0aGVy IiA6IHsiaW1hZ2UiOiJleF9nYXRoZXJfbW90aW9uLnBuZyIsImltYWdlX3Rl eHQiOiJHYXRoZXIifSwKKyJHcm91cCIgOiB7ImltYWdlIjoiZXhfZ3JvdXAu cG5nIiwiaW1hZ2VfdGV4dCI6Ikdyb3VwIn0sCisiR3JvdXBBZ2dyZWdhdGUi OiB7ImltYWdlIjoiZXhfYWdncmVnYXRlLnBuZyIsImltYWdlX3RleHQiOiJH cm91cCBBZ2dyZWdhdGUifSwKKyJIYXNoIiA6IHsiaW1hZ2UiOiJleF9oYXNo LnBuZyIsImltYWdlX3RleHQiOiJIYXNoIn0sCisiSGFzaCBKb2luIjogZnVu Y3Rpb24oZGF0YSkgeworICBpZiAoIWRhdGFbJ0pvaW4gVHlwZSddKSByZXR1 cm4geyJpbWFnZSI6ImV4X2pvaW4ucG5nIiwiaW1hZ2VfdGV4dCI6IkpvaW4i fTsKKyAgc3dpdGNoKGRhdGFbJ0pvaW4gVHlwZSddKSB7CisgICAgY2FzZSAn QW50aSc6IHJldHVybiB7ImltYWdlIjoiZXhfaGFzaF9hbnRpX2pvaW4ucG5n IiwiaW1hZ2VfdGV4dCI6Ikhhc2ggQW50aSBKb2luIn07CisgICAgY2FzZSAn U2VtaSc6IHJldHVybiB7ImltYWdlIjoiZXhfaGFzaF9zZW1pX2pvaW4ucG5n IiwiaW1hZ2VfdGV4dCI6Ikhhc2ggU2VtaSBKb2luIn07CisgICAgZGVmYXVs dDogcmV0dXJuIHsiaW1hZ2UiOiJleF9oYXNoLnBuZyIsImltYWdlX3RleHQi OlN0cmluZygiSGFzaCAiICsgZGF0YVsnSm9pbiBUeXBlJ10gKyAiIEpvaW4i ICl9OworICB9Cit9LAorIkhhc2hBZ2dyZWdhdGUiIDogeyJpbWFnZSI6ImV4 X2FnZ3JlZ2F0ZS5wbmciLCJpbWFnZV90ZXh0IjoiSGFzaCBBZ2dyZWdhdGUi fSwKKyJJbmRleCBPbmx5IFNjYW4iIDogZnVuY3Rpb24oZGF0YSkgeworICBy ZXR1cm4geyJpbWFnZSI6ImV4X2luZGV4X29ubHlfc2Nhbi5wbmciLCJpbWFn ZV90ZXh0IjpkYXRhWydJbmRleCBOYW1lJ119OworfSwKKyJJbmRleCBTY2Fu IiA6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgcmV0dXJuIHsiaW1hZ2UiOiJleF9p bmRleF9zY2FuLnBuZyIsImltYWdlX3RleHQiOmRhdGFbJ0luZGV4IE5hbWUn XX07Cit9LAorIkluZGV4IFNjYW4gQmFja3dvcmQiIDogeyJpbWFnZSI6ImV4 X2luZGV4X3NjYW4ucG5nIiwiaW1hZ2VfdGV4dCI6IkluZGV4IEJhY2t3YXJk IFNjYW4ifSwKKyJMaW1pdCIgOiB7ImltYWdlIjoiZXhfbGltaXQucG5nIiwi aW1hZ2VfdGV4dCI6IkxpbWl0In0sCisiTG9ja1Jvd3MiIDogeyJpbWFnZSI6 ImV4X2xvY2tfcm93cy5wbmciLCJpbWFnZV90ZXh0IjoiTG9jayBSb3dzIn0s CisiTWF0ZXJpYWxpemUiIDogeyJpbWFnZSI6ImV4X21hdGVyaWFsaXplLnBu ZyIsImltYWdlX3RleHQiOiJNYXRlcmlhbGl6ZSJ9LAorIk1lcmdlIEFwcGVu ZCI6IHsiaW1hZ2UiOiJleF9tZXJnZV9hcHBlbmQucG5nIiwiaW1hZ2VfdGV4 dCI6Ik1lcmdlIEFwcGVuZCJ9LAorIk1lcmdlIEpvaW4iOiBmdW5jdGlvbihk YXRhKSB7CisgIHN3aXRjaChkYXRhWydKb2luIFR5cGUnXSkgeworICAgIGNh c2UgJ0FudGknOiByZXR1cm4geyJpbWFnZSI6ImV4X21lcmdlX2FudGlfam9p bi5wbmciLCJpbWFnZV90ZXh0IjoiTWVyZ2UgQW50aSBKb2luIn07CisgICAg Y2FzZSAnU2VtaSc6IHJldHVybiB7ImltYWdlIjoiZXhfbWVyZ2Vfc2VtaV9q b2luLnBuZyIsImltYWdlX3RleHQiOiJNZXJnZSBTZW1pIEpvaW4ifTsKKyAg ICBkZWZhdWx0OiByZXR1cm4geyJpbWFnZSI6ImV4X21lcmdlLnBuZyIsImlt YWdlX3RleHQiOlN0cmluZygiTWVyZ2UgIiArIGRhdGFbJ0pvaW4gVHlwZSdd ICsgIiBKb2luIiApfTsKKyAgfQorfSwKKyJNb2RpZnlUYWJsZSIgOiBmdW5j dGlvbihkYXRhKSB7CisgIHN3aXRjaCAoZGF0YVsnT3BlcmF0b24nXSkgewor ICAgIGNhc2UgImluc2VydCI6IHJldHVybiB7ICJpbWFnZSI6ImV4X2luc2Vy dC5wbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbWFnZV90 ZXh0IjoiSW5zZXJ0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsK KyAgICBjYXNlICJ1cGRhdGUiOiByZXR1cm4geyJpbWFnZSI6ImV4X3VwZGF0 ZS5wbmciLCJpbWFnZV90ZXh0IjoiVXBkYXRlIn07CisgICAgY2FzZSAiRGVs ZXRlIjogcmV0dXJuIHsiaW1hZ2UiOiJleF9kZWxldGUucG5nIiwiaW1hZ2Vf dGV4dCI6IkRlbGV0ZSJ9OworICB9Cit9LAorJ05lc3RlZCBMb29wJyA6IGZ1 bmN0aW9uKGRhdGEpIHsKKyAgc3dpdGNoKGRhdGFbJ0pvaW4gVHlwZSddKSB7 CisgICAgY2FzZSAnQW50aSc6IHJldHVybiB7ImltYWdlIjoiZXhfbmVzdGVk X2xvb3BfYW50aV9qb2luLnBuZyIsImltYWdlX3RleHQiOiJOZXN0ZWQgTG9v cCBBbnRpIEpvaW4ifTsKKyAgICBjYXNlICdTZW1pJzogcmV0dXJuIHsiaW1h Z2UiOiJleF9uZXN0ZWRfbG9vcF9zZW1pX2pvaW4ucG5nIiwiaW1hZ2VfdGV4 dCI6Ik5lc3RlZCBMb29wIFNlbWkgSm9pbiJ9OworICAgIGRlZmF1bHQ6IHJl dHVybiB7ImltYWdlIjoiZXhfbmVzdGVkLnBuZyIsImltYWdlX3RleHQiOiJO ZXN0ZWQgTG9vcCAiICsgZGF0YVsnSm9pbiBUeXBlJ10gKyAiIEpvaW4ifTsK KyAgfQorfSwKKyJSZWN1cnNpdmUgVW5pb24iIDogeyJpbWFnZSI6ImV4X3Jl Y3Vyc2l2ZV91bmlvbi5wbmciLCJpbWFnZV90ZXh0IjoiUmVjdXJzaXZlIFVu aW9uIn0sCisiUmVzdWx0IiA6IHsiaW1hZ2UiOiJleF9yZXN1bHQucG5nIiwi aW1hZ2VfdGV4dCI6IlJlc3VsdCJ9LAorIlNhbXBsZSBTY2FuIiA6IHsiaW1h Z2UiOiJleF9zY2FuLnBuZyIsImltYWdlX3RleHQiOiJTYW1wbGUgU2NhbiJ9 LAorIlNjYW4iIDogeyJpbWFnZSI6ImV4X3NjYW4ucG5nIiwiaW1hZ2VfdGV4 dCI6IlNjYW4ifSwKKyJTZWVrIiA6IHsiaW1hZ2UiOiJleF9zZWVrLnBuZyIs ImltYWdlX3RleHQiOiJTZWVrIn0sCisiU2V0T3AiIDogZnVuY3Rpb24oZGF0 YSkgeworICB2YXIgc3RyYXRlZ3kgPSBkYXRhWydTdHJhdGVneSddLAorICAg ICAgY29tbWFuZCA9IGRhdGFbJ0NvbW1hbmQnXTsKKworICBpZihzdHJhdGVn eSA9PSAiSGFzaGVkIikgeworICAgIGlmKGNvbW1hbmQuc3RhcnRzV2l0aCgi SW50ZXJzZWN0IikpIHsKKyAgICAgIGlmKGNvbW1hbmQgPT0gIkludGVyc2Vj dCBBbGwiKQorICAgICAgICByZXR1cm4geyJpbWFnZSI6ImV4X2hhc2hfc2V0 b3BfaW50ZXJzZWN0X2FsbC5wbmciLCJpbWFnZV90ZXh0IjoiSGFzaGVkIElu dGVyc2VjdCBBbGwifTsKKyAgICAgIHJldHVybiB7ImltYWdlIjoiZXhfaGFz aF9zZXRvcF9pbnRlcnNlY3QucG5nIiwiaW1hZ2VfdGV4dCI6Ikhhc2hlZCBJ bnRlcnNlY3QifTsKKyAgICB9CisgICAgZWxzZSBpZiAoY29tbWFuZC5zdGFy dHNXaXRoKCJFeGNlcHQiKSkgeworICAgICAgaWYoY29tbWFuZCA9PSAiRXhj ZXB0IEFsbCIpCisgICAgICAgIHJldHVybiB7ImltYWdlIjoiZXhfaGFzaF9z ZXRvcF9leGNlcHRfYWxsLnBuZyIsImltYWdlX3RleHQiOiJIYXNoZWQgRXhj ZXB0IEFsbCJ9OworICAgICAgcmV0dXJuIHsiaW1hZ2UiOiJleF9oYXNoX3Nl dG9wX2V4Y2VwdC5wbmciLCJpbWFnZV90ZXh0IjoiSGFzaCBFeGNlcHQifTsK KyAgICB9CisgICAgcmV0dXJuIHsiaW1hZ2UiOiJleF9oYXNoX3NldG9wX3Vu a25vd24ucG5nIiwiaW1hZ2VfdGV4dCI6Ikhhc2hlZCBTZXRPcCBVbmtub3du In07CisgIH0KKyAgcmV0dXJuIHsiaW1hZ2UiOiJleF9zZXRvcC5wbmciLCJp bWFnZV90ZXh0IjoiU2V0T3AifTsKK30sCisiU2VxIFNjYW4iOiBmdW5jdGlv bihkYXRhKSB7CisgIHJldHVybiB7ImltYWdlIjoiZXhfc2Nhbi5wbmciLCJp bWFnZV90ZXh0IjpkYXRhWydSZWxhdGlvbiBOYW1lJ119OworfSwKKyJTdWJx dWVyeSBTY2FuIiA6IHsiaW1hZ2UiOiJleF9zdWJwbGFuLnBuZyIsImltYWdl X3RleHQiOiJTdWJRdWVyeSBTY2FuIn0sCisiU29ydCIgOiB7ImltYWdlIjoi ZXhfc29ydC5wbmciLCJpbWFnZV90ZXh0IjoiU29ydCJ9LAorIlRpZCBTY2Fu IiA6IHsiaW1hZ2UiOiJleF90aWRfc2Nhbi5wbmciLCJpbWFnZV90ZXh0Ijoi VGlkIFNjYW4ifSwKKyJVbmlxdWUiIDogeyJpbWFnZSI6ImV4X3VuaXF1ZS5w bmciLCJpbWFnZV90ZXh0IjoiVW5pcXVlIn0sCisiVmFsdWVzIFNjYW4iIDog eyJpbWFnZSI6ImV4X3ZhbHVlc19zY2FuLnBuZyIsImltYWdlX3RleHQiOiJW YWx1ZXMgU2NhbiJ9LAorIldpbmRvd0FnZyIgOiB7ImltYWdlIjoiZXhfd2lu ZG93X2FnZ3JlZ2F0ZS5wbmciLCJpbWFnZV90ZXh0IjoiV2luZG93IEFnZ3Jl Z2F0ZSJ9LAorIldvcmtUYWJsZSBTY2FuIiA6IHsiaW1hZ2UiOiJleF93b3Jr dGFibGVfc2Nhbi5wbmciLCJpbWFnZV90ZXh0IjoiV29ya1RhYmxlIFNjYW4i fSwKKyJVbmRlZmluZWQiIDogeyJpbWFnZSI6ImV4X3Vua25vd24ucG5nIiwi aW1hZ2VfdGV4dCI6IlVuZGVmaW5lZCJ9LAorfQorCisvLyBTb21lIHByZWRl ZmluZWQgY29uc3RhbnRzIHVzZWQgdG8gY2FsY3VsYXRlIGltYWdlIGxvY2F0 aW9uIGFuZCBpdHMgYm9yZGVyCit2YXIgcFdJRFRIID0gcEhFSUdIVCA9IDEw MC4KKyAgICBJTUFHRV9XSURUSCA9IElNQUdFX0hFSUdIVCA9IDUwOwordmFy IG9mZnNldFggPSAyMDAsCisgICAgb2Zmc2V0WSA9IDYwOwordmFyIEFSUk9X X1dJRFRIID0gMTAsCisgICAgQVJST1dfSEVJR0hUID0gMTAsCisgICAgREVG QVVMVF9BUlJPV19TSVpFID0gMjsKK3ZhciBUWFRfQUxMSUdOID0gNSwKKyAg ICBUWFRfU0laRSA9ICIxNXB4IjsKK3ZhciBUT1RBTF9XSURUSCA9IHVuZGVm aW5lZCwKKyAgICBUT1RBTF9IRUlHSFQgPSB1bmRlZmluZWQ7Cit2YXIgeE1h cmdpbiA9IDI1LAorICAgIHlNYXJnaW4gPSAyNTsKK3ZhciBNSU5fWk9PTV9G QUNUT1IgPSAwLjAxLAorICAgIE1BWF9aT09NX0ZBQ1RPUiA9IDIsCisgICAg SU5JVF9aT09NX0ZBQ1RPUiA9IDE7CisgICAgWk9PTV9SQVRJTyA9IDAuMDU7 CisKKworLy8gQmFja2JvbmUgbW9kZWwgZm9yIGVhY2ggcGxhbiBwcm9wZXJ0 eSBvZiBpbnB1dCBKU09OIG9iamVjdAordmFyIFBsYW5Nb2RlbCA9IEJhY2ti b25lLk1vZGVsLmV4dGVuZCh7CisgICAgZGVmYXVsdHM6IHsKKyAgICAgICAg IlBsYW5zIjogW10sCisgICAgICAgIGxldmVsOiBbXSwKKyAgICAgICAgImlt YWdlIjogdW5kZWZpbmVkLAorICAgICAgICAiaW1hZ2VfdGV4dCI6IHVuZGVm aW5lZCwKKyAgICAgICAgeHBvczogdW5kZWZpbmVkLAorICAgICAgICB5cG9z OiB1bmRlZmluZWQsCisgICAgICAgIHdpZHRoOiBwV0lEVEgsCisgICAgICAg IGhlaWdodDogcEhFSUdIVAorICAgIH0sCisgICAgcGFyc2U6IGZ1bmN0aW9u KGRhdGEpIHsKKyAgICAgICAgdmFyIGlkeCA9IDEsCisgICAgICAgICAgICBs dmwgPSBkYXRhLmxldmVsID0gZGF0YS5sZXZlbCB8fCBbaWR4XSwKKyAgICAg ICAgICAgIHBsYW5zID0gW10sCisgICAgICAgICAgICBub2RlX3R5cGUgPSBk YXRhWydOb2RlIFR5cGUnXSwKKyAgICAgICAgICAgIC8vIENhbGN1bGF0aW5n IHJlbGF0aXZlIHhwb3Mgb2YgY3VycmVudCBub2RlIGZyb20gdG9wIG5vZGUK KyAgICAgICAgICAgIHhwb3MgPSBkYXRhLnhwb3MgPSBkYXRhLnhwb3MgLSBw V0lEVEgsCisgICAgICAgICAgICAvLyBDYWxjdWxhdGluZyByZWxhdGl2ZSB5 cG9zIG9mIGN1cnJlbnQgbm9kZSBmcm9tIHRvcCBub2RlCisgICAgICAgICAg ICB5cG9zID0gZGF0YS55cG9zLAorICAgICAgICAgICAgbWF4Q2hpbGRXaWR0 aCA9IDA7CisKKyAgICAgICAgZGF0YVsnd2lkdGgnXSA9IHBXSURUSDsKKyAg ICAgICAgZGF0YVsnaGVpZ2h0J10gPSBwSEVJR0hUOworCisgICAgICAgIC8q CisgICAgICAgICAqIGNhbGN1bGF0aW5nIHhwb3MsIHlwb3MsIHdpZHRoIGFu ZCBoZWlnaHQgaWYgY3VycmVudCBub2RlIGlzIGEgc3VicGxhbgorICAgICAg ICAgKi8KKyAgICAgICAgaWYgKGRhdGFbJ1BhcmVudCBSZWxhdGlvbnNoaXAn XSA9PT0gIlN1YlBsYW4iKSB7CisgICAgICAgICAgICBkYXRhWyd3aWR0aCdd ICs9ICh4TWFyZ2luICogMikgKyAoeE1hcmdpbiAvIDIpOworICAgICAgICAg ICAgZGF0YVsnaGVpZ2h0J10gKz0gKHlNYXJnaW4gKiAyKTsKKyAgICAgICAg ICAgIGRhdGFbJ3lwb3MnXSArPSB5TWFyZ2luOworICAgICAgICAgICAgeHBv cyAtPSB4TWFyZ2luOworICAgICAgICAgICAgeXBvcyArPSB5TWFyZ2luOwor ICAgICAgICB9CisKKyAgICAgICAgaWYobm9kZV90eXBlLnN0YXJ0c1dpdGgo IihzbGljZSIpKQorICAgICAgICAgICAgbm9kZV90eXBlID0gbm9kZV90eXBl LnN1YnN0cmluZygwLDcpOworCisgICAgICAgIC8vIEdldCB0aGUgaW1hZ2Ug aW5mb3JtYXRpb24gZm9yIGN1cnJlbnQgbm9kZQorICAgICAgICB2YXIgbWFw cGVyT2JqID0gKF8uaXNGdW5jdGlvbihpbWFnZU1hcHBlcltub2RlX3R5cGVd KSAmJgorICAgICAgICAgICAgICAgIGltYWdlTWFwcGVyW25vZGVfdHlwZV0u YXBwbHkodW5kZWZpbmVkLCBbZGF0YV0pKSB8fAorICAgICAgICAgICAgICAg IGltYWdlTWFwcGVyW25vZGVfdHlwZV0gfHwgJ1VuZGVmaW5lZCc7CisKKyAg ICAgICAgZGF0YVsiaW1hZ2UiXSA9IG1hcHBlck9ialsiaW1hZ2UiXTsKKyAg ICAgICAgZGF0YVsiaW1hZ2VfdGV4dCJdID0gbWFwcGVyT2JqWyJpbWFnZV90 ZXh0Il07CisKKyAgICAgICAgLy8gU3RhcnQgY2FsY3VsYXRpbmcgeHBvcywg eXBvcywgd2lkdGggYW5kIGhlaWdodCBmb3IgY2hpbGQgcGxhbnMgaWYgYW55 CisgICAgICAgIGlmICgnUGxhbnMnIGluIGRhdGEpIHsKKworICAgICAgICAg ICAgZGF0YVsnd2lkdGgnXSArPSBvZmZzZXRYOworCisgICAgICAgICAgICBf LmVhY2goZGF0YVsnUGxhbnMnXSwgZnVuY3Rpb24ocCkgeworICAgICAgICAg ICAgICAgIHZhciBsZXZlbCA9IF8uY2xvbmUobHZsKSwKKyAgICAgICAgICAg ICAgICAgICAgcGxhbiA9IG5ldyBQbGFuTW9kZWwoKTsKKworICAgICAgICAg ICAgICAgIGxldmVsLnB1c2goaWR4KTsKKyAgICAgICAgICAgICAgICBwbGFu LnNldChwbGFuLnBhcnNlKF8uZXh0ZW5kKAorICAgICAgICAgICAgICAgICAg ICBwLCB7CisgICAgICAgICAgICAgICAgICAgICAgICAibGV2ZWwiOiBsZXZl bCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHhwb3M6IHhwb3MgLSBvZmZz ZXRYLAorICAgICAgICAgICAgICAgICAgICAgICAgeXBvczogeXBvcworICAg ICAgICAgICAgICAgICAgICB9KSkpOworCisgICAgICAgICAgICAgICAgaWYg KG1heENoaWxkV2lkdGggPCBwbGFuLmdldCgnd2lkdGgnKSkgeworICAgICAg ICAgICAgICAgICAgICBtYXhDaGlsZFdpZHRoID0gcGxhbi5nZXQoJ3dpZHRo Jyk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdmFy IGNoaWxkSGVpZ2h0ID0gcGxhbi5nZXQoJ2hlaWdodCcpOworCisgICAgICAg ICAgICAgICAgaWYgKGlkeCAhPT0gMSkgeworICAgICAgICAgICAgICAgICAg ICBkYXRhWydoZWlnaHQnXSA9IGRhdGFbJ2hlaWdodCddICsgY2hpbGRIZWln aHQgKyBvZmZzZXRZOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hp bGRIZWlnaHQgPiBkYXRhWydoZWlnaHQnXSkgeworICAgICAgICAgICAgICAg ICAgICBkYXRhWydoZWlnaHQnXSA9IGNoaWxkSGVpZ2h0OworICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICB5cG9zICs9IGNoaWxkSGVpZ2h0 ICsgb2Zmc2V0WTsKKworICAgICAgICAgICAgICAgIHBsYW5zLnB1c2gocGxh bik7CisgICAgICAgICAgICAgICAgaWR4Kys7CisgICAgICAgICAgICB9KTsK KyAgICAgICAgfQorCisgICAgICAgIC8vIEZpbmFsIFdpZHRoIGFuZCBIZWln aHQgb2YgY3VycmVudCBub2RlCisgICAgICAgIGRhdGFbJ3dpZHRoJ10gKz0g bWF4Q2hpbGRXaWR0aDsKKyAgICAgICAgZGF0YVsnUGxhbnMnXSA9IHBsYW5z OworCisgICAgICAgIHJldHVybiBkYXRhOworICAgIH0sCisKKyAgICAvKgor ICAgICAqIFJlcXVpcmVkIHRvIHBhcnNlIGFuZCBpbmNsdWRlIG5vbi1kZWZh dWx0IHBhcmFtcyBvZgorICAgICAqIHBsYW4gaW50byBiYWNrYm9uZSBtb2Rl bAorICAgICAqLworICAgIHRvSlNPTjogZnVuY3Rpb24obm9uX3JlY3Vyc2l2 ZSkgeworICAgICAgdmFyIHJlcyA9IEJhY2tib25lLk1vZGVsLnByb3RvdHlw ZS50b0pTT04uYXBwbHkodGhpcywgYXJndW1lbnRzKTsKKworICAgICAgaWYg KG5vbl9yZWN1cnNpdmUpIHsKKyAgICAgICAgICAgIGRlbGV0ZSByZXNbJ1Bs YW5zJ107CisgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdmFyIHBsYW5z ID0gW107CisgICAgICAgICAgICBfLmVhY2gocmVzWydQbGFucyddLCBmdW5j dGlvbihwKSB7CisgICAgICAgICAgICAgIHBsYW5zLnB1c2gocC50b0pTT04o KSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJlc1snUGxhbnMn XSA9IHBsYW5zOworICAgICAgfQorICAgICAgcmV0dXJuIHJlczsKKyAgICB9 LAorCisgICAgLy8gRHJhdyBhbiBhcnJvdyB0byBwYXJlbnQgbm9kZQorICAg IGRyYXdQb2x5TGluZTogZnVuY3Rpb24oZywgc3RhcnRYLCBzdGFydFksIGVu ZFgsIGVuZFksIG9wdHMsIGFycm93T3B0cykgeworICAgICAgLy8gQ2FsY3Vs YXRlIGVuZCBwb2ludCBvZiBmaXJzdCBzdGFydGluZyBzdHJhaWdodCBsaW5l IChzdGFydHgxLCBzdGFydHkxKQorICAgICAgLy8gQ2FsY3VsYXRlIHN0YXJ0 IHBvaW50IG9mIDJuZCBzdHJhaWdodCBsaW5lIChlbmR4MSwgZW5keTEpCisg ICAgICB2YXIgbWlkWDEgPSBzdGFydFggKyAoKGVuZFggLSBzdGFydFgpIC8g MyksCisgICAgICAgICAgbWlkWDIgPSBzdGFydFggKyAoMiAqICgoZW5kWCAt IHN0YXJ0WCkgLyAzKSk7CisKKyAgICAgIC8vY3JlYXRlIGFycm93IGhlYWQK KyAgICAgIHZhciBhcnJvdyA9IGcucG9seWdvbigKKyAgICAgICAgICAgICAg ICAgICAgWzAsIEFSUk9XX0hFSUdIVCwKKyAgICAgICAgICAgICAgICAgICAg KEFSUk9XX1dJRFRIIC8gMiksQVJST1dfSEVJR0hULAorICAgICAgICAgICAg ICAgICAgICAoQVJST1dfSEVJR0hUIC8gNCksIDAsCisgICAgICAgICAgICAg ICAgICAgIDAsIEFSUk9XX1dJRFRIXQorICAgICAgICAgICAgICAgICAgICAp LnRyYW5zZm9ybSgicjkwIik7CisgICAgICB2YXIgbWFya2VyID0gYXJyb3cu bWFya2VyKAorICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIEFSUk9X X1dJRFRILCBBUlJPV19IRUlHSFQsIDAsIChBUlJPV19XSURUSCAvIDIpCisg ICAgICAgICAgICAgICAgICAgICAgICAgKS5hdHRyKGFycm93T3B0cyk7CisK KyAgICAgIC8vIEZpcnN0IHN0cmFpZ2h0IGxpbmUKKyAgICAgIGcubGluZSgK KyAgICAgICAgc3RhcnRYLCBzdGFydFksIG1pZFgxLCBzdGFydFkKKyAgICAg ICAgKS5hdHRyKG9wdHMpOworCisgICAgICAvLyBEaWFnb25hbCBsaW5lCisg ICAgICBnLmxpbmUoCisgICAgICAgIG1pZFgxLTEsIHN0YXJ0WSwgbWlkWDIs IGVuZFkKKyAgICAgICAgKS5hdHRyKG9wdHMpOworCisgICAgICAvLyBMYXN0 IHN0cmFpZ2h0IGxpbmUKKyAgICAgIHZhciBsaW5lID0gZy5saW5lKAorICAg ICAgICAgICAgICAgICAgIG1pZFgyLCBlbmRZLCBlbmRYLCBlbmRZCisgICAg ICAgICAgICAgICAgICAgKS5hdHRyKG9wdHMpOworICAgICAgbGluZS5hdHRy KHttYXJrZXJFbmQ6IG1hcmtlcn0pCisgICAgfSwKKworICAgIC8vIERyYXcg aW1hZ2UsIGl0cyBuYW1lIGFuZCBpdHMgdG9vbHRpcAorICAgIGRyYXc6IGZ1 bmN0aW9uKHMsIHhwb3MsIHlwb3MsIHBYcG9zLCBwWXBvcywgZ3JhcGhDb250 YWluZXIsIHRvb2xUaXBDb250YWluZXIpIHsKKyAgICAgICAgdmFyIGcgPSBz LmcoKTsKKyAgICAgICAgdmFyIGN1cnJlbnRYcG9zID0geHBvcyArIHRoaXMu Z2V0KCd4cG9zJykgLAorICAgICAgICAgICAgY3VycmVudFlwb3MgPSB5cG9z ICsgdGhpcy5nZXQoJ3lwb3MnKSwKKyAgICAgICAgICAgIGlzU3ViUGxhbiA9 ICh0aGlzLmdldCgnUGFyZW50IFJlbGF0aW9uc2hpcCcpID09PSAiU3ViUGxh biIpOworCisgICAgICAgIC8vIERyYXcgdGhlIHN1YnBsYW4gcmVjdGFuZ2xl CisgICAgICAgIGlmIChpc1N1YlBsYW4pIHsKKyAgICAgICAgICBnLnJlY3Qo CisgICAgICAgICAgICBjdXJyZW50WHBvcyAtIHRoaXMuZ2V0KCd3aWR0aCcp ICsgcFdJRFRIICsgeE1hcmdpbiwKKyAgICAgICAgICAgIGN1cnJlbnRZcG9z IC0geU1hcmdpbiwKKyAgICAgICAgICAgIHRoaXMuZ2V0KCd3aWR0aCcpIC0g eE1hcmdpbiwKKyAgICAgICAgICAgIHRoaXMuZ2V0KCdoZWlnaHQnKSwgNQor ICAgICAgICAgICkuYXR0cih7CisgICAgICAgICAgICAgIHN0cm9rZTogJyM0 NDQ0NDQnLAorICAgICAgICAgICAgICAnc3Ryb2tlV2lkdGgnOiAxLjIsCisg ICAgICAgICAgICAgIGZpbGw6ICdncmF5JywKKyAgICAgICAgICAgICAgZmls bE9wYWNpdHk6IDAuMgorICAgICAgICAgIH0pOworCisgICAgICAgICAgLy9w cm92aWRlIHN1YnBsYW4gbmFtZQorICAgICAgICAgIHZhciB0ZXh0ID0gZy50 ZXh0KAorICAgICAgICAgICAgY3VycmVudFhwb3MgICsgcFdJRFRIIC0gKCB0 aGlzLmdldCgnd2lkdGgnKSAvIDIpIC0geE1hcmdpbiwKKyAgICAgICAgICAg IGN1cnJlbnRZcG9zICsgcEhFSUdIVCAgLSAodGhpcy5nZXQoJ2hlaWdodCcp IC8gMikgLSB5TWFyZ2luLAorICAgICAgICAgICAgdGhpcy5nZXQoJ1N1YnBs YW4gTmFtZScpCisgICAgICAgICAgKS5hdHRyKHsKKyAgICAgICAgICAgIGZv bnRTaXplOiBUWFRfU0laRSwgInRleHQtYW5jaG9yIjoic3RhcnQiLAorICAg ICAgICAgICAgZmlsbDogJ3JlZCcKKyAgICAgICAgICB9KTsKKyAgICAgICAg fQorCisgICAgICAgIC8vIERyYXcgdGhlIGFjdHVhbCBpbWFnZSBmb3IgY3Vy cmVudCBub2RlCisgICAgICAgIHZhciBpbWFnZSA9IGcuaW1hZ2UoCisgICAg ICAgICAgICBwZ0V4cGxhaW4ucHJlZml4ICsgdGhpcy5nZXQoJ2ltYWdlJyks CisgICAgICAgICAgICBjdXJyZW50WHBvcyArIChwV0lEVEggLSBJTUFHRV9X SURUSCkgLyAyLAorICAgICAgICAgICAgY3VycmVudFlwb3MgKyAocEhFSUdI VCAtIElNQUdFX0hFSUdIVCkgLyAyLAorICAgICAgICAgICAgSU1BR0VfV0lE VEgsCisgICAgICAgICAgICBJTUFHRV9IRUlHSFQKKyAgICAgICAgKTsKKwor ICAgICAgICAvLyBEcmF3IHRvb2x0aXAKKyAgICAgICAgdmFyIGltYWdlX2Rh dGEgPSB0aGlzLnRvSlNPTigpOworICAgICAgICBpbWFnZS5tb3VzZW92ZXIo ZnVuY3Rpb24oZXZ0KXsKKworICAgICAgICAgIC8vIEVtcHR5IHRoZSB0b29s dGlwIGNvbnRlbnQgaWYgaXQgaGFzIGFueSBhbmQgYWRkIG5ldyBkYXRhCisg ICAgICAgICAgdG9vbFRpcENvbnRhaW5lci5lbXB0eSgpOworICAgICAgICAg IHZhciB0b29sdGlwID0gJCgnPHRhYmxlPjwvdGFibGU+Jyx7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICBjbGFzczogInBnYWRtaW4tdG9vbHRpcC10 YWJsZSIKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pLmFwcGVuZFRvKHRv b2xUaXBDb250YWluZXIpOworICAgICAgICAgIF8uZWFjaChpbWFnZV9kYXRh LCBmdW5jdGlvbih2YWx1ZSxrZXkpIHsKKyAgICAgICAgICAgIGlmKGtleSAh PT0gJ2ltYWdlJyAmJiBrZXkgIT09ICdQbGFucycgJiYKKyAgICAgICAgICAg ICAgIGtleSAhPT0gJ2xldmVsJyAmJiBrZXkgIT09ICdpbWFnZScgJiYKKyAg ICAgICAgICAgICAgIGtleSAhPT0gJ2ltYWdlX3RleHQnICYmIGtleSAhPT0g J3hwb3MnICYmCisgICAgICAgICAgICAgICBrZXkgIT09ICd5cG9zJyAmJiBr ZXkgIT09ICd3aWR0aCcgJiYKKyAgICAgICAgICAgICAgIGtleSAhPT0gJ2hl aWdodCcpIHsKKyAgICAgICAgICAgICAgdG9vbHRpcC5hcHBlbmQoICc8dHI+ PHRkIGNsYXNzPSJsYWJlbCBleHBsYWluLXRvb2x0aXAiPicgKyBrZXkgKyAn PC90ZD48dGQgY2xhc3M9ImxhYmVsIGV4cGxhaW4tdG9vbHRpcC12YWwiPicg KyB2YWx1ZSArICc8L3RkPjwvdHI+JyApOworICAgICAgICAgICAgfTsKKyAg ICAgICAgICB9KTsKKworICAgICAgICAgIHZhciB6b29tRmFjdG9yID0gZ3Jh cGhDb250YWluZXIuZGF0YSgnem9vbS1mYWN0b3InKTsKKworICAgICAgICAg IC8vIENhbGN1bGF0ZSBjby1vcmRpbmF0ZXMgZm9yIHRvb2x0aXAKKyAgICAg ICAgICB2YXIgdG9vbFRpcFggPSAoKGN1cnJlbnRYcG9zICsgcFdJRFRIKSAq IHpvb21GYWN0b3IgLSBncmFwaENvbnRhaW5lci5zY3JvbGxMZWZ0KCkpOwor ICAgICAgICAgIHZhciB0b29sVGlwWSA9ICgoY3VycmVudFlwb3MgKyBwSEVJ R0hUKSAqIHpvb21GYWN0b3IgLSBncmFwaENvbnRhaW5lci5zY3JvbGxUb3Ao KSk7CisKKyAgICAgICAgICAvLyBSZWNhbGN1bGF0ZSB4LnkgaWYgdG9vbHRp cCBpcyBnb2luZyBvdXQgb2Ygc2NyZWVuCisgICAgICAgICAgaWYoZ3JhcGhD b250YWluZXIud2lkdGgoKSA8ICh0b29sVGlwWCArIHRvb2xUaXBDb250YWlu ZXJbMF0uY2xpZW50V2lkdGgpKQorICAgICAgICAgICAgdG9vbFRpcFggLT0g KHRvb2xUaXBDb250YWluZXJbMF0uY2xpZW50V2lkdGggKyAocFdJRFRIKnpv b21GYWN0b3IpKTsKKyAgICAgICAgICAvL2lmKGRvY3VtZW50LmNoaWxkcmVu WzBdLmNsaWVudEhlaWdodCA8ICh0b29sVGlwWSArIHRvb2xUaXBDb250YWlu ZXJbMF0uY2xpZW50SGVpZ2h0KSkKKyAgICAgICAgICBpZihncmFwaENvbnRh aW5lci5oZWlnaHQoKSA8ICh0b29sVGlwWSArIHRvb2xUaXBDb250YWluZXJb MF0uY2xpZW50SGVpZ2h0KSkKKyAgICAgICAgICAgIHRvb2xUaXBZIC09ICh0 b29sVGlwQ29udGFpbmVyWzBdLmNsaWVudEhlaWdodCArICgocEhFSUdIVC8y KSp6b29tRmFjdG9yKSk7CisKKyAgICAgICAgICB0b29sVGlwWCA9IHRvb2xU aXBYIDwgMCA/IDAgOiAodG9vbFRpcFgpOworICAgICAgICAgIHRvb2xUaXBZ ID0gdG9vbFRpcFkgPCAwID8gMCA6ICh0b29sVGlwWSk7CisKKyAgICAgICAg ICAvLyBTaG93IHRvb2xUaXAgYXQgcmVzcGVjdGl2ZSB4LHkgY29vcmRpbmF0 ZXMKKyAgICAgICAgICB0b29sVGlwQ29udGFpbmVyLmNzcyh7J29wYWNpdHkn OiAnMC44J30pOworICAgICAgICAgIHRvb2xUaXBDb250YWluZXIuY3NzKCds ZWZ0JywgdG9vbFRpcFgpOworICAgICAgICAgIHRvb2xUaXBDb250YWluZXIu Y3NzKCAndG9wJywgdG9vbFRpcFkpOworICAgICAgICB9KTsKKworICAgICAg ICAvLyBSZW1vdmUgdG9vbHRpcCB3aGVuIG1vdXNlIGlzIG91dCBmcm9tIG5v ZGUncyBhcmVhCisgICAgICAgIGltYWdlLm1vdXNlb3V0KGZ1bmN0aW9uKCkg eworICAgICAgICAgIHRvb2xUaXBDb250YWluZXIuZW1wdHkoKTsKKyAgICAg ICAgICB0b29sVGlwQ29udGFpbmVyLmNzcyh7J29wYWNpdHknOiAnMCd9KTsK KyAgICAgICAgICB0b29sVGlwQ29udGFpbmVyLmNzcygnbGVmdCcsIDApOwor ICAgICAgICAgIHRvb2xUaXBDb250YWluZXIuY3NzKCAndG9wJywgMCk7Cisg ICAgICAgIH0pOworCisgICAgICAgIC8vIERyYXcgdGV4dCBiZWxvdyB0aGUg bm9kZQorICAgICAgICB2YXIgbm9kZV9sYWJlbCA9ICh0aGlzLmdldCgnU2No ZW1hJykgPT0gdW5kZWZpbmVkID8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICB0aGlzLmdldCgnaW1hZ2VfdGV4dCcpIDoKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0aGlzLmdldCgnU2NoZW1hJykrIi4iK3RoaXMuZ2V0 KCdpbWFnZV90ZXh0JykpOworICAgICAgICB2YXIgbGFiZWwgPSBnLmcoKTsK KyAgICAgICAgZy5tdWx0aXRleHQoCisgICAgICAgICAgY3VycmVudFhwb3Mg KyAocFdJRFRIIC8gMiksCisgICAgICAgICAgY3VycmVudFlwb3MgKyBwSEVJ R0hUIC0gVFhUX0FMTElHTiwKKyAgICAgICAgICBub2RlX2xhYmVsLAorICAg ICAgICAgIDE1MCwKKyAgICAgICAgICB7ImZvbnQtc2l6ZSI6IFRYVF9TSVpF ICwidGV4dC1hbmNob3IiOiJtaWRkbGUifQorICAgICAgICApOworCisgICAg ICAgIC8vIERyYXcgQXJyb3cgdG8gcGFyZW50IG9ubHkgaXRzIG5vdCB0aGUg Zmlyc3Qgbm9kZQorICAgICAgICBpZiAoIV8uaXNVbmRlZmluZWQocFlwb3Mp KSB7CisgICAgICAgICAgICB2YXIgc3RhcnR4ID0gY3VycmVudFhwb3MgKyBw V0lEVEg7CisgICAgICAgICAgICB2YXIgc3RhcnR5ID0gY3VycmVudFlwb3Mg KyAocEhFSUdIVCAvIDIpOworICAgICAgICAgICAgdmFyIGVuZHggPSBwWHBv cyAtIEFSUk9XX1dJRFRIOworICAgICAgICAgICAgdmFyIGVuZHkgPSBwWXBv cyArIChwSEVJR0hUIC8gMik7CisgICAgICAgICAgICB2YXIgc3RhcnRfY29z dCA9IHRoaXMuZ2V0KCJTdGFydHVwIENvc3QiKSwKKyAgICAgICAgICAgICAg ICB0b3RhbF9jb3N0ID0gdGhpcy5nZXQoIlRvdGFsIENvc3QiKTsKKyAgICAg ICAgICAgIHZhciBhcnJvd19zaXplID0gREVGQVVMVF9BUlJPV19TSVpFOwor ICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGFycm93IHdpZHRoIGFjY29yZGlu ZyB0byBjb3N0IG9mIGEgcGFydGljdWxhciBwbGFuCisgICAgICAgICAgICBp ZihzdGFydF9jb3N0ICE9IHVuZGVmaW5lZCAmJiB0b3RhbF9jb3N0ICE9IHVu ZGVmaW5lZCkgeworICAgICAgICAgICAgICB2YXIgYXJyb3dfc2l6ZSA9IE1h dGgucm91bmQoTWF0aC5sb2coKHN0YXJ0X2Nvc3QrdG90YWxfY29zdCkvMiAr IHN0YXJ0X2Nvc3QpKTsKKyAgICAgICAgICAgICAgYXJyb3dfc2l6ZSA9IGFy cm93X3NpemUgPCAxID8gMSA6IGFycm93X3NpemUgPiAxMCA/IDEwIDogYXJy b3dfc2l6ZTsKKyAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICB2YXIg YXJyb3dfdmlld19ib3ggPSBbMCwgMCwgMipBUlJPV19XSURUSCwgMipBUlJP V19IRUlHSFRdOworICAgICAgICAgICAgdmFyIG9wdHMgPSB7c3Ryb2tlOiAi IzAwMDAwMCIsIHN0cm9rZVdpZHRoOiBhcnJvd19zaXplICsgMX0sCisgICAg ICAgICAgICAgICAgc3VicGxhbk9wdHMgPSB7c3Ryb2tlOiAiIzg2NjQ4NiIs IHN0cm9rZVdpZHRoOiBhcnJvd19zaXplICsgMX0sCisgICAgICAgICAgICAg ICAgYXJyb3dPcHRzID0ge3ZpZXdCb3g6IGFycm93X3ZpZXdfYm94LmpvaW4o IiAiKX07CisKKyAgICAgICAgICAgIC8vIERyYXcgYW4gYXJyb3cgZnJvbSBj dXJyZW50IG5vZGUgdG8gaXRzIHBhcmVudAorICAgICAgICAgICAgdGhpcy5k cmF3UG9seUxpbmUoCisgICAgICAgICAgICAgIGcsIHN0YXJ0eCwgc3RhcnR5 LCBlbmR4LCBlbmR5LAorICAgICAgICAgICAgICBpc1N1YlBsYW4gPyBzdWJw bGFuT3B0cyA6IG9wdHMsIGFycm93T3B0cworICAgICAgICAgICAgKTsKKyAg ICAgICAgfQorCisgICAgICAgIHZhciBwbGFucyA9IHRoaXMuZ2V0KCdQbGFu cycpOworCisgICAgICAgIC8vIERyYXcgbm9kZXMgZm9yIGN1cnJlbnQgcGxh bidzIGNoaWxkcmVuCisgICAgICAgIF8uZWFjaChwbGFucywgZnVuY3Rpb24o cCkgeworICAgICAgICAgICAgcC5kcmF3KHMsIHhwb3MsIHlwb3MsIGN1cnJl bnRYcG9zLCBjdXJyZW50WXBvcywgZ3JhcGhDb250YWluZXIsIHRvb2xUaXBD b250YWluZXIpOworICAgICAgICB9KTsKKyAgICB9Cit9KTsKKworLy8gTWFp biBiYWNrYm9uZSBtb2RlbCB0byBzdG9yZSBKU09OIG9iamVjdAordmFyIE1h aW5QbGFuTW9kZWwgPSBCYWNrYm9uZS5Nb2RlbC5leHRlbmQoeworICAgIGRl ZmF1bHRzOiB7CisgICAgICAgICJQbGFuIjogdW5kZWZpbmVkLAorICAgICAg ICB4cG9zOiAwLAorICAgICAgICB5cG9zOiAwLAorICAgIH0sCisgICAgaW5p dGlhbGl6ZTogZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMuc2V0KCJQbGFu IiwgbmV3IFBsYW5Nb2RlbCgpKTsKKyAgICB9LAorCisgICAgLy8gUGFyc2Ug dGhlIEpTT04gZGF0YSBhbmQgZmV0Y2ggaXRzIGNoaWxkcmVuIHBsYW5zCisg ICAgcGFyc2U6IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgaWYgKGRhdGEg JiYgJ1BsYW4nIGluIGRhdGEpIHsKKyAgICAgICAgICAgdmFyIHBsYW4gPSB0 aGlzLmdldCgiUGxhbiIpOworICAgICAgICAgICBwbGFuLnNldCgKKyAgICAg ICAgICAgICBwbGFuLnBhcnNlKAorICAgICAgICAgICAgICAgXy5leHRlbmQo CisgICAgICAgICAgICAgICAgIGRhdGFbJ1BsYW4nXSwgeworICAgICAgICAg ICAgICAgICAgIHhwb3M6IDAsCisgICAgICAgICAgICAgICAgICAgeXBvczog MAorICAgICAgICAgICAgICAgICB9KSkpOworCisgICAgICAgICAgIGRhdGFb J3hwb3MnXSA9IDA7CisgICAgICAgICAgIGRhdGFbJ3lwb3MnXSA9IDA7Cisg ICAgICAgICAgIGRhdGFbJ3dpZHRoJ10gPSBwbGFuLmdldCgnd2lkdGgnKSAr ICh4TWFyZ2luICogMik7CisgICAgICAgICAgIGRhdGFbJ2hlaWdodCddID0g cGxhbi5nZXQoJ2hlaWdodCcpICsgKHlNYXJnaW4gKiAyKTsKKworICAgICAg ICAgICBkZWxldGUgZGF0YVsnUGxhbiddOworICAgICAgICB9CisKKyAgICAg IHJldHVybiBkYXRhOworICAgIH0sCisgICAgdG9KU09OOiBmdW5jdGlvbigp IHsKKyAgICAgIHZhciByZXMgPSBCYWNrYm9uZS5Nb2RlbC5wcm90b3R5cGUu dG9KU09OLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CisKKyAgICAgIGlmIChy ZXMuUGxhbikgeworICAgICAgICByZXMuUGxhbiA9IHJlcy5QbGFuLnRvSlNP TigpOworICAgICAgfQorCisgICAgICByZXR1cm4gcmVzOworICAgIH0sCisg ICAgZHJhdzogZnVuY3Rpb24ocywgeHBvcywgeXBvcywgZ3JhcGhDb250YWlu ZXIsIHRvb2xUaXBDb250YWluZXIpIHsKKyAgICAgICAgdmFyIGcgPSBzLmco KTsKKworICAgICAgICAvL2RyYXcgdGhlIGJvcmRlcgorICAgICAgICBnLnJl Y3QoCisJICAgICAgICAwLCAwLCB0aGlzLmdldCgnd2lkdGgnKSAtIDEwLCB0 aGlzLmdldCgnaGVpZ2h0JykgLSAxMCwgNQorCSAgICApLmF0dHIoeworICAg ICAgICAgICAgc3Ryb2tlOiAnI0ZGRUJDRCcsICdzdHJva2VXaWR0aCc6IDEu MiwKKyAgICAgICAgICAgIGZpbGw6ICcjRkZGOERDJywgZmlsbE9wYWNpdHk6 IDAuNQorICAgICAgICB9KTsKKworICAgICAgICAvL0ZldGNoIHRvdGFsIHdp ZHRoLCBoZWlnaHQKKyAgICAgICAgVE9UQUxfV0lEVEggPSB0aGlzLmdldCgn d2lkdGgnKTsKKyAgICAgICAgVE9UQUxfSEVJR0hUID0gdGhpcy5nZXQoJ2hl aWdodCcpOworICAgICAgICB2YXIgcGxhbiA9IHRoaXMuZ2V0KCdQbGFuJyk7 CisKKyAgICAgICAgLy9EcmF3IGV4cGxhaW4gZ3JhcGgKKyAgICAgICAgcGxh bi5kcmF3KGcsIHhwb3MsIHlwb3MsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBn cmFwaENvbnRhaW5lciwgdG9vbFRpcENvbnRhaW5lcik7CisgICAgfQorfSk7 CisKKy8vIFBhcnNlIGFuZCBkcmF3IGZ1bGwgZ3JhcGhpY2FsIGV4cGxhaW4K K18uZXh0ZW5kKAorICAgIHBnRXhwbGFpbiwgeworICAgICAgICAvLyBBc3N1 bXB0aW9uIGNvbnRhaW5lciBpcyBhIGpRdWVyeSBvYmplY3QKKyAgICAgICAg RHJhd0pTT05QbGFuOiBmdW5jdGlvbihjb250YWluZXIsIHBsYW4pIHsKKyAg ICAgICAgICB2YXIgbXlfcGxhbnMgPSBbXTsKKyAgICAgICAgICBjb250YWlu ZXIuZW1wdHkoKTsKKyAgICAgICAgICB2YXIgY3Vycl96b29tX2ZhY3RvciA9 IDEuMDsKKworICAgICAgICAgIHZhciB6b29tQXJlYSA9JCgnPGRpdj48L2Rp dj4nLCB7CisgICAgICAgICAgICAgICAgY2xhc3M6ICdwZy1leHBsYWluLXpv b20tYXJlYSBidG4tZ3JvdXAnLAorICAgICAgICAgICAgICAgIHJvbGU6ICdn cm91cCcKKyAgICAgICAgICAgICAgICB9KS5hcHBlbmRUbyhjb250YWluZXIp LAorICAgICAgICAgICAgICB6b29tSW5CdG4gPSAkKCc8YnV0dG9uPjwvYnV0 dG9uPicsIHsKKyAgICAgICAgICAgICAgICBjbGFzczogJ2J0biBwZy1leHBs YWluLXpvb20tYnRuIGJhZGdlJywKKyAgICAgICAgICAgICAgICB0aXRsZTog J1pvb20gaW4nCisgICAgICAgICAgICAgICAgfSkuYXBwZW5kVG8oem9vbUFy ZWEpLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICQoJzxpPjwvaT4nLHsK KyAgICAgICAgICAgICAgICAgICAgY2xhc3M6ICdmYSBmYS1zZWFyY2gtcGx1 cycKKyAgICAgICAgICAgICAgICAgIH0pKSwKKyAgICAgICAgICAgICAgem9v bVRvTm9ybWFsID0gJCgnPGJ1dHRvbj48L2J1dHRvbj4nLCB7CisgICAgICAg ICAgICAgICAgY2xhc3M6ICdidG4gcGctZXhwbGFpbi16b29tLWJ0biBiYWRn ZScsCisgICAgICAgICAgICAgICAgdGl0bGU6ICdab29tIHRvIG9yaWdpbmFs JworICAgICAgICAgICAgICAgIH0pLmFwcGVuZFRvKHpvb21BcmVhKS5hcHBl bmQoCisgICAgICAgICAgICAgICAgICAkKCc8aT48L2k+Jyx7CisgICAgICAg ICAgICAgICAgICAgIGNsYXNzOiAnZmEgZmEtYXJyb3dzLWFsdCcKKyAgICAg ICAgICAgICAgICAgIH0pKQorICAgICAgICAgICAgICB6b29tT3V0QnRuID0g JCgnPGJ1dHRvbj48L2J1dHRvbj4nLCB7CisgICAgICAgICAgICAgICAgY2xh c3M6ICdidG4gcGctZXhwbGFpbi16b29tLWJ0biBiYWRnZScsCisgICAgICAg ICAgICAgICAgdGl0bGU6ICdab29tIG91dCcKKyAgICAgICAgICAgICAgICB9 KS5hcHBlbmRUbyh6b29tQXJlYSkuYXBwZW5kKAorICAgICAgICAgICAgICAg ICAgJCgnPGk+PC9pPicsIHsKKyAgICAgICAgICAgICAgICAgICAgY2xhc3M6 ICdmYSBmYS1zZWFyY2gtbWludXMnCisgICAgICAgICAgICAgICAgICB9KSk7 CisKKyAgICAgICAgICAvLyBNYWluIGRpdiB0byBiZSBkcmF3biBhbGwgaW1h Z2VzIG9uCisgICAgICAgICAgdmFyIHBsYW5EaXYgPSAkKCc8ZGl2PjwvZGl2 PicsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y2xhc3M6ICJwZ2Fk bWluLWV4cGxhaW4tY29udGFpbmVyIn0KKyAgICAgICAgICAgICAgICAgICAg ICAgICApLmFwcGVuZFRvKGNvbnRhaW5lciksCisgICAgICAgICAgICAgIC8v IERpdiB0byBkcmF3IHRvb2wtdGlwIG9uCisgICAgICAgICAgICAgIHRvb2xU aXAgPSAkKCc8ZGl2PjwvZGl2PicsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICB7aWQ6ICJ0b29sVGlwIiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNsYXNzOiAicGdhZG1pbi1leHBsYWluLXRvb2x0aXAiCisgICAgICAg ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg ICAgKS5hcHBlbmRUbyhjb250YWluZXIpOworICAgICAgICAgIHRvb2xUaXAu ZW1wdHkoKTsKKyAgICAgICAgICBwbGFuRGl2LmRhdGEoJ3pvb20tZmFjdG9y JywgY3Vycl96b29tX2ZhY3Rvcik7CisKKyAgICAgICAgICB2YXIgdyA9IDAs IGggPSAwLAorICAgICAgICAgICAgICB4ID0geE1hcmdpbiwgaCA9IHlNYXJn aW47CisKKyAgICAgICAgICBfLmVhY2gocGxhbiwgZnVuY3Rpb24ocCkgewor ICAgICAgICAgICAgdmFyIG1haW5fcGxhbiA9IG5ldyBNYWluUGxhbk1vZGVs KCk7CisKKyAgICAgICAgICAgIC8vIFBhcnNlIEpTT04gZGF0YSB0byBiYWNr Ym9uZSBtb2RlbAorICAgICAgICAgICAgbWFpbl9wbGFuLnNldChtYWluX3Bs YW4ucGFyc2UocCkpOworICAgICAgICAgICAgdyA9IG1haW5fcGxhbi5nZXQo J3dpZHRoJyk7CisgICAgICAgICAgICBoID0gbWFpbl9wbGFuLmdldCgnaGVp Z2h0Jyk7CisKKyAgICAgICAgICAgIHZhciBzID0gU25hcCh3LCBoKSwKKyAg ICAgICAgICAgICAgICAkc3ZnID0gJChzLm5vZGUpLmRldGFjaCgpOworICAg ICAgICAgICAgcGxhbkRpdi5hcHBlbmQoJHN2Zyk7CisgICAgICAgICAgICBt YWluX3BsYW4uZHJhdyhzLCB3IC0geE1hcmdpbiwgeU1hcmdpbiwgcGxhbkRp diwgdG9vbFRpcCk7CisKKyAgICAgICAgICAgIHZhciBpbml0UGFuZWxXaWR0 aCA9IHBsYW5EaXYud2lkdGgoKSwKKyAgICAgICAgICAgICAgICBpbml0UGFu ZWxIZWlnaHQgPSBwbGFuRGl2LmhlaWdodCgpOworCisgICAgICAgICAgICAg LyoKKyAgICAgICAgICAgICAgKiBTY2FsZSBncmFwaCBpbiBjYXNlIGl0cyB3 aWR0aCBpcyBiaWdnZXIgdGhhbiBwYW5lbCB3aWR0aAorICAgICAgICAgICAg ICAqIGluIHdoaWNoIHRoZSBncmFwaCBpcyBkaXNwbGF5ZWQKKyAgICAgICAg ICAgICAgKi8KKyAgICAgICAgICAgIGlmKGluaXRQYW5lbFdpZHRoIDwgdykg eworICAgICAgICAgICAgICB2YXIgd2lkdGhfcmF0aW8gPSBpbml0UGFuZWxX aWR0aCAvIHc7CisKKyAgICAgICAgICAgICAgY3Vycl96b29tX2ZhY3RvciA9 IHdpZHRoX3JhdGlvOworICAgICAgICAgICAgICBjdXJyX3pvb21fZmFjdG9y ID0gY3Vycl96b29tX2ZhY3RvciA8IE1JTl9aT09NX0ZBQ1RPUiA/IE1JTl9a T09NX0ZBQ1RPUiA6IGN1cnJfem9vbV9mYWN0b3I7CisgICAgICAgICAgICAg IGN1cnJfem9vbV9mYWN0b3IgPSBjdXJyX3pvb21fZmFjdG9yID4gSU5JVF9a T09NX0ZBQ1RPUiA/IElOSVRfWk9PTV9GQUNUT1IgOiBjdXJyX3pvb21fZmFj dG9yOworCisgICAgICAgICAgICAgIHZhciB6b29tSW5NYXRyaXggPSBuZXcg U25hcC5tYXRyaXgoKTsKKyAgICAgICAgICAgICAgem9vbUluTWF0cml4LnNj YWxlKGN1cnJfem9vbV9mYWN0b3IsIGN1cnJfem9vbV9mYWN0b3IpOworCisg ICAgICAgICAgICAgICRzdmcuZmluZCgnZycpLmZpcnN0KCkuYXR0cih7dHJh bnNmb3JtOiB6b29tSW5NYXRyaXh9KTsKKyAgICAgICAgICAgICAgJHN2Zy5h dHRyKHsnd2lkdGgnOiB3ICogY3Vycl96b29tX2ZhY3RvciwgJ2hlaWdodCc6 IGggKiBjdXJyX3pvb21fZmFjdG9yfSk7CisgICAgICAgICAgICAgIHBsYW5E aXYuZGF0YSgnem9vbS1mYWN0b3InLCBjdXJyX3pvb21fZmFjdG9yKTsKKyAg ICAgICAgICAgIH0KKworICAgICAgICAgICAgem9vbUluQnRuLm9uKCdjbGlj aycsIGZ1bmN0aW9uKGUpeworICAgICAgICAgICAgICBjdXJyX3pvb21fZmFj dG9yID0gKChjdXJyX3pvb21fZmFjdG9yICsgWk9PTV9SQVRJTykgPiBNQVhf Wk9PTV9GQUNUT1IpID8gTUFYX1pPT01fRkFDVE9SIDogKGN1cnJfem9vbV9m YWN0b3IgKyBaT09NX1JBVElPKTsKKyAgICAgICAgICAgICAgdmFyIHpvb21J bk1hdHJpeCA9IG5ldyBTbmFwLm1hdHJpeCgpOworICAgICAgICAgICAgICB6 b29tSW5NYXRyaXguc2NhbGUoY3Vycl96b29tX2ZhY3RvciwgY3Vycl96b29t X2ZhY3Rvcik7CisKKyAgICAgICAgICAgICAgJHN2Zy5maW5kKCdnJykuZmly c3QoKS5hdHRyKHt0cmFuc2Zvcm06IHpvb21Jbk1hdHJpeH0pOworICAgICAg ICAgICAgICAkc3ZnLmF0dHIoeyd3aWR0aCc6IHcgKiBjdXJyX3pvb21fZmFj dG9yLCAnaGVpZ2h0JzogaCAqIGN1cnJfem9vbV9mYWN0b3J9KTsKKyAgICAg ICAgICAgICAgcGxhbkRpdi5kYXRhKCd6b29tLWZhY3RvcicsIGN1cnJfem9v bV9mYWN0b3IpOworICAgICAgICAgICAgICB6b29tSW5CdG4uYmx1cigpOwor ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHpvb21PdXRCdG4ub24o J2NsaWNrJywgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgICBjdXJyX3pv b21fZmFjdG9yID0gKChjdXJyX3pvb21fZmFjdG9yIC0gWk9PTV9SQVRJTykg PCBNSU5fWk9PTV9GQUNUT1IpID8gTUlOX1pPT01fRkFDVE9SIDogKGN1cnJf em9vbV9mYWN0b3IgLSBaT09NX1JBVElPKTsKKyAgICAgICAgICAgICAgdmFy IHpvb21Jbk1hdHJpeCA9IG5ldyBTbmFwLm1hdHJpeCgpOworICAgICAgICAg ICAgICB6b29tSW5NYXRyaXguc2NhbGUoY3Vycl96b29tX2ZhY3RvciwgY3Vy cl96b29tX2ZhY3Rvcik7CisKKyAgICAgICAgICAgICAgJHN2Zy5maW5kKCdn JykuZmlyc3QoKS5hdHRyKHt0cmFuc2Zvcm06IHpvb21Jbk1hdHJpeH0pOwor ICAgICAgICAgICAgICAkc3ZnLmF0dHIoeyd3aWR0aCc6IHcgKiBjdXJyX3pv b21fZmFjdG9yLCAnaGVpZ2h0JzogaCAqIGN1cnJfem9vbV9mYWN0b3J9KTsK KyAgICAgICAgICAgICAgcGxhbkRpdi5kYXRhKCd6b29tLWZhY3RvcicsIGN1 cnJfem9vbV9mYWN0b3IpOworICAgICAgICAgICAgICB6b29tT3V0QnRuLmJs dXIoKTsKKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB6b29tVG9O b3JtYWwub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkgeworICAgICAgICAgICAg ICBjdXJyX3pvb21fZmFjdG9yID0gSU5JVF9aT09NX0ZBQ1RPUjsKKyAgICAg ICAgICAgICAgdmFyIHpvb21Jbk1hdHJpeCA9IG5ldyBTbmFwLm1hdHJpeCgp OworICAgICAgICAgICAgICB6b29tSW5NYXRyaXguc2NhbGUoY3Vycl96b29t X2ZhY3RvciwgY3Vycl96b29tX2ZhY3Rvcik7CisKKyAgICAgICAgICAgICAg JHN2Zy5maW5kKCdnJykuZmlyc3QoKS5hdHRyKHt0cmFuc2Zvcm06IHpvb21J bk1hdHJpeH0pOworICAgICAgICAgICAgICAkc3ZnLmF0dHIoeyd3aWR0aCc6 IHcgKiBjdXJyX3pvb21fZmFjdG9yLCAnaGVpZ2h0JzogaCAqIGN1cnJfem9v bV9mYWN0b3J9KTsKKyAgICAgICAgICAgICAgcGxhbkRpdi5kYXRhKCd6b29t LWZhY3RvcicsIGN1cnJfem9vbV9mYWN0b3IpOworICAgICAgICAgICAgICB6 b29tVG9Ob3JtYWwuYmx1cigpOworICAgICAgICAgICAgfSk7CisgICAgICAg ICAgfSk7CisKKyAgICAgICAgfQorICAgIH0pOworCisgICAgcmV0dXJuIHBn RXhwbGFpbjsKK30pOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMv ZGF0YWdyaWQvdGVtcGxhdGVzL2RhdGFncmlkL2luZGV4Lmh0bWwgYi93ZWIv cGdhZG1pbi90b29scy9kYXRhZ3JpZC90ZW1wbGF0ZXMvZGF0YWdyaWQvaW5k ZXguaHRtbAppbmRleCBkZGI5ZDhmLi4xMzY2MDE3IDEwMDY0NAotLS0gYS93 ZWIvcGdhZG1pbi90b29scy9kYXRhZ3JpZC90ZW1wbGF0ZXMvZGF0YWdyaWQv aW5kZXguaHRtbAorKysgYi93ZWIvcGdhZG1pbi90b29scy9kYXRhZ3JpZC90 ZW1wbGF0ZXMvZGF0YWdyaWQvaW5kZXguaHRtbApAQCAtNjYsMTAgKzY2LDUz IEBAIGJvZHkgewogICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAg ICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUgZHJvcGRvd24tbWVudSI+CiAg ICAgICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICA8YSBpZD0iYnRu LWV4cGxhaW4iIGhyZWY9IiMiPgorICAgICAgICAgICAgICAgICAgPHNwYW4+ e3sgXygnRXhwbGFpbicpIH19PC9zcGFuPgorICAgICAgICAgICAgICAgIDwv YT4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgPGxpPgor ICAgICAgICAgICAgICAgIDxhIGlkPSJidG4tZXhwbGFpbi1hbmFseXplIiBo cmVmPSIjIj4KKyAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgXygnRXhw bGFpbiBhbmFseXplJykgfX08L3NwYW4+CisgICAgICAgICAgICAgICAgPC9h PgorICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAgICA8bGkgY2xh c3M9ImRpdmlkZXIiPjwvbGk+CisgICAgICAgICAgICAgIDxsaSBjbGFzcz0i ZHJvcGRvd24tc3VibWVudSBkcm9wZG93bi1zdWJtZW51Ij4KKyAgICAgICAg ICAgICAgICA8YSBocmVmPSIjIj57eyBfKCdFeHBsYWluIE9wdGlvbnMnKSB9 fTwvYT4KKyAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1l bnUiPgorICAgICAgICAgICAgICAgICAgPGxpPgorICAgICAgICAgICAgICAg ICAgICA8YSBpZD0iYnRuLWV4cGxhaW4tdmVyYm9zZSIgaHJlZj0iIyIgY2xh c3M9Im5vY2xvc2UiPgorICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNz PSJleHBsYWluLXZlcmJvc2UgZmEgZmEtY2hlY2sgdmlzaWJpbGl0eS1oaWRk ZW4iIGFyaWEtaGlkZGVuPSJ0cnVlIj48L2k+CisgICAgICAgICAgICAgICAg ICAgICAgPHNwYW4+IHt7IF8oJ1ZlcmJvc2UnKSB9fSA8L3NwYW4+CisgICAg ICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgICAgIDwvbGk+ CisgICAgICAgICAgICAgICAgICA8bGk+CisgICAgICAgICAgICAgICAgICAg IDxhIGlkPSJidG4tZXhwbGFpbi1jb3N0cyIgaHJlZj0iIyIgY2xhc3M9Im5v Y2xvc2UiPgorICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJleHBs YWluLWNvc3RzIGZhIGZhLWNoZWNrIHZpc2liaWxpdHktaGlkZGVuIiBhcmlh LWhpZGRlbj0idHJ1ZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgIDxz cGFuPiB7eyBfKCdDb3N0cycpIH19IDwvc3Bhbj4KKyAgICAgICAgICAgICAg ICAgICAgPC9hPgorICAgICAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAg ICAgICAgICAgIDxsaT4KKyAgICAgICAgICAgICAgICAgICAgPGEgaWQ9ImJ0 bi1leHBsYWluLWJ1ZmZlcnMiIGhyZWY9IiMiIGNsYXNzPSJub2Nsb3NlIj4K KyAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0iZXhwbGFpbi1idWZm ZXJzIGZhIGZhLWNoZWNrIHZpc2liaWxpdHktaGlkZGVuIiBhcmlhLWhpZGRl bj0idHJ1ZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiB7 eyBfKCdCdWZmZXJzJykgfX0gPC9zcGFuPgorICAgICAgICAgICAgICAgICAg ICA8L2E+CisgICAgICAgICAgICAgICAgICA8L2xpPgorICAgICAgICAgICAg ICAgICAgPGxpPgorICAgICAgICAgICAgICAgICAgICA8YSBpZD0iYnRuLWV4 cGxhaW4tdGltaW5nIiBocmVmPSIjIiBjbGFzcz0ibm9jbG9zZSI+CisgICAg ICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9ImV4cGxhaW4tdGltaW5nIGZh IGZhLWNoZWNrIHZpc2liaWxpdHktaGlkZGVuIiBhcmlhLWhpZGRlbj0idHJ1 ZSI+PC9pPgorICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiB7eyBfKCdU aW1pbmcnKSB9fSA8L3NwYW4+CisgICAgICAgICAgICAgICAgICAgIDwvYT4K KyAgICAgICAgICAgICAgICAgIDwvbGk+CisgICAgICAgICAgICAgICAgPC91 bD4KKyAgICAgICAgICAgICAgPC9saT4KKyAgICAgICAgICAgICAgPGxpIGNs YXNzPSJkaXZpZGVyIj48L2xpPgorICAgICAgICAgICAgICA8bGk+CiAgICAg ICAgICAgICAgICAgPGEgaWQ9ImJ0bi1hdXRvLWNvbW1pdCIgaHJlZj0iIyI+ CiAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSJhdXRvLWNvbW1pdCBm YSBmYS1jaGVjayIgYXJpYS1oaWRkZW49InRydWUiPjwvaT4KICAgICAgICAg ICAgICAgICAgICAgPHNwYW4+IHt7IF8oJ0F1dG8tQ29tbWl0JykgfX0gPC9z cGFuPgogICAgICAgICAgICAgICAgIDwvYT4KKyAgICAgICAgICAgICAgPC9s aT4KKyAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgIDxhIGlk PSJidG4tYXV0by1yb2xsYmFjayIgaHJlZj0iIyI+CiAgICAgICAgICAgICAg ICAgICAgIDxpIGNsYXNzPSJhdXRvLXJvbGxiYWNrIGZhIGZhLWNoZWNrIHZp c2liaWxpdHktaGlkZGVuIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PC9pPgogICAg ICAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgXygnQXV0by1Sb2xsYmFjaycp IH19IDwvc3Bhbj4KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL3Rvb2xzL3Nx bGVkaXRvci9fX2luaXRfXy5weSBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVk aXRvci9fX2luaXRfXy5weQppbmRleCAzOTE3ZjNkLi44NzE2MDkwIDEwMDY0 NAotLS0gYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvX19pbml0X18u cHkKKysrIGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL19faW5pdF9f LnB5CkBAIC0xNyw3ICsxNyw4IEBAIGZyb20gZmxhc2sgaW1wb3J0IFJlc3Bv bnNlLCB1cmxfZm9yLCByZW5kZXJfdGVtcGxhdGUsIHNlc3Npb24sIHJlcXVl c3QKIGZyb20gZmxhc2suZXh0LmJhYmVsIGltcG9ydCBnZXR0ZXh0CiBmcm9t IGZsYXNrLmV4dC5zZWN1cml0eSBpbXBvcnQgbG9naW5fcmVxdWlyZWQKIGZy b20gcGdhZG1pbi51dGlscyBpbXBvcnQgUGdBZG1pbk1vZHVsZQotZnJvbSBw Z2FkbWluLnV0aWxzLmFqYXggaW1wb3J0IG1ha2VfanNvbl9yZXNwb25zZSwg YmFkX3JlcXVlc3QsIHN1Y2Nlc3NfcmV0dXJuLCBpbnRlcm5hbF9zZXJ2ZXJf ZXJyb3IKK2Zyb20gcGdhZG1pbi51dGlscy5hamF4IGltcG9ydCBtYWtlX2pz b25fcmVzcG9uc2UsIGJhZF9yZXF1ZXN0LCBcCisgICAgIHN1Y2Nlc3NfcmV0 dXJuLCBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IKIGZyb20gcGdhZG1pbi51dGls cy5kcml2ZXIgaW1wb3J0IGdldF9kcml2ZXIKIGZyb20gY29uZmlnIGltcG9y dCBQR19ERUZBVUxUX0RSSVZFUgogZnJvbSBwZ2FkbWluLnRvb2xzLnNxbGVk aXRvci5jb21tYW5kIGltcG9ydCBRdWVyeVRvb2xDb21tYW5kCkBAIC02Niw2 ICs2Nyw0MiBAQCBjbGFzcyBTcWxFZGl0b3JNb2R1bGUoUGdBZG1pbk1vZHVs ZSk6CiAgICAgICAgICAgICBjYXRlZ29yeV9sYWJlbD1nZXR0ZXh0KCdEaXNw bGF5JykKICAgICAgICAgICAgICkKIAorICAgICAgICBzZWxmLmV4cGxhaW5f dmVyYm9zZSA9IHNlbGYucHJlZmVyZW5jZS5yZWdpc3RlcigKKyAgICAgICAg ICAgICdFeHBsYWluIE9wdGlvbnMnLCAnZXhwbGFpbl92ZXJib3NlJywKKyAg ICAgICAgICAgIGdldHRleHQoIlZlcmJvc2UiKSwgJ2Jvb2xlYW4nLCBGYWxz ZSwKKyAgICAgICAgICAgIGNhdGVnb3J5X2xhYmVsPWdldHRleHQoJ0V4cGxh aW4gT3B0aW9ucycpCisgICAgICAgICAgICApCisKKyAgICAgICAgc2VsZi5l eHBsYWluX2Nvc3RzID0gc2VsZi5wcmVmZXJlbmNlLnJlZ2lzdGVyKAorICAg ICAgICAgICAgJ0V4cGxhaW4gT3B0aW9ucycsICdleHBsYWluX2Nvc3RzJywK KyAgICAgICAgICAgIGdldHRleHQoIkNvc3RzIiksICdib29sZWFuJywgRmFs c2UsCisgICAgICAgICAgICBjYXRlZ29yeV9sYWJlbD1nZXR0ZXh0KCdFeHBs YWluIE9wdGlvbnMnKQorICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYu ZXhwbGFpbl9idWZmZXJzID0gc2VsZi5wcmVmZXJlbmNlLnJlZ2lzdGVyKAor ICAgICAgICAgICAgJ0V4cGxhaW4gT3B0aW9ucycsICdleHBsYWluX2J1ZmZl cnMnLAorICAgICAgICAgICAgZ2V0dGV4dCgiQnVmZmVycyIpLCAnYm9vbGVh bicsIEZhbHNlLAorICAgICAgICAgICAgY2F0ZWdvcnlfbGFiZWw9Z2V0dGV4 dCgnRXhwbGFpbiBPcHRpb25zJykKKyAgICAgICAgICAgICkKKworICAgICAg ICBzZWxmLmV4cGxhaW5fdGltaW5nID0gc2VsZi5wcmVmZXJlbmNlLnJlZ2lz dGVyKAorICAgICAgICAgICAgJ0V4cGxhaW4gT3B0aW9ucycsICdleHBsYWlu X3RpbWluZycsCisgICAgICAgICAgICBnZXR0ZXh0KCJUaW1pbmciKSwgJ2Jv b2xlYW4nLCBGYWxzZSwKKyAgICAgICAgICAgIGNhdGVnb3J5X2xhYmVsPWdl dHRleHQoJ0V4cGxhaW4gT3B0aW9ucycpCisgICAgICAgICAgICApCisKKyAg ICAgICAgc2VsZi5hdXRvX2NvbW1pdCA9IHNlbGYucHJlZmVyZW5jZS5yZWdp c3RlcigKKyAgICAgICAgICAgICdPcHRpb25zJywgJ2F1dG9fY29tbWl0JywK KyAgICAgICAgICAgIGdldHRleHQoIkF1dG8tQ29tbWl0IiksICdib29sZWFu JywgVHJ1ZSwKKyAgICAgICAgICAgIGNhdGVnb3J5X2xhYmVsPWdldHRleHQo J09wdGlvbnMnKQorICAgICAgICAgICAgKQorCisgICAgICAgIHNlbGYuYXV0 b19yb2xsYmFjayA9IHNlbGYucHJlZmVyZW5jZS5yZWdpc3RlcigKKyAgICAg ICAgICAgICdPcHRpb25zJywgJ2F1dG9fcm9sbGJhY2snLAorICAgICAgICAg ICAgZ2V0dGV4dCgiQXV0by1Sb2xsYmFjayIpLCAnYm9vbGVhbicsIEZhbHNl LAorICAgICAgICAgICAgY2F0ZWdvcnlfbGFiZWw9Z2V0dGV4dCgnT3B0aW9u cycpCisgICAgICAgICAgICApCisKIGJsdWVwcmludCA9IFNxbEVkaXRvck1v ZHVsZShNT0RVTEVfTkFNRSwgX19uYW1lX18sIHN0YXRpY191cmxfcGF0aD0n L3N0YXRpYycpCiAKIApAQCAtMjc3LDYgKzMxNCw0MyBAQCBkZWYgc3RhcnRf cXVlcnlfdG9vbCh0cmFuc19pZCk6CiAgICAgICAgICkKIAogCitAYmx1ZXBy aW50LnJvdXRlKCcvcXVlcnlfdG9vbC9wcmVmZXJlbmNlcycsIG1ldGhvZHM9 WyJHRVQiLCAiUFVUIl0pCitAbG9naW5fcmVxdWlyZWQKK2RlZiBnZXRfcHJl ZmVyZW5jZXMoKToKKyAgICAiIiIKKyAgICAgICAgVGhpcyBtZXRob2QgaXMg dXNlZCB0byBnZXQvcHV0IGV4cGxhaW4gb3B0aW9ucyBmcm9tL3RvIHByZWZl cmVuY2VzCisgICAgIiIiCisgICAgaWYgcmVxdWVzdC5tZXRob2QgPT0gJ0dF VCc6CisgICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAg ICAgICAgICBkYXRhPXsKKyAgICAgICAgICAgICAgICAnZXhwbGFpbl92ZXJi b3NlJzogYmx1ZXByaW50LmV4cGxhaW5fdmVyYm9zZS5nZXQoKSwKKyAgICAg ICAgICAgICAgICAnZXhwbGFpbl9jb3N0cyc6IGJsdWVwcmludC5leHBsYWlu X2Nvc3RzLmdldCgpLAorICAgICAgICAgICAgICAgICdleHBsYWluX2J1ZmZl cnMnOiBibHVlcHJpbnQuZXhwbGFpbl9idWZmZXJzLmdldCgpLAorICAgICAg ICAgICAgICAgICdleHBsYWluX3RpbWluZyc6IGJsdWVwcmludC5leHBsYWlu X3RpbWluZy5nZXQoKSwKKyAgICAgICAgICAgICAgICAnYXV0b19jb21taXQn OiBibHVlcHJpbnQuYXV0b19jb21taXQuZ2V0KCksCisgICAgICAgICAgICAg ICAgJ2F1dG9fcm9sbGJhY2snOiBibHVlcHJpbnQuYXV0b19yb2xsYmFjay5n ZXQoKQorICAgICAgICAgICAgfQorICAgICAgICApCisgICAgZWxzZToKKyAg ICAgICAgZGF0YSA9IE5vbmUKKyAgICAgICAgaWYgcmVxdWVzdC5kYXRhOgor ICAgICAgICAgICAgZGF0YSA9IGpzb24ubG9hZHMocmVxdWVzdC5kYXRhLmRl Y29kZSgpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZGF0YSA9IHJl cXVlc3QuYXJncyBvciByZXF1ZXN0LmZvcm0KKyAgICAgICAgZm9yIGssdiBp biBkYXRhLml0ZW1zKCk6CisgICAgICAgICAgICB2ID0gYm9vbCh2KQorICAg ICAgICAgICAgaWYgayA9PSAnZXhwbGFpbl92ZXJib3NlJzoKKyAgICAgICAg ICAgICAgICBibHVlcHJpbnQuZXhwbGFpbl92ZXJib3NlLnNldCh2KQorICAg ICAgICAgICAgZWxpZiBrID09ICdleHBsYWluX2Nvc3RzJzoKKyAgICAgICAg ICAgICAgICBibHVlcHJpbnQuZXhwbGFpbl9jb3N0cy5zZXQodikKKyAgICAg ICAgICAgIGVsaWYgayA9PSAnZXhwbGFpbl9idWZmZXJzJzoKKyAgICAgICAg ICAgICAgICBibHVlcHJpbnQuZXhwbGFpbl9idWZmZXJzLnNldCh2KQorICAg ICAgICAgICAgZWxpZiBrID09ICdleHBsYWluX3RpbWluZyc6CisgICAgICAg ICAgICAgICAgYmx1ZXByaW50LmV4cGxhaW5fdGltaW5nLnNldCh2KQorCisg ICAgICAgIHJldHVybiBzdWNjZXNzX3JldHVybigpCisKKwogQGJsdWVwcmlu dC5yb3V0ZSgnL3BvbGwvPGludDp0cmFuc19pZD4nLCBtZXRob2RzPVsiR0VU Il0pCiBAbG9naW5fcmVxdWlyZWQKIGRlZiBwb2xsKHRyYW5zX2lkKToKQEAg LTczOSw2ICs4MTMsOSBAQCBkZWYgc2V0X2F1dG9fY29tbWl0KHRyYW5zX2lk KToKICAgICAgICAgIyBDYWxsIHRoZSBzZXRfYXV0b19jb21taXQgbWV0aG9k IG9mIHRyYW5zYWN0aW9uIG9iamVjdAogICAgICAgICB0cmFuc19vYmouc2V0 X2F1dG9fY29tbWl0KGF1dG9fY29tbWl0KQogCisgICAgICAgICMgU2V0IEF1 dG8gY29tbWl0IGluIHByZWZlcmVuY2VzCisgICAgICAgIGJsdWVwcmludC5h dXRvX2NvbW1pdC5zZXQoYm9vbChhdXRvX2NvbW1pdCkpCisKICAgICAgICAg IyBBcyB3ZSBjaGFuZ2VkIHRoZSB0cmFuc2FjdGlvbiBvYmplY3Qgd2UgbmVl ZCB0bwogICAgICAgICAjIHJlc3RvcmUgaXQgYW5kIHVwZGF0ZSB0aGUgc2Vz c2lvbiB2YXJpYWJsZS4KICAgICAgICAgc2Vzc2lvbl9vYmpbJ2NvbW1hbmRf b2JqJ10gPSBwaWNrbGUuZHVtcHModHJhbnNfb2JqLCAtMSkKQEAgLTc3NCw2 ICs4NTEsOSBAQCBkZWYgc2V0X2F1dG9fcm9sbGJhY2sodHJhbnNfaWQpOgog ICAgICAgICAjIENhbGwgdGhlIHNldF9hdXRvX3JvbGxiYWNrIG1ldGhvZCBv ZiB0cmFuc2FjdGlvbiBvYmplY3QKICAgICAgICAgdHJhbnNfb2JqLnNldF9h dXRvX3JvbGxiYWNrKGF1dG9fcm9sbGJhY2spCiAKKyAgICAgICAgIyBTZXQg QXV0byBSb2xsYmFjayBpbiBwcmVmZXJlbmNlcworICAgICAgICBibHVlcHJp bnQuYXV0b19yb2xsYmFjay5zZXQoYm9vbChhdXRvX3JvbGxiYWNrKSkKKwog ICAgICAgICAjIEFzIHdlIGNoYW5nZWQgdGhlIHRyYW5zYWN0aW9uIG9iamVj dCB3ZSBuZWVkIHRvCiAgICAgICAgICMgcmVzdG9yZSBpdCBhbmQgdXBkYXRl IHRoZSBzZXNzaW9uIHZhcmlhYmxlLgogICAgICAgICBzZXNzaW9uX29ialsn Y29tbWFuZF9vYmonXSA9IHBpY2tsZS5kdW1wcyh0cmFuc19vYmosIC0xKQpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3N0YXRp Yy9jc3Mvc3FsZWRpdG9yLmNzcyBiL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVk aXRvci9zdGF0aWMvY3NzL3NxbGVkaXRvci5jc3MKaW5kZXggZGVlM2VhMS4u NmRiMDRjYiAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRp dG9yL3N0YXRpYy9jc3Mvc3FsZWRpdG9yLmNzcworKysgYi93ZWIvcGdhZG1p bi90b29scy9zcWxlZGl0b3Ivc3RhdGljL2Nzcy9zcWxlZGl0b3IuY3NzCkBA IC0yMzYsMyArMjM2LDEwIEBACiAuQ29kZU1pcnJvci1mb2xkZ3V0dGVyLWZv bGRlZDphZnRlciB7CiAgIGNvbnRlbnQ6ICJcMjVCNiI7CiB9CisKKworLnNx bC1lZGl0b3ItZXhwbGFpbiB7CisgIGhlaWdodDogMTAwJTsKKyAgd2lkdGg6 IDEwMCU7CisgIG92ZXJmbG93OiBhdXRvOworfQpkaWZmIC0tZ2l0IGEvd2Vi L3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3RlbXBsYXRlcy9zcWxlZGl0b3Iv anMvc3FsZWRpdG9yLmpzIGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9y L3RlbXBsYXRlcy9zcWxlZGl0b3IvanMvc3FsZWRpdG9yLmpzCmluZGV4IGVl NTMzYTEuLmE3ODA4MDkgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xz L3NxbGVkaXRvci90ZW1wbGF0ZXMvc3FsZWRpdG9yL2pzL3NxbGVkaXRvci5q cworKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVtcGxhdGVz L3NxbGVkaXRvci9qcy9zcWxlZGl0b3IuanMKQEAgLTEsMTAgKzEsMTAgQEAK IGRlZmluZSgKLSAgWydqcXVlcnknLCAndW5kZXJzY29yZScsICdhbGVydGlm eScsICdwZ2FkbWluJywgJ2JhY2tib25lJywgJ2JhY2tncmlkJywgJ2NvZGVt aXJyb3InLAotICAgJ2NvZGVtaXJyb3IvbW9kZS9zcWwvc3FsJywgJ2NvZGVt aXJyb3IvYWRkb24vc2VsZWN0aW9uL21hcmstc2VsZWN0aW9uJywgJ2NvZGVt aXJyb3IvYWRkb24vc2VsZWN0aW9uL2FjdGl2ZS1saW5lJywKKyAgWydqcXVl cnknLCAndW5kZXJzY29yZScsICd1bmRlcnNjb3JlLnN0cmluZycsICdhbGVy dGlmeScsICdwZ2FkbWluJywgJ3BnYWRtaW4ubWlzYy5leHBsYWluJywKKyAg ICdiYWNrYm9uZScsICdiYWNrZ3JpZCcsICdjb2RlbWlycm9yJywgJ2NvZGVt aXJyb3IvbW9kZS9zcWwvc3FsJywgJ2NvZGVtaXJyb3IvYWRkb24vc2VsZWN0 aW9uL21hcmstc2VsZWN0aW9uJywKICAgICdjb2RlbWlycm9yL2FkZG9uL2Zv bGQvZm9sZGd1dHRlcicsICdjb2RlbWlycm9yL2FkZG9uL2ZvbGQvZm9sZGNv ZGUnLCAnY29kZW1pcnJvci9hZGRvbi9mb2xkL3BnYWRtaW4tc3FsZm9sZGNv ZGUnLAotICAgJ2JhY2tncmlkLnNlbGVjdC5hbGwnLCAnYmFja2JvbmUucGFn aW5hdG9yJywgJ2JhY2tncmlkLnBhZ2luYXRvcicsICdiYWNrZ3JpZC5maWx0 ZXInLAotICAgJ2Jvb3RzdHJhcCcsICdwZ2FkbWluLmJyb3dzZXInLCAnd2Nk b2NrZXInXSwKLSAgZnVuY3Rpb24oJCwgXywgYWxlcnRpZnksIHBnQWRtaW4s IEJhY2tib25lLCBCYWNrZ3JpZCwgQ29kZU1pcnJvcikgeworICAgJ2NvZGVt aXJyb3IvYWRkb24vc2VsZWN0aW9uL2FjdGl2ZS1saW5lJywgJ2JhY2tncmlk LnNlbGVjdC5hbGwnLCAnYmFja2JvbmUucGFnaW5hdG9yJywgJ2JhY2tncmlk LnBhZ2luYXRvcicsCisgICAnYmFja2dyaWQuZmlsdGVyJywgJ2Jvb3RzdHJh cCcsICdwZ2FkbWluLmJyb3dzZXInLCAnd2Nkb2NrZXInXSwKKyAgZnVuY3Rp b24oJCwgXywgUywgYWxlcnRpZnksIHBnQWRtaW4sIHBnRXhwbGFpbiwgQmFj a2JvbmUsIEJhY2tncmlkLCBDb2RlTWlycm9yKSB7CiAKICAgICAvLyBTb21l IHNjcmlwdHMgZG8gZXhwb3J0IHRoZWlyIG9iamVjdCBpbiB0aGUgd2luZG93 IG9ubHkuCiAgICAgLy8gR2VuZXJhbGx5IHRoZSBvbmUsIHdoaWNoIGRvIG5v IGhhdmUgQU1EIHN1cHBvcnQuCkBAIC0xNjEsNiArMTYxLDEyIEBAIGRlZmlu ZSgKICAgICAgICAgImNsaWNrICNidG4tYXV0by1yb2xsYmFjayI6ICJvbl9h dXRvX3JvbGxiYWNrIiwKICAgICAgICAgImNsaWNrICNidG4tY2xlYXItaGlz dG9yeSI6ICJvbl9jbGVhcl9oaXN0b3J5IiwKICAgICAgICAgImNsaWNrIC5u b2Nsb3NlIjogJ2RvX25vdF9jbG9zZV9tZW51JywKKyAgICAgICAgImNsaWNr ICNidG4tZXhwbGFpbiI6ICJvbl9leHBsYWluIiwKKyAgICAgICAgImNsaWNr ICNidG4tZXhwbGFpbi1hbmFseXplIjogIm9uX2V4cGxhaW5fYW5hbHl6ZSIs CisgICAgICAgICJjbGljayAjYnRuLWV4cGxhaW4tdmVyYm9zZSI6ICJvbl9l eHBsYWluX3ZlcmJvc2UiLAorICAgICAgICAiY2xpY2sgI2J0bi1leHBsYWlu LWNvc3RzIjogIm9uX2V4cGxhaW5fY29zdHMiLAorICAgICAgICAiY2xpY2sg I2J0bi1leHBsYWluLWJ1ZmZlcnMiOiAib25fZXhwbGFpbl9idWZmZXJzIiwK KyAgICAgICAgImNsaWNrICNidG4tZXhwbGFpbi10aW1pbmciOiAib25fZXhw bGFpbl90aW1pbmciLAogICAgICAgICAiY2hhbmdlIC5saW1pdCI6ICJvbl9s aW1pdF9jaGFuZ2UiCiAgICAgICB9LAogCkBAIC0yMDUsNyArMjExLDYgQEAg ZGVmaW5lKAogICAgICAgICAgIGlzUHJpdmF0ZTogdHJ1ZQogICAgICAgICB9 KTsKIAotICAgICAgICAvL3NxbF9wYW5lbC5sb2FkKG1haW5fZG9ja2VyKTsK ICAgICAgICAgc3FsX3BhbmVsLmxvYWQobWFpbl9kb2NrZXIpOwogICAgICAg ICB2YXIgc3FsX3BhbmVsX29iaiA9IG1haW5fZG9ja2VyLmFkZFBhbmVsKCdz cWxfcGFuZWwnLCB3Y0RvY2tlci5ET0NLLlRPUCk7CiAKQEAgLTI0Nyw3ICsy NTIsNyBAQCBkZWZpbmUoCiAgICAgICAgICAgaGVpZ2h0OicxMDAlJywKICAg ICAgICAgICBpc0Nsb3NlYWJsZTogZmFsc2UsCiAgICAgICAgICAgaXNQcml2 YXRlOiB0cnVlLAotICAgICAgICAgIGNvbnRlbnQ6ICc8ZGl2IGNsYXNzPSJz cWwtZWRpdG9yLWV4cGxpYW4iPjwvZGl2PicKKyAgICAgICAgICBjb250ZW50 OiAnPGRpdiBjbGFzcz0ic3FsLWVkaXRvci1leHBsYWluIj48L2Rpdj4nCiAg ICAgICAgIH0pCiAKICAgICAgICAgdmFyIG1lc3NhZ2VzID0gbmV3IHBnQWRt aW4uQnJvd3Nlci5QYW5lbCh7CkBAIC0yODMsNiArMjg4LDg3IEBAIGRlZmlu ZSgKICAgICAgICAgc2VsZi5oaXN0b3J5X3BhbmVsID0gbWFpbl9kb2NrZXIu YWRkUGFuZWwoJ2hpc3RvcnknLCB3Y0RvY2tlci5ET0NLLlNUQUNLRUQsIHNl bGYuZGF0YV9vdXRwdXRfcGFuZWwpOwogCiAgICAgICAgIHNlbGYucmVuZGVy X2hpc3RvcnlfZ3JpZCgpOworCisgICAgICAgIC8vIEdldCBhdXRvLXJvbGxi YWNrL2F1dG8tY29tbWl0IGFuZCBleHBsYWluIG9wdGlvbnMgZnJvbSBwcmVm ZXJlbmNlcworICAgICAgICBzZWxmLmdldF9wcmVmZXJlbmNlcygpOworICAg ICAgfSwKKworICAgICAgLyoKKyAgICAgICAqIFRoaXMgZnVuY3Rpb24gZ2V0 IGV4cGxhaW4gb3B0aW9ucyBhbmQgYXV0byByb2xsYmFjay9hdXRvIGNvbW1p dAorICAgICAgICogdmFsdWVzIGZyb20gcHJlZmVyZW5jZXMKKyAgICAgICAq LworICAgICAgZ2V0X3ByZWZlcmVuY2VzOiBmdW5jdGlvbigpIHsKKyAgICAg ICAgJC5hamF4KHsKKyAgICAgICAgICB1cmw6ICJ7eyB1cmxfZm9yKCdzcWxl ZGl0b3IuaW5kZXgnKSB9fSIgKyAicXVlcnlfdG9vbC9wcmVmZXJlbmNlcyIg LAorICAgICAgICAgIG1ldGhvZDogJ0dFVCcsCisgICAgICAgICAgYXN5bmM6 IGZhbHNlLAorICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uKHJlcykgewor ICAgICAgICAgICAgaWYgKHJlcy5kYXRhKSB7CisgICAgICAgICAgICAgIHNl bGYuZXhwbGFpbl92ZXJib3NlID0gcmVzLmRhdGEuZXhwbGFpbl92ZXJib3Nl OworICAgICAgICAgICAgICBzZWxmLmV4cGxhaW5fY29zdHMgPSByZXMuZGF0 YS5leHBsYWluX2Nvc3RzOworICAgICAgICAgICAgICBzZWxmLmV4cGxhaW5f YnVmZmVycyA9IHJlcy5kYXRhLmV4cGxhaW5fYnVmZmVyczsKKyAgICAgICAg ICAgICAgc2VsZi5leHBsYWluX3RpbWluZyA9IHJlcy5kYXRhLmV4cGxhaW5f dGltaW5nOworICAgICAgICAgICAgICBzZWxmLmF1dG9fY29tbWl0ID0gcmVz LmRhdGEuYXV0b19jb21taXQ7CisgICAgICAgICAgICAgIHNlbGYuYXV0b19y b2xsYmFjayA9IHJlcy5kYXRhLmF1dG9fcm9sbGJhY2s7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgc2VsZi5l eHBsYWluX3ZlcmJvc2UgPSBmYWxzZTsKKyAgICAgICAgICAgICAgc2VsZi5l eHBsYWluX2Nvc3RzID0gZmFsc2U7CisgICAgICAgICAgICAgIHNlbGYuZXhw bGFpbl9idWZmZXJzID0gZmFsc2U7CisgICAgICAgICAgICAgIHNlbGYuZXhw bGFpbl90aW1pbmcgPSBmYWxzZTsKKyAgICAgICAgICAgICAgc2VsZi5hdXRv X2NvbW1pdCA9IHRydWU7CisgICAgICAgICAgICAgIHNlbGYuYXV0b19yb2xs YmFjayA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgIH0sCisg ICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uKGUpIHsKKyAgICAgICAgICAgIHNl bGYuZXhwbGFpbl92ZXJib3NlID0gZmFsc2U7CisgICAgICAgICAgICBzZWxm LmV4cGxhaW5fY29zdHMgPSBmYWxzZTsKKyAgICAgICAgICAgIHNlbGYuZXhw bGFpbl9idWZmZXJzID0gZmFsc2U7CisgICAgICAgICAgICBzZWxmLmV4cGxh aW5fdGltaW5nID0gZmFsc2U7CisgICAgICAgICAgICBzZWxmLmF1dG9fY29t bWl0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHNlbGYuYXV0b19yb2xsYmFjayA9 IGZhbHNlOworICAgICAgICAgIH0KKyAgICAgICAgfSk7CisKKyAgICAgICAg Ly8gU2V0IEF1dG8tY29tbWl0IGFuZCBhdXRvLXJvbGxiYWNrIG9uIHF1ZXJ5 IGVkaXRvcgorICAgICAgICBpZiAoc2VsZi5hdXRvX2NvbW1pdCAmJgorICAg ICAgICAgICAgJCgnLmF1dG8tY29tbWl0JykuaGFzQ2xhc3MoJ3Zpc2liaWxp dHktaGlkZGVuJykgPT09IHRydWUpCisgICAgICAgICAgJCgnLmF1dG8tY29t bWl0JykucmVtb3ZlQ2xhc3MoJ3Zpc2liaWxpdHktaGlkZGVuJyk7CisgICAg ICAgIGVsc2UgeworICAgICAgICAgICQoJy5hdXRvLWNvbW1pdCcpLmFkZENs YXNzKCd2aXNpYmlsaXR5LWhpZGRlbicpOworICAgICAgICB9CisgICAgICAg IGlmIChzZWxmLmF1dG9fcm9sbGJhY2sgJiYKKyAgICAgICAgICAgICQoJy5h dXRvLXJvbGxiYWNrJykuaGFzQ2xhc3MoJ3Zpc2liaWxpdHktaGlkZGVuJykg PT09IHRydWUpCisgICAgICAgICAgJCgnLmF1dG8tcm9sbGJhY2snKS5yZW1v dmVDbGFzcygndmlzaWJpbGl0eS1oaWRkZW4nKTsKKyAgICAgICAgZWxzZSB7 CisgICAgICAgICAgJCgnLmF1dG8tcm9sbGJhY2snKS5hZGRDbGFzcygndmlz aWJpbGl0eS1oaWRkZW4nKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFNl dCBleHBsYWluIG9wdGlvbnMgb24gcXVlcnkgZWRpdG9yCisgICAgICAgIGlm IChzZWxmLmV4cGxhaW5fdmVyYm9zZSAmJgorICAgICAgICAgICAgJCgnLmV4 cGxhaW4tdmVyYm9zZScpLmhhc0NsYXNzKCd2aXNpYmlsaXR5LWhpZGRlbicp ID09PSB0cnVlKQorICAgICAgICAgICQoJy5leHBsYWluLXZlcmJvc2UnKS5y ZW1vdmVDbGFzcygndmlzaWJpbGl0eS1oaWRkZW4nKTsKKyAgICAgICAgZWxz ZSB7CisgICAgICAgICAgJCgnLmV4cGxhaW4tdmVyYm9zZScpLmFkZENsYXNz KCd2aXNpYmlsaXR5LWhpZGRlbicpOworICAgICAgICB9CisgICAgICAgIGlm IChzZWxmLmV4cGxhaW5fY29zdHMgJiYKKyAgICAgICAgICAgICQoJy5leHBs YWluLWNvc3RzJykuaGFzQ2xhc3MoJ3Zpc2liaWxpdHktaGlkZGVuJykgPT09 IHRydWUpCisgICAgICAgICAgJCgnLmV4cGxhaW4tY29zdHMnKS5yZW1vdmVD bGFzcygndmlzaWJpbGl0eS1oaWRkZW4nKTsKKyAgICAgICAgZWxzZSB7Cisg ICAgICAgICAgJCgnLmV4cGxhaW4tY29zdHMnKS5hZGRDbGFzcygndmlzaWJp bGl0eS1oaWRkZW4nKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc2VsZi5l eHBsYWluX2J1ZmZlcnMgJiYKKyAgICAgICAgICAgICQoJy5leHBsYWluLWJ1 ZmZlcnMnKS5oYXNDbGFzcygndmlzaWJpbGl0eS1oaWRkZW4nKSA9PT0gdHJ1 ZSkKKyAgICAgICAgICAgICQoJy5leHBsYWluLWJ1ZmZlcnMnKS5yZW1vdmVD bGFzcygndmlzaWJpbGl0eS1oaWRkZW4nKTsKKyAgICAgICAgZWxzZSB7Cisg ICAgICAgICAgICAkKCcuZXhwbGFpbi1idWZmZXJzJykuYWRkQ2xhc3MoJ3Zp c2liaWxpdHktaGlkZGVuJyk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNl bGYuZXhwbGFpbl90aW1pbmcgJiYKKyAgICAgICAgICAgICQoJy5leHBsYWlu LXRpbWluZycpLmhhc0NsYXNzKCd2aXNpYmlsaXR5LWhpZGRlbicpID09PSB0 cnVlKQorICAgICAgICAgICAgJCgnLmV4cGxhaW4tdGltaW5nJykucmVtb3Zl Q2xhc3MoJ3Zpc2liaWxpdHktaGlkZGVuJyk7CisgICAgICAgIGVsc2Ugewor ICAgICAgICAgICAgJCgnLmV4cGxhaW4tdGltaW5nJykuYWRkQ2xhc3MoJ3Zp c2liaWxpdHktaGlkZGVuJyk7CisgICAgICAgIH0KICAgICAgIH0sCiAKICAg ICAgIC8qIFRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgdG8gY3JlYXRl IGFuZCByZW5kZXIgdGhlCkBAIC02MzksNiArNzI1LDc5IEBAIGRlZmluZSgK ICAgICAgICAgICAgIHNlbGYuaGFuZGxlcgogICAgICAgICApOwogICAgICAg fSwKKworICAgICAgLy8gQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIGV4cGxhaW4g YnV0dG9uIGNsaWNrLgorICAgICAgb25fZXhwbGFpbjogZnVuY3Rpb24oKSB7 CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICAvLyBUcmln Z2VyIHRoZSBleHBsYWluIHNpZ25hbCB0byB0aGUgU3FsRWRpdG9yQ29udHJv bGxlciBjbGFzcworICAgICAgICBzZWxmLmhhbmRsZXIudHJpZ2dlcigKKyAg ICAgICAgICAgICdwZ2FkbWluLXNxbGVkaXRvcjpidXR0b246ZXhwbGFpbics CisgICAgICAgICAgICBzZWxmLAorICAgICAgICAgICAgc2VsZi5oYW5kbGVy CisgICAgICAgICk7CisgICAgICB9LAorCisgICAgICAvLyBDYWxsYmFjayBm dW5jdGlvbiBmb3IgZXhwbGFpbiBhbmFseXplIGJ1dHRvbiBjbGljay4KKyAg ICAgIG9uX2V4cGxhaW5fYW5hbHl6ZTogZnVuY3Rpb24oKSB7CisgICAgICAg IHZhciBzZWxmID0gdGhpczsKKworICAgICAgICAvLyBUcmlnZ2VyIHRoZSBl eHBsYWluIGFuYWx5emUgc2lnbmFsIHRvIHRoZSBTcWxFZGl0b3JDb250cm9s bGVyIGNsYXNzCisgICAgICAgIHNlbGYuaGFuZGxlci50cmlnZ2VyKAorICAg ICAgICAgICAgJ3BnYWRtaW4tc3FsZWRpdG9yOmJ1dHRvbjpleHBsYWluLWFu YWx5emUnLAorICAgICAgICAgICAgc2VsZiwKKyAgICAgICAgICAgIHNlbGYu aGFuZGxlcgorICAgICAgICApOworICAgICAgfSwKKworICAgICAgLy8gQ2Fs bGJhY2sgZnVuY3Rpb24gZm9yIGV4cGxhaW4gb3B0aW9uICJ2ZXJib3NlIiBi dXR0b24gY2xpY2sKKyAgICAgIG9uX2V4cGxhaW5fdmVyYm9zZTogZnVuY3Rp b24oKSB7CisgICAgICAgIHZhciBzZWxmID0gdGhpczsKKworICAgICAgICAv LyBUcmlnZ2VyIHRoZSBleHBsYWluICJ2ZXJib3NlIiBzaWduYWwgdG8gdGhl IFNxbEVkaXRvckNvbnRyb2xsZXIgY2xhc3MKKyAgICAgICAgc2VsZi5oYW5k bGVyLnRyaWdnZXIoCisgICAgICAgICAgICAncGdhZG1pbi1zcWxlZGl0b3I6 YnV0dG9uOmV4cGxhaW4tdmVyYm9zZScsCisgICAgICAgICAgICBzZWxmLAor ICAgICAgICAgICAgc2VsZi5oYW5kbGVyCisgICAgICAgICk7CisgICAgICB9 LAorCisgICAgICAvLyBDYWxsYmFjayBmdW5jdGlvbiBmb3IgZXhwbGFpbiBv cHRpb24gImNvc3RzIiBidXR0b24gY2xpY2sKKyAgICAgIG9uX2V4cGxhaW5f Y29zdHM6IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgc2VsZiA9IHRoaXM7 CisKKyAgICAgICAgLy8gVHJpZ2dlciB0aGUgZXhwbGFpbiAiY29zdHMiIHNp Z25hbCB0byB0aGUgU3FsRWRpdG9yQ29udHJvbGxlciBjbGFzcworICAgICAg ICBzZWxmLmhhbmRsZXIudHJpZ2dlcigKKyAgICAgICAgICAgICdwZ2FkbWlu LXNxbGVkaXRvcjpidXR0b246ZXhwbGFpbi1jb3N0cycsCisgICAgICAgICAg ICBzZWxmLAorICAgICAgICAgICAgc2VsZi5oYW5kbGVyCisgICAgICAgICk7 CisgICAgICB9LAorCisgICAgICAvLyBDYWxsYmFjayBmdW5jdGlvbiBmb3Ig ZXhwbGFpbiBvcHRpb24gImJ1ZmZlcnMiIGJ1dHRvbiBjbGljaworICAgICAg b25fZXhwbGFpbl9idWZmZXJzOiBmdW5jdGlvbigpIHsKKyAgICAgICAgdmFy IHNlbGYgPSB0aGlzOworCisgICAgICAgIC8vIFRyaWdnZXIgdGhlIGV4cGxh aW4gImJ1ZmZlcnMiIHNpZ25hbCB0byB0aGUgU3FsRWRpdG9yQ29udHJvbGxl ciBjbGFzcworICAgICAgICBzZWxmLmhhbmRsZXIudHJpZ2dlcigKKyAgICAg ICAgICAgICdwZ2FkbWluLXNxbGVkaXRvcjpidXR0b246ZXhwbGFpbi1idWZm ZXJzJywKKyAgICAgICAgICAgIHNlbGYsCisgICAgICAgICAgICBzZWxmLmhh bmRsZXIKKyAgICAgICAgKTsKKyAgICAgIH0sCisKKyAgICAgIC8vIENhbGxi YWNrIGZ1bmN0aW9uIGZvciBleHBsYWluIG9wdGlvbiAidGltaW5nIiBidXR0 b24gY2xpY2sKKyAgICAgIG9uX2V4cGxhaW5fdGltaW5nOiBmdW5jdGlvbigp IHsKKyAgICAgICAgdmFyIHNlbGYgPSB0aGlzOworCisgICAgICAgIC8vIFRy aWdnZXIgdGhlIGV4cGxhaW4gInRpbWluZyIgc2lnbmFsIHRvIHRoZSBTcWxF ZGl0b3JDb250cm9sbGVyIGNsYXNzCisgICAgICAgIHNlbGYuaGFuZGxlci50 cmlnZ2VyKAorICAgICAgICAgICAgJ3BnYWRtaW4tc3FsZWRpdG9yOmJ1dHRv bjpleHBsYWluLXRpbWluZycsCisgICAgICAgICAgICBzZWxmLAorICAgICAg ICAgICAgc2VsZi5oYW5kbGVyCisgICAgICAgICk7CisgICAgICB9LAorCiAg ICAgICBkb19ub3RfY2xvc2VfbWVudTogZnVuY3Rpb24oZXYpIHsKICAgICAg ICAgZXYuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICB9CkBAIC02NzEsNiAr ODMwLDEwIEBAIGRlZmluZSgKICAgICAgICAgICBzZWxmLml0ZW1zX3Blcl9w YWdlID0gMjU7CiAgICAgICAgICAgc2VsZi5yb3dzX2FmZmVjdGVkID0gMDsK ICAgICAgICAgICBzZWxmLm1hcmtlZF9saW5lX25vID0gMDsKKyAgICAgICAg ICBzZWxmLmV4cGxhaW5fdmVyYm9zZSA9IGZhbHNlOworICAgICAgICAgIHNl bGYuZXhwbGFpbl9jb3N0cyA9IGZhbHNlOworICAgICAgICAgIHNlbGYuZXhw bGFpbl9idWZmZXJzID0gZmFsc2U7CisgICAgICAgICAgc2VsZi5leHBsYWlu X3RpbWluZyA9IGZhbHNlOwogCiAgICAgICAgICAgLy8gV2UgZG8gbm90IGFs bG93IHRvIGNhbGwgdGhlIHN0YXJ0IG11bHRpcGxlIHRpbWVzLgogICAgICAg ICAgIGlmIChzZWxmLmdyaWRWaWV3KQpAQCAtNzAzLDYgKzg2NiwxMiBAQCBk ZWZpbmUoCiAgICAgICAgICAgc2VsZi5vbigncGdhZG1pbi1zcWxlZGl0b3I6 YnV0dG9uOmRvd25sb2FkJywgc2VsZi5fZG93bmxvYWQsIHNlbGYpOwogICAg ICAgICAgIHNlbGYub24oJ3BnYWRtaW4tc3FsZWRpdG9yOmJ1dHRvbjphdXRv X3JvbGxiYWNrJywgc2VsZi5fYXV0b19yb2xsYmFjaywgc2VsZik7CiAgICAg ICAgICAgc2VsZi5vbigncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9uOmF1dG9f Y29tbWl0Jywgc2VsZi5fYXV0b19jb21taXQsIHNlbGYpOworICAgICAgICAg IHNlbGYub24oJ3BnYWRtaW4tc3FsZWRpdG9yOmJ1dHRvbjpleHBsYWluJywg c2VsZi5fZXhwbGFpbiwgc2VsZik7CisgICAgICAgICAgc2VsZi5vbigncGdh ZG1pbi1zcWxlZGl0b3I6YnV0dG9uOmV4cGxhaW4tYW5hbHl6ZScsIHNlbGYu X2V4cGxhaW5fYW5hbHl6ZSwgc2VsZik7CisgICAgICAgICAgc2VsZi5vbign cGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9uOmV4cGxhaW4tdmVyYm9zZScsIHNl bGYuX2V4cGxhaW5fdmVyYm9zZSwgc2VsZik7CisgICAgICAgICAgc2VsZi5v bigncGdhZG1pbi1zcWxlZGl0b3I6YnV0dG9uOmV4cGxhaW4tY29zdHMnLCBz ZWxmLl9leHBsYWluX2Nvc3RzLCBzZWxmKTsKKyAgICAgICAgICBzZWxmLm9u KCdwZ2FkbWluLXNxbGVkaXRvcjpidXR0b246ZXhwbGFpbi1idWZmZXJzJywg c2VsZi5fZXhwbGFpbl9idWZmZXJzLCBzZWxmKTsKKyAgICAgICAgICBzZWxm Lm9uKCdwZ2FkbWluLXNxbGVkaXRvcjpidXR0b246ZXhwbGFpbi10aW1pbmcn LCBzZWxmLl9leHBsYWluX3RpbWluZywgc2VsZik7CiAKICAgICAgICAgICBp ZiAoc2VsZi5pc19xdWVyeV90b29sKSB7CiAgICAgICAgICAgICBzZWxmLmdy aWRWaWV3LnF1ZXJ5X3Rvb2xfb2JqLnJlZnJlc2goKTsKQEAgLTc0Myw2ICs5 MTIsNyBAQCBkZWZpbmUoCiAgICAgICAgICAgICAgICAgc2VsZi5ncmlkVmll dy5xdWVyeV90b29sX29iai5zZXRWYWx1ZShyZXMuZGF0YS5zcWwpOwogICAg ICAgICAgICAgICAgIHNlbGYucXVlcnkgPSByZXMuZGF0YS5zcWw7CiAKKwog ICAgICAgICAgICAgICAgIC8qIElmIGZpbHRlciBpcyBhcHBsaWVkIHRoZW4g cmVtb3ZlIGNsYXNzICdidG4tZGVmYXVsdCcKICAgICAgICAgICAgICAgICAg KiBhbmQgYWRkICdidG4td2FybmluZycgdG8gY2hhbmdlIHRoZSBjb2xvdXIg b2YgdGhlIGJ1dHRvbi4KICAgICAgICAgICAgICAgICAgKi8KQEAgLTg4MCw2 ICsxMDUwLDcgQEAgZGVmaW5lKAogICAgICAgICAgIHNlbGYuY2VsbF9zZWxl Y3RlZCA9IGZhbHNlOwogICAgICAgICAgIHNlbGYuc2VsZWN0ZWRfbW9kZWwg PSBudWxsOwogICAgICAgICAgIHNlbGYuY2hhbmdlZE1vZGVscyA9IFtdOwor ICAgICAgICAgICQoJy5zcWwtZWRpdG9yLWV4cGxhaW4nKS5lbXB0eSgpOwog CiAgICAgICAgICAgLy8gU3RvcCBsaXN0ZW5pbmcgdG8gYWxsIHRoZSBldmVu dHMKICAgICAgICAgICBpZiAoc2VsZi5jb2xsZWN0aW9uKSB7CkBAIC05NDgs MTAgKzExMTksMjYgQEAgZGVmaW5lKAogICAgICAgICAgIHZhciBtZXNzYWdl ID0gJ1RvdGFsIHF1ZXJ5IHJ1bnRpbWU6ICcgKyBzZWxmLnRvdGFsX3RpbWUg KyAnXG4nICsgc2VsZi5yb3dzX2FmZmVjdGVkICsgJyByb3dzIHJldHJpZXZl ZC4nOwogICAgICAgICAgICQoJy5zcWwtZWRpdG9yLW1lc3NhZ2UnKS50ZXh0 KG1lc3NhZ2UpOwogCi0gICAgICAgICAgLy8gQWRkIHRoZSBkYXRhIHRvIHRo ZSBjb2xsZWN0aW9uIGFuZCByZW5kZXIgdGhlIGdyaWQuCi0gICAgICAgICAg c2VsZi5jb2xsZWN0aW9uLmFkZChkYXRhLnJlc3VsdCwge3BhcnNlOiB0cnVl fSk7Ci0gICAgICAgICAgc2VsZi5ncmlkVmlldy5yZW5kZXJfZ3JpZChzZWxm LmNvbGxlY3Rpb24sIHNlbGYuY29sdW1ucyk7Ci0gICAgICAgICAgc2VsZi5n cmlkVmlldy5kYXRhX291dHB1dF9wYW5lbC5mb2N1cygpOworICAgICAgICAg IC8qIEFkZCB0aGUgZGF0YSB0byB0aGUgY29sbGVjdGlvbiBhbmQgcmVuZGVy IHRoZSBncmlkLgorICAgICAgICAgICAqIEluIGNhc2Ugb2YgRXhwbGFpbiBk cmF3IHRoZSBncmFwaCBvbiBleHBsYWluIHBhbmVsCisgICAgICAgICAgICog YW5kIGFkZCBqc29uIGZvcm1hdHRlZCBkYXRhIHRvIGNvbGxlY3Rpb24gYW5k IHJlbmRlci4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICB2YXIgZXhwbGFp bl9kYXRhX2FycmF5ID0gW107CisgICAgICAgICAgaWYoZGF0YS5yZXN1bHQg JiYKKyAgICAgICAgICAgICAgJ1FVRVJZIFBMQU4nIGluIGRhdGEucmVzdWx0 WzBdICYmCisgICAgICAgICAgICAgIF8uaXNPYmplY3QoZGF0YS5yZXN1bHRb MF1bJ1FVRVJZIFBMQU4nXSkpIHsKKyAgICAgICAgICAgICAgdmFyIGV4cGxh aW5fZGF0YSA9IHsnUVVFUlkgUExBTicgOiBKU09OLnN0cmluZ2lmeShkYXRh LnJlc3VsdFswXVsnUVVFUlkgUExBTiddLCBudWxsLCAyKX07CisgICAgICAg ICAgICAgIGV4cGxhaW5fZGF0YV9hcnJheS5wdXNoKGV4cGxhaW5fZGF0YSk7 CisgICAgICAgICAgICAgIHNlbGYuZ3JpZFZpZXcuZXhwbGFpbl9wYW5lbC5m b2N1cygpOworICAgICAgICAgICAgICBwZ0V4cGxhaW4uRHJhd0pTT05QbGFu KCQoJy5zcWwtZWRpdG9yLWV4cGxhaW4nKSwgZGF0YS5yZXN1bHRbMF1bJ1FV RVJZIFBMQU4nXSk7CisgICAgICAgICAgICAgIHNlbGYuY29sbGVjdGlvbi5h ZGQoZXhwbGFpbl9kYXRhX2FycmF5LCB7cGFyc2U6IHRydWV9KTsKKyAgICAg ICAgICAgICAgc2VsZi5ncmlkVmlldy5yZW5kZXJfZ3JpZChzZWxmLmNvbGxl Y3Rpb24sIHNlbGYuY29sdW1ucyk7CisgICAgICAgICAgfQorICAgICAgICAg IGVsc2UgeworICAgICAgICAgICAgc2VsZi5jb2xsZWN0aW9uLmFkZChkYXRh LnJlc3VsdCwge3BhcnNlOiB0cnVlfSk7CisgICAgICAgICAgICBzZWxmLmdy aWRWaWV3LnJlbmRlcl9ncmlkKHNlbGYuY29sbGVjdGlvbiwgc2VsZi5jb2x1 bW5zKTsKKyAgICAgICAgICAgIHNlbGYuZ3JpZFZpZXcuZGF0YV9vdXRwdXRf cGFuZWwuZm9jdXMoKTsKKyAgICAgICAgICB9CiAKICAgICAgICAgICAvLyBI aWRlIHRoZSBsb2FkaW5nIGljb24KICAgICAgICAgICBzZWxmLnRyaWdnZXIo J3BnYWRtaW4tc3FsZWRpdG9yOmxvYWRpbmctaWNvbjpoaWRlJyk7CkBAIC0x NzAwLDE2ICsxODg3LDExIEBAIGRlZmluZSgKIAogICAgICAgICAvLyBUaGlz IGZ1bmN0aW9uIHdpbGwgZmV0Y2ggdGhlIHNxbCBxdWVyeSBmcm9tIHRoZSB0 ZXh0IGJveAogICAgICAgICAvLyBhbmQgZXhlY3V0ZSB0aGUgcXVlcnkuCi0g ICAgICAgIF9leGVjdXRlOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIF9leGVj dXRlOiBmdW5jdGlvbiAoZXhwbGFpbl9wcmVmaXgpIHsKICAgICAgICAgICB2 YXIgc2VsZiA9IHRoaXMsCiAgICAgICAgICAgICAgIHNxbCA9ICcnLAogICAg ICAgICAgICAgICBoaXN0b3J5X21zZyA9ICcnOwogCi0gICAgICAgICAgc2Vs Zi50cmlnZ2VyKAotICAgICAgICAgICAgJ3BnYWRtaW4tc3FsZWRpdG9yOmxv YWRpbmctaWNvbjpzaG93JywKLSAgICAgICAgICAgICd7eyBfKCdJbml0aWFs aXppbmcgcXVlcnkgZXhlY3V0aW9uLicpIH19JwotICAgICAgICAgICk7Ci0K ICAgICAgICAgICAvKiBJZiBjb2RlIGlzIHNlbGVjdGVkIGluIHRoZSBjb2Rl IG1pcnJvciB0aGVuIGV4ZWN1dGUKICAgICAgICAgICAgKiB0aGUgc2VsZWN0 ZWQgcGFydCBlbHNlIGV4ZWN1dGUgdGhlIGNvbXBsZXRlIGNvZGUuCiAgICAg ICAgICAgICovCkBAIC0xNzE5LDYgKzE5MDEsMTcgQEAgZGVmaW5lKAogICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgIHNxbCA9IHNlbGYuZ3JpZFZpZXcu cXVlcnlfdG9vbF9vYmouZ2V0VmFsdWUoKTsKIAorICAgICAgICAgIC8vIElm IGl0IGlzIGFuIGVtcHR5IHF1ZXJ5LCBkbyBub3RoaW5nLgorICAgICAgICAg IGlmIChzcWwubGVuZ3RoIDw9IDApIHJldHVybjsKKworICAgICAgICAgIHNl bGYudHJpZ2dlcigKKyAgICAgICAgICAgICdwZ2FkbWluLXNxbGVkaXRvcjps b2FkaW5nLWljb246c2hvdycsCisgICAgICAgICAgICAne3sgXygnSW5pdGlh bGl6aW5nIHRoZSBxdWVyeSBleGVjdXRpb24hJykgfX0nCisgICAgICAgICAg KTsKKworICAgICAgICAgIGlmIChleHBsYWluX3ByZWZpeCAhPSB1bmRlZmlu ZWQpCisgICAgICAgICAgICBzcWwgPSBleHBsYWluX3ByZWZpeCArICcgJyAr IHNxbDsKKwogICAgICAgICAgIHNlbGYucXVlcnlfc3RhcnRfdGltZSA9IG5l dyBEYXRlKCk7CiAgICAgICAgICAgc2VsZi5xdWVyeSA9IHNxbDsKICAgICAg ICAgICBzZWxmLnJvd3NfYWZmZWN0ZWQgPSAwOwpAQCAtMjAzNyw2ICsyMjMw LDE3MiBAQCBkZWZpbmUoCiAgICAgICAgICAgICAgIGFsZXJ0aWZ5LmFsZXJ0 KCdBdXRvIENvbW1pdCBFcnJvcicsIG1zZyk7CiAgICAgICAgICAgICB9CiAg ICAgICAgICAgfSk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gVGhpcyBm dW5jdGlvbiB3aWxsCisgICAgICAgIF9leHBsYWluOiBmdW5jdGlvbigpIHsK KyAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7CisgICAgICAgICAgdmFyIHZl cmJvc2UgPSAkKCcuZXhwbGFpbi12ZXJib3NlJykuaGFzQ2xhc3MoJ3Zpc2li aWxpdHktaGlkZGVuJykgPyAnT0ZGJyA6ICdPTic7CisgICAgICAgICAgdmFy IGNvc3RzID0gJCgnLmV4cGxhaW4tY29zdHMnKS5oYXNDbGFzcygndmlzaWJp bGl0eS1oaWRkZW4nKSA/ICdPRkYnIDogJ09OJzsKKworICAgICAgICAgIC8v IE5vIG5lZWQgdG8gY2hlY2sgZm9yIGJ1ZmZlcnMgYW5kIHRpbWluZyBvcHRp b24gdmFsdWUgaW4gZXhwbGFpbgorICAgICAgICAgIHZhciBleHBsYWluX3F1 ZXJ5ID0gJ0VYUExBSU4gKEZPUk1BVCBKU09OLCBBTkFMWVpFIE9GRiwgVkVS Qk9TRSAlcywgQ09TVFMgJXMsIEJVRkZFUlMgT0ZGLCBUSU1JTkcgT0ZGKSAn OworICAgICAgICAgIGV4cGxhaW5fcXVlcnkgPSBTKGV4cGxhaW5fcXVlcnkp LnNwcmludGYodmVyYm9zZSwgY29zdHMpLnZhbHVlKCk7CisgICAgICAgICAg c2VsZi5fZXhlY3V0ZShleHBsYWluX3F1ZXJ5KTsKKyAgICAgICAgfSwKKwor ICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwKKyAgICAgICAgX2V4cGxh aW5fYW5hbHl6ZTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgdmFyIHNlbGYg PSB0aGlzO3ZhciB2ZXJib3NlID0gJCgnLmV4cGxhaW4tdmVyYm9zZScpLmhh c0NsYXNzKCd2aXNpYmlsaXR5LWhpZGRlbicpID8gJ09GRicgOiAnT04nOwor ICAgICAgICAgIHZhciBjb3N0cyA9ICQoJy5leHBsYWluLWNvc3RzJykuaGFz Q2xhc3MoJ3Zpc2liaWxpdHktaGlkZGVuJykgPyAnT0ZGJyA6ICdPTic7Cisg ICAgICAgICAgdmFyIGJ1ZmZlcnMgPSAkKCcuZXhwbGFpbi1idWZmZXJzJyku aGFzQ2xhc3MoJ3Zpc2liaWxpdHktaGlkZGVuJykgPyAnT0ZGJyA6ICdPTic7 CisgICAgICAgICAgdmFyIHRpbWluZyA9ICQoJy5leHBsYWluLXRpbWluZycp Lmhhc0NsYXNzKCd2aXNpYmlsaXR5LWhpZGRlbicpID8gJ09GRicgOiAnT04n OworCisgICAgICAgICAgdmFyIGV4cGxhaW5fcXVlcnkgPSAnRXhwbGFpbiAo Rk9STUFUIEpTT04sIEFOQUxZWkUgT04sIFZFUkJPU0UgJXMsIENPU1RTICVz LCBCVUZGRVJTICVzLCBUSU1JTkcgJXMpICc7CisgICAgICAgICAgZXhwbGFp bl9xdWVyeSA9IFMoZXhwbGFpbl9xdWVyeSkuc3ByaW50Zih2ZXJib3NlLCBj b3N0cywgYnVmZmVycywgdGltaW5nKS52YWx1ZSgpOworICAgICAgICAgIHNl bGYuX2V4ZWN1dGUoZXhwbGFpbl9xdWVyeSk7CisgICAgICAgIH0sCisKKyAg ICAgICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIHRvZ2dsZSAidmVyYm9zZSIg b3B0aW9uIGluIGV4cGxhaW4KKyAgICAgICAgX2V4cGxhaW5fdmVyYm9zZTog ZnVuY3Rpb24oKSB7CisgICAgICAgICAgaWYgKCQoJy5leHBsYWluLXZlcmJv c2UnKS5oYXNDbGFzcygndmlzaWJpbGl0eS1oaWRkZW4nKSA9PT0gdHJ1ZSkg eworICAgICAgICAgICAgJCgnLmV4cGxhaW4tdmVyYm9zZScpLnJlbW92ZUNs YXNzKCd2aXNpYmlsaXR5LWhpZGRlbicpOworICAgICAgICAgICAgc2VsZi5l eHBsYWluX3ZlcmJvc2UgPSB0cnVlOworICAgICAgICAgIH0KKyAgICAgICAg ICBlbHNlIHsKKyAgICAgICAgICAgICQoJy5leHBsYWluLXZlcmJvc2UnKS5h ZGRDbGFzcygndmlzaWJpbGl0eS1oaWRkZW4nKTsKKyAgICAgICAgICAgIHNl bGYuZXhwbGFpbl92ZXJib3NlID0gZmFsc2U7CisgICAgICAgICAgfQorCisg ICAgICAgICAgLy8gU2V0IHRoaXMgb3B0aW9uIGluIHByZWZlcmVuY2VzCisg ICAgICAgICAgdmFyIGRhdGEgPSB7CisgICAgICAgICAgICAnZXhwbGFpbl92 ZXJib3NlJzogc2VsZi5leHBsYWluX3ZlcmJvc2UKKyAgICAgICAgICB9Owor ICAgICAgICAgICQuYWpheCh7CisgICAgICAgICAgdXJsOiAie3sgdXJsX2Zv cignc3FsZWRpdG9yLmluZGV4JykgfX0iICsgInF1ZXJ5X3Rvb2wvcHJlZmVy ZW5jZXMiICwKKyAgICAgICAgICBtZXRob2Q6ICdQVVQnLAorICAgICAgICAg IGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24vanNvbiIsCisgICAgICAgICAg ZGF0YTogSlNPTi5zdHJpbmdpZnkoZGF0YSksCisgICAgICAgICAgc3VjY2Vz czogZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgICBpZihyZXMuc3VjY2Vz cyA9PSB1bmRlZmluZWQgfHwgIXJlcy5zdWNjZXNzKSB7CisgICAgICAgICAg ICAgIGFsZXJ0aWZ5LmFsZXJ0KCdFeHBsYWluIG9wdGlvbnMgZXJyb3InLAor ICAgICAgICAgICAgICAgICd7eyBfKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBz ZXR0aW5nIHZlcmJvc2Ugb3B0aW9uIGluIGV4cGxhaW4nKSB9fScKKyAgICAg ICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LAorICAg ICAgICAgIGVycm9yOiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBhbGVy dGlmeS5hbGVydCgnRXhwbGFpbiBvcHRpb25zIGVycm9yJywKKyAgICAgICAg ICAgICAgICAne3sgXygnRXJyb3Igb2NjdXJyZWQgd2hpbGUgc2V0dGluZyB2 ZXJib3NlIG9wdGlvbiBpbiBleHBsYWluJykgfX0nCisgICAgICAgICAgICAp OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0KKyAgICAgICAg fSk7CisgICAgICAgIH0sCisKKyAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiB3 aWxsIHRvZ2dsZSAiY29zdHMiIG9wdGlvbiBpbiBleHBsYWluCisgICAgICAg IF9leHBsYWluX2Nvc3RzOiBmdW5jdGlvbigpIHsKKyAgICAgICAgICBpZiAo JCgnLmV4cGxhaW4tY29zdHMnKS5oYXNDbGFzcygndmlzaWJpbGl0eS1oaWRk ZW4nKSA9PT0gdHJ1ZSkgeworICAgICAgICAgICAgJCgnLmV4cGxhaW4tY29z dHMnKS5yZW1vdmVDbGFzcygndmlzaWJpbGl0eS1oaWRkZW4nKTsKKyAgICAg ICAgICAgIHNlbGYuZXhwbGFpbl9jb3N0cyA9IHRydWU7CisgICAgICAgICAg fQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgJCgnLmV4cGxhaW4t Y29zdHMnKS5hZGRDbGFzcygndmlzaWJpbGl0eS1oaWRkZW4nKTsKKyAgICAg ICAgICAgIHNlbGYuZXhwbGFpbl9jb3N0cyA9IGZhbHNlOworICAgICAgICAg IH0KKworICAgICAgICAgIC8vIFNldCB0aGlzIG9wdGlvbiBpbiBwcmVmZXJl bmNlcworICAgICAgICAgIHZhciBkYXRhID0geworICAgICAgICAgICAgJ2V4 cGxhaW5fY29zdHMnOiBzZWxmLmV4cGxhaW5fY29zdHMKKyAgICAgICAgICB9 OworICAgICAgICAgICQuYWpheCh7CisgICAgICAgICAgdXJsOiAie3sgdXJs X2Zvcignc3FsZWRpdG9yLmluZGV4JykgfX0iICsgInF1ZXJ5X3Rvb2wvcHJl ZmVyZW5jZXMiICwKKyAgICAgICAgICBtZXRob2Q6ICdQVVQnLAorICAgICAg ICAgIGNvbnRlbnRUeXBlOiAiYXBwbGljYXRpb24vanNvbiIsCisgICAgICAg ICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoZGF0YSksCisgICAgICAgICAgc3Vj Y2VzczogZnVuY3Rpb24ocmVzKSB7CisgICAgICAgICAgICBpZihyZXMuc3Vj Y2VzcyA9PSB1bmRlZmluZWQgfHwgIXJlcy5zdWNjZXNzKSB7CisgICAgICAg ICAgICAgIGFsZXJ0aWZ5LmFsZXJ0KCdFeHBsYWluIG9wdGlvbnMgZXJyb3In LAorICAgICAgICAgICAgICAgICd7eyBfKCdFcnJvciBvY2N1cnJlZCB3aGls ZSBzZXR0aW5nIGNvc3RzIG9wdGlvbiBpbiBleHBsYWluJykgfX0nCisgICAg ICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwKKyAg ICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgYWxl cnRpZnkuYWxlcnQoJ0V4cGxhaW4gb3B0aW9ucyBlcnJvcicsCisgICAgICAg ICAgICAgICAgJ3t7IF8oJ0Vycm9yIG9jY3VycmVkIHdoaWxlIHNldHRpbmcg Y29zdHMgb3B0aW9uIGluIGV4cGxhaW4nKSB9fScKKyAgICAgICAgICAgICAg KTsKKyAgICAgICAgICB9CisgICAgICAgIH0pOworICAgICAgICB9LAorCisg ICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCB0b2dnbGUgImJ1ZmZlcnMi IG9wdGlvbiBpbiBleHBsYWluCisgICAgICAgIF9leHBsYWluX2J1ZmZlcnM6 IGZ1bmN0aW9uKCkgeworICAgICAgICAgIGlmICgkKCcuZXhwbGFpbi1idWZm ZXJzJykuaGFzQ2xhc3MoJ3Zpc2liaWxpdHktaGlkZGVuJykgPT09IHRydWUp IHsKKyAgICAgICAgICAgICQoJy5leHBsYWluLWJ1ZmZlcnMnKS5yZW1vdmVD bGFzcygndmlzaWJpbGl0eS1oaWRkZW4nKTsKKyAgICAgICAgICAgIHNlbGYu ZXhwbGFpbl9idWZmZXJzID0gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAg ICAgZWxzZSB7CisgICAgICAgICAgICAkKCcuZXhwbGFpbi1idWZmZXJzJyku YWRkQ2xhc3MoJ3Zpc2liaWxpdHktaGlkZGVuJyk7CisgICAgICAgICAgICBz ZWxmLmV4cGxhaW5fYnVmZmVycyA9IGZhbHNlOworICAgICAgICAgIH0KKwor ICAgICAgICAgIC8vIFNldCB0aGlzIG9wdGlvbiBpbiBwcmVmZXJlbmNlcwor ICAgICAgICAgIHZhciBkYXRhID0geworICAgICAgICAgICAgJ2V4cGxhaW5f YnVmZmVycyc6IHNlbGYuZXhwbGFpbl9idWZmZXJzCisgICAgICAgICAgfTsK KyAgICAgICAgICAkLmFqYXgoeworICAgICAgICAgIHVybDogInt7IHVybF9m b3IoJ3NxbGVkaXRvci5pbmRleCcpIH19IiArICJxdWVyeV90b29sL3ByZWZl cmVuY2VzIiAsCisgICAgICAgICAgbWV0aG9kOiAnUFVUJywKKyAgICAgICAg ICBjb250ZW50VHlwZTogImFwcGxpY2F0aW9uL2pzb24iLAorICAgICAgICAg IGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLAorICAgICAgICAgIHN1Y2Nl c3M6IGZ1bmN0aW9uKHJlcykgeworICAgICAgICAgICAgaWYocmVzLnN1Y2Nl c3MgPT0gdW5kZWZpbmVkIHx8ICFyZXMuc3VjY2VzcykgeworICAgICAgICAg ICAgICBhbGVydGlmeS5hbGVydCgnRXhwbGFpbiBvcHRpb25zIGVycm9yJywK KyAgICAgICAgICAgICAgICAne3sgXygnRXJyb3Igb2NjdXJyZWQgd2hpbGUg c2V0dGluZyBidWZmZXJzIG9wdGlvbiBpbiBleHBsYWluJykgfX0nCisgICAg ICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwKKyAg ICAgICAgICBlcnJvcjogZnVuY3Rpb24oZSkgeworICAgICAgICAgICAgYWxl cnRpZnkuYWxlcnQoJ0V4cGxhaW4gb3B0aW9ucyBlcnJvcicsCisgICAgICAg ICAgICAgICd7eyBfKCdFcnJvciBvY2N1cnJlZCB3aGlsZSBzZXR0aW5nIGJ1 ZmZlcnMgb3B0aW9uIGluIGV4cGxhaW4nKSB9fScKKyAgICAgICAgICAgICk7 CisgICAgICAgICAgfQorICAgICAgICB9KTsKKworICAgICAgICB9LAorCisg ICAgICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCB0b2dnbGUgInRpbWluZyIg b3B0aW9uIGluIGV4cGxhaW4KKyAgICAgICAgX2V4cGxhaW5fdGltaW5nOiBm dW5jdGlvbigpIHsKKyAgICAgICAgICBpZiAoJCgnLmV4cGxhaW4tdGltaW5n JykuaGFzQ2xhc3MoJ3Zpc2liaWxpdHktaGlkZGVuJykgPT09IHRydWUpIHsK KyAgICAgICAgICAgICQoJy5leHBsYWluLXRpbWluZycpLnJlbW92ZUNsYXNz KCd2aXNpYmlsaXR5LWhpZGRlbicpOworICAgICAgICAgICAgc2VsZi5leHBs YWluX3RpbWluZyA9IHRydWU7CisgICAgICAgICAgfQorICAgICAgICAgIGVs c2UgeworICAgICAgICAgICAgJCgnLmV4cGxhaW4tdGltaW5nJykuYWRkQ2xh c3MoJ3Zpc2liaWxpdHktaGlkZGVuJyk7CisgICAgICAgICAgICBzZWxmLmV4 cGxhaW5fdGltaW5nID0gdHJ1ZTsKKyAgICAgICAgICB9CisgICAgICAgICAg Ly8gU2V0IHRoaXMgb3B0aW9uIGluIHByZWZlcmVuY2VzCisgICAgICAgICAg dmFyIGRhdGEgPSB7CisgICAgICAgICAgICAnZXhwbGFpbl90aW1pbmcnOiBz ZWxmLmV4cGxhaW5fdGltaW5nCisgICAgICAgICAgfTsKKyAgICAgICAgICAk LmFqYXgoeworICAgICAgICAgIHVybDogInt7IHVybF9mb3IoJ3NxbGVkaXRv ci5pbmRleCcpIH19IiArICJxdWVyeV90b29sL3ByZWZlcmVuY2VzIiAsCisg ICAgICAgICAgbWV0aG9kOiAnUFVUJywKKyAgICAgICAgICBjb250ZW50VHlw ZTogImFwcGxpY2F0aW9uL2pzb24iLAorICAgICAgICAgIGRhdGE6IEpTT04u c3RyaW5naWZ5KGRhdGEpLAorICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9u KHJlcykgeworICAgICAgICAgICAgaWYocmVzLnN1Y2Nlc3MgPT0gdW5kZWZp bmVkIHx8ICFyZXMuc3VjY2VzcykgeworICAgICAgICAgICAgICBhbGVydGlm eS5hbGVydCgnRXhwbGFpbiBvcHRpb25zIGVycm9yJywKKyAgICAgICAgICAg ICAgICAne3sgXygnRXJyb3Igb2NjdXJyZWQgd2hpbGUgc2V0dGluZyB0aW1p bmcgb3B0aW9uIGluIGV4cGxhaW4nKSB9fScKKyAgICAgICAgICAgICAgKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICB9LAorICAgICAgICAgIGVycm9y OiBmdW5jdGlvbihlKSB7CisgICAgICAgICAgICBhbGVydGlmeS5hbGVydCgn RXhwbGFpbiBvcHRpb25zIGVycm9yJywKKyAgICAgICAgICAgICAgICAne3sg XygnRXJyb3Igb2NjdXJyZWQgd2hpbGUgc2V0dGluZyB0aW1pbmcgb3B0aW9u IGluIGV4cGxhaW4nKSB9fScKKyAgICAgICAgICAgICAgKTsKKyAgICAgICAg ICB9CisgICAgICAgIH0pOworCiAgICAgICAgIH0KICAgICAgIH0KICAgICAp Owo= --94eb2c094aa2b6769f0532b6b2a6 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 --94eb2c094aa2b6769f0532b6b2a6--