Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gqb0M-00025l-1K for pgadmin-hackers@arkaria.postgresql.org; Mon, 04 Feb 2019 09:57:30 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1gqb0I-0003No-RQ for pgadmin-hackers@arkaria.postgresql.org; Mon, 04 Feb 2019 09:57:26 +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_SHA1:256) (Exim 4.89) (envelope-from ) id 1gqb0I-0003Ng-Er for pgadmin-hackers@lists.postgresql.org; Mon, 04 Feb 2019 09:57:26 +0000 Received: from mail-lf1-x144.google.com ([2a00:1450:4864:20::144]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gqb0A-00066O-It for pgadmin-hackers@postgresql.org; Mon, 04 Feb 2019 09:57:25 +0000 Received: by mail-lf1-x144.google.com with SMTP id l142so1885085lfe.2 for ; Mon, 04 Feb 2019 01:57:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=0fDgXlaXtxyvjDLOEJ/ci6cOJ43QUbz1pBb+/dYCgvQ=; b=1F+flW05zILw1a7Ek6IA/0QuMVZzsu8jULDJG000SssuZ7vI31j6MLQ9kHkhGviyGo IlZJPNOz9wjd6Lx03AfF6fiVwg+SQPeKhveWVjSOqFQOh40+jiIDJ5SbS9jswCVr1m5a TH87feOBvOFSoWQYel/9ObB4xHyOXqcjuCOHY+z/42i7M4yBETchio1RdQW24N7cHkTf jCZr1bUcAULh1mKXi9z0dlF3Pq6Q98TKyqtfCmgPI0qkwbDDd/oCH5a7dI0LqMnp4dId nFgBtJif3pJrnz5IbB9aQq4qjsGk6A7r39VLoQHfJk92tuYTRUAsObX9H4kwZzVcJtjE lVdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=0fDgXlaXtxyvjDLOEJ/ci6cOJ43QUbz1pBb+/dYCgvQ=; b=b75FH5bp0HowFf66W1KygYeVghvIFtxTiNJiGVOXd8rxgkuU9DDmLWh4U5Bn0Z3V+X YM8ajEdj3CmV3xP3caSsCcl43V7G2MQ/PEz41IOmg9thhKbee52dadRELsIAkfwSN6xC 6Nt/K6p834lFDRpeyfngjwxp/OjDXLRlU+laa3qBM3TXnXTp7F0zVBpqv118WUFA5g2J UKTdIGzLte7nCpPz5soeZI03E8sjvxu+uR0QwBEGTnyatap/aJxeyt1wybNDSvufOdi/ 7TkY7GWKQZwDOOH4ztPge7vkVWKDHzOlm6VlXBVj0Pq+oRO9vWqYmFAdJqnJ04bszVSC hw1Q== X-Gm-Message-State: AJcUukf/ZQVurw/5/NLSqaG0Gb1Puajm7XSNFZuzPzJZ2sFqjGhVe1ez Flwa+0JMjuqVSUaxADQL16V/wJwhq/Lu0z0oQkw3Jw== X-Google-Smtp-Source: ALg8bN6D8rpMo1CL3LcsUGiBowtA4KmUFKi/rd+ABDYwUAG9pxmFyMPU9nZqaG2Ksoh2c9r0Iy/SiP3FRpeIpjZiyhM= X-Received: by 2002:ac2:41cb:: with SMTP id d11mr39050828lfi.3.1549274237390; Mon, 04 Feb 2019 01:57:17 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Aditya Toshniwal Date: Mon, 4 Feb 2019 15:27:06 +0530 Message-ID: Subject: Re: [pgAdmin4][RM3941] Dashboard graphs needs optimizations To: Dave Page Cc: Khushboo Vashi , Akshay Joshi , pgadmin-hackers Content-Type: multipart/mixed; boundary="00000000000094a30a05810e847f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --00000000000094a30a05810e847f Content-Type: multipart/alternative; boundary="00000000000094a30805810e847d" --00000000000094a30805810e847d Content-Type: text/plain; charset="UTF-8" Hi Hackers, Attached is the updated patch. The poller will wait 3 times the normal interval before sending new request if the previous request is pending. After that, it will send the ajax. Kindly review. On Mon, Feb 4, 2019 at 3:12 PM Dave Page wrote: > I can't get to this right now, but Akshay, can we get it in before the > release? > > I don't think the problem Khushboo notes is really a problem. Waiting for > a response before issuing another one seems sensible... as long as there's > a timeout so things don't get stuck if a response gets lost somehow. Maybe > the timeout should be something like 3x the normal interval? > > On Mon, Feb 4, 2019 at 9:02 AM Khushboo Vashi < > khushboo.vashi@enterprisedb.com> wrote: > >> Hi Aditya, >> >> I have reviewed the patch and it looks good to me except the logic to >> wait until we get the response from the AJAX request. >> So, in this case at a time only one request is being sent to the server. >> >> @ Dave/Ashesh, if you think this is okay then we can commit the patch. >> >> Thanks, >> Khushboo >> >> On Mon, Feb 4, 2019 at 10:45 AM Akshay Joshi < >> akshay.joshi@enterprisedb.com> wrote: >> >>> Hi Khushboo >>> >>> Can you please review it. >>> >>> On Fri, Feb 1, 2019 at 7:04 PM Aditya Toshniwal < >>> aditya.toshniwal@enterprisedb.com> wrote: >>> >>>> Hi Hackers, >>>> >>>> Attached is the patch to optimise the dashboard. Changes include: >>>> 1) One ajax request for the all the charts instead of separate for >>>> every chart. The next request will not hit until the previous is completed. >>>> 2) The code will check for intervals which is greatest common divisor >>>> of all the refresh rates. Chart names which will be eligible for refresh >>>> will be sent with the ajax. If none are eligible, no ajax will be fired. >>>> 3) In the backend, query is generated in such a way that data for all >>>> the requested chart names will be fetched in one hit to the database. >>>> 4) Test cases for charts rest api and javascript added. >>>> >>>> -- >>>> Thanks and Regards, >>>> Aditya Toshniwal >>>> Software Engineer | EnterpriseDB Software Solutions | Pune >>>> "Don't Complain about Heat, Plant a tree" >>>> >>> >>> >>> -- >>> *Akshay Joshi* >>> >>> *Sr. Software Architect * >>> >>> >>> >>> *Phone: +91 20-3058-9517Mobile: +91 976-788-8246* >>> >> > > -- > Dave Page > Blog: http://pgsnake.blogspot.com > Twitter: @pgsnake > > EnterpriseDB UK: http://www.enterprisedb.com > The Enterprise PostgreSQL Company > -- Thanks and Regards, Aditya Toshniwal Software Engineer | EnterpriseDB Software Solutions | Pune "Don't Complain about Heat, Plant a tree" --00000000000094a30805810e847d Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Hackers,

Attached is the updated patch. The poller will= wait 3 times the normal interval before sending new request if the previou= s request is pending. After that, it will send the ajax.

Kindly review= .

On Mon, Feb 4, 2019 at 3:12 PM Dave Page <dpage@pgadmin.org> wrote:
I can't get to this r= ight now, but Akshay, can we get it in before the release?

I don't think the problem Khushboo notes is really a problem. Waitin= g for a response before issuing another one seems sensible... as long as th= ere's a timeout so things don't get stuck if a response gets lost s= omehow. Maybe the timeout should be something like 3x the normal interval?<= /div>

On Mon, Feb 4, 2019 at 9:02 AM Khushboo Vashi <khushboo.vashi@enterprised= b.com> wrote:
Hi Aditya,

I have reviewed the pat= ch and it looks good to me except the logic to wait until we get the respon= se from the AJAX request.
So, in this case at a time only one req= uest is being sent to the server.

@ Dave/Ashesh, i= f you think this is okay then we can commit the patch.

=
Thanks,
Khushboo

<= div dir=3D"ltr" class=3D"gmail_attr">On Mon, Feb 4, 2019 at 10:45 AM Akshay= Joshi <akshay.joshi@enterprisedb.com> wrote:
Hi Khushboo

Can you please review it.

<= div dir=3D"ltr" class=3D"gmail_attr">On Fri, Feb 1, 2019 at 7:04 PM Aditya = Toshniwal <aditya.toshniwal@enterprisedb.com> wrote:
Hi Hackers,
<= div class=3D"gmail_default" style=3D"font-family:verdana,sans-serif">
A= ttached is the patch to optimise the dashboard. Changes include:
1) One aja= x request for the all the charts instead of separate for every chart. The n= ext request will not hit until the previous is completed.
2) The code wil= l check for intervals which is greatest common divisor of all the refresh r= ates. Chart names which will be eligible for refresh will be sent with the = ajax. If none are eligible, no ajax will be fired.
3) In the backend, query= is generated in such a way that data for all the requested chart names wil= l be fetched in one hit to the database.
4) Test cases for charts rest api = and javascript added.

--
<= div dir=3D"ltr">Thanks and Regards,
Aditya Toshniwal
Software Engineer |=C2=A0EnterpriseDB Software Solution= s |=C2=A0Pune
<= font color=3D"#38761d">"Don't Complain about Heat, Plant a tree&qu= ot;


--
<= div>Akshay Joshi
Sr. Software Architect


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


--
Dave Page
Blog: <= a href=3D"http://pgsnake.blogspot.com" target=3D"_blank">http://pgsnake.blo= gspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.comThe Enterprise PostgreSQL Company


--
Thanks and Rega= rds,
Aditya Toshniwa= l
Softw= are Engineer |=C2=A0EnterpriseDB Software Solutions |=C2=A0Pune
&q= uot;Don't Complain about Heat, Plant a tree"
--00000000000094a30805810e847d-- --00000000000094a30a05810e847f Content-Type: application/octet-stream; name="RM3941_v2.patch" Content-Disposition: attachment; filename="RM3941_v2.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jrq5vbxg0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9fX2luaXRfXy5weSBiL3dlYi9wZ2Fk bWluL2Rhc2hib2FyZC9fX2luaXRfXy5weQppbmRleCA5YTAxMThjOC4uMzY4OGUxNjUgMTAwNjQ0 Ci0tLSBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9fX2luaXRfXy5weQorKysgYi93ZWIvcGdhZG1p bi9kYXNoYm9hcmQvX19pbml0X18ucHkKQEAgLTksNyArOSw3IEBACiAKICIiIkEgYmx1ZXByaW50 IG1vZHVsZSBpbXBsZW1lbnRpbmcgdGhlIGRhc2hib2FyZCBmcmFtZS4iIiIKIGZyb20gZnVuY3Rv b2xzIGltcG9ydCB3cmFwcwotZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRlLCB1cmxf Zm9yLCBSZXNwb25zZSwgZworZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3RlbXBsYXRlLCB1cmxf Zm9yLCBSZXNwb25zZSwgZywgcmVxdWVzdAogZnJvbSBmbGFza19iYWJlbGV4IGltcG9ydCBnZXR0 ZXh0CiBmcm9tIGZsYXNrX3NlY3VyaXR5IGltcG9ydCBsb2dpbl9yZXF1aXJlZAogZnJvbSBwZ2Fk bWluLnV0aWxzIGltcG9ydCBQZ0FkbWluTW9kdWxlCkBAIC0xNTQsMjEgKzE1NCw5IEBAIGNsYXNz IERhc2hib2FyZE1vZHVsZShQZ0FkbWluTW9kdWxlKToKICAgICAgICAgcmV0dXJuIFsKICAgICAg ICAgICAgICdkYXNoYm9hcmQuaW5kZXgnLCAnZGFzaGJvYXJkLmdldF9ieV9zZXZlcl9pZCcsCiAg ICAgICAgICAgICAnZGFzaGJvYXJkLmdldF9ieV9kYXRhYmFzZV9pZCcsCi0gICAgICAgICAgICAn ZGFzaGJvYXJkLnNlc3Npb25fc3RhdHMnLAotICAgICAgICAgICAgJ2Rhc2hib2FyZC5nZXRfc2Vz c2lvbl9zdGF0c19ieV9zZXZlcl9pZCcsCi0gICAgICAgICAgICAnZGFzaGJvYXJkLmdldF9zZXNz aW9uX3N0YXRzX2J5X2RhdGFiYXNlX2lkJywKLSAgICAgICAgICAgICdkYXNoYm9hcmQudHBzX3N0 YXRzJywKLSAgICAgICAgICAgICdkYXNoYm9hcmQudHBzX3N0YXRzX2J5X3NlcnZlcl9pZCcsCi0g ICAgICAgICAgICAnZGFzaGJvYXJkLnRwc19zdGF0c19ieV9kYXRhYmFzZV9pZCcsCi0gICAgICAg ICAgICAnZGFzaGJvYXJkLnRpX3N0YXRzJywKLSAgICAgICAgICAgICdkYXNoYm9hcmQudGlfc3Rh dHNfYnlfc2VydmVyX2lkJywKLSAgICAgICAgICAgICdkYXNoYm9hcmQudGlfc3RhdHNfYnlfZGF0 YWJhc2VfaWQnLAotICAgICAgICAgICAgJ2Rhc2hib2FyZC50b19zdGF0cycsCi0gICAgICAgICAg ICAnZGFzaGJvYXJkLnRvX3N0YXRzX2J5X3NlcnZlcl9pZCcsCi0gICAgICAgICAgICAnZGFzaGJv YXJkLnRvX3N0YXRzX2J5X2RhdGFiYXNlX2lkJywKLSAgICAgICAgICAgICdkYXNoYm9hcmQuYmlv X3N0YXRzJywKLSAgICAgICAgICAgICdkYXNoYm9hcmQuYmlvX3N0YXRzX2J5X3NlcnZlcl9pZCcs Ci0gICAgICAgICAgICAnZGFzaGJvYXJkLmJpb19zdGF0c19ieV9kYXRhYmFzZV9pZCcsCisgICAg ICAgICAgICAnZGFzaGJvYXJkLmRhc2hib2FyZF9zdGF0cycsCisgICAgICAgICAgICAnZGFzaGJv YXJkLmRhc2hib2FyZF9zdGF0c19zaWQnLAorICAgICAgICAgICAgJ2Rhc2hib2FyZC5kYXNoYm9h cmRfc3RhdHNfZGlkJywKICAgICAgICAgICAgICdkYXNoYm9hcmQuYWN0aXZpdHknLAogICAgICAg ICAgICAgJ2Rhc2hib2FyZC5nZXRfYWN0aXZpdHlfYnlfc2VydmVyX2lkJywKICAgICAgICAgICAg ICdkYXNoYm9hcmQuZ2V0X2FjdGl2aXR5X2J5X2RhdGFiYXNlX2lkJywKQEAgLTM1Niw4NyArMzQ0 LDM2IEBAIGRlZiBnZXRfZGF0YShzaWQsIGRpZCwgdGVtcGxhdGUpOgogICAgICkKIAogCi1AYmx1 ZXByaW50LnJvdXRlKCcvc2Vzc2lvbl9zdGF0cy8nLCBlbmRwb2ludD0nc2Vzc2lvbl9zdGF0cycp Ci1AYmx1ZXByaW50LnJvdXRlKAotICAgICcvc2Vzc2lvbl9zdGF0cy88aW50OnNpZD4nLCBlbmRw b2ludD0nZ2V0X3Nlc3Npb25fc3RhdHNfYnlfc2V2ZXJfaWQnCi0pCi1AYmx1ZXByaW50LnJvdXRl KAotICAgICcvc2Vzc2lvbl9zdGF0cy88aW50OnNpZD4vPGludDpkaWQ+JywKLSAgICBlbmRwb2lu dD0nZ2V0X3Nlc3Npb25fc3RhdHNfYnlfZGF0YWJhc2VfaWQnCi0pCitAYmx1ZXByaW50LnJvdXRl KCcvZGFzaGJvYXJkX3N0YXRzJywKKyAgICAgICAgICAgICAgICAgZW5kcG9pbnQ9J2Rhc2hib2Fy ZF9zdGF0cycpCitAYmx1ZXByaW50LnJvdXRlKCcvZGFzaGJvYXJkX3N0YXRzLzxpbnQ6c2lkPics CisgICAgICAgICAgICAgICAgIGVuZHBvaW50PSdkYXNoYm9hcmRfc3RhdHNfc2lkJykKK0BibHVl cHJpbnQucm91dGUoJy9kYXNoYm9hcmRfc3RhdHMvPGludDpzaWQ+LzxpbnQ6ZGlkPicsCisgICAg ICAgICAgICAgICAgIGVuZHBvaW50PSdkYXNoYm9hcmRfc3RhdHNfZGlkJykKIEBsb2dpbl9yZXF1 aXJlZAogQGNoZWNrX3ByZWNvbmRpdGlvbgotZGVmIHNlc3Npb25fc3RhdHMoc2lkPU5vbmUsIGRp ZD1Ob25lKToKLSAgICAiIiIKLSAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgc2VydmVyIHNlc3Np b24gc3RhdGlzdGljcwotICAgIDpwYXJhbSBzaWQ6IHNlcnZlciBpZAotICAgIDpyZXR1cm46Ci0g ICAgIiIiCi0gICAgcmV0dXJuIGdldF9kYXRhKHNpZCwgZGlkLCAnc2Vzc2lvbl9zdGF0cy5zcWwn KQotCitkZWYgZGFzaGJvYXJkX3N0YXRzKHNpZD1Ob25lLCBkaWQ9Tm9uZSk6CisgICAgcmVzcF9k YXRhID0ge30KIAotQGJsdWVwcmludC5yb3V0ZSgnL3Rwc19zdGF0cy8nLCBlbmRwb2ludD0ndHBz X3N0YXRzJykKLUBibHVlcHJpbnQucm91dGUoJy90cHNfc3RhdHMvPGludDpzaWQ+JywgZW5kcG9p bnQ9J3Rwc19zdGF0c19ieV9zZXJ2ZXJfaWQnKQotQGJsdWVwcmludC5yb3V0ZSgKLSAgICAnL3Rw c19zdGF0cy88aW50OnNpZD4vPGludDpkaWQ+JywgZW5kcG9pbnQ9J3Rwc19zdGF0c19ieV9kYXRh YmFzZV9pZCcKLSkKLUBsb2dpbl9yZXF1aXJlZAotQGNoZWNrX3ByZWNvbmRpdGlvbgotZGVmIHRw c19zdGF0cyhzaWQ9Tm9uZSwgZGlkPU5vbmUpOgotICAgICIiIgotICAgIFRoaXMgZnVuY3Rpb24g cmV0dXJucyBzZXJ2ZXIgVFBTIHRocm91Z2hwdXQKLSAgICA6cGFyYW0gc2lkOiBzZXJ2ZXIgaWQK LSAgICA6cmV0dXJuOgotICAgICIiIgotICAgIHJldHVybiBnZXRfZGF0YShzaWQsIGRpZCwgJ3Rw c19zdGF0cy5zcWwnKQorICAgIGlmIHJlcXVlc3QuYXJnc1snY2hhcnRfbmFtZXMnXSAhPSAnJzoK KyAgICAgICAgY2hhcnRfbmFtZXMgPSByZXF1ZXN0LmFyZ3NbJ2NoYXJ0X25hbWVzJ10uc3BsaXQo JywnKQogCisgICAgICAgIGlmIG5vdCBzaWQ6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxf c2VydmVyX2Vycm9yKGVycm9ybXNnPSdTZXJ2ZXIgSUQgbm90IHNwZWNpZmllZC4nKQogCi1AYmx1 ZXByaW50LnJvdXRlKCcvdGlfc3RhdHMvJywgZW5kcG9pbnQ9J3RpX3N0YXRzJykKLUBibHVlcHJp bnQucm91dGUoJy90aV9zdGF0cy88aW50OnNpZD4nLCBlbmRwb2ludD0ndGlfc3RhdHNfYnlfc2Vy dmVyX2lkJykKLUBibHVlcHJpbnQucm91dGUoCi0gICAgJy90aV9zdGF0cy88aW50OnNpZD4vPGlu dDpkaWQ+JywgZW5kcG9pbnQ9J3RpX3N0YXRzX2J5X2RhdGFiYXNlX2lkJwotKQotQGxvZ2luX3Jl cXVpcmVkCi1AY2hlY2tfcHJlY29uZGl0aW9uCi1kZWYgdGlfc3RhdHMoc2lkPU5vbmUsIGRpZD1O b25lKToKLSAgICAiIiIKLSAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgc2VydmVyIHR1cGxlIGlu cHV0IHN0YXRpc3RpY3MKLSAgICA6cGFyYW0gc2lkOiBzZXJ2ZXIgaWQKLSAgICA6cmV0dXJuOgot ICAgICIiIgotICAgIHJldHVybiBnZXRfZGF0YShzaWQsIGRpZCwgJ3RpX3N0YXRzLnNxbCcpCi0K LQotQGJsdWVwcmludC5yb3V0ZSgnL3RvX3N0YXRzLycsIGVuZHBvaW50PSd0b19zdGF0cycpCi1A Ymx1ZXByaW50LnJvdXRlKCcvdG9fc3RhdHMvPGludDpzaWQ+JywgZW5kcG9pbnQ9J3RvX3N0YXRz X2J5X3NlcnZlcl9pZCcpCi1AYmx1ZXByaW50LnJvdXRlKAotICAgICcvdG9fc3RhdHMvPGludDpz aWQ+LzxpbnQ6ZGlkPicsIGVuZHBvaW50PSd0b19zdGF0c19ieV9kYXRhYmFzZV9pZCcKLSkKLUBs b2dpbl9yZXF1aXJlZAotQGNoZWNrX3ByZWNvbmRpdGlvbgotZGVmIHRvX3N0YXRzKHNpZD1Ob25l LCBkaWQ9Tm9uZSk6Ci0gICAgIiIiCi0gICAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIHNlcnZlciB0 dXBsZSBvdXRwdXQgc3RhdGlzdGljcwotICAgIDpwYXJhbSBzaWQ6IHNlcnZlciBpZAotICAgIDpy ZXR1cm46Ci0gICAgIiIiCi0gICAgcmV0dXJuIGdldF9kYXRhKHNpZCwgZGlkLCAndG9fc3RhdHMu c3FsJykKKyAgICAgICAgc3FsID0gcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAgICAgIi8iLmpv aW4oW2cudGVtcGxhdGVfcGF0aCwgJ2Rhc2hib2FyZF9zdGF0cy5zcWwnXSksIGRpZD1kaWQsCisg ICAgICAgICAgICBjaGFydF9uYW1lcz1jaGFydF9uYW1lcywKKyAgICAgICAgKQorICAgICAgICBz dGF0dXMsIHJlcyA9IGcuY29ubi5leGVjdXRlX2RpY3Qoc3FsKQogCisgICAgICAgIGZvciBjaGFy dF9yb3cgaW4gcmVzWydyb3dzJ106CisgICAgICAgICAgICByZXNwX2RhdGFbY2hhcnRfcm93Wydj aGFydF9uYW1lJ11dID0gY2hhcnRfcm93WydjaGFydF9kYXRhJ10KIAotQGJsdWVwcmludC5yb3V0 ZSgnL2Jpb19zdGF0cy8nLCBlbmRwb2ludD0nYmlvX3N0YXRzJykKLUBibHVlcHJpbnQucm91dGUo Jy9iaW9fc3RhdHMvPGludDpzaWQ+JywgZW5kcG9pbnQ9J2Jpb19zdGF0c19ieV9zZXJ2ZXJfaWQn KQotQGJsdWVwcmludC5yb3V0ZSgKLSAgICAnL2Jpb19zdGF0cy88aW50OnNpZD4vPGludDpkaWQ+ JywgZW5kcG9pbnQ9J2Jpb19zdGF0c19ieV9kYXRhYmFzZV9pZCcKLSkKLUBsb2dpbl9yZXF1aXJl ZAotQGNoZWNrX3ByZWNvbmRpdGlvbgotZGVmIGJpb19zdGF0cyhzaWQ9Tm9uZSwgZGlkPU5vbmUp OgotICAgICIiIgotICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBzZXJ2ZXIgYmxvY2sgSU8gc3Rh dGlzdGljcwotICAgIDpwYXJhbSBzaWQ6IHNlcnZlciBpZAotICAgIDpyZXR1cm46Ci0gICAgIiIi Ci0gICAgcmV0dXJuIGdldF9kYXRhKHNpZCwgZGlkLCAnYmlvX3N0YXRzLnNxbCcpCisgICAgcmV0 dXJuIGFqYXhfcmVzcG9uc2UoCisgICAgICAgIHJlc3BvbnNlPXJlc3BfZGF0YSwKKyAgICAgICAg c3RhdHVzPTIwMAorICAgICkKIAogCiBAYmx1ZXByaW50LnJvdXRlKCcvYWN0aXZpdHkvJywgZW5k cG9pbnQ9J2FjdGl2aXR5JykKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0 aWMvanMvY2hhcnRpbmcuanMgYi93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvc3RhdGljL2pzL2NoYXJ0 aW5nLmpzCmluZGV4IDY0ZDkwMjdkLi5iNjBhMDJhZCAxMDA2NDQKLS0tIGEvd2ViL3BnYWRtaW4v ZGFzaGJvYXJkL3N0YXRpYy9qcy9jaGFydGluZy5qcworKysgYi93ZWIvcGdhZG1pbi9kYXNoYm9h cmQvc3RhdGljL2pzL2NoYXJ0aW5nLmpzCkBAIC02OCw3ICs2OCw5IEBAIGV4cG9ydCBjbGFzcyBD aGFydCB7CiAgIH0KIAogICBnZXRPdGhlckRhdGEoa2V5KSB7Ci0gICAgcmV0dXJuIHRoaXMuX290 aGVyRGF0YVtrZXldOworICAgIGlmKHRoaXMuX290aGVyRGF0YVtrZXldKSB7CisgICAgICByZXR1 cm4gdGhpcy5fb3RoZXJEYXRhW2tleV07CisgICAgfQogICB9CiAKICAgc2V0T3RoZXJEYXRhKGtl eSwgdmFsdWUpIHsKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC9zdGF0aWMvanMv ZGFzaGJvYXJkLmpzIGIvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3N0YXRpYy9qcy9kYXNoYm9hcmQu anMKaW5kZXggM2M5YTQzYTMuLjY3YmMzMzM1IDEwMDY0NAotLS0gYS93ZWIvcGdhZG1pbi9kYXNo Ym9hcmQvc3RhdGljL2pzL2Rhc2hib2FyZC5qcworKysgYi93ZWIvcGdhZG1pbi9kYXNoYm9hcmQv c3RhdGljL2pzL2Rhc2hib2FyZC5qcwpAQCAtMTAsMTEgKzEwLDExIEBACiBkZWZpbmUoJ3BnYWRt aW4uZGFzaGJvYXJkJywgWwogICAnc291cmNlcy91cmxfZm9yJywgJ3NvdXJjZXMvZ2V0dGV4dCcs ICdyZXF1aXJlJywgJ2pxdWVyeScsICd1bmRlcnNjb3JlJywKICAgJ3NvdXJjZXMvcGdhZG1pbics ICdiYWNrYm9uZScsICdiYWNrZ3JpZCcsICcuL2NoYXJ0aW5nJywKLSAgJ3BnYWRtaW4uYWxlcnRp ZnlqcycsICdwZ2FkbWluLmJhY2tmb3JtJywKLSAgJ3NvdXJjZXMvbm9kZXMvZGFzaGJvYXJkJywg J3BnYWRtaW4uYnJvd3NlcicsICdib290c3RyYXAnLCAnd2Nkb2NrZXInLAorICAncGdhZG1pbi5h bGVydGlmeWpzJywgJ3BnYWRtaW4uYmFja2Zvcm0nLCAnc291cmNlcy9ub2Rlcy9kYXNoYm9hcmQn LAorICAnc291cmNlcy91dGlscycsICdwZ2FkbWluLmJyb3dzZXInLCAnYm9vdHN0cmFwJywgJ3dj ZG9ja2VyJywKIF0sIGZ1bmN0aW9uKAogICB1cmxfZm9yLCBnZXR0ZXh0LCByLCAkLCBfLCBwZ0Fk bWluLCBCYWNrYm9uZSwgQmFja2dyaWQsIGNoYXJ0aW5nLAotICBBbGVydGlmeSwgQmFja2Zvcm0s IE5vZGVzRGFzaGJvYXJkCisgIEFsZXJ0aWZ5LCBCYWNrZm9ybSwgTm9kZXNEYXNoYm9hcmQsIGNv bW1vblV0aWxzCiApIHsKIAogICBwZ0FkbWluLkJyb3dzZXIgPSBwZ0FkbWluLkJyb3dzZXIgfHwg e307CkBAIC0yMTQsOCArMjE0LDkgQEAgZGVmaW5lKCdwZ2FkbWluLmRhc2hib2FyZCcsIFsKICAg ICAgIC8vIExvYWQgdGhlIGRlZmF1bHQgd2VsY29tZSBkYXNoYm9hcmQKICAgICAgIHZhciB1cmwg PSB1cmxfZm9yKCdkYXNoYm9hcmQuaW5kZXgnKTsKIAotICAgICAgLyogU3RvcmUgdGhlIGNoYXJ0 IG9iamVjdHMgYW5kIHRoZXJlIGludGVydmFsIGlkcyBpbiB0aGlzIHN0b3JlICovCi0gICAgICB0 aGlzLmNoYXJ0U3RvcmUgPSB7fTsKKyAgICAgIC8qIFN0b3JlIHRoZSBjaGFydCBvYmplY3RzLCBy ZWZyZXNoIGZyZXEgYW5kIG5leHQgcmVmcmVzaCB0aW1lICovCisgICAgICB0aGlzLmNoYXJ0X3N0 b3JlID0ge307CisgICAgICB0aGlzLmNoYXJ0c19wb2xsZXJfaW50X2lkID0gLTE7CiAKICAgICAg IHZhciBkYXNoYm9hcmRQYW5lbCA9IHBnQnJvd3Nlci5wYW5lbHNbJ2Rhc2hib2FyZCddLnBhbmVs OwogICAgICAgaWYgKGRhc2hib2FyZFBhbmVsKSB7CkBAIC0zNzMsOTYgKzM3NCwxNzggQEAgZGVm aW5lKCdwZ2FkbWluLmRhc2hib2FyZCcsIFsKICAgICAgIH0KICAgICB9LAogCi0gICAgcmVuZGVy Q2hhcnRMb29wOiBmdW5jdGlvbihjaGFydE9iaiwgc2lkLCBkaWQsIHVybCwgY291bnRlciwgcmVm cmVzaCkgewotICAgICAgdmFyIGRhdGEgPSBbXSwKLSAgICAgICAgZGF0YXNldCA9IFtdOworICAg IC8vIFJlbmRlciB0aGUgY2hhcnRzCisgICAgcmVuZGVyQ2hhcnRzOiBmdW5jdGlvbihjaGFydHNf Y29uZmlnKSB7CiAKLSAgICAgIHZhciB0aGVJbnRlcnZhbEZ1bmMgPSBmdW5jdGlvbigpIHsKLSAg ICAgICAgdmFyIHBhdGggPSB1cmwgKyBzaWQ7Ci0gICAgICAgIGlmIChkaWQgIT0gLTEpIHsKLSAg ICAgICAgICBwYXRoICs9ICcvJyArIGRpZDsKKyAgICAgIGxldCBzZWxmID0gdGhpcywKKyAgICAg ICAgdG9vbHRpcEZvcm1hdHRlciA9IGZ1bmN0aW9uKHJlZnJlc2gsIGN1cnJWYWwpIHsKKyAgICAg ICAgICByZXR1cm4oYFNlY29uZHMgYWdvOiAke3BhcnNlSW50KGN1cnJWYWwueCAqIHJlZnJlc2gp fTwvYnI+CisgICAgICAgICAgICAgICAgICBWYWx1ZTogJHtjdXJyVmFsLnl9YCk7CisgICAgICAg IH0sCisgICAgICAgIGN1cnJfZXBvY2g9Y29tbW9uVXRpbHMuZ2V0RXBvY2goKTsKKworICAgICAg c2VsZi5zdG9wQ2hhcnRzUG9sbGVyKCk7CisKKyAgICAgIGNoYXJ0c19jb25maWcubWFwKChjaGFy dF9jb25maWcpID0+IHsKKyAgICAgICAgaWYoc2VsZi5jaGFydF9zdG9yZVtjaGFydF9jb25maWcu Y2hhcnRfbmFtZV0KKyAgICAgICAgICAmJiBzZWxmLm9sZF9wcmVmZXJlbmNlc1tjaGFydF9jb25m aWcucmVmcmVzaF9wcmVmX25hbWVdICE9CisgICAgICAgICAgICBzZWxmLnByZWZlcmVuY2VzW2No YXJ0X2NvbmZpZy5yZWZyZXNoX3ByZWZfbmFtZV0pIHsKKyAgICAgICAgICBzZWxmLmNsZWFyQ2hh cnRGcm9tU3RvcmUoY2hhcnRfY29uZmlnLmNoYXJ0X25hbWUpOwogICAgICAgICB9Ci0gICAgICAg ICQuYWpheCh7Ci0gICAgICAgICAgdXJsOiBwYXRoLAotICAgICAgICAgIHR5cGU6ICdHRVQnLAot ICAgICAgICAgIGRhdGFUeXBlOiAnaHRtbCcsCi0gICAgICAgIH0pCi0gICAgICAgIC5kb25lKGZ1 bmN0aW9uKHJlc3ApIHsKLSAgICAgICAgICAkKGNoYXJ0T2JqLmdldENvbnRhaW5lcigpKS5yZW1v dmVDbGFzcygnZ3JhcGgtZXJyb3InKTsKLSAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShyZXNw KTsKLQotICAgICAgICAgIHZhciB5ID0gMCwKLSAgICAgICAgICAgIHg7Ci0gICAgICAgICAgaWYg KGRhdGFzZXQubGVuZ3RoID09IDApIHsKLSAgICAgICAgICAgIGlmIChjb3VudGVyID09IHRydWUp IHsKLSAgICAgICAgICAgICAgLy8gSGF2ZSB3ZSBzdGFzaGVkIGluaXRpYWwgdmFsdWVzPwotICAg ICAgICAgICAgICBpZiAoXy5pc1VuZGVmaW5lZChjaGFydE9iai5nZXRPdGhlckRhdGEoJ2NvdW50 ZXJfcHJldmlvdXNfdmFscycpKSkgewotICAgICAgICAgICAgICAgIGNoYXJ0T2JqLnNldE90aGVy RGF0YSgnY291bnRlcl9wcmV2aW91c192YWxzJywgZGF0YVswXSk7Ci0gICAgICAgICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIHRoZSBpbml0aWFsIGRhdGEgc3RydWN0 dXJlCi0gICAgICAgICAgICAgICAgZm9yICh4IGluIGRhdGFbMF0pIHsKLSAgICAgICAgICAgICAg ICAgIGRhdGFzZXQucHVzaCh7Ci0gICAgICAgICAgICAgICAgICAgICdkYXRhJzogWwotICAgICAg ICAgICAgICAgICAgICAgIFswLCBkYXRhWzBdW3hdIC0gY2hhcnRPYmouZ2V0T3RoZXJEYXRhKCdj b3VudGVyX3ByZXZpb3VzX3ZhbHMnKVt4XV0sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAg ICAgICAgICAgICAgICAgICdsYWJlbCc6IHgsCi0gICAgICAgICAgICAgICAgICB9KTsKLSAgICAg ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg ICAgICAgICAgIC8vIENyZWF0ZSB0aGUgaW5pdGlhbCBkYXRhIHN0cnVjdHVyZQotICAgICAgICAg ICAgICBmb3IgKHggaW4gZGF0YVswXSkgewotICAgICAgICAgICAgICAgIGRhdGFzZXQucHVzaCh7 Ci0gICAgICAgICAgICAgICAgICAnZGF0YSc6IFsKLSAgICAgICAgICAgICAgICAgICAgWzAsIGRh dGFbMF1beF1dLAotICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICdsYWJl bCc6IHgsCi0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICAgIH0KLSAgICAgICAgICAg IH0KLSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZm9yICh4IGluIGRhdGFbMF0pIHsK LSAgICAgICAgICAgICAgLy8gUHVzaCBuZXcgdmFsdWVzIG9udG8gdGhlIGV4aXN0aW5nIGRhdGEg c3RydWN0dXJlCi0gICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBjb3VudGVyIHN0YXQsIHdl IG5lZWQgdG8gc3VidHJhY3QgdGhlIHByZXZpb3VzIHZhbHVlCi0gICAgICAgICAgICAgIGlmIChj b3VudGVyID09IGZhbHNlKSB7Ci0gICAgICAgICAgICAgICAgZGF0YXNldFt5XVsnZGF0YSddLnVu c2hpZnQoWzAsIGRhdGFbMF1beF1dKTsKLSAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg ICAgICAgICAvLyBTdG9yZSB0aGUgY3VycmVudCB2YWx1ZSwgbWludXMgdGhlIHByZXZpb3VzIG9u ZSB3ZSBzdGFzaGVkLgotICAgICAgICAgICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhlIHRhYiBo YXMgYmVlbiByZWxvYWRlZCwgaW4gd2hpY2ggY2FzZSBvdXQgcHJldmlvdXMgdmFsdWVzIGFyZSBn b25lCi0gICAgICAgICAgICAgICAgaWYgKF8uaXNVbmRlZmluZWQoY2hhcnRPYmouZ2V0T3RoZXJE YXRhKCdjb3VudGVyX3ByZXZpb3VzX3ZhbHMnKSkpCi0gICAgICAgICAgICAgICAgICByZXR1cm47 Ci0KLSAgICAgICAgICAgICAgICBkYXRhc2V0W3ldWydkYXRhJ10udW5zaGlmdChbMCwgZGF0YVsw XVt4XSAtIGNoYXJ0T2JqLmdldE90aGVyRGF0YSgnY291bnRlcl9wcmV2aW91c192YWxzJylbeF1d KTsKLSAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSB0aW1lIGlu ZGV4IHRvIGdldCBhIHByb3BlciBzY3JvbGxpbmcgZGlzcGxheQotICAgICAgICAgICAgICBmb3Ig KHZhciB6ID0gMDsgeiA8IGRhdGFzZXRbeV1bJ2RhdGEnXS5sZW5ndGg7IHorKykgewotICAgICAg ICAgICAgICAgIGRhdGFzZXRbeV1bJ2RhdGEnXVt6XVswXSA9IHo7Ci0gICAgICAgICAgICAgIH0K KyAgICAgICAgaWYoc2VsZi5jaGFydF9zdG9yZVtjaGFydF9jb25maWcuY2hhcnRfbmFtZV0pIHsK KyAgICAgICAgICBsZXQgY2hhcnRfb2JqID0gc2VsZi5jaGFydF9zdG9yZVtjaGFydF9jb25maWcu Y2hhcnRfbmFtZV0uY2hhcnRfb2JqOworICAgICAgICAgIGNoYXJ0X29iai5zZXRPcHRpb25zKGNo YXJ0X2NvbmZpZy5vcHRpb25zLCBmYWxzZSk7CisgICAgICAgICAgY2hhcnRfb2JqLnNldFRvb2x0 aXBGb3JtYXR0ZXIoCisgICAgICAgICAgICB0b29sdGlwRm9ybWF0dGVyLmJpbmQobnVsbCwgc2Vs Zi5wcmVmZXJlbmNlc1tjaGFydF9jb25maWcucmVmcmVzaF9wcmVmX25hbWVdKQorICAgICAgICAg ICk7CisgICAgICAgIH0KIAotICAgICAgICAgICAgICB5Kys7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBjaGFydE9iai5zZXRPdGhlckRhdGEoJ2NvdW50ZXJfcHJldmlvdXNfdmFscycsIGRh dGFbMF0pOworICAgICAgICBpZighc2VsZi5jaGFydF9zdG9yZVtjaGFydF9jb25maWcuY2hhcnRf bmFtZV0pIHsKKyAgICAgICAgICBsZXQgY2hhcnRfb2JqID0gbmV3IGNoYXJ0aW5nLkNoYXJ0KGNo YXJ0X2NvbmZpZy5jb250YWluZXIsIGNoYXJ0X2NvbmZpZy5vcHRpb25zKTsKKworICAgICAgICAg IGNoYXJ0X29iai5zZXRUb29sdGlwRm9ybWF0dGVyKAorICAgICAgICAgICAgdG9vbHRpcEZvcm1h dHRlci5iaW5kKG51bGwsIHNlbGYucHJlZmVyZW5jZXNbY2hhcnRfY29uZmlnLnJlZnJlc2hfcHJl Zl9uYW1lXSkKKyAgICAgICAgICApOworCisgICAgICAgICAgY2hhcnRfb2JqLnNldE90aGVyRGF0 YSgnY291bnRlcicsIGNoYXJ0X2NvbmZpZy5jb3VudGVyKTsKKworICAgICAgICAgIHNlbGYuY2hh cnRfc3RvcmVbY2hhcnRfY29uZmlnLmNoYXJ0X25hbWVdID0geworICAgICAgICAgICAgJ2NoYXJ0 X29iaicgOiBjaGFydF9vYmosCisgICAgICAgICAgICAncmVmcmVzaF9vbic6IGN1cnJfZXBvY2gs CisgICAgICAgICAgICAncmVmcmVzaF9yYXRlJzogc2VsZi5wcmVmZXJlbmNlc1tjaGFydF9jb25m aWcucmVmcmVzaF9wcmVmX25hbWVdLAorICAgICAgICAgIH07CisgICAgICAgIH0KKyAgICAgIH0p OworCisgICAgICBzZWxmLnN0YXJ0Q2hhcnRzUG9sbGVyKHNlbGYuY2hhcnRfc3RvcmUsIHNlbGYu c2lkLCBzZWxmLmRpZCk7CisgICAgfSwKKworICAgIGdldFN0YXRzVXJsOiBmdW5jdGlvbihzaWQ9 LTEsIGRpZD0tMSwgY2hhcnRfbmFtZXM9W10pIHsKKyAgICAgIGxldCBiYXNlX3VybCA9IHVybF9m b3IoJ2Rhc2hib2FyZC5kYXNoYm9hcmRfc3RhdHMnKTsKKyAgICAgIGJhc2VfdXJsICs9ICcvJyAr IHNpZDsKKyAgICAgIGJhc2VfdXJsICs9IChkaWQgPiAwKSA/ICgnLycgKyBkaWQpIDogJyc7Cisg ICAgICBiYXNlX3VybCArPSAnP2NoYXJ0X25hbWVzPScgKyBjaGFydF9uYW1lcy5qb2luKCcsJyk7 CisgICAgICByZXR1cm4gYmFzZV91cmw7CisgICAgfSwKKworICAgIHVwZGF0ZUNoYXJ0OiBmdW5j dGlvbihjaGFydF9vYmosIG5ld19kYXRhKXsKKyAgICAgIC8vIERhdGFzZXQgZm9ybWF0OgorICAg ICAgLy8gWworICAgICAgLy8gICAgIHsgZGF0YTogW1swLCB5MF0sIFsxLCB5MV0uLi5dLCBsYWJl bDogJ0xhYmVsIDEnLCBbb3B0aW9uc10gfSwKKyAgICAgIC8vICAgICB7IGRhdGE6IFtbMCwgeTBd LCBbMSwgeTFdLi4uXSwgbGFiZWw6ICdMYWJlbCAyJywgW29wdGlvbnNdIH0sCisgICAgICAvLyAg ICAgeyBkYXRhOiBbWzAsIHkwXSwgWzEsIHkxXS4uLl0sIGxhYmVsOiAnTGFiZWwgMycsIFtvcHRp b25zXSB9CisgICAgICAvLyBdCisgICAgICBsZXQgZGF0YXNldCA9IGNoYXJ0X29iai5nZXRPdGhl ckRhdGEoJ2RhdGFzZXQnKSB8fCBbXSwKKyAgICAgICAgY291bnRlcl9wcmV2X2RhdGEgPSBjaGFy dF9vYmouZ2V0T3RoZXJEYXRhKCdjb3VudGVyX3ByZXZfZGF0YScpIHx8IG5ld19kYXRhLAorICAg ICAgICBjb3VudGVyID0gY2hhcnRfb2JqLmdldE90aGVyRGF0YSgnY291bnRlcicpIHx8IGZhbHNl OworCisgICAgICBpZiAoZGF0YXNldC5sZW5ndGggPT0gMCkgeworICAgICAgICAvLyBDcmVhdGUg dGhlIGluaXRpYWwgZGF0YSBzdHJ1Y3R1cmUKKyAgICAgICAgZm9yIChsZXQgbGFiZWwgaW4gbmV3 X2RhdGEpIHsKKyAgICAgICAgICBkYXRhc2V0LnB1c2goeworICAgICAgICAgICAgJ2RhdGEnOiBb CisgICAgICAgICAgICAgIFswLCBjb3VudGVyID8gKG5ld19kYXRhW2xhYmVsXSAtIGNvdW50ZXJf cHJldl9kYXRhW2xhYmVsXSkgOiBuZXdfZGF0YVtsYWJlbF1dLAorICAgICAgICAgICAgXSwKKyAg ICAgICAgICAgICdsYWJlbCc6IGxhYmVsLAorICAgICAgICAgIH0pOworICAgICAgICB9CisgICAg ICB9IGVsc2UgeworICAgICAgICBPYmplY3Qua2V5cyhuZXdfZGF0YSkubWFwKChsYWJlbCwgbGFi ZWxfaW5kKSA9PiB7CisgICAgICAgICAgLy8gUHVzaCBuZXcgdmFsdWVzIG9udG8gdGhlIGV4aXN0 aW5nIGRhdGEgc3RydWN0dXJlCisgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIGNvdW50ZXIgc3Rh dCwgd2UgbmVlZCB0byBzdWJ0cmFjdCB0aGUgcHJldmlvdXMgdmFsdWUKKyAgICAgICAgICBpZiAo IWNvdW50ZXIpIHsKKyAgICAgICAgICAgIGRhdGFzZXRbbGFiZWxfaW5kXVsnZGF0YSddLnVuc2hp ZnQoWzAsIG5ld19kYXRhW2xhYmVsXV0pOworICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAvLyBTdG9yZSB0aGUgY3VycmVudCB2YWx1ZSwgbWludXMgdGhlIHByZXZpb3VzIG9uZSB3ZSBz dGFzaGVkLgorICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGUgdGFiIGhhcyBiZWVuIHJl bG9hZGVkLCBpbiB3aGljaCBjYXNlIG91dCBwcmV2aW91cyB2YWx1ZXMgYXJlIGdvbmUKKyAgICAg ICAgICAgIGlmIChfLmlzVW5kZWZpbmVkKGNvdW50ZXJfcHJldl9kYXRhKSkKKyAgICAgICAgICAg ICAgcmV0dXJuOworCisgICAgICAgICAgICBkYXRhc2V0W2xhYmVsX2luZF1bJ2RhdGEnXS51bnNo aWZ0KFswLCBuZXdfZGF0YVtsYWJlbF0gLSBjb3VudGVyX3ByZXZfZGF0YVtsYWJlbF1dKTsKICAg ICAgICAgICB9CiAKLSAgICAgICAgICAvLyBSZW1vdmUgdW5lZWRlZCBlbGVtZW50cwotICAgICAg ICAgIGZvciAoeCA9IDA7IHggPCBkYXRhc2V0Lmxlbmd0aDsgeCsrKSB7Ci0gICAgICAgICAgICAv LyBSZW1vdmUgb2xkIGRhdGEgcG9pbnRzCi0gICAgICAgICAgICBpZiAoZGF0YXNldFt4XVsnZGF0 YSddLmxlbmd0aCA+IDEwMSkgewotICAgICAgICAgICAgICBkYXRhc2V0W3hdWydkYXRhJ10ucG9w KCk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgLy8gUmVzZXQgdGhlIHRpbWUgaW5kZXggdG8g Z2V0IGEgcHJvcGVyIHNjcm9sbGluZyBkaXNwbGF5CisgICAgICAgICAgZm9yICh2YXIgdGltZV9p bmQgPSAwOyB0aW1lX2luZCA8IGRhdGFzZXRbbGFiZWxfaW5kXVsnZGF0YSddLmxlbmd0aDsgdGlt ZV9pbmQrKykgeworICAgICAgICAgICAgZGF0YXNldFtsYWJlbF9pbmRdWydkYXRhJ11bdGltZV9p bmRdWzBdID0gdGltZV9pbmQ7CiAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICAgICAgY291 bnRlcl9wcmV2X2RhdGEgPSBuZXdfZGF0YTsKKyAgICAgIH0KIAotICAgICAgICAgIGlmIChjaGFy dE9iai5pc0luUGFnZSgpKSB7Ci0gICAgICAgICAgICBpZiAoY2hhcnRPYmouaXNWaXNpYmxlKCkp IHsKLSAgICAgICAgICAgICAgY2hhcnRPYmouZHJhdyhkYXRhc2V0KTsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuOworICAgICAgLy8gUmVtb3Zl IG9sZCBkYXRhIHBvaW50cworICAgICAgZm9yIChsZXQgbGFiZWxfaW5kID0gMDsgbGFiZWxfaW5k IDwgZGF0YXNldC5sZW5ndGg7IGxhYmVsX2luZCsrKSB7CisgICAgICAgIGlmIChkYXRhc2V0W2xh YmVsX2luZF1bJ2RhdGEnXS5sZW5ndGggPiAxMDEpIHsKKyAgICAgICAgICBkYXRhc2V0W2xhYmVs X2luZF1bJ2RhdGEnXS5wb3AoKTsKKyAgICAgICAgfQorICAgICAgfQorCisgICAgICBjaGFydF9v Ymouc2V0T3RoZXJEYXRhKCdkYXRhc2V0JywgZGF0YXNldCk7CisgICAgICBjaGFydF9vYmouc2V0 T3RoZXJEYXRhKCdjb3VudGVyX3ByZXZfZGF0YScsIGNvdW50ZXJfcHJldl9kYXRhKTsKKworICAg ICAgaWYgKGNoYXJ0X29iai5pc0luUGFnZSgpKSB7CisgICAgICAgIGlmIChjaGFydF9vYmouaXNW aXNpYmxlKCkpIHsKKyAgICAgICAgICBjaGFydF9vYmouZHJhdyhkYXRhc2V0KTsKKyAgICAgICAg fQorICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0sCisKKyAg ICBzdG9wQ2hhcnRzUG9sbGVyOiBmdW5jdGlvbigpIHsKKyAgICAgIGNsZWFySW50ZXJ2YWwodGhp cy5jaGFydHNfcG9sbGVyX2ludF9pZCk7CisgICAgfSwKKworICAgIHN0YXJ0Q2hhcnRzUG9sbGVy OiBmdW5jdGlvbihjaGFydF9zdG9yZSwgc2lkLCBkaWQpIHsKKyAgICAgIGxldCBzZWxmID0gdGhp czsKKyAgICAgIC8qIHBvbGxpbmcgd2lsbCB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3Igb2Yg dGhlIHJlZnJlc2ggcmF0ZXMqLworICAgICAgbGV0IHBvbGxfaW50ZXJ2YWwgPSBjb21tb25VdGls cy5nZXRHQ0QoCisgICAgICAgIE9iamVjdC52YWx1ZXMoY2hhcnRfc3RvcmUpLm1hcChpdGVtID0+ IGl0ZW0ucmVmcmVzaF9yYXRlKQorICAgICAgKTsKKyAgICAgIGNvbnN0IFdBSVRfQ09VTlRFUiA9 IDM7CisgICAgICBsZXQgbGFzdF9wb2xsX3dhaXRfY291bnRlciA9IFdBSVRfQ09VTlRFUjsKKwor ICAgICAgLyogU3RvcCBpZiBydW5uaW5nLCBvbmx5IG9uZSBwb2xsZXIgbGl2ZXMgKi8KKyAgICAg IHNlbGYuc3RvcENoYXJ0c1BvbGxlcigpOworCisgICAgICB2YXIgdGhlUG9sbGluZ0Z1bmMgPSBm dW5jdGlvbigpIHsKKyAgICAgICAgbGV0IGN1cnJfZXBvY2ggPSBjb21tb25VdGlscy5nZXRFcG9j aCgpOworICAgICAgICBsZXQgY2hhcnRfbmFtZXNfdG9fZ2V0ID0gW107CisKKyAgICAgICAgZm9y KGxldCBjaGFydF9uYW1lIGluIGNoYXJ0X3N0b3JlKSB7CisgICAgICAgICAgLyogd2hlbiBpdHMg dGltZSB0byBnZXQgdGhlIGRhdGEgKi8KKyAgICAgICAgICBpZihjaGFydF9zdG9yZVtjaGFydF9u YW1lXS5yZWZyZXNoX29uIDw9IGN1cnJfZXBvY2gpIHsKKyAgICAgICAgICAgIC8qIHNldCB0aGUg bmV4dCB0cmlnZ2VyIHBvaW50ICovCisgICAgICAgICAgICBjaGFydF9zdG9yZVtjaGFydF9uYW1l XS5yZWZyZXNoX29uID0gY3Vycl9lcG9jaCArIGNoYXJ0X3N0b3JlW2NoYXJ0X25hbWVdLnJlZnJl c2hfcmF0ZTsKKyAgICAgICAgICAgIGNoYXJ0X25hbWVzX3RvX2dldC5wdXNoKGNoYXJ0X25hbWUp OwogICAgICAgICAgIH0KKyAgICAgICAgfQogCisgICAgICAgIC8qIElmIG5vbmUgb2YgdGhlIGNo YXJ0IHdhbnRzIGRhdGEsIGRvbid0IHRyb3VibGUKKyAgICAgICAgICogSWYgcmVzcG9uc2Ugbm90 IHJlY2VpdmVkIGZyb20gcHJldiBwb2xsLCBkb24ndCB0cm91YmxlICEhCisgICAgICAgICAqLwor ICAgICAgICBpZihjaGFydF9uYW1lc190b19nZXQubGVuZ3RoID09IDAgfHwgbGFzdF9wb2xsX3dh aXRfY291bnRlciA+IDApIHsKKyAgICAgICAgICAvKiByZWR1Y2UgdGhlIG51bWJlciBvZiB0cmll cywgcmVxdWVzdCBzaG91bGQgYmUgc2VudCBpZiBsYXN0X3BvbGxfd2FpdF9jb3VudGVyCisgICAg ICAgICAgICogY29tcGxldGVzIFdBSVRfQ09VTlRFUiB0aW1lcy4qLworICAgICAgICAgIGxhc3Rf cG9sbF93YWl0X2NvdW50ZXItLTsKKyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg ICAgICB2YXIgcGF0aCA9IHNlbGYuZ2V0U3RhdHNVcmwoc2lkLCBkaWQsIGNoYXJ0X25hbWVzX3Rv X2dldCk7CisgICAgICAgICQuYWpheCh7CisgICAgICAgICAgdXJsOiBwYXRoLAorICAgICAgICAg IHR5cGU6ICdHRVQnLAorICAgICAgICB9KQorICAgICAgICAuZG9uZShmdW5jdGlvbihyZXNwKSB7 CisgICAgICAgICAgbGFzdF9wb2xsX3dhaXRfY291bnRlciA9IDA7CisgICAgICAgICAgZm9yKGxl dCBjaGFydF9uYW1lIGluIHJlc3ApIHsKKyAgICAgICAgICAgIGxldCBjaGFydF9vYmogPSBjaGFy dF9zdG9yZVtjaGFydF9uYW1lXS5jaGFydF9vYmo7CisgICAgICAgICAgICAkKGNoYXJ0X29iai5n ZXRDb250YWluZXIoKSkucmVtb3ZlQ2xhc3MoJ2dyYXBoLWVycm9yJyk7CisgICAgICAgICAgICBz ZWxmLnVwZGF0ZUNoYXJ0KGNoYXJ0X29iaiwgcmVzcFtjaGFydF9uYW1lXSk7CisgICAgICAgICAg fQogICAgICAgICB9KQogICAgICAgICAuZmFpbChmdW5jdGlvbih4aHIpIHsKKyAgICAgICAgICBs YXN0X3BvbGxfd2FpdF9jb3VudGVyID0gMDsKICAgICAgICAgICBsZXQgZXJyID0gJyc7CiAgICAg ICAgICAgbGV0IG1zZyA9ICcnOwogICAgICAgICAgIGxldCBjbHMgPSAnaW5mbyc7CkBAIC00ODQs NjYgKzU2NywxOSBAQCBkZWZpbmUoJ3BnYWRtaW4uZGFzaGJvYXJkJywgWwogICAgICAgICAgICAg fQogICAgICAgICAgIH0KIAotICAgICAgICAgICQoY2hhcnRPYmouZ2V0Q29udGFpbmVyKCkpLmFk ZENsYXNzKCdncmFwaC1lcnJvcicpOwotICAgICAgICAgICQoY2hhcnRPYmouZ2V0Q29udGFpbmVy KCkpLmh0bWwoCi0gICAgICAgICAgICAnPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtJyArIGNscyAr ICcgcGctcGFuZWwtbWVzc2FnZSIgcm9sZT0iYWxlcnQiPicgKyBtc2cgKyAnPC9kaXY+JwotICAg ICAgICAgICk7CisgICAgICAgICAgZm9yKGxldCBjaGFydF9uYW1lIGluIGNoYXJ0X3N0b3JlKSB7 CisgICAgICAgICAgICBsZXQgY2hhcnRfb2JqID0gY2hhcnRfc3RvcmVbY2hhcnRfbmFtZV0uY2hh cnRfb2JqOworICAgICAgICAgICAgJChjaGFydF9vYmouZ2V0Q29udGFpbmVyKCkpLmFkZENsYXNz KCdncmFwaC1lcnJvcicpOworICAgICAgICAgICAgJChjaGFydF9vYmouZ2V0Q29udGFpbmVyKCkp Lmh0bWwoCisgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC0nICsgY2xzICsg JyBwZy1wYW5lbC1tZXNzYWdlIiByb2xlPSJhbGVydCI+JyArIG1zZyArICc8L2Rpdj4nCisgICAg ICAgICAgICApOworICAgICAgICAgIH0KICAgICAgICAgfSk7CisgICAgICAgIGxhc3RfcG9sbF93 YWl0X2NvdW50ZXIgPSBXQUlUX0NPVU5URVI7CiAgICAgICB9OwogICAgICAgLyogRXhlY3V0ZSBv bmNlIGZvciB0aGUgZmlyc3QgdGltZSBhcyBzZXRJbnRlcnZhbCB3aWxsIG5vdCBkbyAqLwotICAg ICAgdGhlSW50ZXJ2YWxGdW5jKCk7Ci0gICAgICByZXR1cm4gc2V0SW50ZXJ2YWwodGhlSW50ZXJ2 YWxGdW5jLCByZWZyZXNoICogMTAwMCk7Ci0gICAgfSwKLQotICAgIC8vIFJlbmRlciBhIGNoYXJ0 Ci0gICAgcmVuZGVyX2NoYXJ0OiBmdW5jdGlvbigKLSAgICAgIGNvbnRhaW5lciwgdXJsLCBvcHRp b25zLCBjb3VudGVyLCBjaGFydE5hbWUsIHByZWZOYW1lCi0gICAgKSB7Ci0KLSAgICAgIC8vIERh dGEgZm9ybWF0OgotICAgICAgLy8gWwotICAgICAgLy8gICAgIHsgZGF0YTogW1swLCB5MF0sIFsx LCB5MV0uLi5dLCBsYWJlbDogJ0xhYmVsIDEnLCBbb3B0aW9uc10gfSwKLSAgICAgIC8vICAgICB7 IGRhdGE6IFtbMCwgeTBdLCBbMSwgeTFdLi4uXSwgbGFiZWw6ICdMYWJlbCAyJywgW29wdGlvbnNd IH0sCi0gICAgICAvLyAgICAgeyBkYXRhOiBbWzAsIHkwXSwgWzEsIHkxXS4uLl0sIGxhYmVsOiAn TGFiZWwgMycsIFtvcHRpb25zXSB9Ci0gICAgICAvLyBdCi0KLSAgICAgIGxldCBzZWxmID0gdGhp cywKLSAgICAgICAgdG9vbHRpcEZvcm1hdHRlciA9IGZ1bmN0aW9uKHJlZnJlc2gsIGN1cnJWYWwp IHsKLSAgICAgICAgICByZXR1cm4oYFNlY29uZHMgYWdvOiAke3BhcnNlSW50KGN1cnJWYWwueCAq IHJlZnJlc2gpfTwvYnI+Ci0gICAgICAgICAgICAgICAgICBWYWx1ZTogJHtjdXJyVmFsLnl9YCk7 Ci0gICAgICAgIH07Ci0KLSAgICAgIGlmKHNlbGYuY2hhcnRTdG9yZVtjaGFydE5hbWVdCi0gICAg ICAgICYmIHNlbGYub2xkX3ByZWZlcmVuY2VzW3ByZWZOYW1lXSAhPSBzZWxmLnByZWZlcmVuY2Vz W3ByZWZOYW1lXSkgewotICAgICAgICBzZWxmLmNsZWFyQ2hhcnRGcm9tU3RvcmUoY2hhcnROYW1l KTsKLSAgICAgIH0KLQotICAgICAgaWYoc2VsZi5jaGFydFN0b3JlW2NoYXJ0TmFtZV0pIHsKLSAg ICAgICAgbGV0IGNoYXJ0T2JqID0gc2VsZi5jaGFydFN0b3JlW2NoYXJ0TmFtZV0uY2hhcnRPYmo7 Ci0gICAgICAgIGNoYXJ0T2JqLnNldE9wdGlvbnMob3B0aW9ucywgZmFsc2UpOwotICAgICAgICBj aGFydE9iai5zZXRUb29sdGlwRm9ybWF0dGVyKAotICAgICAgICAgIHRvb2x0aXBGb3JtYXR0ZXIu YmluZChudWxsLCBzZWxmLnByZWZlcmVuY2VzW3ByZWZOYW1lXSkKLSAgICAgICAgKTsKLSAgICAg IH0KLQotICAgICAgaWYoIXNlbGYuY2hhcnRTdG9yZVtjaGFydE5hbWVdKSB7Ci0KLSAgICAgICAg bGV0IGNoYXJ0T2JqID0gbmV3IGNoYXJ0aW5nLkNoYXJ0KGNvbnRhaW5lciwgb3B0aW9ucyk7Ci0K LSAgICAgICAgY2hhcnRPYmouc2V0VG9vbHRpcEZvcm1hdHRlcigKLSAgICAgICAgICB0b29sdGlw Rm9ybWF0dGVyLmJpbmQobnVsbCwgc2VsZi5wcmVmZXJlbmNlc1twcmVmTmFtZV0pCi0gICAgICAg ICk7Ci0KLSAgICAgICAgc2VsZi5jaGFydFN0b3JlW2NoYXJ0TmFtZV0gPSB7Ci0gICAgICAgICAg J2NoYXJ0T2JqJyA6IGNoYXJ0T2JqLAotICAgICAgICAgICdpbnRlcnZhbElkJyA6IHVuZGVmaW5l ZCwKLSAgICAgICAgfTsKLQotICAgICAgICBzZWxmLmNoYXJ0U3RvcmVbY2hhcnROYW1lXVsnaW50 ZXJ2YWxJZCddID0gc2VsZi5yZW5kZXJDaGFydExvb3AoCi0gICAgICAgICAgc2VsZi5jaGFydFN0 b3JlW2NoYXJ0TmFtZV1bJ2NoYXJ0T2JqJ10sIHNlbGYuc2lkLCBzZWxmLmRpZCwgdXJsLAotICAg ICAgICAgIGNvdW50ZXIsIHNlbGYucHJlZmVyZW5jZXNbcHJlZk5hbWVdCi0gICAgICAgICk7Ci0g ICAgICB9CisgICAgICB0aGVQb2xsaW5nRnVuYygpOworICAgICAgc2VsZi5jaGFydHNfcG9sbGVy X2ludF9pZCA9IHNldEludGVydmFsKHRoZVBvbGxpbmdGdW5jLCBwb2xsX2ludGVydmFsICogMTAw MCk7CiAgICAgfSwKIAogICAgIC8vIEhhbmRsZXIgZnVuY3Rpb24gdG8gc3VwcG9ydCB0aGUgIkFk ZCBTZXJ2ZXIiIGxpbmsKQEAgLTY4MywxNCArNzE5LDEzIEBAIGRlZmluZSgncGdhZG1pbi5kYXNo Ym9hcmQnLCBbCiAgICAgY2xlYXJDaGFydEZyb21TdG9yZTogZnVuY3Rpb24oY2hhcnROYW1lKSB7 CiAgICAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICAgICBpZighY2hhcnROYW1lKXsKLSAgICAgICAg Xy5lYWNoKHNlbGYuY2hhcnRTdG9yZSwgZnVuY3Rpb24oY2hhcnQsIGtleSkgewotICAgICAgICAg IGNsZWFySW50ZXJ2YWwoY2hhcnQuaW50ZXJ2YWxJZCk7Ci0gICAgICAgICAgZGVsZXRlIHNlbGYu Y2hhcnRTdG9yZVtrZXldOworICAgICAgICBzZWxmLnN0b3BDaGFydHNQb2xsZXIoKTsKKyAgICAg ICAgXy5lYWNoKHNlbGYuY2hhcnRfc3RvcmUsIGZ1bmN0aW9uKGNoYXJ0LCBrZXkpIHsKKyAgICAg ICAgICBkZWxldGUgc2VsZi5jaGFydF9zdG9yZVtrZXldOwogICAgICAgICB9KTsKICAgICAgIH0K ICAgICAgIGVsc2UgewotICAgICAgICBjbGVhckludGVydmFsKHNlbGYuY2hhcnRTdG9yZVtjaGFy dE5hbWVdLmludGVydmFsSWQpOwotICAgICAgICBkZWxldGUgc2VsZi5jaGFydFN0b3JlW2NoYXJ0 TmFtZV07CisgICAgICAgIGRlbGV0ZSBzZWxmLmNoYXJ0X3N0b3JlW2NoYXJ0TmFtZV07CiAgICAg ICB9CiAgICAgfSwKIApAQCAtNzk3LDI2ICs4MzIsMzcgQEAgZGVmaW5lKCdwZ2FkbWluLmRhc2hi b2FyZCcsIFsKIAogICAgICAgICBpZihzZWxmLnByZWZlcmVuY2VzLnNob3dfZ3JhcGhzKSB7CiAg ICAgICAgICAgLy8gUmVuZGVyIHRoZSBncmFwaHMKLSAgICAgICAgICBwZ0FkbWluLkRhc2hib2Fy ZC5yZW5kZXJfY2hhcnQoCi0gICAgICAgICAgICBkaXZfc2Vzc2lvbnMsIHVybF9mb3IoJ2Rhc2hi b2FyZC5zZXNzaW9uX3N0YXRzJyksIG9wdGlvbnNfbGluZSwgZmFsc2UsCi0gICAgICAgICAgICAn c2Vzc2lvbl9zdGF0cycsICdzZXNzaW9uX3N0YXRzX3JlZnJlc2gnCi0gICAgICAgICAgKTsKLSAg ICAgICAgICBwZ0FkbWluLkRhc2hib2FyZC5yZW5kZXJfY2hhcnQoCi0gICAgICAgICAgICBkaXZf dHBzLCB1cmxfZm9yKCdkYXNoYm9hcmQudHBzX3N0YXRzJyksIG9wdGlvbnNfbGluZSwgdHJ1ZSwK LSAgICAgICAgICAgICd0cHNfc3RhdHMnLCd0cHNfc3RhdHNfcmVmcmVzaCcKLSAgICAgICAgICAp OwotICAgICAgICAgIHBnQWRtaW4uRGFzaGJvYXJkLnJlbmRlcl9jaGFydCgKLSAgICAgICAgICAg IGRpdl90aSwgdXJsX2ZvcignZGFzaGJvYXJkLnRpX3N0YXRzJyksIG9wdGlvbnNfbGluZSwgdHJ1 ZSwKLSAgICAgICAgICAgICd0aV9zdGF0cycsICd0aV9zdGF0c19yZWZyZXNoJwotICAgICAgICAg ICk7Ci0gICAgICAgICAgcGdBZG1pbi5EYXNoYm9hcmQucmVuZGVyX2NoYXJ0KAotICAgICAgICAg ICAgZGl2X3RvLCB1cmxfZm9yKCdkYXNoYm9hcmQudG9fc3RhdHMnKSwgb3B0aW9uc19saW5lLCB0 cnVlLAotICAgICAgICAgICAgJ3RvX3N0YXRzJywndG9fc3RhdHNfcmVmcmVzaCcKLSAgICAgICAg ICApOwotICAgICAgICAgIHBnQWRtaW4uRGFzaGJvYXJkLnJlbmRlcl9jaGFydCgKLSAgICAgICAg ICAgIGRpdl9iaW8sIHVybF9mb3IoJ2Rhc2hib2FyZC5iaW9fc3RhdHMnKSwgb3B0aW9uc19saW5l LCB0cnVlLAotICAgICAgICAgICAgJ2Jpb19zdGF0cycsJ2Jpb19zdGF0c19yZWZyZXNoJwotICAg ICAgICAgICk7CisgICAgICAgICAgcGdBZG1pbi5EYXNoYm9hcmQucmVuZGVyQ2hhcnRzKFt7Cisg ICAgICAgICAgICBjaGFydF9uYW1lOiAnc2Vzc2lvbl9zdGF0cycsCisgICAgICAgICAgICBjb250 YWluZXI6IGRpdl9zZXNzaW9ucywKKyAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNfbGluZSwK KyAgICAgICAgICAgIGNvdW50ZXI6IGZhbHNlLAorICAgICAgICAgICAgcmVmcmVzaF9wcmVmX25h bWU6ICdzZXNzaW9uX3N0YXRzX3JlZnJlc2gnLAorICAgICAgICAgIH0sIHsKKyAgICAgICAgICAg IGNoYXJ0X25hbWU6ICd0cHNfc3RhdHMnLAorICAgICAgICAgICAgY29udGFpbmVyOiBkaXZfdHBz LAorICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc19saW5lLAorICAgICAgICAgICAgY291bnRl cjogdHJ1ZSwKKyAgICAgICAgICAgIHJlZnJlc2hfcHJlZl9uYW1lOiAndHBzX3N0YXRzX3JlZnJl c2gnLAorICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgIGNoYXJ0X25hbWU6ICd0aV9zdGF0cycs CisgICAgICAgICAgICBjb250YWluZXI6IGRpdl90aSwKKyAgICAgICAgICAgIG9wdGlvbnM6IG9w dGlvbnNfbGluZSwKKyAgICAgICAgICAgIGNvdW50ZXI6IHRydWUsCisgICAgICAgICAgICByZWZy ZXNoX3ByZWZfbmFtZTogJ3RpX3N0YXRzX3JlZnJlc2gnLAorICAgICAgICAgIH0sIHsKKyAgICAg ICAgICAgIGNoYXJ0X25hbWU6ICd0b19zdGF0cycsCisgICAgICAgICAgICBjb250YWluZXI6IGRp dl90bywKKyAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnNfbGluZSwKKyAgICAgICAgICAgIGNv dW50ZXI6IHRydWUsCisgICAgICAgICAgICByZWZyZXNoX3ByZWZfbmFtZTogJ3RvX3N0YXRzX3Jl ZnJlc2gnLAorICAgICAgICAgIH0sIHsKKyAgICAgICAgICAgIGNoYXJ0X25hbWU6ICdiaW9fc3Rh dHMnLAorICAgICAgICAgICAgY29udGFpbmVyOiBkaXZfYmlvLAorICAgICAgICAgICAgb3B0aW9u czogb3B0aW9uc19saW5lLAorICAgICAgICAgICAgY291bnRlcjogdHJ1ZSwKKyAgICAgICAgICAg IHJlZnJlc2hfcHJlZl9uYW1lOiAnYmlvX3N0YXRzX3JlZnJlc2gnLAorICAgICAgICAgIH1dKTsK ICAgICAgICAgfQogCiAgICAgICAgIGlmKCFzZWxmLnByZWZlcmVuY2VzLnNob3dfZ3JhcGhzICYm ICFzZWxmLnByZWZlcmVuY2VzLnNob3dfYWN0aXZpdHkpIHsKZGlmZiAtLWdpdCBhL3dlYi9wZ2Fk bWluL2Rhc2hib2FyZC90ZW1wbGF0ZXMvZGFzaGJvYXJkL3NxbC9kZWZhdWx0L2Jpb19zdGF0cy5z cWwgYi93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvdGVtcGxhdGVzL2Rhc2hib2FyZC9zcWwvZGVmYXVs dC9iaW9fc3RhdHMuc3FsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNDI3ZTFhNy4u MDAwMDAwMDAKLS0tIGEvd2ViL3BnYWRtaW4vZGFzaGJvYXJkL3RlbXBsYXRlcy9kYXNoYm9hcmQv c3FsL2RlZmF1bHQvYmlvX3N0YXRzLnNxbAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAot LypwZ2E0ZGFzaCovCi1TRUxFQ1QKLSAgIChTRUxFQ1Qgc3VtKGJsa3NfcmVhZCkgRlJPTSBwZ19z dGF0X2RhdGFiYXNleyUgaWYgZGlkICV9IFdIRVJFIGRhdG5hbWUgPSAoU0VMRUNUIGRhdG5hbWUg RlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBvaWQgPSB7eyBkaWQgfX0peyUgZW5kaWYgJX0pIEFTICJ7 eyBfKCdSZWFkcycpIH19IiwKLSAgIChTRUxFQ1Qgc3VtKGJsa3NfaGl0KSBGUk9NIHBnX3N0YXRf ZGF0YWJhc2V7JSBpZiBkaWQgJX0gV0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9N IHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8o J0hpdHMnKSB9fSIKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC90ZW1wbGF0ZXMv ZGFzaGJvYXJkL3NxbC9kZWZhdWx0L2Rhc2hib2FyZF9zdGF0cy5zcWwgYi93ZWIvcGdhZG1pbi9k YXNoYm9hcmQvdGVtcGxhdGVzL2Rhc2hib2FyZC9zcWwvZGVmYXVsdC9kYXNoYm9hcmRfc3RhdHMu c3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi41NjYwYzIzMAotLS0gL2Rl di9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC90ZW1wbGF0ZXMvZGFzaGJvYXJkL3Nx bC9kZWZhdWx0L2Rhc2hib2FyZF9zdGF0cy5zcWwKQEAgLTAsMCArMSw1NiBAQAoreyUgc2V0IGFk ZF91bmlvbiA9IGZhbHNlICV9Cit7JSBpZiAnc2Vzc2lvbl9zdGF0cycgaW4gY2hhcnRfbmFtZXMg JX0KK3slIHNldCBhZGRfdW5pb24gPSB0cnVlICV9CitTRUxFQ1QgJ3Nlc3Npb25fc3RhdHMnIEFT IGNoYXJ0X25hbWUsIHJvd190b19qc29uKHQpIEFTIGNoYXJ0X2RhdGEKK0ZST00gKFNFTEVDVAor ICAgKFNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3N0YXRfYWN0aXZpdHl7JSBpZiBkaWQgJX0gV0hF UkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9 IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ1RvdGFsJykgfX0iLAorICAgKFNFTEVD VCBjb3VudCgqKSBGUk9NIHBnX3N0YXRfYWN0aXZpdHkgV0hFUkUgc3RhdGUgPSAnYWN0aXZlJ3sl IGlmIGRpZCAlfSBBTkQgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNl IFdIRVJFIG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgIEFTICJ7eyBfKCdBY3RpdmUnKSB9 fSIsCisgICAoU0VMRUNUIGNvdW50KCopIEZST00gcGdfc3RhdF9hY3Rpdml0eSBXSEVSRSBzdGF0 ZSA9ICdpZGxlJ3slIGlmIGRpZCAlfSBBTkQgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9N IHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgIEFTICJ7eyBf KCdJZGxlJykgfX0iCispIHQKK3slIGVuZGlmICV9Cit7JSBpZiBhZGRfdW5pb24gYW5kICd0cHNf c3RhdHMnIGluIGNoYXJ0X25hbWVzICV9CitVTklPTiBBTEwKK3slIGVuZGlmICV9Cit7JSBpZiAn dHBzX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQoreyUgc2V0IGFkZF91bmlvbiA9IHRydWUgJX0K K1NFTEVDVCAndHBzX3N0YXRzJyBBUyBjaGFydF9uYW1lLCByb3dfdG9fanNvbih0KSBBUyBjaGFy dF9kYXRhCitGUk9NIChTRUxFQ1QKKyAgIChTRUxFQ1Qgc3VtKHhhY3RfY29tbWl0KSArIHN1bSh4 YWN0X3JvbGxiYWNrKSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBkaWQgJX0gV0hFUkUgZGF0 bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9IHt7IGRp ZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ1RyYW5zYWN0aW9ucycpIH19IiwKKyAgIChTRUxF Q1Qgc3VtKHhhY3RfY29tbWl0KSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBkaWQgJX0gV0hF UkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9 IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ0NvbW1pdHMnKSB9fSIsCisgICAoU0VM RUNUIHN1bSh4YWN0X3JvbGxiYWNrKSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBkaWQgJX0g V0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9p ZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ1JvbGxiYWNrcycpIH19IgorKSB0 Cit7JSBlbmRpZiAlfQoreyUgaWYgYWRkX3VuaW9uIGFuZCAndGlfc3RhdHMnIGluIGNoYXJ0X25h bWVzICV9CitVTklPTiBBTEwKK3slIGVuZGlmICV9Cit7JSBpZiAndGlfc3RhdHMnIGluIGNoYXJ0 X25hbWVzICV9Cit7JSBzZXQgYWRkX3VuaW9uID0gdHJ1ZSAlfQorU0VMRUNUICd0aV9zdGF0cycg QVMgY2hhcnRfbmFtZSwgcm93X3RvX2pzb24odCkgQVMgY2hhcnRfZGF0YQorRlJPTSAoU0VMRUNU CisgICAoU0VMRUNUIHN1bSh0dXBfaW5zZXJ0ZWQpIEZST00gcGdfc3RhdF9kYXRhYmFzZXslIGlm IGRpZCAlfSBXSEVSRSBkYXRuYW1lID0gKFNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2Ug V0hFUkUgb2lkID0ge3sgZGlkIH19KXslIGVuZGlmICV9KSBBUyAie3sgXygnSW5zZXJ0cycpIH19 IiwKKyAgIChTRUxFQ1Qgc3VtKHR1cF91cGRhdGVkKSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBp ZiBkaWQgJX0gV0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNl IFdIRVJFIG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ1VwZGF0ZXMnKSB9 fSIsCisgICAoU0VMRUNUIHN1bSh0dXBfZGVsZXRlZCkgRlJPTSBwZ19zdGF0X2RhdGFiYXNleyUg aWYgZGlkICV9IFdIRVJFIGRhdG5hbWUgPSAoU0VMRUNUIGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFz ZSBXSEVSRSBvaWQgPSB7eyBkaWQgfX0peyUgZW5kaWYgJX0pIEFTICJ7eyBfKCdEZWxldGVzJykg fX0iCispIHQKK3slIGVuZGlmICV9Cit7JSBpZiBhZGRfdW5pb24gYW5kICd0b19zdGF0cycgaW4g Y2hhcnRfbmFtZXMgJX0KK1VOSU9OIEFMTAoreyUgZW5kaWYgJX0KK3slIGlmICd0b19zdGF0cycg aW4gY2hhcnRfbmFtZXMgJX0KK3slIHNldCBhZGRfdW5pb24gPSB0cnVlICV9CitTRUxFQ1QgJ3Rv X3N0YXRzJyBBUyBjaGFydF9uYW1lLCByb3dfdG9fanNvbih0KSBBUyBjaGFydF9kYXRhCitGUk9N IChTRUxFQ1QKKyAgIChTRUxFQ1Qgc3VtKHR1cF9mZXRjaGVkKSBGUk9NIHBnX3N0YXRfZGF0YWJh c2V7JSBpZiBkaWQgJX0gV0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2Rh dGFiYXNlIFdIRVJFIG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ0ZldGNo ZWQnKSB9fSIsCisgICAoU0VMRUNUIHN1bSh0dXBfcmV0dXJuZWQpIEZST00gcGdfc3RhdF9kYXRh YmFzZXslIGlmIGRpZCAlfSBXSEVSRSBkYXRuYW1lID0gKFNFTEVDVCBkYXRuYW1lIEZST00gcGdf ZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sgZGlkIH19KXslIGVuZGlmICV9KSBBUyAie3sgXygnUmV0 dXJuZWQnKSB9fSIKKykgdAoreyUgZW5kaWYgJX0KK3slIGlmIGFkZF91bmlvbiBhbmQgJ2Jpb19z dGF0cycgaW4gY2hhcnRfbmFtZXMgJX0KK1VOSU9OIEFMTAoreyUgZW5kaWYgJX0KK3slIGlmICdi aW9fc3RhdHMnIGluIGNoYXJ0X25hbWVzICV9Cit7JSBzZXQgYWRkX3VuaW9uID0gdHJ1ZSAlfQor U0VMRUNUICdiaW9fc3RhdHMnIEFTIGNoYXJ0X25hbWUsIHJvd190b19qc29uKHQpIEFTIGNoYXJ0 X2RhdGEKK0ZST00gKFNFTEVDVAorICAgKFNFTEVDVCBzdW0oYmxrc19yZWFkKSBGUk9NIHBnX3N0 YXRfZGF0YWJhc2V7JSBpZiBkaWQgJX0gV0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBG Uk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7 IF8oJ1JlYWRzJykgfX0iLAorICAgKFNFTEVDVCBzdW0oYmxrc19oaXQpIEZST00gcGdfc3RhdF9k YXRhYmFzZXslIGlmIGRpZCAlfSBXSEVSRSBkYXRuYW1lID0gKFNFTEVDVCBkYXRuYW1lIEZST00g cGdfZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sgZGlkIH19KXslIGVuZGlmICV9KSBBUyAie3sgXygn SGl0cycpIH19IgorKSB0Cit7JSBlbmRpZiAlfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vZGFz aGJvYXJkL3RlbXBsYXRlcy9kYXNoYm9hcmQvc3FsL2RlZmF1bHQvc2Vzc2lvbl9zdGF0cy5zcWwg Yi93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvdGVtcGxhdGVzL2Rhc2hib2FyZC9zcWwvZGVmYXVsdC9z ZXNzaW9uX3N0YXRzLnNxbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2VhNmE1Nzcu LjAwMDAwMDAwCi0tLSBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC90ZW1wbGF0ZXMvZGFzaGJvYXJk L3NxbC9kZWZhdWx0L3Nlc3Npb25fc3RhdHMuc3FsCisrKyAvZGV2L251bGwKQEAgLTEsNSArMCww IEBACi0vKnBnYTRkYXNoKi8KLVNFTEVDVAotICAgKFNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3N0 YXRfYWN0aXZpdHl7JSBpZiBkaWQgJX0gV0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBG Uk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7 IF8oJ1RvdGFsJykgfX0iLAotICAgKFNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3N0YXRfYWN0aXZp dHkgV0hFUkUgc3RhdGUgPSAnYWN0aXZlJ3slIGlmIGRpZCAlfSBBTkQgZGF0bmFtZSA9IChTRUxF Q1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRp ZiAlfSkgIEFTICJ7eyBfKCdBY3RpdmUnKSB9fSIsCi0gICAoU0VMRUNUIGNvdW50KCopIEZST00g cGdfc3RhdF9hY3Rpdml0eSBXSEVSRSBzdGF0ZSA9ICdpZGxlJ3slIGlmIGRpZCAlfSBBTkQgZGF0 bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9IHt7IGRp ZCB9fSl7JSBlbmRpZiAlfSkgIEFTICJ7eyBfKCdJZGxlJykgfX0iCmRpZmYgLS1naXQgYS93ZWIv cGdhZG1pbi9kYXNoYm9hcmQvdGVtcGxhdGVzL2Rhc2hib2FyZC9zcWwvZGVmYXVsdC90aV9zdGF0 cy5zcWwgYi93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvdGVtcGxhdGVzL2Rhc2hib2FyZC9zcWwvZGVm YXVsdC90aV9zdGF0cy5zcWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmOTc2MDgy Li4wMDAwMDAwMAotLS0gYS93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvdGVtcGxhdGVzL2Rhc2hib2Fy ZC9zcWwvZGVmYXVsdC90aV9zdGF0cy5zcWwKKysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAK LS8qcGdhNGRhc2gqLwotU0VMRUNUCi0gICAoU0VMRUNUIHN1bSh0dXBfaW5zZXJ0ZWQpIEZST00g cGdfc3RhdF9kYXRhYmFzZXslIGlmIGRpZCAlfSBXSEVSRSBkYXRuYW1lID0gKFNFTEVDVCBkYXRu YW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sgZGlkIH19KXslIGVuZGlmICV9KSBB UyAie3sgXygnSW5zZXJ0cycpIH19IiwKLSAgIChTRUxFQ1Qgc3VtKHR1cF91cGRhdGVkKSBGUk9N IHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBkaWQgJX0gV0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0 bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkg QVMgInt7IF8oJ1VwZGF0ZXMnKSB9fSIsCi0gICAoU0VMRUNUIHN1bSh0dXBfZGVsZXRlZCkgRlJP TSBwZ19zdGF0X2RhdGFiYXNleyUgaWYgZGlkICV9IFdIRVJFIGRhdG5hbWUgPSAoU0VMRUNUIGRh dG5hbWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBvaWQgPSB7eyBkaWQgfX0peyUgZW5kaWYgJX0p IEFTICJ7eyBfKCdEZWxldGVzJykgfX0iCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9kYXNoYm9h cmQvdGVtcGxhdGVzL2Rhc2hib2FyZC9zcWwvZGVmYXVsdC90b19zdGF0cy5zcWwgYi93ZWIvcGdh ZG1pbi9kYXNoYm9hcmQvdGVtcGxhdGVzL2Rhc2hib2FyZC9zcWwvZGVmYXVsdC90b19zdGF0cy5z cWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmNWEzYmVmLi4wMDAwMDAwMAotLS0g YS93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvdGVtcGxhdGVzL2Rhc2hib2FyZC9zcWwvZGVmYXVsdC90 b19zdGF0cy5zcWwKKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLS8qcGdhNGRhc2gqLwot U0VMRUNUCi0gICAoU0VMRUNUIHN1bSh0dXBfZmV0Y2hlZCkgRlJPTSBwZ19zdGF0X2RhdGFiYXNl eyUgaWYgZGlkICV9IFdIRVJFIGRhdG5hbWUgPSAoU0VMRUNUIGRhdG5hbWUgRlJPTSBwZ19kYXRh YmFzZSBXSEVSRSBvaWQgPSB7eyBkaWQgfX0peyUgZW5kaWYgJX0pIEFTICJ7eyBfKCdGZXRjaGVk JykgfX0iLAotICAgKFNFTEVDVCBzdW0odHVwX3JldHVybmVkKSBGUk9NIHBnX3N0YXRfZGF0YWJh c2V7JSBpZiBkaWQgJX0gV0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2Rh dGFiYXNlIFdIRVJFIG9pZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ1JldHVy bmVkJykgfX0iCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvdGVtcGxhdGVzL2Rh c2hib2FyZC9zcWwvZGVmYXVsdC90cHNfc3RhdHMuc3FsIGIvd2ViL3BnYWRtaW4vZGFzaGJvYXJk L3RlbXBsYXRlcy9kYXNoYm9hcmQvc3FsL2RlZmF1bHQvdHBzX3N0YXRzLnNxbApkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggZjk1Zjg2ZjUuLjAwMDAwMDAwCi0tLSBhL3dlYi9wZ2FkbWlu L2Rhc2hib2FyZC90ZW1wbGF0ZXMvZGFzaGJvYXJkL3NxbC9kZWZhdWx0L3Rwc19zdGF0cy5zcWwK KysrIC9kZXYvbnVsbApAQCAtMSw1ICswLDAgQEAKLS8qcGdhNGRhc2gqLwotU0VMRUNUCi0gICAo U0VMRUNUIHN1bSh4YWN0X2NvbW1pdCkgKyBzdW0oeGFjdF9yb2xsYmFjaykgRlJPTSBwZ19zdGF0 X2RhdGFiYXNleyUgaWYgZGlkICV9IFdIRVJFIGRhdG5hbWUgPSAoU0VMRUNUIGRhdG5hbWUgRlJP TSBwZ19kYXRhYmFzZSBXSEVSRSBvaWQgPSB7eyBkaWQgfX0peyUgZW5kaWYgJX0pIEFTICJ7eyBf KCdUcmFuc2FjdGlvbnMnKSB9fSIsCi0gICAoU0VMRUNUIHN1bSh4YWN0X2NvbW1pdCkgRlJPTSBw Z19zdGF0X2RhdGFiYXNleyUgaWYgZGlkICV9IFdIRVJFIGRhdG5hbWUgPSAoU0VMRUNUIGRhdG5h bWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBvaWQgPSB7eyBkaWQgfX0peyUgZW5kaWYgJX0pIEFT ICJ7eyBfKCdDb21taXRzJykgfX0iLAotICAgKFNFTEVDVCBzdW0oeGFjdF9yb2xsYmFjaykgRlJP TSBwZ19zdGF0X2RhdGFiYXNleyUgaWYgZGlkICV9IFdIRVJFIGRhdG5hbWUgPSAoU0VMRUNUIGRh dG5hbWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBvaWQgPSB7eyBkaWQgfX0peyUgZW5kaWYgJX0p IEFTICJ7eyBfKCdSb2xsYmFja3MnKSB9fSIKZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hi b2FyZC90ZW1wbGF0ZXMvZGFzaGJvYXJkL3NxbC9ncGRiXzUuMF9wbHVzL2Rhc2hib2FyZF9zdGF0 cy5zcWwgYi93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvdGVtcGxhdGVzL2Rhc2hib2FyZC9zcWwvZ3Bk Yl81LjBfcGx1cy9kYXNoYm9hcmRfc3RhdHMuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwLi43NjcwNTQ3YwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Rhc2hi b2FyZC90ZW1wbGF0ZXMvZGFzaGJvYXJkL3NxbC9ncGRiXzUuMF9wbHVzL2Rhc2hib2FyZF9zdGF0 cy5zcWwKQEAgLTAsMCArMSw1NiBAQAoreyUgc2V0IGFkZF91bmlvbiA9IGZhbHNlICV9Cit7JSBp ZiAnc2Vzc2lvbl9zdGF0cycgaW4gY2hhcnRfbmFtZXMgJX0KK3slIHNldCBhZGRfdW5pb24gPSB0 cnVlICV9CitTRUxFQ1QgJ3Nlc3Npb25fc3RhdHMnIEFTIGNoYXJ0X25hbWUsIHJvd190b19qc29u KHQpIEFTIGNoYXJ0X2RhdGEKK0ZST00gKFNFTEVDVAorICAgKFNFTEVDVCBjb3VudCgqKSBGUk9N IHBnX3N0YXRfYWN0aXZpdHl7JSBpZiBkaWQgJX0gV0hFUkUgZGF0aWQgPSB7eyBkaWQgfX0geyUg ZW5kaWYgJX0pIEFTICJ7eyBfKCdUb3RhbCcpIH19IiwKKyAgIChTRUxFQ1QgY291bnQoKikgRlJP TSBwZ19zdGF0X2FjdGl2aXR5IFdIRVJFIGN1cnJlbnRfcXVlcnkgTk9UIExJS0UgJzxJRExFPiUn eyUgaWYgZGlkICV9IEFORCBkYXRpZCA9IHt7IGRpZCB9fSB7JSBlbmRpZiAlfSkgIEFTICJ7eyBf KCdBY3RpdmUnKSB9fSIsCisgICAoU0VMRUNUIGNvdW50KCopIEZST00gcGdfc3RhdF9hY3Rpdml0 eSBXSEVSRSBjdXJyZW50X3F1ZXJ5IExJS0UgJzxJRExFPiUneyUgaWYgZGlkICV9IEFORCBkYXRp ZCA9ICB7eyBkaWQgfX0geyUgZW5kaWYgJX0pICBBUyAie3sgXygnSWRsZScpIH19IgorKSB0Cit7 JSBlbmRpZiAlfQoreyUgaWYgYWRkX3VuaW9uIGFuZCAndHBzX3N0YXRzJyBpbiBjaGFydF9uYW1l cyAlfQorVU5JT04gQUxMCit7JSBlbmRpZiAlfQoreyUgaWYgJ3Rwc19zdGF0cycgaW4gY2hhcnRf bmFtZXMgJX0KK3slIHNldCBhZGRfdW5pb24gPSB0cnVlICV9CitTRUxFQ1QgJ3Rwc19zdGF0cycg QVMgY2hhcnRfbmFtZSwgcm93X3RvX2pzb24odCkgQVMgY2hhcnRfZGF0YQorRlJPTSAoU0VMRUNU CisgICAoU0VMRUNUIHN1bSh4YWN0X2NvbW1pdCkgKyBzdW0oeGFjdF9yb2xsYmFjaykgRlJPTSBw Z19zdGF0X2RhdGFiYXNleyUgaWYgZGlkICV9IFdIRVJFIGRhdG5hbWUgPSAoU0VMRUNUIGRhdG5h bWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBvaWQgPSB7eyBkaWQgfX0peyUgZW5kaWYgJX0pIEFT ICJ7eyBfKCdUcmFuc2FjdGlvbnMnKSB9fSIsCisgICAoU0VMRUNUIHN1bSh4YWN0X2NvbW1pdCkg RlJPTSBwZ19zdGF0X2RhdGFiYXNleyUgaWYgZGlkICV9IFdIRVJFIGRhdG5hbWUgPSAoU0VMRUNU IGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBvaWQgPSB7eyBkaWQgfX0peyUgZW5kaWYg JX0pIEFTICJ7eyBfKCdDb21taXRzJykgfX0iLAorICAgKFNFTEVDVCBzdW0oeGFjdF9yb2xsYmFj aykgRlJPTSBwZ19zdGF0X2RhdGFiYXNleyUgaWYgZGlkICV9IFdIRVJFIGRhdG5hbWUgPSAoU0VM RUNUIGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBvaWQgPSB7eyBkaWQgfX0peyUgZW5k aWYgJX0pIEFTICJ7eyBfKCdSb2xsYmFja3MnKSB9fSIKKykgdAoreyUgZW5kaWYgJX0KK3slIGlm IGFkZF91bmlvbiBhbmQgJ3RpX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQorVU5JT04gQUxMCit7 JSBlbmRpZiAlfQoreyUgaWYgJ3RpX3N0YXRzJyBpbiBjaGFydF9uYW1lcyAlfQoreyUgc2V0IGFk ZF91bmlvbiA9IHRydWUgJX0KK1NFTEVDVCAndGlfc3RhdHMnIEFTIGNoYXJ0X25hbWUsIHJvd190 b19qc29uKHQpIEFTIGNoYXJ0X2RhdGEKK0ZST00gKFNFTEVDVAorICAgKFNFTEVDVCBzdW0odHVw X2luc2VydGVkKSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBkaWQgJX0gV0hFUkUgZGF0bmFt ZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9IHt7IGRpZCB9 fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ0luc2VydHMnKSB9fSIsCisgICAoU0VMRUNUIHN1bSh0 dXBfdXBkYXRlZCkgRlJPTSBwZ19zdGF0X2RhdGFiYXNleyUgaWYgZGlkICV9IFdIRVJFIGRhdG5h bWUgPSAoU0VMRUNUIGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBvaWQgPSB7eyBkaWQg fX0peyUgZW5kaWYgJX0pIEFTICJ7eyBfKCdVcGRhdGVzJykgfX0iLAorICAgKFNFTEVDVCBzdW0o dHVwX2RlbGV0ZWQpIEZST00gcGdfc3RhdF9kYXRhYmFzZXslIGlmIGRpZCAlfSBXSEVSRSBkYXRu YW1lID0gKFNFTEVDVCBkYXRuYW1lIEZST00gcGdfZGF0YWJhc2UgV0hFUkUgb2lkID0ge3sgZGlk IH19KXslIGVuZGlmICV9KSBBUyAie3sgXygnRGVsZXRlcycpIH19IgorKSB0Cit7JSBlbmRpZiAl fQoreyUgaWYgYWRkX3VuaW9uIGFuZCAndG9fc3RhdHMnIGluIGNoYXJ0X25hbWVzICV9CitVTklP TiBBTEwKK3slIGVuZGlmICV9Cit7JSBpZiAndG9fc3RhdHMnIGluIGNoYXJ0X25hbWVzICV9Cit7 JSBzZXQgYWRkX3VuaW9uID0gdHJ1ZSAlfQorU0VMRUNUICd0b19zdGF0cycgQVMgY2hhcnRfbmFt ZSwgcm93X3RvX2pzb24odCkgQVMgY2hhcnRfZGF0YQorRlJPTSAoU0VMRUNUCisgICAoU0VMRUNU IHN1bSh0dXBfZmV0Y2hlZCkgRlJPTSBwZ19zdGF0X2RhdGFiYXNleyUgaWYgZGlkICV9IFdIRVJF IGRhdG5hbWUgPSAoU0VMRUNUIGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBvaWQgPSB7 eyBkaWQgfX0peyUgZW5kaWYgJX0pIEFTICJ7eyBfKCdGZXRjaGVkJykgfX0iLAorICAgKFNFTEVD VCBzdW0odHVwX3JldHVybmVkKSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBkaWQgJX0gV0hF UkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9pZCA9 IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ1JldHVybmVkJykgfX0iCispIHQKK3sl IGVuZGlmICV9Cit7JSBpZiBhZGRfdW5pb24gYW5kICdiaW9fc3RhdHMnIGluIGNoYXJ0X25hbWVz ICV9CitVTklPTiBBTEwKK3slIGVuZGlmICV9Cit7JSBpZiAnYmlvX3N0YXRzJyBpbiBjaGFydF9u YW1lcyAlfQoreyUgc2V0IGFkZF91bmlvbiA9IHRydWUgJX0KK1NFTEVDVCAnYmlvX3N0YXRzJyBB UyBjaGFydF9uYW1lLCByb3dfdG9fanNvbih0KSBBUyBjaGFydF9kYXRhCitGUk9NIChTRUxFQ1QK KyAgIChTRUxFQ1Qgc3VtKGJsa3NfcmVhZCkgRlJPTSBwZ19zdGF0X2RhdGFiYXNleyUgaWYgZGlk ICV9IFdIRVJFIGRhdG5hbWUgPSAoU0VMRUNUIGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVS RSBvaWQgPSB7eyBkaWQgfX0peyUgZW5kaWYgJX0pIEFTICJ7eyBfKCdSZWFkcycpIH19IiwKKyAg IChTRUxFQ1Qgc3VtKGJsa3NfaGl0KSBGUk9NIHBnX3N0YXRfZGF0YWJhc2V7JSBpZiBkaWQgJX0g V0hFUkUgZGF0bmFtZSA9IChTRUxFQ1QgZGF0bmFtZSBGUk9NIHBnX2RhdGFiYXNlIFdIRVJFIG9p ZCA9IHt7IGRpZCB9fSl7JSBlbmRpZiAlfSkgQVMgInt7IF8oJ0hpdHMnKSB9fSIKKykgdAoreyUg ZW5kaWYgJX0KZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Rhc2hib2FyZC90ZW1wbGF0ZXMvZGFz aGJvYXJkL3NxbC9ncGRiXzUuMF9wbHVzL3Nlc3Npb25fc3RhdHMuc3FsIGIvd2ViL3BnYWRtaW4v ZGFzaGJvYXJkL3RlbXBsYXRlcy9kYXNoYm9hcmQvc3FsL2dwZGJfNS4wX3BsdXMvc2Vzc2lvbl9z dGF0cy5zcWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzZjI0ZTdjLi4wMDAwMDAw MAotLS0gYS93ZWIvcGdhZG1pbi9kYXNoYm9hcmQvdGVtcGxhdGVzL2Rhc2hib2FyZC9zcWwvZ3Bk Yl81LjBfcGx1cy9zZXNzaW9uX3N0YXRzLnNxbAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBA QAotLypwZ2E0ZGFzaCovCi1TRUxFQ1QKLSAgIChTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19zdGF0 X2FjdGl2aXR5eyUgaWYgZGlkICV9IFdIRVJFIGRhdGlkID0ge3sgZGlkIH19IHslIGVuZGlmICV9 KSBBUyAie3sgXygnVG90YWwnKSB9fSIsCi0gICAoU0VMRUNUIGNvdW50KCopIEZST00gcGdfc3Rh dF9hY3Rpdml0eSBXSEVSRSBjdXJyZW50X3F1ZXJ5IE5PVCBMSUtFICc8SURMRT4lJ3slIGlmIGRp ZCAlfSBBTkQgZGF0aWQgPSB7eyBkaWQgfX0geyUgZW5kaWYgJX0pICBBUyAie3sgXygnQWN0aXZl JykgfX0iLAotICAgKFNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3N0YXRfYWN0aXZpdHkgV0hFUkUg Y3VycmVudF9xdWVyeSBMSUtFICc8SURMRT4lJ3slIGlmIGRpZCAlfSBBTkQgZGF0aWQgPSAge3sg ZGlkIH19IHslIGVuZGlmICV9KSAgQVMgInt7IF8oJ0lkbGUnKSB9fSIKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL2Rhc2hib2FyZC90ZXN0cy90ZXN0X2Rhc2hib2FyZF9ncmFwaHMucHkgYi93ZWIv cGdhZG1pbi9kYXNoYm9hcmQvdGVzdHMvdGVzdF9kYXNoYm9hcmRfZ3JhcGhzLnB5Cm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi45MDM4MGMyZgotLS0gL2Rldi9udWxsCisrKyBi L3dlYi9wZ2FkbWluL2Rhc2hib2FyZC90ZXN0cy90ZXN0X2Rhc2hib2FyZF9ncmFwaHMucHkKQEAg LTAsMCArMSwxMTkgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIHBnQWRtaW4gNCAtIFBvc3Rn cmVTUUwgVG9vbHMKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDEzIC0gMjAxOSwgVGhlIHBnQWRtaW4g RGV2ZWxvcG1lbnQgVGVhbQorIyBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBQ b3N0Z3JlU1FMIExpY2VuY2UKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2Zyb20gcGdhZG1pbi51 dGlscy5yb3V0ZSBpbXBvcnQgQmFzZVRlc3RHZW5lcmF0b3IKK2Zyb20gcGdhZG1pbi51dGlscyBp bXBvcnQgc2VydmVyX3V0aWxzIGFzIHNlcnZlcl91dGlscworaW1wb3J0IHNpbXBsZWpzb24gYXMg anNvbgorCisKK2NsYXNzIERhc2hib2FyZEdyYXBoc1Rlc3RDYXNlKEJhc2VUZXN0R2VuZXJhdG9y KToKKyAgICAiIiIKKyAgICBUaGlzIGNsYXNzIHZhbGlkYXRlcyB0aGUgdmVyc2lvbiBpbiByYW5n ZSBmdW5jdGlvbmFsaXR5CisgICAgYnkgZGVmaW5pbmcgZGlmZmVyZW50IHZlcnNpb24gc2NlbmFy aW9zOyB3aGVyZSBkaWN0IG9mCisgICAgcGFyYW1ldGVycyBkZXNjcmliZXMgdGhlIHNjZW5hcmlv IGFwcGVuZGVkIGJ5IHRlc3QgbmFtZS4KKyAgICAiIiIKKworICAgIHNjZW5hcmlvcyA9IFsoCisg ICAgICAgICdUZXN0Q2FzZSBmb3Igc2Vzc2lvbl9zdGF0cyBncmFwaCcsIGRpY3QoCisgICAgICAg ICAgICBzaWQ9MSwKKyAgICAgICAgICAgIGRpZD0tMSwKKyAgICAgICAgICAgIGNoYXJ0X2RhdGE9 eworICAgICAgICAgICAgICAgICdzZXNzaW9uX3N0YXRzJzogWydUb3RhbCcsICdBY3RpdmUnLCAn SWRsZSddLAorICAgICAgICAgICAgfQorICAgICAgICApKSwgKAorICAgICAgICAnVGVzdENhc2Ug Zm9yIHRwc19zdGF0cyBncmFwaCcsIGRpY3QoCisgICAgICAgICAgICBzaWQ9MSwKKyAgICAgICAg ICAgIGRpZD0tMSwKKyAgICAgICAgICAgIGNoYXJ0X2RhdGE9eworICAgICAgICAgICAgICAgICd0 cHNfc3RhdHMnOiBbJ1RyYW5zYWN0aW9ucycsICdDb21taXRzJywgJ1JvbGxiYWNrcyddLAorICAg ICAgICAgICAgfQorICAgICAgICApKSwgKAorICAgICAgICAnVGVzdENhc2UgZm9yIHRpX3N0YXRz IGdyYXBoJywgZGljdCgKKyAgICAgICAgICAgIHNpZD0xLAorICAgICAgICAgICAgZGlkPS0xLAor ICAgICAgICAgICAgY2hhcnRfZGF0YT17CisgICAgICAgICAgICAgICAgJ3RpX3N0YXRzJzogWydJ bnNlcnRzJywgJ1VwZGF0ZXMnLCAnRGVsZXRlcyddLAorICAgICAgICAgICAgfQorICAgICAgICAp KSwgKAorICAgICAgICAnVGVzdENhc2UgZm9yIHRvX3N0YXRzIGdyYXBoJywgZGljdCgKKyAgICAg ICAgICAgIHNpZD0xLAorICAgICAgICAgICAgZGlkPS0xLAorICAgICAgICAgICAgY2hhcnRfZGF0 YT17CisgICAgICAgICAgICAgICAgJ3RvX3N0YXRzJzogWydGZXRjaGVkJywgJ1JldHVybmVkJ10s CisgICAgICAgICAgICB9CisgICAgICAgICkpLCAoCisgICAgICAgICdUZXN0Q2FzZSBmb3IgYmlv X3N0YXRzIGdyYXBoJywgZGljdCgKKyAgICAgICAgICAgIHNpZD0xLAorICAgICAgICAgICAgZGlk PS0xLAorICAgICAgICAgICAgY2hhcnRfZGF0YT17CisgICAgICAgICAgICAgICAgJ2Jpb19zdGF0 cyc6IFsnUmVhZHMnLCAnSGl0cyddLAorICAgICAgICAgICAgfQorICAgICAgICApKSwgKAorICAg ICAgICAnVGVzdENhc2UgZm9yIHR3byBncmFwaHMnLCBkaWN0KAorICAgICAgICAgICAgc2lkPTEs CisgICAgICAgICAgICBkaWQ9LTEsCisgICAgICAgICAgICBjaGFydF9kYXRhPXsKKyAgICAgICAg ICAgICAgICAnc2Vzc2lvbl9zdGF0cyc6IFsnVG90YWwnLCAnQWN0aXZlJywgJ0lkbGUnXSwKKyAg ICAgICAgICAgICAgICAnYmlvX3N0YXRzJzogWydSZWFkcycsICdIaXRzJ10sCisgICAgICAgICAg ICB9CisgICAgICAgICkpLCAoCisgICAgICAgICdUZXN0Q2FzZSBmb3IgZml2ZSBncmFwaHMnLCBk aWN0KAorICAgICAgICAgICAgc2lkPTEsCisgICAgICAgICAgICBkaWQ9LTEsCisgICAgICAgICAg ICBjaGFydF9kYXRhPXsKKyAgICAgICAgICAgICAgICAnc2Vzc2lvbl9zdGF0cyc6IFsnVG90YWwn LCAnQWN0aXZlJywgJ0lkbGUnXSwKKyAgICAgICAgICAgICAgICAndHBzX3N0YXRzJzogWydUcmFu c2FjdGlvbnMnLCAnQ29tbWl0cycsICdSb2xsYmFja3MnXSwKKyAgICAgICAgICAgICAgICAndGlf c3RhdHMnOiBbJ0luc2VydHMnLCAnVXBkYXRlcycsICdEZWxldGVzJ10sCisgICAgICAgICAgICAg ICAgJ3RvX3N0YXRzJzogWydGZXRjaGVkJywgJ1JldHVybmVkJ10sCisgICAgICAgICAgICAgICAg J2Jpb19zdGF0cyc6IFsnUmVhZHMnLCAnSGl0cyddLAorICAgICAgICAgICAgfQorICAgICAgICAp KSwgKAorICAgICAgICAnVGVzdENhc2UgZm9yIG5vIGdyYXBoJywgZGljdCgKKyAgICAgICAgICAg IHNpZD0xLAorICAgICAgICAgICAgZGlkPS0xLAorICAgICAgICAgICAgY2hhcnRfZGF0YT17fSwK KyAgICAgICAgKSkKKyAgICBdCisKKyAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHBhc3MK KworICAgIGRlZiBnZXRTdGF0c1VybChzZWxmLCBzaWQ9LTEsIGRpZD0tMSwgY2hhcnRfbmFtZXM9 JycpOgorICAgICAgICBiYXNlX3VybCA9ICcvZGFzaGJvYXJkL2Rhc2hib2FyZF9zdGF0cycKKyAg ICAgICAgYmFzZV91cmwgPSBiYXNlX3VybCArICcvJyArIHN0cihzaWQpCisgICAgICAgIGJhc2Vf dXJsICs9ICcvJyArIHN0cihkaWQpIGlmIGRpZCA+IDAgZWxzZSAnJworICAgICAgICBiYXNlX3Vy bCArPSAnP2NoYXJ0X25hbWVzPScgKyBjaGFydF9uYW1lcworICAgICAgICByZXR1cm4gYmFzZV91 cmwKKworICAgIGRlZiBydW5UZXN0KHNlbGYpOgorICAgICAgICBzZXJ2ZXJfcmVzcG9uc2UgPSBz ZXJ2ZXJfdXRpbHMuY29ubmVjdF9zZXJ2ZXIoc2VsZiwgc2VsZi5zaWQpCisgICAgICAgIGlmIHNl cnZlcl9yZXNwb25zZVsiaW5mbyJdID09ICJTZXJ2ZXIgY29ubmVjdGVkLiI6CisKKyAgICAgICAg ICAgIHVybCA9IHNlbGYuZ2V0U3RhdHNVcmwoc2VsZi5zaWQsIHNlbGYuZGlkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiLCIuam9pbihzZWxmLmNoYXJ0X2RhdGEua2V5cygp KSkKKyAgICAgICAgICAgIHJlc3BvbnNlID0gc2VsZi50ZXN0ZXIuZ2V0KHVybCkKKyAgICAgICAg ICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHJlc3BvbnNlLnN0YXR1c19jb2RlLCAyMDApCisKKyAgICAg ICAgICAgIHJlc3BfZGF0YSA9IGpzb24ubG9hZHMocmVzcG9uc2UuZGF0YSkKKworICAgICAgICAg ICAgIyBBbGwgcmVxdWVzdGVkIGNoYXJ0cyByZWNlaXZlZAorICAgICAgICAgICAgc2VsZi5hc3Nl cnRFcXVhbHMobGVuKHJlc3BfZGF0YS5rZXlzKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGVuKHNlbGYuY2hhcnRfZGF0YS5rZXlzKCkpKQorCisgICAgICAgICAgICAjIEFsbCBy ZXF1ZXN0ZWQgY2hhcnRzIGRhdGEgcmVjZWl2ZWQKKyAgICAgICAgICAgIGZvciBjaGFydF9uYW1l LCBjaGFydF92YWxzIGluIHNlbGYuY2hhcnRfZGF0YS5pdGVtcygpOgorICAgICAgICAgICAgICAg IHNlbGYuYXNzZXJ0RXF1YWxzKHNldChyZXNwX2RhdGFbY2hhcnRfbmFtZV0ua2V5cygpKSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXQoY2hhcnRfdmFscykpCisKKyAgICAg ICAgZWxzZToKKyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbigiRXJyb3Igd2hpbGUgY29ubmVj dGluZyBzZXJ2ZXIgdG8gYWRkIHRoZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIGRh dGFiYXNlLiIpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHBhc3MKZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy91dGlscy5qcyBiL3dlYi9wZ2FkbWluL3N0YXRp Yy9qcy91dGlscy5qcwppbmRleCAyN2I5OTlmNy4uNmNiYjY4YTUgMTAwNjQ0Ci0tLSBhL3dlYi9w Z2FkbWluL3N0YXRpYy9qcy91dGlscy5qcworKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMvanMvdXRp bHMuanMKQEAgLTQ2LDMgKzQ2LDI3IEBAIGxldCBpc1N0cmluZyA9IChzdHIpID0+IChfLmlzU3Ry aW5nKHN0cikpOwogZXhwb3J0IHsKICAgaXNWYWxpZERhdGEsIGlzRnVuY3Rpb24sIGlzU3RyaW5n LAogfTsKKworZXhwb3J0IGZ1bmN0aW9uIGdldEVwb2NoKGlucF9kYXRlKSB7CisgIGxldCBkYXRl X29iaiA9IGlucF9kYXRlID8gaW5wX2RhdGUgOiBuZXcgRGF0ZSgpOworICByZXR1cm4gcGFyc2VJ bnQoZGF0ZV9vYmouZ2V0VGltZSgpLzEwMDApOworfQorCisvKiBFdWNsYWRpYW4gR0NEICovCitl eHBvcnQgZnVuY3Rpb24gZ2V0R0NEKGlucF9hcnIpIHsKKyAgbGV0IGdjZF9mb3JfdHdvID0gKGEs IGIpID0+IHsKKyAgICByZXR1cm4gYSA9PSAwP2I6Z2NkX2Zvcl90d28oYiAlIGEsIGEpOworICB9 OworCisgIGxldCBpbnBfbGVuID0gaW5wX2Fyci5sZW5ndGg7CisgIGlmKGlucF9sZW4gPD0gMikg eworICAgIHJldHVybiBnY2RfZm9yX3R3byhpbnBfYXJyWzBdLCBpbnBfYXJyWzFdKTsKKyAgfQor CisgIGxldCByZXN1bHQgPSBpbnBfYXJyWzBdOworICBmb3IobGV0IGk9MTsgaTxpbnBfbGVuOyBp KyspIHsKKyAgICByZXN1bHQgPSBnY2RfZm9yX3R3byhpbnBfYXJyW2ldLCByZXN1bHQpOworICB9 CisKKyAgcmV0dXJuIHJlc3VsdDsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg LS1naXQgYS93ZWIvcmVncmVzc2lvbi9qYXZhc2NyaXB0L2Rhc2hib2FyZC9jaGFydGluZ19zcGVj LmpzIGIvd2ViL3JlZ3Jlc3Npb24vamF2YXNjcmlwdC9kYXNoYm9hcmQvY2hhcnRpbmdfc3BlYy5q cwppbmRleCA4YWZkN2E4NC4uOWEwZDg3MDkgMTAwNjQ0Ci0tLSBhL3dlYi9yZWdyZXNzaW9uL2ph dmFzY3JpcHQvZGFzaGJvYXJkL2NoYXJ0aW5nX3NwZWMuanMKKysrIGIvd2ViL3JlZ3Jlc3Npb24v amF2YXNjcmlwdC9kYXNoYm9hcmQvY2hhcnRpbmdfc3BlYy5qcwpAQCAtNzMsNiArNzMsMTAgQEAg ZGVzY3JpYmUoJ0luIGNoYXJ0aW5nIHJlbGF0ZWQgdGVzdGNhc2VzJywgKCk9PiB7CiAgICAgZXhw ZWN0KGNoYXJ0T2JqLmdldE90aGVyRGF0YSgnc29tZV92YWwnKSkudG9FcXVhbCgxKTsKICAgfSk7 CiAKKyAgaXQoJ0NoZWNrIGlmIG90aGVyIGRhdGEgcmV0dXJucyB1bmRlZmluZWQgZm9yIG5vdCBz ZXQnLCAoKT0+eworICAgIGV4cGVjdChjaGFydE9iai5nZXRPdGhlckRhdGEoJ3NvbWVfdmFsX25v dF9zZXQnKSkudG9CZSh1bmRlZmluZWQpOworICB9KTsKKwogICBpdCgnQ2hlY2sgaWYgaXNWaXNp YmxlIHJldHVybnMgY29ycmVjdCcsICgpPT57CiAgICAgbGV0IGRpbVNweSA9IHNweU9uKGNoYXJ0 T2JqLCAnZ2V0Q29udGFpbmVyRGltZW5zaW9ucycpOwogCmRpZmYgLS1naXQgYS93ZWIvcmVncmVz c2lvbi9qYXZhc2NyaXB0L3BnYWRtaW5fdXRpbHNfc3BlYy5qcyBiL3dlYi9yZWdyZXNzaW9uL2ph dmFzY3JpcHQvcGdhZG1pbl91dGlsc19zcGVjLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwLi4zNDEzNzZhZAotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9yZWdyZXNzaW9uL2ph dmFzY3JpcHQvcGdhZG1pbl91dGlsc19zcGVjLmpzCkBAIC0wLDAgKzEsMzUgQEAKKy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8v CisvLyBwZ0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisvLworLy8gQ29weXJpZ2h0IChDKSAy MDEzIC0gMjAxOSwgVGhlIHBnQWRtaW4gRGV2ZWxvcG1lbnQgVGVhbQorLy8gVGhpcyBzb2Z0d2Fy ZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdyZVNRTCBMaWNlbmNlCisvLworLy8vLy8vLy8v Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwor aW1wb3J0IHsgZ2V0RXBvY2gsIGdldEdDRCB9IGZyb20gJ3NvdXJjZXMvdXRpbHMnOworCitkZXNj cmliZSgnZ2V0RXBvY2gnLCBmdW5jdGlvbiAoKSB7CisgIGl0KCdzaG91bGQgcmV0dXJuIG5vbiB6 ZXJvJywgZnVuY3Rpb24gKCkgeworICAgIGV4cGVjdChnZXRFcG9jaCgpKS50b0JlR3JlYXRlclRo YW4oMCk7CisgIH0pOworCisgIGl0KCdzaG91bGQgcmV0dXJuIGVwb2NoIGZvciBhIGRhdGUgcGFz c2VkJywgZnVuY3Rpb24gKCkgeworICAgIGxldCBzb21lRGF0ZSA9IG5ldyBEYXRlKDIwMTksMSwx LDEwLDIwLDMwLDQwKSwKKyAgICAgIHNvbWVEYXRlRXBvY2ggPSAxNTQ4OTk2NjMwOworCisgICAg ZXhwZWN0KGdldEVwb2NoKG5ldyBEYXRlKHNvbWVEYXRlKSkpLnRvRXF1YWwoc29tZURhdGVFcG9j aCk7CisgIH0pOworfSk7CisKK2Rlc2NyaWJlKCdnZXRHQ0QnLCBmdW5jdGlvbiAoKSB7CisgIGl0 KCdmb3IgdHdvIG51bWJlcnMnLCBmdW5jdGlvbiAoKSB7CisgICAgbGV0IG5vcyA9IFs1LCAxMF07 CisgICAgZXhwZWN0KGdldEdDRChub3MpKS50b0VxdWFsKDUpOworICB9KTsKKworICBpdCgnZm9y IG1vcmUgdGhhbiB0d28gbnVtYmVycycsIGZ1bmN0aW9uICgpIHsKKyAgICBsZXQgbm9zID0gWzks IDI0LCAzM107CisgICAgZXhwZWN0KGdldEdDRChub3MpKS50b0VxdWFsKDMpOworICB9KTsKK30p Owo= --00000000000094a30a05810e847f--