Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1aVFsk-00054r-TY for pgadmin-hackers@arkaria.postgresql.org; Mon, 15 Feb 2016 09:55:51 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1aVFsk-0007YQ-Fy for pgadmin-hackers@arkaria.postgresql.org; Mon, 15 Feb 2016 09:55:50 +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) (envelope-from ) id 1aVFsh-0007UE-MG for pgadmin-hackers@postgresql.org; Mon, 15 Feb 2016 09:55:47 +0000 Received: from mail-wm0-x233.google.com ([2a00:1450:400c:c09::233]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84) (envelope-from ) id 1aVFsc-0007vM-W0 for pgadmin-hackers@postgresql.org; Mon, 15 Feb 2016 09:55:47 +0000 Received: by mail-wm0-x233.google.com with SMTP id c200so104487462wme.0 for ; Mon, 15 Feb 2016 01:55:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=/7sqECU9NY116Ws2Ums+lbJl0gOIFoTzh7bJtmL7iCY=; b=lGYE6EQPTT4iIvbmVywNGPhVusl2KS3evp/LEvQdr7D/yw5x2NzRjB6Kh6MKjQb1I3 310DBTlHed0MeGQhm4wi3brIp/jm8ZksI87uO0oYE8kYMYur3HPp6PnHfUargG6/yLkJ I8S8SNvPJcc6vY1L4POvGll6rvdHYKhxDo/4nWDLdPiwnkrqJaOFpeVjX18ECs6DsQAb wrrl6K3Wgo34PGJpk0jvHrS90MBGPw5HlloftYXGFbyTN31jA1t2TxM54JVsBpB7OHhO TEFC9+QOd4XyEITPZvBwIAqjhzB00dK/SFd1Dro0QVu5bX6WeyAwRN2LKt/K9OzmuEaL Sciw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc:content-type; bh=/7sqECU9NY116Ws2Ums+lbJl0gOIFoTzh7bJtmL7iCY=; b=dfIEp8XbuPXZm6tK4n4HeKiCnVvrS36D47t855v689h9E+hMNgFivftDLrdzwYGmg7 1Nf1/IVKjOPlrNinRznuRmG7cEIPEHMptp7xKy0pZwvW5Z0ukKuoGa60276ilj9jExeV 5Ru7adClYH1pLKujx06G3cKR4nD7q5E+aznmrDIzf9lG9V+aqmp0SD33iifNalxLU6VA lvt1zyMjfaoL1AwHgPlkK/m68u9Rhso/ewDNrEKKWouC2Ud/OVEJY31Hc1siMO+BpEJu lh1MTBVm5jP8e3yh2tRm+C7KDA0gC2yHhru3NFDX+rGH2oE9ZQ1p0nE8xUBxDYy/4xw4 /JcA== X-Gm-Message-State: AG10YOQbhRiVWzpzd4Ab9DM2YptBxh/0jE6fU3mE3MVNbTd3zxfjY6KTp6PUAOpjRu6x2iDVdWb6Ex5GWo77Tys3 X-Received: by 10.28.24.80 with SMTP id 77mr9654258wmy.16.1455530141961; Mon, 15 Feb 2016 01:55:41 -0800 (PST) MIME-Version: 1.0 Received: by 10.28.55.74 with HTTP; Mon, 15 Feb 2016 01:55:12 -0800 (PST) In-Reply-To: References: From: Surinder Kumar Date: Mon, 15 Feb 2016 15:25:12 +0530 Message-ID: Subject: Re: [pgAdmin4] [Patch]: Extension Module To: Neel Patel Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary=001a114691101280be052bcc055f X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --001a114691101280be052bcc055f Content-Type: multipart/alternative; boundary=001a114691101280ba052bcc055d --001a114691101280ba052bcc055d Content-Type: text/plain; charset=UTF-8 Hi, PFA patch with following changes: 1. Added "Create Extension" menu item in context menu of Database node. 2. Added a new method "node_node" in ExtensionModule class. If a node has child, returns True, otherwise False. 3. Fixed an issue in which icon won't display in create extension link in context menu. 4. Added Docstring for the class and methods in python file and proper commenting in js file. 5. Followed PEP-08 coding conventions. Please review the patch and let me know for any comments. On Thu, Feb 4, 2016 at 11:59 AM, Neel Patel wrote: > Hi, > > New patch is working fine. > Ashesh - Can you please review it? If it looks good then we can commit the > extension module. > > Thanks, > Neel Patel > > > On Thu, Feb 4, 2016 at 11:40 AM, Surinder Kumar < > surinder.kumar@enterprisedb.com> wrote: > >> Hi Neel, >> >> Please find the patch with following changes: >> 1. Removed Whitespace from files. >> 2. Fixed an issue in which json object converted into [object object] >> string. >> 3. Fixed python3 issue of unicode type where code breaks at >> "isinstance(SQL, str)" in python3 if str is unicode, >> because python no longer support unicode type of string. >> >> Please review the patch and Let me know for any comments. >> >> Thanks, >> Surinder Kumar >> >> On Thu, Feb 4, 2016 at 10:16 AM, Neel Patel >> wrote: >> >>> Hi Surinder, >>> >>> While applying the patch, we are getting below warnings. >>> >>> extension_v3.patch:362: trailing whitespace. >>> This function will generate sql for sql panel >>> extension_v3.patch:646: trailing whitespace. >>> -- Extension: {{ conn|qtIdent(data.name) }} >>> warning: 2 lines add whitespace errors. >>> >>> >>> Can you please resend the patch file, after fixing above warnings ? >>> >>> Thanks, >>> Neel Patel >>> >>> On Fri, Jan 22, 2016 at 12:25 PM, Surinder Kumar < >>> surinder.kumar@enterprisedb.com> wrote: >>> >>>> Hi >>>> >>>> Please find the updated patch with following fixes: >>>> 1. Missing `owner` column under properties for `extensions collection`. >>>> Add cell: 'string' property for owner fixed it >>>> 2. Schema object identifier should be wrapped with in function qtIdent >>>> . Using function `qtIdent` for schema in create.sql fixed it. >>>> >>>> >>>> Thanks >>>> Surinder Kumar >>>> >>>> On Thu, Jan 21, 2016 at 8:04 PM, Surinder Kumar < >>>> surinder.kumar@enterprisedb.com> wrote: >>>> >>>>> Hi, >>>>> >>>>> I've fixed the issues given in review comments. >>>>> >>>>> Please find the attached updated patch for extension module, review it >>>>> and let me know for any comments. >>>>> >>>>> On Mon, Jan 18, 2016 at 5:44 PM, Surinder Kumar < >>>>> surinder.kumar@enterprisedb.com> wrote: >>>>> >>>>>> Thanks Neel for reviewing. I'll send the patch with the fixes >>>>>> suggested. >>>>>> >>>>>> On Mon, Jan 18, 2016 at 4:52 PM, Neel Patel < >>>>>> neel.patel@enterprisedb.com> wrote: >>>>>> >>>>>>> Hi Surinder, >>>>>>> >>>>>>> We have applied/tested the patch and below are the review comments. >>>>>>> >>>>>>> 1. When we select the extension "plpython3u", "plperl", "plperu" >>>>>>> etc. then it gives 'TypeError' in Javascript. >>>>>>> TypeError: d.version is undefined >>>>>>> 'version': (!_.isNull(d.version[0]) ? d.version[0]: '') >>>>>>> >>>>>>> We are getting this error while selecting many extensions so please >>>>>>> test with all types of extensions, it should not give any error at client >>>>>>> side. >>>>>>> >>>>>> Fixed. >>>>> >>>>>> >>>>>>> 2. Use 2 space indentation instead of 4 space in javascript file. >>>>>>> >>>>>> Done >>>>> >>>>>> >>>>>>> 3. In "validate" function in "extension.js" file, validate only the >>>>>>> changed values not all, and "this.get('name') - should be called only one >>>>>>> time not multiple >>>>>>> time". >>>>>>> >>>>>> Fixed. >>>>> >>>>>> >>>>>>> 4. When we pass object identifier, use the function 'qtIdent', and >>>>>>> for the values, use function 'qtLiteral' in all the sql files. >>>>>>> >>>>>> Done. >>>>> >>>>>> >>>>>>> 5. By default, when we create the extension, "schema_name" and >>>>>>> "version" should not be be set with value. It should be set blank by >>>>>>> default. >>>>>>> >>>>>> Kept blank while creating extension. >>>>> >>>>>> >>>>>>> 6. When we create any extension like "citext" then we are not able >>>>>>> to create the same extension again after deleting the same extension. May >>>>>>> be issue >>>>>>> with caching mechanism. >>>>>>> >>>>>> It is an architecture change. we'll fix it later. >>>>> >>>>>> >>>>>>> 7. When we remove the schema_name during the "Edit" operation then >>>>>>> wrong SQL is getting generated. >>>>>>> >>>>>> Fixed, Now it generates right SQL. >>>>> >>>>>> >>>>>>> >>>>>> 8. Remove "Use Slony" option. As discussed with Ashesh, we will >>>>>>> implement it as separate module. >>>>>>> >>>>>> Removed. >>>>> >>>>>> >>>>>>> Please fix the above issues. Let us know if you want more >>>>>>> information. >>>>>>> >>>>>>> Thanks, >>>>>>> Neel Patel >>>>>>> >>>>>>> >>>>>>> Thanks, >>>>>>> Neel Patel >>>>>>> >>>>>>> >>>>>>> On Tue, Jan 12, 2016 at 1:15 PM, Surinder Kumar < >>>>>>> surinder.kumar@enterprisedb.com> wrote: >>>>>>> >>>>>>>> Please find the updated patch with following changes: >>>>>>>> >>>>>>>> 1. corrected copyright. >>>>>>>> 2. Added proper comment for script_module function in >>>>>>>> __init__.py file. >>>>>>>> 3. Renamed collection Node's label to Extensions in >>>>>>>> extensions.js file. >>>>>>>> >>>>>>>> >>>>>>>> On Tue, Jan 12, 2016 at 12:44 PM, Surinder Kumar < >>>>>>>> surinder.kumar@enterprisedb.com> wrote: >>>>>>>> >>>>>>>>> Hi, >>>>>>>>> >>>>>>>>> Please find attached patch for the extension module. >>>>>>>>> Please review it and Let me know for any comments. >>>>>>>>> >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> Surinder Kumar >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Sent via pgadmin-hackers mailing list ( >>>>>>>> pgadmin-hackers@postgresql.org) >>>>>>>> To make changes to your subscription: >>>>>>>> http://www.postgresql.org/mailpref/pgadmin-hackers >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > --001a114691101280ba052bcc055d Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,=C2=A0

PFA patch with following chan= ges:
  1. Added "Create Extension" menu item in cont= ext menu of Database node.
  2. Added a new method "node_node"= in ExtensionModule class. If a node has child, returns True, otherwise Fal= se.
  3. Fixed an issue in which icon won't display in create extens= ion link in context menu.
  4. Added Docstring for the class and methods= in python file and proper commenting in js file.
  5. Followed PEP-08 c= oding conventions.
Please review the patch and let me know fo= r any comments.

On Thu, Feb 4, 2016 at 11:59 AM, Neel Patel <ne= el.patel@enterprisedb.com> wrote:
Hi,

New patch is working fine.
Ashesh - Can you please review it? If it looks good then we can co= mmit the extension module.

Thanks,
Neel = Patel


On Thu, Feb 4, 2= 016 at 11:40 AM, Surinder Kumar <surinder.kumar@enterprisedb= .com> wrote:
Hi Neel,

Please find the patch with following changes= :
1. Removed Whitespace from files.
2. Fixed an issue i= n which json object converted into [object object] string.
3. Fix= ed python3 issue of unicode type where code breaks at "isinstance(SQL,= str)" in python3 if str is unicode,
because python no longe= r support unicode type of string.

Please review the patch and Let me know for any comments.

Thanks,
Surinder Kumar

On Thu, Feb 4, 2016 at 10:16 AM, Neel Pa= tel <neel.patel@enterprisedb.com> wrote:
Hi Surinder,

W= hile applying the patch, we are getting below warnings.

extension_v3.patch:362: trailing whitespace.
=C2=A0 = =C2=A0 =C2=A0 =C2=A0 This function will generate sql for sql panel=C2=A0
extension_v3.patch:646: trailing whitespace.
-- Extension= : {{ conn|qtIdent(data.name<= /a>) }}=C2=A0
=


Can you please resend the patch file, af= ter fixing above warnings ?

Thanks,
Neel= Patel

On Fri, Jan 22, 2016 at 12:25 PM, Surinder Kumar <surinder.kumar@enterprisedb.com> wrote:
Hi

Please find the update= d patch with following fixes:
1. Missing `owner` column under pro= perties for `extensions collection`. Add cell: 'string' property fo= r owner fixed it
2. Schema object identifier should be wrapped wi= th in function qtIdent . Using function `qtIdent` for schema in create.sql = fixed it.


Thanks
Surinder Kumar

On Thu, Jan 21, 2016= at 8:04 PM, Surinder Kumar <surinder.kumar@enterprisedb.com= > wrote:
H= i,

I've fixed the issues given in review comments.

Please find the attached updated patch for extensio= n module, review it and let me know for any comments.

On Mon, Jan 18, 2= 016 at 5:44 PM, Surinder Kumar <surinder.kumar@enterprisedb.= com> wrote:
Thanks Neel for reviewing. I'll send the patch with the fixes suggest= ed.

On Mon, Jan 18, 2016 at 4:52 PM, Neel Patel <neel.patel@enterp= risedb.com> wrote:
Hi Surinder,

We have applied/tested the patch a= nd below are the review comments.

1. When we = select the extension "plpython3u", "plperl", "plpe= ru" etc. then it gives 'TypeError' in Javascript.
Ty= peError: d.version is undefined
'version': (!_.isNull(d.v= ersion[0]) ? d.version[0]: '')

We are gett= ing this error while selecting many extensions so please test with all type= s of extensions, it should not give any error at client side.
Fixed.=C2= =A0

2.=C2=A0 Use 2 space indentation instead = of 4 space in javascript file.
Done

3. In "= ;validate" function in "extension.js" file, validate only th= e changed values not all, and "this.get('name') - should be ca= lled only one time not multiple=C2=A0
=C2=A0 =C2=A0 time".
Fix= ed.=C2=A0

4.=C2=A0= When we pass object identifier, use the function 'qtIdent', and for= the values, use function =C2=A0'qtLiteral' in all the sql files.
<= div>Done.=C2=A0

5. By default, when we create the e= xtension, "schema_name" and "version" should not be be = set with value. It should be set blank by default.
=
Kept blank while creating = extension.=C2=A0

6. When we create any extension li= ke "citext" then we are not able to create the same extension aga= in after deleting the same extension. May be issue=C2=A0
=C2=A0 = =C2=A0 with caching mechanism.
It is an architecture change. we'll fix it= later.=C2=A0

7. When we remove the schema_name dur= ing the "Edit" operation then wrong SQL is getting generated.
Fixed= , Now it generates right SQL.
= =C2=A0
=
8. Remove "Use Slony" option. As discussed with Ashesh, = we will implement it as separate module.
Removed.=C2=A0

Please fix the above issues. Let us know if you want more information.

Thanks,
Neel Patel


Thanks,
Neel Patel


On Tue, J= an 12, 2016 at 1:15 PM, Surinder Kumar <surinder.kumar@enter= prisedb.com> wrote:
Please find the updated patch with followin= g changes:
  1. corrected copyright.
  2. Added proper comment fo= r script_module function in __init__.py file.
  3. Renamed collection No= de's label to Extensions in extensions.js file.

On Tue, J= an 12, 2016 at 12:44 PM, Surinder Kumar <surinder.kumar@ente= rprisedb.com> wrote:
Hi,

Please find attached patch for= the extension module.
Please review it and Let me know for any comments= .


Thanks,
Surinder Kumar<= /div>



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









--001a114691101280ba052bcc055d-- --001a114691101280be052bcc055f Content-Type: application/octet-stream; name="extension_v5.patch" Content-Disposition: attachment; filename="extension_v5.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iknt2t6c0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy9leHRlbnNpb25zL19faW5pdF9fLnB5IGIv d2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0 YWJhc2VzL2V4dGVuc2lvbnMvX19pbml0X18ucHkKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uMjQyOWViOQotLS0gL2Rldi9udWxsCisr KyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9leHRlbnNpb25zL19faW5pdF9fLnB5CkBAIC0wLDAgKzEs NDQ2IEBACisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIworIyBw Z0FkbWluIDQgLSBQb3N0Z3JlU1FMIFRvb2xzCisjCisjIENvcHlyaWdodCAo QykgMjAxMyAtIDIwMTYsIFRoZSBwZ0FkbWluIERldmVsb3BtZW50IFRlYW0K KyMgVGhpcyBzb2Z0d2FyZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgUG9zdGdy ZVNRTCBMaWNlbmNlCisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IworCitpbXBvcnQganNvbgorZnJvbSBmbGFzayBpbXBvcnQgcmVuZGVyX3Rl bXBsYXRlLCBtYWtlX3Jlc3BvbnNlLCByZXF1ZXN0LCBqc29uaWZ5Citmcm9t IGZsYXNrLmV4dC5iYWJlbCBpbXBvcnQgZ2V0dGV4dAorZnJvbSBwZ2FkbWlu LnV0aWxzLmFqYXggaW1wb3J0IG1ha2VfanNvbl9yZXNwb25zZSwgXAorICAg IG1ha2VfcmVzcG9uc2UgYXMgYWpheF9yZXNwb25zZSwgaW50ZXJuYWxfc2Vy dmVyX2Vycm9yCitmcm9tIHBnYWRtaW4uYnJvd3Nlci51dGlscyBpbXBvcnQg Tm9kZVZpZXcKK2Zyb20gcGdhZG1pbi5icm93c2VyLmNvbGxlY3Rpb24gaW1w b3J0IENvbGxlY3Rpb25Ob2RlTW9kdWxlCitpbXBvcnQgcGdhZG1pbi5icm93 c2VyLnNlcnZlcl9ncm91cHMuc2VydmVycy5kYXRhYmFzZXMgYXMgZGF0YWJh c2VzCitmcm9tIHBnYWRtaW4udXRpbHMuZHJpdmVyIGltcG9ydCBnZXRfZHJp dmVyCitmcm9tIGNvbmZpZyBpbXBvcnQgUEdfREVGQVVMVF9EUklWRVIKK2Zy b20gZnVuY3Rvb2xzIGltcG9ydCB3cmFwcworCisjIEFzIHVuaWNvZGUgdHlw ZSBpcyBub3QgYXZhaWxhYmxlIGluIHB5dGhvbjMKKyMgSWYgd2UgY2hlY2sg YSB2YXJpYWJsZSBpcyAiaXNpbnN0YW5jZSh2YXJpYWJsZSwgc3RyKQorIyBp dCBicmVha3MgaW4gcHl0aG9uIDMgYXMgdmFyaWFibGUgdHlwZSBpcyBub3Qg c3RyaW5nIGl0cyB1bmljb2RlLgorIyBXZSBhc3NpZ24gYmFzZXN0cmluZyBh cyBzdHIgdHlwZSBpZiBpdCBpcyBweXRob24zLCB1bmljb2RlCisjIGlmIGl0 IGlzIHB5dGhvbjIuCisKK3RyeToKKyAgICB1bmljb2RlID0gdW5pY29kZQor ZXhjZXB0IE5hbWVFcnJvcjoKKyAgICAjICd1bmljb2RlJyBpcyB1bmRlZmlu ZWQsIG11c3QgYmUgUHl0aG9uIDMKKyAgICBzdHIgPSBzdHIKKyAgICB1bmlj b2RlID0gc3RyCisgICAgYnl0ZXMgPSBieXRlcworICAgIGJhc2VzdHJpbmcg PSAoc3RyLCBieXRlcykKK2Vsc2U6CisgICAgIyAndW5pY29kZScgZXhpc3Rz LCBtdXN0IGJlIFB5dGhvbiAyCisgICAgc3RyID0gc3RyCisgICAgdW5pY29k ZSA9IHVuaWNvZGUKKyAgICBieXRlcyA9IHN0cgorICAgIGJhc2VzdHJpbmcg PSBiYXNlc3RyaW5nCisKKworY2xhc3MgRXh0ZW5zaW9uTW9kdWxlKENvbGxl Y3Rpb25Ob2RlTW9kdWxlKToKKyAgICAiIiIKKyAgICBjbGFzcyBFeHRlbnNp b25Nb2R1bGUoT2JqZWN0KToKKworICAgICAgICBBIGNvbGxlY3Rpb24gTm9k ZSB3aGljaCBpbmhlcml0cyBDb2xsZWN0aW9uTm9kZU1vZHVsZQorICAgICAg ICBjbGFzcyBhbmQgZGVmaW5lIG1ldGhvZHMgdG8gZ2V0IGNoaWxkIG5vZGVz LCB0byBsb2FkIGl0cyBvd24KKyAgICAgICAgamF2YXNjcmlwdCBmaWxlLgor ICAgICIiIgorICAgIE5PREVfVFlQRSA9ICJleHRlbnNpb24iCisgICAgQ09M TEVDVElPTl9MQUJFTCA9IGdldHRleHQoIkV4dGVuc2lvbnMiKQorCisgICAg ZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAg ICIiIgorICAgICAgICBJbml0aWFsaXNpbmcgdGhlIGJhc2UgY2xhc3MKKyAg ICAgICAgIiIiCisgICAgICAgIHN1cGVyKEV4dGVuc2lvbk1vZHVsZSwgc2Vs ZikuX19pbml0X18oKmFyZ3MsICoqa3dhcmdzKQorCisgICAgZGVmIGdldF9u b2RlcyhzZWxmLCBnaWQsIHNpZCwgZGlkKToKKyAgICAgICAgIiIiCisgICAg ICAgIEdlbmVyYXRlIHRoZSBjb2xsZWN0aW9uIG5vZGUKKyAgICAgICAgIiIi CisgICAgICAgIHlpZWxkIHNlbGYuZ2VuZXJhdGVfYnJvd3Nlcl9jb2xsZWN0 aW9uX25vZGUoZGlkKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIG5vZGVf aW5vZGUoc2VsZik6CisgICAgICAgICIiIgorICAgICAgICBJZiBhIG5vZGUg aGF2ZSBjaGlsZCByZXR1cm4gVHJ1ZSBvdGhlcndpc2UgRmFsc2UKKyAgICAg ICAgIiIiCisgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgQHByb3BlcnR5 CisgICAgZGVmIHNjcmlwdF9sb2FkKHNlbGYpOgorICAgICAgICAiIiIKKyAg ICAgICAgTG9hZCB0aGUgbW9kdWxlIHNjcmlwdCBmb3IgZXh0ZW5zaW9uLCB3 aGVuIGFueSBvZiB0aGUgZGF0YWJhc2Ugbm9kZSBpcworICAgICAgICBpbml0 aWFsaXplZC4KKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBkYXRhYmFz ZXMuRGF0YWJhc2VNb2R1bGUuTk9ERV9UWVBFCisKKworIyBDcmVhdGUgYmx1 ZXByaW50IG9mIGV4dGVuc2lvbiBtb2R1bGUKK2JsdWVwcmludCA9IEV4dGVu c2lvbk1vZHVsZShfX25hbWVfXykKKworCitjbGFzcyBFeHRlbnNpb25WaWV3 KE5vZGVWaWV3KToKKyAgICAiIiIKKyAgICBJdCBpcyBhIGNsYXNzIGZvciBl eHRlbnNpb24gbm9kZSB3aGljaCBpbmhlcml0cyB0aGUKKyAgICBwcm9wZXJ0 aWVzIGFuZCBtZXRob2RzIGZyb20gTm9kZVZpZXcgY2xhc3MgYW5kIGRlZmlu ZQorICAgIHZhcmlvdXMgbWV0aG9kcyB0byBsaXN0LCBjcmVhdGUsIHVwZGF0 ZSBhbmQgZGVsZXRlIGV4dGVuc2lvbi4KKworICAgIFZhcmlhYmxlczoKKyAg ICAtLS0tLS0tLS0KKyAgICAqIG5vZGVfdHlwZSAtIHRlbGxzIHdoaWNoIHR5 cGUgb2Ygbm9kZSBpdCBpcworICAgICogcGFyZW50X2lkcyAtIGlkIHdpdGgg aXRzIHR5cGUgYW5kIG5hbWUgb2YgcGFyZW50IG5vZGVzCisgICAgKiBpZHMg LSBpZCB3aXRoIHR5cGUgYW5kIG5hbWUgb2YgZXh0ZW5zaW9uIG1vZHVsZSBi ZWluZyB1c2VkLgorICAgICogb3BlcmF0aW9ucyAtIGZ1bmN0aW9uIHJvdXRl cyBtYXBwaW5ncyBkZWZpbmVkLgorICAgICIiIgorICAgIG5vZGVfdHlwZSA9 IGJsdWVwcmludC5ub2RlX3R5cGUKKworICAgIHBhcmVudF9pZHMgPSBbCisg ICAgICAgICAgICB7J3R5cGUnOiAnaW50JywgJ2lkJzogJ2dpZCd9LAorICAg ICAgICAgICAgeyd0eXBlJzogJ2ludCcsICdpZCc6ICdzaWQnfSwKKyAgICAg ICAgICAgIHsndHlwZSc6ICdpbnQnLCAnaWQnOiAnZGlkJ30KKyAgICAgICAg ICAgIF0KKyAgICBpZHMgPSBbCisgICAgICAgICAgICB7J3R5cGUnOiAnaW50 JywgJ2lkJzogJ2VpZCd9CisgICAgICAgICAgICBdCisKKyAgICBvcGVyYXRp b25zID0gZGljdCh7CisgICAgICAgICdvYmonOiBbCisgICAgICAgICAgICB7 J2dldCc6ICdwcm9wZXJ0aWVzJywgJ2RlbGV0ZSc6ICdkZWxldGUnLCAncHV0 JzogJ3VwZGF0ZSd9LAorICAgICAgICAgICAgeydnZXQnOiAnbGlzdCcsICdw b3N0JzogJ2NyZWF0ZSd9CisgICAgICAgIF0sCisgICAgICAgICdkZWxldGUn OiBbeydkZWxldGUnOiAnZGVsZXRlJ31dLAorICAgICAgICAnbm9kZXMnOiBb eydnZXQnOiAnbm9kZSd9LCB7J2dldCc6ICdub2Rlcyd9XSwKKyAgICAgICAg J3NxbCc6IFt7J2dldCc6ICdzcWwnfV0sCisgICAgICAgICdtc3FsJzogW3sn Z2V0JzogJ21zcWwnfSwgeydnZXQnOiAnbXNxbCd9XSwKKyAgICAgICAgJ3N0 YXRzJzogW3snZ2V0JzogJ3N0YXRpc3RpY3MnfV0sCisgICAgICAgICdkZXBl bmRlbmN5JzogW3snZ2V0JzogJ2RlcGVuZGVuY2llcyd9XSwKKyAgICAgICAg J2RlcGVuZGVudCc6IFt7J2dldCc6ICdkZXBlbmRlbnRzJ31dLAorICAgICAg ICAnbW9kdWxlLmpzJzogW3t9LCB7fSwgeydnZXQnOiAnbW9kdWxlX2pzJ31d LAorICAgICAgICAnYXZhaWxzJzogW3t9LCB7J2dldCc6ICdhdmFpbHMnfV0s CisgICAgICAgICdzY2hlbWFzJzogW3t9LCB7J2dldCc6ICdzY2hlbWFzJ31d LAorICAgICAgICAnY2hpbGRyZW4nOiBbeydnZXQnOiAnY2hpbGRyZW4nfV0K KyAgICB9KQorCisgICAgZGVmIGNoZWNrX3ByZWNvbmRpdGlvbihmKToKKyAg ICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBiZWhhdmUg YXMgYSBkZWNvcmF0b3Igd2hpY2ggd2lsbCBjaGVja3MKKyAgICAgICAgZGF0 YWJhc2UgY29ubmVjdGlvbiBiZWZvcmUgcnVubmluZyB2aWV3LCBpdCB3aWxs IGFsc28gYXR0YWNoZXMKKyAgICAgICAgbWFuYWdlcixjb25uICYgdGVtcGxh dGVfcGF0aCBwcm9wZXJ0aWVzIHRvIHNlbGYKKyAgICAgICAgIiIiCisgICAg ICAgIEB3cmFwcyhmKQorICAgICAgICBkZWYgd3JhcCgqYXJncywgKiprd2Fy Z3MpOgorICAgICAgICAgICAgIyBIZXJlIGFyZ3NbMF0gd2lsbCBob2xkIHNl bGYgJiBrd2FyZ3Mgd2lsbCBob2xkIGdpZCxzaWQsZGlkCisgICAgICAgICAg ICBzZWxmID0gYXJnc1swXQorICAgICAgICAgICAgc2VsZi5tYW5hZ2VyID0g Z2V0X2RyaXZlcigKKyAgICAgICAgICAgICAgICAgICAgUEdfREVGQVVMVF9E UklWRVIKKyAgICAgICAgICAgICAgICApLmNvbm5lY3Rpb25fbWFuYWdlcihr d2FyZ3NbJ3NpZCddKQorICAgICAgICAgICAgc2VsZi5jb25uID0gc2VsZi5t YW5hZ2VyLmNvbm5lY3Rpb24oZGlkPWt3YXJnc1snZGlkJ10pCisgICAgICAg ICAgICBzZWxmLnRlbXBsYXRlX3BhdGggPSAnZXh0ZW5zaW9ucy9zcWwnCisK KyAgICAgICAgICAgIHJldHVybiBmKCphcmdzLCAqKmt3YXJncykKKyAgICAg ICAgcmV0dXJuIHdyYXAKKworICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAg ICBkZWYgbGlzdChzZWxmLCBnaWQsIHNpZCwgZGlkKToKKyAgICAgICAgIiIi CisgICAgICAgIEl0IGZldGNoZXMgYWxsIGV4dGVuc2lvbnMgcHJvcGVydGll cyBhbmQgcmVuZGVyIGludG8gcHJvcGVydGllcworICAgICAgICB0YWIKKyAg ICAgICAgIiIiCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIu am9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwnXSkp CisgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfZGlj dChTUUwpCisKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAg IHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQor ICAgICAgICByZXR1cm4gYWpheF9yZXNwb25zZSgKKyAgICAgICAgICAgICAg ICByZXNwb25zZT1yZXNbJ3Jvd3MnXSwKKyAgICAgICAgICAgICAgICBzdGF0 dXM9MjAwCisgICAgICAgICAgICAgICAgKQorCisgICAgQGNoZWNrX3ByZWNv bmRpdGlvbgorICAgIGRlZiBub2RlcyhzZWxmLCBnaWQsIHNpZCwgZGlkKToK KyAgICAgICAgIiIiCisgICAgICAgIEl0IGxpc3RzIGRvd24gdGhlIGFsbCBl eHRlbnNpb25zIHVuZGVyIHRoZSBFeHRlbnNpb25zIENvbGxlY3Rpb24gbm9k ZQorICAgICAgICAiIiIKKyAgICAgICAgcmVzID0gW10KKyAgICAgICAgU1FM ID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3Bh dGgsICdwcm9wZXJ0aWVzLnNxbCddKSkKKyAgICAgICAgc3RhdHVzLCByc2V0 ID0gc2VsZi5jb25uLmV4ZWN1dGVfMmRhcnJheShTUUwpCisgICAgICAgIGlm IG5vdCBzdGF0dXM6CisgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxfc2Vy dmVyX2Vycm9yKGVycm9ybXNnPXJzZXQpCisKKyAgICAgICAgZm9yIHJvdyBp biByc2V0Wydyb3dzJ106CisgICAgICAgICAgICByZXMuYXBwZW5kKAorICAg ICAgICAgICAgICAgICAgICBzZWxmLmJsdWVwcmludC5nZW5lcmF0ZV9icm93 c2VyX25vZGUoCisgICAgICAgICAgICAgICAgICAgICAgICByb3dbJ2VpZCdd LAorICAgICAgICAgICAgICAgICAgICAgICAgZGlkLAorICAgICAgICAgICAg ICAgICAgICAgICAgcm93WyduYW1lJ10sCisgICAgICAgICAgICAgICAgICAg ICAgICAnaWNvbi1leHRlbnNpb24nCisgICAgICAgICAgICAgICAgICAgICkp CisKKyAgICAgICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAg ICAgICAgICAgICBkYXRhPXJlcywKKyAgICAgICAgICAgICAgICBzdGF0dXM9 MjAwCisgICAgICAgICAgICAgICAgKQorCisgICAgQGNoZWNrX3ByZWNvbmRp dGlvbgorICAgIGRlZiBwcm9wZXJ0aWVzKHNlbGYsIGdpZCwgc2lkLCBkaWQs IGVpZCk6CisgICAgICAgICIiIgorICAgICAgICBJdCBmZXRjaGVzIHRoZSBw cm9wZXJ0aWVzIG9mIGEgc2luZ2xlIGV4dGVuc2lvbgorICAgICAgICBhbmQg cmVuZGVyIGluIHByb3BlcnRpZXMgdGFiCisKKyAgICAgICAgIiIiCisgICAg ICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbigKKyAgICAgICAg ICAgIFtzZWxmLnRlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddKSwg ZWlkPWVpZCkKKyAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhl Y3V0ZV9kaWN0KFNRTCkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAg ICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9 cmVzKQorCisgICAgICAgIHJldHVybiBhamF4X3Jlc3BvbnNlKAorICAgICAg ICAgICAgICAgIHJlc3BvbnNlPXJlc1sncm93cyddWzBdLAorICAgICAgICAg ICAgICAgIHN0YXR1cz0yMDAKKyAgICAgICAgICAgICAgICApCisKKyAgICBA Y2hlY2tfcHJlY29uZGl0aW9uCisgICAgZGVmIGNyZWF0ZShzZWxmLCBnaWQs IHNpZCwgZGlkKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rp b24gd2lsbCBjcmVhdGVzIG5ldyB0aGUgZXh0ZW5zaW9uIG9iamVjdAorICAg ICAgICAiIiIKKyAgICAgICAgcmVxdWlyZWRfYXJncyA9IFsKKyAgICAgICAg ICAgICduYW1lJworICAgICAgICBdCisKKyAgICAgICAgZGF0YSA9IHJlcXVl c3QuZm9ybSBpZiByZXF1ZXN0LmZvcm0gZWxzZSBcCisgICAgICAgICAgICBq c29uLmxvYWRzKHJlcXVlc3QuZGF0YS5kZWNvZGUoKSkKKyAgICAgICAgZm9y IGFyZyBpbiByZXF1aXJlZF9hcmdzOgorICAgICAgICAgICAgaWYgYXJnIG5v dCBpbiBkYXRhOgorICAgICAgICAgICAgICAgIHJldHVybiBtYWtlX2pzb25f cmVzcG9uc2UoCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cz00MTAsCisg ICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M9MCwKKyAgICAgICAgICAgICAg ICAgICAgZXJyb3Jtc2c9Z2V0dGV4dCgKKyAgICAgICAgICAgICAgICAgICAg ICAgICJDb3VsZG4ndCBmaW5kIHRoZSByZXF1aXJlZCBwYXJhbWV0ZXIgKCVz KS4iICUgYXJnCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAg ICAgICApCisKKyAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhl Y3V0ZV9kaWN0KAorICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKAorICAg ICAgICAgICAgICAgICIvIi5qb2luKFtzZWxmLnRlbXBsYXRlX3BhdGgsICdj cmVhdGUuc3FsJ10pLAorICAgICAgICAgICAgICAgIGRhdGE9ZGF0YQorICAg ICAgICAgICAgICAgICkKKyAgICAgICAgICAgICkKKworICAgICAgICBpZiBu b3Qgc3RhdHVzOgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgc3RhdHVzLCByc2V0 ID0gc2VsZi5jb25uLmV4ZWN1dGVfZGljdCgKKyAgICAgICAgICAgIHJlbmRl cl90ZW1wbGF0ZSgKKyAgICAgICAgICAgICAgICAiLyIuam9pbihbc2VsZi50 ZW1wbGF0ZV9wYXRoLCAncHJvcGVydGllcy5zcWwnXSksCisgICAgICAgICAg ICAgICAgZW5hbWU9ZGF0YVsnbmFtZSddCisgICAgICAgICAgICApCisgICAg ICAgICkKKworICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAg cmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQor CisgICAgICAgIGZvciByb3cgaW4gcnNldFsncm93cyddOgorICAgICAgICAg ICAgcmV0dXJuIGpzb25pZnkoCisgICAgICAgICAgICAgIG5vZGU9c2VsZi5i bHVlcHJpbnQuZ2VuZXJhdGVfYnJvd3Nlcl9ub2RlKAorICAgICAgICAgICAg ICAgICAgICByb3dbJ2VpZCddLAorICAgICAgICAgICAgICAgICAgICBkaWQs CisgICAgICAgICAgICAgICAgICAgIHJvd1snbmFtZSddLAorICAgICAgICAg ICAgICAgICAgICAnaWNvbi1leHRlbnNpb24nCisgICAgICAgICAgICAgICAg ICAgICkKKyAgICAgICAgICAgICkKKworICAgIEBjaGVja19wcmVjb25kaXRp b24KKyAgICBkZWYgdXBkYXRlKHNlbGYsIGdpZCwgc2lkLCBkaWQsIGVpZCk6 CisgICAgICAgICIiIgorICAgICAgICBUaGlzIGZ1bmN0aW9uIHdpbGwgdXBk YXRlIGV4dGVuc2lvbiBvYmplY3QKKyAgICAgICAgIiIiCisgICAgICAgIGRh dGEgPSByZXF1ZXN0LmZvcm0gaWYgcmVxdWVzdC5mb3JtIGVsc2UgXAorICAg ICAgICAgICAganNvbi5sb2FkcyhyZXF1ZXN0LmRhdGEuZGVjb2RlKCkpCisg ICAgICAgIFNRTCA9IHNlbGYuZ2V0U1FMKGdpZCwgc2lkLCBkYXRhLCBkaWQs IGVpZCkKKworICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiBTUUwgYW5k IGlzaW5zdGFuY2UoU1FMLCBiYXNlc3RyaW5nKSBhbmQgXAorICAgICAgICAg ICAgICAgICAgICBTUUwuc3RyaXAoJ1xuJykgYW5kIFNRTC5zdHJpcCgnICcp OgorICAgICAgICAgICAgICAgIHN0YXR1cywgcmVzID0gc2VsZi5jb25uLmV4 ZWN1dGVfZGljdChTUUwpCisgICAgICAgICAgICAgICAgaWYgbm90IHN0YXR1 czoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZl cl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAgICAgICAgICAgICByZXR1 cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgICAgICAgICBz dWNjZXNzPTEsCisgICAgICAgICAgICAgICAgICAgIGluZm89IkV4dGVuc2lv biB1cGRhdGVkIiwKKyAgICAgICAgICAgICAgICAgICAgZGF0YT17CisgICAg ICAgICAgICAgICAgICAgICAgICAnaWQnOiBlaWQsCisgICAgICAgICAgICAg ICAgICAgICAgICAnc2lkJzogc2lkLAorICAgICAgICAgICAgICAgICAgICAg ICAgJ2dpZCc6IGdpZAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg ICAgICAgICAgKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAg ICByZXR1cm4gbWFrZV9qc29uX3Jlc3BvbnNlKAorICAgICAgICAgICAgICAg ICAgICBzdWNjZXNzPTEsCisgICAgICAgICAgICAgICAgICAgIGluZm89Ik5v dGhpbmcgdG8gdXBkYXRlIiwKKyAgICAgICAgICAgICAgICAgICAgZGF0YT17 CisgICAgICAgICAgICAgICAgICAgICAgICAnaWQnOiBkaWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAnc2lkJzogc2lkLAorICAgICAgICAgICAgICAg ICAgICAgICAgJ2dpZCc6IGdpZAorICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgKQorCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24g YXMgZToKKyAgICAgICAgICAgIHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJy b3IoZXJyb3Jtc2c9c3RyKGUpKQorCisgICAgQGNoZWNrX3ByZWNvbmRpdGlv bgorICAgIGRlZiBkZWxldGUoc2VsZiwgZ2lkLCBzaWQsIGRpZCwgZWlkKToK KyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24gd2lsbCBkZWxl dGUgZHJvcC9kcm9wIGNhc2NhZGUgdGhlIGV4dGVuc2lvbiBvYmplY3QKKyAg ICAgICAgIiIiCisgICAgICAgIGNhc2NhZGUgPSBUcnVlIGlmIHNlbGYuY21k ID09ICdkZWxldGUnIGVsc2UgRmFsc2UKKyAgICAgICAgdHJ5OgorICAgICAg ICAgICAgIyBjaGVjayBpZiBleHRlbnNpb24gd2l0aCBlaWQgZXhpc3RzCisg ICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4oCisg ICAgICAgICAgICAgICAgW3NlbGYudGVtcGxhdGVfcGF0aCwgJ2RlbGV0ZS5z cWwnXSksIGVpZD1laWQpCisgICAgICAgICAgICBzdGF0dXMsIG5hbWUgPSBz ZWxmLmNvbm4uZXhlY3V0ZV9zY2FsYXIoU1FMKQorICAgICAgICAgICAgaWYg bm90IHN0YXR1czoKKyAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJuYWxf c2VydmVyX2Vycm9yKGVycm9ybXNnPW5hbWUpCisgICAgICAgICAgICAjIGRy b3AgZXh0ZW5zaW9uCisgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxh dGUoIi8iLmpvaW4oCisgICAgICAgICAgICAgICAgICAgIFtzZWxmLnRlbXBs YXRlX3BhdGgsICdkZWxldGUuc3FsJ10KKyAgICAgICAgICAgICAgICApLCBu YW1lPW5hbWUsIGNhc2NhZGU9Y2FzY2FkZSkKKyAgICAgICAgICAgIHN0YXR1 cywgcmVzID0gc2VsZi5jb25uLmV4ZWN1dGVfc2NhbGFyKFNRTCkKKyAgICAg ICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJu IGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yZXMpCisKKyAgICAg ICAgICAgIHJldHVybiBtYWtlX2pzb25fcmVzcG9uc2UoCisgICAgICAgICAg ICAgICAgc3VjY2Vzcz0xLAorICAgICAgICAgICAgICAgIGluZm89Z2V0dGV4 dCgiRXh0ZW5zaW9uIGRyb3BwZWQiKSwKKyAgICAgICAgICAgICAgICBkYXRh PXsKKyAgICAgICAgICAgICAgICAgICAgJ2lkJzogZGlkLAorICAgICAgICAg ICAgICAgICAgICAnc2lkJzogc2lkLAorICAgICAgICAgICAgICAgICAgICAn Z2lkJzogZ2lkLAorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICkK KworICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAg ICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0cihl KSkKKworICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBkZWYgbXNxbChz ZWxmLCBnaWQsIHNpZCwgZGlkLCBlaWQ9Tm9uZSk6CisgICAgICAgICIiIgor ICAgICAgICBUaGlzIGZ1bmN0aW9uIHRvIHJldHVybiBtb2RpZmllZCBTUUwK KyAgICAgICAgIiIiCisgICAgICAgIGRhdGEgPSByZXF1ZXN0LmFyZ3MuY29w eSgpCisgICAgICAgIFNRTCA9IHNlbGYuZ2V0U1FMKGdpZCwgc2lkLCBkYXRh LCBkaWQsIGVpZCkKKyAgICAgICAgaWYgU1FMIGFuZCBpc2luc3RhbmNlKFNR TCwgYmFzZXN0cmluZykgYW5kIFNRTC5zdHJpcCgnXG4nKSBcCisgICAgICAg ICAgICAgICAgYW5kIFNRTC5zdHJpcCgnICcpOgorICAgICAgICAgICAgcmV0 dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAgICAgICAgICAgICAgICAg ZGF0YT1TUUwsCisgICAgICAgICAgICAgICAgICAgIHN0YXR1cz0yMDAKKyAg ICAgICAgICAgICAgICAgICAgKQorICAgICAgICBlbHNlOgorICAgICAgICAg ICAgcmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAgICAgICAgICAg ICAgICAgZGF0YT0nLS0gTW9kaWZpZWQgU1FMIC0tJywKKyAgICAgICAgICAg ICAgICAgICAgc3RhdHVzPTIwMAorICAgICAgICAgICAgICAgICAgICApCisK KyAgICBkZWYgZ2V0U1FMKHNlbGYsIGdpZCwgc2lkLCBkYXRhLCBkaWQsIGVp ZD1Ob25lKToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgZnVuY3Rpb24g d2lsbCBnZW5lcmF0ZSBzcWwgZnJvbSBtb2RlbCBkYXRhCisgICAgICAgICIi IgorICAgICAgICByZXF1aXJlZF9hcmdzID0gWworICAgICAgICAgICAgJ25h bWUnCisgICAgICAgIF0KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaWYg ZWlkIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIFNRTCA9IHJlbmRl cl90ZW1wbGF0ZSgiLyIuam9pbigKKyAgICAgICAgICAgICAgICAgICAgICAg IFtzZWxmLnRlbXBsYXRlX3BhdGgsICdwcm9wZXJ0aWVzLnNxbCddCisgICAg ICAgICAgICAgICAgICAgICksIGVpZD1laWQpCisgICAgICAgICAgICAgICAg c3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkKKyAg ICAgICAgICAgICAgICBpZiBub3Qgc3RhdHVzOgorICAgICAgICAgICAgICAg ICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXJl cykKKyAgICAgICAgICAgICAgICBvbGRfZGF0YSA9IHJlc1sncm93cyddWzBd CisgICAgICAgICAgICAgICAgZm9yIGFyZyBpbiByZXF1aXJlZF9hcmdzOgor ICAgICAgICAgICAgICAgICAgICBpZiBhcmcgbm90IGluIGRhdGE6CisgICAg ICAgICAgICAgICAgICAgICAgICBkYXRhW2FyZ10gPSBvbGRfZGF0YVthcmdd CisgICAgICAgICAgICAgICAgU1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5q b2luKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxmLnRlbXBs YXRlX3BhdGgsICd1cGRhdGUuc3FsJ10KKyAgICAgICAgICAgICAgICAgICAg ICAgICksIGRhdGE9ZGF0YSwgb19kYXRhPW9sZF9kYXRhKQorICAgICAgICAg ICAgZWxzZToKKyAgICAgICAgICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxh dGUoIi8iLmpvaW4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nl bGYudGVtcGxhdGVfcGF0aCwgJ2NyZWF0ZS5zcWwnXQorICAgICAgICAgICAg ICAgICAgICAgICAgKSwgZGF0YT1kYXRhKQorICAgICAgICAgICAgcmV0dXJu IFNRTAorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAg ICAgICByZXR1cm4gaW50ZXJuYWxfc2VydmVyX2Vycm9yKGVycm9ybXNnPXN0 cihlKSkKKworICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBkZWYgYXZh aWxzKHNlbGYsIGdpZCwgc2lkLCBkaWQpOgorICAgICAgICAiIiIKKyAgICAg ICAgVGhpcyBmdW5jdGlvbiB3aXRoIGZldGNoIGFsbCB0aGUgYXZhaWxhYmxl IGV4dGVuc2lvbnMKKyAgICAgICAgIiIiCisgICAgICAgIFNRTCA9IHJlbmRl cl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi50ZW1wbGF0ZV9wYXRoLCAnZXh0 ZW5zaW9ucy5zcWwnXSkpCisgICAgICAgIHN0YXR1cywgcnNldCA9IHNlbGYu Y29ubi5leGVjdXRlX2RpY3QoU1FMKQorICAgICAgICBpZiBub3Qgc3RhdHVz OgorICAgICAgICAgICAgcmV0dXJuIGludGVybmFsX3NlcnZlcl9lcnJvcihl cnJvcm1zZz1yc2V0KQorICAgICAgICByZXR1cm4gbWFrZV9qc29uX3Jlc3Bv bnNlKAorICAgICAgICAgICAgICAgIGRhdGE9cnNldFsncm93cyddLAorICAg ICAgICAgICAgICAgIHN0YXR1cz0yMDAKKyAgICAgICAgICAgICAgICApCisK KyAgICBAY2hlY2tfcHJlY29uZGl0aW9uCisgICAgZGVmIHNjaGVtYXMoc2Vs ZiwgZ2lkLCBzaWQsIGRpZCk6CisgICAgICAgICIiIgorICAgICAgICBUaGlz IGZ1bmN0aW9uIHdpdGggZmV0Y2ggYWxsIHRoZSBzY2hlbWFzCisgICAgICAg ICIiIgorICAgICAgICBTUUwgPSByZW5kZXJfdGVtcGxhdGUoIi8iLmpvaW4o W3NlbGYudGVtcGxhdGVfcGF0aCwgJ3NjaGVtYXMuc3FsJ10pKQorICAgICAg ICBzdGF0dXMsIHJzZXQgPSBzZWxmLmNvbm4uZXhlY3V0ZV9kaWN0KFNRTCkK KyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAgIHJldHVybiBp bnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cnNldCkKKyAgICAgICAg cmV0dXJuIG1ha2VfanNvbl9yZXNwb25zZSgKKyAgICAgICAgICAgICAgICBk YXRhPXJzZXRbJ3Jvd3MnXSwKKyAgICAgICAgICAgICAgICBzdGF0dXM9MjAw CisgICAgICAgICAgICAgICAgKQorCisgICAgZGVmIG1vZHVsZV9qcyhzZWxm KToKKyAgICAgICAgIiIiCisgICAgICAgIFRoaXMgcHJvcGVydHkgZGVmaW5l cyAoaWYgamF2YXNjcmlwdCkgZXhpc3RzIGZvciB0aGlzIG5vZGUuCisgICAg ICAgIE92ZXJyaWRlIHRoaXMgcHJvcGVydHkgZm9yIHlvdXIgb3duIGxvZ2lj LgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIG1ha2VfcmVzcG9uc2Uo CisgICAgICAgICAgICAgICAgcmVuZGVyX3RlbXBsYXRlKAorICAgICAgICAg ICAgICAgICAgICAiZXh0ZW5zaW9ucy9qcy9leHRlbnNpb25zLmpzIiwKKyAg ICAgICAgICAgICAgICAgICAgXz1nZXR0ZXh0CisgICAgICAgICAgICAgICAg ICAgICksCisgICAgICAgICAgICAgICAgMjAwLCB7J0NvbnRlbnQtVHlwZSc6 ICdhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQnfQorICAgICAgICAgICAgICAg ICkKKworICAgIEBjaGVja19wcmVjb25kaXRpb24KKyAgICBkZWYgc3FsKHNl bGYsIGdpZCwgc2lkLCBkaWQsIGVpZCk6CisgICAgICAgICIiIgorICAgICAg ICBUaGlzIGZ1bmN0aW9uIHdpbGwgZ2VuZXJhdGUgc3FsIGZvciBzcWwgcGFu ZWwKKyAgICAgICAgIiIiCisgICAgICAgIFNRTCA9IHJlbmRlcl90ZW1wbGF0 ZSgiLyIuam9pbigKKyAgICAgICAgICAgICAgICBbc2VsZi50ZW1wbGF0ZV9w YXRoLCAncHJvcGVydGllcy5zcWwnXQorICAgICAgICAgICAgKSwgZWlkPWVp ZCkKKyAgICAgICAgc3RhdHVzLCByZXMgPSBzZWxmLmNvbm4uZXhlY3V0ZV9k aWN0KFNRTCkKKyAgICAgICAgaWYgbm90IHN0YXR1czoKKyAgICAgICAgICAg IHJldHVybiBpbnRlcm5hbF9zZXJ2ZXJfZXJyb3IoZXJyb3Jtc2c9cmVzKQor CisgICAgICAgIHJlc3VsdCA9IHJlc1sncm93cyddWzBdCisKKyAgICAgICAg U1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKAorICAgICAgICAgICAg ICAgIFtzZWxmLnRlbXBsYXRlX3BhdGgsICdjcmVhdGUuc3FsJ10KKyAgICAg ICAgICAgICAgICApLAorICAgICAgICAgICAgZGF0YT1yZXN1bHQsCisgICAg ICAgICAgICBjb25uPXNlbGYuY29ubiwKKyAgICAgICAgICAgIGRpc3BsYXlf Y29tbWVudHM9VHJ1ZQorICAgICAgICApCisKKyAgICAgICAgcmV0dXJuIGFq YXhfcmVzcG9uc2UocmVzcG9uc2U9U1FMKQorCisjIFJlZ2lzdGVyIGFuZCBh ZGQgRXh0ZW5zaW9uVmlldyBhcyBibHVlcHJpbnQKK0V4dGVuc2lvblZpZXcu cmVnaXN0ZXJfbm9kZV92aWV3KGJsdWVwcmludCkKZGlmZiAtLWdpdCBhL3dl Yi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFi YXNlcy9leHRlbnNpb25zL3N0YXRpYy9pbWcvY29sbC1leHRlbnNpb24ucG5n IGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL2V4dGVuc2lvbnMvc3RhdGljL2ltZy9jb2xsLWV4dGVuc2lv bi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWVkN2NhOTdhMzNlZjU5 NWY0NDhiODYyMTE2OGQ1MzFmODZkNTFkNQpHSVQgYmluYXJ5IHBhdGNoCmxp dGVyYWwgMTAxNwp6Y21WPFYwfHh3d1ApPGg7M0t8TGswMDBlMU5KTFRxMDAw bUcwMDBtTzB7e1IzQ0BsfEQwMDAwMWI1Y2hfMEl0cCkKej0+UHglX2ZTayFN U154WigjXk4zcD9SJk9kK19ZdSRpYmolVF42Um9yQiNibW4hMV81eH0ySmlV SDl8bT1pJHB7CnpSdD43ZXNaeChya0hNQiZtfGtwfVlrRi1pK1M5cUhvTlRZ Q2Z4XnxvSzdjPkg+Qng3bmVNRWpqZk85dlpuUWd6Zwp6bmFzem8tYHZjLXd3 N0tfMHJCZUF3eVM9Z20xalBDSmVKSSRHaj1uJnZ5cSpYVn5+VlNlUSs/R2t6 THUpdisoS0MKej8mWnB1aSVARD81X283SzVMKnRlPEdkfCRFJlRpVWB9cCR0 X1UhZlc7UGRSKz4qMiFhLU1aJTR2ZzZnTTtMKUw9CnprNTN3NDc5TTNCRFEr bGZzQm8mfHhvRTMhOClGJGpkX0xYR241ZFVtSEVKY0UkKW1+Yih4SzMqdipF cUI9ZmtrJgp6ek42dUBvIV9wSSpQKFg3Zz5rPXRmNzZ4UCRkSWo/U1ZlOXVn U0xwbj4mfStsc0YyI0RpUClXail8aDxNbGg0NDkKem00IXVDUHl9ZEw0VnM4 VXRDdiFIdjRNNWNqZWRQUEN9JHVqWjZ7eE5KQm9jWEJ4NCg7KXZrOE1oZF9A PTVuSy0jCnpXZih0fE8wPVlFRj1ycnp2eG45MyteeUJMVCRmKkFvQFBJZU4w KyNrV1IrdXJjUU1jSipTRi1zVCZybmZsVkZqdwp6a2FLTSVHPW47QCQqXy1x SVRsX00hc3lHRyY3bnx8UkVeMSpEfDt9JCk0dGZtaHJ6NkFJYklaQW5xcXt5 aSpUJVYKekhoVld0VjsmdTE4SSN0ZElFX05wemticlljOVZmTUx0UFg8Wll4 MSZCNVo5T20zfThWWjdGaVBlczlvLVREeCUxCnp3ezZYe1d4JUZYb3JXezVr fl9rck12ezNWTXN6ZXx0IWArfWdKUjVtSGorWG5ZOSgtO1piKlZoQ3gkYzF1 VSpIaAp6Um1HPUd6QFJeaGF2VioxSlkzM25SPipUb3lrO3wrTUxNWmJLKV8r WG9qSEFINW08eXZSO0ZUNSMmMWkrWURMMGsKekpISzZfazR1aHdHbHB8MWkr QykhcGk7SitNflpZSWZAflJ0WjVENF8zMGpGI1I7Z3EqeTsrMktKKkomPSRp dHxLCnpidGJeMVBySX59Iz0paDt6TUB9fFRed20wNT8mRCtZOF5KME1KPG0h NmtgPiZuTCY0SEM+ZCVTUD1gKjRkXyQzWAp6Q29HYVpmVCh8S1NfX3RaQjdV WlFLRCU4T1hjJktMN0orTE84K1JtMGY9QyF7OVQjbUo3VURGRTAwMDAxYlcl PUoKejA2XnkwVyZpKkgwYil4Pkw7IzJkOVlfRUcwMTBxTlMjdG1ZM2xqaFUz bGprVm53JUhfMDAwTWNObGlydStYRVhCCno2Q3AoUmJjcH19MEIlVntLfnh5 aVU2OFIyeiN0MytuUyh0dCEzfmhZXnZHZzQyRkw9YEVFTk5tMHtNITYteTE7 KQp6UXhGYXp2TF9jSypiPF9va0ZnMGQ4SGMjVj1FaGApaCt5Wm1wbGVobmxO WkVkdGdRQGhYMENOZUlXRXB4dyFveU4KbmRjfnRzcDlUbGlkT3pPQyYtKSp8 S0gpM3BEMm5ncjAwMDAwTmt2WFh1MG1qZjxLTlV6CgpsaXRlcmFsIDAKSGNt Vj9kMDAwMDEKCmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3Nl cnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvZXh0ZW5zaW9ucy9zdGF0 aWMvaW1nL2V4dGVuc2lvbi5wbmcgYi93ZWIvcGdhZG1pbi9icm93c2VyL3Nl cnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvZXh0ZW5zaW9ucy9zdGF0 aWMvaW1nL2V4dGVuc2lvbi5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u ZTNjNTMzMzQ3ODgzZmMxZGVjNzNiY2IyMWIzMmZjNTRlM2MzMTczMgpHSVQg YmluYXJ5IHBhdGNoCmxpdGVyYWwgOTk2CnpjbVY8QTB+YEVfUCk8aDszS3xM azAwMGUxTkpMVHEwMDBtRzAwMG1PMHt7UjNDQGx8RDAwMDAxYjVjaF8wSXRw KQp6PT5QeCVgY088JU1RMnpMZl82STYmOXx6ZGQ5OT4tQGEqMm0hSnVuaDdO KXxiUmZ8LWJ4fHpWYm9TS2hhX3cobEcKejttYy1MNFhWVmNRamIpUiFJb04+ VVRtNmNkVGxQKyk0OGFlWV9GKCshcXZoKWZJcSRJJGFrQFFNMURlbWIycC15 CnpaTklwZyUqVT9aK3wwZVVtUj9RKUAjQHlMdEEzdTlYRmh2OG1kdjB0Yn5D IU9rKTR4Y2tjM1dzYTQ/KmFVRD9wSAp6QGFmWC08O3N8Z1AtPEhlY3hXTElU TW4re3llKURxe1FMTCZgMTFNbz9EZz5BXlglRXs7bGsrTXk1YHhrPEpHQykK eihWP0peUGEwcXI5JVVSVVpZWEp9YUhgfEVYc2Q3PVY7TWt2S0hiY2lzRnpu WVk5KmVAcXNpXmtxMHArYztrfiEjCnohPzVNUHF2NWxpLT4jNj9wPzFOQWFs ZTNuKTBOdURrZ2J8bk1RJHZFd3VyOykmWChQJWtsTGUoKnF3c2JuMChaZQp6 JiVscUJnKyozUzFaWT9kbnV0VEltcntHTmZweVoyZXRrTTlYQ05xVEN0cjl3 aWhWT0FWO2lOX3U2RChUSyN4Y2YKelRuYHYhNyhiT3R3NGBiPVhDUT5MaHQ9 YGl0PHwoI210U0Y/VzxRUWNtJDtUPm0xQlo7RzAqU1V4OCVXR3Q3JjRCCnpW M0QrdGI4Ukl3Z0YzTHV1I2JOXjdHNHY9PSp5VlJwLV9Aa2ptZW9TZG9hRyF6 U3pXdiFLYFVIVUtDIU1WdVpTagp6YUlBSlZkcEF5Rjl2eHlDbGgmZytqWThH R2UkdTtrbFl1b3VUQCppVkQ/dyk+WTs3RXNla1ZDP0RSUjFnWl90UVoKenlL djk5Wk95WX56QH04NGhCS3tfSkhuKCFsNmZMVmJUbmhGWmZNU2ZWJDZMdWww cWhHQzIqWj9OUDxUdmhCTH5xCnpVQnwwYyNpdmNjcGcpUm85OEcjV1QqYFA+ JGE2fShXOzI+YUk7bH1Xeit0fGZJZWxqbFNjRlNmcmVhWFdaJWYyIwp6TVoj dH56Zz9rXk9PQVVwaEkxKjRjcjNWfVFuczgmaWdZMUBZI0RAWTdIP2IkVDhV Q3RzYm5fMlMlaTIhcmshKWgKeiE+RWFNQ2N2YW15Uj8oVyFLSzgkcUY8Mys5 QkNhQVVKKTg8OVg2TG1Fc3MxRFYtPlpUTDNlMj04RVA5KWhmYXVtCnpMeT53 WEVSc0Vkc0RFbygzem1FJGV4YGpzeUltRyY3PUxPT2ZvbH5UY08qJUlORW1K JTdpfUJ8WVJuMSUwMDA0Vwp6UWNoQzxLPDN6SDAwMDAxVm9PSXYwRWgpME5C e3I7MzI7YlJhe3ZHZjY5NTFVNjlFOTRvRVFLQTAwKHFRTyteUlcKejB+LXhH NCEmSEJGOH19bFIhS3hiUjJiN15VPzNqMnhTO1Z2TFhidHdUen4+MFc9UWhW QSl5SF9Ga0x7fTE7aHVrCnpwYUtDUUt6QD03c2B7aTk3aTBAdmwyVFM4dzFD Nz9SJkc3eTspMU5tPDxPWmtDe0EtaDw2fUE8Q2piRGFQOHFEZQpTUl80ZTYw MDAwPE1OVU1uTFNUYVgtXkwzNwoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpk aWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBz L3NlcnZlcnMvZGF0YWJhc2VzL2V4dGVuc2lvbnMvdGVtcGxhdGVzL2V4dGVu c2lvbnMvanMvZXh0ZW5zaW9ucy5qcyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIv c2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9leHRlbnNpb25zL3Rl bXBsYXRlcy9leHRlbnNpb25zL2pzL2V4dGVuc2lvbnMuanMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0MzE0ZQotLS0gL2Rldi9u dWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9z ZXJ2ZXJzL2RhdGFiYXNlcy9leHRlbnNpb25zL3RlbXBsYXRlcy9leHRlbnNp b25zL2pzL2V4dGVuc2lvbnMuanMKQEAgLTAsMCArMSwyMjggQEAKK2RlZmlu ZSgKKyAgICAgIFsnanF1ZXJ5JywgJ3VuZGVyc2NvcmUnLCAndW5kZXJzY29y ZS5zdHJpbmcnLCAncGdhZG1pbicsICdwZ2FkbWluLmJyb3dzZXInLCAncGdh ZG1pbi5icm93c2VyLmNvbGxlY3Rpb24nXSwKK2Z1bmN0aW9uKCQsIF8sIFMs IHBnQWRtaW4sIHBnQnJvd3NlcikgeworCisgIC8qCisgICAqIENyZWF0ZSBh bmQgQWRkIGFuIEV4dGVuc2lvbiBDb2xsZWN0aW9uIGludG8gbm9kZXMKKyAg ICogUGFyYW1zOgorICAgKiAgIGxhYmVsIC0gTGFiZWwgZm9yIE5vZGUKKyAg ICogICB0eXBlIC0gVHlwZSBvZiBOb2RlCisgICAqICAgY29sdW1ucyAtIExp c3Qgb2YgY29sdW1ucyB0byBzaG93IHVuZGVyIHVuZGVyIHByb3BlcnRpZXMu CisgICovCisgIGlmICghcGdCcm93c2VyLk5vZGVzWydjb2xsLWV4dGVuc2lv biddKSB7CisgICAgdmFyIGV4dGVuc2lvbnMgPSBwZ0FkbWluLkJyb3dzZXIu Tm9kZXNbJ2NvbGwtZXh0ZW5zaW9uJ10gPQorICAgICAgcGdBZG1pbi5Ccm93 c2VyLkNvbGxlY3Rpb24uZXh0ZW5kKHsKKyAgICAgICAgbm9kZTogJ2V4dGVu c2lvbicsCisgICAgICAgIGxhYmVsOiAne3sgXygnRXh0ZW5zaW9uJykgfX0n LAorICAgICAgICB0eXBlOiAnY29sbC1leHRlbnNpb24nLAorICAgICAgICBj b2x1bW5zOiBbJ25hbWUnLCAnb3duZXInLCAnY29tbWVudCddCisgICAgICB9 KTsKKyAgfTsKKworICAvKgorICAgKiBDcmVhdGUgYW5kIEFkZCBhbiBFeHRl bnNpb24gTm9kZSBpbnRvIG5vZGVzCisgICAqIFBhcmFtczoKKyAgICogICBw YXJlbnRfdHlwZSAtIE5hbWUgb2YgcGFyZW50IE5vZGUKKyAgICogICB0eXBl IC0gVHlwZSBvZiBOb2RlCisgICAqICAgaGFzU1FMIC0gVHJ1ZSBpZiB3ZSBu ZWVkIHRvIHNob3cgU1FMIHF1ZXJ5IFRhYiBjb250cm9sLCBvdGhlcndpc2Ug RmFsc2UKKyAgICogICBjYW5Ecm9wIC0gVHJ1ZSB0byBzaG93ICJEcm9wIEV4 dGVuc2lvbiIgbGluayB1bmRlciBDb250ZXh0IG1lbnUsCisgICAqICAgIG90 aGVyd2lzZSBGYWxzZQorICAgKiAgIGNhbkRyb3BDYXNjYWRlIC0gVHJ1ZSB0 byBzaG93ICJEcm9wIENhc2NhZGUiIGxpbmsgdW5kZXIgQ29udGV4dCBtZW51 LAorICAgKiAgICBvdGhlcndpc2UgRmFsc2UKKyAgICogICBjb2x1bW5zIC0g TGlzdCBvZiBjb2x1bW5zIHRvIHNob3cgdW5kZXIgdW5kZXIgcHJvcGVydGll cyB0YWIuCisgICAqICAgbGFiZWwgLSBMYWJlbCBmb3IgTm9kZQorICAqLwor ICBpZiAoIXBnQnJvd3Nlci5Ob2Rlc1snZXh0ZW5zaW9uJ10pIHsKKyAgICBw Z0FkbWluLkJyb3dzZXIuTm9kZXNbJ2V4dGVuc2lvbiddID0KKyAgICBwZ0Fk bWluLkJyb3dzZXIuTm9kZS5leHRlbmQoeworICAgICAgcGFyZW50X3R5cGU6 ICdkYXRhYmFzZScsCisgICAgICB0eXBlOiAnZXh0ZW5zaW9uJywKKyAgICAg IGhhc1NRTDogdHJ1ZSwKKyAgICAgIGNhbkRyb3A6IHRydWUsCisgICAgICBj YW5Ecm9wQ2FzY2FkZTogdHJ1ZSwKKyAgICAgIGxhYmVsOiAne3sgXygnRXh0 ZW5zaW9uJykgfX0nLAorCisgICAgICBJbml0OiBmdW5jdGlvbigpeworICAg ICAgICBpZih0aGlzLmluaXRpYWxpemVkKQorICAgICAgICAgIHJldHVybjsK KworICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICAgICAg Ly8gQWRkICJjcmVhdGUgZXh0ZW5zaW9uIiBtZW51IGl0ZW0gaW50byBjb250 ZXh0IGFuZCBvYmplY3QgbWVudQorICAgICAgICAvLyBmb3IgdGhlIGZvbGxv d2luZyBub2RlczoKKyAgICAgICAgLy8gY29sbC1leHRlbnNpb24sIGV4dGVu c2lvbiBhbmQgZGF0YWJhc2UuCisgICAgICAgIHBnQnJvd3Nlci5hZGRfbWVu dXMoW3sKKyAgICAgICAgICBuYW1lOiAnY3JlYXRlX2V4dGVuc2lvbl9vbl9j b2xsJywgbm9kZTogJ2NvbGwtZXh0ZW5zaW9uJywgbW9kdWxlOiB0aGlzLAor ICAgICAgICAgIGFwcGxpZXM6IFsnb2JqZWN0JywgJ2NvbnRleHQnXSwgY2Fs bGJhY2s6ICdzaG93X29ial9wcm9wZXJ0aWVzJywKKyAgICAgICAgICBjYXRl Z29yeTogJ2NyZWF0ZScsIHByaW9yaXR5OiA0LCBsYWJlbDogJ3t7IF8oJ0V4 dGVuc2lvbi4uLicpIH19JywKKyAgICAgICAgICBpY29uOiAnd2NUYWJJY29u IGljb24tZXh0ZW5zaW9uJywgZGF0YToge2FjdGlvbjogJ2NyZWF0ZSd9Cisg ICAgICAgIH0seworICAgICAgICAgIG5hbWU6ICdjcmVhdGVfZXh0ZW5zaW9u Jywgbm9kZTogJ2V4dGVuc2lvbicsIG1vZHVsZTogdGhpcywKKyAgICAgICAg ICBhcHBsaWVzOiBbJ29iamVjdCcsICdjb250ZXh0J10sIGNhbGxiYWNrOiAn c2hvd19vYmpfcHJvcGVydGllcycsCisgICAgICAgICAgY2F0ZWdvcnk6ICdj cmVhdGUnLCBwcmlvcml0eTogNCwgbGFiZWw6ICd7eyBfKCdFeHRlbnNpb24u Li4nKSB9fScsCisgICAgICAgICAgaWNvbjogJ3djVGFiSWNvbiBpY29uLWV4 dGVuc2lvbicsIGRhdGE6IHthY3Rpb246ICdjcmVhdGUnfQorICAgICAgICB9 LHsKKyAgICAgICAgICBuYW1lOiAnY3JlYXRlX2V4dGVuc2lvbicsIG5vZGU6 ICdkYXRhYmFzZScsIG1vZHVsZTogdGhpcywKKyAgICAgICAgICBhcHBsaWVz OiBbJ29iamVjdCcsICdjb250ZXh0J10sIGNhbGxiYWNrOiAnc2hvd19vYmpf cHJvcGVydGllcycsCisgICAgICAgICAgY2F0ZWdvcnk6ICdjcmVhdGUnLCBw cmlvcml0eTogNCwgbGFiZWw6ICd7eyBfKCdFeHRlbnNpb24uLi4nKSB9fScs CisgICAgICAgICAgaWNvbjogJ3djVGFiSWNvbiBpY29uLWV4dGVuc2lvbics IGRhdGE6IHthY3Rpb246ICdjcmVhdGUnfQorICAgICAgICB9CisgICAgICAg IF0pOworICAgICAgfSwKKyAgICAgIC8vIERlZmluZSBtb2RlbCBmb3IgdGhl IE5vZGUgYW5kIHNwZWNpZnkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIG1vZGVs IGluIHNjaGVtYS4KKyAgICAgIG1vZGVsOiBwZ0FkbWluLkJyb3dzZXIuTm9k ZS5Nb2RlbC5leHRlbmQoeworICAgICAgICBzY2hlbWE6IFsKKyAgICAgICAg ICB7CisgICAgICAgICAgICBpZDogJ25hbWUnLCBsYWJlbDogJ3t7IF8oJ05h bWUnKX19JywgZmlyc3RfZW1wdHk6IHRydWUsCisgICAgICAgICAgICB0eXBl OiAndGV4dCcsIG1vZGU6IFsncHJvcGVydGllcycsICdjcmVhdGUnLCAnZWRp dCddLAorICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSwgdXJsOidhdmFpbHMn LCBkaXNhYmxlZDogZnVuY3Rpb24obSkgeworICAgICAgICAgICAgICByZXR1 cm4gIW0uaXNOZXcoKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICB0 cmFuc2Zvcm06IGZ1bmN0aW9uKGRhdGEpIHsKKyAgICAgICAgICAgICAgdmFy IHJlcyA9IFtdOworICAgICAgICAgICAgICB2YXIgbGFiZWwgPSB0aGlzLm1v ZGVsLmdldCgnbmFtZScpOworICAgICAgICAgICAgICBpZiAoIXRoaXMubW9k ZWwuaXNOZXcoKSl7CisgICAgICAgICAgICAgICAgcmVzLnB1c2goe2xhYmVs OiBsYWJlbCwgdmFsdWU6IGxhYmVsfSk7CisgICAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgaWYgKGRhdGEgJiYgXy5pc0FycmF5KGRh dGEpKSB7CisgICAgICAgICAgICAgICAgICBfLmVhY2goZGF0YSwgZnVuY3Rp b24oZCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoZC5pbnN0YWxsZWRf dmVyc2lvbiA9PT0gbnVsbCkKKyAgICAgICAgICAgICAgICAgICAgICAvKiBk IGNvbnRhaW5zIGpzb24gZGF0YSBhbmQgc2V0cyBpbnRvCisgICAgICAgICAg ICAgICAgICAgICAgKiBzZWxlY3QncyBvcHRpb24gY29udHJvbAorICAgICAg ICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICAqIFdl IG5lZWQgdG8gc3RyaW5naWZ5IGRhdGEgYmVjYXVzZSBmb3JtYXR0ZXIgd2ls bAorICAgICAgICAgICAgICAgICAgICAgICogY29udmVydCBBcnJheSBPYmpl Y3QgYXMgW09iamVjdF0gc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgICAgICAgICAgICByZXMucHVzaCh7bGFiZWw6IGQu bmFtZSwgdmFsdWU6IEpTT04uc3RyaW5naWZ5KGQpfSk7CisgICAgICAgICAg ICAgICAgICB9KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICByZXR1cm4gcmVzOworICAgICAgICAgICAgfSwK KyAgICAgICAgICAgIC8qIGV4dGVuZHMgTm9kZUFqYXhPcHRpb25zQ29udHJv bCB0byBvdmVycmlkZSB0aGUgcHJvcGVydGllcworICAgICAgICAgICAgKiBn ZXRWYWx1ZUZyb21ET00gd2hpY2ggdGFrZXMgc3RyaW5naWZpZWQgZGF0YSBm cm9tIG9wdGlvbiBvZgorICAgICAgICAgICAgKiBzZWxlY3QgY29udHJvbCBh bmQgcGFyc2UgaXQuIEFuZCBgb25DaGFuZ2VgIHRha2VzIHRoZSBzdHJpbmdp ZmllZAorICAgICAgICAgICAgKiBkYXRhIGZyb20gc2VsZWN0J3Mgb3B0aW9u LCB0aHVzIGNvbnZlcnQgaXQgdG8ganNvbiBmb3JtYXQgYW5kIHNldCB0aGUK KyAgICAgICAgICAgICogZGF0YSBpbnRvIE1vZGVsIHdoaWNoIGlzIHVzZWQg dG8gZW5hYmxlL2Rpc2FibGUgdGhlIHNjaGVtYSBmaWVsZC4KKyAgICAgICAg ICAgICovCisgICAgICAgICAgICBjb250cm9sOiBCYWNrZm9ybS5Ob2RlQWph eE9wdGlvbnNDb250cm9sLmV4dGVuZCh7CisgICAgICAgICAgICAgIGdldFZh bHVlRnJvbURPTTogZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgdmFy IGRhdGEgPSB0aGlzLmZvcm1hdHRlci50b1JhdyhfLnVuZXNjYXBlKHRoaXMu JGVsLmZpbmQoInNlbGVjdCIpLnZhbCgpKSwgdGhpcy5tb2RlbCk7CisgICAg ICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiByZXR1cm4gbnVs bCBpZiBkYXRhIGlzIGVtcHR5IHRvIHByZXZlbnQgaXQgZnJvbQorICAgICAg ICAgICAgICAgICAqIHRocm93aW5nIHBhcnNpbmcgZXJyb3IuIEFkZHMgY2hl Y2sgYXMgbmFtZSBjYW4gYmUgZW1wdHkKKyAgICAgICAgICAgICAgICAqLwor ICAgICAgICAgICAgICAgIGlmIChkYXRhID09PSAnJyl7CisgICAgICAgICAg ICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mKGRhdGEpID09PSAnc3RyaW5n JykgeworICAgICAgICAgICAgICAgICAgZGF0YT1KU09OLnBhcnNlKGRhdGEp OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4g ZGF0YS5uYW1lOworICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAv KgorICAgICAgICAgICAgICAgKiBXaGVuIG5hbWUgaXMgY2hhbmdlZCwgZXh0 cmFjdCB2YWx1ZSBmcm9tIGl0cyBzZWxlY3Qgb3B0aW9uIGFuZAorICAgICAg ICAgICAgICAgKiBzZXQgYXR0cmlidXRlcyB2YWx1ZXMgaW50byB0aGUgbW9k ZWwKKyAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgb25DaGFuZ2U6 IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgIEJhY2tmb3JtLk5vZGVB amF4T3B0aW9uc0NvbnRyb2wucHJvdG90eXBlLm9uQ2hhbmdlLmFwcGx5KHRo aXMsIGFyZ3VtZW50cyk7CisgICAgICAgICAgICAgICAgdmFyIHNlbGVjdGVk VmFsdWUgPSB0aGlzLiRlbC5maW5kKCJzZWxlY3QiKS52YWwoKTsKKyAgICAg ICAgICAgICAgICBpZiAoc2VsZWN0ZWRWYWx1ZS50cmltKCkgIT0gIiIpewor ICAgICAgICAgICAgICAgICAgdmFyIGQgPSB0aGlzLmZvcm1hdHRlci50b1Jh dyhzZWxlY3RlZFZhbHVlLCB0aGlzLm1vZGVsKTsKKyAgICAgICAgICAgICAg ICAgIGlmKHR5cGVvZihkKSA9PT0gJ3N0cmluZycpCisgICAgICAgICAgICAg ICAgICAgIGQ9SlNPTi5wYXJzZShkKTsKKyAgICAgICAgICAgICAgICAgIHZh ciBjaGFuZ2VzID0geworICAgICAgICAgICAgICAgICAgICAndmVyc2lvbicg OiAnJywKKyAgICAgICAgICAgICAgICAgICAgJ3JlbG9jYXRhYmxlJzogKCgh Xy5pc051bGwoZC5yZWxvY2F0YWJsZVswXSkgJiYgIV8uaXNVbmRlZmluZWQo ZC5yZWxvY2F0YWJsZVswXSkpID8gZC5yZWxvY2F0YWJsZVswXTogJycpLAor ICAgICAgICAgICAgICAgICAgICAnc2NoZW1hJzogKCghXy5pc051bGwoZC5z Y2hlbWFbMF0pICYmICFfLmlzVW5kZWZpbmVkKGQuc2NoZW1hWzBdKSkgPyBk LnNjaGVtYVswXTogJycpCisgICAgICAgICAgICAgICAgICAgIH07CisgICAg ICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNldChjaGFuZ2VzKTsKKyAgICAg ICAgICAgICAgICB9ZWxzZXsKKyAgICAgICAgICAgICAgICAgIHZhciBjaGFu Z2VzID0geyd2ZXJzaW9uJzogJycsICdyZWxvY2F0YWJsZSc6IHRydWUsICdz Y2hlbWEnOiAnJ307CisgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNl dChjaGFuZ2VzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg IH0sCisgICAgICAgICAgICB9KQorICAgICAgICAgIH0seworICAgICAgICAg ICAgaWQ6ICdlaWQnLCBsYWJlbDogJ3t7IF8oJ09pZCcpfX0nLCBjZWxsOiAn c3RyaW5nJywKKyAgICAgICAgICAgIHR5cGU6ICd0ZXh0JywgZGlzYWJsZWQ6 IHRydWUsIG1vZGU6IFsncHJvcGVydGllcycsICdlZGl0JywgJ2NyZWF0ZSdd CisgICAgICAgICAgfSx7CisgICAgICAgICAgICBpZDogJ293bmVyJywgbGFi ZWw6J3t7IF8oJ093bmVyJykgfX0nLCBjb250cm9sOiAnbm9kZS1saXN0LWJ5 LW5hbWUnLAorICAgICAgICAgICAgbW9kZTogWydwcm9wZXJ0aWVzJ10sIG5v ZGU6ICdyb2xlJywgY2VsbDogJ3N0cmluZycKKyAgICAgICAgICB9LHsKKyAg ICAgICAgICAgIGlkOiAnc2NoZW1hJywgbGFiZWw6ICd7eyBfKCdTY2hlbWEn KX19JywgdHlwZTogJ3RleHQnLCBjb250cm9sOiAnbm9kZS1hamF4LW9wdGlv bnMnLAorICAgICAgICAgICAgbW9kZTogWydwcm9wZXJ0aWVzJywgJ2NyZWF0 ZScsICdlZGl0J10sIGdyb3VwOiAnRGVmaW5pdGlvbicsIGRlcHM6IFsncmVs b2NhdGFibGUnXSwKKyAgICAgICAgICAgIHVybDogJ3NjaGVtYXMnLCBmaXJz dF9lbXB0eTogdHJ1ZSwgZGlzYWJsZWQ6IGZ1bmN0aW9uKG0pIHsKKyAgICAg ICAgICAgICAgLyogZW5hYmxlIG9yIGRpc2FibGUgc2NoZW1hIGZpZWxkIGlm IG1vZGVsJ3MgcmVsb2NhdGFibGUKKyAgICAgICAgICAgICAgKiBhdHRyaWJ1 dGUgaXMgVHJ1ZSBvciBGYWxzZQorICAgICAgICAgICAgICAqLworICAgICAg ICAgICAgICByZXR1cm4gKG0uaGFzKCdyZWxvY2F0YWJsZScpID8gIW0uZ2V0 KCdyZWxvY2F0YWJsZScpIDogZmFsc2UpOworICAgICAgICAgICAgfSwKKyAg ICAgICAgICAgIHRyYW5zZm9ybTogZnVuY3Rpb24oZGF0YSkgeworICAgICAg ICAgICAgICB2YXIgcmVzID0gW107CisgICAgICAgICAgICAgIGlmIChkYXRh ICYmIF8uaXNBcnJheShkYXRhKSkgeworICAgICAgICAgICAgICAgIF8uZWFj aChkYXRhLCBmdW5jdGlvbihkKSB7CisgICAgICAgICAgICAgICAgICByZXMu cHVzaCh7bGFiZWw6IGQuc2NoZW1hLCB2YWx1ZTogZC5zY2hlbWF9KTsKKyAg ICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgIHJldHVybiByZXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwK KyAgICAgICAgICB7CisgICAgICAgICAgICBpZDogJ3JlbG9jYXRhYmxlJywg bGFiZWw6ICd7eyBfKCdSZWxvY2F0YWJsZT8nKX19JywgY2VsbDogJ3N3aXRj aCcsCisgICAgICAgICAgICB0eXBlOiAnc3dpdGNoJywgbW9kZTogWydwcm9w ZXJ0aWVzJ10sICdvcHRpb25zJzogeworICAgICAgICAgICAgICAnb25UZXh0 JzogJ1llcycsICdvZmZUZXh0JzogJ05vJywgJ29uQ29sb3InOiAnc3VjY2Vz cycsCisgICAgICAgICAgICAgICdvZmZDb2xvcic6ICdkZWZhdWx0JywgJ3Np emUnOiAnc21hbGwnCisgICAgICAgICAgICB9CisgICAgICAgICAgfSwKKyAg ICAgICAgICB7CisgICAgICAgICAgICBpZDogJ3ZlcnNpb24nLCBsYWJlbDog J3t7IF8oJ1ZlcnNpb24nKX19JywgY2VsbDogJ3N0cmluZycsCisgICAgICAg ICAgICBtb2RlOiBbJ3Byb3BlcnRpZXMnLCAnY3JlYXRlJywgJ2VkaXQnXSwg Z3JvdXA6ICdEZWZpbml0aW9uJywKKyAgICAgICAgICAgIGNvbnRyb2w6ICdu b2RlLWFqYXgtb3B0aW9ucycsIHVybDonYXZhaWxzJywgZmlyc3RfZW1wdHk6 IHRydWUsCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgKiBUcmFuc2Zv cm0gdGhlIGRhdGEgaW50byB2ZXJzaW9uIGZvciB0aGUgc2VsZWN0ZWQgZXh0 ZW5zaW9uLgorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHRyYW5zZm9y bTogZnVuY3Rpb24oZGF0YSkgeworICAgICAgICAgICAgICByZXMgPSBbXTsK KyAgICAgICAgICAgICAgdmFyIGV4dGVuc2lvbiA9IHRoaXMubW9kZWwuZ2V0 KCduYW1lJyk7CisgICAgICAgICAgICAgIF8uZWFjaChkYXRhLCBmdW5jdGlv bihkdCl7CisgICAgICAgICAgICAgICAgaWYoZHQubmFtZSA9PSBleHRlbnNp b24peworICAgICAgICAgICAgICAgICAgaWYoZHQudmVyc2lvbiAmJiBfLmlz QXJyYXkoZHQudmVyc2lvbikpeworICAgICAgICAgICAgICAgICAgICBfLmVh Y2goZHQudmVyc2lvbiwgZnVuY3Rpb24odil7CisgICAgICAgICAgICAgICAg ICAgICAgcmVzLnB1c2goeyBsYWJlbDogdiwgdmFsdWU6IHYgfSk7CisgICAg ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg ICAgIHJldHVybiByZXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgfSwK KyAgICAgICAgICB7CisgICAgICAgICAgICBpZDogJ2NvbW1lbnQnLCBsYWJl bDogJ3t7IF8oJ0NvbW1lbnQnKX19JywgY2VsbDogJ3N0cmluZycsCisgICAg ICAgICAgICB0eXBlOiAnbXVsdGlsaW5lJywgZGlzYWJsZWQ6IHRydWUKKyAg ICAgICAgICB9CisgICAgICAgIF0sCisgICAgICAgIHZhbGlkYXRlOiBmdW5j dGlvbigpIHsKKyAgICAgICAgICAvKgorICAgICAgICAgICogVHJpZ2dlcnMg ZXJyb3IgbWVzc2FnZXMgZm9yIG5hbWUKKyAgICAgICAgICAqIGlmIGl0IGlz IGVtcHR5L3VuZGVmaW5lZC9udWxsCisgICAgICAgICAgKi8KKyAgICAgICAg ICB2YXIgZXJyID0ge30sCisgICAgICAgICAgICBlcnJtc2csCisgICAgICAg ICAgICBuYW1lID0gdGhpcy5nZXQoJ25hbWUnKTsKKyAgICAgICAgICBpZiAo Xy5pc1VuZGVmaW5lZChuYW1lKSB8fCBfLmlzTnVsbChuYW1lKSB8fAorICAg ICAgICAgICAgU3RyaW5nKG5hbWUpLnJlcGxhY2UoL15ccyt8XHMrJC9nLCAn JykgPT0gJycpIHsKKyAgICAgICAgICAgIGVyclsnbmFtZSddID0gJ3t7IF8o J05hbWUgY2FuIG5vdCBiZSBlbXB0eSEnKSB9fSc7CisgICAgICAgICAgICBl cnJtc2cgPSBlcnJtc2cgfHwgZXJyWyduYW1lJ107CisgICAgICAgICAgICB0 aGlzLmVycm9yTW9kZWwuc2V0KCduYW1lJywgZXJybXNnKTsKKyAgICAgICAg ICAgIHJldHVybiBlcnJtc2c7CisgICAgICAgICAgfWVsc2V7CisgICAgICAg ICAgICB0aGlzLmVycm9yTW9kZWwudW5zZXQoJ25hbWUnKTsKKyAgICAgICAg ICB9CisgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAgICAg IH0pCisgICAgfSkKKyAgfTsKKworICByZXR1cm4gcGdCcm93c2VyLk5vZGVz Wydjb2xsLWV4dGVuc2lvbiddOworfSk7CmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMv ZXh0ZW5zaW9ucy90ZW1wbGF0ZXMvZXh0ZW5zaW9ucy9zcWwvY3JlYXRlLnNx bCBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJz L2RhdGFiYXNlcy9leHRlbnNpb25zL3RlbXBsYXRlcy9leHRlbnNpb25zL3Nx bC9jcmVhdGUuc3FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLjI4OGE3Y2MKLS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvZXh0ZW5z aW9ucy90ZW1wbGF0ZXMvZXh0ZW5zaW9ucy9zcWwvY3JlYXRlLnNxbApAQCAt MCwwICsxLDE5IEBACit7Iz09PT09PT09PT09PT09PT09PT09PT09PT1DcmVh dGUgbmV3IGV4dGVuc2lvbj09PT09PT09PT09PT09PT09PT09PT0jfQoreyM9 PT1HZW5lcmF0ZXMgY29tbWVudHMgYW5kIGNvZGUgZm9yIFNRTCB0YWI9PT0j fQoreyUgaWYgZGlzcGxheV9jb21tZW50cyAlfQorLS0gRXh0ZW5zaW9uOiB7 eyBjb25ufHF0SWRlbnQoZGF0YS5uYW1lKSB9fQorCistLSBEUk9QIEVYVEVO U0lPTiB7eyBjb25ufHF0SWRlbnQoZGF0YS5uYW1lKSB9fTsKKworeyUgZW5k aWYgJX0KK3slIGlmIGRhdGEubmFtZSAlfQorIENSRUFURSBFWFRFTlNJT04g e3sgY29ubnxxdElkZW50KGRhdGEubmFtZSkgfX17JSBpZiBkYXRhLnNjaGVt YSA9PSAnJyBhbmQgZGF0YS52ZXJzaW9uID09ICcnICV9O3slIGVuZGlmICV9 Cit7JSBpZiBkYXRhLnNjaGVtYSAlfQorCisgICAgU0NIRU1BIHt7IGNvbm58 cXRJZGVudChkYXRhLnNjaGVtYSkgfX17JSBpZiBkYXRhLnZlcnNpb24gPT0g JycgJX07eyUgZW5kaWYgJX0KK3slIGVuZGlmICV9Cit7JSBpZiBkYXRhLnZl cnNpb24gJX0KKworICAgIFZFUlNJT04ge3sgY29ubnxxdElkZW50KGRhdGEu dmVyc2lvbikgfX07Cit7JSBlbmRpZiAlfQoreyUgZW5kaWYgJX0KZGlmZiAt LWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2 ZXJzL2RhdGFiYXNlcy9leHRlbnNpb25zL3RlbXBsYXRlcy9leHRlbnNpb25z L3NxbC9kZWxldGUuc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL2V4dGVuc2lvbnMvdGVtcGxhdGVz L2V4dGVuc2lvbnMvc3FsL2RlbGV0ZS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMC4uNDQxNTVmNgotLS0gL2Rldi9udWxsCisrKyBi L3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2Rh dGFiYXNlcy9leHRlbnNpb25zL3RlbXBsYXRlcy9leHRlbnNpb25zL3NxbC9k ZWxldGUuc3FsCkBAIC0wLDAgKzEsOCBAQAoreyM9PT09PT09PT09PT09PT09 PT09PT09PT09PT09RHJvcC9DYXNjYWRlIEV4dGVuc2lvbiBieSBuYW1lPT09 PT09PT09PT09PT09PT09PT09PT09PSN9Cit7JSBpZiBlaWQgJX0KK1NFTEVD VCB4LmV4dG5hbWUgZnJvbSBwZ19leHRlbnNpb24geAorICAgIFdIRVJFIHgu b2lkID0ge3sgZWlkIH19OjppbnQKK3slIGVuZGlmICV9Cit7JSBpZiBuYW1l ICV9CitEUk9QIEVYVEVOU0lPTiB7eyBjb25ufHF0SWRlbnQobmFtZSkgfX0g eyUgaWYgY2FzY2FkZSAlfSBDQVNDQURFIHslIGVuZGlmICV9Cit7JSBlbmRp ZiAlfQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL2V4dGVuc2lvbnMvdGVtcGxhdGVz L2V4dGVuc2lvbnMvc3FsL2V4dGVuc2lvbnMuc3FsIGIvd2ViL3BnYWRtaW4v YnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL2V4dGVu c2lvbnMvdGVtcGxhdGVzL2V4dGVuc2lvbnMvc3FsL2V4dGVuc2lvbnMuc3Fs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmMzk3OWQK LS0tIC9kZXYvbnVsbAorKysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZl cl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvZXh0ZW5zaW9ucy90ZW1wbGF0 ZXMvZXh0ZW5zaW9ucy9zcWwvZXh0ZW5zaW9ucy5zcWwKQEAgLTAsMCArMSwx MiBAQAoreyMgPT09PT09PT09PT09PT09PT09PT09PUZldGNoIGV4dGVuc2lv bnMgbmFtZXM9PT09PT09PT09PT09PT09PT09PT0jfQorU0VMRUNUCisgICAg YS5uYW1lLCBhLmluc3RhbGxlZF92ZXJzaW9uLAorICAgIGFycmF5X2FnZyhh di52ZXJzaW9uKSBhcyB2ZXJzaW9uLAorICAgIGFycmF5X2FnZyhhdi5zY2hl bWEpIGFzIHNjaGVtYSwKKyAgICBhcnJheV9hZ2coYXYuc3VwZXJ1c2VyKSBh cyBzdXBlcnVzZXIsCisgICAgYXJyYXlfYWdnKGF2LnJlbG9jYXRhYmxlKSBh cyByZWxvY2F0YWJsZQorRlJPTQorICAgIHBnX2F2YWlsYWJsZV9leHRlbnNp b25zIGEKKyAgICBMRUZUIEpPSU4gcGdfYXZhaWxhYmxlX2V4dGVuc2lvbl92 ZXJzaW9ucyBhdiBPTiAoYS5uYW1lID0gYXYubmFtZSkKK0dST1VQIEJZIGEu bmFtZSwgYS5pbnN0YWxsZWRfdmVyc2lvbgorT1JERVIgQlkgYS5uYW1lCmRp ZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMv c2VydmVycy9kYXRhYmFzZXMvZXh0ZW5zaW9ucy90ZW1wbGF0ZXMvZXh0ZW5z aW9ucy9zcWwvcHJvcGVydGllcy5zcWwgYi93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvZXh0ZW5zaW9ucy90 ZW1wbGF0ZXMvZXh0ZW5zaW9ucy9zcWwvcHJvcGVydGllcy5zcWwKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjY1MjY3NgotLS0gL2Rl di9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy9leHRlbnNpb25zL3RlbXBsYXRlcy9leHRl bnNpb25zL3NxbC9wcm9wZXJ0aWVzLnNxbApAQCAtMCwwICsxLDE3IEBACit7 Iz09PT09PT09PT09PT09PT09PT1GZXRjaCBwcm9wZXJ0aWVzIG9mIGVhY2gg ZXh0ZW5zaW9uIGJ5IG5hbWUgb3Igb2lkPT09PT09PT09PT09PT09PT09PSN9 CitTRUxFQ1QKKyAgICB4Lm9pZCBBUyBlaWQsIHBnX2dldF91c2VyYnlpZChl eHRvd25lcikgQVMgb3duZXIsCisgICAgeC5leHRuYW1lIEFTIG5hbWUsIG4u bnNwbmFtZSBBUyBzY2hlbWEsCisgICAgeC5leHRyZWxvY2F0YWJsZSBBUyBy ZWxvY2F0YWJsZSwgeC5leHR2ZXJzaW9uIEFTIHZlcnNpb24sCisgICAgZS5j b21tZW50CitGUk9NCisgICAgcGdfZXh0ZW5zaW9uIHgKKyAgICBMRUZUIEpP SU4gcGdfbmFtZXNwYWNlIG4gT04geC5leHRuYW1lc3BhY2U9bi5vaWQKKyAg ICBKT0lOIHBnX2F2YWlsYWJsZV9leHRlbnNpb25zKCkgZShuYW1lLCBkZWZh dWx0X3ZlcnNpb24sIGNvbW1lbnQpIE9OIHguZXh0bmFtZT1lLm5hbWUKK3sl LSBpZiBlaWQgJX0KKyBXSEVSRSB4Lm9pZCA9IHt7ZWlkfX06OmludAoreyUg ZWxpZiBlbmFtZSAlfQorIFdIRVJFIHguZXh0bmFtZSA9IHt7ZW5hbWV8cXRM aXRlcmFsfX06OnRleHQKK3slIGVsc2UgJX0KKyBPUkRFUiBCWSB4LmV4dG5h bWUKK3slIGVuZGlmICV9CmRpZmYgLS1naXQgYS93ZWIvcGdhZG1pbi9icm93 c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvZXh0ZW5zaW9u cy90ZW1wbGF0ZXMvZXh0ZW5zaW9ucy9zcWwvc2NoZW1hcy5zcWwgYi93ZWIv cGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFz ZXMvZXh0ZW5zaW9ucy90ZW1wbGF0ZXMvZXh0ZW5zaW9ucy9zcWwvc2NoZW1h cy5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhl M2M5NwotLS0gL2Rldi9udWxsCisrKyBiL3dlYi9wZ2FkbWluL2Jyb3dzZXIv c2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9leHRlbnNpb25zL3Rl bXBsYXRlcy9leHRlbnNpb25zL3NxbC9zY2hlbWFzLnNxbApAQCAtMCwwICsx LDMgQEAKK3sjPT09PT09PT09PT09PT09PT09PWZldGNoIGFsbCBzY2hlbWFz PT09PT09PT09PT09PT09PT09PT09PT09PT0jfQorU0VMRUNUIG5zcG5hbWUg QXMgc2NoZW1hIEZST00gcGdfbmFtZXNwYWNlCisgT1JERVIgQlkgbnNwbmFt ZQpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3Jv dXBzL3NlcnZlcnMvZGF0YWJhc2VzL2V4dGVuc2lvbnMvdGVtcGxhdGVzL2V4 dGVuc2lvbnMvc3FsL3VwZGF0ZS5zcWwgYi93ZWIvcGdhZG1pbi9icm93c2Vy L3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvZXh0ZW5zaW9ucy90 ZW1wbGF0ZXMvZXh0ZW5zaW9ucy9zcWwvdXBkYXRlLnNxbApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGNkNjI2Ci0tLSAvZGV2L251 bGwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3Nl cnZlcnMvZGF0YWJhc2VzL2V4dGVuc2lvbnMvdGVtcGxhdGVzL2V4dGVuc2lv bnMvc3FsL3VwZGF0ZS5zcWwKQEAgLTAsMCArMSwxMCBAQAoreyMgPT09PT09 PT09PT09PVVwZGF0ZSBleHRlbnNpb24gc2NoZW1hPT09PT09PT09PT09PSAj fQoreyUgaWYgZGF0YS5zY2hlbWEgYW5kIGRhdGEuc2NoZW1hICE9IG9fZGF0 YS5zY2hlbWEgJX0KK0FMVEVSIEVYVEVOU0lPTiB7eyBjb25ufHF0SWRlbnQo b19kYXRhLm5hbWUpIH19CisgICAgU0VUIFNDSEVNQSB7eyBjb25ufHF0SWRl bnQoZGF0YS5zY2hlbWEpIH19OworeyUgZW5kaWYgJX0KK3sjID09PT09PT09 PT09PT1VcGRhdGUgZXh0ZW5zaW9uIHZlcnNpb249PT09PT09PT09PT09ICN9 Cit7JSBpZiBkYXRhLnZlcnNpb24gYW5kIGRhdGEudmVyc2lvbiAhPSBvX2Rh dGEudmVyc2lvbiAlfQorQUxURVIgRVhURU5TSU9OIHt7IGNvbm58cXRJZGVu dChvX2RhdGEubmFtZSkgfX0KKyAgICBVUERBVEUgVE8ge3sgY29ubnxxdElk ZW50KGRhdGEudmVyc2lvbikgfX07Cit7JSBlbmRpZiAlfQo= --001a114691101280be052bcc055f 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 --001a114691101280be052bcc055f--